diff --git a/.gitignore b/.gitignore index 567849edaa6..d1b5fa53603 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Bazel bazel-apollo +bazel-apollo_dev bazel-bin bazel-genfiles bazel-out @@ -7,6 +8,8 @@ bazel-testlogs /Debug/ *.pyc WORKSPACE +# temporary files +*.swp # javascript *bundle.js @@ -15,6 +18,7 @@ node_modules # generated files generatedViews generatedScripts +modules/common/data/ssl_keys # database/log files *.sqlite dreamview.log @@ -26,6 +30,9 @@ npm-debug.log .settings .classpath +# Vscode files +.vscode + # atom.io files *.gch @@ -54,6 +61,24 @@ data/log data/core data/bag data/cov +data/pcd # Doxygen docs/doxygen + +# Esd can lib +third_party/can_card_library/esd_can/include +third_party/can_card_library/esd_can/lib + +# Map data files +modules/map/data + +# python proto +py_proto + +# gnss conf files +modules/drivers/gnss/conf/conf_beijing +modules/drivers/gnss/conf/conf_us + +# calibration files +modules/calibration/data/mkz056 diff --git a/FAQ.md b/FAQ.md index b348b612376..42ea26c24dd 100644 --- a/FAQ.md +++ b/FAQ.md @@ -19,7 +19,7 @@ Many build problems are related to the environment settings. 1. Run the script to get your environment: `bash scripts/env.sh >& env.txt` 2. Provide the content of env.txt in your post. -## Which ports need be white list to run Apollo in public cloud instance? +## Which ports must be whitelisted to run Apollo in a public cloud instance? Use these ports for HMI and Dreamview: - 8887: HMI - 8888: Dreamview diff --git a/WORKSPACE.in b/WORKSPACE.in index 161f123921b..1ee10ec9653 100644 --- a/WORKSPACE.in +++ b/WORKSPACE.in @@ -40,97 +40,6 @@ new_http_archive( url = "https://github.com/google/benchmark/archive/v1.1.0.tar.gz", ) -# proto rules (Protobuf and GRPC) -http_archive( - name = "org_pubref_rules_protobuf", - sha256 = "646b39438d8eeba02d9af890dee444c7e4e9d08ae8611bc0e0621257010162db", - strip_prefix = "rules_protobuf-0.7.1", - url = "https://github.com/pubref/rules_protobuf/archive/v0.7.1.tar.gz", -) - -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cpp_proto_repositories") - -cpp_proto_repositories( - lang_deps = { - # Grpc repo is required by multiple languages but we put it here. - "com_github_grpc_grpc": { - "rule": "git_repository", - "remote": "https://github.com/grpc/grpc.git", - "init_submodules": True, - "commit": "3808b6efe66b87269d43847bc113e94e2d3d28fb", - #"tag": "v1.0.1", - }, - - # Hooray! The boringssl team provides a "chromium-stable-with-bazel" branch - # with all BUILD files ready to go. - "boringssl": { - "rule": "http_archive", - "url": "https://github.com/wanglei828/third-party/raw/master/chromium-stable-with-bazel.zip", - }, - - # libssl is required for c++ grpc where it is expected in - # //external:libssl. This can be either boringssl or openssl. - "libssl": { - "rule": "bind", - "actual": "@boringssl//boringssl-chromium-stable-with-bazel:ssl", - }, - - # C-library for zlib - "com_github_madler_zlib": { - "rule": "new_git_repository", - "remote": "https://github.com/madler/zlib", - "tag": "v1.2.8", - "build_file": "third_party/com_github_madler_zlib.BUILD", - }, - - # grpc++ expects //external:zlib - "zlib": { - "rule": "bind", - "actual": "@com_github_madler_zlib//:zlib", - }, - - # grpc++ expects "//external:protobuf_clib" - "protobuf_clib": { - "rule": "bind", - "actual": "@com_github_google_protobuf//:protobuf", - }, - - # grpc++ expects //external:nanopb - "nanopb": { - "rule": "bind", - "actual": "@com_github_grpc_grpc//third_party/nanopb", - }, - - # Bind the executable cc_binary grpc plugin into - # //external:protoc_gen_grpc_cpp. Expects - # //external:protobuf_compiler. TODO: is it really necessary to - # bind it in external? - "protoc_gen_grpc_cpp": { - "rule": "bind", - "actual": "@com_github_grpc_grpc//:grpc_cpp_plugin", - }, - - # Bind the protobuf proto_lib into //external. Required for - # compiling the protoc_gen_grpc plugin - "protobuf_compiler": { - "rule": "bind", - "actual": "@com_github_google_protobuf//:protoc_lib", - }, - - # GTest is for our own internal cc tests. - "gtest": { - "rule": "new_git_repository", - "remote": "https://github.com/google/googletest.git", - "commit": "ed9d1e1ff92ce199de5ca2667a667cd0a368482a", - "build_file": "third_party/protobuf_gtest.BUILD", - }, - }, -) - -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_repositories") - -py_proto_repositories() - # cpplint from google style guide new_git_repository( name = "google_styleguide", @@ -171,5 +80,93 @@ new_http_archive( name = "ros", build_file = "third_party/ros.BUILD", strip_prefix = "ros", - url = "https://github.com/ApolloAuto/apollo-platform/releases/download/1.0.0/ros-indigo-apollo-1.0.0.MACHINE_ARCH.tar.gz", + url = "https://github.com/ApolloAuto/apollo-platform/releases/download/1.5.0/ros-indigo-apollo-1.5.0-MACHINE_ARCH.tar.gz", +) + +# OpenCV 2.4.13.2 +new_http_archive( + name = "opencv2", + build_file = "third_party/opencv2.BUILD", + strip_prefix = "opencv-2.4.13.2", + url = "https://github.com/opencv/opencv/archive/2.4.13.2.zip", +) + +# PCL 1.7 +# ======= +# This requires libpcl-dev to be installed in your Ubuntu/Debian. +new_local_repository( + name = "pcl", + build_file = "third_party/pcl.BUILD", + path = "/usr/local/include/pcl-1.7", +) + +new_local_repository( + name = "glew", + build_file = "third_party/glew.BUILD", + path = "/usr/include", +) + +new_local_repository( + name = "opengl", + build_file = "third_party/opengl.BUILD", + path = "/usr/include", +) + +new_local_repository( + name = "glfw", + build_file = "third_party/glfw.BUILD", + path = "/usr/include", +) + +new_local_repository( + name = "vtk", + build_file = "third_party/vtk.BUILD", + path = "/usr/include/vtk-5.8", +) + +# Caffe +new_local_repository( + name = "caffe", + build_file = "third_party/caffe.BUILD", + path = "/usr/include/caffe", +) + +# YAML-CPP +new_http_archive( + name = "yaml_cpp", + build_file = "third_party/yaml_cpp.BUILD", + strip_prefix = "yaml-cpp-yaml-cpp-0.5.3", + url = "https://github.com/jbeder/yaml-cpp/archive/yaml-cpp-0.5.3.zip", +) + +# qpOASES +new_http_archive( + name = "qp_oases", + build_file = "third_party/qp_oases.BUILD", + sha256 = "ae15eee80455c26d0c26078498893582b67b1d71df18f14f12591023561e5f88", + strip_prefix = "qpOASES-3.2.1", + url = "https://www.coin-or.org/download/source/qpOASES/qpOASES-3.2.1.zip", +) + +# Proj.4 +new_http_archive( + name = "proj4", + build_file = "third_party/proj4.BUILD", + strip_prefix = "proj.4-4.9.3", + url = "https://github.com/OSGeo/proj.4/archive/4.9.3.zip", +) + +# tinyxml2 +new_http_archive( + name = "tinyxml2", + build_file = "third_party/tinyxml2.BUILD", + strip_prefix = "tinyxml2-5.0.1", + url = "https://github.com/leethomason/tinyxml2/archive/5.0.1.zip", +) + +#protobuf 3.3 +http_archive( + name = "com_google_protobuf", + strip_prefix = "protobuf-3.3.0", + url = "https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz", ) diff --git a/apollo.sh b/apollo.sh index 8ca356c6a9a..d911b614163 100755 --- a/apollo.sh +++ b/apollo.sh @@ -82,51 +82,57 @@ function check_esd_files() { } function generate_build_targets() { - BUILD_TARGETS=$(bazel query //... | grep -v "_test$" | grep -v "third_party" \ - | grep -v "_cpplint$" | grep -v "release" | grep -v "kernel") + BUILD_TARGETS=$(bazel query //...) if [ $? -ne 0 ]; then fail 'Build failed!' fi - if ! $USE_ESD_CAN; then BUILD_TARGETS=$(echo $BUILD_TARGETS |tr ' ' '\n' | grep -v "hwmonitor" | grep -v "esd") fi } -function generate_test_targets() { - TEST_TARGETS=$(bazel query //... | grep "_test$" | grep -v "third_party" | grep -v "kernel") - if [ $? -ne 0 ]; then - fail 'Test failed!' - fi - - if ! $USE_ESD_CAN; then - TEST_TARGETS=$(echo $TEST_TARGETS| tr ' ' '\n' | grep -v "hwmonitor" | grep -v "esd") - fi -} - #================================================= # Build functions #================================================= -function apollo_build() { +function build() { START_TIME=$(get_now) echo "Start building, please wait ..." generate_build_targets - echo "Building on $MACHINE_ARCH, with targets:" - echo "$BUILD_TARGETS" - echo "$BUILD_TARGETS" | xargs bazel --batch --batch_cpu_scheduling build --jobs=10 --define ARCH="$MACHINE_ARCH" --define CAN_CARD=${CAN_CARD} --cxxopt=-DUSE_ESD_CAN=${USE_ESD_CAN} -c dbg + echo "Building on $MACHINE_ARCH..." + echo "$BUILD_TARGETS" | xargs bazel build $DEFINES -c $1 if [ $? -eq 0 ]; then success 'Build passed!' else fail 'Build failed!' fi - find bazel-genfiles/* -type d -exec touch "{}/__init__.py" \; + + # Build python proto + build_py_proto +} + +function apollo_build_dbg() { + build "dbg" +} + +function apollo_build_opt() { + build "opt" +} + +function build_py_proto() { + if [ -d "./py_proto" ];then + rm -rf py_proto + fi + mkdir py_proto + PROTOC='./bazel-out/host/bin/external/com_google_protobuf/protoc' + find modules/ -name "*.proto" | grep -v gnss | xargs ${PROTOC} --python_out=py_proto + find py_proto/* -type d -exec touch "{}/__init__.py" \; } function check() { local check_start_time=$(get_now) - apollo_build && run_test && run_lint + apollo_build_dbg && run_test && run_lint START_TIME=$check_start_time if [ $? -eq 0 ]; then @@ -157,16 +163,19 @@ function release() { # modules MODULES_DIR=$ROOT_DIR/modules mkdir -p $MODULES_DIR - for m in control canbus localization decision perception prediction planning + for m in control canbus localization decision perception \ + prediction planning routing calibration do TARGET_DIR=$MODULES_DIR/$m mkdir -p $TARGET_DIR - cp bazel-bin/modules/$m/$m $TARGET_DIR + if [ -e bazel-bin/modules/$m/$m ]; then + cp bazel-bin/modules/$m/$m $TARGET_DIR + fi if [ -d modules/$m/conf ];then cp -r modules/$m/conf $TARGET_DIR fi if [ -d modules/$m/data ];then - cp -r modules/$m/conf $TARGET_DIR + cp -r modules/$m/data $TARGET_DIR fi done @@ -180,6 +189,7 @@ function release() { # ros cp -Lr bazel-apollo/external/ros $ROOT_DIR/ + rm -f ${ROOT_DIR}/ros/*.tar.gz # scripts cp -r scripts $ROOT_DIR @@ -188,17 +198,32 @@ function release() { cp -Lr bazel-bin/modules/dreamview/dreamview.runfiles/apollo/modules/dreamview $MODULES_DIR cp -r modules/dreamview/conf $MODULES_DIR/dreamview + # map + mkdir $MODULES_DIR/map + cp -r modules/map/data $MODULES_DIR/map + # common data mkdir $MODULES_DIR/common cp -r modules/common/data $MODULES_DIR/common # hmi - mkdir -p $MODULES_DIR/hmi/ros_node $MODULES_DIR/hmi/utils - cp bazel-bin/modules/hmi/ros_node/ros_node_service $MODULES_DIR/hmi/ros_node/ + mkdir -p $MODULES_DIR/hmi/ros_bridge $MODULES_DIR/hmi/utils + cp bazel-bin/modules/hmi/ros_bridge/ros_bridge $MODULES_DIR/hmi/ros_bridge/ cp -r modules/hmi/conf $MODULES_DIR/hmi cp -r modules/hmi/web $MODULES_DIR/hmi cp -r modules/hmi/utils/*.py $MODULES_DIR/hmi/utils + # perception + cp -r modules/perception/model/ $MODULES_DIR/perception + + # gnss config + mkdir -p $MODULES_DIR/drivers/gnss + cp -r modules/drivers/gnss/conf/ $MODULES_DIR/drivers/gnss + + # velodyne launch + mkdir -p $MODULES_DIR/drivers/velodyne/velodyne + cp -r modules/drivers/velodyne/velodyne/launch $MODULES_DIR/drivers/velodyne/velodyne + # lib LIB_DIR=$ROOT_DIR/lib mkdir $LIB_DIR @@ -215,7 +240,8 @@ function release() { mkdir -p $MODULES_DIR/monitor/hwmonitor/hw/tools/ cp bazel-bin/modules/monitor/hwmonitor/hw/tools/esdcan_test_app $MODULES_DIR/monitor/hwmonitor/hw/tools/ fi - cp -r bazel-genfiles/* $LIB_DIR + cp -r bazel-genfiles/external $LIB_DIR + cp -r py_proto/modules $LIB_DIR # doc cp -r docs $ROOT_DIR @@ -229,14 +255,13 @@ function release() { } function gen_coverage() { - START_TIME=$(get_now) - bazel clean - generate_test_targets - echo "$TEST_TARGETS" | xargs bazel test --define ARCH="$(uname -m)" --define CAN_CARD=${CAN_CARD} --cxxopt=-DUSE_ESD_CAN=${USE_ESD_CAN} -c dbg --config=coverage + generate_build_targets + echo "$BUILD_TARGETS" | grep -v "cnn_segmentation_test" | xargs bazel test $DEFINES -c dbg --config=coverage if [ $? -ne 0 ]; then fail 'run test failed!' fi + COV_DIR=data/cov rm -rf $COV_DIR files=$(find bazel-out/local-dbg/bin/modules/ -iname "*.gcda" -o -iname "*.gcno" | grep -v external) @@ -245,6 +270,14 @@ function gen_coverage() { mkdir -p "$(dirname "$target")" cp "$f" "$target" done + + files=$(find bazel-out/local-opt/bin/modules/ -iname "*.gcda" -o -iname "*.gcno" | grep -v external) + for f in $files; do + target="$COV_DIR/objs/modules/${f##*modules}" + mkdir -p "$(dirname "$target")" + cp "$f" "$target" + done + lcov --capture --directory "$COV_DIR/objs" --output-file "$COV_DIR/conv.info" if [ $? -ne 0 ]; then fail 'lcov failed!' @@ -257,15 +290,19 @@ function gen_coverage() { "tools/*" \ -o $COV_DIR/stripped_conv.info genhtml $COV_DIR/stripped_conv.info --output-directory $COV_DIR/report - - success 'Generated coverage report in $COV_DIR/report/index.html' + echo "Generated coverage report in $COV_DIR/report/index.html" } function run_test() { START_TIME=$(get_now) - generate_test_targets - echo "$TEST_TARGETS" | xargs bazel test --define "ARCH=$MACHINE_ARCH" --define CAN_CARD=${CAN_CARD} --config=unit_test --cxxopt=-DUSE_ESD_CAN=${USE_ESD_CAN} -c dbg --test_verbose_timeout_warnings + generate_build_targets + if [ "$USE_GPU" == "1" ]; then + echo -e "${RED}Need GPU to run the tests.${NO_COLOR}" + echo "$BUILD_TARGETS" | xargs bazel test $DEFINES --config=unit_test -c dbg --test_verbose_timeout_warnings + else + echo "$BUILD_TARGETS" | grep -v "cnn_segmentation_test" | xargs bazel test $DEFINES --config=unit_test -c dbg --test_verbose_timeout_warnings + fi if [ $? -eq 0 ]; then success 'Test passed!' return 0 @@ -276,11 +313,12 @@ function run_test() { } function run_cpp_lint() { - bazel test --config=cpplint //... + generate_build_targets + echo "$BUILD_TARGETS" | xargs bazel test --config=cpplint -c dbg } function run_bash_lint() { - FILES=$(find "${APOLLO_ROOT_DIR}" -type f -name "*.sh" | grep -v ros | grep -v kernel) + FILES=$(find "${APOLLO_ROOT_DIR}" -type f -name "*.sh" | grep -v ros) echo "${FILES}" | xargs shellcheck } @@ -323,23 +361,9 @@ function buildify() { rm ~/.buildifier } -function print_usage() { - echo 'Usage: - ./apollo.sh [OPTION]' - echo 'Options: - build : run build only - buildify: fix style of BUILD files - check: run build/lint/test, please make sure it passes before checking in new code - clean: runs Bazel clean - config: run configurator tool - coverage: generate test coverage report - doc: generate doxygen document - lint: run code style check - print_usage: prints this menu - release: to build release version - test: run all the unit tests - version: current commit and date - ' +function build_fe() { + cd modules/dreamview/frontend + yarn build } function gen_doc() { @@ -375,13 +399,13 @@ function build_gnss() { protoc modules/drivers/gnss/proto/gnss.proto --cpp_out=./ protoc modules/drivers/gnss/proto/imu.proto --cpp_out=./ - protoc modules/drivers/gnss/proto/ins.proto --cpp_out=./ + protoc modules/drivers/gnss/proto/ins.proto --cpp_out=./ --python_out=./ protoc modules/drivers/gnss/proto/config.proto --cpp_out=./ - protoc modules/drivers/gnss/proto/gnss_status.proto --cpp_out=./ + protoc modules/drivers/gnss/proto/gnss_status.proto --cpp_out=./ --python_out=./ protoc modules/drivers/gnss/proto/gpgga.proto --cpp_out=./ cd modules - catkin_make_isolated --install --source drivers \ + catkin_make_isolated --install --source drivers/gnss \ --install-space "${ROS_PATH}" -DCMAKE_BUILD_TYPE=Release \ --cmake-args --no-warn-unused-cli find "${ROS_PATH}" -name "*.pyc" -print0 | xargs -0 rm -rf @@ -391,6 +415,7 @@ function build_gnss() { rm -rf modules/common/proto/*.pb.h rm -rf modules/drivers/gnss/proto/*.pb.cc rm -rf modules/drivers/gnss/proto/*.pb.h + rm -rf modules/drivers/gnss/proto/*_pb2.py rm -rf modules/localization/proto/*.pb.cc rm -rf modules/localization/proto/*.pb.h @@ -399,22 +424,93 @@ function build_gnss() { rm -rf modules/devel_isolated/ } +function build_velodyne() { + CURRENT_PATH=$(pwd) + if [ -d "${CURRENT_PATH}/bazel-apollo/external/ros" ]; then + ROS_PATH="${CURRENT_PATH}/bazel-apollo/external/ros" + else + warning "ROS not found. Run apolllo.sh build first." + exit 1 + fi + + source "${ROS_PATH}/setup.bash" + + cd modules + catkin_make_isolated --install --source drivers/velodyne \ + --install-space "${ROS_PATH}" -DCMAKE_BUILD_TYPE=Release \ + --cmake-args --no-warn-unused-cli + find "${ROS_PATH}" -name "*.pyc" -print0 | xargs -0 rm -rf + cd - + + rm -rf modules/.catkin_workspace + rm -rf modules/build_isolated/ + rm -rf modules/devel_isolated/ +} + function config() { ${APOLLO_ROOT_DIR}/scripts/configurator.sh } +function print_usage() { + RED='\033[0;31m' + BLUE='\033[0;34m' + BOLD='\033[1m' + NONE='\033[0m' + + echo -e "\n${RED}Usage${NONE}: + .${BOLD}/apollo.sh${NONE} [OPTION]" + + echo -e "\n${RED}Options${NONE}: + ${BLUE}build${NONE}: run build only + ${BLUE}build_opt${NONE}: build optimized binary for the code + ${BLUE}build_gpu${NONE}: run build only with Caffe GPU mode support + ${BLUE}build_opt_gpu${NONE}: build optimized binary with Caffe GPU mode support + ${BLUE}build_fe${NONE}: compile frontend javascript code, this requires all the node_modules to be installed already + ${BLUE}buildify${NONE}: fix style of BUILD files + ${BLUE}check${NONE}: run build/lint/test, please make sure it passes before checking in new code + ${BLUE}clean${NONE}: run Bazel clean + ${BLUE}config${NONE}: run configurator tool + ${BLUE}coverage${NONE}: generate test coverage report + ${BLUE}doc${NONE}: generate doxygen document + ${BLUE}lint${NONE}: run code style check + ${BLUE}usage${NONE}: print this menu + ${BLUE}release${NONE}: build release version + ${BLUE}test${NONE}: run all unit tests + ${BLUE}version${NONE}: display current commit and date + " +} + function main() { source_apollo_base apollo_check_system_config check_machine_arch check_esd_files + DEFINES="--define ARCH=${MACHINE_ARCH} --define CAN_CARD=${CAN_CARD} --cxxopt=-DUSE_ESD_CAN=${USE_ESD_CAN}" + case $1 in check) + DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY" check ;; build) - apollo_build + DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY" + apollo_build_dbg + ;; + build_opt) + DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY" + apollo_build_opt + ;; + build_gpu) + DEFINES="${DEFINES} --cxxopt=-DUSE_CAFFE_GPU" + apollo_build_dbg + ;; + build_opt_gpu) + DEFINES="${DEFINES} --cxxopt=-DUSE_CAFFE_GPU" + apollo_build_opt + ;; + build_fe) + build_fe ;; buildify) buildify @@ -422,6 +518,12 @@ function main() { buildgnss) build_gnss ;; + build_py) + build_py_proto + ;; + buildvelodyne) + build_velodyne + ;; config) config ;; @@ -432,6 +534,12 @@ function main() { run_lint ;; test) + DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY" + run_test + ;; + test_gpu) + DEFINES="${DEFINES} --cxxopt=-DUSE_CAFFE_GPU" + USE_GPU="1" run_test ;; release) @@ -449,6 +557,9 @@ function main() { version) version ;; + usage) + print_usage + ;; *) print_usage ;; diff --git a/apollo_docker.sh b/apollo_docker.sh index 04d003b4a7b..e47c6573c46 100755 --- a/apollo_docker.sh +++ b/apollo_docker.sh @@ -4,6 +4,8 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd "${DIR}" +# the machine type, currently support x86_64, aarch64 +MACHINE_ARCH=$(uname -m) source ${DIR}/scripts/apollo_base.sh TIME=$(date +%Y%m%d_%H%M) @@ -12,23 +14,34 @@ if [ -z "${DOCKER_REPO}" ]; then fi function print_usage() { - echo 'Usage: - ./apollo_docker.sh [OPTION]' - echo 'Options: - build : run build only - buildify: fix style of BUILD files - check: run build/lint/test, please make sure it passes before checking in new code - clean: runs Bazel clean - coverage: generate test coverage report - doc: generate doxygen document - push: pushes the images to Docker hub - gen: release a docker release image - lint: run code style check - release: to build release version - test: run all the unit tests - version: current commit and date - print_usage: prints this menu - ' + RED='\033[0;31m' + BLUE='\033[0;34m' + BOLD='\033[1m' + NONE='\033[0m' + + echo -e "\n${RED}Usage${NONE}: + .${BOLD}/apollo_docker.sh${NONE} [OPTION]" + + echo -e "\n${RED}Options${NONE}: + ${BLUE}build${NONE}: run build only + ${BLUE}build_opt${NONE}: build optimized binary for the code + ${BLUE}build_gpu${NONE}: run build only with Caffe GPU mode support + ${BLUE}build_opt_gpu${NONE}: build optimized binary with Caffe GPU mode support + ${BLUE}build_fe${NONE}: compile frontend javascript code, this requires all the node_modules to be installed already + ${BLUE}buildify${NONE}: fix style of BUILD files + ${BLUE}check${NONE}: run build/lint/test, please make sure it passes before checking in new code + ${BLUE}clean${NONE}: run Bazel clean + ${BLUE}config${NONE}: run configurator tool + ${BLUE}coverage${NONE}: generate test coverage report + ${BLUE}doc${NONE}: generate doxygen document + ${BLUE}lint${NONE}: run code style check + ${BLUE}usage${NONE}: print this menu + ${BLUE}release${NONE}: build release version + ${BLUE}test${NONE}: run all unit tests + ${BLUE}version${NONE}: display current commit and date + ${BLUE}push${NONE}: pushes the images to Docker hub + ${BLUE}gen${NONE}: release a docker release image + " } function start_build_docker() { @@ -39,10 +52,10 @@ function start_build_docker() { } function gen_docker() { - IMG="apolloauto/apollo:run-env-20170712_1738" + IMG="apolloauto/apollo:run-${MACHINE_ARCH}-20170917_1439" RELEASE_DIR=${HOME}/.cache/release - RELEASE_NAME="${DOCKER_REPO}:release-${TIME}" - DEFAULT_NAME="${DOCKER_REPO}:release-latest" + RELEASE_NAME="${DOCKER_REPO}:release-${MACHINE_ARCH}-${TIME}" + DEFAULT_NAME="${DOCKER_REPO}:release-${MACHINE_ARCH}-latest" docker pull $IMG docker ps -a --format "{{.Names}}" | grep 'apollo_release' 1>/dev/null @@ -66,8 +79,8 @@ function gen_docker() { } function push() { - local DEFAULT_NAME="${DOCKER_REPO}:release-latest" - local RELEASE_NAME="${DOCKER_REPO}:release-${TIME}" + local DEFAULT_NAME="${DOCKER_REPO}:release-${MACHINE_ARCH}-latest" + local RELEASE_NAME="${DOCKER_REPO}:release-${MACHINE_ARCH}-${TIME}" docker tag "$DEFAULT_NAME" "$RELEASE_NAME" docker push "$DEFAULT_NAME" docker push "$RELEASE_NAME" diff --git a/docker/dev.aarch64.dockerfile b/docker/dev.aarch64.dockerfile index 2017bbfb72e..aef8aca1cf8 100644 --- a/docker/dev.aarch64.dockerfile +++ b/docker/dev.aarch64.dockerfile @@ -3,7 +3,6 @@ FROM aarch64/ubuntu:16.04 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update -## the following commands are OK, skip running again RUN apt-get install -y build-essential RUN apt-get install -y apt-utils RUN apt-get install -y curl @@ -39,23 +38,23 @@ RUN apt-get install -y oracle-java8-installer RUN apt-get clean autoclean && apt-get autoremove -y RUN rm -fr /var/lib/apt/lists/* -## copy bazel to /usr/local/bin -RUN mkdir -p /usr/local/bin -WORKDIR /usr/local/bin/ -RUN wget https://github.com/startcode/bazel-arm64/releases/download/0.4.4/bazel-aarch64 && ln -rs bazel-aarch64 bazel - +# Install protobuf 3.3.0 WORKDIR /tmp -## install protobuf 3.1.0 -RUN wget https://github.com/google/protobuf/releases/download/v3.1.0/protobuf-cpp-3.1.0.tar.gz -RUN tar xzf protobuf-cpp-3.1.0.tar.gz -WORKDIR /tmp/protobuf-3.1.0 +RUN wget https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz +RUN tar xzf protobuf-cpp-3.3.0.tar.gz +WORKDIR /tmp/protobuf-3.3.0 RUN ./configure --prefix=/usr RUN make RUN make install +RUN chmod 755 /usr/bin/protoc -# set up node v8.0.0 -RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - -RUN apt-get install -y nodejs +# Set up node v8.0.0 +WORKDIR /tmp +RUN wget https://github.com/tj/n/archive/v2.1.0.tar.gz +RUN tar xzf v2.1.0.tar.gz +WORKDIR /tmp/n-2.1.0 +RUN make install +RUN n 8.0.0 ## Install required python packages. WORKDIR /tmp @@ -67,12 +66,9 @@ RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN apt-get update && apt-get install -y yarn -# Remove all temporary files. -RUN rm -fr /tmp/* - ENV ROSCONSOLE_FORMAT '${file}:${line} ${function}() [${severity}] [${time}]: ${message}' -# install dependency for ros build +# Install dependency for ros build RUN sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' RUN apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 @@ -92,3 +88,38 @@ RUN apt-get install -y zlib1g-dev ## https://stackoverflow.com/questions/25193161/chfn-pam-system-error-intermittently-in-docker-hub-builds RUN ln -s -f /bin/true /usr/bin/chfn + +# Install pcl and opencv, prerequisites for Caffe (CPU_ONLY mode) +RUN apt-get update +RUN apt-get install -y libatlas-base-dev +RUN apt-get install -y libflann-dev +RUN apt-get install -y libhdf5-serial-dev +RUN apt-get install -y libicu-dev +RUN apt-get install -y libleveldb-dev +RUN apt-get install -y liblmdb-dev +RUN apt-get install -y libopencv-dev +RUN apt-get install -y libopenni-dev +RUN apt-get install -y libqhull-dev +RUN apt-get install -y libsnappy-dev +RUN apt-get install -y libvtk5-dev +RUN apt-get install -y libvtk5-qt4-dev +RUN apt-get install -y mpi-default-dev + +ENV CAFFE_ROOT=/apollo/bazel-genfiles/external/caffe +RUN echo "$CAFFE_ROOT/lib" >> /etc/ld.so.conf.d/caffe.conf && ldconfig + +# Install Opengl +RUN echo "deb http://ppa.launchpad.net/keithw/glfw3/ubuntu trusty main" | tee -a /etc/apt/sources.list.d/fillwave_ext.list +RUN echo "deb-src http://ppa.launchpad.net/keithw/glfw3/ubuntu trusty main" | tee -a /etc/apt/sources.list.d/fillwave_ext.list +RUN apt-get update && apt-get install -y --force-yes libglfw3 libglfw3-dev freeglut3-dev + +# Install GLEW +WORKDIR /tmp +RUN wget https://github.com/nigels-com/glew/releases/download/glew-2.0.0/glew-2.0.0.zip +RUN unzip glew-2.0.0.zip +WORKDIR /tmp/glew-2.0.0 +RUN make && make install + +# Remove all temporary files. +WORKDIR / +RUN rm -fr /tmp/* diff --git a/docker/dev.x86_64.dockerfile b/docker/dev.x86_64.dockerfile index 40fdf74904c..360ea0743de 100644 --- a/docker/dev.x86_64.dockerfile +++ b/docker/dev.x86_64.dockerfile @@ -6,6 +6,7 @@ RUN apt-get update && apt-get install -y \ apt-transport-https \ bc \ build-essential \ + cmake \ cppcheck \ curl \ debconf-utils \ @@ -17,13 +18,14 @@ RUN apt-get update && apt-get install -y \ libcurl4-openssl-dev \ libfreetype6-dev \ lsof \ - python-pip \ python-matplotlib \ + python-pip \ python-scipy \ python-software-properties \ realpath \ software-properties-common \ unzip \ + vim \ wget \ zip @@ -39,29 +41,23 @@ RUN rm -fr /var/lib/apt/lists/* COPY ./modules/tools/py27_requirements.txt /tmp/ WORKDIR /tmp -# install protobuf 3.1.0 -RUN wget https://github.com/google/protobuf/releases/download/v3.1.0/protobuf-cpp-3.1.0.tar.gz -RUN tar xzf protobuf-cpp-3.1.0.tar.gz -WORKDIR /tmp/protobuf-3.1.0 -RUN ./configure --prefix=/usr -RUN make -RUN make install - -WORKDIR /tmp -RUN wget https://github.com/google/protobuf/releases/download/v3.1.0/protoc-3.1.0-linux-x86_64.zip -RUN unzip protoc-3.1.0-linux-x86_64.zip -d protoc3 -RUN mv protoc3/bin/protoc /usr/bin/ +# install protobuf 3.3.0 +RUN wget https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz +RUN tar xzf protobuf-cpp-3.3.0.tar.gz +WORKDIR /tmp/protobuf-3.3.0 +RUN ./configure --prefix=/usr && make && make install RUN chmod 755 /usr/bin/protoc -# set up node v8.0.0 +# Set up node v8.0.0 +WORKDIR /tmp RUN wget https://github.com/tj/n/archive/v2.1.0.tar.gz RUN tar xzf v2.1.0.tar.gz WORKDIR /tmp/n-2.1.0 RUN make install RUN n 8.0.0 -WORKDIR /tmp # Install required python packages. +WORKDIR /tmp RUN pip install -r py27_requirements.txt # Install yarn @@ -69,25 +65,22 @@ RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list RUN apt-get update && apt-get install -y yarn -# Remove all temporary files. -RUN rm -fr /tmp/* - ENV ROSCONSOLE_FORMAT '${file}:${line} ${function}() [${severity}] [${time}]: ${message}' -# install dependency for ros build +# Install dependency for ros build RUN sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' RUN apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 RUN apt-get update && apt-get install -y \ - ros-indigo-catkin \ libbz2-dev \ libconsole-bridge-dev \ - liblog4cxx10-dev \ libeigen3-dev \ + liblog4cxx10-dev \ liblz4-dev \ libpoco-dev \ libproj-dev \ libtinyxml-dev \ libyaml-cpp-dev \ + ros-indigo-catkin \ sip-dev \ uuid-dev \ zlib1g-dev @@ -97,3 +90,55 @@ RUN apt-get update && apt-get install shellcheck # https://stackoverflow.com/questions/25193161/chfn-pam-system-error-intermittently-in-docker-hub-builds RUN ln -s -f /bin/true /usr/bin/chfn + +# Install pcl and opencv, prerequisites for Caffe (CPU_ONLY mode) +RUN apt-get update && apt-get install -y \ + libatlas-base-dev \ + libflann-dev \ + libhdf5-serial-dev \ + libicu-dev \ + libleveldb-dev \ + liblmdb-dev \ + libopencv-dev \ + libopenni-dev \ + libqhull-dev \ + libsnappy-dev \ + libvtk5-dev \ + libvtk5-qt4-dev \ + mpi-default-dev + +# Install glog +WORKDIR /tmp +RUN wget https://github.com/google/glog/archive/v0.3.5.tar.gz +RUN tar xzf v0.3.5.tar.gz +WORKDIR /tmp/glog-0.3.5 +RUN ./configure && make && make install + +# Install gflags +WORKDIR /tmp +RUN wget https://github.com/gflags/gflags/archive/v2.2.0.tar.gz +RUN tar xzf v2.2.0.tar.gz +WORKDIR /tmp/gflags-2.2.0 +RUN mkdir build +WORKDIR /tmp/gflags-2.2.0/build +RUN CXXFLAGS="-fPIC" cmake .. && make && make install + +ENV CAFFE_ROOT=/apollo/bazel-genfiles/external/caffe +RUN echo "$CAFFE_ROOT/lib" >> /etc/ld.so.conf.d/caffe.conf && ldconfig + +# Install Opengl +RUN echo "deb http://ppa.launchpad.net/keithw/glfw3/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/fillwave_ext.list +RUN echo "deb-src http://ppa.launchpad.net/keithw/glfw3/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/fillwave_ext.list +RUN apt-get update && apt-get install -y --force-yes libglfw3 libglfw3-dev freeglut3-dev + +# Install GLEW +WORKDIR /tmp +RUN wget https://github.com/nigels-com/glew/releases/download/glew-2.0.0/glew-2.0.0.zip +RUN unzip glew-2.0.0.zip +WORKDIR /tmp/glew-2.0.0 +RUN make && make install +RUN ln -s /usr/lib64/libGLEW.so /usr/lib/libGLEW.so +RUN ln -s /usr/lib64/libGLEW.so.2.0 /usr/lib/libGLEW.so.2.0 + +# Remove all temporary files. +RUN rm -fr /tmp/* diff --git a/docker/run_env.dockerfile b/docker/run_env.dockerfile index 682e9a838a3..04242fe870e 100644 --- a/docker/run_env.dockerfile +++ b/docker/run_env.dockerfile @@ -1,52 +1,62 @@ FROM ubuntu:14.04 RUN apt-get update && apt-get install -y \ - curl \ build-essential \ + curl \ + git \ + libatlas-base-dev \ libboost-all-dev \ + libconsole-bridge-dev \ libcurl4-openssl-dev \ + libflann-dev \ libfreetype6-dev \ + libgflags-dev \ + libgoogle-glog-dev \ + libhdf5-serial-dev \ + libicu-dev \ + libleveldb-dev \ + liblmdb-dev \ liblog4cxx10 \ + liblz4-dev \ + libopencv-dev \ + libopenni-dev \ + libpoco-dev \ + libproj-dev \ libpython2.7-dev \ + libqhull-dev \ + libsnappy-dev \ + libtinyxml-dev \ + libvtk5-dev \ + libvtk5-qt4-dev \ libyaml-cpp-dev \ libyaml-dev \ - python-pip \ + mpi-default-dev \ python-matplotlib \ + python-pip \ python-scipy \ python-software-properties \ realpath \ + software-properties-common \ tmux \ unzip \ - wget \ - libtinyxml-dev \ - libpoco-dev \ - libproj-dev \ - liblz4-dev \ - libconsole-bridge-dev \ - git + wget RUN apt-get clean autoclean && apt-get autoremove -y RUN rm -fr /var/lib/apt/lists/* COPY ./modules/tools/py27_requirements.txt /tmp/ WORKDIR /tmp -# install protobuf 3.1.0 -RUN wget https://github.com/google/protobuf/releases/download/v3.1.0/protobuf-cpp-3.1.0.tar.gz -RUN tar xzf protobuf-cpp-3.1.0.tar.gz -WORKDIR /tmp/protobuf-3.1.0 -RUN ./configure --prefix=/usr -RUN make -RUN make install +# install protobuf 3.3.0 +RUN wget https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz +RUN tar xzf protobuf-cpp-3.3.0.tar.gz +WORKDIR /tmp/protobuf-3.3.0 +RUN ./configure --prefix=/usr && make && make install +RUN chmod 755 /usr/bin/protoc ENV ROSCONSOLE_FORMAT '${file}:${line} ${function}() [${severity}] [${time}]: ${message}' -WORKDIR /tmp -RUN wget https://github.com/google/protobuf/releases/download/v3.1.0/protoc-3.1.0-linux-x86_64.zip -RUN unzip protoc-3.1.0-linux-x86_64.zip -d protoc3 -RUN mv protoc3/bin/protoc /usr/bin/ -RUN chmod 755 /usr/bin/protoc - # set up node v8.0.0 +WORKDIR /tmp RUN wget https://github.com/tj/n/archive/v2.1.0.tar.gz RUN tar xzf v2.1.0.tar.gz WORKDIR /tmp/n-2.1.0 @@ -57,8 +67,21 @@ WORKDIR /tmp # Install required python packages. RUN pip install -r py27_requirements.txt -# Remove all temporary files. -RUN rm -fr /tmp/* - # https://stackoverflow.com/questions/25193161/chfn-pam-system-error-intermittently-in-docker-hub-builds RUN ln -s -f /bin/true /usr/bin/chfn + +# install Opengl +RUN echo "deb http://ppa.launchpad.net/keithw/glfw3/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/fillwave_ext.list +RUN echo "deb-src http://ppa.launchpad.net/keithw/glfw3/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/fillwave_ext.list +RUN apt-get update && apt-get install -y --force-yes libglfw3 libglfw3-dev + +WORKDIR /tmp +RUN wget https://github.com/nigels-com/glew/releases/download/glew-2.0.0/glew-2.0.0.zip +RUN unzip glew-2.0.0.zip +WORKDIR /tmp/glew-2.0.0 +RUN make && make install +RUN ln -s /usr/lib64/libGLEW.so /usr/lib/libGLEW.so +RUN ln -s /usr/lib64/libGLEW.so.2.0 /usr/lib/libGLEW.so.2.0 + +# Remove all temporary files. +RUN rm -fr /tmp/* diff --git a/docker/scripts/dev_create.sh b/docker/scripts/dev_create.sh index f911ff00225..060710d7639 100755 --- a/docker/scripts/dev_create.sh +++ b/docker/scripts/dev_create.sh @@ -16,13 +16,11 @@ # limitations under the License. ############################################################################### - TIME=$(date +%Y%m%d_%H%M) if [ -z "${DOCKER_REPO}" ]; then DOCKER_REPO=apolloauto/apollo fi - APOLLO_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../.." && pwd )" ARCH=$(uname -m) TAG="dev-${ARCH}-${TIME}" @@ -31,5 +29,3 @@ TAG="dev-${ARCH}-${TIME}" docker build -t "${DOCKER_REPO}:${TAG}" \ -f "${APOLLO_ROOT}/docker/dev.${ARCH}.dockerfile" \ "${APOLLO_ROOT}" - -sed -i "s/dev-${ARCH}-.*\"/${TAG}\"/g" ${APOLLO_ROOT}/docker/scripts/dev_start.sh diff --git a/docker/scripts/dev_into.sh b/docker/scripts/dev_into.sh index eb3d7e4d664..03adf78ca24 100755 --- a/docker/scripts/dev_into.sh +++ b/docker/scripts/dev_into.sh @@ -16,7 +16,6 @@ # limitations under the License. ############################################################################### - xhost +local:root 1>/dev/null 2>&1 docker exec \ -u $USER \ diff --git a/docker/scripts/dev_start.sh b/docker/scripts/dev_start.sh index e2031945bfd..d53ef72b8e7 100755 --- a/docker/scripts/dev_start.sh +++ b/docker/scripts/dev_start.sh @@ -18,7 +18,7 @@ VERSION="" ARCH=$(uname -m) -VERSION_X86_64="dev-x86_64-20170707_1129" +VERSION_X86_64="dev-x86_64-20170919_1058" VERSION_AARCH64="dev-aarch64-20170712_1533" if [[ $# == 1 ]];then VERSION=$1 @@ -36,38 +36,19 @@ if [ -z "${DOCKER_REPO}" ]; then fi IMG=${DOCKER_REPO}:$VERSION -LOCAL_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../.." && pwd )" +APOLLO_ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../.." && pwd )" -if [ ! -e "${LOCAL_DIR}/data/log" ]; then - mkdir -p "${LOCAL_DIR}/data/log" -fi -if [ ! -e "${LOCAL_DIR}/data/bag" ]; then - mkdir -p "${LOCAL_DIR}/data/bag" -fi -if [ ! -e "${LOCAL_DIR}/data/core" ]; then - mkdir -p "${LOCAL_DIR}/data/core" +if [ ! -e /apollo ]; then + sudo ln -sf ${APOLLO_ROOT_DIR} /apollo fi -source ${LOCAL_DIR}/scripts/apollo_base.sh +echo "/apollo/data/core/core_%e.%p" | sudo tee /proc/sys/kernel/core_pattern -function find_device() { - # ${1} = device pattern - local device_list=$(find /dev -name "${1}") - if [ -z "${device_list}" ]; then - warning "Failed to find device with pattern \"${1}\" ..." - else - local devices="" - for device in $(find /dev -name "${1}"); do - ok "Found device: ${device}." - devices="${devices} --device ${device}:${device}" - done - echo "${devices}" - fi -} +source ${APOLLO_ROOT_DIR}/scripts/apollo_base.sh function main(){ docker pull $IMG - + docker ps -a --format "{{.Names}}" | grep 'apollo_dev' 1>/dev/null if [ $? == 0 ]; then docker stop apollo_dev 1>/dev/null @@ -80,14 +61,7 @@ function main(){ display="${DISPLAY}" fi - - # setup CAN device - if [ ! -e /dev/can0 ]; then - sudo mknod --mode=a+rw /dev/can0 c 52 0 - fi - # enable coredump - echo "${LOCAL_DIR}/data/core/core_%e.%p" | sudo tee /proc/sys/kernel/core_pattern - + setup_device local devices="" devices="${devices} $(find_device ttyUSB*)" @@ -95,6 +69,7 @@ function main(){ devices="${devices} $(find_device can*)" devices="${devices} $(find_device ram*)" devices="${devices} $(find_device loop*)" + devices="${devices} $(find_device nvidia*)" USER_ID=$(id -u) GRP=$(id -g -n) GRP_ID=$(id -g) @@ -108,6 +83,7 @@ function main(){ fi docker run -it \ -d \ + --privileged \ --name apollo_dev \ -e DISPLAY=$display \ -e DOCKER_USER=$USER \ @@ -116,7 +92,7 @@ function main(){ -e DOCKER_GRP=$GRP \ -e DOCKER_GRP_ID=$GRP_ID \ -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ - -v $LOCAL_DIR:/apollo \ + -v $APOLLO_ROOT_DIR:/apollo \ -v /media:/media \ -v $HOME/.cache:${DOCKER_HOME}/.cache \ -v /etc/localtime:/etc/localtime:ro \ diff --git a/docker/scripts/release_into.sh b/docker/scripts/release_into.sh index 74e97cc2150..97f331f14bf 100755 --- a/docker/scripts/release_into.sh +++ b/docker/scripts/release_into.sh @@ -16,7 +16,6 @@ # limitations under the License. ############################################################################### - xhost +local:root 1>/dev/null 2>&1 docker exec \ -u $USER \ diff --git a/docker/scripts/release_start.sh b/docker/scripts/release_start.sh index eeca314408e..e869af6ab2f 100755 --- a/docker/scripts/release_start.sh +++ b/docker/scripts/release_start.sh @@ -17,33 +17,15 @@ ############################################################################### -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -if [ -e "$DIR/../../scripts/apollo_base.sh" ]; then - # run from source - APOLLO_ROOT_DIR=$(cd "${DIR}/../.." && pwd) -else - # run from script only - APOLLO_ROOT_DIR=~ -fi +APOLLO_ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")/../.." && pwd )" +# the machine type, currently support x86_64, aarch64 +MACHINE_ARCH=$(uname -m) source $APOLLO_ROOT_DIR/scripts/apollo_base.sh -export APOLLO_ROOT_DIR - -if [ ! -e "${APOLLO_ROOT_DIR}/data/log" ]; then - mkdir -p "${APOLLO_ROOT_DIR}/data/log" -fi -if [ ! -e "${APOLLO_ROOT_DIR}/data/bag" ]; then - mkdir -p "${APOLLO_ROOT_DIR}/data/bag" -fi -if [ ! -e "${APOLLO_ROOT_DIR}/data/core" ]; then - mkdir -p "${APOLLO_ROOT_DIR}/data/core" -fi - -echo "APOLLO_ROOT_DIR=$APOLLO_ROOT_DIR" +echo "/apollo/data/core/core_%e.%p" | sudo tee /proc/sys/kernel/core_pattern -VERSION=release-20170712_1820 +VERSION="release-${MACHINE_ARCH}-latest" if [[ $# == 1 ]];then VERSION=$1 fi @@ -52,21 +34,18 @@ if [ -z "${DOCKER_REPO}" ]; then fi IMG=${DOCKER_REPO}:$VERSION +DATA_DIR="${HOME}/data" +if [ ! -e "${DATA_DIR}/log" ]; then + mkdir -p "${DATA_DIR}/log" +fi + +if [ ! -e "${DATA_DIR}/bag" ]; then + mkdir -p "${DATA_DIR}/bag" +fi -function find_device() { - # ${1} = device pattern - local device_list=$(find /dev -name "${1}") - if [ -z "${device_list}" ]; then - warning "Failed to find device with pattern \"${1}\" ..." - else - local devices="" - for device in $(find /dev -name "${1}"); do - ok "Found device: ${device}." - devices="${devices} --device ${device}:${device}" - done - echo "${devices}" - fi -} +if [ ! -e "${DATA_DIR}/core" ]; then + mkdir -p "${DATA_DIR}/core" +fi function main() { docker pull "$IMG" @@ -77,13 +56,7 @@ function main() { docker rm -f apollo_release 1>/dev/null fi - # setup CAN device - if [ ! -e /dev/can0 ]; then - sudo mknod --mode=a+rw /dev/can0 c 52 0 - fi - - # enable coredump - echo "${APOLLO_ROOT_DIR}/data/core/core_%e.%p" | sudo tee /proc/sys/kernel/core_pattern + setup_device local devices="" devices="${devices} $(find_device ttyUSB*)" @@ -91,6 +64,7 @@ function main() { devices="${devices} $(find_device can*)" devices="${devices} $(find_device ram*)" devices="${devices} $(find_device loop*)" + devices="${devices} $(find_device nvidia*)" local display="" if [[ -z ${DISPLAY} ]];then display=":0" @@ -113,7 +87,7 @@ function main() { --name apollo_release \ --net host \ -v /media:/media \ - -v ${APOLLO_ROOT_DIR}/data:/apollo/data \ + -v ${HOME}/data:/apollo/data \ -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ -v /etc/localtime:/etc/localtime:ro \ -v $HOME/.cache:${DOCKER_HOME}/.cache \ @@ -134,7 +108,11 @@ function main() { $IMG if [ "${USER}" != "root" ]; then docker exec apollo_release bash -c "/apollo/scripts/docker_adduser.sh" - docker exec apollo_release bash -c "chown -R ${USER}:${GRP} /apollo" + docker exec apollo_release bash -c "chown -R ${USER}:${GRP} /apollo/data" + docker exec apollo_release bash -c "chmod a+rw -R /apollo/ros/share/velodyne_pointcloud" + docker exec apollo_release bash -c "chmod a+rw -R /apollo/modules/common/data" + docker exec apollo_release bash -c "chmod a+rw -R /apollo/ros/share/gnss_driver" + docker exec apollo_release bash -c "chmod a+rw -R /apollo/ros/share/velodyne" fi docker exec -u ${USER} -it apollo_release "/apollo/scripts/hmi.sh" } diff --git a/docker/scripts/run_env_create.sh b/docker/scripts/run_env_create.sh index f3ab1bb8b9b..8f767d04052 100755 --- a/docker/scripts/run_env_create.sh +++ b/docker/scripts/run_env_create.sh @@ -31,5 +31,3 @@ TAG="run-env-${TIME}" docker build -t "${DOCKER_REPO}:${TAG}" \ -f "${APOLLO_ROOT}/docker/run_env.dockerfile" \ "${APOLLO_ROOT}" - -sed -i "s/run-env.*\"/${TAG}\"/g" ${APOLLO_ROOT}/apollo_docker.sh diff --git a/docs/demo_guide/demo.bag b/docs/demo_guide/demo.bag index fa59566345d..f531ff79021 100644 Binary files a/docs/demo_guide/demo.bag and b/docs/demo_guide/demo.bag differ diff --git a/docs/demo_guide/demo_1.5.bag b/docs/demo_guide/demo_1.5.bag new file mode 100644 index 00000000000..7d0eef2b56e Binary files /dev/null and b/docs/demo_guide/demo_1.5.bag differ diff --git a/docs/howto/how_to_add_a_new_evaluator_in_prediction_module.md b/docs/howto/how_to_add_a_new_evaluator_in_prediction_module.md new file mode 100644 index 00000000000..a776026c983 --- /dev/null +++ b/docs/howto/how_to_add_a_new_evaluator_in_prediction_module.md @@ -0,0 +1,96 @@ +# How to add a new evaluator in prediction module + +## Introduction +Evaluator generates features (from the raw information of obstacles and the ego vehicle) to get the model output by applying the pre-trained deep learning model. + +## Steps to add a new evaluator +Please follow the steps to add a new evaluator named `NewEvaluator`. +* Add a field in proto +* Define a class that inherits `Evaluator` +* Implement the class `NewEvaluator` +* Update prediction conf +* Upate evaluator manager + +### Step 1: Add a field in proto +Assume the new evaluating result named `new_output` and also assume its type is `int32`. If the output is related directly to the obstacles, you can add it into `modules/prediction/proto/feature.proto` like this: +```cpp +message Feature { + // Other existing features + optional int32 new_output = 1000; +} +``` +If the output is related to the lane sequences, please add it into `modules/prediction/proto/lane_graph.proto` like this: +```cpp +message LaneSequence { + // Other existing features + optional int32 new_output = 1000; +} +``` + +### Step 2: Define a class that inherits `Evaluator` +Create a new file named `new_evaluator.h` in the folder `modules/prediction/evaluator/vehicle`. And define it like this: +```cpp + +#include "modules/prediction/evaluator/evaluator.h" + +namespace apollo { +namespace prediction { + +class MLPEvaluator : public Evaluator { + public: + MLPEvaluator(); + virtual ~MLPEvaluator(); + void Evaluate(Obstacle* obstacle_ptr) override; + // Other useful functions and fields. +}; + +} // namespace prediction +} // namespace apollo +``` + +### Step 3 Implement the class `NewEvaluator` +Create a new file named `new_evaluator.cc` in the same folder of `new_evaluator.h`. Implement it like this: +```cpp +#include "modules/prediction/evaluator/vehicle/new_evaluator.h" + +namespace apollo { +namespace prediction { + +NewEvaluator::NewEvaluator() { + // Implement +} + +NewEvaluator::~NewEvaluator() { + // Implement +} + +NewEvaluator::Evaluate(Obstacle* obstacle_ptr)() { + // Extract features + // Compute new_output by applying pre-trained model +} + +// Other functions + +} // namespace prediction +} // namespace apollo + +``` +### Step 4: Update prediction conf +In the file `modules/prediction/conf/prediction_conf.pb.txt`, update the field `evaluator_type` like this: +``` +obstacle_conf { + obstacle_type: VEHICLE + obstacle_status: ON_LANE + evaluator_type: NEW_EVALUATOR + predictor_type: NEW_PREDICTOR +} +``` + +### Step 5: Upate evaluator manager +Update `vehicle_on_lane_evaluator_` in `modlues/prediction/evaluator/evaluator_manager.h` like this: +```cpp + ObstacleConf::EvaluatorType vehicle_on_lane_evaluator_ = + ObstacleConf::NEW_EVALUATOR; +``` + +After this procedure, the new evaluator will be created. diff --git a/docs/howto/how_to_add_a_new_predictor_in_prediction_module.md b/docs/howto/how_to_add_a_new_predictor_in_prediction_module.md new file mode 100644 index 00000000000..10dc5f572b6 --- /dev/null +++ b/docs/howto/how_to_add_a_new_predictor_in_prediction_module.md @@ -0,0 +1,65 @@ +# How to add a new predictor in prediction module + +## Introduction +Predictor generates the predicted trajectory for each obstacle. Here assume we want to add a new predictor for vehicle, for other types of obstacles, the procedure is very similar. + +## Steps to add a new predictor +Please follow the steps to add a new predictor named `NewPredictor`. + +### Step 1: Define a class that inherits `Predictor` +Create a new file named `new_predictor.h` in the folder `modules/prediction/predictor/vehicle`. And define it like this: +```cpp + +#include "modules/prediction/predictor/predictor.h" + +namespace apollo { +namespace prediction { + +class NewPredictor : public Predictor { + public: + void Predict(Obstacle* obstacle) override; + // Other useful functions and fields. +}; + +} // namespace prediction +} // namespace apollo +``` + +### Step 2 Implement the class `NewPredictor` +Create a new file named `new_predictor.cc` in the same folder of `new_predictor.h`. Implement it like this: +```cpp +#include "modules/prediction/predictor/vehicle/new_predictor.h" + +namespace apollo { +namespace prediction { + +NewPredictor::Predict(Obstacle* obstacle)() { + // Get the results from evaluator + // Generate the predicted trajectory +} + +// Other functions + +} // namespace prediction +} // namespace apollo + +``` +### Step 3: Update prediction conf +In the file `modules/prediction/conf/prediction_conf.pb.txt`, update the field `predictor_type` like this: +``` +obstacle_conf { + obstacle_type: VEHICLE + obstacle_status: ON_LANE + evaluator_type: NEW_EVALUATOR + predictor_type: NEW_PREDICTOR +} +``` + +### Step 4: Upate predictor manager +Update `vehicle_on_lane_predictor_` in `modlues/prediction/predictor/predictor_manager.h` like this: +```cpp +ObstacleConf::PredictorType vehicle_on_lane_predictor_ = + ObstacleConf::NEW_PREDICTOR; +``` + +After this procedure, the new predictor will be created. diff --git a/docs/quickstart/apollo_1_0_quick_start_cn.md b/docs/quickstart/apollo_1_0_quick_start_cn.md index 1e8ed7d97d4..4f4bad3483c 100644 --- a/docs/quickstart/apollo_1_0_quick_start_cn.md +++ b/docs/quickstart/apollo_1_0_quick_start_cn.md @@ -25,14 +25,14 @@ _Apollo 快速入门指南 1.0_ 提供了所有关于了解、安装以及构建 下表列出了本文档中使用的归约: -| **Icon** | **描述** | +| **Icon** | **描述** | | ----------------------------------- | ---------------------------------------- | -| **粗体** | 重要 | -| `等宽字体` | 代码,类型数据 | -| _斜体_ | 文件标题,章节和标题使用的术语 | -| ![info](images/info_icon.png) | **Info** 包含可能有用的信息。忽略信息图标没有消极的后果 | -| ![tip](images/tip_icon.png) | **Tip**. 包括有用的提示或可能有助于您完成任务的捷径。 | -| ![online](images/online_icon.png) | **Online**. 提供指向特定网站的链接,您可以在其中获取更多信息 | +| **粗体** | 重要 | +| `等宽字体` | 代码,类型数据 | +| _斜体_ | 文件标题,章节和标题使用的术语 | +| ![info](images/info_icon.png) | **Info** 包含可能有用的信息。忽略信息图标没有消极的后果 | +| ![tip](images/tip_icon.png) | **Tip**. 包括有用的提示或可能有助于您完成任务的捷径。 | +| ![online](images/online_icon.png) | **Online**. 提供指向特定网站的链接,您可以在其中获取更多信息 | | ![warning](images/warning_icon.png) | **Warning**. 包含**不**能忽略的信息,或者执行某个任务或步骤时,您将面临失败风险 | # 概览 @@ -140,7 +140,7 @@ bash docker/scripts/release_into.sh [Apollo's Coordinate System](https://github.com/ApolloAuto/apollo/blob/master/docs/specs/coordination.pdf) 找到您当地的区号。例如,如果你在北京,中国,你必须设置`+zone=50`。 5. 通过修改以下文件,为GNSS驱动程序设置实时运动(RTK)基站: - `./ros/share/gnss_driver/conf/gnss_conf_mkz.txt` + `./ros/share/gnss_driver/conf/gnss_conf_mkz.txt` 有关典型的RTK设置,请参阅以下示例: @@ -191,7 +191,7 @@ bash docker/scripts/release_commit.sh - 打开平台车辆 - 打开工业PC机(IPC). - ![](images/ipc_power_on.png) + ![](images/IPC_powerbutton.png) - 通过按住电源按钮打开调制解调器电源,直到指示灯亮起 - 设置IPC的网络配置:静态IP(例如192.168.10.6),子网掩码(例如255.255.255.0)和网关(例如192.168.10.1) - 配置您的DNS服务器IP(例如,8.8.8.8)。 diff --git a/docs/quickstart/apollo_1_5_hardware_system_installation_guide.md b/docs/quickstart/apollo_1_5_hardware_system_installation_guide.md new file mode 100644 index 00000000000..c1c24c0c901 --- /dev/null +++ b/docs/quickstart/apollo_1_5_hardware_system_installation_guide.md @@ -0,0 +1,889 @@ +# Apollo 1.5 Hardware and System Installation Guide + +* [About This Guide](#about-this-guide) + * [Document Conventions](#document-conventions) +* [Introduction](#introduction) + * [Documentation](#documentation) +* [Key Hardware Components](#key-hardware-components) + * [Additional Components Required](#additional-components-required) + * [Onboard Computer System - IPC](#onboard-computer-system---ipc) + * [IPC Configuration](#ipc-configuration) + * [IPC Front and Rear Views](#ipc-front-and-rear-views) + * [Controller Area Network (CAN) Card](#controller-area-network-(can)-card) + * [Global Positioning System (GPS) and Inertial Measurement Unit (IMU)](#global-positioning-system-(gps)-and-inertial-measurement-unit-(imu)) + + * [Option 1: The NovAtel SPAN-IGM-A1](#option-1:-the-novatel-span-igm-a1) + * [Option 2: The NovAtel SPAN ProPak6 and NovAtel IMU-IGM-A1](#option-2:-the-novatel-span-propak6-and-novatel-imu-igm-a1) + * [The GPS Receiver/Antenna](#the-gps-receiver/antenna) +* [Overview of the Installation Tasks](#overview-of-the-installation-tasks) +* [Steps for the Installation Tasks](#steps-for-the-installation-tasks) + * [At the Office](#at-the-office) + * [Preparing the IPC](#preparing-the-ipc) + * [Installing the Software for the IPC](#installing-the-software-for-the-ipc) + * [In the Vehicle](#in-the-vehicle) + * [Prerequisites](#prerequisites) + * [Diagrams of the Major Component Installations](#diagrams-of-the-major-component-installations) + * [Installing the GPS Receiver and Antenna](#installing-the-gps-receiver-and-antenna) + * [Installing the Light Detection and Ranging System (LiDAR)](#installing-the-light-detection-and-ranging-system-(lidar)) + * [Installing the IPC](#installing-the-ipc) + * [Configuring the GPS and IMU](#configuring-the-gps-and-imu) +* [Setting up the Network](#setting-up-the-network) + * [Recommendations](#recommendations) +* [Additional Tasks Required](#additional-tasks-required) +* [Next Steps](#next-steps) + + +# About This Guide + +The *Apollo 1.5 Hardware and System Installation Guide* provides the instructions to install all of the hardware components and system software for the **Apollo Project **. The system installation information included pertains to the procedures to download and install the Apollo Linux Kernel. + +## Document Conventions + +The following table lists the conventions that are used in this document: + +| **Icon** | **Description** | +| ----------------------------------- | ---------------------------------------- | +| **Bold** | Emphasis | +| `Mono-space font` | Code, typed data | +| _Italic_ | Titles of documents, sections, and headings Terms used | +| ![info](images/info_icon.png) | **Info** Contains information that might be useful. Ignoring the Info icon has no negative consequences. | +| ![tip](images/tip_icon.png) | **Tip**. Includes helpful hints or a shortcut that might assist you in completing a task. | +| ![online](images/online_icon.png) | **Online**. Provides a link to a particular web site where you can get more information. | +| ![warning](images/warning_icon.png) | **Warning**. Contains information that must **not** be ignored or you risk failure when you perform a certain task or step. | + +# Introduction + +The **Apollo Project** is an initiative that provides an open, complete, and reliable software platform for Apollo partners in the automotive and autonomous driving industries. The aim of this project is to enable these entities to develop their own self-driving systems based on Apollo software stack. + +## Documentation + +The following set of documentation describes Apollo 1.5: + +- ***[Apollo Hardware and System Installation Guide]*** ─ Provides the instructions to install the hardware components and the system software for the vehicle: + + - **Vehicle**: + + - Industrial PC (IPC) + - Global Positioning System (GPS) + - Inertial Measurement Unit (IMU) + - Controller Area Network (CAN) card + - GPS Antenna + - GPS Receiver + - Light Detection and Ranging System (LiDAR) + + - **Software**: + - Ubuntu Linux + - Apollo Linux Kernel + - Nvidia GPU Driver + +- ***[Apollo Quick Start Guide]*** ─ A combination tutorial and roadmap that provide the complete set of end-to-end instructions. The Quick Start Guide also provides links to additional documents that describe the conversion of a regular car to an autonomous-driving vehicle. + + +# Key Hardware Components + +The key hardware components to install include: + +- Onboard computer system ─ Neousys Nuvo-6108GC +- Controller Area Network (CAN) Card ─ ESD CAN-PCIe/402-1 +- General Positioning System (GPS) and Inertial Measurement Unit (IMU) ─ + You can select one of the following options: + - NovAtel SPAN-IGM-A1 + - NovAtel SPAN® ProPak6™ and NovAtel IMU-IGM-A1 +- Light Detection and Ranging System (LiDAR) ─ Velodyne HDL-64E S3 + +## Additional Components Required + +You need to provide these additional components for the Additional Tasks Required: + +- A 4G router for Internet access +- A monitor, keyboard, and mouse for debugging at the car onsite +- Cables:a Digital Visual Interface (DVI) cable (optional), a customized cable for GPS-LiDAR time synchronization +- Apple iPad Pro: 9.7-inch, Wi-Fi (optional) + +The features of the key hardware components are presented in the subsequent sections. + +## Onboard Computer System - IPC + +The onboard computer system is an industrial PC (IPC) for the autonomous vehicle and uses the **NeousysNuvo-6108GC** that is powered by a sixth-generation Intel Xeon E3 1275 V5 CPU. + +The Neousys Nuvo-6108GC is the central unit of the autonomous driving system (ADS). + +### IPC Configuration + +Configure the IPC as follows: + +- ASUS GTX1080 GPU-A8G-Gaming GPU Card +- 32GB DDR4 RAM +- PO-280W-OW 280W AC/DC power adapter +- 2.5" SATA Hard Disk 1TB 7200rpm + +### IPC Front and Side Views + +The front and rear views of the IPC are shown with the Graphics Processing Unit (GPU) installed in the following pictures: + +The front view of the Nuvo-6108GC: + +![ipc_front](images/IPC-6108GC-front-side.jpg) + +The side view of the Nuvo-6108GC: + +![ipc_back](images/IPC-6108GC-left-side.jpg) + +For more information about the Nuvo-6108GC, see: + +![online](images/online_icon.png) +Neousys Nuvo-6108GC Product Page: + +[http://www.neousys-tech.com/en/product/application/rugged-embedded/nuvo-6108gc-gpu-computing](http://www.neousys-tech.com/en/product/application/rugged-embedded/nuvo-6108gc-gpu-computing) +![online](images/online_icon.png) + + +Neousys Nuvo-6108GC-Manual: + +**[Link Unavailable yet]** + +## Controller Area Network (CAN) Card + +The CAN card to use with the IPC is **ESD** **CAN-PCIe/402**. + +![can_card](images/can_card.png) + +For more information about the CAN-PCIe/402, see: + +![online](images/online_icon.png) ESD CAN-PCIe/402 Product Page: + +[https://esd.eu/en/products/can-pcie402](https://esd.eu/en/products/can-pcie402) + + + +## Global Positioning System (GPS) and Inertial Measurement Unit (IMU) + +There are **two** GPS-IMU **options** available,and the choice depends upon the one that most fits your needs: + +- **Option 1: NovAtel SPAN-IGM-A1** +- **Option 2: NovAtel SPAN® ProPak6™ and NovAtel IMU-IGM-A1** + +### Option 1: The NovAtel SPAN-IGM-A1 + +The NovAtel SPAN-IGM-A1 is an integrated, single-box solution that offers tightly coupled Global Navigation Satellite System (GNSS) positioning and inertial navigation featuring the NovAtel OEM615 receiver. + +![novatel_imu](images/Novatel_imu.png) + +For more information about the NovAtel SPAN-IGM-A1, see: + + ![online](images/online_icon.png) NovAtel SPAN-IGM-A1 Product Page: + +[https://www.novatel.com/products/span-gnss-inertial-systems/span-combined-systems/span-igm-a1/](https://www.novatel.com/products/span-gnss-inertial-systems/span-combined-systems/span-igm-a1/) + +### Option 2: The NovAtel SPAN ProPak6 and NovAtel IMU-IGM-A1 + +NovAtel ProPak6 is a standalone GNSS receiver. It works with a separate NovAtel- supported IMU (in this case, the NovAtel IMU-IGM-A1)to provide localization. + +The ProPak6 provides the latest and most sophisticated enclosure product manufactured by NovAtel. + +The IMU-IGM-A1 is an IMU that pairs with a SPAN-enabled GNSS receiver such as the SPAN ProPak6. + +![novatel_pp6](images/Novatel_pp6.png) + +For more information about the NovAtel SPAN ProPak6 and the IMU-IGM-A1, see: + + ![online](images/online_icon.png) NovAtel ProPak6 Installation & Operation Manual: + +[https://www.novatel.com/assets/Documents/Manuals/OM-20000148.pdf](https://www.novatel.com/assets/Documents/Manuals/OM-20000148.pdf) + + ![online](images/online_icon.png)NovAtel IMU-IGM-A1 Product Page: + +[https://www.novatel.com/products/span-gnss-inertial-systems/span-imus/span-mems-imus/imu-igm-a1/#overview](https://www.novatel.com/products/span-gnss-inertial-systems/span-imus/span-mems-imus/imu-igm-a1/#overview) + +## The GPS Receiver/Antenna + +The GPS Receiver/Antenna used with the GPS-IMU component is the **NovAtel GPS-703-GGG-HV**. + +**NOTE: **The GPS NovAtelGPS-703-GGG-HV works with either model of the two GPS-IMU options that are described in the previous section, Global Positioning System (GPS) and Inertial Measurement Unit (IMU). + +![gps_receiver](images/gps_receiver.png) + +For more information about the NovAtel GPS-703-GGG-HV, see: + + ![online](images/online_icon.png) NovAtel GPS-703-GGG-HV Product Page: + +[https://www.novatel.com/products/gnss-antennas/high-performance-gnss-antennas/gps-703-ggg-hv/](https://www.novatel.com/products/gnss-antennas/high-performance-gnss-antennas/gps-703-ggg-hv/) + +## Light Detection and Ranging System (LiDAR) +The 64 line LiDAR system **HDL-64E S3** is available from Velodyne Lidars, Inc. + +![lidar_image](images/lidar_pic.png) + +**Key Features:** + +- 64 Channels +- 120m range +- 2.2 Million Points per Second +- 360° Horizontal FOV +- 26.9° Vertical FOV +- 0.08° angular resolution (azimuth) +- <2cm accuracy +- ~0.4° Vertical Resolution +- User selectable frame rate +- Rugged Design + +![online](images/online_icon.png)Webpage for Velodyne HDL-64E S3: +http://velodynelidar.com/hdl-64e.html + +# Overview of the Installation Tasks + +Installing the hardware and the software components involves these tasks: + +**AT THE OFFICE:** +1. Prepare and then install the Controller Area Network (CAN) card by first repositioning the CAN card termination jumper before you insert the card into the slot. + +2. Install the hard drive (if none was pre-installed) in the IPC. + + You can also choose to replace a pre-installed hard drive if you prefer. + + **Recommendations** : + - Install a Solid-State Drive (SSD) for better reliability. + - Use a high-capacity drive if you need to collect driving data. + +3. Prepare the IPC for powering up: + a. Attach the power cable to the power connector (terminal block). + b. Connect the monitor, Ethernet, keyboard, and mouse to the IPC. + c. Connect the IPC to a power source. + +4. Install the software on the IPC (some Linux experience is required): + a. Install Ubuntu Linux. + b. Install the Apollo Linux kernel. + +**IN THE VEHICLE:** + +- Make sure that all the modifications for the vehicle, which are listed in the section Prerequisites, have been performed. + +- Install the major components (according to the illustrations and the instructions included in this document): + - GPS Antenna + - IPC + - GPS Receiver + - LiDAR + +The actual steps to install all of the hardware and software components are detailed in the section, Steps for the Installation Tasks. + +# Steps for the Installation Tasks + +This section describes the steps to install: + +- The key hardware and software components +- The hardware in the vehicle + +## At the Office + +Perform these tasks: + +- Prepare the IPC: + - Install the CAN card + - Install or replace the hard drive + - Prepare the IPC for powering up + +- Install the software for the IPC: + - Ubuntu Linux + - Apollo Kernel + - Nvidia GPU Driver + +### Preparing the IPC +Follow these steps: +1. Prepare and install the Controller Area Network (CAN) card: + In the Neousys Nuvo-6108GC, ASUS® GTX-1080GPU-A8G-GAMING GPU card is pre-installed into one of the three PCI slots. We still need to install a CAN card into a PCI slot. + a. Locate and unscrew the eight screws (shown in the brown squares or pointed by brown arrows) on the side of computer: + ![Positions_of_Screws](images/IPC-6108GC-Screw-Positions_labeled.png)b. Remove the cover from the IPC. 3 PCI slots (one occupied by the graphic card) locate on the base: + + ![removing the cover](images\Removing_the_cover.JPG) + + ![Before installing the CAN card](images/Before_installing_the_can_card.png) + + c. Set the CAN card termination jumper by removing the red jumper cap (shown in yellow circles) from its default location and placing it at its termination position: + + ![prepare_can_card](images/prepare_can_card.png) + + **![warning](images/warning_icon.png)WARNING**: The CAN card will not work if the termination jumper is not set correctly. + + d. Insert the CAN card into the slot in the IPC: + + ![installed CAN](images/After installing the CAN Card.png) + + e. Reinstall the cover for the IPC + + ![IPC-6108GC-Screw-Positions.png](images/IPC-6108GC-Screw-Positions.png) + +2. Prepare the IPC for powering up: + + a. Attach the power cable to the power connector (terminal block) that comes with the IPC: + + ![warning_icon](images/warning_icon.png)**WARNING**: Make sure that the positive(labeled **R** for red) and the negative(labeled **B** for black) wires of the power cable are inserted into the correct holes on the power terminal block. + +3. ![ipc_power_RB](images/ipc_power_RB.png) + + b. Connect the monitor, Ethernet cable, keyboard, and mouse to the IPC: + +4. ![IPC-6108GC-CableConnected-overexposed.png](images/IPC-6108GC-CableConnected-overexposed.png) + +![warning](images/tip_icon.png)It is recommended to configure the fan speed through BIOS settings, if one or more plugin card is added to the system + + - While starting up the computer, press F2 to enter BIOS setup menu. + - Go to [Advanced] => [Smart Fan Setting] + - Set [Fan Max. Trip Temp] to 50 + - Set [Fan Start Trip Temp] to 20 + + +![tip_icon](images/tip_icon.png)It is recommended that you use a Digital Visual Interface (DVI) connector on the graphic card for the monitor. To set the display to the DVI port on the motherboard, following is the setting procedure: + + - While starting up the computer, press F2 to enter BIOS setup menu. + - Go to [Advanced]=>[System Agent (SA) Configuration]=>[Graphics Configuration]=>[Primary Display]=> Set the setting to "PEG" +![tip_icon](images/tip_icon.png)It is recommended to configure the IPC to run at maximum performance mode at all time: + - While starting up the computer, press F2 to enter BIOS setup menu. + - Go to [Power] => [SKU POWER CONFIG] => set the setting to "MAX. TDP" + +c. Connect the power: + +![IPC-6108GC-PowerCable.JPG](images/IPC-6108GC-PowerCable.JPG) + + +### Installing the Software for the IPC + +This section describes the steps to install: + +- Ubuntu Linux +- Apollo Kernel +- Nvidia GPU Driver + +![tip_icon](images/tip_icon.png)It is assumed that you have experience working with Linux to successfully perform the software installation. + +#### Installing Ubuntu Linux +Follow these steps: + +1. Create a bootable Ubuntu Linux USB flash drive: + + Download Ubuntu (or a variant such as Xubuntu) and follow the online instructions to create a bootable USB flash drive. + +![tip_icon](images/tip_icon.png)It is recommended that you use **Ubuntu 14.04.3**. + +![tip_icon](images/tip_icon.png)You can type F2 during the system boot process to enter the BIOS settings. It is recommended that you disable Quick Boot and Quiet Boot in the BIOS to make it easier to catch any issues in the boot process. + +For more information about Ubuntu, see: +![online_icon](images/online_icon.png) Ubuntu for Desktop web site: + +[https://www.ubuntu.com/desktop](https://www.ubuntu.com/desktop) + +2. Install Ubuntu Linux: + + a. Insert the Ubuntu installation drive into a USB port and turn on the system. + b. Install Linux by following the on-screen instructions. + +3. Perform a software update and the installation: + a. Reboot into Linux after the installation is done. + b. Launch the Software Updater to update to the latest software packages (for the installed distribution) or type the following commands in a terminal program such as GNOME Terminal. + ```shell + sudo apt-get update; sudo apt-get upgrade + ``` + + c. Launch a terminal program such as GNOME Terminal and type the following command to install the Linux 4.4 kernel: + +```shell +sudo apt-get install linux-generic-lts-xenial +``` +![tip_icon](images/tip_icon.png)The IPC must have Internet access to update and install software. Make sure that the Ethernet cable is connected to a network with Internet access. You might need to configure the network for the IPC if the network that it is connected to is not using the Dynamic Host Configuration Protocol (DHCP). + + +#### Installing the Apollo Kernel + +The Apollo runtime in the vehicle requires the [Apollo Kernel](https://github.com/ApolloAuto/apollo-kernel). You are strongly recommended to install the pre-built kernel. + +##### Use pre-built Apollo Kernel. + +You get access and install the pre-built kernel with the following commands. + +1. Download the release packages from the release section on github +``` +https://github.com/ApolloAuto/apollo-kernel/releases +``` +2. Install the kernel + After having the release package downloaded: +``` +tar zxvf linux-4.4.32-apollo-1.0.0.tar.gz +cd install +sudo bash install_kernel.sh +``` +3. Reboot your system by the `reboot` command + +4. Build the ESD CAN driver source code + Now you need to build the ESD CAN driver source code according to [ESDCAN-README.md](https://github.com/ApolloAuto/apollo-kernel/blob/master/linux/ESDCAN-README.md) + +##### Build your own kernel. +If have modified the kernel, or the pre-built kernel is not the best for your platform, you can build your own kernel with the following steps. + +1. Clone the code from repository +``` +git clone https://github.com/ApolloAuto/apollo-kernel.git +cd apollo-kernel +``` +2. Add the ESD CAN driver source code according to [ESDCAN-README.md](https://github.com/ApolloAuto/apollo-kernel/blob/master/linux/ESDCAN-README.md) + +3. Build the kernel with the following command. +``` +bash build.sh +``` +4. Install the kernel the same way as using a pre-built Apollo Kernel. + +#### Installing Nvidia GPU Driver + +The Apollo runtime in the vehicle requires the [Nvidia GPU Driver](http://www.nvidia.com/download/driverResults.aspx/114708/en-us). You are required to install the Nvidia GPU driver with specific options. + +1. Download the installation files +``` +wget http://us.download.nvidia.com/XFree86/Linux-x86_64/375.39/NVIDIA-Linux-x86_64-375.39.run +``` + +2. Start the installation +``` +sudo bash ./NVIDIA-Linux-x86_64-375.39.run --no-kernel-module --no-x-check -a -s +``` + +3. Reboot your system by the `sudo reboot` command + +##### Optional: Test the ESD CAN device node +After rebooting the IPC with the new kernel: + +a. Create the CAN device node by issuing the following commands in a terminal: + +```shell +cd /dev; sudo mknod –-mode=a+rw can0 c 52 0 +``` +b. Test the CAN device node using the test program that is part of the ESD CAN software package that you have acquired from ESD Electronics. + + +The IPC is now ready to be mounted on the vehicle. + +## In the Vehicle + +Perform these tasks: + +- Make the necessary modifications to the vehicle as specified in the list of prerequisites +- Install the major components: + - GPS Antenna + - IPC + - GPS Receiver + - LiDAR + + +### Prerequisites + +**![warning_icon](images/warning_icon.png)WARNING**: Prior to mounting the major components (GPS Antenna, IPC, and GPS Receiver) in the vehicle, certain modifications must be performed as specified in the list of prerequisites. The instructions for making the mandatory changes in the list are outside the scope of this document. + +The list of prerequisites are as follows: + +- The vehicle must be modified for “drive-by-wire” technology by a professional service company. Also, a CAN interface hookup must be provided in the trunk where the IPC will be mounted. +- A power panel must be installed in the trunk to provide power to the IPC and the GPS-IMU. The power panel would also service other devices in the vehicle such as a 4G LTE router. The power panel should be hooked up to the power system in the vehicle. +- A custom-made rack must be installed to mount the GPS-IMU Antenna and the LiDAR on top of the vehicle. +- A custom-made rack must be installed to mount the GPS-IMU in the trunk. +- A 4G LTE router must be mounted in the trunk to provide Internet access for the IPC. The router must have built-in Wi-Fi access point (AP) capability to connect to other devices, such as an iPad, to interface with the autonomous driving (AD) system. A user would be able to use the mobile device to start AD mode or monitor AD status, for example. + +### Diagrams of the Major Component Installations + +The following two diagrams indicate the locations of where the three major components (GPS Antenna, IPC, GPS Receiver and LiDAR) should be installed on the vehicle: + + + +![major_compoment_side_view](images/Car_Sideview.png) + + + +![major_component_rear_view](images/Car_Rearview.png) + + + +### Installing the GPS Receiver and Antenna + +This section provides general information about installing **one** of two choices: + +- **Option 1:** GPS-IMU: **NovAtel SPAN-IGM-A1** +- **Option 2:** GPS-IMU: **NovAtel SPAN® ProPak6™ and NovAtel IMU-IGM-A1** + +#### Option 1: Installing the NovAtel SPAN-IGM-A1 + +The installation instructions describe the procedures to mount, connect, and take the lever arm measurements for the GPS-IMU NovAtel SPAN-IGM-A1. + +##### Mounting + +You can place the GPS-IMU NovAtel SPAN-IGM-A1 in most places in the vehicle but it is suggested that you follow these recommendations: + +- Place and secure the NovAtel SPAN-IGM-A1 inside the trunk with the Y-axis pointing forward. +- Mount the NovAtel GPS-703-GGG-HV antenna in an unobscured location on top of the vehicle. + +##### Wiring + +You must connect two cables: + +- The antenna cable ─ Connects the GNSS antenna to the antenna port of the SPAN-IGM-A1 +- The main cable: + - Connects its 15-pin end to the SPAN-IGM-A1 + - Connects its power wires to a power supply of 10-to-30V DC + - Connects its serial port to the IPC. If the power comes from a vehicle battery, add an auxiliary battery (recommended). + + +![imu_main_cable_connection](images/imu_main_cable_connection.png) + +Main Cable Connections + +For more information, see the *SPAN-IGM™ Quick Start Guide*, page 3, for a detailed diagram: + +![online_icon](images/online_icon.png)SPAN-IGM™ Quick Start Guide + +[http://www.novatel.com/assets/Documents/Manuals/GM-14915114.pdf](http://www.novatel.com/assets/Documents/Manuals/GM-14915114.pdf) + +##### Taking the Lever Arm Measurement + +When the SPAN-IGM-A1 and the GPS Antenna are in position,the distance from the SPAN-IGM-A1 to the GPS Antenna must be measured. The distance should be measured as: X offset, Y offset, and Z offset. + +The error of offset must be within one centimeter to achieve high accuracy. For more information, see the *SPAN-IGM™ Quick Start Guide*, page 5, for a detailed diagram. + +For an additional information about the SPAN-IGM-A1, see: + +![online_icon](images/online_icon.png)SPAN-IGM™ User Manual: + +[http://www.novatel.com/assets/Documents/Manuals/OM-20000141.pdf](http://www.novatel.com/assets/Documents/Manuals/OM-20000141.pdf) + + + +#### Option 2: Installing NovAtel SPAN® ProPak6™ and NovAtel IMU-IGM-A1 + +The installation instructions describe the procedures to mount, connect, and take the lever arm measurements for the GPS NovAtel SPAN® ProPak6™ **and** the NovAtel IMU-IGM-A1. + +##### Components for the Installation + +The components that are required for the installation include: + +- NovAtel GPS SPAN ProPak6 + +- NovAtel IMU-IGM-A1 + +- NovAtel GPS-703-GGG-HV Antenna + +- NovAtel GPS-C006 Cable (to connect antenna to GPS) + +- NovAtel 01019014 Main Cable (to connect GPS to a serial port the IPC) + +- Data Transport Unit (DTU) – similar to a 4G router + +- Magnetic adapters (for antenna and DTU) + +- DB9 Straight Through Cable + +##### Mounting + +You can place the two devices, the ProPak6 and the IMU in most places in the vehicle, but it is suggested that you follow these recommendations: + +- Place and secure the ProPak6 and the IMU side-by-side inside the trunk with the Y-axis pointing forward. +- Mount the NovAtel GPS-703-GGG-HV antenna on top of the vehicle or on top of the trunk lid as shown: + +![gps_receiver_on_car](images/gps_receiver_on_car.png) + +- Use a magnetic adapter to tightly attach the antenna to the trunk lid. +- Install the antenna cable in the trunk by opening the trunk and placing the cable in the space between the trunk lid and the body of the car. + +##### Wiring + +Follow these steps to connect the ProPak6 GNSS Receiver and the IMU to the Apollo system: + +1. Use the split cable that comes with IMU-IGM-A1 to connect the IMU Main port and theProPak6 COM3/IMU port. +2. Use a USB-A-to-MicroUSB cable to connect the USB port of the IPC and the MicroUSB port of the ProPak6. +3. Connect the other end of the IMU-IGM-A1 split cable to the vehicle power. +4. Connect the GNSS antenna to Propak6. +5. Connect the Propak6 power cable. + +![wiring](images/wiring.png) + +For more information about the NovAtel SPAN ProPak6, see: + +![online_icon](images/online_icon.png)NovAtel ProPak6 Installation& Operation Manual: + +[https://www.novatel.com/assets/Documents/Manuals/OM-20000148.pdf](https://www.novatel.com/assets/Documents/Manuals/OM-20000148.pdf) + + + +### Installing the Light Detection and Ranging System (LiDAR) + +This section provides descriptions on the installation procedure of HDL-64E S3 LiDAR + +#### Mounting + +A customized mounting structure is required to successfully mount an HDL64E S3 LiDAR on top of a vehicle. This structure needs to provide rigid support to the LiDAR system while raising the LiDAR to certain height above the ground to avoid the laser beams from the liDAR being blocked by the front and/or rear of the vehicle. The actual height needed for the LiDAR depends on the design of the vehicle and the mounting point of the LiDAR relative to the vehicle. The vertical tilt angle of the lasers normally ranges from +2~-24.8 degrees relative to the horizon. To fully utilize the angle range for detection, on a Lincoln MKZ, we recommend mounting the LiDAR at a minimum height of 1.8 meters (from ground to the base of the LiDAR). + +#### Wiring + +Each HDL-64E S3 LiDAR includes a cablebundle to connect the LiDAR to power supply, computer (Ethernet for data transfer, and serial port for LiDAR configuration) and GPS timesync source. + +![LiDAR_Cable](images/HDL64_Cable_whitened_labeled.png) + +1. Connection to the LiDAR + + Connect the power and signal cable to the matching ports on the LiDAR + + ![HDL64_Cabling](images/HDL64_Cabling.JPG) + +2. Connection to Power Source + + The two AWG 16 wires are used to power HDL-64E S3 Lidar. It requires about 3A at 12V. To make connection to the power source, make full contact with the wires and tighten the screws. + + ![HDL64_Power_Cable](images/HDL64_PowerCable.JPG) + +3. Conection to IPC + + The connection to IPC is through an ethernet cable. Plug the ethernet connector in the cable bundle into an ethernet port on the IPC + +4. Connection to GPS: + + HDL64E S3 LiDAR requires the Recommended minimum specific GPS/Transit data (GPRMC) and pulse per second (PPS)signal to synchronize to the GPS time. Customized connection is needed to establish the communication between the GPS receiver and the LiDAR: + + a. SPAN-IGM-A1 + + If you configured the SPAN-IGM-A1 as specified in [Configuring the GPS and IMU](#configuring-the-gps-and-imu), the GPRMC signal is sent from the GPS receiver via the User Port cable from the Main port. The PPS signal is sent through the wire cables labeled as “PPS” and “PPS dgnd” from the Aux port. The dash-line boxes in the figure below are available connections that comes with the HDL64E S3 LiDAR and the SPAN-IGM-A1 GPS receiver. The remaining connections need to be made by the user. + + ![Wiring_Schematics_IGM_A1](images/LiDAR_A1_wiring.png) + + b. Propak 6 and IMU-IGM-A1 + + If you configured the Propak 6 as specified in [Configuring the GPS and IMU](#configuring-the-gps-and-imu), the GPRMC signal is sent from the GPS receiver via COM2 port. The PPS signal is sent through the IO port. The dash-line boxes in the figure below are available connections that comes with the HDL-64E S3 LiDAR and the Propak 6 GPS receiver. The remaining connections need to be made by the user. + + ![Wiring_Schematics_PP6](images/LiDAR_PP6_wiring.png) + +5. Connection through serial port for LiDAR configuration + + Some of the low-level parameters can be configured through serial port. Within the cable bundle provided by Velodyne Lidar, Inc., there are two pairs of red/black cables as shown in the pinout table below. The thicker pair (AWG 16) is used to power the LiDAR system. The thinner pair is used for serial connection. Connect the black wire (Serial In) to RX, the red wire to Ground of a serial cable. Connect the serial cable with a USB-serial adapter to a computer of choice. + + ![pinout_table](images/pinout_table.png) + + #### Configuration + + By default HDL-64E S3 has the network IP address setting as 192.168.0.1. However, when we set up for Apollo, we should to change network IP address to 192.168.20.13 . We can use terminal application with termite3.2 and enter the network setting command. The IP address of HDL-64E S3 can be configured following the steps below: + + 1. Connect one side of serial cable to your laptop + + 2. Connect the other side of serial cable to HDL-64E S3’s serial wires + + 3. COM port default setting + + Baudrate: 9600 + + Parity: None + + Data bits: 8 + + Stop bits: 1 + + 4. COM port application + + Download termite3.2 from the link below and install it on your laptop (Windows) + + [http://www.compuphase.com/software_termite.htm](http://www.compuphase.com/software_termite.htm) + + 5. Serial cable connection for COM port between HDL-64E S3 and Laptop + + ![Serial cable connected to laptop.png](images/Serial cable connected to laptop.png) + + 6. Launch **Termite 3.2** from laptop + + 7. Issue a serial command for setting up HDL-64E S3’s IP addresses over serial port "\#HDLIPA192168020013192168020255" + + 8. The unit must be power cycled to adopt the new IP addresses + + ![Issuing the serial command](images/Issuing_the_serial_command.png) + + ![online_icon](images/online_icon.png)HDL-64E S3 Manual can be found on this webpage: + + [http://velodynelidar.com/hdl-64e.html](http://velodynelidar.com/hdl-64e.html) + +### Installing the IPC + +Follow these steps: + +1. Use a voltage converter/regulator to convert the 12 VDC output from the vehicle to desired voltage to power IPC. + + As recommended by Neousys, use a 12 VDC to 19 VDC converter with maximal output current of 20 A. + + ![voltage_regulater_converter](images/voltage_converter2.jpg) + + First, connect the two 19 VDC output wires to IPC's power connector (Green as shown below). + + ![ipc_power_RB](images/ipc_power_RB.png) + + Secondly, connect the two cables of 12 VDC input to the power panel in the vehicle. If the size of the wire is too thick, the wire should be splitted to several wires and connect to corresponding ports, respectively. + + ![warning](images/warning_icon.png)This step is necessary. If the input voltage goes below the required limit. It is highly probable to cause system failure. + + +2. Place the onboard computer system, the 6108GC, inside the trunk (recommended). + + For example, Apollo 1.5 uses 4x4 self-tapping screws to bolt the 6108GC to the carpeted floor of the trunk. ![IPC-bolt_down-936x720](images/Mount_ipc_on_carpet.JPG) + +3. Mount the IPC so that its front and back sides(where all ports are located) face the right side (passenger) or the left side(driver) of the trunk. + +This positioning makes it easier to connect all of the cables. + +For more information, see: + +![online_icon](images/online_icon.png)Neousys Nuvo-6108GC – Manual: + +**[Link Unavailable]** + +4. Connect all cables, which include: + +- Power cable + +- Controller Area Network (CAN) cable + +- Ethernet cable from the 4G router to the IPC + +- GPS Receiver to the IPC + +- (Optional) Monitor, keyboard, mouse + + +a. Connect the power cable to the IPC (as shown): + +b. Connect the other end of the power cable to the vehicle battery (as shown): + + +![IPC-power-cable](images/IPC-power-cable.jpg) + +c. Connect the DB9 cable to the IPC to talk to the CAN (as shown): + +![DB9_cable](images/DB9_cable.png) + +d. Connect: + +- the Ethernet cable from the 4G router to the IPC + +- the GPS Receiver to the IPC + +- (optional) the monitor: + +![IPC-power-842x636](images/cable_connected_incar.JPG) + + + +#### Taking the Lever Arm Measurement + +Follow these steps: + +1. Before taking the measurement, turn on the IPC. + + +2. When the IMU and the GPS Antenna are in position, the distance from the IMU to the GPS Antenna must be measured. The distance should be measured as: X offset, Yoffset, and Z offset. The error of offset must be within one centimeter to achieve high accuracy in positioning and localization. + +For an additional information, see: + +![online_icon](images/online_icon.png)NovAtel ProPak6 Installation & Operation Manual: + +[https://www.novatel.com/assets/Documents/Manuals/OM-20000148.pdf](https://www.novatel.com/assets/Documents/Manuals/OM-20000148.pdf) + +![online_icon](images/online_icon.png)NovAtel SPAN-IGM-A1 Product Page: + +[https://www.novatel.com/products/span-gnss-inertial-systems/span-combined-systems/span-igm-a1/](https://www.novatel.com/products/span-gnss-inertial-systems/span-combined-systems/span-igm-a1/) + +### Configuring the GPS and IMU + +Configure the GPS and IMU as shown: + +``` +WIFICONFIGSTATE OFF +UNLOGALLTHISPORT +SETIMUTOANTOFFSET0.00 1.10866 1.14165 0.05 0.05 0.08 +SETINSOFFSET0 0 0 +LOGCOM2 GPRMC ONTIME 1.0 0.25 +EVENTOUTCONTROLMARK2 ENABLE POSITIVE 999999990 10 +EVENTOUTCONTROLMARK1 ENABLE POSITIVE 500000000 500000000 +LOGNCOM1 GPGGA ONTIME 1.0 + +logbestgnssposb ontime 0.5 +logbestgnssvelb ontime 0.5 +logbestposb ontime 0.5 +logINSPVASB ontime 0.01 +logCORRIMUDATASB ontime 0.01 +logINSCOVSB ontime 1 +logmark1pvab onnew + +logimutoantoffsetsb once +logvehiclebodyrotationb onchanged + +SAVECONFIG +``` + +For ProPak6: + +``` +WIFICONFIG STATE OFF +CONNECTIMU COM3 IMU_ADIS16488 +INSCOMMAND ENABLE +SETIMUORIENTATION 5 +ALIGNMENTMODE AUTOMATIC   +SETIMUTOANTOFFSET 0.00 1.10866 1.14165 0.05 0.05 0.08 +VEHICLEBODYROTATION 0 0 0 +  +COM COM1 9600 N 8 1 N OFF OFF +COM COM2 9600 N 8 1 N OFF OFF +INTERFACEMODE COM1 NOVATEL NOVATEL OFF +LOG COM2 GPRMC ONTIME 1 0.25 +PPSCONTROL ENABLE POSITIVE 1.0 10000 +MARKCONTROL MARK1 ENABLE POSITIVE +EVENTINCONTROL MARK1 ENABLE POSITIVE 0 2 +  +interfacemode usb2 rtcmv3 none off +rtksource auto any +psrdiffsource auto any +  +SAVECONFIG +``` + +**![warning_icon](images/warning_icon.png) WARNING:** Modify the **SETIMUTOANTOFFSET** line based on the actual measurement (of the antenna and the IMU offset). + +For example: + +``` +SETIMUTOANTOFFSET -0.05 0.5 0.8 0.05 0.05 0.08 +``` + +# Setting up the Network + +This section provides recommendations for setting up the network. + +The IPC that is running the Apollo software must access the Internet to acquire the Real Time Kinematic (RTK) data for accurate localization. A mobile device also needs to connect to the IPC to run the Apollo software. + +## Recommendations + +Itis recommended that you set up your network according to the following diagram: + +![4G_network_setup](images/4G-LTE-setup-6108GC.png) + +Follow these steps: + +1. Install and configure a 4G LTE router with Wi-Fi Access Point (AP) capability and Gigabit Ethernet ports. + + +2. Connect the IPC to the LTE router using an Ethernet cable. + + +3. Configure the LTE router to access the Internet using the LTE cellular network. + + +4. Configure the AP capability of the LTE router so that the iPad Pro or another mobile device can connect to the router, and, in turn, connect to the IPC. + +![tip_icon](images/tip_icon.png)It is recommended that you configure a fixed IP instead of using DHCP on the IPC to make it easier to connect to it from a mobile terminal. + +# Additional Tasks Required + +Youwill use the components that you were required to provide to perform the following tasks: + +1. Connect a monitor using the DVI or the HDMI cables and connect the keyboard and mouse to perform debugging tasks at the car onsite. + +2. Establish a Wi-Fi connection on the Apple iPad Pro to access the HMI and control the Apollo ADS that is running on the IPC. + +# Next Steps + +After you complete the hardware installation in the vehicle, see the [Apollo Quick Start](https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/apollo_1_5_quick_start.md) for the steps to complete the software installation. diff --git a/docs/quickstart/apollo_1_5_lidar_calibration_guide.md b/docs/quickstart/apollo_1_5_lidar_calibration_guide.md new file mode 100644 index 00000000000..13a4bf0efa4 --- /dev/null +++ b/docs/quickstart/apollo_1_5_lidar_calibration_guide.md @@ -0,0 +1,167 @@ +## Apollo Sensor Calibration Service + +Welcome to the Apollo sensor calibration service. This document describes the process of the extrinsic calibration service between 64-beam Light Detection And Ranging (LiDAR) and Inertial Navigation System (INS). + +## Apollo Sensor Calibration Catalog + +- Service overview +- Preparation +- Recording calibration data +- Uploading calibration data and creating task +- Obtaining calibration results +- Error description + + + +### Overview + +The Apollo vehicle sensor calibration function provides the extrinsic calibration between Velodyne HDL-64ES3 and IMU. The calibration results can be used to transfer the obstacle location detected by LiDAR to the IMU coordinate system, and then to the world coordinate system. The results are provided by `.yaml` format files. + +### Preparation + +To calibrate the sensors it is important to prepare using the following steps: + +1.Install 64-beams LiDAR and INS supported by Apollo, and then deploy the docker running environment. + +2.Start up the 64-beams LiDAR and INS. The INS must be aligned when it is powered on. At this point, the car should be driven straight, then turned left and turned right in an open area, until the initialization is completed. + +3.Confirm that all sensor topics required by this service have output. See: [How to Check the Sensor Output?](https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/lidar_calibration/FAQ0.md) + +The topics required by the calibration service are shown in the following Table 1: + +Table 1. Sensor topics. + +Sensor | Topic Name | Topic Feq. (Hz) +--- | ------- | --- | +HDL-64ES3 | /apollo/sensor/velodyne64/VelodyneScanUnified | 10 +INS | /apollo/sensor/gnss/odometry | 100 +INS | /apollo/sensor/gnss/ins_stat | 1 + + +4.Confirm that the INS status is 56 when recording data. See: [How to Check INS Status?](https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/lidar_calibration/FAQ1.md) + +5.Choose an appropriate calibration field. + +An ideal calibration field requires no tall buildings around the calibration area. If buildings are near, low-rising building facades are preferred. Finally, the ground should be smooth, not rough, and it should be easy to drive the car following the trajectory that looks like the ∞ symbol as illustrated in Figure 1. An example of a good calibration field is shown in Figure 2. + +![](lidar_calibration/images/calibration/trajectory.png) + +

Figure 1. The trajectory for calibration.

+ +![](lidar_calibration/images/calibration/field.png) + +

Figure 2. Calibration field.

+ +### Recording Calibration Data + +After the preparation steps are completed, drive the vehicle to the calibration field to record the calibration data. + +1.The recording script is `apollo/script/lidar_calibration.sh`. + +2.Run the following command to record data: + +```bash +bash lidar_calibration.sh start_record +``` + +The recorded bag is under the directory `apollo/data/bag`. + +3.Drive the car following a ∞ symbol path, using a controlled speed of 20-40km/h, and make the turning radius as small as possible. + The total time length should within 3 minutes, but please make sure that your calibration drive contains at least one full ∞ symbol path. + +4.After recording, run the following command to stop the data recording. + +```bash +bash lidar_calibration.sh stop_record +``` + +5.Then, the program will detect whether or not the recorded bag contains all the required topics. After passing the test, the bag will be packaged into file `lidar_calib_data.tar.gz`, including the recorded rosbag and the corresponding MD5 checksum file. + +### Uploading Calibration Data and Creating a Calibration Service Task + +After recording the calibration data, please login to the [calibration service page](https://console.bce.baidu.com/apollo/calibrator/index/list) to complete the calibration. + +1.Enter the calibration service page and click the **New Task** button which in **Task Management** list to create a new calibration task. + +2.After entering the creating new task page, you need to fill in a simple description of this task.Then click the **Upload and create a task** button and select the upload calibration file to start uploading the calibration data. + +3.After start uploading the data, the page will jump to the task process view. The process figure is the upload progress page. The task will start to calibrate when the upload progress reaches 100%. Please keep the network unblocked during uploading. + +4.When the data is uploaded, the Data Verification Process will begin, as shown in Figure 3. The validation process ensures data integrity and suitability. The validation items are: + + * Decompress test + * MD5 checksum + * Data format validation + * ∞ symbol path validation + * INS status validation + +If validation fails, the corresponding error message is prompted. See the Error Description section below for details. + +![](lidar_calibration/images/calib_valid_en.png) +

Figure 3. Calibration data verification.

+ +6.After data validation, the calibration process begins, as shown in Figure 4. A detailed calibration progress page is displayed to users. Depending on the size and quality of the data, the overall calibration time lasts about 10-30 minutes. You can enter the page at any time to see the progress of the current task. +![](lidar_calibration/images/calib_progress_en.png) +

Figure 4. Calibration progress page.

+ +7.When calibration succeeds, click the **View detail** button to display a stitched point cloud. You can confirm the quality verification by checking the sharpness of the point cloud. If you are satisfied with the calibration quality, you can click **Confirm** to keep the result and download the calibration results by clicking **Download**. This fulfills the completion of the calibration process. + +For additional information, see: [How to Check Point Cloud Quality?](https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/lidar_calibration/FAQ2.md) + +### Obtaining Calibration Results + +1.Before obtaining the calibration results, the service requires that you confirm the quality of the calibration results based on visualized point cloud. + +2.After confirming the quality of the calibration result, you can click the **Confirm** button to store the calibration result. After that, you can download the result on the task page. The **Download** button will *not* appear on the task page if the result failed to pass quality verification. + +3.Extrinsic file format instruction — The extrinsic is returned to you in a `.yaml` format file. Below is an example of an extrinsic file. + +The field meanings shown in this example are defined in Table 2 below. + +```bash +header: + seq: 0 + stamp: + secs: 1504765807 + nsecs: 0 + frame_id: novatel +child_frame_id: velodyne64 +transform: + rotation: + x: 0.02883904659307384 + y: -0.03212457531272153 + z: 0.697030811535172 + w: 0.7157404339725393 + translation: + x: 0.000908140840832566 + y: 1.596564931858745 + z: 1 +``` + +Table 2. Definition of the keys in the yaml file. + +Field | Meaning +------ | ----- +`header` | Header information, including timestamps. +`child_frame_id` | Source sensor ID in calibration. Will be HDL-64ES3 here. +`frame_id` | Target sensor ID in calibration. Will be Novatel here. +`rotation`| Rotation part of the extrinsic parameters. Represented by a quaternion. +`translation`| Translation part of the extrinsic parameters. + +4.How to use extrinsic parameters? + +Enter the following command to create the calibration file directory in the apollo directory: + +```bash +mkdir -p modules/calibration/data/[CAR_ID]/ +``` + +Here, **CAR\_ID** is the vehicle ID for calibrating vehicles. Then, copy the downloaded extrinsic yaml file to the corresponding **CAR\_ID** folder. Finally, after you start HMI, select the correct **CAR\_ID** to load the corresponding calibration yaml file. + +### Error Description + +1. Data unpacking error: The uploaded data is not a valid `tar.gz` file +2. MD5 checksum error: If the MD5 checksum of the uploaded data differs from the MD5 checksum computed by the server side, it could be caused by network transmission problems. +3. Data format error: The uploaded data is not a rosbag, or necessary topics are missing or unexpected topics exist. The server-side calibration program failed to read it. +4. No ∞ symbol path error: No ∞ symbol path was found in the uploaded data. Verify that the recorded data contains at least one ∞ symbol path. +5. INS status error: In the uploaded data, the location does not meet the requirement. Ensure that the INS status is 56 during the data recording. diff --git a/docs/quickstart/apollo_1_5_lidar_calibration_guide_cn.md b/docs/quickstart/apollo_1_5_lidar_calibration_guide_cn.md new file mode 100644 index 00000000000..420f0e46fb3 --- /dev/null +++ b/docs/quickstart/apollo_1_5_lidar_calibration_guide_cn.md @@ -0,0 +1,158 @@ +欢迎使用Apollo传感器标定服务。本文档提供64线激光雷达与组合惯导之间的外参标定服务使用流程。 + +### 文档概览 + +1. 服务概述 +2. 准备工作 +3. 标定数据录制 +4. 标定数据上传以及任务创建 +5. 标定结果获取 +6. 错误说明 + +### 服务概述 + +本服务作为Apollo整车传感器标定功能中的一部分,提供Velodyne 64线激光雷达HDL-64ES3与IMU之间的外参标定功能。标定结果可用于将激光雷达检测的障碍物转换至IMU坐标系,进而转到世界坐标系下。标定结果以 `.yaml` 文件形式返回。 + + +### 准备工作 + +为了更好地使用本服务,请按以下顺序进行准备工作: + +1.安装Apollo所支持的64线激光雷达和组合惯性导航系统,下载镜像安装docker环境。 + +2.开机并启动64线激光雷达以及组合惯导系统。Novatel组合惯导初次上电时需要校准。此时应将车在开阔地带进行直行、左右转弯等操作,直至惯导初始化完成。 + +3.确认本服务所需传感器数据的topic均有输出。[如何查看传感器有数据输出?](https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/lidar_calibration/FAQ0_cn.md) + +本服务所需的topics如下表1所示: + +表1. 传感器topic名称 + +传感器 | Topic名称 | Topic发送频率(Hz) +--- | ------- | --- | +HDL-64ES3 | /apollo/sensor/velodyne64/VelodyneScanUnified | 10 +INS | /apollo/sensor/gnss/odometry | 100 +INS | /apollo/sensor/gnss/ins_stat | 1 + +4.确认车辆采集标定数据时的定位状态为56。[如何查看车辆定位状态?](https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/lidar_calibration/FAQ1_cn.md) + +5.选择合适的标定场地。 + +标定的地点需要选择无高楼遮挡、地面平坦、四周有平整的建筑物并且可以进行如图1所示8字轨迹行驶的地方。一个合适的标定场地如图2所示。 + +![](lidar_calibration/images/trajectory.png) +

图1 标定所需车辆行驶的轨迹。

+ +![](lidar_calibration/images/field.png) +

图2 标定场地。

+ +### 标定数据录制 + +准备工作完成后,将车辆驶入标定场地进行标定数据的录制。 + +1.录制脚本工具为 `apollo/script/lidar_calibration.sh`。 + +2.运行以下命令,开始数据录制工作: + +```bash +bash lidar_calibration.sh start_record +``` + +所录制的bag在 `apollo/data/bag` 目录下。 + +3.以8字形轨迹驾驶汽车,将车速控制在20-40km/h,并使转弯半径尽量小。行驶的时长3分钟即可,但要保证标定数据至少包含一个完整的8字。 + +4.录制完成后,输入以下命令结束数据录制: + +```bash +bash lidar_calibration.sh stop_record +``` + +5.随后,程序会检测所录制的bag中是否含有所需的所有topics。检测通过后,会将bag打包成 `lidar_calib_data.tar.gz` 文件,内容包括录制的rosbag以及对应的MD5校验和文件。 + +### 标定数据上传以及任务创建 + +录制好标定数据后,登录至[标定服务页面](https://console.bce.baidu.com/apollo/calibrator/index/list)以完成标定。 + +1.进入标定服务页面,在**任务管理**列表下点击**新建任务**按钮以新建一个标定任务。 + +2.进入新建任务页面后,需先填写简单的任务描述,然后点击**上传数据并创建任务**按钮,选择上传标定文件,则可以开始进行数据上传。 + +3.开始上传数据后,页面将跳转至任务流程视图。流程视图图示为上传进度页面,待其到达100%后则可以开始进行标定。上传期间请保持网络畅通。 + +4.数据上传完毕后,将开始数据校验流程,如图3所示。校验流程可以保证数据完整以及适合标定,校验项目有: + +* 数据包解压校验 +* MD5校验 +* 数据格式校验 +* 8字路径与GPS质量校验 +* 初始外参评估合格 + +若数据校验失败,则会提示相应错误。错误的原因请参照错误说明。 + +![](lidar_calibration/images/calib_valid_cn.png) +

图3 标定数据校验流程。

+ +6.校验通过后将开始标定流程,一个标定进度页面会展示给用户,如图4所示。视数据大小和质量的影响,整体标定时间大约持续10-30分钟,用户可以随时进入该页面查看当前任务的标定进度。 + +![](lidar_calibration/images/calib_progress_cn.png) +

图4 标定进度页面。

+ +7.标定完成后,进入人工质检环节。点击[查看]按钮会弹出用于质检的拼接点云,此时可以开始人工质检。若质检通过,则可以点击**确认入库**按钮以保存标定结果。最后,点击**下载数据**按钮来下载标定结果,至此标定流程完成。[如何进行质检?](https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/lidar_calibration/FAQ2_cn.md) + +### 标定结果获取 + +1.获取标定结果前,本服务需要用户根据可视化效果确认标定结果的质量。 + +2.确认该标定结果质量合格后,用户可点击**确认入库**按钮将标定结果入库。之后可以在任务页面进行下载,未通过质检并入库的标定结果在任务页面不会出现下载地址。 + +3.外参格式解析。外参以yaml文件形式返回给用户,下面是一个外参结果文件的样例。 +表1中说明了几个字段的含义。 + +```bash +header: + seq: 0 + stamp: + secs: 1504765807 + nsecs: 0 + frame_id: novatel +child_frame_id: velodyne64 +transform: + rotation: + x: 0.02883904659307384 + y: -0.03212457531272153 + z: 0.697030811535172 + w: 0.7157404339725393 + translation: + x: 0.000908140840832566 + y: 1.596564931858745 + z: 1 +``` + +表2. 外参YAML文件字段含义 + +字段 | 含义 +---- | ---- +header | 头信息,主要包含标定时间 +child_frame_id | 所标定的源传感器ID,此时为HDL-64ES3 +frame_id | 所标定的目标传感器ID,此时为Novatel +rotation | 以四元数表示的外参旋转部分 +translation | 外参的平移部分 + +4.外参使用方式 + +首先在`/apollo`目录下输入以下命令创建标定文件目录: + +```bash +mkdir -p modules/calibration/data/[CAR_ID]/ +``` +其中,**CAR\_ID**为标定车辆的车辆ID。然后将下载的外参yaml文件拷贝至对应的**CAR\_ID** 文件夹内。最后,在启动hmi后,选择需正确的**CAR\_ID**即可载入对应的标定yaml文件。 + +### 错误说明 + +1. 数据解包错误:上传的数据不是一个合法的 `tar.gz` 文件。 +2. MD5校验和错误:上传数据的MD5校验和与服务器端计算的MD5校验和不同,通常由网络传输问题引发。 +3. 数据格式错误:上传的数据不是一个rosbag,或者bag里缺少指定的topic或包含其他非指定的topic,服务器端标定程序读取失败。 +4. 无8字路径错误:在上传的数据中没有发现8字路径。需要确认录制的数据中是否包含至少一个8字形路径。 +5. 组合惯导定位精度不足:在上传的数据中发现定位状态不符合要求。需要确认在录制过程中的定位状态为56。 + diff --git a/docs/quickstart/apollo_1_5_quick_start.md b/docs/quickstart/apollo_1_5_quick_start.md new file mode 100644 index 00000000000..38180f22968 --- /dev/null +++ b/docs/quickstart/apollo_1_5_quick_start.md @@ -0,0 +1,46 @@ +# Apollo 1.5 Quick Start Guide + +This quick start focuses on Apollo 1.5 new features. For general Apollo concepts, please refer to [Apollo 1.0 Quick Start](https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/apollo_1_0_quick_start.md). + +Before doing the following steps, make sure you have calibrated the extrinsic parameters between the LiDAR and the GNSS/INS. For sensor calibration, please refer to [Apollo 1.5 LiDAR calibration guide](https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/apollo_1_5_lidar_calibration_guide.md). + +## Launch release env Docker Image + +Run the following commands: + +```bash +cd $APOLLO_HOME +bash docker/scripts/release_start.sh +``` + +When Docker starts, it creates a port mapping, which maps the Docker internal port 8887 to the host port 8887. You can then visit the HMI web service in your host machine browser: + +Open the Chrome browser and start the Apollo HMI by going to **localhost:8887**. + ![](images/hmi_setup_profile.png) +You'll be required to setup profile before doing anything else. Click the +dropdown menu to select your HDMap and vehicle in use. The list are defined in +[HMI config file](https://raw.githubusercontent.com/ApolloAuto/apollo/master/modules/hmi/conf/config.pb.txt). + +Then your HMI comes to live! + +*Note: It's also possible to change profile on the right panel of HMI, but just +remember to click "Reset All" on the top-right corner to restart the system.* + + ![](images/start_hmi.png) + +## (*New!*) Start Auto + +In Apollo 1.5, we released the new feature, auto following the traffic until destination. + +1. To make it work, you need setup the system by clicking the "Setup" + button on left panel. + + ![](images/hmi_setup_1.5.png) + +2. Make sure all modules are on and hardware is ready, and the vehicle is in a + +good state which is safe to enter auto mode to follow the traffic to destination. + +Click the "Start Auto" button, then it will drive you there! + + ![](images/hmi_start_auto_following.png) diff --git a/docs/quickstart/images/4G-LTE-setup-6108GC.png b/docs/quickstart/images/4G-LTE-setup-6108GC.png new file mode 100644 index 00000000000..7367c916248 Binary files /dev/null and b/docs/quickstart/images/4G-LTE-setup-6108GC.png differ diff --git a/docs/quickstart/images/After installing the CAN Card.png b/docs/quickstart/images/After installing the CAN Card.png new file mode 100644 index 00000000000..5de4e7744c3 Binary files /dev/null and b/docs/quickstart/images/After installing the CAN Card.png differ diff --git a/docs/quickstart/images/Before_installing_the_can_card.png b/docs/quickstart/images/Before_installing_the_can_card.png new file mode 100644 index 00000000000..8602c76918c Binary files /dev/null and b/docs/quickstart/images/Before_installing_the_can_card.png differ diff --git a/docs/quickstart/images/Car_Rearview.png b/docs/quickstart/images/Car_Rearview.png new file mode 100644 index 00000000000..2cd29541707 Binary files /dev/null and b/docs/quickstart/images/Car_Rearview.png differ diff --git a/docs/quickstart/images/Car_Sideview.png b/docs/quickstart/images/Car_Sideview.png new file mode 100644 index 00000000000..9129cf1943a Binary files /dev/null and b/docs/quickstart/images/Car_Sideview.png differ diff --git a/docs/quickstart/images/HDL64_Cable_whitened_labeled.png b/docs/quickstart/images/HDL64_Cable_whitened_labeled.png new file mode 100644 index 00000000000..7073a63a0ab Binary files /dev/null and b/docs/quickstart/images/HDL64_Cable_whitened_labeled.png differ diff --git a/docs/quickstart/images/HDL64_Cabling.JPG b/docs/quickstart/images/HDL64_Cabling.JPG new file mode 100644 index 00000000000..28144a25deb Binary files /dev/null and b/docs/quickstart/images/HDL64_Cabling.JPG differ diff --git a/docs/quickstart/images/HDL64_PowerCable.JPG b/docs/quickstart/images/HDL64_PowerCable.JPG new file mode 100644 index 00000000000..e51d112fa9c Binary files /dev/null and b/docs/quickstart/images/HDL64_PowerCable.JPG differ diff --git a/docs/quickstart/images/IPC-6108GC-CableConnected-overexposed.png b/docs/quickstart/images/IPC-6108GC-CableConnected-overexposed.png new file mode 100644 index 00000000000..1f3f80ea02b Binary files /dev/null and b/docs/quickstart/images/IPC-6108GC-CableConnected-overexposed.png differ diff --git a/docs/quickstart/images/IPC-6108GC-PowerCable.JPG b/docs/quickstart/images/IPC-6108GC-PowerCable.JPG new file mode 100644 index 00000000000..b33483ee955 Binary files /dev/null and b/docs/quickstart/images/IPC-6108GC-PowerCable.JPG differ diff --git a/docs/quickstart/images/IPC-6108GC-Screw-Positions.png b/docs/quickstart/images/IPC-6108GC-Screw-Positions.png new file mode 100644 index 00000000000..b8be2184911 Binary files /dev/null and b/docs/quickstart/images/IPC-6108GC-Screw-Positions.png differ diff --git a/docs/quickstart/images/IPC-6108GC-Screw-Positions_labeled.png b/docs/quickstart/images/IPC-6108GC-Screw-Positions_labeled.png new file mode 100644 index 00000000000..c7f013b7265 Binary files /dev/null and b/docs/quickstart/images/IPC-6108GC-Screw-Positions_labeled.png differ diff --git a/docs/quickstart/images/IPC-6108GC-front-side.jpg b/docs/quickstart/images/IPC-6108GC-front-side.jpg new file mode 100644 index 00000000000..4e67052f87e Binary files /dev/null and b/docs/quickstart/images/IPC-6108GC-front-side.jpg differ diff --git a/docs/quickstart/images/IPC-6108GC-left-side.jpg b/docs/quickstart/images/IPC-6108GC-left-side.jpg new file mode 100644 index 00000000000..f864a1f55d7 Binary files /dev/null and b/docs/quickstart/images/IPC-6108GC-left-side.jpg differ diff --git a/docs/quickstart/images/IPC_powerbutton.png b/docs/quickstart/images/IPC_powerbutton.png new file mode 100644 index 00000000000..4a0511c79e3 Binary files /dev/null and b/docs/quickstart/images/IPC_powerbutton.png differ diff --git a/docs/quickstart/images/Issuing_the_serial_command.png b/docs/quickstart/images/Issuing_the_serial_command.png new file mode 100644 index 00000000000..f142d0f5019 Binary files /dev/null and b/docs/quickstart/images/Issuing_the_serial_command.png differ diff --git a/docs/quickstart/images/LiDAR_A1_wiring.png b/docs/quickstart/images/LiDAR_A1_wiring.png new file mode 100644 index 00000000000..6e78ae71b54 Binary files /dev/null and b/docs/quickstart/images/LiDAR_A1_wiring.png differ diff --git a/docs/quickstart/images/LiDAR_PP6_wiring.png b/docs/quickstart/images/LiDAR_PP6_wiring.png new file mode 100644 index 00000000000..efc1171de2c Binary files /dev/null and b/docs/quickstart/images/LiDAR_PP6_wiring.png differ diff --git a/docs/quickstart/images/Mount_ipc_on_carpet.JPG b/docs/quickstart/images/Mount_ipc_on_carpet.JPG new file mode 100644 index 00000000000..d55a3ba76cb Binary files /dev/null and b/docs/quickstart/images/Mount_ipc_on_carpet.JPG differ diff --git a/docs/quickstart/images/Removing_the_cover.JPG b/docs/quickstart/images/Removing_the_cover.JPG new file mode 100644 index 00000000000..efa01f1e13d Binary files /dev/null and b/docs/quickstart/images/Removing_the_cover.JPG differ diff --git a/docs/quickstart/images/Serial cable connected to laptop.png b/docs/quickstart/images/Serial cable connected to laptop.png new file mode 100644 index 00000000000..25279cacb5d Binary files /dev/null and b/docs/quickstart/images/Serial cable connected to laptop.png differ diff --git a/docs/quickstart/images/cable_connected_incar.JPG b/docs/quickstart/images/cable_connected_incar.JPG new file mode 100644 index 00000000000..a34276f3b57 Binary files /dev/null and b/docs/quickstart/images/cable_connected_incar.JPG differ diff --git a/docs/quickstart/images/hmi_setup_1.5.png b/docs/quickstart/images/hmi_setup_1.5.png new file mode 100644 index 00000000000..5de39f4e424 Binary files /dev/null and b/docs/quickstart/images/hmi_setup_1.5.png differ diff --git a/docs/quickstart/images/hmi_setup_profile.png b/docs/quickstart/images/hmi_setup_profile.png new file mode 100644 index 00000000000..e889137c61c Binary files /dev/null and b/docs/quickstart/images/hmi_setup_profile.png differ diff --git a/docs/quickstart/images/hmi_start_auto_following.png b/docs/quickstart/images/hmi_start_auto_following.png new file mode 100644 index 00000000000..4471a27f7a6 Binary files /dev/null and b/docs/quickstart/images/hmi_start_auto_following.png differ diff --git a/docs/quickstart/images/lidar_pic.png b/docs/quickstart/images/lidar_pic.png new file mode 100644 index 00000000000..d50ac705412 Binary files /dev/null and b/docs/quickstart/images/lidar_pic.png differ diff --git a/docs/quickstart/images/pinout_table.png b/docs/quickstart/images/pinout_table.png new file mode 100644 index 00000000000..8e6f864bb79 Binary files /dev/null and b/docs/quickstart/images/pinout_table.png differ diff --git a/docs/quickstart/images/start_hmi.png b/docs/quickstart/images/start_hmi.png index 740936d6608..0e7906b1c5c 100644 Binary files a/docs/quickstart/images/start_hmi.png and b/docs/quickstart/images/start_hmi.png differ diff --git a/docs/quickstart/images/voltage_converter.jpg b/docs/quickstart/images/voltage_converter.jpg new file mode 100644 index 00000000000..4412c1d65b5 Binary files /dev/null and b/docs/quickstart/images/voltage_converter.jpg differ diff --git a/docs/quickstart/images/voltage_converter2.jpg b/docs/quickstart/images/voltage_converter2.jpg new file mode 100644 index 00000000000..060b02432a0 Binary files /dev/null and b/docs/quickstart/images/voltage_converter2.jpg differ diff --git a/docs/quickstart/lidar_calibration/FAQ0.md b/docs/quickstart/lidar_calibration/FAQ0.md new file mode 100644 index 00000000000..f154c9d3b47 --- /dev/null +++ b/docs/quickstart/lidar_calibration/FAQ0.md @@ -0,0 +1,10 @@ +### How to Check the Sensor Output? + +Use the `rostopic` command. For example, type the following command to check the +output of HDL-64ES3: + +```bash + rostopic echo /apollo/sensor/velodyne64/VelodyneScanUnified +``` + +If the topic data is displayed on the terminal, the LiDAR works normally. \ No newline at end of file diff --git a/docs/quickstart/lidar_calibration/FAQ0_cn.md b/docs/quickstart/lidar_calibration/FAQ0_cn.md new file mode 100644 index 00000000000..e1530f070ba --- /dev/null +++ b/docs/quickstart/lidar_calibration/FAQ0_cn.md @@ -0,0 +1,9 @@ +### 如何查看传感器是否有数据输出? + +使用 rostopic 命令。例如,查看 HDL-64ES3 的输出,可以在终端中输入: + +```bash + rostopic echo /apollo/sensor/velodyne64/VelodyneScanUnified +``` + 若该 topic 的数据会显示在终端上,则激光雷达工作正常。 + diff --git a/docs/quickstart/lidar_calibration/FAQ1.md b/docs/quickstart/lidar_calibration/FAQ1.md new file mode 100644 index 00000000000..951d9f629e1 --- /dev/null +++ b/docs/quickstart/lidar_calibration/FAQ1.md @@ -0,0 +1,9 @@ +### How to Check INS Status? + +Using Novatel INS as an example, type the following command to check the INS status: + +```bash +rostopic echo /apollo/sensor/gnss/ins_stat +``` + +Find the `pos_type` field: If the value is 56, it has entered a good positioning status (RTK_FIXED) and can be used for calibration. If it is not 56, reliable calibration results cannot be obtained. \ No newline at end of file diff --git a/docs/quickstart/lidar_calibration/FAQ1_cn.md b/docs/quickstart/lidar_calibration/FAQ1_cn.md new file mode 100644 index 00000000000..639172e87f3 --- /dev/null +++ b/docs/quickstart/lidar_calibration/FAQ1_cn.md @@ -0,0 +1,9 @@ +### 如何查看车辆的定位状态? + +以使用 Novatel 组合惯导为例,在终端中输入: + +```bash +rostopic echo /apollo/sensor/gnss/ins_stat +``` + +找到“pos_type”字段,若该字段的值为 56,则表示进入了良好的定位状态 (RTK_FIXED),可以用于标定。若不为 56,则无法获得可靠的标定结果。 \ No newline at end of file diff --git a/docs/quickstart/lidar_calibration/FAQ2.md b/docs/quickstart/lidar_calibration/FAQ2.md new file mode 100644 index 00000000000..feea01b33a1 --- /dev/null +++ b/docs/quickstart/lidar_calibration/FAQ2.md @@ -0,0 +1,21 @@ +### How to Complete a Quality Inspection? + +At present, you complete the quality verification manually with a visual inspection of the results. + +When the calibration is completed, the point cloud stitched during the calibration process is provided. In the point cloud, details of the calibration field can be easily identified. Assess the calibration quality for clarity. Look at objects such as building facades, street lights, poles and road curbs. If the point cloud is blurry and a ghosting effect can be found, the calibration is poor. If the calibration result is good, a sharp and clear stitched point cloud is shown. + +Figure 1 shows the comparison between the stitched point clouds with good (a) and insufficient(b) calibration quality. + +![](images/good_calib.png) +

+(a) +

+ +![](images/poor_calib.png) +

+(b) +

+ +

+Figure 1. (a) a high quality calibration result (b) an insufficient one. +

\ No newline at end of file diff --git a/docs/quickstart/lidar_calibration/FAQ2_cn.md b/docs/quickstart/lidar_calibration/FAQ2_cn.md new file mode 100644 index 00000000000..907f87e9b6f --- /dev/null +++ b/docs/quickstart/lidar_calibration/FAQ2_cn.md @@ -0,0 +1,19 @@ +### 如何进行质检? + +目前进行质检方法主要通过人工来完成。标定完成后,页面会提供标定过程中拼接得到的点云。若标定结果良好,会得到锐利和清晰的拼接点云,可反映出标定场地的细节。通常质检的参照物有平整的建筑立面、路灯和电线杆以及路沿等。若标定质量较差,则会使拼接点云出现一些模糊、重影的效果。图1是两张不同标定质量的拼接点云对比。 + +![](images/good_calib.png) + +

+(a) +

+ +![](images/poor_calib.png) + +

+(b) +

+ +

+图1. (a) 高质量的标定结果 (b) 质量较差的标定结果。 +

\ No newline at end of file diff --git a/docs/quickstart/lidar_calibration/images/calib_progress_cn.png b/docs/quickstart/lidar_calibration/images/calib_progress_cn.png new file mode 100644 index 00000000000..80906a60a53 Binary files /dev/null and b/docs/quickstart/lidar_calibration/images/calib_progress_cn.png differ diff --git a/docs/quickstart/lidar_calibration/images/calib_progress_en.png b/docs/quickstart/lidar_calibration/images/calib_progress_en.png new file mode 100644 index 00000000000..87b94ff6492 Binary files /dev/null and b/docs/quickstart/lidar_calibration/images/calib_progress_en.png differ diff --git a/docs/quickstart/lidar_calibration/images/calib_valid_cn.png b/docs/quickstart/lidar_calibration/images/calib_valid_cn.png new file mode 100644 index 00000000000..5893c3de05c Binary files /dev/null and b/docs/quickstart/lidar_calibration/images/calib_valid_cn.png differ diff --git a/docs/quickstart/lidar_calibration/images/calib_valid_en.png b/docs/quickstart/lidar_calibration/images/calib_valid_en.png new file mode 100644 index 00000000000..6fc0db5dc7a Binary files /dev/null and b/docs/quickstart/lidar_calibration/images/calib_valid_en.png differ diff --git a/docs/quickstart/lidar_calibration/images/field.png b/docs/quickstart/lidar_calibration/images/field.png new file mode 100644 index 00000000000..fd9bb81c72c Binary files /dev/null and b/docs/quickstart/lidar_calibration/images/field.png differ diff --git a/docs/quickstart/lidar_calibration/images/good_calib.png b/docs/quickstart/lidar_calibration/images/good_calib.png new file mode 100644 index 00000000000..2a34566e1b4 Binary files /dev/null and b/docs/quickstart/lidar_calibration/images/good_calib.png differ diff --git a/docs/quickstart/lidar_calibration/images/install.png b/docs/quickstart/lidar_calibration/images/install.png new file mode 100644 index 00000000000..d11dacb7bd3 Binary files /dev/null and b/docs/quickstart/lidar_calibration/images/install.png differ diff --git a/docs/quickstart/lidar_calibration/images/poor_calib.png b/docs/quickstart/lidar_calibration/images/poor_calib.png new file mode 100644 index 00000000000..2bf45ac09d6 Binary files /dev/null and b/docs/quickstart/lidar_calibration/images/poor_calib.png differ diff --git a/docs/quickstart/lidar_calibration/images/trajectory.png b/docs/quickstart/lidar_calibration/images/trajectory.png new file mode 100644 index 00000000000..0474283dc77 Binary files /dev/null and b/docs/quickstart/lidar_calibration/images/trajectory.png differ diff --git a/docs/specs/3d_obstacle_perception.md b/docs/specs/3d_obstacle_perception.md new file mode 100644 index 00000000000..62eaa968db8 --- /dev/null +++ b/docs/specs/3d_obstacle_perception.md @@ -0,0 +1,399 @@ +3D Obstacle Perception +=================== + +The following sections describe the perception pipeline of obstacles +that are resolved by Apollo: + +- HDMap Region of Interest (ROI) Filter + +- Convolutional Neural Networks (CNN) Segmentation + +- MinBox Builder + +- HM Object Tracker + +HDMap Region of Interest (ROI) Filter +------------------------------------- + +The Region of Interest (ROI) specifies the drivable area that includes +road surfaces and junctions and are retrieved from the HD +(hi-resolution) map. The HDMap ROI filter processes LiDAR points that +are outside ROI, removing background objects, e.g., buildings and trees +around the road. What remains are the point cloud in the ROI for +subsequent processing. + +Given a HD map, the affiliation of each LiDAR point indicates whether it +is inside or outside the ROI. Each LiDAR point can be queried with a +lookup table (LUT) of 2D quantization of the region around the car. The +input and output of the HDMap ROI filter module are summarized in the +table below. + + |Input |Output | + |------------------------------------------------------------------------- |---------------------------------------------------------------------------| + |The point cloud: A set of 3D points captured from LiDAR Sensor. |The indices of input points that are inside the ROI defined by HDMap. | + |HDMap: A set of polygons each of which is an ordered set of points. | | + + +In general, the Apollo HDMap ROI filter consists of three successive +steps: + +1. Coordinate transformation + +2. ROI LUT construction + +3. Point inquiry with ROI LUT + +### Coordinate Transformation + +For the HDMap ROI filter, the data interface for HD map is defined in +terms of a set of polygons, each of which is actually an ordered set of +points in the world coordinate system. Running an inquiry on the points +with the HDMap ROI requires that the point cloud and polygons are +represented in the same coordinate system. For this purpose, Apollo +transforms the points of input point cloud and the HDMap polygons into a +local coordinate system that originates from the LiDAR sensor’s +location. + +### ROI LUT Construction + +To determine an input point whether inside or outside the ROI, Apollo +adopts a grid-wise LUT that quantifies the ROI into a birds-eye view 2D +grid. As shown in figure 1, this LUT covers a rectangle region, bounded +by a predefined spatial range around the general view from above in the +boundary of HDMap. Then it represents the affiliation with the ROI for +each cell of the grid (i.e., 1/0 represents it is inside/outside the +ROI). For computational efficiency, Apollo uses a scan line algorithm +and bitmap encoding to construct the ROI LUT. + +
+
Figure 1 Illustration of ROI lookup table (LUT)
+ +The blue lines show the boundary of HDMap ROI, including road surfaces and +junctions. The red solid dot represents the origin of the local coordinate +system corresponding to the LiDAR sensor’s location. The 2D grid is composed +of 8×8 cells that are shown as green squares. The cells inside the ROI are +blue-filled squares while the ones outside the ROI are yellow-filled squares. + +### Point Inquiry with ROI LUT + +Based on the ROI LUT, the affiliation of each input point is queried +using two-step verification. Then, Apollo conducts data compilation and +output as described below. For the point inquiry process, Apollo: + +1. Checks whether the point is inside or outside the rectangle region + of ROI LUT. + +2. Queries the corresponding cell of the point in the LUT for its + affiliation with respect to the ROI. + +3. Collects all the points that belong to the ROI and output their + indices with respect to the input point cloud. + +The user-defined parameters can be set in the configuration file of +modules/perception/model/hdmap_roi_filter.config. Please refer the +table below on the usage of parameters for HDMap ROI Filter. + + |Parameter Name |Usage |Default | + |------------------- |------------------------------------------------------------------------------ |------------| + |rectangle |The range of ROI LUT (the 2D grid) with respect to the origin (LiDAR sensor). |70.0 meters | + |cell_size |The size of cells for quantizing the 2D grid. |0.25 meter | + |extend_dist |The distance of extending the ROI from the polygon boundary. |0.0 meter | + +Convolutional Neural Networks (CNN) Segmentation +------------------------------------------------ + +After the HDMap ROI filter, Apollo obtains the filtered point cloud that +includes *only* the points inside ROI (i.e., the drivable road and +junction areas). Most of the background obstacles, such as buildings and +trees around the road region, have been removed, and the point cloud +inside ROI is fed into the segmentation module. This process detects and +segments out foreground obstacles, e.g., cars, trucks, bicycles, and +pedestrians. + + |Input |Output | + |---------------------------------------------------------------------------- |---------------------------------------------------------------| + |The point cloud (a set of 3D points) |A set of objects corresponding to obstacles in the ROI. | + |The point indices indicating points inside the ROI as defined in HDMap | | + + +Apollo uses a deep CNN for accurate obstacle detection and segmentation. +The Apollo CNN segmentation consists of four successive steps: + +- Channel Feature Extraction + +- CNN-Based Obstacle Predication + +- Obstacle Clustering + +- Post-processing + +The following sections describe the deep CNN in detail. + +### Channel Feature Extraction + +Given a frame of point cloud, Apollo build a birds-eye view (i.e., +projected to the X-Y plane) 2D grid in the local coordinate system. Each +point within a predefined range with respect to the origin (i.e., the +LiDAR sensor) is quantized into one cell of the 2D grid based on its X +and Y coordinates. After quantization, Apollo computes 8 statistical +measurements of the points for each cell of the grid, which will be the +input channel features fed into the CNN in the next step. The +statistical measurements computed are the: + +1. Maximum height of points in the cell + +2. Intensity of the highest point in the cell + +3. Mean height of points in the cell + +4. Mean intensity of points in the cell + +5. Number of points in the cell + +6. Angle of the cell’s center with respect to the origin + +7. Distance between the cell’s center and the origin + +8. Binary value indicating whether the cell is empty or occupied + +### CNN-Based Obstacle Predication + +Based on the channel features described above, Apollo uses a deep fully +convolutional neural network (FCNN) to predict the cell-wise obstacle +attributes including the offset displacement with respect to the +potential object center, called center offset, (see figure 2 below), +objectness, positiveness, and object height. As shown in figure 2, the +input of the network is a *W*×*H*×*C* channel image where: + +- *W* represents the column number of the grid. + +- *H* represents the row number of the grid. + +- *C* represents the number of channel features. + +The FCNN is composed of three layers: + +- Downstream encoding layers (feature encoder) + +- Upstream decoding layers (feature decoder) + +- Obstacle attribute prediction layers (predictor) + +The feature encoder takes the channel feature image as input and +successively down-samples its spatial resolution with increasing feature +abstraction. Then the feature decoder gradually up-samples the encoded +feature image to the spatial resolution of the input 2D grid, which can +recover the spatial details of feature image to facilitate the cell-wise +obstacle attribute prediction. The down-sampling and up-sampling +operations are implemented in terms of stacked convolution/devolution +layers with non-linear activation (i.e., ReLu) layers. + +
+ +
Figure 2 The FCNN for cell-wise obstacle prediction
+ +### Obstacle Clustering + +After the CNN-based prediction step, Apollo obtains prediction +information for individual cells. Apollo utilizes four cell object +attribute images that contain the: + +- Center offset + +- Objectness + +- Positiveness + +- Object height + +To generate obstacle objects, Apollo constructs a directed graph based +on the cell center offset prediction and searches the connected +components as candidate object clusters. + +As shown in figure 3, each cell is a node of the graph and the directed +edge is built based on the center offset prediction of the cell, which +points to its parent node corresponding to another cell. + +Given this graph, Apollo adopts a compressed Union Find algorithm to +efficiently find the connected components, each of which is a candidate +obstacle object cluster. The objectness is the probability of being a +valid object for one individual cell. So Apollo defines the non-object +cells as the ones with the objectness less than 0.5. Thus Apollo filters +out the empty cells and non-object ones for each candidate object +cluster. + +
+ +
Figure 3 Illustration of obstacle clustering
+ +(a) The red arrow represents the object center offset prediction for + each cell. The blue mask corresponds to the object cells for which + the objectness probability is no less than 0.5. + +(b) The cells within solid red polygon compose a candidate object + cluster. + +The red filled five-pointed stars indicate the root nodes (cells) of +sub-graphs that correspond to the connected components. One candidate +object cluster can be composed of multiple neighboring connected +components whose root nodes are adjacent to each other. + +### Post-processing + +After clustering, Apollo obtains a set of candidate object clusters each +of which includes several cells. In the post-processing step, Apollo +first computes the detection confidence score and object height for each +candidate cluster by averaging the positiveness and object height values +of its involved cells respectively. Then, Apollo removes the points that +are too high with respect to the predicted object height and collects +the points of valid cells for each candidate cluster. Finally, Apollo +removes the candidate clusters that have either a very low confidence +score or small number of points, to output the final obstacle +clusters/segments. + +The user-defined parameters can be set in the configuration file of +modules/perception/model/cnn\_segmentation/cnnseg.conf. The table below +explains the parameter usage and default values for CNN Segmentation. + + |Parameter Name |Usage |Default | + |-----------------------------------|--------------------------------------------------------------------------------------------|-----------| + |objectness_thresh |The threshold of objectness for filtering out non-object cells in obstacle clustering step. |0.5 | + |use_all_grids_for_clustering |The option of specifying whether or not to use all cells to construct the graph in the obstacle clustering step.If not, only the occupied cells will be considered. |true | + |confidence_thresh |The detection confidence score threshold for filtering out the candidate clusters in the post-processing step. |0.1 | + |height_thresh |If it is non-negative, the points that are higher than the predicted object height by height_thresh will be filtered out in the post-processing step. |0.5 meters | + |min_pts_num |In the post-processing step, the candidate clusters with less than min_pts_num points are removed. |3 | + |use_full_cloud |If it is set by true, all the points of the original point cloud will be used for extracting channel features. Otherwise only the points of input point cloud (i.e., the points after HDMap ROI filter) are used. |true | + |grid_id |The ID of the GPU device used in the CNN-based obstacle prediction step. |0 | + |feature_param {width} |The number of cells in X (column) axis of the 2D grid. |512 | + |feature_param {height} |The number of cells in Y (row) axis of the 2D grid. |512 | + |feature_param {range} |The range of the 2D grid with respect to the origin (the LiDAR sensor). |60 meters | + + + +MinBox Builder +-------------- + +The object builder component establishes a bounding box for the detected +obstacles. Due to occlusions or distance to the LiDAR sensor, the point +cloud forming an obstacle can be sparse and cover only a portion of +surfaces. Thus, the box builder works to recover the full bounding box +given the polygon point. The main purpose of the bounding box is to +estimate the heading of the obstacle (e.g., vehicle) even if the point +cloud is sparse. Equally, the bounding box is used to visualize the +obstacles. + +The idea behind the algorithm is to find the all areas given an edge of +the polygon point. In the following example, if AB is the edge, Apollo +projects other polygon points onto AB and establishes the pair of +intersections that has the maximum distance. That’s one of the edges +belonging to the bounding box. Then it is straightforward to obtain the +other edge of the bounding box. By iterating all edges in the polygon, +in the following example as shown in figure 4, Apollo determines a +6-edge bounding box. Apollo then selects the solution that has the +minimum area as the final bounding box. + +
+ +
Figure 4 Illustration of MinBox Object Builder
+ +HM Object Tracker +----------------- + +The HM object tracker is designed to track obstacles detected by the +segmentation step. In general, it forms and updates track lists by +associating current detections with existing track lists, deletes the +old track lists if it no longer persists, and spawns new track lists if new detections are identified. The motion state of the updated track +lists will be estimated after association. In HM object tracker, the +Hungarian algorithm is used for detection-to-track association, and a +Robust Kalman Filter is adopted for motion estimation. + +### Detection-to-Track Association + +When associating detection to existing track lists, Apollo constructs a +bipartite graph and then uses the Hungarian algorithm to find the best +detection-to-track matching with minimum cost (distance). + +**Computing Association Distance Matrix** + +In the first step, an association distance matrix is established. The +distance between a given detection and one track is calculated according to +a series of association features including motion consistency, +appearance consistency, etc. Some features used in HM tracker’s distance +computing are shown as below: + + |Association Feature Name |Description | + |-------------------------|----------------------------------| + |location_distance |Evaluating motion consistency | + |direction_distance |Evaluating motion consistency | + |bbox_size_distance |Evaluating appearance consistency | + |point_num_distance |Evaluating appearance consistency | + |histogram_distance |Evaluating appearance consistency | + +Besides, there are some important parameters of distance weights which are +used for combining the above-mentioned association features into a final +distance measurement. + +**Bipartite Graph Matching via Hungarian Algorithm** + +Given the association distance matrix, as shown in figure 5, Apollo +constructs a bipartite graph and uses Hungarian algorithm to find the +best detection-to-track matching via minimizing the distance cost. It +solves the assignment problem within O(n\^3) time complexity. To boost +its computing performance, the Hungarian algorithm is implemented after +cutting original bipartite graph into subgraphs, by deleting vertices +with distance greater than a reasonable maximum distance threshold. + +
+ +
Figure 5 Illustration of Bipartite Graph Matching
+ +### Track Motion Estimation + +After the detection-to-track association, HM object tracker uses a +Robust Kalman Filter to estimate the motion states of current track +lists with a constant velocity motion model. The motion states include +its belief anchor point and belief velocity, which correspond to the 3D +position and its 3D velocity respectively. To overcome possible +distraction caused from imperfect detections, Robust Statistics +techniques are implemented in the tracker’s filtering algorithm. + +**Observation Redundancy** + +The measurement of velocity, which is the input of filtering algorithm, +is selected among a series of redundant observations, including anchor +point shift, bounding box center shift, bounding box corner point shift, +etc. Redundant observations will bring extra robustness to filtering +measurement, as the probability that all observations fail is much less +than the one that a single observation fails. + +**Breakdown** + +Gaussian Filter algorithms always assume their noises are generated from +Gaussian distribution. However, this hypothesis may fail in motion +estimation problem, as the noise of its measurement may draw from +fat-tail distributions. To overcome the over-estimation of update gain, +a breakdown threshold is used in the process of filtering. + +**Update according Association Quality** + +The original Kalman Filter updates its states without distinguishing the +quality of its measurements. However, the quality of measurement is a +beneficial cue of filtering noise and somehow can be estimated. For +instance, the distance calculated in the association step could be a +reasonable estimate of quality of measurement. Updating the state of +filtering algorithm according to the association quality enhances +robustness and smoothness to the motion estimation problem. + +A high-level workflow of HM object tracker is given in figure 6. + +
+ +
Figure 6 Workflow of HM Object Tracker
+ +1) Construct the tracked objects and transform them into world coordinates. + +2) Predict the states of existing track lists and match detections to + them. + +3) Update the motion state of updated track lists and collect the + tracking results. diff --git a/docs/specs/images/3d_obstacle_perception/FCNN.png b/docs/specs/images/3d_obstacle_perception/FCNN.png new file mode 100644 index 00000000000..7bdb35d2cd0 Binary files /dev/null and b/docs/specs/images/3d_obstacle_perception/FCNN.png differ diff --git a/docs/specs/images/3d_obstacle_perception/bipartite_graph_matching.png b/docs/specs/images/3d_obstacle_perception/bipartite_graph_matching.png new file mode 100644 index 00000000000..643208bc101 Binary files /dev/null and b/docs/specs/images/3d_obstacle_perception/bipartite_graph_matching.png differ diff --git a/docs/specs/images/3d_obstacle_perception/hm_object_tracker.png b/docs/specs/images/3d_obstacle_perception/hm_object_tracker.png new file mode 100644 index 00000000000..392967b68f1 Binary files /dev/null and b/docs/specs/images/3d_obstacle_perception/hm_object_tracker.png differ diff --git a/docs/specs/images/3d_obstacle_perception/object_building.png b/docs/specs/images/3d_obstacle_perception/object_building.png new file mode 100644 index 00000000000..65c488f1bfc Binary files /dev/null and b/docs/specs/images/3d_obstacle_perception/object_building.png differ diff --git a/docs/specs/images/3d_obstacle_perception/obstacle_clustering.png b/docs/specs/images/3d_obstacle_perception/obstacle_clustering.png new file mode 100644 index 00000000000..1a5401190e8 Binary files /dev/null and b/docs/specs/images/3d_obstacle_perception/obstacle_clustering.png differ diff --git a/docs/specs/images/3d_obstacle_perception/roi_lookup_table.png b/docs/specs/images/3d_obstacle_perception/roi_lookup_table.png new file mode 100644 index 00000000000..d6db87594c1 Binary files /dev/null and b/docs/specs/images/3d_obstacle_perception/roi_lookup_table.png differ diff --git a/docs/specs/lidar_calibration.pdf b/docs/specs/lidar_calibration.pdf new file mode 100644 index 00000000000..7c079ef8d17 Binary files /dev/null and b/docs/specs/lidar_calibration.pdf differ diff --git a/docs/specs/lidar_calibration_cn.pdf b/docs/specs/lidar_calibration_cn.pdf new file mode 100644 index 00000000000..9f017351cee Binary files /dev/null and b/docs/specs/lidar_calibration_cn.pdf differ diff --git a/docs/specs/qp_spline_path_optimizer.md b/docs/specs/qp_spline_path_optimizer.md new file mode 100644 index 00000000000..13710b41c13 --- /dev/null +++ b/docs/specs/qp_spline_path_optimizer.md @@ -0,0 +1,298 @@ +# QP-Spline-Path Optimizer + +Quadratic programming + Spline interpolation + +## 1. Objective function + +### 1.1 Get path length + +Path is defined in station-lateral coordination system. The **s** range from vehicle's current position to default planing path length. + +### 1.2 Get spline segments + +Split the path into **n** segments. each segment trajectory is defined by a polynomial. + +### 1.3 Define function for each spline segment + +Each segment ***i*** has accumulated distance $d_i$ along reference line. The trajectory for the segment is defined as a polynomial of degree five by default. + +$$ +l = f_i(s) + = a_{i0} + a_{i1} * s + a_{i2} * s^2 + a_{i3} * s^3 + a_{i4} * s^4 + a_{i5} * s^5 (0 \leq s \leq d_{i}) +$$ + +### 1.4 Define objective function of optimization for each segment + +$$ +cost = \sum_{i=1}^{n} \Big( w_1 \cdot \int\limits_{0}^{d_i} (f_i')^2(s) ds + w_2 \cdot \int\limits_{0}^{d_i} (f_i'')^2(s) ds + w_3 \cdot \int\limits_{0}^{d_i} (f_i^{\prime\prime\prime})^2(s) ds \Big) +$$ + +### 1.5 Convert the cost function to QP formulation + +QP formulation: +$$ +\frac{1}{2} \cdot x^T \cdot H \cdot x + f^T \cdot x +\\ +s.t. LB \leq x \leq UB +\\ +A_{eq}x = b_{eq} +\\ +Ax \leq b +$$ +Below is the example for converting the cost function into the QP formulaiton. +$$ +f_i(s) = +\begin{vmatrix} a_{i0} & a_{i1} & a_{i2} & a_{i3} & a_{i4} & a_{i5} \end{vmatrix} +\cdot +\begin{vmatrix} 1 \\ s \\ s^2 \\ s^3 \\ s^4 \\ s^5 \end{vmatrix} +$$ + +And +$$ +f_i'(s) = +\begin{vmatrix} a_{i0} & a_{i1} & a_{i2} & a_{i3} & a_{i4} & a_{i5} \end{vmatrix} +\cdot +\begin{vmatrix} 0 \\ 1 \\ s \\ s^2 \\ s^3 \\ s^4 \end{vmatrix} +$$ + + +And +$$ +f_i'(s)^2 = +\begin{vmatrix} a_{i0} & a_{i1} & a_{i2} & a_{i3} & a_{i4} & a_{i5} \end{vmatrix} +\cdot +\begin{vmatrix} 0 \\ 1 \\ s \\ s^2 \\ s^3 \\ s^4 \end{vmatrix} +\cdot +\begin{vmatrix} 0 & 1 & s & s^2 & s^3 & s^4 \end{vmatrix} +\cdot +\begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} +$$ +And +$$ +\int\limits_{0}^{d_i} f_i'(s)^2 ds = +\int\limits_{0}^{d_i} +\begin{vmatrix} a_{i0} & a_{i1} & a_{i2} & a_{i3} & a_{i4} & a_{i5} \end{vmatrix} +\cdot +\begin{vmatrix} 0 \\ 1 \\ s \\ s^2 \\ s^3 \\ s^4 \end{vmatrix} +\cdot +\begin{vmatrix} 0 & 1 & s & s^2 & s^3 & s^4 \end{vmatrix} +\cdot +\begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} ds +$$ + + +And +$$ +\int\limits_{0}^{d_i} f'(s)^2 ds = +\begin{vmatrix} a_{i0} & a_{i1} & a_{i2} & a_{i3} & a_{i4} & a_{i5} \end{vmatrix} +\cdot +\int\limits_{0}^{d_i} +\begin{vmatrix} 0 \\ 1 \\ s \\ s^2 \\ s^3 \\ s^4 \end{vmatrix} +\cdot +\begin{vmatrix} 0 & 1 & s & s^2 & s^3 & s^4 \end{vmatrix} ds +\cdot +\begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} +$$ + + +And +$$ +\int\limits_{0}^{d_i} +f'(s)^2 ds =\begin{vmatrix} a_{i0} & a_{i1} & a_{i2} & a_{i3} & a_{i4} & a_{i5} \end{vmatrix} +\cdot \int\limits_{0}^{d_i} +\begin{vmatrix} +0 & 0 &0&0&0&0\\ +0 & 1 & s & s^2 & s^3 & s^4\\ +0 & s & s^2 & s^3 & s^4 & s^5\\ +0 & s^2 & s^3 & s^4&s^5&s^6 \\ +0 & s^3 & s^4 &s^5 &s^6&s^7 \\ +0 & s^4 & s^5 & s^6 & s^7 & s^8 +\end{vmatrix} ds +\cdot +\begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} +$$ +And +$$ +\int\limits_{0}^{d_i} +f'_i(s)^2 ds =\begin{vmatrix} a_{i0} & a_{i1} & a_{i2} & a_{i3} & a_{i4} & a_{i5} \end{vmatrix} +\cdot \begin{vmatrix} +0 & 0 & 0 & 0 &0&0\\ +0 & d_i & \frac{d_i^2}{2} & \frac{d_i^3}{3} & \frac{d_i^4}{4}&\frac{d_i^5}{5}\\ +0& \frac{d_i^2}{2} & \frac{d_i^3}{3} & \frac{d_i^4}{4} & \frac{d_i^5}{5}&\frac{d_i^6}{6}\\ +0& \frac{d_i^3}{3} & \frac{d_i^4}{4} & \frac{d_i^5}{5} & \frac{d_i^6}{6}&\frac{d_i^7}{7}\\ +0& \frac{d_i^4}{4} & \frac{d_i^5}{5} & \frac{d_i^6}{6} & \frac{d_i^7}{7}&\frac{d_i^8}{8}\\ +0& \frac{d_i^5}{5} & \frac{d_i^6}{6} & \frac{d_i^7}{7} & \frac{d_i^8}{8}&\frac{d_i^9}{9}\\ +\end{vmatrix} +\cdot +\begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} +$$ + +## 2 Constraints + +### 2.1 The init point constraints + +Assume that the first point is ($s0$, $l0$), and that $l0$ is on the planned path $f_i(s)$, $f'i(s)$, and $f_i(s)''$. Convert those constraints into QP equality constraints, using: +$$ +A_{eq}x = b_{eq} +$$ +Below are the steps of conversion. +$$ +f_i(s_0) = +\begin{vmatrix} 1 & s_0 & s_0^2 & s_0^3 & s_0^4&s_0^5 \end{vmatrix} +\cdot +\begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5}\end{vmatrix} = l_0 +$$ +And +$$ +f'_i(s_0) = +\begin{vmatrix} 0& 1 & s_0 & s_0^2 & s_0^3 & s_0^4 \end{vmatrix} +\cdot +\begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} = l_0 +$$ +And +$$ +f''_i(s_0) = +\begin{vmatrix} 0&0& 1 & s_0 & s_0^2 & s_0^3 \end{vmatrix} +\cdot +\begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} = l_0 +$$ +The $i$ is the index of segment that contains the $s_0$. + +Therefore the equality constraint is: +$$ +\begin{vmatrix} + 1 & s_0 & s_0^2 & s_0^3 & s_0^4&s_0^5 \\ + 0&1 & s_0 & s_0^2 & s_0^3 & s_0^4 \\ + 0& 0&1 & s_0 & s_0^2 & s_0^3 + \end{vmatrix} + \cdot + \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} + = + \begin{vmatrix} + l_0\\ + l_0\\ + l_0\\ + \end{vmatrix} +$$ + +### 2.2 The end point constraints + +Similar to the init point, the end point $(s_e, l_e)$ is known and should produce the same constraint as described in the init point calculations. + +Combine the init point and end point, and show the equality constraint as: +$$ +\begin{vmatrix} + 1 & s_0 & s_0^2 & s_0^3 & s_0^4&s_0^5 \\ + 0&1 & s_0 & s_0^2 & s_0^3 & s_0^4 \\ + 0& 0&1 & s_0 & s_0^2 & s_0^3 \\ + 1 & s_e & s_e^2 & s_e^3 & s_e^4&s_e^5 \\ + 0&1 & s_e & s_e^2 & s_e^3 & s_e^4 \\ + 0& 0&1 & s_e & s_e^2 & s_e^3 + \end{vmatrix} + \cdot + \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} + = + \begin{vmatrix} + l_0\\ + l_0\\ + l_0\\ + l_e\\ + l_e\\ + l_e\\ + \end{vmatrix} +$$ + + +### 2.3 Joint smoothness constraints + +This constraint is designed to smooth the spline joint. Assume two segments $seg_k$ and $seg_{k+1}$ are connected, and the accumulated **s** of segment $seg_k$ is $s_k$. Calculate the constraint equation as: +$$ +f_k(s_k) = f_{k+1} (s_0) +$$ +Below are the steps of the calculation. +$$ +\begin{vmatrix} + 1 & s_k & s_k^2 & s_k^3 & s_k^4&s_k^5 \\ + \end{vmatrix} + \cdot + \begin{vmatrix} + a_{k0} \\ a_{k1} \\ a_{k2} \\ a_{k3} \\ a_{k4} \\ a_{k5} + \end{vmatrix} + = +\begin{vmatrix} + 1 & s_{0} & s_{0}^2 & s_{0}^3 & s_{0}^4&s_{0}^5 \\ + \end{vmatrix} + \cdot + \begin{vmatrix} + a_{k+1,0} \\ a_{k+1,1} \\ a_{k+1,2} \\ a_{k+1,3} \\ a_{k+1,4} \\ a_{k+1,5} + \end{vmatrix} +$$ +Then +$$ +\begin{vmatrix} + 1 & s_k & s_k^2 & s_k^3 & s_k^4&s_k^5 & -1 & -s_{0} & -s_{0}^2 & -s_{0}^3 & -s_{0}^4&-s_{0}^5\\ + \end{vmatrix} + \cdot + \begin{vmatrix} + a_{k0} \\ a_{k1} \\ a_{k2} \\ a_{k3} \\ a_{k4} \\ a_{k5} \\ a_{k+1,0} \\ a_{k+1,1} \\ a_{k+1,2} \\ a_{k+1,3} \\ a_{k+1,4} \\ a_{k+1,5} + \end{vmatrix} + = 0 +$$ +Use $s_0$ = 0 in the equation. + +Similarly calculate the equality constraints for: +$$ +f'_k(s_k) = f'_{k+1} (s_0) +\\ +f''_k(s_k) = f''_{k+1} (s_0) +\\ +f'''_k(s_k) = f'''_{k+1} (s_0) +$$ + +### 2.4 Sampled points for boundary constraint + +Evenly sample **m** points along the path, and check the obstacle boundary at those points. Convert the constraint into QP inequality constraints, using: +$$ +Ax \leq b +$$ +First find the lower boundary $l_{lb,j}$ at those points ($s_j$, $l_j$) and $j\in[0, m]$ based on the road width and surrounding obstacles. Calculate the inequality constraints as: +$$ +\begin{vmatrix} + 1 & s_0 & s_0^2 & s_0^3 & s_0^4&s_0^5 \\ + 1 & s_1 & s_1^2 & s_1^3 & s_1^4&s_1^5 \\ + ...&...&...&...&...&... \\ + 1 & s_m & s_m^2 & s_m^3 & s_m^4&s_m^5 \\ + \end{vmatrix} \cdot \begin{vmatrix}a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} + \leq + \begin{vmatrix} + l_{lb,0}\\ + l_{lb,1}\\ + ...\\ + l_{lb,m}\\ + \end{vmatrix} +$$ + + +Similarly, for the upper boundary $l_{ub,j}$, calculate the inequality constraints as: +$$ +\begin{vmatrix} + 1 & s_0 & s_0^2 & s_0^3 & s_0^4&s_0^5 \\ + 1 & s_1 & s_1^2 & s_1^3 & s_1^4&s_1^5 \\ + ...&...&...&...&...&... \\ + 1 & s_m & s_m^2 & s_m^3 & s_m^4&s_m^5 \\ + \end{vmatrix} + \cdot + \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} + \leq + -1 \cdot + \begin{vmatrix} + l_{ub,0}\\ + l_{ub,1}\\ + ...\\ + l_{ub,m}\\ + \end{vmatrix} +$$ + + + + diff --git a/docs/specs/qp_spline_st_speed_optimizer.md b/docs/specs/qp_spline_st_speed_optimizer.md new file mode 100644 index 00000000000..ecb3b743c66 --- /dev/null +++ b/docs/specs/qp_spline_st_speed_optimizer.md @@ -0,0 +1,225 @@ +# QP-Spline-ST-Speed Optimizer + + + +## 1 Definition + +After finding a path in QP-Spline-Path, Apollo converts all obstacles on the path and the ADV (autonomous driving vehicle) into an ST graph, which represents the station changes over time along the path. The speed optimization task is to find a path on the ST graph that is collision-free and safe. + +Apollo uses spline to define the path. To find the best path, Apollo leverages Quadratic programming with a set of conditions. The QP formulation is defined as: +$$ +\frac{1}{2} \cdot x^T \cdot H \cdot x + f^T \cdot x +\\ +s.t. LB \leq x \leq UB +\\ +A_{eq}x = b_{eq} +\\ +Ax \leq b +$$ + +## 2 Objective function + +### 1.1 Get spline segments + +Split the path into **n** segments. Each segment trajectory is defined by a polynomial. + +### 1.2 Define function for each spline segment + +Each segment ***i*** has accumulated distance $d_i$ along a reference line. And the trajectory for the segment is defined as a polynomial of degree five by default. + +$$ +s = f_i(t) + = a_{0i} + a_{1i} \cdot t + a_{2i} \cdot t^2 + a_{3i} \cdot t^3 + a_{4i} \cdot t^4 + a_{5i} \cdot t^5 +$$ + +### 1.3 Define objective function of optimization for each segment + +Apollo first defines $cost_1$ to make the trajectory smooth: +$$ +cost_1 = \sum_{i=1}^{n} \Big( w_1 \cdot \int\limits_{0}^{d_i} (f_i')^2(s) ds + w_2 \cdot \int\limits_{0}^{d_i} (f_i'')^2(s) ds + w_3 \cdot \int\limits_{0}^{d_i} (f_i^{\prime\prime\prime})^2(s) ds \Big) +$$ + +Then Apollo defines $cost_2$ as the difference between the final ST trajectory and the cruise ST trajectory (with given speed limits — m points): +$$ +cost_2 = \sum_{i=1}^{n}\sum_{j=1}^{m}\Big(f_i(t_j)- s_j\Big)^2 +$$ +Similarly, Apollo defines $cost_3$ that is the difference between the first ST path and the follow ST path (o points): +$$ +cost_3 = \sum_{i=1}^{n}\sum_{j=1}^{o}\Big(f_i(t_j)- s_j\Big)^2 +$$ +Finally, the objective function is defined as: +$$ +cost = cost_1 + cost_2 + cost_3 +$$ + +## 3 Constraints + +### 3.1 The init point constraints + +Given the assumption that the the first point is ($t0$, $s0$), and $s0$ is on the planned path $f_i(t)$, $f'i(t)$, and $f_i(t)''$ (position, velocity, acceleration). Apollo converts those constraint into QP equality constraints: +$$ +A_{eq}x = b_{eq} +$$ + +### 3.2 Monotone constraint + +The path must be monotone, e.g., the vehicle can only drive forward. + +Sample **m** points on the path, for each $j$ and $j-1$ point pairs ($j\in[1,...,m]$): + +If the two points on the same spline $k$: +$$ +\begin{vmatrix} 1 & t_j & t_j^2 & t_j^3 & t_j^4&t_j^5 \\ \end{vmatrix} +\cdot +\begin{vmatrix} a_k \\ b_k \\ c_k \\ d_k \\ e_k \\ f_k \end{vmatrix} +> +\begin{vmatrix} 1 & t_{j-1} & t_{j-1}^2 & t_{j-1}^3 & t_{j-1}^4&t_{j-1}^5 \\ \end{vmatrix} +\cdot +\begin{vmatrix} a_{k} \\ b_{k} \\ c_{k} \\ d_{k} \\ e_{k} \\ f_{k} \end{vmatrix} +$$ + If the two points on the different spline $k$ and $l$: +$$ +\begin{vmatrix} 1 & t_j & t_j^2 & t_j^3 & t_j^4&t_j^5 \\ \end{vmatrix} +\cdot +\begin{vmatrix} a_k \\ b_k \\ c_k \\ d_k \\ e_k \\ f_k \end{vmatrix} +> +\begin{vmatrix} 1 & t_{j-1} & t_{j-1}^2 & t_{j-1}^3 & t_{j-1}^4&t_{j-1}^5 \\ \end{vmatrix} +\cdot +\begin{vmatrix} a_{l} \\ b_{l} \\ c_{l} \\ d_{l} \\ e_{l} \\ f_{l} \end{vmatrix} +$$ + + + +### 3.3 Joint smoothness constraints + +This constraint is designed to smooth the spline joint. Given the assumption that two segments, $seg_k$ and $seg_{k+1}$, are connected, and the accumulated **s** of segment is $seg_k$ is $s_k$, Apollo calculates the constraint equation as: +$$ +f_k(t_k) = f_{k+1} (t_0) +$$ +Namely: +$$ +\begin{vmatrix} + 1 & t_k & t_k^2 & t_k^3 & t_k^4&t_k^5 \\ + \end{vmatrix} + \cdot + \begin{vmatrix} + a_{k0} \\ a_{k1} \\ a_{k2} \\ a_{k3} \\ a_{k4} \\ a_{k5} + \end{vmatrix} + = +\begin{vmatrix} + 1 & t_{0} & t_{0}^2 & t_{0}^3 & t_{0}^4&t_{0}^5 \\ + \end{vmatrix} + \cdot + \begin{vmatrix} + a_{k+1,0} \\ a_{k+1,1} \\ a_{k+1,2} \\ a_{k+1,3} \\ a_{k+1,4} \\ a_{k+1,5} + \end{vmatrix} +$$ +Then +$$ +\begin{vmatrix} + 1 & t_k & t_k^2 & t_k^3 & t_k^4&t_k^5 & -1 & -t_{0} & -t_{0}^2 & -t_{0}^3 & -t_{0}^4&-t_{0}^5\\ + \end{vmatrix} + \cdot + \begin{vmatrix} + a_{k0} \\ a_{k1} \\ a_{k2} \\ a_{k3} \\ a_{k4} \\ a_{k5} \\ a_{k+1,0} \\ a_{k+1,1} \\ a_{k+1,2} \\ a_{k+1,3} \\ a_{k+1,4} \\ a_{k+1,5} + \end{vmatrix} + = 0 +$$ +The result is $t_0$ = 0 in the equation. + +Similarly calculate the equality constraints for +$$ +f'_k(t_k) = f'_{k+1} (t_0) +\\ +f''_k(t_k) = f''_{k+1} (t_0) +\\ +f'''_k(t_k) = f'''_{k+1} (t_0) +$$ + +### 3.4 Sampled points for boundary constraint + +Evenly sample **m** points along the path, and check the obstacle boundary at those points. Convert the constraint into QP inequality constraints, using: +$$ +Ax \leq b +$$ +Apollo first finds the lower boundary $l_{lb,j}$ at those points ($s_j$, $l_j$) and $j\in[0, m]$ based on the road width and surrounding obstacles. Then it calculates the inequality constraints as: +$$ +\begin{vmatrix} + 1 & t_0 & t_0^2 & t_0^3 & t_0^4&t_0^5 \\ + 1 & t_1 & t_1^2 & t_1^3 & t_1^4&t_1^5 \\ + ...&...&...&...&...&... \\ + 1 & t_m & t_m^2 & t_m^3 & t_m^4&t_m^5 \\ + \end{vmatrix} \cdot \begin{vmatrix} a_i \\ b_i \\ c_i \\ d_i \\ e_i \\ f_i \end{vmatrix} + \leq + \begin{vmatrix} + l_{lb,0}\\ + l_{lb,1}\\ + ...\\ + l_{lb,m}\\ + \end{vmatrix} +$$ + + +Similarly, for upper boundary $l_{ub,j}$, Apollo calculates the inequality constraints as: +$$ +\begin{vmatrix} + 1 & t_0 & t_0^2 & t_0^3 & t_0^4&t_0^5 \\ + 1 & t_1 & t_1^2 & t_1^3 & t_1^4&t_1^5 \\ + ...&...&...&...&...&... \\ + 1 & t_m & t_m^2 & t_m^3 & t_m^4&t_m^5 \\ + \end{vmatrix} \cdot \begin{vmatrix} a_i \\ b_i \\ c_i \\ d_i \\ e_i \\ f_i \end{vmatrix} + \leq + -1 \cdot + \begin{vmatrix} + l_{ub,0}\\ + l_{ub,1}\\ + ...\\ + l_{ub,m}\\ + \end{vmatrix} +$$ + + + +### 3.5 Speed Boundary constraint + +Apollo establishes a speed limit boundary as well. + +Sample **m** points on the st curve, and get speed limits defined as an upper boundary and a lower boundary for each point $j$, e.g., $v{ub,j}$ and $v{lb,j}$ . The constraints are defined as: +$$ +f'(t_j) \geq v_{lb,j} +$$ +Namely +$$ +\begin{vmatrix} +0& 1 & t_0 & t_0^2 & t_0^3 & t_0^4 \\ +0 & 1 & t_1 & t_1^2 & t_1^3 & t_1^4 \\ +...&...&...&...&...&... \\ +0& 1 & t_m & t_m^2 & t_m^3 & t_m^4 \\ +\end{vmatrix} +\cdot +\begin{vmatrix} +a_i \\ b_i \\ c_i \\ d_i \\ e_i \\ f_i +\end{vmatrix} +\geq +\begin{vmatrix} v_{lb,0}\\ v_{lb,1}\\ ...\\ v_{lb,m}\\ \end{vmatrix} +$$ +And +$$ +f'(t_j) \leq v_{ub,j} +$$ +Namely +$$ +\begin{vmatrix} + 0& 1 & t_0 & t_0^2 & t_0^3 & t_0^4 \\ + 0 & 1 & t_1 & t_1^2 & t_1^3 & t_1^4 \\ + ...&...&...&...&...&... \\ + 0 &1 & t_m & t_m^2 & t_m^3 & t_m^4 \\ + \end{vmatrix} \cdot \begin{vmatrix} a_i \\ b_i \\ c_i \\ d_i \\ e_i \\ f_i \end{vmatrix} + \leq + \begin{vmatrix} + v_{ub,0}\\ + v_{ub,1}\\ + ...\\ + v_{ub,m}\\ + \end{vmatrix} +$$ diff --git a/docs/specs/reference_line_smoother.md b/docs/specs/reference_line_smoother.md new file mode 100644 index 00000000000..37c0b9369eb --- /dev/null +++ b/docs/specs/reference_line_smoother.md @@ -0,0 +1,79 @@ +# reference line smoother + +Quadratic programming + Spline interpolation + +## 1. Objective function + +### 1.1 Segment routing path + +Segment routing path into **n** segments. each segment trajectory is defined by two polynomials: + +$$ +x = f_i(t) + = a_{i0} + a_{i1} * t + a_{i2} * t^2 + a_{i3} * t^3 + a_{i4} * t^4 + a_{i5} * t^5 +$$ + +$$ +y = g_i(t) = b_{i0} + b_{i1} * t + b_{i2} * t^2 + b_{i3} * t^3 + b_{i4} * t^4 + b_{i5} * t^5 +$$ + +### 1.2 Define objective function of optimization for each segment + +$$ +cost = +\sum_{i=1}^{n} +\Big( +\int\limits_{0}^{t_i} (f_i''')^2(t) dt ++ \int\limits_{0}^{t_i} (g_i''')^2(t) dt +\Big) +$$ + +### 1.3 Convert the cost function to QP formulation + +QP formulation: +$$ +\frac{1}{2} \cdot x^T \cdot H \cdot x + f^T \cdot x +\\ +s.t. LB \leq x \leq UB +\\ +A_{eq}x = b_{eq} +\\ +Ax \leq b +$$ + + +## 2 Constraints + + +### 2.1 Joint smoothness constraints + +This constraint smoothes the spline joint. Let's assume two segments, $seg_k$ and $seg_{k+1}$, are connected and the accumulated **s** of segment $seg_k$ is $s_k$. Calculate the constraint equation as: +$$ +f_k(s_k) = f_{k+1} (s_0) +$$ +Similarly the formula works for the equality constraints, such as: +$$ +f'_k(s_k) = f'_{k+1} (s_0) +\\ +f''_k(s_k) = f''_{k+1} (s_0) +\\ +f'''_k(s_k) = f'''_{k+1} (s_0) +\\ +g_k(s_k) = g_{k+1} (s_0) +\\ +g'_k(s_k) = g'_{k+1} (s_0) +\\ +g''_k(s_k) = g''_{k+1} (s_0) +\\ +g'''_k(s_k) = g'''_{k+1} (s_0) +$$ + +### 2.2 Sampled points for boundary constraint + +Evenly sample **m** points along the path and check the predefined boundaries at those points. +$$ +f_i(t_l) - x_l< boundary +\\ +g_i(t_l) - y_l< boundary +$$ + diff --git a/modules/calibration/data/beijing_mkz/64E_S3_calibration_example.yaml b/modules/calibration/data/beijing_mkz/64E_S3_calibration_example.yaml new file mode 100644 index 00000000000..a02c68421c5 --- /dev/null +++ b/modules/calibration/data/beijing_mkz/64E_S3_calibration_example.yaml @@ -0,0 +1,243 @@ +lasers: +- {dist_correction: 1.3280478, dist_correction_x: 1.3733278999999998, dist_correction_y: 1.3565268000000001, + focal_distance: 12.0, focal_slope: 0.75, horiz_offset_correction: 0.025999999, laser_id: 0, + min_intensity: 5, rot_correction: -0.08042396035379652, vert_correction: -0.12376696608832838, + vert_offset_correction: 0.21551828} +- {dist_correction: 1.4387065, dist_correction_x: 1.4772083, dist_correction_y: 1.4930743000000002, + focal_distance: 18.5, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 1, + min_intensity: 40, rot_correction: -0.043931143295210404, vert_correction: -0.11852979325378328, + vert_offset_correction: 0.21513613} +- {dist_correction: 1.4198532000000001, dist_correction_x: 1.4513388, dist_correction_y: 1.4459473, + focal_distance: 17.0, focal_slope: 1.25, horiz_offset_correction: 0.025999999, laser_id: 2, + min_intensity: 40, rot_correction: 0.05671893510512383, vert_correction: 0.006831742116548479, + vert_offset_correction: 0.20608189} +- {dist_correction: 1.432045, dist_correction_x: 1.4576363, dist_correction_y: 1.5053079, + focal_distance: 24.0, focal_slope: 0.94999999, horiz_offset_correction: -0.025999999, + laser_id: 3, min_intensity: 40, rot_correction: 0.09507418428186684, vert_correction: 0.011737269755557637, + vert_offset_correction: 0.2057291} +- {dist_correction: 1.3768561, dist_correction_x: 1.4095345000000001, dist_correction_y: 1.4140973, + focal_distance: 24.0, focal_slope: 0.60000002, horiz_offset_correction: 0.025999999, + laser_id: 4, min_intensity: 40, rot_correction: -0.0052020566354620415, vert_correction: -0.11207511538496126, + vert_offset_correction: 0.21466578} +- {dist_correction: 1.4579066, dist_correction_x: 1.5030013, dist_correction_y: 1.5402745, + focal_distance: 23.0, focal_slope: 0.80000001, horiz_offset_correction: -0.025999999, + laser_id: 5, min_intensity: 40, rot_correction: 0.034271327080062704, vert_correction: -0.10662164389621649, + vert_offset_correction: 0.21426891} +- {dist_correction: 1.4042904999999999, dist_correction_x: 1.4512584000000002, dist_correction_y: 1.4358795000000002, + focal_distance: 24.0, focal_slope: 0.80000001, horiz_offset_correction: 0.025999999, + laser_id: 6, min_intensity: 40, rot_correction: -0.019350118096339984, vert_correction: -0.14744596324186607, + vert_offset_correction: 0.21725271} +- {dist_correction: 1.4530759, dist_correction_x: 1.4934110999999999, dist_correction_y: 1.4934732, + focal_distance: 16.5, focal_slope: 0.80000001, horiz_offset_correction: -0.025999999, + laser_id: 7, min_intensity: 40, rot_correction: 0.019696635766030937, vert_correction: -0.1420415773930044, + vert_offset_correction: 0.21685585} +- {dist_correction: 1.3928452999999998, dist_correction_x: 1.4412779, dist_correction_y: 1.4351759000000002, + focal_distance: 24.0, focal_slope: 0.64999998, horiz_offset_correction: 0.025999999, + laser_id: 8, min_intensity: 10, rot_correction: 0.06977400140069993, vert_correction: -0.10055477120587059, + vert_offset_correction: 0.21382797} +- {dist_correction: 1.4649026, dist_correction_x: 1.4811482, dist_correction_y: 1.5390858, + focal_distance: 16.5, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 9, + min_intensity: 40, rot_correction: 0.10867481606700684, vert_correction: -0.09508820800240662, + vert_offset_correction: 0.21343111} +- {dist_correction: 1.3307669000000002, dist_correction_x: 1.3797191000000002, dist_correction_y: 1.3716772000000002, + focal_distance: 24.0, focal_slope: 0.85000002, horiz_offset_correction: 0.025999999, + laser_id: 10, min_intensity: 40, rot_correction: 0.05614793318704137, vert_correction: -0.13622757149534595, + vert_offset_correction: 0.2164296} +- {dist_correction: 1.3771700999999998, dist_correction_x: 1.4101131, dist_correction_y: 1.4538571, + focal_distance: 15.0, focal_slope: 1.35, horiz_offset_correction: -0.025999999, + laser_id: 11, min_intensity: 40, rot_correction: 0.09458836664858647, vert_correction: -0.13060523940147076, + vert_offset_correction: 0.21601805} +- {dist_correction: 1.3797005, dist_correction_x: 1.4142267000000002, dist_correction_y: 1.4085233, + focal_distance: 10.0, focal_slope: 1.2, horiz_offset_correction: 0.025999999, laser_id: 12, + min_intensity: 10, rot_correction: -0.08058553944528767, vert_correction: -0.05321597901122562, + vert_offset_correction: 0.21040320999999998} +- {dist_correction: 1.3646324, dist_correction_x: 1.3887102, dist_correction_y: 1.4070561000000001, + focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 13, + min_intensity: 40, rot_correction: -0.04053784798354424, vert_correction: -0.04669103069605979, + vert_offset_correction: 0.20993286000000003} +- {dist_correction: 1.3809781, dist_correction_x: 1.4282532000000001, dist_correction_y: 1.4207353, + focal_distance: 15.0, focal_slope: 1.3, horiz_offset_correction: 0.025999999, laser_id: 14, + min_intensity: 40, rot_correction: -0.09419900463641756, vert_correction: -0.08758781436692292, + vert_offset_correction: 0.21288727000000002} +- {dist_correction: 1.3950202999999999, dist_correction_x: 1.4285829, dist_correction_y: 1.4621552, + focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 15, + min_intensity: 40, rot_correction: -0.054354701628396805, vert_correction: -0.08292035016148458, + vert_offset_correction: 0.21254919000000003} +- {dist_correction: 1.2988774, dist_correction_x: 1.3749954, dist_correction_y: 1.3734656, + focal_distance: 24.0, focal_slope: 0.64999998, horiz_offset_correction: 0.025999999, + laser_id: 16, min_intensity: 40, rot_correction: -0.005133124856654525, vert_correction: -0.04077432787988471, + vert_offset_correction: 0.20950663} +- {dist_correction: 1.4723137, dist_correction_x: 1.5056056000000002, dist_correction_y: 1.5041873000000001, + focal_distance: 24.0, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 17, + min_intensity: 20, rot_correction: 0.033464606229193644, vert_correction: -0.03526310344619148, + vert_offset_correction: 0.20910976000000003} +- {dist_correction: 1.3093359000000002, dist_correction_x: 1.4065028000000002, dist_correction_y: 1.3988147000000002, + focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 18, + min_intensity: 20, rot_correction: -0.01912024950720607, vert_correction: -0.07662373803636939, + vert_offset_correction: 0.21209354000000002} +- {dist_correction: 1.4292241, dist_correction_x: 1.4580751, dist_correction_y: 1.4810971000000002, + focal_distance: 24.0, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 19, + min_intensity: 15, rot_correction: 0.0202102704569296, vert_correction: -0.07052442491121666, + vert_offset_correction: 0.21165258} +- {dist_correction: 1.3831145, dist_correction_x: 1.4038123999999998, dist_correction_y: 1.3966234, + focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 20, + min_intensity: 30, rot_correction: 0.06874179273711946, vert_correction: -0.029137015224983895, + vert_offset_correction: 0.2086688} +- {dist_correction: 1.402925, dist_correction_x: 1.4443744, dist_correction_y: 1.471532, + focal_distance: 17.0, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 21, + min_intensity: 5, rot_correction: 0.10747970535236223, vert_correction: -0.02341734437339572, + vert_offset_correction: 0.20825726} +- {dist_correction: 1.4234489, dist_correction_x: 1.4673076, dist_correction_y: 1.4543761000000002, + focal_distance: 24.0, focal_slope: 0.55000001, horiz_offset_correction: 0.025999999, + laser_id: 22, min_intensity: 5, rot_correction: 0.05514045060297391, vert_correction: -0.0642162831410628, + vert_offset_correction: 0.21119694} +- {dist_correction: 1.470387, dist_correction_x: 1.4879053, dist_correction_y: 1.5217740000000002, + focal_distance: 24.0, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 23, + min_intensity: 30, rot_correction: 0.09433926976708334, vert_correction: -0.05892161916095702, + vert_offset_correction: 0.21081478} +- {dist_correction: 1.3722501, dist_correction_x: 1.4119496, dist_correction_y: 1.4214716, + focal_distance: 24.0, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 24, + min_intensity: 20, rot_correction: -0.08011834622045531, vert_correction: 0.01868575851656834, + vert_offset_correction: 0.20522938000000002} +- {dist_correction: 1.4577922, dist_correction_x: 1.4821321, dist_correction_y: 1.4774638, + focal_distance: 20.0, focal_slope: 0.69999999, horiz_offset_correction: -0.025999999, + laser_id: 25, min_intensity: 10, rot_correction: -0.0415592740030059, vert_correction: 0.023180922072920565, + vert_offset_correction: 0.20490601000000003} +- {dist_correction: 1.4175369, dist_correction_x: 1.4441992, dist_correction_y: 1.4484555000000001, + focal_distance: 12.0, focal_slope: 1.5, horiz_offset_correction: 0.025999999, laser_id: 26, + min_intensity: 20, rot_correction: -0.09469728915654493, vert_correction: -0.01647002637924725, + vert_offset_correction: 0.20775749000000002} +- {dist_correction: 1.4383292, dist_correction_x: 1.4573476, dist_correction_y: 1.4790007, + focal_distance: 7.0, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 27, + min_intensity: 10, rot_correction: -0.055555304894197445, vert_correction: -0.011156249123969949, + vert_offset_correction: 0.20737534000000002} +- {dist_correction: 1.3976639, dist_correction_x: 1.434787, dist_correction_y: 1.4289362, + focal_distance: 24.0, focal_slope: 0.85000002, horiz_offset_correction: 0.025999999, + laser_id: 28, min_intensity: 40, rot_correction: -0.0056653665027087, vert_correction: 0.030126075858796564, + vert_offset_correction: 0.20440624} +- {dist_correction: 1.5147818000000002, dist_correction_x: 1.5457281, dist_correction_y: 1.5337862000000002, + focal_distance: 16.0, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 29, + min_intensity: 10, rot_correction: 0.032454556265796485, vert_correction: 0.03461850099355241, + vert_offset_correction: 0.20408289000000002} +- {dist_correction: 1.4410570999999999, dist_correction_x: 1.4812628, dist_correction_y: 1.4802063, + focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 30, + min_intensity: 20, rot_correction: -0.019155442326243284, vert_correction: -0.004819796717085346, + vert_offset_correction: 0.20691969000000002} +- {dist_correction: 1.5121419, dist_correction_x: 1.525024, dist_correction_y: 1.5161595, + focal_distance: 19.5, focal_slope: 1.15, horiz_offset_correction: -0.025999999, + laser_id: 31, rot_correction: 0.019031284839244163, vert_correction: 0.0006993883727657528, + vert_offset_correction: 0.20652283000000002} +- {dist_correction: 1.4162563000000001, dist_correction_x: 1.4498225, dist_correction_y: 1.4345399, + focal_distance: 8.5, focal_slope: 1.65, horiz_offset_correction: 0.025999999, laser_id: 32, + rot_correction: -0.1322630822793796, vert_correction: -0.39265743814277154, vert_offset_correction: 0.1598857} +- {dist_correction: 1.3670056, dist_correction_x: 1.3952693, dist_correction_y: 1.4121672, + focal_distance: 0.25, focal_slope: 1.05, horiz_offset_correction: -0.025999999, + laser_id: 33, rot_correction: -0.07110342218260252, vert_correction: -0.38671040324952605, + vert_offset_correction: 0.15945383} +- {dist_correction: 1.4511356000000002, dist_correction_x: 1.4689107000000001, dist_correction_y: 1.4972537, + focal_distance: 4.0, focal_slope: 0.64999998, horiz_offset_correction: 0.025999999, + laser_id: 34, rot_correction: 0.08401589158763215, vert_correction: -0.1973354249839361, + vert_offset_correction: 0.14657393000000002} +- {dist_correction: 1.3593520000000001, dist_correction_x: 1.3602931, dist_correction_y: 1.3982458, + focal_distance: 10.0, focal_slope: 1.75, horiz_offset_correction: -0.025999999, + laser_id: 35, rot_correction: 0.14363965670666648, vert_correction: -0.19024942312742418, + vert_offset_correction: 0.14611665000000001} +- {dist_correction: 1.4114377, dist_correction_x: 1.4772849, dist_correction_y: 1.4348904, + focal_distance: 17.0, focal_slope: 0.69999999, horiz_offset_correction: 0.025999999, + laser_id: 36, rot_correction: -0.011690171347560868, vert_correction: -0.376852242582194, + vert_offset_correction: 0.15874252} +- {dist_correction: 1.307847, dist_correction_x: 1.3645581000000002, dist_correction_y: 1.376617, + focal_distance: 6.0, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 37, + rot_correction: 0.049492148009829026, vert_correction: -0.3699409132772216, vert_offset_correction: 0.15824712999999999} +- {dist_correction: 1.4213585, dist_correction_x: 1.4421179000000002, dist_correction_y: 1.4552965, + focal_distance: 0.25, focal_slope: 0.94999999, horiz_offset_correction: 0.025999999, + laser_id: 38, rot_correction: -0.03418474478652977, vert_correction: -0.4311006362058518, + vert_offset_correction: 0.16273095999999998} +- {dist_correction: 1.3356409, dist_correction_x: 1.3397028, dist_correction_y: 1.3601659000000001, + focal_distance: 0.25, focal_slope: 1.05, horiz_offset_correction: -0.025999999, + laser_id: 39, rot_correction: 0.026626332916051272, vert_correction: -0.4231418824568801, + vert_offset_correction: 0.16213396} +- {dist_correction: 1.3662766, dist_correction_x: 1.4298528, dist_correction_y: 1.4232704, + focal_distance: 0.25, focal_slope: 0.85000002, horiz_offset_correction: 0.025999999, + laser_id: 40, rot_correction: 0.1092471200007113, vert_correction: -0.35798081768512774, + vert_offset_correction: 0.15739609} +- {dist_correction: 1.2853244000000001, dist_correction_x: 1.3026004, dist_correction_y: 1.3116373, + focal_distance: 8.0, focal_slope: 1.5, horiz_offset_correction: -0.025999999, laser_id: 41, + rot_correction: 0.16893982038921165, vert_correction: -0.3493458884773484, vert_offset_correction: 0.1567864} +- {dist_correction: 1.4113557, dist_correction_x: 1.4361624000000002, dist_correction_y: 1.4260374, + focal_distance: 0.25, focal_slope: 1.05, horiz_offset_correction: 0.025999999, laser_id: 42, + rot_correction: 0.08876389924739155, vert_correction: -0.41221208962882355, vert_offset_correction: 0.16132105} +- {dist_correction: 1.3126003, dist_correction_x: 1.3216837000000001, dist_correction_y: 1.3253735, + focal_distance: 0.25, focal_slope: 1.15, horiz_offset_correction: -0.025999999, + laser_id: 43, rot_correction: 0.15014050027953305, vert_correction: -0.40135006793562183, + vert_offset_correction: 0.1605208} +- {dist_correction: 1.4849261000000002, dist_correction_x: 1.5387573, dist_correction_y: 1.5140117000000002, + focal_distance: 8.0, focal_slope: 1.45, horiz_offset_correction: 0.025999999, laser_id: 44, + rot_correction: -0.1289198918798797, vert_correction: -0.285349621541792, vert_offset_correction: 0.15237877} +- {dist_correction: 1.3467159000000002, dist_correction_x: 1.385616, dist_correction_y: 1.398739, + focal_distance: 4.0, focal_slope: 0.75, horiz_offset_correction: -0.025999999, laser_id: 45, + rot_correction: -0.06875650237205527, vert_correction: -0.27837142867317577, vert_offset_correction: 0.1519088} +- {dist_correction: 1.4548677, dist_correction_x: 1.5237317, dist_correction_y: 1.4852321000000002, + focal_distance: 8.0, focal_slope: 1.55, horiz_offset_correction: 0.025999999, laser_id: 46, + rot_correction: -0.15456063213134205, vert_correction: -0.3373837683033222, vert_offset_correction: 0.15594806} +- {dist_correction: 1.2609565999999999, dist_correction_x: 1.3084103, dist_correction_y: 1.3194104, + focal_distance: 0.25, focal_slope: 0.85000002, horiz_offset_correction: -0.025999999, + laser_id: 47, rot_correction: -0.0921635423215472, vert_correction: -0.329718648747706, + vert_offset_correction: 0.15541457} +- {dist_correction: 1.2807050000000002, dist_correction_x: 1.3367023, dist_correction_y: 1.3303235000000002, + focal_distance: 24.0, focal_slope: 0.40000001, horiz_offset_correction: 0.025999999, + laser_id: 48, rot_correction: -0.01087391977724544, vert_correction: -0.2702265530127714, + vert_offset_correction: 0.15136261} +- {dist_correction: 1.3420832999999999, dist_correction_x: 1.3902283, dist_correction_y: 1.3959544, + focal_distance: 15.0, focal_slope: 0.69999999, horiz_offset_correction: -0.025999999, + laser_id: 49, rot_correction: 0.04819382026855073, vert_correction: -0.2603276912672828, + vert_offset_correction: 0.1507021} +- {dist_correction: 1.4451799, dist_correction_x: 1.5144832, dist_correction_y: 1.4737889000000002, + focal_distance: 20.0, focal_slope: 0.5, horiz_offset_correction: 0.025999999, laser_id: 50, + rot_correction: -0.033916384706072375, vert_correction: -0.3244024456593014, vert_offset_correction: 0.15504621000000002} +- {dist_correction: 1.2771001, dist_correction_x: 1.3374065, dist_correction_y: 1.339816, + focal_distance: 8.0, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 51, + rot_correction: 0.027376620290886354, vert_correction: -0.3166693629826125, vert_offset_correction: 0.15451272} +- {dist_correction: 1.3977615, dist_correction_x: 1.4442108, dist_correction_y: 1.4371663000000001, + focal_distance: 0.25, focal_slope: 0.44999999, horiz_offset_correction: 0.025999999, + laser_id: 52, rot_correction: 0.10492072454703917, vert_correction: -0.25133544080174264, + vert_offset_correction: 0.1501051} +- {dist_correction: 1.3425783999999998, dist_correction_x: 1.3483524, dist_correction_y: 1.3818097, + focal_distance: 11.0, focal_slope: 1.9, horiz_offset_correction: -0.025999999, laser_id: 53, + rot_correction: 0.16284451104936298, vert_correction: -0.23979553322706634, vert_offset_correction: 0.14934298000000001} +- {dist_correction: 1.4382911999999999, dist_correction_x: 1.4900905, dist_correction_y: 1.4804431, + focal_distance: 8.0, focal_slope: 0.40000001, horiz_offset_correction: 0.025999999, + laser_id: 54, rot_correction: 0.08525729890601516, vert_correction: -0.30499605989320633, + vert_offset_correction: 0.15371249} +- {dist_correction: 1.2974651, dist_correction_x: 1.3356235, dist_correction_y: 1.342494, + focal_distance: 11.0, focal_slope: 2.0, horiz_offset_correction: -0.025999999, laser_id: 55, + rot_correction: 0.14474094026605314, vert_correction: -0.29379823685192097, vert_offset_correction: 0.15295037} +- {dist_correction: 1.500197, dist_correction_x: 1.5058761999999999, dist_correction_y: 1.5183740000000001, + focal_distance: 6.0, focal_slope: 1.4, horiz_offset_correction: 0.025999999, laser_id: 56, + rot_correction: -0.1271355405564693, vert_correction: -0.1783966652843279, vert_offset_correction: 0.14535453} +- {dist_correction: 1.3739523, dist_correction_x: 1.3909152, dist_correction_y: 1.4026927, + focal_distance: 0.25, focal_slope: 0.94999999, horiz_offset_correction: -0.025999999, + laser_id: 57, rot_correction: -0.06914267741301003, vert_correction: -0.17006926832673774, + vert_offset_correction: 0.14482104} +- {dist_correction: 1.5294423000000001, dist_correction_x: 1.5526985, dist_correction_y: 1.5286189, + focal_distance: 10.0, focal_slope: 1.6, horiz_offset_correction: 0.025999999, laser_id: 58, + rot_correction: -0.14952992127533238, vert_correction: -0.23167847811493877, vert_offset_correction: 0.14880949} +- {dist_correction: 1.356432, dist_correction_x: 1.3750079, dist_correction_y: 1.3956981, + focal_distance: 0.25, focal_slope: 0.5, horiz_offset_correction: -0.025999999, laser_id: 59, + rot_correction: -0.08941942047983109, vert_correction: -0.22430756871133128, vert_offset_correction: 0.14832681} +- {dist_correction: 1.4812624, dist_correction_x: 1.5439316, dist_correction_y: 1.5051659000000002, + focal_distance: 0.25, focal_slope: 0.69999999, horiz_offset_correction: 0.025999999, + laser_id: 60, rot_correction: -0.012020974421732715, vert_correction: -0.16291245497181386, + vert_offset_correction: 0.14436376} +- {dist_correction: 1.3555016, dist_correction_x: 1.3739404, dist_correction_y: 1.3961284, + focal_distance: 0.25, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 61, + rot_correction: 0.045806682836049765, vert_correction: -0.154741111393303, vert_offset_correction: 0.14384298} +- {dist_correction: 1.5067404, dist_correction_x: 1.5184990999999999, dist_correction_y: 1.5367628, + focal_distance: 5.0, focal_slope: 0.40000001, horiz_offset_correction: 0.025999999, + laser_id: 62, rot_correction: -0.03255746436915258, vert_correction: -0.21418087168528735, + vert_offset_correction: 0.1476663} +- {dist_correction: 1.3463322, dist_correction_x: 1.356904, dist_correction_y: 1.3849588, + focal_distance: 8.0, focal_slope: 0.40000001, horiz_offset_correction: -0.025999999, + laser_id: 63, rot_correction: 0.02613443455565695, vert_correction: -0.2063605225459988, + vert_offset_correction: 0.14715822} +num_lasers: 64 diff --git a/modules/calibration/data/beijing_mkz/velodyne64_novatel_extrinsics_example.yaml b/modules/calibration/data/beijing_mkz/velodyne64_novatel_extrinsics_example.yaml new file mode 100644 index 00000000000..232e4cdbeb2 --- /dev/null +++ b/modules/calibration/data/beijing_mkz/velodyne64_novatel_extrinsics_example.yaml @@ -0,0 +1,17 @@ +header: + seq: 0 + stamp: + secs: 1504071530 + nsecs: 0 + frame_id: novatel +transform: + rotation: + x: 0.02586839453030634 + y: -0.03004435225954187 + z: 0.6994715770653714 + w: 0.7135598614968552 + translation: + x: 0.001596842549225523 + y: 1.586873016593748 + z: 1 +child_frame_id: velodyne64 diff --git a/modules/calibration/data/mkz8/64E_S3_calibration_example.yaml b/modules/calibration/data/mkz8/64E_S3_calibration_example.yaml new file mode 100644 index 00000000000..a02c68421c5 --- /dev/null +++ b/modules/calibration/data/mkz8/64E_S3_calibration_example.yaml @@ -0,0 +1,243 @@ +lasers: +- {dist_correction: 1.3280478, dist_correction_x: 1.3733278999999998, dist_correction_y: 1.3565268000000001, + focal_distance: 12.0, focal_slope: 0.75, horiz_offset_correction: 0.025999999, laser_id: 0, + min_intensity: 5, rot_correction: -0.08042396035379652, vert_correction: -0.12376696608832838, + vert_offset_correction: 0.21551828} +- {dist_correction: 1.4387065, dist_correction_x: 1.4772083, dist_correction_y: 1.4930743000000002, + focal_distance: 18.5, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 1, + min_intensity: 40, rot_correction: -0.043931143295210404, vert_correction: -0.11852979325378328, + vert_offset_correction: 0.21513613} +- {dist_correction: 1.4198532000000001, dist_correction_x: 1.4513388, dist_correction_y: 1.4459473, + focal_distance: 17.0, focal_slope: 1.25, horiz_offset_correction: 0.025999999, laser_id: 2, + min_intensity: 40, rot_correction: 0.05671893510512383, vert_correction: 0.006831742116548479, + vert_offset_correction: 0.20608189} +- {dist_correction: 1.432045, dist_correction_x: 1.4576363, dist_correction_y: 1.5053079, + focal_distance: 24.0, focal_slope: 0.94999999, horiz_offset_correction: -0.025999999, + laser_id: 3, min_intensity: 40, rot_correction: 0.09507418428186684, vert_correction: 0.011737269755557637, + vert_offset_correction: 0.2057291} +- {dist_correction: 1.3768561, dist_correction_x: 1.4095345000000001, dist_correction_y: 1.4140973, + focal_distance: 24.0, focal_slope: 0.60000002, horiz_offset_correction: 0.025999999, + laser_id: 4, min_intensity: 40, rot_correction: -0.0052020566354620415, vert_correction: -0.11207511538496126, + vert_offset_correction: 0.21466578} +- {dist_correction: 1.4579066, dist_correction_x: 1.5030013, dist_correction_y: 1.5402745, + focal_distance: 23.0, focal_slope: 0.80000001, horiz_offset_correction: -0.025999999, + laser_id: 5, min_intensity: 40, rot_correction: 0.034271327080062704, vert_correction: -0.10662164389621649, + vert_offset_correction: 0.21426891} +- {dist_correction: 1.4042904999999999, dist_correction_x: 1.4512584000000002, dist_correction_y: 1.4358795000000002, + focal_distance: 24.0, focal_slope: 0.80000001, horiz_offset_correction: 0.025999999, + laser_id: 6, min_intensity: 40, rot_correction: -0.019350118096339984, vert_correction: -0.14744596324186607, + vert_offset_correction: 0.21725271} +- {dist_correction: 1.4530759, dist_correction_x: 1.4934110999999999, dist_correction_y: 1.4934732, + focal_distance: 16.5, focal_slope: 0.80000001, horiz_offset_correction: -0.025999999, + laser_id: 7, min_intensity: 40, rot_correction: 0.019696635766030937, vert_correction: -0.1420415773930044, + vert_offset_correction: 0.21685585} +- {dist_correction: 1.3928452999999998, dist_correction_x: 1.4412779, dist_correction_y: 1.4351759000000002, + focal_distance: 24.0, focal_slope: 0.64999998, horiz_offset_correction: 0.025999999, + laser_id: 8, min_intensity: 10, rot_correction: 0.06977400140069993, vert_correction: -0.10055477120587059, + vert_offset_correction: 0.21382797} +- {dist_correction: 1.4649026, dist_correction_x: 1.4811482, dist_correction_y: 1.5390858, + focal_distance: 16.5, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 9, + min_intensity: 40, rot_correction: 0.10867481606700684, vert_correction: -0.09508820800240662, + vert_offset_correction: 0.21343111} +- {dist_correction: 1.3307669000000002, dist_correction_x: 1.3797191000000002, dist_correction_y: 1.3716772000000002, + focal_distance: 24.0, focal_slope: 0.85000002, horiz_offset_correction: 0.025999999, + laser_id: 10, min_intensity: 40, rot_correction: 0.05614793318704137, vert_correction: -0.13622757149534595, + vert_offset_correction: 0.2164296} +- {dist_correction: 1.3771700999999998, dist_correction_x: 1.4101131, dist_correction_y: 1.4538571, + focal_distance: 15.0, focal_slope: 1.35, horiz_offset_correction: -0.025999999, + laser_id: 11, min_intensity: 40, rot_correction: 0.09458836664858647, vert_correction: -0.13060523940147076, + vert_offset_correction: 0.21601805} +- {dist_correction: 1.3797005, dist_correction_x: 1.4142267000000002, dist_correction_y: 1.4085233, + focal_distance: 10.0, focal_slope: 1.2, horiz_offset_correction: 0.025999999, laser_id: 12, + min_intensity: 10, rot_correction: -0.08058553944528767, vert_correction: -0.05321597901122562, + vert_offset_correction: 0.21040320999999998} +- {dist_correction: 1.3646324, dist_correction_x: 1.3887102, dist_correction_y: 1.4070561000000001, + focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 13, + min_intensity: 40, rot_correction: -0.04053784798354424, vert_correction: -0.04669103069605979, + vert_offset_correction: 0.20993286000000003} +- {dist_correction: 1.3809781, dist_correction_x: 1.4282532000000001, dist_correction_y: 1.4207353, + focal_distance: 15.0, focal_slope: 1.3, horiz_offset_correction: 0.025999999, laser_id: 14, + min_intensity: 40, rot_correction: -0.09419900463641756, vert_correction: -0.08758781436692292, + vert_offset_correction: 0.21288727000000002} +- {dist_correction: 1.3950202999999999, dist_correction_x: 1.4285829, dist_correction_y: 1.4621552, + focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 15, + min_intensity: 40, rot_correction: -0.054354701628396805, vert_correction: -0.08292035016148458, + vert_offset_correction: 0.21254919000000003} +- {dist_correction: 1.2988774, dist_correction_x: 1.3749954, dist_correction_y: 1.3734656, + focal_distance: 24.0, focal_slope: 0.64999998, horiz_offset_correction: 0.025999999, + laser_id: 16, min_intensity: 40, rot_correction: -0.005133124856654525, vert_correction: -0.04077432787988471, + vert_offset_correction: 0.20950663} +- {dist_correction: 1.4723137, dist_correction_x: 1.5056056000000002, dist_correction_y: 1.5041873000000001, + focal_distance: 24.0, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 17, + min_intensity: 20, rot_correction: 0.033464606229193644, vert_correction: -0.03526310344619148, + vert_offset_correction: 0.20910976000000003} +- {dist_correction: 1.3093359000000002, dist_correction_x: 1.4065028000000002, dist_correction_y: 1.3988147000000002, + focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 18, + min_intensity: 20, rot_correction: -0.01912024950720607, vert_correction: -0.07662373803636939, + vert_offset_correction: 0.21209354000000002} +- {dist_correction: 1.4292241, dist_correction_x: 1.4580751, dist_correction_y: 1.4810971000000002, + focal_distance: 24.0, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 19, + min_intensity: 15, rot_correction: 0.0202102704569296, vert_correction: -0.07052442491121666, + vert_offset_correction: 0.21165258} +- {dist_correction: 1.3831145, dist_correction_x: 1.4038123999999998, dist_correction_y: 1.3966234, + focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 20, + min_intensity: 30, rot_correction: 0.06874179273711946, vert_correction: -0.029137015224983895, + vert_offset_correction: 0.2086688} +- {dist_correction: 1.402925, dist_correction_x: 1.4443744, dist_correction_y: 1.471532, + focal_distance: 17.0, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 21, + min_intensity: 5, rot_correction: 0.10747970535236223, vert_correction: -0.02341734437339572, + vert_offset_correction: 0.20825726} +- {dist_correction: 1.4234489, dist_correction_x: 1.4673076, dist_correction_y: 1.4543761000000002, + focal_distance: 24.0, focal_slope: 0.55000001, horiz_offset_correction: 0.025999999, + laser_id: 22, min_intensity: 5, rot_correction: 0.05514045060297391, vert_correction: -0.0642162831410628, + vert_offset_correction: 0.21119694} +- {dist_correction: 1.470387, dist_correction_x: 1.4879053, dist_correction_y: 1.5217740000000002, + focal_distance: 24.0, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 23, + min_intensity: 30, rot_correction: 0.09433926976708334, vert_correction: -0.05892161916095702, + vert_offset_correction: 0.21081478} +- {dist_correction: 1.3722501, dist_correction_x: 1.4119496, dist_correction_y: 1.4214716, + focal_distance: 24.0, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 24, + min_intensity: 20, rot_correction: -0.08011834622045531, vert_correction: 0.01868575851656834, + vert_offset_correction: 0.20522938000000002} +- {dist_correction: 1.4577922, dist_correction_x: 1.4821321, dist_correction_y: 1.4774638, + focal_distance: 20.0, focal_slope: 0.69999999, horiz_offset_correction: -0.025999999, + laser_id: 25, min_intensity: 10, rot_correction: -0.0415592740030059, vert_correction: 0.023180922072920565, + vert_offset_correction: 0.20490601000000003} +- {dist_correction: 1.4175369, dist_correction_x: 1.4441992, dist_correction_y: 1.4484555000000001, + focal_distance: 12.0, focal_slope: 1.5, horiz_offset_correction: 0.025999999, laser_id: 26, + min_intensity: 20, rot_correction: -0.09469728915654493, vert_correction: -0.01647002637924725, + vert_offset_correction: 0.20775749000000002} +- {dist_correction: 1.4383292, dist_correction_x: 1.4573476, dist_correction_y: 1.4790007, + focal_distance: 7.0, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 27, + min_intensity: 10, rot_correction: -0.055555304894197445, vert_correction: -0.011156249123969949, + vert_offset_correction: 0.20737534000000002} +- {dist_correction: 1.3976639, dist_correction_x: 1.434787, dist_correction_y: 1.4289362, + focal_distance: 24.0, focal_slope: 0.85000002, horiz_offset_correction: 0.025999999, + laser_id: 28, min_intensity: 40, rot_correction: -0.0056653665027087, vert_correction: 0.030126075858796564, + vert_offset_correction: 0.20440624} +- {dist_correction: 1.5147818000000002, dist_correction_x: 1.5457281, dist_correction_y: 1.5337862000000002, + focal_distance: 16.0, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 29, + min_intensity: 10, rot_correction: 0.032454556265796485, vert_correction: 0.03461850099355241, + vert_offset_correction: 0.20408289000000002} +- {dist_correction: 1.4410570999999999, dist_correction_x: 1.4812628, dist_correction_y: 1.4802063, + focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 30, + min_intensity: 20, rot_correction: -0.019155442326243284, vert_correction: -0.004819796717085346, + vert_offset_correction: 0.20691969000000002} +- {dist_correction: 1.5121419, dist_correction_x: 1.525024, dist_correction_y: 1.5161595, + focal_distance: 19.5, focal_slope: 1.15, horiz_offset_correction: -0.025999999, + laser_id: 31, rot_correction: 0.019031284839244163, vert_correction: 0.0006993883727657528, + vert_offset_correction: 0.20652283000000002} +- {dist_correction: 1.4162563000000001, dist_correction_x: 1.4498225, dist_correction_y: 1.4345399, + focal_distance: 8.5, focal_slope: 1.65, horiz_offset_correction: 0.025999999, laser_id: 32, + rot_correction: -0.1322630822793796, vert_correction: -0.39265743814277154, vert_offset_correction: 0.1598857} +- {dist_correction: 1.3670056, dist_correction_x: 1.3952693, dist_correction_y: 1.4121672, + focal_distance: 0.25, focal_slope: 1.05, horiz_offset_correction: -0.025999999, + laser_id: 33, rot_correction: -0.07110342218260252, vert_correction: -0.38671040324952605, + vert_offset_correction: 0.15945383} +- {dist_correction: 1.4511356000000002, dist_correction_x: 1.4689107000000001, dist_correction_y: 1.4972537, + focal_distance: 4.0, focal_slope: 0.64999998, horiz_offset_correction: 0.025999999, + laser_id: 34, rot_correction: 0.08401589158763215, vert_correction: -0.1973354249839361, + vert_offset_correction: 0.14657393000000002} +- {dist_correction: 1.3593520000000001, dist_correction_x: 1.3602931, dist_correction_y: 1.3982458, + focal_distance: 10.0, focal_slope: 1.75, horiz_offset_correction: -0.025999999, + laser_id: 35, rot_correction: 0.14363965670666648, vert_correction: -0.19024942312742418, + vert_offset_correction: 0.14611665000000001} +- {dist_correction: 1.4114377, dist_correction_x: 1.4772849, dist_correction_y: 1.4348904, + focal_distance: 17.0, focal_slope: 0.69999999, horiz_offset_correction: 0.025999999, + laser_id: 36, rot_correction: -0.011690171347560868, vert_correction: -0.376852242582194, + vert_offset_correction: 0.15874252} +- {dist_correction: 1.307847, dist_correction_x: 1.3645581000000002, dist_correction_y: 1.376617, + focal_distance: 6.0, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 37, + rot_correction: 0.049492148009829026, vert_correction: -0.3699409132772216, vert_offset_correction: 0.15824712999999999} +- {dist_correction: 1.4213585, dist_correction_x: 1.4421179000000002, dist_correction_y: 1.4552965, + focal_distance: 0.25, focal_slope: 0.94999999, horiz_offset_correction: 0.025999999, + laser_id: 38, rot_correction: -0.03418474478652977, vert_correction: -0.4311006362058518, + vert_offset_correction: 0.16273095999999998} +- {dist_correction: 1.3356409, dist_correction_x: 1.3397028, dist_correction_y: 1.3601659000000001, + focal_distance: 0.25, focal_slope: 1.05, horiz_offset_correction: -0.025999999, + laser_id: 39, rot_correction: 0.026626332916051272, vert_correction: -0.4231418824568801, + vert_offset_correction: 0.16213396} +- {dist_correction: 1.3662766, dist_correction_x: 1.4298528, dist_correction_y: 1.4232704, + focal_distance: 0.25, focal_slope: 0.85000002, horiz_offset_correction: 0.025999999, + laser_id: 40, rot_correction: 0.1092471200007113, vert_correction: -0.35798081768512774, + vert_offset_correction: 0.15739609} +- {dist_correction: 1.2853244000000001, dist_correction_x: 1.3026004, dist_correction_y: 1.3116373, + focal_distance: 8.0, focal_slope: 1.5, horiz_offset_correction: -0.025999999, laser_id: 41, + rot_correction: 0.16893982038921165, vert_correction: -0.3493458884773484, vert_offset_correction: 0.1567864} +- {dist_correction: 1.4113557, dist_correction_x: 1.4361624000000002, dist_correction_y: 1.4260374, + focal_distance: 0.25, focal_slope: 1.05, horiz_offset_correction: 0.025999999, laser_id: 42, + rot_correction: 0.08876389924739155, vert_correction: -0.41221208962882355, vert_offset_correction: 0.16132105} +- {dist_correction: 1.3126003, dist_correction_x: 1.3216837000000001, dist_correction_y: 1.3253735, + focal_distance: 0.25, focal_slope: 1.15, horiz_offset_correction: -0.025999999, + laser_id: 43, rot_correction: 0.15014050027953305, vert_correction: -0.40135006793562183, + vert_offset_correction: 0.1605208} +- {dist_correction: 1.4849261000000002, dist_correction_x: 1.5387573, dist_correction_y: 1.5140117000000002, + focal_distance: 8.0, focal_slope: 1.45, horiz_offset_correction: 0.025999999, laser_id: 44, + rot_correction: -0.1289198918798797, vert_correction: -0.285349621541792, vert_offset_correction: 0.15237877} +- {dist_correction: 1.3467159000000002, dist_correction_x: 1.385616, dist_correction_y: 1.398739, + focal_distance: 4.0, focal_slope: 0.75, horiz_offset_correction: -0.025999999, laser_id: 45, + rot_correction: -0.06875650237205527, vert_correction: -0.27837142867317577, vert_offset_correction: 0.1519088} +- {dist_correction: 1.4548677, dist_correction_x: 1.5237317, dist_correction_y: 1.4852321000000002, + focal_distance: 8.0, focal_slope: 1.55, horiz_offset_correction: 0.025999999, laser_id: 46, + rot_correction: -0.15456063213134205, vert_correction: -0.3373837683033222, vert_offset_correction: 0.15594806} +- {dist_correction: 1.2609565999999999, dist_correction_x: 1.3084103, dist_correction_y: 1.3194104, + focal_distance: 0.25, focal_slope: 0.85000002, horiz_offset_correction: -0.025999999, + laser_id: 47, rot_correction: -0.0921635423215472, vert_correction: -0.329718648747706, + vert_offset_correction: 0.15541457} +- {dist_correction: 1.2807050000000002, dist_correction_x: 1.3367023, dist_correction_y: 1.3303235000000002, + focal_distance: 24.0, focal_slope: 0.40000001, horiz_offset_correction: 0.025999999, + laser_id: 48, rot_correction: -0.01087391977724544, vert_correction: -0.2702265530127714, + vert_offset_correction: 0.15136261} +- {dist_correction: 1.3420832999999999, dist_correction_x: 1.3902283, dist_correction_y: 1.3959544, + focal_distance: 15.0, focal_slope: 0.69999999, horiz_offset_correction: -0.025999999, + laser_id: 49, rot_correction: 0.04819382026855073, vert_correction: -0.2603276912672828, + vert_offset_correction: 0.1507021} +- {dist_correction: 1.4451799, dist_correction_x: 1.5144832, dist_correction_y: 1.4737889000000002, + focal_distance: 20.0, focal_slope: 0.5, horiz_offset_correction: 0.025999999, laser_id: 50, + rot_correction: -0.033916384706072375, vert_correction: -0.3244024456593014, vert_offset_correction: 0.15504621000000002} +- {dist_correction: 1.2771001, dist_correction_x: 1.3374065, dist_correction_y: 1.339816, + focal_distance: 8.0, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 51, + rot_correction: 0.027376620290886354, vert_correction: -0.3166693629826125, vert_offset_correction: 0.15451272} +- {dist_correction: 1.3977615, dist_correction_x: 1.4442108, dist_correction_y: 1.4371663000000001, + focal_distance: 0.25, focal_slope: 0.44999999, horiz_offset_correction: 0.025999999, + laser_id: 52, rot_correction: 0.10492072454703917, vert_correction: -0.25133544080174264, + vert_offset_correction: 0.1501051} +- {dist_correction: 1.3425783999999998, dist_correction_x: 1.3483524, dist_correction_y: 1.3818097, + focal_distance: 11.0, focal_slope: 1.9, horiz_offset_correction: -0.025999999, laser_id: 53, + rot_correction: 0.16284451104936298, vert_correction: -0.23979553322706634, vert_offset_correction: 0.14934298000000001} +- {dist_correction: 1.4382911999999999, dist_correction_x: 1.4900905, dist_correction_y: 1.4804431, + focal_distance: 8.0, focal_slope: 0.40000001, horiz_offset_correction: 0.025999999, + laser_id: 54, rot_correction: 0.08525729890601516, vert_correction: -0.30499605989320633, + vert_offset_correction: 0.15371249} +- {dist_correction: 1.2974651, dist_correction_x: 1.3356235, dist_correction_y: 1.342494, + focal_distance: 11.0, focal_slope: 2.0, horiz_offset_correction: -0.025999999, laser_id: 55, + rot_correction: 0.14474094026605314, vert_correction: -0.29379823685192097, vert_offset_correction: 0.15295037} +- {dist_correction: 1.500197, dist_correction_x: 1.5058761999999999, dist_correction_y: 1.5183740000000001, + focal_distance: 6.0, focal_slope: 1.4, horiz_offset_correction: 0.025999999, laser_id: 56, + rot_correction: -0.1271355405564693, vert_correction: -0.1783966652843279, vert_offset_correction: 0.14535453} +- {dist_correction: 1.3739523, dist_correction_x: 1.3909152, dist_correction_y: 1.4026927, + focal_distance: 0.25, focal_slope: 0.94999999, horiz_offset_correction: -0.025999999, + laser_id: 57, rot_correction: -0.06914267741301003, vert_correction: -0.17006926832673774, + vert_offset_correction: 0.14482104} +- {dist_correction: 1.5294423000000001, dist_correction_x: 1.5526985, dist_correction_y: 1.5286189, + focal_distance: 10.0, focal_slope: 1.6, horiz_offset_correction: 0.025999999, laser_id: 58, + rot_correction: -0.14952992127533238, vert_correction: -0.23167847811493877, vert_offset_correction: 0.14880949} +- {dist_correction: 1.356432, dist_correction_x: 1.3750079, dist_correction_y: 1.3956981, + focal_distance: 0.25, focal_slope: 0.5, horiz_offset_correction: -0.025999999, laser_id: 59, + rot_correction: -0.08941942047983109, vert_correction: -0.22430756871133128, vert_offset_correction: 0.14832681} +- {dist_correction: 1.4812624, dist_correction_x: 1.5439316, dist_correction_y: 1.5051659000000002, + focal_distance: 0.25, focal_slope: 0.69999999, horiz_offset_correction: 0.025999999, + laser_id: 60, rot_correction: -0.012020974421732715, vert_correction: -0.16291245497181386, + vert_offset_correction: 0.14436376} +- {dist_correction: 1.3555016, dist_correction_x: 1.3739404, dist_correction_y: 1.3961284, + focal_distance: 0.25, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 61, + rot_correction: 0.045806682836049765, vert_correction: -0.154741111393303, vert_offset_correction: 0.14384298} +- {dist_correction: 1.5067404, dist_correction_x: 1.5184990999999999, dist_correction_y: 1.5367628, + focal_distance: 5.0, focal_slope: 0.40000001, horiz_offset_correction: 0.025999999, + laser_id: 62, rot_correction: -0.03255746436915258, vert_correction: -0.21418087168528735, + vert_offset_correction: 0.1476663} +- {dist_correction: 1.3463322, dist_correction_x: 1.356904, dist_correction_y: 1.3849588, + focal_distance: 8.0, focal_slope: 0.40000001, horiz_offset_correction: -0.025999999, + laser_id: 63, rot_correction: 0.02613443455565695, vert_correction: -0.2063605225459988, + vert_offset_correction: 0.14715822} +num_lasers: 64 diff --git a/modules/calibration/data/mkz8/velodyne64_novatel_extrinsics_example.yaml b/modules/calibration/data/mkz8/velodyne64_novatel_extrinsics_example.yaml new file mode 100644 index 00000000000..232e4cdbeb2 --- /dev/null +++ b/modules/calibration/data/mkz8/velodyne64_novatel_extrinsics_example.yaml @@ -0,0 +1,17 @@ +header: + seq: 0 + stamp: + secs: 1504071530 + nsecs: 0 + frame_id: novatel +transform: + rotation: + x: 0.02586839453030634 + y: -0.03004435225954187 + z: 0.6994715770653714 + w: 0.7135598614968552 + translation: + x: 0.001596842549225523 + y: 1.586873016593748 + z: 1 +child_frame_id: velodyne64 diff --git a/modules/calibration/data/mkz9/64E_S3_calibration_example.yaml b/modules/calibration/data/mkz9/64E_S3_calibration_example.yaml new file mode 100644 index 00000000000..a84564e0549 --- /dev/null +++ b/modules/calibration/data/mkz9/64E_S3_calibration_example.yaml @@ -0,0 +1,246 @@ +lasers: +- {dist_correction: 1.2752063, dist_correction_x: 1.3139189, dist_correction_y: 1.3201204000000002, + focal_distance: 23.0, focal_slope: 0.80000001, horiz_offset_correction: 0.025999999, + laser_id: 0, min_intensity: 40, rot_correction: -0.07883297231288532, vert_correction: -0.1225589730984748, + vert_offset_correction: 0.21543011} +- {dist_correction: 1.354117, dist_correction_x: 1.3893244999999999, dist_correction_y: 1.3824525, + focal_distance: 11.1, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 1, + min_intensity: 40, rot_correction: -0.04257169063286875, vert_correction: -0.11732028531813898, + vert_offset_correction: 0.21504793} +- {dist_correction: 1.3552602999999999, dist_correction_x: 1.4380073999999998, dist_correction_y: 1.4320663, + focal_distance: 24.0, focal_slope: 0.69999999, horiz_offset_correction: 0.025999999, + laser_id: 2, min_intensity: 40, rot_correction: 0.0576001797697238, vert_correction: 0.006831742116548479, + vert_offset_correction: 0.20608189} +- {dist_correction: 1.3331795, dist_correction_x: 1.3594026, dist_correction_y: 1.3993605, + focal_distance: 23.0, focal_slope: 0.94999999, horiz_offset_correction: -0.025999999, + laser_id: 3, min_intensity: 40, rot_correction: 0.09708671122503676, vert_correction: 0.011737269755557637, + vert_offset_correction: 0.2057291} +- {dist_correction: 1.272046, dist_correction_x: 1.3137018, dist_correction_y: 1.2978722, + focal_distance: 24.0, focal_slope: 0.69999999, horiz_offset_correction: 0.025999999, + laser_id: 4, min_intensity: 40, rot_correction: -0.004134042716809833, vert_correction: -0.11106570246674108, + vert_offset_correction: 0.21459229000000002} +- {dist_correction: 1.1886112, dist_correction_x: 1.2300569000000001, dist_correction_y: 1.2463203, + focal_distance: 24.0, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 5, + min_intensity: 40, rot_correction: 0.03539678170426023, vert_correction: -0.1054088809215172, + vert_offset_correction: 0.21418074} +- {dist_correction: 1.2976839000000002, dist_correction_x: 1.3396898, dist_correction_y: 1.3132230999999999, + focal_distance: 24.0, focal_slope: 0.89999998, horiz_offset_correction: 0.025999999, + laser_id: 6, min_intensity: 40, rot_correction: -0.01812813105654391, vert_correction: -0.14704592330533348, + vert_offset_correction: 0.2172233} +- {dist_correction: 1.2863681, dist_correction_x: 1.3238104000000002, dist_correction_y: 1.3377951, + focal_distance: 14.0, focal_slope: 1.25, horiz_offset_correction: -0.025999999, + laser_id: 7, min_intensity: 40, rot_correction: 0.020696316728341994, vert_correction: -0.14023825084996633, + vert_offset_correction: 0.21672356} +- {dist_correction: 1.2849046000000002, dist_correction_x: 1.3267589000000002, dist_correction_y: 1.3180791, + focal_distance: 24.0, focal_slope: 0.60000002, horiz_offset_correction: 0.025999999, + laser_id: 8, min_intensity: 40, rot_correction: 0.0709183561953673, vert_correction: -0.09954287817478333, + vert_offset_correction: 0.21375446} +- {dist_correction: 1.3211784, dist_correction_x: 1.3745055, dist_correction_y: 1.3908893, + focal_distance: 17.5, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 9, + min_intensity: 40, rot_correction: 0.11014432221066224, vert_correction: -0.09387264202892864, + vert_offset_correction: 0.21334291} +- {dist_correction: 1.2667397, dist_correction_x: 1.3151773, dist_correction_y: 1.3144638000000002, + focal_distance: 10.0, focal_slope: 1.8, horiz_offset_correction: 0.025999999, laser_id: 10, + min_intensity: 40, rot_correction: 0.05752680089198221, vert_correction: -0.1352242183602887, + vert_offset_correction: 0.21635611000000002} +- {dist_correction: 1.2552061, dist_correction_x: 1.2864645, dist_correction_y: 1.313914, + focal_distance: 17.0, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 11, + min_intensity: 40, rot_correction: 0.09560686749622178, vert_correction: -0.12939936000534133, + vert_offset_correction: 0.21592983000000002} +- {dist_correction: 1.2950737, dist_correction_x: 1.3264038, dist_correction_y: 1.3272704, + focal_distance: 24.0, focal_slope: 1.3, horiz_offset_correction: 0.025999999, laser_id: 12, + min_intensity: 10, rot_correction: -0.07894119668914298, vert_correction: -0.05117740128364046, + vert_offset_correction: 0.21025623} +- {dist_correction: 1.3314511, dist_correction_x: 1.3439276000000002, dist_correction_y: 1.3750456, + focal_distance: 24.0, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 13, + min_intensity: 25, rot_correction: -0.039590087075821526, vert_correction: -0.04567113183969363, + vert_offset_correction: 0.20985937} +- {dist_correction: 1.2853152, dist_correction_x: 1.3545485, dist_correction_y: 1.32582, + focal_distance: 20.0, focal_slope: 1.15, horiz_offset_correction: 0.025999999, laser_id: 14, + min_intensity: 40, rot_correction: -0.09264152866247388, vert_correction: -0.08697921631142325, + vert_offset_correction: 0.21284317000000003} +- {dist_correction: 1.1956883999999999, dist_correction_x: 1.2309952, dist_correction_y: 1.2384804, + focal_distance: 19.5, focal_slope: 1.15, horiz_offset_correction: -0.025999999, + laser_id: 15, min_intensity: 40, rot_correction: -0.053828922936562766, vert_correction: -0.08088988123360417, + vert_offset_correction: 0.21240220999999998} +- {dist_correction: 1.2622006000000001, dist_correction_x: 1.3391359, dist_correction_y: 1.3450137000000002, + focal_distance: 24.0, focal_slope: 1.05, horiz_offset_correction: 0.025999999, laser_id: 16, + min_intensity: 25, rot_correction: -0.004196640695761861, vert_correction: -0.040366165181013325, + vert_offset_correction: 0.20947721000000002} +- {dist_correction: 1.3882208, dist_correction_x: 1.4129477, dist_correction_y: 1.4390656000000002, + focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 17, + min_intensity: 20, rot_correction: 0.035191251731545366, vert_correction: -0.03485476621439488, + vert_offset_correction: 0.20908035000000003} +- {dist_correction: 1.270416, dist_correction_x: 1.3805045999999999, dist_correction_y: 1.3587926, + focal_distance: 24.0, focal_slope: 0.64999998, horiz_offset_correction: 0.025999999, + laser_id: 18, min_intensity: 40, rot_correction: -0.01796702320395082, vert_correction: -0.07621729099615271, + vert_offset_correction: 0.21206415} +- {dist_correction: 1.4391471999999998, dist_correction_x: 1.4701469, dist_correction_y: 1.4810228, + focal_distance: 24.0, focal_slope: 1.15, horiz_offset_correction: -0.025999999, + laser_id: 19, min_intensity: 10, rot_correction: 0.021402925493316658, vert_correction: -0.07052442491121666, + vert_offset_correction: 0.21165258} +- {dist_correction: 1.3115741, dist_correction_x: 1.4043790000000003, dist_correction_y: 1.3746985, + focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 20, + min_intensity: 40, rot_correction: 0.07015680097488135, vert_correction: -0.02893277679591552, + vert_offset_correction: 0.20865412} +- {dist_correction: 1.3147861, dist_correction_x: 1.3458926, dist_correction_y: 1.3786374000000001, + focal_distance: 22.0, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 21, + min_intensity: 15, rot_correction: 0.10896112162283324, vert_correction: -0.022600128857734412, + vert_offset_correction: 0.20819845} +- {dist_correction: 1.2870654, dist_correction_x: 1.3318181000000002, dist_correction_y: 1.3219449, + focal_distance: 21.0, focal_slope: 0.89999998, horiz_offset_correction: 0.025999999, + laser_id: 22, min_intensity: 5, rot_correction: 0.056491201053665105, vert_correction: -0.06441985659968617, + vert_offset_correction: 0.21121164} +- {dist_correction: 1.3116136, dist_correction_x: 1.3367073, dist_correction_y: 1.3722873999999998, + focal_distance: 24.0, focal_slope: 0.94999999, horiz_offset_correction: -0.025999999, + laser_id: 23, min_intensity: 5, rot_correction: 0.09605195612607761, vert_correction: -0.058717920038627504, + vert_offset_correction: 0.21080008} +- {dist_correction: 1.334183, dist_correction_x: 1.3770262, dist_correction_y: 1.3650365, + focal_distance: 15.0, focal_slope: 1.5, horiz_offset_correction: 0.025999999, laser_id: 24, + min_intensity: 10, rot_correction: -0.07814212387105615, vert_correction: 0.01868575851656834, + vert_offset_correction: 0.20522938000000002} +- {dist_correction: 1.3277109999999999, dist_correction_x: 1.3308896, dist_correction_y: 1.3380003, + focal_distance: 16.0, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 25, + min_intensity: 20, rot_correction: -0.04068591124530794, vert_correction: 0.02481530248969487, + vert_offset_correction: 0.20478842} +- {dist_correction: 1.3784187, dist_correction_x: 1.4020284, dist_correction_y: 1.4110085, + focal_distance: 21.0, focal_slope: 1.15, horiz_offset_correction: 0.025999999, laser_id: 26, + min_intensity: 40, rot_correction: -0.09248550146333334, vert_correction: -0.015856927119606682, + vert_offset_correction: 0.20771341} +- {dist_correction: 1.3299843000000002, dist_correction_x: 1.3475424, dist_correction_y: 1.3875761, + focal_distance: 24.0, focal_slope: 1.15, horiz_offset_correction: -0.025999999, + laser_id: 27, rot_correction: -0.05342781834918644, vert_correction: -0.01033868471699117, + vert_offset_correction: 0.20731655000000002} +- {dist_correction: 1.3601752, dist_correction_x: 1.4000146000000002, dist_correction_y: 1.3781789, + focal_distance: 24.0, focal_slope: 0.44999999, horiz_offset_correction: 0.025999999, + laser_id: 28, rot_correction: -0.004424292891278668, vert_correction: 0.029513378024883952, + vert_offset_correction: 0.20445036000000003} +- {dist_correction: 1.3607886, dist_correction_x: 1.4001455999999999, dist_correction_y: 1.4214912000000002, + focal_distance: 24.0, focal_slope: 0.75, horiz_offset_correction: -0.025999999, + laser_id: 29, rot_correction: 0.03487417427567706, vert_correction: 0.03625176439960543, + vert_offset_correction: 0.2039653} +- {dist_correction: 1.3876024000000002, dist_correction_x: 1.4266457, dist_correction_y: 1.3987584000000002, + focal_distance: 24.0, focal_slope: 1.25, horiz_offset_correction: 0.025999999, laser_id: 30, + rot_correction: -0.018163875399624756, vert_correction: -0.004615383580558845, vert_offset_correction: 0.20690498000000002} +- {dist_correction: 1.3872712999999999, dist_correction_x: 1.409449, dist_correction_y: 1.4333896, + focal_distance: 23.0, focal_slope: 0.94999999, horiz_offset_correction: -0.025999999, + laser_id: 31, rot_correction: 0.020882827848197862, vert_correction: 0.001312627241293188, + vert_offset_correction: 0.20647875} +- {dist_correction: 1.3152968000000003, dist_correction_x: 1.3551462, dist_correction_y: 1.3403419, + focal_distance: 24.0, focal_slope: 0.40000001, horiz_offset_correction: 0.025999999, + laser_id: 32, rot_correction: -0.12998286720751434, vert_correction: -0.3917846862503118, + vert_offset_correction: 0.15982219} +- {dist_correction: 1.1306184000000001, dist_correction_x: 1.1613448, dist_correction_y: 1.1695766, + focal_distance: 0.25, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 33, + rot_correction: -0.06963576259729572, vert_correction: -0.38355018793281753, vert_offset_correction: 0.15922519} +- {dist_correction: 1.2786647, dist_correction_x: 1.3059875, dist_correction_y: 1.3299147, + focal_distance: 24.0, focal_slope: 0.44999999, horiz_offset_correction: 0.025999999, + laser_id: 34, rot_correction: 0.08608836360929105, vert_correction: -0.1973354249839361, + vert_offset_correction: 0.14657393000000002} +- {dist_correction: 1.3474704, dist_correction_x: 1.3588457, dist_correction_y: 1.3945218, + focal_distance: 11.0, focal_slope: 1.9, horiz_offset_correction: -0.025999999, laser_id: 35, + rot_correction: 0.14181459383312406, vert_correction: -0.18432959791721729, vert_offset_correction: 0.14573559} +- {dist_correction: 1.2310821, dist_correction_x: 1.2938965, dist_correction_y: 1.2814186, + focal_distance: 16.0, focal_slope: 0.40000001, horiz_offset_correction: 0.025999999, + laser_id: 36, rot_correction: -0.009213370242732586, vert_correction: -0.37561450743655717, + vert_offset_correction: 0.1586536} +- {dist_correction: 1.2136781, dist_correction_x: 1.2622253, dist_correction_y: 1.2666883, + focal_distance: 8.0, focal_slope: 0.44999999, horiz_offset_correction: -0.025999999, + laser_id: 37, rot_correction: 0.05153091946896116, vert_correction: -0.36709468269294687, + vert_offset_correction: 0.1580439} +- {dist_correction: 1.3207919000000001, dist_correction_x: 1.3694466, dist_correction_y: 1.3758972, + focal_distance: 0.25, focal_slope: 0.43000001, horiz_offset_correction: 0.025999999, + laser_id: 38, rot_correction: -0.032988304130995134, vert_correction: -0.42738242167398816, + vert_offset_correction: 0.16245152000000002} +- {dist_correction: 1.254662, dist_correction_x: 1.2655572, dist_correction_y: 1.2925728, + focal_distance: 0.25, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 39, + rot_correction: 0.02996149305566275, vert_correction: -0.4197376875640353, vert_offset_correction: 0.16187992} +- {dist_correction: 1.2326976, dist_correction_x: 1.2977957, dist_correction_y: 1.2959807, + focal_distance: 0.25, focal_slope: 0.94999999, horiz_offset_correction: 0.025999999, + laser_id: 40, rot_correction: 0.11124875259869024, vert_correction: -0.35546799734786144, + vert_offset_correction: 0.15721827} +- {dist_correction: 1.2586923, dist_correction_x: 1.2898768999999999, dist_correction_y: 1.2877043000000001, + focal_distance: 8.0, focal_slope: 1.55, horiz_offset_correction: -0.025999999, laser_id: 41, + rot_correction: 0.17148979704092368, vert_correction: -0.34319637793757907, vert_offset_correction: 0.15635452000000002} +- {dist_correction: 1.2951652999999999, dist_correction_x: 1.3469331, dist_correction_y: 1.3253401, + focal_distance: 0.25, focal_slope: 0.94999999, horiz_offset_correction: 0.025999999, + laser_id: 42, rot_correction: 0.08973073485850933, vert_correction: -0.4113537192494002, + vert_offset_correction: 0.16125753} +- {dist_correction: 1.2491970000000001, dist_correction_x: 1.2513244000000001, dist_correction_y: 1.2672708000000001, + focal_distance: 6.0, focal_slope: 1.45, horiz_offset_correction: -0.025999999, laser_id: 43, + rot_correction: 0.15193096025532546, vert_correction: -0.398922524385608, vert_offset_correction: 0.16034298} +- {dist_correction: 1.3504793000000002, dist_correction_x: 1.3742923, dist_correction_y: 1.3776834, + focal_distance: 11.0, focal_slope: 1.9, horiz_offset_correction: 0.025999999, laser_id: 44, + rot_correction: -0.12746921783885332, vert_correction: -0.2851614052352569, vert_offset_correction: 0.15236607} +- {dist_correction: 1.3194353, dist_correction_x: 1.3555048, dist_correction_y: 1.3676692, + focal_distance: 5.0, focal_slope: 0.55000001, horiz_offset_correction: -0.025999999, + laser_id: 45, rot_correction: -0.0670297922925212, vert_correction: -0.27515581660600885, + vert_offset_correction: 0.15169286} +- {dist_correction: 1.2517572, dist_correction_x: 1.3298462000000002, dist_correction_y: 1.2881517, + focal_distance: 9.5, focal_slope: 1.65, horiz_offset_correction: 0.025999999, laser_id: 46, + rot_correction: -0.1522074465887801, vert_correction: -0.33538020013520276, vert_offset_correction: 0.15580834} +- {dist_correction: 1.214207, dist_correction_x: 1.2622674, dist_correction_y: 1.2687372000000001, + focal_distance: 0.25, focal_slope: 0.75, horiz_offset_correction: -0.025999999, + laser_id: 47, rot_correction: -0.08983663794686182, vert_correction: -0.3282540382526024, + vert_offset_correction: 0.15531295} +- {dist_correction: 1.1414406, dist_correction_x: 1.2080206, dist_correction_y: 1.1919655, + focal_distance: 8.5, focal_slope: 1.3, horiz_offset_correction: 0.025999999, laser_id: 48, + rot_correction: -0.008088342700603029, vert_correction: -0.26946698572230343, vert_offset_correction: 0.1513118} +- {dist_correction: 1.1837295, dist_correction_x: 1.2247887, dist_correction_y: 1.2112551, + focal_distance: 15.0, focal_slope: 0.69999999, horiz_offset_correction: -0.025999999, + laser_id: 49, rot_correction: 0.05046789701743674, vert_correction: -0.2601368046069921, + vert_offset_correction: 0.1506894} +- {dist_correction: 1.2635911, dist_correction_x: 1.3508514, dist_correction_y: 1.3295909000000001, + focal_distance: 13.0, focal_slope: 0.55000001, horiz_offset_correction: 0.025999999, + laser_id: 50, rot_correction: -0.03103305540321719, vert_correction: -0.32109314431788744, + vert_offset_correction: 0.15481757000000002} +- {dist_correction: 1.0956693, dist_correction_x: 1.1582519, dist_correction_y: 1.1591959, + focal_distance: 10.5, focal_slope: 0.85000002, horiz_offset_correction: -0.025999999, + laser_id: 51, rot_correction: 0.029237828933237592, vert_correction: -0.3140828722976195, + vert_offset_correction: 0.15433489} +- {dist_correction: 1.2680698, dist_correction_x: 1.3010519, dist_correction_y: 1.3118181999999998, + focal_distance: 0.25, focal_slope: 0.69999999, horiz_offset_correction: 0.025999999, + laser_id: 52, rot_correction: 0.10784944462775096, vert_correction: -0.2509518697920318, + vert_offset_correction: 0.1500797} +- {dist_correction: 1.3034142, dist_correction_x: 1.3091043, dist_correction_y: 1.3535146, + focal_distance: 11.0, focal_slope: 2.0, horiz_offset_correction: -0.025999999, laser_id: 53, + rot_correction: 0.16523614619534635, vert_correction: -0.23940972819591302, vert_offset_correction: 0.14931756999999998} +- {dist_correction: 1.3151974000000002, dist_correction_x: 1.3637082, dist_correction_y: 1.3533908, + focal_distance: 0.25, focal_slope: 0.40000001, horiz_offset_correction: 0.025999999, + laser_id: 54, rot_correction: 0.0869574695089434, vert_correction: -0.30294892830695713, + vert_offset_correction: 0.15357277} +- {dist_correction: 1.2776234, dist_correction_x: 1.289026, dist_correction_y: 1.3073460000000001, + focal_distance: 11.5, focal_slope: 1.85, horiz_offset_correction: -0.025999999, + laser_id: 55, rot_correction: 0.1464806513031853, vert_correction: -0.29229936554360075, + vert_offset_correction: 0.15284875} +- {dist_correction: 1.3890512000000002, dist_correction_x: 1.3877768000000001, dist_correction_y: 1.3785843, + focal_distance: 0.25, focal_slope: 1.2, horiz_offset_correction: 0.025999999, laser_id: 56, + rot_correction: -0.1252743738020201, vert_correction: -0.17582174613227564, vert_offset_correction: 0.1451894} +- {dist_correction: 1.3896303, dist_correction_x: 1.4135710000000001, dist_correction_y: 1.4434415999999999, + focal_distance: 0.25, focal_slope: 1.05, horiz_offset_correction: -0.025999999, + laser_id: 57, rot_correction: -0.0668689252953649, vert_correction: -0.16848034151967312, + vert_offset_correction: 0.14471942000000002} +- {dist_correction: 1.4813303, dist_correction_x: 1.5015753, dist_correction_y: 1.5009795, + focal_distance: 7.0, focal_slope: 1.65, horiz_offset_correction: 0.025999999, laser_id: 58, + rot_correction: -0.14694131176062744, vert_correction: -0.230128800272093, vert_offset_correction: 0.14870787} +- {dist_correction: 1.3051801, dist_correction_x: 1.3334875, dist_correction_y: 1.356346, + focal_distance: 4.0, focal_slope: 0.94999999, horiz_offset_correction: -0.025999999, + laser_id: 59, rot_correction: -0.08817857864812571, vert_correction: -0.2219747092732381, + vert_offset_correction: 0.14817439000000002} +- {dist_correction: 1.300378, dist_correction_x: 1.3379957999999998, dist_correction_y: 1.3313292, + focal_distance: 0.25, focal_slope: 0.60000002, horiz_offset_correction: 0.025999999, + laser_id: 60, rot_correction: -0.0084572566097885, vert_correction: -0.16012465801089584, + vert_offset_correction: 0.14418593} +- {dist_correction: 1.2581644, dist_correction_x: 1.3149522, dist_correction_y: 1.2930194000000002, + focal_distance: 0.25, focal_slope: 0.89999998, horiz_offset_correction: -0.025999999, + laser_id: 61, rot_correction: 0.048843297425790605, vert_correction: -0.1511470421311337, + vert_offset_correction: 0.14361434} +- {dist_correction: 1.2993362, dist_correction_x: 1.3299077, dist_correction_y: 1.324184, + focal_distance: 10.0, focal_slope: 0.80000001, horiz_offset_correction: 0.025999999, + laser_id: 62, rot_correction: -0.030143852037228126, vert_correction: -0.21457119711920336, + vert_offset_correction: 0.14769171} +- {dist_correction: 1.3722379, dist_correction_x: 1.3900346, dist_correction_y: 1.4076549, + focal_distance: 13.0, focal_slope: 0.40000001, horiz_offset_correction: -0.025999999, + laser_id: 63, rot_correction: 0.02800567535054865, vert_correction: -0.20577295745331492, + vert_offset_correction: 0.14712011} +num_lasers: 64 diff --git a/modules/calibration/data/mkz9/velodyne64_novatel_extrinsics_example.yaml b/modules/calibration/data/mkz9/velodyne64_novatel_extrinsics_example.yaml new file mode 100644 index 00000000000..c9e4862b105 --- /dev/null +++ b/modules/calibration/data/mkz9/velodyne64_novatel_extrinsics_example.yaml @@ -0,0 +1,17 @@ +child_frame_id: velodyne64 +transform: + rotation: + x: 0.0178712428342356 + y: -0.01105483165178439 + z: 0.7086047865380262 + w: 0.7052926101074 + translation: + x: -0.0008540722033043019 + y: 1.410303305307884 + z: 1 +header: + seq: 0 + stamp: + secs: 1502870042 + nsecs: 0 + frame_id: novatel diff --git a/modules/calibration/lidar_ex_checker/BUILD b/modules/calibration/lidar_ex_checker/BUILD new file mode 100644 index 00000000000..1fc89fa38e0 --- /dev/null +++ b/modules/calibration/lidar_ex_checker/BUILD @@ -0,0 +1,38 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "lidar_ex_checker_lib", + srcs = ["lidar_ex_checker.cc"], + hdrs = ["lidar_ex_checker.h"], + copts = [ + "-Wno-deprecated", + ], + deps = [ + "//modules/calibration/lidar_ex_checker/common:lidar_ex_checker_common", + "//modules/common:apollo_app", + "//modules/common:log", + "//modules/common/adapters:adapter_manager", + "//modules/localization/proto:gps_proto", + "//modules/perception/lib/pcl_util", + "@vtk//:vtk", + ], +) + +cc_binary( + name = "lidar_ex_checker", + srcs = ["main.cc"], + data = [ + "//modules/calibration/lidar_ex_checker/conf:lidar_ex_checker_adapter_manager_config", + ], + linkstatic = 0, + deps = [ + ":lidar_ex_checker_lib", + "//external:gflags", + "//modules/common:log", + "@ros//:ros_common", + ], +) + +cpplint() diff --git a/modules/calibration/lidar_ex_checker/README.md b/modules/calibration/lidar_ex_checker/README.md new file mode 100644 index 00000000000..1c24dfcbdf4 --- /dev/null +++ b/modules/calibration/lidar_ex_checker/README.md @@ -0,0 +1,5 @@ +# calibration visualzer +This node is used to check lidar-to-gps calibration file. Run command: +```bash +$:./lidar_ex_checker --flagfile=/apollo/modules/calibration/lidar_ex_checker/conf/lidar_ex_checker.conf +``` diff --git a/modules/calibration/lidar_ex_checker/common/BUILD b/modules/calibration/lidar_ex_checker/common/BUILD new file mode 100644 index 00000000000..c7f2a2ede01 --- /dev/null +++ b/modules/calibration/lidar_ex_checker/common/BUILD @@ -0,0 +1,18 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "lidar_ex_checker_common", + srcs = glob([ + "*.cc", + ]), + hdrs = glob([ + "*.h", + ]), + deps = [ + "//modules/common", + ], +) + +cpplint() diff --git a/modules/calibration/lidar_ex_checker/common/lidar_ex_checker_gflags.cc b/modules/calibration/lidar_ex_checker/common/lidar_ex_checker_gflags.cc new file mode 100644 index 00000000000..ab6f635670f --- /dev/null +++ b/modules/calibration/lidar_ex_checker/common/lidar_ex_checker_gflags.cc @@ -0,0 +1,28 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/calibration/lidar_ex_checker/common/lidar_ex_checker_gflags.h" + +DEFINE_string(node_name, "lidar_ex_checker", + "The lidar extrinsics checker module name in proto"); + +DEFINE_int32(capture_cloud_count, 3, "the number of cloud count to capture"); + +DEFINE_double(capture_distance, 15.0, "the distance between two clouds"); + +DEFINE_string(adapter_config_filename, + "/apollo/modules/calibration/lidar_ex_checker/conf/adapter.conf", + "The adapter config file"); diff --git a/modules/calibration/lidar_ex_checker/common/lidar_ex_checker_gflags.h b/modules/calibration/lidar_ex_checker/common/lidar_ex_checker_gflags.h new file mode 100644 index 00000000000..1511e234fde --- /dev/null +++ b/modules/calibration/lidar_ex_checker/common/lidar_ex_checker_gflags.h @@ -0,0 +1,32 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_CALIBRATION_LIDAR_EX_CHECKER_COMMON_LIDAR_EX_CHECKER_GFLAGS_H_ +#define MODULES_CALIBRATION_LIDAR_EX_CHECKER_COMMON_LIDAR_EX_CHECKER_GFLAGS_H_ + +#include "gflags/gflags.h" + +DECLARE_string(node_name); + +// the number of cloud count to capture +DECLARE_int32(capture_cloud_count); +// the distance between two clouds +DECLARE_double(capture_distance); + +DECLARE_string(adapter_config_filename); + +#endif +/* MODULES_CALIBRATION_LIDAR_EX_CHECKER_COMMON_LIDAR_EX_CHECKER_GFLAGS_H_ */ diff --git a/modules/calibration/lidar_ex_checker/conf/BUILD b/modules/calibration/lidar_ex_checker/conf/BUILD new file mode 100644 index 00000000000..56be46ffbc9 --- /dev/null +++ b/modules/calibration/lidar_ex_checker/conf/BUILD @@ -0,0 +1,15 @@ +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "lidar_ex_checker_adapter_manager_config", + srcs = [ + "adapter.conf", + ], +) + +filegroup( + name = "lidar_ex_checker_config", + srcs = [ + "lidar_ex_checker.conf", + ], +) diff --git a/modules/calibration/lidar_ex_checker/conf/adapter.conf b/modules/calibration/lidar_ex_checker/conf/adapter.conf new file mode 100644 index 00000000000..cde31cc8a00 --- /dev/null +++ b/modules/calibration/lidar_ex_checker/conf/adapter.conf @@ -0,0 +1,19 @@ +config { + type: POINT_CLOUD + mode: RECEIVE_ONLY + message_history_limit: 10 +} + +config { + type: GPS + mode: RECEIVE_ONLY + message_history_limit: 100 +} + +config { + type: INS_STAT + mode: RECEIVE_ONLY + message_history_limit: 1 +} + +is_ros: true diff --git a/modules/calibration/lidar_ex_checker/conf/lidar_ex_checker.conf b/modules/calibration/lidar_ex_checker/conf/lidar_ex_checker.conf new file mode 100644 index 00000000000..348a0f932e6 --- /dev/null +++ b/modules/calibration/lidar_ex_checker/conf/lidar_ex_checker.conf @@ -0,0 +1,15 @@ +#################################################################### +# The pointcloud topic name. +# type: string +# default: /sensor/velodyne64/compensator/PointCloud2 +--pointcloud_topic=/apollo/sensor/velodyne64/compensator/PointCloud2 + +# The gnss topic name. +# type: string +# default: /sensor/gnss/odometry +--gps_topic=/apollo/sensor/gnss/odometry + +# Project work root directory. +# type: string +# default: "" +--work_root=modules/calibration diff --git a/modules/calibration/lidar_ex_checker/lidar_ex_checker.cc b/modules/calibration/lidar_ex_checker/lidar_ex_checker.cc new file mode 100644 index 00000000000..c3c5073117e --- /dev/null +++ b/modules/calibration/lidar_ex_checker/lidar_ex_checker.cc @@ -0,0 +1,207 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "eigen_conversions/eigen_msg.h" +#include "pcl/io/pcd_io.h" +#include "pcl/visualization/cloud_viewer.h" +#include "pcl_conversions/pcl_conversions.h" +#include "ros/include/ros/ros.h" +#include "sensor_msgs/PointCloud2.h" +#include "tf2_ros/transform_listener.h" + +#include "modules/calibration/lidar_ex_checker/common/lidar_ex_checker_gflags.h" +#include "modules/calibration/lidar_ex_checker/lidar_ex_checker.h" +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/log.h" + +namespace apollo { +namespace calibration { + +using apollo::common::adapter::AdapterManager; +using apollo::common::Status; +using apollo::common::ErrorCode; + +std::string LidarExChecker::Name() const { return "lidar_extrinsics_checker"; } + +Status LidarExChecker::Init() { + is_first_gps_msg_ = true; + + top_redundant_cloud_count_ = 0; + bottom_redundant_cloud_count_ = 0; + enough_data_ = false; + + cloud_count_ = FLAGS_capture_cloud_count; + capture_distance_ = FLAGS_capture_distance; + + position_type_ = 0; + + AdapterManager::Init(FLAGS_adapter_config_filename); + + CHECK(AdapterManager::GetGps()) << "GPS is not initialized."; + CHECK(AdapterManager::GetPointCloud()) << "PointCloud is not initialized."; + CHECK(AdapterManager::GetInsStat()) << "InsStat is not initialized."; + AdapterManager::AddPointCloudCallback(&LidarExChecker::OnPointCloud, this); + AdapterManager::AddGpsCallback(&LidarExChecker::OnGps, this); + AdapterManager::AddInsStatCallback(&LidarExChecker::OnInsStat, this); + + return Status::OK(); +} + +bool LidarExChecker::GetExtrinsics() { + static tf2_ros::Buffer tf2_buffer; + static tf2_ros::TransformListener tf2Listener(tf2_buffer); + + std::string err_msg; + + if (!tf2_buffer.canTransform("novatel", "velodyne64", ros::Time(0), + ros::Duration(100), &err_msg)) { + std::cerr << "Fail to get velodyne64 extrinsics for tf" << std::endl; + return false; + } + + geometry_msgs::TransformStamped transform_stamped; + transform_stamped = + tf2_buffer.lookupTransform("novatel", "velodyne64", ros::Time(0)); + tf::transformMsgToEigen(transform_stamped.transform, extrinsics_); + + return true; +} + +void LidarExChecker::VisualizeClouds() { + if (!GetExtrinsics()) { + return; + } + + boost::shared_ptr pcl_vis; + pcl_vis.reset(new pcl::visualization::PCLVisualizer("3D Viewer")); + for (uint32_t i = 0; i < clouds_.size(); ++i) { + pcl::PointCloud cld = clouds_[i]; + pcl::PointCloud::Ptr tf_cld_ptr( + new pcl::PointCloud); + double timestamp = cld.points.back().timestamp; + timestamp = round(timestamp * 100) / 100.0; + Eigen::Affine3d pose = gps_poses_[timestamp]; + + for (uint32_t j = 0; j < cld.points.size(); ++j) { + PointXYZIT pt = cld.points[j]; + Eigen::Vector3d pt_vec(pt.x, pt.y, pt.z); + Eigen::Vector3d tf_pt_vec = pose * extrinsics_ * pt_vec; + + pcl::PointXYZ tf_pt; + tf_pt.x = tf_pt_vec[0]; + tf_pt.y = tf_pt_vec[1]; + tf_pt.z = tf_pt_vec[2]; + tf_cld_ptr->points.push_back(tf_pt); + } + uint32_t seed = static_cast(timestamp); + int r = rand_r(&seed) % 255; + int g = rand_r(&seed) % 255; + int b = rand_r(&seed) % 255; + pcl::visualization::PointCloudColorHandlerCustom handler( + tf_cld_ptr, r, g, b); + pcl_vis->addPointCloud(tf_cld_ptr, handler, "clouds" + i); + } + pcl_vis->spin(); +} + +void LidarExChecker::OnPointCloud(const sensor_msgs::PointCloud2& message) { + if (top_redundant_cloud_count_ < 50) { + top_redundant_cloud_count_++; + return; + } + + if (enough_data_) { + bottom_redundant_cloud_count_++; + if (bottom_redundant_cloud_count_ == 50) { + VisualizeClouds(); + } + return; + } + + if (position_type_ != 56) { + return; + } + + Eigen::Vector3d position; + Eigen::Affine3d pose = gps_poses_.rbegin()->second; + position[0] = pose.translation().x(); + position[1] = pose.translation().y(); + position[2] = pose.translation().z(); + if ((position - last_position_).norm() < capture_distance_) { + return; + } + + pcl::PointCloud cld; + pcl::fromROSMsg(message, cld); + + pcl::PointCloud tmp_cld; + tmp_cld.header = cld.header; + for (uint32_t i = 0; i < cld.points.size(); ++i) { + if (pcl_isfinite(cld.points[i].x)) { + tmp_cld.push_back(cld.points[i]); + } + } + cld = tmp_cld; + + if (clouds_.size() < cloud_count_) { + last_position_ = position; + clouds_.push_back(cld); + } + + if (clouds_.size() >= cloud_count_) { + enough_data_ = true; + } else { + enough_data_ = false; + } +} + +void LidarExChecker::OnGps(const localization::Gps& message) { + if (message.has_localization()) { + const auto pose_msg = message.localization(); + Eigen::Quaterniond rotation( + pose_msg.orientation().qw(), pose_msg.orientation().qx(), + pose_msg.orientation().qy(), pose_msg.orientation().qz()); + Eigen::Translation3d translation(pose_msg.position().x(), + pose_msg.position().y(), + pose_msg.position().z()); + Eigen::Affine3d pose = translation * rotation; + + if (is_first_gps_msg_) { + is_first_gps_msg_ = false; + last_position_[0] = translation.x(); + last_position_[1] = translation.y(); + last_position_[2] = translation.z(); + offset_ = pose.inverse(); + } + Eigen::Affine3d new_pose = offset_ * pose; + + double timestamp = message.header().timestamp_sec(); + timestamp = round(timestamp * 100) / 100.0; + + gps_poses_.insert(std::make_pair(timestamp, new_pose)); + } +} + +void LidarExChecker::OnInsStat(const drivers::gnss::InsStat& message) { + position_type_ = message.pos_type(); +} + +Status LidarExChecker::Start() { return Status::OK(); } + +void LidarExChecker::Stop() {} + +} // namespace calibration +} // namespace apollo diff --git a/modules/calibration/lidar_ex_checker/lidar_ex_checker.h b/modules/calibration/lidar_ex_checker/lidar_ex_checker.h new file mode 100644 index 00000000000..acc7dee2477 --- /dev/null +++ b/modules/calibration/lidar_ex_checker/lidar_ex_checker.h @@ -0,0 +1,98 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + */ + +#ifndef MODEULES_CALIBRATION_LIDAR_EX_CHECKER_H_ +#define MODEULES_CALIBRATION_LIDAR_EX_CHECKER_H_ + +#include +#include +#include +#include + +#include "Eigen/Eigen" +#include "sensor_msgs/PointCloud2.h" + +#include "modules/common/apollo_app.h" +#include "modules/common/macro.h" +#include "modules/drivers/gnss/proto/ins.pb.h" +#include "modules/localization/proto/gps.pb.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "ros/include/ros/ros.h" + +/** + * @namespace apollo::calibration + * @brief apollo::calibration + */ +namespace apollo { +namespace calibration { + +using apollo::perception::pcl_util::PointXYZIT; + +class LidarExChecker : public apollo::common::ApolloApp { + public: + std::string Name() const override; + apollo::common::Status Init() override; + apollo::common::Status Start() override; + void Stop() override; + + private: + // get extrinsics which are calibrated before + bool GetExtrinsics(); + // visualize the checking result + void VisualizeClouds(); + + // Upon receiving point cloud data + void OnPointCloud(const sensor_msgs::PointCloud2& message); + // Upon receiving GPS data + void OnGps(const localization::Gps& message); + // Upon receiving INS status data + void OnInsStat(const drivers::gnss::InsStat& msg); + + bool is_first_gps_msg_; + + Eigen::Vector3d last_position_; + Eigen::Affine3d offset_; + Eigen::Affine3d extrinsics_; + + // the complete pose data; + std::map gps_poses_; + // the complete cloud data; + std::vector> clouds_; + + // to ensure the pose of given timestamp can be found, + // we pad some redundant clouds + uint32_t top_redundant_cloud_count_; + uint32_t bottom_redundant_cloud_count_; + // if program has took enough clouds + bool enough_data_; + + // the number of cloud count to take + uint32_t cloud_count_; + // the distance between two clouds + double capture_distance_; + + // latest INS status + uint32_t position_type_; +}; + +} // namespace calibration +} // namespace apollo + +#endif // MODEULES_CALIBRATION_LIDAR_EX_CHECKER_H_ diff --git a/modules/decision/main.cc b/modules/calibration/lidar_ex_checker/main.cc similarity index 86% rename from modules/decision/main.cc rename to modules/calibration/lidar_ex_checker/main.cc index 5b8b478fb50..dc65219e7b4 100644 --- a/modules/decision/main.cc +++ b/modules/calibration/lidar_ex_checker/main.cc @@ -18,7 +18,6 @@ #include "modules/common/log.h" #include "ros/include/ros/ros.h" -#include "modules/decision/common/decision_gflags.h" -#include "modules/decision/decision.h" +#include "modules/calibration/lidar_ex_checker/lidar_ex_checker.h" -APOLLO_MAIN(apollo::decision::Decision); +APOLLO_MAIN(apollo::calibration::LidarExChecker); diff --git a/modules/calibration/republish_msg/BUILD b/modules/calibration/republish_msg/BUILD new file mode 100644 index 00000000000..944e6c3bc70 --- /dev/null +++ b/modules/calibration/republish_msg/BUILD @@ -0,0 +1,36 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "republish_msg_lib", + srcs = ["republish_msg.cc"], + hdrs = ["republish_msg.h"], + deps = [ + "//modules/calibration/republish_msg/common:republish_msg_common", + "//modules/calibration/republish_msg/proto:relative_odometry_proto", + "//modules/common:apollo_app", + "//modules/common:log", + "//modules/common/adapters:adapter_manager", + "//modules/drivers/gnss/proto:ins_proto", + "//modules/localization/proto:gps_proto", + ], +) + +cc_binary( + name = "republish_msg", + srcs = ["main.cc"], + data = [ + "//modules/calibration/republish_msg/conf:republish_msg_adapter_manager_config", + "//modules/calibration/republish_msg/conf:republish_msg_config", + ], + linkstatic = 0, + deps = [ + ":republish_msg_lib", + "//external:gflags", + "//modules/common:log", + "@ros//:ros_common", + ], +) + +cpplint() diff --git a/modules/calibration/republish_msg/README.md b/modules/calibration/republish_msg/README.md new file mode 100644 index 00000000000..9772cc618f0 --- /dev/null +++ b/modules/calibration/republish_msg/README.md @@ -0,0 +1,5 @@ +# republish message +This node is used to re-publish messages. Run command: +```bash +$:./republish_msg --flagfile=/apollo/modules/calibration/republish_msg/conf/republish_msg.conf +``` diff --git a/modules/decision/common/BUILD b/modules/calibration/republish_msg/common/BUILD similarity index 77% rename from modules/decision/common/BUILD rename to modules/calibration/republish_msg/common/BUILD index 8ff6fffca3c..24860266534 100644 --- a/modules/decision/common/BUILD +++ b/modules/calibration/republish_msg/common/BUILD @@ -3,7 +3,7 @@ load("//tools:cpplint.bzl", "cpplint") package(default_visibility = ["//visibility:public"]) cc_library( - name = "decision_common", + name = "republish_msg_common", srcs = glob([ "*.cc", ]), @@ -11,7 +11,7 @@ cc_library( "*.h", ]), deps = [ - "//external:gflags", + "//modules/common", ], ) diff --git a/modules/calibration/republish_msg/common/republish_msg_gflags.cc b/modules/calibration/republish_msg/common/republish_msg_gflags.cc new file mode 100644 index 00000000000..5442d83cb25 --- /dev/null +++ b/modules/calibration/republish_msg/common/republish_msg_gflags.cc @@ -0,0 +1,24 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/calibration/republish_msg/common/republish_msg_gflags.h" + +DEFINE_string(node_name, "republish_msg", + "The republish message module name in proto"); + +DEFINE_string(adapter_config_filename, + "/apollo/modules/calibration/republish_msg/conf/adapter.conf", + "The adapter config file"); diff --git a/modules/calibration/republish_msg/common/republish_msg_gflags.h b/modules/calibration/republish_msg/common/republish_msg_gflags.h new file mode 100644 index 00000000000..8945e89b712 --- /dev/null +++ b/modules/calibration/republish_msg/common/republish_msg_gflags.h @@ -0,0 +1,26 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_CALIBRATION_REPUBLISH_MSG_COMMON_REPUBLISH_MSG_GFLAGS_H_ +#define MODULES_CALIBRATION_REPUBLISH_MSG_COMMON_REPUBLISH_MSG_GFLAGS_H_ + +#include "gflags/gflags.h" + +DECLARE_string(node_name); + +DECLARE_string(adapter_config_filename); + +#endif /* MODULES_CALIBRATION_REPUBLISH_MSG_COMMON_REPUBLISH_MSG_GFLAGS_H_ */ diff --git a/modules/calibration/republish_msg/conf/BUILD b/modules/calibration/republish_msg/conf/BUILD new file mode 100644 index 00000000000..4734a0461c4 --- /dev/null +++ b/modules/calibration/republish_msg/conf/BUILD @@ -0,0 +1,15 @@ +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "republish_msg_adapter_manager_config", + srcs = [ + "adapter.conf", + ], +) + +filegroup( + name = "republish_msg_config", + srcs = [ + "republish_msg.conf", + ], +) diff --git a/modules/calibration/republish_msg/conf/adapter.conf b/modules/calibration/republish_msg/conf/adapter.conf new file mode 100644 index 00000000000..3e8cc48f713 --- /dev/null +++ b/modules/calibration/republish_msg/conf/adapter.conf @@ -0,0 +1,18 @@ +config { + type: GPS + mode: RECEIVE_ONLY + message_history_limit: 100 +} + +config { + type: INS_STAT + mode: RECEIVE_ONLY + message_history_limit: 1 +} + +config { + type: RELATIVE_ODOMETRY + mode: PUBLISH_ONLY +} + +is_ros: true diff --git a/modules/calibration/republish_msg/conf/republish_msg.conf b/modules/calibration/republish_msg/conf/republish_msg.conf new file mode 100644 index 00000000000..c7c318173a9 --- /dev/null +++ b/modules/calibration/republish_msg/conf/republish_msg.conf @@ -0,0 +1 @@ +#################################################################### diff --git a/modules/decision/common/decision_gflags.cc b/modules/calibration/republish_msg/main.cc similarity index 79% rename from modules/decision/common/decision_gflags.cc rename to modules/calibration/republish_msg/main.cc index fa4e64ebcf0..f93d258cf4a 100644 --- a/modules/decision/common/decision_gflags.cc +++ b/modules/calibration/republish_msg/main.cc @@ -14,8 +14,10 @@ * limitations under the License. *****************************************************************************/ -#include "modules/decision/common/decision_gflags.h" +#include "gflags/gflags.h" +#include "modules/common/log.h" +#include "ros/include/ros/ros.h" -DEFINE_string(decision_module_name, "decision", "decision module name"); +#include "modules/calibration/republish_msg/republish_msg.h" -DEFINE_double(decision_publish_freq, 10, "decision publishing frequency."); +APOLLO_MAIN(apollo::calibration::RepublishMsg); diff --git a/modules/calibration/republish_msg/proto/BUILD b/modules/calibration/republish_msg/proto/BUILD new file mode 100644 index 00000000000..6ae6da20771 --- /dev/null +++ b/modules/calibration/republish_msg/proto/BUILD @@ -0,0 +1,19 @@ +package(default_visibility = ["//visibility:public"]) + +cc_proto_library( + name = "relative_odometry_proto", + deps = [ + "relative_odometry_proto_lib", + ], +) + +proto_library( + name = "relative_odometry_proto_lib", + srcs = [ + "relative_odometry.proto", + ], + deps = [ + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:header_proto_lib", + ], +) diff --git a/modules/calibration/republish_msg/proto/relative_odometry.proto b/modules/calibration/republish_msg/proto/relative_odometry.proto new file mode 100644 index 00000000000..1001a716553 --- /dev/null +++ b/modules/calibration/republish_msg/proto/relative_odometry.proto @@ -0,0 +1,19 @@ +syntax = "proto2"; + +package apollo.calibration.republish_msg; + +import "modules/common/proto/header.proto"; +import "modules/common/proto/geometry.proto"; + +message RelativeOdometry { + optional apollo.common.Header header = 1; + + // the relative position to the system start time + optional apollo.common.PointENU position = 2; + + // the relative orientation to the system start time + optional apollo.common.Quaternion orientation = 3; + + // the localization status + optional uint32 position_type = 4; +} diff --git a/modules/calibration/republish_msg/republish_msg.cc b/modules/calibration/republish_msg/republish_msg.cc new file mode 100644 index 00000000000..14c531c9cc8 --- /dev/null +++ b/modules/calibration/republish_msg/republish_msg.cc @@ -0,0 +1,95 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/calibration/republish_msg/common/republish_msg_gflags.h" +#include "modules/calibration/republish_msg/republish_msg.h" +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/log.h" +#include "ros/include/ros/ros.h" + +namespace apollo { +namespace calibration { + +using apollo::common::adapter::AdapterManager; +using apollo::common::Status; +using apollo::common::ErrorCode; + +std::string RepublishMsg::Name() const { return "republish_msg"; } + +Status RepublishMsg::Init() { + AdapterManager::Init(FLAGS_adapter_config_filename); + + CHECK(AdapterManager::GetInsStat()) << "INS status is not initialized."; + CHECK(AdapterManager::GetGps()) << "Gps is not initialized."; + CHECK(AdapterManager::GetRelativeOdometry()) + << "Relative odometry is not initialized."; + + AdapterManager::AddGpsCallback(&RepublishMsg::OnGps, this); + AdapterManager::AddInsStatCallback(&RepublishMsg::OnInsStat, this); + + is_first_gps_msg_ = true; + position_type_ = 0; + + return Status::OK(); +} + +void RepublishMsg::OnInsStat(const drivers::gnss::InsStat& msg) { + position_type_ = msg.pos_type(); +} + +void RepublishMsg::OnGps(const localization::Gps& msg) { + if (msg.has_localization()) { + const auto pose_msg = msg.localization(); + + Eigen::Quaterniond rotation( + pose_msg.orientation().qw(), pose_msg.orientation().qx(), + pose_msg.orientation().qy(), pose_msg.orientation().qz()); + Eigen::Translation3d translation(pose_msg.position().x(), + pose_msg.position().y(), + pose_msg.position().z()); + Eigen::Affine3d pose = translation * rotation; + + if (is_first_gps_msg_) { + is_first_gps_msg_ = false; + offset_ = pose.inverse(); + } + + Eigen::Affine3d pub_pose = offset_ * pose; + Eigen::Quaterniond pub_rot(pub_pose.rotation()); + Eigen::Translation3d pub_trans(pub_pose.translation()); + + calibration::republish_msg::RelativeOdometry pub_msg; + pub_msg.mutable_header()->set_timestamp_sec(msg.header().timestamp_sec()); + pub_msg.mutable_orientation()->set_qw(pub_rot.w()); + pub_msg.mutable_orientation()->set_qx(pub_rot.x()); + pub_msg.mutable_orientation()->set_qy(pub_rot.y()); + pub_msg.mutable_orientation()->set_qz(pub_rot.z()); + pub_msg.mutable_position()->set_x(pub_trans.x()); + pub_msg.mutable_position()->set_y(pub_trans.y()); + pub_msg.mutable_position()->set_z(pub_trans.z()); + + pub_msg.set_position_type(position_type_); + + AdapterManager::PublishRelativeOdometry(pub_msg); + } +} + +Status RepublishMsg::Start() { return Status::OK(); } + +void RepublishMsg::Stop() {} + +} // namespace calibration +} // namespace apollo diff --git a/modules/decision/decision.h b/modules/calibration/republish_msg/republish_msg.h similarity index 57% rename from modules/decision/decision.h rename to modules/calibration/republish_msg/republish_msg.h index ae47ab28fe8..8152d91fa81 100644 --- a/modules/decision/decision.h +++ b/modules/calibration/republish_msg/republish_msg.h @@ -14,40 +14,53 @@ * limitations under the License. *****************************************************************************/ -#ifndef MODULES_DECISION_DECISION_H_ -#define MODULES_DECISION_DECISION_H_ +/** + * @file + */ + +#ifndef MODEULES_CALIBRATION_REPUBLISH_MSG_H_ +#define MODEULES_CALIBRATION_REPUBLISH_MSG_H_ #include -#include "ros/include/ros/ros.h" +#include "Eigen/Eigen" +#include "modules/calibration/republish_msg/proto/relative_odometry.pb.h" #include "modules/common/apollo_app.h" #include "modules/common/macro.h" +#include "modules/drivers/gnss/proto/ins.pb.h" +#include "modules/localization/proto/gps.pb.h" +#include "ros/include/ros/ros.h" /** - * @namespace apollo::decision - * @brief apollo::decision + * @namespace apollo::calibration + * @brief apollo::calibration */ namespace apollo { -namespace decision { +namespace calibration { -class Decision : public apollo::common::ApolloApp { +class RepublishMsg : public apollo::common::ApolloApp { public: std::string Name() const override; apollo::common::Status Init() override; apollo::common::Status Start() override; void Stop() override; - virtual ~Decision() = default; private: - void OnTimer(const ros::TimerEvent &event); - void PublishDecision(); + // Upon receiving INS status data + void OnInsStat(const drivers::gnss::InsStat& msg); + // Upon receiving GPS data + void OnGps(const localization::Gps& msg); - private: - ros::Timer timer_; + // Gps offset pose + Eigen::Affine3d offset_; + // first Gps message flag + bool is_first_gps_msg_; + // latest INS status + uint32_t position_type_; }; -} // namespace decision +} // namespace calibration } // namespace apollo -#endif // MODULES_DECISION_DECISION_H_ +#endif // MODULES_CALIBRATION_REPUBLISH_MSG_H_ diff --git a/modules/canbus/can_client/can_client_tool.cc b/modules/canbus/can_client/can_client_tool.cc index c781180efd0..e3ded7b64ad 100644 --- a/modules/canbus/can_client/can_client_tool.cc +++ b/modules/canbus/can_client/can_client_tool.cc @@ -60,13 +60,12 @@ struct TestCanParam { TestCanParam() = default; void print() { - std::cout << "conf: " << conf.ShortDebugString() - << ", total send: " << send_cnt + send_err_cnt << "/" - << FLAGS_agent_mutual_send_frames << ", send_ok: " << send_cnt - << " , send_err_cnt: " << send_err_cnt - << ", send_lost_cnt: " << send_lost_cnt - << ", recv_cnt: " << recv_cnt << ", send_time: " << send_time - << ", recv_time: " << recv_time << std::endl; + AINFO << "conf: " << conf.ShortDebugString() + << ", total send: " << send_cnt + send_err_cnt << "/" + << FLAGS_agent_mutual_send_frames << ", send_ok: " << send_cnt + << " , send_err_cnt: " << send_err_cnt + << ", send_lost_cnt: " << send_lost_cnt << ", recv_cnt: " << recv_cnt + << ", send_time: " << send_time << ", recv_time: " << recv_time; } }; @@ -93,10 +92,10 @@ class CanAgent { } void SendThreadFunc() { - using ::apollo::common::time::Clock; - using ::apollo::common::time::AsInt64; - using ::apollo::common::time::micros; - using ::apollo::common::ErrorCode; + using common::time::Clock; + using common::time::AsInt64; + using common::time::micros; + using common::ErrorCode; AINFO << "Send thread starting..."; TestCanParam *param = param_ptr(); CanClient *client = param->can_client; @@ -169,19 +168,19 @@ class CanAgent { void AddOtherAgent(CanAgent *agent) { other_agent_ = agent; } - bool is_receiving() { return is_receiving_; } + bool is_receiving() const { return is_receiving_; } void is_receiving(bool val) { is_receiving_ = val; } - bool is_sending_finish() { return is_sending_finish_; } + bool is_sending_finish() const { return is_sending_finish_; } void is_sending_finish(bool val) { is_sending_finish_ = val; } void RecvThreadFunc() { - using ::apollo::common::time::Clock; - using ::apollo::common::time::AsInt64; - using ::apollo::common::time::micros; - using ::apollo::common::ErrorCode; + using common::time::Clock; + using common::time::AsInt64; + using common::time::micros; + using common::ErrorCode; AINFO << "Receive thread starting..."; TestCanParam *param = param_ptr(); CanClient *client = param->can_client; @@ -251,12 +250,12 @@ int main(int32_t argc, char **argv) { google::InitGoogleLogging(argv[0]); google::ParseCommandLineFlags(&argc, &argv, true); - using ::apollo::canbus::CANCardParameter; - using ::apollo::canbus::CanClient; - using ::apollo::canbus::CanClientFactory; - using ::apollo::canbus::TestCanParam; - using ::apollo::canbus::CanAgent; - using ::apollo::common::ErrorCode; + using apollo::canbus::CANCardParameter; + using apollo::canbus::CanClient; + using apollo::canbus::CanClientFactory; + using apollo::canbus::TestCanParam; + using apollo::canbus::CanAgent; + using apollo::common::ErrorCode; CANCardParameter can_client_conf_a; std::shared_ptr param_ptr_a(new TestCanParam()); std::shared_ptr param_ptr_b(new TestCanParam()); @@ -264,8 +263,8 @@ int main(int32_t argc, char **argv) { auto *can_client_factory = CanClientFactory::instance(); can_client_factory->RegisterCanClients(); - if (!::apollo::common::util::GetProtoFromFile(FLAGS_can_client_conf_file_a, - &can_client_conf_a)) { + if (!apollo::common::util::GetProtoFromFile(FLAGS_can_client_conf_file_a, + &can_client_conf_a)) { AERROR << "Unable to load canbus conf file: " << FLAGS_can_client_conf_file_a; return 1; @@ -286,8 +285,8 @@ int main(int32_t argc, char **argv) { CANCardParameter can_client_conf_b; std::unique_ptr client_b; if (!FLAGS_only_one_send) { - if (!::apollo::common::util::GetProtoFromFile(FLAGS_can_client_conf_file_b, - &can_client_conf_b)) { + if (!apollo::common::util::GetProtoFromFile(FLAGS_can_client_conf_file_b, + &can_client_conf_b)) { AERROR << "Unable to load canbus conf file: " << FLAGS_can_client_conf_file_b; return 1; diff --git a/modules/canbus/can_client/esd/esd_can_client.cc b/modules/canbus/can_client/esd/esd_can_client.cc index b1838b760f5..240723d7eda 100644 --- a/modules/canbus/can_client/esd/esd_can_client.cc +++ b/modules/canbus/can_client/esd/esd_can_client.cc @@ -15,7 +15,7 @@ *****************************************************************************/ /** - * @file esd_can_client.cpp + * @file esd_can_client.cc * @brief the encapsulate call the api of esd can card according to can_client.h *interface **/ @@ -51,7 +51,12 @@ ErrorCode EsdCanClient::Start() { // &dev_handler_); uint32_t mode = 0; // mode |= NTCAN_MODE_NO_RTR; - int32_t ret = canOpen(port_ > 0 ? 1 : 0, mode, NTCAN_MAX_TX_QUEUESIZE, + if (port_ > FLAGS_max_port || port_ < 0) { + AERROR << "can port number [" << port_ << "] is out of the range [0," + << FLAGS_max_port << "]"; + return ErrorCode::CAN_CLIENT_ERROR_BASE; + } + int32_t ret = canOpen(port_, mode, NTCAN_MAX_TX_QUEUESIZE, NTCAN_MAX_RX_QUEUESIZE, 5, 5, &dev_handler_); if (ret != NTCAN_SUCCESS) { AERROR << "open device error code [" << ret << "]: " << GetErrorString(ret); diff --git a/modules/canbus/can_client/fake/fake_can_client_test.cc b/modules/canbus/can_client/fake/fake_can_client_test.cc index 828f6b79376..81eb506486e 100644 --- a/modules/canbus/can_client/fake/fake_can_client_test.cc +++ b/modules/canbus/can_client/fake/fake_can_client_test.cc @@ -31,8 +31,8 @@ namespace apollo { namespace canbus { namespace can { -using Clock = ::apollo::common::time::Clock; -using micros = ::apollo::common::time::micros; +using Clock = common::time::Clock; +using micros = common::time::micros; using apollo::common::ErrorCode; class FakeCanClientTest : public ::testing::Test { diff --git a/modules/canbus/can_comm/can_receiver.cc b/modules/canbus/can_comm/can_receiver.cc index 9e3a919efd9..b4b68694253 100644 --- a/modules/canbus/can_comm/can_receiver.cc +++ b/modules/canbus/can_comm/can_receiver.cc @@ -27,7 +27,7 @@ namespace apollo { namespace canbus { -using ::apollo::common::ErrorCode; +using common::ErrorCode; ErrorCode CanReceiver::Init(CanClient *can_client, MessageManager *pt_manager, bool enable_log) { @@ -69,9 +69,9 @@ void CanReceiver::RecvThreadFunc() { receive_error_count = 0; if (buf.size() != static_cast(frame_num)) { - AERROR << "Receiver buf size[" << buf.size() - << "] does not match can_client returned length[" << frame_num - << "]."; + AERROR_EVERY(100) << "Receiver buf size [" << buf.size() + << "] does not match can_client returned length[" << frame_num + << "]."; } if (frame_num == 0) { diff --git a/modules/canbus/can_comm/can_receiver.h b/modules/canbus/can_comm/can_receiver.h index c89d343b50a..b1ef6fc8618 100644 --- a/modules/canbus/can_comm/can_receiver.h +++ b/modules/canbus/can_comm/can_receiver.h @@ -61,7 +61,7 @@ class CanReceiver { * @param enable_log If log the essential information during running. * @return An error code indicating the status of this initialization. */ - ::apollo::common::ErrorCode Init(CanClient *can_client, + common::ErrorCode Init(CanClient *can_client, MessageManager *pt_manager, bool enable_log); /** @@ -75,7 +75,7 @@ class CanReceiver { * @brief Start the CAN receiver. * @return The error code indicating the status of this action. */ - ::apollo::common::ErrorCode Start(); + common::ErrorCode Start(); /** * @brief Stop the CAN receiver. diff --git a/modules/canbus/can_comm/can_receiver_test.cc b/modules/canbus/can_comm/can_receiver_test.cc index 9d27beeab1e..d5cbf161058 100644 --- a/modules/canbus/can_comm/can_receiver_test.cc +++ b/modules/canbus/can_comm/can_receiver_test.cc @@ -31,7 +31,7 @@ TEST(CanReceiverTest, ReceiveOne) { CanReceiver receiver; receiver.Init(&can_client, &pm, false); - EXPECT_EQ(receiver.Start(), ::apollo::common::ErrorCode::OK); + EXPECT_EQ(receiver.Start(), common::ErrorCode::OK); EXPECT_TRUE(receiver.IsRunning()); receiver.Stop(); EXPECT_FALSE(receiver.IsRunning()); diff --git a/modules/canbus/can_comm/can_sender.cc b/modules/canbus/can_comm/can_sender.cc index f5aceea550a..c6dcebd3cc9 100644 --- a/modules/canbus/can_comm/can_sender.cc +++ b/modules/canbus/can_comm/can_sender.cc @@ -26,9 +26,9 @@ namespace canbus { namespace { -using ::apollo::common::time::Clock; -using ::apollo::common::ErrorCode; -using micros = ::apollo::common::time::micros; +using common::time::Clock; +using common::ErrorCode; +using micros = common::time::micros; const uint32_t kSenderInterval = 6000; @@ -99,7 +99,7 @@ void CanSender::PowerSendThreadFunc() { AINFO << "Can client sender thread starts."; while (is_running_) { - tm_start = ::apollo::common::time::AsInt64(Clock::Now()); + tm_start = common::time::AsInt64(Clock::Now()); new_delta_period = INIT_PERIOD; for (auto &message : send_messages_) { @@ -121,7 +121,7 @@ void CanSender::PowerSendThreadFunc() { } } delta_period = new_delta_period; - tm_end = ::apollo::common::time::AsInt64(Clock::Now()); + tm_end = common::time::AsInt64(Clock::Now()); sleep_interval = delta_period - (tm_end - tm_start); if (sleep_interval > 0) { diff --git a/modules/canbus/can_comm/can_sender.h b/modules/canbus/can_comm/can_sender.h index e1d26fd46a2..4a707df961f 100644 --- a/modules/canbus/can_comm/can_sender.h +++ b/modules/canbus/can_comm/can_sender.h @@ -140,7 +140,7 @@ class CanSender { * @param enable_log whether enable record the send can frame log * @return An error code indicating the status of this initialization. */ - ::apollo::common::ErrorCode Init(CanClient *can_client, bool enable_log); + common::ErrorCode Init(CanClient *can_client, bool enable_log); /** * @brief Add a message with its ID, protocol data. diff --git a/modules/canbus/can_comm/can_sender_test.cc b/modules/canbus/can_comm/can_sender_test.cc index 6fabfb6139d..45430b4eed9 100644 --- a/modules/canbus/can_comm/can_sender_test.cc +++ b/modules/canbus/can_comm/can_sender_test.cc @@ -40,7 +40,7 @@ TEST(CanSenderTest, OneRunCase) { EXPECT_EQ(msg.CanFrame().id, 1); sender.AddMessage(1, &mpd); - EXPECT_EQ(sender.Start(), ::apollo::common::ErrorCode::OK); + EXPECT_EQ(sender.Start(), common::ErrorCode::OK); EXPECT_TRUE(sender.IsRunning()); EXPECT_TRUE(sender.enable_log()); diff --git a/modules/canbus/canbus.cc b/modules/canbus/canbus.cc index 9ab6912a7bd..2d7de9466c2 100644 --- a/modules/canbus/canbus.cc +++ b/modules/canbus/canbus.cc @@ -40,7 +40,7 @@ std::string Canbus::Name() const { return FLAGS_hmi_name; } Status Canbus::Init() { // load conf - if (!::apollo::common::util::GetProtoFromFile(FLAGS_canbus_conf_file, + if (!common::util::GetProtoFromFile(FLAGS_canbus_conf_file, &canbus_conf_)) { return OnError("Unable to load canbus conf file: " + FLAGS_canbus_conf_file); @@ -96,7 +96,7 @@ Status Canbus::Init() { } AINFO << "The vehicle controller is successfully initialized."; - AdapterManager::Init(); + AdapterManager::Init(FLAGS_adapter_config_filename); AINFO << "The adapter manager is successfully initialized."; @@ -130,7 +130,7 @@ Status Canbus::Start() { const double duration = 1.0 / FLAGS_chassis_freq; timer_ = AdapterManager::CreateTimer(ros::Duration(duration), &Canbus::OnTimer, this); - AdapterManager::SetControlCommandCallback(&Canbus::OnControlCommand, this); + AdapterManager::AddControlCommandCallback(&Canbus::OnControlCommand, this); // last step: publish monitor messages apollo::common::monitor::MonitorBuffer buffer(&monitor_); @@ -141,7 +141,7 @@ Status Canbus::Start() { void Canbus::PublishChassis() { Chassis chassis = vehicle_controller_->chassis(); - AdapterManager::FillChassisHeader(FLAGS_node_name, chassis.mutable_header()); + AdapterManager::FillChassisHeader(FLAGS_node_name, &chassis); AdapterManager::PublishChassis(chassis); ADEBUG << chassis.ShortDebugString(); @@ -173,7 +173,7 @@ void Canbus::Stop() { void Canbus::OnControlCommand(const ControlCommand &control_command) { int64_t current_timestamp = - apollo::common::time::AsInt64<::apollo::common::time::micros>( + apollo::common::time::AsInt64( Clock::Now()); // if command coming too soon, just ignore it. if (current_timestamp - last_timestamp_ < FLAGS_min_cmd_interval * 1000) { diff --git a/modules/canbus/common/BUILD b/modules/canbus/common/BUILD index 5bcf2ff0022..83e315a066c 100644 --- a/modules/canbus/common/BUILD +++ b/modules/canbus/common/BUILD @@ -16,6 +16,7 @@ cc_library( deps = [ "//external:gflags", "//modules/canbus/proto:canbus_proto", + "//modules/common:log", ], ) diff --git a/modules/canbus/common/canbus_gflags.cc b/modules/canbus/common/canbus_gflags.cc index b769f4ba060..b4d9a64f83a 100644 --- a/modules/canbus/common/canbus_gflags.cc +++ b/modules/canbus/common/canbus_gflags.cc @@ -17,14 +17,21 @@ #include "modules/canbus/common/canbus_gflags.h" // System gflags -DEFINE_string(node_namespace, "/apollo/canbus", "Global node namespace"); DEFINE_string(node_name, "chassis", "The chassis module name in proto"); DEFINE_string(hmi_name, "canbus", "Module name in HMI"); +DEFINE_string(adapter_config_filename, "modules/canbus/conf/adapter.conf", + "The adapter config file"); + // data file DEFINE_string(canbus_conf_file, "modules/canbus/conf/canbus_conf_dev.pb.txt", "Default canbus conf file"); +// maximum can port number +DEFINE_int32( + max_port, 3, + "The maximum can port number (available can ports are 0 - max_port)"); + // Canbus gflags DEFINE_double(chassis_freq, 100, "Chassis feedback timer frequency."); DEFINE_int64(min_cmd_interval, 5, "Minimum control command interval in us."); diff --git a/modules/canbus/common/canbus_gflags.h b/modules/canbus/common/canbus_gflags.h index d597a176177..2e0ef92daf5 100644 --- a/modules/canbus/common/canbus_gflags.h +++ b/modules/canbus/common/canbus_gflags.h @@ -20,13 +20,17 @@ #include "gflags/gflags.h" // System gflags -DECLARE_string(node_namespace); DECLARE_string(node_name); DECLARE_string(hmi_name); +DECLARE_string(adapter_config_filename); + // data file DECLARE_string(canbus_conf_file); +// maximum can port number +DECLARE_int32(max_port); + // Canbus gflags DECLARE_double(chassis_freq); DECLARE_int64(min_cmd_interval); diff --git a/modules/canbus/conf/canbus.conf b/modules/canbus/conf/canbus.conf index 2b5cfb11976..17cf036a872 100644 --- a/modules/canbus/conf/canbus.conf +++ b/modules/canbus/conf/canbus.conf @@ -1,5 +1,3 @@ ---alsologtostderr=1 +--flagfile=modules/common/data/global_flagfile.txt --canbus_conf_file=modules/canbus/conf/canbus_conf.pb.txt ---adapter_config_path=modules/canbus/conf/adapter.conf --noenable_chassis_detail_pub ---v=3 diff --git a/modules/canbus/conf/canbus_dev.conf b/modules/canbus/conf/canbus_dev.conf index dfc8ec12d4f..48f96c2e25c 100644 --- a/modules/canbus/conf/canbus_dev.conf +++ b/modules/canbus/conf/canbus_dev.conf @@ -1,5 +1,5 @@ --alsologtostderr=1 --canbus_conf_file=modules/canbus/conf/canbus_conf_dev.pb.txt ---adapter_config_path=modules/canbus/conf/adapter_dev.conf +--adapter_config_filename=modules/canbus/conf/adapter_dev.conf --enable_chassis_detail_pub --v=3 diff --git a/modules/canbus/main.cc b/modules/canbus/main.cc index 853fc6d94d6..eb0627716c6 100644 --- a/modules/canbus/main.cc +++ b/modules/canbus/main.cc @@ -18,4 +18,4 @@ #include "modules/canbus/common/canbus_gflags.h" #include "modules/common/apollo_app.h" -APOLLO_MAIN(::apollo::canbus::Canbus); +APOLLO_MAIN(apollo::canbus::Canbus); diff --git a/modules/canbus/proto/BUILD b/modules/canbus/proto/BUILD index 2c468bab54f..2ac8c49a911 100644 --- a/modules/canbus/proto/BUILD +++ b/modules/canbus/proto/BUILD @@ -1,25 +1,20 @@ package(default_visibility = ["//visibility:public"]) -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile") - cc_proto_library( name = "canbus_proto", - protos = glob([ - "**/*.proto", - ]), deps = [ - "//modules/common", - "//modules/common/proto:common_proto", + ":canbus_proto_lib", ], ) -py_proto_compile( - name = "canbus_proto_pylib", - protos = glob([ +proto_library( + name = "canbus_proto_lib", + srcs = glob([ "**/*.proto", ]), deps = [ - "//modules/common/proto:common_proto_pylib", + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:header_proto_lib", + "//modules/common/proto:vehicle_signal_proto_lib", ], ) diff --git a/modules/canbus/proto/chassis.proto b/modules/canbus/proto/chassis.proto index d6d0e5dba1d..29034b030a5 100644 --- a/modules/canbus/proto/chassis.proto +++ b/modules/canbus/proto/chassis.proto @@ -3,20 +3,7 @@ syntax = "proto2"; package apollo.canbus; import "modules/common/proto/header.proto"; - -message Signal { - enum TurnSignal { - TURN_NONE = 0; - TURN_LEFT = 1; - TURN_RIGHT = 2; - }; - optional TurnSignal turn_signal = 1; - // lights enable command - optional bool high_beam = 2; - optional bool low_beam = 3; - optional bool horn = 4; - optional bool emergency_light = 5; -} +import "modules/common/proto/vehicle_signal.proto"; // next id :28 message Chassis { @@ -94,7 +81,7 @@ message Chassis { optional int32 chassis_error_mask = 26 [default = 0]; - optional Signal signal = 27; + optional apollo.common.VehicleSignal signal = 27; // Light signals. optional bool high_beam_signal = 14 [deprecated = true]; diff --git a/modules/canbus/tools/canbus_tester.cc b/modules/canbus/tools/canbus_tester.cc index 583bf7d148f..de8350cfae6 100644 --- a/modules/canbus/tools/canbus_tester.cc +++ b/modules/canbus/tools/canbus_tester.cc @@ -38,9 +38,9 @@ int main(int32_t argc, char **argv) { ros::Publisher pub = nh.advertise(FLAGS_control_command_topic, 100); - ::apollo::control::ControlCommand control_cmd; - if (!::apollo::common::util::GetProtoFromFile(FLAGS_canbus_test_file, - &control_cmd)) { + apollo::control::ControlCommand control_cmd; + if (!apollo::common::util::GetProtoFromFile(FLAGS_canbus_test_file, + &control_cmd)) { AERROR << "failed to load file: " << FLAGS_canbus_test_file; return -1; } diff --git a/modules/canbus/tools/teleop.cc b/modules/canbus/tools/teleop.cc index edfb0b82af2..1e29d717f49 100644 --- a/modules/canbus/tools/teleop.cc +++ b/modules/canbus/tools/teleop.cc @@ -38,11 +38,11 @@ DEFINE_double(steer_inc_delta, 2.0, "steer delta percentage"); namespace { -using ::apollo::common::adapter::AdapterManager; -using ::apollo::common::time::Clock; -using ::apollo::control::ControlCommand; -using ::apollo::canbus::Chassis; -using ::apollo::control::PadMessage; +using apollo::common::adapter::AdapterManager; +using apollo::common::time::Clock; +using apollo::control::ControlCommand; +using apollo::canbus::Chassis; +using apollo::control::PadMessage; const uint32_t KEYCODE_O = 0x4F; // '0' @@ -115,28 +115,28 @@ class Teleop { double brake = 0; double throttle = 0; double steering = 0; - struct termios _cooked; - struct termios _raw; - int32_t _kfd = 0; + struct termios cooked_; + struct termios raw_; + int32_t kfd_ = 0; bool parking_brake = false; Chassis::GearPosition gear = Chassis::GEAR_INVALID; PadMessage pad_msg; ControlCommand &control_command_ = control_command(); // get the console in raw mode - tcgetattr(_kfd, &_cooked); - std::memcpy(&_raw, &_cooked, sizeof(struct termios)); - _raw.c_lflag &= ~(ICANON | ECHO); + tcgetattr(kfd_, &cooked_); + std::memcpy(&raw_, &cooked_, sizeof(struct termios)); + raw_.c_lflag &= ~(ICANON | ECHO); // Setting a new line, then end of file - _raw.c_cc[VEOL] = 1; - _raw.c_cc[VEOF] = 2; - tcsetattr(_kfd, TCSANOW, &_raw); + raw_.c_cc[VEOL] = 1; + raw_.c_cc[VEOF] = 2; + tcsetattr(kfd_, TCSANOW, &raw_); puts("Teleop:\nReading from keyboard now."); puts("---------------------------"); puts("Use arrow keys to drive the car."); while (IsRunning()) { // get the next event from the keyboard - if (read(_kfd, &c, 1) < 0) { + if (read(kfd_, &c, 1) < 0) { perror("read():"); exit(-1); } @@ -196,7 +196,7 @@ class Teleop { case KEYCODE_SETT1: // set throttle case KEYCODE_SETT2: // read keyboard again - if (read(_kfd, &c, 1) < 0) { + if (read(kfd_, &c, 1) < 0) { exit(-1); } level = c - KEYCODE_ZERO; @@ -208,7 +208,7 @@ class Teleop { case KEYCODE_SETG1: case KEYCODE_SETG2: // read keyboard again - if (read(_kfd, &c, 1) < 0) { + if (read(kfd_, &c, 1) < 0) { exit(-1); } level = c - KEYCODE_ZERO; @@ -219,7 +219,7 @@ class Teleop { case KEYCODE_SETB1: case KEYCODE_SETB2: // read keyboard again - if (read(_kfd, &c, 1) < 0) { + if (read(kfd_, &c, 1) < 0) { exit(-1); } level = c - KEYCODE_ZERO; @@ -230,7 +230,7 @@ class Teleop { break; case KEYCODE_MODE: // read keyboard again - if (read(_kfd, &c, 1) < 0) { + if (read(kfd_, &c, 1) < 0) { exit(-1); } level = c - KEYCODE_ZERO; @@ -248,7 +248,7 @@ class Teleop { break; } } // keyboard_loop big while - tcsetattr(_kfd, TCSANOW, &_cooked); + tcsetattr(kfd_, TCSANOW, &cooked_); printf("keyboard_loop thread quited.\n"); return; } // end of keyboard loop thread @@ -307,8 +307,7 @@ class Teleop { } void Send() { - AdapterManager::FillControlCommandHeader("control", - control_command_.mutable_header()); + AdapterManager::FillControlCommandHeader("control", &control_command_); AdapterManager::PublishControlCommand(control_command_); ADEBUG << "Control Command send OK:" << control_command_.ShortDebugString(); } @@ -336,7 +335,7 @@ class Teleop { return -1; } is_running_ = true; - AdapterManager::SetChassisCallback(&Teleop::OnChassis, this); + AdapterManager::AddChassisCallback(&Teleop::OnChassis, this); keyboard_thread_.reset( new std::thread([this] { KeyboardLoopThreadFunc(); })); if (keyboard_thread_ == nullptr) { diff --git a/modules/canbus/vehicle/lincoln/lincoln_controller.cc b/modules/canbus/vehicle/lincoln/lincoln_controller.cc index 86245f88cc6..f4eca1feec2 100644 --- a/modules/canbus/vehicle/lincoln/lincoln_controller.cc +++ b/modules/canbus/vehicle/lincoln/lincoln_controller.cc @@ -16,7 +16,7 @@ #include "modules/canbus/vehicle/lincoln/lincoln_controller.h" -#include "modules/common/log.h" +#include "modules/common/proto/vehicle_signal.pb.h" #include "modules/canbus/can_comm/can_sender.h" #include "modules/canbus/vehicle/lincoln/lincoln_message_manager.h" @@ -26,14 +26,15 @@ #include "modules/canbus/vehicle/lincoln/protocol/throttle_62.h" #include "modules/canbus/vehicle/lincoln/protocol/turnsignal_68.h" #include "modules/canbus/vehicle/vehicle_controller.h" +#include "modules/common/log.h" #include "modules/common/time/time.h" namespace apollo { namespace canbus { namespace lincoln { -using ::apollo::common::ErrorCode; -using ::apollo::control::ControlCommand; +using common::ErrorCode; +using control::ControlCommand; namespace { @@ -156,13 +157,14 @@ Chassis LincolnController::chassis() { // 3 chassis_.set_engine_started(true); // 4 - if (chassis_detail.ems().has_engine_rpm()) { + if (chassis_detail.has_ems() && chassis_detail.ems().has_engine_rpm()) { chassis_.set_engine_rpm(chassis_detail.ems().engine_rpm()); } else { chassis_.set_engine_rpm(0); } // 5 - if (chassis_detail.vehicle_spd().has_vehicle_spd()) { + if (chassis_detail.has_vehicle_spd() && + chassis_detail.vehicle_spd().has_vehicle_spd()) { chassis_.set_speed_mps(chassis_detail.vehicle_spd().vehicle_spd()); } else { chassis_.set_speed_mps(0); @@ -174,38 +176,39 @@ Chassis LincolnController::chassis() { // to avoid confusing, just don't set chassis_.set_fuel_range_m(0); // 8 - if (chassis_detail.gas().has_throttle_output()) { + if (chassis_detail.has_gas() && chassis_detail.gas().has_throttle_output()) { chassis_.set_throttle_percentage(chassis_detail.gas().throttle_output()); } else { chassis_.set_throttle_percentage(0); } // 9 - if (chassis_detail.brake().has_brake_output()) { + if (chassis_detail.has_brake() && chassis_detail.brake().has_brake_output()) { chassis_.set_brake_percentage(chassis_detail.brake().brake_output()); } else { chassis_.set_brake_percentage(0); } // 23, previously 10 - if (chassis_detail.gear().has_gear_state()) { + if (chassis_detail.has_gear() && chassis_detail.gear().has_gear_state()) { chassis_.set_gear_location(chassis_detail.gear().gear_state()); } else { chassis_.set_gear_location(Chassis::GEAR_NONE); } // 11 - if (chassis_detail.eps().has_steering_angle()) { + if (chassis_detail.has_eps() && chassis_detail.eps().has_steering_angle()) { chassis_.set_steering_percentage(chassis_detail.eps().steering_angle() * 100.0 / params_.max_steer_angle()); } else { chassis_.set_steering_percentage(0); } // 12 - if (chassis_detail.eps().has_epas_torque()) { + if (chassis_detail.has_eps() && chassis_detail.eps().has_epas_torque()) { chassis_.set_steering_torque_nm(chassis_detail.eps().epas_torque()); } else { chassis_.set_steering_torque_nm(0); } // 13 - if (chassis_detail.epb().has_parking_brake_status()) { + if (chassis_detail.has_eps() && + chassis_detail.epb().has_parking_brake_status()) { chassis_.set_parking_brake(chassis_detail.epb().parking_brake_status() == Epb::PBRAKE_ON); } else { @@ -215,21 +218,26 @@ Chassis LincolnController::chassis() { // 14, 15 // 16, 17 - if (chassis_detail.light().has_turn_light_type() && + if (chassis_detail.has_light() && + chassis_detail.light().has_turn_light_type() && chassis_detail.light().turn_light_type() != Light::TURN_LIGHT_OFF) { if (chassis_detail.light().turn_light_type() == Light::TURN_LEFT_ON) { - chassis_.mutable_signal()->set_turn_signal(Signal::TURN_LEFT); + chassis_.mutable_signal()->set_turn_signal( + common::VehicleSignal::TURN_LEFT); } else if (chassis_detail.light().turn_light_type() == Light::TURN_RIGHT_ON) { - chassis_.mutable_signal()->set_turn_signal(Signal::TURN_RIGHT); + chassis_.mutable_signal()->set_turn_signal( + common::VehicleSignal::TURN_RIGHT); } else { - chassis_.mutable_signal()->set_turn_signal(Signal::TURN_NONE); + chassis_.mutable_signal()->set_turn_signal( + common::VehicleSignal::TURN_NONE); } } else { - chassis_.mutable_signal()->set_turn_signal(Signal::TURN_NONE); + chassis_.mutable_signal()->set_turn_signal( + common::VehicleSignal::TURN_NONE); } // 18 - if (chassis_detail.light().has_is_horn_on() && + if (chassis_detail.has_light() && chassis_detail.light().has_is_horn_on() && chassis_detail.light().is_horn_on()) { chassis_.mutable_signal()->set_horn(true); } else { @@ -238,7 +246,7 @@ Chassis LincolnController::chassis() { // 19, lincoln wiper is too complicated // 24 - if (chassis_detail.eps().has_timestamp_65()) { + if (chassis_detail.has_eps() && chassis_detail.eps().has_timestamp_65()) { chassis_.set_steering_timestamp(chassis_detail.eps().timestamp_65()); } // 26 @@ -469,9 +477,9 @@ void LincolnController::SetHorn(const ControlCommand &command) { void LincolnController::SetTurningSignal(const ControlCommand &command) { // Set Turn Signal auto signal = command.signal().turn_signal(); - if (signal == Signal::TURN_LEFT) { + if (signal == common::VehicleSignal::TURN_LEFT) { turnsignal_68_->set_turn_left(); - } else if (signal == Signal::TURN_RIGHT) { + } else if (signal == common::VehicleSignal::TURN_RIGHT) { turnsignal_68_->set_turn_right(); } else { turnsignal_68_->set_turn_none(); @@ -489,6 +497,11 @@ bool LincolnController::CheckChassisError() { int32_t error_cnt = 0; int32_t chassis_error_mask = 0; + if (!chassis_detail.has_eps()) { + AERROR_EVERY(100) << "ChassisDetail has NO eps." + << chassis_detail.DebugString(); + return false; + } bool steer_fault = chassis_detail.eps().watchdog_fault() | chassis_detail.eps().channel_1_fault() | chassis_detail.eps().channel_2_fault() | @@ -506,6 +519,11 @@ bool LincolnController::CheckChassisError() { chassis_error_mask |= ((chassis_detail.eps().connector_fault()) << (error_cnt++)); + if (!chassis_detail.has_brake()) { + AERROR_EVERY(100) << "ChassisDetail has NO brake." + << chassis_detail.DebugString(); + return false; + } // brake fault bool brake_fault = chassis_detail.brake().watchdog_fault() | chassis_detail.brake().channel_1_fault() | @@ -523,6 +541,11 @@ bool LincolnController::CheckChassisError() { chassis_error_mask |= ((chassis_detail.brake().connector_fault()) << (error_cnt++)); + if (!chassis_detail.has_gas()) { + AERROR_EVERY(100) << "ChassisDetail has NO gas." + << chassis_detail.DebugString(); + return false; + } // throttle fault bool throttle_fault = chassis_detail.gas().watchdog_fault() | chassis_detail.gas().channel_1_fault() | @@ -538,6 +561,11 @@ bool LincolnController::CheckChassisError() { chassis_error_mask |= ((chassis_detail.gas().connector_fault()) << (error_cnt++)); + if (!chassis_detail.has_gear()) { + AERROR_EVERY(100) << "ChassisDetail has NO gear." + << chassis_detail.DebugString(); + return false; + } // gear fault bool gear_fault = chassis_detail.gear().canbus_fault(); @@ -547,33 +575,34 @@ bool LincolnController::CheckChassisError() { set_chassis_error_mask(chassis_error_mask); if (steer_fault) { - AERROR << "Steering fault detected: " - << chassis_detail.eps().watchdog_fault() << ", " - << chassis_detail.eps().channel_1_fault() << ", " - << chassis_detail.eps().channel_2_fault() << ", " - << chassis_detail.eps().calibration_fault() << ", " - << chassis_detail.eps().connector_fault(); + AERROR_EVERY(100) << "Steering fault detected: " + << chassis_detail.eps().watchdog_fault() << ", " + << chassis_detail.eps().channel_1_fault() << ", " + << chassis_detail.eps().channel_2_fault() << ", " + << chassis_detail.eps().calibration_fault() << ", " + << chassis_detail.eps().connector_fault(); } if (brake_fault) { - AERROR << "Brake fault detected: " - << chassis_detail.brake().watchdog_fault() << ", " - << chassis_detail.brake().channel_1_fault() << ", " - << chassis_detail.brake().channel_2_fault() << ", " - << chassis_detail.brake().boo_fault() << ", " - << chassis_detail.brake().connector_fault(); + AERROR_EVERY(100) << "Brake fault detected: " + << chassis_detail.brake().watchdog_fault() << ", " + << chassis_detail.brake().channel_1_fault() << ", " + << chassis_detail.brake().channel_2_fault() << ", " + << chassis_detail.brake().boo_fault() << ", " + << chassis_detail.brake().connector_fault(); } if (throttle_fault) { - AERROR << "Throttle fault detected: " - << chassis_detail.gas().watchdog_fault() << ", " - << chassis_detail.gas().channel_1_fault() << ", " - << chassis_detail.gas().channel_2_fault() << ", " - << chassis_detail.gas().connector_fault(); + AERROR_EVERY(100) << "Throttle fault detected: " + << chassis_detail.gas().watchdog_fault() << ", " + << chassis_detail.gas().channel_1_fault() << ", " + << chassis_detail.gas().channel_2_fault() << ", " + << chassis_detail.gas().connector_fault(); } if (gear_fault) { - AERROR << "Gear fault detected: " << chassis_detail.gear().canbus_fault(); + AERROR_EVERY(100) << "Gear fault detected: " + << chassis_detail.gear().canbus_fault(); } if (steer_fault || brake_fault || throttle_fault) { @@ -595,8 +624,8 @@ void LincolnController::SecurityDogThreadFunc() { std::chrono::duration default_period{50000}; int64_t start = - ::apollo::common::time::AsInt64<::apollo::common::time::micros>( - ::apollo::common::time::Clock::Now()); + common::time::AsInt64( + common::time::Clock::Now()); int32_t speed_ctrl_fail = 0; int32_t steer_ctrl_fail = 0; @@ -639,14 +668,14 @@ void LincolnController::SecurityDogThreadFunc() { Emergency(); } int64_t end = - ::apollo::common::time::AsInt64<::apollo::common::time::micros>( - ::apollo::common::time::Clock::Now()); + common::time::AsInt64( + common::time::Clock::Now()); std::chrono::duration elapsed{end - start}; if (elapsed < default_period) { std::this_thread::sleep_for(default_period - elapsed); start += (default_period - elapsed).count(); } else { - AERROR + AERROR_EVERY(100) << "Too much time consumption in LincolnController looping process:" << elapsed.count(); start = end; @@ -665,7 +694,7 @@ bool LincolnController::CheckResponse(const int32_t flags, bool need_wait) { do { if (message_manager_->GetChassisDetail(&chassis_detail) != ErrorCode::OK) { - AERROR << "get chassis detail failed."; + AERROR_EVERY(100) << "get chassis detail failed."; return false; } bool check_ok = true; diff --git a/modules/canbus/vehicle/lincoln/lincoln_controller.h b/modules/canbus/vehicle/lincoln/lincoln_controller.h index 8878d111f91..1c13521ac69 100644 --- a/modules/canbus/vehicle/lincoln/lincoln_controller.h +++ b/modules/canbus/vehicle/lincoln/lincoln_controller.h @@ -60,7 +60,7 @@ class LincolnController final : public VehicleController { * @brief initialize the lincoln vehicle controller. * @return init error_code */ - ::apollo::common::ErrorCode Init( + common::ErrorCode Init( const VehicleParameter ¶ms, CanSender *const can_sender, MessageManager *const message_manager) override; @@ -88,10 +88,10 @@ class LincolnController final : public VehicleController { private: // main logical function for operation the car enter or exit the auto driving void Emergency() override; - ::apollo::common::ErrorCode EnableAutoMode() override; - ::apollo::common::ErrorCode DisableAutoMode() override; - ::apollo::common::ErrorCode EnableSteeringOnlyMode() override; - ::apollo::common::ErrorCode EnableSpeedOnlyMode() override; + common::ErrorCode EnableAutoMode() override; + common::ErrorCode DisableAutoMode() override; + common::ErrorCode EnableSteeringOnlyMode() override; + common::ErrorCode EnableSpeedOnlyMode() override; // NEUTRAL, REVERSE, DRIVE void Gear(Chassis::GearPosition state) override; @@ -115,11 +115,11 @@ class LincolnController final : public VehicleController { void Steer(double angle, double angle_spd) override; // set Electrical Park Brake - void SetEpbBreak(const ::apollo::control::ControlCommand &command) override; - void SetBeam(const ::apollo::control::ControlCommand &command) override; - void SetHorn(const ::apollo::control::ControlCommand &command) override; + void SetEpbBreak(const control::ControlCommand &command) override; + void SetBeam(const control::ControlCommand &command) override; + void SetHorn(const control::ControlCommand &command) override; void SetTurningSignal( - const ::apollo::control::ControlCommand &command) override; + const control::ControlCommand &command) override; void ResetProtocol(); bool CheckChassisError(); @@ -140,7 +140,7 @@ class LincolnController final : public VehicleController { Gear66 *gear_66_ = nullptr; Turnsignal68 *turnsignal_68_ = nullptr; - CanSender *can_sender_; + CanSender *can_sender_ = nullptr; Chassis chassis_; std::unique_ptr thread_; bool is_chassis_error_ = false; diff --git a/modules/canbus/vehicle/lincoln/lincoln_controller_test.cc b/modules/canbus/vehicle/lincoln/lincoln_controller_test.cc index b56140d815f..63c2a6bcc11 100644 --- a/modules/canbus/vehicle/lincoln/lincoln_controller_test.cc +++ b/modules/canbus/vehicle/lincoln/lincoln_controller_test.cc @@ -24,6 +24,7 @@ #include "modules/canbus/proto/canbus_conf.pb.h" #include "modules/canbus/proto/chassis.pb.h" +#include "modules/common/proto/vehicle_signal.pb.h" #include "modules/control/proto/control_cmd.pb.h" namespace apollo { @@ -32,14 +33,14 @@ namespace lincoln { using apollo::common::ErrorCode; using apollo::control::ControlCommand; -using apollo::canbus::Signal; +using apollo::common::VehicleSignal; class LincolnControllerTest : public ::testing::Test { public: virtual void SetUp() { std::string canbus_conf_file = "modules/canbus/testdata/conf/canbus_conf_test.pb.txt"; - ::apollo::common::util::GetProtoFromFile(canbus_conf_file, &canbus_conf_); + common::util::GetProtoFromFile(canbus_conf_file, &canbus_conf_); params_ = canbus_conf_.vehicle_parameter(); control_cmd_.set_throttle(20.0); control_cmd_.set_brake(0.0); @@ -50,7 +51,7 @@ class LincolnControllerTest : public ::testing::Test { protected: LincolnController controller_; ControlCommand control_cmd_; - Signal signal_; + VehicleSignal vehicle_signal_; CanSender sender_; LincolnMessageManager msg_manager_; CanbusConf canbus_conf_; diff --git a/modules/canbus/vehicle/lincoln/protocol/gps_6d_test.cc b/modules/canbus/vehicle/lincoln/protocol/gps_6d_test.cc index 55a41b3f582..24ccfcc69d8 100644 --- a/modules/canbus/vehicle/lincoln/protocol/gps_6d_test.cc +++ b/modules/canbus/vehicle/lincoln/protocol/gps_6d_test.cc @@ -33,8 +33,6 @@ TEST(Gps6dTest, General) { EXPECT_DOUBLE_EQ(cd.basic().latitude(), -244.245646); EXPECT_DOUBLE_EQ(cd.basic().longitude(), -61.779717); - std::cout << cd.DebugString() << std::endl; - EXPECT_EQ(data[0], 0b01010110); EXPECT_EQ(data[1], 0b01010010); EXPECT_EQ(data[2], 0b01010011); diff --git a/modules/canbus/vehicle/message_manager.cc b/modules/canbus/vehicle/message_manager.cc index 9a33b76e958..064a12541f3 100644 --- a/modules/canbus/vehicle/message_manager.cc +++ b/modules/canbus/vehicle/message_manager.cc @@ -25,9 +25,9 @@ namespace apollo { namespace canbus { -using Clock = ::apollo::common::time::Clock; +using Clock = common::time::Clock; using micros = std::chrono::microseconds; -using ::apollo::common::ErrorCode; +using common::ErrorCode; ProtocolData *MessageManager::GetMutableProtocolDataById( const uint32_t message_id) { diff --git a/modules/canbus/vehicle/message_manager.h b/modules/canbus/vehicle/message_manager.h index 188a64c51e2..83a921c80ea 100644 --- a/modules/canbus/vehicle/message_manager.h +++ b/modules/canbus/vehicle/message_manager.h @@ -84,7 +84,7 @@ class MessageManager { * concurrent read/write issue. * @param chassis_detail chassis_detail to be filled. */ - ::apollo::common::ErrorCode GetChassisDetail( + common::ErrorCode GetChassisDetail( ChassisDetail *const chassis_detail); /* diff --git a/modules/canbus/vehicle/vehicle_controller.cc b/modules/canbus/vehicle/vehicle_controller.cc index 81bf1216295..6305e235c84 100644 --- a/modules/canbus/vehicle/vehicle_controller.cc +++ b/modules/canbus/vehicle/vehicle_controller.cc @@ -21,8 +21,8 @@ namespace apollo { namespace canbus { -using ::apollo::common::ErrorCode; -using ::apollo::control::ControlCommand; +using common::ErrorCode; +using control::ControlCommand; Chassis::DrivingMode VehicleController::driving_mode() { std::lock_guard lock(mode_mutex_); @@ -106,12 +106,12 @@ ErrorCode VehicleController::Update(const ControlCommand &command) { << control_command.pad_msg().ShortDebugString(); Chassis::DrivingMode mode = Chassis::COMPLETE_MANUAL; switch (control_command.pad_msg().action()) { - case ::apollo::control::DrivingAction::START: { + case control::DrivingAction::START: { mode = params_.driving_mode(); break; } - case ::apollo::control::DrivingAction::STOP: - case ::apollo::control::DrivingAction::RESET: { + case control::DrivingAction::STOP: + case control::DrivingAction::RESET: { mode = Chassis::COMPLETE_MANUAL; break; } diff --git a/modules/canbus/vehicle/vehicle_controller.h b/modules/canbus/vehicle/vehicle_controller.h index 48d5b6ee416..6f77e23606b 100644 --- a/modules/canbus/vehicle/vehicle_controller.h +++ b/modules/canbus/vehicle/vehicle_controller.h @@ -57,7 +57,7 @@ class VehicleController { * @param message_manager a pointer to the message_manager. * @return error_code */ - virtual ::apollo::common::ErrorCode Init( + virtual common::ErrorCode Init( const VehicleParameter ¶ms, CanSender *const can_sender, MessageManager *const message_manager) = 0; @@ -83,15 +83,15 @@ class VehicleController { * @param command the control command * @return error_code */ - virtual ::apollo::common::ErrorCode Update( - const ::apollo::control::ControlCommand &command); + virtual common::ErrorCode Update( + const control::ControlCommand &command); /** * @brief set vehicle to appointed driving mode. * @param driving mode to be appointed. * @return error_code */ - virtual ::apollo::common::ErrorCode SetDrivingMode( + virtual common::ErrorCode SetDrivingMode( const Chassis::DrivingMode &driving_mode); private: @@ -101,10 +101,10 @@ class VehicleController { */ virtual void Emergency() = 0; - virtual ::apollo::common::ErrorCode EnableAutoMode() = 0; - virtual ::apollo::common::ErrorCode DisableAutoMode() = 0; - virtual ::apollo::common::ErrorCode EnableSteeringOnlyMode() = 0; - virtual ::apollo::common::ErrorCode EnableSpeedOnlyMode() = 0; + virtual common::ErrorCode EnableAutoMode() = 0; + virtual common::ErrorCode DisableAutoMode() = 0; + virtual common::ErrorCode EnableSteeringOnlyMode() = 0; + virtual common::ErrorCode EnableSpeedOnlyMode() = 0; /* * @brief NEUTRAL, REVERSE, DRIVE @@ -138,18 +138,18 @@ class VehicleController { * @brief set Electrical Park Brake */ virtual void SetEpbBreak( - const ::apollo::control::ControlCommand &command) = 0; - virtual void SetBeam(const ::apollo::control::ControlCommand &command) = 0; - virtual void SetHorn(const ::apollo::control::ControlCommand &command) = 0; + const control::ControlCommand &command) = 0; + virtual void SetBeam(const control::ControlCommand &command) = 0; + virtual void SetHorn(const control::ControlCommand &command) = 0; virtual void SetTurningSignal( - const ::apollo::control::ControlCommand &command) = 0; + const control::ControlCommand &command) = 0; protected: virtual Chassis::DrivingMode driving_mode(); virtual void set_driving_mode(const Chassis::DrivingMode &driving_mode); protected: - ::apollo::canbus::VehicleParameter params_; + canbus::VehicleParameter params_; CanSender *can_sender_ = nullptr; MessageManager *message_manager_ = nullptr; bool is_initialized_ = false; // own by derviative concrete controller diff --git a/modules/canbus/vehicle/vehicle_factory.h b/modules/canbus/vehicle/vehicle_factory.h index 236a77c2f2e..2db1875c9ff 100644 --- a/modules/canbus/vehicle/vehicle_factory.h +++ b/modules/canbus/vehicle/vehicle_factory.h @@ -40,7 +40,7 @@ namespace canbus { * vehicle factories based on the vehicle brand. */ class VehicleFactory - : public ::apollo::common::util::Factory { public: /** diff --git a/modules/common/adapters/BUILD b/modules/common/adapters/BUILD index cb1c47237c1..dd449d82e69 100644 --- a/modules/common/adapters/BUILD +++ b/modules/common/adapters/BUILD @@ -45,8 +45,9 @@ cc_library( "//modules/common/proto:common_proto", "//modules/common/time", "//modules/common/util", - "@com_github_google_protobuf//:protobuf", + "@com_google_protobuf//:protobuf", "@glog//:glog", + "@ros//:ros_common", ], ) @@ -64,6 +65,7 @@ cc_test( ":adapter_gflags", "//modules/localization/proto:localization_proto", "@gtest//:main", + "@ros//:ros_common", ], ) @@ -74,17 +76,21 @@ cc_library( ], deps = [ ":adapter", + "//modules/calibration/republish_msg/proto:relative_odometry_proto", "//modules/canbus/proto:canbus_proto", "//modules/common/monitor/proto:monitor_proto", "//modules/control/proto:control_proto", - "//modules/decision/proto:decision_proto", + "//modules/drivers/gnss/proto:ins_proto", + "//modules/hmi/proto:hmi_message_proto", "//modules/localization/proto:camera_proto", "//modules/localization/proto:gps_proto", "//modules/localization/proto:imu_proto", "//modules/localization/proto:localization_proto", + "//modules/map/proto:map_proto", "//modules/perception/proto:perception_proto", "//modules/planning/proto:planning_proto", "//modules/prediction/proto:prediction_proto", + "//modules/routing/proto:routing_proto", "@glog//:glog", ], ) diff --git a/modules/common/adapters/adapter.h b/modules/common/adapters/adapter.h index 39ad26b0d8a..2588e4c0740 100644 --- a/modules/common/adapters/adapter.h +++ b/modules/common/adapters/adapter.h @@ -27,6 +27,7 @@ #include #include #include +#include #include "glog/logging.h" #include "google/protobuf/descriptor.h" @@ -36,8 +37,11 @@ #include "modules/common/proto/header.pb.h" #include "modules/common/time/time.h" #include "modules/common/util/file.h" +#include "modules/common/util/string_util.h" #include "modules/common/util/util.h" +#include "sensor_msgs/PointCloud2.h" + /** * @namespace apollo::common::adapter * @brief apollo::common::adapter @@ -76,7 +80,7 @@ class Adapter { typedef D DataType; typedef typename std::list>::const_iterator Iterator; - typedef typename std::function Callback; + typedef typename std::function Callback; /** * @brief Construct the \class Adapter object. @@ -88,8 +92,8 @@ class Adapter { * adapter stores. Older messages will be removed upon calls to * Adapter::OnReceive(). */ - Adapter(const std::string &adapter_name, const std::string &topic_name, - size_t message_num, const std::string &dump_dir = "/tmp") + Adapter(const std::string& adapter_name, const std::string& topic_name, + size_t message_num, const std::string& dump_dir = "/tmp") : topic_name_(topic_name), message_num_(message_num), enable_dump_(FLAGS_enable_adapter_dump && HasSequenceNumber()), @@ -112,7 +116,9 @@ class Adapter { /** * @brief returns the topic name that this adapter listens to. */ - const std::string &topic_name() const { return topic_name_; } + const std::string& topic_name() const { + return topic_name_; + } /** * @brief reads the proto message from the file, and push it into @@ -120,11 +126,9 @@ class Adapter { * @param message_file the path to the file that contains a (usually * proto) message of DataType. */ - void FeedProtoFile(const std::string &message_file) { - D data; - CHECK(apollo::common::util::GetProtoFromFile(message_file, &data)) - << "Unable to parse input pb file " << message_file; - FeedProto(data); + template + bool FeedFile(const std::string& message_file) { + return FeedFile(message_file, IdentifierType()); } /** @@ -132,9 +136,8 @@ class Adapter { * the adapter. * @param data the input data. */ - void FeedProto(const D &data) { - auto data_ptr = std::make_shared(data); - EnqueueData(data_ptr); + void FeedData(const D& data) { + EnqueueData(data); } /** @@ -142,11 +145,9 @@ class Adapter { * message is received. * @param message the newly received message. */ - void OnReceive(const D &message) { - auto data_ptr = std::make_shared(message); - - EnqueueData(data_ptr); - FireCallback(message); + void OnReceive(const D& message) { + EnqueueData(message); + FireCallbacks(message); } /** @@ -166,6 +167,14 @@ class Adapter { return observed_queue_.empty(); } + /** + * @brief returns TRUE if the adapter has received any message. + */ + bool HasReceived() const { + std::lock_guard lock(mutex_); + return !data_queue_.empty(); + } + /** * @brief returns the most recent message in the observing queue. * @@ -173,7 +182,7 @@ class Adapter { * Please call Empty() to make sure that there is data in the * queue before calling GetOldestObserved(). */ - const D &GetLatestObserved() const { + const D& GetLatestObserved() const { std::lock_guard lock(mutex_); DCHECK(!observed_queue_.empty()) << "The view of data queue is empty. No data is received yet or you " @@ -189,7 +198,7 @@ class Adapter { * Please call Empty() to make sure that there is data in the * queue before calling GetOldestObserved(). */ - const D &GetOldestObserved() const { + const D& GetOldestObserved() const { std::lock_guard lock(mutex_); DCHECK(!observed_queue_.empty()) << "The view of data queue is empty. No data is received yet or you " @@ -202,14 +211,18 @@ class Adapter { * queue. The caller can use it to iterate over the observed data * from the head. The API also supports range based for loop. */ - Iterator begin() const { return observed_queue_.begin(); } + Iterator begin() const { + return observed_queue_.begin(); + } /** * @brief returns an iterator representing the tail of the observing * queue. The caller can use it to iterate over the observed data * from the head. The API also supports range based for loop. */ - Iterator end() const { return observed_queue_.end(); } + Iterator end() const { + return observed_queue_.end(); + } /** * @brief registers the provided callback function to the adapter, @@ -217,28 +230,61 @@ class Adapter { * message hits the adapter. * @param callback the callback with signature void(const D &). */ - void SetCallback(Callback callback) { receive_callback_ = callback; } + void AddCallback(Callback callback) { + receive_callbacks_.push_back(callback); + } /** * @brief fills the fields module_name, timestamp_sec and * sequence_num in the header. */ - void FillHeader(const std::string &module_name, - apollo::common::Header *header) { - double timestamp = - apollo::common::time::ToSecond(apollo::common::time::Clock::Now()); + void FillHeader(const std::string& module_name, D* data) { + static_assert(std::is_base_of::value, + "Can only fill header to proto messages!"); + auto* header = data->mutable_header(); + double timestamp = apollo::common::time::Clock::NowInSecond(); header->set_module_name(module_name); header->set_timestamp_sec(timestamp); header->set_sequence_num(++seq_num_); } + uint32_t GetSeqNum() const { + return seq_num_; + } + + void SetLatestPublished(const D& data) { + latest_published_data_.reset(new D(data)); + } + + const D* GetLatestPublished() { + return latest_published_data_.get(); + } + private: + template + struct IdentifierType {}; + + template + bool FeedFile(const std::string& message_file, IdentifierType) { + D data; + if (!apollo::common::util::GetProtoFromFile(message_file, &data)) { + AERROR << "Unable to parse input pb file " << message_file; + return false; + } + FeedData(data); + return true; + } + bool FeedFile(const std::string& message_file, + IdentifierType<::sensor_msgs::PointCloud2>) { + return false; + } + // HasSequenceNumber returns false for non-proto-message data types. template static bool HasSequenceNumber( typename std::enable_if< !std::is_base_of::value, - InputMessageType>::type *message = nullptr) { + InputMessageType>::type* message = nullptr) { return false; } @@ -248,7 +294,7 @@ class Adapter { static bool HasSequenceNumber( typename std::enable_if< std::is_base_of::value, - InputMessageType>::type *message = nullptr) { + InputMessageType>::type* message = nullptr) { using gpf = google::protobuf::FieldDescriptor; InputMessageType sample; auto descriptor = sample.GetDescriptor(); @@ -275,7 +321,7 @@ class Adapter { bool DumpMessage( const typename std::enable_if< !std::is_base_of::value, - InputMessageType>::type &message) { + InputMessageType>::type& message) { return true; } @@ -286,7 +332,7 @@ class Adapter { bool DumpMessage( const typename std::enable_if< std::is_base_of::value, - InputMessageType>::type &message) { + InputMessageType>::type& message) { using google::protobuf::Message; auto descriptor = message.GetDescriptor(); auto header_descriptor = descriptor->FindFieldByName("header"); @@ -294,8 +340,8 @@ class Adapter { ADEBUG << "Fail to find header field in pb."; return false; } - const Message &header = message.GetReflection()->GetMessage( - *static_cast(&message), header_descriptor); + const Message& header = message.GetReflection()->GetMessage( + *static_cast(&message), header_descriptor); auto seq_num_descriptor = header.GetDescriptor()->FindFieldByName("sequence_num"); if (seq_num_descriptor == nullptr) { @@ -304,17 +350,18 @@ class Adapter { } uint32_t sequence_num = header.GetReflection()->GetUInt32(header, seq_num_descriptor); - return apollo::common::util::SetProtoToASCIIFile( - message, dump_path_ + "/" + std::to_string(sequence_num) + ".pb.txt"); + return util::SetProtoToASCIIFile( + message, util::StrCat(dump_path_, "/", sequence_num, ".pb.txt")); } /** - * @brief proactively invokes the callback with the specified data. + * @brief proactively invokes the callbacks one by one registered with the + * specified data. * @param data the specified data. */ - void FireCallback(const D &data) { - if (receive_callback_ != nullptr) { - receive_callback_(data); + void FireCallbacks(const D& data) { + for (const auto& callback : receive_callbacks_) { + callback(data); } } @@ -322,9 +369,14 @@ class Adapter { * @brief push the shared-pointer-guarded data to the data queue of * the adapter. */ - void EnqueueData(std::shared_ptr data_ptr) { + void EnqueueData(const D& data) { if (enable_dump_) { - DumpMessage(*data_ptr); + DumpMessage(data); + } + + // Don't try to copy data and enqueue if the message_num is 0 + if (message_num_ == 0) { + return; } // Lock the queue. @@ -332,7 +384,7 @@ class Adapter { if (data_queue_.size() + 1 > message_num_) { data_queue_.pop_back(); } - data_queue_.push_front(data_ptr); + data_queue_.push_front(std::make_shared(data)); } /// The topic name that the adapter listens to. @@ -349,7 +401,7 @@ class Adapter { std::list> observed_queue_; /// User defined function when receiving a message - Callback receive_callback_ = nullptr; + std::vector receive_callbacks_; /// The mutex guarding data_queue_ and observed_queue_ mutable std::mutex mutex_; @@ -363,6 +415,9 @@ class Adapter { /// The monotonically increasing sequence number of the message to /// be published. uint32_t seq_num_ = 0; + + /// The most recenct published data. + std::unique_ptr latest_published_data_; }; } // namespace adapter diff --git a/modules/common/adapters/adapter_gflags.cc b/modules/common/adapters/adapter_gflags.cc index 1e71646192b..004bbb6a4c8 100644 --- a/modules/common/adapters/adapter_gflags.cc +++ b/modules/common/adapters/adapter_gflags.cc @@ -16,8 +16,6 @@ #include "modules/common/adapters/adapter_gflags.h" -DEFINE_string(adapter_config_path, "", "the file path of adapter config file"); - DEFINE_bool(enable_adapter_dump, false, "Whether enable dumping the messages to " "/tmp/adapters//.txt for debugging purposes."); @@ -35,9 +33,20 @@ DEFINE_string(pad_topic, "/apollo/control/pad", "control pad message topic name"); DEFINE_string(control_command_topic, "/apollo/control", "control command topic name"); +DEFINE_string(pointcloud_topic, "/apollo/compensator/pointcloud", + "pointcloud topic name"); DEFINE_string(prediction_topic, "/apollo/prediction", "prediction topic name"); DEFINE_string(perception_obstacle_topic, "/apollo/perception/obstacles", "perception obstacle topic name"); DEFINE_string(traffic_light_detection_topic, "/apollo/perception/traffic_light", "traffic light detection topic name"); -DEFINE_string(decision_topic, "/apollo/decision", "decision topic name"); +DEFINE_string(routing_request_topic, "/apollo/routing_request", + "routing request topic name"); +DEFINE_string(routing_response_topic, "/apollo/routing_response", + "routing response topic name"); +DEFINE_string(relative_odometry_topic, "/apollo/calibration/relative_odometry", + "relative odometry topic name"); +DEFINE_string(ins_stat_topic, "/apollo/sensor/gnss/ins_stat", + "ins stat topic name"); +DEFINE_string(hmi_command_topic, "/apollo/hmi_command", + "HMI command topic name"); diff --git a/modules/common/adapters/adapter_gflags.h b/modules/common/adapters/adapter_gflags.h index 26cdca3b226..01f0bfd2e71 100644 --- a/modules/common/adapters/adapter_gflags.h +++ b/modules/common/adapters/adapter_gflags.h @@ -19,7 +19,6 @@ #include "gflags/gflags.h" -DECLARE_string(adapter_config_path); DECLARE_bool(enable_adapter_dump); DECLARE_string(monitor_topic); DECLARE_string(gps_topic); @@ -31,9 +30,14 @@ DECLARE_string(planning_trajectory_topic); DECLARE_string(monitor_topic); DECLARE_string(pad_topic); DECLARE_string(control_command_topic); +DECLARE_string(pointcloud_topic); DECLARE_string(prediction_topic); DECLARE_string(perception_obstacle_topic); DECLARE_string(traffic_light_detection_topic); -DECLARE_string(decision_topic); +DECLARE_string(routing_request_topic); +DECLARE_string(routing_response_topic); +DECLARE_string(relative_odometry_topic); +DECLARE_string(ins_stat_topic); +DECLARE_string(hmi_command_topic); #endif // MODULES_COMMON_ADAPTERS_ADAPTER_GFLAGS_H_ diff --git a/modules/common/adapters/adapter_manager.cc b/modules/common/adapters/adapter_manager.cc index 7e93ed49785..9756755a835 100644 --- a/modules/common/adapters/adapter_manager.cc +++ b/modules/common/adapters/adapter_manager.cc @@ -31,7 +31,7 @@ void AdapterManager::Observe() { } } -void AdapterManager::Init() { Init(FLAGS_adapter_config_path); } +bool AdapterManager::Initialized() { return instance()->initialized_; } void AdapterManager::Init(const std::string &adapter_config_filename) { // Parse config file @@ -44,12 +44,17 @@ void AdapterManager::Init(const std::string &adapter_config_filename) { } void AdapterManager::Init(const AdapterManagerConfig &configs) { + instance()->initialized_ = true; if (configs.is_ros()) { instance()->node_handle_.reset(new ros::NodeHandle()); } for (const auto &config : configs.config()) { switch (config.type()) { + case AdapterConfig::POINT_CLOUD: + EnablePointCloud(FLAGS_pointcloud_topic, config.mode(), + config.message_history_limit()); + break; case AdapterConfig::GPS: EnableGps(FLAGS_gps_topic, config.mode(), config.message_history_limit()); @@ -83,9 +88,17 @@ void AdapterManager::Init(const AdapterManagerConfig &configs) { EnableControlCommand(FLAGS_control_command_topic, config.mode(), config.message_history_limit()); break; + case AdapterConfig::ROUTING_REQUEST: + EnableRoutingRequest(FLAGS_routing_request_topic, config.mode(), + config.message_history_limit()); + break; + case AdapterConfig::ROUTING_RESPONSE: + EnableRoutingResponse(FLAGS_routing_response_topic, config.mode(), + config.message_history_limit()); + break; case AdapterConfig::PLANNING_TRAJECTORY: - EnablePlanningTrajectory(FLAGS_planning_trajectory_topic, config.mode(), - config.message_history_limit()); + EnablePlanning(FLAGS_planning_trajectory_topic, config.mode(), + config.message_history_limit()); break; case AdapterConfig::PREDICTION: EnablePrediction(FLAGS_prediction_topic, config.mode(), @@ -99,9 +112,17 @@ void AdapterManager::Init(const AdapterManagerConfig &configs) { EnableChassisDetail(FLAGS_chassis_detail_topic, config.mode(), config.message_history_limit()); break; - case AdapterConfig::DECISION: - EnableDecision(FLAGS_decision_topic, config.mode(), - config.message_history_limit()); + case AdapterConfig::RELATIVE_ODOMETRY: + EnableRelativeOdometry(FLAGS_relative_odometry_topic, config.mode(), + config.message_history_limit()); + break; + case AdapterConfig::INS_STAT: + EnableInsStat(FLAGS_ins_stat_topic, config.mode(), + config.message_history_limit()); + break; + case AdapterConfig::HMI_COMMAND: + EnableHMICommand(FLAGS_hmi_command_topic, config.mode(), + config.message_history_limit()); break; default: AERROR << "Unknown adapter config type!"; diff --git a/modules/common/adapters/adapter_manager.h b/modules/common/adapters/adapter_manager.h index 10052bb0b13..fe77428048a 100644 --- a/modules/common/adapters/adapter_manager.h +++ b/modules/common/adapters/adapter_manager.h @@ -61,27 +61,31 @@ namespace adapter { static name##Adapter *Get##name() { \ return instance()->InternalGet##name(); \ } \ - static void Feed##name##ProtoFile(const std::string &proto_file) { \ - CHECK(instance()->name##_) \ - << "Initialize adapter before feeding protobuf"; \ - Get##name()->FeedProtoFile(proto_file); \ + static bool Feed##name##File(const std::string &proto_file) { \ + if (!instance()->name##_) { \ + AERROR << "Initialize adapter before feeding protobuf"; \ + return false; \ + } \ + return Get##name()->FeedFile(proto_file); \ } \ static void Publish##name(const name##Adapter::DataType &data) { \ instance()->InternalPublish##name(data); \ } \ - static void Fill##name##Header(const std::string &module_name, \ - apollo::common::Header *header) { \ - instance()->name##_->FillHeader(module_name, header); \ + template \ + static void Fill##name##Header(const std::string &module_name, T *data) { \ + static_assert(std::is_same::value, \ + "Data type must be the same with adapter's type!"); \ + instance()->name##_->FillHeader(module_name, data); \ } \ - static void Set##name##Callback(name##Adapter::Callback callback) { \ + static void Add##name##Callback(name##Adapter::Callback callback) { \ CHECK(instance()->name##_) \ << "Initialize adapter before setting callback"; \ - instance()->name##_->SetCallback(callback); \ + instance()->name##_->AddCallback(callback); \ } \ template \ - static void Set##name##Callback( \ + static void Add##name##Callback( \ void (T::*fp)(const name##Adapter::DataType &data), T *obj) { \ - Set##name##Callback(std::bind(fp, obj, std::placeholders::_1)); \ + Add##name##Callback(std::bind(fp, obj, std::placeholders::_1)); \ } \ \ private: \ @@ -108,7 +112,11 @@ namespace adapter { } \ name##Adapter *InternalGet##name() { return name##_.get(); } \ void InternalPublish##name(const name##Adapter::DataType &data) { \ - name##publisher_.publish(data); \ + /* Only publish ROS msg if node handle is initialized. */ \ + if (node_handle_) { \ + name##publisher_.publish(data); \ + } \ + name##_->SetLatestPublished(data); \ } /** @@ -127,11 +135,6 @@ namespace adapter { */ class AdapterManager { public: - /** - * @brief Initialize the /class AdapterManager singleton. - */ - static void Init(); - /** * @brief Initialize the /class AdapterManager singleton with the * provided configuration. The configuration is specified by the @@ -147,6 +150,12 @@ class AdapterManager { * @param configs the adapter manager configuration proto. */ static void Init(const AdapterManagerConfig &configs); + + /** + * @brief check if the AdapterManager is initialized + */ + static bool Initialized(); + static void Observe(); /** @@ -175,11 +184,12 @@ class AdapterManager { /// of enabled adapters. std::vector> observers_; + bool initialized_ = false; + /// The following code registered all the adapters of interest. REGISTER_ADAPTER(Chassis); REGISTER_ADAPTER(ChassisDetail); REGISTER_ADAPTER(ControlCommand); - REGISTER_ADAPTER(Decision); REGISTER_ADAPTER(Gps); REGISTER_ADAPTER(Imu); REGISTER_ADAPTER(Camera); @@ -187,9 +197,15 @@ class AdapterManager { REGISTER_ADAPTER(Monitor); REGISTER_ADAPTER(Pad); REGISTER_ADAPTER(PerceptionObstacles); - REGISTER_ADAPTER(PlanningTrajectory); + REGISTER_ADAPTER(Planning); + REGISTER_ADAPTER(PointCloud); REGISTER_ADAPTER(Prediction); REGISTER_ADAPTER(TrafficLightDetection); + REGISTER_ADAPTER(RoutingRequest); + REGISTER_ADAPTER(RoutingResponse); + REGISTER_ADAPTER(RelativeOdometry); + REGISTER_ADAPTER(InsStat); + REGISTER_ADAPTER(HMICommand); DECLARE_SINGLETON(AdapterManager); }; diff --git a/modules/common/adapters/adapter_test.cc b/modules/common/adapters/adapter_test.cc index abbd069108d..420311a0abe 100644 --- a/modules/common/adapters/adapter_test.cc +++ b/modules/common/adapters/adapter_test.cc @@ -117,7 +117,7 @@ TEST(AdapterTest, Callback) { // Set the callback to act as a counter of messages. int count = 0; - adapter.SetCallback([&count](int x) { count += x; }); + adapter.AddCallback([&count](int x) { count += x; }); adapter.OnReceive(11); adapter.OnReceive(41); diff --git a/modules/common/adapters/message_adapters.h b/modules/common/adapters/message_adapters.h index 6f92c052036..8da375d47a3 100644 --- a/modules/common/adapters/message_adapters.h +++ b/modules/common/adapters/message_adapters.h @@ -17,13 +17,15 @@ #ifndef MODULES_ADAPTERS_MESSAGE_ADAPTERS_H_ #define MODULES_ADAPTERS_MESSAGE_ADAPTERS_H_ +#include "modules/calibration/republish_msg/proto/relative_odometry.pb.h" #include "modules/canbus/proto/chassis.pb.h" #include "modules/canbus/proto/chassis_detail.pb.h" #include "modules/common/adapters/adapter.h" #include "modules/common/monitor/proto/monitor.pb.h" #include "modules/control/proto/control_cmd.pb.h" #include "modules/control/proto/pad_msg.pb.h" -#include "modules/decision/proto/decision.pb.h" +#include "modules/drivers/gnss/proto/ins.pb.h" +#include "modules/hmi/proto/hmi_message.pb.h" #include "modules/localization/proto/camera.pb.h" #include "modules/localization/proto/gps.pb.h" #include "modules/localization/proto/imu.pb.h" @@ -32,6 +34,8 @@ #include "modules/perception/proto/traffic_light_detection.pb.h" #include "modules/planning/proto/planning.pb.h" #include "modules/prediction/proto/prediction_obstacle.pb.h" +#include "modules/routing/proto/routing.pb.h" +#include "sensor_msgs/PointCloud2.h" /** * @file message_adapters.h @@ -43,22 +47,28 @@ namespace apollo { namespace common { namespace adapter { -using ChassisAdapter = Adapter<::apollo::canbus::Chassis>; -using ChassisDetailAdapter = Adapter<::apollo::canbus::ChassisDetail>; -using ControlCommandAdapter = Adapter<::apollo::control::ControlCommand>; -using DecisionAdapter = Adapter<::apollo::decision::DecisionResult>; +using ChassisAdapter = Adapter; +using ChassisDetailAdapter = Adapter; +using ControlCommandAdapter = Adapter; using GpsAdapter = Adapter; -using ImuAdapter = Adapter<::apollo::localization::Imu>; -using CameraAdapter = Adapter<::apollo::localization::Camera>; +using ImuAdapter = Adapter; +using CameraAdapter = Adapter; using LocalizationAdapter = Adapter; using MonitorAdapter = Adapter; -using PadAdapter = Adapter<::apollo::control::PadMessage>; +using PadAdapter = Adapter; using PerceptionObstaclesAdapter = - Adapter<::apollo::perception::PerceptionObstacles>; -using PlanningTrajectoryAdapter = Adapter<::apollo::planning::ADCTrajectory>; -using PredictionAdapter = Adapter<::apollo::prediction::PredictionObstacles>; + Adapter; +using PlanningAdapter = Adapter; +using PointCloudAdapter = Adapter<::sensor_msgs::PointCloud2>; +using PredictionAdapter = Adapter; using TrafficLightDetectionAdapter = - Adapter<::apollo::perception::TrafficLightDetection>; + Adapter; +using RoutingRequestAdapter = Adapter; +using RoutingResponseAdapter = Adapter; +using RelativeOdometryAdapter = + Adapter; +using InsStatAdapter = Adapter; +using HMICommandAdapter = Adapter; } // namespace adapter } // namespace common diff --git a/modules/common/adapters/proto/BUILD b/modules/common/adapters/proto/BUILD index bc786676c6d..c25e06c07da 100644 --- a/modules/common/adapters/proto/BUILD +++ b/modules/common/adapters/proto/BUILD @@ -1,18 +1,15 @@ package(default_visibility = ["//visibility:public"]) -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile") - cc_proto_library( name = "adapter_config_proto", - protos = [ - "adapter_config.proto", + deps = [ + ":adapter_config_proto_lib", ], ) -py_proto_compile( - name = "adapter_config_proto_pylib", - protos = [ +proto_library( + name = "adapter_config_proto_lib", + srcs = [ "adapter_config.proto", ], ) diff --git a/modules/common/adapters/proto/adapter_config.proto b/modules/common/adapters/proto/adapter_config.proto index 2a3cd580f1a..96b56b7c70d 100644 --- a/modules/common/adapters/proto/adapter_config.proto +++ b/modules/common/adapters/proto/adapter_config.proto @@ -18,8 +18,13 @@ message AdapterConfig { PERCEPTION_OBSTACLES = 11; TRAFFIC_LIGHT_DETECTION = 12; CHASSIS_DETAIL = 13; - DECISION = 14; + DECISION = 14 [deprecated = true]; CANBUS = 15; + ROUTING_REQUEST = 16; + ROUTING_RESPONSE = 17; + RELATIVE_ODOMETRY = 18; + INS_STAT = 19; + HMI_COMMAND = 20; } enum Mode { RECEIVE_ONLY = 0; diff --git a/modules/common/apollo_app.cc b/modules/common/apollo_app.cc index 53b1661b459..07fd2e5913f 100644 --- a/modules/common/apollo_app.cc +++ b/modules/common/apollo_app.cc @@ -33,7 +33,7 @@ void ApolloApp::ReportModuleStatus( const apollo::hmi::ModuleStatus::Status status) { status_.set_name(Name()); status_.set_status(status); - ::apollo::hmi::HMIStatusHelper::ReportModuleStatus(status_); + hmi::HMIStatusHelper::ReportModuleStatus(status_); } int ApolloApp::Spin() { diff --git a/modules/common/configs/BUILD b/modules/common/configs/BUILD index c2b7cd4affe..e4dd5192644 100644 --- a/modules/common/configs/BUILD +++ b/modules/common/configs/BUILD @@ -10,6 +10,9 @@ cc_library( hdrs = [ "config_gflags.h", ], + data = [ + "//modules/common/data:global_flagfile", + ], deps = [ "//external:gflags", ], diff --git a/modules/common/configs/config_gflags.cc b/modules/common/configs/config_gflags.cc index cf9927a9367..2f1d2da3ebf 100644 --- a/modules/common/configs/config_gflags.cc +++ b/modules/common/configs/config_gflags.cc @@ -16,5 +16,21 @@ #include "modules/common/configs/config_gflags.h" +DEFINE_string(map_dir, "modules/map/data/demo", + "Directory which contains a group of related maps."); + +DEFINE_string(base_map_filename, "base_map.xml|base_map.bin|base_map.txt", + "Base map files in the map_dir, search in order."); +DEFINE_string(sim_map_filename, "sim_map.bin|sim_map.txt", + "Simulation map files in the map_dir, search in order."); +DEFINE_string(routing_map_filename, "routing_map.bin|routing_map.txt", + "Routing map files in the map_dir, search in order."); +DEFINE_string(end_way_point_filename, "default_end_way_point.txt", + "End way point of the map, will be sent in RoutingRequest."); + DEFINE_string(vehicle_config_path, "modules/common/data/mkz_config.pb.txt", "the file path of vehicle config file"); + +DEFINE_bool(use_ros_time, false, + "Whether Clock::Now() gets time from system_clock::now() or from " + "ros::Time::now()."); diff --git a/modules/common/configs/config_gflags.h b/modules/common/configs/config_gflags.h index f51866a9dc8..c05f1677ada 100644 --- a/modules/common/configs/config_gflags.h +++ b/modules/common/configs/config_gflags.h @@ -19,6 +19,17 @@ #include "gflags/gflags.h" +// The directory which contains a group of related maps, such as base_map, +// sim_map, routing_topo_grapth, etc. +DECLARE_string(map_dir); + +DECLARE_string(base_map_filename); +DECLARE_string(sim_map_filename); +DECLARE_string(routing_map_filename); +DECLARE_string(end_way_point_filename); + DECLARE_string(vehicle_config_path); +DECLARE_bool(use_ros_time); + #endif // MODULES_COMMON_CONFIGS_GFLAGS_H_ diff --git a/modules/common/configs/proto/BUILD b/modules/common/configs/proto/BUILD index 836b65fa911..8c3a9c42ba9 100644 --- a/modules/common/configs/proto/BUILD +++ b/modules/common/configs/proto/BUILD @@ -1,26 +1,19 @@ package(default_visibility = ["//visibility:public"]) -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile") - cc_proto_library( name = "vehicle_config_proto", - protos = [ - "config_extrinsics.proto", - "vehicle_config.proto", - ], deps = [ - "//modules/common/proto:common_proto", + ":vehicle_config_proto_lib", ], ) -py_proto_compile( - name = "vehicle_config_proto_pylib", - protos = [ - "config_extrinsics.proto", +proto_library( + name = "vehicle_config_proto_lib", + srcs = [ "vehicle_config.proto", ], deps = [ - "//modules/common/proto:common_proto_pylib", + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:header_proto_lib", ], ) diff --git a/modules/common/configs/proto/config_extrinsics.proto b/modules/common/configs/proto/config_extrinsics.proto deleted file mode 100644 index 43fe47539a9..00000000000 --- a/modules/common/configs/proto/config_extrinsics.proto +++ /dev/null @@ -1,21 +0,0 @@ -syntax = "proto2"; - -package apollo.common.config; - -import "modules/common/proto/geometry.proto"; - -message Transform { - optional bytes source_frame = 1; // Also known as "frame_id." - - optional bytes target_frame = 2; // Also known as "child_frame_id." - - // Position of target in the source frame. - optional Point3D translation = 3; - - // Activate rotation from the source frame to the target frame. - optional Quaternion rotation = 4; -} - -message Extrinsics { - repeated Transform tansforms = 1; -} diff --git a/modules/common/configs/proto/vehicle_config.proto b/modules/common/configs/proto/vehicle_config.proto index adbee9367cb..1d1c96edd06 100644 --- a/modules/common/configs/proto/vehicle_config.proto +++ b/modules/common/configs/proto/vehicle_config.proto @@ -1,9 +1,25 @@ syntax = "proto2"; -package apollo.common.config; +package apollo.common; import "modules/common/proto/header.proto"; -import "modules/common/configs/proto/config_extrinsics.proto"; +import "modules/common/proto/geometry.proto"; + +message Transform { + optional bytes source_frame = 1; // Also known as "frame_id." + + optional bytes target_frame = 2; // Also known as "child_frame_id." + + // Position of target in the source frame. + optional Point3D translation = 3; + + // Activate rotation from the source frame to the target frame. + optional Quaternion rotation = 4; +} + +message Extrinsics { + repeated Transform tansforms = 1; +} // Vehicle parameters shared among several modules. // By default, all are measured with the SI units (meters, meters per second, diff --git a/modules/common/configs/vehicle_config_helper.cc b/modules/common/configs/vehicle_config_helper.cc index 8840d615ce7..8e2eac80ee9 100644 --- a/modules/common/configs/vehicle_config_helper.cc +++ b/modules/common/configs/vehicle_config_helper.cc @@ -14,15 +14,15 @@ * limitations under the License. *****************************************************************************/ -#include "modules/common/configs/vehicle_config_helper.h" #include "modules/common/configs/config_gflags.h" +#include "modules/common/configs/vehicle_config_helper.h" #include "modules/common/util/file.h" namespace apollo { namespace common { -namespace config { VehicleConfig VehicleConfigHelper::vehicle_config_; +bool VehicleConfigHelper::is_init_ = false; VehicleConfigHelper::VehicleConfigHelper() {} @@ -37,12 +37,15 @@ void VehicleConfigHelper::Init(const std::string &config_file) { void VehicleConfigHelper::Init(const VehicleConfig &vehicle_params) { vehicle_config_ = vehicle_params; + is_init_ = true; } const VehicleConfig &VehicleConfigHelper::GetConfig() { + if (!is_init_) { + Init(); + } return vehicle_config_; } -} // namespace config } // namespace common } // namespace apollo diff --git a/modules/common/configs/vehicle_config_helper.h b/modules/common/configs/vehicle_config_helper.h index 1ae94cb6d4a..b3eb7bd6ab5 100644 --- a/modules/common/configs/vehicle_config_helper.h +++ b/modules/common/configs/vehicle_config_helper.h @@ -32,7 +32,6 @@ */ namespace apollo { namespace common { -namespace config { /** * @class VehicleConfigHelper @@ -76,10 +75,10 @@ class VehicleConfigHelper { private: static VehicleConfig vehicle_config_; + static bool is_init_; DECLARE_SINGLETON(VehicleConfigHelper); }; -} // namespace config } // namespace common } // namespace apollo diff --git a/modules/common/data/BUILD b/modules/common/data/BUILD index c8c01b9ea79..6a5d7bdcb91 100644 --- a/modules/common/data/BUILD +++ b/modules/common/data/BUILD @@ -2,5 +2,10 @@ package(default_visibility = ["//visibility:public"]) filegroup( name = "vehicle_config_data", - srcs = glob(["*"]), + srcs = ["mkz_config.pb.txt"], +) + +filegroup( + name = "global_flagfile", + srcs = ["global_flagfile.txt"], ) diff --git a/modules/common/data/global_flagfile.txt b/modules/common/data/global_flagfile.txt new file mode 100644 index 00000000000..7d4cc6eb0e1 --- /dev/null +++ b/modules/common/data/global_flagfile.txt @@ -0,0 +1,10 @@ +# 1. Flags in this file should be defined in common/configs/config_gflags.h +# 2. To use it, add the following line into your command line arguments or +# already-in-use flagfile: +# --flagfile=modules/common/data/global_flagfile.txt +# 3. To override the flag values, you must set it after this file, as all Flags +# are evaluated strictly in order. + +--vehicle_config_path=modules/common/data/mkz_config.pb.txt + +--map_dir=modules/map/data/sunnyvale_loop diff --git a/modules/common/log.h b/modules/common/log.h index 6ec67c4a048..f80f78033db 100644 --- a/modules/common/log.h +++ b/modules/common/log.h @@ -22,11 +22,21 @@ #define MODULES_COMMON_LOG_H_ #include "glog/logging.h" +#include "glog/raw_logging.h" #define ADEBUG VLOG(4) << "[DEBUG] " -#define AINFO VLOG(3) << "[INFO] " +#define AINFO LOG(INFO) #define AWARN LOG(WARNING) #define AERROR LOG(ERROR) #define AFATAL LOG(FATAL) +// LOG_IF +#define AINFO_IF(cond) LOG_IF(INFO, cond) +#define AERROR_IF(cond) LOG_IF(ERROR, cond) + +// LOG_EVERY_N +#define AINFO_EVERY(freq) LOG_EVERY_N(INFO, freq) +#define AWARN_EVERY(freq) LOG_EVERY_N(WARNING, freq) +#define AERROR_EVERY(freq) LOG_EVERY_N(ERROR, freq) + #endif // MODULES_COMMON_LOG_H_ diff --git a/modules/common/macro.h b/modules/common/macro.h index 91e27b9582b..659c202214f 100644 --- a/modules/common/macro.h +++ b/modules/common/macro.h @@ -21,6 +21,8 @@ #ifndef MODULES_COMMON_MACRO_H_ #define MODULES_COMMON_MACRO_H_ +#include + #define DISALLOW_COPY_AND_ASSIGN(classname) \ private: \ classname(const classname &); \ diff --git a/modules/common/math/BUILD b/modules/common/math/BUILD index e5ae430bfea..a231b417763 100644 --- a/modules/common/math/BUILD +++ b/modules/common/math/BUILD @@ -16,6 +16,7 @@ cc_library( ":linear_interpolation", ":lqr", ":math_utils", + ":mpc", ":polygon2d", ":quaternion", ":search", @@ -48,6 +49,7 @@ cc_library( ], deps = [ "//modules/common:log", + "//modules/common/util:string_util", ], ) @@ -164,6 +166,7 @@ cc_library( deps = [ "//modules/common:log", "//modules/common/math:matrix_operations", + "//modules/common/util:string_util", "@eigen//:eigen", ], ) @@ -247,6 +250,9 @@ cc_library( hdrs = [ "integral.h", ], + deps = [ + "//modules/common:log", + ], ) cc_library( @@ -263,6 +269,36 @@ cc_library( ], ) +cc_library( + name = "mpc", + srcs = [ + "mpc_solver.cc", + ], + hdrs = [ + "mpc_solver.h", + ], + deps = [ + "//modules/common:log", + "//modules/common/math/qp_solver", + "//modules/common/math/qp_solver:active_set_qp_solver", + "@eigen//:eigen", + ], +) + +cc_test( + name = "mpc_test", + size = "small", + srcs = [ + "mpc_solver_test.cc", + ], + deps = [ + ":mpc", + "//modules/common/math/qp_solver", + "//modules/common/math/qp_solver:active_set_qp_solver", + "@gtest//:main", + ], +) + cc_test( name = "math_utils_test", size = "small", @@ -284,6 +320,7 @@ cc_test( deps = [ ":linear_interpolation", "//modules/common:log", + "@eigen//:eigen", "@gtest//:main", ], ) diff --git a/modules/common/math/aabox2d.cc b/modules/common/math/aabox2d.cc index c70c5320c01..486c53e3344 100644 --- a/modules/common/math/aabox2d.cc +++ b/modules/common/math/aabox2d.cc @@ -18,9 +18,9 @@ #include #include -#include #include "modules/common/log.h" +#include "modules/common/util/string_util.h" #include "modules/common/math/math_utils.h" @@ -146,11 +146,9 @@ void AABox2d::MergeFrom(const Vec2d &other_point) { } std::string AABox2d::DebugString() const { - std::ostringstream sout; - sout << "aabox2d ( center = " << center_.DebugString() - << " length = " << length_ << " width = " << width_ << " )"; - sout.flush(); - return sout.str(); + return util::StrCat( + "aabox2d ( center = ", center_.DebugString(), + " length = ", length_, " width = ", width_, " )"); } } // namespace math diff --git a/modules/common/math/box2d.cc b/modules/common/math/box2d.cc index cd59db22396..87f867f6b12 100644 --- a/modules/common/math/box2d.cc +++ b/modules/common/math/box2d.cc @@ -18,10 +18,10 @@ #include #include -#include #include #include "modules/common/log.h" +#include "modules/common/util/string_util.h" #include "modules/common/math/math_utils.h" #include "modules/common/math/polygon2d.h" @@ -303,12 +303,10 @@ void Box2d::RotateFromCenter(const double rotate_angle) { void Box2d::Shift(const Vec2d &shift_vec) { center_ += shift_vec; } std::string Box2d::DebugString() const { - std::ostringstream sout; - sout << "box2d ( center = " << center_.DebugString() - << " heading = " << heading_ << " length = " << length_ - << " width = " << width_ << " )"; - sout.flush(); - return sout.str(); + return util::StrCat( + "box2d ( center = ", center_.DebugString(), + " heading = ", heading_, " length = ", length_, + " width = ", width_, " )"); } } // namespace math diff --git a/modules/common/math/euler_angles_zxy_test.cc b/modules/common/math/euler_angles_zxy_test.cc index c229b155636..27aaad9775a 100644 --- a/modules/common/math/euler_angles_zxy_test.cc +++ b/modules/common/math/euler_angles_zxy_test.cc @@ -16,9 +16,9 @@ #include "modules/common/math/euler_angles_zxy.h" -#include #include +#include "Eigen/Geometry" #include "gtest/gtest.h" namespace apollo { diff --git a/modules/common/math/integral.cc b/modules/common/math/integral.cc index 332ff7b9973..f273ccca127 100644 --- a/modules/common/math/integral.cc +++ b/modules/common/math/integral.cc @@ -16,14 +16,43 @@ #include "modules/common/math/integral.h" +#include + +#include "modules/common/log.h" + namespace apollo { namespace common { namespace math { -double GaussLegendre(const std::function &func, - const double lower_bound, const double upper_bound) { - double t = (upper_bound - lower_bound) * 0.5; - double m = (upper_bound + lower_bound) * 0.5; +double IntegrateBySimpson(const std::vector& func, const double dx, + const std::size_t nsteps) { + CHECK_EQ(1, nsteps & 1); + double sum1 = 0.0; + double sum2 = 0.0; + for (std::size_t i = 1; i + 1 < nsteps; ++i) { + if ((i & 1) != 0) { + sum1 += func[i]; + } else { + sum2 += func[i]; + } + } + return dx / 3.0 * (4.0 * sum1 + 2.0 * sum2 + func[0] + func[nsteps - 1]); +} + +double IntegrateByTrapezoidal(const std::vector& func, const double dx, + const std::size_t nsteps) { + double sum = 0; + for (std::size_t i = 1; i + 1 < nsteps; ++i) { + sum += func[i]; + } + return dx * sum + 0.5 * dx * (func[0] + func[nsteps - 1]); +} + +double IntegrateByGaussLegendre(const std::function& func, + const double lower_bound, + const double upper_bound) { + const double t = (upper_bound - lower_bound) * 0.5; + const double m = (upper_bound + lower_bound) * 0.5; std::array w; w[0] = 0.5688888889; diff --git a/modules/common/math/integral.h b/modules/common/math/integral.h index d9bfdb1efa2..c87de4543c2 100644 --- a/modules/common/math/integral.h +++ b/modules/common/math/integral.h @@ -19,10 +19,11 @@ * @brief Functions to compute integral. */ -#ifndef MODULES_COMMON_MATH_INTEGRATION_H_ -#define MODULES_COMMON_MATH_INTEGRATION_H_ +#ifndef MODULES_COMMON_MATH_INTEGRAL_H_ +#define MODULES_COMMON_MATH_INTEGRAL_H_ #include +#include /** * @namespace apollo::common::math @@ -32,31 +33,37 @@ namespace apollo { namespace common { namespace math { -// Given a target function and integral lower and upper bound, -// compute the integral approximation using 5th order Gauss-Legendre -// integration. -// The target function must be a smooth function. -// Example: -// target function: auto func = [](const double& x) {return x * x;}; -// double integral = gauss_legendre(func, -2, 3); -// This gives you the approximated integral of function x^2 in bound [-2, 3] - -// reference: https://en.wikipedia.org/wiki/Gaussian_quadrature -// http://www.mymathlib.com/quadrature/gauss_legendre.html +double IntegrateBySimpson(const std::vector& funv_vec, const double dx, + const std::size_t nsteps); +double IntegrateByTrapezoidal(const std::vector& funv_vec, + const double dx, const std::size_t nsteps); /** * @brief Compute the integral of a target single-variable function * from a lower bound to an upper bound, by 5-th Gauss-Legendre method + * Given a target function and integral lower and upper bound, + * compute the integral approximation using 5th order Gauss-Legendre + * integration. + * The target function must be a smooth function. + * Example: + * target function: auto func = [](const double& x) {return x * x;}; + * double integral = gauss_legendre(func, -2, 3); + * This gives you the approximated integral of function x^2 in bound [-2, 3] + * + * reference: https://en.wikipedia.org/wiki/Gaussian_quadrature + * http://www.mymathlib.com/quadrature/gauss_legendre.html + * * @param func The target single-variable function * @param lower_bound The lower bound of the integral * @param upper_bound The upper bound of the integral * @return The integral result */ -double GaussLegendre(const std::function &func, - const double lower_bound, const double upper_bound); +double IntegrateByGaussLegendre(const std::function& func, + const double lower_bound, + const double upper_bound); } // namespace math } // namespace common } // namespace apollo -#endif /* MODULES_COMMON_MATH_INTEGRATION_H_ */ +#endif // MODULES_COMMON_MATH_INTEGRAL_H_ diff --git a/modules/common/math/integral_test.cc b/modules/common/math/integral_test.cc index 629dc1e28d6..650866ecf82 100644 --- a/modules/common/math/integral_test.cc +++ b/modules/common/math/integral_test.cc @@ -37,13 +37,13 @@ double SinFunc(double x) { return std::sin(x); } } // namespace TEST(IntegralTest, Integration) { - double linear_integral = GaussLegendre(LinearFunc, 0.0, 1.0); + double linear_integral = IntegrateByGaussLegendre(LinearFunc, 0.0, 1.0); EXPECT_NEAR(linear_integral, 1.0, 1e-5); - double square_integral = GaussLegendre(SquareFunc, 0.0, 1.0); + double square_integral = IntegrateByGaussLegendre(SquareFunc, 0.0, 1.0); EXPECT_NEAR(square_integral, 1.0 / 3.0, 1e-5); - double cubic_integral = GaussLegendre(CubicFunc, 0.0, 1.0); + double cubic_integral = IntegrateByGaussLegendre(CubicFunc, 0.0, 1.0); EXPECT_NEAR(cubic_integral, 1.0 / 4.0, 1e-5); - double sin_integral = GaussLegendre(SinFunc, 0.0, 0.5 * M_PI); + double sin_integral = IntegrateByGaussLegendre(SinFunc, 0.0, 0.5 * M_PI); EXPECT_NEAR(sin_integral, 1.0, 1e-5); } diff --git a/modules/common/math/kalman_filter.h b/modules/common/math/kalman_filter.h index ecb01d0e5bd..361a3f207d8 100644 --- a/modules/common/math/kalman_filter.h +++ b/modules/common/math/kalman_filter.h @@ -22,13 +22,13 @@ #ifndef MODULES_COMMON_MATH_KALMAN_FILTER_H_ #define MODULES_COMMON_MATH_KALMAN_FILTER_H_ -#include #include #include "Eigen/Dense" #include "modules/common/log.h" #include "modules/common/math/matrix_operations.h" +#include "modules/common/util/string_util.h" /** * @namespace apollo::common::math @@ -139,42 +139,35 @@ class KalmanFilter { * * @return Transition matrix. */ - const Eigen::Matrix &GetTransitionMatrix() { return F_; } + const Eigen::Matrix &GetTransitionMatrix() const { return F_; } /** * @brief Get the covariance matrix of the transition noise. * * @return Covariance matrix */ - const Eigen::Matrix &GetTransitionNoise() { return Q_; } + const Eigen::Matrix &GetTransitionNoise() const { return Q_; } /** * @brief Get the observation matrix, which maps states to observations. * * @return Observation matrix */ - const Eigen::Matrix &GetObservationMatrix() { return H_; } + const Eigen::Matrix &GetObservationMatrix() const { return H_; } /** * @brief Get the covariance matrix of the observation noise. * * @return Covariance matrix */ - const Eigen::Matrix &GetObservationNoise() { return R_; } - - /** - * @brief Get the covariance matrix of current state belief distribution. - * - * @return State covariance matrix - */ - const Eigen::Matrix &GetStateCovariance() { return P_; } + const Eigen::Matrix &GetObservationNoise() const { return R_; } /** * @brief Get the control matrix in the state transition rule. * * @return Control matrix */ - const Eigen::Matrix &GetControlMatrix() { return B_; } + const Eigen::Matrix &GetControlMatrix() const { return B_; } /** * @brief Updates the state belief distribution given the control input u. @@ -273,15 +266,14 @@ inline void KalmanFilter::Correct( template inline std::string KalmanFilter::DebugString() const { Eigen::IOFormat clean_fmt(4, 0, ", ", " ", "[", "]"); - std::ostringstream strs; - strs << "F = " << F_.format(clean_fmt) << "\n"; - strs << "B = " << B_.format(clean_fmt) << "\n"; - strs << "H = " << H_.format(clean_fmt) << "\n"; - strs << "Q = " << Q_.format(clean_fmt) << "\n"; - strs << "R = " << R_.format(clean_fmt) << "\n"; - strs << "x = " << x_.format(clean_fmt) << "\n"; - strs << "P = " << P_.format(clean_fmt) << "\n"; - return strs.str(); + return util::StrCat( + "F = ", F_.format(clean_fmt), "\n" + "B = ", B_.format(clean_fmt), "\n" + "H = ", H_.format(clean_fmt), "\n" + "Q = ", Q_.format(clean_fmt), "\n" + "R = ", R_.format(clean_fmt), "\n" + "x = ", x_.format(clean_fmt), "\n" + "P = ", P_.format(clean_fmt), "\n"); } } // namespace math diff --git a/modules/common/math/line_segment2d.cc b/modules/common/math/line_segment2d.cc index a1ccaaedb73..df2cfff2df7 100644 --- a/modules/common/math/line_segment2d.cc +++ b/modules/common/math/line_segment2d.cc @@ -18,10 +18,10 @@ #include #include -#include #include #include "modules/common/log.h" +#include "modules/common/util/string_util.h" #include "modules/common/math/math_utils.h" @@ -214,11 +214,8 @@ double LineSegment2d::GetPerpendicularFoot(const Vec2d &point, } std::string LineSegment2d::DebugString() const { - std::ostringstream sout; - sout << "segment2d ( start = " << start_.DebugString() - << " end = " << end_.DebugString() << " )"; - sout.flush(); - return sout.str(); + return util::StrCat("segment2d ( start = ", start_.DebugString(), " end = ", + end_.DebugString(), " )"); } } // namespace math diff --git a/modules/common/math/linear_interpolation.cc b/modules/common/math/linear_interpolation.cc index 45269938b38..95c33eed908 100644 --- a/modules/common/math/linear_interpolation.cc +++ b/modules/common/math/linear_interpolation.cc @@ -25,32 +25,14 @@ namespace apollo { namespace common { namespace math { -double lerp(const double x0, const double t0, const double x1, const double t1, - const double t) { - if (std::abs(t1 - t0) <= kMathEpsilon) { - AERROR << "input time difference is too small"; - return x0; - } - double r = (t - t0) / (t1 - t0); - double x = x0 + r * (x1 - x0); - return x; -} - -void lerp(const double x0, const double y0, const double t0, const double x1, - const double y1, const double t1, const double t, double *x, - double *y) { - *x = lerp(x0, t0, x1, t1, t); - *y = lerp(y0, t0, y1, t1, t); -} - double slerp(const double a0, const double t0, const double a1, const double t1, const double t) { if (std::abs(t1 - t0) <= kMathEpsilon) { AERROR << "input time difference is too small"; return NormalizeAngle(a0); } - double a0_n = NormalizeAngle(a0); - double a1_n = NormalizeAngle(a1); + const double a0_n = NormalizeAngle(a0); + const double a1_n = NormalizeAngle(a1); double d = a1_n - a0_n; if (d > M_PI) { d = d - 2 * M_PI; @@ -58,8 +40,8 @@ double slerp(const double a0, const double t0, const double a1, const double t1, d = d + 2 * M_PI; } - double r = (t - t0) / (t1 - t0); - double a = a0_n + d * r; + const double r = (t - t0) / (t1 - t0); + const double a = a0_n + d * r; return NormalizeAngle(a); } diff --git a/modules/common/math/linear_interpolation.h b/modules/common/math/linear_interpolation.h index f2e549d9951..db187100c65 100644 --- a/modules/common/math/linear_interpolation.h +++ b/modules/common/math/linear_interpolation.h @@ -22,6 +22,10 @@ #ifndef MODULES_COMMON_MATH_LINEAR_INTERPOLATION_H_ #define MODULES_COMMON_MATH_LINEAR_INTERPOLATION_H_ +#include + +#include "modules/common/log.h" + /** * @namespace apollo::common::math * @brief apollo::common::math @@ -31,33 +35,26 @@ namespace common { namespace math { /** - * @brief Linear interpolation between two 1-D points. - * @param x0 The coordinate of the first 1-D point. - * @param t0 The interpolation parameter of the first 1-D point. - * @param x1 The coordinate of the second 1-D point. - * @param t1 The interpolation parameter of the second 1-D point. - * @param t The interpolation parameter for interpolation. - * @param x The coordinate of the interpolated 1-D point. - * @return Interpolated 1-D point. - */ -double lerp(const double x0, const double t0, const double x1, const double t1, - const double t); - -/** - * @brief Linear interpolation between two 2-D points. - * @param x0 The x coordinate of the first 2-D point. - * @param y0 The y coordinate of the first 2-D point. - * @param t0 The interpolation parameter of the first 2-D point. - * @param x1 The x coordinate of the second 2-D point. - * @param y1 The y coordinate of the second 2-D point. - * @param t1 The interpolation parameter of the second 2-D point. + * @brief Linear interpolation between two points of type T. + * @param x0 The coordinate of the first point. + * @param t0 The interpolation parameter of the first point. + * @param x1 The coordinate of the second point. + * @param t1 The interpolation parameter of the second point. * @param t The interpolation parameter for interpolation. - * @param x The x coordinate of the interpolated 2-D point. - * @param y The y coordinate of the interpolated 2-D point. + * @param x The coordinate of the interpolated point. + * @return Interpolated point. */ -void lerp(const double x0, const double y0, const double t0, const double x1, - const double y1, const double t1, const double t, double *x, - double *y); +template +T lerp(const T& x0, const double t0, const T& x1, const double t1, + const double t) { + if (std::abs(t1 - t0) <= 1.0e-6) { + AERROR << "input time difference is too small"; + return x0; + } + const double r = (t - t0) / (t1 - t0); + const T x = x0 + r * (x1 - x0); + return x; +} /** * @brief Spherical linear interpolation between two angles. @@ -77,4 +74,4 @@ double slerp(const double a0, const double t0, const double a1, const double t1, } // namespace common } // namespace apollo -#endif /* MODULES_COMMON_MATH_LINEAR_INTERPOLATION_H_ */ +#endif // MODULES_COMMON_MATH_LINEAR_INTERPOLATION_H_ diff --git a/modules/common/math/linear_interpolation_test.cc b/modules/common/math/linear_interpolation_test.cc index 798e5a8cde0..e71ed583cfe 100644 --- a/modules/common/math/linear_interpolation_test.cc +++ b/modules/common/math/linear_interpolation_test.cc @@ -15,6 +15,7 @@ *****************************************************************************/ #include "modules/common/math/linear_interpolation.h" +#include "Eigen/Dense" #include "gtest/gtest.h" namespace apollo { @@ -36,21 +37,21 @@ TEST(LinearInterpolationTest, LerpOneDim) { TEST(LinearInterpolationTest, LerpTwoDim) { double t0 = 0.0; double t1 = 1.0; - double x0 = 2.0; - double x1 = 4.0; - double y0 = 1.0; - double y1 = 5.0; - double x = 0.0; - double y = 0.0; - lerp(x0, y0, t0, x1, y1, t1, 0.4, &x, &y); - EXPECT_NEAR(x, 2.8, 1e-6); - EXPECT_NEAR(y, 2.6, 1e-6); - lerp(x0, y0, t0, x1, y1, t1, 1.2, &x, &y); - EXPECT_NEAR(x, 4.4, 1e-6); - EXPECT_NEAR(y, 5.8, 1e-6); - lerp(x0, y0, t0, x1, y1, t1, -0.5, &x, &y); - EXPECT_NEAR(x, 1.0, 1e-6); - EXPECT_NEAR(y, -1.0, 1e-6); + + Eigen::Vector2d x0(2.0, 1.0); + Eigen::Vector2d x1(4.0, 5.0); + + Eigen::Vector2d x = lerp(x0, t0, x1, t1, 0.4); + EXPECT_NEAR(x.x(), 2.8, 1e-6); + EXPECT_NEAR(x.y(), 2.6, 1e-6); + + x = lerp(x0, t0, x1, t1, 1.2); + EXPECT_NEAR(x.x(), 4.4, 1e-6); + EXPECT_NEAR(x.y(), 5.8, 1e-6); + + x = lerp(x0, t0, x1, t1, -0.5); + EXPECT_NEAR(x.x(), 1.0, 1e-6); + EXPECT_NEAR(x.y(), -1.0, 1e-6); } TEST(LinearInterpolationTest, SlerpCaseOne) { diff --git a/modules/common/math/linear_quadratic_regulator.cc b/modules/common/math/linear_quadratic_regulator.cc index 7c96fe2218c..7c6e7aeb74b 100644 --- a/modules/common/math/linear_quadratic_regulator.cc +++ b/modules/common/math/linear_quadratic_regulator.cc @@ -13,11 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. *****************************************************************************/ -#include "modules/common/math/linear_quadratic_regulator.h" -#include "modules/common/log.h" + +#include #include "Eigen/Dense" +#include "modules/common/log.h" +#include "modules/common/math/linear_quadratic_regulator.h" + namespace apollo { namespace common { namespace math { @@ -29,7 +32,7 @@ void SolveLQRProblem(const Matrix &A, const Matrix &B, const Matrix &Q, const uint max_num_iteration, Matrix *ptr_K) { if (A.rows() != A.cols() || B.rows() != A.rows() || Q.rows() != Q.cols() || Q.rows() != A.rows() || R.rows() != R.cols() || R.rows() != B.cols()) { - AERROR << "One or more matrices have incompatible dimensions."; + AERROR << "LQR solver: one or more matrices have incompatible dimensions."; return; } @@ -40,24 +43,22 @@ void SolveLQRProblem(const Matrix &A, const Matrix &B, const Matrix &Q, // Calculate Matrix Difference Riccati Equation, initialize P and Q Matrix P = Q; uint num_iteration = 0; - double diff = 0.0; - while (num_iteration++ < max_num_iteration) { + double diff = std::numeric_limits::max(); + while (num_iteration++ < max_num_iteration && diff > tolerance) { Matrix P_next = AT * P * A - AT * P * B * (R + BT * P * B).inverse() * BT * P * A + Q; // check the difference between P and P_next diff = fabs((P_next - P).maxCoeff()); P = P_next; - - if (diff < tolerance) { - break; - } } if (num_iteration >= max_num_iteration) { - AWARN << "lqr_not_convergence, last_diff_is:" << diff; + AWARN << "LQR solver cannot converge to a solution, " + "last consecutive result diff. is:" + << diff; } else { - ADEBUG << "Number of iterations until convergence: " << num_iteration - << ", max difference: " << diff; + ADEBUG << "LQR solver converged at iteration: " << num_iteration + << ", max consecutive result diff.: " << diff; } *ptr_K = (R + BT * P * B).inverse() * BT * P * A; } diff --git a/modules/common/math/linear_quadratic_regulator.h b/modules/common/math/linear_quadratic_regulator.h index 5130287d9f2..766a181f499 100644 --- a/modules/common/math/linear_quadratic_regulator.h +++ b/modules/common/math/linear_quadratic_regulator.h @@ -52,4 +52,4 @@ void SolveLQRProblem(const Eigen::MatrixXd &A, const Eigen::MatrixXd &B, } // namespace common } // namespace apollo -#endif /* MODULES_COMMON_MATH_LINEAR_QUADRATIC_REGULATOR_H_ */ +#endif // MODULES_COMMON_MATH_LINEAR_QUADRATIC_REGULATOR_H_ diff --git a/modules/common/math/math_utils.cc b/modules/common/math/math_utils.cc index 68547247424..b233207ac9f 100644 --- a/modules/common/math/math_utils.cc +++ b/modules/common/math/math_utils.cc @@ -24,13 +24,15 @@ namespace apollo { namespace common { namespace math { -double CrossProd(const Vec2d &start_point, const Vec2d &end_point_1, - const Vec2d &end_point_2) { +double Sqr(const double x) { return x * x; } + +double CrossProd(const Vec2d& start_point, const Vec2d& end_point_1, + const Vec2d& end_point_2) { return (end_point_1 - start_point).CrossProd(end_point_2 - start_point); } -double InnerProd(const Vec2d &start_point, const Vec2d &end_point_1, - const Vec2d &end_point_2) { +double InnerProd(const Vec2d& start_point, const Vec2d& end_point_1, + const Vec2d& end_point_2) { return (end_point_1 - start_point).InnerProd(end_point_2 - start_point); } @@ -54,6 +56,14 @@ double NormalizeAngle(const double angle) { return (new_angle < 0 ? new_angle + M_PI * 2.0 : new_angle) - M_PI; } +double AngleDiff(const double from, const double to) { + double angle = std::fmod((to - from) + M_PI, 2.0 * M_PI); + if (angle < 0.0) { + angle += (2.0 * M_PI); + } + return angle - M_PI; +} + int RandomInt(const int s, const int t, unsigned int rand_seed) { if (s >= t) { return s; @@ -77,6 +87,14 @@ int DoubleCompare(const double d1, const double d2, const double epsilon) { return 0; } } +// Gaussian +double Gaussian(const double u, const double std, const double x) { + return (1.0 / std::sqrt(2 * M_PI * std * std)) * + std::exp(-(x - u) * (x - u) / (2 * std * std)); +} + +// Sigmoid +double Sigmoid(const double x) { return 1.0 / (1.0 + std::exp(-x)); } } // namespace math } // namespace common diff --git a/modules/common/math/math_utils.h b/modules/common/math/math_utils.h index a71599c8ced..1555efa3028 100644 --- a/modules/common/math/math_utils.h +++ b/modules/common/math/math_utils.h @@ -35,6 +35,8 @@ namespace apollo { namespace common { namespace math { +double Sqr(const double x); + /** * @brief Cross product between two 2-D vectors from the common start point, * and end at two other points. @@ -101,6 +103,14 @@ double WrapAngle(const double angle); */ double NormalizeAngle(const double angle); +/** + * @brief Calculate the difference between angle from and to + * @param from the start angle + * @param from the end angle + * @return The difference between from and to. The range is between [0, PI). + */ +double AngleDiff(const double from, const double to); + /** * @brief Get a random integer between two integer values by a random seed. * @param s The lower bound of the random integer. @@ -156,8 +166,14 @@ int DoubleCompare( const double d1, const double d2, const double epsilon = std::numeric_limits::epsilon()); +// Gaussian +double Gaussian(const double u, const double std, const double x); + +// Sigmoid +double Sigmoid(const double x); + } // namespace math } // namespace common } // namespace apollo -#endif /* MODULES_COMMON_MATH_UTILS_H_ */ +#endif // MODULES_COMMON_MATH_UTILS_H_ diff --git a/modules/common/math/matrix_operations.h b/modules/common/math/matrix_operations.h index b085d9144d8..565bca1abab 100644 --- a/modules/common/math/matrix_operations.h +++ b/modules/common/math/matrix_operations.h @@ -56,6 +56,22 @@ Eigen::Matrix PseudoInverse(const Eigen::Matrix &m, svd.matrixU().adjoint(); } +/** + * @brief Computes the Moore-Penrose pseudo-inverse of a given matrix, + * rounding all eigenvalues with absolute value bounded by epsilon to zero. + * + * @param m The matrix to be pseudo-inverted + * @param epsilon A small positive real number (optional; default is 1.0e-6). + * + * @return Moore-Penrose pseudo-inverse of the given matrix. + */ +template +Eigen::Matrix PseudoInverse(const Eigen::Matrix& m, + const double epsilon = 1.0e-6) { + Eigen::Matrix t = m * m.transpose(); + return m.transpose() * PseudoInverse(t); +} + /** * @brief Implements Tustin's method for converting transfer functions from * continuous to discrete time domains. diff --git a/modules/common/math/mpc_solver.cc b/modules/common/math/mpc_solver.cc new file mode 100644 index 00000000000..82ed8660504 --- /dev/null +++ b/modules/common/math/mpc_solver.cc @@ -0,0 +1,147 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#include "modules/common/math/mpc_solver.h" + +#include +#include + +#include "modules/common/log.h" +#include "modules/common/math/qp_solver/qp_solver.h" +#include "modules/common/math/qp_solver/active_set_qp_solver.h" + +namespace apollo { +namespace common { +namespace math { + +using Matrix = Eigen::MatrixXd; + +// discrete linear predictive control solver, with control format +// x(i + 1) = A * x(i) + B * u (i) + C +void SolveLinearMPC(const Matrix &matrix_a, const Matrix &matrix_b, + const Matrix &matrix_c, const Matrix &matrix_q, + const Matrix &matrix_r, const Matrix &matrix_lower, + const Matrix &matrix_upper, + const Matrix &matrix_initial_state, + const std::vector &reference, const double eps, + const int max_iter, std::vector *control) { + if (matrix_a.rows() != matrix_a.cols() || + matrix_b.rows() != matrix_a.rows() || + matrix_lower.rows() != matrix_upper.rows()) { + AERROR << "One or more matrices have incompatible dimensions. Aborting."; + return; + } + + const unsigned int horizon = reference.size(); + + // Update augment reference matrix_t + Matrix matrix_t = Matrix::Zero(matrix_b.rows() * horizon, 1); + for (unsigned int j = 0; j < horizon; ++j) { + matrix_t.block(j * reference[0].size(), 0, reference[0].size(), 1) = + reference[j]; + } + + // Update augment control matrix_v + Matrix matrix_v = Matrix::Zero((*control)[0].rows() * horizon, 1); + for (unsigned int j = 0; j < horizon; ++j) { + matrix_v.block(j * (*control)[0].rows(), 0, (*control)[0].rows(), 1) = + (*control)[j]; + } + + std::vector matrix_a_power(horizon); + matrix_a_power[0] = matrix_a; + for (unsigned int i = 1; i < matrix_a_power.size(); ++i) { + matrix_a_power[i] = matrix_a * matrix_a_power[i - 1]; + } + + Matrix matrix_k = Matrix::Zero(matrix_b.rows() * horizon, + matrix_b.cols() * control->size()); + for (unsigned int r = 0; r < horizon; ++r) { + for (unsigned int c = 0; c <= r; ++c) { + matrix_k.block(r * matrix_b.rows(), c * matrix_b.cols(), matrix_b.rows(), + matrix_b.cols()) = matrix_a_power[r - c] * matrix_b; + } + } + + // Initialize matrix_k, matrix_m, matrix_t and matrix_v, matrix_qq, matrix_rr, + // vector of matrix A power + Matrix matrix_m = Matrix::Zero(matrix_b.rows() * horizon, 1); + Matrix matrix_qq = Matrix::Zero(matrix_k.rows(), matrix_k.rows()); + Matrix matrix_rr = Matrix::Zero(matrix_k.cols(), matrix_k.cols()); + Matrix matrix_ll = Matrix::Zero(horizon * matrix_lower.rows(), 1); + Matrix matrix_uu = Matrix::Zero(horizon * matrix_upper.rows(), 1); + + // Compute matrix_m + matrix_m.block(0, 0, matrix_a.rows(), 1) = + matrix_a * matrix_initial_state + matrix_c; + for (unsigned int i = 1; i < horizon; ++i) { + matrix_m.block(i * matrix_a.rows(), 0, matrix_a.rows(), 1) = + matrix_a * + matrix_m.block((i - 1) * matrix_a.rows(), 0, matrix_a.rows(), 1) + + matrix_c; + } + + // Compute matrix_ll, matrix_uu, matrix_qq, matrix_rr + for (unsigned int i = 0; i < horizon; ++i) { + matrix_ll.block(i * (*control)[0].rows(), 0, (*control)[0].rows(), 1) = + matrix_lower; + matrix_uu.block(i * (*control)[0].rows(), 0, (*control)[0].rows(), 1) = + matrix_upper; + matrix_qq.block(i * matrix_q.rows(), i * matrix_q.rows(), matrix_q.rows(), + matrix_q.rows()) = matrix_q; + matrix_rr.block(i * matrix_r.rows(), i * matrix_r.rows(), matrix_r.rows(), + matrix_r.rows()) = matrix_r; + } + + // Update matrix_m1, matrix_m2, convert MPC problem to QP problem done + Matrix matrix_m1 = matrix_k.transpose() * matrix_qq * matrix_k + matrix_rr; + Matrix matrix_m2 = matrix_k.transpose() * matrix_qq * (matrix_m - matrix_t); + + // Method 1: QPOASES + Matrix matrix_inequality_constrain_ll = + -Matrix::Identity(matrix_ll.rows(), matrix_ll.rows()); + Matrix matrix_inequality_constrain_uu = + Matrix::Identity(matrix_uu.rows(), matrix_uu.rows()); + Matrix matrix_inequality_constrain = Matrix::Zero( + matrix_ll.rows() + matrix_uu.rows(), matrix_ll.rows()); + matrix_inequality_constrain << -matrix_inequality_constrain_ll, + -matrix_inequality_constrain_uu; + Matrix matrix_inequality_boundary = Matrix::Zero( + matrix_ll.rows() + matrix_uu.rows(), matrix_ll.cols()); + matrix_inequality_boundary << matrix_ll, -matrix_uu; + Matrix matrix_equality_constrain = Matrix::Zero( + matrix_ll.rows() + matrix_uu.rows(), matrix_ll.rows()); + Matrix matrix_equality_boundary = Matrix::Zero( + matrix_ll.rows() + matrix_uu.rows(), matrix_ll.cols()); + + std::unique_ptr qp_solver(new ActiveSetQpSolver( + matrix_m1, matrix_m2, matrix_inequality_constrain, + matrix_inequality_boundary, matrix_equality_constrain, + matrix_equality_boundary)); + + auto result = qp_solver->Solve(); + if (!result) { + AWARN << "Linear MPC solver failed"; + } + matrix_v = qp_solver->params(); + + for (unsigned int i = 0; i < horizon; ++i) { + (*control)[i] = + matrix_v.block(i * (*control)[0].rows(), 0, (*control)[0].rows(), 1); + } +} + +} // namespace math +} // namespace common +} // namespace apollo diff --git a/modules/common/math/mpc_solver.h b/modules/common/math/mpc_solver.h new file mode 100644 index 00000000000..d0c3c2d7979 --- /dev/null +++ b/modules/common/math/mpc_solver.h @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +/** + * @file mpc_solver.h + * @brief Convert mpc problem to qp based problem and solve. + */ + +#ifndef MODULES_CONTROL_COMMON_MPC_SOLVER_H_ +#define MODULES_CONTROL_COMMON_MPC_SOLVER_H_ + +#include + +#include "Eigen/Core" + +/** + * @namespace apollo::common::math + * @brief apollo::common::math + */ + +namespace apollo { +namespace common { +namespace math { +/** + * @brief Solver for discrete-time model predictive control problem. + * @param matrix_a The system dynamic matrix + * @param matrix_b The control matrix + * @param matrix_c The disturbance matrix + * @param matrix_q The cost matrix for control state + * @param matrix_lower The lower bound control constrain matrix + * @param matrix_upper The upper bound control constrain matrix + * @param matrix_upper The upper bound control constrain matrix + * @param matrix_initial_state The intial state matrix + * @param reference The control reference vector with respect to time + * @param eps The control convergence tolerance + * @param max_iter The maximum iterations for solving ARE + * @param control The feedback control matrix (pointer) + */ +void SolveLinearMPC(const Eigen::MatrixXd &matrix_a, + const Eigen::MatrixXd &matrix_b, + const Eigen::MatrixXd &matrix_c, + const Eigen::MatrixXd &matrix_q, + const Eigen::MatrixXd &matrix_r, + const Eigen::MatrixXd &matrix_lower, + const Eigen::MatrixXd &matrix_upper, + const Eigen::MatrixXd &matrix_initial_state, + const std::vector &reference, + const double eps, + const int max_iter, + std::vector *control); + +} // namespace math +} // namespace common +} // namespace apollo + +#endif // MODULES_CONTROL_COMMON_MPC_SOLVER_H_ diff --git a/modules/common/math/mpc_solver_test.cc b/modules/common/math/mpc_solver_test.cc new file mode 100644 index 00000000000..d552e579674 --- /dev/null +++ b/modules/common/math/mpc_solver_test.cc @@ -0,0 +1,147 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/common/math/mpc_solver.h" + +#include "gtest/gtest.h" + +namespace apollo { +namespace common { +namespace math { + +TEST(MPCSolverTest, MPC) { + const int STATES = 4; + const int CONTROLS = 1; + const int HORIZON = 10; + const double EPS = 0.01; + const int MAX_ITER = 100; + + Eigen::MatrixXd A(STATES, STATES); + A << 1, 0, 1, 0, + 0, 1, 0, 1, + 0, 0, 1, 0, + 0, 0, 0, 1; + + Eigen::MatrixXd B(STATES, CONTROLS); + B << 0, + 0, + 1, + 0; + + Eigen::MatrixXd C(STATES, 1); + C << 0, + 0, + 0, + 0.1; + + Eigen::MatrixXd Q(STATES, STATES); + Q << 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0; + + Eigen::MatrixXd R(CONTROLS, 1); + R << 1; + + Eigen::MatrixXd lower_bound(CONTROLS, 1); + lower_bound << -10; + + Eigen::MatrixXd upper_bound(CONTROLS, 1); + upper_bound << 10; + + Eigen::MatrixXd initial_state(STATES, 1); + initial_state << 0, + 0, + 0, + 0; + + Eigen::MatrixXd reference_state(STATES, 1); + reference_state << 200, + 200, + 0, + 0; + + std::vector reference(HORIZON, reference_state); + + Eigen::MatrixXd control_matrix(CONTROLS, 1); + control_matrix << 0; + + std::vector control(HORIZON, control_matrix); + for (unsigned int i = 0; i < control.size(); ++i) { + for (unsigned int i = 1; i < control.size(); ++i) { + control[i-1] = control[i]; + } + SolveLinearMPC(A, B, C, Q, R, lower_bound, upper_bound, initial_state, + reference, EPS, MAX_ITER, &control); + EXPECT_FLOAT_EQ(upper_bound(0), control[0](0)); + } + + Eigen::MatrixXd initial_state1(STATES, 1); + initial_state1 << 30, + 30, + 0, + 0; + + Eigen::MatrixXd reference_state1(STATES, 1); + reference_state1 << 0, + 0, + 0, + 0; + + std::vector reference1(HORIZON, reference_state1); + + control_matrix << 0; + std::vector control1(HORIZON, control_matrix); + for (unsigned int i = 0; i < control1.size(); ++i) { + for (unsigned int i = 1; i < control.size(); ++i) { + control1[i-1] = control1[i]; + } + SolveLinearMPC(A, B, C, Q, R, lower_bound, upper_bound, initial_state1, + reference1, EPS, MAX_ITER, &control1); + EXPECT_FLOAT_EQ(lower_bound(0), control1[0](0)); + } + + Eigen::MatrixXd initial_state2(STATES, 1); + initial_state2 << 30, + 30, + 0, + 0; + + Eigen::MatrixXd reference_state2(STATES, 1); + reference_state2 << 30, + 30, + 0, + 0; + + std::vector reference2(HORIZON, reference_state2); + + control_matrix << 0; + std::vector control2(HORIZON, control_matrix); + + for (unsigned int i = 0; i < control2.size(); ++i) { + for (unsigned int i = 1; i < control.size(); ++i) { + control2[i-1] = control2[i]; + } + SolveLinearMPC(A, B, C, Q, R, lower_bound, upper_bound, initial_state2, + reference2, EPS, MAX_ITER, &control2); + EXPECT_NEAR(0.0, control2[0](0), 1e-7); + } +} +} // namespace math +} // namespace common +} // namespace apollo + + diff --git a/modules/common/math/polygon2d.cc b/modules/common/math/polygon2d.cc index 779c0a9e017..eeb8723a431 100644 --- a/modules/common/math/polygon2d.cc +++ b/modules/common/math/polygon2d.cc @@ -19,12 +19,11 @@ #include #include #include -#include #include #include "modules/common/log.h" - #include "modules/common/math/math_utils.h" +#include "modules/common/util/string_util.h" namespace apollo { namespace common { @@ -579,15 +578,10 @@ Polygon2d Polygon2d::ExpandByDistance(const double distance) const { } std::string Polygon2d::DebugString() const { - std::ostringstream sout; - sout << "polygon2d ( num_points = " << num_points_ << " points = ("; - for (const auto &pt : points_) { - sout << " " << pt.DebugString(); - } - sout << " ) " << (is_convex_ ? "convex" : "non-convex") - << " area = " << area_ << " )"; - sout.flush(); - return sout.str(); + return util::StrCat( + "polygon2d ( num_points = ", num_points_, + " points = (", util::PrintDebugStringIter(points_), " ) ", + is_convex_ ? "convex" : "non-convex", " area = ", area_, " )"); } } // namespace math diff --git a/modules/common/math/polygon2d.h b/modules/common/math/polygon2d.h index 6368fa2f146..2a90f54fbf6 100644 --- a/modules/common/math/polygon2d.h +++ b/modules/common/math/polygon2d.h @@ -289,7 +289,7 @@ class Polygon2d { */ std::string DebugString() const; - private: + protected: void BuildFromPoints(); int Next(int at) const; int Prev(int at) const; diff --git a/modules/common/math/polygon2d_test.cc b/modules/common/math/polygon2d_test.cc index a2e08670da9..24813729898 100644 --- a/modules/common/math/polygon2d_test.cc +++ b/modules/common/math/polygon2d_test.cc @@ -54,7 +54,7 @@ bool ProjectByXSlow(const std::vector &points, double x, TEST(Polygon2dTest, polygon_IsPointIn) { const Polygon2d poly1(Box2d::CreateAABox({0, 0}, {1, 1})); EXPECT_EQ(poly1.DebugString(), - "polygon2d ( num_points = 4 points = ( vec2d ( x = 1 y = 0 ) " + "polygon2d ( num_points = 4 points = (vec2d ( x = 1 y = 0 ) " "vec2d ( x = 1 y = 1 ) vec2d ( x = 0 y = 1 ) vec2d ( x = 0 y = " "0 ) ) convex area = 1 )"); EXPECT_TRUE(poly1.IsPointIn({0.5, 0.5})); diff --git a/modules/common/math/qp_solver/BUILD b/modules/common/math/qp_solver/BUILD new file mode 100644 index 00000000000..8fde89af0a7 --- /dev/null +++ b/modules/common/math/qp_solver/BUILD @@ -0,0 +1,48 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "qp_solver_gflags", + srcs = [ + "qp_solver_gflags.cc", + ], + hdrs = [ + "qp_solver_gflags.h", + ], + deps = [ + "//external:gflags", + ], +) + +cc_library( + name = "qp_solver", + srcs = [ + "qp_solver.cc", + ], + hdrs = [ + "qp_solver.h", + ], + deps = [ + "@eigen//:eigen", + ], +) + +cc_library( + name = "active_set_qp_solver", + srcs = [ + "active_set_qp_solver.cc", + ], + hdrs = [ + "active_set_qp_solver.h", + ], + deps = [ + ":qp_solver", + "//modules/common:log", + "//modules/common/math/qp_solver:qp_solver_gflags", + "@eigen//:eigen", + "@qp_oases//:qp_oases", + ], +) + +cpplint() diff --git a/modules/common/math/qp_solver/active_set_qp_solver.cc b/modules/common/math/qp_solver/active_set_qp_solver.cc new file mode 100644 index 00000000000..2ae2f594b64 --- /dev/null +++ b/modules/common/math/qp_solver/active_set_qp_solver.cc @@ -0,0 +1,202 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: active_set_qp_solver.cc + **/ +#include "modules/common/math/qp_solver/active_set_qp_solver.h" + +#include +#include +#include + +#include "modules/common/log.h" +#include "modules/common/math/qp_solver/qp_solver_gflags.h" + +namespace apollo { +namespace common { +namespace math { + +ActiveSetQpSolver::ActiveSetQpSolver( + const Eigen::MatrixXd& kernel_matrix, const Eigen::MatrixXd& offset, + const Eigen::MatrixXd& affine_inequality_matrix, + const Eigen::MatrixXd& affine_inequality_boundary, + const Eigen::MatrixXd& affine_equality_matrix, + const Eigen::MatrixXd& affine_equality_boundary) + : QpSolver(kernel_matrix, offset, affine_inequality_matrix, + affine_inequality_boundary, affine_equality_matrix, + affine_equality_boundary), + num_constraint_(affine_equality_matrix_.rows() + + affine_inequality_matrix_.rows()), + num_param_(kernel_matrix.rows()), + qp_eps_num_(FLAGS_default_active_set_eps_num), + qp_eps_den_(FLAGS_default_active_set_eps_den), + qp_eps_iter_ref_(FLAGS_default_active_set_eps_iter_ref), + debug_info_(FLAGS_default_enable_active_set_debug_info) {} + +bool ActiveSetQpSolver::Solve() { + ::qpOASES::QProblem qp_problem(num_param_, num_constraint_); + ::qpOASES::Options my_options; + my_options.epsNum = qp_eps_num_; + my_options.epsDen = qp_eps_den_; + my_options.epsIterRef = qp_eps_iter_ref_; + qp_problem.setOptions(my_options); + if (!debug_info_) { + qp_problem.setPrintLevel(qpOASES::PL_NONE); + } + // definition of qpOASESproblem + double h_matrix[kernel_matrix_.rows() * kernel_matrix_.cols()]; // NOLINT + double g_matrix[offset_.rows()]; // NOLINT + int index = 0; + + for (int r = 0; r < kernel_matrix_.rows(); ++r) { + g_matrix[r] = offset_(r, 0); + + for (int c = 0; c < kernel_matrix_.cols(); ++c) { + h_matrix[index++] = kernel_matrix_(r, c); + } + } + + // search space lower bound and uppper bound + double lower_bound[num_param_]; // NOLINT + double upper_bound[num_param_]; // NOLINT + + // TODO(fanhaoyang): Haoyang Fan change this to a configurable version + for (int i = 0; i < num_param_; ++i) { + lower_bound[i] = l_lower_bound_; + upper_bound[i] = l_upper_bound_; + } + + // constraint matrix construction + double affine_constraint_matrix[num_param_ * num_constraint_]; // NOLINT + double constraint_lower_bound[num_constraint_]; // NOLINT + double constraint_upper_bound[num_constraint_]; // NOLINT + index = 0; + + for (int r = 0; r < affine_equality_matrix_.rows(); ++r) { + // TODO(fanhaoyang): change to a configurable version + constraint_lower_bound[r] = affine_equality_boundary_(r, 0); + constraint_upper_bound[r] = affine_equality_boundary_(r, 0); + + for (int c = 0; c < num_param_; ++c) { + affine_constraint_matrix[index++] = affine_equality_matrix_(r, c); + } + } + + for (int r = 0; r < affine_inequality_matrix_.rows(); ++r) { + constraint_lower_bound[r + affine_equality_boundary_.rows()] = + affine_inequality_boundary_(r, 0); + constraint_upper_bound[r + affine_equality_boundary_.rows()] = + constraint_upper_bound_; + + // TODO(fanhaoyang): change to a configurable version + for (int c = 0; c < num_param_; ++c) { + affine_constraint_matrix[index++] = affine_inequality_matrix_(r, c); + } + } + + // initialize problem + int max_iter = std::max(max_iteration_, num_constraint_); + + auto ret = qp_problem.init(h_matrix, g_matrix, affine_constraint_matrix, + lower_bound, upper_bound, constraint_lower_bound, + constraint_upper_bound, max_iter); + if (ret != qpOASES::SUCCESSFUL_RETURN) { + if (ret == qpOASES::RET_MAX_NWSR_REACHED) { + AERROR << "qpOASES solver failed due to reached max iteration"; + } else { + AERROR << "qpOASES solver failed due to infeasibility or other internal " + "reasons"; + } + return false; + } + + double result[num_param_]; // NOLINT + + qp_problem.getPrimalSolution(result); + + params_ = Eigen::MatrixXd::Zero(num_param_, 1); + + if (qp_problem.isSolved() == qpOASES::BT_TRUE) { + for (int i = 0; i < num_param_; ++i) { + params_(i, 0) = result[i]; + } + + return true; + } + + return false; +} + +void ActiveSetQpSolver::set_qp_eps_num(const double eps) { qp_eps_num_ = eps; } + +void ActiveSetQpSolver::set_qp_eps_den(const double eps) { qp_eps_den_ = eps; } + +void ActiveSetQpSolver::set_qp_eps_iter_ref(const double eps) { + qp_eps_iter_ref_ = eps; +} + +void ActiveSetQpSolver::set_debug_info(const bool enable) { + debug_info_ = enable; +} + +void ActiveSetQpSolver::set_l_lower_bound(const double l_lower_bound) { + l_lower_bound_ = l_lower_bound; +} + +void ActiveSetQpSolver::set_l_upper_bound(const double l_upper_bound) { + l_upper_bound_ = l_upper_bound; +} + +void ActiveSetQpSolver::set_constraint_upper_bound( + const double la_upper_bound) { + constraint_upper_bound_ = la_upper_bound; +} + +void ActiveSetQpSolver::set_max_iteration(const int max_iter) { + max_iteration_ = max_iter; +} + +double ActiveSetQpSolver::qp_eps_num() const { return qp_eps_num_; } + +double ActiveSetQpSolver::qp_eps_den() const { return qp_eps_den_; } + +double ActiveSetQpSolver::qp_eps_iter_ref() const { return qp_eps_iter_ref_; } + +bool ActiveSetQpSolver::debug_info() const { return debug_info_; } + +double ActiveSetQpSolver::l_lower_bound() const { return l_lower_bound_; } + +double ActiveSetQpSolver::l_upper_bound() const { return l_upper_bound_; } + +double ActiveSetQpSolver::constraint_upper_bound() const { + return constraint_upper_bound_; +} + +int ActiveSetQpSolver::max_iteration() const { return max_iteration_; } + +// pure virtual +bool ActiveSetQpSolver::sanity_check() { + return kernel_matrix_.rows() == kernel_matrix_.cols() && + kernel_matrix_.rows() == affine_inequality_matrix_.cols() && + kernel_matrix_.rows() == affine_equality_matrix_.cols() && + affine_equality_matrix_.rows() == affine_equality_boundary_.rows() && + affine_inequality_matrix_.rows() == affine_inequality_boundary_.rows(); +} + +} // namespace math +} // namespace common +} // namespace apollo diff --git a/modules/common/math/qp_solver/active_set_qp_solver.h b/modules/common/math/qp_solver/active_set_qp_solver.h new file mode 100644 index 00000000000..6f8a50ae88f --- /dev/null +++ b/modules/common/math/qp_solver/active_set_qp_solver.h @@ -0,0 +1,92 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: active_set_qp_solver.h + * @brief: wrapper class for active set method in qpOases + **/ + +#ifndef MODULES_COMMON_MATH_QP_SOLVER_ACTIVE_SET_QP_SOLVER_H_ +#define MODULES_COMMON_MATH_QP_SOLVER_ACTIVE_SET_QP_SOLVER_H_ + +#include "qpOASES/include/qpOASES.hpp" + +#include "modules/common/math/qp_solver/qp_solver.h" + +namespace apollo { +namespace common { +namespace math { + +class ActiveSetQpSolver : public QpSolver { + public: + ActiveSetQpSolver(const Eigen::MatrixXd& kernel_matrix, + const Eigen::MatrixXd& offset, + const Eigen::MatrixXd& affine_inequality_matrix, + const Eigen::MatrixXd& affine_inequality_boundary, + const Eigen::MatrixXd& affine_equality_matrix, + const Eigen::MatrixXd& affine_equality_boundary); + virtual ~ActiveSetQpSolver() = default; + + bool Solve() override; + + void set_qp_eps_num(const double eps); + void set_qp_eps_den(const double eps); + void set_qp_eps_iter_ref(const double eps); + void set_debug_info(const bool enable); + void set_max_iteration(const int max_iter); + + void set_l_lower_bound(const double l_lower_bound); + void set_l_upper_bound(const double l_upper_bound); + void set_constraint_upper_bound(const double la_upper_bound); + + double qp_eps_num() const; + double qp_eps_den() const; + double qp_eps_iter_ref() const; + bool debug_info() const; + int max_iteration() const; + + double l_lower_bound() const; + double l_upper_bound() const; + double constraint_upper_bound() const; + + private: + bool sanity_check() override; + + private: + // equality constriant + inequality constraint + int num_constraint_ = 0; + // number of parameters + int num_param_ = 0; + + double qp_eps_num_ = 0.0; + double qp_eps_den_ = 0.0; + double qp_eps_iter_ref_ = 0.0; + bool debug_info_ = false; + + // parameter search bound + double l_lower_bound_ = -1e10; + double l_upper_bound_ = 1e10; + + // constraint search upper bound + double constraint_upper_bound_ = 1e10; + int max_iteration_ = 1000; +}; + +} // namespace math +} // namespace common +} // namespace apollo + +#endif // MODULES_COMMON_MATH_QP_SOLVER_ACTIVE_SET_QP_SOLVER_H_ diff --git a/modules/common/math/qp_solver/qp_solver.cc b/modules/common/math/qp_solver/qp_solver.cc new file mode 100644 index 00000000000..f3de962ed6a --- /dev/null +++ b/modules/common/math/qp_solver/qp_solver.cc @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: qp_solver.cc + **/ +#include "modules/common/math/qp_solver/qp_solver.h" + +namespace apollo { +namespace common { +namespace math { + +QpSolver::QpSolver(const Eigen::MatrixXd& kernel_matrix, + const Eigen::MatrixXd& offset, + const Eigen::MatrixXd& affine_inequality_matrix, + const Eigen::MatrixXd& affine_inequality_boundary, + const Eigen::MatrixXd& affine_equality_matrix, + const Eigen::MatrixXd& affine_equality_boundary) + : kernel_matrix_(kernel_matrix), + offset_(offset), + affine_inequality_matrix_(affine_inequality_matrix), + affine_inequality_boundary_(affine_inequality_boundary), + affine_equality_matrix_(affine_equality_matrix), + affine_equality_boundary_(affine_equality_boundary) {} + +const Eigen::MatrixXd& QpSolver::params() const { return params_; } + +const Eigen::MatrixXd& QpSolver::kernel_matrix() const { + return kernel_matrix_; +} + +const Eigen::MatrixXd& QpSolver::offset() const { return offset_; } + +const Eigen::MatrixXd& QpSolver::affine_equality_matrix() const { + return affine_equality_matrix_; +} + +const Eigen::MatrixXd& QpSolver::affine_equality_boundary() const { + return affine_equality_boundary_; +} + +const Eigen::MatrixXd& QpSolver::affine_inequality_matrix() const { + return affine_inequality_matrix_; +} + +const Eigen::MatrixXd& QpSolver::affine_inequality_boundary() const { + return affine_inequality_boundary_; +} + +} // namespace math +} // namespace common +} // namespace apollo diff --git a/modules/common/math/qp_solver/qp_solver.h b/modules/common/math/qp_solver/qp_solver.h new file mode 100644 index 00000000000..0d74484e765 --- /dev/null +++ b/modules/common/math/qp_solver/qp_solver.h @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: qp_solver.h + * @brief: quadratic programming base class + * + * min_x : q(x) = 0.5 * x^T * Q * x + x^T c + * with respect to: A * x = b (equality constraint) + * C * x >= d (inequality constraint) + **/ + +#ifndef MODULES_COMMON_MATH_QP_SOLVER_QP_SOLVER_H_ +#define MODULES_COMMON_MATH_QP_SOLVER_QP_SOLVER_H_ + +#include "Eigen/Core" +#include "Eigen/LU" + +namespace apollo { +namespace common { +namespace math { + +class QpSolver { + public: + QpSolver(const Eigen::MatrixXd& kernel_matrix, const Eigen::MatrixXd& offset, + const Eigen::MatrixXd& affine_inequality_matrix, + const Eigen::MatrixXd& affine_inequality_boundary, + const Eigen::MatrixXd& affine_equality_matrix, + const Eigen::MatrixXd& affine_equality_boundary); + virtual ~QpSolver() = default; + + virtual bool Solve() = 0; + const Eigen::MatrixXd& params() const; + const Eigen::MatrixXd& kernel_matrix() const; + const Eigen::MatrixXd& offset() const; + const Eigen::MatrixXd& affine_equality_matrix() const; + const Eigen::MatrixXd& affine_equality_boundary() const; + const Eigen::MatrixXd& affine_inequality_matrix() const; + const Eigen::MatrixXd& affine_inequality_boundary() const; + + protected: + virtual bool sanity_check() = 0; + Eigen::MatrixXd params_; + Eigen::MatrixXd kernel_matrix_; + Eigen::MatrixXd offset_; + Eigen::MatrixXd affine_inequality_matrix_; + Eigen::MatrixXd affine_inequality_boundary_; + Eigen::MatrixXd affine_equality_matrix_; + Eigen::MatrixXd affine_equality_boundary_; +}; + +} // namespace math +} // namespace common +} // namespace apollo + +#endif // MODULES_COMMON_MATH_QP_SOLVER_QP_SOLVER_H_ diff --git a/modules/common/math/qp_solver/qp_solver_gflags.cc b/modules/common/math/qp_solver/qp_solver_gflags.cc new file mode 100644 index 00000000000..9ccdaf0d936 --- /dev/null +++ b/modules/common/math/qp_solver/qp_solver_gflags.cc @@ -0,0 +1,27 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/common/math/qp_solver/qp_solver_gflags.h" + +// math : active set solver +DEFINE_double(default_active_set_eps_num, -1e-7, + "qpOases wrapper error control numerator"); +DEFINE_double(default_active_set_eps_den, 1e-7, + "qpOases wrapper error control numerator"); +DEFINE_double(default_active_set_eps_iter_ref, 1e-7, + "qpOases wrapper error control numerator"); +DEFINE_bool(default_enable_active_set_debug_info, false, + "Enable print information"); diff --git a/modules/common/math/qp_solver/qp_solver_gflags.h b/modules/common/math/qp_solver/qp_solver_gflags.h new file mode 100644 index 00000000000..41e75b07ada --- /dev/null +++ b/modules/common/math/qp_solver/qp_solver_gflags.h @@ -0,0 +1,28 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PLANNING_MATH_QP_SOLVER_QP_SOLVER_GFLAGS_H_ +#define MODULES_PLANNING_MATH_QP_SOLVER_QP_SOLVER_GFLAGS_H_ + +#include "gflags/gflags.h" + +// math : active set solver +DECLARE_double(default_active_set_eps_num); +DECLARE_double(default_active_set_eps_den); +DECLARE_double(default_active_set_eps_iter_ref); +DECLARE_bool(default_enable_active_set_debug_info); + +#endif /* MODULES_PLANNING_MATH_QP_SOLVER_QP_SOLVER_GFLAGS_H_ */ diff --git a/modules/common/math/quaternion.h b/modules/common/math/quaternion.h index 277f120a68a..3a090957296 100644 --- a/modules/common/math/quaternion.h +++ b/modules/common/math/quaternion.h @@ -108,6 +108,13 @@ inline Eigen::Vector3d QuaternionRotate(const Quaternion &orientation, return quaternion.toRotationMatrix() * original; } +inline Eigen::Vector3d InverseQuaternionRotate(const Quaternion &orientation, + const Eigen::Vector3d &rotated) { + Eigen::Quaternion quaternion(orientation.qw(), orientation.qx(), + orientation.qy(), orientation.qz()); + return quaternion.toRotationMatrix().inverse() * rotated; +} + } // namespace math } // namespace common } // namespace apollo diff --git a/modules/common/math/quaternion_test.cc b/modules/common/math/quaternion_test.cc index 6d2b340387b..2e015eca0d6 100644 --- a/modules/common/math/quaternion_test.cc +++ b/modules/common/math/quaternion_test.cc @@ -46,6 +46,36 @@ TEST(QuaternionTest, QuaternionToHeading) { } } +TEST(QuaternionTest, QuaternionRotate) { + apollo::common::Quaternion q; + q.set_qx(0.016590540978116377); + q.set_qy(0.012968083311103572); + q.set_qz(-0.99256254167039326); + q.set_qw(-0.1199007240933047); + + Eigen::Vector3d original(0.18112868882363914, 0.38614886414425986, + -0.15861744649897938); + + auto rotated = QuaternionRotate(q, original); + EXPECT_NEAR(rotated[0], -0.26184808017295008, 1e-9); + EXPECT_NEAR(rotated[1], -0.32827419468368224, 1e-9); + EXPECT_NEAR(rotated[2], -0.17535585973456849, 1e-9); +} + +TEST(QuaternionTest, InverseQuaternionRotate) { + apollo::common::Quaternion q; + q.set_qx(0.016590540978116377); + q.set_qy(0.012968083311103572); + q.set_qz(-0.99256254167039326); + q.set_qw(-0.1199007240933047); + Eigen::Vector3d rotated(-0.26184808017295008, -0.32827419468368224, + -0.17535585973456849); + auto original = InverseQuaternionRotate(q, rotated); + EXPECT_NEAR(original[0], 0.18112868882363914, 1e-9); + EXPECT_NEAR(original[1], 0.38614886414425986, 1e-9); + EXPECT_NEAR(original[2], -0.15861744649897938, 1e-9); +} + } // namespace math } // namespace common } // namespace apollo diff --git a/modules/common/math/vec2d.cc b/modules/common/math/vec2d.cc index 9f71b863366..fe1e05b361a 100644 --- a/modules/common/math/vec2d.cc +++ b/modules/common/math/vec2d.cc @@ -17,8 +17,9 @@ #include "modules/common/math/vec2d.h" #include -#include + #include "modules/common/log.h" +#include "modules/common/util/string_util.h" namespace apollo { namespace common { @@ -60,6 +61,11 @@ double Vec2d::InnerProd(const Vec2d &other) const { return x_ * other.x() + y_ * other.y(); } +Vec2d Vec2d::rotate(const double angle) const { + return Vec2d(x_ * cos(angle) - y_ * sin(angle), + x_ * sin(angle) + y_ * cos(angle)); +} + Vec2d Vec2d::operator+(const Vec2d &other) const { return Vec2d(x_ + other.x(), y_ + other.y()); } @@ -110,10 +116,7 @@ bool Vec2d::operator==(const Vec2d &other) const { Vec2d operator*(const double ratio, const Vec2d &vec) { return vec * ratio; } std::string Vec2d::DebugString() const { - std::ostringstream sout; - sout << "vec2d ( x = " << x_ << " y = " << y_ << " )"; - sout.flush(); - return sout.str(); + return util::StrCat("vec2d ( x = ", x_, " y = ", y_, " )"); } } // namespace math diff --git a/modules/common/math/vec2d.h b/modules/common/math/vec2d.h index 0a22eaafe68..bc72dafbfe9 100644 --- a/modules/common/math/vec2d.h +++ b/modules/common/math/vec2d.h @@ -38,8 +38,7 @@ constexpr double kMathEpsilon = 1e-10; /** * @class Vec2d * - * @brief Implements a class of 2-dimensional vectors, - * similar to Eigen::Vector2d. + * @brief Implements a class of 2-dimensional vectors. */ class Vec2d { public: @@ -88,6 +87,9 @@ class Vec2d { //! Returns the inner product between these two Vec2d. double InnerProd(const Vec2d &other) const; + //! rotate the vector by angle. + Vec2d rotate(const double angle) const; + //! Sums two Vec2d Vec2d operator+(const Vec2d &other) const; diff --git a/modules/common/math/vec2d_test.cc b/modules/common/math/vec2d_test.cc index 08f7eb3c8b8..f1014c5e4cb 100644 --- a/modules/common/math/vec2d_test.cc +++ b/modules/common/math/vec2d_test.cc @@ -64,6 +64,22 @@ TEST(Vec2dTest, NomralCases) { EXPECT_NEAR(unit_pt.Angle(), M_PI_4, 1e-5); } +TEST(Vec2dTest, rotate) { + Vec2d pt(4, 0); + auto p1 = pt.rotate(M_PI / 2.0); + EXPECT_NEAR(p1.x(), 0.0, 1e-5); + EXPECT_NEAR(p1.y(), 4.0, 1e-5); + auto p2 = pt.rotate(M_PI); + EXPECT_NEAR(p2.x(), -4.0, 1e-5); + EXPECT_NEAR(p2.y(), 0.0, 1e-5); + auto p3 = pt.rotate(-M_PI / 2.0); + EXPECT_NEAR(p3.x(), 0.0, 1e-5); + EXPECT_NEAR(p3.y(), -4.0, 1e-5); + auto p4 = pt.rotate(-M_PI); + EXPECT_NEAR(p4.x(), -4.0, 1e-5); + EXPECT_NEAR(p4.y(), 0.0, 1e-5); +} + } // namespace math } // namespace common } // namespace apollo diff --git a/modules/common/monitor/monitor.cc b/modules/common/monitor/monitor.cc index 81e374d4c7c..dfa23efa7ea 100644 --- a/modules/common/monitor/monitor.cc +++ b/modules/common/monitor/monitor.cc @@ -44,7 +44,7 @@ void Monitor::Publish(const std::vector &messages) const { } void Monitor::DoPublish(MonitorMessage *message) const { - AdapterManager::FillMonitorHeader("monitor", message->mutable_header()); + AdapterManager::FillMonitorHeader("monitor", message); AdapterManager::PublishMonitor(*message); } diff --git a/modules/common/monitor/monitor_buffer_test.cc b/modules/common/monitor/monitor_buffer_test.cc index 222872cb1dc..f3c7e1562d0 100644 --- a/modules/common/monitor/monitor_buffer_test.cc +++ b/modules/common/monitor/monitor_buffer_test.cc @@ -13,7 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. *****************************************************************************/ + #include "modules/common/monitor/monitor_buffer.h" + #include #include "gtest/gtest.h" #include "modules/common/monitor/monitor.h" @@ -42,7 +44,7 @@ TEST_F(MonitorBufferTest, PrintLog) { testing::internal::CaptureStderr(); buffer_->PrintLog(); EXPECT_NE(std::string::npos, - testing::internal::GetCapturedStderr().find("[INFO] INFO_msg")); + testing::internal::GetCapturedStderr().find("INFO_msg")); } { buffer_->ERROR("ERROR_msg"); @@ -111,9 +113,9 @@ TEST_F(MonitorBufferTest, Operator) { buffer_->INFO() << 3 << "pieces"; EXPECT_EQ(MonitorMessageItem::INFO, buffer_->level_); ASSERT_EQ(2, buffer_->monitor_msg_items_.size()); - item = buffer_->monitor_msg_items_.back(); - EXPECT_EQ(MonitorMessageItem::INFO, item.first); - EXPECT_EQ("3pieces", item.second); + auto item2 = buffer_->monitor_msg_items_.back(); + EXPECT_EQ(MonitorMessageItem::INFO, item2.first); + EXPECT_EQ("3pieces", item2.second); const char *fake_input = nullptr; EXPECT_TRUE(&(buffer_->INFO() << fake_input) == buffer_); diff --git a/modules/common/monitor/proto/BUILD b/modules/common/monitor/proto/BUILD index 15097b37352..0ffe3f932c2 100644 --- a/modules/common/monitor/proto/BUILD +++ b/modules/common/monitor/proto/BUILD @@ -1,24 +1,19 @@ package(default_visibility = ["//visibility:public"]) -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile") - cc_proto_library( name = "monitor_proto", - protos = [ - "monitor.proto", - ], deps = [ - "//modules/common/proto:common_proto", + ":monitor_proto_lib", ], ) -py_proto_compile( - name = "monitor_proto_pylib", - protos = [ +proto_library( + name = "monitor_proto_lib", + srcs = [ "monitor.proto", ], deps = [ - "//modules/common/proto:common_proto_pylib", + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:header_proto_lib", ], ) diff --git a/modules/common/monitor/proto/monitor.proto b/modules/common/monitor/proto/monitor.proto index 911edf117f9..fc0f7912345 100644 --- a/modules/common/monitor/proto/monitor.proto +++ b/modules/common/monitor/proto/monitor.proto @@ -15,6 +15,7 @@ message MonitorMessageItem { PREDICTION = 7; SIMULATOR = 8; HWSYS = 9; + ROUTING = 10; } optional MessageSource source = 1 [ default = UNKNOWN ]; diff --git a/modules/common/proto/BUILD b/modules/common/proto/BUILD index 8c5d3ae874d..8ba5634ffeb 100644 --- a/modules/common/proto/BUILD +++ b/modules/common/proto/BUILD @@ -1,59 +1,96 @@ package(default_visibility = ["//visibility:public"]) -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile") - cc_proto_library( name = "error_code_proto", - protos = [ + deps = [ + ":error_code_proto_lib", + ], +) + +proto_library( + name = "error_code_proto_lib", + srcs = [ "error_code.proto", ], ) cc_proto_library( name = "header_proto", - protos = [ + deps = [ + ":header_proto_lib", + ], +) + +proto_library( + name = "header_proto_lib", + srcs = [ "header.proto", ], deps = [ - ":error_code_proto", + ":error_code_proto_lib", + ], +) + +cc_proto_library( + name = "vehicle_signal_proto", + deps = [ + ":vehicle_signal_proto_lib", + ], +) + +proto_library( + name = "vehicle_signal_proto_lib", + srcs = [ + "vehicle_signal.proto", ], ) cc_proto_library( name = "common_proto", - protos = [ + deps = [ + ":common_proto_lib", + ], +) + +proto_library( + name = "common_proto_lib", + srcs = [ "geometry.proto", ], deps = [ - ":error_code_proto", - ":header_proto", + ":error_code_proto_lib", + ":header_proto_lib", ], ) cc_proto_library( name = "gnss_status_proto", - protos = [ + deps = [ + ":gnss_status_proto_lib", + ], +) + +proto_library( + name = "gnss_status_proto_lib", + srcs = [ "gnss_status.proto", ], deps = [ - ":error_code_proto", - ":header_proto", + ":error_code_proto_lib", + ":header_proto_lib", ], ) cc_proto_library( - name = "path_point_proto", - protos = [ - "path_point.proto", + name = "pnc_point_proto", + deps = [ + ":pnc_point_proto_lib", ], ) -py_proto_compile( - name = "common_proto_pylib", - protos = [ - "error_code.proto", - "geometry.proto", - "header.proto", +proto_library( + name = "pnc_point_proto_lib", + srcs = [ + "pnc_point.proto", ], ) diff --git a/modules/common/proto/error_code.proto b/modules/common/proto/error_code.proto index 0107acad0f2..4a840084688 100644 --- a/modules/common/proto/error_code.proto +++ b/modules/common/proto/error_code.proto @@ -30,6 +30,15 @@ enum ErrorCode { // Prediction module error codes start from here. PREDICTION_ERROR = 5000; + + // Planning module error codes start from here + PLANNING_ERROR = 6000; + + // HDMap module error codes start from here + HDMAP_DATA_ERROR = 7000; + + // Routing module error codes + ROUTING_ERROR = 8000; } message StatusPb { diff --git a/modules/common/proto/path_point.proto b/modules/common/proto/path_point.proto deleted file mode 100644 index b518e06db1e..00000000000 --- a/modules/common/proto/path_point.proto +++ /dev/null @@ -1,40 +0,0 @@ -syntax = "proto2"; - -package apollo.common; - -message PathPoint { - // coordinates - optional double x = 1; - optional double y = 2; - optional double z = 3; - - // derivative direction on the x-y plane - optional double theta = 4; - // curvature on the x-y planning - optional double kappa = 5; - // accumulated distance from beginning of the path - optional double s = 6; -} - -message TrajectoryPoint { - // coordinates - optional double x = 1; - optional double y = 2; - optional double z = 3; - - // derivative direction on the x-y plane - optional double theta = 4; - // curvature on the x-y planning - optional double kappa = 5; - // accumulated distance from beginning of the path - optional double s = 6; - - // linear velocity - optional double v = 7; // in [m/s] - // linear acceleration - optional double a = 8; - // relative time from beginning of the trajectory - optional double relative_time = 9; - // curvature change rate w.r.t. time - optional double dkappa = 10; -} diff --git a/modules/common/proto/pnc_point.proto b/modules/common/proto/pnc_point.proto new file mode 100644 index 00000000000..8ea3012bec4 --- /dev/null +++ b/modules/common/proto/pnc_point.proto @@ -0,0 +1,64 @@ +syntax = "proto2"; + +// Defined Point types that are commoly used in PnC (Planning and Control) modules. + +package apollo.common; + +message SLPoint { + optional double s = 1; + optional double l = 2; +} + +message FrenetFramePoint { + optional double s = 1; + optional double l = 2; + optional double dl = 3; + optional double ddl = 4; +} + +message SpeedPoint { + optional double s = 1; + optional double t = 2; + // speed (m/s) + optional double v = 3; + // acceleration (m/s^2) + optional double a = 4; + // jerk (m/s^3) + optional double da = 5; +} + +message PathPoint { + // coordinates + optional double x = 1; + optional double y = 2; + optional double z = 3; + + // direction on the x-y plane + optional double theta = 4; + // curvature on the x-y planning + optional double kappa = 5; + // accumulated distance from beginning of the path + optional double s = 6; + + // derivative of kappa w.r.t s. + optional double dkappa = 7; + // derivative of derivative of kappa w.r.t s. + optional double ddkappa = 8; +} + +message Path { + optional string name = 1; + repeated PathPoint path_point = 2; +} + +message TrajectoryPoint { + // path point + optional PathPoint path_point = 1; + + // linear velocity + optional double v = 2; // in [m/s] + // linear acceleration + optional double a = 3; + // relative time from beginning of the trajectory + optional double relative_time = 4; +} diff --git a/modules/common/proto/vehicle_signal.proto b/modules/common/proto/vehicle_signal.proto new file mode 100644 index 00000000000..6827b856c67 --- /dev/null +++ b/modules/common/proto/vehicle_signal.proto @@ -0,0 +1,17 @@ +syntax = "proto2"; + +package apollo.common; + +message VehicleSignal { + enum TurnSignal { + TURN_NONE = 0; + TURN_LEFT = 1; + TURN_RIGHT = 2; + }; + optional TurnSignal turn_signal = 1; + // lights enable command + optional bool high_beam = 2; + optional bool low_beam = 3; + optional bool horn = 4; + optional bool emergency_light = 5; +} diff --git a/modules/common/status/BUILD b/modules/common/status/BUILD index 2cd129138ea..df119a51f9b 100644 --- a/modules/common/status/BUILD +++ b/modules/common/status/BUILD @@ -9,7 +9,7 @@ cc_library( ], deps = [ "//modules/common/proto:error_code_proto", - "@com_github_google_protobuf//:protobuf", + "@com_google_protobuf//:protobuf", ], ) diff --git a/modules/common/status/status.h b/modules/common/status/status.h index e30a542b1cd..e8f19fc56d6 100644 --- a/modules/common/status/status.h +++ b/modules/common/status/status.h @@ -56,6 +56,12 @@ class Status { */ Status(ErrorCode code, const std::string &msg) : code_(code), msg_(msg) {} + /** + * @brief Create a status with the specified error code and empty msg + * @param code the error code. + */ + explicit Status(ErrorCode code) : code_(code), msg_("") {} + /** * @brief generate a success status. * @returns a success status diff --git a/modules/common/status/status_test.cc b/modules/common/status/status_test.cc index 169e18a7cb3..c5676648f41 100644 --- a/modules/common/status/status_test.cc +++ b/modules/common/status/status_test.cc @@ -64,7 +64,7 @@ TEST(Status, EqualsDifferentCode) { TEST(Status, EqualsDifferentMessage) { const Status a(ErrorCode::CONTROL_ERROR, "Error message1"); - const Status b(ErrorCode::CONTROL_ERROR, "Error message2"); + const Status b(ErrorCode::CONTROL_COMPUTE_ERROR, "Error message2"); EXPECT_NE(a, b); } diff --git a/modules/common/time/BUILD b/modules/common/time/BUILD index 92de26ee9f2..c30d4b69fe0 100644 --- a/modules/common/time/BUILD +++ b/modules/common/time/BUILD @@ -8,7 +8,10 @@ cc_library( "time.h", ], deps = [ + "//modules/common:log", "//modules/common:macro", + "//modules/common/configs:config_gflags", + "@ros//:ros_common", ], ) diff --git a/modules/common/time/time.h b/modules/common/time/time.h index ff7d04174a1..3f31a4f790a 100644 --- a/modules/common/time/time.h +++ b/modules/common/time/time.h @@ -29,7 +29,10 @@ #include #include +#include "modules/common/configs/config_gflags.h" +#include "modules/common/log.h" #include "modules/common/macro.h" +#include "ros/include/ros/ros.h" /** * @namespace apollo::common::time @@ -120,7 +123,6 @@ inline Timestamp FromInt64(int64_t timestamp_value) { * a unit of seconds. * @return a Timestamp object. */ - inline Timestamp From(double timestamp_value) { int64_t nanos_value = static_cast(timestamp_value * 1e9); return FromInt64(nanos_value); @@ -144,29 +146,54 @@ class Clock { "The precision of the system clock should be at least 1 " "microsecond."); + // The clock mode can either be a system clock time, a user mocked time (for + // test only) or read from ROS. + enum ClockMode { + SYSTEM = 0, + MOCK = 1, + ROS = 2, + }; + /** * @brief gets the current timestamp. * @return a Timestamp object representing the current time. */ static Timestamp Now() { - return instance()->is_system_clock_ ? SystemNow() : instance()->mock_now_; + switch (mode()) { + case ClockMode::SYSTEM: + return SystemNow(); + case ClockMode::MOCK: + return instance()->mock_now_; + case ClockMode::ROS: + return From(ros::Time::now().toSec()); + default: + AFATAL << "Unsupported clock mode: " << mode(); + } + } + + /** + * @brief gets the current time in second. + * @return the current time in second. + */ + static double NowInSecond() { + return ToSecond(Clock::Now()); } /** * @brief Set the behavior of the \class Clock. - * @param is_system_clock if provided with value TRUE, further call - * to Now() will return timestamp based on the system clock. If - * provided with FALSE, it will use the mock clock instead. + * @param The new clock mode to be set. */ - static void UseSystemClock(bool is_system_clock) { - instance()->is_system_clock_ = is_system_clock; + static void SetMode(ClockMode mode) { + instance()->mode_ = mode; } /** - * @brief Check whether the \class Clock instance is using system clock. - * @return TRUE if it is using system clock, and FALSE otherwise. + * @brief Gets the current clock mode. + * @return The current clock mode. */ - static bool IsSystemClock() { return instance()->is_system_clock_; } + static ClockMode mode() { + return instance()->mode_; + } /** * @brief This is for mock clock mode only. It will set the timestamp @@ -174,8 +201,8 @@ class Clock { */ static void SetNow(const Duration &duration) { Clock *clock = instance(); - if (clock->is_system_clock_) { - throw std::runtime_error("Cannot set now when using system clock!"); + if (clock->mode_ != ClockMode::MOCK) { + AFATAL << "Cannot set now when clock mode is not MOCK!"; } clock->mock_now_ = Timestamp(duration); } @@ -183,10 +210,11 @@ class Clock { private: /** * @brief constructs the \class Clock instance - * @param is_system_clock See UseSystemClock. + * @param mode the desired clock mode */ - explicit Clock(bool is_system_clock) - : is_system_clock_(is_system_clock), mock_now_(Timestamp()) {} + explicit Clock(ClockMode mode) : mode_(mode), mock_now_(Timestamp()) { + ros::Time::init(); + } /** * @brief Returns the current timestamp based on the system clock. @@ -197,13 +225,13 @@ class Clock { std::chrono::system_clock::now()); } - /// NOTE: Unless is_system_clock_ and mock_now_ are guarded by a + /// NOTE: Unless mode_ and mock_now_ are guarded by a /// lock or become atomic, having multiple threads calling mock /// clock related functions are STRICTLY PROHIBITED. /// Indicates whether it is in the system clock mode or the mock - /// clock mode. - bool is_system_clock_; + /// clock mode or the ROS time mode. + ClockMode mode_; /// Stores the currently set timestamp, which serves mock clock /// queries. @@ -213,8 +241,36 @@ class Clock { DECLARE_SINGLETON(Clock); }; -inline Clock::Clock() : Clock(true) {} +inline Clock::Clock() + : Clock(FLAGS_use_ros_time ? ClockMode::ROS : ClockMode::SYSTEM) {} + +// Measure run time of a code block, mostly for debugging puprpose. +// Example usage: +// PERF_BLOCK("Function Foo took: ") { +// Foo(); +// } +// You can optionally pass in a time threshold (in second) so that the log will +// only be spit out when the elapsed time of running the code block is greater +// than it. +#define GET_MACRO(_1, _2, NAME, ...) NAME +#define PERF_BLOCK(...) \ + GET_MACRO(__VA_ARGS__, PERF_BLOCK_WITH_THRESHOLD, PERF_BLOCK_NO_THRESHOLD) \ + (__VA_ARGS__) + +#define PERF_BLOCK_NO_THRESHOLD(message) PERF_BLOCK_WITH_THRESHOLD(message, 0) +#define PERF_BLOCK_WITH_THRESHOLD(message, threshold) \ + using apollo::common::time::Clock; \ + for (double block_start_time = 0; \ + (block_start_time == 0 ? (block_start_time = Clock::NowInSecond()) \ + : false); \ + [&]() { \ + double now = Clock::NowInSecond(); \ + if (now - block_start_time > (threshold)) { \ + AINFO << std::fixed << (message) << ": " << now - block_start_time \ + << "s."; \ + } \ + }()) } // namespace time } // namespace common } // namespace apollo diff --git a/modules/common/time/time_test.cc b/modules/common/time/time_test.cc index ae300bea563..5ccfeedf681 100644 --- a/modules/common/time/time_test.cc +++ b/modules/common/time/time_test.cc @@ -54,9 +54,9 @@ TEST(TimeTest, TimestampFromAndToDouble) { } TEST(TimeTest, MockTime) { - EXPECT_TRUE(Clock::IsSystemClock()); - Clock::UseSystemClock(false); - EXPECT_FALSE(Clock::IsSystemClock()); + EXPECT_EQ(Clock::SYSTEM, Clock::mode()); + Clock::SetMode(Clock::MOCK); + EXPECT_EQ(Clock::MOCK, Clock::mode()); EXPECT_EQ(0, AsInt64(Clock::Now())); Clock::SetNow(micros(123)); diff --git a/modules/common/util/BUILD b/modules/common/util/BUILD index 86daea70fb3..4aef2d41cb9 100644 --- a/modules/common/util/BUILD +++ b/modules/common/util/BUILD @@ -16,7 +16,9 @@ cc_library( ], deps = [ "//modules/common/math", + "//modules/common/proto:pnc_point_proto", "//modules/common/time", + "//modules/perception/proto:perception_proto", ], ) @@ -32,6 +34,31 @@ cc_test( ], ) +cc_library( + name = "lru_cache", + hdrs = ["lru_cache.h"], +) + +cc_library( + name = "string_util", + hdrs = [ + "string_util.h", + "string_util_internal.h", + ], +) + +cc_test( + name = "string_util_test", + size = "small", + srcs = [ + "string_util_test.cc", + ], + deps = [ + ":string_util", + "@gtest//:main", + ], +) + cc_test( name = "string_tokenizer_test", size = "small", @@ -84,4 +111,39 @@ cc_test( ], ) +cc_test( + name = "lru_cache_test", + size = "small", + srcs = [ + "lru_cache_test.cc", + ], + deps = [ + "//modules/common/util:lru_cache", + "@gtest//:main", + ], +) + +cc_library( + name = "points_downsampler", + hdrs = [ + "points_downsampler.h", + ], + deps = [ + "//modules/common:log", + "//modules/common/math:vec2d", + ], +) + +cc_test( + name = "points_downsampler_test", + size = "small", + srcs = [ + "points_downsampler_test.cc", + ], + deps = [ + ":points_downsampler", + "@gtest//:main", + ], +) + cpplint() diff --git a/modules/common/util/file.cc b/modules/common/util/file.cc index ec238214b6a..0bbf5733e5f 100644 --- a/modules/common/util/file.cc +++ b/modules/common/util/file.cc @@ -24,6 +24,11 @@ namespace apollo { namespace common { namespace util { +bool PathExists(const std::string &path) { + struct stat info; + return stat(path.c_str(), &info) == 0; +} + bool DirectoryExists(const std::string &directory_path) { struct stat info; if (stat(directory_path.c_str(), &info) != 0) { diff --git a/modules/common/util/file.h b/modules/common/util/file.h index bf34b8a2aa3..796a683edbf 100644 --- a/modules/common/util/file.h +++ b/modules/common/util/file.h @@ -22,6 +22,7 @@ #define MODULES_COMMON_UTIL_FILE_H_ #include +#include #include #include #include @@ -32,7 +33,7 @@ #include "google/protobuf/io/zero_copy_stream_impl.h" #include "google/protobuf/text_format.h" #include "modules/common/log.h" -#include "modules/common/util/util.h" +#include "modules/common/util/string_util.h" /** * @namespace apollo::common::util @@ -42,22 +43,13 @@ namespace apollo { namespace common { namespace util { -/** - * @brief Sets the content of the file specified by the file_name to be the - * ascii representation of the input protobuf. - * @param message The proto to output to the specified file. - * @param file_name The name of the target file to set the content. - * @return If the action is successful. - */ template -bool SetProtoToASCIIFile(const MessageType &message, - const std::string &file_name) { +bool SetProtoToASCIIFile(const MessageType &message, int file_descriptor) { using google::protobuf::io::ZeroCopyOutputStream; using google::protobuf::io::FileOutputStream; using google::protobuf::TextFormat; - int file_descriptor = open(file_name.c_str(), O_WRONLY | O_CREAT, S_IRWXU); if (file_descriptor < 0) { - // Failed to open; + AERROR << "Invalid file descriptor"; return false; } ZeroCopyOutputStream *output = new FileOutputStream(file_descriptor); @@ -67,6 +59,20 @@ bool SetProtoToASCIIFile(const MessageType &message, return success; } +/** + * @brief Sets the content of the file specified by the file_name to be the + * ascii representation of the input protobuf. + * @param message The proto to output to the specified file. + * @param file_name The name of the target file to set the content. + * @return If the action is successful. + */ +template +bool SetProtoToASCIIFile(const MessageType &message, + const std::string &file_name) { + return SetProtoToASCIIFile( + message, open(file_name.c_str(), O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU)); +} + /** * @brief Parses the content of the file specified by the file_name as ascii * representation of protobufs, and merges the parsed content to the @@ -82,17 +88,36 @@ bool GetProtoFromASCIIFile(const std::string &file_name, MessageType *message) { using google::protobuf::TextFormat; int file_descriptor = open(file_name.c_str(), O_RDONLY); if (file_descriptor < 0) { + AERROR << "Failed to open file " << file_name; // Failed to open; return false; } ZeroCopyInputStream *input = new FileInputStream(file_descriptor); bool success = TextFormat::Parse(input, message); + if (!success) { + AERROR << "Failed to parse file " << file_name; + } delete input; close(file_descriptor); return success; } +/** + * @brief Sets the content of the file specified by the file_name to be the + * binary representation of the input protobuf. + * @param message The proto to output to the specified file. + * @param file_name The name of the target file to set the content. + * @return If the action is successful. + */ +template +bool SetProtoToBinaryFile(const MessageType &message, + const std::string &file_name) { + std::fstream output(file_name, + std::ios::out | std::ios::trunc | std::ios::binary); + return message.SerializeToOstream(&output); +} + /** * @brief Parses the content of the file specified by the file_name as binary * representation of protobufs, and merges the parsed content to the @@ -105,7 +130,15 @@ template bool GetProtoFromBinaryFile(const std::string &file_name, MessageType *message) { std::fstream input(file_name, std::ios::in | std::ios::binary); - return message->ParseFromIstream(&input); + if (!input.good()) { + AERROR << "Failed to open file " << file_name; + return false; + } + if (!message->ParseFromIstream(&input)) { + AERROR << "Failed to parse file " << file_name; + return false; + } + return true; } /** @@ -131,6 +164,13 @@ bool GetProtoFromFile(const std::string &file_name, MessageType *message) { } return true; } + +/** + * @brief Check if the path exists. + * @return If the path exists. + */ +bool PathExists(const std::string &path); + /** * @brief Check if the directory specified by directory_path exists * and is indeed a directory. diff --git a/modules/common/util/file_test.cc b/modules/common/util/file_test.cc index 0c54aa2b6f6..51106e7b653 100644 --- a/modules/common/util/file_test.cc +++ b/modules/common/util/file_test.cc @@ -54,6 +54,27 @@ TEST_F(FileTest, GetSetASCIIFile) { EXPECT_EQ(message.text(), read_message.text()); } +TEST_F(FileTest, GetSetBinaryFile) { + const std::string path = FilePath("output.pb.bin"); + + test::SimpleMessage message; + message.set_integer(17); + message.set_text("This is some piece of text."); + + EXPECT_TRUE(SetProtoToBinaryFile(message, path)); + + test::SimpleMessage read_message; + EXPECT_TRUE(GetProtoFromBinaryFile(path, &read_message)); + + EXPECT_EQ(message.integer(), read_message.integer()); + EXPECT_EQ(message.text(), read_message.text()); +} + +TEST_F(FileTest, PathExists) { + EXPECT_TRUE(PathExists("/root")); + EXPECT_FALSE(PathExists("/something_impossible")); +} + TEST_F(FileTest, EnsureAndRemoveDirectory) { const std::string directory_path = FilePath("my_directory/haha/hehe"); EXPECT_FALSE(DirectoryExists(directory_path)); diff --git a/modules/common/util/lru_cache.h b/modules/common/util/lru_cache.h new file mode 100644 index 00000000000..2b07dfc731a --- /dev/null +++ b/modules/common/util/lru_cache.h @@ -0,0 +1,285 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_COMMON_UTIL_LRU_CACHE_H_ +#define MODULES_COMMON_UTIL_LRU_CACHE_H_ + +#include +#include +#include +#include +#include + +namespace apollo { +namespace common { +namespace util { + +template +struct Node { + K key; + V val; + Node* prev; + Node* next; + Node() : prev(nullptr), next(nullptr) { + key = {}; + val = {}; + } + + template + Node(const K& key, VV&& val) + : key(key), val(std::forward(val)), prev(nullptr), next(nullptr) {} +}; + +template +class LRUCache { + public: + LRUCache() : capacity_(kDefaultCapacity), map_(0), head_(), tail_() { + Init(); + } + + explicit LRUCache(const size_t capacity) + : capacity_(capacity), map_(0), head_(), tail_() { + Init(); + } + + ~LRUCache() { Clear(); } + + void GetCache(std::unordered_map* cache) { + for (auto it = map_.begin(); it != map_.end(); ++it) { + cache->operator[](it->first) = it->second.val; + } + } + + V& operator[](const K& key) { + if (!Contains(key)) { + K obsolete; + GetObsolete(&obsolete); + } + return map_[key].val; + } + + /* + * Silently get all as vector + */ + void GetAllSilently(std::vector* ret) { + for (auto it = map_.begin(); it != map_.end(); ++it) { + ret->push_back(&it->second.val); + } + } + + /* + * for both add & update purposes + */ + template + bool Put(const K& key, VV&& val) { + K tmp; + return Update(key, std::forward(val), &tmp, false, false); + } + + /* + * update existing elements only + */ + template + bool Update(const K& key, VV&& val) { + if (!Contains(key)) { + return false; + } + K tmp; + return Update(key, std::forward(val), &tmp, true, false); + } + + /* + * silently update existing elements only + */ + template + bool UpdateSilently(const K& key, VV* val) { + if (!Contains(key)) { + return false; + } + K tmp; + return Update(key, std::forward(*val), &tmp, true, true); + } + + /* + * add new elements only + */ + template + bool Add(const K& key, VV* val) { + K tmp; + return Update(key, std::forward(*val), &tmp, true, false); + } + + template + bool PutAndGetObsolete(const K& key, VV* val, K* obs) { + return Update(key, std::forward(*val), obs, false, false); + } + + template + bool AddAndGetObsolete(const K& key, VV* val, K* obs) { + return Update(key, std::forward(*val), obs, true, false); + } + + V* GetSilently(const K& key) { return Get(key, true); } + + V* Get(const K& key) { return Get(key, false); } + + bool GetCopySilently(const K& key, const V* val) { + return GetCopy(key, val, true); + } + + bool GetCopy(const K& key, const V* val) { return GetCopy(key, val, false); } + + size_t size() { return size_; } + + bool Full() { return size() > 0 && size() >= capacity_; } + + bool Empty() { return size() == 0; } + + size_t capacity() { return capacity_; } + + Node* First() { + if (size()) { + return head_.next; + } + return nullptr; + } + + bool Contains(const K& key) { return map_.find(key) != map_.end(); } + + bool Prioritize(const K& key) { + if (Contains(key)) { + auto* node = &map_[key]; + Detach(node); + Attach(node); + return true; + } + return false; + } + + void Clear() { + map_.clear(); + size_ = 0; + } + + private: + static constexpr size_t kDefaultCapacity = 10; + + const size_t capacity_; + size_t size_; + std::unordered_map> map_; + Node head_; + Node tail_; + + void Init() { + head_.prev = nullptr; + head_.next = &tail_; + tail_.prev = &head_; + tail_.next = nullptr; + size_ = 0; + } + + void Detach(Node* node) { + if (node->prev != nullptr) { + node->prev->next = node->next; + } + if (node->next != nullptr) { + node->next->prev = node->prev; + } + node->prev = nullptr; + node->next = nullptr; + --size_; + } + + void Attach(Node* node) { + node->prev = &head_; + node->next = head_.next; + head_.next = node; + if (node->next != nullptr) { + node->next->prev = node; + } + ++size_; + } + + template + bool Update(const K& key, VV&& val, K* obs, bool add_only, + bool silent_update) { + if (obs == nullptr) { + return false; + } + if (Contains(key)) { + if (!add_only) { + map_[key].val = std::forward(val); + if (!silent_update) { + auto* node = &map_[key]; + Detach(node); + Attach(node); + } else { + return false; + } + } + } else { + if (Full() && !GetObsolete(obs)) { + return false; + } + + map_.emplace(key, Node(key, std::forward(val))); + Attach(&map_[key]); + } + return true; + } + + V* Get(const K& key, bool silent) { + if (Contains(key)) { + auto* node = &map_[key]; + if (!silent) { + Detach(node); + Attach(node); + } + return &node->val; + } + return nullptr; + } + + bool GetCopy(const K& key, const V* val, bool silent) { + if (Contains(key)) { + auto* node = &map_[key]; + if (!silent) { + Detach(node); + Attach(node); + } + *val = node->val; + return true; + } + return false; + } + + bool GetObsolete(K* key) { + if (Full()) { + auto* node = tail_.prev; + Detach(node); + *key = node->key; + map_.erase(node->key); + return true; + } + return false; + } +}; + +} // namespace util +} // namespace common +} // namespace apollo + +#endif // MODULES_COMMON_UTIL_LRU_CACHE_H_ diff --git a/modules/common/util/lru_cache_test.cc b/modules/common/util/lru_cache_test.cc new file mode 100644 index 00000000000..62d3d9b8dd7 --- /dev/null +++ b/modules/common/util/lru_cache_test.cc @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/common/util/lru_cache.h" +#include +#include "gtest/gtest.h" + +namespace apollo { +namespace common { +namespace util { + +static const int TEST_NUM = 10; +static const int CAPACITY = 4; + +TEST(LRUCache, General) { + int ids[] = {0, 1, 2, 3, 2, 1, 4, 3, 5, 6}; + int timestamps[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; + + std::vector> keys = { + {0}, + {1, 0}, + {2, 1, 0}, + {3, 2, 1, 0}, + {2, 3, 1, 0}, + {1, 2, 3, 0}, + {4, 1, 2, 3}, + {3, 4, 1, 2}, + {5, 3, 4, 1}, + {6, 5, 3, 4}}; + std::vector> values = { + {0}, + {1, 0}, + {2, 1, 0}, + {3, 2, 1, 0}, + {4, 3, 1, 0}, + {5, 4, 3, 0}, + {6, 5, 4, 3}, + {7, 6, 5, 4}, + {8, 7, 6, 5}, + {9, 8, 7, 6}}; + int obsoletes[TEST_NUM] = {-1, -1, -1, -1, -1, -1, 0, -1, 2, 1}; + LRUCache lru(CAPACITY); + for (int i = 0; i < TEST_NUM; ++i) { + int obsolete = -1; + lru.PutAndGetObsolete(ids[i], ×tamps[i], &obsolete); + EXPECT_EQ(obsolete, obsoletes[i]); + EXPECT_EQ(static_cast(lru.size()), i < CAPACITY ? i + 1 : CAPACITY); + + Node* cur = lru.First(); + for (int j = 0; j < static_cast(lru.size()); ++j) { + EXPECT_EQ(cur->key, keys[i][j]); + EXPECT_EQ(cur->val, values[i][j]); + cur = cur->next; + } + } +} + +} // namespace util +} // namespace common +} // namespace apollo diff --git a/modules/common/util/points_downsampler.h b/modules/common/util/points_downsampler.h new file mode 100644 index 00000000000..e47b95355e6 --- /dev/null +++ b/modules/common/util/points_downsampler.h @@ -0,0 +1,166 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @points_downsampler + */ + +#ifndef MODULES_COMMON_UTIL_POINTS_DOWNSAMPLER_H_ +#define MODULES_COMMON_UTIL_POINTS_DOWNSAMPLER_H_ + +#include +#include + +#include "modules/common/log.h" +#include "modules/common/math/vec2d.h" + +/** + * @namespace apollo::common::util + * @brief apollo::common::util + */ +namespace apollo { +namespace common { +namespace util { + +/** + * @brief Calculate the angle between the directions of two points on the path. + * @param points Points on the path. + * @param start The index of the first point on the path. + * @param end The index of the second point on the path. + * @return The angle between the directions of the start point and the end + * point. + */ +template +double GetPathAngle(const std::vector &points, const size_t start, + const size_t end) { + if (start >= points.size() - 1 || end >= points.size() - 1) { + AERROR << "Input indices are out of the range of the points vector: " + << "should be less than vector size - 1."; + return 0.0; + } + if (start >= end) { + AERROR << "Second index must be greater than the first index."; + return 0.0; + } + double vec_start_x = points[start + 1].x() - points[start].x(); + double vec_start_y = points[start + 1].y() - points[start].y(); + double vec_start_norm = std::hypot(vec_start_x, vec_start_y); + + double vec_end_x = points[end + 1].x() - points[end].x(); + double vec_end_y = points[end + 1].y() - points[end].y(); + double vec_end_norm = std::hypot(vec_end_x, vec_end_y); + + double dot_product = vec_start_x * vec_end_x + vec_start_y * vec_end_y; + double angle = std::acos(dot_product / (vec_start_norm * vec_end_norm)); + + return std::isnan(angle) ? 0.0 : angle; +} + +/** + * @brief Downsample the points on the path according to the angle. + * @param points Points on the path. + * @param angle_threshold Points are sampled when the accumulated direction + * change exceeds the threshold. + * @return sampled_indices Indices of all sampled points, or empty when fail. + */ +template +std::vector DownsampleByAngle(const std::vector &points, + const double angle_threshold) { + std::vector sampled_indices; + if (angle_threshold < 0.0) { + AERROR << "Input angle threshold is negative."; + return sampled_indices; + } + sampled_indices.push_back(0); + if (points.size() > 1) { + size_t start = 0; + size_t end = 1; + double accum_degree = 0.0; + while (end < points.size() - 1) { + double angle = GetPathAngle(points, start, end); + accum_degree += std::fabs(angle); + + if (accum_degree > angle_threshold) { + sampled_indices.push_back(end); + start = end; + accum_degree = 0.0; + } + ++end; + } + sampled_indices.push_back(end); + } + + AINFO << "Point Vector is downsampled from " << points.size() << " to " + << sampled_indices.size(); + + return sampled_indices; +} + +/** + * @brief Downsample the points on the path based on distance. + * @param points Points on the path. + * @param downsampleDistance downsample rate for a normal path + * @param steepTurnDownsampleDistance downsample rate for a steep turn path + * @return sampled_indices Indices of all sampled points, or empty when fail. + */ +template +std::vector DownsampleByDistance(const std::vector &points, + int downsampleDistance, + int steepTurnDownsampleDistance) { + std::vector sampled_indices; + if (points.size() <= 4) { + // No need to downsample if there are not too many points. + for (size_t i = 0; i < points.size(); ++i) { + sampled_indices.push_back(i); + } + return sampled_indices; + } + + using apollo::common::math::Vec2d; + Vec2d v_start = + Vec2d(points[1].x() - points[0].x(), points[1].y() - points[0].y()); + Vec2d v_end = + Vec2d(points[points.size() - 1].x() - points[points.size() - 2].x(), + points[points.size() - 1].y() - points[points.size() - 2].y()); + bool is_steep_turn = v_start.InnerProd(v_end) <= 0; + int downsampleRate = + is_steep_turn ? steepTurnDownsampleDistance : downsampleDistance; + + // Make sure the first point is included + sampled_indices.push_back(0); + + double accum_distance = 0.0; + for (size_t pos = 1; pos < points.size() - 1; ++pos) { + Vec2d point_start = Vec2d(points[pos - 1].x(), points[pos - 1].y()); + Vec2d point_end = Vec2d(points[pos].x(), points[pos].y()); + accum_distance += point_start.DistanceTo(point_end); + + if (accum_distance > downsampleRate) { + sampled_indices.push_back(pos); + accum_distance = 0.0; + } + } + + // Make sure the last point is included + sampled_indices.push_back(points.size() - 1); + return sampled_indices; +} + +} // namespace util +} // namespace common +} // namespace apollo + +#endif // MODULES_COMMON_UTIL_POINTS_DOWNSAMPLER_H_ diff --git a/modules/common/util/points_downsampler_test.cc b/modules/common/util/points_downsampler_test.cc new file mode 100644 index 00000000000..3a75b667738 --- /dev/null +++ b/modules/common/util/points_downsampler_test.cc @@ -0,0 +1,88 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/common/util/points_downsampler.h" + +#include + +#include "gtest/gtest.h" +#include "modules/common/math/vec2d.h" + +namespace apollo { +namespace common { +namespace util { + +using common::math::Vec2d; + +TEST(DownSamplerTest, DownsampleByAngle) { + std::vector points; + points.emplace_back(-405.778, -134.969); + points.emplace_back(-403.919, -127.696); + points.emplace_back(-400.635, -115.407); + points.emplace_back(-397.997, -105.291); + points.emplace_back(-395.801, -96.8637); + points.emplace_back(-392.889, -86.1015); + points.emplace_back(-388.054, -67.9935); + points.emplace_back(-385.994, -60.1831); + points.emplace_back(-378.213, -30.2776); + points.emplace_back(-376.702, -24.5804); + points.emplace_back(-373.825, -13.3855); + points.emplace_back(-367.583, 10.4028); + points.emplace_back(-363.025, 27.4212); + + std::vector sampled_indices = DownsampleByAngle(points, 0.1); + EXPECT_EQ(2, sampled_indices.size()); + EXPECT_EQ(0, sampled_indices[0]); + EXPECT_EQ(12, sampled_indices[1]); +} + +TEST(DownSamplerTest, DownsampleByDistanceNormal) { + std::vector points; + points.emplace_back(0, 0); + points.emplace_back(0, 4); + points.emplace_back(0, 8); + points.emplace_back(0, 12); + points.emplace_back(0, 16); + points.emplace_back(0, 20); + + std::vector sampled_indices = DownsampleByDistance(points, 5, 1); + EXPECT_EQ(4, sampled_indices.size()); + EXPECT_EQ(0, sampled_indices[0]); + EXPECT_EQ(2, sampled_indices[1]); + EXPECT_EQ(4, sampled_indices[2]); + EXPECT_EQ(5, sampled_indices[3]); +} + +TEST(DownSamplerTest, DownsampleByDistanceSteepTurn) { + std::vector points; + points.emplace_back(-2, 0); + points.emplace_back(-1, 1); + points.emplace_back(0, 2); + points.emplace_back(1, 1); + points.emplace_back(2, 0); + + std::vector sampled_indices = DownsampleByDistance(points, 5, 1); + EXPECT_EQ(5, sampled_indices.size()); + EXPECT_EQ(0, sampled_indices[0]); + EXPECT_EQ(1, sampled_indices[1]); + EXPECT_EQ(2, sampled_indices[2]); + EXPECT_EQ(3, sampled_indices[3]); + EXPECT_EQ(4, sampled_indices[4]); +} + +} // namespace util +} // namespace common +} // namespace apollo diff --git a/modules/common/util/string_util.h b/modules/common/util/string_util.h new file mode 100644 index 00000000000..4fc7cb0b0e2 --- /dev/null +++ b/modules/common/util/string_util.h @@ -0,0 +1,138 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Some string util functions. + */ + +#ifndef MODULES_COMMON_STRING_UTIL_H_ +#define MODULES_COMMON_STRING_UTIL_H_ + +#include +#include + +#include "modules/common/util/string_util_internal.h" + +/** + * @namespace apollo::common::util + * @brief apollo::common::util + */ +namespace apollo { +namespace common { +namespace util { + +/** + * @brief Check if a string ends with a pattern. + * @param ori The original string. To see if it ends with a specified pattern. + * @param pat The target pattern. To see if the original string ends with it. + * @return Whether the original string ends with the specified pattern. + */ +inline bool EndWith(const std::string& ori, const std::string& pat) { + return ori.length() >= pat.length() && + ori.compare(ori.length() - pat.length(), pat.length(), pat) == 0; +} + +/** + * @brief Concat parameters to a string, e.g.: StrCat("age = ", 32) + * @return String of concated parameters. + */ +template +std::string StrCat(const T& ...args) { + std::ostringstream oss; + // Expand args and pass to oss. + std::initializer_list{(oss << args, ' ') ... }; + return oss.str(); +} + +/** + * @brief Make arrays, conatiners and iterators printable. + * + * Usage: + * vector vec = {1, 2, 3}; + * std::cout << PrintIter(vec); + * std::cout << PrintIter(vec, ","); + * std::cout << PrintIter(vec.begin(), vec.end()); + * std::cout << PrintIter(vec.begin(), vec.end(), "|"); + * + * int array[] = {1, 2, 3}; + * std::cout << PrintIter(array); + * std::cout << PrintIter(array, "|"); + * std::cout << PrintIter(array + 0, array + 10, "|"); + */ +template +internal::IterPrinter PrintIter(const Container& container, + const std::string& delimiter = " ") { + return {container.begin(), container.end(), delimiter}; +} + +template +internal::IterPrinter PrintIter(const Iter& begin, const Iter& end, + const std::string& delimiter = " ") { + return {begin, end, delimiter}; +} + +template +internal::IterPrinter PrintIter( + T (&array)[length], const std::string& delimiter = " ") { + return {array, array + length, delimiter}; +} + +template +internal::IterPrinter PrintIter( + T (&array)[length], T* end, const std::string& delimiter = " ") { + return {array, end, delimiter}; +} + +/** + * @brief Make conatiners and iterators printable. Similar to PrintIter but + * output the DebugString(). + */ +template +internal::DebugStringIterPrinter PrintDebugStringIter( + const Container& container, const std::string& delimiter = " ") { + return {container.begin(), container.end(), delimiter}; +} + +template +internal::DebugStringIterPrinter PrintDebugStringIter( + const Iter& begin, const Iter& end, const std::string& delimiter = " ") { + return {begin, end, delimiter}; +} + +} // namespace util +} // namespace common + +// Operators should be globally visible in apollo namespace. +template +std::ostream& operator<<( + std::ostream& os, + const common::util::internal::IterPrinter& printer) { + return printer.Print(os); +} + +template +std::ostream& operator<<( + std::ostream& os, + const common::util::internal::DebugStringIterPrinter& printer) { + return printer.Print(os); +} + +} // namespace apollo + +#endif // MODULES_COMMON_STRING_UTIL_H_ diff --git a/modules/common/util/string_util_internal.h b/modules/common/util/string_util_internal.h new file mode 100644 index 00000000000..bec101f9cba --- /dev/null +++ b/modules/common/util/string_util_internal.h @@ -0,0 +1,97 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Some string util internal helpers. + */ + +#ifndef MODULES_COMMON_STRING_UTIL_INTERNAL_H_ +#define MODULES_COMMON_STRING_UTIL_INTERNAL_H_ + +#include +#include + +/** + * @namespace apollo::common::util + * @brief apollo::common::util + */ +namespace apollo { +namespace common { +namespace util { +namespace internal { + +/** + * @brief Iterator printer. + */ +template +class IterPrinter { + public: + IterPrinter(const Iter& begin, const Iter& end, const std::string& delimiter) + : begin_(begin), end_(end), delimiter_(delimiter) {} + + std::ostream& Print(std::ostream& os) const { + for (Iter it = begin_; it != end_; ++it) { + // Print first item without delimiter. + if (it == begin_) { + os << *it; + } else { + os << delimiter_ << *it; + } + } + return os; + } + + private: + const Iter begin_; + const Iter end_; + const std::string& delimiter_; +}; + +/** + * @brief Iterator printer which output iter->DebugString(). + */ +template +class DebugStringIterPrinter { + public: + DebugStringIterPrinter(const Iter& begin, const Iter& end, + const std::string& delimiter) + : begin_(begin), end_(end), delimiter_(delimiter) {} + + std::ostream& Print(std::ostream& os) const { + for (Iter it = begin_; it != end_; ++it) { + // Print first item without delimiter. + if (it == begin_) { + os << it->DebugString(); + } else { + os << delimiter_ << it->DebugString(); + } + } + return os; + } + + private: + const Iter begin_; + const Iter end_; + const std::string& delimiter_; +}; + +} // namespace internal +} // namespace util +} // namespace common +} // namespace apollo + +#endif // MODULES_COMMON_STRING_UTIL_INTERNAL_H_ diff --git a/modules/common/util/string_util_test.cc b/modules/common/util/string_util_test.cc new file mode 100644 index 00000000000..8b7d4f22e0a --- /dev/null +++ b/modules/common/util/string_util_test.cc @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/common/util/string_util.h" + +#include + +#include "gtest/gtest.h" + +namespace apollo { +namespace common { +namespace util { + +TEST(UtilTest, EndWith) { + EXPECT_TRUE(EndWith("abc.def", "def")); + EXPECT_TRUE(EndWith("abc.def", ".def")); + EXPECT_FALSE(EndWith("abc.def", "abc")); + EXPECT_FALSE(EndWith("abc.def", "de")); +} + +TEST(UtilTest, StrCat) { + EXPECT_EQ(StrCat("string", "32"), "string32"); // string, string + EXPECT_EQ(StrCat("string", 32, 3.2f), "string323.2"); // string, int, float + EXPECT_EQ(StrCat(3.2, ' ', true), "3.2 1"); // double, char, bool +} + +TEST(UtilTest, IterPrinter) { + // Container. + std::vector vec; + EXPECT_EQ(StrCat(PrintIter(vec)), ""); // Empty string + vec.assign({"0", "1", "2"}); + EXPECT_EQ(StrCat(PrintIter(vec)), "0 1 2"); + EXPECT_EQ(StrCat(PrintIter(vec, "|")), "0|1|2"); + EXPECT_EQ(StrCat(PrintIter(vec.begin(), vec.end(), ", ")), "0, 1, 2"); + EXPECT_EQ(StrCat(PrintIter(vec.begin() + 1, vec.end() - 1, " ")), "1"); + + // Array. + int data[] = {0, 1, 2}; + EXPECT_EQ(StrCat(PrintIter(data)), "0 1 2"); + EXPECT_EQ(StrCat(PrintIter(data, data + 2, ", ")), "0, 1"); + EXPECT_EQ(StrCat(PrintIter(data + 1, data + 2, ", ")), "1"); +} + +} // namespace util +} // namespace common +} // namespace apollo diff --git a/modules/common/util/testdata/BUILD b/modules/common/util/testdata/BUILD index 30bdba143c1..5fcddffe11f 100644 --- a/modules/common/util/testdata/BUILD +++ b/modules/common/util/testdata/BUILD @@ -1,10 +1,15 @@ package(default_visibility = ["//visibility:public"]) -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") - cc_proto_library( name = "simple_proto", - protos = [ + deps = [ + ":simple_proto_lib", + ], +) + +proto_library( + name = "simple_proto_lib", + srcs = [ "simple.proto", ], ) diff --git a/modules/common/util/util.cc b/modules/common/util/util.cc index 31b333a9e11..0f80340310f 100644 --- a/modules/common/util/util.cc +++ b/modules/common/util/util.cc @@ -16,13 +16,71 @@ #include "modules/common/util/util.h" +#include + namespace apollo { namespace common { namespace util { -bool EndWith(const std::string &original, const std::string &pattern) { - return original.length() >= pattern.length() && - original.substr(original.length() - pattern.length()) == pattern; +SLPoint MakeSLPoint(const double s, const double l) { + SLPoint sl; + sl.set_s(s); + sl.set_l(l); + return sl; +} + +PointENU MakePointENU(const double x, const double y, const double z) { + PointENU point_enu; + point_enu.set_x(x); + point_enu.set_y(y); + point_enu.set_z(z); + return point_enu; +} + +PointENU MakePointENU(const math::Vec2d& xy) { + PointENU point_enu; + point_enu.set_x(xy.x()); + point_enu.set_y(xy.y()); + point_enu.set_z(0.0); + return point_enu; +} + +apollo::perception::Point MakePerceptionPoint(const double x, const double y, + const double z) { + perception::Point point3d; + point3d.set_x(x); + point3d.set_y(y); + point3d.set_z(z); + return point3d; +} + +SpeedPoint MakeSpeedPoint(const double s, const double t, const double v, + const double a, const double da) { + SpeedPoint speed_point; + speed_point.set_s(s); + speed_point.set_t(t); + speed_point.set_v(v); + speed_point.set_a(a); + speed_point.set_da(da); + return speed_point; +} + +PathPoint MakePathPoint(const double x, const double y, const double z, + const double theta, const double kappa, + const double dkappa, const double ddkappa) { + PathPoint path_point; + path_point.set_x(x); + path_point.set_y(y); + path_point.set_z(z); + path_point.set_theta(theta); + path_point.set_kappa(kappa); + path_point.set_dkappa(dkappa); + path_point.set_ddkappa(ddkappa); + return path_point; +} + +double Distance2D(const PathPoint& a, const PathPoint& b) { + return std::hypot(a.x() - b.x(), a.y() - b.y()); } } // namespace util diff --git a/modules/common/util/util.h b/modules/common/util/util.h index 9ce98b1f237..73a42912d57 100644 --- a/modules/common/util/util.h +++ b/modules/common/util/util.h @@ -22,7 +22,18 @@ #ifndef MODULES_COMMON_UTIL_H_ #define MODULES_COMMON_UTIL_H_ +#include +#include +#include #include +#include + +#include "google/protobuf/util/message_differencer.h" + +#include "modules/common/math/vec2d.h" +#include "modules/common/proto/geometry.pb.h" +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/perception/proto/perception_obstacle.pb.h" /** * @namespace apollo::common::util @@ -32,18 +43,64 @@ namespace apollo { namespace common { namespace util { +template +std::unique_ptr make_unique(Args&&... args) { + return std::unique_ptr(new T(std::forward(args)...)); +} + +template +bool IsProtoEqual(const ProtoA& a, const ProtoB& b) { + return google::protobuf::util::MessageDifferencer::Equals(a, b); +} + /** - * @brief Check if a string ends with a pattern. - * @param original The original string. To see if it ends with some - * specified pattern. - * @param pattern The target pattern. To see if the original string ends - * with it. - * @return Whether the original string ends with the specified pattern. + * @brief create a SL point + * @param s the s value + * @param l the l value + * @return a SLPoint instance */ -bool EndWith(const std::string &original, const std::string &pattern); +SLPoint MakeSLPoint(const double s, const double l); + +PointENU MakePointENU(const double x, const double y, const double z); + +PointENU MakePointENU(const math::Vec2d& xy); + +apollo::perception::Point MakePerceptionPoint(const double x, const double y, + const double z); + +SpeedPoint MakeSpeedPoint(const double s, const double t, const double v, + const double a, const double da); + +PathPoint MakePathPoint(const double x, const double y, const double z, + const double theta, const double kappa, + const double dkappa, const double ddkappa); + +template +typename Container::value_type MaxElement(const Container& elements) { + return *std::max_element(elements.begin(), elements.end()); +} + +template +typename Container::value_type MinElement(const Container& elements) { + return *std::min_element(elements.begin(), elements.end()); +} + +/** + * calculate the distance beteween PathPoint a and PathPoint b + * @param a one path point + * @param b another path point + * @return sqrt((a.x-b.x)^2 + (a.y-b.y)^2), i.e., the Euclid distance on XY + * dimension + */ +double Distance2D(const PathPoint& a, const PathPoint& b); } // namespace util } // namespace common } // namespace apollo +template +std::ostream& operator<<(std::ostream& os, std::pair& p) { + return os << "first: " << p.first << ", second: " << p.second; +} + #endif // MODULES_COMMON_UTIL_H_ diff --git a/modules/common/util/util_test.cc b/modules/common/util/util_test.cc index 9de734da743..d74eabf84a6 100644 --- a/modules/common/util/util_test.cc +++ b/modules/common/util/util_test.cc @@ -15,17 +15,21 @@ *****************************************************************************/ #include "modules/common/util/util.h" + #include "gtest/gtest.h" namespace apollo { namespace common { namespace util { -TEST(UtilTest, EndWith) { - EXPECT_TRUE(EndWith("abc.def", "def")); - EXPECT_TRUE(EndWith("abc.def", ".def")); - EXPECT_FALSE(EndWith("abc.def", "abc")); - EXPECT_FALSE(EndWith("abc.def", "de")); +TEST(Util, MaxElement) { + EXPECT_EQ(3, MaxElement(std::vector{1, 2, 3})); + EXPECT_FLOAT_EQ(3.3, MaxElement(std::vector{1.1, 2.2, 3.3})); +} + +TEST(Util, MinElement) { + EXPECT_EQ(1, MinElement(std::vector{1, 2, 3})); + EXPECT_FLOAT_EQ(1.1, MinElement(std::vector{1.1, 2.2, 3.3})); } } // namespace util diff --git a/modules/common/vehicle_state/BUILD b/modules/common/vehicle_state/BUILD index f5247fd903c..489534e9637 100644 --- a/modules/common/vehicle_state/BUILD +++ b/modules/common/vehicle_state/BUILD @@ -13,7 +13,11 @@ cc_library( deps = [ "//modules/canbus/proto:canbus_proto", "//modules/common:log", + "//modules/common:macro", + "//modules/common/configs:vehicle_config_helper", + "//modules/common/math:box2d", "//modules/common/math:quaternion", + "//modules/common/status", "//modules/localization/common:localization_common", "@eigen//:eigen", ], diff --git a/modules/common/vehicle_state/vehicle_state.cc b/modules/common/vehicle_state/vehicle_state.cc index 3d952abfb1e..7a6596474a9 100644 --- a/modules/common/vehicle_state/vehicle_state.cc +++ b/modules/common/vehicle_state/vehicle_state.cc @@ -15,76 +15,128 @@ *****************************************************************************/ #include + +#include "Eigen/Core" + +#include "modules/common/configs/vehicle_config_helper.h" #include "modules/common/log.h" -#include "modules/common/math/quaternion.h" #include "modules/common/math/euler_angles_zxy.h" +#include "modules/common/math/quaternion.h" +#include "modules/common/util/string_util.h" #include "modules/common/vehicle_state/vehicle_state.h" #include "modules/localization/common/localization_gflags.h" namespace apollo { namespace common { -namespace vehicle_state { -VehicleState::VehicleState( - const localization::LocalizationEstimate &localization) { - ConstructExceptLinearVelocity(&localization); - if (localization.has_pose() && localization.pose().has_linear_velocity()) { - double linear_v_x = localization.pose().linear_velocity().x(); - double linear_v_y = localization.pose().linear_velocity().y(); - double linear_v_z = localization.pose().linear_velocity().z(); - linear_v_ = std::hypot(std::hypot(linear_v_x, linear_v_y), linear_v_z); - } - gear_ = canbus::Chassis::GEAR_NONE; -} +VehicleState::VehicleState() {} -VehicleState::VehicleState( - const localization::LocalizationEstimate *localization, - const canbus::Chassis *chassis) { - ConstructExceptLinearVelocity(localization); - if (chassis != nullptr && chassis->has_speed_mps()) { - linear_v_ = chassis->speed_mps(); +Status VehicleState::Update( + const localization::LocalizationEstimate &localization, + const canbus::Chassis &chassis) { + if (!ConstructExceptLinearVelocity(localization)) { + std::string msg = util::StrCat( + "Fail to update because ConstructExceptLinearVelocity error.", + "localization:\n", localization.DebugString()); + return Status(ErrorCode::LOCALIZATION_ERROR, msg); + } + if (chassis.has_header() && chassis.header().has_timestamp_sec()) { + timestamp_ = chassis.header().timestamp_sec(); } - if (chassis != nullptr && chassis->has_gear_location()) { - gear_ = chassis->gear_location(); + if (chassis.has_speed_mps()) { + linear_v_ = chassis.speed_mps(); + } + + if (chassis.has_gear_location()) { + gear_ = chassis.gear_location(); } else { gear_ = canbus::Chassis::GEAR_NONE; } + + InitAdcBoundingBox(); + + return Status::OK(); } -void VehicleState::ConstructExceptLinearVelocity( - const localization::LocalizationEstimate *localization) { - if (localization == nullptr || !localization->has_pose()) { +void VehicleState::InitAdcBoundingBox() { + const auto ¶m = + VehicleConfigHelper::instance()->GetConfig().vehicle_param(); + math::Vec2d position(x_, y_); + math::Vec2d vec_to_center( + (param.front_edge_to_center() - param.back_edge_to_center()) / 2.0, + (param.left_edge_to_center() - param.right_edge_to_center()) / 2.0); + math::Vec2d center(position + vec_to_center.rotate(heading_)); + adc_bounding_box_ = std::unique_ptr( + new math::Box2d(center, heading_, param.length(), param.width())); +} + +const math::Box2d &VehicleState::AdcBoundingBox() const { + CHECK(adc_bounding_box_) << "ADC bounding box not initialized"; + return *adc_bounding_box_; +} + +bool VehicleState::ConstructExceptLinearVelocity( + const localization::LocalizationEstimate &localization) { + if (!localization.has_pose()) { AERROR << "Invalid localization input."; - return; + return false; } - localization_ptr_ = localization; - if (localization->pose().has_position()) { - x_ = localization->pose().position().x(); - y_ = localization->pose().position().y(); - z_ = localization->pose().position().z(); + pose_ = localization.pose(); + if (localization.pose().has_position()) { + x_ = localization.pose().position().x(); + y_ = localization.pose().position().y(); + z_ = localization.pose().position().z(); } - const auto &orientation = localization->pose().orientation(); + const auto &orientation = localization.pose().orientation(); - if (localization->pose().has_heading()) { - heading_ = localization->pose().heading(); + if (localization.pose().has_heading()) { + heading_ = localization.pose().heading(); } else { - heading_ = common::math::QuaternionToHeading( - orientation.qw(), orientation.qx(), orientation.qy(), orientation.qz()); + heading_ = math::QuaternionToHeading(orientation.qw(), orientation.qx(), + orientation.qy(), orientation.qz()); } if (FLAGS_enable_map_reference_unify) { - angular_v_ = localization->pose().angular_velocity_vrf().z(); - linear_a_y_ = localization->pose().linear_acceleration_vrf().y(); + if (!localization.pose().has_angular_velocity_vrf()) { + AERROR << "localization.pose().has_angular_velocity_vrf() must be true " + "when FLAGS_enable_map_reference_unify is true."; + return false; + } + angular_v_ = localization.pose().angular_velocity_vrf().z(); + + if (!localization.pose().has_linear_acceleration_vrf()) { + AERROR << "localization.pose().has_linear_acceleration_vrf() must be " + "true when FLAGS_enable_map_reference_unify is true."; + return false; + } + linear_a_y_ = localization.pose().linear_acceleration_vrf().y(); } else { - angular_v_ = localization->pose().angular_velocity().z(); - linear_a_y_ = localization->pose().linear_acceleration().y(); + CHECK(localization.pose().has_angular_velocity()); + angular_v_ = localization.pose().angular_velocity().z(); + CHECK(localization.pose().has_linear_acceleration()); + linear_a_y_ = localization.pose().linear_acceleration().y(); } - common::math::EulerAnglesZXYd euler_angle(orientation.qw(), \ - orientation.qx(), orientation.qy(), orientation.qz()); + if (!(linear_v_ > 0.0)) { + kappa_ = 0.0; + } else { + kappa_ = angular_v_ / linear_v_; + } + + if (localization.pose().has_euler_angles()) { + roll_ = localization.pose().euler_angles().x(); + pitch_ = localization.pose().euler_angles().y(); + yaw_ = localization.pose().euler_angles().z(); + } else { + math::EulerAnglesZXYd euler_angle(orientation.qw(), orientation.qx(), + orientation.qy(), orientation.qz()); + roll_ = euler_angle.roll(); + pitch_ = euler_angle.pitch(); + yaw_ = euler_angle.yaw(); + } - pitch_ = euler_angle.pitch(); + return true; } double VehicleState::x() const { return x_; } @@ -93,17 +145,23 @@ double VehicleState::y() const { return y_; } double VehicleState::z() const { return z_; } +double VehicleState::roll() const { return roll_; } + double VehicleState::pitch() const { return pitch_; } +double VehicleState::yaw() const { return yaw_; } + double VehicleState::heading() const { return heading_; } +double VehicleState::kappa() const { return kappa_; } + double VehicleState::linear_velocity() const { return linear_v_; } double VehicleState::angular_velocity() const { return angular_v_; } double VehicleState::linear_acceleration() const { return linear_a_y_; } -canbus::Chassis::GearPosition VehicleState::gear() const { return gear_; } +double VehicleState::gear() const { return gear_; } void VehicleState::set_x(const double x) { x_ = x; } @@ -111,8 +169,13 @@ void VehicleState::set_y(const double y) { y_ = y; } void VehicleState::set_z(const double z) { z_ = z; } +void VehicleState::set_roll(const double roll) { roll_ = roll; } + void VehicleState::set_pitch(const double pitch) { pitch_ = pitch; } +// As of now, use heading instead of yaw angle +void VehicleState::set_yaw(const double yaw) { yaw_ = yaw; } + void VehicleState::set_heading(const double heading) { heading_ = heading; } void VehicleState::set_linear_velocity(const double linear_velocity) { @@ -127,7 +190,7 @@ void VehicleState::set_gear(const canbus::Chassis::GearPosition gear_position) { gear_ = gear_position; } -Eigen::Vector2d VehicleState::EstimateFuturePosition(const double t) const { +math::Vec2d VehicleState::EstimateFuturePosition(const double t) const { Eigen::Vector3d vec_distance(0.0, 0.0, 0.0); double v = linear_v_; if (gear_ == canbus::Chassis::GEAR_REVERSE) { @@ -143,22 +206,21 @@ Eigen::Vector2d VehicleState::EstimateFuturePosition(const double t) const { } // If we have rotation information, take it into consideration. - if (localization_ptr_ != nullptr && localization_ptr_->has_pose() && - localization_ptr_->pose().has_orientation()) { - const auto &orientation = localization_ptr_->pose().orientation(); + if (pose_.has_orientation()) { + const auto &orientation = pose_.orientation(); Eigen::Quaternion quaternion(orientation.qw(), orientation.qx(), orientation.qy(), orientation.qz()); Eigen::Vector3d pos_vec(x_, y_, z_); auto future_pos_3d = quaternion.toRotationMatrix() * vec_distance + pos_vec; - return Eigen::Vector2d(future_pos_3d[0], future_pos_3d[1]); + return math::Vec2d(future_pos_3d[0], future_pos_3d[1]); } // If no valid rotation information provided from localization, // return the estimated future position without rotation. - return Eigen::Vector2d(vec_distance[0] + x_, vec_distance[1] + y_); + return math::Vec2d(vec_distance[0] + x_, vec_distance[1] + y_); } -Eigen::Vector2d VehicleState::ComputeCOMPosition( +math::Vec2d VehicleState::ComputeCOMPosition( const double rear_to_com_distance) const { // set length as distance between rear wheel and center of mass. Eigen::Vector3d v(0.0, rear_to_com_distance, 0.0); @@ -167,18 +229,15 @@ Eigen::Vector2d VehicleState::ComputeCOMPosition( Eigen::Vector3d com_pos_3d = v + pos_vec; // If we have rotation information, take it into consideration. - if (localization_ptr_ != nullptr && localization_ptr_->has_pose() && - localization_ptr_->pose().has_orientation()) { - const auto &orientation = localization_ptr_->pose().orientation(); + if (pose_.has_orientation()) { + const auto &orientation = pose_.orientation(); Eigen::Quaternion quaternion(orientation.qw(), orientation.qx(), orientation.qy(), orientation.qz()); // Update the COM position with rotation com_pos_3d = quaternion.toRotationMatrix() * v + pos_vec; } - - return Eigen::Vector2d(com_pos_3d[0], com_pos_3d[1]); + return math::Vec2d(com_pos_3d[0], com_pos_3d[1]); } -} // namespace vehicle_state } // namespace common } // namespace apollo diff --git a/modules/common/vehicle_state/vehicle_state.h b/modules/common/vehicle_state/vehicle_state.h index 1be92035dc1..255a7adb914 100644 --- a/modules/common/vehicle_state/vehicle_state.h +++ b/modules/common/vehicle_state/vehicle_state.h @@ -21,18 +21,23 @@ #ifndef MODULES_COMMON_VEHICLE_STATE_VEHICLE_STATE_H_ #define MODULES_COMMON_VEHICLE_STATE_VEHICLE_STATE_H_ +#include +#include + #include "modules/canbus/proto/chassis.pb.h" #include "modules/localization/proto/localization.pb.h" -#include "Eigen/Core" +#include "modules/common/macro.h" +#include "modules/common/math/box2d.h" +#include "modules/common/math/vec2d.h" +#include "modules/common/status/status.h" /** - * @namespace apollo::common::vehicle_state - * @brief apollo::common::vehicle_state + * @namespace apollo::common + * @brief apollo::common */ namespace apollo { namespace common { -namespace vehicle_state { /** * @class VehicleState @@ -43,23 +48,24 @@ namespace vehicle_state { class VehicleState { public: /** - * @brief Empty constructor. - */ - VehicleState() = default; - - /** - * @brief Constructor only by information of localization. + * @brief Constructor by information of localization and chassis. * @param localization Localization information of the vehicle. + * @param chassis Chassis information of the vehicle. */ - explicit VehicleState(const localization::LocalizationEstimate &localization); + Status Update(const localization::LocalizationEstimate& localization, + const canbus::Chassis& chassis); /** - * @brief Constructor by information of localization and chassis. - * @param localization Localization information of the vehicle. - * @param chassis Chassis information of the vehicle. + * @brief Update VehicleState instance by protobuf files. + * @param localization_file the localization protobuf file. + * @param chassis_file The chassis protobuf file */ - VehicleState(const localization::LocalizationEstimate *localization, - const canbus::Chassis *chassis); + void Update(const std::string& localization_file, + const std::string& chassis_file); + + double timestamp() const { return timestamp_; } + + const localization::Pose& pose() const { return pose_; } /** * @brief Default destructor. @@ -84,12 +90,28 @@ class VehicleState { */ double z() const; + double kappa() const; + + /** + * @brief Get the vehicle roll angle. + * @return The euler roll angle. + */ + double roll() const; + /** * @brief Get the vehicle pitch angle. * @return The euler pitch angle. */ double pitch() const; + /** + * @brief Get the vehicle yaw angle. + * As of now, use the heading instead of yaw angle. + * Heading angle with East as zero, yaw angle has North as zero + * @return The euler yaw angle. + */ + double yaw() const; + /** * @brief Get the heading of vehicle position, which is the angle * between the vehicle's heading direction and the x-axis. @@ -120,7 +142,7 @@ class VehicleState { * @brief Get the vehicle's gear position. * @return The vehicle's gear position. */ - canbus::Chassis::GearPosition gear() const; + double gear() const; /** * @brief Set the x-coordinate of vehicle position. @@ -140,12 +162,24 @@ class VehicleState { */ void set_z(const double z); + /** + * @brief Set the vehicle roll angle. + * @param pitch The vehicle roll angle. + */ + void set_roll(const double roll); + /** * @brief Set the vehicle pitch angle. * @param pitch The vehicle pitch angle. */ void set_pitch(const double pitch); + /** + * @brief Set the vehicle yaw angle. + * @param pitch The vehicle yaw angle. + */ + void set_yaw(const double yaw); + /** * @brief Set the heading of vehicle position, which is the angle * between the vehicle's heading direction and the x-axis. @@ -154,6 +188,8 @@ class VehicleState { */ void set_heading(const double heading); + void set_kappa(const double kappa) { kappa_ = kappa; } + /** * @brief Set the vehicle's linear velocity. * @param linear_velocity The value to set the vehicle's linear velocity. @@ -179,44 +215,51 @@ class VehicleState { * @param t The length of time period. * @return The estimated future position in time t. */ - Eigen::Vector2d EstimateFuturePosition(const double t) const; + math::Vec2d EstimateFuturePosition(const double t) const; /** - * @brief Compute the position of center of mass(COM) of the vehicle, - * given the distance from rear wheels to the center of mass. - * @param rear_to_com_distance Distance from rear wheels to - * the vehicle's center of mass. - * @return The position of the vehicle's center of mass. - */ - Eigen::Vector2d ComputeCOMPosition(const double rear_to_com_distance) const; + * @brief Compute the position of center of mass(COM) of the vehicle, + * given the distance from rear wheels to the center of mass. + * @param rear_to_com_distance Distance from rear wheels to + * the vehicle's center of mass. + * @return The position of the vehicle's center of mass. + */ + math::Vec2d ComputeCOMPosition( + const double rear_to_com_distance) const; + + /** + * @brief Compute the bouding box of the vehicle. + * @return the bounding box of the vehicle represented by Box2d. + */ + const math::Box2d& AdcBoundingBox() const; private: - void ConstructExceptLinearVelocity( - const localization::LocalizationEstimate *localization); + DECLARE_SINGLETON(VehicleState); - double x_ = 0.0; + void InitAdcBoundingBox(); - double y_ = 0.0; + bool ConstructExceptLinearVelocity( + const localization::LocalizationEstimate& localization); + double x_ = 0.0; + double y_ = 0.0; double z_ = 0.0; - + double roll_ = 0.0; double pitch_ = 0.0; - + double yaw_ = 0.0; double heading_ = 0.0; - + // TODO(all): check the setting of kappa_ + double kappa_ = 0.0; double linear_v_ = 0.0; - double angular_v_ = 0.0; - + double timestamp_ = 0.0; double linear_a_y_ = 0.0; - canbus::Chassis::GearPosition gear_; - - const localization::LocalizationEstimate *localization_ptr_ = nullptr; + localization::Pose pose_; + std::unique_ptr adc_bounding_box_ = nullptr; }; -} // namespace vehicle_state } // namespace common } // namespace apollo -#endif /* MODULES_COMMON_VEHICLE_STATE_VEHICLE_STATE_H_ */ +#endif // MODULES_COMMON_VEHICLE_STATE_VEHICLE_STATE_H_ diff --git a/modules/common/vehicle_state/vehicle_state_test.cc b/modules/common/vehicle_state/vehicle_state_test.cc index 855ce49d6d1..a5f1876bfcf 100644 --- a/modules/common/vehicle_state/vehicle_state_test.cc +++ b/modules/common/vehicle_state/vehicle_state_test.cc @@ -38,7 +38,7 @@ class VehicleStateTest : public ::testing::Test { virtual void SetUp() { std::string localization_file = "modules/localization/testdata/3_localization_result_1.pb.txt"; - CHECK(::apollo::common::util::GetProtoFromFile(localization_file, + CHECK(common::util::GetProtoFromFile(localization_file, &localization_)); chassis_.set_speed_mps(3.0); chassis_.set_gear_location(canbus::Chassis::GEAR_DRIVE); @@ -51,25 +51,41 @@ class VehicleStateTest : public ::testing::Test { }; TEST_F(VehicleStateTest, Accessors) { - VehicleState vehicle_state(&localization_, &chassis_); - EXPECT_DOUBLE_EQ(vehicle_state.x(), 357.51331791372041); - EXPECT_DOUBLE_EQ(vehicle_state.y(), 96.165912376788725); - EXPECT_DOUBLE_EQ(vehicle_state.heading(), -1.8388082455104939); - EXPECT_DOUBLE_EQ(vehicle_state.pitch(), -0.010712737572581465); - EXPECT_DOUBLE_EQ(vehicle_state.linear_velocity(), 3.0); - EXPECT_DOUBLE_EQ(vehicle_state.angular_velocity(), -0.0079623083093763921); - EXPECT_DOUBLE_EQ(vehicle_state.linear_acceleration(), -0.079383290718229638); - EXPECT_DOUBLE_EQ(vehicle_state.gear(), canbus::Chassis::GEAR_DRIVE); + auto* vehicle_state = VehicleState::instance(); + vehicle_state->Update(localization_, chassis_); + EXPECT_DOUBLE_EQ(vehicle_state->x(), 357.51331791372041); + EXPECT_DOUBLE_EQ(vehicle_state->y(), 96.165912376788725); + EXPECT_DOUBLE_EQ(vehicle_state->heading(), -1.8388082455104939); + EXPECT_DOUBLE_EQ(vehicle_state->roll(), 0.047026695713820919); + EXPECT_DOUBLE_EQ(vehicle_state->pitch(), -0.010712737572581465); + EXPECT_DOUBLE_EQ(vehicle_state->yaw(), 2.8735807348741953); + EXPECT_DOUBLE_EQ(vehicle_state->linear_velocity(), 3.0); + EXPECT_DOUBLE_EQ(vehicle_state->angular_velocity(), -0.0079623083093763921); + EXPECT_DOUBLE_EQ(vehicle_state->linear_acceleration(), -0.079383290718229638); + EXPECT_DOUBLE_EQ(vehicle_state->gear(), canbus::Chassis::GEAR_DRIVE); } TEST_F(VehicleStateTest, EstimateFuturePosition) { - VehicleState vehicle_state(&localization_, &chassis_); - Eigen::Vector2d future_position = vehicle_state.EstimateFuturePosition(1.0); - EXPECT_NEAR(future_position[0], 356.707, 1e-3); - EXPECT_NEAR(future_position[1], 93.276, 1e-3); - future_position = vehicle_state.EstimateFuturePosition(2.0); - EXPECT_NEAR(future_position[0], 355.879, 1e-3); - EXPECT_NEAR(future_position[1], 90.393, 1e-3); + auto* vehicle_state = VehicleState::instance(); + vehicle_state->Update(localization_, chassis_); + common::math::Vec2d future_position = + vehicle_state->EstimateFuturePosition(1.0); + EXPECT_NEAR(future_position.x(), 356.707, 1e-3); + EXPECT_NEAR(future_position.y(), 93.276, 1e-3); + future_position = vehicle_state->EstimateFuturePosition(2.0); + EXPECT_NEAR(future_position.x(), 355.879, 1e-3); + EXPECT_NEAR(future_position.y(), 90.393, 1e-3); +} + +TEST_F(VehicleStateTest, AdcBoudingBox) { + auto* vehicle_state = VehicleState::instance(); + vehicle_state->Update(localization_, chassis_); + const auto& adc_box = vehicle_state->AdcBoundingBox(); + EXPECT_FLOAT_EQ(4.933, adc_box.length()); + EXPECT_FLOAT_EQ(2.11, adc_box.width()); + EXPECT_FLOAT_EQ(-1.8388083, adc_box.heading()); + EXPECT_FLOAT_EQ(357.13635, adc_box.center().x()); + EXPECT_FLOAT_EQ(94.793236, adc_box.center().y()); } } // namespace vehicle_state diff --git a/modules/control/BUILD b/modules/control/BUILD index 82d3efddc26..0b35778cdad 100644 --- a/modules/control/BUILD +++ b/modules/control/BUILD @@ -28,7 +28,6 @@ cc_library( "//modules/control/common", "//modules/control/controller", "//modules/control/proto:control_proto", - "//modules/decision/proto:decision_proto", "//modules/localization/proto:localization_proto", "//modules/perception/proto:perception_proto", "//modules/planning/proto:planning_proto", @@ -56,7 +55,6 @@ cc_test( data = ["//modules/control:control_testdata"], deps = [ ":lib_control", - "//modules/common/adapters:adapter_manager", "@gtest//:main", ], ) diff --git a/modules/control/common/BUILD b/modules/control/common/BUILD index 8e9f0835f47..51afe8ce99d 100644 --- a/modules/control/common/BUILD +++ b/modules/control/common/BUILD @@ -66,6 +66,38 @@ cc_library( ], ) +cc_library( + name = "pid_BC_controller", + srcs = [ + "pid_BC_controller.cc", + ], + hdrs = [ + "pid_BC_controller.h", + ], + deps = [ + ":pid_controller", + "//modules/common:log", + "//modules/common/math", + "//modules/control/proto:control_proto", + ], +) + +cc_library( + name = "pid_IC_controller", + srcs = [ + "pid_IC_controller.cc", + ], + hdrs = [ + "pid_IC_controller.h", + ], + deps = [ + ":pid_controller", + "//modules/common:log", + "//modules/common/math", + "//modules/control/proto:control_proto", + ], +) + cc_library( name = "trajectory_analyzer", srcs = [ @@ -78,7 +110,7 @@ cc_library( "//modules/common:log", "//modules/common/math:linear_interpolation", "//modules/common/math:search", - "//modules/common/proto:path_point_proto", + "//modules/common/proto:pnc_point_proto", "//modules/common/vehicle_state", "//modules/planning/proto:planning_proto", ], @@ -155,6 +187,36 @@ cc_test( ], ) +cc_test( + name = "pid_BC_controller_test", + size = "small", + srcs = [ + "pid_BC_controller_test.cc", + ], + data = ["//modules/control:control_testdata"], + deps = [ + ":pid_BC_controller", + "//modules/common/util", + "//modules/control/proto:control_proto", + "@gtest//:main", + ], +) + +cc_test( + name = "pid_IC_controller_test", + size = "small", + srcs = [ + "pid_IC_controller_test.cc", + ], + data = ["//modules/control:control_testdata"], + deps = [ + ":pid_IC_controller", + "//modules/common/util", + "//modules/control/proto:control_proto", + "@gtest//:main", + ], +) + cc_test( name = "trajectory_analyzer_test", size = "small", diff --git a/modules/control/common/control_gflags.cc b/modules/control/common/control_gflags.cc index 8355d163849..983ff97ef50 100644 --- a/modules/control/common/control_gflags.cc +++ b/modules/control/common/control_gflags.cc @@ -16,13 +16,14 @@ #include "modules/control/common/control_gflags.h" -DEFINE_double(min_alert_interval, 1., - "minimum alert interval to prevent alerting too frequently."); DEFINE_string(control_conf_file, "modules/control/conf/lincoln.pb.txt", "default control conf data file"); + +DEFINE_string(adapter_config_filename, "modules/control/conf/adapter.conf", + "The adapter config file"); + DEFINE_bool(enable_csv_debug, false, "True to write out csv debug file."); DEFINE_bool(enable_speed_station_preview, true, "enable speed/station preview"); -DEFINE_bool(enable_control_watchdog, true, "True to enable control watchdog"); DEFINE_string(node_name, "control", "The control node name in proto"); DEFINE_bool(is_control_test_mode, false, "True to run control in test mode"); DEFINE_bool(use_preview_speed_for_table, false, @@ -46,3 +47,4 @@ DEFINE_double(steer_angle_rate, 100.0, "Steer angle change rate in percentage."); DEFINE_bool(enable_gain_scheduler, false, "Enable gain scheduler for higher vechile speed"); +DEFINE_bool(set_steer_limit, false, "Set steer limit"); diff --git a/modules/control/common/control_gflags.h b/modules/control/common/control_gflags.h index 41295d84e3f..bac85ed83a2 100644 --- a/modules/control/common/control_gflags.h +++ b/modules/control/common/control_gflags.h @@ -22,13 +22,13 @@ // data file DECLARE_string(control_conf_file); -DECLARE_double(min_alert_interval); +DECLARE_string(adapter_config_filename); + DECLARE_bool(enable_csv_debug); // temporary gflag for test purpose DECLARE_bool(enable_speed_station_preview); -DECLARE_bool(enable_control_watchdog); DECLARE_string(node_name); DECLARE_bool(is_control_test_mode); DECLARE_bool(use_preview_speed_for_table); @@ -44,5 +44,6 @@ DECLARE_double(max_abs_speed_when_stopped); DECLARE_double(steer_angle_rate); DECLARE_bool(enable_gain_scheduler); +DECLARE_bool(set_steer_limit); #endif // MODULES_CONTROL_COMMON_CONTROL_GFLAGS_H_ diff --git a/modules/control/common/hysteresis_filter_test.cc b/modules/control/common/hysteresis_filter_test.cc index d6fca502764..b3e2943aafe 100644 --- a/modules/control/common/hysteresis_filter_test.cc +++ b/modules/control/common/hysteresis_filter_test.cc @@ -87,8 +87,3 @@ TEST(HysteresisFilter, TriangleHysteresis) { } // namespace control } // namespace apollo - -int main(int argc, char **argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/modules/control/common/interpolation_1d_test.cc b/modules/control/common/interpolation_1d_test.cc index 78f34dcfc21..f368835e79d 100644 --- a/modules/control/common/interpolation_1d_test.cc +++ b/modules/control/common/interpolation_1d_test.cc @@ -34,7 +34,7 @@ class Interpolation1DTest : public ::testing::Test { virtual void SetUp() { std::string control_conf_file = "modules/control/testdata/conf/lincoln.pb.txt"; - CHECK(::apollo::common::util::GetProtoFromFile(control_conf_file, + CHECK(common::util::GetProtoFromFile(control_conf_file, &control_conf_)); } diff --git a/modules/control/common/interpolation_2d_test.cc b/modules/control/common/interpolation_2d_test.cc index e1dd61635bf..8d0c54fec1e 100644 --- a/modules/control/common/interpolation_2d_test.cc +++ b/modules/control/common/interpolation_2d_test.cc @@ -32,7 +32,7 @@ class Interpolation2DTest : public ::testing::Test { virtual void SetUp() { std::string control_conf_file = "modules/control/testdata/conf/lincoln.pb.txt"; - CHECK(::apollo::common::util::GetProtoFromFile(control_conf_file, + CHECK(common::util::GetProtoFromFile(control_conf_file, &control_conf_)); } diff --git a/modules/control/common/pid_BC_controller.cc b/modules/control/common/pid_BC_controller.cc new file mode 100644 index 00000000000..3c51fc0c770 --- /dev/null +++ b/modules/control/common/pid_BC_controller.cc @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/control/common/pid_BC_controller.h" + +#include + +#include "modules/common/log.h" + +#include "modules/common/math/math_utils.h" + +namespace apollo { +namespace control { + +double PIDBCController::Control(const double error, const double dt) { + if (dt <= 0) { + AWARN << "dt <= 0, will use the last output"; + return previous_output_; + } + double diff = 0; + double output = 0; + + if (first_hit_) { + first_hit_ = false; + } else { + diff = (error - previous_error_) / dt; + } + + // backward caculation + if (!integrator_enabled_) { + integral_ = 0; + } else { + double u = error * kp_ + integral_ + error * dt * ki_ + diff * kd_; + double aw_term = common::math::Clamp(u, output_saturation_high_, + output_saturation_low_) - + u; + if (aw_term > 1e-6) { + output_saturation_status_ = -1; + } else if (aw_term < -1e-6) { + output_saturation_status_ = 1; + } else { + output_saturation_status_ = 0; + } + integral_ += kaw_ * aw_term + error * dt; + } + + previous_error_ = error; + output = common::math::Clamp( + error * kp_ + integral_ + diff * kd_, output_saturation_high_, + output_saturation_low_); // Ki already applied + previous_output_ = output; + return output; +} + +int PIDBCController::OutputSaturationStatus() { + return output_saturation_status_; +} + +} // namespace control +} // namespace apollo diff --git a/modules/control/common/pid_BC_controller.h b/modules/control/common/pid_BC_controller.h new file mode 100644 index 00000000000..5546ab9d7ef --- /dev/null +++ b/modules/control/common/pid_BC_controller.h @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file pid_controller.h + * @brief Defines the PIDBCController class. + */ + +#ifndef MODULES_CONTROL_COMMON_PID_BACKWARD_CACULATION_CONTROLLER_H_ +#define MODULES_CONTROL_COMMON_PID_BACKWARD_CACULATION_CONTROLLER_H_ + +#include "modules/control/common/pid_controller.h" +#include "modules/control/proto/pid_conf.pb.h" +/** + * @namespace apollo::control + * @brief apollo::control + */ +namespace apollo { +namespace control { + +/** + * @class PIDBCController + * @brief A proportional–integral–derivative controller for speed and steering +with backward-caculation-anti-windup + */ +class PIDBCController : public PIDController { + public: + /** + * @brief compute control value based on the error, + with backward-caculation-anti-windup + * @param error error value, the difference between + * a desired value and a measured value + * @param dt sampling time interval + * @return control value based on PID terms + */ + virtual double Control(const double error, const double dt); + + virtual int OutputSaturationStatus(); + + private: +}; + +} // namespace control +} // namespace apollo + +#endif // MODULES_CONTROL_COMMON_PID_BACKWARD_CACULATION_CONTROLLER_H_ diff --git a/modules/control/common/pid_BC_controller_test.cc b/modules/control/common/pid_BC_controller_test.cc new file mode 100644 index 00000000000..e13841ffc13 --- /dev/null +++ b/modules/control/common/pid_BC_controller_test.cc @@ -0,0 +1,78 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/control/common/pid_BC_controller.h" +#include +#include "gtest/gtest.h" +#include "modules/common/util/file.h" +#include "modules/control/proto/control_conf.pb.h" +#include "modules/control/proto/pid_conf.pb.h" + +namespace apollo { +namespace control { + +class PidBCControllerTest : public ::testing::Test { + public: + virtual void SetUp() { + std::string control_conf_file = + "modules/control/testdata/conf/lincoln.pb.txt"; + CHECK(common::util::GetProtoFromFile(control_conf_file, + &control_conf_)); + lon_controller_conf_ = control_conf_.lon_controller_conf(); + } + + protected: + ControlConf control_conf_; + LonControllerConf lon_controller_conf_; +}; + +TEST_F(PidBCControllerTest, StationPidController) { + PidConf pid_conf = lon_controller_conf_.station_pid_conf(); + PIDBCController pid_BC_controller; + pid_BC_controller.Init(pid_conf); + pid_BC_controller.Reset(); + double dt = 1; + EXPECT_NEAR(pid_BC_controller.Control(0.0, dt), 0.0, 1e-6); + pid_BC_controller.Reset(); + EXPECT_NEAR(pid_BC_controller.Control(0.1, dt), 0.01, 1e-6); + pid_BC_controller.Reset(); + double control_value = pid_BC_controller.Control(-0.1, dt); + EXPECT_NEAR(control_value, -0.01, 1e-6); + dt = 0.0; + EXPECT_EQ(pid_BC_controller.Control(100, dt), control_value); +} + +TEST_F(PidBCControllerTest, SpeedPidController) { + PidConf pid_conf = lon_controller_conf_.low_speed_pid_conf(); + PIDBCController pid_BC_controller; + pid_BC_controller.Init(pid_conf); + pid_BC_controller.Reset(); + double dt = 0.01; + EXPECT_NEAR(pid_BC_controller.Control(0.0, dt), 0.0, 1e-6); + pid_BC_controller.Reset(); + EXPECT_NEAR(pid_BC_controller.Control(0.1, dt), 0.151, 1e-6); + pid_BC_controller.Reset(); + EXPECT_NEAR(pid_BC_controller.Control(-0.1, dt), -0.151, 1e-6); + pid_BC_controller.Reset(); + EXPECT_NEAR(pid_BC_controller.Control(500.0, dt), 3.0, 1e-6); + EXPECT_EQ(pid_BC_controller.OutputSaturationStatus(), 1); + pid_BC_controller.Reset(); + EXPECT_NEAR(pid_BC_controller.Control(-500.0, dt), -3.0, 1e-6); + EXPECT_EQ(pid_BC_controller.OutputSaturationStatus(), -1); +} + +} // namespace control +} // namespace apollo diff --git a/modules/control/common/pid_IC_controller.cc b/modules/control/common/pid_IC_controller.cc new file mode 100644 index 00000000000..251b92dfbe0 --- /dev/null +++ b/modules/control/common/pid_IC_controller.cc @@ -0,0 +1,77 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/control/common/pid_IC_controller.h" + +#include +#include + +#include "modules/common/log.h" +#include "modules/common/math/math_utils.h" + +namespace apollo { +namespace control { + +double PIDICController::Control(const double error, const double dt) { + if (dt <= 0) { + AWARN << "dt <= 0, will use the last output"; + return previous_output_; + } + double diff = 0; + double output = 0; + + if (first_hit_) { + first_hit_ = false; + } else { + diff = (error - previous_error_) / dt; + } + // integral clamping + if (!integrator_enabled_) { + integral_ = 0; + } else { + double u = error * kp_ + integral_ + error * dt * ki_ + diff * kd_; + if (((error * u) > 0) && + ((u > output_saturation_high_) || (u < output_saturation_low_))) { + } else { + // Only update integral then + integral_ += error * dt * ki_; + } + } + + previous_error_ = error; + output = error * kp_ + integral_ + diff * kd_; + + if (output >= output_saturation_high_) { + output_saturation_status_ = 1; + } else if (output <= output_saturation_low_) { + output_saturation_status_ = -1; + } else { + output_saturation_status_ = 0; + } + + output = common::math::Clamp( + error * kp_ + integral_ + diff * kd_, output_saturation_high_, + output_saturation_low_); // Ki already applied + previous_output_ = output; + return output; +} + +int PIDICController::OutputSaturationStatus() { + return output_saturation_status_; +} + +} // namespace control +} // namespace apollo diff --git a/modules/control/common/pid_IC_controller.h b/modules/control/common/pid_IC_controller.h new file mode 100644 index 00000000000..79fb3fd6feb --- /dev/null +++ b/modules/control/common/pid_IC_controller.h @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file pid_controller.h + * @brief Defines the PIDICController class. + */ + +#ifndef MODULES_CONTROL_COMMON_PID_INTEGRAL_CLAMPING_CONTROLLER_H_ +#define MODULES_CONTROL_COMMON_PID_INTEGRAL_CLAMPING_CONTROLLER_H_ + +#include "modules/control/common/pid_controller.h" +#include "modules/control/proto/pid_conf.pb.h" + +/** + * @namespace apollo::control + * @brief apollo::control + */ +namespace apollo { +namespace control { + +/** + * @class PIDICController + * @brief A proportional–integral–derivative controller for speed and steering +with integral-clamping-anti-windup + */ +class PIDICController : public PIDController { + public: + /** + * @brief compute control value based on the error, + with integral-clamping-anti-windup + * @param error error value, the difference between + * a desired value and a measured value + * @param dt sampling time interval + * @return control value based on PID terms + */ + virtual double Control(const double error, const double dt); + + virtual int OutputSaturationStatus(); + + private: +}; + +} // namespace control +} // namespace apollo + +#endif // MODULES_CONTROL_COMMON_PID_INTEGRAL_CLAMPING_CONTROLLER_H_ diff --git a/modules/control/common/pid_IC_controller_test.cc b/modules/control/common/pid_IC_controller_test.cc new file mode 100644 index 00000000000..eae9ffb6a93 --- /dev/null +++ b/modules/control/common/pid_IC_controller_test.cc @@ -0,0 +1,79 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/control/common/pid_IC_controller.h" + +#include + +#include "gtest/gtest.h" +#include "modules/common/util/file.h" +#include "modules/control/proto/control_conf.pb.h" +#include "modules/control/proto/pid_conf.pb.h" + +namespace apollo { +namespace control { + +class PidICControllerTest : public ::testing::Test { + public: + virtual void SetUp() { + std::string control_conf_file = + "modules/control/testdata/conf/lincoln.pb.txt"; + CHECK(common::util::GetProtoFromFile(control_conf_file, + &control_conf_)); + lon_controller_conf_ = control_conf_.lon_controller_conf(); + } + + protected: + ControlConf control_conf_; + LonControllerConf lon_controller_conf_; +}; + +TEST_F(PidICControllerTest, StationPidController) { + PidConf pid_conf = lon_controller_conf_.station_pid_conf(); + PIDICController pid_IC_controller; + pid_IC_controller.Init(pid_conf); + pid_IC_controller.Reset(); + double dt = 0.01; + EXPECT_NEAR(pid_IC_controller.Control(0.0, dt), 0.0, 1e-6); + pid_IC_controller.Reset(); + EXPECT_NEAR(pid_IC_controller.Control(0.1, dt), 0.01, 1e-6); + pid_IC_controller.Reset(); + double control_value = pid_IC_controller.Control(-0.1, dt); + EXPECT_NEAR(control_value, -0.01, 1e-6); + dt = 0.0; + EXPECT_EQ(pid_IC_controller.Control(100, dt), control_value); +} +TEST_F(PidICControllerTest, SpeedPidController) { + PidConf pid_conf = lon_controller_conf_.low_speed_pid_conf(); + PIDICController pid_IC_controller; + pid_IC_controller.Init(pid_conf); + pid_IC_controller.Reset(); + double dt = 0.01; + EXPECT_NEAR(pid_IC_controller.Control(0.0, dt), 0.0, 1e-6); + pid_IC_controller.Reset(); + EXPECT_NEAR(pid_IC_controller.Control(0.1, dt), 0.1505, 1e-6); + pid_IC_controller.Reset(); + EXPECT_NEAR(pid_IC_controller.Control(-0.1, dt), -0.1505, 1e-6); + pid_IC_controller.Reset(); + dt = 2; + EXPECT_NEAR(pid_IC_controller.Control(0.1, dt), 0.25, 1e-6); + EXPECT_EQ(pid_IC_controller.OutputSaturationStatus(), 0); + EXPECT_NEAR(pid_IC_controller.Control(10, dt), 3, 1e-6); + EXPECT_EQ(pid_IC_controller.OutputSaturationStatus(), 1); +} + +} // namespace control +} // namespace apollo diff --git a/modules/control/common/pid_controller.cc b/modules/control/common/pid_controller.cc index 926e1271a5d..dd456e52a00 100644 --- a/modules/control/common/pid_controller.cc +++ b/modules/control/common/pid_controller.cc @@ -25,7 +25,7 @@ namespace control { double PIDController::Control(const double error, const double dt) { if (dt <= 0) { - AWARN << "dt <= 0, will use the last output"; + AWARN << "dt <= 0, will use the last output, dt: " << dt; return previous_output_; } double diff = 0; @@ -36,20 +36,20 @@ double PIDController::Control(const double error, const double dt) { } else { diff = (error - previous_error_) / dt; } - // integral handling + // integral hold if (!integrator_enabled_) { integral_ = 0; } else if (!integrator_hold_) { integral_ += error * dt * ki_; // apply Ki before integrating to avoid steps when change Ki at steady state - if (integral_ > saturation_high_) { - integral_ = saturation_high_; - saturation_status_ = 1; - } else if (integral_ < saturation_low_) { - integral_ = saturation_low_; - saturation_status_ = -1; + if (integral_ > integrator_saturation_high_) { + integral_ = integrator_saturation_high_; + integrator_saturation_status_ = 1; + } else if (integral_ < integrator_saturation_low_) { + integral_ = integrator_saturation_low_; + integrator_saturation_status_ = -1; } else { - saturation_status_ = 0; + integrator_saturation_status_ = 0; } } previous_error_ = error; @@ -63,6 +63,8 @@ void PIDController::Reset() { previous_output_ = 0.0; integral_ = 0.0; first_hit_ = true; + integrator_saturation_status_ = 0; + output_saturation_status_ = 0; } void PIDController::Init(const PidConf &pid_conf) { @@ -71,11 +73,15 @@ void PIDController::Init(const PidConf &pid_conf) { integral_ = 0.0; first_hit_ = true; integrator_enabled_ = pid_conf.integrator_enable(); - saturation_high_ = std::fabs(pid_conf.integrator_saturation_level()); - saturation_low_ = -std::fabs(pid_conf.integrator_saturation_level()); - saturation_status_ = 0; + integrator_saturation_high_ = + std::fabs(pid_conf.integrator_saturation_level()); + integrator_saturation_low_ = + -std::fabs(pid_conf.integrator_saturation_level()); + integrator_saturation_status_ = 0; integrator_hold_ = false; - + output_saturation_high_ = std::fabs(pid_conf.output_saturation_level()); + output_saturation_low_ = -std::fabs(pid_conf.output_saturation_level()); + output_saturation_status_ = 0; SetPID(pid_conf); } @@ -83,11 +89,16 @@ void PIDController::SetPID(const PidConf &pid_conf) { kp_ = pid_conf.kp(); ki_ = pid_conf.ki(); kd_ = pid_conf.kd(); + kaw_ = pid_conf.kaw(); } -int PIDController::saturation_status() const { return saturation_status_; } +int PIDController::IntegratorSaturationStatus() const { + return integrator_saturation_status_; +} -bool PIDController::integrator_hold() const { return integrator_hold_; } +bool PIDController::IntegratorHold() const { + return integrator_hold_; +} } // namespace control } // namespace apollo diff --git a/modules/control/common/pid_controller.h b/modules/control/common/pid_controller.h index 1d65fd8e7ac..2540fee4494 100644 --- a/modules/control/common/pid_controller.h +++ b/modules/control/common/pid_controller.h @@ -22,7 +22,7 @@ #ifndef MODULES_CONTROL_COMMON_PID_CONTROLLER_H_ #define MODULES_CONTROL_COMMON_PID_CONTROLLER_H_ -#include "modules/control/proto/lon_controller_conf.pb.h" +#include "modules/control/proto/pid_conf.pb.h" /** * @namespace apollo::control @@ -34,14 +34,10 @@ namespace control { /** * @class PIDController * @brief A proportional–integral–derivative controller for speed and steering + using defualt integral hold */ class PIDController { public: - /** - * @brief constructor - */ - PIDController() = default; - /** * @brief initialize pid controller * @param pid_conf configuration for pid controller @@ -67,33 +63,38 @@ class PIDController { * @param dt sampling time interval * @return control value based on PID terms */ - double Control(const double error, const double dt); + virtual double Control(const double error, const double dt); /** * @brief get saturation status * @return saturation status */ - int saturation_status() const; + int IntegratorSaturationStatus() const; /** * @brief get status that if integrator is hold * @return if integrator is hold return true */ - bool integrator_hold() const; + bool IntegratorHold() const; - private: + protected: double kp_ = 0.0; double ki_ = 0.0; double kd_ = 0.0; + double kaw_ = 0.0; double previous_error_ = 0.0; double previous_output_ = 0.0; double integral_ = 0.0; - double saturation_high_ = 0.0; - double saturation_low_ = 0.0; + double integrator_saturation_high_ = 0.0; + double integrator_saturation_low_ = 0.0; bool first_hit_ = false; bool integrator_enabled_ = false; bool integrator_hold_ = false; - int saturation_status_ = 0; + int integrator_saturation_status_ = 0; + // Only used for pid_BC_controller and pid_IC_controller + double output_saturation_high_ = 0.0; + double output_saturation_low_ = 0.0; + int output_saturation_status_ = 0; }; } // namespace control diff --git a/modules/control/common/pid_controller_test.cc b/modules/control/common/pid_controller_test.cc index b34d8101634..c687d8fbcba 100644 --- a/modules/control/common/pid_controller_test.cc +++ b/modules/control/common/pid_controller_test.cc @@ -16,12 +16,13 @@ #include "modules/control/common/pid_controller.h" +#include #include #include "gtest/gtest.h" #include "modules/common/util/file.h" #include "modules/control/proto/control_conf.pb.h" -#include "modules/control/proto/lon_controller_conf.pb.h" +#include "modules/control/proto/pid_conf.pb.h" namespace apollo { namespace control { @@ -31,7 +32,7 @@ class PidControllerTest : public ::testing::Test { virtual void SetUp() { std::string control_conf_file = "modules/control/testdata/conf/lincoln.pb.txt"; - CHECK(::apollo::common::util::GetProtoFromFile(control_conf_file, + CHECK(common::util::GetProtoFromFile(control_conf_file, &control_conf_)); lon_controller_conf_ = control_conf_.lon_controller_conf(); } @@ -55,7 +56,7 @@ TEST_F(PidControllerTest, StationPidController) { EXPECT_NEAR(control_value, -0.01, 1e-6); dt = 0.0; EXPECT_EQ(pid_controller.Control(100, dt), control_value); - EXPECT_EQ(pid_controller.integrator_hold(), false); + EXPECT_EQ(pid_controller.IntegratorHold(), false); } TEST_F(PidControllerTest, SpeedPidController) { @@ -71,11 +72,10 @@ TEST_F(PidControllerTest, SpeedPidController) { EXPECT_NEAR(pid_controller.Control(-0.1, dt), -0.1505, 1e-6); pid_controller.Reset(); EXPECT_NEAR(pid_controller.Control(500.0, dt), 750.3, 1e-6); - pid_controller.Reset(); - EXPECT_EQ(pid_controller.saturation_status(), 1); + EXPECT_EQ(pid_controller.IntegratorSaturationStatus(), 1); pid_controller.Reset(); EXPECT_NEAR(pid_controller.Control(-500.0, dt), -750.3, 1e-6); - EXPECT_EQ(pid_controller.saturation_status(), -1); + EXPECT_EQ(pid_controller.IntegratorSaturationStatus(), -1); } } // namespace control diff --git a/modules/control/common/trajectory_analyzer.cc b/modules/control/common/trajectory_analyzer.cc index 46d2fbf5e8a..3b9f5e6e31f 100644 --- a/modules/control/common/trajectory_analyzer.cc +++ b/modules/control/common/trajectory_analyzer.cc @@ -16,6 +16,7 @@ #include "modules/control/common/trajectory_analyzer.h" +#include #include #include @@ -24,7 +25,7 @@ #include "modules/common/math/math_utils.h" #include "modules/common/math/search.h" -namespace math = ::apollo::common::math; +namespace math = apollo::common::math; using apollo::common::PathPoint; using apollo::common::TrajectoryPoint; @@ -35,20 +36,17 @@ namespace { // Squared distance from the point to (x, y). double PointDistanceSquare(const TrajectoryPoint &point, const double x, const double y) { - const double dx = point.x() - x; - const double dy = point.y() - y; + const double dx = point.path_point().x() - x; + const double dy = point.path_point().y() - y; return dx * dx + dy * dy; } PathPoint TrajectoryPointToPathPoint(const TrajectoryPoint &point) { - PathPoint result; - if (point.has_x()) result.set_x(point.x()); - if (point.has_y()) result.set_y(point.y()); - if (point.has_z()) result.set_z(point.z()); - if (point.has_theta()) result.set_theta(point.theta()); - if (point.has_kappa()) result.set_kappa(point.kappa()); - if (point.has_s()) result.set_s(point.s()); - return result; + if (point.has_path_point()) { + return point.path_point(); + } else { + return PathPoint(); + } } } // namespace @@ -58,22 +56,10 @@ TrajectoryAnalyzer::TrajectoryAnalyzer( header_time_ = planning_published_trajectory->header().timestamp_sec(); seq_num_ = planning_published_trajectory->header().sequence_num(); - int num_points = planning_published_trajectory->adc_trajectory_point_size(); - trajectory_points_.reserve(num_points); - - for (const auto &published_trajectory_point : - planning_published_trajectory->adc_trajectory_point()) { - TrajectoryPoint point; - point.set_s(published_trajectory_point.accumulated_s()); - point.set_x(published_trajectory_point.x()); - point.set_y(published_trajectory_point.y()); - point.set_theta(published_trajectory_point.theta()); - point.set_kappa(published_trajectory_point.curvature()); - point.set_v(published_trajectory_point.speed()); - point.set_a(published_trajectory_point.acceleration_s()); - point.set_relative_time(published_trajectory_point.relative_time()); - - trajectory_points_.push_back(std::move(point)); + for (int i = 0; i < planning_published_trajectory->trajectory_point_size(); + ++i) { + trajectory_points_.push_back( + planning_published_trajectory->trajectory_point(i)); } } @@ -95,8 +81,9 @@ PathPoint TrajectoryAnalyzer::QueryMatchedPathPoint(const double x, index_min + 1 == trajectory_points_.size() ? index_min : index_min + 1; if (index_start == index_end || - math::DoubleCompare(trajectory_points_[index_start].s(), - trajectory_points_[index_end].s()) == 0) { + math::DoubleCompare(trajectory_points_[index_start].path_point().s(), + trajectory_points_[index_end].path_point().s()) == + 0) { return TrajectoryPointToPathPoint(trajectory_points_[index_start]); } @@ -182,9 +169,8 @@ TrajectoryPoint TrajectoryAnalyzer::QueryNearestPointByRelativeTime( auto it_lower = it_low - 1; if (it_low->relative_time() - t < t - it_lower->relative_time()) { return *it_low; - } else { - return *it_lower; } + return *it_lower; } TrajectoryPoint TrajectoryAnalyzer::QueryNearestPointByPosition( @@ -214,21 +200,28 @@ PathPoint TrajectoryAnalyzer::FindMinDistancePoint(const TrajectoryPoint &p0, // given the fact that the discretized trajectory is dense enough, // we assume linear trajectory between consecutive trajectory points. auto dist_square = [&p0, &p1, &x, &y](const double s) { - double px = math::lerp(p0.x(), p0.s(), p1.x(), p1.s(), s); - double py = math::lerp(p0.y(), p0.s(), p1.y(), p1.s(), s); + double px = math::lerp(p0.path_point().x(), p0.path_point().s(), + p1.path_point().x(), p1.path_point().s(), s); + double py = math::lerp(p0.path_point().y(), p0.path_point().s(), + p1.path_point().y(), p1.path_point().s(), s); double dx = px - x; double dy = py - y; return dx * dx + dy * dy; }; - PathPoint p = TrajectoryPointToPathPoint(p0); - double s = math::GoldenSectionSearch(dist_square, p0.s(), p1.s()); + PathPoint p = p0.path_point(); + double s = math::GoldenSectionSearch(dist_square, p0.path_point().s(), + p1.path_point().s()); p.set_s(s); - p.set_x(math::lerp(p0.x(), p0.s(), p1.x(), p1.s(), s)); - p.set_y(math::lerp(p0.y(), p0.s(), p1.y(), p1.s(), s)); - p.set_theta(math::slerp(p0.theta(), p0.s(), p1.theta(), p1.s(), s)); + p.set_x(math::lerp(p0.path_point().x(), p0.path_point().s(), + p1.path_point().x(), p1.path_point().s(), s)); + p.set_y(math::lerp(p0.path_point().y(), p0.path_point().s(), + p1.path_point().y(), p1.path_point().s(), s)); + p.set_theta(math::slerp(p0.path_point().theta(), p0.path_point().s(), + p1.path_point().theta(), p1.path_point().s(), s)); // approximate the curvature at the intermediate point - p.set_kappa(math::lerp(p0.kappa(), p0.s(), p1.kappa(), p1.s(), s)); + p.set_kappa(math::lerp(p0.path_point().kappa(), p0.path_point().s(), + p1.path_point().kappa(), p1.path_point().s(), s)); return p; } diff --git a/modules/control/common/trajectory_analyzer.h b/modules/control/common/trajectory_analyzer.h index 1e1a7288757..14a0bf76315 100644 --- a/modules/control/common/trajectory_analyzer.h +++ b/modules/control/common/trajectory_analyzer.h @@ -26,7 +26,7 @@ #include "modules/planning/proto/planning.pb.h" -#include "modules/common/proto/path_point.pb.h" +#include "modules/common/proto/pnc_point.pb.h" #include "modules/common/vehicle_state/vehicle_state.h" /** diff --git a/modules/control/common/trajectory_analyzer_test.cc b/modules/control/common/trajectory_analyzer_test.cc index e7f331bbadd..6c4696efc0e 100644 --- a/modules/control/common/trajectory_analyzer_test.cc +++ b/modules/control/common/trajectory_analyzer_test.cc @@ -38,9 +38,9 @@ class TrajectoryAnalyzerTest : public ::testing::Test { void SetTrajectory(const std::vector &xs, const std::vector &ys, planning::ADCTrajectory *adc_trajectory) { for (size_t i = 0; i < xs.size(); ++i) { - auto *point = adc_trajectory->add_adc_trajectory_point(); - point->set_x(xs[i]); - point->set_y(ys[i]); + auto *point = adc_trajectory->add_trajectory_point(); + point->mutable_path_point()->set_x(xs[i]); + point->mutable_path_point()->set_y(ys[i]); } adc_trajectory->mutable_header()->set_sequence_num(123); } @@ -50,9 +50,9 @@ void SetTrajectoryWithTime(const std::vector &xs, const std::vector &ts, planning::ADCTrajectory *adc_trajectory) { for (size_t i = 0; i < xs.size(); ++i) { - auto *point = adc_trajectory->add_adc_trajectory_point(); - point->set_x(xs[i]); - point->set_y(ys[i]); + auto *point = adc_trajectory->add_trajectory_point(); + point->mutable_path_point()->set_x(xs[i]); + point->mutable_path_point()->set_y(ys[i]); point->set_relative_time(ts[i]); } } @@ -61,10 +61,10 @@ void SetTrajectory(const std::vector &xs, const std::vector &ys, const std::vector &ss, planning::ADCTrajectory *adc_trajectory) { for (size_t i = 0; i < xs.size(); ++i) { - auto *point = adc_trajectory->add_adc_trajectory_point(); - point->set_x(xs[i]); - point->set_y(ys[i]); - point->set_accumulated_s(ss[i]); + auto *point = adc_trajectory->add_trajectory_point(); + point->mutable_path_point()->set_x(xs[i]); + point->mutable_path_point()->set_y(ys[i]); + point->mutable_path_point()->set_s(ss[i]); } } @@ -73,11 +73,11 @@ TEST_F(TrajectoryAnalyzerTest, SetADCTrajectory) { std::vector xs = {1.0, 1.1, 1.2, 1.3, 1.4}; std::vector ys = {1.0, 1.1, 1.2, 1.3, 1.4}; SetTrajectory(xs, ys, &adc_trajectory); - int traj_size = adc_trajectory.adc_trajectory_point_size(); + int traj_size = adc_trajectory.trajectory_point_size(); EXPECT_EQ(traj_size, 5); for (int i = 0; i < traj_size; ++i) { - EXPECT_EQ(adc_trajectory.adc_trajectory_point(i).x(), xs[i]); - EXPECT_EQ(adc_trajectory.adc_trajectory_point(i).y(), ys[i]); + EXPECT_EQ(adc_trajectory.trajectory_point(i).path_point().x(), xs[i]); + EXPECT_EQ(adc_trajectory.trajectory_point(i).path_point().y(), ys[i]); } } @@ -91,8 +91,8 @@ TEST_F(TrajectoryAnalyzerTest, Constructor) { EXPECT_EQ(trajectory_analyzer.trajectory_points().size(), 5); int i = 0; for (auto &point : trajectory_analyzer.trajectory_points()) { - EXPECT_EQ(xs[i], point.x()); - EXPECT_EQ(ys[i], point.y()); + EXPECT_EQ(xs[i], point.path_point().x()); + EXPECT_EQ(ys[i], point.path_point().y()); ++i; } EXPECT_EQ(trajectory_analyzer.seq_num(), 123); @@ -151,25 +151,24 @@ TEST_F(TrajectoryAnalyzerTest, QueryNearestPointByAbsoluteTimeInterpolation) { std::vector ts = {0.0, 0.1, 0.2, 0.3, 0.4}; SetTrajectoryWithTime(xs, ys, ts, &adc_trajectory); - double timestamp_ = apollo::common::time::ToSecond(Clock::Now()) - 2.0; + double timestamp_ = Clock::NowInSecond() - 2.0; adc_trajectory.mutable_header()->set_timestamp_sec(timestamp_); TrajectoryAnalyzer trajectory_analyzer(&adc_trajectory); - double current_time = apollo::common::time::ToSecond(Clock::Now()); - current_time = apollo::common::time::ToSecond(Clock::Now()) - 20.0; + double current_time = Clock::NowInSecond() - 20.0; TrajectoryPoint point_2 = trajectory_analyzer.QueryNearestPointByAbsoluteTime(current_time); - EXPECT_NEAR(point_2.x(), 1.0, 1e-6); + EXPECT_NEAR(point_2.path_point().x(), 1.0, 1e-6); current_time = timestamp_ + 50.0; TrajectoryPoint point_4 = trajectory_analyzer.QueryNearestPointByAbsoluteTime(current_time); - EXPECT_NEAR(point_4.x(), 1.4, 1e-6); + EXPECT_NEAR(point_4.path_point().x(), 1.4, 1e-6); current_time = timestamp_ + 0.03; TrajectoryPoint point_6 = trajectory_analyzer.QueryNearestPointByAbsoluteTime(current_time); - EXPECT_NEAR(point_6.x(), 1.0, 1e-6); + EXPECT_NEAR(point_6.path_point().x(), 1.0, 1e-6); } } // namespace control diff --git a/modules/control/conf/control.conf b/modules/control/conf/control.conf index 9c488bb61aa..1a5a2ca37dc 100644 --- a/modules/control/conf/control.conf +++ b/modules/control/conf/control.conf @@ -1,9 +1,8 @@ +--flagfile=modules/common/data/global_flagfile.txt --control_conf_file=modules/control/conf/lincoln.pb.txt ---adapter_config_path=modules/control/conf/adapter.conf ---enable_csv_debug --noenable_speed_station_preview --noenable_interpolation_by_time ---noenable_control_watchdog ---v=3 --nouse_preview_speed_for_table ---noenable_gain_scheduler +--enable_gain_scheduler +--noset_steer_limit +--noenable_input_timestamp_check diff --git a/modules/control/conf/lincoln.pb.txt b/modules/control/conf/lincoln.pb.txt index 5076f8fa39b..be6d71b27e9 100644 --- a/modules/control/conf/lincoln.pb.txt +++ b/modules/control/conf/lincoln.pb.txt @@ -10,6 +10,7 @@ soft_estop_brake: 50.0 active_controllers: LAT_CONTROLLER active_controllers: LON_CONTROLLER max_steering_percentage_allowed: 100 +minimum_speed_resolution: 0.2 lat_controller_conf { ts: 0.01 preview_window: 0 @@ -103,13 +104,7 @@ lon_controller_conf { kd: 0.0 } switch_speed: 2.0 - throttle_filter_conf { - cutoff_freq: 10 - } - brake_filter_conf { - cutoff_freq: 10 - } - acceleration_filter_conf { + pitch_angle_filter_conf { cutoff_freq: 5 } calibration_table { diff --git a/modules/control/control.cc b/modules/control/control.cc index f5aa2697934..2e08dbaca97 100644 --- a/modules/control/control.cc +++ b/modules/control/control.cc @@ -15,49 +15,42 @@ *****************************************************************************/ #include "modules/control/control.h" +#include #include #include "ros/include/std_msgs/String.h" #include "modules/localization/proto/localization.pb.h" -#include "modules/common/adapters/adapter_gflags.h" #include "modules/common/adapters/adapter_manager.h" #include "modules/common/log.h" #include "modules/common/time/time.h" +#include "modules/common/vehicle_state/vehicle_state.h" #include "modules/control/common/control_gflags.h" namespace apollo { namespace control { -using ::apollo::canbus::Chassis; -using ::apollo::common::adapter::AdapterManager; -using ::apollo::common::monitor::MonitorMessageItem; -using ::apollo::common::time::Clock; -using ::apollo::localization::LocalizationEstimate; -using ::apollo::planning::ADCTrajectory; - -#define CHECK_PROTO(a, b) \ - if (!a.has_##b()) { \ - AERROR << "PB invalid! [" << #a << "] has NO [" << #b << "]!"; \ - return Status(ErrorCode::CONTROL_COMPUTE_ERROR, \ - #a " missing pb field:" #b); \ - } +using apollo::canbus::Chassis; +using apollo::common::ErrorCode; +using apollo::common::Status; +using apollo::common::adapter::AdapterManager; +using apollo::common::monitor::MonitorMessageItem; +using apollo::common::time::Clock; +using apollo::localization::LocalizationEstimate; +using apollo::planning::ADCTrajectory; std::string Control::Name() const { return FLAGS_node_name; } Status Control::Init() { AINFO << "Control init, starting ..."; - if (!::apollo::common::util::GetProtoFromFile(FLAGS_control_conf_file, - &control_conf_)) { - return Status( - ErrorCode::CONTROL_INIT_ERROR, - "Unable to load control conf file: " + FLAGS_control_conf_file); - } + CHECK(common::util::GetProtoFromFile(FLAGS_control_conf_file, + &control_conf_)) + << "Unable to load control conf file: " + FLAGS_control_conf_file; AINFO << "Conf file: " << FLAGS_control_conf_file << " is loaded."; - AdapterManager::Init(FLAGS_adapter_config_path); + AdapterManager::Init(FLAGS_adapter_config_filename); apollo::common::monitor::MonitorBuffer buffer(&monitor_); @@ -75,16 +68,15 @@ Status Control::Init() { CHECK(AdapterManager::GetChassis()) << "Chassis is not initialized."; - CHECK(AdapterManager::GetPlanningTrajectory()) - << "PlanningTrajectory is not initialized."; + CHECK(AdapterManager::GetPlanning()) << "Planning is not initialized."; CHECK(AdapterManager::GetPad()) << "Pad is not initialized."; CHECK(AdapterManager::GetControlCommand()) << "ControlCommand publisher is not initialized."; - AdapterManager::SetPadCallback(&Control::OnPad, this); - AdapterManager::SetMonitorCallback(&Control::OnMonitor, this); + AdapterManager::AddPadCallback(&Control::OnPad, this); + AdapterManager::AddMonitorCallback(&Control::OnMonitor, this); return Status::OK(); } @@ -114,15 +106,13 @@ Status Control::Start() { return Status::OK(); } -void Control::OnPad(const apollo::control::PadMessage &pad) { +void Control::OnPad(const PadMessage &pad) { pad_msg_ = pad; - AINFO << "Received Pad Msg:" << pad.DebugString(); + ADEBUG << "Received Pad Msg:" << pad.DebugString(); + AERROR_IF(!pad_msg_.has_action()) << "pad message check failed!"; - if (!CheckPad().ok()) { - AERROR << "pad message check failed!"; - } // do something according to pad message - if (pad_msg_.action() == ::apollo::control::DrivingAction::RESET) { + if (pad_msg_.action() == DrivingAction::RESET) { AINFO << "Control received RESET action!"; estop_ = false; } @@ -143,15 +133,14 @@ Status Control::ProduceControlCommand(ControlCommand *control_command) { Status status = CheckInput(); // check data if (!status.ok()) { - AERROR << "Control input data failed: " << status.error_message(); + AERROR_EVERY(100) << "Control input data failed: " + << status.error_message(); estop_ = true; - Alert(); } else { Status status_ts = CheckTimestamp(); if (!status_ts.ok()) { AERROR << "Input messages timeout"; estop_ = true; - Alert(); status = status_ts; } } @@ -161,9 +150,9 @@ Status Control::ProduceControlCommand(ControlCommand *control_command) { // if planning set estop, then no control process triggered if (!estop_) { - if (chassis_.driving_mode() == ::apollo::canbus::Chassis::COMPLETE_MANUAL) { + if (chassis_.driving_mode() == Chassis::COMPLETE_MANUAL) { controller_agent_.Reset(); - AINFO << "Reset Controllers in Manual Mode"; + AINFO_EVERY(100) << "Reset Controllers in Manual Mode"; } auto debug = control_command->mutable_debug()->mutable_input_debug(); @@ -187,12 +176,12 @@ Status Control::ProduceControlCommand(ControlCommand *control_command) { } if (estop_) { - AWARN << "Estop triggered! No control core method executed!"; + AWARN_EVERY(100) << "Estop triggered! No control core method executed!"; // set Estop command control_command->set_speed(0); control_command->set_throttle(0); control_command->set_brake(control_conf_.soft_estop_brake()); - control_command->set_gear_location(::apollo::canbus::Chassis::GEAR_DRIVE); + control_command->set_gear_location(Chassis::GEAR_DRIVE); } // check signal if (trajectory_.has_signal()) { @@ -202,16 +191,15 @@ Status Control::ProduceControlCommand(ControlCommand *control_command) { } void Control::OnTimer(const ros::TimerEvent &) { - double start_timestamp = apollo::common::time::ToSecond(Clock::Now()); + double start_timestamp = Clock::NowInSecond(); ControlCommand control_command; Status status = ProduceControlCommand(&control_command); - if (!status.ok()) { - AERROR << "Failed to produce control command:" << status.error_message(); - } + AERROR_IF(!status.ok()) << "Failed to produce control command:" + << status.error_message(); - double end_timestamp = apollo::common::time::ToSecond(Clock::Now()); + double end_timestamp = Clock::NowInSecond(); if (pad_received_) { control_command.mutable_pad_msg()->CopyFrom(pad_msg_); @@ -220,7 +208,7 @@ void Control::OnTimer(const ros::TimerEvent &) { const double time_diff_ms = (end_timestamp - start_timestamp) * 1000; control_command.mutable_latency_stats()->set_total_time_ms(time_diff_ms); - AINFO << "control cycle time is: " << time_diff_ms << " ms."; + ADEBUG << "control cycle time is: " << time_diff_ms << " ms."; status.Save(control_command.mutable_header()->mutable_status()); SendCmd(&control_command); @@ -230,7 +218,7 @@ Status Control::CheckInput() { AdapterManager::Observe(); auto localization_adapter = AdapterManager::GetLocalization(); if (localization_adapter->Empty()) { - AINFO << "No Localization msg yet. "; + AWARN_EVERY(100) << "No Localization msg yet. "; return Status(ErrorCode::CONTROL_COMPUTE_ERROR, "No localization msg"); } localization_ = localization_adapter->GetLatestObserved(); @@ -238,18 +226,33 @@ Status Control::CheckInput() { auto chassis_adapter = AdapterManager::GetChassis(); if (chassis_adapter->Empty()) { - AINFO << "No Chassis msg yet. "; + AWARN_EVERY(100) << "No Chassis msg yet. "; return Status(ErrorCode::CONTROL_COMPUTE_ERROR, "No chassis msg"); } chassis_ = chassis_adapter->GetLatestObserved(); ADEBUG << "Received chassis:" << chassis_.ShortDebugString(); - auto trajectory_adapter = AdapterManager::GetPlanningTrajectory(); + auto trajectory_adapter = AdapterManager::GetPlanning(); if (trajectory_adapter->Empty()) { - AINFO << "No planning msg yet. "; + AWARN_EVERY(100) << "No planning msg yet. "; return Status(ErrorCode::CONTROL_COMPUTE_ERROR, "No planning msg"); } trajectory_ = trajectory_adapter->GetLatestObserved(); + if (!trajectory_.estop().is_estop() && + trajectory_.trajectory_point_size() == 0) { + AWARN_EVERY(100) << "planning has no trajectory point. "; + return Status(ErrorCode::CONTROL_COMPUTE_ERROR, + "planning has no trajectory point."); + } + + for (auto &trajectory_point : *trajectory_.mutable_trajectory_point()) { + if (trajectory_point.v() < control_conf_.minimum_speed_resolution()) { + trajectory_point.set_v(0.0); + trajectory_point.set_a(0.0); + } + } + + common::VehicleState::instance()->Update(localization_, chassis_); return Status::OK(); } @@ -259,7 +262,7 @@ Status Control::CheckTimestamp() { ADEBUG << "Skip input timestamp check by gflags."; return Status::OK(); } - double current_timestamp = apollo::common::time::ToSecond(Clock::Now()); + double current_timestamp = Clock::NowInSecond(); double localization_diff = current_timestamp - localization_.header().timestamp_sec(); if (localization_diff > @@ -290,8 +293,7 @@ Status Control::CheckTimestamp() { void Control::SendCmd(ControlCommand *control_command) { // set header - AdapterManager::FillControlCommandHeader(Name(), - control_command->mutable_header()); + AdapterManager::FillControlCommandHeader(Name(), control_command); ADEBUG << control_command->ShortDebugString(); if (FLAGS_is_control_test_mode) { @@ -301,24 +303,6 @@ void Control::SendCmd(ControlCommand *control_command) { AdapterManager::PublishControlCommand(*control_command); } -Status Control::CheckPad() { - CHECK_PROTO(pad_msg_, action) - return Status::OK(); -} - -void Control::Alert() { - // do not alert too frequently - // though "0" means first hit - if (last_alert_timestamp_ > 0. && - (apollo::common::time::ToSecond(Clock::Now()) - last_alert_timestamp_) < - FLAGS_min_alert_interval) { - return; - } - - // update timestamp - last_alert_timestamp_ = apollo::common::time::ToSecond(Clock::Now()); -} - void Control::Stop() {} } // namespace control diff --git a/modules/control/control.h b/modules/control/control.h index 0f6b89725d9..6fed32f5468 100644 --- a/modules/control/control.h +++ b/modules/control/control.h @@ -91,19 +91,18 @@ class Control : public apollo::common::ApolloApp { // Watch dog timer void OnTimer(const ros::TimerEvent &); - Status ProduceControlCommand(ControlCommand *control_command); - Status CheckInput(); - Status CheckTimestamp(); - Status CheckPad(); + common::Status ProduceControlCommand(ControlCommand *control_command); + common::Status CheckInput(); + common::Status CheckTimestamp(); + common::Status CheckPad(); - void Alert(); void SendCmd(ControlCommand *control_command); private: - ::apollo::localization::LocalizationEstimate localization_; - ::apollo::canbus::Chassis chassis_; - ::apollo::planning::ADCTrajectory trajectory_; - ::apollo::control::PadMessage pad_msg_; + localization::LocalizationEstimate localization_; + canbus::Chassis chassis_; + planning::ADCTrajectory trajectory_; + PadMessage pad_msg_; ControllerAgent controller_agent_; @@ -115,8 +114,6 @@ class Control : public apollo::common::ApolloApp { unsigned int total_status_lost_ = 0; unsigned int total_status_sanity_check_failed_ = 0; - double last_alert_timestamp_ = 0.0; - ControlConf control_conf_; apollo::common::monitor::Monitor monitor_; diff --git a/modules/control/control_test.cc b/modules/control/control_test.cc index 4630f21c6ad..4e30b83eb1e 100644 --- a/modules/control/control_test.cc +++ b/modules/control/control_test.cc @@ -20,7 +20,6 @@ #include #include "gtest/gtest.h" -#include "modules/common/adapters/adapter_gflags.h" #include "modules/common/log.h" #include "modules/common/util/file.h" #include "modules/control/common/control_gflags.h" @@ -41,16 +40,16 @@ TEST_F(ControlTest, Name) { EXPECT_EQ("control", control_.Name()); } TEST_F(ControlTest, Init) { FLAGS_control_conf_file = ""; - FLAGS_adapter_config_path = ""; - auto result = - Status(ErrorCode::CONTROL_INIT_ERROR, - "Unable to load control conf file: " + FLAGS_control_conf_file); - EXPECT_EQ(result, control_.Init()); + auto result = common::Status( + common::ErrorCode::CONTROL_INIT_ERROR, + "Unable to load control conf file: " + FLAGS_control_conf_file); + EXPECT_DEATH(control_.Init(), "Unable to load control conf file"); FLAGS_control_conf_file = "modules/control/testdata/conf/lincoln.pb.txt"; + FLAGS_adapter_config_filename = ""; EXPECT_DEATH(control_.Init(), "Unable to parse adapter config file " + - FLAGS_adapter_config_path); - FLAGS_adapter_config_path = "modules/control/testdata/conf/adapter.conf"; - EXPECT_EQ(Status::OK(), control_.Init()); + FLAGS_adapter_config_filename); + FLAGS_adapter_config_filename = "modules/control/testdata/conf/adapter.conf"; + EXPECT_EQ(common::Status::OK(), control_.Init()); } } // namespace control diff --git a/modules/control/controller/BUILD b/modules/control/controller/BUILD index 7403044fbf7..667157b5e81 100644 --- a/modules/control/controller/BUILD +++ b/modules/control/controller/BUILD @@ -22,11 +22,11 @@ cc_library( deps = [ ":controller_interface", "//modules/common:log", + "//modules/common/configs:vehicle_config_helper", "//modules/common/math:euler_angles_zxy", "//modules/common/math:lqr", "//modules/common/math:math_utils", "//modules/common/proto:common_proto", - "//modules/common/configs:vehicle_config_helper", "//modules/common/status", "//modules/common/time", "//modules/control/common:control_gflags", @@ -93,6 +93,7 @@ cc_library( "//modules/common/util:factory", "//modules/control/proto:control_proto", "//modules/planning/proto:planning_proto", + "@ros//:ros_common", ], ) diff --git a/modules/control/controller/controller.h b/modules/control/controller/controller.h index 23efcdb3a47..47d28849077 100644 --- a/modules/control/controller/controller.h +++ b/modules/control/controller/controller.h @@ -38,9 +38,6 @@ namespace apollo { namespace control { -using ErrorCode = ::apollo::common::ErrorCode; -using Status = ::apollo::common::Status; - /** * @class Controller * @@ -63,7 +60,7 @@ class Controller { * @param control_conf control configurations * @return Status initialization status */ - virtual Status Init(const ControlConf *control_conf) = 0; + virtual common::Status Init(const ControlConf *control_conf) = 0; /** * @brief compute control command based on current vehicle status @@ -74,17 +71,17 @@ class Controller { * @param cmd control command * @return Status computation status */ - virtual Status ComputeControlCommand( - const ::apollo::localization::LocalizationEstimate *localization, - const ::apollo::canbus::Chassis *chassis, - const ::apollo::planning::ADCTrajectory *trajectory, - ::apollo::control::ControlCommand *cmd) = 0; + virtual common::Status ComputeControlCommand( + const localization::LocalizationEstimate *localization, + const canbus::Chassis *chassis, + const planning::ADCTrajectory *trajectory, + control::ControlCommand *cmd) = 0; /** * @brief reset Controller * @return Status reset status */ - virtual Status Reset() = 0; + virtual common::Status Reset() = 0; /** * @brief controller name diff --git a/modules/control/controller/controller_agent.cc b/modules/control/controller/controller_agent.cc index 97eb73fef7c..b27fb42bf5c 100644 --- a/modules/control/controller/controller_agent.cc +++ b/modules/control/controller/controller_agent.cc @@ -27,6 +27,8 @@ namespace apollo { namespace control { using apollo::common::time::Clock; +using apollo::common::Status; +using apollo::common::ErrorCode; void ControllerAgent::RegisterControllers() { controller_factory_.Register( @@ -43,7 +45,6 @@ Status ControllerAgent::InitializeConf(const ControlConf *control_conf) { return Status(ErrorCode::CONTROL_INIT_ERROR, "Failed to load config"); } control_conf_ = control_conf; - AINFO << control_conf_->DebugString(); for (auto controller_type : control_conf_->active_controllers()) { auto controller = controller_factory_.CreateObject( static_cast(controller_type)); @@ -78,18 +79,18 @@ Status ControllerAgent::Init(const ControlConf *control_conf) { } Status ControllerAgent::ComputeControlCommand( - const ::apollo::localization::LocalizationEstimate *localization, - const ::apollo::canbus::Chassis *chassis, - const ::apollo::planning::ADCTrajectory *trajectory, - ::apollo::control::ControlCommand *cmd) { + const localization::LocalizationEstimate *localization, + const canbus::Chassis *chassis, + const planning::ADCTrajectory *trajectory, + control::ControlCommand *cmd) { for (auto &controller : controller_list_) { ADEBUG << "controller:" << controller->Name() << " processing ..."; - double start_timestamp = apollo::common::time::ToSecond(Clock::Now()); + double start_timestamp = Clock::NowInSecond(); controller->ComputeControlCommand(localization, chassis, trajectory, cmd); - double end_timestamp = apollo::common::time::ToSecond(Clock::Now()); + double end_timestamp = Clock::NowInSecond(); const double time_diff_ms = (end_timestamp - start_timestamp) * 1000; - AINFO << "controller: " << controller->Name() + ADEBUG << "controller: " << controller->Name() << " calculation time is: " << time_diff_ms << " ms."; cmd->mutable_latency_stats()->add_controller_time_ms(time_diff_ms); } diff --git a/modules/control/controller/controller_agent.h b/modules/control/controller/controller_agent.h index e3f8e419d33..ec3287b3462 100644 --- a/modules/control/controller/controller_agent.h +++ b/modules/control/controller/controller_agent.h @@ -54,7 +54,7 @@ class ControllerAgent { * @param control_conf control configurations * @return Status initialization status */ - Status Init(const ControlConf *control_conf); + common::Status Init(const ControlConf *control_conf); /** * @brief compute control command based on current vehicle status @@ -65,17 +65,17 @@ class ControllerAgent { * @param cmd control command * @return Status computation status */ - Status ComputeControlCommand( - const ::apollo::localization::LocalizationEstimate *localization, - const ::apollo::canbus::Chassis *chassis, - const ::apollo::planning::ADCTrajectory *trajectory, - ::apollo::control::ControlCommand *cmd); + common::Status ComputeControlCommand( + const localization::LocalizationEstimate *localization, + const canbus::Chassis *chassis, + const planning::ADCTrajectory *trajectory, + control::ControlCommand *cmd); /** * @brief reset ControllerAgent * @return Status reset status */ - Status Reset(); + common::Status Reset(); private: /** @@ -85,7 +85,7 @@ class ControllerAgent { */ void RegisterControllers(); - Status InitializeConf(const ControlConf *control_conf); + common::Status InitializeConf(const ControlConf *control_conf); const ControlConf *control_conf_ = nullptr; apollo::common::util::Factory diff --git a/modules/control/controller/lat_controller.cc b/modules/control/controller/lat_controller.cc index 78b1c109b07..3b7edee63ab 100644 --- a/modules/control/controller/lat_controller.cc +++ b/modules/control/controller/lat_controller.cc @@ -19,7 +19,6 @@ #include #include #include -#include #include #include #include @@ -31,15 +30,18 @@ #include "modules/common/math/linear_quadratic_regulator.h" #include "modules/common/math/math_utils.h" #include "modules/common/time/time.h" +#include "modules/common/util/string_util.h" #include "modules/control/common/control_gflags.h" namespace apollo { namespace control { -using ::apollo::common::TrajectoryPoint; -using ::apollo::common::Point3D; -using ::apollo::common::vehicle_state::VehicleState; +using common::TrajectoryPoint; +using common::Point3D; +using common::VehicleState; using Matrix = Eigen::MatrixXd; +using apollo::common::Status; +using apollo::common::ErrorCode; namespace { @@ -82,16 +84,17 @@ LatController::LatController() : name_("LQR-based Lateral Controller") { AINFO << "Using " << name_; } -LatController::~LatController() { CloseLogFile(); } +LatController::~LatController() { + CloseLogFile(); +} bool LatController::LoadControlConf(const ControlConf *control_conf) { if (!control_conf) { AERROR << "[LatController] control_conf == nullptr"; return false; } - const auto &vehicle_param_ = common::config::VehicleConfigHelper::instance() - ->GetConfig() - .vehicle_param(); + const auto &vehicle_param_ = + common::VehicleConfigHelper::instance()->GetConfig().vehicle_param(); ts_ = control_conf->lat_controller_conf().ts(); CHECK_GT(ts_, 0.0) << "[LatController] Invalid control update interval."; @@ -124,23 +127,22 @@ bool LatController::LoadControlConf(const ControlConf *control_conf) { void LatController::ProcessLogs(const SimpleLateralDebug *debug, const canbus::Chassis *chassis) { - std::stringstream log_stream; - log_stream << debug->lateral_error() << "," << debug->ref_heading() << "," - << vehicle_state_.heading() << "," << debug->heading_error() << "," - << debug->heading_error_rate() << "," - << debug->lateral_error_rate() << "," << debug->curvature() << "," - << debug->steer_angle() << "," << debug->steer_angle_feedforward() - << "," << debug->steer_angle_lateral_contribution() << "," - << debug->steer_angle_lateral_rate_contribution() << "," - << debug->steer_angle_heading_contribution() << "," - << debug->steer_angle_heading_rate_contribution() << "," - << debug->steer_angle_feedback() << "," - << chassis->steering_percentage() << "," - << vehicle_state_.linear_velocity(); + const std::string log_str = apollo::common::util::StrCat( + debug->lateral_error(), ",", debug->ref_heading(), ",", + VehicleState::instance()->heading(), ",", debug->heading_error(), ",", + debug->heading_error_rate(), ",", debug->lateral_error_rate(), ",", + debug->curvature(), ",", debug->steer_angle(), ",", + debug->steer_angle_feedforward(), ",", + debug->steer_angle_lateral_contribution(), ",", + debug->steer_angle_lateral_rate_contribution(), ",", + debug->steer_angle_heading_contribution(), ",", + debug->steer_angle_heading_rate_contribution(), ",", + debug->steer_angle_feedback(), ",", chassis->steering_percentage(), ",", + VehicleState::instance()->linear_velocity()); if (FLAGS_enable_csv_debug) { - steer_log_file_ << log_stream.str() << std::endl; + steer_log_file_ << log_str << std::endl; } - AINFO << "Steer_Control_Detail: " << log_stream.str(); + ADEBUG << "Steer_Control_Detail: " << log_str; } void LatController::LogInitParameters() { @@ -205,13 +207,11 @@ Status LatController::Init(const ControlConf *control_conf) { int q_param_size = control_conf->lat_controller_conf().matrix_q_size(); if (matrix_size != q_param_size) { - AERROR << "matrix_q size: " << q_param_size - << " in parameter file not equal to matrix_size: " << matrix_size; - return Status(ErrorCode::CONTROL_COMPUTE_ERROR, - "lateral controller error: matrix_q size: " + - std::to_string(q_param_size) + - " in parameter file not equal to matrix_size: " + - std::to_string(matrix_size)); + const auto error_msg = apollo::common::util::StrCat( + "lateral controller error: matrix_q size: ", q_param_size, + " in parameter file not equal to matrix_size: ", matrix_size); + AERROR << error_msg; + return Status(ErrorCode::CONTROL_COMPUTE_ERROR, error_msg); } for (int i = 0; i < q_param_size; ++i) { matrix_q_(i, i) = control_conf->lat_controller_conf().matrix_q(i); @@ -255,18 +255,21 @@ void LatController::LoadLatGainScheduler( << "Fail to load heading error gain scheduler"; } -void LatController::Stop() { CloseLogFile(); } +void LatController::Stop() { + CloseLogFile(); +} -std::string LatController::Name() const { return name_; } +std::string LatController::Name() const { + return name_; +} Status LatController::ComputeControlCommand( const localization::LocalizationEstimate *localization, const canbus::Chassis *chassis, const planning::ADCTrajectory *planning_published_trajectory, ControlCommand *cmd) { - vehicle_state_ = std::move(VehicleState(localization, chassis)); - vehicle_state_.set_linear_velocity( - std::max(vehicle_state_.linear_velocity(), 1.0)); + VehicleState::instance()->set_linear_velocity( + std::max(VehicleState::instance()->linear_velocity(), 1.0)); trajectory_analyzer_ = std::move(TrajectoryAnalyzer(planning_published_trajectory)); @@ -286,16 +289,20 @@ Status LatController::ComputeControlCommand( // Add gain sheduler for higher speed steering if (FLAGS_enable_gain_scheduler) { matrix_q_updated_(0, 0) = - matrix_q_(0, 0) * - lat_err_interpolation_->Interpolate(vehicle_state_.linear_velocity()); - matrix_q_updated_(2, 2) = matrix_q_(2, 2) * - heading_err_interpolation_->Interpolate( - vehicle_state_.linear_velocity()); + matrix_q_(0, 0) * lat_err_interpolation_->Interpolate( + VehicleState::instance()->linear_velocity()); + matrix_q_updated_(2, 2) = + matrix_q_(2, 2) * heading_err_interpolation_->Interpolate( + VehicleState::instance()->linear_velocity()); + common::math::SolveLQRProblem(matrix_adc_, matrix_bdc_, matrix_q_updated_, + matrix_r_, lqr_eps_, lqr_max_iteration_, + &matrix_k_); + } else { + common::math::SolveLQRProblem(matrix_adc_, matrix_bdc_, matrix_q_, + matrix_r_, lqr_eps_, lqr_max_iteration_, + &matrix_k_); } - common::math::SolveLQRProblem(matrix_adc_, matrix_bdc_, matrix_q_, matrix_r_, - lqr_eps_, lqr_max_iteration_, &matrix_k_); - // feedback = - K * state // Convert vehicle steer angle from rad to degree and then to steer degree // then to 100% ratio @@ -309,20 +316,26 @@ Status LatController::ComputeControlCommand( // Clamp the steer angle to -100.0 to 100.0 steer_angle = apollo::common::math::Clamp(steer_angle, -100.0, 100.0); - double steer_limit = std::atan(max_lat_acc_ * wheelbase_ / - (vehicle_state_.linear_velocity() * - vehicle_state_.linear_velocity())) * - steer_transmission_ratio_ * 180 / M_PI / - steer_single_direction_max_degree_ * 100; - - // Clamp the steer angle - double steer_angle_limited = - apollo::common::math::Clamp(steer_angle, -steer_limit, steer_limit); + if (FLAGS_set_steer_limit) { + double steer_limit = + std::atan(max_lat_acc_ * wheelbase_ / + (VehicleState::instance()->linear_velocity() * + VehicleState::instance()->linear_velocity())) * + steer_transmission_ratio_ * 180 / M_PI / + steer_single_direction_max_degree_ * 100; + + // Clamp the steer angle + double steer_angle_limited = + apollo::common::math::Clamp(steer_angle, -steer_limit, steer_limit); + steer_angle_limited = digital_filter_.Filter(steer_angle_limited); + cmd->set_steering_target(steer_angle_limited); + debug->set_steer_angle_limited(steer_angle_limited); + } else { + steer_angle = digital_filter_.Filter(steer_angle); + cmd->set_steering_target(steer_angle); + } - steer_angle_limited = digital_filter_.Filter(steer_angle_limited); - cmd->set_steering_target(steer_angle_limited); cmd->set_steering_rate(FLAGS_steer_angle_rate); - // compute extra information for logging and debugging double steer_angle_lateral_contribution = -matrix_k_(0, 0) * matrix_state_(0, 0) * 180 / M_PI * @@ -340,7 +353,7 @@ Status LatController::ComputeControlCommand( -matrix_k_(0, 3) * matrix_state_(3, 0) * 180 / M_PI * steer_transmission_ratio_ / steer_single_direction_max_degree_ * 100; - debug->set_heading(vehicle_state_.heading()); + debug->set_heading(VehicleState::instance()->heading()); debug->set_steer_angle(steer_angle); debug->set_steer_angle_feedforward(steer_angle_feedforward); debug->set_steer_angle_lateral_contribution(steer_angle_lateral_contribution); @@ -351,8 +364,8 @@ Status LatController::ComputeControlCommand( steer_angle_heading_rate_contribution); debug->set_steer_angle_feedback(steer_angle_feedback); debug->set_steering_position(chassis->steering_percentage()); - debug->set_ref_speed(vehicle_state_.linear_velocity()); - debug->set_steer_angle_limited(steer_angle_limited); + debug->set_ref_speed(VehicleState::instance()->linear_velocity()); + ProcessLogs(debug, chassis); return Status::OK(); } @@ -363,15 +376,73 @@ Status LatController::Reset() { return Status::OK(); } +// state = [Lateral Error, Lateral Error Rate, Heading Error, Heading Error +// Rate, Preview Lateral1, Preview Lateral2, ...] +void LatController::UpdateState(SimpleLateralDebug *debug) { + TrajectoryPoint traj_point; + const auto &position = VehicleState::instance()->ComputeCOMPosition(lr_); + double raw_lateral_error = GetLateralError(position, &traj_point); + + // lateral_error_ = lateral_rate_filter_.Filter(raw_lateral_error); + debug->set_lateral_error(lateral_error_filter_.Update(raw_lateral_error)); + + // ref_curvature_ = traj_point.kappa(); + debug->set_curvature(traj_point.path_point().kappa()); + + // ref_heading_ = traj_point.theta; + debug->set_ref_heading(traj_point.path_point().theta()); + + // heading_error_ = + // common::math::NormalizeAngle(VehicleState::instance()->heading() - + // ref_heading_); + debug->set_heading_error(common::math::NormalizeAngle( + VehicleState::instance()->heading() - traj_point.path_point().theta())); + + // Reverse heading error if vehicle is going in reverse + if (VehicleState::instance()->gear() == + canbus::Chassis::GEAR_REVERSE) { + debug->set_heading_error(-debug->heading_error()); + } + + // heading_error_rate_ = (heading_error_ - previous_heading_error_) / ts_; + debug->set_heading_error_rate( + (debug->heading_error() - previous_heading_error_) / ts_); + // lateral_error_rate_ = (lateral_error_ - previous_lateral_error_) / ts_; + debug->set_lateral_error_rate( + (debug->lateral_error() - previous_lateral_error_) / ts_); + + // Prepare for next iteration. + previous_heading_error_ = debug->heading_error(); + previous_lateral_error_ = debug->lateral_error(); + + // State matrix update; + // First four elements are fixed; + matrix_state_(0, 0) = debug->lateral_error(); + matrix_state_(1, 0) = debug->lateral_error_rate(); + matrix_state_(2, 0) = debug->heading_error(); + matrix_state_(3, 0) = debug->heading_error_rate(); + + // Next elements are depending on preview window size; + for (int i = 0; i < preview_window_; ++i) { + double preview_time = ts_ * (i + 1); + const auto &future_position_estimate = + VehicleState::instance()->EstimateFuturePosition(preview_time); + double preview_lateral = GetLateralError(future_position_estimate, nullptr); + matrix_state_(basic_state_size_ + i, 0) = preview_lateral; + } + // preview matrix update; +} + void LatController::UpdateStateAnalyticalMatching(SimpleLateralDebug *debug) { - Eigen::Vector2d com = vehicle_state_.ComputeCOMPosition(lr_); - ComputeLateralErrors(com.x(), com.y(), vehicle_state_.heading(), - vehicle_state_.linear_velocity(), - vehicle_state_.angular_velocity(), trajectory_analyzer_, - debug); + const auto &com = VehicleState::instance()->ComputeCOMPosition(lr_); + ComputeLateralErrors(com.x(), com.y(), VehicleState::instance()->heading(), + VehicleState::instance()->linear_velocity(), + VehicleState::instance()->angular_velocity(), + trajectory_analyzer_, debug); // Reverse heading error if vehicle is going in reverse - if (vehicle_state_.gear() == ::apollo::canbus::Chassis::GEAR_REVERSE) { + if (VehicleState::instance()->gear() == + canbus::Chassis::GEAR_REVERSE) { debug->set_heading_error(-debug->heading_error()); } @@ -389,13 +460,13 @@ void LatController::UpdateStateAnalyticalMatching(SimpleLateralDebug *debug) { trajectory_analyzer_.QueryNearestPointByRelativeTime(preview_time); auto matched_point = trajectory_analyzer_.QueryNearestPointByPosition( - preview_point.x(), preview_point.y()); + preview_point.path_point().x(), preview_point.path_point().y()); - double dx = preview_point.x() - matched_point.x(); - double dy = preview_point.y() - matched_point.y(); + double dx = preview_point.path_point().x() - matched_point.path_point().x(); + double dy = preview_point.path_point().y() - matched_point.path_point().y(); - double cos_matched_theta = std::cos(matched_point.theta()); - double sin_matched_theta = std::sin(matched_point.theta()); + double cos_matched_theta = std::cos(matched_point.path_point().theta()); + double sin_matched_theta = std::sin(matched_point.path_point().theta()); double preview_d_error = cos_matched_theta * dy - sin_matched_theta * dx; matrix_state_(basic_state_size_ + i, 0) = preview_d_error; @@ -403,7 +474,7 @@ void LatController::UpdateStateAnalyticalMatching(SimpleLateralDebug *debug) { } void LatController::UpdateMatrix() { - double v = vehicle_state_.linear_velocity(); + double v = VehicleState::instance()->linear_velocity(); matrix_a_(1, 1) = matrix_a_coeff_(1, 1) / v; matrix_a_(1, 3) = matrix_a_coeff_(1, 3) / v; matrix_a_(3, 1) = matrix_a_coeff_(3, 1) / v; @@ -431,7 +502,7 @@ double LatController::ComputeFeedForward(double ref_curvature) const { lr_ * mass_ / 2 / cf_ / wheelbase_ - lf_ * mass_ / 2 / cr_ / wheelbase_; // then change it from rad to % - double v = vehicle_state_.linear_velocity(); + double v = VehicleState::instance()->linear_velocity(); double steer_angle_feedforwardterm = (wheelbase_ * ref_curvature + kv * v * v * ref_curvature - matrix_k_(0, 2) * @@ -447,20 +518,20 @@ double LatController::ComputeFeedForward(double ref_curvature) const { * left to the ref_line, L is + * right to the ref_line, L is - */ -double LatController::GetLateralError(const Eigen::Vector2d &point, +double LatController::GetLateralError(const common::math::Vec2d &point, TrajectoryPoint *traj_point) const { auto closest = trajectory_analyzer_.QueryNearestPointByPosition(point.x(), point.y()); - double point_angle = - std::atan2(point.y() - closest.y(), point.x() - closest.x()); - double point2path_angle = point_angle - closest.theta(); + double point_angle = std::atan2(point.y() - closest.path_point().y(), + point.x() - closest.path_point().x()); + double point2path_angle = point_angle - closest.path_point().theta(); if (traj_point != nullptr) { *traj_point = closest; } - double dx = closest.x() - point.x(); - double dy = closest.y() - point.y(); + double dx = closest.path_point().x() - point.x(); + double dy = closest.path_point().y() - point.y(); return std::sin(point2path_angle) * std::sqrt(dx * dx + dy * dy); } @@ -470,30 +541,31 @@ void LatController::ComputeLateralErrors( SimpleLateralDebug *debug) const { auto matched_point = trajectory_analyzer.QueryNearestPointByPosition(x, y); - double dx = x - matched_point.x(); - double dy = y - matched_point.y(); + double dx = x - matched_point.path_point().x(); + double dy = y - matched_point.path_point().y(); - double cos_matched_theta = std::cos(matched_point.theta()); - double sin_matched_theta = std::sin(matched_point.theta()); + double cos_matched_theta = std::cos(matched_point.path_point().theta()); + double sin_matched_theta = std::sin(matched_point.path_point().theta()); // d_error = cos_matched_theta * dy - sin_matched_theta * dx; debug->set_lateral_error(cos_matched_theta * dy - sin_matched_theta * dx); double delta_theta = - common::math::NormalizeAngle(theta - matched_point.theta()); + common::math::NormalizeAngle(theta - matched_point.path_point().theta()); double sin_delta_theta = std::sin(delta_theta); // d_error_dot = linear_v * sin_delta_theta; debug->set_lateral_error_rate(linear_v * sin_delta_theta); // theta_error = delta_theta; debug->set_heading_error(delta_theta); - // theta_error_dot = angular_v - matched_point.kappa() * matched_point.v(); - debug->set_heading_error_rate(angular_v - - matched_point.kappa() * matched_point.v()); - - // matched_theta = matched_point.theta(); - debug->set_ref_heading(matched_point.theta()); - // matched_kappa = matched_point.kappa(); - debug->set_curvature(matched_point.kappa()); + // theta_error_dot = angular_v - matched_point.path_point().kappa() * + // matched_point.v(); + debug->set_heading_error_rate(angular_v - matched_point.path_point().kappa() * + matched_point.v()); + + // matched_theta = matched_point.path_point().theta(); + debug->set_ref_heading(matched_point.path_point().theta()); + // matched_kappa = matched_point.path_point().kappa(); + debug->set_curvature(matched_point.path_point().kappa()); } } // namespace control diff --git a/modules/control/controller/lat_controller.h b/modules/control/controller/lat_controller.h index 94d0b30b3ca..206ac6577c7 100644 --- a/modules/control/controller/lat_controller.h +++ b/modules/control/controller/lat_controller.h @@ -26,6 +26,8 @@ #include #include +#include "Eigen/Core" + #include "modules/common/configs/proto/vehicle_config.pb.h" #include "modules/control/common/interpolation_1d.h" #include "modules/control/common/trajectory_analyzer.h" @@ -65,7 +67,7 @@ class LatController : public Controller { * @param control_conf control configurations * @return Status initialization status */ - Status Init(const ControlConf *control_conf) override; + common::Status Init(const ControlConf *control_conf) override; /** * @brief compute steering target based on current vehicle status @@ -76,7 +78,7 @@ class LatController : public Controller { * @param cmd control command * @return Status computation status */ - Status ComputeControlCommand( + common::Status ComputeControlCommand( const localization::LocalizationEstimate *localization, const canbus::Chassis *chassis, const planning::ADCTrajectory *trajectory, ControlCommand *cmd) override; @@ -85,7 +87,7 @@ class LatController : public Controller { * @brief reset Lateral Controller * @return Status reset status */ - Status Reset() override; + common::Status Reset() override; /** * @brief stop Lateral controller @@ -99,6 +101,8 @@ class LatController : public Controller { std::string Name() const override; protected: + void UpdateState(SimpleLateralDebug *debug); + void UpdateStateAnalyticalMatching(SimpleLateralDebug *debug); void UpdateMatrix(); @@ -108,7 +112,7 @@ class LatController : public Controller { double ComputeFeedForward(double ref_curvature) const; double GetLateralError( - const Eigen::Vector2d &point, + const common::math::Vec2d &point, apollo::common::TrajectoryPoint *trajectory_point) const; void ComputeLateralErrors(const double x, const double y, const double theta, @@ -124,11 +128,8 @@ class LatController : public Controller { void CloseLogFile(); - // a proxy to access vehicle movement state - ::apollo::common::vehicle_state::VehicleState vehicle_state_; - // vehicle parameter - ::apollo::common::config::VehicleParam vehicle_param_; + common::VehicleParam vehicle_param_; // a proxy to analyze the planning trajectory TrajectoryAnalyzer trajectory_analyzer_; diff --git a/modules/control/controller/lat_controller_test.cc b/modules/control/controller/lat_controller_test.cc index 69aaff375b3..81ce296dbff 100644 --- a/modules/control/controller/lat_controller_test.cc +++ b/modules/control/controller/lat_controller_test.cc @@ -38,7 +38,7 @@ using apollo::common::time::Clock; using PlanningTrajectoryPb = planning::ADCTrajectory; using LocalizationPb = localization::LocalizationEstimate; using ChassisPb = canbus::Chassis; -using apollo::common::vehicle_state::VehicleState; +using apollo::common::VehicleState; class LatControllerTest : public ::testing::Test, LatController { public: @@ -51,7 +51,7 @@ class LatControllerTest : public ::testing::Test, LatController { &control_conf)); lateral_conf_ = control_conf.lat_controller_conf(); - timestamp_ = apollo::common::time::ToSecond(Clock::Now()); + timestamp_ = Clock::NowInSecond(); } void ComputeLateralErrors(const double x, const double y, const double theta, @@ -90,8 +90,6 @@ class LatControllerTest : public ::testing::Test, LatController { LatControllerConf lateral_conf_; - std::unique_ptr vehicle_state_; - double timestamp_ = 0.0; }; @@ -102,7 +100,8 @@ TEST_F(LatControllerTest, ComputeLateralErrors) { auto chassis_pb = LoadChassisPb( "modules/control/testdata/longitudinal_controller_test/1_chassis.pb.txt"); FLAGS_enable_map_reference_unify = false; - VehicleState vehicle_state(&localization_pb, &chassis_pb); + auto *vehicle_state = VehicleState::instance(); + vehicle_state->Update(localization_pb, chassis_pb); auto planning_trajectory_pb = LoadPlanningTrajectoryPb( "modules/control/testdata/longitudinal_controller_test/" @@ -112,10 +111,10 @@ TEST_F(LatControllerTest, ComputeLateralErrors) { ControlCommand cmd; SimpleLateralDebug *debug = cmd.mutable_debug()->mutable_simple_lat_debug(); - ComputeLateralErrors(vehicle_state.x(), vehicle_state.y(), - vehicle_state.heading(), vehicle_state.linear_velocity(), - vehicle_state.angular_velocity(), trajectory_analyzer, - debug); + ComputeLateralErrors( + vehicle_state->x(), vehicle_state->y(), vehicle_state->heading(), + vehicle_state->linear_velocity(), vehicle_state->angular_velocity(), + trajectory_analyzer, debug); double theta_error_expected = -0.03549; double theta_error_dot_expected = 0.0044552856731; diff --git a/modules/control/controller/lon_controller.cc b/modules/control/controller/lon_controller.cc index 51d217651ad..5a6abe4b622 100644 --- a/modules/control/controller/lon_controller.cc +++ b/modules/control/controller/lon_controller.cc @@ -21,15 +21,18 @@ #include "modules/common/log.h" #include "modules/common/math/math_utils.h" #include "modules/common/time/time.h" +#include "modules/common/util/string_util.h" #include "modules/control/common/control_gflags.h" #include "modules/localization/common/localization_gflags.h" namespace apollo { namespace control { -using ::apollo::common::TrajectoryPoint; -using ::apollo::common::time::Clock; -using ::apollo::common::vehicle_state::VehicleState; +using apollo::common::TrajectoryPoint; +using apollo::common::time::Clock; +using apollo::common::VehicleState; +using apollo::common::Status; +using apollo::common::ErrorCode; const double GRA_ACC = 9.8; @@ -100,9 +103,7 @@ Status LonController::Init(const ControlConf *control_conf) { station_pid_controller_.Init(lon_controller_conf.station_pid_conf()); speed_pid_controller_.Init(lon_controller_conf.low_speed_pid_conf()); - SetDigitalFilterAcceleration(lon_controller_conf); - SetDigitalFilterThrottle(lon_controller_conf); - SetDigitalFilterBrake(lon_controller_conf); + SetDigitalFilterPitchAngle(lon_controller_conf); LoadControlCalibrationTable(lon_controller_conf); controller_initialized_ = true; @@ -110,26 +111,12 @@ Status LonController::Init(const ControlConf *control_conf) { return Status::OK(); } -void LonController::SetDigitalFilterAcceleration( +void LonController::SetDigitalFilterPitchAngle( const LonControllerConf &lon_controller_conf) { double cutoff_freq = - lon_controller_conf.acceleration_filter_conf().cutoff_freq(); + lon_controller_conf.pitch_angle_filter_conf().cutoff_freq(); double ts = lon_controller_conf.ts(); - SetDigitalFilter(ts, cutoff_freq, &digital_filter_acceleration_); -} - -void LonController::SetDigitalFilterThrottle( - const LonControllerConf &lon_controller_conf) { - double cutoff_freq = lon_controller_conf.throttle_filter_conf().cutoff_freq(); - double ts = lon_controller_conf.ts(); - SetDigitalFilter(ts, cutoff_freq, &digital_filter_throttle_); -} - -void LonController::SetDigitalFilterBrake( - const LonControllerConf &lon_controller_conf) { - double cutoff_freq = lon_controller_conf.brake_filter_conf().cutoff_freq(); - double ts = lon_controller_conf.ts(); - SetDigitalFilter(ts, cutoff_freq, &digital_filter_brake_); + SetDigitalFilter(ts, cutoff_freq, &digital_filter_pitch_angle_); } void LonController::LoadControlCalibrationTable( @@ -150,13 +137,12 @@ void LonController::LoadControlCalibrationTable( } Status LonController::ComputeControlCommand( - const ::apollo::localization::LocalizationEstimate *localization, - const ::apollo::canbus::Chassis *chassis, - const ::apollo::planning::ADCTrajectory *planning_published_trajectory, - ::apollo::control::ControlCommand *cmd) { + const localization::LocalizationEstimate *localization, + const canbus::Chassis *chassis, + const planning::ADCTrajectory *planning_published_trajectory, + control::ControlCommand *cmd) { localization_ = localization; chassis_ = chassis; - vehicle_state_ = std::move(VehicleState(localization, chassis)); trajectory_message_ = planning_published_trajectory; if (!control_interpolation_) { @@ -182,12 +168,12 @@ Status LonController::ComputeControlCommand( double preview_time = lon_controller_conf.preview_window() * ts; if (preview_time < 0.0) { - AERROR << "Preview time set as: " << preview_time << " less than 0"; - return Status(ErrorCode::CONTROL_COMPUTE_ERROR, - "Invalid preview time:" + std::to_string(preview_time)); + const auto error_msg = apollo::common::util::StrCat( + "Preview time set as: ", preview_time, " less than 0"); + AERROR << error_msg; + return Status(ErrorCode::CONTROL_COMPUTE_ERROR, error_msg); } - ComputeLongitudinalErrors(vehicle_state_, trajectory_analyzer_.get(), - preview_time, debug); + ComputeLongitudinalErrors(trajectory_analyzer_.get(), preview_time, debug); double station_error_limit = lon_controller_conf.station_error_limit(); double station_error_limited = 0.0; @@ -216,7 +202,8 @@ Status LonController::ComputeControlCommand( speed_controller_input_limit); double acceleration_cmd_closeloop = 0.0; - if (vehicle_state_.linear_velocity() <= lon_controller_conf.switch_speed()) { + if (VehicleState::instance()->linear_velocity() <= + lon_controller_conf.switch_speed()) { speed_pid_controller_.SetPID(lon_controller_conf.low_speed_pid_conf()); acceleration_cmd_closeloop = speed_pid_controller_.Control(speed_controller_input_limited, ts); @@ -227,10 +214,10 @@ Status LonController::ComputeControlCommand( } double acceleration_cmd = - acceleration_cmd_closeloop + debug->preview_acceleration_reference() + \ - digital_filter_acceleration_.Filter(GRA_ACC \ - * std::sin(vehicle_state_.pitch())); - debug->set_is_full_stop(false); + acceleration_cmd_closeloop + debug->preview_acceleration_reference() + + digital_filter_pitch_angle_.Filter( + GRA_ACC * std::sin(VehicleState::instance()->pitch())); + debug->set_is_full_stop(false); if (std::abs(debug->preview_acceleration_reference()) <= FLAGS_max_acceleration_when_stopped && std::abs(debug->preview_speed_reference()) <= @@ -289,10 +276,10 @@ Status LonController::ComputeControlCommand( cmd->set_throttle(throttle_cmd); cmd->set_brake(brake_cmd); - if (std::abs(vehicle_state_.linear_velocity()) <= + if (std::abs(VehicleState::instance()->linear_velocity()) <= FLAGS_max_abs_speed_when_stopped || chassis->gear_location() == trajectory_message_->gear() || - chassis->gear_location() == ::apollo::canbus::Chassis::GEAR_NEUTRAL) { + chassis->gear_location() == canbus::Chassis::GEAR_NEUTRAL) { cmd->set_gear_location(trajectory_message_->gear()); } else { cmd->set_gear_location(chassis->gear_location()); @@ -310,7 +297,6 @@ Status LonController::Reset() { std::string LonController::Name() const { return name_; } void LonController::ComputeLongitudinalErrors( - const VehicleState &vehicle_state, const TrajectoryAnalyzer *trajectory_analyzer, const double preview_time, SimpleLongitudinalDebug *debug) { // the decomposed vehicle motion onto Frenet frame @@ -324,14 +310,15 @@ void LonController::ComputeLongitudinalErrors( double d_dot_matched = 0.0; auto matched_point = trajectory_analyzer->QueryMatchedPathPoint( - vehicle_state.x(), vehicle_state.y()); + VehicleState::instance()->x(), VehicleState::instance()->y()); trajectory_analyzer->ToTrajectoryFrame( - vehicle_state.x(), vehicle_state.y(), vehicle_state.heading(), - vehicle_state.linear_velocity(), matched_point, &s_matched, + VehicleState::instance()->x(), VehicleState::instance()->y(), + VehicleState::instance()->heading(), + VehicleState::instance()->linear_velocity(), matched_point, &s_matched, &s_dot_matched, &d_matched, &d_dot_matched); - double current_control_time = apollo::common::time::ToSecond(Clock::Now()); + double current_control_time = Clock::NowInSecond(); double preview_control_time = current_control_time + preview_time; TrajectoryPoint reference_point = @@ -344,12 +331,12 @@ void LonController::ComputeLongitudinalErrors( ADEBUG << "matched point:" << matched_point.DebugString(); ADEBUG << "reference point:" << reference_point.DebugString(); ADEBUG << "preview point:" << preview_point.DebugString(); - debug->set_station_error(reference_point.s() - s_matched); + debug->set_station_error(reference_point.path_point().s() - s_matched); debug->set_speed_error(reference_point.v() - s_dot_matched); - debug->set_station_reference(reference_point.s()); + debug->set_station_reference(reference_point.path_point().s()); debug->set_speed_reference(reference_point.v()); - debug->set_preview_station_error(preview_point.s() - s_matched); + debug->set_preview_station_error(preview_point.path_point().s() - s_matched); debug->set_preview_speed_error(preview_point.v() - s_dot_matched); debug->set_preview_speed_reference(preview_point.v()); debug->set_preview_acceleration_reference(preview_point.a()); diff --git a/modules/control/controller/lon_controller.h b/modules/control/controller/lon_controller.h index 9897bce90ad..85501421432 100644 --- a/modules/control/controller/lon_controller.h +++ b/modules/control/controller/lon_controller.h @@ -64,7 +64,7 @@ class LonController : public Controller { * @param control_conf control configurations * @return Status initialization status */ - Status Init(const ControlConf *control_conf) override; + common::Status Init(const ControlConf *control_conf) override; /** * @brief compute brake / throttle values based on current vehicle status @@ -75,17 +75,17 @@ class LonController : public Controller { * @param cmd control command * @return Status computation status */ - Status ComputeControlCommand( - const ::apollo::localization::LocalizationEstimate *localization, - const ::apollo::canbus::Chassis *chassis, - const ::apollo::planning::ADCTrajectory *trajectory, - ::apollo::control::ControlCommand *cmd) override; + common::Status ComputeControlCommand( + const localization::LocalizationEstimate *localization, + const canbus::Chassis *chassis, + const planning::ADCTrajectory *trajectory, + control::ControlCommand *cmd) override; /** * @brief reset longitudinal controller * @return Status reset status */ - Status Reset() override; + common::Status Reset() override; /** * @brief stop longitudinal controller @@ -99,18 +99,12 @@ class LonController : public Controller { std::string Name() const override; protected: - void ComputeLongitudinalErrors( - const ::apollo::common::vehicle_state::VehicleState &vehicle_state, - const TrajectoryAnalyzer *trajectory, const double preview_time, - SimpleLongitudinalDebug *debug); + void ComputeLongitudinalErrors(const TrajectoryAnalyzer *trajectory, + const double preview_time, + SimpleLongitudinalDebug *debug); private: - void SetDigitalFilterAcceleration( - const LonControllerConf &lon_controller_conf); - - void SetDigitalFilterThrottle(const LonControllerConf &lon_controller_conf); - - void SetDigitalFilterBrake(const LonControllerConf &lon_controller_conf); + void SetDigitalFilterPitchAngle(const LonControllerConf &lon_controller_conf); void LoadControlCalibrationTable( const LonControllerConf &lon_controller_conf); @@ -120,12 +114,11 @@ class LonController : public Controller { void CloseLogFile(); - const ::apollo::localization::LocalizationEstimate *localization_ = nullptr; - const ::apollo::canbus::Chassis *chassis_ = nullptr; - ::apollo::common::vehicle_state::VehicleState vehicle_state_; + const localization::LocalizationEstimate *localization_ = nullptr; + const canbus::Chassis *chassis_ = nullptr; std::unique_ptr control_interpolation_; - const ::apollo::planning::ADCTrajectory *trajectory_message_ = nullptr; + const planning::ADCTrajectory *trajectory_message_ = nullptr; std::unique_ptr trajectory_analyzer_; std::string name_; @@ -136,9 +129,7 @@ class LonController : public Controller { FILE *speed_log_file_ = nullptr; - DigitalFilter digital_filter_throttle_; - DigitalFilter digital_filter_brake_; - DigitalFilter digital_filter_acceleration_; + DigitalFilter digital_filter_pitch_angle_; const ControlConf *control_conf_ = nullptr; }; diff --git a/modules/control/controller/lon_controller_test.cc b/modules/control/controller/lon_controller_test.cc index 564c3dcf3c7..59eff06840d 100644 --- a/modules/control/controller/lon_controller_test.cc +++ b/modules/control/controller/lon_controller_test.cc @@ -41,7 +41,7 @@ using apollo::common::time::Clock; using LocalizationPb = localization::LocalizationEstimate; using ChassisPb = canbus::Chassis; using TrajectoryPb = planning::ADCTrajectory; -using VehicleState = common::vehicle_state::VehicleState; +using VehicleState = common::VehicleState; const char data_path[] = "modules/control/testdata/longitudinal_controller_test/"; @@ -59,20 +59,18 @@ class LonControllerTest : public ::testing::Test, LonController { &control_conf)); longitudinal_conf_ = control_conf.lon_controller_conf(); - timestamp_ = apollo::common::time::ToSecond(Clock::Now()); + timestamp_ = Clock::NowInSecond(); controller_.reset(new LonController()); } - void ComputeLongitudinalErrors( - const ::apollo::common::vehicle_state::VehicleState &vehicle_state, - const TrajectoryAnalyzer *trajectory, const double preview_time, - SimpleLongitudinalDebug *debug) { - LonController::ComputeLongitudinalErrors(vehicle_state, trajectory, - preview_time, debug); + void ComputeLongitudinalErrors(const TrajectoryAnalyzer *trajectory, + const double preview_time, + SimpleLongitudinalDebug *debug) { + LonController::ComputeLongitudinalErrors(trajectory, preview_time, debug); } - Status Init(const ControlConf *control_conf) { + common::Status Init(const ControlConf *control_conf) { return LonController::Init(control_conf); } @@ -116,18 +114,18 @@ TEST_F(LonControllerTest, ComputeLongitudinalErrors) { auto trajectory_pb = LoadPlanningTrajectoryPb(std::string(data_path) + "1_planning.pb.txt"); - double time_now = apollo::common::time::ToSecond(Clock::Now()); + double time_now = Clock::NowInSecond(); trajectory_pb.mutable_header()->set_timestamp_sec(time_now); - VehicleState vehicle_state(&localization_pb, &chassis_pb); + auto *vehicle_state = VehicleState::instance(); + vehicle_state->Update(localization_pb, chassis_pb); TrajectoryAnalyzer trajectory_analyzer(&trajectory_pb); double ts = longitudinal_conf_.ts(); double preview_time = longitudinal_conf_.preview_window() * ts; SimpleLongitudinalDebug debug; - ComputeLongitudinalErrors(vehicle_state, &trajectory_analyzer, preview_time, - &debug); + ComputeLongitudinalErrors(&trajectory_analyzer, preview_time, &debug); double station_reference_expected = 0.16716666937000002; double speed_reference_expected = 1.70833337307; @@ -154,8 +152,8 @@ TEST_F(LonControllerTest, ComputeLongitudinalErrors) { } TEST_F(LonControllerTest, Init) { - Status status = Init(nullptr); - EXPECT_EQ(status.code() == ErrorCode::CONTROL_INIT_ERROR, true); + common::Status status = Init(nullptr); + EXPECT_EQ(status.code() == common::ErrorCode::CONTROL_INIT_ERROR, true); } } // namespace control diff --git a/modules/control/filters/' b/modules/control/filters/' new file mode 100644 index 00000000000..338f01c5c98 --- /dev/null +++ b/modules/control/filters/' @@ -0,0 +1,111 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/control/filters/mean_filter.h" + +#include + +#include "modules/common/log.h" + +namespace apollo { +namespace control { + +using MF = MeanFilter; +using uint8 = std::uint_fast8_t; +using TimedValue = std::pair; + +const uint8 kMaxWindowSize = std::numeric_limits::max() / 2; + +MF::MeanFilter(const uint8 window_size) : window_size_(window_size) { + CHECK_GT(window_size_, 0); + CHECK_LE(window_size_, kMaxWindowSize); + initialized_ = true; +} + +double MF::GetMin() const { + if (min_candidates_.size() == 0) { + return std::numeric_limits::infinity(); + } else { + return min_candidates_.front().second; + } +} + +double MF::GetMax() const { + if (max_candidates_.size() == 0) { + return -std::numeric_limits::infinity(); + } else { + return max_candidates_.front().second; + } +} + +double MF::Update(const double measurement) { + CHECK(initialized_); + CHECK_LE(values_.size(), window_size_); + CHECK_LE(min_candidates_.size(), window_size_); + CHECK_LE(max_candidates_.size(), window_size_); + ++time_; + time_ %= 2 * window_size_; + if (values_.size() == window_size_) { + RemoveEarliest(); + } + Insert(measurement); + if (values_.size() > 2) { + return (sum_ - GetMin() - GetMax()) / (values_.size() - 2); + } else { + return sum_ / values_.size(); + } +} + +bool MF::ShouldPopOldestCandidate(const uint8 old_time) const { + if (old_time < window_size_) { + CHECK_LE(time_, old_time + window_size_); + return old_time + window_size_ == time_; + } else if (time_ < window_size_) { + CHECK_GE(old_time, time_ + window_size_); + return old_time == time_ + window_size_; + } else { + return false; + } +} + +void MF::RemoveEarliest() { + CHECK_EQ(values_.size(), window_size_); + double removed = values_.front(); + values_.pop_front(); + sum_ -= removed; + if (ShouldPopOldestCandidate(min_candidates_.front().first)) { + min_candidates_.pop_front(); + } + if (ShouldPopOldestCandidate(max_candidates_.front().first)) { + max_candidates_.pop_front(); + } +} + +void MF::Insert(const double value) { + values_.push_back(value); + sum_ += value; + while (min_candidates_.size() > 0 && min_candidates_.back().second > value) { + min_candidates_.pop_back(); + } + min_candidates_.push_back(std::make_pair(time_, value)); + while (max_candidates_.size() > 0 && max_candidates_.back().second < value) { + max_candidates_.pop_back(); + } + max_candidates_.push_back(std::make_pair(time_, value)); +} + +} // namespace control +} // namespace apollo diff --git a/modules/control/integration_tests/control_test_base.cc b/modules/control/integration_tests/control_test_base.cc index c3781c2d608..1f79089f0e7 100644 --- a/modules/control/integration_tests/control_test_base.cc +++ b/modules/control/integration_tests/control_test_base.cc @@ -20,11 +20,10 @@ #include #include "google/protobuf/text_format.h" -#include "google/protobuf/util/message_differencer.h" -#include "modules/common/adapters/adapter_gflags.h" #include "modules/common/adapters/adapter_manager.h" #include "modules/common/monitor/proto/monitor.pb.h" #include "modules/common/util/file.h" +#include "modules/common/util/util.h" #include "modules/control/integration_tests/control_test_base.h" #include "modules/control/proto/control_cmd.pb.h" #include "ros/include/ros/ros.h" @@ -46,10 +45,10 @@ using apollo::common::monitor::MonitorMessage; using apollo::control::ControlCommand; using apollo::control::PadMessage; -uint32_t ControlTestBase::_s_seq_num = 0; +uint32_t ControlTestBase::s_seq_num_ = 0; bool ControlTestBase::test_control() { - if (!::apollo::common::util::GetProtoFromFile(FLAGS_control_conf_file, + if (!common::util::GetProtoFromFile(FLAGS_control_conf_file, &control_.control_conf_)) { AERROR << "Unable to load control conf file: " << FLAGS_control_conf_file; exit(EXIT_FAILURE); @@ -64,24 +63,39 @@ bool ControlTestBase::test_control() { } control_.controller_agent_.Reset(); - AdapterManager::Init(FLAGS_adapter_config_path); + AdapterManager::Init(FLAGS_adapter_config_filename); if (!FLAGS_test_pad_file.empty()) { PadMessage pad_message; - apollo::common::util::GetProtoFromFile( - FLAGS_test_data_dir + FLAGS_test_pad_file, &pad_message); + if (!apollo::common::util::GetProtoFromFile( + FLAGS_test_data_dir + FLAGS_test_pad_file, &pad_message)) { + AERROR << "Failed to load PadMesssage from file " << FLAGS_test_data_dir + << FLAGS_test_pad_file; + return false; + } control_.OnPad(pad_message); } if (!FLAGS_test_localization_file.empty()) { - AdapterManager::FeedLocalizationProtoFile(FLAGS_test_data_dir + - FLAGS_test_localization_file); + if (!AdapterManager::FeedLocalizationFile(FLAGS_test_data_dir + + FLAGS_test_localization_file)) { + AERROR << "Failed to load localization file " << FLAGS_test_data_dir + << FLAGS_test_localization_file; + return false; + } } if (!FLAGS_test_planning_file.empty()) { - AdapterManager::FeedPlanningTrajectoryProtoFile(FLAGS_test_data_dir + - FLAGS_test_planning_file); + if (!AdapterManager::FeedPlanningFile(FLAGS_test_data_dir + + FLAGS_test_planning_file)) { + AERROR << "Failed to load planning file " << FLAGS_test_data_dir + << FLAGS_test_planning_file; + return false; + } } if (!FLAGS_test_chassis_file.empty()) { - AdapterManager::FeedChassisProtoFile(FLAGS_test_data_dir + - FLAGS_test_chassis_file); + if (!AdapterManager::FeedChassisFile(FLAGS_test_data_dir + + FLAGS_test_chassis_file)) { + AERROR << "Failed to load chassis file " << FLAGS_test_data_dir + << FLAGS_test_chassis_file; + } } if (!FLAGS_test_monitor_file.empty()) { MonitorMessage monitor_message; @@ -101,13 +115,16 @@ bool ControlTestBase::test_control() { } void ControlTestBase::trim_control_command(ControlCommand *origin) { + origin->mutable_header()->clear_radar_timestamp(); + origin->mutable_header()->clear_lidar_timestamp(); origin->mutable_header()->clear_timestamp_sec(); + origin->mutable_header()->clear_camera_timestamp(); } bool ControlTestBase::test_control(const std::string &test_case_name, int case_num) { - std::string golden_result_file("result_" + test_case_name + "_" + - std::to_string(case_num) + ".pb.txt"); + const std::string golden_result_file = apollo::common::util::StrCat( + "result_", test_case_name, "_", case_num, ".pb.txt"); std::string tmp_golden_path = "/tmp/" + golden_result_file; std::string full_golden_path = FLAGS_test_data_dir + "/" + golden_result_file; control_command_.Clear(); @@ -122,24 +139,24 @@ bool ControlTestBase::test_control(const std::string &test_case_name, AINFO << "The golden file is " << tmp_golden_path << " Remember to:\n" << "mv " << tmp_golden_path << " " << FLAGS_test_data_dir << "\n" << "git add " << FLAGS_test_data_dir << "/" << golden_result_file; - ::apollo::common::util::SetProtoToASCIIFile(control_command_, + common::util::SetProtoToASCIIFile(control_command_, golden_result_file); } else { ControlCommand golden_result; - bool load_success = ::apollo::common::util::GetProtoFromASCIIFile( + bool load_success = common::util::GetProtoFromASCIIFile( full_golden_path, &golden_result); if (!load_success) { AERROR << "Failed to load golden file: " << full_golden_path; - ::apollo::common::util::SetProtoToASCIIFile(control_command_, + common::util::SetProtoToASCIIFile(control_command_, tmp_golden_path); AINFO << "Current result is written to " << tmp_golden_path; return false; } - bool same_result = google::protobuf::util::MessageDifferencer::Equals( - golden_result, control_command_); + bool same_result = + common::util::IsProtoEqual(golden_result, control_command_); if (!same_result) { std::string tmp_planning_file = tmp_golden_path + ".tmp"; - ::apollo::common::util::SetProtoToASCIIFile(control_command_, + common::util::SetProtoToASCIIFile(control_command_, tmp_planning_file); AERROR << "found diff " << tmp_planning_file << " " << full_golden_path; } @@ -149,14 +166,12 @@ bool ControlTestBase::test_control(const std::string &test_case_name, void ControlTestBase::SetUpTestCase() { ros::Time::init(); - FLAGS_v = 4; - FLAGS_alsologtostderr = true; FLAGS_control_conf_file = "modules/control/testdata/conf/lincoln.pb.txt"; - FLAGS_adapter_config_path = "modules/control/testdata/conf/adapter.conf"; + FLAGS_adapter_config_filename = "modules/control/testdata/conf/adapter.conf"; FLAGS_is_control_test_mode = true; } -void ControlTestBase::SetUp() { ++_s_seq_num; } +void ControlTestBase::SetUp() { ++s_seq_num_; } } // namespace control } // namespace apollo diff --git a/modules/control/integration_tests/control_test_base.h b/modules/control/integration_tests/control_test_base.h index 064b740d8db..1cc6003b859 100644 --- a/modules/control/integration_tests/control_test_base.h +++ b/modules/control/integration_tests/control_test_base.h @@ -26,14 +26,6 @@ #include "modules/control/control.h" #include "modules/control/proto/control_cmd.pb.h" -#define TMAIN \ - int main(int argc, char **argv) { \ - ::testing::InitGoogleTest(&argc, argv); \ - google::InitGoogleLogging(argv[0]); \ - ::google::ParseCommandLineFlags(&argc, &argv, true); \ - return RUN_ALL_TESTS(); \ - } - #define RUN_GOLDEN_TEST \ { \ const ::testing::TestInfo *const test_info = \ @@ -69,7 +61,7 @@ class ControlTestBase : public ::testing::Test { void trim_control_command(apollo::control::ControlCommand *origin); ControlCommand control_command_; Control control_; - static uint32_t _s_seq_num; + static uint32_t s_seq_num_; }; } // namespace control diff --git a/modules/control/integration_tests/simple_control_test.cc b/modules/control/integration_tests/simple_control_test.cc index 40631aa61a0..e85f0701c45 100644 --- a/modules/control/integration_tests/simple_control_test.cc +++ b/modules/control/integration_tests/simple_control_test.cc @@ -37,7 +37,6 @@ class SimpleControlTest : public ControlTestBase { public: virtual void SetUp() { FLAGS_test_data_dir = "modules/control/testdata/simple_control_test/"; - ControlTestBase::SetUp(); } }; @@ -47,6 +46,7 @@ TEST_F(SimpleControlTest, simple_test) { FLAGS_test_pad_file = "1_pad.pb.txt"; FLAGS_test_planning_file = "1_planning.pb.txt"; FLAGS_test_chassis_file = "1_chassis.pb.txt"; + ControlTestBase::SetUp(); RUN_GOLDEN_TEST; } @@ -55,6 +55,7 @@ TEST_F(SimpleControlTest, state_exact_match) { FLAGS_test_pad_file = "1_pad.pb.txt"; FLAGS_test_planning_file = "1_planning.pb.txt"; FLAGS_test_chassis_file = "1_chassis.pb.txt"; + ControlTestBase::SetUp(); RUN_GOLDEN_TEST; } @@ -63,6 +64,7 @@ TEST_F(SimpleControlTest, pad_reset) { FLAGS_test_pad_file = "2_pad.pb.txt"; FLAGS_test_planning_file = "1_planning.pb.txt"; FLAGS_test_chassis_file = "1_chassis.pb.txt"; + ControlTestBase::SetUp(); RUN_GOLDEN_TEST; } @@ -72,10 +74,9 @@ TEST_F(SimpleControlTest, monitor_fatal) { FLAGS_test_planning_file = "1_planning.pb.txt"; FLAGS_test_chassis_file = "1_chassis.pb.txt"; FLAGS_test_monitor_file = "1_monitor.pb.txt"; + ControlTestBase::SetUp(); RUN_GOLDEN_TEST; } } // namespace control } // namespace apollo - -TMAIN; diff --git a/modules/control/proto/BUILD b/modules/control/proto/BUILD index 35e16d5f0c4..a942f4871ed 100644 --- a/modules/control/proto/BUILD +++ b/modules/control/proto/BUILD @@ -1,36 +1,27 @@ package(default_visibility = ["//visibility:public"]) -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile") - cc_proto_library( name = "control_proto", - protos = [ - "calibration_table.proto", - "control_cmd.proto", - "control_conf.proto", - "lat_controller_conf.proto", - "lon_controller_conf.proto", - "pad_msg.proto", - ], deps = [ - "//modules/canbus/proto:canbus_proto", - "//modules/common/proto:common_proto", + ":control_proto_lib", ], ) -py_proto_compile( - name = "control_proto_pylib", - protos = [ +proto_library( + name = "control_proto_lib", + srcs = [ "calibration_table.proto", "control_cmd.proto", "control_conf.proto", "lat_controller_conf.proto", "lon_controller_conf.proto", "pad_msg.proto", + "pid_conf.proto", ], deps = [ - "//modules/canbus/proto:canbus_proto_pylib", - "//modules/common/proto:common_proto_pylib", + "//modules/canbus/proto:canbus_proto_lib", + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:header_proto_lib", + "//modules/common/proto:vehicle_signal_proto_lib", ], ) diff --git a/modules/control/proto/control_cmd.proto b/modules/control/proto/control_cmd.proto index 3b8e28943e5..198df39962e 100644 --- a/modules/control/proto/control_cmd.proto +++ b/modules/control/proto/control_cmd.proto @@ -3,6 +3,7 @@ package apollo.control; import "modules/canbus/proto/chassis.proto"; import "modules/common/proto/header.proto"; +import "modules/common/proto/vehicle_signal.proto"; import "modules/control/proto/pad_msg.proto"; enum TurnSignal { @@ -49,7 +50,7 @@ message ControlCommand { optional apollo.canbus.Chassis.GearPosition gear_location = 20; optional Debug debug = 22; - optional apollo.canbus.Signal signal = 23; + optional apollo.common.VehicleSignal signal = 23; optional LatencyStats latency_stats = 24; optional PadMessage pad_msg = 25; diff --git a/modules/control/proto/control_conf.proto b/modules/control/proto/control_conf.proto index 05b6cea8188..3aac49ff537 100644 --- a/modules/control/proto/control_conf.proto +++ b/modules/control/proto/control_conf.proto @@ -31,4 +31,6 @@ message ControlConf { optional double trajectory_period = 12; optional double chassis_period = 13; optional double localization_period = 14; + + optional double minimum_speed_resolution = 15; } diff --git a/modules/control/proto/lat_controller_conf.proto b/modules/control/proto/lat_controller_conf.proto index 12dc0ba2dbb..93c3843f6a6 100644 --- a/modules/control/proto/lat_controller_conf.proto +++ b/modules/control/proto/lat_controller_conf.proto @@ -17,6 +17,7 @@ message LatControllerConf { repeated double matrix_q = 10; // matrix_q size = 4 + preview_window optional int32 cutoff_freq = 11; // cutoff frequency optional int32 mean_filter_window_size = 12; // window size of mean filter + // for a normal car, it should be in range[16, 18] optional int32 max_iteration = 13; // maximum iteration for lqr solve optional double max_lateral_acceleration = 14; // limit aggressive steering optional LatGainScheduler lat_err_gain_scheduler = 15; diff --git a/modules/control/proto/lon_controller_conf.proto b/modules/control/proto/lon_controller_conf.proto index ba19d9739b3..283106526e7 100644 --- a/modules/control/proto/lon_controller_conf.proto +++ b/modules/control/proto/lon_controller_conf.proto @@ -4,13 +4,7 @@ package apollo.control; import "modules/control/proto/calibration_table.proto"; -message PidConf { - optional bool integrator_enable = 1; - optional double integrator_saturation_level = 2; - optional double kp = 3; - optional double ki = 4; - optional double kd = 5; -} +import "modules/control/proto/pid_conf.proto"; message FilterConf { optional int32 cutoff_freq = 1; @@ -32,9 +26,7 @@ message LonControllerConf { optional PidConf high_speed_pid_conf = 10; optional double switch_speed = 11; // low/high speed controller switch speed - optional FilterConf throttle_filter_conf = 12; - optional FilterConf brake_filter_conf = 13; - optional FilterConf acceleration_filter_conf = 14; + optional FilterConf pitch_angle_filter_conf = 12; - optional calibrationtable.ControlCalibrationTable calibration_table = 15; + optional calibrationtable.ControlCalibrationTable calibration_table = 13; } diff --git a/modules/control/proto/pid_conf.proto b/modules/control/proto/pid_conf.proto new file mode 100644 index 00000000000..50d384f8692 --- /dev/null +++ b/modules/control/proto/pid_conf.proto @@ -0,0 +1,13 @@ +syntax = "proto2"; + +package apollo.control; + +message PidConf { + optional bool integrator_enable = 1; + optional double integrator_saturation_level = 2; + optional double kp = 3; + optional double ki = 4; + optional double kd = 5; + optional double kaw = 6 [default = 0.0]; + optional double output_saturation_level = 7; +} diff --git a/modules/control/testdata/conf/lincoln.pb.txt b/modules/control/testdata/conf/lincoln.pb.txt index e42fbea9456..16b13217adf 100644 --- a/modules/control/testdata/conf/lincoln.pb.txt +++ b/modules/control/testdata/conf/lincoln.pb.txt @@ -85,6 +85,7 @@ lon_controller_conf { station_pid_conf { integrator_enable: false integrator_saturation_level: 0.1 + output_saturation_level: 3.0 kp: 0.1 ki: 0.0 kd: 0.0 @@ -92,24 +93,21 @@ lon_controller_conf { low_speed_pid_conf { integrator_enable: true integrator_saturation_level: 0.3 + output_saturation_level: 3.0 kp: 1.5 ki: 0.5 kd: 0.0 + kaw: 1.0 } high_speed_pid_conf { integrator_enable: true integrator_saturation_level: 0.3 + output_saturation_level: 3.0 kp: 1.5 ki: 0.5 kd: 0.0 } - throttle_filter_conf { - cutoff_freq: 10 - } - brake_filter_conf { - cutoff_freq: 10 - } - acceleration_filter_conf { + pitch_angle_filter_conf { cutoff_freq: 5 } calibration_table { diff --git a/modules/control/testdata/control_tester/planning.pb.txt b/modules/control/testdata/control_tester/planning.pb.txt index e4d152eda45..5e659486da7 100644 --- a/modules/control/testdata/control_tester/planning.pb.txt +++ b/modules/control/testdata/control_tester/planning.pb.txt @@ -5,13007 +5,14008 @@ header { } total_path_length: 32.38002780204 total_path_time: 9.9800000190734863 -adc_trajectory_point { - x: -124.367072419 - y: 364.831849142 - z: -31.332377322 - - speed: 1.62222218513 - acceleration_s: 0.786162598236 - curvature: -0.00252617800322 - curvature_change_rate: 0 +estop { + is_estop: false +} +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: -124.367072419 + y: 364.831849142 + z: -31.332377322 + theta: -1.81237826921 + kappa: -0.00252617800322 + s: 0 + dkappa: 0 + } + v: 1.62222218513 + a: 0.786162598236 relative_time: -0.089999914169311523 - theta: -1.81237826921 - accumulated_s: 0 -} -adc_trajectory_point { - x: -124.371192947 - y: 364.815408289 - z: -31.3321617292 - - speed: 1.63055551052 - acceleration_s: 0.823007905434 - curvature: -0.00248790128945 - curvature_change_rate: 0.00234746462335 +} +trajectory_point { + path_point { + x: -124.371192947 + y: 364.815408289 + z: -31.3321617292 + theta: -1.81246574077 + kappa: -0.00248790128945 + s: 0.016305555109999981 + dkappa: 0.00234746462335 + } + v: 1.63055551052 + a: 0.823007905434 relative_time: -0.079999923706054688 - theta: -1.81246574077 - accumulated_s: 0.016305555109999981 -} -adc_trajectory_point { - x: -124.375298464 - y: 364.798862219 - z: -31.3319112528 - - speed: 1.63055551052 - acceleration_s: 0.939039433387 - curvature: -0.00248790128945 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.375298464 + y: 364.798862219 + z: -31.3319112528 + theta: -1.81246756399 + kappa: -0.00248790128945 + s: 0.032611110209999961 + dkappa: 0 + } + v: 1.63055551052 + a: 0.939039433387 relative_time: -0.069999933242797852 - theta: -1.81246756399 - accumulated_s: 0.032611110209999961 -} -adc_trajectory_point { - x: -124.379445239 - y: 364.782260752 - z: -31.331748303 - - speed: 1.65555560589 - acceleration_s: 0.799533704679 - curvature: -0.00244962463489 - curvature_change_rate: 0.00231201262143 +} +trajectory_point { + path_point { + x: -124.379445239 + y: 364.782260752 + z: -31.331748303 + theta: -1.81249667017 + kappa: -0.00244962463489 + s: 0.0491666662700001 + dkappa: 0.00231201262143 + } + v: 1.65555560589 + a: 0.799533704679 relative_time: -0.059999942779541016 - theta: -1.81249667017 - accumulated_s: 0.0491666662700001 -} -adc_trajectory_point { - x: -124.379445239 - y: 364.782260752 - z: -31.331748303 - - speed: 1.65555560589 - acceleration_s: 0.799533704679 - curvature: -0.00244962463489 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.379445239 + y: 364.782260752 + z: -31.331748303 + theta: -1.81249667017 + kappa: -0.00244962463489 + s: 0.065722222330000024 + dkappa: 0 + } + v: 1.65555560589 + a: 0.799533704679 relative_time: -0.059999942779541016 - theta: -1.81249667017 - accumulated_s: 0.065722222330000024 -} -adc_trajectory_point { - x: -124.387812319 - y: 364.748792952 - z: -31.3314336967 - - speed: 1.67222225666 - acceleration_s: 0.709512194401 - curvature: -0.00241134803862 - curvature_change_rate: 0.00228896584236 +} +trajectory_point { + path_point { + x: -124.387812319 + y: 364.748792952 + z: -31.3314336967 + theta: -1.81252111016 + kappa: -0.00241134803862 + s: 0.082444444899999914 + dkappa: 0.00228896584236 + } + v: 1.67222225666 + a: 0.709512194401 relative_time: -0.039999961853027344 - theta: -1.81252111016 - accumulated_s: 0.082444444899999914 -} -adc_trajectory_point { - x: -124.39208822 - y: 364.73193295 - z: -31.3311777441 - - speed: 1.67222225666 - acceleration_s: 0.885164961093 - curvature: -0.00241134803862 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.39208822 + y: 364.73193295 + z: -31.3311777441 + theta: -1.81259538169 + kappa: -0.00241134803862 + s: 0.099166667460000024 + dkappa: 0 + } + v: 1.67222225666 + a: 0.885164961093 relative_time: -0.029999971389770508 - theta: -1.81259538169 - accumulated_s: 0.099166667460000024 -} -adc_trajectory_point { - x: -124.396360761 - y: 364.715008909 - z: -31.3310258063 - - speed: 1.6916667223 - acceleration_s: 0.840964839003 - curvature: -0.00241134803862 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.396360761 + y: 364.715008909 + z: -31.3310258063 + theta: -1.81260595807 + kappa: -0.00241134803862 + s: 0.1160833346900001 + dkappa: 0 + } + v: 1.6916667223 + a: 0.840964839003 relative_time: -0.019999980926513672 - theta: -1.81260595807 - accumulated_s: 0.1160833346900001 -} -adc_trajectory_point { - x: -124.400686806 - y: 364.698015497 - z: -31.3307877881 - - speed: 1.6916667223 - acceleration_s: 0.79314550852 - curvature: -0.00241134803862 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.400686806 + y: 364.698015497 + z: -31.3307877881 + theta: -1.81264478745 + kappa: -0.00241134803862 + s: 0.13300000190999994 + dkappa: 0 + } + v: 1.6916667223 + a: 0.79314550852 relative_time: -0.0099999904632568359 - theta: -1.81264478745 - accumulated_s: 0.13300000190999994 -} -adc_trajectory_point { - x: -124.404998184 - y: 364.68093016 - z: -31.330677554 - - speed: 1.70833337307 - acceleration_s: 0.79314550852 - curvature: -0.00237307149975 - curvature_change_rate: 0.00224057783324 +} +trajectory_point { + path_point { + x: -124.404998184 + y: 364.68093016 + z: -31.330677554 + theta: -1.81266143871 + kappa: -0.00237307149975 + s: 0.15008333563999998 + dkappa: 0.00224057783324 + } + v: 1.70833337307 + a: 0.79314550852 relative_time: 0 - theta: -1.81266143871 - accumulated_s: 0.15008333563999998 -} -adc_trajectory_point { - x: -124.404998184 - y: 364.68093016 - z: -31.330677554 - - speed: 1.70833337307 - acceleration_s: 0.848439761077 - curvature: -0.00237307149975 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.404998184 + y: 364.68093016 + z: -31.330677554 + theta: -1.81266143871 + kappa: -0.00237307149975 + s: 0.16716666937000002 + dkappa: 0 + } + v: 1.70833337307 + a: 0.848439761077 relative_time: 0 - theta: -1.81266143871 - accumulated_s: 0.16716666937000002 -} -adc_trajectory_point { - x: -124.413740829 - y: 364.646558161 - z: -31.330341435 - - speed: 1.7277777195 - acceleration_s: 0.839788102862 - curvature: -0.00233479501735 - curvature_change_rate: 0.00221535918454 +} +trajectory_point { + path_point { + x: -124.413740829 + y: 364.646558161 + z: -31.330341435 + theta: -1.81271721372 + kappa: -0.00233479501735 + s: 0.18444444656999992 + dkappa: 0.00221535918454 + } + v: 1.7277777195 + a: 0.839788102862 relative_time: 0.019999980926513672 - theta: -1.81271721372 - accumulated_s: 0.18444444656999992 -} -adc_trajectory_point { - x: -124.418160805 - y: 364.629263991 - z: -31.3301604046 - - speed: 1.7277777195 - acceleration_s: 0.796361476988 - curvature: -0.00233479501735 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.418160805 + y: 364.629263991 + z: -31.3301604046 + theta: -1.8127539742 + kappa: -0.00233479501735 + s: 0.20172222376000004 + dkappa: 0 + } + v: 1.7277777195 + a: 0.796361476988 relative_time: 0.029999971389770508 - theta: -1.8127539742 - accumulated_s: 0.20172222376000004 -} -adc_trajectory_point { - x: -124.422587432 - y: 364.611881599 - z: -31.329923776 - - speed: 1.74166667461 - acceleration_s: 0.796361476988 - curvature: -0.00229651859052 - curvature_change_rate: 0.00219768956878 +} +trajectory_point { + path_point { + x: -124.422587432 + y: 364.611881599 + z: -31.329923776 + theta: -1.81278276405 + kappa: -0.00229651859052 + s: 0.21913889051000002 + dkappa: 0.00219768956878 + } + v: 1.74166667461 + a: 0.796361476988 relative_time: 0.039999961853027344 - theta: -1.81278276405 - accumulated_s: 0.21913889051000002 -} -adc_trajectory_point { - x: -124.42702661 - y: 364.59441933 - z: -31.329741355 - - speed: 1.74166667461 - acceleration_s: 0.79238461037 - curvature: -0.00229651859052 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.42702661 + y: 364.59441933 + z: -31.329741355 + theta: -1.81281670152 + kappa: -0.00229651859052 + s: 0.23655555725 + dkappa: 0 + } + v: 1.74166667461 + a: 0.79238461037 relative_time: 0.04999995231628418 - theta: -1.81281670152 - accumulated_s: 0.23655555725 -} -adc_trajectory_point { - x: -124.431486786 - y: 364.576916664 - z: -31.3295119135 - - speed: 1.75833332539 - acceleration_s: 0.623637235555 - curvature: -0.00229651859052 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.431486786 + y: 364.576916664 + z: -31.3295119135 + theta: -1.8128477221 + kappa: -0.00229651859052 + s: 0.25413889050999994 + dkappa: 0 + } + v: 1.75833332539 + a: 0.623637235555 relative_time: 0.059999942779541016 - theta: -1.8128477221 - accumulated_s: 0.25413889050999994 -} -adc_trajectory_point { - x: -124.435979126 - y: 364.559317752 - z: -31.3293451639 - - speed: 1.75833332539 - acceleration_s: 0.78715534576 - curvature: -0.00229651859052 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.435979126 + y: 364.559317752 + z: -31.3293451639 + theta: -1.81292572329 + kappa: -0.00229651859052 + s: 0.2717222237600001 + dkappa: 0 + } + v: 1.75833332539 + a: 0.78715534576 relative_time: 0.069999933242797852 - theta: -1.81292572329 - accumulated_s: 0.2717222237600001 -} -adc_trajectory_point { - x: -124.440512829 - y: 364.541682956 - z: -31.3291209918 - - speed: 1.7722222805 - acceleration_s: 0.651805683286 - curvature: -0.00225824221834 - curvature_change_rate: 0.00215979522414 +} +trajectory_point { + path_point { + x: -124.440512829 + y: 364.541682956 + z: -31.3291209918 + theta: -1.81300561803 + kappa: -0.00225824221834 + s: 0.2894444465699999 + dkappa: 0.00215979522414 + } + v: 1.7722222805 + a: 0.651805683286 relative_time: 0.080000162124633789 - theta: -1.81300561803 - accumulated_s: 0.2894444465699999 -} -adc_trajectory_point { - x: -124.440512829 - y: 364.541682956 - z: -31.3291209918 - - speed: 1.7722222805 - acceleration_s: 0.651805683286 - curvature: -0.00225824221834 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.440512829 + y: 364.541682956 + z: -31.3291209918 + theta: -1.81300561803 + kappa: -0.00225824221834 + s: 0.30716666936999992 + dkappa: 0 + } + v: 1.7722222805 + a: 0.651805683286 relative_time: 0.080000162124633789 - theta: -1.81300561803 - accumulated_s: 0.30716666936999992 -} -adc_trajectory_point { - x: -124.449549206 - y: 364.506162589 - z: -31.3285673754 - - speed: 1.78888893127 - acceleration_s: 0.710935224764 - curvature: -0.00221996589991 - curvature_change_rate: 0.00213966992371 +} +trajectory_point { + path_point { + x: -124.449549206 + y: 364.506162589 + z: -31.3285673754 + theta: -1.81308814408 + kappa: -0.00221996589991 + s: 0.32505555867999991 + dkappa: 0.00213966992371 + } + v: 1.78888893127 + a: 0.710935224764 relative_time: 0.10000014305114746 - theta: -1.81308814408 - accumulated_s: 0.32505555867999991 -} -adc_trajectory_point { - x: -124.454089513 - y: 364.488330402 - z: -31.3283397462 - - speed: 1.78888893127 - acceleration_s: 0.570744609263 - curvature: -0.00221996589991 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.454089513 + y: 364.488330402 + z: -31.3283397462 + theta: -1.81312803791 + kappa: -0.00221996589991 + s: 0.3429444479999999 + dkappa: 0 + } + v: 1.78888893127 + a: 0.570744609263 relative_time: 0.1100001335144043 - theta: -1.81312803791 - accumulated_s: 0.3429444479999999 -} -adc_trajectory_point { - x: -124.458653948 - y: 364.470391315 - z: -31.3280404089 - - speed: 1.80277776718 - acceleration_s: 0.765021682693 - curvature: -0.00218168963431 - curvature_change_rate: 0.00212318269586 +} +trajectory_point { + path_point { + x: -124.458653948 + y: 364.470391315 + z: -31.3280404089 + theta: -1.81320046776 + kappa: -0.00218168963431 + s: 0.36097222567000009 + dkappa: 0.00212318269586 + } + v: 1.80277776718 + a: 0.765021682693 relative_time: 0.12000012397766113 - theta: -1.81320046776 - accumulated_s: 0.36097222567000009 -} -adc_trajectory_point { - x: -124.463241748 - y: 364.45241929 - z: -31.3277416844 - - speed: 1.80277776718 - acceleration_s: 0.654807529919 - curvature: -0.00218168963431 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.463241748 + y: 364.45241929 + z: -31.3277416844 + theta: -1.81324631449 + kappa: -0.00218168963431 + s: 0.37900000334000006 + dkappa: 0 + } + v: 1.80277776718 + a: 0.654807529919 relative_time: 0.13000011444091797 - theta: -1.81324631449 - accumulated_s: 0.37900000334000006 -} -adc_trajectory_point { - x: -124.46783809 - y: 364.434363713 - z: -31.3274464924 - - speed: 1.81944441795 - acceleration_s: 0.654807529919 - curvature: -0.00214341342064 - curvature_change_rate: 0.00210373085859 +} +trajectory_point { + path_point { + x: -124.46783809 + y: 364.434363713 + z: -31.3274464924 + theta: -1.81332741838 + kappa: -0.00214341342064 + s: 0.39719444752 + dkappa: 0.00210373085859 + } + v: 1.81944441795 + a: 0.654807529919 relative_time: 0.1400001049041748 - theta: -1.81332741838 - accumulated_s: 0.39719444752 -} -adc_trajectory_point { - x: -124.47245785 - y: 364.416250084 - z: -31.3270961335 - - speed: 1.81944441795 - acceleration_s: 0.674982832465 - curvature: -0.00214341342064 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.47245785 + y: 364.416250084 + z: -31.3270961335 + theta: -1.81337278819 + kappa: -0.00214341342064 + s: 0.41538889169999993 + dkappa: 0 + } + v: 1.81944441795 + a: 0.674982832465 relative_time: 0.15000009536743164 - theta: -1.81337278819 - accumulated_s: 0.41538889169999993 -} -adc_trajectory_point { - x: -124.477095653 - y: 364.398088042 - z: -31.326754651 - - speed: 1.83611106873 - acceleration_s: 0.552212210239 - curvature: -0.00210513725798 - curvature_change_rate: 0.00208463220531 +} +trajectory_point { + path_point { + x: -124.477095653 + y: 364.398088042 + z: -31.326754651 + theta: -1.813443323 + kappa: -0.00210513725798 + s: 0.43375000239000006 + dkappa: 0.00208463220531 + } + v: 1.83611106873 + a: 0.552212210239 relative_time: 0.16000008583068848 - theta: -1.813443323 - accumulated_s: 0.43375000239000006 -} -adc_trajectory_point { - x: -124.48176616 - y: 364.379838609 - z: -31.326410614 - - speed: 1.83611106873 - acceleration_s: 0.740273402835 - curvature: -0.00210513725798 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.48176616 + y: 364.379838609 + z: -31.326410614 + theta: -1.81353389521 + kappa: -0.00210513725798 + s: 0.45211111306999996 + dkappa: 0 + } + v: 1.83611106873 + a: 0.740273402835 relative_time: 0.17000007629394531 - theta: -1.81353389521 - accumulated_s: 0.45211111306999996 -} -adc_trajectory_point { - x: -124.486428356 - y: 364.361555494 - z: -31.3261427637 - - speed: 1.85000002384 - acceleration_s: 0.580707000797 - curvature: -0.00206686114541 - curvature_change_rate: 0.00206897903083 +} +trajectory_point { + path_point { + x: -124.486428356 + y: 364.361555494 + z: -31.3261427637 + theta: -1.81356533084 + kappa: -0.00206686114541 + s: 0.47061111330999994 + dkappa: 0.00206897903083 + } + v: 1.85000002384 + a: 0.580707000797 relative_time: 0.18000006675720215 - theta: -1.81356533084 - accumulated_s: 0.47061111330999994 -} -adc_trajectory_point { - x: -124.491086517 - y: 364.343166634 - z: -31.3257930893 - - speed: 1.85000002384 - acceleration_s: 0.725814506272 - curvature: -0.00206686114541 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.491086517 + y: 364.343166634 + z: -31.3257930893 + theta: -1.81360825438 + kappa: -0.00206686114541 + s: 0.48911111354999992 + dkappa: 0 + } + v: 1.85000002384 + a: 0.725814506272 relative_time: 0.19000005722045898 - theta: -1.81360825438 - accumulated_s: 0.48911111354999992 -} -adc_trajectory_point { - x: -124.491086517 - y: 364.343166634 - z: -31.3257930893 - - speed: 1.86388885975 - acceleration_s: 0.725814506272 - curvature: -0.00202858508204 - curvature_change_rate: 0.00205355931895 +} +trajectory_point { + path_point { + x: -124.491086517 + y: 364.343166634 + z: -31.3257930893 + theta: -1.81360825438 + kappa: -0.00202858508204 + s: 0.5077500021500001 + dkappa: 0.00205355931895 + } + v: 1.86388885975 + a: 0.725814506272 relative_time: 0.19000005722045898 - theta: -1.81360825438 - accumulated_s: 0.5077500021500001 -} -adc_trajectory_point { - x: -124.500568552 - y: 364.306281933 - z: -31.3251117049 - - speed: 1.86388885975 - acceleration_s: 0.578514170379 - curvature: -0.00202858508204 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.500568552 + y: 364.306281933 + z: -31.3251117049 + theta: -1.81377712139 + kappa: -0.00202858508204 + s: 0.52638889075000006 + dkappa: 0 + } + v: 1.86388885975 + a: 0.578514170379 relative_time: 0.21000003814697266 - theta: -1.81377712139 - accumulated_s: 0.52638889075000006 -} -adc_trajectory_point { - x: -124.505284561 - y: 364.287718639 - z: -31.3248510277 - - speed: 1.87777781487 - acceleration_s: 0.733719666282 - curvature: -0.00199030906694 - curvature_change_rate: 0.00203836762757 +} +trajectory_point { + path_point { + x: -124.505284561 + y: 364.287718639 + z: -31.3248510277 + theta: -1.81380727115 + kappa: -0.00199030906694 + s: 0.54516666889000009 + dkappa: 0.00203836762757 + } + v: 1.87777781487 + a: 0.733719666282 relative_time: 0.22000002861022949 - theta: -1.81380727115 - accumulated_s: 0.54516666889000009 -} -adc_trajectory_point { - x: -124.510040247 - y: 364.269117353 - z: -31.3245309526 - - speed: 1.87777781487 - acceleration_s: 0.545171679849 - curvature: -0.00199030906694 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.510040247 + y: 364.269117353 + z: -31.3245309526 + theta: -1.81383336004 + kappa: -0.00199030906694 + s: 0.56394444703999991 + dkappa: 0 + } + v: 1.87777781487 + a: 0.545171679849 relative_time: 0.23000001907348633 - theta: -1.81383336004 - accumulated_s: 0.56394444703999991 -} -adc_trajectory_point { - x: -124.514817529 - y: 364.250426387 - z: -31.3242240939 - - speed: 1.89166665077 - acceleration_s: 0.70451380624 - curvature: -0.00195203309921 - curvature_change_rate: 0.00202339919208 +} +trajectory_point { + path_point { + x: -124.514817529 + y: 364.250426387 + z: -31.3242240939 + theta: -1.8138975348 + kappa: -0.00195203309921 + s: 0.58286111354999992 + dkappa: 0.00202339919208 + } + v: 1.89166665077 + a: 0.70451380624 relative_time: 0.24000000953674316 - theta: -1.8138975348 - accumulated_s: 0.58286111354999992 -} -adc_trajectory_point { - x: -124.519599994 - y: 364.231695691 - z: -31.3239948656 - - speed: 1.89166665077 - acceleration_s: 0.70451380624 - curvature: -0.00195203309921 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.519599994 + y: 364.231695691 + z: -31.3239948656 + theta: -1.81392737 + kappa: -0.00195203309921 + s: 0.60177778005999993 + dkappa: 0 + } + v: 1.89166665077 + a: 0.70451380624 relative_time: 0.25 - theta: -1.81392737 - accumulated_s: 0.60177778005999993 -} -adc_trajectory_point { - x: -124.524397496 - y: 364.212904296 - z: -31.3237304427 - - speed: 1.90833330154 - acceleration_s: 0.579897214634 - curvature: -0.00191375717794 - curvature_change_rate: 0.00200572516558 +} +trajectory_point { + path_point { + x: -124.524397496 + y: 364.212904296 + z: -31.3237304427 + theta: -1.81397067294 + kappa: -0.00191375717794 + s: 0.62086111307000014 + dkappa: 0.00200572516558 + } + v: 1.90833330154 + a: 0.579897214634 relative_time: 0.25999999046325684 - theta: -1.81397067294 - accumulated_s: 0.62086111307000014 -} -adc_trajectory_point { - x: -124.529204006 - y: 364.194037175 - z: -31.3235090738 - - speed: 1.90833330154 - acceleration_s: 0.664043300769 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.529204006 + y: 364.194037175 + z: -31.3235090738 + theta: -1.81400750394 + kappa: -0.00191375717794 + s: 0.6399444460899999 + dkappa: 0 + } + v: 1.90833330154 + a: 0.664043300769 relative_time: 0.26999998092651367 - theta: -1.81400750394 - accumulated_s: 0.6399444460899999 -} -adc_trajectory_point { - x: -124.534002209 - y: 364.175124421 - z: -31.3233041149 - - speed: 1.92222225666 - acceleration_s: 0.543693233875 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.534002209 + y: 364.175124421 + z: -31.3233041149 + theta: -1.81400097688 + kappa: -0.00191375717794 + s: 0.65916666866000018 + dkappa: 0 + } + v: 1.92222225666 + a: 0.543693233875 relative_time: 0.27999997138977051 - theta: -1.81400097688 - accumulated_s: 0.65916666866000018 -} -adc_trajectory_point { - x: -124.538850304 - y: 364.156134098 - z: -31.3231071895 - - speed: 1.92222225666 - acceleration_s: 0.646040675764 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.538850304 + y: 364.156134098 + z: -31.3231071895 + theta: -1.81407158499 + kappa: -0.00191375717794 + s: 0.67838889122 + dkappa: 0 + } + v: 1.92222225666 + a: 0.646040675764 relative_time: 0.28999996185302734 - theta: -1.81407158499 - accumulated_s: 0.67838889122 -} -adc_trajectory_point { - x: -124.543679992 - y: 364.137093008 - z: -31.3229501601 - - speed: 1.93611109257 - acceleration_s: 0.646040675764 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.543679992 + y: 364.137093008 + z: -31.3229501601 + theta: -1.81407281585 + kappa: -0.00191375717794 + s: 0.69775000214999983 + dkappa: 0 + } + v: 1.93611109257 + a: 0.646040675764 relative_time: 0.29999995231628418 - theta: -1.81407281585 - accumulated_s: 0.69775000214999983 -} -adc_trajectory_point { - x: -124.548536345 - y: 364.117982962 - z: -31.3227286693 - - speed: 1.93611109257 - acceleration_s: 0.622100636076 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.548536345 + y: 364.117982962 + z: -31.3227286693 + theta: -1.81411772979 + kappa: -0.00191375717794 + s: 0.71711111307000008 + dkappa: 0 + } + v: 1.93611109257 + a: 0.622100636076 relative_time: 0.309999942779541 - theta: -1.81411772979 - accumulated_s: 0.71711111307000008 -} -adc_trajectory_point { - x: -124.553410471 - y: 364.098815731 - z: -31.3226654641 - - speed: 1.94722223282 - acceleration_s: 0.684868392467 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.553410471 + y: 364.098815731 + z: -31.3226654641 + theta: -1.81417388783 + kappa: -0.00191375717794 + s: 0.73658333540000021 + dkappa: 0 + } + v: 1.94722223282 + a: 0.684868392467 relative_time: 0.31999993324279785 - theta: -1.81417388783 - accumulated_s: 0.73658333540000021 -} -adc_trajectory_point { - x: -124.558283914 - y: 364.079585656 - z: -31.3224984268 - - speed: 1.94722223282 - acceleration_s: 0.573879708316 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.558283914 + y: 364.079585656 + z: -31.3224984268 + theta: -1.81419237818 + kappa: -0.00191375717794 + s: 0.75605555772999988 + dkappa: 0 + } + v: 1.94722223282 + a: 0.573879708316 relative_time: 0.33000016212463379 - theta: -1.81419237818 - accumulated_s: 0.75605555772999988 -} -adc_trajectory_point { - x: -124.558283914 - y: 364.079585656 - z: -31.3224984268 - - speed: 1.96388888359 - acceleration_s: 0.573879708316 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.558283914 + y: 364.079585656 + z: -31.3224984268 + theta: -1.81419237818 + kappa: -0.00191375717794 + s: 0.7756944465700002 + dkappa: 0 + } + v: 1.96388888359 + a: 0.573879708316 relative_time: 0.33000016212463379 - theta: -1.81419237818 - accumulated_s: 0.7756944465700002 -} -adc_trajectory_point { - x: -124.56804333 - y: 364.040941718 - z: -31.3223221367 - - speed: 1.96388888359 - acceleration_s: 0.603920311959 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.56804333 + y: 364.040941718 + z: -31.3223221367 + theta: -1.81423909981 + kappa: -0.00191375717794 + s: 0.79533333540000006 + dkappa: 0 + } + v: 1.96388888359 + a: 0.603920311959 relative_time: 0.35000014305114746 - theta: -1.81423909981 - accumulated_s: 0.79533333540000006 -} -adc_trajectory_point { - x: -124.572951875 - y: 364.021539676 - z: -31.3221889641 - - speed: 1.9777777195 - acceleration_s: 0.555519021968 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.572951875 + y: 364.021539676 + z: -31.3221889641 + theta: -1.81427907955 + kappa: -0.00191375717794 + s: 0.81511111259999991 + dkappa: 0 + } + v: 1.9777777195 + a: 0.555519021968 relative_time: 0.3600001335144043 - theta: -1.81427907955 - accumulated_s: 0.81511111259999991 -} -adc_trajectory_point { - x: -124.577850514 - y: 364.002080082 - z: -31.3222134952 - - speed: 1.9777777195 - acceleration_s: 0.61368027684 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.577850514 + y: 364.002080082 + z: -31.3222134952 + theta: -1.81433748319 + kappa: -0.00191375717794 + s: 0.8348888897900002 + dkappa: 0 + } + v: 1.9777777195 + a: 0.61368027684 relative_time: 0.37000012397766113 - theta: -1.81433748319 - accumulated_s: 0.8348888897900002 -} -adc_trajectory_point { - x: -124.582810583 - y: 363.982557264 - z: -31.3221274754 - - speed: 1.98888885975 - acceleration_s: 0.578355004978 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.582810583 + y: 363.982557264 + z: -31.3221274754 + theta: -1.81440993028 + kappa: -0.00191375717794 + s: 0.85477777838999991 + dkappa: 0 + } + v: 1.98888885975 + a: 0.578355004978 relative_time: 0.38000011444091797 - theta: -1.81440993028 - accumulated_s: 0.85477777838999991 -} -adc_trajectory_point { - x: -124.587728192 - y: 363.962979756 - z: -31.3221053937 - - speed: 1.98888885975 - acceleration_s: 0.537373855617 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.587728192 + y: 363.962979756 + z: -31.3221053937 + theta: -1.81445166373 + kappa: -0.00191375717794 + s: 0.87466666699000006 + dkappa: 0 + } + v: 1.98888885975 + a: 0.537373855617 relative_time: 0.3900001049041748 - theta: -1.81445166373 - accumulated_s: 0.87466666699000006 -} -adc_trajectory_point { - x: -124.587728192 - y: 363.962979756 - z: -31.3221053937 - - speed: 2.00277781487 - acceleration_s: 0.537373855617 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.587728192 + y: 363.962979756 + z: -31.3221053937 + theta: -1.81445166373 + kappa: -0.00191375717794 + s: 0.89469444513999985 + dkappa: 0 + } + v: 2.00277781487 + a: 0.537373855617 relative_time: 0.3900001049041748 - theta: -1.81445166373 - accumulated_s: 0.89469444513999985 -} -adc_trajectory_point { - x: -124.597654504 - y: 363.923691761 - z: -31.3219676949 - - speed: 2.00277781487 - acceleration_s: 0.405916936513 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.597654504 + y: 363.923691761 + z: -31.3219676949 + theta: -1.81460229183 + kappa: -0.00191375717794 + s: 0.91472222328000008 + dkappa: 0 + } + v: 2.00277781487 + a: 0.405916936513 relative_time: 0.41000008583068848 - theta: -1.81460229183 - accumulated_s: 0.91472222328000008 -} -adc_trajectory_point { - x: -124.602613236 - y: 363.903946441 - z: -31.32195119 - - speed: 2.01666665077 - acceleration_s: 0.616783362769 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.602613236 + y: 363.903946441 + z: -31.32195119 + theta: -1.81466837499 + kappa: -0.00191375717794 + s: 0.93488888978999984 + dkappa: 0 + } + v: 2.01666665077 + a: 0.616783362769 relative_time: 0.42000007629394531 - theta: -1.81466837499 - accumulated_s: 0.93488888978999984 -} -adc_trajectory_point { - x: -124.607570356 - y: 363.884150608 - z: -31.3219562313 - - speed: 2.01666665077 - acceleration_s: 0.588264258574 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.607570356 + y: 363.884150608 + z: -31.3219562313 + theta: -1.8146952687 + kappa: -0.00191375717794 + s: 0.9550555563 + dkappa: 0 + } + v: 2.01666665077 + a: 0.588264258574 relative_time: 0.43000006675720215 - theta: -1.8146952687 - accumulated_s: 0.9550555563 -} -adc_trajectory_point { - x: -124.612537258 - y: 363.864291562 - z: -31.3218616117 - - speed: 2.02777767181 - acceleration_s: 0.556305840073 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.612537258 + y: 363.864291562 + z: -31.3218616117 + theta: -1.81476626065 + kappa: -0.00191375717794 + s: 0.97533333302 + dkappa: 0 + } + v: 2.02777767181 + a: 0.556305840073 relative_time: 0.440000057220459 - theta: -1.81476626065 - accumulated_s: 0.97533333302 -} -adc_trajectory_point { - x: -124.612537258 - y: 363.864291562 - z: -31.3218616117 - - speed: 2.02777767181 - acceleration_s: 0.556305840073 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.612537258 + y: 363.864291562 + z: -31.3218616117 + theta: -1.81476626065 + kappa: -0.00191375717794 + s: 0.99561110974 + dkappa: 0 + } + v: 2.02777767181 + a: 0.556305840073 relative_time: 0.440000057220459 - theta: -1.81476626065 - accumulated_s: 0.99561110974 -} -adc_trajectory_point { - x: -124.622499358 - y: 363.824418458 - z: -31.3218937051 - - speed: 2.04166674614 - acceleration_s: 0.48222098721 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.622499358 + y: 363.824418458 + z: -31.3218937051 + theta: -1.81489784186 + kappa: -0.00191375717794 + s: 1.0160277772000001 + dkappa: 0 + } + v: 2.04166674614 + a: 0.48222098721 relative_time: 0.46000003814697266 - theta: -1.81489784186 - accumulated_s: 1.0160277772000001 -} -adc_trajectory_point { - x: -124.627475438 - y: 363.804392094 - z: -31.3218720127 - - speed: 2.04166674614 - acceleration_s: 0.532368831835 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.627475438 + y: 363.804392094 + z: -31.3218720127 + theta: -1.81495720235 + kappa: -0.00191375717794 + s: 1.0364444446599999 + dkappa: 0 + } + v: 2.04166674614 + a: 0.532368831835 relative_time: 0.47000002861022949 - theta: -1.81495720235 - accumulated_s: 1.0364444446599999 -} -adc_trajectory_point { - x: -124.632512007 - y: 363.784329814 - z: -31.3218311286 - - speed: 2.05277776718 - acceleration_s: 0.541348464225 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.632512007 + y: 363.784329814 + z: -31.3218311286 + theta: -1.81505135668 + kappa: -0.00191375717794 + s: 1.0569722223300002 + dkappa: 0 + } + v: 2.05277776718 + a: 0.541348464225 relative_time: 0.48000001907348633 - theta: -1.81505135668 - accumulated_s: 1.0569722223300002 -} -adc_trajectory_point { - x: -124.63750936 - y: 363.76423134 - z: -31.3217679281 - - speed: 2.05277776718 - acceleration_s: 0.384251194079 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.63750936 + y: 363.76423134 + z: -31.3217679281 + theta: -1.8151075005 + kappa: -0.00191375717794 + s: 1.0775000000000001 + dkappa: 0 + } + v: 2.05277776718 + a: 0.384251194079 relative_time: 0.49000000953674316 - theta: -1.8151075005 - accumulated_s: 1.0775000000000001 -} -adc_trajectory_point { - x: -124.64249871 - y: 363.744073275 - z: -31.3217562251 - - speed: 2.06666660309 - acceleration_s: 0.384251194079 - curvature: -0.00187548130221 - curvature_change_rate: 0.00185205855989 +} +trajectory_point { + path_point { + x: -124.64249871 + y: 363.744073275 + z: -31.3217562251 + theta: -1.8151331721 + kappa: -0.00187548130221 + s: 1.09816666603 + dkappa: 0.00185205855989 + } + v: 2.06666660309 + a: 0.384251194079 relative_time: 0.5 - theta: -1.8151331721 - accumulated_s: 1.09816666603 -} -adc_trajectory_point { - x: -124.64249871 - y: 363.744073275 - z: -31.3217562251 - - speed: 2.06666660309 - acceleration_s: 0.471254936837 - curvature: -0.00187548130221 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.64249871 + y: 363.744073275 + z: -31.3217562251 + theta: -1.8151331721 + kappa: -0.00187548130221 + s: 1.11883333206 + dkappa: 0 + } + v: 2.06666660309 + a: 0.471254936837 relative_time: 0.5 - theta: -1.8151331721 - accumulated_s: 1.11883333206 -} -adc_trajectory_point { - x: -124.65260313 - y: 363.703665697 - z: -31.3216385534 - - speed: 2.07500004768 - acceleration_s: 0.392185464525 - curvature: -0.00187548130221 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.65260313 + y: 363.703665697 + z: -31.3216385534 + theta: -1.81530989827 + kappa: -0.00187548130221 + s: 1.13958333254 + dkappa: 0 + } + v: 2.07500004768 + a: 0.392185464525 relative_time: 0.51999998092651367 - theta: -1.81530989827 - accumulated_s: 1.13958333254 -} -adc_trajectory_point { - x: -124.657703511 - y: 363.683362708 - z: -31.3215296138 - - speed: 2.07500004768 - acceleration_s: 0.63036516098 - curvature: -0.00187548130221 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.657703511 + y: 363.683362708 + z: -31.3215296138 + theta: -1.81538619428 + kappa: -0.00187548130221 + s: 1.16033333302 + dkappa: 0 + } + v: 2.07500004768 + a: 0.63036516098 relative_time: 0.52999997138977051 - theta: -1.81538619428 - accumulated_s: 1.16033333302 -} -adc_trajectory_point { - x: -124.662779303 - y: 363.663037709 - z: -31.3214895967 - - speed: 2.08333325386 - acceleration_s: 0.438201118283 - curvature: -0.00179892968375 - curvature_change_rate: 0.00367447782632 +} +trajectory_point { + path_point { + x: -124.662779303 + y: 363.663037709 + z: -31.3214895967 + theta: -1.81543663872 + kappa: -0.00179892968375 + s: 1.1811666655600002 + dkappa: 0.00367447782632 + } + v: 2.08333325386 + a: 0.438201118283 relative_time: 0.53999996185302734 - theta: -1.81543663872 - accumulated_s: 1.1811666655600002 -} -adc_trajectory_point { - x: -124.667900187 - y: 363.642640381 - z: -31.3213308156 - - speed: 2.08333325386 - acceleration_s: 0.565809026914 - curvature: -0.00179892968375 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.667900187 + y: 363.642640381 + z: -31.3213308156 + theta: -1.81550191038 + kappa: -0.00179892968375 + s: 1.2019999980999998 + dkappa: 0 + } + v: 2.08333325386 + a: 0.565809026914 relative_time: 0.54999995231628418 - theta: -1.81550191038 - accumulated_s: 1.2019999980999998 -} -adc_trajectory_point { - x: -124.673044801 - y: 363.622231883 - z: -31.3212905452 - - speed: 2.09722232819 - acceleration_s: 0.565809026914 - curvature: -0.0017606539392 - curvature_change_rate: 0.0018250685224 +} +trajectory_point { + path_point { + x: -124.673044801 + y: 363.622231883 + z: -31.3212905452 + theta: -1.81555087063 + kappa: -0.0017606539392 + s: 1.22297222138 + dkappa: 0.0018250685224 + } + v: 2.09722232819 + a: 0.565809026914 relative_time: 0.559999942779541 - theta: -1.81555087063 - accumulated_s: 1.22297222138 -} -adc_trajectory_point { - x: -124.678227606 - y: 363.60177704 - z: -31.321100113 - - speed: 2.09722232819 - acceleration_s: 0.410090532827 - curvature: -0.0017606539392 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.678227606 + y: 363.60177704 + z: -31.321100113 + theta: -1.81562391057 + kappa: -0.0017606539392 + s: 1.2439444446599999 + dkappa: 0 + } + v: 2.09722232819 + a: 0.410090532827 relative_time: 0.56999993324279785 - theta: -1.81562391057 - accumulated_s: 1.2439444446599999 -} -adc_trajectory_point { - x: -124.683408173 - y: 363.581283104 - z: -31.321023169 - - speed: 2.10833334923 - acceleration_s: 0.449863896268 - curvature: -0.00168410257488 - curvature_change_rate: 0.00363089472296 +} +trajectory_point { + path_point { + x: -124.683408173 + y: 363.581283104 + z: -31.321023169 + theta: -1.81565742152 + kappa: -0.00168410257488 + s: 1.26502777815 + dkappa: 0.00363089472296 + } + v: 2.10833334923 + a: 0.449863896268 relative_time: 0.58000016212463379 - theta: -1.81565742152 - accumulated_s: 1.26502777815 -} -adc_trajectory_point { - x: -124.688631183 - y: 363.560746635 - z: -31.3208483625 - - speed: 2.10833334923 - acceleration_s: 0.44139750351 - curvature: -0.00168410257488 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.688631183 + y: 363.560746635 + z: -31.3208483625 + theta: -1.81570010868 + kappa: -0.00168410257488 + s: 1.28611111164 + dkappa: 0 + } + v: 2.10833334923 + a: 0.44139750351 relative_time: 0.59000015258789062 - theta: -1.81570010868 - accumulated_s: 1.28611111164 -} -adc_trajectory_point { - x: -124.693826843 - y: 363.540166385 - z: -31.3206919003 - - speed: 2.1166665554 - acceleration_s: 0.44139750351 - curvature: -0.00160755137088 - curvature_change_rate: 0.00361659250512 +} +trajectory_point { + path_point { + x: -124.693826843 + y: 363.540166385 + z: -31.3206919003 + theta: -1.81572846193 + kappa: -0.00160755137088 + s: 1.3072777772 + dkappa: 0.00361659250512 + } + v: 2.1166665554 + a: 0.44139750351 relative_time: 0.60000014305114746 - theta: -1.81572846193 - accumulated_s: 1.3072777772 -} -adc_trajectory_point { - x: -124.699096691 - y: 363.519545692 - z: -31.3205524767 - - speed: 2.1166665554 - acceleration_s: 0.507769781112 - curvature: -0.00160755137088 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.699096691 + y: 363.519545692 + z: -31.3205524767 + theta: -1.81579399972 + kappa: -0.00160755137088 + s: 1.32844444275 + dkappa: 0 + } + v: 2.1166665554 + a: 0.507769781112 relative_time: 0.6100001335144043 - theta: -1.81579399972 - accumulated_s: 1.32844444275 -} -adc_trajectory_point { - x: -124.704331371 - y: 363.498896276 - z: -31.3203653041 - - speed: 2.125 - acceleration_s: 0.33837386187 - curvature: -0.00149272484953 - curvature_change_rate: 0.00540360100454 +} +trajectory_point { + path_point { + x: -124.704331371 + y: 363.498896276 + z: -31.3203653041 + theta: -1.815802083 + kappa: -0.00149272484953 + s: 1.3496944427500002 + dkappa: 0.00540360100454 + } + v: 2.125 + a: 0.33837386187 relative_time: 0.62000012397766113 - theta: -1.815802083 - accumulated_s: 1.3496944427500002 -} -adc_trajectory_point { - x: -124.709628969 - y: 363.478187565 - z: -31.3201688137 - - speed: 2.125 - acceleration_s: 0.501408729412 - curvature: -0.00149272484953 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.709628969 + y: 363.478187565 + z: -31.3201688137 + theta: -1.81587572212 + kappa: -0.00149272484953 + s: 1.37094444275 + dkappa: 0 + } + v: 2.125 + a: 0.501408729412 relative_time: 0.630000114440918 - theta: -1.81587572212 - accumulated_s: 1.37094444275 -} -adc_trajectory_point { - x: -124.714943161 - y: 363.457429119 - z: -31.3199786805 - - speed: 2.1333334446 - acceleration_s: 0.554039056654 - curvature: -0.00137789864791 - curvature_change_rate: 0.00538247792035 +} +trajectory_point { + path_point { + x: -124.714943161 + y: 363.457429119 + z: -31.3199786805 + theta: -1.81592346159 + kappa: -0.00137789864791 + s: 1.3922777772 + dkappa: 0.00538247792035 + } + v: 2.1333334446 + a: 0.554039056654 relative_time: 0.6400001049041748 - theta: -1.81592346159 - accumulated_s: 1.3922777772 -} -adc_trajectory_point { - x: -124.720250813 - y: 363.436649017 - z: -31.3197827172 - - speed: 2.1333334446 - acceleration_s: 0.395016178716 - curvature: -0.00137789864791 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.720250813 + y: 363.436649017 + z: -31.3197827172 + theta: -1.81597240124 + kappa: -0.00137789864791 + s: 1.4136111116399999 + dkappa: 0 + } + v: 2.1333334446 + a: 0.395016178716 relative_time: 0.65000009536743164 - theta: -1.81597240124 - accumulated_s: 1.4136111116399999 -} -adc_trajectory_point { - x: -124.725576877 - y: 363.41580601 - z: -31.3195367893 - - speed: 2.14444446564 - acceleration_s: 0.395016178716 - curvature: -0.00130134790508 - curvature_change_rate: 0.00356972372356 +} +trajectory_point { + path_point { + x: -124.725576877 + y: 363.41580601 + z: -31.3195367893 + theta: -1.81600363529 + kappa: -0.00130134790508 + s: 1.4350555563 + dkappa: 0.00356972372356 + } + v: 2.14444446564 + a: 0.395016178716 relative_time: 0.66000008583068848 - theta: -1.81600363529 - accumulated_s: 1.4350555563 -} -adc_trajectory_point { - x: -124.73087675 - y: 363.39494827 - z: -31.3193469858 - - speed: 2.14444446564 - acceleration_s: 0.318885692776 - curvature: -0.00130134790508 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.73087675 + y: 363.39494827 + z: -31.3193469858 + theta: -1.81600079944 + kappa: -0.00130134790508 + s: 1.4565000009600002 + dkappa: 0 + } + v: 2.14444446564 + a: 0.318885692776 relative_time: 0.67000007629394531 - theta: -1.81600079944 - accumulated_s: 1.4565000009600002 -} -adc_trajectory_point { - x: -124.736216839 - y: 363.374057061 - z: -31.3190368135 - - speed: 2.15277767181 - acceleration_s: 0.333498077567 - curvature: -0.00122479739336 - curvature_change_rate: 0.0035558949131 +} +trajectory_point { + path_point { + x: -124.736216839 + y: 363.374057061 + z: -31.3190368135 + theta: -1.81606191847 + kappa: -0.00122479739336 + s: 1.47802777767 + dkappa: 0.0035558949131 + } + v: 2.15277767181 + a: 0.333498077567 relative_time: 0.68000006675720215 - theta: -1.81606191847 - accumulated_s: 1.47802777767 -} -adc_trajectory_point { - x: -124.741576664 - y: 363.353124751 - z: -31.31877816 - - speed: 2.15277767181 - acceleration_s: 0.425183516383 - curvature: -0.00122479739336 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.741576664 + y: 363.353124751 + z: -31.31877816 + theta: -1.81611229004 + kappa: -0.00122479739336 + s: 1.49955555439 + dkappa: 0 + } + v: 2.15277767181 + a: 0.425183516383 relative_time: 0.690000057220459 - theta: -1.81611229004 - accumulated_s: 1.49955555439 -} -adc_trajectory_point { - x: -124.741576664 - y: 363.353124751 - z: -31.31877816 - - speed: 2.16111111641 - acceleration_s: 0.425183516383 - curvature: -0.00118652218167 - curvature_change_rate: 0.00177108948228 +} +trajectory_point { + path_point { + x: -124.741576664 + y: 363.353124751 + z: -31.31877816 + theta: -1.81611229004 + kappa: -0.00118652218167 + s: 1.52116666556 + dkappa: 0.00177108948228 + } + v: 2.16111111641 + a: 0.425183516383 relative_time: 0.690000057220459 - theta: -1.81611229004 - accumulated_s: 1.52116666556 -} -adc_trajectory_point { - x: -124.752221031 - y: 363.311269328 - z: -31.3181767426 - - speed: 2.16111111641 - acceleration_s: 0.424061091593 - curvature: -0.00118652218167 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.752221031 + y: 363.311269328 + z: -31.3181767426 + theta: -1.81618315245 + kappa: -0.00118652218167 + s: 1.54277777672 + dkappa: 0 + } + v: 2.16111111641 + a: 0.424061091593 relative_time: 0.71000003814697266 - theta: -1.81618315245 - accumulated_s: 1.54277777672 -} -adc_trajectory_point { - x: -124.757590008 - y: 363.290219413 - z: -31.3178582489 - - speed: 2.16666674614 - acceleration_s: 0.403375544049 - curvature: -0.00114824699823 - curvature_change_rate: 0.00176654686347 +} +trajectory_point { + path_point { + x: -124.757590008 + y: 363.290219413 + z: -31.3178582489 + theta: -1.81622559154 + kappa: -0.00114824699823 + s: 1.5644444441799998 + dkappa: 0.00176654686347 + } + v: 2.16666674614 + a: 0.403375544049 relative_time: 0.72000002861022949 - theta: -1.81622559154 - accumulated_s: 1.5644444441799998 -} -adc_trajectory_point { - x: -124.762941442 - y: 363.269138582 - z: -31.3174934853 - - speed: 2.16666674614 - acceleration_s: 0.326489423611 - curvature: -0.00114824699823 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.762941442 + y: 363.269138582 + z: -31.3174934853 + theta: -1.81625356007 + kappa: -0.00114824699823 + s: 1.5861111116400002 + dkappa: 0 + } + v: 2.16666674614 + a: 0.326489423611 relative_time: 0.73000001907348633 - theta: -1.81625356007 - accumulated_s: 1.5861111116400002 -} -adc_trajectory_point { - x: -124.768338499 - y: 363.247992939 - z: -31.3171917684 - - speed: 2.17499995232 - acceleration_s: 0.519132437172 - curvature: -0.00110997184211 - curvature_change_rate: 0.00175977733142 +} +trajectory_point { + path_point { + x: -124.768338499 + y: 363.247992939 + z: -31.3171917684 + theta: -1.8162998717 + kappa: -0.00110997184211 + s: 1.60786111117 + dkappa: 0.00175977733142 + } + v: 2.17499995232 + a: 0.519132437172 relative_time: 0.74000000953674316 - theta: -1.8162998717 - accumulated_s: 1.60786111117 -} -adc_trajectory_point { - x: -124.768338499 - y: 363.247992939 - z: -31.3171917684 - - speed: 2.17499995232 - acceleration_s: 0.519132437172 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.768338499 + y: 363.247992939 + z: -31.3171917684 + theta: -1.8162998717 + kappa: -0.00110997184211 + s: 1.62961111069 + dkappa: 0 + } + v: 2.17499995232 + a: 0.519132437172 relative_time: 0.74000000953674316 - theta: -1.8162998717 - accumulated_s: 1.62961111069 -} -adc_trajectory_point { - x: -124.779094251 - y: 363.205595132 - z: -31.3165621795 - - speed: 2.18333339691 - acceleration_s: 0.397473427894 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.779094251 + y: 363.205595132 + z: -31.3165621795 + theta: -1.81634104056 + kappa: -0.00110997184211 + s: 1.65144444466 + dkappa: 0 + } + v: 2.18333339691 + a: 0.397473427894 relative_time: 0.75999999046325684 - theta: -1.81634104056 - accumulated_s: 1.65144444466 -} -adc_trajectory_point { - x: -124.784453844 - y: 363.184287854 - z: -31.316247059 - - speed: 2.18333339691 - acceleration_s: 0.454685810527 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.784453844 + y: 363.184287854 + z: -31.316247059 + theta: -1.8162850446 + kappa: -0.00110997184211 + s: 1.6732777786300002 + dkappa: 0 + } + v: 2.18333339691 + a: 0.454685810527 relative_time: 0.76999998092651367 - theta: -1.8162850446 - accumulated_s: 1.6732777786300002 -} -adc_trajectory_point { - x: -124.789850241 - y: 363.16298002 - z: -31.3158767791 - - speed: 2.18333339691 - acceleration_s: 0.29593802736 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.789850241 + y: 363.16298002 + z: -31.3158767791 + theta: -1.81630023217 + kappa: -0.00110997184211 + s: 1.6951111125999998 + dkappa: 0 + } + v: 2.18333339691 + a: 0.29593802736 relative_time: 0.77999997138977051 - theta: -1.81630023217 - accumulated_s: 1.6951111125999998 -} -adc_trajectory_point { - x: -124.795270183 - y: 363.141635367 - z: -31.3155408166 - - speed: 2.19166660309 - acceleration_s: 0.366713112667 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.795270183 + y: 363.141635367 + z: -31.3155408166 + theta: -1.8163197048 + kappa: -0.00110997184211 + s: 1.71702777863 + dkappa: 0 + } + v: 2.19166660309 + a: 0.366713112667 relative_time: 0.78999996185302734 - theta: -1.8163197048 - accumulated_s: 1.71702777863 -} -adc_trajectory_point { - x: -124.800712164 - y: 363.120264703 - z: -31.3152514435 - - speed: 2.20000004768 - acceleration_s: 0.322351732867 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.800712164 + y: 363.120264703 + z: -31.3152514435 + theta: -1.81633196238 + kappa: -0.00110997184211 + s: 1.7390277791100002 + dkappa: 0 + } + v: 2.20000004768 + a: 0.322351732867 relative_time: 0.79999995231628418 - theta: -1.81633196238 - accumulated_s: 1.7390277791100002 -} -adc_trajectory_point { - x: -124.806146552 - y: 363.098872199 - z: -31.3149091844 - - speed: 2.20000004768 - acceleration_s: 0.245755836194 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.806146552 + y: 363.098872199 + z: -31.3149091844 + theta: -1.81635659266 + kappa: -0.00110997184211 + s: 1.76102777958 + dkappa: 0 + } + v: 2.20000004768 + a: 0.245755836194 relative_time: 0.809999942779541 - theta: -1.81635659266 - accumulated_s: 1.76102777958 -} -adc_trajectory_point { - x: -124.811598191 - y: 363.077421343 - z: -31.3145428207 - - speed: 2.205555439 - acceleration_s: 0.408752886651 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.811598191 + y: 363.077421343 + z: -31.3145428207 + theta: -1.81634827804 + kappa: -0.00110997184211 + s: 1.78308333397 + dkappa: 0 + } + v: 2.205555439 + a: 0.408752886651 relative_time: 0.81999993324279785 - theta: -1.81634827804 - accumulated_s: 1.78308333397 -} -adc_trajectory_point { - x: -124.81708544 - y: 363.055964991 - z: -31.3142130179 - - speed: 2.205555439 - acceleration_s: 0.312351941169 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.81708544 + y: 363.055964991 + z: -31.3142130179 + theta: -1.81639688851 + kappa: -0.00110997184211 + s: 1.8051388883600001 + dkappa: 0 + } + v: 2.205555439 + a: 0.312351941169 relative_time: 0.83000016212463379 - theta: -1.81639688851 - accumulated_s: 1.8051388883600001 -} -adc_trajectory_point { - x: -124.81708544 - y: 363.055964991 - z: -31.3142130179 - - speed: 2.21388888359 - acceleration_s: 0.312351941169 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.81708544 + y: 363.055964991 + z: -31.3142130179 + theta: -1.81639688851 + kappa: -0.00110997184211 + s: 1.8272777772 + dkappa: 0 + } + v: 2.21388888359 + a: 0.312351941169 relative_time: 0.83000016212463379 - theta: -1.81639688851 - accumulated_s: 1.8272777772 -} -adc_trajectory_point { - x: -124.822590897 - y: 363.034458283 - z: -31.3138107536 - - speed: 2.21388888359 - acceleration_s: 0.435838020412 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.822590897 + y: 363.034458283 + z: -31.3138107536 + theta: -1.81646420911 + kappa: -0.00110997184211 + s: 1.8494166660300002 + dkappa: 0 + } + v: 2.21388888359 + a: 0.435838020412 relative_time: 0.84000015258789062 - theta: -1.81646420911 - accumulated_s: 1.8494166660300002 -} -adc_trajectory_point { - x: -124.833592056 - y: 362.99131051 - z: -31.3131701481 - - speed: 2.22499990463 - acceleration_s: 0.332456477929 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.833592056 + y: 362.99131051 + z: -31.3131701481 + theta: -1.81650298808 + kappa: -0.00110997184211 + s: 1.8716666650799998 + dkappa: 0 + } + v: 2.22499990463 + a: 0.332456477929 relative_time: 0.8600001335144043 - theta: -1.81650298808 - accumulated_s: 1.8716666650799998 -} -adc_trajectory_point { - x: -124.83909123 - y: 362.969675964 - z: -31.3128626989 - - speed: 2.22499990463 - acceleration_s: 0.403803181453 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.83909123 + y: 362.969675964 + z: -31.3128626989 + theta: -1.81650780592 + kappa: -0.00110997184211 + s: 1.8939166641299998 + dkappa: 0 + } + v: 2.22499990463 + a: 0.403803181453 relative_time: 0.87000012397766113 - theta: -1.81650780592 - accumulated_s: 1.8939166641299998 -} -adc_trajectory_point { - x: -124.844627275 - y: 362.948035607 - z: -31.312549402 - - speed: 2.23333334923 - acceleration_s: 0.284167077771 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.844627275 + y: 362.948035607 + z: -31.312549402 + theta: -1.81654895806 + kappa: -0.00110997184211 + s: 1.91624999762 + dkappa: 0 + } + v: 2.23333334923 + a: 0.284167077771 relative_time: 0.880000114440918 - theta: -1.81654895806 - accumulated_s: 1.91624999762 -} -adc_trajectory_point { - x: -124.850138769 - y: 362.926365171 - z: -31.3121814989 - - speed: 2.23333334923 - acceleration_s: 0.219597182708 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.850138769 + y: 362.926365171 + z: -31.3121814989 + theta: -1.81656080112 + kappa: -0.00110997184211 + s: 1.9385833311099998 + dkappa: 0 + } + v: 2.23333334923 + a: 0.219597182708 relative_time: 0.8900001049041748 - theta: -1.81656080112 - accumulated_s: 1.9385833311099998 -} -adc_trajectory_point { - x: -124.855733527 - y: 362.904661558 - z: -31.3118566293 - - speed: 2.2416665554 - acceleration_s: 0.358176007095 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.855733527 + y: 362.904661558 + z: -31.3118566293 + theta: -1.81666201751 + kappa: -0.00110997184211 + s: 1.96099999666 + dkappa: 0 + } + v: 2.2416665554 + a: 0.358176007095 relative_time: 0.90000009536743164 - theta: -1.81666201751 - accumulated_s: 1.96099999666 -} -adc_trajectory_point { - x: -124.861246653 - y: 362.882922273 - z: -31.311575816 - - speed: 2.2416665554 - acceleration_s: 0.272688389046 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.861246653 + y: 362.882922273 + z: -31.311575816 + theta: -1.81665735581 + kappa: -0.00110997184211 + s: 1.9834166622199998 + dkappa: 0 + } + v: 2.2416665554 + a: 0.272688389046 relative_time: 0.91000008583068848 - theta: -1.81665735581 - accumulated_s: 1.9834166622199998 -} -adc_trajectory_point { - x: -124.866788905 - y: 362.861141033 - z: -31.3113530278 - - speed: 2.24722218513 - acceleration_s: 0.38116814692 - curvature: -0.0010716967124 - curvature_change_rate: 0.00170321964409 +} +trajectory_point { + path_point { + x: -124.866788905 + y: 362.861141033 + z: -31.3113530278 + theta: -1.81668984453 + kappa: -0.0010716967124 + s: 2.00588888407 + dkappa: 0.00170321964409 + } + v: 2.24722218513 + a: 0.38116814692 relative_time: 0.92000007629394531 - theta: -1.81668984453 - accumulated_s: 2.00588888407 -} -adc_trajectory_point { - x: -124.872339689 - y: 362.839321604 - z: -31.3110525412 - - speed: 2.24722218513 - acceleration_s: 0.395045581062 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.872339689 + y: 362.839321604 + z: -31.3110525412 + theta: -1.81670429751 + kappa: -0.0010716967124 + s: 2.02836110592 + dkappa: 0 + } + v: 2.24722218513 + a: 0.395045581062 relative_time: 0.93000006675720215 - theta: -1.81670429751 - accumulated_s: 2.02836110592 -} -adc_trajectory_point { - x: -124.877914017 - y: 362.817487959 - z: -31.3107835148 - - speed: 2.25277781487 - acceleration_s: 0.30269333311 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.877914017 + y: 362.817487959 + z: -31.3107835148 + theta: -1.81677195389 + kappa: -0.0010716967124 + s: 2.05088888407 + dkappa: 0 + } + v: 2.25277781487 + a: 0.30269333311 relative_time: 0.940000057220459 - theta: -1.81677195389 - accumulated_s: 2.05088888407 -} -adc_trajectory_point { - x: -124.877914017 - y: 362.817487959 - z: -31.3107835148 - - speed: 2.25277781487 - acceleration_s: 0.30269333311 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.877914017 + y: 362.817487959 + z: -31.3107835148 + theta: -1.81677195389 + kappa: -0.0010716967124 + s: 2.07341666222 + dkappa: 0 + } + v: 2.25277781487 + a: 0.30269333311 relative_time: 0.940000057220459 - theta: -1.81677195389 - accumulated_s: 2.07341666222 -} -adc_trajectory_point { - x: -124.88912335 - y: 362.773678888 - z: -31.3103790181 - - speed: 2.26111102104 - acceleration_s: 0.360417891351 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.88912335 + y: 362.773678888 + z: -31.3103790181 + theta: -1.81688383407 + kappa: -0.0010716967124 + s: 2.09602777243 + dkappa: 0 + } + v: 2.26111102104 + a: 0.360417891351 relative_time: 0.96000003814697266 - theta: -1.81688383407 - accumulated_s: 2.09602777243 -} -adc_trajectory_point { - x: -124.894731201 - y: 362.751723765 - z: -31.3102013376 - - speed: 2.26111102104 - acceleration_s: 0.379883345667 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.894731201 + y: 362.751723765 + z: -31.3102013376 + theta: -1.81692629508 + kappa: -0.0010716967124 + s: 2.11863888264 + dkappa: 0 + } + v: 2.26111102104 + a: 0.379883345667 relative_time: 0.97000002861022949 - theta: -1.81692629508 - accumulated_s: 2.11863888264 -} -adc_trajectory_point { - x: -124.900382966 - y: 362.72974915 - z: -31.3100582911 - - speed: 2.26944446564 - acceleration_s: 0.3383902173 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.900382966 + y: 362.72974915 + z: -31.3100582911 + theta: -1.8169942881 + kappa: -0.0010716967124 + s: 2.1413333273 + dkappa: 0 + } + v: 2.26944446564 + a: 0.3383902173 relative_time: 0.98000001907348633 - theta: -1.8169942881 - accumulated_s: 2.1413333273 -} -adc_trajectory_point { - x: -124.906011486 - y: 362.707746991 - z: -31.3099116171 - - speed: 2.26944446564 - acceleration_s: 0.3383902173 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.906011486 + y: 362.707746991 + z: -31.3099116171 + theta: -1.81701167396 + kappa: -0.0010716967124 + s: 2.16402777195 + dkappa: 0 + } + v: 2.26944446564 + a: 0.3383902173 relative_time: 0.99000000953674316 - theta: -1.81701167396 - accumulated_s: 2.16402777195 -} -adc_trajectory_point { - x: -124.911657594 - y: 362.685697221 - z: -31.3098106673 - - speed: 2.27777767181 - acceleration_s: 0.253441101364 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.911657594 + y: 362.685697221 + z: -31.3098106673 + theta: -1.81704007269 + kappa: -0.0010716967124 + s: 2.18680554867 + dkappa: 0 + } + v: 2.27777767181 + a: 0.253441101364 relative_time: 1 - theta: -1.81704007269 - accumulated_s: 2.18680554867 -} -adc_trajectory_point { - x: -124.917342271 - y: 362.663621334 - z: -31.3097051326 - - speed: 2.27777767181 - acceleration_s: 0.351491129558 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.917342271 + y: 362.663621334 + z: -31.3097051326 + theta: -1.817078017 + kappa: -0.0010716967124 + s: 2.20958332539 + dkappa: 0 + } + v: 2.27777767181 + a: 0.351491129558 relative_time: 1.0099999904632568 - theta: -1.817078017 - accumulated_s: 2.20958332539 -} -adc_trajectory_point { - x: -124.922997579 - y: 362.641505243 - z: -31.3096190887 - - speed: 2.28333330154 - acceleration_s: 0.335841421129 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.922997579 + y: 362.641505243 + z: -31.3096190887 + theta: -1.81708784507 + kappa: -0.0010716967124 + s: 2.2324166584 + dkappa: 0 + } + v: 2.28333330154 + a: 0.335841421129 relative_time: 1.0199999809265137 - theta: -1.81708784507 - accumulated_s: 2.2324166584 -} -adc_trajectory_point { - x: -124.928712232 - y: 362.619380661 - z: -31.3095990429 - - speed: 2.28333330154 - acceleration_s: 0.320966118743 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.928712232 + y: 362.619380661 + z: -31.3095990429 + theta: -1.81714495953 + kappa: -0.0010716967124 + s: 2.25524999142 + dkappa: 0 + } + v: 2.28333330154 + a: 0.320966118743 relative_time: 1.0299999713897705 - theta: -1.81714495953 - accumulated_s: 2.25524999142 -} -adc_trajectory_point { - x: -124.934424731 - y: 362.597219355 - z: -31.309548161 - - speed: 2.29166674614 - acceleration_s: 0.276110419835 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.934424731 + y: 362.597219355 + z: -31.309548161 + theta: -1.81716699596 + kappa: -0.0010716967124 + s: 2.27816665888 + dkappa: 0 + } + v: 2.29166674614 + a: 0.276110419835 relative_time: 1.0399999618530273 - theta: -1.81716699596 - accumulated_s: 2.27816665888 -} -adc_trajectory_point { - x: -124.940134488 - y: 362.575015263 - z: -31.309490839 - - speed: 2.29166674614 - acceleration_s: 0.276110419835 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.940134488 + y: 362.575015263 + z: -31.309490839 + theta: -1.81718843848 + kappa: -0.0010716967124 + s: 2.30108332634 + dkappa: 0 + } + v: 2.29166674614 + a: 0.276110419835 relative_time: 1.0499999523162842 - theta: -1.81718843848 - accumulated_s: 2.30108332634 -} -adc_trajectory_point { - x: -124.945890063 - y: 362.552795248 - z: -31.3095432203 - - speed: 2.29999995232 - acceleration_s: 0.354382152136 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.945890063 + y: 362.552795248 + z: -31.3095432203 + theta: -1.81723244496 + kappa: -0.0010716967124 + s: 2.3240833258699998 + dkappa: 0 + } + v: 2.29999995232 + a: 0.354382152136 relative_time: 1.059999942779541 - theta: -1.81723244496 - accumulated_s: 2.3240833258699998 -} -adc_trajectory_point { - x: -124.951605962 - y: 362.530523981 - z: -31.3095214432 - - speed: 2.29999995232 - acceleration_s: 0.324520312094 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.951605962 + y: 362.530523981 + z: -31.3095214432 + theta: -1.81723087207 + kappa: -0.0010716967124 + s: 2.34708332539 + dkappa: 0 + } + v: 2.29999995232 + a: 0.324520312094 relative_time: 1.0699999332427979 - theta: -1.81723087207 - accumulated_s: 2.34708332539 -} -adc_trajectory_point { - x: -124.957321709 - y: 362.508220335 - z: -31.3095393144 - - speed: 2.30555558205 - acceleration_s: 0.348487246706 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.957321709 + y: 362.508220335 + z: -31.3095393144 + theta: -1.81721876492 + kappa: -0.0010716967124 + s: 2.37013888121 + dkappa: 0 + } + v: 2.30555558205 + a: 0.348487246706 relative_time: 1.0800001621246338 - theta: -1.81721876492 - accumulated_s: 2.37013888121 -} -adc_trajectory_point { - x: -124.963071922 - y: 362.485895519 - z: -31.3095405428 - - speed: 2.30555558205 - acceleration_s: 0.32138151059 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.963071922 + y: 362.485895519 + z: -31.3095405428 + theta: -1.81724543977 + kappa: -0.0010716967124 + s: 2.39319443703 + dkappa: 0 + } + v: 2.30555558205 + a: 0.32138151059 relative_time: 1.0900001525878906 - theta: -1.81724543977 - accumulated_s: 2.39319443703 -} -adc_trajectory_point { - x: -124.968806615 - y: 362.463537572 - z: -31.3095670613 - - speed: 2.31388878822 - acceleration_s: 0.280537841948 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.968806615 + y: 362.463537572 + z: -31.3095670613 + theta: -1.81726134313 + kappa: -0.0010716967124 + s: 2.41633332491 + dkappa: 0 + } + v: 2.31388878822 + a: 0.280537841948 relative_time: 1.1000001430511475 - theta: -1.81726134313 - accumulated_s: 2.41633332491 -} -adc_trajectory_point { - x: -124.974586177 - y: 362.441142231 - z: -31.3095919834 - - speed: 2.31388878822 - acceleration_s: 0.370225847881 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.974586177 + y: 362.441142231 + z: -31.3095919834 + theta: -1.81731874733 + kappa: -0.0010716967124 + s: 2.43947221279 + dkappa: 0 + } + v: 2.31388878822 + a: 0.370225847881 relative_time: 1.1100001335144043 - theta: -1.81731874733 - accumulated_s: 2.43947221279 -} -adc_trajectory_point { - x: -124.980340511 - y: 362.418729208 - z: -31.3095278786 - - speed: 2.32222223282 - acceleration_s: 0.241979496989 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.980340511 + y: 362.418729208 + z: -31.3095278786 + theta: -1.81734233112 + kappa: -0.0010716967124 + s: 2.46269443512 + dkappa: 0 + } + v: 2.32222223282 + a: 0.241979496989 relative_time: 1.1200001239776611 - theta: -1.81734233112 - accumulated_s: 2.46269443512 -} -adc_trajectory_point { - x: -124.986108794 - y: 362.396299265 - z: -31.3095189845 - - speed: 2.32222223282 - acceleration_s: 0.258339113235 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.986108794 + y: 362.396299265 + z: -31.3095189845 + theta: -1.81741367267 + kappa: -0.0010716967124 + s: 2.48591665745 + dkappa: 0 + } + v: 2.32222223282 + a: 0.258339113235 relative_time: 1.130000114440918 - theta: -1.81741367267 - accumulated_s: 2.48591665745 -} -adc_trajectory_point { - x: -124.991854603 - y: 362.373844839 - z: -31.3094680347 - - speed: 2.32777786255 - acceleration_s: 0.206151345491 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.991854603 + y: 362.373844839 + z: -31.3094680347 + theta: -1.81742356958 + kappa: -0.0010716967124 + s: 2.50919443608 + dkappa: 0 + } + v: 2.32777786255 + a: 0.206151345491 relative_time: 1.1400001049041748 - theta: -1.81742356958 - accumulated_s: 2.50919443608 -} -adc_trajectory_point { - x: -124.99761637 - y: 362.351373119 - z: -31.3094466757 - - speed: 2.32777786255 - acceleration_s: 0.206151345491 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.99761637 + y: 362.351373119 + z: -31.3094466757 + theta: -1.81747367091 + kappa: -0.0010716967124 + s: 2.5324722147 + dkappa: 0 + } + v: 2.32777786255 + a: 0.206151345491 relative_time: 1.1500000953674316 - theta: -1.81747367091 - accumulated_s: 2.5324722147 -} -adc_trajectory_point { - x: -125.003396772 - y: 362.328847582 - z: -31.3093775567 - - speed: 2.33333325386 - acceleration_s: 0.379817082608 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.003396772 + y: 362.328847582 + z: -31.3093775567 + theta: -1.81754148719 + kappa: -0.0010716967124 + s: 2.5558055472400003 + dkappa: 0 + } + v: 2.33333325386 + a: 0.379817082608 relative_time: 1.1600000858306885 - theta: -1.81754148719 - accumulated_s: 2.5558055472400003 -} -adc_trajectory_point { - x: -125.009165892 - y: 362.306293563 - z: -31.3092897991 - - speed: 2.33333325386 - acceleration_s: 0.299134172747 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.009165892 + y: 362.306293563 + z: -31.3092897991 + theta: -1.81757923795 + kappa: -0.0010716967124 + s: 2.5791388797800003 + dkappa: 0 + } + v: 2.33333325386 + a: 0.299134172747 relative_time: 1.1700000762939453 - theta: -1.81757923795 - accumulated_s: 2.5791388797800003 -} -adc_trajectory_point { - x: -125.01491479 - y: 362.283695177 - z: -31.3091968307 - - speed: 2.33888888359 - acceleration_s: 0.360938366845 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.01491479 + y: 362.283695177 + z: -31.3091968307 + theta: -1.81761911764 + kappa: -0.0010716967124 + s: 2.60252776861 + dkappa: 0 + } + v: 2.33888888359 + a: 0.360938366845 relative_time: 1.1800000667572021 - theta: -1.81761911764 - accumulated_s: 2.60252776861 -} -adc_trajectory_point { - x: -125.020689332 - y: 362.261076162 - z: -31.3090890879 - - speed: 2.33888888359 - acceleration_s: 0.349436649607 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.020689332 + y: 362.261076162 + z: -31.3090890879 + theta: -1.81768910552 + kappa: -0.0010716967124 + s: 2.6259166574500004 + dkappa: 0 + } + v: 2.33888888359 + a: 0.349436649607 relative_time: 1.190000057220459 - theta: -1.81768910552 - accumulated_s: 2.6259166574500004 -} -adc_trajectory_point { - x: -125.020689332 - y: 362.261076162 - z: -31.3090890879 - - speed: 2.34722232819 - acceleration_s: 0.349436649607 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.020689332 + y: 362.261076162 + z: -31.3090890879 + theta: -1.81768910552 + kappa: -0.0010716967124 + s: 2.64938888073 + dkappa: 0 + } + v: 2.34722232819 + a: 0.349436649607 relative_time: 1.190000057220459 - theta: -1.81768910552 - accumulated_s: 2.64938888073 -} -adc_trajectory_point { - x: -125.032223512 - y: 362.215734672 - z: -31.3088880777 - - speed: 2.34722232819 - acceleration_s: 0.382746253399 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.032223512 + y: 362.215734672 + z: -31.3088880777 + theta: -1.81779317675 + kappa: -0.0010716967124 + s: 2.67286110401 + dkappa: 0 + } + v: 2.34722232819 + a: 0.382746253399 relative_time: 1.2100000381469727 - theta: -1.81779317675 - accumulated_s: 2.67286110401 -} -adc_trajectory_point { - x: -125.03801035 - y: 362.193008906 - z: -31.3087713663 - - speed: 2.35833334923 - acceleration_s: 0.355088601835 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.03801035 + y: 362.193008906 + z: -31.3087713663 + theta: -1.81784525819 + kappa: -0.0010716967124 + s: 2.6964444375100003 + dkappa: 0 + } + v: 2.35833334923 + a: 0.355088601835 relative_time: 1.2200000286102295 - theta: -1.81784525819 - accumulated_s: 2.6964444375100003 -} -adc_trajectory_point { - x: -125.043777403 - y: 362.17025142 - z: -31.3086255761 - - speed: 2.35833334923 - acceleration_s: 0.293401082275 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.043777403 + y: 362.17025142 + z: -31.3086255761 + theta: -1.81789035034 + kappa: -0.0010716967124 + s: 2.720027771 + dkappa: 0 + } + v: 2.35833334923 + a: 0.293401082275 relative_time: 1.2300000190734863 - theta: -1.81789035034 - accumulated_s: 2.720027771 -} -adc_trajectory_point { - x: -125.049547628 - y: 362.147452091 - z: -31.3085405938 - - speed: 2.3666665554 - acceleration_s: 0.392681080735 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.049547628 + y: 362.147452091 + z: -31.3085405938 + theta: -1.81791038105 + kappa: -0.0010716967124 + s: 2.7436944365500002 + dkappa: 0 + } + v: 2.3666665554 + a: 0.392681080735 relative_time: 1.2400000095367432 - theta: -1.81791038105 - accumulated_s: 2.7436944365500002 -} -adc_trajectory_point { - x: -125.055357917 - y: 362.124660437 - z: -31.3084632047 - - speed: 2.3666665554 - acceleration_s: 0.212717036543 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.055357917 + y: 362.124660437 + z: -31.3084632047 + theta: -1.81798167142 + kappa: -0.0010716967124 + s: 2.7673611021099997 + dkappa: 0 + } + v: 2.3666665554 + a: 0.212717036543 relative_time: 1.25 - theta: -1.81798167142 - accumulated_s: 2.7673611021099997 -} -adc_trajectory_point { - x: -125.061163799 - y: 362.101799163 - z: -31.3083684873 - - speed: 2.37222218513 - acceleration_s: 0.402120536361 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.061163799 + y: 362.101799163 + z: -31.3083684873 + theta: -1.81802179654 + kappa: -0.0010716967124 + s: 2.7910833239599997 + dkappa: 0 + } + v: 2.37222218513 + a: 0.402120536361 relative_time: 1.2599999904632568 - theta: -1.81802179654 - accumulated_s: 2.7910833239599997 -} -adc_trajectory_point { - x: -125.067021567 - y: 362.078912029 - z: -31.3083270611 - - speed: 2.37222218513 - acceleration_s: 0.40728875592 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.067021567 + y: 362.078912029 + z: -31.3083270611 + theta: -1.81809542476 + kappa: -0.0010716967124 + s: 2.8148055458099996 + dkappa: 0 + } + v: 2.37222218513 + a: 0.40728875592 relative_time: 1.2699999809265137 - theta: -1.81809542476 - accumulated_s: 2.8148055458099996 -} -adc_trajectory_point { - x: -125.072829426 - y: 362.055975827 - z: -31.3082894357 - - speed: 2.37777781487 - acceleration_s: 0.384221677252 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.072829426 + y: 362.055975827 + z: -31.3082894357 + theta: -1.81809018366 + kappa: -0.0010716967124 + s: 2.83858332396 + dkappa: 0 + } + v: 2.37777781487 + a: 0.384221677252 relative_time: 1.2799999713897705 - theta: -1.81809018366 - accumulated_s: 2.83858332396 -} -adc_trajectory_point { - x: -125.078695034 - y: 362.032988138 - z: -31.308244017 - - speed: 2.37777781487 - acceleration_s: 0.500380948926 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.078695034 + y: 362.032988138 + z: -31.308244017 + theta: -1.81813979053 + kappa: -0.0010716967124 + s: 2.8623611021100004 + dkappa: 0 + } + v: 2.37777781487 + a: 0.500380948926 relative_time: 1.2899999618530273 - theta: -1.81813979053 - accumulated_s: 2.8623611021100004 -} -adc_trajectory_point { - x: -125.084563219 - y: 362.00997671 - z: -31.3083070498 - - speed: 2.38611102104 - acceleration_s: 0.500380948926 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.084563219 + y: 362.00997671 + z: -31.3083070498 + theta: -1.81817159571 + kappa: -0.0010716967124 + s: 2.88622221232 + dkappa: 0 + } + v: 2.38611102104 + a: 0.500380948926 relative_time: 1.2999999523162842 - theta: -1.81817159571 - accumulated_s: 2.88622221232 -} -adc_trajectory_point { - x: -125.090443743 - y: 361.986921063 - z: -31.3083240818 - - speed: 2.38611102104 - acceleration_s: 0.42359364563 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.090443743 + y: 361.986921063 + z: -31.3083240818 + theta: -1.81820900677 + kappa: -0.0010716967124 + s: 2.9100833225300002 + dkappa: 0 + } + v: 2.38611102104 + a: 0.42359364563 relative_time: 1.309999942779541 - theta: -1.81820900677 - accumulated_s: 2.9100833225300002 -} -adc_trajectory_point { - x: -125.096382179 - y: 361.963823327 - z: -31.3084300598 - - speed: 2.39444446564 - acceleration_s: 0.441271914059 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.096382179 + y: 361.963823327 + z: -31.3084300598 + theta: -1.81826673453 + kappa: -0.0010716967124 + s: 2.93402776718 + dkappa: 0 + } + v: 2.39444446564 + a: 0.441271914059 relative_time: 1.3199999332427979 - theta: -1.81826673453 - accumulated_s: 2.93402776718 -} -adc_trajectory_point { - x: -125.102305553 - y: 361.940693228 - z: -31.3084903685 - - speed: 2.39444446564 - acceleration_s: 0.371848661884 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.102305553 + y: 361.940693228 + z: -31.3084903685 + theta: -1.8182738089 + kappa: -0.0010716967124 + s: 2.9579722118399996 + dkappa: 0 + } + v: 2.39444446564 + a: 0.371848661884 relative_time: 1.3300001621246338 - theta: -1.8182738089 - accumulated_s: 2.9579722118399996 -} -adc_trajectory_point { - x: -125.108232957 - y: 361.917510539 - z: -31.3085952336 - - speed: 2.40277767181 - acceleration_s: 0.430566906059 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.108232957 + y: 361.917510539 + z: -31.3085952336 + theta: -1.81827950286 + kappa: -0.0010716967124 + s: 2.98199998856 + dkappa: 0 + } + v: 2.40277767181 + a: 0.430566906059 relative_time: 1.3400001525878906 - theta: -1.81827950286 - accumulated_s: 2.98199998856 -} -adc_trajectory_point { - x: -125.108232957 - y: 361.917510539 - z: -31.3085952336 - - speed: 2.40277767181 - acceleration_s: 0.430566906059 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.108232957 + y: 361.917510539 + z: -31.3085952336 + theta: -1.81827950286 + kappa: -0.0010716967124 + s: 3.00602776528 + dkappa: 0 + } + v: 2.40277767181 + a: 0.430566906059 relative_time: 1.3400001525878906 - theta: -1.81827950286 - accumulated_s: 3.00602776528 -} -adc_trajectory_point { - x: -125.120187141 - y: 361.871080309 - z: -31.3087874381 - - speed: 2.41111111641 - acceleration_s: 0.327868528721 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.120187141 + y: 361.871080309 + z: -31.3087874381 + theta: -1.81832828484 + kappa: -0.0010716967124 + s: 3.0301388764399997 + dkappa: 0 + } + v: 2.41111111641 + a: 0.327868528721 relative_time: 1.3600001335144043 - theta: -1.81832828484 - accumulated_s: 3.0301388764399997 -} -adc_trajectory_point { - x: -125.126181296 - y: 361.847791106 - z: -31.3088982496 - - speed: 2.41111111641 - acceleration_s: 0.451219002202 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.126181296 + y: 361.847791106 + z: -31.3088982496 + theta: -1.81832183957 + kappa: -0.0010716967124 + s: 3.0542499875999995 + dkappa: 0 + } + v: 2.41111111641 + a: 0.451219002202 relative_time: 1.3700001239776611 - theta: -1.81832183957 - accumulated_s: 3.0542499875999995 -} -adc_trajectory_point { - x: -125.132231645 - y: 361.824497802 - z: -31.3090133145 - - speed: 2.41666674614 - acceleration_s: 0.356885881439 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.132231645 + y: 361.824497802 + z: -31.3090133145 + theta: -1.81837974849 + kappa: -0.0010716967124 + s: 3.07841665507 + dkappa: 0 + } + v: 2.41666674614 + a: 0.356885881439 relative_time: 1.380000114440918 - theta: -1.81837974849 - accumulated_s: 3.07841665507 -} -adc_trajectory_point { - x: -125.138258952 - y: 361.801142214 - z: -31.3091033828 - - speed: 2.41666674614 - acceleration_s: 0.420614351144 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.138258952 + y: 361.801142214 + z: -31.3091033828 + theta: -1.81838505478 + kappa: -0.0010716967124 + s: 3.10258332253 + dkappa: 0 + } + v: 2.41666674614 + a: 0.420614351144 relative_time: 1.3900001049041748 - theta: -1.81838505478 - accumulated_s: 3.10258332253 -} -adc_trajectory_point { - x: -125.138258952 - y: 361.801142214 - z: -31.3091033828 - - speed: 2.42777776718 - acceleration_s: 0.420614351144 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.138258952 + y: 361.801142214 + z: -31.3091033828 + theta: -1.81838505478 + kappa: -0.0010716967124 + s: 3.1268611002 + dkappa: 0 + } + v: 2.42777776718 + a: 0.420614351144 relative_time: 1.3900001049041748 - theta: -1.81838505478 - accumulated_s: 3.1268611002 -} -adc_trajectory_point { - x: -125.1504013 - y: 361.754317185 - z: -31.3093132749 - - speed: 2.42777776718 - acceleration_s: 0.398169023032 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.1504013 + y: 361.754317185 + z: -31.3093132749 + theta: -1.81840952263 + kappa: -0.0010716967124 + s: 3.1511388778700002 + dkappa: 0 + } + v: 2.42777776718 + a: 0.398169023032 relative_time: 1.4100000858306885 - theta: -1.81840952263 - accumulated_s: 3.1511388778700002 -} -adc_trajectory_point { - x: -125.156499401 - y: 361.730817079 - z: -31.3093788503 - - speed: 2.43611121178 - acceleration_s: 0.591555982708 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.156499401 + y: 361.730817079 + z: -31.3093788503 + theta: -1.81841737267 + kappa: -0.0010716967124 + s: 3.1754999899899996 + dkappa: 0 + } + v: 2.43611121178 + a: 0.591555982708 relative_time: 1.4200000762939453 - theta: -1.81841737267 - accumulated_s: 3.1754999899899996 -} -adc_trajectory_point { - x: -125.162622415 - y: 361.70731755 - z: -31.3094226215 - - speed: 2.43611121178 - acceleration_s: 0.354240702412 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.162622415 + y: 361.70731755 + z: -31.3094226215 + theta: -1.81845171629 + kappa: -0.0010716967124 + s: 3.19986110211 + dkappa: 0 + } + v: 2.43611121178 + a: 0.354240702412 relative_time: 1.4300000667572021 - theta: -1.81845171629 - accumulated_s: 3.19986110211 -} -adc_trajectory_point { - x: -125.168749178 - y: 361.683754857 - z: -31.3094495237 - - speed: 2.44166660309 - acceleration_s: 0.438057057872 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.168749178 + y: 361.683754857 + z: -31.3094495237 + theta: -1.8184750244 + kappa: -0.0010716967124 + s: 3.2242777681400003 + dkappa: 0 + } + v: 2.44166660309 + a: 0.438057057872 relative_time: 1.440000057220459 - theta: -1.8184750244 - accumulated_s: 3.2242777681400003 -} -adc_trajectory_point { - x: -125.168749178 - y: 361.683754857 - z: -31.3094495237 - - speed: 2.44166660309 - acceleration_s: 0.438057057872 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.168749178 + y: 361.683754857 + z: -31.3094495237 + theta: -1.8184750244 + kappa: -0.0010716967124 + s: 3.24869443417 + dkappa: 0 + } + v: 2.44166660309 + a: 0.438057057872 relative_time: 1.440000057220459 - theta: -1.8184750244 - accumulated_s: 3.24869443417 -} -adc_trajectory_point { - x: -125.181073192 - y: 361.636523244 - z: -31.3095965637 - - speed: 2.45277786255 - acceleration_s: 0.406559172215 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.181073192 + y: 361.636523244 + z: -31.3095965637 + theta: -1.81857129728 + kappa: -0.0010716967124 + s: 3.2732222127900004 + dkappa: 0 + } + v: 2.45277786255 + a: 0.406559172215 relative_time: 1.4600000381469727 - theta: -1.81857129728 - accumulated_s: 3.2732222127900004 -} -adc_trajectory_point { - x: -125.187253533 - y: 361.612821763 - z: -31.3096149852 - - speed: 2.45277786255 - acceleration_s: 0.555435364511 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.187253533 + y: 361.612821763 + z: -31.3096149852 + theta: -1.81861428093 + kappa: -0.0010716967124 + s: 3.29774999142 + dkappa: 0 + } + v: 2.45277786255 + a: 0.555435364511 relative_time: 1.4700000286102295 - theta: -1.81861428093 - accumulated_s: 3.29774999142 -} -adc_trajectory_point { - x: -125.193447694 - y: 361.589087084 - z: -31.3096721135 - - speed: 2.46111106873 - acceleration_s: 0.474561880611 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.193447694 + y: 361.589087084 + z: -31.3096721135 + theta: -1.81864823851 + kappa: -0.0010716967124 + s: 3.3223611021100004 + dkappa: 0 + } + v: 2.46111106873 + a: 0.474561880611 relative_time: 1.4800000190734863 - theta: -1.81864823851 - accumulated_s: 3.3223611021100004 -} -adc_trajectory_point { - x: -125.199648161 - y: 361.565319286 - z: -31.3096358571 - - speed: 2.46111106873 - acceleration_s: 0.39098499412 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.199648161 + y: 361.565319286 + z: -31.3096358571 + theta: -1.81871111009 + kappa: -0.0010716967124 + s: 3.34697221279 + dkappa: 0 + } + v: 2.46111106873 + a: 0.39098499412 relative_time: 1.4900000095367432 - theta: -1.81871111009 - accumulated_s: 3.34697221279 -} -adc_trajectory_point { - x: -125.205877684 - y: 361.541492939 - z: -31.3096838295 - - speed: 2.46944451332 - acceleration_s: 0.39098499412 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.205877684 + y: 361.541492939 + z: -31.3096838295 + theta: -1.81876580215 + kappa: -0.0010716967124 + s: 3.3716666579299996 + dkappa: 0 + } + v: 2.46944451332 + a: 0.39098499412 relative_time: 1.5 - theta: -1.81876580215 - accumulated_s: 3.3716666579299996 -} -adc_trajectory_point { - x: -125.212107542 - y: 361.517644532 - z: -31.3097066302 - - speed: 2.46944451332 - acceleration_s: 0.378531990209 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.212107542 + y: 361.517644532 + z: -31.3097066302 + theta: -1.81882500449 + kappa: -0.0010716967124 + s: 3.3963611030600003 + dkappa: 0 + } + v: 2.46944451332 + a: 0.378531990209 relative_time: 1.5099999904632568 - theta: -1.81882500449 - accumulated_s: 3.3963611030600003 -} -adc_trajectory_point { - x: -125.218346849 - y: 361.493731449 - z: -31.309656702 - - speed: 2.47499990463 - acceleration_s: 0.47112637066 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.218346849 + y: 361.493731449 + z: -31.309656702 + theta: -1.81886503663 + kappa: -0.0010716967124 + s: 3.4211111021100002 + dkappa: 0 + } + v: 2.47499990463 + a: 0.47112637066 relative_time: 1.5199999809265137 - theta: -1.81886503663 - accumulated_s: 3.4211111021100002 -} -adc_trajectory_point { - x: -125.224611842 - y: 361.469764138 - z: -31.3097078418 - - speed: 2.47499990463 - acceleration_s: 0.574009610061 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.224611842 + y: 361.469764138 + z: -31.3097078418 + theta: -1.818928914 + kappa: -0.0010716967124 + s: 3.44586110115 + dkappa: 0 + } + v: 2.47499990463 + a: 0.574009610061 relative_time: 1.5299999713897705 - theta: -1.818928914 - accumulated_s: 3.44586110115 -} -adc_trajectory_point { - x: -125.230903508 - y: 361.445775601 - z: -31.30969417 - - speed: 2.47499990463 - acceleration_s: 0.426942605328 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.230903508 + y: 361.445775601 + z: -31.30969417 + theta: -1.81902915216 + kappa: -0.0010716967124 + s: 3.4706111002 + dkappa: 0 + } + v: 2.47499990463 + a: 0.426942605328 relative_time: 1.5399999618530273 - theta: -1.81902915216 - accumulated_s: 3.4706111002 -} -adc_trajectory_point { - x: -125.237193935 - y: 361.421710391 - z: -31.3097933289 - - speed: 2.4777777195 - acceleration_s: 0.426942605328 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.237193935 + y: 361.421710391 + z: -31.3097933289 + theta: -1.81910561914 + kappa: -0.0010716967124 + s: 3.49538887739 + dkappa: 0 + } + v: 2.4777777195 + a: 0.426942605328 relative_time: 1.5499999523162842 - theta: -1.81910561914 - accumulated_s: 3.49538887739 -} -adc_trajectory_point { - x: -125.243475659 - y: 361.397603752 - z: -31.3098835414 - - speed: 2.48611116409 - acceleration_s: 0.514772887587 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.243475659 + y: 361.397603752 + z: -31.3098835414 + theta: -1.81914558193 + kappa: -0.0010716967124 + s: 3.52024998904 + dkappa: 0 + } + v: 2.48611116409 + a: 0.514772887587 relative_time: 1.559999942779541 - theta: -1.81914558193 - accumulated_s: 3.52024998904 -} -adc_trajectory_point { - x: -125.249806194 - y: 361.373444574 - z: -31.3098348845 - - speed: 2.48611116409 - acceleration_s: 0.48136122605 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.249806194 + y: 361.373444574 + z: -31.3098348845 + theta: -1.81924363629 + kappa: -0.0010716967124 + s: 3.54511110068 + dkappa: 0 + } + v: 2.48611116409 + a: 0.48136122605 relative_time: 1.5699999332427979 - theta: -1.81924363629 - accumulated_s: 3.54511110068 -} -adc_trajectory_point { - x: -125.256129277 - y: 361.349208057 - z: -31.3098312309 - - speed: 2.49444437027 - acceleration_s: 0.650386793625 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.256129277 + y: 361.349208057 + z: -31.3098312309 + theta: -1.81930289222 + kappa: -0.0010716967124 + s: 3.5700555443799997 + dkappa: 0 + } + v: 2.49444437027 + a: 0.650386793625 relative_time: 1.5800001621246338 - theta: -1.81930289222 - accumulated_s: 3.5700555443799997 -} -adc_trajectory_point { - x: -125.262467753 - y: 361.324961814 - z: -31.309970025 - - speed: 2.49444437027 - acceleration_s: 0.455046489661 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.262467753 + y: 361.324961814 + z: -31.309970025 + theta: -1.81940221501 + kappa: -0.0010716967124 + s: 3.5949999880799997 + dkappa: 0 + } + v: 2.49444437027 + a: 0.455046489661 relative_time: 1.5900001525878906 - theta: -1.81940221501 - accumulated_s: 3.5949999880799997 -} -adc_trajectory_point { - x: -125.262467753 - y: 361.324961814 - z: -31.309970025 - - speed: 2.49444437027 - acceleration_s: 0.455046489661 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.262467753 + y: 361.324961814 + z: -31.309970025 + theta: -1.81940221501 + kappa: -0.0010716967124 + s: 3.6199444317799996 + dkappa: 0 + } + v: 2.49444437027 + a: 0.455046489661 relative_time: 1.5900001525878906 - theta: -1.81940221501 - accumulated_s: 3.6199444317799996 -} -adc_trajectory_point { - x: -125.275156926 - y: 361.276277158 - z: -31.3101264155 - - speed: 2.50555562973 - acceleration_s: 0.504832206055 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.275156926 + y: 361.276277158 + z: -31.3101264155 + theta: -1.81951968729 + kappa: -0.0010716967124 + s: 3.6449999880800004 + dkappa: 0 + } + v: 2.50555562973 + a: 0.504832206055 relative_time: 1.6100001335144043 - theta: -1.81951968729 - accumulated_s: 3.6449999880800004 -} -adc_trajectory_point { - x: -125.281505449 - y: 361.251891324 - z: -31.3101503132 - - speed: 2.51666665077 - acceleration_s: 0.330095511333 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.281505449 + y: 361.251891324 + z: -31.3101503132 + theta: -1.81957494803 + kappa: -0.0010716967124 + s: 3.67016665459 + dkappa: 0 + } + v: 2.51666665077 + a: 0.330095511333 relative_time: 1.6200001239776611 - theta: -1.81957494803 - accumulated_s: 3.67016665459 -} -adc_trajectory_point { - x: -125.287885624 - y: 361.227417206 - z: -31.3101102514 - - speed: 2.51666665077 - acceleration_s: 0.623986480013 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.287885624 + y: 361.227417206 + z: -31.3101102514 + theta: -1.81963084477 + kappa: -0.0010716967124 + s: 3.6953333210999997 + dkappa: 0 + } + v: 2.51666665077 + a: 0.623986480013 relative_time: 1.630000114440918 - theta: -1.81963084477 - accumulated_s: 3.6953333210999997 -} -adc_trajectory_point { - x: -125.294263067 - y: 361.202915719 - z: -31.3101540385 - - speed: 2.52500009537 - acceleration_s: 0.470652419138 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.294263067 + y: 361.202915719 + z: -31.3101540385 + theta: -1.81968285302 + kappa: -0.0010716967124 + s: 3.7205833220500004 + dkappa: 0 + } + v: 2.52500009537 + a: 0.470652419138 relative_time: 1.6400001049041748 - theta: -1.81968285302 - accumulated_s: 3.7205833220500004 -} -adc_trajectory_point { - x: -125.300668029 - y: 361.178341563 - z: -31.3101223055 - - speed: 2.52500009537 - acceleration_s: 0.557301339731 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.300668029 + y: 361.178341563 + z: -31.3101223055 + theta: -1.81976648752 + kappa: -0.0010716967124 + s: 3.7458333230000003 + dkappa: 0 + } + v: 2.52500009537 + a: 0.557301339731 relative_time: 1.6500000953674316 - theta: -1.81976648752 - accumulated_s: 3.7458333230000003 -} -adc_trajectory_point { - x: -125.307057381 - y: 361.153720209 - z: -31.3102796115 - - speed: 2.53333330154 - acceleration_s: 0.59587861808 - curvature: -0.00110997184211 - curvature_change_rate: -0.00151086040199 +} +trajectory_point { + path_point { + x: -125.307057381 + y: 361.153720209 + z: -31.3102796115 + theta: -1.8197875326 + kappa: -0.00110997184211 + s: 3.77116665602 + dkappa: -0.00151086040199 + } + v: 2.53333330154 + a: 0.59587861808 relative_time: 1.6600000858306885 - theta: -1.8197875326 - accumulated_s: 3.77116665602 -} -adc_trajectory_point { - x: -125.313499771 - y: 361.129059883 - z: -31.3102807552 - - speed: 2.53333330154 - acceleration_s: 0.506494375233 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.313499771 + y: 361.129059883 + z: -31.3102807552 + theta: -1.81985507388 + kappa: -0.00110997184211 + s: 3.79649998904 + dkappa: 0 + } + v: 2.53333330154 + a: 0.506494375233 relative_time: 1.6700000762939453 - theta: -1.81985507388 - accumulated_s: 3.79649998904 -} -adc_trajectory_point { - x: -125.319920217 - y: 361.104345721 - z: -31.3101786645 - - speed: 2.544444561 - acceleration_s: 0.487412846952 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.319920217 + y: 361.104345721 + z: -31.3101786645 + theta: -1.81988979221 + kappa: -0.00110997184211 + s: 3.8219444346499998 + dkappa: 0 + } + v: 2.544444561 + a: 0.487412846952 relative_time: 1.6800000667572021 - theta: -1.81988979221 - accumulated_s: 3.8219444346499998 -} -adc_trajectory_point { - x: -125.326348711 - y: 361.079596709 - z: -31.3101000581 - - speed: 2.544444561 - acceleration_s: 0.396641112764 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.326348711 + y: 361.079596709 + z: -31.3101000581 + theta: -1.81993184901 + kappa: -0.00110997184211 + s: 3.8473888802599996 + dkappa: 0 + } + v: 2.544444561 + a: 0.396641112764 relative_time: 1.690000057220459 - theta: -1.81993184901 - accumulated_s: 3.8473888802599996 -} -adc_trajectory_point { - x: -125.326348711 - y: 361.079596709 - z: -31.3101000581 - - speed: 2.55555558205 - acceleration_s: 0.396641112764 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.326348711 + y: 361.079596709 + z: -31.3101000581 + theta: -1.81993184901 + kappa: -0.00110997184211 + s: 3.87294443608 + dkappa: 0 + } + v: 2.55555558205 + a: 0.396641112764 relative_time: 1.690000057220459 - theta: -1.81993184901 - accumulated_s: 3.87294443608 -} -adc_trajectory_point { - x: -125.339222556 - y: 361.029976296 - z: -31.3100965517 - - speed: 2.55555558205 - acceleration_s: 0.497112877228 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.339222556 + y: 361.029976296 + z: -31.3100965517 + theta: -1.82006312201 + kappa: -0.00110997184211 + s: 3.8984999918999996 + dkappa: 0 + } + v: 2.55555558205 + a: 0.497112877228 relative_time: 1.7100000381469727 - theta: -1.82006312201 - accumulated_s: 3.8984999918999996 -} -adc_trajectory_point { - x: -125.345661169 - y: 361.005068195 - z: -31.3100165213 - - speed: 2.56388878822 - acceleration_s: 0.542388897611 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.345661169 + y: 361.005068195 + z: -31.3100165213 + theta: -1.82006347002 + kappa: -0.00110997184211 + s: 3.92413887978 + dkappa: 0 + } + v: 2.56388878822 + a: 0.542388897611 relative_time: 1.7200000286102295 - theta: -1.82006347002 - accumulated_s: 3.92413887978 -} -adc_trajectory_point { - x: -125.352128438 - y: 360.980115994 - z: -31.3098779172 - - speed: 2.56388878822 - acceleration_s: 0.546547177071 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.352128438 + y: 360.980115994 + z: -31.3098779172 + theta: -1.82010562887 + kappa: -0.00110997184211 + s: 3.9497777676599997 + dkappa: 0 + } + v: 2.56388878822 + a: 0.546547177071 relative_time: 1.7300000190734863 - theta: -1.82010562887 - accumulated_s: 3.9497777676599997 -} -adc_trajectory_point { - x: -125.358609364 - y: 360.955101644 - z: -31.3097669361 - - speed: 2.57500004768 - acceleration_s: 0.633001016486 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.358609364 + y: 360.955101644 + z: -31.3097669361 + theta: -1.82010467581 + kappa: -0.00110997184211 + s: 3.97552776814 + dkappa: 0 + } + v: 2.57500004768 + a: 0.633001016486 relative_time: 1.7400000095367432 - theta: -1.82010467581 - accumulated_s: 3.97552776814 -} -adc_trajectory_point { - x: -125.365083092 - y: 360.930060616 - z: -31.3096202817 - - speed: 2.57500004768 - acceleration_s: 0.633001016486 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.365083092 + y: 360.930060616 + z: -31.3096202817 + theta: -1.82009665155 + kappa: -0.00110997184211 + s: 4.00127776861 + dkappa: 0 + } + v: 2.57500004768 + a: 0.633001016486 relative_time: 1.75 - theta: -1.82009665155 - accumulated_s: 4.00127776861 -} -adc_trajectory_point { - x: -125.371579562 - y: 360.904948257 - z: -31.3094767677 - - speed: 2.58888888359 - acceleration_s: 0.53525839062 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.371579562 + y: 360.904948257 + z: -31.3094767677 + theta: -1.82012311264 + kappa: -0.00110997184211 + s: 4.02716665745 + dkappa: 0 + } + v: 2.58888888359 + a: 0.53525839062 relative_time: 1.7599999904632568 - theta: -1.82012311264 - accumulated_s: 4.02716665745 -} -adc_trajectory_point { - x: -125.378124914 - y: 360.879822808 - z: -31.3093882594 - - speed: 2.58888888359 - acceleration_s: 0.487854860158 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.378124914 + y: 360.879822808 + z: -31.3093882594 + theta: -1.82016109208 + kappa: -0.00110997184211 + s: 4.05305554629 + dkappa: 0 + } + v: 2.58888888359 + a: 0.487854860158 relative_time: 1.7699999809265137 - theta: -1.82016109208 - accumulated_s: 4.05305554629 -} -adc_trajectory_point { - x: -125.384642207 - y: 360.854632133 - z: -31.3092705887 - - speed: 2.6027777195 - acceleration_s: 0.478420581517 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.384642207 + y: 360.854632133 + z: -31.3092705887 + theta: -1.82014668287 + kappa: -0.00110997184211 + s: 4.07908332348 + dkappa: 0 + } + v: 2.6027777195 + a: 0.478420581517 relative_time: 1.7799999713897705 - theta: -1.82014668287 - accumulated_s: 4.07908332348 -} -adc_trajectory_point { - x: -125.39118994 - y: 360.829372517 - z: -31.3091875464 - - speed: 2.6027777195 - acceleration_s: 0.544181263352 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.39118994 + y: 360.829372517 + z: -31.3091875464 + theta: -1.82013984538 + kappa: -0.00110997184211 + s: 4.10511110068 + dkappa: 0 + } + v: 2.6027777195 + a: 0.544181263352 relative_time: 1.7899999618530273 - theta: -1.82013984538 - accumulated_s: 4.10511110068 -} -adc_trajectory_point { - x: -125.39118994 - y: 360.829372517 - z: -31.3091875464 - - speed: 2.61111116409 - acceleration_s: 0.544181263352 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.39118994 + y: 360.829372517 + z: -31.3091875464 + theta: -1.82013984538 + kappa: -0.00110997184211 + s: 4.13122221232 + dkappa: 0 + } + v: 2.61111116409 + a: 0.544181263352 relative_time: 1.7899999618530273 - theta: -1.82013984538 - accumulated_s: 4.13122221232 -} -adc_trajectory_point { - x: -125.404328653 - y: 360.77872648 - z: -31.3089771597 - - speed: 2.61111116409 - acceleration_s: 0.520326750882 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.404328653 + y: 360.77872648 + z: -31.3089771597 + theta: -1.82020182981 + kappa: -0.00110997184211 + s: 4.15733332396 + dkappa: 0 + } + v: 2.61111116409 + a: 0.520326750882 relative_time: 1.809999942779541 - theta: -1.82020182981 - accumulated_s: 4.15733332396 -} -adc_trajectory_point { - x: -125.410949124 - y: 360.753315992 - z: -31.3088780753 - - speed: 2.61944437027 - acceleration_s: 0.612627571447 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.410949124 + y: 360.753315992 + z: -31.3088780753 + theta: -1.82026439025 + kappa: -0.00110997184211 + s: 4.18352776766 + dkappa: 0 + } + v: 2.61944437027 + a: 0.612627571447 relative_time: 1.8199999332427979 - theta: -1.82026439025 - accumulated_s: 4.18352776766 -} -adc_trajectory_point { - x: -125.417554649 - y: 360.727867656 - z: -31.3087214185 - - speed: 2.61944437027 - acceleration_s: 0.50038368782 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.417554649 + y: 360.727867656 + z: -31.3087214185 + theta: -1.82032107677 + kappa: -0.00110997184211 + s: 4.20972221136 + dkappa: 0 + } + v: 2.61944437027 + a: 0.50038368782 relative_time: 1.8300001621246338 - theta: -1.82032107677 - accumulated_s: 4.20972221136 -} -adc_trajectory_point { - x: -125.424145847 - y: 360.702354047 - z: -31.308650543 - - speed: 2.63055562973 - acceleration_s: 0.549022600728 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.424145847 + y: 360.702354047 + z: -31.308650543 + theta: -1.82034991872 + kappa: -0.00110997184211 + s: 4.2360277676599996 + dkappa: 0 + } + v: 2.63055562973 + a: 0.549022600728 relative_time: 1.8400001525878906 - theta: -1.82034991872 - accumulated_s: 4.2360277676599996 -} -adc_trajectory_point { - x: -125.430732575 - y: 360.676786033 - z: -31.3086042292 - - speed: 2.63055562973 - acceleration_s: 0.529990838085 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.430732575 + y: 360.676786033 + z: -31.3086042292 + theta: -1.82037338242 + kappa: -0.00110997184211 + s: 4.26233332396 + dkappa: 0 + } + v: 2.63055562973 + a: 0.529990838085 relative_time: 1.8500001430511475 - theta: -1.82037338242 - accumulated_s: 4.26233332396 -} -adc_trajectory_point { - x: -125.437348416 - y: 360.651184848 - z: -31.3085189508 - - speed: 2.63888883591 - acceleration_s: 0.454595254832 - curvature: -0.0010716967124 - curvature_change_rate: 0.00145042599683 +} +trajectory_point { + path_point { + x: -125.437348416 + y: 360.651184848 + z: -31.3085189508 + theta: -1.82047284755 + kappa: -0.0010716967124 + s: 4.28872221232 + dkappa: 0.00145042599683 + } + v: 2.63888883591 + a: 0.454595254832 relative_time: 1.8600001335144043 - theta: -1.82047284755 - accumulated_s: 4.28872221232 -} -adc_trajectory_point { - x: -125.44396724 - y: 360.625511185 - z: -31.3084344761 - - speed: 2.63888883591 - acceleration_s: 0.57201560229 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.44396724 + y: 360.625511185 + z: -31.3084344761 + theta: -1.82055572354 + kappa: -0.0010716967124 + s: 4.31511110068 + dkappa: 0 + } + v: 2.63888883591 + a: 0.57201560229 relative_time: 1.8700001239776611 - theta: -1.82055572354 - accumulated_s: 4.31511110068 -} -adc_trajectory_point { - x: -125.450578473 - y: 360.599791754 - z: -31.3083229689 - - speed: 2.65000009537 - acceleration_s: 0.50042079149 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.450578473 + y: 360.599791754 + z: -31.3083229689 + theta: -1.8206187713 + kappa: -0.0010716967124 + s: 4.34161110163 + dkappa: 0 + } + v: 2.65000009537 + a: 0.50042079149 relative_time: 1.880000114440918 - theta: -1.8206187713 - accumulated_s: 4.34161110163 -} -adc_trajectory_point { - x: -125.457161235 - y: 360.573994903 - z: -31.3082961971 - - speed: 2.65000009537 - acceleration_s: 0.608957670273 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.457161235 + y: 360.573994903 + z: -31.3082961971 + theta: -1.82066638752 + kappa: -0.0010716967124 + s: 4.36811110258 + dkappa: 0 + } + v: 2.65000009537 + a: 0.608957670273 relative_time: 1.8900001049041748 - theta: -1.82066638752 - accumulated_s: 4.36811110258 -} -adc_trajectory_point { - x: -125.457161235 - y: 360.573994903 - z: -31.3082961971 - - speed: 2.65833330154 - acceleration_s: 0.608957670273 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.457161235 + y: 360.573994903 + z: -31.3082961971 + theta: -1.82066638752 + kappa: -0.0010716967124 + s: 4.3946944356 + dkappa: 0 + } + v: 2.65833330154 + a: 0.608957670273 relative_time: 1.8900001049041748 - theta: -1.82066638752 - accumulated_s: 4.3946944356 -} -adc_trajectory_point { - x: -125.470402386 - y: 360.522259867 - z: -31.3082394749 - - speed: 2.65833330154 - acceleration_s: 0.544343023852 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.470402386 + y: 360.522259867 + z: -31.3082394749 + theta: -1.82083360771 + kappa: -0.0010716967124 + s: 4.42127776861 + dkappa: 0 + } + v: 2.65833330154 + a: 0.544343023852 relative_time: 1.9100000858306885 - theta: -1.82083360771 - accumulated_s: 4.42127776861 -} -adc_trajectory_point { - x: -125.477007638 - y: 360.496297447 - z: -31.308145876 - - speed: 2.669444561 - acceleration_s: 0.556709860971 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.477007638 + y: 360.496297447 + z: -31.308145876 + theta: -1.82089204632 + kappa: -0.0010716967124 + s: 4.44797221422 + dkappa: 0 + } + v: 2.669444561 + a: 0.556709860971 relative_time: 1.9200000762939453 - theta: -1.82089204632 - accumulated_s: 4.44797221422 -} -adc_trajectory_point { - x: -125.483641068 - y: 360.470300722 - z: -31.3080749176 - - speed: 2.669444561 - acceleration_s: 0.487942274116 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.483641068 + y: 360.470300722 + z: -31.3080749176 + theta: -1.82098793755 + kappa: -0.0010716967124 + s: 4.47466665983 + dkappa: 0 + } + v: 2.669444561 + a: 0.487942274116 relative_time: 1.9300000667572021 - theta: -1.82098793755 - accumulated_s: 4.47466665983 -} -adc_trajectory_point { - x: -125.490256914 - y: 360.444221465 - z: -31.3080387702 - - speed: 2.68055558205 - acceleration_s: 0.625656329633 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.490256914 + y: 360.444221465 + z: -31.3080387702 + theta: -1.8210536898 + kappa: -0.0010716967124 + s: 4.50147221566 + dkappa: 0 + } + v: 2.68055558205 + a: 0.625656329633 relative_time: 1.940000057220459 - theta: -1.8210536898 - accumulated_s: 4.50147221566 -} -adc_trajectory_point { - x: -125.490256914 - y: 360.444221465 - z: -31.3080387702 - - speed: 2.68055558205 - acceleration_s: 0.625656329633 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.490256914 + y: 360.444221465 + z: -31.3080387702 + theta: -1.8210536898 + kappa: -0.0010716967124 + s: 4.52827777148 + dkappa: 0 + } + v: 2.68055558205 + a: 0.625656329633 relative_time: 1.940000057220459 - theta: -1.8210536898 - accumulated_s: 4.52827777148 -} -adc_trajectory_point { - x: -125.503575954 - y: 360.391941462 - z: -31.3079471681 - - speed: 2.68888878822 - acceleration_s: 0.540887660129 - curvature: -0.00103342160821 - curvature_change_rate: 0.00142345434168 +} +trajectory_point { + path_point { + x: -125.503575954 + y: 360.391941462 + z: -31.3079471681 + theta: -1.82117825628 + kappa: -0.00103342160821 + s: 4.55516665936 + dkappa: 0.00142345434168 + } + v: 2.68888878822 + a: 0.540887660129 relative_time: 1.9600000381469727 - theta: -1.82117825628 - accumulated_s: 4.55516665936 -} -adc_trajectory_point { - x: -125.510265055 - y: 360.365728364 - z: -31.3078916818 - - speed: 2.68888878822 - acceleration_s: 0.521835524634 - curvature: -0.00103342160821 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.510265055 + y: 360.365728364 + z: -31.3078916818 + theta: -1.82125000892 + kappa: -0.00103342160821 + s: 4.58205554724 + dkappa: 0 + } + v: 2.68888878822 + a: 0.521835524634 relative_time: 1.9700000286102295 - theta: -1.82125000892 - accumulated_s: 4.58205554724 -} -adc_trajectory_point { - x: -125.516998125 - y: 360.339492042 - z: -31.3078431217 - - speed: 2.70000004768 - acceleration_s: 0.444248635123 - curvature: -0.0009951465286 - curvature_change_rate: 0.00141759551589 +} +trajectory_point { + path_point { + x: -125.516998125 + y: 360.339492042 + z: -31.3078431217 + theta: -1.82132353561 + kappa: -0.0009951465286 + s: 4.60905554772 + dkappa: 0.00141759551589 + } + v: 2.70000004768 + a: 0.444248635123 relative_time: 1.9800000190734863 - theta: -1.82132353561 - accumulated_s: 4.60905554772 -} -adc_trajectory_point { - x: -125.523724383 - y: 360.313171053 - z: -31.3077099975 - - speed: 2.70000004768 - acceleration_s: 0.566921838707 - curvature: -0.0009951465286 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.523724383 + y: 360.313171053 + z: -31.3077099975 + theta: -1.82134145734 + kappa: -0.0009951465286 + s: 4.63605554819 + dkappa: 0 + } + v: 2.70000004768 + a: 0.566921838707 relative_time: 1.9900000095367432 - theta: -1.82134145734 - accumulated_s: 4.63605554819 -} -adc_trajectory_point { - x: -125.530534332 - y: 360.286794019 - z: -31.3076497242 - - speed: 2.71111106873 - acceleration_s: 0.566921838707 - curvature: -0.000956871472678 - curvature_change_rate: 0.00141178487166 +} +trajectory_point { + path_point { + x: -125.530534332 + y: 360.286794019 + z: -31.3076497242 + theta: -1.82141192096 + kappa: -0.000956871472678 + s: 4.66316665888 + dkappa: 0.00141178487166 + } + v: 2.71111106873 + a: 0.566921838707 relative_time: 2 - theta: -1.82141192096 - accumulated_s: 4.66316665888 -} -adc_trajectory_point { - x: -125.537331069 - y: 360.260350394 - z: -31.3075449867 - - speed: 2.71111106873 - acceleration_s: 0.676986950806 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.537331069 + y: 360.260350394 + z: -31.3075449867 + theta: -1.82141578788 + kappa: -0.000956871472678 + s: 4.69027776957 + dkappa: 0 + } + v: 2.71111106873 + a: 0.676986950806 relative_time: 2.0099999904632568 - theta: -1.82141578788 - accumulated_s: 4.69027776957 -} -adc_trajectory_point { - x: -125.544198795 - y: 360.233849652 - z: -31.3075140547 - - speed: 2.7277777195 - acceleration_s: 0.754657111552 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.544198795 + y: 360.233849652 + z: -31.3075140547 + theta: -1.82147078752 + kappa: -0.000956871472678 + s: 4.71755554676 + dkappa: 0 + } + v: 2.7277777195 + a: 0.754657111552 relative_time: 2.0199999809265137 - theta: -1.82147078752 - accumulated_s: 4.71755554676 -} -adc_trajectory_point { - x: -125.551075619 - y: 360.207305452 - z: -31.3074306911 - - speed: 2.7277777195 - acceleration_s: 0.599208098093 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.551075619 + y: 360.207305452 + z: -31.3074306911 + theta: -1.82148683338 + kappa: -0.000956871472678 + s: 4.74483332396 + dkappa: 0 + } + v: 2.7277777195 + a: 0.599208098093 relative_time: 2.0299999713897705 - theta: -1.82148683338 - accumulated_s: 4.74483332396 -} -adc_trajectory_point { - x: -125.557972773 - y: 360.180711174 - z: -31.3073444497 - - speed: 2.74444437027 - acceleration_s: 0.527593004511 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.557972773 + y: 360.180711174 + z: -31.3073444497 + theta: -1.82152201956 + kappa: -0.000956871472678 + s: 4.77227776766 + dkappa: 0 + } + v: 2.74444437027 + a: 0.527593004511 relative_time: 2.0399999618530273 - theta: -1.82152201956 - accumulated_s: 4.77227776766 -} -adc_trajectory_point { - x: -125.564913014 - y: 360.154044359 - z: -31.3072374249 - - speed: 2.74444437027 - acceleration_s: 0.527593004511 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.564913014 + y: 360.154044359 + z: -31.3072374249 + theta: -1.82154290335 + kappa: -0.000956871472678 + s: 4.79972221136 + dkappa: 0 + } + v: 2.74444437027 + a: 0.527593004511 relative_time: 2.0499999523162842 - theta: -1.82154290335 - accumulated_s: 4.79972221136 -} -adc_trajectory_point { - x: -125.571844636 - y: 360.12733583 - z: -31.3071987871 - - speed: 2.75555562973 - acceleration_s: 0.551526740126 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.571844636 + y: 360.12733583 + z: -31.3071987871 + theta: -1.8215456165 + kappa: -0.000956871472678 + s: 4.82727776766 + dkappa: 0 + } + v: 2.75555562973 + a: 0.551526740126 relative_time: 2.059999942779541 - theta: -1.8215456165 - accumulated_s: 4.82727776766 -} -adc_trajectory_point { - x: -125.578797905 - y: 360.100558146 - z: -31.3072172794 - - speed: 2.75555562973 - acceleration_s: 0.629940975765 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.578797905 + y: 360.100558146 + z: -31.3072172794 + theta: -1.8215810715 + kappa: -0.000956871472678 + s: 4.85483332396 + dkappa: 0 + } + v: 2.75555562973 + a: 0.629940975765 relative_time: 2.0699999332427979 - theta: -1.8215810715 - accumulated_s: 4.85483332396 -} -adc_trajectory_point { - x: -125.585730295 - y: 360.073723491 - z: -31.3071709732 - - speed: 2.76111102104 - acceleration_s: 0.573687721139 - curvature: -0.000918596439528 - curvature_change_rate: 0.00138621854965 +} +trajectory_point { + path_point { + x: -125.585730295 + y: 360.073723491 + z: -31.3071709732 + theta: -1.82154201657 + kappa: -0.000918596439528 + s: 4.88244443417 + dkappa: 0.00138621854965 + } + v: 2.76111102104 + a: 0.573687721139 relative_time: 2.0800001621246338 - theta: -1.82154201657 - accumulated_s: 4.88244443417 -} -adc_trajectory_point { - x: -125.592715537 - y: 360.046865102 - z: -31.3070287984 - - speed: 2.76111102104 - acceleration_s: 0.397963546236 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.592715537 + y: 360.046865102 + z: -31.3070287984 + theta: -1.8215838674 + kappa: -0.000918596439528 + s: 4.91005554438 + dkappa: 0 + } + v: 2.76111102104 + a: 0.397963546236 relative_time: 2.0900001525878906 - theta: -1.8215838674 - accumulated_s: 4.91005554438 -} -adc_trajectory_point { - x: -125.592715537 - y: 360.046865102 - z: -31.3070287984 - - speed: 2.76944446564 - acceleration_s: 0.397963546236 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.592715537 + y: 360.046865102 + z: -31.3070287984 + theta: -1.8215838674 + kappa: -0.000918596439528 + s: 4.93774998904 + dkappa: 0 + } + v: 2.76944446564 + a: 0.397963546236 relative_time: 2.0900001525878906 - theta: -1.8215838674 - accumulated_s: 4.93774998904 -} -adc_trajectory_point { - x: -125.606705452 - y: 359.992944077 - z: -31.3069257466 - - speed: 2.76944446564 - acceleration_s: 0.605243806601 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.606705452 + y: 359.992944077 + z: -31.3069257466 + theta: -1.82160243601 + kappa: -0.000918596439528 + s: 4.96544443369 + dkappa: 0 + } + v: 2.76944446564 + a: 0.605243806601 relative_time: 2.1100001335144043 - theta: -1.82160243601 - accumulated_s: 4.96544443369 -} -adc_trajectory_point { - x: -125.613715656 - y: 359.965900791 - z: -31.3069158401 - - speed: 2.77777767181 - acceleration_s: 0.587333040131 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.613715656 + y: 359.965900791 + z: -31.3069158401 + theta: -1.82163078158 + kappa: -0.000918596439528 + s: 4.99322221041 + dkappa: 0 + } + v: 2.77777767181 + a: 0.587333040131 relative_time: 2.1200001239776611 - theta: -1.82163078158 - accumulated_s: 4.99322221041 -} -adc_trajectory_point { - x: -125.620781546 - y: 359.938791968 - z: -31.3069237191 - - speed: 2.77777767181 - acceleration_s: 0.727187893866 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.620781546 + y: 359.938791968 + z: -31.3069237191 + theta: -1.82167773656 + kappa: -0.000918596439528 + s: 5.02099998713 + dkappa: 0 + } + v: 2.77777767181 + a: 0.727187893866 relative_time: 2.130000114440918 - theta: -1.82167773656 - accumulated_s: 5.02099998713 -} -adc_trajectory_point { - x: -125.627850631 - y: 359.911634144 - z: -31.306826652 - - speed: 2.79166674614 - acceleration_s: 0.549840667398 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.627850631 + y: 359.911634144 + z: -31.306826652 + theta: -1.82168810328 + kappa: -0.000918596439528 + s: 5.04891665459 + dkappa: 0 + } + v: 2.79166674614 + a: 0.549840667398 relative_time: 2.1400001049041748 - theta: -1.82168810328 - accumulated_s: 5.04891665459 -} -adc_trajectory_point { - x: -125.634956433 - y: 359.884418464 - z: -31.3067896031 - - speed: 2.79166674614 - acceleration_s: 0.549840667398 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.634956433 + y: 359.884418464 + z: -31.3067896031 + theta: -1.82171289445 + kappa: -0.000918596439528 + s: 5.07683332205 + dkappa: 0 + } + v: 2.79166674614 + a: 0.549840667398 relative_time: 2.1500000953674316 - theta: -1.82171289445 - accumulated_s: 5.07683332205 -} -adc_trajectory_point { - x: -125.642046141 - y: 359.857149366 - z: -31.3068400882 - - speed: 2.80555558205 - acceleration_s: 0.542085416321 - curvature: -0.000880321428239 - curvature_change_rate: 0.00136425781524 +} +trajectory_point { + path_point { + x: -125.642046141 + y: 359.857149366 + z: -31.3068400882 + theta: -1.8216935938 + kappa: -0.000880321428239 + s: 5.10488887787 + dkappa: 0.00136425781524 + } + v: 2.80555558205 + a: 0.542085416321 relative_time: 2.1600000858306885 - theta: -1.8216935938 - accumulated_s: 5.10488887787 -} -adc_trajectory_point { - x: -125.649150332 - y: 359.829835747 - z: -31.3069122797 - - speed: 2.80555558205 - acceleration_s: 0.477439146887 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.649150332 + y: 359.829835747 + z: -31.3069122797 + theta: -1.82170121117 + kappa: -0.000880321428239 + s: 5.13294443369 + dkappa: 0 + } + v: 2.80555558205 + a: 0.477439146887 relative_time: 2.1700000762939453 - theta: -1.82170121117 - accumulated_s: 5.13294443369 -} -adc_trajectory_point { - x: -125.656310653 - y: 359.802464583 - z: -31.3069347879 - - speed: 2.81944441795 - acceleration_s: 0.573332582413 - curvature: -0.0008420464379 - curvature_change_rate: 0.0013575366159 +} +trajectory_point { + path_point { + x: -125.656310653 + y: 359.802464583 + z: -31.3069347879 + theta: -1.82174094854 + kappa: -0.0008420464379 + s: 5.16113887787 + dkappa: 0.0013575366159 + } + v: 2.81944441795 + a: 0.573332582413 relative_time: 2.1800000667572021 - theta: -1.82174094854 - accumulated_s: 5.16113887787 -} -adc_trajectory_point { - x: -125.6634802 - y: 359.775052215 - z: -31.306938665 - - speed: 2.81944441795 - acceleration_s: 0.480953550981 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.6634802 + y: 359.775052215 + z: -31.306938665 + theta: -1.82174518821 + kappa: -0.0008420464379 + s: 5.18933332205 + dkappa: 0 + } + v: 2.81944441795 + a: 0.480953550981 relative_time: 2.190000057220459 - theta: -1.82174518821 - accumulated_s: 5.18933332205 -} -adc_trajectory_point { - x: -125.6634802 - y: 359.775052215 - z: -31.306938665 - - speed: 2.82777786255 - acceleration_s: 0.480953550981 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.6634802 + y: 359.775052215 + z: -31.306938665 + theta: -1.82174518821 + kappa: -0.0008420464379 + s: 5.21761110068 + dkappa: 0 + } + v: 2.82777786255 + a: 0.480953550981 relative_time: 2.190000057220459 - theta: -1.82174518821 - accumulated_s: 5.21761110068 -} -adc_trajectory_point { - x: -125.677938723 - y: 359.720041327 - z: -31.3069625562 - - speed: 2.82777786255 - acceleration_s: 0.601637167889 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.677938723 + y: 359.720041327 + z: -31.3069625562 + theta: -1.82184178694 + kappa: -0.0008420464379 + s: 5.2458888793 + dkappa: 0 + } + v: 2.82777786255 + a: 0.601637167889 relative_time: 2.2100000381469727 - theta: -1.82184178694 - accumulated_s: 5.2458888793 -} -adc_trajectory_point { - x: -125.685189377 - y: 359.692458234 - z: -31.306962071 - - speed: 2.83888888359 - acceleration_s: 0.55047200077 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.685189377 + y: 359.692458234 + z: -31.306962071 + theta: -1.82188540617 + kappa: -0.0008420464379 + s: 5.27427776814 + dkappa: 0 + } + v: 2.83888888359 + a: 0.55047200077 relative_time: 2.2200000286102295 - theta: -1.82188540617 - accumulated_s: 5.27427776814 -} -adc_trajectory_point { - x: -125.692474208 - y: 359.664814508 - z: -31.3069400685 - - speed: 2.83888888359 - acceleration_s: 0.60241470639 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.692474208 + y: 359.664814508 + z: -31.3069400685 + theta: -1.82190412116 + kappa: -0.0008420464379 + s: 5.30266665697 + dkappa: 0 + } + v: 2.83888888359 + a: 0.60241470639 relative_time: 2.2300000190734863 - theta: -1.82190412116 - accumulated_s: 5.30266665697 -} -adc_trajectory_point { - x: -125.699781684 - y: 359.637138023 - z: -31.3068766557 - - speed: 2.8527777195 - acceleration_s: 0.49892409539 - curvature: -0.000803771467601 - curvature_change_rate: 0.00134167376721 +} +trajectory_point { + path_point { + x: -125.699781684 + y: 359.637138023 + z: -31.3068766557 + theta: -1.82193041081 + kappa: -0.000803771467601 + s: 5.33119443417 + dkappa: 0.00134167376721 + } + v: 2.8527777195 + a: 0.49892409539 relative_time: 2.2400000095367432 - theta: -1.82193041081 - accumulated_s: 5.33119443417 -} -adc_trajectory_point { - x: -125.699781684 - y: 359.637138023 - z: -31.3068766557 - - speed: 2.8527777195 - acceleration_s: 0.49892409539 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.699781684 + y: 359.637138023 + z: -31.3068766557 + theta: -1.82193041081 + kappa: -0.000803771467601 + s: 5.35972221136 + dkappa: 0 + } + v: 2.8527777195 + a: 0.49892409539 relative_time: 2.2400000095367432 - theta: -1.82193041081 - accumulated_s: 5.35972221136 -} -adc_trajectory_point { - x: -125.714498953 - y: 359.581639177 - z: -31.3068493977 - - speed: 2.8666665554 - acceleration_s: 0.529323722547 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.714498953 + y: 359.581639177 + z: -31.3068493977 + theta: -1.82201650974 + kappa: -0.000803771467601 + s: 5.38838887692 + dkappa: 0 + } + v: 2.8666665554 + a: 0.529323722547 relative_time: 2.2599999904632568 - theta: -1.82201650974 - accumulated_s: 5.38838887692 -} -adc_trajectory_point { - x: -125.721916183 - y: 359.553844569 - z: -31.3067936711 - - speed: 2.8666665554 - acceleration_s: 0.424356121029 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.721916183 + y: 359.553844569 + z: -31.3067936711 + theta: -1.82212695848 + kappa: -0.000803771467601 + s: 5.41705554247 + dkappa: 0 + } + v: 2.8666665554 + a: 0.424356121029 relative_time: 2.2699999809265137 - theta: -1.82212695848 - accumulated_s: 5.41705554247 -} -adc_trajectory_point { - x: -125.729314593 - y: 359.525979479 - z: -31.3067365438 - - speed: 2.87777781487 - acceleration_s: 0.517916540761 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.729314593 + y: 359.525979479 + z: -31.3067365438 + theta: -1.82216632841 + kappa: -0.000803771467601 + s: 5.44583332062 + dkappa: 0 + } + v: 2.87777781487 + a: 0.517916540761 relative_time: 2.2799999713897705 - theta: -1.82216632841 - accumulated_s: 5.44583332062 -} -adc_trajectory_point { - x: -125.736735465 - y: 359.498089687 - z: -31.3066623844 - - speed: 2.87777781487 - acceleration_s: 0.393867359235 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.736735465 + y: 359.498089687 + z: -31.3066623844 + theta: -1.82219917945 + kappa: -0.000803771467601 + s: 5.47461109877 + dkappa: 0 + } + v: 2.87777781487 + a: 0.393867359235 relative_time: 2.2899999618530273 - theta: -1.82219917945 - accumulated_s: 5.47461109877 -} -adc_trajectory_point { - x: -125.744185916 - y: 359.470141154 - z: -31.3065668559 - - speed: 2.88611102104 - acceleration_s: 0.393867359235 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.744185916 + y: 359.470141154 + z: -31.3065668559 + theta: -1.82227869211 + kappa: -0.000803771467601 + s: 5.50347220898 + dkappa: 0 + } + v: 2.88611102104 + a: 0.393867359235 relative_time: 2.2999999523162842 - theta: -1.82227869211 - accumulated_s: 5.50347220898 -} -adc_trajectory_point { - x: -125.751645886 - y: 359.442144392 - z: -31.3064575428 - - speed: 2.88611102104 - acceleration_s: 0.498139004173 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.751645886 + y: 359.442144392 + z: -31.3064575428 + theta: -1.82232656535 + kappa: -0.000803771467601 + s: 5.53233331919 + dkappa: 0 + } + v: 2.88611102104 + a: 0.498139004173 relative_time: 2.309999942779541 - theta: -1.82232656535 - accumulated_s: 5.53233331919 -} -adc_trajectory_point { - x: -125.759104292 - y: 359.414105887 - z: -31.3063270031 - - speed: 2.89444446564 - acceleration_s: 0.471227514218 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.759104292 + y: 359.414105887 + z: -31.3063270031 + theta: -1.82237573828 + kappa: -0.000803771467601 + s: 5.56127776385 + dkappa: 0 + } + v: 2.89444446564 + a: 0.471227514218 relative_time: 2.3199999332427979 - theta: -1.82237573828 - accumulated_s: 5.56127776385 -} -adc_trajectory_point { - x: -125.766606147 - y: 359.386024285 - z: -31.3062000703 - - speed: 2.89444446564 - acceleration_s: 0.525454236397 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.766606147 + y: 359.386024285 + z: -31.3062000703 + theta: -1.82246275229 + kappa: -0.000803771467601 + s: 5.5902222085 + dkappa: 0 + } + v: 2.89444446564 + a: 0.525454236397 relative_time: 2.3300001621246338 - theta: -1.82246275229 - accumulated_s: 5.5902222085 -} -adc_trajectory_point { - x: -125.774096612 - y: 359.357892469 - z: -31.306101134 - - speed: 2.90555548668 - acceleration_s: 0.477311863712 - curvature: -0.00076549651643 - curvature_change_rate: 0.00131730236598 +} +trajectory_point { + path_point { + x: -125.774096612 + y: 359.357892469 + z: -31.306101134 + theta: -1.82250837147 + kappa: -0.00076549651643 + s: 5.61927776337 + dkappa: 0.00131730236598 + } + v: 2.90555548668 + a: 0.477311863712 relative_time: 2.3400001525878906 - theta: -1.82250837147 - accumulated_s: 5.61927776337 -} -adc_trajectory_point { - x: -125.781569154 - y: 359.329721161 - z: -31.3060243241 - - speed: 2.90555548668 - acceleration_s: 0.477311863712 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.781569154 + y: 359.329721161 + z: -31.3060243241 + theta: -1.82254222458 + kappa: -0.00076549651643 + s: 5.64833331824 + dkappa: 0 + } + v: 2.90555548668 + a: 0.477311863712 relative_time: 2.3500001430511475 - theta: -1.82254222458 - accumulated_s: 5.64833331824 -} -adc_trajectory_point { - x: -125.789073629 - y: 359.301495396 - z: -31.3059554296 - - speed: 2.91388893127 - acceleration_s: 0.487612504816 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.789073629 + y: 359.301495396 + z: -31.3059554296 + theta: -1.82258890477 + kappa: -0.00076549651643 + s: 5.67747220755 + dkappa: 0 + } + v: 2.91388893127 + a: 0.487612504816 relative_time: 2.3600001335144043 - theta: -1.82258890477 - accumulated_s: 5.67747220755 -} -adc_trajectory_point { - x: -125.79657766 - y: 359.273239694 - z: -31.3059446588 - - speed: 2.91388893127 - acceleration_s: 0.408425345148 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.79657766 + y: 359.273239694 + z: -31.3059446588 + theta: -1.82264715603 + kappa: -0.00076549651643 + s: 5.70661109686 + dkappa: 0 + } + v: 2.91388893127 + a: 0.408425345148 relative_time: 2.3700001239776611 - theta: -1.82264715603 - accumulated_s: 5.70661109686 -} -adc_trajectory_point { - x: -125.804100799 - y: 359.244941955 - z: -31.3059203699 - - speed: 2.92222213745 - acceleration_s: 0.431552034778 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.804100799 + y: 359.244941955 + z: -31.3059203699 + theta: -1.82272320719 + kappa: -0.00076549651643 + s: 5.73583331824 + dkappa: 0 + } + v: 2.92222213745 + a: 0.431552034778 relative_time: 2.380000114440918 - theta: -1.82272320719 - accumulated_s: 5.73583331824 -} -adc_trajectory_point { - x: -125.811639623 - y: 359.216596273 - z: -31.3058855822 - - speed: 2.92222213745 - acceleration_s: 0.414205557226 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.811639623 + y: 359.216596273 + z: -31.3058855822 + theta: -1.82277593601 + kappa: -0.00076549651643 + s: 5.76505553961 + dkappa: 0 + } + v: 2.92222213745 + a: 0.414205557226 relative_time: 2.3900001049041748 - theta: -1.82277593601 - accumulated_s: 5.76505553961 -} -adc_trajectory_point { - x: -125.811639623 - y: 359.216596273 - z: -31.3058855822 - - speed: 2.93055558205 - acceleration_s: 0.414205557226 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.811639623 + y: 359.216596273 + z: -31.3058855822 + theta: -1.82277593601 + kappa: -0.00076549651643 + s: 5.79436109543 + dkappa: 0 + } + v: 2.93055558205 + a: 0.414205557226 relative_time: 2.3900001049041748 - theta: -1.82277593601 - accumulated_s: 5.79436109543 -} -adc_trajectory_point { - x: -125.826727703 - y: 359.159788805 - z: -31.3060976537 - - speed: 2.93055558205 - acceleration_s: 0.41204758658 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.826727703 + y: 359.159788805 + z: -31.3060976537 + theta: -1.82286203351 + kappa: -0.00076549651643 + s: 5.82366665125 + dkappa: 0 + } + v: 2.93055558205 + a: 0.41204758658 relative_time: 2.4100000858306885 - theta: -1.82286203351 - accumulated_s: 5.82366665125 -} -adc_trajectory_point { - x: -125.834298586 - y: 359.131348113 - z: -31.3061702913 - - speed: 2.94166660309 - acceleration_s: 0.29872526349 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.834298586 + y: 359.131348113 + z: -31.3061702913 + theta: -1.82291701216 + kappa: -0.00076549651643 + s: 5.85308331728 + dkappa: 0 + } + v: 2.94166660309 + a: 0.29872526349 relative_time: 2.4200000762939453 - theta: -1.82291701216 - accumulated_s: 5.85308331728 -} -adc_trajectory_point { - x: -125.841885547 - y: 359.102839577 - z: -31.3061969932 - - speed: 2.94166660309 - acceleration_s: 0.444027572803 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.841885547 + y: 359.102839577 + z: -31.3061969932 + theta: -1.82294408081 + kappa: -0.00076549651643 + s: 5.88249998331 + dkappa: 0 + } + v: 2.94166660309 + a: 0.444027572803 relative_time: 2.4300000667572021 - theta: -1.82294408081 - accumulated_s: 5.88249998331 -} -adc_trajectory_point { - x: -125.849468747 - y: 359.074320163 - z: -31.3063632268 - - speed: 2.95000004768 - acceleration_s: 0.30117113011 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.849468747 + y: 359.074320163 + z: -31.3063632268 + theta: -1.82294981809 + kappa: -0.00076549651643 + s: 5.91199998379 + dkappa: 0 + } + v: 2.95000004768 + a: 0.30117113011 relative_time: 2.440000057220459 - theta: -1.82294981809 - accumulated_s: 5.91199998379 -} -adc_trajectory_point { - x: -125.849468747 - y: 359.074320163 - z: -31.3063632268 - - speed: 2.95000004768 - acceleration_s: 0.30117113011 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.849468747 + y: 359.074320163 + z: -31.3063632268 + theta: -1.82294981809 + kappa: -0.00076549651643 + s: 5.94149998427 + dkappa: 0 + } + v: 2.95000004768 + a: 0.30117113011 relative_time: 2.440000057220459 - theta: -1.82294981809 - accumulated_s: 5.94149998427 -} -adc_trajectory_point { - x: -125.86470335 - y: 359.017140009 - z: -31.3069306035 - - speed: 2.95833325386 - acceleration_s: 0.367564584601 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.86470335 + y: 359.017140009 + z: -31.3069306035 + theta: -1.82300808145 + kappa: -0.00076549651643 + s: 5.97108331681 + dkappa: 0 + } + v: 2.95833325386 + a: 0.367564584601 relative_time: 2.4600000381469727 - theta: -1.82300808145 - accumulated_s: 5.97108331681 -} -adc_trajectory_point { - x: -125.872341557 - y: 358.988489067 - z: -31.307096309 - - speed: 2.95833325386 - acceleration_s: 0.360293941012 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.872341557 + y: 358.988489067 + z: -31.307096309 + theta: -1.82302397094 + kappa: -0.00076549651643 + s: 6.00066664934 + dkappa: 0 + } + v: 2.95833325386 + a: 0.360293941012 relative_time: 2.4700000286102295 - theta: -1.82302397094 - accumulated_s: 6.00066664934 -} -adc_trajectory_point { - x: -125.880037888 - y: 358.959804402 - z: -31.3073657053 - - speed: 2.96944451332 - acceleration_s: 0.460884138127 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.880037888 + y: 358.959804402 + z: -31.3073657053 + theta: -1.82306031579 + kappa: -0.00076549651643 + s: 6.03036109448 + dkappa: 0 + } + v: 2.96944451332 + a: 0.460884138127 relative_time: 2.4800000190734863 - theta: -1.82306031579 - accumulated_s: 6.03036109448 -} -adc_trajectory_point { - x: -125.887745816 - y: 358.931108792 - z: -31.3077072827 - - speed: 2.96944451332 - acceleration_s: 0.321661981102 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.887745816 + y: 358.931108792 + z: -31.3077072827 + theta: -1.8230438854 + kappa: -0.00076549651643 + s: 6.06005553961 + dkappa: 0 + } + v: 2.96944451332 + a: 0.321661981102 relative_time: 2.4900000095367432 - theta: -1.8230438854 - accumulated_s: 6.06005553961 -} -adc_trajectory_point { - x: -125.895517405 - y: 358.902351345 - z: -31.3080882411 - - speed: 2.98055553436 - acceleration_s: 0.321661981102 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.895517405 + y: 358.902351345 + z: -31.3080882411 + theta: -1.82307959727 + kappa: -0.00076549651643 + s: 6.08986109495 + dkappa: 0 + } + v: 2.98055553436 + a: 0.321661981102 relative_time: 2.5 - theta: -1.82307959727 - accumulated_s: 6.08986109495 -} -adc_trajectory_point { - x: -125.903316693 - y: 358.873560525 - z: -31.3085163888 - - speed: 2.98055553436 - acceleration_s: 0.464730193548 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.903316693 + y: 358.873560525 + z: -31.3085163888 + theta: -1.82307001711 + kappa: -0.00076549651643 + s: 6.1196666503 + dkappa: 0 + } + v: 2.98055553436 + a: 0.464730193548 relative_time: 2.5099999904632568 - theta: -1.82307001711 - accumulated_s: 6.1196666503 -} -adc_trajectory_point { - x: -125.911163585 - y: 358.844739997 - z: -31.3088300247 - - speed: 2.99444437027 - acceleration_s: 0.383093978266 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.911163585 + y: 358.844739997 + z: -31.3088300247 + theta: -1.82308327876 + kappa: -0.00076549651643 + s: 6.149611094 + dkappa: 0 + } + v: 2.99444437027 + a: 0.383093978266 relative_time: 2.5199999809265137 - theta: -1.82308327876 - accumulated_s: 6.149611094 -} -adc_trajectory_point { - x: -125.919032533 - y: 358.815868283 - z: -31.3091887236 - - speed: 2.99444437027 - acceleration_s: 0.491155818915 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.919032533 + y: 358.815868283 + z: -31.3091887236 + theta: -1.82308549865 + kappa: -0.00076549651643 + s: 6.1795555377 + dkappa: 0 + } + v: 2.99444437027 + a: 0.491155818915 relative_time: 2.5299999713897705 - theta: -1.82308549865 - accumulated_s: 6.1795555377 -} -adc_trajectory_point { - x: -125.926896637 - y: 358.786987422 - z: -31.3095703563 - - speed: 3.0083334446 - acceleration_s: 0.303688481265 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.926896637 + y: 358.786987422 + z: -31.3095703563 + theta: -1.82305372126 + kappa: -0.00076549651643 + s: 6.20963887215 + dkappa: 0 + } + v: 3.0083334446 + a: 0.303688481265 relative_time: 2.5399999618530273 - theta: -1.82305372126 - accumulated_s: 6.20963887215 -} -adc_trajectory_point { - x: -125.934788487 - y: 358.75803987 - z: -31.309997268 - - speed: 3.0083334446 - acceleration_s: 0.470811416377 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.934788487 + y: 358.75803987 + z: -31.309997268 + theta: -1.82305385113 + kappa: -0.00076549651643 + s: 6.2397222066 + dkappa: 0 + } + v: 3.0083334446 + a: 0.470811416377 relative_time: 2.5499999523162842 - theta: -1.82305385113 - accumulated_s: 6.2397222066 -} -adc_trajectory_point { - x: -125.942672155 - y: 358.72905105 - z: -31.3104813183 - - speed: 3.0083334446 - acceleration_s: 0.496127967555 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.942672155 + y: 358.72905105 + z: -31.3104813183 + theta: -1.82307027028 + kappa: -0.00076549651643 + s: 6.26980554104 + dkappa: 0 + } + v: 3.0083334446 + a: 0.496127967555 relative_time: 2.559999942779541 - theta: -1.82307027028 - accumulated_s: 6.26980554104 -} -adc_trajectory_point { - x: -125.950557125 - y: 358.70001789 - z: -31.3108385755 - - speed: 3.0222222805 - acceleration_s: 0.459179381124 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.950557125 + y: 358.70001789 + z: -31.3108385755 + theta: -1.82309299541 + kappa: -0.00076549651643 + s: 6.30002776385 + dkappa: 0 + } + v: 3.0222222805 + a: 0.459179381124 relative_time: 2.5699999332427979 - theta: -1.82309299541 - accumulated_s: 6.30002776385 -} -adc_trajectory_point { - x: -125.958427402 - y: 358.670924304 - z: -31.3112333706 - - speed: 3.0222222805 - acceleration_s: 0.459677400509 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.958427402 + y: 358.670924304 + z: -31.3112333706 + theta: -1.82311852637 + kappa: -0.00076549651643 + s: 6.33024998665 + dkappa: 0 + } + v: 3.0222222805 + a: 0.459677400509 relative_time: 2.5800001621246338 - theta: -1.82311852637 - accumulated_s: 6.33024998665 -} -adc_trajectory_point { - x: -125.966273613 - y: 358.641808143 - z: -31.3115684483 - - speed: 3.03333330154 - acceleration_s: 0.459677400509 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.966273613 + y: 358.641808143 + z: -31.3115684483 + theta: -1.8231428439 + kappa: -0.00076549651643 + s: 6.36058331967 + dkappa: 0 + } + v: 3.03333330154 + a: 0.459677400509 relative_time: 2.5900001525878906 - theta: -1.8231428439 - accumulated_s: 6.36058331967 -} -adc_trajectory_point { - x: -125.974084814 - y: 358.612648583 - z: -31.312040519 - - speed: 3.03333330154 - acceleration_s: 0.319544190721 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.974084814 + y: 358.612648583 + z: -31.312040519 + theta: -1.82318429305 + kappa: -0.00076549651643 + s: 6.39091665268 + dkappa: 0 + } + v: 3.03333330154 + a: 0.319544190721 relative_time: 2.6000001430511475 - theta: -1.82318429305 - accumulated_s: 6.39091665268 -} -adc_trajectory_point { - x: -125.981874503 - y: 358.583403985 - z: -31.3123099208 - - speed: 3.044444561 - acceleration_s: 0.499313586165 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.981874503 + y: 358.583403985 + z: -31.3123099208 + theta: -1.82320408035 + kappa: -0.00076549651643 + s: 6.42136109829 + dkappa: 0 + } + v: 3.044444561 + a: 0.499313586165 relative_time: 2.6100001335144043 - theta: -1.82320408035 - accumulated_s: 6.42136109829 -} -adc_trajectory_point { - x: -125.989619091 - y: 358.554155402 - z: -31.3126276666 - - speed: 3.04999995232 - acceleration_s: 0.320399732615 - curvature: -0.000803771467601 - curvature_change_rate: -0.00125491645145 +} +trajectory_point { + path_point { + x: -125.989619091 + y: 358.554155402 + z: -31.3126276666 + theta: -1.82323937864 + kappa: -0.000803771467601 + s: 6.45186109782 + dkappa: -0.00125491645145 + } + v: 3.04999995232 + a: 0.320399732615 relative_time: 2.6200001239776611 - theta: -1.82323937864 - accumulated_s: 6.45186109782 -} -adc_trajectory_point { - x: -125.997444216 - y: 358.524857352 - z: -31.3129913248 - - speed: 3.04999995232 - acceleration_s: 0.469653036493 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.997444216 + y: 358.524857352 + z: -31.3129913248 + theta: -1.82335120105 + kappa: -0.000803771467601 + s: 6.48236109734 + dkappa: 0 + } + v: 3.04999995232 + a: 0.469653036493 relative_time: 2.630000114440918 - theta: -1.82335120105 - accumulated_s: 6.48236109734 -} -adc_trajectory_point { - x: -126.005200698 - y: 358.495540045 - z: -31.3134962507 - - speed: 3.05833339691 - acceleration_s: 0.311313962184 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.005200698 + y: 358.495540045 + z: -31.3134962507 + theta: -1.8233994009 + kappa: -0.000803771467601 + s: 6.51294443131 + dkappa: 0 + } + v: 3.05833339691 + a: 0.311313962184 relative_time: 2.6400001049041748 - theta: -1.8233994009 - accumulated_s: 6.51294443131 -} -adc_trajectory_point { - x: -126.012948537 - y: 358.466132741 - z: -31.3138230573 - - speed: 3.05833339691 - acceleration_s: 0.454018653915 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.012948537 + y: 358.466132741 + z: -31.3138230573 + theta: -1.82343280294 + kappa: -0.000803771467601 + s: 6.54352776528 + dkappa: 0 + } + v: 3.05833339691 + a: 0.454018653915 relative_time: 2.6500000953674316 - theta: -1.82343280294 - accumulated_s: 6.54352776528 -} -adc_trajectory_point { - x: -126.020727633 - y: 358.436689224 - z: -31.3139888011 - - speed: 3.06388878822 - acceleration_s: 0.443531903069 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.020727633 + y: 358.436689224 + z: -31.3139888011 + theta: -1.82345385402 + kappa: -0.000803771467601 + s: 6.5741666531600007 + dkappa: 0 + } + v: 3.06388878822 + a: 0.443531903069 relative_time: 2.6600000858306885 - theta: -1.82345385402 - accumulated_s: 6.5741666531600007 -} -adc_trajectory_point { - x: -126.028530638 - y: 358.407219537 - z: -31.3142265771 - - speed: 3.06388878822 - acceleration_s: 0.413639588279 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.028530638 + y: 358.407219537 + z: -31.3142265771 + theta: -1.82349320987 + kappa: -0.000803771467601 + s: 6.6048055410399993 + dkappa: 0 + } + v: 3.06388878822 + a: 0.413639588279 relative_time: 2.6700000762939453 - theta: -1.82349320987 - accumulated_s: 6.6048055410399993 -} -adc_trajectory_point { - x: -126.036354345 - y: 358.37772713 - z: -31.3146840679 - - speed: 3.06944441795 - acceleration_s: 0.413639588279 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.036354345 + y: 358.37772713 + z: -31.3146840679 + theta: -1.82359408573 + kappa: -0.000803771467601 + s: 6.6354999852199992 + dkappa: 0 + } + v: 3.06944441795 + a: 0.413639588279 relative_time: 2.6800000667572021 - theta: -1.82359408573 - accumulated_s: 6.6354999852199992 -} -adc_trajectory_point { - x: -126.044157398 - y: 358.348197709 - z: -31.3150890348 - - speed: 3.06944441795 - acceleration_s: 0.326254765876 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.044157398 + y: 358.348197709 + z: -31.3150890348 + theta: -1.82364311569 + kappa: -0.000803771467601 + s: 6.6661944294000008 + dkappa: 0 + } + v: 3.06944441795 + a: 0.326254765876 relative_time: 2.690000057220459 - theta: -1.82364311569 - accumulated_s: 6.6661944294000008 -} -adc_trajectory_point { - x: -126.044157398 - y: 358.348197709 - z: -31.3150890348 - - speed: 3.07500004768 - acceleration_s: 0.326254765876 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.044157398 + y: 358.348197709 + z: -31.3150890348 + theta: -1.82364311569 + kappa: -0.000803771467601 + s: 6.69694442988 + dkappa: 0 + } + v: 3.07500004768 + a: 0.326254765876 relative_time: 2.690000057220459 - theta: -1.82364311569 - accumulated_s: 6.69694442988 -} -adc_trajectory_point { - x: -126.059855718 - y: 358.288982885 - z: -31.3155618459 - - speed: 3.07500004768 - acceleration_s: 0.46523362929 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.059855718 + y: 358.288982885 + z: -31.3155618459 + theta: -1.8237598578 + kappa: -0.000803771467601 + s: 6.7276944303500006 + dkappa: 0 + } + v: 3.07500004768 + a: 0.46523362929 relative_time: 2.7100000381469727 - theta: -1.8237598578 - accumulated_s: 6.7276944303500006 -} -adc_trajectory_point { - x: -126.067677572 - y: 358.259321449 - z: -31.3159407303 - - speed: 3.08333325386 - acceleration_s: 0.506723991784 - curvature: -0.0008420464379 - curvature_change_rate: -0.00124135042008 +} +trajectory_point { + path_point { + x: -126.067677572 + y: 358.259321449 + z: -31.3159407303 + theta: -1.82377316375 + kappa: -0.0008420464379 + s: 6.7585277628899991 + dkappa: -0.00124135042008 + } + v: 3.08333325386 + a: 0.506723991784 relative_time: 2.7200000286102295 - theta: -1.82377316375 - accumulated_s: 6.7585277628899991 -} -adc_trajectory_point { - x: -126.075541854 - y: 358.229580921 - z: -31.3163395924 - - speed: 3.08333325386 - acceleration_s: 0.563808783768 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.075541854 + y: 358.229580921 + z: -31.3163395924 + theta: -1.82382011107 + kappa: -0.0008420464379 + s: 6.7893610954299994 + dkappa: 0 + } + v: 3.08333325386 + a: 0.563808783768 relative_time: 2.7300000190734863 - theta: -1.82382011107 - accumulated_s: 6.7893610954299994 -} -adc_trajectory_point { - x: -126.083392099 - y: 358.199824766 - z: -31.316745366 - - speed: 3.09166669846 - acceleration_s: 0.425152358643 - curvature: -0.000880321428239 - curvature_change_rate: -0.00123800506561 +} +trajectory_point { + path_point { + x: -126.083392099 + y: 358.199824766 + z: -31.316745366 + theta: -1.82384748254 + kappa: -0.000880321428239 + s: 6.82027776242 + dkappa: -0.00123800506561 + } + v: 3.09166669846 + a: 0.425152358643 relative_time: 2.7400000095367432 - theta: -1.82384748254 - accumulated_s: 6.82027776242 -} -adc_trajectory_point { - x: -126.091296726 - y: 358.169999322 - z: -31.3170797275 - - speed: 3.09166669846 - acceleration_s: 0.529039050034 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.091296726 + y: 358.169999322 + z: -31.3170797275 + theta: -1.82392769881 + kappa: -0.000880321428239 + s: 6.8511944294 + dkappa: 0 + } + v: 3.09166669846 + a: 0.529039050034 relative_time: 2.75 - theta: -1.82392769881 - accumulated_s: 6.8511944294 -} -adc_trajectory_point { - x: -126.091296726 - y: 358.169999322 - z: -31.3170797275 - - speed: 3.09722232819 - acceleration_s: 0.529039050034 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.091296726 + y: 358.169999322 + z: -31.3170797275 + theta: -1.82392769881 + kappa: -0.000880321428239 + s: 6.8821666526800005 + dkappa: 0 + } + v: 3.09722232819 + a: 0.529039050034 relative_time: 2.75 - theta: -1.82392769881 - accumulated_s: 6.8821666526800005 -} -adc_trajectory_point { - x: -126.107108815 - y: 358.110277742 - z: -31.3177725319 - - speed: 3.09722232819 - acceleration_s: 0.382627782371 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.107108815 + y: 358.110277742 + z: -31.3177725319 + theta: -1.82402766554 + kappa: -0.000880321428239 + s: 6.91313887596 + dkappa: 0 + } + v: 3.09722232819 + a: 0.382627782371 relative_time: 2.7699999809265137 - theta: -1.82402766554 - accumulated_s: 6.91313887596 -} -adc_trajectory_point { - x: -126.1150425 - y: 358.080346963 - z: -31.3182779802 - - speed: 3.10555553436 - acceleration_s: 0.497540593076 - curvature: -0.000918596439528 - curvature_change_rate: -0.00123246906601 +} +trajectory_point { + path_point { + x: -126.1150425 + y: 358.080346963 + z: -31.3182779802 + theta: -1.82407606579 + kappa: -0.000918596439528 + s: 6.9441944313100006 + dkappa: -0.00123246906601 + } + v: 3.10555553436 + a: 0.497540593076 relative_time: 2.7799999713897705 - theta: -1.82407606579 - accumulated_s: 6.9441944313100006 -} -adc_trajectory_point { - x: -126.122980671 - y: 358.050388892 - z: -31.3186851079 - - speed: 3.10555553436 - acceleration_s: 0.374230324395 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.122980671 + y: 358.050388892 + z: -31.3186851079 + theta: -1.8241204982 + kappa: -0.000918596439528 + s: 6.9752499866500006 + dkappa: 0 + } + v: 3.10555553436 + a: 0.374230324395 relative_time: 2.7899999618530273 - theta: -1.8241204982 - accumulated_s: 6.9752499866500006 -} -adc_trajectory_point { - x: -126.130936993 - y: 358.020345633 - z: -31.3191264886 - - speed: 3.11388897896 - acceleration_s: 0.580999622577 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.130936993 + y: 358.020345633 + z: -31.3191264886 + theta: -1.82416021751 + kappa: -0.000918596439528 + s: 7.0063888764400009 + dkappa: 0 + } + v: 3.11388897896 + a: 0.580999622577 relative_time: 2.7999999523162842 - theta: -1.82416021751 - accumulated_s: 7.0063888764400009 -} -adc_trajectory_point { - x: -126.138945684 - y: 357.990276143 - z: -31.3196149571 - - speed: 3.11388897896 - acceleration_s: 0.571256202308 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.138945684 + y: 357.990276143 + z: -31.3196149571 + theta: -1.82425172481 + kappa: -0.000918596439528 + s: 7.0375277662299993 + dkappa: 0 + } + v: 3.11388897896 + a: 0.571256202308 relative_time: 2.809999942779541 - theta: -1.82425172481 - accumulated_s: 7.0375277662299993 -} -adc_trajectory_point { - x: -126.146892291 - y: 357.960134232 - z: -31.3200618271 - - speed: 3.125 - acceleration_s: 0.520164619607 - curvature: -0.000956871472678 - curvature_change_rate: -0.0012248010608 +} +trajectory_point { + path_point { + x: -126.146892291 + y: 357.960134232 + z: -31.3200618271 + theta: -1.82425692775 + kappa: -0.000956871472678 + s: 7.0687777662299993 + dkappa: -0.0012248010608 + } + v: 3.125 + a: 0.520164619607 relative_time: 2.8199999332427979 - theta: -1.82425692775 - accumulated_s: 7.0687777662299993 -} -adc_trajectory_point { - x: -126.154869846 - y: 357.929954192 - z: -31.3205484115 - - speed: 3.125 - acceleration_s: 0.501316150934 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.154869846 + y: 357.929954192 + z: -31.3205484115 + theta: -1.8243241516 + kappa: -0.000956871472678 + s: 7.1000277662299993 + dkappa: 0 + } + v: 3.125 + a: 0.501316150934 relative_time: 2.8300001621246338 - theta: -1.8243241516 - accumulated_s: 7.1000277662299993 -} -adc_trajectory_point { - x: -126.162832424 - y: 357.899732542 - z: -31.3210640308 - - speed: 3.13611102104 - acceleration_s: 0.383059567577 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.162832424 + y: 357.899732542 + z: -31.3210640308 + theta: -1.82436401959 + kappa: -0.000956871472678 + s: 7.1313888764400009 + dkappa: 0 + } + v: 3.13611102104 + a: 0.383059567577 relative_time: 2.8400001525878906 - theta: -1.82436401959 - accumulated_s: 7.1313888764400009 -} -adc_trajectory_point { - x: -126.170812033 - y: 357.869454264 - z: -31.321619818 - - speed: 3.13611102104 - acceleration_s: 0.383059567577 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.170812033 + y: 357.869454264 + z: -31.321619818 + theta: -1.8244479462 + kappa: -0.000956871472678 + s: 7.1627499866500006 + dkappa: 0 + } + v: 3.13611102104 + a: 0.383059567577 relative_time: 2.8500001430511475 - theta: -1.8244479462 - accumulated_s: 7.1627499866500006 -} -adc_trajectory_point { - x: -126.178766382 - y: 357.839126963 - z: -31.3222097838 - - speed: 3.1472222805 - acceleration_s: 0.464772359593 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.178766382 + y: 357.839126963 + z: -31.3222097838 + theta: -1.82447236367 + kappa: -0.000956871472678 + s: 7.1942222094599995 + dkappa: 0 + } + v: 3.1472222805 + a: 0.464772359593 relative_time: 2.8600001335144043 - theta: -1.82447236367 - accumulated_s: 7.1942222094599995 -} -adc_trajectory_point { - x: -126.186743378 - y: 357.808752627 - z: -31.3226710502 - - speed: 3.1472222805 - acceleration_s: 0.457433710587 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.186743378 + y: 357.808752627 + z: -31.3226710502 + theta: -1.82454997751 + kappa: -0.000956871472678 + s: 7.2256944322599992 + dkappa: 0 + } + v: 3.1472222805 + a: 0.457433710587 relative_time: 2.8700001239776611 - theta: -1.82454997751 - accumulated_s: 7.2256944322599992 -} -adc_trajectory_point { - x: -126.194704008 - y: 357.778319877 - z: -31.3232655963 - - speed: 3.15555548668 - acceleration_s: 0.522979453222 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.194704008 + y: 357.778319877 + z: -31.3232655963 + theta: -1.82459108363 + kappa: -0.000956871472678 + s: 7.2572499871300007 + dkappa: 0 + } + v: 3.15555548668 + a: 0.522979453222 relative_time: 2.880000114440918 - theta: -1.82459108363 - accumulated_s: 7.2572499871300007 -} -adc_trajectory_point { - x: -126.202693428 - y: 357.747852806 - z: -31.3239080766 - - speed: 3.15555548668 - acceleration_s: 0.455380615626 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.202693428 + y: 357.747852806 + z: -31.3239080766 + theta: -1.82464949137 + kappa: -0.000956871472678 + s: 7.2888055419899995 + dkappa: 0 + } + v: 3.15555548668 + a: 0.455380615626 relative_time: 2.8900001049041748 - theta: -1.82464949137 - accumulated_s: 7.2888055419899995 -} -adc_trajectory_point { - x: -126.210694911 - y: 357.717305728 - z: -31.3244874831 - - speed: 3.16388893127 - acceleration_s: 0.455380615626 - curvature: -0.000918596439528 - curvature_change_rate: 0.00120974642225 +} +trajectory_point { + path_point { + x: -126.210694911 + y: 357.717305728 + z: -31.3244874831 + theta: -1.82470858106 + kappa: -0.000918596439528 + s: 7.3204444313099994 + dkappa: 0.00120974642225 + } + v: 3.16388893127 + a: 0.455380615626 relative_time: 2.9000000953674316 - theta: -1.82470858106 - accumulated_s: 7.3204444313099994 -} -adc_trajectory_point { - x: -126.218712949 - y: 357.686723792 - z: -31.3250816101 - - speed: 3.16388893127 - acceleration_s: 0.503037514005 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.218712949 + y: 357.686723792 + z: -31.3250816101 + theta: -1.82474317059 + kappa: -0.000918596439528 + s: 7.35208332062 + dkappa: 0 + } + v: 3.16388893127 + a: 0.503037514005 relative_time: 2.9100000858306885 - theta: -1.82474317059 - accumulated_s: 7.35208332062 -} -adc_trajectory_point { - x: -126.226761876 - y: 357.656090805 - z: -31.3256956702 - - speed: 3.17777776718 - acceleration_s: 0.534048393007 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.226761876 + y: 357.656090805 + z: -31.3256956702 + theta: -1.82479909581 + kappa: -0.000918596439528 + s: 7.38386109829 + dkappa: 0 + } + v: 3.17777776718 + a: 0.534048393007 relative_time: 2.9200000762939453 - theta: -1.82479909581 - accumulated_s: 7.38386109829 -} -adc_trajectory_point { - x: -126.234841061 - y: 357.625433481 - z: -31.3264127029 - - speed: 3.17777776718 - acceleration_s: 0.509043883341 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.234841061 + y: 357.625433481 + z: -31.3264127029 + theta: -1.82488274067 + kappa: -0.000918596439528 + s: 7.4156388759599992 + dkappa: 0 + } + v: 3.17777776718 + a: 0.509043883341 relative_time: 2.9300000667572021 - theta: -1.82488274067 - accumulated_s: 7.4156388759599992 -} -adc_trajectory_point { - x: -126.242926637 - y: 357.594723481 - z: -31.3271339554 - - speed: 3.19166660309 - acceleration_s: 0.453107629423 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.242926637 + y: 357.594723481 + z: -31.3271339554 + theta: -1.82492478946 + kappa: -0.000918596439528 + s: 7.4475555419900008 + dkappa: 0 + } + v: 3.19166660309 + a: 0.453107629423 relative_time: 2.940000057220459 - theta: -1.82492478946 - accumulated_s: 7.4475555419900008 -} -adc_trajectory_point { - x: -126.242926637 - y: 357.594723481 - z: -31.3271339554 - - speed: 3.19166660309 - acceleration_s: 0.453107629423 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.242926637 + y: 357.594723481 + z: -31.3271339554 + theta: -1.82492478946 + kappa: -0.000918596439528 + s: 7.47947220803 + dkappa: 0 + } + v: 3.19166660309 + a: 0.453107629423 relative_time: 2.940000057220459 - theta: -1.82492478946 - accumulated_s: 7.47947220803 -} -adc_trajectory_point { - x: -126.259181833 - y: 357.533099366 - z: -31.328906294 - - speed: 3.19722223282 - acceleration_s: 0.614675811852 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.259181833 + y: 357.533099366 + z: -31.328906294 + theta: -1.82505297325 + kappa: -0.000918596439528 + s: 7.51144443035 + dkappa: 0 + } + v: 3.19722223282 + a: 0.614675811852 relative_time: 2.9600000381469727 - theta: -1.82505297325 - accumulated_s: 7.51144443035 -} -adc_trajectory_point { - x: -126.267313914 - y: 357.502148787 - z: -31.3298393926 - - speed: 3.19722223282 - acceleration_s: 0.796355408066 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.267313914 + y: 357.502148787 + z: -31.3298393926 + theta: -1.8251012432 + kappa: -0.000918596439528 + s: 7.5434166526799995 + dkappa: 0 + } + v: 3.19722223282 + a: 0.796355408066 relative_time: 2.9700000286102295 - theta: -1.8251012432 - accumulated_s: 7.5434166526799995 -} -adc_trajectory_point { - x: -126.275508208 - y: 357.471180796 - z: -31.3308216175 - - speed: 3.205555439 - acceleration_s: 0.629462267384 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.275508208 + y: 357.471180796 + z: -31.3308216175 + theta: -1.82522005594 + kappa: -0.000918596439528 + s: 7.57547220707 + dkappa: 0 + } + v: 3.205555439 + a: 0.629462267384 relative_time: 2.9800000190734863 - theta: -1.82522005594 - accumulated_s: 7.57547220707 -} -adc_trajectory_point { - x: -126.283680829 - y: 357.440122586 - z: -31.3317320691 - - speed: 3.205555439 - acceleration_s: 0.621641273573 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.283680829 + y: 357.440122586 + z: -31.3317320691 + theta: -1.82528217867 + kappa: -0.000918596439528 + s: 7.60752776146 + dkappa: 0 + } + v: 3.205555439 + a: 0.621641273573 relative_time: 2.9900000095367432 - theta: -1.82528217867 - accumulated_s: 7.60752776146 -} -adc_trajectory_point { - x: -126.291893912 - y: 357.4090488 - z: -31.3326069424 - - speed: 3.21388888359 - acceleration_s: 0.621641273573 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.291893912 + y: 357.4090488 + z: -31.3326069424 + theta: -1.82537641226 + kappa: -0.000918596439528 + s: 7.6396666503000006 + dkappa: 0 + } + v: 3.21388888359 + a: 0.621641273573 relative_time: 3 - theta: -1.82537641226 - accumulated_s: 7.6396666503000006 -} -adc_trajectory_point { - x: -126.300109163 - y: 357.377939678 - z: -31.3334607286 - - speed: 3.21388888359 - acceleration_s: 0.352646051338 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.300109163 + y: 357.377939678 + z: -31.3334607286 + theta: -1.82543024597 + kappa: -0.000918596439528 + s: 7.67180553913 + dkappa: 0 + } + v: 3.21388888359 + a: 0.352646051338 relative_time: 3.0099999904632568 - theta: -1.82543024597 - accumulated_s: 7.67180553913 -} -adc_trajectory_point { - x: -126.308303954 - y: 357.346792906 - z: -31.3343978049 - - speed: 3.2277777195 - acceleration_s: 0.362813741162 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.308303954 + y: 357.346792906 + z: -31.3343978049 + theta: -1.82544284689 + kappa: -0.000918596439528 + s: 7.7040833163299993 + dkappa: 0 + } + v: 3.2277777195 + a: 0.362813741162 relative_time: 3.0199999809265137 - theta: -1.82544284689 - accumulated_s: 7.7040833163299993 -} -adc_trajectory_point { - x: -126.316550762 - y: 357.315653427 - z: -31.335456715 - - speed: 3.2277777195 - acceleration_s: 0.232629772995 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.316550762 + y: 357.315653427 + z: -31.335456715 + theta: -1.82552119025 + kappa: -0.000918596439528 + s: 7.7363610935199993 + dkappa: 0 + } + v: 3.2277777195 + a: 0.232629772995 relative_time: 3.0299999713897705 - theta: -1.82552119025 - accumulated_s: 7.7363610935199993 -} -adc_trajectory_point { - x: -126.324832741 - y: 357.284433166 - z: -31.3363997387 - - speed: 3.2277777195 - acceleration_s: 0.232629772995 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.324832741 + y: 357.284433166 + z: -31.3363997387 + theta: -1.82564221475 + kappa: -0.000918596439528 + s: 7.76863887072 + dkappa: 0 + } + v: 3.2277777195 + a: 0.232629772995 relative_time: 3.0399999618530273 - theta: -1.82564221475 - accumulated_s: 7.76863887072 -} -adc_trajectory_point { - x: -126.333088492 - y: 357.253151252 - z: -31.337216489 - - speed: 3.23888897896 - acceleration_s: 0.546959754019 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.333088492 + y: 357.253151252 + z: -31.337216489 + theta: -1.82569642273 + kappa: -0.000918596439528 + s: 7.8010277605099994 + dkappa: 0 + } + v: 3.23888897896 + a: 0.546959754019 relative_time: 3.0499999523162842 - theta: -1.82569642273 - accumulated_s: 7.8010277605099994 -} -adc_trajectory_point { - x: -126.341357353 - y: 357.221766901 - z: -31.3379224408 - - speed: 3.25 - acceleration_s: 0.763328602658 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.341357353 + y: 357.221766901 + z: -31.3379224408 + theta: -1.82571571216 + kappa: -0.000918596439528 + s: 7.83352776051 + dkappa: 0 + } + v: 3.25 + a: 0.763328602658 relative_time: 3.059999942779541 - theta: -1.82571571216 - accumulated_s: 7.83352776051 -} -adc_trajectory_point { - x: -126.349677904 - y: 357.190412597 - z: -31.3388488209 - - speed: 3.25 - acceleration_s: 0.492292654727 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.349677904 + y: 357.190412597 + z: -31.3388488209 + theta: -1.82583419304 + kappa: -0.000918596439528 + s: 7.8660277605100006 + dkappa: 0 + } + v: 3.25 + a: 0.492292654727 relative_time: 3.0699999332427979 - theta: -1.82583419304 - accumulated_s: 7.8660277605100006 -} -adc_trajectory_point { - x: -126.357958179 - y: 357.158974798 - z: -31.3395972587 - - speed: 3.26111102104 - acceleration_s: 0.464564854836 - curvature: -0.000880321428239 - curvature_change_rate: 0.00117368010601 +} +trajectory_point { + path_point { + x: -126.357958179 + y: 357.158974798 + z: -31.3395972587 + theta: -1.8258701716 + kappa: -0.000880321428239 + s: 7.8986388707199993 + dkappa: 0.00117368010601 + } + v: 3.26111102104 + a: 0.464564854836 relative_time: 3.0800001621246338 - theta: -1.8258701716 - accumulated_s: 7.8986388707199993 -} -adc_trajectory_point { - x: -126.36625774 - y: 357.127544982 - z: -31.3403570335 - - speed: 3.26111102104 - acceleration_s: 0.296031596052 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.36625774 + y: 357.127544982 + z: -31.3403570335 + theta: -1.82594556362 + kappa: -0.000880321428239 + s: 7.93124998093 + dkappa: 0 + } + v: 3.26111102104 + a: 0.296031596052 relative_time: 3.0900001525878906 - theta: -1.82594556362 - accumulated_s: 7.93124998093 -} -adc_trajectory_point { - x: -126.36625774 - y: 357.127544982 - z: -31.3403570335 - - speed: 3.26944446564 - acceleration_s: 0.296031596052 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.36625774 + y: 357.127544982 + z: -31.3403570335 + theta: -1.82594556362 + kappa: -0.000880321428239 + s: 7.96394442559 + dkappa: 0 + } + v: 3.26944446564 + a: 0.296031596052 relative_time: 3.0900001525878906 - theta: -1.82594556362 - accumulated_s: 7.96394442559 -} -adc_trajectory_point { - x: -126.382883895 - y: 357.064596002 - z: -31.3415422123 - - speed: 3.26944446564 - acceleration_s: 0.290829079588 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.382883895 + y: 357.064596002 + z: -31.3415422123 + theta: -1.82601293343 + kappa: -0.000880321428239 + s: 7.99663887024 + dkappa: 0 + } + v: 3.26944446564 + a: 0.290829079588 relative_time: 3.1100001335144043 - theta: -1.82601293343 - accumulated_s: 7.99663887024 -} -adc_trajectory_point { - x: -126.391256508 - y: 357.033119968 - z: -31.3421462085 - - speed: 3.27777767181 - acceleration_s: 0.128096931288 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.391256508 + y: 357.033119968 + z: -31.3421462085 + theta: -1.8261001025 + kappa: -0.000880321428239 + s: 8.02941664696 + dkappa: 0 + } + v: 3.27777767181 + a: 0.128096931288 relative_time: 3.1200001239776611 - theta: -1.8261001025 - accumulated_s: 8.02941664696 -} -adc_trajectory_point { - x: -126.39960812 - y: 357.001552905 - z: -31.3426318364 - - speed: 3.27777767181 - acceleration_s: 0.4808557379 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.39960812 + y: 357.001552905 + z: -31.3426318364 + theta: -1.82611571164 + kappa: -0.000880321428239 + s: 8.06219442368 + dkappa: 0 + } + v: 3.27777767181 + a: 0.4808557379 relative_time: 3.130000114440918 - theta: -1.82611571164 - accumulated_s: 8.06219442368 -} -adc_trajectory_point { - x: -126.407998766 - y: 356.970002409 - z: -31.3430617405 - - speed: 3.28888893127 - acceleration_s: 0.286767132188 - curvature: -0.0008420464379 - curvature_change_rate: 0.00116376658314 +} +trajectory_point { + path_point { + x: -126.407998766 + y: 356.970002409 + z: -31.3430617405 + theta: -1.82614509679 + kappa: -0.0008420464379 + s: 8.09508331299 + dkappa: 0.00116376658314 + } + v: 3.28888893127 + a: 0.286767132188 relative_time: 3.1400001049041748 - theta: -1.82614509679 - accumulated_s: 8.09508331299 -} -adc_trajectory_point { - x: -126.416460821 - y: 356.938375203 - z: -31.3433212331 - - speed: 3.28888893127 - acceleration_s: 0.286767132188 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.416460821 + y: 356.938375203 + z: -31.3433212331 + theta: -1.82619763602 + kappa: -0.0008420464379 + s: 8.1279722023 + dkappa: 0 + } + v: 3.28888893127 + a: 0.286767132188 relative_time: 3.1500000953674316 - theta: -1.82619763602 - accumulated_s: 8.1279722023 -} -adc_trajectory_point { - x: -126.424894005 - y: 356.906737938 - z: -31.3437340027 - - speed: 3.29999995232 - acceleration_s: 0.428438433349 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.424894005 + y: 356.906737938 + z: -31.3437340027 + theta: -1.8261957026 + kappa: -0.0008420464379 + s: 8.16097220183 + dkappa: 0 + } + v: 3.29999995232 + a: 0.428438433349 relative_time: 3.1600000858306885 - theta: -1.8261957026 - accumulated_s: 8.16097220183 -} -adc_trajectory_point { - x: -126.433370464 - y: 356.875058806 - z: -31.3439121805 - - speed: 3.29999995232 - acceleration_s: 0.36476578847 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.433370464 + y: 356.875058806 + z: -31.3439121805 + theta: -1.82619254194 + kappa: -0.0008420464379 + s: 8.19397220135 + dkappa: 0 + } + v: 3.29999995232 + a: 0.36476578847 relative_time: 3.1700000762939453 - theta: -1.82619254194 - accumulated_s: 8.19397220135 -} -adc_trajectory_point { - x: -126.441893076 - y: 356.843338796 - z: -31.3441874972 - - speed: 3.30833339691 - acceleration_s: 0.5167637741 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.441893076 + y: 356.843338796 + z: -31.3441874972 + theta: -1.82622539305 + kappa: -0.0008420464379 + s: 8.22705553532 + dkappa: 0 + } + v: 3.30833339691 + a: 0.5167637741 relative_time: 3.1800000667572021 - theta: -1.82622539305 - accumulated_s: 8.22705553532 -} -adc_trajectory_point { - x: -126.450440938 - y: 356.811614783 - z: -31.3443374243 - - speed: 3.30833339691 - acceleration_s: 0.301862609745 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.450440938 + y: 356.811614783 + z: -31.3443374243 + theta: -1.82626537346 + kappa: -0.0008420464379 + s: 8.26013886929 + dkappa: 0 + } + v: 3.30833339691 + a: 0.301862609745 relative_time: 3.190000057220459 - theta: -1.82626537346 - accumulated_s: 8.26013886929 -} -adc_trajectory_point { - x: -126.450440938 - y: 356.811614783 - z: -31.3443374243 - - speed: 3.31666660309 - acceleration_s: 0.301862609745 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.450440938 + y: 356.811614783 + z: -31.3443374243 + theta: -1.82626537346 + kappa: -0.0008420464379 + s: 8.29330553532 + dkappa: 0 + } + v: 3.31666660309 + a: 0.301862609745 relative_time: 3.190000057220459 - theta: -1.82626537346 - accumulated_s: 8.29330553532 -} -adc_trajectory_point { - x: -126.467585246 - y: 356.748054621 - z: -31.3445607657 - - speed: 3.31666660309 - acceleration_s: 0.239822784622 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.467585246 + y: 356.748054621 + z: -31.3445607657 + theta: -1.82633228994 + kappa: -0.0008420464379 + s: 8.32647220135 + dkappa: 0 + } + v: 3.31666660309 + a: 0.239822784622 relative_time: 3.2100000381469727 - theta: -1.82633228994 - accumulated_s: 8.32647220135 -} -adc_trajectory_point { - x: -126.476163793 - y: 356.716236298 - z: -31.3445254369 - - speed: 3.32500004768 - acceleration_s: 0.267242042689 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.476163793 + y: 356.716236298 + z: -31.3445254369 + theta: -1.82634928064 + kappa: -0.0008420464379 + s: 8.35972220183 + dkappa: 0 + } + v: 3.32500004768 + a: 0.267242042689 relative_time: 3.2200000286102295 - theta: -1.82634928064 - accumulated_s: 8.35972220183 -} -adc_trajectory_point { - x: -126.484763992 - y: 356.684400349 - z: -31.3445740202 - - speed: 3.32500004768 - acceleration_s: 0.245883502081 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.484763992 + y: 356.684400349 + z: -31.3445740202 + theta: -1.82638943777 + kappa: -0.0008420464379 + s: 8.3929722023 + dkappa: 0 + } + v: 3.32500004768 + a: 0.245883502081 relative_time: 3.2300000190734863 - theta: -1.82638943777 - accumulated_s: 8.3929722023 -} -adc_trajectory_point { - x: -126.493362471 - y: 356.652523506 - z: -31.3444986399 - - speed: 3.330555439 - acceleration_s: 0.341762154716 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.493362471 + y: 356.652523506 + z: -31.3444986399 + theta: -1.82641776818 + kappa: -0.0008420464379 + s: 8.42627775669 + dkappa: 0 + } + v: 3.330555439 + a: 0.341762154716 relative_time: 3.2400000095367432 - theta: -1.82641776818 - accumulated_s: 8.42627775669 -} -adc_trajectory_point { - x: -126.501961865 - y: 356.620630121 - z: -31.3444468398 - - speed: 3.330555439 - acceleration_s: 0.341762154716 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.501961865 + y: 356.620630121 + z: -31.3444468398 + theta: -1.82646394466 + kappa: -0.0008420464379 + s: 8.45958331108 + dkappa: 0 + } + v: 3.330555439 + a: 0.341762154716 relative_time: 3.25 - theta: -1.82646394466 - accumulated_s: 8.45958331108 -} -adc_trajectory_point { - x: -126.510528434 - y: 356.588665449 - z: -31.3442180054 - - speed: 3.33611106873 - acceleration_s: 0.371268099975 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.510528434 + y: 356.588665449 + z: -31.3442180054 + theta: -1.82645211648 + kappa: -0.0008420464379 + s: 8.49294442177 + dkappa: 0 + } + v: 3.33611106873 + a: 0.371268099975 relative_time: 3.2599999904632568 - theta: -1.82645211648 - accumulated_s: 8.49294442177 -} -adc_trajectory_point { - x: -126.519111453 - y: 356.556708783 - z: -31.3442060826 - - speed: 3.33611106873 - acceleration_s: 0.332246549914 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.519111453 + y: 356.556708783 + z: -31.3442060826 + theta: -1.82648901874 + kappa: -0.0008420464379 + s: 8.52630553246 + dkappa: 0 + } + v: 3.33611106873 + a: 0.332246549914 relative_time: 3.2699999809265137 - theta: -1.82648901874 - accumulated_s: 8.52630553246 -} -adc_trajectory_point { - x: -126.52768735 - y: 356.524684258 - z: -31.3439824898 - - speed: 3.33888888359 - acceleration_s: 0.386355482026 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.52768735 + y: 356.524684258 + z: -31.3439824898 + theta: -1.82653384011 + kappa: -0.0008420464379 + s: 8.55969442134 + dkappa: 0 + } + v: 3.33888888359 + a: 0.386355482026 relative_time: 3.2799999713897705 - theta: -1.82653384011 - accumulated_s: 8.55969442134 -} -adc_trajectory_point { - x: -126.53627215 - y: 356.492655285 - z: -31.3438073667 - - speed: 3.33888888359 - acceleration_s: 0.319144863026 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.53627215 + y: 356.492655285 + z: -31.3438073667 + theta: -1.82661869089 + kappa: -0.0008420464379 + s: 8.59308331014 + dkappa: 0 + } + v: 3.33888888359 + a: 0.319144863026 relative_time: 3.2899999618530273 - theta: -1.82661869089 - accumulated_s: 8.59308331014 -} -adc_trajectory_point { - x: -126.544859835 - y: 356.460560798 - z: -31.3433333337 - - speed: 3.34444451332 - acceleration_s: 0.319144863026 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.544859835 + y: 356.460560798 + z: -31.3433333337 + theta: -1.82668673606 + kappa: -0.0008420464379 + s: 8.62652775524 + dkappa: 0 + } + v: 3.34444451332 + a: 0.319144863026 relative_time: 3.2999999523162842 - theta: -1.82668673606 - accumulated_s: 8.62652775524 -} -adc_trajectory_point { - x: -126.55341621 - y: 356.428520827 - z: -31.3430436049 - - speed: 3.34444451332 - acceleration_s: 0.0399907940701 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.55341621 + y: 356.428520827 + z: -31.3430436049 + theta: -1.82672008051 + kappa: -0.0008420464379 + s: 8.65997220044 + dkappa: 0 + } + v: 3.34444451332 + a: 0.0399907940701 relative_time: 3.309999942779541 - theta: -1.82672008051 - accumulated_s: 8.65997220044 -} -adc_trajectory_point { - x: -126.562034607 - y: 356.396460461 - z: -31.3427345473 - - speed: 3.34722232819 - acceleration_s: 0.0891820167262 - curvature: -0.000803771467601 - curvature_change_rate: 0.00114348455366 +} +trajectory_point { + path_point { + x: -126.562034607 + y: 356.396460461 + z: -31.3427345473 + theta: -1.82678882025 + kappa: -0.000803771467601 + s: 8.69344442364 + dkappa: 0.00114348455366 + } + v: 3.34722232819 + a: 0.0891820167262 relative_time: 3.3199999332427979 - theta: -1.82678882025 - accumulated_s: 8.69344442364 -} -adc_trajectory_point { - x: -126.570648927 - y: 356.364378675 - z: -31.3422306031 - - speed: 3.34722232819 - acceleration_s: 0.121640972454 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.570648927 + y: 356.364378675 + z: -31.3422306031 + theta: -1.8268125683 + kappa: -0.000803771467601 + s: 8.72691664694 + dkappa: 0 + } + v: 3.34722232819 + a: 0.121640972454 relative_time: 3.3300001621246338 - theta: -1.8268125683 - accumulated_s: 8.72691664694 -} -adc_trajectory_point { - x: -126.579282816 - y: 356.332271847 - z: -31.3416289231 - - speed: 3.3527777195 - acceleration_s: 0.180193809259 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.579282816 + y: 356.332271847 + z: -31.3416289231 + theta: -1.82681842755 + kappa: -0.000803771467601 + s: 8.76044442414 + dkappa: 0 + } + v: 3.3527777195 + a: 0.180193809259 relative_time: 3.3400001525878906 - theta: -1.82681842755 - accumulated_s: 8.76044442414 -} -adc_trajectory_point { - x: -126.587904617 - y: 356.300163992 - z: -31.3409582535 - - speed: 3.3527777195 - acceleration_s: 0.105942443261 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.587904617 + y: 356.300163992 + z: -31.3409582535 + theta: -1.82683405334 + kappa: -0.000803771467601 + s: 8.79397220134 + dkappa: 0 + } + v: 3.3527777195 + a: 0.105942443261 relative_time: 3.3500001430511475 - theta: -1.82683405334 - accumulated_s: 8.79397220134 -} -adc_trajectory_point { - x: -126.596606582 - y: 356.268053779 - z: -31.3404062809 - - speed: 3.36111116409 - acceleration_s: 0.105942443261 - curvature: -0.00076549651643 - curvature_change_rate: 0.00113875885986 +} +trajectory_point { + path_point { + x: -126.596606582 + y: 356.268053779 + z: -31.3404062809 + theta: -1.82687475275 + kappa: -0.00076549651643 + s: 8.82758331304 + dkappa: 0.00113875885986 + } + v: 3.36111116409 + a: 0.105942443261 relative_time: 3.3600001335144043 - theta: -1.82687475275 - accumulated_s: 8.82758331304 -} -adc_trajectory_point { - x: -126.605334888 - y: 356.23593129 - z: -31.339665141 - - speed: 3.36111116409 - acceleration_s: 0.174192509194 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.605334888 + y: 356.23593129 + z: -31.339665141 + theta: -1.8269203204 + kappa: -0.00076549651643 + s: 8.86119442464 + dkappa: 0 + } + v: 3.36111116409 + a: 0.174192509194 relative_time: 3.3700001239776611 - theta: -1.8269203204 - accumulated_s: 8.86119442464 -} -adc_trajectory_point { - x: -126.614117099 - y: 356.203813035 - z: -31.3390399422 - - speed: 3.36944437027 - acceleration_s: 0.175419474684 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.614117099 + y: 356.203813035 + z: -31.3390399422 + theta: -1.82693997226 + kappa: -0.00076549651643 + s: 8.89488886834 + dkappa: 0 + } + v: 3.36944437027 + a: 0.175419474684 relative_time: 3.380000114440918 - theta: -1.82693997226 - accumulated_s: 8.89488886834 -} -adc_trajectory_point { - x: -126.622915637 - y: 356.171656799 - z: -31.3382517239 - - speed: 3.36944437027 - acceleration_s: 0.255379637482 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.622915637 + y: 356.171656799 + z: -31.3382517239 + theta: -1.82698160888 + kappa: -0.00076549651643 + s: 8.92858331204 + dkappa: 0 + } + v: 3.36944437027 + a: 0.255379637482 relative_time: 3.3900001049041748 - theta: -1.82698160888 - accumulated_s: 8.92858331204 -} -adc_trajectory_point { - x: -126.622915637 - y: 356.171656799 - z: -31.3382517239 - - speed: 3.37222218513 - acceleration_s: 0.255379637482 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.622915637 + y: 356.171656799 + z: -31.3382517239 + theta: -1.82698160888 + kappa: -0.00076549651643 + s: 8.96230553384 + dkappa: 0 + } + v: 3.37222218513 + a: 0.255379637482 relative_time: 3.3900001049041748 - theta: -1.82698160888 - accumulated_s: 8.96230553384 -} -adc_trajectory_point { - x: -126.640551366 - y: 356.10725683 - z: -31.3369481983 - - speed: 3.37222218513 - acceleration_s: 0.416432213131 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.640551366 + y: 356.10725683 + z: -31.3369481983 + theta: -1.82701748655 + kappa: -0.00076549651643 + s: 8.99602775574 + dkappa: 0 + } + v: 3.37222218513 + a: 0.416432213131 relative_time: 3.4100000858306885 - theta: -1.82701748655 - accumulated_s: 8.99602775574 -} -adc_trajectory_point { - x: -126.649407871 - y: 356.075053046 - z: -31.3362821704 - - speed: 3.37222218513 - acceleration_s: 0.18251066419 - curvature: -0.000727221583477 - curvature_change_rate: 0.00113500626151 +} +trajectory_point { + path_point { + x: -126.649407871 + y: 356.075053046 + z: -31.3362821704 + theta: -1.82707758232 + kappa: -0.000727221583477 + s: 9.02974997764 + dkappa: 0.00113500626151 + } + v: 3.37222218513 + a: 0.18251066419 relative_time: 3.4200000762939453 - theta: -1.82707758232 - accumulated_s: 9.02974997764 -} -adc_trajectory_point { - x: -126.658247953 - y: 356.042762856 - z: -31.33576738 - - speed: 3.37222218513 - acceleration_s: 0.365772374337 - curvature: -0.000727221583477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.658247953 + y: 356.042762856 + z: -31.33576738 + theta: -1.82712424605 + kappa: -0.000727221583477 + s: 9.06347219944 + dkappa: 0 + } + v: 3.37222218513 + a: 0.365772374337 relative_time: 3.4300000667572021 - theta: -1.82712424605 - accumulated_s: 9.06347219944 -} -adc_trajectory_point { - x: -126.667064499 - y: 356.010471259 - z: -31.3352754069 - - speed: 3.37777781487 - acceleration_s: 0.231852483685 - curvature: -0.00068894666783 - curvature_change_rate: 0.00113313893763 +} +trajectory_point { + path_point { + x: -126.667064499 + y: 356.010471259 + z: -31.3352754069 + theta: -1.8271772763 + kappa: -0.00068894666783 + s: 9.09724997764 + dkappa: 0.00113313893763 + } + v: 3.37777781487 + a: 0.231852483685 relative_time: 3.440000057220459 - theta: -1.8271772763 - accumulated_s: 9.09724997764 -} -adc_trajectory_point { - x: -126.667064499 - y: 356.010471259 - z: -31.3352754069 - - speed: 3.37777781487 - acceleration_s: 0.231852483685 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.667064499 + y: 356.010471259 + z: -31.3352754069 + theta: -1.8271772763 + kappa: -0.00068894666783 + s: 9.13102775574 + dkappa: 0 + } + v: 3.37777781487 + a: 0.231852483685 relative_time: 3.440000057220459 - theta: -1.8271772763 - accumulated_s: 9.13102775574 -} -adc_trajectory_point { - x: -126.684674625 - y: 355.945731248 - z: -31.3343479773 - - speed: 3.3833334446 - acceleration_s: 0.351494436829 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.684674625 + y: 355.945731248 + z: -31.3343479773 + theta: -1.82731511949 + kappa: -0.00068894666783 + s: 9.16486109014 + dkappa: 0 + } + v: 3.3833334446 + a: 0.351494436829 relative_time: 3.4600000381469727 - theta: -1.82731511949 - accumulated_s: 9.16486109014 -} -adc_trajectory_point { - x: -126.693424055 - y: 355.913307342 - z: -31.3340699114 - - speed: 3.3833334446 - acceleration_s: 0.289788923925 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.693424055 + y: 355.913307342 + z: -31.3340699114 + theta: -1.82734949638 + kappa: -0.00068894666783 + s: 9.19869442464 + dkappa: 0 + } + v: 3.3833334446 + a: 0.289788923925 relative_time: 3.4700000286102295 - theta: -1.82734949638 - accumulated_s: 9.19869442464 -} -adc_trajectory_point { - x: -126.702200971 - y: 355.88083369 - z: -31.3338288246 - - speed: 3.38888883591 - acceleration_s: 0.398475929312 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.702200971 + y: 355.88083369 + z: -31.3338288246 + theta: -1.82744159828 + kappa: -0.00068894666783 + s: 9.23258331304 + dkappa: 0 + } + v: 3.38888883591 + a: 0.398475929312 relative_time: 3.4800000190734863 - theta: -1.82744159828 - accumulated_s: 9.23258331304 -} -adc_trajectory_point { - x: -126.710930873 - y: 355.84831332 - z: -31.3336686827 - - speed: 3.38888883591 - acceleration_s: 0.348416867207 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.710930873 + y: 355.84831332 + z: -31.3336686827 + theta: -1.82750114409 + kappa: -0.00068894666783 + s: 9.26647220134 + dkappa: 0 + } + v: 3.38888883591 + a: 0.348416867207 relative_time: 3.4900000095367432 - theta: -1.82750114409 - accumulated_s: 9.26647220134 -} -adc_trajectory_point { - x: -126.719671587 - y: 355.815735623 - z: -31.3335086247 - - speed: 3.3972222805 - acceleration_s: 0.348416867207 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.719671587 + y: 355.815735623 + z: -31.3335086247 + theta: -1.82756009136 + kappa: -0.00068894666783 + s: 9.30044442414 + dkappa: 0 + } + v: 3.3972222805 + a: 0.348416867207 relative_time: 3.5 - theta: -1.82756009136 - accumulated_s: 9.30044442414 -} -adc_trajectory_point { - x: -126.728400714 - y: 355.783148232 - z: -31.3335562842 - - speed: 3.3972222805 - acceleration_s: 0.366865734413 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.728400714 + y: 355.783148232 + z: -31.3335562842 + theta: -1.82763237866 + kappa: -0.00068894666783 + s: 9.33441664694 + dkappa: 0 + } + v: 3.3972222805 + a: 0.366865734413 relative_time: 3.5099999904632568 - theta: -1.82763237866 - accumulated_s: 9.33441664694 -} -adc_trajectory_point { - x: -126.737119489 - y: 355.750478834 - z: -31.3335927948 - - speed: 3.40000009537 - acceleration_s: 0.398196786697 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.737119489 + y: 355.750478834 + z: -31.3335927948 + theta: -1.8276711613 + kappa: -0.00068894666783 + s: 9.36841664794 + dkappa: 0 + } + v: 3.40000009537 + a: 0.398196786697 relative_time: 3.5199999809265137 - theta: -1.8276711613 - accumulated_s: 9.36841664794 -} -adc_trajectory_point { - x: -126.745890392 - y: 355.717802627 - z: -31.3338405546 - - speed: 3.40000009537 - acceleration_s: 0.407056699459 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.745890392 + y: 355.717802627 + z: -31.3338405546 + theta: -1.82776593486 + kappa: -0.00068894666783 + s: 9.40241664884 + dkappa: 0 + } + v: 3.40000009537 + a: 0.407056699459 relative_time: 3.5299999713897705 - theta: -1.82776593486 - accumulated_s: 9.40241664884 -} -adc_trajectory_point { - x: -126.754648152 - y: 355.685051341 - z: -31.3340082122 - - speed: 3.40833330154 - acceleration_s: 0.462455457942 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.754648152 + y: 355.685051341 + z: -31.3340082122 + theta: -1.8278023492 + kappa: -0.00068894666783 + s: 9.43649998184 + dkappa: 0 + } + v: 3.40833330154 + a: 0.462455457942 relative_time: 3.5399999618530273 - theta: -1.8278023492 - accumulated_s: 9.43649998184 -} -adc_trajectory_point { - x: -126.763448495 - y: 355.652292972 - z: -31.3342609107 - - speed: 3.40833330154 - acceleration_s: 0.381562232842 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.763448495 + y: 355.652292972 + z: -31.3342609107 + theta: -1.82787046192 + kappa: -0.00068894666783 + s: 9.47058331494 + dkappa: 0 + } + v: 3.40833330154 + a: 0.381562232842 relative_time: 3.5499999523162842 - theta: -1.82787046192 - accumulated_s: 9.47058331494 -} -adc_trajectory_point { - x: -126.772282738 - y: 355.619491568 - z: -31.3345955834 - - speed: 3.41666674614 - acceleration_s: 0.410086796217 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.772282738 + y: 355.619491568 + z: -31.3345955834 + theta: -1.82795142686 + kappa: -0.00068894666783 + s: 9.50474998234 + dkappa: 0 + } + v: 3.41666674614 + a: 0.410086796217 relative_time: 3.559999942779541 - theta: -1.82795142686 - accumulated_s: 9.50474998234 -} -adc_trajectory_point { - x: -126.781133488 - y: 355.586678912 - z: -31.3350851275 - - speed: 3.41666674614 - acceleration_s: 0.35893928034 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.781133488 + y: 355.586678912 + z: -31.3350851275 + theta: -1.8280057622 + kappa: -0.00068894666783 + s: 9.53891664984 + dkappa: 0 + } + v: 3.41666674614 + a: 0.35893928034 relative_time: 3.5699999332427979 - theta: -1.8280057622 - accumulated_s: 9.53891664984 -} -adc_trajectory_point { - x: -126.790019684 - y: 355.553830693 - z: -31.335596595 - - speed: 3.42222213745 - acceleration_s: 0.331296594619 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.790019684 + y: 355.553830693 + z: -31.335596595 + theta: -1.82807393538 + kappa: -0.00068894666783 + s: 9.57313887124 + dkappa: 0 + } + v: 3.42222213745 + a: 0.331296594619 relative_time: 3.5800001621246338 - theta: -1.82807393538 - accumulated_s: 9.57313887124 -} -adc_trajectory_point { - x: -126.798896547 - y: 355.520951207 - z: -31.3360372046 - - speed: 3.42222213745 - acceleration_s: 0.276233157637 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.798896547 + y: 355.520951207 + z: -31.3360372046 + theta: -1.82808393272 + kappa: -0.00068894666783 + s: 9.60736109254 + dkappa: 0 + } + v: 3.42222213745 + a: 0.276233157637 relative_time: 3.5900001525878906 - theta: -1.82808393272 - accumulated_s: 9.60736109254 -} -adc_trajectory_point { - x: -126.807794633 - y: 355.48805057 - z: -31.3366070502 - - speed: 3.43055558205 - acceleration_s: 0.276233157637 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.807794633 + y: 355.48805057 + z: -31.3366070502 + theta: -1.82810108706 + kappa: -0.00068894666783 + s: 9.64166664844 + dkappa: 0 + } + v: 3.43055558205 + a: 0.276233157637 relative_time: 3.6000001430511475 - theta: -1.82810108706 - accumulated_s: 9.64166664844 -} -adc_trajectory_point { - x: -126.816726871 - y: 355.45512329 - z: -31.3371098014 - - speed: 3.43055558205 - acceleration_s: 0.32429213174 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.816726871 + y: 355.45512329 + z: -31.3371098014 + theta: -1.82814618418 + kappa: -0.00068894666783 + s: 9.67597220424 + dkappa: 0 + } + v: 3.43055558205 + a: 0.32429213174 relative_time: 3.6100001335144043 - theta: -1.82814618418 - accumulated_s: 9.67597220424 -} -adc_trajectory_point { - x: -126.825647108 - y: 355.422181404 - z: -31.3377116378 - - speed: 3.43611121178 - acceleration_s: 0.218353440849 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.825647108 + y: 355.422181404 + z: -31.3377116378 + theta: -1.82816388197 + kappa: -0.00068894666783 + s: 9.71033331634 + dkappa: 0 + } + v: 3.43611121178 + a: 0.218353440849 relative_time: 3.6200001239776611 - theta: -1.82816388197 - accumulated_s: 9.71033331634 -} -adc_trajectory_point { - x: -126.834592031 - y: 355.389185418 - z: -31.3381782286 - - speed: 3.43611121178 - acceleration_s: 0.378146566685 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.834592031 + y: 355.389185418 + z: -31.3381782286 + theta: -1.82820396907 + kappa: -0.00068894666783 + s: 9.74469442844 + dkappa: 0 + } + v: 3.43611121178 + a: 0.378146566685 relative_time: 3.630000114440918 - theta: -1.82820396907 - accumulated_s: 9.74469442844 -} -adc_trajectory_point { - x: -126.843524209 - y: 355.356204879 - z: -31.3388533639 - - speed: 3.44166660309 - acceleration_s: 0.155025798903 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.843524209 + y: 355.356204879 + z: -31.3388533639 + theta: -1.82822069599 + kappa: -0.00068894666783 + s: 9.77911109444 + dkappa: 0 + } + v: 3.44166660309 + a: 0.155025798903 relative_time: 3.6400001049041748 - theta: -1.82822069599 - accumulated_s: 9.77911109444 -} -adc_trajectory_point { - x: -126.843524209 - y: 355.356204879 - z: -31.3388533639 - - speed: 3.44166660309 - acceleration_s: 0.155025798903 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.843524209 + y: 355.356204879 + z: -31.3388533639 + theta: -1.82822069599 + kappa: -0.00068894666783 + s: 9.81352776054 + dkappa: 0 + } + v: 3.44166660309 + a: 0.155025798903 relative_time: 3.6400001049041748 - theta: -1.82822069599 - accumulated_s: 9.81352776054 -} -adc_trajectory_point { - x: -126.843524209 - y: 355.356204879 - z: -31.3388533639 - - speed: 3.45000004768 - acceleration_s: 0.155025798903 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.843524209 + y: 355.356204879 + z: -31.3388533639 + theta: -1.82822069599 + kappa: -0.00068894666783 + s: 9.84802776094 + dkappa: 0 + } + v: 3.45000004768 + a: 0.155025798903 relative_time: 3.6400001049041748 - theta: -1.82822069599 - accumulated_s: 9.84802776094 -} -adc_trajectory_point { - x: -126.870397211 - y: 355.257037275 - z: -31.3403574452 - - speed: 3.45000004768 - acceleration_s: 0.254390886898 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.870397211 + y: 355.257037275 + z: -31.3403574452 + theta: -1.82831717659 + kappa: -0.00068894666783 + s: 9.88252776144 + dkappa: 0 + } + v: 3.45000004768 + a: 0.254390886898 relative_time: 3.6700000762939453 - theta: -1.82831717659 - accumulated_s: 9.88252776144 -} -adc_trajectory_point { - x: -126.879311763 - y: 355.22398288 - z: -31.340970126 - - speed: 3.455555439 - acceleration_s: 0.0126645717709 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.879311763 + y: 355.22398288 + z: -31.340970126 + theta: -1.82833517327 + kappa: -0.00068894666783 + s: 9.91708331584 + dkappa: 0 + } + v: 3.455555439 + a: 0.0126645717709 relative_time: 3.6800000667572021 - theta: -1.82833517327 - accumulated_s: 9.91708331584 -} -adc_trajectory_point { - x: -126.888256094 - y: 355.190846419 - z: -31.3412571475 - - speed: 3.455555439 - acceleration_s: 0.24582949855 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.888256094 + y: 355.190846419 + z: -31.3412571475 + theta: -1.8283773573 + kappa: -0.00068894666783 + s: 9.95163887024 + dkappa: 0 + } + v: 3.455555439 + a: 0.24582949855 relative_time: 3.690000057220459 - theta: -1.8283773573 - accumulated_s: 9.95163887024 -} -adc_trajectory_point { - x: -126.888256094 - y: 355.190846419 - z: -31.3412571475 - - speed: 3.46111106873 - acceleration_s: 0.24582949855 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.888256094 + y: 355.190846419 + z: -31.3412571475 + theta: -1.8283773573 + kappa: -0.00068894666783 + s: 9.98624998094 + dkappa: 0 + } + v: 3.46111106873 + a: 0.24582949855 relative_time: 3.690000057220459 - theta: -1.8283773573 - accumulated_s: 9.98624998094 -} -adc_trajectory_point { - x: -126.906090232 - y: 355.124632865 - z: -31.3422407927 - - speed: 3.46111106873 - acceleration_s: 0.156962958221 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.906090232 + y: 355.124632865 + z: -31.3422407927 + theta: -1.82848761211 + kappa: -0.00068894666783 + s: 10.02086109164 + dkappa: 0 + } + v: 3.46111106873 + a: 0.156962958221 relative_time: 3.7100000381469727 - theta: -1.82848761211 - accumulated_s: 10.02086109164 -} -adc_trajectory_point { - x: -126.914983567 - y: 355.091498265 - z: -31.3426592052 - - speed: 3.46666669846 - acceleration_s: 0.156962958221 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.914983567 + y: 355.091498265 + z: -31.3426592052 + theta: -1.82849070383 + kappa: -0.00068894666783 + s: 10.05552775864 + dkappa: 0 + } + v: 3.46666669846 + a: 0.156962958221 relative_time: 3.7200000286102295 - theta: -1.82849070383 - accumulated_s: 10.05552775864 -} -adc_trajectory_point { - x: -126.923887147 - y: 355.058330606 - z: -31.3429553006 - - speed: 3.46666669846 - acceleration_s: 0.169272815993 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.923887147 + y: 355.058330606 + z: -31.3429553006 + theta: -1.82852467193 + kappa: -0.00068894666783 + s: 10.09019442554 + dkappa: 0 + } + v: 3.46666669846 + a: 0.169272815993 relative_time: 3.7300000190734863 - theta: -1.82852467193 - accumulated_s: 10.09019442554 -} -adc_trajectory_point { - x: -126.932845484 - y: 355.025188265 - z: -31.3433769848 - - speed: 3.47222232819 - acceleration_s: 0.128742064854 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.932845484 + y: 355.025188265 + z: -31.3433769848 + theta: -1.82861436689 + kappa: -0.00068894666783 + s: 10.12491664884 + dkappa: 0 + } + v: 3.47222232819 + a: 0.128742064854 relative_time: 3.7400000095367432 - theta: -1.82861436689 - accumulated_s: 10.12491664884 -} -adc_trajectory_point { - x: -126.94178364 - y: 354.992004229 - z: -31.3436619332 - - speed: 3.47222232819 - acceleration_s: 0.128742064854 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.94178364 + y: 354.992004229 + z: -31.3436619332 + theta: -1.82867596843 + kappa: -0.00068894666783 + s: 10.15963887214 + dkappa: 0 + } + v: 3.47222232819 + a: 0.128742064854 relative_time: 3.75 - theta: -1.82867596843 - accumulated_s: 10.15963887214 -} -adc_trajectory_point { - x: -126.950761742 - y: 354.958826794 - z: -31.3439055979 - - speed: 3.4777777195 - acceleration_s: 0.135960393918 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.950761742 + y: 354.958826794 + z: -31.3439055979 + theta: -1.8287491962 + kappa: -0.00068894666783 + s: 10.19441664934 + dkappa: 0 + } + v: 3.4777777195 + a: 0.135960393918 relative_time: 3.7599999904632568 - theta: -1.8287491962 - accumulated_s: 10.19441664934 -} -adc_trajectory_point { - x: -126.959732795 - y: 354.925645279 - z: -31.3440575274 - - speed: 3.4777777195 - acceleration_s: 0.0921660935908 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.959732795 + y: 354.925645279 + z: -31.3440575274 + theta: -1.82878160535 + kappa: -0.00068894666783 + s: 10.22919442654 + dkappa: 0 + } + v: 3.4777777195 + a: 0.0921660935908 relative_time: 3.7699999809265137 - theta: -1.82878160535 - accumulated_s: 10.22919442654 -} -adc_trajectory_point { - x: -126.968845043 - y: 354.892225725 - z: -31.3443499766 - - speed: 3.4777777195 - acceleration_s: 0.104852912322 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.968845043 + y: 354.892225725 + z: -31.3443499766 + theta: -1.82886115252 + kappa: -0.00068894666783 + s: 10.26397220374 + dkappa: 0 + } + v: 3.4777777195 + a: 0.104852912322 relative_time: 3.7799999713897705 - theta: -1.82886115252 - accumulated_s: 10.26397220374 -} -adc_trajectory_point { - x: -126.977920106 - y: 354.858845057 - z: -31.3445986081 - - speed: 3.48611116409 - acceleration_s: 0.0743572609513 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.977920106 + y: 354.858845057 + z: -31.3445986081 + theta: -1.82888331647 + kappa: -0.00068894666783 + s: 10.29883331534 + dkappa: 0 + } + v: 3.48611116409 + a: 0.0743572609513 relative_time: 3.7899999618530273 - theta: -1.82888331647 - accumulated_s: 10.29883331534 -} -adc_trajectory_point { - x: -126.987026937 - y: 354.825460923 - z: -31.3446845347 - - speed: 3.48611116409 - acceleration_s: 0.0743572609513 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.987026937 + y: 354.825460923 + z: -31.3446845347 + theta: -1.82893094731 + kappa: -0.00068894666783 + s: 10.33369442704 + dkappa: 0 + } + v: 3.48611116409 + a: 0.0743572609513 relative_time: 3.7999999523162842 - theta: -1.82893094731 - accumulated_s: 10.33369442704 -} -adc_trajectory_point { - x: -126.996118589 - y: 354.792068672 - z: -31.344827082 - - speed: 3.48888897896 - acceleration_s: 0.070383169644 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.996118589 + y: 354.792068672 + z: -31.344827082 + theta: -1.82893262628 + kappa: -0.00068894666783 + s: 10.36858331684 + dkappa: 0 + } + v: 3.48888897896 + a: 0.070383169644 relative_time: 3.809999942779541 - theta: -1.82893262628 - accumulated_s: 10.36858331684 -} -adc_trajectory_point { - x: -127.005245278 - y: 354.7586637 - z: -31.3449398251 - - speed: 3.48888897896 - acceleration_s: 0.119709390437 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.005245278 + y: 354.7586637 + z: -31.3449398251 + theta: -1.82897739732 + kappa: -0.00068894666783 + s: 10.40347220664 + dkappa: 0 + } + v: 3.48888897896 + a: 0.119709390437 relative_time: 3.8199999332427979 - theta: -1.82897739732 - accumulated_s: 10.40347220664 -} -adc_trajectory_point { - x: -127.014377668 - y: 354.72526672 - z: -31.3451361712 - - speed: 3.49444437027 - acceleration_s: 0.0751073695378 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.014377668 + y: 354.72526672 + z: -31.3451361712 + theta: -1.82904601912 + kappa: -0.00068894666783 + s: 10.43841665034 + dkappa: 0 + } + v: 3.49444437027 + a: 0.0751073695378 relative_time: 3.8300001621246338 - theta: -1.82904601912 - accumulated_s: 10.43841665034 -} -adc_trajectory_point { - x: -127.023511394 - y: 354.691835324 - z: -31.3451459203 - - speed: 3.49444437027 - acceleration_s: 0.140743091578 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.023511394 + y: 354.691835324 + z: -31.3451459203 + theta: -1.82911105592 + kappa: -0.00068894666783 + s: 10.47336109404 + dkappa: 0 + } + v: 3.49444437027 + a: 0.140743091578 relative_time: 3.8400001525878906 - theta: -1.82911105592 - accumulated_s: 10.47336109404 -} -adc_trajectory_point { - x: -127.032643564 - y: 354.65840443 - z: -31.3451923309 - - speed: 3.49722218513 - acceleration_s: 0.129740223018 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.032643564 + y: 354.65840443 + z: -31.3451923309 + theta: -1.82915697214 + kappa: -0.00068894666783 + s: 10.50833331584 + dkappa: 0 + } + v: 3.49722218513 + a: 0.129740223018 relative_time: 3.8500001430511475 - theta: -1.82915697214 - accumulated_s: 10.50833331584 -} -adc_trajectory_point { - x: -127.041741357 - y: 354.624959016 - z: -31.345202636 - - speed: 3.49722218513 - acceleration_s: 0.0698403466267 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.041741357 + y: 354.624959016 + z: -31.345202636 + theta: -1.82918546224 + kappa: -0.00068894666783 + s: 10.54330553774 + dkappa: 0 + } + v: 3.49722218513 + a: 0.0698403466267 relative_time: 3.8600001335144043 - theta: -1.82918546224 - accumulated_s: 10.54330553774 -} -adc_trajectory_point { - x: -127.050838768 - y: 354.591507994 - z: -31.3452956183 - - speed: 3.49722218513 - acceleration_s: 0.102952163422 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.050838768 + y: 354.591507994 + z: -31.3452956183 + theta: -1.8292184562 + kappa: -0.00068894666783 + s: 10.57827775954 + dkappa: 0 + } + v: 3.49722218513 + a: 0.102952163422 relative_time: 3.8700001239776611 - theta: -1.8292184562 - accumulated_s: 10.57827775954 -} -adc_trajectory_point { - x: -127.059920682 - y: 354.558039646 - z: -31.3453835277 - - speed: 3.49722218513 - acceleration_s: 0.125030207742 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.059920682 + y: 354.558039646 + z: -31.3453835277 + theta: -1.82930011786 + kappa: -0.00068894666783 + s: 10.61324998144 + dkappa: 0 + } + v: 3.49722218513 + a: 0.125030207742 relative_time: 3.880000114440918 - theta: -1.82930011786 - accumulated_s: 10.61324998144 -} -adc_trajectory_point { - x: -127.069007327 - y: 354.524558985 - z: -31.3454027781 - - speed: 3.49722218513 - acceleration_s: 0.100108782099 - curvature: -0.000650671714967 - curvature_change_rate: 0.00109443869554 +} +trajectory_point { + path_point { + x: -127.069007327 + y: 354.524558985 + z: -31.3454027781 + theta: -1.82935923457 + kappa: -0.000650671714967 + s: 10.64822220324 + dkappa: 0.00109443869554 + } + v: 3.49722218513 + a: 0.100108782099 relative_time: 3.8900001049041748 - theta: -1.82935923457 - accumulated_s: 10.64822220324 -} -adc_trajectory_point { - x: -127.069007327 - y: 354.524558985 - z: -31.3454027781 - - speed: 3.49722218513 - acceleration_s: 0.100108782099 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.069007327 + y: 354.524558985 + z: -31.3454027781 + theta: -1.82935923457 + kappa: -0.000650671714967 + s: 10.68319442514 + dkappa: 0 + } + v: 3.49722218513 + a: 0.100108782099 relative_time: 3.8900001049041748 - theta: -1.82935923457 - accumulated_s: 10.68319442514 -} -adc_trajectory_point { - x: -127.087131159 - y: 354.457564805 - z: -31.3453779882 - - speed: 3.49722218513 - acceleration_s: 0.136465245228 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.087131159 + y: 354.457564805 + z: -31.3453779882 + theta: -1.82945501367 + kappa: -0.000650671714967 + s: 10.71816664694 + dkappa: 0 + } + v: 3.49722218513 + a: 0.136465245228 relative_time: 3.9100000858306885 - theta: -1.82945501367 - accumulated_s: 10.71816664694 -} -adc_trajectory_point { - x: -127.09618456 - y: 354.424078302 - z: -31.3453200571 - - speed: 3.49722218513 - acceleration_s: -0.0660130467235 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.09618456 + y: 354.424078302 + z: -31.3453200571 + theta: -1.82948641199 + kappa: -0.000650671714967 + s: 10.75313886884 + dkappa: 0 + } + v: 3.49722218513 + a: -0.0660130467235 relative_time: 3.9200000762939453 - theta: -1.82948641199 - accumulated_s: 10.75313886884 -} -adc_trajectory_point { - x: -127.105212885 - y: 354.390589505 - z: -31.3452071091 - - speed: 3.49722218513 - acceleration_s: -0.0249797199174 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.105212885 + y: 354.390589505 + z: -31.3452071091 + theta: -1.82951068129 + kappa: -0.000650671714967 + s: 10.78811109064 + dkappa: 0 + } + v: 3.49722218513 + a: -0.0249797199174 relative_time: 3.9300000667572021 - theta: -1.82951068129 - accumulated_s: 10.78811109064 -} -adc_trajectory_point { - x: -127.114306368 - y: 354.357115855 - z: -31.3451743815 - - speed: 3.49722218513 - acceleration_s: -0.048503940321 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.114306368 + y: 354.357115855 + z: -31.3451743815 + theta: -1.82959902092 + kappa: -0.000650671714967 + s: 10.82308331254 + dkappa: 0 + } + v: 3.49722218513 + a: -0.048503940321 relative_time: 3.940000057220459 - theta: -1.82959902092 - accumulated_s: 10.82308331254 -} -adc_trajectory_point { - x: -127.114306368 - y: 354.357115855 - z: -31.3451743815 - - speed: 3.5 - acceleration_s: -0.048503940321 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.114306368 + y: 354.357115855 + z: -31.3451743815 + theta: -1.82959902092 + kappa: -0.000650671714967 + s: 10.85808331254 + dkappa: 0 + } + v: 3.5 + a: -0.048503940321 relative_time: 3.940000057220459 - theta: -1.82959902092 - accumulated_s: 10.85808331254 -} -adc_trajectory_point { - x: -127.132468752 - y: 354.29014 - z: -31.3449956318 - - speed: 3.5 - acceleration_s: 0.00437034875301 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.132468752 + y: 354.29014 + z: -31.3449956318 + theta: -1.82967998586 + kappa: -0.000650671714967 + s: 10.89308331254 + dkappa: 0 + } + v: 3.5 + a: 0.00437034875301 relative_time: 3.9600000381469727 - theta: -1.82967998586 - accumulated_s: 10.89308331254 -} -adc_trajectory_point { - x: -127.141546712 - y: 354.256640033 - z: -31.3447698774 - - speed: 3.5 - acceleration_s: 0.0539961257544 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.141546712 + y: 354.256640033 + z: -31.3447698774 + theta: -1.82967703275 + kappa: -0.000650671714967 + s: 10.92808331254 + dkappa: 0 + } + v: 3.5 + a: 0.0539961257544 relative_time: 3.9700000286102295 - theta: -1.82967703275 - accumulated_s: 10.92808331254 -} -adc_trajectory_point { - x: -127.150674473 - y: 354.223174755 - z: -31.3446746515 - - speed: 3.5 - acceleration_s: 0.0166207486735 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.150674473 + y: 354.223174755 + z: -31.3446746515 + theta: -1.82973850988 + kappa: -0.000650671714967 + s: 10.96308331254 + dkappa: 0 + } + v: 3.5 + a: 0.0166207486735 relative_time: 3.9800000190734863 - theta: -1.82973850988 - accumulated_s: 10.96308331254 -} -adc_trajectory_point { - x: -127.159820198 - y: 354.189687125 - z: -31.3445321759 - - speed: 3.50277781487 - acceleration_s: 0.0610884625379 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.159820198 + y: 354.189687125 + z: -31.3445321759 + theta: -1.82976633702 + kappa: -0.000650671714967 + s: 10.99811109064 + dkappa: 0 + } + v: 3.50277781487 + a: 0.0610884625379 relative_time: 3.9900000095367432 - theta: -1.82976633702 - accumulated_s: 10.99811109064 -} -adc_trajectory_point { - x: -127.168969071 - y: 354.156205111 - z: -31.3444438847 - - speed: 3.50277781487 - acceleration_s: 0.0610884625379 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.168969071 + y: 354.156205111 + z: -31.3444438847 + theta: -1.82977832509 + kappa: -0.000650671714967 + s: 11.03313886884 + dkappa: 0 + } + v: 3.50277781487 + a: 0.0610884625379 relative_time: 4 - theta: -1.82977832509 - accumulated_s: 11.03313886884 -} -adc_trajectory_point { - x: -127.178129942 - y: 354.122715923 - z: -31.3441801267 - - speed: 3.50555562973 - acceleration_s: 0.0171917654006 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.178129942 + y: 354.122715923 + z: -31.3441801267 + theta: -1.82979912619 + kappa: -0.000650671714967 + s: 11.06819442514 + dkappa: 0 + } + v: 3.50555562973 + a: 0.0171917654006 relative_time: 4.0099999904632568 - theta: -1.82979912619 - accumulated_s: 11.06819442514 -} -adc_trajectory_point { - x: -127.1872916 - y: 354.08924327 - z: -31.3440388041 - - speed: 3.50555562973 - acceleration_s: -0.0246935139104 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.1872916 + y: 354.08924327 + z: -31.3440388041 + theta: -1.82983598313 + kappa: -0.000650671714967 + s: 11.10324998144 + dkappa: 0 + } + v: 3.50555562973 + a: -0.0246935139104 relative_time: 4.0199999809265137 - theta: -1.82983598313 - accumulated_s: 11.10324998144 -} -adc_trajectory_point { - x: -127.196444175 - y: 354.055745947 - z: -31.343894613 - - speed: 3.50555562973 - acceleration_s: 0.029217316152 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.196444175 + y: 354.055745947 + z: -31.343894613 + theta: -1.82984557377 + kappa: -0.000650671714967 + s: 11.13830553774 + dkappa: 0 + } + v: 3.50555562973 + a: 0.029217316152 relative_time: 4.0299999713897705 - theta: -1.82984557377 - accumulated_s: 11.13830553774 -} -adc_trajectory_point { - x: -127.205629271 - y: 354.022270959 - z: -31.3438157281 - - speed: 3.50555562973 - acceleration_s: 0.0632390704121 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.205629271 + y: 354.022270959 + z: -31.3438157281 + theta: -1.82992024271 + kappa: -0.000650671714967 + s: 11.17336109404 + dkappa: 0 + } + v: 3.50555562973 + a: 0.0632390704121 relative_time: 4.0399999618530273 - theta: -1.82992024271 - accumulated_s: 11.17336109404 -} -adc_trajectory_point { - x: -127.214820714 - y: 353.988772922 - z: -31.343679429 - - speed: 3.5083334446 - acceleration_s: 0.0632390704121 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.214820714 + y: 353.988772922 + z: -31.343679429 + theta: -1.82999209665 + kappa: -0.000650671714967 + s: 11.20844442844 + dkappa: 0 + } + v: 3.5083334446 + a: 0.0632390704121 relative_time: 4.0499999523162842 - theta: -1.82999209665 - accumulated_s: 11.20844442844 -} -adc_trajectory_point { - x: -127.223934396 - y: 353.955248469 - z: -31.3435372906 - - speed: 3.5083334446 - acceleration_s: 0.080489073689 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.223934396 + y: 353.955248469 + z: -31.3435372906 + theta: -1.82998936836 + kappa: -0.000650671714967 + s: 11.24352776294 + dkappa: 0 + } + v: 3.5083334446 + a: 0.080489073689 relative_time: 4.059999942779541 - theta: -1.82998936836 - accumulated_s: 11.24352776294 -} -adc_trajectory_point { - x: -127.233079158 - y: 353.921744536 - z: -31.3434529463 - - speed: 3.51111102104 - acceleration_s: -0.0491628331971 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.233079158 + y: 353.921744536 + z: -31.3434529463 + theta: -1.83003833333 + kappa: -0.000650671714967 + s: 11.27863887314 + dkappa: 0 + } + v: 3.51111102104 + a: -0.0491628331971 relative_time: 4.0699999332427979 - theta: -1.83003833333 - accumulated_s: 11.27863887314 -} -adc_trajectory_point { - x: -127.242215302 - y: 353.888209575 - z: -31.3433400812 - - speed: 3.51111102104 - acceleration_s: 0.125815518791 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.242215302 + y: 353.888209575 + z: -31.3433400812 + theta: -1.83008827199 + kappa: -0.000650671714967 + s: 11.31374998334 + dkappa: 0 + } + v: 3.51111102104 + a: 0.125815518791 relative_time: 4.0800001621246338 - theta: -1.83008827199 - accumulated_s: 11.31374998334 -} -adc_trajectory_point { - x: -127.25133237 - y: 353.854701581 - z: -31.343334713 - - speed: 3.51111102104 - acceleration_s: -0.0753108616618 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.25133237 + y: 353.854701581 + z: -31.343334713 + theta: -1.83012063751 + kappa: -0.000650671714967 + s: 11.34886109354 + dkappa: 0 + } + v: 3.51111102104 + a: -0.0753108616618 relative_time: 4.0900001525878906 - theta: -1.83012063751 - accumulated_s: 11.34886109354 -} -adc_trajectory_point { - x: -127.25133237 - y: 353.854701581 - z: -31.343334713 - - speed: 3.51111102104 - acceleration_s: -0.0753108616618 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.25133237 + y: 353.854701581 + z: -31.343334713 + theta: -1.83012063751 + kappa: -0.000650671714967 + s: 11.38397220374 + dkappa: 0 + } + v: 3.51111102104 + a: -0.0753108616618 relative_time: 4.0900001525878906 - theta: -1.83012063751 - accumulated_s: 11.38397220374 -} -adc_trajectory_point { - x: -127.260465701 - y: 353.821174366 - z: -31.3431319427 - - speed: 3.51111102104 - acceleration_s: 0.0284058578204 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.260465701 + y: 353.821174366 + z: -31.3431319427 + theta: -1.83018895846 + kappa: -0.000650671714967 + s: 11.41908331394 + dkappa: 0 + } + v: 3.51111102104 + a: 0.0284058578204 relative_time: 4.1000001430511475 - theta: -1.83018895846 - accumulated_s: 11.41908331394 -} -adc_trajectory_point { - x: -127.278645517 - y: 353.75417139 - z: -31.3427735092 - - speed: 3.5083334446 - acceleration_s: -0.143244759665 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.278645517 + y: 353.75417139 + z: -31.3427735092 + theta: -1.83033064983 + kappa: -0.000650671714967 + s: 11.45416664844 + dkappa: 0 + } + v: 3.5083334446 + a: -0.143244759665 relative_time: 4.1200001239776611 - theta: -1.83033064983 - accumulated_s: 11.45416664844 -} -adc_trajectory_point { - x: -127.287726602 - y: 353.720680013 - z: -31.3427321464 - - speed: 3.5083334446 - acceleration_s: 0.0137720136515 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.287726602 + y: 353.720680013 + z: -31.3427321464 + theta: -1.83032837069 + kappa: -0.000650671714967 + s: 11.48924998284 + dkappa: 0 + } + v: 3.5083334446 + a: 0.0137720136515 relative_time: 4.130000114440918 - theta: -1.83032837069 - accumulated_s: 11.48924998284 -} -adc_trajectory_point { - x: -127.296827498 - y: 353.687184372 - z: -31.342702006 - - speed: 3.51111102104 - acceleration_s: -0.0666400244512 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.296827498 + y: 353.687184372 + z: -31.342702006 + theta: -1.83040303824 + kappa: -0.000650671714967 + s: 11.52436109304 + dkappa: 0 + } + v: 3.51111102104 + a: -0.0666400244512 relative_time: 4.1400001049041748 - theta: -1.83040303824 - accumulated_s: 11.52436109304 -} -adc_trajectory_point { - x: -127.305958054 - y: 353.653664985 - z: -31.3424840998 - - speed: 3.51111102104 - acceleration_s: 0.154026797915 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.305958054 + y: 353.653664985 + z: -31.3424840998 + theta: -1.83048015605 + kappa: -0.000650671714967 + s: 11.55947220324 + dkappa: 0 + } + v: 3.51111102104 + a: 0.154026797915 relative_time: 4.1500000953674316 - theta: -1.83048015605 - accumulated_s: 11.55947220324 -} -adc_trajectory_point { - x: -127.315100194 - y: 353.620166606 - z: -31.34229057 - - speed: 3.51388883591 - acceleration_s: -0.0498033602618 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.315100194 + y: 353.620166606 + z: -31.34229057 + theta: -1.83052274121 + kappa: -0.000650671714967 + s: 11.59461109164 + dkappa: 0 + } + v: 3.51388883591 + a: -0.0498033602618 relative_time: 4.1600000858306885 - theta: -1.83052274121 - accumulated_s: 11.59461109164 -} -adc_trajectory_point { - x: -127.324251173 - y: 353.586648334 - z: -31.3422872778 - - speed: 3.51388883591 - acceleration_s: 0.162973212394 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.324251173 + y: 353.586648334 + z: -31.3422872778 + theta: -1.83056090677 + kappa: -0.000650671714967 + s: 11.62974997994 + dkappa: 0 + } + v: 3.51388883591 + a: 0.162973212394 relative_time: 4.1700000762939453 - theta: -1.83056090677 - accumulated_s: 11.62974997994 -} -adc_trajectory_point { - x: -127.333418671 - y: 353.553179486 - z: -31.3423312837 - - speed: 3.51111102104 - acceleration_s: -0.141101185711 - curvature: -0.000612396831201 - curvature_change_rate: 0.001090107477 +} +trajectory_point { + path_point { + x: -127.333418671 + y: 353.553179486 + z: -31.3423312837 + theta: -1.83058190642 + kappa: -0.000612396831201 + s: 11.66486109014 + dkappa: 0.001090107477 + } + v: 3.51111102104 + a: -0.141101185711 relative_time: 4.1800000667572021 - theta: -1.83058190642 - accumulated_s: 11.66486109014 -} -adc_trajectory_point { - x: -127.342681013 - y: 353.519700849 - z: -31.3420709325 - - speed: 3.51111102104 - acceleration_s: -0.0517334296119 - curvature: -0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.342681013 + y: 353.519700849 + z: -31.3420709325 + theta: -1.83064560254 + kappa: -0.000612396831201 + s: 11.69997220044 + dkappa: 0 + } + v: 3.51111102104 + a: -0.0517334296119 relative_time: 4.190000057220459 - theta: -1.83064560254 - accumulated_s: 11.69997220044 -} -adc_trajectory_point { - x: -127.342681013 - y: 353.519700849 - z: -31.3420709325 - - speed: 3.5083334446 - acceleration_s: -0.0517334296119 - curvature: -0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.342681013 + y: 353.519700849 + z: -31.3420709325 + theta: -1.83064560254 + kappa: -0.000612396831201 + s: 11.73505553484 + dkappa: 0 + } + v: 3.5083334446 + a: -0.0517334296119 relative_time: 4.190000057220459 - theta: -1.83064560254 - accumulated_s: 11.73505553484 -} -adc_trajectory_point { - x: -127.36116599 - y: 353.452817985 - z: -31.3417495564 - - speed: 3.5083334446 - acceleration_s: -0.0942125079577 - curvature: -0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.36116599 + y: 353.452817985 + z: -31.3417495564 + theta: -1.83073502772 + kappa: -0.000612396831201 + s: 11.77013886924 + dkappa: 0 + } + v: 3.5083334446 + a: -0.0942125079577 relative_time: 4.2100000381469727 - theta: -1.83073502772 - accumulated_s: 11.77013886924 -} -adc_trajectory_point { - x: -127.37042041 - y: 353.419382693 - z: -31.3417761633 - - speed: 3.50555562973 - acceleration_s: -0.0336458274378 - curvature: -0.000574121962009 - curvature_change_rate: 0.00109183459727 +} +trajectory_point { + path_point { + x: -127.37042041 + y: 353.419382693 + z: -31.3417761633 + theta: -1.83074813734 + kappa: -0.000574121962009 + s: 11.80519442554 + dkappa: 0.00109183459727 + } + v: 3.50555562973 + a: -0.0336458274378 relative_time: 4.2200000286102295 - theta: -1.83074813734 - accumulated_s: 11.80519442554 -} -adc_trajectory_point { - x: -127.379685011 - y: 353.385927859 - z: -31.341597436 - - speed: 3.50555562973 - acceleration_s: 0.0668762718841 - curvature: -0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.379685011 + y: 353.385927859 + z: -31.341597436 + theta: -1.8307699959 + kappa: -0.000574121962009 + s: 11.84024998184 + dkappa: 0 + } + v: 3.50555562973 + a: 0.0668762718841 relative_time: 4.2300000190734863 - theta: -1.8307699959 - accumulated_s: 11.84024998184 -} -adc_trajectory_point { - x: -127.38893948 - y: 353.352510714 - z: -31.3415910527 - - speed: 3.50555562973 - acceleration_s: -0.0624050681945 - curvature: -0.00053584710648 - curvature_change_rate: 0.00109183420752 +} +trajectory_point { + path_point { + x: -127.38893948 + y: 353.352510714 + z: -31.3415910527 + theta: -1.83080014569 + kappa: -0.00053584710648 + s: 11.87530553814 + dkappa: 0.00109183420752 + } + v: 3.50555562973 + a: -0.0624050681945 relative_time: 4.2400000095367432 - theta: -1.83080014569 - accumulated_s: 11.87530553814 -} -adc_trajectory_point { - x: -127.38893948 - y: 353.352510714 - z: -31.3415910527 - - speed: 3.50555562973 - acceleration_s: -0.0624050681945 - curvature: -0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.38893948 + y: 353.352510714 + z: -31.3415910527 + theta: -1.83080014569 + kappa: -0.00053584710648 + s: 11.91036109444 + dkappa: 0 + } + v: 3.50555562973 + a: -0.0624050681945 relative_time: 4.2400000095367432 - theta: -1.83080014569 - accumulated_s: 11.91036109444 -} -adc_trajectory_point { - x: -127.407486713 - y: 353.285614588 - z: -31.3412877694 - - speed: 3.50555562973 - acceleration_s: -0.0603550657043 - curvature: -0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.407486713 + y: 353.285614588 + z: -31.3412877694 + theta: -1.83091574367 + kappa: -0.00053584710648 + s: 11.94541665074 + dkappa: 0 + } + v: 3.50555562973 + a: -0.0603550657043 relative_time: 4.2599999904632568 - theta: -1.83091574367 - accumulated_s: 11.94541665074 -} -adc_trajectory_point { - x: -127.41675961 - y: 353.252149643 - z: -31.3411435066 - - speed: 3.50277781487 - acceleration_s: 0.0943058075574 - curvature: -0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.41675961 + y: 353.252149643 + z: -31.3411435066 + theta: -1.83096402222 + kappa: -0.00053584710648 + s: 11.98044442894 + dkappa: 0 + } + v: 3.50277781487 + a: 0.0943058075574 relative_time: 4.2699999809265137 - theta: -1.83096402222 - accumulated_s: 11.98044442894 -} -adc_trajectory_point { - x: -127.425972495 - y: 353.218729213 - z: -31.3410838377 - - speed: 3.50277781487 - acceleration_s: -0.140005243068 - curvature: -0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.425972495 + y: 353.218729213 + z: -31.3410838377 + theta: -1.83097341345 + kappa: -0.00053584710648 + s: 12.01547220704 + dkappa: 0 + } + v: 3.50277781487 + a: -0.140005243068 relative_time: 4.2799999713897705 - theta: -1.83097341345 - accumulated_s: 12.01547220704 -} -adc_trajectory_point { - x: -127.435203826 - y: 353.185267974 - z: -31.3408259097 - - speed: 3.50277781487 - acceleration_s: -0.0260910511436 - curvature: -0.000459297432768 - curvature_change_rate: 0.00218539906777 +} +trajectory_point { + path_point { + x: -127.435203826 + y: 353.185267974 + z: -31.3408259097 + theta: -1.8310217043 + kappa: -0.000459297432768 + s: 12.05049998524 + dkappa: 0.00218539906777 + } + v: 3.50277781487 + a: -0.0260910511436 relative_time: 4.2899999618530273 - theta: -1.8310217043 - accumulated_s: 12.05049998524 -} -adc_trajectory_point { - x: -127.444435751 - y: 353.151844245 - z: -31.3408429427 - - speed: 3.50277781487 - acceleration_s: -0.0616759587855 - curvature: -0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.444435751 + y: 353.151844245 + z: -31.3408429427 + theta: -1.83107682585 + kappa: -0.000459297432768 + s: 12.08552776334 + dkappa: 0 + } + v: 3.50277781487 + a: -0.0616759587855 relative_time: 4.2999999523162842 - theta: -1.83107682585 - accumulated_s: 12.08552776334 -} -adc_trajectory_point { - x: -127.45365022 - y: 353.118401612 - z: -31.3407579828 - - speed: 3.5 - acceleration_s: -0.0203062887987 - curvature: -0.000382747802778 - curvature_change_rate: 0.00218713228543 +} +trajectory_point { + path_point { + x: -127.45365022 + y: 353.118401612 + z: -31.3407579828 + theta: -1.83113331783 + kappa: -0.000382747802778 + s: 12.12052776334 + dkappa: 0.00218713228543 + } + v: 3.5 + a: -0.0203062887987 relative_time: 4.309999942779541 - theta: -1.83113331783 - accumulated_s: 12.12052776334 -} -adc_trajectory_point { - x: -127.462881144 - y: 353.084978017 - z: -31.3406273052 - - speed: 3.5 - acceleration_s: -0.0723565693088 - curvature: -0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.462881144 + y: 353.084978017 + z: -31.3406273052 + theta: -1.83119552366 + kappa: -0.000382747802778 + s: 12.15552776334 + dkappa: 0 + } + v: 3.5 + a: -0.0723565693088 relative_time: 4.3199999332427979 - theta: -1.83119552366 - accumulated_s: 12.15552776334 -} -adc_trajectory_point { - x: -127.462881144 - y: 353.084978017 - z: -31.3406273052 - - speed: 3.50277781487 - acceleration_s: -0.0723565693088 - curvature: -0.000267923397025 - curvature_change_rate: 0.0032780956093 +} +trajectory_point { + path_point { + x: -127.462881144 + y: 353.084978017 + z: -31.3406273052 + theta: -1.83119552366 + kappa: -0.000267923397025 + s: 12.19055554154 + dkappa: 0.0032780956093 + } + v: 3.50277781487 + a: -0.0723565693088 relative_time: 4.3199999332427979 - theta: -1.83119552366 - accumulated_s: 12.19055554154 -} -adc_trajectory_point { - x: -127.481292053 - y: 353.018133317 - z: -31.3403774407 - - speed: 3.50277781487 - acceleration_s: -0.128554803024 - curvature: -0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.481292053 + y: 353.018133317 + z: -31.3403774407 + theta: -1.83126742553 + kappa: -0.000267923397025 + s: 12.22558331964 + dkappa: 0 + } + v: 3.50277781487 + a: -0.128554803024 relative_time: 4.3400001525878906 - theta: -1.83126742553 - accumulated_s: 12.22558331964 -} -adc_trajectory_point { - x: -127.490530961 - y: 352.984730905 - z: -31.3403131105 - - speed: 3.5 - acceleration_s: -0.128554803024 - curvature: -0.00022964861801 - curvature_change_rate: 0.00109356511473 +} +trajectory_point { + path_point { + x: -127.490530961 + y: 352.984730905 + z: -31.3403131105 + theta: -1.83133791977 + kappa: -0.00022964861801 + s: 12.26058331964 + dkappa: 0.00109356511473 + } + v: 3.5 + a: -0.128554803024 relative_time: 4.3500001430511475 - theta: -1.83133791977 - accumulated_s: 12.26058331964 -} -adc_trajectory_point { - x: -127.499761733 - y: 352.951312686 - z: -31.3401267733 - - speed: 3.5 - acceleration_s: 0.00202995199734 - curvature: -0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.499761733 + y: 352.951312686 + z: -31.3401267733 + theta: -1.83139367929 + kappa: -0.00022964861801 + s: 12.29558331964 + dkappa: 0 + } + v: 3.5 + a: 0.00202995199734 relative_time: 4.3600001335144043 - theta: -1.83139367929 - accumulated_s: 12.29558331964 -} -adc_trajectory_point { - x: -127.509002213 - y: 352.917914714 - z: -31.340024651 - - speed: 3.5 - acceleration_s: -0.0230681211466 - curvature: -0.000153099062061 - curvature_change_rate: 0.00218713016998 +} +trajectory_point { + path_point { + x: -127.509002213 + y: 352.917914714 + z: -31.340024651 + theta: -1.83144360265 + kappa: -0.000153099062061 + s: 12.33058331964 + dkappa: 0.00218713016998 + } + v: 3.5 + a: -0.0230681211466 relative_time: 4.3700001239776611 - theta: -1.83144360265 - accumulated_s: 12.33058331964 -} -adc_trajectory_point { - x: -127.518221677 - y: 352.884498307 - z: -31.339929861 - - speed: 3.5 - acceleration_s: 0.064519298669 - curvature: -0.000153099062061 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.518221677 + y: 352.884498307 + z: -31.339929861 + theta: -1.83148658053 + kappa: -0.000153099062061 + s: 12.36558331964 + dkappa: 0 + } + v: 3.5 + a: 0.064519298669 relative_time: 4.380000114440918 - theta: -1.83148658053 - accumulated_s: 12.36558331964 -} -adc_trajectory_point { - x: -127.527448428 - y: 352.851115155 - z: -31.3398054801 - - speed: 3.50277781487 - acceleration_s: -0.103607147081 - curvature: -7.65495273868e-05 - curvature_change_rate: 0.0021853950984 +} +trajectory_point { + path_point { + x: -127.527448428 + y: 352.851115155 + z: -31.3398054801 + theta: -1.83153713873 + kappa: -7.65495273868e-05 + s: 12.40061109784 + dkappa: 0.0021853950984 + } + v: 3.50277781487 + a: -0.103607147081 relative_time: 4.3900001049041748 - theta: -1.83153713873 - accumulated_s: 12.40061109784 -} -adc_trajectory_point { - x: -127.527448428 - y: 352.851115155 - z: -31.3398054801 - - speed: 3.50277781487 - acceleration_s: -0.103607147081 - curvature: -7.65495273868e-05 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.527448428 + y: 352.851115155 + z: -31.3398054801 + theta: -1.83153713873 + kappa: -7.65495273868e-05 + s: 12.43563887594 + dkappa: 0 + } + v: 3.50277781487 + a: -0.103607147081 relative_time: 4.3900001049041748 - theta: -1.83153713873 - accumulated_s: 12.43563887594 -} -adc_trajectory_point { - x: -127.545900064 - y: 352.784346422 - z: -31.33951113 - - speed: 3.50277781487 - acceleration_s: -0.0562023025099 - curvature: 0 - curvature_change_rate: 0.00218539489036 +} +trajectory_point { + path_point { + x: -127.545900064 + y: 352.784346422 + z: -31.33951113 + theta: -1.83166178602 + kappa: 0 + s: 12.47066665414 + dkappa: 0.00218539489036 + } + v: 3.50277781487 + a: -0.0562023025099 relative_time: 4.4100000858306885 - theta: -1.83166178602 - accumulated_s: 12.47066665414 -} -adc_trajectory_point { - x: -127.555063447 - y: 352.750948452 - z: -31.3394007226 - - speed: 3.50277781487 - acceleration_s: -0.0452948144891 - curvature: 0 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.555063447 + y: 352.750948452 + z: -31.3394007226 + theta: -1.83164595044 + kappa: 0 + s: 12.50569443224 + dkappa: 0 + } + v: 3.50277781487 + a: -0.0452948144891 relative_time: 4.4200000762939453 - theta: -1.83164595044 - accumulated_s: 12.50569443224 -} -adc_trajectory_point { - x: -127.564226747 - y: 352.717566443 - z: -31.339252756 - - speed: 3.50277781487 - acceleration_s: -0.10394213781 - curvature: 3.8274763238e-05 - curvature_change_rate: 0.00109269743218 +} +trajectory_point { + path_point { + x: -127.564226747 + y: 352.717566443 + z: -31.339252756 + theta: -1.83168737663 + kappa: 3.8274763238e-05 + s: 12.54072221044 + dkappa: 0.00109269743218 + } + v: 3.50277781487 + a: -0.10394213781 relative_time: 4.4300000667572021 - theta: -1.83168737663 - accumulated_s: 12.54072221044 -} -adc_trajectory_point { - x: -127.573422248 - y: 352.684193594 - z: -31.339159444 - - speed: 3.50277781487 - acceleration_s: -0.0592971113935 - curvature: 3.8274763238e-05 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.573422248 + y: 352.684193594 + z: -31.339159444 + theta: -1.83173225633 + kappa: 3.8274763238e-05 + s: 12.57574998854 + dkappa: 0 + } + v: 3.50277781487 + a: -0.0592971113935 relative_time: 4.440000057220459 - theta: -1.83173225633 - accumulated_s: 12.57574998854 -} -adc_trajectory_point { - x: -127.573422248 - y: 352.684193594 - z: -31.339159444 - - speed: 3.50555562973 - acceleration_s: -0.0592971113935 - curvature: 0.000114824296708 - curvature_change_rate: 0.00218366334914 +} +trajectory_point { + path_point { + x: -127.573422248 + y: 352.684193594 + z: -31.339159444 + theta: -1.83173225633 + kappa: 0.000114824296708 + s: 12.61080554484 + dkappa: 0.00218366334914 + } + v: 3.50555562973 + a: -0.0592971113935 relative_time: 4.440000057220459 - theta: -1.83173225633 - accumulated_s: 12.61080554484 -} -adc_trajectory_point { - x: -127.591775516 - y: 352.617499289 - z: -31.3388572838 - - speed: 3.50555562973 - acceleration_s: -0.10332422624 - curvature: 0.000114824296708 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.591775516 + y: 352.617499289 + z: -31.3388572838 + theta: -1.8317986102 + kappa: 0.000114824296708 + s: 12.64586110114 + dkappa: 0 + } + v: 3.50555562973 + a: -0.10332422624 relative_time: 4.4600000381469727 - theta: -1.8317986102 - accumulated_s: 12.64586110114 -} -adc_trajectory_point { - x: -127.600959198 - y: 352.58413393 - z: -31.3385668267 - - speed: 3.50277781487 - acceleration_s: 0.036427094581 - curvature: 0.000114824296708 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.600959198 + y: 352.58413393 + z: -31.3385668267 + theta: -1.83184783483 + kappa: 0.000114824296708 + s: 12.68088887934 + dkappa: 0 + } + v: 3.50277781487 + a: 0.036427094581 relative_time: 4.4700000286102295 - theta: -1.83184783483 - accumulated_s: 12.68088887934 -} -adc_trajectory_point { - x: -127.610081204 - y: 352.550819193 - z: -31.338401326 - - speed: 3.50277781487 - acceleration_s: -0.220284014485 - curvature: 0.000114824296708 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.610081204 + y: 352.550819193 + z: -31.338401326 + theta: -1.83184542029 + kappa: 0.000114824296708 + s: 12.71591665744 + dkappa: 0 + } + v: 3.50277781487 + a: -0.220284014485 relative_time: 4.4800000190734863 - theta: -1.83184542029 - accumulated_s: 12.71591665744 -} -adc_trajectory_point { - x: -127.619241505 - y: 352.517469776 - z: -31.3382468 - - speed: 3.5 - acceleration_s: 0.0616668466865 - curvature: 0.000153099062061 - curvature_change_rate: 0.00109356472436 +} +trajectory_point { + path_point { + x: -127.619241505 + y: 352.517469776 + z: -31.3382468 + theta: -1.83188878236 + kappa: 0.000153099062061 + s: 12.75091665744 + dkappa: 0.00109356472436 + } + v: 3.5 + a: 0.0616668466865 relative_time: 4.4900000095367432 - theta: -1.83188878236 - accumulated_s: 12.75091665744 -} -adc_trajectory_point { - x: -127.619241505 - y: 352.517469776 - z: -31.3382468 - - speed: 3.5 - acceleration_s: 0.0616668466865 - curvature: 0.000153099062061 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.619241505 + y: 352.517469776 + z: -31.3382468 + theta: -1.83188878236 + kappa: 0.000153099062061 + s: 12.78591665744 + dkappa: 0 + } + v: 3.5 + a: 0.0616668466865 relative_time: 4.4900000095367432 - theta: -1.83188878236 - accumulated_s: 12.78591665744 -} -adc_trajectory_point { - x: -127.637512671 - y: 352.450853478 - z: -31.3376777451 - - speed: 3.49722218513 - acceleration_s: -0.105173996676 - curvature: 0.00022964861801 - curvature_change_rate: 0.00218886738951 +} +trajectory_point { + path_point { + x: -127.637512671 + y: 352.450853478 + z: -31.3376777451 + theta: -1.83190611893 + kappa: 0.00022964861801 + s: 12.82088887934 + dkappa: 0.00218886738951 + } + v: 3.49722218513 + a: -0.105173996676 relative_time: 4.5099999904632568 - theta: -1.83190611893 - accumulated_s: 12.82088887934 -} -adc_trajectory_point { - x: -127.646605363 - y: 352.417550727 - z: -31.3374220422 - - speed: 3.49722218513 - acceleration_s: -0.138525113976 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.646605363 + y: 352.417550727 + z: -31.3374220422 + theta: -1.83194340833 + kappa: 0.00022964861801 + s: 12.85586110114 + dkappa: 0 + } + v: 3.49722218513 + a: -0.138525113976 relative_time: 4.5199999809265137 - theta: -1.83194340833 - accumulated_s: 12.85586110114 -} -adc_trajectory_point { - x: -127.655725274 - y: 352.384269714 - z: -31.3373159245 - - speed: 3.49722218513 - acceleration_s: -0.0892186163574 - curvature: 0.000267923397025 - curvature_change_rate: 0.00109443372452 +} +trajectory_point { + path_point { + x: -127.655725274 + y: 352.384269714 + z: -31.3373159245 + theta: -1.83198817165 + kappa: 0.000267923397025 + s: 12.89083332304 + dkappa: 0.00109443372452 + } + v: 3.49722218513 + a: -0.0892186163574 relative_time: 4.5299999713897705 - theta: -1.83198817165 - accumulated_s: 12.89083332304 -} -adc_trajectory_point { - x: -127.664766556 - y: 352.35097541 - z: -31.3371274434 - - speed: 3.49722218513 - acceleration_s: -0.110796774377 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.664766556 + y: 352.35097541 + z: -31.3371274434 + theta: -1.83197210021 + kappa: 0.000267923397025 + s: 12.92580554484 + dkappa: 0 + } + v: 3.49722218513 + a: -0.110796774377 relative_time: 4.5399999618530273 - theta: -1.83197210021 - accumulated_s: 12.92580554484 -} -adc_trajectory_point { - x: -127.673871586 - y: 352.317713472 - z: -31.3367670989 - - speed: 3.49444437027 - acceleration_s: -0.110796774377 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.673871586 + y: 352.317713472 + z: -31.3367670989 + theta: -1.83203277637 + kappa: 0.000267923397025 + s: 12.96074998854 + dkappa: 0 + } + v: 3.49444437027 + a: -0.110796774377 relative_time: 4.5499999523162842 - theta: -1.83203277637 - accumulated_s: 12.96074998854 -} -adc_trajectory_point { - x: -127.682924838 - y: 352.284454014 - z: -31.3363768291 - - speed: 3.49444437027 - acceleration_s: -0.164934767576 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.682924838 + y: 352.284454014 + z: -31.3363768291 + theta: -1.83203575236 + kappa: 0.000267923397025 + s: 12.99569443224 + dkappa: 0 + } + v: 3.49444437027 + a: -0.164934767576 relative_time: 4.559999942779541 - theta: -1.83203575236 - accumulated_s: 12.99569443224 -} -adc_trajectory_point { - x: -127.69197512 - y: 352.251221667 - z: -31.3362560766 - - speed: 3.49444437027 - acceleration_s: -0.168375974979 - curvature: 0.000344473001902 - curvature_change_rate: 0.0021906087711 +} +trajectory_point { + path_point { + x: -127.69197512 + y: 352.251221667 + z: -31.3362560766 + theta: -1.83206012701 + kappa: 0.000344473001902 + s: 13.03063887594 + dkappa: 0.0021906087711 + } + v: 3.49444437027 + a: -0.168375974979 relative_time: 4.5699999332427979 - theta: -1.83206012701 - accumulated_s: 13.03063887594 -} -adc_trajectory_point { - x: -127.701075862 - y: 352.217973001 - z: -31.3358970415 - - speed: 3.49444437027 - acceleration_s: 0.00372759671715 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.701075862 + y: 352.217973001 + z: -31.3358970415 + theta: -1.83212536817 + kappa: 0.000344473001902 + s: 13.06558331964 + dkappa: 0 + } + v: 3.49444437027 + a: 0.00372759671715 relative_time: 4.5800001621246338 - theta: -1.83212536817 - accumulated_s: 13.06558331964 -} -adc_trajectory_point { - x: -127.701075862 - y: 352.217973001 - z: -31.3358970415 - - speed: 3.49444437027 - acceleration_s: 0.00372759671715 - curvature: 0.000382747802778 - curvature_change_rate: 0.00109530434086 +} +trajectory_point { + path_point { + x: -127.701075862 + y: 352.217973001 + z: -31.3358970415 + theta: -1.83212536817 + kappa: 0.000382747802778 + s: 13.10052776334 + dkappa: 0.00109530434086 + } + v: 3.49444437027 + a: 0.00372759671715 relative_time: 4.5800001621246338 - theta: -1.83212536817 - accumulated_s: 13.10052776334 -} -adc_trajectory_point { - x: -127.719167513 - y: 352.151519105 - z: -31.3352947813 - - speed: 3.49444437027 - acceleration_s: -0.0288038778254 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.719167513 + y: 352.151519105 + z: -31.3352947813 + theta: -1.83212690918 + kappa: 0.000382747802778 + s: 13.13547220704 + dkappa: 0 + } + v: 3.49444437027 + a: -0.0288038778254 relative_time: 4.6000001430511475 - theta: -1.83212690918 - accumulated_s: 13.13547220704 -} -adc_trajectory_point { - x: -127.728217748 - y: 352.118314562 - z: -31.3352246499 - - speed: 3.49444437027 - acceleration_s: -0.11820502083 - curvature: 0.000459297432768 - curvature_change_rate: 0.00219060948978 +} +trajectory_point { + path_point { + x: -127.728217748 + y: 352.118314562 + z: -31.3352246499 + theta: -1.83216226657 + kappa: 0.000459297432768 + s: 13.17041665074 + dkappa: 0.00219060948978 + } + v: 3.49444437027 + a: -0.11820502083 relative_time: 4.6100001335144043 - theta: -1.83216226657 - accumulated_s: 13.17041665074 -} -adc_trajectory_point { - x: -127.737284009 - y: 352.085089415 - z: -31.3348650029 - - speed: 3.49444437027 - acceleration_s: -0.0531890101833 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.737284009 + y: 352.085089415 + z: -31.3348650029 + theta: -1.83218983511 + kappa: 0.000459297432768 + s: 13.20536109444 + dkappa: 0 + } + v: 3.49444437027 + a: -0.0531890101833 relative_time: 4.6200001239776611 - theta: -1.83218983511 - accumulated_s: 13.20536109444 -} -adc_trajectory_point { - x: -127.746316119 - y: 352.051884421 - z: -31.3347293595 - - speed: 3.49444437027 - acceleration_s: -0.0470023655957 - curvature: 0.00053584710648 - curvature_change_rate: 0.00219061074096 +} +trajectory_point { + path_point { + x: -127.746316119 + y: 352.051884421 + z: -31.3347293595 + theta: -1.83219678742 + kappa: 0.00053584710648 + s: 13.24030553814 + dkappa: 0.00219061074096 + } + v: 3.49444437027 + a: -0.0470023655957 relative_time: 4.630000114440918 - theta: -1.83219678742 - accumulated_s: 13.24030553814 -} -adc_trajectory_point { - x: -127.755379258 - y: 352.018669332 - z: -31.3345220741 - - speed: 3.49444437027 - acceleration_s: -0.00745154333254 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.755379258 + y: 352.018669332 + z: -31.3345220741 + theta: -1.83221628957 + kappa: 0.00053584710648 + s: 13.27524998184 + dkappa: 0 + } + v: 3.49444437027 + a: -0.00745154333254 relative_time: 4.6400001049041748 - theta: -1.83221628957 - accumulated_s: 13.27524998184 -} -adc_trajectory_point { - x: -127.764413044 - y: 351.985459773 - z: -31.3343663076 - - speed: 3.49444437027 - acceleration_s: -0.0239191625422 - curvature: 0.000574121962009 - curvature_change_rate: 0.00109530590484 +} +trajectory_point { + path_point { + x: -127.764413044 + y: 351.985459773 + z: -31.3343663076 + theta: -1.83220767276 + kappa: 0.000574121962009 + s: 13.31019442554 + dkappa: 0.00109530590484 + } + v: 3.49444437027 + a: -0.0239191625422 relative_time: 4.6500000953674316 - theta: -1.83220767276 - accumulated_s: 13.31019442554 -} -adc_trajectory_point { - x: -127.773489504 - y: 351.95224056 - z: -31.3341953186 - - speed: 3.49444437027 - acceleration_s: -0.00434879322893 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.773489504 + y: 351.95224056 + z: -31.3341953186 + theta: -1.83224257355 + kappa: 0.000574121962009 + s: 13.34513886924 + dkappa: 0 + } + v: 3.49444437027 + a: -0.00434879322893 relative_time: 4.6600000858306885 - theta: -1.83224257355 - accumulated_s: 13.34513886924 -} -adc_trajectory_point { - x: -127.782530946 - y: 351.919025975 - z: -31.3340980159 - - speed: 3.49722218513 - acceleration_s: 0.0305157160983 - curvature: 0.000612396831201 - curvature_change_rate: 0.00109443630304 +} +trajectory_point { + path_point { + x: -127.782530946 + y: 351.919025975 + z: -31.3340980159 + theta: -1.8322637484 + kappa: 0.000612396831201 + s: 13.38011109114 + dkappa: 0.00109443630304 + } + v: 3.49722218513 + a: 0.0305157160983 relative_time: 4.6700000762939453 - theta: -1.8322637484 - accumulated_s: 13.38011109114 -} -adc_trajectory_point { - x: -127.791579028 - y: 351.885819526 - z: -31.3340129573 - - speed: 3.49722218513 - acceleration_s: -0.0801850819625 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.791579028 + y: 351.885819526 + z: -31.3340129573 + theta: -1.8322688425 + kappa: 0.000612396831201 + s: 13.41508331304 + dkappa: 0 + } + v: 3.49722218513 + a: -0.0801850819625 relative_time: 4.6800000667572021 - theta: -1.8322688425 - accumulated_s: 13.41508331304 -} -adc_trajectory_point { - x: -127.800627977 - y: 351.852610815 - z: -31.3338932684 - - speed: 3.49722218513 - acceleration_s: -0.0318863733843 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.800627977 + y: 351.852610815 + z: -31.3338932684 + theta: -1.83229720076 + kappa: 0.000612396831201 + s: 13.45005553484 + dkappa: 0 + } + v: 3.49722218513 + a: -0.0318863733843 relative_time: 4.690000057220459 - theta: -1.83229720076 - accumulated_s: 13.45005553484 -} -adc_trajectory_point { - x: -127.800627977 - y: 351.852610815 - z: -31.3338932684 - - speed: 3.49722218513 - acceleration_s: -0.0318863733843 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.800627977 + y: 351.852610815 + z: -31.3338932684 + theta: -1.83229720076 + kappa: 0.000612396831201 + s: 13.48502775674 + dkappa: 0 + } + v: 3.49722218513 + a: -0.0318863733843 relative_time: 4.690000057220459 - theta: -1.83229720076 - accumulated_s: 13.48502775674 -} -adc_trajectory_point { - x: -127.818702223 - y: 351.786185824 - z: -31.3336895285 - - speed: 3.49722218513 - acceleration_s: 0.0986010473449 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.818702223 + y: 351.786185824 + z: -31.3336895285 + theta: -1.83228232381 + kappa: 0.000612396831201 + s: 13.51999997854 + dkappa: 0 + } + v: 3.49722218513 + a: 0.0986010473449 relative_time: 4.7100000381469727 - theta: -1.83228232381 - accumulated_s: 13.51999997854 -} -adc_trajectory_point { - x: -127.827759872 - y: 351.752971154 - z: -31.3336588815 - - speed: 3.49722218513 - acceleration_s: 0.0382934250362 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.827759872 + y: 351.752971154 + z: -31.3336588815 + theta: -1.83229801983 + kappa: 0.000612396831201 + s: 13.55497220044 + dkappa: 0 + } + v: 3.49722218513 + a: 0.0382934250362 relative_time: 4.7200000286102295 - theta: -1.83229801983 - accumulated_s: 13.55497220044 -} -adc_trajectory_point { - x: -127.836847606 - y: 351.719759317 - z: -31.3336090865 - - speed: 3.49444437027 - acceleration_s: 0.081440974817 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.836847606 + y: 351.719759317 + z: -31.3336090865 + theta: -1.83234181352 + kappa: 0.000612396831201 + s: 13.58991664414 + dkappa: 0 + } + v: 3.49444437027 + a: 0.081440974817 relative_time: 4.7300000190734863 - theta: -1.83234181352 - accumulated_s: 13.58991664414 -} -adc_trajectory_point { - x: -127.845952569 - y: 351.686565803 - z: -31.333643714 - - speed: 3.49444437027 - acceleration_s: 0.0209780932665 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.845952569 + y: 351.686565803 + z: -31.333643714 + theta: -1.83239281915 + kappa: 0.000612396831201 + s: 13.62486108784 + dkappa: 0 + } + v: 3.49444437027 + a: 0.0209780932665 relative_time: 4.7400000095367432 - theta: -1.83239281915 - accumulated_s: 13.62486108784 -} -adc_trajectory_point { - x: -127.855011926 - y: 351.653337572 - z: -31.3334456477 - - speed: 3.4916665554 - acceleration_s: 0.0209780932665 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.855011926 + y: 351.653337572 + z: -31.3334456477 + theta: -1.83232234836 + kappa: 0.000612396831201 + s: 13.65977775334 + dkappa: 0 + } + v: 3.4916665554 + a: 0.0209780932665 relative_time: 4.75 - theta: -1.83232234836 - accumulated_s: 13.65977775334 -} -adc_trajectory_point { - x: -127.864136526 - y: 351.620136288 - z: -31.3333633449 - - speed: 3.4916665554 - acceleration_s: 0.0100937873768 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.864136526 + y: 351.620136288 + z: -31.3333633449 + theta: -1.83233665346 + kappa: 0.000612396831201 + s: 13.69469441894 + dkappa: 0 + } + v: 3.4916665554 + a: 0.0100937873768 relative_time: 4.7599999904632568 - theta: -1.83233665346 - accumulated_s: 13.69469441894 -} -adc_trajectory_point { - x: -127.873235968 - y: 351.586976341 - z: -31.3333423594 - - speed: 3.4916665554 - acceleration_s: 0.0576327186021 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.873235968 + y: 351.586976341 + z: -31.3333423594 + theta: -1.83235880506 + kappa: 0.000612396831201 + s: 13.72961108444 + dkappa: 0 + } + v: 3.4916665554 + a: 0.0576327186021 relative_time: 4.7699999809265137 - theta: -1.83235880506 - accumulated_s: 13.72961108444 -} -adc_trajectory_point { - x: -127.882284648 - y: 351.553899762 - z: -31.3333647577 - - speed: 3.4916665554 - acceleration_s: 0.021545202312 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.882284648 + y: 351.553899762 + z: -31.3333647577 + theta: -1.83235729889 + kappa: 0.000612396831201 + s: 13.76452775004 + dkappa: 0 + } + v: 3.4916665554 + a: 0.021545202312 relative_time: 4.7799999713897705 - theta: -1.83235729889 - accumulated_s: 13.76452775004 -} -adc_trajectory_point { - x: -127.891345597 - y: 351.520796852 - z: -31.3332146611 - - speed: 3.4916665554 - acceleration_s: 0.0539346592736 - curvature: 0.000574121962009 - curvature_change_rate: -0.00109617767289 +} +trajectory_point { + path_point { + x: -127.891345597 + y: 351.520796852 + z: -31.3332146611 + theta: -1.83232611012 + kappa: 0.000574121962009 + s: 13.79944441554 + dkappa: -0.00109617767289 + } + v: 3.4916665554 + a: 0.0539346592736 relative_time: 4.7899999618530273 - theta: -1.83232611012 - accumulated_s: 13.79944441554 -} -adc_trajectory_point { - x: -127.900472174 - y: 351.487701684 - z: -31.3330173064 - - speed: 3.4916665554 - acceleration_s: 0.10874125944 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.900472174 + y: 351.487701684 + z: -31.3330173064 + theta: -1.83232937515 + kappa: 0.000574121962009 + s: 13.83436108114 + dkappa: 0 + } + v: 3.4916665554 + a: 0.10874125944 relative_time: 4.7999999523162842 - theta: -1.83232937515 - accumulated_s: 13.83436108114 -} -adc_trajectory_point { - x: -127.909547697 - y: 351.454601005 - z: -31.3329471787 - - speed: 3.48888897896 - acceleration_s: 0.0580133361244 - curvature: 0.00053584710648 - curvature_change_rate: -0.00109704997091 +} +trajectory_point { + path_point { + x: -127.909547697 + y: 351.454601005 + z: -31.3329471787 + theta: -1.83227496228 + kappa: 0.00053584710648 + s: 13.86924997094 + dkappa: -0.00109704997091 + } + v: 3.48888897896 + a: 0.0580133361244 relative_time: 4.809999942779541 - theta: -1.83227496228 - accumulated_s: 13.86924997094 -} -adc_trajectory_point { - x: -127.918651362 - y: 351.421491066 - z: -31.3328811266 - - speed: 3.48888897896 - acceleration_s: 0.126041599598 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.918651362 + y: 351.421491066 + z: -31.3328811266 + theta: -1.83228128078 + kappa: 0.00053584710648 + s: 13.90413886074 + dkappa: 0 + } + v: 3.48888897896 + a: 0.126041599598 relative_time: 4.8199999332427979 - theta: -1.83228128078 - accumulated_s: 13.90413886074 -} -adc_trajectory_point { - x: -127.927735111 - y: 351.3883593 - z: -31.3327781893 - - speed: 3.48888897896 - acceleration_s: 0.103582712995 - curvature: 0.000497572263703 - curvature_change_rate: -0.0010970496054 +} +trajectory_point { + path_point { + x: -127.927735111 + y: 351.3883593 + z: -31.3327781893 + theta: -1.83225309008 + kappa: 0.000497572263703 + s: 13.93902775054 + dkappa: -0.0010970496054 + } + v: 3.48888897896 + a: 0.103582712995 relative_time: 4.8300001621246338 - theta: -1.83225309008 - accumulated_s: 13.93902775054 -} -adc_trajectory_point { - x: -127.936852555 - y: 351.355237961 - z: -31.3326249309 - - speed: 3.48888897896 - acceleration_s: 0.0987043389986 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.936852555 + y: 351.355237961 + z: -31.3326249309 + theta: -1.83225678098 + kappa: 0.000497572263703 + s: 13.97391664024 + dkappa: 0 + } + v: 3.48888897896 + a: 0.0987043389986 relative_time: 4.8400001525878906 - theta: -1.83225678098 - accumulated_s: 13.97391664024 -} -adc_trajectory_point { - x: -127.945946783 - y: 351.322088963 - z: -31.3325914145 - - speed: 3.4916665554 - acceleration_s: 0.125243887153 - curvature: 0.000459297432768 - curvature_change_rate: -0.00109617657723 +} +trajectory_point { + path_point { + x: -127.945946783 + y: 351.322088963 + z: -31.3325914145 + theta: -1.83225725673 + kappa: 0.000459297432768 + s: 14.00883330584 + dkappa: -0.00109617657723 + } + v: 3.4916665554 + a: 0.125243887153 relative_time: 4.8500001430511475 - theta: -1.83225725673 - accumulated_s: 14.00883330584 -} -adc_trajectory_point { - x: -127.955074316 - y: 351.288940788 - z: -31.3324934971 - - speed: 3.4916665554 - acceleration_s: 0.121261153979 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.955074316 + y: 351.288940788 + z: -31.3324934971 + theta: -1.83230175825 + kappa: 0.000459297432768 + s: 14.04374997144 + dkappa: 0 + } + v: 3.4916665554 + a: 0.121261153979 relative_time: 4.8600001335144043 - theta: -1.83230175825 - accumulated_s: 14.04374997144 -} -adc_trajectory_point { - x: -127.964154214 - y: 351.255774262 - z: -31.3324116757 - - speed: 3.4916665554 - acceleration_s: 0.0387133948109 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.964154214 + y: 351.255774262 + z: -31.3324116757 + theta: -1.83227376243 + kappa: 0.000459297432768 + s: 14.07866663694 + dkappa: 0 + } + v: 3.4916665554 + a: 0.0387133948109 relative_time: 4.8700001239776611 - theta: -1.83227376243 - accumulated_s: 14.07866663694 -} -adc_trajectory_point { - x: -127.973293048 - y: 351.222600333 - z: -31.3323044209 - - speed: 3.4916665554 - acceleration_s: 0.128501307565 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.973293048 + y: 351.222600333 + z: -31.3323044209 + theta: -1.83231098077 + kappa: 0.000459297432768 + s: 14.11358330254 + dkappa: 0 + } + v: 3.4916665554 + a: 0.128501307565 relative_time: 4.880000114440918 - theta: -1.83231098077 - accumulated_s: 14.11358330254 -} -adc_trajectory_point { - x: -127.982415681 - y: 351.189416085 - z: -31.332248074 - - speed: 3.48888897896 - acceleration_s: 0.130341510986 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.982415681 + y: 351.189416085 + z: -31.332248074 + theta: -1.83234969531 + kappa: 0.000459297432768 + s: 14.14847219234 + dkappa: 0 + } + v: 3.48888897896 + a: 0.130341510986 relative_time: 4.8900001049041748 - theta: -1.83234969531 - accumulated_s: 14.14847219234 -} -adc_trajectory_point { - x: -127.982415681 - y: 351.189416085 - z: -31.332248074 - - speed: 3.48888897896 - acceleration_s: 0.130341510986 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.982415681 + y: 351.189416085 + z: -31.332248074 + theta: -1.83234969531 + kappa: 0.000459297432768 + s: 14.18336108204 + dkappa: 0 + } + v: 3.48888897896 + a: 0.130341510986 relative_time: 4.8900001049041748 - theta: -1.83234969531 - accumulated_s: 14.18336108204 -} -adc_trajectory_point { - x: -128.000654248 - y: 351.122957373 - z: -31.3320949441 - - speed: 3.4916665554 - acceleration_s: 0.2155785191 - curvature: 0.000421022612763 - curvature_change_rate: -0.00109617626418 +} +trajectory_point { + path_point { + x: -128.000654248 + y: 351.122957373 + z: -31.3320949441 + theta: -1.83237155489 + kappa: 0.000421022612763 + s: 14.21827774764 + dkappa: -0.00109617626418 + } + v: 3.4916665554 + a: 0.2155785191 relative_time: 4.9100000858306885 - theta: -1.83237155489 - accumulated_s: 14.21827774764 -} -adc_trajectory_point { - x: -128.009766732 - y: 351.089731207 - z: -31.3320094375 - - speed: 3.4916665554 - acceleration_s: 0.100030454833 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.009766732 + y: 351.089731207 + z: -31.3320094375 + theta: -1.83240200657 + kappa: 0.000421022612763 + s: 14.25319441314 + dkappa: 0 + } + v: 3.4916665554 + a: 0.100030454833 relative_time: 4.9200000762939453 - theta: -1.83240200657 - accumulated_s: 14.25319441314 -} -adc_trajectory_point { - x: -128.018885109 - y: 351.056451235 - z: -31.3319301745 - - speed: 3.49444437027 - acceleration_s: 0.143884005672 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.018885109 + y: 351.056451235 + z: -31.3319301745 + theta: -1.83243906988 + kappa: 0.000421022612763 + s: 14.28813885694 + dkappa: 0 + } + v: 3.49444437027 + a: 0.143884005672 relative_time: 4.9300000667572021 - theta: -1.83243906988 - accumulated_s: 14.28813885694 -} -adc_trajectory_point { - x: -128.028005427 - y: 351.023190788 - z: -31.3318837518 - - speed: 3.49444437027 - acceleration_s: 0.0935759258599 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.028005427 + y: 351.023190788 + z: -31.3318837518 + theta: -1.8324763839 + kappa: 0.000421022612763 + s: 14.32308330064 + dkappa: 0 + } + v: 3.49444437027 + a: 0.0935759258599 relative_time: 4.940000057220459 - theta: -1.8324763839 - accumulated_s: 14.32308330064 -} -adc_trajectory_point { - x: -128.028005427 - y: 351.023190788 - z: -31.3318837518 - - speed: 3.49722218513 - acceleration_s: 0.0935759258599 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.028005427 + y: 351.023190788 + z: -31.3318837518 + theta: -1.8324763839 + kappa: 0.000421022612763 + s: 14.35805552244 + dkappa: 0 + } + v: 3.49722218513 + a: 0.0935759258599 relative_time: 4.940000057220459 - theta: -1.8324763839 - accumulated_s: 14.35805552244 -} -adc_trajectory_point { - x: -128.046248474 - y: 350.956570532 - z: -31.3317727968 - - speed: 3.49722218513 - acceleration_s: 0.267789469281 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.046248474 + y: 350.956570532 + z: -31.3317727968 + theta: -1.83252221827 + kappa: 0.000421022612763 + s: 14.39302774434 + dkappa: 0 + } + v: 3.49722218513 + a: 0.267789469281 relative_time: 4.9600000381469727 - theta: -1.83252221827 - accumulated_s: 14.39302774434 -} -adc_trajectory_point { - x: -128.0553701 - y: 350.923208525 - z: -31.3316713916 - - speed: 3.5 - acceleration_s: 0.300834012677 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.0553701 + y: 350.923208525 + z: -31.3316713916 + theta: -1.83251562589 + kappa: 0.000421022612763 + s: 14.42802774434 + dkappa: 0 + } + v: 3.5 + a: 0.300834012677 relative_time: 4.9700000286102295 - theta: -1.83251562589 - accumulated_s: 14.42802774434 -} -adc_trajectory_point { - x: -128.064498592 - y: 350.889851981 - z: -31.3316573771 - - speed: 3.5 - acceleration_s: 0.300834012677 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.064498592 + y: 350.889851981 + z: -31.3316573771 + theta: -1.83254537574 + kappa: 0.000421022612763 + s: 14.46302774434 + dkappa: 0 + } + v: 3.5 + a: 0.300834012677 relative_time: 4.9800000190734863 - theta: -1.83254537574 - accumulated_s: 14.46302774434 -} -adc_trajectory_point { - x: -128.073636577 - y: 350.856438601 - z: -31.3316250695 - - speed: 3.50277781487 - acceleration_s: 0.314520331335 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.073636577 + y: 350.856438601 + z: -31.3316250695 + theta: -1.8325462399 + kappa: 0.000421022612763 + s: 14.49805552244 + dkappa: 0 + } + v: 3.50277781487 + a: 0.314520331335 relative_time: 4.9900000095367432 - theta: -1.8325462399 - accumulated_s: 14.49805552244 -} -adc_trajectory_point { - x: -128.082787373 - y: 350.823041185 - z: -31.3316455074 - - speed: 3.50277781487 - acceleration_s: 0.191534841341 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.082787373 + y: 350.823041185 + z: -31.3316455074 + theta: -1.83257440941 + kappa: 0.000421022612763 + s: 14.53308330064 + dkappa: 0 + } + v: 3.50277781487 + a: 0.191534841341 relative_time: 5 - theta: -1.83257440941 - accumulated_s: 14.53308330064 -} -adc_trajectory_point { - x: -128.091951244 - y: 350.789584174 - z: -31.3315293901 - - speed: 3.5083334446 - acceleration_s: 0.278952635039 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.091951244 + y: 350.789584174 + z: -31.3315293901 + theta: -1.8325975532 + kappa: 0.000421022612763 + s: 14.56816663504 + dkappa: 0 + } + v: 3.5083334446 + a: 0.278952635039 relative_time: 5.0099999904632568 - theta: -1.8325975532 - accumulated_s: 14.56816663504 -} -adc_trajectory_point { - x: -128.101075177 - y: 350.756130082 - z: -31.3315945743 - - speed: 3.5083334446 - acceleration_s: 0.191646118787 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.101075177 + y: 350.756130082 + z: -31.3315945743 + theta: -1.83257251866 + kappa: 0.000421022612763 + s: 14.60324996944 + dkappa: 0 + } + v: 3.5083334446 + a: 0.191646118787 relative_time: 5.0199999809265137 - theta: -1.83257251866 - accumulated_s: 14.60324996944 -} -adc_trajectory_point { - x: -128.110279538 - y: 350.722644539 - z: -31.3315375568 - - speed: 3.51388883591 - acceleration_s: 0.24373886012 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.110279538 + y: 350.722644539 + z: -31.3315375568 + theta: -1.8326153807 + kappa: 0.000421022612763 + s: 14.638388857839999 + dkappa: 0 + } + v: 3.51388883591 + a: 0.24373886012 relative_time: 5.0299999713897705 - theta: -1.8326153807 - accumulated_s: 14.638388857839999 -} -adc_trajectory_point { - x: -128.119464702 - y: 350.689158674 - z: -31.3316792473 - - speed: 3.51388883591 - acceleration_s: 0.24373886012 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.119464702 + y: 350.689158674 + z: -31.3316792473 + theta: -1.83261570322 + kappa: 0.000421022612763 + s: 14.673527746240001 + dkappa: 0 + } + v: 3.51388883591 + a: 0.24373886012 relative_time: 5.0399999618530273 - theta: -1.83261570322 - accumulated_s: 14.673527746240001 -} -adc_trajectory_point { - x: -128.128655979 - y: 350.655615012 - z: -31.3316125404 - - speed: 3.51944446564 - acceleration_s: 0.282552998313 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.128655979 + y: 350.655615012 + z: -31.3316125404 + theta: -1.83260241097 + kappa: 0.000421022612763 + s: 14.70872219084 + dkappa: 0 + } + v: 3.51944446564 + a: 0.282552998313 relative_time: 5.0499999523162842 - theta: -1.83260241097 - accumulated_s: 14.70872219084 -} -adc_trajectory_point { - x: -128.137851861 - y: 350.622082697 - z: -31.3317606011 - - speed: 3.51944446564 - acceleration_s: 0.197898992004 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.137851861 + y: 350.622082697 + z: -31.3317606011 + theta: -1.83258402011 + kappa: 0.000421022612763 + s: 14.74391663554 + dkappa: 0 + } + v: 3.51944446564 + a: 0.197898992004 relative_time: 5.059999942779541 - theta: -1.83258402011 - accumulated_s: 14.74391663554 -} -adc_trajectory_point { - x: -128.147065919 - y: 350.588508171 - z: -31.3316363096 - - speed: 3.5222222805 - acceleration_s: 0.272153550929 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.147065919 + y: 350.588508171 + z: -31.3316363096 + theta: -1.83255494728 + kappa: 0.000421022612763 + s: 14.779138858340001 + dkappa: 0 + } + v: 3.5222222805 + a: 0.272153550929 relative_time: 5.0699999332427979 - theta: -1.83255494728 - accumulated_s: 14.779138858340001 -} -adc_trajectory_point { - x: -128.156294813 - y: 350.554938211 - z: -31.3317528339 - - speed: 3.5222222805 - acceleration_s: 0.110982785082 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.156294813 + y: 350.554938211 + z: -31.3317528339 + theta: -1.83258109914 + kappa: 0.000421022612763 + s: 14.81436108114 + dkappa: 0 + } + v: 3.5222222805 + a: 0.110982785082 relative_time: 5.0800001621246338 - theta: -1.83258109914 - accumulated_s: 14.81436108114 -} -adc_trajectory_point { - x: -128.165535716 - y: 350.521308584 - z: -31.331666356 - - speed: 3.52500009537 - acceleration_s: 0.297725012227 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.165535716 + y: 350.521308584 + z: -31.331666356 + theta: -1.83256878867 + kappa: 0.000421022612763 + s: 14.84961108204 + dkappa: 0 + } + v: 3.52500009537 + a: 0.297725012227 relative_time: 5.0900001525878906 - theta: -1.83256878867 - accumulated_s: 14.84961108204 -} -adc_trajectory_point { - x: -128.174725033 - y: 350.487702558 - z: -31.3318907274 - - speed: 3.52500009537 - acceleration_s: 0.297725012227 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.174725033 + y: 350.487702558 + z: -31.3318907274 + theta: -1.8325495662 + kappa: 0.000421022612763 + s: 14.88486108304 + dkappa: 0 + } + v: 3.52500009537 + a: 0.297725012227 relative_time: 5.1000001430511475 - theta: -1.8325495662 - accumulated_s: 14.88486108304 -} -adc_trajectory_point { - x: -128.183981673 - y: 350.454038662 - z: -31.3317321083 - - speed: 3.52777767181 - acceleration_s: 0.252304635167 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.183981673 + y: 350.454038662 + z: -31.3317321083 + theta: -1.83253365994 + kappa: 0.000421022612763 + s: 14.92013885974 + dkappa: 0 + } + v: 3.52777767181 + a: 0.252304635167 relative_time: 5.1100001335144043 - theta: -1.83253365994 - accumulated_s: 14.92013885974 -} -adc_trajectory_point { - x: -128.193227797 - y: 350.420404838 - z: -31.3318322925 - - speed: 3.52777767181 - acceleration_s: 0.0967302183985 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.193227797 + y: 350.420404838 + z: -31.3318322925 + theta: -1.83252496302 + kappa: 0.000421022612763 + s: 14.955416636439999 + dkappa: 0 + } + v: 3.52777767181 + a: 0.0967302183985 relative_time: 5.1200001239776611 - theta: -1.83252496302 - accumulated_s: 14.955416636439999 -} -adc_trajectory_point { - x: -128.202487239 - y: 350.386699526 - z: -31.3316989904 - - speed: 3.53333330154 - acceleration_s: 0.277927346566 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.202487239 + y: 350.386699526 + z: -31.3316989904 + theta: -1.83248562268 + kappa: 0.000421022612763 + s: 14.99074996944 + dkappa: 0 + } + v: 3.53333330154 + a: 0.277927346566 relative_time: 5.130000114440918 - theta: -1.83248562268 - accumulated_s: 14.99074996944 -} -adc_trajectory_point { - x: -128.211753702 - y: 350.35303416 - z: -31.3317653527 - - speed: 3.53333330154 - acceleration_s: 0.0591837094689 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.211753702 + y: 350.35303416 + z: -31.3317653527 + theta: -1.8324770861 + kappa: 0.000421022612763 + s: 15.026083302539998 + dkappa: 0 + } + v: 3.53333330154 + a: 0.0591837094689 relative_time: 5.1400001049041748 - theta: -1.8324770861 - accumulated_s: 15.026083302539998 -} -adc_trajectory_point { - x: -128.221040402 - y: 350.319296927 - z: -31.3315984681 - - speed: 3.53888893127 - acceleration_s: 0.0591837094689 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.221040402 + y: 350.319296927 + z: -31.3315984681 + theta: -1.83244599081 + kappa: 0.000421022612763 + s: 15.06147219184 + dkappa: 0 + } + v: 3.53888893127 + a: 0.0591837094689 relative_time: 5.1500000953674316 - theta: -1.83244599081 - accumulated_s: 15.06147219184 -} -adc_trajectory_point { - x: -128.230326119 - y: 350.285590336 - z: -31.3316497104 - - speed: 3.53888893127 - acceleration_s: 0.116584209373 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.230326119 + y: 350.285590336 + z: -31.3316497104 + theta: -1.83244779888 + kappa: 0.000421022612763 + s: 15.096861081139998 + dkappa: 0 + } + v: 3.53888893127 + a: 0.116584209373 relative_time: 5.1600000858306885 - theta: -1.83244779888 - accumulated_s: 15.096861081139998 -} -adc_trajectory_point { - x: -128.239626669 - y: 350.251828692 - z: -31.3315357789 - - speed: 3.544444561 - acceleration_s: 0.278030473616 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.239626669 + y: 350.251828692 + z: -31.3315357789 + theta: -1.83241519981 + kappa: 0.000421022612763 + s: 15.132305526740002 + dkappa: 0 + } + v: 3.544444561 + a: 0.278030473616 relative_time: 5.1700000762939453 - theta: -1.83241519981 - accumulated_s: 15.132305526740002 -} -adc_trajectory_point { - x: -128.248921672 - y: 350.218048481 - z: -31.3314207131 - - speed: 3.544444561 - acceleration_s: 0.251109438944 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.248921672 + y: 350.218048481 + z: -31.3314207131 + theta: -1.83239257782 + kappa: 0.000421022612763 + s: 15.167749972340001 + dkappa: 0 + } + v: 3.544444561 + a: 0.251109438944 relative_time: 5.1800000667572021 - theta: -1.83239257782 - accumulated_s: 15.167749972340001 -} -adc_trajectory_point { - x: -128.258228341 - y: 350.184290043 - z: -31.3312912183 - - speed: 3.55277776718 - acceleration_s: 0.0693685625957 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.258228341 + y: 350.184290043 + z: -31.3312912183 + theta: -1.83240719298 + kappa: 0.000421022612763 + s: 15.203277750040002 + dkappa: 0 + } + v: 3.55277776718 + a: 0.0693685625957 relative_time: 5.190000057220459 - theta: -1.83240719298 - accumulated_s: 15.203277750040002 -} -adc_trajectory_point { - x: -128.258228341 - y: 350.184290043 - z: -31.3312912183 - - speed: 3.55277776718 - acceleration_s: 0.0693685625957 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.258228341 + y: 350.184290043 + z: -31.3312912183 + theta: -1.83240719298 + kappa: 0.000421022612763 + s: 15.23880552764 + dkappa: 0 + } + v: 3.55277776718 + a: 0.0693685625957 relative_time: 5.190000057220459 - theta: -1.83240719298 - accumulated_s: 15.23880552764 -} -adc_trajectory_point { - x: -128.276844285 - y: 350.116681007 - z: -31.3311293265 - - speed: 3.55833339691 - acceleration_s: 0.171843816258 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.276844285 + y: 350.116681007 + z: -31.3311293265 + theta: -1.83241144526 + kappa: 0.000421022612763 + s: 15.274388861639999 + dkappa: 0 + } + v: 3.55833339691 + a: 0.171843816258 relative_time: 5.2100000381469727 - theta: -1.83241144526 - accumulated_s: 15.274388861639999 -} -adc_trajectory_point { - x: -128.286184325 - y: 350.082838437 - z: -31.3308680477 - - speed: 3.55833339691 - acceleration_s: 0.252683910327 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.286184325 + y: 350.082838437 + z: -31.3308680477 + theta: -1.83242163866 + kappa: 0.000421022612763 + s: 15.30997219564 + dkappa: 0 + } + v: 3.55833339691 + a: 0.252683910327 relative_time: 5.2200000286102295 - theta: -1.83242163866 - accumulated_s: 15.30997219564 -} -adc_trajectory_point { - x: -128.295507588 - y: 350.048981868 - z: -31.3308513397 - - speed: 3.56388878822 - acceleration_s: 0.226768789061 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.295507588 + y: 350.048981868 + z: -31.3308513397 + theta: -1.83243355955 + kappa: 0.000421022612763 + s: 15.34561108354 + dkappa: 0 + } + v: 3.56388878822 + a: 0.226768789061 relative_time: 5.2300000190734863 - theta: -1.83243355955 - accumulated_s: 15.34561108354 -} -adc_trajectory_point { - x: -128.304856069 - y: 350.01507061 - z: -31.3306626277 - - speed: 3.56388878822 - acceleration_s: 0.358421376831 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.304856069 + y: 350.01507061 + z: -31.3306626277 + theta: -1.83246714706 + kappa: 0.000421022612763 + s: 15.381249971439999 + dkappa: 0 + } + v: 3.56388878822 + a: 0.358421376831 relative_time: 5.2400000095367432 - theta: -1.83246714706 - accumulated_s: 15.381249971439999 -} -adc_trajectory_point { - x: -128.314177374 - y: 349.981168523 - z: -31.3305751467 - - speed: 3.56666660309 - acceleration_s: 0.130028481229 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.314177374 + y: 349.981168523 + z: -31.3305751467 + theta: -1.83248746453 + kappa: 0.000421022612763 + s: 15.41691663744 + dkappa: 0 + } + v: 3.56666660309 + a: 0.130028481229 relative_time: 5.25 - theta: -1.83248746453 - accumulated_s: 15.41691663744 -} -adc_trajectory_point { - x: -128.323523061 - y: 349.947221703 - z: -31.3304684926 - - speed: 3.56666660309 - acceleration_s: 0.270673775212 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.323523061 + y: 349.947221703 + z: -31.3304684926 + theta: -1.83250387909 + kappa: 0.000421022612763 + s: 15.45258330344 + dkappa: 0 + } + v: 3.56666660309 + a: 0.270673775212 relative_time: 5.2599999904632568 - theta: -1.83250387909 - accumulated_s: 15.45258330344 -} -adc_trajectory_point { - x: -128.332869921 - y: 349.913273211 - z: -31.3304520212 - - speed: 3.57222223282 - acceleration_s: 0.223202365437 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.332869921 + y: 349.913273211 + z: -31.3304520212 + theta: -1.83253571663 + kappa: 0.000421022612763 + s: 15.48830552574 + dkappa: 0 + } + v: 3.57222223282 + a: 0.223202365437 relative_time: 5.2699999809265137 - theta: -1.83253571663 - accumulated_s: 15.48830552574 -} -adc_trajectory_point { - x: -128.342196025 - y: 349.879284826 - z: -31.3302414361 - - speed: 3.57222223282 - acceleration_s: 0.203264498641 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.342196025 + y: 349.879284826 + z: -31.3302414361 + theta: -1.83251360385 + kappa: 0.000421022612763 + s: 15.52402774814 + dkappa: 0 + } + v: 3.57222223282 + a: 0.203264498641 relative_time: 5.2799999713897705 - theta: -1.83251360385 - accumulated_s: 15.52402774814 -} -adc_trajectory_point { - x: -128.35158589 - y: 349.845269713 - z: -31.3300502952 - - speed: 3.57777786255 - acceleration_s: 0.290100372709 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.35158589 + y: 349.845269713 + z: -31.3300502952 + theta: -1.83255322038 + kappa: 0.000421022612763 + s: 15.55980552674 + dkappa: 0 + } + v: 3.57777786255 + a: 0.290100372709 relative_time: 5.2899999618530273 - theta: -1.83255322038 - accumulated_s: 15.55980552674 -} -adc_trajectory_point { - x: -128.36088326 - y: 349.811245014 - z: -31.3299333937 - - speed: 3.57777786255 - acceleration_s: 0.290100372709 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.36088326 + y: 349.811245014 + z: -31.3299333937 + theta: -1.83250645039 + kappa: 0.000421022612763 + s: 15.59558330534 + dkappa: 0 + } + v: 3.57777786255 + a: 0.290100372709 relative_time: 5.2999999523162842 - theta: -1.83250645039 - accumulated_s: 15.59558330534 -} -adc_trajectory_point { - x: -128.370264566 - y: 349.777203763 - z: -31.3298768196 - - speed: 3.57777786255 - acceleration_s: 0.270945996076 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.370264566 + y: 349.777203763 + z: -31.3298768196 + theta: -1.83260130435 + kappa: 0.000421022612763 + s: 15.63136108394 + dkappa: 0 + } + v: 3.57777786255 + a: 0.270945996076 relative_time: 5.309999942779541 - theta: -1.83260130435 - accumulated_s: 15.63136108394 -} -adc_trajectory_point { - x: -128.379618839 - y: 349.743159154 - z: -31.3297989694 - - speed: 3.57777786255 - acceleration_s: 0.135216470502 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.379618839 + y: 349.743159154 + z: -31.3297989694 + theta: -1.83264110082 + kappa: 0.000421022612763 + s: 15.667138862640002 + dkappa: 0 + } + v: 3.57777786255 + a: 0.135216470502 relative_time: 5.3199999332427979 - theta: -1.83264110082 - accumulated_s: 15.667138862640002 -} -adc_trajectory_point { - x: -128.38898418 - y: 349.709078116 - z: -31.3294439595 - - speed: 3.58333325386 - acceleration_s: 0.158682610034 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.38898418 + y: 349.709078116 + z: -31.3294439595 + theta: -1.83265476587 + kappa: 0.000421022612763 + s: 15.70297219514 + dkappa: 0 + } + v: 3.58333325386 + a: 0.158682610034 relative_time: 5.3300001621246338 - theta: -1.83265476587 - accumulated_s: 15.70297219514 -} -adc_trajectory_point { - x: -128.398356682 - y: 349.674983551 - z: -31.3292951919 - - speed: 3.58333325386 - acceleration_s: 0.247491454149 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.398356682 + y: 349.674983551 + z: -31.3292951919 + theta: -1.83267354789 + kappa: 0.000421022612763 + s: 15.73880552764 + dkappa: 0 + } + v: 3.58333325386 + a: 0.247491454149 relative_time: 5.3400001525878906 - theta: -1.83267354789 - accumulated_s: 15.73880552764 -} -adc_trajectory_point { - x: -128.407741547 - y: 349.64085883 - z: -31.3290389087 - - speed: 3.58888888359 - acceleration_s: 0.257360962182 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.407741547 + y: 349.64085883 + z: -31.3290389087 + theta: -1.83269688785 + kappa: 0.000421022612763 + s: 15.774694416540001 + dkappa: 0 + } + v: 3.58888888359 + a: 0.257360962182 relative_time: 5.3500001430511475 - theta: -1.83269688785 - accumulated_s: 15.774694416540001 -} -adc_trajectory_point { - x: -128.417126691 - y: 349.606716634 - z: -31.3288660683 - - speed: 3.58888888359 - acceleration_s: 0.252492361769 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.417126691 + y: 349.606716634 + z: -31.3288660683 + theta: -1.83273828427 + kappa: 0.000421022612763 + s: 15.81058330534 + dkappa: 0 + } + v: 3.58888888359 + a: 0.252492361769 relative_time: 5.3600001335144043 - theta: -1.83273828427 - accumulated_s: 15.81058330534 -} -adc_trajectory_point { - x: -128.426512813 - y: 349.572536216 - z: -31.328538863 - - speed: 3.59166669846 - acceleration_s: 0.270461365569 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.426512813 + y: 349.572536216 + z: -31.328538863 + theta: -1.83272536053 + kappa: 0.000421022612763 + s: 15.846499972339998 + dkappa: 0 + } + v: 3.59166669846 + a: 0.270461365569 relative_time: 5.3700001239776611 - theta: -1.83272536053 - accumulated_s: 15.846499972339998 -} -adc_trajectory_point { - x: -128.435929135 - y: 349.538388079 - z: -31.3283021813 - - speed: 3.59166669846 - acceleration_s: 0.0745257854394 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.435929135 + y: 349.538388079 + z: -31.3283021813 + theta: -1.83276970424 + kappa: 0.000421022612763 + s: 15.88241663934 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0745257854394 relative_time: 5.380000114440918 - theta: -1.83276970424 - accumulated_s: 15.88241663934 -} -adc_trajectory_point { - x: -128.445327148 - y: 349.504209446 - z: -31.3279309906 - - speed: 3.59166669846 - acceleration_s: 0.14209022716 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.445327148 + y: 349.504209446 + z: -31.3279309906 + theta: -1.83277794851 + kappa: 0.000421022612763 + s: 15.91833330634 + dkappa: 0 + } + v: 3.59166669846 + a: 0.14209022716 relative_time: 5.3900001049041748 - theta: -1.83277794851 - accumulated_s: 15.91833330634 -} -adc_trajectory_point { - x: -128.445327148 - y: 349.504209446 - z: -31.3279309906 - - speed: 3.59166669846 - acceleration_s: 0.14209022716 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.445327148 + y: 349.504209446 + z: -31.3279309906 + theta: -1.83277794851 + kappa: 0.000421022612763 + s: 15.954249973340001 + dkappa: 0 + } + v: 3.59166669846 + a: 0.14209022716 relative_time: 5.3900001049041748 - theta: -1.83277794851 - accumulated_s: 15.954249973340001 -} -adc_trajectory_point { - x: -128.464161002 - y: 349.435832216 - z: -31.3273048056 - - speed: 3.59166669846 - acceleration_s: 0.182318692509 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.464161002 + y: 349.435832216 + z: -31.3273048056 + theta: -1.83284020618 + kappa: 0.000421022612763 + s: 15.990166640239998 + dkappa: 0 + } + v: 3.59166669846 + a: 0.182318692509 relative_time: 5.4100000858306885 - theta: -1.83284020618 - accumulated_s: 15.990166640239998 -} -adc_trajectory_point { - x: -128.473580038 - y: 349.401608023 - z: -31.3269274253 - - speed: 3.59166669846 - acceleration_s: 0.186614034787 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.473580038 + y: 349.401608023 + z: -31.3269274253 + theta: -1.83285290131 + kappa: 0.000421022612763 + s: 16.02608330724 + dkappa: 0 + } + v: 3.59166669846 + a: 0.186614034787 relative_time: 5.4200000762939453 - theta: -1.83285290131 - accumulated_s: 16.02608330724 -} -adc_trajectory_point { - x: -128.483028135 - y: 349.367368334 - z: -31.3265979541 - - speed: 3.59166669846 - acceleration_s: 0.256491736264 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.483028135 + y: 349.367368334 + z: -31.3265979541 + theta: -1.83288330014 + kappa: 0.000421022612763 + s: 16.06199997424 + dkappa: 0 + } + v: 3.59166669846 + a: 0.256491736264 relative_time: 5.4300000667572021 - theta: -1.83288330014 - accumulated_s: 16.06199997424 -} -adc_trajectory_point { - x: -128.492464849 - y: 349.33311293 - z: -31.3262703242 - - speed: 3.59166669846 - acceleration_s: 0.193695838626 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.492464849 + y: 349.33311293 + z: -31.3262703242 + theta: -1.8328975954 + kappa: 0.000421022612763 + s: 16.09791664124 + dkappa: 0 + } + v: 3.59166669846 + a: 0.193695838626 relative_time: 5.440000057220459 - theta: -1.8328975954 - accumulated_s: 16.09791664124 -} -adc_trajectory_point { - x: -128.492464849 - y: 349.33311293 - z: -31.3262703242 - - speed: 3.59444451332 - acceleration_s: 0.193695838626 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.492464849 + y: 349.33311293 + z: -31.3262703242 + theta: -1.8328975954 + kappa: 0.000421022612763 + s: 16.13386108634 + dkappa: 0 + } + v: 3.59444451332 + a: 0.193695838626 relative_time: 5.440000057220459 - theta: -1.8328975954 - accumulated_s: 16.13386108634 -} -adc_trajectory_point { - x: -128.50190389 - y: 349.298837083 - z: -31.3259477625 - - speed: 3.59444451332 - acceleration_s: 0.155372344536 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.50190389 + y: 349.298837083 + z: -31.3259477625 + theta: -1.832898318 + kappa: 0.000421022612763 + s: 16.16980553154 + dkappa: 0 + } + v: 3.59444451332 + a: 0.155372344536 relative_time: 5.4500000476837158 - theta: -1.832898318 - accumulated_s: 16.16980553154 -} -adc_trajectory_point { - x: -128.520810944 - y: 349.230235123 - z: -31.3252398837 - - speed: 3.59444451332 - acceleration_s: 0.112043222129 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.520810944 + y: 349.230235123 + z: -31.3252398837 + theta: -1.83294695796 + kappa: 0.000421022612763 + s: 16.20574997664 + dkappa: 0 + } + v: 3.59444451332 + a: 0.112043222129 relative_time: 5.4700000286102295 - theta: -1.83294695796 - accumulated_s: 16.20574997664 -} -adc_trajectory_point { - x: -128.530256259 - y: 349.195893834 - z: -31.3248800915 - - speed: 3.59444451332 - acceleration_s: 0.222878830587 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.530256259 + y: 349.195893834 + z: -31.3248800915 + theta: -1.83292248995 + kappa: 0.000421022612763 + s: 16.24169442174 + dkappa: 0 + } + v: 3.59444451332 + a: 0.222878830587 relative_time: 5.4800000190734863 - theta: -1.83292248995 - accumulated_s: 16.24169442174 -} -adc_trajectory_point { - x: -128.539725901 - y: 349.161573111 - z: -31.3246459132 - - speed: 3.59722232819 - acceleration_s: 0.120873011999 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.539725901 + y: 349.161573111 + z: -31.3246459132 + theta: -1.83298261698 + kappa: 0.000421022612763 + s: 16.27766664504 + dkappa: 0 + } + v: 3.59722232819 + a: 0.120873011999 relative_time: 5.4900000095367432 - theta: -1.83298261698 - accumulated_s: 16.27766664504 -} -adc_trajectory_point { - x: -128.549184134 - y: 349.12720088 - z: -31.3242900204 - - speed: 3.59722232819 - acceleration_s: 0.120873011999 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.549184134 + y: 349.12720088 + z: -31.3242900204 + theta: -1.83300233614 + kappa: 0.000421022612763 + s: 16.31363886834 + dkappa: 0 + } + v: 3.59722232819 + a: 0.120873011999 relative_time: 5.5 - theta: -1.83300233614 - accumulated_s: 16.31363886834 -} -adc_trajectory_point { - x: -128.558619875 - y: 349.092842303 - z: -31.3240769766 - - speed: 3.59999990463 - acceleration_s: 0.0899515923125 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.558619875 + y: 349.092842303 + z: -31.3240769766 + theta: -1.83300530132 + kappa: 0.000421022612763 + s: 16.34963886734 + dkappa: 0 + } + v: 3.59999990463 + a: 0.0899515923125 relative_time: 5.5099999904632568 - theta: -1.83300530132 - accumulated_s: 16.34963886734 -} -adc_trajectory_point { - x: -128.568065056 - y: 349.05845142 - z: -31.3237765981 - - speed: 3.59999990463 - acceleration_s: 0.133486449623 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.568065056 + y: 349.05845142 + z: -31.3237765981 + theta: -1.83300882946 + kappa: 0.000421022612763 + s: 16.38563886644 + dkappa: 0 + } + v: 3.59999990463 + a: 0.133486449623 relative_time: 5.5199999809265137 - theta: -1.83300882946 - accumulated_s: 16.38563886644 -} -adc_trajectory_point { - x: -128.57752828 - y: 349.024049204 - z: -31.3234935207 - - speed: 3.60555553436 - acceleration_s: 0.133486449623 - curvature: 0.000382747802778 - curvature_change_rate: -0.00106155097655 +} +trajectory_point { + path_point { + x: -128.57752828 + y: 349.024049204 + z: -31.3234935207 + theta: -1.83304047453 + kappa: 0.000382747802778 + s: 16.42169442174 + dkappa: -0.00106155097655 + } + v: 3.60555553436 + a: 0.133486449623 relative_time: 5.5299999713897705 - theta: -1.83304047453 - accumulated_s: 16.42169442174 -} -adc_trajectory_point { - x: -128.586962949 - y: 348.989640534 - z: -31.3232645057 - - speed: 3.60555553436 - acceleration_s: 0.161516872723 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.586962949 + y: 348.989640534 + z: -31.3232645057 + theta: -1.8330598369 + kappa: 0.000382747802778 + s: 16.45774997714 + dkappa: 0 + } + v: 3.60555553436 + a: 0.161516872723 relative_time: 5.5399999618530273 - theta: -1.8330598369 - accumulated_s: 16.45774997714 -} -adc_trajectory_point { - x: -128.586962949 - y: 348.989640534 - z: -31.3232645057 - - speed: 3.60833334923 - acceleration_s: 0.161516872723 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.586962949 + y: 348.989640534 + z: -31.3232645057 + theta: -1.8330598369 + kappa: 0.000382747802778 + s: 16.49383331064 + dkappa: 0 + } + v: 3.60833334923 + a: 0.161516872723 relative_time: 5.5399999618530273 - theta: -1.8330598369 - accumulated_s: 16.49383331064 -} -adc_trajectory_point { - x: -128.60579751 - y: 348.920744031 - z: -31.3229042711 - - speed: 3.60833334923 - acceleration_s: 0.0788558856532 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.60579751 + y: 348.920744031 + z: -31.3229042711 + theta: -1.83306868542 + kappa: 0.000382747802778 + s: 16.52991664414 + dkappa: 0 + } + v: 3.60833334923 + a: 0.0788558856532 relative_time: 5.559999942779541 - theta: -1.83306868542 - accumulated_s: 16.52991664414 -} -adc_trajectory_point { - x: -128.615225254 - y: 348.886270789 - z: -31.322625909 - - speed: 3.61111116409 - acceleration_s: 0.140590028968 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.615225254 + y: 348.886270789 + z: -31.322625909 + theta: -1.83309581878 + kappa: 0.000382747802778 + s: 16.56602775574 + dkappa: 0 + } + v: 3.61111116409 + a: 0.140590028968 relative_time: 5.5699999332427979 - theta: -1.83309581878 - accumulated_s: 16.56602775574 -} -adc_trajectory_point { - x: -128.624648865 - y: 348.851799461 - z: -31.3225083668 - - speed: 3.61111116409 - acceleration_s: 0.108884639798 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.624648865 + y: 348.851799461 + z: -31.3225083668 + theta: -1.83316790317 + kappa: 0.000382747802778 + s: 16.60213886734 + dkappa: 0 + } + v: 3.61111116409 + a: 0.108884639798 relative_time: 5.5800001621246338 - theta: -1.83316790317 - accumulated_s: 16.60213886734 -} -adc_trajectory_point { - x: -128.63400663 - y: 348.817254923 - z: -31.3223352255 - - speed: 3.61388897896 - acceleration_s: 0.267570724127 - curvature: 0.000344473001902 - curvature_change_rate: -0.00105910284182 +} +trajectory_point { + path_point { + x: -128.63400663 + y: 348.817254923 + z: -31.3223352255 + theta: -1.833142604 + kappa: 0.000344473001902 + s: 16.63827775714 + dkappa: -0.00105910284182 + } + v: 3.61388897896 + a: 0.267570724127 relative_time: 5.5900001525878906 - theta: -1.833142604 - accumulated_s: 16.63827775714 -} -adc_trajectory_point { - x: -128.643438154 - y: 348.782758455 - z: -31.3224043744 - - speed: 3.61388897896 - acceleration_s: 0.267570724127 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.643438154 + y: 348.782758455 + z: -31.3224043744 + theta: -1.83321108238 + kappa: 0.000344473001902 + s: 16.67441664694 + dkappa: 0 + } + v: 3.61388897896 + a: 0.267570724127 relative_time: 5.6000001430511475 - theta: -1.83321108238 - accumulated_s: 16.67441664694 -} -adc_trajectory_point { - x: -128.652846624 - y: 348.748181911 - z: -31.3223548932 - - speed: 3.61944437027 - acceleration_s: 0.244506235761 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.652846624 + y: 348.748181911 + z: -31.3223548932 + theta: -1.83324851316 + kappa: 0.000344473001902 + s: 16.71061109064 + dkappa: 0 + } + v: 3.61944437027 + a: 0.244506235761 relative_time: 5.6100001335144043 - theta: -1.83324851316 - accumulated_s: 16.71061109064 -} -adc_trajectory_point { - x: -128.662263863 - y: 348.713605837 - z: -31.3224831503 - - speed: 3.61944437027 - acceleration_s: 0.268928460073 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.662263863 + y: 348.713605837 + z: -31.3224831503 + theta: -1.83326296881 + kappa: 0.000344473001902 + s: 16.74680553434 + dkappa: 0 + } + v: 3.61944437027 + a: 0.268928460073 relative_time: 5.6200001239776611 - theta: -1.83326296881 - accumulated_s: 16.74680553434 -} -adc_trajectory_point { - x: -128.671698662 - y: 348.679020583 - z: -31.3223722065 - - speed: 3.62222218513 - acceleration_s: 0.0920260062903 - curvature: 0.000306198182417 - curvature_change_rate: -0.0010566668064 +} +trajectory_point { + path_point { + x: -128.671698662 + y: 348.679020583 + z: -31.3223722065 + theta: -1.83326929087 + kappa: 0.000306198182417 + s: 16.78302775624 + dkappa: -0.0010566668064 + } + v: 3.62222218513 + a: 0.0920260062903 relative_time: 5.630000114440918 - theta: -1.83326929087 - accumulated_s: 16.78302775624 -} -adc_trajectory_point { - x: -128.681123508 - y: 348.64439284 - z: -31.3223687503 - - speed: 3.62222218513 - acceleration_s: 0.181258060653 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.681123508 + y: 348.64439284 + z: -31.3223687503 + theta: -1.83324653406 + kappa: 0.000306198182417 + s: 16.81924997804 + dkappa: 0 + } + v: 3.62222218513 + a: 0.181258060653 relative_time: 5.6400001049041748 - theta: -1.83324653406 - accumulated_s: 16.81924997804 -} -adc_trajectory_point { - x: -128.690588488 - y: 348.609798131 - z: -31.3223931799 - - speed: 3.625 - acceleration_s: 0.0756049361894 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.690588488 + y: 348.609798131 + z: -31.3223931799 + theta: -1.83326931385 + kappa: 0.000306198182417 + s: 16.85549997804 + dkappa: 0 + } + v: 3.625 + a: 0.0756049361894 relative_time: 5.6500000953674316 - theta: -1.83326931385 - accumulated_s: 16.85549997804 -} -adc_trajectory_point { - x: -128.700010708 - y: 348.575180874 - z: -31.3224781249 - - speed: 3.625 - acceleration_s: 0.0695705007903 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.700010708 + y: 348.575180874 + z: -31.3224781249 + theta: -1.83324714793 + kappa: 0.000306198182417 + s: 16.89174997804 + dkappa: 0 + } + v: 3.625 + a: 0.0695705007903 relative_time: 5.6600000858306885 - theta: -1.83324714793 - accumulated_s: 16.89174997804 -} -adc_trajectory_point { - x: -128.709466647 - y: 348.540562228 - z: -31.322558241 - - speed: 3.62777781487 - acceleration_s: 0.12094733008 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.709466647 + y: 348.540562228 + z: -31.322558241 + theta: -1.83324677267 + kappa: 0.000306198182417 + s: 16.92802775624 + dkappa: 0 + } + v: 3.62777781487 + a: 0.12094733008 relative_time: 5.6700000762939453 - theta: -1.83324677267 - accumulated_s: 16.92802775624 -} -adc_trajectory_point { - x: -128.718943556 - y: 348.50592714 - z: -31.3225481119 - - speed: 3.62777781487 - acceleration_s: 0.0852303491131 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.718943556 + y: 348.50592714 + z: -31.3225481119 + theta: -1.83327378221 + kappa: 0.000306198182417 + s: 16.96430553434 + dkappa: 0 + } + v: 3.62777781487 + a: 0.0852303491131 relative_time: 5.6800000667572021 - theta: -1.83327378221 - accumulated_s: 16.96430553434 -} -adc_trajectory_point { - x: -128.728403355 - y: 348.471275138 - z: -31.3226837125 - - speed: 3.6333334446 - acceleration_s: 0.174760376493 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.728403355 + y: 348.471275138 + z: -31.3226837125 + theta: -1.83325703247 + kappa: 0.000306198182417 + s: 17.00063886884 + dkappa: 0 + } + v: 3.6333334446 + a: 0.174760376493 relative_time: 5.690000057220459 - theta: -1.83325703247 - accumulated_s: 17.00063886884 -} -adc_trajectory_point { - x: -128.728403355 - y: 348.471275138 - z: -31.3226837125 - - speed: 3.6333334446 - acceleration_s: 0.174760376493 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.728403355 + y: 348.471275138 + z: -31.3226837125 + theta: -1.83325703247 + kappa: 0.000306198182417 + s: 17.03697220324 + dkappa: 0 + } + v: 3.6333334446 + a: 0.174760376493 relative_time: 5.690000057220459 - theta: -1.83325703247 - accumulated_s: 17.03697220324 -} -adc_trajectory_point { - x: -128.747422586 - y: 348.40193836 - z: -31.3225899553 - - speed: 3.63611102104 - acceleration_s: 0.152009968214 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.747422586 + y: 348.40193836 + z: -31.3225899553 + theta: -1.83330329738 + kappa: 0.000306198182417 + s: 17.07333331344 + dkappa: 0 + } + v: 3.63611102104 + a: 0.152009968214 relative_time: 5.7100000381469727 - theta: -1.83330329738 - accumulated_s: 17.07333331344 -} -adc_trajectory_point { - x: -128.756907795 - y: 348.367262238 - z: -31.3225059584 - - speed: 3.63611102104 - acceleration_s: 0.064294085383 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.756907795 + y: 348.367262238 + z: -31.3225059584 + theta: -1.83330186521 + kappa: 0.000306198182417 + s: 17.10969442364 + dkappa: 0 + } + v: 3.63611102104 + a: 0.064294085383 relative_time: 5.7200000286102295 - theta: -1.83330186521 - accumulated_s: 17.10969442364 -} -adc_trajectory_point { - x: -128.766423463 - y: 348.332610435 - z: -31.3225499941 - - speed: 3.63888883591 - acceleration_s: -0.00213218683621 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.766423463 + y: 348.332610435 + z: -31.3225499941 + theta: -1.83335389482 + kappa: 0.000306198182417 + s: 17.14608331204 + dkappa: 0 + } + v: 3.63888883591 + a: -0.00213218683621 relative_time: 5.7300000190734863 - theta: -1.83335389482 - accumulated_s: 17.14608331204 -} -adc_trajectory_point { - x: -128.775925212 - y: 348.297941251 - z: -31.3223879905 - - speed: 3.63888883591 - acceleration_s: -0.0206811253025 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.775925212 + y: 348.297941251 + z: -31.3223879905 + theta: -1.83337620271 + kappa: 0.000306198182417 + s: 17.18247220044 + dkappa: 0 + } + v: 3.63888883591 + a: -0.0206811253025 relative_time: 5.7400000095367432 - theta: -1.83337620271 - accumulated_s: 17.18247220044 -} -adc_trajectory_point { - x: -128.775925212 - y: 348.297941251 - z: -31.3223879905 - - speed: 3.64444446564 - acceleration_s: -0.0206811253025 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.775925212 + y: 348.297941251 + z: -31.3223879905 + theta: -1.83337620271 + kappa: 0.000306198182417 + s: 17.21891664504 + dkappa: 0 + } + v: 3.64444446564 + a: -0.0206811253025 relative_time: 5.7400000095367432 - theta: -1.83337620271 - accumulated_s: 17.21891664504 -} -adc_trajectory_point { - x: -128.794884444 - y: 348.228594425 - z: -31.3221440855 - - speed: 3.64444446564 - acceleration_s: 0.0664189717464 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.794884444 + y: 348.228594425 + z: -31.3221440855 + theta: -1.83340947483 + kappa: 0.000306198182417 + s: 17.25536108974 + dkappa: 0 + } + v: 3.64444446564 + a: 0.0664189717464 relative_time: 5.7599999904632568 - theta: -1.83340947483 - accumulated_s: 17.25536108974 -} -adc_trajectory_point { - x: -128.80435476 - y: 348.193421867 - z: -31.3222793574 - - speed: 3.6472222805 - acceleration_s: -0.010451624836 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.80435476 + y: 348.193421867 + z: -31.3222793574 + theta: -1.8333847907 + kappa: 0.000306198182417 + s: 17.29183331254 + dkappa: 0 + } + v: 3.6472222805 + a: -0.010451624836 relative_time: 5.7699999809265137 - theta: -1.8333847907 - accumulated_s: 17.29183331254 -} -adc_trajectory_point { - x: -128.813877908 - y: 348.158109563 - z: -31.3220262099 - - speed: 3.6472222805 - acceleration_s: 0.116941144297 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.813877908 + y: 348.158109563 + z: -31.3220262099 + theta: -1.83340538993 + kappa: 0.000306198182417 + s: 17.32830553534 + dkappa: 0 + } + v: 3.6472222805 + a: 0.116941144297 relative_time: 5.7799999713897705 - theta: -1.83340538993 - accumulated_s: 17.32830553534 -} -adc_trajectory_point { - x: -128.823362703 - y: 348.122826438 - z: -31.3219631752 - - speed: 3.65000009537 - acceleration_s: -0.0559222445909 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.823362703 + y: 348.122826438 + z: -31.3219631752 + theta: -1.83342351629 + kappa: 0.000306198182417 + s: 17.36480553624 + dkappa: 0 + } + v: 3.65000009537 + a: -0.0559222445909 relative_time: 5.7899999618530273 - theta: -1.83342351629 - accumulated_s: 17.36480553624 -} -adc_trajectory_point { - x: -128.832914021 - y: 348.087507412 - z: -31.3216921715 - - speed: 3.65000009537 - acceleration_s: -0.0559222445909 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.832914021 + y: 348.087507412 + z: -31.3216921715 + theta: -1.83350584857 + kappa: 0.000306198182417 + s: 17.40130553724 + dkappa: 0 + } + v: 3.65000009537 + a: -0.0559222445909 relative_time: 5.7999999523162842 - theta: -1.83350584857 - accumulated_s: 17.40130553724 -} -adc_trajectory_point { - x: -128.842405713 - y: 348.052218361 - z: -31.3216255363 - - speed: 3.65555548668 - acceleration_s: -0.0521618486926 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.842405713 + y: 348.052218361 + z: -31.3216255363 + theta: -1.83355365372 + kappa: 0.000306198182417 + s: 17.43786109214 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0521618486926 relative_time: 5.809999942779541 - theta: -1.83355365372 - accumulated_s: 17.43786109214 -} -adc_trajectory_point { - x: -128.851915135 - y: 348.016897349 - z: -31.3213174194 - - speed: 3.65555548668 - acceleration_s: 0.0526837508852 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.851915135 + y: 348.016897349 + z: -31.3213174194 + theta: -1.83360922393 + kappa: 0.000306198182417 + s: 17.47441664694 + dkappa: 0 + } + v: 3.65555548668 + a: 0.0526837508852 relative_time: 5.8199999332427979 - theta: -1.83360922393 - accumulated_s: 17.47441664694 -} -adc_trajectory_point { - x: -128.861414637 - y: 347.981596382 - z: -31.3211349919 - - speed: 3.65833330154 - acceleration_s: -0.0406594875565 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.861414637 + y: 347.981596382 + z: -31.3211349919 + theta: -1.8336526204 + kappa: 0.000306198182417 + s: 17.51099997994 + dkappa: 0 + } + v: 3.65833330154 + a: -0.0406594875565 relative_time: 5.8300001621246338 - theta: -1.8336526204 - accumulated_s: 17.51099997994 -} -adc_trajectory_point { - x: -128.870914301 - y: 347.946283142 - z: -31.320840802 - - speed: 3.65833330154 - acceleration_s: 0.0116797323649 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.870914301 + y: 347.946283142 + z: -31.320840802 + theta: -1.83369876334 + kappa: 0.000306198182417 + s: 17.54758331304 + dkappa: 0 + } + v: 3.65833330154 + a: 0.0116797323649 relative_time: 5.8400001525878906 - theta: -1.83369876334 - accumulated_s: 17.54758331304 -} -adc_trajectory_point { - x: -128.880418295 - y: 347.910989636 - z: -31.3206666745 - - speed: 3.65833330154 - acceleration_s: -0.0861593151846 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.880418295 + y: 347.910989636 + z: -31.3206666745 + theta: -1.83373288708 + kappa: 0.000306198182417 + s: 17.58416664604 + dkappa: 0 + } + v: 3.65833330154 + a: -0.0861593151846 relative_time: 5.8500001430511475 - theta: -1.83373288708 - accumulated_s: 17.58416664604 -} -adc_trajectory_point { - x: -128.889907116 - y: 347.875693631 - z: -31.3203567239 - - speed: 3.65833330154 - acceleration_s: -0.00489268748598 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.889907116 + y: 347.875693631 + z: -31.3203567239 + theta: -1.83375240354 + kappa: 0.000306198182417 + s: 17.62074997904 + dkappa: 0 + } + v: 3.65833330154 + a: -0.00489268748598 relative_time: 5.8600001335144043 - theta: -1.83375240354 - accumulated_s: 17.62074997904 -} -adc_trajectory_point { - x: -128.899410634 - y: 347.840401963 - z: -31.320089044 - - speed: 3.66111111641 - acceleration_s: -0.0935783389757 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.899410634 + y: 347.840401963 + z: -31.320089044 + theta: -1.83378538875 + kappa: 0.000306198182417 + s: 17.65736109014 + dkappa: 0 + } + v: 3.66111111641 + a: -0.0935783389757 relative_time: 5.8700001239776611 - theta: -1.83378538875 - accumulated_s: 17.65736109014 -} -adc_trajectory_point { - x: -128.908926725 - y: 347.805111515 - z: -31.3197257882 - - speed: 3.66111111641 - acceleration_s: -0.00380495882305 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.908926725 + y: 347.805111515 + z: -31.3197257882 + theta: -1.8338147345 + kappa: 0.000306198182417 + s: 17.69397220134 + dkappa: 0 + } + v: 3.66111111641 + a: -0.00380495882305 relative_time: 5.880000114440918 - theta: -1.8338147345 - accumulated_s: 17.69397220134 -} -adc_trajectory_point { - x: -128.918434719 - y: 347.769833174 - z: -31.3194898563 - - speed: 3.65833330154 - acceleration_s: -0.024698227929 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.918434719 + y: 347.769833174 + z: -31.3194898563 + theta: -1.83381612764 + kappa: 0.000306198182417 + s: 17.73055553434 + dkappa: 0 + } + v: 3.65833330154 + a: -0.024698227929 relative_time: 5.8900001049041748 - theta: -1.83381612764 - accumulated_s: 17.73055553434 -} -adc_trajectory_point { - x: -128.918434719 - y: 347.769833174 - z: -31.3194898563 - - speed: 3.65833330154 - acceleration_s: -0.024698227929 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.918434719 + y: 347.769833174 + z: -31.3194898563 + theta: -1.83381612764 + kappa: 0.000306198182417 + s: 17.76713886734 + dkappa: 0 + } + v: 3.65833330154 + a: -0.024698227929 relative_time: 5.8900001049041748 - theta: -1.83381612764 - accumulated_s: 17.76713886734 -} -adc_trajectory_point { - x: -128.937535935 - y: 347.699291058 - z: -31.3188980063 - - speed: 3.65555548668 - acceleration_s: 0.0180014027825 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.937535935 + y: 347.699291058 + z: -31.3188980063 + theta: -1.83388981528 + kappa: 0.000306198182417 + s: 17.80369442224 + dkappa: 0 + } + v: 3.65555548668 + a: 0.0180014027825 relative_time: 5.9100000858306885 - theta: -1.83388981528 - accumulated_s: 17.80369442224 -} -adc_trajectory_point { - x: -128.947072595 - y: 347.664025092 - z: -31.3186933706 - - speed: 3.65555548668 - acceleration_s: -0.03026701293 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.947072595 + y: 347.664025092 + z: -31.3186933706 + theta: -1.83388177205 + kappa: 0.000306198182417 + s: 17.84024997714 + dkappa: 0 + } + v: 3.65555548668 + a: -0.03026701293 relative_time: 5.9200000762939453 - theta: -1.83388177205 - accumulated_s: 17.84024997714 -} -adc_trajectory_point { - x: -128.956668694 - y: 347.628740485 - z: -31.3183895247 - - speed: 3.65555548668 - acceleration_s: 0.10998179492 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.956668694 + y: 347.628740485 + z: -31.3183895247 + theta: -1.83392784622 + kappa: 0.000306198182417 + s: 17.87680553194 + dkappa: 0 + } + v: 3.65555548668 + a: 0.10998179492 relative_time: 5.9300000667572021 - theta: -1.83392784622 - accumulated_s: 17.87680553194 -} -adc_trajectory_point { - x: -128.966223331 - y: 347.593491841 - z: -31.3182755476 - - speed: 3.65555548668 - acceleration_s: -0.0843506970322 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.966223331 + y: 347.593491841 + z: -31.3182755476 + theta: -1.83391813803 + kappa: 0.000306198182417 + s: 17.91336108684 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0843506970322 relative_time: 5.940000057220459 - theta: -1.83391813803 - accumulated_s: 17.91336108684 -} -adc_trajectory_point { - x: -128.966223331 - y: 347.593491841 - z: -31.3182755476 - - speed: 3.65555548668 - acceleration_s: -0.0843506970322 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.966223331 + y: 347.593491841 + z: -31.3182755476 + theta: -1.83391813803 + kappa: 0.000306198182417 + s: 17.94991664174 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0843506970322 relative_time: 5.940000057220459 - theta: -1.83391813803 - accumulated_s: 17.94991664174 -} -adc_trajectory_point { - x: -128.985374137 - y: 347.522983376 - z: -31.3178532086 - - speed: 3.65555548668 - acceleration_s: -0.166950694257 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.985374137 + y: 347.522983376 + z: -31.3178532086 + theta: -1.83398346852 + kappa: 0.000306198182417 + s: 17.98647219654 + dkappa: 0 + } + v: 3.65555548668 + a: -0.166950694257 relative_time: 5.9600000381469727 - theta: -1.83398346852 - accumulated_s: 17.98647219654 -} -adc_trajectory_point { - x: -128.994965177 - y: 347.487720583 - z: -31.3176200092 - - speed: 3.65555548668 - acceleration_s: -0.0204511831544 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.994965177 + y: 347.487720583 + z: -31.3176200092 + theta: -1.83403976228 + kappa: 0.000306198182417 + s: 18.02302775144 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0204511831544 relative_time: 5.9700000286102295 - theta: -1.83403976228 - accumulated_s: 18.02302775144 -} -adc_trajectory_point { - x: -129.004474712 - y: 347.452464119 - z: -31.3176097563 - - speed: 3.65555548668 - acceleration_s: -0.0320633572315 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.004474712 + y: 347.452464119 + z: -31.3176097563 + theta: -1.83403677768 + kappa: 0.000306198182417 + s: 18.05958330634 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0320633572315 relative_time: 5.9800000190734863 - theta: -1.83403677768 - accumulated_s: 18.05958330634 -} -adc_trajectory_point { - x: -129.013974239 - y: 347.41719439 - z: -31.3173825247 - - speed: 3.65555548668 - acceleration_s: -0.0599299942827 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.013974239 + y: 347.41719439 + z: -31.3173825247 + theta: -1.83402678259 + kappa: 0.000306198182417 + s: 18.09613886114 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0599299942827 relative_time: 5.9900000095367432 - theta: -1.83402678259 - accumulated_s: 18.09613886114 -} -adc_trajectory_point { - x: -129.023503848 - y: 347.381925744 - z: -31.3173442446 - - speed: 3.65555548668 - acceleration_s: 0.046905108494 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.023503848 + y: 347.381925744 + z: -31.3173442446 + theta: -1.83408365707 + kappa: 0.000306198182417 + s: 18.13269441604 + dkappa: 0 + } + v: 3.65555548668 + a: 0.046905108494 relative_time: 6 - theta: -1.83408365707 - accumulated_s: 18.13269441604 -} -adc_trajectory_point { - x: -129.032967857 - y: 347.346680499 - z: -31.3172769025 - - speed: 3.65277767181 - acceleration_s: -0.0940034228063 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.032967857 + y: 347.346680499 + z: -31.3172769025 + theta: -1.83411593178 + kappa: 0.000306198182417 + s: 18.16922219274 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0940034228063 relative_time: 6.0099999904632568 - theta: -1.83411593178 - accumulated_s: 18.16922219274 -} -adc_trajectory_point { - x: -129.042459873 - y: 347.311387587 - z: -31.3172792448 - - speed: 3.65277767181 - acceleration_s: -0.00645543837631 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.042459873 + y: 347.311387587 + z: -31.3172792448 + theta: -1.83414534893 + kappa: 0.000306198182417 + s: 18.20574996944 + dkappa: 0 + } + v: 3.65277767181 + a: -0.00645543837631 relative_time: 6.0199999809265137 - theta: -1.83414534893 - accumulated_s: 18.20574996944 -} -adc_trajectory_point { - x: -129.051890313 - y: 347.276123018 - z: -31.3172597084 - - speed: 3.65277767181 - acceleration_s: -0.116689519955 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.051890313 + y: 347.276123018 + z: -31.3172597084 + theta: -1.83415775234 + kappa: 0.000306198182417 + s: 18.24227774624 + dkappa: 0 + } + v: 3.65277767181 + a: -0.116689519955 relative_time: 6.0299999713897705 - theta: -1.83415775234 - accumulated_s: 18.24227774624 -} -adc_trajectory_point { - x: -129.061341013 - y: 347.240850585 - z: -31.317135131 - - speed: 3.65277767181 - acceleration_s: -0.0758492513875 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.061341013 + y: 347.240850585 + z: -31.317135131 + theta: -1.83417909744 + kappa: 0.000306198182417 + s: 18.27880552294 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0758492513875 relative_time: 6.0399999618530273 - theta: -1.83417909744 - accumulated_s: 18.27880552294 -} -adc_trajectory_point { - x: -129.070799785 - y: 347.20560676 - z: -31.3171576904 - - speed: 3.65277767181 - acceleration_s: -0.0758492513875 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.070799785 + y: 347.20560676 + z: -31.3171576904 + theta: -1.83422177769 + kappa: 0.000306198182417 + s: 18.31533329964 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0758492513875 relative_time: 6.0499999523162842 - theta: -1.83422177769 - accumulated_s: 18.31533329964 -} -adc_trajectory_point { - x: -129.080239181 - y: 347.170351132 - z: -31.3171366313 - - speed: 3.65277767181 - acceleration_s: -0.0493748088374 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.080239181 + y: 347.170351132 + z: -31.3171366313 + theta: -1.83423459994 + kappa: 0.000306198182417 + s: 18.35186107634 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0493748088374 relative_time: 6.059999942779541 - theta: -1.83423459994 - accumulated_s: 18.35186107634 -} -adc_trajectory_point { - x: -129.089707704 - y: 347.135114686 - z: -31.3172168136 - - speed: 3.65277767181 - acceleration_s: -0.0393327362459 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.089707704 + y: 347.135114686 + z: -31.3172168136 + theta: -1.83426627105 + kappa: 0.000306198182417 + s: 18.38838885304 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0393327362459 relative_time: 6.0699999332427979 - theta: -1.83426627105 - accumulated_s: 18.38838885304 -} -adc_trajectory_point { - x: -129.099169334 - y: 347.099885947 - z: -31.3171445988 - - speed: 3.65277767181 - acceleration_s: -0.111501511766 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.099169334 + y: 347.099885947 + z: -31.3171445988 + theta: -1.83428312571 + kappa: 0.000306198182417 + s: 18.42491662984 + dkappa: 0 + } + v: 3.65277767181 + a: -0.111501511766 relative_time: 6.0800001621246338 - theta: -1.83428312571 - accumulated_s: 18.42491662984 -} -adc_trajectory_point { - x: -129.099169334 - y: 347.099885947 - z: -31.3171445988 - - speed: 3.65555548668 - acceleration_s: -0.111501511766 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.099169334 + y: 347.099885947 + z: -31.3171445988 + theta: -1.83428312571 + kappa: 0.000306198182417 + s: 18.46147218464 + dkappa: 0 + } + v: 3.65555548668 + a: -0.111501511766 relative_time: 6.0800001621246338 - theta: -1.83428312571 - accumulated_s: 18.46147218464 -} -adc_trajectory_point { - x: -129.118160491 - y: 347.029486236 - z: -31.3170640124 - - speed: 3.65555548668 - acceleration_s: -0.121724568634 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.118160491 + y: 347.029486236 + z: -31.3170640124 + theta: -1.83429098538 + kappa: 0.000306198182417 + s: 18.49802773954 + dkappa: 0 + } + v: 3.65555548668 + a: -0.121724568634 relative_time: 6.1000001430511475 - theta: -1.83429098538 - accumulated_s: 18.49802773954 -} -adc_trajectory_point { - x: -129.127653655 - y: 346.994317179 - z: -31.3171625827 - - speed: 3.65555548668 - acceleration_s: -0.0777160575482 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.127653655 + y: 346.994317179 + z: -31.3171625827 + theta: -1.8342636569 + kappa: 0.000306198182417 + s: 18.53458329444 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0777160575482 relative_time: 6.1100001335144043 - theta: -1.8342636569 - accumulated_s: 18.53458329444 -} -adc_trajectory_point { - x: -129.137223893 - y: 346.959146591 - z: -31.3170938743 - - speed: 3.65555548668 - acceleration_s: -0.0415945226229 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.137223893 + y: 346.959146591 + z: -31.3170938743 + theta: -1.83429679067 + kappa: 0.000306198182417 + s: 18.57113884924 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0415945226229 relative_time: 6.1200001239776611 - theta: -1.83429679067 - accumulated_s: 18.57113884924 -} -adc_trajectory_point { - x: -129.146768627 - y: 346.923996494 - z: -31.3171985019 - - speed: 3.65833330154 - acceleration_s: -0.067983565307 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.146768627 + y: 346.923996494 + z: -31.3171985019 + theta: -1.83428711919 + kappa: 0.000306198182417 + s: 18.60772218224 + dkappa: 0 + } + v: 3.65833330154 + a: -0.067983565307 relative_time: 6.130000114440918 - theta: -1.83428711919 - accumulated_s: 18.60772218224 -} -adc_trajectory_point { - x: -129.15633304 - y: 346.888835191 - z: -31.3170995079 - - speed: 3.65833330154 - acceleration_s: -0.0289771275254 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.15633304 + y: 346.888835191 + z: -31.3170995079 + theta: -1.83425172795 + kappa: 0.000306198182417 + s: 18.64430551534 + dkappa: 0 + } + v: 3.65833330154 + a: -0.0289771275254 relative_time: 6.1400001049041748 - theta: -1.83425172795 - accumulated_s: 18.64430551534 -} -adc_trajectory_point { - x: -129.165939199 - y: 346.853721589 - z: -31.317190879 - - speed: 3.65833330154 - acceleration_s: -0.154710205289 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.165939199 + y: 346.853721589 + z: -31.317190879 + theta: -1.83428649298 + kappa: 0.000306198182417 + s: 18.68088884834 + dkappa: 0 + } + v: 3.65833330154 + a: -0.154710205289 relative_time: 6.1500000953674316 - theta: -1.83428649298 - accumulated_s: 18.68088884834 -} -adc_trajectory_point { - x: -129.175521357 - y: 346.818567896 - z: -31.317110558 - - speed: 3.65833330154 - acceleration_s: 0.0080517503164 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.175521357 + y: 346.818567896 + z: -31.317110558 + theta: -1.83426406695 + kappa: 0.000306198182417 + s: 18.71747218134 + dkappa: 0 + } + v: 3.65833330154 + a: 0.0080517503164 relative_time: 6.1600000858306885 - theta: -1.83426406695 - accumulated_s: 18.71747218134 -} -adc_trajectory_point { - x: -129.185120789 - y: 346.783470788 - z: -31.3172390172 - - speed: 3.65555548668 - acceleration_s: -0.173907420916 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.185120789 + y: 346.783470788 + z: -31.3172390172 + theta: -1.83427122892 + kappa: 0.000306198182417 + s: 18.75402773614 + dkappa: 0 + } + v: 3.65555548668 + a: -0.173907420916 relative_time: 6.1700000762939453 - theta: -1.83427122892 - accumulated_s: 18.75402773614 -} -adc_trajectory_point { - x: -129.194717279 - y: 346.748338709 - z: -31.3171520624 - - speed: 3.65555548668 - acceleration_s: -0.0136844627285 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.194717279 + y: 346.748338709 + z: -31.3171520624 + theta: -1.83425937592 + kappa: 0.000306198182417 + s: 18.79058329104 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0136844627285 relative_time: 6.1800000667572021 - theta: -1.83425937592 - accumulated_s: 18.79058329104 -} -adc_trajectory_point { - x: -129.204289177 - y: 346.713234305 - z: -31.3172889994 - - speed: 3.65555548668 - acceleration_s: -0.0766979134373 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.204289177 + y: 346.713234305 + z: -31.3172889994 + theta: -1.8342377925 + kappa: 0.000306198182417 + s: 18.82713884594 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0766979134373 relative_time: 6.190000057220459 - theta: -1.8342377925 - accumulated_s: 18.82713884594 -} -adc_trajectory_point { - x: -129.204289177 - y: 346.713234305 - z: -31.3172889994 - - speed: 3.65555548668 - acceleration_s: -0.0766979134373 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.204289177 + y: 346.713234305 + z: -31.3172889994 + theta: -1.8342377925 + kappa: 0.000306198182417 + s: 18.86369440084 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0766979134373 relative_time: 6.190000057220459 - theta: -1.8342377925 - accumulated_s: 18.86369440084 -} -adc_trajectory_point { - x: -129.22347362 - y: 346.643051338 - z: -31.3173899129 - - speed: 3.65555548668 - acceleration_s: -0.0928290252008 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.22347362 + y: 346.643051338 + z: -31.3173899129 + theta: -1.83427336071 + kappa: 0.000306198182417 + s: 18.90024995564 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0928290252008 relative_time: 6.2100000381469727 - theta: -1.83427336071 - accumulated_s: 18.90024995564 -} -adc_trajectory_point { - x: -129.233027734 - y: 346.607958597 - z: -31.3174155634 - - speed: 3.65555548668 - acceleration_s: -0.0608976298893 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.233027734 + y: 346.607958597 + z: -31.3174155634 + theta: -1.83427157498 + kappa: 0.000306198182417 + s: 18.93680551054 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0608976298893 relative_time: 6.2200000286102295 - theta: -1.83427157498 - accumulated_s: 18.93680551054 -} -adc_trajectory_point { - x: -129.24257554 - y: 346.572877518 - z: -31.3175391993 - - speed: 3.65555548668 - acceleration_s: -0.0807961446278 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.24257554 + y: 346.572877518 + z: -31.3175391993 + theta: -1.83426821445 + kappa: 0.000306198182417 + s: 18.97336106544 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0807961446278 relative_time: 6.2300000190734863 - theta: -1.83426821445 - accumulated_s: 18.97336106544 -} -adc_trajectory_point { - x: -129.24257554 - y: 346.572877518 - z: -31.3175391993 - - speed: 3.65277767181 - acceleration_s: -0.0807961446278 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.24257554 + y: 346.572877518 + z: -31.3175391993 + theta: -1.83426821445 + kappa: 0.000306198182417 + s: 19.00988884214 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0807961446278 relative_time: 6.2300000190734863 - theta: -1.83426821445 - accumulated_s: 19.00988884214 -} -adc_trajectory_point { - x: -129.261661659 - y: 346.502707847 - z: -31.3178131804 - - speed: 3.65000009537 - acceleration_s: 0.0277393465352 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.261661659 + y: 346.502707847 + z: -31.3178131804 + theta: -1.83432744281 + kappa: 0.000306198182417 + s: 19.04638884304 + dkappa: 0 + } + v: 3.65000009537 + a: 0.0277393465352 relative_time: 6.25 - theta: -1.83432744281 - accumulated_s: 19.04638884304 -} -adc_trajectory_point { - x: -129.27116566 - y: 346.467611702 - z: -31.3180493098 - - speed: 3.65000009537 - acceleration_s: 0.0201547352708 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.27116566 + y: 346.467611702 + z: -31.3180493098 + theta: -1.83433005243 + kappa: 0.000306198182417 + s: 19.08288884404 + dkappa: 0 + } + v: 3.65000009537 + a: 0.0201547352708 relative_time: 6.2599999904632568 - theta: -1.83433005243 - accumulated_s: 19.08288884404 -} -adc_trajectory_point { - x: -129.28069172 - y: 346.432518376 - z: -31.3181998422 - - speed: 3.6472222805 - acceleration_s: -3.78345936202e-05 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.28069172 + y: 346.432518376 + z: -31.3181998422 + theta: -1.83436799068 + kappa: 0.000306198182417 + s: 19.11936106684 + dkappa: 0 + } + v: 3.6472222805 + a: -3.78345936202e-05 relative_time: 6.2699999809265137 - theta: -1.83436799068 - accumulated_s: 19.11936106684 -} -adc_trajectory_point { - x: -129.290214216 - y: 346.397426349 - z: -31.3184478153 - - speed: 3.6472222805 - acceleration_s: 0.0270069061289 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.290214216 + y: 346.397426349 + z: -31.3184478153 + theta: -1.83440787542 + kappa: 0.000306198182417 + s: 19.15583328964 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0270069061289 relative_time: 6.2799999713897705 - theta: -1.83440787542 - accumulated_s: 19.15583328964 -} -adc_trajectory_point { - x: -129.299697771 - y: 346.36232914 - z: -31.3187334156 - - speed: 3.6472222805 - acceleration_s: -0.0223318928808 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.299697771 + y: 346.36232914 + z: -31.3187334156 + theta: -1.83441522696 + kappa: 0.000306198182417 + s: 19.19230551244 + dkappa: 0 + } + v: 3.6472222805 + a: -0.0223318928808 relative_time: 6.2899999618530273 - theta: -1.83441522696 - accumulated_s: 19.19230551244 -} -adc_trajectory_point { - x: -129.30921575 - y: 346.327241022 - z: -31.3190805996 - - speed: 3.6472222805 - acceleration_s: -0.0223318928808 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.30921575 + y: 346.327241022 + z: -31.3190805996 + theta: -1.83447799964 + kappa: 0.000306198182417 + s: 19.22877773524 + dkappa: 0 + } + v: 3.6472222805 + a: -0.0223318928808 relative_time: 6.2999999523162842 - theta: -1.83447799964 - accumulated_s: 19.22877773524 -} -adc_trajectory_point { - x: -129.31870989 - y: 346.292146098 - z: -31.3193545844 - - speed: 3.6472222805 - acceleration_s: -0.0226427361261 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.31870989 + y: 346.292146098 + z: -31.3193545844 + theta: -1.83451173078 + kappa: 0.000306198182417 + s: 19.26524995804 + dkappa: 0 + } + v: 3.6472222805 + a: -0.0226427361261 relative_time: 6.309999942779541 - theta: -1.83451173078 - accumulated_s: 19.26524995804 -} -adc_trajectory_point { - x: -129.328200009 - y: 346.257048146 - z: -31.319717533 - - speed: 3.6472222805 - acceleration_s: 0.0168420478447 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.328200009 + y: 346.257048146 + z: -31.319717533 + theta: -1.83454723527 + kappa: 0.000306198182417 + s: 19.30172218084 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0168420478447 relative_time: 6.3199999332427979 - theta: -1.83454723527 - accumulated_s: 19.30172218084 -} -adc_trajectory_point { - x: -129.337699279 - y: 346.221964525 - z: -31.3200687738 - - speed: 3.6472222805 - acceleration_s: 0.0134572723884 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.337699279 + y: 346.221964525 + z: -31.3200687738 + theta: -1.83459977678 + kappa: 0.000306198182417 + s: 19.33819440364 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0134572723884 relative_time: 6.3300001621246338 - theta: -1.83459977678 - accumulated_s: 19.33819440364 -} -adc_trajectory_point { - x: -129.347183501 - y: 346.186866407 - z: -31.3205622882 - - speed: 3.6472222805 - acceleration_s: -0.0429886752916 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.347183501 + y: 346.186866407 + z: -31.3205622882 + theta: -1.83462852659 + kappa: 0.000306198182417 + s: 19.37466662644 + dkappa: 0 + } + v: 3.6472222805 + a: -0.0429886752916 relative_time: 6.3400001525878906 - theta: -1.83462852659 - accumulated_s: 19.37466662644 -} -adc_trajectory_point { - x: -129.356636595 - y: 346.151760793 - z: -31.3209341029 - - speed: 3.65000009537 - acceleration_s: -0.0429886752916 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.356636595 + y: 346.151760793 + z: -31.3209341029 + theta: -1.83464524903 + kappa: 0.000306198182417 + s: 19.41116662744 + dkappa: 0 + } + v: 3.65000009537 + a: -0.0429886752916 relative_time: 6.3500001430511475 - theta: -1.83464524903 - accumulated_s: 19.41116662744 -} -adc_trajectory_point { - x: -129.366116578 - y: 346.116670792 - z: -31.3213783717 - - speed: 3.65000009537 - acceleration_s: -0.0344350005933 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.366116578 + y: 346.116670792 + z: -31.3213783717 + theta: -1.8346970933 + kappa: 0.000306198182417 + s: 19.44766662834 + dkappa: 0 + } + v: 3.65000009537 + a: -0.0344350005933 relative_time: 6.3600001335144043 - theta: -1.8346970933 - accumulated_s: 19.44766662834 -} -adc_trajectory_point { - x: -129.375580078 - y: 346.081570938 - z: -31.3217631578 - - speed: 3.65277767181 - acceleration_s: -0.0155522188036 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.375580078 + y: 346.081570938 + z: -31.3217631578 + theta: -1.83473265181 + kappa: 0.000306198182417 + s: 19.48419440504 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0155522188036 relative_time: 6.3700001239776611 - theta: -1.83473265181 - accumulated_s: 19.48419440504 -} -adc_trajectory_point { - x: -129.385038758 - y: 346.046469238 - z: -31.3222754272 - - speed: 3.65277767181 - acceleration_s: 0.00546380045835 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.385038758 + y: 346.046469238 + z: -31.3222754272 + theta: -1.83476715968 + kappa: 0.000306198182417 + s: 19.52072218184 + dkappa: 0 + } + v: 3.65277767181 + a: 0.00546380045835 relative_time: 6.380000114440918 - theta: -1.83476715968 - accumulated_s: 19.52072218184 -} -adc_trajectory_point { - x: -129.394471084 - y: 346.011374456 - z: -31.3226575432 - - speed: 3.65277767181 - acceleration_s: -0.0777018669801 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.394471084 + y: 346.011374456 + z: -31.3226575432 + theta: -1.83479002852 + kappa: 0.000306198182417 + s: 19.55724995854 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0777018669801 relative_time: 6.3900001049041748 - theta: -1.83479002852 - accumulated_s: 19.55724995854 -} -adc_trajectory_point { - x: -129.394471084 - y: 346.011374456 - z: -31.3226575432 - - speed: 3.65277767181 - acceleration_s: -0.0777018669801 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.394471084 + y: 346.011374456 + z: -31.3226575432 + theta: -1.83479002852 + kappa: 0.000306198182417 + s: 19.59377773524 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0777018669801 relative_time: 6.3900001049041748 - theta: -1.83479002852 - accumulated_s: 19.59377773524 -} -adc_trajectory_point { - x: -129.413317017 - y: 345.941201373 - z: -31.323369341 - - speed: 3.65277767181 - acceleration_s: -0.0862688680924 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.413317017 + y: 345.941201373 + z: -31.323369341 + theta: -1.83485060831 + kappa: 0.000306198182417 + s: 19.63030551194 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0862688680924 relative_time: 6.4100000858306885 - theta: -1.83485060831 - accumulated_s: 19.63030551194 -} -adc_trajectory_point { - x: -129.422707584 - y: 345.906143231 - z: -31.3237910457 - - speed: 3.65277767181 - acceleration_s: -0.180415417519 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.422707584 + y: 345.906143231 + z: -31.3237910457 + theta: -1.83485909853 + kappa: 0.000306198182417 + s: 19.66683328864 + dkappa: 0 + } + v: 3.65277767181 + a: -0.180415417519 relative_time: 6.4200000762939453 - theta: -1.83485909853 - accumulated_s: 19.66683328864 -} -adc_trajectory_point { - x: -129.432143564 - y: 345.871078195 - z: -31.3240548242 - - speed: 3.65277767181 - acceleration_s: 0.0094313715807 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.432143564 + y: 345.871078195 + z: -31.3240548242 + theta: -1.8348882783 + kappa: 0.000306198182417 + s: 19.70336106544 + dkappa: 0 + } + v: 3.65277767181 + a: 0.0094313715807 relative_time: 6.4300000667572021 - theta: -1.8348882783 - accumulated_s: 19.70336106544 -} -adc_trajectory_point { - x: -129.441548011 - y: 345.836032091 - z: -31.3244027384 - - speed: 3.65277767181 - acceleration_s: -0.121457069227 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.441548011 + y: 345.836032091 + z: -31.3244027384 + theta: -1.8349131293 + kappa: 0.000306198182417 + s: 19.73988884214 + dkappa: 0 + } + v: 3.65277767181 + a: -0.121457069227 relative_time: 6.440000057220459 - theta: -1.8349131293 - accumulated_s: 19.73988884214 -} -adc_trajectory_point { - x: -129.441548011 - y: 345.836032091 - z: -31.3244027384 - - speed: 3.6472222805 - acceleration_s: -0.121457069227 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.441548011 + y: 345.836032091 + z: -31.3244027384 + theta: -1.8349131293 + kappa: 0.000306198182417 + s: 19.77636106494 + dkappa: 0 + } + v: 3.6472222805 + a: -0.121457069227 relative_time: 6.440000057220459 - theta: -1.8349131293 - accumulated_s: 19.77636106494 -} -adc_trajectory_point { - x: -129.460422038 - y: 345.765960823 - z: -31.3248903314 - - speed: 3.6472222805 - acceleration_s: -0.0917973651491 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.460422038 + y: 345.765960823 + z: -31.3248903314 + theta: -1.83494818864 + kappa: 0.000306198182417 + s: 19.81283328774 + dkappa: 0 + } + v: 3.6472222805 + a: -0.0917973651491 relative_time: 6.4600000381469727 - theta: -1.83494818864 - accumulated_s: 19.81283328774 -} -adc_trajectory_point { - x: -129.469852748 - y: 345.730945114 - z: -31.3251484316 - - speed: 3.65277767181 - acceleration_s: -0.0846483845587 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.469852748 + y: 345.730945114 + z: -31.3251484316 + theta: -1.83495723802 + kappa: 0.000306198182417 + s: 19.84936106444 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0846483845587 relative_time: 6.4700000286102295 - theta: -1.83495723802 - accumulated_s: 19.84936106444 -} -adc_trajectory_point { - x: -129.479317847 - y: 345.69594344 - z: -31.3253113199 - - speed: 3.65277767181 - acceleration_s: -0.0746387294766 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.479317847 + y: 345.69594344 + z: -31.3253113199 + theta: -1.83496375991 + kappa: 0.000306198182417 + s: 19.88588884114 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0746387294766 relative_time: 6.4800000190734863 - theta: -1.83496375991 - accumulated_s: 19.88588884114 -} -adc_trajectory_point { - x: -129.488778186 - y: 345.660933118 - z: -31.3255431205 - - speed: 3.65277767181 - acceleration_s: -0.0300390884564 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.488778186 + y: 345.660933118 + z: -31.3255431205 + theta: -1.8349934192 + kappa: 0.000306198182417 + s: 19.92241661784 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0300390884564 relative_time: 6.4900000095367432 - theta: -1.8349934192 - accumulated_s: 19.92241661784 -} -adc_trajectory_point { - x: -129.498214949 - y: 345.625922892 - z: -31.3257153593 - - speed: 3.65277767181 - acceleration_s: -0.0185303335792 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.498214949 + y: 345.625922892 + z: -31.3257153593 + theta: -1.83494739731 + kappa: 0.000306198182417 + s: 19.95894439464 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0185303335792 relative_time: 6.5 - theta: -1.83494739731 - accumulated_s: 19.95894439464 -} -adc_trajectory_point { - x: -129.507687542 - y: 345.590936906 - z: -31.3258919828 - - speed: 3.6472222805 - acceleration_s: -0.0500041541476 - curvature: 0.000344473001902 - curvature_change_rate: 0.00104942382287 +} +trajectory_point { + path_point { + x: -129.507687542 + y: 345.590936906 + z: -31.3258919828 + theta: -1.83497135339 + kappa: 0.000344473001902 + s: 19.99541661744 + dkappa: 0.00104942382287 + } + v: 3.6472222805 + a: -0.0500041541476 relative_time: 6.5099999904632568 - theta: -1.83497135339 - accumulated_s: 19.99541661744 -} -adc_trajectory_point { - x: -129.517164619 - y: 345.555963603 - z: -31.3259384055 - - speed: 3.6472222805 - acceleration_s: -0.100189193698 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.517164619 + y: 345.555963603 + z: -31.3259384055 + theta: -1.83498922676 + kappa: 0.000344473001902 + s: 20.03188884024 + dkappa: 0 + } + v: 3.6472222805 + a: -0.100189193698 relative_time: 6.5199999809265137 - theta: -1.83498922676 - accumulated_s: 20.03188884024 -} -adc_trajectory_point { - x: -129.526626922 - y: 345.52100996 - z: -31.3260490689 - - speed: 3.64444446564 - acceleration_s: -0.124155160463 - curvature: 0.000306198182417 - curvature_change_rate: -0.00105022369926 +} +trajectory_point { + path_point { + x: -129.526626922 + y: 345.52100996 + z: -31.3260490689 + theta: -1.83499340889 + kappa: 0.000306198182417 + s: 20.06833328484 + dkappa: -0.00105022369926 + } + v: 3.64444446564 + a: -0.124155160463 relative_time: 6.5299999713897705 - theta: -1.83499340889 - accumulated_s: 20.06833328484 -} -adc_trajectory_point { - x: -129.536081936 - y: 345.486043899 - z: -31.3260735376 - - speed: 3.64444446564 - acceleration_s: -0.0670091040972 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.536081936 + y: 345.486043899 + z: -31.3260735376 + theta: -1.83499570125 + kappa: 0.000306198182417 + s: 20.10477772954 + dkappa: 0 + } + v: 3.64444446564 + a: -0.0670091040972 relative_time: 6.5399999618530273 - theta: -1.83499570125 - accumulated_s: 20.10477772954 -} -adc_trajectory_point { - x: -129.545535788 - y: 345.451094071 - z: -31.3261832111 - - speed: 3.64166665077 - acceleration_s: -0.0408489272938 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.545535788 + y: 345.451094071 + z: -31.3261832111 + theta: -1.83501733108 + kappa: 0.000306198182417 + s: 20.14119439604 + dkappa: 0 + } + v: 3.64166665077 + a: -0.0408489272938 relative_time: 6.5499999523162842 - theta: -1.83501733108 - accumulated_s: 20.14119439604 -} -adc_trajectory_point { - x: -129.554993532 - y: 345.41615812 - z: -31.3260969017 - - speed: 3.64166665077 - acceleration_s: -0.132184730869 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.554993532 + y: 345.41615812 + z: -31.3260969017 + theta: -1.83503692337 + kappa: 0.000306198182417 + s: 20.17761106254 + dkappa: 0 + } + v: 3.64166665077 + a: -0.132184730869 relative_time: 6.559999942779541 - theta: -1.83503692337 - accumulated_s: 20.17761106254 -} -adc_trajectory_point { - x: -129.564437439 - y: 345.381213626 - z: -31.3260549838 - - speed: 3.63888883591 - acceleration_s: -0.0357402259984 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.564437439 + y: 345.381213626 + z: -31.3260549838 + theta: -1.83502961453 + kappa: 0.000306198182417 + s: 20.21399995084 + dkappa: 0 + } + v: 3.63888883591 + a: -0.0357402259984 relative_time: 6.5699999332427979 - theta: -1.83502961453 - accumulated_s: 20.21399995084 -} -adc_trajectory_point { - x: -129.573875596 - y: 345.346308868 - z: -31.3259546869 - - speed: 3.63888883591 - acceleration_s: -0.179218478733 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.573875596 + y: 345.346308868 + z: -31.3259546869 + theta: -1.83505595463 + kappa: 0.000306198182417 + s: 20.25038883924 + dkappa: 0 + } + v: 3.63888883591 + a: -0.179218478733 relative_time: 6.5800001621246338 - theta: -1.83505595463 - accumulated_s: 20.25038883924 -} -adc_trajectory_point { - x: -129.583295079 - y: 345.311400863 - z: -31.3258660883 - - speed: 3.63611102104 - acceleration_s: -0.14104756078 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.583295079 + y: 345.311400863 + z: -31.3258660883 + theta: -1.83504353384 + kappa: 0.000306198182417 + s: 20.28674994944 + dkappa: 0 + } + v: 3.63611102104 + a: -0.14104756078 relative_time: 6.5900001525878906 - theta: -1.83504353384 - accumulated_s: 20.28674994944 -} -adc_trajectory_point { - x: -129.592745155 - y: 345.276516173 - z: -31.3256460568 - - speed: 3.63611102104 - acceleration_s: -0.14104756078 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.592745155 + y: 345.276516173 + z: -31.3256460568 + theta: -1.83510684167 + kappa: 0.000306198182417 + s: 20.32311105964 + dkappa: 0 + } + v: 3.63611102104 + a: -0.14104756078 relative_time: 6.6000001430511475 - theta: -1.83510684167 - accumulated_s: 20.32311105964 -} -adc_trajectory_point { - x: -129.602163877 - y: 345.241656153 - z: -31.3255364103 - - speed: 3.63055562973 - acceleration_s: -0.202637106058 - curvature: 0.000344473001902 - curvature_change_rate: 0.00105424137207 +} +trajectory_point { + path_point { + x: -129.602163877 + y: 345.241656153 + z: -31.3255364103 + theta: -1.8351174499 + kappa: 0.000344473001902 + s: 20.35941661594 + dkappa: 0.00105424137207 + } + v: 3.63055562973 + a: -0.202637106058 relative_time: 6.6100001335144043 - theta: -1.8351174499 - accumulated_s: 20.35941661594 -} -adc_trajectory_point { - x: -129.611589604 - y: 345.206780468 - z: -31.325259841 - - speed: 3.63055562973 - acceleration_s: -0.0529375409386 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.611589604 + y: 345.206780468 + z: -31.325259841 + theta: -1.83514459552 + kappa: 0.000344473001902 + s: 20.39572217224 + dkappa: 0 + } + v: 3.63055562973 + a: -0.0529375409386 relative_time: 6.6200001239776611 - theta: -1.83514459552 - accumulated_s: 20.39572217224 -} -adc_trajectory_point { - x: -129.621012792 - y: 345.171960242 - z: -31.3250496518 - - speed: 3.62777781487 - acceleration_s: -0.228524209812 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.621012792 + y: 345.171960242 + z: -31.3250496518 + theta: -1.83520069842 + kappa: 0.000344473001902 + s: 20.43199995044 + dkappa: 0 + } + v: 3.62777781487 + a: -0.228524209812 relative_time: 6.630000114440918 - theta: -1.83520069842 - accumulated_s: 20.43199995044 -} -adc_trajectory_point { - x: -129.630431507 - y: 345.137122284 - z: -31.3246317841 - - speed: 3.62777781487 - acceleration_s: -0.147046015386 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.630431507 + y: 345.137122284 + z: -31.3246317841 + theta: -1.83521659013 + kappa: 0.000344473001902 + s: 20.46827772854 + dkappa: 0 + } + v: 3.62777781487 + a: -0.147046015386 relative_time: 6.6400001049041748 - theta: -1.83521659013 - accumulated_s: 20.46827772854 -} -adc_trajectory_point { - x: -129.639826233 - y: 345.102335135 - z: -31.3244052771 - - speed: 3.625 - acceleration_s: -0.272404638527 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.639826233 + y: 345.102335135 + z: -31.3244052771 + theta: -1.83523313511 + kappa: 0.000344473001902 + s: 20.50452772854 + dkappa: 0 + } + v: 3.625 + a: -0.272404638527 relative_time: 6.6500000953674316 - theta: -1.83523313511 - accumulated_s: 20.50452772854 -} -adc_trajectory_point { - x: -129.649232566 - y: 345.067548398 - z: -31.3239967572 - - speed: 3.625 - acceleration_s: -0.192874921616 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.649232566 + y: 345.067548398 + z: -31.3239967572 + theta: -1.83524611124 + kappa: 0.000344473001902 + s: 20.54077772854 + dkappa: 0 + } + v: 3.625 + a: -0.192874921616 relative_time: 6.6600000858306885 - theta: -1.83524611124 - accumulated_s: 20.54077772854 -} -adc_trajectory_point { - x: -129.658667824 - y: 345.032790706 - z: -31.3236352932 - - speed: 3.62222218513 - acceleration_s: -0.15964150738 - curvature: 0.000382747802778 - curvature_change_rate: 0.00105666629269 +} +trajectory_point { + path_point { + x: -129.658667824 + y: 345.032790706 + z: -31.3236352932 + theta: -1.83528687864 + kappa: 0.000382747802778 + s: 20.57699995044 + dkappa: 0.00105666629269 + } + v: 3.62222218513 + a: -0.15964150738 relative_time: 6.6700000762939453 - theta: -1.83528687864 - accumulated_s: 20.57699995044 -} -adc_trajectory_point { - x: -129.668077114 - y: 344.998025352 - z: -31.3231557216 - - speed: 3.62222218513 - acceleration_s: -0.0776846328398 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.668077114 + y: 344.998025352 + z: -31.3231557216 + theta: -1.83531775266 + kappa: 0.000382747802778 + s: 20.61322217224 + dkappa: 0 + } + v: 3.62222218513 + a: -0.0776846328398 relative_time: 6.6800000667572021 - theta: -1.83531775266 - accumulated_s: 20.61322217224 -} -adc_trajectory_point { - x: -129.677514907 - y: 344.963309309 - z: -31.3228179542 - - speed: 3.6166665554 - acceleration_s: -0.19631417218 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.677514907 + y: 344.963309309 + z: -31.3228179542 + theta: -1.8353728734 + kappa: 0.000382747802778 + s: 20.64938883784 + dkappa: 0 + } + v: 3.6166665554 + a: -0.19631417218 relative_time: 6.690000057220459 - theta: -1.8353728734 - accumulated_s: 20.64938883784 -} -adc_trajectory_point { - x: -129.677514907 - y: 344.963309309 - z: -31.3228179542 - - speed: 3.6166665554 - acceleration_s: -0.19631417218 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.677514907 + y: 344.963309309 + z: -31.3228179542 + theta: -1.8353728734 + kappa: 0.000382747802778 + s: 20.68555550334 + dkappa: 0 + } + v: 3.6166665554 + a: -0.19631417218 relative_time: 6.690000057220459 - theta: -1.8353728734 - accumulated_s: 20.68555550334 -} -adc_trajectory_point { - x: -129.696340921 - y: 344.893907899 - z: -31.3219241276 - - speed: 3.6166665554 - acceleration_s: -0.319462048242 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.696340921 + y: 344.893907899 + z: -31.3219241276 + theta: -1.83542870108 + kappa: 0.000382747802778 + s: 20.72172216894 + dkappa: 0 + } + v: 3.6166665554 + a: -0.319462048242 relative_time: 6.7100000381469727 - theta: -1.83542870108 - accumulated_s: 20.72172216894 -} -adc_trajectory_point { - x: -129.705768851 - y: 344.859209441 - z: -31.3214228358 - - speed: 3.6166665554 - acceleration_s: -0.0709556862685 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.705768851 + y: 344.859209441 + z: -31.3214228358 + theta: -1.83546825617 + kappa: 0.000382747802778 + s: 20.75788883444 + dkappa: 0 + } + v: 3.6166665554 + a: -0.0709556862685 relative_time: 6.7200000286102295 - theta: -1.83546825617 - accumulated_s: 20.75788883444 -} -adc_trajectory_point { - x: -129.715139657 - y: 344.824542555 - z: -31.3210016955 - - speed: 3.61111116409 - acceleration_s: -0.184650990123 - curvature: 0.000459297432768 - curvature_change_rate: 0.00211983587631 +} +trajectory_point { + path_point { + x: -129.715139657 + y: 344.824542555 + z: -31.3210016955 + theta: -1.83547192106 + kappa: 0.000459297432768 + s: 20.79399994614 + dkappa: 0.00211983587631 + } + v: 3.61111116409 + a: -0.184650990123 relative_time: 6.7300000190734863 - theta: -1.83547192106 - accumulated_s: 20.79399994614 -} -adc_trajectory_point { - x: -129.72453811 - y: 344.789848345 - z: -31.3205012884 - - speed: 3.61111116409 - acceleration_s: 0.0243190105165 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.72453811 + y: 344.789848345 + z: -31.3205012884 + theta: -1.83547946165 + kappa: 0.000459297432768 + s: 20.83011105774 + dkappa: 0 + } + v: 3.61111116409 + a: 0.0243190105165 relative_time: 6.7400000095367432 - theta: -1.83547946165 - accumulated_s: 20.83011105774 -} -adc_trajectory_point { - x: -129.733909052 - y: 344.755222142 - z: -31.3200632455 - - speed: 3.60833334923 - acceleration_s: 0.0243190105165 - curvature: 0.00053584710648 - curvature_change_rate: 0.00212146900808 +} +trajectory_point { + path_point { + x: -129.733909052 + y: 344.755222142 + z: -31.3200632455 + theta: -1.8355071408 + kappa: 0.00053584710648 + s: 20.86619439124 + dkappa: 0.00212146900808 + } + v: 3.60833334923 + a: 0.0243190105165 relative_time: 6.75 - theta: -1.8355071408 - accumulated_s: 20.86619439124 -} -adc_trajectory_point { - x: -129.74329153 - y: 344.720570456 - z: -31.3195253564 - - speed: 3.60833334923 - acceleration_s: -0.0802392055238 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.74329153 + y: 344.720570456 + z: -31.3195253564 + theta: -1.8355370792 + kappa: 0.00053584710648 + s: 20.90227772474 + dkappa: 0 + } + v: 3.60833334923 + a: -0.0802392055238 relative_time: 6.7599999904632568 - theta: -1.8355370792 - accumulated_s: 20.90227772474 -} -adc_trajectory_point { - x: -129.752339561 - y: 344.685411672 - z: -31.3193645151 - - speed: 3.60555553436 - acceleration_s: -0.217940655795 - curvature: 0.000612396831201 - curvature_change_rate: 0.00212310485836 +} +trajectory_point { + path_point { + x: -129.752339561 + y: 344.685411672 + z: -31.3193645151 + theta: -1.83540903156 + kappa: 0.000612396831201 + s: 20.93833328004 + dkappa: 0.00212310485836 + } + v: 3.60555553436 + a: -0.217940655795 relative_time: 6.7699999809265137 - theta: -1.83540903156 - accumulated_s: 20.93833328004 -} -adc_trajectory_point { - x: -129.761412977 - y: 344.650285541 - z: -31.3188640121 - - speed: 3.60555553436 - acceleration_s: -0.0888897122952 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.761412977 + y: 344.650285541 + z: -31.3188640121 + theta: -1.83538202008 + kappa: 0.000612396831201 + s: 20.97438883544 + dkappa: 0 + } + v: 3.60555553436 + a: -0.0888897122952 relative_time: 6.7799999713897705 - theta: -1.83538202008 - accumulated_s: 20.97438883544 -} -adc_trajectory_point { - x: -129.770502409 - y: 344.615185695 - z: -31.318396044 - - speed: 3.60555553436 - acceleration_s: -0.0970255434221 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.770502409 + y: 344.615185695 + z: -31.318396044 + theta: -1.83541351809 + kappa: 0.000612396831201 + s: 21.01044439074 + dkappa: 0 + } + v: 3.60555553436 + a: -0.0970255434221 relative_time: 6.7899999618530273 - theta: -1.83541351809 - accumulated_s: 21.01044439074 -} -adc_trajectory_point { - x: -129.779559999 - y: 344.580118708 - z: -31.3179246383 - - speed: 3.6027777195 - acceleration_s: -0.160513943904 - curvature: 0.000727221583477 - curvature_change_rate: 0.00318711730825 +} +trajectory_point { + path_point { + x: -129.779559999 + y: 344.580118708 + z: -31.3179246383 + theta: -1.83541022882 + kappa: 0.000727221583477 + s: 21.04647216794 + dkappa: 0.00318711730825 + } + v: 3.6027777195 + a: -0.160513943904 relative_time: 6.7999999523162842 - theta: -1.83541022882 - accumulated_s: 21.04647216794 -} -adc_trajectory_point { - x: -129.788646354 - y: 344.545016546 - z: -31.3174221944 - - speed: 3.59999990463 - acceleration_s: -0.0569414320492 - curvature: 0.000803771467601 - curvature_change_rate: 0.00212638572645 +} +trajectory_point { + path_point { + x: -129.788646354 + y: 344.545016546 + z: -31.3174221944 + theta: -1.83545382293 + kappa: 0.000803771467601 + s: 21.08247216704 + dkappa: 0.00212638572645 + } + v: 3.59999990463 + a: -0.0569414320492 relative_time: 6.809999942779541 - theta: -1.83545382293 - accumulated_s: 21.08247216704 -} -adc_trajectory_point { - x: -129.797684374 - y: 344.509954644 - z: -31.3169609178 - - speed: 3.59999990463 - acceleration_s: -0.143530273352 - curvature: 0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.797684374 + y: 344.509954644 + z: -31.3169609178 + theta: -1.83542725496 + kappa: 0.000803771467601 + s: 21.11847216604 + dkappa: 0 + } + v: 3.59999990463 + a: -0.143530273352 relative_time: 6.8199999332427979 - theta: -1.83542725496 - accumulated_s: 21.11847216604 -} -adc_trajectory_point { - x: -129.797684374 - y: 344.509954644 - z: -31.3169609178 - - speed: 3.59722232819 - acceleration_s: -0.143530273352 - curvature: 0.000918596439528 - curvature_change_rate: 0.00319204545761 +} +trajectory_point { + path_point { + x: -129.797684374 + y: 344.509954644 + z: -31.3169609178 + theta: -1.83542725496 + kappa: 0.000918596439528 + s: 21.15444438934 + dkappa: 0.00319204545761 + } + v: 3.59722232819 + a: -0.143530273352 relative_time: 6.8199999332427979 - theta: -1.83542725496 - accumulated_s: 21.15444438934 -} -adc_trajectory_point { - x: -129.815815005 - y: 344.439830258 - z: -31.316028866 - - speed: 3.59722232819 - acceleration_s: -0.0390725718343 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.815815005 + y: 344.439830258 + z: -31.316028866 + theta: -1.83543533505 + kappa: 0.000918596439528 + s: 21.19041661264 + dkappa: 0 + } + v: 3.59722232819 + a: -0.0390725718343 relative_time: 6.8400001525878906 - theta: -1.83543533505 - accumulated_s: 21.19041661264 -} -adc_trajectory_point { - x: -129.824892932 - y: 344.404782171 - z: -31.3154866332 - - speed: 3.59722232819 - acceleration_s: -0.0654790775035 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.824892932 + y: 344.404782171 + z: -31.3154866332 + theta: -1.8354392835 + kappa: 0.000918596439528 + s: 21.22638883594 + dkappa: 0 + } + v: 3.59722232819 + a: -0.0654790775035 relative_time: 6.8500001430511475 - theta: -1.8354392835 - accumulated_s: 21.22638883594 -} -adc_trajectory_point { - x: -129.833961849 - y: 344.369744159 - z: -31.3150062934 - - speed: 3.59444451332 - acceleration_s: -0.0690526666074 - curvature: 0.0009951465286 - curvature_change_rate: 0.00212967786228 +} +trajectory_point { + path_point { + x: -129.833961849 + y: 344.369744159 + z: -31.3150062934 + theta: -1.83541983186 + kappa: 0.0009951465286 + s: 21.26233328104 + dkappa: 0.00212967786228 + } + v: 3.59444451332 + a: -0.0690526666074 relative_time: 6.8600001335144043 - theta: -1.83541983186 - accumulated_s: 21.26233328104 -} -adc_trajectory_point { - x: -129.843021746 - y: 344.334719988 - z: -31.3145211916 - - speed: 3.59444451332 - acceleration_s: -0.111774696834 - curvature: 0.00103342160821 - curvature_change_rate: 0.00106483990678 +} +trajectory_point { + path_point { + x: -129.843021746 + y: 344.334719988 + z: -31.3145211916 + theta: -1.83538209833 + kappa: 0.00103342160821 + s: 21.29827772614 + dkappa: 0.00106483990678 + } + v: 3.59444451332 + a: -0.111774696834 relative_time: 6.8700001239776611 - theta: -1.83538209833 - accumulated_s: 21.29827772614 -} -adc_trajectory_point { - x: -129.852095711 - y: 344.29971938 - z: -31.3142224336 - - speed: 3.59444451332 - acceleration_s: -0.126812446225 - curvature: 0.00103342160821 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.852095711 + y: 344.29971938 + z: -31.3142224336 + theta: -1.83537984096 + kappa: 0.00103342160821 + s: 21.33422217134 + dkappa: 0 + } + v: 3.59444451332 + a: -0.126812446225 relative_time: 6.880000114440918 - theta: -1.83537984096 - accumulated_s: 21.33422217134 -} -adc_trajectory_point { - x: -129.861179176 - y: 344.264700586 - z: -31.3137229746 - - speed: 3.59444451332 - acceleration_s: -0.0626922022706 - curvature: 0.0010716967124 - curvature_change_rate: 0.001064840591 +} +trajectory_point { + path_point { + x: -129.861179176 + y: 344.264700586 + z: -31.3137229746 + theta: -1.83536571138 + kappa: 0.0010716967124 + s: 21.37016661644 + dkappa: 0.001064840591 + } + v: 3.59444451332 + a: -0.0626922022706 relative_time: 6.8900001049041748 - theta: -1.83536571138 - accumulated_s: 21.37016661644 -} -adc_trajectory_point { - x: -129.861179176 - y: 344.264700586 - z: -31.3137229746 - - speed: 3.59444451332 - acceleration_s: -0.0626922022706 - curvature: 0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.861179176 + y: 344.264700586 + z: -31.3137229746 + theta: -1.83536571138 + kappa: 0.0010716967124 + s: 21.40611106154 + dkappa: 0 + } + v: 3.59444451332 + a: -0.0626922022706 relative_time: 6.8900001049041748 - theta: -1.83536571138 - accumulated_s: 21.40611106154 -} -adc_trajectory_point { - x: -129.879302997 - y: 344.194676693 - z: -31.3128991006 - - speed: 3.59444451332 - acceleration_s: -0.025684391572 - curvature: 0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.879302997 + y: 344.194676693 + z: -31.3128991006 + theta: -1.8352783275 + kappa: 0.0010716967124 + s: 21.44205550674 + dkappa: 0 + } + v: 3.59444451332 + a: -0.025684391572 relative_time: 6.9100000858306885 - theta: -1.8352783275 - accumulated_s: 21.44205550674 -} -adc_trajectory_point { - x: -129.888383387 - y: 344.159682172 - z: -31.3126146821 - - speed: 3.59444451332 - acceleration_s: -0.0452099946246 - curvature: 0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.888383387 + y: 344.159682172 + z: -31.3126146821 + theta: -1.83526642554 + kappa: 0.0010716967124 + s: 21.47799995184 + dkappa: 0 + } + v: 3.59444451332 + a: -0.0452099946246 relative_time: 6.9200000762939453 - theta: -1.83526642554 - accumulated_s: 21.47799995184 -} -adc_trajectory_point { - x: -129.897496563 - y: 344.124683135 - z: -31.3121939292 - - speed: 3.59444451332 - acceleration_s: -0.031027712531 - curvature: 0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.897496563 + y: 344.124683135 + z: -31.3121939292 + theta: -1.83528810088 + kappa: 0.0010716967124 + s: 21.51394439694 + dkappa: 0 + } + v: 3.59444451332 + a: -0.031027712531 relative_time: 6.9300000667572021 - theta: -1.83528810088 - accumulated_s: 21.51394439694 -} -adc_trajectory_point { - x: -129.906549714 - y: 344.089696197 - z: -31.3119860403 - - speed: 3.59444451332 - acceleration_s: -0.0649721158024 - curvature: 0.00110997184211 - curvature_change_rate: 0.00106484130056 +} +trajectory_point { + path_point { + x: -129.906549714 + y: 344.089696197 + z: -31.3119860403 + theta: -1.83520864764 + kappa: 0.00110997184211 + s: 21.54988884214 + dkappa: 0.00106484130056 + } + v: 3.59444451332 + a: -0.0649721158024 relative_time: 6.940000057220459 - theta: -1.83520864764 - accumulated_s: 21.54988884214 -} -adc_trajectory_point { - x: -129.906549714 - y: 344.089696197 - z: -31.3119860403 - - speed: 3.59444451332 - acceleration_s: -0.0649721158024 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.906549714 + y: 344.089696197 + z: -31.3119860403 + theta: -1.83520864764 + kappa: 0.00110997184211 + s: 21.58583328724 + dkappa: 0 + } + v: 3.59444451332 + a: -0.0649721158024 relative_time: 6.940000057220459 - theta: -1.83520864764 - accumulated_s: 21.58583328724 -} -adc_trajectory_point { - x: -129.924740807 - y: 344.019718613 - z: -31.3114557359 - - speed: 3.59444451332 - acceleration_s: 0.0431314506628 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.924740807 + y: 344.019718613 + z: -31.3114557359 + theta: -1.83516088741 + kappa: 0.00110997184211 + s: 21.62177773234 + dkappa: 0 + } + v: 3.59444451332 + a: 0.0431314506628 relative_time: 6.9600000381469727 - theta: -1.83516088741 - accumulated_s: 21.62177773234 -} -adc_trajectory_point { - x: -129.933843995 - y: 343.984702242 - z: -31.3110922594 - - speed: 3.59444451332 - acceleration_s: 0.0855120684387 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.933843995 + y: 343.984702242 + z: -31.3110922594 + theta: -1.83512542731 + kappa: 0.00110997184211 + s: 21.65772217754 + dkappa: 0 + } + v: 3.59444451332 + a: 0.0855120684387 relative_time: 6.9700000286102295 - theta: -1.83512542731 - accumulated_s: 21.65772217754 -} -adc_trajectory_point { - x: -129.942928386 - y: 343.949727349 - z: -31.3110211371 - - speed: 3.59444451332 - acceleration_s: -0.042027988716 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.942928386 + y: 343.949727349 + z: -31.3110211371 + theta: -1.83509154293 + kappa: 0.00110997184211 + s: 21.69366662264 + dkappa: 0 + } + v: 3.59444451332 + a: -0.042027988716 relative_time: 6.9800000190734863 - theta: -1.83509154293 - accumulated_s: 21.69366662264 -} -adc_trajectory_point { - x: -129.952030428 - y: 343.914740892 - z: -31.3107325239 - - speed: 3.59444451332 - acceleration_s: -0.0416544132959 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.952030428 + y: 343.914740892 + z: -31.3107325239 + theta: -1.83507448019 + kappa: 0.00110997184211 + s: 21.72961106774 + dkappa: 0 + } + v: 3.59444451332 + a: -0.0416544132959 relative_time: 6.9900000095367432 - theta: -1.83507448019 - accumulated_s: 21.72961106774 -} -adc_trajectory_point { - x: -129.961116486 - y: 343.879776377 - z: -31.3106255215 - - speed: 3.59444451332 - acceleration_s: -0.114881221466 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.961116486 + y: 343.879776377 + z: -31.3106255215 + theta: -1.83506696304 + kappa: 0.00110997184211 + s: 21.76555551294 + dkappa: 0 + } + v: 3.59444451332 + a: -0.114881221466 relative_time: 7 - theta: -1.83506696304 - accumulated_s: 21.76555551294 -} -adc_trajectory_point { - x: -129.970203904 - y: 343.844785056 - z: -31.3104857299 - - speed: 3.59166669846 - acceleration_s: 0.0376978566876 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.970203904 + y: 343.844785056 + z: -31.3104857299 + theta: -1.83506482561 + kappa: 0.00110997184211 + s: 21.80147217994 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0376978566876 relative_time: 7.0099999904632568 - theta: -1.83506482561 - accumulated_s: 21.80147217994 -} -adc_trajectory_point { - x: -129.979276763 - y: 343.809816167 - z: -31.3103791531 - - speed: 3.59166669846 - acceleration_s: -0.0933464761497 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.979276763 + y: 343.809816167 + z: -31.3103791531 + theta: -1.83504723227 + kappa: 0.00110997184211 + s: 21.83738884684 + dkappa: 0 + } + v: 3.59166669846 + a: -0.0933464761497 relative_time: 7.0199999809265137 - theta: -1.83504723227 - accumulated_s: 21.83738884684 -} -adc_trajectory_point { - x: -129.988342726 - y: 343.774794385 - z: -31.3102112133 - - speed: 3.59166669846 - acceleration_s: 0.171267740385 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.988342726 + y: 343.774794385 + z: -31.3102112133 + theta: -1.83501777495 + kappa: 0.00110997184211 + s: 21.87330551384 + dkappa: 0 + } + v: 3.59166669846 + a: 0.171267740385 relative_time: 7.0299999713897705 - theta: -1.83501777495 - accumulated_s: 21.87330551384 -} -adc_trajectory_point { - x: -129.997406406 - y: 343.739822131 - z: -31.3101650523 - - speed: 3.59166669846 - acceleration_s: -0.0723029859095 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.997406406 + y: 343.739822131 + z: -31.3101650523 + theta: -1.83502498708 + kappa: 0.00110997184211 + s: 21.90922218084 + dkappa: 0 + } + v: 3.59166669846 + a: -0.0723029859095 relative_time: 7.0399999618530273 - theta: -1.83502498708 - accumulated_s: 21.90922218084 -} -adc_trajectory_point { - x: -130.006485448 - y: 343.704824133 - z: -31.3100451212 - - speed: 3.59444451332 - acceleration_s: 0.077219262431 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.006485448 + y: 343.704824133 + z: -31.3100451212 + theta: -1.83504337574 + kappa: 0.00110997184211 + s: 21.94516662594 + dkappa: 0 + } + v: 3.59444451332 + a: 0.077219262431 relative_time: 7.0499999523162842 - theta: -1.83504337574 - accumulated_s: 21.94516662594 -} -adc_trajectory_point { - x: -130.015525149 - y: 343.669845799 - z: -31.3099869089 - - speed: 3.59444451332 - acceleration_s: -0.105361000335 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.015525149 + y: 343.669845799 + z: -31.3099869089 + theta: -1.83503234343 + kappa: 0.00110997184211 + s: 21.98111107114 + dkappa: 0 + } + v: 3.59444451332 + a: -0.105361000335 relative_time: 7.059999942779541 - theta: -1.83503234343 - accumulated_s: 21.98111107114 -} -adc_trajectory_point { - x: -130.024576615 - y: 343.634843107 - z: -31.3099394264 - - speed: 3.59444451332 - acceleration_s: 0.0627868831247 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.024576615 + y: 343.634843107 + z: -31.3099394264 + theta: -1.83504259135 + kappa: 0.00110997184211 + s: 22.01705551624 + dkappa: 0 + } + v: 3.59444451332 + a: 0.0627868831247 relative_time: 7.0699999332427979 - theta: -1.83504259135 - accumulated_s: 22.01705551624 -} -adc_trajectory_point { - x: -130.033620644 - y: 343.599838135 - z: -31.3100141492 - - speed: 3.59444451332 - acceleration_s: 0.0676183245505 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.033620644 + y: 343.599838135 + z: -31.3100141492 + theta: -1.83506089019 + kappa: 0.00110997184211 + s: 22.05299996134 + dkappa: 0 + } + v: 3.59444451332 + a: 0.0676183245505 relative_time: 7.0800001621246338 - theta: -1.83506089019 - accumulated_s: 22.05299996134 -} -adc_trajectory_point { - x: -130.04261413 - y: 343.564807122 - z: -31.3100484544 - - speed: 3.59166669846 - acceleration_s: 0.0676183245505 - curvature: 0.00114824699823 - curvature_change_rate: 0.00106566559017 +} +trajectory_point { + path_point { + x: -130.04261413 + y: 343.564807122 + z: -31.3100484544 + theta: -1.83501748989 + kappa: 0.00114824699823 + s: 22.08891662834 + dkappa: 0.00106566559017 + } + v: 3.59166669846 + a: 0.0676183245505 relative_time: 7.0900001525878906 - theta: -1.83501748989 - accumulated_s: 22.08891662834 -} -adc_trajectory_point { - x: -130.04261413 - y: 343.564807122 - z: -31.3100484544 - - speed: 3.59166669846 - acceleration_s: 0.0708798665679 - curvature: 0.00114824699823 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.04261413 + y: 343.564807122 + z: -31.3100484544 + theta: -1.83501748989 + kappa: 0.00114824699823 + s: 22.12483329534 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0708798665679 relative_time: 7.0900001525878906 - theta: -1.83501748989 - accumulated_s: 22.12483329534 -} -adc_trajectory_point { - x: -130.060656062 - y: 343.49477692 - z: -31.3101350283 - - speed: 3.58888888359 - acceleration_s: -0.0694072513285 - curvature: 0.00118652218167 - curvature_change_rate: 0.00106649118118 +} +trajectory_point { + path_point { + x: -130.060656062 + y: 343.49477692 + z: -31.3101350283 + theta: -1.83505413531 + kappa: 0.00118652218167 + s: 22.16072218414 + dkappa: 0.00106649118118 + } + v: 3.58888888359 + a: -0.0694072513285 relative_time: 7.1100001335144043 - theta: -1.83505413531 - accumulated_s: 22.16072218414 -} -adc_trajectory_point { - x: -130.069641818 - y: 343.459738761 - z: -31.3101684554 - - speed: 3.58888888359 - acceleration_s: 0.00296150947042 - curvature: 0.00118652218167 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.069641818 + y: 343.459738761 + z: -31.3101684554 + theta: -1.835051506 + kappa: 0.00118652218167 + s: 22.19661107304 + dkappa: 0 + } + v: 3.58888888359 + a: 0.00296150947042 relative_time: 7.1200001239776611 - theta: -1.835051506 - accumulated_s: 22.19661107304 -} -adc_trajectory_point { - x: -130.078660473 - y: 343.424728646 - z: -31.3103492931 - - speed: 3.58611106873 - acceleration_s: 0.0119313787973 - curvature: 0.00118652218167 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.078660473 + y: 343.424728646 + z: -31.3103492931 + theta: -1.83508404737 + kappa: 0.00118652218167 + s: 22.23247218374 + dkappa: 0 + } + v: 3.58611106873 + a: 0.0119313787973 relative_time: 7.130000114440918 - theta: -1.83508404737 - accumulated_s: 22.23247218374 -} -adc_trajectory_point { - x: -130.087640918 - y: 343.389669334 - z: -31.3102647075 - - speed: 3.58611106873 - acceleration_s: 0.117254694412 - curvature: 0.00118652218167 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.087640918 + y: 343.389669334 + z: -31.3102647075 + theta: -1.83506994516 + kappa: 0.00118652218167 + s: 22.26833329444 + dkappa: 0 + } + v: 3.58611106873 + a: 0.117254694412 relative_time: 7.1400001049041748 - theta: -1.83506994516 - accumulated_s: 22.26833329444 -} -adc_trajectory_point { - x: -130.09662663 - y: 343.354619657 - z: -31.3104229178 - - speed: 3.58333325386 - acceleration_s: 0.117254694412 - curvature: 0.00122479739336 - curvature_change_rate: 0.00106814546601 +} +trajectory_point { + path_point { + x: -130.09662663 + y: 343.354619657 + z: -31.3104229178 + theta: -1.83508270945 + kappa: 0.00122479739336 + s: 22.30416662694 + dkappa: 0.00106814546601 + } + v: 3.58333325386 + a: 0.117254694412 relative_time: 7.1500000953674316 - theta: -1.83508270945 - accumulated_s: 22.30416662694 -} -adc_trajectory_point { - x: -130.1056281 - y: 343.319552452 - z: -31.3104638765 - - speed: 3.58333325386 - acceleration_s: 0.145958530996 - curvature: 0.00122479739336 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.1056281 + y: 343.319552452 + z: -31.3104638765 + theta: -1.83510833489 + kappa: 0.00122479739336 + s: 22.33999995944 + dkappa: 0 + } + v: 3.58333325386 + a: 0.145958530996 relative_time: 7.1600000858306885 - theta: -1.83510833489 - accumulated_s: 22.33999995944 -} -adc_trajectory_point { - x: -130.114593512 - y: 343.284493758 - z: -31.3106325427 - - speed: 3.58611106873 - acceleration_s: -0.0127297350305 - curvature: 0.00122479739336 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.114593512 + y: 343.284493758 + z: -31.3106325427 + theta: -1.83510208823 + kappa: 0.00122479739336 + s: 22.37586107014 + dkappa: 0 + } + v: 3.58611106873 + a: -0.0127297350305 relative_time: 7.1700000762939453 - theta: -1.83510208823 - accumulated_s: 22.37586107014 -} -adc_trajectory_point { - x: -130.123569535 - y: 343.249412562 - z: -31.3105624365 - - speed: 3.58611106873 - acceleration_s: 0.0569202468214 - curvature: 0.00122479739336 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.123569535 + y: 343.249412562 + z: -31.3105624365 + theta: -1.83508994072 + kappa: 0.00122479739336 + s: 22.41172218084 + dkappa: 0 + } + v: 3.58611106873 + a: 0.0569202468214 relative_time: 7.1800000667572021 - theta: -1.83508994072 - accumulated_s: 22.41172218084 -} -adc_trajectory_point { - x: -130.132568337 - y: 343.214381013 - z: -31.3106503142 - - speed: 3.58611106873 - acceleration_s: -0.157643290914 - curvature: 0.00126307263419 - curvature_change_rate: 0.0010673188894 +} +trajectory_point { + path_point { + x: -130.132568337 + y: 343.214381013 + z: -31.3106503142 + theta: -1.83511761728 + kappa: 0.00126307263419 + s: 22.44758329154 + dkappa: 0.0010673188894 + } + v: 3.58611106873 + a: -0.157643290914 relative_time: 7.190000057220459 - theta: -1.83511761728 - accumulated_s: 22.44758329154 -} -adc_trajectory_point { - x: -130.132568337 - y: 343.214381013 - z: -31.3106503142 - - speed: 3.58611106873 - acceleration_s: -0.157643290914 - curvature: 0.00126307263419 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.132568337 + y: 343.214381013 + z: -31.3106503142 + theta: -1.83511761728 + kappa: 0.00126307263419 + s: 22.48344440224 + dkappa: 0 + } + v: 3.58611106873 + a: -0.157643290914 relative_time: 7.190000057220459 - theta: -1.83511761728 - accumulated_s: 22.48344440224 -} -adc_trajectory_point { - x: -130.150532675 - y: 343.144269241 - z: -31.3106434494 - - speed: 3.58611106873 - acceleration_s: -0.106311056129 - curvature: 0.00130134790508 - curvature_change_rate: 0.00106731972762 +} +trajectory_point { + path_point { + x: -130.150532675 + y: 343.144269241 + z: -31.3106434494 + theta: -1.83509027941 + kappa: 0.00130134790508 + s: 22.51930551294 + dkappa: 0.00106731972762 + } + v: 3.58611106873 + a: -0.106311056129 relative_time: 7.2100000381469727 - theta: -1.83509027941 - accumulated_s: 22.51930551294 -} -adc_trajectory_point { - x: -130.159529213 - y: 343.109191237 - z: -31.3105427884 - - speed: 3.58611106873 - acceleration_s: 0.115221359315 - curvature: 0.00130134790508 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.159529213 + y: 343.109191237 + z: -31.3105427884 + theta: -1.83506526736 + kappa: 0.00130134790508 + s: 22.55516662364 + dkappa: 0 + } + v: 3.58611106873 + a: 0.115221359315 relative_time: 7.2200000286102295 - theta: -1.83506526736 - accumulated_s: 22.55516662364 -} -adc_trajectory_point { - x: -130.168508102 - y: 343.074132603 - z: -31.310538793 - - speed: 3.58888888359 - acceleration_s: 0.029643046692 - curvature: 0.00130134790508 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.168508102 + y: 343.074132603 + z: -31.310538793 + theta: -1.83505024767 + kappa: 0.00130134790508 + s: 22.59105551244 + dkappa: 0 + } + v: 3.58888888359 + a: 0.029643046692 relative_time: 7.2300000190734863 - theta: -1.83505024767 - accumulated_s: 22.59105551244 -} -adc_trajectory_point { - x: -130.177510972 - y: 343.039079463 - z: -31.3103737189 - - speed: 3.58888888359 - acceleration_s: -0.0147885952996 - curvature: 0.00130134790508 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.177510972 + y: 343.039079463 + z: -31.3103737189 + theta: -1.83501533914 + kappa: 0.00130134790508 + s: 22.62694440124 + dkappa: 0 + } + v: 3.58888888359 + a: -0.0147885952996 relative_time: 7.2400000095367432 - theta: -1.83501533914 - accumulated_s: 22.62694440124 -} -adc_trajectory_point { - x: -130.186526955 - y: 343.004019301 - z: -31.3102239668 - - speed: 3.59166669846 - acceleration_s: -0.0147885952996 - curvature: 0.00137789864791 - curvature_change_rate: 0.00213134316893 +} +trajectory_point { + path_point { + x: -130.186526955 + y: 343.004019301 + z: -31.3102239668 + theta: -1.83499212781 + kappa: 0.00137789864791 + s: 22.66286106824 + dkappa: 0.00213134316893 + } + v: 3.59166669846 + a: -0.0147885952996 relative_time: 7.25 - theta: -1.83499212781 - accumulated_s: 22.66286106824 -} -adc_trajectory_point { - x: -130.19552167 - y: 342.968970379 - z: -31.3100768542 - - speed: 3.59166669846 - acceleration_s: -0.0313511319185 - curvature: 0.00137789864791 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.19552167 + y: 342.968970379 + z: -31.3100768542 + theta: -1.83495186355 + kappa: 0.00137789864791 + s: 22.69877773524 + dkappa: 0 + } + v: 3.59166669846 + a: -0.0313511319185 relative_time: 7.2599999904632568 - theta: -1.83495186355 - accumulated_s: 22.69877773524 -} -adc_trajectory_point { - x: -130.204546417 - y: 342.933922036 - z: -31.3098619198 - - speed: 3.59166669846 - acceleration_s: 0.0902367437011 - curvature: 0.00149272484953 - curvature_change_rate: 0.00319701718626 +} +trajectory_point { + path_point { + x: -130.204546417 + y: 342.933922036 + z: -31.3098619198 + theta: -1.83491460216 + kappa: 0.00149272484953 + s: 22.73469440224 + dkappa: 0.00319701718626 + } + v: 3.59166669846 + a: 0.0902367437011 relative_time: 7.2699999809265137 - theta: -1.83491460216 - accumulated_s: 22.73469440224 -} -adc_trajectory_point { - x: -130.21358433 - y: 342.898865206 - z: -31.3097897591 - - speed: 3.59166669846 - acceleration_s: 0.028531882737 - curvature: 0.00149272484953 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.21358433 + y: 342.898865206 + z: -31.3097897591 + theta: -1.83491524834 + kappa: 0.00149272484953 + s: 22.77061106924 + dkappa: 0 + } + v: 3.59166669846 + a: 0.028531882737 relative_time: 7.2799999713897705 - theta: -1.83491524834 - accumulated_s: 22.77061106924 -} -adc_trajectory_point { - x: -130.222597136 - y: 342.863785475 - z: -31.3095163265 - - speed: 3.59166669846 - acceleration_s: 0.0753780355319 - curvature: 0.00164582695329 - curvature_change_rate: 0.00426270354731 +} +trajectory_point { + path_point { + x: -130.222597136 + y: 342.863785475 + z: -31.3095163265 + theta: -1.83485357612 + kappa: 0.00164582695329 + s: 22.80652773614 + dkappa: 0.00426270354731 + } + v: 3.59166669846 + a: 0.0753780355319 relative_time: 7.2899999618530273 - theta: -1.83485357612 - accumulated_s: 22.80652773614 -} -adc_trajectory_point { - x: -130.231628495 - y: 342.828727264 - z: -31.309449302 - - speed: 3.59166669846 - acceleration_s: 0.0376395358123 - curvature: 0.00164582695329 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.231628495 + y: 342.828727264 + z: -31.309449302 + theta: -1.83482219205 + kappa: 0.00164582695329 + s: 22.84244440314 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0376395358123 relative_time: 7.2999999523162842 - theta: -1.83482219205 - accumulated_s: 22.84244440314 -} -adc_trajectory_point { - x: -130.240663187 - y: 342.793636264 - z: -31.3091299264 - - speed: 3.59444451332 - acceleration_s: 0.0696315812177 - curvature: 0.00179892968375 - curvature_change_rate: 0.00425942673182 +} +trajectory_point { + path_point { + x: -130.240663187 + y: 342.793636264 + z: -31.3091299264 + theta: -1.83478084755 + kappa: 0.00179892968375 + s: 22.87838884834 + dkappa: 0.00425942673182 + } + v: 3.59444451332 + a: 0.0696315812177 relative_time: 7.309999942779541 - theta: -1.83478084755 - accumulated_s: 22.87838884834 -} -adc_trajectory_point { - x: -130.249708453 - y: 342.758569037 - z: -31.3090284392 - - speed: 3.59444451332 - acceleration_s: 0.0344800958841 - curvature: 0.00179892968375 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.249708453 + y: 342.758569037 + z: -31.3090284392 + theta: -1.83474836288 + kappa: 0.00179892968375 + s: 22.91433329344 + dkappa: 0 + } + v: 3.59444451332 + a: 0.0344800958841 relative_time: 7.3199999332427979 - theta: -1.83474836288 - accumulated_s: 22.91433329344 -} -adc_trajectory_point { - x: -130.258778295 - y: 342.723481383 - z: -31.3088150099 - - speed: 3.59166669846 - acceleration_s: 0.0944292546466 - curvature: 0.00210513725798 - curvature_change_rate: 0.00852550083098 +} +trajectory_point { + path_point { + x: -130.258778295 + y: 342.723481383 + z: -31.3088150099 + theta: -1.83471420889 + kappa: 0.00210513725798 + s: 22.95024996044 + dkappa: 0.00852550083098 + } + v: 3.59166669846 + a: 0.0944292546466 relative_time: 7.3300001621246338 - theta: -1.83471420889 - accumulated_s: 22.95024996044 -} -adc_trajectory_point { - x: -130.267817376 - y: 342.68839044 - z: -31.3087048139 - - speed: 3.59166669846 - acceleration_s: 0.0480979808867 - curvature: 0.00210513725798 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.267817376 + y: 342.68839044 + z: -31.3087048139 + theta: -1.83464913536 + kappa: 0.00210513725798 + s: 22.98616662744 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0480979808867 relative_time: 7.3400001525878906 - theta: -1.83464913536 - accumulated_s: 22.98616662744 -} -adc_trajectory_point { - x: -130.276886507 - y: 342.653292831 - z: -31.3084988119 - - speed: 3.59166669846 - acceleration_s: 0.0993478851233 - curvature: 0.00229651859052 - curvature_change_rate: 0.00532848252946 +} +trajectory_point { + path_point { + x: -130.276886507 + y: 342.653292831 + z: -31.3084988119 + theta: -1.83461414728 + kappa: 0.00229651859052 + s: 23.02208329444 + dkappa: 0.00532848252946 + } + v: 3.59166669846 + a: 0.0993478851233 relative_time: 7.3500001430511475 - theta: -1.83461414728 - accumulated_s: 23.02208329444 -} -adc_trajectory_point { - x: -130.285928296 - y: 342.618174026 - z: -31.3084008833 - - speed: 3.59166669846 - acceleration_s: 0.1004974117 - curvature: 0.00229651859052 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.285928296 + y: 342.618174026 + z: -31.3084008833 + theta: -1.83453535113 + kappa: 0.00229651859052 + s: 23.05799996134 + dkappa: 0 + } + v: 3.59166669846 + a: 0.1004974117 relative_time: 7.3600001335144043 - theta: -1.83453535113 - accumulated_s: 23.05799996134 -} -adc_trajectory_point { - x: -130.294970121 - y: 342.583056148 - z: -31.3082660045 - - speed: 3.59166669846 - acceleration_s: 0.0633690466968 - curvature: 0.00244962463489 - curvature_change_rate: 0.00426281326249 +} +trajectory_point { + path_point { + x: -130.294970121 + y: 342.583056148 + z: -31.3082660045 + theta: -1.83448217622 + kappa: 0.00244962463489 + s: 23.09391662834 + dkappa: 0.00426281326249 + } + v: 3.59166669846 + a: 0.0633690466968 relative_time: 7.3700001239776611 - theta: -1.83448217622 - accumulated_s: 23.09391662834 -} -adc_trajectory_point { - x: -130.304013811 - y: 342.5479244 - z: -31.3081754399 - - speed: 3.59166669846 - acceleration_s: 0.0765517437431 - curvature: 0.00244962463489 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.304013811 + y: 342.5479244 + z: -31.3081754399 + theta: -1.83441362412 + kappa: 0.00244962463489 + s: 23.12983329534 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0765517437431 relative_time: 7.380000114440918 - theta: -1.83441362412 - accumulated_s: 23.12983329534 -} -adc_trajectory_point { - x: -130.313059421 - y: 342.512776467 - z: -31.3081546687 - - speed: 3.59166669846 - acceleration_s: 0.16486283758 - curvature: 0.00256445477712 - curvature_change_rate: 0.00319712690159 +} +trajectory_point { + path_point { + x: -130.313059421 + y: 342.512776467 + z: -31.3081546687 + theta: -1.83434890854 + kappa: 0.00256445477712 + s: 23.16574996234 + dkappa: 0.00319712690159 + } + v: 3.59166669846 + a: 0.16486283758 relative_time: 7.3900001049041748 - theta: -1.83434890854 - accumulated_s: 23.16574996234 -} -adc_trajectory_point { - x: -130.322121672 - y: 342.477620614 - z: -31.3080039769 - - speed: 3.59166669846 - acceleration_s: 0.16486283758 - curvature: 0.00256445477712 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.322121672 + y: 342.477620614 + z: -31.3080039769 + theta: -1.83429750296 + kappa: 0.00256445477712 + s: 23.20166662934 + dkappa: 0 + } + v: 3.59166669846 + a: 0.16486283758 relative_time: 7.4000000953674316 - theta: -1.83429750296 - accumulated_s: 23.20166662934 -} -adc_trajectory_point { - x: -130.331166428 - y: 342.442466323 - z: -31.3079969566 - - speed: 3.59166669846 - acceleration_s: 0.0820721228419 - curvature: 0.00267928546864 - curvature_change_rate: 0.00319714219518 +} +trajectory_point { + path_point { + x: -130.331166428 + y: 342.442466323 + z: -31.3079969566 + theta: -1.83420113683 + kappa: 0.00267928546864 + s: 23.23758329634 + dkappa: 0.00319714219518 + } + v: 3.59166669846 + a: 0.0820721228419 relative_time: 7.4100000858306885 - theta: -1.83420113683 - accumulated_s: 23.23758329634 -} -adc_trajectory_point { - x: -130.34020588 - y: 342.407298586 - z: -31.3079012437 - - speed: 3.59166669846 - acceleration_s: 0.0814759711025 - curvature: 0.00267928546864 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.34020588 + y: 342.407298586 + z: -31.3079012437 + theta: -1.8341303526 + kappa: 0.00267928546864 + s: 23.27349996324 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0814759711025 relative_time: 7.4200000762939453 - theta: -1.8341303526 - accumulated_s: 23.27349996324 -} -adc_trajectory_point { - x: -130.349274754 - y: 342.372133407 - z: -31.3079076596 - - speed: 3.59166669846 - acceleration_s: 0.0196518608533 - curvature: 0.00275583979477 - curvature_change_rate: 0.00213144293583 +} +trajectory_point { + path_point { + x: -130.349274754 + y: 342.372133407 + z: -31.3079076596 + theta: -1.83405418753 + kappa: 0.00275583979477 + s: 23.30941663024 + dkappa: 0.00213144293583 + } + v: 3.59166669846 + a: 0.0196518608533 relative_time: 7.4300000667572021 - theta: -1.83405418753 - accumulated_s: 23.30941663024 -} -adc_trajectory_point { - x: -130.358377993 - y: 342.336947744 - z: -31.3077859282 - - speed: 3.59166669846 - acceleration_s: 0.129350664373 - curvature: 0.00275583979477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.358377993 + y: 342.336947744 + z: -31.3077859282 + theta: -1.83399703206 + kappa: 0.00275583979477 + s: 23.34533329724 + dkappa: 0 + } + v: 3.59166669846 + a: 0.129350664373 relative_time: 7.440000057220459 - theta: -1.83399703206 - accumulated_s: 23.34533329724 -} -adc_trajectory_point { - x: -130.358377993 - y: 342.336947744 - z: -31.3077859282 - - speed: 3.59444451332 - acceleration_s: 0.129350664373 - curvature: 0.00275583979477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.358377993 + y: 342.336947744 + z: -31.3077859282 + theta: -1.83399703206 + kappa: 0.00275583979477 + s: 23.38127774234 + dkappa: 0 + } + v: 3.59444451332 + a: 0.129350664373 relative_time: 7.440000057220459 - theta: -1.83399703206 - accumulated_s: 23.38127774234 -} -adc_trajectory_point { - x: -130.376616435 - y: 342.266592228 - z: -31.3076887252 - - speed: 3.59444451332 - acceleration_s: 0.146340192669 - curvature: 0.00275583979477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.376616435 + y: 342.266592228 + z: -31.3076887252 + theta: -1.8338779961 + kappa: 0.00275583979477 + s: 23.41722218754 + dkappa: 0 + } + v: 3.59444451332 + a: 0.146340192669 relative_time: 7.4600000381469727 - theta: -1.8338779961 - accumulated_s: 23.41722218754 -} -adc_trajectory_point { - x: -130.376616435 - y: 342.266592228 - z: -31.3076887252 - - speed: 3.59444451332 - acceleration_s: 0.146340192669 - curvature: 0.00275583979477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.376616435 + y: 342.266592228 + z: -31.3076887252 + theta: -1.8338779961 + kappa: 0.00275583979477 + s: 23.45316663264 + dkappa: 0 + } + v: 3.59444451332 + a: 0.146340192669 relative_time: 7.4600000381469727 - theta: -1.8338779961 - accumulated_s: 23.45316663264 -} -adc_trajectory_point { - x: -130.394901045 - y: 342.196204353 - z: -31.3076158371 - - speed: 3.59722232819 - acceleration_s: 0.117064397227 - curvature: 0.00275583979477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.394901045 + y: 342.196204353 + z: -31.3076158371 + theta: -1.83373853351 + kappa: 0.00275583979477 + s: 23.48913885594 + dkappa: 0 + } + v: 3.59722232819 + a: 0.117064397227 relative_time: 7.4800000190734863 - theta: -1.83373853351 - accumulated_s: 23.48913885594 -} -adc_trajectory_point { - x: -130.404053375 - y: 342.161012492 - z: -31.3075456787 - - speed: 3.59999990463 - acceleration_s: 0.0284211737936 - curvature: 0.0027175627066 - curvature_change_rate: -0.00106325247733 +} +trajectory_point { + path_point { + x: -130.404053375 + y: 342.161012492 + z: -31.3075456787 + theta: -1.8336616883 + kappa: 0.0027175627066 + s: 23.52513885494 + dkappa: -0.00106325247733 + } + v: 3.59999990463 + a: 0.0284211737936 relative_time: 7.4900000095367432 - theta: -1.8336616883 - accumulated_s: 23.52513885494 -} -adc_trajectory_point { - x: -130.413197227 - y: 342.125807433 - z: -31.3074800158 - - speed: 3.59999990463 - acceleration_s: 0.0284211737936 - curvature: 0.0027175627066 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.413197227 + y: 342.125807433 + z: -31.3074800158 + theta: -1.83357778194 + kappa: 0.0027175627066 + s: 23.56113885404 + dkappa: 0 + } + v: 3.59999990463 + a: 0.0284211737936 relative_time: 7.5 - theta: -1.83357778194 - accumulated_s: 23.56113885404 -} -adc_trajectory_point { - x: -130.422384725 - y: 342.090611337 - z: -31.3074125173 - - speed: 3.6027777195 - acceleration_s: 0.0633574613684 - curvature: 0.00264100850892 - curvature_change_rate: -0.00212486596842 +} +trajectory_point { + path_point { + x: -130.422384725 + y: 342.090611337 + z: -31.3074125173 + theta: -1.83353886354 + kappa: 0.00264100850892 + s: 23.59716663124 + dkappa: -0.00212486596842 + } + v: 3.6027777195 + a: 0.0633574613684 relative_time: 7.5099999904632568 - theta: -1.83353886354 - accumulated_s: 23.59716663124 -} -adc_trajectory_point { - x: -130.431553773 - y: 342.055391385 - z: -31.3074186957 - - speed: 3.6027777195 - acceleration_s: 0.121753161698 - curvature: 0.00264100850892 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.431553773 + y: 342.055391385 + z: -31.3074186957 + theta: -1.83348873593 + kappa: 0.00264100850892 + s: 23.63319440844 + dkappa: 0 + } + v: 3.6027777195 + a: 0.121753161698 relative_time: 7.5199999809265137 - theta: -1.83348873593 - accumulated_s: 23.63319440844 -} -adc_trajectory_point { - x: -130.440697187 - y: 342.020139134 - z: -31.3072792934 - - speed: 3.60555553436 - acceleration_s: 0.149883871992 - curvature: 0.00256445477712 - curvature_change_rate: -0.0021232159946 +} +trajectory_point { + path_point { + x: -130.440697187 + y: 342.020139134 + z: -31.3072792934 + theta: -1.83340978088 + kappa: 0.00256445477712 + s: 23.66924996374 + dkappa: -0.0021232159946 + } + v: 3.60555553436 + a: 0.149883871992 relative_time: 7.5299999713897705 - theta: -1.83340978088 - accumulated_s: 23.66924996374 -} -adc_trajectory_point { - x: -130.449842853 - y: 341.984902127 - z: -31.3073009551 - - speed: 3.60555553436 - acceleration_s: 0.0972756561058 - curvature: 0.00256445477712 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.449842853 + y: 341.984902127 + z: -31.3073009551 + theta: -1.83334414549 + kappa: 0.00256445477712 + s: 23.70530551914 + dkappa: 0 + } + v: 3.60555553436 + a: 0.0972756561058 relative_time: 7.5399999618530273 - theta: -1.83334414549 - accumulated_s: 23.70530551914 -} -adc_trajectory_point { - x: -130.458988646 - y: 341.949633606 - z: -31.3071024986 - - speed: 3.60833334923 - acceleration_s: 0.0972756561058 - curvature: 0.00244962463489 - curvature_change_rate: -0.00318235958594 +} +trajectory_point { + path_point { + x: -130.458988646 + y: 341.949633606 + z: -31.3071024986 + theta: -1.83330046649 + kappa: 0.00244962463489 + s: 23.74138885264 + dkappa: -0.00318235958594 + } + v: 3.60833334923 + a: 0.0972756561058 relative_time: 7.5499999523162842 - theta: -1.83330046649 - accumulated_s: 23.74138885264 -} -adc_trajectory_point { - x: -130.46811181 - y: 341.914366125 - z: -31.3071321752 - - speed: 3.60833334923 - acceleration_s: 0.0974151609056 - curvature: 0.00244962463489 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.46811181 + y: 341.914366125 + z: -31.3071321752 + theta: -1.83326266322 + kappa: 0.00244962463489 + s: 23.77747218614 + dkappa: 0 + } + v: 3.60833334923 + a: 0.0974151609056 relative_time: 7.559999942779541 - theta: -1.83326266322 - accumulated_s: 23.77747218614 -} -adc_trajectory_point { - x: -130.477227617 - y: 341.879063801 - z: -31.3068647711 - - speed: 3.61111116409 - acceleration_s: 0.109978512877 - curvature: 0.00237307149975 - curvature_change_rate: -0.00211993294195 +} +trajectory_point { + path_point { + x: -130.477227617 + y: 341.879063801 + z: -31.3068647711 + theta: -1.83321713076 + kappa: 0.00237307149975 + s: 23.81358329774 + dkappa: -0.00211993294195 + } + v: 3.61111116409 + a: 0.109978512877 relative_time: 7.5699999332427979 - theta: -1.83321713076 - accumulated_s: 23.81358329774 -} -adc_trajectory_point { - x: -130.486315045 - y: 341.84378041 - z: -31.3068743879 - - speed: 3.61111116409 - acceleration_s: 0.00567902186277 - curvature: 0.00237307149975 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.486315045 + y: 341.84378041 + z: -31.3068743879 + theta: -1.83319815852 + kappa: 0.00237307149975 + s: 23.84969440934 + dkappa: 0 + } + v: 3.61111116409 + a: 0.00567902186277 relative_time: 7.5800001621246338 - theta: -1.83319815852 - accumulated_s: 23.84969440934 -} -adc_trajectory_point { - x: -130.495376099 - y: 341.808448496 - z: -31.3067256249 - - speed: 3.6166665554 - acceleration_s: 0.152469261191 - curvature: 0.00225824221834 - curvature_change_rate: -0.00317500327013 +} +trajectory_point { + path_point { + x: -130.495376099 + y: 341.808448496 + z: -31.3067256249 + theta: -1.83315549593 + kappa: 0.00225824221834 + s: 23.88586107494 + dkappa: -0.00317500327013 + } + v: 3.6166665554 + a: 0.152469261191 relative_time: 7.5900001525878906 - theta: -1.83315549593 - accumulated_s: 23.88586107494 -} -adc_trajectory_point { - x: -130.504386577 - y: 341.773133968 - z: -31.3067099955 - - speed: 3.6166665554 - acceleration_s: 0.152469261191 - curvature: 0.00225824221834 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.504386577 + y: 341.773133968 + z: -31.3067099955 + theta: -1.83309316732 + kappa: 0.00225824221834 + s: 23.92202774044 + dkappa: 0 + } + v: 3.6166665554 + a: 0.152469261191 relative_time: 7.6000001430511475 - theta: -1.83309316732 - accumulated_s: 23.92202774044 -} -adc_trajectory_point { - x: -130.513453083 - y: 341.737777539 - z: -31.3065015916 - - speed: 3.61111116409 - acceleration_s: 0.179880549344 - curvature: 0.00214341342064 - curvature_change_rate: -0.0031798743513 +} +trajectory_point { + path_point { + x: -130.513453083 + y: 341.737777539 + z: -31.3065015916 + theta: -1.83312058844 + kappa: 0.00214341342064 + s: 23.95813885214 + dkappa: -0.0031798743513 + } + v: 3.61111116409 + a: 0.179880549344 relative_time: 7.6100001335144043 - theta: -1.83312058844 - accumulated_s: 23.95813885214 -} -adc_trajectory_point { - x: -130.522445901 - y: 341.702419138 - z: -31.306389872 - - speed: 3.61111116409 - acceleration_s: 0.106177237866 - curvature: 0.00214341342064 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.522445901 + y: 341.702419138 + z: -31.306389872 + theta: -1.83309768605 + kappa: 0.00214341342064 + s: 23.99424996374 + dkappa: 0 + } + v: 3.61111116409 + a: 0.106177237866 relative_time: 7.6200001239776611 - theta: -1.83309768605 - accumulated_s: 23.99424996374 -} -adc_trajectory_point { - x: -130.531461869 - y: 341.667048605 - z: -31.3062682543 - - speed: 3.61111116409 - acceleration_s: 0.127126930021 - curvature: 0.00202858508204 - curvature_change_rate: -0.00317986163771 +} +trajectory_point { + path_point { + x: -130.531461869 + y: 341.667048605 + z: -31.3062682543 + theta: -1.83310159988 + kappa: 0.00202858508204 + s: 24.03036107544 + dkappa: -0.00317986163771 + } + v: 3.61111116409 + a: 0.127126930021 relative_time: 7.630000114440918 - theta: -1.83310159988 - accumulated_s: 24.03036107544 -} -adc_trajectory_point { - x: -130.540412175 - y: 341.631632082 - z: -31.3060056586 - - speed: 3.61111116409 - acceleration_s: 0.165897218174 - curvature: 0.00202858508204 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.540412175 + y: 341.631632082 + z: -31.3060056586 + theta: -1.83303996439 + kappa: 0.00202858508204 + s: 24.06647218704 + dkappa: 0 + } + v: 3.61111116409 + a: 0.165897218174 relative_time: 7.6400001049041748 - theta: -1.83303996439 - accumulated_s: 24.06647218704 -} -adc_trajectory_point { - x: -130.549373796 - y: 341.59624719 - z: -31.3059436176 - - speed: 3.61388897896 - acceleration_s: 0.0274753954421 - curvature: 0.00195203309921 - curvature_change_rate: -0.00211827157033 +} +trajectory_point { + path_point { + x: -130.549373796 + y: 341.59624719 + z: -31.3059436176 + theta: -1.83305600875 + kappa: 0.00195203309921 + s: 24.10261107684 + dkappa: -0.00211827157033 + } + v: 3.61388897896 + a: 0.0274753954421 relative_time: 7.6500000953674316 - theta: -1.83305600875 - accumulated_s: 24.10261107684 -} -adc_trajectory_point { - x: -130.558305939 - y: 341.560791409 - z: -31.3057266828 - - speed: 3.61388897896 - acceleration_s: 0.219597653305 - curvature: 0.00195203309921 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.558305939 + y: 341.560791409 + z: -31.3057266828 + theta: -1.8330286297 + kappa: 0.00195203309921 + s: 24.13874996664 + dkappa: 0 + } + v: 3.61388897896 + a: 0.219597653305 relative_time: 7.6600000858306885 - theta: -1.8330286297 - accumulated_s: 24.13874996664 -} -adc_trajectory_point { - x: -130.567250945 - y: 341.525391517 - z: -31.3056051079 - - speed: 3.61388897896 - acceleration_s: -0.04968520856 - curvature: 0.00191375717794 - curvature_change_rate: -0.00105913384432 +} +trajectory_point { + path_point { + x: -130.567250945 + y: 341.525391517 + z: -31.3056051079 + theta: -1.83306049982 + kappa: 0.00191375717794 + s: 24.17488885644 + dkappa: -0.00105913384432 + } + v: 3.61388897896 + a: -0.04968520856 relative_time: 7.6700000762939453 - theta: -1.83306049982 - accumulated_s: 24.17488885644 -} -adc_trajectory_point { - x: -130.576155849 - y: 341.489935814 - z: -31.305308939 - - speed: 3.61388897896 - acceleration_s: 0.0754218193221 - curvature: 0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.576155849 + y: 341.489935814 + z: -31.305308939 + theta: -1.83303113849 + kappa: 0.00191375717794 + s: 24.21102774624 + dkappa: 0 + } + v: 3.61388897896 + a: 0.0754218193221 relative_time: 7.6800000667572021 - theta: -1.83303113849 - accumulated_s: 24.21102774624 -} -adc_trajectory_point { - x: -130.585087762 - y: 341.454496958 - z: -31.3051161263 - - speed: 3.61388897896 - acceleration_s: 0.0459569842948 - curvature: 0.00183720547112 - curvature_change_rate: -0.00211826393298 +} +trajectory_point { + path_point { + x: -130.585087762 + y: 341.454496958 + z: -31.3051161263 + theta: -1.83303396846 + kappa: 0.00183720547112 + s: 24.24716663604 + dkappa: -0.00211826393298 + } + v: 3.61388897896 + a: 0.0459569842948 relative_time: 7.690000057220459 - theta: -1.83303396846 - accumulated_s: 24.24716663604 -} -adc_trajectory_point { - x: -130.585087762 - y: 341.454496958 - z: -31.3051161263 - - speed: 3.61388897896 - acceleration_s: 0.0459569842948 - curvature: 0.00183720547112 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.585087762 + y: 341.454496958 + z: -31.3051161263 + theta: -1.83303396846 + kappa: 0.00183720547112 + s: 24.28330552574 + dkappa: 0 + } + v: 3.61388897896 + a: 0.0459569842948 relative_time: 7.690000057220459 - theta: -1.83303396846 - accumulated_s: 24.28330552574 -} -adc_trajectory_point { - x: -130.602911121 - y: 341.383562012 - z: -31.3047279408 - - speed: 3.61111116409 - acceleration_s: 0.144849583266 - curvature: 0.00183720547112 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.602911121 + y: 341.383562012 + z: -31.3047279408 + theta: -1.83293445716 + kappa: 0.00183720547112 + s: 24.31941663744 + dkappa: 0 + } + v: 3.61111116409 + a: 0.144849583266 relative_time: 7.7100000381469727 - theta: -1.83293445716 - accumulated_s: 24.31941663744 -} -adc_trajectory_point { - x: -130.611852783 - y: 341.348106938 - z: -31.3045846215 - - speed: 3.61111116409 - acceleration_s: 0.0448845221166 - curvature: 0.00183720547112 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.611852783 + y: 341.348106938 + z: -31.3045846215 + theta: -1.83294424528 + kappa: 0.00183720547112 + s: 24.35552774904 + dkappa: 0 + } + v: 3.61111116409 + a: 0.0448845221166 relative_time: 7.7200000286102295 - theta: -1.83294424528 - accumulated_s: 24.35552774904 -} -adc_trajectory_point { - x: -130.620780796 - y: 341.312606475 - z: -31.3042427422 - - speed: 3.61111116409 - acceleration_s: 0.160385700989 - curvature: 0.00179892968375 - curvature_change_rate: -0.00105994486544 +} +trajectory_point { + path_point { + x: -130.620780796 + y: 341.312606475 + z: -31.3042427422 + theta: -1.83289843935 + kappa: 0.00179892968375 + s: 24.39163886074 + dkappa: -0.00105994486544 + } + v: 3.61111116409 + a: 0.160385700989 relative_time: 7.7300000190734863 - theta: -1.83289843935 - accumulated_s: 24.39163886074 -} -adc_trajectory_point { - x: -130.629714032 - y: 341.277145663 - z: -31.3041904727 - - speed: 3.61111116409 - acceleration_s: 0.0446487559159 - curvature: 0.00179892968375 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.629714032 + y: 341.277145663 + z: -31.3041904727 + theta: -1.83288996666 + kappa: 0.00179892968375 + s: 24.42774997234 + dkappa: 0 + } + v: 3.61111116409 + a: 0.0446487559159 relative_time: 7.7400000095367432 - theta: -1.83288996666 - accumulated_s: 24.42774997234 -} -adc_trajectory_point { - x: -130.638674159 - y: 341.24160425 - z: -31.3038888006 - - speed: 3.61388897896 - acceleration_s: 0.2240524262 - curvature: 0.00179892968375 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.638674159 + y: 341.24160425 + z: -31.3038888006 + theta: -1.83288226161 + kappa: 0.00179892968375 + s: 24.46388886214 + dkappa: 0 + } + v: 3.61388897896 + a: 0.2240524262 relative_time: 7.75 - theta: -1.83288226161 - accumulated_s: 24.46388886214 -} -adc_trajectory_point { - x: -130.647626384 - y: 341.206107513 - z: -31.3037703065 - - speed: 3.61388897896 - acceleration_s: 0.0394091362678 - curvature: 0.00179892968375 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.647626384 + y: 341.206107513 + z: -31.3037703065 + theta: -1.83285930312 + kappa: 0.00179892968375 + s: 24.50002775194 + dkappa: 0 + } + v: 3.61388897896 + a: 0.0394091362678 relative_time: 7.7599999904632568 - theta: -1.83285930312 - accumulated_s: 24.50002775194 -} -adc_trajectory_point { - x: -130.647626384 - y: 341.206107513 - z: -31.3037703065 - - speed: 3.6166665554 - acceleration_s: 0.0394091362678 - curvature: 0.0017606539392 - curvature_change_rate: -0.00105831555025 +} +trajectory_point { + path_point { + x: -130.647626384 + y: 341.206107513 + z: -31.3037703065 + theta: -1.83285930312 + kappa: 0.0017606539392 + s: 24.53619441744 + dkappa: -0.00105831555025 + } + v: 3.6166665554 + a: 0.0394091362678 relative_time: 7.7599999904632568 - theta: -1.83285930312 - accumulated_s: 24.53619441744 -} -adc_trajectory_point { - x: -130.666043407 - y: 341.135419188 - z: -31.3035298269 - - speed: 3.6166665554 - acceleration_s: 0.0398697614652 - curvature: 0.0017606539392 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.666043407 + y: 341.135419188 + z: -31.3035298269 + theta: -1.83282695049 + kappa: 0.0017606539392 + s: 24.57236108304 + dkappa: 0 + } + v: 3.6166665554 + a: 0.0398697614652 relative_time: 7.7799999713897705 - theta: -1.83282695049 - accumulated_s: 24.57236108304 -} -adc_trajectory_point { - x: -130.666043407 - y: 341.135419188 - z: -31.3035298269 - - speed: 3.61944437027 - acceleration_s: 0.0398697614652 - curvature: 0.00168410257488 - curvature_change_rate: -0.00211500320182 +} +trajectory_point { + path_point { + x: -130.666043407 + y: 341.135419188 + z: -31.3035298269 + theta: -1.83282695049 + kappa: 0.00168410257488 + s: 24.60855552674 + dkappa: -0.00211500320182 + } + v: 3.61944437027 + a: 0.0398697614652 relative_time: 7.7799999713897705 - theta: -1.83282695049 - accumulated_s: 24.60855552674 -} -adc_trajectory_point { - x: -130.675528532 - y: 341.099629458 - z: -31.3032928389 - - speed: 3.61944437027 - acceleration_s: 0.1292120301 - curvature: 0.00168410257488 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.675528532 + y: 341.099629458 + z: -31.3032928389 + theta: -1.83279553698 + kappa: 0.00168410257488 + s: 24.64474997044 + dkappa: 0 + } + v: 3.61944437027 + a: 0.1292120301 relative_time: 7.7899999618530273 - theta: -1.83279553698 - accumulated_s: 24.64474997044 -} -adc_trajectory_point { - x: -130.69440843 - y: 341.028045342 - z: -31.3030609163 - - speed: 3.625 - acceleration_s: 0.0501726322437 - curvature: 0.00156927582672 - curvature_change_rate: -0.00316763443199 +} +trajectory_point { + path_point { + x: -130.69440843 + y: 341.028045342 + z: -31.3030609163 + theta: -1.83274545472 + kappa: 0.00156927582672 + s: 24.68099997044 + dkappa: -0.00316763443199 + } + v: 3.625 + a: 0.0501726322437 relative_time: 7.809999942779541 - theta: -1.83274545472 - accumulated_s: 24.68099997044 -} -adc_trajectory_point { - x: -130.703852373 - y: 340.992214082 - z: -31.3028028309 - - speed: 3.625 - acceleration_s: 0.124113583731 - curvature: 0.00156927582672 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.703852373 + y: 340.992214082 + z: -31.3028028309 + theta: -1.83272471706 + kappa: 0.00156927582672 + s: 24.71724997044 + dkappa: 0 + } + v: 3.625 + a: 0.124113583731 relative_time: 7.8199999332427979 - theta: -1.83272471706 - accumulated_s: 24.71724997044 -} -adc_trajectory_point { - x: -130.713271736 - y: 340.956389943 - z: -31.3027244527 - - speed: 3.625 - acceleration_s: 0.0844670987936 - curvature: 0.00149272484953 - curvature_change_rate: -0.00211175109484 +} +trajectory_point { + path_point { + x: -130.713271736 + y: 340.956389943 + z: -31.3027244527 + theta: -1.83270542199 + kappa: 0.00149272484953 + s: 24.75349997044 + dkappa: -0.00211175109484 + } + v: 3.625 + a: 0.0844670987936 relative_time: 7.8300001621246338 - theta: -1.83270542199 - accumulated_s: 24.75349997044 -} -adc_trajectory_point { - x: -130.722703543 - y: 340.920539753 - z: -31.3024780815 - - speed: 3.625 - acceleration_s: 0.148104053322 - curvature: 0.00149272484953 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.722703543 + y: 340.920539753 + z: -31.3024780815 + theta: -1.83271988044 + kappa: 0.00149272484953 + s: 24.78974997044 + dkappa: 0 + } + v: 3.625 + a: 0.148104053322 relative_time: 7.8400001525878906 - theta: -1.83271988044 - accumulated_s: 24.78974997044 -} -adc_trajectory_point { - x: -130.732108872 - y: 340.884678737 - z: -31.3023909777 - - speed: 3.63055562973 - acceleration_s: 0.148104053322 - curvature: 0.00137789864791 - curvature_change_rate: -0.00316277213004 +} +trajectory_point { + path_point { + x: -130.732108872 + y: 340.884678737 + z: -31.3023909777 + theta: -1.83270299502 + kappa: 0.00137789864791 + s: 24.82605552674 + dkappa: -0.00316277213004 + } + v: 3.63055562973 + a: 0.148104053322 relative_time: 7.8500001430511475 - theta: -1.83270299502 - accumulated_s: 24.82605552674 -} -adc_trajectory_point { - x: -130.741504345 - y: 340.848781349 - z: -31.3021927224 - - speed: 3.63055562973 - acceleration_s: 0.179385781992 - curvature: 0.00137789864791 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.741504345 + y: 340.848781349 + z: -31.3021927224 + theta: -1.83268369838 + kappa: 0.00137789864791 + s: 24.86236108304 + dkappa: 0 + } + v: 3.63055562973 + a: 0.179385781992 relative_time: 7.8600001335144043 - theta: -1.83268369838 - accumulated_s: 24.86236108304 -} -adc_trajectory_point { - x: -130.750903537 - y: 340.812895603 - z: -31.3020933596 - - speed: 3.63611102104 - acceleration_s: 0.0930404922489 - curvature: 0.00130134790508 - curvature_change_rate: -0.00210529168074 +} +trajectory_point { + path_point { + x: -130.750903537 + y: 340.812895603 + z: -31.3020933596 + theta: -1.83265571511 + kappa: 0.00130134790508 + s: 24.89872219324 + dkappa: -0.00210529168074 + } + v: 3.63611102104 + a: 0.0930404922489 relative_time: 7.8700001239776611 - theta: -1.83265571511 - accumulated_s: 24.89872219324 -} -adc_trajectory_point { - x: -130.760292861 - y: 340.776977129 - z: -31.3019938609 - - speed: 3.63611102104 - acceleration_s: 0.152979877708 - curvature: 0.00130134790508 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.760292861 + y: 340.776977129 + z: -31.3019938609 + theta: -1.83263881198 + kappa: 0.00130134790508 + s: 24.93508330344 + dkappa: 0 + } + v: 3.63611102104 + a: 0.152979877708 relative_time: 7.880000114440918 - theta: -1.83263881198 - accumulated_s: 24.93508330344 -} -adc_trajectory_point { - x: -130.76967928 - y: 340.741082499 - z: -31.301855946 - - speed: 3.64166665077 - acceleration_s: 0.0231350709845 - curvature: 0.00118652218167 - curvature_change_rate: -0.00315310912329 +} +trajectory_point { + path_point { + x: -130.76967928 + y: 340.741082499 + z: -31.301855946 + theta: -1.8326313572 + kappa: 0.00118652218167 + s: 24.97149996994 + dkappa: -0.00315310912329 + } + v: 3.64166665077 + a: 0.0231350709845 relative_time: 7.8900001049041748 - theta: -1.8326313572 - accumulated_s: 24.97149996994 -} -adc_trajectory_point { - x: -130.779138295 - y: 340.705167118 - z: -31.3017047923 - - speed: 3.64166665077 - acceleration_s: 0.0231350709845 - curvature: 0.00118652218167 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.779138295 + y: 340.705167118 + z: -31.3017047923 + theta: -1.83266872915 + kappa: 0.00118652218167 + s: 25.00791663644 + dkappa: 0 + } + v: 3.64166665077 + a: 0.0231350709845 relative_time: 7.9000000953674316 - theta: -1.83266872915 - accumulated_s: 25.00791663644 -} -adc_trajectory_point { - x: -130.788551733 - y: 340.669244905 - z: -31.3015434276 - - speed: 3.64166665077 - acceleration_s: 0.0728129344467 - curvature: 0.00110997184211 - curvature_change_rate: -0.00210206883018 +} +trajectory_point { + path_point { + x: -130.788551733 + y: 340.669244905 + z: -31.3015434276 + theta: -1.83261671623 + kappa: 0.00110997184211 + s: 25.04433330294 + dkappa: -0.00210206883018 + } + v: 3.64166665077 + a: 0.0728129344467 relative_time: 7.9100000858306885 - theta: -1.83261671623 - accumulated_s: 25.04433330294 -} -adc_trajectory_point { - x: -130.798021393 - y: 340.633331995 - z: -31.301507744 - - speed: 3.64166665077 - acceleration_s: 0.0896483382723 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.798021393 + y: 340.633331995 + z: -31.301507744 + theta: -1.83263678319 + kappa: 0.00110997184211 + s: 25.08074996944 + dkappa: 0 + } + v: 3.64166665077 + a: 0.0896483382723 relative_time: 7.9200000762939453 - theta: -1.83263678319 - accumulated_s: 25.08074996944 -} -adc_trajectory_point { - x: -130.807484599 - y: 340.597393821 - z: -31.3013093742 - - speed: 3.64166665077 - acceleration_s: 0.135289308023 - curvature: 0.00103342160821 - curvature_change_rate: -0.00210206592869 +} +trajectory_point { + path_point { + x: -130.807484599 + y: 340.597393821 + z: -31.3013093742 + theta: -1.83258672514 + kappa: 0.00103342160821 + s: 25.11716663604 + dkappa: -0.00210206592869 + } + v: 3.64166665077 + a: 0.135289308023 relative_time: 7.9300000667572021 - theta: -1.83258672514 - accumulated_s: 25.11716663604 -} -adc_trajectory_point { - x: -130.816937774 - y: 340.561463679 - z: -31.3011940848 - - speed: 3.64166665077 - acceleration_s: 0.0628889723761 - curvature: 0.00103342160821 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.816937774 + y: 340.561463679 + z: -31.3011940848 + theta: -1.83255082443 + kappa: 0.00103342160821 + s: 25.15358330254 + dkappa: 0 + } + v: 3.64166665077 + a: 0.0628889723761 relative_time: 7.940000057220459 - theta: -1.83255082443 - accumulated_s: 25.15358330254 -} -adc_trajectory_point { - x: -130.816937774 - y: 340.561463679 - z: -31.3011940848 - - speed: 3.64444446564 - acceleration_s: 0.0628889723761 - curvature: 0.000918596439528 - curvature_change_rate: -0.00315069058562 +} +trajectory_point { + path_point { + x: -130.816937774 + y: 340.561463679 + z: -31.3011940848 + theta: -1.83255082443 + kappa: 0.000918596439528 + s: 25.19002774714 + dkappa: -0.00315069058562 + } + v: 3.64444446564 + a: 0.0628889723761 relative_time: 7.940000057220459 - theta: -1.83255082443 - accumulated_s: 25.19002774714 -} -adc_trajectory_point { - x: -130.83593004 - y: 340.489596202 - z: -31.3008860145 - - speed: 3.64444446564 - acceleration_s: -0.0163727158504 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.83593004 + y: 340.489596202 + z: -31.3008860145 + theta: -1.83255423802 + kappa: 0.000918596439528 + s: 25.22647219184 + dkappa: 0 + } + v: 3.64444446564 + a: -0.0163727158504 relative_time: 7.9600000381469727 - theta: -1.83255423802 - accumulated_s: 25.22647219184 -} -adc_trajectory_point { - x: -130.845418368 - y: 340.45365412 - z: -31.3007718567 - - speed: 3.6472222805 - acceleration_s: 0.0501716132282 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.845418368 + y: 340.45365412 + z: -31.3007718567 + theta: -1.83253588269 + kappa: 0.000918596439528 + s: 25.26294441464 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0501716132282 relative_time: 7.9700000286102295 - theta: -1.83253588269 - accumulated_s: 25.26294441464 -} -adc_trajectory_point { - x: -130.854934592 - y: 340.417716539 - z: -31.3005748028 - - speed: 3.6472222805 - acceleration_s: 0.0350966479665 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.854934592 + y: 340.417716539 + z: -31.3005748028 + theta: -1.83251789237 + kappa: 0.000918596439528 + s: 25.29941663744 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0350966479665 relative_time: 7.9800000190734863 - theta: -1.83251789237 - accumulated_s: 25.29941663744 -} -adc_trajectory_point { - x: -130.864450823 - y: 340.381778494 - z: -31.3004705673 - - speed: 3.6472222805 - acceleration_s: 0.0538111666898 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.864450823 + y: 340.381778494 + z: -31.3004705673 + theta: -1.83250343616 + kappa: 0.000918596439528 + s: 25.33588886024 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0538111666898 relative_time: 7.9900000095367432 - theta: -1.83250343616 - accumulated_s: 25.33588886024 -} -adc_trajectory_point { - x: -130.873993682 - y: 340.345841256 - z: -31.3002635697 - - speed: 3.6472222805 - acceleration_s: 0.0231137538721 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.873993682 + y: 340.345841256 + z: -31.3002635697 + theta: -1.83250007398 + kappa: 0.000918596439528 + s: 25.37236108304 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0231137538721 relative_time: 8 - theta: -1.83250007398 - accumulated_s: 25.37236108304 -} -adc_trajectory_point { - x: -130.883525638 - y: 340.309894166 - z: -31.3001907943 - - speed: 3.6472222805 - acceleration_s: 0.0817352685085 - curvature: 0.000880321428239 - curvature_change_rate: -0.00104942908179 +} +trajectory_point { + path_point { + x: -130.883525638 + y: 340.309894166 + z: -31.3001907943 + theta: -1.83245126535 + kappa: 0.000880321428239 + s: 25.408833305839998 + dkappa: -0.00104942908179 + } + v: 3.6472222805 + a: 0.0817352685085 relative_time: 8.0099999904632568 - theta: -1.83245126535 - accumulated_s: 25.408833305839998 -} -adc_trajectory_point { - x: -130.893060411 - y: 340.273944983 - z: -31.3000618229 - - speed: 3.6472222805 - acceleration_s: 0.0817352685085 - curvature: 0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.893060411 + y: 340.273944983 + z: -31.3000618229 + theta: -1.83241241184 + kappa: 0.000880321428239 + s: 25.44530552864 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0817352685085 relative_time: 8.0199999809265137 - theta: -1.83241241184 - accumulated_s: 25.44530552864 -} -adc_trajectory_point { - x: -130.902637598 - y: 340.238000204 - z: -31.2999389796 - - speed: 3.6472222805 - acceleration_s: 0.048851556906 - curvature: 0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.902637598 + y: 340.238000204 + z: -31.2999389796 + theta: -1.83240779429 + kappa: 0.000880321428239 + s: 25.48177775144 + dkappa: 0 + } + v: 3.6472222805 + a: 0.048851556906 relative_time: 8.02999997138977 - theta: -1.83240779429 - accumulated_s: 25.48177775144 -} -adc_trajectory_point { - x: -130.912176404 - y: 340.20202961 - z: -31.2998038605 - - speed: 3.65000009537 - acceleration_s: 0.0897047452737 - curvature: 0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.912176404 + y: 340.20202961 + z: -31.2998038605 + theta: -1.83235125691 + kappa: 0.000880321428239 + s: 25.51827775244 + dkappa: 0 + } + v: 3.65000009537 + a: 0.0897047452737 relative_time: 8.0399999618530273 - theta: -1.83235125691 - accumulated_s: 25.51827775244 -} -adc_trajectory_point { - x: -130.921783432 - y: 340.166072734 - z: -31.2996864039 - - speed: 3.65277767181 - acceleration_s: 0.0897047452737 - curvature: 0.000918596439528 - curvature_change_rate: 0.00104783303907 +} +trajectory_point { + path_point { + x: -130.921783432 + y: 340.166072734 + z: -31.2996864039 + theta: -1.83233337587 + kappa: 0.000918596439528 + s: 25.55480552914 + dkappa: 0.00104783303907 + } + v: 3.65277767181 + a: 0.0897047452737 relative_time: 8.0499999523162842 - theta: -1.83233337587 - accumulated_s: 25.55480552914 -} -adc_trajectory_point { - x: -130.9313818 - y: 340.130114091 - z: -31.299647077 - - speed: 3.65277767181 - acceleration_s: 0.0624346032785 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.9313818 + y: 340.130114091 + z: -31.299647077 + theta: -1.8323109334 + kappa: 0.000918596439528 + s: 25.59133330584 + dkappa: 0 + } + v: 3.65277767181 + a: 0.0624346032785 relative_time: 8.059999942779541 - theta: -1.8323109334 - accumulated_s: 25.59133330584 -} -adc_trajectory_point { - x: -130.941007048 - y: 340.09412651 - z: -31.2994796736 - - speed: 3.65277767181 - acceleration_s: 0.142720077487 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.941007048 + y: 340.09412651 + z: -31.2994796736 + theta: -1.83228829884 + kappa: 0.000918596439528 + s: 25.62786108254 + dkappa: 0 + } + v: 3.65277767181 + a: 0.142720077487 relative_time: 8.0699999332427979 - theta: -1.83228829884 - accumulated_s: 25.62786108254 -} -adc_trajectory_point { - x: -130.950640579 - y: 340.058177255 - z: -31.2994999234 - - speed: 3.65555548668 - acceleration_s: 0.000615801137302 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.950640579 + y: 340.058177255 + z: -31.2994999234 + theta: -1.83228444302 + kappa: 0.000918596439528 + s: 25.66441663744 + dkappa: 0 + } + v: 3.65555548668 + a: 0.000615801137302 relative_time: 8.0800001621246338 - theta: -1.83228444302 - accumulated_s: 25.66441663744 -} -adc_trajectory_point { - x: -130.960315636 - y: 340.022180065 - z: -31.2993414029 - - speed: 3.65555548668 - acceleration_s: 0.15280930018 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.960315636 + y: 340.022180065 + z: -31.2993414029 + theta: -1.83226636784 + kappa: 0.000918596439528 + s: 25.70097219234 + dkappa: 0 + } + v: 3.65555548668 + a: 0.15280930018 relative_time: 8.09000015258789 - theta: -1.83226636784 - accumulated_s: 25.70097219234 -} -adc_trajectory_point { - x: -130.969995453 - y: 339.986192931 - z: -31.299452601 - - speed: 3.65833330154 - acceleration_s: 0.15280930018 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.969995453 + y: 339.986192931 + z: -31.299452601 + theta: -1.83225447424 + kappa: 0.000918596439528 + s: 25.73755552534 + dkappa: 0 + } + v: 3.65833330154 + a: 0.15280930018 relative_time: 8.1000001430511475 - theta: -1.83225447424 - accumulated_s: 25.73755552534 -} -adc_trajectory_point { - x: -130.979682334 - y: 339.950163942 - z: -31.2993475264 - - speed: 3.66111111641 - acceleration_s: 0.198806584695 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.979682334 + y: 339.950163942 + z: -31.2993475264 + theta: -1.83222854493 + kappa: 0.000918596439528 + s: 25.77416663644 + dkappa: 0 + } + v: 3.66111111641 + a: 0.198806584695 relative_time: 8.1100001335144043 - theta: -1.83222854493 - accumulated_s: 25.77416663644 -} -adc_trajectory_point { - x: -130.989392073 - y: 339.91415531 - z: -31.2994117336 - - speed: 3.66111111641 - acceleration_s: 0.134532857608 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.989392073 + y: 339.91415531 + z: -31.2994117336 + theta: -1.83223108593 + kappa: 0.000918596439528 + s: 25.81077774764 + dkappa: 0 + } + v: 3.66111111641 + a: 0.134532857608 relative_time: 8.1200001239776611 - theta: -1.83223108593 - accumulated_s: 25.81077774764 -} -adc_trajectory_point { - x: -130.999126681 - y: 339.878125284 - z: -31.2993557891 - - speed: 3.66666674614 - acceleration_s: 0.112522315953 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.999126681 + y: 339.878125284 + z: -31.2993557891 + theta: -1.83221197181 + kappa: 0.000918596439528 + s: 25.84744441514 + dkappa: 0 + } + v: 3.66666674614 + a: 0.112522315953 relative_time: 8.130000114440918 - theta: -1.83221197181 - accumulated_s: 25.84744441514 -} -adc_trajectory_point { - x: -131.008844928 - y: 339.842102638 - z: -31.2993960408 - - speed: 3.66666674614 - acceleration_s: 0.0224882151414 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.008844928 + y: 339.842102638 + z: -31.2993960408 + theta: -1.83216295343 + kappa: 0.000918596439528 + s: 25.88411108254 + dkappa: 0 + } + v: 3.66666674614 + a: 0.0224882151414 relative_time: 8.1400001049041748 - theta: -1.83216295343 - accumulated_s: 25.88411108254 -} -adc_trajectory_point { - x: -131.018578714 - y: 339.806075759 - z: -31.2995150331 - - speed: 3.669444561 - acceleration_s: 0.0572459340474 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.018578714 + y: 339.806075759 + z: -31.2995150331 + theta: -1.83212542772 + kappa: 0.000918596439528 + s: 25.92080552814 + dkappa: 0 + } + v: 3.669444561 + a: 0.0572459340474 relative_time: 8.1500000953674316 - theta: -1.83212542772 - accumulated_s: 25.92080552814 -} -adc_trajectory_point { - x: -131.028347707 - y: 339.770029 - z: -31.2995252535 - - speed: 3.669444561 - acceleration_s: 0.153243487934 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.028347707 + y: 339.770029 + z: -31.2995252535 + theta: -1.8321122234 + kappa: 0.000918596439528 + s: 25.95749997374 + dkappa: 0 + } + v: 3.669444561 + a: 0.153243487934 relative_time: 8.1600000858306885 - theta: -1.8321122234 - accumulated_s: 25.95749997374 -} -adc_trajectory_point { - x: -131.038073745 - y: 339.73398671 - z: -31.2996486742 - - speed: 3.669444561 - acceleration_s: 0.00412568286448 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.038073745 + y: 339.73398671 + z: -31.2996486742 + theta: -1.83206449221 + kappa: 0.000918596439528 + s: 25.99419441934 + dkappa: 0 + } + v: 3.669444561 + a: 0.00412568286448 relative_time: 8.1700000762939453 - theta: -1.83206449221 - accumulated_s: 25.99419441934 -} -adc_trajectory_point { - x: -131.047846748 - y: 339.697903145 - z: -31.2996453242 - - speed: 3.66388893127 - acceleration_s: 0.213592708517 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.047846748 + y: 339.697903145 + z: -31.2996453242 + theta: -1.8320369349 + kappa: 0.000918596439528 + s: 26.03083330874 + dkappa: 0 + } + v: 3.66388893127 + a: 0.213592708517 relative_time: 8.1800000667572021 - theta: -1.8320369349 - accumulated_s: 26.03083330874 -} -adc_trajectory_point { - x: -131.057601704 - y: 339.661848463 - z: -31.2998498427 - - speed: 3.66388893127 - acceleration_s: 0.0729537930512 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.057601704 + y: 339.661848463 + z: -31.2998498427 + theta: -1.8320153096 + kappa: 0.000918596439528 + s: 26.06747219804 + dkappa: 0 + } + v: 3.66388893127 + a: 0.0729537930512 relative_time: 8.190000057220459 - theta: -1.8320153096 - accumulated_s: 26.06747219804 -} -adc_trajectory_point { - x: -131.057601704 - y: 339.661848463 - z: -31.2998498427 - - speed: 3.66666674614 - acceleration_s: 0.0729537930512 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.057601704 + y: 339.661848463 + z: -31.2998498427 + theta: -1.8320153096 + kappa: 0.000918596439528 + s: 26.10413886544 + dkappa: 0 + } + v: 3.66666674614 + a: 0.0729537930512 relative_time: 8.190000057220459 - theta: -1.8320153096 - accumulated_s: 26.10413886544 -} -adc_trajectory_point { - x: -131.077140665 - y: 339.589661023 - z: -31.3000360513 - - speed: 3.66666674614 - acceleration_s: 0.0613900097566 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.077140665 + y: 339.589661023 + z: -31.3000360513 + theta: -1.83190855949 + kappa: 0.000918596439528 + s: 26.14080553294 + dkappa: 0 + } + v: 3.66666674614 + a: 0.0613900097566 relative_time: 8.2100000381469727 - theta: -1.83190855949 - accumulated_s: 26.14080553294 -} -adc_trajectory_point { - x: -131.08696897 - y: 339.55356477 - z: -31.3001523307 - - speed: 3.66666674614 - acceleration_s: 0.0456917770021 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.08696897 + y: 339.55356477 + z: -31.3001523307 + theta: -1.83192682468 + kappa: 0.000918596439528 + s: 26.17747220044 + dkappa: 0 + } + v: 3.66666674614 + a: 0.0456917770021 relative_time: 8.22000002861023 - theta: -1.83192682468 - accumulated_s: 26.17747220044 -} -adc_trajectory_point { - x: -131.096779297 - y: 339.517449887 - z: -31.3002983937 - - speed: 3.669444561 - acceleration_s: 0.157094234461 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.096779297 + y: 339.517449887 + z: -31.3002983937 + theta: -1.83187575872 + kappa: 0.000918596439528 + s: 26.21416664604 + dkappa: 0 + } + v: 3.669444561 + a: 0.157094234461 relative_time: 8.2300000190734863 - theta: -1.83187575872 - accumulated_s: 26.21416664604 -} -adc_trajectory_point { - x: -131.106589695 - y: 339.481355823 - z: -31.3004826577 - - speed: 3.669444561 - acceleration_s: 0.0138360880559 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.106589695 + y: 339.481355823 + z: -31.3004826577 + theta: -1.83183937453 + kappa: 0.000918596439528 + s: 26.25086109164 + dkappa: 0 + } + v: 3.669444561 + a: 0.0138360880559 relative_time: 8.2400000095367432 - theta: -1.83183937453 - accumulated_s: 26.25086109164 -} -adc_trajectory_point { - x: -131.116441605 - y: 339.445233672 - z: -31.3005322805 - - speed: 3.669444561 - acceleration_s: 0.110514537161 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.116441605 + y: 339.445233672 + z: -31.3005322805 + theta: -1.83180888744 + kappa: 0.000918596439528 + s: 26.28755553724 + dkappa: 0 + } + v: 3.669444561 + a: 0.110514537161 relative_time: 8.25 - theta: -1.83180888744 - accumulated_s: 26.28755553724 -} -adc_trajectory_point { - x: -131.126272548 - y: 339.409125322 - z: -31.3005999485 - - speed: 3.669444561 - acceleration_s: 0.0216516731092 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.126272548 + y: 339.409125322 + z: -31.3005999485 + theta: -1.83175332343 + kappa: 0.000918596439528 + s: 26.32424998284 + dkappa: 0 + } + v: 3.669444561 + a: 0.0216516731092 relative_time: 8.2599999904632568 - theta: -1.83175332343 - accumulated_s: 26.32424998284 -} -adc_trajectory_point { - x: -131.136115777 - y: 339.373016152 - z: -31.3006376708 - - speed: 3.669444561 - acceleration_s: 0.0208072840911 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.136115777 + y: 339.373016152 + z: -31.3006376708 + theta: -1.83167516464 + kappa: 0.000918596439528 + s: 26.36094442844 + dkappa: 0 + } + v: 3.669444561 + a: 0.0208072840911 relative_time: 8.2699999809265137 - theta: -1.83167516464 - accumulated_s: 26.36094442844 -} -adc_trajectory_point { - x: -131.145988643 - y: 339.33690518 - z: -31.3007889176 - - speed: 3.669444561 - acceleration_s: 0.0778664068072 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.145988643 + y: 339.33690518 + z: -31.3007889176 + theta: -1.83166581714 + kappa: 0.000918596439528 + s: 26.39763887404 + dkappa: 0 + } + v: 3.669444561 + a: 0.0778664068072 relative_time: 8.27999997138977 - theta: -1.83166581714 - accumulated_s: 26.39763887404 -} -adc_trajectory_point { - x: -131.155856212 - y: 339.300765569 - z: -31.3008449012 - - speed: 3.669444561 - acceleration_s: 0.149877177892 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.155856212 + y: 339.300765569 + z: -31.3008449012 + theta: -1.83163130848 + kappa: 0.000918596439528 + s: 26.43433331964 + dkappa: 0 + } + v: 3.669444561 + a: 0.149877177892 relative_time: 8.2899999618530273 - theta: -1.83163130848 - accumulated_s: 26.43433331964 -} -adc_trajectory_point { - x: -131.165734938 - y: 339.264620127 - z: -31.3008489804 - - speed: 3.67222213745 - acceleration_s: 0.16331538138 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.165734938 + y: 339.264620127 + z: -31.3008489804 + theta: -1.831635156 + kappa: 0.000918596439528 + s: 26.47105554104 + dkappa: 0 + } + v: 3.67222213745 + a: 0.16331538138 relative_time: 8.2999999523162842 - theta: -1.831635156 - accumulated_s: 26.47105554104 -} -adc_trajectory_point { - x: -131.175566316 - y: 339.228455267 - z: -31.3009608481 - - speed: 3.67222213745 - acceleration_s: 0.135593390645 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.175566316 + y: 339.228455267 + z: -31.3009608481 + theta: -1.83159067492 + kappa: 0.000918596439528 + s: 26.50777776244 + dkappa: 0 + } + v: 3.67222213745 + a: 0.135593390645 relative_time: 8.309999942779541 - theta: -1.83159067492 - accumulated_s: 26.50777776244 -} -adc_trajectory_point { - x: -131.185440819 - y: 339.192279291 - z: -31.3009583792 - - speed: 3.67222213745 - acceleration_s: 0.151254464873 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.185440819 + y: 339.192279291 + z: -31.3009583792 + theta: -1.83159968181 + kappa: 0.000918596439528 + s: 26.54449998384 + dkappa: 0 + } + v: 3.67222213745 + a: 0.151254464873 relative_time: 8.3199999332427979 - theta: -1.83159968181 - accumulated_s: 26.54449998384 -} -adc_trajectory_point { - x: -131.195248563 - y: 339.156106709 - z: -31.3010963807 - - speed: 3.67222213745 - acceleration_s: 0.0250942985311 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.195248563 + y: 339.156106709 + z: -31.3010963807 + theta: -1.83156516734 + kappa: 0.000918596439528 + s: 26.58122220514 + dkappa: 0 + } + v: 3.67222213745 + a: 0.0250942985311 relative_time: 8.3300001621246338 - theta: -1.83156516734 - accumulated_s: 26.58122220514 -} -adc_trajectory_point { - x: -131.205084922 - y: 339.119887824 - z: -31.3011043938 - - speed: 3.67499995232 - acceleration_s: 0.167788912539 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.205084922 + y: 339.119887824 + z: -31.3011043938 + theta: -1.83157327091 + kappa: 0.000918596439528 + s: 26.61797220464 + dkappa: 0 + } + v: 3.67499995232 + a: 0.167788912539 relative_time: 8.34000015258789 - theta: -1.83157327091 - accumulated_s: 26.61797220464 -} -adc_trajectory_point { - x: -131.214858687 - y: 339.083669224 - z: -31.3012608467 - - speed: 3.67499995232 - acceleration_s: 0.167788912539 - curvature: 0.000880321428239 - curvature_change_rate: -0.00104149691933 +} +trajectory_point { + path_point { + x: -131.214858687 + y: 339.083669224 + z: -31.3012608467 + theta: -1.83155865376 + kappa: 0.000880321428239 + s: 26.65472220424 + dkappa: -0.00104149691933 + } + v: 3.67499995232 + a: 0.167788912539 relative_time: 8.3500001430511475 - theta: -1.83155865376 - accumulated_s: 26.65472220424 -} -adc_trajectory_point { - x: -131.224615283 - y: 339.04742901 - z: -31.3012495674 - - speed: 3.67499995232 - acceleration_s: 0.0822227314289 - curvature: 0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.224615283 + y: 339.04742901 + z: -31.3012495674 + theta: -1.83153343829 + kappa: 0.000880321428239 + s: 26.69147220374 + dkappa: 0 + } + v: 3.67499995232 + a: 0.0822227314289 relative_time: 8.3600001335144043 - theta: -1.83153343829 - accumulated_s: 26.69147220374 -} -adc_trajectory_point { - x: -131.234406776 - y: 339.011172706 - z: -31.3013456613 - - speed: 3.67777776718 - acceleration_s: 0.113819625336 - curvature: 0.000803771467601 - curvature_change_rate: -0.00208141887531 +} +trajectory_point { + path_point { + x: -131.234406776 + y: 339.011172706 + z: -31.3013456613 + theta: -1.8315918382 + kappa: 0.000803771467601 + s: 26.72824998144 + dkappa: -0.00208141887531 + } + v: 3.67777776718 + a: 0.113819625336 relative_time: 8.3700001239776611 - theta: -1.8315918382 - accumulated_s: 26.72824998144 -} -adc_trajectory_point { - x: -131.244131202 - y: 338.974905711 - z: -31.301438354 - - speed: 3.67777776718 - acceleration_s: 0.0554700617746 - curvature: 0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.244131202 + y: 338.974905711 + z: -31.301438354 + theta: -1.83162134349 + kappa: 0.000803771467601 + s: 26.76502775904 + dkappa: 0 + } + v: 3.67777776718 + a: 0.0554700617746 relative_time: 8.380000114440918 - theta: -1.83162134349 - accumulated_s: 26.76502775904 -} -adc_trajectory_point { - x: -131.25384955 - y: 338.938616238 - z: -31.3015423361 - - speed: 3.68055558205 - acceleration_s: 0.152532449879 - curvature: 0.00076549651643 - curvature_change_rate: -0.00103992319414 +} +trajectory_point { + path_point { + x: -131.25384955 + y: 338.938616238 + z: -31.3015423361 + theta: -1.83165084373 + kappa: 0.00076549651643 + s: 26.80183331494 + dkappa: -0.00103992319414 + } + v: 3.68055558205 + a: 0.152532449879 relative_time: 8.3900001049041748 - theta: -1.83165084373 - accumulated_s: 26.80183331494 -} -adc_trajectory_point { - x: -131.25384955 - y: 338.938616238 - z: -31.3015423361 - - speed: 3.68055558205 - acceleration_s: 0.152532449879 - curvature: 0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.25384955 + y: 338.938616238 + z: -31.3015423361 + theta: -1.83165084373 + kappa: 0.00076549651643 + s: 26.83863887074 + dkappa: 0 + } + v: 3.68055558205 + a: 0.152532449879 relative_time: 8.3900001049041748 - theta: -1.83165084373 - accumulated_s: 26.83863887074 -} -adc_trajectory_point { - x: -131.273254626 - y: 338.86600178 - z: -31.301791084 - - speed: 3.68055558205 - acceleration_s: 0.154423085802 - curvature: 0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.273254626 + y: 338.86600178 + z: -31.301791084 + theta: -1.83177836445 + kappa: 0.00076549651643 + s: 26.87544442654 + dkappa: 0 + } + v: 3.68055558205 + a: 0.154423085802 relative_time: 8.4100000858306885 - theta: -1.83177836445 - accumulated_s: 26.87544442654 -} -adc_trajectory_point { - x: -131.282905752 - y: 338.829664789 - z: -31.3019227739 - - speed: 3.68333339691 - acceleration_s: 0.10791718453 - curvature: 0.000727221583477 - curvature_change_rate: -0.00103913843329 +} +trajectory_point { + path_point { + x: -131.282905752 + y: 338.829664789 + z: -31.3019227739 + theta: -1.83179098684 + kappa: 0.000727221583477 + s: 26.91227776054 + dkappa: -0.00103913843329 + } + v: 3.68333339691 + a: 0.10791718453 relative_time: 8.4200000762939453 - theta: -1.83179098684 - accumulated_s: 26.91227776054 -} -adc_trajectory_point { - x: -131.292559769 - y: 338.793302242 - z: -31.3020108668 - - speed: 3.68333339691 - acceleration_s: 0.180575814529 - curvature: 0.000727221583477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.292559769 + y: 338.793302242 + z: -31.3020108668 + theta: -1.83185252348 + kappa: 0.000727221583477 + s: 26.94911109444 + dkappa: 0 + } + v: 3.68333339691 + a: 0.180575814529 relative_time: 8.4300000667572021 - theta: -1.83185252348 - accumulated_s: 26.94911109444 -} -adc_trajectory_point { - x: -131.302179486 - y: 338.756936416 - z: -31.302163193 - - speed: 3.68611121178 - acceleration_s: 0.105572172671 - curvature: 0.000650671714967 - curvature_change_rate: -0.00207671076947 +} +trajectory_point { + path_point { + x: -131.302179486 + y: 338.756936416 + z: -31.302163193 + theta: -1.83189221851 + kappa: 0.000650671714967 + s: 26.98597220664 + dkappa: -0.00207671076947 + } + v: 3.68611121178 + a: 0.105572172671 relative_time: 8.440000057220459 - theta: -1.83189221851 - accumulated_s: 26.98597220664 -} -adc_trajectory_point { - x: -131.302179486 - y: 338.756936416 - z: -31.302163193 - - speed: 3.68888878822 - acceleration_s: 0.105572172671 - curvature: 0.000612396831201 - curvature_change_rate: -0.0010375721786 +} +trajectory_point { + path_point { + x: -131.302179486 + y: 338.756936416 + z: -31.302163193 + theta: -1.83189221851 + kappa: 0.000612396831201 + s: 27.02286109444 + dkappa: -0.0010375721786 + } + v: 3.68888878822 + a: 0.105572172671 relative_time: 8.440000057220459 - theta: -1.83189221851 - accumulated_s: 27.02286109444 -} -adc_trajectory_point { - x: -131.321386084 - y: 338.684148733 - z: -31.3023956306 - - speed: 3.68888878822 - acceleration_s: 0.0708134451255 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.321386084 + y: 338.684148733 + z: -31.3023956306 + theta: -1.83197773929 + kappa: 0.000612396831201 + s: 27.05974998234 + dkappa: 0 + } + v: 3.68888878822 + a: 0.0708134451255 relative_time: 8.4600000381469727 - theta: -1.83197773929 - accumulated_s: 27.05974998234 -} -adc_trajectory_point { - x: -131.330996058 - y: 338.647753089 - z: -31.3024842339 - - speed: 3.68888878822 - acceleration_s: 0.0391873945295 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.330996058 + y: 338.647753089 + z: -31.3024842339 + theta: -1.83205288131 + kappa: 0.000612396831201 + s: 27.09663887024 + dkappa: 0 + } + v: 3.68888878822 + a: 0.0391873945295 relative_time: 8.47000002861023 - theta: -1.83205288131 - accumulated_s: 27.09663887024 -} -adc_trajectory_point { - x: -131.340587888 - y: 338.611329648 - z: -31.3024761761 - - speed: 3.69166660309 - acceleration_s: 0.107011650936 - curvature: 0.000574121962009 - curvature_change_rate: -0.00103679105692 +} +trajectory_point { + path_point { + x: -131.340587888 + y: 338.611329648 + z: -31.3024761761 + theta: -1.83209904554 + kappa: 0.000574121962009 + s: 27.13355553624 + dkappa: -0.00103679105692 + } + v: 3.69166660309 + a: 0.107011650936 relative_time: 8.4800000190734863 - theta: -1.83209904554 - accumulated_s: 27.13355553624 -} -adc_trajectory_point { - x: -131.350157567 - y: 338.574925673 - z: -31.3025584891 - - speed: 3.69166660309 - acceleration_s: -0.034284269404 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.350157567 + y: 338.574925673 + z: -31.3025584891 + theta: -1.83216386153 + kappa: 0.000574121962009 + s: 27.17047220234 + dkappa: 0 + } + v: 3.69166660309 + a: -0.034284269404 relative_time: 8.4900000095367432 - theta: -1.83216386153 - accumulated_s: 27.17047220234 -} -adc_trajectory_point { - x: -131.359719855 - y: 338.538482962 - z: -31.3025128227 - - speed: 3.69444441795 - acceleration_s: 0.118293462844 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.359719855 + y: 338.538482962 + z: -31.3025128227 + theta: -1.83218950412 + kappa: 0.000574121962009 + s: 27.20741664644 + dkappa: 0 + } + v: 3.69444441795 + a: 0.118293462844 relative_time: 8.5 - theta: -1.83218950412 - accumulated_s: 27.20741664644 -} -adc_trajectory_point { - x: -131.369269317 - y: 338.502063949 - z: -31.3025091486 - - speed: 3.69444441795 - acceleration_s: 0.0124151792347 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.369269317 + y: 338.502063949 + z: -31.3025091486 + theta: -1.83223507413 + kappa: 0.000574121962009 + s: 27.24436109064 + dkappa: 0 + } + v: 3.69444441795 + a: 0.0124151792347 relative_time: 8.5099999904632568 - theta: -1.83223507413 - accumulated_s: 27.24436109064 -} -adc_trajectory_point { - x: -131.378789178 - y: 338.465620489 - z: -31.302387909 - - speed: 3.69722223282 - acceleration_s: 0.029718293086 - curvature: 0.00053584710648 - curvature_change_rate: -0.00103523275364 +} +trajectory_point { + path_point { + x: -131.378789178 + y: 338.465620489 + z: -31.302387909 + theta: -1.83225507449 + kappa: 0.00053584710648 + s: 27.28133331304 + dkappa: -0.00103523275364 + } + v: 3.69722223282 + a: 0.029718293086 relative_time: 8.5199999809265137 - theta: -1.83225507449 - accumulated_s: 27.28133331304 -} -adc_trajectory_point { - x: -131.388316753 - y: 338.429162972 - z: -31.3022825252 - - speed: 3.69722223282 - acceleration_s: 0.12692532821 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.388316753 + y: 338.429162972 + z: -31.3022825252 + theta: -1.8322771072 + kappa: 0.00053584710648 + s: 27.31830553534 + dkappa: 0 + } + v: 3.69722223282 + a: 0.12692532821 relative_time: 8.52999997138977 - theta: -1.8322771072 - accumulated_s: 27.31830553534 -} -adc_trajectory_point { - x: -131.397823933 - y: 338.392724876 - z: -31.3021739516 - - speed: 3.69722223282 - acceleration_s: -0.00662109430063 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.397823933 + y: 338.392724876 + z: -31.3021739516 + theta: -1.832332708 + kappa: 0.00053584710648 + s: 27.35527775764 + dkappa: 0 + } + v: 3.69722223282 + a: -0.00662109430063 relative_time: 8.5399999618530273 - theta: -1.832332708 - accumulated_s: 27.35527775764 -} -adc_trajectory_point { - x: -131.407388895 - y: 338.356264182 - z: -31.3019151967 - - speed: 3.69722223282 - acceleration_s: -0.00662109430063 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.407388895 + y: 338.356264182 + z: -31.3019151967 + theta: -1.83237843888 + kappa: 0.00053584710648 + s: 27.39224997994 + dkappa: 0 + } + v: 3.69722223282 + a: -0.00662109430063 relative_time: 8.5499999523162842 - theta: -1.83237843888 - accumulated_s: 27.39224997994 -} -adc_trajectory_point { - x: -131.416904285 - y: 338.31981783 - z: -31.3017598446 - - speed: 3.69722223282 - acceleration_s: -0.00236487887047 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.416904285 + y: 338.31981783 + z: -31.3017598446 + theta: -1.83241540315 + kappa: 0.00053584710648 + s: 27.42922220234 + dkappa: 0 + } + v: 3.69722223282 + a: -0.00236487887047 relative_time: 8.559999942779541 - theta: -1.83241540315 - accumulated_s: 27.42922220234 -} -adc_trajectory_point { - x: -131.426426575 - y: 338.283351957 - z: -31.3013430377 - - speed: 3.70000004768 - acceleration_s: 0.028371706438 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.426426575 + y: 338.283351957 + z: -31.3013430377 + theta: -1.83241878261 + kappa: 0.00053584710648 + s: 27.46622220274 + dkappa: 0 + } + v: 3.70000004768 + a: 0.028371706438 relative_time: 8.5699999332427979 - theta: -1.83241878261 - accumulated_s: 27.46622220274 -} -adc_trajectory_point { - x: -131.43595991 - y: 338.246907871 - z: -31.3009619135 - - speed: 3.70000004768 - acceleration_s: -0.0127730491426 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.43595991 + y: 338.246907871 + z: -31.3009619135 + theta: -1.83243947028 + kappa: 0.00053584710648 + s: 27.50322220324 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0127730491426 relative_time: 8.5800001621246338 - theta: -1.83243947028 - accumulated_s: 27.50322220324 -} -adc_trajectory_point { - x: -131.445479111 - y: 338.210474133 - z: -31.3006140888 - - speed: 3.70000004768 - acceleration_s: -0.070433993924 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.445479111 + y: 338.210474133 + z: -31.3006140888 + theta: -1.8324544003 + kappa: 0.00053584710648 + s: 27.54022220374 + dkappa: 0 + } + v: 3.70000004768 + a: -0.070433993924 relative_time: 8.59000015258789 - theta: -1.8324544003 - accumulated_s: 27.54022220374 -} -adc_trajectory_point { - x: -131.45503387 - y: 338.17403338 - z: -31.3001018483 - - speed: 3.70000004768 - acceleration_s: -0.070433993924 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.45503387 + y: 338.17403338 + z: -31.3001018483 + theta: -1.83249050491 + kappa: 0.00053584710648 + s: 27.57722220424 + dkappa: 0 + } + v: 3.70000004768 + a: -0.070433993924 relative_time: 8.6000001430511475 - theta: -1.83249050491 - accumulated_s: 27.57722220424 -} -adc_trajectory_point { - x: -131.464535186 - y: 338.137613357 - z: -31.2997517921 - - speed: 3.70000004768 - acceleration_s: -0.0880824898025 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.464535186 + y: 338.137613357 + z: -31.2997517921 + theta: -1.8324624664 + kappa: 0.00053584710648 + s: 27.61422220464 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0880824898025 relative_time: 8.6100001335144043 - theta: -1.8324624664 - accumulated_s: 27.61422220464 -} -adc_trajectory_point { - x: -131.474127088 - y: 338.101154263 - z: -31.2990875654 - - speed: 3.70000004768 - acceleration_s: 0.149555047142 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.474127088 + y: 338.101154263 + z: -31.2990875654 + theta: -1.83250666476 + kappa: 0.00053584710648 + s: 27.65122220514 + dkappa: 0 + } + v: 3.70000004768 + a: 0.149555047142 relative_time: 8.6200001239776611 - theta: -1.83250666476 - accumulated_s: 27.65122220514 -} -adc_trajectory_point { - x: -131.483683473 - y: 338.064741751 - z: -31.2987857442 - - speed: 3.70000004768 - acceleration_s: 0.011688433096 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.483683473 + y: 338.064741751 + z: -31.2987857442 + theta: -1.83251654948 + kappa: 0.00053584710648 + s: 27.68822220564 + dkappa: 0 + } + v: 3.70000004768 + a: 0.011688433096 relative_time: 8.630000114440918 - theta: -1.83251654948 - accumulated_s: 27.68822220564 -} -adc_trajectory_point { - x: -131.493265877 - y: 338.028255166 - z: -31.2981409179 - - speed: 3.70000004768 - acceleration_s: 0.239190739268 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.493265877 + y: 338.028255166 + z: -31.2981409179 + theta: -1.83249716564 + kappa: 0.00053584710648 + s: 27.72522220614 + dkappa: 0 + } + v: 3.70000004768 + a: 0.239190739268 relative_time: 8.6400001049041748 - theta: -1.83249716564 - accumulated_s: 27.72522220614 -} -adc_trajectory_point { - x: -131.502857738 - y: 337.991810233 - z: -31.2977487864 - - speed: 3.70000004768 - acceleration_s: 0.0734298613112 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.502857738 + y: 337.991810233 + z: -31.2977487864 + theta: -1.83251383764 + kappa: 0.00053584710648 + s: 27.76222220664 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0734298613112 relative_time: 8.6500000953674316 - theta: -1.83251383764 - accumulated_s: 27.76222220664 -} -adc_trajectory_point { - x: -131.512487687 - y: 337.955330837 - z: -31.2971710358 - - speed: 3.70277786255 - acceleration_s: 0.140154603522 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.512487687 + y: 337.955330837 + z: -31.2971710358 + theta: -1.8325214378 + kappa: 0.00053584710648 + s: 27.79924998524 + dkappa: 0 + } + v: 3.70277786255 + a: 0.140154603522 relative_time: 8.6600000858306885 - theta: -1.8325214378 - accumulated_s: 27.79924998524 -} -adc_trajectory_point { - x: -131.522087455 - y: 337.918846195 - z: -31.2967666406 - - speed: 3.70277786255 - acceleration_s: 0.127838432431 - curvature: 0.000574121962009 - curvature_change_rate: 0.0010336794955 +} +trajectory_point { + path_point { + x: -131.522087455 + y: 337.918846195 + z: -31.2967666406 + theta: -1.83249570734 + kappa: 0.000574121962009 + s: 27.83627776384 + dkappa: 0.0010336794955 + } + v: 3.70277786255 + a: 0.127838432431 relative_time: 8.6700000762939453 - theta: -1.83249570734 - accumulated_s: 27.83627776384 -} -adc_trajectory_point { - x: -131.531708209 - y: 337.882377424 - z: -31.2963586831 - - speed: 3.70277786255 - acceleration_s: 0.0684593042975 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.531708209 + y: 337.882377424 + z: -31.2963586831 + theta: -1.83247814077 + kappa: 0.000574121962009 + s: 27.87330554244 + dkappa: 0 + } + v: 3.70277786255 + a: 0.0684593042975 relative_time: 8.6800000667572021 - theta: -1.83247814077 - accumulated_s: 27.87330554244 -} -adc_trajectory_point { - x: -131.541360228 - y: 337.845861763 - z: -31.2958159689 - - speed: 3.70277786255 - acceleration_s: 0.156014190983 - curvature: 0.00053584710648 - curvature_change_rate: -0.0010336794955 +} +trajectory_point { + path_point { + x: -131.541360228 + y: 337.845861763 + z: -31.2958159689 + theta: -1.8324976108 + kappa: 0.00053584710648 + s: 27.91033332114 + dkappa: -0.0010336794955 + } + v: 3.70277786255 + a: 0.156014190983 relative_time: 8.690000057220459 - theta: -1.8324976108 - accumulated_s: 27.91033332114 -} -adc_trajectory_point { - x: -131.541360228 - y: 337.845861763 - z: -31.2958159689 - - speed: 3.70277786255 - acceleration_s: 0.156014190983 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.541360228 + y: 337.845861763 + z: -31.2958159689 + theta: -1.8324976108 + kappa: 0.00053584710648 + s: 27.94736109974 + dkappa: 0 + } + v: 3.70277786255 + a: 0.156014190983 relative_time: 8.690000057220459 - theta: -1.8324976108 - accumulated_s: 27.94736109974 -} -adc_trajectory_point { - x: -131.560649886 - y: 337.772871413 - z: -31.2949329298 - - speed: 3.70277786255 - acceleration_s: 0.109487997078 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.560649886 + y: 337.772871413 + z: -31.2949329298 + theta: -1.83254384308 + kappa: 0.00053584710648 + s: 27.98438887834 + dkappa: 0 + } + v: 3.70277786255 + a: 0.109487997078 relative_time: 8.7100000381469727 - theta: -1.83254384308 - accumulated_s: 27.98438887834 -} -adc_trajectory_point { - x: -131.57027568 - y: 337.736368343 - z: -31.294543298 - - speed: 3.70277786255 - acceleration_s: 0.000564899935024 - curvature: 0.000574121962009 - curvature_change_rate: 0.0010336794955 +} +trajectory_point { + path_point { + x: -131.57027568 + y: 337.736368343 + z: -31.294543298 + theta: -1.83256203208 + kappa: 0.000574121962009 + s: 28.02141665694 + dkappa: 0.0010336794955 + } + v: 3.70277786255 + a: 0.000564899935024 relative_time: 8.72000002861023 - theta: -1.83256203208 - accumulated_s: 28.02141665694 -} -adc_trajectory_point { - x: -131.579923332 - y: 337.699868223 - z: -31.2941764966 - - speed: 3.70277786255 - acceleration_s: -0.0411097084191 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.579923332 + y: 337.699868223 + z: -31.2941764966 + theta: -1.83255273706 + kappa: 0.000574121962009 + s: 28.05844443564 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0411097084191 relative_time: 8.7300000190734863 - theta: -1.83255273706 - accumulated_s: 28.05844443564 -} -adc_trajectory_point { - x: -131.589561521 - y: 337.663334655 - z: -31.2937997337 - - speed: 3.70277786255 - acceleration_s: 0.123581769938 - curvature: 0.00053584710648 - curvature_change_rate: -0.0010336794955 +} +trajectory_point { + path_point { + x: -131.589561521 + y: 337.663334655 + z: -31.2937997337 + theta: -1.83257555353 + kappa: 0.00053584710648 + s: 28.09547221424 + dkappa: -0.0010336794955 + } + v: 3.70277786255 + a: 0.123581769938 relative_time: 8.7400000095367432 - theta: -1.83257555353 - accumulated_s: 28.09547221424 -} -adc_trajectory_point { - x: -131.599202071 - y: 337.626824712 - z: -31.2934148507 - - speed: 3.70277786255 - acceleration_s: -0.0121917363633 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.599202071 + y: 337.626824712 + z: -31.2934148507 + theta: -1.83259350435 + kappa: 0.00053584710648 + s: 28.13249999284 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0121917363633 relative_time: 8.75 - theta: -1.83259350435 - accumulated_s: 28.13249999284 -} -adc_trajectory_point { - x: -131.599202071 - y: 337.626824712 - z: -31.2934148507 - - speed: 3.70833325386 - acceleration_s: -0.0121917363633 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.599202071 + y: 337.626824712 + z: -31.2934148507 + theta: -1.83259350435 + kappa: 0.00053584710648 + s: 28.16958332534 + dkappa: 0 + } + v: 3.70833325386 + a: -0.0121917363633 relative_time: 8.75 - theta: -1.83259350435 - accumulated_s: 28.16958332534 -} -adc_trajectory_point { - x: -131.618780157 - y: 337.553650134 - z: -31.2927733092 - - speed: 3.70833325386 - acceleration_s: -0.0725997921008 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.618780157 + y: 337.553650134 + z: -31.2927733092 + theta: -1.83274640646 + kappa: 0.00053584710648 + s: 28.20666665794 + dkappa: 0 + } + v: 3.70833325386 + a: -0.0725997921008 relative_time: 8.7699999809265137 - theta: -1.83274640646 - accumulated_s: 28.20666665794 -} -adc_trajectory_point { - x: -131.628765907 - y: 337.517272111 - z: -31.2922379617 - - speed: 3.705555439 - acceleration_s: 0.075737330826 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.628765907 + y: 337.517272111 + z: -31.2922379617 + theta: -1.83272447243 + kappa: 0.00053584710648 + s: 28.24372221234 + dkappa: 0 + } + v: 3.705555439 + a: 0.075737330826 relative_time: 8.77999997138977 - theta: -1.83272447243 - accumulated_s: 28.24372221234 -} -adc_trajectory_point { - x: -131.638740986 - y: 337.480956091 - z: -31.2919738125 - - speed: 3.705555439 - acceleration_s: -0.0937081855589 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.638740986 + y: 337.480956091 + z: -31.2919738125 + theta: -1.83276958518 + kappa: 0.00053584710648 + s: 28.28077776674 + dkappa: 0 + } + v: 3.705555439 + a: -0.0937081855589 relative_time: 8.7899999618530273 - theta: -1.83276958518 - accumulated_s: 28.28077776674 -} -adc_trajectory_point { - x: -131.648704064 - y: 337.444586733 - z: -31.2914515454 - - speed: 3.70277786255 - acceleration_s: -0.0937081855589 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.648704064 + y: 337.444586733 + z: -31.2914515454 + theta: -1.83275636361 + kappa: 0.00053584710648 + s: 28.31780554534 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0937081855589 relative_time: 8.7999999523162842 - theta: -1.83275636361 - accumulated_s: 28.31780554534 -} -adc_trajectory_point { - x: -131.658705585 - y: 337.408247923 - z: -31.2911516726 - - speed: 3.70277786255 - acceleration_s: 0.0681437019346 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.658705585 + y: 337.408247923 + z: -31.2911516726 + theta: -1.83281612598 + kappa: 0.00053584710648 + s: 28.35483332394 + dkappa: 0 + } + v: 3.70277786255 + a: 0.0681437019346 relative_time: 8.809999942779541 - theta: -1.83281612598 - accumulated_s: 28.35483332394 -} -adc_trajectory_point { - x: -131.668661222 - y: 337.371907279 - z: -31.2907408178 - - speed: 3.70277786255 - acceleration_s: -0.099527039029 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.668661222 + y: 337.371907279 + z: -31.2907408178 + theta: -1.83281894125 + kappa: 0.00053584710648 + s: 28.39186110254 + dkappa: 0 + } + v: 3.70277786255 + a: -0.099527039029 relative_time: 8.8199999332427979 - theta: -1.83281894125 - accumulated_s: 28.39186110254 -} -adc_trajectory_point { - x: -131.678659342 - y: 337.335557915 - z: -31.2902631406 - - speed: 3.70277786255 - acceleration_s: 0.0890027687472 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.678659342 + y: 337.335557915 + z: -31.2902631406 + theta: -1.83288298567 + kappa: 0.00053584710648 + s: 28.42888888124 + dkappa: 0 + } + v: 3.70277786255 + a: 0.0890027687472 relative_time: 8.8300001621246338 - theta: -1.83288298567 - accumulated_s: 28.42888888124 -} -adc_trajectory_point { - x: -131.688624377 - y: 337.299222625 - z: -31.2899421751 - - speed: 3.70000004768 - acceleration_s: -0.137580611445 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.688624377 + y: 337.299222625 + z: -31.2899421751 + theta: -1.83291704751 + kappa: 0.00053584710648 + s: 28.46588888164 + dkappa: 0 + } + v: 3.70000004768 + a: -0.137580611445 relative_time: 8.84000015258789 - theta: -1.83291704751 - accumulated_s: 28.46588888164 -} -adc_trajectory_point { - x: -131.688624377 - y: 337.299222625 - z: -31.2899421751 - - speed: 3.70000004768 - acceleration_s: -0.137580611445 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.688624377 + y: 337.299222625 + z: -31.2899421751 + theta: -1.83291704751 + kappa: 0.00053584710648 + s: 28.50288888214 + dkappa: 0 + } + v: 3.70000004768 + a: -0.137580611445 relative_time: 8.84000015258789 - theta: -1.83291704751 - accumulated_s: 28.50288888214 -} -adc_trajectory_point { - x: -131.708531599 - y: 337.226494257 - z: -31.2892645588 - - speed: 3.70000004768 - acceleration_s: 0.0396054650685 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.708531599 + y: 337.226494257 + z: -31.2892645588 + theta: -1.83296999317 + kappa: 0.00053584710648 + s: 28.53988888264 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0396054650685 relative_time: 8.8600001335144043 - theta: -1.83296999317 - accumulated_s: 28.53988888264 -} -adc_trajectory_point { - x: -131.718479872 - y: 337.190087374 - z: -31.2888366133 - - speed: 3.70000004768 - acceleration_s: 0.180401379397 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.718479872 + y: 337.190087374 + z: -31.2888366133 + theta: -1.83298946318 + kappa: 0.00053584710648 + s: 28.57688888314 + dkappa: 0 + } + v: 3.70000004768 + a: 0.180401379397 relative_time: 8.8700001239776611 - theta: -1.83298946318 - accumulated_s: 28.57688888314 -} -adc_trajectory_point { - x: -131.72839872 - y: 337.153695671 - z: -31.2885086285 - - speed: 3.70000004768 - acceleration_s: 0.0836099026704 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.72839872 + y: 337.153695671 + z: -31.2885086285 + theta: -1.8330274929 + kappa: 0.00053584710648 + s: 28.61388888364 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0836099026704 relative_time: 8.880000114440918 - theta: -1.8330274929 - accumulated_s: 28.61388888364 -} -adc_trajectory_point { - x: -131.738315366 - y: 337.117265071 - z: -31.2881116476 - - speed: 3.70000004768 - acceleration_s: 0.135979254009 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.738315366 + y: 337.117265071 + z: -31.2881116476 + theta: -1.83304124774 + kappa: 0.00053584710648 + s: 28.65088888404 + dkappa: 0 + } + v: 3.70000004768 + a: 0.135979254009 relative_time: 8.8900001049041748 - theta: -1.83304124774 - accumulated_s: 28.65088888404 -} -adc_trajectory_point { - x: -131.748245639 - y: 337.080881606 - z: -31.2878572233 - - speed: 3.70277786255 - acceleration_s: 0.135979254009 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.748245639 + y: 337.080881606 + z: -31.2878572233 + theta: -1.83309087791 + kappa: 0.00053584710648 + s: 28.68791666274 + dkappa: 0 + } + v: 3.70277786255 + a: 0.135979254009 relative_time: 8.9000000953674316 - theta: -1.83309087791 - accumulated_s: 28.68791666274 -} -adc_trajectory_point { - x: -131.758150354 - y: 337.044486814 - z: -31.2875475967 - - speed: 3.70277786255 - acceleration_s: -0.0505321742459 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.758150354 + y: 337.044486814 + z: -31.2875475967 + theta: -1.83310802566 + kappa: 0.00053584710648 + s: 28.72494444134 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0505321742459 relative_time: 8.9100000858306885 - theta: -1.83310802566 - accumulated_s: 28.72494444134 -} -adc_trajectory_point { - x: -131.768059188 - y: 337.008108499 - z: -31.2871869998 - - speed: 3.70277786255 - acceleration_s: -0.131845749929 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.768059188 + y: 337.008108499 + z: -31.2871869998 + theta: -1.833123165 + kappa: 0.00053584710648 + s: 28.76197221994 + dkappa: 0 + } + v: 3.70277786255 + a: -0.131845749929 relative_time: 8.9200000762939453 - theta: -1.833123165 - accumulated_s: 28.76197221994 -} -adc_trajectory_point { - x: -131.777970007 - y: 336.971717349 - z: -31.286901297 - - speed: 3.70277786255 - acceleration_s: -0.0451045930258 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.777970007 + y: 336.971717349 + z: -31.286901297 + theta: -1.83313277831 + kappa: 0.00053584710648 + s: 28.79899999854 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0451045930258 relative_time: 8.9300000667572021 - theta: -1.83313277831 - accumulated_s: 28.79899999854 -} -adc_trajectory_point { - x: -131.787917428 - y: 336.935312594 - z: -31.2865524534 - - speed: 3.70000004768 - acceleration_s: 0.127624506135 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.787917428 + y: 336.935312594 + z: -31.2865524534 + theta: -1.83316101704 + kappa: 0.00053584710648 + s: 28.83599999904 + dkappa: 0 + } + v: 3.70000004768 + a: 0.127624506135 relative_time: 8.940000057220459 - theta: -1.83316101704 - accumulated_s: 28.83599999904 -} -adc_trajectory_point { - x: -131.787917428 - y: 336.935312594 - z: -31.2865524534 - - speed: 3.70000004768 - acceleration_s: 0.127624506135 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.787917428 + y: 336.935312594 + z: -31.2865524534 + theta: -1.83316101704 + kappa: 0.00053584710648 + s: 28.87299999954 + dkappa: 0 + } + v: 3.70000004768 + a: 0.127624506135 relative_time: 8.940000057220459 - theta: -1.83316101704 - accumulated_s: 28.87299999954 -} -adc_trajectory_point { - x: -131.807778545 - y: 336.862541381 - z: -31.2859327458 - - speed: 3.70277786255 - acceleration_s: 0.0238426907985 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.807778545 + y: 336.862541381 + z: -31.2859327458 + theta: -1.83316117339 + kappa: 0.00053584710648 + s: 28.91002777814 + dkappa: 0 + } + v: 3.70277786255 + a: 0.0238426907985 relative_time: 8.9600000381469727 - theta: -1.83316117339 - accumulated_s: 28.91002777814 -} -adc_trajectory_point { - x: -131.81775047 - y: 336.826192022 - z: -31.285672551 - - speed: 3.70277786255 - acceleration_s: -0.0975240029295 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.81775047 + y: 336.826192022 + z: -31.285672551 + theta: -1.83319875823 + kappa: 0.00053584710648 + s: 28.94705555674 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0975240029295 relative_time: 8.97000002861023 - theta: -1.83319875823 - accumulated_s: 28.94705555674 -} -adc_trajectory_point { - x: -131.827726885 - y: 336.789829578 - z: -31.2853520252 - - speed: 3.70277786255 - acceleration_s: -0.0257528220648 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.827726885 + y: 336.789829578 + z: -31.2853520252 + theta: -1.83318785812 + kappa: 0.00053584710648 + s: 28.98408333544 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0257528220648 relative_time: 8.9800000190734863 - theta: -1.83318785812 - accumulated_s: 28.98408333544 -} -adc_trajectory_point { - x: -131.837727948 - y: 336.753476516 - z: -31.2850953396 - - speed: 3.70277786255 - acceleration_s: -0.0293263028318 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.837727948 + y: 336.753476516 + z: -31.2850953396 + theta: -1.83316666831 + kappa: 0.00053584710648 + s: 29.02111111404 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0293263028318 relative_time: 8.9900000095367432 - theta: -1.83316666831 - accumulated_s: 29.02111111404 -} -adc_trajectory_point { - x: -131.837727948 - y: 336.753476516 - z: -31.2850953396 - - speed: 3.70277786255 - acceleration_s: -0.0293263028318 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.837727948 + y: 336.753476516 + z: -31.2850953396 + theta: -1.83316666831 + kappa: 0.00053584710648 + s: 29.05813889264 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0293263028318 relative_time: 8.9900000095367432 - theta: -1.83316666831 - accumulated_s: 29.05813889264 -} -adc_trajectory_point { - x: -131.857789913 - y: 336.680795797 - z: -31.2844986888 - - speed: 3.70277786255 - acceleration_s: -0.0859159215394 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.857789913 + y: 336.680795797 + z: -31.2844986888 + theta: -1.8331442283 + kappa: 0.00053584710648 + s: 29.09516667124 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0859159215394 relative_time: 9.0099999904632568 - theta: -1.8331442283 - accumulated_s: 29.09516667124 -} -adc_trajectory_point { - x: -131.867858279 - y: 336.644447226 - z: -31.2842541337 - - speed: 3.70000004768 - acceleration_s: 0.0688763261144 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.867858279 + y: 336.644447226 + z: -31.2842541337 + theta: -1.83314503834 + kappa: 0.00053584710648 + s: 29.13216667174 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0688763261144 relative_time: 9.0199999809265137 - theta: -1.83314503834 - accumulated_s: 29.13216667174 -} -adc_trajectory_point { - x: -131.877926522 - y: 336.608126829 - z: -31.2838689461 - - speed: 3.70000004768 - acceleration_s: -0.0674539453227 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.877926522 + y: 336.608126829 + z: -31.2838689461 + theta: -1.83312264266 + kappa: 0.00053584710648 + s: 29.16916667224 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0674539453227 relative_time: 9.02999997138977 - theta: -1.83312264266 - accumulated_s: 29.16916667224 -} -adc_trajectory_point { - x: -131.888045007 - y: 336.571811491 - z: -31.2836882854 - - speed: 3.70000004768 - acceleration_s: 0.0021468945572 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.888045007 + y: 336.571811491 + z: -31.2836882854 + theta: -1.83312505396 + kappa: 0.00053584710648 + s: 29.20616667274 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0021468945572 relative_time: 9.0399999618530273 - theta: -1.83312505396 - accumulated_s: 29.20616667274 -} -adc_trajectory_point { - x: -131.898139316 - y: 336.53546611 - z: -31.2834078707 - - speed: 3.70000004768 - acceleration_s: 0.0893199435897 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.898139316 + y: 336.53546611 + z: -31.2834078707 + theta: -1.83311317301 + kappa: 0.00053584710648 + s: 29.24316667314 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0893199435897 relative_time: 9.0499999523162842 - theta: -1.83311317301 - accumulated_s: 29.24316667314 -} -adc_trajectory_point { - x: -131.908238826 - y: 336.499157166 - z: -31.2832412831 - - speed: 3.70277786255 - acceleration_s: -0.0335673719355 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.908238826 + y: 336.499157166 + z: -31.2832412831 + theta: -1.83313955653 + kappa: 0.00053584710648 + s: 29.28019445184 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0335673719355 relative_time: 9.059999942779541 - theta: -1.83313955653 - accumulated_s: 29.28019445184 -} -adc_trajectory_point { - x: -131.918309583 - y: 336.462810372 - z: -31.282883063 - - speed: 3.70277786255 - acceleration_s: -0.0254764834384 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.918309583 + y: 336.462810372 + z: -31.282883063 + theta: -1.83309929172 + kappa: 0.00053584710648 + s: 29.31722223044 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0254764834384 relative_time: 9.0699999332427979 - theta: -1.83309929172 - accumulated_s: 29.31722223044 -} -adc_trajectory_point { - x: -131.928360849 - y: 336.426486092 - z: -31.2826836845 - - speed: 3.70277786255 - acceleration_s: -0.0254764834384 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.928360849 + y: 336.426486092 + z: -31.2826836845 + theta: -1.83311098593 + kappa: 0.00053584710648 + s: 29.35425000904 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0254764834384 relative_time: 9.0800001621246338 - theta: -1.83311098593 - accumulated_s: 29.35425000904 -} -adc_trajectory_point { - x: -131.938423434 - y: 336.390161578 - z: -31.2824502764 - - speed: 3.70277786255 - acceleration_s: -0.0668495592853 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.938423434 + y: 336.390161578 + z: -31.2824502764 + theta: -1.83314376077 + kappa: 0.00053584710648 + s: 29.39127778764 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0668495592853 relative_time: 9.09000015258789 - theta: -1.83314376077 - accumulated_s: 29.39127778764 -} -adc_trajectory_point { - x: -131.938423434 - y: 336.390161578 - z: -31.2824502764 - - speed: 3.70000004768 - acceleration_s: -0.0668495592853 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.938423434 + y: 336.390161578 + z: -31.2824502764 + theta: -1.83314376077 + kappa: 0.00053584710648 + s: 29.42827778814 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0668495592853 relative_time: 9.09000015258789 - theta: -1.83314376077 - accumulated_s: 29.42827778814 -} -adc_trajectory_point { - x: -131.958419922 - y: 336.317464015 - z: -31.2820673492 - - speed: 3.70000004768 - acceleration_s: 0.0778040294489 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.958419922 + y: 336.317464015 + z: -31.2820673492 + theta: -1.83315452385 + kappa: 0.00053584710648 + s: 29.46527778864 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0778040294489 relative_time: 9.1100001335144043 - theta: -1.83315452385 - accumulated_s: 29.46527778864 -} -adc_trajectory_point { - x: -131.968373492 - y: 336.28110898 - z: -31.2818031767 - - speed: 3.69722223282 - acceleration_s: 0.00340458911614 - curvature: 0.000497572263703 - curvature_change_rate: -0.00103523240872 +} +trajectory_point { + path_point { + x: -131.968373492 + y: 336.28110898 + z: -31.2818031767 + theta: -1.83314264465 + kappa: 0.000497572263703 + s: 29.50225001094 + dkappa: -0.00103523240872 + } + v: 3.69722223282 + a: 0.00340458911614 relative_time: 9.1200001239776611 - theta: -1.83314264465 - accumulated_s: 29.50225001094 -} -adc_trajectory_point { - x: -131.978316981 - y: 336.244732181 - z: -31.2816065559 - - speed: 3.69722223282 - acceleration_s: 0.0857427683471 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.978316981 + y: 336.244732181 + z: -31.2816065559 + theta: -1.83313270365 + kappa: 0.000497572263703 + s: 29.53922223334 + dkappa: 0 + } + v: 3.69722223282 + a: 0.0857427683471 relative_time: 9.130000114440918 - theta: -1.83313270365 - accumulated_s: 29.53922223334 -} -adc_trajectory_point { - x: -131.988291681 - y: 336.208387714 - z: -31.2813490098 - - speed: 3.69722223282 - acceleration_s: -0.0700423239248 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.988291681 + y: 336.208387714 + z: -31.2813490098 + theta: -1.83319844934 + kappa: 0.000497572263703 + s: 29.57619445564 + dkappa: 0 + } + v: 3.69722223282 + a: -0.0700423239248 relative_time: 9.1400001049041748 - theta: -1.83319844934 - accumulated_s: 29.57619445564 -} -adc_trajectory_point { - x: -131.998212134 - y: 336.17206633 - z: -31.2812162284 - - speed: 3.69722223282 - acceleration_s: -0.0700423239248 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.998212134 + y: 336.17206633 + z: -31.2812162284 + theta: -1.83323643575 + kappa: 0.000497572263703 + s: 29.61316667794 + dkappa: 0 + } + v: 3.69722223282 + a: -0.0700423239248 relative_time: 9.1500000953674316 - theta: -1.83323643575 - accumulated_s: 29.61316667794 -} -adc_trajectory_point { - x: -132.008181273 - y: 336.135707756 - z: -31.2809310397 - - speed: 3.70000004768 - acceleration_s: -0.0460476408749 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.008181273 + y: 336.135707756 + z: -31.2809310397 + theta: -1.83327856135 + kappa: 0.000497572263703 + s: 29.65016667844 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0460476408749 relative_time: 9.1600000858306885 - theta: -1.83327856135 - accumulated_s: 29.65016667844 -} -adc_trajectory_point { - x: -132.018130384 - y: 336.099390106 - z: -31.2807655167 - - speed: 3.70000004768 - acceleration_s: -0.115812291568 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.018130384 + y: 336.099390106 + z: -31.2807655167 + theta: -1.83331377557 + kappa: 0.000497572263703 + s: 29.68716667894 + dkappa: 0 + } + v: 3.70000004768 + a: -0.115812291568 relative_time: 9.1700000762939453 - theta: -1.83331377557 - accumulated_s: 29.68716667894 -} -adc_trajectory_point { - x: -132.028097214 - y: 336.063064907 - z: -31.2804642152 - - speed: 3.70000004768 - acceleration_s: -0.0634537214815 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.028097214 + y: 336.063064907 + z: -31.2804642152 + theta: -1.83333034688 + kappa: 0.000497572263703 + s: 29.72416667934 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0634537214815 relative_time: 9.1800000667572021 - theta: -1.83333034688 - accumulated_s: 29.72416667934 -} -adc_trajectory_point { - x: -132.038067381 - y: 336.026769643 - z: -31.2803229606 - - speed: 3.70000004768 - acceleration_s: -0.118376814908 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.038067381 + y: 336.026769643 + z: -31.2803229606 + theta: -1.83337965058 + kappa: 0.000497572263703 + s: 29.76116667984 + dkappa: 0 + } + v: 3.70000004768 + a: -0.118376814908 relative_time: 9.190000057220459 - theta: -1.83337965058 - accumulated_s: 29.76116667984 -} -adc_trajectory_point { - x: -132.038067381 - y: 336.026769643 - z: -31.2803229606 - - speed: 3.70000004768 - acceleration_s: -0.118376814908 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.038067381 + y: 336.026769643 + z: -31.2803229606 + theta: -1.83337965058 + kappa: 0.000497572263703 + s: 29.79816668034 + dkappa: 0 + } + v: 3.70000004768 + a: -0.118376814908 relative_time: 9.190000057220459 - theta: -1.83337965058 - accumulated_s: 29.79816668034 -} -adc_trajectory_point { - x: -132.057996965 - y: 335.954147235 - z: -31.2798358034 - - speed: 3.70000004768 - acceleration_s: -0.0808539505321 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.057996965 + y: 335.954147235 + z: -31.2798358034 + theta: -1.83335918303 + kappa: 0.000497572263703 + s: 29.83516668084 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0808539505321 relative_time: 9.2100000381469727 - theta: -1.83335918303 - accumulated_s: 29.83516668084 -} -adc_trajectory_point { - x: -132.068021459 - y: 335.917832418 - z: -31.2795281885 - - speed: 3.70277786255 - acceleration_s: 0.112236915771 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.068021459 + y: 335.917832418 + z: -31.2795281885 + theta: -1.83338053939 + kappa: 0.000497572263703 + s: 29.87219445944 + dkappa: 0 + } + v: 3.70277786255 + a: 0.112236915771 relative_time: 9.22000002861023 - theta: -1.83338053939 - accumulated_s: 29.87219445944 -} -adc_trajectory_point { - x: -132.077989439 - y: 335.881557276 - z: -31.2793505248 - - speed: 3.70277786255 - acceleration_s: -0.133367470484 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.077989439 + y: 335.881557276 + z: -31.2793505248 + theta: -1.83338886045 + kappa: 0.000497572263703 + s: 29.90922223804 + dkappa: 0 + } + v: 3.70277786255 + a: -0.133367470484 relative_time: 9.2300000190734863 - theta: -1.83338886045 - accumulated_s: 29.90922223804 -} -adc_trajectory_point { - x: -132.077989439 - y: 335.881557276 - z: -31.2793505248 - - speed: 3.705555439 - acceleration_s: -0.133367470484 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.077989439 + y: 335.881557276 + z: -31.2793505248 + theta: -1.83338886045 + kappa: 0.000497572263703 + s: 29.94627779244 + dkappa: 0 + } + v: 3.705555439 + a: -0.133367470484 relative_time: 9.2300000190734863 - theta: -1.83338886045 - accumulated_s: 29.94627779244 -} -adc_trajectory_point { - x: -132.097946774 - y: 335.808984003 - z: -31.2788987225 - - speed: 3.705555439 - acceleration_s: -0.0128794777785 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.097946774 + y: 335.808984003 + z: -31.2788987225 + theta: -1.83344914213 + kappa: 0.000497572263703 + s: 29.98333334684 + dkappa: 0 + } + v: 3.705555439 + a: -0.0128794777785 relative_time: 9.25 - theta: -1.83344914213 - accumulated_s: 29.98333334684 -} -adc_trajectory_point { - x: -132.107904573 - y: 335.772678861 - z: -31.2787367748 - - speed: 3.70833325386 - acceleration_s: 0.0281507078451 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.107904573 + y: 335.772678861 + z: -31.2787367748 + theta: -1.83344925793 + kappa: 0.000497572263703 + s: 30.02041667934 + dkappa: 0 + } + v: 3.70833325386 + a: 0.0281507078451 relative_time: 9.2599999904632568 - theta: -1.83344925793 - accumulated_s: 30.02041667934 -} -adc_trajectory_point { - x: -132.117859476 - y: 335.736392537 - z: -31.2785454029 - - speed: 3.70833325386 - acceleration_s: -0.0324692451399 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.117859476 + y: 335.736392537 + z: -31.2785454029 + theta: -1.83346644884 + kappa: 0.000497572263703 + s: 30.05750001194 + dkappa: 0 + } + v: 3.70833325386 + a: -0.0324692451399 relative_time: 9.2699999809265137 - theta: -1.83346644884 - accumulated_s: 30.05750001194 -} -adc_trajectory_point { - x: -132.127804151 - y: 335.700106117 - z: -31.2784009278 - - speed: 3.705555439 - acceleration_s: -0.0499122077425 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.127804151 + y: 335.700106117 + z: -31.2784009278 + theta: -1.83347854463 + kappa: 0.000497572263703 + s: 30.09455556634 + dkappa: 0 + } + v: 3.705555439 + a: -0.0499122077425 relative_time: 9.27999997138977 - theta: -1.83347854463 - accumulated_s: 30.09455556634 -} -adc_trajectory_point { - x: -132.13774501 - y: 335.663806691 - z: -31.2781876344 - - speed: 3.705555439 - acceleration_s: -0.0204625835762 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.13774501 + y: 335.663806691 + z: -31.2781876344 + theta: -1.83349770563 + kappa: 0.000497572263703 + s: 30.13161112074 + dkappa: 0 + } + v: 3.705555439 + a: -0.0204625835762 relative_time: 9.2899999618530273 - theta: -1.83349770563 - accumulated_s: 30.13161112074 -} -adc_trajectory_point { - x: -132.147647431 - y: 335.627528584 - z: -31.2781113992 - - speed: 3.70277786255 - acceleration_s: -0.0204625835762 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.147647431 + y: 335.627528584 + z: -31.2781113992 + theta: -1.83347794346 + kappa: 0.000497572263703 + s: 30.16863889934 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0204625835762 relative_time: 9.2999999523162842 - theta: -1.83347794346 - accumulated_s: 30.16863889934 -} -adc_trajectory_point { - x: -132.157598613 - y: 335.591221714 - z: -31.2779482659 - - speed: 3.70277786255 - acceleration_s: 0.0148677812372 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.157598613 + y: 335.591221714 + z: -31.2779482659 + theta: -1.83353368127 + kappa: 0.000497572263703 + s: 30.20566667794 + dkappa: 0 + } + v: 3.70277786255 + a: 0.0148677812372 relative_time: 9.309999942779541 - theta: -1.83353368127 - accumulated_s: 30.20566667794 -} -adc_trajectory_point { - x: -132.167486542 - y: 335.554938476 - z: -31.2779333852 - - speed: 3.70833325386 - acceleration_s: -0.0861770774704 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.167486542 + y: 335.554938476 + z: -31.2779333852 + theta: -1.83352248502 + kappa: 0.000497572263703 + s: 30.24275001054 + dkappa: 0 + } + v: 3.70833325386 + a: -0.0861770774704 relative_time: 9.3199999332427979 - theta: -1.83352248502 - accumulated_s: 30.24275001054 -} -adc_trajectory_point { - x: -132.177389065 - y: 335.518639297 - z: -31.2777470071 - - speed: 3.70833325386 - acceleration_s: -0.0108284926706 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.177389065 + y: 335.518639297 + z: -31.2777470071 + theta: -1.83352944732 + kappa: 0.000497572263703 + s: 30.27983334304 + dkappa: 0 + } + v: 3.70833325386 + a: -0.0108284926706 relative_time: 9.3300001621246338 - theta: -1.83352944732 - accumulated_s: 30.27983334304 -} -adc_trajectory_point { - x: -132.187282044 - y: 335.482382948 - z: -31.277702542 - - speed: 3.705555439 - acceleration_s: -0.170504335112 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.187282044 + y: 335.482382948 + z: -31.277702542 + theta: -1.8335351443 + kappa: 0.000497572263703 + s: 30.31688889744 + dkappa: 0 + } + v: 3.705555439 + a: -0.170504335112 relative_time: 9.34000015258789 - theta: -1.8335351443 - accumulated_s: 30.31688889744 -} -adc_trajectory_point { - x: -132.197146705 - y: 335.446071787 - z: -31.2775664376 - - speed: 3.705555439 - acceleration_s: 0.064874406577 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.197146705 + y: 335.446071787 + z: -31.2775664376 + theta: -1.83348356256 + kappa: 0.000497572263703 + s: 30.35394445184 + dkappa: 0 + } + v: 3.705555439 + a: 0.064874406577 relative_time: 9.3500001430511475 - theta: -1.83348356256 - accumulated_s: 30.35394445184 -} -adc_trajectory_point { - x: -132.2070435 - y: 335.409805434 - z: -31.2775769858 - - speed: 3.70277786255 - acceleration_s: 0.064874406577 - curvature: 0.000459297432768 - curvature_change_rate: -0.0010336788313 +} +trajectory_point { + path_point { + x: -132.2070435 + y: 335.409805434 + z: -31.2775769858 + theta: -1.8335215536 + kappa: 0.000459297432768 + s: 30.39097223044 + dkappa: -0.0010336788313 + } + v: 3.70277786255 + a: 0.064874406577 relative_time: 9.3600001335144043 - theta: -1.8335215536 - accumulated_s: 30.39097223044 -} -adc_trajectory_point { - x: -132.216949518 - y: 335.373541721 - z: -31.2774795797 - - speed: 3.70277786255 - acceleration_s: -0.0377638359669 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.216949518 + y: 335.373541721 + z: -31.2774795797 + theta: -1.83352852181 + kappa: 0.000459297432768 + s: 30.42800000904 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0377638359669 relative_time: 9.3700001239776611 - theta: -1.83352852181 - accumulated_s: 30.42800000904 -} -adc_trajectory_point { - x: -132.226823516 - y: 335.337259561 - z: -31.2774208793 - - speed: 3.70000004768 - acceleration_s: -0.019376836181 - curvature: 0.000421022612763 - curvature_change_rate: -0.00103445458139 +} +trajectory_point { + path_point { + x: -132.226823516 + y: 335.337259561 + z: -31.2774208793 + theta: -1.83350958508 + kappa: 0.000421022612763 + s: 30.46500000954 + dkappa: -0.00103445458139 + } + v: 3.70000004768 + a: -0.019376836181 relative_time: 9.380000114440918 - theta: -1.83350958508 - accumulated_s: 30.46500000954 -} -adc_trajectory_point { - x: -132.236712689 - y: 335.301008906 - z: -31.2773537524 - - speed: 3.70000004768 - acceleration_s: -0.0714875758623 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.236712689 + y: 335.301008906 + z: -31.2773537524 + theta: -1.83349703975 + kappa: 0.000421022612763 + s: 30.50200001004 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0714875758623 relative_time: 9.3900001049041748 - theta: -1.83349703975 - accumulated_s: 30.50200001004 -} -adc_trajectory_point { - x: -132.236712689 - y: 335.301008906 - z: -31.2773537524 - - speed: 3.69722223282 - acceleration_s: -0.0714875758623 - curvature: 0.000382747802778 - curvature_change_rate: -0.0010352315218 +} +trajectory_point { + path_point { + x: -132.236712689 + y: 335.301008906 + z: -31.2773537524 + theta: -1.83349703975 + kappa: 0.000382747802778 + s: 30.53897223234 + dkappa: -0.0010352315218 + } + v: 3.69722223282 + a: -0.0714875758623 relative_time: 9.3900001049041748 - theta: -1.83349703975 - accumulated_s: 30.53897223234 -} -adc_trajectory_point { - x: -132.256508384 - y: 335.228520503 - z: -31.2773318859 - - speed: 3.69722223282 - acceleration_s: -0.0320372389986 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.256508384 + y: 335.228520503 + z: -31.2773318859 + theta: -1.83347645423 + kappa: 0.000382747802778 + s: 30.575944454640002 + dkappa: 0 + } + v: 3.69722223282 + a: -0.0320372389986 relative_time: 9.4100000858306885 - theta: -1.83347645423 - accumulated_s: 30.575944454640002 -} -adc_trajectory_point { - x: -132.266447045 - y: 335.19228644 - z: -31.2772535691 - - speed: 3.69166660309 - acceleration_s: -0.0277083486613 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.266447045 + y: 335.19228644 + z: -31.2772535691 + theta: -1.83349382294 + kappa: 0.000382747802778 + s: 30.61286112074 + dkappa: 0 + } + v: 3.69166660309 + a: -0.0277083486613 relative_time: 9.4200000762939453 - theta: -1.83349382294 - accumulated_s: 30.61286112074 -} -adc_trajectory_point { - x: -132.276349856 - y: 335.156047197 - z: -31.2773276428 - - speed: 3.69166660309 - acceleration_s: 0.0097882489765 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.276349856 + y: 335.156047197 + z: -31.2773276428 + theta: -1.83346983411 + kappa: 0.000382747802778 + s: 30.649777786740003 + dkappa: 0 + } + v: 3.69166660309 + a: 0.0097882489765 relative_time: 9.4300000667572021 - theta: -1.83346983411 - accumulated_s: 30.649777786740003 -} -adc_trajectory_point { - x: -132.28627245 - y: 335.119809234 - z: -31.2772213072 - - speed: 3.69166660309 - acceleration_s: -0.0203050805543 - curvature: 0.000306198182417 - curvature_change_rate: -0.00207357891682 +} +trajectory_point { + path_point { + x: -132.28627245 + y: 335.119809234 + z: -31.2772213072 + theta: -1.83346225214 + kappa: 0.000306198182417 + s: 30.68669445274 + dkappa: -0.00207357891682 + } + v: 3.69166660309 + a: -0.0203050805543 relative_time: 9.440000057220459 - theta: -1.83346225214 - accumulated_s: 30.68669445274 -} -adc_trajectory_point { - x: -132.28627245 - y: 335.119809234 - z: -31.2772213072 - - speed: 3.69166660309 - acceleration_s: -0.0203050805543 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.28627245 + y: 335.119809234 + z: -31.2772213072 + theta: -1.83346225214 + kappa: 0.000306198182417 + s: 30.723611118839997 + dkappa: 0 + } + v: 3.69166660309 + a: -0.0203050805543 relative_time: 9.440000057220459 - theta: -1.83346225214 - accumulated_s: 30.723611118839997 -} -adc_trajectory_point { - x: -132.306121853 - y: 335.04740141 - z: -31.2771796137 - - speed: 3.68888878822 - acceleration_s: -0.113497308062 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.306121853 + y: 335.04740141 + z: -31.2771796137 + theta: -1.83348980646 + kappa: 0.000306198182417 + s: 30.76050000664 + dkappa: 0 + } + v: 3.68888878822 + a: -0.113497308062 relative_time: 9.4600000381469727 - theta: -1.83348980646 - accumulated_s: 30.76050000664 -} -adc_trajectory_point { - x: -132.316022213 - y: 335.011197764 - z: -31.2771620173 - - speed: 3.68888878822 - acceleration_s: -0.10800009485 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.316022213 + y: 335.011197764 + z: -31.2771620173 + theta: -1.83346983723 + kappa: 0.000306198182417 + s: 30.79738889454 + dkappa: 0 + } + v: 3.68888878822 + a: -0.10800009485 relative_time: 9.47000002861023 - theta: -1.83346983723 - accumulated_s: 30.79738889454 -} -adc_trajectory_point { - x: -132.325942061 - y: 334.974998993 - z: -31.2771311263 - - speed: 3.68611121178 - acceleration_s: -0.10800009485 - curvature: 0.000267923397025 - curvature_change_rate: -0.00103835134625 +} +trajectory_point { + path_point { + x: -132.325942061 + y: 334.974998993 + z: -31.2771311263 + theta: -1.83348745956 + kappa: 0.000267923397025 + s: 30.834250006639998 + dkappa: -0.00103835134625 + } + v: 3.68611121178 + a: -0.10800009485 relative_time: 9.4800000190734863 - theta: -1.83348745956 - accumulated_s: 30.834250006639998 -} -adc_trajectory_point { - x: -132.335866566 - y: 334.938789824 - z: -31.2771076933 - - speed: 3.68611121178 - acceleration_s: 0.00340698607689 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.335866566 + y: 334.938789824 + z: -31.2771076933 + theta: -1.83351794815 + kappa: 0.000267923397025 + s: 30.87111111884 + dkappa: 0 + } + v: 3.68611121178 + a: 0.00340698607689 relative_time: 9.4900000095367432 - theta: -1.83351794815 - accumulated_s: 30.87111111884 -} -adc_trajectory_point { - x: -132.34579007 - y: 334.902605896 - z: -31.2770189103 - - speed: 3.68611121178 - acceleration_s: 0.00340698607689 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.34579007 + y: 334.902605896 + z: -31.2770189103 + theta: -1.83356104399 + kappa: 0.000267923397025 + s: 30.907972230939997 + dkappa: 0 + } + v: 3.68611121178 + a: 0.00340698607689 relative_time: 9.5 - theta: -1.83356104399 - accumulated_s: 30.907972230939997 -} -adc_trajectory_point { - x: -132.34579007 - y: 334.902605896 - z: -31.2770189103 - - speed: 3.68611121178 - acceleration_s: -0.0598562763837 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.34579007 + y: 334.902605896 + z: -31.2770189103 + theta: -1.83356104399 + kappa: 0.000267923397025 + s: 30.944833343040003 + dkappa: 0 + } + v: 3.68611121178 + a: -0.0598562763837 relative_time: 9.5 - theta: -1.83356104399 - accumulated_s: 30.944833343040003 -} -adc_trajectory_point { - x: -132.365628196 - y: 334.830263087 - z: -31.2768508997 - - speed: 3.68611121178 - acceleration_s: -0.0852656314668 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.365628196 + y: 334.830263087 + z: -31.2768508997 + theta: -1.83361914369 + kappa: 0.000267923397025 + s: 30.98169445514 + dkappa: 0 + } + v: 3.68611121178 + a: -0.0852656314668 relative_time: 9.5199999809265137 - theta: -1.83361914369 - accumulated_s: 30.98169445514 -} -adc_trajectory_point { - x: -132.375541309 - y: 334.794117251 - z: -31.2767734025 - - speed: 3.68611121178 - acceleration_s: -0.119545102887 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.375541309 + y: 334.794117251 + z: -31.2767734025 + theta: -1.83362740513 + kappa: 0.000267923397025 + s: 31.01855556724 + dkappa: 0 + } + v: 3.68611121178 + a: -0.119545102887 relative_time: 9.52999997138977 - theta: -1.83362740513 - accumulated_s: 31.01855556724 -} -adc_trajectory_point { - x: -132.385502938 - y: 334.757982983 - z: -31.2767456351 - - speed: 3.68611121178 - acceleration_s: -0.0521183684964 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.385502938 + y: 334.757982983 + z: -31.2767456351 + theta: -1.83369129463 + kappa: 0.000267923397025 + s: 31.05541667934 + dkappa: 0 + } + v: 3.68611121178 + a: -0.0521183684964 relative_time: 9.5399999618530273 - theta: -1.83369129463 - accumulated_s: 31.05541667934 -} -adc_trajectory_point { - x: -132.395440882 - y: 334.721841131 - z: -31.2765656896 - - speed: 3.68611121178 - acceleration_s: -0.0521183684964 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.395440882 + y: 334.721841131 + z: -31.2765656896 + theta: -1.8337147282 + kappa: 0.000267923397025 + s: 31.09227779154 + dkappa: 0 + } + v: 3.68611121178 + a: -0.0521183684964 relative_time: 9.5499999523162842 - theta: -1.8337147282 - accumulated_s: 31.09227779154 -} -adc_trajectory_point { - x: -132.405356414 - y: 334.685726786 - z: -31.2765603065 - - speed: 3.68611121178 - acceleration_s: -0.10309123563 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.405356414 + y: 334.685726786 + z: -31.2765603065 + theta: -1.83373368173 + kappa: 0.000267923397025 + s: 31.129138903639998 + dkappa: 0 + } + v: 3.68611121178 + a: -0.10309123563 relative_time: 9.559999942779541 - theta: -1.83373368173 - accumulated_s: 31.129138903639998 -} -adc_trajectory_point { - x: -132.415285953 - y: 334.649572979 - z: -31.27638816 - - speed: 3.68611121178 - acceleration_s: 0.0632254496802 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.415285953 + y: 334.649572979 + z: -31.27638816 + theta: -1.83377606174 + kappa: 0.000267923397025 + s: 31.166000015740003 + dkappa: 0 + } + v: 3.68611121178 + a: 0.0632254496802 relative_time: 9.5699999332427979 - theta: -1.83377606174 - accumulated_s: 31.166000015740003 -} -adc_trajectory_point { - x: -132.425176129 - y: 334.613471669 - z: -31.276399726 - - speed: 3.68611121178 - acceleration_s: -0.16557725373 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.425176129 + y: 334.613471669 + z: -31.276399726 + theta: -1.83382686471 + kappa: 0.000267923397025 + s: 31.202861127840002 + dkappa: 0 + } + v: 3.68611121178 + a: -0.16557725373 relative_time: 9.5800001621246338 - theta: -1.83382686471 - accumulated_s: 31.202861127840002 -} -adc_trajectory_point { - x: -132.435087263 - y: 334.577329929 - z: -31.2761858553 - - speed: 3.68611121178 - acceleration_s: 0.0030236410683 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.435087263 + y: 334.577329929 + z: -31.2761858553 + theta: -1.83388921224 + kappa: 0.000267923397025 + s: 31.23972223994 + dkappa: 0 + } + v: 3.68611121178 + a: 0.0030236410683 relative_time: 9.59000015258789 - theta: -1.83388921224 - accumulated_s: 31.23972223994 -} -adc_trajectory_point { - x: -132.444935072 - y: 334.541233548 - z: -31.2762448108 - - speed: 3.68611121178 - acceleration_s: 0.0030236410683 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.444935072 + y: 334.541233548 + z: -31.2762448108 + theta: -1.83393036295 + kappa: 0.000267923397025 + s: 31.27658335214 + dkappa: 0 + } + v: 3.68611121178 + a: 0.0030236410683 relative_time: 9.6000001430511475 - theta: -1.83393036295 - accumulated_s: 31.27658335214 -} -adc_trajectory_point { - x: -132.454787152 - y: 334.505092022 - z: -31.2761642355 - - speed: 3.68611121178 - acceleration_s: -0.194202137923 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.454787152 + y: 334.505092022 + z: -31.2761642355 + theta: -1.83397956297 + kappa: 0.000267923397025 + s: 31.31344446424 + dkappa: 0 + } + v: 3.68611121178 + a: -0.194202137923 relative_time: 9.6100001335144043 - theta: -1.83397956297 - accumulated_s: 31.31344446424 -} -adc_trajectory_point { - x: -132.464602605 - y: 334.468987353 - z: -31.2762580309 - - speed: 3.68333339691 - acceleration_s: -0.0921553495998 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.464602605 + y: 334.468987353 + z: -31.2762580309 + theta: -1.83400638466 + kappa: 0.000267923397025 + s: 31.35027779814 + dkappa: 0 + } + v: 3.68333339691 + a: -0.0921553495998 relative_time: 9.6200001239776611 - theta: -1.83400638466 - accumulated_s: 31.35027779814 -} -adc_trajectory_point { - x: -132.474450074 - y: 334.432839964 - z: -31.2761457358 - - speed: 3.68333339691 - acceleration_s: -0.0189713502264 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.474450074 + y: 334.432839964 + z: -31.2761457358 + theta: -1.8340811556 + kappa: 0.000267923397025 + s: 31.38711113214 + dkappa: 0 + } + v: 3.68333339691 + a: -0.0189713502264 relative_time: 9.630000114440918 - theta: -1.8340811556 - accumulated_s: 31.38711113214 -} -adc_trajectory_point { - x: -132.484249792 - y: 334.396733716 - z: -31.2762143593 - - speed: 3.68055558205 - acceleration_s: -0.113972390304 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.484249792 + y: 334.396733716 + z: -31.2762143593 + theta: -1.83411691341 + kappa: 0.000267923397025 + s: 31.42391668794 + dkappa: 0 + } + v: 3.68055558205 + a: -0.113972390304 relative_time: 9.6400001049041748 - theta: -1.83411691341 - accumulated_s: 31.42391668794 -} -adc_trajectory_point { - x: -132.484249792 - y: 334.396733716 - z: -31.2762143593 - - speed: 3.68055558205 - acceleration_s: -0.113972390304 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.484249792 + y: 334.396733716 + z: -31.2762143593 + theta: -1.83411691341 + kappa: 0.000267923397025 + s: 31.46072224374 + dkappa: 0 + } + v: 3.68055558205 + a: -0.113972390304 relative_time: 9.6400001049041748 - theta: -1.83411691341 - accumulated_s: 31.46072224374 -} -adc_trajectory_point { - x: -132.503793178 - y: 334.324478932 - z: -31.2763494886 - - speed: 3.67777776718 - acceleration_s: -0.00754373244004 - curvature: 0.00022964861801 - curvature_change_rate: -0.00104070396415 +} +trajectory_point { + path_point { + x: -132.503793178 + y: 334.324478932 + z: -31.2763494886 + theta: -1.83414336428 + kappa: 0.00022964861801 + s: 31.497500021439997 + dkappa: -0.00104070396415 + } + v: 3.67777776718 + a: -0.00754373244004 relative_time: 9.6600000858306885 - theta: -1.83414336428 - accumulated_s: 31.497500021439997 -} -adc_trajectory_point { - x: -132.513547372 - y: 334.288355637 - z: -31.2764242683 - - speed: 3.67777776718 - acceleration_s: -0.0429540512884 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.513547372 + y: 334.288355637 + z: -31.2764242683 + theta: -1.8341249813 + kappa: 0.00022964861801 + s: 31.53427779914 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0429540512884 relative_time: 9.6700000762939453 - theta: -1.8341249813 - accumulated_s: 31.53427779914 -} -adc_trajectory_point { - x: -132.523340475 - y: 334.25224665 - z: -31.2765155546 - - speed: 3.67499995232 - acceleration_s: -0.0641137927879 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.523340475 + y: 334.25224665 + z: -31.2765155546 + theta: -1.83413665565 + kappa: 0.00022964861801 + s: 31.571027798640003 + dkappa: 0 + } + v: 3.67499995232 + a: -0.0641137927879 relative_time: 9.6800000667572021 - theta: -1.83413665565 - accumulated_s: 31.571027798640003 -} -adc_trajectory_point { - x: -132.533120517 - y: 334.216149147 - z: -31.2766190059 - - speed: 3.67499995232 - acceleration_s: -0.0601449302991 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.533120517 + y: 334.216149147 + z: -31.2766190059 + theta: -1.83412861727 + kappa: 0.00022964861801 + s: 31.60777779814 + dkappa: 0 + } + v: 3.67499995232 + a: -0.0601449302991 relative_time: 9.690000057220459 - theta: -1.83412861727 - accumulated_s: 31.60777779814 -} -adc_trajectory_point { - x: -132.533120517 - y: 334.216149147 - z: -31.2766190059 - - speed: 3.67777776718 - acceleration_s: -0.0601449302991 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.533120517 + y: 334.216149147 + z: -31.2766190059 + theta: -1.83412861727 + kappa: 0.00022964861801 + s: 31.644555575840002 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0601449302991 relative_time: 9.690000057220459 - theta: -1.83412861727 - accumulated_s: 31.644555575840002 -} -adc_trajectory_point { - x: -132.55274699 - y: 334.143993175 - z: -31.2769757332 - - speed: 3.67777776718 - acceleration_s: -0.0473853953028 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.55274699 + y: 334.143993175 + z: -31.2769757332 + theta: -1.83411576045 + kappa: 0.00022964861801 + s: 31.681333353539998 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0473853953028 relative_time: 9.7100000381469727 - theta: -1.83411576045 - accumulated_s: 31.681333353539998 -} -adc_trajectory_point { - x: -132.562626884 - y: 334.107918546 - z: -31.2770130374 - - speed: 3.67777776718 - acceleration_s: 0.00380957724767 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.562626884 + y: 334.107918546 + z: -31.2770130374 + theta: -1.83410191979 + kappa: 0.00022964861801 + s: 31.71811113124 + dkappa: 0 + } + v: 3.67777776718 + a: 0.00380957724767 relative_time: 9.72000002861023 - theta: -1.83410191979 - accumulated_s: 31.71811113124 -} -adc_trajectory_point { - x: -132.572521441 - y: 334.071895683 - z: -31.2772678779 - - speed: 3.67777776718 - acceleration_s: -0.148643972092 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.572521441 + y: 334.071895683 + z: -31.2772678779 + theta: -1.83408614397 + kappa: 0.00022964861801 + s: 31.75488890884 + dkappa: 0 + } + v: 3.67777776718 + a: -0.148643972092 relative_time: 9.7300000190734863 - theta: -1.83408614397 - accumulated_s: 31.75488890884 -} -adc_trajectory_point { - x: -132.582445074 - y: 334.035855242 - z: -31.2773258034 - - speed: 3.67777776718 - acceleration_s: -0.0647918424753 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.582445074 + y: 334.035855242 + z: -31.2773258034 + theta: -1.83404132243 + kappa: 0.00022964861801 + s: 31.791666686539997 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0647918424753 relative_time: 9.7400000095367432 - theta: -1.83404132243 - accumulated_s: 31.791666686539997 -} -adc_trajectory_point { - x: -132.592399241 - y: 333.999878115 - z: -31.2775527621 - - speed: 3.67777776718 - acceleration_s: -0.0647918424753 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.592399241 + y: 333.999878115 + z: -31.2775527621 + theta: -1.83403700259 + kappa: 0.00022964861801 + s: 31.82844446424 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0647918424753 relative_time: 9.75 - theta: -1.83403700259 - accumulated_s: 31.82844446424 -} -adc_trajectory_point { - x: -132.602362924 - y: 333.963870573 - z: -31.277556641 - - speed: 3.68055558205 - acceleration_s: -0.0280492656679 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.602362924 + y: 333.963870573 + z: -31.277556641 + theta: -1.83400798623 + kappa: 0.00022964861801 + s: 31.86525002004 + dkappa: 0 + } + v: 3.68055558205 + a: -0.0280492656679 relative_time: 9.7599999904632568 - theta: -1.83400798623 - accumulated_s: 31.86525002004 -} -adc_trajectory_point { - x: -132.612571826 - y: 333.927896006 - z: -31.2778558498 - - speed: 3.68055558205 - acceleration_s: -0.248044298396 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.612571826 + y: 333.927896006 + z: -31.2778558498 + theta: -1.8340272878 + kappa: 0.00022964861801 + s: 31.902055575840002 + dkappa: 0 + } + v: 3.68055558205 + a: -0.248044298396 relative_time: 9.7699999809265137 - theta: -1.8340272878 - accumulated_s: 31.902055575840002 -} -adc_trajectory_point { - x: -132.622765624 - y: 333.892007101 - z: -31.2777975388 - - speed: 3.68055558205 - acceleration_s: -0.0666630968565 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.622765624 + y: 333.892007101 + z: -31.2777975388 + theta: -1.83403050578 + kappa: 0.00022964861801 + s: 31.938861131640003 + dkappa: 0 + } + v: 3.68055558205 + a: -0.0666630968565 relative_time: 9.77999997138977 - theta: -1.83403050578 - accumulated_s: 31.938861131640003 -} -adc_trajectory_point { - x: -132.632923405 - y: 333.856177461 - z: -31.2781809671 - - speed: 3.68055558205 - acceleration_s: -0.142098543328 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.632923405 + y: 333.856177461 + z: -31.2781809671 + theta: -1.83401242033 + kappa: 0.00022964861801 + s: 31.97566668754 + dkappa: 0 + } + v: 3.68055558205 + a: -0.142098543328 relative_time: 9.7899999618530273 - theta: -1.83401242033 - accumulated_s: 31.97566668754 -} -adc_trajectory_point { - x: -132.643105006 - y: 333.820311515 - z: -31.2781149456 - - speed: 3.68055558205 - acceleration_s: -0.142098543328 - curvature: 0.000267923397025 - curvature_change_rate: 0.00103991851671 +} +trajectory_point { + path_point { + x: -132.643105006 + y: 333.820311515 + z: -31.2781149456 + theta: -1.83404376709 + kappa: 0.000267923397025 + s: 32.01247224334 + dkappa: 0.00103991851671 + } + v: 3.68055558205 + a: -0.142098543328 relative_time: 9.7999999523162842 - theta: -1.83404376709 - accumulated_s: 32.01247224334 -} -adc_trajectory_point { - x: -132.653242664 - y: 333.784452432 - z: -31.2782685002 - - speed: 3.68055558205 - acceleration_s: -0.00840818446238 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.653242664 + y: 333.784452432 + z: -31.2782685002 + theta: -1.83400732259 + kappa: 0.000267923397025 + s: 32.04927779914 + dkappa: 0 + } + v: 3.68055558205 + a: -0.00840818446238 relative_time: 9.809999942779541 - theta: -1.83400732259 - accumulated_s: 32.04927779914 -} -adc_trajectory_point { - x: -132.66338165 - y: 333.748605675 - z: -31.2782534566 - - speed: 3.67777776718 - acceleration_s: -0.0634310379344 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.66338165 + y: 333.748605675 + z: -31.2782534566 + theta: -1.83405144873 + kappa: 0.000267923397025 + s: 32.08605557684 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0634310379344 relative_time: 9.8199999332427979 - theta: -1.83405144873 - accumulated_s: 32.08605557684 -} -adc_trajectory_point { - x: -132.67344709 - y: 333.712761016 - z: -31.2785384571 - - speed: 3.67777776718 - acceleration_s: -0.112519250137 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.67344709 + y: 333.712761016 + z: -31.2785384571 + theta: -1.83405031778 + kappa: 0.000267923397025 + s: 32.12283335444 + dkappa: 0 + } + v: 3.67777776718 + a: -0.112519250137 relative_time: 9.8300001621246338 - theta: -1.83405031778 - accumulated_s: 32.12283335444 -} -adc_trajectory_point { - x: -132.683508975 - y: 333.676922344 - z: -31.2785902759 - - speed: 3.67777776718 - acceleration_s: -0.110672510261 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.683508975 + y: 333.676922344 + z: -31.2785902759 + theta: -1.83408744353 + kappa: 0.000267923397025 + s: 32.15961113214 + dkappa: 0 + } + v: 3.67777776718 + a: -0.110672510261 relative_time: 9.84000015258789 - theta: -1.83408744353 - accumulated_s: 32.15961113214 -} -adc_trajectory_point { - x: -132.683508975 - y: 333.676922344 - z: -31.2785902759 - - speed: 3.67777776718 - acceleration_s: -0.110672510261 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.683508975 + y: 333.676922344 + z: -31.2785902759 + theta: -1.83408744353 + kappa: 0.000267923397025 + s: 32.19638890984 + dkappa: 0 + } + v: 3.67777776718 + a: -0.110672510261 relative_time: 9.84000015258789 - theta: -1.83408744353 - accumulated_s: 32.19638890984 -} -adc_trajectory_point { - x: -132.70359128 - y: 333.605290692 - z: -31.2786425408 - - speed: 3.67777776718 - acceleration_s: -0.0845600592295 - curvature: 0.000306198182417 - curvature_change_rate: 0.00104070413751 +} +trajectory_point { + path_point { + x: -132.70359128 + y: 333.605290692 + z: -31.2786425408 + theta: -1.83417351223 + kappa: 0.000306198182417 + s: 32.23316668754 + dkappa: 0.00104070413751 + } + v: 3.67777776718 + a: -0.0845600592295 relative_time: 9.8600001335144043 - theta: -1.83417351223 - accumulated_s: 32.23316668754 -} -adc_trajectory_point { - x: -132.713602221 - y: 333.569474338 - z: -31.2788601648 - - speed: 3.67777776718 - acceleration_s: -0.0420496219288 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.713602221 + y: 333.569474338 + z: -31.2788601648 + theta: -1.83421945913 + kappa: 0.000306198182417 + s: 32.26994446514 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0420496219288 relative_time: 9.8700001239776611 - theta: -1.83421945913 - accumulated_s: 32.26994446514 -} -adc_trajectory_point { - x: -132.723598214 - y: 333.533659103 - z: -31.2789625516 - - speed: 3.669444561 - acceleration_s: -0.0282229879329 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.723598214 + y: 333.533659103 + z: -31.2789625516 + theta: -1.83426703222 + kappa: 0.000306198182417 + s: 32.30663891074 + dkappa: 0 + } + v: 3.669444561 + a: -0.0282229879329 relative_time: 9.880000114440918 - theta: -1.83426703222 - accumulated_s: 32.30663891074 -} -adc_trajectory_point { - x: -132.733623096 - y: 333.497845819 - z: -31.2790034963 - - speed: 3.669444561 - acceleration_s: -0.0417450219111 - curvature: 0.000306198182417 - curvature_change_rate: 0 - relative_time: 9.8900001049041748 - theta: -1.83432680577 - accumulated_s: 32.34333335634 -} -adc_trajectory_point { - x: -132.733623096 - y: 333.497845819 - z: -31.2790034963 - - speed: 3.669444561 - acceleration_s: -0.0417450219111 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.733623096 + y: 333.497845819 + z: -31.2790034963 + theta: -1.83432680577 + kappa: 0.000306198182417 + s: 32.34333335634 + dkappa: 0 + } + v: 3.669444561 + a: -0.0417450219111 relative_time: 9.8900001049041748 - theta: -1.83432680577 - accumulated_s: 32.38002780204 } -estop { - is_estop: false +trajectory_point { + path_point { + x: -132.733623096 + y: 333.497845819 + z: -31.2790034963 + theta: -1.83432680577 + kappa: 0.000306198182417 + s: 32.38002780204 + dkappa: 0 + } + v: 3.669444561 + a: -0.0417450219111 + relative_time: 9.8900001049041748 } -gear: GEAR_DRIVE + diff --git a/modules/control/testdata/longitudinal_controller_test/1_planning.pb.txt b/modules/control/testdata/longitudinal_controller_test/1_planning.pb.txt index e4d152eda45..5e659486da7 100644 --- a/modules/control/testdata/longitudinal_controller_test/1_planning.pb.txt +++ b/modules/control/testdata/longitudinal_controller_test/1_planning.pb.txt @@ -5,13007 +5,14008 @@ header { } total_path_length: 32.38002780204 total_path_time: 9.9800000190734863 -adc_trajectory_point { - x: -124.367072419 - y: 364.831849142 - z: -31.332377322 - - speed: 1.62222218513 - acceleration_s: 0.786162598236 - curvature: -0.00252617800322 - curvature_change_rate: 0 +estop { + is_estop: false +} +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: -124.367072419 + y: 364.831849142 + z: -31.332377322 + theta: -1.81237826921 + kappa: -0.00252617800322 + s: 0 + dkappa: 0 + } + v: 1.62222218513 + a: 0.786162598236 relative_time: -0.089999914169311523 - theta: -1.81237826921 - accumulated_s: 0 -} -adc_trajectory_point { - x: -124.371192947 - y: 364.815408289 - z: -31.3321617292 - - speed: 1.63055551052 - acceleration_s: 0.823007905434 - curvature: -0.00248790128945 - curvature_change_rate: 0.00234746462335 +} +trajectory_point { + path_point { + x: -124.371192947 + y: 364.815408289 + z: -31.3321617292 + theta: -1.81246574077 + kappa: -0.00248790128945 + s: 0.016305555109999981 + dkappa: 0.00234746462335 + } + v: 1.63055551052 + a: 0.823007905434 relative_time: -0.079999923706054688 - theta: -1.81246574077 - accumulated_s: 0.016305555109999981 -} -adc_trajectory_point { - x: -124.375298464 - y: 364.798862219 - z: -31.3319112528 - - speed: 1.63055551052 - acceleration_s: 0.939039433387 - curvature: -0.00248790128945 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.375298464 + y: 364.798862219 + z: -31.3319112528 + theta: -1.81246756399 + kappa: -0.00248790128945 + s: 0.032611110209999961 + dkappa: 0 + } + v: 1.63055551052 + a: 0.939039433387 relative_time: -0.069999933242797852 - theta: -1.81246756399 - accumulated_s: 0.032611110209999961 -} -adc_trajectory_point { - x: -124.379445239 - y: 364.782260752 - z: -31.331748303 - - speed: 1.65555560589 - acceleration_s: 0.799533704679 - curvature: -0.00244962463489 - curvature_change_rate: 0.00231201262143 +} +trajectory_point { + path_point { + x: -124.379445239 + y: 364.782260752 + z: -31.331748303 + theta: -1.81249667017 + kappa: -0.00244962463489 + s: 0.0491666662700001 + dkappa: 0.00231201262143 + } + v: 1.65555560589 + a: 0.799533704679 relative_time: -0.059999942779541016 - theta: -1.81249667017 - accumulated_s: 0.0491666662700001 -} -adc_trajectory_point { - x: -124.379445239 - y: 364.782260752 - z: -31.331748303 - - speed: 1.65555560589 - acceleration_s: 0.799533704679 - curvature: -0.00244962463489 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.379445239 + y: 364.782260752 + z: -31.331748303 + theta: -1.81249667017 + kappa: -0.00244962463489 + s: 0.065722222330000024 + dkappa: 0 + } + v: 1.65555560589 + a: 0.799533704679 relative_time: -0.059999942779541016 - theta: -1.81249667017 - accumulated_s: 0.065722222330000024 -} -adc_trajectory_point { - x: -124.387812319 - y: 364.748792952 - z: -31.3314336967 - - speed: 1.67222225666 - acceleration_s: 0.709512194401 - curvature: -0.00241134803862 - curvature_change_rate: 0.00228896584236 +} +trajectory_point { + path_point { + x: -124.387812319 + y: 364.748792952 + z: -31.3314336967 + theta: -1.81252111016 + kappa: -0.00241134803862 + s: 0.082444444899999914 + dkappa: 0.00228896584236 + } + v: 1.67222225666 + a: 0.709512194401 relative_time: -0.039999961853027344 - theta: -1.81252111016 - accumulated_s: 0.082444444899999914 -} -adc_trajectory_point { - x: -124.39208822 - y: 364.73193295 - z: -31.3311777441 - - speed: 1.67222225666 - acceleration_s: 0.885164961093 - curvature: -0.00241134803862 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.39208822 + y: 364.73193295 + z: -31.3311777441 + theta: -1.81259538169 + kappa: -0.00241134803862 + s: 0.099166667460000024 + dkappa: 0 + } + v: 1.67222225666 + a: 0.885164961093 relative_time: -0.029999971389770508 - theta: -1.81259538169 - accumulated_s: 0.099166667460000024 -} -adc_trajectory_point { - x: -124.396360761 - y: 364.715008909 - z: -31.3310258063 - - speed: 1.6916667223 - acceleration_s: 0.840964839003 - curvature: -0.00241134803862 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.396360761 + y: 364.715008909 + z: -31.3310258063 + theta: -1.81260595807 + kappa: -0.00241134803862 + s: 0.1160833346900001 + dkappa: 0 + } + v: 1.6916667223 + a: 0.840964839003 relative_time: -0.019999980926513672 - theta: -1.81260595807 - accumulated_s: 0.1160833346900001 -} -adc_trajectory_point { - x: -124.400686806 - y: 364.698015497 - z: -31.3307877881 - - speed: 1.6916667223 - acceleration_s: 0.79314550852 - curvature: -0.00241134803862 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.400686806 + y: 364.698015497 + z: -31.3307877881 + theta: -1.81264478745 + kappa: -0.00241134803862 + s: 0.13300000190999994 + dkappa: 0 + } + v: 1.6916667223 + a: 0.79314550852 relative_time: -0.0099999904632568359 - theta: -1.81264478745 - accumulated_s: 0.13300000190999994 -} -adc_trajectory_point { - x: -124.404998184 - y: 364.68093016 - z: -31.330677554 - - speed: 1.70833337307 - acceleration_s: 0.79314550852 - curvature: -0.00237307149975 - curvature_change_rate: 0.00224057783324 +} +trajectory_point { + path_point { + x: -124.404998184 + y: 364.68093016 + z: -31.330677554 + theta: -1.81266143871 + kappa: -0.00237307149975 + s: 0.15008333563999998 + dkappa: 0.00224057783324 + } + v: 1.70833337307 + a: 0.79314550852 relative_time: 0 - theta: -1.81266143871 - accumulated_s: 0.15008333563999998 -} -adc_trajectory_point { - x: -124.404998184 - y: 364.68093016 - z: -31.330677554 - - speed: 1.70833337307 - acceleration_s: 0.848439761077 - curvature: -0.00237307149975 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.404998184 + y: 364.68093016 + z: -31.330677554 + theta: -1.81266143871 + kappa: -0.00237307149975 + s: 0.16716666937000002 + dkappa: 0 + } + v: 1.70833337307 + a: 0.848439761077 relative_time: 0 - theta: -1.81266143871 - accumulated_s: 0.16716666937000002 -} -adc_trajectory_point { - x: -124.413740829 - y: 364.646558161 - z: -31.330341435 - - speed: 1.7277777195 - acceleration_s: 0.839788102862 - curvature: -0.00233479501735 - curvature_change_rate: 0.00221535918454 +} +trajectory_point { + path_point { + x: -124.413740829 + y: 364.646558161 + z: -31.330341435 + theta: -1.81271721372 + kappa: -0.00233479501735 + s: 0.18444444656999992 + dkappa: 0.00221535918454 + } + v: 1.7277777195 + a: 0.839788102862 relative_time: 0.019999980926513672 - theta: -1.81271721372 - accumulated_s: 0.18444444656999992 -} -adc_trajectory_point { - x: -124.418160805 - y: 364.629263991 - z: -31.3301604046 - - speed: 1.7277777195 - acceleration_s: 0.796361476988 - curvature: -0.00233479501735 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.418160805 + y: 364.629263991 + z: -31.3301604046 + theta: -1.8127539742 + kappa: -0.00233479501735 + s: 0.20172222376000004 + dkappa: 0 + } + v: 1.7277777195 + a: 0.796361476988 relative_time: 0.029999971389770508 - theta: -1.8127539742 - accumulated_s: 0.20172222376000004 -} -adc_trajectory_point { - x: -124.422587432 - y: 364.611881599 - z: -31.329923776 - - speed: 1.74166667461 - acceleration_s: 0.796361476988 - curvature: -0.00229651859052 - curvature_change_rate: 0.00219768956878 +} +trajectory_point { + path_point { + x: -124.422587432 + y: 364.611881599 + z: -31.329923776 + theta: -1.81278276405 + kappa: -0.00229651859052 + s: 0.21913889051000002 + dkappa: 0.00219768956878 + } + v: 1.74166667461 + a: 0.796361476988 relative_time: 0.039999961853027344 - theta: -1.81278276405 - accumulated_s: 0.21913889051000002 -} -adc_trajectory_point { - x: -124.42702661 - y: 364.59441933 - z: -31.329741355 - - speed: 1.74166667461 - acceleration_s: 0.79238461037 - curvature: -0.00229651859052 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.42702661 + y: 364.59441933 + z: -31.329741355 + theta: -1.81281670152 + kappa: -0.00229651859052 + s: 0.23655555725 + dkappa: 0 + } + v: 1.74166667461 + a: 0.79238461037 relative_time: 0.04999995231628418 - theta: -1.81281670152 - accumulated_s: 0.23655555725 -} -adc_trajectory_point { - x: -124.431486786 - y: 364.576916664 - z: -31.3295119135 - - speed: 1.75833332539 - acceleration_s: 0.623637235555 - curvature: -0.00229651859052 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.431486786 + y: 364.576916664 + z: -31.3295119135 + theta: -1.8128477221 + kappa: -0.00229651859052 + s: 0.25413889050999994 + dkappa: 0 + } + v: 1.75833332539 + a: 0.623637235555 relative_time: 0.059999942779541016 - theta: -1.8128477221 - accumulated_s: 0.25413889050999994 -} -adc_trajectory_point { - x: -124.435979126 - y: 364.559317752 - z: -31.3293451639 - - speed: 1.75833332539 - acceleration_s: 0.78715534576 - curvature: -0.00229651859052 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.435979126 + y: 364.559317752 + z: -31.3293451639 + theta: -1.81292572329 + kappa: -0.00229651859052 + s: 0.2717222237600001 + dkappa: 0 + } + v: 1.75833332539 + a: 0.78715534576 relative_time: 0.069999933242797852 - theta: -1.81292572329 - accumulated_s: 0.2717222237600001 -} -adc_trajectory_point { - x: -124.440512829 - y: 364.541682956 - z: -31.3291209918 - - speed: 1.7722222805 - acceleration_s: 0.651805683286 - curvature: -0.00225824221834 - curvature_change_rate: 0.00215979522414 +} +trajectory_point { + path_point { + x: -124.440512829 + y: 364.541682956 + z: -31.3291209918 + theta: -1.81300561803 + kappa: -0.00225824221834 + s: 0.2894444465699999 + dkappa: 0.00215979522414 + } + v: 1.7722222805 + a: 0.651805683286 relative_time: 0.080000162124633789 - theta: -1.81300561803 - accumulated_s: 0.2894444465699999 -} -adc_trajectory_point { - x: -124.440512829 - y: 364.541682956 - z: -31.3291209918 - - speed: 1.7722222805 - acceleration_s: 0.651805683286 - curvature: -0.00225824221834 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.440512829 + y: 364.541682956 + z: -31.3291209918 + theta: -1.81300561803 + kappa: -0.00225824221834 + s: 0.30716666936999992 + dkappa: 0 + } + v: 1.7722222805 + a: 0.651805683286 relative_time: 0.080000162124633789 - theta: -1.81300561803 - accumulated_s: 0.30716666936999992 -} -adc_trajectory_point { - x: -124.449549206 - y: 364.506162589 - z: -31.3285673754 - - speed: 1.78888893127 - acceleration_s: 0.710935224764 - curvature: -0.00221996589991 - curvature_change_rate: 0.00213966992371 +} +trajectory_point { + path_point { + x: -124.449549206 + y: 364.506162589 + z: -31.3285673754 + theta: -1.81308814408 + kappa: -0.00221996589991 + s: 0.32505555867999991 + dkappa: 0.00213966992371 + } + v: 1.78888893127 + a: 0.710935224764 relative_time: 0.10000014305114746 - theta: -1.81308814408 - accumulated_s: 0.32505555867999991 -} -adc_trajectory_point { - x: -124.454089513 - y: 364.488330402 - z: -31.3283397462 - - speed: 1.78888893127 - acceleration_s: 0.570744609263 - curvature: -0.00221996589991 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.454089513 + y: 364.488330402 + z: -31.3283397462 + theta: -1.81312803791 + kappa: -0.00221996589991 + s: 0.3429444479999999 + dkappa: 0 + } + v: 1.78888893127 + a: 0.570744609263 relative_time: 0.1100001335144043 - theta: -1.81312803791 - accumulated_s: 0.3429444479999999 -} -adc_trajectory_point { - x: -124.458653948 - y: 364.470391315 - z: -31.3280404089 - - speed: 1.80277776718 - acceleration_s: 0.765021682693 - curvature: -0.00218168963431 - curvature_change_rate: 0.00212318269586 +} +trajectory_point { + path_point { + x: -124.458653948 + y: 364.470391315 + z: -31.3280404089 + theta: -1.81320046776 + kappa: -0.00218168963431 + s: 0.36097222567000009 + dkappa: 0.00212318269586 + } + v: 1.80277776718 + a: 0.765021682693 relative_time: 0.12000012397766113 - theta: -1.81320046776 - accumulated_s: 0.36097222567000009 -} -adc_trajectory_point { - x: -124.463241748 - y: 364.45241929 - z: -31.3277416844 - - speed: 1.80277776718 - acceleration_s: 0.654807529919 - curvature: -0.00218168963431 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.463241748 + y: 364.45241929 + z: -31.3277416844 + theta: -1.81324631449 + kappa: -0.00218168963431 + s: 0.37900000334000006 + dkappa: 0 + } + v: 1.80277776718 + a: 0.654807529919 relative_time: 0.13000011444091797 - theta: -1.81324631449 - accumulated_s: 0.37900000334000006 -} -adc_trajectory_point { - x: -124.46783809 - y: 364.434363713 - z: -31.3274464924 - - speed: 1.81944441795 - acceleration_s: 0.654807529919 - curvature: -0.00214341342064 - curvature_change_rate: 0.00210373085859 +} +trajectory_point { + path_point { + x: -124.46783809 + y: 364.434363713 + z: -31.3274464924 + theta: -1.81332741838 + kappa: -0.00214341342064 + s: 0.39719444752 + dkappa: 0.00210373085859 + } + v: 1.81944441795 + a: 0.654807529919 relative_time: 0.1400001049041748 - theta: -1.81332741838 - accumulated_s: 0.39719444752 -} -adc_trajectory_point { - x: -124.47245785 - y: 364.416250084 - z: -31.3270961335 - - speed: 1.81944441795 - acceleration_s: 0.674982832465 - curvature: -0.00214341342064 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.47245785 + y: 364.416250084 + z: -31.3270961335 + theta: -1.81337278819 + kappa: -0.00214341342064 + s: 0.41538889169999993 + dkappa: 0 + } + v: 1.81944441795 + a: 0.674982832465 relative_time: 0.15000009536743164 - theta: -1.81337278819 - accumulated_s: 0.41538889169999993 -} -adc_trajectory_point { - x: -124.477095653 - y: 364.398088042 - z: -31.326754651 - - speed: 1.83611106873 - acceleration_s: 0.552212210239 - curvature: -0.00210513725798 - curvature_change_rate: 0.00208463220531 +} +trajectory_point { + path_point { + x: -124.477095653 + y: 364.398088042 + z: -31.326754651 + theta: -1.813443323 + kappa: -0.00210513725798 + s: 0.43375000239000006 + dkappa: 0.00208463220531 + } + v: 1.83611106873 + a: 0.552212210239 relative_time: 0.16000008583068848 - theta: -1.813443323 - accumulated_s: 0.43375000239000006 -} -adc_trajectory_point { - x: -124.48176616 - y: 364.379838609 - z: -31.326410614 - - speed: 1.83611106873 - acceleration_s: 0.740273402835 - curvature: -0.00210513725798 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.48176616 + y: 364.379838609 + z: -31.326410614 + theta: -1.81353389521 + kappa: -0.00210513725798 + s: 0.45211111306999996 + dkappa: 0 + } + v: 1.83611106873 + a: 0.740273402835 relative_time: 0.17000007629394531 - theta: -1.81353389521 - accumulated_s: 0.45211111306999996 -} -adc_trajectory_point { - x: -124.486428356 - y: 364.361555494 - z: -31.3261427637 - - speed: 1.85000002384 - acceleration_s: 0.580707000797 - curvature: -0.00206686114541 - curvature_change_rate: 0.00206897903083 +} +trajectory_point { + path_point { + x: -124.486428356 + y: 364.361555494 + z: -31.3261427637 + theta: -1.81356533084 + kappa: -0.00206686114541 + s: 0.47061111330999994 + dkappa: 0.00206897903083 + } + v: 1.85000002384 + a: 0.580707000797 relative_time: 0.18000006675720215 - theta: -1.81356533084 - accumulated_s: 0.47061111330999994 -} -adc_trajectory_point { - x: -124.491086517 - y: 364.343166634 - z: -31.3257930893 - - speed: 1.85000002384 - acceleration_s: 0.725814506272 - curvature: -0.00206686114541 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.491086517 + y: 364.343166634 + z: -31.3257930893 + theta: -1.81360825438 + kappa: -0.00206686114541 + s: 0.48911111354999992 + dkappa: 0 + } + v: 1.85000002384 + a: 0.725814506272 relative_time: 0.19000005722045898 - theta: -1.81360825438 - accumulated_s: 0.48911111354999992 -} -adc_trajectory_point { - x: -124.491086517 - y: 364.343166634 - z: -31.3257930893 - - speed: 1.86388885975 - acceleration_s: 0.725814506272 - curvature: -0.00202858508204 - curvature_change_rate: 0.00205355931895 +} +trajectory_point { + path_point { + x: -124.491086517 + y: 364.343166634 + z: -31.3257930893 + theta: -1.81360825438 + kappa: -0.00202858508204 + s: 0.5077500021500001 + dkappa: 0.00205355931895 + } + v: 1.86388885975 + a: 0.725814506272 relative_time: 0.19000005722045898 - theta: -1.81360825438 - accumulated_s: 0.5077500021500001 -} -adc_trajectory_point { - x: -124.500568552 - y: 364.306281933 - z: -31.3251117049 - - speed: 1.86388885975 - acceleration_s: 0.578514170379 - curvature: -0.00202858508204 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.500568552 + y: 364.306281933 + z: -31.3251117049 + theta: -1.81377712139 + kappa: -0.00202858508204 + s: 0.52638889075000006 + dkappa: 0 + } + v: 1.86388885975 + a: 0.578514170379 relative_time: 0.21000003814697266 - theta: -1.81377712139 - accumulated_s: 0.52638889075000006 -} -adc_trajectory_point { - x: -124.505284561 - y: 364.287718639 - z: -31.3248510277 - - speed: 1.87777781487 - acceleration_s: 0.733719666282 - curvature: -0.00199030906694 - curvature_change_rate: 0.00203836762757 +} +trajectory_point { + path_point { + x: -124.505284561 + y: 364.287718639 + z: -31.3248510277 + theta: -1.81380727115 + kappa: -0.00199030906694 + s: 0.54516666889000009 + dkappa: 0.00203836762757 + } + v: 1.87777781487 + a: 0.733719666282 relative_time: 0.22000002861022949 - theta: -1.81380727115 - accumulated_s: 0.54516666889000009 -} -adc_trajectory_point { - x: -124.510040247 - y: 364.269117353 - z: -31.3245309526 - - speed: 1.87777781487 - acceleration_s: 0.545171679849 - curvature: -0.00199030906694 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.510040247 + y: 364.269117353 + z: -31.3245309526 + theta: -1.81383336004 + kappa: -0.00199030906694 + s: 0.56394444703999991 + dkappa: 0 + } + v: 1.87777781487 + a: 0.545171679849 relative_time: 0.23000001907348633 - theta: -1.81383336004 - accumulated_s: 0.56394444703999991 -} -adc_trajectory_point { - x: -124.514817529 - y: 364.250426387 - z: -31.3242240939 - - speed: 1.89166665077 - acceleration_s: 0.70451380624 - curvature: -0.00195203309921 - curvature_change_rate: 0.00202339919208 +} +trajectory_point { + path_point { + x: -124.514817529 + y: 364.250426387 + z: -31.3242240939 + theta: -1.8138975348 + kappa: -0.00195203309921 + s: 0.58286111354999992 + dkappa: 0.00202339919208 + } + v: 1.89166665077 + a: 0.70451380624 relative_time: 0.24000000953674316 - theta: -1.8138975348 - accumulated_s: 0.58286111354999992 -} -adc_trajectory_point { - x: -124.519599994 - y: 364.231695691 - z: -31.3239948656 - - speed: 1.89166665077 - acceleration_s: 0.70451380624 - curvature: -0.00195203309921 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.519599994 + y: 364.231695691 + z: -31.3239948656 + theta: -1.81392737 + kappa: -0.00195203309921 + s: 0.60177778005999993 + dkappa: 0 + } + v: 1.89166665077 + a: 0.70451380624 relative_time: 0.25 - theta: -1.81392737 - accumulated_s: 0.60177778005999993 -} -adc_trajectory_point { - x: -124.524397496 - y: 364.212904296 - z: -31.3237304427 - - speed: 1.90833330154 - acceleration_s: 0.579897214634 - curvature: -0.00191375717794 - curvature_change_rate: 0.00200572516558 +} +trajectory_point { + path_point { + x: -124.524397496 + y: 364.212904296 + z: -31.3237304427 + theta: -1.81397067294 + kappa: -0.00191375717794 + s: 0.62086111307000014 + dkappa: 0.00200572516558 + } + v: 1.90833330154 + a: 0.579897214634 relative_time: 0.25999999046325684 - theta: -1.81397067294 - accumulated_s: 0.62086111307000014 -} -adc_trajectory_point { - x: -124.529204006 - y: 364.194037175 - z: -31.3235090738 - - speed: 1.90833330154 - acceleration_s: 0.664043300769 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.529204006 + y: 364.194037175 + z: -31.3235090738 + theta: -1.81400750394 + kappa: -0.00191375717794 + s: 0.6399444460899999 + dkappa: 0 + } + v: 1.90833330154 + a: 0.664043300769 relative_time: 0.26999998092651367 - theta: -1.81400750394 - accumulated_s: 0.6399444460899999 -} -adc_trajectory_point { - x: -124.534002209 - y: 364.175124421 - z: -31.3233041149 - - speed: 1.92222225666 - acceleration_s: 0.543693233875 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.534002209 + y: 364.175124421 + z: -31.3233041149 + theta: -1.81400097688 + kappa: -0.00191375717794 + s: 0.65916666866000018 + dkappa: 0 + } + v: 1.92222225666 + a: 0.543693233875 relative_time: 0.27999997138977051 - theta: -1.81400097688 - accumulated_s: 0.65916666866000018 -} -adc_trajectory_point { - x: -124.538850304 - y: 364.156134098 - z: -31.3231071895 - - speed: 1.92222225666 - acceleration_s: 0.646040675764 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.538850304 + y: 364.156134098 + z: -31.3231071895 + theta: -1.81407158499 + kappa: -0.00191375717794 + s: 0.67838889122 + dkappa: 0 + } + v: 1.92222225666 + a: 0.646040675764 relative_time: 0.28999996185302734 - theta: -1.81407158499 - accumulated_s: 0.67838889122 -} -adc_trajectory_point { - x: -124.543679992 - y: 364.137093008 - z: -31.3229501601 - - speed: 1.93611109257 - acceleration_s: 0.646040675764 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.543679992 + y: 364.137093008 + z: -31.3229501601 + theta: -1.81407281585 + kappa: -0.00191375717794 + s: 0.69775000214999983 + dkappa: 0 + } + v: 1.93611109257 + a: 0.646040675764 relative_time: 0.29999995231628418 - theta: -1.81407281585 - accumulated_s: 0.69775000214999983 -} -adc_trajectory_point { - x: -124.548536345 - y: 364.117982962 - z: -31.3227286693 - - speed: 1.93611109257 - acceleration_s: 0.622100636076 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.548536345 + y: 364.117982962 + z: -31.3227286693 + theta: -1.81411772979 + kappa: -0.00191375717794 + s: 0.71711111307000008 + dkappa: 0 + } + v: 1.93611109257 + a: 0.622100636076 relative_time: 0.309999942779541 - theta: -1.81411772979 - accumulated_s: 0.71711111307000008 -} -adc_trajectory_point { - x: -124.553410471 - y: 364.098815731 - z: -31.3226654641 - - speed: 1.94722223282 - acceleration_s: 0.684868392467 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.553410471 + y: 364.098815731 + z: -31.3226654641 + theta: -1.81417388783 + kappa: -0.00191375717794 + s: 0.73658333540000021 + dkappa: 0 + } + v: 1.94722223282 + a: 0.684868392467 relative_time: 0.31999993324279785 - theta: -1.81417388783 - accumulated_s: 0.73658333540000021 -} -adc_trajectory_point { - x: -124.558283914 - y: 364.079585656 - z: -31.3224984268 - - speed: 1.94722223282 - acceleration_s: 0.573879708316 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.558283914 + y: 364.079585656 + z: -31.3224984268 + theta: -1.81419237818 + kappa: -0.00191375717794 + s: 0.75605555772999988 + dkappa: 0 + } + v: 1.94722223282 + a: 0.573879708316 relative_time: 0.33000016212463379 - theta: -1.81419237818 - accumulated_s: 0.75605555772999988 -} -adc_trajectory_point { - x: -124.558283914 - y: 364.079585656 - z: -31.3224984268 - - speed: 1.96388888359 - acceleration_s: 0.573879708316 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.558283914 + y: 364.079585656 + z: -31.3224984268 + theta: -1.81419237818 + kappa: -0.00191375717794 + s: 0.7756944465700002 + dkappa: 0 + } + v: 1.96388888359 + a: 0.573879708316 relative_time: 0.33000016212463379 - theta: -1.81419237818 - accumulated_s: 0.7756944465700002 -} -adc_trajectory_point { - x: -124.56804333 - y: 364.040941718 - z: -31.3223221367 - - speed: 1.96388888359 - acceleration_s: 0.603920311959 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.56804333 + y: 364.040941718 + z: -31.3223221367 + theta: -1.81423909981 + kappa: -0.00191375717794 + s: 0.79533333540000006 + dkappa: 0 + } + v: 1.96388888359 + a: 0.603920311959 relative_time: 0.35000014305114746 - theta: -1.81423909981 - accumulated_s: 0.79533333540000006 -} -adc_trajectory_point { - x: -124.572951875 - y: 364.021539676 - z: -31.3221889641 - - speed: 1.9777777195 - acceleration_s: 0.555519021968 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.572951875 + y: 364.021539676 + z: -31.3221889641 + theta: -1.81427907955 + kappa: -0.00191375717794 + s: 0.81511111259999991 + dkappa: 0 + } + v: 1.9777777195 + a: 0.555519021968 relative_time: 0.3600001335144043 - theta: -1.81427907955 - accumulated_s: 0.81511111259999991 -} -adc_trajectory_point { - x: -124.577850514 - y: 364.002080082 - z: -31.3222134952 - - speed: 1.9777777195 - acceleration_s: 0.61368027684 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.577850514 + y: 364.002080082 + z: -31.3222134952 + theta: -1.81433748319 + kappa: -0.00191375717794 + s: 0.8348888897900002 + dkappa: 0 + } + v: 1.9777777195 + a: 0.61368027684 relative_time: 0.37000012397766113 - theta: -1.81433748319 - accumulated_s: 0.8348888897900002 -} -adc_trajectory_point { - x: -124.582810583 - y: 363.982557264 - z: -31.3221274754 - - speed: 1.98888885975 - acceleration_s: 0.578355004978 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.582810583 + y: 363.982557264 + z: -31.3221274754 + theta: -1.81440993028 + kappa: -0.00191375717794 + s: 0.85477777838999991 + dkappa: 0 + } + v: 1.98888885975 + a: 0.578355004978 relative_time: 0.38000011444091797 - theta: -1.81440993028 - accumulated_s: 0.85477777838999991 -} -adc_trajectory_point { - x: -124.587728192 - y: 363.962979756 - z: -31.3221053937 - - speed: 1.98888885975 - acceleration_s: 0.537373855617 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.587728192 + y: 363.962979756 + z: -31.3221053937 + theta: -1.81445166373 + kappa: -0.00191375717794 + s: 0.87466666699000006 + dkappa: 0 + } + v: 1.98888885975 + a: 0.537373855617 relative_time: 0.3900001049041748 - theta: -1.81445166373 - accumulated_s: 0.87466666699000006 -} -adc_trajectory_point { - x: -124.587728192 - y: 363.962979756 - z: -31.3221053937 - - speed: 2.00277781487 - acceleration_s: 0.537373855617 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.587728192 + y: 363.962979756 + z: -31.3221053937 + theta: -1.81445166373 + kappa: -0.00191375717794 + s: 0.89469444513999985 + dkappa: 0 + } + v: 2.00277781487 + a: 0.537373855617 relative_time: 0.3900001049041748 - theta: -1.81445166373 - accumulated_s: 0.89469444513999985 -} -adc_trajectory_point { - x: -124.597654504 - y: 363.923691761 - z: -31.3219676949 - - speed: 2.00277781487 - acceleration_s: 0.405916936513 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.597654504 + y: 363.923691761 + z: -31.3219676949 + theta: -1.81460229183 + kappa: -0.00191375717794 + s: 0.91472222328000008 + dkappa: 0 + } + v: 2.00277781487 + a: 0.405916936513 relative_time: 0.41000008583068848 - theta: -1.81460229183 - accumulated_s: 0.91472222328000008 -} -adc_trajectory_point { - x: -124.602613236 - y: 363.903946441 - z: -31.32195119 - - speed: 2.01666665077 - acceleration_s: 0.616783362769 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.602613236 + y: 363.903946441 + z: -31.32195119 + theta: -1.81466837499 + kappa: -0.00191375717794 + s: 0.93488888978999984 + dkappa: 0 + } + v: 2.01666665077 + a: 0.616783362769 relative_time: 0.42000007629394531 - theta: -1.81466837499 - accumulated_s: 0.93488888978999984 -} -adc_trajectory_point { - x: -124.607570356 - y: 363.884150608 - z: -31.3219562313 - - speed: 2.01666665077 - acceleration_s: 0.588264258574 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.607570356 + y: 363.884150608 + z: -31.3219562313 + theta: -1.8146952687 + kappa: -0.00191375717794 + s: 0.9550555563 + dkappa: 0 + } + v: 2.01666665077 + a: 0.588264258574 relative_time: 0.43000006675720215 - theta: -1.8146952687 - accumulated_s: 0.9550555563 -} -adc_trajectory_point { - x: -124.612537258 - y: 363.864291562 - z: -31.3218616117 - - speed: 2.02777767181 - acceleration_s: 0.556305840073 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.612537258 + y: 363.864291562 + z: -31.3218616117 + theta: -1.81476626065 + kappa: -0.00191375717794 + s: 0.97533333302 + dkappa: 0 + } + v: 2.02777767181 + a: 0.556305840073 relative_time: 0.440000057220459 - theta: -1.81476626065 - accumulated_s: 0.97533333302 -} -adc_trajectory_point { - x: -124.612537258 - y: 363.864291562 - z: -31.3218616117 - - speed: 2.02777767181 - acceleration_s: 0.556305840073 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.612537258 + y: 363.864291562 + z: -31.3218616117 + theta: -1.81476626065 + kappa: -0.00191375717794 + s: 0.99561110974 + dkappa: 0 + } + v: 2.02777767181 + a: 0.556305840073 relative_time: 0.440000057220459 - theta: -1.81476626065 - accumulated_s: 0.99561110974 -} -adc_trajectory_point { - x: -124.622499358 - y: 363.824418458 - z: -31.3218937051 - - speed: 2.04166674614 - acceleration_s: 0.48222098721 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.622499358 + y: 363.824418458 + z: -31.3218937051 + theta: -1.81489784186 + kappa: -0.00191375717794 + s: 1.0160277772000001 + dkappa: 0 + } + v: 2.04166674614 + a: 0.48222098721 relative_time: 0.46000003814697266 - theta: -1.81489784186 - accumulated_s: 1.0160277772000001 -} -adc_trajectory_point { - x: -124.627475438 - y: 363.804392094 - z: -31.3218720127 - - speed: 2.04166674614 - acceleration_s: 0.532368831835 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.627475438 + y: 363.804392094 + z: -31.3218720127 + theta: -1.81495720235 + kappa: -0.00191375717794 + s: 1.0364444446599999 + dkappa: 0 + } + v: 2.04166674614 + a: 0.532368831835 relative_time: 0.47000002861022949 - theta: -1.81495720235 - accumulated_s: 1.0364444446599999 -} -adc_trajectory_point { - x: -124.632512007 - y: 363.784329814 - z: -31.3218311286 - - speed: 2.05277776718 - acceleration_s: 0.541348464225 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.632512007 + y: 363.784329814 + z: -31.3218311286 + theta: -1.81505135668 + kappa: -0.00191375717794 + s: 1.0569722223300002 + dkappa: 0 + } + v: 2.05277776718 + a: 0.541348464225 relative_time: 0.48000001907348633 - theta: -1.81505135668 - accumulated_s: 1.0569722223300002 -} -adc_trajectory_point { - x: -124.63750936 - y: 363.76423134 - z: -31.3217679281 - - speed: 2.05277776718 - acceleration_s: 0.384251194079 - curvature: -0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.63750936 + y: 363.76423134 + z: -31.3217679281 + theta: -1.8151075005 + kappa: -0.00191375717794 + s: 1.0775000000000001 + dkappa: 0 + } + v: 2.05277776718 + a: 0.384251194079 relative_time: 0.49000000953674316 - theta: -1.8151075005 - accumulated_s: 1.0775000000000001 -} -adc_trajectory_point { - x: -124.64249871 - y: 363.744073275 - z: -31.3217562251 - - speed: 2.06666660309 - acceleration_s: 0.384251194079 - curvature: -0.00187548130221 - curvature_change_rate: 0.00185205855989 +} +trajectory_point { + path_point { + x: -124.64249871 + y: 363.744073275 + z: -31.3217562251 + theta: -1.8151331721 + kappa: -0.00187548130221 + s: 1.09816666603 + dkappa: 0.00185205855989 + } + v: 2.06666660309 + a: 0.384251194079 relative_time: 0.5 - theta: -1.8151331721 - accumulated_s: 1.09816666603 -} -adc_trajectory_point { - x: -124.64249871 - y: 363.744073275 - z: -31.3217562251 - - speed: 2.06666660309 - acceleration_s: 0.471254936837 - curvature: -0.00187548130221 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.64249871 + y: 363.744073275 + z: -31.3217562251 + theta: -1.8151331721 + kappa: -0.00187548130221 + s: 1.11883333206 + dkappa: 0 + } + v: 2.06666660309 + a: 0.471254936837 relative_time: 0.5 - theta: -1.8151331721 - accumulated_s: 1.11883333206 -} -adc_trajectory_point { - x: -124.65260313 - y: 363.703665697 - z: -31.3216385534 - - speed: 2.07500004768 - acceleration_s: 0.392185464525 - curvature: -0.00187548130221 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.65260313 + y: 363.703665697 + z: -31.3216385534 + theta: -1.81530989827 + kappa: -0.00187548130221 + s: 1.13958333254 + dkappa: 0 + } + v: 2.07500004768 + a: 0.392185464525 relative_time: 0.51999998092651367 - theta: -1.81530989827 - accumulated_s: 1.13958333254 -} -adc_trajectory_point { - x: -124.657703511 - y: 363.683362708 - z: -31.3215296138 - - speed: 2.07500004768 - acceleration_s: 0.63036516098 - curvature: -0.00187548130221 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.657703511 + y: 363.683362708 + z: -31.3215296138 + theta: -1.81538619428 + kappa: -0.00187548130221 + s: 1.16033333302 + dkappa: 0 + } + v: 2.07500004768 + a: 0.63036516098 relative_time: 0.52999997138977051 - theta: -1.81538619428 - accumulated_s: 1.16033333302 -} -adc_trajectory_point { - x: -124.662779303 - y: 363.663037709 - z: -31.3214895967 - - speed: 2.08333325386 - acceleration_s: 0.438201118283 - curvature: -0.00179892968375 - curvature_change_rate: 0.00367447782632 +} +trajectory_point { + path_point { + x: -124.662779303 + y: 363.663037709 + z: -31.3214895967 + theta: -1.81543663872 + kappa: -0.00179892968375 + s: 1.1811666655600002 + dkappa: 0.00367447782632 + } + v: 2.08333325386 + a: 0.438201118283 relative_time: 0.53999996185302734 - theta: -1.81543663872 - accumulated_s: 1.1811666655600002 -} -adc_trajectory_point { - x: -124.667900187 - y: 363.642640381 - z: -31.3213308156 - - speed: 2.08333325386 - acceleration_s: 0.565809026914 - curvature: -0.00179892968375 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.667900187 + y: 363.642640381 + z: -31.3213308156 + theta: -1.81550191038 + kappa: -0.00179892968375 + s: 1.2019999980999998 + dkappa: 0 + } + v: 2.08333325386 + a: 0.565809026914 relative_time: 0.54999995231628418 - theta: -1.81550191038 - accumulated_s: 1.2019999980999998 -} -adc_trajectory_point { - x: -124.673044801 - y: 363.622231883 - z: -31.3212905452 - - speed: 2.09722232819 - acceleration_s: 0.565809026914 - curvature: -0.0017606539392 - curvature_change_rate: 0.0018250685224 +} +trajectory_point { + path_point { + x: -124.673044801 + y: 363.622231883 + z: -31.3212905452 + theta: -1.81555087063 + kappa: -0.0017606539392 + s: 1.22297222138 + dkappa: 0.0018250685224 + } + v: 2.09722232819 + a: 0.565809026914 relative_time: 0.559999942779541 - theta: -1.81555087063 - accumulated_s: 1.22297222138 -} -adc_trajectory_point { - x: -124.678227606 - y: 363.60177704 - z: -31.321100113 - - speed: 2.09722232819 - acceleration_s: 0.410090532827 - curvature: -0.0017606539392 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.678227606 + y: 363.60177704 + z: -31.321100113 + theta: -1.81562391057 + kappa: -0.0017606539392 + s: 1.2439444446599999 + dkappa: 0 + } + v: 2.09722232819 + a: 0.410090532827 relative_time: 0.56999993324279785 - theta: -1.81562391057 - accumulated_s: 1.2439444446599999 -} -adc_trajectory_point { - x: -124.683408173 - y: 363.581283104 - z: -31.321023169 - - speed: 2.10833334923 - acceleration_s: 0.449863896268 - curvature: -0.00168410257488 - curvature_change_rate: 0.00363089472296 +} +trajectory_point { + path_point { + x: -124.683408173 + y: 363.581283104 + z: -31.321023169 + theta: -1.81565742152 + kappa: -0.00168410257488 + s: 1.26502777815 + dkappa: 0.00363089472296 + } + v: 2.10833334923 + a: 0.449863896268 relative_time: 0.58000016212463379 - theta: -1.81565742152 - accumulated_s: 1.26502777815 -} -adc_trajectory_point { - x: -124.688631183 - y: 363.560746635 - z: -31.3208483625 - - speed: 2.10833334923 - acceleration_s: 0.44139750351 - curvature: -0.00168410257488 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.688631183 + y: 363.560746635 + z: -31.3208483625 + theta: -1.81570010868 + kappa: -0.00168410257488 + s: 1.28611111164 + dkappa: 0 + } + v: 2.10833334923 + a: 0.44139750351 relative_time: 0.59000015258789062 - theta: -1.81570010868 - accumulated_s: 1.28611111164 -} -adc_trajectory_point { - x: -124.693826843 - y: 363.540166385 - z: -31.3206919003 - - speed: 2.1166665554 - acceleration_s: 0.44139750351 - curvature: -0.00160755137088 - curvature_change_rate: 0.00361659250512 +} +trajectory_point { + path_point { + x: -124.693826843 + y: 363.540166385 + z: -31.3206919003 + theta: -1.81572846193 + kappa: -0.00160755137088 + s: 1.3072777772 + dkappa: 0.00361659250512 + } + v: 2.1166665554 + a: 0.44139750351 relative_time: 0.60000014305114746 - theta: -1.81572846193 - accumulated_s: 1.3072777772 -} -adc_trajectory_point { - x: -124.699096691 - y: 363.519545692 - z: -31.3205524767 - - speed: 2.1166665554 - acceleration_s: 0.507769781112 - curvature: -0.00160755137088 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.699096691 + y: 363.519545692 + z: -31.3205524767 + theta: -1.81579399972 + kappa: -0.00160755137088 + s: 1.32844444275 + dkappa: 0 + } + v: 2.1166665554 + a: 0.507769781112 relative_time: 0.6100001335144043 - theta: -1.81579399972 - accumulated_s: 1.32844444275 -} -adc_trajectory_point { - x: -124.704331371 - y: 363.498896276 - z: -31.3203653041 - - speed: 2.125 - acceleration_s: 0.33837386187 - curvature: -0.00149272484953 - curvature_change_rate: 0.00540360100454 +} +trajectory_point { + path_point { + x: -124.704331371 + y: 363.498896276 + z: -31.3203653041 + theta: -1.815802083 + kappa: -0.00149272484953 + s: 1.3496944427500002 + dkappa: 0.00540360100454 + } + v: 2.125 + a: 0.33837386187 relative_time: 0.62000012397766113 - theta: -1.815802083 - accumulated_s: 1.3496944427500002 -} -adc_trajectory_point { - x: -124.709628969 - y: 363.478187565 - z: -31.3201688137 - - speed: 2.125 - acceleration_s: 0.501408729412 - curvature: -0.00149272484953 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.709628969 + y: 363.478187565 + z: -31.3201688137 + theta: -1.81587572212 + kappa: -0.00149272484953 + s: 1.37094444275 + dkappa: 0 + } + v: 2.125 + a: 0.501408729412 relative_time: 0.630000114440918 - theta: -1.81587572212 - accumulated_s: 1.37094444275 -} -adc_trajectory_point { - x: -124.714943161 - y: 363.457429119 - z: -31.3199786805 - - speed: 2.1333334446 - acceleration_s: 0.554039056654 - curvature: -0.00137789864791 - curvature_change_rate: 0.00538247792035 +} +trajectory_point { + path_point { + x: -124.714943161 + y: 363.457429119 + z: -31.3199786805 + theta: -1.81592346159 + kappa: -0.00137789864791 + s: 1.3922777772 + dkappa: 0.00538247792035 + } + v: 2.1333334446 + a: 0.554039056654 relative_time: 0.6400001049041748 - theta: -1.81592346159 - accumulated_s: 1.3922777772 -} -adc_trajectory_point { - x: -124.720250813 - y: 363.436649017 - z: -31.3197827172 - - speed: 2.1333334446 - acceleration_s: 0.395016178716 - curvature: -0.00137789864791 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.720250813 + y: 363.436649017 + z: -31.3197827172 + theta: -1.81597240124 + kappa: -0.00137789864791 + s: 1.4136111116399999 + dkappa: 0 + } + v: 2.1333334446 + a: 0.395016178716 relative_time: 0.65000009536743164 - theta: -1.81597240124 - accumulated_s: 1.4136111116399999 -} -adc_trajectory_point { - x: -124.725576877 - y: 363.41580601 - z: -31.3195367893 - - speed: 2.14444446564 - acceleration_s: 0.395016178716 - curvature: -0.00130134790508 - curvature_change_rate: 0.00356972372356 +} +trajectory_point { + path_point { + x: -124.725576877 + y: 363.41580601 + z: -31.3195367893 + theta: -1.81600363529 + kappa: -0.00130134790508 + s: 1.4350555563 + dkappa: 0.00356972372356 + } + v: 2.14444446564 + a: 0.395016178716 relative_time: 0.66000008583068848 - theta: -1.81600363529 - accumulated_s: 1.4350555563 -} -adc_trajectory_point { - x: -124.73087675 - y: 363.39494827 - z: -31.3193469858 - - speed: 2.14444446564 - acceleration_s: 0.318885692776 - curvature: -0.00130134790508 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.73087675 + y: 363.39494827 + z: -31.3193469858 + theta: -1.81600079944 + kappa: -0.00130134790508 + s: 1.4565000009600002 + dkappa: 0 + } + v: 2.14444446564 + a: 0.318885692776 relative_time: 0.67000007629394531 - theta: -1.81600079944 - accumulated_s: 1.4565000009600002 -} -adc_trajectory_point { - x: -124.736216839 - y: 363.374057061 - z: -31.3190368135 - - speed: 2.15277767181 - acceleration_s: 0.333498077567 - curvature: -0.00122479739336 - curvature_change_rate: 0.0035558949131 +} +trajectory_point { + path_point { + x: -124.736216839 + y: 363.374057061 + z: -31.3190368135 + theta: -1.81606191847 + kappa: -0.00122479739336 + s: 1.47802777767 + dkappa: 0.0035558949131 + } + v: 2.15277767181 + a: 0.333498077567 relative_time: 0.68000006675720215 - theta: -1.81606191847 - accumulated_s: 1.47802777767 -} -adc_trajectory_point { - x: -124.741576664 - y: 363.353124751 - z: -31.31877816 - - speed: 2.15277767181 - acceleration_s: 0.425183516383 - curvature: -0.00122479739336 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.741576664 + y: 363.353124751 + z: -31.31877816 + theta: -1.81611229004 + kappa: -0.00122479739336 + s: 1.49955555439 + dkappa: 0 + } + v: 2.15277767181 + a: 0.425183516383 relative_time: 0.690000057220459 - theta: -1.81611229004 - accumulated_s: 1.49955555439 -} -adc_trajectory_point { - x: -124.741576664 - y: 363.353124751 - z: -31.31877816 - - speed: 2.16111111641 - acceleration_s: 0.425183516383 - curvature: -0.00118652218167 - curvature_change_rate: 0.00177108948228 +} +trajectory_point { + path_point { + x: -124.741576664 + y: 363.353124751 + z: -31.31877816 + theta: -1.81611229004 + kappa: -0.00118652218167 + s: 1.52116666556 + dkappa: 0.00177108948228 + } + v: 2.16111111641 + a: 0.425183516383 relative_time: 0.690000057220459 - theta: -1.81611229004 - accumulated_s: 1.52116666556 -} -adc_trajectory_point { - x: -124.752221031 - y: 363.311269328 - z: -31.3181767426 - - speed: 2.16111111641 - acceleration_s: 0.424061091593 - curvature: -0.00118652218167 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.752221031 + y: 363.311269328 + z: -31.3181767426 + theta: -1.81618315245 + kappa: -0.00118652218167 + s: 1.54277777672 + dkappa: 0 + } + v: 2.16111111641 + a: 0.424061091593 relative_time: 0.71000003814697266 - theta: -1.81618315245 - accumulated_s: 1.54277777672 -} -adc_trajectory_point { - x: -124.757590008 - y: 363.290219413 - z: -31.3178582489 - - speed: 2.16666674614 - acceleration_s: 0.403375544049 - curvature: -0.00114824699823 - curvature_change_rate: 0.00176654686347 +} +trajectory_point { + path_point { + x: -124.757590008 + y: 363.290219413 + z: -31.3178582489 + theta: -1.81622559154 + kappa: -0.00114824699823 + s: 1.5644444441799998 + dkappa: 0.00176654686347 + } + v: 2.16666674614 + a: 0.403375544049 relative_time: 0.72000002861022949 - theta: -1.81622559154 - accumulated_s: 1.5644444441799998 -} -adc_trajectory_point { - x: -124.762941442 - y: 363.269138582 - z: -31.3174934853 - - speed: 2.16666674614 - acceleration_s: 0.326489423611 - curvature: -0.00114824699823 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.762941442 + y: 363.269138582 + z: -31.3174934853 + theta: -1.81625356007 + kappa: -0.00114824699823 + s: 1.5861111116400002 + dkappa: 0 + } + v: 2.16666674614 + a: 0.326489423611 relative_time: 0.73000001907348633 - theta: -1.81625356007 - accumulated_s: 1.5861111116400002 -} -adc_trajectory_point { - x: -124.768338499 - y: 363.247992939 - z: -31.3171917684 - - speed: 2.17499995232 - acceleration_s: 0.519132437172 - curvature: -0.00110997184211 - curvature_change_rate: 0.00175977733142 +} +trajectory_point { + path_point { + x: -124.768338499 + y: 363.247992939 + z: -31.3171917684 + theta: -1.8162998717 + kappa: -0.00110997184211 + s: 1.60786111117 + dkappa: 0.00175977733142 + } + v: 2.17499995232 + a: 0.519132437172 relative_time: 0.74000000953674316 - theta: -1.8162998717 - accumulated_s: 1.60786111117 -} -adc_trajectory_point { - x: -124.768338499 - y: 363.247992939 - z: -31.3171917684 - - speed: 2.17499995232 - acceleration_s: 0.519132437172 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.768338499 + y: 363.247992939 + z: -31.3171917684 + theta: -1.8162998717 + kappa: -0.00110997184211 + s: 1.62961111069 + dkappa: 0 + } + v: 2.17499995232 + a: 0.519132437172 relative_time: 0.74000000953674316 - theta: -1.8162998717 - accumulated_s: 1.62961111069 -} -adc_trajectory_point { - x: -124.779094251 - y: 363.205595132 - z: -31.3165621795 - - speed: 2.18333339691 - acceleration_s: 0.397473427894 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.779094251 + y: 363.205595132 + z: -31.3165621795 + theta: -1.81634104056 + kappa: -0.00110997184211 + s: 1.65144444466 + dkappa: 0 + } + v: 2.18333339691 + a: 0.397473427894 relative_time: 0.75999999046325684 - theta: -1.81634104056 - accumulated_s: 1.65144444466 -} -adc_trajectory_point { - x: -124.784453844 - y: 363.184287854 - z: -31.316247059 - - speed: 2.18333339691 - acceleration_s: 0.454685810527 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.784453844 + y: 363.184287854 + z: -31.316247059 + theta: -1.8162850446 + kappa: -0.00110997184211 + s: 1.6732777786300002 + dkappa: 0 + } + v: 2.18333339691 + a: 0.454685810527 relative_time: 0.76999998092651367 - theta: -1.8162850446 - accumulated_s: 1.6732777786300002 -} -adc_trajectory_point { - x: -124.789850241 - y: 363.16298002 - z: -31.3158767791 - - speed: 2.18333339691 - acceleration_s: 0.29593802736 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.789850241 + y: 363.16298002 + z: -31.3158767791 + theta: -1.81630023217 + kappa: -0.00110997184211 + s: 1.6951111125999998 + dkappa: 0 + } + v: 2.18333339691 + a: 0.29593802736 relative_time: 0.77999997138977051 - theta: -1.81630023217 - accumulated_s: 1.6951111125999998 -} -adc_trajectory_point { - x: -124.795270183 - y: 363.141635367 - z: -31.3155408166 - - speed: 2.19166660309 - acceleration_s: 0.366713112667 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.795270183 + y: 363.141635367 + z: -31.3155408166 + theta: -1.8163197048 + kappa: -0.00110997184211 + s: 1.71702777863 + dkappa: 0 + } + v: 2.19166660309 + a: 0.366713112667 relative_time: 0.78999996185302734 - theta: -1.8163197048 - accumulated_s: 1.71702777863 -} -adc_trajectory_point { - x: -124.800712164 - y: 363.120264703 - z: -31.3152514435 - - speed: 2.20000004768 - acceleration_s: 0.322351732867 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.800712164 + y: 363.120264703 + z: -31.3152514435 + theta: -1.81633196238 + kappa: -0.00110997184211 + s: 1.7390277791100002 + dkappa: 0 + } + v: 2.20000004768 + a: 0.322351732867 relative_time: 0.79999995231628418 - theta: -1.81633196238 - accumulated_s: 1.7390277791100002 -} -adc_trajectory_point { - x: -124.806146552 - y: 363.098872199 - z: -31.3149091844 - - speed: 2.20000004768 - acceleration_s: 0.245755836194 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.806146552 + y: 363.098872199 + z: -31.3149091844 + theta: -1.81635659266 + kappa: -0.00110997184211 + s: 1.76102777958 + dkappa: 0 + } + v: 2.20000004768 + a: 0.245755836194 relative_time: 0.809999942779541 - theta: -1.81635659266 - accumulated_s: 1.76102777958 -} -adc_trajectory_point { - x: -124.811598191 - y: 363.077421343 - z: -31.3145428207 - - speed: 2.205555439 - acceleration_s: 0.408752886651 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.811598191 + y: 363.077421343 + z: -31.3145428207 + theta: -1.81634827804 + kappa: -0.00110997184211 + s: 1.78308333397 + dkappa: 0 + } + v: 2.205555439 + a: 0.408752886651 relative_time: 0.81999993324279785 - theta: -1.81634827804 - accumulated_s: 1.78308333397 -} -adc_trajectory_point { - x: -124.81708544 - y: 363.055964991 - z: -31.3142130179 - - speed: 2.205555439 - acceleration_s: 0.312351941169 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.81708544 + y: 363.055964991 + z: -31.3142130179 + theta: -1.81639688851 + kappa: -0.00110997184211 + s: 1.8051388883600001 + dkappa: 0 + } + v: 2.205555439 + a: 0.312351941169 relative_time: 0.83000016212463379 - theta: -1.81639688851 - accumulated_s: 1.8051388883600001 -} -adc_trajectory_point { - x: -124.81708544 - y: 363.055964991 - z: -31.3142130179 - - speed: 2.21388888359 - acceleration_s: 0.312351941169 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.81708544 + y: 363.055964991 + z: -31.3142130179 + theta: -1.81639688851 + kappa: -0.00110997184211 + s: 1.8272777772 + dkappa: 0 + } + v: 2.21388888359 + a: 0.312351941169 relative_time: 0.83000016212463379 - theta: -1.81639688851 - accumulated_s: 1.8272777772 -} -adc_trajectory_point { - x: -124.822590897 - y: 363.034458283 - z: -31.3138107536 - - speed: 2.21388888359 - acceleration_s: 0.435838020412 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.822590897 + y: 363.034458283 + z: -31.3138107536 + theta: -1.81646420911 + kappa: -0.00110997184211 + s: 1.8494166660300002 + dkappa: 0 + } + v: 2.21388888359 + a: 0.435838020412 relative_time: 0.84000015258789062 - theta: -1.81646420911 - accumulated_s: 1.8494166660300002 -} -adc_trajectory_point { - x: -124.833592056 - y: 362.99131051 - z: -31.3131701481 - - speed: 2.22499990463 - acceleration_s: 0.332456477929 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.833592056 + y: 362.99131051 + z: -31.3131701481 + theta: -1.81650298808 + kappa: -0.00110997184211 + s: 1.8716666650799998 + dkappa: 0 + } + v: 2.22499990463 + a: 0.332456477929 relative_time: 0.8600001335144043 - theta: -1.81650298808 - accumulated_s: 1.8716666650799998 -} -adc_trajectory_point { - x: -124.83909123 - y: 362.969675964 - z: -31.3128626989 - - speed: 2.22499990463 - acceleration_s: 0.403803181453 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.83909123 + y: 362.969675964 + z: -31.3128626989 + theta: -1.81650780592 + kappa: -0.00110997184211 + s: 1.8939166641299998 + dkappa: 0 + } + v: 2.22499990463 + a: 0.403803181453 relative_time: 0.87000012397766113 - theta: -1.81650780592 - accumulated_s: 1.8939166641299998 -} -adc_trajectory_point { - x: -124.844627275 - y: 362.948035607 - z: -31.312549402 - - speed: 2.23333334923 - acceleration_s: 0.284167077771 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.844627275 + y: 362.948035607 + z: -31.312549402 + theta: -1.81654895806 + kappa: -0.00110997184211 + s: 1.91624999762 + dkappa: 0 + } + v: 2.23333334923 + a: 0.284167077771 relative_time: 0.880000114440918 - theta: -1.81654895806 - accumulated_s: 1.91624999762 -} -adc_trajectory_point { - x: -124.850138769 - y: 362.926365171 - z: -31.3121814989 - - speed: 2.23333334923 - acceleration_s: 0.219597182708 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.850138769 + y: 362.926365171 + z: -31.3121814989 + theta: -1.81656080112 + kappa: -0.00110997184211 + s: 1.9385833311099998 + dkappa: 0 + } + v: 2.23333334923 + a: 0.219597182708 relative_time: 0.8900001049041748 - theta: -1.81656080112 - accumulated_s: 1.9385833311099998 -} -adc_trajectory_point { - x: -124.855733527 - y: 362.904661558 - z: -31.3118566293 - - speed: 2.2416665554 - acceleration_s: 0.358176007095 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.855733527 + y: 362.904661558 + z: -31.3118566293 + theta: -1.81666201751 + kappa: -0.00110997184211 + s: 1.96099999666 + dkappa: 0 + } + v: 2.2416665554 + a: 0.358176007095 relative_time: 0.90000009536743164 - theta: -1.81666201751 - accumulated_s: 1.96099999666 -} -adc_trajectory_point { - x: -124.861246653 - y: 362.882922273 - z: -31.311575816 - - speed: 2.2416665554 - acceleration_s: 0.272688389046 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.861246653 + y: 362.882922273 + z: -31.311575816 + theta: -1.81665735581 + kappa: -0.00110997184211 + s: 1.9834166622199998 + dkappa: 0 + } + v: 2.2416665554 + a: 0.272688389046 relative_time: 0.91000008583068848 - theta: -1.81665735581 - accumulated_s: 1.9834166622199998 -} -adc_trajectory_point { - x: -124.866788905 - y: 362.861141033 - z: -31.3113530278 - - speed: 2.24722218513 - acceleration_s: 0.38116814692 - curvature: -0.0010716967124 - curvature_change_rate: 0.00170321964409 +} +trajectory_point { + path_point { + x: -124.866788905 + y: 362.861141033 + z: -31.3113530278 + theta: -1.81668984453 + kappa: -0.0010716967124 + s: 2.00588888407 + dkappa: 0.00170321964409 + } + v: 2.24722218513 + a: 0.38116814692 relative_time: 0.92000007629394531 - theta: -1.81668984453 - accumulated_s: 2.00588888407 -} -adc_trajectory_point { - x: -124.872339689 - y: 362.839321604 - z: -31.3110525412 - - speed: 2.24722218513 - acceleration_s: 0.395045581062 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.872339689 + y: 362.839321604 + z: -31.3110525412 + theta: -1.81670429751 + kappa: -0.0010716967124 + s: 2.02836110592 + dkappa: 0 + } + v: 2.24722218513 + a: 0.395045581062 relative_time: 0.93000006675720215 - theta: -1.81670429751 - accumulated_s: 2.02836110592 -} -adc_trajectory_point { - x: -124.877914017 - y: 362.817487959 - z: -31.3107835148 - - speed: 2.25277781487 - acceleration_s: 0.30269333311 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.877914017 + y: 362.817487959 + z: -31.3107835148 + theta: -1.81677195389 + kappa: -0.0010716967124 + s: 2.05088888407 + dkappa: 0 + } + v: 2.25277781487 + a: 0.30269333311 relative_time: 0.940000057220459 - theta: -1.81677195389 - accumulated_s: 2.05088888407 -} -adc_trajectory_point { - x: -124.877914017 - y: 362.817487959 - z: -31.3107835148 - - speed: 2.25277781487 - acceleration_s: 0.30269333311 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.877914017 + y: 362.817487959 + z: -31.3107835148 + theta: -1.81677195389 + kappa: -0.0010716967124 + s: 2.07341666222 + dkappa: 0 + } + v: 2.25277781487 + a: 0.30269333311 relative_time: 0.940000057220459 - theta: -1.81677195389 - accumulated_s: 2.07341666222 -} -adc_trajectory_point { - x: -124.88912335 - y: 362.773678888 - z: -31.3103790181 - - speed: 2.26111102104 - acceleration_s: 0.360417891351 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.88912335 + y: 362.773678888 + z: -31.3103790181 + theta: -1.81688383407 + kappa: -0.0010716967124 + s: 2.09602777243 + dkappa: 0 + } + v: 2.26111102104 + a: 0.360417891351 relative_time: 0.96000003814697266 - theta: -1.81688383407 - accumulated_s: 2.09602777243 -} -adc_trajectory_point { - x: -124.894731201 - y: 362.751723765 - z: -31.3102013376 - - speed: 2.26111102104 - acceleration_s: 0.379883345667 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.894731201 + y: 362.751723765 + z: -31.3102013376 + theta: -1.81692629508 + kappa: -0.0010716967124 + s: 2.11863888264 + dkappa: 0 + } + v: 2.26111102104 + a: 0.379883345667 relative_time: 0.97000002861022949 - theta: -1.81692629508 - accumulated_s: 2.11863888264 -} -adc_trajectory_point { - x: -124.900382966 - y: 362.72974915 - z: -31.3100582911 - - speed: 2.26944446564 - acceleration_s: 0.3383902173 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.900382966 + y: 362.72974915 + z: -31.3100582911 + theta: -1.8169942881 + kappa: -0.0010716967124 + s: 2.1413333273 + dkappa: 0 + } + v: 2.26944446564 + a: 0.3383902173 relative_time: 0.98000001907348633 - theta: -1.8169942881 - accumulated_s: 2.1413333273 -} -adc_trajectory_point { - x: -124.906011486 - y: 362.707746991 - z: -31.3099116171 - - speed: 2.26944446564 - acceleration_s: 0.3383902173 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.906011486 + y: 362.707746991 + z: -31.3099116171 + theta: -1.81701167396 + kappa: -0.0010716967124 + s: 2.16402777195 + dkappa: 0 + } + v: 2.26944446564 + a: 0.3383902173 relative_time: 0.99000000953674316 - theta: -1.81701167396 - accumulated_s: 2.16402777195 -} -adc_trajectory_point { - x: -124.911657594 - y: 362.685697221 - z: -31.3098106673 - - speed: 2.27777767181 - acceleration_s: 0.253441101364 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.911657594 + y: 362.685697221 + z: -31.3098106673 + theta: -1.81704007269 + kappa: -0.0010716967124 + s: 2.18680554867 + dkappa: 0 + } + v: 2.27777767181 + a: 0.253441101364 relative_time: 1 - theta: -1.81704007269 - accumulated_s: 2.18680554867 -} -adc_trajectory_point { - x: -124.917342271 - y: 362.663621334 - z: -31.3097051326 - - speed: 2.27777767181 - acceleration_s: 0.351491129558 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.917342271 + y: 362.663621334 + z: -31.3097051326 + theta: -1.817078017 + kappa: -0.0010716967124 + s: 2.20958332539 + dkappa: 0 + } + v: 2.27777767181 + a: 0.351491129558 relative_time: 1.0099999904632568 - theta: -1.817078017 - accumulated_s: 2.20958332539 -} -adc_trajectory_point { - x: -124.922997579 - y: 362.641505243 - z: -31.3096190887 - - speed: 2.28333330154 - acceleration_s: 0.335841421129 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.922997579 + y: 362.641505243 + z: -31.3096190887 + theta: -1.81708784507 + kappa: -0.0010716967124 + s: 2.2324166584 + dkappa: 0 + } + v: 2.28333330154 + a: 0.335841421129 relative_time: 1.0199999809265137 - theta: -1.81708784507 - accumulated_s: 2.2324166584 -} -adc_trajectory_point { - x: -124.928712232 - y: 362.619380661 - z: -31.3095990429 - - speed: 2.28333330154 - acceleration_s: 0.320966118743 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.928712232 + y: 362.619380661 + z: -31.3095990429 + theta: -1.81714495953 + kappa: -0.0010716967124 + s: 2.25524999142 + dkappa: 0 + } + v: 2.28333330154 + a: 0.320966118743 relative_time: 1.0299999713897705 - theta: -1.81714495953 - accumulated_s: 2.25524999142 -} -adc_trajectory_point { - x: -124.934424731 - y: 362.597219355 - z: -31.309548161 - - speed: 2.29166674614 - acceleration_s: 0.276110419835 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.934424731 + y: 362.597219355 + z: -31.309548161 + theta: -1.81716699596 + kappa: -0.0010716967124 + s: 2.27816665888 + dkappa: 0 + } + v: 2.29166674614 + a: 0.276110419835 relative_time: 1.0399999618530273 - theta: -1.81716699596 - accumulated_s: 2.27816665888 -} -adc_trajectory_point { - x: -124.940134488 - y: 362.575015263 - z: -31.309490839 - - speed: 2.29166674614 - acceleration_s: 0.276110419835 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.940134488 + y: 362.575015263 + z: -31.309490839 + theta: -1.81718843848 + kappa: -0.0010716967124 + s: 2.30108332634 + dkappa: 0 + } + v: 2.29166674614 + a: 0.276110419835 relative_time: 1.0499999523162842 - theta: -1.81718843848 - accumulated_s: 2.30108332634 -} -adc_trajectory_point { - x: -124.945890063 - y: 362.552795248 - z: -31.3095432203 - - speed: 2.29999995232 - acceleration_s: 0.354382152136 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.945890063 + y: 362.552795248 + z: -31.3095432203 + theta: -1.81723244496 + kappa: -0.0010716967124 + s: 2.3240833258699998 + dkappa: 0 + } + v: 2.29999995232 + a: 0.354382152136 relative_time: 1.059999942779541 - theta: -1.81723244496 - accumulated_s: 2.3240833258699998 -} -adc_trajectory_point { - x: -124.951605962 - y: 362.530523981 - z: -31.3095214432 - - speed: 2.29999995232 - acceleration_s: 0.324520312094 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.951605962 + y: 362.530523981 + z: -31.3095214432 + theta: -1.81723087207 + kappa: -0.0010716967124 + s: 2.34708332539 + dkappa: 0 + } + v: 2.29999995232 + a: 0.324520312094 relative_time: 1.0699999332427979 - theta: -1.81723087207 - accumulated_s: 2.34708332539 -} -adc_trajectory_point { - x: -124.957321709 - y: 362.508220335 - z: -31.3095393144 - - speed: 2.30555558205 - acceleration_s: 0.348487246706 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.957321709 + y: 362.508220335 + z: -31.3095393144 + theta: -1.81721876492 + kappa: -0.0010716967124 + s: 2.37013888121 + dkappa: 0 + } + v: 2.30555558205 + a: 0.348487246706 relative_time: 1.0800001621246338 - theta: -1.81721876492 - accumulated_s: 2.37013888121 -} -adc_trajectory_point { - x: -124.963071922 - y: 362.485895519 - z: -31.3095405428 - - speed: 2.30555558205 - acceleration_s: 0.32138151059 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.963071922 + y: 362.485895519 + z: -31.3095405428 + theta: -1.81724543977 + kappa: -0.0010716967124 + s: 2.39319443703 + dkappa: 0 + } + v: 2.30555558205 + a: 0.32138151059 relative_time: 1.0900001525878906 - theta: -1.81724543977 - accumulated_s: 2.39319443703 -} -adc_trajectory_point { - x: -124.968806615 - y: 362.463537572 - z: -31.3095670613 - - speed: 2.31388878822 - acceleration_s: 0.280537841948 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.968806615 + y: 362.463537572 + z: -31.3095670613 + theta: -1.81726134313 + kappa: -0.0010716967124 + s: 2.41633332491 + dkappa: 0 + } + v: 2.31388878822 + a: 0.280537841948 relative_time: 1.1000001430511475 - theta: -1.81726134313 - accumulated_s: 2.41633332491 -} -adc_trajectory_point { - x: -124.974586177 - y: 362.441142231 - z: -31.3095919834 - - speed: 2.31388878822 - acceleration_s: 0.370225847881 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.974586177 + y: 362.441142231 + z: -31.3095919834 + theta: -1.81731874733 + kappa: -0.0010716967124 + s: 2.43947221279 + dkappa: 0 + } + v: 2.31388878822 + a: 0.370225847881 relative_time: 1.1100001335144043 - theta: -1.81731874733 - accumulated_s: 2.43947221279 -} -adc_trajectory_point { - x: -124.980340511 - y: 362.418729208 - z: -31.3095278786 - - speed: 2.32222223282 - acceleration_s: 0.241979496989 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.980340511 + y: 362.418729208 + z: -31.3095278786 + theta: -1.81734233112 + kappa: -0.0010716967124 + s: 2.46269443512 + dkappa: 0 + } + v: 2.32222223282 + a: 0.241979496989 relative_time: 1.1200001239776611 - theta: -1.81734233112 - accumulated_s: 2.46269443512 -} -adc_trajectory_point { - x: -124.986108794 - y: 362.396299265 - z: -31.3095189845 - - speed: 2.32222223282 - acceleration_s: 0.258339113235 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.986108794 + y: 362.396299265 + z: -31.3095189845 + theta: -1.81741367267 + kappa: -0.0010716967124 + s: 2.48591665745 + dkappa: 0 + } + v: 2.32222223282 + a: 0.258339113235 relative_time: 1.130000114440918 - theta: -1.81741367267 - accumulated_s: 2.48591665745 -} -adc_trajectory_point { - x: -124.991854603 - y: 362.373844839 - z: -31.3094680347 - - speed: 2.32777786255 - acceleration_s: 0.206151345491 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.991854603 + y: 362.373844839 + z: -31.3094680347 + theta: -1.81742356958 + kappa: -0.0010716967124 + s: 2.50919443608 + dkappa: 0 + } + v: 2.32777786255 + a: 0.206151345491 relative_time: 1.1400001049041748 - theta: -1.81742356958 - accumulated_s: 2.50919443608 -} -adc_trajectory_point { - x: -124.99761637 - y: 362.351373119 - z: -31.3094466757 - - speed: 2.32777786255 - acceleration_s: 0.206151345491 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -124.99761637 + y: 362.351373119 + z: -31.3094466757 + theta: -1.81747367091 + kappa: -0.0010716967124 + s: 2.5324722147 + dkappa: 0 + } + v: 2.32777786255 + a: 0.206151345491 relative_time: 1.1500000953674316 - theta: -1.81747367091 - accumulated_s: 2.5324722147 -} -adc_trajectory_point { - x: -125.003396772 - y: 362.328847582 - z: -31.3093775567 - - speed: 2.33333325386 - acceleration_s: 0.379817082608 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.003396772 + y: 362.328847582 + z: -31.3093775567 + theta: -1.81754148719 + kappa: -0.0010716967124 + s: 2.5558055472400003 + dkappa: 0 + } + v: 2.33333325386 + a: 0.379817082608 relative_time: 1.1600000858306885 - theta: -1.81754148719 - accumulated_s: 2.5558055472400003 -} -adc_trajectory_point { - x: -125.009165892 - y: 362.306293563 - z: -31.3092897991 - - speed: 2.33333325386 - acceleration_s: 0.299134172747 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.009165892 + y: 362.306293563 + z: -31.3092897991 + theta: -1.81757923795 + kappa: -0.0010716967124 + s: 2.5791388797800003 + dkappa: 0 + } + v: 2.33333325386 + a: 0.299134172747 relative_time: 1.1700000762939453 - theta: -1.81757923795 - accumulated_s: 2.5791388797800003 -} -adc_trajectory_point { - x: -125.01491479 - y: 362.283695177 - z: -31.3091968307 - - speed: 2.33888888359 - acceleration_s: 0.360938366845 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.01491479 + y: 362.283695177 + z: -31.3091968307 + theta: -1.81761911764 + kappa: -0.0010716967124 + s: 2.60252776861 + dkappa: 0 + } + v: 2.33888888359 + a: 0.360938366845 relative_time: 1.1800000667572021 - theta: -1.81761911764 - accumulated_s: 2.60252776861 -} -adc_trajectory_point { - x: -125.020689332 - y: 362.261076162 - z: -31.3090890879 - - speed: 2.33888888359 - acceleration_s: 0.349436649607 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.020689332 + y: 362.261076162 + z: -31.3090890879 + theta: -1.81768910552 + kappa: -0.0010716967124 + s: 2.6259166574500004 + dkappa: 0 + } + v: 2.33888888359 + a: 0.349436649607 relative_time: 1.190000057220459 - theta: -1.81768910552 - accumulated_s: 2.6259166574500004 -} -adc_trajectory_point { - x: -125.020689332 - y: 362.261076162 - z: -31.3090890879 - - speed: 2.34722232819 - acceleration_s: 0.349436649607 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.020689332 + y: 362.261076162 + z: -31.3090890879 + theta: -1.81768910552 + kappa: -0.0010716967124 + s: 2.64938888073 + dkappa: 0 + } + v: 2.34722232819 + a: 0.349436649607 relative_time: 1.190000057220459 - theta: -1.81768910552 - accumulated_s: 2.64938888073 -} -adc_trajectory_point { - x: -125.032223512 - y: 362.215734672 - z: -31.3088880777 - - speed: 2.34722232819 - acceleration_s: 0.382746253399 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.032223512 + y: 362.215734672 + z: -31.3088880777 + theta: -1.81779317675 + kappa: -0.0010716967124 + s: 2.67286110401 + dkappa: 0 + } + v: 2.34722232819 + a: 0.382746253399 relative_time: 1.2100000381469727 - theta: -1.81779317675 - accumulated_s: 2.67286110401 -} -adc_trajectory_point { - x: -125.03801035 - y: 362.193008906 - z: -31.3087713663 - - speed: 2.35833334923 - acceleration_s: 0.355088601835 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.03801035 + y: 362.193008906 + z: -31.3087713663 + theta: -1.81784525819 + kappa: -0.0010716967124 + s: 2.6964444375100003 + dkappa: 0 + } + v: 2.35833334923 + a: 0.355088601835 relative_time: 1.2200000286102295 - theta: -1.81784525819 - accumulated_s: 2.6964444375100003 -} -adc_trajectory_point { - x: -125.043777403 - y: 362.17025142 - z: -31.3086255761 - - speed: 2.35833334923 - acceleration_s: 0.293401082275 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.043777403 + y: 362.17025142 + z: -31.3086255761 + theta: -1.81789035034 + kappa: -0.0010716967124 + s: 2.720027771 + dkappa: 0 + } + v: 2.35833334923 + a: 0.293401082275 relative_time: 1.2300000190734863 - theta: -1.81789035034 - accumulated_s: 2.720027771 -} -adc_trajectory_point { - x: -125.049547628 - y: 362.147452091 - z: -31.3085405938 - - speed: 2.3666665554 - acceleration_s: 0.392681080735 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.049547628 + y: 362.147452091 + z: -31.3085405938 + theta: -1.81791038105 + kappa: -0.0010716967124 + s: 2.7436944365500002 + dkappa: 0 + } + v: 2.3666665554 + a: 0.392681080735 relative_time: 1.2400000095367432 - theta: -1.81791038105 - accumulated_s: 2.7436944365500002 -} -adc_trajectory_point { - x: -125.055357917 - y: 362.124660437 - z: -31.3084632047 - - speed: 2.3666665554 - acceleration_s: 0.212717036543 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.055357917 + y: 362.124660437 + z: -31.3084632047 + theta: -1.81798167142 + kappa: -0.0010716967124 + s: 2.7673611021099997 + dkappa: 0 + } + v: 2.3666665554 + a: 0.212717036543 relative_time: 1.25 - theta: -1.81798167142 - accumulated_s: 2.7673611021099997 -} -adc_trajectory_point { - x: -125.061163799 - y: 362.101799163 - z: -31.3083684873 - - speed: 2.37222218513 - acceleration_s: 0.402120536361 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.061163799 + y: 362.101799163 + z: -31.3083684873 + theta: -1.81802179654 + kappa: -0.0010716967124 + s: 2.7910833239599997 + dkappa: 0 + } + v: 2.37222218513 + a: 0.402120536361 relative_time: 1.2599999904632568 - theta: -1.81802179654 - accumulated_s: 2.7910833239599997 -} -adc_trajectory_point { - x: -125.067021567 - y: 362.078912029 - z: -31.3083270611 - - speed: 2.37222218513 - acceleration_s: 0.40728875592 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.067021567 + y: 362.078912029 + z: -31.3083270611 + theta: -1.81809542476 + kappa: -0.0010716967124 + s: 2.8148055458099996 + dkappa: 0 + } + v: 2.37222218513 + a: 0.40728875592 relative_time: 1.2699999809265137 - theta: -1.81809542476 - accumulated_s: 2.8148055458099996 -} -adc_trajectory_point { - x: -125.072829426 - y: 362.055975827 - z: -31.3082894357 - - speed: 2.37777781487 - acceleration_s: 0.384221677252 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.072829426 + y: 362.055975827 + z: -31.3082894357 + theta: -1.81809018366 + kappa: -0.0010716967124 + s: 2.83858332396 + dkappa: 0 + } + v: 2.37777781487 + a: 0.384221677252 relative_time: 1.2799999713897705 - theta: -1.81809018366 - accumulated_s: 2.83858332396 -} -adc_trajectory_point { - x: -125.078695034 - y: 362.032988138 - z: -31.308244017 - - speed: 2.37777781487 - acceleration_s: 0.500380948926 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.078695034 + y: 362.032988138 + z: -31.308244017 + theta: -1.81813979053 + kappa: -0.0010716967124 + s: 2.8623611021100004 + dkappa: 0 + } + v: 2.37777781487 + a: 0.500380948926 relative_time: 1.2899999618530273 - theta: -1.81813979053 - accumulated_s: 2.8623611021100004 -} -adc_trajectory_point { - x: -125.084563219 - y: 362.00997671 - z: -31.3083070498 - - speed: 2.38611102104 - acceleration_s: 0.500380948926 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.084563219 + y: 362.00997671 + z: -31.3083070498 + theta: -1.81817159571 + kappa: -0.0010716967124 + s: 2.88622221232 + dkappa: 0 + } + v: 2.38611102104 + a: 0.500380948926 relative_time: 1.2999999523162842 - theta: -1.81817159571 - accumulated_s: 2.88622221232 -} -adc_trajectory_point { - x: -125.090443743 - y: 361.986921063 - z: -31.3083240818 - - speed: 2.38611102104 - acceleration_s: 0.42359364563 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.090443743 + y: 361.986921063 + z: -31.3083240818 + theta: -1.81820900677 + kappa: -0.0010716967124 + s: 2.9100833225300002 + dkappa: 0 + } + v: 2.38611102104 + a: 0.42359364563 relative_time: 1.309999942779541 - theta: -1.81820900677 - accumulated_s: 2.9100833225300002 -} -adc_trajectory_point { - x: -125.096382179 - y: 361.963823327 - z: -31.3084300598 - - speed: 2.39444446564 - acceleration_s: 0.441271914059 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.096382179 + y: 361.963823327 + z: -31.3084300598 + theta: -1.81826673453 + kappa: -0.0010716967124 + s: 2.93402776718 + dkappa: 0 + } + v: 2.39444446564 + a: 0.441271914059 relative_time: 1.3199999332427979 - theta: -1.81826673453 - accumulated_s: 2.93402776718 -} -adc_trajectory_point { - x: -125.102305553 - y: 361.940693228 - z: -31.3084903685 - - speed: 2.39444446564 - acceleration_s: 0.371848661884 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.102305553 + y: 361.940693228 + z: -31.3084903685 + theta: -1.8182738089 + kappa: -0.0010716967124 + s: 2.9579722118399996 + dkappa: 0 + } + v: 2.39444446564 + a: 0.371848661884 relative_time: 1.3300001621246338 - theta: -1.8182738089 - accumulated_s: 2.9579722118399996 -} -adc_trajectory_point { - x: -125.108232957 - y: 361.917510539 - z: -31.3085952336 - - speed: 2.40277767181 - acceleration_s: 0.430566906059 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.108232957 + y: 361.917510539 + z: -31.3085952336 + theta: -1.81827950286 + kappa: -0.0010716967124 + s: 2.98199998856 + dkappa: 0 + } + v: 2.40277767181 + a: 0.430566906059 relative_time: 1.3400001525878906 - theta: -1.81827950286 - accumulated_s: 2.98199998856 -} -adc_trajectory_point { - x: -125.108232957 - y: 361.917510539 - z: -31.3085952336 - - speed: 2.40277767181 - acceleration_s: 0.430566906059 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.108232957 + y: 361.917510539 + z: -31.3085952336 + theta: -1.81827950286 + kappa: -0.0010716967124 + s: 3.00602776528 + dkappa: 0 + } + v: 2.40277767181 + a: 0.430566906059 relative_time: 1.3400001525878906 - theta: -1.81827950286 - accumulated_s: 3.00602776528 -} -adc_trajectory_point { - x: -125.120187141 - y: 361.871080309 - z: -31.3087874381 - - speed: 2.41111111641 - acceleration_s: 0.327868528721 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.120187141 + y: 361.871080309 + z: -31.3087874381 + theta: -1.81832828484 + kappa: -0.0010716967124 + s: 3.0301388764399997 + dkappa: 0 + } + v: 2.41111111641 + a: 0.327868528721 relative_time: 1.3600001335144043 - theta: -1.81832828484 - accumulated_s: 3.0301388764399997 -} -adc_trajectory_point { - x: -125.126181296 - y: 361.847791106 - z: -31.3088982496 - - speed: 2.41111111641 - acceleration_s: 0.451219002202 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.126181296 + y: 361.847791106 + z: -31.3088982496 + theta: -1.81832183957 + kappa: -0.0010716967124 + s: 3.0542499875999995 + dkappa: 0 + } + v: 2.41111111641 + a: 0.451219002202 relative_time: 1.3700001239776611 - theta: -1.81832183957 - accumulated_s: 3.0542499875999995 -} -adc_trajectory_point { - x: -125.132231645 - y: 361.824497802 - z: -31.3090133145 - - speed: 2.41666674614 - acceleration_s: 0.356885881439 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.132231645 + y: 361.824497802 + z: -31.3090133145 + theta: -1.81837974849 + kappa: -0.0010716967124 + s: 3.07841665507 + dkappa: 0 + } + v: 2.41666674614 + a: 0.356885881439 relative_time: 1.380000114440918 - theta: -1.81837974849 - accumulated_s: 3.07841665507 -} -adc_trajectory_point { - x: -125.138258952 - y: 361.801142214 - z: -31.3091033828 - - speed: 2.41666674614 - acceleration_s: 0.420614351144 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.138258952 + y: 361.801142214 + z: -31.3091033828 + theta: -1.81838505478 + kappa: -0.0010716967124 + s: 3.10258332253 + dkappa: 0 + } + v: 2.41666674614 + a: 0.420614351144 relative_time: 1.3900001049041748 - theta: -1.81838505478 - accumulated_s: 3.10258332253 -} -adc_trajectory_point { - x: -125.138258952 - y: 361.801142214 - z: -31.3091033828 - - speed: 2.42777776718 - acceleration_s: 0.420614351144 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.138258952 + y: 361.801142214 + z: -31.3091033828 + theta: -1.81838505478 + kappa: -0.0010716967124 + s: 3.1268611002 + dkappa: 0 + } + v: 2.42777776718 + a: 0.420614351144 relative_time: 1.3900001049041748 - theta: -1.81838505478 - accumulated_s: 3.1268611002 -} -adc_trajectory_point { - x: -125.1504013 - y: 361.754317185 - z: -31.3093132749 - - speed: 2.42777776718 - acceleration_s: 0.398169023032 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.1504013 + y: 361.754317185 + z: -31.3093132749 + theta: -1.81840952263 + kappa: -0.0010716967124 + s: 3.1511388778700002 + dkappa: 0 + } + v: 2.42777776718 + a: 0.398169023032 relative_time: 1.4100000858306885 - theta: -1.81840952263 - accumulated_s: 3.1511388778700002 -} -adc_trajectory_point { - x: -125.156499401 - y: 361.730817079 - z: -31.3093788503 - - speed: 2.43611121178 - acceleration_s: 0.591555982708 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.156499401 + y: 361.730817079 + z: -31.3093788503 + theta: -1.81841737267 + kappa: -0.0010716967124 + s: 3.1754999899899996 + dkappa: 0 + } + v: 2.43611121178 + a: 0.591555982708 relative_time: 1.4200000762939453 - theta: -1.81841737267 - accumulated_s: 3.1754999899899996 -} -adc_trajectory_point { - x: -125.162622415 - y: 361.70731755 - z: -31.3094226215 - - speed: 2.43611121178 - acceleration_s: 0.354240702412 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.162622415 + y: 361.70731755 + z: -31.3094226215 + theta: -1.81845171629 + kappa: -0.0010716967124 + s: 3.19986110211 + dkappa: 0 + } + v: 2.43611121178 + a: 0.354240702412 relative_time: 1.4300000667572021 - theta: -1.81845171629 - accumulated_s: 3.19986110211 -} -adc_trajectory_point { - x: -125.168749178 - y: 361.683754857 - z: -31.3094495237 - - speed: 2.44166660309 - acceleration_s: 0.438057057872 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.168749178 + y: 361.683754857 + z: -31.3094495237 + theta: -1.8184750244 + kappa: -0.0010716967124 + s: 3.2242777681400003 + dkappa: 0 + } + v: 2.44166660309 + a: 0.438057057872 relative_time: 1.440000057220459 - theta: -1.8184750244 - accumulated_s: 3.2242777681400003 -} -adc_trajectory_point { - x: -125.168749178 - y: 361.683754857 - z: -31.3094495237 - - speed: 2.44166660309 - acceleration_s: 0.438057057872 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.168749178 + y: 361.683754857 + z: -31.3094495237 + theta: -1.8184750244 + kappa: -0.0010716967124 + s: 3.24869443417 + dkappa: 0 + } + v: 2.44166660309 + a: 0.438057057872 relative_time: 1.440000057220459 - theta: -1.8184750244 - accumulated_s: 3.24869443417 -} -adc_trajectory_point { - x: -125.181073192 - y: 361.636523244 - z: -31.3095965637 - - speed: 2.45277786255 - acceleration_s: 0.406559172215 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.181073192 + y: 361.636523244 + z: -31.3095965637 + theta: -1.81857129728 + kappa: -0.0010716967124 + s: 3.2732222127900004 + dkappa: 0 + } + v: 2.45277786255 + a: 0.406559172215 relative_time: 1.4600000381469727 - theta: -1.81857129728 - accumulated_s: 3.2732222127900004 -} -adc_trajectory_point { - x: -125.187253533 - y: 361.612821763 - z: -31.3096149852 - - speed: 2.45277786255 - acceleration_s: 0.555435364511 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.187253533 + y: 361.612821763 + z: -31.3096149852 + theta: -1.81861428093 + kappa: -0.0010716967124 + s: 3.29774999142 + dkappa: 0 + } + v: 2.45277786255 + a: 0.555435364511 relative_time: 1.4700000286102295 - theta: -1.81861428093 - accumulated_s: 3.29774999142 -} -adc_trajectory_point { - x: -125.193447694 - y: 361.589087084 - z: -31.3096721135 - - speed: 2.46111106873 - acceleration_s: 0.474561880611 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.193447694 + y: 361.589087084 + z: -31.3096721135 + theta: -1.81864823851 + kappa: -0.0010716967124 + s: 3.3223611021100004 + dkappa: 0 + } + v: 2.46111106873 + a: 0.474561880611 relative_time: 1.4800000190734863 - theta: -1.81864823851 - accumulated_s: 3.3223611021100004 -} -adc_trajectory_point { - x: -125.199648161 - y: 361.565319286 - z: -31.3096358571 - - speed: 2.46111106873 - acceleration_s: 0.39098499412 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.199648161 + y: 361.565319286 + z: -31.3096358571 + theta: -1.81871111009 + kappa: -0.0010716967124 + s: 3.34697221279 + dkappa: 0 + } + v: 2.46111106873 + a: 0.39098499412 relative_time: 1.4900000095367432 - theta: -1.81871111009 - accumulated_s: 3.34697221279 -} -adc_trajectory_point { - x: -125.205877684 - y: 361.541492939 - z: -31.3096838295 - - speed: 2.46944451332 - acceleration_s: 0.39098499412 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.205877684 + y: 361.541492939 + z: -31.3096838295 + theta: -1.81876580215 + kappa: -0.0010716967124 + s: 3.3716666579299996 + dkappa: 0 + } + v: 2.46944451332 + a: 0.39098499412 relative_time: 1.5 - theta: -1.81876580215 - accumulated_s: 3.3716666579299996 -} -adc_trajectory_point { - x: -125.212107542 - y: 361.517644532 - z: -31.3097066302 - - speed: 2.46944451332 - acceleration_s: 0.378531990209 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.212107542 + y: 361.517644532 + z: -31.3097066302 + theta: -1.81882500449 + kappa: -0.0010716967124 + s: 3.3963611030600003 + dkappa: 0 + } + v: 2.46944451332 + a: 0.378531990209 relative_time: 1.5099999904632568 - theta: -1.81882500449 - accumulated_s: 3.3963611030600003 -} -adc_trajectory_point { - x: -125.218346849 - y: 361.493731449 - z: -31.309656702 - - speed: 2.47499990463 - acceleration_s: 0.47112637066 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.218346849 + y: 361.493731449 + z: -31.309656702 + theta: -1.81886503663 + kappa: -0.0010716967124 + s: 3.4211111021100002 + dkappa: 0 + } + v: 2.47499990463 + a: 0.47112637066 relative_time: 1.5199999809265137 - theta: -1.81886503663 - accumulated_s: 3.4211111021100002 -} -adc_trajectory_point { - x: -125.224611842 - y: 361.469764138 - z: -31.3097078418 - - speed: 2.47499990463 - acceleration_s: 0.574009610061 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.224611842 + y: 361.469764138 + z: -31.3097078418 + theta: -1.818928914 + kappa: -0.0010716967124 + s: 3.44586110115 + dkappa: 0 + } + v: 2.47499990463 + a: 0.574009610061 relative_time: 1.5299999713897705 - theta: -1.818928914 - accumulated_s: 3.44586110115 -} -adc_trajectory_point { - x: -125.230903508 - y: 361.445775601 - z: -31.30969417 - - speed: 2.47499990463 - acceleration_s: 0.426942605328 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.230903508 + y: 361.445775601 + z: -31.30969417 + theta: -1.81902915216 + kappa: -0.0010716967124 + s: 3.4706111002 + dkappa: 0 + } + v: 2.47499990463 + a: 0.426942605328 relative_time: 1.5399999618530273 - theta: -1.81902915216 - accumulated_s: 3.4706111002 -} -adc_trajectory_point { - x: -125.237193935 - y: 361.421710391 - z: -31.3097933289 - - speed: 2.4777777195 - acceleration_s: 0.426942605328 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.237193935 + y: 361.421710391 + z: -31.3097933289 + theta: -1.81910561914 + kappa: -0.0010716967124 + s: 3.49538887739 + dkappa: 0 + } + v: 2.4777777195 + a: 0.426942605328 relative_time: 1.5499999523162842 - theta: -1.81910561914 - accumulated_s: 3.49538887739 -} -adc_trajectory_point { - x: -125.243475659 - y: 361.397603752 - z: -31.3098835414 - - speed: 2.48611116409 - acceleration_s: 0.514772887587 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.243475659 + y: 361.397603752 + z: -31.3098835414 + theta: -1.81914558193 + kappa: -0.0010716967124 + s: 3.52024998904 + dkappa: 0 + } + v: 2.48611116409 + a: 0.514772887587 relative_time: 1.559999942779541 - theta: -1.81914558193 - accumulated_s: 3.52024998904 -} -adc_trajectory_point { - x: -125.249806194 - y: 361.373444574 - z: -31.3098348845 - - speed: 2.48611116409 - acceleration_s: 0.48136122605 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.249806194 + y: 361.373444574 + z: -31.3098348845 + theta: -1.81924363629 + kappa: -0.0010716967124 + s: 3.54511110068 + dkappa: 0 + } + v: 2.48611116409 + a: 0.48136122605 relative_time: 1.5699999332427979 - theta: -1.81924363629 - accumulated_s: 3.54511110068 -} -adc_trajectory_point { - x: -125.256129277 - y: 361.349208057 - z: -31.3098312309 - - speed: 2.49444437027 - acceleration_s: 0.650386793625 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.256129277 + y: 361.349208057 + z: -31.3098312309 + theta: -1.81930289222 + kappa: -0.0010716967124 + s: 3.5700555443799997 + dkappa: 0 + } + v: 2.49444437027 + a: 0.650386793625 relative_time: 1.5800001621246338 - theta: -1.81930289222 - accumulated_s: 3.5700555443799997 -} -adc_trajectory_point { - x: -125.262467753 - y: 361.324961814 - z: -31.309970025 - - speed: 2.49444437027 - acceleration_s: 0.455046489661 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.262467753 + y: 361.324961814 + z: -31.309970025 + theta: -1.81940221501 + kappa: -0.0010716967124 + s: 3.5949999880799997 + dkappa: 0 + } + v: 2.49444437027 + a: 0.455046489661 relative_time: 1.5900001525878906 - theta: -1.81940221501 - accumulated_s: 3.5949999880799997 -} -adc_trajectory_point { - x: -125.262467753 - y: 361.324961814 - z: -31.309970025 - - speed: 2.49444437027 - acceleration_s: 0.455046489661 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.262467753 + y: 361.324961814 + z: -31.309970025 + theta: -1.81940221501 + kappa: -0.0010716967124 + s: 3.6199444317799996 + dkappa: 0 + } + v: 2.49444437027 + a: 0.455046489661 relative_time: 1.5900001525878906 - theta: -1.81940221501 - accumulated_s: 3.6199444317799996 -} -adc_trajectory_point { - x: -125.275156926 - y: 361.276277158 - z: -31.3101264155 - - speed: 2.50555562973 - acceleration_s: 0.504832206055 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.275156926 + y: 361.276277158 + z: -31.3101264155 + theta: -1.81951968729 + kappa: -0.0010716967124 + s: 3.6449999880800004 + dkappa: 0 + } + v: 2.50555562973 + a: 0.504832206055 relative_time: 1.6100001335144043 - theta: -1.81951968729 - accumulated_s: 3.6449999880800004 -} -adc_trajectory_point { - x: -125.281505449 - y: 361.251891324 - z: -31.3101503132 - - speed: 2.51666665077 - acceleration_s: 0.330095511333 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.281505449 + y: 361.251891324 + z: -31.3101503132 + theta: -1.81957494803 + kappa: -0.0010716967124 + s: 3.67016665459 + dkappa: 0 + } + v: 2.51666665077 + a: 0.330095511333 relative_time: 1.6200001239776611 - theta: -1.81957494803 - accumulated_s: 3.67016665459 -} -adc_trajectory_point { - x: -125.287885624 - y: 361.227417206 - z: -31.3101102514 - - speed: 2.51666665077 - acceleration_s: 0.623986480013 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.287885624 + y: 361.227417206 + z: -31.3101102514 + theta: -1.81963084477 + kappa: -0.0010716967124 + s: 3.6953333210999997 + dkappa: 0 + } + v: 2.51666665077 + a: 0.623986480013 relative_time: 1.630000114440918 - theta: -1.81963084477 - accumulated_s: 3.6953333210999997 -} -adc_trajectory_point { - x: -125.294263067 - y: 361.202915719 - z: -31.3101540385 - - speed: 2.52500009537 - acceleration_s: 0.470652419138 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.294263067 + y: 361.202915719 + z: -31.3101540385 + theta: -1.81968285302 + kappa: -0.0010716967124 + s: 3.7205833220500004 + dkappa: 0 + } + v: 2.52500009537 + a: 0.470652419138 relative_time: 1.6400001049041748 - theta: -1.81968285302 - accumulated_s: 3.7205833220500004 -} -adc_trajectory_point { - x: -125.300668029 - y: 361.178341563 - z: -31.3101223055 - - speed: 2.52500009537 - acceleration_s: 0.557301339731 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.300668029 + y: 361.178341563 + z: -31.3101223055 + theta: -1.81976648752 + kappa: -0.0010716967124 + s: 3.7458333230000003 + dkappa: 0 + } + v: 2.52500009537 + a: 0.557301339731 relative_time: 1.6500000953674316 - theta: -1.81976648752 - accumulated_s: 3.7458333230000003 -} -adc_trajectory_point { - x: -125.307057381 - y: 361.153720209 - z: -31.3102796115 - - speed: 2.53333330154 - acceleration_s: 0.59587861808 - curvature: -0.00110997184211 - curvature_change_rate: -0.00151086040199 +} +trajectory_point { + path_point { + x: -125.307057381 + y: 361.153720209 + z: -31.3102796115 + theta: -1.8197875326 + kappa: -0.00110997184211 + s: 3.77116665602 + dkappa: -0.00151086040199 + } + v: 2.53333330154 + a: 0.59587861808 relative_time: 1.6600000858306885 - theta: -1.8197875326 - accumulated_s: 3.77116665602 -} -adc_trajectory_point { - x: -125.313499771 - y: 361.129059883 - z: -31.3102807552 - - speed: 2.53333330154 - acceleration_s: 0.506494375233 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.313499771 + y: 361.129059883 + z: -31.3102807552 + theta: -1.81985507388 + kappa: -0.00110997184211 + s: 3.79649998904 + dkappa: 0 + } + v: 2.53333330154 + a: 0.506494375233 relative_time: 1.6700000762939453 - theta: -1.81985507388 - accumulated_s: 3.79649998904 -} -adc_trajectory_point { - x: -125.319920217 - y: 361.104345721 - z: -31.3101786645 - - speed: 2.544444561 - acceleration_s: 0.487412846952 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.319920217 + y: 361.104345721 + z: -31.3101786645 + theta: -1.81988979221 + kappa: -0.00110997184211 + s: 3.8219444346499998 + dkappa: 0 + } + v: 2.544444561 + a: 0.487412846952 relative_time: 1.6800000667572021 - theta: -1.81988979221 - accumulated_s: 3.8219444346499998 -} -adc_trajectory_point { - x: -125.326348711 - y: 361.079596709 - z: -31.3101000581 - - speed: 2.544444561 - acceleration_s: 0.396641112764 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.326348711 + y: 361.079596709 + z: -31.3101000581 + theta: -1.81993184901 + kappa: -0.00110997184211 + s: 3.8473888802599996 + dkappa: 0 + } + v: 2.544444561 + a: 0.396641112764 relative_time: 1.690000057220459 - theta: -1.81993184901 - accumulated_s: 3.8473888802599996 -} -adc_trajectory_point { - x: -125.326348711 - y: 361.079596709 - z: -31.3101000581 - - speed: 2.55555558205 - acceleration_s: 0.396641112764 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.326348711 + y: 361.079596709 + z: -31.3101000581 + theta: -1.81993184901 + kappa: -0.00110997184211 + s: 3.87294443608 + dkappa: 0 + } + v: 2.55555558205 + a: 0.396641112764 relative_time: 1.690000057220459 - theta: -1.81993184901 - accumulated_s: 3.87294443608 -} -adc_trajectory_point { - x: -125.339222556 - y: 361.029976296 - z: -31.3100965517 - - speed: 2.55555558205 - acceleration_s: 0.497112877228 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.339222556 + y: 361.029976296 + z: -31.3100965517 + theta: -1.82006312201 + kappa: -0.00110997184211 + s: 3.8984999918999996 + dkappa: 0 + } + v: 2.55555558205 + a: 0.497112877228 relative_time: 1.7100000381469727 - theta: -1.82006312201 - accumulated_s: 3.8984999918999996 -} -adc_trajectory_point { - x: -125.345661169 - y: 361.005068195 - z: -31.3100165213 - - speed: 2.56388878822 - acceleration_s: 0.542388897611 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.345661169 + y: 361.005068195 + z: -31.3100165213 + theta: -1.82006347002 + kappa: -0.00110997184211 + s: 3.92413887978 + dkappa: 0 + } + v: 2.56388878822 + a: 0.542388897611 relative_time: 1.7200000286102295 - theta: -1.82006347002 - accumulated_s: 3.92413887978 -} -adc_trajectory_point { - x: -125.352128438 - y: 360.980115994 - z: -31.3098779172 - - speed: 2.56388878822 - acceleration_s: 0.546547177071 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.352128438 + y: 360.980115994 + z: -31.3098779172 + theta: -1.82010562887 + kappa: -0.00110997184211 + s: 3.9497777676599997 + dkappa: 0 + } + v: 2.56388878822 + a: 0.546547177071 relative_time: 1.7300000190734863 - theta: -1.82010562887 - accumulated_s: 3.9497777676599997 -} -adc_trajectory_point { - x: -125.358609364 - y: 360.955101644 - z: -31.3097669361 - - speed: 2.57500004768 - acceleration_s: 0.633001016486 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.358609364 + y: 360.955101644 + z: -31.3097669361 + theta: -1.82010467581 + kappa: -0.00110997184211 + s: 3.97552776814 + dkappa: 0 + } + v: 2.57500004768 + a: 0.633001016486 relative_time: 1.7400000095367432 - theta: -1.82010467581 - accumulated_s: 3.97552776814 -} -adc_trajectory_point { - x: -125.365083092 - y: 360.930060616 - z: -31.3096202817 - - speed: 2.57500004768 - acceleration_s: 0.633001016486 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.365083092 + y: 360.930060616 + z: -31.3096202817 + theta: -1.82009665155 + kappa: -0.00110997184211 + s: 4.00127776861 + dkappa: 0 + } + v: 2.57500004768 + a: 0.633001016486 relative_time: 1.75 - theta: -1.82009665155 - accumulated_s: 4.00127776861 -} -adc_trajectory_point { - x: -125.371579562 - y: 360.904948257 - z: -31.3094767677 - - speed: 2.58888888359 - acceleration_s: 0.53525839062 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.371579562 + y: 360.904948257 + z: -31.3094767677 + theta: -1.82012311264 + kappa: -0.00110997184211 + s: 4.02716665745 + dkappa: 0 + } + v: 2.58888888359 + a: 0.53525839062 relative_time: 1.7599999904632568 - theta: -1.82012311264 - accumulated_s: 4.02716665745 -} -adc_trajectory_point { - x: -125.378124914 - y: 360.879822808 - z: -31.3093882594 - - speed: 2.58888888359 - acceleration_s: 0.487854860158 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.378124914 + y: 360.879822808 + z: -31.3093882594 + theta: -1.82016109208 + kappa: -0.00110997184211 + s: 4.05305554629 + dkappa: 0 + } + v: 2.58888888359 + a: 0.487854860158 relative_time: 1.7699999809265137 - theta: -1.82016109208 - accumulated_s: 4.05305554629 -} -adc_trajectory_point { - x: -125.384642207 - y: 360.854632133 - z: -31.3092705887 - - speed: 2.6027777195 - acceleration_s: 0.478420581517 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.384642207 + y: 360.854632133 + z: -31.3092705887 + theta: -1.82014668287 + kappa: -0.00110997184211 + s: 4.07908332348 + dkappa: 0 + } + v: 2.6027777195 + a: 0.478420581517 relative_time: 1.7799999713897705 - theta: -1.82014668287 - accumulated_s: 4.07908332348 -} -adc_trajectory_point { - x: -125.39118994 - y: 360.829372517 - z: -31.3091875464 - - speed: 2.6027777195 - acceleration_s: 0.544181263352 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.39118994 + y: 360.829372517 + z: -31.3091875464 + theta: -1.82013984538 + kappa: -0.00110997184211 + s: 4.10511110068 + dkappa: 0 + } + v: 2.6027777195 + a: 0.544181263352 relative_time: 1.7899999618530273 - theta: -1.82013984538 - accumulated_s: 4.10511110068 -} -adc_trajectory_point { - x: -125.39118994 - y: 360.829372517 - z: -31.3091875464 - - speed: 2.61111116409 - acceleration_s: 0.544181263352 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.39118994 + y: 360.829372517 + z: -31.3091875464 + theta: -1.82013984538 + kappa: -0.00110997184211 + s: 4.13122221232 + dkappa: 0 + } + v: 2.61111116409 + a: 0.544181263352 relative_time: 1.7899999618530273 - theta: -1.82013984538 - accumulated_s: 4.13122221232 -} -adc_trajectory_point { - x: -125.404328653 - y: 360.77872648 - z: -31.3089771597 - - speed: 2.61111116409 - acceleration_s: 0.520326750882 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.404328653 + y: 360.77872648 + z: -31.3089771597 + theta: -1.82020182981 + kappa: -0.00110997184211 + s: 4.15733332396 + dkappa: 0 + } + v: 2.61111116409 + a: 0.520326750882 relative_time: 1.809999942779541 - theta: -1.82020182981 - accumulated_s: 4.15733332396 -} -adc_trajectory_point { - x: -125.410949124 - y: 360.753315992 - z: -31.3088780753 - - speed: 2.61944437027 - acceleration_s: 0.612627571447 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.410949124 + y: 360.753315992 + z: -31.3088780753 + theta: -1.82026439025 + kappa: -0.00110997184211 + s: 4.18352776766 + dkappa: 0 + } + v: 2.61944437027 + a: 0.612627571447 relative_time: 1.8199999332427979 - theta: -1.82026439025 - accumulated_s: 4.18352776766 -} -adc_trajectory_point { - x: -125.417554649 - y: 360.727867656 - z: -31.3087214185 - - speed: 2.61944437027 - acceleration_s: 0.50038368782 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.417554649 + y: 360.727867656 + z: -31.3087214185 + theta: -1.82032107677 + kappa: -0.00110997184211 + s: 4.20972221136 + dkappa: 0 + } + v: 2.61944437027 + a: 0.50038368782 relative_time: 1.8300001621246338 - theta: -1.82032107677 - accumulated_s: 4.20972221136 -} -adc_trajectory_point { - x: -125.424145847 - y: 360.702354047 - z: -31.308650543 - - speed: 2.63055562973 - acceleration_s: 0.549022600728 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.424145847 + y: 360.702354047 + z: -31.308650543 + theta: -1.82034991872 + kappa: -0.00110997184211 + s: 4.2360277676599996 + dkappa: 0 + } + v: 2.63055562973 + a: 0.549022600728 relative_time: 1.8400001525878906 - theta: -1.82034991872 - accumulated_s: 4.2360277676599996 -} -adc_trajectory_point { - x: -125.430732575 - y: 360.676786033 - z: -31.3086042292 - - speed: 2.63055562973 - acceleration_s: 0.529990838085 - curvature: -0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.430732575 + y: 360.676786033 + z: -31.3086042292 + theta: -1.82037338242 + kappa: -0.00110997184211 + s: 4.26233332396 + dkappa: 0 + } + v: 2.63055562973 + a: 0.529990838085 relative_time: 1.8500001430511475 - theta: -1.82037338242 - accumulated_s: 4.26233332396 -} -adc_trajectory_point { - x: -125.437348416 - y: 360.651184848 - z: -31.3085189508 - - speed: 2.63888883591 - acceleration_s: 0.454595254832 - curvature: -0.0010716967124 - curvature_change_rate: 0.00145042599683 +} +trajectory_point { + path_point { + x: -125.437348416 + y: 360.651184848 + z: -31.3085189508 + theta: -1.82047284755 + kappa: -0.0010716967124 + s: 4.28872221232 + dkappa: 0.00145042599683 + } + v: 2.63888883591 + a: 0.454595254832 relative_time: 1.8600001335144043 - theta: -1.82047284755 - accumulated_s: 4.28872221232 -} -adc_trajectory_point { - x: -125.44396724 - y: 360.625511185 - z: -31.3084344761 - - speed: 2.63888883591 - acceleration_s: 0.57201560229 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.44396724 + y: 360.625511185 + z: -31.3084344761 + theta: -1.82055572354 + kappa: -0.0010716967124 + s: 4.31511110068 + dkappa: 0 + } + v: 2.63888883591 + a: 0.57201560229 relative_time: 1.8700001239776611 - theta: -1.82055572354 - accumulated_s: 4.31511110068 -} -adc_trajectory_point { - x: -125.450578473 - y: 360.599791754 - z: -31.3083229689 - - speed: 2.65000009537 - acceleration_s: 0.50042079149 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.450578473 + y: 360.599791754 + z: -31.3083229689 + theta: -1.8206187713 + kappa: -0.0010716967124 + s: 4.34161110163 + dkappa: 0 + } + v: 2.65000009537 + a: 0.50042079149 relative_time: 1.880000114440918 - theta: -1.8206187713 - accumulated_s: 4.34161110163 -} -adc_trajectory_point { - x: -125.457161235 - y: 360.573994903 - z: -31.3082961971 - - speed: 2.65000009537 - acceleration_s: 0.608957670273 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.457161235 + y: 360.573994903 + z: -31.3082961971 + theta: -1.82066638752 + kappa: -0.0010716967124 + s: 4.36811110258 + dkappa: 0 + } + v: 2.65000009537 + a: 0.608957670273 relative_time: 1.8900001049041748 - theta: -1.82066638752 - accumulated_s: 4.36811110258 -} -adc_trajectory_point { - x: -125.457161235 - y: 360.573994903 - z: -31.3082961971 - - speed: 2.65833330154 - acceleration_s: 0.608957670273 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.457161235 + y: 360.573994903 + z: -31.3082961971 + theta: -1.82066638752 + kappa: -0.0010716967124 + s: 4.3946944356 + dkappa: 0 + } + v: 2.65833330154 + a: 0.608957670273 relative_time: 1.8900001049041748 - theta: -1.82066638752 - accumulated_s: 4.3946944356 -} -adc_trajectory_point { - x: -125.470402386 - y: 360.522259867 - z: -31.3082394749 - - speed: 2.65833330154 - acceleration_s: 0.544343023852 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.470402386 + y: 360.522259867 + z: -31.3082394749 + theta: -1.82083360771 + kappa: -0.0010716967124 + s: 4.42127776861 + dkappa: 0 + } + v: 2.65833330154 + a: 0.544343023852 relative_time: 1.9100000858306885 - theta: -1.82083360771 - accumulated_s: 4.42127776861 -} -adc_trajectory_point { - x: -125.477007638 - y: 360.496297447 - z: -31.308145876 - - speed: 2.669444561 - acceleration_s: 0.556709860971 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.477007638 + y: 360.496297447 + z: -31.308145876 + theta: -1.82089204632 + kappa: -0.0010716967124 + s: 4.44797221422 + dkappa: 0 + } + v: 2.669444561 + a: 0.556709860971 relative_time: 1.9200000762939453 - theta: -1.82089204632 - accumulated_s: 4.44797221422 -} -adc_trajectory_point { - x: -125.483641068 - y: 360.470300722 - z: -31.3080749176 - - speed: 2.669444561 - acceleration_s: 0.487942274116 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.483641068 + y: 360.470300722 + z: -31.3080749176 + theta: -1.82098793755 + kappa: -0.0010716967124 + s: 4.47466665983 + dkappa: 0 + } + v: 2.669444561 + a: 0.487942274116 relative_time: 1.9300000667572021 - theta: -1.82098793755 - accumulated_s: 4.47466665983 -} -adc_trajectory_point { - x: -125.490256914 - y: 360.444221465 - z: -31.3080387702 - - speed: 2.68055558205 - acceleration_s: 0.625656329633 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.490256914 + y: 360.444221465 + z: -31.3080387702 + theta: -1.8210536898 + kappa: -0.0010716967124 + s: 4.50147221566 + dkappa: 0 + } + v: 2.68055558205 + a: 0.625656329633 relative_time: 1.940000057220459 - theta: -1.8210536898 - accumulated_s: 4.50147221566 -} -adc_trajectory_point { - x: -125.490256914 - y: 360.444221465 - z: -31.3080387702 - - speed: 2.68055558205 - acceleration_s: 0.625656329633 - curvature: -0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.490256914 + y: 360.444221465 + z: -31.3080387702 + theta: -1.8210536898 + kappa: -0.0010716967124 + s: 4.52827777148 + dkappa: 0 + } + v: 2.68055558205 + a: 0.625656329633 relative_time: 1.940000057220459 - theta: -1.8210536898 - accumulated_s: 4.52827777148 -} -adc_trajectory_point { - x: -125.503575954 - y: 360.391941462 - z: -31.3079471681 - - speed: 2.68888878822 - acceleration_s: 0.540887660129 - curvature: -0.00103342160821 - curvature_change_rate: 0.00142345434168 +} +trajectory_point { + path_point { + x: -125.503575954 + y: 360.391941462 + z: -31.3079471681 + theta: -1.82117825628 + kappa: -0.00103342160821 + s: 4.55516665936 + dkappa: 0.00142345434168 + } + v: 2.68888878822 + a: 0.540887660129 relative_time: 1.9600000381469727 - theta: -1.82117825628 - accumulated_s: 4.55516665936 -} -adc_trajectory_point { - x: -125.510265055 - y: 360.365728364 - z: -31.3078916818 - - speed: 2.68888878822 - acceleration_s: 0.521835524634 - curvature: -0.00103342160821 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.510265055 + y: 360.365728364 + z: -31.3078916818 + theta: -1.82125000892 + kappa: -0.00103342160821 + s: 4.58205554724 + dkappa: 0 + } + v: 2.68888878822 + a: 0.521835524634 relative_time: 1.9700000286102295 - theta: -1.82125000892 - accumulated_s: 4.58205554724 -} -adc_trajectory_point { - x: -125.516998125 - y: 360.339492042 - z: -31.3078431217 - - speed: 2.70000004768 - acceleration_s: 0.444248635123 - curvature: -0.0009951465286 - curvature_change_rate: 0.00141759551589 +} +trajectory_point { + path_point { + x: -125.516998125 + y: 360.339492042 + z: -31.3078431217 + theta: -1.82132353561 + kappa: -0.0009951465286 + s: 4.60905554772 + dkappa: 0.00141759551589 + } + v: 2.70000004768 + a: 0.444248635123 relative_time: 1.9800000190734863 - theta: -1.82132353561 - accumulated_s: 4.60905554772 -} -adc_trajectory_point { - x: -125.523724383 - y: 360.313171053 - z: -31.3077099975 - - speed: 2.70000004768 - acceleration_s: 0.566921838707 - curvature: -0.0009951465286 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.523724383 + y: 360.313171053 + z: -31.3077099975 + theta: -1.82134145734 + kappa: -0.0009951465286 + s: 4.63605554819 + dkappa: 0 + } + v: 2.70000004768 + a: 0.566921838707 relative_time: 1.9900000095367432 - theta: -1.82134145734 - accumulated_s: 4.63605554819 -} -adc_trajectory_point { - x: -125.530534332 - y: 360.286794019 - z: -31.3076497242 - - speed: 2.71111106873 - acceleration_s: 0.566921838707 - curvature: -0.000956871472678 - curvature_change_rate: 0.00141178487166 +} +trajectory_point { + path_point { + x: -125.530534332 + y: 360.286794019 + z: -31.3076497242 + theta: -1.82141192096 + kappa: -0.000956871472678 + s: 4.66316665888 + dkappa: 0.00141178487166 + } + v: 2.71111106873 + a: 0.566921838707 relative_time: 2 - theta: -1.82141192096 - accumulated_s: 4.66316665888 -} -adc_trajectory_point { - x: -125.537331069 - y: 360.260350394 - z: -31.3075449867 - - speed: 2.71111106873 - acceleration_s: 0.676986950806 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.537331069 + y: 360.260350394 + z: -31.3075449867 + theta: -1.82141578788 + kappa: -0.000956871472678 + s: 4.69027776957 + dkappa: 0 + } + v: 2.71111106873 + a: 0.676986950806 relative_time: 2.0099999904632568 - theta: -1.82141578788 - accumulated_s: 4.69027776957 -} -adc_trajectory_point { - x: -125.544198795 - y: 360.233849652 - z: -31.3075140547 - - speed: 2.7277777195 - acceleration_s: 0.754657111552 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.544198795 + y: 360.233849652 + z: -31.3075140547 + theta: -1.82147078752 + kappa: -0.000956871472678 + s: 4.71755554676 + dkappa: 0 + } + v: 2.7277777195 + a: 0.754657111552 relative_time: 2.0199999809265137 - theta: -1.82147078752 - accumulated_s: 4.71755554676 -} -adc_trajectory_point { - x: -125.551075619 - y: 360.207305452 - z: -31.3074306911 - - speed: 2.7277777195 - acceleration_s: 0.599208098093 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.551075619 + y: 360.207305452 + z: -31.3074306911 + theta: -1.82148683338 + kappa: -0.000956871472678 + s: 4.74483332396 + dkappa: 0 + } + v: 2.7277777195 + a: 0.599208098093 relative_time: 2.0299999713897705 - theta: -1.82148683338 - accumulated_s: 4.74483332396 -} -adc_trajectory_point { - x: -125.557972773 - y: 360.180711174 - z: -31.3073444497 - - speed: 2.74444437027 - acceleration_s: 0.527593004511 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.557972773 + y: 360.180711174 + z: -31.3073444497 + theta: -1.82152201956 + kappa: -0.000956871472678 + s: 4.77227776766 + dkappa: 0 + } + v: 2.74444437027 + a: 0.527593004511 relative_time: 2.0399999618530273 - theta: -1.82152201956 - accumulated_s: 4.77227776766 -} -adc_trajectory_point { - x: -125.564913014 - y: 360.154044359 - z: -31.3072374249 - - speed: 2.74444437027 - acceleration_s: 0.527593004511 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.564913014 + y: 360.154044359 + z: -31.3072374249 + theta: -1.82154290335 + kappa: -0.000956871472678 + s: 4.79972221136 + dkappa: 0 + } + v: 2.74444437027 + a: 0.527593004511 relative_time: 2.0499999523162842 - theta: -1.82154290335 - accumulated_s: 4.79972221136 -} -adc_trajectory_point { - x: -125.571844636 - y: 360.12733583 - z: -31.3071987871 - - speed: 2.75555562973 - acceleration_s: 0.551526740126 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.571844636 + y: 360.12733583 + z: -31.3071987871 + theta: -1.8215456165 + kappa: -0.000956871472678 + s: 4.82727776766 + dkappa: 0 + } + v: 2.75555562973 + a: 0.551526740126 relative_time: 2.059999942779541 - theta: -1.8215456165 - accumulated_s: 4.82727776766 -} -adc_trajectory_point { - x: -125.578797905 - y: 360.100558146 - z: -31.3072172794 - - speed: 2.75555562973 - acceleration_s: 0.629940975765 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.578797905 + y: 360.100558146 + z: -31.3072172794 + theta: -1.8215810715 + kappa: -0.000956871472678 + s: 4.85483332396 + dkappa: 0 + } + v: 2.75555562973 + a: 0.629940975765 relative_time: 2.0699999332427979 - theta: -1.8215810715 - accumulated_s: 4.85483332396 -} -adc_trajectory_point { - x: -125.585730295 - y: 360.073723491 - z: -31.3071709732 - - speed: 2.76111102104 - acceleration_s: 0.573687721139 - curvature: -0.000918596439528 - curvature_change_rate: 0.00138621854965 +} +trajectory_point { + path_point { + x: -125.585730295 + y: 360.073723491 + z: -31.3071709732 + theta: -1.82154201657 + kappa: -0.000918596439528 + s: 4.88244443417 + dkappa: 0.00138621854965 + } + v: 2.76111102104 + a: 0.573687721139 relative_time: 2.0800001621246338 - theta: -1.82154201657 - accumulated_s: 4.88244443417 -} -adc_trajectory_point { - x: -125.592715537 - y: 360.046865102 - z: -31.3070287984 - - speed: 2.76111102104 - acceleration_s: 0.397963546236 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.592715537 + y: 360.046865102 + z: -31.3070287984 + theta: -1.8215838674 + kappa: -0.000918596439528 + s: 4.91005554438 + dkappa: 0 + } + v: 2.76111102104 + a: 0.397963546236 relative_time: 2.0900001525878906 - theta: -1.8215838674 - accumulated_s: 4.91005554438 -} -adc_trajectory_point { - x: -125.592715537 - y: 360.046865102 - z: -31.3070287984 - - speed: 2.76944446564 - acceleration_s: 0.397963546236 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.592715537 + y: 360.046865102 + z: -31.3070287984 + theta: -1.8215838674 + kappa: -0.000918596439528 + s: 4.93774998904 + dkappa: 0 + } + v: 2.76944446564 + a: 0.397963546236 relative_time: 2.0900001525878906 - theta: -1.8215838674 - accumulated_s: 4.93774998904 -} -adc_trajectory_point { - x: -125.606705452 - y: 359.992944077 - z: -31.3069257466 - - speed: 2.76944446564 - acceleration_s: 0.605243806601 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.606705452 + y: 359.992944077 + z: -31.3069257466 + theta: -1.82160243601 + kappa: -0.000918596439528 + s: 4.96544443369 + dkappa: 0 + } + v: 2.76944446564 + a: 0.605243806601 relative_time: 2.1100001335144043 - theta: -1.82160243601 - accumulated_s: 4.96544443369 -} -adc_trajectory_point { - x: -125.613715656 - y: 359.965900791 - z: -31.3069158401 - - speed: 2.77777767181 - acceleration_s: 0.587333040131 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.613715656 + y: 359.965900791 + z: -31.3069158401 + theta: -1.82163078158 + kappa: -0.000918596439528 + s: 4.99322221041 + dkappa: 0 + } + v: 2.77777767181 + a: 0.587333040131 relative_time: 2.1200001239776611 - theta: -1.82163078158 - accumulated_s: 4.99322221041 -} -adc_trajectory_point { - x: -125.620781546 - y: 359.938791968 - z: -31.3069237191 - - speed: 2.77777767181 - acceleration_s: 0.727187893866 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.620781546 + y: 359.938791968 + z: -31.3069237191 + theta: -1.82167773656 + kappa: -0.000918596439528 + s: 5.02099998713 + dkappa: 0 + } + v: 2.77777767181 + a: 0.727187893866 relative_time: 2.130000114440918 - theta: -1.82167773656 - accumulated_s: 5.02099998713 -} -adc_trajectory_point { - x: -125.627850631 - y: 359.911634144 - z: -31.306826652 - - speed: 2.79166674614 - acceleration_s: 0.549840667398 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.627850631 + y: 359.911634144 + z: -31.306826652 + theta: -1.82168810328 + kappa: -0.000918596439528 + s: 5.04891665459 + dkappa: 0 + } + v: 2.79166674614 + a: 0.549840667398 relative_time: 2.1400001049041748 - theta: -1.82168810328 - accumulated_s: 5.04891665459 -} -adc_trajectory_point { - x: -125.634956433 - y: 359.884418464 - z: -31.3067896031 - - speed: 2.79166674614 - acceleration_s: 0.549840667398 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.634956433 + y: 359.884418464 + z: -31.3067896031 + theta: -1.82171289445 + kappa: -0.000918596439528 + s: 5.07683332205 + dkappa: 0 + } + v: 2.79166674614 + a: 0.549840667398 relative_time: 2.1500000953674316 - theta: -1.82171289445 - accumulated_s: 5.07683332205 -} -adc_trajectory_point { - x: -125.642046141 - y: 359.857149366 - z: -31.3068400882 - - speed: 2.80555558205 - acceleration_s: 0.542085416321 - curvature: -0.000880321428239 - curvature_change_rate: 0.00136425781524 +} +trajectory_point { + path_point { + x: -125.642046141 + y: 359.857149366 + z: -31.3068400882 + theta: -1.8216935938 + kappa: -0.000880321428239 + s: 5.10488887787 + dkappa: 0.00136425781524 + } + v: 2.80555558205 + a: 0.542085416321 relative_time: 2.1600000858306885 - theta: -1.8216935938 - accumulated_s: 5.10488887787 -} -adc_trajectory_point { - x: -125.649150332 - y: 359.829835747 - z: -31.3069122797 - - speed: 2.80555558205 - acceleration_s: 0.477439146887 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.649150332 + y: 359.829835747 + z: -31.3069122797 + theta: -1.82170121117 + kappa: -0.000880321428239 + s: 5.13294443369 + dkappa: 0 + } + v: 2.80555558205 + a: 0.477439146887 relative_time: 2.1700000762939453 - theta: -1.82170121117 - accumulated_s: 5.13294443369 -} -adc_trajectory_point { - x: -125.656310653 - y: 359.802464583 - z: -31.3069347879 - - speed: 2.81944441795 - acceleration_s: 0.573332582413 - curvature: -0.0008420464379 - curvature_change_rate: 0.0013575366159 +} +trajectory_point { + path_point { + x: -125.656310653 + y: 359.802464583 + z: -31.3069347879 + theta: -1.82174094854 + kappa: -0.0008420464379 + s: 5.16113887787 + dkappa: 0.0013575366159 + } + v: 2.81944441795 + a: 0.573332582413 relative_time: 2.1800000667572021 - theta: -1.82174094854 - accumulated_s: 5.16113887787 -} -adc_trajectory_point { - x: -125.6634802 - y: 359.775052215 - z: -31.306938665 - - speed: 2.81944441795 - acceleration_s: 0.480953550981 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.6634802 + y: 359.775052215 + z: -31.306938665 + theta: -1.82174518821 + kappa: -0.0008420464379 + s: 5.18933332205 + dkappa: 0 + } + v: 2.81944441795 + a: 0.480953550981 relative_time: 2.190000057220459 - theta: -1.82174518821 - accumulated_s: 5.18933332205 -} -adc_trajectory_point { - x: -125.6634802 - y: 359.775052215 - z: -31.306938665 - - speed: 2.82777786255 - acceleration_s: 0.480953550981 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.6634802 + y: 359.775052215 + z: -31.306938665 + theta: -1.82174518821 + kappa: -0.0008420464379 + s: 5.21761110068 + dkappa: 0 + } + v: 2.82777786255 + a: 0.480953550981 relative_time: 2.190000057220459 - theta: -1.82174518821 - accumulated_s: 5.21761110068 -} -adc_trajectory_point { - x: -125.677938723 - y: 359.720041327 - z: -31.3069625562 - - speed: 2.82777786255 - acceleration_s: 0.601637167889 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.677938723 + y: 359.720041327 + z: -31.3069625562 + theta: -1.82184178694 + kappa: -0.0008420464379 + s: 5.2458888793 + dkappa: 0 + } + v: 2.82777786255 + a: 0.601637167889 relative_time: 2.2100000381469727 - theta: -1.82184178694 - accumulated_s: 5.2458888793 -} -adc_trajectory_point { - x: -125.685189377 - y: 359.692458234 - z: -31.306962071 - - speed: 2.83888888359 - acceleration_s: 0.55047200077 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.685189377 + y: 359.692458234 + z: -31.306962071 + theta: -1.82188540617 + kappa: -0.0008420464379 + s: 5.27427776814 + dkappa: 0 + } + v: 2.83888888359 + a: 0.55047200077 relative_time: 2.2200000286102295 - theta: -1.82188540617 - accumulated_s: 5.27427776814 -} -adc_trajectory_point { - x: -125.692474208 - y: 359.664814508 - z: -31.3069400685 - - speed: 2.83888888359 - acceleration_s: 0.60241470639 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.692474208 + y: 359.664814508 + z: -31.3069400685 + theta: -1.82190412116 + kappa: -0.0008420464379 + s: 5.30266665697 + dkappa: 0 + } + v: 2.83888888359 + a: 0.60241470639 relative_time: 2.2300000190734863 - theta: -1.82190412116 - accumulated_s: 5.30266665697 -} -adc_trajectory_point { - x: -125.699781684 - y: 359.637138023 - z: -31.3068766557 - - speed: 2.8527777195 - acceleration_s: 0.49892409539 - curvature: -0.000803771467601 - curvature_change_rate: 0.00134167376721 +} +trajectory_point { + path_point { + x: -125.699781684 + y: 359.637138023 + z: -31.3068766557 + theta: -1.82193041081 + kappa: -0.000803771467601 + s: 5.33119443417 + dkappa: 0.00134167376721 + } + v: 2.8527777195 + a: 0.49892409539 relative_time: 2.2400000095367432 - theta: -1.82193041081 - accumulated_s: 5.33119443417 -} -adc_trajectory_point { - x: -125.699781684 - y: 359.637138023 - z: -31.3068766557 - - speed: 2.8527777195 - acceleration_s: 0.49892409539 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.699781684 + y: 359.637138023 + z: -31.3068766557 + theta: -1.82193041081 + kappa: -0.000803771467601 + s: 5.35972221136 + dkappa: 0 + } + v: 2.8527777195 + a: 0.49892409539 relative_time: 2.2400000095367432 - theta: -1.82193041081 - accumulated_s: 5.35972221136 -} -adc_trajectory_point { - x: -125.714498953 - y: 359.581639177 - z: -31.3068493977 - - speed: 2.8666665554 - acceleration_s: 0.529323722547 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.714498953 + y: 359.581639177 + z: -31.3068493977 + theta: -1.82201650974 + kappa: -0.000803771467601 + s: 5.38838887692 + dkappa: 0 + } + v: 2.8666665554 + a: 0.529323722547 relative_time: 2.2599999904632568 - theta: -1.82201650974 - accumulated_s: 5.38838887692 -} -adc_trajectory_point { - x: -125.721916183 - y: 359.553844569 - z: -31.3067936711 - - speed: 2.8666665554 - acceleration_s: 0.424356121029 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.721916183 + y: 359.553844569 + z: -31.3067936711 + theta: -1.82212695848 + kappa: -0.000803771467601 + s: 5.41705554247 + dkappa: 0 + } + v: 2.8666665554 + a: 0.424356121029 relative_time: 2.2699999809265137 - theta: -1.82212695848 - accumulated_s: 5.41705554247 -} -adc_trajectory_point { - x: -125.729314593 - y: 359.525979479 - z: -31.3067365438 - - speed: 2.87777781487 - acceleration_s: 0.517916540761 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.729314593 + y: 359.525979479 + z: -31.3067365438 + theta: -1.82216632841 + kappa: -0.000803771467601 + s: 5.44583332062 + dkappa: 0 + } + v: 2.87777781487 + a: 0.517916540761 relative_time: 2.2799999713897705 - theta: -1.82216632841 - accumulated_s: 5.44583332062 -} -adc_trajectory_point { - x: -125.736735465 - y: 359.498089687 - z: -31.3066623844 - - speed: 2.87777781487 - acceleration_s: 0.393867359235 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.736735465 + y: 359.498089687 + z: -31.3066623844 + theta: -1.82219917945 + kappa: -0.000803771467601 + s: 5.47461109877 + dkappa: 0 + } + v: 2.87777781487 + a: 0.393867359235 relative_time: 2.2899999618530273 - theta: -1.82219917945 - accumulated_s: 5.47461109877 -} -adc_trajectory_point { - x: -125.744185916 - y: 359.470141154 - z: -31.3065668559 - - speed: 2.88611102104 - acceleration_s: 0.393867359235 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.744185916 + y: 359.470141154 + z: -31.3065668559 + theta: -1.82227869211 + kappa: -0.000803771467601 + s: 5.50347220898 + dkappa: 0 + } + v: 2.88611102104 + a: 0.393867359235 relative_time: 2.2999999523162842 - theta: -1.82227869211 - accumulated_s: 5.50347220898 -} -adc_trajectory_point { - x: -125.751645886 - y: 359.442144392 - z: -31.3064575428 - - speed: 2.88611102104 - acceleration_s: 0.498139004173 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.751645886 + y: 359.442144392 + z: -31.3064575428 + theta: -1.82232656535 + kappa: -0.000803771467601 + s: 5.53233331919 + dkappa: 0 + } + v: 2.88611102104 + a: 0.498139004173 relative_time: 2.309999942779541 - theta: -1.82232656535 - accumulated_s: 5.53233331919 -} -adc_trajectory_point { - x: -125.759104292 - y: 359.414105887 - z: -31.3063270031 - - speed: 2.89444446564 - acceleration_s: 0.471227514218 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.759104292 + y: 359.414105887 + z: -31.3063270031 + theta: -1.82237573828 + kappa: -0.000803771467601 + s: 5.56127776385 + dkappa: 0 + } + v: 2.89444446564 + a: 0.471227514218 relative_time: 2.3199999332427979 - theta: -1.82237573828 - accumulated_s: 5.56127776385 -} -adc_trajectory_point { - x: -125.766606147 - y: 359.386024285 - z: -31.3062000703 - - speed: 2.89444446564 - acceleration_s: 0.525454236397 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.766606147 + y: 359.386024285 + z: -31.3062000703 + theta: -1.82246275229 + kappa: -0.000803771467601 + s: 5.5902222085 + dkappa: 0 + } + v: 2.89444446564 + a: 0.525454236397 relative_time: 2.3300001621246338 - theta: -1.82246275229 - accumulated_s: 5.5902222085 -} -adc_trajectory_point { - x: -125.774096612 - y: 359.357892469 - z: -31.306101134 - - speed: 2.90555548668 - acceleration_s: 0.477311863712 - curvature: -0.00076549651643 - curvature_change_rate: 0.00131730236598 +} +trajectory_point { + path_point { + x: -125.774096612 + y: 359.357892469 + z: -31.306101134 + theta: -1.82250837147 + kappa: -0.00076549651643 + s: 5.61927776337 + dkappa: 0.00131730236598 + } + v: 2.90555548668 + a: 0.477311863712 relative_time: 2.3400001525878906 - theta: -1.82250837147 - accumulated_s: 5.61927776337 -} -adc_trajectory_point { - x: -125.781569154 - y: 359.329721161 - z: -31.3060243241 - - speed: 2.90555548668 - acceleration_s: 0.477311863712 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.781569154 + y: 359.329721161 + z: -31.3060243241 + theta: -1.82254222458 + kappa: -0.00076549651643 + s: 5.64833331824 + dkappa: 0 + } + v: 2.90555548668 + a: 0.477311863712 relative_time: 2.3500001430511475 - theta: -1.82254222458 - accumulated_s: 5.64833331824 -} -adc_trajectory_point { - x: -125.789073629 - y: 359.301495396 - z: -31.3059554296 - - speed: 2.91388893127 - acceleration_s: 0.487612504816 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.789073629 + y: 359.301495396 + z: -31.3059554296 + theta: -1.82258890477 + kappa: -0.00076549651643 + s: 5.67747220755 + dkappa: 0 + } + v: 2.91388893127 + a: 0.487612504816 relative_time: 2.3600001335144043 - theta: -1.82258890477 - accumulated_s: 5.67747220755 -} -adc_trajectory_point { - x: -125.79657766 - y: 359.273239694 - z: -31.3059446588 - - speed: 2.91388893127 - acceleration_s: 0.408425345148 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.79657766 + y: 359.273239694 + z: -31.3059446588 + theta: -1.82264715603 + kappa: -0.00076549651643 + s: 5.70661109686 + dkappa: 0 + } + v: 2.91388893127 + a: 0.408425345148 relative_time: 2.3700001239776611 - theta: -1.82264715603 - accumulated_s: 5.70661109686 -} -adc_trajectory_point { - x: -125.804100799 - y: 359.244941955 - z: -31.3059203699 - - speed: 2.92222213745 - acceleration_s: 0.431552034778 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.804100799 + y: 359.244941955 + z: -31.3059203699 + theta: -1.82272320719 + kappa: -0.00076549651643 + s: 5.73583331824 + dkappa: 0 + } + v: 2.92222213745 + a: 0.431552034778 relative_time: 2.380000114440918 - theta: -1.82272320719 - accumulated_s: 5.73583331824 -} -adc_trajectory_point { - x: -125.811639623 - y: 359.216596273 - z: -31.3058855822 - - speed: 2.92222213745 - acceleration_s: 0.414205557226 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.811639623 + y: 359.216596273 + z: -31.3058855822 + theta: -1.82277593601 + kappa: -0.00076549651643 + s: 5.76505553961 + dkappa: 0 + } + v: 2.92222213745 + a: 0.414205557226 relative_time: 2.3900001049041748 - theta: -1.82277593601 - accumulated_s: 5.76505553961 -} -adc_trajectory_point { - x: -125.811639623 - y: 359.216596273 - z: -31.3058855822 - - speed: 2.93055558205 - acceleration_s: 0.414205557226 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.811639623 + y: 359.216596273 + z: -31.3058855822 + theta: -1.82277593601 + kappa: -0.00076549651643 + s: 5.79436109543 + dkappa: 0 + } + v: 2.93055558205 + a: 0.414205557226 relative_time: 2.3900001049041748 - theta: -1.82277593601 - accumulated_s: 5.79436109543 -} -adc_trajectory_point { - x: -125.826727703 - y: 359.159788805 - z: -31.3060976537 - - speed: 2.93055558205 - acceleration_s: 0.41204758658 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.826727703 + y: 359.159788805 + z: -31.3060976537 + theta: -1.82286203351 + kappa: -0.00076549651643 + s: 5.82366665125 + dkappa: 0 + } + v: 2.93055558205 + a: 0.41204758658 relative_time: 2.4100000858306885 - theta: -1.82286203351 - accumulated_s: 5.82366665125 -} -adc_trajectory_point { - x: -125.834298586 - y: 359.131348113 - z: -31.3061702913 - - speed: 2.94166660309 - acceleration_s: 0.29872526349 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.834298586 + y: 359.131348113 + z: -31.3061702913 + theta: -1.82291701216 + kappa: -0.00076549651643 + s: 5.85308331728 + dkappa: 0 + } + v: 2.94166660309 + a: 0.29872526349 relative_time: 2.4200000762939453 - theta: -1.82291701216 - accumulated_s: 5.85308331728 -} -adc_trajectory_point { - x: -125.841885547 - y: 359.102839577 - z: -31.3061969932 - - speed: 2.94166660309 - acceleration_s: 0.444027572803 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.841885547 + y: 359.102839577 + z: -31.3061969932 + theta: -1.82294408081 + kappa: -0.00076549651643 + s: 5.88249998331 + dkappa: 0 + } + v: 2.94166660309 + a: 0.444027572803 relative_time: 2.4300000667572021 - theta: -1.82294408081 - accumulated_s: 5.88249998331 -} -adc_trajectory_point { - x: -125.849468747 - y: 359.074320163 - z: -31.3063632268 - - speed: 2.95000004768 - acceleration_s: 0.30117113011 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.849468747 + y: 359.074320163 + z: -31.3063632268 + theta: -1.82294981809 + kappa: -0.00076549651643 + s: 5.91199998379 + dkappa: 0 + } + v: 2.95000004768 + a: 0.30117113011 relative_time: 2.440000057220459 - theta: -1.82294981809 - accumulated_s: 5.91199998379 -} -adc_trajectory_point { - x: -125.849468747 - y: 359.074320163 - z: -31.3063632268 - - speed: 2.95000004768 - acceleration_s: 0.30117113011 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.849468747 + y: 359.074320163 + z: -31.3063632268 + theta: -1.82294981809 + kappa: -0.00076549651643 + s: 5.94149998427 + dkappa: 0 + } + v: 2.95000004768 + a: 0.30117113011 relative_time: 2.440000057220459 - theta: -1.82294981809 - accumulated_s: 5.94149998427 -} -adc_trajectory_point { - x: -125.86470335 - y: 359.017140009 - z: -31.3069306035 - - speed: 2.95833325386 - acceleration_s: 0.367564584601 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.86470335 + y: 359.017140009 + z: -31.3069306035 + theta: -1.82300808145 + kappa: -0.00076549651643 + s: 5.97108331681 + dkappa: 0 + } + v: 2.95833325386 + a: 0.367564584601 relative_time: 2.4600000381469727 - theta: -1.82300808145 - accumulated_s: 5.97108331681 -} -adc_trajectory_point { - x: -125.872341557 - y: 358.988489067 - z: -31.307096309 - - speed: 2.95833325386 - acceleration_s: 0.360293941012 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.872341557 + y: 358.988489067 + z: -31.307096309 + theta: -1.82302397094 + kappa: -0.00076549651643 + s: 6.00066664934 + dkappa: 0 + } + v: 2.95833325386 + a: 0.360293941012 relative_time: 2.4700000286102295 - theta: -1.82302397094 - accumulated_s: 6.00066664934 -} -adc_trajectory_point { - x: -125.880037888 - y: 358.959804402 - z: -31.3073657053 - - speed: 2.96944451332 - acceleration_s: 0.460884138127 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.880037888 + y: 358.959804402 + z: -31.3073657053 + theta: -1.82306031579 + kappa: -0.00076549651643 + s: 6.03036109448 + dkappa: 0 + } + v: 2.96944451332 + a: 0.460884138127 relative_time: 2.4800000190734863 - theta: -1.82306031579 - accumulated_s: 6.03036109448 -} -adc_trajectory_point { - x: -125.887745816 - y: 358.931108792 - z: -31.3077072827 - - speed: 2.96944451332 - acceleration_s: 0.321661981102 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.887745816 + y: 358.931108792 + z: -31.3077072827 + theta: -1.8230438854 + kappa: -0.00076549651643 + s: 6.06005553961 + dkappa: 0 + } + v: 2.96944451332 + a: 0.321661981102 relative_time: 2.4900000095367432 - theta: -1.8230438854 - accumulated_s: 6.06005553961 -} -adc_trajectory_point { - x: -125.895517405 - y: 358.902351345 - z: -31.3080882411 - - speed: 2.98055553436 - acceleration_s: 0.321661981102 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.895517405 + y: 358.902351345 + z: -31.3080882411 + theta: -1.82307959727 + kappa: -0.00076549651643 + s: 6.08986109495 + dkappa: 0 + } + v: 2.98055553436 + a: 0.321661981102 relative_time: 2.5 - theta: -1.82307959727 - accumulated_s: 6.08986109495 -} -adc_trajectory_point { - x: -125.903316693 - y: 358.873560525 - z: -31.3085163888 - - speed: 2.98055553436 - acceleration_s: 0.464730193548 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.903316693 + y: 358.873560525 + z: -31.3085163888 + theta: -1.82307001711 + kappa: -0.00076549651643 + s: 6.1196666503 + dkappa: 0 + } + v: 2.98055553436 + a: 0.464730193548 relative_time: 2.5099999904632568 - theta: -1.82307001711 - accumulated_s: 6.1196666503 -} -adc_trajectory_point { - x: -125.911163585 - y: 358.844739997 - z: -31.3088300247 - - speed: 2.99444437027 - acceleration_s: 0.383093978266 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.911163585 + y: 358.844739997 + z: -31.3088300247 + theta: -1.82308327876 + kappa: -0.00076549651643 + s: 6.149611094 + dkappa: 0 + } + v: 2.99444437027 + a: 0.383093978266 relative_time: 2.5199999809265137 - theta: -1.82308327876 - accumulated_s: 6.149611094 -} -adc_trajectory_point { - x: -125.919032533 - y: 358.815868283 - z: -31.3091887236 - - speed: 2.99444437027 - acceleration_s: 0.491155818915 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.919032533 + y: 358.815868283 + z: -31.3091887236 + theta: -1.82308549865 + kappa: -0.00076549651643 + s: 6.1795555377 + dkappa: 0 + } + v: 2.99444437027 + a: 0.491155818915 relative_time: 2.5299999713897705 - theta: -1.82308549865 - accumulated_s: 6.1795555377 -} -adc_trajectory_point { - x: -125.926896637 - y: 358.786987422 - z: -31.3095703563 - - speed: 3.0083334446 - acceleration_s: 0.303688481265 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.926896637 + y: 358.786987422 + z: -31.3095703563 + theta: -1.82305372126 + kappa: -0.00076549651643 + s: 6.20963887215 + dkappa: 0 + } + v: 3.0083334446 + a: 0.303688481265 relative_time: 2.5399999618530273 - theta: -1.82305372126 - accumulated_s: 6.20963887215 -} -adc_trajectory_point { - x: -125.934788487 - y: 358.75803987 - z: -31.309997268 - - speed: 3.0083334446 - acceleration_s: 0.470811416377 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.934788487 + y: 358.75803987 + z: -31.309997268 + theta: -1.82305385113 + kappa: -0.00076549651643 + s: 6.2397222066 + dkappa: 0 + } + v: 3.0083334446 + a: 0.470811416377 relative_time: 2.5499999523162842 - theta: -1.82305385113 - accumulated_s: 6.2397222066 -} -adc_trajectory_point { - x: -125.942672155 - y: 358.72905105 - z: -31.3104813183 - - speed: 3.0083334446 - acceleration_s: 0.496127967555 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.942672155 + y: 358.72905105 + z: -31.3104813183 + theta: -1.82307027028 + kappa: -0.00076549651643 + s: 6.26980554104 + dkappa: 0 + } + v: 3.0083334446 + a: 0.496127967555 relative_time: 2.559999942779541 - theta: -1.82307027028 - accumulated_s: 6.26980554104 -} -adc_trajectory_point { - x: -125.950557125 - y: 358.70001789 - z: -31.3108385755 - - speed: 3.0222222805 - acceleration_s: 0.459179381124 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.950557125 + y: 358.70001789 + z: -31.3108385755 + theta: -1.82309299541 + kappa: -0.00076549651643 + s: 6.30002776385 + dkappa: 0 + } + v: 3.0222222805 + a: 0.459179381124 relative_time: 2.5699999332427979 - theta: -1.82309299541 - accumulated_s: 6.30002776385 -} -adc_trajectory_point { - x: -125.958427402 - y: 358.670924304 - z: -31.3112333706 - - speed: 3.0222222805 - acceleration_s: 0.459677400509 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.958427402 + y: 358.670924304 + z: -31.3112333706 + theta: -1.82311852637 + kappa: -0.00076549651643 + s: 6.33024998665 + dkappa: 0 + } + v: 3.0222222805 + a: 0.459677400509 relative_time: 2.5800001621246338 - theta: -1.82311852637 - accumulated_s: 6.33024998665 -} -adc_trajectory_point { - x: -125.966273613 - y: 358.641808143 - z: -31.3115684483 - - speed: 3.03333330154 - acceleration_s: 0.459677400509 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.966273613 + y: 358.641808143 + z: -31.3115684483 + theta: -1.8231428439 + kappa: -0.00076549651643 + s: 6.36058331967 + dkappa: 0 + } + v: 3.03333330154 + a: 0.459677400509 relative_time: 2.5900001525878906 - theta: -1.8231428439 - accumulated_s: 6.36058331967 -} -adc_trajectory_point { - x: -125.974084814 - y: 358.612648583 - z: -31.312040519 - - speed: 3.03333330154 - acceleration_s: 0.319544190721 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.974084814 + y: 358.612648583 + z: -31.312040519 + theta: -1.82318429305 + kappa: -0.00076549651643 + s: 6.39091665268 + dkappa: 0 + } + v: 3.03333330154 + a: 0.319544190721 relative_time: 2.6000001430511475 - theta: -1.82318429305 - accumulated_s: 6.39091665268 -} -adc_trajectory_point { - x: -125.981874503 - y: 358.583403985 - z: -31.3123099208 - - speed: 3.044444561 - acceleration_s: 0.499313586165 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.981874503 + y: 358.583403985 + z: -31.3123099208 + theta: -1.82320408035 + kappa: -0.00076549651643 + s: 6.42136109829 + dkappa: 0 + } + v: 3.044444561 + a: 0.499313586165 relative_time: 2.6100001335144043 - theta: -1.82320408035 - accumulated_s: 6.42136109829 -} -adc_trajectory_point { - x: -125.989619091 - y: 358.554155402 - z: -31.3126276666 - - speed: 3.04999995232 - acceleration_s: 0.320399732615 - curvature: -0.000803771467601 - curvature_change_rate: -0.00125491645145 +} +trajectory_point { + path_point { + x: -125.989619091 + y: 358.554155402 + z: -31.3126276666 + theta: -1.82323937864 + kappa: -0.000803771467601 + s: 6.45186109782 + dkappa: -0.00125491645145 + } + v: 3.04999995232 + a: 0.320399732615 relative_time: 2.6200001239776611 - theta: -1.82323937864 - accumulated_s: 6.45186109782 -} -adc_trajectory_point { - x: -125.997444216 - y: 358.524857352 - z: -31.3129913248 - - speed: 3.04999995232 - acceleration_s: 0.469653036493 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -125.997444216 + y: 358.524857352 + z: -31.3129913248 + theta: -1.82335120105 + kappa: -0.000803771467601 + s: 6.48236109734 + dkappa: 0 + } + v: 3.04999995232 + a: 0.469653036493 relative_time: 2.630000114440918 - theta: -1.82335120105 - accumulated_s: 6.48236109734 -} -adc_trajectory_point { - x: -126.005200698 - y: 358.495540045 - z: -31.3134962507 - - speed: 3.05833339691 - acceleration_s: 0.311313962184 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.005200698 + y: 358.495540045 + z: -31.3134962507 + theta: -1.8233994009 + kappa: -0.000803771467601 + s: 6.51294443131 + dkappa: 0 + } + v: 3.05833339691 + a: 0.311313962184 relative_time: 2.6400001049041748 - theta: -1.8233994009 - accumulated_s: 6.51294443131 -} -adc_trajectory_point { - x: -126.012948537 - y: 358.466132741 - z: -31.3138230573 - - speed: 3.05833339691 - acceleration_s: 0.454018653915 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.012948537 + y: 358.466132741 + z: -31.3138230573 + theta: -1.82343280294 + kappa: -0.000803771467601 + s: 6.54352776528 + dkappa: 0 + } + v: 3.05833339691 + a: 0.454018653915 relative_time: 2.6500000953674316 - theta: -1.82343280294 - accumulated_s: 6.54352776528 -} -adc_trajectory_point { - x: -126.020727633 - y: 358.436689224 - z: -31.3139888011 - - speed: 3.06388878822 - acceleration_s: 0.443531903069 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.020727633 + y: 358.436689224 + z: -31.3139888011 + theta: -1.82345385402 + kappa: -0.000803771467601 + s: 6.5741666531600007 + dkappa: 0 + } + v: 3.06388878822 + a: 0.443531903069 relative_time: 2.6600000858306885 - theta: -1.82345385402 - accumulated_s: 6.5741666531600007 -} -adc_trajectory_point { - x: -126.028530638 - y: 358.407219537 - z: -31.3142265771 - - speed: 3.06388878822 - acceleration_s: 0.413639588279 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.028530638 + y: 358.407219537 + z: -31.3142265771 + theta: -1.82349320987 + kappa: -0.000803771467601 + s: 6.6048055410399993 + dkappa: 0 + } + v: 3.06388878822 + a: 0.413639588279 relative_time: 2.6700000762939453 - theta: -1.82349320987 - accumulated_s: 6.6048055410399993 -} -adc_trajectory_point { - x: -126.036354345 - y: 358.37772713 - z: -31.3146840679 - - speed: 3.06944441795 - acceleration_s: 0.413639588279 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.036354345 + y: 358.37772713 + z: -31.3146840679 + theta: -1.82359408573 + kappa: -0.000803771467601 + s: 6.6354999852199992 + dkappa: 0 + } + v: 3.06944441795 + a: 0.413639588279 relative_time: 2.6800000667572021 - theta: -1.82359408573 - accumulated_s: 6.6354999852199992 -} -adc_trajectory_point { - x: -126.044157398 - y: 358.348197709 - z: -31.3150890348 - - speed: 3.06944441795 - acceleration_s: 0.326254765876 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.044157398 + y: 358.348197709 + z: -31.3150890348 + theta: -1.82364311569 + kappa: -0.000803771467601 + s: 6.6661944294000008 + dkappa: 0 + } + v: 3.06944441795 + a: 0.326254765876 relative_time: 2.690000057220459 - theta: -1.82364311569 - accumulated_s: 6.6661944294000008 -} -adc_trajectory_point { - x: -126.044157398 - y: 358.348197709 - z: -31.3150890348 - - speed: 3.07500004768 - acceleration_s: 0.326254765876 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.044157398 + y: 358.348197709 + z: -31.3150890348 + theta: -1.82364311569 + kappa: -0.000803771467601 + s: 6.69694442988 + dkappa: 0 + } + v: 3.07500004768 + a: 0.326254765876 relative_time: 2.690000057220459 - theta: -1.82364311569 - accumulated_s: 6.69694442988 -} -adc_trajectory_point { - x: -126.059855718 - y: 358.288982885 - z: -31.3155618459 - - speed: 3.07500004768 - acceleration_s: 0.46523362929 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.059855718 + y: 358.288982885 + z: -31.3155618459 + theta: -1.8237598578 + kappa: -0.000803771467601 + s: 6.7276944303500006 + dkappa: 0 + } + v: 3.07500004768 + a: 0.46523362929 relative_time: 2.7100000381469727 - theta: -1.8237598578 - accumulated_s: 6.7276944303500006 -} -adc_trajectory_point { - x: -126.067677572 - y: 358.259321449 - z: -31.3159407303 - - speed: 3.08333325386 - acceleration_s: 0.506723991784 - curvature: -0.0008420464379 - curvature_change_rate: -0.00124135042008 +} +trajectory_point { + path_point { + x: -126.067677572 + y: 358.259321449 + z: -31.3159407303 + theta: -1.82377316375 + kappa: -0.0008420464379 + s: 6.7585277628899991 + dkappa: -0.00124135042008 + } + v: 3.08333325386 + a: 0.506723991784 relative_time: 2.7200000286102295 - theta: -1.82377316375 - accumulated_s: 6.7585277628899991 -} -adc_trajectory_point { - x: -126.075541854 - y: 358.229580921 - z: -31.3163395924 - - speed: 3.08333325386 - acceleration_s: 0.563808783768 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.075541854 + y: 358.229580921 + z: -31.3163395924 + theta: -1.82382011107 + kappa: -0.0008420464379 + s: 6.7893610954299994 + dkappa: 0 + } + v: 3.08333325386 + a: 0.563808783768 relative_time: 2.7300000190734863 - theta: -1.82382011107 - accumulated_s: 6.7893610954299994 -} -adc_trajectory_point { - x: -126.083392099 - y: 358.199824766 - z: -31.316745366 - - speed: 3.09166669846 - acceleration_s: 0.425152358643 - curvature: -0.000880321428239 - curvature_change_rate: -0.00123800506561 +} +trajectory_point { + path_point { + x: -126.083392099 + y: 358.199824766 + z: -31.316745366 + theta: -1.82384748254 + kappa: -0.000880321428239 + s: 6.82027776242 + dkappa: -0.00123800506561 + } + v: 3.09166669846 + a: 0.425152358643 relative_time: 2.7400000095367432 - theta: -1.82384748254 - accumulated_s: 6.82027776242 -} -adc_trajectory_point { - x: -126.091296726 - y: 358.169999322 - z: -31.3170797275 - - speed: 3.09166669846 - acceleration_s: 0.529039050034 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.091296726 + y: 358.169999322 + z: -31.3170797275 + theta: -1.82392769881 + kappa: -0.000880321428239 + s: 6.8511944294 + dkappa: 0 + } + v: 3.09166669846 + a: 0.529039050034 relative_time: 2.75 - theta: -1.82392769881 - accumulated_s: 6.8511944294 -} -adc_trajectory_point { - x: -126.091296726 - y: 358.169999322 - z: -31.3170797275 - - speed: 3.09722232819 - acceleration_s: 0.529039050034 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.091296726 + y: 358.169999322 + z: -31.3170797275 + theta: -1.82392769881 + kappa: -0.000880321428239 + s: 6.8821666526800005 + dkappa: 0 + } + v: 3.09722232819 + a: 0.529039050034 relative_time: 2.75 - theta: -1.82392769881 - accumulated_s: 6.8821666526800005 -} -adc_trajectory_point { - x: -126.107108815 - y: 358.110277742 - z: -31.3177725319 - - speed: 3.09722232819 - acceleration_s: 0.382627782371 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.107108815 + y: 358.110277742 + z: -31.3177725319 + theta: -1.82402766554 + kappa: -0.000880321428239 + s: 6.91313887596 + dkappa: 0 + } + v: 3.09722232819 + a: 0.382627782371 relative_time: 2.7699999809265137 - theta: -1.82402766554 - accumulated_s: 6.91313887596 -} -adc_trajectory_point { - x: -126.1150425 - y: 358.080346963 - z: -31.3182779802 - - speed: 3.10555553436 - acceleration_s: 0.497540593076 - curvature: -0.000918596439528 - curvature_change_rate: -0.00123246906601 +} +trajectory_point { + path_point { + x: -126.1150425 + y: 358.080346963 + z: -31.3182779802 + theta: -1.82407606579 + kappa: -0.000918596439528 + s: 6.9441944313100006 + dkappa: -0.00123246906601 + } + v: 3.10555553436 + a: 0.497540593076 relative_time: 2.7799999713897705 - theta: -1.82407606579 - accumulated_s: 6.9441944313100006 -} -adc_trajectory_point { - x: -126.122980671 - y: 358.050388892 - z: -31.3186851079 - - speed: 3.10555553436 - acceleration_s: 0.374230324395 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.122980671 + y: 358.050388892 + z: -31.3186851079 + theta: -1.8241204982 + kappa: -0.000918596439528 + s: 6.9752499866500006 + dkappa: 0 + } + v: 3.10555553436 + a: 0.374230324395 relative_time: 2.7899999618530273 - theta: -1.8241204982 - accumulated_s: 6.9752499866500006 -} -adc_trajectory_point { - x: -126.130936993 - y: 358.020345633 - z: -31.3191264886 - - speed: 3.11388897896 - acceleration_s: 0.580999622577 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.130936993 + y: 358.020345633 + z: -31.3191264886 + theta: -1.82416021751 + kappa: -0.000918596439528 + s: 7.0063888764400009 + dkappa: 0 + } + v: 3.11388897896 + a: 0.580999622577 relative_time: 2.7999999523162842 - theta: -1.82416021751 - accumulated_s: 7.0063888764400009 -} -adc_trajectory_point { - x: -126.138945684 - y: 357.990276143 - z: -31.3196149571 - - speed: 3.11388897896 - acceleration_s: 0.571256202308 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.138945684 + y: 357.990276143 + z: -31.3196149571 + theta: -1.82425172481 + kappa: -0.000918596439528 + s: 7.0375277662299993 + dkappa: 0 + } + v: 3.11388897896 + a: 0.571256202308 relative_time: 2.809999942779541 - theta: -1.82425172481 - accumulated_s: 7.0375277662299993 -} -adc_trajectory_point { - x: -126.146892291 - y: 357.960134232 - z: -31.3200618271 - - speed: 3.125 - acceleration_s: 0.520164619607 - curvature: -0.000956871472678 - curvature_change_rate: -0.0012248010608 +} +trajectory_point { + path_point { + x: -126.146892291 + y: 357.960134232 + z: -31.3200618271 + theta: -1.82425692775 + kappa: -0.000956871472678 + s: 7.0687777662299993 + dkappa: -0.0012248010608 + } + v: 3.125 + a: 0.520164619607 relative_time: 2.8199999332427979 - theta: -1.82425692775 - accumulated_s: 7.0687777662299993 -} -adc_trajectory_point { - x: -126.154869846 - y: 357.929954192 - z: -31.3205484115 - - speed: 3.125 - acceleration_s: 0.501316150934 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.154869846 + y: 357.929954192 + z: -31.3205484115 + theta: -1.8243241516 + kappa: -0.000956871472678 + s: 7.1000277662299993 + dkappa: 0 + } + v: 3.125 + a: 0.501316150934 relative_time: 2.8300001621246338 - theta: -1.8243241516 - accumulated_s: 7.1000277662299993 -} -adc_trajectory_point { - x: -126.162832424 - y: 357.899732542 - z: -31.3210640308 - - speed: 3.13611102104 - acceleration_s: 0.383059567577 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.162832424 + y: 357.899732542 + z: -31.3210640308 + theta: -1.82436401959 + kappa: -0.000956871472678 + s: 7.1313888764400009 + dkappa: 0 + } + v: 3.13611102104 + a: 0.383059567577 relative_time: 2.8400001525878906 - theta: -1.82436401959 - accumulated_s: 7.1313888764400009 -} -adc_trajectory_point { - x: -126.170812033 - y: 357.869454264 - z: -31.321619818 - - speed: 3.13611102104 - acceleration_s: 0.383059567577 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.170812033 + y: 357.869454264 + z: -31.321619818 + theta: -1.8244479462 + kappa: -0.000956871472678 + s: 7.1627499866500006 + dkappa: 0 + } + v: 3.13611102104 + a: 0.383059567577 relative_time: 2.8500001430511475 - theta: -1.8244479462 - accumulated_s: 7.1627499866500006 -} -adc_trajectory_point { - x: -126.178766382 - y: 357.839126963 - z: -31.3222097838 - - speed: 3.1472222805 - acceleration_s: 0.464772359593 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.178766382 + y: 357.839126963 + z: -31.3222097838 + theta: -1.82447236367 + kappa: -0.000956871472678 + s: 7.1942222094599995 + dkappa: 0 + } + v: 3.1472222805 + a: 0.464772359593 relative_time: 2.8600001335144043 - theta: -1.82447236367 - accumulated_s: 7.1942222094599995 -} -adc_trajectory_point { - x: -126.186743378 - y: 357.808752627 - z: -31.3226710502 - - speed: 3.1472222805 - acceleration_s: 0.457433710587 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.186743378 + y: 357.808752627 + z: -31.3226710502 + theta: -1.82454997751 + kappa: -0.000956871472678 + s: 7.2256944322599992 + dkappa: 0 + } + v: 3.1472222805 + a: 0.457433710587 relative_time: 2.8700001239776611 - theta: -1.82454997751 - accumulated_s: 7.2256944322599992 -} -adc_trajectory_point { - x: -126.194704008 - y: 357.778319877 - z: -31.3232655963 - - speed: 3.15555548668 - acceleration_s: 0.522979453222 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.194704008 + y: 357.778319877 + z: -31.3232655963 + theta: -1.82459108363 + kappa: -0.000956871472678 + s: 7.2572499871300007 + dkappa: 0 + } + v: 3.15555548668 + a: 0.522979453222 relative_time: 2.880000114440918 - theta: -1.82459108363 - accumulated_s: 7.2572499871300007 -} -adc_trajectory_point { - x: -126.202693428 - y: 357.747852806 - z: -31.3239080766 - - speed: 3.15555548668 - acceleration_s: 0.455380615626 - curvature: -0.000956871472678 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.202693428 + y: 357.747852806 + z: -31.3239080766 + theta: -1.82464949137 + kappa: -0.000956871472678 + s: 7.2888055419899995 + dkappa: 0 + } + v: 3.15555548668 + a: 0.455380615626 relative_time: 2.8900001049041748 - theta: -1.82464949137 - accumulated_s: 7.2888055419899995 -} -adc_trajectory_point { - x: -126.210694911 - y: 357.717305728 - z: -31.3244874831 - - speed: 3.16388893127 - acceleration_s: 0.455380615626 - curvature: -0.000918596439528 - curvature_change_rate: 0.00120974642225 +} +trajectory_point { + path_point { + x: -126.210694911 + y: 357.717305728 + z: -31.3244874831 + theta: -1.82470858106 + kappa: -0.000918596439528 + s: 7.3204444313099994 + dkappa: 0.00120974642225 + } + v: 3.16388893127 + a: 0.455380615626 relative_time: 2.9000000953674316 - theta: -1.82470858106 - accumulated_s: 7.3204444313099994 -} -adc_trajectory_point { - x: -126.218712949 - y: 357.686723792 - z: -31.3250816101 - - speed: 3.16388893127 - acceleration_s: 0.503037514005 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.218712949 + y: 357.686723792 + z: -31.3250816101 + theta: -1.82474317059 + kappa: -0.000918596439528 + s: 7.35208332062 + dkappa: 0 + } + v: 3.16388893127 + a: 0.503037514005 relative_time: 2.9100000858306885 - theta: -1.82474317059 - accumulated_s: 7.35208332062 -} -adc_trajectory_point { - x: -126.226761876 - y: 357.656090805 - z: -31.3256956702 - - speed: 3.17777776718 - acceleration_s: 0.534048393007 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.226761876 + y: 357.656090805 + z: -31.3256956702 + theta: -1.82479909581 + kappa: -0.000918596439528 + s: 7.38386109829 + dkappa: 0 + } + v: 3.17777776718 + a: 0.534048393007 relative_time: 2.9200000762939453 - theta: -1.82479909581 - accumulated_s: 7.38386109829 -} -adc_trajectory_point { - x: -126.234841061 - y: 357.625433481 - z: -31.3264127029 - - speed: 3.17777776718 - acceleration_s: 0.509043883341 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.234841061 + y: 357.625433481 + z: -31.3264127029 + theta: -1.82488274067 + kappa: -0.000918596439528 + s: 7.4156388759599992 + dkappa: 0 + } + v: 3.17777776718 + a: 0.509043883341 relative_time: 2.9300000667572021 - theta: -1.82488274067 - accumulated_s: 7.4156388759599992 -} -adc_trajectory_point { - x: -126.242926637 - y: 357.594723481 - z: -31.3271339554 - - speed: 3.19166660309 - acceleration_s: 0.453107629423 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.242926637 + y: 357.594723481 + z: -31.3271339554 + theta: -1.82492478946 + kappa: -0.000918596439528 + s: 7.4475555419900008 + dkappa: 0 + } + v: 3.19166660309 + a: 0.453107629423 relative_time: 2.940000057220459 - theta: -1.82492478946 - accumulated_s: 7.4475555419900008 -} -adc_trajectory_point { - x: -126.242926637 - y: 357.594723481 - z: -31.3271339554 - - speed: 3.19166660309 - acceleration_s: 0.453107629423 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.242926637 + y: 357.594723481 + z: -31.3271339554 + theta: -1.82492478946 + kappa: -0.000918596439528 + s: 7.47947220803 + dkappa: 0 + } + v: 3.19166660309 + a: 0.453107629423 relative_time: 2.940000057220459 - theta: -1.82492478946 - accumulated_s: 7.47947220803 -} -adc_trajectory_point { - x: -126.259181833 - y: 357.533099366 - z: -31.328906294 - - speed: 3.19722223282 - acceleration_s: 0.614675811852 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.259181833 + y: 357.533099366 + z: -31.328906294 + theta: -1.82505297325 + kappa: -0.000918596439528 + s: 7.51144443035 + dkappa: 0 + } + v: 3.19722223282 + a: 0.614675811852 relative_time: 2.9600000381469727 - theta: -1.82505297325 - accumulated_s: 7.51144443035 -} -adc_trajectory_point { - x: -126.267313914 - y: 357.502148787 - z: -31.3298393926 - - speed: 3.19722223282 - acceleration_s: 0.796355408066 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.267313914 + y: 357.502148787 + z: -31.3298393926 + theta: -1.8251012432 + kappa: -0.000918596439528 + s: 7.5434166526799995 + dkappa: 0 + } + v: 3.19722223282 + a: 0.796355408066 relative_time: 2.9700000286102295 - theta: -1.8251012432 - accumulated_s: 7.5434166526799995 -} -adc_trajectory_point { - x: -126.275508208 - y: 357.471180796 - z: -31.3308216175 - - speed: 3.205555439 - acceleration_s: 0.629462267384 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.275508208 + y: 357.471180796 + z: -31.3308216175 + theta: -1.82522005594 + kappa: -0.000918596439528 + s: 7.57547220707 + dkappa: 0 + } + v: 3.205555439 + a: 0.629462267384 relative_time: 2.9800000190734863 - theta: -1.82522005594 - accumulated_s: 7.57547220707 -} -adc_trajectory_point { - x: -126.283680829 - y: 357.440122586 - z: -31.3317320691 - - speed: 3.205555439 - acceleration_s: 0.621641273573 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.283680829 + y: 357.440122586 + z: -31.3317320691 + theta: -1.82528217867 + kappa: -0.000918596439528 + s: 7.60752776146 + dkappa: 0 + } + v: 3.205555439 + a: 0.621641273573 relative_time: 2.9900000095367432 - theta: -1.82528217867 - accumulated_s: 7.60752776146 -} -adc_trajectory_point { - x: -126.291893912 - y: 357.4090488 - z: -31.3326069424 - - speed: 3.21388888359 - acceleration_s: 0.621641273573 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.291893912 + y: 357.4090488 + z: -31.3326069424 + theta: -1.82537641226 + kappa: -0.000918596439528 + s: 7.6396666503000006 + dkappa: 0 + } + v: 3.21388888359 + a: 0.621641273573 relative_time: 3 - theta: -1.82537641226 - accumulated_s: 7.6396666503000006 -} -adc_trajectory_point { - x: -126.300109163 - y: 357.377939678 - z: -31.3334607286 - - speed: 3.21388888359 - acceleration_s: 0.352646051338 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.300109163 + y: 357.377939678 + z: -31.3334607286 + theta: -1.82543024597 + kappa: -0.000918596439528 + s: 7.67180553913 + dkappa: 0 + } + v: 3.21388888359 + a: 0.352646051338 relative_time: 3.0099999904632568 - theta: -1.82543024597 - accumulated_s: 7.67180553913 -} -adc_trajectory_point { - x: -126.308303954 - y: 357.346792906 - z: -31.3343978049 - - speed: 3.2277777195 - acceleration_s: 0.362813741162 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.308303954 + y: 357.346792906 + z: -31.3343978049 + theta: -1.82544284689 + kappa: -0.000918596439528 + s: 7.7040833163299993 + dkappa: 0 + } + v: 3.2277777195 + a: 0.362813741162 relative_time: 3.0199999809265137 - theta: -1.82544284689 - accumulated_s: 7.7040833163299993 -} -adc_trajectory_point { - x: -126.316550762 - y: 357.315653427 - z: -31.335456715 - - speed: 3.2277777195 - acceleration_s: 0.232629772995 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.316550762 + y: 357.315653427 + z: -31.335456715 + theta: -1.82552119025 + kappa: -0.000918596439528 + s: 7.7363610935199993 + dkappa: 0 + } + v: 3.2277777195 + a: 0.232629772995 relative_time: 3.0299999713897705 - theta: -1.82552119025 - accumulated_s: 7.7363610935199993 -} -adc_trajectory_point { - x: -126.324832741 - y: 357.284433166 - z: -31.3363997387 - - speed: 3.2277777195 - acceleration_s: 0.232629772995 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.324832741 + y: 357.284433166 + z: -31.3363997387 + theta: -1.82564221475 + kappa: -0.000918596439528 + s: 7.76863887072 + dkappa: 0 + } + v: 3.2277777195 + a: 0.232629772995 relative_time: 3.0399999618530273 - theta: -1.82564221475 - accumulated_s: 7.76863887072 -} -adc_trajectory_point { - x: -126.333088492 - y: 357.253151252 - z: -31.337216489 - - speed: 3.23888897896 - acceleration_s: 0.546959754019 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.333088492 + y: 357.253151252 + z: -31.337216489 + theta: -1.82569642273 + kappa: -0.000918596439528 + s: 7.8010277605099994 + dkappa: 0 + } + v: 3.23888897896 + a: 0.546959754019 relative_time: 3.0499999523162842 - theta: -1.82569642273 - accumulated_s: 7.8010277605099994 -} -adc_trajectory_point { - x: -126.341357353 - y: 357.221766901 - z: -31.3379224408 - - speed: 3.25 - acceleration_s: 0.763328602658 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.341357353 + y: 357.221766901 + z: -31.3379224408 + theta: -1.82571571216 + kappa: -0.000918596439528 + s: 7.83352776051 + dkappa: 0 + } + v: 3.25 + a: 0.763328602658 relative_time: 3.059999942779541 - theta: -1.82571571216 - accumulated_s: 7.83352776051 -} -adc_trajectory_point { - x: -126.349677904 - y: 357.190412597 - z: -31.3388488209 - - speed: 3.25 - acceleration_s: 0.492292654727 - curvature: -0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.349677904 + y: 357.190412597 + z: -31.3388488209 + theta: -1.82583419304 + kappa: -0.000918596439528 + s: 7.8660277605100006 + dkappa: 0 + } + v: 3.25 + a: 0.492292654727 relative_time: 3.0699999332427979 - theta: -1.82583419304 - accumulated_s: 7.8660277605100006 -} -adc_trajectory_point { - x: -126.357958179 - y: 357.158974798 - z: -31.3395972587 - - speed: 3.26111102104 - acceleration_s: 0.464564854836 - curvature: -0.000880321428239 - curvature_change_rate: 0.00117368010601 +} +trajectory_point { + path_point { + x: -126.357958179 + y: 357.158974798 + z: -31.3395972587 + theta: -1.8258701716 + kappa: -0.000880321428239 + s: 7.8986388707199993 + dkappa: 0.00117368010601 + } + v: 3.26111102104 + a: 0.464564854836 relative_time: 3.0800001621246338 - theta: -1.8258701716 - accumulated_s: 7.8986388707199993 -} -adc_trajectory_point { - x: -126.36625774 - y: 357.127544982 - z: -31.3403570335 - - speed: 3.26111102104 - acceleration_s: 0.296031596052 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.36625774 + y: 357.127544982 + z: -31.3403570335 + theta: -1.82594556362 + kappa: -0.000880321428239 + s: 7.93124998093 + dkappa: 0 + } + v: 3.26111102104 + a: 0.296031596052 relative_time: 3.0900001525878906 - theta: -1.82594556362 - accumulated_s: 7.93124998093 -} -adc_trajectory_point { - x: -126.36625774 - y: 357.127544982 - z: -31.3403570335 - - speed: 3.26944446564 - acceleration_s: 0.296031596052 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.36625774 + y: 357.127544982 + z: -31.3403570335 + theta: -1.82594556362 + kappa: -0.000880321428239 + s: 7.96394442559 + dkappa: 0 + } + v: 3.26944446564 + a: 0.296031596052 relative_time: 3.0900001525878906 - theta: -1.82594556362 - accumulated_s: 7.96394442559 -} -adc_trajectory_point { - x: -126.382883895 - y: 357.064596002 - z: -31.3415422123 - - speed: 3.26944446564 - acceleration_s: 0.290829079588 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.382883895 + y: 357.064596002 + z: -31.3415422123 + theta: -1.82601293343 + kappa: -0.000880321428239 + s: 7.99663887024 + dkappa: 0 + } + v: 3.26944446564 + a: 0.290829079588 relative_time: 3.1100001335144043 - theta: -1.82601293343 - accumulated_s: 7.99663887024 -} -adc_trajectory_point { - x: -126.391256508 - y: 357.033119968 - z: -31.3421462085 - - speed: 3.27777767181 - acceleration_s: 0.128096931288 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.391256508 + y: 357.033119968 + z: -31.3421462085 + theta: -1.8261001025 + kappa: -0.000880321428239 + s: 8.02941664696 + dkappa: 0 + } + v: 3.27777767181 + a: 0.128096931288 relative_time: 3.1200001239776611 - theta: -1.8261001025 - accumulated_s: 8.02941664696 -} -adc_trajectory_point { - x: -126.39960812 - y: 357.001552905 - z: -31.3426318364 - - speed: 3.27777767181 - acceleration_s: 0.4808557379 - curvature: -0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.39960812 + y: 357.001552905 + z: -31.3426318364 + theta: -1.82611571164 + kappa: -0.000880321428239 + s: 8.06219442368 + dkappa: 0 + } + v: 3.27777767181 + a: 0.4808557379 relative_time: 3.130000114440918 - theta: -1.82611571164 - accumulated_s: 8.06219442368 -} -adc_trajectory_point { - x: -126.407998766 - y: 356.970002409 - z: -31.3430617405 - - speed: 3.28888893127 - acceleration_s: 0.286767132188 - curvature: -0.0008420464379 - curvature_change_rate: 0.00116376658314 +} +trajectory_point { + path_point { + x: -126.407998766 + y: 356.970002409 + z: -31.3430617405 + theta: -1.82614509679 + kappa: -0.0008420464379 + s: 8.09508331299 + dkappa: 0.00116376658314 + } + v: 3.28888893127 + a: 0.286767132188 relative_time: 3.1400001049041748 - theta: -1.82614509679 - accumulated_s: 8.09508331299 -} -adc_trajectory_point { - x: -126.416460821 - y: 356.938375203 - z: -31.3433212331 - - speed: 3.28888893127 - acceleration_s: 0.286767132188 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.416460821 + y: 356.938375203 + z: -31.3433212331 + theta: -1.82619763602 + kappa: -0.0008420464379 + s: 8.1279722023 + dkappa: 0 + } + v: 3.28888893127 + a: 0.286767132188 relative_time: 3.1500000953674316 - theta: -1.82619763602 - accumulated_s: 8.1279722023 -} -adc_trajectory_point { - x: -126.424894005 - y: 356.906737938 - z: -31.3437340027 - - speed: 3.29999995232 - acceleration_s: 0.428438433349 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.424894005 + y: 356.906737938 + z: -31.3437340027 + theta: -1.8261957026 + kappa: -0.0008420464379 + s: 8.16097220183 + dkappa: 0 + } + v: 3.29999995232 + a: 0.428438433349 relative_time: 3.1600000858306885 - theta: -1.8261957026 - accumulated_s: 8.16097220183 -} -adc_trajectory_point { - x: -126.433370464 - y: 356.875058806 - z: -31.3439121805 - - speed: 3.29999995232 - acceleration_s: 0.36476578847 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.433370464 + y: 356.875058806 + z: -31.3439121805 + theta: -1.82619254194 + kappa: -0.0008420464379 + s: 8.19397220135 + dkappa: 0 + } + v: 3.29999995232 + a: 0.36476578847 relative_time: 3.1700000762939453 - theta: -1.82619254194 - accumulated_s: 8.19397220135 -} -adc_trajectory_point { - x: -126.441893076 - y: 356.843338796 - z: -31.3441874972 - - speed: 3.30833339691 - acceleration_s: 0.5167637741 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.441893076 + y: 356.843338796 + z: -31.3441874972 + theta: -1.82622539305 + kappa: -0.0008420464379 + s: 8.22705553532 + dkappa: 0 + } + v: 3.30833339691 + a: 0.5167637741 relative_time: 3.1800000667572021 - theta: -1.82622539305 - accumulated_s: 8.22705553532 -} -adc_trajectory_point { - x: -126.450440938 - y: 356.811614783 - z: -31.3443374243 - - speed: 3.30833339691 - acceleration_s: 0.301862609745 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.450440938 + y: 356.811614783 + z: -31.3443374243 + theta: -1.82626537346 + kappa: -0.0008420464379 + s: 8.26013886929 + dkappa: 0 + } + v: 3.30833339691 + a: 0.301862609745 relative_time: 3.190000057220459 - theta: -1.82626537346 - accumulated_s: 8.26013886929 -} -adc_trajectory_point { - x: -126.450440938 - y: 356.811614783 - z: -31.3443374243 - - speed: 3.31666660309 - acceleration_s: 0.301862609745 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.450440938 + y: 356.811614783 + z: -31.3443374243 + theta: -1.82626537346 + kappa: -0.0008420464379 + s: 8.29330553532 + dkappa: 0 + } + v: 3.31666660309 + a: 0.301862609745 relative_time: 3.190000057220459 - theta: -1.82626537346 - accumulated_s: 8.29330553532 -} -adc_trajectory_point { - x: -126.467585246 - y: 356.748054621 - z: -31.3445607657 - - speed: 3.31666660309 - acceleration_s: 0.239822784622 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.467585246 + y: 356.748054621 + z: -31.3445607657 + theta: -1.82633228994 + kappa: -0.0008420464379 + s: 8.32647220135 + dkappa: 0 + } + v: 3.31666660309 + a: 0.239822784622 relative_time: 3.2100000381469727 - theta: -1.82633228994 - accumulated_s: 8.32647220135 -} -adc_trajectory_point { - x: -126.476163793 - y: 356.716236298 - z: -31.3445254369 - - speed: 3.32500004768 - acceleration_s: 0.267242042689 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.476163793 + y: 356.716236298 + z: -31.3445254369 + theta: -1.82634928064 + kappa: -0.0008420464379 + s: 8.35972220183 + dkappa: 0 + } + v: 3.32500004768 + a: 0.267242042689 relative_time: 3.2200000286102295 - theta: -1.82634928064 - accumulated_s: 8.35972220183 -} -adc_trajectory_point { - x: -126.484763992 - y: 356.684400349 - z: -31.3445740202 - - speed: 3.32500004768 - acceleration_s: 0.245883502081 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.484763992 + y: 356.684400349 + z: -31.3445740202 + theta: -1.82638943777 + kappa: -0.0008420464379 + s: 8.3929722023 + dkappa: 0 + } + v: 3.32500004768 + a: 0.245883502081 relative_time: 3.2300000190734863 - theta: -1.82638943777 - accumulated_s: 8.3929722023 -} -adc_trajectory_point { - x: -126.493362471 - y: 356.652523506 - z: -31.3444986399 - - speed: 3.330555439 - acceleration_s: 0.341762154716 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.493362471 + y: 356.652523506 + z: -31.3444986399 + theta: -1.82641776818 + kappa: -0.0008420464379 + s: 8.42627775669 + dkappa: 0 + } + v: 3.330555439 + a: 0.341762154716 relative_time: 3.2400000095367432 - theta: -1.82641776818 - accumulated_s: 8.42627775669 -} -adc_trajectory_point { - x: -126.501961865 - y: 356.620630121 - z: -31.3444468398 - - speed: 3.330555439 - acceleration_s: 0.341762154716 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.501961865 + y: 356.620630121 + z: -31.3444468398 + theta: -1.82646394466 + kappa: -0.0008420464379 + s: 8.45958331108 + dkappa: 0 + } + v: 3.330555439 + a: 0.341762154716 relative_time: 3.25 - theta: -1.82646394466 - accumulated_s: 8.45958331108 -} -adc_trajectory_point { - x: -126.510528434 - y: 356.588665449 - z: -31.3442180054 - - speed: 3.33611106873 - acceleration_s: 0.371268099975 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.510528434 + y: 356.588665449 + z: -31.3442180054 + theta: -1.82645211648 + kappa: -0.0008420464379 + s: 8.49294442177 + dkappa: 0 + } + v: 3.33611106873 + a: 0.371268099975 relative_time: 3.2599999904632568 - theta: -1.82645211648 - accumulated_s: 8.49294442177 -} -adc_trajectory_point { - x: -126.519111453 - y: 356.556708783 - z: -31.3442060826 - - speed: 3.33611106873 - acceleration_s: 0.332246549914 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.519111453 + y: 356.556708783 + z: -31.3442060826 + theta: -1.82648901874 + kappa: -0.0008420464379 + s: 8.52630553246 + dkappa: 0 + } + v: 3.33611106873 + a: 0.332246549914 relative_time: 3.2699999809265137 - theta: -1.82648901874 - accumulated_s: 8.52630553246 -} -adc_trajectory_point { - x: -126.52768735 - y: 356.524684258 - z: -31.3439824898 - - speed: 3.33888888359 - acceleration_s: 0.386355482026 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.52768735 + y: 356.524684258 + z: -31.3439824898 + theta: -1.82653384011 + kappa: -0.0008420464379 + s: 8.55969442134 + dkappa: 0 + } + v: 3.33888888359 + a: 0.386355482026 relative_time: 3.2799999713897705 - theta: -1.82653384011 - accumulated_s: 8.55969442134 -} -adc_trajectory_point { - x: -126.53627215 - y: 356.492655285 - z: -31.3438073667 - - speed: 3.33888888359 - acceleration_s: 0.319144863026 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.53627215 + y: 356.492655285 + z: -31.3438073667 + theta: -1.82661869089 + kappa: -0.0008420464379 + s: 8.59308331014 + dkappa: 0 + } + v: 3.33888888359 + a: 0.319144863026 relative_time: 3.2899999618530273 - theta: -1.82661869089 - accumulated_s: 8.59308331014 -} -adc_trajectory_point { - x: -126.544859835 - y: 356.460560798 - z: -31.3433333337 - - speed: 3.34444451332 - acceleration_s: 0.319144863026 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.544859835 + y: 356.460560798 + z: -31.3433333337 + theta: -1.82668673606 + kappa: -0.0008420464379 + s: 8.62652775524 + dkappa: 0 + } + v: 3.34444451332 + a: 0.319144863026 relative_time: 3.2999999523162842 - theta: -1.82668673606 - accumulated_s: 8.62652775524 -} -adc_trajectory_point { - x: -126.55341621 - y: 356.428520827 - z: -31.3430436049 - - speed: 3.34444451332 - acceleration_s: 0.0399907940701 - curvature: -0.0008420464379 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.55341621 + y: 356.428520827 + z: -31.3430436049 + theta: -1.82672008051 + kappa: -0.0008420464379 + s: 8.65997220044 + dkappa: 0 + } + v: 3.34444451332 + a: 0.0399907940701 relative_time: 3.309999942779541 - theta: -1.82672008051 - accumulated_s: 8.65997220044 -} -adc_trajectory_point { - x: -126.562034607 - y: 356.396460461 - z: -31.3427345473 - - speed: 3.34722232819 - acceleration_s: 0.0891820167262 - curvature: -0.000803771467601 - curvature_change_rate: 0.00114348455366 +} +trajectory_point { + path_point { + x: -126.562034607 + y: 356.396460461 + z: -31.3427345473 + theta: -1.82678882025 + kappa: -0.000803771467601 + s: 8.69344442364 + dkappa: 0.00114348455366 + } + v: 3.34722232819 + a: 0.0891820167262 relative_time: 3.3199999332427979 - theta: -1.82678882025 - accumulated_s: 8.69344442364 -} -adc_trajectory_point { - x: -126.570648927 - y: 356.364378675 - z: -31.3422306031 - - speed: 3.34722232819 - acceleration_s: 0.121640972454 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.570648927 + y: 356.364378675 + z: -31.3422306031 + theta: -1.8268125683 + kappa: -0.000803771467601 + s: 8.72691664694 + dkappa: 0 + } + v: 3.34722232819 + a: 0.121640972454 relative_time: 3.3300001621246338 - theta: -1.8268125683 - accumulated_s: 8.72691664694 -} -adc_trajectory_point { - x: -126.579282816 - y: 356.332271847 - z: -31.3416289231 - - speed: 3.3527777195 - acceleration_s: 0.180193809259 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.579282816 + y: 356.332271847 + z: -31.3416289231 + theta: -1.82681842755 + kappa: -0.000803771467601 + s: 8.76044442414 + dkappa: 0 + } + v: 3.3527777195 + a: 0.180193809259 relative_time: 3.3400001525878906 - theta: -1.82681842755 - accumulated_s: 8.76044442414 -} -adc_trajectory_point { - x: -126.587904617 - y: 356.300163992 - z: -31.3409582535 - - speed: 3.3527777195 - acceleration_s: 0.105942443261 - curvature: -0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.587904617 + y: 356.300163992 + z: -31.3409582535 + theta: -1.82683405334 + kappa: -0.000803771467601 + s: 8.79397220134 + dkappa: 0 + } + v: 3.3527777195 + a: 0.105942443261 relative_time: 3.3500001430511475 - theta: -1.82683405334 - accumulated_s: 8.79397220134 -} -adc_trajectory_point { - x: -126.596606582 - y: 356.268053779 - z: -31.3404062809 - - speed: 3.36111116409 - acceleration_s: 0.105942443261 - curvature: -0.00076549651643 - curvature_change_rate: 0.00113875885986 +} +trajectory_point { + path_point { + x: -126.596606582 + y: 356.268053779 + z: -31.3404062809 + theta: -1.82687475275 + kappa: -0.00076549651643 + s: 8.82758331304 + dkappa: 0.00113875885986 + } + v: 3.36111116409 + a: 0.105942443261 relative_time: 3.3600001335144043 - theta: -1.82687475275 - accumulated_s: 8.82758331304 -} -adc_trajectory_point { - x: -126.605334888 - y: 356.23593129 - z: -31.339665141 - - speed: 3.36111116409 - acceleration_s: 0.174192509194 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.605334888 + y: 356.23593129 + z: -31.339665141 + theta: -1.8269203204 + kappa: -0.00076549651643 + s: 8.86119442464 + dkappa: 0 + } + v: 3.36111116409 + a: 0.174192509194 relative_time: 3.3700001239776611 - theta: -1.8269203204 - accumulated_s: 8.86119442464 -} -adc_trajectory_point { - x: -126.614117099 - y: 356.203813035 - z: -31.3390399422 - - speed: 3.36944437027 - acceleration_s: 0.175419474684 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.614117099 + y: 356.203813035 + z: -31.3390399422 + theta: -1.82693997226 + kappa: -0.00076549651643 + s: 8.89488886834 + dkappa: 0 + } + v: 3.36944437027 + a: 0.175419474684 relative_time: 3.380000114440918 - theta: -1.82693997226 - accumulated_s: 8.89488886834 -} -adc_trajectory_point { - x: -126.622915637 - y: 356.171656799 - z: -31.3382517239 - - speed: 3.36944437027 - acceleration_s: 0.255379637482 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.622915637 + y: 356.171656799 + z: -31.3382517239 + theta: -1.82698160888 + kappa: -0.00076549651643 + s: 8.92858331204 + dkappa: 0 + } + v: 3.36944437027 + a: 0.255379637482 relative_time: 3.3900001049041748 - theta: -1.82698160888 - accumulated_s: 8.92858331204 -} -adc_trajectory_point { - x: -126.622915637 - y: 356.171656799 - z: -31.3382517239 - - speed: 3.37222218513 - acceleration_s: 0.255379637482 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.622915637 + y: 356.171656799 + z: -31.3382517239 + theta: -1.82698160888 + kappa: -0.00076549651643 + s: 8.96230553384 + dkappa: 0 + } + v: 3.37222218513 + a: 0.255379637482 relative_time: 3.3900001049041748 - theta: -1.82698160888 - accumulated_s: 8.96230553384 -} -adc_trajectory_point { - x: -126.640551366 - y: 356.10725683 - z: -31.3369481983 - - speed: 3.37222218513 - acceleration_s: 0.416432213131 - curvature: -0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.640551366 + y: 356.10725683 + z: -31.3369481983 + theta: -1.82701748655 + kappa: -0.00076549651643 + s: 8.99602775574 + dkappa: 0 + } + v: 3.37222218513 + a: 0.416432213131 relative_time: 3.4100000858306885 - theta: -1.82701748655 - accumulated_s: 8.99602775574 -} -adc_trajectory_point { - x: -126.649407871 - y: 356.075053046 - z: -31.3362821704 - - speed: 3.37222218513 - acceleration_s: 0.18251066419 - curvature: -0.000727221583477 - curvature_change_rate: 0.00113500626151 +} +trajectory_point { + path_point { + x: -126.649407871 + y: 356.075053046 + z: -31.3362821704 + theta: -1.82707758232 + kappa: -0.000727221583477 + s: 9.02974997764 + dkappa: 0.00113500626151 + } + v: 3.37222218513 + a: 0.18251066419 relative_time: 3.4200000762939453 - theta: -1.82707758232 - accumulated_s: 9.02974997764 -} -adc_trajectory_point { - x: -126.658247953 - y: 356.042762856 - z: -31.33576738 - - speed: 3.37222218513 - acceleration_s: 0.365772374337 - curvature: -0.000727221583477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.658247953 + y: 356.042762856 + z: -31.33576738 + theta: -1.82712424605 + kappa: -0.000727221583477 + s: 9.06347219944 + dkappa: 0 + } + v: 3.37222218513 + a: 0.365772374337 relative_time: 3.4300000667572021 - theta: -1.82712424605 - accumulated_s: 9.06347219944 -} -adc_trajectory_point { - x: -126.667064499 - y: 356.010471259 - z: -31.3352754069 - - speed: 3.37777781487 - acceleration_s: 0.231852483685 - curvature: -0.00068894666783 - curvature_change_rate: 0.00113313893763 +} +trajectory_point { + path_point { + x: -126.667064499 + y: 356.010471259 + z: -31.3352754069 + theta: -1.8271772763 + kappa: -0.00068894666783 + s: 9.09724997764 + dkappa: 0.00113313893763 + } + v: 3.37777781487 + a: 0.231852483685 relative_time: 3.440000057220459 - theta: -1.8271772763 - accumulated_s: 9.09724997764 -} -adc_trajectory_point { - x: -126.667064499 - y: 356.010471259 - z: -31.3352754069 - - speed: 3.37777781487 - acceleration_s: 0.231852483685 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.667064499 + y: 356.010471259 + z: -31.3352754069 + theta: -1.8271772763 + kappa: -0.00068894666783 + s: 9.13102775574 + dkappa: 0 + } + v: 3.37777781487 + a: 0.231852483685 relative_time: 3.440000057220459 - theta: -1.8271772763 - accumulated_s: 9.13102775574 -} -adc_trajectory_point { - x: -126.684674625 - y: 355.945731248 - z: -31.3343479773 - - speed: 3.3833334446 - acceleration_s: 0.351494436829 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.684674625 + y: 355.945731248 + z: -31.3343479773 + theta: -1.82731511949 + kappa: -0.00068894666783 + s: 9.16486109014 + dkappa: 0 + } + v: 3.3833334446 + a: 0.351494436829 relative_time: 3.4600000381469727 - theta: -1.82731511949 - accumulated_s: 9.16486109014 -} -adc_trajectory_point { - x: -126.693424055 - y: 355.913307342 - z: -31.3340699114 - - speed: 3.3833334446 - acceleration_s: 0.289788923925 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.693424055 + y: 355.913307342 + z: -31.3340699114 + theta: -1.82734949638 + kappa: -0.00068894666783 + s: 9.19869442464 + dkappa: 0 + } + v: 3.3833334446 + a: 0.289788923925 relative_time: 3.4700000286102295 - theta: -1.82734949638 - accumulated_s: 9.19869442464 -} -adc_trajectory_point { - x: -126.702200971 - y: 355.88083369 - z: -31.3338288246 - - speed: 3.38888883591 - acceleration_s: 0.398475929312 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.702200971 + y: 355.88083369 + z: -31.3338288246 + theta: -1.82744159828 + kappa: -0.00068894666783 + s: 9.23258331304 + dkappa: 0 + } + v: 3.38888883591 + a: 0.398475929312 relative_time: 3.4800000190734863 - theta: -1.82744159828 - accumulated_s: 9.23258331304 -} -adc_trajectory_point { - x: -126.710930873 - y: 355.84831332 - z: -31.3336686827 - - speed: 3.38888883591 - acceleration_s: 0.348416867207 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.710930873 + y: 355.84831332 + z: -31.3336686827 + theta: -1.82750114409 + kappa: -0.00068894666783 + s: 9.26647220134 + dkappa: 0 + } + v: 3.38888883591 + a: 0.348416867207 relative_time: 3.4900000095367432 - theta: -1.82750114409 - accumulated_s: 9.26647220134 -} -adc_trajectory_point { - x: -126.719671587 - y: 355.815735623 - z: -31.3335086247 - - speed: 3.3972222805 - acceleration_s: 0.348416867207 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.719671587 + y: 355.815735623 + z: -31.3335086247 + theta: -1.82756009136 + kappa: -0.00068894666783 + s: 9.30044442414 + dkappa: 0 + } + v: 3.3972222805 + a: 0.348416867207 relative_time: 3.5 - theta: -1.82756009136 - accumulated_s: 9.30044442414 -} -adc_trajectory_point { - x: -126.728400714 - y: 355.783148232 - z: -31.3335562842 - - speed: 3.3972222805 - acceleration_s: 0.366865734413 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.728400714 + y: 355.783148232 + z: -31.3335562842 + theta: -1.82763237866 + kappa: -0.00068894666783 + s: 9.33441664694 + dkappa: 0 + } + v: 3.3972222805 + a: 0.366865734413 relative_time: 3.5099999904632568 - theta: -1.82763237866 - accumulated_s: 9.33441664694 -} -adc_trajectory_point { - x: -126.737119489 - y: 355.750478834 - z: -31.3335927948 - - speed: 3.40000009537 - acceleration_s: 0.398196786697 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.737119489 + y: 355.750478834 + z: -31.3335927948 + theta: -1.8276711613 + kappa: -0.00068894666783 + s: 9.36841664794 + dkappa: 0 + } + v: 3.40000009537 + a: 0.398196786697 relative_time: 3.5199999809265137 - theta: -1.8276711613 - accumulated_s: 9.36841664794 -} -adc_trajectory_point { - x: -126.745890392 - y: 355.717802627 - z: -31.3338405546 - - speed: 3.40000009537 - acceleration_s: 0.407056699459 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.745890392 + y: 355.717802627 + z: -31.3338405546 + theta: -1.82776593486 + kappa: -0.00068894666783 + s: 9.40241664884 + dkappa: 0 + } + v: 3.40000009537 + a: 0.407056699459 relative_time: 3.5299999713897705 - theta: -1.82776593486 - accumulated_s: 9.40241664884 -} -adc_trajectory_point { - x: -126.754648152 - y: 355.685051341 - z: -31.3340082122 - - speed: 3.40833330154 - acceleration_s: 0.462455457942 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.754648152 + y: 355.685051341 + z: -31.3340082122 + theta: -1.8278023492 + kappa: -0.00068894666783 + s: 9.43649998184 + dkappa: 0 + } + v: 3.40833330154 + a: 0.462455457942 relative_time: 3.5399999618530273 - theta: -1.8278023492 - accumulated_s: 9.43649998184 -} -adc_trajectory_point { - x: -126.763448495 - y: 355.652292972 - z: -31.3342609107 - - speed: 3.40833330154 - acceleration_s: 0.381562232842 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.763448495 + y: 355.652292972 + z: -31.3342609107 + theta: -1.82787046192 + kappa: -0.00068894666783 + s: 9.47058331494 + dkappa: 0 + } + v: 3.40833330154 + a: 0.381562232842 relative_time: 3.5499999523162842 - theta: -1.82787046192 - accumulated_s: 9.47058331494 -} -adc_trajectory_point { - x: -126.772282738 - y: 355.619491568 - z: -31.3345955834 - - speed: 3.41666674614 - acceleration_s: 0.410086796217 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.772282738 + y: 355.619491568 + z: -31.3345955834 + theta: -1.82795142686 + kappa: -0.00068894666783 + s: 9.50474998234 + dkappa: 0 + } + v: 3.41666674614 + a: 0.410086796217 relative_time: 3.559999942779541 - theta: -1.82795142686 - accumulated_s: 9.50474998234 -} -adc_trajectory_point { - x: -126.781133488 - y: 355.586678912 - z: -31.3350851275 - - speed: 3.41666674614 - acceleration_s: 0.35893928034 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.781133488 + y: 355.586678912 + z: -31.3350851275 + theta: -1.8280057622 + kappa: -0.00068894666783 + s: 9.53891664984 + dkappa: 0 + } + v: 3.41666674614 + a: 0.35893928034 relative_time: 3.5699999332427979 - theta: -1.8280057622 - accumulated_s: 9.53891664984 -} -adc_trajectory_point { - x: -126.790019684 - y: 355.553830693 - z: -31.335596595 - - speed: 3.42222213745 - acceleration_s: 0.331296594619 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.790019684 + y: 355.553830693 + z: -31.335596595 + theta: -1.82807393538 + kappa: -0.00068894666783 + s: 9.57313887124 + dkappa: 0 + } + v: 3.42222213745 + a: 0.331296594619 relative_time: 3.5800001621246338 - theta: -1.82807393538 - accumulated_s: 9.57313887124 -} -adc_trajectory_point { - x: -126.798896547 - y: 355.520951207 - z: -31.3360372046 - - speed: 3.42222213745 - acceleration_s: 0.276233157637 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.798896547 + y: 355.520951207 + z: -31.3360372046 + theta: -1.82808393272 + kappa: -0.00068894666783 + s: 9.60736109254 + dkappa: 0 + } + v: 3.42222213745 + a: 0.276233157637 relative_time: 3.5900001525878906 - theta: -1.82808393272 - accumulated_s: 9.60736109254 -} -adc_trajectory_point { - x: -126.807794633 - y: 355.48805057 - z: -31.3366070502 - - speed: 3.43055558205 - acceleration_s: 0.276233157637 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.807794633 + y: 355.48805057 + z: -31.3366070502 + theta: -1.82810108706 + kappa: -0.00068894666783 + s: 9.64166664844 + dkappa: 0 + } + v: 3.43055558205 + a: 0.276233157637 relative_time: 3.6000001430511475 - theta: -1.82810108706 - accumulated_s: 9.64166664844 -} -adc_trajectory_point { - x: -126.816726871 - y: 355.45512329 - z: -31.3371098014 - - speed: 3.43055558205 - acceleration_s: 0.32429213174 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.816726871 + y: 355.45512329 + z: -31.3371098014 + theta: -1.82814618418 + kappa: -0.00068894666783 + s: 9.67597220424 + dkappa: 0 + } + v: 3.43055558205 + a: 0.32429213174 relative_time: 3.6100001335144043 - theta: -1.82814618418 - accumulated_s: 9.67597220424 -} -adc_trajectory_point { - x: -126.825647108 - y: 355.422181404 - z: -31.3377116378 - - speed: 3.43611121178 - acceleration_s: 0.218353440849 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.825647108 + y: 355.422181404 + z: -31.3377116378 + theta: -1.82816388197 + kappa: -0.00068894666783 + s: 9.71033331634 + dkappa: 0 + } + v: 3.43611121178 + a: 0.218353440849 relative_time: 3.6200001239776611 - theta: -1.82816388197 - accumulated_s: 9.71033331634 -} -adc_trajectory_point { - x: -126.834592031 - y: 355.389185418 - z: -31.3381782286 - - speed: 3.43611121178 - acceleration_s: 0.378146566685 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.834592031 + y: 355.389185418 + z: -31.3381782286 + theta: -1.82820396907 + kappa: -0.00068894666783 + s: 9.74469442844 + dkappa: 0 + } + v: 3.43611121178 + a: 0.378146566685 relative_time: 3.630000114440918 - theta: -1.82820396907 - accumulated_s: 9.74469442844 -} -adc_trajectory_point { - x: -126.843524209 - y: 355.356204879 - z: -31.3388533639 - - speed: 3.44166660309 - acceleration_s: 0.155025798903 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.843524209 + y: 355.356204879 + z: -31.3388533639 + theta: -1.82822069599 + kappa: -0.00068894666783 + s: 9.77911109444 + dkappa: 0 + } + v: 3.44166660309 + a: 0.155025798903 relative_time: 3.6400001049041748 - theta: -1.82822069599 - accumulated_s: 9.77911109444 -} -adc_trajectory_point { - x: -126.843524209 - y: 355.356204879 - z: -31.3388533639 - - speed: 3.44166660309 - acceleration_s: 0.155025798903 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.843524209 + y: 355.356204879 + z: -31.3388533639 + theta: -1.82822069599 + kappa: -0.00068894666783 + s: 9.81352776054 + dkappa: 0 + } + v: 3.44166660309 + a: 0.155025798903 relative_time: 3.6400001049041748 - theta: -1.82822069599 - accumulated_s: 9.81352776054 -} -adc_trajectory_point { - x: -126.843524209 - y: 355.356204879 - z: -31.3388533639 - - speed: 3.45000004768 - acceleration_s: 0.155025798903 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.843524209 + y: 355.356204879 + z: -31.3388533639 + theta: -1.82822069599 + kappa: -0.00068894666783 + s: 9.84802776094 + dkappa: 0 + } + v: 3.45000004768 + a: 0.155025798903 relative_time: 3.6400001049041748 - theta: -1.82822069599 - accumulated_s: 9.84802776094 -} -adc_trajectory_point { - x: -126.870397211 - y: 355.257037275 - z: -31.3403574452 - - speed: 3.45000004768 - acceleration_s: 0.254390886898 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.870397211 + y: 355.257037275 + z: -31.3403574452 + theta: -1.82831717659 + kappa: -0.00068894666783 + s: 9.88252776144 + dkappa: 0 + } + v: 3.45000004768 + a: 0.254390886898 relative_time: 3.6700000762939453 - theta: -1.82831717659 - accumulated_s: 9.88252776144 -} -adc_trajectory_point { - x: -126.879311763 - y: 355.22398288 - z: -31.340970126 - - speed: 3.455555439 - acceleration_s: 0.0126645717709 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.879311763 + y: 355.22398288 + z: -31.340970126 + theta: -1.82833517327 + kappa: -0.00068894666783 + s: 9.91708331584 + dkappa: 0 + } + v: 3.455555439 + a: 0.0126645717709 relative_time: 3.6800000667572021 - theta: -1.82833517327 - accumulated_s: 9.91708331584 -} -adc_trajectory_point { - x: -126.888256094 - y: 355.190846419 - z: -31.3412571475 - - speed: 3.455555439 - acceleration_s: 0.24582949855 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.888256094 + y: 355.190846419 + z: -31.3412571475 + theta: -1.8283773573 + kappa: -0.00068894666783 + s: 9.95163887024 + dkappa: 0 + } + v: 3.455555439 + a: 0.24582949855 relative_time: 3.690000057220459 - theta: -1.8283773573 - accumulated_s: 9.95163887024 -} -adc_trajectory_point { - x: -126.888256094 - y: 355.190846419 - z: -31.3412571475 - - speed: 3.46111106873 - acceleration_s: 0.24582949855 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.888256094 + y: 355.190846419 + z: -31.3412571475 + theta: -1.8283773573 + kappa: -0.00068894666783 + s: 9.98624998094 + dkappa: 0 + } + v: 3.46111106873 + a: 0.24582949855 relative_time: 3.690000057220459 - theta: -1.8283773573 - accumulated_s: 9.98624998094 -} -adc_trajectory_point { - x: -126.906090232 - y: 355.124632865 - z: -31.3422407927 - - speed: 3.46111106873 - acceleration_s: 0.156962958221 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.906090232 + y: 355.124632865 + z: -31.3422407927 + theta: -1.82848761211 + kappa: -0.00068894666783 + s: 10.02086109164 + dkappa: 0 + } + v: 3.46111106873 + a: 0.156962958221 relative_time: 3.7100000381469727 - theta: -1.82848761211 - accumulated_s: 10.02086109164 -} -adc_trajectory_point { - x: -126.914983567 - y: 355.091498265 - z: -31.3426592052 - - speed: 3.46666669846 - acceleration_s: 0.156962958221 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.914983567 + y: 355.091498265 + z: -31.3426592052 + theta: -1.82849070383 + kappa: -0.00068894666783 + s: 10.05552775864 + dkappa: 0 + } + v: 3.46666669846 + a: 0.156962958221 relative_time: 3.7200000286102295 - theta: -1.82849070383 - accumulated_s: 10.05552775864 -} -adc_trajectory_point { - x: -126.923887147 - y: 355.058330606 - z: -31.3429553006 - - speed: 3.46666669846 - acceleration_s: 0.169272815993 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.923887147 + y: 355.058330606 + z: -31.3429553006 + theta: -1.82852467193 + kappa: -0.00068894666783 + s: 10.09019442554 + dkappa: 0 + } + v: 3.46666669846 + a: 0.169272815993 relative_time: 3.7300000190734863 - theta: -1.82852467193 - accumulated_s: 10.09019442554 -} -adc_trajectory_point { - x: -126.932845484 - y: 355.025188265 - z: -31.3433769848 - - speed: 3.47222232819 - acceleration_s: 0.128742064854 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.932845484 + y: 355.025188265 + z: -31.3433769848 + theta: -1.82861436689 + kappa: -0.00068894666783 + s: 10.12491664884 + dkappa: 0 + } + v: 3.47222232819 + a: 0.128742064854 relative_time: 3.7400000095367432 - theta: -1.82861436689 - accumulated_s: 10.12491664884 -} -adc_trajectory_point { - x: -126.94178364 - y: 354.992004229 - z: -31.3436619332 - - speed: 3.47222232819 - acceleration_s: 0.128742064854 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.94178364 + y: 354.992004229 + z: -31.3436619332 + theta: -1.82867596843 + kappa: -0.00068894666783 + s: 10.15963887214 + dkappa: 0 + } + v: 3.47222232819 + a: 0.128742064854 relative_time: 3.75 - theta: -1.82867596843 - accumulated_s: 10.15963887214 -} -adc_trajectory_point { - x: -126.950761742 - y: 354.958826794 - z: -31.3439055979 - - speed: 3.4777777195 - acceleration_s: 0.135960393918 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.950761742 + y: 354.958826794 + z: -31.3439055979 + theta: -1.8287491962 + kappa: -0.00068894666783 + s: 10.19441664934 + dkappa: 0 + } + v: 3.4777777195 + a: 0.135960393918 relative_time: 3.7599999904632568 - theta: -1.8287491962 - accumulated_s: 10.19441664934 -} -adc_trajectory_point { - x: -126.959732795 - y: 354.925645279 - z: -31.3440575274 - - speed: 3.4777777195 - acceleration_s: 0.0921660935908 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.959732795 + y: 354.925645279 + z: -31.3440575274 + theta: -1.82878160535 + kappa: -0.00068894666783 + s: 10.22919442654 + dkappa: 0 + } + v: 3.4777777195 + a: 0.0921660935908 relative_time: 3.7699999809265137 - theta: -1.82878160535 - accumulated_s: 10.22919442654 -} -adc_trajectory_point { - x: -126.968845043 - y: 354.892225725 - z: -31.3443499766 - - speed: 3.4777777195 - acceleration_s: 0.104852912322 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.968845043 + y: 354.892225725 + z: -31.3443499766 + theta: -1.82886115252 + kappa: -0.00068894666783 + s: 10.26397220374 + dkappa: 0 + } + v: 3.4777777195 + a: 0.104852912322 relative_time: 3.7799999713897705 - theta: -1.82886115252 - accumulated_s: 10.26397220374 -} -adc_trajectory_point { - x: -126.977920106 - y: 354.858845057 - z: -31.3445986081 - - speed: 3.48611116409 - acceleration_s: 0.0743572609513 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.977920106 + y: 354.858845057 + z: -31.3445986081 + theta: -1.82888331647 + kappa: -0.00068894666783 + s: 10.29883331534 + dkappa: 0 + } + v: 3.48611116409 + a: 0.0743572609513 relative_time: 3.7899999618530273 - theta: -1.82888331647 - accumulated_s: 10.29883331534 -} -adc_trajectory_point { - x: -126.987026937 - y: 354.825460923 - z: -31.3446845347 - - speed: 3.48611116409 - acceleration_s: 0.0743572609513 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.987026937 + y: 354.825460923 + z: -31.3446845347 + theta: -1.82893094731 + kappa: -0.00068894666783 + s: 10.33369442704 + dkappa: 0 + } + v: 3.48611116409 + a: 0.0743572609513 relative_time: 3.7999999523162842 - theta: -1.82893094731 - accumulated_s: 10.33369442704 -} -adc_trajectory_point { - x: -126.996118589 - y: 354.792068672 - z: -31.344827082 - - speed: 3.48888897896 - acceleration_s: 0.070383169644 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -126.996118589 + y: 354.792068672 + z: -31.344827082 + theta: -1.82893262628 + kappa: -0.00068894666783 + s: 10.36858331684 + dkappa: 0 + } + v: 3.48888897896 + a: 0.070383169644 relative_time: 3.809999942779541 - theta: -1.82893262628 - accumulated_s: 10.36858331684 -} -adc_trajectory_point { - x: -127.005245278 - y: 354.7586637 - z: -31.3449398251 - - speed: 3.48888897896 - acceleration_s: 0.119709390437 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.005245278 + y: 354.7586637 + z: -31.3449398251 + theta: -1.82897739732 + kappa: -0.00068894666783 + s: 10.40347220664 + dkappa: 0 + } + v: 3.48888897896 + a: 0.119709390437 relative_time: 3.8199999332427979 - theta: -1.82897739732 - accumulated_s: 10.40347220664 -} -adc_trajectory_point { - x: -127.014377668 - y: 354.72526672 - z: -31.3451361712 - - speed: 3.49444437027 - acceleration_s: 0.0751073695378 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.014377668 + y: 354.72526672 + z: -31.3451361712 + theta: -1.82904601912 + kappa: -0.00068894666783 + s: 10.43841665034 + dkappa: 0 + } + v: 3.49444437027 + a: 0.0751073695378 relative_time: 3.8300001621246338 - theta: -1.82904601912 - accumulated_s: 10.43841665034 -} -adc_trajectory_point { - x: -127.023511394 - y: 354.691835324 - z: -31.3451459203 - - speed: 3.49444437027 - acceleration_s: 0.140743091578 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.023511394 + y: 354.691835324 + z: -31.3451459203 + theta: -1.82911105592 + kappa: -0.00068894666783 + s: 10.47336109404 + dkappa: 0 + } + v: 3.49444437027 + a: 0.140743091578 relative_time: 3.8400001525878906 - theta: -1.82911105592 - accumulated_s: 10.47336109404 -} -adc_trajectory_point { - x: -127.032643564 - y: 354.65840443 - z: -31.3451923309 - - speed: 3.49722218513 - acceleration_s: 0.129740223018 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.032643564 + y: 354.65840443 + z: -31.3451923309 + theta: -1.82915697214 + kappa: -0.00068894666783 + s: 10.50833331584 + dkappa: 0 + } + v: 3.49722218513 + a: 0.129740223018 relative_time: 3.8500001430511475 - theta: -1.82915697214 - accumulated_s: 10.50833331584 -} -adc_trajectory_point { - x: -127.041741357 - y: 354.624959016 - z: -31.345202636 - - speed: 3.49722218513 - acceleration_s: 0.0698403466267 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.041741357 + y: 354.624959016 + z: -31.345202636 + theta: -1.82918546224 + kappa: -0.00068894666783 + s: 10.54330553774 + dkappa: 0 + } + v: 3.49722218513 + a: 0.0698403466267 relative_time: 3.8600001335144043 - theta: -1.82918546224 - accumulated_s: 10.54330553774 -} -adc_trajectory_point { - x: -127.050838768 - y: 354.591507994 - z: -31.3452956183 - - speed: 3.49722218513 - acceleration_s: 0.102952163422 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.050838768 + y: 354.591507994 + z: -31.3452956183 + theta: -1.8292184562 + kappa: -0.00068894666783 + s: 10.57827775954 + dkappa: 0 + } + v: 3.49722218513 + a: 0.102952163422 relative_time: 3.8700001239776611 - theta: -1.8292184562 - accumulated_s: 10.57827775954 -} -adc_trajectory_point { - x: -127.059920682 - y: 354.558039646 - z: -31.3453835277 - - speed: 3.49722218513 - acceleration_s: 0.125030207742 - curvature: -0.00068894666783 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.059920682 + y: 354.558039646 + z: -31.3453835277 + theta: -1.82930011786 + kappa: -0.00068894666783 + s: 10.61324998144 + dkappa: 0 + } + v: 3.49722218513 + a: 0.125030207742 relative_time: 3.880000114440918 - theta: -1.82930011786 - accumulated_s: 10.61324998144 -} -adc_trajectory_point { - x: -127.069007327 - y: 354.524558985 - z: -31.3454027781 - - speed: 3.49722218513 - acceleration_s: 0.100108782099 - curvature: -0.000650671714967 - curvature_change_rate: 0.00109443869554 +} +trajectory_point { + path_point { + x: -127.069007327 + y: 354.524558985 + z: -31.3454027781 + theta: -1.82935923457 + kappa: -0.000650671714967 + s: 10.64822220324 + dkappa: 0.00109443869554 + } + v: 3.49722218513 + a: 0.100108782099 relative_time: 3.8900001049041748 - theta: -1.82935923457 - accumulated_s: 10.64822220324 -} -adc_trajectory_point { - x: -127.069007327 - y: 354.524558985 - z: -31.3454027781 - - speed: 3.49722218513 - acceleration_s: 0.100108782099 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.069007327 + y: 354.524558985 + z: -31.3454027781 + theta: -1.82935923457 + kappa: -0.000650671714967 + s: 10.68319442514 + dkappa: 0 + } + v: 3.49722218513 + a: 0.100108782099 relative_time: 3.8900001049041748 - theta: -1.82935923457 - accumulated_s: 10.68319442514 -} -adc_trajectory_point { - x: -127.087131159 - y: 354.457564805 - z: -31.3453779882 - - speed: 3.49722218513 - acceleration_s: 0.136465245228 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.087131159 + y: 354.457564805 + z: -31.3453779882 + theta: -1.82945501367 + kappa: -0.000650671714967 + s: 10.71816664694 + dkappa: 0 + } + v: 3.49722218513 + a: 0.136465245228 relative_time: 3.9100000858306885 - theta: -1.82945501367 - accumulated_s: 10.71816664694 -} -adc_trajectory_point { - x: -127.09618456 - y: 354.424078302 - z: -31.3453200571 - - speed: 3.49722218513 - acceleration_s: -0.0660130467235 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.09618456 + y: 354.424078302 + z: -31.3453200571 + theta: -1.82948641199 + kappa: -0.000650671714967 + s: 10.75313886884 + dkappa: 0 + } + v: 3.49722218513 + a: -0.0660130467235 relative_time: 3.9200000762939453 - theta: -1.82948641199 - accumulated_s: 10.75313886884 -} -adc_trajectory_point { - x: -127.105212885 - y: 354.390589505 - z: -31.3452071091 - - speed: 3.49722218513 - acceleration_s: -0.0249797199174 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.105212885 + y: 354.390589505 + z: -31.3452071091 + theta: -1.82951068129 + kappa: -0.000650671714967 + s: 10.78811109064 + dkappa: 0 + } + v: 3.49722218513 + a: -0.0249797199174 relative_time: 3.9300000667572021 - theta: -1.82951068129 - accumulated_s: 10.78811109064 -} -adc_trajectory_point { - x: -127.114306368 - y: 354.357115855 - z: -31.3451743815 - - speed: 3.49722218513 - acceleration_s: -0.048503940321 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.114306368 + y: 354.357115855 + z: -31.3451743815 + theta: -1.82959902092 + kappa: -0.000650671714967 + s: 10.82308331254 + dkappa: 0 + } + v: 3.49722218513 + a: -0.048503940321 relative_time: 3.940000057220459 - theta: -1.82959902092 - accumulated_s: 10.82308331254 -} -adc_trajectory_point { - x: -127.114306368 - y: 354.357115855 - z: -31.3451743815 - - speed: 3.5 - acceleration_s: -0.048503940321 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.114306368 + y: 354.357115855 + z: -31.3451743815 + theta: -1.82959902092 + kappa: -0.000650671714967 + s: 10.85808331254 + dkappa: 0 + } + v: 3.5 + a: -0.048503940321 relative_time: 3.940000057220459 - theta: -1.82959902092 - accumulated_s: 10.85808331254 -} -adc_trajectory_point { - x: -127.132468752 - y: 354.29014 - z: -31.3449956318 - - speed: 3.5 - acceleration_s: 0.00437034875301 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.132468752 + y: 354.29014 + z: -31.3449956318 + theta: -1.82967998586 + kappa: -0.000650671714967 + s: 10.89308331254 + dkappa: 0 + } + v: 3.5 + a: 0.00437034875301 relative_time: 3.9600000381469727 - theta: -1.82967998586 - accumulated_s: 10.89308331254 -} -adc_trajectory_point { - x: -127.141546712 - y: 354.256640033 - z: -31.3447698774 - - speed: 3.5 - acceleration_s: 0.0539961257544 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.141546712 + y: 354.256640033 + z: -31.3447698774 + theta: -1.82967703275 + kappa: -0.000650671714967 + s: 10.92808331254 + dkappa: 0 + } + v: 3.5 + a: 0.0539961257544 relative_time: 3.9700000286102295 - theta: -1.82967703275 - accumulated_s: 10.92808331254 -} -adc_trajectory_point { - x: -127.150674473 - y: 354.223174755 - z: -31.3446746515 - - speed: 3.5 - acceleration_s: 0.0166207486735 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.150674473 + y: 354.223174755 + z: -31.3446746515 + theta: -1.82973850988 + kappa: -0.000650671714967 + s: 10.96308331254 + dkappa: 0 + } + v: 3.5 + a: 0.0166207486735 relative_time: 3.9800000190734863 - theta: -1.82973850988 - accumulated_s: 10.96308331254 -} -adc_trajectory_point { - x: -127.159820198 - y: 354.189687125 - z: -31.3445321759 - - speed: 3.50277781487 - acceleration_s: 0.0610884625379 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.159820198 + y: 354.189687125 + z: -31.3445321759 + theta: -1.82976633702 + kappa: -0.000650671714967 + s: 10.99811109064 + dkappa: 0 + } + v: 3.50277781487 + a: 0.0610884625379 relative_time: 3.9900000095367432 - theta: -1.82976633702 - accumulated_s: 10.99811109064 -} -adc_trajectory_point { - x: -127.168969071 - y: 354.156205111 - z: -31.3444438847 - - speed: 3.50277781487 - acceleration_s: 0.0610884625379 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.168969071 + y: 354.156205111 + z: -31.3444438847 + theta: -1.82977832509 + kappa: -0.000650671714967 + s: 11.03313886884 + dkappa: 0 + } + v: 3.50277781487 + a: 0.0610884625379 relative_time: 4 - theta: -1.82977832509 - accumulated_s: 11.03313886884 -} -adc_trajectory_point { - x: -127.178129942 - y: 354.122715923 - z: -31.3441801267 - - speed: 3.50555562973 - acceleration_s: 0.0171917654006 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.178129942 + y: 354.122715923 + z: -31.3441801267 + theta: -1.82979912619 + kappa: -0.000650671714967 + s: 11.06819442514 + dkappa: 0 + } + v: 3.50555562973 + a: 0.0171917654006 relative_time: 4.0099999904632568 - theta: -1.82979912619 - accumulated_s: 11.06819442514 -} -adc_trajectory_point { - x: -127.1872916 - y: 354.08924327 - z: -31.3440388041 - - speed: 3.50555562973 - acceleration_s: -0.0246935139104 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.1872916 + y: 354.08924327 + z: -31.3440388041 + theta: -1.82983598313 + kappa: -0.000650671714967 + s: 11.10324998144 + dkappa: 0 + } + v: 3.50555562973 + a: -0.0246935139104 relative_time: 4.0199999809265137 - theta: -1.82983598313 - accumulated_s: 11.10324998144 -} -adc_trajectory_point { - x: -127.196444175 - y: 354.055745947 - z: -31.343894613 - - speed: 3.50555562973 - acceleration_s: 0.029217316152 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.196444175 + y: 354.055745947 + z: -31.343894613 + theta: -1.82984557377 + kappa: -0.000650671714967 + s: 11.13830553774 + dkappa: 0 + } + v: 3.50555562973 + a: 0.029217316152 relative_time: 4.0299999713897705 - theta: -1.82984557377 - accumulated_s: 11.13830553774 -} -adc_trajectory_point { - x: -127.205629271 - y: 354.022270959 - z: -31.3438157281 - - speed: 3.50555562973 - acceleration_s: 0.0632390704121 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.205629271 + y: 354.022270959 + z: -31.3438157281 + theta: -1.82992024271 + kappa: -0.000650671714967 + s: 11.17336109404 + dkappa: 0 + } + v: 3.50555562973 + a: 0.0632390704121 relative_time: 4.0399999618530273 - theta: -1.82992024271 - accumulated_s: 11.17336109404 -} -adc_trajectory_point { - x: -127.214820714 - y: 353.988772922 - z: -31.343679429 - - speed: 3.5083334446 - acceleration_s: 0.0632390704121 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.214820714 + y: 353.988772922 + z: -31.343679429 + theta: -1.82999209665 + kappa: -0.000650671714967 + s: 11.20844442844 + dkappa: 0 + } + v: 3.5083334446 + a: 0.0632390704121 relative_time: 4.0499999523162842 - theta: -1.82999209665 - accumulated_s: 11.20844442844 -} -adc_trajectory_point { - x: -127.223934396 - y: 353.955248469 - z: -31.3435372906 - - speed: 3.5083334446 - acceleration_s: 0.080489073689 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.223934396 + y: 353.955248469 + z: -31.3435372906 + theta: -1.82998936836 + kappa: -0.000650671714967 + s: 11.24352776294 + dkappa: 0 + } + v: 3.5083334446 + a: 0.080489073689 relative_time: 4.059999942779541 - theta: -1.82998936836 - accumulated_s: 11.24352776294 -} -adc_trajectory_point { - x: -127.233079158 - y: 353.921744536 - z: -31.3434529463 - - speed: 3.51111102104 - acceleration_s: -0.0491628331971 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.233079158 + y: 353.921744536 + z: -31.3434529463 + theta: -1.83003833333 + kappa: -0.000650671714967 + s: 11.27863887314 + dkappa: 0 + } + v: 3.51111102104 + a: -0.0491628331971 relative_time: 4.0699999332427979 - theta: -1.83003833333 - accumulated_s: 11.27863887314 -} -adc_trajectory_point { - x: -127.242215302 - y: 353.888209575 - z: -31.3433400812 - - speed: 3.51111102104 - acceleration_s: 0.125815518791 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.242215302 + y: 353.888209575 + z: -31.3433400812 + theta: -1.83008827199 + kappa: -0.000650671714967 + s: 11.31374998334 + dkappa: 0 + } + v: 3.51111102104 + a: 0.125815518791 relative_time: 4.0800001621246338 - theta: -1.83008827199 - accumulated_s: 11.31374998334 -} -adc_trajectory_point { - x: -127.25133237 - y: 353.854701581 - z: -31.343334713 - - speed: 3.51111102104 - acceleration_s: -0.0753108616618 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.25133237 + y: 353.854701581 + z: -31.343334713 + theta: -1.83012063751 + kappa: -0.000650671714967 + s: 11.34886109354 + dkappa: 0 + } + v: 3.51111102104 + a: -0.0753108616618 relative_time: 4.0900001525878906 - theta: -1.83012063751 - accumulated_s: 11.34886109354 -} -adc_trajectory_point { - x: -127.25133237 - y: 353.854701581 - z: -31.343334713 - - speed: 3.51111102104 - acceleration_s: -0.0753108616618 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.25133237 + y: 353.854701581 + z: -31.343334713 + theta: -1.83012063751 + kappa: -0.000650671714967 + s: 11.38397220374 + dkappa: 0 + } + v: 3.51111102104 + a: -0.0753108616618 relative_time: 4.0900001525878906 - theta: -1.83012063751 - accumulated_s: 11.38397220374 -} -adc_trajectory_point { - x: -127.260465701 - y: 353.821174366 - z: -31.3431319427 - - speed: 3.51111102104 - acceleration_s: 0.0284058578204 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.260465701 + y: 353.821174366 + z: -31.3431319427 + theta: -1.83018895846 + kappa: -0.000650671714967 + s: 11.41908331394 + dkappa: 0 + } + v: 3.51111102104 + a: 0.0284058578204 relative_time: 4.1000001430511475 - theta: -1.83018895846 - accumulated_s: 11.41908331394 -} -adc_trajectory_point { - x: -127.278645517 - y: 353.75417139 - z: -31.3427735092 - - speed: 3.5083334446 - acceleration_s: -0.143244759665 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.278645517 + y: 353.75417139 + z: -31.3427735092 + theta: -1.83033064983 + kappa: -0.000650671714967 + s: 11.45416664844 + dkappa: 0 + } + v: 3.5083334446 + a: -0.143244759665 relative_time: 4.1200001239776611 - theta: -1.83033064983 - accumulated_s: 11.45416664844 -} -adc_trajectory_point { - x: -127.287726602 - y: 353.720680013 - z: -31.3427321464 - - speed: 3.5083334446 - acceleration_s: 0.0137720136515 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.287726602 + y: 353.720680013 + z: -31.3427321464 + theta: -1.83032837069 + kappa: -0.000650671714967 + s: 11.48924998284 + dkappa: 0 + } + v: 3.5083334446 + a: 0.0137720136515 relative_time: 4.130000114440918 - theta: -1.83032837069 - accumulated_s: 11.48924998284 -} -adc_trajectory_point { - x: -127.296827498 - y: 353.687184372 - z: -31.342702006 - - speed: 3.51111102104 - acceleration_s: -0.0666400244512 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.296827498 + y: 353.687184372 + z: -31.342702006 + theta: -1.83040303824 + kappa: -0.000650671714967 + s: 11.52436109304 + dkappa: 0 + } + v: 3.51111102104 + a: -0.0666400244512 relative_time: 4.1400001049041748 - theta: -1.83040303824 - accumulated_s: 11.52436109304 -} -adc_trajectory_point { - x: -127.305958054 - y: 353.653664985 - z: -31.3424840998 - - speed: 3.51111102104 - acceleration_s: 0.154026797915 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.305958054 + y: 353.653664985 + z: -31.3424840998 + theta: -1.83048015605 + kappa: -0.000650671714967 + s: 11.55947220324 + dkappa: 0 + } + v: 3.51111102104 + a: 0.154026797915 relative_time: 4.1500000953674316 - theta: -1.83048015605 - accumulated_s: 11.55947220324 -} -adc_trajectory_point { - x: -127.315100194 - y: 353.620166606 - z: -31.34229057 - - speed: 3.51388883591 - acceleration_s: -0.0498033602618 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.315100194 + y: 353.620166606 + z: -31.34229057 + theta: -1.83052274121 + kappa: -0.000650671714967 + s: 11.59461109164 + dkappa: 0 + } + v: 3.51388883591 + a: -0.0498033602618 relative_time: 4.1600000858306885 - theta: -1.83052274121 - accumulated_s: 11.59461109164 -} -adc_trajectory_point { - x: -127.324251173 - y: 353.586648334 - z: -31.3422872778 - - speed: 3.51388883591 - acceleration_s: 0.162973212394 - curvature: -0.000650671714967 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.324251173 + y: 353.586648334 + z: -31.3422872778 + theta: -1.83056090677 + kappa: -0.000650671714967 + s: 11.62974997994 + dkappa: 0 + } + v: 3.51388883591 + a: 0.162973212394 relative_time: 4.1700000762939453 - theta: -1.83056090677 - accumulated_s: 11.62974997994 -} -adc_trajectory_point { - x: -127.333418671 - y: 353.553179486 - z: -31.3423312837 - - speed: 3.51111102104 - acceleration_s: -0.141101185711 - curvature: -0.000612396831201 - curvature_change_rate: 0.001090107477 +} +trajectory_point { + path_point { + x: -127.333418671 + y: 353.553179486 + z: -31.3423312837 + theta: -1.83058190642 + kappa: -0.000612396831201 + s: 11.66486109014 + dkappa: 0.001090107477 + } + v: 3.51111102104 + a: -0.141101185711 relative_time: 4.1800000667572021 - theta: -1.83058190642 - accumulated_s: 11.66486109014 -} -adc_trajectory_point { - x: -127.342681013 - y: 353.519700849 - z: -31.3420709325 - - speed: 3.51111102104 - acceleration_s: -0.0517334296119 - curvature: -0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.342681013 + y: 353.519700849 + z: -31.3420709325 + theta: -1.83064560254 + kappa: -0.000612396831201 + s: 11.69997220044 + dkappa: 0 + } + v: 3.51111102104 + a: -0.0517334296119 relative_time: 4.190000057220459 - theta: -1.83064560254 - accumulated_s: 11.69997220044 -} -adc_trajectory_point { - x: -127.342681013 - y: 353.519700849 - z: -31.3420709325 - - speed: 3.5083334446 - acceleration_s: -0.0517334296119 - curvature: -0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.342681013 + y: 353.519700849 + z: -31.3420709325 + theta: -1.83064560254 + kappa: -0.000612396831201 + s: 11.73505553484 + dkappa: 0 + } + v: 3.5083334446 + a: -0.0517334296119 relative_time: 4.190000057220459 - theta: -1.83064560254 - accumulated_s: 11.73505553484 -} -adc_trajectory_point { - x: -127.36116599 - y: 353.452817985 - z: -31.3417495564 - - speed: 3.5083334446 - acceleration_s: -0.0942125079577 - curvature: -0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.36116599 + y: 353.452817985 + z: -31.3417495564 + theta: -1.83073502772 + kappa: -0.000612396831201 + s: 11.77013886924 + dkappa: 0 + } + v: 3.5083334446 + a: -0.0942125079577 relative_time: 4.2100000381469727 - theta: -1.83073502772 - accumulated_s: 11.77013886924 -} -adc_trajectory_point { - x: -127.37042041 - y: 353.419382693 - z: -31.3417761633 - - speed: 3.50555562973 - acceleration_s: -0.0336458274378 - curvature: -0.000574121962009 - curvature_change_rate: 0.00109183459727 +} +trajectory_point { + path_point { + x: -127.37042041 + y: 353.419382693 + z: -31.3417761633 + theta: -1.83074813734 + kappa: -0.000574121962009 + s: 11.80519442554 + dkappa: 0.00109183459727 + } + v: 3.50555562973 + a: -0.0336458274378 relative_time: 4.2200000286102295 - theta: -1.83074813734 - accumulated_s: 11.80519442554 -} -adc_trajectory_point { - x: -127.379685011 - y: 353.385927859 - z: -31.341597436 - - speed: 3.50555562973 - acceleration_s: 0.0668762718841 - curvature: -0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.379685011 + y: 353.385927859 + z: -31.341597436 + theta: -1.8307699959 + kappa: -0.000574121962009 + s: 11.84024998184 + dkappa: 0 + } + v: 3.50555562973 + a: 0.0668762718841 relative_time: 4.2300000190734863 - theta: -1.8307699959 - accumulated_s: 11.84024998184 -} -adc_trajectory_point { - x: -127.38893948 - y: 353.352510714 - z: -31.3415910527 - - speed: 3.50555562973 - acceleration_s: -0.0624050681945 - curvature: -0.00053584710648 - curvature_change_rate: 0.00109183420752 +} +trajectory_point { + path_point { + x: -127.38893948 + y: 353.352510714 + z: -31.3415910527 + theta: -1.83080014569 + kappa: -0.00053584710648 + s: 11.87530553814 + dkappa: 0.00109183420752 + } + v: 3.50555562973 + a: -0.0624050681945 relative_time: 4.2400000095367432 - theta: -1.83080014569 - accumulated_s: 11.87530553814 -} -adc_trajectory_point { - x: -127.38893948 - y: 353.352510714 - z: -31.3415910527 - - speed: 3.50555562973 - acceleration_s: -0.0624050681945 - curvature: -0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.38893948 + y: 353.352510714 + z: -31.3415910527 + theta: -1.83080014569 + kappa: -0.00053584710648 + s: 11.91036109444 + dkappa: 0 + } + v: 3.50555562973 + a: -0.0624050681945 relative_time: 4.2400000095367432 - theta: -1.83080014569 - accumulated_s: 11.91036109444 -} -adc_trajectory_point { - x: -127.407486713 - y: 353.285614588 - z: -31.3412877694 - - speed: 3.50555562973 - acceleration_s: -0.0603550657043 - curvature: -0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.407486713 + y: 353.285614588 + z: -31.3412877694 + theta: -1.83091574367 + kappa: -0.00053584710648 + s: 11.94541665074 + dkappa: 0 + } + v: 3.50555562973 + a: -0.0603550657043 relative_time: 4.2599999904632568 - theta: -1.83091574367 - accumulated_s: 11.94541665074 -} -adc_trajectory_point { - x: -127.41675961 - y: 353.252149643 - z: -31.3411435066 - - speed: 3.50277781487 - acceleration_s: 0.0943058075574 - curvature: -0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.41675961 + y: 353.252149643 + z: -31.3411435066 + theta: -1.83096402222 + kappa: -0.00053584710648 + s: 11.98044442894 + dkappa: 0 + } + v: 3.50277781487 + a: 0.0943058075574 relative_time: 4.2699999809265137 - theta: -1.83096402222 - accumulated_s: 11.98044442894 -} -adc_trajectory_point { - x: -127.425972495 - y: 353.218729213 - z: -31.3410838377 - - speed: 3.50277781487 - acceleration_s: -0.140005243068 - curvature: -0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.425972495 + y: 353.218729213 + z: -31.3410838377 + theta: -1.83097341345 + kappa: -0.00053584710648 + s: 12.01547220704 + dkappa: 0 + } + v: 3.50277781487 + a: -0.140005243068 relative_time: 4.2799999713897705 - theta: -1.83097341345 - accumulated_s: 12.01547220704 -} -adc_trajectory_point { - x: -127.435203826 - y: 353.185267974 - z: -31.3408259097 - - speed: 3.50277781487 - acceleration_s: -0.0260910511436 - curvature: -0.000459297432768 - curvature_change_rate: 0.00218539906777 +} +trajectory_point { + path_point { + x: -127.435203826 + y: 353.185267974 + z: -31.3408259097 + theta: -1.8310217043 + kappa: -0.000459297432768 + s: 12.05049998524 + dkappa: 0.00218539906777 + } + v: 3.50277781487 + a: -0.0260910511436 relative_time: 4.2899999618530273 - theta: -1.8310217043 - accumulated_s: 12.05049998524 -} -adc_trajectory_point { - x: -127.444435751 - y: 353.151844245 - z: -31.3408429427 - - speed: 3.50277781487 - acceleration_s: -0.0616759587855 - curvature: -0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.444435751 + y: 353.151844245 + z: -31.3408429427 + theta: -1.83107682585 + kappa: -0.000459297432768 + s: 12.08552776334 + dkappa: 0 + } + v: 3.50277781487 + a: -0.0616759587855 relative_time: 4.2999999523162842 - theta: -1.83107682585 - accumulated_s: 12.08552776334 -} -adc_trajectory_point { - x: -127.45365022 - y: 353.118401612 - z: -31.3407579828 - - speed: 3.5 - acceleration_s: -0.0203062887987 - curvature: -0.000382747802778 - curvature_change_rate: 0.00218713228543 +} +trajectory_point { + path_point { + x: -127.45365022 + y: 353.118401612 + z: -31.3407579828 + theta: -1.83113331783 + kappa: -0.000382747802778 + s: 12.12052776334 + dkappa: 0.00218713228543 + } + v: 3.5 + a: -0.0203062887987 relative_time: 4.309999942779541 - theta: -1.83113331783 - accumulated_s: 12.12052776334 -} -adc_trajectory_point { - x: -127.462881144 - y: 353.084978017 - z: -31.3406273052 - - speed: 3.5 - acceleration_s: -0.0723565693088 - curvature: -0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.462881144 + y: 353.084978017 + z: -31.3406273052 + theta: -1.83119552366 + kappa: -0.000382747802778 + s: 12.15552776334 + dkappa: 0 + } + v: 3.5 + a: -0.0723565693088 relative_time: 4.3199999332427979 - theta: -1.83119552366 - accumulated_s: 12.15552776334 -} -adc_trajectory_point { - x: -127.462881144 - y: 353.084978017 - z: -31.3406273052 - - speed: 3.50277781487 - acceleration_s: -0.0723565693088 - curvature: -0.000267923397025 - curvature_change_rate: 0.0032780956093 +} +trajectory_point { + path_point { + x: -127.462881144 + y: 353.084978017 + z: -31.3406273052 + theta: -1.83119552366 + kappa: -0.000267923397025 + s: 12.19055554154 + dkappa: 0.0032780956093 + } + v: 3.50277781487 + a: -0.0723565693088 relative_time: 4.3199999332427979 - theta: -1.83119552366 - accumulated_s: 12.19055554154 -} -adc_trajectory_point { - x: -127.481292053 - y: 353.018133317 - z: -31.3403774407 - - speed: 3.50277781487 - acceleration_s: -0.128554803024 - curvature: -0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.481292053 + y: 353.018133317 + z: -31.3403774407 + theta: -1.83126742553 + kappa: -0.000267923397025 + s: 12.22558331964 + dkappa: 0 + } + v: 3.50277781487 + a: -0.128554803024 relative_time: 4.3400001525878906 - theta: -1.83126742553 - accumulated_s: 12.22558331964 -} -adc_trajectory_point { - x: -127.490530961 - y: 352.984730905 - z: -31.3403131105 - - speed: 3.5 - acceleration_s: -0.128554803024 - curvature: -0.00022964861801 - curvature_change_rate: 0.00109356511473 +} +trajectory_point { + path_point { + x: -127.490530961 + y: 352.984730905 + z: -31.3403131105 + theta: -1.83133791977 + kappa: -0.00022964861801 + s: 12.26058331964 + dkappa: 0.00109356511473 + } + v: 3.5 + a: -0.128554803024 relative_time: 4.3500001430511475 - theta: -1.83133791977 - accumulated_s: 12.26058331964 -} -adc_trajectory_point { - x: -127.499761733 - y: 352.951312686 - z: -31.3401267733 - - speed: 3.5 - acceleration_s: 0.00202995199734 - curvature: -0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.499761733 + y: 352.951312686 + z: -31.3401267733 + theta: -1.83139367929 + kappa: -0.00022964861801 + s: 12.29558331964 + dkappa: 0 + } + v: 3.5 + a: 0.00202995199734 relative_time: 4.3600001335144043 - theta: -1.83139367929 - accumulated_s: 12.29558331964 -} -adc_trajectory_point { - x: -127.509002213 - y: 352.917914714 - z: -31.340024651 - - speed: 3.5 - acceleration_s: -0.0230681211466 - curvature: -0.000153099062061 - curvature_change_rate: 0.00218713016998 +} +trajectory_point { + path_point { + x: -127.509002213 + y: 352.917914714 + z: -31.340024651 + theta: -1.83144360265 + kappa: -0.000153099062061 + s: 12.33058331964 + dkappa: 0.00218713016998 + } + v: 3.5 + a: -0.0230681211466 relative_time: 4.3700001239776611 - theta: -1.83144360265 - accumulated_s: 12.33058331964 -} -adc_trajectory_point { - x: -127.518221677 - y: 352.884498307 - z: -31.339929861 - - speed: 3.5 - acceleration_s: 0.064519298669 - curvature: -0.000153099062061 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.518221677 + y: 352.884498307 + z: -31.339929861 + theta: -1.83148658053 + kappa: -0.000153099062061 + s: 12.36558331964 + dkappa: 0 + } + v: 3.5 + a: 0.064519298669 relative_time: 4.380000114440918 - theta: -1.83148658053 - accumulated_s: 12.36558331964 -} -adc_trajectory_point { - x: -127.527448428 - y: 352.851115155 - z: -31.3398054801 - - speed: 3.50277781487 - acceleration_s: -0.103607147081 - curvature: -7.65495273868e-05 - curvature_change_rate: 0.0021853950984 +} +trajectory_point { + path_point { + x: -127.527448428 + y: 352.851115155 + z: -31.3398054801 + theta: -1.83153713873 + kappa: -7.65495273868e-05 + s: 12.40061109784 + dkappa: 0.0021853950984 + } + v: 3.50277781487 + a: -0.103607147081 relative_time: 4.3900001049041748 - theta: -1.83153713873 - accumulated_s: 12.40061109784 -} -adc_trajectory_point { - x: -127.527448428 - y: 352.851115155 - z: -31.3398054801 - - speed: 3.50277781487 - acceleration_s: -0.103607147081 - curvature: -7.65495273868e-05 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.527448428 + y: 352.851115155 + z: -31.3398054801 + theta: -1.83153713873 + kappa: -7.65495273868e-05 + s: 12.43563887594 + dkappa: 0 + } + v: 3.50277781487 + a: -0.103607147081 relative_time: 4.3900001049041748 - theta: -1.83153713873 - accumulated_s: 12.43563887594 -} -adc_trajectory_point { - x: -127.545900064 - y: 352.784346422 - z: -31.33951113 - - speed: 3.50277781487 - acceleration_s: -0.0562023025099 - curvature: 0 - curvature_change_rate: 0.00218539489036 +} +trajectory_point { + path_point { + x: -127.545900064 + y: 352.784346422 + z: -31.33951113 + theta: -1.83166178602 + kappa: 0 + s: 12.47066665414 + dkappa: 0.00218539489036 + } + v: 3.50277781487 + a: -0.0562023025099 relative_time: 4.4100000858306885 - theta: -1.83166178602 - accumulated_s: 12.47066665414 -} -adc_trajectory_point { - x: -127.555063447 - y: 352.750948452 - z: -31.3394007226 - - speed: 3.50277781487 - acceleration_s: -0.0452948144891 - curvature: 0 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.555063447 + y: 352.750948452 + z: -31.3394007226 + theta: -1.83164595044 + kappa: 0 + s: 12.50569443224 + dkappa: 0 + } + v: 3.50277781487 + a: -0.0452948144891 relative_time: 4.4200000762939453 - theta: -1.83164595044 - accumulated_s: 12.50569443224 -} -adc_trajectory_point { - x: -127.564226747 - y: 352.717566443 - z: -31.339252756 - - speed: 3.50277781487 - acceleration_s: -0.10394213781 - curvature: 3.8274763238e-05 - curvature_change_rate: 0.00109269743218 +} +trajectory_point { + path_point { + x: -127.564226747 + y: 352.717566443 + z: -31.339252756 + theta: -1.83168737663 + kappa: 3.8274763238e-05 + s: 12.54072221044 + dkappa: 0.00109269743218 + } + v: 3.50277781487 + a: -0.10394213781 relative_time: 4.4300000667572021 - theta: -1.83168737663 - accumulated_s: 12.54072221044 -} -adc_trajectory_point { - x: -127.573422248 - y: 352.684193594 - z: -31.339159444 - - speed: 3.50277781487 - acceleration_s: -0.0592971113935 - curvature: 3.8274763238e-05 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.573422248 + y: 352.684193594 + z: -31.339159444 + theta: -1.83173225633 + kappa: 3.8274763238e-05 + s: 12.57574998854 + dkappa: 0 + } + v: 3.50277781487 + a: -0.0592971113935 relative_time: 4.440000057220459 - theta: -1.83173225633 - accumulated_s: 12.57574998854 -} -adc_trajectory_point { - x: -127.573422248 - y: 352.684193594 - z: -31.339159444 - - speed: 3.50555562973 - acceleration_s: -0.0592971113935 - curvature: 0.000114824296708 - curvature_change_rate: 0.00218366334914 +} +trajectory_point { + path_point { + x: -127.573422248 + y: 352.684193594 + z: -31.339159444 + theta: -1.83173225633 + kappa: 0.000114824296708 + s: 12.61080554484 + dkappa: 0.00218366334914 + } + v: 3.50555562973 + a: -0.0592971113935 relative_time: 4.440000057220459 - theta: -1.83173225633 - accumulated_s: 12.61080554484 -} -adc_trajectory_point { - x: -127.591775516 - y: 352.617499289 - z: -31.3388572838 - - speed: 3.50555562973 - acceleration_s: -0.10332422624 - curvature: 0.000114824296708 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.591775516 + y: 352.617499289 + z: -31.3388572838 + theta: -1.8317986102 + kappa: 0.000114824296708 + s: 12.64586110114 + dkappa: 0 + } + v: 3.50555562973 + a: -0.10332422624 relative_time: 4.4600000381469727 - theta: -1.8317986102 - accumulated_s: 12.64586110114 -} -adc_trajectory_point { - x: -127.600959198 - y: 352.58413393 - z: -31.3385668267 - - speed: 3.50277781487 - acceleration_s: 0.036427094581 - curvature: 0.000114824296708 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.600959198 + y: 352.58413393 + z: -31.3385668267 + theta: -1.83184783483 + kappa: 0.000114824296708 + s: 12.68088887934 + dkappa: 0 + } + v: 3.50277781487 + a: 0.036427094581 relative_time: 4.4700000286102295 - theta: -1.83184783483 - accumulated_s: 12.68088887934 -} -adc_trajectory_point { - x: -127.610081204 - y: 352.550819193 - z: -31.338401326 - - speed: 3.50277781487 - acceleration_s: -0.220284014485 - curvature: 0.000114824296708 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.610081204 + y: 352.550819193 + z: -31.338401326 + theta: -1.83184542029 + kappa: 0.000114824296708 + s: 12.71591665744 + dkappa: 0 + } + v: 3.50277781487 + a: -0.220284014485 relative_time: 4.4800000190734863 - theta: -1.83184542029 - accumulated_s: 12.71591665744 -} -adc_trajectory_point { - x: -127.619241505 - y: 352.517469776 - z: -31.3382468 - - speed: 3.5 - acceleration_s: 0.0616668466865 - curvature: 0.000153099062061 - curvature_change_rate: 0.00109356472436 +} +trajectory_point { + path_point { + x: -127.619241505 + y: 352.517469776 + z: -31.3382468 + theta: -1.83188878236 + kappa: 0.000153099062061 + s: 12.75091665744 + dkappa: 0.00109356472436 + } + v: 3.5 + a: 0.0616668466865 relative_time: 4.4900000095367432 - theta: -1.83188878236 - accumulated_s: 12.75091665744 -} -adc_trajectory_point { - x: -127.619241505 - y: 352.517469776 - z: -31.3382468 - - speed: 3.5 - acceleration_s: 0.0616668466865 - curvature: 0.000153099062061 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.619241505 + y: 352.517469776 + z: -31.3382468 + theta: -1.83188878236 + kappa: 0.000153099062061 + s: 12.78591665744 + dkappa: 0 + } + v: 3.5 + a: 0.0616668466865 relative_time: 4.4900000095367432 - theta: -1.83188878236 - accumulated_s: 12.78591665744 -} -adc_trajectory_point { - x: -127.637512671 - y: 352.450853478 - z: -31.3376777451 - - speed: 3.49722218513 - acceleration_s: -0.105173996676 - curvature: 0.00022964861801 - curvature_change_rate: 0.00218886738951 +} +trajectory_point { + path_point { + x: -127.637512671 + y: 352.450853478 + z: -31.3376777451 + theta: -1.83190611893 + kappa: 0.00022964861801 + s: 12.82088887934 + dkappa: 0.00218886738951 + } + v: 3.49722218513 + a: -0.105173996676 relative_time: 4.5099999904632568 - theta: -1.83190611893 - accumulated_s: 12.82088887934 -} -adc_trajectory_point { - x: -127.646605363 - y: 352.417550727 - z: -31.3374220422 - - speed: 3.49722218513 - acceleration_s: -0.138525113976 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.646605363 + y: 352.417550727 + z: -31.3374220422 + theta: -1.83194340833 + kappa: 0.00022964861801 + s: 12.85586110114 + dkappa: 0 + } + v: 3.49722218513 + a: -0.138525113976 relative_time: 4.5199999809265137 - theta: -1.83194340833 - accumulated_s: 12.85586110114 -} -adc_trajectory_point { - x: -127.655725274 - y: 352.384269714 - z: -31.3373159245 - - speed: 3.49722218513 - acceleration_s: -0.0892186163574 - curvature: 0.000267923397025 - curvature_change_rate: 0.00109443372452 +} +trajectory_point { + path_point { + x: -127.655725274 + y: 352.384269714 + z: -31.3373159245 + theta: -1.83198817165 + kappa: 0.000267923397025 + s: 12.89083332304 + dkappa: 0.00109443372452 + } + v: 3.49722218513 + a: -0.0892186163574 relative_time: 4.5299999713897705 - theta: -1.83198817165 - accumulated_s: 12.89083332304 -} -adc_trajectory_point { - x: -127.664766556 - y: 352.35097541 - z: -31.3371274434 - - speed: 3.49722218513 - acceleration_s: -0.110796774377 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.664766556 + y: 352.35097541 + z: -31.3371274434 + theta: -1.83197210021 + kappa: 0.000267923397025 + s: 12.92580554484 + dkappa: 0 + } + v: 3.49722218513 + a: -0.110796774377 relative_time: 4.5399999618530273 - theta: -1.83197210021 - accumulated_s: 12.92580554484 -} -adc_trajectory_point { - x: -127.673871586 - y: 352.317713472 - z: -31.3367670989 - - speed: 3.49444437027 - acceleration_s: -0.110796774377 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.673871586 + y: 352.317713472 + z: -31.3367670989 + theta: -1.83203277637 + kappa: 0.000267923397025 + s: 12.96074998854 + dkappa: 0 + } + v: 3.49444437027 + a: -0.110796774377 relative_time: 4.5499999523162842 - theta: -1.83203277637 - accumulated_s: 12.96074998854 -} -adc_trajectory_point { - x: -127.682924838 - y: 352.284454014 - z: -31.3363768291 - - speed: 3.49444437027 - acceleration_s: -0.164934767576 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.682924838 + y: 352.284454014 + z: -31.3363768291 + theta: -1.83203575236 + kappa: 0.000267923397025 + s: 12.99569443224 + dkappa: 0 + } + v: 3.49444437027 + a: -0.164934767576 relative_time: 4.559999942779541 - theta: -1.83203575236 - accumulated_s: 12.99569443224 -} -adc_trajectory_point { - x: -127.69197512 - y: 352.251221667 - z: -31.3362560766 - - speed: 3.49444437027 - acceleration_s: -0.168375974979 - curvature: 0.000344473001902 - curvature_change_rate: 0.0021906087711 +} +trajectory_point { + path_point { + x: -127.69197512 + y: 352.251221667 + z: -31.3362560766 + theta: -1.83206012701 + kappa: 0.000344473001902 + s: 13.03063887594 + dkappa: 0.0021906087711 + } + v: 3.49444437027 + a: -0.168375974979 relative_time: 4.5699999332427979 - theta: -1.83206012701 - accumulated_s: 13.03063887594 -} -adc_trajectory_point { - x: -127.701075862 - y: 352.217973001 - z: -31.3358970415 - - speed: 3.49444437027 - acceleration_s: 0.00372759671715 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.701075862 + y: 352.217973001 + z: -31.3358970415 + theta: -1.83212536817 + kappa: 0.000344473001902 + s: 13.06558331964 + dkappa: 0 + } + v: 3.49444437027 + a: 0.00372759671715 relative_time: 4.5800001621246338 - theta: -1.83212536817 - accumulated_s: 13.06558331964 -} -adc_trajectory_point { - x: -127.701075862 - y: 352.217973001 - z: -31.3358970415 - - speed: 3.49444437027 - acceleration_s: 0.00372759671715 - curvature: 0.000382747802778 - curvature_change_rate: 0.00109530434086 +} +trajectory_point { + path_point { + x: -127.701075862 + y: 352.217973001 + z: -31.3358970415 + theta: -1.83212536817 + kappa: 0.000382747802778 + s: 13.10052776334 + dkappa: 0.00109530434086 + } + v: 3.49444437027 + a: 0.00372759671715 relative_time: 4.5800001621246338 - theta: -1.83212536817 - accumulated_s: 13.10052776334 -} -adc_trajectory_point { - x: -127.719167513 - y: 352.151519105 - z: -31.3352947813 - - speed: 3.49444437027 - acceleration_s: -0.0288038778254 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.719167513 + y: 352.151519105 + z: -31.3352947813 + theta: -1.83212690918 + kappa: 0.000382747802778 + s: 13.13547220704 + dkappa: 0 + } + v: 3.49444437027 + a: -0.0288038778254 relative_time: 4.6000001430511475 - theta: -1.83212690918 - accumulated_s: 13.13547220704 -} -adc_trajectory_point { - x: -127.728217748 - y: 352.118314562 - z: -31.3352246499 - - speed: 3.49444437027 - acceleration_s: -0.11820502083 - curvature: 0.000459297432768 - curvature_change_rate: 0.00219060948978 +} +trajectory_point { + path_point { + x: -127.728217748 + y: 352.118314562 + z: -31.3352246499 + theta: -1.83216226657 + kappa: 0.000459297432768 + s: 13.17041665074 + dkappa: 0.00219060948978 + } + v: 3.49444437027 + a: -0.11820502083 relative_time: 4.6100001335144043 - theta: -1.83216226657 - accumulated_s: 13.17041665074 -} -adc_trajectory_point { - x: -127.737284009 - y: 352.085089415 - z: -31.3348650029 - - speed: 3.49444437027 - acceleration_s: -0.0531890101833 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.737284009 + y: 352.085089415 + z: -31.3348650029 + theta: -1.83218983511 + kappa: 0.000459297432768 + s: 13.20536109444 + dkappa: 0 + } + v: 3.49444437027 + a: -0.0531890101833 relative_time: 4.6200001239776611 - theta: -1.83218983511 - accumulated_s: 13.20536109444 -} -adc_trajectory_point { - x: -127.746316119 - y: 352.051884421 - z: -31.3347293595 - - speed: 3.49444437027 - acceleration_s: -0.0470023655957 - curvature: 0.00053584710648 - curvature_change_rate: 0.00219061074096 +} +trajectory_point { + path_point { + x: -127.746316119 + y: 352.051884421 + z: -31.3347293595 + theta: -1.83219678742 + kappa: 0.00053584710648 + s: 13.24030553814 + dkappa: 0.00219061074096 + } + v: 3.49444437027 + a: -0.0470023655957 relative_time: 4.630000114440918 - theta: -1.83219678742 - accumulated_s: 13.24030553814 -} -adc_trajectory_point { - x: -127.755379258 - y: 352.018669332 - z: -31.3345220741 - - speed: 3.49444437027 - acceleration_s: -0.00745154333254 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.755379258 + y: 352.018669332 + z: -31.3345220741 + theta: -1.83221628957 + kappa: 0.00053584710648 + s: 13.27524998184 + dkappa: 0 + } + v: 3.49444437027 + a: -0.00745154333254 relative_time: 4.6400001049041748 - theta: -1.83221628957 - accumulated_s: 13.27524998184 -} -adc_trajectory_point { - x: -127.764413044 - y: 351.985459773 - z: -31.3343663076 - - speed: 3.49444437027 - acceleration_s: -0.0239191625422 - curvature: 0.000574121962009 - curvature_change_rate: 0.00109530590484 +} +trajectory_point { + path_point { + x: -127.764413044 + y: 351.985459773 + z: -31.3343663076 + theta: -1.83220767276 + kappa: 0.000574121962009 + s: 13.31019442554 + dkappa: 0.00109530590484 + } + v: 3.49444437027 + a: -0.0239191625422 relative_time: 4.6500000953674316 - theta: -1.83220767276 - accumulated_s: 13.31019442554 -} -adc_trajectory_point { - x: -127.773489504 - y: 351.95224056 - z: -31.3341953186 - - speed: 3.49444437027 - acceleration_s: -0.00434879322893 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.773489504 + y: 351.95224056 + z: -31.3341953186 + theta: -1.83224257355 + kappa: 0.000574121962009 + s: 13.34513886924 + dkappa: 0 + } + v: 3.49444437027 + a: -0.00434879322893 relative_time: 4.6600000858306885 - theta: -1.83224257355 - accumulated_s: 13.34513886924 -} -adc_trajectory_point { - x: -127.782530946 - y: 351.919025975 - z: -31.3340980159 - - speed: 3.49722218513 - acceleration_s: 0.0305157160983 - curvature: 0.000612396831201 - curvature_change_rate: 0.00109443630304 +} +trajectory_point { + path_point { + x: -127.782530946 + y: 351.919025975 + z: -31.3340980159 + theta: -1.8322637484 + kappa: 0.000612396831201 + s: 13.38011109114 + dkappa: 0.00109443630304 + } + v: 3.49722218513 + a: 0.0305157160983 relative_time: 4.6700000762939453 - theta: -1.8322637484 - accumulated_s: 13.38011109114 -} -adc_trajectory_point { - x: -127.791579028 - y: 351.885819526 - z: -31.3340129573 - - speed: 3.49722218513 - acceleration_s: -0.0801850819625 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.791579028 + y: 351.885819526 + z: -31.3340129573 + theta: -1.8322688425 + kappa: 0.000612396831201 + s: 13.41508331304 + dkappa: 0 + } + v: 3.49722218513 + a: -0.0801850819625 relative_time: 4.6800000667572021 - theta: -1.8322688425 - accumulated_s: 13.41508331304 -} -adc_trajectory_point { - x: -127.800627977 - y: 351.852610815 - z: -31.3338932684 - - speed: 3.49722218513 - acceleration_s: -0.0318863733843 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.800627977 + y: 351.852610815 + z: -31.3338932684 + theta: -1.83229720076 + kappa: 0.000612396831201 + s: 13.45005553484 + dkappa: 0 + } + v: 3.49722218513 + a: -0.0318863733843 relative_time: 4.690000057220459 - theta: -1.83229720076 - accumulated_s: 13.45005553484 -} -adc_trajectory_point { - x: -127.800627977 - y: 351.852610815 - z: -31.3338932684 - - speed: 3.49722218513 - acceleration_s: -0.0318863733843 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.800627977 + y: 351.852610815 + z: -31.3338932684 + theta: -1.83229720076 + kappa: 0.000612396831201 + s: 13.48502775674 + dkappa: 0 + } + v: 3.49722218513 + a: -0.0318863733843 relative_time: 4.690000057220459 - theta: -1.83229720076 - accumulated_s: 13.48502775674 -} -adc_trajectory_point { - x: -127.818702223 - y: 351.786185824 - z: -31.3336895285 - - speed: 3.49722218513 - acceleration_s: 0.0986010473449 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.818702223 + y: 351.786185824 + z: -31.3336895285 + theta: -1.83228232381 + kappa: 0.000612396831201 + s: 13.51999997854 + dkappa: 0 + } + v: 3.49722218513 + a: 0.0986010473449 relative_time: 4.7100000381469727 - theta: -1.83228232381 - accumulated_s: 13.51999997854 -} -adc_trajectory_point { - x: -127.827759872 - y: 351.752971154 - z: -31.3336588815 - - speed: 3.49722218513 - acceleration_s: 0.0382934250362 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.827759872 + y: 351.752971154 + z: -31.3336588815 + theta: -1.83229801983 + kappa: 0.000612396831201 + s: 13.55497220044 + dkappa: 0 + } + v: 3.49722218513 + a: 0.0382934250362 relative_time: 4.7200000286102295 - theta: -1.83229801983 - accumulated_s: 13.55497220044 -} -adc_trajectory_point { - x: -127.836847606 - y: 351.719759317 - z: -31.3336090865 - - speed: 3.49444437027 - acceleration_s: 0.081440974817 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.836847606 + y: 351.719759317 + z: -31.3336090865 + theta: -1.83234181352 + kappa: 0.000612396831201 + s: 13.58991664414 + dkappa: 0 + } + v: 3.49444437027 + a: 0.081440974817 relative_time: 4.7300000190734863 - theta: -1.83234181352 - accumulated_s: 13.58991664414 -} -adc_trajectory_point { - x: -127.845952569 - y: 351.686565803 - z: -31.333643714 - - speed: 3.49444437027 - acceleration_s: 0.0209780932665 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.845952569 + y: 351.686565803 + z: -31.333643714 + theta: -1.83239281915 + kappa: 0.000612396831201 + s: 13.62486108784 + dkappa: 0 + } + v: 3.49444437027 + a: 0.0209780932665 relative_time: 4.7400000095367432 - theta: -1.83239281915 - accumulated_s: 13.62486108784 -} -adc_trajectory_point { - x: -127.855011926 - y: 351.653337572 - z: -31.3334456477 - - speed: 3.4916665554 - acceleration_s: 0.0209780932665 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.855011926 + y: 351.653337572 + z: -31.3334456477 + theta: -1.83232234836 + kappa: 0.000612396831201 + s: 13.65977775334 + dkappa: 0 + } + v: 3.4916665554 + a: 0.0209780932665 relative_time: 4.75 - theta: -1.83232234836 - accumulated_s: 13.65977775334 -} -adc_trajectory_point { - x: -127.864136526 - y: 351.620136288 - z: -31.3333633449 - - speed: 3.4916665554 - acceleration_s: 0.0100937873768 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.864136526 + y: 351.620136288 + z: -31.3333633449 + theta: -1.83233665346 + kappa: 0.000612396831201 + s: 13.69469441894 + dkappa: 0 + } + v: 3.4916665554 + a: 0.0100937873768 relative_time: 4.7599999904632568 - theta: -1.83233665346 - accumulated_s: 13.69469441894 -} -adc_trajectory_point { - x: -127.873235968 - y: 351.586976341 - z: -31.3333423594 - - speed: 3.4916665554 - acceleration_s: 0.0576327186021 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.873235968 + y: 351.586976341 + z: -31.3333423594 + theta: -1.83235880506 + kappa: 0.000612396831201 + s: 13.72961108444 + dkappa: 0 + } + v: 3.4916665554 + a: 0.0576327186021 relative_time: 4.7699999809265137 - theta: -1.83235880506 - accumulated_s: 13.72961108444 -} -adc_trajectory_point { - x: -127.882284648 - y: 351.553899762 - z: -31.3333647577 - - speed: 3.4916665554 - acceleration_s: 0.021545202312 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.882284648 + y: 351.553899762 + z: -31.3333647577 + theta: -1.83235729889 + kappa: 0.000612396831201 + s: 13.76452775004 + dkappa: 0 + } + v: 3.4916665554 + a: 0.021545202312 relative_time: 4.7799999713897705 - theta: -1.83235729889 - accumulated_s: 13.76452775004 -} -adc_trajectory_point { - x: -127.891345597 - y: 351.520796852 - z: -31.3332146611 - - speed: 3.4916665554 - acceleration_s: 0.0539346592736 - curvature: 0.000574121962009 - curvature_change_rate: -0.00109617767289 +} +trajectory_point { + path_point { + x: -127.891345597 + y: 351.520796852 + z: -31.3332146611 + theta: -1.83232611012 + kappa: 0.000574121962009 + s: 13.79944441554 + dkappa: -0.00109617767289 + } + v: 3.4916665554 + a: 0.0539346592736 relative_time: 4.7899999618530273 - theta: -1.83232611012 - accumulated_s: 13.79944441554 -} -adc_trajectory_point { - x: -127.900472174 - y: 351.487701684 - z: -31.3330173064 - - speed: 3.4916665554 - acceleration_s: 0.10874125944 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.900472174 + y: 351.487701684 + z: -31.3330173064 + theta: -1.83232937515 + kappa: 0.000574121962009 + s: 13.83436108114 + dkappa: 0 + } + v: 3.4916665554 + a: 0.10874125944 relative_time: 4.7999999523162842 - theta: -1.83232937515 - accumulated_s: 13.83436108114 -} -adc_trajectory_point { - x: -127.909547697 - y: 351.454601005 - z: -31.3329471787 - - speed: 3.48888897896 - acceleration_s: 0.0580133361244 - curvature: 0.00053584710648 - curvature_change_rate: -0.00109704997091 +} +trajectory_point { + path_point { + x: -127.909547697 + y: 351.454601005 + z: -31.3329471787 + theta: -1.83227496228 + kappa: 0.00053584710648 + s: 13.86924997094 + dkappa: -0.00109704997091 + } + v: 3.48888897896 + a: 0.0580133361244 relative_time: 4.809999942779541 - theta: -1.83227496228 - accumulated_s: 13.86924997094 -} -adc_trajectory_point { - x: -127.918651362 - y: 351.421491066 - z: -31.3328811266 - - speed: 3.48888897896 - acceleration_s: 0.126041599598 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.918651362 + y: 351.421491066 + z: -31.3328811266 + theta: -1.83228128078 + kappa: 0.00053584710648 + s: 13.90413886074 + dkappa: 0 + } + v: 3.48888897896 + a: 0.126041599598 relative_time: 4.8199999332427979 - theta: -1.83228128078 - accumulated_s: 13.90413886074 -} -adc_trajectory_point { - x: -127.927735111 - y: 351.3883593 - z: -31.3327781893 - - speed: 3.48888897896 - acceleration_s: 0.103582712995 - curvature: 0.000497572263703 - curvature_change_rate: -0.0010970496054 +} +trajectory_point { + path_point { + x: -127.927735111 + y: 351.3883593 + z: -31.3327781893 + theta: -1.83225309008 + kappa: 0.000497572263703 + s: 13.93902775054 + dkappa: -0.0010970496054 + } + v: 3.48888897896 + a: 0.103582712995 relative_time: 4.8300001621246338 - theta: -1.83225309008 - accumulated_s: 13.93902775054 -} -adc_trajectory_point { - x: -127.936852555 - y: 351.355237961 - z: -31.3326249309 - - speed: 3.48888897896 - acceleration_s: 0.0987043389986 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.936852555 + y: 351.355237961 + z: -31.3326249309 + theta: -1.83225678098 + kappa: 0.000497572263703 + s: 13.97391664024 + dkappa: 0 + } + v: 3.48888897896 + a: 0.0987043389986 relative_time: 4.8400001525878906 - theta: -1.83225678098 - accumulated_s: 13.97391664024 -} -adc_trajectory_point { - x: -127.945946783 - y: 351.322088963 - z: -31.3325914145 - - speed: 3.4916665554 - acceleration_s: 0.125243887153 - curvature: 0.000459297432768 - curvature_change_rate: -0.00109617657723 +} +trajectory_point { + path_point { + x: -127.945946783 + y: 351.322088963 + z: -31.3325914145 + theta: -1.83225725673 + kappa: 0.000459297432768 + s: 14.00883330584 + dkappa: -0.00109617657723 + } + v: 3.4916665554 + a: 0.125243887153 relative_time: 4.8500001430511475 - theta: -1.83225725673 - accumulated_s: 14.00883330584 -} -adc_trajectory_point { - x: -127.955074316 - y: 351.288940788 - z: -31.3324934971 - - speed: 3.4916665554 - acceleration_s: 0.121261153979 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.955074316 + y: 351.288940788 + z: -31.3324934971 + theta: -1.83230175825 + kappa: 0.000459297432768 + s: 14.04374997144 + dkappa: 0 + } + v: 3.4916665554 + a: 0.121261153979 relative_time: 4.8600001335144043 - theta: -1.83230175825 - accumulated_s: 14.04374997144 -} -adc_trajectory_point { - x: -127.964154214 - y: 351.255774262 - z: -31.3324116757 - - speed: 3.4916665554 - acceleration_s: 0.0387133948109 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.964154214 + y: 351.255774262 + z: -31.3324116757 + theta: -1.83227376243 + kappa: 0.000459297432768 + s: 14.07866663694 + dkappa: 0 + } + v: 3.4916665554 + a: 0.0387133948109 relative_time: 4.8700001239776611 - theta: -1.83227376243 - accumulated_s: 14.07866663694 -} -adc_trajectory_point { - x: -127.973293048 - y: 351.222600333 - z: -31.3323044209 - - speed: 3.4916665554 - acceleration_s: 0.128501307565 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.973293048 + y: 351.222600333 + z: -31.3323044209 + theta: -1.83231098077 + kappa: 0.000459297432768 + s: 14.11358330254 + dkappa: 0 + } + v: 3.4916665554 + a: 0.128501307565 relative_time: 4.880000114440918 - theta: -1.83231098077 - accumulated_s: 14.11358330254 -} -adc_trajectory_point { - x: -127.982415681 - y: 351.189416085 - z: -31.332248074 - - speed: 3.48888897896 - acceleration_s: 0.130341510986 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.982415681 + y: 351.189416085 + z: -31.332248074 + theta: -1.83234969531 + kappa: 0.000459297432768 + s: 14.14847219234 + dkappa: 0 + } + v: 3.48888897896 + a: 0.130341510986 relative_time: 4.8900001049041748 - theta: -1.83234969531 - accumulated_s: 14.14847219234 -} -adc_trajectory_point { - x: -127.982415681 - y: 351.189416085 - z: -31.332248074 - - speed: 3.48888897896 - acceleration_s: 0.130341510986 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -127.982415681 + y: 351.189416085 + z: -31.332248074 + theta: -1.83234969531 + kappa: 0.000459297432768 + s: 14.18336108204 + dkappa: 0 + } + v: 3.48888897896 + a: 0.130341510986 relative_time: 4.8900001049041748 - theta: -1.83234969531 - accumulated_s: 14.18336108204 -} -adc_trajectory_point { - x: -128.000654248 - y: 351.122957373 - z: -31.3320949441 - - speed: 3.4916665554 - acceleration_s: 0.2155785191 - curvature: 0.000421022612763 - curvature_change_rate: -0.00109617626418 +} +trajectory_point { + path_point { + x: -128.000654248 + y: 351.122957373 + z: -31.3320949441 + theta: -1.83237155489 + kappa: 0.000421022612763 + s: 14.21827774764 + dkappa: -0.00109617626418 + } + v: 3.4916665554 + a: 0.2155785191 relative_time: 4.9100000858306885 - theta: -1.83237155489 - accumulated_s: 14.21827774764 -} -adc_trajectory_point { - x: -128.009766732 - y: 351.089731207 - z: -31.3320094375 - - speed: 3.4916665554 - acceleration_s: 0.100030454833 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.009766732 + y: 351.089731207 + z: -31.3320094375 + theta: -1.83240200657 + kappa: 0.000421022612763 + s: 14.25319441314 + dkappa: 0 + } + v: 3.4916665554 + a: 0.100030454833 relative_time: 4.9200000762939453 - theta: -1.83240200657 - accumulated_s: 14.25319441314 -} -adc_trajectory_point { - x: -128.018885109 - y: 351.056451235 - z: -31.3319301745 - - speed: 3.49444437027 - acceleration_s: 0.143884005672 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.018885109 + y: 351.056451235 + z: -31.3319301745 + theta: -1.83243906988 + kappa: 0.000421022612763 + s: 14.28813885694 + dkappa: 0 + } + v: 3.49444437027 + a: 0.143884005672 relative_time: 4.9300000667572021 - theta: -1.83243906988 - accumulated_s: 14.28813885694 -} -adc_trajectory_point { - x: -128.028005427 - y: 351.023190788 - z: -31.3318837518 - - speed: 3.49444437027 - acceleration_s: 0.0935759258599 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.028005427 + y: 351.023190788 + z: -31.3318837518 + theta: -1.8324763839 + kappa: 0.000421022612763 + s: 14.32308330064 + dkappa: 0 + } + v: 3.49444437027 + a: 0.0935759258599 relative_time: 4.940000057220459 - theta: -1.8324763839 - accumulated_s: 14.32308330064 -} -adc_trajectory_point { - x: -128.028005427 - y: 351.023190788 - z: -31.3318837518 - - speed: 3.49722218513 - acceleration_s: 0.0935759258599 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.028005427 + y: 351.023190788 + z: -31.3318837518 + theta: -1.8324763839 + kappa: 0.000421022612763 + s: 14.35805552244 + dkappa: 0 + } + v: 3.49722218513 + a: 0.0935759258599 relative_time: 4.940000057220459 - theta: -1.8324763839 - accumulated_s: 14.35805552244 -} -adc_trajectory_point { - x: -128.046248474 - y: 350.956570532 - z: -31.3317727968 - - speed: 3.49722218513 - acceleration_s: 0.267789469281 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.046248474 + y: 350.956570532 + z: -31.3317727968 + theta: -1.83252221827 + kappa: 0.000421022612763 + s: 14.39302774434 + dkappa: 0 + } + v: 3.49722218513 + a: 0.267789469281 relative_time: 4.9600000381469727 - theta: -1.83252221827 - accumulated_s: 14.39302774434 -} -adc_trajectory_point { - x: -128.0553701 - y: 350.923208525 - z: -31.3316713916 - - speed: 3.5 - acceleration_s: 0.300834012677 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.0553701 + y: 350.923208525 + z: -31.3316713916 + theta: -1.83251562589 + kappa: 0.000421022612763 + s: 14.42802774434 + dkappa: 0 + } + v: 3.5 + a: 0.300834012677 relative_time: 4.9700000286102295 - theta: -1.83251562589 - accumulated_s: 14.42802774434 -} -adc_trajectory_point { - x: -128.064498592 - y: 350.889851981 - z: -31.3316573771 - - speed: 3.5 - acceleration_s: 0.300834012677 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.064498592 + y: 350.889851981 + z: -31.3316573771 + theta: -1.83254537574 + kappa: 0.000421022612763 + s: 14.46302774434 + dkappa: 0 + } + v: 3.5 + a: 0.300834012677 relative_time: 4.9800000190734863 - theta: -1.83254537574 - accumulated_s: 14.46302774434 -} -adc_trajectory_point { - x: -128.073636577 - y: 350.856438601 - z: -31.3316250695 - - speed: 3.50277781487 - acceleration_s: 0.314520331335 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.073636577 + y: 350.856438601 + z: -31.3316250695 + theta: -1.8325462399 + kappa: 0.000421022612763 + s: 14.49805552244 + dkappa: 0 + } + v: 3.50277781487 + a: 0.314520331335 relative_time: 4.9900000095367432 - theta: -1.8325462399 - accumulated_s: 14.49805552244 -} -adc_trajectory_point { - x: -128.082787373 - y: 350.823041185 - z: -31.3316455074 - - speed: 3.50277781487 - acceleration_s: 0.191534841341 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.082787373 + y: 350.823041185 + z: -31.3316455074 + theta: -1.83257440941 + kappa: 0.000421022612763 + s: 14.53308330064 + dkappa: 0 + } + v: 3.50277781487 + a: 0.191534841341 relative_time: 5 - theta: -1.83257440941 - accumulated_s: 14.53308330064 -} -adc_trajectory_point { - x: -128.091951244 - y: 350.789584174 - z: -31.3315293901 - - speed: 3.5083334446 - acceleration_s: 0.278952635039 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.091951244 + y: 350.789584174 + z: -31.3315293901 + theta: -1.8325975532 + kappa: 0.000421022612763 + s: 14.56816663504 + dkappa: 0 + } + v: 3.5083334446 + a: 0.278952635039 relative_time: 5.0099999904632568 - theta: -1.8325975532 - accumulated_s: 14.56816663504 -} -adc_trajectory_point { - x: -128.101075177 - y: 350.756130082 - z: -31.3315945743 - - speed: 3.5083334446 - acceleration_s: 0.191646118787 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.101075177 + y: 350.756130082 + z: -31.3315945743 + theta: -1.83257251866 + kappa: 0.000421022612763 + s: 14.60324996944 + dkappa: 0 + } + v: 3.5083334446 + a: 0.191646118787 relative_time: 5.0199999809265137 - theta: -1.83257251866 - accumulated_s: 14.60324996944 -} -adc_trajectory_point { - x: -128.110279538 - y: 350.722644539 - z: -31.3315375568 - - speed: 3.51388883591 - acceleration_s: 0.24373886012 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.110279538 + y: 350.722644539 + z: -31.3315375568 + theta: -1.8326153807 + kappa: 0.000421022612763 + s: 14.638388857839999 + dkappa: 0 + } + v: 3.51388883591 + a: 0.24373886012 relative_time: 5.0299999713897705 - theta: -1.8326153807 - accumulated_s: 14.638388857839999 -} -adc_trajectory_point { - x: -128.119464702 - y: 350.689158674 - z: -31.3316792473 - - speed: 3.51388883591 - acceleration_s: 0.24373886012 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.119464702 + y: 350.689158674 + z: -31.3316792473 + theta: -1.83261570322 + kappa: 0.000421022612763 + s: 14.673527746240001 + dkappa: 0 + } + v: 3.51388883591 + a: 0.24373886012 relative_time: 5.0399999618530273 - theta: -1.83261570322 - accumulated_s: 14.673527746240001 -} -adc_trajectory_point { - x: -128.128655979 - y: 350.655615012 - z: -31.3316125404 - - speed: 3.51944446564 - acceleration_s: 0.282552998313 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.128655979 + y: 350.655615012 + z: -31.3316125404 + theta: -1.83260241097 + kappa: 0.000421022612763 + s: 14.70872219084 + dkappa: 0 + } + v: 3.51944446564 + a: 0.282552998313 relative_time: 5.0499999523162842 - theta: -1.83260241097 - accumulated_s: 14.70872219084 -} -adc_trajectory_point { - x: -128.137851861 - y: 350.622082697 - z: -31.3317606011 - - speed: 3.51944446564 - acceleration_s: 0.197898992004 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.137851861 + y: 350.622082697 + z: -31.3317606011 + theta: -1.83258402011 + kappa: 0.000421022612763 + s: 14.74391663554 + dkappa: 0 + } + v: 3.51944446564 + a: 0.197898992004 relative_time: 5.059999942779541 - theta: -1.83258402011 - accumulated_s: 14.74391663554 -} -adc_trajectory_point { - x: -128.147065919 - y: 350.588508171 - z: -31.3316363096 - - speed: 3.5222222805 - acceleration_s: 0.272153550929 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.147065919 + y: 350.588508171 + z: -31.3316363096 + theta: -1.83255494728 + kappa: 0.000421022612763 + s: 14.779138858340001 + dkappa: 0 + } + v: 3.5222222805 + a: 0.272153550929 relative_time: 5.0699999332427979 - theta: -1.83255494728 - accumulated_s: 14.779138858340001 -} -adc_trajectory_point { - x: -128.156294813 - y: 350.554938211 - z: -31.3317528339 - - speed: 3.5222222805 - acceleration_s: 0.110982785082 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.156294813 + y: 350.554938211 + z: -31.3317528339 + theta: -1.83258109914 + kappa: 0.000421022612763 + s: 14.81436108114 + dkappa: 0 + } + v: 3.5222222805 + a: 0.110982785082 relative_time: 5.0800001621246338 - theta: -1.83258109914 - accumulated_s: 14.81436108114 -} -adc_trajectory_point { - x: -128.165535716 - y: 350.521308584 - z: -31.331666356 - - speed: 3.52500009537 - acceleration_s: 0.297725012227 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.165535716 + y: 350.521308584 + z: -31.331666356 + theta: -1.83256878867 + kappa: 0.000421022612763 + s: 14.84961108204 + dkappa: 0 + } + v: 3.52500009537 + a: 0.297725012227 relative_time: 5.0900001525878906 - theta: -1.83256878867 - accumulated_s: 14.84961108204 -} -adc_trajectory_point { - x: -128.174725033 - y: 350.487702558 - z: -31.3318907274 - - speed: 3.52500009537 - acceleration_s: 0.297725012227 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.174725033 + y: 350.487702558 + z: -31.3318907274 + theta: -1.8325495662 + kappa: 0.000421022612763 + s: 14.88486108304 + dkappa: 0 + } + v: 3.52500009537 + a: 0.297725012227 relative_time: 5.1000001430511475 - theta: -1.8325495662 - accumulated_s: 14.88486108304 -} -adc_trajectory_point { - x: -128.183981673 - y: 350.454038662 - z: -31.3317321083 - - speed: 3.52777767181 - acceleration_s: 0.252304635167 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.183981673 + y: 350.454038662 + z: -31.3317321083 + theta: -1.83253365994 + kappa: 0.000421022612763 + s: 14.92013885974 + dkappa: 0 + } + v: 3.52777767181 + a: 0.252304635167 relative_time: 5.1100001335144043 - theta: -1.83253365994 - accumulated_s: 14.92013885974 -} -adc_trajectory_point { - x: -128.193227797 - y: 350.420404838 - z: -31.3318322925 - - speed: 3.52777767181 - acceleration_s: 0.0967302183985 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.193227797 + y: 350.420404838 + z: -31.3318322925 + theta: -1.83252496302 + kappa: 0.000421022612763 + s: 14.955416636439999 + dkappa: 0 + } + v: 3.52777767181 + a: 0.0967302183985 relative_time: 5.1200001239776611 - theta: -1.83252496302 - accumulated_s: 14.955416636439999 -} -adc_trajectory_point { - x: -128.202487239 - y: 350.386699526 - z: -31.3316989904 - - speed: 3.53333330154 - acceleration_s: 0.277927346566 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.202487239 + y: 350.386699526 + z: -31.3316989904 + theta: -1.83248562268 + kappa: 0.000421022612763 + s: 14.99074996944 + dkappa: 0 + } + v: 3.53333330154 + a: 0.277927346566 relative_time: 5.130000114440918 - theta: -1.83248562268 - accumulated_s: 14.99074996944 -} -adc_trajectory_point { - x: -128.211753702 - y: 350.35303416 - z: -31.3317653527 - - speed: 3.53333330154 - acceleration_s: 0.0591837094689 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.211753702 + y: 350.35303416 + z: -31.3317653527 + theta: -1.8324770861 + kappa: 0.000421022612763 + s: 15.026083302539998 + dkappa: 0 + } + v: 3.53333330154 + a: 0.0591837094689 relative_time: 5.1400001049041748 - theta: -1.8324770861 - accumulated_s: 15.026083302539998 -} -adc_trajectory_point { - x: -128.221040402 - y: 350.319296927 - z: -31.3315984681 - - speed: 3.53888893127 - acceleration_s: 0.0591837094689 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.221040402 + y: 350.319296927 + z: -31.3315984681 + theta: -1.83244599081 + kappa: 0.000421022612763 + s: 15.06147219184 + dkappa: 0 + } + v: 3.53888893127 + a: 0.0591837094689 relative_time: 5.1500000953674316 - theta: -1.83244599081 - accumulated_s: 15.06147219184 -} -adc_trajectory_point { - x: -128.230326119 - y: 350.285590336 - z: -31.3316497104 - - speed: 3.53888893127 - acceleration_s: 0.116584209373 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.230326119 + y: 350.285590336 + z: -31.3316497104 + theta: -1.83244779888 + kappa: 0.000421022612763 + s: 15.096861081139998 + dkappa: 0 + } + v: 3.53888893127 + a: 0.116584209373 relative_time: 5.1600000858306885 - theta: -1.83244779888 - accumulated_s: 15.096861081139998 -} -adc_trajectory_point { - x: -128.239626669 - y: 350.251828692 - z: -31.3315357789 - - speed: 3.544444561 - acceleration_s: 0.278030473616 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.239626669 + y: 350.251828692 + z: -31.3315357789 + theta: -1.83241519981 + kappa: 0.000421022612763 + s: 15.132305526740002 + dkappa: 0 + } + v: 3.544444561 + a: 0.278030473616 relative_time: 5.1700000762939453 - theta: -1.83241519981 - accumulated_s: 15.132305526740002 -} -adc_trajectory_point { - x: -128.248921672 - y: 350.218048481 - z: -31.3314207131 - - speed: 3.544444561 - acceleration_s: 0.251109438944 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.248921672 + y: 350.218048481 + z: -31.3314207131 + theta: -1.83239257782 + kappa: 0.000421022612763 + s: 15.167749972340001 + dkappa: 0 + } + v: 3.544444561 + a: 0.251109438944 relative_time: 5.1800000667572021 - theta: -1.83239257782 - accumulated_s: 15.167749972340001 -} -adc_trajectory_point { - x: -128.258228341 - y: 350.184290043 - z: -31.3312912183 - - speed: 3.55277776718 - acceleration_s: 0.0693685625957 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.258228341 + y: 350.184290043 + z: -31.3312912183 + theta: -1.83240719298 + kappa: 0.000421022612763 + s: 15.203277750040002 + dkappa: 0 + } + v: 3.55277776718 + a: 0.0693685625957 relative_time: 5.190000057220459 - theta: -1.83240719298 - accumulated_s: 15.203277750040002 -} -adc_trajectory_point { - x: -128.258228341 - y: 350.184290043 - z: -31.3312912183 - - speed: 3.55277776718 - acceleration_s: 0.0693685625957 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.258228341 + y: 350.184290043 + z: -31.3312912183 + theta: -1.83240719298 + kappa: 0.000421022612763 + s: 15.23880552764 + dkappa: 0 + } + v: 3.55277776718 + a: 0.0693685625957 relative_time: 5.190000057220459 - theta: -1.83240719298 - accumulated_s: 15.23880552764 -} -adc_trajectory_point { - x: -128.276844285 - y: 350.116681007 - z: -31.3311293265 - - speed: 3.55833339691 - acceleration_s: 0.171843816258 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.276844285 + y: 350.116681007 + z: -31.3311293265 + theta: -1.83241144526 + kappa: 0.000421022612763 + s: 15.274388861639999 + dkappa: 0 + } + v: 3.55833339691 + a: 0.171843816258 relative_time: 5.2100000381469727 - theta: -1.83241144526 - accumulated_s: 15.274388861639999 -} -adc_trajectory_point { - x: -128.286184325 - y: 350.082838437 - z: -31.3308680477 - - speed: 3.55833339691 - acceleration_s: 0.252683910327 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.286184325 + y: 350.082838437 + z: -31.3308680477 + theta: -1.83242163866 + kappa: 0.000421022612763 + s: 15.30997219564 + dkappa: 0 + } + v: 3.55833339691 + a: 0.252683910327 relative_time: 5.2200000286102295 - theta: -1.83242163866 - accumulated_s: 15.30997219564 -} -adc_trajectory_point { - x: -128.295507588 - y: 350.048981868 - z: -31.3308513397 - - speed: 3.56388878822 - acceleration_s: 0.226768789061 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.295507588 + y: 350.048981868 + z: -31.3308513397 + theta: -1.83243355955 + kappa: 0.000421022612763 + s: 15.34561108354 + dkappa: 0 + } + v: 3.56388878822 + a: 0.226768789061 relative_time: 5.2300000190734863 - theta: -1.83243355955 - accumulated_s: 15.34561108354 -} -adc_trajectory_point { - x: -128.304856069 - y: 350.01507061 - z: -31.3306626277 - - speed: 3.56388878822 - acceleration_s: 0.358421376831 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.304856069 + y: 350.01507061 + z: -31.3306626277 + theta: -1.83246714706 + kappa: 0.000421022612763 + s: 15.381249971439999 + dkappa: 0 + } + v: 3.56388878822 + a: 0.358421376831 relative_time: 5.2400000095367432 - theta: -1.83246714706 - accumulated_s: 15.381249971439999 -} -adc_trajectory_point { - x: -128.314177374 - y: 349.981168523 - z: -31.3305751467 - - speed: 3.56666660309 - acceleration_s: 0.130028481229 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.314177374 + y: 349.981168523 + z: -31.3305751467 + theta: -1.83248746453 + kappa: 0.000421022612763 + s: 15.41691663744 + dkappa: 0 + } + v: 3.56666660309 + a: 0.130028481229 relative_time: 5.25 - theta: -1.83248746453 - accumulated_s: 15.41691663744 -} -adc_trajectory_point { - x: -128.323523061 - y: 349.947221703 - z: -31.3304684926 - - speed: 3.56666660309 - acceleration_s: 0.270673775212 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.323523061 + y: 349.947221703 + z: -31.3304684926 + theta: -1.83250387909 + kappa: 0.000421022612763 + s: 15.45258330344 + dkappa: 0 + } + v: 3.56666660309 + a: 0.270673775212 relative_time: 5.2599999904632568 - theta: -1.83250387909 - accumulated_s: 15.45258330344 -} -adc_trajectory_point { - x: -128.332869921 - y: 349.913273211 - z: -31.3304520212 - - speed: 3.57222223282 - acceleration_s: 0.223202365437 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.332869921 + y: 349.913273211 + z: -31.3304520212 + theta: -1.83253571663 + kappa: 0.000421022612763 + s: 15.48830552574 + dkappa: 0 + } + v: 3.57222223282 + a: 0.223202365437 relative_time: 5.2699999809265137 - theta: -1.83253571663 - accumulated_s: 15.48830552574 -} -adc_trajectory_point { - x: -128.342196025 - y: 349.879284826 - z: -31.3302414361 - - speed: 3.57222223282 - acceleration_s: 0.203264498641 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.342196025 + y: 349.879284826 + z: -31.3302414361 + theta: -1.83251360385 + kappa: 0.000421022612763 + s: 15.52402774814 + dkappa: 0 + } + v: 3.57222223282 + a: 0.203264498641 relative_time: 5.2799999713897705 - theta: -1.83251360385 - accumulated_s: 15.52402774814 -} -adc_trajectory_point { - x: -128.35158589 - y: 349.845269713 - z: -31.3300502952 - - speed: 3.57777786255 - acceleration_s: 0.290100372709 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.35158589 + y: 349.845269713 + z: -31.3300502952 + theta: -1.83255322038 + kappa: 0.000421022612763 + s: 15.55980552674 + dkappa: 0 + } + v: 3.57777786255 + a: 0.290100372709 relative_time: 5.2899999618530273 - theta: -1.83255322038 - accumulated_s: 15.55980552674 -} -adc_trajectory_point { - x: -128.36088326 - y: 349.811245014 - z: -31.3299333937 - - speed: 3.57777786255 - acceleration_s: 0.290100372709 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.36088326 + y: 349.811245014 + z: -31.3299333937 + theta: -1.83250645039 + kappa: 0.000421022612763 + s: 15.59558330534 + dkappa: 0 + } + v: 3.57777786255 + a: 0.290100372709 relative_time: 5.2999999523162842 - theta: -1.83250645039 - accumulated_s: 15.59558330534 -} -adc_trajectory_point { - x: -128.370264566 - y: 349.777203763 - z: -31.3298768196 - - speed: 3.57777786255 - acceleration_s: 0.270945996076 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.370264566 + y: 349.777203763 + z: -31.3298768196 + theta: -1.83260130435 + kappa: 0.000421022612763 + s: 15.63136108394 + dkappa: 0 + } + v: 3.57777786255 + a: 0.270945996076 relative_time: 5.309999942779541 - theta: -1.83260130435 - accumulated_s: 15.63136108394 -} -adc_trajectory_point { - x: -128.379618839 - y: 349.743159154 - z: -31.3297989694 - - speed: 3.57777786255 - acceleration_s: 0.135216470502 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.379618839 + y: 349.743159154 + z: -31.3297989694 + theta: -1.83264110082 + kappa: 0.000421022612763 + s: 15.667138862640002 + dkappa: 0 + } + v: 3.57777786255 + a: 0.135216470502 relative_time: 5.3199999332427979 - theta: -1.83264110082 - accumulated_s: 15.667138862640002 -} -adc_trajectory_point { - x: -128.38898418 - y: 349.709078116 - z: -31.3294439595 - - speed: 3.58333325386 - acceleration_s: 0.158682610034 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.38898418 + y: 349.709078116 + z: -31.3294439595 + theta: -1.83265476587 + kappa: 0.000421022612763 + s: 15.70297219514 + dkappa: 0 + } + v: 3.58333325386 + a: 0.158682610034 relative_time: 5.3300001621246338 - theta: -1.83265476587 - accumulated_s: 15.70297219514 -} -adc_trajectory_point { - x: -128.398356682 - y: 349.674983551 - z: -31.3292951919 - - speed: 3.58333325386 - acceleration_s: 0.247491454149 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.398356682 + y: 349.674983551 + z: -31.3292951919 + theta: -1.83267354789 + kappa: 0.000421022612763 + s: 15.73880552764 + dkappa: 0 + } + v: 3.58333325386 + a: 0.247491454149 relative_time: 5.3400001525878906 - theta: -1.83267354789 - accumulated_s: 15.73880552764 -} -adc_trajectory_point { - x: -128.407741547 - y: 349.64085883 - z: -31.3290389087 - - speed: 3.58888888359 - acceleration_s: 0.257360962182 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.407741547 + y: 349.64085883 + z: -31.3290389087 + theta: -1.83269688785 + kappa: 0.000421022612763 + s: 15.774694416540001 + dkappa: 0 + } + v: 3.58888888359 + a: 0.257360962182 relative_time: 5.3500001430511475 - theta: -1.83269688785 - accumulated_s: 15.774694416540001 -} -adc_trajectory_point { - x: -128.417126691 - y: 349.606716634 - z: -31.3288660683 - - speed: 3.58888888359 - acceleration_s: 0.252492361769 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.417126691 + y: 349.606716634 + z: -31.3288660683 + theta: -1.83273828427 + kappa: 0.000421022612763 + s: 15.81058330534 + dkappa: 0 + } + v: 3.58888888359 + a: 0.252492361769 relative_time: 5.3600001335144043 - theta: -1.83273828427 - accumulated_s: 15.81058330534 -} -adc_trajectory_point { - x: -128.426512813 - y: 349.572536216 - z: -31.328538863 - - speed: 3.59166669846 - acceleration_s: 0.270461365569 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.426512813 + y: 349.572536216 + z: -31.328538863 + theta: -1.83272536053 + kappa: 0.000421022612763 + s: 15.846499972339998 + dkappa: 0 + } + v: 3.59166669846 + a: 0.270461365569 relative_time: 5.3700001239776611 - theta: -1.83272536053 - accumulated_s: 15.846499972339998 -} -adc_trajectory_point { - x: -128.435929135 - y: 349.538388079 - z: -31.3283021813 - - speed: 3.59166669846 - acceleration_s: 0.0745257854394 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.435929135 + y: 349.538388079 + z: -31.3283021813 + theta: -1.83276970424 + kappa: 0.000421022612763 + s: 15.88241663934 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0745257854394 relative_time: 5.380000114440918 - theta: -1.83276970424 - accumulated_s: 15.88241663934 -} -adc_trajectory_point { - x: -128.445327148 - y: 349.504209446 - z: -31.3279309906 - - speed: 3.59166669846 - acceleration_s: 0.14209022716 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.445327148 + y: 349.504209446 + z: -31.3279309906 + theta: -1.83277794851 + kappa: 0.000421022612763 + s: 15.91833330634 + dkappa: 0 + } + v: 3.59166669846 + a: 0.14209022716 relative_time: 5.3900001049041748 - theta: -1.83277794851 - accumulated_s: 15.91833330634 -} -adc_trajectory_point { - x: -128.445327148 - y: 349.504209446 - z: -31.3279309906 - - speed: 3.59166669846 - acceleration_s: 0.14209022716 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.445327148 + y: 349.504209446 + z: -31.3279309906 + theta: -1.83277794851 + kappa: 0.000421022612763 + s: 15.954249973340001 + dkappa: 0 + } + v: 3.59166669846 + a: 0.14209022716 relative_time: 5.3900001049041748 - theta: -1.83277794851 - accumulated_s: 15.954249973340001 -} -adc_trajectory_point { - x: -128.464161002 - y: 349.435832216 - z: -31.3273048056 - - speed: 3.59166669846 - acceleration_s: 0.182318692509 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.464161002 + y: 349.435832216 + z: -31.3273048056 + theta: -1.83284020618 + kappa: 0.000421022612763 + s: 15.990166640239998 + dkappa: 0 + } + v: 3.59166669846 + a: 0.182318692509 relative_time: 5.4100000858306885 - theta: -1.83284020618 - accumulated_s: 15.990166640239998 -} -adc_trajectory_point { - x: -128.473580038 - y: 349.401608023 - z: -31.3269274253 - - speed: 3.59166669846 - acceleration_s: 0.186614034787 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.473580038 + y: 349.401608023 + z: -31.3269274253 + theta: -1.83285290131 + kappa: 0.000421022612763 + s: 16.02608330724 + dkappa: 0 + } + v: 3.59166669846 + a: 0.186614034787 relative_time: 5.4200000762939453 - theta: -1.83285290131 - accumulated_s: 16.02608330724 -} -adc_trajectory_point { - x: -128.483028135 - y: 349.367368334 - z: -31.3265979541 - - speed: 3.59166669846 - acceleration_s: 0.256491736264 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.483028135 + y: 349.367368334 + z: -31.3265979541 + theta: -1.83288330014 + kappa: 0.000421022612763 + s: 16.06199997424 + dkappa: 0 + } + v: 3.59166669846 + a: 0.256491736264 relative_time: 5.4300000667572021 - theta: -1.83288330014 - accumulated_s: 16.06199997424 -} -adc_trajectory_point { - x: -128.492464849 - y: 349.33311293 - z: -31.3262703242 - - speed: 3.59166669846 - acceleration_s: 0.193695838626 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.492464849 + y: 349.33311293 + z: -31.3262703242 + theta: -1.8328975954 + kappa: 0.000421022612763 + s: 16.09791664124 + dkappa: 0 + } + v: 3.59166669846 + a: 0.193695838626 relative_time: 5.440000057220459 - theta: -1.8328975954 - accumulated_s: 16.09791664124 -} -adc_trajectory_point { - x: -128.492464849 - y: 349.33311293 - z: -31.3262703242 - - speed: 3.59444451332 - acceleration_s: 0.193695838626 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.492464849 + y: 349.33311293 + z: -31.3262703242 + theta: -1.8328975954 + kappa: 0.000421022612763 + s: 16.13386108634 + dkappa: 0 + } + v: 3.59444451332 + a: 0.193695838626 relative_time: 5.440000057220459 - theta: -1.8328975954 - accumulated_s: 16.13386108634 -} -adc_trajectory_point { - x: -128.50190389 - y: 349.298837083 - z: -31.3259477625 - - speed: 3.59444451332 - acceleration_s: 0.155372344536 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.50190389 + y: 349.298837083 + z: -31.3259477625 + theta: -1.832898318 + kappa: 0.000421022612763 + s: 16.16980553154 + dkappa: 0 + } + v: 3.59444451332 + a: 0.155372344536 relative_time: 5.4500000476837158 - theta: -1.832898318 - accumulated_s: 16.16980553154 -} -adc_trajectory_point { - x: -128.520810944 - y: 349.230235123 - z: -31.3252398837 - - speed: 3.59444451332 - acceleration_s: 0.112043222129 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.520810944 + y: 349.230235123 + z: -31.3252398837 + theta: -1.83294695796 + kappa: 0.000421022612763 + s: 16.20574997664 + dkappa: 0 + } + v: 3.59444451332 + a: 0.112043222129 relative_time: 5.4700000286102295 - theta: -1.83294695796 - accumulated_s: 16.20574997664 -} -adc_trajectory_point { - x: -128.530256259 - y: 349.195893834 - z: -31.3248800915 - - speed: 3.59444451332 - acceleration_s: 0.222878830587 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.530256259 + y: 349.195893834 + z: -31.3248800915 + theta: -1.83292248995 + kappa: 0.000421022612763 + s: 16.24169442174 + dkappa: 0 + } + v: 3.59444451332 + a: 0.222878830587 relative_time: 5.4800000190734863 - theta: -1.83292248995 - accumulated_s: 16.24169442174 -} -adc_trajectory_point { - x: -128.539725901 - y: 349.161573111 - z: -31.3246459132 - - speed: 3.59722232819 - acceleration_s: 0.120873011999 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.539725901 + y: 349.161573111 + z: -31.3246459132 + theta: -1.83298261698 + kappa: 0.000421022612763 + s: 16.27766664504 + dkappa: 0 + } + v: 3.59722232819 + a: 0.120873011999 relative_time: 5.4900000095367432 - theta: -1.83298261698 - accumulated_s: 16.27766664504 -} -adc_trajectory_point { - x: -128.549184134 - y: 349.12720088 - z: -31.3242900204 - - speed: 3.59722232819 - acceleration_s: 0.120873011999 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.549184134 + y: 349.12720088 + z: -31.3242900204 + theta: -1.83300233614 + kappa: 0.000421022612763 + s: 16.31363886834 + dkappa: 0 + } + v: 3.59722232819 + a: 0.120873011999 relative_time: 5.5 - theta: -1.83300233614 - accumulated_s: 16.31363886834 -} -adc_trajectory_point { - x: -128.558619875 - y: 349.092842303 - z: -31.3240769766 - - speed: 3.59999990463 - acceleration_s: 0.0899515923125 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.558619875 + y: 349.092842303 + z: -31.3240769766 + theta: -1.83300530132 + kappa: 0.000421022612763 + s: 16.34963886734 + dkappa: 0 + } + v: 3.59999990463 + a: 0.0899515923125 relative_time: 5.5099999904632568 - theta: -1.83300530132 - accumulated_s: 16.34963886734 -} -adc_trajectory_point { - x: -128.568065056 - y: 349.05845142 - z: -31.3237765981 - - speed: 3.59999990463 - acceleration_s: 0.133486449623 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.568065056 + y: 349.05845142 + z: -31.3237765981 + theta: -1.83300882946 + kappa: 0.000421022612763 + s: 16.38563886644 + dkappa: 0 + } + v: 3.59999990463 + a: 0.133486449623 relative_time: 5.5199999809265137 - theta: -1.83300882946 - accumulated_s: 16.38563886644 -} -adc_trajectory_point { - x: -128.57752828 - y: 349.024049204 - z: -31.3234935207 - - speed: 3.60555553436 - acceleration_s: 0.133486449623 - curvature: 0.000382747802778 - curvature_change_rate: -0.00106155097655 +} +trajectory_point { + path_point { + x: -128.57752828 + y: 349.024049204 + z: -31.3234935207 + theta: -1.83304047453 + kappa: 0.000382747802778 + s: 16.42169442174 + dkappa: -0.00106155097655 + } + v: 3.60555553436 + a: 0.133486449623 relative_time: 5.5299999713897705 - theta: -1.83304047453 - accumulated_s: 16.42169442174 -} -adc_trajectory_point { - x: -128.586962949 - y: 348.989640534 - z: -31.3232645057 - - speed: 3.60555553436 - acceleration_s: 0.161516872723 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.586962949 + y: 348.989640534 + z: -31.3232645057 + theta: -1.8330598369 + kappa: 0.000382747802778 + s: 16.45774997714 + dkappa: 0 + } + v: 3.60555553436 + a: 0.161516872723 relative_time: 5.5399999618530273 - theta: -1.8330598369 - accumulated_s: 16.45774997714 -} -adc_trajectory_point { - x: -128.586962949 - y: 348.989640534 - z: -31.3232645057 - - speed: 3.60833334923 - acceleration_s: 0.161516872723 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.586962949 + y: 348.989640534 + z: -31.3232645057 + theta: -1.8330598369 + kappa: 0.000382747802778 + s: 16.49383331064 + dkappa: 0 + } + v: 3.60833334923 + a: 0.161516872723 relative_time: 5.5399999618530273 - theta: -1.8330598369 - accumulated_s: 16.49383331064 -} -adc_trajectory_point { - x: -128.60579751 - y: 348.920744031 - z: -31.3229042711 - - speed: 3.60833334923 - acceleration_s: 0.0788558856532 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.60579751 + y: 348.920744031 + z: -31.3229042711 + theta: -1.83306868542 + kappa: 0.000382747802778 + s: 16.52991664414 + dkappa: 0 + } + v: 3.60833334923 + a: 0.0788558856532 relative_time: 5.559999942779541 - theta: -1.83306868542 - accumulated_s: 16.52991664414 -} -adc_trajectory_point { - x: -128.615225254 - y: 348.886270789 - z: -31.322625909 - - speed: 3.61111116409 - acceleration_s: 0.140590028968 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.615225254 + y: 348.886270789 + z: -31.322625909 + theta: -1.83309581878 + kappa: 0.000382747802778 + s: 16.56602775574 + dkappa: 0 + } + v: 3.61111116409 + a: 0.140590028968 relative_time: 5.5699999332427979 - theta: -1.83309581878 - accumulated_s: 16.56602775574 -} -adc_trajectory_point { - x: -128.624648865 - y: 348.851799461 - z: -31.3225083668 - - speed: 3.61111116409 - acceleration_s: 0.108884639798 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.624648865 + y: 348.851799461 + z: -31.3225083668 + theta: -1.83316790317 + kappa: 0.000382747802778 + s: 16.60213886734 + dkappa: 0 + } + v: 3.61111116409 + a: 0.108884639798 relative_time: 5.5800001621246338 - theta: -1.83316790317 - accumulated_s: 16.60213886734 -} -adc_trajectory_point { - x: -128.63400663 - y: 348.817254923 - z: -31.3223352255 - - speed: 3.61388897896 - acceleration_s: 0.267570724127 - curvature: 0.000344473001902 - curvature_change_rate: -0.00105910284182 +} +trajectory_point { + path_point { + x: -128.63400663 + y: 348.817254923 + z: -31.3223352255 + theta: -1.833142604 + kappa: 0.000344473001902 + s: 16.63827775714 + dkappa: -0.00105910284182 + } + v: 3.61388897896 + a: 0.267570724127 relative_time: 5.5900001525878906 - theta: -1.833142604 - accumulated_s: 16.63827775714 -} -adc_trajectory_point { - x: -128.643438154 - y: 348.782758455 - z: -31.3224043744 - - speed: 3.61388897896 - acceleration_s: 0.267570724127 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.643438154 + y: 348.782758455 + z: -31.3224043744 + theta: -1.83321108238 + kappa: 0.000344473001902 + s: 16.67441664694 + dkappa: 0 + } + v: 3.61388897896 + a: 0.267570724127 relative_time: 5.6000001430511475 - theta: -1.83321108238 - accumulated_s: 16.67441664694 -} -adc_trajectory_point { - x: -128.652846624 - y: 348.748181911 - z: -31.3223548932 - - speed: 3.61944437027 - acceleration_s: 0.244506235761 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.652846624 + y: 348.748181911 + z: -31.3223548932 + theta: -1.83324851316 + kappa: 0.000344473001902 + s: 16.71061109064 + dkappa: 0 + } + v: 3.61944437027 + a: 0.244506235761 relative_time: 5.6100001335144043 - theta: -1.83324851316 - accumulated_s: 16.71061109064 -} -adc_trajectory_point { - x: -128.662263863 - y: 348.713605837 - z: -31.3224831503 - - speed: 3.61944437027 - acceleration_s: 0.268928460073 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.662263863 + y: 348.713605837 + z: -31.3224831503 + theta: -1.83326296881 + kappa: 0.000344473001902 + s: 16.74680553434 + dkappa: 0 + } + v: 3.61944437027 + a: 0.268928460073 relative_time: 5.6200001239776611 - theta: -1.83326296881 - accumulated_s: 16.74680553434 -} -adc_trajectory_point { - x: -128.671698662 - y: 348.679020583 - z: -31.3223722065 - - speed: 3.62222218513 - acceleration_s: 0.0920260062903 - curvature: 0.000306198182417 - curvature_change_rate: -0.0010566668064 +} +trajectory_point { + path_point { + x: -128.671698662 + y: 348.679020583 + z: -31.3223722065 + theta: -1.83326929087 + kappa: 0.000306198182417 + s: 16.78302775624 + dkappa: -0.0010566668064 + } + v: 3.62222218513 + a: 0.0920260062903 relative_time: 5.630000114440918 - theta: -1.83326929087 - accumulated_s: 16.78302775624 -} -adc_trajectory_point { - x: -128.681123508 - y: 348.64439284 - z: -31.3223687503 - - speed: 3.62222218513 - acceleration_s: 0.181258060653 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.681123508 + y: 348.64439284 + z: -31.3223687503 + theta: -1.83324653406 + kappa: 0.000306198182417 + s: 16.81924997804 + dkappa: 0 + } + v: 3.62222218513 + a: 0.181258060653 relative_time: 5.6400001049041748 - theta: -1.83324653406 - accumulated_s: 16.81924997804 -} -adc_trajectory_point { - x: -128.690588488 - y: 348.609798131 - z: -31.3223931799 - - speed: 3.625 - acceleration_s: 0.0756049361894 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.690588488 + y: 348.609798131 + z: -31.3223931799 + theta: -1.83326931385 + kappa: 0.000306198182417 + s: 16.85549997804 + dkappa: 0 + } + v: 3.625 + a: 0.0756049361894 relative_time: 5.6500000953674316 - theta: -1.83326931385 - accumulated_s: 16.85549997804 -} -adc_trajectory_point { - x: -128.700010708 - y: 348.575180874 - z: -31.3224781249 - - speed: 3.625 - acceleration_s: 0.0695705007903 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.700010708 + y: 348.575180874 + z: -31.3224781249 + theta: -1.83324714793 + kappa: 0.000306198182417 + s: 16.89174997804 + dkappa: 0 + } + v: 3.625 + a: 0.0695705007903 relative_time: 5.6600000858306885 - theta: -1.83324714793 - accumulated_s: 16.89174997804 -} -adc_trajectory_point { - x: -128.709466647 - y: 348.540562228 - z: -31.322558241 - - speed: 3.62777781487 - acceleration_s: 0.12094733008 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.709466647 + y: 348.540562228 + z: -31.322558241 + theta: -1.83324677267 + kappa: 0.000306198182417 + s: 16.92802775624 + dkappa: 0 + } + v: 3.62777781487 + a: 0.12094733008 relative_time: 5.6700000762939453 - theta: -1.83324677267 - accumulated_s: 16.92802775624 -} -adc_trajectory_point { - x: -128.718943556 - y: 348.50592714 - z: -31.3225481119 - - speed: 3.62777781487 - acceleration_s: 0.0852303491131 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.718943556 + y: 348.50592714 + z: -31.3225481119 + theta: -1.83327378221 + kappa: 0.000306198182417 + s: 16.96430553434 + dkappa: 0 + } + v: 3.62777781487 + a: 0.0852303491131 relative_time: 5.6800000667572021 - theta: -1.83327378221 - accumulated_s: 16.96430553434 -} -adc_trajectory_point { - x: -128.728403355 - y: 348.471275138 - z: -31.3226837125 - - speed: 3.6333334446 - acceleration_s: 0.174760376493 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.728403355 + y: 348.471275138 + z: -31.3226837125 + theta: -1.83325703247 + kappa: 0.000306198182417 + s: 17.00063886884 + dkappa: 0 + } + v: 3.6333334446 + a: 0.174760376493 relative_time: 5.690000057220459 - theta: -1.83325703247 - accumulated_s: 17.00063886884 -} -adc_trajectory_point { - x: -128.728403355 - y: 348.471275138 - z: -31.3226837125 - - speed: 3.6333334446 - acceleration_s: 0.174760376493 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.728403355 + y: 348.471275138 + z: -31.3226837125 + theta: -1.83325703247 + kappa: 0.000306198182417 + s: 17.03697220324 + dkappa: 0 + } + v: 3.6333334446 + a: 0.174760376493 relative_time: 5.690000057220459 - theta: -1.83325703247 - accumulated_s: 17.03697220324 -} -adc_trajectory_point { - x: -128.747422586 - y: 348.40193836 - z: -31.3225899553 - - speed: 3.63611102104 - acceleration_s: 0.152009968214 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.747422586 + y: 348.40193836 + z: -31.3225899553 + theta: -1.83330329738 + kappa: 0.000306198182417 + s: 17.07333331344 + dkappa: 0 + } + v: 3.63611102104 + a: 0.152009968214 relative_time: 5.7100000381469727 - theta: -1.83330329738 - accumulated_s: 17.07333331344 -} -adc_trajectory_point { - x: -128.756907795 - y: 348.367262238 - z: -31.3225059584 - - speed: 3.63611102104 - acceleration_s: 0.064294085383 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.756907795 + y: 348.367262238 + z: -31.3225059584 + theta: -1.83330186521 + kappa: 0.000306198182417 + s: 17.10969442364 + dkappa: 0 + } + v: 3.63611102104 + a: 0.064294085383 relative_time: 5.7200000286102295 - theta: -1.83330186521 - accumulated_s: 17.10969442364 -} -adc_trajectory_point { - x: -128.766423463 - y: 348.332610435 - z: -31.3225499941 - - speed: 3.63888883591 - acceleration_s: -0.00213218683621 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.766423463 + y: 348.332610435 + z: -31.3225499941 + theta: -1.83335389482 + kappa: 0.000306198182417 + s: 17.14608331204 + dkappa: 0 + } + v: 3.63888883591 + a: -0.00213218683621 relative_time: 5.7300000190734863 - theta: -1.83335389482 - accumulated_s: 17.14608331204 -} -adc_trajectory_point { - x: -128.775925212 - y: 348.297941251 - z: -31.3223879905 - - speed: 3.63888883591 - acceleration_s: -0.0206811253025 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.775925212 + y: 348.297941251 + z: -31.3223879905 + theta: -1.83337620271 + kappa: 0.000306198182417 + s: 17.18247220044 + dkappa: 0 + } + v: 3.63888883591 + a: -0.0206811253025 relative_time: 5.7400000095367432 - theta: -1.83337620271 - accumulated_s: 17.18247220044 -} -adc_trajectory_point { - x: -128.775925212 - y: 348.297941251 - z: -31.3223879905 - - speed: 3.64444446564 - acceleration_s: -0.0206811253025 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.775925212 + y: 348.297941251 + z: -31.3223879905 + theta: -1.83337620271 + kappa: 0.000306198182417 + s: 17.21891664504 + dkappa: 0 + } + v: 3.64444446564 + a: -0.0206811253025 relative_time: 5.7400000095367432 - theta: -1.83337620271 - accumulated_s: 17.21891664504 -} -adc_trajectory_point { - x: -128.794884444 - y: 348.228594425 - z: -31.3221440855 - - speed: 3.64444446564 - acceleration_s: 0.0664189717464 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.794884444 + y: 348.228594425 + z: -31.3221440855 + theta: -1.83340947483 + kappa: 0.000306198182417 + s: 17.25536108974 + dkappa: 0 + } + v: 3.64444446564 + a: 0.0664189717464 relative_time: 5.7599999904632568 - theta: -1.83340947483 - accumulated_s: 17.25536108974 -} -adc_trajectory_point { - x: -128.80435476 - y: 348.193421867 - z: -31.3222793574 - - speed: 3.6472222805 - acceleration_s: -0.010451624836 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.80435476 + y: 348.193421867 + z: -31.3222793574 + theta: -1.8333847907 + kappa: 0.000306198182417 + s: 17.29183331254 + dkappa: 0 + } + v: 3.6472222805 + a: -0.010451624836 relative_time: 5.7699999809265137 - theta: -1.8333847907 - accumulated_s: 17.29183331254 -} -adc_trajectory_point { - x: -128.813877908 - y: 348.158109563 - z: -31.3220262099 - - speed: 3.6472222805 - acceleration_s: 0.116941144297 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.813877908 + y: 348.158109563 + z: -31.3220262099 + theta: -1.83340538993 + kappa: 0.000306198182417 + s: 17.32830553534 + dkappa: 0 + } + v: 3.6472222805 + a: 0.116941144297 relative_time: 5.7799999713897705 - theta: -1.83340538993 - accumulated_s: 17.32830553534 -} -adc_trajectory_point { - x: -128.823362703 - y: 348.122826438 - z: -31.3219631752 - - speed: 3.65000009537 - acceleration_s: -0.0559222445909 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.823362703 + y: 348.122826438 + z: -31.3219631752 + theta: -1.83342351629 + kappa: 0.000306198182417 + s: 17.36480553624 + dkappa: 0 + } + v: 3.65000009537 + a: -0.0559222445909 relative_time: 5.7899999618530273 - theta: -1.83342351629 - accumulated_s: 17.36480553624 -} -adc_trajectory_point { - x: -128.832914021 - y: 348.087507412 - z: -31.3216921715 - - speed: 3.65000009537 - acceleration_s: -0.0559222445909 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.832914021 + y: 348.087507412 + z: -31.3216921715 + theta: -1.83350584857 + kappa: 0.000306198182417 + s: 17.40130553724 + dkappa: 0 + } + v: 3.65000009537 + a: -0.0559222445909 relative_time: 5.7999999523162842 - theta: -1.83350584857 - accumulated_s: 17.40130553724 -} -adc_trajectory_point { - x: -128.842405713 - y: 348.052218361 - z: -31.3216255363 - - speed: 3.65555548668 - acceleration_s: -0.0521618486926 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.842405713 + y: 348.052218361 + z: -31.3216255363 + theta: -1.83355365372 + kappa: 0.000306198182417 + s: 17.43786109214 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0521618486926 relative_time: 5.809999942779541 - theta: -1.83355365372 - accumulated_s: 17.43786109214 -} -adc_trajectory_point { - x: -128.851915135 - y: 348.016897349 - z: -31.3213174194 - - speed: 3.65555548668 - acceleration_s: 0.0526837508852 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.851915135 + y: 348.016897349 + z: -31.3213174194 + theta: -1.83360922393 + kappa: 0.000306198182417 + s: 17.47441664694 + dkappa: 0 + } + v: 3.65555548668 + a: 0.0526837508852 relative_time: 5.8199999332427979 - theta: -1.83360922393 - accumulated_s: 17.47441664694 -} -adc_trajectory_point { - x: -128.861414637 - y: 347.981596382 - z: -31.3211349919 - - speed: 3.65833330154 - acceleration_s: -0.0406594875565 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.861414637 + y: 347.981596382 + z: -31.3211349919 + theta: -1.8336526204 + kappa: 0.000306198182417 + s: 17.51099997994 + dkappa: 0 + } + v: 3.65833330154 + a: -0.0406594875565 relative_time: 5.8300001621246338 - theta: -1.8336526204 - accumulated_s: 17.51099997994 -} -adc_trajectory_point { - x: -128.870914301 - y: 347.946283142 - z: -31.320840802 - - speed: 3.65833330154 - acceleration_s: 0.0116797323649 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.870914301 + y: 347.946283142 + z: -31.320840802 + theta: -1.83369876334 + kappa: 0.000306198182417 + s: 17.54758331304 + dkappa: 0 + } + v: 3.65833330154 + a: 0.0116797323649 relative_time: 5.8400001525878906 - theta: -1.83369876334 - accumulated_s: 17.54758331304 -} -adc_trajectory_point { - x: -128.880418295 - y: 347.910989636 - z: -31.3206666745 - - speed: 3.65833330154 - acceleration_s: -0.0861593151846 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.880418295 + y: 347.910989636 + z: -31.3206666745 + theta: -1.83373288708 + kappa: 0.000306198182417 + s: 17.58416664604 + dkappa: 0 + } + v: 3.65833330154 + a: -0.0861593151846 relative_time: 5.8500001430511475 - theta: -1.83373288708 - accumulated_s: 17.58416664604 -} -adc_trajectory_point { - x: -128.889907116 - y: 347.875693631 - z: -31.3203567239 - - speed: 3.65833330154 - acceleration_s: -0.00489268748598 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.889907116 + y: 347.875693631 + z: -31.3203567239 + theta: -1.83375240354 + kappa: 0.000306198182417 + s: 17.62074997904 + dkappa: 0 + } + v: 3.65833330154 + a: -0.00489268748598 relative_time: 5.8600001335144043 - theta: -1.83375240354 - accumulated_s: 17.62074997904 -} -adc_trajectory_point { - x: -128.899410634 - y: 347.840401963 - z: -31.320089044 - - speed: 3.66111111641 - acceleration_s: -0.0935783389757 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.899410634 + y: 347.840401963 + z: -31.320089044 + theta: -1.83378538875 + kappa: 0.000306198182417 + s: 17.65736109014 + dkappa: 0 + } + v: 3.66111111641 + a: -0.0935783389757 relative_time: 5.8700001239776611 - theta: -1.83378538875 - accumulated_s: 17.65736109014 -} -adc_trajectory_point { - x: -128.908926725 - y: 347.805111515 - z: -31.3197257882 - - speed: 3.66111111641 - acceleration_s: -0.00380495882305 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.908926725 + y: 347.805111515 + z: -31.3197257882 + theta: -1.8338147345 + kappa: 0.000306198182417 + s: 17.69397220134 + dkappa: 0 + } + v: 3.66111111641 + a: -0.00380495882305 relative_time: 5.880000114440918 - theta: -1.8338147345 - accumulated_s: 17.69397220134 -} -adc_trajectory_point { - x: -128.918434719 - y: 347.769833174 - z: -31.3194898563 - - speed: 3.65833330154 - acceleration_s: -0.024698227929 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.918434719 + y: 347.769833174 + z: -31.3194898563 + theta: -1.83381612764 + kappa: 0.000306198182417 + s: 17.73055553434 + dkappa: 0 + } + v: 3.65833330154 + a: -0.024698227929 relative_time: 5.8900001049041748 - theta: -1.83381612764 - accumulated_s: 17.73055553434 -} -adc_trajectory_point { - x: -128.918434719 - y: 347.769833174 - z: -31.3194898563 - - speed: 3.65833330154 - acceleration_s: -0.024698227929 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.918434719 + y: 347.769833174 + z: -31.3194898563 + theta: -1.83381612764 + kappa: 0.000306198182417 + s: 17.76713886734 + dkappa: 0 + } + v: 3.65833330154 + a: -0.024698227929 relative_time: 5.8900001049041748 - theta: -1.83381612764 - accumulated_s: 17.76713886734 -} -adc_trajectory_point { - x: -128.937535935 - y: 347.699291058 - z: -31.3188980063 - - speed: 3.65555548668 - acceleration_s: 0.0180014027825 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.937535935 + y: 347.699291058 + z: -31.3188980063 + theta: -1.83388981528 + kappa: 0.000306198182417 + s: 17.80369442224 + dkappa: 0 + } + v: 3.65555548668 + a: 0.0180014027825 relative_time: 5.9100000858306885 - theta: -1.83388981528 - accumulated_s: 17.80369442224 -} -adc_trajectory_point { - x: -128.947072595 - y: 347.664025092 - z: -31.3186933706 - - speed: 3.65555548668 - acceleration_s: -0.03026701293 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.947072595 + y: 347.664025092 + z: -31.3186933706 + theta: -1.83388177205 + kappa: 0.000306198182417 + s: 17.84024997714 + dkappa: 0 + } + v: 3.65555548668 + a: -0.03026701293 relative_time: 5.9200000762939453 - theta: -1.83388177205 - accumulated_s: 17.84024997714 -} -adc_trajectory_point { - x: -128.956668694 - y: 347.628740485 - z: -31.3183895247 - - speed: 3.65555548668 - acceleration_s: 0.10998179492 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.956668694 + y: 347.628740485 + z: -31.3183895247 + theta: -1.83392784622 + kappa: 0.000306198182417 + s: 17.87680553194 + dkappa: 0 + } + v: 3.65555548668 + a: 0.10998179492 relative_time: 5.9300000667572021 - theta: -1.83392784622 - accumulated_s: 17.87680553194 -} -adc_trajectory_point { - x: -128.966223331 - y: 347.593491841 - z: -31.3182755476 - - speed: 3.65555548668 - acceleration_s: -0.0843506970322 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.966223331 + y: 347.593491841 + z: -31.3182755476 + theta: -1.83391813803 + kappa: 0.000306198182417 + s: 17.91336108684 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0843506970322 relative_time: 5.940000057220459 - theta: -1.83391813803 - accumulated_s: 17.91336108684 -} -adc_trajectory_point { - x: -128.966223331 - y: 347.593491841 - z: -31.3182755476 - - speed: 3.65555548668 - acceleration_s: -0.0843506970322 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.966223331 + y: 347.593491841 + z: -31.3182755476 + theta: -1.83391813803 + kappa: 0.000306198182417 + s: 17.94991664174 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0843506970322 relative_time: 5.940000057220459 - theta: -1.83391813803 - accumulated_s: 17.94991664174 -} -adc_trajectory_point { - x: -128.985374137 - y: 347.522983376 - z: -31.3178532086 - - speed: 3.65555548668 - acceleration_s: -0.166950694257 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.985374137 + y: 347.522983376 + z: -31.3178532086 + theta: -1.83398346852 + kappa: 0.000306198182417 + s: 17.98647219654 + dkappa: 0 + } + v: 3.65555548668 + a: -0.166950694257 relative_time: 5.9600000381469727 - theta: -1.83398346852 - accumulated_s: 17.98647219654 -} -adc_trajectory_point { - x: -128.994965177 - y: 347.487720583 - z: -31.3176200092 - - speed: 3.65555548668 - acceleration_s: -0.0204511831544 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -128.994965177 + y: 347.487720583 + z: -31.3176200092 + theta: -1.83403976228 + kappa: 0.000306198182417 + s: 18.02302775144 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0204511831544 relative_time: 5.9700000286102295 - theta: -1.83403976228 - accumulated_s: 18.02302775144 -} -adc_trajectory_point { - x: -129.004474712 - y: 347.452464119 - z: -31.3176097563 - - speed: 3.65555548668 - acceleration_s: -0.0320633572315 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.004474712 + y: 347.452464119 + z: -31.3176097563 + theta: -1.83403677768 + kappa: 0.000306198182417 + s: 18.05958330634 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0320633572315 relative_time: 5.9800000190734863 - theta: -1.83403677768 - accumulated_s: 18.05958330634 -} -adc_trajectory_point { - x: -129.013974239 - y: 347.41719439 - z: -31.3173825247 - - speed: 3.65555548668 - acceleration_s: -0.0599299942827 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.013974239 + y: 347.41719439 + z: -31.3173825247 + theta: -1.83402678259 + kappa: 0.000306198182417 + s: 18.09613886114 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0599299942827 relative_time: 5.9900000095367432 - theta: -1.83402678259 - accumulated_s: 18.09613886114 -} -adc_trajectory_point { - x: -129.023503848 - y: 347.381925744 - z: -31.3173442446 - - speed: 3.65555548668 - acceleration_s: 0.046905108494 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.023503848 + y: 347.381925744 + z: -31.3173442446 + theta: -1.83408365707 + kappa: 0.000306198182417 + s: 18.13269441604 + dkappa: 0 + } + v: 3.65555548668 + a: 0.046905108494 relative_time: 6 - theta: -1.83408365707 - accumulated_s: 18.13269441604 -} -adc_trajectory_point { - x: -129.032967857 - y: 347.346680499 - z: -31.3172769025 - - speed: 3.65277767181 - acceleration_s: -0.0940034228063 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.032967857 + y: 347.346680499 + z: -31.3172769025 + theta: -1.83411593178 + kappa: 0.000306198182417 + s: 18.16922219274 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0940034228063 relative_time: 6.0099999904632568 - theta: -1.83411593178 - accumulated_s: 18.16922219274 -} -adc_trajectory_point { - x: -129.042459873 - y: 347.311387587 - z: -31.3172792448 - - speed: 3.65277767181 - acceleration_s: -0.00645543837631 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.042459873 + y: 347.311387587 + z: -31.3172792448 + theta: -1.83414534893 + kappa: 0.000306198182417 + s: 18.20574996944 + dkappa: 0 + } + v: 3.65277767181 + a: -0.00645543837631 relative_time: 6.0199999809265137 - theta: -1.83414534893 - accumulated_s: 18.20574996944 -} -adc_trajectory_point { - x: -129.051890313 - y: 347.276123018 - z: -31.3172597084 - - speed: 3.65277767181 - acceleration_s: -0.116689519955 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.051890313 + y: 347.276123018 + z: -31.3172597084 + theta: -1.83415775234 + kappa: 0.000306198182417 + s: 18.24227774624 + dkappa: 0 + } + v: 3.65277767181 + a: -0.116689519955 relative_time: 6.0299999713897705 - theta: -1.83415775234 - accumulated_s: 18.24227774624 -} -adc_trajectory_point { - x: -129.061341013 - y: 347.240850585 - z: -31.317135131 - - speed: 3.65277767181 - acceleration_s: -0.0758492513875 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.061341013 + y: 347.240850585 + z: -31.317135131 + theta: -1.83417909744 + kappa: 0.000306198182417 + s: 18.27880552294 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0758492513875 relative_time: 6.0399999618530273 - theta: -1.83417909744 - accumulated_s: 18.27880552294 -} -adc_trajectory_point { - x: -129.070799785 - y: 347.20560676 - z: -31.3171576904 - - speed: 3.65277767181 - acceleration_s: -0.0758492513875 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.070799785 + y: 347.20560676 + z: -31.3171576904 + theta: -1.83422177769 + kappa: 0.000306198182417 + s: 18.31533329964 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0758492513875 relative_time: 6.0499999523162842 - theta: -1.83422177769 - accumulated_s: 18.31533329964 -} -adc_trajectory_point { - x: -129.080239181 - y: 347.170351132 - z: -31.3171366313 - - speed: 3.65277767181 - acceleration_s: -0.0493748088374 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.080239181 + y: 347.170351132 + z: -31.3171366313 + theta: -1.83423459994 + kappa: 0.000306198182417 + s: 18.35186107634 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0493748088374 relative_time: 6.059999942779541 - theta: -1.83423459994 - accumulated_s: 18.35186107634 -} -adc_trajectory_point { - x: -129.089707704 - y: 347.135114686 - z: -31.3172168136 - - speed: 3.65277767181 - acceleration_s: -0.0393327362459 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.089707704 + y: 347.135114686 + z: -31.3172168136 + theta: -1.83426627105 + kappa: 0.000306198182417 + s: 18.38838885304 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0393327362459 relative_time: 6.0699999332427979 - theta: -1.83426627105 - accumulated_s: 18.38838885304 -} -adc_trajectory_point { - x: -129.099169334 - y: 347.099885947 - z: -31.3171445988 - - speed: 3.65277767181 - acceleration_s: -0.111501511766 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.099169334 + y: 347.099885947 + z: -31.3171445988 + theta: -1.83428312571 + kappa: 0.000306198182417 + s: 18.42491662984 + dkappa: 0 + } + v: 3.65277767181 + a: -0.111501511766 relative_time: 6.0800001621246338 - theta: -1.83428312571 - accumulated_s: 18.42491662984 -} -adc_trajectory_point { - x: -129.099169334 - y: 347.099885947 - z: -31.3171445988 - - speed: 3.65555548668 - acceleration_s: -0.111501511766 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.099169334 + y: 347.099885947 + z: -31.3171445988 + theta: -1.83428312571 + kappa: 0.000306198182417 + s: 18.46147218464 + dkappa: 0 + } + v: 3.65555548668 + a: -0.111501511766 relative_time: 6.0800001621246338 - theta: -1.83428312571 - accumulated_s: 18.46147218464 -} -adc_trajectory_point { - x: -129.118160491 - y: 347.029486236 - z: -31.3170640124 - - speed: 3.65555548668 - acceleration_s: -0.121724568634 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.118160491 + y: 347.029486236 + z: -31.3170640124 + theta: -1.83429098538 + kappa: 0.000306198182417 + s: 18.49802773954 + dkappa: 0 + } + v: 3.65555548668 + a: -0.121724568634 relative_time: 6.1000001430511475 - theta: -1.83429098538 - accumulated_s: 18.49802773954 -} -adc_trajectory_point { - x: -129.127653655 - y: 346.994317179 - z: -31.3171625827 - - speed: 3.65555548668 - acceleration_s: -0.0777160575482 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.127653655 + y: 346.994317179 + z: -31.3171625827 + theta: -1.8342636569 + kappa: 0.000306198182417 + s: 18.53458329444 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0777160575482 relative_time: 6.1100001335144043 - theta: -1.8342636569 - accumulated_s: 18.53458329444 -} -adc_trajectory_point { - x: -129.137223893 - y: 346.959146591 - z: -31.3170938743 - - speed: 3.65555548668 - acceleration_s: -0.0415945226229 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.137223893 + y: 346.959146591 + z: -31.3170938743 + theta: -1.83429679067 + kappa: 0.000306198182417 + s: 18.57113884924 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0415945226229 relative_time: 6.1200001239776611 - theta: -1.83429679067 - accumulated_s: 18.57113884924 -} -adc_trajectory_point { - x: -129.146768627 - y: 346.923996494 - z: -31.3171985019 - - speed: 3.65833330154 - acceleration_s: -0.067983565307 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.146768627 + y: 346.923996494 + z: -31.3171985019 + theta: -1.83428711919 + kappa: 0.000306198182417 + s: 18.60772218224 + dkappa: 0 + } + v: 3.65833330154 + a: -0.067983565307 relative_time: 6.130000114440918 - theta: -1.83428711919 - accumulated_s: 18.60772218224 -} -adc_trajectory_point { - x: -129.15633304 - y: 346.888835191 - z: -31.3170995079 - - speed: 3.65833330154 - acceleration_s: -0.0289771275254 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.15633304 + y: 346.888835191 + z: -31.3170995079 + theta: -1.83425172795 + kappa: 0.000306198182417 + s: 18.64430551534 + dkappa: 0 + } + v: 3.65833330154 + a: -0.0289771275254 relative_time: 6.1400001049041748 - theta: -1.83425172795 - accumulated_s: 18.64430551534 -} -adc_trajectory_point { - x: -129.165939199 - y: 346.853721589 - z: -31.317190879 - - speed: 3.65833330154 - acceleration_s: -0.154710205289 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.165939199 + y: 346.853721589 + z: -31.317190879 + theta: -1.83428649298 + kappa: 0.000306198182417 + s: 18.68088884834 + dkappa: 0 + } + v: 3.65833330154 + a: -0.154710205289 relative_time: 6.1500000953674316 - theta: -1.83428649298 - accumulated_s: 18.68088884834 -} -adc_trajectory_point { - x: -129.175521357 - y: 346.818567896 - z: -31.317110558 - - speed: 3.65833330154 - acceleration_s: 0.0080517503164 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.175521357 + y: 346.818567896 + z: -31.317110558 + theta: -1.83426406695 + kappa: 0.000306198182417 + s: 18.71747218134 + dkappa: 0 + } + v: 3.65833330154 + a: 0.0080517503164 relative_time: 6.1600000858306885 - theta: -1.83426406695 - accumulated_s: 18.71747218134 -} -adc_trajectory_point { - x: -129.185120789 - y: 346.783470788 - z: -31.3172390172 - - speed: 3.65555548668 - acceleration_s: -0.173907420916 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.185120789 + y: 346.783470788 + z: -31.3172390172 + theta: -1.83427122892 + kappa: 0.000306198182417 + s: 18.75402773614 + dkappa: 0 + } + v: 3.65555548668 + a: -0.173907420916 relative_time: 6.1700000762939453 - theta: -1.83427122892 - accumulated_s: 18.75402773614 -} -adc_trajectory_point { - x: -129.194717279 - y: 346.748338709 - z: -31.3171520624 - - speed: 3.65555548668 - acceleration_s: -0.0136844627285 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.194717279 + y: 346.748338709 + z: -31.3171520624 + theta: -1.83425937592 + kappa: 0.000306198182417 + s: 18.79058329104 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0136844627285 relative_time: 6.1800000667572021 - theta: -1.83425937592 - accumulated_s: 18.79058329104 -} -adc_trajectory_point { - x: -129.204289177 - y: 346.713234305 - z: -31.3172889994 - - speed: 3.65555548668 - acceleration_s: -0.0766979134373 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.204289177 + y: 346.713234305 + z: -31.3172889994 + theta: -1.8342377925 + kappa: 0.000306198182417 + s: 18.82713884594 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0766979134373 relative_time: 6.190000057220459 - theta: -1.8342377925 - accumulated_s: 18.82713884594 -} -adc_trajectory_point { - x: -129.204289177 - y: 346.713234305 - z: -31.3172889994 - - speed: 3.65555548668 - acceleration_s: -0.0766979134373 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.204289177 + y: 346.713234305 + z: -31.3172889994 + theta: -1.8342377925 + kappa: 0.000306198182417 + s: 18.86369440084 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0766979134373 relative_time: 6.190000057220459 - theta: -1.8342377925 - accumulated_s: 18.86369440084 -} -adc_trajectory_point { - x: -129.22347362 - y: 346.643051338 - z: -31.3173899129 - - speed: 3.65555548668 - acceleration_s: -0.0928290252008 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.22347362 + y: 346.643051338 + z: -31.3173899129 + theta: -1.83427336071 + kappa: 0.000306198182417 + s: 18.90024995564 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0928290252008 relative_time: 6.2100000381469727 - theta: -1.83427336071 - accumulated_s: 18.90024995564 -} -adc_trajectory_point { - x: -129.233027734 - y: 346.607958597 - z: -31.3174155634 - - speed: 3.65555548668 - acceleration_s: -0.0608976298893 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.233027734 + y: 346.607958597 + z: -31.3174155634 + theta: -1.83427157498 + kappa: 0.000306198182417 + s: 18.93680551054 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0608976298893 relative_time: 6.2200000286102295 - theta: -1.83427157498 - accumulated_s: 18.93680551054 -} -adc_trajectory_point { - x: -129.24257554 - y: 346.572877518 - z: -31.3175391993 - - speed: 3.65555548668 - acceleration_s: -0.0807961446278 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.24257554 + y: 346.572877518 + z: -31.3175391993 + theta: -1.83426821445 + kappa: 0.000306198182417 + s: 18.97336106544 + dkappa: 0 + } + v: 3.65555548668 + a: -0.0807961446278 relative_time: 6.2300000190734863 - theta: -1.83426821445 - accumulated_s: 18.97336106544 -} -adc_trajectory_point { - x: -129.24257554 - y: 346.572877518 - z: -31.3175391993 - - speed: 3.65277767181 - acceleration_s: -0.0807961446278 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.24257554 + y: 346.572877518 + z: -31.3175391993 + theta: -1.83426821445 + kappa: 0.000306198182417 + s: 19.00988884214 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0807961446278 relative_time: 6.2300000190734863 - theta: -1.83426821445 - accumulated_s: 19.00988884214 -} -adc_trajectory_point { - x: -129.261661659 - y: 346.502707847 - z: -31.3178131804 - - speed: 3.65000009537 - acceleration_s: 0.0277393465352 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.261661659 + y: 346.502707847 + z: -31.3178131804 + theta: -1.83432744281 + kappa: 0.000306198182417 + s: 19.04638884304 + dkappa: 0 + } + v: 3.65000009537 + a: 0.0277393465352 relative_time: 6.25 - theta: -1.83432744281 - accumulated_s: 19.04638884304 -} -adc_trajectory_point { - x: -129.27116566 - y: 346.467611702 - z: -31.3180493098 - - speed: 3.65000009537 - acceleration_s: 0.0201547352708 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.27116566 + y: 346.467611702 + z: -31.3180493098 + theta: -1.83433005243 + kappa: 0.000306198182417 + s: 19.08288884404 + dkappa: 0 + } + v: 3.65000009537 + a: 0.0201547352708 relative_time: 6.2599999904632568 - theta: -1.83433005243 - accumulated_s: 19.08288884404 -} -adc_trajectory_point { - x: -129.28069172 - y: 346.432518376 - z: -31.3181998422 - - speed: 3.6472222805 - acceleration_s: -3.78345936202e-05 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.28069172 + y: 346.432518376 + z: -31.3181998422 + theta: -1.83436799068 + kappa: 0.000306198182417 + s: 19.11936106684 + dkappa: 0 + } + v: 3.6472222805 + a: -3.78345936202e-05 relative_time: 6.2699999809265137 - theta: -1.83436799068 - accumulated_s: 19.11936106684 -} -adc_trajectory_point { - x: -129.290214216 - y: 346.397426349 - z: -31.3184478153 - - speed: 3.6472222805 - acceleration_s: 0.0270069061289 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.290214216 + y: 346.397426349 + z: -31.3184478153 + theta: -1.83440787542 + kappa: 0.000306198182417 + s: 19.15583328964 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0270069061289 relative_time: 6.2799999713897705 - theta: -1.83440787542 - accumulated_s: 19.15583328964 -} -adc_trajectory_point { - x: -129.299697771 - y: 346.36232914 - z: -31.3187334156 - - speed: 3.6472222805 - acceleration_s: -0.0223318928808 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.299697771 + y: 346.36232914 + z: -31.3187334156 + theta: -1.83441522696 + kappa: 0.000306198182417 + s: 19.19230551244 + dkappa: 0 + } + v: 3.6472222805 + a: -0.0223318928808 relative_time: 6.2899999618530273 - theta: -1.83441522696 - accumulated_s: 19.19230551244 -} -adc_trajectory_point { - x: -129.30921575 - y: 346.327241022 - z: -31.3190805996 - - speed: 3.6472222805 - acceleration_s: -0.0223318928808 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.30921575 + y: 346.327241022 + z: -31.3190805996 + theta: -1.83447799964 + kappa: 0.000306198182417 + s: 19.22877773524 + dkappa: 0 + } + v: 3.6472222805 + a: -0.0223318928808 relative_time: 6.2999999523162842 - theta: -1.83447799964 - accumulated_s: 19.22877773524 -} -adc_trajectory_point { - x: -129.31870989 - y: 346.292146098 - z: -31.3193545844 - - speed: 3.6472222805 - acceleration_s: -0.0226427361261 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.31870989 + y: 346.292146098 + z: -31.3193545844 + theta: -1.83451173078 + kappa: 0.000306198182417 + s: 19.26524995804 + dkappa: 0 + } + v: 3.6472222805 + a: -0.0226427361261 relative_time: 6.309999942779541 - theta: -1.83451173078 - accumulated_s: 19.26524995804 -} -adc_trajectory_point { - x: -129.328200009 - y: 346.257048146 - z: -31.319717533 - - speed: 3.6472222805 - acceleration_s: 0.0168420478447 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.328200009 + y: 346.257048146 + z: -31.319717533 + theta: -1.83454723527 + kappa: 0.000306198182417 + s: 19.30172218084 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0168420478447 relative_time: 6.3199999332427979 - theta: -1.83454723527 - accumulated_s: 19.30172218084 -} -adc_trajectory_point { - x: -129.337699279 - y: 346.221964525 - z: -31.3200687738 - - speed: 3.6472222805 - acceleration_s: 0.0134572723884 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.337699279 + y: 346.221964525 + z: -31.3200687738 + theta: -1.83459977678 + kappa: 0.000306198182417 + s: 19.33819440364 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0134572723884 relative_time: 6.3300001621246338 - theta: -1.83459977678 - accumulated_s: 19.33819440364 -} -adc_trajectory_point { - x: -129.347183501 - y: 346.186866407 - z: -31.3205622882 - - speed: 3.6472222805 - acceleration_s: -0.0429886752916 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.347183501 + y: 346.186866407 + z: -31.3205622882 + theta: -1.83462852659 + kappa: 0.000306198182417 + s: 19.37466662644 + dkappa: 0 + } + v: 3.6472222805 + a: -0.0429886752916 relative_time: 6.3400001525878906 - theta: -1.83462852659 - accumulated_s: 19.37466662644 -} -adc_trajectory_point { - x: -129.356636595 - y: 346.151760793 - z: -31.3209341029 - - speed: 3.65000009537 - acceleration_s: -0.0429886752916 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.356636595 + y: 346.151760793 + z: -31.3209341029 + theta: -1.83464524903 + kappa: 0.000306198182417 + s: 19.41116662744 + dkappa: 0 + } + v: 3.65000009537 + a: -0.0429886752916 relative_time: 6.3500001430511475 - theta: -1.83464524903 - accumulated_s: 19.41116662744 -} -adc_trajectory_point { - x: -129.366116578 - y: 346.116670792 - z: -31.3213783717 - - speed: 3.65000009537 - acceleration_s: -0.0344350005933 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.366116578 + y: 346.116670792 + z: -31.3213783717 + theta: -1.8346970933 + kappa: 0.000306198182417 + s: 19.44766662834 + dkappa: 0 + } + v: 3.65000009537 + a: -0.0344350005933 relative_time: 6.3600001335144043 - theta: -1.8346970933 - accumulated_s: 19.44766662834 -} -adc_trajectory_point { - x: -129.375580078 - y: 346.081570938 - z: -31.3217631578 - - speed: 3.65277767181 - acceleration_s: -0.0155522188036 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.375580078 + y: 346.081570938 + z: -31.3217631578 + theta: -1.83473265181 + kappa: 0.000306198182417 + s: 19.48419440504 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0155522188036 relative_time: 6.3700001239776611 - theta: -1.83473265181 - accumulated_s: 19.48419440504 -} -adc_trajectory_point { - x: -129.385038758 - y: 346.046469238 - z: -31.3222754272 - - speed: 3.65277767181 - acceleration_s: 0.00546380045835 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.385038758 + y: 346.046469238 + z: -31.3222754272 + theta: -1.83476715968 + kappa: 0.000306198182417 + s: 19.52072218184 + dkappa: 0 + } + v: 3.65277767181 + a: 0.00546380045835 relative_time: 6.380000114440918 - theta: -1.83476715968 - accumulated_s: 19.52072218184 -} -adc_trajectory_point { - x: -129.394471084 - y: 346.011374456 - z: -31.3226575432 - - speed: 3.65277767181 - acceleration_s: -0.0777018669801 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.394471084 + y: 346.011374456 + z: -31.3226575432 + theta: -1.83479002852 + kappa: 0.000306198182417 + s: 19.55724995854 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0777018669801 relative_time: 6.3900001049041748 - theta: -1.83479002852 - accumulated_s: 19.55724995854 -} -adc_trajectory_point { - x: -129.394471084 - y: 346.011374456 - z: -31.3226575432 - - speed: 3.65277767181 - acceleration_s: -0.0777018669801 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.394471084 + y: 346.011374456 + z: -31.3226575432 + theta: -1.83479002852 + kappa: 0.000306198182417 + s: 19.59377773524 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0777018669801 relative_time: 6.3900001049041748 - theta: -1.83479002852 - accumulated_s: 19.59377773524 -} -adc_trajectory_point { - x: -129.413317017 - y: 345.941201373 - z: -31.323369341 - - speed: 3.65277767181 - acceleration_s: -0.0862688680924 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.413317017 + y: 345.941201373 + z: -31.323369341 + theta: -1.83485060831 + kappa: 0.000306198182417 + s: 19.63030551194 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0862688680924 relative_time: 6.4100000858306885 - theta: -1.83485060831 - accumulated_s: 19.63030551194 -} -adc_trajectory_point { - x: -129.422707584 - y: 345.906143231 - z: -31.3237910457 - - speed: 3.65277767181 - acceleration_s: -0.180415417519 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.422707584 + y: 345.906143231 + z: -31.3237910457 + theta: -1.83485909853 + kappa: 0.000306198182417 + s: 19.66683328864 + dkappa: 0 + } + v: 3.65277767181 + a: -0.180415417519 relative_time: 6.4200000762939453 - theta: -1.83485909853 - accumulated_s: 19.66683328864 -} -adc_trajectory_point { - x: -129.432143564 - y: 345.871078195 - z: -31.3240548242 - - speed: 3.65277767181 - acceleration_s: 0.0094313715807 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.432143564 + y: 345.871078195 + z: -31.3240548242 + theta: -1.8348882783 + kappa: 0.000306198182417 + s: 19.70336106544 + dkappa: 0 + } + v: 3.65277767181 + a: 0.0094313715807 relative_time: 6.4300000667572021 - theta: -1.8348882783 - accumulated_s: 19.70336106544 -} -adc_trajectory_point { - x: -129.441548011 - y: 345.836032091 - z: -31.3244027384 - - speed: 3.65277767181 - acceleration_s: -0.121457069227 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.441548011 + y: 345.836032091 + z: -31.3244027384 + theta: -1.8349131293 + kappa: 0.000306198182417 + s: 19.73988884214 + dkappa: 0 + } + v: 3.65277767181 + a: -0.121457069227 relative_time: 6.440000057220459 - theta: -1.8349131293 - accumulated_s: 19.73988884214 -} -adc_trajectory_point { - x: -129.441548011 - y: 345.836032091 - z: -31.3244027384 - - speed: 3.6472222805 - acceleration_s: -0.121457069227 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.441548011 + y: 345.836032091 + z: -31.3244027384 + theta: -1.8349131293 + kappa: 0.000306198182417 + s: 19.77636106494 + dkappa: 0 + } + v: 3.6472222805 + a: -0.121457069227 relative_time: 6.440000057220459 - theta: -1.8349131293 - accumulated_s: 19.77636106494 -} -adc_trajectory_point { - x: -129.460422038 - y: 345.765960823 - z: -31.3248903314 - - speed: 3.6472222805 - acceleration_s: -0.0917973651491 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.460422038 + y: 345.765960823 + z: -31.3248903314 + theta: -1.83494818864 + kappa: 0.000306198182417 + s: 19.81283328774 + dkappa: 0 + } + v: 3.6472222805 + a: -0.0917973651491 relative_time: 6.4600000381469727 - theta: -1.83494818864 - accumulated_s: 19.81283328774 -} -adc_trajectory_point { - x: -129.469852748 - y: 345.730945114 - z: -31.3251484316 - - speed: 3.65277767181 - acceleration_s: -0.0846483845587 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.469852748 + y: 345.730945114 + z: -31.3251484316 + theta: -1.83495723802 + kappa: 0.000306198182417 + s: 19.84936106444 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0846483845587 relative_time: 6.4700000286102295 - theta: -1.83495723802 - accumulated_s: 19.84936106444 -} -adc_trajectory_point { - x: -129.479317847 - y: 345.69594344 - z: -31.3253113199 - - speed: 3.65277767181 - acceleration_s: -0.0746387294766 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.479317847 + y: 345.69594344 + z: -31.3253113199 + theta: -1.83496375991 + kappa: 0.000306198182417 + s: 19.88588884114 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0746387294766 relative_time: 6.4800000190734863 - theta: -1.83496375991 - accumulated_s: 19.88588884114 -} -adc_trajectory_point { - x: -129.488778186 - y: 345.660933118 - z: -31.3255431205 - - speed: 3.65277767181 - acceleration_s: -0.0300390884564 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.488778186 + y: 345.660933118 + z: -31.3255431205 + theta: -1.8349934192 + kappa: 0.000306198182417 + s: 19.92241661784 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0300390884564 relative_time: 6.4900000095367432 - theta: -1.8349934192 - accumulated_s: 19.92241661784 -} -adc_trajectory_point { - x: -129.498214949 - y: 345.625922892 - z: -31.3257153593 - - speed: 3.65277767181 - acceleration_s: -0.0185303335792 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.498214949 + y: 345.625922892 + z: -31.3257153593 + theta: -1.83494739731 + kappa: 0.000306198182417 + s: 19.95894439464 + dkappa: 0 + } + v: 3.65277767181 + a: -0.0185303335792 relative_time: 6.5 - theta: -1.83494739731 - accumulated_s: 19.95894439464 -} -adc_trajectory_point { - x: -129.507687542 - y: 345.590936906 - z: -31.3258919828 - - speed: 3.6472222805 - acceleration_s: -0.0500041541476 - curvature: 0.000344473001902 - curvature_change_rate: 0.00104942382287 +} +trajectory_point { + path_point { + x: -129.507687542 + y: 345.590936906 + z: -31.3258919828 + theta: -1.83497135339 + kappa: 0.000344473001902 + s: 19.99541661744 + dkappa: 0.00104942382287 + } + v: 3.6472222805 + a: -0.0500041541476 relative_time: 6.5099999904632568 - theta: -1.83497135339 - accumulated_s: 19.99541661744 -} -adc_trajectory_point { - x: -129.517164619 - y: 345.555963603 - z: -31.3259384055 - - speed: 3.6472222805 - acceleration_s: -0.100189193698 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.517164619 + y: 345.555963603 + z: -31.3259384055 + theta: -1.83498922676 + kappa: 0.000344473001902 + s: 20.03188884024 + dkappa: 0 + } + v: 3.6472222805 + a: -0.100189193698 relative_time: 6.5199999809265137 - theta: -1.83498922676 - accumulated_s: 20.03188884024 -} -adc_trajectory_point { - x: -129.526626922 - y: 345.52100996 - z: -31.3260490689 - - speed: 3.64444446564 - acceleration_s: -0.124155160463 - curvature: 0.000306198182417 - curvature_change_rate: -0.00105022369926 +} +trajectory_point { + path_point { + x: -129.526626922 + y: 345.52100996 + z: -31.3260490689 + theta: -1.83499340889 + kappa: 0.000306198182417 + s: 20.06833328484 + dkappa: -0.00105022369926 + } + v: 3.64444446564 + a: -0.124155160463 relative_time: 6.5299999713897705 - theta: -1.83499340889 - accumulated_s: 20.06833328484 -} -adc_trajectory_point { - x: -129.536081936 - y: 345.486043899 - z: -31.3260735376 - - speed: 3.64444446564 - acceleration_s: -0.0670091040972 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.536081936 + y: 345.486043899 + z: -31.3260735376 + theta: -1.83499570125 + kappa: 0.000306198182417 + s: 20.10477772954 + dkappa: 0 + } + v: 3.64444446564 + a: -0.0670091040972 relative_time: 6.5399999618530273 - theta: -1.83499570125 - accumulated_s: 20.10477772954 -} -adc_trajectory_point { - x: -129.545535788 - y: 345.451094071 - z: -31.3261832111 - - speed: 3.64166665077 - acceleration_s: -0.0408489272938 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.545535788 + y: 345.451094071 + z: -31.3261832111 + theta: -1.83501733108 + kappa: 0.000306198182417 + s: 20.14119439604 + dkappa: 0 + } + v: 3.64166665077 + a: -0.0408489272938 relative_time: 6.5499999523162842 - theta: -1.83501733108 - accumulated_s: 20.14119439604 -} -adc_trajectory_point { - x: -129.554993532 - y: 345.41615812 - z: -31.3260969017 - - speed: 3.64166665077 - acceleration_s: -0.132184730869 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.554993532 + y: 345.41615812 + z: -31.3260969017 + theta: -1.83503692337 + kappa: 0.000306198182417 + s: 20.17761106254 + dkappa: 0 + } + v: 3.64166665077 + a: -0.132184730869 relative_time: 6.559999942779541 - theta: -1.83503692337 - accumulated_s: 20.17761106254 -} -adc_trajectory_point { - x: -129.564437439 - y: 345.381213626 - z: -31.3260549838 - - speed: 3.63888883591 - acceleration_s: -0.0357402259984 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.564437439 + y: 345.381213626 + z: -31.3260549838 + theta: -1.83502961453 + kappa: 0.000306198182417 + s: 20.21399995084 + dkappa: 0 + } + v: 3.63888883591 + a: -0.0357402259984 relative_time: 6.5699999332427979 - theta: -1.83502961453 - accumulated_s: 20.21399995084 -} -adc_trajectory_point { - x: -129.573875596 - y: 345.346308868 - z: -31.3259546869 - - speed: 3.63888883591 - acceleration_s: -0.179218478733 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.573875596 + y: 345.346308868 + z: -31.3259546869 + theta: -1.83505595463 + kappa: 0.000306198182417 + s: 20.25038883924 + dkappa: 0 + } + v: 3.63888883591 + a: -0.179218478733 relative_time: 6.5800001621246338 - theta: -1.83505595463 - accumulated_s: 20.25038883924 -} -adc_trajectory_point { - x: -129.583295079 - y: 345.311400863 - z: -31.3258660883 - - speed: 3.63611102104 - acceleration_s: -0.14104756078 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.583295079 + y: 345.311400863 + z: -31.3258660883 + theta: -1.83504353384 + kappa: 0.000306198182417 + s: 20.28674994944 + dkappa: 0 + } + v: 3.63611102104 + a: -0.14104756078 relative_time: 6.5900001525878906 - theta: -1.83504353384 - accumulated_s: 20.28674994944 -} -adc_trajectory_point { - x: -129.592745155 - y: 345.276516173 - z: -31.3256460568 - - speed: 3.63611102104 - acceleration_s: -0.14104756078 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.592745155 + y: 345.276516173 + z: -31.3256460568 + theta: -1.83510684167 + kappa: 0.000306198182417 + s: 20.32311105964 + dkappa: 0 + } + v: 3.63611102104 + a: -0.14104756078 relative_time: 6.6000001430511475 - theta: -1.83510684167 - accumulated_s: 20.32311105964 -} -adc_trajectory_point { - x: -129.602163877 - y: 345.241656153 - z: -31.3255364103 - - speed: 3.63055562973 - acceleration_s: -0.202637106058 - curvature: 0.000344473001902 - curvature_change_rate: 0.00105424137207 +} +trajectory_point { + path_point { + x: -129.602163877 + y: 345.241656153 + z: -31.3255364103 + theta: -1.8351174499 + kappa: 0.000344473001902 + s: 20.35941661594 + dkappa: 0.00105424137207 + } + v: 3.63055562973 + a: -0.202637106058 relative_time: 6.6100001335144043 - theta: -1.8351174499 - accumulated_s: 20.35941661594 -} -adc_trajectory_point { - x: -129.611589604 - y: 345.206780468 - z: -31.325259841 - - speed: 3.63055562973 - acceleration_s: -0.0529375409386 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.611589604 + y: 345.206780468 + z: -31.325259841 + theta: -1.83514459552 + kappa: 0.000344473001902 + s: 20.39572217224 + dkappa: 0 + } + v: 3.63055562973 + a: -0.0529375409386 relative_time: 6.6200001239776611 - theta: -1.83514459552 - accumulated_s: 20.39572217224 -} -adc_trajectory_point { - x: -129.621012792 - y: 345.171960242 - z: -31.3250496518 - - speed: 3.62777781487 - acceleration_s: -0.228524209812 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.621012792 + y: 345.171960242 + z: -31.3250496518 + theta: -1.83520069842 + kappa: 0.000344473001902 + s: 20.43199995044 + dkappa: 0 + } + v: 3.62777781487 + a: -0.228524209812 relative_time: 6.630000114440918 - theta: -1.83520069842 - accumulated_s: 20.43199995044 -} -adc_trajectory_point { - x: -129.630431507 - y: 345.137122284 - z: -31.3246317841 - - speed: 3.62777781487 - acceleration_s: -0.147046015386 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.630431507 + y: 345.137122284 + z: -31.3246317841 + theta: -1.83521659013 + kappa: 0.000344473001902 + s: 20.46827772854 + dkappa: 0 + } + v: 3.62777781487 + a: -0.147046015386 relative_time: 6.6400001049041748 - theta: -1.83521659013 - accumulated_s: 20.46827772854 -} -adc_trajectory_point { - x: -129.639826233 - y: 345.102335135 - z: -31.3244052771 - - speed: 3.625 - acceleration_s: -0.272404638527 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.639826233 + y: 345.102335135 + z: -31.3244052771 + theta: -1.83523313511 + kappa: 0.000344473001902 + s: 20.50452772854 + dkappa: 0 + } + v: 3.625 + a: -0.272404638527 relative_time: 6.6500000953674316 - theta: -1.83523313511 - accumulated_s: 20.50452772854 -} -adc_trajectory_point { - x: -129.649232566 - y: 345.067548398 - z: -31.3239967572 - - speed: 3.625 - acceleration_s: -0.192874921616 - curvature: 0.000344473001902 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.649232566 + y: 345.067548398 + z: -31.3239967572 + theta: -1.83524611124 + kappa: 0.000344473001902 + s: 20.54077772854 + dkappa: 0 + } + v: 3.625 + a: -0.192874921616 relative_time: 6.6600000858306885 - theta: -1.83524611124 - accumulated_s: 20.54077772854 -} -adc_trajectory_point { - x: -129.658667824 - y: 345.032790706 - z: -31.3236352932 - - speed: 3.62222218513 - acceleration_s: -0.15964150738 - curvature: 0.000382747802778 - curvature_change_rate: 0.00105666629269 +} +trajectory_point { + path_point { + x: -129.658667824 + y: 345.032790706 + z: -31.3236352932 + theta: -1.83528687864 + kappa: 0.000382747802778 + s: 20.57699995044 + dkappa: 0.00105666629269 + } + v: 3.62222218513 + a: -0.15964150738 relative_time: 6.6700000762939453 - theta: -1.83528687864 - accumulated_s: 20.57699995044 -} -adc_trajectory_point { - x: -129.668077114 - y: 344.998025352 - z: -31.3231557216 - - speed: 3.62222218513 - acceleration_s: -0.0776846328398 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.668077114 + y: 344.998025352 + z: -31.3231557216 + theta: -1.83531775266 + kappa: 0.000382747802778 + s: 20.61322217224 + dkappa: 0 + } + v: 3.62222218513 + a: -0.0776846328398 relative_time: 6.6800000667572021 - theta: -1.83531775266 - accumulated_s: 20.61322217224 -} -adc_trajectory_point { - x: -129.677514907 - y: 344.963309309 - z: -31.3228179542 - - speed: 3.6166665554 - acceleration_s: -0.19631417218 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.677514907 + y: 344.963309309 + z: -31.3228179542 + theta: -1.8353728734 + kappa: 0.000382747802778 + s: 20.64938883784 + dkappa: 0 + } + v: 3.6166665554 + a: -0.19631417218 relative_time: 6.690000057220459 - theta: -1.8353728734 - accumulated_s: 20.64938883784 -} -adc_trajectory_point { - x: -129.677514907 - y: 344.963309309 - z: -31.3228179542 - - speed: 3.6166665554 - acceleration_s: -0.19631417218 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.677514907 + y: 344.963309309 + z: -31.3228179542 + theta: -1.8353728734 + kappa: 0.000382747802778 + s: 20.68555550334 + dkappa: 0 + } + v: 3.6166665554 + a: -0.19631417218 relative_time: 6.690000057220459 - theta: -1.8353728734 - accumulated_s: 20.68555550334 -} -adc_trajectory_point { - x: -129.696340921 - y: 344.893907899 - z: -31.3219241276 - - speed: 3.6166665554 - acceleration_s: -0.319462048242 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.696340921 + y: 344.893907899 + z: -31.3219241276 + theta: -1.83542870108 + kappa: 0.000382747802778 + s: 20.72172216894 + dkappa: 0 + } + v: 3.6166665554 + a: -0.319462048242 relative_time: 6.7100000381469727 - theta: -1.83542870108 - accumulated_s: 20.72172216894 -} -adc_trajectory_point { - x: -129.705768851 - y: 344.859209441 - z: -31.3214228358 - - speed: 3.6166665554 - acceleration_s: -0.0709556862685 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.705768851 + y: 344.859209441 + z: -31.3214228358 + theta: -1.83546825617 + kappa: 0.000382747802778 + s: 20.75788883444 + dkappa: 0 + } + v: 3.6166665554 + a: -0.0709556862685 relative_time: 6.7200000286102295 - theta: -1.83546825617 - accumulated_s: 20.75788883444 -} -adc_trajectory_point { - x: -129.715139657 - y: 344.824542555 - z: -31.3210016955 - - speed: 3.61111116409 - acceleration_s: -0.184650990123 - curvature: 0.000459297432768 - curvature_change_rate: 0.00211983587631 +} +trajectory_point { + path_point { + x: -129.715139657 + y: 344.824542555 + z: -31.3210016955 + theta: -1.83547192106 + kappa: 0.000459297432768 + s: 20.79399994614 + dkappa: 0.00211983587631 + } + v: 3.61111116409 + a: -0.184650990123 relative_time: 6.7300000190734863 - theta: -1.83547192106 - accumulated_s: 20.79399994614 -} -adc_trajectory_point { - x: -129.72453811 - y: 344.789848345 - z: -31.3205012884 - - speed: 3.61111116409 - acceleration_s: 0.0243190105165 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.72453811 + y: 344.789848345 + z: -31.3205012884 + theta: -1.83547946165 + kappa: 0.000459297432768 + s: 20.83011105774 + dkappa: 0 + } + v: 3.61111116409 + a: 0.0243190105165 relative_time: 6.7400000095367432 - theta: -1.83547946165 - accumulated_s: 20.83011105774 -} -adc_trajectory_point { - x: -129.733909052 - y: 344.755222142 - z: -31.3200632455 - - speed: 3.60833334923 - acceleration_s: 0.0243190105165 - curvature: 0.00053584710648 - curvature_change_rate: 0.00212146900808 +} +trajectory_point { + path_point { + x: -129.733909052 + y: 344.755222142 + z: -31.3200632455 + theta: -1.8355071408 + kappa: 0.00053584710648 + s: 20.86619439124 + dkappa: 0.00212146900808 + } + v: 3.60833334923 + a: 0.0243190105165 relative_time: 6.75 - theta: -1.8355071408 - accumulated_s: 20.86619439124 -} -adc_trajectory_point { - x: -129.74329153 - y: 344.720570456 - z: -31.3195253564 - - speed: 3.60833334923 - acceleration_s: -0.0802392055238 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.74329153 + y: 344.720570456 + z: -31.3195253564 + theta: -1.8355370792 + kappa: 0.00053584710648 + s: 20.90227772474 + dkappa: 0 + } + v: 3.60833334923 + a: -0.0802392055238 relative_time: 6.7599999904632568 - theta: -1.8355370792 - accumulated_s: 20.90227772474 -} -adc_trajectory_point { - x: -129.752339561 - y: 344.685411672 - z: -31.3193645151 - - speed: 3.60555553436 - acceleration_s: -0.217940655795 - curvature: 0.000612396831201 - curvature_change_rate: 0.00212310485836 +} +trajectory_point { + path_point { + x: -129.752339561 + y: 344.685411672 + z: -31.3193645151 + theta: -1.83540903156 + kappa: 0.000612396831201 + s: 20.93833328004 + dkappa: 0.00212310485836 + } + v: 3.60555553436 + a: -0.217940655795 relative_time: 6.7699999809265137 - theta: -1.83540903156 - accumulated_s: 20.93833328004 -} -adc_trajectory_point { - x: -129.761412977 - y: 344.650285541 - z: -31.3188640121 - - speed: 3.60555553436 - acceleration_s: -0.0888897122952 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.761412977 + y: 344.650285541 + z: -31.3188640121 + theta: -1.83538202008 + kappa: 0.000612396831201 + s: 20.97438883544 + dkappa: 0 + } + v: 3.60555553436 + a: -0.0888897122952 relative_time: 6.7799999713897705 - theta: -1.83538202008 - accumulated_s: 20.97438883544 -} -adc_trajectory_point { - x: -129.770502409 - y: 344.615185695 - z: -31.318396044 - - speed: 3.60555553436 - acceleration_s: -0.0970255434221 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.770502409 + y: 344.615185695 + z: -31.318396044 + theta: -1.83541351809 + kappa: 0.000612396831201 + s: 21.01044439074 + dkappa: 0 + } + v: 3.60555553436 + a: -0.0970255434221 relative_time: 6.7899999618530273 - theta: -1.83541351809 - accumulated_s: 21.01044439074 -} -adc_trajectory_point { - x: -129.779559999 - y: 344.580118708 - z: -31.3179246383 - - speed: 3.6027777195 - acceleration_s: -0.160513943904 - curvature: 0.000727221583477 - curvature_change_rate: 0.00318711730825 +} +trajectory_point { + path_point { + x: -129.779559999 + y: 344.580118708 + z: -31.3179246383 + theta: -1.83541022882 + kappa: 0.000727221583477 + s: 21.04647216794 + dkappa: 0.00318711730825 + } + v: 3.6027777195 + a: -0.160513943904 relative_time: 6.7999999523162842 - theta: -1.83541022882 - accumulated_s: 21.04647216794 -} -adc_trajectory_point { - x: -129.788646354 - y: 344.545016546 - z: -31.3174221944 - - speed: 3.59999990463 - acceleration_s: -0.0569414320492 - curvature: 0.000803771467601 - curvature_change_rate: 0.00212638572645 +} +trajectory_point { + path_point { + x: -129.788646354 + y: 344.545016546 + z: -31.3174221944 + theta: -1.83545382293 + kappa: 0.000803771467601 + s: 21.08247216704 + dkappa: 0.00212638572645 + } + v: 3.59999990463 + a: -0.0569414320492 relative_time: 6.809999942779541 - theta: -1.83545382293 - accumulated_s: 21.08247216704 -} -adc_trajectory_point { - x: -129.797684374 - y: 344.509954644 - z: -31.3169609178 - - speed: 3.59999990463 - acceleration_s: -0.143530273352 - curvature: 0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.797684374 + y: 344.509954644 + z: -31.3169609178 + theta: -1.83542725496 + kappa: 0.000803771467601 + s: 21.11847216604 + dkappa: 0 + } + v: 3.59999990463 + a: -0.143530273352 relative_time: 6.8199999332427979 - theta: -1.83542725496 - accumulated_s: 21.11847216604 -} -adc_trajectory_point { - x: -129.797684374 - y: 344.509954644 - z: -31.3169609178 - - speed: 3.59722232819 - acceleration_s: -0.143530273352 - curvature: 0.000918596439528 - curvature_change_rate: 0.00319204545761 +} +trajectory_point { + path_point { + x: -129.797684374 + y: 344.509954644 + z: -31.3169609178 + theta: -1.83542725496 + kappa: 0.000918596439528 + s: 21.15444438934 + dkappa: 0.00319204545761 + } + v: 3.59722232819 + a: -0.143530273352 relative_time: 6.8199999332427979 - theta: -1.83542725496 - accumulated_s: 21.15444438934 -} -adc_trajectory_point { - x: -129.815815005 - y: 344.439830258 - z: -31.316028866 - - speed: 3.59722232819 - acceleration_s: -0.0390725718343 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.815815005 + y: 344.439830258 + z: -31.316028866 + theta: -1.83543533505 + kappa: 0.000918596439528 + s: 21.19041661264 + dkappa: 0 + } + v: 3.59722232819 + a: -0.0390725718343 relative_time: 6.8400001525878906 - theta: -1.83543533505 - accumulated_s: 21.19041661264 -} -adc_trajectory_point { - x: -129.824892932 - y: 344.404782171 - z: -31.3154866332 - - speed: 3.59722232819 - acceleration_s: -0.0654790775035 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.824892932 + y: 344.404782171 + z: -31.3154866332 + theta: -1.8354392835 + kappa: 0.000918596439528 + s: 21.22638883594 + dkappa: 0 + } + v: 3.59722232819 + a: -0.0654790775035 relative_time: 6.8500001430511475 - theta: -1.8354392835 - accumulated_s: 21.22638883594 -} -adc_trajectory_point { - x: -129.833961849 - y: 344.369744159 - z: -31.3150062934 - - speed: 3.59444451332 - acceleration_s: -0.0690526666074 - curvature: 0.0009951465286 - curvature_change_rate: 0.00212967786228 +} +trajectory_point { + path_point { + x: -129.833961849 + y: 344.369744159 + z: -31.3150062934 + theta: -1.83541983186 + kappa: 0.0009951465286 + s: 21.26233328104 + dkappa: 0.00212967786228 + } + v: 3.59444451332 + a: -0.0690526666074 relative_time: 6.8600001335144043 - theta: -1.83541983186 - accumulated_s: 21.26233328104 -} -adc_trajectory_point { - x: -129.843021746 - y: 344.334719988 - z: -31.3145211916 - - speed: 3.59444451332 - acceleration_s: -0.111774696834 - curvature: 0.00103342160821 - curvature_change_rate: 0.00106483990678 +} +trajectory_point { + path_point { + x: -129.843021746 + y: 344.334719988 + z: -31.3145211916 + theta: -1.83538209833 + kappa: 0.00103342160821 + s: 21.29827772614 + dkappa: 0.00106483990678 + } + v: 3.59444451332 + a: -0.111774696834 relative_time: 6.8700001239776611 - theta: -1.83538209833 - accumulated_s: 21.29827772614 -} -adc_trajectory_point { - x: -129.852095711 - y: 344.29971938 - z: -31.3142224336 - - speed: 3.59444451332 - acceleration_s: -0.126812446225 - curvature: 0.00103342160821 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.852095711 + y: 344.29971938 + z: -31.3142224336 + theta: -1.83537984096 + kappa: 0.00103342160821 + s: 21.33422217134 + dkappa: 0 + } + v: 3.59444451332 + a: -0.126812446225 relative_time: 6.880000114440918 - theta: -1.83537984096 - accumulated_s: 21.33422217134 -} -adc_trajectory_point { - x: -129.861179176 - y: 344.264700586 - z: -31.3137229746 - - speed: 3.59444451332 - acceleration_s: -0.0626922022706 - curvature: 0.0010716967124 - curvature_change_rate: 0.001064840591 +} +trajectory_point { + path_point { + x: -129.861179176 + y: 344.264700586 + z: -31.3137229746 + theta: -1.83536571138 + kappa: 0.0010716967124 + s: 21.37016661644 + dkappa: 0.001064840591 + } + v: 3.59444451332 + a: -0.0626922022706 relative_time: 6.8900001049041748 - theta: -1.83536571138 - accumulated_s: 21.37016661644 -} -adc_trajectory_point { - x: -129.861179176 - y: 344.264700586 - z: -31.3137229746 - - speed: 3.59444451332 - acceleration_s: -0.0626922022706 - curvature: 0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.861179176 + y: 344.264700586 + z: -31.3137229746 + theta: -1.83536571138 + kappa: 0.0010716967124 + s: 21.40611106154 + dkappa: 0 + } + v: 3.59444451332 + a: -0.0626922022706 relative_time: 6.8900001049041748 - theta: -1.83536571138 - accumulated_s: 21.40611106154 -} -adc_trajectory_point { - x: -129.879302997 - y: 344.194676693 - z: -31.3128991006 - - speed: 3.59444451332 - acceleration_s: -0.025684391572 - curvature: 0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.879302997 + y: 344.194676693 + z: -31.3128991006 + theta: -1.8352783275 + kappa: 0.0010716967124 + s: 21.44205550674 + dkappa: 0 + } + v: 3.59444451332 + a: -0.025684391572 relative_time: 6.9100000858306885 - theta: -1.8352783275 - accumulated_s: 21.44205550674 -} -adc_trajectory_point { - x: -129.888383387 - y: 344.159682172 - z: -31.3126146821 - - speed: 3.59444451332 - acceleration_s: -0.0452099946246 - curvature: 0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.888383387 + y: 344.159682172 + z: -31.3126146821 + theta: -1.83526642554 + kappa: 0.0010716967124 + s: 21.47799995184 + dkappa: 0 + } + v: 3.59444451332 + a: -0.0452099946246 relative_time: 6.9200000762939453 - theta: -1.83526642554 - accumulated_s: 21.47799995184 -} -adc_trajectory_point { - x: -129.897496563 - y: 344.124683135 - z: -31.3121939292 - - speed: 3.59444451332 - acceleration_s: -0.031027712531 - curvature: 0.0010716967124 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.897496563 + y: 344.124683135 + z: -31.3121939292 + theta: -1.83528810088 + kappa: 0.0010716967124 + s: 21.51394439694 + dkappa: 0 + } + v: 3.59444451332 + a: -0.031027712531 relative_time: 6.9300000667572021 - theta: -1.83528810088 - accumulated_s: 21.51394439694 -} -adc_trajectory_point { - x: -129.906549714 - y: 344.089696197 - z: -31.3119860403 - - speed: 3.59444451332 - acceleration_s: -0.0649721158024 - curvature: 0.00110997184211 - curvature_change_rate: 0.00106484130056 +} +trajectory_point { + path_point { + x: -129.906549714 + y: 344.089696197 + z: -31.3119860403 + theta: -1.83520864764 + kappa: 0.00110997184211 + s: 21.54988884214 + dkappa: 0.00106484130056 + } + v: 3.59444451332 + a: -0.0649721158024 relative_time: 6.940000057220459 - theta: -1.83520864764 - accumulated_s: 21.54988884214 -} -adc_trajectory_point { - x: -129.906549714 - y: 344.089696197 - z: -31.3119860403 - - speed: 3.59444451332 - acceleration_s: -0.0649721158024 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.906549714 + y: 344.089696197 + z: -31.3119860403 + theta: -1.83520864764 + kappa: 0.00110997184211 + s: 21.58583328724 + dkappa: 0 + } + v: 3.59444451332 + a: -0.0649721158024 relative_time: 6.940000057220459 - theta: -1.83520864764 - accumulated_s: 21.58583328724 -} -adc_trajectory_point { - x: -129.924740807 - y: 344.019718613 - z: -31.3114557359 - - speed: 3.59444451332 - acceleration_s: 0.0431314506628 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.924740807 + y: 344.019718613 + z: -31.3114557359 + theta: -1.83516088741 + kappa: 0.00110997184211 + s: 21.62177773234 + dkappa: 0 + } + v: 3.59444451332 + a: 0.0431314506628 relative_time: 6.9600000381469727 - theta: -1.83516088741 - accumulated_s: 21.62177773234 -} -adc_trajectory_point { - x: -129.933843995 - y: 343.984702242 - z: -31.3110922594 - - speed: 3.59444451332 - acceleration_s: 0.0855120684387 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.933843995 + y: 343.984702242 + z: -31.3110922594 + theta: -1.83512542731 + kappa: 0.00110997184211 + s: 21.65772217754 + dkappa: 0 + } + v: 3.59444451332 + a: 0.0855120684387 relative_time: 6.9700000286102295 - theta: -1.83512542731 - accumulated_s: 21.65772217754 -} -adc_trajectory_point { - x: -129.942928386 - y: 343.949727349 - z: -31.3110211371 - - speed: 3.59444451332 - acceleration_s: -0.042027988716 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.942928386 + y: 343.949727349 + z: -31.3110211371 + theta: -1.83509154293 + kappa: 0.00110997184211 + s: 21.69366662264 + dkappa: 0 + } + v: 3.59444451332 + a: -0.042027988716 relative_time: 6.9800000190734863 - theta: -1.83509154293 - accumulated_s: 21.69366662264 -} -adc_trajectory_point { - x: -129.952030428 - y: 343.914740892 - z: -31.3107325239 - - speed: 3.59444451332 - acceleration_s: -0.0416544132959 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.952030428 + y: 343.914740892 + z: -31.3107325239 + theta: -1.83507448019 + kappa: 0.00110997184211 + s: 21.72961106774 + dkappa: 0 + } + v: 3.59444451332 + a: -0.0416544132959 relative_time: 6.9900000095367432 - theta: -1.83507448019 - accumulated_s: 21.72961106774 -} -adc_trajectory_point { - x: -129.961116486 - y: 343.879776377 - z: -31.3106255215 - - speed: 3.59444451332 - acceleration_s: -0.114881221466 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.961116486 + y: 343.879776377 + z: -31.3106255215 + theta: -1.83506696304 + kappa: 0.00110997184211 + s: 21.76555551294 + dkappa: 0 + } + v: 3.59444451332 + a: -0.114881221466 relative_time: 7 - theta: -1.83506696304 - accumulated_s: 21.76555551294 -} -adc_trajectory_point { - x: -129.970203904 - y: 343.844785056 - z: -31.3104857299 - - speed: 3.59166669846 - acceleration_s: 0.0376978566876 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.970203904 + y: 343.844785056 + z: -31.3104857299 + theta: -1.83506482561 + kappa: 0.00110997184211 + s: 21.80147217994 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0376978566876 relative_time: 7.0099999904632568 - theta: -1.83506482561 - accumulated_s: 21.80147217994 -} -adc_trajectory_point { - x: -129.979276763 - y: 343.809816167 - z: -31.3103791531 - - speed: 3.59166669846 - acceleration_s: -0.0933464761497 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.979276763 + y: 343.809816167 + z: -31.3103791531 + theta: -1.83504723227 + kappa: 0.00110997184211 + s: 21.83738884684 + dkappa: 0 + } + v: 3.59166669846 + a: -0.0933464761497 relative_time: 7.0199999809265137 - theta: -1.83504723227 - accumulated_s: 21.83738884684 -} -adc_trajectory_point { - x: -129.988342726 - y: 343.774794385 - z: -31.3102112133 - - speed: 3.59166669846 - acceleration_s: 0.171267740385 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.988342726 + y: 343.774794385 + z: -31.3102112133 + theta: -1.83501777495 + kappa: 0.00110997184211 + s: 21.87330551384 + dkappa: 0 + } + v: 3.59166669846 + a: 0.171267740385 relative_time: 7.0299999713897705 - theta: -1.83501777495 - accumulated_s: 21.87330551384 -} -adc_trajectory_point { - x: -129.997406406 - y: 343.739822131 - z: -31.3101650523 - - speed: 3.59166669846 - acceleration_s: -0.0723029859095 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -129.997406406 + y: 343.739822131 + z: -31.3101650523 + theta: -1.83502498708 + kappa: 0.00110997184211 + s: 21.90922218084 + dkappa: 0 + } + v: 3.59166669846 + a: -0.0723029859095 relative_time: 7.0399999618530273 - theta: -1.83502498708 - accumulated_s: 21.90922218084 -} -adc_trajectory_point { - x: -130.006485448 - y: 343.704824133 - z: -31.3100451212 - - speed: 3.59444451332 - acceleration_s: 0.077219262431 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.006485448 + y: 343.704824133 + z: -31.3100451212 + theta: -1.83504337574 + kappa: 0.00110997184211 + s: 21.94516662594 + dkappa: 0 + } + v: 3.59444451332 + a: 0.077219262431 relative_time: 7.0499999523162842 - theta: -1.83504337574 - accumulated_s: 21.94516662594 -} -adc_trajectory_point { - x: -130.015525149 - y: 343.669845799 - z: -31.3099869089 - - speed: 3.59444451332 - acceleration_s: -0.105361000335 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.015525149 + y: 343.669845799 + z: -31.3099869089 + theta: -1.83503234343 + kappa: 0.00110997184211 + s: 21.98111107114 + dkappa: 0 + } + v: 3.59444451332 + a: -0.105361000335 relative_time: 7.059999942779541 - theta: -1.83503234343 - accumulated_s: 21.98111107114 -} -adc_trajectory_point { - x: -130.024576615 - y: 343.634843107 - z: -31.3099394264 - - speed: 3.59444451332 - acceleration_s: 0.0627868831247 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.024576615 + y: 343.634843107 + z: -31.3099394264 + theta: -1.83504259135 + kappa: 0.00110997184211 + s: 22.01705551624 + dkappa: 0 + } + v: 3.59444451332 + a: 0.0627868831247 relative_time: 7.0699999332427979 - theta: -1.83504259135 - accumulated_s: 22.01705551624 -} -adc_trajectory_point { - x: -130.033620644 - y: 343.599838135 - z: -31.3100141492 - - speed: 3.59444451332 - acceleration_s: 0.0676183245505 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.033620644 + y: 343.599838135 + z: -31.3100141492 + theta: -1.83506089019 + kappa: 0.00110997184211 + s: 22.05299996134 + dkappa: 0 + } + v: 3.59444451332 + a: 0.0676183245505 relative_time: 7.0800001621246338 - theta: -1.83506089019 - accumulated_s: 22.05299996134 -} -adc_trajectory_point { - x: -130.04261413 - y: 343.564807122 - z: -31.3100484544 - - speed: 3.59166669846 - acceleration_s: 0.0676183245505 - curvature: 0.00114824699823 - curvature_change_rate: 0.00106566559017 +} +trajectory_point { + path_point { + x: -130.04261413 + y: 343.564807122 + z: -31.3100484544 + theta: -1.83501748989 + kappa: 0.00114824699823 + s: 22.08891662834 + dkappa: 0.00106566559017 + } + v: 3.59166669846 + a: 0.0676183245505 relative_time: 7.0900001525878906 - theta: -1.83501748989 - accumulated_s: 22.08891662834 -} -adc_trajectory_point { - x: -130.04261413 - y: 343.564807122 - z: -31.3100484544 - - speed: 3.59166669846 - acceleration_s: 0.0708798665679 - curvature: 0.00114824699823 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.04261413 + y: 343.564807122 + z: -31.3100484544 + theta: -1.83501748989 + kappa: 0.00114824699823 + s: 22.12483329534 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0708798665679 relative_time: 7.0900001525878906 - theta: -1.83501748989 - accumulated_s: 22.12483329534 -} -adc_trajectory_point { - x: -130.060656062 - y: 343.49477692 - z: -31.3101350283 - - speed: 3.58888888359 - acceleration_s: -0.0694072513285 - curvature: 0.00118652218167 - curvature_change_rate: 0.00106649118118 +} +trajectory_point { + path_point { + x: -130.060656062 + y: 343.49477692 + z: -31.3101350283 + theta: -1.83505413531 + kappa: 0.00118652218167 + s: 22.16072218414 + dkappa: 0.00106649118118 + } + v: 3.58888888359 + a: -0.0694072513285 relative_time: 7.1100001335144043 - theta: -1.83505413531 - accumulated_s: 22.16072218414 -} -adc_trajectory_point { - x: -130.069641818 - y: 343.459738761 - z: -31.3101684554 - - speed: 3.58888888359 - acceleration_s: 0.00296150947042 - curvature: 0.00118652218167 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.069641818 + y: 343.459738761 + z: -31.3101684554 + theta: -1.835051506 + kappa: 0.00118652218167 + s: 22.19661107304 + dkappa: 0 + } + v: 3.58888888359 + a: 0.00296150947042 relative_time: 7.1200001239776611 - theta: -1.835051506 - accumulated_s: 22.19661107304 -} -adc_trajectory_point { - x: -130.078660473 - y: 343.424728646 - z: -31.3103492931 - - speed: 3.58611106873 - acceleration_s: 0.0119313787973 - curvature: 0.00118652218167 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.078660473 + y: 343.424728646 + z: -31.3103492931 + theta: -1.83508404737 + kappa: 0.00118652218167 + s: 22.23247218374 + dkappa: 0 + } + v: 3.58611106873 + a: 0.0119313787973 relative_time: 7.130000114440918 - theta: -1.83508404737 - accumulated_s: 22.23247218374 -} -adc_trajectory_point { - x: -130.087640918 - y: 343.389669334 - z: -31.3102647075 - - speed: 3.58611106873 - acceleration_s: 0.117254694412 - curvature: 0.00118652218167 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.087640918 + y: 343.389669334 + z: -31.3102647075 + theta: -1.83506994516 + kappa: 0.00118652218167 + s: 22.26833329444 + dkappa: 0 + } + v: 3.58611106873 + a: 0.117254694412 relative_time: 7.1400001049041748 - theta: -1.83506994516 - accumulated_s: 22.26833329444 -} -adc_trajectory_point { - x: -130.09662663 - y: 343.354619657 - z: -31.3104229178 - - speed: 3.58333325386 - acceleration_s: 0.117254694412 - curvature: 0.00122479739336 - curvature_change_rate: 0.00106814546601 +} +trajectory_point { + path_point { + x: -130.09662663 + y: 343.354619657 + z: -31.3104229178 + theta: -1.83508270945 + kappa: 0.00122479739336 + s: 22.30416662694 + dkappa: 0.00106814546601 + } + v: 3.58333325386 + a: 0.117254694412 relative_time: 7.1500000953674316 - theta: -1.83508270945 - accumulated_s: 22.30416662694 -} -adc_trajectory_point { - x: -130.1056281 - y: 343.319552452 - z: -31.3104638765 - - speed: 3.58333325386 - acceleration_s: 0.145958530996 - curvature: 0.00122479739336 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.1056281 + y: 343.319552452 + z: -31.3104638765 + theta: -1.83510833489 + kappa: 0.00122479739336 + s: 22.33999995944 + dkappa: 0 + } + v: 3.58333325386 + a: 0.145958530996 relative_time: 7.1600000858306885 - theta: -1.83510833489 - accumulated_s: 22.33999995944 -} -adc_trajectory_point { - x: -130.114593512 - y: 343.284493758 - z: -31.3106325427 - - speed: 3.58611106873 - acceleration_s: -0.0127297350305 - curvature: 0.00122479739336 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.114593512 + y: 343.284493758 + z: -31.3106325427 + theta: -1.83510208823 + kappa: 0.00122479739336 + s: 22.37586107014 + dkappa: 0 + } + v: 3.58611106873 + a: -0.0127297350305 relative_time: 7.1700000762939453 - theta: -1.83510208823 - accumulated_s: 22.37586107014 -} -adc_trajectory_point { - x: -130.123569535 - y: 343.249412562 - z: -31.3105624365 - - speed: 3.58611106873 - acceleration_s: 0.0569202468214 - curvature: 0.00122479739336 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.123569535 + y: 343.249412562 + z: -31.3105624365 + theta: -1.83508994072 + kappa: 0.00122479739336 + s: 22.41172218084 + dkappa: 0 + } + v: 3.58611106873 + a: 0.0569202468214 relative_time: 7.1800000667572021 - theta: -1.83508994072 - accumulated_s: 22.41172218084 -} -adc_trajectory_point { - x: -130.132568337 - y: 343.214381013 - z: -31.3106503142 - - speed: 3.58611106873 - acceleration_s: -0.157643290914 - curvature: 0.00126307263419 - curvature_change_rate: 0.0010673188894 +} +trajectory_point { + path_point { + x: -130.132568337 + y: 343.214381013 + z: -31.3106503142 + theta: -1.83511761728 + kappa: 0.00126307263419 + s: 22.44758329154 + dkappa: 0.0010673188894 + } + v: 3.58611106873 + a: -0.157643290914 relative_time: 7.190000057220459 - theta: -1.83511761728 - accumulated_s: 22.44758329154 -} -adc_trajectory_point { - x: -130.132568337 - y: 343.214381013 - z: -31.3106503142 - - speed: 3.58611106873 - acceleration_s: -0.157643290914 - curvature: 0.00126307263419 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.132568337 + y: 343.214381013 + z: -31.3106503142 + theta: -1.83511761728 + kappa: 0.00126307263419 + s: 22.48344440224 + dkappa: 0 + } + v: 3.58611106873 + a: -0.157643290914 relative_time: 7.190000057220459 - theta: -1.83511761728 - accumulated_s: 22.48344440224 -} -adc_trajectory_point { - x: -130.150532675 - y: 343.144269241 - z: -31.3106434494 - - speed: 3.58611106873 - acceleration_s: -0.106311056129 - curvature: 0.00130134790508 - curvature_change_rate: 0.00106731972762 +} +trajectory_point { + path_point { + x: -130.150532675 + y: 343.144269241 + z: -31.3106434494 + theta: -1.83509027941 + kappa: 0.00130134790508 + s: 22.51930551294 + dkappa: 0.00106731972762 + } + v: 3.58611106873 + a: -0.106311056129 relative_time: 7.2100000381469727 - theta: -1.83509027941 - accumulated_s: 22.51930551294 -} -adc_trajectory_point { - x: -130.159529213 - y: 343.109191237 - z: -31.3105427884 - - speed: 3.58611106873 - acceleration_s: 0.115221359315 - curvature: 0.00130134790508 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.159529213 + y: 343.109191237 + z: -31.3105427884 + theta: -1.83506526736 + kappa: 0.00130134790508 + s: 22.55516662364 + dkappa: 0 + } + v: 3.58611106873 + a: 0.115221359315 relative_time: 7.2200000286102295 - theta: -1.83506526736 - accumulated_s: 22.55516662364 -} -adc_trajectory_point { - x: -130.168508102 - y: 343.074132603 - z: -31.310538793 - - speed: 3.58888888359 - acceleration_s: 0.029643046692 - curvature: 0.00130134790508 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.168508102 + y: 343.074132603 + z: -31.310538793 + theta: -1.83505024767 + kappa: 0.00130134790508 + s: 22.59105551244 + dkappa: 0 + } + v: 3.58888888359 + a: 0.029643046692 relative_time: 7.2300000190734863 - theta: -1.83505024767 - accumulated_s: 22.59105551244 -} -adc_trajectory_point { - x: -130.177510972 - y: 343.039079463 - z: -31.3103737189 - - speed: 3.58888888359 - acceleration_s: -0.0147885952996 - curvature: 0.00130134790508 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.177510972 + y: 343.039079463 + z: -31.3103737189 + theta: -1.83501533914 + kappa: 0.00130134790508 + s: 22.62694440124 + dkappa: 0 + } + v: 3.58888888359 + a: -0.0147885952996 relative_time: 7.2400000095367432 - theta: -1.83501533914 - accumulated_s: 22.62694440124 -} -adc_trajectory_point { - x: -130.186526955 - y: 343.004019301 - z: -31.3102239668 - - speed: 3.59166669846 - acceleration_s: -0.0147885952996 - curvature: 0.00137789864791 - curvature_change_rate: 0.00213134316893 +} +trajectory_point { + path_point { + x: -130.186526955 + y: 343.004019301 + z: -31.3102239668 + theta: -1.83499212781 + kappa: 0.00137789864791 + s: 22.66286106824 + dkappa: 0.00213134316893 + } + v: 3.59166669846 + a: -0.0147885952996 relative_time: 7.25 - theta: -1.83499212781 - accumulated_s: 22.66286106824 -} -adc_trajectory_point { - x: -130.19552167 - y: 342.968970379 - z: -31.3100768542 - - speed: 3.59166669846 - acceleration_s: -0.0313511319185 - curvature: 0.00137789864791 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.19552167 + y: 342.968970379 + z: -31.3100768542 + theta: -1.83495186355 + kappa: 0.00137789864791 + s: 22.69877773524 + dkappa: 0 + } + v: 3.59166669846 + a: -0.0313511319185 relative_time: 7.2599999904632568 - theta: -1.83495186355 - accumulated_s: 22.69877773524 -} -adc_trajectory_point { - x: -130.204546417 - y: 342.933922036 - z: -31.3098619198 - - speed: 3.59166669846 - acceleration_s: 0.0902367437011 - curvature: 0.00149272484953 - curvature_change_rate: 0.00319701718626 +} +trajectory_point { + path_point { + x: -130.204546417 + y: 342.933922036 + z: -31.3098619198 + theta: -1.83491460216 + kappa: 0.00149272484953 + s: 22.73469440224 + dkappa: 0.00319701718626 + } + v: 3.59166669846 + a: 0.0902367437011 relative_time: 7.2699999809265137 - theta: -1.83491460216 - accumulated_s: 22.73469440224 -} -adc_trajectory_point { - x: -130.21358433 - y: 342.898865206 - z: -31.3097897591 - - speed: 3.59166669846 - acceleration_s: 0.028531882737 - curvature: 0.00149272484953 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.21358433 + y: 342.898865206 + z: -31.3097897591 + theta: -1.83491524834 + kappa: 0.00149272484953 + s: 22.77061106924 + dkappa: 0 + } + v: 3.59166669846 + a: 0.028531882737 relative_time: 7.2799999713897705 - theta: -1.83491524834 - accumulated_s: 22.77061106924 -} -adc_trajectory_point { - x: -130.222597136 - y: 342.863785475 - z: -31.3095163265 - - speed: 3.59166669846 - acceleration_s: 0.0753780355319 - curvature: 0.00164582695329 - curvature_change_rate: 0.00426270354731 +} +trajectory_point { + path_point { + x: -130.222597136 + y: 342.863785475 + z: -31.3095163265 + theta: -1.83485357612 + kappa: 0.00164582695329 + s: 22.80652773614 + dkappa: 0.00426270354731 + } + v: 3.59166669846 + a: 0.0753780355319 relative_time: 7.2899999618530273 - theta: -1.83485357612 - accumulated_s: 22.80652773614 -} -adc_trajectory_point { - x: -130.231628495 - y: 342.828727264 - z: -31.309449302 - - speed: 3.59166669846 - acceleration_s: 0.0376395358123 - curvature: 0.00164582695329 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.231628495 + y: 342.828727264 + z: -31.309449302 + theta: -1.83482219205 + kappa: 0.00164582695329 + s: 22.84244440314 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0376395358123 relative_time: 7.2999999523162842 - theta: -1.83482219205 - accumulated_s: 22.84244440314 -} -adc_trajectory_point { - x: -130.240663187 - y: 342.793636264 - z: -31.3091299264 - - speed: 3.59444451332 - acceleration_s: 0.0696315812177 - curvature: 0.00179892968375 - curvature_change_rate: 0.00425942673182 +} +trajectory_point { + path_point { + x: -130.240663187 + y: 342.793636264 + z: -31.3091299264 + theta: -1.83478084755 + kappa: 0.00179892968375 + s: 22.87838884834 + dkappa: 0.00425942673182 + } + v: 3.59444451332 + a: 0.0696315812177 relative_time: 7.309999942779541 - theta: -1.83478084755 - accumulated_s: 22.87838884834 -} -adc_trajectory_point { - x: -130.249708453 - y: 342.758569037 - z: -31.3090284392 - - speed: 3.59444451332 - acceleration_s: 0.0344800958841 - curvature: 0.00179892968375 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.249708453 + y: 342.758569037 + z: -31.3090284392 + theta: -1.83474836288 + kappa: 0.00179892968375 + s: 22.91433329344 + dkappa: 0 + } + v: 3.59444451332 + a: 0.0344800958841 relative_time: 7.3199999332427979 - theta: -1.83474836288 - accumulated_s: 22.91433329344 -} -adc_trajectory_point { - x: -130.258778295 - y: 342.723481383 - z: -31.3088150099 - - speed: 3.59166669846 - acceleration_s: 0.0944292546466 - curvature: 0.00210513725798 - curvature_change_rate: 0.00852550083098 +} +trajectory_point { + path_point { + x: -130.258778295 + y: 342.723481383 + z: -31.3088150099 + theta: -1.83471420889 + kappa: 0.00210513725798 + s: 22.95024996044 + dkappa: 0.00852550083098 + } + v: 3.59166669846 + a: 0.0944292546466 relative_time: 7.3300001621246338 - theta: -1.83471420889 - accumulated_s: 22.95024996044 -} -adc_trajectory_point { - x: -130.267817376 - y: 342.68839044 - z: -31.3087048139 - - speed: 3.59166669846 - acceleration_s: 0.0480979808867 - curvature: 0.00210513725798 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.267817376 + y: 342.68839044 + z: -31.3087048139 + theta: -1.83464913536 + kappa: 0.00210513725798 + s: 22.98616662744 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0480979808867 relative_time: 7.3400001525878906 - theta: -1.83464913536 - accumulated_s: 22.98616662744 -} -adc_trajectory_point { - x: -130.276886507 - y: 342.653292831 - z: -31.3084988119 - - speed: 3.59166669846 - acceleration_s: 0.0993478851233 - curvature: 0.00229651859052 - curvature_change_rate: 0.00532848252946 +} +trajectory_point { + path_point { + x: -130.276886507 + y: 342.653292831 + z: -31.3084988119 + theta: -1.83461414728 + kappa: 0.00229651859052 + s: 23.02208329444 + dkappa: 0.00532848252946 + } + v: 3.59166669846 + a: 0.0993478851233 relative_time: 7.3500001430511475 - theta: -1.83461414728 - accumulated_s: 23.02208329444 -} -adc_trajectory_point { - x: -130.285928296 - y: 342.618174026 - z: -31.3084008833 - - speed: 3.59166669846 - acceleration_s: 0.1004974117 - curvature: 0.00229651859052 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.285928296 + y: 342.618174026 + z: -31.3084008833 + theta: -1.83453535113 + kappa: 0.00229651859052 + s: 23.05799996134 + dkappa: 0 + } + v: 3.59166669846 + a: 0.1004974117 relative_time: 7.3600001335144043 - theta: -1.83453535113 - accumulated_s: 23.05799996134 -} -adc_trajectory_point { - x: -130.294970121 - y: 342.583056148 - z: -31.3082660045 - - speed: 3.59166669846 - acceleration_s: 0.0633690466968 - curvature: 0.00244962463489 - curvature_change_rate: 0.00426281326249 +} +trajectory_point { + path_point { + x: -130.294970121 + y: 342.583056148 + z: -31.3082660045 + theta: -1.83448217622 + kappa: 0.00244962463489 + s: 23.09391662834 + dkappa: 0.00426281326249 + } + v: 3.59166669846 + a: 0.0633690466968 relative_time: 7.3700001239776611 - theta: -1.83448217622 - accumulated_s: 23.09391662834 -} -adc_trajectory_point { - x: -130.304013811 - y: 342.5479244 - z: -31.3081754399 - - speed: 3.59166669846 - acceleration_s: 0.0765517437431 - curvature: 0.00244962463489 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.304013811 + y: 342.5479244 + z: -31.3081754399 + theta: -1.83441362412 + kappa: 0.00244962463489 + s: 23.12983329534 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0765517437431 relative_time: 7.380000114440918 - theta: -1.83441362412 - accumulated_s: 23.12983329534 -} -adc_trajectory_point { - x: -130.313059421 - y: 342.512776467 - z: -31.3081546687 - - speed: 3.59166669846 - acceleration_s: 0.16486283758 - curvature: 0.00256445477712 - curvature_change_rate: 0.00319712690159 +} +trajectory_point { + path_point { + x: -130.313059421 + y: 342.512776467 + z: -31.3081546687 + theta: -1.83434890854 + kappa: 0.00256445477712 + s: 23.16574996234 + dkappa: 0.00319712690159 + } + v: 3.59166669846 + a: 0.16486283758 relative_time: 7.3900001049041748 - theta: -1.83434890854 - accumulated_s: 23.16574996234 -} -adc_trajectory_point { - x: -130.322121672 - y: 342.477620614 - z: -31.3080039769 - - speed: 3.59166669846 - acceleration_s: 0.16486283758 - curvature: 0.00256445477712 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.322121672 + y: 342.477620614 + z: -31.3080039769 + theta: -1.83429750296 + kappa: 0.00256445477712 + s: 23.20166662934 + dkappa: 0 + } + v: 3.59166669846 + a: 0.16486283758 relative_time: 7.4000000953674316 - theta: -1.83429750296 - accumulated_s: 23.20166662934 -} -adc_trajectory_point { - x: -130.331166428 - y: 342.442466323 - z: -31.3079969566 - - speed: 3.59166669846 - acceleration_s: 0.0820721228419 - curvature: 0.00267928546864 - curvature_change_rate: 0.00319714219518 +} +trajectory_point { + path_point { + x: -130.331166428 + y: 342.442466323 + z: -31.3079969566 + theta: -1.83420113683 + kappa: 0.00267928546864 + s: 23.23758329634 + dkappa: 0.00319714219518 + } + v: 3.59166669846 + a: 0.0820721228419 relative_time: 7.4100000858306885 - theta: -1.83420113683 - accumulated_s: 23.23758329634 -} -adc_trajectory_point { - x: -130.34020588 - y: 342.407298586 - z: -31.3079012437 - - speed: 3.59166669846 - acceleration_s: 0.0814759711025 - curvature: 0.00267928546864 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.34020588 + y: 342.407298586 + z: -31.3079012437 + theta: -1.8341303526 + kappa: 0.00267928546864 + s: 23.27349996324 + dkappa: 0 + } + v: 3.59166669846 + a: 0.0814759711025 relative_time: 7.4200000762939453 - theta: -1.8341303526 - accumulated_s: 23.27349996324 -} -adc_trajectory_point { - x: -130.349274754 - y: 342.372133407 - z: -31.3079076596 - - speed: 3.59166669846 - acceleration_s: 0.0196518608533 - curvature: 0.00275583979477 - curvature_change_rate: 0.00213144293583 +} +trajectory_point { + path_point { + x: -130.349274754 + y: 342.372133407 + z: -31.3079076596 + theta: -1.83405418753 + kappa: 0.00275583979477 + s: 23.30941663024 + dkappa: 0.00213144293583 + } + v: 3.59166669846 + a: 0.0196518608533 relative_time: 7.4300000667572021 - theta: -1.83405418753 - accumulated_s: 23.30941663024 -} -adc_trajectory_point { - x: -130.358377993 - y: 342.336947744 - z: -31.3077859282 - - speed: 3.59166669846 - acceleration_s: 0.129350664373 - curvature: 0.00275583979477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.358377993 + y: 342.336947744 + z: -31.3077859282 + theta: -1.83399703206 + kappa: 0.00275583979477 + s: 23.34533329724 + dkappa: 0 + } + v: 3.59166669846 + a: 0.129350664373 relative_time: 7.440000057220459 - theta: -1.83399703206 - accumulated_s: 23.34533329724 -} -adc_trajectory_point { - x: -130.358377993 - y: 342.336947744 - z: -31.3077859282 - - speed: 3.59444451332 - acceleration_s: 0.129350664373 - curvature: 0.00275583979477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.358377993 + y: 342.336947744 + z: -31.3077859282 + theta: -1.83399703206 + kappa: 0.00275583979477 + s: 23.38127774234 + dkappa: 0 + } + v: 3.59444451332 + a: 0.129350664373 relative_time: 7.440000057220459 - theta: -1.83399703206 - accumulated_s: 23.38127774234 -} -adc_trajectory_point { - x: -130.376616435 - y: 342.266592228 - z: -31.3076887252 - - speed: 3.59444451332 - acceleration_s: 0.146340192669 - curvature: 0.00275583979477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.376616435 + y: 342.266592228 + z: -31.3076887252 + theta: -1.8338779961 + kappa: 0.00275583979477 + s: 23.41722218754 + dkappa: 0 + } + v: 3.59444451332 + a: 0.146340192669 relative_time: 7.4600000381469727 - theta: -1.8338779961 - accumulated_s: 23.41722218754 -} -adc_trajectory_point { - x: -130.376616435 - y: 342.266592228 - z: -31.3076887252 - - speed: 3.59444451332 - acceleration_s: 0.146340192669 - curvature: 0.00275583979477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.376616435 + y: 342.266592228 + z: -31.3076887252 + theta: -1.8338779961 + kappa: 0.00275583979477 + s: 23.45316663264 + dkappa: 0 + } + v: 3.59444451332 + a: 0.146340192669 relative_time: 7.4600000381469727 - theta: -1.8338779961 - accumulated_s: 23.45316663264 -} -adc_trajectory_point { - x: -130.394901045 - y: 342.196204353 - z: -31.3076158371 - - speed: 3.59722232819 - acceleration_s: 0.117064397227 - curvature: 0.00275583979477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.394901045 + y: 342.196204353 + z: -31.3076158371 + theta: -1.83373853351 + kappa: 0.00275583979477 + s: 23.48913885594 + dkappa: 0 + } + v: 3.59722232819 + a: 0.117064397227 relative_time: 7.4800000190734863 - theta: -1.83373853351 - accumulated_s: 23.48913885594 -} -adc_trajectory_point { - x: -130.404053375 - y: 342.161012492 - z: -31.3075456787 - - speed: 3.59999990463 - acceleration_s: 0.0284211737936 - curvature: 0.0027175627066 - curvature_change_rate: -0.00106325247733 +} +trajectory_point { + path_point { + x: -130.404053375 + y: 342.161012492 + z: -31.3075456787 + theta: -1.8336616883 + kappa: 0.0027175627066 + s: 23.52513885494 + dkappa: -0.00106325247733 + } + v: 3.59999990463 + a: 0.0284211737936 relative_time: 7.4900000095367432 - theta: -1.8336616883 - accumulated_s: 23.52513885494 -} -adc_trajectory_point { - x: -130.413197227 - y: 342.125807433 - z: -31.3074800158 - - speed: 3.59999990463 - acceleration_s: 0.0284211737936 - curvature: 0.0027175627066 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.413197227 + y: 342.125807433 + z: -31.3074800158 + theta: -1.83357778194 + kappa: 0.0027175627066 + s: 23.56113885404 + dkappa: 0 + } + v: 3.59999990463 + a: 0.0284211737936 relative_time: 7.5 - theta: -1.83357778194 - accumulated_s: 23.56113885404 -} -adc_trajectory_point { - x: -130.422384725 - y: 342.090611337 - z: -31.3074125173 - - speed: 3.6027777195 - acceleration_s: 0.0633574613684 - curvature: 0.00264100850892 - curvature_change_rate: -0.00212486596842 +} +trajectory_point { + path_point { + x: -130.422384725 + y: 342.090611337 + z: -31.3074125173 + theta: -1.83353886354 + kappa: 0.00264100850892 + s: 23.59716663124 + dkappa: -0.00212486596842 + } + v: 3.6027777195 + a: 0.0633574613684 relative_time: 7.5099999904632568 - theta: -1.83353886354 - accumulated_s: 23.59716663124 -} -adc_trajectory_point { - x: -130.431553773 - y: 342.055391385 - z: -31.3074186957 - - speed: 3.6027777195 - acceleration_s: 0.121753161698 - curvature: 0.00264100850892 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.431553773 + y: 342.055391385 + z: -31.3074186957 + theta: -1.83348873593 + kappa: 0.00264100850892 + s: 23.63319440844 + dkappa: 0 + } + v: 3.6027777195 + a: 0.121753161698 relative_time: 7.5199999809265137 - theta: -1.83348873593 - accumulated_s: 23.63319440844 -} -adc_trajectory_point { - x: -130.440697187 - y: 342.020139134 - z: -31.3072792934 - - speed: 3.60555553436 - acceleration_s: 0.149883871992 - curvature: 0.00256445477712 - curvature_change_rate: -0.0021232159946 +} +trajectory_point { + path_point { + x: -130.440697187 + y: 342.020139134 + z: -31.3072792934 + theta: -1.83340978088 + kappa: 0.00256445477712 + s: 23.66924996374 + dkappa: -0.0021232159946 + } + v: 3.60555553436 + a: 0.149883871992 relative_time: 7.5299999713897705 - theta: -1.83340978088 - accumulated_s: 23.66924996374 -} -adc_trajectory_point { - x: -130.449842853 - y: 341.984902127 - z: -31.3073009551 - - speed: 3.60555553436 - acceleration_s: 0.0972756561058 - curvature: 0.00256445477712 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.449842853 + y: 341.984902127 + z: -31.3073009551 + theta: -1.83334414549 + kappa: 0.00256445477712 + s: 23.70530551914 + dkappa: 0 + } + v: 3.60555553436 + a: 0.0972756561058 relative_time: 7.5399999618530273 - theta: -1.83334414549 - accumulated_s: 23.70530551914 -} -adc_trajectory_point { - x: -130.458988646 - y: 341.949633606 - z: -31.3071024986 - - speed: 3.60833334923 - acceleration_s: 0.0972756561058 - curvature: 0.00244962463489 - curvature_change_rate: -0.00318235958594 +} +trajectory_point { + path_point { + x: -130.458988646 + y: 341.949633606 + z: -31.3071024986 + theta: -1.83330046649 + kappa: 0.00244962463489 + s: 23.74138885264 + dkappa: -0.00318235958594 + } + v: 3.60833334923 + a: 0.0972756561058 relative_time: 7.5499999523162842 - theta: -1.83330046649 - accumulated_s: 23.74138885264 -} -adc_trajectory_point { - x: -130.46811181 - y: 341.914366125 - z: -31.3071321752 - - speed: 3.60833334923 - acceleration_s: 0.0974151609056 - curvature: 0.00244962463489 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.46811181 + y: 341.914366125 + z: -31.3071321752 + theta: -1.83326266322 + kappa: 0.00244962463489 + s: 23.77747218614 + dkappa: 0 + } + v: 3.60833334923 + a: 0.0974151609056 relative_time: 7.559999942779541 - theta: -1.83326266322 - accumulated_s: 23.77747218614 -} -adc_trajectory_point { - x: -130.477227617 - y: 341.879063801 - z: -31.3068647711 - - speed: 3.61111116409 - acceleration_s: 0.109978512877 - curvature: 0.00237307149975 - curvature_change_rate: -0.00211993294195 +} +trajectory_point { + path_point { + x: -130.477227617 + y: 341.879063801 + z: -31.3068647711 + theta: -1.83321713076 + kappa: 0.00237307149975 + s: 23.81358329774 + dkappa: -0.00211993294195 + } + v: 3.61111116409 + a: 0.109978512877 relative_time: 7.5699999332427979 - theta: -1.83321713076 - accumulated_s: 23.81358329774 -} -adc_trajectory_point { - x: -130.486315045 - y: 341.84378041 - z: -31.3068743879 - - speed: 3.61111116409 - acceleration_s: 0.00567902186277 - curvature: 0.00237307149975 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.486315045 + y: 341.84378041 + z: -31.3068743879 + theta: -1.83319815852 + kappa: 0.00237307149975 + s: 23.84969440934 + dkappa: 0 + } + v: 3.61111116409 + a: 0.00567902186277 relative_time: 7.5800001621246338 - theta: -1.83319815852 - accumulated_s: 23.84969440934 -} -adc_trajectory_point { - x: -130.495376099 - y: 341.808448496 - z: -31.3067256249 - - speed: 3.6166665554 - acceleration_s: 0.152469261191 - curvature: 0.00225824221834 - curvature_change_rate: -0.00317500327013 +} +trajectory_point { + path_point { + x: -130.495376099 + y: 341.808448496 + z: -31.3067256249 + theta: -1.83315549593 + kappa: 0.00225824221834 + s: 23.88586107494 + dkappa: -0.00317500327013 + } + v: 3.6166665554 + a: 0.152469261191 relative_time: 7.5900001525878906 - theta: -1.83315549593 - accumulated_s: 23.88586107494 -} -adc_trajectory_point { - x: -130.504386577 - y: 341.773133968 - z: -31.3067099955 - - speed: 3.6166665554 - acceleration_s: 0.152469261191 - curvature: 0.00225824221834 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.504386577 + y: 341.773133968 + z: -31.3067099955 + theta: -1.83309316732 + kappa: 0.00225824221834 + s: 23.92202774044 + dkappa: 0 + } + v: 3.6166665554 + a: 0.152469261191 relative_time: 7.6000001430511475 - theta: -1.83309316732 - accumulated_s: 23.92202774044 -} -adc_trajectory_point { - x: -130.513453083 - y: 341.737777539 - z: -31.3065015916 - - speed: 3.61111116409 - acceleration_s: 0.179880549344 - curvature: 0.00214341342064 - curvature_change_rate: -0.0031798743513 +} +trajectory_point { + path_point { + x: -130.513453083 + y: 341.737777539 + z: -31.3065015916 + theta: -1.83312058844 + kappa: 0.00214341342064 + s: 23.95813885214 + dkappa: -0.0031798743513 + } + v: 3.61111116409 + a: 0.179880549344 relative_time: 7.6100001335144043 - theta: -1.83312058844 - accumulated_s: 23.95813885214 -} -adc_trajectory_point { - x: -130.522445901 - y: 341.702419138 - z: -31.306389872 - - speed: 3.61111116409 - acceleration_s: 0.106177237866 - curvature: 0.00214341342064 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.522445901 + y: 341.702419138 + z: -31.306389872 + theta: -1.83309768605 + kappa: 0.00214341342064 + s: 23.99424996374 + dkappa: 0 + } + v: 3.61111116409 + a: 0.106177237866 relative_time: 7.6200001239776611 - theta: -1.83309768605 - accumulated_s: 23.99424996374 -} -adc_trajectory_point { - x: -130.531461869 - y: 341.667048605 - z: -31.3062682543 - - speed: 3.61111116409 - acceleration_s: 0.127126930021 - curvature: 0.00202858508204 - curvature_change_rate: -0.00317986163771 +} +trajectory_point { + path_point { + x: -130.531461869 + y: 341.667048605 + z: -31.3062682543 + theta: -1.83310159988 + kappa: 0.00202858508204 + s: 24.03036107544 + dkappa: -0.00317986163771 + } + v: 3.61111116409 + a: 0.127126930021 relative_time: 7.630000114440918 - theta: -1.83310159988 - accumulated_s: 24.03036107544 -} -adc_trajectory_point { - x: -130.540412175 - y: 341.631632082 - z: -31.3060056586 - - speed: 3.61111116409 - acceleration_s: 0.165897218174 - curvature: 0.00202858508204 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.540412175 + y: 341.631632082 + z: -31.3060056586 + theta: -1.83303996439 + kappa: 0.00202858508204 + s: 24.06647218704 + dkappa: 0 + } + v: 3.61111116409 + a: 0.165897218174 relative_time: 7.6400001049041748 - theta: -1.83303996439 - accumulated_s: 24.06647218704 -} -adc_trajectory_point { - x: -130.549373796 - y: 341.59624719 - z: -31.3059436176 - - speed: 3.61388897896 - acceleration_s: 0.0274753954421 - curvature: 0.00195203309921 - curvature_change_rate: -0.00211827157033 +} +trajectory_point { + path_point { + x: -130.549373796 + y: 341.59624719 + z: -31.3059436176 + theta: -1.83305600875 + kappa: 0.00195203309921 + s: 24.10261107684 + dkappa: -0.00211827157033 + } + v: 3.61388897896 + a: 0.0274753954421 relative_time: 7.6500000953674316 - theta: -1.83305600875 - accumulated_s: 24.10261107684 -} -adc_trajectory_point { - x: -130.558305939 - y: 341.560791409 - z: -31.3057266828 - - speed: 3.61388897896 - acceleration_s: 0.219597653305 - curvature: 0.00195203309921 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.558305939 + y: 341.560791409 + z: -31.3057266828 + theta: -1.8330286297 + kappa: 0.00195203309921 + s: 24.13874996664 + dkappa: 0 + } + v: 3.61388897896 + a: 0.219597653305 relative_time: 7.6600000858306885 - theta: -1.8330286297 - accumulated_s: 24.13874996664 -} -adc_trajectory_point { - x: -130.567250945 - y: 341.525391517 - z: -31.3056051079 - - speed: 3.61388897896 - acceleration_s: -0.04968520856 - curvature: 0.00191375717794 - curvature_change_rate: -0.00105913384432 +} +trajectory_point { + path_point { + x: -130.567250945 + y: 341.525391517 + z: -31.3056051079 + theta: -1.83306049982 + kappa: 0.00191375717794 + s: 24.17488885644 + dkappa: -0.00105913384432 + } + v: 3.61388897896 + a: -0.04968520856 relative_time: 7.6700000762939453 - theta: -1.83306049982 - accumulated_s: 24.17488885644 -} -adc_trajectory_point { - x: -130.576155849 - y: 341.489935814 - z: -31.305308939 - - speed: 3.61388897896 - acceleration_s: 0.0754218193221 - curvature: 0.00191375717794 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.576155849 + y: 341.489935814 + z: -31.305308939 + theta: -1.83303113849 + kappa: 0.00191375717794 + s: 24.21102774624 + dkappa: 0 + } + v: 3.61388897896 + a: 0.0754218193221 relative_time: 7.6800000667572021 - theta: -1.83303113849 - accumulated_s: 24.21102774624 -} -adc_trajectory_point { - x: -130.585087762 - y: 341.454496958 - z: -31.3051161263 - - speed: 3.61388897896 - acceleration_s: 0.0459569842948 - curvature: 0.00183720547112 - curvature_change_rate: -0.00211826393298 +} +trajectory_point { + path_point { + x: -130.585087762 + y: 341.454496958 + z: -31.3051161263 + theta: -1.83303396846 + kappa: 0.00183720547112 + s: 24.24716663604 + dkappa: -0.00211826393298 + } + v: 3.61388897896 + a: 0.0459569842948 relative_time: 7.690000057220459 - theta: -1.83303396846 - accumulated_s: 24.24716663604 -} -adc_trajectory_point { - x: -130.585087762 - y: 341.454496958 - z: -31.3051161263 - - speed: 3.61388897896 - acceleration_s: 0.0459569842948 - curvature: 0.00183720547112 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.585087762 + y: 341.454496958 + z: -31.3051161263 + theta: -1.83303396846 + kappa: 0.00183720547112 + s: 24.28330552574 + dkappa: 0 + } + v: 3.61388897896 + a: 0.0459569842948 relative_time: 7.690000057220459 - theta: -1.83303396846 - accumulated_s: 24.28330552574 -} -adc_trajectory_point { - x: -130.602911121 - y: 341.383562012 - z: -31.3047279408 - - speed: 3.61111116409 - acceleration_s: 0.144849583266 - curvature: 0.00183720547112 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.602911121 + y: 341.383562012 + z: -31.3047279408 + theta: -1.83293445716 + kappa: 0.00183720547112 + s: 24.31941663744 + dkappa: 0 + } + v: 3.61111116409 + a: 0.144849583266 relative_time: 7.7100000381469727 - theta: -1.83293445716 - accumulated_s: 24.31941663744 -} -adc_trajectory_point { - x: -130.611852783 - y: 341.348106938 - z: -31.3045846215 - - speed: 3.61111116409 - acceleration_s: 0.0448845221166 - curvature: 0.00183720547112 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.611852783 + y: 341.348106938 + z: -31.3045846215 + theta: -1.83294424528 + kappa: 0.00183720547112 + s: 24.35552774904 + dkappa: 0 + } + v: 3.61111116409 + a: 0.0448845221166 relative_time: 7.7200000286102295 - theta: -1.83294424528 - accumulated_s: 24.35552774904 -} -adc_trajectory_point { - x: -130.620780796 - y: 341.312606475 - z: -31.3042427422 - - speed: 3.61111116409 - acceleration_s: 0.160385700989 - curvature: 0.00179892968375 - curvature_change_rate: -0.00105994486544 +} +trajectory_point { + path_point { + x: -130.620780796 + y: 341.312606475 + z: -31.3042427422 + theta: -1.83289843935 + kappa: 0.00179892968375 + s: 24.39163886074 + dkappa: -0.00105994486544 + } + v: 3.61111116409 + a: 0.160385700989 relative_time: 7.7300000190734863 - theta: -1.83289843935 - accumulated_s: 24.39163886074 -} -adc_trajectory_point { - x: -130.629714032 - y: 341.277145663 - z: -31.3041904727 - - speed: 3.61111116409 - acceleration_s: 0.0446487559159 - curvature: 0.00179892968375 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.629714032 + y: 341.277145663 + z: -31.3041904727 + theta: -1.83288996666 + kappa: 0.00179892968375 + s: 24.42774997234 + dkappa: 0 + } + v: 3.61111116409 + a: 0.0446487559159 relative_time: 7.7400000095367432 - theta: -1.83288996666 - accumulated_s: 24.42774997234 -} -adc_trajectory_point { - x: -130.638674159 - y: 341.24160425 - z: -31.3038888006 - - speed: 3.61388897896 - acceleration_s: 0.2240524262 - curvature: 0.00179892968375 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.638674159 + y: 341.24160425 + z: -31.3038888006 + theta: -1.83288226161 + kappa: 0.00179892968375 + s: 24.46388886214 + dkappa: 0 + } + v: 3.61388897896 + a: 0.2240524262 relative_time: 7.75 - theta: -1.83288226161 - accumulated_s: 24.46388886214 -} -adc_trajectory_point { - x: -130.647626384 - y: 341.206107513 - z: -31.3037703065 - - speed: 3.61388897896 - acceleration_s: 0.0394091362678 - curvature: 0.00179892968375 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.647626384 + y: 341.206107513 + z: -31.3037703065 + theta: -1.83285930312 + kappa: 0.00179892968375 + s: 24.50002775194 + dkappa: 0 + } + v: 3.61388897896 + a: 0.0394091362678 relative_time: 7.7599999904632568 - theta: -1.83285930312 - accumulated_s: 24.50002775194 -} -adc_trajectory_point { - x: -130.647626384 - y: 341.206107513 - z: -31.3037703065 - - speed: 3.6166665554 - acceleration_s: 0.0394091362678 - curvature: 0.0017606539392 - curvature_change_rate: -0.00105831555025 +} +trajectory_point { + path_point { + x: -130.647626384 + y: 341.206107513 + z: -31.3037703065 + theta: -1.83285930312 + kappa: 0.0017606539392 + s: 24.53619441744 + dkappa: -0.00105831555025 + } + v: 3.6166665554 + a: 0.0394091362678 relative_time: 7.7599999904632568 - theta: -1.83285930312 - accumulated_s: 24.53619441744 -} -adc_trajectory_point { - x: -130.666043407 - y: 341.135419188 - z: -31.3035298269 - - speed: 3.6166665554 - acceleration_s: 0.0398697614652 - curvature: 0.0017606539392 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.666043407 + y: 341.135419188 + z: -31.3035298269 + theta: -1.83282695049 + kappa: 0.0017606539392 + s: 24.57236108304 + dkappa: 0 + } + v: 3.6166665554 + a: 0.0398697614652 relative_time: 7.7799999713897705 - theta: -1.83282695049 - accumulated_s: 24.57236108304 -} -adc_trajectory_point { - x: -130.666043407 - y: 341.135419188 - z: -31.3035298269 - - speed: 3.61944437027 - acceleration_s: 0.0398697614652 - curvature: 0.00168410257488 - curvature_change_rate: -0.00211500320182 +} +trajectory_point { + path_point { + x: -130.666043407 + y: 341.135419188 + z: -31.3035298269 + theta: -1.83282695049 + kappa: 0.00168410257488 + s: 24.60855552674 + dkappa: -0.00211500320182 + } + v: 3.61944437027 + a: 0.0398697614652 relative_time: 7.7799999713897705 - theta: -1.83282695049 - accumulated_s: 24.60855552674 -} -adc_trajectory_point { - x: -130.675528532 - y: 341.099629458 - z: -31.3032928389 - - speed: 3.61944437027 - acceleration_s: 0.1292120301 - curvature: 0.00168410257488 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.675528532 + y: 341.099629458 + z: -31.3032928389 + theta: -1.83279553698 + kappa: 0.00168410257488 + s: 24.64474997044 + dkappa: 0 + } + v: 3.61944437027 + a: 0.1292120301 relative_time: 7.7899999618530273 - theta: -1.83279553698 - accumulated_s: 24.64474997044 -} -adc_trajectory_point { - x: -130.69440843 - y: 341.028045342 - z: -31.3030609163 - - speed: 3.625 - acceleration_s: 0.0501726322437 - curvature: 0.00156927582672 - curvature_change_rate: -0.00316763443199 +} +trajectory_point { + path_point { + x: -130.69440843 + y: 341.028045342 + z: -31.3030609163 + theta: -1.83274545472 + kappa: 0.00156927582672 + s: 24.68099997044 + dkappa: -0.00316763443199 + } + v: 3.625 + a: 0.0501726322437 relative_time: 7.809999942779541 - theta: -1.83274545472 - accumulated_s: 24.68099997044 -} -adc_trajectory_point { - x: -130.703852373 - y: 340.992214082 - z: -31.3028028309 - - speed: 3.625 - acceleration_s: 0.124113583731 - curvature: 0.00156927582672 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.703852373 + y: 340.992214082 + z: -31.3028028309 + theta: -1.83272471706 + kappa: 0.00156927582672 + s: 24.71724997044 + dkappa: 0 + } + v: 3.625 + a: 0.124113583731 relative_time: 7.8199999332427979 - theta: -1.83272471706 - accumulated_s: 24.71724997044 -} -adc_trajectory_point { - x: -130.713271736 - y: 340.956389943 - z: -31.3027244527 - - speed: 3.625 - acceleration_s: 0.0844670987936 - curvature: 0.00149272484953 - curvature_change_rate: -0.00211175109484 +} +trajectory_point { + path_point { + x: -130.713271736 + y: 340.956389943 + z: -31.3027244527 + theta: -1.83270542199 + kappa: 0.00149272484953 + s: 24.75349997044 + dkappa: -0.00211175109484 + } + v: 3.625 + a: 0.0844670987936 relative_time: 7.8300001621246338 - theta: -1.83270542199 - accumulated_s: 24.75349997044 -} -adc_trajectory_point { - x: -130.722703543 - y: 340.920539753 - z: -31.3024780815 - - speed: 3.625 - acceleration_s: 0.148104053322 - curvature: 0.00149272484953 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.722703543 + y: 340.920539753 + z: -31.3024780815 + theta: -1.83271988044 + kappa: 0.00149272484953 + s: 24.78974997044 + dkappa: 0 + } + v: 3.625 + a: 0.148104053322 relative_time: 7.8400001525878906 - theta: -1.83271988044 - accumulated_s: 24.78974997044 -} -adc_trajectory_point { - x: -130.732108872 - y: 340.884678737 - z: -31.3023909777 - - speed: 3.63055562973 - acceleration_s: 0.148104053322 - curvature: 0.00137789864791 - curvature_change_rate: -0.00316277213004 +} +trajectory_point { + path_point { + x: -130.732108872 + y: 340.884678737 + z: -31.3023909777 + theta: -1.83270299502 + kappa: 0.00137789864791 + s: 24.82605552674 + dkappa: -0.00316277213004 + } + v: 3.63055562973 + a: 0.148104053322 relative_time: 7.8500001430511475 - theta: -1.83270299502 - accumulated_s: 24.82605552674 -} -adc_trajectory_point { - x: -130.741504345 - y: 340.848781349 - z: -31.3021927224 - - speed: 3.63055562973 - acceleration_s: 0.179385781992 - curvature: 0.00137789864791 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.741504345 + y: 340.848781349 + z: -31.3021927224 + theta: -1.83268369838 + kappa: 0.00137789864791 + s: 24.86236108304 + dkappa: 0 + } + v: 3.63055562973 + a: 0.179385781992 relative_time: 7.8600001335144043 - theta: -1.83268369838 - accumulated_s: 24.86236108304 -} -adc_trajectory_point { - x: -130.750903537 - y: 340.812895603 - z: -31.3020933596 - - speed: 3.63611102104 - acceleration_s: 0.0930404922489 - curvature: 0.00130134790508 - curvature_change_rate: -0.00210529168074 +} +trajectory_point { + path_point { + x: -130.750903537 + y: 340.812895603 + z: -31.3020933596 + theta: -1.83265571511 + kappa: 0.00130134790508 + s: 24.89872219324 + dkappa: -0.00210529168074 + } + v: 3.63611102104 + a: 0.0930404922489 relative_time: 7.8700001239776611 - theta: -1.83265571511 - accumulated_s: 24.89872219324 -} -adc_trajectory_point { - x: -130.760292861 - y: 340.776977129 - z: -31.3019938609 - - speed: 3.63611102104 - acceleration_s: 0.152979877708 - curvature: 0.00130134790508 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.760292861 + y: 340.776977129 + z: -31.3019938609 + theta: -1.83263881198 + kappa: 0.00130134790508 + s: 24.93508330344 + dkappa: 0 + } + v: 3.63611102104 + a: 0.152979877708 relative_time: 7.880000114440918 - theta: -1.83263881198 - accumulated_s: 24.93508330344 -} -adc_trajectory_point { - x: -130.76967928 - y: 340.741082499 - z: -31.301855946 - - speed: 3.64166665077 - acceleration_s: 0.0231350709845 - curvature: 0.00118652218167 - curvature_change_rate: -0.00315310912329 +} +trajectory_point { + path_point { + x: -130.76967928 + y: 340.741082499 + z: -31.301855946 + theta: -1.8326313572 + kappa: 0.00118652218167 + s: 24.97149996994 + dkappa: -0.00315310912329 + } + v: 3.64166665077 + a: 0.0231350709845 relative_time: 7.8900001049041748 - theta: -1.8326313572 - accumulated_s: 24.97149996994 -} -adc_trajectory_point { - x: -130.779138295 - y: 340.705167118 - z: -31.3017047923 - - speed: 3.64166665077 - acceleration_s: 0.0231350709845 - curvature: 0.00118652218167 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.779138295 + y: 340.705167118 + z: -31.3017047923 + theta: -1.83266872915 + kappa: 0.00118652218167 + s: 25.00791663644 + dkappa: 0 + } + v: 3.64166665077 + a: 0.0231350709845 relative_time: 7.9000000953674316 - theta: -1.83266872915 - accumulated_s: 25.00791663644 -} -adc_trajectory_point { - x: -130.788551733 - y: 340.669244905 - z: -31.3015434276 - - speed: 3.64166665077 - acceleration_s: 0.0728129344467 - curvature: 0.00110997184211 - curvature_change_rate: -0.00210206883018 +} +trajectory_point { + path_point { + x: -130.788551733 + y: 340.669244905 + z: -31.3015434276 + theta: -1.83261671623 + kappa: 0.00110997184211 + s: 25.04433330294 + dkappa: -0.00210206883018 + } + v: 3.64166665077 + a: 0.0728129344467 relative_time: 7.9100000858306885 - theta: -1.83261671623 - accumulated_s: 25.04433330294 -} -adc_trajectory_point { - x: -130.798021393 - y: 340.633331995 - z: -31.301507744 - - speed: 3.64166665077 - acceleration_s: 0.0896483382723 - curvature: 0.00110997184211 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.798021393 + y: 340.633331995 + z: -31.301507744 + theta: -1.83263678319 + kappa: 0.00110997184211 + s: 25.08074996944 + dkappa: 0 + } + v: 3.64166665077 + a: 0.0896483382723 relative_time: 7.9200000762939453 - theta: -1.83263678319 - accumulated_s: 25.08074996944 -} -adc_trajectory_point { - x: -130.807484599 - y: 340.597393821 - z: -31.3013093742 - - speed: 3.64166665077 - acceleration_s: 0.135289308023 - curvature: 0.00103342160821 - curvature_change_rate: -0.00210206592869 +} +trajectory_point { + path_point { + x: -130.807484599 + y: 340.597393821 + z: -31.3013093742 + theta: -1.83258672514 + kappa: 0.00103342160821 + s: 25.11716663604 + dkappa: -0.00210206592869 + } + v: 3.64166665077 + a: 0.135289308023 relative_time: 7.9300000667572021 - theta: -1.83258672514 - accumulated_s: 25.11716663604 -} -adc_trajectory_point { - x: -130.816937774 - y: 340.561463679 - z: -31.3011940848 - - speed: 3.64166665077 - acceleration_s: 0.0628889723761 - curvature: 0.00103342160821 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.816937774 + y: 340.561463679 + z: -31.3011940848 + theta: -1.83255082443 + kappa: 0.00103342160821 + s: 25.15358330254 + dkappa: 0 + } + v: 3.64166665077 + a: 0.0628889723761 relative_time: 7.940000057220459 - theta: -1.83255082443 - accumulated_s: 25.15358330254 -} -adc_trajectory_point { - x: -130.816937774 - y: 340.561463679 - z: -31.3011940848 - - speed: 3.64444446564 - acceleration_s: 0.0628889723761 - curvature: 0.000918596439528 - curvature_change_rate: -0.00315069058562 +} +trajectory_point { + path_point { + x: -130.816937774 + y: 340.561463679 + z: -31.3011940848 + theta: -1.83255082443 + kappa: 0.000918596439528 + s: 25.19002774714 + dkappa: -0.00315069058562 + } + v: 3.64444446564 + a: 0.0628889723761 relative_time: 7.940000057220459 - theta: -1.83255082443 - accumulated_s: 25.19002774714 -} -adc_trajectory_point { - x: -130.83593004 - y: 340.489596202 - z: -31.3008860145 - - speed: 3.64444446564 - acceleration_s: -0.0163727158504 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.83593004 + y: 340.489596202 + z: -31.3008860145 + theta: -1.83255423802 + kappa: 0.000918596439528 + s: 25.22647219184 + dkappa: 0 + } + v: 3.64444446564 + a: -0.0163727158504 relative_time: 7.9600000381469727 - theta: -1.83255423802 - accumulated_s: 25.22647219184 -} -adc_trajectory_point { - x: -130.845418368 - y: 340.45365412 - z: -31.3007718567 - - speed: 3.6472222805 - acceleration_s: 0.0501716132282 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.845418368 + y: 340.45365412 + z: -31.3007718567 + theta: -1.83253588269 + kappa: 0.000918596439528 + s: 25.26294441464 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0501716132282 relative_time: 7.9700000286102295 - theta: -1.83253588269 - accumulated_s: 25.26294441464 -} -adc_trajectory_point { - x: -130.854934592 - y: 340.417716539 - z: -31.3005748028 - - speed: 3.6472222805 - acceleration_s: 0.0350966479665 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.854934592 + y: 340.417716539 + z: -31.3005748028 + theta: -1.83251789237 + kappa: 0.000918596439528 + s: 25.29941663744 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0350966479665 relative_time: 7.9800000190734863 - theta: -1.83251789237 - accumulated_s: 25.29941663744 -} -adc_trajectory_point { - x: -130.864450823 - y: 340.381778494 - z: -31.3004705673 - - speed: 3.6472222805 - acceleration_s: 0.0538111666898 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.864450823 + y: 340.381778494 + z: -31.3004705673 + theta: -1.83250343616 + kappa: 0.000918596439528 + s: 25.33588886024 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0538111666898 relative_time: 7.9900000095367432 - theta: -1.83250343616 - accumulated_s: 25.33588886024 -} -adc_trajectory_point { - x: -130.873993682 - y: 340.345841256 - z: -31.3002635697 - - speed: 3.6472222805 - acceleration_s: 0.0231137538721 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.873993682 + y: 340.345841256 + z: -31.3002635697 + theta: -1.83250007398 + kappa: 0.000918596439528 + s: 25.37236108304 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0231137538721 relative_time: 8 - theta: -1.83250007398 - accumulated_s: 25.37236108304 -} -adc_trajectory_point { - x: -130.883525638 - y: 340.309894166 - z: -31.3001907943 - - speed: 3.6472222805 - acceleration_s: 0.0817352685085 - curvature: 0.000880321428239 - curvature_change_rate: -0.00104942908179 +} +trajectory_point { + path_point { + x: -130.883525638 + y: 340.309894166 + z: -31.3001907943 + theta: -1.83245126535 + kappa: 0.000880321428239 + s: 25.408833305839998 + dkappa: -0.00104942908179 + } + v: 3.6472222805 + a: 0.0817352685085 relative_time: 8.0099999904632568 - theta: -1.83245126535 - accumulated_s: 25.408833305839998 -} -adc_trajectory_point { - x: -130.893060411 - y: 340.273944983 - z: -31.3000618229 - - speed: 3.6472222805 - acceleration_s: 0.0817352685085 - curvature: 0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.893060411 + y: 340.273944983 + z: -31.3000618229 + theta: -1.83241241184 + kappa: 0.000880321428239 + s: 25.44530552864 + dkappa: 0 + } + v: 3.6472222805 + a: 0.0817352685085 relative_time: 8.0199999809265137 - theta: -1.83241241184 - accumulated_s: 25.44530552864 -} -adc_trajectory_point { - x: -130.902637598 - y: 340.238000204 - z: -31.2999389796 - - speed: 3.6472222805 - acceleration_s: 0.048851556906 - curvature: 0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.902637598 + y: 340.238000204 + z: -31.2999389796 + theta: -1.83240779429 + kappa: 0.000880321428239 + s: 25.48177775144 + dkappa: 0 + } + v: 3.6472222805 + a: 0.048851556906 relative_time: 8.02999997138977 - theta: -1.83240779429 - accumulated_s: 25.48177775144 -} -adc_trajectory_point { - x: -130.912176404 - y: 340.20202961 - z: -31.2998038605 - - speed: 3.65000009537 - acceleration_s: 0.0897047452737 - curvature: 0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.912176404 + y: 340.20202961 + z: -31.2998038605 + theta: -1.83235125691 + kappa: 0.000880321428239 + s: 25.51827775244 + dkappa: 0 + } + v: 3.65000009537 + a: 0.0897047452737 relative_time: 8.0399999618530273 - theta: -1.83235125691 - accumulated_s: 25.51827775244 -} -adc_trajectory_point { - x: -130.921783432 - y: 340.166072734 - z: -31.2996864039 - - speed: 3.65277767181 - acceleration_s: 0.0897047452737 - curvature: 0.000918596439528 - curvature_change_rate: 0.00104783303907 +} +trajectory_point { + path_point { + x: -130.921783432 + y: 340.166072734 + z: -31.2996864039 + theta: -1.83233337587 + kappa: 0.000918596439528 + s: 25.55480552914 + dkappa: 0.00104783303907 + } + v: 3.65277767181 + a: 0.0897047452737 relative_time: 8.0499999523162842 - theta: -1.83233337587 - accumulated_s: 25.55480552914 -} -adc_trajectory_point { - x: -130.9313818 - y: 340.130114091 - z: -31.299647077 - - speed: 3.65277767181 - acceleration_s: 0.0624346032785 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.9313818 + y: 340.130114091 + z: -31.299647077 + theta: -1.8323109334 + kappa: 0.000918596439528 + s: 25.59133330584 + dkappa: 0 + } + v: 3.65277767181 + a: 0.0624346032785 relative_time: 8.059999942779541 - theta: -1.8323109334 - accumulated_s: 25.59133330584 -} -adc_trajectory_point { - x: -130.941007048 - y: 340.09412651 - z: -31.2994796736 - - speed: 3.65277767181 - acceleration_s: 0.142720077487 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.941007048 + y: 340.09412651 + z: -31.2994796736 + theta: -1.83228829884 + kappa: 0.000918596439528 + s: 25.62786108254 + dkappa: 0 + } + v: 3.65277767181 + a: 0.142720077487 relative_time: 8.0699999332427979 - theta: -1.83228829884 - accumulated_s: 25.62786108254 -} -adc_trajectory_point { - x: -130.950640579 - y: 340.058177255 - z: -31.2994999234 - - speed: 3.65555548668 - acceleration_s: 0.000615801137302 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.950640579 + y: 340.058177255 + z: -31.2994999234 + theta: -1.83228444302 + kappa: 0.000918596439528 + s: 25.66441663744 + dkappa: 0 + } + v: 3.65555548668 + a: 0.000615801137302 relative_time: 8.0800001621246338 - theta: -1.83228444302 - accumulated_s: 25.66441663744 -} -adc_trajectory_point { - x: -130.960315636 - y: 340.022180065 - z: -31.2993414029 - - speed: 3.65555548668 - acceleration_s: 0.15280930018 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.960315636 + y: 340.022180065 + z: -31.2993414029 + theta: -1.83226636784 + kappa: 0.000918596439528 + s: 25.70097219234 + dkappa: 0 + } + v: 3.65555548668 + a: 0.15280930018 relative_time: 8.09000015258789 - theta: -1.83226636784 - accumulated_s: 25.70097219234 -} -adc_trajectory_point { - x: -130.969995453 - y: 339.986192931 - z: -31.299452601 - - speed: 3.65833330154 - acceleration_s: 0.15280930018 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.969995453 + y: 339.986192931 + z: -31.299452601 + theta: -1.83225447424 + kappa: 0.000918596439528 + s: 25.73755552534 + dkappa: 0 + } + v: 3.65833330154 + a: 0.15280930018 relative_time: 8.1000001430511475 - theta: -1.83225447424 - accumulated_s: 25.73755552534 -} -adc_trajectory_point { - x: -130.979682334 - y: 339.950163942 - z: -31.2993475264 - - speed: 3.66111111641 - acceleration_s: 0.198806584695 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.979682334 + y: 339.950163942 + z: -31.2993475264 + theta: -1.83222854493 + kappa: 0.000918596439528 + s: 25.77416663644 + dkappa: 0 + } + v: 3.66111111641 + a: 0.198806584695 relative_time: 8.1100001335144043 - theta: -1.83222854493 - accumulated_s: 25.77416663644 -} -adc_trajectory_point { - x: -130.989392073 - y: 339.91415531 - z: -31.2994117336 - - speed: 3.66111111641 - acceleration_s: 0.134532857608 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.989392073 + y: 339.91415531 + z: -31.2994117336 + theta: -1.83223108593 + kappa: 0.000918596439528 + s: 25.81077774764 + dkappa: 0 + } + v: 3.66111111641 + a: 0.134532857608 relative_time: 8.1200001239776611 - theta: -1.83223108593 - accumulated_s: 25.81077774764 -} -adc_trajectory_point { - x: -130.999126681 - y: 339.878125284 - z: -31.2993557891 - - speed: 3.66666674614 - acceleration_s: 0.112522315953 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -130.999126681 + y: 339.878125284 + z: -31.2993557891 + theta: -1.83221197181 + kappa: 0.000918596439528 + s: 25.84744441514 + dkappa: 0 + } + v: 3.66666674614 + a: 0.112522315953 relative_time: 8.130000114440918 - theta: -1.83221197181 - accumulated_s: 25.84744441514 -} -adc_trajectory_point { - x: -131.008844928 - y: 339.842102638 - z: -31.2993960408 - - speed: 3.66666674614 - acceleration_s: 0.0224882151414 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.008844928 + y: 339.842102638 + z: -31.2993960408 + theta: -1.83216295343 + kappa: 0.000918596439528 + s: 25.88411108254 + dkappa: 0 + } + v: 3.66666674614 + a: 0.0224882151414 relative_time: 8.1400001049041748 - theta: -1.83216295343 - accumulated_s: 25.88411108254 -} -adc_trajectory_point { - x: -131.018578714 - y: 339.806075759 - z: -31.2995150331 - - speed: 3.669444561 - acceleration_s: 0.0572459340474 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.018578714 + y: 339.806075759 + z: -31.2995150331 + theta: -1.83212542772 + kappa: 0.000918596439528 + s: 25.92080552814 + dkappa: 0 + } + v: 3.669444561 + a: 0.0572459340474 relative_time: 8.1500000953674316 - theta: -1.83212542772 - accumulated_s: 25.92080552814 -} -adc_trajectory_point { - x: -131.028347707 - y: 339.770029 - z: -31.2995252535 - - speed: 3.669444561 - acceleration_s: 0.153243487934 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.028347707 + y: 339.770029 + z: -31.2995252535 + theta: -1.8321122234 + kappa: 0.000918596439528 + s: 25.95749997374 + dkappa: 0 + } + v: 3.669444561 + a: 0.153243487934 relative_time: 8.1600000858306885 - theta: -1.8321122234 - accumulated_s: 25.95749997374 -} -adc_trajectory_point { - x: -131.038073745 - y: 339.73398671 - z: -31.2996486742 - - speed: 3.669444561 - acceleration_s: 0.00412568286448 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.038073745 + y: 339.73398671 + z: -31.2996486742 + theta: -1.83206449221 + kappa: 0.000918596439528 + s: 25.99419441934 + dkappa: 0 + } + v: 3.669444561 + a: 0.00412568286448 relative_time: 8.1700000762939453 - theta: -1.83206449221 - accumulated_s: 25.99419441934 -} -adc_trajectory_point { - x: -131.047846748 - y: 339.697903145 - z: -31.2996453242 - - speed: 3.66388893127 - acceleration_s: 0.213592708517 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.047846748 + y: 339.697903145 + z: -31.2996453242 + theta: -1.8320369349 + kappa: 0.000918596439528 + s: 26.03083330874 + dkappa: 0 + } + v: 3.66388893127 + a: 0.213592708517 relative_time: 8.1800000667572021 - theta: -1.8320369349 - accumulated_s: 26.03083330874 -} -adc_trajectory_point { - x: -131.057601704 - y: 339.661848463 - z: -31.2998498427 - - speed: 3.66388893127 - acceleration_s: 0.0729537930512 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.057601704 + y: 339.661848463 + z: -31.2998498427 + theta: -1.8320153096 + kappa: 0.000918596439528 + s: 26.06747219804 + dkappa: 0 + } + v: 3.66388893127 + a: 0.0729537930512 relative_time: 8.190000057220459 - theta: -1.8320153096 - accumulated_s: 26.06747219804 -} -adc_trajectory_point { - x: -131.057601704 - y: 339.661848463 - z: -31.2998498427 - - speed: 3.66666674614 - acceleration_s: 0.0729537930512 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.057601704 + y: 339.661848463 + z: -31.2998498427 + theta: -1.8320153096 + kappa: 0.000918596439528 + s: 26.10413886544 + dkappa: 0 + } + v: 3.66666674614 + a: 0.0729537930512 relative_time: 8.190000057220459 - theta: -1.8320153096 - accumulated_s: 26.10413886544 -} -adc_trajectory_point { - x: -131.077140665 - y: 339.589661023 - z: -31.3000360513 - - speed: 3.66666674614 - acceleration_s: 0.0613900097566 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.077140665 + y: 339.589661023 + z: -31.3000360513 + theta: -1.83190855949 + kappa: 0.000918596439528 + s: 26.14080553294 + dkappa: 0 + } + v: 3.66666674614 + a: 0.0613900097566 relative_time: 8.2100000381469727 - theta: -1.83190855949 - accumulated_s: 26.14080553294 -} -adc_trajectory_point { - x: -131.08696897 - y: 339.55356477 - z: -31.3001523307 - - speed: 3.66666674614 - acceleration_s: 0.0456917770021 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.08696897 + y: 339.55356477 + z: -31.3001523307 + theta: -1.83192682468 + kappa: 0.000918596439528 + s: 26.17747220044 + dkappa: 0 + } + v: 3.66666674614 + a: 0.0456917770021 relative_time: 8.22000002861023 - theta: -1.83192682468 - accumulated_s: 26.17747220044 -} -adc_trajectory_point { - x: -131.096779297 - y: 339.517449887 - z: -31.3002983937 - - speed: 3.669444561 - acceleration_s: 0.157094234461 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.096779297 + y: 339.517449887 + z: -31.3002983937 + theta: -1.83187575872 + kappa: 0.000918596439528 + s: 26.21416664604 + dkappa: 0 + } + v: 3.669444561 + a: 0.157094234461 relative_time: 8.2300000190734863 - theta: -1.83187575872 - accumulated_s: 26.21416664604 -} -adc_trajectory_point { - x: -131.106589695 - y: 339.481355823 - z: -31.3004826577 - - speed: 3.669444561 - acceleration_s: 0.0138360880559 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.106589695 + y: 339.481355823 + z: -31.3004826577 + theta: -1.83183937453 + kappa: 0.000918596439528 + s: 26.25086109164 + dkappa: 0 + } + v: 3.669444561 + a: 0.0138360880559 relative_time: 8.2400000095367432 - theta: -1.83183937453 - accumulated_s: 26.25086109164 -} -adc_trajectory_point { - x: -131.116441605 - y: 339.445233672 - z: -31.3005322805 - - speed: 3.669444561 - acceleration_s: 0.110514537161 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.116441605 + y: 339.445233672 + z: -31.3005322805 + theta: -1.83180888744 + kappa: 0.000918596439528 + s: 26.28755553724 + dkappa: 0 + } + v: 3.669444561 + a: 0.110514537161 relative_time: 8.25 - theta: -1.83180888744 - accumulated_s: 26.28755553724 -} -adc_trajectory_point { - x: -131.126272548 - y: 339.409125322 - z: -31.3005999485 - - speed: 3.669444561 - acceleration_s: 0.0216516731092 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.126272548 + y: 339.409125322 + z: -31.3005999485 + theta: -1.83175332343 + kappa: 0.000918596439528 + s: 26.32424998284 + dkappa: 0 + } + v: 3.669444561 + a: 0.0216516731092 relative_time: 8.2599999904632568 - theta: -1.83175332343 - accumulated_s: 26.32424998284 -} -adc_trajectory_point { - x: -131.136115777 - y: 339.373016152 - z: -31.3006376708 - - speed: 3.669444561 - acceleration_s: 0.0208072840911 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.136115777 + y: 339.373016152 + z: -31.3006376708 + theta: -1.83167516464 + kappa: 0.000918596439528 + s: 26.36094442844 + dkappa: 0 + } + v: 3.669444561 + a: 0.0208072840911 relative_time: 8.2699999809265137 - theta: -1.83167516464 - accumulated_s: 26.36094442844 -} -adc_trajectory_point { - x: -131.145988643 - y: 339.33690518 - z: -31.3007889176 - - speed: 3.669444561 - acceleration_s: 0.0778664068072 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.145988643 + y: 339.33690518 + z: -31.3007889176 + theta: -1.83166581714 + kappa: 0.000918596439528 + s: 26.39763887404 + dkappa: 0 + } + v: 3.669444561 + a: 0.0778664068072 relative_time: 8.27999997138977 - theta: -1.83166581714 - accumulated_s: 26.39763887404 -} -adc_trajectory_point { - x: -131.155856212 - y: 339.300765569 - z: -31.3008449012 - - speed: 3.669444561 - acceleration_s: 0.149877177892 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.155856212 + y: 339.300765569 + z: -31.3008449012 + theta: -1.83163130848 + kappa: 0.000918596439528 + s: 26.43433331964 + dkappa: 0 + } + v: 3.669444561 + a: 0.149877177892 relative_time: 8.2899999618530273 - theta: -1.83163130848 - accumulated_s: 26.43433331964 -} -adc_trajectory_point { - x: -131.165734938 - y: 339.264620127 - z: -31.3008489804 - - speed: 3.67222213745 - acceleration_s: 0.16331538138 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.165734938 + y: 339.264620127 + z: -31.3008489804 + theta: -1.831635156 + kappa: 0.000918596439528 + s: 26.47105554104 + dkappa: 0 + } + v: 3.67222213745 + a: 0.16331538138 relative_time: 8.2999999523162842 - theta: -1.831635156 - accumulated_s: 26.47105554104 -} -adc_trajectory_point { - x: -131.175566316 - y: 339.228455267 - z: -31.3009608481 - - speed: 3.67222213745 - acceleration_s: 0.135593390645 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.175566316 + y: 339.228455267 + z: -31.3009608481 + theta: -1.83159067492 + kappa: 0.000918596439528 + s: 26.50777776244 + dkappa: 0 + } + v: 3.67222213745 + a: 0.135593390645 relative_time: 8.309999942779541 - theta: -1.83159067492 - accumulated_s: 26.50777776244 -} -adc_trajectory_point { - x: -131.185440819 - y: 339.192279291 - z: -31.3009583792 - - speed: 3.67222213745 - acceleration_s: 0.151254464873 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.185440819 + y: 339.192279291 + z: -31.3009583792 + theta: -1.83159968181 + kappa: 0.000918596439528 + s: 26.54449998384 + dkappa: 0 + } + v: 3.67222213745 + a: 0.151254464873 relative_time: 8.3199999332427979 - theta: -1.83159968181 - accumulated_s: 26.54449998384 -} -adc_trajectory_point { - x: -131.195248563 - y: 339.156106709 - z: -31.3010963807 - - speed: 3.67222213745 - acceleration_s: 0.0250942985311 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.195248563 + y: 339.156106709 + z: -31.3010963807 + theta: -1.83156516734 + kappa: 0.000918596439528 + s: 26.58122220514 + dkappa: 0 + } + v: 3.67222213745 + a: 0.0250942985311 relative_time: 8.3300001621246338 - theta: -1.83156516734 - accumulated_s: 26.58122220514 -} -adc_trajectory_point { - x: -131.205084922 - y: 339.119887824 - z: -31.3011043938 - - speed: 3.67499995232 - acceleration_s: 0.167788912539 - curvature: 0.000918596439528 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.205084922 + y: 339.119887824 + z: -31.3011043938 + theta: -1.83157327091 + kappa: 0.000918596439528 + s: 26.61797220464 + dkappa: 0 + } + v: 3.67499995232 + a: 0.167788912539 relative_time: 8.34000015258789 - theta: -1.83157327091 - accumulated_s: 26.61797220464 -} -adc_trajectory_point { - x: -131.214858687 - y: 339.083669224 - z: -31.3012608467 - - speed: 3.67499995232 - acceleration_s: 0.167788912539 - curvature: 0.000880321428239 - curvature_change_rate: -0.00104149691933 +} +trajectory_point { + path_point { + x: -131.214858687 + y: 339.083669224 + z: -31.3012608467 + theta: -1.83155865376 + kappa: 0.000880321428239 + s: 26.65472220424 + dkappa: -0.00104149691933 + } + v: 3.67499995232 + a: 0.167788912539 relative_time: 8.3500001430511475 - theta: -1.83155865376 - accumulated_s: 26.65472220424 -} -adc_trajectory_point { - x: -131.224615283 - y: 339.04742901 - z: -31.3012495674 - - speed: 3.67499995232 - acceleration_s: 0.0822227314289 - curvature: 0.000880321428239 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.224615283 + y: 339.04742901 + z: -31.3012495674 + theta: -1.83153343829 + kappa: 0.000880321428239 + s: 26.69147220374 + dkappa: 0 + } + v: 3.67499995232 + a: 0.0822227314289 relative_time: 8.3600001335144043 - theta: -1.83153343829 - accumulated_s: 26.69147220374 -} -adc_trajectory_point { - x: -131.234406776 - y: 339.011172706 - z: -31.3013456613 - - speed: 3.67777776718 - acceleration_s: 0.113819625336 - curvature: 0.000803771467601 - curvature_change_rate: -0.00208141887531 +} +trajectory_point { + path_point { + x: -131.234406776 + y: 339.011172706 + z: -31.3013456613 + theta: -1.8315918382 + kappa: 0.000803771467601 + s: 26.72824998144 + dkappa: -0.00208141887531 + } + v: 3.67777776718 + a: 0.113819625336 relative_time: 8.3700001239776611 - theta: -1.8315918382 - accumulated_s: 26.72824998144 -} -adc_trajectory_point { - x: -131.244131202 - y: 338.974905711 - z: -31.301438354 - - speed: 3.67777776718 - acceleration_s: 0.0554700617746 - curvature: 0.000803771467601 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.244131202 + y: 338.974905711 + z: -31.301438354 + theta: -1.83162134349 + kappa: 0.000803771467601 + s: 26.76502775904 + dkappa: 0 + } + v: 3.67777776718 + a: 0.0554700617746 relative_time: 8.380000114440918 - theta: -1.83162134349 - accumulated_s: 26.76502775904 -} -adc_trajectory_point { - x: -131.25384955 - y: 338.938616238 - z: -31.3015423361 - - speed: 3.68055558205 - acceleration_s: 0.152532449879 - curvature: 0.00076549651643 - curvature_change_rate: -0.00103992319414 +} +trajectory_point { + path_point { + x: -131.25384955 + y: 338.938616238 + z: -31.3015423361 + theta: -1.83165084373 + kappa: 0.00076549651643 + s: 26.80183331494 + dkappa: -0.00103992319414 + } + v: 3.68055558205 + a: 0.152532449879 relative_time: 8.3900001049041748 - theta: -1.83165084373 - accumulated_s: 26.80183331494 -} -adc_trajectory_point { - x: -131.25384955 - y: 338.938616238 - z: -31.3015423361 - - speed: 3.68055558205 - acceleration_s: 0.152532449879 - curvature: 0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.25384955 + y: 338.938616238 + z: -31.3015423361 + theta: -1.83165084373 + kappa: 0.00076549651643 + s: 26.83863887074 + dkappa: 0 + } + v: 3.68055558205 + a: 0.152532449879 relative_time: 8.3900001049041748 - theta: -1.83165084373 - accumulated_s: 26.83863887074 -} -adc_trajectory_point { - x: -131.273254626 - y: 338.86600178 - z: -31.301791084 - - speed: 3.68055558205 - acceleration_s: 0.154423085802 - curvature: 0.00076549651643 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.273254626 + y: 338.86600178 + z: -31.301791084 + theta: -1.83177836445 + kappa: 0.00076549651643 + s: 26.87544442654 + dkappa: 0 + } + v: 3.68055558205 + a: 0.154423085802 relative_time: 8.4100000858306885 - theta: -1.83177836445 - accumulated_s: 26.87544442654 -} -adc_trajectory_point { - x: -131.282905752 - y: 338.829664789 - z: -31.3019227739 - - speed: 3.68333339691 - acceleration_s: 0.10791718453 - curvature: 0.000727221583477 - curvature_change_rate: -0.00103913843329 +} +trajectory_point { + path_point { + x: -131.282905752 + y: 338.829664789 + z: -31.3019227739 + theta: -1.83179098684 + kappa: 0.000727221583477 + s: 26.91227776054 + dkappa: -0.00103913843329 + } + v: 3.68333339691 + a: 0.10791718453 relative_time: 8.4200000762939453 - theta: -1.83179098684 - accumulated_s: 26.91227776054 -} -adc_trajectory_point { - x: -131.292559769 - y: 338.793302242 - z: -31.3020108668 - - speed: 3.68333339691 - acceleration_s: 0.180575814529 - curvature: 0.000727221583477 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.292559769 + y: 338.793302242 + z: -31.3020108668 + theta: -1.83185252348 + kappa: 0.000727221583477 + s: 26.94911109444 + dkappa: 0 + } + v: 3.68333339691 + a: 0.180575814529 relative_time: 8.4300000667572021 - theta: -1.83185252348 - accumulated_s: 26.94911109444 -} -adc_trajectory_point { - x: -131.302179486 - y: 338.756936416 - z: -31.302163193 - - speed: 3.68611121178 - acceleration_s: 0.105572172671 - curvature: 0.000650671714967 - curvature_change_rate: -0.00207671076947 +} +trajectory_point { + path_point { + x: -131.302179486 + y: 338.756936416 + z: -31.302163193 + theta: -1.83189221851 + kappa: 0.000650671714967 + s: 26.98597220664 + dkappa: -0.00207671076947 + } + v: 3.68611121178 + a: 0.105572172671 relative_time: 8.440000057220459 - theta: -1.83189221851 - accumulated_s: 26.98597220664 -} -adc_trajectory_point { - x: -131.302179486 - y: 338.756936416 - z: -31.302163193 - - speed: 3.68888878822 - acceleration_s: 0.105572172671 - curvature: 0.000612396831201 - curvature_change_rate: -0.0010375721786 +} +trajectory_point { + path_point { + x: -131.302179486 + y: 338.756936416 + z: -31.302163193 + theta: -1.83189221851 + kappa: 0.000612396831201 + s: 27.02286109444 + dkappa: -0.0010375721786 + } + v: 3.68888878822 + a: 0.105572172671 relative_time: 8.440000057220459 - theta: -1.83189221851 - accumulated_s: 27.02286109444 -} -adc_trajectory_point { - x: -131.321386084 - y: 338.684148733 - z: -31.3023956306 - - speed: 3.68888878822 - acceleration_s: 0.0708134451255 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.321386084 + y: 338.684148733 + z: -31.3023956306 + theta: -1.83197773929 + kappa: 0.000612396831201 + s: 27.05974998234 + dkappa: 0 + } + v: 3.68888878822 + a: 0.0708134451255 relative_time: 8.4600000381469727 - theta: -1.83197773929 - accumulated_s: 27.05974998234 -} -adc_trajectory_point { - x: -131.330996058 - y: 338.647753089 - z: -31.3024842339 - - speed: 3.68888878822 - acceleration_s: 0.0391873945295 - curvature: 0.000612396831201 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.330996058 + y: 338.647753089 + z: -31.3024842339 + theta: -1.83205288131 + kappa: 0.000612396831201 + s: 27.09663887024 + dkappa: 0 + } + v: 3.68888878822 + a: 0.0391873945295 relative_time: 8.47000002861023 - theta: -1.83205288131 - accumulated_s: 27.09663887024 -} -adc_trajectory_point { - x: -131.340587888 - y: 338.611329648 - z: -31.3024761761 - - speed: 3.69166660309 - acceleration_s: 0.107011650936 - curvature: 0.000574121962009 - curvature_change_rate: -0.00103679105692 +} +trajectory_point { + path_point { + x: -131.340587888 + y: 338.611329648 + z: -31.3024761761 + theta: -1.83209904554 + kappa: 0.000574121962009 + s: 27.13355553624 + dkappa: -0.00103679105692 + } + v: 3.69166660309 + a: 0.107011650936 relative_time: 8.4800000190734863 - theta: -1.83209904554 - accumulated_s: 27.13355553624 -} -adc_trajectory_point { - x: -131.350157567 - y: 338.574925673 - z: -31.3025584891 - - speed: 3.69166660309 - acceleration_s: -0.034284269404 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.350157567 + y: 338.574925673 + z: -31.3025584891 + theta: -1.83216386153 + kappa: 0.000574121962009 + s: 27.17047220234 + dkappa: 0 + } + v: 3.69166660309 + a: -0.034284269404 relative_time: 8.4900000095367432 - theta: -1.83216386153 - accumulated_s: 27.17047220234 -} -adc_trajectory_point { - x: -131.359719855 - y: 338.538482962 - z: -31.3025128227 - - speed: 3.69444441795 - acceleration_s: 0.118293462844 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.359719855 + y: 338.538482962 + z: -31.3025128227 + theta: -1.83218950412 + kappa: 0.000574121962009 + s: 27.20741664644 + dkappa: 0 + } + v: 3.69444441795 + a: 0.118293462844 relative_time: 8.5 - theta: -1.83218950412 - accumulated_s: 27.20741664644 -} -adc_trajectory_point { - x: -131.369269317 - y: 338.502063949 - z: -31.3025091486 - - speed: 3.69444441795 - acceleration_s: 0.0124151792347 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.369269317 + y: 338.502063949 + z: -31.3025091486 + theta: -1.83223507413 + kappa: 0.000574121962009 + s: 27.24436109064 + dkappa: 0 + } + v: 3.69444441795 + a: 0.0124151792347 relative_time: 8.5099999904632568 - theta: -1.83223507413 - accumulated_s: 27.24436109064 -} -adc_trajectory_point { - x: -131.378789178 - y: 338.465620489 - z: -31.302387909 - - speed: 3.69722223282 - acceleration_s: 0.029718293086 - curvature: 0.00053584710648 - curvature_change_rate: -0.00103523275364 +} +trajectory_point { + path_point { + x: -131.378789178 + y: 338.465620489 + z: -31.302387909 + theta: -1.83225507449 + kappa: 0.00053584710648 + s: 27.28133331304 + dkappa: -0.00103523275364 + } + v: 3.69722223282 + a: 0.029718293086 relative_time: 8.5199999809265137 - theta: -1.83225507449 - accumulated_s: 27.28133331304 -} -adc_trajectory_point { - x: -131.388316753 - y: 338.429162972 - z: -31.3022825252 - - speed: 3.69722223282 - acceleration_s: 0.12692532821 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.388316753 + y: 338.429162972 + z: -31.3022825252 + theta: -1.8322771072 + kappa: 0.00053584710648 + s: 27.31830553534 + dkappa: 0 + } + v: 3.69722223282 + a: 0.12692532821 relative_time: 8.52999997138977 - theta: -1.8322771072 - accumulated_s: 27.31830553534 -} -adc_trajectory_point { - x: -131.397823933 - y: 338.392724876 - z: -31.3021739516 - - speed: 3.69722223282 - acceleration_s: -0.00662109430063 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.397823933 + y: 338.392724876 + z: -31.3021739516 + theta: -1.832332708 + kappa: 0.00053584710648 + s: 27.35527775764 + dkappa: 0 + } + v: 3.69722223282 + a: -0.00662109430063 relative_time: 8.5399999618530273 - theta: -1.832332708 - accumulated_s: 27.35527775764 -} -adc_trajectory_point { - x: -131.407388895 - y: 338.356264182 - z: -31.3019151967 - - speed: 3.69722223282 - acceleration_s: -0.00662109430063 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.407388895 + y: 338.356264182 + z: -31.3019151967 + theta: -1.83237843888 + kappa: 0.00053584710648 + s: 27.39224997994 + dkappa: 0 + } + v: 3.69722223282 + a: -0.00662109430063 relative_time: 8.5499999523162842 - theta: -1.83237843888 - accumulated_s: 27.39224997994 -} -adc_trajectory_point { - x: -131.416904285 - y: 338.31981783 - z: -31.3017598446 - - speed: 3.69722223282 - acceleration_s: -0.00236487887047 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.416904285 + y: 338.31981783 + z: -31.3017598446 + theta: -1.83241540315 + kappa: 0.00053584710648 + s: 27.42922220234 + dkappa: 0 + } + v: 3.69722223282 + a: -0.00236487887047 relative_time: 8.559999942779541 - theta: -1.83241540315 - accumulated_s: 27.42922220234 -} -adc_trajectory_point { - x: -131.426426575 - y: 338.283351957 - z: -31.3013430377 - - speed: 3.70000004768 - acceleration_s: 0.028371706438 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.426426575 + y: 338.283351957 + z: -31.3013430377 + theta: -1.83241878261 + kappa: 0.00053584710648 + s: 27.46622220274 + dkappa: 0 + } + v: 3.70000004768 + a: 0.028371706438 relative_time: 8.5699999332427979 - theta: -1.83241878261 - accumulated_s: 27.46622220274 -} -adc_trajectory_point { - x: -131.43595991 - y: 338.246907871 - z: -31.3009619135 - - speed: 3.70000004768 - acceleration_s: -0.0127730491426 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.43595991 + y: 338.246907871 + z: -31.3009619135 + theta: -1.83243947028 + kappa: 0.00053584710648 + s: 27.50322220324 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0127730491426 relative_time: 8.5800001621246338 - theta: -1.83243947028 - accumulated_s: 27.50322220324 -} -adc_trajectory_point { - x: -131.445479111 - y: 338.210474133 - z: -31.3006140888 - - speed: 3.70000004768 - acceleration_s: -0.070433993924 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.445479111 + y: 338.210474133 + z: -31.3006140888 + theta: -1.8324544003 + kappa: 0.00053584710648 + s: 27.54022220374 + dkappa: 0 + } + v: 3.70000004768 + a: -0.070433993924 relative_time: 8.59000015258789 - theta: -1.8324544003 - accumulated_s: 27.54022220374 -} -adc_trajectory_point { - x: -131.45503387 - y: 338.17403338 - z: -31.3001018483 - - speed: 3.70000004768 - acceleration_s: -0.070433993924 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.45503387 + y: 338.17403338 + z: -31.3001018483 + theta: -1.83249050491 + kappa: 0.00053584710648 + s: 27.57722220424 + dkappa: 0 + } + v: 3.70000004768 + a: -0.070433993924 relative_time: 8.6000001430511475 - theta: -1.83249050491 - accumulated_s: 27.57722220424 -} -adc_trajectory_point { - x: -131.464535186 - y: 338.137613357 - z: -31.2997517921 - - speed: 3.70000004768 - acceleration_s: -0.0880824898025 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.464535186 + y: 338.137613357 + z: -31.2997517921 + theta: -1.8324624664 + kappa: 0.00053584710648 + s: 27.61422220464 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0880824898025 relative_time: 8.6100001335144043 - theta: -1.8324624664 - accumulated_s: 27.61422220464 -} -adc_trajectory_point { - x: -131.474127088 - y: 338.101154263 - z: -31.2990875654 - - speed: 3.70000004768 - acceleration_s: 0.149555047142 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.474127088 + y: 338.101154263 + z: -31.2990875654 + theta: -1.83250666476 + kappa: 0.00053584710648 + s: 27.65122220514 + dkappa: 0 + } + v: 3.70000004768 + a: 0.149555047142 relative_time: 8.6200001239776611 - theta: -1.83250666476 - accumulated_s: 27.65122220514 -} -adc_trajectory_point { - x: -131.483683473 - y: 338.064741751 - z: -31.2987857442 - - speed: 3.70000004768 - acceleration_s: 0.011688433096 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.483683473 + y: 338.064741751 + z: -31.2987857442 + theta: -1.83251654948 + kappa: 0.00053584710648 + s: 27.68822220564 + dkappa: 0 + } + v: 3.70000004768 + a: 0.011688433096 relative_time: 8.630000114440918 - theta: -1.83251654948 - accumulated_s: 27.68822220564 -} -adc_trajectory_point { - x: -131.493265877 - y: 338.028255166 - z: -31.2981409179 - - speed: 3.70000004768 - acceleration_s: 0.239190739268 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.493265877 + y: 338.028255166 + z: -31.2981409179 + theta: -1.83249716564 + kappa: 0.00053584710648 + s: 27.72522220614 + dkappa: 0 + } + v: 3.70000004768 + a: 0.239190739268 relative_time: 8.6400001049041748 - theta: -1.83249716564 - accumulated_s: 27.72522220614 -} -adc_trajectory_point { - x: -131.502857738 - y: 337.991810233 - z: -31.2977487864 - - speed: 3.70000004768 - acceleration_s: 0.0734298613112 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.502857738 + y: 337.991810233 + z: -31.2977487864 + theta: -1.83251383764 + kappa: 0.00053584710648 + s: 27.76222220664 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0734298613112 relative_time: 8.6500000953674316 - theta: -1.83251383764 - accumulated_s: 27.76222220664 -} -adc_trajectory_point { - x: -131.512487687 - y: 337.955330837 - z: -31.2971710358 - - speed: 3.70277786255 - acceleration_s: 0.140154603522 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.512487687 + y: 337.955330837 + z: -31.2971710358 + theta: -1.8325214378 + kappa: 0.00053584710648 + s: 27.79924998524 + dkappa: 0 + } + v: 3.70277786255 + a: 0.140154603522 relative_time: 8.6600000858306885 - theta: -1.8325214378 - accumulated_s: 27.79924998524 -} -adc_trajectory_point { - x: -131.522087455 - y: 337.918846195 - z: -31.2967666406 - - speed: 3.70277786255 - acceleration_s: 0.127838432431 - curvature: 0.000574121962009 - curvature_change_rate: 0.0010336794955 +} +trajectory_point { + path_point { + x: -131.522087455 + y: 337.918846195 + z: -31.2967666406 + theta: -1.83249570734 + kappa: 0.000574121962009 + s: 27.83627776384 + dkappa: 0.0010336794955 + } + v: 3.70277786255 + a: 0.127838432431 relative_time: 8.6700000762939453 - theta: -1.83249570734 - accumulated_s: 27.83627776384 -} -adc_trajectory_point { - x: -131.531708209 - y: 337.882377424 - z: -31.2963586831 - - speed: 3.70277786255 - acceleration_s: 0.0684593042975 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.531708209 + y: 337.882377424 + z: -31.2963586831 + theta: -1.83247814077 + kappa: 0.000574121962009 + s: 27.87330554244 + dkappa: 0 + } + v: 3.70277786255 + a: 0.0684593042975 relative_time: 8.6800000667572021 - theta: -1.83247814077 - accumulated_s: 27.87330554244 -} -adc_trajectory_point { - x: -131.541360228 - y: 337.845861763 - z: -31.2958159689 - - speed: 3.70277786255 - acceleration_s: 0.156014190983 - curvature: 0.00053584710648 - curvature_change_rate: -0.0010336794955 +} +trajectory_point { + path_point { + x: -131.541360228 + y: 337.845861763 + z: -31.2958159689 + theta: -1.8324976108 + kappa: 0.00053584710648 + s: 27.91033332114 + dkappa: -0.0010336794955 + } + v: 3.70277786255 + a: 0.156014190983 relative_time: 8.690000057220459 - theta: -1.8324976108 - accumulated_s: 27.91033332114 -} -adc_trajectory_point { - x: -131.541360228 - y: 337.845861763 - z: -31.2958159689 - - speed: 3.70277786255 - acceleration_s: 0.156014190983 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.541360228 + y: 337.845861763 + z: -31.2958159689 + theta: -1.8324976108 + kappa: 0.00053584710648 + s: 27.94736109974 + dkappa: 0 + } + v: 3.70277786255 + a: 0.156014190983 relative_time: 8.690000057220459 - theta: -1.8324976108 - accumulated_s: 27.94736109974 -} -adc_trajectory_point { - x: -131.560649886 - y: 337.772871413 - z: -31.2949329298 - - speed: 3.70277786255 - acceleration_s: 0.109487997078 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.560649886 + y: 337.772871413 + z: -31.2949329298 + theta: -1.83254384308 + kappa: 0.00053584710648 + s: 27.98438887834 + dkappa: 0 + } + v: 3.70277786255 + a: 0.109487997078 relative_time: 8.7100000381469727 - theta: -1.83254384308 - accumulated_s: 27.98438887834 -} -adc_trajectory_point { - x: -131.57027568 - y: 337.736368343 - z: -31.294543298 - - speed: 3.70277786255 - acceleration_s: 0.000564899935024 - curvature: 0.000574121962009 - curvature_change_rate: 0.0010336794955 +} +trajectory_point { + path_point { + x: -131.57027568 + y: 337.736368343 + z: -31.294543298 + theta: -1.83256203208 + kappa: 0.000574121962009 + s: 28.02141665694 + dkappa: 0.0010336794955 + } + v: 3.70277786255 + a: 0.000564899935024 relative_time: 8.72000002861023 - theta: -1.83256203208 - accumulated_s: 28.02141665694 -} -adc_trajectory_point { - x: -131.579923332 - y: 337.699868223 - z: -31.2941764966 - - speed: 3.70277786255 - acceleration_s: -0.0411097084191 - curvature: 0.000574121962009 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.579923332 + y: 337.699868223 + z: -31.2941764966 + theta: -1.83255273706 + kappa: 0.000574121962009 + s: 28.05844443564 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0411097084191 relative_time: 8.7300000190734863 - theta: -1.83255273706 - accumulated_s: 28.05844443564 -} -adc_trajectory_point { - x: -131.589561521 - y: 337.663334655 - z: -31.2937997337 - - speed: 3.70277786255 - acceleration_s: 0.123581769938 - curvature: 0.00053584710648 - curvature_change_rate: -0.0010336794955 +} +trajectory_point { + path_point { + x: -131.589561521 + y: 337.663334655 + z: -31.2937997337 + theta: -1.83257555353 + kappa: 0.00053584710648 + s: 28.09547221424 + dkappa: -0.0010336794955 + } + v: 3.70277786255 + a: 0.123581769938 relative_time: 8.7400000095367432 - theta: -1.83257555353 - accumulated_s: 28.09547221424 -} -adc_trajectory_point { - x: -131.599202071 - y: 337.626824712 - z: -31.2934148507 - - speed: 3.70277786255 - acceleration_s: -0.0121917363633 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.599202071 + y: 337.626824712 + z: -31.2934148507 + theta: -1.83259350435 + kappa: 0.00053584710648 + s: 28.13249999284 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0121917363633 relative_time: 8.75 - theta: -1.83259350435 - accumulated_s: 28.13249999284 -} -adc_trajectory_point { - x: -131.599202071 - y: 337.626824712 - z: -31.2934148507 - - speed: 3.70833325386 - acceleration_s: -0.0121917363633 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.599202071 + y: 337.626824712 + z: -31.2934148507 + theta: -1.83259350435 + kappa: 0.00053584710648 + s: 28.16958332534 + dkappa: 0 + } + v: 3.70833325386 + a: -0.0121917363633 relative_time: 8.75 - theta: -1.83259350435 - accumulated_s: 28.16958332534 -} -adc_trajectory_point { - x: -131.618780157 - y: 337.553650134 - z: -31.2927733092 - - speed: 3.70833325386 - acceleration_s: -0.0725997921008 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.618780157 + y: 337.553650134 + z: -31.2927733092 + theta: -1.83274640646 + kappa: 0.00053584710648 + s: 28.20666665794 + dkappa: 0 + } + v: 3.70833325386 + a: -0.0725997921008 relative_time: 8.7699999809265137 - theta: -1.83274640646 - accumulated_s: 28.20666665794 -} -adc_trajectory_point { - x: -131.628765907 - y: 337.517272111 - z: -31.2922379617 - - speed: 3.705555439 - acceleration_s: 0.075737330826 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.628765907 + y: 337.517272111 + z: -31.2922379617 + theta: -1.83272447243 + kappa: 0.00053584710648 + s: 28.24372221234 + dkappa: 0 + } + v: 3.705555439 + a: 0.075737330826 relative_time: 8.77999997138977 - theta: -1.83272447243 - accumulated_s: 28.24372221234 -} -adc_trajectory_point { - x: -131.638740986 - y: 337.480956091 - z: -31.2919738125 - - speed: 3.705555439 - acceleration_s: -0.0937081855589 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.638740986 + y: 337.480956091 + z: -31.2919738125 + theta: -1.83276958518 + kappa: 0.00053584710648 + s: 28.28077776674 + dkappa: 0 + } + v: 3.705555439 + a: -0.0937081855589 relative_time: 8.7899999618530273 - theta: -1.83276958518 - accumulated_s: 28.28077776674 -} -adc_trajectory_point { - x: -131.648704064 - y: 337.444586733 - z: -31.2914515454 - - speed: 3.70277786255 - acceleration_s: -0.0937081855589 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.648704064 + y: 337.444586733 + z: -31.2914515454 + theta: -1.83275636361 + kappa: 0.00053584710648 + s: 28.31780554534 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0937081855589 relative_time: 8.7999999523162842 - theta: -1.83275636361 - accumulated_s: 28.31780554534 -} -adc_trajectory_point { - x: -131.658705585 - y: 337.408247923 - z: -31.2911516726 - - speed: 3.70277786255 - acceleration_s: 0.0681437019346 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.658705585 + y: 337.408247923 + z: -31.2911516726 + theta: -1.83281612598 + kappa: 0.00053584710648 + s: 28.35483332394 + dkappa: 0 + } + v: 3.70277786255 + a: 0.0681437019346 relative_time: 8.809999942779541 - theta: -1.83281612598 - accumulated_s: 28.35483332394 -} -adc_trajectory_point { - x: -131.668661222 - y: 337.371907279 - z: -31.2907408178 - - speed: 3.70277786255 - acceleration_s: -0.099527039029 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.668661222 + y: 337.371907279 + z: -31.2907408178 + theta: -1.83281894125 + kappa: 0.00053584710648 + s: 28.39186110254 + dkappa: 0 + } + v: 3.70277786255 + a: -0.099527039029 relative_time: 8.8199999332427979 - theta: -1.83281894125 - accumulated_s: 28.39186110254 -} -adc_trajectory_point { - x: -131.678659342 - y: 337.335557915 - z: -31.2902631406 - - speed: 3.70277786255 - acceleration_s: 0.0890027687472 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.678659342 + y: 337.335557915 + z: -31.2902631406 + theta: -1.83288298567 + kappa: 0.00053584710648 + s: 28.42888888124 + dkappa: 0 + } + v: 3.70277786255 + a: 0.0890027687472 relative_time: 8.8300001621246338 - theta: -1.83288298567 - accumulated_s: 28.42888888124 -} -adc_trajectory_point { - x: -131.688624377 - y: 337.299222625 - z: -31.2899421751 - - speed: 3.70000004768 - acceleration_s: -0.137580611445 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.688624377 + y: 337.299222625 + z: -31.2899421751 + theta: -1.83291704751 + kappa: 0.00053584710648 + s: 28.46588888164 + dkappa: 0 + } + v: 3.70000004768 + a: -0.137580611445 relative_time: 8.84000015258789 - theta: -1.83291704751 - accumulated_s: 28.46588888164 -} -adc_trajectory_point { - x: -131.688624377 - y: 337.299222625 - z: -31.2899421751 - - speed: 3.70000004768 - acceleration_s: -0.137580611445 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.688624377 + y: 337.299222625 + z: -31.2899421751 + theta: -1.83291704751 + kappa: 0.00053584710648 + s: 28.50288888214 + dkappa: 0 + } + v: 3.70000004768 + a: -0.137580611445 relative_time: 8.84000015258789 - theta: -1.83291704751 - accumulated_s: 28.50288888214 -} -adc_trajectory_point { - x: -131.708531599 - y: 337.226494257 - z: -31.2892645588 - - speed: 3.70000004768 - acceleration_s: 0.0396054650685 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.708531599 + y: 337.226494257 + z: -31.2892645588 + theta: -1.83296999317 + kappa: 0.00053584710648 + s: 28.53988888264 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0396054650685 relative_time: 8.8600001335144043 - theta: -1.83296999317 - accumulated_s: 28.53988888264 -} -adc_trajectory_point { - x: -131.718479872 - y: 337.190087374 - z: -31.2888366133 - - speed: 3.70000004768 - acceleration_s: 0.180401379397 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.718479872 + y: 337.190087374 + z: -31.2888366133 + theta: -1.83298946318 + kappa: 0.00053584710648 + s: 28.57688888314 + dkappa: 0 + } + v: 3.70000004768 + a: 0.180401379397 relative_time: 8.8700001239776611 - theta: -1.83298946318 - accumulated_s: 28.57688888314 -} -adc_trajectory_point { - x: -131.72839872 - y: 337.153695671 - z: -31.2885086285 - - speed: 3.70000004768 - acceleration_s: 0.0836099026704 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.72839872 + y: 337.153695671 + z: -31.2885086285 + theta: -1.8330274929 + kappa: 0.00053584710648 + s: 28.61388888364 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0836099026704 relative_time: 8.880000114440918 - theta: -1.8330274929 - accumulated_s: 28.61388888364 -} -adc_trajectory_point { - x: -131.738315366 - y: 337.117265071 - z: -31.2881116476 - - speed: 3.70000004768 - acceleration_s: 0.135979254009 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.738315366 + y: 337.117265071 + z: -31.2881116476 + theta: -1.83304124774 + kappa: 0.00053584710648 + s: 28.65088888404 + dkappa: 0 + } + v: 3.70000004768 + a: 0.135979254009 relative_time: 8.8900001049041748 - theta: -1.83304124774 - accumulated_s: 28.65088888404 -} -adc_trajectory_point { - x: -131.748245639 - y: 337.080881606 - z: -31.2878572233 - - speed: 3.70277786255 - acceleration_s: 0.135979254009 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.748245639 + y: 337.080881606 + z: -31.2878572233 + theta: -1.83309087791 + kappa: 0.00053584710648 + s: 28.68791666274 + dkappa: 0 + } + v: 3.70277786255 + a: 0.135979254009 relative_time: 8.9000000953674316 - theta: -1.83309087791 - accumulated_s: 28.68791666274 -} -adc_trajectory_point { - x: -131.758150354 - y: 337.044486814 - z: -31.2875475967 - - speed: 3.70277786255 - acceleration_s: -0.0505321742459 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.758150354 + y: 337.044486814 + z: -31.2875475967 + theta: -1.83310802566 + kappa: 0.00053584710648 + s: 28.72494444134 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0505321742459 relative_time: 8.9100000858306885 - theta: -1.83310802566 - accumulated_s: 28.72494444134 -} -adc_trajectory_point { - x: -131.768059188 - y: 337.008108499 - z: -31.2871869998 - - speed: 3.70277786255 - acceleration_s: -0.131845749929 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.768059188 + y: 337.008108499 + z: -31.2871869998 + theta: -1.833123165 + kappa: 0.00053584710648 + s: 28.76197221994 + dkappa: 0 + } + v: 3.70277786255 + a: -0.131845749929 relative_time: 8.9200000762939453 - theta: -1.833123165 - accumulated_s: 28.76197221994 -} -adc_trajectory_point { - x: -131.777970007 - y: 336.971717349 - z: -31.286901297 - - speed: 3.70277786255 - acceleration_s: -0.0451045930258 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.777970007 + y: 336.971717349 + z: -31.286901297 + theta: -1.83313277831 + kappa: 0.00053584710648 + s: 28.79899999854 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0451045930258 relative_time: 8.9300000667572021 - theta: -1.83313277831 - accumulated_s: 28.79899999854 -} -adc_trajectory_point { - x: -131.787917428 - y: 336.935312594 - z: -31.2865524534 - - speed: 3.70000004768 - acceleration_s: 0.127624506135 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.787917428 + y: 336.935312594 + z: -31.2865524534 + theta: -1.83316101704 + kappa: 0.00053584710648 + s: 28.83599999904 + dkappa: 0 + } + v: 3.70000004768 + a: 0.127624506135 relative_time: 8.940000057220459 - theta: -1.83316101704 - accumulated_s: 28.83599999904 -} -adc_trajectory_point { - x: -131.787917428 - y: 336.935312594 - z: -31.2865524534 - - speed: 3.70000004768 - acceleration_s: 0.127624506135 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.787917428 + y: 336.935312594 + z: -31.2865524534 + theta: -1.83316101704 + kappa: 0.00053584710648 + s: 28.87299999954 + dkappa: 0 + } + v: 3.70000004768 + a: 0.127624506135 relative_time: 8.940000057220459 - theta: -1.83316101704 - accumulated_s: 28.87299999954 -} -adc_trajectory_point { - x: -131.807778545 - y: 336.862541381 - z: -31.2859327458 - - speed: 3.70277786255 - acceleration_s: 0.0238426907985 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.807778545 + y: 336.862541381 + z: -31.2859327458 + theta: -1.83316117339 + kappa: 0.00053584710648 + s: 28.91002777814 + dkappa: 0 + } + v: 3.70277786255 + a: 0.0238426907985 relative_time: 8.9600000381469727 - theta: -1.83316117339 - accumulated_s: 28.91002777814 -} -adc_trajectory_point { - x: -131.81775047 - y: 336.826192022 - z: -31.285672551 - - speed: 3.70277786255 - acceleration_s: -0.0975240029295 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.81775047 + y: 336.826192022 + z: -31.285672551 + theta: -1.83319875823 + kappa: 0.00053584710648 + s: 28.94705555674 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0975240029295 relative_time: 8.97000002861023 - theta: -1.83319875823 - accumulated_s: 28.94705555674 -} -adc_trajectory_point { - x: -131.827726885 - y: 336.789829578 - z: -31.2853520252 - - speed: 3.70277786255 - acceleration_s: -0.0257528220648 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.827726885 + y: 336.789829578 + z: -31.2853520252 + theta: -1.83318785812 + kappa: 0.00053584710648 + s: 28.98408333544 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0257528220648 relative_time: 8.9800000190734863 - theta: -1.83318785812 - accumulated_s: 28.98408333544 -} -adc_trajectory_point { - x: -131.837727948 - y: 336.753476516 - z: -31.2850953396 - - speed: 3.70277786255 - acceleration_s: -0.0293263028318 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.837727948 + y: 336.753476516 + z: -31.2850953396 + theta: -1.83316666831 + kappa: 0.00053584710648 + s: 29.02111111404 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0293263028318 relative_time: 8.9900000095367432 - theta: -1.83316666831 - accumulated_s: 29.02111111404 -} -adc_trajectory_point { - x: -131.837727948 - y: 336.753476516 - z: -31.2850953396 - - speed: 3.70277786255 - acceleration_s: -0.0293263028318 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.837727948 + y: 336.753476516 + z: -31.2850953396 + theta: -1.83316666831 + kappa: 0.00053584710648 + s: 29.05813889264 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0293263028318 relative_time: 8.9900000095367432 - theta: -1.83316666831 - accumulated_s: 29.05813889264 -} -adc_trajectory_point { - x: -131.857789913 - y: 336.680795797 - z: -31.2844986888 - - speed: 3.70277786255 - acceleration_s: -0.0859159215394 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.857789913 + y: 336.680795797 + z: -31.2844986888 + theta: -1.8331442283 + kappa: 0.00053584710648 + s: 29.09516667124 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0859159215394 relative_time: 9.0099999904632568 - theta: -1.8331442283 - accumulated_s: 29.09516667124 -} -adc_trajectory_point { - x: -131.867858279 - y: 336.644447226 - z: -31.2842541337 - - speed: 3.70000004768 - acceleration_s: 0.0688763261144 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.867858279 + y: 336.644447226 + z: -31.2842541337 + theta: -1.83314503834 + kappa: 0.00053584710648 + s: 29.13216667174 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0688763261144 relative_time: 9.0199999809265137 - theta: -1.83314503834 - accumulated_s: 29.13216667174 -} -adc_trajectory_point { - x: -131.877926522 - y: 336.608126829 - z: -31.2838689461 - - speed: 3.70000004768 - acceleration_s: -0.0674539453227 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.877926522 + y: 336.608126829 + z: -31.2838689461 + theta: -1.83312264266 + kappa: 0.00053584710648 + s: 29.16916667224 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0674539453227 relative_time: 9.02999997138977 - theta: -1.83312264266 - accumulated_s: 29.16916667224 -} -adc_trajectory_point { - x: -131.888045007 - y: 336.571811491 - z: -31.2836882854 - - speed: 3.70000004768 - acceleration_s: 0.0021468945572 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.888045007 + y: 336.571811491 + z: -31.2836882854 + theta: -1.83312505396 + kappa: 0.00053584710648 + s: 29.20616667274 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0021468945572 relative_time: 9.0399999618530273 - theta: -1.83312505396 - accumulated_s: 29.20616667274 -} -adc_trajectory_point { - x: -131.898139316 - y: 336.53546611 - z: -31.2834078707 - - speed: 3.70000004768 - acceleration_s: 0.0893199435897 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.898139316 + y: 336.53546611 + z: -31.2834078707 + theta: -1.83311317301 + kappa: 0.00053584710648 + s: 29.24316667314 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0893199435897 relative_time: 9.0499999523162842 - theta: -1.83311317301 - accumulated_s: 29.24316667314 -} -adc_trajectory_point { - x: -131.908238826 - y: 336.499157166 - z: -31.2832412831 - - speed: 3.70277786255 - acceleration_s: -0.0335673719355 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.908238826 + y: 336.499157166 + z: -31.2832412831 + theta: -1.83313955653 + kappa: 0.00053584710648 + s: 29.28019445184 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0335673719355 relative_time: 9.059999942779541 - theta: -1.83313955653 - accumulated_s: 29.28019445184 -} -adc_trajectory_point { - x: -131.918309583 - y: 336.462810372 - z: -31.282883063 - - speed: 3.70277786255 - acceleration_s: -0.0254764834384 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.918309583 + y: 336.462810372 + z: -31.282883063 + theta: -1.83309929172 + kappa: 0.00053584710648 + s: 29.31722223044 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0254764834384 relative_time: 9.0699999332427979 - theta: -1.83309929172 - accumulated_s: 29.31722223044 -} -adc_trajectory_point { - x: -131.928360849 - y: 336.426486092 - z: -31.2826836845 - - speed: 3.70277786255 - acceleration_s: -0.0254764834384 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.928360849 + y: 336.426486092 + z: -31.2826836845 + theta: -1.83311098593 + kappa: 0.00053584710648 + s: 29.35425000904 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0254764834384 relative_time: 9.0800001621246338 - theta: -1.83311098593 - accumulated_s: 29.35425000904 -} -adc_trajectory_point { - x: -131.938423434 - y: 336.390161578 - z: -31.2824502764 - - speed: 3.70277786255 - acceleration_s: -0.0668495592853 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.938423434 + y: 336.390161578 + z: -31.2824502764 + theta: -1.83314376077 + kappa: 0.00053584710648 + s: 29.39127778764 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0668495592853 relative_time: 9.09000015258789 - theta: -1.83314376077 - accumulated_s: 29.39127778764 -} -adc_trajectory_point { - x: -131.938423434 - y: 336.390161578 - z: -31.2824502764 - - speed: 3.70000004768 - acceleration_s: -0.0668495592853 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.938423434 + y: 336.390161578 + z: -31.2824502764 + theta: -1.83314376077 + kappa: 0.00053584710648 + s: 29.42827778814 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0668495592853 relative_time: 9.09000015258789 - theta: -1.83314376077 - accumulated_s: 29.42827778814 -} -adc_trajectory_point { - x: -131.958419922 - y: 336.317464015 - z: -31.2820673492 - - speed: 3.70000004768 - acceleration_s: 0.0778040294489 - curvature: 0.00053584710648 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.958419922 + y: 336.317464015 + z: -31.2820673492 + theta: -1.83315452385 + kappa: 0.00053584710648 + s: 29.46527778864 + dkappa: 0 + } + v: 3.70000004768 + a: 0.0778040294489 relative_time: 9.1100001335144043 - theta: -1.83315452385 - accumulated_s: 29.46527778864 -} -adc_trajectory_point { - x: -131.968373492 - y: 336.28110898 - z: -31.2818031767 - - speed: 3.69722223282 - acceleration_s: 0.00340458911614 - curvature: 0.000497572263703 - curvature_change_rate: -0.00103523240872 +} +trajectory_point { + path_point { + x: -131.968373492 + y: 336.28110898 + z: -31.2818031767 + theta: -1.83314264465 + kappa: 0.000497572263703 + s: 29.50225001094 + dkappa: -0.00103523240872 + } + v: 3.69722223282 + a: 0.00340458911614 relative_time: 9.1200001239776611 - theta: -1.83314264465 - accumulated_s: 29.50225001094 -} -adc_trajectory_point { - x: -131.978316981 - y: 336.244732181 - z: -31.2816065559 - - speed: 3.69722223282 - acceleration_s: 0.0857427683471 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.978316981 + y: 336.244732181 + z: -31.2816065559 + theta: -1.83313270365 + kappa: 0.000497572263703 + s: 29.53922223334 + dkappa: 0 + } + v: 3.69722223282 + a: 0.0857427683471 relative_time: 9.130000114440918 - theta: -1.83313270365 - accumulated_s: 29.53922223334 -} -adc_trajectory_point { - x: -131.988291681 - y: 336.208387714 - z: -31.2813490098 - - speed: 3.69722223282 - acceleration_s: -0.0700423239248 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.988291681 + y: 336.208387714 + z: -31.2813490098 + theta: -1.83319844934 + kappa: 0.000497572263703 + s: 29.57619445564 + dkappa: 0 + } + v: 3.69722223282 + a: -0.0700423239248 relative_time: 9.1400001049041748 - theta: -1.83319844934 - accumulated_s: 29.57619445564 -} -adc_trajectory_point { - x: -131.998212134 - y: 336.17206633 - z: -31.2812162284 - - speed: 3.69722223282 - acceleration_s: -0.0700423239248 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -131.998212134 + y: 336.17206633 + z: -31.2812162284 + theta: -1.83323643575 + kappa: 0.000497572263703 + s: 29.61316667794 + dkappa: 0 + } + v: 3.69722223282 + a: -0.0700423239248 relative_time: 9.1500000953674316 - theta: -1.83323643575 - accumulated_s: 29.61316667794 -} -adc_trajectory_point { - x: -132.008181273 - y: 336.135707756 - z: -31.2809310397 - - speed: 3.70000004768 - acceleration_s: -0.0460476408749 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.008181273 + y: 336.135707756 + z: -31.2809310397 + theta: -1.83327856135 + kappa: 0.000497572263703 + s: 29.65016667844 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0460476408749 relative_time: 9.1600000858306885 - theta: -1.83327856135 - accumulated_s: 29.65016667844 -} -adc_trajectory_point { - x: -132.018130384 - y: 336.099390106 - z: -31.2807655167 - - speed: 3.70000004768 - acceleration_s: -0.115812291568 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.018130384 + y: 336.099390106 + z: -31.2807655167 + theta: -1.83331377557 + kappa: 0.000497572263703 + s: 29.68716667894 + dkappa: 0 + } + v: 3.70000004768 + a: -0.115812291568 relative_time: 9.1700000762939453 - theta: -1.83331377557 - accumulated_s: 29.68716667894 -} -adc_trajectory_point { - x: -132.028097214 - y: 336.063064907 - z: -31.2804642152 - - speed: 3.70000004768 - acceleration_s: -0.0634537214815 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.028097214 + y: 336.063064907 + z: -31.2804642152 + theta: -1.83333034688 + kappa: 0.000497572263703 + s: 29.72416667934 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0634537214815 relative_time: 9.1800000667572021 - theta: -1.83333034688 - accumulated_s: 29.72416667934 -} -adc_trajectory_point { - x: -132.038067381 - y: 336.026769643 - z: -31.2803229606 - - speed: 3.70000004768 - acceleration_s: -0.118376814908 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.038067381 + y: 336.026769643 + z: -31.2803229606 + theta: -1.83337965058 + kappa: 0.000497572263703 + s: 29.76116667984 + dkappa: 0 + } + v: 3.70000004768 + a: -0.118376814908 relative_time: 9.190000057220459 - theta: -1.83337965058 - accumulated_s: 29.76116667984 -} -adc_trajectory_point { - x: -132.038067381 - y: 336.026769643 - z: -31.2803229606 - - speed: 3.70000004768 - acceleration_s: -0.118376814908 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.038067381 + y: 336.026769643 + z: -31.2803229606 + theta: -1.83337965058 + kappa: 0.000497572263703 + s: 29.79816668034 + dkappa: 0 + } + v: 3.70000004768 + a: -0.118376814908 relative_time: 9.190000057220459 - theta: -1.83337965058 - accumulated_s: 29.79816668034 -} -adc_trajectory_point { - x: -132.057996965 - y: 335.954147235 - z: -31.2798358034 - - speed: 3.70000004768 - acceleration_s: -0.0808539505321 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.057996965 + y: 335.954147235 + z: -31.2798358034 + theta: -1.83335918303 + kappa: 0.000497572263703 + s: 29.83516668084 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0808539505321 relative_time: 9.2100000381469727 - theta: -1.83335918303 - accumulated_s: 29.83516668084 -} -adc_trajectory_point { - x: -132.068021459 - y: 335.917832418 - z: -31.2795281885 - - speed: 3.70277786255 - acceleration_s: 0.112236915771 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.068021459 + y: 335.917832418 + z: -31.2795281885 + theta: -1.83338053939 + kappa: 0.000497572263703 + s: 29.87219445944 + dkappa: 0 + } + v: 3.70277786255 + a: 0.112236915771 relative_time: 9.22000002861023 - theta: -1.83338053939 - accumulated_s: 29.87219445944 -} -adc_trajectory_point { - x: -132.077989439 - y: 335.881557276 - z: -31.2793505248 - - speed: 3.70277786255 - acceleration_s: -0.133367470484 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.077989439 + y: 335.881557276 + z: -31.2793505248 + theta: -1.83338886045 + kappa: 0.000497572263703 + s: 29.90922223804 + dkappa: 0 + } + v: 3.70277786255 + a: -0.133367470484 relative_time: 9.2300000190734863 - theta: -1.83338886045 - accumulated_s: 29.90922223804 -} -adc_trajectory_point { - x: -132.077989439 - y: 335.881557276 - z: -31.2793505248 - - speed: 3.705555439 - acceleration_s: -0.133367470484 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.077989439 + y: 335.881557276 + z: -31.2793505248 + theta: -1.83338886045 + kappa: 0.000497572263703 + s: 29.94627779244 + dkappa: 0 + } + v: 3.705555439 + a: -0.133367470484 relative_time: 9.2300000190734863 - theta: -1.83338886045 - accumulated_s: 29.94627779244 -} -adc_trajectory_point { - x: -132.097946774 - y: 335.808984003 - z: -31.2788987225 - - speed: 3.705555439 - acceleration_s: -0.0128794777785 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.097946774 + y: 335.808984003 + z: -31.2788987225 + theta: -1.83344914213 + kappa: 0.000497572263703 + s: 29.98333334684 + dkappa: 0 + } + v: 3.705555439 + a: -0.0128794777785 relative_time: 9.25 - theta: -1.83344914213 - accumulated_s: 29.98333334684 -} -adc_trajectory_point { - x: -132.107904573 - y: 335.772678861 - z: -31.2787367748 - - speed: 3.70833325386 - acceleration_s: 0.0281507078451 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.107904573 + y: 335.772678861 + z: -31.2787367748 + theta: -1.83344925793 + kappa: 0.000497572263703 + s: 30.02041667934 + dkappa: 0 + } + v: 3.70833325386 + a: 0.0281507078451 relative_time: 9.2599999904632568 - theta: -1.83344925793 - accumulated_s: 30.02041667934 -} -adc_trajectory_point { - x: -132.117859476 - y: 335.736392537 - z: -31.2785454029 - - speed: 3.70833325386 - acceleration_s: -0.0324692451399 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.117859476 + y: 335.736392537 + z: -31.2785454029 + theta: -1.83346644884 + kappa: 0.000497572263703 + s: 30.05750001194 + dkappa: 0 + } + v: 3.70833325386 + a: -0.0324692451399 relative_time: 9.2699999809265137 - theta: -1.83346644884 - accumulated_s: 30.05750001194 -} -adc_trajectory_point { - x: -132.127804151 - y: 335.700106117 - z: -31.2784009278 - - speed: 3.705555439 - acceleration_s: -0.0499122077425 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.127804151 + y: 335.700106117 + z: -31.2784009278 + theta: -1.83347854463 + kappa: 0.000497572263703 + s: 30.09455556634 + dkappa: 0 + } + v: 3.705555439 + a: -0.0499122077425 relative_time: 9.27999997138977 - theta: -1.83347854463 - accumulated_s: 30.09455556634 -} -adc_trajectory_point { - x: -132.13774501 - y: 335.663806691 - z: -31.2781876344 - - speed: 3.705555439 - acceleration_s: -0.0204625835762 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.13774501 + y: 335.663806691 + z: -31.2781876344 + theta: -1.83349770563 + kappa: 0.000497572263703 + s: 30.13161112074 + dkappa: 0 + } + v: 3.705555439 + a: -0.0204625835762 relative_time: 9.2899999618530273 - theta: -1.83349770563 - accumulated_s: 30.13161112074 -} -adc_trajectory_point { - x: -132.147647431 - y: 335.627528584 - z: -31.2781113992 - - speed: 3.70277786255 - acceleration_s: -0.0204625835762 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.147647431 + y: 335.627528584 + z: -31.2781113992 + theta: -1.83347794346 + kappa: 0.000497572263703 + s: 30.16863889934 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0204625835762 relative_time: 9.2999999523162842 - theta: -1.83347794346 - accumulated_s: 30.16863889934 -} -adc_trajectory_point { - x: -132.157598613 - y: 335.591221714 - z: -31.2779482659 - - speed: 3.70277786255 - acceleration_s: 0.0148677812372 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.157598613 + y: 335.591221714 + z: -31.2779482659 + theta: -1.83353368127 + kappa: 0.000497572263703 + s: 30.20566667794 + dkappa: 0 + } + v: 3.70277786255 + a: 0.0148677812372 relative_time: 9.309999942779541 - theta: -1.83353368127 - accumulated_s: 30.20566667794 -} -adc_trajectory_point { - x: -132.167486542 - y: 335.554938476 - z: -31.2779333852 - - speed: 3.70833325386 - acceleration_s: -0.0861770774704 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.167486542 + y: 335.554938476 + z: -31.2779333852 + theta: -1.83352248502 + kappa: 0.000497572263703 + s: 30.24275001054 + dkappa: 0 + } + v: 3.70833325386 + a: -0.0861770774704 relative_time: 9.3199999332427979 - theta: -1.83352248502 - accumulated_s: 30.24275001054 -} -adc_trajectory_point { - x: -132.177389065 - y: 335.518639297 - z: -31.2777470071 - - speed: 3.70833325386 - acceleration_s: -0.0108284926706 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.177389065 + y: 335.518639297 + z: -31.2777470071 + theta: -1.83352944732 + kappa: 0.000497572263703 + s: 30.27983334304 + dkappa: 0 + } + v: 3.70833325386 + a: -0.0108284926706 relative_time: 9.3300001621246338 - theta: -1.83352944732 - accumulated_s: 30.27983334304 -} -adc_trajectory_point { - x: -132.187282044 - y: 335.482382948 - z: -31.277702542 - - speed: 3.705555439 - acceleration_s: -0.170504335112 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.187282044 + y: 335.482382948 + z: -31.277702542 + theta: -1.8335351443 + kappa: 0.000497572263703 + s: 30.31688889744 + dkappa: 0 + } + v: 3.705555439 + a: -0.170504335112 relative_time: 9.34000015258789 - theta: -1.8335351443 - accumulated_s: 30.31688889744 -} -adc_trajectory_point { - x: -132.197146705 - y: 335.446071787 - z: -31.2775664376 - - speed: 3.705555439 - acceleration_s: 0.064874406577 - curvature: 0.000497572263703 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.197146705 + y: 335.446071787 + z: -31.2775664376 + theta: -1.83348356256 + kappa: 0.000497572263703 + s: 30.35394445184 + dkappa: 0 + } + v: 3.705555439 + a: 0.064874406577 relative_time: 9.3500001430511475 - theta: -1.83348356256 - accumulated_s: 30.35394445184 -} -adc_trajectory_point { - x: -132.2070435 - y: 335.409805434 - z: -31.2775769858 - - speed: 3.70277786255 - acceleration_s: 0.064874406577 - curvature: 0.000459297432768 - curvature_change_rate: -0.0010336788313 +} +trajectory_point { + path_point { + x: -132.2070435 + y: 335.409805434 + z: -31.2775769858 + theta: -1.8335215536 + kappa: 0.000459297432768 + s: 30.39097223044 + dkappa: -0.0010336788313 + } + v: 3.70277786255 + a: 0.064874406577 relative_time: 9.3600001335144043 - theta: -1.8335215536 - accumulated_s: 30.39097223044 -} -adc_trajectory_point { - x: -132.216949518 - y: 335.373541721 - z: -31.2774795797 - - speed: 3.70277786255 - acceleration_s: -0.0377638359669 - curvature: 0.000459297432768 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.216949518 + y: 335.373541721 + z: -31.2774795797 + theta: -1.83352852181 + kappa: 0.000459297432768 + s: 30.42800000904 + dkappa: 0 + } + v: 3.70277786255 + a: -0.0377638359669 relative_time: 9.3700001239776611 - theta: -1.83352852181 - accumulated_s: 30.42800000904 -} -adc_trajectory_point { - x: -132.226823516 - y: 335.337259561 - z: -31.2774208793 - - speed: 3.70000004768 - acceleration_s: -0.019376836181 - curvature: 0.000421022612763 - curvature_change_rate: -0.00103445458139 +} +trajectory_point { + path_point { + x: -132.226823516 + y: 335.337259561 + z: -31.2774208793 + theta: -1.83350958508 + kappa: 0.000421022612763 + s: 30.46500000954 + dkappa: -0.00103445458139 + } + v: 3.70000004768 + a: -0.019376836181 relative_time: 9.380000114440918 - theta: -1.83350958508 - accumulated_s: 30.46500000954 -} -adc_trajectory_point { - x: -132.236712689 - y: 335.301008906 - z: -31.2773537524 - - speed: 3.70000004768 - acceleration_s: -0.0714875758623 - curvature: 0.000421022612763 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.236712689 + y: 335.301008906 + z: -31.2773537524 + theta: -1.83349703975 + kappa: 0.000421022612763 + s: 30.50200001004 + dkappa: 0 + } + v: 3.70000004768 + a: -0.0714875758623 relative_time: 9.3900001049041748 - theta: -1.83349703975 - accumulated_s: 30.50200001004 -} -adc_trajectory_point { - x: -132.236712689 - y: 335.301008906 - z: -31.2773537524 - - speed: 3.69722223282 - acceleration_s: -0.0714875758623 - curvature: 0.000382747802778 - curvature_change_rate: -0.0010352315218 +} +trajectory_point { + path_point { + x: -132.236712689 + y: 335.301008906 + z: -31.2773537524 + theta: -1.83349703975 + kappa: 0.000382747802778 + s: 30.53897223234 + dkappa: -0.0010352315218 + } + v: 3.69722223282 + a: -0.0714875758623 relative_time: 9.3900001049041748 - theta: -1.83349703975 - accumulated_s: 30.53897223234 -} -adc_trajectory_point { - x: -132.256508384 - y: 335.228520503 - z: -31.2773318859 - - speed: 3.69722223282 - acceleration_s: -0.0320372389986 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.256508384 + y: 335.228520503 + z: -31.2773318859 + theta: -1.83347645423 + kappa: 0.000382747802778 + s: 30.575944454640002 + dkappa: 0 + } + v: 3.69722223282 + a: -0.0320372389986 relative_time: 9.4100000858306885 - theta: -1.83347645423 - accumulated_s: 30.575944454640002 -} -adc_trajectory_point { - x: -132.266447045 - y: 335.19228644 - z: -31.2772535691 - - speed: 3.69166660309 - acceleration_s: -0.0277083486613 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.266447045 + y: 335.19228644 + z: -31.2772535691 + theta: -1.83349382294 + kappa: 0.000382747802778 + s: 30.61286112074 + dkappa: 0 + } + v: 3.69166660309 + a: -0.0277083486613 relative_time: 9.4200000762939453 - theta: -1.83349382294 - accumulated_s: 30.61286112074 -} -adc_trajectory_point { - x: -132.276349856 - y: 335.156047197 - z: -31.2773276428 - - speed: 3.69166660309 - acceleration_s: 0.0097882489765 - curvature: 0.000382747802778 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.276349856 + y: 335.156047197 + z: -31.2773276428 + theta: -1.83346983411 + kappa: 0.000382747802778 + s: 30.649777786740003 + dkappa: 0 + } + v: 3.69166660309 + a: 0.0097882489765 relative_time: 9.4300000667572021 - theta: -1.83346983411 - accumulated_s: 30.649777786740003 -} -adc_trajectory_point { - x: -132.28627245 - y: 335.119809234 - z: -31.2772213072 - - speed: 3.69166660309 - acceleration_s: -0.0203050805543 - curvature: 0.000306198182417 - curvature_change_rate: -0.00207357891682 +} +trajectory_point { + path_point { + x: -132.28627245 + y: 335.119809234 + z: -31.2772213072 + theta: -1.83346225214 + kappa: 0.000306198182417 + s: 30.68669445274 + dkappa: -0.00207357891682 + } + v: 3.69166660309 + a: -0.0203050805543 relative_time: 9.440000057220459 - theta: -1.83346225214 - accumulated_s: 30.68669445274 -} -adc_trajectory_point { - x: -132.28627245 - y: 335.119809234 - z: -31.2772213072 - - speed: 3.69166660309 - acceleration_s: -0.0203050805543 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.28627245 + y: 335.119809234 + z: -31.2772213072 + theta: -1.83346225214 + kappa: 0.000306198182417 + s: 30.723611118839997 + dkappa: 0 + } + v: 3.69166660309 + a: -0.0203050805543 relative_time: 9.440000057220459 - theta: -1.83346225214 - accumulated_s: 30.723611118839997 -} -adc_trajectory_point { - x: -132.306121853 - y: 335.04740141 - z: -31.2771796137 - - speed: 3.68888878822 - acceleration_s: -0.113497308062 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.306121853 + y: 335.04740141 + z: -31.2771796137 + theta: -1.83348980646 + kappa: 0.000306198182417 + s: 30.76050000664 + dkappa: 0 + } + v: 3.68888878822 + a: -0.113497308062 relative_time: 9.4600000381469727 - theta: -1.83348980646 - accumulated_s: 30.76050000664 -} -adc_trajectory_point { - x: -132.316022213 - y: 335.011197764 - z: -31.2771620173 - - speed: 3.68888878822 - acceleration_s: -0.10800009485 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.316022213 + y: 335.011197764 + z: -31.2771620173 + theta: -1.83346983723 + kappa: 0.000306198182417 + s: 30.79738889454 + dkappa: 0 + } + v: 3.68888878822 + a: -0.10800009485 relative_time: 9.47000002861023 - theta: -1.83346983723 - accumulated_s: 30.79738889454 -} -adc_trajectory_point { - x: -132.325942061 - y: 334.974998993 - z: -31.2771311263 - - speed: 3.68611121178 - acceleration_s: -0.10800009485 - curvature: 0.000267923397025 - curvature_change_rate: -0.00103835134625 +} +trajectory_point { + path_point { + x: -132.325942061 + y: 334.974998993 + z: -31.2771311263 + theta: -1.83348745956 + kappa: 0.000267923397025 + s: 30.834250006639998 + dkappa: -0.00103835134625 + } + v: 3.68611121178 + a: -0.10800009485 relative_time: 9.4800000190734863 - theta: -1.83348745956 - accumulated_s: 30.834250006639998 -} -adc_trajectory_point { - x: -132.335866566 - y: 334.938789824 - z: -31.2771076933 - - speed: 3.68611121178 - acceleration_s: 0.00340698607689 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.335866566 + y: 334.938789824 + z: -31.2771076933 + theta: -1.83351794815 + kappa: 0.000267923397025 + s: 30.87111111884 + dkappa: 0 + } + v: 3.68611121178 + a: 0.00340698607689 relative_time: 9.4900000095367432 - theta: -1.83351794815 - accumulated_s: 30.87111111884 -} -adc_trajectory_point { - x: -132.34579007 - y: 334.902605896 - z: -31.2770189103 - - speed: 3.68611121178 - acceleration_s: 0.00340698607689 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.34579007 + y: 334.902605896 + z: -31.2770189103 + theta: -1.83356104399 + kappa: 0.000267923397025 + s: 30.907972230939997 + dkappa: 0 + } + v: 3.68611121178 + a: 0.00340698607689 relative_time: 9.5 - theta: -1.83356104399 - accumulated_s: 30.907972230939997 -} -adc_trajectory_point { - x: -132.34579007 - y: 334.902605896 - z: -31.2770189103 - - speed: 3.68611121178 - acceleration_s: -0.0598562763837 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.34579007 + y: 334.902605896 + z: -31.2770189103 + theta: -1.83356104399 + kappa: 0.000267923397025 + s: 30.944833343040003 + dkappa: 0 + } + v: 3.68611121178 + a: -0.0598562763837 relative_time: 9.5 - theta: -1.83356104399 - accumulated_s: 30.944833343040003 -} -adc_trajectory_point { - x: -132.365628196 - y: 334.830263087 - z: -31.2768508997 - - speed: 3.68611121178 - acceleration_s: -0.0852656314668 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.365628196 + y: 334.830263087 + z: -31.2768508997 + theta: -1.83361914369 + kappa: 0.000267923397025 + s: 30.98169445514 + dkappa: 0 + } + v: 3.68611121178 + a: -0.0852656314668 relative_time: 9.5199999809265137 - theta: -1.83361914369 - accumulated_s: 30.98169445514 -} -adc_trajectory_point { - x: -132.375541309 - y: 334.794117251 - z: -31.2767734025 - - speed: 3.68611121178 - acceleration_s: -0.119545102887 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.375541309 + y: 334.794117251 + z: -31.2767734025 + theta: -1.83362740513 + kappa: 0.000267923397025 + s: 31.01855556724 + dkappa: 0 + } + v: 3.68611121178 + a: -0.119545102887 relative_time: 9.52999997138977 - theta: -1.83362740513 - accumulated_s: 31.01855556724 -} -adc_trajectory_point { - x: -132.385502938 - y: 334.757982983 - z: -31.2767456351 - - speed: 3.68611121178 - acceleration_s: -0.0521183684964 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.385502938 + y: 334.757982983 + z: -31.2767456351 + theta: -1.83369129463 + kappa: 0.000267923397025 + s: 31.05541667934 + dkappa: 0 + } + v: 3.68611121178 + a: -0.0521183684964 relative_time: 9.5399999618530273 - theta: -1.83369129463 - accumulated_s: 31.05541667934 -} -adc_trajectory_point { - x: -132.395440882 - y: 334.721841131 - z: -31.2765656896 - - speed: 3.68611121178 - acceleration_s: -0.0521183684964 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.395440882 + y: 334.721841131 + z: -31.2765656896 + theta: -1.8337147282 + kappa: 0.000267923397025 + s: 31.09227779154 + dkappa: 0 + } + v: 3.68611121178 + a: -0.0521183684964 relative_time: 9.5499999523162842 - theta: -1.8337147282 - accumulated_s: 31.09227779154 -} -adc_trajectory_point { - x: -132.405356414 - y: 334.685726786 - z: -31.2765603065 - - speed: 3.68611121178 - acceleration_s: -0.10309123563 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.405356414 + y: 334.685726786 + z: -31.2765603065 + theta: -1.83373368173 + kappa: 0.000267923397025 + s: 31.129138903639998 + dkappa: 0 + } + v: 3.68611121178 + a: -0.10309123563 relative_time: 9.559999942779541 - theta: -1.83373368173 - accumulated_s: 31.129138903639998 -} -adc_trajectory_point { - x: -132.415285953 - y: 334.649572979 - z: -31.27638816 - - speed: 3.68611121178 - acceleration_s: 0.0632254496802 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.415285953 + y: 334.649572979 + z: -31.27638816 + theta: -1.83377606174 + kappa: 0.000267923397025 + s: 31.166000015740003 + dkappa: 0 + } + v: 3.68611121178 + a: 0.0632254496802 relative_time: 9.5699999332427979 - theta: -1.83377606174 - accumulated_s: 31.166000015740003 -} -adc_trajectory_point { - x: -132.425176129 - y: 334.613471669 - z: -31.276399726 - - speed: 3.68611121178 - acceleration_s: -0.16557725373 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.425176129 + y: 334.613471669 + z: -31.276399726 + theta: -1.83382686471 + kappa: 0.000267923397025 + s: 31.202861127840002 + dkappa: 0 + } + v: 3.68611121178 + a: -0.16557725373 relative_time: 9.5800001621246338 - theta: -1.83382686471 - accumulated_s: 31.202861127840002 -} -adc_trajectory_point { - x: -132.435087263 - y: 334.577329929 - z: -31.2761858553 - - speed: 3.68611121178 - acceleration_s: 0.0030236410683 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.435087263 + y: 334.577329929 + z: -31.2761858553 + theta: -1.83388921224 + kappa: 0.000267923397025 + s: 31.23972223994 + dkappa: 0 + } + v: 3.68611121178 + a: 0.0030236410683 relative_time: 9.59000015258789 - theta: -1.83388921224 - accumulated_s: 31.23972223994 -} -adc_trajectory_point { - x: -132.444935072 - y: 334.541233548 - z: -31.2762448108 - - speed: 3.68611121178 - acceleration_s: 0.0030236410683 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.444935072 + y: 334.541233548 + z: -31.2762448108 + theta: -1.83393036295 + kappa: 0.000267923397025 + s: 31.27658335214 + dkappa: 0 + } + v: 3.68611121178 + a: 0.0030236410683 relative_time: 9.6000001430511475 - theta: -1.83393036295 - accumulated_s: 31.27658335214 -} -adc_trajectory_point { - x: -132.454787152 - y: 334.505092022 - z: -31.2761642355 - - speed: 3.68611121178 - acceleration_s: -0.194202137923 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.454787152 + y: 334.505092022 + z: -31.2761642355 + theta: -1.83397956297 + kappa: 0.000267923397025 + s: 31.31344446424 + dkappa: 0 + } + v: 3.68611121178 + a: -0.194202137923 relative_time: 9.6100001335144043 - theta: -1.83397956297 - accumulated_s: 31.31344446424 -} -adc_trajectory_point { - x: -132.464602605 - y: 334.468987353 - z: -31.2762580309 - - speed: 3.68333339691 - acceleration_s: -0.0921553495998 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.464602605 + y: 334.468987353 + z: -31.2762580309 + theta: -1.83400638466 + kappa: 0.000267923397025 + s: 31.35027779814 + dkappa: 0 + } + v: 3.68333339691 + a: -0.0921553495998 relative_time: 9.6200001239776611 - theta: -1.83400638466 - accumulated_s: 31.35027779814 -} -adc_trajectory_point { - x: -132.474450074 - y: 334.432839964 - z: -31.2761457358 - - speed: 3.68333339691 - acceleration_s: -0.0189713502264 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.474450074 + y: 334.432839964 + z: -31.2761457358 + theta: -1.8340811556 + kappa: 0.000267923397025 + s: 31.38711113214 + dkappa: 0 + } + v: 3.68333339691 + a: -0.0189713502264 relative_time: 9.630000114440918 - theta: -1.8340811556 - accumulated_s: 31.38711113214 -} -adc_trajectory_point { - x: -132.484249792 - y: 334.396733716 - z: -31.2762143593 - - speed: 3.68055558205 - acceleration_s: -0.113972390304 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.484249792 + y: 334.396733716 + z: -31.2762143593 + theta: -1.83411691341 + kappa: 0.000267923397025 + s: 31.42391668794 + dkappa: 0 + } + v: 3.68055558205 + a: -0.113972390304 relative_time: 9.6400001049041748 - theta: -1.83411691341 - accumulated_s: 31.42391668794 -} -adc_trajectory_point { - x: -132.484249792 - y: 334.396733716 - z: -31.2762143593 - - speed: 3.68055558205 - acceleration_s: -0.113972390304 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.484249792 + y: 334.396733716 + z: -31.2762143593 + theta: -1.83411691341 + kappa: 0.000267923397025 + s: 31.46072224374 + dkappa: 0 + } + v: 3.68055558205 + a: -0.113972390304 relative_time: 9.6400001049041748 - theta: -1.83411691341 - accumulated_s: 31.46072224374 -} -adc_trajectory_point { - x: -132.503793178 - y: 334.324478932 - z: -31.2763494886 - - speed: 3.67777776718 - acceleration_s: -0.00754373244004 - curvature: 0.00022964861801 - curvature_change_rate: -0.00104070396415 +} +trajectory_point { + path_point { + x: -132.503793178 + y: 334.324478932 + z: -31.2763494886 + theta: -1.83414336428 + kappa: 0.00022964861801 + s: 31.497500021439997 + dkappa: -0.00104070396415 + } + v: 3.67777776718 + a: -0.00754373244004 relative_time: 9.6600000858306885 - theta: -1.83414336428 - accumulated_s: 31.497500021439997 -} -adc_trajectory_point { - x: -132.513547372 - y: 334.288355637 - z: -31.2764242683 - - speed: 3.67777776718 - acceleration_s: -0.0429540512884 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.513547372 + y: 334.288355637 + z: -31.2764242683 + theta: -1.8341249813 + kappa: 0.00022964861801 + s: 31.53427779914 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0429540512884 relative_time: 9.6700000762939453 - theta: -1.8341249813 - accumulated_s: 31.53427779914 -} -adc_trajectory_point { - x: -132.523340475 - y: 334.25224665 - z: -31.2765155546 - - speed: 3.67499995232 - acceleration_s: -0.0641137927879 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.523340475 + y: 334.25224665 + z: -31.2765155546 + theta: -1.83413665565 + kappa: 0.00022964861801 + s: 31.571027798640003 + dkappa: 0 + } + v: 3.67499995232 + a: -0.0641137927879 relative_time: 9.6800000667572021 - theta: -1.83413665565 - accumulated_s: 31.571027798640003 -} -adc_trajectory_point { - x: -132.533120517 - y: 334.216149147 - z: -31.2766190059 - - speed: 3.67499995232 - acceleration_s: -0.0601449302991 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.533120517 + y: 334.216149147 + z: -31.2766190059 + theta: -1.83412861727 + kappa: 0.00022964861801 + s: 31.60777779814 + dkappa: 0 + } + v: 3.67499995232 + a: -0.0601449302991 relative_time: 9.690000057220459 - theta: -1.83412861727 - accumulated_s: 31.60777779814 -} -adc_trajectory_point { - x: -132.533120517 - y: 334.216149147 - z: -31.2766190059 - - speed: 3.67777776718 - acceleration_s: -0.0601449302991 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.533120517 + y: 334.216149147 + z: -31.2766190059 + theta: -1.83412861727 + kappa: 0.00022964861801 + s: 31.644555575840002 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0601449302991 relative_time: 9.690000057220459 - theta: -1.83412861727 - accumulated_s: 31.644555575840002 -} -adc_trajectory_point { - x: -132.55274699 - y: 334.143993175 - z: -31.2769757332 - - speed: 3.67777776718 - acceleration_s: -0.0473853953028 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.55274699 + y: 334.143993175 + z: -31.2769757332 + theta: -1.83411576045 + kappa: 0.00022964861801 + s: 31.681333353539998 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0473853953028 relative_time: 9.7100000381469727 - theta: -1.83411576045 - accumulated_s: 31.681333353539998 -} -adc_trajectory_point { - x: -132.562626884 - y: 334.107918546 - z: -31.2770130374 - - speed: 3.67777776718 - acceleration_s: 0.00380957724767 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.562626884 + y: 334.107918546 + z: -31.2770130374 + theta: -1.83410191979 + kappa: 0.00022964861801 + s: 31.71811113124 + dkappa: 0 + } + v: 3.67777776718 + a: 0.00380957724767 relative_time: 9.72000002861023 - theta: -1.83410191979 - accumulated_s: 31.71811113124 -} -adc_trajectory_point { - x: -132.572521441 - y: 334.071895683 - z: -31.2772678779 - - speed: 3.67777776718 - acceleration_s: -0.148643972092 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.572521441 + y: 334.071895683 + z: -31.2772678779 + theta: -1.83408614397 + kappa: 0.00022964861801 + s: 31.75488890884 + dkappa: 0 + } + v: 3.67777776718 + a: -0.148643972092 relative_time: 9.7300000190734863 - theta: -1.83408614397 - accumulated_s: 31.75488890884 -} -adc_trajectory_point { - x: -132.582445074 - y: 334.035855242 - z: -31.2773258034 - - speed: 3.67777776718 - acceleration_s: -0.0647918424753 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.582445074 + y: 334.035855242 + z: -31.2773258034 + theta: -1.83404132243 + kappa: 0.00022964861801 + s: 31.791666686539997 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0647918424753 relative_time: 9.7400000095367432 - theta: -1.83404132243 - accumulated_s: 31.791666686539997 -} -adc_trajectory_point { - x: -132.592399241 - y: 333.999878115 - z: -31.2775527621 - - speed: 3.67777776718 - acceleration_s: -0.0647918424753 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.592399241 + y: 333.999878115 + z: -31.2775527621 + theta: -1.83403700259 + kappa: 0.00022964861801 + s: 31.82844446424 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0647918424753 relative_time: 9.75 - theta: -1.83403700259 - accumulated_s: 31.82844446424 -} -adc_trajectory_point { - x: -132.602362924 - y: 333.963870573 - z: -31.277556641 - - speed: 3.68055558205 - acceleration_s: -0.0280492656679 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.602362924 + y: 333.963870573 + z: -31.277556641 + theta: -1.83400798623 + kappa: 0.00022964861801 + s: 31.86525002004 + dkappa: 0 + } + v: 3.68055558205 + a: -0.0280492656679 relative_time: 9.7599999904632568 - theta: -1.83400798623 - accumulated_s: 31.86525002004 -} -adc_trajectory_point { - x: -132.612571826 - y: 333.927896006 - z: -31.2778558498 - - speed: 3.68055558205 - acceleration_s: -0.248044298396 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.612571826 + y: 333.927896006 + z: -31.2778558498 + theta: -1.8340272878 + kappa: 0.00022964861801 + s: 31.902055575840002 + dkappa: 0 + } + v: 3.68055558205 + a: -0.248044298396 relative_time: 9.7699999809265137 - theta: -1.8340272878 - accumulated_s: 31.902055575840002 -} -adc_trajectory_point { - x: -132.622765624 - y: 333.892007101 - z: -31.2777975388 - - speed: 3.68055558205 - acceleration_s: -0.0666630968565 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.622765624 + y: 333.892007101 + z: -31.2777975388 + theta: -1.83403050578 + kappa: 0.00022964861801 + s: 31.938861131640003 + dkappa: 0 + } + v: 3.68055558205 + a: -0.0666630968565 relative_time: 9.77999997138977 - theta: -1.83403050578 - accumulated_s: 31.938861131640003 -} -adc_trajectory_point { - x: -132.632923405 - y: 333.856177461 - z: -31.2781809671 - - speed: 3.68055558205 - acceleration_s: -0.142098543328 - curvature: 0.00022964861801 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.632923405 + y: 333.856177461 + z: -31.2781809671 + theta: -1.83401242033 + kappa: 0.00022964861801 + s: 31.97566668754 + dkappa: 0 + } + v: 3.68055558205 + a: -0.142098543328 relative_time: 9.7899999618530273 - theta: -1.83401242033 - accumulated_s: 31.97566668754 -} -adc_trajectory_point { - x: -132.643105006 - y: 333.820311515 - z: -31.2781149456 - - speed: 3.68055558205 - acceleration_s: -0.142098543328 - curvature: 0.000267923397025 - curvature_change_rate: 0.00103991851671 +} +trajectory_point { + path_point { + x: -132.643105006 + y: 333.820311515 + z: -31.2781149456 + theta: -1.83404376709 + kappa: 0.000267923397025 + s: 32.01247224334 + dkappa: 0.00103991851671 + } + v: 3.68055558205 + a: -0.142098543328 relative_time: 9.7999999523162842 - theta: -1.83404376709 - accumulated_s: 32.01247224334 -} -adc_trajectory_point { - x: -132.653242664 - y: 333.784452432 - z: -31.2782685002 - - speed: 3.68055558205 - acceleration_s: -0.00840818446238 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.653242664 + y: 333.784452432 + z: -31.2782685002 + theta: -1.83400732259 + kappa: 0.000267923397025 + s: 32.04927779914 + dkappa: 0 + } + v: 3.68055558205 + a: -0.00840818446238 relative_time: 9.809999942779541 - theta: -1.83400732259 - accumulated_s: 32.04927779914 -} -adc_trajectory_point { - x: -132.66338165 - y: 333.748605675 - z: -31.2782534566 - - speed: 3.67777776718 - acceleration_s: -0.0634310379344 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.66338165 + y: 333.748605675 + z: -31.2782534566 + theta: -1.83405144873 + kappa: 0.000267923397025 + s: 32.08605557684 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0634310379344 relative_time: 9.8199999332427979 - theta: -1.83405144873 - accumulated_s: 32.08605557684 -} -adc_trajectory_point { - x: -132.67344709 - y: 333.712761016 - z: -31.2785384571 - - speed: 3.67777776718 - acceleration_s: -0.112519250137 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.67344709 + y: 333.712761016 + z: -31.2785384571 + theta: -1.83405031778 + kappa: 0.000267923397025 + s: 32.12283335444 + dkappa: 0 + } + v: 3.67777776718 + a: -0.112519250137 relative_time: 9.8300001621246338 - theta: -1.83405031778 - accumulated_s: 32.12283335444 -} -adc_trajectory_point { - x: -132.683508975 - y: 333.676922344 - z: -31.2785902759 - - speed: 3.67777776718 - acceleration_s: -0.110672510261 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.683508975 + y: 333.676922344 + z: -31.2785902759 + theta: -1.83408744353 + kappa: 0.000267923397025 + s: 32.15961113214 + dkappa: 0 + } + v: 3.67777776718 + a: -0.110672510261 relative_time: 9.84000015258789 - theta: -1.83408744353 - accumulated_s: 32.15961113214 -} -adc_trajectory_point { - x: -132.683508975 - y: 333.676922344 - z: -31.2785902759 - - speed: 3.67777776718 - acceleration_s: -0.110672510261 - curvature: 0.000267923397025 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.683508975 + y: 333.676922344 + z: -31.2785902759 + theta: -1.83408744353 + kappa: 0.000267923397025 + s: 32.19638890984 + dkappa: 0 + } + v: 3.67777776718 + a: -0.110672510261 relative_time: 9.84000015258789 - theta: -1.83408744353 - accumulated_s: 32.19638890984 -} -adc_trajectory_point { - x: -132.70359128 - y: 333.605290692 - z: -31.2786425408 - - speed: 3.67777776718 - acceleration_s: -0.0845600592295 - curvature: 0.000306198182417 - curvature_change_rate: 0.00104070413751 +} +trajectory_point { + path_point { + x: -132.70359128 + y: 333.605290692 + z: -31.2786425408 + theta: -1.83417351223 + kappa: 0.000306198182417 + s: 32.23316668754 + dkappa: 0.00104070413751 + } + v: 3.67777776718 + a: -0.0845600592295 relative_time: 9.8600001335144043 - theta: -1.83417351223 - accumulated_s: 32.23316668754 -} -adc_trajectory_point { - x: -132.713602221 - y: 333.569474338 - z: -31.2788601648 - - speed: 3.67777776718 - acceleration_s: -0.0420496219288 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.713602221 + y: 333.569474338 + z: -31.2788601648 + theta: -1.83421945913 + kappa: 0.000306198182417 + s: 32.26994446514 + dkappa: 0 + } + v: 3.67777776718 + a: -0.0420496219288 relative_time: 9.8700001239776611 - theta: -1.83421945913 - accumulated_s: 32.26994446514 -} -adc_trajectory_point { - x: -132.723598214 - y: 333.533659103 - z: -31.2789625516 - - speed: 3.669444561 - acceleration_s: -0.0282229879329 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.723598214 + y: 333.533659103 + z: -31.2789625516 + theta: -1.83426703222 + kappa: 0.000306198182417 + s: 32.30663891074 + dkappa: 0 + } + v: 3.669444561 + a: -0.0282229879329 relative_time: 9.880000114440918 - theta: -1.83426703222 - accumulated_s: 32.30663891074 -} -adc_trajectory_point { - x: -132.733623096 - y: 333.497845819 - z: -31.2790034963 - - speed: 3.669444561 - acceleration_s: -0.0417450219111 - curvature: 0.000306198182417 - curvature_change_rate: 0 - relative_time: 9.8900001049041748 - theta: -1.83432680577 - accumulated_s: 32.34333335634 -} -adc_trajectory_point { - x: -132.733623096 - y: 333.497845819 - z: -31.2790034963 - - speed: 3.669444561 - acceleration_s: -0.0417450219111 - curvature: 0.000306198182417 - curvature_change_rate: 0 +} +trajectory_point { + path_point { + x: -132.733623096 + y: 333.497845819 + z: -31.2790034963 + theta: -1.83432680577 + kappa: 0.000306198182417 + s: 32.34333335634 + dkappa: 0 + } + v: 3.669444561 + a: -0.0417450219111 relative_time: 9.8900001049041748 - theta: -1.83432680577 - accumulated_s: 32.38002780204 } -estop { - is_estop: false +trajectory_point { + path_point { + x: -132.733623096 + y: 333.497845819 + z: -31.2790034963 + theta: -1.83432680577 + kappa: 0.000306198182417 + s: 32.38002780204 + dkappa: 0 + } + v: 3.669444561 + a: -0.0417450219111 + relative_time: 9.8900001049041748 } -gear: GEAR_DRIVE + diff --git a/modules/control/testdata/simple_control_test/1_planning.pb.txt b/modules/control/testdata/simple_control_test/1_planning.pb.txt index f2da392d11d..0fd0b607cf6 100644 --- a/modules/control/testdata/simple_control_test/1_planning.pb.txt +++ b/modules/control/testdata/simple_control_test/1_planning.pb.txt @@ -3,2793 +3,3258 @@ header { module_name: "planning" sequence_num: 257 } -total_path_length: 0.0 +total_path_length: 0 total_path_time: 2.30999994278 -adc_trajectory_point { - x: -966.197112247 - y: -421.501347084 - z: -29.3527596192 - speed: 0.0 - acceleration_s: 0.0254025464233 - curvature: -0.00206686114541 - curvature_change_rate: 0.0 +estop { + is_estop: false +} +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: -966.197112247 + y: -421.501347084 + z: -29.3527596192 + theta: 1.30375300707 + kappa: -0.00206686114541 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.0254025464233 relative_time: -0.0999999046326 - theta: 1.30375300707 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.197007177 - y: -421.501256003 - z: -29.3527144603 - speed: 0.0 - acceleration_s: 0.0192565515093 - curvature: -0.00206686114541 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.197007177 + y: -421.501256003 + z: -29.3527144603 + theta: 1.30372819335 + kappa: -0.00206686114541 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.0192565515093 relative_time: -0.0899999141693 - theta: 1.30372819335 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196926021 - y: -421.501163279 - z: -29.352661401 - speed: 0.0 - acceleration_s: 0.0131749871527 - curvature: -0.00206686114541 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196926021 + y: -421.501163279 + z: -29.352661401 + theta: 1.30373709365 + kappa: -0.00206686114541 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.0131749871527 relative_time: -0.0799999237061 - theta: 1.30373709365 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196846276 - y: -421.501059574 - z: -29.3526045391 - speed: 0.0 - acceleration_s: 0.00730323221393 - curvature: -0.00206686114541 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196846276 + y: -421.501059574 + z: -29.3526045391 + theta: 1.30371721257 + kappa: -0.00206686114541 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00730323221393 relative_time: -0.0699999332428 - theta: 1.30371721257 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196753229 - y: -421.500994993 - z: -29.3525568573 - speed: 0.0 - acceleration_s: 0.00176755322232 - curvature: -0.00202858508204 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196753229 + y: -421.500994993 + z: -29.3525568573 + theta: 1.30370285555 + kappa: -0.00202858508204 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00176755322232 relative_time: -0.0599999427795 - theta: 1.30370285555 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196707869 - y: -421.500906366 - z: -29.3524463288 - speed: 0.0 - acceleration_s: -0.00332583271619 - curvature: -0.00202858508204 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196707869 + y: -421.500906366 + z: -29.3524463288 + theta: 1.30374721179 + kappa: -0.00202858508204 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00332583271619 relative_time: -0.0499999523163 - theta: 1.30374721179 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196616213 - y: -421.500848007 - z: -29.3523760159 - speed: 0.0 - acceleration_s: -0.00789122214681 - curvature: -0.00202858508204 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196616213 + y: -421.500848007 + z: -29.3523760159 + theta: 1.30370889705 + kappa: -0.00202858508204 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00789122214681 relative_time: -0.039999961853 - theta: 1.30370889705 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196554378 - y: -421.500817104 - z: -29.3523381595 - speed: 0.0 - acceleration_s: -0.0118634365762 - curvature: -0.00202858508204 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196554378 + y: -421.500817104 + z: -29.3523381595 + theta: 1.30371906011 + kappa: -0.00202858508204 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0118634365762 relative_time: -0.0299999713898 - theta: 1.30371906011 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196502807 - y: -421.500770404 - z: -29.3522989042 - speed: 0.0 - acceleration_s: -0.0151974098845 - curvature: -0.00202858508204 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196502807 + y: -421.500770404 + z: -29.3522989042 + theta: 1.30372347088 + kappa: -0.00202858508204 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0151974098845 relative_time: -0.0199999809265 - theta: 1.30372347088 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196411677 - y: -421.50077987 - z: -29.352238683 - speed: 0.0 - acceleration_s: -0.0178673886557 - curvature: -0.00202858508204 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196411677 + y: -421.50077987 + z: -29.352238683 + theta: 1.30368440692 + kappa: -0.00202858508204 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0178673886557 relative_time: -0.00999999046326 - theta: 1.30368440692 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19636163 - y: -421.500778403 - z: -29.3521883655 - speed: 0.0 - acceleration_s: -0.0198657886552 - curvature: -0.00202858508204 - curvature_change_rate: 0.0 - relative_time: 0.0 - theta: 1.30368721847 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196331822 - y: -421.500792 - z: -29.3521588231 - speed: 0.0 - acceleration_s: -0.0212017556602 - curvature: -0.00202858508204 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19636163 + y: -421.500778403 + z: -29.3521883655 + theta: 1.30368721847 + kappa: -0.00202858508204 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0198657886552 + relative_time: 0 +} +trajectory_point { + path_point { + x: -966.196331822 + y: -421.500792 + z: -29.3521588231 + theta: 1.30370747208 + kappa: -0.00202858508204 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0212017556602 relative_time: 0.00999999046326 - theta: 1.30370747208 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196290371 - y: -421.500847715 - z: -29.3521868316 - speed: 0.0 - acceleration_s: -0.0218994823494 - curvature: -0.00202858508204 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196290371 + y: -421.500847715 + z: -29.3521868316 + theta: 1.30372313505 + kappa: -0.00202858508204 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0218994823494 relative_time: 0.0199999809265 - theta: 1.30372313505 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196260157 - y: -421.500877257 - z: -29.3521645097 - speed: 0.0 - acceleration_s: -0.0219963350197 - curvature: -0.00202858508204 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196260157 + y: -421.500877257 + z: -29.3521645097 + theta: 1.30373640094 + kappa: -0.00202858508204 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0219963350197 relative_time: 0.0299999713898 - theta: 1.30373640094 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196195343 - y: -421.500967632 - z: -29.3521850249 - speed: 0.0 - acceleration_s: -0.021540844551 - curvature: -0.00199030906694 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196195343 + y: -421.500967632 + z: -29.3521850249 + theta: 1.30370397534 + kappa: -0.00199030906694 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.021540844551 relative_time: 0.039999961853 - theta: 1.30370397534 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196184846 - y: -421.50105033 - z: -29.3521981454 - speed: 0.0 - acceleration_s: -0.0205906153824 - curvature: -0.00199030906694 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196184846 + y: -421.50105033 + z: -29.3521981454 + theta: 1.30374871571 + kappa: -0.00199030906694 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0205906153824 relative_time: 0.0499999523163 - theta: 1.30374871571 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196133325 - y: -421.501139059 - z: -29.3522424009 - speed: 0.0 - acceleration_s: -0.0192102043903 - curvature: -0.00199030906694 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196133325 + y: -421.501139059 + z: -29.3522424009 + theta: 1.30371116148 + kappa: -0.00199030906694 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0192102043903 relative_time: 0.0599999427795 - theta: 1.30371116148 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196093548 - y: -421.501267076 - z: -29.3523333361 - speed: 0.0 - acceleration_s: -0.0174690186092 - curvature: -0.00199030906694 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196093548 + y: -421.501267076 + z: -29.3523333361 + theta: 1.30371384684 + kappa: -0.00199030906694 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0174690186092 relative_time: 0.0699999332428 - theta: 1.30371384684 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196060683 - y: -421.501368566 - z: -29.3523919629 - speed: 0.0 - acceleration_s: -0.0154392768519 - curvature: -0.00199030906694 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196060683 + y: -421.501368566 + z: -29.3523919629 + theta: 1.30370413144 + kappa: -0.00199030906694 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0154392768519 relative_time: 0.0799999237061 - theta: 1.30370413144 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.196046251 - y: -421.501493827 - z: -29.3524487261 - speed: 0.0 - acceleration_s: -0.0131940756263 - curvature: -0.00199030906694 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.196046251 + y: -421.501493827 + z: -29.3524487261 + theta: 1.3037302426 + kappa: -0.00199030906694 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0131940756263 relative_time: 0.0899999141693 - theta: 1.3037302426 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19599757 - y: -421.501639626 - z: -29.352557281 - speed: 0.0 - acceleration_s: -0.0108055944778 - curvature: -0.00199030906694 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19599757 + y: -421.501639626 + z: -29.352557281 + theta: 1.30371321463 + kappa: -0.00199030906694 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0108055944778 relative_time: 0.0999999046326 - theta: 1.30371321463 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195985056 - y: -421.501754362 - z: -29.3526588976 - speed: 0.0 - acceleration_s: -0.00834347017841 - curvature: -0.00199030906694 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195985056 + y: -421.501754362 + z: -29.3526588976 + theta: 1.30372232074 + kappa: -0.00199030906694 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00834347017841 relative_time: 0.109999895096 - theta: 1.30372232074 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195958157 - y: -421.501904038 - z: -29.3527360968 - speed: 0.0 - acceleration_s: -0.00587336320144 - curvature: -0.00199030906694 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195958157 + y: -421.501904038 + z: -29.3527360968 + theta: 1.30374274853 + kappa: -0.00199030906694 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00587336320144 relative_time: 0.120000123978 - theta: 1.30374274853 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195937274 - y: -421.50203353 - z: -29.3528009653 - speed: 0.0 - acceleration_s: -0.00345573382733 - curvature: -0.00199030906694 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195937274 + y: -421.50203353 + z: -29.3528009653 + theta: 1.30375376352 + kappa: -0.00199030906694 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00345573382733 relative_time: 0.130000114441 - theta: 1.30375376352 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195892888 - y: -421.50217588 - z: -29.3529079873 - speed: 0.0 - acceleration_s: -0.00114483916997 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195892888 + y: -421.50217588 + z: -29.3529079873 + theta: 1.30372419736 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00114483916997 relative_time: 0.140000104904 - theta: 1.30372419736 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195829949 - y: -421.502331214 - z: -29.3529887898 - speed: 0.0 - acceleration_s: 0.00101204346041 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195829949 + y: -421.502331214 + z: -29.3529887898 + theta: 1.30369197396 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00101204346041 relative_time: 0.150000095367 - theta: 1.30369197396 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195819899 - y: -421.502441103 - z: -29.3530850559 - speed: 0.0 - acceleration_s: 0.0029751670126 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195819899 + y: -421.502441103 + z: -29.3530850559 + theta: 1.30371179416 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.0029751670126 relative_time: 0.160000085831 - theta: 1.30371179416 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195786898 - y: -421.502581067 - z: -29.3531368757 - speed: 0.0 - acceleration_s: 0.004712644279 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195786898 + y: -421.502581067 + z: -29.3531368757 + theta: 1.30372619884 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.004712644279 relative_time: 0.170000076294 - theta: 1.30372619884 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195753969 - y: -421.502698689 - z: -29.3531886321 - speed: 0.0 - acceleration_s: 0.00620056657242 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195753969 + y: -421.502698689 + z: -29.3531886321 + theta: 1.30372791507 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00620056657242 relative_time: 0.180000066757 - theta: 1.30372791507 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19571553 - y: -421.502805137 - z: -29.3532083519 - speed: 0.0 - acceleration_s: 0.00742292553374 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19571553 + y: -421.502805137 + z: -29.3532083519 + theta: 1.30371786552 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00742292553374 relative_time: 0.19000005722 - theta: 1.30371786552 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19565176 - y: -421.502941693 - z: -29.3533100002 - speed: 0.0 - acceleration_s: 0.00837135555468 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19565176 + y: -421.502941693 + z: -29.3533100002 + theta: 1.30370096751 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00837135555468 relative_time: 0.200000047684 - theta: 1.30370096751 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195619747 - y: -421.503018049 - z: -29.3533131098 - speed: 0.0 - acceleration_s: 0.00904471708279 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195619747 + y: -421.503018049 + z: -29.3533131098 + theta: 1.30369123672 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00904471708279 relative_time: 0.210000038147 - theta: 1.30369123672 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195572438 - y: -421.503121115 - z: -29.3533480279 - speed: 0.0 - acceleration_s: 0.00944854317843 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195572438 + y: -421.503121115 + z: -29.3533480279 + theta: 1.30368974408 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00944854317843 relative_time: 0.22000002861 - theta: 1.30368974408 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195536025 - y: -421.503206788 - z: -29.3533187555 - speed: 0.0 - acceleration_s: 0.00959437311885 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195536025 + y: -421.503206788 + z: -29.3533187555 + theta: 1.30370949845 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00959437311885 relative_time: 0.230000019073 - theta: 1.30370949845 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19547786 - y: -421.503275995 - z: -29.3533453494 - speed: 0.0 - acceleration_s: 0.0094989976089 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19547786 + y: -421.503275995 + z: -29.3533453494 + theta: 1.30367109853 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.0094989976089 relative_time: 0.240000009537 - theta: 1.30367109853 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195440494 - y: -421.503359931 - z: -29.3533411007 - speed: 0.0 - acceleration_s: 0.00918364029403 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195440494 + y: -421.503359931 + z: -29.3533411007 + theta: 1.30370073959 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00918364029403 relative_time: 0.25 - theta: 1.30370073959 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195406312 - y: -421.503403671 - z: -29.3532695025 - speed: 0.0 - acceleration_s: 0.00867309982217 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195406312 + y: -421.503403671 + z: -29.3532695025 + theta: 1.30371680026 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00867309982217 relative_time: 0.259999990463 - theta: 1.30371680026 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195353647 - y: -421.503459962 - z: -29.3532569604 - speed: 0.0 - acceleration_s: 0.00799487572309 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195353647 + y: -421.503459962 + z: -29.3532569604 + theta: 1.30372073423 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00799487572309 relative_time: 0.269999980927 - theta: 1.30372073423 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195281416 - y: -421.503519117 - z: -29.3532107053 - speed: 0.0 - acceleration_s: 0.00717829992806 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195281416 + y: -421.503519117 + z: -29.3532107053 + theta: 1.30370318637 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00717829992806 relative_time: 0.27999997139 - theta: 1.30370318637 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195230723 - y: -421.503542658 - z: -29.3531823149 - speed: 0.0 - acceleration_s: 0.0062536939103 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195230723 + y: -421.503542658 + z: -29.3531823149 + theta: 1.30369090785 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.0062536939103 relative_time: 0.289999961853 - theta: 1.30369090785 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195148946 - y: -421.5035959 - z: -29.3531524073 - speed: 0.0 - acceleration_s: 0.00525156925961 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195148946 + y: -421.5035959 + z: -29.3531524073 + theta: 1.30367477648 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00525156925961 relative_time: 0.299999952316 - theta: 1.30367477648 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195108297 - y: -421.503612142 - z: -29.353069758 - speed: 0.0 - acceleration_s: 0.00420188708943 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195108297 + y: -421.503612142 + z: -29.353069758 + theta: 1.30369413606 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00420188708943 relative_time: 0.30999994278 - theta: 1.30369413606 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.195036837 - y: -421.50364324 - z: -29.353059656 - speed: 0.0 - acceleration_s: 0.00313338908644 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.195036837 + y: -421.50364324 + z: -29.353059656 + theta: 1.30366626819 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00313338908644 relative_time: 0.319999933243 - theta: 1.30366626819 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194984834 - y: -421.503678875 - z: -29.3530482063 - speed: 0.0 - acceleration_s: 0.00207301032523 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194984834 + y: -421.503678875 + z: -29.3530482063 + theta: 1.3036870379 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00207301032523 relative_time: 0.329999923706 - theta: 1.3036870379 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194936625 - y: -421.503679089 - z: -29.3529917412 - speed: 0.0 - acceleration_s: 0.00104538125548 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194936625 + y: -421.503679089 + z: -29.3529917412 + theta: 1.30369006154 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00104538125548 relative_time: 0.339999914169 - theta: 1.30369006154 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194860433 - y: -421.503711217 - z: -29.3529398842 - speed: 0.0 - acceleration_s: 7.2423590308e-05 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194860433 + y: -421.503711217 + z: -29.3529398842 + theta: 1.30367337161 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: 7.2423590308e-05 relative_time: 0.349999904633 - theta: 1.30367337161 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194789624 - y: -421.503739059 - z: -29.3529388318 - speed: 0.0 - acceleration_s: -0.000826957755452 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194789624 + y: -421.503739059 + z: -29.3529388318 + theta: 1.30366002932 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000826957755452 relative_time: 0.359999895096 - theta: 1.30366002932 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194717095 - y: -421.503754066 - z: -29.3529216815 - speed: 0.0 - acceleration_s: -0.00163708695914 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194717095 + y: -421.503754066 + z: -29.3529216815 + theta: 1.30362952504 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00163708695914 relative_time: 0.370000123978 - theta: 1.30362952504 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194670852 - y: -421.503789332 - z: -29.3529275814 - speed: 0.0 - acceleration_s: -0.00234563633198 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194670852 + y: -421.503789332 + z: -29.3529275814 + theta: 1.30366590517 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00234563633198 relative_time: 0.380000114441 - theta: 1.30366590517 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194618143 - y: -421.503797792 - z: -29.3529031528 - speed: 0.0 - acceleration_s: -0.00294365662544 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194618143 + y: -421.503797792 + z: -29.3529031528 + theta: 1.30366011813 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00294365662544 relative_time: 0.390000104904 - theta: 1.30366011813 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194566096 - y: -421.503839041 - z: -29.3529106937 - speed: 0.0 - acceleration_s: -0.00342552485738 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194566096 + y: -421.503839041 + z: -29.3529106937 + theta: 1.30368431505 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00342552485738 relative_time: 0.400000095367 - theta: 1.30368431505 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194515449 - y: -421.503881164 - z: -29.352908371 - speed: 0.0 - acceleration_s: -0.00378881736901 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194515449 + y: -421.503881164 + z: -29.352908371 + theta: 1.30370051578 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00378881736901 relative_time: 0.410000085831 - theta: 1.30370051578 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194474205 - y: -421.503911128 - z: -29.3529416798 - speed: 0.0 - acceleration_s: -0.00403411698376 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194474205 + y: -421.503911128 + z: -29.3529416798 + theta: 1.30370857509 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00403411698376 relative_time: 0.420000076294 - theta: 1.30370857509 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194378266 - y: -421.503985659 - z: -29.3529695207 - speed: 0.0 - acceleration_s: -0.00416476400065 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194378266 + y: -421.503985659 + z: -29.3529695207 + theta: 1.3036660054 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00416476400065 relative_time: 0.430000066757 - theta: 1.3036660054 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194375276 - y: -421.504022113 - z: -29.352954058 - speed: 0.0 - acceleration_s: -0.00418656131845 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194375276 + y: -421.504022113 + z: -29.352954058 + theta: 1.30373328414 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00418656131845 relative_time: 0.44000005722 - theta: 1.30373328414 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194294419 - y: -421.504098046 - z: -29.3529946171 - speed: 0.0 - acceleration_s: -0.00410744426483 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194294419 + y: -421.504098046 + z: -29.3529946171 + theta: 1.30368939601 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00410744426483 relative_time: 0.450000047684 - theta: 1.30368939601 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194233824 - y: -421.504184916 - z: -29.3530436996 - speed: 0.0 - acceleration_s: -0.00393712571092 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194233824 + y: -421.504184916 + z: -29.3530436996 + theta: 1.30368631197 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00393712571092 relative_time: 0.460000038147 - theta: 1.30368631197 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194192292 - y: -421.504244549 - z: -29.353084893 - speed: 0.0 - acceleration_s: -0.00368672680789 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194192292 + y: -421.504244549 + z: -29.353084893 + theta: 1.30368605582 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00368672680789 relative_time: 0.47000002861 - theta: 1.30368605582 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194136241 - y: -421.504340544 - z: -29.3530902583 - speed: 0.0 - acceleration_s: -0.00336840321363 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194136241 + y: -421.504340544 + z: -29.3530902583 + theta: 1.30369169911 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00336840321363 relative_time: 0.480000019073 - theta: 1.30369169911 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.194094692 - y: -421.504428162 - z: -29.3531029364 - speed: 0.0 - acceleration_s: -0.0029949760123 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.194094692 + y: -421.504428162 + z: -29.3531029364 + theta: 1.3036935925 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0029949760123 relative_time: 0.490000009537 - theta: 1.3036935925 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19404644 - y: -421.50452484 - z: -29.3531672359 - speed: 0.0 - acceleration_s: -0.0025795756993 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19404644 + y: -421.50452484 + z: -29.3531672359 + theta: 1.30368719173 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0025795756993 relative_time: 0.5 - theta: 1.30368719173 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193992217 - y: -421.504645854 - z: -29.3532385183 - speed: 0.0 - acceleration_s: -0.0021353066405 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193992217 + y: -421.504645854 + z: -29.3532385183 + theta: 1.30369519305 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.0021353066405 relative_time: 0.509999990463 - theta: 1.30369519305 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19396336 - y: -421.5047352 - z: -29.3532415405 - speed: 0.0 - acceleration_s: -0.00167493835147 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19396336 + y: -421.5047352 + z: -29.3532415405 + theta: 1.30370318698 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00167493835147 relative_time: 0.519999980927 - theta: 1.30370318698 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193911256 - y: -421.504857272 - z: -29.3532755133 - speed: 0.0 - acceleration_s: -0.00121062881224 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193911256 + y: -421.504857272 + z: -29.3532755133 + theta: 1.30370311813 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00121062881224 relative_time: 0.52999997139 - theta: 1.30370311813 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193858309 - y: -421.504970569 - z: -29.3532733303 - speed: 0.0 - acceleration_s: -0.000753683867715 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193858309 + y: -421.504970569 + z: -29.3532733303 + theta: 1.3037024904 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000753683867715 relative_time: 0.539999961853 - theta: 1.3037024904 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19381487 - y: -421.505075014 - z: -29.353300293 - speed: 0.0 - acceleration_s: -0.00031435559382 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19381487 + y: -421.505075014 + z: -29.353300293 + theta: 1.30369113979 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.00031435559382 relative_time: 0.549999952316 - theta: 1.30369113979 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193748157 - y: -421.50520833 - z: -29.3533565309 - speed: 0.0 - acceleration_s: 9.83186373825e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193748157 + y: -421.50520833 + z: -29.3533565309 + theta: 1.30368095885 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 9.83186373825e-05 relative_time: 0.55999994278 - theta: 1.30368095885 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193717231 - y: -421.505305771 - z: -29.3533513108 - speed: 0.0 - acceleration_s: 0.00047663575884 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193717231 + y: -421.505305771 + z: -29.3533513108 + theta: 1.30369256642 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00047663575884 relative_time: 0.569999933243 - theta: 1.30369256642 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193633252 - y: -421.505425618 - z: -29.3533634003 - speed: 0.0 - acceleration_s: 0.000814305668824 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193633252 + y: -421.505425618 + z: -29.3533634003 + theta: 1.30365688489 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000814305668824 relative_time: 0.579999923706 - theta: 1.30365688489 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193599277 - y: -421.50553393 - z: -29.353378837 - speed: 0.0 - acceleration_s: 0.00110649028159 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193599277 + y: -421.50553393 + z: -29.353378837 + theta: 1.30368961265 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00110649028159 relative_time: 0.589999914169 - theta: 1.30368961265 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193543717 - y: -421.505628397 - z: -29.3534004651 - speed: 0.0 - acceleration_s: 0.00134980513316 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193543717 + y: -421.505628397 + z: -29.3534004651 + theta: 1.30366366045 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00134980513316 relative_time: 0.599999904633 - theta: 1.30366366045 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193473178 - y: -421.505737629 - z: -29.3534041746 - speed: 0.0 - acceleration_s: 0.00154228642445 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193473178 + y: -421.505737629 + z: -29.3534041746 + theta: 1.30366918624 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00154228642445 relative_time: 0.609999895096 - theta: 1.30366918624 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193440619 - y: -421.505821904 - z: -29.3533851001 - speed: 0.0 - acceleration_s: 0.00168332697706 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193440619 + y: -421.505821904 + z: -29.3533851001 + theta: 1.30369172106 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00168332697706 relative_time: 0.620000123978 - theta: 1.30369172106 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193392594 - y: -421.505910867 - z: -29.3534099674 - speed: 0.0 - acceleration_s: 0.00177358504218 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193392594 + y: -421.505910867 + z: -29.3534099674 + theta: 1.30371128922 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00177358504218 relative_time: 0.630000114441 - theta: 1.30371128922 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193324327 - y: -421.506001434 - z: -29.3534284895 - speed: 0.0 - acceleration_s: 0.00181487023795 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193324327 + y: -421.506001434 + z: -29.3534284895 + theta: 1.30370613227 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00181487023795 relative_time: 0.640000104904 - theta: 1.30370613227 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193283725 - y: -421.506061673 - z: -29.3534227209 - speed: 0.0 - acceleration_s: 0.00181001109911 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193283725 + y: -421.506061673 + z: -29.3534227209 + theta: 1.30371671249 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00181001109911 relative_time: 0.650000095367 - theta: 1.30371671249 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193187982 - y: -421.506151451 - z: -29.3534157369 - speed: 0.0 - acceleration_s: 0.00176270880821 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193187982 + y: -421.506151451 + z: -29.3534157369 + theta: 1.3036848198 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00176270880821 relative_time: 0.660000085831 - theta: 1.3036848198 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193156253 - y: -421.50620864 - z: -29.3534106696 - speed: 0.0 - acceleration_s: 0.00167738164866 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193156253 + y: -421.50620864 + z: -29.3534106696 + theta: 1.30373178386 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00167738164866 relative_time: 0.670000076294 - theta: 1.30373178386 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193064675 - y: -421.506275914 - z: -29.3534256741 - speed: 0.0 - acceleration_s: 0.00155900458583 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193064675 + y: -421.506275914 + z: -29.3534256741 + theta: 1.30368992906 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00155900458583 relative_time: 0.680000066757 - theta: 1.30368992906 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192988732 - y: -421.506341843 - z: -29.353458493 - speed: 0.0 - acceleration_s: 0.0014129481541 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192988732 + y: -421.506341843 + z: -29.353458493 + theta: 1.30368818211 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.0014129481541 relative_time: 0.69000005722 - theta: 1.30368818211 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192951222 - y: -421.506374706 - z: -29.3534433777 - speed: 0.0 - acceleration_s: 0.00124482051892 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192951222 + y: -421.506374706 + z: -29.3534433777 + theta: 1.30371938826 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00124482051892 relative_time: 0.700000047684 - theta: 1.30371938826 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192841958 - y: -421.506440448 - z: -29.3534080787 - speed: 0.0 - acceleration_s: 0.00106031620608 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192841958 + y: -421.506440448 + z: -29.3534080787 + theta: 1.3036778623 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00106031620608 relative_time: 0.710000038147 - theta: 1.3036778623 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192758828 - y: -421.506497767 - z: -29.353447699 - speed: 0.0 - acceleration_s: 0.000865074560681 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192758828 + y: -421.506497767 + z: -29.353447699 + theta: 1.30365732718 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000865074560681 relative_time: 0.72000002861 - theta: 1.30365732718 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192705034 - y: -421.506531167 - z: -29.3534537693 - speed: 0.0 - acceleration_s: 0.000664550529315 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192705034 + y: -421.506531167 + z: -29.3534537693 + theta: 1.30366396516 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000664550529315 relative_time: 0.730000019073 - theta: 1.30366396516 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192619922 - y: -421.506593737 - z: -29.3534769146 - speed: 0.0 - acceleration_s: 0.000463899865242 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192619922 + y: -421.506593737 + z: -29.3534769146 + theta: 1.30366479129 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000463899865242 relative_time: 0.740000009537 - theta: 1.30366479129 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192562524 - y: -421.50662754 - z: -29.3534182897 - speed: 0.0 - acceleration_s: 0.000267880351363 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192562524 + y: -421.50662754 + z: -29.3534182897 + theta: 1.30367538456 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000267880351363 relative_time: 0.75 - theta: 1.30367538456 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192490792 - y: -421.506679016 - z: -29.3534115953 - speed: 0.0 - acceleration_s: 8.07701324528e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192490792 + y: -421.506679016 + z: -29.3534115953 + theta: 1.30367839871 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 8.07701324528e-05 relative_time: 0.759999990463 - theta: 1.30367839871 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19243139 - y: -421.506740037 - z: -29.353446248 - speed: 0.0 - acceleration_s: -9.36962419459e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19243139 + y: -421.506740037 + z: -29.353446248 + theta: 1.30369941316 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -9.36962419459e-05 relative_time: 0.769999980927 - theta: 1.30369941316 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192370638 - y: -421.506781356 - z: -29.3534486443 - speed: 0.0 - acceleration_s: -0.000252373928604 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192370638 + y: -421.506781356 + z: -29.3534486443 + theta: 1.30369947082 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000252373928604 relative_time: 0.77999997139 - theta: 1.30369947082 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192260526 - y: -421.506854544 - z: -29.353446424 - speed: 0.0 - acceleration_s: -0.000392736353302 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192260526 + y: -421.506854544 + z: -29.353446424 + theta: 1.30365791252 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000392736353302 relative_time: 0.789999961853 - theta: 1.30365791252 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192227474 - y: -421.506902486 - z: -29.3534084801 - speed: 0.0 - acceleration_s: -0.000512886914991 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192227474 + y: -421.506902486 + z: -29.3534084801 + theta: 1.303695733 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000512886914991 relative_time: 0.799999952316 - theta: 1.303695733 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192168877 - y: -421.506957479 - z: -29.353441813 - speed: 0.0 - acceleration_s: -0.000611554866625 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192168877 + y: -421.506957479 + z: -29.353441813 + theta: 1.30368318212 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000611554866625 relative_time: 0.80999994278 - theta: 1.30368318212 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192169975 - y: -421.506966941 - z: -29.3534983313 - speed: 0.0 - acceleration_s: -0.000688076701816 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192169975 + y: -421.506966941 + z: -29.3534983313 + theta: 1.30365682772 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000688076701816 relative_time: 0.819999933243 - theta: 1.30365682772 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19221879 - y: -421.506947656 - z: -29.3535228651 - speed: 0.0 - acceleration_s: -0.000742364616083 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19221879 + y: -421.506947656 + z: -29.3535228651 + theta: 1.30366556821 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000742364616083 relative_time: 0.829999923706 - theta: 1.30366556821 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192220643 - y: -421.50696007 - z: -29.3535004426 - speed: 0.0 - acceleration_s: -0.000774863795283 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192220643 + y: -421.50696007 + z: -29.3535004426 + theta: 1.30364491805 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000774863795283 relative_time: 0.839999914169 - theta: 1.30364491805 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192281566 - y: -421.50696022 - z: -29.3535123412 - speed: 0.0 - acceleration_s: -0.000786500411829 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192281566 + y: -421.50696022 + z: -29.3535123412 + theta: 1.30369230726 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000786500411829 relative_time: 0.849999904633 - theta: 1.30369230726 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192319939 - y: -421.506965834 - z: -29.3535406087 - speed: 0.0 - acceleration_s: -0.000778622282891 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192319939 + y: -421.506965834 + z: -29.3535406087 + theta: 1.30370092275 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000778622282891 relative_time: 0.859999895096 - theta: 1.30370092275 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192347886 - y: -421.506990239 - z: -29.3536017109 - speed: 0.0 - acceleration_s: -0.000752934166282 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192347886 + y: -421.506990239 + z: -29.3536017109 + theta: 1.30370924225 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000752934166282 relative_time: 0.870000123978 - theta: 1.30370924225 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192370468 - y: -421.507000038 - z: -29.35360929 - speed: 0.0 - acceleration_s: -0.000711429642927 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192370468 + y: -421.507000038 + z: -29.35360929 + theta: 1.30368366142 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000711429642927 relative_time: 0.880000114441 - theta: 1.30368366142 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192391693 - y: -421.507025769 - z: -29.3536005933 - speed: 0.0 - acceleration_s: -0.000656321463881 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192391693 + y: -421.507025769 + z: -29.3536005933 + theta: 1.30368267167 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000656321463881 relative_time: 0.890000104904 - theta: 1.30368267167 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192435691 - y: -421.50703917 - z: -29.353602998 - speed: 0.0 - acceleration_s: -0.000589972130006 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192435691 + y: -421.50703917 + z: -29.353602998 + theta: 1.3037051582 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000589972130006 relative_time: 0.900000095367 - theta: 1.3037051582 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192458752 - y: -421.507065233 - z: -29.3536685612 - speed: 0.0 - acceleration_s: -0.000514826329348 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192458752 + y: -421.507065233 + z: -29.3536685612 + theta: 1.30367984832 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000514826329348 relative_time: 0.910000085831 - theta: 1.30367984832 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192487502 - y: -421.507096598 - z: -29.3537062136 - speed: 0.0 - acceleration_s: -0.000433346686728 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192487502 + y: -421.507096598 + z: -29.3537062136 + theta: 1.3036992781 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000433346686728 relative_time: 0.920000076294 - theta: 1.3036992781 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192506115 - y: -421.507111086 - z: -29.3536865907 - speed: 0.0 - acceleration_s: -0.000347954088531 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192506115 + y: -421.507111086 + z: -29.3536865907 + theta: 1.30366872549 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000347954088531 relative_time: 0.930000066757 - theta: 1.30366872549 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192562434 - y: -421.507134005 - z: -29.3537156135 - speed: 0.0 - acceleration_s: -0.000260973639024 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192562434 + y: -421.507134005 + z: -29.3537156135 + theta: 1.30371714239 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000260973639024 relative_time: 0.94000005722 - theta: 1.30371714239 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192592832 - y: -421.50716232 - z: -29.3537651207 - speed: 0.0 - acceleration_s: -0.000174587089069 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192592832 + y: -421.50716232 + z: -29.3537651207 + theta: 1.30372901576 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000174587089069 relative_time: 0.950000047684 - theta: 1.30372901576 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192595621 - y: -421.507181433 - z: -29.3537958972 - speed: 0.0 - acceleration_s: -9.07923594518e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192595621 + y: -421.507181433 + z: -29.3537958972 + theta: 1.30368724858 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -9.07923594518e-05 relative_time: 0.960000038147 - theta: 1.30368724858 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19261921 - y: -421.507214326 - z: -29.3538402999 - speed: 0.0 - acceleration_s: -1.13705647004e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19261921 + y: -421.507214326 + z: -29.3538402999 + theta: 1.30370357201 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -1.13705647004e-05 relative_time: 0.97000002861 - theta: 1.30370357201 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192648996 - y: -421.507228323 - z: -29.353838047 - speed: 0.0 - acceleration_s: 6.21392658503e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192648996 + y: -421.507228323 + z: -29.353838047 + theta: 1.30370437614 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 6.21392658503e-05 relative_time: 0.980000019073 - theta: 1.30370437614 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19265853 - y: -421.507248592 - z: -29.3538268805 - speed: 0.0 - acceleration_s: 0.000128457770462 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19265853 + y: -421.507248592 + z: -29.3538268805 + theta: 1.3036898696 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000128457770462 relative_time: 0.990000009537 - theta: 1.3036898696 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192670059 - y: -421.50727262 - z: -29.3538884073 - speed: 0.0 - acceleration_s: 0.000186575323705 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 - relative_time: 1.0 - theta: 1.30368598022 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192701148 - y: -421.507271032 - z: -29.3539256398 - speed: 0.0 - acceleration_s: 0.000235754937918 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192670059 + y: -421.50727262 + z: -29.3538884073 + theta: 1.30368598022 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000186575323705 + relative_time: 1 +} +trajectory_point { + path_point { + x: -966.192701148 + y: -421.507271032 + z: -29.3539256398 + theta: 1.30369133104 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000235754937918 relative_time: 1.00999999046 - theta: 1.30369133104 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192689016 - y: -421.507297343 - z: -29.3539255392 - speed: 0.0 - acceleration_s: 0.000275528486519 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192689016 + y: -421.507297343 + z: -29.3539255392 + theta: 1.30366759159 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000275528486519 relative_time: 1.01999998093 - theta: 1.30366759159 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192724013 - y: -421.507297677 - z: -29.3539379239 - speed: 0.0 - acceleration_s: 0.000305686858265 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192724013 + y: -421.507297677 + z: -29.3539379239 + theta: 1.30369046987 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000305686858265 relative_time: 1.02999997139 - theta: 1.30369046987 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192746928 - y: -421.507299742 - z: -29.3539741589 - speed: 0.0 - acceleration_s: 0.000326264747818 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192746928 + y: -421.507299742 + z: -29.3539741589 + theta: 1.3036934059 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000326264747818 relative_time: 1.03999996185 - theta: 1.3036934059 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192752248 - y: -421.507311846 - z: -29.3539927313 - speed: 0.0 - acceleration_s: 0.000337520859981 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192752248 + y: -421.507311846 + z: -29.3539927313 + theta: 1.30369467735 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000337520859981 relative_time: 1.04999995232 - theta: 1.30369467735 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192774932 - y: -421.507297279 - z: -29.3540019123 - speed: 0.0 - acceleration_s: 0.00033991435308 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192774932 + y: -421.507297279 + z: -29.3540019123 + theta: 1.30369460302 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.00033991435308 relative_time: 1.05999994278 - theta: 1.30369460302 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192776677 - y: -421.507303179 - z: -29.3539766409 - speed: 0.0 - acceleration_s: 0.000334078371673 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192776677 + y: -421.507303179 + z: -29.3539766409 + theta: 1.30369316512 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000334078371673 relative_time: 1.06999993324 - theta: 1.30369316512 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192782401 - y: -421.507302587 - z: -29.3539948165 - speed: 0.0 - acceleration_s: 0.000320791521549 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192782401 + y: -421.507302587 + z: -29.3539948165 + theta: 1.30368487383 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000320791521549 relative_time: 1.07999992371 - theta: 1.30368487383 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192806523 - y: -421.507290617 - z: -29.3540267879 - speed: 0.0 - acceleration_s: 0.000300948122261 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192806523 + y: -421.507290617 + z: -29.3540267879 + theta: 1.30369710032 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000300948122261 relative_time: 1.08999991417 - theta: 1.30369710032 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192795787 - y: -421.507293864 - z: -29.3540546503 - speed: 0.0 - acceleration_s: 0.000275528036392 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192795787 + y: -421.507293864 + z: -29.3540546503 + theta: 1.30368159865 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000275528036392 relative_time: 1.09999990463 - theta: 1.30368159865 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192842411 - y: -421.507264148 - z: -29.3540480789 - speed: 0.0 - acceleration_s: 0.000245566822561 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192842411 + y: -421.507264148 + z: -29.3540480789 + theta: 1.30372398788 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000245566822561 relative_time: 1.1099998951 - theta: 1.30372398788 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192809588 - y: -421.507265984 - z: -29.3540171124 - speed: 0.0 - acceleration_s: 0.000212126893394 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192809588 + y: -421.507265984 + z: -29.3540171124 + theta: 1.30367639837 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000212126893394 relative_time: 1.12000012398 - theta: 1.30367639837 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.1927981 - y: -421.507268566 - z: -29.3540442027 - speed: 0.0 - acceleration_s: 0.000176270282864 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.1927981 + y: -421.507268566 + z: -29.3540442027 + theta: 1.30364507656 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000176270282864 relative_time: 1.13000011444 - theta: 1.30364507656 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192820817 - y: -421.507240031 - z: -29.3540426157 - speed: 0.0 - acceleration_s: 0.0001390335423 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192820817 + y: -421.507240031 + z: -29.3540426157 + theta: 1.30364812276 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.0001390335423 relative_time: 1.1400001049 - theta: 1.30364812276 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192803463 - y: -421.507243708 - z: -29.3540450456 - speed: 0.0 - acceleration_s: 0.000101405193553 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192803463 + y: -421.507243708 + z: -29.3540450456 + theta: 1.30362532241 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 0.000101405193553 relative_time: 1.15000009537 - theta: 1.30362532241 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192831664 - y: -421.507224688 - z: -29.3540464174 - speed: 0.0 - acceleration_s: 6.43060739335e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192831664 + y: -421.507224688 + z: -29.3540464174 + theta: 1.30364321156 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 6.43060739335e-05 relative_time: 1.16000008583 - theta: 1.30364321156 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192838514 - y: -421.507220235 - z: -29.3540581092 - speed: 0.0 - acceleration_s: 2.85728130702e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192838514 + y: -421.507220235 + z: -29.3540581092 + theta: 1.3036417987 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 2.85728130702e-05 relative_time: 1.17000007629 - theta: 1.3036417987 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19284412 - y: -421.507217412 - z: -29.354054057 - speed: 0.0 - acceleration_s: -5.05541100273e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19284412 + y: -421.507217412 + z: -29.354054057 + theta: 1.30364648775 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.05541100273e-06 relative_time: 1.18000006676 - theta: 1.30364648775 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192866836 - y: -421.507202573 - z: -29.3541095536 - speed: 0.0 - acceleration_s: -3.59467782939e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192866836 + y: -421.507202573 + z: -29.3541095536 + theta: 1.30365049432 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -3.59467782939e-05 relative_time: 1.19000005722 - theta: 1.30365049432 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192832865 - y: -421.5072111 - z: -29.3540684907 - speed: 0.0 - acceleration_s: -6.35834211288e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192832865 + y: -421.5072111 + z: -29.3540684907 + theta: 1.30360127541 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -6.35834211288e-05 relative_time: 1.20000004768 - theta: 1.30360127541 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192874705 - y: -421.50719854 - z: -29.3540572766 - speed: 0.0 - acceleration_s: -8.75648079777e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192874705 + y: -421.50719854 + z: -29.3540572766 + theta: 1.30364124996 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -8.75648079777e-05 relative_time: 1.21000003815 - theta: 1.30364124996 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192869797 - y: -421.507203669 - z: -29.3540788023 - speed: 0.0 - acceleration_s: -0.000107608086637 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192869797 + y: -421.507203669 + z: -29.3540788023 + theta: 1.30361701493 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000107608086637 relative_time: 1.22000002861 - theta: 1.30361701493 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192878973 - y: -421.507217415 - z: -29.3541150261 - speed: 0.0 - acceleration_s: -0.000123545615325 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192878973 + y: -421.507217415 + z: -29.3541150261 + theta: 1.30363215099 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000123545615325 relative_time: 1.23000001907 - theta: 1.30363215099 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192924887 - y: -421.507202412 - z: -29.3541193474 - speed: 0.0 - acceleration_s: -0.000135319959039 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192924887 + y: -421.507202412 + z: -29.3541193474 + theta: 1.3036643063 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000135319959039 relative_time: 1.24000000954 - theta: 1.3036643063 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192918846 - y: -421.507222773 - z: -29.3541205702 - speed: 0.0 - acceleration_s: -0.000142976666916 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192918846 + y: -421.507222773 + z: -29.3541205702 + theta: 1.30365168206 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000142976666916 relative_time: 1.25 - theta: 1.30365168206 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192970775 - y: -421.507228387 - z: -29.3541171672 - speed: 0.0 - acceleration_s: -0.000146655174334 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192970775 + y: -421.507228387 + z: -29.3541171672 + theta: 1.30370636707 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000146655174334 relative_time: 1.25999999046 - theta: 1.30370636707 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192924538 - y: -421.507257179 - z: -29.3541582823 - speed: 0.0 - acceleration_s: -0.000146578191092 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192924538 + y: -421.507257179 + z: -29.3541582823 + theta: 1.30361480723 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000146578191092 relative_time: 1.26999998093 - theta: 1.30361480723 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192951285 - y: -421.507286774 - z: -29.3541973103 - speed: 0.0 - acceleration_s: -0.000143039944757 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192951285 + y: -421.507286774 + z: -29.3541973103 + theta: 1.30365211629 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000143039944757 relative_time: 1.27999997139 - theta: 1.30365211629 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192954095 - y: -421.50729946 - z: -29.3542019874 - speed: 0.0 - acceleration_s: -0.000136393646632 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192954095 + y: -421.50729946 + z: -29.3542019874 + theta: 1.30362511852 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000136393646632 relative_time: 1.28999996185 - theta: 1.30362511852 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192946421 - y: -421.507327055 - z: -29.3542013681 - speed: 0.0 - acceleration_s: -0.000127038537611 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192946421 + y: -421.507327055 + z: -29.3542013681 + theta: 1.3036037062 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000127038537611 relative_time: 1.29999995232 - theta: 1.3036037062 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192981551 - y: -421.507343727 - z: -29.3542128643 - speed: 0.0 - acceleration_s: -0.000115406853323 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192981551 + y: -421.507343727 + z: -29.3542128643 + theta: 1.30363878847 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000115406853323 relative_time: 1.30999994278 - theta: 1.30363878847 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193010283 - y: -421.507354049 - z: -29.3542280784 - speed: 0.0 - acceleration_s: -0.000101951023486 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193010283 + y: -421.507354049 + z: -29.3542280784 + theta: 1.30366028588 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -0.000101951023486 relative_time: 1.31999993324 - theta: 1.30366028588 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19300047 - y: -421.507390744 - z: -29.3542986587 - speed: 0.0 - acceleration_s: -8.71313903113e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19300047 + y: -421.507390744 + z: -29.3542986587 + theta: 1.30364439376 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -8.71313903113e-05 relative_time: 1.32999992371 - theta: 1.30364439376 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193030341 - y: -421.507400856 - z: -29.3542980561 - speed: 0.0 - acceleration_s: -7.14046963572e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193030341 + y: -421.507400856 + z: -29.3542980561 + theta: 1.30366024443 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -7.14046963572e-05 relative_time: 1.33999991417 - theta: 1.30366024443 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193027424 - y: -421.507422887 - z: -29.3542742282 - speed: 0.0 - acceleration_s: -5.52135545297e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193027424 + y: -421.507422887 + z: -29.3542742282 + theta: 1.3036416069 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.52135545297e-05 relative_time: 1.34999990463 - theta: 1.3036416069 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19303868 - y: -421.507450481 - z: -29.3543360587 - speed: 0.0 - acceleration_s: -3.89770730985e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19303868 + y: -421.507450481 + z: -29.3543360587 + theta: 1.30364837035 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -3.89770730985e-05 relative_time: 1.3599998951 - theta: 1.30364837035 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19302794 - y: -421.507457442 - z: -29.3543398678 - speed: 0.0 - acceleration_s: -2.30827678078e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19302794 + y: -421.507457442 + z: -29.3543398678 + theta: 1.30360912382 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.30827678078e-05 relative_time: 1.37000012398 - theta: 1.30360912382 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193069936 - y: -421.507474919 - z: -29.3543684995 - speed: 0.0 - acceleration_s: -7.87985239143e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193069936 + y: -421.507474919 + z: -29.3543684995 + theta: 1.30367313184 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -7.87985239143e-06 relative_time: 1.38000011444 - theta: 1.30367313184 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193073257 - y: -421.507481688 - z: -29.3543552961 - speed: 0.0 - acceleration_s: 6.32604095036e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193073257 + y: -421.507481688 + z: -29.3543552961 + theta: 1.30366845175 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 6.32604095036e-06 relative_time: 1.3900001049 - theta: 1.30366845175 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193063579 - y: -421.507493868 - z: -29.3543775454 - speed: 0.0 - acceleration_s: 1.92766974384e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193063579 + y: -421.507493868 + z: -29.3543775454 + theta: 1.30365051662 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 1.92766974384e-05 relative_time: 1.40000009537 - theta: 1.30365051662 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193049306 - y: -421.507517707 - z: -29.3544289721 - speed: 0.0 - acceleration_s: 3.07637335547e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193049306 + y: -421.507517707 + z: -29.3544289721 + theta: 1.30363169423 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 3.07637335547e-05 relative_time: 1.41000008583 - theta: 1.30363169423 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193085973 - y: -421.507500082 - z: -29.3544281721 - speed: 0.0 - acceleration_s: 4.06296424327e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193085973 + y: -421.507500082 + z: -29.3544281721 + theta: 1.3036751533 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 4.06296424327e-05 relative_time: 1.42000007629 - theta: 1.3036751533 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193060414 - y: -421.507516822 - z: -29.3544108691 - speed: 0.0 - acceleration_s: 4.87675526481e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193060414 + y: -421.507516822 + z: -29.3544108691 + theta: 1.30364691719 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 4.87675526481e-05 relative_time: 1.43000006676 - theta: 1.30364691719 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193058338 - y: -421.507522292 - z: -29.3544238638 - speed: 0.0 - acceleration_s: 5.51198063752e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193058338 + y: -421.507522292 + z: -29.3544238638 + theta: 1.30364245178 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 5.51198063752e-05 relative_time: 1.44000005722 - theta: 1.30364245178 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193071657 - y: -421.507515406 - z: -29.3544660825 - speed: 0.0 - acceleration_s: 5.96754826102e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193071657 + y: -421.507515406 + z: -29.3544660825 + theta: 1.30365436756 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 5.96754826102e-05 relative_time: 1.45000004768 - theta: 1.30365436756 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193033702 - y: -421.507535327 - z: -29.3544764798 - speed: 0.0 - acceleration_s: 6.24670063793e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193033702 + y: -421.507535327 + z: -29.3544764798 + theta: 1.30360972336 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 6.24670063793e-05 relative_time: 1.46000003815 - theta: 1.30360972336 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193052875 - y: -421.507517266 - z: -29.3544606874 - speed: 0.0 - acceleration_s: 6.35659955534e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193052875 + y: -421.507517266 + z: -29.3544606874 + theta: 1.30363468851 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 6.35659955534e-05 relative_time: 1.47000002861 - theta: 1.30363468851 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193042134 - y: -421.507522121 - z: -29.3544590836 - speed: 0.0 - acceleration_s: 6.30785031634e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193042134 + y: -421.507522121 + z: -29.3544590836 + theta: 1.30362319207 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 6.30785031634e-05 relative_time: 1.48000001907 - theta: 1.30362319207 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193055531 - y: -421.507521167 - z: -29.3544632774 - speed: 0.0 - acceleration_s: 6.11398151599e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193055531 + y: -421.507521167 + z: -29.3544632774 + theta: 1.30365283257 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 6.11398151599e-05 relative_time: 1.49000000954 - theta: 1.30365283257 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193053178 - y: -421.507507315 - z: -29.3544737194 - speed: 0.0 - acceleration_s: 5.79089616539e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193053178 + y: -421.507507315 + z: -29.3544737194 + theta: 1.3036452107 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 5.79089616539e-05 relative_time: 1.5 - theta: 1.3036452107 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193020236 - y: -421.507521199 - z: -29.3545005033 - speed: 0.0 - acceleration_s: 5.35630941768e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193020236 + y: -421.507521199 + z: -29.3545005033 + theta: 1.3036143389 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 5.35630941768e-05 relative_time: 1.50999999046 - theta: 1.3036143389 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193049852 - y: -421.507501391 - z: -29.3544831024 - speed: 0.0 - acceleration_s: 4.82918728065e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193049852 + y: -421.507501391 + z: -29.3544831024 + theta: 1.30365737109 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 4.82918728065e-05 relative_time: 1.51999998093 - theta: 1.30365737109 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19303466 - y: -421.507503457 - z: -29.354439293 - speed: 0.0 - acceleration_s: 4.22919955791e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19303466 + y: -421.507503457 + z: -29.354439293 + theta: 1.30364649315 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 4.22919955791e-05 relative_time: 1.52999997139 - theta: 1.30364649315 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193025381 - y: -421.507519628 - z: -29.3545303745 - speed: 0.0 - acceleration_s: 3.57619889245e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193025381 + y: -421.507519628 + z: -29.3545303745 + theta: 1.30363585228 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 3.57619889245e-05 relative_time: 1.53999996185 - theta: 1.30363585228 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193051554 - y: -421.507496638 - z: -29.3545201132 - speed: 0.0 - acceleration_s: 2.88973624338e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193051554 + y: -421.507496638 + z: -29.3545201132 + theta: 1.30366899997 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 2.88973624338e-05 relative_time: 1.54999995232 - theta: 1.30366899997 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193030012 - y: -421.50751684 - z: -29.3545046095 - speed: 0.0 - acceleration_s: 2.18862145716e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193030012 + y: -421.50751684 + z: -29.3545046095 + theta: 1.30364617651 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 2.18862145716e-05 relative_time: 1.55999994278 - theta: 1.30364617651 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193018731 - y: -421.507518938 - z: -29.3544990998 - speed: 0.0 - acceleration_s: 1.49053585009e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193018731 + y: -421.507518938 + z: -29.3544990998 + theta: 1.30363329339 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 1.49053585009e-05 relative_time: 1.56999993324 - theta: 1.30363329339 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193043082 - y: -421.507514379 - z: -29.3544949926 - speed: 0.0 - acceleration_s: 8.11701945006e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193043082 + y: -421.507514379 + z: -29.3544949926 + theta: 1.30366143324 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 8.11701945006e-06 relative_time: 1.57999992371 - theta: 1.30366143324 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193051121 - y: -421.507531635 - z: -29.3545352714 - speed: 0.0 - acceleration_s: 1.66613746343e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193051121 + y: -421.507531635 + z: -29.3545352714 + theta: 1.30368664791 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 1.66613746343e-06 relative_time: 1.58999991417 - theta: 1.30368664791 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193045663 - y: -421.507528125 - z: -29.3545412105 - speed: 0.0 - acceleration_s: -4.32170764506e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193045663 + y: -421.507528125 + z: -29.3545412105 + theta: 1.30367442819 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -4.32170764506e-06 relative_time: 1.59999990463 - theta: 1.30367442819 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193044493 - y: -421.507540987 - z: -29.3545109499 - speed: 0.0 - acceleration_s: -9.74174842535e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193044493 + y: -421.507540987 + z: -29.3545109499 + theta: 1.30368532247 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -9.74174842535e-06 relative_time: 1.6099998951 - theta: 1.30368532247 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19303491 - y: -421.507556789 - z: -29.3545456566 - speed: 0.0 - acceleration_s: -1.45108731781e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19303491 + y: -421.507556789 + z: -29.3545456566 + theta: 1.30367212358 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -1.45108731781e-05 relative_time: 1.62000012398 - theta: 1.30367212358 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193041451 - y: -421.507555307 - z: -29.3545614295 - speed: 0.0 - acceleration_s: -1.8567888151e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193041451 + y: -421.507555307 + z: -29.3545614295 + theta: 1.30368437583 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -1.8567888151e-05 relative_time: 1.63000011444 - theta: 1.30368437583 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193017903 - y: -421.507587098 - z: -29.354598185 - speed: 0.0 - acceleration_s: -2.18732377992e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193017903 + y: -421.507587098 + z: -29.354598185 + theta: 1.30366803231 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.18732377992e-05 relative_time: 1.6400001049 - theta: 1.30366803231 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193009224 - y: -421.507589616 - z: -29.3545846501 - speed: 0.0 - acceleration_s: -2.44082322271e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193009224 + y: -421.507589616 + z: -29.3545846501 + theta: 1.30365406664 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.44082322271e-05 relative_time: 1.65000009537 - theta: 1.30365406664 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19300691 - y: -421.507605429 - z: -29.3546088478 - speed: 0.0 - acceleration_s: -2.61738388578e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19300691 + y: -421.507605429 + z: -29.3546088478 + theta: 1.3036592583 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.61738388578e-05 relative_time: 1.66000008583 - theta: 1.3036592583 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193005376 - y: -421.507622003 - z: -29.3546050489 - speed: 0.0 - acceleration_s: -2.71891013397e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193005376 + y: -421.507622003 + z: -29.3546050489 + theta: 1.30367937313 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.71891013397e-05 relative_time: 1.67000007629 - theta: 1.30367937313 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193007908 - y: -421.507623897 - z: -29.3546507042 - speed: 0.0 - acceleration_s: -2.74892526983e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193007908 + y: -421.507623897 + z: -29.3546507042 + theta: 1.30369032748 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.74892526983e-05 relative_time: 1.68000006676 - theta: 1.30369032748 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193002728 - y: -421.507648282 - z: -29.3546753246 - speed: 0.0 - acceleration_s: -2.71235918389e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193002728 + y: -421.507648282 + z: -29.3546753246 + theta: 1.30370528265 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.71235918389e-05 relative_time: 1.69000005722 - theta: 1.30370528265 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192985816 - y: -421.507656102 - z: -29.354662003 - speed: 0.0 - acceleration_s: -2.61531927916e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192985816 + y: -421.507656102 + z: -29.354662003 + theta: 1.30369733894 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.61531927916e-05 relative_time: 1.70000004768 - theta: 1.30369733894 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192959863 - y: -421.507673406 - z: -29.35466797 - speed: 0.0 - acceleration_s: -2.46485147002e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192959863 + y: -421.507673406 + z: -29.35466797 + theta: 1.30367712934 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.46485147002e-05 relative_time: 1.71000003815 - theta: 1.30367712934 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192939852 - y: -421.507695346 - z: -29.3546823002 - speed: 0.0 - acceleration_s: -2.26869776506e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192939852 + y: -421.507695346 + z: -29.3546823002 + theta: 1.3036783855 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.26869776506e-05 relative_time: 1.72000002861 - theta: 1.3036783855 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192957429 - y: -421.507688153 - z: -29.3547094529 - speed: 0.0 - acceleration_s: -2.0350565195e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192957429 + y: -421.507688153 + z: -29.3547094529 + theta: 1.30371540214 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.0350565195e-05 relative_time: 1.73000001907 - theta: 1.30371540214 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192905538 - y: -421.507718226 - z: -29.3546963762 - speed: 0.0 - acceleration_s: -1.77235090619e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192905538 + y: -421.507718226 + z: -29.3546963762 + theta: 1.30366566399 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -1.77235090619e-05 relative_time: 1.74000000954 - theta: 1.30366566399 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192923143 - y: -421.507722258 - z: -29.3546737293 - speed: 0.0 - acceleration_s: -1.48901052574e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192923143 + y: -421.507722258 + z: -29.3546737293 + theta: 1.30371435915 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -1.48901052574e-05 relative_time: 1.75 - theta: 1.30371435915 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192891522 - y: -421.507735895 - z: -29.3547194395 - speed: 0.0 - acceleration_s: -1.19327037838e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192891522 + y: -421.507735895 + z: -29.3547194395 + theta: 1.30367424076 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -1.19327037838e-05 relative_time: 1.75999999046 - theta: 1.30367424076 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192883677 - y: -421.507761832 - z: -29.3547397163 - speed: 0.0 - acceleration_s: -8.92990673934e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192883677 + y: -421.507761832 + z: -29.3547397163 + theta: 1.30369139544 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -8.92990673934e-06 relative_time: 1.76999998093 - theta: 1.30369139544 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192861826 - y: -421.507762836 - z: -29.3547125496 - speed: 0.0 - acceleration_s: -5.95500184276e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192861826 + y: -421.507762836 + z: -29.3547125496 + theta: 1.30367818293 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.95500184276e-06 relative_time: 1.77999997139 - theta: 1.30367818293 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19284592 - y: -421.507782019 - z: -29.3546851398 - speed: 0.0 - acceleration_s: -3.07465063726e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19284592 + y: -421.507782019 + z: -29.3546851398 + theta: 1.30367339948 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -3.07465063726e-06 relative_time: 1.78999996185 - theta: 1.30367339948 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192824585 - y: -421.507803039 - z: -29.3547074916 - speed: 0.0 - acceleration_s: -3.4784297613e-07 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192824585 + y: -421.507803039 + z: -29.3547074916 + theta: 1.3036675775 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -3.4784297613e-07 relative_time: 1.79999995232 - theta: 1.3036675775 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192792638 - y: -421.507785627 - z: -29.3547847262 - speed: 0.0 - acceleration_s: 2.17487796416e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192792638 + y: -421.507785627 + z: -29.3547847262 + theta: 1.30357227967 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 2.17487796416e-06 relative_time: 1.80999994278 - theta: 1.30357227967 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192799761 - y: -421.507764241 - z: -29.3548171883 - speed: 0.0 - acceleration_s: 4.45192279573e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192799761 + y: -421.507764241 + z: -29.3548171883 + theta: 1.30355892162 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 4.45192279573e-06 relative_time: 1.81999993324 - theta: 1.30355892162 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192833332 - y: -421.507720093 - z: -29.3548433837 - speed: 0.0 - acceleration_s: 6.45090412184e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192833332 + y: -421.507720093 + z: -29.3548433837 + theta: 1.30357043886 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 6.45090412184e-06 relative_time: 1.82999992371 - theta: 1.30357043886 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192855392 - y: -421.507683546 - z: -29.3548805425 - speed: 0.0 - acceleration_s: 8.14864041692e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192855392 + y: -421.507683546 + z: -29.3548805425 + theta: 1.30356585554 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 8.14864041692e-06 relative_time: 1.83999991417 - theta: 1.30356585554 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192865973 - y: -421.507666347 - z: -29.3549690349 - speed: 0.0 - acceleration_s: 9.5309350149e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192865973 + y: -421.507666347 + z: -29.3549690349 + theta: 1.30356117183 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 9.5309350149e-06 relative_time: 1.84999990463 - theta: 1.30356117183 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192916518 - y: -421.507604841 - z: -29.3550243741 - speed: 0.0 - acceleration_s: 1.05921536459e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192916518 + y: -421.507604841 + z: -29.3550243741 + theta: 1.30358327752 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 1.05921536459e-05 relative_time: 1.8599998951 - theta: 1.30358327752 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192912973 - y: -421.507594842 - z: -29.3550801957 - speed: 0.0 - acceleration_s: 1.13346271004e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192912973 + y: -421.507594842 + z: -29.3550801957 + theta: 1.30355034209 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 1.13346271004e-05 relative_time: 1.87000012398 - theta: 1.30355034209 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192943343 - y: -421.507550314 - z: -29.3550925348 - speed: 0.0 - acceleration_s: 1.17679078581e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192943343 + y: -421.507550314 + z: -29.3550925348 + theta: 1.30357052109 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 1.17679078581e-05 relative_time: 1.88000011444 - theta: 1.30357052109 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.1929366 - y: -421.507522694 - z: -29.3551579639 - speed: 0.0 - acceleration_s: 1.19079109023e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.1929366 + y: -421.507522694 + z: -29.3551579639 + theta: 1.30351804862 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 1.19079109023e-05 relative_time: 1.8900001049 - theta: 1.30351804862 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192967353 - y: -421.507501238 - z: -29.3552375259 - speed: 0.0 - acceleration_s: 1.17759694846e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192967353 + y: -421.507501238 + z: -29.3552375259 + theta: 1.3035448639 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 1.17759694846e-05 relative_time: 1.90000009537 - theta: 1.3035448639 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.192996167 - y: -421.507448252 - z: -29.3553073164 - speed: 0.0 - acceleration_s: 1.13978363508e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.192996167 + y: -421.507448252 + z: -29.3553073164 + theta: 1.30354884637 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 1.13978363508e-05 relative_time: 1.91000008583 - theta: 1.30354884637 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193018801 - y: -421.507421664 - z: -29.3553441344 - speed: 0.0 - acceleration_s: 1.08026599526e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193018801 + y: -421.507421664 + z: -29.3553441344 + theta: 1.30355192623 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 1.08026599526e-05 relative_time: 1.92000007629 - theta: 1.30355192623 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193061975 - y: -421.507379691 - z: -29.3553998414 - speed: 0.0 - acceleration_s: 1.00219635285e-05 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193061975 + y: -421.507379691 + z: -29.3553998414 + theta: 1.30359945163 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 1.00219635285e-05 relative_time: 1.93000006676 - theta: 1.30359945163 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193067372 - y: -421.50733409 - z: -29.3554560002 - speed: 0.0 - acceleration_s: 9.0886527197e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193067372 + y: -421.50733409 + z: -29.3554560002 + theta: 1.30355992416 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 9.0886527197e-06 relative_time: 1.94000005722 - theta: 1.30355992416 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193085437 - y: -421.507321946 - z: -29.3555738349 - speed: 0.0 - acceleration_s: 8.03607469665e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193085437 + y: -421.507321946 + z: -29.3555738349 + theta: 1.30357508559 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 8.03607469665e-06 relative_time: 1.95000004768 - theta: 1.30357508559 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193122585 - y: -421.507261179 - z: -29.3555804929 - speed: 0.0 - acceleration_s: 6.89714869763e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193122585 + y: -421.507261179 + z: -29.3555804929 + theta: 1.30359596446 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 6.89714869763e-06 relative_time: 1.96000003815 - theta: 1.30359596446 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193140248 - y: -421.507240635 - z: -29.3556194799 - speed: 0.0 - acceleration_s: 5.70358453021e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193140248 + y: -421.507240635 + z: -29.3556194799 + theta: 1.30358486213 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 5.70358453021e-06 relative_time: 1.97000002861 - theta: 1.30358486213 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193153896 - y: -421.507219342 - z: -29.355711421 - speed: 0.0 - acceleration_s: 4.4852020554e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193153896 + y: -421.507219342 + z: -29.355711421 + theta: 1.30358969222 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 4.4852020554e-06 relative_time: 1.98000001907 - theta: 1.30358969222 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193204026 - y: -421.507156229 - z: -29.3558286978 - speed: 0.0 - acceleration_s: 3.26936106489e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193204026 + y: -421.507156229 + z: -29.3558286978 + theta: 1.30357961923 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 3.26936106489e-06 relative_time: 1.99000000954 - theta: 1.30357961923 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193183627 - y: -421.50716298 - z: -29.3558530854 - speed: 0.0 - acceleration_s: 2.08050736548e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 - relative_time: 2.0 - theta: 1.30357626071 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19321299 - y: -421.507117586 - z: -29.3558684718 - speed: 0.0 - acceleration_s: 9.39837390504e-07 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193183627 + y: -421.50716298 + z: -29.3558530854 + theta: 1.30357626071 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 2.08050736548e-06 + relative_time: 2 +} +trajectory_point { + path_point { + x: -966.19321299 + y: -421.507117586 + z: -29.3558684718 + theta: 1.30359496179 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: 9.39837390504e-07 relative_time: 2.00999999046 - theta: 1.30359496179 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193213271 - y: -421.507098331 - z: -29.3559808098 - speed: 0.0 - acceleration_s: -1.34919654139e-07 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193213271 + y: -421.507098331 + z: -29.3559808098 + theta: 1.30356985324 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -1.34919654139e-07 relative_time: 2.01999998093 - theta: 1.30356985324 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193234356 - y: -421.507076806 - z: -29.3560244329 - speed: 0.0 - acceleration_s: -1.1296061614e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193234356 + y: -421.507076806 + z: -29.3560244329 + theta: 1.30359252795 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -1.1296061614e-06 relative_time: 2.02999997139 - theta: 1.30359252795 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193229658 - y: -421.507028197 - z: -29.3560700938 - speed: 0.0 - acceleration_s: -2.03363380972e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193229658 + y: -421.507028197 + z: -29.3560700938 + theta: 1.30355255806 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.03363380972e-06 relative_time: 2.03999996185 - theta: 1.30355255806 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.19323994 - y: -421.507015212 - z: -29.3560956335 - speed: 0.0 - acceleration_s: -2.83988374485e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.19323994 + y: -421.507015212 + z: -29.3560956335 + theta: 1.3035582186 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -2.83988374485e-06 relative_time: 2.04999995232 - theta: 1.3035582186 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193266972 - y: -421.50697469 - z: -29.3561282484 - speed: 0.0 - acceleration_s: -3.54452041658e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193266972 + y: -421.50697469 + z: -29.3561282484 + theta: 1.3035960515 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -3.54452041658e-06 relative_time: 2.05999994278 - theta: 1.3035960515 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193287447 - y: -421.506940855 - z: -29.3562552137 - speed: 0.0 - acceleration_s: -4.14673178093e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193287447 + y: -421.506940855 + z: -29.3562552137 + theta: 1.3035906954 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -4.14673178093e-06 relative_time: 2.06999993324 - theta: 1.3035906954 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193276482 - y: -421.506930474 - z: -29.3562870082 - speed: 0.0 - acceleration_s: -4.64840968412e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193276482 + y: -421.506930474 + z: -29.3562870082 + theta: 1.30357882717 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -4.64840968412e-06 relative_time: 2.07999992371 - theta: 1.30357882717 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193303969 - y: -421.506875497 - z: -29.3563088607 - speed: 0.0 - acceleration_s: -5.05378490232e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193303969 + y: -421.506875497 + z: -29.3563088607 + theta: 1.30360334945 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.05378490232e-06 relative_time: 2.08999991417 - theta: 1.30360334945 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193277688 - y: -421.506863963 - z: -29.3563476093 - speed: 0.0 - acceleration_s: -5.36903152702e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193277688 + y: -421.506863963 + z: -29.3563476093 + theta: 1.30355471601 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.36903152702e-06 relative_time: 2.09999990463 - theta: 1.30355471601 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193298254 - y: -421.506836839 - z: -29.3564079432 - speed: 0.0 - acceleration_s: -5.60185517719e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193298254 + y: -421.506836839 + z: -29.3564079432 + theta: 1.30358628179 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.60185517719e-06 relative_time: 2.1099998951 - theta: 1.30358628179 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193289076 - y: -421.506793707 - z: -29.3565211473 - speed: 0.0 - acceleration_s: -5.76107891402e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193289076 + y: -421.506793707 + z: -29.3565211473 + theta: 1.30355379502 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.76107891402e-06 relative_time: 2.12000012398 - theta: 1.30355379502 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193310165 - y: -421.506771486 - z: -29.35655127 - speed: 0.0 - acceleration_s: -5.85623976554e-06 - curvature: -0.00187548130221 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193310165 + y: -421.506771486 + z: -29.35655127 + theta: 1.30359784347 + kappa: -0.00187548130221 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.85623976554e-06 relative_time: 2.13000011444 - theta: 1.30359784347 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193317901 - y: -421.506714077 - z: -29.3565512784 - speed: 0.0 - acceleration_s: -5.89720748209e-06 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193317901 + y: -421.506714077 + z: -29.3565512784 + theta: 1.30360042057 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.89720748209e-06 relative_time: 2.1400001049 - theta: 1.30360042057 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193300625 - y: -421.506693494 - z: -29.3566084169 - speed: 0.0 - acceleration_s: -5.89383558701e-06 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193300625 + y: -421.506693494 + z: -29.3566084169 + theta: 1.30357469917 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.89383558701e-06 relative_time: 2.15000009537 - theta: 1.30357469917 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193285238 - y: -421.506678794 - z: -29.3566972669 - speed: 0.0 - acceleration_s: -5.85565301569e-06 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193285238 + y: -421.506678794 + z: -29.3566972669 + theta: 1.3035592846 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.85565301569e-06 relative_time: 2.16000008583 - theta: 1.3035592846 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193303521 - y: -421.50662113 - z: -29.3567668032 - speed: 0.0 - acceleration_s: -5.79160270903e-06 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193303521 + y: -421.50662113 + z: -29.3567668032 + theta: 1.30356643916 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.79160270903e-06 relative_time: 2.17000007629 - theta: 1.30356643916 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193310266 - y: -421.50661103 - z: -29.3567994963 - speed: 0.0 - acceleration_s: -5.70983150472e-06 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193310266 + y: -421.50661103 + z: -29.3567994963 + theta: 1.3035771595 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.70983150472e-06 relative_time: 2.18000006676 - theta: 1.3035771595 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193315161 - y: -421.506569185 - z: -29.3568175416 - speed: 0.0 - acceleration_s: -5.61753361561e-06 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193315161 + y: -421.506569185 + z: -29.3568175416 + theta: 1.30358787368 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.61753361561e-06 relative_time: 2.19000005722 - theta: 1.30358787368 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193332773 - y: -421.50653744 - z: -29.356897125 - speed: 0.0 - acceleration_s: -5.52084795957e-06 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 +} +trajectory_point { + path_point { + x: -966.193332773 + y: -421.50653744 + z: -29.356897125 + theta: 1.30360184739 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.52084795957e-06 relative_time: 2.20000004768 - theta: 1.30360184739 - accumulated_s: 0.0 -} -adc_trajectory_point { - x: -966.193310176 - y: -421.506532527 - z: -29.3569542086 - speed: 0.0 - acceleration_s: -5.4248076728e-06 - curvature: -0.00191375717794 - curvature_change_rate: 0.0 - relative_time: 2.21000003815 - theta: 1.30357315297 - accumulated_s: 0.0 } -estop { - is_estop: false +trajectory_point { + path_point { + x: -966.193310176 + y: -421.506532527 + z: -29.3569542086 + theta: 1.30357315297 + kappa: -0.00191375717794 + s: 0 + dkappa: 0 + } + v: 0 + a: -5.4248076728e-06 + relative_time: 2.21000003815 } -gear: GEAR_DRIVE + diff --git a/modules/control/tools/control_tester.cc b/modules/control/tools/control_tester.cc index 25af6ff6a10..ae99b7bed93 100644 --- a/modules/control/tools/control_tester.cc +++ b/modules/control/tools/control_tester.cc @@ -46,28 +46,28 @@ DEFINE_int32(num_seconds, 10, "Length of execution."); DEFINE_int32(feed_frequency, 10, "Frequency with which protos are fed to control."); -using std::this_thread::sleep_for; +int main(int argc, char** argv) { + using std::this_thread::sleep_for; -using ::apollo::canbus::Chassis; -using ::apollo::common::adapter::AdapterManager; -using ::apollo::control::PadMessage; -using ::apollo::localization::LocalizationEstimate; -using ::apollo::planning::ADCTrajectory; + using apollo::canbus::Chassis; + using apollo::common::adapter::AdapterManager; + using apollo::control::PadMessage; + using apollo::localization::LocalizationEstimate; + using apollo::planning::ADCTrajectory; -int main(int argc, char **argv) { google::InitGoogleLogging(argv[0]); google::ParseCommandLineFlags(&argc, &argv, true); FLAGS_alsologtostderr = true; - FLAGS_adapter_config_path = + const std::string& config_file = "modules/control/testdata/control_tester/adapter.conf"; ros::init(argc, argv, "control_tester"); - AdapterManager::Init(); + AdapterManager::Init(config_file); AINFO << "AdapterManager is initialized."; for (int i = 0; i < FLAGS_num_seconds * FLAGS_feed_frequency; ++i) { - AdapterManager::FeedChassisProtoFile(FLAGS_chassis_test_file); - AdapterManager::FeedLocalizationProtoFile(FLAGS_l10n_test_file); - AdapterManager::FeedPadProtoFile(FLAGS_pad_msg_test_file); - AdapterManager::FeedPlanningTrajectoryProtoFile(FLAGS_planning_test_file); + AdapterManager::FeedChassisFile(FLAGS_chassis_test_file); + AdapterManager::FeedLocalizationFile(FLAGS_l10n_test_file); + AdapterManager::FeedPadFile(FLAGS_pad_msg_test_file); + AdapterManager::FeedPlanningFile(FLAGS_planning_test_file); sleep_for(std::chrono::milliseconds(1000 / FLAGS_feed_frequency)); } AINFO << "Successfully fed proto files."; diff --git a/modules/control/tools/terminal.cc b/modules/control/tools/terminal.cc index ee019b08e1a..636fc261a2b 100644 --- a/modules/control/tools/terminal.cc +++ b/modules/control/tools/terminal.cc @@ -30,8 +30,12 @@ namespace { -using ::apollo::common::adapter::AdapterManager; -using ::apollo::common::time::Clock; +using apollo::common::adapter::AdapterManager; +using apollo::common::time::AsInt64; +using apollo::common::time::Clock; +using apollo::control::DrivingAction; +using apollo::control::PadMessage; +using apollo::canbus::Chassis; const int ROS_QUEUE_SIZE = 1; const int RESET_COMMAND = 1; @@ -50,39 +54,36 @@ void help() { } void send(int cmd_type) { - ::apollo::control::PadMessage pb; + PadMessage pad; if (cmd_type == RESET_COMMAND) { - pb.set_action(apollo::control::DrivingAction::RESET); + pad.set_action(DrivingAction::RESET); AINFO << "sending reset action command."; } else if (cmd_type == AUTO_DRIVE_COMMAND) { - pb.set_action(apollo::control::DrivingAction::START); + pad.set_action(DrivingAction::START); AINFO << "sending start action command."; } - AdapterManager::FillPadHeader("terminal", pb.mutable_header()); - AdapterManager::PublishPad(pb); + AdapterManager::FillPadHeader("terminal", &pad); + AdapterManager::PublishPad(pad); AINFO << "send pad_message OK"; } -void on_chassis(const apollo::canbus::Chassis &chassis) { +void on_chassis(const Chassis &chassis) { static bool is_first_emergency_mode = true; static int64_t count_start = 0; static bool waiting_reset = false; // check if chassis enter security mode, if enter, after 10s should reset to // manual - if (chassis.driving_mode() == apollo::canbus::Chassis::EMERGENCY_MODE) { + if (chassis.driving_mode() == Chassis::EMERGENCY_MODE) { if (is_first_emergency_mode == true) { - count_start = apollo::common::time::AsInt64( - Clock::Now()); + count_start = AsInt64(Clock::Now()); is_first_emergency_mode = false; AINFO << "detect emergency mode."; } else { - int64_t diff = apollo::common::time::AsInt64( - Clock::Now()) - - count_start; + int64_t diff = + AsInt64(Clock::Now()) - count_start; if (diff > EMERGENCY_MODE_HOLD_TIME) { - count_start = apollo::common::time::AsInt64( - Clock::Now()); + count_start = AsInt64(Clock::Now()); waiting_reset = true; // send a reset command to control send(RESET_COMMAND); @@ -91,8 +92,7 @@ void on_chassis(const apollo::canbus::Chassis &chassis) { // nothing to do } } - } else if (chassis.driving_mode() == - apollo::canbus::Chassis::COMPLETE_MANUAL) { + } else if (chassis.driving_mode() == Chassis::COMPLETE_MANUAL) { if (waiting_reset) { is_first_emergency_mode = true; waiting_reset = false; @@ -125,7 +125,7 @@ void terminal_thread_func() { } } -} // end of namespace +} // namespace int main(int argc, char **argv) { google::InitGoogleLogging(argv[0]); @@ -134,30 +134,34 @@ int main(int argc, char **argv) { google::ParseCommandLineFlags(&argc, &argv, true); + using apollo::common::adapter::AdapterManagerConfig; + using apollo::common::adapter::AdapterManager; + using apollo::common::adapter::AdapterConfig; + ros::init(argc, argv, "terminal"); - apollo::common::adapter::AdapterManagerConfig config; + AdapterManagerConfig config; config.set_is_ros(true); { auto *sub_config = config.add_config(); - sub_config->set_mode(apollo::common::adapter::AdapterConfig::PUBLISH_ONLY); - sub_config->set_type(apollo::common::adapter::AdapterConfig::PAD); + sub_config->set_mode(AdapterConfig::PUBLISH_ONLY); + sub_config->set_type(AdapterConfig::PAD); } { auto *sub_config = config.add_config(); - sub_config->set_mode(apollo::common::adapter::AdapterConfig::RECEIVE_ONLY); - sub_config->set_type(apollo::common::adapter::AdapterConfig::CHASSIS); + sub_config->set_mode(AdapterConfig::RECEIVE_ONLY); + sub_config->set_type(AdapterConfig::CHASSIS); } { auto *sub_config = config.add_config(); - sub_config->set_mode(apollo::common::adapter::AdapterConfig::RECEIVE_ONLY); - sub_config->set_type(apollo::common::adapter::AdapterConfig::LOCALIZATION); + sub_config->set_mode(AdapterConfig::RECEIVE_ONLY); + sub_config->set_type(AdapterConfig::LOCALIZATION); } AdapterManager::Init(config); - AdapterManager::SetChassisCallback(on_chassis); + AdapterManager::AddChassisCallback(on_chassis); help(); std::thread terminal_thread(terminal_thread_func); diff --git a/modules/decision/BUILD b/modules/decision/BUILD deleted file mode 100644 index c8c9659e7bb..00000000000 --- a/modules/decision/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("//tools:cpplint.bzl", "cpplint") - -package(default_visibility = ["//visibility:public"]) - -cc_library( - name = "lib_decision", - srcs = ["decision.cc"], - hdrs = ["decision.h"], - deps = [ - "//modules/common", - "//modules/common:apollo_app", - "//modules/common/adapters:adapter_manager", - "//modules/common/adapters/proto:adapter_config_proto", - "//modules/common/time", - "//modules/decision/common:decision_common", - "//modules/decision/proto:decision_proto", - "@glog//:glog", - "@ros//:ros_common", - ], -) - -cc_binary( - name = "decision", - srcs = ["main.cc"], - deps = [ - "//external:gflags", - "//modules/common:log", - "//modules/decision:lib_decision", - "//modules/decision/common:decision_common", - "//modules/decision/proto:decision_proto", - "@ros//:ros_common", - ], -) - -cpplint() diff --git a/modules/decision/README.md b/modules/decision/README.md deleted file mode 100644 index eca98e62da4..00000000000 --- a/modules/decision/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Decision - -## Introduction - Decision module receives obstacles information (e.g., position, speed, - acceleration, prediction trajectory, and etc.), master vehicle status - (e.g, position, speed, acceleration, and etc.), traffic light status, - and map and routing information. Based on the aforementioned - information, decision module generates decision command for master vehicle - and each obstacle. It also generates virtual obstacles if necessary and - position them based on map information. - -## Input - * Obstacles information from perception and prediction modules - * Traffic lights status from perception module - * Map and routing information - * Master vehicle status - -## Output - * Decision command for master vehicle - * Generated virtual obstacles - * Decision command for each obstacle \ No newline at end of file diff --git a/modules/decision/conf/adapter.conf b/modules/decision/conf/adapter.conf deleted file mode 100644 index da9f539f708..00000000000 --- a/modules/decision/conf/adapter.conf +++ /dev/null @@ -1,5 +0,0 @@ -config { - type: DECISION - mode: PUBLISH_ONLY -} -is_ros: true diff --git a/modules/decision/conf/decision.conf b/modules/decision/conf/decision.conf deleted file mode 100644 index 60acd2693f9..00000000000 --- a/modules/decision/conf/decision.conf +++ /dev/null @@ -1 +0,0 @@ ---adapter_config_path=modules/decision/conf/adapter.conf diff --git a/modules/decision/decision.cc b/modules/decision/decision.cc deleted file mode 100644 index f3d90048da2..00000000000 --- a/modules/decision/decision.cc +++ /dev/null @@ -1,57 +0,0 @@ -/****************************************************************************** - * Copyright 2017 The Apollo 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. - *****************************************************************************/ - -#include "modules/decision/decision.h" - -#include "modules/common/adapters/proto/adapter_config.pb.h" - -#include "modules/common/adapters/adapter_manager.h" -#include "modules/common/time/time.h" -#include "modules/decision/common/decision_gflags.h" - -namespace apollo { -namespace decision { - -using apollo::common::adapter::AdapterManager; -using apollo::common::time::Clock; - -std::string Decision::Name() const { return FLAGS_decision_module_name; } - -common::Status Decision::Init() { return common::Status::OK(); } - -common::Status Decision::Start() { - AdapterManager::Init(); - - // start ROS timer, one-shot = false, auto-start = true - const double duration = 1.0 / FLAGS_decision_publish_freq; - timer_ = AdapterManager::CreateTimer(ros::Duration(duration), - &Decision::OnTimer, this); - return common::Status::OK(); -} - -void Decision::Stop() {} - -void Decision::OnTimer(const ros::TimerEvent &) { PublishDecision(); } - -void Decision::PublishDecision() { - DecisionResult decision_result; - AdapterManager::FillDecisionHeader(Name(), decision_result.mutable_header()); - - AdapterManager::PublishDecision(decision_result); -} - -} // namespace decision -} // namespace apollo diff --git a/modules/decision/proto/BUILD b/modules/decision/proto/BUILD deleted file mode 100644 index ac1a6af82fe..00000000000 --- a/modules/decision/proto/BUILD +++ /dev/null @@ -1,25 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile") - -cc_proto_library( - name = "decision_proto", - protos = [ - "decision.proto", - ], - deps = [ - "//modules/canbus/proto:canbus_proto", - "//modules/perception/proto:perception_proto", - "//modules/prediction/proto:prediction_proto", - ], -) - -py_proto_compile( - name = "decision_proto_pylib", - protos = ["decision.proto"], - deps = [ - "//modules/perception/proto:perception_proto_pylib", - "//modules/prediction/proto:prediction_proto_pylib", - ], -) diff --git a/modules/decision/proto/decision.proto b/modules/decision/proto/decision.proto deleted file mode 100644 index 644b8497b2b..00000000000 --- a/modules/decision/proto/decision.proto +++ /dev/null @@ -1,322 +0,0 @@ -syntax = "proto2"; - -package apollo.decision; - -import "modules/common/proto/header.proto"; -import "modules/common/proto/geometry.proto"; -import "modules/prediction/proto/prediction_obstacle.proto"; -import "modules/canbus/proto/chassis.proto"; - -message Range { - optional double start = 1; - optional double end = 2; -} - -message TargetLane { - // lane id - optional string id = 1; - optional double start_s = 2; // in meters - optional double end_s = 3; // in meters - optional double speed_limit = 4; // in m/s -} - -message ObjectIgnore { -} - -enum StopReasonCode { - STOP_REASON_HEAD_VEHICLE = 1; - STOP_REASON_DESTINATION = 2; - STOP_REASON_PEDESTRIAN = 3; - STOP_REASON_OBSTACLE = 4; - STOP_REASON_PREPARKING = 5; - STOP_REASON_SIGNAL = 100; - STOP_REASON_STOP_SIGN = 101; - STOP_REASON_YIELD_SIGN = 102; - STOP_REASON_CLEAR_ZONE = 103; - STOP_REASON_CROSSWALK = 104; -} - -message ObjectStop { - // stop at least distance_s before the object - optional double distance_s = 1; // in meters - optional Range preferred_distance_s = 2; // NOT SUPPORTED FIELD - optional StopReasonCode reason_code = 3; - optional apollo.common.PointENU stop_point = 4; // stop point -} - -message ObjectNudge { - // minimum lateral distance with the object - optional double distance_l = 1; // in meters - enum Type { - LEFT_NUDGE = 1; - RIGHT_NUDGE = 2; - }; - optional Type type = 2; - optional Range preferred_distance_l = 3; // NOT SUPPORTED FIELD -} - -message ObjectYield { - // minimum longitutional distance with the object - optional double distance_s = 1; // in meters - optional Range preferred_distance_s = 2; // NOT SUPPORTED FIELD - optional apollo.common.PointENU yield_point = 3; -} - -message ObjectFollow { - // minimum longitutional distance with the object - optional double distance_s = 1; // in meters - optional Range preferred_distance_s = 2; // NOT SUPPORTED FIELD - optional apollo.common.PointENU follow_point = 3; -} - -message ObjectOvertake { - // minimum longitutional distance with the object - optional double distance_s = 1; // in meters - optional Range preferred_distance_s = 2; // NOT SUPPORTED FIELD - optional apollo.common.PointENU overtake_point = 3; -} - -message ObjectSidePass { - // Follow or lead the object from side lane keeping a longitutional distance - // to it. - // If you want to cut in the neighbored lane, you may need to sidepass a - // neighbored object first. - optional double distance_s = 1; // in meters - optional Range preferred_distance_s = 2; // in meters, relative to the object - enum Type { - FOLLOW = 1; // Follow the object from side lane - LEAD = 2; // Lead the object from side lane - }; - optional Type type = 3; -} - -message ObjectAvoid { -} - -message ObjectDecisionType { - oneof object_tag { - ObjectIgnore ignore = 1; - ObjectStop stop = 2; - ObjectFollow follow = 3; - ObjectYield yield = 4; - ObjectOvertake overtake = 5; - ObjectNudge nudge = 6; - ObjectSidePass sidepass = 7; - ObjectAvoid avoid = 8; // unified object decision while estop - } -} - -message ObjectDecision { - enum ObjectType { - PREDICTION = 1; - PERCEPTION = 2; - VIRTUAL = 3; - } - optional apollo.prediction.PredictionObstacle prediction = 1; - optional string id = 2; - optional ObjectType type = 3; - optional ObjectDecisionType decision = 4 [deprecated = true]; - repeated ObjectDecisionType object_decision = 5; -} - -message ObjectDecisions { - repeated ObjectDecision decision = 1; -} - -// stop at distance_s on lane -message StopLine { - optional string lane_id = 1; - optional double distance_s = 2; -} - -message MainStop { - // stop at or before distance_s relative to the lane_id - optional StopLine enforced_line = 1; - optional StopLine preferred_start = 2; // NOT SUPPORTED FIELD - optional StopLine preferred_end = 3; // NOT SUPPORTED FIELD - optional string reason = 4; - optional StopReasonCode reason_code = 5; - // When stopped, the front center of vehicle should be at this point. - optional apollo.common.PointENU stop_point = 6; - // When stopped, the heading of the vehicle should be stop_heading. - optional double stop_heading = 7; -} - -message EmergencyStopHardBrake { -} - -message EmergencyStopCruiseToStop { -} - -message MainEmergencyStop { - // Unexpected event happened, human driver is required to take over the - // vehicle. - optional string reason = 1; - enum ReasonCode { - ESTOP_REASON_INTERNAL_ERR = 1; - ESTOP_REASON_COLLISION = 2; - ESTOP_REASON_ST_FIND_PATH = 3; - ESTOP_REASON_ST_MAKE_DECISION = 4; - ESTOP_REASON_SENSOR_ERROR = 5; - } - optional ReasonCode reason_code = 2; - oneof task { - EmergencyStopHardBrake hard_brake = 3; // hard brake - EmergencyStopCruiseToStop cruise_to_stop = 4; // cruise to stop - } -} - -message MainCruise { - // cruise current lane -} - -message MainChangeLane { - enum Type { - LEFT = 1; - RIGHT = 2; - }; - optional Type type = 1; - repeated TargetLane default_lane = 2; - optional MainStop default_lane_stop = 3; - optional MainStop target_lane_stop = 4; -} - -message MainMissionComplete { - // arrived at routing destination -} - -message MainNotReady { - // decision system is not ready. - // e.g. wait for routing data. - optional string reason = 1; -} - -message MainParking { - enum Type { - FORWARD_PARKING = 1; - REVERSE_PARKING = 2; - }; - optional Type type = 1; - // the heading of the final car position - optional double heading = 2; - // stop point - optional apollo.common.PointENU stop_point = 3; - // the polygon of the parking spot - repeated apollo.common.PointENU parking_polygon = 4; -} - -message MainDecision { - oneof task { - MainCruise cruise = 1; - MainStop stop = 2; - MainEmergencyStop estop = 3; - MainChangeLane change_lane = 4; - MainMissionComplete mission_complete = 6; - MainNotReady not_ready = 7; - MainParking parking = 8; - } - repeated TargetLane target_lane = 5; -} - -message MasterVehicleDebug { - optional apollo.common.PointENU position = 1; - optional string current_lane_id = 2; - optional double lane_s = 3; - optional double lane_l = 4; - optional double route_s = 5 [deprecated = true]; - optional double route_l = 6 [deprecated = true]; - optional double heading = 7; - optional double heading_speed = 8; - optional double heading_acceleration = 9; - optional Range route_s_range = 10; - optional Range route_l_range = 11; -} - -message ObjectDebug { - optional string id = 1; - optional string path_id = 2; - optional Range route_s = 3; - optional Range route_l = 4; - optional bool on_route = 5; - optional string lane_id = 6; - optional double lane_s = 7; - optional bool on_lane = 8; - optional double path_speed = 9; - // x is time (t), y is s - repeated apollo.common.Point3D st_region = 10; -} - -message LatencyStats { - optional double total_time_ms = 1; - optional double sensor_read_time_ms = 2; - optional double adc_prepare_time_ms = 3; - optional double obj_prepare_time_ms = 4; - optional double world_rule_time_ms = 5; - optional double st_graph_time_ms = 6; - // time diff between gateway_msg_receive_timestamp and gateway_msg_timestamp - optional double gateway_receive_delay_ms = 8; - // time diff between perception_msg_receive_timestamp and - // perception_msg_timestamp - optional double perception_receive_delay_ms = 9; - // time diff between prediction_msg_receive_timestamp and - // prediction_msg_timestamp - optional double prediction_receive_delay_ms = 10; - // time diff between signal_msg_receive_timestamp and signal_msg_timestamp - optional double signal_receive_delay_ms = 11; - // time interval in ms between perception last and its previous msg - optional double perception_interval_ms = 12; - // time interval in ms between prediction last and its previous msg - optional double prediction_interval_ms = 13; -} - -message Stats { - optional LatencyStats latency_stats = 1; -} - -message ModuleDebug { - optional uint32 gateway_sequence_num = 1; - optional uint32 perception_sequence_num = 2; - optional uint32 prediction_sequence_num = 3; - optional uint32 signal_sequence_num = 4; -} - -// next id: 8 -message Debug { - optional MasterVehicleDebug master_vehicle = 1; - // Stores current frame's original decision when current decision has be - // modified. - // E.g., when current decision is the first encountered estop, we may use - // A valid history decision to replace current decision, but the estop - // decision will be stored in original_decision. - optional MainDecision original_decision = 2; - repeated ObjectDebug object = 3; - // some meta data will be dumped into debug per sample frequency: - // e.g. every 500 decision, meta data will be dumped once. - optional bytes map_version = 5; - optional bytes decision_version = 7; - - // record per module debug info - optional ModuleDebug module_debug = 6; -} - -// The light signal of the adc -// naming reference https://en.wikipedia.org/wiki/Automotive_lighting -message LightSignal { - optional bool emergency = 1; // hazard signal - enum TurnSignal { - NO_TURN = 1; - LEFT_TURN = 2; - RIGHT_TURN = 3; - }; - optional TurnSignal turn_signal = 2 [default = NO_TURN]; -} - -message DecisionResult { - optional apollo.common.Header header = 1; - optional ObjectDecisions object_decision = 2; - optional MainDecision main_decision = 3; - optional Debug debug = 4; - optional Stats stats = 6; - optional apollo.canbus.Signal signal = 7; - optional LightSignal light_signal = 5 [deprecated = true]; -} diff --git a/modules/dreamview/backend/BUILD b/modules/dreamview/backend/BUILD index 637f2c2f280..7419a824129 100644 --- a/modules/dreamview/backend/BUILD +++ b/modules/dreamview/backend/BUILD @@ -3,106 +3,22 @@ load("//tools:cpplint.bzl", "cpplint") package(default_visibility = ["//visibility:public"]) cc_library( - name = "websocket", - srcs = [ - "websocket.cc", - ], - hdrs = [ - "websocket.h", - ], - deps = [ - "//modules/common:log", - "//third_party/json", - "@civetweb//:civetweb++", - ], -) - -cc_test( - name = "websocket_test", - size = "small", - srcs = [ - "websocket_test.cc", - ], - deps = [ - ":websocket", - "//modules/common:log", - "@gtest//:main", - ], -) - -cc_library( - name = "trajectory_point_collector", - srcs = [ - "trajectory_point_collector.cc", - ], - hdrs = [ - "trajectory_point_collector.h", - ], - deps = [ - "//modules/common/configs:vehicle_config_helper", - "//modules/common/math", - "//modules/dreamview/proto:simulation_world_proto", - "//modules/planning/proto:planning_proto", - ], -) - -cc_test( - name = "trajectory_point_collector_test", - size = "small", - srcs = [ - "trajectory_point_collector_test.cc", - ], - deps = [ - ":trajectory_point_collector", - "@gtest//:main", - ], -) - -cc_library( - name = "simulation_world_service", + name = "backend", srcs = [ - "simulation_world_service.cc", + "dreamview.cc", + "main.cc", ], hdrs = [ - "simulation_world_service.h", - ], - deps = [ - ":trajectory_point_collector", - "//modules/canbus/proto:canbus_proto", - "//modules/common:log", - "//modules/common/adapters:adapter_manager", - "//modules/common/math:quaternion", - "//modules/common/proto:common_proto", - "//modules/dreamview/proto:simulation_world_proto", - "//modules/localization/proto:localization_proto", - "//modules/planning/proto:planning_proto", - "//third_party/json", - "@com_github_google_protobuf//:protobuf", - ], -) - -cc_test( - name = "simulation_world_service_test", - size = "small", - srcs = [ - "simulation_world_service_test.cc", + "dreamview.h", ], deps = [ - ":simulation_world_service", + "//modules/common:apollo_app", "//modules/common/adapters:adapter_manager", - "//modules/common/math:quaternion", - "@gtest//:main", - ], -) - -cc_library( - name = "backend", - srcs = ["server.cc"], - deps = [ - ":simulation_world_service", - ":websocket", + "//modules/dreamview/backend/sim_control", + "//modules/dreamview/backend/simulation_world:simulation_world_updater", + "//modules/dreamview/backend/websocket", + "//modules/map/hdmap:hdmap_util", "@civetweb//:civetweb++", - "@com_github_google_protobuf//:protobuf", ], ) diff --git a/modules/dreamview/backend/common/BUILD b/modules/dreamview/backend/common/BUILD new file mode 100644 index 00000000000..ffd5725ad1c --- /dev/null +++ b/modules/dreamview/backend/common/BUILD @@ -0,0 +1,18 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "dreamview_gflags", + srcs = [ + "dreamview_gflags.cc", + ], + hdrs = [ + "dreamview_gflags.h", + ], + deps = [ + "//external:gflags", + ], +) + +cpplint() diff --git a/modules/dreamview/backend/common/dreamview_gflags.cc b/modules/dreamview/backend/common/dreamview_gflags.cc new file mode 100644 index 00000000000..73f015eab69 --- /dev/null +++ b/modules/dreamview/backend/common/dreamview_gflags.cc @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/dreamview/backend/common/dreamview_gflags.h" + +DEFINE_string(dreamview_module_name, "dreamview", "dreamview module name"); + +DEFINE_string(adapter_config_filename, "modules/dreamview/conf/adapter.conf", + "The adapter config file"); + +DEFINE_string(static_file_dir, "modules/dreamview/frontend/dist", + "The path to the dreamview distribution directory. The default " + "value points to built-in version from the Apollo project."); + +DEFINE_string(server_ports, "8888", + "Comma-separated list of ports to listen on. If the port is SSL, " + "a letter s must be appended, for example, 80,443s will open " + "port 80 and port 443."); + +DEFINE_bool( + enable_sim_control, false, + "Whether to enable SimControl to publish localiztion and chassis message."); + +DEFINE_bool(routing_from_file, false, + "Whether Dreamview reads initial routing response from file."); + +DEFINE_string(routing_response_file, + "modules/map/data/demo/garage_routing.pb.txt", + "File path of the routing response that SimControl will read the " + "start point from. If this is absent, SimControl will directly " + "take the RoutingResponse from ROS to determine the start " + "point."); + +DEFINE_string(websocket_timeout_ms, "36000000", + "Time span that CivetServer keeps the websocket connection alive " + "without dropping it."); + +DEFINE_string(ssl_certificate, "", + "Path to the SSL certificate file. This option is only required " + "when at least one of the listening_ports is SSL. The file must " + "be in PEM format, and it must have both, private key and " + "certificate"); + +DEFINE_double(map_radius, 200.0, + "The radius within which Dreamview will find all the map " + "elements around the car."); diff --git a/modules/dreamview/backend/common/dreamview_gflags.h b/modules/dreamview/backend/common/dreamview_gflags.h new file mode 100644 index 00000000000..de9e5b04436 --- /dev/null +++ b/modules/dreamview/backend/common/dreamview_gflags.h @@ -0,0 +1,42 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_DREAMVIEW_BACKEND_COMMON_DREAMVIEW_GFLAGS_H_ +#define MODULES_DREAMVIEW_BACKEND_COMMON_DREAMVIEW_GFLAGS_H_ + +#include "gflags/gflags.h" + +DECLARE_string(dreamview_module_name); + +DECLARE_string(adapter_config_filename); + +DECLARE_string(static_file_dir); + +DECLARE_string(server_ports); + +DECLARE_bool(enable_sim_control); + +DECLARE_bool(routing_from_file); + +DECLARE_string(routing_response_file); + +DECLARE_string(websocket_timeout_ms); + +DECLARE_string(ssl_certificate); + +DECLARE_double(map_radius); + +#endif // MODULES_DREAMVIEW_BACKEND_COMMON_DREAMVIEW_GFLAGS_H_ diff --git a/modules/dreamview/backend/dreamview.cc b/modules/dreamview/backend/dreamview.cc new file mode 100644 index 00000000000..6cc2ed90f45 --- /dev/null +++ b/modules/dreamview/backend/dreamview.cc @@ -0,0 +1,91 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/dreamview/backend/dreamview.h" + +#include + +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/adapters/proto/adapter_config.pb.h" +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/time/time.h" +#include "modules/common/util/file.h" +#include "modules/map/hdmap/hdmap_util.h" + +#include "modules/dreamview/backend/common/dreamview_gflags.h" + +namespace apollo { +namespace dreamview { + +using apollo::common::adapter::AdapterManager; +using apollo::common::VehicleConfigHelper; +using apollo::common::Status; +using apollo::common::time::Clock; +using apollo::common::util::PathExists; +using apollo::hdmap::SimMapFile; +using apollo::hdmap::BaseMapFile; + +std::string Dreamview::Name() const { return FLAGS_dreamview_module_name; } + +Status Dreamview::Init() { + AdapterManager::Init(FLAGS_adapter_config_filename); + VehicleConfigHelper::Init(); + + CHECK(AdapterManager::GetChassis()) << "Chassis is not initialized."; + CHECK(AdapterManager::GetPlanning()) << "Planning is not initialized."; + CHECK(AdapterManager::GetLocalization()) + << "Localization is not initialized."; + + // Initialize and run the web server which serves the dreamview htmls and + // javascripts and handles websocket requests. + std::vector options = { + "document_root", FLAGS_static_file_dir, "listening_ports", + FLAGS_server_ports, "websocket_timeout_ms", FLAGS_websocket_timeout_ms}; + if (PathExists(FLAGS_ssl_certificate)) { + options.push_back("ssl_certificate"); + options.push_back(FLAGS_ssl_certificate); + } else if (FLAGS_ssl_certificate.size() > 0) { + AERROR << "Certificate file " << FLAGS_ssl_certificate + << " does not exist!"; + } + server_.reset(new CivetServer(options)); + + websocket_.reset(new WebSocketHandler()); + server_->addWebSocketHandler("/websocket", *websocket_); + + map_service_.reset(new MapService(BaseMapFile(), SimMapFile())); + sim_world_updater_.reset(new SimulationWorldUpdater( + websocket_.get(), map_service_.get(), FLAGS_routing_from_file)); + sim_control_.reset(new SimControl(map_service_.get())); + + return Status::OK(); +} + +Status Dreamview::Start() { + sim_world_updater_->Start(); + if (FLAGS_enable_sim_control) { + sim_control_->Start(); + } + return Status::OK(); +} + +void Dreamview::Stop() { + server_->close(); + sim_control_->Stop(); +} + +} // namespace dreamview +} // namespace apollo diff --git a/modules/dreamview/backend/dreamview.h b/modules/dreamview/backend/dreamview.h new file mode 100644 index 00000000000..5a9829b6435 --- /dev/null +++ b/modules/dreamview/backend/dreamview.h @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_DREAMVIEW_BACKEND_DREAMVIEW_H_ +#define MODULES_DREAMVIEW_BACKEND_DREAMVIEW_H_ + +#include +#include + +#include "CivetServer.h" + +#include "modules/common/apollo_app.h" + +#include "modules/dreamview/backend/map/map_service.h" +#include "modules/dreamview/backend/simulation_world/simulation_world_updater.h" +#include "modules/dreamview/backend/sim_control/sim_control.h" +#include "modules/dreamview/backend/websocket/websocket.h" + +/** + * @namespace apollo::dreamview + * @brief apollo::dreamview + */ +namespace apollo { +namespace dreamview { + +class Dreamview : public apollo::common::ApolloApp { + public: + std::string Name() const override; + apollo::common::Status Init() override; + apollo::common::Status Start() override; + void Stop() override; + virtual ~Dreamview() = default; + + private: + std::unique_ptr sim_world_updater_; + std::unique_ptr server_; + std::unique_ptr sim_control_; + std::unique_ptr websocket_; + std::unique_ptr map_service_; +}; + +} // namespace dreamview +} // namespace apollo + +#endif // MODULES_DREAMVIEW_BACKEND_DREAMVIEW_H_ diff --git a/modules/dreamview/backend/main.cc b/modules/dreamview/backend/main.cc new file mode 100644 index 00000000000..b471b1e54de --- /dev/null +++ b/modules/dreamview/backend/main.cc @@ -0,0 +1,19 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/dreamview/backend/dreamview.h" + +APOLLO_MAIN(apollo::dreamview::Dreamview); diff --git a/modules/dreamview/backend/map/BUILD b/modules/dreamview/backend/map/BUILD new file mode 100644 index 00000000000..000578434cb --- /dev/null +++ b/modules/dreamview/backend/map/BUILD @@ -0,0 +1,36 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "map_service", + srcs = [ + "map_service.cc", + ], + hdrs = [ + "map_service.h", + ], + deps = [ + "//modules/common/util:points_downsampler", + "//modules/map/pnc_map", + "//third_party/json", + "@glog//:glog", + ], +) + +cc_test( + name = "map_service_test", + size = "small", + srcs = [ + "map_service_test.cc", + ], + data = [ + "//modules/dreamview/backend/testdata", + ], + deps = [ + ":map_service", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/dreamview/backend/map/map_service.cc b/modules/dreamview/backend/map/map_service.cc new file mode 100644 index 00000000000..6c1e3a2494d --- /dev/null +++ b/modules/dreamview/backend/map/map_service.cc @@ -0,0 +1,311 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/dreamview/backend/map/map_service.h" + +#include + +#include "modules/common/util/points_downsampler.h" +#include "modules/common/util/string_util.h" + +namespace apollo { +namespace dreamview { + +using apollo::common::PointENU; +using apollo::common::util::DownsampleByAngle; +using apollo::hdmap::Map; +using apollo::hdmap::Id; +using apollo::hdmap::LaneInfoConstPtr; +using apollo::hdmap::CrosswalkInfoConstPtr; +using apollo::hdmap::JunctionInfoConstPtr; +using apollo::hdmap::SignalInfoConstPtr; +using apollo::hdmap::StopSignInfoConstPtr; +using apollo::hdmap::YieldSignInfoConstPtr; +using apollo::hdmap::Path; +using apollo::hdmap::MapPathPoint; +using apollo::routing::RoutingResponse; +using apollo::routing::RoutingRequest; + +namespace { + +template +void ExtractIds(const std::vector &items, + std::vector *ids) { + ids->reserve(items.size()); + for (const auto &item : items) { + ids->push_back(item->id().id()); + } + // The output is sorted so that the calculated hash will be + // invariant to the order of elements. + std::sort(ids->begin(), ids->end()); +} + +template +void ExtractOverlapIds(const std::vector &items, + std::vector *ids) { + for (const auto &item : items) { + for (auto &overlap_id : item->signal().overlap_id()) { + ids->push_back(overlap_id.id()); + } + } + // The output is sorted so that the calculated hash will be + // invariant to the order of elements. + std::sort(ids->begin(), ids->end()); +} + +void ExtractStringVectorFromJson(const nlohmann::json &json_object, + const std::string &key, + std::vector *result) { + auto iter = json_object.find(key); + if (iter != json_object.end()) { + result->reserve(iter->size()); + for (size_t i = 0; i < iter->size(); ++i) { + result->push_back((*iter)[i]); + } + } +} + +} // namespace + +MapElementIds::MapElementIds(const nlohmann::json &json_object) + : MapElementIds() { + ExtractStringVectorFromJson(json_object, "lane", &lane); + ExtractStringVectorFromJson(json_object, "crosswalk", &crosswalk); + ExtractStringVectorFromJson(json_object, "junction", &junction); + ExtractStringVectorFromJson(json_object, "signal", &signal); + ExtractStringVectorFromJson(json_object, "stopSign", &stop_sign); + ExtractStringVectorFromJson(json_object, "yield", &yield); + ExtractStringVectorFromJson(json_object, "overlap", &overlap); +} + +size_t MapElementIds::Hash() const { + static std::hash hash_function; + const std::string text = apollo::common::util::StrCat( + apollo::common::util::PrintIter(lane, ""), + apollo::common::util::PrintIter(crosswalk, ""), + apollo::common::util::PrintIter(junction, ""), + apollo::common::util::PrintIter(signal, ""), + apollo::common::util::PrintIter(stop_sign, ""), + apollo::common::util::PrintIter(yield, ""), + apollo::common::util::PrintIter(overlap, "")); + return hash_function(text); +} + +nlohmann::json MapElementIds::Json() const { + nlohmann::json result; + result["lane"] = lane; + result["crosswalk"] = crosswalk; + result["junction"] = junction; + result["signal"] = signal; + result["stopSign"] = stop_sign; + result["yield"] = yield; + result["overlap"] = overlap; + return result; +} + +MapService::MapService(const std::string map_filename) + : MapService(map_filename, map_filename) {} + +MapService::MapService(const std::string &base_map_filename, + const std::string &sim_map_filename) + : pnc_map_(base_map_filename) { + CHECK(sim_map_.LoadMapFromFile(sim_map_filename) == 0) + << "Failed to load sim_map from " << sim_map_filename; +} + +MapElementIds MapService::CollectMapElementIds(const PointENU &point, + double radius) const { + MapElementIds result; + + std::vector lanes; + if (sim_map_.GetLanes(point, radius, &lanes) != 0) { + AERROR << "Fail to get lanes from sim_map."; + } + ExtractIds(lanes, &result.lane); + + std::vector crosswalks; + if (sim_map_.GetCrosswalks(point, radius, &crosswalks) != 0) { + AERROR << "Fail to get crosswalks from sim_map."; + } + ExtractIds(crosswalks, &result.crosswalk); + + std::vector junctions; + if (sim_map_.GetJunctions(point, radius, &junctions) != 0) { + AERROR << "Fail to get junctions from sim_map."; + } + ExtractIds(junctions, &result.junction); + + std::vector signals; + if (sim_map_.GetSignals(point, radius, &signals) != 0) { + AERROR << "Failed to get signals from sim_map."; + } + + ExtractIds(signals, &result.signal); + ExtractOverlapIds(signals, &result.overlap); + + std::vector stop_signs; + if (sim_map_.GetStopSigns(point, radius, &stop_signs) != 0) { + AERROR << "Failed to get stop signs from sim_map."; + } + ExtractIds(stop_signs, &result.stop_sign); + + std::vector yield_signs; + if (sim_map_.GetYieldSigns(point, radius, &yield_signs) != 0) { + AERROR << "Failed to get yield signs from sim_map."; + } + ExtractIds(yield_signs, &result.yield); + + return result; +} + +Map MapService::RetrieveMapElements(const MapElementIds &ids) const { + Map result; + Id map_id; + + for (const auto &id : ids.lane) { + map_id.set_id(id); + auto element = sim_map_.GetLaneById(map_id); + if (element) { + *result.add_lane() = element->lane(); + } + } + + for (const auto &id : ids.crosswalk) { + map_id.set_id(id); + auto element = sim_map_.GetCrosswalkById(map_id); + if (element) { + *result.add_crosswalk() = element->crosswalk(); + } + } + + for (const auto &id : ids.junction) { + map_id.set_id(id); + auto element = sim_map_.GetJunctionById(map_id); + if (element) { + *result.add_junction() = element->junction(); + } + } + + for (const auto &id : ids.signal) { + map_id.set_id(id); + auto element = sim_map_.GetSignalById(map_id); + if (element) { + *result.add_signal() = element->signal(); + } + } + + for (const auto &id : ids.stop_sign) { + map_id.set_id(id); + auto element = sim_map_.GetStopSignById(map_id); + if (element) { + *result.add_stop_sign() = element->stop_sign(); + } + } + + for (const auto &id : ids.yield) { + map_id.set_id(id); + auto element = sim_map_.GetYieldSignById(map_id); + if (element) { + *result.add_yield() = element->yield_sign(); + } + } + + for (const auto &id : ids.overlap) { + map_id.set_id(id); + auto element = sim_map_.GetOverlapById(map_id); + if (element) { + *result.add_overlap() = element->overlap(); + } + } + + return result; +} + +bool MapService::GetNearestLane(const double x, const double y, + LaneInfoConstPtr *nearest_lane, + double *nearest_s, double *nearest_l) const { + PointENU point; + point.set_x(x); + point.set_y(y); + if (BaseMap().GetNearestLane(point, nearest_lane, nearest_s, nearest_l) < 0) { + AERROR << "Failed to get nearest lane!"; + return false; + } + return true; +} + +bool MapService::GetPointsFromRouting(const RoutingResponse &routing, + std::vector *points) const { + Path path; + if (!pnc_map_.CreatePathFromRouting(routing, &path)) { + AERROR << "Unable to get points from routing!"; + return false; + } + + constexpr double angle_threshold = 0.1; // threshold is about 5.72 degree. + std::vector sampled_indices = + DownsampleByAngle(path.path_points(), angle_threshold); + for (int index : sampled_indices) { + points->push_back(path.path_points()[index]); + } + + return true; +} + +bool MapService::GetPoseWithRegardToLane(const double x, const double y, + double *theta, double *s) const { + double l; + LaneInfoConstPtr nearest_lane; + if (!GetNearestLane(x, y, &nearest_lane, s, &l)) { + return false; + } + + *theta = nearest_lane->Heading(*s); + return true; +} + +bool MapService::ConstructLaneWayPoint( + const double x, const double y, + RoutingRequest::LaneWaypoint *laneWayPoint) const { + double s, l; + LaneInfoConstPtr lane; + if (!GetNearestLane(x, y, &lane, &s, &l)) { + return false; + } + + laneWayPoint->set_id(lane->id().id()); + laneWayPoint->set_s(s); + auto *pose = laneWayPoint->mutable_pose(); + pose->set_x(x); + pose->set_y(y); + + return true; +} + +bool MapService::GetStartPoint(apollo::common::PointENU *start_point) const { + // Start from origin to find a lane from the map. + double s, l; + LaneInfoConstPtr lane; + if (!GetNearestLane(0.0, 0.0, &lane, &s, &l)) { + return false; + } + + *start_point = lane->GetSmoothPoint(0.0); + return true; +} + +} // namespace dreamview +} // namespace apollo diff --git a/modules/dreamview/backend/map/map_service.h b/modules/dreamview/backend/map/map_service.h new file mode 100644 index 00000000000..bf139054a5d --- /dev/null +++ b/modules/dreamview/backend/map/map_service.h @@ -0,0 +1,116 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + */ + +#ifndef MODULES_DREAMVIEW_BACKEND_MAP_MAP_SERVICE_H_ +#define MODULES_DREAMVIEW_BACKEND_MAP_MAP_SERVICE_H_ + +#include +#include +#include "modules/map/pnc_map/pnc_map.h" +#include "third_party/json/json.hpp" + +/** + * @namespace apollo::dreamview + * @brief apollo::dreamview + */ +namespace apollo { +namespace dreamview { + +struct MapElementIds { + std::vector lane; + std::vector crosswalk; + std::vector junction; + std::vector signal; + std::vector stop_sign; + std::vector yield; + std::vector overlap; + + MapElementIds() = default; + explicit MapElementIds(const nlohmann::json &json_object); + + void LogDebugInfo() const { + AINFO << "Lanes: " << lane.size(); + AINFO << "Crosswalks: " << crosswalk.size(); + AINFO << "Junctions: " << junction.size(); + AINFO << "Signals: " << signal.size(); + AINFO << "StopSigns: " << stop_sign.size(); + AINFO << "YieldSigns: " << yield.size(); + AINFO << "Overlaps: " << overlap.size(); + } + + size_t Hash() const; + nlohmann::json Json() const; +}; + +class MapService { + public: + explicit MapService(const std::string map_filename); + + MapService(const std::string &base_map_filename, + const std::string &sim_map_filename); + MapElementIds CollectMapElementIds(const apollo::common::PointENU &point, + double raidus) const; + + bool GetPointsFromRouting( + const apollo::routing::RoutingResponse &routing, + std::vector *points) const; + + // The returned value is of a hdmap::Map proto. This + // makes it easy to convert to a JSON object and to send to the + // javascript clients. + hdmap::Map RetrieveMapElements(const MapElementIds &ids) const; + + bool GetPoseWithRegardToLane(const double x, const double y, double *theta, + double *s) const; + + // Get a point on the map to serve as dummy start point of SimControl + bool GetStartPoint(apollo::common::PointENU *start_point) const; + + /** + * @brief The function fills out proper routing lane waypoint + * from the given (x,y) position. + * @param x position + * @param y position + * @param laneWayPoint RoutingRequest's lane waypoint + * @return True if the lane waypoint is filled successfully. + */ + bool ConstructLaneWayPoint( + const double x, const double y, + routing::RoutingRequest::LaneWaypoint *laneWayPoint) const; + + private: + const hdmap::HDMap &BaseMap() const { + return pnc_map_.HDMap(); + } + + bool GetNearestLane(const double x, const double y, + apollo::hdmap::LaneInfoConstPtr *nearest_lane, + double *nearest_s, double *nearest_l) const; + + // A wrapper around HDMap to provide some convenient utils dreamview needs. + const hdmap::PncMap pnc_map_; + // A downsampled map for dreamview frontend display. + hdmap::HDMap sim_map_; +}; + +} // namespace dreamview +} // namespace apollo + +#endif // MODULES_DREAMVIEW_BACKEND_MAP_MAP_SERVICE_H_ diff --git a/modules/dreamview/backend/map/map_service_test.cc b/modules/dreamview/backend/map/map_service_test.cc new file mode 100644 index 00000000000..2ad05d81379 --- /dev/null +++ b/modules/dreamview/backend/map/map_service_test.cc @@ -0,0 +1,101 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/dreamview/backend/map/map_service.h" + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +using apollo::hdmap::Id; +using apollo::hdmap::Map; +using apollo::common::PointENU; +using ::testing::UnorderedElementsAre; + +namespace apollo { +namespace dreamview { + +TEST(MapElementIdsTest, Hash) { + MapElementIds ids; + ids.lane = {"first_lane", "second_lane", "haha_lane"}; + ids.overlap = {"last_overlap"}; + EXPECT_EQ( + std::hash()("first_lanesecond_lanehaha_lanelast_overlap"), + ids.Hash()); +} + +TEST(MapElementIdsTest, Json) { + MapElementIds ids; + ids.lane = {"first_lane", "second_lane", "haha_lane"}; + auto json = ids.Json(); + + EXPECT_EQ( + "{\"crosswalk\":[],\"junction\":[],\"lane\":[\"first_lane\"," + "\"second_lane\",\"haha_lane\"],\"overlap\":[],\"signal\":[]," + "\"stopSign\":[],\"yield\":[]}", + json.dump()); + + MapElementIds from_json(json); + EXPECT_THAT(from_json.lane, + UnorderedElementsAre("first_lane", "second_lane", "haha_lane")); + EXPECT_THAT(from_json.crosswalk, UnorderedElementsAre()); + EXPECT_THAT(from_json.junction, UnorderedElementsAre()); + EXPECT_THAT(from_json.signal, UnorderedElementsAre()); + EXPECT_THAT(from_json.stop_sign, UnorderedElementsAre()); + EXPECT_THAT(from_json.yield, UnorderedElementsAre()); + EXPECT_THAT(from_json.overlap, UnorderedElementsAre()); +} + +class MapServiceTest : public ::testing::Test { + protected: + MapServiceTest() + : map_service("modules/dreamview/backend/testdata/garage.bin") {} + + MapService map_service; +}; + +TEST_F(MapServiceTest, CollectMapElementIds) { + PointENU p; + p.set_x(0.0); + p.set_y(0.0); + MapElementIds map_element_ids = map_service.CollectMapElementIds(p, 20000.0); + + EXPECT_THAT(map_element_ids.lane, UnorderedElementsAre("l1")); + EXPECT_THAT(map_element_ids.crosswalk, UnorderedElementsAre()); + EXPECT_THAT(map_element_ids.junction, UnorderedElementsAre()); + EXPECT_THAT(map_element_ids.signal, UnorderedElementsAre()); + EXPECT_THAT(map_element_ids.stop_sign, UnorderedElementsAre()); + EXPECT_THAT(map_element_ids.yield, UnorderedElementsAre()); + EXPECT_THAT(map_element_ids.overlap, UnorderedElementsAre()); +} + +TEST_F(MapServiceTest, RetrieveMapElements) { + MapElementIds map_element_ids; + map_element_ids.lane.push_back("l1"); + Map map = map_service.RetrieveMapElements(map_element_ids); + EXPECT_EQ(1, map.lane_size()); + EXPECT_EQ("l1", map.lane(0).id().id()); +} + +TEST_F(MapServiceTest, GetStartPoint) { + PointENU start_point; + EXPECT_TRUE(map_service.GetStartPoint(&start_point)); + EXPECT_DOUBLE_EQ(-1826.4050789145094, start_point.x()); + EXPECT_DOUBLE_EQ(-3027.5187874953263, start_point.y()); + EXPECT_DOUBLE_EQ(0.0, start_point.z()); +} + +} // namespace dreamview +} // namespace apollo diff --git a/modules/dreamview/backend/server.cc b/modules/dreamview/backend/server.cc deleted file mode 100644 index f84f786fe73..00000000000 --- a/modules/dreamview/backend/server.cc +++ /dev/null @@ -1,109 +0,0 @@ -/****************************************************************************** - * Copyright 2017 The Apollo 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. - *****************************************************************************/ - -#include -#include -#include - -#include "CivetServer.h" -#include "gflags/gflags.h" -#include "google/protobuf/util/json_util.h" - -#include "modules/common/log.h" -#include "modules/common/time/time.h" -#include "modules/dreamview/backend/simulation_world_service.h" -#include "modules/dreamview/backend/websocket.h" - -DEFINE_string(static_file_dir, "modules/dreamview/frontend/dist", - "The path to the dreamview distribution directory. The default " - "value points to built-in version from the Apollo project."); -DEFINE_int32(server_port, 8888, "The port of backend webserver"); - -namespace apollo { -namespace dreamview { - -using apollo::common::time::AsInt64; -using apollo::common::time::Clock; -using apollo::common::time::millis; - -using Json = nlohmann::json; - -/** - * @class SimulationWorldUpdater - * @brief A wrapper around SimulationWorldService and WebSocketHandler to keep - * pushing SimulationWorld to frontend via websocket while handling the response - * from frontend. - */ -class SimulationWorldUpdater { - public: - /** - * @brief Constructor with the websocket handler. - * @param websocket Pointer of the websocket handler that has been attached to - * the server. - */ - explicit SimulationWorldUpdater(WebSocketHandler *websocket) - : sim_world_service_(), websocket_(websocket) {} - - /** - * @brief The callback function to get updates from SimulationWorldService, - * and push them to the frontend clients via websocket when the periodic timer - * is triggered. - * @param event Timer event - */ - void OnPushTimer(const ros::TimerEvent &event) { - if (!sim_world_service_.ReadyToPush()) { - AWARN << "Not sending simulation world as the data is not ready!"; - return; - } - auto json = sim_world_service_.GetUpdateAsJson(); - websocket_->SendData(json.dump()); - } - - private: - SimulationWorldService sim_world_service_; - WebSocketHandler *websocket_; -}; - -} // namespace dreamview -} // namespace apollo - -/// Time interval, in seconds, between pushing SimulationWorld to frontend. -static constexpr double kTimeInterval = 0.1; - -int main(int argc, char **argv) { - using apollo::common::adapter::AdapterManager; - using apollo::dreamview::SimulationWorldUpdater; - using apollo::dreamview::WebSocketHandler; - - ::google::InitGoogleLogging("dreamview"); - ::google::ParseCommandLineFlags(&argc, &argv, true); - ros::init(argc, argv, "dreamview"); - - // Initialize and run the web server which serves the - // dreamview htmls and javascripts and handles websocket requests. - CivetServer server({"document_root", FLAGS_static_file_dir, "listening_ports", - std::to_string(FLAGS_server_port)}); - WebSocketHandler websocket; - server.addWebSocketHandler("/websocket", websocket); - - SimulationWorldUpdater updater(&websocket); - auto timer = AdapterManager::CreateTimer(ros::Duration(kTimeInterval), - &SimulationWorldUpdater::OnPushTimer, - &updater); - - ros::spin(); - return 0; -} diff --git a/modules/dreamview/backend/sim_control/BUILD b/modules/dreamview/backend/sim_control/BUILD new file mode 100644 index 00000000000..20ef89e5700 --- /dev/null +++ b/modules/dreamview/backend/sim_control/BUILD @@ -0,0 +1,40 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "sim_control", + srcs = [ + "sim_control.cc", + ], + hdrs = [ + "sim_control.h", + ], + deps = [ + "//modules/common/adapters:adapter_manager", + "//modules/dreamview/backend/common:dreamview_gflags", + "//modules/dreamview/backend/map:map_service", + "@gtest//:gtest", + ], +) + +cc_test( + name = "sim_control_test", + size = "small", + srcs = [ + "sim_control_test.cc", + ], + data = [ + "//modules/dreamview/backend/testdata", + ], + deps = [ + ":sim_control", + "//modules/common/adapters:adapter_manager", + "//modules/common/adapters/proto:adapter_config_proto", + "//modules/common/time", + "@gtest//:main", + "@ros//:ros_common", + ], +) + +cpplint() diff --git a/modules/dreamview/backend/sim_control/sim_control.cc b/modules/dreamview/backend/sim_control/sim_control.cc new file mode 100644 index 00000000000..ba7e1f0d537 --- /dev/null +++ b/modules/dreamview/backend/sim_control/sim_control.cc @@ -0,0 +1,275 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/dreamview/backend/sim_control/sim_control.h" + +#include + +#include "modules/common/math/math_utils.h" +#include "modules/common/math/quaternion.h" +#include "modules/common/time/time.h" +#include "modules/common/util/file.h" + +namespace apollo { +namespace dreamview { + +using apollo::common::adapter::AdapterManager; +using apollo::common::math::HeadingToQuaternion; +using apollo::common::math::InverseQuaternionRotate; +using apollo::common::math::QuaternionToHeading; +using apollo::common::math::NormalizeAngle; +using apollo::common::Point3D; +using apollo::common::Quaternion; +using apollo::common::time::Clock; +using apollo::common::TrajectoryPoint; +using apollo::common::util::GetProtoFromFile; +using apollo::routing::RoutingResponse; +using apollo::localization::LocalizationEstimate; +using apollo::canbus::Chassis; + +namespace { + +void TransformToVRF(const Point3D& point_mrf, const Quaternion& orientation, + Point3D* point_vrf) { + Eigen::Vector3d v_mrf(point_mrf.x(), point_mrf.y(), point_mrf.z()); + auto v_vrf = InverseQuaternionRotate(orientation, v_mrf); + point_vrf->set_x(v_vrf.x()); + point_vrf->set_y(v_vrf.y()); + point_vrf->set_z(v_vrf.z()); +} + +} // namespace + +SimControl::SimControl(const MapService* map_service) + : map_service_(map_service), + prev_point_index_(0), + next_point_index_(0), + received_planning_(false), + initial_start_(true), + enabled_(FLAGS_enable_sim_control) { + if (enabled_) { + apollo::common::PointENU start_point; + if (!map_service_->GetStartPoint(&start_point)) { + AWARN << "Failed to get a dummy start point from map!"; + return; + } + SetStartPoint(start_point.x(), start_point.y()); + } +} + +void SimControl::SetStartPoint(const double x, const double y) { + next_point_.set_v(0.0); + next_point_.set_a(0.0); + + auto* next_point = next_point_.mutable_path_point(); + next_point->set_x(x); + next_point->set_y(y); + next_point->set_z(0.0); + + double theta = 0.0; + double s = 0.0; + if (!map_service_->GetPoseWithRegardToLane(next_point->x(), next_point->y(), + &theta, &s)) { + AERROR << "Failed to get heading from map! Treat theta and s as 0.0!"; + } + next_point->set_theta(theta); + next_point->set_s(s); + next_point->set_kappa(0.0); + + prev_point_index_ = next_point_index_ = 0; + received_planning_ = false; + + if (enabled_) { + Start(); + } +} + +void SimControl::OnRoutingResponse(const RoutingResponse& routing) { + const auto& start_pose = routing.routing_request().start().pose(); + SetStartPoint(start_pose.x(), start_pose.y()); +} + +void SimControl::Start() { + if (initial_start_) { + // Setup planning and routing result data callback. + AdapterManager::AddPlanningCallback(&SimControl::OnPlanning, this); + AdapterManager::AddRoutingResponseCallback(&SimControl::OnRoutingResponse, + this); + + // Start timer to publish localiztion and chassis messages. + sim_control_timer_ = AdapterManager::CreateTimer( + ros::Duration(kSimControlInterval), &SimControl::TimerCallback, this); + + initial_start_ = false; + } else { + sim_control_timer_.start(); + } +} + +void SimControl::Stop() { + sim_control_timer_.stop(); +} + +void SimControl::OnPlanning(const apollo::planning::ADCTrajectory& trajectory) { + // Reset current trajectory and the indices upon receiving a new trajectory. + current_trajectory_ = trajectory; + prev_point_index_ = 0; + next_point_index_ = 0; + received_planning_ = true; +} + +void SimControl::Freeze() { + next_point_.set_v(0.0); + next_point_.set_a(0.0); + prev_point_ = next_point_; +} + +double SimControl::AbsoluteTimeOfNextPoint() { + return current_trajectory_.header().timestamp_sec() + + current_trajectory_.trajectory_point(next_point_index_) + .relative_time(); +} + +bool SimControl::NextPointWithinRange() { + return next_point_index_ < current_trajectory_.trajectory_point_size() - 1; +} + +void SimControl::TimerCallback(const ros::TimerEvent& event) { + // Result of the interpolation. + double lambda = 0; + auto current_time = Clock::NowInSecond(); + + if (!received_planning_) { + prev_point_ = next_point_; + } else { + if (current_trajectory_.estop().is_estop() || !NextPointWithinRange()) { + // Freeze the car when there's an estop or the current trajectory has been + // exhausted. + Freeze(); + } else { + // Determine the status of the car based on received planning message. + double timestamp = current_trajectory_.header().timestamp_sec(); + + while (NextPointWithinRange() && + current_time > AbsoluteTimeOfNextPoint()) { + ++next_point_index_; + } + + if (next_point_index_ == 0) { + AERROR << "First trajectory point is a future point!"; + return; + } + + if (current_time > AbsoluteTimeOfNextPoint()) { + prev_point_index_ = next_point_index_; + } else { + prev_point_index_ = next_point_index_ - 1; + } + + next_point_ = current_trajectory_.trajectory_point(next_point_index_); + prev_point_ = current_trajectory_.trajectory_point(prev_point_index_); + + // Calculate the ratio based on the the position of current time in + // between the previous point and the next point, where lamda = + // (current_point - prev_point) / (next_point - prev_point). + if (next_point_index_ != prev_point_index_) { + lambda = (current_time - timestamp - prev_point_.relative_time()) / + (next_point_.relative_time() - prev_point_.relative_time()); + } + } + } + + PublishChassis(lambda); + PublishLocalization(lambda); +} + +void SimControl::PublishChassis(double lambda) { + Chassis chassis; + AdapterManager::FillChassisHeader("SimControl", &chassis); + + chassis.set_engine_started(true); + chassis.set_driving_mode(Chassis::COMPLETE_AUTO_DRIVE); + chassis.set_gear_location(Chassis::GEAR_DRIVE); + + double cur_speed = Interpolate(prev_point_.v(), next_point_.v(), lambda); + chassis.set_speed_mps(cur_speed); + chassis.set_throttle_percentage(0.0); + chassis.set_brake_percentage(0.0); + + AdapterManager::PublishChassis(chassis); +} + +void SimControl::PublishLocalization(double lambda) { + LocalizationEstimate localization; + AdapterManager::FillLocalizationHeader("SimControl", &localization); + + auto* pose = localization.mutable_pose(); + auto prev = prev_point_.path_point(); + auto next = next_point_.path_point(); + + // Set position + double cur_x = Interpolate(prev.x(), next.x(), lambda); + pose->mutable_position()->set_x(cur_x); + double cur_y = Interpolate(prev.y(), next.y(), lambda); + pose->mutable_position()->set_y(cur_y); + double cur_z = Interpolate(prev.z(), next.z(), lambda); + pose->mutable_position()->set_z(cur_z); + + // Set orientation and heading + double cur_theta = NormalizeAngle( + prev.theta() + lambda * NormalizeAngle(next.theta() - prev.theta())); + + Eigen::Quaternion cur_orientation = + HeadingToQuaternion(cur_theta); + pose->mutable_orientation()->set_qw(cur_orientation.w()); + pose->mutable_orientation()->set_qx(cur_orientation.x()); + pose->mutable_orientation()->set_qy(cur_orientation.y()); + pose->mutable_orientation()->set_qz(cur_orientation.z()); + pose->set_heading(cur_theta); + + // Set linear_velocity + double cur_speed = Interpolate(prev_point_.v(), next_point_.v(), lambda); + pose->mutable_linear_velocity()->set_x(std::cos(cur_theta) * cur_speed); + pose->mutable_linear_velocity()->set_y(std::sin(cur_theta) * cur_speed); + pose->mutable_linear_velocity()->set_z(0); + + // Set angular_velocity in both map reference frame and vehicle reference + // frame + double cur_curvature = Interpolate(prev.kappa(), next.kappa(), lambda); + pose->mutable_angular_velocity()->set_x(0); + pose->mutable_angular_velocity()->set_y(0); + pose->mutable_angular_velocity()->set_z(cur_speed * cur_curvature); + + TransformToVRF(pose->angular_velocity(), pose->orientation(), + pose->mutable_angular_velocity_vrf()); + + // Set linear_acceleration in both map reference frame and vehicle reference + // frame + double cur_acceleration_s = + Interpolate(prev_point_.a(), next_point_.a(), lambda); + auto* linear_acceleration = pose->mutable_linear_acceleration(); + linear_acceleration->set_x(std::cos(cur_theta) * cur_acceleration_s); + linear_acceleration->set_y(std::sin(cur_theta) * cur_acceleration_s); + linear_acceleration->set_z(0); + + TransformToVRF(pose->linear_acceleration(), pose->orientation(), + pose->mutable_linear_acceleration_vrf()); + + AdapterManager::PublishLocalization(localization); +} + +} // namespace dreamview +} // namespace apollo diff --git a/modules/dreamview/backend/sim_control/sim_control.h b/modules/dreamview/backend/sim_control/sim_control.h new file mode 100644 index 00000000000..2634db54e87 --- /dev/null +++ b/modules/dreamview/backend/sim_control/sim_control.h @@ -0,0 +1,119 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + */ + +#ifndef MODULES_DREAMVIEW_BACKEND_SIM_CONTROL_SIM_CONTROL_H_ +#define MODULES_DREAMVIEW_BACKEND_SIM_CONTROL_SIM_CONTROL_H_ + +#include + +#include "gtest/gtest_prod.h" +#include "modules/common/adapters/adapter_manager.h" +#include "modules/dreamview/backend/common/dreamview_gflags.h" +#include "modules/dreamview/backend/map/map_service.h" + +/** + * @namespace apollo::dreamview + * @brief apollo::dreamview + */ +namespace apollo { +namespace dreamview { + +/** + * @class SimControl + * @brief A module that simulates a 'perfect control' algorithm, which assumes + * an ideal world where the car can be perfectly placed wherever the planning + * asks it to be, with the expected speed, acceleration, etc. + */ +class SimControl { + public: + /** + * @brief Constructor of SimControl. + * @param map_service the pointer of MapService. + */ + explicit SimControl(const MapService *map_service); + + /** + * @brief Starts the timer to publish simulated localization and chassis + * messages. + */ + void Start(); + + /** + * @brief Stops the timer. + */ + void Stop(); + + private: + void OnPlanning(const apollo::planning::ADCTrajectory &trajectory); + void OnRoutingResponse(const apollo::routing::RoutingResponse &routing); + + // Reset the start point, which can be a dummy point on the map or received + // from the routing module. + void SetStartPoint(const double x, const double y); + + void Freeze(); + + double AbsoluteTimeOfNextPoint(); + bool NextPointWithinRange(); + + void TimerCallback(const ros::TimerEvent &event); + + void PublishChassis(double lambda); + void PublishLocalization(double lambda); + + template + T Interpolate(T prev, T next, double lambda) { + return (1 - lambda) * prev + lambda * next; + } + + const MapService *map_service_; + + // The timer to publish simulated localization and chassis messages. + ros::Timer sim_control_timer_; + + // Time interval of the timer, in seconds. + static constexpr double kSimControlInterval = 0.01; + + // The latest received planning trajectory. + apollo::planning::ADCTrajectory current_trajectory_; + // The index of the previous and next point with regard to the + // current_trajectory. + int prev_point_index_; + int next_point_index_; + + // Whether there's a planning received after the most recent routing. + bool received_planning_; + + // Whether it is the first time the SimControl gets started. + bool initial_start_; + + // Whether the sim control is enabled. + bool enabled_; + + apollo::common::TrajectoryPoint prev_point_; + apollo::common::TrajectoryPoint next_point_; + + FRIEND_TEST(SimControlTest, Test); +}; + +} // namespace dreamview +} // namespace apollo + +#endif // MODULES_DREAMVIEW_BACKEND_SIM_CONTROL_SIM_CONTROL_H_ diff --git a/modules/dreamview/backend/sim_control/sim_control_test.cc b/modules/dreamview/backend/sim_control/sim_control_test.cc new file mode 100644 index 00000000000..ff10cd1cb6c --- /dev/null +++ b/modules/dreamview/backend/sim_control/sim_control_test.cc @@ -0,0 +1,177 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/dreamview/backend/sim_control/sim_control.h" + +#include "ros/include/ros/ros.h" + +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/adapters/proto/adapter_config.pb.h" +#include "modules/common/math/quaternion.h" + +#include "gmock/gmock.h" +#include "gtest/gtest.h" +#include "modules/common/time/time.h" + +using apollo::canbus::Chassis; +using apollo::common::adapter::AdapterManager; +using apollo::common::adapter::AdapterManagerConfig; +using apollo::common::math::HeadingToQuaternion; +using apollo::common::time::Clock; +using apollo::localization::LocalizationEstimate; +using apollo::routing::RoutingResponse; + +namespace apollo { +namespace dreamview { + +class SimControlTest : public ::testing::Test { + public: + SimControlTest() + : map_service_("modules/dreamview/backend/testdata/garage.bin"), + sim_control_(&map_service_) { + FLAGS_enable_sim_control = false; + + AdapterManagerConfig config; + config.set_is_ros(false); + { + auto *sub_config = config.add_config(); + sub_config->set_mode( + apollo::common::adapter::AdapterConfig::PUBLISH_ONLY); + sub_config->set_type(apollo::common::adapter::AdapterConfig::CHASSIS); + } + + { + auto *sub_config = config.add_config(); + sub_config->set_mode( + apollo::common::adapter::AdapterConfig::PUBLISH_ONLY); + sub_config->set_type( + apollo::common::adapter::AdapterConfig::LOCALIZATION); + } + + { + auto *sub_config = config.add_config(); + sub_config->set_mode( + apollo::common::adapter::AdapterConfig::RECEIVE_ONLY); + sub_config->set_type( + apollo::common::adapter::AdapterConfig::PLANNING_TRAJECTORY); + } + + { + auto *sub_config = config.add_config(); + sub_config->set_mode( + apollo::common::adapter::AdapterConfig::RECEIVE_ONLY); + sub_config->set_type( + apollo::common::adapter::AdapterConfig::ROUTING_RESPONSE); + } + + AdapterManager::Init(config); + } + + protected: + MapService map_service_; + SimControl sim_control_; +}; + +void SetTrajectory(const std::vector &xs, const std::vector &ys, + const std::vector &vs, const std::vector &as, + const std::vector &ths, + const std::vector &ks, const std::vector &ts, + planning::ADCTrajectory *adc_trajectory) { + for (size_t i = 0; i < xs.size(); ++i) { + auto *point = adc_trajectory->add_trajectory_point(); + point->mutable_path_point()->set_x(xs[i]); + point->mutable_path_point()->set_y(ys[i]); + point->set_v(vs[i]); + point->set_a(as[i]); + point->mutable_path_point()->set_theta(ths[i]); + point->mutable_path_point()->set_kappa(ks[i]); + point->set_relative_time(ts[i]); + } +} + +TEST_F(SimControlTest, Test) { + planning::ADCTrajectory adc_trajectory; + std::vector xs = {1.0, 1.1, 1.2, 1.3, 1.4}; + std::vector ys = {1.0, 1.1, 1.2, 1.3, 1.4}; + std::vector vs = {40.0, 50.0, 60.0, 70.0, 80.0}; + std::vector as = {40.0, 50.0, 60.0, 70.0, 80.0}; + std::vector ths = {0.2, 0.6, 0.8, 1.0, 1.5}; + std::vector ks = {1.0, 2.0, 3.0, 4.0, 5.0}; + std::vector ts = {0.0, 0.1, 0.2, 0.3, 0.4}; + SetTrajectory(xs, ys, vs, as, ths, ks, ts, &adc_trajectory); + + const double timestamp = 100.0; + adc_trajectory.mutable_header()->set_timestamp_sec(timestamp); + + sim_control_.SetStartPoint(1.0, 1.0); + + AdapterManager::AddPlanningCallback(&SimControl::OnPlanning, &sim_control_); + AdapterManager::GetPlanning()->OnReceive(adc_trajectory); + + { + Clock::SetMode(Clock::MOCK); + const auto timestamp = apollo::common::time::From(100.01); + Clock::SetNow(timestamp.time_since_epoch()); + sim_control_.TimerCallback(ros::TimerEvent()); + + const Chassis *chassis = AdapterManager::GetChassis()->GetLatestPublished(); + const LocalizationEstimate *localization = + AdapterManager::GetLocalization()->GetLatestPublished(); + + EXPECT_TRUE(chassis->engine_started()); + EXPECT_EQ(Chassis::COMPLETE_AUTO_DRIVE, chassis->driving_mode()); + EXPECT_EQ(Chassis::GEAR_DRIVE, chassis->gear_location()); + + EXPECT_NEAR(chassis->speed_mps(), 41.0, 1e-6); + EXPECT_NEAR(chassis->throttle_percentage(), 0.0, 1e-6); + EXPECT_NEAR(chassis->brake_percentage(), 0.0, 1e-6); + + const auto &pose = localization->pose(); + EXPECT_NEAR(pose.position().x(), 1.01, 1e-6); + EXPECT_NEAR(pose.position().y(), 1.01, 1e-6); + EXPECT_NEAR(pose.position().z(), 0.0, 1e-6); + + const double theta = 0.24; + EXPECT_NEAR(pose.heading(), theta, 1e-6); + + const Eigen::Quaternion orientation = + HeadingToQuaternion(theta); + EXPECT_NEAR(pose.orientation().qw(), orientation.w(), 1e-6); + EXPECT_NEAR(pose.orientation().qx(), orientation.x(), 1e-6); + EXPECT_NEAR(pose.orientation().qy(), orientation.y(), 1e-6); + EXPECT_NEAR(pose.orientation().qz(), orientation.z(), 1e-6); + + const double speed = 41.0; + EXPECT_NEAR(pose.linear_velocity().x(), std::cos(theta) * speed, 1e-6); + EXPECT_NEAR(pose.linear_velocity().y(), std::sin(theta) * speed, 1e-6); + EXPECT_NEAR(pose.linear_velocity().z(), 0.0, 1e-6); + + const double curvature = 1.1; + EXPECT_NEAR(pose.angular_velocity().x(), 0.0, 1e-6); + EXPECT_NEAR(pose.angular_velocity().y(), 0.0, 1e-6); + EXPECT_NEAR(pose.angular_velocity().z(), speed * curvature, 1e-6); + + const double acceleration_s = 41.0; + EXPECT_NEAR(pose.linear_acceleration().x(), + std::cos(theta) * acceleration_s, 1e-6); + EXPECT_NEAR(pose.linear_acceleration().y(), + std::sin(theta) * acceleration_s, 1e-6); + EXPECT_NEAR(pose.linear_acceleration().z(), 0.0, 1e-6); + } +} + +} // namespace dreamview +} // namespace apollo diff --git a/modules/dreamview/backend/simulation_world/BUILD b/modules/dreamview/backend/simulation_world/BUILD new file mode 100644 index 00000000000..7f87a4bc051 --- /dev/null +++ b/modules/dreamview/backend/simulation_world/BUILD @@ -0,0 +1,69 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "simulation_world_service", + srcs = [ + "simulation_world_service.cc", + ], + hdrs = [ + "simulation_world_service.h", + ], + deps = [ + "//modules/canbus/proto:canbus_proto", + "//modules/common:log", + "//modules/common/adapters:adapter_manager", + "//modules/common/math:quaternion", + "//modules/common/monitor", + "//modules/common/proto:common_proto", + "//modules/dreamview/backend/common:dreamview_gflags", + "//modules/dreamview/backend/map:map_service", + "//modules/dreamview/backend/util:trajectory_point_collector", + "//modules/dreamview/proto:simulation_world_proto", + "//modules/localization/proto:localization_proto", + "//modules/map/hdmap:hdmap_util", + "//modules/planning/proto:planning_proto", + "//third_party/json", + "@com_google_protobuf//:protobuf", + ], +) + +cc_test( + name = "simulation_world_service_test", + size = "small", + srcs = [ + "simulation_world_service_test.cc", + ], + data = [ + "//modules/dreamview/backend/testdata", + ], + deps = [ + ":simulation_world_service", + "//modules/common/adapters:adapter_manager", + "//modules/common/math:quaternion", + "@gtest//:main", + ], +) + +cc_library( + name = "simulation_world_updater", + srcs = [ + "simulation_world_updater.cc", + ], + hdrs = [ + "simulation_world_updater.h", + ], + linkopts = [ + "-lboost_thread", + ], + deps = [ + ":simulation_world_service", + "//modules/dreamview/backend/common:dreamview_gflags", + "//modules/dreamview/backend/map:map_service", + "//modules/dreamview/backend/websocket", + "@com_google_protobuf//:protobuf", + ], +) + +cpplint() diff --git a/modules/dreamview/backend/simulation_world/simulation_world_service.cc b/modules/dreamview/backend/simulation_world/simulation_world_service.cc new file mode 100644 index 00000000000..f645558248c --- /dev/null +++ b/modules/dreamview/backend/simulation_world/simulation_world_service.cc @@ -0,0 +1,684 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/dreamview/backend/simulation_world/simulation_world_service.h" + +#include +#include +#include + +#include "google/protobuf/util/json_util.h" +#include "modules/canbus/proto/chassis.pb.h" +#include "modules/common/math/quaternion.h" +#include "modules/common/proto/geometry.pb.h" +#include "modules/common/proto/vehicle_signal.pb.h" +#include "modules/common/time/time.h" +#include "modules/common/util/file.h" +#include "modules/dreamview/backend/common/dreamview_gflags.h" +#include "modules/dreamview/backend/util/trajectory_point_collector.h" +#include "modules/dreamview/proto/simulation_world.pb.h" +#include "modules/localization/proto/localization.pb.h" +#include "modules/planning/proto/planning.pb.h" +#include "modules/prediction/proto/prediction_obstacle.pb.h" + +using apollo::common::Point3D; +using apollo::common::adapter::AdapterManager; +using apollo::common::adapter::MonitorAdapter; +using apollo::common::adapter::LocalizationAdapter; +using apollo::common::adapter::ChassisAdapter; +using apollo::common::adapter::PerceptionObstaclesAdapter; +using apollo::common::adapter::PlanningAdapter; +using apollo::common::VehicleConfigHelper; +using apollo::common::monitor::MonitorMessage; +using apollo::common::monitor::MonitorMessageItem; +using apollo::localization::LocalizationEstimate; +using apollo::planning::ADCTrajectory; +using apollo::common::TrajectoryPoint; +using apollo::planning::DecisionResult; +using apollo::planning::StopReasonCode; +using apollo::canbus::Chassis; +using apollo::perception::PerceptionObstacle; +using apollo::perception::PerceptionObstacles; +using apollo::prediction::PredictionObstacle; +using apollo::prediction::PredictionObstacles; +using apollo::routing::RoutingResponse; +using apollo::common::time::Clock; +using apollo::common::time::ToSecond; +using apollo::common::time::millis; +using apollo::common::util::GetProtoFromFile; +using apollo::hdmap::MapPathPoint; + +using Json = nlohmann::json; + +namespace apollo { +namespace dreamview { + +namespace { + +double CalculateAcceleration(const Point3D &acceleration, + const Point3D &velocity) { + // Calculates the dot product of acceleration and velocity. The sign + // of this projection indicates whether this is acceleration or + // deceleration. + double projection = + acceleration.x() * velocity.x() + acceleration.y() * velocity.y(); + + // Calculates the magnitude of the acceleration. Negate the value if + // it is indeed a deceleration. + double magnitude = std::hypot(acceleration.x(), acceleration.y()); + return std::signbit(projection) ? -magnitude : magnitude; +} + +Object::DisengageType DeduceDisengageType(const Chassis &chassis) { + if (chassis.error_code() != Chassis::NO_ERROR) { + return Object::DISENGAGE_CHASSIS_ERROR; + } + + switch (chassis.driving_mode()) { + case Chassis::COMPLETE_AUTO_DRIVE: + return Object::DISENGAGE_NONE; + case Chassis::COMPLETE_MANUAL: + return Object::DISENGAGE_MANUAL; + case Chassis::AUTO_STEER_ONLY: + return Object::DISENGAGE_AUTO_STEER_ONLY; + case Chassis::AUTO_SPEED_ONLY: + return Object::DISENGAGE_AUTO_SPEED_ONLY; + case Chassis::EMERGENCY_MODE: + return Object::DISENGAGE_EMERGENCY; + default: + return Object::DISENGAGE_UNKNOWN; + } +} + +void SetObstacleInfo(const PerceptionObstacle &obstacle, Object *world_object) { + if (world_object == nullptr) { + return; + } + + world_object->set_id(std::to_string(obstacle.id())); + world_object->set_position_x(obstacle.position().x()); + world_object->set_position_y(obstacle.position().y()); + world_object->set_heading(obstacle.theta()); + world_object->set_length(obstacle.length()); + world_object->set_width(obstacle.width()); + world_object->set_height(obstacle.height()); + world_object->set_speed( + std::hypot(obstacle.velocity().x(), obstacle.velocity().y())); + world_object->set_speed_heading( + std::atan2(obstacle.velocity().y(), obstacle.velocity().x())); + world_object->set_timestamp_sec(obstacle.timestamp()); +} + +void SetObstaclePolygon(const PerceptionObstacle &obstacle, + Object *world_object) { + if (world_object == nullptr) { + return; + } + + world_object->clear_polygon_point(); + for (const auto &point : obstacle.polygon_point()) { + PolygonPoint *poly_pt = world_object->add_polygon_point(); + poly_pt->set_x(point.x()); + poly_pt->set_y(point.y()); + } +} + +void SetObstacleType(const PerceptionObstacle &obstacle, Object *world_object) { + if (world_object == nullptr) { + return; + } + + switch (obstacle.type()) { + case PerceptionObstacle::UNKNOWN: + world_object->set_type(Object_Type_UNKNOWN); + break; + case PerceptionObstacle::UNKNOWN_MOVABLE: + world_object->set_type(Object_Type_UNKNOWN_MOVABLE); + break; + case PerceptionObstacle::UNKNOWN_UNMOVABLE: + world_object->set_type(Object_Type_UNKNOWN_UNMOVABLE); + break; + case PerceptionObstacle::PEDESTRIAN: + world_object->set_type(Object_Type_PEDESTRIAN); + break; + case PerceptionObstacle::BICYCLE: + world_object->set_type(Object_Type_BICYCLE); + break; + case PerceptionObstacle::VEHICLE: + world_object->set_type(Object_Type_VEHICLE); + break; + default: + world_object->set_type(Object_Type_VIRTUAL); + } +} + +void SetStopReason(const StopReasonCode &reason_code, Decision *decision) { + switch (reason_code) { + case StopReasonCode::STOP_REASON_HEAD_VEHICLE: + decision->set_stopreason(Decision::STOP_REASON_HEAD_VEHICLE); + break; + case StopReasonCode::STOP_REASON_DESTINATION: + decision->set_stopreason(Decision::STOP_REASON_DESTINATION); + break; + case StopReasonCode::STOP_REASON_PEDESTRIAN: + decision->set_stopreason(Decision::STOP_REASON_PEDESTRIAN); + break; + case StopReasonCode::STOP_REASON_OBSTACLE: + decision->set_stopreason(Decision::STOP_REASON_OBSTACLE); + break; + case StopReasonCode::STOP_REASON_SIGNAL: + decision->set_stopreason(Decision::STOP_REASON_SIGNAL); + break; + case StopReasonCode::STOP_REASON_STOP_SIGN: + decision->set_stopreason(Decision::STOP_REASON_STOP_SIGN); + break; + case StopReasonCode::STOP_REASON_YIELD_SIGN: + decision->set_stopreason(Decision::STOP_REASON_YIELD_SIGN); + break; + case StopReasonCode::STOP_REASON_CLEAR_ZONE: + decision->set_stopreason(Decision::STOP_REASON_CLEAR_ZONE); + break; + case StopReasonCode::STOP_REASON_CROSSWALK: + decision->set_stopreason(Decision::STOP_REASON_CROSSWALK); + break; + default: + AWARN << "Unrecognizable stop reason code:" << reason_code; + } +} + +void UpdateTurnSignal(const apollo::common::VehicleSignal &signal, + Object *auto_driving_car) { + if (signal.turn_signal() == apollo::common::VehicleSignal::TURN_LEFT) { + auto_driving_car->set_current_signal("LEFT"); + } else if (signal.turn_signal() == + apollo::common::VehicleSignal::TURN_RIGHT) { + auto_driving_car->set_current_signal("RIGHT"); + } else if (signal.emergency_light()) { + auto_driving_car->set_current_signal("EMERGENCY"); + } else { + auto_driving_car->set_current_signal(""); + } +} + +bool LocateMarker(const apollo::planning::ObjectDecisionType &decision, + Decision *world_decision) { + apollo::common::PointENU fence_point; + double heading; + if (decision.has_stop() && decision.stop().has_stop_point()) { + world_decision->set_type(Decision_Type_STOP); + fence_point = decision.stop().stop_point(); + heading = decision.stop().stop_heading(); + } else if (decision.has_follow() && decision.follow().has_fence_point()) { + world_decision->set_type(Decision_Type_FOLLOW); + fence_point = decision.follow().fence_point(); + heading = decision.follow().fence_heading(); + } else if (decision.has_yield() && decision.yield().has_fence_point()) { + world_decision->set_type(Decision_Type_YIELD); + fence_point = decision.yield().fence_point(); + heading = decision.yield().fence_heading(); + } else if (decision.has_overtake() && decision.overtake().has_fence_point()) { + world_decision->set_type(Decision_Type_OVERTAKE); + fence_point = decision.overtake().fence_point(); + heading = decision.overtake().fence_heading(); + } else { + return false; + } + + world_decision->set_position_x(fence_point.x()); + world_decision->set_position_y(fence_point.y()); + world_decision->set_heading(heading); + return true; +} + +void FindNudgeRegion(const apollo::planning::ObjectDecisionType &decision, + const Object &world_obj, Decision *world_decision) { + std::vector points; + for (auto &polygon_pt : world_obj.polygon_point()) { + points.emplace_back(polygon_pt.x(), polygon_pt.y()); + } + const apollo::common::math::Polygon2d obj_polygon(points); + const apollo::common::math::Polygon2d &nudge_polygon = + obj_polygon.ExpandByDistance(std::fabs(decision.nudge().distance_l())); + const std::vector &nudge_points = + nudge_polygon.points(); + for (auto &nudge_pt : nudge_points) { + PolygonPoint *poly_pt = world_decision->add_polygon_point(); + poly_pt->set_x(nudge_pt.x()); + poly_pt->set_y(nudge_pt.y()); + } + world_decision->set_type(Decision_Type_NUDGE); +} + +void CreatePredictionTrajectory(Object *world_object, + const PredictionObstacle &obstacle) { + for (const auto &traj : obstacle.trajectory()) { + Prediction *prediction = world_object->add_prediction(); + prediction->set_probability(traj.probability()); + for (const auto &point : traj.trajectory_point()) { + PolygonPoint *world_point = prediction->add_predicted_trajectory(); + world_point->set_x(point.path_point().x()); + world_point->set_y(point.path_point().y()); + world_point->set_z(point.path_point().z()); + } + } +} + +} // namespace + +constexpr int SimulationWorldService::kMaxMonitorItems; + +SimulationWorldService::SimulationWorldService(const MapService *map_service, + bool routing_from_file) + : map_service_(map_service), + monitor_(apollo::common::monitor::MonitorMessageItem::SIMULATOR) { + RegisterMessageCallbacks(); + if (routing_from_file) { + ReadRoutingFromFile(FLAGS_routing_response_file); + } + + // Populate vehicle parameters. + Object *auto_driving_car = world_.mutable_auto_driving_car(); + const auto &vehicle_param = VehicleConfigHelper::GetConfig().vehicle_param(); + auto_driving_car->set_height(vehicle_param.height()); + auto_driving_car->set_width(vehicle_param.width()); + auto_driving_car->set_length(vehicle_param.length()); +} + +const SimulationWorld &SimulationWorldService::Update() { + AdapterManager::Observe(); + UpdateWithLatestObserved("Chassis", AdapterManager::GetChassis()); + UpdateWithLatestObserved("Localization", AdapterManager::GetLocalization()); + + // Clear objects received from last frame and populate with the new objects. + // TODO(siyangy, unacao): For now we are assembling the simulation_world with + // latest received perception, prediction and planning message. However, they + // may not always be perfectly aligned and belong to the same frame. + obj_map_.clear(); + world_.clear_object(); + UpdateWithLatestObserved("Perception", + AdapterManager::GetPerceptionObstacles()); + UpdateWithLatestObserved("PredictionObstacles", + AdapterManager::GetPrediction()); + UpdateWithLatestObserved("Planning", AdapterManager::GetPlanning()); + for (const auto &kv : obj_map_) { + *world_.add_object() = kv.second; + } + + world_.set_sequence_num(world_.sequence_num() + 1); + + return world_; +} + +Json SimulationWorldService::GetUpdateAsJson(double radius) const { + std::string sim_world_json; + ::google::protobuf::util::MessageToJsonString(world_, &sim_world_json); + + Json update = GetMapElements(radius); + update["type"] = "sim_world_update"; + update["timestamp"] = apollo::common::time::AsInt64(Clock::Now()); + update["world"] = Json::parse(sim_world_json); + + return update; +} + +Json SimulationWorldService::GetMapElements(double radius) const { + // Gather required map element ids based on current location. + apollo::common::PointENU point; + point.set_x(world_.auto_driving_car().position_x()); + point.set_y(world_.auto_driving_car().position_y()); + + MapElementIds map_element_ids = + map_service_->CollectMapElementIds(point, radius); + + Json map; + map["mapElementIds"] = map_element_ids.Json(); + map["mapHash"] = map_element_ids.Hash(); + map["mapRadius"] = radius; + + return map; +} + +template <> +void SimulationWorldService::UpdateSimulationWorld( + const MonitorMessage &monitor_msg) { + std::vector updated; + updated.reserve(SimulationWorldService::kMaxMonitorItems); + // Save the latest messages at the top of the history. + int remove_size = + monitor_msg.item_size() > SimulationWorldService::kMaxMonitorItems + ? monitor_msg.item_size() - SimulationWorldService::kMaxMonitorItems + : 0; + std::copy(monitor_msg.item().begin(), + std::prev(monitor_msg.item().end(), remove_size), + std::back_inserter(updated)); + + // Copy over the previous messages until there is no more history or + // the max number of total messages has been hit. + auto history = world_.monitor().item(); + remove_size = history.size() + monitor_msg.item_size() - + SimulationWorldService::kMaxMonitorItems; + if (remove_size < 0) { + remove_size = 0; + } + std::copy(history.begin(), std::prev(history.end(), remove_size), + std::back_inserter(updated)); + + // Refresh the monitor message list in simulation_world. + ::google::protobuf::RepeatedPtrField items( + updated.begin(), updated.end()); + world_.mutable_monitor()->mutable_item()->Swap(&items); + world_.mutable_monitor()->mutable_header()->set_timestamp_sec( + ToSecond(Clock::Now())); +} + +template <> +void SimulationWorldService::UpdateSimulationWorld( + const LocalizationEstimate &localization) { + Object *auto_driving_car = world_.mutable_auto_driving_car(); + const auto &pose = localization.pose(); + + // Updates position with the input localization message. + auto_driving_car->set_position_x(pose.position().x()); + auto_driving_car->set_position_y(pose.position().y()); + auto_driving_car->set_heading(pose.heading()); + + // Updates acceleration with the input localization message. + auto_driving_car->set_speed_acceleration(CalculateAcceleration( + pose.linear_acceleration(), pose.linear_velocity())); + + // Updates the timestamp with the timestamp inside the localization + // message header. It is done on both the SimulationWorld object + // itself and its auto_driving_car() field. + auto_driving_car->set_timestamp_sec(localization.header().timestamp_sec()); + world_.set_timestamp_sec( + std::max(world_.timestamp_sec(), localization.header().timestamp_sec())); +} + +template <> +void SimulationWorldService::UpdateSimulationWorld(const Chassis &chassis) { + Object *auto_driving_car = world_.mutable_auto_driving_car(); + + auto_driving_car->set_speed(chassis.speed_mps()); + auto_driving_car->set_throttle_percentage(chassis.throttle_percentage()); + auto_driving_car->set_brake_percentage(chassis.brake_percentage()); + + // In case of out-of-range percentages, reduces it to zero. + int angle_percentage = chassis.steering_percentage(); + if (angle_percentage > 100 || angle_percentage < -100) { + angle_percentage = 0; + } + auto_driving_car->set_steering_angle(angle_percentage); + + UpdateTurnSignal(chassis.signal(), auto_driving_car); + + auto_driving_car->set_disengage_type(DeduceDisengageType(chassis)); + + // Updates the timestamp with the timestamp inside the chassis message header. + world_.set_timestamp_sec( + std::max(world_.timestamp_sec(), chassis.header().timestamp_sec())); +} + +Object &SimulationWorldService::CreateWorldObjectIfAbsent( + const PerceptionObstacle &obstacle) { + const std::string id = std::to_string(obstacle.id()); + // Create a new world object and put it into object map if the id does not + // exist in the map yet. + if (obj_map_.find(id) == obj_map_.end()) { + Object &world_obj = obj_map_[id]; + SetObstacleInfo(obstacle, &world_obj); + SetObstaclePolygon(obstacle, &world_obj); + SetObstacleType(obstacle, &world_obj); + } + return obj_map_[id]; +} + +template <> +void SimulationWorldService::UpdateSimulationWorld( + const PerceptionObstacles &obstacles) { + for (const auto &obstacle : obstacles.perception_obstacle()) { + CreateWorldObjectIfAbsent(obstacle); + } + world_.set_timestamp_sec( + std::max(world_.timestamp_sec(), obstacles.header().timestamp_sec())); +} + +void SimulationWorldService::UpdatePlanningTrajectory( + const ADCTrajectory &trajectory) { + const double cutoff_time = world_.auto_driving_car().timestamp_sec(); + const double header_time = trajectory.header().timestamp_sec(); + + util::TrajectoryPointCollector collector(&world_); + + size_t i = 0; + const size_t trajectory_length = trajectory.trajectory_point_size(); + bool collecting_started = false; + while (i < trajectory_length) { + const TrajectoryPoint &point = trajectory.trajectory_point(i); + // Trajectory points with a timestamp older than the cutoff time + // (which is effectively the timestamp of the most up-to-date + // localization/chassis message) will be dropped. + // + // Note that the last two points are always included. + if (collecting_started || + point.relative_time() + header_time >= cutoff_time) { + collecting_started = true; + collector.Collect(point); + if (i == trajectory_length - 1) { + // Break if the very last point is collected. + break; + } else if (i == trajectory_length - 2) { + // Move on to the last point if the last but one is collected. + i = trajectory_length - 1; + } else if (i < trajectory_length - 2) { + // When collecting the trajectory points, downsample with a + // ratio of 10. + constexpr double downsample_ratio = 10; + i += downsample_ratio; + if (i > trajectory_length - 2) { + i = trajectory_length - 2; + } + } else { + break; + } + } else { + ++i; + } + } +} + +void SimulationWorldService::UpdateMainDecision( + const apollo::planning::MainDecision &main_decision, + double update_timestamp_sec, Object *world_main_stop) { + apollo::common::math::Vec2d stop_pt; + double stop_heading = 0.0; + auto decision = world_main_stop->add_decision(); + decision->set_type(Decision::STOP); + if (main_decision.has_not_ready()) { + // The car is not ready! + // Use the current ADC pose since it is better not to self-drive. + stop_pt.set_x(world_.auto_driving_car().position_x()); + stop_pt.set_y(world_.auto_driving_car().position_y()); + stop_heading = world_.auto_driving_car().heading(); + decision->set_stopreason(Decision::STOP_REASON_NOT_READY); + } else if (main_decision.has_estop()) { + // Emergency stop. + // Use the current ADC pose since it is better to stop immediately. + stop_pt.set_x(world_.auto_driving_car().position_x()); + stop_pt.set_y(world_.auto_driving_car().position_y()); + stop_heading = world_.auto_driving_car().heading(); + decision->set_stopreason(Decision::STOP_REASON_EMERGENCY); + world_.mutable_auto_driving_car()->set_current_signal("EMERGENCY"); + } else { + // Normal stop. + const apollo::planning::MainStop &stop = main_decision.stop(); + stop_pt.set_x(stop.stop_point().x()); + stop_pt.set_y(stop.stop_point().y()); + stop_heading = stop.stop_heading(); + if (stop.has_reason_code()) { + SetStopReason(stop.reason_code(), decision); + } + } + world_main_stop->set_position_x(stop_pt.x()); + world_main_stop->set_position_y(stop_pt.y()); + world_main_stop->set_heading(stop_heading); + world_main_stop->set_timestamp_sec(update_timestamp_sec); +} + +void SimulationWorldService::UpdateDecision(const DecisionResult &decision_res, + double header_time) { + // Update turn signal. + UpdateTurnSignal(decision_res.vehicle_signal(), + world_.mutable_auto_driving_car()); + + apollo::planning::MainDecision main_decision = decision_res.main_decision(); + + // Update speed limit. + if (main_decision.target_lane_size() > 0) { + world_.set_speed_limit(main_decision.target_lane(0).speed_limit()); + } + + // Update relevant main stop with reason. + world_.clear_main_stop(); + if (main_decision.has_not_ready() || main_decision.has_estop() || + main_decision.has_stop()) { + Object *world_main_stop = world_.mutable_main_stop(); + UpdateMainDecision(main_decision, header_time, world_main_stop); + } + + // Update obstacle decision. + for (const auto &obj_decision : decision_res.object_decision().decision()) { + if (obj_decision.has_perception_id()) { + int id = obj_decision.perception_id(); + Object &world_obj = obj_map_[std::to_string(id)]; + if (!world_obj.has_type()) { + world_obj.set_type(Object_Type_VIRTUAL); + ADEBUG << id << " is not a current perception object"; + } + + for (const auto &decision : obj_decision.object_decision()) { + Decision *world_decision = world_obj.add_decision(); + world_decision->set_type(Decision_Type_IGNORE); + if (decision.has_stop() || decision.has_follow() || + decision.has_yield() || decision.has_overtake()) { + if (!LocateMarker(decision, world_decision)) { + AWARN << "No decision marker position found for object id=" << id; + continue; + } + } else if (decision.has_nudge()) { + if (world_obj.polygon_point_size() == 0) { + if (world_obj.type() == Object_Type_VIRTUAL) { + AWARN << "No current perception object with id=" << id + << " for nudge decision"; + } else { + AWARN << "No polygon points found for object id=" << id; + } + continue; + } + FindNudgeRegion(decision, world_obj, world_decision); + } else if (decision.has_sidepass()) { + world_decision->set_type(Decision_Type_SIDEPASS); + } + } + + world_obj.set_timestamp_sec( + std::max(world_obj.timestamp_sec(), header_time)); + } + } +} + +template <> +void SimulationWorldService::UpdateSimulationWorld( + const ADCTrajectory &trajectory) { + const double header_time = trajectory.header().timestamp_sec(); + + UpdatePlanningTrajectory(trajectory); + + UpdateDecision(trajectory.decision(), header_time); + + world_.set_timestamp_sec(std::max(world_.timestamp_sec(), header_time)); +} + +template <> +void SimulationWorldService::UpdateSimulationWorld( + const PredictionObstacles &obstacles) { + for (const auto &obstacle : obstacles.prediction_obstacle()) { + // Note: There's a perfect one-to-one mapping between the perception + // obstacles and prediction obstacles within the same frame. Creating a new + // world object here is only possible when we happen to be processing a + // percpetion and prediction message from two frames. + auto &world_obj = CreateWorldObjectIfAbsent(obstacle.perception_obstacle()); + + // Add prediction trajectory to the object. + CreatePredictionTrajectory(&world_obj, obstacle); + + world_obj.set_timestamp_sec( + std::max(obstacle.timestamp(), world_obj.timestamp_sec())); + } + world_.set_timestamp_sec( + std::max(world_.timestamp_sec(), obstacles.header().timestamp_sec())); +} + +template <> +void SimulationWorldService::UpdateSimulationWorld( + const RoutingResponse &routing_response) { + auto header_time = routing_response.header().timestamp_sec(); + + std::vector points; + if (!map_service_->GetPointsFromRouting(routing_response, &points)) { + return; + } + + world_.clear_route(); + world_.set_routing_time(header_time); + for (const auto &point : points) { + PolygonPoint *route_point = world_.add_route(); + route_point->set_x(point.x()); + route_point->set_y(point.y()); + } + + world_.set_timestamp_sec(std::max(world_.timestamp_sec(), header_time)); +} + +void SimulationWorldService::ReadRoutingFromFile( + const std::string &routing_response_file) { + RoutingResponse routing_response; + if (!GetProtoFromFile(routing_response_file, &routing_response)) { + AWARN << "Unable to read routing response from file: " + << routing_response_file; + return; + } + AINFO << "Loaded routing from " << routing_response_file; + + sleep(1); // Wait to make sure the connection has been established before + // publishing. + AdapterManager::PublishRoutingResponse(routing_response); + AINFO << "Published RoutingResponse read from file."; +} + +void SimulationWorldService::RegisterMessageCallbacks() { + if (CheckAdapterInitialized("Monitor", AdapterManager::GetMonitor())) { + AdapterManager::AddMonitorCallback( + &SimulationWorldService::UpdateSimulationWorld, this); + } + if (CheckAdapterInitialized("RoutingResponse", + AdapterManager::GetRoutingResponse())) { + AdapterManager::AddRoutingResponseCallback( + &SimulationWorldService::UpdateSimulationWorld, this); + } +} + +} // namespace dreamview +} // namespace apollo diff --git a/modules/dreamview/backend/simulation_world/simulation_world_service.h b/modules/dreamview/backend/simulation_world/simulation_world_service.h new file mode 100644 index 00000000000..7a459f62943 --- /dev/null +++ b/modules/dreamview/backend/simulation_world/simulation_world_service.h @@ -0,0 +1,205 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + */ + +#ifndef MODULES_DREAMVIEW_BACKEND_SIMULATION_WORLD_SIM_WORLD_H_ +#define MODULES_DREAMVIEW_BACKEND_SIMULATION_WORLD_SIM_WORLD_H_ + +#include +#include +#include + +#include "gtest/gtest_prod.h" +#include "third_party/json/json.hpp" + +#include "modules/dreamview/backend/map/map_service.h" +#include "modules/dreamview/proto/simulation_world.pb.h" + +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/log.h" +#include "modules/common/monitor/monitor.h" + +/** + * @namespace apollo::dreamview + * @brief apollo::dreamview + */ +namespace apollo { +namespace dreamview { + +/** + * @class SimulationWorldService + * @brief This is a major component of the Simulation backend, which + * maintains a SimulationWorld object and keeps updating it. The SimulationWorld + * represents the most up-to-date information about all the objects + * in the emulated world, including the car, the planning trajectory, etc. + * NOTE: This class is not thread-safe. + */ +class SimulationWorldService { + public: + // The maximum number of monitor message items to be kept in + // SimulationWorld. + static constexpr int kMaxMonitorItems = 30; + + /** + * @brief Constructor of SimulationWorldService. + * @param map_service the pointer of MapService. + * @param routing_from_file whether to read intial routing from file. + */ + SimulationWorldService(const MapService *map_service, + bool routing_from_file = false); + + /** + * @brief Get a read-only view of the SimulationWorld. + * @return Constant reference to the SimulationWorld object. + */ + inline const SimulationWorld &world() const { + return world_; + } + + /** + * @brief Returns the json representation of the SimulationWorld object. + * @param radius the search distance from the current car location + * @return Json object equivalence of the SimulationWorld object. + */ + nlohmann::json GetUpdateAsJson(double radius) const; + + /** + * @brief Returns the json representation of the map element Ids and hash + * within the given radious from the car. + * @param radius the search distance from the current car location + * @return Json object that contains mapElementIds and mapHash. + */ + nlohmann::json GetMapElements(double radius) const; + + /** + * @brief The function Update() is periodically called to check for updates + * from the adapters. All the updates will be written to the SimulationWorld + * object to reflect the latest status. + * @return Constant reference to the SimulationWorld object. + */ + const SimulationWorld &Update(); + + /** + * @brief Check whether the SimulationWorld object has enough information. + * The backend won't push the SimulationWorld to frontend if it is not ready. + * @return True if the object is ready to push. + */ + bool ReadyToPush() const { + return world_.has_auto_driving_car() && + world_.auto_driving_car().has_position_x() && + world_.auto_driving_car().has_position_y(); + } + + /** + * @brief Publish message to the monitor + * @param msg the string to send to monitor + * @param log_level defined in modules/common/monitor/proto/monitor.proto + */ + void PublishMonitorMessage( + apollo::common::monitor::MonitorMessageItem::LogLevel log_level, + const std::string &msg) { + apollo::common::monitor::MonitorBuffer buffer(&monitor_); + buffer.AddMonitorMsgItem(log_level, msg); + } + + private: + /** + * @brief Update simulation world with incoming data, e.g., chassis, + * localization, planning, perception, etc. + */ + template + void UpdateSimulationWorld(const DataType &data); + + Object &CreateWorldObjectIfAbsent( + const apollo::perception::PerceptionObstacle &obstacle); + void UpdatePlanningTrajectory( + const apollo::planning::ADCTrajectory &trajectory); + void UpdateDecision(const apollo::planning::DecisionResult &decision_res, + double header_time); + void UpdateMainDecision(const apollo::planning::MainDecision &main_decision, + double update_timestamp_sec, Object *world_main_stop); + + /** + * @brief Check whether a particular adapter has been initialized correctly. + */ + template + bool CheckAdapterInitialized(const std::string &adapter_name, + AdapterType *adapter) { + if (adapter == nullptr) { + AERROR << adapter_name << " adapter is not correctly initialized. " + "Please check the adapter manager " + "configuration."; + return false; + } + return true; + } + + /** + * @brief Get the latest observed data from the adatper manager to update the + * SimulationWorld object when triggered by refresh timer. + */ + template + void UpdateWithLatestObserved(const std::string &adapter_name, + AdapterType *adapter) { + if (!CheckAdapterInitialized(adapter_name, adapter)) { + return; + } + + if (adapter->Empty()) { + AINFO_EVERY(100) << adapter_name + << " adapter has not received any data yet."; + return; + } + + UpdateSimulationWorld(adapter->GetLatestObserved()); + } + + void RegisterMessageCallbacks(); + + void ReadRoutingFromFile(const std::string &routing_response_file); + + // The underlying SimulationWorld object, owned by the + // SimulationWorldService instance. + SimulationWorld world_; + + // The handle of MapService, not owned by SimulationWorldService. + const MapService *map_service_; + + // The map holding obstacle string id to the actual object + std::unordered_map obj_map_; + + // The SIMULATOR monitor for publishing messages. + apollo::common::monitor::Monitor monitor_; + + FRIEND_TEST(SimulationWorldServiceTest, UpdateMonitorSuccess); + FRIEND_TEST(SimulationWorldServiceTest, UpdateMonitorRemove); + FRIEND_TEST(SimulationWorldServiceTest, UpdateMonitorTruncate); + FRIEND_TEST(SimulationWorldServiceTest, UpdateChassisInfo); + FRIEND_TEST(SimulationWorldServiceTest, UpdateLocalization); + FRIEND_TEST(SimulationWorldServiceTest, UpdatePerceptionObstacles); + FRIEND_TEST(SimulationWorldServiceTest, UpdatePlanningTrajectory); + FRIEND_TEST(SimulationWorldServiceTest, UpdateDecision); + FRIEND_TEST(SimulationWorldServiceTest, UpdatePrediction); + FRIEND_TEST(SimulationWorldServiceTest, UpdateRouting); +}; + +} // namespace dreamview +} // namespace apollo + +#endif // MODULES_DREAMVIEW_BACKEND_SIMULATION_WORLD_SIM_WORLD_H_ diff --git a/modules/dreamview/backend/simulation_world/simulation_world_service_test.cc b/modules/dreamview/backend/simulation_world/simulation_world_service_test.cc new file mode 100644 index 00000000000..2e683d24406 --- /dev/null +++ b/modules/dreamview/backend/simulation_world/simulation_world_service_test.cc @@ -0,0 +1,482 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/dreamview/backend/simulation_world/simulation_world_service.h" + +#include +#include "gtest/gtest.h" + +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/math/quaternion.h" + +#include "modules/dreamview/backend/common/dreamview_gflags.h" + +using apollo::canbus::Chassis; +using apollo::common::monitor::MonitorMessage; +using apollo::localization::LocalizationEstimate; +using apollo::planning::ADCTrajectory; +using apollo::common::TrajectoryPoint; +using apollo::planning::DecisionResult; +using apollo::perception::PerceptionObstacle; +using apollo::perception::PerceptionObstacles; +using apollo::prediction::PredictionObstacle; +using apollo::prediction::PredictionObstacles; + +using apollo::common::adapter::AdapterConfig; +using apollo::common::adapter::AdapterManager; +using apollo::common::adapter::AdapterManagerConfig; + +namespace apollo { +namespace dreamview { + +const float kEpsilon = 0.01; + +class SimulationWorldServiceTest : public ::testing::Test { + public: + virtual void SetUp() { + // Setup AdapterManager. + AdapterManagerConfig config; + config.set_is_ros(false); + { + auto* sub_config = config.add_config(); + sub_config->set_mode(AdapterConfig::PUBLISH_ONLY); + sub_config->set_type(AdapterConfig::MONITOR); + } + { + auto* sub_config = config.add_config(); + sub_config->set_mode(AdapterConfig::PUBLISH_ONLY); + sub_config->set_type(AdapterConfig::ROUTING_RESPONSE); + } + AdapterManager::Init(config); + + FLAGS_routing_response_file = + "modules/dreamview/backend/testdata/routing.pb.txt"; + apollo::common::VehicleConfigHelper::Init(); + sim_world_service_.reset(new SimulationWorldService(&map_service_)); + } + + protected: + SimulationWorldServiceTest() + : map_service_("modules/dreamview/backend/testdata/garage.bin") {} + + MapService map_service_; + std::unique_ptr sim_world_service_; +}; + +TEST_F(SimulationWorldServiceTest, UpdateMonitorSuccess) { + MonitorMessage monitor; + monitor.add_item()->set_msg("I am the latest message."); + monitor.mutable_header()->set_timestamp_sec(2000); + + sim_world_service_->world_.mutable_monitor() + ->mutable_header() + ->set_timestamp_sec(1990); + sim_world_service_->world_.mutable_monitor()->add_item()->set_msg( + "I am the previous message."); + + sim_world_service_->UpdateSimulationWorld(monitor); + + const SimulationWorld& world = sim_world_service_->world(); + EXPECT_EQ(2, world.monitor().item_size()); + EXPECT_EQ("I am the latest message.", world.monitor().item(0).msg()); + EXPECT_EQ("I am the previous message.", world.monitor().item(1).msg()); +} + +TEST_F(SimulationWorldServiceTest, UpdateMonitorRemove) { + MonitorMessage monitor; + monitor.add_item()->set_msg("I am message -2"); + monitor.add_item()->set_msg("I am message -1"); + monitor.mutable_header()->set_timestamp_sec(2000); + + sim_world_service_->world_.mutable_monitor() + ->mutable_header() + ->set_timestamp_sec(1990); + for (int i = 0; i < SimulationWorldService::kMaxMonitorItems; ++i) { + sim_world_service_->world_.mutable_monitor()->add_item()->set_msg( + "I am message " + std::to_string(i)); + } + int last = SimulationWorldService::kMaxMonitorItems - 1; + EXPECT_EQ("I am message " + std::to_string(last), + sim_world_service_->world_.monitor().item(last).msg()); + + sim_world_service_->UpdateSimulationWorld(monitor); + + const SimulationWorld& world = sim_world_service_->world(); + EXPECT_EQ(SimulationWorldService::kMaxMonitorItems, + world.monitor().item_size()); + EXPECT_EQ("I am message -2", world.monitor().item(0).msg()); + EXPECT_EQ("I am message -1", world.monitor().item(1).msg()); + EXPECT_EQ("I am message " + std::to_string(last - monitor.item_size()), + world.monitor().item(last).msg()); +} + +TEST_F(SimulationWorldServiceTest, UpdateMonitorTruncate) { + MonitorMessage monitor; + int large_size = SimulationWorldService::kMaxMonitorItems + 10; + for (int i = 0; i < large_size; ++i) { + monitor.add_item()->set_msg("I am message " + std::to_string(i)); + } + monitor.mutable_header()->set_timestamp_sec(2000); + EXPECT_EQ(large_size, monitor.item_size()); + EXPECT_EQ("I am message " + std::to_string(large_size - 1), + monitor.item(large_size - 1).msg()); + sim_world_service_->world_.mutable_monitor() + ->mutable_header() + ->set_timestamp_sec(1990); + + sim_world_service_->UpdateSimulationWorld(monitor); + + const SimulationWorld& world = sim_world_service_->world(); + int last = SimulationWorldService::kMaxMonitorItems - 1; + EXPECT_EQ(SimulationWorldService::kMaxMonitorItems, + world.monitor().item_size()); + EXPECT_EQ("I am message 0", world.monitor().item(0).msg()); + EXPECT_EQ("I am message " + std::to_string(last), + world.monitor().item(last).msg()); +} + +TEST_F(SimulationWorldServiceTest, UpdateChassisInfo) { + // Prepare the chassis message that will be used to update the + // SimulationWorld object. + Chassis chassis; + chassis.set_speed_mps(25); + chassis.set_throttle_percentage(50); + chassis.set_brake_percentage(10); + chassis.set_steering_percentage(25); + chassis.mutable_signal()->set_turn_signal( + apollo::common::VehicleSignal::TURN_RIGHT); + + // Commit the update. + sim_world_service_->UpdateSimulationWorld(chassis); + + // Check the update reuslt. + const Object& car = sim_world_service_->world_.auto_driving_car(); + EXPECT_DOUBLE_EQ(4.933, car.length()); + EXPECT_DOUBLE_EQ(2.11, car.width()); + EXPECT_DOUBLE_EQ(1.48, car.height()); + EXPECT_DOUBLE_EQ(25.0, car.speed()); + EXPECT_DOUBLE_EQ(50.0, car.throttle_percentage()); + EXPECT_DOUBLE_EQ(10.0, car.brake_percentage()); + EXPECT_DOUBLE_EQ(25.0, car.steering_angle()); + EXPECT_EQ("RIGHT", car.current_signal()); +} + +TEST_F(SimulationWorldServiceTest, UpdateLocalization) { + // Prepare the localization message that will be used to update the + // SimulationWorld object. + LocalizationEstimate localization; + localization.mutable_pose()->mutable_position()->set_x(1.0); + localization.mutable_pose()->mutable_position()->set_y(1.5); + localization.mutable_pose()->mutable_orientation()->set_qx(0.0); + localization.mutable_pose()->mutable_orientation()->set_qy(0.0); + localization.mutable_pose()->mutable_orientation()->set_qz(0.0); + localization.mutable_pose()->mutable_orientation()->set_qw(0.0); + + auto pose = localization.pose(); + auto heading = apollo::common::math::QuaternionToHeading( + pose.orientation().qw(), pose.orientation().qx(), pose.orientation().qy(), + pose.orientation().qz()); + localization.mutable_pose()->set_heading(heading); + + // Commit the update. + sim_world_service_->UpdateSimulationWorld(localization); + + // Check the update result. + const Object& car = sim_world_service_->world_.auto_driving_car(); + EXPECT_DOUBLE_EQ(1.0, car.position_x()); + EXPECT_DOUBLE_EQ(1.5, car.position_y()); + EXPECT_DOUBLE_EQ( + apollo::common::math::QuaternionToHeading(0.0, 0.0, 0.0, 0.0), + car.heading()); +} + +TEST_F(SimulationWorldServiceTest, UpdatePerceptionObstacles) { + PerceptionObstacles obstacles; + PerceptionObstacle* obstacle1 = obstacles.add_perception_obstacle(); + obstacle1->set_id(1); + apollo::perception::Point* point1 = obstacle1->add_polygon_point(); + point1->set_x(0.0); + point1->set_y(0.0); + apollo::perception::Point* point2 = obstacle1->add_polygon_point(); + point2->set_x(0.0); + point2->set_y(1.0); + apollo::perception::Point* point3 = obstacle1->add_polygon_point(); + point3->set_x(-1.0); + point3->set_y(0.0); + obstacle1->set_timestamp(1489794020.123); + obstacle1->set_type(apollo::perception::PerceptionObstacle_Type_UNKNOWN); + PerceptionObstacle* obstacle2 = obstacles.add_perception_obstacle(); + obstacle2->set_id(2); + apollo::perception::Point* point = obstacle2->mutable_position(); + point->set_x(1.0); + point->set_y(2.0); + obstacle2->set_theta(3.0); + obstacle2->set_length(4.0); + obstacle2->set_width(5.0); + obstacle2->set_height(6.0); + obstacle2->mutable_velocity()->set_x(3.0); + obstacle2->mutable_velocity()->set_y(4.0); + obstacle2->set_type(apollo::perception::PerceptionObstacle_Type_VEHICLE); + + sim_world_service_->UpdateSimulationWorld(obstacles); + sim_world_service_->world_.clear_object(); + for (auto& kv : sim_world_service_->obj_map_) { + *sim_world_service_->world_.add_object() = kv.second; + } + EXPECT_EQ(2, sim_world_service_->world_.object_size()); + + for (const auto& object : sim_world_service_->world_.object()) { + if (object.id() == "1") { + EXPECT_DOUBLE_EQ(1489794020.123, object.timestamp_sec()); + EXPECT_EQ(3, object.polygon_point_size()); + EXPECT_EQ(Object_Type_UNKNOWN, object.type()); + } else if (object.id() == "2") { + EXPECT_DOUBLE_EQ(1.0, object.position_x()); + EXPECT_DOUBLE_EQ(2.0, object.position_y()); + EXPECT_DOUBLE_EQ(3.0, object.heading()); + EXPECT_DOUBLE_EQ(4.0, object.length()); + EXPECT_DOUBLE_EQ(5.0, object.width()); + EXPECT_DOUBLE_EQ(6.0, object.height()); + EXPECT_DOUBLE_EQ(5.0, object.speed()); + EXPECT_NEAR(0.927295, object.speed_heading(), kEpsilon); + EXPECT_EQ(0, object.polygon_point_size()); + EXPECT_EQ(Object_Type_VEHICLE, object.type()); + } else { + EXPECT_TRUE(false) << "Unexpected object id " << object.id(); + } + } +} + +TEST_F(SimulationWorldServiceTest, UpdatePlanningTrajectory) { + // Prepare the trajectory message that will be used to update the + // SimulationWorld object. + ADCTrajectory planning_trajectory; + for (int i = 0; i < 30; ++i) { + TrajectoryPoint* point = planning_trajectory.add_trajectory_point(); + point->mutable_path_point()->set_x(i * 10); + point->mutable_path_point()->set_y(i * 10 + 10); + } + + // Commit the update. + sim_world_service_->UpdatePlanningTrajectory(planning_trajectory); + + // Check the update result. + const SimulationWorld& world = sim_world_service_->world(); + EXPECT_EQ(4, world.planning_trajectory_size()); + + // Check first point. + { + const Object point = world.planning_trajectory(0); + EXPECT_DOUBLE_EQ(0.0, point.position_x()); + EXPECT_DOUBLE_EQ(10.0, point.position_y()); + EXPECT_DOUBLE_EQ(atan2(100.0, 100.0), point.heading()); + EXPECT_EQ(4, point.polygon_point_size()); + } + + // Check last point. + { + const Object point = world.planning_trajectory(3); + EXPECT_DOUBLE_EQ(280.0, point.position_x()); + EXPECT_DOUBLE_EQ(290.0, point.position_y()); + EXPECT_DOUBLE_EQ(atan2(100.0, 100.0), point.heading()); + EXPECT_EQ(4, point.polygon_point_size()); + } +} + +TEST_F(SimulationWorldServiceTest, UpdateDecision) { + DecisionResult decision_res; + + decision_res.mutable_vehicle_signal()->set_turn_signal( + apollo::common::VehicleSignal::TURN_RIGHT); + + apollo::planning::MainDecision* main_decision = + decision_res.mutable_main_decision(); + main_decision->add_target_lane()->set_speed_limit(35); + apollo::planning::MainStop* main_stop = main_decision->mutable_stop(); + main_stop->mutable_stop_point()->set_x(45678.9); + main_stop->mutable_stop_point()->set_y(1234567.8); + main_stop->set_stop_heading(1.234); + main_stop->set_reason_code( + apollo::planning::StopReasonCode::STOP_REASON_CROSSWALK); + + apollo::planning::ObjectDecisions* obj_decisions = + decision_res.mutable_object_decision(); + // The 1st obstacle is from perception and has 2 decisions: nudge or sidepass. + apollo::planning::ObjectDecision* obj_decision1 = + obj_decisions->add_decision(); + obj_decision1->set_perception_id(1); + Object& perception1 = sim_world_service_->obj_map_["1"]; + perception1.set_type(Object_Type_UNKNOWN_UNMOVABLE); + perception1.set_id("1"); + perception1.set_position_x(1.0); + perception1.set_position_y(2.0); + perception1.set_heading(3.0); + perception1.set_length(4.0); + perception1.set_width(5.0); + perception1.set_height(6.0); + for (int i = 0; i < 3; ++i) { + PolygonPoint* perception_pt = perception1.add_polygon_point(); + if (i < 2) { + perception_pt->set_x(10.0 * (i + 1)); + perception_pt->set_y(20.0 * (i + 1)); + } else { + perception_pt->set_y(10.0 * (i + 1)); + perception_pt->set_x(20.0 * (i + 1)); + } + } + obj_decision1->add_object_decision()->mutable_nudge()->set_distance_l(1.8); + obj_decision1->add_object_decision()->mutable_sidepass(); + // The 2nd obstacle is virtual and has only 1 decision: yield. + apollo::planning::ObjectDecision* obj_decision2 = + obj_decisions->add_decision(); + obj_decision2->set_perception_id(2); + apollo::planning::ObjectYield* yield = + obj_decision2->add_object_decision()->mutable_yield(); + apollo::common::PointENU* fence_point = yield->mutable_fence_point(); + fence_point->set_x(-1859.98); + fence_point->set_y(-3000.03); + yield->set_fence_heading(1.3); + + sim_world_service_->UpdateDecision(decision_res, 1501095053); + + const SimulationWorld& world = sim_world_service_->world(); + EXPECT_EQ("RIGHT", world.auto_driving_car().current_signal()); + EXPECT_EQ(35, world.speed_limit()); + + const Object& world_main_stop = world.main_stop(); + EXPECT_EQ(world_main_stop.decision(0).stopreason(), + Decision::STOP_REASON_CROSSWALK); + EXPECT_DOUBLE_EQ(45678.9, world_main_stop.position_x()); + EXPECT_DOUBLE_EQ(1234567.8, world_main_stop.position_y()); + EXPECT_DOUBLE_EQ(1.234, world_main_stop.heading()); + + sim_world_service_->world_.clear_object(); + for (auto& kv : sim_world_service_->obj_map_) { + *sim_world_service_->world_.add_object() = kv.second; + } + EXPECT_EQ(world.object_size(), 2); + + for (int i = 0; i < 2; ++i) { + const Object& obj_dec = world.object(i); + if (obj_dec.id() == "1") { + EXPECT_EQ(Object_Type_UNKNOWN_UNMOVABLE, obj_dec.type()); + EXPECT_DOUBLE_EQ(1.0, obj_dec.position_x()); + EXPECT_DOUBLE_EQ(2.0, obj_dec.position_y()); + EXPECT_DOUBLE_EQ(3.0, obj_dec.heading()); + EXPECT_DOUBLE_EQ(4.0, obj_dec.length()); + EXPECT_DOUBLE_EQ(5.0, obj_dec.width()); + EXPECT_DOUBLE_EQ(6.0, obj_dec.height()); + EXPECT_EQ(obj_dec.decision_size(), 2); + for (int j = 0; j < obj_dec.decision_size(); ++j) { + const Decision& decision = obj_dec.decision(j); + if (j == 0) { + EXPECT_EQ(decision.type(), Decision_Type_NUDGE); + EXPECT_EQ(decision.polygon_point_size(), 67); + } else { + EXPECT_EQ(decision.type(), Decision_Type_SIDEPASS); + } + } + } else { + EXPECT_EQ(Object_Type_VIRTUAL, obj_dec.type()); + EXPECT_EQ(1, obj_dec.decision_size()); + const Decision& decision = obj_dec.decision(0); + EXPECT_EQ(Decision_Type_YIELD, decision.type()); + EXPECT_DOUBLE_EQ(-1859.98, decision.position_x()); + EXPECT_DOUBLE_EQ(-3000.03, decision.position_y()); + EXPECT_DOUBLE_EQ(1.3, decision.heading()); + } + } +} + +TEST_F(SimulationWorldServiceTest, UpdatePrediction) { + // Update with prediction obstacles + PredictionObstacles prediction_obstacles; + for (int i = 0; i < 3; ++i) { + auto* obstacle = prediction_obstacles.add_prediction_obstacle(); + auto* perception_obstacle = obstacle->mutable_perception_obstacle(); + perception_obstacle->set_id(i); + for (int j = 0; j < 5; ++j) { + auto* traj = obstacle->add_trajectory(); + traj->set_probability(i * 0.1 + j); + for (int k = 0; k < 8; ++k) { + auto* traj_pt = traj->add_trajectory_point()->mutable_path_point(); + int pt = j * 10 + k; + traj_pt->set_x(pt); + traj_pt->set_y(pt); + traj_pt->set_z(pt); + } + } + obstacle->set_timestamp(123.456); + } + sim_world_service_->UpdateSimulationWorld(prediction_obstacles); + sim_world_service_->world_.clear_object(); + for (auto& kv : sim_world_service_->obj_map_) { + *sim_world_service_->world_.add_object() = kv.second; + } + + // Verify + const auto& sim_world = sim_world_service_->world(); + EXPECT_EQ(3, sim_world.object_size()); + for (int i = 0; i < sim_world.object_size(); ++i) { + const Object& obj = sim_world.object(i); + EXPECT_EQ(5, obj.prediction_size()); + + for (int j = 0; j < obj.prediction_size(); ++j) { + const Prediction& prediction = obj.prediction(j); + EXPECT_NEAR((sim_world.object_size() - i - 1) * 0.1 + j, + prediction.probability(), kEpsilon); + EXPECT_EQ(prediction.predicted_trajectory_size(), 8); + for (int k = 0; k < prediction.predicted_trajectory_size(); ++k) { + const auto& pt = prediction.predicted_trajectory(k); + int val = j * 10 + k; + EXPECT_NEAR(val, pt.x(), kEpsilon); + EXPECT_NEAR(val, pt.y(), kEpsilon); + EXPECT_NEAR(val, pt.z(), kEpsilon); + } + } + EXPECT_NEAR(123.456, obj.timestamp_sec(), kEpsilon); + } +} + +TEST_F(SimulationWorldServiceTest, UpdateRouting) { + // Load routing from file + sim_world_service_.reset(new SimulationWorldService(&map_service_, true)); + sim_world_service_->UpdateSimulationWorld( + *AdapterManager::GetRoutingResponse()->GetLatestPublished()); + + auto& world = sim_world_service_->world_; + EXPECT_EQ(world.routing_time(), 1234.5); + EXPECT_EQ(23, world.route_size()); + + double points[23][2] = { + {-1826.41, -3027.52}, {-1839.88, -3023.9}, {-1851.95, -3020.71}, + {-1857.06, -3018.62}, {-1858.04, -3017.94}, {-1859.56, -3016.51}, + {-1860.48, -3014.95}, {-1861.12, -3013.2}, {-1861.62, -3010.06}, + {-1861.29, -3005.88}, {-1859.8, -2999.36}, {-1855.8, -2984.56}, + {-1851.39, -2968.23}, {-1844.32, -2943.14}, {-1842.9, -2939.22}, + {-1841.74, -2937.09}, {-1839.35, -2934.03}, {-1837.76, -2932.88}, + {-1835.53, -2931.86}, {-1833.36, -2931.52}, {-1831.33, -2931.67}, + {-1827.05, -2932.6}, {-1809.64, -2937.85}}; + + for (int i = 0; i < world.route_size(); ++i) { + EXPECT_NEAR(world.route(i).x(), points[i][0], kEpsilon); + EXPECT_NEAR(world.route(i).y(), points[i][1], kEpsilon); + } +} + +} // namespace dreamview +} // namespace apollo diff --git a/modules/dreamview/backend/simulation_world/simulation_world_updater.cc b/modules/dreamview/backend/simulation_world/simulation_world_updater.cc new file mode 100644 index 00000000000..656a46c2c0b --- /dev/null +++ b/modules/dreamview/backend/simulation_world/simulation_world_updater.cc @@ -0,0 +1,201 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/dreamview/backend/simulation_world/simulation_world_updater.h" + +#include "google/protobuf/util/json_util.h" +#include "modules/dreamview/backend/common/dreamview_gflags.h" +#include "modules/map/hdmap/hdmap_util.h" + +namespace apollo { +namespace dreamview { + +using apollo::common::adapter::AdapterManager; +using apollo::common::monitor::MonitorMessageItem; +using apollo::common::util::GetProtoFromASCIIFile; +using apollo::hdmap::EndWayPointFile; +using apollo::routing::RoutingRequest; +using google::protobuf::util::MessageToJsonString; +using Json = nlohmann::json; + +SimulationWorldUpdater::SimulationWorldUpdater(WebSocketHandler *websocket, + const MapService *map_service, + bool routing_from_file) + : sim_world_service_(map_service, routing_from_file), + map_service_(map_service), + websocket_(websocket) { + // Initialize default end point + if (!GetProtoFromASCIIFile(EndWayPointFile(), &default_end_point_)) { + AWARN << "Failed to load default end point from " << EndWayPointFile(); + } + + websocket_->RegisterMessageHandler( + "RetrieveMapData", + [this](const Json &json, WebSocketHandler::Connection *conn) { + auto iter = json.find("elements"); + if (iter != json.end()) { + MapElementIds map_element_ids(*iter); + auto retrieved = map_service_->RetrieveMapElements(map_element_ids); + + std::string retrieved_json_string; + MessageToJsonString(retrieved, &retrieved_json_string); + + Json response; + response["type"] = "MapData"; + response["data"] = Json::parse(retrieved_json_string); + + websocket_->SendData(conn, response.dump()); + } + }); + + websocket_->RegisterMessageHandler( + "RetrieveMapElementsByRadius", + [this](const Json &json, WebSocketHandler::Connection *conn) { + auto radius = json.find("radius"); + if (radius == json.end()) { + AERROR << "Cannot retrieve map elements with unknown radius."; + return; + } + + Json response = sim_world_service_.GetMapElements(*radius); + response["type"] = "MapElements"; + websocket_->SendData(conn, response.dump()); + }); + + websocket_->RegisterMessageHandler( + "SendRoutingRequest", + [this](const Json &json, WebSocketHandler::Connection *conn) { + RoutingRequest routing_request; + + bool succeed = ConstructRoutingRequest(json, &routing_request); + if (succeed) { + AdapterManager::FillRoutingRequestHeader(FLAGS_dreamview_module_name, + &routing_request); + AdapterManager::PublishRoutingRequest(routing_request); + } + + // Publish monitor message. + if (succeed) { + sim_world_service_.PublishMonitorMessage( + MonitorMessageItem::INFO, "Routing Request Sent"); + } else { + sim_world_service_.PublishMonitorMessage( + MonitorMessageItem::ERROR, "Failed to send routing request"); + } + }); + + websocket_->RegisterMessageHandler( + "RequestSimulationWorld", + [this](const Json &json, WebSocketHandler::Connection *conn) { + if (!sim_world_service_.ReadyToPush()) { + AWARN_EVERY(100) + << "Not sending simulation world as the data is not ready!"; + return; + } + + std::string to_send; + { + // Pay the price to copy the data instead of sending data over the + // wire while holding the lock. + boost::shared_lock reader_lock(mutex_); + to_send = simulation_world_json_; + } + websocket_->SendData(conn, to_send, true); + }); +} + +bool SimulationWorldUpdater::ConstructRoutingRequest( + const Json &json, RoutingRequest *routing_request) { + // Input validations + if (json.find("start") == json.end() || + json.find("sendDefaultRoute") == json.end()) { + AERROR << "Cannot prepare a routing request: input validation failed."; + return false; + } + + // Try to reload end point if it hasn't be loaded yet. + if (!default_end_point_.has_id() && + !GetProtoFromASCIIFile(EndWayPointFile(), &default_end_point_)) { + AERROR << "Failed to load default end point from " << EndWayPointFile(); + return false; + } + + // set start point + auto start = json["start"]; + if (start.find("x") == start.end() || start.find("y") == start.end()) { + AERROR << "Failed to prepare a routing request: start point not found"; + return false; + } + map_service_->ConstructLaneWayPoint(start["x"], start["y"], + routing_request->mutable_start()); + + // set way point(s) if any + auto iter = json.find("waypoint"); + if (iter != json.end()) { + auto *waypoint = routing_request->mutable_waypoint(); + for (size_t i = 0; i < iter->size(); ++i) { + auto &point = (*iter)[i]; + if (!map_service_->ConstructLaneWayPoint(point["x"], point["y"], + waypoint->Add())) { + waypoint->RemoveLast(); + } + } + } + + // set end point + RoutingRequest::LaneWaypoint *endLane = routing_request->mutable_end(); + if (json["sendDefaultRoute"]) { + endLane->set_id(default_end_point_.id()); + endLane->set_s(default_end_point_.s()); + auto *pose = endLane->mutable_pose(); + pose->set_x(default_end_point_.pose().x()); + pose->set_y(default_end_point_.pose().y()); + } else { + if (json.find("end") == json.end()) { + AERROR << "Failed to prepare a routing request: end point not found"; + return false; + } + + auto end = json["end"]; + if (end.find("x") == end.end() || end.find("y") == end.end()) { + AERROR << "Failed to prepare a routing request: end point not found"; + return false; + } + map_service_->ConstructLaneWayPoint(end["x"], end["y"], endLane); + } + + return true; +} + +void SimulationWorldUpdater::Start() { + // start ROS timer, one-shot = false, auto-start = true + timer_ = AdapterManager::CreateTimer(ros::Duration(kSimWorldTimeInterval), + &SimulationWorldUpdater::OnTimer, this); +} + +void SimulationWorldUpdater::OnTimer(const ros::TimerEvent &event) { + sim_world_service_.Update(); + + { + boost::unique_lock writer_lock(mutex_); + + simulation_world_json_ = + sim_world_service_.GetUpdateAsJson(FLAGS_map_radius).dump(); + } +} + +} // namespace dreamview +} // namespace apollo diff --git a/modules/dreamview/backend/simulation_world/simulation_world_updater.h b/modules/dreamview/backend/simulation_world/simulation_world_updater.h new file mode 100644 index 00000000000..f6ad1346909 --- /dev/null +++ b/modules/dreamview/backend/simulation_world/simulation_world_updater.h @@ -0,0 +1,106 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + */ + +#ifndef MODULES_DREAMVIEW_BACKEND_SIMULATION_WORLD_SIM_WORLD_UPDATER_H_ +#define MODULES_DREAMVIEW_BACKEND_SIMULATION_WORLD_SIM_WORLD_UPDATER_H_ + +#include + +#include "boost/thread/locks.hpp" +#include "boost/thread/shared_mutex.hpp" + +#include "modules/common/log.h" +#include "modules/dreamview/backend/map/map_service.h" +#include "modules/dreamview/backend/simulation_world/simulation_world_service.h" +#include "modules/dreamview/backend/websocket/websocket.h" + +/** + * @namespace apollo::dreamview + * @brief apollo::dreamview + */ +namespace apollo { +namespace dreamview { + +/** + * @class SimulationWorldUpdater + * @brief A wrapper around SimulationWorldService and WebSocketHandler to keep + * pushing SimulationWorld to frontend via websocket while handling the response + * from frontend. + */ +class SimulationWorldUpdater { + public: + /** + * @brief Constructor with the websocket handler. + * @param websocket Pointer of the websocket handler that has been attached to + * the server. + * @param map_service Pointer of the map service to provide a high-level API + * of hdmap. + * @param routing_from_file whether to read initial routing from file. + */ + SimulationWorldUpdater(WebSocketHandler *websocket, + const MapService *map_service, + bool routing_from_file = false); + + /** + * @brief Starts to push simulation_world to frontend. + */ + void Start(); + + private: + /** + * @brief The callback function to get updates from SimulationWorldService, + * and update simulation_world_json_. + * @param event Timer event + */ + void OnTimer(const ros::TimerEvent &event); + + /** + * @brief The function to construct a routing request from the given json, + * @param json that contains start, end, and waypoints + * @param routing_request + * @return True if routing request is constructed successfully + */ + bool ConstructRoutingRequest( + const nlohmann::json &json, + apollo::routing::RoutingRequest *routing_request); + + // Time interval, in seconds, between pushing SimulationWorld to frontend. + static constexpr double kSimWorldTimeInterval = 0.1; + + ros::Timer timer_; + SimulationWorldService sim_world_service_; + const MapService *map_service_; + WebSocketHandler *websocket_; + + // End point for requesting default route + apollo::routing::RoutingRequest::LaneWaypoint default_end_point_; + + // The json string to be pushed to frontend, which is updated by timer. + std::string simulation_world_json_; + + // Mutex to protect concurrent access to simulation_world_json_. + // NOTE: Use boost until we have std version of rwlock support. + boost::shared_mutex mutex_; +}; + +} // namespace dreamview +} // namespace apollo + +#endif // MODULES_DREAMVIEW_BACKEND_SIMULATION_WORLD_SIM_WORLD_UPDATER_H_ diff --git a/modules/dreamview/backend/simulation_world_service.cc b/modules/dreamview/backend/simulation_world_service.cc deleted file mode 100644 index ce4fc763802..00000000000 --- a/modules/dreamview/backend/simulation_world_service.cc +++ /dev/null @@ -1,265 +0,0 @@ -/****************************************************************************** - * Copyright 2017 The Apollo 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. - *****************************************************************************/ - -#include "modules/dreamview/backend/simulation_world_service.h" - -#include -#include -#include - -#include "google/protobuf/util/json_util.h" -#include "modules/canbus/proto/chassis.pb.h" -#include "modules/common/configs/vehicle_config_helper.h" -#include "modules/common/math/quaternion.h" -#include "modules/common/proto/geometry.pb.h" -#include "modules/common/time/time.h" -#include "modules/dreamview/backend/trajectory_point_collector.h" -#include "modules/dreamview/proto/simulation_world.pb.h" -#include "modules/localization/proto/localization.pb.h" -#include "modules/planning/proto/planning.pb.h" - -using apollo::common::Point3D; -using apollo::common::adapter::AdapterManager; -using apollo::common::adapter::MonitorAdapter; -using apollo::common::adapter::LocalizationAdapter; -using apollo::common::adapter::ChassisAdapter; -using apollo::common::adapter::PlanningTrajectoryAdapter; -using apollo::common::config::VehicleConfigHelper; -using apollo::common::monitor::MonitorMessage; -using apollo::common::monitor::MonitorMessageItem; -using apollo::localization::LocalizationEstimate; -using apollo::planning::ADCTrajectory; -using apollo::planning::ADCTrajectoryPoint; -using apollo::canbus::Chassis; -using apollo::common::time::Clock; -using apollo::common::time::ToSecond; -using apollo::common::time::millis; - -using Json = nlohmann::json; - -namespace apollo { -namespace dreamview { - -namespace { - -double CalculateAcceleration(const Point3D &acceleration, - const Point3D &velocity) { - // Calculates the dot product of acceleration and velocity. The sign - // of this projection indicates whether this is acceleration or - // deceleration. - double projection = - acceleration.x() * velocity.x() + acceleration.y() * velocity.y(); - - // Calculates the magnitude of the acceleration. Negate the value if - // it is indeed a deceleration. - double magnitude = std::hypot(acceleration.x(), acceleration.y()); - return std::signbit(projection) ? -magnitude : magnitude; -} - -Object::DisengageType DeduceDisengageType(const ::Chassis &chassis) { - if (chassis.error_code() != Chassis::NO_ERROR) { - return Object::DISENGAGE_UNKNOWN; - } - - if (chassis.driving_mode() == Chassis::COMPLETE_AUTO_DRIVE) { - return Object::DISENGAGE_NONE; - } - - if (chassis.driving_mode() == Chassis::COMPLETE_MANUAL) { - return Object::DISENGAGE_MANUAL; - } - - return Object::DISENGAGE_UNKNOWN; -} - -} // namespace - -namespace internal { - -template <> -void UpdateSimulationWorld(const MonitorMessage &monitor_msg, - SimulationWorld *world) { - std::vector updated; - updated.reserve(SimulationWorldService::kMaxMonitorItems); - // Save the latest messages at the top of the history. - int remove_size = - monitor_msg.item_size() > SimulationWorldService::kMaxMonitorItems - ? monitor_msg.item_size() - SimulationWorldService::kMaxMonitorItems - : 0; - std::copy(monitor_msg.item().begin(), - std::prev(monitor_msg.item().end(), remove_size), - std::back_inserter(updated)); - - // Copy over the previous messages until there is no more history or - // the max number of total messages has been hit. - auto history = world->monitor().item(); - remove_size = history.size() + monitor_msg.item_size() - - SimulationWorldService::kMaxMonitorItems; - if (remove_size < 0) { - remove_size = 0; - } - std::copy(history.begin(), std::prev(history.end(), remove_size), - std::back_inserter(updated)); - - // Refresh the monitor message list in simulation_world. - ::google::protobuf::RepeatedPtrField items( - updated.begin(), updated.end()); - world->mutable_monitor()->mutable_item()->Swap(&items); - world->mutable_monitor()->mutable_header()->set_timestamp_sec( - ToSecond(Clock::Now())); -} - -template <> -void UpdateSimulationWorld( - const LocalizationEstimate &localization, SimulationWorld *world) { - Object *auto_driving_car = world->mutable_auto_driving_car(); - const auto &pose = localization.pose(); - - // Updates position with the input localization message. - auto_driving_car->set_position_x(pose.position().x()); - auto_driving_car->set_position_y(pose.position().y()); - - // Updates heading with the input localization message. The pose - // within the localization message can carry the heading information - // in either heading() or orientation(). Which one to use depends on - // which one is correctly set. - auto_driving_car->set_heading(pose.heading()); - - // Updates acceleration with the input localization message. - auto_driving_car->set_speed_acceleration(CalculateAcceleration( - pose.linear_acceleration(), pose.linear_velocity())); - - // Updates the timestamp with the timestamp inside the localization - // message header. It is done on both the SimulationWorld object - // itself and its auto_driving_car() field. - auto_driving_car->set_timestamp_sec(localization.header().timestamp_sec()); - world->set_timestamp_sec(localization.header().timestamp_sec()); -} - -template <> -void UpdateSimulationWorld(const Chassis &chassis, - SimulationWorld *world) { - Object *auto_driving_car = world->mutable_auto_driving_car(); - - auto_driving_car->set_speed(chassis.speed_mps()); - auto_driving_car->set_throttle_percentage(chassis.throttle_percentage()); - auto_driving_car->set_brake_percentage(chassis.brake_percentage()); - - // In case of out-of-range percentages, reduces it to zero. - int angle_percentage = chassis.steering_percentage(); - if (angle_percentage > 100 || angle_percentage < -100) { - angle_percentage = 0; - } - auto_driving_car->set_steering_angle(angle_percentage); - - if (chassis.signal().turn_signal() == ::apollo::canbus::Signal::TURN_LEFT) { - auto_driving_car->set_current_signal("LEFT"); - } else if (chassis.signal().turn_signal() == - ::apollo::canbus::Signal::TURN_RIGHT) { - auto_driving_car->set_current_signal("RIGHT"); - } else { - auto_driving_car->set_current_signal(""); - } - - auto_driving_car->set_disengage_type(DeduceDisengageType(chassis)); - - const auto &vehicle_param = VehicleConfigHelper::GetConfig().vehicle_param(); - auto_driving_car->set_height(vehicle_param.height()); - auto_driving_car->set_width(vehicle_param.width()); - auto_driving_car->set_length(vehicle_param.length()); - - // Updates the timestamp with the timestamp inside the chassis - // message header. It is done on both the SimulationWorld object - // itself and its auto_driving_car() field. - auto_driving_car->set_timestamp_sec(chassis.header().timestamp_sec()); - world->set_timestamp_sec(chassis.header().timestamp_sec()); -} - -template <> -void UpdateSimulationWorld( - const ADCTrajectory &trajectory, SimulationWorld *world) { - const double cutoff_time = world->auto_driving_car().timestamp_sec(); - const double header_time = trajectory.header().timestamp_sec(); - const size_t trajectory_length = trajectory.adc_trajectory_point_size(); - - util::TrajectoryPointCollector collector(world); - - size_t i = 0; - bool collecting_started = false; - while (i < trajectory_length) { - const ADCTrajectoryPoint &point = trajectory.adc_trajectory_point(i); - // Trajectory points with a timestamp older than the cutoff time - // (which is effectively the timestamp of the most up-to-date - // localization/chassis message) will be dropped. - // - // Note that the last two points are always included. - if (collecting_started || - point.relative_time() + header_time >= cutoff_time) { - collecting_started = true; - collector.Collect(point); - if (i == trajectory_length - 1) { - // Break if the very last point is collected. - break; - } else if (i == trajectory_length - 2) { - // Move on to the last point if the last but one is collected. - i = trajectory_length - 1; - } else if (i < trajectory_length - 2) { - // When collecting the trajectory points, downsample with a - // ratio of 10. - constexpr double downsample_ratio = 10; - i += downsample_ratio; - if (i > trajectory_length - 2) { - i = trajectory_length - 2; - } - } else { - break; - } - } else { - ++i; - } - } - - world->set_timestamp_sec(header_time); -} - -} // namespace internal - -constexpr int SimulationWorldService::kMaxMonitorItems; - -SimulationWorldService::SimulationWorldService() { - world_.set_map_md5("initialize"); - AdapterManager::Init(); - VehicleConfigHelper::Init(); - RegisterDataCallback("Monitor", AdapterManager::GetMonitor()); - RegisterDataCallback("Chassis", AdapterManager::GetChassis()); - RegisterDataCallback("Localization", AdapterManager::GetLocalization()); - RegisterDataCallback("Planning", AdapterManager::GetPlanningTrajectory()); -} - -Json SimulationWorldService::GetUpdateAsJson() const { - std::string sim_world_json; - ::google::protobuf::util::MessageToJsonString(world_, &sim_world_json); - - Json update; - update["type"] = "sim_world_update"; - update["world"] = Json::parse(sim_world_json); - update["timestamp"] = apollo::common::time::AsInt64(Clock::Now()); - - return update; -} - -} // namespace dreamview -} // namespace apollo diff --git a/modules/dreamview/backend/simulation_world_service.h b/modules/dreamview/backend/simulation_world_service.h deleted file mode 100644 index 1dce48d0014..00000000000 --- a/modules/dreamview/backend/simulation_world_service.h +++ /dev/null @@ -1,142 +0,0 @@ -/****************************************************************************** - * Copyright 2017 The Apollo 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. - *****************************************************************************/ - -/** - * @file - */ - -#ifndef MODULES_DREAMVIEW_BACKEND_SIM_WORLD_H_ -#define MODULES_DREAMVIEW_BACKEND_SIM_WORLD_H_ - -#include -#include - -#include "third_party/json/json.hpp" - -#include "modules/dreamview/proto/simulation_world.pb.h" - -#include "modules/common/adapters/adapter_manager.h" -#include "modules/common/log.h" - -/** - * @namespace apollo::dreamview::internal - * @brief apollo::dreamview::internal - */ -namespace apollo { -namespace dreamview { - -namespace internal { - -template -void UpdateSimulationWorld(const typename AdapterType::DataType &data, - SimulationWorld *world); - -template <> -void UpdateSimulationWorld( - const apollo::common::monitor::MonitorMessage &monitor_msg, - SimulationWorld *world); - -template <> -void UpdateSimulationWorld( - const apollo::localization::LocalizationEstimate &localization, - SimulationWorld *world); - -template <> -void UpdateSimulationWorld( - const apollo::canbus::Chassis &chassis, SimulationWorld *world); - -template <> -void UpdateSimulationWorld( - const apollo::planning::ADCTrajectory &trajectory, SimulationWorld *world); - -} // namespace internal - -/** - * @class SimulationWorldService - * @brief This is a major component of the Simulation backend, which - * maintains a SimulationWorld object and keeps updating it. The SimulationWorld - * represents the most up-to-date information about all the objects - * in the emulated world, including the car, the planning trajectory, etc. - * NOTE: This class is not thread-safe. - */ -class SimulationWorldService { - public: - using Json = nlohmann::json; - - // The maximum number of monitor message items to be kept in - // SimulationWorld. - static constexpr int kMaxMonitorItems = 30; - - /** - * @brief Default constructor. - */ - SimulationWorldService(); - - /** - * @brief Get a read-only view of the SimulationWorld. - * @return Constant reference to the SimulationWorld object. - */ - inline const SimulationWorld &world() const { return world_; } - - /** - * @brief Returns the json representation of the SimulationWorld object. - * @return Json object equivalence of the SimulationWorld object. - */ - Json GetUpdateAsJson() const; - - /** - * @brief The function Update() is periodically called to check for updates - * from the adapters. All the updates will be written to the SimulationWorld - * object to reflect the latest status. - * @return Constant reference to the SimulationWorld object. - */ - const SimulationWorld &Update(); - - /** - * @brief Check whether the SimulationWorld object has enough information. - * The backend won't push the SimulationWorld to frontend if it is not ready. - * @return True if the object is ready to push. - */ - bool ReadyToPush() const { return world_.has_auto_driving_car(); } - - private: - /** - * @brief Register a callback on the adatper manager to update the - * SimulationWorld object upon receiving a new message. This is not - * guarded by lock since we are using single threaded ROS spinner. - */ - template - void RegisterDataCallback(const std::string &adapter_name, - AdapterType *adapter) { - if (adapter == nullptr) { - AFATAL << adapter_name << " adapter is not correctly initialized. " - "Please check the adapter manager "; - } - - adapter->SetCallback( - std::bind(&internal::UpdateSimulationWorld, - std::placeholders::_1, &world_)); - } - - // The underlying SimulationWorld object, owned by the - // SimulationWorldService instance. - SimulationWorld world_; -}; - -} // namespace dreamview -} // namespace apollo - -#endif // MODULES_DREAMVIEW_BACKEND_SIM_WORLD_H_ diff --git a/modules/dreamview/backend/simulation_world_service_test.cc b/modules/dreamview/backend/simulation_world_service_test.cc deleted file mode 100644 index 958716e637c..00000000000 --- a/modules/dreamview/backend/simulation_world_service_test.cc +++ /dev/null @@ -1,201 +0,0 @@ -/****************************************************************************** - * Copyright 2017 The Apollo 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. - *****************************************************************************/ - -#include "modules/dreamview/backend/simulation_world_service.h" - -#include -#include "gtest/gtest.h" -#include "modules/common/adapters/adapter_manager.h" -#include "modules/common/configs/vehicle_config_helper.h" -#include "modules/common/math/quaternion.h" - -using apollo::common::adapter::MonitorAdapter; -using apollo::common::adapter::ChassisAdapter; -using apollo::common::adapter::LocalizationAdapter; -using apollo::common::adapter::PlanningTrajectoryAdapter; -using apollo::common::monitor::MonitorMessage; -using apollo::canbus::Chassis; -using apollo::localization::LocalizationEstimate; -using apollo::planning::ADCTrajectory; -using apollo::planning::ADCTrajectoryPoint; - -namespace apollo { -namespace dreamview { - -namespace internal { - -class InternalTest : public ::testing::Test { - public: - virtual void SetUp() { apollo::common::config::VehicleConfigHelper::Init(); } -}; - -TEST_F(InternalTest, UpdateMonitorSuccessTest) { - MonitorMessage monitor; - monitor.add_item()->set_msg("I am the latest message."); - monitor.mutable_header()->set_timestamp_sec(2000); - - SimulationWorld world; - world.mutable_monitor()->mutable_header()->set_timestamp_sec(1990); - world.mutable_monitor()->add_item()->set_msg("I am the previous message."); - - UpdateSimulationWorld(monitor, &world); - EXPECT_EQ(2, world.monitor().item_size()); - EXPECT_EQ("I am the latest message.", world.monitor().item(0).msg()); - EXPECT_EQ("I am the previous message.", world.monitor().item(1).msg()); -} - -TEST_F(InternalTest, UpdateMonitorRemoveTest) { - MonitorMessage monitor; - monitor.add_item()->set_msg("I am message -2"); - monitor.add_item()->set_msg("I am message -1"); - monitor.mutable_header()->set_timestamp_sec(2000); - - SimulationWorld world; - world.mutable_monitor()->mutable_header()->set_timestamp_sec(1990); - for (int i = 0; i < SimulationWorldService::kMaxMonitorItems; ++i) { - world.mutable_monitor()->add_item()->set_msg("I am message " + - std::to_string(i)); - } - int last = SimulationWorldService::kMaxMonitorItems - 1; - EXPECT_EQ("I am message " + std::to_string(last), - world.monitor().item(last).msg()); - - UpdateSimulationWorld(monitor, &world); - EXPECT_EQ(SimulationWorldService::kMaxMonitorItems, - world.monitor().item_size()); - EXPECT_EQ("I am message -2", world.monitor().item(0).msg()); - EXPECT_EQ("I am message -1", world.monitor().item(1).msg()); - EXPECT_EQ("I am message " + std::to_string(last - monitor.item_size()), - world.monitor().item(last).msg()); -} - -TEST_F(InternalTest, UpdateMonitorTruncateTest) { - MonitorMessage monitor; - int large_size = SimulationWorldService::kMaxMonitorItems + 10; - for (int i = 0; i < large_size; ++i) { - monitor.add_item()->set_msg("I am message " + std::to_string(i)); - } - monitor.mutable_header()->set_timestamp_sec(2000); - EXPECT_EQ(large_size, monitor.item_size()); - EXPECT_EQ("I am message " + std::to_string(large_size - 1), - monitor.item(large_size - 1).msg()); - SimulationWorld world; - world.mutable_monitor()->mutable_header()->set_timestamp_sec(1990); - - UpdateSimulationWorld(monitor, &world); - int last = SimulationWorldService::kMaxMonitorItems - 1; - EXPECT_EQ(SimulationWorldService::kMaxMonitorItems, - world.monitor().item_size()); - EXPECT_EQ("I am message 0", world.monitor().item(0).msg()); - EXPECT_EQ("I am message " + std::to_string(last), - world.monitor().item(last).msg()); -} - -TEST_F(InternalTest, UpdateChassisInfoTest) { - // Prepare the chassis message that will be used to update the - // SimulationWorld object. - ::apollo::canbus::Chassis chassis; - chassis.set_speed_mps(25); - chassis.set_throttle_percentage(50); - chassis.set_brake_percentage(10); - chassis.set_steering_percentage(25); - chassis.mutable_signal()->set_turn_signal(apollo::canbus::Signal::TURN_RIGHT); - - // Commit the update. - SimulationWorld world; - UpdateSimulationWorld(chassis, &world); - - // Check the update reuslt. - const Object &car = world.auto_driving_car(); - EXPECT_DOUBLE_EQ(4.933, car.length()); - EXPECT_DOUBLE_EQ(2.11, car.width()); - EXPECT_DOUBLE_EQ(1.48, car.height()); - EXPECT_DOUBLE_EQ(25.0, car.speed()); - EXPECT_DOUBLE_EQ(50.0, car.throttle_percentage()); - EXPECT_DOUBLE_EQ(10.0, car.brake_percentage()); - EXPECT_DOUBLE_EQ(25.0, car.steering_angle()); - EXPECT_EQ("RIGHT", car.current_signal()); -} - -TEST_F(InternalTest, UpdateLocalizationTest) { - // Prepare the localization message that will be used to update the - // SimulationWorld object. - ::apollo::localization::LocalizationEstimate localization; - localization.mutable_pose()->mutable_position()->set_x(1.0); - localization.mutable_pose()->mutable_position()->set_y(1.5); - localization.mutable_pose()->mutable_orientation()->set_qx(0.0); - localization.mutable_pose()->mutable_orientation()->set_qy(0.0); - localization.mutable_pose()->mutable_orientation()->set_qz(0.0); - localization.mutable_pose()->mutable_orientation()->set_qw(0.0); - - auto pose = localization.pose(); - auto heading = apollo::common::math::QuaternionToHeading( - pose.orientation().qw(), pose.orientation().qx(), pose.orientation().qy(), - pose.orientation().qz()); - localization.mutable_pose()->set_heading(heading); - - // Commit the update. - SimulationWorld world; - UpdateSimulationWorld(localization, &world); - - // Check the update result. - const Object &car = world.auto_driving_car(); - EXPECT_DOUBLE_EQ(1.0, car.position_x()); - EXPECT_DOUBLE_EQ(1.5, car.position_y()); - EXPECT_DOUBLE_EQ( - apollo::common::math::QuaternionToHeading(0.0, 0.0, 0.0, 0.0), - car.heading()); -} - -TEST_F(InternalTest, UpdatePlanningTrajectoryTest) { - // Prepare the trajectory message that will be used to update the - // SimulationWorld object. - ADCTrajectory planning_trajectory; - for (int i = 0; i < 30; ++i) { - ADCTrajectoryPoint *point = planning_trajectory.add_adc_trajectory_point(); - point->set_x(i * 10); - point->set_y(i * 10 + 10); - } - - // Commit the update. - SimulationWorld world; - UpdateSimulationWorld(planning_trajectory, &world); - - // Check the update result. - EXPECT_EQ(world.planning_trajectory_size(), 4); - - // Check first point. - { - const Object point = world.planning_trajectory(0); - EXPECT_DOUBLE_EQ(0.0, point.position_x()); - EXPECT_DOUBLE_EQ(10.0, point.position_y()); - EXPECT_DOUBLE_EQ(atan2(100.0, 100.0), point.heading()); - EXPECT_EQ(point.polygon_point_size(), 4); - } - - // Check last point. - { - const Object point = world.planning_trajectory(3); - EXPECT_DOUBLE_EQ(280.0, point.position_x()); - EXPECT_DOUBLE_EQ(290.0, point.position_y()); - EXPECT_DOUBLE_EQ(atan2(100.0, 100.0), point.heading()); - EXPECT_EQ(point.polygon_point_size(), 4); - } -} -} // namespace internal - -} // namespace dreamview -} // namespace apollo diff --git a/modules/decision/conf/BUILD b/modules/dreamview/backend/testdata/BUILD similarity index 54% rename from modules/decision/conf/BUILD rename to modules/dreamview/backend/testdata/BUILD index 5157becd3a1..e2074911467 100644 --- a/modules/decision/conf/BUILD +++ b/modules/dreamview/backend/testdata/BUILD @@ -1,8 +1,9 @@ package(default_visibility = ["//visibility:public"]) filegroup( - name = "localization_adapter_manager_config", + name = "testdata", srcs = [ - "adapter.conf", + "garage.bin", + "routing.pb.txt", ], ) diff --git a/modules/dreamview/backend/testdata/garage.bin b/modules/dreamview/backend/testdata/garage.bin new file mode 100644 index 00000000000..7248b5679cf Binary files /dev/null and b/modules/dreamview/backend/testdata/garage.bin differ diff --git a/modules/dreamview/backend/testdata/routing.pb.txt b/modules/dreamview/backend/testdata/routing.pb.txt new file mode 100644 index 00000000000..70dfb1323c1 --- /dev/null +++ b/modules/dreamview/backend/testdata/routing.pb.txt @@ -0,0 +1,34 @@ +header { + module_name: "routing" + timestamp_sec: 1234.5 + sequence_num: 1 +} +routing_request { + start { + id: "l1" + s: 0.0 + pose { + x: 586392.840030 + y: 4140673.012320 + } + } + end { + id: "l1" + s: 153.0 + pose { + x: 586367.706490 + y: 4140785.357946 + } + } +} +route { + road_info { + passage_region { + segment { + id: "l1" + start_s: 0.0 + end_s: 153.0 + } + } + } +} diff --git a/modules/dreamview/backend/util/BUILD b/modules/dreamview/backend/util/BUILD new file mode 100644 index 00000000000..2ca03c9c97d --- /dev/null +++ b/modules/dreamview/backend/util/BUILD @@ -0,0 +1,33 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "trajectory_point_collector", + srcs = [ + "trajectory_point_collector.cc", + ], + hdrs = [ + "trajectory_point_collector.h", + ], + deps = [ + "//modules/common/configs:vehicle_config_helper", + "//modules/common/math", + "//modules/dreamview/proto:simulation_world_proto", + "//modules/planning/proto:planning_proto", + ], +) + +cc_test( + name = "trajectory_point_collector_test", + size = "small", + srcs = [ + "trajectory_point_collector_test.cc", + ], + deps = [ + ":trajectory_point_collector", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/dreamview/backend/trajectory_point_collector.cc b/modules/dreamview/backend/util/trajectory_point_collector.cc similarity index 67% rename from modules/dreamview/backend/trajectory_point_collector.cc rename to modules/dreamview/backend/util/trajectory_point_collector.cc index 384921b875e..b699b6a8c07 100644 --- a/modules/dreamview/backend/trajectory_point_collector.cc +++ b/modules/dreamview/backend/util/trajectory_point_collector.cc @@ -14,34 +14,36 @@ * limitations under the License. *****************************************************************************/ -#include "modules/dreamview/backend/trajectory_point_collector.h" +#include "modules/dreamview/backend/util/trajectory_point_collector.h" #include #include "modules/common/math/box2d.h" #include "modules/common/math/vec2d.h" -using ::apollo::common::config::VehicleConfigHelper; -using ::apollo::common::math::Box2d; -using ::apollo::common::math::Vec2d; -using ::apollo::planning::ADCTrajectoryPoint; +using apollo::common::VehicleConfigHelper; +using apollo::common::math::Box2d; +using apollo::common::math::Vec2d; +using apollo::common::TrajectoryPoint; namespace apollo { namespace dreamview { namespace util { -void TrajectoryPointCollector::Collect(const ADCTrajectoryPoint &point) { +void TrajectoryPointCollector::Collect(const TrajectoryPoint &point) { if (has_previous_) { Object *trajectory = world_->add_planning_trajectory(); - trajectory->set_position_x(previous_.x()); - trajectory->set_position_y(previous_.y()); + trajectory->set_position_x(previous_.path_point().x()); + trajectory->set_position_y(previous_.path_point().y()); trajectory->set_heading( - atan2(point.y() - previous_.y(), point.x() - previous_.x())); + atan2(point.path_point().y() - previous_.path_point().y(), + point.path_point().x() - previous_.path_point().x())); const auto &vehicle_param = VehicleConfigHelper::GetConfig().vehicle_param(); - Box2d trajectory_box({previous_.x(), previous_.y()}, trajectory->heading(), - vehicle_param.length(), vehicle_param.width()); + Box2d trajectory_box( + {previous_.path_point().x(), previous_.path_point().y()}, + trajectory->heading(), vehicle_param.length(), vehicle_param.width()); std::vector corners; trajectory_box.GetAllCorners(&corners); diff --git a/modules/dreamview/backend/trajectory_point_collector.h b/modules/dreamview/backend/util/trajectory_point_collector.h similarity index 88% rename from modules/dreamview/backend/trajectory_point_collector.h rename to modules/dreamview/backend/util/trajectory_point_collector.h index 57c86486c3f..ce90e24dc09 100644 --- a/modules/dreamview/backend/trajectory_point_collector.h +++ b/modules/dreamview/backend/util/trajectory_point_collector.h @@ -19,11 +19,11 @@ * @brief the class of TrajectoryPointCollector */ -#ifndef MODULES_DREAMVIEW_BACKEND_TRAJECTORY_POINT_COLLECTOR_H_ -#define MODULES_DREAMVIEW_BACKEND_TRAJECTORY_POINT_COLLECTOR_H_ +#ifndef MODULES_DREAMVIEW_BACKEND_UTIL_TRAJECTORY_POINT_COLLECTOR_H_ +#define MODULES_DREAMVIEW_BACKEND_UTIL_TRAJECTORY_POINT_COLLECTOR_H_ +#include "modules/common/proto/pnc_point.pb.h" #include "modules/dreamview/proto/simulation_world.pb.h" -#include "modules/planning/proto/planning.pb.h" #include "modules/common/configs/vehicle_config_helper.h" @@ -62,7 +62,7 @@ class TrajectoryPointCollector { * point and the previous point. * @param point The trajectory point to be added. */ - void Collect(const planning::ADCTrajectoryPoint &point); + void Collect(const common::TrajectoryPoint &point); private: // Does not own the SimulationWorld instance. This is stored as the @@ -71,7 +71,7 @@ class TrajectoryPointCollector { // Cache (copied) of the previously collected trajectory point. See // class documentation for the reason of caching it. - planning::ADCTrajectoryPoint previous_; + common::TrajectoryPoint previous_; // Indicates whether there has been any collected points. bool has_previous_ = false; @@ -81,4 +81,4 @@ class TrajectoryPointCollector { } // namespace dreamview } // namespace apollo -#endif // MODULES_DREAMVIEW_BACKEND_TRAJECTORY_POINT_COLLECTOR_H_ +#endif // MODULES_DREAMVIEW_BACKEND_UTIL_TRAJECTORY_POINT_COLLECTOR_H_ diff --git a/modules/dreamview/backend/trajectory_point_collector_test.cc b/modules/dreamview/backend/util/trajectory_point_collector_test.cc similarity index 86% rename from modules/dreamview/backend/trajectory_point_collector_test.cc rename to modules/dreamview/backend/util/trajectory_point_collector_test.cc index 1177c272b30..e68b63833fd 100644 --- a/modules/dreamview/backend/trajectory_point_collector_test.cc +++ b/modules/dreamview/backend/util/trajectory_point_collector_test.cc @@ -14,14 +14,14 @@ * limitations under the License. *****************************************************************************/ -#include "modules/dreamview/backend/trajectory_point_collector.h" +#include "modules/dreamview/backend/util/trajectory_point_collector.h" #include #include "gtest/gtest.h" #include "modules/common/configs/vehicle_config_helper.h" -using ::apollo::planning::ADCTrajectoryPoint; +using apollo::common::TrajectoryPoint; namespace apollo { namespace dreamview { @@ -29,7 +29,7 @@ namespace util { class TrajectoryPointCollectorTest : public ::testing::Test { public: - virtual void SetUp() { apollo::common::config::VehicleConfigHelper::Init(); } + virtual void SetUp() { apollo::common::VehicleConfigHelper::Init(); } }; TEST_F(TrajectoryPointCollectorTest, ThreePoints) { @@ -37,9 +37,9 @@ TEST_F(TrajectoryPointCollectorTest, ThreePoints) { TrajectoryPointCollector collector(&world); for (int i = 0; i < 4; ++i) { - ADCTrajectoryPoint point; - point.set_x(i * 100.0); - point.set_y(i * 100.0 + 100.0); + TrajectoryPoint point; + point.mutable_path_point()->set_x(i * 100.0); + point.mutable_path_point()->set_y(i * 100.0 + 100.0); collector.Collect(point); } diff --git a/modules/dreamview/backend/websocket.cc b/modules/dreamview/backend/websocket.cc deleted file mode 100644 index 852104efc03..00000000000 --- a/modules/dreamview/backend/websocket.cc +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright 2017 The Apollo 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. -==============================================================================*/ - -#include "modules/dreamview/backend/websocket.h" - -#include -#include -#include "glog/logging.h" - -namespace apollo { -namespace dreamview { - -void WebSocketHandler::handleReadyState(CivetServer *server, Connection *conn) { - { - std::unique_lock lock(mutex_); - connections_.insert(conn); - } - LOG(INFO) << "Accepted connection. Total connections: " - << connections_.size(); -} - -void WebSocketHandler::handleClose(CivetServer *server, - const Connection *conn) { - { - std::unique_lock lock(mutex_); - // Remove from the store of currently open connections. - connections_.erase(const_cast(conn)); - } - LOG(INFO) << "Connection closed. Total connections: " << connections_.size(); -} - -bool WebSocketHandler::SendData(const std::string &data) { - std::vector connections_to_send; - { - std::unique_lock lock(mutex_); - if (connections_.empty()) { - return true; - } - for (Connection *conn : connections_) { - connections_to_send.push_back(conn); - } - } - - bool all_success = true; - for (Connection *conn : connections_to_send) { - if (!SendData(data, conn)) { - all_success = false; - } - } - - return all_success; -} - -bool WebSocketHandler::SendData(const std::string &data, Connection *conn) { - int ret = mg_websocket_write(conn, WEBSOCKET_OPCODE_TEXT, data.c_str(), - data.size()); - if (ret != static_cast(data.size())) { - // Determine error message based on return value. - std::string msg; - if (ret == 0) { - msg = "Connection Closed"; - } else if (ret < 0) { - msg = "Send Error"; - } else { - std::ostringstream os; - os << "Expect to send " << data.size() << " bytes. But sent " << ret - << " bytes"; - msg = os.str(); - } - LOG(WARNING) << "Failed to send data via websocket connection. Reason: " - << msg; - return false; - } - - return true; -} - -bool WebSocketHandler::handleData(CivetServer *server, Connection *conn, - int bits, char *data, size_t data_len) { - // Ignore connection close request. - if ((bits & 0x0F) == WEBSOCKET_OPCODE_CONNECTION_CLOSE) { - return false; - } - - auto json = Json::parse(std::string(data, data_len)); - auto type = json["type"]; - - if (message_handlers_.find(type) == message_handlers_.end()) { - LOG(ERROR) << "No message handler found for message type " << type - << ". The message will be discarded!"; - return true; - } - message_handlers_[type](json, conn); - return true; -} - -} // namespace dreamview -} // namespace apollo diff --git a/modules/dreamview/backend/websocket/BUILD b/modules/dreamview/backend/websocket/BUILD new file mode 100644 index 00000000000..4e02f8f390f --- /dev/null +++ b/modules/dreamview/backend/websocket/BUILD @@ -0,0 +1,35 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "websocket", + srcs = [ + "websocket.cc", + ], + hdrs = [ + "websocket.h", + ], + deps = [ + "//modules/common", + "//modules/common/time", + "//modules/common/util:string_util", + "//third_party/json", + "@civetweb//:civetweb++", + ], +) + +cc_test( + name = "websocket_test", + size = "small", + srcs = [ + "websocket_test.cc", + ], + deps = [ + ":websocket", + "//modules/common:log", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/dreamview/backend/websocket/websocket.cc b/modules/dreamview/backend/websocket/websocket.cc new file mode 100644 index 00000000000..76193f735ac --- /dev/null +++ b/modules/dreamview/backend/websocket/websocket.cc @@ -0,0 +1,155 @@ +/* Copyright 2017 The Apollo 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. +==============================================================================*/ + +#include "modules/dreamview/backend/websocket/websocket.h" + +#include +#include + +#include "modules/common/log.h" +#include "modules/common/time/time.h" +#include "modules/common/util/string_util.h" + +namespace apollo { +namespace dreamview { + +using apollo::common::util::StrCat; + +void WebSocketHandler::handleReadyState(CivetServer *server, Connection *conn) { + { + std::unique_lock lock(mutex_); + connections_.emplace(conn, std::make_shared()); + } + AINFO << "Accepted connection. Total connections: " << connections_.size(); +} + +void WebSocketHandler::handleClose(CivetServer *server, + const Connection *conn) { + { + std::unique_lock lock(mutex_); + + // Remove from the store of currently open connections. Copy the mutex out + // so that it won't be reclaimed during map.erase(). + Connection *connection = const_cast(conn); + std::shared_ptr connection_lock = connections_[connection]; + { + std::unique_lock lock(*connection_lock); + connections_.erase(connection); + } + } + AINFO << "Connection closed. Total connections: " << connections_.size(); +} + +bool WebSocketHandler::BroadcastData(const std::string &data) { + std::vector connections_to_send; + { + std::unique_lock lock(mutex_); + if (connections_.empty()) { + return true; + } + for (auto &kv : connections_) { + Connection *conn = kv.first; + connections_to_send.push_back(conn); + } + } + + bool all_success = true; + for (Connection *conn : connections_to_send) { + if (!SendData(conn, data, true)) { + all_success = false; + } + } + + return all_success; +} + +bool WebSocketHandler::SendData(Connection *conn, const std::string &data, + bool skippable) { + std::shared_ptr connection_lock; + { + std::unique_lock lock(mutex_); + if (connections_.find(conn) == connections_.end()) { + AERROR << "Trying to send to an uncached connection, skipping."; + return false; + } + // Copy the lock so that it still exists if the connection is closed after + // this block. + connection_lock = connections_[conn]; + } + + // Lock the connection while sending. + if (!connection_lock->try_lock()) { + // Skip sending data if: + // 1. Data is skippable according to sender and there's higher priority data + // being sent. + // 2. The connection has been closed. + if (skippable) { + return false; + } else { + connection_lock->lock(); // Block to acquire the lock. + if (connections_.find(conn) == connections_.end()) { + return false; + } + } + } + // Note that while we are holding the connection lock, the connection won't be + // closed and removed. + int ret; + PERF_BLOCK(StrCat("Writing ", data.size(), " bytes via websocket took"), + 0.1) { + ret = mg_websocket_write(conn, WEBSOCKET_OPCODE_TEXT, data.c_str(), + data.size()); + } + connection_lock->unlock(); + + if (ret != static_cast(data.size())) { + // Determine error message based on return value. + std::string msg; + if (ret == 0) { + msg = "Connection Closed"; + } else if (ret < 0) { + msg = "Send Error"; + } else { + msg = StrCat("Expect to send ", data.size(), " bytes. But sent ", ret, + " bytes"); + } + AWARN << "Failed to send data via websocket connection. Reason: " << msg; + return false; + } + + return true; +} + +bool WebSocketHandler::handleData(CivetServer *server, Connection *conn, + int bits, char *data, size_t data_len) { + // Ignore connection close request. + if ((bits & 0x0F) == WEBSOCKET_OPCODE_CONNECTION_CLOSE) { + return false; + } + + auto json = Json::parse(std::string(data, data_len)); + auto type = json["type"]; + + if (message_handlers_.find(type) == message_handlers_.end()) { + AERROR << "No message handler found for message type " << type + << ". The message will be discarded!"; + return true; + } + message_handlers_[type](json, conn); + return true; +} + +} // namespace dreamview +} // namespace apollo diff --git a/modules/dreamview/backend/websocket.h b/modules/dreamview/backend/websocket/websocket.h similarity index 82% rename from modules/dreamview/backend/websocket.h rename to modules/dreamview/backend/websocket/websocket.h index 2e687d393b4..55402dcd30c 100644 --- a/modules/dreamview/backend/websocket.h +++ b/modules/dreamview/backend/websocket/websocket.h @@ -18,12 +18,11 @@ * @file */ -#ifndef MODULES_DREAMVIEW_BACKEND_WEBSOCKET_H_ -#define MODULES_DREAMVIEW_BACKEND_WEBSOCKET_H_ +#ifndef MODULES_DREAMVIEW_BACKEND_WEBSOCKET_WEBSOCKET_H_ +#define MODULES_DREAMVIEW_BACKEND_WEBSOCKET_WEBSOCKET_H_ #include #include -#include #include #include #include @@ -101,8 +100,18 @@ class WebSocketHandler : public CivetWebSocketHandler { * @brief Sends the provided data to all the connected clients. * @param data The message string to be sent. */ - bool SendData(const std::string &data); - bool SendData(const std::string &data, Connection *conn); + bool BroadcastData(const std::string &data); + + /** + * @brief Sends the provided data to a specific connected client. + * + * @param conn The connection to send to. + * @param data The message string to be sent. + * @param skippable whether the data is allowed to be skipped if some other is + * being sent to this connection. + */ + bool SendData(Connection *conn, const std::string &data, + bool skippable = false); /** * @brief Add a new message handler for a message type. @@ -122,11 +131,12 @@ class WebSocketHandler : public CivetWebSocketHandler { // (connections). mutable std::mutex mutex_; - // The pool of all maintained connections. - std::set connections_; + // The pool of all maintained connections. Each connection has a lock to + // against simultaneous write. + std::unordered_map> connections_; }; } // namespace dreamview } // namespace apollo -#endif /* MODULES_DREAMVIEW_BACKEND_WEBSOCKET_H_ */ +#endif /* MODULES_DREAMVIEW_BACKEND_WEBSOCKET_WEBSOCKET_H_ */ diff --git a/modules/dreamview/backend/websocket_test.cc b/modules/dreamview/backend/websocket/websocket_test.cc similarity index 94% rename from modules/dreamview/backend/websocket_test.cc rename to modules/dreamview/backend/websocket/websocket_test.cc index 07326771265..48d3d29f9a8 100644 --- a/modules/dreamview/backend/websocket_test.cc +++ b/modules/dreamview/backend/websocket/websocket_test.cc @@ -13,13 +13,13 @@ See the License for the specific language governing permissions and limitations under the License. ==============================================================================*/ -#include "modules/dreamview/backend/websocket.h" +#include "modules/dreamview/backend/websocket/websocket.h" #include #include -#include "glog/logging.h" #include "gmock/gmock.h" #include "gtest/gtest.h" +#include "modules/common/log.h" using ::testing::ElementsAre; @@ -42,7 +42,7 @@ class MockClient { private: static int OnMessage(struct mg_connection *conn, int bits, char *data, size_t data_len, void *cbdata) { - LOG(INFO) << "Get " << *data; + AINFO << "Get " << *data; received_messages_.emplace_back(data); return 1; } @@ -75,7 +75,7 @@ TEST(WebSocketTest, IntegrationTest) { // Send 3 messages. for (int i = 0; i < 3; ++i) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); - handler.SendData(std::to_string(i)); + handler.BroadcastData(std::to_string(i)); } std::this_thread::sleep_for(std::chrono::milliseconds(200)); diff --git a/modules/dreamview/conf/adapter.conf b/modules/dreamview/conf/adapter.conf index 0b823c823b8..8af10a0e36f 100644 --- a/modules/dreamview/conf/adapter.conf +++ b/modules/dreamview/conf/adapter.conf @@ -1,11 +1,11 @@ config { type: LOCALIZATION - mode: RECEIVE_ONLY + mode: DUPLEX # Potentially published by SimControl message_history_limit: 1 } config { type: CHASSIS - mode: RECEIVE_ONLY + mode: DUPLEX # Potentially published by SimControl message_history_limit: 1 } config { @@ -15,7 +15,27 @@ config { } config { type: MONITOR + mode: DUPLEX + message_history_limit: 1 +} +config { + type: PERCEPTION_OBSTACLES mode: RECEIVE_ONLY message_history_limit: 1 } +config { + type: PREDICTION + mode: RECEIVE_ONLY + message_history_limit: 1 +} +config { + type: ROUTING_RESPONSE + mode: DUPLEX + message_history_limit: 1 +} +config { + type: ROUTING_REQUEST + mode: PUBLISH_ONLY + message_history_limit: 1 +} is_ros: true diff --git a/modules/dreamview/conf/dreamview.conf b/modules/dreamview/conf/dreamview.conf index c9f39dcbb55..245f5bef04a 100644 --- a/modules/dreamview/conf/dreamview.conf +++ b/modules/dreamview/conf/dreamview.conf @@ -1 +1 @@ ---adapter_config_path=modules/dreamview/conf/adapter.conf +--flagfile=modules/common/data/global_flagfile.txt diff --git a/modules/dreamview/frontend/.eslintrc b/modules/dreamview/frontend/.eslintrc index 189e3d5de4c..25c98a15e70 100644 --- a/modules/dreamview/frontend/.eslintrc +++ b/modules/dreamview/frontend/.eslintrc @@ -11,11 +11,11 @@ "rules": { // Require a semi colon at the end of a statement. "semi": ["error", "always"], - // Maximum line length is 80. - "max-len": ["error", 80], + // Maximum line length is 100. + "max-len": ["error", 100], // Always require curly brackets. "curly": "error", - + // Require the use of `===` and `!==`. "eqeqeq": "error", // Disallow the use of `eval()`. diff --git a/modules/dreamview/frontend/assets/images/decision/clear-zone.png b/modules/dreamview/frontend/assets/images/decision/clear-zone.png new file mode 100644 index 00000000000..f7b97a3e8ce Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/clear-zone.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/crosswalk.png b/modules/dreamview/frontend/assets/images/decision/crosswalk.png new file mode 100644 index 00000000000..d3f7e44ffcf Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/crosswalk.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/destination.png b/modules/dreamview/frontend/assets/images/decision/destination.png new file mode 100644 index 00000000000..9ec6b8e903a Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/destination.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/emergency.png b/modules/dreamview/frontend/assets/images/decision/emergency.png new file mode 100644 index 00000000000..8dedc8e4de4 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/emergency.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/fence-main-stop.png b/modules/dreamview/frontend/assets/images/decision/fence-main-stop.png new file mode 100644 index 00000000000..74591dd6f10 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/fence-main-stop.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/fence-object-follow.png b/modules/dreamview/frontend/assets/images/decision/fence-object-follow.png new file mode 100644 index 00000000000..49a998ba59a Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/fence-object-follow.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/fence-object-overtake.png b/modules/dreamview/frontend/assets/images/decision/fence-object-overtake.png new file mode 100644 index 00000000000..7b9b09c7f9b Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/fence-object-overtake.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/fence-object-stop.png b/modules/dreamview/frontend/assets/images/decision/fence-object-stop.png new file mode 100644 index 00000000000..62d5c841a0d Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/fence-object-stop.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/fence-object-yield.png b/modules/dreamview/frontend/assets/images/decision/fence-object-yield.png new file mode 100644 index 00000000000..de87ef57fc1 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/fence-object-yield.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/head-vehicle.png b/modules/dreamview/frontend/assets/images/decision/head-vehicle.png new file mode 100644 index 00000000000..6cb46d372cc Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/head-vehicle.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/main-stop.png b/modules/dreamview/frontend/assets/images/decision/main-stop.png new file mode 100644 index 00000000000..8ab8f177472 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/main-stop.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/not-ready.png b/modules/dreamview/frontend/assets/images/decision/not-ready.png new file mode 100644 index 00000000000..d978c0b6911 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/not-ready.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/object-follow.png b/modules/dreamview/frontend/assets/images/decision/object-follow.png new file mode 100644 index 00000000000..2e352b78b71 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/object-follow.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/object-overtake.png b/modules/dreamview/frontend/assets/images/decision/object-overtake.png new file mode 100644 index 00000000000..6fe83a8ee5c Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/object-overtake.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/object-stop.png b/modules/dreamview/frontend/assets/images/decision/object-stop.png new file mode 100644 index 00000000000..8ad724fb772 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/object-stop.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/object-yield.png b/modules/dreamview/frontend/assets/images/decision/object-yield.png new file mode 100644 index 00000000000..6d882fa2c78 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/object-yield.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/obstacle.png b/modules/dreamview/frontend/assets/images/decision/obstacle.png new file mode 100644 index 00000000000..a1446eeb068 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/obstacle.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/pedestrian.png b/modules/dreamview/frontend/assets/images/decision/pedestrian.png new file mode 100644 index 00000000000..1475c285e14 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/pedestrian.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/signal.png b/modules/dreamview/frontend/assets/images/decision/signal.png new file mode 100644 index 00000000000..31418fbb644 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/signal.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/stop-sign.png b/modules/dreamview/frontend/assets/images/decision/stop-sign.png new file mode 100644 index 00000000000..8ad724fb772 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/stop-sign.png differ diff --git a/modules/dreamview/frontend/assets/images/decision/yield-sign.png b/modules/dreamview/frontend/assets/images/decision/yield-sign.png new file mode 100644 index 00000000000..6d882fa2c78 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/decision/yield-sign.png differ diff --git a/modules/dreamview/frontend/assets/images/icons/help.png b/modules/dreamview/frontend/assets/images/icons/help.png new file mode 100644 index 00000000000..6e9472cfe43 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/icons/help.png differ diff --git a/modules/dreamview/frontend/assets/images/icons/remove_all.png b/modules/dreamview/frontend/assets/images/icons/remove_all.png new file mode 100644 index 00000000000..c1e08c8a6af Binary files /dev/null and b/modules/dreamview/frontend/assets/images/icons/remove_all.png differ diff --git a/modules/dreamview/frontend/assets/images/icons/remove_last.png b/modules/dreamview/frontend/assets/images/icons/remove_last.png new file mode 100644 index 00000000000..03109f8a163 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/icons/remove_last.png differ diff --git a/modules/dreamview/frontend/assets/images/icons/send_request.png b/modules/dreamview/frontend/assets/images/icons/send_request.png new file mode 100644 index 00000000000..553391850a8 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/icons/send_request.png differ diff --git a/modules/dreamview/frontend/assets/images/loader_apollo.gif b/modules/dreamview/frontend/assets/images/loader_apollo.gif new file mode 100644 index 00000000000..c4b7e47db48 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/loader_apollo.gif differ diff --git a/modules/dreamview/frontend/assets/images/menu/Decision.png b/modules/dreamview/frontend/assets/images/menu/Decision.png new file mode 100644 index 00000000000..1b62f7edc1c Binary files /dev/null and b/modules/dreamview/frontend/assets/images/menu/Decision.png differ diff --git a/modules/dreamview/frontend/assets/images/menu/Perception.png b/modules/dreamview/frontend/assets/images/menu/Perception.png new file mode 100644 index 00000000000..950ed83f182 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/menu/Perception.png differ diff --git a/modules/dreamview/frontend/assets/images/menu/Planning.png b/modules/dreamview/frontend/assets/images/menu/Planning.png new file mode 100644 index 00000000000..0512730ca5a Binary files /dev/null and b/modules/dreamview/frontend/assets/images/menu/Planning.png differ diff --git a/modules/dreamview/frontend/assets/images/menu/PointOfView.png b/modules/dreamview/frontend/assets/images/menu/PointOfView.png new file mode 100644 index 00000000000..d05a59102aa Binary files /dev/null and b/modules/dreamview/frontend/assets/images/menu/PointOfView.png differ diff --git a/modules/dreamview/frontend/assets/images/menu/Prediction.png b/modules/dreamview/frontend/assets/images/menu/Prediction.png new file mode 100644 index 00000000000..c1633394880 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/menu/Prediction.png differ diff --git a/modules/dreamview/frontend/assets/images/menu/Routing.png b/modules/dreamview/frontend/assets/images/menu/Routing.png new file mode 100644 index 00000000000..1faf99cd159 Binary files /dev/null and b/modules/dreamview/frontend/assets/images/menu/Routing.png differ diff --git a/modules/dreamview/frontend/assets/images/routing/pin.png b/modules/dreamview/frontend/assets/images/routing/pin.png new file mode 100644 index 00000000000..33aa7f06b0c Binary files /dev/null and b/modules/dreamview/frontend/assets/images/routing/pin.png differ diff --git a/modules/dreamview/frontend/assets/models/traffic_light.mtl b/modules/dreamview/frontend/assets/models/traffic_light.mtl new file mode 100644 index 00000000000..bb5445c6d57 --- /dev/null +++ b/modules/dreamview/frontend/assets/models/traffic_light.mtl @@ -0,0 +1,33 @@ +# WaveFront *.mtl file (generated by CINEMA 4D) + +newmtl default +Kd 0.93725490570068 0.87058824300766 0.80392158031464 + +newmtl 材质 +Ka 1.00000000000000 1.00000000000000 1.00000000000000 +Kd 0.5 0.5 0.5 +Ks 1.00000000000000 1.00000000000000 1.00000000000000 +Ns 50 +illum 0 + +newmtl 材质.3 +Ka 0.04835109412670 0.72985404729843 0.05970947816968 +Kd 0.19253069162369 0.74375396966934 0.20171774923801 +Ks 1.00000000000000 1.00000000000000 1.00000000000000 +Ns 50 +illum 0 + +newmtl 材质.2 +Ka 0.99093830585480 0.67714118957520 0.00000000000000 +Kd 1.00000000000000 0.66666668653488 0.00000000000000 +Ks 1.00000000000000 1.00000000000000 1.00000000000000 +Ns 50 +illum 0 + +newmtl 材质.1 +Ka 1.00000000000000 0.00000000000000 0.00000000000000 +Kd 1.00000000000000 0.00000000000000 0.00000000000000 +Ks 1.00000000000000 1.00000000000000 1.00000000000000 +Ns 50 +illum 0 + diff --git a/modules/dreamview/frontend/assets/models/traffic_light.obj b/modules/dreamview/frontend/assets/models/traffic_light.obj new file mode 100644 index 00000000000..4d86366562c --- /dev/null +++ b/modules/dreamview/frontend/assets/models/traffic_light.obj @@ -0,0 +1,4589 @@ +# WaveFront *.obj file (generated by CINEMA 4D) + +mtllib ./traffic_light.mtl + +v 31.36711502075195 531.24267578125000 -40.16886520385742 +v 31.36711502075195 533.97619628906250 -40.03647232055664 +v 31.36711502075195 538.86437988281250 -39.37255859375000 +v 31.36711502075195 544.12994384765625 -38.10228729248047 +v 31.36711502075195 548.77844238281250 -36.43727874755859 +v 31.36711502075195 552.35852050781250 -34.72630691528320 +v 31.36711502075195 555.90417480468750 -32.55932235717773 +v 31.36711502075195 559.31213378906250 -29.88249015808105 +v 31.36711502075195 561.45660400390625 -27.78809356689453 +v 31.36711502075195 563.46343994140625 -25.42721176147461 +v 31.36711502075195 565.30187988281250 -22.78389358520508 +v 31.36711502075195 566.94146728515625 -19.84218406677246 +v 31.36711502075195 568.35162353515625 -16.58613014221191 +v 31.36711502075195 569.50158691406250 -12.99977874755859 +v 31.36711502075195 570.36096191406250 -9.06717681884766 +v 31.36711502075195 570.89898681640625 -4.77236986160278 +v 31.36711502075195 571.08508300781250 -0.09940527379513 +v 31.36711502075195 570.67321777343750 6.76958894729614 +v 31.36711502075195 569.97271728515625 10.88530254364014 +v 31.36711502075195 568.96710205078125 14.64853191375732 +v 31.36711502075195 567.68682861328125 18.07505607604980 +v 31.36711502075195 566.16253662109375 21.18065452575684 +v 31.36711502075195 564.42462158203125 23.98110389709473 +v 31.36711502075195 562.50366210937500 26.49218750000000 +v 31.36711502075195 560.43011474609375 28.72967910766602 +v 31.36711502075195 557.10052490234375 31.60745620727539 +v 31.36711502075195 553.59930419921875 33.95841217041016 +v 31.36711502075195 550.02941894531250 35.83580398559570 +v 31.36711502075195 545.34075927734375 37.69438171386719 +v 31.36711502075195 540.95721435546875 38.93196868896484 +v 31.36711502075195 536.27874755859375 39.79799652099609 +v 31.36711502075195 532.93518066406250 40.13751220703125 +v 31.36711502075195 531.35620117187500 40.19707870483398 +v 81.36711883544922 531.24267578125000 -40.16886520385742 +v 81.36711883544922 533.97619628906250 -40.03647232055664 +v 81.36711883544922 538.86437988281250 -39.37255859375000 +v 81.36711883544922 544.12994384765625 -38.10228729248047 +v 81.36711883544922 548.77844238281250 -36.43727874755859 +v 81.36711883544922 552.35852050781250 -34.72630691528320 +v 81.36711883544922 555.90417480468750 -32.55932235717773 +v 81.36711883544922 559.31213378906250 -29.88249015808105 +v 81.36711883544922 561.45660400390625 -27.78809356689453 +v 81.36711883544922 563.46343994140625 -25.42721176147461 +v 81.36711883544922 565.30187988281250 -22.78389358520508 +v 81.36711883544922 566.94146728515625 -19.84218406677246 +v 81.36711883544922 568.35162353515625 -16.58613014221191 +v 81.36711883544922 569.50158691406250 -12.99977874755859 +v 81.36711883544922 570.36096191406250 -9.06717681884766 +v 81.36711883544922 570.89898681640625 -4.77236986160278 +v 81.36711883544922 571.08508300781250 -0.09940527379513 +v 81.36711883544922 570.67321777343750 6.76958894729614 +v 81.36711883544922 569.97271728515625 10.88530254364014 +v 81.36711883544922 568.96710205078125 14.64853191375732 +v 81.36711883544922 567.68682861328125 18.07505607604980 +v 81.36711883544922 566.16253662109375 21.18065452575684 +v 81.36711883544922 564.42462158203125 23.98110389709473 +v 81.36711883544922 562.50366210937500 26.49218750000000 +v 81.36711883544922 560.43011474609375 28.72967910766602 +v 81.36711883544922 557.10052490234375 31.60745620727539 +v 81.36711883544922 553.59930419921875 33.95841217041016 +v 81.36711883544922 550.02941894531250 35.83580398559570 +v 81.36711883544922 545.34075927734375 37.69438171386719 +v 81.36711883544922 540.95721435546875 38.93196868896484 +v 81.36711883544922 536.27874755859375 39.79799652099609 +v 81.36711883544922 532.93518066406250 40.13751220703125 +v 81.36711883544922 531.35620117187500 40.19707870483398 +v 31.36711502075195 531.34594726562500 -42.30230331420898 +v 31.36711502075195 534.17193603515625 -42.16543197631836 +v 31.36711502075195 539.25958251953125 -41.47443008422852 +v 31.36711502075195 544.74224853515625 -40.15177917480469 +v 31.36711502075195 549.60119628906250 -38.41139602661133 +v 31.36711502075195 553.37860107421875 -36.60610198974609 +v 31.36711502075195 557.12493896484375 -34.31647491455078 +v 31.36711502075195 560.72204589843750 -31.49105644226074 +v 31.36711502075195 563.01983642578125 -29.24694633483887 +v 31.36711502075195 565.15783691406250 -26.73174285888672 +v 31.36711502075195 567.11590576171875 -23.91640663146973 +v 31.36711502075195 568.85906982421875 -20.78890419006348 +v 31.36711502075195 570.35339355468750 -17.33847045898438 +v 31.36711502075195 571.56652832031250 -13.55512332916260 +v 31.36711502075195 572.46826171875000 -9.42866516113281 +v 31.36711502075195 573.02960205078125 -4.94793319702148 +v 31.36711502075195 573.22351074218750 -0.07792840898037 +v 31.36711502075195 572.79833984375000 7.01342201232910 +v 31.36711502075195 572.06176757812500 11.34118080139160 +v 31.36711502075195 571.00396728515625 15.29954719543457 +v 31.36711502075195 569.65069580078125 18.92146492004395 +v 31.36711502075195 568.03326416015625 22.21689414978027 +v 31.36711502075195 566.18444824218750 25.19602394104004 +v 31.36711502075195 564.13879394531250 27.87006759643555 +v 31.36711502075195 561.91632080078125 30.26830673217773 +v 31.36711502075195 558.39898681640625 33.30834960937500 +v 31.36711502075195 554.69488525390625 35.79554367065430 +v 31.36711502075195 550.92254638671875 37.77937698364258 +v 31.36711502075195 546.02624511718750 39.72027587890625 +v 31.36711502075195 541.44274902343750 41.01430511474609 +v 31.36711502075195 536.58148193359375 41.91417312622070 +v 31.36711502075195 533.08343505859375 42.26937484741211 +v 31.36711502075195 531.43670654296875 42.33149719238281 +v 81.36711883544922 531.34594726562500 -42.30230331420898 +v 81.36711883544922 534.17193603515625 -42.16543197631836 +v 81.36711883544922 539.25958251953125 -41.47443008422852 +v 81.36711883544922 544.74224853515625 -40.15177917480469 +v 81.36711883544922 549.60119628906250 -38.41139602661133 +v 81.36711883544922 553.37860107421875 -36.60610198974609 +v 81.36711883544922 557.12493896484375 -34.31647491455078 +v 81.36711883544922 560.72204589843750 -31.49105644226074 +v 81.36711883544922 563.01983642578125 -29.24694633483887 +v 81.36711883544922 565.15783691406250 -26.73174285888672 +v 81.36711883544922 567.11590576171875 -23.91640663146973 +v 81.36711883544922 568.85906982421875 -20.78890419006348 +v 81.36711883544922 570.35339355468750 -17.33847045898438 +v 81.36711883544922 571.56652832031250 -13.55512332916260 +v 81.36711883544922 572.46826171875000 -9.42866516113281 +v 81.36711883544922 573.02960205078125 -4.94793319702148 +v 81.36711883544922 573.22351074218750 -0.07792840898037 +v 81.36711883544922 572.79833984375000 7.01342201232910 +v 81.36711883544922 572.06176757812500 11.34118080139160 +v 81.36711883544922 571.00396728515625 15.29954719543457 +v 81.36711883544922 569.65069580078125 18.92146492004395 +v 81.36711883544922 568.03326416015625 22.21689414978027 +v 81.36711883544922 566.18444824218750 25.19602394104004 +v 81.36711883544922 564.13879394531250 27.87006759643555 +v 81.36711883544922 561.91632080078125 30.26830673217773 +v 81.36711883544922 558.39898681640625 33.30834960937500 +v 81.36711883544922 554.69488525390625 35.79554367065430 +v 81.36711883544922 550.92254638671875 37.77937698364258 +v 81.36711883544922 546.02624511718750 39.72027587890625 +v 81.36711883544922 541.44274902343750 41.01430511474609 +v 81.36711883544922 536.58148193359375 41.91417312622070 +v 81.36711883544922 533.08343505859375 42.26937484741211 +v 81.36711883544922 531.43670654296875 42.33149719238281 +# 132 vertices + +vn 0.00000000000000 0.04837580770254 -0.99882918596268 +vn 0.00000000000000 0.09156414866447 -0.99579918384552 +vn 0.00000000000000 0.18478663265705 -0.98277866840363 +vn 0.00000000000000 0.28625822067261 -0.95815253257751 +vn 0.00000000000000 0.38469305634499 -0.92304456233978 +vn 0.00000000000000 0.47697460651398 -0.87891709804535 +vn 0.00000000000000 0.57057911157608 -0.82124263048172 +vn 0.00000000000000 0.65915924310684 -0.75200343132019 +vn 0.00000000000000 0.73110723495483 -0.68226259946823 +vn 0.00000000000000 0.79236483573914 -0.61004751920700 +vn 0.00000000000000 0.84826505184174 -0.52957189083099 +vn 0.00000000000000 0.89668446779251 -0.44267019629478 +vn 0.00000000000000 0.93607980012894 -0.35178777575493 +vn 0.00000000000000 0.96569234132767 -0.25968879461288 +vn 0.00000000000000 0.98561018705368 -0.16903407871723 +vn 0.00000000000000 0.99662184715271 -0.08212731033564 +vn 0.00000000000000 0.99994969367981 0.01003137230873 +vn 0.00000000000000 0.99348413944244 0.11397051066160 +vn 0.00000000000000 0.97701078653336 0.21318985521793 +vn 0.00000000000000 0.95254129171371 0.30440944433212 +vn 0.00000000000000 0.91833972930908 0.39579299092293 +vn 0.00000000000000 0.87476831674576 0.48454141616821 +vn 0.00000000000000 0.82295536994934 0.56810605525970 +vn 0.00000000000000 0.76470047235489 0.64438593387604 +vn 0.00000000000000 0.69476622343063 0.71923559904099 +vn 0.00000000000000 0.60679340362549 0.79485958814621 +vn 0.00000000000000 0.51220065355301 0.85886579751968 +vn 0.00000000000000 0.41757127642632 0.90864413976669 +vn 0.00000000000000 0.32050904631615 0.94724547863007 +vn 0.00000000000000 0.22710019350052 0.97387140989304 +vn 0.00000000000000 0.14162696897984 0.98992007970810 +vn 0.00000000000000 0.06937694549561 0.99759054183960 +vn 0.00000000000000 0.03768781572580 0.99928957223892 +# 33 normals + +vt 0.00000000000000 1.00000000000000 0.00000000000000 +vt 0.02154290862381 1.00000000000000 0.00000000000000 +vt 0.02154290862381 0.00000000000000 0.00000000000000 +vt 0.00000000000000 0.00000000000000 0.00000000000000 +vt 0.06037512049079 1.00000000000000 0.00000000000000 +vt 0.06037512049079 0.00000000000000 0.00000000000000 +vt 0.10301384329796 1.00000000000000 0.00000000000000 +vt 0.10301384329796 0.00000000000000 0.00000000000000 +vt 0.14188241958618 1.00000000000000 0.00000000000000 +vt 0.14188241958618 0.00000000000000 0.00000000000000 +vt 0.17311717569828 1.00000000000000 0.00000000000000 +vt 0.17311717569828 0.00000000000000 0.00000000000000 +vt 0.20582786202431 1.00000000000000 0.00000000000000 +vt 0.20582786202431 0.00000000000000 0.00000000000000 +vt 0.23994076251984 1.00000000000000 0.00000000000000 +vt 0.23994076251984 0.00000000000000 0.00000000000000 +vt 0.26353690028191 1.00000000000000 0.00000000000000 +vt 0.26353690028191 0.00000000000000 0.00000000000000 +vt 0.28792801499367 1.00000000000000 0.00000000000000 +vt 0.28792801499367 0.00000000000000 0.00000000000000 +vt 0.31327378749847 1.00000000000000 0.00000000000000 +vt 0.31327378749847 0.00000000000000 0.00000000000000 +vt 0.33978429436684 1.00000000000000 0.00000000000000 +vt 0.33978429436684 0.00000000000000 0.00000000000000 +vt 0.36771568655968 1.00000000000000 0.00000000000000 +vt 0.36771568655968 0.00000000000000 0.00000000000000 +vt 0.39736270904541 1.00000000000000 0.00000000000000 +vt 0.39736270904541 0.00000000000000 0.00000000000000 +vt 0.42904987931252 1.00000000000000 0.00000000000000 +vt 0.42904987931252 0.00000000000000 0.00000000000000 +vt 0.46312206983566 1.00000000000000 0.00000000000000 +vt 0.46312206983566 0.00000000000000 0.00000000000000 +vt 0.49993595480919 1.00000000000000 0.00000000000000 +vt 0.49993595480919 0.00000000000000 0.00000000000000 +vt 0.55410450696945 1.00000000000000 0.00000000000000 +vt 0.55410450696945 0.00000000000000 0.00000000000000 +vt 0.58696860074997 1.00000000000000 0.00000000000000 +vt 0.58696860074997 0.00000000000000 0.00000000000000 +vt 0.61763143539429 1.00000000000000 0.00000000000000 +vt 0.61763143539429 0.00000000000000 0.00000000000000 +vt 0.64642554521561 1.00000000000000 0.00000000000000 +vt 0.64642554521561 0.00000000000000 0.00000000000000 +vt 0.67365831136703 1.00000000000000 0.00000000000000 +vt 0.67365831136703 0.00000000000000 0.00000000000000 +vt 0.69960284233093 1.00000000000000 0.00000000000000 +vt 0.69960284233093 0.00000000000000 0.00000000000000 +vt 0.72449034452438 1.00000000000000 0.00000000000000 +vt 0.72449034452438 0.00000000000000 0.00000000000000 +vt 0.74850374460220 1.00000000000000 0.00000000000000 +vt 0.74850374460220 0.00000000000000 0.00000000000000 +vt 0.78314679861069 1.00000000000000 0.00000000000000 +vt 0.78314679861069 0.00000000000000 0.00000000000000 +vt 0.81634455919266 1.00000000000000 0.00000000000000 +vt 0.81634455919266 0.00000000000000 0.00000000000000 +vt 0.84809511899948 1.00000000000000 0.00000000000000 +vt 0.84809511899948 0.00000000000000 0.00000000000000 +vt 0.88779723644257 1.00000000000000 0.00000000000000 +vt 0.88779723644257 0.00000000000000 0.00000000000000 +vt 0.92365247011185 1.00000000000000 0.00000000000000 +vt 0.92365247011185 0.00000000000000 0.00000000000000 +vt 0.96110624074936 1.00000000000000 0.00000000000000 +vt 0.96110624074936 0.00000000000000 0.00000000000000 +vt 0.98756164312363 1.00000000000000 0.00000000000000 +vt 0.98756164312363 0.00000000000000 0.00000000000000 +vt 1.00000000000000 1.00000000000000 0.00000000000000 +vt 1.00000000000000 0.00000000000000 0.00000000000000 +# 66 texture coordinates + +g 挤压.3 +usemtl 材质 +f 67/1/1 68/2/2 101/3/2 100/4/1 +f 68/2/2 69/5/3 102/6/3 101/3/2 +f 69/5/3 70/7/4 103/8/4 102/6/3 +f 70/7/4 71/9/5 104/10/5 103/8/4 +f 71/9/5 72/11/6 105/12/6 104/10/5 +f 72/11/6 73/13/7 106/14/7 105/12/6 +f 73/13/7 74/15/8 107/16/8 106/14/7 +f 74/15/8 75/17/9 108/18/9 107/16/8 +f 75/17/9 76/19/10 109/20/10 108/18/9 +f 76/19/10 77/21/11 110/22/11 109/20/10 +f 77/21/11 78/23/12 111/24/12 110/22/11 +f 78/23/12 79/25/13 112/26/13 111/24/12 +f 79/25/13 80/27/14 113/28/14 112/26/13 +f 80/27/14 81/29/15 114/30/15 113/28/14 +f 81/29/15 82/31/16 115/32/16 114/30/15 +f 82/31/16 83/33/17 116/34/17 115/32/16 +f 83/33/17 84/35/18 117/36/18 116/34/17 +f 84/35/18 85/37/19 118/38/19 117/36/18 +f 85/37/19 86/39/20 119/40/20 118/38/19 +f 86/39/20 87/41/21 120/42/21 119/40/20 +f 87/41/21 88/43/22 121/44/22 120/42/21 +f 88/43/22 89/45/23 122/46/23 121/44/22 +f 89/45/23 90/47/24 123/48/24 122/46/23 +f 90/47/24 91/49/25 124/50/25 123/48/24 +f 91/49/25 92/51/26 125/52/26 124/50/25 +f 92/51/26 93/53/27 126/54/27 125/52/26 +f 93/53/27 94/55/28 127/56/28 126/54/27 +f 94/55/28 95/57/29 128/58/29 127/56/28 +f 95/57/29 96/59/30 129/60/30 128/58/29 +f 96/59/30 97/61/31 130/62/31 129/60/30 +f 97/61/31 98/63/32 131/64/32 130/62/31 +f 98/63/32 99/65/33 132/66/33 131/64/32 +f 1/1/1 67/1/1 100/4/1 34/4/1 +f 34/4/1 100/4/1 101/3/2 35/3/2 +f 2/2/2 68/2/2 67/1/1 1/1/1 +f 35/3/2 101/3/2 102/6/3 36/6/3 +f 3/5/3 69/5/3 68/2/2 2/2/2 +f 36/6/3 102/6/3 103/8/4 37/8/4 +f 4/7/4 70/7/4 69/5/3 3/5/3 +f 37/8/4 103/8/4 104/10/5 38/10/5 +f 5/9/5 71/9/5 70/7/4 4/7/4 +f 38/10/5 104/10/5 105/12/6 39/12/6 +f 6/11/6 72/11/6 71/9/5 5/9/5 +f 39/12/6 105/12/6 106/14/7 40/14/7 +f 7/13/7 73/13/7 72/11/6 6/11/6 +f 40/14/7 106/14/7 107/16/8 41/16/8 +f 8/15/8 74/15/8 73/13/7 7/13/7 +f 41/16/8 107/16/8 108/18/9 42/18/9 +f 9/17/9 75/17/9 74/15/8 8/15/8 +f 42/18/9 108/18/9 109/20/10 43/20/10 +f 10/19/10 76/19/10 75/17/9 9/17/9 +f 43/20/10 109/20/10 110/22/11 44/22/11 +f 11/21/11 77/21/11 76/19/10 10/19/10 +f 44/22/11 110/22/11 111/24/12 45/24/12 +f 12/23/12 78/23/12 77/21/11 11/21/11 +f 45/24/12 111/24/12 112/26/13 46/26/13 +f 13/25/13 79/25/13 78/23/12 12/23/12 +f 46/26/13 112/26/13 113/28/14 47/28/14 +f 14/27/14 80/27/14 79/25/13 13/25/13 +f 47/28/14 113/28/14 114/30/15 48/30/15 +f 15/29/15 81/29/15 80/27/14 14/27/14 +f 48/30/15 114/30/15 115/32/16 49/32/16 +f 16/31/16 82/31/16 81/29/15 15/29/15 +f 49/32/16 115/32/16 116/34/17 50/34/17 +f 17/33/17 83/33/17 82/31/16 16/31/16 +f 50/34/17 116/34/17 117/36/18 51/36/18 +f 18/35/18 84/35/18 83/33/17 17/33/17 +f 51/36/18 117/36/18 118/38/19 52/38/19 +f 19/37/19 85/37/19 84/35/18 18/35/18 +f 52/38/19 118/38/19 119/40/20 53/40/20 +f 20/39/20 86/39/20 85/37/19 19/37/19 +f 53/40/20 119/40/20 120/42/21 54/42/21 +f 21/41/21 87/41/21 86/39/20 20/39/20 +f 54/42/21 120/42/21 121/44/22 55/44/22 +f 22/43/22 88/43/22 87/41/21 21/41/21 +f 55/44/22 121/44/22 122/46/23 56/46/23 +f 23/45/23 89/45/23 88/43/22 22/43/22 +f 56/46/23 122/46/23 123/48/24 57/48/24 +f 24/47/24 90/47/24 89/45/23 23/45/23 +f 57/48/24 123/48/24 124/50/25 58/50/25 +f 25/49/25 91/49/25 90/47/24 24/47/24 +f 58/50/25 124/50/25 125/52/26 59/52/26 +f 26/51/26 92/51/26 91/49/25 25/49/25 +f 59/52/26 125/52/26 126/54/27 60/54/27 +f 27/53/27 93/53/27 92/51/26 26/51/26 +f 60/54/27 126/54/27 127/56/28 61/56/28 +f 28/55/28 94/55/28 93/53/27 27/53/27 +f 61/56/28 127/56/28 128/58/29 62/58/29 +f 29/57/29 95/57/29 94/55/28 28/55/28 +f 62/58/29 128/58/29 129/60/30 63/60/30 +f 30/59/30 96/59/30 95/57/29 29/57/29 +f 63/60/30 129/60/30 130/62/31 64/62/31 +f 31/61/31 97/61/31 96/59/30 30/59/30 +f 64/62/31 130/62/31 131/64/32 65/64/32 +f 32/63/32 98/63/32 97/61/31 31/61/31 +f 65/64/32 131/64/32 132/66/33 66/66/33 +f 66/66/33 132/66/33 99/65/33 33/65/33 +f 33/65/33 99/65/33 98/63/32 32/63/32 + +v 31.36711502075195 530.31011962890625 -40.16886520385742 +v 31.36711502075195 533.04364013671875 -40.03647232055664 +v 31.36711502075195 537.93182373046875 -39.37255859375000 +v 31.36711502075195 543.19738769531250 -38.10228729248047 +v 31.36711502075195 547.84588623046875 -36.43727874755859 +v 31.36711502075195 551.42596435546875 -34.72630691528320 +v 31.36711502075195 554.97161865234375 -32.55932235717773 +v 31.36711502075195 558.37957763671875 -29.88249015808105 +v 31.36711502075195 560.52410888671875 -27.78809356689453 +v 31.36711502075195 562.53088378906250 -25.42721176147461 +v 31.36711502075195 564.36932373046875 -22.78389358520508 +v 31.36711502075195 566.00897216796875 -19.84218406677246 +v 31.36711502075195 567.41906738281250 -16.58613014221191 +v 31.36711502075195 568.56909179687500 -12.99977874755859 +v 31.36711502075195 569.42840576171875 -9.06717681884766 +v 31.36711502075195 569.96643066406250 -4.77236986160278 +v 31.36711502075195 570.15258789062500 -0.09940527379513 +v 31.36711502075195 569.74066162109375 6.76958894729614 +v 31.36711502075195 569.04016113281250 10.88530254364014 +v 31.36711502075195 568.03454589843750 14.64853191375732 +v 31.36711502075195 566.75433349609375 18.07505607604980 +v 31.36711502075195 565.22998046875000 21.18065452575684 +v 31.36711502075195 563.49206542968750 23.98110389709473 +v 31.36711502075195 561.57110595703125 26.49218750000000 +v 31.36711502075195 559.49755859375000 28.72967910766602 +v 31.36711502075195 556.16796875000000 31.60745620727539 +v 31.36711502075195 552.66674804687500 33.95841217041016 +v 31.36711502075195 549.09686279296875 35.83580398559570 +v 31.36711502075195 544.40820312500000 37.69438171386719 +v 31.36711502075195 540.02465820312500 38.93196868896484 +v 31.36711502075195 535.34619140625000 39.79799652099609 +v 31.36711502075195 532.00262451171875 40.13751220703125 +v 31.36711502075195 530.42364501953125 40.19707870483398 +v 81.36711883544922 530.31011962890625 -40.16886520385742 +v 81.36711883544922 533.04364013671875 -40.03647232055664 +v 81.36711883544922 537.93182373046875 -39.37255859375000 +v 81.36711883544922 543.19738769531250 -38.10228729248047 +v 81.36711883544922 547.84588623046875 -36.43727874755859 +v 81.36711883544922 551.42596435546875 -34.72630691528320 +v 81.36711883544922 554.97161865234375 -32.55932235717773 +v 81.36711883544922 558.37957763671875 -29.88249015808105 +v 81.36711883544922 560.52410888671875 -27.78809356689453 +v 81.36711883544922 562.53088378906250 -25.42721176147461 +v 81.36711883544922 564.36932373046875 -22.78389358520508 +v 81.36711883544922 566.00897216796875 -19.84218406677246 +v 81.36711883544922 567.41906738281250 -16.58613014221191 +v 81.36711883544922 568.56909179687500 -12.99977874755859 +v 81.36711883544922 569.42840576171875 -9.06717681884766 +v 81.36711883544922 569.96643066406250 -4.77236986160278 +v 81.36711883544922 570.15258789062500 -0.09940527379513 +v 81.36711883544922 569.74066162109375 6.76958894729614 +v 81.36711883544922 569.04016113281250 10.88530254364014 +v 81.36711883544922 568.03454589843750 14.64853191375732 +v 81.36711883544922 566.75433349609375 18.07505607604980 +v 81.36711883544922 565.22998046875000 21.18065452575684 +v 81.36711883544922 563.49206542968750 23.98110389709473 +v 81.36711883544922 561.57110595703125 26.49218750000000 +v 81.36711883544922 559.49755859375000 28.72967910766602 +v 81.36711883544922 556.16796875000000 31.60745620727539 +v 81.36711883544922 552.66674804687500 33.95841217041016 +v 81.36711883544922 549.09686279296875 35.83580398559570 +v 81.36711883544922 544.40820312500000 37.69438171386719 +v 81.36711883544922 540.02465820312500 38.93196868896484 +v 81.36711883544922 535.34619140625000 39.79799652099609 +v 81.36711883544922 532.00262451171875 40.13751220703125 +v 81.36711883544922 530.42364501953125 40.19707870483398 +# 66 vertices + +# 0 normal + +# 0 texture coordinate + +g 挤压.2 +usemtl 材质 +f 133/1/1 134/2/2 167/3/2 166/4/1 +f 134/2/2 135/5/3 168/6/3 167/3/2 +f 135/5/3 136/7/4 169/8/4 168/6/3 +f 136/7/4 137/9/5 170/10/5 169/8/4 +f 137/9/5 138/11/6 171/12/6 170/10/5 +f 138/11/6 139/13/7 172/14/7 171/12/6 +f 139/13/7 140/15/8 173/16/8 172/14/7 +f 140/15/8 141/17/9 174/18/9 173/16/8 +f 141/17/9 142/19/10 175/20/10 174/18/9 +f 142/19/10 143/21/11 176/22/11 175/20/10 +f 143/21/11 144/23/12 177/24/12 176/22/11 +f 144/23/12 145/25/13 178/26/13 177/24/12 +f 145/25/13 146/27/14 179/28/14 178/26/13 +f 146/27/14 147/29/15 180/30/15 179/28/14 +f 147/29/15 148/31/16 181/32/16 180/30/15 +f 148/31/16 149/33/17 182/34/17 181/32/16 +f 149/33/17 150/35/18 183/36/18 182/34/17 +f 150/35/18 151/37/19 184/38/19 183/36/18 +f 151/37/19 152/39/20 185/40/20 184/38/19 +f 152/39/20 153/41/21 186/42/21 185/40/20 +f 153/41/21 154/43/22 187/44/22 186/42/21 +f 154/43/22 155/45/23 188/46/23 187/44/22 +f 155/45/23 156/47/24 189/48/24 188/46/23 +f 156/47/24 157/49/25 190/50/25 189/48/24 +f 157/49/25 158/51/26 191/52/26 190/50/25 +f 158/51/26 159/53/27 192/54/27 191/52/26 +f 159/53/27 160/55/28 193/56/28 192/54/27 +f 160/55/28 161/57/29 194/58/29 193/56/28 +f 161/57/29 162/59/30 195/60/30 194/58/29 +f 162/59/30 163/61/31 196/62/31 195/60/30 +f 163/61/31 164/63/32 197/64/32 196/62/31 +f 164/63/32 165/65/33 198/66/33 197/64/32 + +v 31.36711502075195 618.07562255859375 -40.16886520385742 +v 31.36711502075195 620.80914306640625 -40.03647232055664 +v 31.36711502075195 625.69732666015625 -39.37255859375000 +v 31.36711502075195 630.96289062500000 -38.10228729248047 +v 31.36711502075195 635.61138916015625 -36.43727874755859 +v 31.36711502075195 639.19146728515625 -34.72630691528320 +v 31.36711502075195 642.73712158203125 -32.55932235717773 +v 31.36711502075195 646.14514160156250 -29.88249015808105 +v 31.36711502075195 648.28961181640625 -27.78809356689453 +v 31.36711502075195 650.29638671875000 -25.42721176147461 +v 31.36711502075195 652.13488769531250 -22.78389358520508 +v 31.36711502075195 653.77447509765625 -19.84218406677246 +v 31.36711502075195 655.18457031250000 -16.58613014221191 +v 31.36711502075195 656.33459472656250 -12.99977874755859 +v 31.36711502075195 657.19390869140625 -9.06717681884766 +v 31.36711502075195 657.73193359375000 -4.77236986160278 +v 31.36711502075195 657.91809082031250 -0.09940527379513 +v 31.36711502075195 657.50616455078125 6.76958894729614 +v 31.36711502075195 656.80566406250000 10.88530254364014 +v 31.36711502075195 655.80004882812500 14.64853191375732 +v 31.36711502075195 654.51983642578125 18.07505607604980 +v 31.36711502075195 652.99548339843750 21.18065452575684 +v 31.36711502075195 651.25762939453125 23.98110389709473 +v 31.36711502075195 649.33660888671875 26.49218750000000 +v 31.36711502075195 647.26312255859375 28.72967910766602 +v 31.36711502075195 643.93347167968750 31.60745620727539 +v 31.36711502075195 640.43225097656250 33.95841217041016 +v 31.36711502075195 636.86236572265625 35.83580398559570 +v 31.36711502075195 632.17370605468750 37.69438171386719 +v 31.36711502075195 627.79022216796875 38.93196868896484 +v 31.36711502075195 623.11169433593750 39.79799652099609 +v 31.36711502075195 619.76812744140625 40.13751220703125 +v 31.36711502075195 618.18914794921875 40.19707870483398 +v 81.36711883544922 618.07562255859375 -40.16886520385742 +v 81.36711883544922 620.80914306640625 -40.03647232055664 +v 81.36711883544922 625.69732666015625 -39.37255859375000 +v 81.36711883544922 630.96289062500000 -38.10228729248047 +v 81.36711883544922 635.61138916015625 -36.43727874755859 +v 81.36711883544922 639.19146728515625 -34.72630691528320 +v 81.36711883544922 642.73712158203125 -32.55932235717773 +v 81.36711883544922 646.14514160156250 -29.88249015808105 +v 81.36711883544922 648.28961181640625 -27.78809356689453 +v 81.36711883544922 650.29638671875000 -25.42721176147461 +v 81.36711883544922 652.13488769531250 -22.78389358520508 +v 81.36711883544922 653.77447509765625 -19.84218406677246 +v 81.36711883544922 655.18457031250000 -16.58613014221191 +v 81.36711883544922 656.33459472656250 -12.99977874755859 +v 81.36711883544922 657.19390869140625 -9.06717681884766 +v 81.36711883544922 657.73193359375000 -4.77236986160278 +v 81.36711883544922 657.91809082031250 -0.09940527379513 +v 81.36711883544922 657.50616455078125 6.76958894729614 +v 81.36711883544922 656.80566406250000 10.88530254364014 +v 81.36711883544922 655.80004882812500 14.64853191375732 +v 81.36711883544922 654.51983642578125 18.07505607604980 +v 81.36711883544922 652.99548339843750 21.18065452575684 +v 81.36711883544922 651.25762939453125 23.98110389709473 +v 81.36711883544922 649.33660888671875 26.49218750000000 +v 81.36711883544922 647.26312255859375 28.72967910766602 +v 81.36711883544922 643.93347167968750 31.60745620727539 +v 81.36711883544922 640.43225097656250 33.95841217041016 +v 81.36711883544922 636.86236572265625 35.83580398559570 +v 81.36711883544922 632.17370605468750 37.69438171386719 +v 81.36711883544922 627.79022216796875 38.93196868896484 +v 81.36711883544922 623.11169433593750 39.79799652099609 +v 81.36711883544922 619.76812744140625 40.13751220703125 +v 81.36711883544922 618.18914794921875 40.19707870483398 +# 66 vertices + +# 0 normal + +# 0 texture coordinate + +g 挤压.1 +usemtl 材质 +f 199/1/1 200/2/2 233/3/2 232/4/1 +f 200/2/2 201/5/3 234/6/3 233/3/2 +f 201/5/3 202/7/4 235/8/4 234/6/3 +f 202/7/4 203/9/5 236/10/5 235/8/4 +f 203/9/5 204/11/6 237/12/6 236/10/5 +f 204/11/6 205/13/7 238/14/7 237/12/6 +f 205/13/7 206/15/8 239/16/8 238/14/7 +f 206/15/8 207/17/9 240/18/9 239/16/8 +f 207/17/9 208/19/10 241/20/10 240/18/9 +f 208/19/10 209/21/11 242/22/11 241/20/10 +f 209/21/11 210/23/12 243/24/12 242/22/11 +f 210/23/12 211/25/13 244/26/13 243/24/12 +f 211/25/13 212/27/14 245/28/14 244/26/13 +f 212/27/14 213/29/15 246/30/15 245/28/14 +f 213/29/15 214/31/16 247/32/16 246/30/15 +f 214/31/16 215/33/17 248/34/17 247/32/16 +f 215/33/17 216/35/18 249/36/18 248/34/17 +f 216/35/18 217/37/19 250/38/19 249/36/18 +f 217/37/19 218/39/20 251/40/20 250/38/19 +f 218/39/20 219/41/21 252/42/21 251/40/20 +f 219/41/21 220/43/22 253/44/22 252/42/21 +f 220/43/22 221/45/23 254/46/23 253/44/22 +f 221/45/23 222/47/24 255/48/24 254/46/23 +f 222/47/24 223/49/25 256/50/25 255/48/24 +f 223/49/25 224/51/26 257/52/26 256/50/25 +f 224/51/26 225/53/27 258/54/27 257/52/26 +f 225/53/27 226/55/28 259/56/28 258/54/27 +f 226/55/28 227/57/29 260/58/29 259/56/28 +f 227/57/29 228/59/30 261/60/30 260/58/29 +f 228/59/30 229/61/31 262/62/31 261/60/30 +f 229/61/31 230/63/32 263/64/32 262/62/31 +f 230/63/32 231/65/33 264/66/33 263/64/32 + +v 31.36711502075195 712.16796875000000 -40.16886520385742 +v 31.36711502075195 714.90148925781250 -40.03647232055664 +v 31.36711502075195 719.78967285156250 -39.37255859375000 +v 31.36711502075195 725.05523681640625 -38.10228729248047 +v 31.36711502075195 729.70373535156250 -36.43727874755859 +v 31.36711502075195 733.28381347656250 -34.72630691528320 +v 31.36711502075195 736.82946777343750 -32.55932235717773 +v 31.36711502075195 740.23742675781250 -29.88249015808105 +v 31.36711502075195 742.38189697265625 -27.78809356689453 +v 31.36711502075195 744.38873291015625 -25.42721176147461 +v 31.36711502075195 746.22717285156250 -22.78389358520508 +v 31.36711502075195 747.86676025390625 -19.84218406677246 +v 31.36711502075195 749.27691650390625 -16.58613014221191 +v 31.36711502075195 750.42687988281250 -12.99977874755859 +v 31.36711502075195 751.28625488281250 -9.06717681884766 +v 31.36711502075195 751.82427978515625 -4.77236986160278 +v 31.36711502075195 752.01037597656250 -0.09940527379513 +v 31.36711502075195 751.59851074218750 6.76958894729614 +v 31.36711502075195 750.89801025390625 10.88530254364014 +v 31.36711502075195 749.89239501953125 14.64853191375732 +v 31.36711502075195 748.61212158203125 18.07505607604980 +v 31.36711502075195 747.08782958984375 21.18065452575684 +v 31.36711502075195 745.34991455078125 23.98110389709473 +v 31.36711502075195 743.42895507812500 26.49218750000000 +v 31.36711502075195 741.35540771484375 28.72967910766602 +v 31.36711502075195 738.02581787109375 31.60745620727539 +v 31.36711502075195 734.52459716796875 33.95841217041016 +v 31.36711502075195 730.95471191406250 35.83580398559570 +v 31.36711502075195 726.26605224609375 37.69438171386719 +v 31.36711502075195 721.88250732421875 38.93196868896484 +v 31.36711502075195 717.20404052734375 39.79799652099609 +v 31.36711502075195 713.86047363281250 40.13751220703125 +v 31.36711502075195 712.28149414062500 40.19707870483398 +v 81.36711883544922 712.16796875000000 -40.16886520385742 +v 81.36711883544922 714.90148925781250 -40.03647232055664 +v 81.36711883544922 719.78967285156250 -39.37255859375000 +v 81.36711883544922 725.05523681640625 -38.10228729248047 +v 81.36711883544922 729.70373535156250 -36.43727874755859 +v 81.36711883544922 733.28381347656250 -34.72630691528320 +v 81.36711883544922 736.82946777343750 -32.55932235717773 +v 81.36711883544922 740.23742675781250 -29.88249015808105 +v 81.36711883544922 742.38189697265625 -27.78809356689453 +v 81.36711883544922 744.38873291015625 -25.42721176147461 +v 81.36711883544922 746.22717285156250 -22.78389358520508 +v 81.36711883544922 747.86676025390625 -19.84218406677246 +v 81.36711883544922 749.27691650390625 -16.58613014221191 +v 81.36711883544922 750.42687988281250 -12.99977874755859 +v 81.36711883544922 751.28625488281250 -9.06717681884766 +v 81.36711883544922 751.82427978515625 -4.77236986160278 +v 81.36711883544922 752.01037597656250 -0.09940527379513 +v 81.36711883544922 751.59851074218750 6.76958894729614 +v 81.36711883544922 750.89801025390625 10.88530254364014 +v 81.36711883544922 749.89239501953125 14.64853191375732 +v 81.36711883544922 748.61212158203125 18.07505607604980 +v 81.36711883544922 747.08782958984375 21.18065452575684 +v 81.36711883544922 745.34991455078125 23.98110389709473 +v 81.36711883544922 743.42895507812500 26.49218750000000 +v 81.36711883544922 741.35540771484375 28.72967910766602 +v 81.36711883544922 738.02581787109375 31.60745620727539 +v 81.36711883544922 734.52459716796875 33.95841217041016 +v 81.36711883544922 730.95471191406250 35.83580398559570 +v 81.36711883544922 726.26605224609375 37.69438171386719 +v 81.36711883544922 721.88250732421875 38.93196868896484 +v 81.36711883544922 717.20404052734375 39.79799652099609 +v 81.36711883544922 713.86047363281250 40.13751220703125 +v 81.36711883544922 712.28149414062500 40.19707870483398 +v 31.36711502075195 712.27130126953125 -42.30230331420898 +v 31.36711502075195 715.09722900390625 -42.16543197631836 +v 31.36711502075195 720.18487548828125 -41.47443008422852 +v 31.36711502075195 725.66754150390625 -40.15177917480469 +v 31.36711502075195 730.52648925781250 -38.41139602661133 +v 31.36711502075195 734.30395507812500 -36.60610198974609 +v 31.36711502075195 738.05029296875000 -34.31647491455078 +v 31.36711502075195 741.64739990234375 -31.49105644226074 +v 31.36711502075195 743.94519042968750 -29.24694633483887 +v 31.36711502075195 746.08319091796875 -26.73174285888672 +v 31.36711502075195 748.04125976562500 -23.91640663146973 +v 31.36711502075195 749.78442382812500 -20.78890419006348 +v 31.36711502075195 751.27874755859375 -17.33847045898438 +v 31.36711502075195 752.49188232421875 -13.55512332916260 +v 31.36711502075195 753.39361572265625 -9.42866516113281 +v 31.36711502075195 753.95489501953125 -4.94793319702148 +v 31.36711502075195 754.14886474609375 -0.07792840898037 +v 31.36711502075195 753.72369384765625 7.01342201232910 +v 31.36711502075195 752.98706054687500 11.34118080139160 +v 31.36711502075195 751.92932128906250 15.29954719543457 +v 31.36711502075195 750.57604980468750 18.92146492004395 +v 31.36711502075195 748.95855712890625 22.21689414978027 +v 31.36711502075195 747.10974121093750 25.19602394104004 +v 31.36711502075195 745.06414794921875 27.87006759643555 +v 31.36711502075195 742.84161376953125 30.26830673217773 +v 31.36711502075195 739.32427978515625 33.30834960937500 +v 31.36711502075195 735.62017822265625 35.79554367065430 +v 31.36711502075195 731.84790039062500 37.77937698364258 +v 31.36711502075195 726.95153808593750 39.72027587890625 +v 31.36711502075195 722.36810302734375 41.01430511474609 +v 31.36711502075195 717.50683593750000 41.91417312622070 +v 31.36711502075195 714.00878906250000 42.26937484741211 +v 31.36711502075195 712.36199951171875 42.33149719238281 +v 81.36711883544922 712.27130126953125 -42.30230331420898 +v 81.36711883544922 715.09722900390625 -42.16543197631836 +v 81.36711883544922 720.18487548828125 -41.47443008422852 +v 81.36711883544922 725.66754150390625 -40.15177917480469 +v 81.36711883544922 730.52648925781250 -38.41139602661133 +v 81.36711883544922 734.30395507812500 -36.60610198974609 +v 81.36711883544922 738.05029296875000 -34.31647491455078 +v 81.36711883544922 741.64739990234375 -31.49105644226074 +v 81.36711883544922 743.94519042968750 -29.24694633483887 +v 81.36711883544922 746.08319091796875 -26.73174285888672 +v 81.36711883544922 748.04125976562500 -23.91640663146973 +v 81.36711883544922 749.78442382812500 -20.78890419006348 +v 81.36711883544922 751.27874755859375 -17.33847045898438 +v 81.36711883544922 752.49188232421875 -13.55512332916260 +v 81.36711883544922 753.39361572265625 -9.42866516113281 +v 81.36711883544922 753.95489501953125 -4.94793319702148 +v 81.36711883544922 754.14886474609375 -0.07792840898037 +v 81.36711883544922 753.72369384765625 7.01342201232910 +v 81.36711883544922 752.98706054687500 11.34118080139160 +v 81.36711883544922 751.92932128906250 15.29954719543457 +v 81.36711883544922 750.57604980468750 18.92146492004395 +v 81.36711883544922 748.95855712890625 22.21689414978027 +v 81.36711883544922 747.10974121093750 25.19602394104004 +v 81.36711883544922 745.06414794921875 27.87006759643555 +v 81.36711883544922 742.84161376953125 30.26830673217773 +v 81.36711883544922 739.32427978515625 33.30834960937500 +v 81.36711883544922 735.62017822265625 35.79554367065430 +v 81.36711883544922 731.84790039062500 37.77937698364258 +v 81.36711883544922 726.95153808593750 39.72027587890625 +v 81.36711883544922 722.36810302734375 41.01430511474609 +v 81.36711883544922 717.50683593750000 41.91417312622070 +v 81.36711883544922 714.00878906250000 42.26937484741211 +v 81.36711883544922 712.36199951171875 42.33149719238281 +# 132 vertices + +# 0 normal + +# 0 texture coordinate + +g 挤压 +usemtl 材质 +f 331/1/1 332/2/2 365/3/2 364/4/1 +f 332/2/2 333/5/3 366/6/3 365/3/2 +f 333/5/3 334/7/4 367/8/4 366/6/3 +f 334/7/4 335/9/5 368/10/5 367/8/4 +f 335/9/5 336/11/6 369/12/6 368/10/5 +f 336/11/6 337/13/7 370/14/7 369/12/6 +f 337/13/7 338/15/8 371/16/8 370/14/7 +f 338/15/8 339/17/9 372/18/9 371/16/8 +f 339/17/9 340/19/10 373/20/10 372/18/9 +f 340/19/10 341/21/11 374/22/11 373/20/10 +f 341/21/11 342/23/12 375/24/12 374/22/11 +f 342/23/12 343/25/13 376/26/13 375/24/12 +f 343/25/13 344/27/14 377/28/14 376/26/13 +f 344/27/14 345/29/15 378/30/15 377/28/14 +f 345/29/15 346/31/16 379/32/16 378/30/15 +f 346/31/16 347/33/17 380/34/17 379/32/16 +f 347/33/17 348/35/18 381/36/18 380/34/17 +f 348/35/18 349/37/19 382/38/19 381/36/18 +f 349/37/19 350/39/20 383/40/20 382/38/19 +f 350/39/20 351/41/21 384/42/21 383/40/20 +f 351/41/21 352/43/22 385/44/22 384/42/21 +f 352/43/22 353/45/23 386/46/23 385/44/22 +f 353/45/23 354/47/24 387/48/24 386/46/23 +f 354/47/24 355/49/25 388/50/25 387/48/24 +f 355/49/25 356/51/26 389/52/26 388/50/25 +f 356/51/26 357/53/27 390/54/27 389/52/26 +f 357/53/27 358/55/28 391/56/28 390/54/27 +f 358/55/28 359/57/29 392/58/29 391/56/28 +f 359/57/29 360/59/30 393/60/30 392/58/29 +f 360/59/30 361/61/31 394/62/31 393/60/30 +f 361/61/31 362/63/32 395/64/32 394/62/31 +f 362/63/32 363/65/33 396/66/33 395/64/32 +f 265/1/1 331/1/1 364/4/1 298/4/1 +f 298/4/1 364/4/1 365/3/2 299/3/2 +f 266/2/2 332/2/2 331/1/1 265/1/1 +f 299/3/2 365/3/2 366/6/3 300/6/3 +f 267/5/3 333/5/3 332/2/2 266/2/2 +f 300/6/3 366/6/3 367/8/4 301/8/4 +f 268/7/4 334/7/4 333/5/3 267/5/3 +f 301/8/4 367/8/4 368/10/5 302/10/5 +f 269/9/5 335/9/5 334/7/4 268/7/4 +f 302/10/5 368/10/5 369/12/6 303/12/6 +f 270/11/6 336/11/6 335/9/5 269/9/5 +f 303/12/6 369/12/6 370/14/7 304/14/7 +f 271/13/7 337/13/7 336/11/6 270/11/6 +f 304/14/7 370/14/7 371/16/8 305/16/8 +f 272/15/8 338/15/8 337/13/7 271/13/7 +f 305/16/8 371/16/8 372/18/9 306/18/9 +f 273/17/9 339/17/9 338/15/8 272/15/8 +f 306/18/9 372/18/9 373/20/10 307/20/10 +f 274/19/10 340/19/10 339/17/9 273/17/9 +f 307/20/10 373/20/10 374/22/11 308/22/11 +f 275/21/11 341/21/11 340/19/10 274/19/10 +f 308/22/11 374/22/11 375/24/12 309/24/12 +f 276/23/12 342/23/12 341/21/11 275/21/11 +f 309/24/12 375/24/12 376/26/13 310/26/13 +f 277/25/13 343/25/13 342/23/12 276/23/12 +f 310/26/13 376/26/13 377/28/14 311/28/14 +f 278/27/14 344/27/14 343/25/13 277/25/13 +f 311/28/14 377/28/14 378/30/15 312/30/15 +f 279/29/15 345/29/15 344/27/14 278/27/14 +f 312/30/15 378/30/15 379/32/16 313/32/16 +f 280/31/16 346/31/16 345/29/15 279/29/15 +f 313/32/16 379/32/16 380/34/17 314/34/17 +f 281/33/17 347/33/17 346/31/16 280/31/16 +f 314/34/17 380/34/17 381/36/18 315/36/18 +f 282/35/18 348/35/18 347/33/17 281/33/17 +f 315/36/18 381/36/18 382/38/19 316/38/19 +f 283/37/19 349/37/19 348/35/18 282/35/18 +f 316/38/19 382/38/19 383/40/20 317/40/20 +f 284/39/20 350/39/20 349/37/19 283/37/19 +f 317/40/20 383/40/20 384/42/21 318/42/21 +f 285/41/21 351/41/21 350/39/20 284/39/20 +f 318/42/21 384/42/21 385/44/22 319/44/22 +f 286/43/22 352/43/22 351/41/21 285/41/21 +f 319/44/22 385/44/22 386/46/23 320/46/23 +f 287/45/23 353/45/23 352/43/22 286/43/22 +f 320/46/23 386/46/23 387/48/24 321/48/24 +f 288/47/24 354/47/24 353/45/23 287/45/23 +f 321/48/24 387/48/24 388/50/25 322/50/25 +f 289/49/25 355/49/25 354/47/24 288/47/24 +f 322/50/25 388/50/25 389/52/26 323/52/26 +f 290/51/26 356/51/26 355/49/25 289/49/25 +f 323/52/26 389/52/26 390/54/27 324/54/27 +f 291/53/27 357/53/27 356/51/26 290/51/26 +f 324/54/27 390/54/27 391/56/28 325/56/28 +f 292/55/28 358/55/28 357/53/27 291/53/27 +f 325/56/28 391/56/28 392/58/29 326/58/29 +f 293/57/29 359/57/29 358/55/28 292/55/28 +f 326/58/29 392/58/29 393/60/30 327/60/30 +f 294/59/30 360/59/30 359/57/29 293/57/29 +f 327/60/30 393/60/30 394/62/31 328/62/31 +f 295/61/31 361/61/31 360/59/30 294/59/30 +f 328/62/31 394/62/31 395/64/32 329/64/32 +f 296/63/32 362/63/32 361/61/31 295/61/31 +f 329/64/32 395/64/32 396/66/33 330/66/33 +f 330/66/33 396/66/33 363/65/33 297/65/33 +f 297/65/33 363/65/33 362/63/32 296/63/32 + +v 31.36711502075195 715.47924804687500 -40.16886520385742 +v 31.36711502075195 718.21276855468750 -40.03647232055664 +v 31.36711502075195 723.10095214843750 -39.37255859375000 +v 31.36711502075195 728.36651611328125 -38.10228729248047 +v 31.36711502075195 733.01501464843750 -36.43727874755859 +v 31.36711502075195 736.59509277343750 -34.72630691528320 +v 31.36711502075195 740.14074707031250 -32.55932235717773 +v 31.36711502075195 743.54870605468750 -29.88249015808105 +v 31.36711502075195 745.69317626953125 -27.78809356689453 +v 31.36711502075195 747.70001220703125 -25.42721176147461 +v 31.36711502075195 749.53845214843750 -22.78389358520508 +v 31.36711502075195 751.17803955078125 -19.84218406677246 +v 31.36711502075195 752.58819580078125 -16.58613014221191 +v 31.36711502075195 753.73815917968750 -12.99977874755859 +v 31.36711502075195 754.59753417968750 -9.06717681884766 +v 31.36711502075195 755.13555908203125 -4.77236986160278 +v 31.36711502075195 755.32165527343750 -0.09940527379513 +v 31.36711502075195 754.90979003906250 6.76958894729614 +v 31.36711502075195 754.20928955078125 10.88530254364014 +v 31.36711502075195 753.20367431640625 14.64853191375732 +v 31.36711502075195 751.92340087890625 18.07505607604980 +v 31.36711502075195 750.39910888671875 21.18065452575684 +v 31.36711502075195 748.66119384765625 23.98110389709473 +v 31.36711502075195 746.74023437500000 26.49218750000000 +v 31.36711502075195 744.66668701171875 28.72967910766602 +v 31.36711502075195 741.33709716796875 31.60745620727539 +v 31.36711502075195 737.83587646484375 33.95841217041016 +v 31.36711502075195 734.26599121093750 35.83580398559570 +v 31.36711502075195 729.57733154296875 37.69438171386719 +v 31.36711502075195 725.19378662109375 38.93196868896484 +v 31.36711502075195 720.51531982421875 39.79799652099609 +v 31.36711502075195 717.17175292968750 40.13751220703125 +v 31.36711502075195 715.59277343750000 40.19707870483398 +v 81.36711883544922 715.47924804687500 -40.16886520385742 +v 81.36711883544922 718.21276855468750 -40.03647232055664 +v 81.36711883544922 723.10095214843750 -39.37255859375000 +v 81.36711883544922 728.36651611328125 -38.10228729248047 +v 81.36711883544922 733.01501464843750 -36.43727874755859 +v 81.36711883544922 736.59509277343750 -34.72630691528320 +v 81.36711883544922 740.14074707031250 -32.55932235717773 +v 81.36711883544922 743.54870605468750 -29.88249015808105 +v 81.36711883544922 745.69317626953125 -27.78809356689453 +v 81.36711883544922 747.70001220703125 -25.42721176147461 +v 81.36711883544922 749.53845214843750 -22.78389358520508 +v 81.36711883544922 751.17803955078125 -19.84218406677246 +v 81.36711883544922 752.58819580078125 -16.58613014221191 +v 81.36711883544922 753.73815917968750 -12.99977874755859 +v 81.36711883544922 754.59753417968750 -9.06717681884766 +v 81.36711883544922 755.13555908203125 -4.77236986160278 +v 81.36711883544922 755.32165527343750 -0.09940527379513 +v 81.36711883544922 754.90979003906250 6.76958894729614 +v 81.36711883544922 754.20928955078125 10.88530254364014 +v 81.36711883544922 753.20367431640625 14.64853191375732 +v 81.36711883544922 751.92340087890625 18.07505607604980 +v 81.36711883544922 750.39910888671875 21.18065452575684 +v 81.36711883544922 748.66119384765625 23.98110389709473 +v 81.36711883544922 746.74023437500000 26.49218750000000 +v 81.36711883544922 744.66668701171875 28.72967910766602 +v 81.36711883544922 741.33709716796875 31.60745620727539 +v 81.36711883544922 737.83587646484375 33.95841217041016 +v 81.36711883544922 734.26599121093750 35.83580398559570 +v 81.36711883544922 729.57733154296875 37.69438171386719 +v 81.36711883544922 725.19378662109375 38.93196868896484 +v 81.36711883544922 720.51531982421875 39.79799652099609 +v 81.36711883544922 717.17175292968750 40.13751220703125 +v 81.36711883544922 715.59277343750000 40.19707870483398 +# 66 vertices + +g 挤压_1 +v 37.80797195434570 482.95492553710938 0.00000000000000 +v 37.80797195434570 554.53356933593750 0.00000000000000 +v 47.07093048095703 484.17440795898438 0.00000000000000 +v 46.75530242919922 484.17440795898438 2.39742946624756 +v 45.82992935180664 484.17440795898438 4.63147830963135 +v 44.35787200927734 484.17440795898438 6.54989910125732 +v 42.43945312500000 484.17440795898438 8.02195549011230 +v 40.20540237426758 484.17440795898438 8.94732856750488 +v 37.80797195434570 484.17440795898438 9.26295661926270 +v 35.41054534912109 484.17440795898438 8.94732856750488 +v 33.17649459838867 484.17440795898438 8.02195549011230 +v 31.25807380676270 484.17440795898438 6.54989910125732 +v 29.78601837158203 484.17440795898438 4.63147830963135 +v 28.86064529418945 484.17440795898438 2.39742946624756 +v 28.54501724243164 484.17440795898438 0.00000000000000 +v 28.86064529418945 484.17440795898438 -2.39742946624756 +v 29.78601837158203 484.17440795898438 -4.63147830963135 +v 31.25807380676270 484.17440795898438 -6.54989910125732 +v 33.17649459838867 484.17440795898438 -8.02195549011230 +v 35.41054534912109 484.17440795898438 -8.94732856750488 +v 37.80797195434570 484.17440795898438 -9.26295661926270 +v 40.20540237426758 484.17440795898438 -8.94732856750488 +v 42.43945312500000 484.17440795898438 -8.02195549011230 +v 44.35787200927734 484.17440795898438 -6.54989910125732 +v 45.82992935180664 484.17440795898438 -4.63147830963135 +v 46.75530242919922 484.17440795898438 -2.39742946624756 +v 55.70263290405273 487.74978637695312 0.00000000000000 +v 55.09288406372070 487.74978637695312 4.63147830963135 +v 53.30520248413086 487.74978637695312 8.94732856750488 +v 50.46140670776367 487.74978637695312 12.65343379974365 +v 46.75530242919922 487.74978637695312 15.49722766876221 +v 42.43945312500000 487.74978637695312 17.28491210937500 +v 37.80797195434570 487.74978637695312 17.89465713500977 +v 33.17649459838867 487.74978637695312 17.28491210937500 +v 28.86064529418945 487.74978637695312 15.49722766876221 +v 25.15453910827637 487.74978637695312 12.65343379974365 +v 22.31074523925781 487.74978637695312 8.94732856750488 +v 20.52306175231934 487.74978637695312 4.63147830963135 +v 19.91331672668457 487.74978637695312 0.00000000000000 +v 20.52306175231934 487.74978637695312 -4.63147830963135 +v 22.31074523925781 487.74978637695312 -8.94732856750488 +v 25.15453910827637 487.74978637695312 -12.65343379974365 +v 28.86064529418945 487.74978637695312 -15.49722766876221 +v 33.17649459838867 487.74978637695312 -17.28491210937500 +v 37.80797195434570 487.74978637695312 -17.89465713500977 +v 42.43945312500000 487.74978637695312 -17.28491210937500 +v 46.75530242919922 487.74978637695312 -15.49722766876221 +v 50.46140670776367 487.74978637695312 -12.65343379974365 +v 53.30520248413086 487.74978637695312 -8.94732856750488 +v 55.09288406372070 487.74978637695312 -4.63147830963135 +v 63.11484146118164 493.43737792968750 0.00000000000000 +v 62.25252914428711 493.43737792968750 6.54989910125732 +v 59.72436523437500 493.43737792968750 12.65343379974365 +v 55.70263290405273 493.43737792968750 17.89465713500977 +v 50.46140670776367 493.43737792968750 21.91638946533203 +v 44.35787200927734 493.43737792968750 24.44455718994141 +v 37.80797195434570 493.43737792968750 25.30686759948730 +v 31.25807380676270 493.43737792968750 24.44455718994141 +v 25.15453910827637 493.43737792968750 21.91638946533203 +v 19.91331672668457 493.43737792968750 17.89465713500977 +v 15.89158344268799 493.43737792968750 12.65343379974365 +v 13.36341667175293 493.43737792968750 6.54989910125732 +v 12.50110626220703 493.43737792968750 0.00000000000000 +v 13.36341667175293 493.43737792968750 -6.54989910125732 +v 15.89158344268799 493.43737792968750 -12.65343379974365 +v 19.91331672668457 493.43737792968750 -17.89465713500977 +v 25.15453910827637 493.43737792968750 -21.91638946533203 +v 31.25807380676270 493.43737792968750 -24.44455718994141 +v 37.80797195434570 493.43737792968750 -25.30686759948730 +v 44.35787200927734 493.43737792968750 -24.44455718994141 +v 50.46140670776367 493.43737792968750 -21.91638946533203 +v 55.70263290405273 493.43737792968750 -17.89465713500977 +v 59.72436523437500 493.43737792968750 -12.65343379974365 +v 62.25252914428711 493.43737792968750 -6.54989910125732 +v 68.80242919921875 500.84957885742188 0.00000000000000 +v 67.74632263183594 500.84957885742188 8.02195549011230 +v 64.64996337890625 500.84957885742188 15.49722766876221 +v 59.72436523437500 500.84957885742188 21.91638946533203 +v 53.30520248413086 500.84957885742188 26.84198570251465 +v 45.82992935180664 500.84957885742188 29.93834495544434 +v 37.80797195434570 500.84957885742188 30.99445533752441 +v 29.78601837158203 500.84957885742188 29.93834495544434 +v 22.31074523925781 500.84957885742188 26.84198570251465 +v 15.89158344268799 500.84957885742188 21.91638946533203 +v 10.96598720550537 500.84957885742188 15.49722766876221 +v 7.86962795257568 500.84957885742188 8.02195549011230 +v 6.81351709365845 500.84957885742188 0.00000000000000 +v 7.86962795257568 500.84957885742188 -8.02195549011230 +v 10.96598720550537 500.84957885742188 -15.49722766876221 +v 15.89158344268799 500.84957885742188 -21.91638946533203 +v 22.31074523925781 500.84957885742188 -26.84198570251465 +v 29.78601837158203 500.84957885742188 -29.93834495544434 +v 37.80797195434570 500.84957885742188 -30.99445533752441 +v 45.82992935180664 500.84957885742188 -29.93834495544434 +v 53.30520248413086 500.84957885742188 -26.84198570251465 +v 59.72436523437500 500.84957885742188 -21.91638946533203 +v 64.64996337890625 500.84957885742188 -15.49722766876221 +v 67.74632263183594 500.84957885742188 -8.02195549011230 +v 72.37779998779297 509.48129272460938 0.00000000000000 +v 71.19985961914062 509.48129272460938 8.94732856750488 +v 67.74632263183594 509.48129272460938 17.28491210937500 +v 62.25252914428711 509.48129272460938 24.44455718994141 +v 55.09288406372070 509.48129272460938 29.93834495544434 +v 46.75530242919922 509.48129272460938 33.39188385009766 +v 37.80797195434570 509.48129272460938 34.56982421875000 +v 28.86064529418945 509.48129272460938 33.39188385009766 +v 20.52306175231934 509.48129272460938 29.93834495544434 +v 13.36341667175293 509.48129272460938 24.44455718994141 +v 7.86962795257568 509.48129272460938 17.28491210937500 +v 4.41608762741089 509.48129272460938 8.94732856750488 +v 3.23814964294434 509.48129272460938 0.00000000000000 +v 4.41608762741089 509.48129272460938 -8.94732856750488 +v 7.86962795257568 509.48129272460938 -17.28491210937500 +v 13.36341667175293 509.48129272460938 -24.44455718994141 +v 20.52306175231934 509.48129272460938 -29.93834495544434 +v 28.86064529418945 509.48129272460938 -33.39188385009766 +v 37.80797195434570 509.48129272460938 -34.56982421875000 +v 46.75530242919922 509.48129272460938 -33.39188385009766 +v 55.09288406372070 509.48129272460938 -29.93834495544434 +v 62.25252914428711 509.48129272460938 -24.44455718994141 +v 67.74632263183594 509.48129272460938 -17.28491210937500 +v 71.19985961914062 509.48129272460938 -8.94732856750488 +v 73.59729003906250 518.74426269531250 0.00000000000000 +v 72.37779998779297 518.74426269531250 9.26295661926270 +v 68.80242919921875 518.74426269531250 17.89465713500977 +v 63.11484146118164 518.74426269531250 25.30686759948730 +v 55.70263290405273 518.74426269531250 30.99445533752441 +v 47.07093048095703 518.74426269531250 34.56982421875000 +v 37.80797195434570 518.74426269531250 35.78931427001953 +v 28.54501724243164 518.74426269531250 34.56982421875000 +v 19.91331672668457 518.74426269531250 30.99445533752441 +v 12.50110626220703 518.74426269531250 25.30686759948730 +v 6.81351709365845 518.74426269531250 17.89465713500977 +v 3.23814964294434 518.74426269531250 9.26295661926270 +v 2.01865816116333 518.74426269531250 0.00000000000000 +v 3.23814964294434 518.74426269531250 -9.26295661926270 +v 6.81351709365845 518.74426269531250 -17.89465713500977 +v 12.50110626220703 518.74426269531250 -25.30686759948730 +v 19.91331672668457 518.74426269531250 -30.99445533752441 +v 28.54501724243164 518.74426269531250 -34.56982421875000 +v 37.80797195434570 518.74426269531250 -35.78931427001953 +v 47.07093048095703 518.74426269531250 -34.56982421875000 +v 55.70263290405273 518.74426269531250 -30.99445533752441 +v 63.11484146118164 518.74426269531250 -25.30686759948730 +v 68.80242919921875 518.74426269531250 -17.89465713500977 +v 72.37779998779297 518.74426269531250 -9.26295661926270 +v 72.37779998779297 528.00720214843750 0.00000000000000 +v 71.19985961914062 528.00720214843750 8.94732856750488 +v 67.74632263183594 528.00720214843750 17.28491210937500 +v 62.25252914428711 528.00720214843750 24.44455718994141 +v 55.09288406372070 528.00720214843750 29.93834495544434 +v 46.75530242919922 528.00720214843750 33.39188385009766 +v 37.80797195434570 528.00720214843750 34.56982421875000 +v 28.86064529418945 528.00720214843750 33.39188385009766 +v 20.52306175231934 528.00720214843750 29.93834495544434 +v 13.36341667175293 528.00720214843750 24.44455718994141 +v 7.86962795257568 528.00720214843750 17.28491210937500 +v 4.41608762741089 528.00720214843750 8.94732856750488 +v 3.23814964294434 528.00720214843750 0.00000000000000 +v 4.41608762741089 528.00720214843750 -8.94732856750488 +v 7.86962795257568 528.00720214843750 -17.28491210937500 +v 13.36341667175293 528.00720214843750 -24.44455718994141 +v 20.52306175231934 528.00720214843750 -29.93834495544434 +v 28.86064529418945 528.00720214843750 -33.39188385009766 +v 37.80797195434570 528.00720214843750 -34.56982421875000 +v 46.75530242919922 528.00720214843750 -33.39188385009766 +v 55.09288406372070 528.00720214843750 -29.93834495544434 +v 62.25252914428711 528.00720214843750 -24.44455718994141 +v 67.74632263183594 528.00720214843750 -17.28491210937500 +v 71.19985961914062 528.00720214843750 -8.94732856750488 +v 68.80242919921875 536.63891601562500 0.00000000000000 +v 67.74632263183594 536.63891601562500 8.02195549011230 +v 64.64996337890625 536.63891601562500 15.49722766876221 +v 59.72436523437500 536.63891601562500 21.91638946533203 +v 53.30520248413086 536.63891601562500 26.84198570251465 +v 45.82992935180664 536.63891601562500 29.93834495544434 +v 37.80797195434570 536.63891601562500 30.99445533752441 +v 29.78601837158203 536.63891601562500 29.93834495544434 +v 22.31074523925781 536.63891601562500 26.84198570251465 +v 15.89158344268799 536.63891601562500 21.91638946533203 +v 10.96598720550537 536.63891601562500 15.49722766876221 +v 7.86962795257568 536.63891601562500 8.02195549011230 +v 6.81351709365845 536.63891601562500 0.00000000000000 +v 7.86962795257568 536.63891601562500 -8.02195549011230 +v 10.96598720550537 536.63891601562500 -15.49722766876221 +v 15.89158344268799 536.63891601562500 -21.91638946533203 +v 22.31074523925781 536.63891601562500 -26.84198570251465 +v 29.78601837158203 536.63891601562500 -29.93834495544434 +v 37.80797195434570 536.63891601562500 -30.99445533752441 +v 45.82992935180664 536.63891601562500 -29.93834495544434 +v 53.30520248413086 536.63891601562500 -26.84198570251465 +v 59.72436523437500 536.63891601562500 -21.91638946533203 +v 64.64996337890625 536.63891601562500 -15.49722766876221 +v 67.74632263183594 536.63891601562500 -8.02195549011230 +v 63.11484146118164 544.05108642578125 0.00000000000000 +v 62.25252914428711 544.05108642578125 6.54989910125732 +v 59.72436523437500 544.05108642578125 12.65343379974365 +v 55.70263290405273 544.05108642578125 17.89465713500977 +v 50.46140670776367 544.05108642578125 21.91638946533203 +v 44.35787200927734 544.05108642578125 24.44455718994141 +v 37.80797195434570 544.05108642578125 25.30686759948730 +v 31.25807380676270 544.05108642578125 24.44455718994141 +v 25.15453910827637 544.05108642578125 21.91638946533203 +v 19.91331672668457 544.05108642578125 17.89465713500977 +v 15.89158344268799 544.05108642578125 12.65343379974365 +v 13.36341667175293 544.05108642578125 6.54989910125732 +v 12.50110626220703 544.05108642578125 0.00000000000000 +v 13.36341667175293 544.05108642578125 -6.54989910125732 +v 15.89158344268799 544.05108642578125 -12.65343379974365 +v 19.91331672668457 544.05108642578125 -17.89465713500977 +v 25.15453910827637 544.05108642578125 -21.91638946533203 +v 31.25807380676270 544.05108642578125 -24.44455718994141 +v 37.80797195434570 544.05108642578125 -25.30686759948730 +v 44.35787200927734 544.05108642578125 -24.44455718994141 +v 50.46140670776367 544.05108642578125 -21.91638946533203 +v 55.70263290405273 544.05108642578125 -17.89465713500977 +v 59.72436523437500 544.05108642578125 -12.65343379974365 +v 62.25252914428711 544.05108642578125 -6.54989910125732 +v 55.70263290405273 549.73870849609375 0.00000000000000 +v 55.09288406372070 549.73870849609375 4.63147830963135 +v 53.30520248413086 549.73870849609375 8.94732856750488 +v 50.46140670776367 549.73870849609375 12.65343379974365 +v 46.75530242919922 549.73870849609375 15.49722766876221 +v 42.43945312500000 549.73870849609375 17.28491210937500 +v 37.80797195434570 549.73870849609375 17.89465713500977 +v 33.17649459838867 549.73870849609375 17.28491210937500 +v 28.86064529418945 549.73870849609375 15.49722766876221 +v 25.15453910827637 549.73870849609375 12.65343379974365 +v 22.31074523925781 549.73870849609375 8.94732856750488 +v 20.52306175231934 549.73870849609375 4.63147830963135 +v 19.91331672668457 549.73870849609375 0.00000000000000 +v 20.52306175231934 549.73870849609375 -4.63147830963135 +v 22.31074523925781 549.73870849609375 -8.94732856750488 +v 25.15453910827637 549.73870849609375 -12.65343379974365 +v 28.86064529418945 549.73870849609375 -15.49722766876221 +v 33.17649459838867 549.73870849609375 -17.28491210937500 +v 37.80797195434570 549.73870849609375 -17.89465713500977 +v 42.43945312500000 549.73870849609375 -17.28491210937500 +v 46.75530242919922 549.73870849609375 -15.49722766876221 +v 50.46140670776367 549.73870849609375 -12.65343379974365 +v 53.30520248413086 549.73870849609375 -8.94732856750488 +v 55.09288406372070 549.73870849609375 -4.63147830963135 +v 47.07093048095703 553.31408691406250 0.00000000000000 +v 46.75530242919922 553.31408691406250 2.39742946624756 +v 45.82992935180664 553.31408691406250 4.63147830963135 +v 44.35787200927734 553.31408691406250 6.54989910125732 +v 42.43945312500000 553.31408691406250 8.02195549011230 +v 40.20540237426758 553.31408691406250 8.94732856750488 +v 37.80797195434570 553.31408691406250 9.26295661926270 +v 35.41054534912109 553.31408691406250 8.94732856750488 +v 33.17649459838867 553.31408691406250 8.02195549011230 +v 31.25807380676270 553.31408691406250 6.54989910125732 +v 29.78601837158203 553.31408691406250 4.63147830963135 +v 28.86064529418945 553.31408691406250 2.39742946624756 +v 28.54501724243164 553.31408691406250 0.00000000000000 +v 28.86064529418945 553.31408691406250 -2.39742946624756 +v 29.78601837158203 553.31408691406250 -4.63147830963135 +v 31.25807380676270 553.31408691406250 -6.54989910125732 +v 33.17649459838867 553.31408691406250 -8.02195549011230 +v 35.41054534912109 553.31408691406250 -8.94732856750488 +v 37.80797195434570 553.31408691406250 -9.26295661926270 +v 40.20540237426758 553.31408691406250 -8.94732856750488 +v 42.43945312500000 553.31408691406250 -8.02195549011230 +v 44.35787200927734 553.31408691406250 -6.54989910125732 +v 45.82992935180664 553.31408691406250 -4.63147830963135 +v 46.75530242919922 553.31408691406250 -2.39742946624756 +# 266 vertices + +vn 0.25872254371643 -0.96595168113708 0.00000000000000 +vn 0.49989017844200 -0.86608880758286 0.00000000000000 +vn 0.48285821080208 -0.86608839035034 0.12937887012959 +vn 0.24990959465504 -0.96595042943954 0.06696964800358 +vn 0.43291905522346 -0.86608809232712 0.24994489550591 +vn 0.22406597435474 -0.96595245599747 0.12934575974941 +vn 0.35347855091095 -0.86608648300171 0.35347855091095 +vn 0.18294046819210 -0.96595317125320 0.18294046819210 +vn 0.24994489550591 -0.86608809232712 0.43291905522346 +vn 0.12934575974941 -0.96595245599747 0.22406597435474 +vn 0.12937887012959 -0.86608839035034 0.48285821080208 +vn 0.06696964800358 -0.96595042943954 0.24990959465504 +vn 0.00000000000000 -0.86608880758286 0.49989017844200 +vn 0.00000000000000 -0.96595168113708 0.25872254371643 +vn -0.12937887012959 -0.86608839035034 0.48285821080208 +vn -0.06696964800358 -0.96595042943954 0.24990959465504 +vn -0.24994489550591 -0.86608809232712 0.43291905522346 +vn -0.12934575974941 -0.96595245599747 0.22406597435474 +vn -0.35347855091095 -0.86608648300171 0.35347855091095 +vn -0.18294046819210 -0.96595317125320 0.18294046819210 +vn -0.43291905522346 -0.86608809232712 0.24994489550591 +vn -0.22406597435474 -0.96595245599747 0.12934575974941 +vn -0.48285821080208 -0.86608839035034 0.12937887012959 +vn -0.24990959465504 -0.96595042943954 0.06696964800358 +vn -0.49989017844200 -0.86608880758286 0.00000000000000 +vn -0.25872254371643 -0.96595168113708 0.00000000000000 +vn -0.48285821080208 -0.86608839035034 -0.12937887012959 +vn -0.24990959465504 -0.96595042943954 -0.06696964800358 +vn -0.43291905522346 -0.86608809232712 -0.24994489550591 +vn -0.22406597435474 -0.96595245599747 -0.12934575974941 +vn -0.35347855091095 -0.86608648300171 -0.35347855091095 +vn -0.18294046819210 -0.96595317125320 -0.18294046819210 +vn -0.24994489550591 -0.86608809232712 -0.43291905522346 +vn -0.12934575974941 -0.96595245599747 -0.22406597435474 +vn -0.12937887012959 -0.86608839035034 -0.48285821080208 +vn -0.06696964800358 -0.96595042943954 -0.24990959465504 +vn 0.00000000000000 -0.86608880758286 -0.49989017844200 +vn 0.00000000000000 -0.96595168113708 -0.25872254371643 +vn 0.12937887012959 -0.86608839035034 -0.48285821080208 +vn 0.06696964800358 -0.96595042943954 -0.24990959465504 +vn 0.24994489550591 -0.86608809232712 -0.43291905522346 +vn 0.12934575974941 -0.96595245599747 -0.22406597435474 +vn 0.35347855091095 -0.86608648300171 -0.35347855091095 +vn 0.18294046819210 -0.96595317125320 -0.18294046819210 +vn 0.43291905522346 -0.86608809232712 -0.24994489550591 +vn 0.22406597435474 -0.96595245599747 -0.12934575974941 +vn 0.48285821080208 -0.86608839035034 -0.12937887012959 +vn 0.24990959465504 -0.96595042943954 -0.06696964800358 +vn 0.70701301097870 -0.70720052719116 0.00000000000000 +vn 0.68292242288589 -0.70720422267914 0.18297308683395 +vn 0.61229205131531 -0.70719999074936 0.35350623726845 +vn 0.49992457032204 -0.70721340179443 0.49992457032204 +vn 0.35350623726845 -0.70719999074936 0.61229205131531 +vn 0.18297308683395 -0.70720422267914 0.68292242288589 +vn 0.00000000000000 -0.70720052719116 0.70701301097870 +vn -0.18297308683395 -0.70720422267914 0.68292242288589 +vn -0.35350623726845 -0.70719999074936 0.61229205131531 +vn -0.49992457032204 -0.70721340179443 0.49992457032204 +vn -0.61229205131531 -0.70719999074936 0.35350623726845 +vn -0.68292242288589 -0.70720422267914 0.18297308683395 +vn -0.70701301097870 -0.70720052719116 0.00000000000000 +vn -0.68292242288589 -0.70720422267914 -0.18297308683395 +vn -0.61229205131531 -0.70719999074936 -0.35350623726845 +vn -0.49992457032204 -0.70721340179443 -0.49992457032204 +vn -0.35350623726845 -0.70719999074936 -0.61229205131531 +vn -0.18297308683395 -0.70720422267914 -0.68292242288589 +vn 0.00000000000000 -0.70720052719116 -0.70701301097870 +vn 0.18297308683395 -0.70720422267914 -0.68292242288589 +vn 0.35350623726845 -0.70719999074936 -0.61229205131531 +vn 0.49992457032204 -0.70721340179443 -0.49992457032204 +vn 0.61229205131531 -0.70719999074936 -0.35350623726845 +vn 0.68292242288589 -0.70720422267914 -0.18297308683395 +vn 0.86596280336380 -0.50010836124420 0.00000000000000 +vn 0.83645695447922 -0.50010538101196 0.22413022816181 +vn 0.74995177984238 -0.50010323524475 0.43297699093819 +vn 0.61232876777649 -0.50010699033737 0.61232876777649 +vn 0.43297699093819 -0.50010323524475 0.74995177984238 +vn 0.22413022816181 -0.50010538101196 0.83645695447922 +vn 0.00000000000000 -0.50010836124420 0.86596280336380 +vn -0.22413022816181 -0.50010538101196 0.83645695447922 +vn -0.43297699093819 -0.50010323524475 0.74995177984238 +vn -0.61232876777649 -0.50010699033737 0.61232876777649 +vn -0.74995177984238 -0.50010323524475 0.43297699093819 +vn -0.83645695447922 -0.50010538101196 0.22413022816181 +vn -0.86596280336380 -0.50010836124420 0.00000000000000 +vn -0.83645695447922 -0.50010538101196 -0.22413022816181 +vn -0.74995177984238 -0.50010323524475 -0.43297699093819 +vn -0.61232876777649 -0.50010699033737 -0.61232876777649 +vn -0.43297699093819 -0.50010323524475 -0.74995177984238 +vn -0.22413022816181 -0.50010538101196 -0.83645695447922 +vn 0.00000000000000 -0.50010836124420 -0.86596280336380 +vn 0.22413022816181 -0.50010538101196 -0.83645695447922 +vn 0.43297699093819 -0.50010323524475 -0.74995177984238 +vn 0.61232876777649 -0.50010699033737 -0.61232876777649 +vn 0.74995177984238 -0.50010323524475 -0.43297699093819 +vn 0.83645695447922 -0.50010538101196 -0.22413022816181 +vn 0.96591055393219 -0.25887614488602 0.00000000000000 +vn 0.93300485610962 -0.25887635350227 0.24997004866600 +vn 0.83650958538055 -0.25887796282768 0.48294299840927 +vn 0.68299984931946 -0.25888678431511 0.68299984931946 +vn 0.48294299840927 -0.25887796282768 0.83650958538055 +vn 0.24997004866600 -0.25887635350227 0.93300485610962 +vn 0.00000000000000 -0.25887614488602 0.96591055393219 +vn -0.24997004866600 -0.25887635350227 0.93300485610962 +vn -0.48294299840927 -0.25887796282768 0.83650958538055 +vn -0.68299984931946 -0.25888678431511 0.68299984931946 +vn -0.83650958538055 -0.25887796282768 0.48294299840927 +vn -0.93300485610962 -0.25887635350227 0.24997004866600 +vn -0.96591055393219 -0.25887614488602 0.00000000000000 +vn -0.93300485610962 -0.25887635350227 -0.24997004866600 +vn -0.83650958538055 -0.25887796282768 -0.48294299840927 +vn -0.68299984931946 -0.25888678431511 -0.68299984931946 +vn -0.48294299840927 -0.25887796282768 -0.83650958538055 +vn -0.24997004866600 -0.25887635350227 -0.93300485610962 +vn 0.00000000000000 -0.25887614488602 -0.96591055393219 +vn 0.24997004866600 -0.25887635350227 -0.93300485610962 +vn 0.48294299840927 -0.25887796282768 -0.83650958538055 +vn 0.68299984931946 -0.25888678431511 -0.68299984931946 +vn 0.83650958538055 -0.25887796282768 -0.48294299840927 +vn 0.93300485610962 -0.25887635350227 -0.24997004866600 +vn 1.00000000000000 0.00000000000000 0.00000000000000 +vn 0.96592617034912 0.00000000000000 0.25881782174110 +vn 0.86604040861130 0.00000000000000 0.49997401237488 +vn 0.70710676908493 0.00000000000000 0.70710676908493 +vn 0.49997401237488 0.00000000000000 0.86604040861130 +vn 0.25881782174110 0.00000000000000 0.96592617034912 +vn 0.00000000000000 0.00000000000000 1.00000000000000 +vn -0.25881782174110 0.00000000000000 0.96592617034912 +vn -0.49997401237488 0.00000000000000 0.86604040861130 +vn -0.70710676908493 0.00000000000000 0.70710676908493 +vn -0.86604040861130 0.00000000000000 0.49997401237488 +vn -0.96592617034912 0.00000000000000 0.25881782174110 +vn -1.00000000000000 0.00000000000000 0.00000000000000 +vn -0.96592617034912 0.00000000000000 -0.25881782174110 +vn -0.86604040861130 0.00000000000000 -0.49997401237488 +vn -0.70710676908493 0.00000000000000 -0.70710676908493 +vn -0.49997401237488 0.00000000000000 -0.86604040861130 +vn -0.25881782174110 0.00000000000000 -0.96592617034912 +vn 0.00000000000000 0.00000000000000 -1.00000000000000 +vn 0.25881782174110 0.00000000000000 -0.96592617034912 +vn 0.49997401237488 0.00000000000000 -0.86604040861130 +vn 0.70710676908493 0.00000000000000 -0.70710676908493 +vn 0.86604040861130 0.00000000000000 -0.49997401237488 +vn 0.96592617034912 0.00000000000000 -0.25881782174110 +vn 0.96591055393219 0.25887614488602 0.00000000000000 +vn 0.93300485610962 0.25887635350227 0.24997004866600 +vn 0.83650958538055 0.25887796282768 0.48294299840927 +vn 0.68299984931946 0.25888678431511 0.68299984931946 +vn 0.48294299840927 0.25887796282768 0.83650958538055 +vn 0.24997004866600 0.25887635350227 0.93300485610962 +vn 0.00000000000000 0.25887614488602 0.96591055393219 +vn -0.24997004866600 0.25887635350227 0.93300485610962 +vn -0.48294299840927 0.25887796282768 0.83650958538055 +vn -0.68299984931946 0.25888678431511 0.68299984931946 +vn -0.83650958538055 0.25887796282768 0.48294299840927 +vn -0.93300485610962 0.25887635350227 0.24997004866600 +vn -0.96591055393219 0.25887614488602 0.00000000000000 +vn -0.93300485610962 0.25887635350227 -0.24997004866600 +vn -0.83650958538055 0.25887796282768 -0.48294299840927 +vn -0.68299984931946 0.25888678431511 -0.68299984931946 +vn -0.48294299840927 0.25887796282768 -0.83650958538055 +vn -0.24997004866600 0.25887635350227 -0.93300485610962 +vn 0.00000000000000 0.25887614488602 -0.96591055393219 +vn 0.24997004866600 0.25887635350227 -0.93300485610962 +vn 0.48294299840927 0.25887796282768 -0.83650958538055 +vn 0.68299984931946 0.25888678431511 -0.68299984931946 +vn 0.83650958538055 0.25887796282768 -0.48294299840927 +vn 0.93300485610962 0.25887635350227 -0.24997004866600 +vn 0.86596280336380 0.50010836124420 0.00000000000000 +vn 0.83645695447922 0.50010538101196 0.22413022816181 +vn 0.74995177984238 0.50010323524475 0.43297699093819 +vn 0.61232876777649 0.50010699033737 0.61232876777649 +vn 0.43297699093819 0.50010323524475 0.74995177984238 +vn 0.22413022816181 0.50010538101196 0.83645695447922 +vn 0.00000000000000 0.50010836124420 0.86596280336380 +vn -0.22413022816181 0.50010538101196 0.83645695447922 +vn -0.43297699093819 0.50010323524475 0.74995177984238 +vn -0.61232876777649 0.50010699033737 0.61232876777649 +vn -0.74995177984238 0.50010323524475 0.43297699093819 +vn -0.83645695447922 0.50010538101196 0.22413022816181 +vn -0.86596280336380 0.50010836124420 0.00000000000000 +vn -0.83645695447922 0.50010538101196 -0.22413022816181 +vn -0.74995177984238 0.50010323524475 -0.43297699093819 +vn -0.61232876777649 0.50010699033737 -0.61232876777649 +vn -0.43297699093819 0.50010323524475 -0.74995177984238 +vn -0.22413022816181 0.50010538101196 -0.83645695447922 +vn 0.00000000000000 0.50010836124420 -0.86596280336380 +vn 0.22413022816181 0.50010538101196 -0.83645695447922 +vn 0.43297699093819 0.50010323524475 -0.74995177984238 +vn 0.61232876777649 0.50010699033737 -0.61232876777649 +vn 0.74995177984238 0.50010323524475 -0.43297699093819 +vn 0.83645695447922 0.50010538101196 -0.22413022816181 +vn 0.70701301097870 0.70720052719116 0.00000000000000 +vn 0.68292242288589 0.70720422267914 0.18297308683395 +vn 0.61229205131531 0.70719999074936 0.35350623726845 +vn 0.49992457032204 0.70721340179443 0.49992457032204 +vn 0.35350623726845 0.70719999074936 0.61229205131531 +vn 0.18297308683395 0.70720422267914 0.68292242288589 +vn 0.00000000000000 0.70720052719116 0.70701301097870 +vn -0.18297308683395 0.70720422267914 0.68292242288589 +vn -0.35350623726845 0.70719999074936 0.61229205131531 +vn -0.49992457032204 0.70721340179443 0.49992457032204 +vn -0.61229205131531 0.70719999074936 0.35350623726845 +vn -0.68292242288589 0.70720422267914 0.18297308683395 +vn -0.70701301097870 0.70720052719116 0.00000000000000 +vn -0.68292242288589 0.70720422267914 -0.18297308683395 +vn -0.61229205131531 0.70719999074936 -0.35350623726845 +vn -0.49992457032204 0.70721340179443 -0.49992457032204 +vn -0.35350623726845 0.70719999074936 -0.61229205131531 +vn -0.18297308683395 0.70720422267914 -0.68292242288589 +vn 0.00000000000000 0.70720052719116 -0.70701301097870 +vn 0.18297308683395 0.70720422267914 -0.68292242288589 +vn 0.35350623726845 0.70719999074936 -0.61229205131531 +vn 0.49992457032204 0.70721340179443 -0.49992457032204 +vn 0.61229205131531 0.70719999074936 -0.35350623726845 +vn 0.68292242288589 0.70720422267914 -0.18297308683395 +vn 0.49989017844200 0.86608880758286 0.00000000000000 +vn 0.48285821080208 0.86608839035034 0.12937887012959 +vn 0.43291905522346 0.86608809232712 0.24994489550591 +vn 0.35347855091095 0.86608648300171 0.35347855091095 +vn 0.24994489550591 0.86608809232712 0.43291905522346 +vn 0.12937887012959 0.86608839035034 0.48285821080208 +vn 0.00000000000000 0.86608880758286 0.49989017844200 +vn -0.12937887012959 0.86608839035034 0.48285821080208 +vn -0.24994489550591 0.86608809232712 0.43291905522346 +vn -0.35347855091095 0.86608648300171 0.35347855091095 +vn -0.43291905522346 0.86608809232712 0.24994489550591 +vn -0.48285821080208 0.86608839035034 0.12937887012959 +vn -0.49989017844200 0.86608880758286 0.00000000000000 +vn -0.48285821080208 0.86608839035034 -0.12937887012959 +vn -0.43291905522346 0.86608809232712 -0.24994489550591 +vn -0.35347855091095 0.86608648300171 -0.35347855091095 +vn -0.24994489550591 0.86608809232712 -0.43291905522346 +vn -0.12937887012959 0.86608839035034 -0.48285821080208 +vn 0.00000000000000 0.86608880758286 -0.49989017844200 +vn 0.12937887012959 0.86608839035034 -0.48285821080208 +vn 0.24994489550591 0.86608809232712 -0.43291905522346 +vn 0.35347855091095 0.86608648300171 -0.35347855091095 +vn 0.43291905522346 0.86608809232712 -0.24994489550591 +vn 0.48285821080208 0.86608839035034 -0.12937887012959 +vn 0.25872254371643 0.96595168113708 0.00000000000000 +vn 0.24990959465504 0.96595042943954 0.06696964800358 +vn 0.22406597435474 0.96595245599747 0.12934575974941 +vn 0.18294046819210 0.96595317125320 0.18294046819210 +vn 0.12934575974941 0.96595245599747 0.22406597435474 +vn 0.06696964800358 0.96595042943954 0.24990959465504 +vn 0.00000000000000 0.96595168113708 0.25872254371643 +vn -0.06696964800358 0.96595042943954 0.24990959465504 +vn -0.12934575974941 0.96595245599747 0.22406597435474 +vn -0.18294046819210 0.96595317125320 0.18294046819210 +vn -0.22406597435474 0.96595245599747 0.12934575974941 +vn -0.24990959465504 0.96595042943954 0.06696964800358 +vn -0.25872254371643 0.96595168113708 0.00000000000000 +vn -0.24990959465504 0.96595042943954 -0.06696964800358 +vn -0.22406597435474 0.96595245599747 -0.12934575974941 +vn -0.18294046819210 0.96595317125320 -0.18294046819210 +vn -0.12934575974941 0.96595245599747 -0.22406597435474 +vn -0.06696964800358 0.96595042943954 -0.24990959465504 +vn 0.00000000000000 0.96595168113708 -0.25872254371643 +vn 0.06696964800358 0.96595042943954 -0.24990959465504 +vn 0.12934575974941 0.96595245599747 -0.22406597435474 +vn 0.18294046819210 0.96595317125320 -0.18294046819210 +vn 0.22406597435474 0.96595245599747 -0.12934575974941 +vn 0.24990959465504 0.96595042943954 -0.06696964800358 +vn 0.00000000000000 -1.00000000000000 0.00000000000000 +vn 0.00000000000000 1.00000000000000 0.00000000000000 +# 266 normals + +vt 0.00000000000000 0.08333337306976 0.00000000000000 +vt 0.00000000000000 0.16666674613953 0.00000000000000 +vt 0.04166666790843 0.16666674613953 0.00000000000000 +vt 0.04166666790843 0.08333337306976 0.00000000000000 +vt 0.08333333581686 0.16666674613953 0.00000000000000 +vt 0.08333333581686 0.08333337306976 0.00000000000000 +vt 0.12500000000000 0.16666674613953 0.00000000000000 +vt 0.12500000000000 0.08333337306976 0.00000000000000 +vt 0.16666667163372 0.16666674613953 0.00000000000000 +vt 0.16666667163372 0.08333337306976 0.00000000000000 +vt 0.20833332836628 0.16666674613953 0.00000000000000 +vt 0.20833332836628 0.08333337306976 0.00000000000000 +vt 0.25000000000000 0.16666674613953 0.00000000000000 +vt 0.25000000000000 0.08333337306976 0.00000000000000 +vt 0.29166665673256 0.16666674613953 0.00000000000000 +vt 0.29166665673256 0.08333337306976 0.00000000000000 +vt 0.33333334326744 0.16666674613953 0.00000000000000 +vt 0.33333334326744 0.08333337306976 0.00000000000000 +vt 0.37500000000000 0.16666674613953 0.00000000000000 +vt 0.37500000000000 0.08333337306976 0.00000000000000 +vt 0.41666665673256 0.16666674613953 0.00000000000000 +vt 0.41666665673256 0.08333337306976 0.00000000000000 +vt 0.45833334326744 0.16666674613953 0.00000000000000 +vt 0.45833334326744 0.08333337306976 0.00000000000000 +vt 0.50000000000000 0.16666674613953 0.00000000000000 +vt 0.50000000000000 0.08333337306976 0.00000000000000 +vt 0.54166668653488 0.16666674613953 0.00000000000000 +vt 0.54166668653488 0.08333337306976 0.00000000000000 +vt 0.58333331346512 0.16666674613953 0.00000000000000 +vt 0.58333331346512 0.08333337306976 0.00000000000000 +vt 0.62500000000000 0.16666674613953 0.00000000000000 +vt 0.62500000000000 0.08333337306976 0.00000000000000 +vt 0.66666668653488 0.16666674613953 0.00000000000000 +vt 0.66666668653488 0.08333337306976 0.00000000000000 +vt 0.70833331346512 0.16666674613953 0.00000000000000 +vt 0.70833331346512 0.08333337306976 0.00000000000000 +vt 0.75000000000000 0.16666674613953 0.00000000000000 +vt 0.75000000000000 0.08333337306976 0.00000000000000 +vt 0.79166668653488 0.16666674613953 0.00000000000000 +vt 0.79166668653488 0.08333337306976 0.00000000000000 +vt 0.83333331346512 0.16666674613953 0.00000000000000 +vt 0.83333331346512 0.08333337306976 0.00000000000000 +vt 0.87500000000000 0.16666674613953 0.00000000000000 +vt 0.87500000000000 0.08333337306976 0.00000000000000 +vt 0.91666668653488 0.16666674613953 0.00000000000000 +vt 0.91666668653488 0.08333337306976 0.00000000000000 +vt 0.95833331346512 0.16666674613953 0.00000000000000 +vt 0.95833331346512 0.08333337306976 0.00000000000000 +vt 1.00000000000000 0.16666674613953 0.00000000000000 +vt 1.00000000000000 0.08333337306976 0.00000000000000 +vt 0.00000000000000 0.25000000000000 0.00000000000000 +vt 0.04166666790843 0.25000000000000 0.00000000000000 +vt 0.08333333581686 0.25000000000000 0.00000000000000 +vt 0.12500000000000 0.25000000000000 0.00000000000000 +vt 0.16666667163372 0.25000000000000 0.00000000000000 +vt 0.20833332836628 0.25000000000000 0.00000000000000 +vt 0.25000000000000 0.25000000000000 0.00000000000000 +vt 0.29166665673256 0.25000000000000 0.00000000000000 +vt 0.33333334326744 0.25000000000000 0.00000000000000 +vt 0.37500000000000 0.25000000000000 0.00000000000000 +vt 0.41666665673256 0.25000000000000 0.00000000000000 +vt 0.45833334326744 0.25000000000000 0.00000000000000 +vt 0.50000000000000 0.25000000000000 0.00000000000000 +vt 0.54166668653488 0.25000000000000 0.00000000000000 +vt 0.58333331346512 0.25000000000000 0.00000000000000 +vt 0.62500000000000 0.25000000000000 0.00000000000000 +vt 0.66666668653488 0.25000000000000 0.00000000000000 +vt 0.70833331346512 0.25000000000000 0.00000000000000 +vt 0.75000000000000 0.25000000000000 0.00000000000000 +vt 0.79166668653488 0.25000000000000 0.00000000000000 +vt 0.83333331346512 0.25000000000000 0.00000000000000 +vt 0.87500000000000 0.25000000000000 0.00000000000000 +vt 0.91666668653488 0.25000000000000 0.00000000000000 +vt 0.95833331346512 0.25000000000000 0.00000000000000 +vt 1.00000000000000 0.25000000000000 0.00000000000000 +vt 0.00000000000000 0.33333337306976 0.00000000000000 +vt 0.04166666790843 0.33333337306976 0.00000000000000 +vt 0.08333333581686 0.33333337306976 0.00000000000000 +vt 0.12500000000000 0.33333337306976 0.00000000000000 +vt 0.16666667163372 0.33333337306976 0.00000000000000 +vt 0.20833332836628 0.33333337306976 0.00000000000000 +vt 0.25000000000000 0.33333337306976 0.00000000000000 +vt 0.29166665673256 0.33333337306976 0.00000000000000 +vt 0.33333334326744 0.33333337306976 0.00000000000000 +vt 0.37500000000000 0.33333337306976 0.00000000000000 +vt 0.41666665673256 0.33333337306976 0.00000000000000 +vt 0.45833334326744 0.33333337306976 0.00000000000000 +vt 0.50000000000000 0.33333337306976 0.00000000000000 +vt 0.54166668653488 0.33333337306976 0.00000000000000 +vt 0.58333331346512 0.33333337306976 0.00000000000000 +vt 0.62500000000000 0.33333337306976 0.00000000000000 +vt 0.66666668653488 0.33333337306976 0.00000000000000 +vt 0.70833331346512 0.33333337306976 0.00000000000000 +vt 0.75000000000000 0.33333337306976 0.00000000000000 +vt 0.79166668653488 0.33333337306976 0.00000000000000 +vt 0.83333331346512 0.33333337306976 0.00000000000000 +vt 0.87500000000000 0.33333337306976 0.00000000000000 +vt 0.91666668653488 0.33333337306976 0.00000000000000 +vt 0.95833331346512 0.33333337306976 0.00000000000000 +vt 1.00000000000000 0.33333337306976 0.00000000000000 +vt 0.00000000000000 0.41666674613953 0.00000000000000 +vt 0.04166666790843 0.41666674613953 0.00000000000000 +vt 0.08333333581686 0.41666674613953 0.00000000000000 +vt 0.12500000000000 0.41666674613953 0.00000000000000 +vt 0.16666667163372 0.41666674613953 0.00000000000000 +vt 0.20833332836628 0.41666674613953 0.00000000000000 +vt 0.25000000000000 0.41666674613953 0.00000000000000 +vt 0.29166665673256 0.41666674613953 0.00000000000000 +vt 0.33333334326744 0.41666674613953 0.00000000000000 +vt 0.37500000000000 0.41666674613953 0.00000000000000 +vt 0.41666665673256 0.41666674613953 0.00000000000000 +vt 0.45833334326744 0.41666674613953 0.00000000000000 +vt 0.50000000000000 0.41666674613953 0.00000000000000 +vt 0.54166668653488 0.41666674613953 0.00000000000000 +vt 0.58333331346512 0.41666674613953 0.00000000000000 +vt 0.62500000000000 0.41666674613953 0.00000000000000 +vt 0.66666668653488 0.41666674613953 0.00000000000000 +vt 0.70833331346512 0.41666674613953 0.00000000000000 +vt 0.75000000000000 0.41666674613953 0.00000000000000 +vt 0.79166668653488 0.41666674613953 0.00000000000000 +vt 0.83333331346512 0.41666674613953 0.00000000000000 +vt 0.87500000000000 0.41666674613953 0.00000000000000 +vt 0.91666668653488 0.41666674613953 0.00000000000000 +vt 0.95833331346512 0.41666674613953 0.00000000000000 +vt 1.00000000000000 0.41666674613953 0.00000000000000 +vt 0.00000000000000 0.50000000000000 0.00000000000000 +vt 0.04166666790843 0.50000000000000 0.00000000000000 +vt 0.08333333581686 0.50000000000000 0.00000000000000 +vt 0.12500000000000 0.50000000000000 0.00000000000000 +vt 0.16666667163372 0.50000000000000 0.00000000000000 +vt 0.20833332836628 0.50000000000000 0.00000000000000 +vt 0.25000000000000 0.50000000000000 0.00000000000000 +vt 0.29166665673256 0.50000000000000 0.00000000000000 +vt 0.33333334326744 0.50000000000000 0.00000000000000 +vt 0.37500000000000 0.50000000000000 0.00000000000000 +vt 0.41666665673256 0.50000000000000 0.00000000000000 +vt 0.45833334326744 0.50000000000000 0.00000000000000 +vt 0.50000000000000 0.50000000000000 0.00000000000000 +vt 0.54166668653488 0.50000000000000 0.00000000000000 +vt 0.58333331346512 0.50000000000000 0.00000000000000 +vt 0.62500000000000 0.50000000000000 0.00000000000000 +vt 0.66666668653488 0.50000000000000 0.00000000000000 +vt 0.70833331346512 0.50000000000000 0.00000000000000 +vt 0.75000000000000 0.50000000000000 0.00000000000000 +vt 0.79166668653488 0.50000000000000 0.00000000000000 +vt 0.83333331346512 0.50000000000000 0.00000000000000 +vt 0.87500000000000 0.50000000000000 0.00000000000000 +vt 0.91666668653488 0.50000000000000 0.00000000000000 +vt 0.95833331346512 0.50000000000000 0.00000000000000 +vt 1.00000000000000 0.50000000000000 0.00000000000000 +vt 0.00000000000000 0.58333337306976 0.00000000000000 +vt 0.04166666790843 0.58333337306976 0.00000000000000 +vt 0.08333333581686 0.58333337306976 0.00000000000000 +vt 0.12500000000000 0.58333337306976 0.00000000000000 +vt 0.16666667163372 0.58333337306976 0.00000000000000 +vt 0.20833332836628 0.58333337306976 0.00000000000000 +vt 0.25000000000000 0.58333337306976 0.00000000000000 +vt 0.29166665673256 0.58333337306976 0.00000000000000 +vt 0.33333334326744 0.58333337306976 0.00000000000000 +vt 0.37500000000000 0.58333337306976 0.00000000000000 +vt 0.41666665673256 0.58333337306976 0.00000000000000 +vt 0.45833334326744 0.58333337306976 0.00000000000000 +vt 0.50000000000000 0.58333337306976 0.00000000000000 +vt 0.54166668653488 0.58333337306976 0.00000000000000 +vt 0.58333331346512 0.58333337306976 0.00000000000000 +vt 0.62500000000000 0.58333337306976 0.00000000000000 +vt 0.66666668653488 0.58333337306976 0.00000000000000 +vt 0.70833331346512 0.58333337306976 0.00000000000000 +vt 0.75000000000000 0.58333337306976 0.00000000000000 +vt 0.79166668653488 0.58333337306976 0.00000000000000 +vt 0.83333331346512 0.58333337306976 0.00000000000000 +vt 0.87500000000000 0.58333337306976 0.00000000000000 +vt 0.91666668653488 0.58333337306976 0.00000000000000 +vt 0.95833331346512 0.58333337306976 0.00000000000000 +vt 1.00000000000000 0.58333337306976 0.00000000000000 +vt 0.00000000000000 0.66666668653488 0.00000000000000 +vt 0.04166666790843 0.66666668653488 0.00000000000000 +vt 0.08333333581686 0.66666668653488 0.00000000000000 +vt 0.12500000000000 0.66666668653488 0.00000000000000 +vt 0.16666667163372 0.66666668653488 0.00000000000000 +vt 0.20833332836628 0.66666668653488 0.00000000000000 +vt 0.25000000000000 0.66666668653488 0.00000000000000 +vt 0.29166665673256 0.66666668653488 0.00000000000000 +vt 0.33333334326744 0.66666668653488 0.00000000000000 +vt 0.37500000000000 0.66666668653488 0.00000000000000 +vt 0.41666665673256 0.66666668653488 0.00000000000000 +vt 0.45833334326744 0.66666668653488 0.00000000000000 +vt 0.50000000000000 0.66666668653488 0.00000000000000 +vt 0.54166668653488 0.66666668653488 0.00000000000000 +vt 0.58333331346512 0.66666668653488 0.00000000000000 +vt 0.62500000000000 0.66666668653488 0.00000000000000 +vt 0.66666668653488 0.66666668653488 0.00000000000000 +vt 0.70833331346512 0.66666668653488 0.00000000000000 +vt 0.75000000000000 0.66666668653488 0.00000000000000 +vt 0.79166668653488 0.66666668653488 0.00000000000000 +vt 0.83333331346512 0.66666668653488 0.00000000000000 +vt 0.87500000000000 0.66666668653488 0.00000000000000 +vt 0.91666668653488 0.66666668653488 0.00000000000000 +vt 0.95833331346512 0.66666668653488 0.00000000000000 +vt 1.00000000000000 0.66666668653488 0.00000000000000 +vt 0.00000000000000 0.75000000000000 0.00000000000000 +vt 0.04166666790843 0.75000000000000 0.00000000000000 +vt 0.08333333581686 0.75000000000000 0.00000000000000 +vt 0.12500000000000 0.75000000000000 0.00000000000000 +vt 0.16666667163372 0.75000000000000 0.00000000000000 +vt 0.20833332836628 0.75000000000000 0.00000000000000 +vt 0.25000000000000 0.75000000000000 0.00000000000000 +vt 0.29166665673256 0.75000000000000 0.00000000000000 +vt 0.33333334326744 0.75000000000000 0.00000000000000 +vt 0.37500000000000 0.75000000000000 0.00000000000000 +vt 0.41666665673256 0.75000000000000 0.00000000000000 +vt 0.45833334326744 0.75000000000000 0.00000000000000 +vt 0.50000000000000 0.75000000000000 0.00000000000000 +vt 0.54166668653488 0.75000000000000 0.00000000000000 +vt 0.58333331346512 0.75000000000000 0.00000000000000 +vt 0.62500000000000 0.75000000000000 0.00000000000000 +vt 0.66666668653488 0.75000000000000 0.00000000000000 +vt 0.70833331346512 0.75000000000000 0.00000000000000 +vt 0.75000000000000 0.75000000000000 0.00000000000000 +vt 0.79166668653488 0.75000000000000 0.00000000000000 +vt 0.83333331346512 0.75000000000000 0.00000000000000 +vt 0.87500000000000 0.75000000000000 0.00000000000000 +vt 0.91666668653488 0.75000000000000 0.00000000000000 +vt 0.95833331346512 0.75000000000000 0.00000000000000 +vt 1.00000000000000 0.75000000000000 0.00000000000000 +vt 0.00000000000000 0.83333337306976 0.00000000000000 +vt 0.04166666790843 0.83333337306976 0.00000000000000 +vt 0.08333333581686 0.83333337306976 0.00000000000000 +vt 0.12500000000000 0.83333337306976 0.00000000000000 +vt 0.16666667163372 0.83333337306976 0.00000000000000 +vt 0.20833332836628 0.83333337306976 0.00000000000000 +vt 0.25000000000000 0.83333337306976 0.00000000000000 +vt 0.29166665673256 0.83333337306976 0.00000000000000 +vt 0.33333334326744 0.83333337306976 0.00000000000000 +vt 0.37500000000000 0.83333337306976 0.00000000000000 +vt 0.41666665673256 0.83333337306976 0.00000000000000 +vt 0.45833334326744 0.83333337306976 0.00000000000000 +vt 0.50000000000000 0.83333337306976 0.00000000000000 +vt 0.54166668653488 0.83333337306976 0.00000000000000 +vt 0.58333331346512 0.83333337306976 0.00000000000000 +vt 0.62500000000000 0.83333337306976 0.00000000000000 +vt 0.66666668653488 0.83333337306976 0.00000000000000 +vt 0.70833331346512 0.83333337306976 0.00000000000000 +vt 0.75000000000000 0.83333337306976 0.00000000000000 +vt 0.79166668653488 0.83333337306976 0.00000000000000 +vt 0.83333331346512 0.83333337306976 0.00000000000000 +vt 0.87500000000000 0.83333337306976 0.00000000000000 +vt 0.91666668653488 0.83333337306976 0.00000000000000 +vt 0.95833331346512 0.83333337306976 0.00000000000000 +vt 1.00000000000000 0.83333337306976 0.00000000000000 +vt 0.00000000000000 0.91666668653488 0.00000000000000 +vt 0.04166666790843 0.91666668653488 0.00000000000000 +vt 0.08333333581686 0.91666668653488 0.00000000000000 +vt 0.12500000000000 0.91666668653488 0.00000000000000 +vt 0.16666667163372 0.91666668653488 0.00000000000000 +vt 0.20833332836628 0.91666668653488 0.00000000000000 +vt 0.25000000000000 0.91666668653488 0.00000000000000 +vt 0.29166665673256 0.91666668653488 0.00000000000000 +vt 0.33333334326744 0.91666668653488 0.00000000000000 +vt 0.37500000000000 0.91666668653488 0.00000000000000 +vt 0.41666665673256 0.91666668653488 0.00000000000000 +vt 0.45833334326744 0.91666668653488 0.00000000000000 +vt 0.50000000000000 0.91666668653488 0.00000000000000 +vt 0.54166668653488 0.91666668653488 0.00000000000000 +vt 0.58333331346512 0.91666668653488 0.00000000000000 +vt 0.62500000000000 0.91666668653488 0.00000000000000 +vt 0.66666668653488 0.91666668653488 0.00000000000000 +vt 0.70833331346512 0.91666668653488 0.00000000000000 +vt 0.75000000000000 0.91666668653488 0.00000000000000 +vt 0.79166668653488 0.91666668653488 0.00000000000000 +vt 0.83333331346512 0.91666668653488 0.00000000000000 +vt 0.87500000000000 0.91666668653488 0.00000000000000 +vt 0.91666668653488 0.91666668653488 0.00000000000000 +vt 0.95833331346512 0.91666668653488 0.00000000000000 +vt 1.00000000000000 0.91666668653488 0.00000000000000 +vt 0.04166666790843 0.00000000000000 0.00000000000000 +vt 0.04166666790843 1.00000000000000 0.00000000000000 +vt 0.08333333581686 0.00000000000000 0.00000000000000 +vt 0.08333333581686 1.00000000000000 0.00000000000000 +vt 0.12500000000000 0.00000000000000 0.00000000000000 +vt 0.12500000000000 1.00000000000000 0.00000000000000 +vt 0.16666667163372 0.00000000000000 0.00000000000000 +vt 0.16666667163372 1.00000000000000 0.00000000000000 +vt 0.20833332836628 0.00000000000000 0.00000000000000 +vt 0.20833332836628 1.00000000000000 0.00000000000000 +vt 0.25000000000000 0.00000000000000 0.00000000000000 +vt 0.25000000000000 1.00000000000000 0.00000000000000 +vt 0.29166665673256 0.00000000000000 0.00000000000000 +vt 0.29166665673256 1.00000000000000 0.00000000000000 +vt 0.33333334326744 0.00000000000000 0.00000000000000 +vt 0.33333334326744 1.00000000000000 0.00000000000000 +vt 0.37500000000000 0.00000000000000 0.00000000000000 +vt 0.37500000000000 1.00000000000000 0.00000000000000 +vt 0.41666665673256 0.00000000000000 0.00000000000000 +vt 0.41666665673256 1.00000000000000 0.00000000000000 +vt 0.45833334326744 0.00000000000000 0.00000000000000 +vt 0.45833334326744 1.00000000000000 0.00000000000000 +vt 0.50000000000000 0.00000000000000 0.00000000000000 +vt 0.50000000000000 1.00000000000000 0.00000000000000 +vt 0.54166668653488 0.00000000000000 0.00000000000000 +vt 0.54166668653488 1.00000000000000 0.00000000000000 +vt 0.58333331346512 0.00000000000000 0.00000000000000 +vt 0.58333331346512 1.00000000000000 0.00000000000000 +vt 0.62500000000000 0.00000000000000 0.00000000000000 +vt 0.62500000000000 1.00000000000000 0.00000000000000 +vt 0.66666668653488 0.00000000000000 0.00000000000000 +vt 0.66666668653488 1.00000000000000 0.00000000000000 +vt 0.70833331346512 0.00000000000000 0.00000000000000 +vt 0.70833331346512 1.00000000000000 0.00000000000000 +vt 0.75000000000000 0.00000000000000 0.00000000000000 +vt 0.75000000000000 1.00000000000000 0.00000000000000 +vt 0.79166668653488 0.00000000000000 0.00000000000000 +vt 0.79166668653488 1.00000000000000 0.00000000000000 +vt 0.83333331346512 0.00000000000000 0.00000000000000 +vt 0.83333331346512 1.00000000000000 0.00000000000000 +vt 0.87500000000000 0.00000000000000 0.00000000000000 +vt 0.87500000000000 1.00000000000000 0.00000000000000 +vt 0.91666668653488 0.00000000000000 0.00000000000000 +vt 0.91666668653488 1.00000000000000 0.00000000000000 +vt 0.95833331346512 0.00000000000000 0.00000000000000 +vt 0.95833331346512 1.00000000000000 0.00000000000000 +# 321 texture coordinates + +g 球体.2 +usemtl 材质.3 +f 465/67/34 489/68/35 490/69/36 466/70/37 +f 466/70/37 490/69/36 491/71/38 467/72/39 +f 467/72/39 491/71/38 492/73/40 468/74/41 +f 468/74/41 492/73/40 493/75/42 469/76/43 +f 469/76/43 493/75/42 494/77/44 470/78/45 +f 470/78/45 494/77/44 495/79/46 471/80/47 +f 471/80/47 495/79/46 496/81/48 472/82/49 +f 472/82/49 496/81/48 497/83/50 473/84/51 +f 473/84/51 497/83/50 498/85/52 474/86/53 +f 474/86/53 498/85/52 499/87/54 475/88/55 +f 475/88/55 499/87/54 500/89/56 476/90/57 +f 476/90/57 500/89/56 501/91/58 477/92/59 +f 477/92/59 501/91/58 502/93/60 478/94/61 +f 478/94/61 502/93/60 503/95/62 479/96/63 +f 479/96/63 503/95/62 504/97/64 480/98/65 +f 480/98/65 504/97/64 505/99/66 481/100/67 +f 481/100/67 505/99/66 506/101/68 482/102/69 +f 482/102/69 506/101/68 507/103/70 483/104/71 +f 483/104/71 507/103/70 508/105/72 484/106/73 +f 484/106/73 508/105/72 509/107/74 485/108/75 +f 485/108/75 509/107/74 510/109/76 486/110/77 +f 486/110/77 510/109/76 511/111/78 487/112/79 +f 487/112/79 511/111/78 512/113/80 488/114/81 +f 488/114/81 512/113/80 489/115/35 465/116/34 +f 489/68/35 513/117/82 514/118/83 490/69/36 +f 490/69/36 514/118/83 515/119/84 491/71/38 +f 491/71/38 515/119/84 516/120/85 492/73/40 +f 492/73/40 516/120/85 517/121/86 493/75/42 +f 493/75/42 517/121/86 518/122/87 494/77/44 +f 494/77/44 518/122/87 519/123/88 495/79/46 +f 495/79/46 519/123/88 520/124/89 496/81/48 +f 496/81/48 520/124/89 521/125/90 497/83/50 +f 497/83/50 521/125/90 522/126/91 498/85/52 +f 498/85/52 522/126/91 523/127/92 499/87/54 +f 499/87/54 523/127/92 524/128/93 500/89/56 +f 500/89/56 524/128/93 525/129/94 501/91/58 +f 501/91/58 525/129/94 526/130/95 502/93/60 +f 502/93/60 526/130/95 527/131/96 503/95/62 +f 503/95/62 527/131/96 528/132/97 504/97/64 +f 504/97/64 528/132/97 529/133/98 505/99/66 +f 505/99/66 529/133/98 530/134/99 506/101/68 +f 506/101/68 530/134/99 531/135/100 507/103/70 +f 507/103/70 531/135/100 532/136/101 508/105/72 +f 508/105/72 532/136/101 533/137/102 509/107/74 +f 509/107/74 533/137/102 534/138/103 510/109/76 +f 510/109/76 534/138/103 535/139/104 511/111/78 +f 511/111/78 535/139/104 536/140/105 512/113/80 +f 512/113/80 536/140/105 513/141/82 489/115/35 +f 513/117/82 537/142/106 538/143/107 514/118/83 +f 514/118/83 538/143/107 539/144/108 515/119/84 +f 515/119/84 539/144/108 540/145/109 516/120/85 +f 516/120/85 540/145/109 541/146/110 517/121/86 +f 517/121/86 541/146/110 542/147/111 518/122/87 +f 518/122/87 542/147/111 543/148/112 519/123/88 +f 519/123/88 543/148/112 544/149/113 520/124/89 +f 520/124/89 544/149/113 545/150/114 521/125/90 +f 521/125/90 545/150/114 546/151/115 522/126/91 +f 522/126/91 546/151/115 547/152/116 523/127/92 +f 523/127/92 547/152/116 548/153/117 524/128/93 +f 524/128/93 548/153/117 549/154/118 525/129/94 +f 525/129/94 549/154/118 550/155/119 526/130/95 +f 526/130/95 550/155/119 551/156/120 527/131/96 +f 527/131/96 551/156/120 552/157/121 528/132/97 +f 528/132/97 552/157/121 553/158/122 529/133/98 +f 529/133/98 553/158/122 554/159/123 530/134/99 +f 530/134/99 554/159/123 555/160/124 531/135/100 +f 531/135/100 555/160/124 556/161/125 532/136/101 +f 532/136/101 556/161/125 557/162/126 533/137/102 +f 533/137/102 557/162/126 558/163/127 534/138/103 +f 534/138/103 558/163/127 559/164/128 535/139/104 +f 535/139/104 559/164/128 560/165/129 536/140/105 +f 536/140/105 560/165/129 537/166/106 513/141/82 +f 537/142/106 561/167/130 562/168/131 538/143/107 +f 538/143/107 562/168/131 563/169/132 539/144/108 +f 539/144/108 563/169/132 564/170/133 540/145/109 +f 540/145/109 564/170/133 565/171/134 541/146/110 +f 541/146/110 565/171/134 566/172/135 542/147/111 +f 542/147/111 566/172/135 567/173/136 543/148/112 +f 543/148/112 567/173/136 568/174/137 544/149/113 +f 544/149/113 568/174/137 569/175/138 545/150/114 +f 545/150/114 569/175/138 570/176/139 546/151/115 +f 546/151/115 570/176/139 571/177/140 547/152/116 +f 547/152/116 571/177/140 572/178/141 548/153/117 +f 548/153/117 572/178/141 573/179/142 549/154/118 +f 549/154/118 573/179/142 574/180/143 550/155/119 +f 550/155/119 574/180/143 575/181/144 551/156/120 +f 551/156/120 575/181/144 576/182/145 552/157/121 +f 552/157/121 576/182/145 577/183/146 553/158/122 +f 553/158/122 577/183/146 578/184/147 554/159/123 +f 554/159/123 578/184/147 579/185/148 555/160/124 +f 555/160/124 579/185/148 580/186/149 556/161/125 +f 556/161/125 580/186/149 581/187/150 557/162/126 +f 557/162/126 581/187/150 582/188/151 558/163/127 +f 558/163/127 582/188/151 583/189/152 559/164/128 +f 559/164/128 583/189/152 584/190/153 560/165/129 +f 560/165/129 584/190/153 561/191/130 537/166/106 +f 561/167/130 585/192/154 586/193/155 562/168/131 +f 562/168/131 586/193/155 587/194/156 563/169/132 +f 563/169/132 587/194/156 588/195/157 564/170/133 +f 564/170/133 588/195/157 589/196/158 565/171/134 +f 565/171/134 589/196/158 590/197/159 566/172/135 +f 566/172/135 590/197/159 591/198/160 567/173/136 +f 567/173/136 591/198/160 592/199/161 568/174/137 +f 568/174/137 592/199/161 593/200/162 569/175/138 +f 569/175/138 593/200/162 594/201/163 570/176/139 +f 570/176/139 594/201/163 595/202/164 571/177/140 +f 571/177/140 595/202/164 596/203/165 572/178/141 +f 572/178/141 596/203/165 597/204/166 573/179/142 +f 573/179/142 597/204/166 598/205/167 574/180/143 +f 574/180/143 598/205/167 599/206/168 575/181/144 +f 575/181/144 599/206/168 600/207/169 576/182/145 +f 576/182/145 600/207/169 601/208/170 577/183/146 +f 577/183/146 601/208/170 602/209/171 578/184/147 +f 578/184/147 602/209/171 603/210/172 579/185/148 +f 579/185/148 603/210/172 604/211/173 580/186/149 +f 580/186/149 604/211/173 605/212/174 581/187/150 +f 581/187/150 605/212/174 606/213/175 582/188/151 +f 582/188/151 606/213/175 607/214/176 583/189/152 +f 583/189/152 607/214/176 608/215/177 584/190/153 +f 584/190/153 608/215/177 585/216/154 561/191/130 +f 585/192/154 609/217/178 610/218/179 586/193/155 +f 586/193/155 610/218/179 611/219/180 587/194/156 +f 587/194/156 611/219/180 612/220/181 588/195/157 +f 588/195/157 612/220/181 613/221/182 589/196/158 +f 589/196/158 613/221/182 614/222/183 590/197/159 +f 590/197/159 614/222/183 615/223/184 591/198/160 +f 591/198/160 615/223/184 616/224/185 592/199/161 +f 592/199/161 616/224/185 617/225/186 593/200/162 +f 593/200/162 617/225/186 618/226/187 594/201/163 +f 594/201/163 618/226/187 619/227/188 595/202/164 +f 595/202/164 619/227/188 620/228/189 596/203/165 +f 596/203/165 620/228/189 621/229/190 597/204/166 +f 597/204/166 621/229/190 622/230/191 598/205/167 +f 598/205/167 622/230/191 623/231/192 599/206/168 +f 599/206/168 623/231/192 624/232/193 600/207/169 +f 600/207/169 624/232/193 625/233/194 601/208/170 +f 601/208/170 625/233/194 626/234/195 602/209/171 +f 602/209/171 626/234/195 627/235/196 603/210/172 +f 603/210/172 627/235/196 628/236/197 604/211/173 +f 604/211/173 628/236/197 629/237/198 605/212/174 +f 605/212/174 629/237/198 630/238/199 606/213/175 +f 606/213/175 630/238/199 631/239/200 607/214/176 +f 607/214/176 631/239/200 632/240/201 608/215/177 +f 608/215/177 632/240/201 609/241/178 585/216/154 +f 609/217/178 633/242/202 634/243/203 610/218/179 +f 610/218/179 634/243/203 635/244/204 611/219/180 +f 611/219/180 635/244/204 636/245/205 612/220/181 +f 612/220/181 636/245/205 637/246/206 613/221/182 +f 613/221/182 637/246/206 638/247/207 614/222/183 +f 614/222/183 638/247/207 639/248/208 615/223/184 +f 615/223/184 639/248/208 640/249/209 616/224/185 +f 616/224/185 640/249/209 641/250/210 617/225/186 +f 617/225/186 641/250/210 642/251/211 618/226/187 +f 618/226/187 642/251/211 643/252/212 619/227/188 +f 619/227/188 643/252/212 644/253/213 620/228/189 +f 620/228/189 644/253/213 645/254/214 621/229/190 +f 621/229/190 645/254/214 646/255/215 622/230/191 +f 622/230/191 646/255/215 647/256/216 623/231/192 +f 623/231/192 647/256/216 648/257/217 624/232/193 +f 624/232/193 648/257/217 649/258/218 625/233/194 +f 625/233/194 649/258/218 650/259/219 626/234/195 +f 626/234/195 650/259/219 651/260/220 627/235/196 +f 627/235/196 651/260/220 652/261/221 628/236/197 +f 628/236/197 652/261/221 653/262/222 629/237/198 +f 629/237/198 653/262/222 654/263/223 630/238/199 +f 630/238/199 654/263/223 655/264/224 631/239/200 +f 631/239/200 655/264/224 656/265/225 632/240/201 +f 632/240/201 656/265/225 633/266/202 609/241/178 +f 633/242/202 657/267/226 658/268/227 634/243/203 +f 634/243/203 658/268/227 659/269/228 635/244/204 +f 635/244/204 659/269/228 660/270/229 636/245/205 +f 636/245/205 660/270/229 661/271/230 637/246/206 +f 637/246/206 661/271/230 662/272/231 638/247/207 +f 638/247/207 662/272/231 663/273/232 639/248/208 +f 639/248/208 663/273/232 664/274/233 640/249/209 +f 640/249/209 664/274/233 665/275/234 641/250/210 +f 641/250/210 665/275/234 666/276/235 642/251/211 +f 642/251/211 666/276/235 667/277/236 643/252/212 +f 643/252/212 667/277/236 668/278/237 644/253/213 +f 644/253/213 668/278/237 669/279/238 645/254/214 +f 645/254/214 669/279/238 670/280/239 646/255/215 +f 646/255/215 670/280/239 671/281/240 647/256/216 +f 647/256/216 671/281/240 672/282/241 648/257/217 +f 648/257/217 672/282/241 673/283/242 649/258/218 +f 649/258/218 673/283/242 674/284/243 650/259/219 +f 650/259/219 674/284/243 675/285/244 651/260/220 +f 651/260/220 675/285/244 676/286/245 652/261/221 +f 652/261/221 676/286/245 677/287/246 653/262/222 +f 653/262/222 677/287/246 678/288/247 654/263/223 +f 654/263/223 678/288/247 679/289/248 655/264/224 +f 655/264/224 679/289/248 680/290/249 656/265/225 +f 656/265/225 680/290/249 657/291/226 633/266/202 +f 657/267/226 681/292/250 682/293/251 658/268/227 +f 658/268/227 682/293/251 683/294/252 659/269/228 +f 659/269/228 683/294/252 684/295/253 660/270/229 +f 660/270/229 684/295/253 685/296/254 661/271/230 +f 661/271/230 685/296/254 686/297/255 662/272/231 +f 662/272/231 686/297/255 687/298/256 663/273/232 +f 663/273/232 687/298/256 688/299/257 664/274/233 +f 664/274/233 688/299/257 689/300/258 665/275/234 +f 665/275/234 689/300/258 690/301/259 666/276/235 +f 666/276/235 690/301/259 691/302/260 667/277/236 +f 667/277/236 691/302/260 692/303/261 668/278/237 +f 668/278/237 692/303/261 693/304/262 669/279/238 +f 669/279/238 693/304/262 694/305/263 670/280/239 +f 670/280/239 694/305/263 695/306/264 671/281/240 +f 671/281/240 695/306/264 696/307/265 672/282/241 +f 672/282/241 696/307/265 697/308/266 673/283/242 +f 673/283/242 697/308/266 698/309/267 674/284/243 +f 674/284/243 698/309/267 699/310/268 675/285/244 +f 675/285/244 699/310/268 700/311/269 676/286/245 +f 676/286/245 700/311/269 701/312/270 677/287/246 +f 677/287/246 701/312/270 702/313/271 678/288/247 +f 678/288/247 702/313/271 703/314/272 679/289/248 +f 679/289/248 703/314/272 704/315/273 680/290/249 +f 680/290/249 704/315/273 681/316/250 657/291/226 +f 681/292/250 705/317/274 706/318/275 682/293/251 +f 682/293/251 706/318/275 707/319/276 683/294/252 +f 683/294/252 707/319/276 708/320/277 684/295/253 +f 684/295/253 708/320/277 709/321/278 685/296/254 +f 685/296/254 709/321/278 710/322/279 686/297/255 +f 686/297/255 710/322/279 711/323/280 687/298/256 +f 687/298/256 711/323/280 712/324/281 688/299/257 +f 688/299/257 712/324/281 713/325/282 689/300/258 +f 689/300/258 713/325/282 714/326/283 690/301/259 +f 690/301/259 714/326/283 715/327/284 691/302/260 +f 691/302/260 715/327/284 716/328/285 692/303/261 +f 692/303/261 716/328/285 717/329/286 693/304/262 +f 693/304/262 717/329/286 718/330/287 694/305/263 +f 694/305/263 718/330/287 719/331/288 695/306/264 +f 695/306/264 719/331/288 720/332/289 696/307/265 +f 696/307/265 720/332/289 721/333/290 697/308/266 +f 697/308/266 721/333/290 722/334/291 698/309/267 +f 698/309/267 722/334/291 723/335/292 699/310/268 +f 699/310/268 723/335/292 724/336/293 700/311/269 +f 700/311/269 724/336/293 725/337/294 701/312/270 +f 701/312/270 725/337/294 726/338/295 702/313/271 +f 702/313/271 726/338/295 727/339/296 703/314/272 +f 703/314/272 727/339/296 728/340/297 704/315/273 +f 704/315/273 728/340/297 705/341/274 681/316/250 +f 463/4/298 465/67/34 466/70/37 +f 706/318/275 705/317/274 464/1/299 +f 463/342/298 466/70/37 467/72/39 +f 707/319/276 706/318/275 464/343/299 +f 463/344/298 467/72/39 468/74/41 +f 708/320/277 707/319/276 464/345/299 +f 463/346/298 468/74/41 469/76/43 +f 709/321/278 708/320/277 464/347/299 +f 463/348/298 469/76/43 470/78/45 +f 710/322/279 709/321/278 464/349/299 +f 463/350/298 470/78/45 471/80/47 +f 711/323/280 710/322/279 464/351/299 +f 463/352/298 471/80/47 472/82/49 +f 712/324/281 711/323/280 464/353/299 +f 463/354/298 472/82/49 473/84/51 +f 713/325/282 712/324/281 464/355/299 +f 463/356/298 473/84/51 474/86/53 +f 714/326/283 713/325/282 464/357/299 +f 463/358/298 474/86/53 475/88/55 +f 715/327/284 714/326/283 464/359/299 +f 463/360/298 475/88/55 476/90/57 +f 716/328/285 715/327/284 464/361/299 +f 463/362/298 476/90/57 477/92/59 +f 717/329/286 716/328/285 464/363/299 +f 463/364/298 477/92/59 478/94/61 +f 718/330/287 717/329/286 464/365/299 +f 463/366/298 478/94/61 479/96/63 +f 719/331/288 718/330/287 464/367/299 +f 463/368/298 479/96/63 480/98/65 +f 720/332/289 719/331/288 464/369/299 +f 463/370/298 480/98/65 481/100/67 +f 721/333/290 720/332/289 464/371/299 +f 463/372/298 481/100/67 482/102/69 +f 722/334/291 721/333/290 464/373/299 +f 463/374/298 482/102/69 483/104/71 +f 723/335/292 722/334/291 464/375/299 +f 463/376/298 483/104/71 484/106/73 +f 724/336/293 723/335/292 464/377/299 +f 463/378/298 484/106/73 485/108/75 +f 725/337/294 724/336/293 464/379/299 +f 463/380/298 485/108/75 486/110/77 +f 726/338/295 725/337/294 464/381/299 +f 463/382/298 486/110/77 487/112/79 +f 727/339/296 726/338/295 464/383/299 +f 463/384/298 487/112/79 488/114/81 +f 728/340/297 727/339/296 464/385/299 +f 463/386/298 488/114/81 465/116/34 +f 705/341/274 728/340/297 464/387/299 + +v 37.80797195434570 575.17773437500000 0.00000000000000 +v 37.80797195434570 646.75634765625000 0.00000000000000 +v 47.07093048095703 576.39721679687500 0.00000000000000 +v 46.75530242919922 576.39721679687500 2.39742946624756 +v 45.82992935180664 576.39721679687500 4.63147830963135 +v 44.35787200927734 576.39721679687500 6.54989910125732 +v 42.43945312500000 576.39721679687500 8.02195549011230 +v 40.20540237426758 576.39721679687500 8.94732856750488 +v 37.80797195434570 576.39721679687500 9.26295661926270 +v 35.41054534912109 576.39721679687500 8.94732856750488 +v 33.17649459838867 576.39721679687500 8.02195549011230 +v 31.25807380676270 576.39721679687500 6.54989910125732 +v 29.78601837158203 576.39721679687500 4.63147830963135 +v 28.86064529418945 576.39721679687500 2.39742946624756 +v 28.54501724243164 576.39721679687500 0.00000000000000 +v 28.86064529418945 576.39721679687500 -2.39742946624756 +v 29.78601837158203 576.39721679687500 -4.63147830963135 +v 31.25807380676270 576.39721679687500 -6.54989910125732 +v 33.17649459838867 576.39721679687500 -8.02195549011230 +v 35.41054534912109 576.39721679687500 -8.94732856750488 +v 37.80797195434570 576.39721679687500 -9.26295661926270 +v 40.20540237426758 576.39721679687500 -8.94732856750488 +v 42.43945312500000 576.39721679687500 -8.02195549011230 +v 44.35787200927734 576.39721679687500 -6.54989910125732 +v 45.82992935180664 576.39721679687500 -4.63147830963135 +v 46.75530242919922 576.39721679687500 -2.39742946624756 +v 55.70263290405273 579.97259521484375 0.00000000000000 +v 55.09288406372070 579.97259521484375 4.63147830963135 +v 53.30520248413086 579.97259521484375 8.94732856750488 +v 50.46140670776367 579.97259521484375 12.65343379974365 +v 46.75530242919922 579.97259521484375 15.49722766876221 +v 42.43945312500000 579.97259521484375 17.28491210937500 +v 37.80797195434570 579.97259521484375 17.89465713500977 +v 33.17649459838867 579.97259521484375 17.28491210937500 +v 28.86064529418945 579.97259521484375 15.49722766876221 +v 25.15453910827637 579.97259521484375 12.65343379974365 +v 22.31074523925781 579.97259521484375 8.94732856750488 +v 20.52306175231934 579.97259521484375 4.63147830963135 +v 19.91331672668457 579.97259521484375 0.00000000000000 +v 20.52306175231934 579.97259521484375 -4.63147830963135 +v 22.31074523925781 579.97259521484375 -8.94732856750488 +v 25.15453910827637 579.97259521484375 -12.65343379974365 +v 28.86064529418945 579.97259521484375 -15.49722766876221 +v 33.17649459838867 579.97259521484375 -17.28491210937500 +v 37.80797195434570 579.97259521484375 -17.89465713500977 +v 42.43945312500000 579.97259521484375 -17.28491210937500 +v 46.75530242919922 579.97259521484375 -15.49722766876221 +v 50.46140670776367 579.97259521484375 -12.65343379974365 +v 53.30520248413086 579.97259521484375 -8.94732856750488 +v 55.09288406372070 579.97259521484375 -4.63147830963135 +v 63.11484146118164 585.66015625000000 0.00000000000000 +v 62.25252914428711 585.66015625000000 6.54989910125732 +v 59.72436523437500 585.66015625000000 12.65343379974365 +v 55.70263290405273 585.66015625000000 17.89465713500977 +v 50.46140670776367 585.66015625000000 21.91638946533203 +v 44.35787200927734 585.66015625000000 24.44455718994141 +v 37.80797195434570 585.66015625000000 25.30686759948730 +v 31.25807380676270 585.66015625000000 24.44455718994141 +v 25.15453910827637 585.66015625000000 21.91638946533203 +v 19.91331672668457 585.66015625000000 17.89465713500977 +v 15.89158344268799 585.66015625000000 12.65343379974365 +v 13.36341667175293 585.66015625000000 6.54989910125732 +v 12.50110626220703 585.66015625000000 0.00000000000000 +v 13.36341667175293 585.66015625000000 -6.54989910125732 +v 15.89158344268799 585.66015625000000 -12.65343379974365 +v 19.91331672668457 585.66015625000000 -17.89465713500977 +v 25.15453910827637 585.66015625000000 -21.91638946533203 +v 31.25807380676270 585.66015625000000 -24.44455718994141 +v 37.80797195434570 585.66015625000000 -25.30686759948730 +v 44.35787200927734 585.66015625000000 -24.44455718994141 +v 50.46140670776367 585.66015625000000 -21.91638946533203 +v 55.70263290405273 585.66015625000000 -17.89465713500977 +v 59.72436523437500 585.66015625000000 -12.65343379974365 +v 62.25252914428711 585.66015625000000 -6.54989910125732 +v 68.80242919921875 593.07238769531250 0.00000000000000 +v 67.74632263183594 593.07238769531250 8.02195549011230 +v 64.64996337890625 593.07238769531250 15.49722766876221 +v 59.72436523437500 593.07238769531250 21.91638946533203 +v 53.30520248413086 593.07238769531250 26.84198570251465 +v 45.82992935180664 593.07238769531250 29.93834495544434 +v 37.80797195434570 593.07238769531250 30.99445533752441 +v 29.78601837158203 593.07238769531250 29.93834495544434 +v 22.31074523925781 593.07238769531250 26.84198570251465 +v 15.89158344268799 593.07238769531250 21.91638946533203 +v 10.96598720550537 593.07238769531250 15.49722766876221 +v 7.86962795257568 593.07238769531250 8.02195549011230 +v 6.81351709365845 593.07238769531250 0.00000000000000 +v 7.86962795257568 593.07238769531250 -8.02195549011230 +v 10.96598720550537 593.07238769531250 -15.49722766876221 +v 15.89158344268799 593.07238769531250 -21.91638946533203 +v 22.31074523925781 593.07238769531250 -26.84198570251465 +v 29.78601837158203 593.07238769531250 -29.93834495544434 +v 37.80797195434570 593.07238769531250 -30.99445533752441 +v 45.82992935180664 593.07238769531250 -29.93834495544434 +v 53.30520248413086 593.07238769531250 -26.84198570251465 +v 59.72436523437500 593.07238769531250 -21.91638946533203 +v 64.64996337890625 593.07238769531250 -15.49722766876221 +v 67.74632263183594 593.07238769531250 -8.02195549011230 +v 72.37779998779297 601.70410156250000 0.00000000000000 +v 71.19985961914062 601.70410156250000 8.94732856750488 +v 67.74632263183594 601.70410156250000 17.28491210937500 +v 62.25252914428711 601.70410156250000 24.44455718994141 +v 55.09288406372070 601.70410156250000 29.93834495544434 +v 46.75530242919922 601.70410156250000 33.39188385009766 +v 37.80797195434570 601.70410156250000 34.56982421875000 +v 28.86064529418945 601.70410156250000 33.39188385009766 +v 20.52306175231934 601.70410156250000 29.93834495544434 +v 13.36341667175293 601.70410156250000 24.44455718994141 +v 7.86962795257568 601.70410156250000 17.28491210937500 +v 4.41608762741089 601.70410156250000 8.94732856750488 +v 3.23814964294434 601.70410156250000 0.00000000000000 +v 4.41608762741089 601.70410156250000 -8.94732856750488 +v 7.86962795257568 601.70410156250000 -17.28491210937500 +v 13.36341667175293 601.70410156250000 -24.44455718994141 +v 20.52306175231934 601.70410156250000 -29.93834495544434 +v 28.86064529418945 601.70410156250000 -33.39188385009766 +v 37.80797195434570 601.70410156250000 -34.56982421875000 +v 46.75530242919922 601.70410156250000 -33.39188385009766 +v 55.09288406372070 601.70410156250000 -29.93834495544434 +v 62.25252914428711 601.70410156250000 -24.44455718994141 +v 67.74632263183594 601.70410156250000 -17.28491210937500 +v 71.19985961914062 601.70410156250000 -8.94732856750488 +v 73.59729003906250 610.96704101562500 0.00000000000000 +v 72.37779998779297 610.96704101562500 9.26295661926270 +v 68.80242919921875 610.96704101562500 17.89465713500977 +v 63.11484146118164 610.96704101562500 25.30686759948730 +v 55.70263290405273 610.96704101562500 30.99445533752441 +v 47.07093048095703 610.96704101562500 34.56982421875000 +v 37.80797195434570 610.96704101562500 35.78931427001953 +v 28.54501724243164 610.96704101562500 34.56982421875000 +v 19.91331672668457 610.96704101562500 30.99445533752441 +v 12.50110626220703 610.96704101562500 25.30686759948730 +v 6.81351709365845 610.96704101562500 17.89465713500977 +v 3.23814964294434 610.96704101562500 9.26295661926270 +v 2.01865816116333 610.96704101562500 0.00000000000000 +v 3.23814964294434 610.96704101562500 -9.26295661926270 +v 6.81351709365845 610.96704101562500 -17.89465713500977 +v 12.50110626220703 610.96704101562500 -25.30686759948730 +v 19.91331672668457 610.96704101562500 -30.99445533752441 +v 28.54501724243164 610.96704101562500 -34.56982421875000 +v 37.80797195434570 610.96704101562500 -35.78931427001953 +v 47.07093048095703 610.96704101562500 -34.56982421875000 +v 55.70263290405273 610.96704101562500 -30.99445533752441 +v 63.11484146118164 610.96704101562500 -25.30686759948730 +v 68.80242919921875 610.96704101562500 -17.89465713500977 +v 72.37779998779297 610.96704101562500 -9.26295661926270 +v 72.37779998779297 620.22998046875000 0.00000000000000 +v 71.19985961914062 620.22998046875000 8.94732856750488 +v 67.74632263183594 620.22998046875000 17.28491210937500 +v 62.25252914428711 620.22998046875000 24.44455718994141 +v 55.09288406372070 620.22998046875000 29.93834495544434 +v 46.75530242919922 620.22998046875000 33.39188385009766 +v 37.80797195434570 620.22998046875000 34.56982421875000 +v 28.86064529418945 620.22998046875000 33.39188385009766 +v 20.52306175231934 620.22998046875000 29.93834495544434 +v 13.36341667175293 620.22998046875000 24.44455718994141 +v 7.86962795257568 620.22998046875000 17.28491210937500 +v 4.41608762741089 620.22998046875000 8.94732856750488 +v 3.23814964294434 620.22998046875000 0.00000000000000 +v 4.41608762741089 620.22998046875000 -8.94732856750488 +v 7.86962795257568 620.22998046875000 -17.28491210937500 +v 13.36341667175293 620.22998046875000 -24.44455718994141 +v 20.52306175231934 620.22998046875000 -29.93834495544434 +v 28.86064529418945 620.22998046875000 -33.39188385009766 +v 37.80797195434570 620.22998046875000 -34.56982421875000 +v 46.75530242919922 620.22998046875000 -33.39188385009766 +v 55.09288406372070 620.22998046875000 -29.93834495544434 +v 62.25252914428711 620.22998046875000 -24.44455718994141 +v 67.74632263183594 620.22998046875000 -17.28491210937500 +v 71.19985961914062 620.22998046875000 -8.94732856750488 +v 68.80242919921875 628.86169433593750 0.00000000000000 +v 67.74632263183594 628.86169433593750 8.02195549011230 +v 64.64996337890625 628.86169433593750 15.49722766876221 +v 59.72436523437500 628.86169433593750 21.91638946533203 +v 53.30520248413086 628.86169433593750 26.84198570251465 +v 45.82992935180664 628.86169433593750 29.93834495544434 +v 37.80797195434570 628.86169433593750 30.99445533752441 +v 29.78601837158203 628.86169433593750 29.93834495544434 +v 22.31074523925781 628.86169433593750 26.84198570251465 +v 15.89158344268799 628.86169433593750 21.91638946533203 +v 10.96598720550537 628.86169433593750 15.49722766876221 +v 7.86962795257568 628.86169433593750 8.02195549011230 +v 6.81351709365845 628.86169433593750 0.00000000000000 +v 7.86962795257568 628.86169433593750 -8.02195549011230 +v 10.96598720550537 628.86169433593750 -15.49722766876221 +v 15.89158344268799 628.86169433593750 -21.91638946533203 +v 22.31074523925781 628.86169433593750 -26.84198570251465 +v 29.78601837158203 628.86169433593750 -29.93834495544434 +v 37.80797195434570 628.86169433593750 -30.99445533752441 +v 45.82992935180664 628.86169433593750 -29.93834495544434 +v 53.30520248413086 628.86169433593750 -26.84198570251465 +v 59.72436523437500 628.86169433593750 -21.91638946533203 +v 64.64996337890625 628.86169433593750 -15.49722766876221 +v 67.74632263183594 628.86169433593750 -8.02195549011230 +v 63.11484146118164 636.27392578125000 0.00000000000000 +v 62.25252914428711 636.27392578125000 6.54989910125732 +v 59.72436523437500 636.27392578125000 12.65343379974365 +v 55.70263290405273 636.27392578125000 17.89465713500977 +v 50.46140670776367 636.27392578125000 21.91638946533203 +v 44.35787200927734 636.27392578125000 24.44455718994141 +v 37.80797195434570 636.27392578125000 25.30686759948730 +v 31.25807380676270 636.27392578125000 24.44455718994141 +v 25.15453910827637 636.27392578125000 21.91638946533203 +v 19.91331672668457 636.27392578125000 17.89465713500977 +v 15.89158344268799 636.27392578125000 12.65343379974365 +v 13.36341667175293 636.27392578125000 6.54989910125732 +v 12.50110626220703 636.27392578125000 0.00000000000000 +v 13.36341667175293 636.27392578125000 -6.54989910125732 +v 15.89158344268799 636.27392578125000 -12.65343379974365 +v 19.91331672668457 636.27392578125000 -17.89465713500977 +v 25.15453910827637 636.27392578125000 -21.91638946533203 +v 31.25807380676270 636.27392578125000 -24.44455718994141 +v 37.80797195434570 636.27392578125000 -25.30686759948730 +v 44.35787200927734 636.27392578125000 -24.44455718994141 +v 50.46140670776367 636.27392578125000 -21.91638946533203 +v 55.70263290405273 636.27392578125000 -17.89465713500977 +v 59.72436523437500 636.27392578125000 -12.65343379974365 +v 62.25252914428711 636.27392578125000 -6.54989910125732 +v 55.70263290405273 641.96148681640625 0.00000000000000 +v 55.09288406372070 641.96148681640625 4.63147830963135 +v 53.30520248413086 641.96148681640625 8.94732856750488 +v 50.46140670776367 641.96148681640625 12.65343379974365 +v 46.75530242919922 641.96148681640625 15.49722766876221 +v 42.43945312500000 641.96148681640625 17.28491210937500 +v 37.80797195434570 641.96148681640625 17.89465713500977 +v 33.17649459838867 641.96148681640625 17.28491210937500 +v 28.86064529418945 641.96148681640625 15.49722766876221 +v 25.15453910827637 641.96148681640625 12.65343379974365 +v 22.31074523925781 641.96148681640625 8.94732856750488 +v 20.52306175231934 641.96148681640625 4.63147830963135 +v 19.91331672668457 641.96148681640625 0.00000000000000 +v 20.52306175231934 641.96148681640625 -4.63147830963135 +v 22.31074523925781 641.96148681640625 -8.94732856750488 +v 25.15453910827637 641.96148681640625 -12.65343379974365 +v 28.86064529418945 641.96148681640625 -15.49722766876221 +v 33.17649459838867 641.96148681640625 -17.28491210937500 +v 37.80797195434570 641.96148681640625 -17.89465713500977 +v 42.43945312500000 641.96148681640625 -17.28491210937500 +v 46.75530242919922 641.96148681640625 -15.49722766876221 +v 50.46140670776367 641.96148681640625 -12.65343379974365 +v 53.30520248413086 641.96148681640625 -8.94732856750488 +v 55.09288406372070 641.96148681640625 -4.63147830963135 +v 47.07093048095703 645.53686523437500 0.00000000000000 +v 46.75530242919922 645.53686523437500 2.39742946624756 +v 45.82992935180664 645.53686523437500 4.63147830963135 +v 44.35787200927734 645.53686523437500 6.54989910125732 +v 42.43945312500000 645.53686523437500 8.02195549011230 +v 40.20540237426758 645.53686523437500 8.94732856750488 +v 37.80797195434570 645.53686523437500 9.26295661926270 +v 35.41054534912109 645.53686523437500 8.94732856750488 +v 33.17649459838867 645.53686523437500 8.02195549011230 +v 31.25807380676270 645.53686523437500 6.54989910125732 +v 29.78601837158203 645.53686523437500 4.63147830963135 +v 28.86064529418945 645.53686523437500 2.39742946624756 +v 28.54501724243164 645.53686523437500 0.00000000000000 +v 28.86064529418945 645.53686523437500 -2.39742946624756 +v 29.78601837158203 645.53686523437500 -4.63147830963135 +v 31.25807380676270 645.53686523437500 -6.54989910125732 +v 33.17649459838867 645.53686523437500 -8.02195549011230 +v 35.41054534912109 645.53686523437500 -8.94732856750488 +v 37.80797195434570 645.53686523437500 -9.26295661926270 +v 40.20540237426758 645.53686523437500 -8.94732856750488 +v 42.43945312500000 645.53686523437500 -8.02195549011230 +v 44.35787200927734 645.53686523437500 -6.54989910125732 +v 45.82992935180664 645.53686523437500 -4.63147830963135 +v 46.75530242919922 645.53686523437500 -2.39742946624756 +# 266 vertices + +# 0 normal + +# 0 texture coordinate + +g 球体.1 +usemtl 材质.2 +f 731/67/34 755/68/35 756/69/36 732/70/37 +f 732/70/37 756/69/36 757/71/38 733/72/39 +f 733/72/39 757/71/38 758/73/40 734/74/41 +f 734/74/41 758/73/40 759/75/42 735/76/43 +f 735/76/43 759/75/42 760/77/44 736/78/45 +f 736/78/45 760/77/44 761/79/46 737/80/47 +f 737/80/47 761/79/46 762/81/48 738/82/49 +f 738/82/49 762/81/48 763/83/50 739/84/51 +f 739/84/51 763/83/50 764/85/52 740/86/53 +f 740/86/53 764/85/52 765/87/54 741/88/55 +f 741/88/55 765/87/54 766/89/56 742/90/57 +f 742/90/57 766/89/56 767/91/58 743/92/59 +f 743/92/59 767/91/58 768/93/60 744/94/61 +f 744/94/61 768/93/60 769/95/62 745/96/63 +f 745/96/63 769/95/62 770/97/64 746/98/65 +f 746/98/65 770/97/64 771/99/66 747/100/67 +f 747/100/67 771/99/66 772/101/68 748/102/69 +f 748/102/69 772/101/68 773/103/70 749/104/71 +f 749/104/71 773/103/70 774/105/72 750/106/73 +f 750/106/73 774/105/72 775/107/74 751/108/75 +f 751/108/75 775/107/74 776/109/76 752/110/77 +f 752/110/77 776/109/76 777/111/78 753/112/79 +f 753/112/79 777/111/78 778/113/80 754/114/81 +f 754/114/81 778/113/80 755/115/35 731/116/34 +f 755/68/35 779/117/82 780/118/83 756/69/36 +f 756/69/36 780/118/83 781/119/84 757/71/38 +f 757/71/38 781/119/84 782/120/85 758/73/40 +f 758/73/40 782/120/85 783/121/86 759/75/42 +f 759/75/42 783/121/86 784/122/87 760/77/44 +f 760/77/44 784/122/87 785/123/88 761/79/46 +f 761/79/46 785/123/88 786/124/89 762/81/48 +f 762/81/48 786/124/89 787/125/90 763/83/50 +f 763/83/50 787/125/90 788/126/91 764/85/52 +f 764/85/52 788/126/91 789/127/92 765/87/54 +f 765/87/54 789/127/92 790/128/93 766/89/56 +f 766/89/56 790/128/93 791/129/94 767/91/58 +f 767/91/58 791/129/94 792/130/95 768/93/60 +f 768/93/60 792/130/95 793/131/96 769/95/62 +f 769/95/62 793/131/96 794/132/97 770/97/64 +f 770/97/64 794/132/97 795/133/98 771/99/66 +f 771/99/66 795/133/98 796/134/99 772/101/68 +f 772/101/68 796/134/99 797/135/100 773/103/70 +f 773/103/70 797/135/100 798/136/101 774/105/72 +f 774/105/72 798/136/101 799/137/102 775/107/74 +f 775/107/74 799/137/102 800/138/103 776/109/76 +f 776/109/76 800/138/103 801/139/104 777/111/78 +f 777/111/78 801/139/104 802/140/105 778/113/80 +f 778/113/80 802/140/105 779/141/82 755/115/35 +f 779/117/82 803/142/106 804/143/107 780/118/83 +f 780/118/83 804/143/107 805/144/108 781/119/84 +f 781/119/84 805/144/108 806/145/109 782/120/85 +f 782/120/85 806/145/109 807/146/110 783/121/86 +f 783/121/86 807/146/110 808/147/111 784/122/87 +f 784/122/87 808/147/111 809/148/112 785/123/88 +f 785/123/88 809/148/112 810/149/113 786/124/89 +f 786/124/89 810/149/113 811/150/114 787/125/90 +f 787/125/90 811/150/114 812/151/115 788/126/91 +f 788/126/91 812/151/115 813/152/116 789/127/92 +f 789/127/92 813/152/116 814/153/117 790/128/93 +f 790/128/93 814/153/117 815/154/118 791/129/94 +f 791/129/94 815/154/118 816/155/119 792/130/95 +f 792/130/95 816/155/119 817/156/120 793/131/96 +f 793/131/96 817/156/120 818/157/121 794/132/97 +f 794/132/97 818/157/121 819/158/122 795/133/98 +f 795/133/98 819/158/122 820/159/123 796/134/99 +f 796/134/99 820/159/123 821/160/124 797/135/100 +f 797/135/100 821/160/124 822/161/125 798/136/101 +f 798/136/101 822/161/125 823/162/126 799/137/102 +f 799/137/102 823/162/126 824/163/127 800/138/103 +f 800/138/103 824/163/127 825/164/128 801/139/104 +f 801/139/104 825/164/128 826/165/129 802/140/105 +f 802/140/105 826/165/129 803/166/106 779/141/82 +f 803/142/106 827/167/130 828/168/131 804/143/107 +f 804/143/107 828/168/131 829/169/132 805/144/108 +f 805/144/108 829/169/132 830/170/133 806/145/109 +f 806/145/109 830/170/133 831/171/134 807/146/110 +f 807/146/110 831/171/134 832/172/135 808/147/111 +f 808/147/111 832/172/135 833/173/136 809/148/112 +f 809/148/112 833/173/136 834/174/137 810/149/113 +f 810/149/113 834/174/137 835/175/138 811/150/114 +f 811/150/114 835/175/138 836/176/139 812/151/115 +f 812/151/115 836/176/139 837/177/140 813/152/116 +f 813/152/116 837/177/140 838/178/141 814/153/117 +f 814/153/117 838/178/141 839/179/142 815/154/118 +f 815/154/118 839/179/142 840/180/143 816/155/119 +f 816/155/119 840/180/143 841/181/144 817/156/120 +f 817/156/120 841/181/144 842/182/145 818/157/121 +f 818/157/121 842/182/145 843/183/146 819/158/122 +f 819/158/122 843/183/146 844/184/147 820/159/123 +f 820/159/123 844/184/147 845/185/148 821/160/124 +f 821/160/124 845/185/148 846/186/149 822/161/125 +f 822/161/125 846/186/149 847/187/150 823/162/126 +f 823/162/126 847/187/150 848/188/151 824/163/127 +f 824/163/127 848/188/151 849/189/152 825/164/128 +f 825/164/128 849/189/152 850/190/153 826/165/129 +f 826/165/129 850/190/153 827/191/130 803/166/106 +f 827/167/130 851/192/154 852/193/155 828/168/131 +f 828/168/131 852/193/155 853/194/156 829/169/132 +f 829/169/132 853/194/156 854/195/157 830/170/133 +f 830/170/133 854/195/157 855/196/158 831/171/134 +f 831/171/134 855/196/158 856/197/159 832/172/135 +f 832/172/135 856/197/159 857/198/160 833/173/136 +f 833/173/136 857/198/160 858/199/161 834/174/137 +f 834/174/137 858/199/161 859/200/162 835/175/138 +f 835/175/138 859/200/162 860/201/163 836/176/139 +f 836/176/139 860/201/163 861/202/164 837/177/140 +f 837/177/140 861/202/164 862/203/165 838/178/141 +f 838/178/141 862/203/165 863/204/166 839/179/142 +f 839/179/142 863/204/166 864/205/167 840/180/143 +f 840/180/143 864/205/167 865/206/168 841/181/144 +f 841/181/144 865/206/168 866/207/169 842/182/145 +f 842/182/145 866/207/169 867/208/170 843/183/146 +f 843/183/146 867/208/170 868/209/171 844/184/147 +f 844/184/147 868/209/171 869/210/172 845/185/148 +f 845/185/148 869/210/172 870/211/173 846/186/149 +f 846/186/149 870/211/173 871/212/174 847/187/150 +f 847/187/150 871/212/174 872/213/175 848/188/151 +f 848/188/151 872/213/175 873/214/176 849/189/152 +f 849/189/152 873/214/176 874/215/177 850/190/153 +f 850/190/153 874/215/177 851/216/154 827/191/130 +f 851/192/154 875/217/178 876/218/179 852/193/155 +f 852/193/155 876/218/179 877/219/180 853/194/156 +f 853/194/156 877/219/180 878/220/181 854/195/157 +f 854/195/157 878/220/181 879/221/182 855/196/158 +f 855/196/158 879/221/182 880/222/183 856/197/159 +f 856/197/159 880/222/183 881/223/184 857/198/160 +f 857/198/160 881/223/184 882/224/185 858/199/161 +f 858/199/161 882/224/185 883/225/186 859/200/162 +f 859/200/162 883/225/186 884/226/187 860/201/163 +f 860/201/163 884/226/187 885/227/188 861/202/164 +f 861/202/164 885/227/188 886/228/189 862/203/165 +f 862/203/165 886/228/189 887/229/190 863/204/166 +f 863/204/166 887/229/190 888/230/191 864/205/167 +f 864/205/167 888/230/191 889/231/192 865/206/168 +f 865/206/168 889/231/192 890/232/193 866/207/169 +f 866/207/169 890/232/193 891/233/194 867/208/170 +f 867/208/170 891/233/194 892/234/195 868/209/171 +f 868/209/171 892/234/195 893/235/196 869/210/172 +f 869/210/172 893/235/196 894/236/197 870/211/173 +f 870/211/173 894/236/197 895/237/198 871/212/174 +f 871/212/174 895/237/198 896/238/199 872/213/175 +f 872/213/175 896/238/199 897/239/200 873/214/176 +f 873/214/176 897/239/200 898/240/201 874/215/177 +f 874/215/177 898/240/201 875/241/178 851/216/154 +f 875/217/178 899/242/202 900/243/203 876/218/179 +f 876/218/179 900/243/203 901/244/204 877/219/180 +f 877/219/180 901/244/204 902/245/205 878/220/181 +f 878/220/181 902/245/205 903/246/206 879/221/182 +f 879/221/182 903/246/206 904/247/207 880/222/183 +f 880/222/183 904/247/207 905/248/208 881/223/184 +f 881/223/184 905/248/208 906/249/209 882/224/185 +f 882/224/185 906/249/209 907/250/210 883/225/186 +f 883/225/186 907/250/210 908/251/211 884/226/187 +f 884/226/187 908/251/211 909/252/212 885/227/188 +f 885/227/188 909/252/212 910/253/213 886/228/189 +f 886/228/189 910/253/213 911/254/214 887/229/190 +f 887/229/190 911/254/214 912/255/215 888/230/191 +f 888/230/191 912/255/215 913/256/216 889/231/192 +f 889/231/192 913/256/216 914/257/217 890/232/193 +f 890/232/193 914/257/217 915/258/218 891/233/194 +f 891/233/194 915/258/218 916/259/219 892/234/195 +f 892/234/195 916/259/219 917/260/220 893/235/196 +f 893/235/196 917/260/220 918/261/221 894/236/197 +f 894/236/197 918/261/221 919/262/222 895/237/198 +f 895/237/198 919/262/222 920/263/223 896/238/199 +f 896/238/199 920/263/223 921/264/224 897/239/200 +f 897/239/200 921/264/224 922/265/225 898/240/201 +f 898/240/201 922/265/225 899/266/202 875/241/178 +f 899/242/202 923/267/226 924/268/227 900/243/203 +f 900/243/203 924/268/227 925/269/228 901/244/204 +f 901/244/204 925/269/228 926/270/229 902/245/205 +f 902/245/205 926/270/229 927/271/230 903/246/206 +f 903/246/206 927/271/230 928/272/231 904/247/207 +f 904/247/207 928/272/231 929/273/232 905/248/208 +f 905/248/208 929/273/232 930/274/233 906/249/209 +f 906/249/209 930/274/233 931/275/234 907/250/210 +f 907/250/210 931/275/234 932/276/235 908/251/211 +f 908/251/211 932/276/235 933/277/236 909/252/212 +f 909/252/212 933/277/236 934/278/237 910/253/213 +f 910/253/213 934/278/237 935/279/238 911/254/214 +f 911/254/214 935/279/238 936/280/239 912/255/215 +f 912/255/215 936/280/239 937/281/240 913/256/216 +f 913/256/216 937/281/240 938/282/241 914/257/217 +f 914/257/217 938/282/241 939/283/242 915/258/218 +f 915/258/218 939/283/242 940/284/243 916/259/219 +f 916/259/219 940/284/243 941/285/244 917/260/220 +f 917/260/220 941/285/244 942/286/245 918/261/221 +f 918/261/221 942/286/245 943/287/246 919/262/222 +f 919/262/222 943/287/246 944/288/247 920/263/223 +f 920/263/223 944/288/247 945/289/248 921/264/224 +f 921/264/224 945/289/248 946/290/249 922/265/225 +f 922/265/225 946/290/249 923/291/226 899/266/202 +f 923/267/226 947/292/250 948/293/251 924/268/227 +f 924/268/227 948/293/251 949/294/252 925/269/228 +f 925/269/228 949/294/252 950/295/253 926/270/229 +f 926/270/229 950/295/253 951/296/254 927/271/230 +f 927/271/230 951/296/254 952/297/255 928/272/231 +f 928/272/231 952/297/255 953/298/256 929/273/232 +f 929/273/232 953/298/256 954/299/257 930/274/233 +f 930/274/233 954/299/257 955/300/258 931/275/234 +f 931/275/234 955/300/258 956/301/259 932/276/235 +f 932/276/235 956/301/259 957/302/260 933/277/236 +f 933/277/236 957/302/260 958/303/261 934/278/237 +f 934/278/237 958/303/261 959/304/262 935/279/238 +f 935/279/238 959/304/262 960/305/263 936/280/239 +f 936/280/239 960/305/263 961/306/264 937/281/240 +f 937/281/240 961/306/264 962/307/265 938/282/241 +f 938/282/241 962/307/265 963/308/266 939/283/242 +f 939/283/242 963/308/266 964/309/267 940/284/243 +f 940/284/243 964/309/267 965/310/268 941/285/244 +f 941/285/244 965/310/268 966/311/269 942/286/245 +f 942/286/245 966/311/269 967/312/270 943/287/246 +f 943/287/246 967/312/270 968/313/271 944/288/247 +f 944/288/247 968/313/271 969/314/272 945/289/248 +f 945/289/248 969/314/272 970/315/273 946/290/249 +f 946/290/249 970/315/273 947/316/250 923/291/226 +f 947/292/250 971/317/274 972/318/275 948/293/251 +f 948/293/251 972/318/275 973/319/276 949/294/252 +f 949/294/252 973/319/276 974/320/277 950/295/253 +f 950/295/253 974/320/277 975/321/278 951/296/254 +f 951/296/254 975/321/278 976/322/279 952/297/255 +f 952/297/255 976/322/279 977/323/280 953/298/256 +f 953/298/256 977/323/280 978/324/281 954/299/257 +f 954/299/257 978/324/281 979/325/282 955/300/258 +f 955/300/258 979/325/282 980/326/283 956/301/259 +f 956/301/259 980/326/283 981/327/284 957/302/260 +f 957/302/260 981/327/284 982/328/285 958/303/261 +f 958/303/261 982/328/285 983/329/286 959/304/262 +f 959/304/262 983/329/286 984/330/287 960/305/263 +f 960/305/263 984/330/287 985/331/288 961/306/264 +f 961/306/264 985/331/288 986/332/289 962/307/265 +f 962/307/265 986/332/289 987/333/290 963/308/266 +f 963/308/266 987/333/290 988/334/291 964/309/267 +f 964/309/267 988/334/291 989/335/292 965/310/268 +f 965/310/268 989/335/292 990/336/293 966/311/269 +f 966/311/269 990/336/293 991/337/294 967/312/270 +f 967/312/270 991/337/294 992/338/295 968/313/271 +f 968/313/271 992/338/295 993/339/296 969/314/272 +f 969/314/272 993/339/296 994/340/297 970/315/273 +f 970/315/273 994/340/297 971/341/274 947/316/250 +f 729/4/298 731/67/34 732/70/37 +f 972/318/275 971/317/274 730/1/299 +f 729/342/298 732/70/37 733/72/39 +f 973/319/276 972/318/275 730/343/299 +f 729/344/298 733/72/39 734/74/41 +f 974/320/277 973/319/276 730/345/299 +f 729/346/298 734/74/41 735/76/43 +f 975/321/278 974/320/277 730/347/299 +f 729/348/298 735/76/43 736/78/45 +f 976/322/279 975/321/278 730/349/299 +f 729/350/298 736/78/45 737/80/47 +f 977/323/280 976/322/279 730/351/299 +f 729/352/298 737/80/47 738/82/49 +f 978/324/281 977/323/280 730/353/299 +f 729/354/298 738/82/49 739/84/51 +f 979/325/282 978/324/281 730/355/299 +f 729/356/298 739/84/51 740/86/53 +f 980/326/283 979/325/282 730/357/299 +f 729/358/298 740/86/53 741/88/55 +f 981/327/284 980/326/283 730/359/299 +f 729/360/298 741/88/55 742/90/57 +f 982/328/285 981/327/284 730/361/299 +f 729/362/298 742/90/57 743/92/59 +f 983/329/286 982/328/285 730/363/299 +f 729/364/298 743/92/59 744/94/61 +f 984/330/287 983/329/286 730/365/299 +f 729/366/298 744/94/61 745/96/63 +f 985/331/288 984/330/287 730/367/299 +f 729/368/298 745/96/63 746/98/65 +f 986/332/289 985/331/288 730/369/299 +f 729/370/298 746/98/65 747/100/67 +f 987/333/290 986/332/289 730/371/299 +f 729/372/298 747/100/67 748/102/69 +f 988/334/291 987/333/290 730/373/299 +f 729/374/298 748/102/69 749/104/71 +f 989/335/292 988/334/291 730/375/299 +f 729/376/298 749/104/71 750/106/73 +f 990/336/293 989/335/292 730/377/299 +f 729/378/298 750/106/73 751/108/75 +f 991/337/294 990/336/293 730/379/299 +f 729/380/298 751/108/75 752/110/77 +f 992/338/295 991/337/294 730/381/299 +f 729/382/298 752/110/77 753/112/79 +f 993/339/296 992/338/295 730/383/299 +f 729/384/298 753/112/79 754/114/81 +f 994/340/297 993/339/296 730/385/299 +f 729/386/298 754/114/81 731/116/34 +f 971/341/274 994/340/297 730/387/299 + +v 37.80797195434570 671.23242187500000 0.00000000000000 +v 37.80797195434570 742.81103515625000 0.00000000000000 +v 47.07093048095703 672.45190429687500 0.00000000000000 +v 46.75530242919922 672.45190429687500 2.39742946624756 +v 45.82992935180664 672.45190429687500 4.63147830963135 +v 44.35787200927734 672.45190429687500 6.54989910125732 +v 42.43945312500000 672.45190429687500 8.02195549011230 +v 40.20540237426758 672.45190429687500 8.94732856750488 +v 37.80797195434570 672.45190429687500 9.26295661926270 +v 35.41054534912109 672.45190429687500 8.94732856750488 +v 33.17649459838867 672.45190429687500 8.02195549011230 +v 31.25807380676270 672.45190429687500 6.54989910125732 +v 29.78601837158203 672.45190429687500 4.63147830963135 +v 28.86064529418945 672.45190429687500 2.39742946624756 +v 28.54501724243164 672.45190429687500 0.00000000000000 +v 28.86064529418945 672.45190429687500 -2.39742946624756 +v 29.78601837158203 672.45190429687500 -4.63147830963135 +v 31.25807380676270 672.45190429687500 -6.54989910125732 +v 33.17649459838867 672.45190429687500 -8.02195549011230 +v 35.41054534912109 672.45190429687500 -8.94732856750488 +v 37.80797195434570 672.45190429687500 -9.26295661926270 +v 40.20540237426758 672.45190429687500 -8.94732856750488 +v 42.43945312500000 672.45190429687500 -8.02195549011230 +v 44.35787200927734 672.45190429687500 -6.54989910125732 +v 45.82992935180664 672.45190429687500 -4.63147830963135 +v 46.75530242919922 672.45190429687500 -2.39742946624756 +v 55.70263290405273 676.02728271484375 0.00000000000000 +v 55.09288406372070 676.02728271484375 4.63147830963135 +v 53.30520248413086 676.02728271484375 8.94732856750488 +v 50.46140670776367 676.02728271484375 12.65343379974365 +v 46.75530242919922 676.02728271484375 15.49722766876221 +v 42.43945312500000 676.02728271484375 17.28491210937500 +v 37.80797195434570 676.02728271484375 17.89465713500977 +v 33.17649459838867 676.02728271484375 17.28491210937500 +v 28.86064529418945 676.02728271484375 15.49722766876221 +v 25.15453910827637 676.02728271484375 12.65343379974365 +v 22.31074523925781 676.02728271484375 8.94732856750488 +v 20.52306175231934 676.02728271484375 4.63147830963135 +v 19.91331672668457 676.02728271484375 0.00000000000000 +v 20.52306175231934 676.02728271484375 -4.63147830963135 +v 22.31074523925781 676.02728271484375 -8.94732856750488 +v 25.15453910827637 676.02728271484375 -12.65343379974365 +v 28.86064529418945 676.02728271484375 -15.49722766876221 +v 33.17649459838867 676.02728271484375 -17.28491210937500 +v 37.80797195434570 676.02728271484375 -17.89465713500977 +v 42.43945312500000 676.02728271484375 -17.28491210937500 +v 46.75530242919922 676.02728271484375 -15.49722766876221 +v 50.46140670776367 676.02728271484375 -12.65343379974365 +v 53.30520248413086 676.02728271484375 -8.94732856750488 +v 55.09288406372070 676.02728271484375 -4.63147830963135 +v 63.11484146118164 681.71484375000000 0.00000000000000 +v 62.25252914428711 681.71484375000000 6.54989910125732 +v 59.72436523437500 681.71484375000000 12.65343379974365 +v 55.70263290405273 681.71484375000000 17.89465713500977 +v 50.46140670776367 681.71484375000000 21.91638946533203 +v 44.35787200927734 681.71484375000000 24.44455718994141 +v 37.80797195434570 681.71484375000000 25.30686759948730 +v 31.25807380676270 681.71484375000000 24.44455718994141 +v 25.15453910827637 681.71484375000000 21.91638946533203 +v 19.91331672668457 681.71484375000000 17.89465713500977 +v 15.89158344268799 681.71484375000000 12.65343379974365 +v 13.36341667175293 681.71484375000000 6.54989910125732 +v 12.50110626220703 681.71484375000000 0.00000000000000 +v 13.36341667175293 681.71484375000000 -6.54989910125732 +v 15.89158344268799 681.71484375000000 -12.65343379974365 +v 19.91331672668457 681.71484375000000 -17.89465713500977 +v 25.15453910827637 681.71484375000000 -21.91638946533203 +v 31.25807380676270 681.71484375000000 -24.44455718994141 +v 37.80797195434570 681.71484375000000 -25.30686759948730 +v 44.35787200927734 681.71484375000000 -24.44455718994141 +v 50.46140670776367 681.71484375000000 -21.91638946533203 +v 55.70263290405273 681.71484375000000 -17.89465713500977 +v 59.72436523437500 681.71484375000000 -12.65343379974365 +v 62.25252914428711 681.71484375000000 -6.54989910125732 +v 68.80242919921875 689.12707519531250 0.00000000000000 +v 67.74632263183594 689.12707519531250 8.02195549011230 +v 64.64996337890625 689.12707519531250 15.49722766876221 +v 59.72436523437500 689.12707519531250 21.91638946533203 +v 53.30520248413086 689.12707519531250 26.84198570251465 +v 45.82992935180664 689.12707519531250 29.93834495544434 +v 37.80797195434570 689.12707519531250 30.99445533752441 +v 29.78601837158203 689.12707519531250 29.93834495544434 +v 22.31074523925781 689.12707519531250 26.84198570251465 +v 15.89158344268799 689.12707519531250 21.91638946533203 +v 10.96598720550537 689.12707519531250 15.49722766876221 +v 7.86962795257568 689.12707519531250 8.02195549011230 +v 6.81351709365845 689.12707519531250 0.00000000000000 +v 7.86962795257568 689.12707519531250 -8.02195549011230 +v 10.96598720550537 689.12707519531250 -15.49722766876221 +v 15.89158344268799 689.12707519531250 -21.91638946533203 +v 22.31074523925781 689.12707519531250 -26.84198570251465 +v 29.78601837158203 689.12707519531250 -29.93834495544434 +v 37.80797195434570 689.12707519531250 -30.99445533752441 +v 45.82992935180664 689.12707519531250 -29.93834495544434 +v 53.30520248413086 689.12707519531250 -26.84198570251465 +v 59.72436523437500 689.12707519531250 -21.91638946533203 +v 64.64996337890625 689.12707519531250 -15.49722766876221 +v 67.74632263183594 689.12707519531250 -8.02195549011230 +v 72.37779998779297 697.75878906250000 0.00000000000000 +v 71.19985961914062 697.75878906250000 8.94732856750488 +v 67.74632263183594 697.75878906250000 17.28491210937500 +v 62.25252914428711 697.75878906250000 24.44455718994141 +v 55.09288406372070 697.75878906250000 29.93834495544434 +v 46.75530242919922 697.75878906250000 33.39188385009766 +v 37.80797195434570 697.75878906250000 34.56982421875000 +v 28.86064529418945 697.75878906250000 33.39188385009766 +v 20.52306175231934 697.75878906250000 29.93834495544434 +v 13.36341667175293 697.75878906250000 24.44455718994141 +v 7.86962795257568 697.75878906250000 17.28491210937500 +v 4.41608762741089 697.75878906250000 8.94732856750488 +v 3.23814964294434 697.75878906250000 0.00000000000000 +v 4.41608762741089 697.75878906250000 -8.94732856750488 +v 7.86962795257568 697.75878906250000 -17.28491210937500 +v 13.36341667175293 697.75878906250000 -24.44455718994141 +v 20.52306175231934 697.75878906250000 -29.93834495544434 +v 28.86064529418945 697.75878906250000 -33.39188385009766 +v 37.80797195434570 697.75878906250000 -34.56982421875000 +v 46.75530242919922 697.75878906250000 -33.39188385009766 +v 55.09288406372070 697.75878906250000 -29.93834495544434 +v 62.25252914428711 697.75878906250000 -24.44455718994141 +v 67.74632263183594 697.75878906250000 -17.28491210937500 +v 71.19985961914062 697.75878906250000 -8.94732856750488 +v 73.59729003906250 707.02172851562500 0.00000000000000 +v 72.37779998779297 707.02172851562500 9.26295661926270 +v 68.80242919921875 707.02172851562500 17.89465713500977 +v 63.11484146118164 707.02172851562500 25.30686759948730 +v 55.70263290405273 707.02172851562500 30.99445533752441 +v 47.07093048095703 707.02172851562500 34.56982421875000 +v 37.80797195434570 707.02172851562500 35.78931427001953 +v 28.54501724243164 707.02172851562500 34.56982421875000 +v 19.91331672668457 707.02172851562500 30.99445533752441 +v 12.50110626220703 707.02172851562500 25.30686759948730 +v 6.81351709365845 707.02172851562500 17.89465713500977 +v 3.23814964294434 707.02172851562500 9.26295661926270 +v 2.01865816116333 707.02172851562500 0.00000000000000 +v 3.23814964294434 707.02172851562500 -9.26295661926270 +v 6.81351709365845 707.02172851562500 -17.89465713500977 +v 12.50110626220703 707.02172851562500 -25.30686759948730 +v 19.91331672668457 707.02172851562500 -30.99445533752441 +v 28.54501724243164 707.02172851562500 -34.56982421875000 +v 37.80797195434570 707.02172851562500 -35.78931427001953 +v 47.07093048095703 707.02172851562500 -34.56982421875000 +v 55.70263290405273 707.02172851562500 -30.99445533752441 +v 63.11484146118164 707.02172851562500 -25.30686759948730 +v 68.80242919921875 707.02172851562500 -17.89465713500977 +v 72.37779998779297 707.02172851562500 -9.26295661926270 +v 72.37779998779297 716.28466796875000 0.00000000000000 +v 71.19985961914062 716.28466796875000 8.94732856750488 +v 67.74632263183594 716.28466796875000 17.28491210937500 +v 62.25252914428711 716.28466796875000 24.44455718994141 +v 55.09288406372070 716.28466796875000 29.93834495544434 +v 46.75530242919922 716.28466796875000 33.39188385009766 +v 37.80797195434570 716.28466796875000 34.56982421875000 +v 28.86064529418945 716.28466796875000 33.39188385009766 +v 20.52306175231934 716.28466796875000 29.93834495544434 +v 13.36341667175293 716.28466796875000 24.44455718994141 +v 7.86962795257568 716.28466796875000 17.28491210937500 +v 4.41608762741089 716.28466796875000 8.94732856750488 +v 3.23814964294434 716.28466796875000 0.00000000000000 +v 4.41608762741089 716.28466796875000 -8.94732856750488 +v 7.86962795257568 716.28466796875000 -17.28491210937500 +v 13.36341667175293 716.28466796875000 -24.44455718994141 +v 20.52306175231934 716.28466796875000 -29.93834495544434 +v 28.86064529418945 716.28466796875000 -33.39188385009766 +v 37.80797195434570 716.28466796875000 -34.56982421875000 +v 46.75530242919922 716.28466796875000 -33.39188385009766 +v 55.09288406372070 716.28466796875000 -29.93834495544434 +v 62.25252914428711 716.28466796875000 -24.44455718994141 +v 67.74632263183594 716.28466796875000 -17.28491210937500 +v 71.19985961914062 716.28466796875000 -8.94732856750488 +v 68.80242919921875 724.91638183593750 0.00000000000000 +v 67.74632263183594 724.91638183593750 8.02195549011230 +v 64.64996337890625 724.91638183593750 15.49722766876221 +v 59.72436523437500 724.91638183593750 21.91638946533203 +v 53.30520248413086 724.91638183593750 26.84198570251465 +v 45.82992935180664 724.91638183593750 29.93834495544434 +v 37.80797195434570 724.91638183593750 30.99445533752441 +v 29.78601837158203 724.91638183593750 29.93834495544434 +v 22.31074523925781 724.91638183593750 26.84198570251465 +v 15.89158344268799 724.91638183593750 21.91638946533203 +v 10.96598720550537 724.91638183593750 15.49722766876221 +v 7.86962795257568 724.91638183593750 8.02195549011230 +v 6.81351709365845 724.91638183593750 0.00000000000000 +v 7.86962795257568 724.91638183593750 -8.02195549011230 +v 10.96598720550537 724.91638183593750 -15.49722766876221 +v 15.89158344268799 724.91638183593750 -21.91638946533203 +v 22.31074523925781 724.91638183593750 -26.84198570251465 +v 29.78601837158203 724.91638183593750 -29.93834495544434 +v 37.80797195434570 724.91638183593750 -30.99445533752441 +v 45.82992935180664 724.91638183593750 -29.93834495544434 +v 53.30520248413086 724.91638183593750 -26.84198570251465 +v 59.72436523437500 724.91638183593750 -21.91638946533203 +v 64.64996337890625 724.91638183593750 -15.49722766876221 +v 67.74632263183594 724.91638183593750 -8.02195549011230 +v 63.11484146118164 732.32861328125000 0.00000000000000 +v 62.25252914428711 732.32861328125000 6.54989910125732 +v 59.72436523437500 732.32861328125000 12.65343379974365 +v 55.70263290405273 732.32861328125000 17.89465713500977 +v 50.46140670776367 732.32861328125000 21.91638946533203 +v 44.35787200927734 732.32861328125000 24.44455718994141 +v 37.80797195434570 732.32861328125000 25.30686759948730 +v 31.25807380676270 732.32861328125000 24.44455718994141 +v 25.15453910827637 732.32861328125000 21.91638946533203 +v 19.91331672668457 732.32861328125000 17.89465713500977 +v 15.89158344268799 732.32861328125000 12.65343379974365 +v 13.36341667175293 732.32861328125000 6.54989910125732 +v 12.50110626220703 732.32861328125000 0.00000000000000 +v 13.36341667175293 732.32861328125000 -6.54989910125732 +v 15.89158344268799 732.32861328125000 -12.65343379974365 +v 19.91331672668457 732.32861328125000 -17.89465713500977 +v 25.15453910827637 732.32861328125000 -21.91638946533203 +v 31.25807380676270 732.32861328125000 -24.44455718994141 +v 37.80797195434570 732.32861328125000 -25.30686759948730 +v 44.35787200927734 732.32861328125000 -24.44455718994141 +v 50.46140670776367 732.32861328125000 -21.91638946533203 +v 55.70263290405273 732.32861328125000 -17.89465713500977 +v 59.72436523437500 732.32861328125000 -12.65343379974365 +v 62.25252914428711 732.32861328125000 -6.54989910125732 +v 55.70263290405273 738.01617431640625 0.00000000000000 +v 55.09288406372070 738.01617431640625 4.63147830963135 +v 53.30520248413086 738.01617431640625 8.94732856750488 +v 50.46140670776367 738.01617431640625 12.65343379974365 +v 46.75530242919922 738.01617431640625 15.49722766876221 +v 42.43945312500000 738.01617431640625 17.28491210937500 +v 37.80797195434570 738.01617431640625 17.89465713500977 +v 33.17649459838867 738.01617431640625 17.28491210937500 +v 28.86064529418945 738.01617431640625 15.49722766876221 +v 25.15453910827637 738.01617431640625 12.65343379974365 +v 22.31074523925781 738.01617431640625 8.94732856750488 +v 20.52306175231934 738.01617431640625 4.63147830963135 +v 19.91331672668457 738.01617431640625 0.00000000000000 +v 20.52306175231934 738.01617431640625 -4.63147830963135 +v 22.31074523925781 738.01617431640625 -8.94732856750488 +v 25.15453910827637 738.01617431640625 -12.65343379974365 +v 28.86064529418945 738.01617431640625 -15.49722766876221 +v 33.17649459838867 738.01617431640625 -17.28491210937500 +v 37.80797195434570 738.01617431640625 -17.89465713500977 +v 42.43945312500000 738.01617431640625 -17.28491210937500 +v 46.75530242919922 738.01617431640625 -15.49722766876221 +v 50.46140670776367 738.01617431640625 -12.65343379974365 +v 53.30520248413086 738.01617431640625 -8.94732856750488 +v 55.09288406372070 738.01617431640625 -4.63147830963135 +v 47.07093048095703 741.59155273437500 0.00000000000000 +v 46.75530242919922 741.59155273437500 2.39742946624756 +v 45.82992935180664 741.59155273437500 4.63147830963135 +v 44.35787200927734 741.59155273437500 6.54989910125732 +v 42.43945312500000 741.59155273437500 8.02195549011230 +v 40.20540237426758 741.59155273437500 8.94732856750488 +v 37.80797195434570 741.59155273437500 9.26295661926270 +v 35.41054534912109 741.59155273437500 8.94732856750488 +v 33.17649459838867 741.59155273437500 8.02195549011230 +v 31.25807380676270 741.59155273437500 6.54989910125732 +v 29.78601837158203 741.59155273437500 4.63147830963135 +v 28.86064529418945 741.59155273437500 2.39742946624756 +v 28.54501724243164 741.59155273437500 0.00000000000000 +v 28.86064529418945 741.59155273437500 -2.39742946624756 +v 29.78601837158203 741.59155273437500 -4.63147830963135 +v 31.25807380676270 741.59155273437500 -6.54989910125732 +v 33.17649459838867 741.59155273437500 -8.02195549011230 +v 35.41054534912109 741.59155273437500 -8.94732856750488 +v 37.80797195434570 741.59155273437500 -9.26295661926270 +v 40.20540237426758 741.59155273437500 -8.94732856750488 +v 42.43945312500000 741.59155273437500 -8.02195549011230 +v 44.35787200927734 741.59155273437500 -6.54989910125732 +v 45.82992935180664 741.59155273437500 -4.63147830963135 +v 46.75530242919922 741.59155273437500 -2.39742946624756 +# 266 vertices + +# 0 normal + +# 0 texture coordinate + +g 球体 +usemtl 材质.1 +f 997/67/34 1021/68/35 1022/69/36 998/70/37 +f 998/70/37 1022/69/36 1023/71/38 999/72/39 +f 999/72/39 1023/71/38 1024/73/40 1000/74/41 +f 1000/74/41 1024/73/40 1025/75/42 1001/76/43 +f 1001/76/43 1025/75/42 1026/77/44 1002/78/45 +f 1002/78/45 1026/77/44 1027/79/46 1003/80/47 +f 1003/80/47 1027/79/46 1028/81/48 1004/82/49 +f 1004/82/49 1028/81/48 1029/83/50 1005/84/51 +f 1005/84/51 1029/83/50 1030/85/52 1006/86/53 +f 1006/86/53 1030/85/52 1031/87/54 1007/88/55 +f 1007/88/55 1031/87/54 1032/89/56 1008/90/57 +f 1008/90/57 1032/89/56 1033/91/58 1009/92/59 +f 1009/92/59 1033/91/58 1034/93/60 1010/94/61 +f 1010/94/61 1034/93/60 1035/95/62 1011/96/63 +f 1011/96/63 1035/95/62 1036/97/64 1012/98/65 +f 1012/98/65 1036/97/64 1037/99/66 1013/100/67 +f 1013/100/67 1037/99/66 1038/101/68 1014/102/69 +f 1014/102/69 1038/101/68 1039/103/70 1015/104/71 +f 1015/104/71 1039/103/70 1040/105/72 1016/106/73 +f 1016/106/73 1040/105/72 1041/107/74 1017/108/75 +f 1017/108/75 1041/107/74 1042/109/76 1018/110/77 +f 1018/110/77 1042/109/76 1043/111/78 1019/112/79 +f 1019/112/79 1043/111/78 1044/113/80 1020/114/81 +f 1020/114/81 1044/113/80 1021/115/35 997/116/34 +f 1021/68/35 1045/117/82 1046/118/83 1022/69/36 +f 1022/69/36 1046/118/83 1047/119/84 1023/71/38 +f 1023/71/38 1047/119/84 1048/120/85 1024/73/40 +f 1024/73/40 1048/120/85 1049/121/86 1025/75/42 +f 1025/75/42 1049/121/86 1050/122/87 1026/77/44 +f 1026/77/44 1050/122/87 1051/123/88 1027/79/46 +f 1027/79/46 1051/123/88 1052/124/89 1028/81/48 +f 1028/81/48 1052/124/89 1053/125/90 1029/83/50 +f 1029/83/50 1053/125/90 1054/126/91 1030/85/52 +f 1030/85/52 1054/126/91 1055/127/92 1031/87/54 +f 1031/87/54 1055/127/92 1056/128/93 1032/89/56 +f 1032/89/56 1056/128/93 1057/129/94 1033/91/58 +f 1033/91/58 1057/129/94 1058/130/95 1034/93/60 +f 1034/93/60 1058/130/95 1059/131/96 1035/95/62 +f 1035/95/62 1059/131/96 1060/132/97 1036/97/64 +f 1036/97/64 1060/132/97 1061/133/98 1037/99/66 +f 1037/99/66 1061/133/98 1062/134/99 1038/101/68 +f 1038/101/68 1062/134/99 1063/135/100 1039/103/70 +f 1039/103/70 1063/135/100 1064/136/101 1040/105/72 +f 1040/105/72 1064/136/101 1065/137/102 1041/107/74 +f 1041/107/74 1065/137/102 1066/138/103 1042/109/76 +f 1042/109/76 1066/138/103 1067/139/104 1043/111/78 +f 1043/111/78 1067/139/104 1068/140/105 1044/113/80 +f 1044/113/80 1068/140/105 1045/141/82 1021/115/35 +f 1045/117/82 1069/142/106 1070/143/107 1046/118/83 +f 1046/118/83 1070/143/107 1071/144/108 1047/119/84 +f 1047/119/84 1071/144/108 1072/145/109 1048/120/85 +f 1048/120/85 1072/145/109 1073/146/110 1049/121/86 +f 1049/121/86 1073/146/110 1074/147/111 1050/122/87 +f 1050/122/87 1074/147/111 1075/148/112 1051/123/88 +f 1051/123/88 1075/148/112 1076/149/113 1052/124/89 +f 1052/124/89 1076/149/113 1077/150/114 1053/125/90 +f 1053/125/90 1077/150/114 1078/151/115 1054/126/91 +f 1054/126/91 1078/151/115 1079/152/116 1055/127/92 +f 1055/127/92 1079/152/116 1080/153/117 1056/128/93 +f 1056/128/93 1080/153/117 1081/154/118 1057/129/94 +f 1057/129/94 1081/154/118 1082/155/119 1058/130/95 +f 1058/130/95 1082/155/119 1083/156/120 1059/131/96 +f 1059/131/96 1083/156/120 1084/157/121 1060/132/97 +f 1060/132/97 1084/157/121 1085/158/122 1061/133/98 +f 1061/133/98 1085/158/122 1086/159/123 1062/134/99 +f 1062/134/99 1086/159/123 1087/160/124 1063/135/100 +f 1063/135/100 1087/160/124 1088/161/125 1064/136/101 +f 1064/136/101 1088/161/125 1089/162/126 1065/137/102 +f 1065/137/102 1089/162/126 1090/163/127 1066/138/103 +f 1066/138/103 1090/163/127 1091/164/128 1067/139/104 +f 1067/139/104 1091/164/128 1092/165/129 1068/140/105 +f 1068/140/105 1092/165/129 1069/166/106 1045/141/82 +f 1069/142/106 1093/167/130 1094/168/131 1070/143/107 +f 1070/143/107 1094/168/131 1095/169/132 1071/144/108 +f 1071/144/108 1095/169/132 1096/170/133 1072/145/109 +f 1072/145/109 1096/170/133 1097/171/134 1073/146/110 +f 1073/146/110 1097/171/134 1098/172/135 1074/147/111 +f 1074/147/111 1098/172/135 1099/173/136 1075/148/112 +f 1075/148/112 1099/173/136 1100/174/137 1076/149/113 +f 1076/149/113 1100/174/137 1101/175/138 1077/150/114 +f 1077/150/114 1101/175/138 1102/176/139 1078/151/115 +f 1078/151/115 1102/176/139 1103/177/140 1079/152/116 +f 1079/152/116 1103/177/140 1104/178/141 1080/153/117 +f 1080/153/117 1104/178/141 1105/179/142 1081/154/118 +f 1081/154/118 1105/179/142 1106/180/143 1082/155/119 +f 1082/155/119 1106/180/143 1107/181/144 1083/156/120 +f 1083/156/120 1107/181/144 1108/182/145 1084/157/121 +f 1084/157/121 1108/182/145 1109/183/146 1085/158/122 +f 1085/158/122 1109/183/146 1110/184/147 1086/159/123 +f 1086/159/123 1110/184/147 1111/185/148 1087/160/124 +f 1087/160/124 1111/185/148 1112/186/149 1088/161/125 +f 1088/161/125 1112/186/149 1113/187/150 1089/162/126 +f 1089/162/126 1113/187/150 1114/188/151 1090/163/127 +f 1090/163/127 1114/188/151 1115/189/152 1091/164/128 +f 1091/164/128 1115/189/152 1116/190/153 1092/165/129 +f 1092/165/129 1116/190/153 1093/191/130 1069/166/106 +f 1093/167/130 1117/192/154 1118/193/155 1094/168/131 +f 1094/168/131 1118/193/155 1119/194/156 1095/169/132 +f 1095/169/132 1119/194/156 1120/195/157 1096/170/133 +f 1096/170/133 1120/195/157 1121/196/158 1097/171/134 +f 1097/171/134 1121/196/158 1122/197/159 1098/172/135 +f 1098/172/135 1122/197/159 1123/198/160 1099/173/136 +f 1099/173/136 1123/198/160 1124/199/161 1100/174/137 +f 1100/174/137 1124/199/161 1125/200/162 1101/175/138 +f 1101/175/138 1125/200/162 1126/201/163 1102/176/139 +f 1102/176/139 1126/201/163 1127/202/164 1103/177/140 +f 1103/177/140 1127/202/164 1128/203/165 1104/178/141 +f 1104/178/141 1128/203/165 1129/204/166 1105/179/142 +f 1105/179/142 1129/204/166 1130/205/167 1106/180/143 +f 1106/180/143 1130/205/167 1131/206/168 1107/181/144 +f 1107/181/144 1131/206/168 1132/207/169 1108/182/145 +f 1108/182/145 1132/207/169 1133/208/170 1109/183/146 +f 1109/183/146 1133/208/170 1134/209/171 1110/184/147 +f 1110/184/147 1134/209/171 1135/210/172 1111/185/148 +f 1111/185/148 1135/210/172 1136/211/173 1112/186/149 +f 1112/186/149 1136/211/173 1137/212/174 1113/187/150 +f 1113/187/150 1137/212/174 1138/213/175 1114/188/151 +f 1114/188/151 1138/213/175 1139/214/176 1115/189/152 +f 1115/189/152 1139/214/176 1140/215/177 1116/190/153 +f 1116/190/153 1140/215/177 1117/216/154 1093/191/130 +f 1117/192/154 1141/217/178 1142/218/179 1118/193/155 +f 1118/193/155 1142/218/179 1143/219/180 1119/194/156 +f 1119/194/156 1143/219/180 1144/220/181 1120/195/157 +f 1120/195/157 1144/220/181 1145/221/182 1121/196/158 +f 1121/196/158 1145/221/182 1146/222/183 1122/197/159 +f 1122/197/159 1146/222/183 1147/223/184 1123/198/160 +f 1123/198/160 1147/223/184 1148/224/185 1124/199/161 +f 1124/199/161 1148/224/185 1149/225/186 1125/200/162 +f 1125/200/162 1149/225/186 1150/226/187 1126/201/163 +f 1126/201/163 1150/226/187 1151/227/188 1127/202/164 +f 1127/202/164 1151/227/188 1152/228/189 1128/203/165 +f 1128/203/165 1152/228/189 1153/229/190 1129/204/166 +f 1129/204/166 1153/229/190 1154/230/191 1130/205/167 +f 1130/205/167 1154/230/191 1155/231/192 1131/206/168 +f 1131/206/168 1155/231/192 1156/232/193 1132/207/169 +f 1132/207/169 1156/232/193 1157/233/194 1133/208/170 +f 1133/208/170 1157/233/194 1158/234/195 1134/209/171 +f 1134/209/171 1158/234/195 1159/235/196 1135/210/172 +f 1135/210/172 1159/235/196 1160/236/197 1136/211/173 +f 1136/211/173 1160/236/197 1161/237/198 1137/212/174 +f 1137/212/174 1161/237/198 1162/238/199 1138/213/175 +f 1138/213/175 1162/238/199 1163/239/200 1139/214/176 +f 1139/214/176 1163/239/200 1164/240/201 1140/215/177 +f 1140/215/177 1164/240/201 1141/241/178 1117/216/154 +f 1141/217/178 1165/242/202 1166/243/203 1142/218/179 +f 1142/218/179 1166/243/203 1167/244/204 1143/219/180 +f 1143/219/180 1167/244/204 1168/245/205 1144/220/181 +f 1144/220/181 1168/245/205 1169/246/206 1145/221/182 +f 1145/221/182 1169/246/206 1170/247/207 1146/222/183 +f 1146/222/183 1170/247/207 1171/248/208 1147/223/184 +f 1147/223/184 1171/248/208 1172/249/209 1148/224/185 +f 1148/224/185 1172/249/209 1173/250/210 1149/225/186 +f 1149/225/186 1173/250/210 1174/251/211 1150/226/187 +f 1150/226/187 1174/251/211 1175/252/212 1151/227/188 +f 1151/227/188 1175/252/212 1176/253/213 1152/228/189 +f 1152/228/189 1176/253/213 1177/254/214 1153/229/190 +f 1153/229/190 1177/254/214 1178/255/215 1154/230/191 +f 1154/230/191 1178/255/215 1179/256/216 1155/231/192 +f 1155/231/192 1179/256/216 1180/257/217 1156/232/193 +f 1156/232/193 1180/257/217 1181/258/218 1157/233/194 +f 1157/233/194 1181/258/218 1182/259/219 1158/234/195 +f 1158/234/195 1182/259/219 1183/260/220 1159/235/196 +f 1159/235/196 1183/260/220 1184/261/221 1160/236/197 +f 1160/236/197 1184/261/221 1185/262/222 1161/237/198 +f 1161/237/198 1185/262/222 1186/263/223 1162/238/199 +f 1162/238/199 1186/263/223 1187/264/224 1163/239/200 +f 1163/239/200 1187/264/224 1188/265/225 1164/240/201 +f 1164/240/201 1188/265/225 1165/266/202 1141/241/178 +f 1165/242/202 1189/267/226 1190/268/227 1166/243/203 +f 1166/243/203 1190/268/227 1191/269/228 1167/244/204 +f 1167/244/204 1191/269/228 1192/270/229 1168/245/205 +f 1168/245/205 1192/270/229 1193/271/230 1169/246/206 +f 1169/246/206 1193/271/230 1194/272/231 1170/247/207 +f 1170/247/207 1194/272/231 1195/273/232 1171/248/208 +f 1171/248/208 1195/273/232 1196/274/233 1172/249/209 +f 1172/249/209 1196/274/233 1197/275/234 1173/250/210 +f 1173/250/210 1197/275/234 1198/276/235 1174/251/211 +f 1174/251/211 1198/276/235 1199/277/236 1175/252/212 +f 1175/252/212 1199/277/236 1200/278/237 1176/253/213 +f 1176/253/213 1200/278/237 1201/279/238 1177/254/214 +f 1177/254/214 1201/279/238 1202/280/239 1178/255/215 +f 1178/255/215 1202/280/239 1203/281/240 1179/256/216 +f 1179/256/216 1203/281/240 1204/282/241 1180/257/217 +f 1180/257/217 1204/282/241 1205/283/242 1181/258/218 +f 1181/258/218 1205/283/242 1206/284/243 1182/259/219 +f 1182/259/219 1206/284/243 1207/285/244 1183/260/220 +f 1183/260/220 1207/285/244 1208/286/245 1184/261/221 +f 1184/261/221 1208/286/245 1209/287/246 1185/262/222 +f 1185/262/222 1209/287/246 1210/288/247 1186/263/223 +f 1186/263/223 1210/288/247 1211/289/248 1187/264/224 +f 1187/264/224 1211/289/248 1212/290/249 1188/265/225 +f 1188/265/225 1212/290/249 1189/291/226 1165/266/202 +f 1189/267/226 1213/292/250 1214/293/251 1190/268/227 +f 1190/268/227 1214/293/251 1215/294/252 1191/269/228 +f 1191/269/228 1215/294/252 1216/295/253 1192/270/229 +f 1192/270/229 1216/295/253 1217/296/254 1193/271/230 +f 1193/271/230 1217/296/254 1218/297/255 1194/272/231 +f 1194/272/231 1218/297/255 1219/298/256 1195/273/232 +f 1195/273/232 1219/298/256 1220/299/257 1196/274/233 +f 1196/274/233 1220/299/257 1221/300/258 1197/275/234 +f 1197/275/234 1221/300/258 1222/301/259 1198/276/235 +f 1198/276/235 1222/301/259 1223/302/260 1199/277/236 +f 1199/277/236 1223/302/260 1224/303/261 1200/278/237 +f 1200/278/237 1224/303/261 1225/304/262 1201/279/238 +f 1201/279/238 1225/304/262 1226/305/263 1202/280/239 +f 1202/280/239 1226/305/263 1227/306/264 1203/281/240 +f 1203/281/240 1227/306/264 1228/307/265 1204/282/241 +f 1204/282/241 1228/307/265 1229/308/266 1205/283/242 +f 1205/283/242 1229/308/266 1230/309/267 1206/284/243 +f 1206/284/243 1230/309/267 1231/310/268 1207/285/244 +f 1207/285/244 1231/310/268 1232/311/269 1208/286/245 +f 1208/286/245 1232/311/269 1233/312/270 1209/287/246 +f 1209/287/246 1233/312/270 1234/313/271 1210/288/247 +f 1210/288/247 1234/313/271 1235/314/272 1211/289/248 +f 1211/289/248 1235/314/272 1236/315/273 1212/290/249 +f 1212/290/249 1236/315/273 1213/316/250 1189/291/226 +f 1213/292/250 1237/317/274 1238/318/275 1214/293/251 +f 1214/293/251 1238/318/275 1239/319/276 1215/294/252 +f 1215/294/252 1239/319/276 1240/320/277 1216/295/253 +f 1216/295/253 1240/320/277 1241/321/278 1217/296/254 +f 1217/296/254 1241/321/278 1242/322/279 1218/297/255 +f 1218/297/255 1242/322/279 1243/323/280 1219/298/256 +f 1219/298/256 1243/323/280 1244/324/281 1220/299/257 +f 1220/299/257 1244/324/281 1245/325/282 1221/300/258 +f 1221/300/258 1245/325/282 1246/326/283 1222/301/259 +f 1222/301/259 1246/326/283 1247/327/284 1223/302/260 +f 1223/302/260 1247/327/284 1248/328/285 1224/303/261 +f 1224/303/261 1248/328/285 1249/329/286 1225/304/262 +f 1225/304/262 1249/329/286 1250/330/287 1226/305/263 +f 1226/305/263 1250/330/287 1251/331/288 1227/306/264 +f 1227/306/264 1251/331/288 1252/332/289 1228/307/265 +f 1228/307/265 1252/332/289 1253/333/290 1229/308/266 +f 1229/308/266 1253/333/290 1254/334/291 1230/309/267 +f 1230/309/267 1254/334/291 1255/335/292 1231/310/268 +f 1231/310/268 1255/335/292 1256/336/293 1232/311/269 +f 1232/311/269 1256/336/293 1257/337/294 1233/312/270 +f 1233/312/270 1257/337/294 1258/338/295 1234/313/271 +f 1234/313/271 1258/338/295 1259/339/296 1235/314/272 +f 1235/314/272 1259/339/296 1260/340/297 1236/315/273 +f 1236/315/273 1260/340/297 1237/341/274 1213/316/250 +f 995/4/298 997/67/34 998/70/37 +f 1238/318/275 1237/317/274 996/1/299 +f 995/342/298 998/70/37 999/72/39 +f 1239/319/276 1238/318/275 996/343/299 +f 995/344/298 999/72/39 1000/74/41 +f 1240/320/277 1239/319/276 996/345/299 +f 995/346/298 1000/74/41 1001/76/43 +f 1241/321/278 1240/320/277 996/347/299 +f 995/348/298 1001/76/43 1002/78/45 +f 1242/322/279 1241/321/278 996/349/299 +f 995/350/298 1002/78/45 1003/80/47 +f 1243/323/280 1242/322/279 996/351/299 +f 995/352/298 1003/80/47 1004/82/49 +f 1244/324/281 1243/323/280 996/353/299 +f 995/354/298 1004/82/49 1005/84/51 +f 1245/325/282 1244/324/281 996/355/299 +f 995/356/298 1005/84/51 1006/86/53 +f 1246/326/283 1245/325/282 996/357/299 +f 995/358/298 1006/86/53 1007/88/55 +f 1247/327/284 1246/326/283 996/359/299 +f 995/360/298 1007/88/55 1008/90/57 +f 1248/328/285 1247/327/284 996/361/299 +f 995/362/298 1008/90/57 1009/92/59 +f 1249/329/286 1248/328/285 996/363/299 +f 995/364/298 1009/92/59 1010/94/61 +f 1250/330/287 1249/329/286 996/365/299 +f 995/366/298 1010/94/61 1011/96/63 +f 1251/331/288 1250/330/287 996/367/299 +f 995/368/298 1011/96/63 1012/98/65 +f 1252/332/289 1251/331/288 996/369/299 +f 995/370/298 1012/98/65 1013/100/67 +f 1253/333/290 1252/332/289 996/371/299 +f 995/372/298 1013/100/67 1014/102/69 +f 1254/334/291 1253/333/290 996/373/299 +f 995/374/298 1014/102/69 1015/104/71 +f 1255/335/292 1254/334/291 996/375/299 +f 995/376/298 1015/104/71 1016/106/73 +f 1256/336/293 1255/335/292 996/377/299 +f 995/378/298 1016/106/73 1017/108/75 +f 1257/337/294 1256/336/293 996/379/299 +f 995/380/298 1017/108/75 1018/110/77 +f 1258/338/295 1257/337/294 996/381/299 +f 995/382/298 1018/110/77 1019/112/79 +f 1259/339/296 1258/338/295 996/383/299 +f 995/384/298 1019/112/79 1020/114/81 +f 1260/340/297 1259/339/296 996/385/299 +f 995/386/298 1020/114/81 997/116/34 +f 1237/341/274 1260/340/297 996/387/299 + +v 10.00000000000000 3.03830289840698 0.00000000000000 +v 10.00000000000000 513.01434326171875 0.00000000000000 +v 26.35600280761719 3.03830289840698 0.00000000000000 +v 26.35600280761719 513.01434326171875 0.00000000000000 +v 26.10751914978027 3.03830289840698 2.84019017219543 +v 26.10751914978027 513.01434326171875 2.84019017219543 +v 25.36961555480957 3.03830289840698 5.59408235549927 +v 25.36961555480957 513.01434326171875 5.59408235549927 +v 24.16471290588379 3.03830289840698 8.17800140380859 +v 24.16471290588379 513.01434326171875 8.17800140380859 +v 22.52942466735840 3.03830289840698 10.51343631744385 +v 22.52942466735840 513.01434326171875 10.51343631744385 +v 20.51343536376953 3.03830289840698 12.52942466735840 +v 20.51343536376953 513.01434326171875 12.52942466735840 +v 18.17800140380859 3.03830289840698 14.16471385955811 +v 18.17800140380859 513.01434326171875 14.16471385955811 +v 15.59408283233643 3.03830289840698 15.36961460113525 +v 15.59408283233643 513.01434326171875 15.36961460113525 +v 12.84018993377686 3.03830289840698 16.10751914978027 +v 12.84018993377686 513.01434326171875 16.10751914978027 +v 10.00000000000000 3.03830289840698 16.35600280761719 +v 10.00000000000000 513.01434326171875 16.35600280761719 +v 7.15981006622314 3.03830289840698 16.10751914978027 +v 7.15981006622314 513.01434326171875 16.10751914978027 +v 4.40591764450073 3.03830289840698 15.36961460113525 +v 4.40591764450073 513.01434326171875 15.36961460113525 +v 1.82199859619141 3.03830289840698 14.16471385955811 +v 1.82199859619141 513.01434326171875 14.16471385955811 +v -0.51343590021133 3.03830289840698 12.52942466735840 +v -0.51343590021133 513.01434326171875 12.52942466735840 +v -2.52942490577698 3.03830289840698 10.51343631744385 +v -2.52942490577698 513.01434326171875 10.51343631744385 +v -4.16471385955811 3.03830289840698 8.17800140380859 +v -4.16471385955811 513.01434326171875 8.17800140380859 +v -5.36961507797241 3.03830289840698 5.59408235549927 +v -5.36961507797241 513.01434326171875 5.59408235549927 +v -6.10751819610596 3.03830289840698 2.84019017219543 +v -6.10751819610596 513.01434326171875 2.84019017219543 +v -6.35600280761719 3.03830289840698 0.00000000000000 +v -6.35600280761719 513.01434326171875 0.00000000000000 +v -6.10751819610596 3.03830289840698 -2.84019017219543 +v -6.10751819610596 513.01434326171875 -2.84019017219543 +v -5.36961507797241 3.03830289840698 -5.59408235549927 +v -5.36961507797241 513.01434326171875 -5.59408235549927 +v -4.16471385955811 3.03830289840698 -8.17800140380859 +v -4.16471385955811 513.01434326171875 -8.17800140380859 +v -2.52942490577698 3.03830289840698 -10.51343631744385 +v -2.52942490577698 513.01434326171875 -10.51343631744385 +v -0.51343590021133 3.03830289840698 -12.52942466735840 +v -0.51343590021133 513.01434326171875 -12.52942466735840 +v 1.82199859619141 3.03830289840698 -14.16471385955811 +v 1.82199859619141 513.01434326171875 -14.16471385955811 +v 4.40591764450073 3.03830289840698 -15.36961460113525 +v 4.40591764450073 513.01434326171875 -15.36961460113525 +v 7.15981006622314 3.03830289840698 -16.10751914978027 +v 7.15981006622314 513.01434326171875 -16.10751914978027 +v 10.00000000000000 3.03830289840698 -16.35600280761719 +v 10.00000000000000 513.01434326171875 -16.35600280761719 +v 12.84018993377686 3.03830289840698 -16.10751914978027 +v 12.84018993377686 513.01434326171875 -16.10751914978027 +v 15.59408283233643 3.03830289840698 -15.36961460113525 +v 15.59408283233643 513.01434326171875 -15.36961460113525 +v 18.17800140380859 3.03830289840698 -14.16471385955811 +v 18.17800140380859 513.01434326171875 -14.16471385955811 +v 20.51343536376953 3.03830289840698 -12.52942466735840 +v 20.51343536376953 513.01434326171875 -12.52942466735840 +v 22.52942466735840 3.03830289840698 -10.51343631744385 +v 22.52942466735840 513.01434326171875 -10.51343631744385 +v 24.16471290588379 3.03830289840698 -8.17800140380859 +v 24.16471290588379 513.01434326171875 -8.17800140380859 +v 25.36961555480957 3.03830289840698 -5.59408235549927 +v 25.36961555480957 513.01434326171875 -5.59408235549927 +v 26.10751914978027 3.03830289840698 -2.84019017219543 +v 26.10751914978027 513.01434326171875 -2.84019017219543 +# 74 vertices + +vn 0.98481088876724 0.00000000000000 0.17363022267818 +vn 0.93969851732254 0.00000000000000 0.34200400114059 +vn 0.76604211330414 0.00000000000000 0.64279037714005 +vn 0.64279037714005 0.00000000000000 0.76604211330414 +vn 0.34200400114059 0.00000000000000 0.93969851732254 +vn 0.17363022267818 0.00000000000000 0.98481088876724 +vn -0.17363022267818 0.00000000000000 0.98481088876724 +vn -0.34200400114059 0.00000000000000 0.93969851732254 +vn -0.64279037714005 0.00000000000000 0.76604211330414 +vn -0.76604211330414 0.00000000000000 0.64279037714005 +vn -0.93969851732254 0.00000000000000 0.34200400114059 +vn -0.98481088876724 0.00000000000000 0.17363022267818 +vn -0.98481088876724 0.00000000000000 -0.17363022267818 +vn -0.93969851732254 0.00000000000000 -0.34200400114059 +vn -0.76604211330414 0.00000000000000 -0.64279037714005 +vn -0.64279037714005 0.00000000000000 -0.76604211330414 +vn -0.34200400114059 0.00000000000000 -0.93969851732254 +vn -0.17363022267818 0.00000000000000 -0.98481088876724 +vn 0.17363022267818 0.00000000000000 -0.98481088876724 +vn 0.34200400114059 0.00000000000000 -0.93969851732254 +vn 0.64279037714005 0.00000000000000 -0.76604211330414 +vn 0.76604211330414 0.00000000000000 -0.64279037714005 +vn 0.93969851732254 0.00000000000000 -0.34200400114059 +vn 0.98481088876724 0.00000000000000 -0.17363022267818 +# 24 normals + +vt 0.00759612349793 0.58682411909103 0.00000000000000 +vt 0.02777777798474 1.00000000000000 0.00000000000000 +vt 0.02777777798474 0.00000000000000 0.00000000000000 +vt 0.99240386486053 0.58682411909103 0.00000000000000 +vt 0.03015368990600 0.67101007699966 0.00000000000000 +vt 0.05555555596948 1.00000000000000 0.00000000000000 +vt 0.05555555596948 0.00000000000000 0.00000000000000 +vt 0.96984630823135 0.67101007699966 0.00000000000000 +vt 0.06698729842901 0.75000000000000 0.00000000000000 +vt 0.93301272392273 0.75000000000000 0.00000000000000 +vt 0.11697778105736 0.82139384746552 0.00000000000000 +vt 0.11111111193895 1.00000000000000 0.00000000000000 +vt 0.11111111193895 0.00000000000000 0.00000000000000 +vt 0.88302224874496 0.82139384746552 0.00000000000000 +vt 0.17860619723797 0.88302218914032 0.00000000000000 +vt 0.13888889551163 1.00000000000000 0.00000000000000 +vt 0.13888889551163 0.00000000000000 0.00000000000000 +vt 0.82139378786087 0.88302218914032 0.00000000000000 +vt 0.25000000000000 0.93301272392273 0.00000000000000 +vt 0.75000000000000 0.93301272392273 0.00000000000000 +vt 0.32898992300034 0.96984630823135 0.00000000000000 +vt 0.19444444775581 1.00000000000000 0.00000000000000 +vt 0.19444444775581 0.00000000000000 0.00000000000000 +vt 0.67101007699966 0.96984630823135 0.00000000000000 +vt 0.41317591071129 0.99240386486053 0.00000000000000 +vt 0.22222222387791 1.00000000000000 0.00000000000000 +vt 0.22222222387791 0.00000000000000 0.00000000000000 +vt 0.58682405948639 0.99240386486053 0.00000000000000 +vt 0.27777779102325 1.00000000000000 0.00000000000000 +vt 0.27777779102325 0.00000000000000 0.00000000000000 +vt 0.30555555224419 1.00000000000000 0.00000000000000 +vt 0.30555555224419 0.00000000000000 0.00000000000000 +vt 0.36111110448837 1.00000000000000 0.00000000000000 +vt 0.36111110448837 0.00000000000000 0.00000000000000 +vt 0.38888889551163 1.00000000000000 0.00000000000000 +vt 0.38888889551163 0.00000000000000 0.00000000000000 +vt 0.44444444775581 1.00000000000000 0.00000000000000 +vt 0.44444444775581 0.00000000000000 0.00000000000000 +vt 0.47222220897675 1.00000000000000 0.00000000000000 +vt 0.47222220897675 0.00000000000000 0.00000000000000 +vt 0.99240386486053 0.41317594051361 0.00000000000000 +vt 0.52777779102325 1.00000000000000 0.00000000000000 +vt 0.52777779102325 0.00000000000000 0.00000000000000 +vt 0.00759612349793 0.41317594051361 0.00000000000000 +vt 0.96984630823135 0.32898998260498 0.00000000000000 +vt 0.55555558204651 1.00000000000000 0.00000000000000 +vt 0.55555558204651 0.00000000000000 0.00000000000000 +vt 0.03015368990600 0.32898998260498 0.00000000000000 +vt 0.93301272392273 0.25000000000000 0.00000000000000 +vt 0.06698729842901 0.25000000000000 0.00000000000000 +vt 0.88302224874496 0.17860627174377 0.00000000000000 +vt 0.61111110448837 1.00000000000000 0.00000000000000 +vt 0.61111110448837 0.00000000000000 0.00000000000000 +vt 0.11697778105736 0.17860627174377 0.00000000000000 +vt 0.82139378786087 0.11697781085968 0.00000000000000 +vt 0.63888889551163 1.00000000000000 0.00000000000000 +vt 0.63888889551163 0.00000000000000 0.00000000000000 +vt 0.17860619723797 0.11697781085968 0.00000000000000 +vt 0.75000000000000 0.06698727607727 0.00000000000000 +vt 0.25000000000000 0.06698727607727 0.00000000000000 +vt 0.67101007699966 0.03015375137329 0.00000000000000 +vt 0.69444441795349 1.00000000000000 0.00000000000000 +vt 0.69444441795349 0.00000000000000 0.00000000000000 +vt 0.32898992300034 0.03015375137329 0.00000000000000 +vt 0.58682405948639 0.00759613513947 0.00000000000000 +vt 0.72222220897675 1.00000000000000 0.00000000000000 +vt 0.72222220897675 0.00000000000000 0.00000000000000 +vt 0.41317591071129 0.00759613513947 0.00000000000000 +vt 0.77777779102325 1.00000000000000 0.00000000000000 +vt 0.77777779102325 0.00000000000000 0.00000000000000 +vt 0.80555558204651 1.00000000000000 0.00000000000000 +vt 0.80555558204651 0.00000000000000 0.00000000000000 +vt 0.86111110448837 1.00000000000000 0.00000000000000 +vt 0.86111110448837 0.00000000000000 0.00000000000000 +vt 0.88888889551163 1.00000000000000 0.00000000000000 +vt 0.88888889551163 0.00000000000000 0.00000000000000 +vt 0.94444441795349 1.00000000000000 0.00000000000000 +vt 0.94444441795349 0.00000000000000 0.00000000000000 +vt 0.97222220897675 1.00000000000000 0.00000000000000 +vt 0.97222220897675 0.00000000000000 0.00000000000000 +# 80 texture coordinates + +g 圆柱 +usemtl 材质 +f 1261/204/298 1263/192/298 1265/388/298 +f 1263/4/154 1264/1/154 1266/389/300 1265/390/300 +f 1264/216/299 1262/204/299 1266/391/299 +f 1261/204/298 1265/388/298 1267/392/298 +f 1265/390/300 1266/389/300 1268/393/301 1267/394/301 +f 1266/391/299 1262/204/299 1268/395/299 +f 1261/204/298 1267/392/298 1269/396/298 +f 1267/394/301 1268/393/301 1270/345/156 1269/344/156 +f 1268/395/299 1262/204/299 1270/397/299 +f 1261/204/298 1269/396/298 1271/398/298 +f 1269/344/156 1270/345/156 1272/399/302 1271/400/302 +f 1270/397/299 1262/204/299 1272/401/299 +f 1261/204/298 1271/398/298 1273/402/298 +f 1271/400/302 1272/399/302 1274/403/303 1273/404/303 +f 1272/401/299 1262/204/299 1274/405/299 +f 1261/204/298 1273/402/298 1275/406/298 +f 1273/404/303 1274/403/303 1276/349/158 1275/348/158 +f 1274/405/299 1262/204/299 1276/407/299 +f 1261/204/298 1275/406/298 1277/408/298 +f 1275/348/158 1276/349/158 1278/409/304 1277/410/304 +f 1276/407/299 1262/204/299 1278/411/299 +f 1261/204/298 1277/408/298 1279/412/298 +f 1277/410/304 1278/409/304 1280/413/305 1279/414/305 +f 1278/411/299 1262/204/299 1280/415/299 +f 1261/204/298 1279/412/298 1281/365/298 +f 1279/414/305 1280/413/305 1282/353/160 1281/352/160 +f 1280/415/299 1262/204/299 1282/365/299 +f 1261/204/298 1281/365/298 1283/415/298 +f 1281/352/160 1282/353/160 1284/416/306 1283/417/306 +f 1282/365/299 1262/204/299 1284/412/299 +f 1261/204/298 1283/415/298 1285/411/298 +f 1283/417/306 1284/416/306 1286/418/307 1285/419/307 +f 1284/412/299 1262/204/299 1286/408/299 +f 1261/204/298 1285/411/298 1287/407/298 +f 1285/419/307 1286/418/307 1288/357/162 1287/356/162 +f 1286/408/299 1262/204/299 1288/406/299 +f 1261/204/298 1287/407/298 1289/405/298 +f 1287/356/162 1288/357/162 1290/420/308 1289/421/308 +f 1288/406/299 1262/204/299 1290/402/299 +f 1261/204/298 1289/405/298 1291/401/298 +f 1289/421/308 1290/420/308 1292/422/309 1291/423/309 +f 1290/402/299 1262/204/299 1292/398/299 +f 1261/204/298 1291/401/298 1293/397/298 +f 1291/423/309 1292/422/309 1294/361/164 1293/360/164 +f 1292/398/299 1262/204/299 1294/396/299 +f 1261/204/298 1293/397/298 1295/395/298 +f 1293/360/164 1294/361/164 1296/424/310 1295/425/310 +f 1294/396/299 1262/204/299 1296/392/299 +f 1261/204/298 1295/395/298 1297/391/298 +f 1295/425/310 1296/424/310 1298/426/311 1297/427/311 +f 1296/392/299 1262/204/299 1298/388/299 +f 1261/204/298 1297/391/298 1299/216/298 +f 1297/427/311 1298/426/311 1300/365/166 1299/364/166 +f 1298/388/299 1262/204/299 1300/192/299 +f 1261/204/298 1299/216/298 1301/428/298 +f 1299/364/166 1300/365/166 1302/429/312 1301/430/312 +f 1300/192/299 1262/204/299 1302/431/299 +f 1261/204/298 1301/428/298 1303/432/298 +f 1301/430/312 1302/429/312 1304/433/313 1303/434/313 +f 1302/431/299 1262/204/299 1304/435/299 +f 1261/204/298 1303/432/298 1305/436/298 +f 1303/434/313 1304/433/313 1306/369/168 1305/368/168 +f 1304/435/299 1262/204/299 1306/437/299 +f 1261/204/298 1305/436/298 1307/438/298 +f 1305/368/168 1306/369/168 1308/439/314 1307/440/314 +f 1306/437/299 1262/204/299 1308/441/299 +f 1261/204/298 1307/438/298 1309/442/298 +f 1307/440/314 1308/439/314 1310/443/315 1309/444/315 +f 1308/441/299 1262/204/299 1310/445/299 +f 1261/204/298 1309/442/298 1311/446/298 +f 1309/444/315 1310/443/315 1312/373/170 1311/372/170 +f 1310/445/299 1262/204/299 1312/447/299 +f 1261/204/298 1311/446/298 1313/448/298 +f 1311/372/170 1312/373/170 1314/449/316 1313/450/316 +f 1312/447/299 1262/204/299 1314/451/299 +f 1261/204/298 1313/448/298 1315/452/298 +f 1313/450/316 1314/449/316 1316/453/317 1315/454/317 +f 1314/451/299 1262/204/299 1316/455/299 +f 1261/204/298 1315/452/298 1317/364/298 +f 1315/454/317 1316/453/317 1318/377/172 1317/376/172 +f 1316/455/299 1262/204/299 1318/364/299 +f 1261/204/298 1317/364/298 1319/455/298 +f 1317/376/172 1318/377/172 1320/456/318 1319/457/318 +f 1318/364/299 1262/204/299 1320/452/299 +f 1261/204/298 1319/455/298 1321/451/298 +f 1319/457/318 1320/456/318 1322/458/319 1321/459/319 +f 1320/452/299 1262/204/299 1322/448/299 +f 1261/204/298 1321/451/298 1323/447/298 +f 1321/459/319 1322/458/319 1324/381/174 1323/380/174 +f 1322/448/299 1262/204/299 1324/446/299 +f 1261/204/298 1323/447/298 1325/445/298 +f 1323/380/174 1324/381/174 1326/460/320 1325/461/320 +f 1324/446/299 1262/204/299 1326/442/299 +f 1261/204/298 1325/445/298 1327/441/298 +f 1325/461/320 1326/460/320 1328/462/321 1327/463/321 +f 1326/442/299 1262/204/299 1328/438/299 +f 1261/204/298 1327/441/298 1329/437/298 +f 1327/463/321 1328/462/321 1330/385/176 1329/384/176 +f 1328/438/299 1262/204/299 1330/436/299 +f 1261/204/298 1329/437/298 1331/435/298 +f 1329/384/176 1330/385/176 1332/464/322 1331/465/322 +f 1330/436/299 1262/204/299 1332/432/299 +f 1261/204/298 1331/435/298 1333/431/298 +f 1331/465/322 1332/464/322 1334/466/323 1333/467/323 +f 1332/432/299 1262/204/299 1334/428/299 +f 1261/204/298 1333/431/298 1263/192/298 +f 1333/467/323 1334/466/323 1264/65/154 1263/66/154 +f 1334/428/299 1262/204/299 1264/216/299 + +v -17.00000000000000 449.66244506835938 -51.43188476562500 +v 37.00000000000000 449.66244506835938 -51.43188476562500 +v 37.00000000000000 449.66244506835938 51.43188476562500 +v -17.00000000000000 449.66244506835938 51.43188476562500 +v -17.00000000000000 449.97933959960938 -53.43268203735352 +v 37.00000000000000 449.97933959960938 -53.43268203735352 +v 37.61828231811523 449.97933959960938 -53.33475494384766 +v 38.17604064941406 449.97933959960938 -53.05056381225586 +v 38.61867904663086 449.97933959960938 -52.60792541503906 +v 38.90287017822266 449.97933959960938 -52.05016326904297 +v 39.00079727172852 449.97933959960938 -51.43188476562500 +v 39.00079727172852 449.97933959960938 51.43188476562500 +v 38.90287017822266 449.97933959960938 52.05016326904297 +v 38.61867904663086 449.97933959960938 52.60792541503906 +v 38.17604064941406 449.97933959960938 53.05056381225586 +v 37.61828231811523 449.97933959960938 53.33475494384766 +v 37.00000000000000 449.97933959960938 53.43268203735352 +v -17.00000000000000 449.97933959960938 53.43268203735352 +v -17.61828041076660 449.97933959960938 53.33475494384766 +v -18.17603874206543 449.97933959960938 53.05056381225586 +v -18.61867904663086 449.97933959960938 52.60792541503906 +v -18.90287208557129 449.97933959960938 52.05016326904297 +v -19.00079727172852 449.97933959960938 51.43188476562500 +v -19.00079727172852 449.97933959960938 -51.43188476562500 +v -18.90287208557129 449.97933959960938 -52.05016326904297 +v -18.61867904663086 449.97933959960938 -52.60792541503906 +v -18.17603874206543 449.97933959960938 -53.05056381225586 +v -17.61828041076660 449.97933959960938 -53.33475494384766 +v -17.00000000000000 450.89901733398438 -55.23762893676758 +v 37.00000000000000 450.89901733398438 -55.23762893676758 +v 38.17604064941406 450.89901733398438 -55.05136108398438 +v 39.23696136474609 450.89901733398438 -54.51079559326172 +v 40.07891082763672 450.89901733398438 -53.66884231567383 +v 40.61947631835938 450.89901733398438 -52.60792541503906 +v 40.80574417114258 450.89901733398438 -51.43188476562500 +v 40.80574417114258 450.89901733398438 51.43188476562500 +v 40.61947631835938 450.89901733398438 52.60792541503906 +v 40.07891082763672 450.89901733398438 53.66884231567383 +v 39.23696136474609 450.89901733398438 54.51079559326172 +v 38.17604064941406 450.89901733398438 55.05136108398438 +v 37.00000000000000 450.89901733398438 55.23762893676758 +v -17.00000000000000 450.89901733398438 55.23762893676758 +v -18.17603874206543 450.89901733398438 55.05136108398438 +v -19.23695945739746 450.89901733398438 54.51079559326172 +v -20.07891082763672 450.89901733398438 53.66884231567383 +v -20.61947631835938 450.89901733398438 52.60792541503906 +v -20.80574226379395 450.89901733398438 51.43188476562500 +v -20.80574226379395 450.89901733398438 -51.43188476562500 +v -20.61947631835938 450.89901733398438 -52.60792541503906 +v -20.07891082763672 450.89901733398438 -53.66884231567383 +v -19.23695945739746 450.89901733398438 -54.51079559326172 +v -18.17603874206543 450.89901733398438 -55.05136108398438 +v -17.00000000000000 452.33142089843750 -56.67004013061523 +v 37.00000000000000 452.33142089843750 -56.67004013061523 +v 38.61867904663086 452.33142089843750 -56.41366577148438 +v 40.07891082763672 452.33142089843750 -55.66963958740234 +v 41.23775863647461 452.33142089843750 -54.51079559326172 +v 41.98178100585938 452.33142089843750 -53.05056381225586 +v 42.23815536499023 452.33142089843750 -51.43188476562500 +v 42.23815536499023 452.33142089843750 51.43188476562500 +v 41.98178100585938 452.33142089843750 53.05056381225586 +v 41.23775863647461 452.33142089843750 54.51079559326172 +v 40.07891082763672 452.33142089843750 55.66963958740234 +v 38.61867904663086 452.33142089843750 56.41366577148438 +v 37.00000000000000 452.33142089843750 56.67004013061523 +v -17.00000000000000 452.33142089843750 56.67004013061523 +v -18.61867904663086 452.33142089843750 56.41366577148438 +v -20.07891082763672 452.33142089843750 55.66963958740234 +v -21.23775672912598 452.33142089843750 54.51079559326172 +v -21.98178291320801 452.33142089843750 53.05056381225586 +v -22.23815536499023 452.33142089843750 51.43188476562500 +v -22.23815536499023 452.33142089843750 -51.43188476562500 +v -21.98178291320801 452.33142089843750 -53.05056381225586 +v -21.23775672912598 452.33142089843750 -54.51079559326172 +v -20.07891082763672 452.33142089843750 -55.66963958740234 +v -18.61867904663086 452.33142089843750 -56.41366577148438 +v -17.00000000000000 454.13635253906250 -57.58970642089844 +v 37.00000000000000 454.13635253906250 -57.58970642089844 +v 38.90287017822266 454.13635253906250 -57.28832244873047 +v 40.61947631835938 454.13635253906250 -56.41366577148438 +v 41.98178100585938 454.13635253906250 -55.05136108398438 +v 42.85643768310547 454.13635253906250 -53.33475494384766 +v 43.15782165527344 454.13635253906250 -51.43188476562500 +v 43.15782165527344 454.13635253906250 51.43188476562500 +v 42.85643768310547 454.13635253906250 53.33475494384766 +v 41.98178100585938 454.13635253906250 55.05136108398438 +v 40.61947631835938 454.13635253906250 56.41366577148438 +v 38.90287017822266 454.13635253906250 57.28832244873047 +v 37.00000000000000 454.13635253906250 57.58970642089844 +v -17.00000000000000 454.13635253906250 57.58970642089844 +v -18.90287208557129 454.13635253906250 57.28832244873047 +v -20.61947631835938 454.13635253906250 56.41366577148438 +v -21.98178291320801 454.13635253906250 55.05136108398438 +v -22.85643577575684 454.13635253906250 53.33475494384766 +v -23.15782165527344 454.13635253906250 51.43188476562500 +v -23.15782165527344 454.13635253906250 -51.43188476562500 +v -22.85643577575684 454.13635253906250 -53.33475494384766 +v -21.98178291320801 454.13635253906250 -55.05136108398438 +v -20.61947631835938 454.13635253906250 -56.41366577148438 +v -18.90287208557129 454.13635253906250 -57.28832244873047 +v -17.00000000000000 456.13717651367188 -57.90660095214844 +v 37.00000000000000 456.13717651367188 -57.90660095214844 +v 39.00079727172852 456.13717651367188 -57.58970642089844 +v 40.80574417114258 456.13717651367188 -56.67004013061523 +v 42.23815536499023 456.13717651367188 -55.23762893676758 +v 43.15782165527344 456.13717651367188 -53.43268203735352 +v 43.47471618652344 456.13717651367188 -51.43188476562500 +v 43.47471618652344 456.13717651367188 51.43188476562500 +v 43.15782165527344 456.13717651367188 53.43268203735352 +v 42.23815536499023 456.13717651367188 55.23762893676758 +v 40.80574417114258 456.13717651367188 56.67004013061523 +v 39.00079727172852 456.13717651367188 57.58970642089844 +v 37.00000000000000 456.13717651367188 57.90660095214844 +v -17.00000000000000 456.13717651367188 57.90660095214844 +v -19.00079727172852 456.13717651367188 57.58970642089844 +v -20.80574226379395 456.13717651367188 56.67004013061523 +v -22.23815536499023 456.13717651367188 55.23762893676758 +v -23.15782165527344 456.13717651367188 53.43268203735352 +v -23.47471618652344 456.13717651367188 51.43188476562500 +v -23.47471618652344 456.13717651367188 -51.43188476562500 +v -23.15782165527344 456.13717651367188 -53.43268203735352 +v -22.23815536499023 456.13717651367188 -55.23762893676758 +v -20.80574226379395 456.13717651367188 -56.67004013061523 +v -19.00079727172852 456.13717651367188 -57.58970642089844 +v -17.00000000000000 779.91546630859375 -57.90660095214844 +v 37.00000000000000 779.91546630859375 -57.90660095214844 +v 39.00079727172852 779.91546630859375 -57.58970642089844 +v 40.80574417114258 779.91546630859375 -56.67004013061523 +v 42.23815536499023 779.91546630859375 -55.23762893676758 +v 43.15782165527344 779.91546630859375 -53.43268203735352 +v 43.47471618652344 779.91546630859375 -51.43188476562500 +v 43.47471618652344 779.91546630859375 51.43188476562500 +v 43.15782165527344 779.91546630859375 53.43268203735352 +v 42.23815536499023 779.91546630859375 55.23762893676758 +v 40.80574417114258 779.91546630859375 56.67004013061523 +v 39.00079727172852 779.91546630859375 57.58970642089844 +v 37.00000000000000 779.91546630859375 57.90660095214844 +v -17.00000000000000 779.91546630859375 57.90660095214844 +v -19.00079727172852 779.91546630859375 57.58970642089844 +v -20.80574226379395 779.91546630859375 56.67004013061523 +v -22.23815536499023 779.91546630859375 55.23762893676758 +v -23.15782165527344 779.91546630859375 53.43268203735352 +v -23.47471618652344 779.91546630859375 51.43188476562500 +v -23.47471618652344 779.91546630859375 -51.43188476562500 +v -23.15782165527344 779.91546630859375 -53.43268203735352 +v -22.23815536499023 779.91546630859375 -55.23762893676758 +v -20.80574226379395 779.91546630859375 -56.67004013061523 +v -19.00079727172852 779.91546630859375 -57.58970642089844 +v -17.00000000000000 781.91625976562500 -57.58970642089844 +v 37.00000000000000 781.91625976562500 -57.58970642089844 +v 38.90287017822266 781.91625976562500 -57.28832244873047 +v 40.61947631835938 781.91625976562500 -56.41366577148438 +v 41.98178100585938 781.91625976562500 -55.05136108398438 +v 42.85643768310547 781.91625976562500 -53.33475494384766 +v 43.15782165527344 781.91625976562500 -51.43188476562500 +v 43.15782165527344 781.91625976562500 51.43188476562500 +v 42.85643768310547 781.91625976562500 53.33475494384766 +v 41.98178100585938 781.91625976562500 55.05136108398438 +v 40.61947631835938 781.91625976562500 56.41366577148438 +v 38.90287017822266 781.91625976562500 57.28832244873047 +v 37.00000000000000 781.91625976562500 57.58970642089844 +v -17.00000000000000 781.91625976562500 57.58970642089844 +v -18.90287208557129 781.91625976562500 57.28832244873047 +v -20.61947631835938 781.91625976562500 56.41366577148438 +v -21.98178291320801 781.91625976562500 55.05136108398438 +v -22.85643577575684 781.91625976562500 53.33475494384766 +v -23.15782165527344 781.91625976562500 51.43188476562500 +v -23.15782165527344 781.91625976562500 -51.43188476562500 +v -22.85643577575684 781.91625976562500 -53.33475494384766 +v -21.98178291320801 781.91625976562500 -55.05136108398438 +v -20.61947631835938 781.91625976562500 -56.41366577148438 +v -18.90287208557129 781.91625976562500 -57.28832244873047 +v -17.00000000000000 783.72125244140625 -56.67004013061523 +v 37.00000000000000 783.72125244140625 -56.67004013061523 +v 38.61867904663086 783.72125244140625 -56.41366577148438 +v 40.07891082763672 783.72125244140625 -55.66963958740234 +v 41.23775863647461 783.72125244140625 -54.51079559326172 +v 41.98178100585938 783.72125244140625 -53.05056381225586 +v 42.23815536499023 783.72125244140625 -51.43188476562500 +v 42.23815536499023 783.72125244140625 51.43188476562500 +v 41.98178100585938 783.72125244140625 53.05056381225586 +v 41.23775863647461 783.72125244140625 54.51079559326172 +v 40.07891082763672 783.72125244140625 55.66963958740234 +v 38.61867904663086 783.72125244140625 56.41366577148438 +v 37.00000000000000 783.72125244140625 56.67004013061523 +v -17.00000000000000 783.72125244140625 56.67004013061523 +v -18.61867904663086 783.72125244140625 56.41366577148438 +v -20.07891082763672 783.72125244140625 55.66963958740234 +v -21.23775672912598 783.72125244140625 54.51079559326172 +v -21.98178291320801 783.72125244140625 53.05056381225586 +v -22.23815536499023 783.72125244140625 51.43188476562500 +v -22.23815536499023 783.72125244140625 -51.43188476562500 +v -21.98178291320801 783.72125244140625 -53.05056381225586 +v -21.23775672912598 783.72125244140625 -54.51079559326172 +v -20.07891082763672 783.72125244140625 -55.66963958740234 +v -18.61867904663086 783.72125244140625 -56.41366577148438 +v -17.00000000000000 785.15362548828125 -55.23762893676758 +v 37.00000000000000 785.15362548828125 -55.23762893676758 +v 38.17604064941406 785.15362548828125 -55.05136108398438 +v 39.23696136474609 785.15362548828125 -54.51079559326172 +v 40.07891082763672 785.15362548828125 -53.66884231567383 +v 40.61947631835938 785.15362548828125 -52.60792541503906 +v 40.80574417114258 785.15362548828125 -51.43188476562500 +v 40.80574417114258 785.15362548828125 51.43188476562500 +v 40.61947631835938 785.15362548828125 52.60792541503906 +v 40.07891082763672 785.15362548828125 53.66884231567383 +v 39.23696136474609 785.15362548828125 54.51079559326172 +v 38.17604064941406 785.15362548828125 55.05136108398438 +v 37.00000000000000 785.15362548828125 55.23762893676758 +v -17.00000000000000 785.15362548828125 55.23762893676758 +v -18.17603874206543 785.15362548828125 55.05136108398438 +v -19.23695945739746 785.15362548828125 54.51079559326172 +v -20.07891082763672 785.15362548828125 53.66884231567383 +v -20.61947631835938 785.15362548828125 52.60792541503906 +v -20.80574226379395 785.15362548828125 51.43188476562500 +v -20.80574226379395 785.15362548828125 -51.43188476562500 +v -20.61947631835938 785.15362548828125 -52.60792541503906 +v -20.07891082763672 785.15362548828125 -53.66884231567383 +v -19.23695945739746 785.15362548828125 -54.51079559326172 +v -18.17603874206543 785.15362548828125 -55.05136108398438 +v -17.00000000000000 786.07330322265625 -53.43268203735352 +v 37.00000000000000 786.07330322265625 -53.43268203735352 +v 37.61828231811523 786.07330322265625 -53.33475494384766 +v 38.17604064941406 786.07330322265625 -53.05056381225586 +v 38.61867904663086 786.07330322265625 -52.60792541503906 +v 38.90287017822266 786.07330322265625 -52.05016326904297 +v 39.00079727172852 786.07330322265625 -51.43188476562500 +v 39.00079727172852 786.07330322265625 51.43188476562500 +v 38.90287017822266 786.07330322265625 52.05016326904297 +v 38.61867904663086 786.07330322265625 52.60792541503906 +v 38.17604064941406 786.07330322265625 53.05056381225586 +v 37.61828231811523 786.07330322265625 53.33475494384766 +v 37.00000000000000 786.07330322265625 53.43268203735352 +v -17.00000000000000 786.07330322265625 53.43268203735352 +v -17.61828041076660 786.07330322265625 53.33475494384766 +v -18.17603874206543 786.07330322265625 53.05056381225586 +v -18.61867904663086 786.07330322265625 52.60792541503906 +v -18.90287208557129 786.07330322265625 52.05016326904297 +v -19.00079727172852 786.07330322265625 51.43188476562500 +v -19.00079727172852 786.07330322265625 -51.43188476562500 +v -18.90287208557129 786.07330322265625 -52.05016326904297 +v -18.61867904663086 786.07330322265625 -52.60792541503906 +v -18.17603874206543 786.07330322265625 -53.05056381225586 +v -17.61828041076660 786.07330322265625 -53.33475494384766 +v -17.00000000000000 786.39019775390625 -51.43188476562500 +v 37.00000000000000 786.39019775390625 -51.43188476562500 +v 37.00000000000000 786.39019775390625 51.43188476562500 +v -17.00000000000000 786.39019775390625 51.43188476562500 +# 248 vertices + +vn -0.08312530070543 -0.99306613206863 -0.08312530070543 +vn -0.02440690994263 -0.95080703496933 -0.30882087349892 +vn 0.02440690994263 -0.95080703496933 -0.30882087349892 +vn 0.08312530070543 -0.99306613206863 -0.08312530070543 +vn -0.04637560620904 -0.80822926759720 -0.58703893423080 +vn 0.04637560620904 -0.80822926759720 -0.58703893423080 +vn -0.06365761160851 -0.58669996261597 -0.80729848146439 +vn 0.06365761160851 -0.58669996261597 -0.80729848146439 +vn -0.07468779385090 -0.30821996927261 -0.94837874174118 +vn 0.07468779385090 -0.30821996927261 -0.94837874174118 +vn -0.07822024077177 -0.07822024077177 -0.99386274814606 +vn 0.07822024077177 -0.07822024077177 -0.99386274814606 +vn -0.07822024077177 0.07822024077177 -0.99386274814606 +vn 0.07822024077177 0.07822024077177 -0.99386274814606 +vn -0.07468779385090 0.30821996927261 -0.94837874174118 +vn 0.07468779385090 0.30821996927261 -0.94837874174118 +vn -0.06365761160851 0.58669996261597 -0.80729848146439 +vn 0.06365761160851 0.58669996261597 -0.80729848146439 +vn -0.04637560620904 0.80822926759720 -0.58703893423080 +vn 0.04637560620904 0.80822926759720 -0.58703893423080 +vn -0.02440690994263 0.95080703496933 -0.30882087349892 +vn 0.02440690994263 0.95080703496933 -0.30882087349892 +vn -0.08312530070543 0.99306613206863 -0.08312530070543 +vn 0.08312530070543 0.99306613206863 -0.08312530070543 +vn 0.09543948620558 -0.95111358165741 -0.29372486472130 +vn 0.18156838417053 -0.80918246507645 -0.55879932641983 +vn 0.24994270503521 -0.58801221847534 -0.76926606893539 +vn 0.29388272762299 -0.30916440486908 -0.90446132421494 +vn 0.30807152390480 -0.07847104221582 -0.94812142848968 +vn 0.30807152390480 0.07847104221582 -0.94812142848968 +vn 0.29388272762299 0.30916440486908 -0.90446132421494 +vn 0.24994270503521 0.58801221847534 -0.76926606893539 +vn 0.18156838417053 0.80918246507645 -0.55879932641983 +vn 0.09543948620558 0.95111358165741 -0.29372486472130 +vn 0.18153536319733 -0.95111525058746 -0.24984939396381 +vn 0.34534916281700 -0.80920016765594 -0.47531995177269 +vn 0.47542506456375 -0.58802324533463 -0.65436965227127 +vn 0.55897951126099 -0.30916219949722 -0.76938980817795 +vn 0.58598077297211 -0.07847036421299 -0.80651652812958 +vn 0.58598077297211 0.07847036421299 -0.80651652812958 +vn 0.55897951126099 0.30916219949722 -0.76938980817795 +vn 0.47542506456375 0.58802324533463 -0.65436965227127 +vn 0.34534916281700 0.80920016765594 -0.47531995177269 +vn 0.18153536319733 0.95111525058746 -0.24984939396381 +vn 0.24984939396381 -0.95111525058746 -0.18153536319733 +vn 0.47531995177269 -0.80920016765594 -0.34534916281700 +vn 0.65436965227127 -0.58802324533463 -0.47542506456375 +vn 0.76938980817795 -0.30916219949722 -0.55897951126099 +vn 0.80651652812958 -0.07847036421299 -0.58598077297211 +vn 0.80651652812958 0.07847036421299 -0.58598077297211 +vn 0.76938980817795 0.30916219949722 -0.55897951126099 +vn 0.65436965227127 0.58802324533463 -0.47542506456375 +vn 0.47531995177269 0.80920016765594 -0.34534916281700 +vn 0.24984939396381 0.95111525058746 -0.18153536319733 +vn 0.29372486472130 -0.95111358165741 -0.09543948620558 +vn 0.55879932641983 -0.80918246507645 -0.18156838417053 +vn 0.76926606893539 -0.58801221847534 -0.24994270503521 +vn 0.90446132421494 -0.30916440486908 -0.29388272762299 +vn 0.94812142848968 -0.07847104221582 -0.30807152390480 +vn 0.94812142848968 0.07847104221582 -0.30807152390480 +vn 0.90446132421494 0.30916440486908 -0.29388272762299 +vn 0.76926606893539 0.58801221847534 -0.24994270503521 +vn 0.55879932641983 0.80918246507645 -0.18156838417053 +vn 0.29372486472130 0.95111358165741 -0.09543948620558 +vn 0.30882087349892 -0.95080703496933 -0.02440690994263 +vn 0.58703893423080 -0.80822926759720 -0.04637560620904 +vn 0.80729848146439 -0.58669996261597 -0.06365761160851 +vn 0.94837874174118 -0.30821996927261 -0.07468779385090 +vn 0.99386274814606 -0.07822024077177 -0.07822024077177 +vn 0.99386274814606 0.07822024077177 -0.07822024077177 +vn 0.94837874174118 0.30821996927261 -0.07468779385090 +vn 0.80729848146439 0.58669996261597 -0.06365761160851 +vn 0.58703893423080 0.80822926759720 -0.04637560620904 +vn 0.30882087349892 0.95080703496933 -0.02440690994263 +vn 0.30882087349892 -0.95080703496933 0.02440690994263 +vn 0.08312530070543 -0.99306613206863 0.08312530070543 +vn 0.58703893423080 -0.80822926759720 0.04637560620904 +vn 0.80729848146439 -0.58669996261597 0.06365761160851 +vn 0.94837874174118 -0.30821996927261 0.07468779385090 +vn 0.99386274814606 -0.07822024077177 0.07822024077177 +vn 0.99386274814606 0.07822024077177 0.07822024077177 +vn 0.94837874174118 0.30821996927261 0.07468779385090 +vn 0.80729848146439 0.58669996261597 0.06365761160851 +vn 0.58703893423080 0.80822926759720 0.04637560620904 +vn 0.30882087349892 0.95080703496933 0.02440690994263 +vn 0.08312530070543 0.99306613206863 0.08312530070543 +vn 0.29372486472130 -0.95111358165741 0.09543948620558 +vn 0.55879932641983 -0.80918246507645 0.18156838417053 +vn 0.76926606893539 -0.58801221847534 0.24994270503521 +vn 0.90446132421494 -0.30916440486908 0.29388272762299 +vn 0.94812142848968 -0.07847104221582 0.30807152390480 +vn 0.94812142848968 0.07847104221582 0.30807152390480 +vn 0.90446132421494 0.30916440486908 0.29388272762299 +vn 0.76926606893539 0.58801221847534 0.24994270503521 +vn 0.55879932641983 0.80918246507645 0.18156838417053 +vn 0.29372486472130 0.95111358165741 0.09543948620558 +vn 0.24984939396381 -0.95111525058746 0.18153536319733 +vn 0.47531995177269 -0.80920016765594 0.34534916281700 +vn 0.65436965227127 -0.58802324533463 0.47542506456375 +vn 0.76938980817795 -0.30916219949722 0.55897951126099 +vn 0.80651652812958 -0.07847036421299 0.58598077297211 +vn 0.80651652812958 0.07847036421299 0.58598077297211 +vn 0.76938980817795 0.30916219949722 0.55897951126099 +vn 0.65436965227127 0.58802324533463 0.47542506456375 +vn 0.47531995177269 0.80920016765594 0.34534916281700 +vn 0.24984939396381 0.95111525058746 0.18153536319733 +vn 0.18153536319733 -0.95111525058746 0.24984939396381 +vn 0.34534916281700 -0.80920016765594 0.47531995177269 +vn 0.47542506456375 -0.58802324533463 0.65436965227127 +vn 0.55897951126099 -0.30916219949722 0.76938980817795 +vn 0.58598077297211 -0.07847036421299 0.80651652812958 +vn 0.58598077297211 0.07847036421299 0.80651652812958 +vn 0.55897951126099 0.30916219949722 0.76938980817795 +vn 0.47542506456375 0.58802324533463 0.65436965227127 +vn 0.34534916281700 0.80920016765594 0.47531995177269 +vn 0.18153536319733 0.95111525058746 0.24984939396381 +vn 0.09543948620558 -0.95111358165741 0.29372486472130 +vn 0.18156838417053 -0.80918246507645 0.55879932641983 +vn 0.24994270503521 -0.58801221847534 0.76926606893539 +vn 0.29388272762299 -0.30916440486908 0.90446132421494 +vn 0.30807152390480 -0.07847104221582 0.94812142848968 +vn 0.30807152390480 0.07847104221582 0.94812142848968 +vn 0.29388272762299 0.30916440486908 0.90446132421494 +vn 0.24994270503521 0.58801221847534 0.76926606893539 +vn 0.18156838417053 0.80918246507645 0.55879932641983 +vn 0.09543948620558 0.95111358165741 0.29372486472130 +vn 0.02440690994263 -0.95080703496933 0.30882087349892 +vn 0.04637560620904 -0.80822926759720 0.58703893423080 +vn 0.06365761160851 -0.58669996261597 0.80729848146439 +vn 0.07468779385090 -0.30821996927261 0.94837874174118 +vn 0.07822024077177 -0.07822024077177 0.99386274814606 +vn 0.07822024077177 0.07822024077177 0.99386274814606 +vn 0.07468779385090 0.30821996927261 0.94837874174118 +vn 0.06365761160851 0.58669996261597 0.80729848146439 +vn 0.04637560620904 0.80822926759720 0.58703893423080 +vn 0.02440690994263 0.95080703496933 0.30882087349892 +vn -0.02440690994263 -0.95080703496933 0.30882087349892 +vn -0.08312530070543 -0.99306613206863 0.08312530070543 +vn -0.04637560620904 -0.80822926759720 0.58703893423080 +vn -0.06365761160851 -0.58669996261597 0.80729848146439 +vn -0.07468779385090 -0.30821996927261 0.94837874174118 +vn -0.07822024077177 -0.07822024077177 0.99386274814606 +vn -0.07822024077177 0.07822024077177 0.99386274814606 +vn -0.07468779385090 0.30821996927261 0.94837874174118 +vn -0.06365761160851 0.58669996261597 0.80729848146439 +vn -0.04637560620904 0.80822926759720 0.58703893423080 +vn -0.02440690994263 0.95080703496933 0.30882087349892 +vn -0.08312530070543 0.99306613206863 0.08312530070543 +vn -0.09543948620558 -0.95111358165741 0.29372486472130 +vn -0.18156838417053 -0.80918246507645 0.55879932641983 +vn -0.24994270503521 -0.58801221847534 0.76926606893539 +vn -0.29388272762299 -0.30916440486908 0.90446132421494 +vn -0.30807152390480 -0.07847104221582 0.94812142848968 +vn -0.30807152390480 0.07847104221582 0.94812142848968 +vn -0.29388272762299 0.30916440486908 0.90446132421494 +vn -0.24994270503521 0.58801221847534 0.76926606893539 +vn -0.18156838417053 0.80918246507645 0.55879932641983 +vn -0.09543948620558 0.95111358165741 0.29372486472130 +vn -0.18153536319733 -0.95111525058746 0.24984939396381 +vn -0.34534916281700 -0.80920016765594 0.47531995177269 +vn -0.47542506456375 -0.58802324533463 0.65436965227127 +vn -0.55897951126099 -0.30916219949722 0.76938980817795 +vn -0.58598077297211 -0.07847036421299 0.80651652812958 +vn -0.58598077297211 0.07847036421299 0.80651652812958 +vn -0.55897951126099 0.30916219949722 0.76938980817795 +vn -0.47542506456375 0.58802324533463 0.65436965227127 +vn -0.34534916281700 0.80920016765594 0.47531995177269 +vn -0.18153536319733 0.95111525058746 0.24984939396381 +vn -0.24984939396381 -0.95111525058746 0.18153536319733 +vn -0.47531995177269 -0.80920016765594 0.34534916281700 +vn -0.65436965227127 -0.58802324533463 0.47542506456375 +vn -0.76938980817795 -0.30916219949722 0.55897951126099 +vn -0.80651652812958 -0.07847036421299 0.58598077297211 +vn -0.80651652812958 0.07847036421299 0.58598077297211 +vn -0.76938980817795 0.30916219949722 0.55897951126099 +vn -0.65436965227127 0.58802324533463 0.47542506456375 +vn -0.47531995177269 0.80920016765594 0.34534916281700 +vn -0.24984939396381 0.95111525058746 0.18153536319733 +vn -0.29372486472130 -0.95111358165741 0.09543948620558 +vn -0.55879932641983 -0.80918246507645 0.18156838417053 +vn -0.76926606893539 -0.58801221847534 0.24994270503521 +vn -0.90446132421494 -0.30916440486908 0.29388272762299 +vn -0.94812142848968 -0.07847104221582 0.30807152390480 +vn -0.94812142848968 0.07847104221582 0.30807152390480 +vn -0.90446132421494 0.30916440486908 0.29388272762299 +vn -0.76926606893539 0.58801221847534 0.24994270503521 +vn -0.55879932641983 0.80918246507645 0.18156838417053 +vn -0.29372486472130 0.95111358165741 0.09543948620558 +vn -0.30882087349892 -0.95080703496933 0.02440690994263 +vn -0.58703893423080 -0.80822926759720 0.04637560620904 +vn -0.80729848146439 -0.58669996261597 0.06365761160851 +vn -0.94837874174118 -0.30821996927261 0.07468779385090 +vn -0.99386274814606 -0.07822024077177 0.07822024077177 +vn -0.99386274814606 0.07822024077177 0.07822024077177 +vn -0.94837874174118 0.30821996927261 0.07468779385090 +vn -0.80729848146439 0.58669996261597 0.06365761160851 +vn -0.58703893423080 0.80822926759720 0.04637560620904 +vn -0.30882087349892 0.95080703496933 0.02440690994263 +vn -0.30882087349892 -0.95080703496933 -0.02440690994263 +vn -0.58703893423080 -0.80822926759720 -0.04637560620904 +vn -0.80729848146439 -0.58669996261597 -0.06365761160851 +vn -0.94837874174118 -0.30821996927261 -0.07468779385090 +vn -0.99386274814606 -0.07822024077177 -0.07822024077177 +vn -0.99386274814606 0.07822024077177 -0.07822024077177 +vn -0.94837874174118 0.30821996927261 -0.07468779385090 +vn -0.80729848146439 0.58669996261597 -0.06365761160851 +vn -0.58703893423080 0.80822926759720 -0.04637560620904 +vn -0.30882087349892 0.95080703496933 -0.02440690994263 +vn -0.29372486472130 -0.95111358165741 -0.09543948620558 +vn -0.55879932641983 -0.80918246507645 -0.18156838417053 +vn -0.76926606893539 -0.58801221847534 -0.24994270503521 +vn -0.90446132421494 -0.30916440486908 -0.29388272762299 +vn -0.94812142848968 -0.07847104221582 -0.30807152390480 +vn -0.94812142848968 0.07847104221582 -0.30807152390480 +vn -0.90446132421494 0.30916440486908 -0.29388272762299 +vn -0.76926606893539 0.58801221847534 -0.24994270503521 +vn -0.55879932641983 0.80918246507645 -0.18156838417053 +vn -0.29372486472130 0.95111358165741 -0.09543948620558 +vn -0.24984939396381 -0.95111525058746 -0.18153536319733 +vn -0.47531995177269 -0.80920016765594 -0.34534916281700 +vn -0.65436965227127 -0.58802324533463 -0.47542506456375 +vn -0.76938980817795 -0.30916219949722 -0.55897951126099 +vn -0.80651652812958 -0.07847036421299 -0.58598077297211 +vn -0.80651652812958 0.07847036421299 -0.58598077297211 +vn -0.76938980817795 0.30916219949722 -0.55897951126099 +vn -0.65436965227127 0.58802324533463 -0.47542506456375 +vn -0.47531995177269 0.80920016765594 -0.34534916281700 +vn -0.24984939396381 0.95111525058746 -0.18153536319733 +vn -0.18153536319733 -0.95111525058746 -0.24984939396381 +vn -0.34534916281700 -0.80920016765594 -0.47531995177269 +vn -0.47542506456375 -0.58802324533463 -0.65436965227127 +vn -0.55897951126099 -0.30916219949722 -0.76938980817795 +vn -0.58598077297211 -0.07847036421299 -0.80651652812958 +vn -0.58598077297211 0.07847036421299 -0.80651652812958 +vn -0.55897951126099 0.30916219949722 -0.76938980817795 +vn -0.47542506456375 0.58802324533463 -0.65436965227127 +vn -0.34534916281700 0.80920016765594 -0.47531995177269 +vn -0.18153536319733 0.95111525058746 -0.24984939396381 +vn -0.09543948620558 -0.95111358165741 -0.29372486472130 +vn -0.18156838417053 -0.80918246507645 -0.55879932641983 +vn -0.24994270503521 -0.58801221847534 -0.76926606893539 +vn -0.29388272762299 -0.30916440486908 -0.90446132421494 +vn -0.30807152390480 -0.07847104221582 -0.94812142848968 +vn -0.30807152390480 0.07847104221582 -0.94812142848968 +vn -0.29388272762299 0.30916440486908 -0.90446132421494 +vn -0.24994270503521 0.58801221847534 -0.76926606893539 +vn -0.18156838417053 0.80918246507645 -0.55879932641983 +vn -0.09543948620558 0.95111358165741 -0.29372486472130 +# 248 normals + +vt 0.00000000000000 0.00591099262238 0.00000000000000 +vt 0.84150868654251 0.00591099262238 0.00000000000000 +vt 0.84150868654251 0.00000000000000 0.00000000000000 +vt 0.00000000000000 0.01182210445404 0.00000000000000 +vt 0.84150868654251 0.01182210445404 0.00000000000000 +vt 0.00000000000000 0.01773309707642 0.00000000000000 +vt 0.84150868654251 0.01773309707642 0.00000000000000 +vt 0.00000000000000 0.02364408969879 0.00000000000000 +vt 0.84150868654251 0.02364408969879 0.00000000000000 +vt 0.00000000000000 0.02955508232117 0.00000000000000 +vt 0.84150868654251 0.02955508232117 0.00000000000000 +vt 0.00000000000000 0.97044497728348 0.00000000000000 +vt 0.84150868654251 0.97044497728348 0.00000000000000 +vt 0.00000000000000 0.97635596990585 0.00000000000000 +vt 0.84150868654251 0.97635596990585 0.00000000000000 +vt 0.00000000000000 0.98226696252823 0.00000000000000 +vt 0.84150868654251 0.98226696252823 0.00000000000000 +vt 0.00000000000000 0.98817795515060 0.00000000000000 +vt 0.84150868654251 0.98817795515060 0.00000000000000 +vt 0.00000000000000 0.99408900737762 0.00000000000000 +vt 0.84150868654251 0.99408900737762 0.00000000000000 +vt 0.84150868654251 1.00000000000000 0.00000000000000 +vt 0.85735780000687 0.00000000000000 0.00000000000000 +vt 0.87320697307587 0.00591099262238 0.00000000000000 +vt 0.87320697307587 0.01182210445404 0.00000000000000 +vt 0.87320697307587 0.01773309707642 0.00000000000000 +vt 0.87320697307587 0.02364408969879 0.00000000000000 +vt 0.87320697307587 0.02955508232117 0.00000000000000 +vt 0.87320697307587 0.97044497728348 0.00000000000000 +vt 0.87320697307587 0.97635596990585 0.00000000000000 +vt 0.87320697307587 0.98226696252823 0.00000000000000 +vt 0.87320697307587 0.98817795515060 0.00000000000000 +vt 0.87320697307587 0.99408900737762 0.00000000000000 +vt 0.85735780000687 1.00000000000000 0.00000000000000 +vt 0.88905608654022 0.00000000000000 0.00000000000000 +vt 0.90490520000458 0.00591099262238 0.00000000000000 +vt 0.90490520000458 0.01182210445404 0.00000000000000 +vt 0.90490520000458 0.01773309707642 0.00000000000000 +vt 0.90490520000458 0.02364408969879 0.00000000000000 +vt 0.90490520000458 0.02955508232117 0.00000000000000 +vt 0.90490520000458 0.97044497728348 0.00000000000000 +vt 0.90490520000458 0.97635596990585 0.00000000000000 +vt 0.90490520000458 0.98226696252823 0.00000000000000 +vt 0.90490520000458 0.98817795515060 0.00000000000000 +vt 0.90490520000458 0.99408900737762 0.00000000000000 +vt 0.88905608654022 1.00000000000000 0.00000000000000 +vt 0.92075431346893 0.00000000000000 0.00000000000000 +vt 0.93660348653793 0.00591099262238 0.00000000000000 +vt 0.93660348653793 0.01182210445404 0.00000000000000 +vt 0.93660348653793 0.01773309707642 0.00000000000000 +vt 0.93660348653793 0.02364408969879 0.00000000000000 +vt 0.93660348653793 0.02955508232117 0.00000000000000 +vt 0.93660348653793 0.97044497728348 0.00000000000000 +vt 0.93660348653793 0.97635596990585 0.00000000000000 +vt 0.93660348653793 0.98226696252823 0.00000000000000 +vt 0.93660348653793 0.98817795515060 0.00000000000000 +vt 0.93660348653793 0.99408900737762 0.00000000000000 +vt 0.92075431346893 1.00000000000000 0.00000000000000 +vt 0.95245260000229 0.00000000000000 0.00000000000000 +vt 0.96830171346664 0.00591099262238 0.00000000000000 +vt 0.96830171346664 0.01182210445404 0.00000000000000 +vt 0.96830171346664 0.01773309707642 0.00000000000000 +vt 0.96830171346664 0.02364408969879 0.00000000000000 +vt 0.96830171346664 0.02955508232117 0.00000000000000 +vt 0.96830171346664 0.97044497728348 0.00000000000000 +vt 0.96830171346664 0.97635596990585 0.00000000000000 +vt 0.96830171346664 0.98226696252823 0.00000000000000 +vt 0.96830171346664 0.98817795515060 0.00000000000000 +vt 0.96830171346664 0.99408900737762 0.00000000000000 +vt 0.95245260000229 1.00000000000000 0.00000000000000 +vt 0.98415088653564 0.00000000000000 0.00000000000000 +vt 1.00000000000000 0.00591099262238 0.00000000000000 +vt 1.00000000000000 0.01182210445404 0.00000000000000 +vt 1.00000000000000 0.01773309707642 0.00000000000000 +vt 1.00000000000000 0.02364408969879 0.00000000000000 +vt 1.00000000000000 0.02955508232117 0.00000000000000 +vt 1.00000000000000 0.97044497728348 0.00000000000000 +vt 1.00000000000000 0.97635596990585 0.00000000000000 +vt 1.00000000000000 0.98226696252823 0.00000000000000 +vt 1.00000000000000 0.98817795515060 0.00000000000000 +vt 1.00000000000000 0.99408900737762 0.00000000000000 +vt 0.98415088653564 1.00000000000000 0.00000000000000 +vt 0.91002315282822 0.00591099262238 0.00000000000000 +vt 0.91002315282822 0.00000000000000 0.00000000000000 +vt 0.91002315282822 0.01182210445404 0.00000000000000 +vt 0.91002315282822 0.01773309707642 0.00000000000000 +vt 0.91002315282822 0.02364408969879 0.00000000000000 +vt 0.91002315282822 0.02955508232117 0.00000000000000 +vt 0.91002315282822 0.97044497728348 0.00000000000000 +vt 0.91002315282822 0.97635596990585 0.00000000000000 +vt 0.91002315282822 0.98226696252823 0.00000000000000 +vt 0.91002315282822 0.98817795515060 0.00000000000000 +vt 0.91002315282822 0.99408900737762 0.00000000000000 +vt 0.91002315282822 1.00000000000000 0.00000000000000 +vt 0.91902083158493 0.00000000000000 0.00000000000000 +vt 0.92801856994629 0.00591099262238 0.00000000000000 +vt 0.92801856994629 0.01182210445404 0.00000000000000 +vt 0.92801856994629 0.01773309707642 0.00000000000000 +vt 0.92801856994629 0.02364408969879 0.00000000000000 +vt 0.92801856994629 0.02955508232117 0.00000000000000 +vt 0.92801856994629 0.97044497728348 0.00000000000000 +vt 0.92801856994629 0.97635596990585 0.00000000000000 +vt 0.92801856994629 0.98226696252823 0.00000000000000 +vt 0.92801856994629 0.98817795515060 0.00000000000000 +vt 0.92801856994629 0.99408900737762 0.00000000000000 +vt 0.91902083158493 1.00000000000000 0.00000000000000 +vt 0.93701624870300 0.00000000000000 0.00000000000000 +vt 0.94601392745972 0.00591099262238 0.00000000000000 +vt 0.94601392745972 0.01182210445404 0.00000000000000 +vt 0.94601392745972 0.01773309707642 0.00000000000000 +vt 0.94601392745972 0.02364408969879 0.00000000000000 +vt 0.94601392745972 0.02955508232117 0.00000000000000 +vt 0.94601392745972 0.97044497728348 0.00000000000000 +vt 0.94601392745972 0.97635596990585 0.00000000000000 +vt 0.94601392745972 0.98226696252823 0.00000000000000 +vt 0.94601392745972 0.98817795515060 0.00000000000000 +vt 0.94601392745972 0.99408900737762 0.00000000000000 +vt 0.93701624870300 1.00000000000000 0.00000000000000 +vt 0.95501160621643 0.00000000000000 0.00000000000000 +vt 0.96400928497314 0.00591099262238 0.00000000000000 +vt 0.96400928497314 0.01182210445404 0.00000000000000 +vt 0.96400928497314 0.01773309707642 0.00000000000000 +vt 0.96400928497314 0.02364408969879 0.00000000000000 +vt 0.96400928497314 0.02955508232117 0.00000000000000 +vt 0.96400928497314 0.97044497728348 0.00000000000000 +vt 0.96400928497314 0.97635596990585 0.00000000000000 +vt 0.96400928497314 0.98226696252823 0.00000000000000 +vt 0.96400928497314 0.98817795515060 0.00000000000000 +vt 0.96400928497314 0.99408900737762 0.00000000000000 +vt 0.95501160621643 1.00000000000000 0.00000000000000 +vt 0.97300696372986 0.00000000000000 0.00000000000000 +vt 0.98200464248657 0.00591099262238 0.00000000000000 +vt 0.98200464248657 0.01182210445404 0.00000000000000 +vt 0.98200464248657 0.01773309707642 0.00000000000000 +vt 0.98200464248657 0.02364408969879 0.00000000000000 +vt 0.98200464248657 0.02955508232117 0.00000000000000 +vt 0.98200464248657 0.97044497728348 0.00000000000000 +vt 0.98200464248657 0.97635596990585 0.00000000000000 +vt 0.98200464248657 0.98226696252823 0.00000000000000 +vt 0.98200464248657 0.98817795515060 0.00000000000000 +vt 0.98200464248657 0.99408900737762 0.00000000000000 +vt 0.97300696372986 1.00000000000000 0.00000000000000 +vt 0.99100232124329 0.00000000000000 0.00000000000000 +vt 0.99100232124329 1.00000000000000 0.00000000000000 +# 144 texture coordinates + +g 立方体 +usemtl 材质 +f 1335/4/324 1339/468/325 1340/469/326 1336/470/327 +f 1339/468/325 1363/471/328 1364/472/329 1340/469/326 +f 1363/471/328 1387/473/330 1388/474/331 1364/472/329 +f 1387/473/330 1411/475/332 1412/476/333 1388/474/331 +f 1411/475/332 1435/477/334 1436/478/335 1412/476/333 +f 1435/477/334 1459/479/336 1460/480/337 1436/478/335 +f 1459/479/336 1483/481/338 1484/482/339 1460/480/337 +f 1483/481/338 1507/483/340 1508/484/341 1484/482/339 +f 1507/483/340 1531/485/342 1532/486/343 1508/484/341 +f 1531/485/342 1555/487/344 1556/488/345 1532/486/343 +f 1555/487/344 1579/1/346 1580/489/347 1556/488/345 +f 1336/490/327 1340/469/326 1341/491/348 +f 1340/469/326 1364/472/329 1365/492/349 1341/491/348 +f 1364/472/329 1388/474/331 1389/493/350 1365/492/349 +f 1388/474/331 1412/476/333 1413/494/351 1389/493/350 +f 1412/476/333 1436/478/335 1437/495/352 1413/494/351 +f 1436/478/335 1460/480/337 1461/496/353 1437/495/352 +f 1460/480/337 1484/482/339 1485/497/354 1461/496/353 +f 1484/482/339 1508/484/341 1509/498/355 1485/497/354 +f 1508/484/341 1532/486/343 1533/499/356 1509/498/355 +f 1532/486/343 1556/488/345 1557/500/357 1533/499/356 +f 1556/488/345 1580/501/347 1557/500/357 +f 1336/502/327 1341/491/348 1342/503/358 +f 1341/491/348 1365/492/349 1366/504/359 1342/503/358 +f 1365/492/349 1389/493/350 1390/505/360 1366/504/359 +f 1389/493/350 1413/494/351 1414/506/361 1390/505/360 +f 1413/494/351 1437/495/352 1438/507/362 1414/506/361 +f 1437/495/352 1461/496/353 1462/508/363 1438/507/362 +f 1461/496/353 1485/497/354 1486/509/364 1462/508/363 +f 1485/497/354 1509/498/355 1510/510/365 1486/509/364 +f 1509/498/355 1533/499/356 1534/511/366 1510/510/365 +f 1533/499/356 1557/500/357 1558/512/367 1534/511/366 +f 1557/500/357 1580/513/347 1558/512/367 +f 1336/514/327 1342/503/358 1343/515/368 +f 1342/503/358 1366/504/359 1367/516/369 1343/515/368 +f 1366/504/359 1390/505/360 1391/517/370 1367/516/369 +f 1390/505/360 1414/506/361 1415/518/371 1391/517/370 +f 1414/506/361 1438/507/362 1439/519/372 1415/518/371 +f 1438/507/362 1462/508/363 1463/520/373 1439/519/372 +f 1462/508/363 1486/509/364 1487/521/374 1463/520/373 +f 1486/509/364 1510/510/365 1511/522/375 1487/521/374 +f 1510/510/365 1534/511/366 1535/523/376 1511/522/375 +f 1534/511/366 1558/512/367 1559/524/377 1535/523/376 +f 1558/512/367 1580/525/347 1559/524/377 +f 1336/526/327 1343/515/368 1344/527/378 +f 1343/515/368 1367/516/369 1368/528/379 1344/527/378 +f 1367/516/369 1391/517/370 1392/529/380 1368/528/379 +f 1391/517/370 1415/518/371 1416/530/381 1392/529/380 +f 1415/518/371 1439/519/372 1440/531/382 1416/530/381 +f 1439/519/372 1463/520/373 1464/532/383 1440/531/382 +f 1463/520/373 1487/521/374 1488/533/384 1464/532/383 +f 1487/521/374 1511/522/375 1512/534/385 1488/533/384 +f 1511/522/375 1535/523/376 1536/535/386 1512/534/385 +f 1535/523/376 1559/524/377 1560/536/387 1536/535/386 +f 1559/524/377 1580/537/347 1560/536/387 +f 1336/538/327 1344/527/378 1345/539/388 +f 1344/527/378 1368/528/379 1369/540/389 1345/539/388 +f 1368/528/379 1392/529/380 1393/541/390 1369/540/389 +f 1392/529/380 1416/530/381 1417/542/391 1393/541/390 +f 1416/530/381 1440/531/382 1441/543/392 1417/542/391 +f 1440/531/382 1464/532/383 1465/544/393 1441/543/392 +f 1464/532/383 1488/533/384 1489/545/394 1465/544/393 +f 1488/533/384 1512/534/385 1513/546/395 1489/545/394 +f 1512/534/385 1536/535/386 1537/547/396 1513/546/395 +f 1536/535/386 1560/536/387 1561/548/397 1537/547/396 +f 1560/536/387 1580/549/347 1561/548/397 +f 1336/4/327 1345/468/388 1346/550/398 1337/551/399 +f 1345/468/388 1369/471/389 1370/552/400 1346/550/398 +f 1369/471/389 1393/473/390 1394/553/401 1370/552/400 +f 1393/473/390 1417/475/391 1418/554/402 1394/553/401 +f 1417/475/391 1441/477/392 1442/555/403 1418/554/402 +f 1441/477/392 1465/479/393 1466/556/404 1442/555/403 +f 1465/479/393 1489/481/394 1490/557/405 1466/556/404 +f 1489/481/394 1513/483/395 1514/558/406 1490/557/405 +f 1513/483/395 1537/485/396 1538/559/407 1514/558/406 +f 1537/485/396 1561/487/397 1562/560/408 1538/559/407 +f 1561/487/397 1580/1/347 1581/561/409 1562/560/408 +f 1337/562/399 1346/550/398 1347/563/410 +f 1346/550/398 1370/552/400 1371/564/411 1347/563/410 +f 1370/552/400 1394/553/401 1395/565/412 1371/564/411 +f 1394/553/401 1418/554/402 1419/566/413 1395/565/412 +f 1418/554/402 1442/555/403 1443/567/414 1419/566/413 +f 1442/555/403 1466/556/404 1467/568/415 1443/567/414 +f 1466/556/404 1490/557/405 1491/569/416 1467/568/415 +f 1490/557/405 1514/558/406 1515/570/417 1491/569/416 +f 1514/558/406 1538/559/407 1539/571/418 1515/570/417 +f 1538/559/407 1562/560/408 1563/572/419 1539/571/418 +f 1562/560/408 1581/573/409 1563/572/419 +f 1337/574/399 1347/563/410 1348/575/420 +f 1347/563/410 1371/564/411 1372/576/421 1348/575/420 +f 1371/564/411 1395/565/412 1396/577/422 1372/576/421 +f 1395/565/412 1419/566/413 1420/578/423 1396/577/422 +f 1419/566/413 1443/567/414 1444/579/424 1420/578/423 +f 1443/567/414 1467/568/415 1468/580/425 1444/579/424 +f 1467/568/415 1491/569/416 1492/581/426 1468/580/425 +f 1491/569/416 1515/570/417 1516/582/427 1492/581/426 +f 1515/570/417 1539/571/418 1540/583/428 1516/582/427 +f 1539/571/418 1563/572/419 1564/584/429 1540/583/428 +f 1563/572/419 1581/585/409 1564/584/429 +f 1337/586/399 1348/575/420 1349/587/430 +f 1348/575/420 1372/576/421 1373/588/431 1349/587/430 +f 1372/576/421 1396/577/422 1397/589/432 1373/588/431 +f 1396/577/422 1420/578/423 1421/590/433 1397/589/432 +f 1420/578/423 1444/579/424 1445/591/434 1421/590/433 +f 1444/579/424 1468/580/425 1469/592/435 1445/591/434 +f 1468/580/425 1492/581/426 1493/593/436 1469/592/435 +f 1492/581/426 1516/582/427 1517/594/437 1493/593/436 +f 1516/582/427 1540/583/428 1541/595/438 1517/594/437 +f 1540/583/428 1564/584/429 1565/596/439 1541/595/438 +f 1564/584/429 1581/597/409 1565/596/439 +f 1337/598/399 1349/587/430 1350/599/440 +f 1349/587/430 1373/588/431 1374/600/441 1350/599/440 +f 1373/588/431 1397/589/432 1398/601/442 1374/600/441 +f 1397/589/432 1421/590/433 1422/602/443 1398/601/442 +f 1421/590/433 1445/591/434 1446/603/444 1422/602/443 +f 1445/591/434 1469/592/435 1470/604/445 1446/603/444 +f 1469/592/435 1493/593/436 1494/605/446 1470/604/445 +f 1493/593/436 1517/594/437 1518/606/447 1494/605/446 +f 1517/594/437 1541/595/438 1542/607/448 1518/606/447 +f 1541/595/438 1565/596/439 1566/608/449 1542/607/448 +f 1565/596/439 1581/609/409 1566/608/449 +f 1337/610/399 1350/599/440 1351/539/450 +f 1350/599/440 1374/600/441 1375/540/451 1351/539/450 +f 1374/600/441 1398/601/442 1399/541/452 1375/540/451 +f 1398/601/442 1422/602/443 1423/542/453 1399/541/452 +f 1422/602/443 1446/603/444 1447/543/454 1423/542/453 +f 1446/603/444 1470/604/445 1471/544/455 1447/543/454 +f 1470/604/445 1494/605/446 1495/545/456 1471/544/455 +f 1494/605/446 1518/606/447 1519/546/457 1495/545/456 +f 1518/606/447 1542/607/448 1543/547/458 1519/546/457 +f 1542/607/448 1566/608/449 1567/548/459 1543/547/458 +f 1566/608/449 1581/611/409 1567/548/459 +f 1337/4/399 1351/468/450 1352/469/460 1338/470/461 +f 1351/468/450 1375/471/451 1376/472/462 1352/469/460 +f 1375/471/451 1399/473/452 1400/474/463 1376/472/462 +f 1399/473/452 1423/475/453 1424/476/464 1400/474/463 +f 1423/475/453 1447/477/454 1448/478/465 1424/476/464 +f 1447/477/454 1471/479/455 1472/480/466 1448/478/465 +f 1471/479/455 1495/481/456 1496/482/467 1472/480/466 +f 1495/481/456 1519/483/457 1520/484/468 1496/482/467 +f 1519/483/457 1543/485/458 1544/486/469 1520/484/468 +f 1543/485/458 1567/487/459 1568/488/470 1544/486/469 +f 1567/487/459 1581/1/409 1582/489/471 1568/488/470 +f 1338/490/461 1352/469/460 1353/491/472 +f 1352/469/460 1376/472/462 1377/492/473 1353/491/472 +f 1376/472/462 1400/474/463 1401/493/474 1377/492/473 +f 1400/474/463 1424/476/464 1425/494/475 1401/493/474 +f 1424/476/464 1448/478/465 1449/495/476 1425/494/475 +f 1448/478/465 1472/480/466 1473/496/477 1449/495/476 +f 1472/480/466 1496/482/467 1497/497/478 1473/496/477 +f 1496/482/467 1520/484/468 1521/498/479 1497/497/478 +f 1520/484/468 1544/486/469 1545/499/480 1521/498/479 +f 1544/486/469 1568/488/470 1569/500/481 1545/499/480 +f 1568/488/470 1582/501/471 1569/500/481 +f 1338/502/461 1353/491/472 1354/503/482 +f 1353/491/472 1377/492/473 1378/504/483 1354/503/482 +f 1377/492/473 1401/493/474 1402/505/484 1378/504/483 +f 1401/493/474 1425/494/475 1426/506/485 1402/505/484 +f 1425/494/475 1449/495/476 1450/507/486 1426/506/485 +f 1449/495/476 1473/496/477 1474/508/487 1450/507/486 +f 1473/496/477 1497/497/478 1498/509/488 1474/508/487 +f 1497/497/478 1521/498/479 1522/510/489 1498/509/488 +f 1521/498/479 1545/499/480 1546/511/490 1522/510/489 +f 1545/499/480 1569/500/481 1570/512/491 1546/511/490 +f 1569/500/481 1582/513/471 1570/512/491 +f 1338/514/461 1354/503/482 1355/515/492 +f 1354/503/482 1378/504/483 1379/516/493 1355/515/492 +f 1378/504/483 1402/505/484 1403/517/494 1379/516/493 +f 1402/505/484 1426/506/485 1427/518/495 1403/517/494 +f 1426/506/485 1450/507/486 1451/519/496 1427/518/495 +f 1450/507/486 1474/508/487 1475/520/497 1451/519/496 +f 1474/508/487 1498/509/488 1499/521/498 1475/520/497 +f 1498/509/488 1522/510/489 1523/522/499 1499/521/498 +f 1522/510/489 1546/511/490 1547/523/500 1523/522/499 +f 1546/511/490 1570/512/491 1571/524/501 1547/523/500 +f 1570/512/491 1582/525/471 1571/524/501 +f 1338/526/461 1355/515/492 1356/527/502 +f 1355/515/492 1379/516/493 1380/528/503 1356/527/502 +f 1379/516/493 1403/517/494 1404/529/504 1380/528/503 +f 1403/517/494 1427/518/495 1428/530/505 1404/529/504 +f 1427/518/495 1451/519/496 1452/531/506 1428/530/505 +f 1451/519/496 1475/520/497 1476/532/507 1452/531/506 +f 1475/520/497 1499/521/498 1500/533/508 1476/532/507 +f 1499/521/498 1523/522/499 1524/534/509 1500/533/508 +f 1523/522/499 1547/523/500 1548/535/510 1524/534/509 +f 1547/523/500 1571/524/501 1572/536/511 1548/535/510 +f 1571/524/501 1582/537/471 1572/536/511 +f 1338/538/461 1356/527/502 1357/539/512 +f 1356/527/502 1380/528/503 1381/540/513 1357/539/512 +f 1380/528/503 1404/529/504 1405/541/514 1381/540/513 +f 1404/529/504 1428/530/505 1429/542/515 1405/541/514 +f 1428/530/505 1452/531/506 1453/543/516 1429/542/515 +f 1452/531/506 1476/532/507 1477/544/517 1453/543/516 +f 1476/532/507 1500/533/508 1501/545/518 1477/544/517 +f 1500/533/508 1524/534/509 1525/546/519 1501/545/518 +f 1524/534/509 1548/535/510 1549/547/520 1525/546/519 +f 1548/535/510 1572/536/511 1573/548/521 1549/547/520 +f 1572/536/511 1582/549/471 1573/548/521 +f 1338/4/461 1357/468/512 1358/550/522 1335/551/324 +f 1357/468/512 1381/471/513 1382/552/523 1358/550/522 +f 1381/471/513 1405/473/514 1406/553/524 1382/552/523 +f 1405/473/514 1429/475/515 1430/554/525 1406/553/524 +f 1429/475/515 1453/477/516 1454/555/526 1430/554/525 +f 1453/477/516 1477/479/517 1478/556/527 1454/555/526 +f 1477/479/517 1501/481/518 1502/557/528 1478/556/527 +f 1501/481/518 1525/483/519 1526/558/529 1502/557/528 +f 1525/483/519 1549/485/520 1550/559/530 1526/558/529 +f 1549/485/520 1573/487/521 1574/560/531 1550/559/530 +f 1573/487/521 1582/1/471 1579/561/346 1574/560/531 +f 1335/562/324 1358/550/522 1359/563/532 +f 1358/550/522 1382/552/523 1383/564/533 1359/563/532 +f 1382/552/523 1406/553/524 1407/565/534 1383/564/533 +f 1406/553/524 1430/554/525 1431/566/535 1407/565/534 +f 1430/554/525 1454/555/526 1455/567/536 1431/566/535 +f 1454/555/526 1478/556/527 1479/568/537 1455/567/536 +f 1478/556/527 1502/557/528 1503/569/538 1479/568/537 +f 1502/557/528 1526/558/529 1527/570/539 1503/569/538 +f 1526/558/529 1550/559/530 1551/571/540 1527/570/539 +f 1550/559/530 1574/560/531 1575/572/541 1551/571/540 +f 1574/560/531 1579/573/346 1575/572/541 +f 1335/574/324 1359/563/532 1360/575/542 +f 1359/563/532 1383/564/533 1384/576/543 1360/575/542 +f 1383/564/533 1407/565/534 1408/577/544 1384/576/543 +f 1407/565/534 1431/566/535 1432/578/545 1408/577/544 +f 1431/566/535 1455/567/536 1456/579/546 1432/578/545 +f 1455/567/536 1479/568/537 1480/580/547 1456/579/546 +f 1479/568/537 1503/569/538 1504/581/548 1480/580/547 +f 1503/569/538 1527/570/539 1528/582/549 1504/581/548 +f 1527/570/539 1551/571/540 1552/583/550 1528/582/549 +f 1551/571/540 1575/572/541 1576/584/551 1552/583/550 +f 1575/572/541 1579/585/346 1576/584/551 +f 1335/586/324 1360/575/542 1361/587/552 +f 1360/575/542 1384/576/543 1385/588/553 1361/587/552 +f 1384/576/543 1408/577/544 1409/589/554 1385/588/553 +f 1408/577/544 1432/578/545 1433/590/555 1409/589/554 +f 1432/578/545 1456/579/546 1457/591/556 1433/590/555 +f 1456/579/546 1480/580/547 1481/592/557 1457/591/556 +f 1480/580/547 1504/581/548 1505/593/558 1481/592/557 +f 1504/581/548 1528/582/549 1529/594/559 1505/593/558 +f 1528/582/549 1552/583/550 1553/595/560 1529/594/559 +f 1552/583/550 1576/584/551 1577/596/561 1553/595/560 +f 1576/584/551 1579/597/346 1577/596/561 +f 1335/598/324 1361/587/552 1362/599/562 +f 1361/587/552 1385/588/553 1386/600/563 1362/599/562 +f 1385/588/553 1409/589/554 1410/601/564 1386/600/563 +f 1409/589/554 1433/590/555 1434/602/565 1410/601/564 +f 1433/590/555 1457/591/556 1458/603/566 1434/602/565 +f 1457/591/556 1481/592/557 1482/604/567 1458/603/566 +f 1481/592/557 1505/593/558 1506/605/568 1482/604/567 +f 1505/593/558 1529/594/559 1530/606/569 1506/605/568 +f 1529/594/559 1553/595/560 1554/607/570 1530/606/569 +f 1553/595/560 1577/596/561 1578/608/571 1554/607/570 +f 1577/596/561 1579/609/346 1578/608/571 +f 1335/610/324 1362/599/562 1339/539/325 +f 1362/599/562 1386/600/563 1363/540/328 1339/539/325 +f 1386/600/563 1410/601/564 1387/541/330 1363/540/328 +f 1410/601/564 1434/602/565 1411/542/332 1387/541/330 +f 1434/602/565 1458/603/566 1435/543/334 1411/542/332 +f 1458/603/566 1482/604/567 1459/544/336 1435/543/334 +f 1482/604/567 1506/605/568 1483/545/338 1459/544/336 +f 1506/605/568 1530/606/569 1507/546/340 1483/545/338 +f 1530/606/569 1554/607/570 1531/547/342 1507/546/340 +f 1554/607/570 1578/608/571 1555/548/344 1531/547/342 +f 1578/608/571 1579/611/346 1555/548/344 +f 1579/4/346 1582/1/471 1581/65/409 1580/66/347 +f 1335/1/324 1336/65/327 1337/66/399 1338/4/461 + +v 31.36711502075195 615.50128173828125 -40.16886520385742 +v 31.36711502075195 618.23480224609375 -40.03647232055664 +v 31.36711502075195 623.12298583984375 -39.37255859375000 +v 31.36711502075195 628.38854980468750 -38.10228729248047 +v 31.36711502075195 633.03704833984375 -36.43727874755859 +v 31.36711502075195 636.61712646484375 -34.72630691528320 +v 31.36711502075195 640.16278076171875 -32.55932235717773 +v 31.36711502075195 643.57073974609375 -29.88249015808105 +v 31.36711502075195 645.71520996093750 -27.78809356689453 +v 31.36711502075195 647.72204589843750 -25.42721176147461 +v 31.36711502075195 649.56048583984375 -22.78389358520508 +v 31.36711502075195 651.20007324218750 -19.84218406677246 +v 31.36711502075195 652.61022949218750 -16.58613014221191 +v 31.36711502075195 653.76019287109375 -12.99977874755859 +v 31.36711502075195 654.61956787109375 -9.06717681884766 +v 31.36711502075195 655.15759277343750 -4.77236986160278 +v 31.36711502075195 655.34368896484375 -0.09940527379513 +v 31.36711502075195 654.93182373046875 6.76958894729614 +v 31.36711502075195 654.23132324218750 10.88530254364014 +v 31.36711502075195 653.22570800781250 14.64853191375732 +v 31.36711502075195 651.94543457031250 18.07505607604980 +v 31.36711502075195 650.42114257812500 21.18065452575684 +v 31.36711502075195 648.68322753906250 23.98110389709473 +v 31.36711502075195 646.76226806640625 26.49218750000000 +v 31.36711502075195 644.68872070312500 28.72967910766602 +v 31.36711502075195 641.35913085937500 31.60745620727539 +v 31.36711502075195 637.85791015625000 33.95841217041016 +v 31.36711502075195 634.28802490234375 35.83580398559570 +v 31.36711502075195 629.59936523437500 37.69438171386719 +v 31.36711502075195 625.21582031250000 38.93196868896484 +v 31.36711502075195 620.53735351562500 39.79799652099609 +v 31.36711502075195 617.19378662109375 40.13751220703125 +v 31.36711502075195 615.61480712890625 40.19707870483398 +v 81.36711883544922 615.50128173828125 -40.16886520385742 +v 81.36711883544922 618.23480224609375 -40.03647232055664 +v 81.36711883544922 623.12298583984375 -39.37255859375000 +v 81.36711883544922 628.38854980468750 -38.10228729248047 +v 81.36711883544922 633.03704833984375 -36.43727874755859 +v 81.36711883544922 636.61712646484375 -34.72630691528320 +v 81.36711883544922 640.16278076171875 -32.55932235717773 +v 81.36711883544922 643.57073974609375 -29.88249015808105 +v 81.36711883544922 645.71520996093750 -27.78809356689453 +v 81.36711883544922 647.72204589843750 -25.42721176147461 +v 81.36711883544922 649.56048583984375 -22.78389358520508 +v 81.36711883544922 651.20007324218750 -19.84218406677246 +v 81.36711883544922 652.61022949218750 -16.58613014221191 +v 81.36711883544922 653.76019287109375 -12.99977874755859 +v 81.36711883544922 654.61956787109375 -9.06717681884766 +v 81.36711883544922 655.15759277343750 -4.77236986160278 +v 81.36711883544922 655.34368896484375 -0.09940527379513 +v 81.36711883544922 654.93182373046875 6.76958894729614 +v 81.36711883544922 654.23132324218750 10.88530254364014 +v 81.36711883544922 653.22570800781250 14.64853191375732 +v 81.36711883544922 651.94543457031250 18.07505607604980 +v 81.36711883544922 650.42114257812500 21.18065452575684 +v 81.36711883544922 648.68322753906250 23.98110389709473 +v 81.36711883544922 646.76226806640625 26.49218750000000 +v 81.36711883544922 644.68872070312500 28.72967910766602 +v 81.36711883544922 641.35913085937500 31.60745620727539 +v 81.36711883544922 637.85791015625000 33.95841217041016 +v 81.36711883544922 634.28802490234375 35.83580398559570 +v 81.36711883544922 629.59936523437500 37.69438171386719 +v 81.36711883544922 625.21582031250000 38.93196868896484 +v 81.36711883544922 620.53735351562500 39.79799652099609 +v 81.36711883544922 617.19378662109375 40.13751220703125 +v 81.36711883544922 615.61480712890625 40.19707870483398 +v 31.36711502075195 615.60461425781250 -42.30230331420898 +v 31.36711502075195 618.43060302734375 -42.16543197631836 +v 31.36711502075195 623.51818847656250 -41.47443008422852 +v 31.36711502075195 629.00091552734375 -40.15177917480469 +v 31.36711502075195 633.85986328125000 -38.41139602661133 +v 31.36711502075195 637.63726806640625 -36.60610198974609 +v 31.36711502075195 641.38360595703125 -34.31647491455078 +v 31.36711502075195 644.98071289062500 -31.49105644226074 +v 31.36711502075195 647.27850341796875 -29.24694633483887 +v 31.36711502075195 649.41650390625000 -26.73174285888672 +v 31.36711502075195 651.37457275390625 -23.91640663146973 +v 31.36711502075195 653.11773681640625 -20.78890419006348 +v 31.36711502075195 654.61206054687500 -17.33847045898438 +v 31.36711502075195 655.82519531250000 -13.55512332916260 +v 31.36711502075195 656.72692871093750 -9.42866516113281 +v 31.36711502075195 657.28826904296875 -4.94793319702148 +v 31.36711502075195 657.48217773437500 -0.07792840898037 +v 31.36711502075195 657.05700683593750 7.01342201232910 +v 31.36711502075195 656.32043457031250 11.34118080139160 +v 31.36711502075195 655.26263427734375 15.29954719543457 +v 31.36711502075195 653.90936279296875 18.92146492004395 +v 31.36711502075195 652.29193115234375 22.21689414978027 +v 31.36711502075195 650.44311523437500 25.19602394104004 +v 31.36711502075195 648.39746093750000 27.87006759643555 +v 31.36711502075195 646.17498779296875 30.26830673217773 +v 31.36711502075195 642.65765380859375 33.30834960937500 +v 31.36711502075195 638.95349121093750 35.79554367065430 +v 31.36711502075195 635.18121337890625 37.77937698364258 +v 31.36711502075195 630.28491210937500 39.72027587890625 +v 31.36711502075195 625.70141601562500 41.01430511474609 +v 31.36711502075195 620.84014892578125 41.91417312622070 +v 31.36711502075195 617.34210205078125 42.26937484741211 +v 31.36711502075195 615.69537353515625 42.33149719238281 +v 81.36711883544922 615.60461425781250 -42.30230331420898 +v 81.36711883544922 618.43060302734375 -42.16543197631836 +v 81.36711883544922 623.51818847656250 -41.47443008422852 +v 81.36711883544922 629.00091552734375 -40.15177917480469 +v 81.36711883544922 633.85986328125000 -38.41139602661133 +v 81.36711883544922 637.63726806640625 -36.60610198974609 +v 81.36711883544922 641.38360595703125 -34.31647491455078 +v 81.36711883544922 644.98071289062500 -31.49105644226074 +v 81.36711883544922 647.27850341796875 -29.24694633483887 +v 81.36711883544922 649.41650390625000 -26.73174285888672 +v 81.36711883544922 651.37457275390625 -23.91640663146973 +v 81.36711883544922 653.11773681640625 -20.78890419006348 +v 81.36711883544922 654.61206054687500 -17.33847045898438 +v 81.36711883544922 655.82519531250000 -13.55512332916260 +v 81.36711883544922 656.72692871093750 -9.42866516113281 +v 81.36711883544922 657.28826904296875 -4.94793319702148 +v 81.36711883544922 657.48217773437500 -0.07792840898037 +v 81.36711883544922 657.05700683593750 7.01342201232910 +v 81.36711883544922 656.32043457031250 11.34118080139160 +v 81.36711883544922 655.26263427734375 15.29954719543457 +v 81.36711883544922 653.90936279296875 18.92146492004395 +v 81.36711883544922 652.29193115234375 22.21689414978027 +v 81.36711883544922 650.44311523437500 25.19602394104004 +v 81.36711883544922 648.39746093750000 27.87006759643555 +v 81.36711883544922 646.17498779296875 30.26830673217773 +v 81.36711883544922 642.65765380859375 33.30834960937500 +v 81.36711883544922 638.95349121093750 35.79554367065430 +v 81.36711883544922 635.18121337890625 37.77937698364258 +v 81.36711883544922 630.28491210937500 39.72027587890625 +v 81.36711883544922 625.70141601562500 41.01430511474609 +v 81.36711883544922 620.84014892578125 41.91417312622070 +v 81.36711883544922 617.34210205078125 42.26937484741211 +v 81.36711883544922 615.69537353515625 42.33149719238281 +# 132 vertices + +# 0 normal + +# 0 texture coordinate + +g 挤压.3_1 +usemtl 材质 +f 1649/1/1 1650/2/2 1683/3/2 1682/4/1 +f 1650/2/2 1651/5/3 1684/6/3 1683/3/2 +f 1651/5/3 1652/7/4 1685/8/4 1684/6/3 +f 1652/7/4 1653/9/5 1686/10/5 1685/8/4 +f 1653/9/5 1654/11/6 1687/12/6 1686/10/5 +f 1654/11/6 1655/13/7 1688/14/7 1687/12/6 +f 1655/13/7 1656/15/8 1689/16/8 1688/14/7 +f 1656/15/8 1657/17/9 1690/18/9 1689/16/8 +f 1657/17/9 1658/19/10 1691/20/10 1690/18/9 +f 1658/19/10 1659/21/11 1692/22/11 1691/20/10 +f 1659/21/11 1660/23/12 1693/24/12 1692/22/11 +f 1660/23/12 1661/25/13 1694/26/13 1693/24/12 +f 1661/25/13 1662/27/14 1695/28/14 1694/26/13 +f 1662/27/14 1663/29/15 1696/30/15 1695/28/14 +f 1663/29/15 1664/31/16 1697/32/16 1696/30/15 +f 1664/31/16 1665/33/17 1698/34/17 1697/32/16 +f 1665/33/17 1666/35/18 1699/36/18 1698/34/17 +f 1666/35/18 1667/37/19 1700/38/19 1699/36/18 +f 1667/37/19 1668/39/20 1701/40/20 1700/38/19 +f 1668/39/20 1669/41/21 1702/42/21 1701/40/20 +f 1669/41/21 1670/43/22 1703/44/22 1702/42/21 +f 1670/43/22 1671/45/23 1704/46/23 1703/44/22 +f 1671/45/23 1672/47/24 1705/48/24 1704/46/23 +f 1672/47/24 1673/49/25 1706/50/25 1705/48/24 +f 1673/49/25 1674/51/26 1707/52/26 1706/50/25 +f 1674/51/26 1675/53/27 1708/54/27 1707/52/26 +f 1675/53/27 1676/55/28 1709/56/28 1708/54/27 +f 1676/55/28 1677/57/29 1710/58/29 1709/56/28 +f 1677/57/29 1678/59/30 1711/60/30 1710/58/29 +f 1678/59/30 1679/61/31 1712/62/31 1711/60/30 +f 1679/61/31 1680/63/32 1713/64/32 1712/62/31 +f 1680/63/32 1681/65/33 1714/66/33 1713/64/32 +f 1583/1/1 1649/1/1 1682/4/1 1616/4/1 +f 1616/4/1 1682/4/1 1683/3/2 1617/3/2 +f 1584/2/2 1650/2/2 1649/1/1 1583/1/1 +f 1617/3/2 1683/3/2 1684/6/3 1618/6/3 +f 1585/5/3 1651/5/3 1650/2/2 1584/2/2 +f 1618/6/3 1684/6/3 1685/8/4 1619/8/4 +f 1586/7/4 1652/7/4 1651/5/3 1585/5/3 +f 1619/8/4 1685/8/4 1686/10/5 1620/10/5 +f 1587/9/5 1653/9/5 1652/7/4 1586/7/4 +f 1620/10/5 1686/10/5 1687/12/6 1621/12/6 +f 1588/11/6 1654/11/6 1653/9/5 1587/9/5 +f 1621/12/6 1687/12/6 1688/14/7 1622/14/7 +f 1589/13/7 1655/13/7 1654/11/6 1588/11/6 +f 1622/14/7 1688/14/7 1689/16/8 1623/16/8 +f 1590/15/8 1656/15/8 1655/13/7 1589/13/7 +f 1623/16/8 1689/16/8 1690/18/9 1624/18/9 +f 1591/17/9 1657/17/9 1656/15/8 1590/15/8 +f 1624/18/9 1690/18/9 1691/20/10 1625/20/10 +f 1592/19/10 1658/19/10 1657/17/9 1591/17/9 +f 1625/20/10 1691/20/10 1692/22/11 1626/22/11 +f 1593/21/11 1659/21/11 1658/19/10 1592/19/10 +f 1626/22/11 1692/22/11 1693/24/12 1627/24/12 +f 1594/23/12 1660/23/12 1659/21/11 1593/21/11 +f 1627/24/12 1693/24/12 1694/26/13 1628/26/13 +f 1595/25/13 1661/25/13 1660/23/12 1594/23/12 +f 1628/26/13 1694/26/13 1695/28/14 1629/28/14 +f 1596/27/14 1662/27/14 1661/25/13 1595/25/13 +f 1629/28/14 1695/28/14 1696/30/15 1630/30/15 +f 1597/29/15 1663/29/15 1662/27/14 1596/27/14 +f 1630/30/15 1696/30/15 1697/32/16 1631/32/16 +f 1598/31/16 1664/31/16 1663/29/15 1597/29/15 +f 1631/32/16 1697/32/16 1698/34/17 1632/34/17 +f 1599/33/17 1665/33/17 1664/31/16 1598/31/16 +f 1632/34/17 1698/34/17 1699/36/18 1633/36/18 +f 1600/35/18 1666/35/18 1665/33/17 1599/33/17 +f 1633/36/18 1699/36/18 1700/38/19 1634/38/19 +f 1601/37/19 1667/37/19 1666/35/18 1600/35/18 +f 1634/38/19 1700/38/19 1701/40/20 1635/40/20 +f 1602/39/20 1668/39/20 1667/37/19 1601/37/19 +f 1635/40/20 1701/40/20 1702/42/21 1636/42/21 +f 1603/41/21 1669/41/21 1668/39/20 1602/39/20 +f 1636/42/21 1702/42/21 1703/44/22 1637/44/22 +f 1604/43/22 1670/43/22 1669/41/21 1603/41/21 +f 1637/44/22 1703/44/22 1704/46/23 1638/46/23 +f 1605/45/23 1671/45/23 1670/43/22 1604/43/22 +f 1638/46/23 1704/46/23 1705/48/24 1639/48/24 +f 1606/47/24 1672/47/24 1671/45/23 1605/45/23 +f 1639/48/24 1705/48/24 1706/50/25 1640/50/25 +f 1607/49/25 1673/49/25 1672/47/24 1606/47/24 +f 1640/50/25 1706/50/25 1707/52/26 1641/52/26 +f 1608/51/26 1674/51/26 1673/49/25 1607/49/25 +f 1641/52/26 1707/52/26 1708/54/27 1642/54/27 +f 1609/53/27 1675/53/27 1674/51/26 1608/51/26 +f 1642/54/27 1708/54/27 1709/56/28 1643/56/28 +f 1610/55/28 1676/55/28 1675/53/27 1609/53/27 +f 1643/56/28 1709/56/28 1710/58/29 1644/58/29 +f 1611/57/29 1677/57/29 1676/55/28 1610/55/28 +f 1644/58/29 1710/58/29 1711/60/30 1645/60/30 +f 1612/59/30 1678/59/30 1677/57/29 1611/57/29 +f 1645/60/30 1711/60/30 1712/62/31 1646/62/31 +f 1613/61/31 1679/61/31 1678/59/30 1612/59/30 +f 1646/62/31 1712/62/31 1713/64/32 1647/64/32 +f 1614/63/32 1680/63/32 1679/61/31 1613/61/31 +f 1647/64/32 1713/64/32 1714/66/33 1648/66/33 +f 1648/66/33 1714/66/33 1681/65/33 1615/65/33 +f 1615/65/33 1681/65/33 1680/63/32 1614/63/32 + diff --git a/modules/dreamview/frontend/dist/086924bdd797c6de1ae692b0c77b9d63.obj b/modules/dreamview/frontend/dist/086924bdd797c6de1ae692b0c77b9d63.obj new file mode 100644 index 00000000000..4d86366562c --- /dev/null +++ b/modules/dreamview/frontend/dist/086924bdd797c6de1ae692b0c77b9d63.obj @@ -0,0 +1,4589 @@ +# WaveFront *.obj file (generated by CINEMA 4D) + +mtllib ./traffic_light.mtl + +v 31.36711502075195 531.24267578125000 -40.16886520385742 +v 31.36711502075195 533.97619628906250 -40.03647232055664 +v 31.36711502075195 538.86437988281250 -39.37255859375000 +v 31.36711502075195 544.12994384765625 -38.10228729248047 +v 31.36711502075195 548.77844238281250 -36.43727874755859 +v 31.36711502075195 552.35852050781250 -34.72630691528320 +v 31.36711502075195 555.90417480468750 -32.55932235717773 +v 31.36711502075195 559.31213378906250 -29.88249015808105 +v 31.36711502075195 561.45660400390625 -27.78809356689453 +v 31.36711502075195 563.46343994140625 -25.42721176147461 +v 31.36711502075195 565.30187988281250 -22.78389358520508 +v 31.36711502075195 566.94146728515625 -19.84218406677246 +v 31.36711502075195 568.35162353515625 -16.58613014221191 +v 31.36711502075195 569.50158691406250 -12.99977874755859 +v 31.36711502075195 570.36096191406250 -9.06717681884766 +v 31.36711502075195 570.89898681640625 -4.77236986160278 +v 31.36711502075195 571.08508300781250 -0.09940527379513 +v 31.36711502075195 570.67321777343750 6.76958894729614 +v 31.36711502075195 569.97271728515625 10.88530254364014 +v 31.36711502075195 568.96710205078125 14.64853191375732 +v 31.36711502075195 567.68682861328125 18.07505607604980 +v 31.36711502075195 566.16253662109375 21.18065452575684 +v 31.36711502075195 564.42462158203125 23.98110389709473 +v 31.36711502075195 562.50366210937500 26.49218750000000 +v 31.36711502075195 560.43011474609375 28.72967910766602 +v 31.36711502075195 557.10052490234375 31.60745620727539 +v 31.36711502075195 553.59930419921875 33.95841217041016 +v 31.36711502075195 550.02941894531250 35.83580398559570 +v 31.36711502075195 545.34075927734375 37.69438171386719 +v 31.36711502075195 540.95721435546875 38.93196868896484 +v 31.36711502075195 536.27874755859375 39.79799652099609 +v 31.36711502075195 532.93518066406250 40.13751220703125 +v 31.36711502075195 531.35620117187500 40.19707870483398 +v 81.36711883544922 531.24267578125000 -40.16886520385742 +v 81.36711883544922 533.97619628906250 -40.03647232055664 +v 81.36711883544922 538.86437988281250 -39.37255859375000 +v 81.36711883544922 544.12994384765625 -38.10228729248047 +v 81.36711883544922 548.77844238281250 -36.43727874755859 +v 81.36711883544922 552.35852050781250 -34.72630691528320 +v 81.36711883544922 555.90417480468750 -32.55932235717773 +v 81.36711883544922 559.31213378906250 -29.88249015808105 +v 81.36711883544922 561.45660400390625 -27.78809356689453 +v 81.36711883544922 563.46343994140625 -25.42721176147461 +v 81.36711883544922 565.30187988281250 -22.78389358520508 +v 81.36711883544922 566.94146728515625 -19.84218406677246 +v 81.36711883544922 568.35162353515625 -16.58613014221191 +v 81.36711883544922 569.50158691406250 -12.99977874755859 +v 81.36711883544922 570.36096191406250 -9.06717681884766 +v 81.36711883544922 570.89898681640625 -4.77236986160278 +v 81.36711883544922 571.08508300781250 -0.09940527379513 +v 81.36711883544922 570.67321777343750 6.76958894729614 +v 81.36711883544922 569.97271728515625 10.88530254364014 +v 81.36711883544922 568.96710205078125 14.64853191375732 +v 81.36711883544922 567.68682861328125 18.07505607604980 +v 81.36711883544922 566.16253662109375 21.18065452575684 +v 81.36711883544922 564.42462158203125 23.98110389709473 +v 81.36711883544922 562.50366210937500 26.49218750000000 +v 81.36711883544922 560.43011474609375 28.72967910766602 +v 81.36711883544922 557.10052490234375 31.60745620727539 +v 81.36711883544922 553.59930419921875 33.95841217041016 +v 81.36711883544922 550.02941894531250 35.83580398559570 +v 81.36711883544922 545.34075927734375 37.69438171386719 +v 81.36711883544922 540.95721435546875 38.93196868896484 +v 81.36711883544922 536.27874755859375 39.79799652099609 +v 81.36711883544922 532.93518066406250 40.13751220703125 +v 81.36711883544922 531.35620117187500 40.19707870483398 +v 31.36711502075195 531.34594726562500 -42.30230331420898 +v 31.36711502075195 534.17193603515625 -42.16543197631836 +v 31.36711502075195 539.25958251953125 -41.47443008422852 +v 31.36711502075195 544.74224853515625 -40.15177917480469 +v 31.36711502075195 549.60119628906250 -38.41139602661133 +v 31.36711502075195 553.37860107421875 -36.60610198974609 +v 31.36711502075195 557.12493896484375 -34.31647491455078 +v 31.36711502075195 560.72204589843750 -31.49105644226074 +v 31.36711502075195 563.01983642578125 -29.24694633483887 +v 31.36711502075195 565.15783691406250 -26.73174285888672 +v 31.36711502075195 567.11590576171875 -23.91640663146973 +v 31.36711502075195 568.85906982421875 -20.78890419006348 +v 31.36711502075195 570.35339355468750 -17.33847045898438 +v 31.36711502075195 571.56652832031250 -13.55512332916260 +v 31.36711502075195 572.46826171875000 -9.42866516113281 +v 31.36711502075195 573.02960205078125 -4.94793319702148 +v 31.36711502075195 573.22351074218750 -0.07792840898037 +v 31.36711502075195 572.79833984375000 7.01342201232910 +v 31.36711502075195 572.06176757812500 11.34118080139160 +v 31.36711502075195 571.00396728515625 15.29954719543457 +v 31.36711502075195 569.65069580078125 18.92146492004395 +v 31.36711502075195 568.03326416015625 22.21689414978027 +v 31.36711502075195 566.18444824218750 25.19602394104004 +v 31.36711502075195 564.13879394531250 27.87006759643555 +v 31.36711502075195 561.91632080078125 30.26830673217773 +v 31.36711502075195 558.39898681640625 33.30834960937500 +v 31.36711502075195 554.69488525390625 35.79554367065430 +v 31.36711502075195 550.92254638671875 37.77937698364258 +v 31.36711502075195 546.02624511718750 39.72027587890625 +v 31.36711502075195 541.44274902343750 41.01430511474609 +v 31.36711502075195 536.58148193359375 41.91417312622070 +v 31.36711502075195 533.08343505859375 42.26937484741211 +v 31.36711502075195 531.43670654296875 42.33149719238281 +v 81.36711883544922 531.34594726562500 -42.30230331420898 +v 81.36711883544922 534.17193603515625 -42.16543197631836 +v 81.36711883544922 539.25958251953125 -41.47443008422852 +v 81.36711883544922 544.74224853515625 -40.15177917480469 +v 81.36711883544922 549.60119628906250 -38.41139602661133 +v 81.36711883544922 553.37860107421875 -36.60610198974609 +v 81.36711883544922 557.12493896484375 -34.31647491455078 +v 81.36711883544922 560.72204589843750 -31.49105644226074 +v 81.36711883544922 563.01983642578125 -29.24694633483887 +v 81.36711883544922 565.15783691406250 -26.73174285888672 +v 81.36711883544922 567.11590576171875 -23.91640663146973 +v 81.36711883544922 568.85906982421875 -20.78890419006348 +v 81.36711883544922 570.35339355468750 -17.33847045898438 +v 81.36711883544922 571.56652832031250 -13.55512332916260 +v 81.36711883544922 572.46826171875000 -9.42866516113281 +v 81.36711883544922 573.02960205078125 -4.94793319702148 +v 81.36711883544922 573.22351074218750 -0.07792840898037 +v 81.36711883544922 572.79833984375000 7.01342201232910 +v 81.36711883544922 572.06176757812500 11.34118080139160 +v 81.36711883544922 571.00396728515625 15.29954719543457 +v 81.36711883544922 569.65069580078125 18.92146492004395 +v 81.36711883544922 568.03326416015625 22.21689414978027 +v 81.36711883544922 566.18444824218750 25.19602394104004 +v 81.36711883544922 564.13879394531250 27.87006759643555 +v 81.36711883544922 561.91632080078125 30.26830673217773 +v 81.36711883544922 558.39898681640625 33.30834960937500 +v 81.36711883544922 554.69488525390625 35.79554367065430 +v 81.36711883544922 550.92254638671875 37.77937698364258 +v 81.36711883544922 546.02624511718750 39.72027587890625 +v 81.36711883544922 541.44274902343750 41.01430511474609 +v 81.36711883544922 536.58148193359375 41.91417312622070 +v 81.36711883544922 533.08343505859375 42.26937484741211 +v 81.36711883544922 531.43670654296875 42.33149719238281 +# 132 vertices + +vn 0.00000000000000 0.04837580770254 -0.99882918596268 +vn 0.00000000000000 0.09156414866447 -0.99579918384552 +vn 0.00000000000000 0.18478663265705 -0.98277866840363 +vn 0.00000000000000 0.28625822067261 -0.95815253257751 +vn 0.00000000000000 0.38469305634499 -0.92304456233978 +vn 0.00000000000000 0.47697460651398 -0.87891709804535 +vn 0.00000000000000 0.57057911157608 -0.82124263048172 +vn 0.00000000000000 0.65915924310684 -0.75200343132019 +vn 0.00000000000000 0.73110723495483 -0.68226259946823 +vn 0.00000000000000 0.79236483573914 -0.61004751920700 +vn 0.00000000000000 0.84826505184174 -0.52957189083099 +vn 0.00000000000000 0.89668446779251 -0.44267019629478 +vn 0.00000000000000 0.93607980012894 -0.35178777575493 +vn 0.00000000000000 0.96569234132767 -0.25968879461288 +vn 0.00000000000000 0.98561018705368 -0.16903407871723 +vn 0.00000000000000 0.99662184715271 -0.08212731033564 +vn 0.00000000000000 0.99994969367981 0.01003137230873 +vn 0.00000000000000 0.99348413944244 0.11397051066160 +vn 0.00000000000000 0.97701078653336 0.21318985521793 +vn 0.00000000000000 0.95254129171371 0.30440944433212 +vn 0.00000000000000 0.91833972930908 0.39579299092293 +vn 0.00000000000000 0.87476831674576 0.48454141616821 +vn 0.00000000000000 0.82295536994934 0.56810605525970 +vn 0.00000000000000 0.76470047235489 0.64438593387604 +vn 0.00000000000000 0.69476622343063 0.71923559904099 +vn 0.00000000000000 0.60679340362549 0.79485958814621 +vn 0.00000000000000 0.51220065355301 0.85886579751968 +vn 0.00000000000000 0.41757127642632 0.90864413976669 +vn 0.00000000000000 0.32050904631615 0.94724547863007 +vn 0.00000000000000 0.22710019350052 0.97387140989304 +vn 0.00000000000000 0.14162696897984 0.98992007970810 +vn 0.00000000000000 0.06937694549561 0.99759054183960 +vn 0.00000000000000 0.03768781572580 0.99928957223892 +# 33 normals + +vt 0.00000000000000 1.00000000000000 0.00000000000000 +vt 0.02154290862381 1.00000000000000 0.00000000000000 +vt 0.02154290862381 0.00000000000000 0.00000000000000 +vt 0.00000000000000 0.00000000000000 0.00000000000000 +vt 0.06037512049079 1.00000000000000 0.00000000000000 +vt 0.06037512049079 0.00000000000000 0.00000000000000 +vt 0.10301384329796 1.00000000000000 0.00000000000000 +vt 0.10301384329796 0.00000000000000 0.00000000000000 +vt 0.14188241958618 1.00000000000000 0.00000000000000 +vt 0.14188241958618 0.00000000000000 0.00000000000000 +vt 0.17311717569828 1.00000000000000 0.00000000000000 +vt 0.17311717569828 0.00000000000000 0.00000000000000 +vt 0.20582786202431 1.00000000000000 0.00000000000000 +vt 0.20582786202431 0.00000000000000 0.00000000000000 +vt 0.23994076251984 1.00000000000000 0.00000000000000 +vt 0.23994076251984 0.00000000000000 0.00000000000000 +vt 0.26353690028191 1.00000000000000 0.00000000000000 +vt 0.26353690028191 0.00000000000000 0.00000000000000 +vt 0.28792801499367 1.00000000000000 0.00000000000000 +vt 0.28792801499367 0.00000000000000 0.00000000000000 +vt 0.31327378749847 1.00000000000000 0.00000000000000 +vt 0.31327378749847 0.00000000000000 0.00000000000000 +vt 0.33978429436684 1.00000000000000 0.00000000000000 +vt 0.33978429436684 0.00000000000000 0.00000000000000 +vt 0.36771568655968 1.00000000000000 0.00000000000000 +vt 0.36771568655968 0.00000000000000 0.00000000000000 +vt 0.39736270904541 1.00000000000000 0.00000000000000 +vt 0.39736270904541 0.00000000000000 0.00000000000000 +vt 0.42904987931252 1.00000000000000 0.00000000000000 +vt 0.42904987931252 0.00000000000000 0.00000000000000 +vt 0.46312206983566 1.00000000000000 0.00000000000000 +vt 0.46312206983566 0.00000000000000 0.00000000000000 +vt 0.49993595480919 1.00000000000000 0.00000000000000 +vt 0.49993595480919 0.00000000000000 0.00000000000000 +vt 0.55410450696945 1.00000000000000 0.00000000000000 +vt 0.55410450696945 0.00000000000000 0.00000000000000 +vt 0.58696860074997 1.00000000000000 0.00000000000000 +vt 0.58696860074997 0.00000000000000 0.00000000000000 +vt 0.61763143539429 1.00000000000000 0.00000000000000 +vt 0.61763143539429 0.00000000000000 0.00000000000000 +vt 0.64642554521561 1.00000000000000 0.00000000000000 +vt 0.64642554521561 0.00000000000000 0.00000000000000 +vt 0.67365831136703 1.00000000000000 0.00000000000000 +vt 0.67365831136703 0.00000000000000 0.00000000000000 +vt 0.69960284233093 1.00000000000000 0.00000000000000 +vt 0.69960284233093 0.00000000000000 0.00000000000000 +vt 0.72449034452438 1.00000000000000 0.00000000000000 +vt 0.72449034452438 0.00000000000000 0.00000000000000 +vt 0.74850374460220 1.00000000000000 0.00000000000000 +vt 0.74850374460220 0.00000000000000 0.00000000000000 +vt 0.78314679861069 1.00000000000000 0.00000000000000 +vt 0.78314679861069 0.00000000000000 0.00000000000000 +vt 0.81634455919266 1.00000000000000 0.00000000000000 +vt 0.81634455919266 0.00000000000000 0.00000000000000 +vt 0.84809511899948 1.00000000000000 0.00000000000000 +vt 0.84809511899948 0.00000000000000 0.00000000000000 +vt 0.88779723644257 1.00000000000000 0.00000000000000 +vt 0.88779723644257 0.00000000000000 0.00000000000000 +vt 0.92365247011185 1.00000000000000 0.00000000000000 +vt 0.92365247011185 0.00000000000000 0.00000000000000 +vt 0.96110624074936 1.00000000000000 0.00000000000000 +vt 0.96110624074936 0.00000000000000 0.00000000000000 +vt 0.98756164312363 1.00000000000000 0.00000000000000 +vt 0.98756164312363 0.00000000000000 0.00000000000000 +vt 1.00000000000000 1.00000000000000 0.00000000000000 +vt 1.00000000000000 0.00000000000000 0.00000000000000 +# 66 texture coordinates + +g 挤压.3 +usemtl 材质 +f 67/1/1 68/2/2 101/3/2 100/4/1 +f 68/2/2 69/5/3 102/6/3 101/3/2 +f 69/5/3 70/7/4 103/8/4 102/6/3 +f 70/7/4 71/9/5 104/10/5 103/8/4 +f 71/9/5 72/11/6 105/12/6 104/10/5 +f 72/11/6 73/13/7 106/14/7 105/12/6 +f 73/13/7 74/15/8 107/16/8 106/14/7 +f 74/15/8 75/17/9 108/18/9 107/16/8 +f 75/17/9 76/19/10 109/20/10 108/18/9 +f 76/19/10 77/21/11 110/22/11 109/20/10 +f 77/21/11 78/23/12 111/24/12 110/22/11 +f 78/23/12 79/25/13 112/26/13 111/24/12 +f 79/25/13 80/27/14 113/28/14 112/26/13 +f 80/27/14 81/29/15 114/30/15 113/28/14 +f 81/29/15 82/31/16 115/32/16 114/30/15 +f 82/31/16 83/33/17 116/34/17 115/32/16 +f 83/33/17 84/35/18 117/36/18 116/34/17 +f 84/35/18 85/37/19 118/38/19 117/36/18 +f 85/37/19 86/39/20 119/40/20 118/38/19 +f 86/39/20 87/41/21 120/42/21 119/40/20 +f 87/41/21 88/43/22 121/44/22 120/42/21 +f 88/43/22 89/45/23 122/46/23 121/44/22 +f 89/45/23 90/47/24 123/48/24 122/46/23 +f 90/47/24 91/49/25 124/50/25 123/48/24 +f 91/49/25 92/51/26 125/52/26 124/50/25 +f 92/51/26 93/53/27 126/54/27 125/52/26 +f 93/53/27 94/55/28 127/56/28 126/54/27 +f 94/55/28 95/57/29 128/58/29 127/56/28 +f 95/57/29 96/59/30 129/60/30 128/58/29 +f 96/59/30 97/61/31 130/62/31 129/60/30 +f 97/61/31 98/63/32 131/64/32 130/62/31 +f 98/63/32 99/65/33 132/66/33 131/64/32 +f 1/1/1 67/1/1 100/4/1 34/4/1 +f 34/4/1 100/4/1 101/3/2 35/3/2 +f 2/2/2 68/2/2 67/1/1 1/1/1 +f 35/3/2 101/3/2 102/6/3 36/6/3 +f 3/5/3 69/5/3 68/2/2 2/2/2 +f 36/6/3 102/6/3 103/8/4 37/8/4 +f 4/7/4 70/7/4 69/5/3 3/5/3 +f 37/8/4 103/8/4 104/10/5 38/10/5 +f 5/9/5 71/9/5 70/7/4 4/7/4 +f 38/10/5 104/10/5 105/12/6 39/12/6 +f 6/11/6 72/11/6 71/9/5 5/9/5 +f 39/12/6 105/12/6 106/14/7 40/14/7 +f 7/13/7 73/13/7 72/11/6 6/11/6 +f 40/14/7 106/14/7 107/16/8 41/16/8 +f 8/15/8 74/15/8 73/13/7 7/13/7 +f 41/16/8 107/16/8 108/18/9 42/18/9 +f 9/17/9 75/17/9 74/15/8 8/15/8 +f 42/18/9 108/18/9 109/20/10 43/20/10 +f 10/19/10 76/19/10 75/17/9 9/17/9 +f 43/20/10 109/20/10 110/22/11 44/22/11 +f 11/21/11 77/21/11 76/19/10 10/19/10 +f 44/22/11 110/22/11 111/24/12 45/24/12 +f 12/23/12 78/23/12 77/21/11 11/21/11 +f 45/24/12 111/24/12 112/26/13 46/26/13 +f 13/25/13 79/25/13 78/23/12 12/23/12 +f 46/26/13 112/26/13 113/28/14 47/28/14 +f 14/27/14 80/27/14 79/25/13 13/25/13 +f 47/28/14 113/28/14 114/30/15 48/30/15 +f 15/29/15 81/29/15 80/27/14 14/27/14 +f 48/30/15 114/30/15 115/32/16 49/32/16 +f 16/31/16 82/31/16 81/29/15 15/29/15 +f 49/32/16 115/32/16 116/34/17 50/34/17 +f 17/33/17 83/33/17 82/31/16 16/31/16 +f 50/34/17 116/34/17 117/36/18 51/36/18 +f 18/35/18 84/35/18 83/33/17 17/33/17 +f 51/36/18 117/36/18 118/38/19 52/38/19 +f 19/37/19 85/37/19 84/35/18 18/35/18 +f 52/38/19 118/38/19 119/40/20 53/40/20 +f 20/39/20 86/39/20 85/37/19 19/37/19 +f 53/40/20 119/40/20 120/42/21 54/42/21 +f 21/41/21 87/41/21 86/39/20 20/39/20 +f 54/42/21 120/42/21 121/44/22 55/44/22 +f 22/43/22 88/43/22 87/41/21 21/41/21 +f 55/44/22 121/44/22 122/46/23 56/46/23 +f 23/45/23 89/45/23 88/43/22 22/43/22 +f 56/46/23 122/46/23 123/48/24 57/48/24 +f 24/47/24 90/47/24 89/45/23 23/45/23 +f 57/48/24 123/48/24 124/50/25 58/50/25 +f 25/49/25 91/49/25 90/47/24 24/47/24 +f 58/50/25 124/50/25 125/52/26 59/52/26 +f 26/51/26 92/51/26 91/49/25 25/49/25 +f 59/52/26 125/52/26 126/54/27 60/54/27 +f 27/53/27 93/53/27 92/51/26 26/51/26 +f 60/54/27 126/54/27 127/56/28 61/56/28 +f 28/55/28 94/55/28 93/53/27 27/53/27 +f 61/56/28 127/56/28 128/58/29 62/58/29 +f 29/57/29 95/57/29 94/55/28 28/55/28 +f 62/58/29 128/58/29 129/60/30 63/60/30 +f 30/59/30 96/59/30 95/57/29 29/57/29 +f 63/60/30 129/60/30 130/62/31 64/62/31 +f 31/61/31 97/61/31 96/59/30 30/59/30 +f 64/62/31 130/62/31 131/64/32 65/64/32 +f 32/63/32 98/63/32 97/61/31 31/61/31 +f 65/64/32 131/64/32 132/66/33 66/66/33 +f 66/66/33 132/66/33 99/65/33 33/65/33 +f 33/65/33 99/65/33 98/63/32 32/63/32 + +v 31.36711502075195 530.31011962890625 -40.16886520385742 +v 31.36711502075195 533.04364013671875 -40.03647232055664 +v 31.36711502075195 537.93182373046875 -39.37255859375000 +v 31.36711502075195 543.19738769531250 -38.10228729248047 +v 31.36711502075195 547.84588623046875 -36.43727874755859 +v 31.36711502075195 551.42596435546875 -34.72630691528320 +v 31.36711502075195 554.97161865234375 -32.55932235717773 +v 31.36711502075195 558.37957763671875 -29.88249015808105 +v 31.36711502075195 560.52410888671875 -27.78809356689453 +v 31.36711502075195 562.53088378906250 -25.42721176147461 +v 31.36711502075195 564.36932373046875 -22.78389358520508 +v 31.36711502075195 566.00897216796875 -19.84218406677246 +v 31.36711502075195 567.41906738281250 -16.58613014221191 +v 31.36711502075195 568.56909179687500 -12.99977874755859 +v 31.36711502075195 569.42840576171875 -9.06717681884766 +v 31.36711502075195 569.96643066406250 -4.77236986160278 +v 31.36711502075195 570.15258789062500 -0.09940527379513 +v 31.36711502075195 569.74066162109375 6.76958894729614 +v 31.36711502075195 569.04016113281250 10.88530254364014 +v 31.36711502075195 568.03454589843750 14.64853191375732 +v 31.36711502075195 566.75433349609375 18.07505607604980 +v 31.36711502075195 565.22998046875000 21.18065452575684 +v 31.36711502075195 563.49206542968750 23.98110389709473 +v 31.36711502075195 561.57110595703125 26.49218750000000 +v 31.36711502075195 559.49755859375000 28.72967910766602 +v 31.36711502075195 556.16796875000000 31.60745620727539 +v 31.36711502075195 552.66674804687500 33.95841217041016 +v 31.36711502075195 549.09686279296875 35.83580398559570 +v 31.36711502075195 544.40820312500000 37.69438171386719 +v 31.36711502075195 540.02465820312500 38.93196868896484 +v 31.36711502075195 535.34619140625000 39.79799652099609 +v 31.36711502075195 532.00262451171875 40.13751220703125 +v 31.36711502075195 530.42364501953125 40.19707870483398 +v 81.36711883544922 530.31011962890625 -40.16886520385742 +v 81.36711883544922 533.04364013671875 -40.03647232055664 +v 81.36711883544922 537.93182373046875 -39.37255859375000 +v 81.36711883544922 543.19738769531250 -38.10228729248047 +v 81.36711883544922 547.84588623046875 -36.43727874755859 +v 81.36711883544922 551.42596435546875 -34.72630691528320 +v 81.36711883544922 554.97161865234375 -32.55932235717773 +v 81.36711883544922 558.37957763671875 -29.88249015808105 +v 81.36711883544922 560.52410888671875 -27.78809356689453 +v 81.36711883544922 562.53088378906250 -25.42721176147461 +v 81.36711883544922 564.36932373046875 -22.78389358520508 +v 81.36711883544922 566.00897216796875 -19.84218406677246 +v 81.36711883544922 567.41906738281250 -16.58613014221191 +v 81.36711883544922 568.56909179687500 -12.99977874755859 +v 81.36711883544922 569.42840576171875 -9.06717681884766 +v 81.36711883544922 569.96643066406250 -4.77236986160278 +v 81.36711883544922 570.15258789062500 -0.09940527379513 +v 81.36711883544922 569.74066162109375 6.76958894729614 +v 81.36711883544922 569.04016113281250 10.88530254364014 +v 81.36711883544922 568.03454589843750 14.64853191375732 +v 81.36711883544922 566.75433349609375 18.07505607604980 +v 81.36711883544922 565.22998046875000 21.18065452575684 +v 81.36711883544922 563.49206542968750 23.98110389709473 +v 81.36711883544922 561.57110595703125 26.49218750000000 +v 81.36711883544922 559.49755859375000 28.72967910766602 +v 81.36711883544922 556.16796875000000 31.60745620727539 +v 81.36711883544922 552.66674804687500 33.95841217041016 +v 81.36711883544922 549.09686279296875 35.83580398559570 +v 81.36711883544922 544.40820312500000 37.69438171386719 +v 81.36711883544922 540.02465820312500 38.93196868896484 +v 81.36711883544922 535.34619140625000 39.79799652099609 +v 81.36711883544922 532.00262451171875 40.13751220703125 +v 81.36711883544922 530.42364501953125 40.19707870483398 +# 66 vertices + +# 0 normal + +# 0 texture coordinate + +g 挤压.2 +usemtl 材质 +f 133/1/1 134/2/2 167/3/2 166/4/1 +f 134/2/2 135/5/3 168/6/3 167/3/2 +f 135/5/3 136/7/4 169/8/4 168/6/3 +f 136/7/4 137/9/5 170/10/5 169/8/4 +f 137/9/5 138/11/6 171/12/6 170/10/5 +f 138/11/6 139/13/7 172/14/7 171/12/6 +f 139/13/7 140/15/8 173/16/8 172/14/7 +f 140/15/8 141/17/9 174/18/9 173/16/8 +f 141/17/9 142/19/10 175/20/10 174/18/9 +f 142/19/10 143/21/11 176/22/11 175/20/10 +f 143/21/11 144/23/12 177/24/12 176/22/11 +f 144/23/12 145/25/13 178/26/13 177/24/12 +f 145/25/13 146/27/14 179/28/14 178/26/13 +f 146/27/14 147/29/15 180/30/15 179/28/14 +f 147/29/15 148/31/16 181/32/16 180/30/15 +f 148/31/16 149/33/17 182/34/17 181/32/16 +f 149/33/17 150/35/18 183/36/18 182/34/17 +f 150/35/18 151/37/19 184/38/19 183/36/18 +f 151/37/19 152/39/20 185/40/20 184/38/19 +f 152/39/20 153/41/21 186/42/21 185/40/20 +f 153/41/21 154/43/22 187/44/22 186/42/21 +f 154/43/22 155/45/23 188/46/23 187/44/22 +f 155/45/23 156/47/24 189/48/24 188/46/23 +f 156/47/24 157/49/25 190/50/25 189/48/24 +f 157/49/25 158/51/26 191/52/26 190/50/25 +f 158/51/26 159/53/27 192/54/27 191/52/26 +f 159/53/27 160/55/28 193/56/28 192/54/27 +f 160/55/28 161/57/29 194/58/29 193/56/28 +f 161/57/29 162/59/30 195/60/30 194/58/29 +f 162/59/30 163/61/31 196/62/31 195/60/30 +f 163/61/31 164/63/32 197/64/32 196/62/31 +f 164/63/32 165/65/33 198/66/33 197/64/32 + +v 31.36711502075195 618.07562255859375 -40.16886520385742 +v 31.36711502075195 620.80914306640625 -40.03647232055664 +v 31.36711502075195 625.69732666015625 -39.37255859375000 +v 31.36711502075195 630.96289062500000 -38.10228729248047 +v 31.36711502075195 635.61138916015625 -36.43727874755859 +v 31.36711502075195 639.19146728515625 -34.72630691528320 +v 31.36711502075195 642.73712158203125 -32.55932235717773 +v 31.36711502075195 646.14514160156250 -29.88249015808105 +v 31.36711502075195 648.28961181640625 -27.78809356689453 +v 31.36711502075195 650.29638671875000 -25.42721176147461 +v 31.36711502075195 652.13488769531250 -22.78389358520508 +v 31.36711502075195 653.77447509765625 -19.84218406677246 +v 31.36711502075195 655.18457031250000 -16.58613014221191 +v 31.36711502075195 656.33459472656250 -12.99977874755859 +v 31.36711502075195 657.19390869140625 -9.06717681884766 +v 31.36711502075195 657.73193359375000 -4.77236986160278 +v 31.36711502075195 657.91809082031250 -0.09940527379513 +v 31.36711502075195 657.50616455078125 6.76958894729614 +v 31.36711502075195 656.80566406250000 10.88530254364014 +v 31.36711502075195 655.80004882812500 14.64853191375732 +v 31.36711502075195 654.51983642578125 18.07505607604980 +v 31.36711502075195 652.99548339843750 21.18065452575684 +v 31.36711502075195 651.25762939453125 23.98110389709473 +v 31.36711502075195 649.33660888671875 26.49218750000000 +v 31.36711502075195 647.26312255859375 28.72967910766602 +v 31.36711502075195 643.93347167968750 31.60745620727539 +v 31.36711502075195 640.43225097656250 33.95841217041016 +v 31.36711502075195 636.86236572265625 35.83580398559570 +v 31.36711502075195 632.17370605468750 37.69438171386719 +v 31.36711502075195 627.79022216796875 38.93196868896484 +v 31.36711502075195 623.11169433593750 39.79799652099609 +v 31.36711502075195 619.76812744140625 40.13751220703125 +v 31.36711502075195 618.18914794921875 40.19707870483398 +v 81.36711883544922 618.07562255859375 -40.16886520385742 +v 81.36711883544922 620.80914306640625 -40.03647232055664 +v 81.36711883544922 625.69732666015625 -39.37255859375000 +v 81.36711883544922 630.96289062500000 -38.10228729248047 +v 81.36711883544922 635.61138916015625 -36.43727874755859 +v 81.36711883544922 639.19146728515625 -34.72630691528320 +v 81.36711883544922 642.73712158203125 -32.55932235717773 +v 81.36711883544922 646.14514160156250 -29.88249015808105 +v 81.36711883544922 648.28961181640625 -27.78809356689453 +v 81.36711883544922 650.29638671875000 -25.42721176147461 +v 81.36711883544922 652.13488769531250 -22.78389358520508 +v 81.36711883544922 653.77447509765625 -19.84218406677246 +v 81.36711883544922 655.18457031250000 -16.58613014221191 +v 81.36711883544922 656.33459472656250 -12.99977874755859 +v 81.36711883544922 657.19390869140625 -9.06717681884766 +v 81.36711883544922 657.73193359375000 -4.77236986160278 +v 81.36711883544922 657.91809082031250 -0.09940527379513 +v 81.36711883544922 657.50616455078125 6.76958894729614 +v 81.36711883544922 656.80566406250000 10.88530254364014 +v 81.36711883544922 655.80004882812500 14.64853191375732 +v 81.36711883544922 654.51983642578125 18.07505607604980 +v 81.36711883544922 652.99548339843750 21.18065452575684 +v 81.36711883544922 651.25762939453125 23.98110389709473 +v 81.36711883544922 649.33660888671875 26.49218750000000 +v 81.36711883544922 647.26312255859375 28.72967910766602 +v 81.36711883544922 643.93347167968750 31.60745620727539 +v 81.36711883544922 640.43225097656250 33.95841217041016 +v 81.36711883544922 636.86236572265625 35.83580398559570 +v 81.36711883544922 632.17370605468750 37.69438171386719 +v 81.36711883544922 627.79022216796875 38.93196868896484 +v 81.36711883544922 623.11169433593750 39.79799652099609 +v 81.36711883544922 619.76812744140625 40.13751220703125 +v 81.36711883544922 618.18914794921875 40.19707870483398 +# 66 vertices + +# 0 normal + +# 0 texture coordinate + +g 挤压.1 +usemtl 材质 +f 199/1/1 200/2/2 233/3/2 232/4/1 +f 200/2/2 201/5/3 234/6/3 233/3/2 +f 201/5/3 202/7/4 235/8/4 234/6/3 +f 202/7/4 203/9/5 236/10/5 235/8/4 +f 203/9/5 204/11/6 237/12/6 236/10/5 +f 204/11/6 205/13/7 238/14/7 237/12/6 +f 205/13/7 206/15/8 239/16/8 238/14/7 +f 206/15/8 207/17/9 240/18/9 239/16/8 +f 207/17/9 208/19/10 241/20/10 240/18/9 +f 208/19/10 209/21/11 242/22/11 241/20/10 +f 209/21/11 210/23/12 243/24/12 242/22/11 +f 210/23/12 211/25/13 244/26/13 243/24/12 +f 211/25/13 212/27/14 245/28/14 244/26/13 +f 212/27/14 213/29/15 246/30/15 245/28/14 +f 213/29/15 214/31/16 247/32/16 246/30/15 +f 214/31/16 215/33/17 248/34/17 247/32/16 +f 215/33/17 216/35/18 249/36/18 248/34/17 +f 216/35/18 217/37/19 250/38/19 249/36/18 +f 217/37/19 218/39/20 251/40/20 250/38/19 +f 218/39/20 219/41/21 252/42/21 251/40/20 +f 219/41/21 220/43/22 253/44/22 252/42/21 +f 220/43/22 221/45/23 254/46/23 253/44/22 +f 221/45/23 222/47/24 255/48/24 254/46/23 +f 222/47/24 223/49/25 256/50/25 255/48/24 +f 223/49/25 224/51/26 257/52/26 256/50/25 +f 224/51/26 225/53/27 258/54/27 257/52/26 +f 225/53/27 226/55/28 259/56/28 258/54/27 +f 226/55/28 227/57/29 260/58/29 259/56/28 +f 227/57/29 228/59/30 261/60/30 260/58/29 +f 228/59/30 229/61/31 262/62/31 261/60/30 +f 229/61/31 230/63/32 263/64/32 262/62/31 +f 230/63/32 231/65/33 264/66/33 263/64/32 + +v 31.36711502075195 712.16796875000000 -40.16886520385742 +v 31.36711502075195 714.90148925781250 -40.03647232055664 +v 31.36711502075195 719.78967285156250 -39.37255859375000 +v 31.36711502075195 725.05523681640625 -38.10228729248047 +v 31.36711502075195 729.70373535156250 -36.43727874755859 +v 31.36711502075195 733.28381347656250 -34.72630691528320 +v 31.36711502075195 736.82946777343750 -32.55932235717773 +v 31.36711502075195 740.23742675781250 -29.88249015808105 +v 31.36711502075195 742.38189697265625 -27.78809356689453 +v 31.36711502075195 744.38873291015625 -25.42721176147461 +v 31.36711502075195 746.22717285156250 -22.78389358520508 +v 31.36711502075195 747.86676025390625 -19.84218406677246 +v 31.36711502075195 749.27691650390625 -16.58613014221191 +v 31.36711502075195 750.42687988281250 -12.99977874755859 +v 31.36711502075195 751.28625488281250 -9.06717681884766 +v 31.36711502075195 751.82427978515625 -4.77236986160278 +v 31.36711502075195 752.01037597656250 -0.09940527379513 +v 31.36711502075195 751.59851074218750 6.76958894729614 +v 31.36711502075195 750.89801025390625 10.88530254364014 +v 31.36711502075195 749.89239501953125 14.64853191375732 +v 31.36711502075195 748.61212158203125 18.07505607604980 +v 31.36711502075195 747.08782958984375 21.18065452575684 +v 31.36711502075195 745.34991455078125 23.98110389709473 +v 31.36711502075195 743.42895507812500 26.49218750000000 +v 31.36711502075195 741.35540771484375 28.72967910766602 +v 31.36711502075195 738.02581787109375 31.60745620727539 +v 31.36711502075195 734.52459716796875 33.95841217041016 +v 31.36711502075195 730.95471191406250 35.83580398559570 +v 31.36711502075195 726.26605224609375 37.69438171386719 +v 31.36711502075195 721.88250732421875 38.93196868896484 +v 31.36711502075195 717.20404052734375 39.79799652099609 +v 31.36711502075195 713.86047363281250 40.13751220703125 +v 31.36711502075195 712.28149414062500 40.19707870483398 +v 81.36711883544922 712.16796875000000 -40.16886520385742 +v 81.36711883544922 714.90148925781250 -40.03647232055664 +v 81.36711883544922 719.78967285156250 -39.37255859375000 +v 81.36711883544922 725.05523681640625 -38.10228729248047 +v 81.36711883544922 729.70373535156250 -36.43727874755859 +v 81.36711883544922 733.28381347656250 -34.72630691528320 +v 81.36711883544922 736.82946777343750 -32.55932235717773 +v 81.36711883544922 740.23742675781250 -29.88249015808105 +v 81.36711883544922 742.38189697265625 -27.78809356689453 +v 81.36711883544922 744.38873291015625 -25.42721176147461 +v 81.36711883544922 746.22717285156250 -22.78389358520508 +v 81.36711883544922 747.86676025390625 -19.84218406677246 +v 81.36711883544922 749.27691650390625 -16.58613014221191 +v 81.36711883544922 750.42687988281250 -12.99977874755859 +v 81.36711883544922 751.28625488281250 -9.06717681884766 +v 81.36711883544922 751.82427978515625 -4.77236986160278 +v 81.36711883544922 752.01037597656250 -0.09940527379513 +v 81.36711883544922 751.59851074218750 6.76958894729614 +v 81.36711883544922 750.89801025390625 10.88530254364014 +v 81.36711883544922 749.89239501953125 14.64853191375732 +v 81.36711883544922 748.61212158203125 18.07505607604980 +v 81.36711883544922 747.08782958984375 21.18065452575684 +v 81.36711883544922 745.34991455078125 23.98110389709473 +v 81.36711883544922 743.42895507812500 26.49218750000000 +v 81.36711883544922 741.35540771484375 28.72967910766602 +v 81.36711883544922 738.02581787109375 31.60745620727539 +v 81.36711883544922 734.52459716796875 33.95841217041016 +v 81.36711883544922 730.95471191406250 35.83580398559570 +v 81.36711883544922 726.26605224609375 37.69438171386719 +v 81.36711883544922 721.88250732421875 38.93196868896484 +v 81.36711883544922 717.20404052734375 39.79799652099609 +v 81.36711883544922 713.86047363281250 40.13751220703125 +v 81.36711883544922 712.28149414062500 40.19707870483398 +v 31.36711502075195 712.27130126953125 -42.30230331420898 +v 31.36711502075195 715.09722900390625 -42.16543197631836 +v 31.36711502075195 720.18487548828125 -41.47443008422852 +v 31.36711502075195 725.66754150390625 -40.15177917480469 +v 31.36711502075195 730.52648925781250 -38.41139602661133 +v 31.36711502075195 734.30395507812500 -36.60610198974609 +v 31.36711502075195 738.05029296875000 -34.31647491455078 +v 31.36711502075195 741.64739990234375 -31.49105644226074 +v 31.36711502075195 743.94519042968750 -29.24694633483887 +v 31.36711502075195 746.08319091796875 -26.73174285888672 +v 31.36711502075195 748.04125976562500 -23.91640663146973 +v 31.36711502075195 749.78442382812500 -20.78890419006348 +v 31.36711502075195 751.27874755859375 -17.33847045898438 +v 31.36711502075195 752.49188232421875 -13.55512332916260 +v 31.36711502075195 753.39361572265625 -9.42866516113281 +v 31.36711502075195 753.95489501953125 -4.94793319702148 +v 31.36711502075195 754.14886474609375 -0.07792840898037 +v 31.36711502075195 753.72369384765625 7.01342201232910 +v 31.36711502075195 752.98706054687500 11.34118080139160 +v 31.36711502075195 751.92932128906250 15.29954719543457 +v 31.36711502075195 750.57604980468750 18.92146492004395 +v 31.36711502075195 748.95855712890625 22.21689414978027 +v 31.36711502075195 747.10974121093750 25.19602394104004 +v 31.36711502075195 745.06414794921875 27.87006759643555 +v 31.36711502075195 742.84161376953125 30.26830673217773 +v 31.36711502075195 739.32427978515625 33.30834960937500 +v 31.36711502075195 735.62017822265625 35.79554367065430 +v 31.36711502075195 731.84790039062500 37.77937698364258 +v 31.36711502075195 726.95153808593750 39.72027587890625 +v 31.36711502075195 722.36810302734375 41.01430511474609 +v 31.36711502075195 717.50683593750000 41.91417312622070 +v 31.36711502075195 714.00878906250000 42.26937484741211 +v 31.36711502075195 712.36199951171875 42.33149719238281 +v 81.36711883544922 712.27130126953125 -42.30230331420898 +v 81.36711883544922 715.09722900390625 -42.16543197631836 +v 81.36711883544922 720.18487548828125 -41.47443008422852 +v 81.36711883544922 725.66754150390625 -40.15177917480469 +v 81.36711883544922 730.52648925781250 -38.41139602661133 +v 81.36711883544922 734.30395507812500 -36.60610198974609 +v 81.36711883544922 738.05029296875000 -34.31647491455078 +v 81.36711883544922 741.64739990234375 -31.49105644226074 +v 81.36711883544922 743.94519042968750 -29.24694633483887 +v 81.36711883544922 746.08319091796875 -26.73174285888672 +v 81.36711883544922 748.04125976562500 -23.91640663146973 +v 81.36711883544922 749.78442382812500 -20.78890419006348 +v 81.36711883544922 751.27874755859375 -17.33847045898438 +v 81.36711883544922 752.49188232421875 -13.55512332916260 +v 81.36711883544922 753.39361572265625 -9.42866516113281 +v 81.36711883544922 753.95489501953125 -4.94793319702148 +v 81.36711883544922 754.14886474609375 -0.07792840898037 +v 81.36711883544922 753.72369384765625 7.01342201232910 +v 81.36711883544922 752.98706054687500 11.34118080139160 +v 81.36711883544922 751.92932128906250 15.29954719543457 +v 81.36711883544922 750.57604980468750 18.92146492004395 +v 81.36711883544922 748.95855712890625 22.21689414978027 +v 81.36711883544922 747.10974121093750 25.19602394104004 +v 81.36711883544922 745.06414794921875 27.87006759643555 +v 81.36711883544922 742.84161376953125 30.26830673217773 +v 81.36711883544922 739.32427978515625 33.30834960937500 +v 81.36711883544922 735.62017822265625 35.79554367065430 +v 81.36711883544922 731.84790039062500 37.77937698364258 +v 81.36711883544922 726.95153808593750 39.72027587890625 +v 81.36711883544922 722.36810302734375 41.01430511474609 +v 81.36711883544922 717.50683593750000 41.91417312622070 +v 81.36711883544922 714.00878906250000 42.26937484741211 +v 81.36711883544922 712.36199951171875 42.33149719238281 +# 132 vertices + +# 0 normal + +# 0 texture coordinate + +g 挤压 +usemtl 材质 +f 331/1/1 332/2/2 365/3/2 364/4/1 +f 332/2/2 333/5/3 366/6/3 365/3/2 +f 333/5/3 334/7/4 367/8/4 366/6/3 +f 334/7/4 335/9/5 368/10/5 367/8/4 +f 335/9/5 336/11/6 369/12/6 368/10/5 +f 336/11/6 337/13/7 370/14/7 369/12/6 +f 337/13/7 338/15/8 371/16/8 370/14/7 +f 338/15/8 339/17/9 372/18/9 371/16/8 +f 339/17/9 340/19/10 373/20/10 372/18/9 +f 340/19/10 341/21/11 374/22/11 373/20/10 +f 341/21/11 342/23/12 375/24/12 374/22/11 +f 342/23/12 343/25/13 376/26/13 375/24/12 +f 343/25/13 344/27/14 377/28/14 376/26/13 +f 344/27/14 345/29/15 378/30/15 377/28/14 +f 345/29/15 346/31/16 379/32/16 378/30/15 +f 346/31/16 347/33/17 380/34/17 379/32/16 +f 347/33/17 348/35/18 381/36/18 380/34/17 +f 348/35/18 349/37/19 382/38/19 381/36/18 +f 349/37/19 350/39/20 383/40/20 382/38/19 +f 350/39/20 351/41/21 384/42/21 383/40/20 +f 351/41/21 352/43/22 385/44/22 384/42/21 +f 352/43/22 353/45/23 386/46/23 385/44/22 +f 353/45/23 354/47/24 387/48/24 386/46/23 +f 354/47/24 355/49/25 388/50/25 387/48/24 +f 355/49/25 356/51/26 389/52/26 388/50/25 +f 356/51/26 357/53/27 390/54/27 389/52/26 +f 357/53/27 358/55/28 391/56/28 390/54/27 +f 358/55/28 359/57/29 392/58/29 391/56/28 +f 359/57/29 360/59/30 393/60/30 392/58/29 +f 360/59/30 361/61/31 394/62/31 393/60/30 +f 361/61/31 362/63/32 395/64/32 394/62/31 +f 362/63/32 363/65/33 396/66/33 395/64/32 +f 265/1/1 331/1/1 364/4/1 298/4/1 +f 298/4/1 364/4/1 365/3/2 299/3/2 +f 266/2/2 332/2/2 331/1/1 265/1/1 +f 299/3/2 365/3/2 366/6/3 300/6/3 +f 267/5/3 333/5/3 332/2/2 266/2/2 +f 300/6/3 366/6/3 367/8/4 301/8/4 +f 268/7/4 334/7/4 333/5/3 267/5/3 +f 301/8/4 367/8/4 368/10/5 302/10/5 +f 269/9/5 335/9/5 334/7/4 268/7/4 +f 302/10/5 368/10/5 369/12/6 303/12/6 +f 270/11/6 336/11/6 335/9/5 269/9/5 +f 303/12/6 369/12/6 370/14/7 304/14/7 +f 271/13/7 337/13/7 336/11/6 270/11/6 +f 304/14/7 370/14/7 371/16/8 305/16/8 +f 272/15/8 338/15/8 337/13/7 271/13/7 +f 305/16/8 371/16/8 372/18/9 306/18/9 +f 273/17/9 339/17/9 338/15/8 272/15/8 +f 306/18/9 372/18/9 373/20/10 307/20/10 +f 274/19/10 340/19/10 339/17/9 273/17/9 +f 307/20/10 373/20/10 374/22/11 308/22/11 +f 275/21/11 341/21/11 340/19/10 274/19/10 +f 308/22/11 374/22/11 375/24/12 309/24/12 +f 276/23/12 342/23/12 341/21/11 275/21/11 +f 309/24/12 375/24/12 376/26/13 310/26/13 +f 277/25/13 343/25/13 342/23/12 276/23/12 +f 310/26/13 376/26/13 377/28/14 311/28/14 +f 278/27/14 344/27/14 343/25/13 277/25/13 +f 311/28/14 377/28/14 378/30/15 312/30/15 +f 279/29/15 345/29/15 344/27/14 278/27/14 +f 312/30/15 378/30/15 379/32/16 313/32/16 +f 280/31/16 346/31/16 345/29/15 279/29/15 +f 313/32/16 379/32/16 380/34/17 314/34/17 +f 281/33/17 347/33/17 346/31/16 280/31/16 +f 314/34/17 380/34/17 381/36/18 315/36/18 +f 282/35/18 348/35/18 347/33/17 281/33/17 +f 315/36/18 381/36/18 382/38/19 316/38/19 +f 283/37/19 349/37/19 348/35/18 282/35/18 +f 316/38/19 382/38/19 383/40/20 317/40/20 +f 284/39/20 350/39/20 349/37/19 283/37/19 +f 317/40/20 383/40/20 384/42/21 318/42/21 +f 285/41/21 351/41/21 350/39/20 284/39/20 +f 318/42/21 384/42/21 385/44/22 319/44/22 +f 286/43/22 352/43/22 351/41/21 285/41/21 +f 319/44/22 385/44/22 386/46/23 320/46/23 +f 287/45/23 353/45/23 352/43/22 286/43/22 +f 320/46/23 386/46/23 387/48/24 321/48/24 +f 288/47/24 354/47/24 353/45/23 287/45/23 +f 321/48/24 387/48/24 388/50/25 322/50/25 +f 289/49/25 355/49/25 354/47/24 288/47/24 +f 322/50/25 388/50/25 389/52/26 323/52/26 +f 290/51/26 356/51/26 355/49/25 289/49/25 +f 323/52/26 389/52/26 390/54/27 324/54/27 +f 291/53/27 357/53/27 356/51/26 290/51/26 +f 324/54/27 390/54/27 391/56/28 325/56/28 +f 292/55/28 358/55/28 357/53/27 291/53/27 +f 325/56/28 391/56/28 392/58/29 326/58/29 +f 293/57/29 359/57/29 358/55/28 292/55/28 +f 326/58/29 392/58/29 393/60/30 327/60/30 +f 294/59/30 360/59/30 359/57/29 293/57/29 +f 327/60/30 393/60/30 394/62/31 328/62/31 +f 295/61/31 361/61/31 360/59/30 294/59/30 +f 328/62/31 394/62/31 395/64/32 329/64/32 +f 296/63/32 362/63/32 361/61/31 295/61/31 +f 329/64/32 395/64/32 396/66/33 330/66/33 +f 330/66/33 396/66/33 363/65/33 297/65/33 +f 297/65/33 363/65/33 362/63/32 296/63/32 + +v 31.36711502075195 715.47924804687500 -40.16886520385742 +v 31.36711502075195 718.21276855468750 -40.03647232055664 +v 31.36711502075195 723.10095214843750 -39.37255859375000 +v 31.36711502075195 728.36651611328125 -38.10228729248047 +v 31.36711502075195 733.01501464843750 -36.43727874755859 +v 31.36711502075195 736.59509277343750 -34.72630691528320 +v 31.36711502075195 740.14074707031250 -32.55932235717773 +v 31.36711502075195 743.54870605468750 -29.88249015808105 +v 31.36711502075195 745.69317626953125 -27.78809356689453 +v 31.36711502075195 747.70001220703125 -25.42721176147461 +v 31.36711502075195 749.53845214843750 -22.78389358520508 +v 31.36711502075195 751.17803955078125 -19.84218406677246 +v 31.36711502075195 752.58819580078125 -16.58613014221191 +v 31.36711502075195 753.73815917968750 -12.99977874755859 +v 31.36711502075195 754.59753417968750 -9.06717681884766 +v 31.36711502075195 755.13555908203125 -4.77236986160278 +v 31.36711502075195 755.32165527343750 -0.09940527379513 +v 31.36711502075195 754.90979003906250 6.76958894729614 +v 31.36711502075195 754.20928955078125 10.88530254364014 +v 31.36711502075195 753.20367431640625 14.64853191375732 +v 31.36711502075195 751.92340087890625 18.07505607604980 +v 31.36711502075195 750.39910888671875 21.18065452575684 +v 31.36711502075195 748.66119384765625 23.98110389709473 +v 31.36711502075195 746.74023437500000 26.49218750000000 +v 31.36711502075195 744.66668701171875 28.72967910766602 +v 31.36711502075195 741.33709716796875 31.60745620727539 +v 31.36711502075195 737.83587646484375 33.95841217041016 +v 31.36711502075195 734.26599121093750 35.83580398559570 +v 31.36711502075195 729.57733154296875 37.69438171386719 +v 31.36711502075195 725.19378662109375 38.93196868896484 +v 31.36711502075195 720.51531982421875 39.79799652099609 +v 31.36711502075195 717.17175292968750 40.13751220703125 +v 31.36711502075195 715.59277343750000 40.19707870483398 +v 81.36711883544922 715.47924804687500 -40.16886520385742 +v 81.36711883544922 718.21276855468750 -40.03647232055664 +v 81.36711883544922 723.10095214843750 -39.37255859375000 +v 81.36711883544922 728.36651611328125 -38.10228729248047 +v 81.36711883544922 733.01501464843750 -36.43727874755859 +v 81.36711883544922 736.59509277343750 -34.72630691528320 +v 81.36711883544922 740.14074707031250 -32.55932235717773 +v 81.36711883544922 743.54870605468750 -29.88249015808105 +v 81.36711883544922 745.69317626953125 -27.78809356689453 +v 81.36711883544922 747.70001220703125 -25.42721176147461 +v 81.36711883544922 749.53845214843750 -22.78389358520508 +v 81.36711883544922 751.17803955078125 -19.84218406677246 +v 81.36711883544922 752.58819580078125 -16.58613014221191 +v 81.36711883544922 753.73815917968750 -12.99977874755859 +v 81.36711883544922 754.59753417968750 -9.06717681884766 +v 81.36711883544922 755.13555908203125 -4.77236986160278 +v 81.36711883544922 755.32165527343750 -0.09940527379513 +v 81.36711883544922 754.90979003906250 6.76958894729614 +v 81.36711883544922 754.20928955078125 10.88530254364014 +v 81.36711883544922 753.20367431640625 14.64853191375732 +v 81.36711883544922 751.92340087890625 18.07505607604980 +v 81.36711883544922 750.39910888671875 21.18065452575684 +v 81.36711883544922 748.66119384765625 23.98110389709473 +v 81.36711883544922 746.74023437500000 26.49218750000000 +v 81.36711883544922 744.66668701171875 28.72967910766602 +v 81.36711883544922 741.33709716796875 31.60745620727539 +v 81.36711883544922 737.83587646484375 33.95841217041016 +v 81.36711883544922 734.26599121093750 35.83580398559570 +v 81.36711883544922 729.57733154296875 37.69438171386719 +v 81.36711883544922 725.19378662109375 38.93196868896484 +v 81.36711883544922 720.51531982421875 39.79799652099609 +v 81.36711883544922 717.17175292968750 40.13751220703125 +v 81.36711883544922 715.59277343750000 40.19707870483398 +# 66 vertices + +g 挤压_1 +v 37.80797195434570 482.95492553710938 0.00000000000000 +v 37.80797195434570 554.53356933593750 0.00000000000000 +v 47.07093048095703 484.17440795898438 0.00000000000000 +v 46.75530242919922 484.17440795898438 2.39742946624756 +v 45.82992935180664 484.17440795898438 4.63147830963135 +v 44.35787200927734 484.17440795898438 6.54989910125732 +v 42.43945312500000 484.17440795898438 8.02195549011230 +v 40.20540237426758 484.17440795898438 8.94732856750488 +v 37.80797195434570 484.17440795898438 9.26295661926270 +v 35.41054534912109 484.17440795898438 8.94732856750488 +v 33.17649459838867 484.17440795898438 8.02195549011230 +v 31.25807380676270 484.17440795898438 6.54989910125732 +v 29.78601837158203 484.17440795898438 4.63147830963135 +v 28.86064529418945 484.17440795898438 2.39742946624756 +v 28.54501724243164 484.17440795898438 0.00000000000000 +v 28.86064529418945 484.17440795898438 -2.39742946624756 +v 29.78601837158203 484.17440795898438 -4.63147830963135 +v 31.25807380676270 484.17440795898438 -6.54989910125732 +v 33.17649459838867 484.17440795898438 -8.02195549011230 +v 35.41054534912109 484.17440795898438 -8.94732856750488 +v 37.80797195434570 484.17440795898438 -9.26295661926270 +v 40.20540237426758 484.17440795898438 -8.94732856750488 +v 42.43945312500000 484.17440795898438 -8.02195549011230 +v 44.35787200927734 484.17440795898438 -6.54989910125732 +v 45.82992935180664 484.17440795898438 -4.63147830963135 +v 46.75530242919922 484.17440795898438 -2.39742946624756 +v 55.70263290405273 487.74978637695312 0.00000000000000 +v 55.09288406372070 487.74978637695312 4.63147830963135 +v 53.30520248413086 487.74978637695312 8.94732856750488 +v 50.46140670776367 487.74978637695312 12.65343379974365 +v 46.75530242919922 487.74978637695312 15.49722766876221 +v 42.43945312500000 487.74978637695312 17.28491210937500 +v 37.80797195434570 487.74978637695312 17.89465713500977 +v 33.17649459838867 487.74978637695312 17.28491210937500 +v 28.86064529418945 487.74978637695312 15.49722766876221 +v 25.15453910827637 487.74978637695312 12.65343379974365 +v 22.31074523925781 487.74978637695312 8.94732856750488 +v 20.52306175231934 487.74978637695312 4.63147830963135 +v 19.91331672668457 487.74978637695312 0.00000000000000 +v 20.52306175231934 487.74978637695312 -4.63147830963135 +v 22.31074523925781 487.74978637695312 -8.94732856750488 +v 25.15453910827637 487.74978637695312 -12.65343379974365 +v 28.86064529418945 487.74978637695312 -15.49722766876221 +v 33.17649459838867 487.74978637695312 -17.28491210937500 +v 37.80797195434570 487.74978637695312 -17.89465713500977 +v 42.43945312500000 487.74978637695312 -17.28491210937500 +v 46.75530242919922 487.74978637695312 -15.49722766876221 +v 50.46140670776367 487.74978637695312 -12.65343379974365 +v 53.30520248413086 487.74978637695312 -8.94732856750488 +v 55.09288406372070 487.74978637695312 -4.63147830963135 +v 63.11484146118164 493.43737792968750 0.00000000000000 +v 62.25252914428711 493.43737792968750 6.54989910125732 +v 59.72436523437500 493.43737792968750 12.65343379974365 +v 55.70263290405273 493.43737792968750 17.89465713500977 +v 50.46140670776367 493.43737792968750 21.91638946533203 +v 44.35787200927734 493.43737792968750 24.44455718994141 +v 37.80797195434570 493.43737792968750 25.30686759948730 +v 31.25807380676270 493.43737792968750 24.44455718994141 +v 25.15453910827637 493.43737792968750 21.91638946533203 +v 19.91331672668457 493.43737792968750 17.89465713500977 +v 15.89158344268799 493.43737792968750 12.65343379974365 +v 13.36341667175293 493.43737792968750 6.54989910125732 +v 12.50110626220703 493.43737792968750 0.00000000000000 +v 13.36341667175293 493.43737792968750 -6.54989910125732 +v 15.89158344268799 493.43737792968750 -12.65343379974365 +v 19.91331672668457 493.43737792968750 -17.89465713500977 +v 25.15453910827637 493.43737792968750 -21.91638946533203 +v 31.25807380676270 493.43737792968750 -24.44455718994141 +v 37.80797195434570 493.43737792968750 -25.30686759948730 +v 44.35787200927734 493.43737792968750 -24.44455718994141 +v 50.46140670776367 493.43737792968750 -21.91638946533203 +v 55.70263290405273 493.43737792968750 -17.89465713500977 +v 59.72436523437500 493.43737792968750 -12.65343379974365 +v 62.25252914428711 493.43737792968750 -6.54989910125732 +v 68.80242919921875 500.84957885742188 0.00000000000000 +v 67.74632263183594 500.84957885742188 8.02195549011230 +v 64.64996337890625 500.84957885742188 15.49722766876221 +v 59.72436523437500 500.84957885742188 21.91638946533203 +v 53.30520248413086 500.84957885742188 26.84198570251465 +v 45.82992935180664 500.84957885742188 29.93834495544434 +v 37.80797195434570 500.84957885742188 30.99445533752441 +v 29.78601837158203 500.84957885742188 29.93834495544434 +v 22.31074523925781 500.84957885742188 26.84198570251465 +v 15.89158344268799 500.84957885742188 21.91638946533203 +v 10.96598720550537 500.84957885742188 15.49722766876221 +v 7.86962795257568 500.84957885742188 8.02195549011230 +v 6.81351709365845 500.84957885742188 0.00000000000000 +v 7.86962795257568 500.84957885742188 -8.02195549011230 +v 10.96598720550537 500.84957885742188 -15.49722766876221 +v 15.89158344268799 500.84957885742188 -21.91638946533203 +v 22.31074523925781 500.84957885742188 -26.84198570251465 +v 29.78601837158203 500.84957885742188 -29.93834495544434 +v 37.80797195434570 500.84957885742188 -30.99445533752441 +v 45.82992935180664 500.84957885742188 -29.93834495544434 +v 53.30520248413086 500.84957885742188 -26.84198570251465 +v 59.72436523437500 500.84957885742188 -21.91638946533203 +v 64.64996337890625 500.84957885742188 -15.49722766876221 +v 67.74632263183594 500.84957885742188 -8.02195549011230 +v 72.37779998779297 509.48129272460938 0.00000000000000 +v 71.19985961914062 509.48129272460938 8.94732856750488 +v 67.74632263183594 509.48129272460938 17.28491210937500 +v 62.25252914428711 509.48129272460938 24.44455718994141 +v 55.09288406372070 509.48129272460938 29.93834495544434 +v 46.75530242919922 509.48129272460938 33.39188385009766 +v 37.80797195434570 509.48129272460938 34.56982421875000 +v 28.86064529418945 509.48129272460938 33.39188385009766 +v 20.52306175231934 509.48129272460938 29.93834495544434 +v 13.36341667175293 509.48129272460938 24.44455718994141 +v 7.86962795257568 509.48129272460938 17.28491210937500 +v 4.41608762741089 509.48129272460938 8.94732856750488 +v 3.23814964294434 509.48129272460938 0.00000000000000 +v 4.41608762741089 509.48129272460938 -8.94732856750488 +v 7.86962795257568 509.48129272460938 -17.28491210937500 +v 13.36341667175293 509.48129272460938 -24.44455718994141 +v 20.52306175231934 509.48129272460938 -29.93834495544434 +v 28.86064529418945 509.48129272460938 -33.39188385009766 +v 37.80797195434570 509.48129272460938 -34.56982421875000 +v 46.75530242919922 509.48129272460938 -33.39188385009766 +v 55.09288406372070 509.48129272460938 -29.93834495544434 +v 62.25252914428711 509.48129272460938 -24.44455718994141 +v 67.74632263183594 509.48129272460938 -17.28491210937500 +v 71.19985961914062 509.48129272460938 -8.94732856750488 +v 73.59729003906250 518.74426269531250 0.00000000000000 +v 72.37779998779297 518.74426269531250 9.26295661926270 +v 68.80242919921875 518.74426269531250 17.89465713500977 +v 63.11484146118164 518.74426269531250 25.30686759948730 +v 55.70263290405273 518.74426269531250 30.99445533752441 +v 47.07093048095703 518.74426269531250 34.56982421875000 +v 37.80797195434570 518.74426269531250 35.78931427001953 +v 28.54501724243164 518.74426269531250 34.56982421875000 +v 19.91331672668457 518.74426269531250 30.99445533752441 +v 12.50110626220703 518.74426269531250 25.30686759948730 +v 6.81351709365845 518.74426269531250 17.89465713500977 +v 3.23814964294434 518.74426269531250 9.26295661926270 +v 2.01865816116333 518.74426269531250 0.00000000000000 +v 3.23814964294434 518.74426269531250 -9.26295661926270 +v 6.81351709365845 518.74426269531250 -17.89465713500977 +v 12.50110626220703 518.74426269531250 -25.30686759948730 +v 19.91331672668457 518.74426269531250 -30.99445533752441 +v 28.54501724243164 518.74426269531250 -34.56982421875000 +v 37.80797195434570 518.74426269531250 -35.78931427001953 +v 47.07093048095703 518.74426269531250 -34.56982421875000 +v 55.70263290405273 518.74426269531250 -30.99445533752441 +v 63.11484146118164 518.74426269531250 -25.30686759948730 +v 68.80242919921875 518.74426269531250 -17.89465713500977 +v 72.37779998779297 518.74426269531250 -9.26295661926270 +v 72.37779998779297 528.00720214843750 0.00000000000000 +v 71.19985961914062 528.00720214843750 8.94732856750488 +v 67.74632263183594 528.00720214843750 17.28491210937500 +v 62.25252914428711 528.00720214843750 24.44455718994141 +v 55.09288406372070 528.00720214843750 29.93834495544434 +v 46.75530242919922 528.00720214843750 33.39188385009766 +v 37.80797195434570 528.00720214843750 34.56982421875000 +v 28.86064529418945 528.00720214843750 33.39188385009766 +v 20.52306175231934 528.00720214843750 29.93834495544434 +v 13.36341667175293 528.00720214843750 24.44455718994141 +v 7.86962795257568 528.00720214843750 17.28491210937500 +v 4.41608762741089 528.00720214843750 8.94732856750488 +v 3.23814964294434 528.00720214843750 0.00000000000000 +v 4.41608762741089 528.00720214843750 -8.94732856750488 +v 7.86962795257568 528.00720214843750 -17.28491210937500 +v 13.36341667175293 528.00720214843750 -24.44455718994141 +v 20.52306175231934 528.00720214843750 -29.93834495544434 +v 28.86064529418945 528.00720214843750 -33.39188385009766 +v 37.80797195434570 528.00720214843750 -34.56982421875000 +v 46.75530242919922 528.00720214843750 -33.39188385009766 +v 55.09288406372070 528.00720214843750 -29.93834495544434 +v 62.25252914428711 528.00720214843750 -24.44455718994141 +v 67.74632263183594 528.00720214843750 -17.28491210937500 +v 71.19985961914062 528.00720214843750 -8.94732856750488 +v 68.80242919921875 536.63891601562500 0.00000000000000 +v 67.74632263183594 536.63891601562500 8.02195549011230 +v 64.64996337890625 536.63891601562500 15.49722766876221 +v 59.72436523437500 536.63891601562500 21.91638946533203 +v 53.30520248413086 536.63891601562500 26.84198570251465 +v 45.82992935180664 536.63891601562500 29.93834495544434 +v 37.80797195434570 536.63891601562500 30.99445533752441 +v 29.78601837158203 536.63891601562500 29.93834495544434 +v 22.31074523925781 536.63891601562500 26.84198570251465 +v 15.89158344268799 536.63891601562500 21.91638946533203 +v 10.96598720550537 536.63891601562500 15.49722766876221 +v 7.86962795257568 536.63891601562500 8.02195549011230 +v 6.81351709365845 536.63891601562500 0.00000000000000 +v 7.86962795257568 536.63891601562500 -8.02195549011230 +v 10.96598720550537 536.63891601562500 -15.49722766876221 +v 15.89158344268799 536.63891601562500 -21.91638946533203 +v 22.31074523925781 536.63891601562500 -26.84198570251465 +v 29.78601837158203 536.63891601562500 -29.93834495544434 +v 37.80797195434570 536.63891601562500 -30.99445533752441 +v 45.82992935180664 536.63891601562500 -29.93834495544434 +v 53.30520248413086 536.63891601562500 -26.84198570251465 +v 59.72436523437500 536.63891601562500 -21.91638946533203 +v 64.64996337890625 536.63891601562500 -15.49722766876221 +v 67.74632263183594 536.63891601562500 -8.02195549011230 +v 63.11484146118164 544.05108642578125 0.00000000000000 +v 62.25252914428711 544.05108642578125 6.54989910125732 +v 59.72436523437500 544.05108642578125 12.65343379974365 +v 55.70263290405273 544.05108642578125 17.89465713500977 +v 50.46140670776367 544.05108642578125 21.91638946533203 +v 44.35787200927734 544.05108642578125 24.44455718994141 +v 37.80797195434570 544.05108642578125 25.30686759948730 +v 31.25807380676270 544.05108642578125 24.44455718994141 +v 25.15453910827637 544.05108642578125 21.91638946533203 +v 19.91331672668457 544.05108642578125 17.89465713500977 +v 15.89158344268799 544.05108642578125 12.65343379974365 +v 13.36341667175293 544.05108642578125 6.54989910125732 +v 12.50110626220703 544.05108642578125 0.00000000000000 +v 13.36341667175293 544.05108642578125 -6.54989910125732 +v 15.89158344268799 544.05108642578125 -12.65343379974365 +v 19.91331672668457 544.05108642578125 -17.89465713500977 +v 25.15453910827637 544.05108642578125 -21.91638946533203 +v 31.25807380676270 544.05108642578125 -24.44455718994141 +v 37.80797195434570 544.05108642578125 -25.30686759948730 +v 44.35787200927734 544.05108642578125 -24.44455718994141 +v 50.46140670776367 544.05108642578125 -21.91638946533203 +v 55.70263290405273 544.05108642578125 -17.89465713500977 +v 59.72436523437500 544.05108642578125 -12.65343379974365 +v 62.25252914428711 544.05108642578125 -6.54989910125732 +v 55.70263290405273 549.73870849609375 0.00000000000000 +v 55.09288406372070 549.73870849609375 4.63147830963135 +v 53.30520248413086 549.73870849609375 8.94732856750488 +v 50.46140670776367 549.73870849609375 12.65343379974365 +v 46.75530242919922 549.73870849609375 15.49722766876221 +v 42.43945312500000 549.73870849609375 17.28491210937500 +v 37.80797195434570 549.73870849609375 17.89465713500977 +v 33.17649459838867 549.73870849609375 17.28491210937500 +v 28.86064529418945 549.73870849609375 15.49722766876221 +v 25.15453910827637 549.73870849609375 12.65343379974365 +v 22.31074523925781 549.73870849609375 8.94732856750488 +v 20.52306175231934 549.73870849609375 4.63147830963135 +v 19.91331672668457 549.73870849609375 0.00000000000000 +v 20.52306175231934 549.73870849609375 -4.63147830963135 +v 22.31074523925781 549.73870849609375 -8.94732856750488 +v 25.15453910827637 549.73870849609375 -12.65343379974365 +v 28.86064529418945 549.73870849609375 -15.49722766876221 +v 33.17649459838867 549.73870849609375 -17.28491210937500 +v 37.80797195434570 549.73870849609375 -17.89465713500977 +v 42.43945312500000 549.73870849609375 -17.28491210937500 +v 46.75530242919922 549.73870849609375 -15.49722766876221 +v 50.46140670776367 549.73870849609375 -12.65343379974365 +v 53.30520248413086 549.73870849609375 -8.94732856750488 +v 55.09288406372070 549.73870849609375 -4.63147830963135 +v 47.07093048095703 553.31408691406250 0.00000000000000 +v 46.75530242919922 553.31408691406250 2.39742946624756 +v 45.82992935180664 553.31408691406250 4.63147830963135 +v 44.35787200927734 553.31408691406250 6.54989910125732 +v 42.43945312500000 553.31408691406250 8.02195549011230 +v 40.20540237426758 553.31408691406250 8.94732856750488 +v 37.80797195434570 553.31408691406250 9.26295661926270 +v 35.41054534912109 553.31408691406250 8.94732856750488 +v 33.17649459838867 553.31408691406250 8.02195549011230 +v 31.25807380676270 553.31408691406250 6.54989910125732 +v 29.78601837158203 553.31408691406250 4.63147830963135 +v 28.86064529418945 553.31408691406250 2.39742946624756 +v 28.54501724243164 553.31408691406250 0.00000000000000 +v 28.86064529418945 553.31408691406250 -2.39742946624756 +v 29.78601837158203 553.31408691406250 -4.63147830963135 +v 31.25807380676270 553.31408691406250 -6.54989910125732 +v 33.17649459838867 553.31408691406250 -8.02195549011230 +v 35.41054534912109 553.31408691406250 -8.94732856750488 +v 37.80797195434570 553.31408691406250 -9.26295661926270 +v 40.20540237426758 553.31408691406250 -8.94732856750488 +v 42.43945312500000 553.31408691406250 -8.02195549011230 +v 44.35787200927734 553.31408691406250 -6.54989910125732 +v 45.82992935180664 553.31408691406250 -4.63147830963135 +v 46.75530242919922 553.31408691406250 -2.39742946624756 +# 266 vertices + +vn 0.25872254371643 -0.96595168113708 0.00000000000000 +vn 0.49989017844200 -0.86608880758286 0.00000000000000 +vn 0.48285821080208 -0.86608839035034 0.12937887012959 +vn 0.24990959465504 -0.96595042943954 0.06696964800358 +vn 0.43291905522346 -0.86608809232712 0.24994489550591 +vn 0.22406597435474 -0.96595245599747 0.12934575974941 +vn 0.35347855091095 -0.86608648300171 0.35347855091095 +vn 0.18294046819210 -0.96595317125320 0.18294046819210 +vn 0.24994489550591 -0.86608809232712 0.43291905522346 +vn 0.12934575974941 -0.96595245599747 0.22406597435474 +vn 0.12937887012959 -0.86608839035034 0.48285821080208 +vn 0.06696964800358 -0.96595042943954 0.24990959465504 +vn 0.00000000000000 -0.86608880758286 0.49989017844200 +vn 0.00000000000000 -0.96595168113708 0.25872254371643 +vn -0.12937887012959 -0.86608839035034 0.48285821080208 +vn -0.06696964800358 -0.96595042943954 0.24990959465504 +vn -0.24994489550591 -0.86608809232712 0.43291905522346 +vn -0.12934575974941 -0.96595245599747 0.22406597435474 +vn -0.35347855091095 -0.86608648300171 0.35347855091095 +vn -0.18294046819210 -0.96595317125320 0.18294046819210 +vn -0.43291905522346 -0.86608809232712 0.24994489550591 +vn -0.22406597435474 -0.96595245599747 0.12934575974941 +vn -0.48285821080208 -0.86608839035034 0.12937887012959 +vn -0.24990959465504 -0.96595042943954 0.06696964800358 +vn -0.49989017844200 -0.86608880758286 0.00000000000000 +vn -0.25872254371643 -0.96595168113708 0.00000000000000 +vn -0.48285821080208 -0.86608839035034 -0.12937887012959 +vn -0.24990959465504 -0.96595042943954 -0.06696964800358 +vn -0.43291905522346 -0.86608809232712 -0.24994489550591 +vn -0.22406597435474 -0.96595245599747 -0.12934575974941 +vn -0.35347855091095 -0.86608648300171 -0.35347855091095 +vn -0.18294046819210 -0.96595317125320 -0.18294046819210 +vn -0.24994489550591 -0.86608809232712 -0.43291905522346 +vn -0.12934575974941 -0.96595245599747 -0.22406597435474 +vn -0.12937887012959 -0.86608839035034 -0.48285821080208 +vn -0.06696964800358 -0.96595042943954 -0.24990959465504 +vn 0.00000000000000 -0.86608880758286 -0.49989017844200 +vn 0.00000000000000 -0.96595168113708 -0.25872254371643 +vn 0.12937887012959 -0.86608839035034 -0.48285821080208 +vn 0.06696964800358 -0.96595042943954 -0.24990959465504 +vn 0.24994489550591 -0.86608809232712 -0.43291905522346 +vn 0.12934575974941 -0.96595245599747 -0.22406597435474 +vn 0.35347855091095 -0.86608648300171 -0.35347855091095 +vn 0.18294046819210 -0.96595317125320 -0.18294046819210 +vn 0.43291905522346 -0.86608809232712 -0.24994489550591 +vn 0.22406597435474 -0.96595245599747 -0.12934575974941 +vn 0.48285821080208 -0.86608839035034 -0.12937887012959 +vn 0.24990959465504 -0.96595042943954 -0.06696964800358 +vn 0.70701301097870 -0.70720052719116 0.00000000000000 +vn 0.68292242288589 -0.70720422267914 0.18297308683395 +vn 0.61229205131531 -0.70719999074936 0.35350623726845 +vn 0.49992457032204 -0.70721340179443 0.49992457032204 +vn 0.35350623726845 -0.70719999074936 0.61229205131531 +vn 0.18297308683395 -0.70720422267914 0.68292242288589 +vn 0.00000000000000 -0.70720052719116 0.70701301097870 +vn -0.18297308683395 -0.70720422267914 0.68292242288589 +vn -0.35350623726845 -0.70719999074936 0.61229205131531 +vn -0.49992457032204 -0.70721340179443 0.49992457032204 +vn -0.61229205131531 -0.70719999074936 0.35350623726845 +vn -0.68292242288589 -0.70720422267914 0.18297308683395 +vn -0.70701301097870 -0.70720052719116 0.00000000000000 +vn -0.68292242288589 -0.70720422267914 -0.18297308683395 +vn -0.61229205131531 -0.70719999074936 -0.35350623726845 +vn -0.49992457032204 -0.70721340179443 -0.49992457032204 +vn -0.35350623726845 -0.70719999074936 -0.61229205131531 +vn -0.18297308683395 -0.70720422267914 -0.68292242288589 +vn 0.00000000000000 -0.70720052719116 -0.70701301097870 +vn 0.18297308683395 -0.70720422267914 -0.68292242288589 +vn 0.35350623726845 -0.70719999074936 -0.61229205131531 +vn 0.49992457032204 -0.70721340179443 -0.49992457032204 +vn 0.61229205131531 -0.70719999074936 -0.35350623726845 +vn 0.68292242288589 -0.70720422267914 -0.18297308683395 +vn 0.86596280336380 -0.50010836124420 0.00000000000000 +vn 0.83645695447922 -0.50010538101196 0.22413022816181 +vn 0.74995177984238 -0.50010323524475 0.43297699093819 +vn 0.61232876777649 -0.50010699033737 0.61232876777649 +vn 0.43297699093819 -0.50010323524475 0.74995177984238 +vn 0.22413022816181 -0.50010538101196 0.83645695447922 +vn 0.00000000000000 -0.50010836124420 0.86596280336380 +vn -0.22413022816181 -0.50010538101196 0.83645695447922 +vn -0.43297699093819 -0.50010323524475 0.74995177984238 +vn -0.61232876777649 -0.50010699033737 0.61232876777649 +vn -0.74995177984238 -0.50010323524475 0.43297699093819 +vn -0.83645695447922 -0.50010538101196 0.22413022816181 +vn -0.86596280336380 -0.50010836124420 0.00000000000000 +vn -0.83645695447922 -0.50010538101196 -0.22413022816181 +vn -0.74995177984238 -0.50010323524475 -0.43297699093819 +vn -0.61232876777649 -0.50010699033737 -0.61232876777649 +vn -0.43297699093819 -0.50010323524475 -0.74995177984238 +vn -0.22413022816181 -0.50010538101196 -0.83645695447922 +vn 0.00000000000000 -0.50010836124420 -0.86596280336380 +vn 0.22413022816181 -0.50010538101196 -0.83645695447922 +vn 0.43297699093819 -0.50010323524475 -0.74995177984238 +vn 0.61232876777649 -0.50010699033737 -0.61232876777649 +vn 0.74995177984238 -0.50010323524475 -0.43297699093819 +vn 0.83645695447922 -0.50010538101196 -0.22413022816181 +vn 0.96591055393219 -0.25887614488602 0.00000000000000 +vn 0.93300485610962 -0.25887635350227 0.24997004866600 +vn 0.83650958538055 -0.25887796282768 0.48294299840927 +vn 0.68299984931946 -0.25888678431511 0.68299984931946 +vn 0.48294299840927 -0.25887796282768 0.83650958538055 +vn 0.24997004866600 -0.25887635350227 0.93300485610962 +vn 0.00000000000000 -0.25887614488602 0.96591055393219 +vn -0.24997004866600 -0.25887635350227 0.93300485610962 +vn -0.48294299840927 -0.25887796282768 0.83650958538055 +vn -0.68299984931946 -0.25888678431511 0.68299984931946 +vn -0.83650958538055 -0.25887796282768 0.48294299840927 +vn -0.93300485610962 -0.25887635350227 0.24997004866600 +vn -0.96591055393219 -0.25887614488602 0.00000000000000 +vn -0.93300485610962 -0.25887635350227 -0.24997004866600 +vn -0.83650958538055 -0.25887796282768 -0.48294299840927 +vn -0.68299984931946 -0.25888678431511 -0.68299984931946 +vn -0.48294299840927 -0.25887796282768 -0.83650958538055 +vn -0.24997004866600 -0.25887635350227 -0.93300485610962 +vn 0.00000000000000 -0.25887614488602 -0.96591055393219 +vn 0.24997004866600 -0.25887635350227 -0.93300485610962 +vn 0.48294299840927 -0.25887796282768 -0.83650958538055 +vn 0.68299984931946 -0.25888678431511 -0.68299984931946 +vn 0.83650958538055 -0.25887796282768 -0.48294299840927 +vn 0.93300485610962 -0.25887635350227 -0.24997004866600 +vn 1.00000000000000 0.00000000000000 0.00000000000000 +vn 0.96592617034912 0.00000000000000 0.25881782174110 +vn 0.86604040861130 0.00000000000000 0.49997401237488 +vn 0.70710676908493 0.00000000000000 0.70710676908493 +vn 0.49997401237488 0.00000000000000 0.86604040861130 +vn 0.25881782174110 0.00000000000000 0.96592617034912 +vn 0.00000000000000 0.00000000000000 1.00000000000000 +vn -0.25881782174110 0.00000000000000 0.96592617034912 +vn -0.49997401237488 0.00000000000000 0.86604040861130 +vn -0.70710676908493 0.00000000000000 0.70710676908493 +vn -0.86604040861130 0.00000000000000 0.49997401237488 +vn -0.96592617034912 0.00000000000000 0.25881782174110 +vn -1.00000000000000 0.00000000000000 0.00000000000000 +vn -0.96592617034912 0.00000000000000 -0.25881782174110 +vn -0.86604040861130 0.00000000000000 -0.49997401237488 +vn -0.70710676908493 0.00000000000000 -0.70710676908493 +vn -0.49997401237488 0.00000000000000 -0.86604040861130 +vn -0.25881782174110 0.00000000000000 -0.96592617034912 +vn 0.00000000000000 0.00000000000000 -1.00000000000000 +vn 0.25881782174110 0.00000000000000 -0.96592617034912 +vn 0.49997401237488 0.00000000000000 -0.86604040861130 +vn 0.70710676908493 0.00000000000000 -0.70710676908493 +vn 0.86604040861130 0.00000000000000 -0.49997401237488 +vn 0.96592617034912 0.00000000000000 -0.25881782174110 +vn 0.96591055393219 0.25887614488602 0.00000000000000 +vn 0.93300485610962 0.25887635350227 0.24997004866600 +vn 0.83650958538055 0.25887796282768 0.48294299840927 +vn 0.68299984931946 0.25888678431511 0.68299984931946 +vn 0.48294299840927 0.25887796282768 0.83650958538055 +vn 0.24997004866600 0.25887635350227 0.93300485610962 +vn 0.00000000000000 0.25887614488602 0.96591055393219 +vn -0.24997004866600 0.25887635350227 0.93300485610962 +vn -0.48294299840927 0.25887796282768 0.83650958538055 +vn -0.68299984931946 0.25888678431511 0.68299984931946 +vn -0.83650958538055 0.25887796282768 0.48294299840927 +vn -0.93300485610962 0.25887635350227 0.24997004866600 +vn -0.96591055393219 0.25887614488602 0.00000000000000 +vn -0.93300485610962 0.25887635350227 -0.24997004866600 +vn -0.83650958538055 0.25887796282768 -0.48294299840927 +vn -0.68299984931946 0.25888678431511 -0.68299984931946 +vn -0.48294299840927 0.25887796282768 -0.83650958538055 +vn -0.24997004866600 0.25887635350227 -0.93300485610962 +vn 0.00000000000000 0.25887614488602 -0.96591055393219 +vn 0.24997004866600 0.25887635350227 -0.93300485610962 +vn 0.48294299840927 0.25887796282768 -0.83650958538055 +vn 0.68299984931946 0.25888678431511 -0.68299984931946 +vn 0.83650958538055 0.25887796282768 -0.48294299840927 +vn 0.93300485610962 0.25887635350227 -0.24997004866600 +vn 0.86596280336380 0.50010836124420 0.00000000000000 +vn 0.83645695447922 0.50010538101196 0.22413022816181 +vn 0.74995177984238 0.50010323524475 0.43297699093819 +vn 0.61232876777649 0.50010699033737 0.61232876777649 +vn 0.43297699093819 0.50010323524475 0.74995177984238 +vn 0.22413022816181 0.50010538101196 0.83645695447922 +vn 0.00000000000000 0.50010836124420 0.86596280336380 +vn -0.22413022816181 0.50010538101196 0.83645695447922 +vn -0.43297699093819 0.50010323524475 0.74995177984238 +vn -0.61232876777649 0.50010699033737 0.61232876777649 +vn -0.74995177984238 0.50010323524475 0.43297699093819 +vn -0.83645695447922 0.50010538101196 0.22413022816181 +vn -0.86596280336380 0.50010836124420 0.00000000000000 +vn -0.83645695447922 0.50010538101196 -0.22413022816181 +vn -0.74995177984238 0.50010323524475 -0.43297699093819 +vn -0.61232876777649 0.50010699033737 -0.61232876777649 +vn -0.43297699093819 0.50010323524475 -0.74995177984238 +vn -0.22413022816181 0.50010538101196 -0.83645695447922 +vn 0.00000000000000 0.50010836124420 -0.86596280336380 +vn 0.22413022816181 0.50010538101196 -0.83645695447922 +vn 0.43297699093819 0.50010323524475 -0.74995177984238 +vn 0.61232876777649 0.50010699033737 -0.61232876777649 +vn 0.74995177984238 0.50010323524475 -0.43297699093819 +vn 0.83645695447922 0.50010538101196 -0.22413022816181 +vn 0.70701301097870 0.70720052719116 0.00000000000000 +vn 0.68292242288589 0.70720422267914 0.18297308683395 +vn 0.61229205131531 0.70719999074936 0.35350623726845 +vn 0.49992457032204 0.70721340179443 0.49992457032204 +vn 0.35350623726845 0.70719999074936 0.61229205131531 +vn 0.18297308683395 0.70720422267914 0.68292242288589 +vn 0.00000000000000 0.70720052719116 0.70701301097870 +vn -0.18297308683395 0.70720422267914 0.68292242288589 +vn -0.35350623726845 0.70719999074936 0.61229205131531 +vn -0.49992457032204 0.70721340179443 0.49992457032204 +vn -0.61229205131531 0.70719999074936 0.35350623726845 +vn -0.68292242288589 0.70720422267914 0.18297308683395 +vn -0.70701301097870 0.70720052719116 0.00000000000000 +vn -0.68292242288589 0.70720422267914 -0.18297308683395 +vn -0.61229205131531 0.70719999074936 -0.35350623726845 +vn -0.49992457032204 0.70721340179443 -0.49992457032204 +vn -0.35350623726845 0.70719999074936 -0.61229205131531 +vn -0.18297308683395 0.70720422267914 -0.68292242288589 +vn 0.00000000000000 0.70720052719116 -0.70701301097870 +vn 0.18297308683395 0.70720422267914 -0.68292242288589 +vn 0.35350623726845 0.70719999074936 -0.61229205131531 +vn 0.49992457032204 0.70721340179443 -0.49992457032204 +vn 0.61229205131531 0.70719999074936 -0.35350623726845 +vn 0.68292242288589 0.70720422267914 -0.18297308683395 +vn 0.49989017844200 0.86608880758286 0.00000000000000 +vn 0.48285821080208 0.86608839035034 0.12937887012959 +vn 0.43291905522346 0.86608809232712 0.24994489550591 +vn 0.35347855091095 0.86608648300171 0.35347855091095 +vn 0.24994489550591 0.86608809232712 0.43291905522346 +vn 0.12937887012959 0.86608839035034 0.48285821080208 +vn 0.00000000000000 0.86608880758286 0.49989017844200 +vn -0.12937887012959 0.86608839035034 0.48285821080208 +vn -0.24994489550591 0.86608809232712 0.43291905522346 +vn -0.35347855091095 0.86608648300171 0.35347855091095 +vn -0.43291905522346 0.86608809232712 0.24994489550591 +vn -0.48285821080208 0.86608839035034 0.12937887012959 +vn -0.49989017844200 0.86608880758286 0.00000000000000 +vn -0.48285821080208 0.86608839035034 -0.12937887012959 +vn -0.43291905522346 0.86608809232712 -0.24994489550591 +vn -0.35347855091095 0.86608648300171 -0.35347855091095 +vn -0.24994489550591 0.86608809232712 -0.43291905522346 +vn -0.12937887012959 0.86608839035034 -0.48285821080208 +vn 0.00000000000000 0.86608880758286 -0.49989017844200 +vn 0.12937887012959 0.86608839035034 -0.48285821080208 +vn 0.24994489550591 0.86608809232712 -0.43291905522346 +vn 0.35347855091095 0.86608648300171 -0.35347855091095 +vn 0.43291905522346 0.86608809232712 -0.24994489550591 +vn 0.48285821080208 0.86608839035034 -0.12937887012959 +vn 0.25872254371643 0.96595168113708 0.00000000000000 +vn 0.24990959465504 0.96595042943954 0.06696964800358 +vn 0.22406597435474 0.96595245599747 0.12934575974941 +vn 0.18294046819210 0.96595317125320 0.18294046819210 +vn 0.12934575974941 0.96595245599747 0.22406597435474 +vn 0.06696964800358 0.96595042943954 0.24990959465504 +vn 0.00000000000000 0.96595168113708 0.25872254371643 +vn -0.06696964800358 0.96595042943954 0.24990959465504 +vn -0.12934575974941 0.96595245599747 0.22406597435474 +vn -0.18294046819210 0.96595317125320 0.18294046819210 +vn -0.22406597435474 0.96595245599747 0.12934575974941 +vn -0.24990959465504 0.96595042943954 0.06696964800358 +vn -0.25872254371643 0.96595168113708 0.00000000000000 +vn -0.24990959465504 0.96595042943954 -0.06696964800358 +vn -0.22406597435474 0.96595245599747 -0.12934575974941 +vn -0.18294046819210 0.96595317125320 -0.18294046819210 +vn -0.12934575974941 0.96595245599747 -0.22406597435474 +vn -0.06696964800358 0.96595042943954 -0.24990959465504 +vn 0.00000000000000 0.96595168113708 -0.25872254371643 +vn 0.06696964800358 0.96595042943954 -0.24990959465504 +vn 0.12934575974941 0.96595245599747 -0.22406597435474 +vn 0.18294046819210 0.96595317125320 -0.18294046819210 +vn 0.22406597435474 0.96595245599747 -0.12934575974941 +vn 0.24990959465504 0.96595042943954 -0.06696964800358 +vn 0.00000000000000 -1.00000000000000 0.00000000000000 +vn 0.00000000000000 1.00000000000000 0.00000000000000 +# 266 normals + +vt 0.00000000000000 0.08333337306976 0.00000000000000 +vt 0.00000000000000 0.16666674613953 0.00000000000000 +vt 0.04166666790843 0.16666674613953 0.00000000000000 +vt 0.04166666790843 0.08333337306976 0.00000000000000 +vt 0.08333333581686 0.16666674613953 0.00000000000000 +vt 0.08333333581686 0.08333337306976 0.00000000000000 +vt 0.12500000000000 0.16666674613953 0.00000000000000 +vt 0.12500000000000 0.08333337306976 0.00000000000000 +vt 0.16666667163372 0.16666674613953 0.00000000000000 +vt 0.16666667163372 0.08333337306976 0.00000000000000 +vt 0.20833332836628 0.16666674613953 0.00000000000000 +vt 0.20833332836628 0.08333337306976 0.00000000000000 +vt 0.25000000000000 0.16666674613953 0.00000000000000 +vt 0.25000000000000 0.08333337306976 0.00000000000000 +vt 0.29166665673256 0.16666674613953 0.00000000000000 +vt 0.29166665673256 0.08333337306976 0.00000000000000 +vt 0.33333334326744 0.16666674613953 0.00000000000000 +vt 0.33333334326744 0.08333337306976 0.00000000000000 +vt 0.37500000000000 0.16666674613953 0.00000000000000 +vt 0.37500000000000 0.08333337306976 0.00000000000000 +vt 0.41666665673256 0.16666674613953 0.00000000000000 +vt 0.41666665673256 0.08333337306976 0.00000000000000 +vt 0.45833334326744 0.16666674613953 0.00000000000000 +vt 0.45833334326744 0.08333337306976 0.00000000000000 +vt 0.50000000000000 0.16666674613953 0.00000000000000 +vt 0.50000000000000 0.08333337306976 0.00000000000000 +vt 0.54166668653488 0.16666674613953 0.00000000000000 +vt 0.54166668653488 0.08333337306976 0.00000000000000 +vt 0.58333331346512 0.16666674613953 0.00000000000000 +vt 0.58333331346512 0.08333337306976 0.00000000000000 +vt 0.62500000000000 0.16666674613953 0.00000000000000 +vt 0.62500000000000 0.08333337306976 0.00000000000000 +vt 0.66666668653488 0.16666674613953 0.00000000000000 +vt 0.66666668653488 0.08333337306976 0.00000000000000 +vt 0.70833331346512 0.16666674613953 0.00000000000000 +vt 0.70833331346512 0.08333337306976 0.00000000000000 +vt 0.75000000000000 0.16666674613953 0.00000000000000 +vt 0.75000000000000 0.08333337306976 0.00000000000000 +vt 0.79166668653488 0.16666674613953 0.00000000000000 +vt 0.79166668653488 0.08333337306976 0.00000000000000 +vt 0.83333331346512 0.16666674613953 0.00000000000000 +vt 0.83333331346512 0.08333337306976 0.00000000000000 +vt 0.87500000000000 0.16666674613953 0.00000000000000 +vt 0.87500000000000 0.08333337306976 0.00000000000000 +vt 0.91666668653488 0.16666674613953 0.00000000000000 +vt 0.91666668653488 0.08333337306976 0.00000000000000 +vt 0.95833331346512 0.16666674613953 0.00000000000000 +vt 0.95833331346512 0.08333337306976 0.00000000000000 +vt 1.00000000000000 0.16666674613953 0.00000000000000 +vt 1.00000000000000 0.08333337306976 0.00000000000000 +vt 0.00000000000000 0.25000000000000 0.00000000000000 +vt 0.04166666790843 0.25000000000000 0.00000000000000 +vt 0.08333333581686 0.25000000000000 0.00000000000000 +vt 0.12500000000000 0.25000000000000 0.00000000000000 +vt 0.16666667163372 0.25000000000000 0.00000000000000 +vt 0.20833332836628 0.25000000000000 0.00000000000000 +vt 0.25000000000000 0.25000000000000 0.00000000000000 +vt 0.29166665673256 0.25000000000000 0.00000000000000 +vt 0.33333334326744 0.25000000000000 0.00000000000000 +vt 0.37500000000000 0.25000000000000 0.00000000000000 +vt 0.41666665673256 0.25000000000000 0.00000000000000 +vt 0.45833334326744 0.25000000000000 0.00000000000000 +vt 0.50000000000000 0.25000000000000 0.00000000000000 +vt 0.54166668653488 0.25000000000000 0.00000000000000 +vt 0.58333331346512 0.25000000000000 0.00000000000000 +vt 0.62500000000000 0.25000000000000 0.00000000000000 +vt 0.66666668653488 0.25000000000000 0.00000000000000 +vt 0.70833331346512 0.25000000000000 0.00000000000000 +vt 0.75000000000000 0.25000000000000 0.00000000000000 +vt 0.79166668653488 0.25000000000000 0.00000000000000 +vt 0.83333331346512 0.25000000000000 0.00000000000000 +vt 0.87500000000000 0.25000000000000 0.00000000000000 +vt 0.91666668653488 0.25000000000000 0.00000000000000 +vt 0.95833331346512 0.25000000000000 0.00000000000000 +vt 1.00000000000000 0.25000000000000 0.00000000000000 +vt 0.00000000000000 0.33333337306976 0.00000000000000 +vt 0.04166666790843 0.33333337306976 0.00000000000000 +vt 0.08333333581686 0.33333337306976 0.00000000000000 +vt 0.12500000000000 0.33333337306976 0.00000000000000 +vt 0.16666667163372 0.33333337306976 0.00000000000000 +vt 0.20833332836628 0.33333337306976 0.00000000000000 +vt 0.25000000000000 0.33333337306976 0.00000000000000 +vt 0.29166665673256 0.33333337306976 0.00000000000000 +vt 0.33333334326744 0.33333337306976 0.00000000000000 +vt 0.37500000000000 0.33333337306976 0.00000000000000 +vt 0.41666665673256 0.33333337306976 0.00000000000000 +vt 0.45833334326744 0.33333337306976 0.00000000000000 +vt 0.50000000000000 0.33333337306976 0.00000000000000 +vt 0.54166668653488 0.33333337306976 0.00000000000000 +vt 0.58333331346512 0.33333337306976 0.00000000000000 +vt 0.62500000000000 0.33333337306976 0.00000000000000 +vt 0.66666668653488 0.33333337306976 0.00000000000000 +vt 0.70833331346512 0.33333337306976 0.00000000000000 +vt 0.75000000000000 0.33333337306976 0.00000000000000 +vt 0.79166668653488 0.33333337306976 0.00000000000000 +vt 0.83333331346512 0.33333337306976 0.00000000000000 +vt 0.87500000000000 0.33333337306976 0.00000000000000 +vt 0.91666668653488 0.33333337306976 0.00000000000000 +vt 0.95833331346512 0.33333337306976 0.00000000000000 +vt 1.00000000000000 0.33333337306976 0.00000000000000 +vt 0.00000000000000 0.41666674613953 0.00000000000000 +vt 0.04166666790843 0.41666674613953 0.00000000000000 +vt 0.08333333581686 0.41666674613953 0.00000000000000 +vt 0.12500000000000 0.41666674613953 0.00000000000000 +vt 0.16666667163372 0.41666674613953 0.00000000000000 +vt 0.20833332836628 0.41666674613953 0.00000000000000 +vt 0.25000000000000 0.41666674613953 0.00000000000000 +vt 0.29166665673256 0.41666674613953 0.00000000000000 +vt 0.33333334326744 0.41666674613953 0.00000000000000 +vt 0.37500000000000 0.41666674613953 0.00000000000000 +vt 0.41666665673256 0.41666674613953 0.00000000000000 +vt 0.45833334326744 0.41666674613953 0.00000000000000 +vt 0.50000000000000 0.41666674613953 0.00000000000000 +vt 0.54166668653488 0.41666674613953 0.00000000000000 +vt 0.58333331346512 0.41666674613953 0.00000000000000 +vt 0.62500000000000 0.41666674613953 0.00000000000000 +vt 0.66666668653488 0.41666674613953 0.00000000000000 +vt 0.70833331346512 0.41666674613953 0.00000000000000 +vt 0.75000000000000 0.41666674613953 0.00000000000000 +vt 0.79166668653488 0.41666674613953 0.00000000000000 +vt 0.83333331346512 0.41666674613953 0.00000000000000 +vt 0.87500000000000 0.41666674613953 0.00000000000000 +vt 0.91666668653488 0.41666674613953 0.00000000000000 +vt 0.95833331346512 0.41666674613953 0.00000000000000 +vt 1.00000000000000 0.41666674613953 0.00000000000000 +vt 0.00000000000000 0.50000000000000 0.00000000000000 +vt 0.04166666790843 0.50000000000000 0.00000000000000 +vt 0.08333333581686 0.50000000000000 0.00000000000000 +vt 0.12500000000000 0.50000000000000 0.00000000000000 +vt 0.16666667163372 0.50000000000000 0.00000000000000 +vt 0.20833332836628 0.50000000000000 0.00000000000000 +vt 0.25000000000000 0.50000000000000 0.00000000000000 +vt 0.29166665673256 0.50000000000000 0.00000000000000 +vt 0.33333334326744 0.50000000000000 0.00000000000000 +vt 0.37500000000000 0.50000000000000 0.00000000000000 +vt 0.41666665673256 0.50000000000000 0.00000000000000 +vt 0.45833334326744 0.50000000000000 0.00000000000000 +vt 0.50000000000000 0.50000000000000 0.00000000000000 +vt 0.54166668653488 0.50000000000000 0.00000000000000 +vt 0.58333331346512 0.50000000000000 0.00000000000000 +vt 0.62500000000000 0.50000000000000 0.00000000000000 +vt 0.66666668653488 0.50000000000000 0.00000000000000 +vt 0.70833331346512 0.50000000000000 0.00000000000000 +vt 0.75000000000000 0.50000000000000 0.00000000000000 +vt 0.79166668653488 0.50000000000000 0.00000000000000 +vt 0.83333331346512 0.50000000000000 0.00000000000000 +vt 0.87500000000000 0.50000000000000 0.00000000000000 +vt 0.91666668653488 0.50000000000000 0.00000000000000 +vt 0.95833331346512 0.50000000000000 0.00000000000000 +vt 1.00000000000000 0.50000000000000 0.00000000000000 +vt 0.00000000000000 0.58333337306976 0.00000000000000 +vt 0.04166666790843 0.58333337306976 0.00000000000000 +vt 0.08333333581686 0.58333337306976 0.00000000000000 +vt 0.12500000000000 0.58333337306976 0.00000000000000 +vt 0.16666667163372 0.58333337306976 0.00000000000000 +vt 0.20833332836628 0.58333337306976 0.00000000000000 +vt 0.25000000000000 0.58333337306976 0.00000000000000 +vt 0.29166665673256 0.58333337306976 0.00000000000000 +vt 0.33333334326744 0.58333337306976 0.00000000000000 +vt 0.37500000000000 0.58333337306976 0.00000000000000 +vt 0.41666665673256 0.58333337306976 0.00000000000000 +vt 0.45833334326744 0.58333337306976 0.00000000000000 +vt 0.50000000000000 0.58333337306976 0.00000000000000 +vt 0.54166668653488 0.58333337306976 0.00000000000000 +vt 0.58333331346512 0.58333337306976 0.00000000000000 +vt 0.62500000000000 0.58333337306976 0.00000000000000 +vt 0.66666668653488 0.58333337306976 0.00000000000000 +vt 0.70833331346512 0.58333337306976 0.00000000000000 +vt 0.75000000000000 0.58333337306976 0.00000000000000 +vt 0.79166668653488 0.58333337306976 0.00000000000000 +vt 0.83333331346512 0.58333337306976 0.00000000000000 +vt 0.87500000000000 0.58333337306976 0.00000000000000 +vt 0.91666668653488 0.58333337306976 0.00000000000000 +vt 0.95833331346512 0.58333337306976 0.00000000000000 +vt 1.00000000000000 0.58333337306976 0.00000000000000 +vt 0.00000000000000 0.66666668653488 0.00000000000000 +vt 0.04166666790843 0.66666668653488 0.00000000000000 +vt 0.08333333581686 0.66666668653488 0.00000000000000 +vt 0.12500000000000 0.66666668653488 0.00000000000000 +vt 0.16666667163372 0.66666668653488 0.00000000000000 +vt 0.20833332836628 0.66666668653488 0.00000000000000 +vt 0.25000000000000 0.66666668653488 0.00000000000000 +vt 0.29166665673256 0.66666668653488 0.00000000000000 +vt 0.33333334326744 0.66666668653488 0.00000000000000 +vt 0.37500000000000 0.66666668653488 0.00000000000000 +vt 0.41666665673256 0.66666668653488 0.00000000000000 +vt 0.45833334326744 0.66666668653488 0.00000000000000 +vt 0.50000000000000 0.66666668653488 0.00000000000000 +vt 0.54166668653488 0.66666668653488 0.00000000000000 +vt 0.58333331346512 0.66666668653488 0.00000000000000 +vt 0.62500000000000 0.66666668653488 0.00000000000000 +vt 0.66666668653488 0.66666668653488 0.00000000000000 +vt 0.70833331346512 0.66666668653488 0.00000000000000 +vt 0.75000000000000 0.66666668653488 0.00000000000000 +vt 0.79166668653488 0.66666668653488 0.00000000000000 +vt 0.83333331346512 0.66666668653488 0.00000000000000 +vt 0.87500000000000 0.66666668653488 0.00000000000000 +vt 0.91666668653488 0.66666668653488 0.00000000000000 +vt 0.95833331346512 0.66666668653488 0.00000000000000 +vt 1.00000000000000 0.66666668653488 0.00000000000000 +vt 0.00000000000000 0.75000000000000 0.00000000000000 +vt 0.04166666790843 0.75000000000000 0.00000000000000 +vt 0.08333333581686 0.75000000000000 0.00000000000000 +vt 0.12500000000000 0.75000000000000 0.00000000000000 +vt 0.16666667163372 0.75000000000000 0.00000000000000 +vt 0.20833332836628 0.75000000000000 0.00000000000000 +vt 0.25000000000000 0.75000000000000 0.00000000000000 +vt 0.29166665673256 0.75000000000000 0.00000000000000 +vt 0.33333334326744 0.75000000000000 0.00000000000000 +vt 0.37500000000000 0.75000000000000 0.00000000000000 +vt 0.41666665673256 0.75000000000000 0.00000000000000 +vt 0.45833334326744 0.75000000000000 0.00000000000000 +vt 0.50000000000000 0.75000000000000 0.00000000000000 +vt 0.54166668653488 0.75000000000000 0.00000000000000 +vt 0.58333331346512 0.75000000000000 0.00000000000000 +vt 0.62500000000000 0.75000000000000 0.00000000000000 +vt 0.66666668653488 0.75000000000000 0.00000000000000 +vt 0.70833331346512 0.75000000000000 0.00000000000000 +vt 0.75000000000000 0.75000000000000 0.00000000000000 +vt 0.79166668653488 0.75000000000000 0.00000000000000 +vt 0.83333331346512 0.75000000000000 0.00000000000000 +vt 0.87500000000000 0.75000000000000 0.00000000000000 +vt 0.91666668653488 0.75000000000000 0.00000000000000 +vt 0.95833331346512 0.75000000000000 0.00000000000000 +vt 1.00000000000000 0.75000000000000 0.00000000000000 +vt 0.00000000000000 0.83333337306976 0.00000000000000 +vt 0.04166666790843 0.83333337306976 0.00000000000000 +vt 0.08333333581686 0.83333337306976 0.00000000000000 +vt 0.12500000000000 0.83333337306976 0.00000000000000 +vt 0.16666667163372 0.83333337306976 0.00000000000000 +vt 0.20833332836628 0.83333337306976 0.00000000000000 +vt 0.25000000000000 0.83333337306976 0.00000000000000 +vt 0.29166665673256 0.83333337306976 0.00000000000000 +vt 0.33333334326744 0.83333337306976 0.00000000000000 +vt 0.37500000000000 0.83333337306976 0.00000000000000 +vt 0.41666665673256 0.83333337306976 0.00000000000000 +vt 0.45833334326744 0.83333337306976 0.00000000000000 +vt 0.50000000000000 0.83333337306976 0.00000000000000 +vt 0.54166668653488 0.83333337306976 0.00000000000000 +vt 0.58333331346512 0.83333337306976 0.00000000000000 +vt 0.62500000000000 0.83333337306976 0.00000000000000 +vt 0.66666668653488 0.83333337306976 0.00000000000000 +vt 0.70833331346512 0.83333337306976 0.00000000000000 +vt 0.75000000000000 0.83333337306976 0.00000000000000 +vt 0.79166668653488 0.83333337306976 0.00000000000000 +vt 0.83333331346512 0.83333337306976 0.00000000000000 +vt 0.87500000000000 0.83333337306976 0.00000000000000 +vt 0.91666668653488 0.83333337306976 0.00000000000000 +vt 0.95833331346512 0.83333337306976 0.00000000000000 +vt 1.00000000000000 0.83333337306976 0.00000000000000 +vt 0.00000000000000 0.91666668653488 0.00000000000000 +vt 0.04166666790843 0.91666668653488 0.00000000000000 +vt 0.08333333581686 0.91666668653488 0.00000000000000 +vt 0.12500000000000 0.91666668653488 0.00000000000000 +vt 0.16666667163372 0.91666668653488 0.00000000000000 +vt 0.20833332836628 0.91666668653488 0.00000000000000 +vt 0.25000000000000 0.91666668653488 0.00000000000000 +vt 0.29166665673256 0.91666668653488 0.00000000000000 +vt 0.33333334326744 0.91666668653488 0.00000000000000 +vt 0.37500000000000 0.91666668653488 0.00000000000000 +vt 0.41666665673256 0.91666668653488 0.00000000000000 +vt 0.45833334326744 0.91666668653488 0.00000000000000 +vt 0.50000000000000 0.91666668653488 0.00000000000000 +vt 0.54166668653488 0.91666668653488 0.00000000000000 +vt 0.58333331346512 0.91666668653488 0.00000000000000 +vt 0.62500000000000 0.91666668653488 0.00000000000000 +vt 0.66666668653488 0.91666668653488 0.00000000000000 +vt 0.70833331346512 0.91666668653488 0.00000000000000 +vt 0.75000000000000 0.91666668653488 0.00000000000000 +vt 0.79166668653488 0.91666668653488 0.00000000000000 +vt 0.83333331346512 0.91666668653488 0.00000000000000 +vt 0.87500000000000 0.91666668653488 0.00000000000000 +vt 0.91666668653488 0.91666668653488 0.00000000000000 +vt 0.95833331346512 0.91666668653488 0.00000000000000 +vt 1.00000000000000 0.91666668653488 0.00000000000000 +vt 0.04166666790843 0.00000000000000 0.00000000000000 +vt 0.04166666790843 1.00000000000000 0.00000000000000 +vt 0.08333333581686 0.00000000000000 0.00000000000000 +vt 0.08333333581686 1.00000000000000 0.00000000000000 +vt 0.12500000000000 0.00000000000000 0.00000000000000 +vt 0.12500000000000 1.00000000000000 0.00000000000000 +vt 0.16666667163372 0.00000000000000 0.00000000000000 +vt 0.16666667163372 1.00000000000000 0.00000000000000 +vt 0.20833332836628 0.00000000000000 0.00000000000000 +vt 0.20833332836628 1.00000000000000 0.00000000000000 +vt 0.25000000000000 0.00000000000000 0.00000000000000 +vt 0.25000000000000 1.00000000000000 0.00000000000000 +vt 0.29166665673256 0.00000000000000 0.00000000000000 +vt 0.29166665673256 1.00000000000000 0.00000000000000 +vt 0.33333334326744 0.00000000000000 0.00000000000000 +vt 0.33333334326744 1.00000000000000 0.00000000000000 +vt 0.37500000000000 0.00000000000000 0.00000000000000 +vt 0.37500000000000 1.00000000000000 0.00000000000000 +vt 0.41666665673256 0.00000000000000 0.00000000000000 +vt 0.41666665673256 1.00000000000000 0.00000000000000 +vt 0.45833334326744 0.00000000000000 0.00000000000000 +vt 0.45833334326744 1.00000000000000 0.00000000000000 +vt 0.50000000000000 0.00000000000000 0.00000000000000 +vt 0.50000000000000 1.00000000000000 0.00000000000000 +vt 0.54166668653488 0.00000000000000 0.00000000000000 +vt 0.54166668653488 1.00000000000000 0.00000000000000 +vt 0.58333331346512 0.00000000000000 0.00000000000000 +vt 0.58333331346512 1.00000000000000 0.00000000000000 +vt 0.62500000000000 0.00000000000000 0.00000000000000 +vt 0.62500000000000 1.00000000000000 0.00000000000000 +vt 0.66666668653488 0.00000000000000 0.00000000000000 +vt 0.66666668653488 1.00000000000000 0.00000000000000 +vt 0.70833331346512 0.00000000000000 0.00000000000000 +vt 0.70833331346512 1.00000000000000 0.00000000000000 +vt 0.75000000000000 0.00000000000000 0.00000000000000 +vt 0.75000000000000 1.00000000000000 0.00000000000000 +vt 0.79166668653488 0.00000000000000 0.00000000000000 +vt 0.79166668653488 1.00000000000000 0.00000000000000 +vt 0.83333331346512 0.00000000000000 0.00000000000000 +vt 0.83333331346512 1.00000000000000 0.00000000000000 +vt 0.87500000000000 0.00000000000000 0.00000000000000 +vt 0.87500000000000 1.00000000000000 0.00000000000000 +vt 0.91666668653488 0.00000000000000 0.00000000000000 +vt 0.91666668653488 1.00000000000000 0.00000000000000 +vt 0.95833331346512 0.00000000000000 0.00000000000000 +vt 0.95833331346512 1.00000000000000 0.00000000000000 +# 321 texture coordinates + +g 球体.2 +usemtl 材质.3 +f 465/67/34 489/68/35 490/69/36 466/70/37 +f 466/70/37 490/69/36 491/71/38 467/72/39 +f 467/72/39 491/71/38 492/73/40 468/74/41 +f 468/74/41 492/73/40 493/75/42 469/76/43 +f 469/76/43 493/75/42 494/77/44 470/78/45 +f 470/78/45 494/77/44 495/79/46 471/80/47 +f 471/80/47 495/79/46 496/81/48 472/82/49 +f 472/82/49 496/81/48 497/83/50 473/84/51 +f 473/84/51 497/83/50 498/85/52 474/86/53 +f 474/86/53 498/85/52 499/87/54 475/88/55 +f 475/88/55 499/87/54 500/89/56 476/90/57 +f 476/90/57 500/89/56 501/91/58 477/92/59 +f 477/92/59 501/91/58 502/93/60 478/94/61 +f 478/94/61 502/93/60 503/95/62 479/96/63 +f 479/96/63 503/95/62 504/97/64 480/98/65 +f 480/98/65 504/97/64 505/99/66 481/100/67 +f 481/100/67 505/99/66 506/101/68 482/102/69 +f 482/102/69 506/101/68 507/103/70 483/104/71 +f 483/104/71 507/103/70 508/105/72 484/106/73 +f 484/106/73 508/105/72 509/107/74 485/108/75 +f 485/108/75 509/107/74 510/109/76 486/110/77 +f 486/110/77 510/109/76 511/111/78 487/112/79 +f 487/112/79 511/111/78 512/113/80 488/114/81 +f 488/114/81 512/113/80 489/115/35 465/116/34 +f 489/68/35 513/117/82 514/118/83 490/69/36 +f 490/69/36 514/118/83 515/119/84 491/71/38 +f 491/71/38 515/119/84 516/120/85 492/73/40 +f 492/73/40 516/120/85 517/121/86 493/75/42 +f 493/75/42 517/121/86 518/122/87 494/77/44 +f 494/77/44 518/122/87 519/123/88 495/79/46 +f 495/79/46 519/123/88 520/124/89 496/81/48 +f 496/81/48 520/124/89 521/125/90 497/83/50 +f 497/83/50 521/125/90 522/126/91 498/85/52 +f 498/85/52 522/126/91 523/127/92 499/87/54 +f 499/87/54 523/127/92 524/128/93 500/89/56 +f 500/89/56 524/128/93 525/129/94 501/91/58 +f 501/91/58 525/129/94 526/130/95 502/93/60 +f 502/93/60 526/130/95 527/131/96 503/95/62 +f 503/95/62 527/131/96 528/132/97 504/97/64 +f 504/97/64 528/132/97 529/133/98 505/99/66 +f 505/99/66 529/133/98 530/134/99 506/101/68 +f 506/101/68 530/134/99 531/135/100 507/103/70 +f 507/103/70 531/135/100 532/136/101 508/105/72 +f 508/105/72 532/136/101 533/137/102 509/107/74 +f 509/107/74 533/137/102 534/138/103 510/109/76 +f 510/109/76 534/138/103 535/139/104 511/111/78 +f 511/111/78 535/139/104 536/140/105 512/113/80 +f 512/113/80 536/140/105 513/141/82 489/115/35 +f 513/117/82 537/142/106 538/143/107 514/118/83 +f 514/118/83 538/143/107 539/144/108 515/119/84 +f 515/119/84 539/144/108 540/145/109 516/120/85 +f 516/120/85 540/145/109 541/146/110 517/121/86 +f 517/121/86 541/146/110 542/147/111 518/122/87 +f 518/122/87 542/147/111 543/148/112 519/123/88 +f 519/123/88 543/148/112 544/149/113 520/124/89 +f 520/124/89 544/149/113 545/150/114 521/125/90 +f 521/125/90 545/150/114 546/151/115 522/126/91 +f 522/126/91 546/151/115 547/152/116 523/127/92 +f 523/127/92 547/152/116 548/153/117 524/128/93 +f 524/128/93 548/153/117 549/154/118 525/129/94 +f 525/129/94 549/154/118 550/155/119 526/130/95 +f 526/130/95 550/155/119 551/156/120 527/131/96 +f 527/131/96 551/156/120 552/157/121 528/132/97 +f 528/132/97 552/157/121 553/158/122 529/133/98 +f 529/133/98 553/158/122 554/159/123 530/134/99 +f 530/134/99 554/159/123 555/160/124 531/135/100 +f 531/135/100 555/160/124 556/161/125 532/136/101 +f 532/136/101 556/161/125 557/162/126 533/137/102 +f 533/137/102 557/162/126 558/163/127 534/138/103 +f 534/138/103 558/163/127 559/164/128 535/139/104 +f 535/139/104 559/164/128 560/165/129 536/140/105 +f 536/140/105 560/165/129 537/166/106 513/141/82 +f 537/142/106 561/167/130 562/168/131 538/143/107 +f 538/143/107 562/168/131 563/169/132 539/144/108 +f 539/144/108 563/169/132 564/170/133 540/145/109 +f 540/145/109 564/170/133 565/171/134 541/146/110 +f 541/146/110 565/171/134 566/172/135 542/147/111 +f 542/147/111 566/172/135 567/173/136 543/148/112 +f 543/148/112 567/173/136 568/174/137 544/149/113 +f 544/149/113 568/174/137 569/175/138 545/150/114 +f 545/150/114 569/175/138 570/176/139 546/151/115 +f 546/151/115 570/176/139 571/177/140 547/152/116 +f 547/152/116 571/177/140 572/178/141 548/153/117 +f 548/153/117 572/178/141 573/179/142 549/154/118 +f 549/154/118 573/179/142 574/180/143 550/155/119 +f 550/155/119 574/180/143 575/181/144 551/156/120 +f 551/156/120 575/181/144 576/182/145 552/157/121 +f 552/157/121 576/182/145 577/183/146 553/158/122 +f 553/158/122 577/183/146 578/184/147 554/159/123 +f 554/159/123 578/184/147 579/185/148 555/160/124 +f 555/160/124 579/185/148 580/186/149 556/161/125 +f 556/161/125 580/186/149 581/187/150 557/162/126 +f 557/162/126 581/187/150 582/188/151 558/163/127 +f 558/163/127 582/188/151 583/189/152 559/164/128 +f 559/164/128 583/189/152 584/190/153 560/165/129 +f 560/165/129 584/190/153 561/191/130 537/166/106 +f 561/167/130 585/192/154 586/193/155 562/168/131 +f 562/168/131 586/193/155 587/194/156 563/169/132 +f 563/169/132 587/194/156 588/195/157 564/170/133 +f 564/170/133 588/195/157 589/196/158 565/171/134 +f 565/171/134 589/196/158 590/197/159 566/172/135 +f 566/172/135 590/197/159 591/198/160 567/173/136 +f 567/173/136 591/198/160 592/199/161 568/174/137 +f 568/174/137 592/199/161 593/200/162 569/175/138 +f 569/175/138 593/200/162 594/201/163 570/176/139 +f 570/176/139 594/201/163 595/202/164 571/177/140 +f 571/177/140 595/202/164 596/203/165 572/178/141 +f 572/178/141 596/203/165 597/204/166 573/179/142 +f 573/179/142 597/204/166 598/205/167 574/180/143 +f 574/180/143 598/205/167 599/206/168 575/181/144 +f 575/181/144 599/206/168 600/207/169 576/182/145 +f 576/182/145 600/207/169 601/208/170 577/183/146 +f 577/183/146 601/208/170 602/209/171 578/184/147 +f 578/184/147 602/209/171 603/210/172 579/185/148 +f 579/185/148 603/210/172 604/211/173 580/186/149 +f 580/186/149 604/211/173 605/212/174 581/187/150 +f 581/187/150 605/212/174 606/213/175 582/188/151 +f 582/188/151 606/213/175 607/214/176 583/189/152 +f 583/189/152 607/214/176 608/215/177 584/190/153 +f 584/190/153 608/215/177 585/216/154 561/191/130 +f 585/192/154 609/217/178 610/218/179 586/193/155 +f 586/193/155 610/218/179 611/219/180 587/194/156 +f 587/194/156 611/219/180 612/220/181 588/195/157 +f 588/195/157 612/220/181 613/221/182 589/196/158 +f 589/196/158 613/221/182 614/222/183 590/197/159 +f 590/197/159 614/222/183 615/223/184 591/198/160 +f 591/198/160 615/223/184 616/224/185 592/199/161 +f 592/199/161 616/224/185 617/225/186 593/200/162 +f 593/200/162 617/225/186 618/226/187 594/201/163 +f 594/201/163 618/226/187 619/227/188 595/202/164 +f 595/202/164 619/227/188 620/228/189 596/203/165 +f 596/203/165 620/228/189 621/229/190 597/204/166 +f 597/204/166 621/229/190 622/230/191 598/205/167 +f 598/205/167 622/230/191 623/231/192 599/206/168 +f 599/206/168 623/231/192 624/232/193 600/207/169 +f 600/207/169 624/232/193 625/233/194 601/208/170 +f 601/208/170 625/233/194 626/234/195 602/209/171 +f 602/209/171 626/234/195 627/235/196 603/210/172 +f 603/210/172 627/235/196 628/236/197 604/211/173 +f 604/211/173 628/236/197 629/237/198 605/212/174 +f 605/212/174 629/237/198 630/238/199 606/213/175 +f 606/213/175 630/238/199 631/239/200 607/214/176 +f 607/214/176 631/239/200 632/240/201 608/215/177 +f 608/215/177 632/240/201 609/241/178 585/216/154 +f 609/217/178 633/242/202 634/243/203 610/218/179 +f 610/218/179 634/243/203 635/244/204 611/219/180 +f 611/219/180 635/244/204 636/245/205 612/220/181 +f 612/220/181 636/245/205 637/246/206 613/221/182 +f 613/221/182 637/246/206 638/247/207 614/222/183 +f 614/222/183 638/247/207 639/248/208 615/223/184 +f 615/223/184 639/248/208 640/249/209 616/224/185 +f 616/224/185 640/249/209 641/250/210 617/225/186 +f 617/225/186 641/250/210 642/251/211 618/226/187 +f 618/226/187 642/251/211 643/252/212 619/227/188 +f 619/227/188 643/252/212 644/253/213 620/228/189 +f 620/228/189 644/253/213 645/254/214 621/229/190 +f 621/229/190 645/254/214 646/255/215 622/230/191 +f 622/230/191 646/255/215 647/256/216 623/231/192 +f 623/231/192 647/256/216 648/257/217 624/232/193 +f 624/232/193 648/257/217 649/258/218 625/233/194 +f 625/233/194 649/258/218 650/259/219 626/234/195 +f 626/234/195 650/259/219 651/260/220 627/235/196 +f 627/235/196 651/260/220 652/261/221 628/236/197 +f 628/236/197 652/261/221 653/262/222 629/237/198 +f 629/237/198 653/262/222 654/263/223 630/238/199 +f 630/238/199 654/263/223 655/264/224 631/239/200 +f 631/239/200 655/264/224 656/265/225 632/240/201 +f 632/240/201 656/265/225 633/266/202 609/241/178 +f 633/242/202 657/267/226 658/268/227 634/243/203 +f 634/243/203 658/268/227 659/269/228 635/244/204 +f 635/244/204 659/269/228 660/270/229 636/245/205 +f 636/245/205 660/270/229 661/271/230 637/246/206 +f 637/246/206 661/271/230 662/272/231 638/247/207 +f 638/247/207 662/272/231 663/273/232 639/248/208 +f 639/248/208 663/273/232 664/274/233 640/249/209 +f 640/249/209 664/274/233 665/275/234 641/250/210 +f 641/250/210 665/275/234 666/276/235 642/251/211 +f 642/251/211 666/276/235 667/277/236 643/252/212 +f 643/252/212 667/277/236 668/278/237 644/253/213 +f 644/253/213 668/278/237 669/279/238 645/254/214 +f 645/254/214 669/279/238 670/280/239 646/255/215 +f 646/255/215 670/280/239 671/281/240 647/256/216 +f 647/256/216 671/281/240 672/282/241 648/257/217 +f 648/257/217 672/282/241 673/283/242 649/258/218 +f 649/258/218 673/283/242 674/284/243 650/259/219 +f 650/259/219 674/284/243 675/285/244 651/260/220 +f 651/260/220 675/285/244 676/286/245 652/261/221 +f 652/261/221 676/286/245 677/287/246 653/262/222 +f 653/262/222 677/287/246 678/288/247 654/263/223 +f 654/263/223 678/288/247 679/289/248 655/264/224 +f 655/264/224 679/289/248 680/290/249 656/265/225 +f 656/265/225 680/290/249 657/291/226 633/266/202 +f 657/267/226 681/292/250 682/293/251 658/268/227 +f 658/268/227 682/293/251 683/294/252 659/269/228 +f 659/269/228 683/294/252 684/295/253 660/270/229 +f 660/270/229 684/295/253 685/296/254 661/271/230 +f 661/271/230 685/296/254 686/297/255 662/272/231 +f 662/272/231 686/297/255 687/298/256 663/273/232 +f 663/273/232 687/298/256 688/299/257 664/274/233 +f 664/274/233 688/299/257 689/300/258 665/275/234 +f 665/275/234 689/300/258 690/301/259 666/276/235 +f 666/276/235 690/301/259 691/302/260 667/277/236 +f 667/277/236 691/302/260 692/303/261 668/278/237 +f 668/278/237 692/303/261 693/304/262 669/279/238 +f 669/279/238 693/304/262 694/305/263 670/280/239 +f 670/280/239 694/305/263 695/306/264 671/281/240 +f 671/281/240 695/306/264 696/307/265 672/282/241 +f 672/282/241 696/307/265 697/308/266 673/283/242 +f 673/283/242 697/308/266 698/309/267 674/284/243 +f 674/284/243 698/309/267 699/310/268 675/285/244 +f 675/285/244 699/310/268 700/311/269 676/286/245 +f 676/286/245 700/311/269 701/312/270 677/287/246 +f 677/287/246 701/312/270 702/313/271 678/288/247 +f 678/288/247 702/313/271 703/314/272 679/289/248 +f 679/289/248 703/314/272 704/315/273 680/290/249 +f 680/290/249 704/315/273 681/316/250 657/291/226 +f 681/292/250 705/317/274 706/318/275 682/293/251 +f 682/293/251 706/318/275 707/319/276 683/294/252 +f 683/294/252 707/319/276 708/320/277 684/295/253 +f 684/295/253 708/320/277 709/321/278 685/296/254 +f 685/296/254 709/321/278 710/322/279 686/297/255 +f 686/297/255 710/322/279 711/323/280 687/298/256 +f 687/298/256 711/323/280 712/324/281 688/299/257 +f 688/299/257 712/324/281 713/325/282 689/300/258 +f 689/300/258 713/325/282 714/326/283 690/301/259 +f 690/301/259 714/326/283 715/327/284 691/302/260 +f 691/302/260 715/327/284 716/328/285 692/303/261 +f 692/303/261 716/328/285 717/329/286 693/304/262 +f 693/304/262 717/329/286 718/330/287 694/305/263 +f 694/305/263 718/330/287 719/331/288 695/306/264 +f 695/306/264 719/331/288 720/332/289 696/307/265 +f 696/307/265 720/332/289 721/333/290 697/308/266 +f 697/308/266 721/333/290 722/334/291 698/309/267 +f 698/309/267 722/334/291 723/335/292 699/310/268 +f 699/310/268 723/335/292 724/336/293 700/311/269 +f 700/311/269 724/336/293 725/337/294 701/312/270 +f 701/312/270 725/337/294 726/338/295 702/313/271 +f 702/313/271 726/338/295 727/339/296 703/314/272 +f 703/314/272 727/339/296 728/340/297 704/315/273 +f 704/315/273 728/340/297 705/341/274 681/316/250 +f 463/4/298 465/67/34 466/70/37 +f 706/318/275 705/317/274 464/1/299 +f 463/342/298 466/70/37 467/72/39 +f 707/319/276 706/318/275 464/343/299 +f 463/344/298 467/72/39 468/74/41 +f 708/320/277 707/319/276 464/345/299 +f 463/346/298 468/74/41 469/76/43 +f 709/321/278 708/320/277 464/347/299 +f 463/348/298 469/76/43 470/78/45 +f 710/322/279 709/321/278 464/349/299 +f 463/350/298 470/78/45 471/80/47 +f 711/323/280 710/322/279 464/351/299 +f 463/352/298 471/80/47 472/82/49 +f 712/324/281 711/323/280 464/353/299 +f 463/354/298 472/82/49 473/84/51 +f 713/325/282 712/324/281 464/355/299 +f 463/356/298 473/84/51 474/86/53 +f 714/326/283 713/325/282 464/357/299 +f 463/358/298 474/86/53 475/88/55 +f 715/327/284 714/326/283 464/359/299 +f 463/360/298 475/88/55 476/90/57 +f 716/328/285 715/327/284 464/361/299 +f 463/362/298 476/90/57 477/92/59 +f 717/329/286 716/328/285 464/363/299 +f 463/364/298 477/92/59 478/94/61 +f 718/330/287 717/329/286 464/365/299 +f 463/366/298 478/94/61 479/96/63 +f 719/331/288 718/330/287 464/367/299 +f 463/368/298 479/96/63 480/98/65 +f 720/332/289 719/331/288 464/369/299 +f 463/370/298 480/98/65 481/100/67 +f 721/333/290 720/332/289 464/371/299 +f 463/372/298 481/100/67 482/102/69 +f 722/334/291 721/333/290 464/373/299 +f 463/374/298 482/102/69 483/104/71 +f 723/335/292 722/334/291 464/375/299 +f 463/376/298 483/104/71 484/106/73 +f 724/336/293 723/335/292 464/377/299 +f 463/378/298 484/106/73 485/108/75 +f 725/337/294 724/336/293 464/379/299 +f 463/380/298 485/108/75 486/110/77 +f 726/338/295 725/337/294 464/381/299 +f 463/382/298 486/110/77 487/112/79 +f 727/339/296 726/338/295 464/383/299 +f 463/384/298 487/112/79 488/114/81 +f 728/340/297 727/339/296 464/385/299 +f 463/386/298 488/114/81 465/116/34 +f 705/341/274 728/340/297 464/387/299 + +v 37.80797195434570 575.17773437500000 0.00000000000000 +v 37.80797195434570 646.75634765625000 0.00000000000000 +v 47.07093048095703 576.39721679687500 0.00000000000000 +v 46.75530242919922 576.39721679687500 2.39742946624756 +v 45.82992935180664 576.39721679687500 4.63147830963135 +v 44.35787200927734 576.39721679687500 6.54989910125732 +v 42.43945312500000 576.39721679687500 8.02195549011230 +v 40.20540237426758 576.39721679687500 8.94732856750488 +v 37.80797195434570 576.39721679687500 9.26295661926270 +v 35.41054534912109 576.39721679687500 8.94732856750488 +v 33.17649459838867 576.39721679687500 8.02195549011230 +v 31.25807380676270 576.39721679687500 6.54989910125732 +v 29.78601837158203 576.39721679687500 4.63147830963135 +v 28.86064529418945 576.39721679687500 2.39742946624756 +v 28.54501724243164 576.39721679687500 0.00000000000000 +v 28.86064529418945 576.39721679687500 -2.39742946624756 +v 29.78601837158203 576.39721679687500 -4.63147830963135 +v 31.25807380676270 576.39721679687500 -6.54989910125732 +v 33.17649459838867 576.39721679687500 -8.02195549011230 +v 35.41054534912109 576.39721679687500 -8.94732856750488 +v 37.80797195434570 576.39721679687500 -9.26295661926270 +v 40.20540237426758 576.39721679687500 -8.94732856750488 +v 42.43945312500000 576.39721679687500 -8.02195549011230 +v 44.35787200927734 576.39721679687500 -6.54989910125732 +v 45.82992935180664 576.39721679687500 -4.63147830963135 +v 46.75530242919922 576.39721679687500 -2.39742946624756 +v 55.70263290405273 579.97259521484375 0.00000000000000 +v 55.09288406372070 579.97259521484375 4.63147830963135 +v 53.30520248413086 579.97259521484375 8.94732856750488 +v 50.46140670776367 579.97259521484375 12.65343379974365 +v 46.75530242919922 579.97259521484375 15.49722766876221 +v 42.43945312500000 579.97259521484375 17.28491210937500 +v 37.80797195434570 579.97259521484375 17.89465713500977 +v 33.17649459838867 579.97259521484375 17.28491210937500 +v 28.86064529418945 579.97259521484375 15.49722766876221 +v 25.15453910827637 579.97259521484375 12.65343379974365 +v 22.31074523925781 579.97259521484375 8.94732856750488 +v 20.52306175231934 579.97259521484375 4.63147830963135 +v 19.91331672668457 579.97259521484375 0.00000000000000 +v 20.52306175231934 579.97259521484375 -4.63147830963135 +v 22.31074523925781 579.97259521484375 -8.94732856750488 +v 25.15453910827637 579.97259521484375 -12.65343379974365 +v 28.86064529418945 579.97259521484375 -15.49722766876221 +v 33.17649459838867 579.97259521484375 -17.28491210937500 +v 37.80797195434570 579.97259521484375 -17.89465713500977 +v 42.43945312500000 579.97259521484375 -17.28491210937500 +v 46.75530242919922 579.97259521484375 -15.49722766876221 +v 50.46140670776367 579.97259521484375 -12.65343379974365 +v 53.30520248413086 579.97259521484375 -8.94732856750488 +v 55.09288406372070 579.97259521484375 -4.63147830963135 +v 63.11484146118164 585.66015625000000 0.00000000000000 +v 62.25252914428711 585.66015625000000 6.54989910125732 +v 59.72436523437500 585.66015625000000 12.65343379974365 +v 55.70263290405273 585.66015625000000 17.89465713500977 +v 50.46140670776367 585.66015625000000 21.91638946533203 +v 44.35787200927734 585.66015625000000 24.44455718994141 +v 37.80797195434570 585.66015625000000 25.30686759948730 +v 31.25807380676270 585.66015625000000 24.44455718994141 +v 25.15453910827637 585.66015625000000 21.91638946533203 +v 19.91331672668457 585.66015625000000 17.89465713500977 +v 15.89158344268799 585.66015625000000 12.65343379974365 +v 13.36341667175293 585.66015625000000 6.54989910125732 +v 12.50110626220703 585.66015625000000 0.00000000000000 +v 13.36341667175293 585.66015625000000 -6.54989910125732 +v 15.89158344268799 585.66015625000000 -12.65343379974365 +v 19.91331672668457 585.66015625000000 -17.89465713500977 +v 25.15453910827637 585.66015625000000 -21.91638946533203 +v 31.25807380676270 585.66015625000000 -24.44455718994141 +v 37.80797195434570 585.66015625000000 -25.30686759948730 +v 44.35787200927734 585.66015625000000 -24.44455718994141 +v 50.46140670776367 585.66015625000000 -21.91638946533203 +v 55.70263290405273 585.66015625000000 -17.89465713500977 +v 59.72436523437500 585.66015625000000 -12.65343379974365 +v 62.25252914428711 585.66015625000000 -6.54989910125732 +v 68.80242919921875 593.07238769531250 0.00000000000000 +v 67.74632263183594 593.07238769531250 8.02195549011230 +v 64.64996337890625 593.07238769531250 15.49722766876221 +v 59.72436523437500 593.07238769531250 21.91638946533203 +v 53.30520248413086 593.07238769531250 26.84198570251465 +v 45.82992935180664 593.07238769531250 29.93834495544434 +v 37.80797195434570 593.07238769531250 30.99445533752441 +v 29.78601837158203 593.07238769531250 29.93834495544434 +v 22.31074523925781 593.07238769531250 26.84198570251465 +v 15.89158344268799 593.07238769531250 21.91638946533203 +v 10.96598720550537 593.07238769531250 15.49722766876221 +v 7.86962795257568 593.07238769531250 8.02195549011230 +v 6.81351709365845 593.07238769531250 0.00000000000000 +v 7.86962795257568 593.07238769531250 -8.02195549011230 +v 10.96598720550537 593.07238769531250 -15.49722766876221 +v 15.89158344268799 593.07238769531250 -21.91638946533203 +v 22.31074523925781 593.07238769531250 -26.84198570251465 +v 29.78601837158203 593.07238769531250 -29.93834495544434 +v 37.80797195434570 593.07238769531250 -30.99445533752441 +v 45.82992935180664 593.07238769531250 -29.93834495544434 +v 53.30520248413086 593.07238769531250 -26.84198570251465 +v 59.72436523437500 593.07238769531250 -21.91638946533203 +v 64.64996337890625 593.07238769531250 -15.49722766876221 +v 67.74632263183594 593.07238769531250 -8.02195549011230 +v 72.37779998779297 601.70410156250000 0.00000000000000 +v 71.19985961914062 601.70410156250000 8.94732856750488 +v 67.74632263183594 601.70410156250000 17.28491210937500 +v 62.25252914428711 601.70410156250000 24.44455718994141 +v 55.09288406372070 601.70410156250000 29.93834495544434 +v 46.75530242919922 601.70410156250000 33.39188385009766 +v 37.80797195434570 601.70410156250000 34.56982421875000 +v 28.86064529418945 601.70410156250000 33.39188385009766 +v 20.52306175231934 601.70410156250000 29.93834495544434 +v 13.36341667175293 601.70410156250000 24.44455718994141 +v 7.86962795257568 601.70410156250000 17.28491210937500 +v 4.41608762741089 601.70410156250000 8.94732856750488 +v 3.23814964294434 601.70410156250000 0.00000000000000 +v 4.41608762741089 601.70410156250000 -8.94732856750488 +v 7.86962795257568 601.70410156250000 -17.28491210937500 +v 13.36341667175293 601.70410156250000 -24.44455718994141 +v 20.52306175231934 601.70410156250000 -29.93834495544434 +v 28.86064529418945 601.70410156250000 -33.39188385009766 +v 37.80797195434570 601.70410156250000 -34.56982421875000 +v 46.75530242919922 601.70410156250000 -33.39188385009766 +v 55.09288406372070 601.70410156250000 -29.93834495544434 +v 62.25252914428711 601.70410156250000 -24.44455718994141 +v 67.74632263183594 601.70410156250000 -17.28491210937500 +v 71.19985961914062 601.70410156250000 -8.94732856750488 +v 73.59729003906250 610.96704101562500 0.00000000000000 +v 72.37779998779297 610.96704101562500 9.26295661926270 +v 68.80242919921875 610.96704101562500 17.89465713500977 +v 63.11484146118164 610.96704101562500 25.30686759948730 +v 55.70263290405273 610.96704101562500 30.99445533752441 +v 47.07093048095703 610.96704101562500 34.56982421875000 +v 37.80797195434570 610.96704101562500 35.78931427001953 +v 28.54501724243164 610.96704101562500 34.56982421875000 +v 19.91331672668457 610.96704101562500 30.99445533752441 +v 12.50110626220703 610.96704101562500 25.30686759948730 +v 6.81351709365845 610.96704101562500 17.89465713500977 +v 3.23814964294434 610.96704101562500 9.26295661926270 +v 2.01865816116333 610.96704101562500 0.00000000000000 +v 3.23814964294434 610.96704101562500 -9.26295661926270 +v 6.81351709365845 610.96704101562500 -17.89465713500977 +v 12.50110626220703 610.96704101562500 -25.30686759948730 +v 19.91331672668457 610.96704101562500 -30.99445533752441 +v 28.54501724243164 610.96704101562500 -34.56982421875000 +v 37.80797195434570 610.96704101562500 -35.78931427001953 +v 47.07093048095703 610.96704101562500 -34.56982421875000 +v 55.70263290405273 610.96704101562500 -30.99445533752441 +v 63.11484146118164 610.96704101562500 -25.30686759948730 +v 68.80242919921875 610.96704101562500 -17.89465713500977 +v 72.37779998779297 610.96704101562500 -9.26295661926270 +v 72.37779998779297 620.22998046875000 0.00000000000000 +v 71.19985961914062 620.22998046875000 8.94732856750488 +v 67.74632263183594 620.22998046875000 17.28491210937500 +v 62.25252914428711 620.22998046875000 24.44455718994141 +v 55.09288406372070 620.22998046875000 29.93834495544434 +v 46.75530242919922 620.22998046875000 33.39188385009766 +v 37.80797195434570 620.22998046875000 34.56982421875000 +v 28.86064529418945 620.22998046875000 33.39188385009766 +v 20.52306175231934 620.22998046875000 29.93834495544434 +v 13.36341667175293 620.22998046875000 24.44455718994141 +v 7.86962795257568 620.22998046875000 17.28491210937500 +v 4.41608762741089 620.22998046875000 8.94732856750488 +v 3.23814964294434 620.22998046875000 0.00000000000000 +v 4.41608762741089 620.22998046875000 -8.94732856750488 +v 7.86962795257568 620.22998046875000 -17.28491210937500 +v 13.36341667175293 620.22998046875000 -24.44455718994141 +v 20.52306175231934 620.22998046875000 -29.93834495544434 +v 28.86064529418945 620.22998046875000 -33.39188385009766 +v 37.80797195434570 620.22998046875000 -34.56982421875000 +v 46.75530242919922 620.22998046875000 -33.39188385009766 +v 55.09288406372070 620.22998046875000 -29.93834495544434 +v 62.25252914428711 620.22998046875000 -24.44455718994141 +v 67.74632263183594 620.22998046875000 -17.28491210937500 +v 71.19985961914062 620.22998046875000 -8.94732856750488 +v 68.80242919921875 628.86169433593750 0.00000000000000 +v 67.74632263183594 628.86169433593750 8.02195549011230 +v 64.64996337890625 628.86169433593750 15.49722766876221 +v 59.72436523437500 628.86169433593750 21.91638946533203 +v 53.30520248413086 628.86169433593750 26.84198570251465 +v 45.82992935180664 628.86169433593750 29.93834495544434 +v 37.80797195434570 628.86169433593750 30.99445533752441 +v 29.78601837158203 628.86169433593750 29.93834495544434 +v 22.31074523925781 628.86169433593750 26.84198570251465 +v 15.89158344268799 628.86169433593750 21.91638946533203 +v 10.96598720550537 628.86169433593750 15.49722766876221 +v 7.86962795257568 628.86169433593750 8.02195549011230 +v 6.81351709365845 628.86169433593750 0.00000000000000 +v 7.86962795257568 628.86169433593750 -8.02195549011230 +v 10.96598720550537 628.86169433593750 -15.49722766876221 +v 15.89158344268799 628.86169433593750 -21.91638946533203 +v 22.31074523925781 628.86169433593750 -26.84198570251465 +v 29.78601837158203 628.86169433593750 -29.93834495544434 +v 37.80797195434570 628.86169433593750 -30.99445533752441 +v 45.82992935180664 628.86169433593750 -29.93834495544434 +v 53.30520248413086 628.86169433593750 -26.84198570251465 +v 59.72436523437500 628.86169433593750 -21.91638946533203 +v 64.64996337890625 628.86169433593750 -15.49722766876221 +v 67.74632263183594 628.86169433593750 -8.02195549011230 +v 63.11484146118164 636.27392578125000 0.00000000000000 +v 62.25252914428711 636.27392578125000 6.54989910125732 +v 59.72436523437500 636.27392578125000 12.65343379974365 +v 55.70263290405273 636.27392578125000 17.89465713500977 +v 50.46140670776367 636.27392578125000 21.91638946533203 +v 44.35787200927734 636.27392578125000 24.44455718994141 +v 37.80797195434570 636.27392578125000 25.30686759948730 +v 31.25807380676270 636.27392578125000 24.44455718994141 +v 25.15453910827637 636.27392578125000 21.91638946533203 +v 19.91331672668457 636.27392578125000 17.89465713500977 +v 15.89158344268799 636.27392578125000 12.65343379974365 +v 13.36341667175293 636.27392578125000 6.54989910125732 +v 12.50110626220703 636.27392578125000 0.00000000000000 +v 13.36341667175293 636.27392578125000 -6.54989910125732 +v 15.89158344268799 636.27392578125000 -12.65343379974365 +v 19.91331672668457 636.27392578125000 -17.89465713500977 +v 25.15453910827637 636.27392578125000 -21.91638946533203 +v 31.25807380676270 636.27392578125000 -24.44455718994141 +v 37.80797195434570 636.27392578125000 -25.30686759948730 +v 44.35787200927734 636.27392578125000 -24.44455718994141 +v 50.46140670776367 636.27392578125000 -21.91638946533203 +v 55.70263290405273 636.27392578125000 -17.89465713500977 +v 59.72436523437500 636.27392578125000 -12.65343379974365 +v 62.25252914428711 636.27392578125000 -6.54989910125732 +v 55.70263290405273 641.96148681640625 0.00000000000000 +v 55.09288406372070 641.96148681640625 4.63147830963135 +v 53.30520248413086 641.96148681640625 8.94732856750488 +v 50.46140670776367 641.96148681640625 12.65343379974365 +v 46.75530242919922 641.96148681640625 15.49722766876221 +v 42.43945312500000 641.96148681640625 17.28491210937500 +v 37.80797195434570 641.96148681640625 17.89465713500977 +v 33.17649459838867 641.96148681640625 17.28491210937500 +v 28.86064529418945 641.96148681640625 15.49722766876221 +v 25.15453910827637 641.96148681640625 12.65343379974365 +v 22.31074523925781 641.96148681640625 8.94732856750488 +v 20.52306175231934 641.96148681640625 4.63147830963135 +v 19.91331672668457 641.96148681640625 0.00000000000000 +v 20.52306175231934 641.96148681640625 -4.63147830963135 +v 22.31074523925781 641.96148681640625 -8.94732856750488 +v 25.15453910827637 641.96148681640625 -12.65343379974365 +v 28.86064529418945 641.96148681640625 -15.49722766876221 +v 33.17649459838867 641.96148681640625 -17.28491210937500 +v 37.80797195434570 641.96148681640625 -17.89465713500977 +v 42.43945312500000 641.96148681640625 -17.28491210937500 +v 46.75530242919922 641.96148681640625 -15.49722766876221 +v 50.46140670776367 641.96148681640625 -12.65343379974365 +v 53.30520248413086 641.96148681640625 -8.94732856750488 +v 55.09288406372070 641.96148681640625 -4.63147830963135 +v 47.07093048095703 645.53686523437500 0.00000000000000 +v 46.75530242919922 645.53686523437500 2.39742946624756 +v 45.82992935180664 645.53686523437500 4.63147830963135 +v 44.35787200927734 645.53686523437500 6.54989910125732 +v 42.43945312500000 645.53686523437500 8.02195549011230 +v 40.20540237426758 645.53686523437500 8.94732856750488 +v 37.80797195434570 645.53686523437500 9.26295661926270 +v 35.41054534912109 645.53686523437500 8.94732856750488 +v 33.17649459838867 645.53686523437500 8.02195549011230 +v 31.25807380676270 645.53686523437500 6.54989910125732 +v 29.78601837158203 645.53686523437500 4.63147830963135 +v 28.86064529418945 645.53686523437500 2.39742946624756 +v 28.54501724243164 645.53686523437500 0.00000000000000 +v 28.86064529418945 645.53686523437500 -2.39742946624756 +v 29.78601837158203 645.53686523437500 -4.63147830963135 +v 31.25807380676270 645.53686523437500 -6.54989910125732 +v 33.17649459838867 645.53686523437500 -8.02195549011230 +v 35.41054534912109 645.53686523437500 -8.94732856750488 +v 37.80797195434570 645.53686523437500 -9.26295661926270 +v 40.20540237426758 645.53686523437500 -8.94732856750488 +v 42.43945312500000 645.53686523437500 -8.02195549011230 +v 44.35787200927734 645.53686523437500 -6.54989910125732 +v 45.82992935180664 645.53686523437500 -4.63147830963135 +v 46.75530242919922 645.53686523437500 -2.39742946624756 +# 266 vertices + +# 0 normal + +# 0 texture coordinate + +g 球体.1 +usemtl 材质.2 +f 731/67/34 755/68/35 756/69/36 732/70/37 +f 732/70/37 756/69/36 757/71/38 733/72/39 +f 733/72/39 757/71/38 758/73/40 734/74/41 +f 734/74/41 758/73/40 759/75/42 735/76/43 +f 735/76/43 759/75/42 760/77/44 736/78/45 +f 736/78/45 760/77/44 761/79/46 737/80/47 +f 737/80/47 761/79/46 762/81/48 738/82/49 +f 738/82/49 762/81/48 763/83/50 739/84/51 +f 739/84/51 763/83/50 764/85/52 740/86/53 +f 740/86/53 764/85/52 765/87/54 741/88/55 +f 741/88/55 765/87/54 766/89/56 742/90/57 +f 742/90/57 766/89/56 767/91/58 743/92/59 +f 743/92/59 767/91/58 768/93/60 744/94/61 +f 744/94/61 768/93/60 769/95/62 745/96/63 +f 745/96/63 769/95/62 770/97/64 746/98/65 +f 746/98/65 770/97/64 771/99/66 747/100/67 +f 747/100/67 771/99/66 772/101/68 748/102/69 +f 748/102/69 772/101/68 773/103/70 749/104/71 +f 749/104/71 773/103/70 774/105/72 750/106/73 +f 750/106/73 774/105/72 775/107/74 751/108/75 +f 751/108/75 775/107/74 776/109/76 752/110/77 +f 752/110/77 776/109/76 777/111/78 753/112/79 +f 753/112/79 777/111/78 778/113/80 754/114/81 +f 754/114/81 778/113/80 755/115/35 731/116/34 +f 755/68/35 779/117/82 780/118/83 756/69/36 +f 756/69/36 780/118/83 781/119/84 757/71/38 +f 757/71/38 781/119/84 782/120/85 758/73/40 +f 758/73/40 782/120/85 783/121/86 759/75/42 +f 759/75/42 783/121/86 784/122/87 760/77/44 +f 760/77/44 784/122/87 785/123/88 761/79/46 +f 761/79/46 785/123/88 786/124/89 762/81/48 +f 762/81/48 786/124/89 787/125/90 763/83/50 +f 763/83/50 787/125/90 788/126/91 764/85/52 +f 764/85/52 788/126/91 789/127/92 765/87/54 +f 765/87/54 789/127/92 790/128/93 766/89/56 +f 766/89/56 790/128/93 791/129/94 767/91/58 +f 767/91/58 791/129/94 792/130/95 768/93/60 +f 768/93/60 792/130/95 793/131/96 769/95/62 +f 769/95/62 793/131/96 794/132/97 770/97/64 +f 770/97/64 794/132/97 795/133/98 771/99/66 +f 771/99/66 795/133/98 796/134/99 772/101/68 +f 772/101/68 796/134/99 797/135/100 773/103/70 +f 773/103/70 797/135/100 798/136/101 774/105/72 +f 774/105/72 798/136/101 799/137/102 775/107/74 +f 775/107/74 799/137/102 800/138/103 776/109/76 +f 776/109/76 800/138/103 801/139/104 777/111/78 +f 777/111/78 801/139/104 802/140/105 778/113/80 +f 778/113/80 802/140/105 779/141/82 755/115/35 +f 779/117/82 803/142/106 804/143/107 780/118/83 +f 780/118/83 804/143/107 805/144/108 781/119/84 +f 781/119/84 805/144/108 806/145/109 782/120/85 +f 782/120/85 806/145/109 807/146/110 783/121/86 +f 783/121/86 807/146/110 808/147/111 784/122/87 +f 784/122/87 808/147/111 809/148/112 785/123/88 +f 785/123/88 809/148/112 810/149/113 786/124/89 +f 786/124/89 810/149/113 811/150/114 787/125/90 +f 787/125/90 811/150/114 812/151/115 788/126/91 +f 788/126/91 812/151/115 813/152/116 789/127/92 +f 789/127/92 813/152/116 814/153/117 790/128/93 +f 790/128/93 814/153/117 815/154/118 791/129/94 +f 791/129/94 815/154/118 816/155/119 792/130/95 +f 792/130/95 816/155/119 817/156/120 793/131/96 +f 793/131/96 817/156/120 818/157/121 794/132/97 +f 794/132/97 818/157/121 819/158/122 795/133/98 +f 795/133/98 819/158/122 820/159/123 796/134/99 +f 796/134/99 820/159/123 821/160/124 797/135/100 +f 797/135/100 821/160/124 822/161/125 798/136/101 +f 798/136/101 822/161/125 823/162/126 799/137/102 +f 799/137/102 823/162/126 824/163/127 800/138/103 +f 800/138/103 824/163/127 825/164/128 801/139/104 +f 801/139/104 825/164/128 826/165/129 802/140/105 +f 802/140/105 826/165/129 803/166/106 779/141/82 +f 803/142/106 827/167/130 828/168/131 804/143/107 +f 804/143/107 828/168/131 829/169/132 805/144/108 +f 805/144/108 829/169/132 830/170/133 806/145/109 +f 806/145/109 830/170/133 831/171/134 807/146/110 +f 807/146/110 831/171/134 832/172/135 808/147/111 +f 808/147/111 832/172/135 833/173/136 809/148/112 +f 809/148/112 833/173/136 834/174/137 810/149/113 +f 810/149/113 834/174/137 835/175/138 811/150/114 +f 811/150/114 835/175/138 836/176/139 812/151/115 +f 812/151/115 836/176/139 837/177/140 813/152/116 +f 813/152/116 837/177/140 838/178/141 814/153/117 +f 814/153/117 838/178/141 839/179/142 815/154/118 +f 815/154/118 839/179/142 840/180/143 816/155/119 +f 816/155/119 840/180/143 841/181/144 817/156/120 +f 817/156/120 841/181/144 842/182/145 818/157/121 +f 818/157/121 842/182/145 843/183/146 819/158/122 +f 819/158/122 843/183/146 844/184/147 820/159/123 +f 820/159/123 844/184/147 845/185/148 821/160/124 +f 821/160/124 845/185/148 846/186/149 822/161/125 +f 822/161/125 846/186/149 847/187/150 823/162/126 +f 823/162/126 847/187/150 848/188/151 824/163/127 +f 824/163/127 848/188/151 849/189/152 825/164/128 +f 825/164/128 849/189/152 850/190/153 826/165/129 +f 826/165/129 850/190/153 827/191/130 803/166/106 +f 827/167/130 851/192/154 852/193/155 828/168/131 +f 828/168/131 852/193/155 853/194/156 829/169/132 +f 829/169/132 853/194/156 854/195/157 830/170/133 +f 830/170/133 854/195/157 855/196/158 831/171/134 +f 831/171/134 855/196/158 856/197/159 832/172/135 +f 832/172/135 856/197/159 857/198/160 833/173/136 +f 833/173/136 857/198/160 858/199/161 834/174/137 +f 834/174/137 858/199/161 859/200/162 835/175/138 +f 835/175/138 859/200/162 860/201/163 836/176/139 +f 836/176/139 860/201/163 861/202/164 837/177/140 +f 837/177/140 861/202/164 862/203/165 838/178/141 +f 838/178/141 862/203/165 863/204/166 839/179/142 +f 839/179/142 863/204/166 864/205/167 840/180/143 +f 840/180/143 864/205/167 865/206/168 841/181/144 +f 841/181/144 865/206/168 866/207/169 842/182/145 +f 842/182/145 866/207/169 867/208/170 843/183/146 +f 843/183/146 867/208/170 868/209/171 844/184/147 +f 844/184/147 868/209/171 869/210/172 845/185/148 +f 845/185/148 869/210/172 870/211/173 846/186/149 +f 846/186/149 870/211/173 871/212/174 847/187/150 +f 847/187/150 871/212/174 872/213/175 848/188/151 +f 848/188/151 872/213/175 873/214/176 849/189/152 +f 849/189/152 873/214/176 874/215/177 850/190/153 +f 850/190/153 874/215/177 851/216/154 827/191/130 +f 851/192/154 875/217/178 876/218/179 852/193/155 +f 852/193/155 876/218/179 877/219/180 853/194/156 +f 853/194/156 877/219/180 878/220/181 854/195/157 +f 854/195/157 878/220/181 879/221/182 855/196/158 +f 855/196/158 879/221/182 880/222/183 856/197/159 +f 856/197/159 880/222/183 881/223/184 857/198/160 +f 857/198/160 881/223/184 882/224/185 858/199/161 +f 858/199/161 882/224/185 883/225/186 859/200/162 +f 859/200/162 883/225/186 884/226/187 860/201/163 +f 860/201/163 884/226/187 885/227/188 861/202/164 +f 861/202/164 885/227/188 886/228/189 862/203/165 +f 862/203/165 886/228/189 887/229/190 863/204/166 +f 863/204/166 887/229/190 888/230/191 864/205/167 +f 864/205/167 888/230/191 889/231/192 865/206/168 +f 865/206/168 889/231/192 890/232/193 866/207/169 +f 866/207/169 890/232/193 891/233/194 867/208/170 +f 867/208/170 891/233/194 892/234/195 868/209/171 +f 868/209/171 892/234/195 893/235/196 869/210/172 +f 869/210/172 893/235/196 894/236/197 870/211/173 +f 870/211/173 894/236/197 895/237/198 871/212/174 +f 871/212/174 895/237/198 896/238/199 872/213/175 +f 872/213/175 896/238/199 897/239/200 873/214/176 +f 873/214/176 897/239/200 898/240/201 874/215/177 +f 874/215/177 898/240/201 875/241/178 851/216/154 +f 875/217/178 899/242/202 900/243/203 876/218/179 +f 876/218/179 900/243/203 901/244/204 877/219/180 +f 877/219/180 901/244/204 902/245/205 878/220/181 +f 878/220/181 902/245/205 903/246/206 879/221/182 +f 879/221/182 903/246/206 904/247/207 880/222/183 +f 880/222/183 904/247/207 905/248/208 881/223/184 +f 881/223/184 905/248/208 906/249/209 882/224/185 +f 882/224/185 906/249/209 907/250/210 883/225/186 +f 883/225/186 907/250/210 908/251/211 884/226/187 +f 884/226/187 908/251/211 909/252/212 885/227/188 +f 885/227/188 909/252/212 910/253/213 886/228/189 +f 886/228/189 910/253/213 911/254/214 887/229/190 +f 887/229/190 911/254/214 912/255/215 888/230/191 +f 888/230/191 912/255/215 913/256/216 889/231/192 +f 889/231/192 913/256/216 914/257/217 890/232/193 +f 890/232/193 914/257/217 915/258/218 891/233/194 +f 891/233/194 915/258/218 916/259/219 892/234/195 +f 892/234/195 916/259/219 917/260/220 893/235/196 +f 893/235/196 917/260/220 918/261/221 894/236/197 +f 894/236/197 918/261/221 919/262/222 895/237/198 +f 895/237/198 919/262/222 920/263/223 896/238/199 +f 896/238/199 920/263/223 921/264/224 897/239/200 +f 897/239/200 921/264/224 922/265/225 898/240/201 +f 898/240/201 922/265/225 899/266/202 875/241/178 +f 899/242/202 923/267/226 924/268/227 900/243/203 +f 900/243/203 924/268/227 925/269/228 901/244/204 +f 901/244/204 925/269/228 926/270/229 902/245/205 +f 902/245/205 926/270/229 927/271/230 903/246/206 +f 903/246/206 927/271/230 928/272/231 904/247/207 +f 904/247/207 928/272/231 929/273/232 905/248/208 +f 905/248/208 929/273/232 930/274/233 906/249/209 +f 906/249/209 930/274/233 931/275/234 907/250/210 +f 907/250/210 931/275/234 932/276/235 908/251/211 +f 908/251/211 932/276/235 933/277/236 909/252/212 +f 909/252/212 933/277/236 934/278/237 910/253/213 +f 910/253/213 934/278/237 935/279/238 911/254/214 +f 911/254/214 935/279/238 936/280/239 912/255/215 +f 912/255/215 936/280/239 937/281/240 913/256/216 +f 913/256/216 937/281/240 938/282/241 914/257/217 +f 914/257/217 938/282/241 939/283/242 915/258/218 +f 915/258/218 939/283/242 940/284/243 916/259/219 +f 916/259/219 940/284/243 941/285/244 917/260/220 +f 917/260/220 941/285/244 942/286/245 918/261/221 +f 918/261/221 942/286/245 943/287/246 919/262/222 +f 919/262/222 943/287/246 944/288/247 920/263/223 +f 920/263/223 944/288/247 945/289/248 921/264/224 +f 921/264/224 945/289/248 946/290/249 922/265/225 +f 922/265/225 946/290/249 923/291/226 899/266/202 +f 923/267/226 947/292/250 948/293/251 924/268/227 +f 924/268/227 948/293/251 949/294/252 925/269/228 +f 925/269/228 949/294/252 950/295/253 926/270/229 +f 926/270/229 950/295/253 951/296/254 927/271/230 +f 927/271/230 951/296/254 952/297/255 928/272/231 +f 928/272/231 952/297/255 953/298/256 929/273/232 +f 929/273/232 953/298/256 954/299/257 930/274/233 +f 930/274/233 954/299/257 955/300/258 931/275/234 +f 931/275/234 955/300/258 956/301/259 932/276/235 +f 932/276/235 956/301/259 957/302/260 933/277/236 +f 933/277/236 957/302/260 958/303/261 934/278/237 +f 934/278/237 958/303/261 959/304/262 935/279/238 +f 935/279/238 959/304/262 960/305/263 936/280/239 +f 936/280/239 960/305/263 961/306/264 937/281/240 +f 937/281/240 961/306/264 962/307/265 938/282/241 +f 938/282/241 962/307/265 963/308/266 939/283/242 +f 939/283/242 963/308/266 964/309/267 940/284/243 +f 940/284/243 964/309/267 965/310/268 941/285/244 +f 941/285/244 965/310/268 966/311/269 942/286/245 +f 942/286/245 966/311/269 967/312/270 943/287/246 +f 943/287/246 967/312/270 968/313/271 944/288/247 +f 944/288/247 968/313/271 969/314/272 945/289/248 +f 945/289/248 969/314/272 970/315/273 946/290/249 +f 946/290/249 970/315/273 947/316/250 923/291/226 +f 947/292/250 971/317/274 972/318/275 948/293/251 +f 948/293/251 972/318/275 973/319/276 949/294/252 +f 949/294/252 973/319/276 974/320/277 950/295/253 +f 950/295/253 974/320/277 975/321/278 951/296/254 +f 951/296/254 975/321/278 976/322/279 952/297/255 +f 952/297/255 976/322/279 977/323/280 953/298/256 +f 953/298/256 977/323/280 978/324/281 954/299/257 +f 954/299/257 978/324/281 979/325/282 955/300/258 +f 955/300/258 979/325/282 980/326/283 956/301/259 +f 956/301/259 980/326/283 981/327/284 957/302/260 +f 957/302/260 981/327/284 982/328/285 958/303/261 +f 958/303/261 982/328/285 983/329/286 959/304/262 +f 959/304/262 983/329/286 984/330/287 960/305/263 +f 960/305/263 984/330/287 985/331/288 961/306/264 +f 961/306/264 985/331/288 986/332/289 962/307/265 +f 962/307/265 986/332/289 987/333/290 963/308/266 +f 963/308/266 987/333/290 988/334/291 964/309/267 +f 964/309/267 988/334/291 989/335/292 965/310/268 +f 965/310/268 989/335/292 990/336/293 966/311/269 +f 966/311/269 990/336/293 991/337/294 967/312/270 +f 967/312/270 991/337/294 992/338/295 968/313/271 +f 968/313/271 992/338/295 993/339/296 969/314/272 +f 969/314/272 993/339/296 994/340/297 970/315/273 +f 970/315/273 994/340/297 971/341/274 947/316/250 +f 729/4/298 731/67/34 732/70/37 +f 972/318/275 971/317/274 730/1/299 +f 729/342/298 732/70/37 733/72/39 +f 973/319/276 972/318/275 730/343/299 +f 729/344/298 733/72/39 734/74/41 +f 974/320/277 973/319/276 730/345/299 +f 729/346/298 734/74/41 735/76/43 +f 975/321/278 974/320/277 730/347/299 +f 729/348/298 735/76/43 736/78/45 +f 976/322/279 975/321/278 730/349/299 +f 729/350/298 736/78/45 737/80/47 +f 977/323/280 976/322/279 730/351/299 +f 729/352/298 737/80/47 738/82/49 +f 978/324/281 977/323/280 730/353/299 +f 729/354/298 738/82/49 739/84/51 +f 979/325/282 978/324/281 730/355/299 +f 729/356/298 739/84/51 740/86/53 +f 980/326/283 979/325/282 730/357/299 +f 729/358/298 740/86/53 741/88/55 +f 981/327/284 980/326/283 730/359/299 +f 729/360/298 741/88/55 742/90/57 +f 982/328/285 981/327/284 730/361/299 +f 729/362/298 742/90/57 743/92/59 +f 983/329/286 982/328/285 730/363/299 +f 729/364/298 743/92/59 744/94/61 +f 984/330/287 983/329/286 730/365/299 +f 729/366/298 744/94/61 745/96/63 +f 985/331/288 984/330/287 730/367/299 +f 729/368/298 745/96/63 746/98/65 +f 986/332/289 985/331/288 730/369/299 +f 729/370/298 746/98/65 747/100/67 +f 987/333/290 986/332/289 730/371/299 +f 729/372/298 747/100/67 748/102/69 +f 988/334/291 987/333/290 730/373/299 +f 729/374/298 748/102/69 749/104/71 +f 989/335/292 988/334/291 730/375/299 +f 729/376/298 749/104/71 750/106/73 +f 990/336/293 989/335/292 730/377/299 +f 729/378/298 750/106/73 751/108/75 +f 991/337/294 990/336/293 730/379/299 +f 729/380/298 751/108/75 752/110/77 +f 992/338/295 991/337/294 730/381/299 +f 729/382/298 752/110/77 753/112/79 +f 993/339/296 992/338/295 730/383/299 +f 729/384/298 753/112/79 754/114/81 +f 994/340/297 993/339/296 730/385/299 +f 729/386/298 754/114/81 731/116/34 +f 971/341/274 994/340/297 730/387/299 + +v 37.80797195434570 671.23242187500000 0.00000000000000 +v 37.80797195434570 742.81103515625000 0.00000000000000 +v 47.07093048095703 672.45190429687500 0.00000000000000 +v 46.75530242919922 672.45190429687500 2.39742946624756 +v 45.82992935180664 672.45190429687500 4.63147830963135 +v 44.35787200927734 672.45190429687500 6.54989910125732 +v 42.43945312500000 672.45190429687500 8.02195549011230 +v 40.20540237426758 672.45190429687500 8.94732856750488 +v 37.80797195434570 672.45190429687500 9.26295661926270 +v 35.41054534912109 672.45190429687500 8.94732856750488 +v 33.17649459838867 672.45190429687500 8.02195549011230 +v 31.25807380676270 672.45190429687500 6.54989910125732 +v 29.78601837158203 672.45190429687500 4.63147830963135 +v 28.86064529418945 672.45190429687500 2.39742946624756 +v 28.54501724243164 672.45190429687500 0.00000000000000 +v 28.86064529418945 672.45190429687500 -2.39742946624756 +v 29.78601837158203 672.45190429687500 -4.63147830963135 +v 31.25807380676270 672.45190429687500 -6.54989910125732 +v 33.17649459838867 672.45190429687500 -8.02195549011230 +v 35.41054534912109 672.45190429687500 -8.94732856750488 +v 37.80797195434570 672.45190429687500 -9.26295661926270 +v 40.20540237426758 672.45190429687500 -8.94732856750488 +v 42.43945312500000 672.45190429687500 -8.02195549011230 +v 44.35787200927734 672.45190429687500 -6.54989910125732 +v 45.82992935180664 672.45190429687500 -4.63147830963135 +v 46.75530242919922 672.45190429687500 -2.39742946624756 +v 55.70263290405273 676.02728271484375 0.00000000000000 +v 55.09288406372070 676.02728271484375 4.63147830963135 +v 53.30520248413086 676.02728271484375 8.94732856750488 +v 50.46140670776367 676.02728271484375 12.65343379974365 +v 46.75530242919922 676.02728271484375 15.49722766876221 +v 42.43945312500000 676.02728271484375 17.28491210937500 +v 37.80797195434570 676.02728271484375 17.89465713500977 +v 33.17649459838867 676.02728271484375 17.28491210937500 +v 28.86064529418945 676.02728271484375 15.49722766876221 +v 25.15453910827637 676.02728271484375 12.65343379974365 +v 22.31074523925781 676.02728271484375 8.94732856750488 +v 20.52306175231934 676.02728271484375 4.63147830963135 +v 19.91331672668457 676.02728271484375 0.00000000000000 +v 20.52306175231934 676.02728271484375 -4.63147830963135 +v 22.31074523925781 676.02728271484375 -8.94732856750488 +v 25.15453910827637 676.02728271484375 -12.65343379974365 +v 28.86064529418945 676.02728271484375 -15.49722766876221 +v 33.17649459838867 676.02728271484375 -17.28491210937500 +v 37.80797195434570 676.02728271484375 -17.89465713500977 +v 42.43945312500000 676.02728271484375 -17.28491210937500 +v 46.75530242919922 676.02728271484375 -15.49722766876221 +v 50.46140670776367 676.02728271484375 -12.65343379974365 +v 53.30520248413086 676.02728271484375 -8.94732856750488 +v 55.09288406372070 676.02728271484375 -4.63147830963135 +v 63.11484146118164 681.71484375000000 0.00000000000000 +v 62.25252914428711 681.71484375000000 6.54989910125732 +v 59.72436523437500 681.71484375000000 12.65343379974365 +v 55.70263290405273 681.71484375000000 17.89465713500977 +v 50.46140670776367 681.71484375000000 21.91638946533203 +v 44.35787200927734 681.71484375000000 24.44455718994141 +v 37.80797195434570 681.71484375000000 25.30686759948730 +v 31.25807380676270 681.71484375000000 24.44455718994141 +v 25.15453910827637 681.71484375000000 21.91638946533203 +v 19.91331672668457 681.71484375000000 17.89465713500977 +v 15.89158344268799 681.71484375000000 12.65343379974365 +v 13.36341667175293 681.71484375000000 6.54989910125732 +v 12.50110626220703 681.71484375000000 0.00000000000000 +v 13.36341667175293 681.71484375000000 -6.54989910125732 +v 15.89158344268799 681.71484375000000 -12.65343379974365 +v 19.91331672668457 681.71484375000000 -17.89465713500977 +v 25.15453910827637 681.71484375000000 -21.91638946533203 +v 31.25807380676270 681.71484375000000 -24.44455718994141 +v 37.80797195434570 681.71484375000000 -25.30686759948730 +v 44.35787200927734 681.71484375000000 -24.44455718994141 +v 50.46140670776367 681.71484375000000 -21.91638946533203 +v 55.70263290405273 681.71484375000000 -17.89465713500977 +v 59.72436523437500 681.71484375000000 -12.65343379974365 +v 62.25252914428711 681.71484375000000 -6.54989910125732 +v 68.80242919921875 689.12707519531250 0.00000000000000 +v 67.74632263183594 689.12707519531250 8.02195549011230 +v 64.64996337890625 689.12707519531250 15.49722766876221 +v 59.72436523437500 689.12707519531250 21.91638946533203 +v 53.30520248413086 689.12707519531250 26.84198570251465 +v 45.82992935180664 689.12707519531250 29.93834495544434 +v 37.80797195434570 689.12707519531250 30.99445533752441 +v 29.78601837158203 689.12707519531250 29.93834495544434 +v 22.31074523925781 689.12707519531250 26.84198570251465 +v 15.89158344268799 689.12707519531250 21.91638946533203 +v 10.96598720550537 689.12707519531250 15.49722766876221 +v 7.86962795257568 689.12707519531250 8.02195549011230 +v 6.81351709365845 689.12707519531250 0.00000000000000 +v 7.86962795257568 689.12707519531250 -8.02195549011230 +v 10.96598720550537 689.12707519531250 -15.49722766876221 +v 15.89158344268799 689.12707519531250 -21.91638946533203 +v 22.31074523925781 689.12707519531250 -26.84198570251465 +v 29.78601837158203 689.12707519531250 -29.93834495544434 +v 37.80797195434570 689.12707519531250 -30.99445533752441 +v 45.82992935180664 689.12707519531250 -29.93834495544434 +v 53.30520248413086 689.12707519531250 -26.84198570251465 +v 59.72436523437500 689.12707519531250 -21.91638946533203 +v 64.64996337890625 689.12707519531250 -15.49722766876221 +v 67.74632263183594 689.12707519531250 -8.02195549011230 +v 72.37779998779297 697.75878906250000 0.00000000000000 +v 71.19985961914062 697.75878906250000 8.94732856750488 +v 67.74632263183594 697.75878906250000 17.28491210937500 +v 62.25252914428711 697.75878906250000 24.44455718994141 +v 55.09288406372070 697.75878906250000 29.93834495544434 +v 46.75530242919922 697.75878906250000 33.39188385009766 +v 37.80797195434570 697.75878906250000 34.56982421875000 +v 28.86064529418945 697.75878906250000 33.39188385009766 +v 20.52306175231934 697.75878906250000 29.93834495544434 +v 13.36341667175293 697.75878906250000 24.44455718994141 +v 7.86962795257568 697.75878906250000 17.28491210937500 +v 4.41608762741089 697.75878906250000 8.94732856750488 +v 3.23814964294434 697.75878906250000 0.00000000000000 +v 4.41608762741089 697.75878906250000 -8.94732856750488 +v 7.86962795257568 697.75878906250000 -17.28491210937500 +v 13.36341667175293 697.75878906250000 -24.44455718994141 +v 20.52306175231934 697.75878906250000 -29.93834495544434 +v 28.86064529418945 697.75878906250000 -33.39188385009766 +v 37.80797195434570 697.75878906250000 -34.56982421875000 +v 46.75530242919922 697.75878906250000 -33.39188385009766 +v 55.09288406372070 697.75878906250000 -29.93834495544434 +v 62.25252914428711 697.75878906250000 -24.44455718994141 +v 67.74632263183594 697.75878906250000 -17.28491210937500 +v 71.19985961914062 697.75878906250000 -8.94732856750488 +v 73.59729003906250 707.02172851562500 0.00000000000000 +v 72.37779998779297 707.02172851562500 9.26295661926270 +v 68.80242919921875 707.02172851562500 17.89465713500977 +v 63.11484146118164 707.02172851562500 25.30686759948730 +v 55.70263290405273 707.02172851562500 30.99445533752441 +v 47.07093048095703 707.02172851562500 34.56982421875000 +v 37.80797195434570 707.02172851562500 35.78931427001953 +v 28.54501724243164 707.02172851562500 34.56982421875000 +v 19.91331672668457 707.02172851562500 30.99445533752441 +v 12.50110626220703 707.02172851562500 25.30686759948730 +v 6.81351709365845 707.02172851562500 17.89465713500977 +v 3.23814964294434 707.02172851562500 9.26295661926270 +v 2.01865816116333 707.02172851562500 0.00000000000000 +v 3.23814964294434 707.02172851562500 -9.26295661926270 +v 6.81351709365845 707.02172851562500 -17.89465713500977 +v 12.50110626220703 707.02172851562500 -25.30686759948730 +v 19.91331672668457 707.02172851562500 -30.99445533752441 +v 28.54501724243164 707.02172851562500 -34.56982421875000 +v 37.80797195434570 707.02172851562500 -35.78931427001953 +v 47.07093048095703 707.02172851562500 -34.56982421875000 +v 55.70263290405273 707.02172851562500 -30.99445533752441 +v 63.11484146118164 707.02172851562500 -25.30686759948730 +v 68.80242919921875 707.02172851562500 -17.89465713500977 +v 72.37779998779297 707.02172851562500 -9.26295661926270 +v 72.37779998779297 716.28466796875000 0.00000000000000 +v 71.19985961914062 716.28466796875000 8.94732856750488 +v 67.74632263183594 716.28466796875000 17.28491210937500 +v 62.25252914428711 716.28466796875000 24.44455718994141 +v 55.09288406372070 716.28466796875000 29.93834495544434 +v 46.75530242919922 716.28466796875000 33.39188385009766 +v 37.80797195434570 716.28466796875000 34.56982421875000 +v 28.86064529418945 716.28466796875000 33.39188385009766 +v 20.52306175231934 716.28466796875000 29.93834495544434 +v 13.36341667175293 716.28466796875000 24.44455718994141 +v 7.86962795257568 716.28466796875000 17.28491210937500 +v 4.41608762741089 716.28466796875000 8.94732856750488 +v 3.23814964294434 716.28466796875000 0.00000000000000 +v 4.41608762741089 716.28466796875000 -8.94732856750488 +v 7.86962795257568 716.28466796875000 -17.28491210937500 +v 13.36341667175293 716.28466796875000 -24.44455718994141 +v 20.52306175231934 716.28466796875000 -29.93834495544434 +v 28.86064529418945 716.28466796875000 -33.39188385009766 +v 37.80797195434570 716.28466796875000 -34.56982421875000 +v 46.75530242919922 716.28466796875000 -33.39188385009766 +v 55.09288406372070 716.28466796875000 -29.93834495544434 +v 62.25252914428711 716.28466796875000 -24.44455718994141 +v 67.74632263183594 716.28466796875000 -17.28491210937500 +v 71.19985961914062 716.28466796875000 -8.94732856750488 +v 68.80242919921875 724.91638183593750 0.00000000000000 +v 67.74632263183594 724.91638183593750 8.02195549011230 +v 64.64996337890625 724.91638183593750 15.49722766876221 +v 59.72436523437500 724.91638183593750 21.91638946533203 +v 53.30520248413086 724.91638183593750 26.84198570251465 +v 45.82992935180664 724.91638183593750 29.93834495544434 +v 37.80797195434570 724.91638183593750 30.99445533752441 +v 29.78601837158203 724.91638183593750 29.93834495544434 +v 22.31074523925781 724.91638183593750 26.84198570251465 +v 15.89158344268799 724.91638183593750 21.91638946533203 +v 10.96598720550537 724.91638183593750 15.49722766876221 +v 7.86962795257568 724.91638183593750 8.02195549011230 +v 6.81351709365845 724.91638183593750 0.00000000000000 +v 7.86962795257568 724.91638183593750 -8.02195549011230 +v 10.96598720550537 724.91638183593750 -15.49722766876221 +v 15.89158344268799 724.91638183593750 -21.91638946533203 +v 22.31074523925781 724.91638183593750 -26.84198570251465 +v 29.78601837158203 724.91638183593750 -29.93834495544434 +v 37.80797195434570 724.91638183593750 -30.99445533752441 +v 45.82992935180664 724.91638183593750 -29.93834495544434 +v 53.30520248413086 724.91638183593750 -26.84198570251465 +v 59.72436523437500 724.91638183593750 -21.91638946533203 +v 64.64996337890625 724.91638183593750 -15.49722766876221 +v 67.74632263183594 724.91638183593750 -8.02195549011230 +v 63.11484146118164 732.32861328125000 0.00000000000000 +v 62.25252914428711 732.32861328125000 6.54989910125732 +v 59.72436523437500 732.32861328125000 12.65343379974365 +v 55.70263290405273 732.32861328125000 17.89465713500977 +v 50.46140670776367 732.32861328125000 21.91638946533203 +v 44.35787200927734 732.32861328125000 24.44455718994141 +v 37.80797195434570 732.32861328125000 25.30686759948730 +v 31.25807380676270 732.32861328125000 24.44455718994141 +v 25.15453910827637 732.32861328125000 21.91638946533203 +v 19.91331672668457 732.32861328125000 17.89465713500977 +v 15.89158344268799 732.32861328125000 12.65343379974365 +v 13.36341667175293 732.32861328125000 6.54989910125732 +v 12.50110626220703 732.32861328125000 0.00000000000000 +v 13.36341667175293 732.32861328125000 -6.54989910125732 +v 15.89158344268799 732.32861328125000 -12.65343379974365 +v 19.91331672668457 732.32861328125000 -17.89465713500977 +v 25.15453910827637 732.32861328125000 -21.91638946533203 +v 31.25807380676270 732.32861328125000 -24.44455718994141 +v 37.80797195434570 732.32861328125000 -25.30686759948730 +v 44.35787200927734 732.32861328125000 -24.44455718994141 +v 50.46140670776367 732.32861328125000 -21.91638946533203 +v 55.70263290405273 732.32861328125000 -17.89465713500977 +v 59.72436523437500 732.32861328125000 -12.65343379974365 +v 62.25252914428711 732.32861328125000 -6.54989910125732 +v 55.70263290405273 738.01617431640625 0.00000000000000 +v 55.09288406372070 738.01617431640625 4.63147830963135 +v 53.30520248413086 738.01617431640625 8.94732856750488 +v 50.46140670776367 738.01617431640625 12.65343379974365 +v 46.75530242919922 738.01617431640625 15.49722766876221 +v 42.43945312500000 738.01617431640625 17.28491210937500 +v 37.80797195434570 738.01617431640625 17.89465713500977 +v 33.17649459838867 738.01617431640625 17.28491210937500 +v 28.86064529418945 738.01617431640625 15.49722766876221 +v 25.15453910827637 738.01617431640625 12.65343379974365 +v 22.31074523925781 738.01617431640625 8.94732856750488 +v 20.52306175231934 738.01617431640625 4.63147830963135 +v 19.91331672668457 738.01617431640625 0.00000000000000 +v 20.52306175231934 738.01617431640625 -4.63147830963135 +v 22.31074523925781 738.01617431640625 -8.94732856750488 +v 25.15453910827637 738.01617431640625 -12.65343379974365 +v 28.86064529418945 738.01617431640625 -15.49722766876221 +v 33.17649459838867 738.01617431640625 -17.28491210937500 +v 37.80797195434570 738.01617431640625 -17.89465713500977 +v 42.43945312500000 738.01617431640625 -17.28491210937500 +v 46.75530242919922 738.01617431640625 -15.49722766876221 +v 50.46140670776367 738.01617431640625 -12.65343379974365 +v 53.30520248413086 738.01617431640625 -8.94732856750488 +v 55.09288406372070 738.01617431640625 -4.63147830963135 +v 47.07093048095703 741.59155273437500 0.00000000000000 +v 46.75530242919922 741.59155273437500 2.39742946624756 +v 45.82992935180664 741.59155273437500 4.63147830963135 +v 44.35787200927734 741.59155273437500 6.54989910125732 +v 42.43945312500000 741.59155273437500 8.02195549011230 +v 40.20540237426758 741.59155273437500 8.94732856750488 +v 37.80797195434570 741.59155273437500 9.26295661926270 +v 35.41054534912109 741.59155273437500 8.94732856750488 +v 33.17649459838867 741.59155273437500 8.02195549011230 +v 31.25807380676270 741.59155273437500 6.54989910125732 +v 29.78601837158203 741.59155273437500 4.63147830963135 +v 28.86064529418945 741.59155273437500 2.39742946624756 +v 28.54501724243164 741.59155273437500 0.00000000000000 +v 28.86064529418945 741.59155273437500 -2.39742946624756 +v 29.78601837158203 741.59155273437500 -4.63147830963135 +v 31.25807380676270 741.59155273437500 -6.54989910125732 +v 33.17649459838867 741.59155273437500 -8.02195549011230 +v 35.41054534912109 741.59155273437500 -8.94732856750488 +v 37.80797195434570 741.59155273437500 -9.26295661926270 +v 40.20540237426758 741.59155273437500 -8.94732856750488 +v 42.43945312500000 741.59155273437500 -8.02195549011230 +v 44.35787200927734 741.59155273437500 -6.54989910125732 +v 45.82992935180664 741.59155273437500 -4.63147830963135 +v 46.75530242919922 741.59155273437500 -2.39742946624756 +# 266 vertices + +# 0 normal + +# 0 texture coordinate + +g 球体 +usemtl 材质.1 +f 997/67/34 1021/68/35 1022/69/36 998/70/37 +f 998/70/37 1022/69/36 1023/71/38 999/72/39 +f 999/72/39 1023/71/38 1024/73/40 1000/74/41 +f 1000/74/41 1024/73/40 1025/75/42 1001/76/43 +f 1001/76/43 1025/75/42 1026/77/44 1002/78/45 +f 1002/78/45 1026/77/44 1027/79/46 1003/80/47 +f 1003/80/47 1027/79/46 1028/81/48 1004/82/49 +f 1004/82/49 1028/81/48 1029/83/50 1005/84/51 +f 1005/84/51 1029/83/50 1030/85/52 1006/86/53 +f 1006/86/53 1030/85/52 1031/87/54 1007/88/55 +f 1007/88/55 1031/87/54 1032/89/56 1008/90/57 +f 1008/90/57 1032/89/56 1033/91/58 1009/92/59 +f 1009/92/59 1033/91/58 1034/93/60 1010/94/61 +f 1010/94/61 1034/93/60 1035/95/62 1011/96/63 +f 1011/96/63 1035/95/62 1036/97/64 1012/98/65 +f 1012/98/65 1036/97/64 1037/99/66 1013/100/67 +f 1013/100/67 1037/99/66 1038/101/68 1014/102/69 +f 1014/102/69 1038/101/68 1039/103/70 1015/104/71 +f 1015/104/71 1039/103/70 1040/105/72 1016/106/73 +f 1016/106/73 1040/105/72 1041/107/74 1017/108/75 +f 1017/108/75 1041/107/74 1042/109/76 1018/110/77 +f 1018/110/77 1042/109/76 1043/111/78 1019/112/79 +f 1019/112/79 1043/111/78 1044/113/80 1020/114/81 +f 1020/114/81 1044/113/80 1021/115/35 997/116/34 +f 1021/68/35 1045/117/82 1046/118/83 1022/69/36 +f 1022/69/36 1046/118/83 1047/119/84 1023/71/38 +f 1023/71/38 1047/119/84 1048/120/85 1024/73/40 +f 1024/73/40 1048/120/85 1049/121/86 1025/75/42 +f 1025/75/42 1049/121/86 1050/122/87 1026/77/44 +f 1026/77/44 1050/122/87 1051/123/88 1027/79/46 +f 1027/79/46 1051/123/88 1052/124/89 1028/81/48 +f 1028/81/48 1052/124/89 1053/125/90 1029/83/50 +f 1029/83/50 1053/125/90 1054/126/91 1030/85/52 +f 1030/85/52 1054/126/91 1055/127/92 1031/87/54 +f 1031/87/54 1055/127/92 1056/128/93 1032/89/56 +f 1032/89/56 1056/128/93 1057/129/94 1033/91/58 +f 1033/91/58 1057/129/94 1058/130/95 1034/93/60 +f 1034/93/60 1058/130/95 1059/131/96 1035/95/62 +f 1035/95/62 1059/131/96 1060/132/97 1036/97/64 +f 1036/97/64 1060/132/97 1061/133/98 1037/99/66 +f 1037/99/66 1061/133/98 1062/134/99 1038/101/68 +f 1038/101/68 1062/134/99 1063/135/100 1039/103/70 +f 1039/103/70 1063/135/100 1064/136/101 1040/105/72 +f 1040/105/72 1064/136/101 1065/137/102 1041/107/74 +f 1041/107/74 1065/137/102 1066/138/103 1042/109/76 +f 1042/109/76 1066/138/103 1067/139/104 1043/111/78 +f 1043/111/78 1067/139/104 1068/140/105 1044/113/80 +f 1044/113/80 1068/140/105 1045/141/82 1021/115/35 +f 1045/117/82 1069/142/106 1070/143/107 1046/118/83 +f 1046/118/83 1070/143/107 1071/144/108 1047/119/84 +f 1047/119/84 1071/144/108 1072/145/109 1048/120/85 +f 1048/120/85 1072/145/109 1073/146/110 1049/121/86 +f 1049/121/86 1073/146/110 1074/147/111 1050/122/87 +f 1050/122/87 1074/147/111 1075/148/112 1051/123/88 +f 1051/123/88 1075/148/112 1076/149/113 1052/124/89 +f 1052/124/89 1076/149/113 1077/150/114 1053/125/90 +f 1053/125/90 1077/150/114 1078/151/115 1054/126/91 +f 1054/126/91 1078/151/115 1079/152/116 1055/127/92 +f 1055/127/92 1079/152/116 1080/153/117 1056/128/93 +f 1056/128/93 1080/153/117 1081/154/118 1057/129/94 +f 1057/129/94 1081/154/118 1082/155/119 1058/130/95 +f 1058/130/95 1082/155/119 1083/156/120 1059/131/96 +f 1059/131/96 1083/156/120 1084/157/121 1060/132/97 +f 1060/132/97 1084/157/121 1085/158/122 1061/133/98 +f 1061/133/98 1085/158/122 1086/159/123 1062/134/99 +f 1062/134/99 1086/159/123 1087/160/124 1063/135/100 +f 1063/135/100 1087/160/124 1088/161/125 1064/136/101 +f 1064/136/101 1088/161/125 1089/162/126 1065/137/102 +f 1065/137/102 1089/162/126 1090/163/127 1066/138/103 +f 1066/138/103 1090/163/127 1091/164/128 1067/139/104 +f 1067/139/104 1091/164/128 1092/165/129 1068/140/105 +f 1068/140/105 1092/165/129 1069/166/106 1045/141/82 +f 1069/142/106 1093/167/130 1094/168/131 1070/143/107 +f 1070/143/107 1094/168/131 1095/169/132 1071/144/108 +f 1071/144/108 1095/169/132 1096/170/133 1072/145/109 +f 1072/145/109 1096/170/133 1097/171/134 1073/146/110 +f 1073/146/110 1097/171/134 1098/172/135 1074/147/111 +f 1074/147/111 1098/172/135 1099/173/136 1075/148/112 +f 1075/148/112 1099/173/136 1100/174/137 1076/149/113 +f 1076/149/113 1100/174/137 1101/175/138 1077/150/114 +f 1077/150/114 1101/175/138 1102/176/139 1078/151/115 +f 1078/151/115 1102/176/139 1103/177/140 1079/152/116 +f 1079/152/116 1103/177/140 1104/178/141 1080/153/117 +f 1080/153/117 1104/178/141 1105/179/142 1081/154/118 +f 1081/154/118 1105/179/142 1106/180/143 1082/155/119 +f 1082/155/119 1106/180/143 1107/181/144 1083/156/120 +f 1083/156/120 1107/181/144 1108/182/145 1084/157/121 +f 1084/157/121 1108/182/145 1109/183/146 1085/158/122 +f 1085/158/122 1109/183/146 1110/184/147 1086/159/123 +f 1086/159/123 1110/184/147 1111/185/148 1087/160/124 +f 1087/160/124 1111/185/148 1112/186/149 1088/161/125 +f 1088/161/125 1112/186/149 1113/187/150 1089/162/126 +f 1089/162/126 1113/187/150 1114/188/151 1090/163/127 +f 1090/163/127 1114/188/151 1115/189/152 1091/164/128 +f 1091/164/128 1115/189/152 1116/190/153 1092/165/129 +f 1092/165/129 1116/190/153 1093/191/130 1069/166/106 +f 1093/167/130 1117/192/154 1118/193/155 1094/168/131 +f 1094/168/131 1118/193/155 1119/194/156 1095/169/132 +f 1095/169/132 1119/194/156 1120/195/157 1096/170/133 +f 1096/170/133 1120/195/157 1121/196/158 1097/171/134 +f 1097/171/134 1121/196/158 1122/197/159 1098/172/135 +f 1098/172/135 1122/197/159 1123/198/160 1099/173/136 +f 1099/173/136 1123/198/160 1124/199/161 1100/174/137 +f 1100/174/137 1124/199/161 1125/200/162 1101/175/138 +f 1101/175/138 1125/200/162 1126/201/163 1102/176/139 +f 1102/176/139 1126/201/163 1127/202/164 1103/177/140 +f 1103/177/140 1127/202/164 1128/203/165 1104/178/141 +f 1104/178/141 1128/203/165 1129/204/166 1105/179/142 +f 1105/179/142 1129/204/166 1130/205/167 1106/180/143 +f 1106/180/143 1130/205/167 1131/206/168 1107/181/144 +f 1107/181/144 1131/206/168 1132/207/169 1108/182/145 +f 1108/182/145 1132/207/169 1133/208/170 1109/183/146 +f 1109/183/146 1133/208/170 1134/209/171 1110/184/147 +f 1110/184/147 1134/209/171 1135/210/172 1111/185/148 +f 1111/185/148 1135/210/172 1136/211/173 1112/186/149 +f 1112/186/149 1136/211/173 1137/212/174 1113/187/150 +f 1113/187/150 1137/212/174 1138/213/175 1114/188/151 +f 1114/188/151 1138/213/175 1139/214/176 1115/189/152 +f 1115/189/152 1139/214/176 1140/215/177 1116/190/153 +f 1116/190/153 1140/215/177 1117/216/154 1093/191/130 +f 1117/192/154 1141/217/178 1142/218/179 1118/193/155 +f 1118/193/155 1142/218/179 1143/219/180 1119/194/156 +f 1119/194/156 1143/219/180 1144/220/181 1120/195/157 +f 1120/195/157 1144/220/181 1145/221/182 1121/196/158 +f 1121/196/158 1145/221/182 1146/222/183 1122/197/159 +f 1122/197/159 1146/222/183 1147/223/184 1123/198/160 +f 1123/198/160 1147/223/184 1148/224/185 1124/199/161 +f 1124/199/161 1148/224/185 1149/225/186 1125/200/162 +f 1125/200/162 1149/225/186 1150/226/187 1126/201/163 +f 1126/201/163 1150/226/187 1151/227/188 1127/202/164 +f 1127/202/164 1151/227/188 1152/228/189 1128/203/165 +f 1128/203/165 1152/228/189 1153/229/190 1129/204/166 +f 1129/204/166 1153/229/190 1154/230/191 1130/205/167 +f 1130/205/167 1154/230/191 1155/231/192 1131/206/168 +f 1131/206/168 1155/231/192 1156/232/193 1132/207/169 +f 1132/207/169 1156/232/193 1157/233/194 1133/208/170 +f 1133/208/170 1157/233/194 1158/234/195 1134/209/171 +f 1134/209/171 1158/234/195 1159/235/196 1135/210/172 +f 1135/210/172 1159/235/196 1160/236/197 1136/211/173 +f 1136/211/173 1160/236/197 1161/237/198 1137/212/174 +f 1137/212/174 1161/237/198 1162/238/199 1138/213/175 +f 1138/213/175 1162/238/199 1163/239/200 1139/214/176 +f 1139/214/176 1163/239/200 1164/240/201 1140/215/177 +f 1140/215/177 1164/240/201 1141/241/178 1117/216/154 +f 1141/217/178 1165/242/202 1166/243/203 1142/218/179 +f 1142/218/179 1166/243/203 1167/244/204 1143/219/180 +f 1143/219/180 1167/244/204 1168/245/205 1144/220/181 +f 1144/220/181 1168/245/205 1169/246/206 1145/221/182 +f 1145/221/182 1169/246/206 1170/247/207 1146/222/183 +f 1146/222/183 1170/247/207 1171/248/208 1147/223/184 +f 1147/223/184 1171/248/208 1172/249/209 1148/224/185 +f 1148/224/185 1172/249/209 1173/250/210 1149/225/186 +f 1149/225/186 1173/250/210 1174/251/211 1150/226/187 +f 1150/226/187 1174/251/211 1175/252/212 1151/227/188 +f 1151/227/188 1175/252/212 1176/253/213 1152/228/189 +f 1152/228/189 1176/253/213 1177/254/214 1153/229/190 +f 1153/229/190 1177/254/214 1178/255/215 1154/230/191 +f 1154/230/191 1178/255/215 1179/256/216 1155/231/192 +f 1155/231/192 1179/256/216 1180/257/217 1156/232/193 +f 1156/232/193 1180/257/217 1181/258/218 1157/233/194 +f 1157/233/194 1181/258/218 1182/259/219 1158/234/195 +f 1158/234/195 1182/259/219 1183/260/220 1159/235/196 +f 1159/235/196 1183/260/220 1184/261/221 1160/236/197 +f 1160/236/197 1184/261/221 1185/262/222 1161/237/198 +f 1161/237/198 1185/262/222 1186/263/223 1162/238/199 +f 1162/238/199 1186/263/223 1187/264/224 1163/239/200 +f 1163/239/200 1187/264/224 1188/265/225 1164/240/201 +f 1164/240/201 1188/265/225 1165/266/202 1141/241/178 +f 1165/242/202 1189/267/226 1190/268/227 1166/243/203 +f 1166/243/203 1190/268/227 1191/269/228 1167/244/204 +f 1167/244/204 1191/269/228 1192/270/229 1168/245/205 +f 1168/245/205 1192/270/229 1193/271/230 1169/246/206 +f 1169/246/206 1193/271/230 1194/272/231 1170/247/207 +f 1170/247/207 1194/272/231 1195/273/232 1171/248/208 +f 1171/248/208 1195/273/232 1196/274/233 1172/249/209 +f 1172/249/209 1196/274/233 1197/275/234 1173/250/210 +f 1173/250/210 1197/275/234 1198/276/235 1174/251/211 +f 1174/251/211 1198/276/235 1199/277/236 1175/252/212 +f 1175/252/212 1199/277/236 1200/278/237 1176/253/213 +f 1176/253/213 1200/278/237 1201/279/238 1177/254/214 +f 1177/254/214 1201/279/238 1202/280/239 1178/255/215 +f 1178/255/215 1202/280/239 1203/281/240 1179/256/216 +f 1179/256/216 1203/281/240 1204/282/241 1180/257/217 +f 1180/257/217 1204/282/241 1205/283/242 1181/258/218 +f 1181/258/218 1205/283/242 1206/284/243 1182/259/219 +f 1182/259/219 1206/284/243 1207/285/244 1183/260/220 +f 1183/260/220 1207/285/244 1208/286/245 1184/261/221 +f 1184/261/221 1208/286/245 1209/287/246 1185/262/222 +f 1185/262/222 1209/287/246 1210/288/247 1186/263/223 +f 1186/263/223 1210/288/247 1211/289/248 1187/264/224 +f 1187/264/224 1211/289/248 1212/290/249 1188/265/225 +f 1188/265/225 1212/290/249 1189/291/226 1165/266/202 +f 1189/267/226 1213/292/250 1214/293/251 1190/268/227 +f 1190/268/227 1214/293/251 1215/294/252 1191/269/228 +f 1191/269/228 1215/294/252 1216/295/253 1192/270/229 +f 1192/270/229 1216/295/253 1217/296/254 1193/271/230 +f 1193/271/230 1217/296/254 1218/297/255 1194/272/231 +f 1194/272/231 1218/297/255 1219/298/256 1195/273/232 +f 1195/273/232 1219/298/256 1220/299/257 1196/274/233 +f 1196/274/233 1220/299/257 1221/300/258 1197/275/234 +f 1197/275/234 1221/300/258 1222/301/259 1198/276/235 +f 1198/276/235 1222/301/259 1223/302/260 1199/277/236 +f 1199/277/236 1223/302/260 1224/303/261 1200/278/237 +f 1200/278/237 1224/303/261 1225/304/262 1201/279/238 +f 1201/279/238 1225/304/262 1226/305/263 1202/280/239 +f 1202/280/239 1226/305/263 1227/306/264 1203/281/240 +f 1203/281/240 1227/306/264 1228/307/265 1204/282/241 +f 1204/282/241 1228/307/265 1229/308/266 1205/283/242 +f 1205/283/242 1229/308/266 1230/309/267 1206/284/243 +f 1206/284/243 1230/309/267 1231/310/268 1207/285/244 +f 1207/285/244 1231/310/268 1232/311/269 1208/286/245 +f 1208/286/245 1232/311/269 1233/312/270 1209/287/246 +f 1209/287/246 1233/312/270 1234/313/271 1210/288/247 +f 1210/288/247 1234/313/271 1235/314/272 1211/289/248 +f 1211/289/248 1235/314/272 1236/315/273 1212/290/249 +f 1212/290/249 1236/315/273 1213/316/250 1189/291/226 +f 1213/292/250 1237/317/274 1238/318/275 1214/293/251 +f 1214/293/251 1238/318/275 1239/319/276 1215/294/252 +f 1215/294/252 1239/319/276 1240/320/277 1216/295/253 +f 1216/295/253 1240/320/277 1241/321/278 1217/296/254 +f 1217/296/254 1241/321/278 1242/322/279 1218/297/255 +f 1218/297/255 1242/322/279 1243/323/280 1219/298/256 +f 1219/298/256 1243/323/280 1244/324/281 1220/299/257 +f 1220/299/257 1244/324/281 1245/325/282 1221/300/258 +f 1221/300/258 1245/325/282 1246/326/283 1222/301/259 +f 1222/301/259 1246/326/283 1247/327/284 1223/302/260 +f 1223/302/260 1247/327/284 1248/328/285 1224/303/261 +f 1224/303/261 1248/328/285 1249/329/286 1225/304/262 +f 1225/304/262 1249/329/286 1250/330/287 1226/305/263 +f 1226/305/263 1250/330/287 1251/331/288 1227/306/264 +f 1227/306/264 1251/331/288 1252/332/289 1228/307/265 +f 1228/307/265 1252/332/289 1253/333/290 1229/308/266 +f 1229/308/266 1253/333/290 1254/334/291 1230/309/267 +f 1230/309/267 1254/334/291 1255/335/292 1231/310/268 +f 1231/310/268 1255/335/292 1256/336/293 1232/311/269 +f 1232/311/269 1256/336/293 1257/337/294 1233/312/270 +f 1233/312/270 1257/337/294 1258/338/295 1234/313/271 +f 1234/313/271 1258/338/295 1259/339/296 1235/314/272 +f 1235/314/272 1259/339/296 1260/340/297 1236/315/273 +f 1236/315/273 1260/340/297 1237/341/274 1213/316/250 +f 995/4/298 997/67/34 998/70/37 +f 1238/318/275 1237/317/274 996/1/299 +f 995/342/298 998/70/37 999/72/39 +f 1239/319/276 1238/318/275 996/343/299 +f 995/344/298 999/72/39 1000/74/41 +f 1240/320/277 1239/319/276 996/345/299 +f 995/346/298 1000/74/41 1001/76/43 +f 1241/321/278 1240/320/277 996/347/299 +f 995/348/298 1001/76/43 1002/78/45 +f 1242/322/279 1241/321/278 996/349/299 +f 995/350/298 1002/78/45 1003/80/47 +f 1243/323/280 1242/322/279 996/351/299 +f 995/352/298 1003/80/47 1004/82/49 +f 1244/324/281 1243/323/280 996/353/299 +f 995/354/298 1004/82/49 1005/84/51 +f 1245/325/282 1244/324/281 996/355/299 +f 995/356/298 1005/84/51 1006/86/53 +f 1246/326/283 1245/325/282 996/357/299 +f 995/358/298 1006/86/53 1007/88/55 +f 1247/327/284 1246/326/283 996/359/299 +f 995/360/298 1007/88/55 1008/90/57 +f 1248/328/285 1247/327/284 996/361/299 +f 995/362/298 1008/90/57 1009/92/59 +f 1249/329/286 1248/328/285 996/363/299 +f 995/364/298 1009/92/59 1010/94/61 +f 1250/330/287 1249/329/286 996/365/299 +f 995/366/298 1010/94/61 1011/96/63 +f 1251/331/288 1250/330/287 996/367/299 +f 995/368/298 1011/96/63 1012/98/65 +f 1252/332/289 1251/331/288 996/369/299 +f 995/370/298 1012/98/65 1013/100/67 +f 1253/333/290 1252/332/289 996/371/299 +f 995/372/298 1013/100/67 1014/102/69 +f 1254/334/291 1253/333/290 996/373/299 +f 995/374/298 1014/102/69 1015/104/71 +f 1255/335/292 1254/334/291 996/375/299 +f 995/376/298 1015/104/71 1016/106/73 +f 1256/336/293 1255/335/292 996/377/299 +f 995/378/298 1016/106/73 1017/108/75 +f 1257/337/294 1256/336/293 996/379/299 +f 995/380/298 1017/108/75 1018/110/77 +f 1258/338/295 1257/337/294 996/381/299 +f 995/382/298 1018/110/77 1019/112/79 +f 1259/339/296 1258/338/295 996/383/299 +f 995/384/298 1019/112/79 1020/114/81 +f 1260/340/297 1259/339/296 996/385/299 +f 995/386/298 1020/114/81 997/116/34 +f 1237/341/274 1260/340/297 996/387/299 + +v 10.00000000000000 3.03830289840698 0.00000000000000 +v 10.00000000000000 513.01434326171875 0.00000000000000 +v 26.35600280761719 3.03830289840698 0.00000000000000 +v 26.35600280761719 513.01434326171875 0.00000000000000 +v 26.10751914978027 3.03830289840698 2.84019017219543 +v 26.10751914978027 513.01434326171875 2.84019017219543 +v 25.36961555480957 3.03830289840698 5.59408235549927 +v 25.36961555480957 513.01434326171875 5.59408235549927 +v 24.16471290588379 3.03830289840698 8.17800140380859 +v 24.16471290588379 513.01434326171875 8.17800140380859 +v 22.52942466735840 3.03830289840698 10.51343631744385 +v 22.52942466735840 513.01434326171875 10.51343631744385 +v 20.51343536376953 3.03830289840698 12.52942466735840 +v 20.51343536376953 513.01434326171875 12.52942466735840 +v 18.17800140380859 3.03830289840698 14.16471385955811 +v 18.17800140380859 513.01434326171875 14.16471385955811 +v 15.59408283233643 3.03830289840698 15.36961460113525 +v 15.59408283233643 513.01434326171875 15.36961460113525 +v 12.84018993377686 3.03830289840698 16.10751914978027 +v 12.84018993377686 513.01434326171875 16.10751914978027 +v 10.00000000000000 3.03830289840698 16.35600280761719 +v 10.00000000000000 513.01434326171875 16.35600280761719 +v 7.15981006622314 3.03830289840698 16.10751914978027 +v 7.15981006622314 513.01434326171875 16.10751914978027 +v 4.40591764450073 3.03830289840698 15.36961460113525 +v 4.40591764450073 513.01434326171875 15.36961460113525 +v 1.82199859619141 3.03830289840698 14.16471385955811 +v 1.82199859619141 513.01434326171875 14.16471385955811 +v -0.51343590021133 3.03830289840698 12.52942466735840 +v -0.51343590021133 513.01434326171875 12.52942466735840 +v -2.52942490577698 3.03830289840698 10.51343631744385 +v -2.52942490577698 513.01434326171875 10.51343631744385 +v -4.16471385955811 3.03830289840698 8.17800140380859 +v -4.16471385955811 513.01434326171875 8.17800140380859 +v -5.36961507797241 3.03830289840698 5.59408235549927 +v -5.36961507797241 513.01434326171875 5.59408235549927 +v -6.10751819610596 3.03830289840698 2.84019017219543 +v -6.10751819610596 513.01434326171875 2.84019017219543 +v -6.35600280761719 3.03830289840698 0.00000000000000 +v -6.35600280761719 513.01434326171875 0.00000000000000 +v -6.10751819610596 3.03830289840698 -2.84019017219543 +v -6.10751819610596 513.01434326171875 -2.84019017219543 +v -5.36961507797241 3.03830289840698 -5.59408235549927 +v -5.36961507797241 513.01434326171875 -5.59408235549927 +v -4.16471385955811 3.03830289840698 -8.17800140380859 +v -4.16471385955811 513.01434326171875 -8.17800140380859 +v -2.52942490577698 3.03830289840698 -10.51343631744385 +v -2.52942490577698 513.01434326171875 -10.51343631744385 +v -0.51343590021133 3.03830289840698 -12.52942466735840 +v -0.51343590021133 513.01434326171875 -12.52942466735840 +v 1.82199859619141 3.03830289840698 -14.16471385955811 +v 1.82199859619141 513.01434326171875 -14.16471385955811 +v 4.40591764450073 3.03830289840698 -15.36961460113525 +v 4.40591764450073 513.01434326171875 -15.36961460113525 +v 7.15981006622314 3.03830289840698 -16.10751914978027 +v 7.15981006622314 513.01434326171875 -16.10751914978027 +v 10.00000000000000 3.03830289840698 -16.35600280761719 +v 10.00000000000000 513.01434326171875 -16.35600280761719 +v 12.84018993377686 3.03830289840698 -16.10751914978027 +v 12.84018993377686 513.01434326171875 -16.10751914978027 +v 15.59408283233643 3.03830289840698 -15.36961460113525 +v 15.59408283233643 513.01434326171875 -15.36961460113525 +v 18.17800140380859 3.03830289840698 -14.16471385955811 +v 18.17800140380859 513.01434326171875 -14.16471385955811 +v 20.51343536376953 3.03830289840698 -12.52942466735840 +v 20.51343536376953 513.01434326171875 -12.52942466735840 +v 22.52942466735840 3.03830289840698 -10.51343631744385 +v 22.52942466735840 513.01434326171875 -10.51343631744385 +v 24.16471290588379 3.03830289840698 -8.17800140380859 +v 24.16471290588379 513.01434326171875 -8.17800140380859 +v 25.36961555480957 3.03830289840698 -5.59408235549927 +v 25.36961555480957 513.01434326171875 -5.59408235549927 +v 26.10751914978027 3.03830289840698 -2.84019017219543 +v 26.10751914978027 513.01434326171875 -2.84019017219543 +# 74 vertices + +vn 0.98481088876724 0.00000000000000 0.17363022267818 +vn 0.93969851732254 0.00000000000000 0.34200400114059 +vn 0.76604211330414 0.00000000000000 0.64279037714005 +vn 0.64279037714005 0.00000000000000 0.76604211330414 +vn 0.34200400114059 0.00000000000000 0.93969851732254 +vn 0.17363022267818 0.00000000000000 0.98481088876724 +vn -0.17363022267818 0.00000000000000 0.98481088876724 +vn -0.34200400114059 0.00000000000000 0.93969851732254 +vn -0.64279037714005 0.00000000000000 0.76604211330414 +vn -0.76604211330414 0.00000000000000 0.64279037714005 +vn -0.93969851732254 0.00000000000000 0.34200400114059 +vn -0.98481088876724 0.00000000000000 0.17363022267818 +vn -0.98481088876724 0.00000000000000 -0.17363022267818 +vn -0.93969851732254 0.00000000000000 -0.34200400114059 +vn -0.76604211330414 0.00000000000000 -0.64279037714005 +vn -0.64279037714005 0.00000000000000 -0.76604211330414 +vn -0.34200400114059 0.00000000000000 -0.93969851732254 +vn -0.17363022267818 0.00000000000000 -0.98481088876724 +vn 0.17363022267818 0.00000000000000 -0.98481088876724 +vn 0.34200400114059 0.00000000000000 -0.93969851732254 +vn 0.64279037714005 0.00000000000000 -0.76604211330414 +vn 0.76604211330414 0.00000000000000 -0.64279037714005 +vn 0.93969851732254 0.00000000000000 -0.34200400114059 +vn 0.98481088876724 0.00000000000000 -0.17363022267818 +# 24 normals + +vt 0.00759612349793 0.58682411909103 0.00000000000000 +vt 0.02777777798474 1.00000000000000 0.00000000000000 +vt 0.02777777798474 0.00000000000000 0.00000000000000 +vt 0.99240386486053 0.58682411909103 0.00000000000000 +vt 0.03015368990600 0.67101007699966 0.00000000000000 +vt 0.05555555596948 1.00000000000000 0.00000000000000 +vt 0.05555555596948 0.00000000000000 0.00000000000000 +vt 0.96984630823135 0.67101007699966 0.00000000000000 +vt 0.06698729842901 0.75000000000000 0.00000000000000 +vt 0.93301272392273 0.75000000000000 0.00000000000000 +vt 0.11697778105736 0.82139384746552 0.00000000000000 +vt 0.11111111193895 1.00000000000000 0.00000000000000 +vt 0.11111111193895 0.00000000000000 0.00000000000000 +vt 0.88302224874496 0.82139384746552 0.00000000000000 +vt 0.17860619723797 0.88302218914032 0.00000000000000 +vt 0.13888889551163 1.00000000000000 0.00000000000000 +vt 0.13888889551163 0.00000000000000 0.00000000000000 +vt 0.82139378786087 0.88302218914032 0.00000000000000 +vt 0.25000000000000 0.93301272392273 0.00000000000000 +vt 0.75000000000000 0.93301272392273 0.00000000000000 +vt 0.32898992300034 0.96984630823135 0.00000000000000 +vt 0.19444444775581 1.00000000000000 0.00000000000000 +vt 0.19444444775581 0.00000000000000 0.00000000000000 +vt 0.67101007699966 0.96984630823135 0.00000000000000 +vt 0.41317591071129 0.99240386486053 0.00000000000000 +vt 0.22222222387791 1.00000000000000 0.00000000000000 +vt 0.22222222387791 0.00000000000000 0.00000000000000 +vt 0.58682405948639 0.99240386486053 0.00000000000000 +vt 0.27777779102325 1.00000000000000 0.00000000000000 +vt 0.27777779102325 0.00000000000000 0.00000000000000 +vt 0.30555555224419 1.00000000000000 0.00000000000000 +vt 0.30555555224419 0.00000000000000 0.00000000000000 +vt 0.36111110448837 1.00000000000000 0.00000000000000 +vt 0.36111110448837 0.00000000000000 0.00000000000000 +vt 0.38888889551163 1.00000000000000 0.00000000000000 +vt 0.38888889551163 0.00000000000000 0.00000000000000 +vt 0.44444444775581 1.00000000000000 0.00000000000000 +vt 0.44444444775581 0.00000000000000 0.00000000000000 +vt 0.47222220897675 1.00000000000000 0.00000000000000 +vt 0.47222220897675 0.00000000000000 0.00000000000000 +vt 0.99240386486053 0.41317594051361 0.00000000000000 +vt 0.52777779102325 1.00000000000000 0.00000000000000 +vt 0.52777779102325 0.00000000000000 0.00000000000000 +vt 0.00759612349793 0.41317594051361 0.00000000000000 +vt 0.96984630823135 0.32898998260498 0.00000000000000 +vt 0.55555558204651 1.00000000000000 0.00000000000000 +vt 0.55555558204651 0.00000000000000 0.00000000000000 +vt 0.03015368990600 0.32898998260498 0.00000000000000 +vt 0.93301272392273 0.25000000000000 0.00000000000000 +vt 0.06698729842901 0.25000000000000 0.00000000000000 +vt 0.88302224874496 0.17860627174377 0.00000000000000 +vt 0.61111110448837 1.00000000000000 0.00000000000000 +vt 0.61111110448837 0.00000000000000 0.00000000000000 +vt 0.11697778105736 0.17860627174377 0.00000000000000 +vt 0.82139378786087 0.11697781085968 0.00000000000000 +vt 0.63888889551163 1.00000000000000 0.00000000000000 +vt 0.63888889551163 0.00000000000000 0.00000000000000 +vt 0.17860619723797 0.11697781085968 0.00000000000000 +vt 0.75000000000000 0.06698727607727 0.00000000000000 +vt 0.25000000000000 0.06698727607727 0.00000000000000 +vt 0.67101007699966 0.03015375137329 0.00000000000000 +vt 0.69444441795349 1.00000000000000 0.00000000000000 +vt 0.69444441795349 0.00000000000000 0.00000000000000 +vt 0.32898992300034 0.03015375137329 0.00000000000000 +vt 0.58682405948639 0.00759613513947 0.00000000000000 +vt 0.72222220897675 1.00000000000000 0.00000000000000 +vt 0.72222220897675 0.00000000000000 0.00000000000000 +vt 0.41317591071129 0.00759613513947 0.00000000000000 +vt 0.77777779102325 1.00000000000000 0.00000000000000 +vt 0.77777779102325 0.00000000000000 0.00000000000000 +vt 0.80555558204651 1.00000000000000 0.00000000000000 +vt 0.80555558204651 0.00000000000000 0.00000000000000 +vt 0.86111110448837 1.00000000000000 0.00000000000000 +vt 0.86111110448837 0.00000000000000 0.00000000000000 +vt 0.88888889551163 1.00000000000000 0.00000000000000 +vt 0.88888889551163 0.00000000000000 0.00000000000000 +vt 0.94444441795349 1.00000000000000 0.00000000000000 +vt 0.94444441795349 0.00000000000000 0.00000000000000 +vt 0.97222220897675 1.00000000000000 0.00000000000000 +vt 0.97222220897675 0.00000000000000 0.00000000000000 +# 80 texture coordinates + +g 圆柱 +usemtl 材质 +f 1261/204/298 1263/192/298 1265/388/298 +f 1263/4/154 1264/1/154 1266/389/300 1265/390/300 +f 1264/216/299 1262/204/299 1266/391/299 +f 1261/204/298 1265/388/298 1267/392/298 +f 1265/390/300 1266/389/300 1268/393/301 1267/394/301 +f 1266/391/299 1262/204/299 1268/395/299 +f 1261/204/298 1267/392/298 1269/396/298 +f 1267/394/301 1268/393/301 1270/345/156 1269/344/156 +f 1268/395/299 1262/204/299 1270/397/299 +f 1261/204/298 1269/396/298 1271/398/298 +f 1269/344/156 1270/345/156 1272/399/302 1271/400/302 +f 1270/397/299 1262/204/299 1272/401/299 +f 1261/204/298 1271/398/298 1273/402/298 +f 1271/400/302 1272/399/302 1274/403/303 1273/404/303 +f 1272/401/299 1262/204/299 1274/405/299 +f 1261/204/298 1273/402/298 1275/406/298 +f 1273/404/303 1274/403/303 1276/349/158 1275/348/158 +f 1274/405/299 1262/204/299 1276/407/299 +f 1261/204/298 1275/406/298 1277/408/298 +f 1275/348/158 1276/349/158 1278/409/304 1277/410/304 +f 1276/407/299 1262/204/299 1278/411/299 +f 1261/204/298 1277/408/298 1279/412/298 +f 1277/410/304 1278/409/304 1280/413/305 1279/414/305 +f 1278/411/299 1262/204/299 1280/415/299 +f 1261/204/298 1279/412/298 1281/365/298 +f 1279/414/305 1280/413/305 1282/353/160 1281/352/160 +f 1280/415/299 1262/204/299 1282/365/299 +f 1261/204/298 1281/365/298 1283/415/298 +f 1281/352/160 1282/353/160 1284/416/306 1283/417/306 +f 1282/365/299 1262/204/299 1284/412/299 +f 1261/204/298 1283/415/298 1285/411/298 +f 1283/417/306 1284/416/306 1286/418/307 1285/419/307 +f 1284/412/299 1262/204/299 1286/408/299 +f 1261/204/298 1285/411/298 1287/407/298 +f 1285/419/307 1286/418/307 1288/357/162 1287/356/162 +f 1286/408/299 1262/204/299 1288/406/299 +f 1261/204/298 1287/407/298 1289/405/298 +f 1287/356/162 1288/357/162 1290/420/308 1289/421/308 +f 1288/406/299 1262/204/299 1290/402/299 +f 1261/204/298 1289/405/298 1291/401/298 +f 1289/421/308 1290/420/308 1292/422/309 1291/423/309 +f 1290/402/299 1262/204/299 1292/398/299 +f 1261/204/298 1291/401/298 1293/397/298 +f 1291/423/309 1292/422/309 1294/361/164 1293/360/164 +f 1292/398/299 1262/204/299 1294/396/299 +f 1261/204/298 1293/397/298 1295/395/298 +f 1293/360/164 1294/361/164 1296/424/310 1295/425/310 +f 1294/396/299 1262/204/299 1296/392/299 +f 1261/204/298 1295/395/298 1297/391/298 +f 1295/425/310 1296/424/310 1298/426/311 1297/427/311 +f 1296/392/299 1262/204/299 1298/388/299 +f 1261/204/298 1297/391/298 1299/216/298 +f 1297/427/311 1298/426/311 1300/365/166 1299/364/166 +f 1298/388/299 1262/204/299 1300/192/299 +f 1261/204/298 1299/216/298 1301/428/298 +f 1299/364/166 1300/365/166 1302/429/312 1301/430/312 +f 1300/192/299 1262/204/299 1302/431/299 +f 1261/204/298 1301/428/298 1303/432/298 +f 1301/430/312 1302/429/312 1304/433/313 1303/434/313 +f 1302/431/299 1262/204/299 1304/435/299 +f 1261/204/298 1303/432/298 1305/436/298 +f 1303/434/313 1304/433/313 1306/369/168 1305/368/168 +f 1304/435/299 1262/204/299 1306/437/299 +f 1261/204/298 1305/436/298 1307/438/298 +f 1305/368/168 1306/369/168 1308/439/314 1307/440/314 +f 1306/437/299 1262/204/299 1308/441/299 +f 1261/204/298 1307/438/298 1309/442/298 +f 1307/440/314 1308/439/314 1310/443/315 1309/444/315 +f 1308/441/299 1262/204/299 1310/445/299 +f 1261/204/298 1309/442/298 1311/446/298 +f 1309/444/315 1310/443/315 1312/373/170 1311/372/170 +f 1310/445/299 1262/204/299 1312/447/299 +f 1261/204/298 1311/446/298 1313/448/298 +f 1311/372/170 1312/373/170 1314/449/316 1313/450/316 +f 1312/447/299 1262/204/299 1314/451/299 +f 1261/204/298 1313/448/298 1315/452/298 +f 1313/450/316 1314/449/316 1316/453/317 1315/454/317 +f 1314/451/299 1262/204/299 1316/455/299 +f 1261/204/298 1315/452/298 1317/364/298 +f 1315/454/317 1316/453/317 1318/377/172 1317/376/172 +f 1316/455/299 1262/204/299 1318/364/299 +f 1261/204/298 1317/364/298 1319/455/298 +f 1317/376/172 1318/377/172 1320/456/318 1319/457/318 +f 1318/364/299 1262/204/299 1320/452/299 +f 1261/204/298 1319/455/298 1321/451/298 +f 1319/457/318 1320/456/318 1322/458/319 1321/459/319 +f 1320/452/299 1262/204/299 1322/448/299 +f 1261/204/298 1321/451/298 1323/447/298 +f 1321/459/319 1322/458/319 1324/381/174 1323/380/174 +f 1322/448/299 1262/204/299 1324/446/299 +f 1261/204/298 1323/447/298 1325/445/298 +f 1323/380/174 1324/381/174 1326/460/320 1325/461/320 +f 1324/446/299 1262/204/299 1326/442/299 +f 1261/204/298 1325/445/298 1327/441/298 +f 1325/461/320 1326/460/320 1328/462/321 1327/463/321 +f 1326/442/299 1262/204/299 1328/438/299 +f 1261/204/298 1327/441/298 1329/437/298 +f 1327/463/321 1328/462/321 1330/385/176 1329/384/176 +f 1328/438/299 1262/204/299 1330/436/299 +f 1261/204/298 1329/437/298 1331/435/298 +f 1329/384/176 1330/385/176 1332/464/322 1331/465/322 +f 1330/436/299 1262/204/299 1332/432/299 +f 1261/204/298 1331/435/298 1333/431/298 +f 1331/465/322 1332/464/322 1334/466/323 1333/467/323 +f 1332/432/299 1262/204/299 1334/428/299 +f 1261/204/298 1333/431/298 1263/192/298 +f 1333/467/323 1334/466/323 1264/65/154 1263/66/154 +f 1334/428/299 1262/204/299 1264/216/299 + +v -17.00000000000000 449.66244506835938 -51.43188476562500 +v 37.00000000000000 449.66244506835938 -51.43188476562500 +v 37.00000000000000 449.66244506835938 51.43188476562500 +v -17.00000000000000 449.66244506835938 51.43188476562500 +v -17.00000000000000 449.97933959960938 -53.43268203735352 +v 37.00000000000000 449.97933959960938 -53.43268203735352 +v 37.61828231811523 449.97933959960938 -53.33475494384766 +v 38.17604064941406 449.97933959960938 -53.05056381225586 +v 38.61867904663086 449.97933959960938 -52.60792541503906 +v 38.90287017822266 449.97933959960938 -52.05016326904297 +v 39.00079727172852 449.97933959960938 -51.43188476562500 +v 39.00079727172852 449.97933959960938 51.43188476562500 +v 38.90287017822266 449.97933959960938 52.05016326904297 +v 38.61867904663086 449.97933959960938 52.60792541503906 +v 38.17604064941406 449.97933959960938 53.05056381225586 +v 37.61828231811523 449.97933959960938 53.33475494384766 +v 37.00000000000000 449.97933959960938 53.43268203735352 +v -17.00000000000000 449.97933959960938 53.43268203735352 +v -17.61828041076660 449.97933959960938 53.33475494384766 +v -18.17603874206543 449.97933959960938 53.05056381225586 +v -18.61867904663086 449.97933959960938 52.60792541503906 +v -18.90287208557129 449.97933959960938 52.05016326904297 +v -19.00079727172852 449.97933959960938 51.43188476562500 +v -19.00079727172852 449.97933959960938 -51.43188476562500 +v -18.90287208557129 449.97933959960938 -52.05016326904297 +v -18.61867904663086 449.97933959960938 -52.60792541503906 +v -18.17603874206543 449.97933959960938 -53.05056381225586 +v -17.61828041076660 449.97933959960938 -53.33475494384766 +v -17.00000000000000 450.89901733398438 -55.23762893676758 +v 37.00000000000000 450.89901733398438 -55.23762893676758 +v 38.17604064941406 450.89901733398438 -55.05136108398438 +v 39.23696136474609 450.89901733398438 -54.51079559326172 +v 40.07891082763672 450.89901733398438 -53.66884231567383 +v 40.61947631835938 450.89901733398438 -52.60792541503906 +v 40.80574417114258 450.89901733398438 -51.43188476562500 +v 40.80574417114258 450.89901733398438 51.43188476562500 +v 40.61947631835938 450.89901733398438 52.60792541503906 +v 40.07891082763672 450.89901733398438 53.66884231567383 +v 39.23696136474609 450.89901733398438 54.51079559326172 +v 38.17604064941406 450.89901733398438 55.05136108398438 +v 37.00000000000000 450.89901733398438 55.23762893676758 +v -17.00000000000000 450.89901733398438 55.23762893676758 +v -18.17603874206543 450.89901733398438 55.05136108398438 +v -19.23695945739746 450.89901733398438 54.51079559326172 +v -20.07891082763672 450.89901733398438 53.66884231567383 +v -20.61947631835938 450.89901733398438 52.60792541503906 +v -20.80574226379395 450.89901733398438 51.43188476562500 +v -20.80574226379395 450.89901733398438 -51.43188476562500 +v -20.61947631835938 450.89901733398438 -52.60792541503906 +v -20.07891082763672 450.89901733398438 -53.66884231567383 +v -19.23695945739746 450.89901733398438 -54.51079559326172 +v -18.17603874206543 450.89901733398438 -55.05136108398438 +v -17.00000000000000 452.33142089843750 -56.67004013061523 +v 37.00000000000000 452.33142089843750 -56.67004013061523 +v 38.61867904663086 452.33142089843750 -56.41366577148438 +v 40.07891082763672 452.33142089843750 -55.66963958740234 +v 41.23775863647461 452.33142089843750 -54.51079559326172 +v 41.98178100585938 452.33142089843750 -53.05056381225586 +v 42.23815536499023 452.33142089843750 -51.43188476562500 +v 42.23815536499023 452.33142089843750 51.43188476562500 +v 41.98178100585938 452.33142089843750 53.05056381225586 +v 41.23775863647461 452.33142089843750 54.51079559326172 +v 40.07891082763672 452.33142089843750 55.66963958740234 +v 38.61867904663086 452.33142089843750 56.41366577148438 +v 37.00000000000000 452.33142089843750 56.67004013061523 +v -17.00000000000000 452.33142089843750 56.67004013061523 +v -18.61867904663086 452.33142089843750 56.41366577148438 +v -20.07891082763672 452.33142089843750 55.66963958740234 +v -21.23775672912598 452.33142089843750 54.51079559326172 +v -21.98178291320801 452.33142089843750 53.05056381225586 +v -22.23815536499023 452.33142089843750 51.43188476562500 +v -22.23815536499023 452.33142089843750 -51.43188476562500 +v -21.98178291320801 452.33142089843750 -53.05056381225586 +v -21.23775672912598 452.33142089843750 -54.51079559326172 +v -20.07891082763672 452.33142089843750 -55.66963958740234 +v -18.61867904663086 452.33142089843750 -56.41366577148438 +v -17.00000000000000 454.13635253906250 -57.58970642089844 +v 37.00000000000000 454.13635253906250 -57.58970642089844 +v 38.90287017822266 454.13635253906250 -57.28832244873047 +v 40.61947631835938 454.13635253906250 -56.41366577148438 +v 41.98178100585938 454.13635253906250 -55.05136108398438 +v 42.85643768310547 454.13635253906250 -53.33475494384766 +v 43.15782165527344 454.13635253906250 -51.43188476562500 +v 43.15782165527344 454.13635253906250 51.43188476562500 +v 42.85643768310547 454.13635253906250 53.33475494384766 +v 41.98178100585938 454.13635253906250 55.05136108398438 +v 40.61947631835938 454.13635253906250 56.41366577148438 +v 38.90287017822266 454.13635253906250 57.28832244873047 +v 37.00000000000000 454.13635253906250 57.58970642089844 +v -17.00000000000000 454.13635253906250 57.58970642089844 +v -18.90287208557129 454.13635253906250 57.28832244873047 +v -20.61947631835938 454.13635253906250 56.41366577148438 +v -21.98178291320801 454.13635253906250 55.05136108398438 +v -22.85643577575684 454.13635253906250 53.33475494384766 +v -23.15782165527344 454.13635253906250 51.43188476562500 +v -23.15782165527344 454.13635253906250 -51.43188476562500 +v -22.85643577575684 454.13635253906250 -53.33475494384766 +v -21.98178291320801 454.13635253906250 -55.05136108398438 +v -20.61947631835938 454.13635253906250 -56.41366577148438 +v -18.90287208557129 454.13635253906250 -57.28832244873047 +v -17.00000000000000 456.13717651367188 -57.90660095214844 +v 37.00000000000000 456.13717651367188 -57.90660095214844 +v 39.00079727172852 456.13717651367188 -57.58970642089844 +v 40.80574417114258 456.13717651367188 -56.67004013061523 +v 42.23815536499023 456.13717651367188 -55.23762893676758 +v 43.15782165527344 456.13717651367188 -53.43268203735352 +v 43.47471618652344 456.13717651367188 -51.43188476562500 +v 43.47471618652344 456.13717651367188 51.43188476562500 +v 43.15782165527344 456.13717651367188 53.43268203735352 +v 42.23815536499023 456.13717651367188 55.23762893676758 +v 40.80574417114258 456.13717651367188 56.67004013061523 +v 39.00079727172852 456.13717651367188 57.58970642089844 +v 37.00000000000000 456.13717651367188 57.90660095214844 +v -17.00000000000000 456.13717651367188 57.90660095214844 +v -19.00079727172852 456.13717651367188 57.58970642089844 +v -20.80574226379395 456.13717651367188 56.67004013061523 +v -22.23815536499023 456.13717651367188 55.23762893676758 +v -23.15782165527344 456.13717651367188 53.43268203735352 +v -23.47471618652344 456.13717651367188 51.43188476562500 +v -23.47471618652344 456.13717651367188 -51.43188476562500 +v -23.15782165527344 456.13717651367188 -53.43268203735352 +v -22.23815536499023 456.13717651367188 -55.23762893676758 +v -20.80574226379395 456.13717651367188 -56.67004013061523 +v -19.00079727172852 456.13717651367188 -57.58970642089844 +v -17.00000000000000 779.91546630859375 -57.90660095214844 +v 37.00000000000000 779.91546630859375 -57.90660095214844 +v 39.00079727172852 779.91546630859375 -57.58970642089844 +v 40.80574417114258 779.91546630859375 -56.67004013061523 +v 42.23815536499023 779.91546630859375 -55.23762893676758 +v 43.15782165527344 779.91546630859375 -53.43268203735352 +v 43.47471618652344 779.91546630859375 -51.43188476562500 +v 43.47471618652344 779.91546630859375 51.43188476562500 +v 43.15782165527344 779.91546630859375 53.43268203735352 +v 42.23815536499023 779.91546630859375 55.23762893676758 +v 40.80574417114258 779.91546630859375 56.67004013061523 +v 39.00079727172852 779.91546630859375 57.58970642089844 +v 37.00000000000000 779.91546630859375 57.90660095214844 +v -17.00000000000000 779.91546630859375 57.90660095214844 +v -19.00079727172852 779.91546630859375 57.58970642089844 +v -20.80574226379395 779.91546630859375 56.67004013061523 +v -22.23815536499023 779.91546630859375 55.23762893676758 +v -23.15782165527344 779.91546630859375 53.43268203735352 +v -23.47471618652344 779.91546630859375 51.43188476562500 +v -23.47471618652344 779.91546630859375 -51.43188476562500 +v -23.15782165527344 779.91546630859375 -53.43268203735352 +v -22.23815536499023 779.91546630859375 -55.23762893676758 +v -20.80574226379395 779.91546630859375 -56.67004013061523 +v -19.00079727172852 779.91546630859375 -57.58970642089844 +v -17.00000000000000 781.91625976562500 -57.58970642089844 +v 37.00000000000000 781.91625976562500 -57.58970642089844 +v 38.90287017822266 781.91625976562500 -57.28832244873047 +v 40.61947631835938 781.91625976562500 -56.41366577148438 +v 41.98178100585938 781.91625976562500 -55.05136108398438 +v 42.85643768310547 781.91625976562500 -53.33475494384766 +v 43.15782165527344 781.91625976562500 -51.43188476562500 +v 43.15782165527344 781.91625976562500 51.43188476562500 +v 42.85643768310547 781.91625976562500 53.33475494384766 +v 41.98178100585938 781.91625976562500 55.05136108398438 +v 40.61947631835938 781.91625976562500 56.41366577148438 +v 38.90287017822266 781.91625976562500 57.28832244873047 +v 37.00000000000000 781.91625976562500 57.58970642089844 +v -17.00000000000000 781.91625976562500 57.58970642089844 +v -18.90287208557129 781.91625976562500 57.28832244873047 +v -20.61947631835938 781.91625976562500 56.41366577148438 +v -21.98178291320801 781.91625976562500 55.05136108398438 +v -22.85643577575684 781.91625976562500 53.33475494384766 +v -23.15782165527344 781.91625976562500 51.43188476562500 +v -23.15782165527344 781.91625976562500 -51.43188476562500 +v -22.85643577575684 781.91625976562500 -53.33475494384766 +v -21.98178291320801 781.91625976562500 -55.05136108398438 +v -20.61947631835938 781.91625976562500 -56.41366577148438 +v -18.90287208557129 781.91625976562500 -57.28832244873047 +v -17.00000000000000 783.72125244140625 -56.67004013061523 +v 37.00000000000000 783.72125244140625 -56.67004013061523 +v 38.61867904663086 783.72125244140625 -56.41366577148438 +v 40.07891082763672 783.72125244140625 -55.66963958740234 +v 41.23775863647461 783.72125244140625 -54.51079559326172 +v 41.98178100585938 783.72125244140625 -53.05056381225586 +v 42.23815536499023 783.72125244140625 -51.43188476562500 +v 42.23815536499023 783.72125244140625 51.43188476562500 +v 41.98178100585938 783.72125244140625 53.05056381225586 +v 41.23775863647461 783.72125244140625 54.51079559326172 +v 40.07891082763672 783.72125244140625 55.66963958740234 +v 38.61867904663086 783.72125244140625 56.41366577148438 +v 37.00000000000000 783.72125244140625 56.67004013061523 +v -17.00000000000000 783.72125244140625 56.67004013061523 +v -18.61867904663086 783.72125244140625 56.41366577148438 +v -20.07891082763672 783.72125244140625 55.66963958740234 +v -21.23775672912598 783.72125244140625 54.51079559326172 +v -21.98178291320801 783.72125244140625 53.05056381225586 +v -22.23815536499023 783.72125244140625 51.43188476562500 +v -22.23815536499023 783.72125244140625 -51.43188476562500 +v -21.98178291320801 783.72125244140625 -53.05056381225586 +v -21.23775672912598 783.72125244140625 -54.51079559326172 +v -20.07891082763672 783.72125244140625 -55.66963958740234 +v -18.61867904663086 783.72125244140625 -56.41366577148438 +v -17.00000000000000 785.15362548828125 -55.23762893676758 +v 37.00000000000000 785.15362548828125 -55.23762893676758 +v 38.17604064941406 785.15362548828125 -55.05136108398438 +v 39.23696136474609 785.15362548828125 -54.51079559326172 +v 40.07891082763672 785.15362548828125 -53.66884231567383 +v 40.61947631835938 785.15362548828125 -52.60792541503906 +v 40.80574417114258 785.15362548828125 -51.43188476562500 +v 40.80574417114258 785.15362548828125 51.43188476562500 +v 40.61947631835938 785.15362548828125 52.60792541503906 +v 40.07891082763672 785.15362548828125 53.66884231567383 +v 39.23696136474609 785.15362548828125 54.51079559326172 +v 38.17604064941406 785.15362548828125 55.05136108398438 +v 37.00000000000000 785.15362548828125 55.23762893676758 +v -17.00000000000000 785.15362548828125 55.23762893676758 +v -18.17603874206543 785.15362548828125 55.05136108398438 +v -19.23695945739746 785.15362548828125 54.51079559326172 +v -20.07891082763672 785.15362548828125 53.66884231567383 +v -20.61947631835938 785.15362548828125 52.60792541503906 +v -20.80574226379395 785.15362548828125 51.43188476562500 +v -20.80574226379395 785.15362548828125 -51.43188476562500 +v -20.61947631835938 785.15362548828125 -52.60792541503906 +v -20.07891082763672 785.15362548828125 -53.66884231567383 +v -19.23695945739746 785.15362548828125 -54.51079559326172 +v -18.17603874206543 785.15362548828125 -55.05136108398438 +v -17.00000000000000 786.07330322265625 -53.43268203735352 +v 37.00000000000000 786.07330322265625 -53.43268203735352 +v 37.61828231811523 786.07330322265625 -53.33475494384766 +v 38.17604064941406 786.07330322265625 -53.05056381225586 +v 38.61867904663086 786.07330322265625 -52.60792541503906 +v 38.90287017822266 786.07330322265625 -52.05016326904297 +v 39.00079727172852 786.07330322265625 -51.43188476562500 +v 39.00079727172852 786.07330322265625 51.43188476562500 +v 38.90287017822266 786.07330322265625 52.05016326904297 +v 38.61867904663086 786.07330322265625 52.60792541503906 +v 38.17604064941406 786.07330322265625 53.05056381225586 +v 37.61828231811523 786.07330322265625 53.33475494384766 +v 37.00000000000000 786.07330322265625 53.43268203735352 +v -17.00000000000000 786.07330322265625 53.43268203735352 +v -17.61828041076660 786.07330322265625 53.33475494384766 +v -18.17603874206543 786.07330322265625 53.05056381225586 +v -18.61867904663086 786.07330322265625 52.60792541503906 +v -18.90287208557129 786.07330322265625 52.05016326904297 +v -19.00079727172852 786.07330322265625 51.43188476562500 +v -19.00079727172852 786.07330322265625 -51.43188476562500 +v -18.90287208557129 786.07330322265625 -52.05016326904297 +v -18.61867904663086 786.07330322265625 -52.60792541503906 +v -18.17603874206543 786.07330322265625 -53.05056381225586 +v -17.61828041076660 786.07330322265625 -53.33475494384766 +v -17.00000000000000 786.39019775390625 -51.43188476562500 +v 37.00000000000000 786.39019775390625 -51.43188476562500 +v 37.00000000000000 786.39019775390625 51.43188476562500 +v -17.00000000000000 786.39019775390625 51.43188476562500 +# 248 vertices + +vn -0.08312530070543 -0.99306613206863 -0.08312530070543 +vn -0.02440690994263 -0.95080703496933 -0.30882087349892 +vn 0.02440690994263 -0.95080703496933 -0.30882087349892 +vn 0.08312530070543 -0.99306613206863 -0.08312530070543 +vn -0.04637560620904 -0.80822926759720 -0.58703893423080 +vn 0.04637560620904 -0.80822926759720 -0.58703893423080 +vn -0.06365761160851 -0.58669996261597 -0.80729848146439 +vn 0.06365761160851 -0.58669996261597 -0.80729848146439 +vn -0.07468779385090 -0.30821996927261 -0.94837874174118 +vn 0.07468779385090 -0.30821996927261 -0.94837874174118 +vn -0.07822024077177 -0.07822024077177 -0.99386274814606 +vn 0.07822024077177 -0.07822024077177 -0.99386274814606 +vn -0.07822024077177 0.07822024077177 -0.99386274814606 +vn 0.07822024077177 0.07822024077177 -0.99386274814606 +vn -0.07468779385090 0.30821996927261 -0.94837874174118 +vn 0.07468779385090 0.30821996927261 -0.94837874174118 +vn -0.06365761160851 0.58669996261597 -0.80729848146439 +vn 0.06365761160851 0.58669996261597 -0.80729848146439 +vn -0.04637560620904 0.80822926759720 -0.58703893423080 +vn 0.04637560620904 0.80822926759720 -0.58703893423080 +vn -0.02440690994263 0.95080703496933 -0.30882087349892 +vn 0.02440690994263 0.95080703496933 -0.30882087349892 +vn -0.08312530070543 0.99306613206863 -0.08312530070543 +vn 0.08312530070543 0.99306613206863 -0.08312530070543 +vn 0.09543948620558 -0.95111358165741 -0.29372486472130 +vn 0.18156838417053 -0.80918246507645 -0.55879932641983 +vn 0.24994270503521 -0.58801221847534 -0.76926606893539 +vn 0.29388272762299 -0.30916440486908 -0.90446132421494 +vn 0.30807152390480 -0.07847104221582 -0.94812142848968 +vn 0.30807152390480 0.07847104221582 -0.94812142848968 +vn 0.29388272762299 0.30916440486908 -0.90446132421494 +vn 0.24994270503521 0.58801221847534 -0.76926606893539 +vn 0.18156838417053 0.80918246507645 -0.55879932641983 +vn 0.09543948620558 0.95111358165741 -0.29372486472130 +vn 0.18153536319733 -0.95111525058746 -0.24984939396381 +vn 0.34534916281700 -0.80920016765594 -0.47531995177269 +vn 0.47542506456375 -0.58802324533463 -0.65436965227127 +vn 0.55897951126099 -0.30916219949722 -0.76938980817795 +vn 0.58598077297211 -0.07847036421299 -0.80651652812958 +vn 0.58598077297211 0.07847036421299 -0.80651652812958 +vn 0.55897951126099 0.30916219949722 -0.76938980817795 +vn 0.47542506456375 0.58802324533463 -0.65436965227127 +vn 0.34534916281700 0.80920016765594 -0.47531995177269 +vn 0.18153536319733 0.95111525058746 -0.24984939396381 +vn 0.24984939396381 -0.95111525058746 -0.18153536319733 +vn 0.47531995177269 -0.80920016765594 -0.34534916281700 +vn 0.65436965227127 -0.58802324533463 -0.47542506456375 +vn 0.76938980817795 -0.30916219949722 -0.55897951126099 +vn 0.80651652812958 -0.07847036421299 -0.58598077297211 +vn 0.80651652812958 0.07847036421299 -0.58598077297211 +vn 0.76938980817795 0.30916219949722 -0.55897951126099 +vn 0.65436965227127 0.58802324533463 -0.47542506456375 +vn 0.47531995177269 0.80920016765594 -0.34534916281700 +vn 0.24984939396381 0.95111525058746 -0.18153536319733 +vn 0.29372486472130 -0.95111358165741 -0.09543948620558 +vn 0.55879932641983 -0.80918246507645 -0.18156838417053 +vn 0.76926606893539 -0.58801221847534 -0.24994270503521 +vn 0.90446132421494 -0.30916440486908 -0.29388272762299 +vn 0.94812142848968 -0.07847104221582 -0.30807152390480 +vn 0.94812142848968 0.07847104221582 -0.30807152390480 +vn 0.90446132421494 0.30916440486908 -0.29388272762299 +vn 0.76926606893539 0.58801221847534 -0.24994270503521 +vn 0.55879932641983 0.80918246507645 -0.18156838417053 +vn 0.29372486472130 0.95111358165741 -0.09543948620558 +vn 0.30882087349892 -0.95080703496933 -0.02440690994263 +vn 0.58703893423080 -0.80822926759720 -0.04637560620904 +vn 0.80729848146439 -0.58669996261597 -0.06365761160851 +vn 0.94837874174118 -0.30821996927261 -0.07468779385090 +vn 0.99386274814606 -0.07822024077177 -0.07822024077177 +vn 0.99386274814606 0.07822024077177 -0.07822024077177 +vn 0.94837874174118 0.30821996927261 -0.07468779385090 +vn 0.80729848146439 0.58669996261597 -0.06365761160851 +vn 0.58703893423080 0.80822926759720 -0.04637560620904 +vn 0.30882087349892 0.95080703496933 -0.02440690994263 +vn 0.30882087349892 -0.95080703496933 0.02440690994263 +vn 0.08312530070543 -0.99306613206863 0.08312530070543 +vn 0.58703893423080 -0.80822926759720 0.04637560620904 +vn 0.80729848146439 -0.58669996261597 0.06365761160851 +vn 0.94837874174118 -0.30821996927261 0.07468779385090 +vn 0.99386274814606 -0.07822024077177 0.07822024077177 +vn 0.99386274814606 0.07822024077177 0.07822024077177 +vn 0.94837874174118 0.30821996927261 0.07468779385090 +vn 0.80729848146439 0.58669996261597 0.06365761160851 +vn 0.58703893423080 0.80822926759720 0.04637560620904 +vn 0.30882087349892 0.95080703496933 0.02440690994263 +vn 0.08312530070543 0.99306613206863 0.08312530070543 +vn 0.29372486472130 -0.95111358165741 0.09543948620558 +vn 0.55879932641983 -0.80918246507645 0.18156838417053 +vn 0.76926606893539 -0.58801221847534 0.24994270503521 +vn 0.90446132421494 -0.30916440486908 0.29388272762299 +vn 0.94812142848968 -0.07847104221582 0.30807152390480 +vn 0.94812142848968 0.07847104221582 0.30807152390480 +vn 0.90446132421494 0.30916440486908 0.29388272762299 +vn 0.76926606893539 0.58801221847534 0.24994270503521 +vn 0.55879932641983 0.80918246507645 0.18156838417053 +vn 0.29372486472130 0.95111358165741 0.09543948620558 +vn 0.24984939396381 -0.95111525058746 0.18153536319733 +vn 0.47531995177269 -0.80920016765594 0.34534916281700 +vn 0.65436965227127 -0.58802324533463 0.47542506456375 +vn 0.76938980817795 -0.30916219949722 0.55897951126099 +vn 0.80651652812958 -0.07847036421299 0.58598077297211 +vn 0.80651652812958 0.07847036421299 0.58598077297211 +vn 0.76938980817795 0.30916219949722 0.55897951126099 +vn 0.65436965227127 0.58802324533463 0.47542506456375 +vn 0.47531995177269 0.80920016765594 0.34534916281700 +vn 0.24984939396381 0.95111525058746 0.18153536319733 +vn 0.18153536319733 -0.95111525058746 0.24984939396381 +vn 0.34534916281700 -0.80920016765594 0.47531995177269 +vn 0.47542506456375 -0.58802324533463 0.65436965227127 +vn 0.55897951126099 -0.30916219949722 0.76938980817795 +vn 0.58598077297211 -0.07847036421299 0.80651652812958 +vn 0.58598077297211 0.07847036421299 0.80651652812958 +vn 0.55897951126099 0.30916219949722 0.76938980817795 +vn 0.47542506456375 0.58802324533463 0.65436965227127 +vn 0.34534916281700 0.80920016765594 0.47531995177269 +vn 0.18153536319733 0.95111525058746 0.24984939396381 +vn 0.09543948620558 -0.95111358165741 0.29372486472130 +vn 0.18156838417053 -0.80918246507645 0.55879932641983 +vn 0.24994270503521 -0.58801221847534 0.76926606893539 +vn 0.29388272762299 -0.30916440486908 0.90446132421494 +vn 0.30807152390480 -0.07847104221582 0.94812142848968 +vn 0.30807152390480 0.07847104221582 0.94812142848968 +vn 0.29388272762299 0.30916440486908 0.90446132421494 +vn 0.24994270503521 0.58801221847534 0.76926606893539 +vn 0.18156838417053 0.80918246507645 0.55879932641983 +vn 0.09543948620558 0.95111358165741 0.29372486472130 +vn 0.02440690994263 -0.95080703496933 0.30882087349892 +vn 0.04637560620904 -0.80822926759720 0.58703893423080 +vn 0.06365761160851 -0.58669996261597 0.80729848146439 +vn 0.07468779385090 -0.30821996927261 0.94837874174118 +vn 0.07822024077177 -0.07822024077177 0.99386274814606 +vn 0.07822024077177 0.07822024077177 0.99386274814606 +vn 0.07468779385090 0.30821996927261 0.94837874174118 +vn 0.06365761160851 0.58669996261597 0.80729848146439 +vn 0.04637560620904 0.80822926759720 0.58703893423080 +vn 0.02440690994263 0.95080703496933 0.30882087349892 +vn -0.02440690994263 -0.95080703496933 0.30882087349892 +vn -0.08312530070543 -0.99306613206863 0.08312530070543 +vn -0.04637560620904 -0.80822926759720 0.58703893423080 +vn -0.06365761160851 -0.58669996261597 0.80729848146439 +vn -0.07468779385090 -0.30821996927261 0.94837874174118 +vn -0.07822024077177 -0.07822024077177 0.99386274814606 +vn -0.07822024077177 0.07822024077177 0.99386274814606 +vn -0.07468779385090 0.30821996927261 0.94837874174118 +vn -0.06365761160851 0.58669996261597 0.80729848146439 +vn -0.04637560620904 0.80822926759720 0.58703893423080 +vn -0.02440690994263 0.95080703496933 0.30882087349892 +vn -0.08312530070543 0.99306613206863 0.08312530070543 +vn -0.09543948620558 -0.95111358165741 0.29372486472130 +vn -0.18156838417053 -0.80918246507645 0.55879932641983 +vn -0.24994270503521 -0.58801221847534 0.76926606893539 +vn -0.29388272762299 -0.30916440486908 0.90446132421494 +vn -0.30807152390480 -0.07847104221582 0.94812142848968 +vn -0.30807152390480 0.07847104221582 0.94812142848968 +vn -0.29388272762299 0.30916440486908 0.90446132421494 +vn -0.24994270503521 0.58801221847534 0.76926606893539 +vn -0.18156838417053 0.80918246507645 0.55879932641983 +vn -0.09543948620558 0.95111358165741 0.29372486472130 +vn -0.18153536319733 -0.95111525058746 0.24984939396381 +vn -0.34534916281700 -0.80920016765594 0.47531995177269 +vn -0.47542506456375 -0.58802324533463 0.65436965227127 +vn -0.55897951126099 -0.30916219949722 0.76938980817795 +vn -0.58598077297211 -0.07847036421299 0.80651652812958 +vn -0.58598077297211 0.07847036421299 0.80651652812958 +vn -0.55897951126099 0.30916219949722 0.76938980817795 +vn -0.47542506456375 0.58802324533463 0.65436965227127 +vn -0.34534916281700 0.80920016765594 0.47531995177269 +vn -0.18153536319733 0.95111525058746 0.24984939396381 +vn -0.24984939396381 -0.95111525058746 0.18153536319733 +vn -0.47531995177269 -0.80920016765594 0.34534916281700 +vn -0.65436965227127 -0.58802324533463 0.47542506456375 +vn -0.76938980817795 -0.30916219949722 0.55897951126099 +vn -0.80651652812958 -0.07847036421299 0.58598077297211 +vn -0.80651652812958 0.07847036421299 0.58598077297211 +vn -0.76938980817795 0.30916219949722 0.55897951126099 +vn -0.65436965227127 0.58802324533463 0.47542506456375 +vn -0.47531995177269 0.80920016765594 0.34534916281700 +vn -0.24984939396381 0.95111525058746 0.18153536319733 +vn -0.29372486472130 -0.95111358165741 0.09543948620558 +vn -0.55879932641983 -0.80918246507645 0.18156838417053 +vn -0.76926606893539 -0.58801221847534 0.24994270503521 +vn -0.90446132421494 -0.30916440486908 0.29388272762299 +vn -0.94812142848968 -0.07847104221582 0.30807152390480 +vn -0.94812142848968 0.07847104221582 0.30807152390480 +vn -0.90446132421494 0.30916440486908 0.29388272762299 +vn -0.76926606893539 0.58801221847534 0.24994270503521 +vn -0.55879932641983 0.80918246507645 0.18156838417053 +vn -0.29372486472130 0.95111358165741 0.09543948620558 +vn -0.30882087349892 -0.95080703496933 0.02440690994263 +vn -0.58703893423080 -0.80822926759720 0.04637560620904 +vn -0.80729848146439 -0.58669996261597 0.06365761160851 +vn -0.94837874174118 -0.30821996927261 0.07468779385090 +vn -0.99386274814606 -0.07822024077177 0.07822024077177 +vn -0.99386274814606 0.07822024077177 0.07822024077177 +vn -0.94837874174118 0.30821996927261 0.07468779385090 +vn -0.80729848146439 0.58669996261597 0.06365761160851 +vn -0.58703893423080 0.80822926759720 0.04637560620904 +vn -0.30882087349892 0.95080703496933 0.02440690994263 +vn -0.30882087349892 -0.95080703496933 -0.02440690994263 +vn -0.58703893423080 -0.80822926759720 -0.04637560620904 +vn -0.80729848146439 -0.58669996261597 -0.06365761160851 +vn -0.94837874174118 -0.30821996927261 -0.07468779385090 +vn -0.99386274814606 -0.07822024077177 -0.07822024077177 +vn -0.99386274814606 0.07822024077177 -0.07822024077177 +vn -0.94837874174118 0.30821996927261 -0.07468779385090 +vn -0.80729848146439 0.58669996261597 -0.06365761160851 +vn -0.58703893423080 0.80822926759720 -0.04637560620904 +vn -0.30882087349892 0.95080703496933 -0.02440690994263 +vn -0.29372486472130 -0.95111358165741 -0.09543948620558 +vn -0.55879932641983 -0.80918246507645 -0.18156838417053 +vn -0.76926606893539 -0.58801221847534 -0.24994270503521 +vn -0.90446132421494 -0.30916440486908 -0.29388272762299 +vn -0.94812142848968 -0.07847104221582 -0.30807152390480 +vn -0.94812142848968 0.07847104221582 -0.30807152390480 +vn -0.90446132421494 0.30916440486908 -0.29388272762299 +vn -0.76926606893539 0.58801221847534 -0.24994270503521 +vn -0.55879932641983 0.80918246507645 -0.18156838417053 +vn -0.29372486472130 0.95111358165741 -0.09543948620558 +vn -0.24984939396381 -0.95111525058746 -0.18153536319733 +vn -0.47531995177269 -0.80920016765594 -0.34534916281700 +vn -0.65436965227127 -0.58802324533463 -0.47542506456375 +vn -0.76938980817795 -0.30916219949722 -0.55897951126099 +vn -0.80651652812958 -0.07847036421299 -0.58598077297211 +vn -0.80651652812958 0.07847036421299 -0.58598077297211 +vn -0.76938980817795 0.30916219949722 -0.55897951126099 +vn -0.65436965227127 0.58802324533463 -0.47542506456375 +vn -0.47531995177269 0.80920016765594 -0.34534916281700 +vn -0.24984939396381 0.95111525058746 -0.18153536319733 +vn -0.18153536319733 -0.95111525058746 -0.24984939396381 +vn -0.34534916281700 -0.80920016765594 -0.47531995177269 +vn -0.47542506456375 -0.58802324533463 -0.65436965227127 +vn -0.55897951126099 -0.30916219949722 -0.76938980817795 +vn -0.58598077297211 -0.07847036421299 -0.80651652812958 +vn -0.58598077297211 0.07847036421299 -0.80651652812958 +vn -0.55897951126099 0.30916219949722 -0.76938980817795 +vn -0.47542506456375 0.58802324533463 -0.65436965227127 +vn -0.34534916281700 0.80920016765594 -0.47531995177269 +vn -0.18153536319733 0.95111525058746 -0.24984939396381 +vn -0.09543948620558 -0.95111358165741 -0.29372486472130 +vn -0.18156838417053 -0.80918246507645 -0.55879932641983 +vn -0.24994270503521 -0.58801221847534 -0.76926606893539 +vn -0.29388272762299 -0.30916440486908 -0.90446132421494 +vn -0.30807152390480 -0.07847104221582 -0.94812142848968 +vn -0.30807152390480 0.07847104221582 -0.94812142848968 +vn -0.29388272762299 0.30916440486908 -0.90446132421494 +vn -0.24994270503521 0.58801221847534 -0.76926606893539 +vn -0.18156838417053 0.80918246507645 -0.55879932641983 +vn -0.09543948620558 0.95111358165741 -0.29372486472130 +# 248 normals + +vt 0.00000000000000 0.00591099262238 0.00000000000000 +vt 0.84150868654251 0.00591099262238 0.00000000000000 +vt 0.84150868654251 0.00000000000000 0.00000000000000 +vt 0.00000000000000 0.01182210445404 0.00000000000000 +vt 0.84150868654251 0.01182210445404 0.00000000000000 +vt 0.00000000000000 0.01773309707642 0.00000000000000 +vt 0.84150868654251 0.01773309707642 0.00000000000000 +vt 0.00000000000000 0.02364408969879 0.00000000000000 +vt 0.84150868654251 0.02364408969879 0.00000000000000 +vt 0.00000000000000 0.02955508232117 0.00000000000000 +vt 0.84150868654251 0.02955508232117 0.00000000000000 +vt 0.00000000000000 0.97044497728348 0.00000000000000 +vt 0.84150868654251 0.97044497728348 0.00000000000000 +vt 0.00000000000000 0.97635596990585 0.00000000000000 +vt 0.84150868654251 0.97635596990585 0.00000000000000 +vt 0.00000000000000 0.98226696252823 0.00000000000000 +vt 0.84150868654251 0.98226696252823 0.00000000000000 +vt 0.00000000000000 0.98817795515060 0.00000000000000 +vt 0.84150868654251 0.98817795515060 0.00000000000000 +vt 0.00000000000000 0.99408900737762 0.00000000000000 +vt 0.84150868654251 0.99408900737762 0.00000000000000 +vt 0.84150868654251 1.00000000000000 0.00000000000000 +vt 0.85735780000687 0.00000000000000 0.00000000000000 +vt 0.87320697307587 0.00591099262238 0.00000000000000 +vt 0.87320697307587 0.01182210445404 0.00000000000000 +vt 0.87320697307587 0.01773309707642 0.00000000000000 +vt 0.87320697307587 0.02364408969879 0.00000000000000 +vt 0.87320697307587 0.02955508232117 0.00000000000000 +vt 0.87320697307587 0.97044497728348 0.00000000000000 +vt 0.87320697307587 0.97635596990585 0.00000000000000 +vt 0.87320697307587 0.98226696252823 0.00000000000000 +vt 0.87320697307587 0.98817795515060 0.00000000000000 +vt 0.87320697307587 0.99408900737762 0.00000000000000 +vt 0.85735780000687 1.00000000000000 0.00000000000000 +vt 0.88905608654022 0.00000000000000 0.00000000000000 +vt 0.90490520000458 0.00591099262238 0.00000000000000 +vt 0.90490520000458 0.01182210445404 0.00000000000000 +vt 0.90490520000458 0.01773309707642 0.00000000000000 +vt 0.90490520000458 0.02364408969879 0.00000000000000 +vt 0.90490520000458 0.02955508232117 0.00000000000000 +vt 0.90490520000458 0.97044497728348 0.00000000000000 +vt 0.90490520000458 0.97635596990585 0.00000000000000 +vt 0.90490520000458 0.98226696252823 0.00000000000000 +vt 0.90490520000458 0.98817795515060 0.00000000000000 +vt 0.90490520000458 0.99408900737762 0.00000000000000 +vt 0.88905608654022 1.00000000000000 0.00000000000000 +vt 0.92075431346893 0.00000000000000 0.00000000000000 +vt 0.93660348653793 0.00591099262238 0.00000000000000 +vt 0.93660348653793 0.01182210445404 0.00000000000000 +vt 0.93660348653793 0.01773309707642 0.00000000000000 +vt 0.93660348653793 0.02364408969879 0.00000000000000 +vt 0.93660348653793 0.02955508232117 0.00000000000000 +vt 0.93660348653793 0.97044497728348 0.00000000000000 +vt 0.93660348653793 0.97635596990585 0.00000000000000 +vt 0.93660348653793 0.98226696252823 0.00000000000000 +vt 0.93660348653793 0.98817795515060 0.00000000000000 +vt 0.93660348653793 0.99408900737762 0.00000000000000 +vt 0.92075431346893 1.00000000000000 0.00000000000000 +vt 0.95245260000229 0.00000000000000 0.00000000000000 +vt 0.96830171346664 0.00591099262238 0.00000000000000 +vt 0.96830171346664 0.01182210445404 0.00000000000000 +vt 0.96830171346664 0.01773309707642 0.00000000000000 +vt 0.96830171346664 0.02364408969879 0.00000000000000 +vt 0.96830171346664 0.02955508232117 0.00000000000000 +vt 0.96830171346664 0.97044497728348 0.00000000000000 +vt 0.96830171346664 0.97635596990585 0.00000000000000 +vt 0.96830171346664 0.98226696252823 0.00000000000000 +vt 0.96830171346664 0.98817795515060 0.00000000000000 +vt 0.96830171346664 0.99408900737762 0.00000000000000 +vt 0.95245260000229 1.00000000000000 0.00000000000000 +vt 0.98415088653564 0.00000000000000 0.00000000000000 +vt 1.00000000000000 0.00591099262238 0.00000000000000 +vt 1.00000000000000 0.01182210445404 0.00000000000000 +vt 1.00000000000000 0.01773309707642 0.00000000000000 +vt 1.00000000000000 0.02364408969879 0.00000000000000 +vt 1.00000000000000 0.02955508232117 0.00000000000000 +vt 1.00000000000000 0.97044497728348 0.00000000000000 +vt 1.00000000000000 0.97635596990585 0.00000000000000 +vt 1.00000000000000 0.98226696252823 0.00000000000000 +vt 1.00000000000000 0.98817795515060 0.00000000000000 +vt 1.00000000000000 0.99408900737762 0.00000000000000 +vt 0.98415088653564 1.00000000000000 0.00000000000000 +vt 0.91002315282822 0.00591099262238 0.00000000000000 +vt 0.91002315282822 0.00000000000000 0.00000000000000 +vt 0.91002315282822 0.01182210445404 0.00000000000000 +vt 0.91002315282822 0.01773309707642 0.00000000000000 +vt 0.91002315282822 0.02364408969879 0.00000000000000 +vt 0.91002315282822 0.02955508232117 0.00000000000000 +vt 0.91002315282822 0.97044497728348 0.00000000000000 +vt 0.91002315282822 0.97635596990585 0.00000000000000 +vt 0.91002315282822 0.98226696252823 0.00000000000000 +vt 0.91002315282822 0.98817795515060 0.00000000000000 +vt 0.91002315282822 0.99408900737762 0.00000000000000 +vt 0.91002315282822 1.00000000000000 0.00000000000000 +vt 0.91902083158493 0.00000000000000 0.00000000000000 +vt 0.92801856994629 0.00591099262238 0.00000000000000 +vt 0.92801856994629 0.01182210445404 0.00000000000000 +vt 0.92801856994629 0.01773309707642 0.00000000000000 +vt 0.92801856994629 0.02364408969879 0.00000000000000 +vt 0.92801856994629 0.02955508232117 0.00000000000000 +vt 0.92801856994629 0.97044497728348 0.00000000000000 +vt 0.92801856994629 0.97635596990585 0.00000000000000 +vt 0.92801856994629 0.98226696252823 0.00000000000000 +vt 0.92801856994629 0.98817795515060 0.00000000000000 +vt 0.92801856994629 0.99408900737762 0.00000000000000 +vt 0.91902083158493 1.00000000000000 0.00000000000000 +vt 0.93701624870300 0.00000000000000 0.00000000000000 +vt 0.94601392745972 0.00591099262238 0.00000000000000 +vt 0.94601392745972 0.01182210445404 0.00000000000000 +vt 0.94601392745972 0.01773309707642 0.00000000000000 +vt 0.94601392745972 0.02364408969879 0.00000000000000 +vt 0.94601392745972 0.02955508232117 0.00000000000000 +vt 0.94601392745972 0.97044497728348 0.00000000000000 +vt 0.94601392745972 0.97635596990585 0.00000000000000 +vt 0.94601392745972 0.98226696252823 0.00000000000000 +vt 0.94601392745972 0.98817795515060 0.00000000000000 +vt 0.94601392745972 0.99408900737762 0.00000000000000 +vt 0.93701624870300 1.00000000000000 0.00000000000000 +vt 0.95501160621643 0.00000000000000 0.00000000000000 +vt 0.96400928497314 0.00591099262238 0.00000000000000 +vt 0.96400928497314 0.01182210445404 0.00000000000000 +vt 0.96400928497314 0.01773309707642 0.00000000000000 +vt 0.96400928497314 0.02364408969879 0.00000000000000 +vt 0.96400928497314 0.02955508232117 0.00000000000000 +vt 0.96400928497314 0.97044497728348 0.00000000000000 +vt 0.96400928497314 0.97635596990585 0.00000000000000 +vt 0.96400928497314 0.98226696252823 0.00000000000000 +vt 0.96400928497314 0.98817795515060 0.00000000000000 +vt 0.96400928497314 0.99408900737762 0.00000000000000 +vt 0.95501160621643 1.00000000000000 0.00000000000000 +vt 0.97300696372986 0.00000000000000 0.00000000000000 +vt 0.98200464248657 0.00591099262238 0.00000000000000 +vt 0.98200464248657 0.01182210445404 0.00000000000000 +vt 0.98200464248657 0.01773309707642 0.00000000000000 +vt 0.98200464248657 0.02364408969879 0.00000000000000 +vt 0.98200464248657 0.02955508232117 0.00000000000000 +vt 0.98200464248657 0.97044497728348 0.00000000000000 +vt 0.98200464248657 0.97635596990585 0.00000000000000 +vt 0.98200464248657 0.98226696252823 0.00000000000000 +vt 0.98200464248657 0.98817795515060 0.00000000000000 +vt 0.98200464248657 0.99408900737762 0.00000000000000 +vt 0.97300696372986 1.00000000000000 0.00000000000000 +vt 0.99100232124329 0.00000000000000 0.00000000000000 +vt 0.99100232124329 1.00000000000000 0.00000000000000 +# 144 texture coordinates + +g 立方体 +usemtl 材质 +f 1335/4/324 1339/468/325 1340/469/326 1336/470/327 +f 1339/468/325 1363/471/328 1364/472/329 1340/469/326 +f 1363/471/328 1387/473/330 1388/474/331 1364/472/329 +f 1387/473/330 1411/475/332 1412/476/333 1388/474/331 +f 1411/475/332 1435/477/334 1436/478/335 1412/476/333 +f 1435/477/334 1459/479/336 1460/480/337 1436/478/335 +f 1459/479/336 1483/481/338 1484/482/339 1460/480/337 +f 1483/481/338 1507/483/340 1508/484/341 1484/482/339 +f 1507/483/340 1531/485/342 1532/486/343 1508/484/341 +f 1531/485/342 1555/487/344 1556/488/345 1532/486/343 +f 1555/487/344 1579/1/346 1580/489/347 1556/488/345 +f 1336/490/327 1340/469/326 1341/491/348 +f 1340/469/326 1364/472/329 1365/492/349 1341/491/348 +f 1364/472/329 1388/474/331 1389/493/350 1365/492/349 +f 1388/474/331 1412/476/333 1413/494/351 1389/493/350 +f 1412/476/333 1436/478/335 1437/495/352 1413/494/351 +f 1436/478/335 1460/480/337 1461/496/353 1437/495/352 +f 1460/480/337 1484/482/339 1485/497/354 1461/496/353 +f 1484/482/339 1508/484/341 1509/498/355 1485/497/354 +f 1508/484/341 1532/486/343 1533/499/356 1509/498/355 +f 1532/486/343 1556/488/345 1557/500/357 1533/499/356 +f 1556/488/345 1580/501/347 1557/500/357 +f 1336/502/327 1341/491/348 1342/503/358 +f 1341/491/348 1365/492/349 1366/504/359 1342/503/358 +f 1365/492/349 1389/493/350 1390/505/360 1366/504/359 +f 1389/493/350 1413/494/351 1414/506/361 1390/505/360 +f 1413/494/351 1437/495/352 1438/507/362 1414/506/361 +f 1437/495/352 1461/496/353 1462/508/363 1438/507/362 +f 1461/496/353 1485/497/354 1486/509/364 1462/508/363 +f 1485/497/354 1509/498/355 1510/510/365 1486/509/364 +f 1509/498/355 1533/499/356 1534/511/366 1510/510/365 +f 1533/499/356 1557/500/357 1558/512/367 1534/511/366 +f 1557/500/357 1580/513/347 1558/512/367 +f 1336/514/327 1342/503/358 1343/515/368 +f 1342/503/358 1366/504/359 1367/516/369 1343/515/368 +f 1366/504/359 1390/505/360 1391/517/370 1367/516/369 +f 1390/505/360 1414/506/361 1415/518/371 1391/517/370 +f 1414/506/361 1438/507/362 1439/519/372 1415/518/371 +f 1438/507/362 1462/508/363 1463/520/373 1439/519/372 +f 1462/508/363 1486/509/364 1487/521/374 1463/520/373 +f 1486/509/364 1510/510/365 1511/522/375 1487/521/374 +f 1510/510/365 1534/511/366 1535/523/376 1511/522/375 +f 1534/511/366 1558/512/367 1559/524/377 1535/523/376 +f 1558/512/367 1580/525/347 1559/524/377 +f 1336/526/327 1343/515/368 1344/527/378 +f 1343/515/368 1367/516/369 1368/528/379 1344/527/378 +f 1367/516/369 1391/517/370 1392/529/380 1368/528/379 +f 1391/517/370 1415/518/371 1416/530/381 1392/529/380 +f 1415/518/371 1439/519/372 1440/531/382 1416/530/381 +f 1439/519/372 1463/520/373 1464/532/383 1440/531/382 +f 1463/520/373 1487/521/374 1488/533/384 1464/532/383 +f 1487/521/374 1511/522/375 1512/534/385 1488/533/384 +f 1511/522/375 1535/523/376 1536/535/386 1512/534/385 +f 1535/523/376 1559/524/377 1560/536/387 1536/535/386 +f 1559/524/377 1580/537/347 1560/536/387 +f 1336/538/327 1344/527/378 1345/539/388 +f 1344/527/378 1368/528/379 1369/540/389 1345/539/388 +f 1368/528/379 1392/529/380 1393/541/390 1369/540/389 +f 1392/529/380 1416/530/381 1417/542/391 1393/541/390 +f 1416/530/381 1440/531/382 1441/543/392 1417/542/391 +f 1440/531/382 1464/532/383 1465/544/393 1441/543/392 +f 1464/532/383 1488/533/384 1489/545/394 1465/544/393 +f 1488/533/384 1512/534/385 1513/546/395 1489/545/394 +f 1512/534/385 1536/535/386 1537/547/396 1513/546/395 +f 1536/535/386 1560/536/387 1561/548/397 1537/547/396 +f 1560/536/387 1580/549/347 1561/548/397 +f 1336/4/327 1345/468/388 1346/550/398 1337/551/399 +f 1345/468/388 1369/471/389 1370/552/400 1346/550/398 +f 1369/471/389 1393/473/390 1394/553/401 1370/552/400 +f 1393/473/390 1417/475/391 1418/554/402 1394/553/401 +f 1417/475/391 1441/477/392 1442/555/403 1418/554/402 +f 1441/477/392 1465/479/393 1466/556/404 1442/555/403 +f 1465/479/393 1489/481/394 1490/557/405 1466/556/404 +f 1489/481/394 1513/483/395 1514/558/406 1490/557/405 +f 1513/483/395 1537/485/396 1538/559/407 1514/558/406 +f 1537/485/396 1561/487/397 1562/560/408 1538/559/407 +f 1561/487/397 1580/1/347 1581/561/409 1562/560/408 +f 1337/562/399 1346/550/398 1347/563/410 +f 1346/550/398 1370/552/400 1371/564/411 1347/563/410 +f 1370/552/400 1394/553/401 1395/565/412 1371/564/411 +f 1394/553/401 1418/554/402 1419/566/413 1395/565/412 +f 1418/554/402 1442/555/403 1443/567/414 1419/566/413 +f 1442/555/403 1466/556/404 1467/568/415 1443/567/414 +f 1466/556/404 1490/557/405 1491/569/416 1467/568/415 +f 1490/557/405 1514/558/406 1515/570/417 1491/569/416 +f 1514/558/406 1538/559/407 1539/571/418 1515/570/417 +f 1538/559/407 1562/560/408 1563/572/419 1539/571/418 +f 1562/560/408 1581/573/409 1563/572/419 +f 1337/574/399 1347/563/410 1348/575/420 +f 1347/563/410 1371/564/411 1372/576/421 1348/575/420 +f 1371/564/411 1395/565/412 1396/577/422 1372/576/421 +f 1395/565/412 1419/566/413 1420/578/423 1396/577/422 +f 1419/566/413 1443/567/414 1444/579/424 1420/578/423 +f 1443/567/414 1467/568/415 1468/580/425 1444/579/424 +f 1467/568/415 1491/569/416 1492/581/426 1468/580/425 +f 1491/569/416 1515/570/417 1516/582/427 1492/581/426 +f 1515/570/417 1539/571/418 1540/583/428 1516/582/427 +f 1539/571/418 1563/572/419 1564/584/429 1540/583/428 +f 1563/572/419 1581/585/409 1564/584/429 +f 1337/586/399 1348/575/420 1349/587/430 +f 1348/575/420 1372/576/421 1373/588/431 1349/587/430 +f 1372/576/421 1396/577/422 1397/589/432 1373/588/431 +f 1396/577/422 1420/578/423 1421/590/433 1397/589/432 +f 1420/578/423 1444/579/424 1445/591/434 1421/590/433 +f 1444/579/424 1468/580/425 1469/592/435 1445/591/434 +f 1468/580/425 1492/581/426 1493/593/436 1469/592/435 +f 1492/581/426 1516/582/427 1517/594/437 1493/593/436 +f 1516/582/427 1540/583/428 1541/595/438 1517/594/437 +f 1540/583/428 1564/584/429 1565/596/439 1541/595/438 +f 1564/584/429 1581/597/409 1565/596/439 +f 1337/598/399 1349/587/430 1350/599/440 +f 1349/587/430 1373/588/431 1374/600/441 1350/599/440 +f 1373/588/431 1397/589/432 1398/601/442 1374/600/441 +f 1397/589/432 1421/590/433 1422/602/443 1398/601/442 +f 1421/590/433 1445/591/434 1446/603/444 1422/602/443 +f 1445/591/434 1469/592/435 1470/604/445 1446/603/444 +f 1469/592/435 1493/593/436 1494/605/446 1470/604/445 +f 1493/593/436 1517/594/437 1518/606/447 1494/605/446 +f 1517/594/437 1541/595/438 1542/607/448 1518/606/447 +f 1541/595/438 1565/596/439 1566/608/449 1542/607/448 +f 1565/596/439 1581/609/409 1566/608/449 +f 1337/610/399 1350/599/440 1351/539/450 +f 1350/599/440 1374/600/441 1375/540/451 1351/539/450 +f 1374/600/441 1398/601/442 1399/541/452 1375/540/451 +f 1398/601/442 1422/602/443 1423/542/453 1399/541/452 +f 1422/602/443 1446/603/444 1447/543/454 1423/542/453 +f 1446/603/444 1470/604/445 1471/544/455 1447/543/454 +f 1470/604/445 1494/605/446 1495/545/456 1471/544/455 +f 1494/605/446 1518/606/447 1519/546/457 1495/545/456 +f 1518/606/447 1542/607/448 1543/547/458 1519/546/457 +f 1542/607/448 1566/608/449 1567/548/459 1543/547/458 +f 1566/608/449 1581/611/409 1567/548/459 +f 1337/4/399 1351/468/450 1352/469/460 1338/470/461 +f 1351/468/450 1375/471/451 1376/472/462 1352/469/460 +f 1375/471/451 1399/473/452 1400/474/463 1376/472/462 +f 1399/473/452 1423/475/453 1424/476/464 1400/474/463 +f 1423/475/453 1447/477/454 1448/478/465 1424/476/464 +f 1447/477/454 1471/479/455 1472/480/466 1448/478/465 +f 1471/479/455 1495/481/456 1496/482/467 1472/480/466 +f 1495/481/456 1519/483/457 1520/484/468 1496/482/467 +f 1519/483/457 1543/485/458 1544/486/469 1520/484/468 +f 1543/485/458 1567/487/459 1568/488/470 1544/486/469 +f 1567/487/459 1581/1/409 1582/489/471 1568/488/470 +f 1338/490/461 1352/469/460 1353/491/472 +f 1352/469/460 1376/472/462 1377/492/473 1353/491/472 +f 1376/472/462 1400/474/463 1401/493/474 1377/492/473 +f 1400/474/463 1424/476/464 1425/494/475 1401/493/474 +f 1424/476/464 1448/478/465 1449/495/476 1425/494/475 +f 1448/478/465 1472/480/466 1473/496/477 1449/495/476 +f 1472/480/466 1496/482/467 1497/497/478 1473/496/477 +f 1496/482/467 1520/484/468 1521/498/479 1497/497/478 +f 1520/484/468 1544/486/469 1545/499/480 1521/498/479 +f 1544/486/469 1568/488/470 1569/500/481 1545/499/480 +f 1568/488/470 1582/501/471 1569/500/481 +f 1338/502/461 1353/491/472 1354/503/482 +f 1353/491/472 1377/492/473 1378/504/483 1354/503/482 +f 1377/492/473 1401/493/474 1402/505/484 1378/504/483 +f 1401/493/474 1425/494/475 1426/506/485 1402/505/484 +f 1425/494/475 1449/495/476 1450/507/486 1426/506/485 +f 1449/495/476 1473/496/477 1474/508/487 1450/507/486 +f 1473/496/477 1497/497/478 1498/509/488 1474/508/487 +f 1497/497/478 1521/498/479 1522/510/489 1498/509/488 +f 1521/498/479 1545/499/480 1546/511/490 1522/510/489 +f 1545/499/480 1569/500/481 1570/512/491 1546/511/490 +f 1569/500/481 1582/513/471 1570/512/491 +f 1338/514/461 1354/503/482 1355/515/492 +f 1354/503/482 1378/504/483 1379/516/493 1355/515/492 +f 1378/504/483 1402/505/484 1403/517/494 1379/516/493 +f 1402/505/484 1426/506/485 1427/518/495 1403/517/494 +f 1426/506/485 1450/507/486 1451/519/496 1427/518/495 +f 1450/507/486 1474/508/487 1475/520/497 1451/519/496 +f 1474/508/487 1498/509/488 1499/521/498 1475/520/497 +f 1498/509/488 1522/510/489 1523/522/499 1499/521/498 +f 1522/510/489 1546/511/490 1547/523/500 1523/522/499 +f 1546/511/490 1570/512/491 1571/524/501 1547/523/500 +f 1570/512/491 1582/525/471 1571/524/501 +f 1338/526/461 1355/515/492 1356/527/502 +f 1355/515/492 1379/516/493 1380/528/503 1356/527/502 +f 1379/516/493 1403/517/494 1404/529/504 1380/528/503 +f 1403/517/494 1427/518/495 1428/530/505 1404/529/504 +f 1427/518/495 1451/519/496 1452/531/506 1428/530/505 +f 1451/519/496 1475/520/497 1476/532/507 1452/531/506 +f 1475/520/497 1499/521/498 1500/533/508 1476/532/507 +f 1499/521/498 1523/522/499 1524/534/509 1500/533/508 +f 1523/522/499 1547/523/500 1548/535/510 1524/534/509 +f 1547/523/500 1571/524/501 1572/536/511 1548/535/510 +f 1571/524/501 1582/537/471 1572/536/511 +f 1338/538/461 1356/527/502 1357/539/512 +f 1356/527/502 1380/528/503 1381/540/513 1357/539/512 +f 1380/528/503 1404/529/504 1405/541/514 1381/540/513 +f 1404/529/504 1428/530/505 1429/542/515 1405/541/514 +f 1428/530/505 1452/531/506 1453/543/516 1429/542/515 +f 1452/531/506 1476/532/507 1477/544/517 1453/543/516 +f 1476/532/507 1500/533/508 1501/545/518 1477/544/517 +f 1500/533/508 1524/534/509 1525/546/519 1501/545/518 +f 1524/534/509 1548/535/510 1549/547/520 1525/546/519 +f 1548/535/510 1572/536/511 1573/548/521 1549/547/520 +f 1572/536/511 1582/549/471 1573/548/521 +f 1338/4/461 1357/468/512 1358/550/522 1335/551/324 +f 1357/468/512 1381/471/513 1382/552/523 1358/550/522 +f 1381/471/513 1405/473/514 1406/553/524 1382/552/523 +f 1405/473/514 1429/475/515 1430/554/525 1406/553/524 +f 1429/475/515 1453/477/516 1454/555/526 1430/554/525 +f 1453/477/516 1477/479/517 1478/556/527 1454/555/526 +f 1477/479/517 1501/481/518 1502/557/528 1478/556/527 +f 1501/481/518 1525/483/519 1526/558/529 1502/557/528 +f 1525/483/519 1549/485/520 1550/559/530 1526/558/529 +f 1549/485/520 1573/487/521 1574/560/531 1550/559/530 +f 1573/487/521 1582/1/471 1579/561/346 1574/560/531 +f 1335/562/324 1358/550/522 1359/563/532 +f 1358/550/522 1382/552/523 1383/564/533 1359/563/532 +f 1382/552/523 1406/553/524 1407/565/534 1383/564/533 +f 1406/553/524 1430/554/525 1431/566/535 1407/565/534 +f 1430/554/525 1454/555/526 1455/567/536 1431/566/535 +f 1454/555/526 1478/556/527 1479/568/537 1455/567/536 +f 1478/556/527 1502/557/528 1503/569/538 1479/568/537 +f 1502/557/528 1526/558/529 1527/570/539 1503/569/538 +f 1526/558/529 1550/559/530 1551/571/540 1527/570/539 +f 1550/559/530 1574/560/531 1575/572/541 1551/571/540 +f 1574/560/531 1579/573/346 1575/572/541 +f 1335/574/324 1359/563/532 1360/575/542 +f 1359/563/532 1383/564/533 1384/576/543 1360/575/542 +f 1383/564/533 1407/565/534 1408/577/544 1384/576/543 +f 1407/565/534 1431/566/535 1432/578/545 1408/577/544 +f 1431/566/535 1455/567/536 1456/579/546 1432/578/545 +f 1455/567/536 1479/568/537 1480/580/547 1456/579/546 +f 1479/568/537 1503/569/538 1504/581/548 1480/580/547 +f 1503/569/538 1527/570/539 1528/582/549 1504/581/548 +f 1527/570/539 1551/571/540 1552/583/550 1528/582/549 +f 1551/571/540 1575/572/541 1576/584/551 1552/583/550 +f 1575/572/541 1579/585/346 1576/584/551 +f 1335/586/324 1360/575/542 1361/587/552 +f 1360/575/542 1384/576/543 1385/588/553 1361/587/552 +f 1384/576/543 1408/577/544 1409/589/554 1385/588/553 +f 1408/577/544 1432/578/545 1433/590/555 1409/589/554 +f 1432/578/545 1456/579/546 1457/591/556 1433/590/555 +f 1456/579/546 1480/580/547 1481/592/557 1457/591/556 +f 1480/580/547 1504/581/548 1505/593/558 1481/592/557 +f 1504/581/548 1528/582/549 1529/594/559 1505/593/558 +f 1528/582/549 1552/583/550 1553/595/560 1529/594/559 +f 1552/583/550 1576/584/551 1577/596/561 1553/595/560 +f 1576/584/551 1579/597/346 1577/596/561 +f 1335/598/324 1361/587/552 1362/599/562 +f 1361/587/552 1385/588/553 1386/600/563 1362/599/562 +f 1385/588/553 1409/589/554 1410/601/564 1386/600/563 +f 1409/589/554 1433/590/555 1434/602/565 1410/601/564 +f 1433/590/555 1457/591/556 1458/603/566 1434/602/565 +f 1457/591/556 1481/592/557 1482/604/567 1458/603/566 +f 1481/592/557 1505/593/558 1506/605/568 1482/604/567 +f 1505/593/558 1529/594/559 1530/606/569 1506/605/568 +f 1529/594/559 1553/595/560 1554/607/570 1530/606/569 +f 1553/595/560 1577/596/561 1578/608/571 1554/607/570 +f 1577/596/561 1579/609/346 1578/608/571 +f 1335/610/324 1362/599/562 1339/539/325 +f 1362/599/562 1386/600/563 1363/540/328 1339/539/325 +f 1386/600/563 1410/601/564 1387/541/330 1363/540/328 +f 1410/601/564 1434/602/565 1411/542/332 1387/541/330 +f 1434/602/565 1458/603/566 1435/543/334 1411/542/332 +f 1458/603/566 1482/604/567 1459/544/336 1435/543/334 +f 1482/604/567 1506/605/568 1483/545/338 1459/544/336 +f 1506/605/568 1530/606/569 1507/546/340 1483/545/338 +f 1530/606/569 1554/607/570 1531/547/342 1507/546/340 +f 1554/607/570 1578/608/571 1555/548/344 1531/547/342 +f 1578/608/571 1579/611/346 1555/548/344 +f 1579/4/346 1582/1/471 1581/65/409 1580/66/347 +f 1335/1/324 1336/65/327 1337/66/399 1338/4/461 + +v 31.36711502075195 615.50128173828125 -40.16886520385742 +v 31.36711502075195 618.23480224609375 -40.03647232055664 +v 31.36711502075195 623.12298583984375 -39.37255859375000 +v 31.36711502075195 628.38854980468750 -38.10228729248047 +v 31.36711502075195 633.03704833984375 -36.43727874755859 +v 31.36711502075195 636.61712646484375 -34.72630691528320 +v 31.36711502075195 640.16278076171875 -32.55932235717773 +v 31.36711502075195 643.57073974609375 -29.88249015808105 +v 31.36711502075195 645.71520996093750 -27.78809356689453 +v 31.36711502075195 647.72204589843750 -25.42721176147461 +v 31.36711502075195 649.56048583984375 -22.78389358520508 +v 31.36711502075195 651.20007324218750 -19.84218406677246 +v 31.36711502075195 652.61022949218750 -16.58613014221191 +v 31.36711502075195 653.76019287109375 -12.99977874755859 +v 31.36711502075195 654.61956787109375 -9.06717681884766 +v 31.36711502075195 655.15759277343750 -4.77236986160278 +v 31.36711502075195 655.34368896484375 -0.09940527379513 +v 31.36711502075195 654.93182373046875 6.76958894729614 +v 31.36711502075195 654.23132324218750 10.88530254364014 +v 31.36711502075195 653.22570800781250 14.64853191375732 +v 31.36711502075195 651.94543457031250 18.07505607604980 +v 31.36711502075195 650.42114257812500 21.18065452575684 +v 31.36711502075195 648.68322753906250 23.98110389709473 +v 31.36711502075195 646.76226806640625 26.49218750000000 +v 31.36711502075195 644.68872070312500 28.72967910766602 +v 31.36711502075195 641.35913085937500 31.60745620727539 +v 31.36711502075195 637.85791015625000 33.95841217041016 +v 31.36711502075195 634.28802490234375 35.83580398559570 +v 31.36711502075195 629.59936523437500 37.69438171386719 +v 31.36711502075195 625.21582031250000 38.93196868896484 +v 31.36711502075195 620.53735351562500 39.79799652099609 +v 31.36711502075195 617.19378662109375 40.13751220703125 +v 31.36711502075195 615.61480712890625 40.19707870483398 +v 81.36711883544922 615.50128173828125 -40.16886520385742 +v 81.36711883544922 618.23480224609375 -40.03647232055664 +v 81.36711883544922 623.12298583984375 -39.37255859375000 +v 81.36711883544922 628.38854980468750 -38.10228729248047 +v 81.36711883544922 633.03704833984375 -36.43727874755859 +v 81.36711883544922 636.61712646484375 -34.72630691528320 +v 81.36711883544922 640.16278076171875 -32.55932235717773 +v 81.36711883544922 643.57073974609375 -29.88249015808105 +v 81.36711883544922 645.71520996093750 -27.78809356689453 +v 81.36711883544922 647.72204589843750 -25.42721176147461 +v 81.36711883544922 649.56048583984375 -22.78389358520508 +v 81.36711883544922 651.20007324218750 -19.84218406677246 +v 81.36711883544922 652.61022949218750 -16.58613014221191 +v 81.36711883544922 653.76019287109375 -12.99977874755859 +v 81.36711883544922 654.61956787109375 -9.06717681884766 +v 81.36711883544922 655.15759277343750 -4.77236986160278 +v 81.36711883544922 655.34368896484375 -0.09940527379513 +v 81.36711883544922 654.93182373046875 6.76958894729614 +v 81.36711883544922 654.23132324218750 10.88530254364014 +v 81.36711883544922 653.22570800781250 14.64853191375732 +v 81.36711883544922 651.94543457031250 18.07505607604980 +v 81.36711883544922 650.42114257812500 21.18065452575684 +v 81.36711883544922 648.68322753906250 23.98110389709473 +v 81.36711883544922 646.76226806640625 26.49218750000000 +v 81.36711883544922 644.68872070312500 28.72967910766602 +v 81.36711883544922 641.35913085937500 31.60745620727539 +v 81.36711883544922 637.85791015625000 33.95841217041016 +v 81.36711883544922 634.28802490234375 35.83580398559570 +v 81.36711883544922 629.59936523437500 37.69438171386719 +v 81.36711883544922 625.21582031250000 38.93196868896484 +v 81.36711883544922 620.53735351562500 39.79799652099609 +v 81.36711883544922 617.19378662109375 40.13751220703125 +v 81.36711883544922 615.61480712890625 40.19707870483398 +v 31.36711502075195 615.60461425781250 -42.30230331420898 +v 31.36711502075195 618.43060302734375 -42.16543197631836 +v 31.36711502075195 623.51818847656250 -41.47443008422852 +v 31.36711502075195 629.00091552734375 -40.15177917480469 +v 31.36711502075195 633.85986328125000 -38.41139602661133 +v 31.36711502075195 637.63726806640625 -36.60610198974609 +v 31.36711502075195 641.38360595703125 -34.31647491455078 +v 31.36711502075195 644.98071289062500 -31.49105644226074 +v 31.36711502075195 647.27850341796875 -29.24694633483887 +v 31.36711502075195 649.41650390625000 -26.73174285888672 +v 31.36711502075195 651.37457275390625 -23.91640663146973 +v 31.36711502075195 653.11773681640625 -20.78890419006348 +v 31.36711502075195 654.61206054687500 -17.33847045898438 +v 31.36711502075195 655.82519531250000 -13.55512332916260 +v 31.36711502075195 656.72692871093750 -9.42866516113281 +v 31.36711502075195 657.28826904296875 -4.94793319702148 +v 31.36711502075195 657.48217773437500 -0.07792840898037 +v 31.36711502075195 657.05700683593750 7.01342201232910 +v 31.36711502075195 656.32043457031250 11.34118080139160 +v 31.36711502075195 655.26263427734375 15.29954719543457 +v 31.36711502075195 653.90936279296875 18.92146492004395 +v 31.36711502075195 652.29193115234375 22.21689414978027 +v 31.36711502075195 650.44311523437500 25.19602394104004 +v 31.36711502075195 648.39746093750000 27.87006759643555 +v 31.36711502075195 646.17498779296875 30.26830673217773 +v 31.36711502075195 642.65765380859375 33.30834960937500 +v 31.36711502075195 638.95349121093750 35.79554367065430 +v 31.36711502075195 635.18121337890625 37.77937698364258 +v 31.36711502075195 630.28491210937500 39.72027587890625 +v 31.36711502075195 625.70141601562500 41.01430511474609 +v 31.36711502075195 620.84014892578125 41.91417312622070 +v 31.36711502075195 617.34210205078125 42.26937484741211 +v 31.36711502075195 615.69537353515625 42.33149719238281 +v 81.36711883544922 615.60461425781250 -42.30230331420898 +v 81.36711883544922 618.43060302734375 -42.16543197631836 +v 81.36711883544922 623.51818847656250 -41.47443008422852 +v 81.36711883544922 629.00091552734375 -40.15177917480469 +v 81.36711883544922 633.85986328125000 -38.41139602661133 +v 81.36711883544922 637.63726806640625 -36.60610198974609 +v 81.36711883544922 641.38360595703125 -34.31647491455078 +v 81.36711883544922 644.98071289062500 -31.49105644226074 +v 81.36711883544922 647.27850341796875 -29.24694633483887 +v 81.36711883544922 649.41650390625000 -26.73174285888672 +v 81.36711883544922 651.37457275390625 -23.91640663146973 +v 81.36711883544922 653.11773681640625 -20.78890419006348 +v 81.36711883544922 654.61206054687500 -17.33847045898438 +v 81.36711883544922 655.82519531250000 -13.55512332916260 +v 81.36711883544922 656.72692871093750 -9.42866516113281 +v 81.36711883544922 657.28826904296875 -4.94793319702148 +v 81.36711883544922 657.48217773437500 -0.07792840898037 +v 81.36711883544922 657.05700683593750 7.01342201232910 +v 81.36711883544922 656.32043457031250 11.34118080139160 +v 81.36711883544922 655.26263427734375 15.29954719543457 +v 81.36711883544922 653.90936279296875 18.92146492004395 +v 81.36711883544922 652.29193115234375 22.21689414978027 +v 81.36711883544922 650.44311523437500 25.19602394104004 +v 81.36711883544922 648.39746093750000 27.87006759643555 +v 81.36711883544922 646.17498779296875 30.26830673217773 +v 81.36711883544922 642.65765380859375 33.30834960937500 +v 81.36711883544922 638.95349121093750 35.79554367065430 +v 81.36711883544922 635.18121337890625 37.77937698364258 +v 81.36711883544922 630.28491210937500 39.72027587890625 +v 81.36711883544922 625.70141601562500 41.01430511474609 +v 81.36711883544922 620.84014892578125 41.91417312622070 +v 81.36711883544922 617.34210205078125 42.26937484741211 +v 81.36711883544922 615.69537353515625 42.33149719238281 +# 132 vertices + +# 0 normal + +# 0 texture coordinate + +g 挤压.3_1 +usemtl 材质 +f 1649/1/1 1650/2/2 1683/3/2 1682/4/1 +f 1650/2/2 1651/5/3 1684/6/3 1683/3/2 +f 1651/5/3 1652/7/4 1685/8/4 1684/6/3 +f 1652/7/4 1653/9/5 1686/10/5 1685/8/4 +f 1653/9/5 1654/11/6 1687/12/6 1686/10/5 +f 1654/11/6 1655/13/7 1688/14/7 1687/12/6 +f 1655/13/7 1656/15/8 1689/16/8 1688/14/7 +f 1656/15/8 1657/17/9 1690/18/9 1689/16/8 +f 1657/17/9 1658/19/10 1691/20/10 1690/18/9 +f 1658/19/10 1659/21/11 1692/22/11 1691/20/10 +f 1659/21/11 1660/23/12 1693/24/12 1692/22/11 +f 1660/23/12 1661/25/13 1694/26/13 1693/24/12 +f 1661/25/13 1662/27/14 1695/28/14 1694/26/13 +f 1662/27/14 1663/29/15 1696/30/15 1695/28/14 +f 1663/29/15 1664/31/16 1697/32/16 1696/30/15 +f 1664/31/16 1665/33/17 1698/34/17 1697/32/16 +f 1665/33/17 1666/35/18 1699/36/18 1698/34/17 +f 1666/35/18 1667/37/19 1700/38/19 1699/36/18 +f 1667/37/19 1668/39/20 1701/40/20 1700/38/19 +f 1668/39/20 1669/41/21 1702/42/21 1701/40/20 +f 1669/41/21 1670/43/22 1703/44/22 1702/42/21 +f 1670/43/22 1671/45/23 1704/46/23 1703/44/22 +f 1671/45/23 1672/47/24 1705/48/24 1704/46/23 +f 1672/47/24 1673/49/25 1706/50/25 1705/48/24 +f 1673/49/25 1674/51/26 1707/52/26 1706/50/25 +f 1674/51/26 1675/53/27 1708/54/27 1707/52/26 +f 1675/53/27 1676/55/28 1709/56/28 1708/54/27 +f 1676/55/28 1677/57/29 1710/58/29 1709/56/28 +f 1677/57/29 1678/59/30 1711/60/30 1710/58/29 +f 1678/59/30 1679/61/31 1712/62/31 1711/60/30 +f 1679/61/31 1680/63/32 1713/64/32 1712/62/31 +f 1680/63/32 1681/65/33 1714/66/33 1713/64/32 +f 1583/1/1 1649/1/1 1682/4/1 1616/4/1 +f 1616/4/1 1682/4/1 1683/3/2 1617/3/2 +f 1584/2/2 1650/2/2 1649/1/1 1583/1/1 +f 1617/3/2 1683/3/2 1684/6/3 1618/6/3 +f 1585/5/3 1651/5/3 1650/2/2 1584/2/2 +f 1618/6/3 1684/6/3 1685/8/4 1619/8/4 +f 1586/7/4 1652/7/4 1651/5/3 1585/5/3 +f 1619/8/4 1685/8/4 1686/10/5 1620/10/5 +f 1587/9/5 1653/9/5 1652/7/4 1586/7/4 +f 1620/10/5 1686/10/5 1687/12/6 1621/12/6 +f 1588/11/6 1654/11/6 1653/9/5 1587/9/5 +f 1621/12/6 1687/12/6 1688/14/7 1622/14/7 +f 1589/13/7 1655/13/7 1654/11/6 1588/11/6 +f 1622/14/7 1688/14/7 1689/16/8 1623/16/8 +f 1590/15/8 1656/15/8 1655/13/7 1589/13/7 +f 1623/16/8 1689/16/8 1690/18/9 1624/18/9 +f 1591/17/9 1657/17/9 1656/15/8 1590/15/8 +f 1624/18/9 1690/18/9 1691/20/10 1625/20/10 +f 1592/19/10 1658/19/10 1657/17/9 1591/17/9 +f 1625/20/10 1691/20/10 1692/22/11 1626/22/11 +f 1593/21/11 1659/21/11 1658/19/10 1592/19/10 +f 1626/22/11 1692/22/11 1693/24/12 1627/24/12 +f 1594/23/12 1660/23/12 1659/21/11 1593/21/11 +f 1627/24/12 1693/24/12 1694/26/13 1628/26/13 +f 1595/25/13 1661/25/13 1660/23/12 1594/23/12 +f 1628/26/13 1694/26/13 1695/28/14 1629/28/14 +f 1596/27/14 1662/27/14 1661/25/13 1595/25/13 +f 1629/28/14 1695/28/14 1696/30/15 1630/30/15 +f 1597/29/15 1663/29/15 1662/27/14 1596/27/14 +f 1630/30/15 1696/30/15 1697/32/16 1631/32/16 +f 1598/31/16 1664/31/16 1663/29/15 1597/29/15 +f 1631/32/16 1697/32/16 1698/34/17 1632/34/17 +f 1599/33/17 1665/33/17 1664/31/16 1598/31/16 +f 1632/34/17 1698/34/17 1699/36/18 1633/36/18 +f 1600/35/18 1666/35/18 1665/33/17 1599/33/17 +f 1633/36/18 1699/36/18 1700/38/19 1634/38/19 +f 1601/37/19 1667/37/19 1666/35/18 1600/35/18 +f 1634/38/19 1700/38/19 1701/40/20 1635/40/20 +f 1602/39/20 1668/39/20 1667/37/19 1601/37/19 +f 1635/40/20 1701/40/20 1702/42/21 1636/42/21 +f 1603/41/21 1669/41/21 1668/39/20 1602/39/20 +f 1636/42/21 1702/42/21 1703/44/22 1637/44/22 +f 1604/43/22 1670/43/22 1669/41/21 1603/41/21 +f 1637/44/22 1703/44/22 1704/46/23 1638/46/23 +f 1605/45/23 1671/45/23 1670/43/22 1604/43/22 +f 1638/46/23 1704/46/23 1705/48/24 1639/48/24 +f 1606/47/24 1672/47/24 1671/45/23 1605/45/23 +f 1639/48/24 1705/48/24 1706/50/25 1640/50/25 +f 1607/49/25 1673/49/25 1672/47/24 1606/47/24 +f 1640/50/25 1706/50/25 1707/52/26 1641/52/26 +f 1608/51/26 1674/51/26 1673/49/25 1607/49/25 +f 1641/52/26 1707/52/26 1708/54/27 1642/54/27 +f 1609/53/27 1675/53/27 1674/51/26 1608/51/26 +f 1642/54/27 1708/54/27 1709/56/28 1643/56/28 +f 1610/55/28 1676/55/28 1675/53/27 1609/53/27 +f 1643/56/28 1709/56/28 1710/58/29 1644/58/29 +f 1611/57/29 1677/57/29 1676/55/28 1610/55/28 +f 1644/58/29 1710/58/29 1711/60/30 1645/60/30 +f 1612/59/30 1678/59/30 1677/57/29 1611/57/29 +f 1645/60/30 1711/60/30 1712/62/31 1646/62/31 +f 1613/61/31 1679/61/31 1678/59/30 1612/59/30 +f 1646/62/31 1712/62/31 1713/64/32 1647/64/32 +f 1614/63/32 1680/63/32 1679/61/31 1613/61/31 +f 1647/64/32 1713/64/32 1714/66/33 1648/66/33 +f 1648/66/33 1714/66/33 1681/65/33 1615/65/33 +f 1615/65/33 1681/65/33 1680/63/32 1614/63/32 + diff --git a/modules/dreamview/frontend/dist/42fd7154a4263d7144c619ef5e8b71ac.mtl b/modules/dreamview/frontend/dist/42fd7154a4263d7144c619ef5e8b71ac.mtl new file mode 100644 index 00000000000..bb5445c6d57 --- /dev/null +++ b/modules/dreamview/frontend/dist/42fd7154a4263d7144c619ef5e8b71ac.mtl @@ -0,0 +1,33 @@ +# WaveFront *.mtl file (generated by CINEMA 4D) + +newmtl default +Kd 0.93725490570068 0.87058824300766 0.80392158031464 + +newmtl 材质 +Ka 1.00000000000000 1.00000000000000 1.00000000000000 +Kd 0.5 0.5 0.5 +Ks 1.00000000000000 1.00000000000000 1.00000000000000 +Ns 50 +illum 0 + +newmtl 材质.3 +Ka 0.04835109412670 0.72985404729843 0.05970947816968 +Kd 0.19253069162369 0.74375396966934 0.20171774923801 +Ks 1.00000000000000 1.00000000000000 1.00000000000000 +Ns 50 +illum 0 + +newmtl 材质.2 +Ka 0.99093830585480 0.67714118957520 0.00000000000000 +Kd 1.00000000000000 0.66666668653488 0.00000000000000 +Ks 1.00000000000000 1.00000000000000 1.00000000000000 +Ns 50 +illum 0 + +newmtl 材质.1 +Ka 1.00000000000000 0.00000000000000 0.00000000000000 +Kd 1.00000000000000 0.00000000000000 0.00000000000000 +Ks 1.00000000000000 1.00000000000000 1.00000000000000 +Ns 50 +illum 0 + diff --git a/modules/dreamview/frontend/dist/app.bundle.js b/modules/dreamview/frontend/dist/app.bundle.js index 2165ed5c343..b797a9b62c7 100644 --- a/modules/dreamview/frontend/dist/app.bundle.js +++ b/modules/dreamview/frontend/dist/app.bundle.js @@ -1,14 +1,28 @@ -!function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="/",e(e.s=144)}([function(t,e,n){"use strict";function r(t,e,n,r,o,a,s,u){if(i(e),!t){var c;if(void 0===e)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,o,a,s,u],h=0;c=new Error(e.replace(/%s/g,function(){return l[h++]})),c.name="Invariant Violation"}throw c.framesToPop=1,c}}var i=function(t){};t.exports=r},function(t,e,n){"use strict";var r=n(10),i=r;t.exports=i},function(t,e,n){"use strict";function r(t){for(var e=arguments.length-1,n="Minified React error #"+t+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+t,r=0;r6?s-6:0),c=6;c>",a=a||r,null==n[r]){if(e){var s=null===n[r]?"null":"undefined";return new Error("The "+o+" `"+a+"` is marked as required in `"+i+"`, but its value is `"+s+"`.")}return null}return t.apply(void 0,[n,r,i,o,a].concat(u))})}var n=e.bind(null,!1);return n.isRequired=e.bind(null,!0),n}function i(t,e){return"symbol"===t||("Symbol"===e["@@toStringTag"]||"function"==typeof Symbol&&e instanceof Symbol)}function o(t){var e=void 0===t?"undefined":c(t);return Array.isArray(t)?"array":t instanceof RegExp?"object":i(e,t)?"symbol":e}function a(t){var e=o(t);if("object"===e){if(t instanceof Date)return"date";if(t instanceof RegExp)return"regexp"}return e}function s(t,e){return r(function(n,r,i,s,u){return(0,l.untracked)(function(){if(t&&o(n[r])===e.toLowerCase())return null;var s=void 0;switch(e){case"Array":s=l.isObservableArray;break;case"Object":s=l.isObservableObject;break;case"Map":s=l.isObservableMap;break;default:throw new Error("Unexpected mobxType: "+e)}var c=n[r];if(!s(c)){var h=a(c),p=t?" or javascript `"+e.toLowerCase()+"`":"";return new Error("Invalid prop `"+u+"` of type `"+h+"` supplied to `"+i+"`, expected `mobx.Observable"+e+"`"+p+".")}return null})})}function u(t,e){return r(function(n,r,i,o,a){for(var u=arguments.length,c=Array(u>5?u-5:0),h=5;h2&&void 0!==arguments[2]&&arguments[2],r=t[e],i=O[e],o=r?!0===n?function(){i.apply(this,arguments),r.apply(this,arguments)}:function(){r.apply(this,arguments),i.apply(this,arguments)}:i;t[e]=o}function p(t,e){if(null==t||null==e||"object"!==(void 0===t?"undefined":v(t))||"object"!==(void 0===e?"undefined":v(e)))return t!==e;var n=Object.keys(t);if(n.length!==Object.keys(e).length)return!0;for(var r=void 0,i=n.length-1;r=n[i];i--)if(e[r]!==t[r])return!0;return!1}function d(t,e){if("string"==typeof t)throw new Error("Store names should be provided as array");if(Array.isArray(t))return P||(P=!0,console.warn('Mobx observer: Using observer to inject stores is deprecated since 4.0. Use `@inject("store1", "store2") @observer ComponentClass` or `inject("store1", "store2")(observer(componentClass))` instead of `@observer(["store1", "store2"]) ComponentClass`')),e?S.default.apply(null,t)(d(e)):function(e){return d(t,e)};var n=t;if(!0===n.isMobxInjector&&console.warn("Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'"),!("function"!=typeof n||n.prototype&&n.prototype.render||n.isReactClass||b.default.Component.isPrototypeOf(n))){var r,s;return d((s=r=function(t){function e(){return i(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return a(e,t),m(e,[{key:"render",value:function(){return n.call(this,this.props,this.context)}}]),e}(y.Component),r.displayName=n.displayName||n.name,r.contextTypes=n.contextTypes,r.propTypes=n.propTypes,r.defaultProps=n.defaultProps,s))}if(!n)throw new Error("Please pass a valid component to 'observer'");return f(n.prototype||n),n.isMobXReactObserver=!0,n}function f(t){h(t,"componentWillMount",!0),["componentDidMount","componentWillUnmount","componentDidUpdate"].forEach(function(e){h(t,e)}),t.shouldComponentUpdate||(t.shouldComponentUpdate=O.shouldComponentUpdate)}Object.defineProperty(e,"__esModule",{value:!0}),e.Observer=e.renderReporter=e.componentByNodeRegistery=void 0;var m=function(){function t(t,e){for(var n=0;n",r=this._reactInternalInstance&&this._reactInternalInstance._rootNodeID,i=!1,o=!1;t.call(this,"props"),t.call(this,"state");var a=this.render.bind(this),s=null,u=!1,c=function(){return s=new g.Reaction(n+"#"+r+".render()",function(){if(!u&&(u=!0,"function"==typeof e.componentWillReact&&e.componentWillReact(),!0!==e.__$mobxIsUnmounted)){var t=!0;try{o=!0,i||b.default.Component.prototype.forceUpdate.call(e),t=!1}finally{o=!1,t&&s.dispose()}}}),l.$mobx=s,e.render=l,l()},l=function(){u=!1;var t=void 0,n=void 0;if(s.track(function(){A&&(e.__$mobRenderStart=Date.now());try{n=g.extras.allowStateChanges(!1,a)}catch(e){t=e}A&&(e.__$mobRenderEnd=Date.now())}),t)throw t;return n};this.render=c}},componentWillUnmount:function(){if(!0!==C&&(this.render.$mobx&&this.render.$mobx.dispose(),this.__$mobxIsUnmounted=!0,A)){var t=s(this);t&&L&&L.delete(t),R.emit({event:"destroy",component:this,node:t})}},componentDidMount:function(){A&&u(this)},componentDidUpdate:function(){A&&u(this)},shouldComponentUpdate:function(t,e){return C&&console.warn("[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side."),this.state!==e||p(this.props,t)}};(e.Observer=d(function(t){return(0,t.children)()})).propTypes={children:function(t,e,n,r,i){if("function"!=typeof t[e])return new Error("Invalid prop `"+i+"` of type `"+v(t[e])+"` supplied to `"+n+"`, expected `function`.")}}},function(t,e){t.exports=n},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var a,s,u=function(){function t(t,e){for(var n=0;n0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}function p(t,e,n,r,i,a,s,u,c,l){t=void 0!==t?t:[],e=void 0!==e?e:ta,o.call(this,t,e,n,r,i,a,s,u,c,l),this.flipY=!1}function d(){this.seq=[],this.map={}}function f(t,e,n){var r=t[0];if(r<=0||r>0)return t;var i=e*n,o=gs[i];if(void 0===o&&(o=new Float32Array(i),gs[i]=o),0!==e){r.toArray(o,0);for(var a=1,s=0;a!==e;++a)s+=n,t[a].toArray(o,s)}return o}function m(t,e){var n=ys[e];void 0===n&&(n=new Int32Array(e),ys[e]=n);for(var r=0;r!==e;++r)n[r]=t.allocTextureUnit();return n}function v(t,e){t.uniform1f(this.addr,e)}function g(t,e){t.uniform1i(this.addr,e)}function y(t,e){void 0===e.x?t.uniform2fv(this.addr,e):t.uniform2f(this.addr,e.x,e.y)}function b(t,e){void 0!==e.x?t.uniform3f(this.addr,e.x,e.y,e.z):void 0!==e.r?t.uniform3f(this.addr,e.r,e.g,e.b):t.uniform3fv(this.addr,e)}function x(t,e){void 0===e.x?t.uniform4fv(this.addr,e):t.uniform4f(this.addr,e.x,e.y,e.z,e.w)}function _(t,e){t.uniformMatrix2fv(this.addr,!1,e.elements||e)}function w(t,e){t.uniformMatrix3fv(this.addr,!1,e.elements||e)}function M(t,e){t.uniformMatrix4fv(this.addr,!1,e.elements||e)}function E(t,e,n){var r=n.allocTextureUnit();t.uniform1i(this.addr,r),n.setTexture2D(e||ms,r)}function T(t,e,n){var r=n.allocTextureUnit();t.uniform1i(this.addr,r),n.setTextureCube(e||vs,r)}function S(t,e){t.uniform2iv(this.addr,e)}function A(t,e){t.uniform3iv(this.addr,e)}function C(t,e){t.uniform4iv(this.addr,e)}function P(t){switch(t){case 5126:return v;case 35664:return y;case 35665:return b;case 35666:return x;case 35674:return _;case 35675:return w;case 35676:return M;case 35678:return E;case 35680:return T;case 5124:case 35670:return g;case 35667:case 35671:return S;case 35668:case 35672:return A;case 35669:case 35673:return C}}function L(t,e){t.uniform1fv(this.addr,e)}function R(t,e){t.uniform1iv(this.addr,e)}function O(t,e){t.uniform2fv(this.addr,f(e,this.size,2))}function I(t,e){t.uniform3fv(this.addr,f(e,this.size,3))}function N(t,e){t.uniform4fv(this.addr,f(e,this.size,4))}function D(t,e){t.uniformMatrix2fv(this.addr,!1,f(e,this.size,4))}function U(t,e){t.uniformMatrix3fv(this.addr,!1,f(e,this.size,9))}function k(t,e){t.uniformMatrix4fv(this.addr,!1,f(e,this.size,16))}function F(t,e,n){var r=e.length,i=m(n,r);t.uniform1iv(this.addr,i);for(var o=0;o!==r;++o)n.setTexture2D(e[o]||ms,i[o])}function B(t,e,n){var r=e.length,i=m(n,r);t.uniform1iv(this.addr,i);for(var o=0;o!==r;++o)n.setTextureCube(e[o]||vs,i[o])}function z(t){switch(t){case 5126:return L;case 35664:return O;case 35665:return I;case 35666:return N;case 35674:return D;case 35675:return U;case 35676:return k;case 35678:return F;case 35680:return B;case 5124:case 35670:return R;case 35667:case 35671:return S;case 35668:case 35672:return A;case 35669:case 35673:return C}}function j(t,e,n){this.id=t,this.addr=n,this.setValue=P(e.type)}function V(t,e,n){this.id=t,this.addr=n,this.size=e.size,this.setValue=z(e.type)}function G(t){this.id=t,d.call(this)}function H(t,e){t.seq.push(e),t.map[e.id]=e}function W(t,e,n){var r=t.name,i=r.length;for(bs.lastIndex=0;;){var o=bs.exec(r),a=bs.lastIndex,s=o[1],u="]"===o[2],c=o[3];if(u&&(s|=0),void 0===c||"["===c&&a+2===i){H(n,void 0===c?new j(s,t,e):new V(s,t,e));break}var l=n.map,h=l[s];void 0===h&&(h=new G(s),H(n,h)),n=h}}function X(t,e,n){d.call(this),this.renderer=n;for(var r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),i=0;i.001&&R.scale>.001&&(M.x=R.x,M.y=R.y,M.z=R.z,_=R.size*R.scale/v.w,w.x=_*y,w.y=_,f.uniform3f(h.screenPosition,M.x,M.y,M.z),f.uniform2f(h.scale,w.x,w.y),f.uniform1f(h.rotation,R.rotation),f.uniform1f(h.opacity,R.opacity),f.uniform3f(h.color,R.color.r,R.color.g,R.color.b),m.setBlending(R.blending,R.blendEquation,R.blendSrc,R.blendDst),t.setTexture2D(R.texture,1),f.drawElements(f.TRIANGLES,6,f.UNSIGNED_SHORT,0))}}}m.enable(f.CULL_FACE),m.enable(f.DEPTH_TEST),m.setDepthWrite(!0),t.resetGLState()}}}function J(t,e){function n(){var t=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),e=new Uint16Array([0,1,2,0,2,3]);a=f.createBuffer(),s=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,a),f.bufferData(f.ARRAY_BUFFER,t,f.STATIC_DRAW),f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,s),f.bufferData(f.ELEMENT_ARRAY_BUFFER,e,f.STATIC_DRAW),u=r(),h={position:f.getAttribLocation(u,"position"),uv:f.getAttribLocation(u,"uv")},p={uvOffset:f.getUniformLocation(u,"uvOffset"),uvScale:f.getUniformLocation(u,"uvScale"),rotation:f.getUniformLocation(u,"rotation"),scale:f.getUniformLocation(u,"scale"),color:f.getUniformLocation(u,"color"),map:f.getUniformLocation(u,"map"),opacity:f.getUniformLocation(u,"opacity"),modelViewMatrix:f.getUniformLocation(u,"modelViewMatrix"),projectionMatrix:f.getUniformLocation(u,"projectionMatrix"),fogType:f.getUniformLocation(u,"fogType"),fogDensity:f.getUniformLocation(u,"fogDensity"),fogNear:f.getUniformLocation(u,"fogNear"),fogFar:f.getUniformLocation(u,"fogFar"),fogColor:f.getUniformLocation(u,"fogColor"),alphaTest:f.getUniformLocation(u,"alphaTest")};var n=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");n.width=8,n.height=8;var i=n.getContext("2d");i.fillStyle="white",i.fillRect(0,0,8,8),d=new o(n),d.needsUpdate=!0}function r(){var e=f.createProgram(),n=f.createShader(f.VERTEX_SHADER),r=f.createShader(f.FRAGMENT_SHADER);return f.shaderSource(n,["precision "+t.getPrecision()+" float;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform float rotation;","uniform vec2 scale;","uniform vec2 uvOffset;","uniform vec2 uvScale;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","void main() {","vUV = uvOffset + uv * uvScale;","vec2 alignedPosition = position * scale;","vec2 rotatedPosition;","rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;","rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;","vec4 finalPosition;","finalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );","finalPosition.xy += rotatedPosition;","finalPosition = projectionMatrix * finalPosition;","gl_Position = finalPosition;","}"].join("\n")),f.shaderSource(r,["precision "+t.getPrecision()+" float;","uniform vec3 color;","uniform sampler2D map;","uniform float opacity;","uniform int fogType;","uniform vec3 fogColor;","uniform float fogDensity;","uniform float fogNear;","uniform float fogFar;","uniform float alphaTest;","varying vec2 vUV;","void main() {","vec4 texture = texture2D( map, vUV );","if ( texture.a < alphaTest ) discard;","gl_FragColor = vec4( color * texture.xyz, texture.a * opacity );","if ( fogType > 0 ) {","float depth = gl_FragCoord.z / gl_FragCoord.w;","float fogFactor = 0.0;","if ( fogType == 1 ) {","fogFactor = smoothstep( fogNear, fogFar, depth );","} else {","const float LOG2 = 1.442695;","fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );","fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );","}","gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );","}","}"].join("\n")),f.compileShader(n),f.compileShader(r),f.attachShader(e,n),f.attachShader(e,r),f.linkProgram(e),e}function i(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:e.id-t.id}var a,s,u,h,p,d,f=t.context,m=t.state,v=new l,g=new c,y=new l;this.render=function(r,o){if(0!==e.length){void 0===u&&n(),f.useProgram(u),m.initAttributes(),m.enableAttribute(h.position),m.enableAttribute(h.uv),m.disableUnusedAttributes(),m.disable(f.CULL_FACE),m.enable(f.BLEND),f.bindBuffer(f.ARRAY_BUFFER,a),f.vertexAttribPointer(h.position,2,f.FLOAT,!1,16,0),f.vertexAttribPointer(h.uv,2,f.FLOAT,!1,16,8),f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,s),f.uniformMatrix4fv(p.projectionMatrix,!1,o.projectionMatrix.elements),m.activeTexture(f.TEXTURE0),f.uniform1i(p.map,0);var c=0,l=0,b=r.fog;b?(f.uniform3f(p.fogColor,b.color.r,b.color.g,b.color.b),b.isFog?(f.uniform1f(p.fogNear,b.near),f.uniform1f(p.fogFar,b.far),f.uniform1i(p.fogType,1),c=1,l=1):b.isFogExp2&&(f.uniform1f(p.fogDensity,b.density),f.uniform1i(p.fogType,2),c=2,l=2)):(f.uniform1i(p.fogType,0),c=0,l=0);for(var x=0,_=e.length;x<_;x++){var w=e[x];w.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,w.matrixWorld),w.z=-w.modelViewMatrix.elements[14]}e.sort(i);for(var M=[],x=0,_=e.length;x<_;x++){var w=e[x],E=w.material;if(!1!==E.visible){f.uniform1f(p.alphaTest,E.alphaTest),f.uniformMatrix4fv(p.modelViewMatrix,!1,w.modelViewMatrix.elements),w.matrixWorld.decompose(v,g,y),M[0]=y.x,M[1]=y.y;var T=0;r.fog&&E.fog&&(T=l),c!==T&&(f.uniform1i(p.fogType,T),c=T),null!==E.map?(f.uniform2f(p.uvOffset,E.map.offset.x,E.map.offset.y),f.uniform2f(p.uvScale,E.map.repeat.x,E.map.repeat.y)):(f.uniform2f(p.uvOffset,0,0),f.uniform2f(p.uvScale,1,1)),f.uniform1f(p.opacity,E.opacity),f.uniform3f(p.color,E.color.r,E.color.g,E.color.b),f.uniform1f(p.rotation,E.rotation),f.uniform2fv(p.scale,M),m.setBlending(E.blending,E.blendEquation,E.blendSrc,E.blendDst),m.setDepthTest(E.depthTest),m.setDepthWrite(E.depthWrite),E.map?t.setTexture2D(E.map,0):t.setTexture2D(d,0),f.drawElements(f.TRIANGLES,6,f.UNSIGNED_SHORT,0)}}m.enable(f.CULL_FACE),t.resetGLState()}}}function $(){Object.defineProperty(this,"id",{value:Ts++}),this.uuid=ds.generateUUID(),this.name="",this.type="Material",this.fog=!0,this.lights=!0,this.blending=vo,this.side=ao,this.shading=lo,this.vertexColors=ho,this.opacity=1,this.transparent=!1,this.blendSrc=Lo,this.blendDst=Ro,this.blendEquation=_o,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=zo,this.depthTest=!0,this.depthWrite=!0,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.alphaTest=0,this.premultipliedAlpha=!1,this.overdraw=0,this.visible=!0,this._needsUpdate=!0}function Q(t){$.call(this),this.type="ShaderMaterial",this.defines={},this.uniforms={},this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,void 0!==t&&(void 0!==t.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(t))}function tt(t){$.call(this),this.type="MeshDepthMaterial",this.depthPacking=hs,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.setValues(t)}function et(t,e){this.min=void 0!==t?t:new l(1/0,1/0,1/0),this.max=void 0!==e?e:new l(-1/0,-1/0,-1/0)}function nt(t,e){this.center=void 0!==t?t:new l,this.radius=void 0!==e?e:0}function rt(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]),arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}function it(t,e){this.normal=void 0!==t?t:new l(1,0,0),this.constant=void 0!==e?e:0}function ot(t,e,n,r,i,o){this.planes=[void 0!==t?t:new it,void 0!==e?e:new it,void 0!==n?n:new it,void 0!==r?r:new it,void 0!==i?i:new it,void 0!==o?o:new it]}function at(t,e,n,r){function o(e,n,r,i){var o=e.geometry,a=null,s=E,u=e.customDepthMaterial;if(r&&(s=T,u=e.customDistanceMaterial),u)a=u;else{var c=!1;n.morphTargets&&(o&&o.isBufferGeometry?c=o.morphAttributes&&o.morphAttributes.position&&o.morphAttributes.position.length>0:o&&o.isGeometry&&(c=o.morphTargets&&o.morphTargets.length>0));var l=e.isSkinnedMesh&&n.skinning,h=0;c&&(h|=_),l&&(h|=w),a=s[h]}if(t.localClippingEnabled&&!0===n.clipShadows&&0!==n.clippingPlanes.length){var p=a.uuid,d=n.uuid,f=S[p];void 0===f&&(f={},S[p]=f);var m=f[d];void 0===m&&(m=a.clone(),f[d]=m),a=m}a.visible=n.visible,a.wireframe=n.wireframe;var v=n.side;return F.renderSingleSided&&v==uo&&(v=ao),F.renderReverseSided&&(v===ao?v=so:v===so&&(v=ao)),a.side=v,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,r&&void 0!==a.uniforms.lightPos&&a.uniforms.lightPos.value.copy(i),a}function u(t,e,n){if(!1!==t.visible){if(0!=(t.layers.mask&e.layers.mask)&&(t.isMesh||t.isLine||t.isPoints)&&t.castShadow&&(!1===t.frustumCulled||!0===d.intersectsObject(t))){!0===t.material.visible&&(t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,t.matrixWorld),x.push(t))}for(var r=t.children,i=0,o=r.length;in&&(n=t[e]);return n}function At(){return As++}function Ct(){Object.defineProperty(this,"id",{value:At()}),this.uuid=ds.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}function Pt(){Object.defineProperty(this,"id",{value:At()}),this.uuid=ds.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0}}function Lt(t,e){lt.call(this),this.type="Mesh",this.geometry=void 0!==t?t:new Pt,this.material=void 0!==e?e:new ft({color:16777215*Math.random()}),this.drawMode=ts,this.updateMorphTargets()}function Rt(t,e,n,r,i,o){Ct.call(this),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:r,heightSegments:i,depthSegments:o},this.fromBufferGeometry(new Ot(t,e,n,r,i,o)),this.mergeVertices()}function Ot(t,e,n,r,i,o){function a(t,e,n,r,i,o,a,m,v,g,y){var b,x,_=o/v,w=a/g,M=o/2,E=a/2,T=m/2,S=v+1,A=g+1,C=0,P=0,L=new l;for(x=0;x0?1:-1,h.push(L.x,L.y,L.z),p.push(b/v),p.push(1-x/g),C+=1}}for(x=0;x");return $t(n)}var n=/#include +<([\w\d.]+)>/g;return t.replace(n,e)}function Qt(t){function e(t,e,n,r){for(var i="",o=parseInt(e);o0?t.gammaFactor:1,v=qt(o,r,t.extensions),g=Yt(a),y=i.createProgram();n.isRawShaderMaterial?(d=[g,"\n"].filter(Zt).join("\n"),f=[v,g,"\n"].filter(Zt).join("\n")):(d=["precision "+r.precision+" float;","precision "+r.precision+" int;","#define SHADER_NAME "+n.__webglShader.name,g,r.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+m,"#define MAX_BONES "+r.maxBones,r.useFog&&r.fog?"#define USE_FOG":"",r.useFog&&r.fogExp?"#define FOG_EXP2":"",r.map?"#define USE_MAP":"",r.envMap?"#define USE_ENVMAP":"",r.envMap?"#define "+h:"",r.lightMap?"#define USE_LIGHTMAP":"",r.aoMap?"#define USE_AOMAP":"",r.emissiveMap?"#define USE_EMISSIVEMAP":"",r.bumpMap?"#define USE_BUMPMAP":"",r.normalMap?"#define USE_NORMALMAP":"",r.displacementMap&&r.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",r.specularMap?"#define USE_SPECULARMAP":"",r.roughnessMap?"#define USE_ROUGHNESSMAP":"",r.metalnessMap?"#define USE_METALNESSMAP":"",r.alphaMap?"#define USE_ALPHAMAP":"",r.vertexColors?"#define USE_COLOR":"",r.flatShading?"#define FLAT_SHADED":"",r.skinning?"#define USE_SKINNING":"",r.useVertexTexture?"#define BONE_TEXTURE":"",r.morphTargets?"#define USE_MORPHTARGETS":"",r.morphNormals&&!1===r.flatShading?"#define USE_MORPHNORMALS":"",r.doubleSided?"#define DOUBLE_SIDED":"",r.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+r.numClippingPlanes,r.shadowMapEnabled?"#define USE_SHADOWMAP":"",r.shadowMapEnabled?"#define "+c:"",r.sizeAttenuation?"#define USE_SIZEATTENUATION":"",r.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",r.logarithmicDepthBuffer&&t.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Zt).join("\n"),f=[v,"precision "+r.precision+" float;","precision "+r.precision+" int;","#define SHADER_NAME "+n.__webglShader.name,g,r.alphaTest?"#define ALPHATEST "+r.alphaTest:"","#define GAMMA_FACTOR "+m,r.useFog&&r.fog?"#define USE_FOG":"",r.useFog&&r.fogExp?"#define FOG_EXP2":"",r.map?"#define USE_MAP":"",r.envMap?"#define USE_ENVMAP":"",r.envMap?"#define "+l:"",r.envMap?"#define "+h:"",r.envMap?"#define "+p:"",r.lightMap?"#define USE_LIGHTMAP":"",r.aoMap?"#define USE_AOMAP":"",r.emissiveMap?"#define USE_EMISSIVEMAP":"",r.bumpMap?"#define USE_BUMPMAP":"",r.normalMap?"#define USE_NORMALMAP":"",r.specularMap?"#define USE_SPECULARMAP":"",r.roughnessMap?"#define USE_ROUGHNESSMAP":"",r.metalnessMap?"#define USE_METALNESSMAP":"",r.alphaMap?"#define USE_ALPHAMAP":"",r.vertexColors?"#define USE_COLOR":"",r.gradientMap?"#define USE_GRADIENTMAP":"",r.flatShading?"#define FLAT_SHADED":"",r.doubleSided?"#define DOUBLE_SIDED":"",r.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+r.numClippingPlanes,"#define UNION_CLIPPING_PLANES "+(r.numClippingPlanes-r.numClipIntersection),r.shadowMapEnabled?"#define USE_SHADOWMAP":"",r.shadowMapEnabled?"#define "+c:"",r.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",r.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",r.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",r.logarithmicDepthBuffer&&t.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"",r.envMap&&t.extensions.get("EXT_shader_texture_lod")?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",r.toneMapping!==Yo?"#define TONE_MAPPING":"",r.toneMapping!==Yo?_s.tonemapping_pars_fragment:"",r.toneMapping!==Yo?Xt("toneMapping",r.toneMapping):"",r.outputEncoding||r.mapEncoding||r.envMapEncoding||r.emissiveMapEncoding?_s.encodings_pars_fragment:"",r.mapEncoding?Ht("mapTexelToLinear",r.mapEncoding):"",r.envMapEncoding?Ht("envMapTexelToLinear",r.envMapEncoding):"",r.emissiveMapEncoding?Ht("emissiveMapTexelToLinear",r.emissiveMapEncoding):"",r.outputEncoding?Wt("linearToOutputTexel",r.outputEncoding):"",r.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Zt).join("\n")),s=$t(s,r),s=Jt(s,r),u=$t(u,r),u=Jt(u,r),n.isShaderMaterial||(s=Qt(s),u=Qt(u));var b=d+s,x=f+u,_=Vt(i,i.VERTEX_SHADER,b),w=Vt(i,i.FRAGMENT_SHADER,x);i.attachShader(y,_),i.attachShader(y,w),void 0!==n.index0AttributeName?i.bindAttribLocation(y,0,n.index0AttributeName):!0===r.morphTargets&&i.bindAttribLocation(y,0,"position"),i.linkProgram(y);var M=i.getProgramInfoLog(y),E=i.getShaderInfoLog(_),T=i.getShaderInfoLog(w),S=!0,A=!0;!1===i.getProgramParameter(y,i.LINK_STATUS)?(S=!1,console.error("THREE.WebGLProgram: shader error: ",i.getError(),"gl.VALIDATE_STATUS",i.getProgramParameter(y,i.VALIDATE_STATUS),"gl.getProgramInfoLog",M,E,T)):""!==M?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",M):""!==E&&""!==T||(A=!1),A&&(this.diagnostics={runnable:S,material:n,programLog:M,vertexShader:{log:E,prefix:d},fragmentShader:{log:T,prefix:f}}),i.deleteShader(_),i.deleteShader(w);var C;this.getUniforms=function(){return void 0===C&&(C=new X(i,y,t)),C};var P;return this.getAttributes=function(){return void 0===P&&(P=Kt(i,y)),P},this.destroy=function(){i.deleteProgram(y),this.program=void 0},Object.defineProperties(this,{uniforms:{get:function(){return console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms()."),this.getUniforms()}},attributes:{get:function(){return console.warn("THREE.WebGLProgram: .attributes is now .getAttributes()."),this.getAttributes()}}}),this.id=Cs++,this.code=e,this.usedTimes=1,this.program=y,this.vertexShader=_,this.fragmentShader=w,this}function ee(t,e){function n(t){if(e.floatVertexTextures&&t&&t.skeleton&&t.skeleton.useVertexTexture)return 1024;var n=e.maxVertexUniforms,r=Math.floor((n-20)/4),i=r;return void 0!==t&&t&&t.isSkinnedMesh&&(i=Math.min(t.skeleton.bones.length,i))0,shadowMapType:t.shadowMap.type,toneMapping:t.toneMapping,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:i.premultipliedAlpha,alphaTest:i.alphaTest,doubleSided:i.side===uo,flipSided:i.side===so,depthPacking:void 0!==i.depthPacking&&i.depthPacking}},this.getProgramCode=function(t,e){var n=[];if(e.shaderID?n.push(e.shaderID):(n.push(t.fragmentShader),n.push(t.vertexShader)),void 0!==t.defines)for(var r in t.defines)n.push(r),n.push(t.defines[r]);for(var i=0;i65535?wt:xt)(o,1);return i(f,t.ELEMENT_ARRAY_BUFFER),r.wireframe=f,f}var l=new ne(t,e,n);return{getAttributeBuffer:s,getAttributeProperties:u,getWireframeAttribute:c,update:r}}function ie(t,e,n,r,i,o,a){function s(t,e){if(t.width>e||t.height>e){var n=e/Math.max(t.width,t.height),r=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");r.width=Math.floor(t.width*n),r.height=Math.floor(t.height*n);return r.getContext("2d").drawImage(t,0,0,t.width,t.height,0,0,r.width,r.height),console.warn("THREE.WebGLRenderer: image is too big ("+t.width+"x"+t.height+"). Resized to "+r.width+"x"+r.height,t),r}return t}function u(t){return ds.isPowerOfTwo(t.width)&&ds.isPowerOfTwo(t.height)}function c(t){if(t instanceof HTMLImageElement||t instanceof HTMLCanvasElement){var e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");e.width=ds.nearestPowerOfTwo(t.width),e.height=ds.nearestPowerOfTwo(t.height);return e.getContext("2d").drawImage(t,0,0,e.width,e.height),console.warn("THREE.WebGLRenderer: image is not power of two ("+t.width+"x"+t.height+"). Resized to "+e.width+"x"+e.height,t),e}return t}function l(t){return t.wrapS!==ua||t.wrapT!==ua||t.minFilter!==la&&t.minFilter!==da}function h(e){return e===la||e===ha||e===pa?t.NEAREST:t.LINEAR}function p(t){var e=t.target;e.removeEventListener("dispose",p),f(e),A.textures--}function d(t){var e=t.target;e.removeEventListener("dispose",d),m(e),A.textures--}function f(e){var n=r.get(e);if(e.image&&n.__image__webglTextureCube)t.deleteTexture(n.__image__webglTextureCube);else{if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture)}r.delete(e)}function m(e){var n=r.get(e),i=r.get(e.texture);if(e){if(void 0!==i.__webglTexture&&t.deleteTexture(i.__webglTexture),e.depthTexture&&e.depthTexture.dispose(),e.isWebGLRenderTargetCube)for(var o=0;o<6;o++)t.deleteFramebuffer(n.__webglFramebuffer[o]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[o]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer);r.delete(e.texture),r.delete(e)}}function v(e,i){var o=r.get(e);if(e.version>0&&o.__version!==e.version){var a=e.image;if(void 0===a)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",e);else{if(!1!==a.complete)return void x(o,e,i);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",e)}}n.activeTexture(t.TEXTURE0+i),n.bindTexture(t.TEXTURE_2D,o.__webglTexture)}function g(e,a){var c=r.get(e);if(6===e.image.length)if(e.version>0&&c.__version!==e.version){c.__image__webglTextureCube||(e.addEventListener("dispose",p),c.__image__webglTextureCube=t.createTexture(),A.textures++),n.activeTexture(t.TEXTURE0+a),n.bindTexture(t.TEXTURE_CUBE_MAP,c.__image__webglTextureCube),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,e.flipY);for(var l=e&&e.isCompressedTexture,h=e.image[0]&&e.image[0].isDataTexture,d=[],f=0;f<6;f++)d[f]=l||h?h?e.image[f].image:e.image[f]:s(e.image[f],i.maxCubemapSize);var m=d[0],v=u(m),g=o(e.format),y=o(e.type);b(t.TEXTURE_CUBE_MAP,e,v);for(var f=0;f<6;f++)if(l)for(var x,_=d[f].mipmaps,w=0,M=_.length;w-1?n.compressedTexImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+f,w,g,x.width,x.height,0,x.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+f,w,g,x.width,x.height,0,g,y,x.data);else h?n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,g,d[f].width,d[f].height,0,g,y,d[f].data):n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,g,g,y,d[f]);e.generateMipmaps&&v&&t.generateMipmap(t.TEXTURE_CUBE_MAP),c.__version=e.version,e.onUpdate&&e.onUpdate(e)}else n.activeTexture(t.TEXTURE0+a),n.bindTexture(t.TEXTURE_CUBE_MAP,c.__image__webglTextureCube)}function y(e,i){n.activeTexture(t.TEXTURE0+i),n.bindTexture(t.TEXTURE_CUBE_MAP,r.get(e).__webglTexture)}function b(n,a,s){var u;if(s?(t.texParameteri(n,t.TEXTURE_WRAP_S,o(a.wrapS)),t.texParameteri(n,t.TEXTURE_WRAP_T,o(a.wrapT)),t.texParameteri(n,t.TEXTURE_MAG_FILTER,o(a.magFilter)),t.texParameteri(n,t.TEXTURE_MIN_FILTER,o(a.minFilter))):(t.texParameteri(n,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(n,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),a.wrapS===ua&&a.wrapT===ua||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.",a),t.texParameteri(n,t.TEXTURE_MAG_FILTER,h(a.magFilter)),t.texParameteri(n,t.TEXTURE_MIN_FILTER,h(a.minFilter)),a.minFilter!==la&&a.minFilter!==da&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.",a)),u=e.get("EXT_texture_filter_anisotropic")){if(a.type===wa&&null===e.get("OES_texture_float_linear"))return;if(a.type===Ma&&null===e.get("OES_texture_half_float_linear"))return;(a.anisotropy>1||r.get(a).__currentAnisotropy)&&(t.texParameterf(n,u.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,i.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy)}}function x(e,r,a){void 0===e.__webglInit&&(e.__webglInit=!0,r.addEventListener("dispose",p),e.__webglTexture=t.createTexture(),A.textures++),n.activeTexture(t.TEXTURE0+a),n.bindTexture(t.TEXTURE_2D,e.__webglTexture),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,r.flipY),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultiplyAlpha),t.pixelStorei(t.UNPACK_ALIGNMENT,r.unpackAlignment);var h=s(r.image,i.maxTextureSize);l(r)&&!1===u(h)&&(h=c(h));var d=u(h),f=o(r.format),m=o(r.type);b(t.TEXTURE_2D,r,d);var v,g=r.mipmaps;if(r.isDepthTexture){var y=t.DEPTH_COMPONENT;if(r.type===wa){if(!C)throw new Error("Float Depth Texture only supported in WebGL2.0");y=t.DEPTH_COMPONENT32F}else C&&(y=t.DEPTH_COMPONENT16);r.format===Na&&y===t.DEPTH_COMPONENT&&r.type!==ba&&r.type!==_a&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),r.type=ba,m=o(r.type)),r.format===Da&&(y=t.DEPTH_STENCIL,r.type!==Aa&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),r.type=Aa,m=o(r.type))),n.texImage2D(t.TEXTURE_2D,0,y,h.width,h.height,0,f,m,null)}else if(r.isDataTexture)if(g.length>0&&d){for(var x=0,_=g.length;x<_;x++)v=g[x],n.texImage2D(t.TEXTURE_2D,x,f,v.width,v.height,0,f,m,v.data);r.generateMipmaps=!1}else n.texImage2D(t.TEXTURE_2D,0,f,h.width,h.height,0,f,m,h.data);else if(r.isCompressedTexture)for(var x=0,_=g.length;x<_;x++)v=g[x],r.format!==La&&r.format!==Pa?n.getCompressedTextureFormats().indexOf(f)>-1?n.compressedTexImage2D(t.TEXTURE_2D,x,f,v.width,v.height,0,v.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):n.texImage2D(t.TEXTURE_2D,x,f,v.width,v.height,0,f,m,v.data);else if(g.length>0&&d){for(var x=0,_=g.length;x<_;x++)v=g[x],n.texImage2D(t.TEXTURE_2D,x,f,f,m,v);r.generateMipmaps=!1}else n.texImage2D(t.TEXTURE_2D,0,f,f,m,h);r.generateMipmaps&&d&&t.generateMipmap(t.TEXTURE_2D),e.__version=r.version,r.onUpdate&&r.onUpdate(r)}function _(e,i,a,s){var u=o(i.texture.format),c=o(i.texture.type);n.texImage2D(s,0,u,i.width,i.height,0,u,c,null),t.bindFramebuffer(t.FRAMEBUFFER,e),t.framebufferTexture2D(t.FRAMEBUFFER,a,s,r.get(i.texture).__webglTexture,0),t.bindFramebuffer(t.FRAMEBUFFER,null)}function w(e,n){t.bindRenderbuffer(t.RENDERBUFFER,e),n.depthBuffer&&!n.stencilBuffer?(t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,n.width,n.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e)):n.depthBuffer&&n.stencilBuffer?(t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,n.width,n.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e)):t.renderbufferStorage(t.RENDERBUFFER,t.RGBA4,n.width,n.height),t.bindRenderbuffer(t.RENDERBUFFER,null)}function M(e,n){if(n&&n.isWebGLRenderTargetCube)throw new Error("Depth Texture with cube render targets is not supported!");if(t.bindFramebuffer(t.FRAMEBUFFER,e),!n.depthTexture||!n.depthTexture.isDepthTexture)throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");r.get(n.depthTexture).__webglTexture&&n.depthTexture.image.width===n.width&&n.depthTexture.image.height===n.height||(n.depthTexture.image.width=n.width,n.depthTexture.image.height=n.height,n.depthTexture.needsUpdate=!0),v(n.depthTexture,0);var i=r.get(n.depthTexture).__webglTexture;if(n.depthTexture.format===Na)t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.TEXTURE_2D,i,0);else{if(n.depthTexture.format!==Da)throw new Error("Unknown depthTexture format");t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.TEXTURE_2D,i,0)}}function E(e){var n=r.get(e),i=!0===e.isWebGLRenderTargetCube;if(e.depthTexture){if(i)throw new Error("target.depthTexture not supported in Cube render targets");M(n.__webglFramebuffer,e)}else if(i){n.__webglDepthbuffer=[];for(var o=0;o<6;o++)t.bindFramebuffer(t.FRAMEBUFFER,n.__webglFramebuffer[o]),n.__webglDepthbuffer[o]=t.createRenderbuffer(),w(n.__webglDepthbuffer[o],e)}else t.bindFramebuffer(t.FRAMEBUFFER,n.__webglFramebuffer),n.__webglDepthbuffer=t.createRenderbuffer(),w(n.__webglDepthbuffer,e);t.bindFramebuffer(t.FRAMEBUFFER,null)}function T(e){var i=r.get(e),o=r.get(e.texture);e.addEventListener("dispose",d),o.__webglTexture=t.createTexture(),A.textures++;var a=!0===e.isWebGLRenderTargetCube,s=u(e);if(a){i.__webglFramebuffer=[];for(var c=0;c<6;c++)i.__webglFramebuffer[c]=t.createFramebuffer()}else i.__webglFramebuffer=t.createFramebuffer();if(a){n.bindTexture(t.TEXTURE_CUBE_MAP,o.__webglTexture),b(t.TEXTURE_CUBE_MAP,e.texture,s);for(var c=0;c<6;c++)_(i.__webglFramebuffer[c],e,t.COLOR_ATTACHMENT0,t.TEXTURE_CUBE_MAP_POSITIVE_X+c);e.texture.generateMipmaps&&s&&t.generateMipmap(t.TEXTURE_CUBE_MAP),n.bindTexture(t.TEXTURE_CUBE_MAP,null)}else n.bindTexture(t.TEXTURE_2D,o.__webglTexture),b(t.TEXTURE_2D,e.texture,s),_(i.__webglFramebuffer,e,t.COLOR_ATTACHMENT0,t.TEXTURE_2D),e.texture.generateMipmaps&&s&&t.generateMipmap(t.TEXTURE_2D),n.bindTexture(t.TEXTURE_2D,null);e.depthBuffer&&E(e)}function S(e){var i=e.texture;if(i.generateMipmaps&&u(e)&&i.minFilter!==la&&i.minFilter!==da){var o=e&&e.isWebGLRenderTargetCube?t.TEXTURE_CUBE_MAP:t.TEXTURE_2D,a=r.get(i).__webglTexture;n.bindTexture(o,a),t.generateMipmap(o),n.bindTexture(o,null)}}var A=a.memory,C="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext;this.setTexture2D=v,this.setTextureCube=g,this.setTextureCubeDynamic=y,this.setupRenderTarget=T,this.updateRenderTargetMipmap=S}function oe(){var t={};return{get:function(e){var n=e.uuid,r=t[n];return void 0===r&&(r={},t[n]=r),r},delete:function(e){delete t[e.uuid]},clear:function(){t={}}}}function ae(t,e,n){function r(){var e=!1,n=new a,r=null,i=new a;return{setMask:function(n){r===n||e||(t.colorMask(n,n,n,n),r=n)},setLocked:function(t){e=t},setClear:function(e,r,o,a,s){!0===s&&(e*=a,r*=a,o*=a),n.set(e,r,o,a),!1===i.equals(n)&&(t.clearColor(e,r,o,a),i.copy(n))},reset:function(){e=!1,r=null,i.set(0,0,0,1)}}}function i(){var e=!1,n=null,r=null,i=null;return{setTest:function(e){e?d(t.DEPTH_TEST):f(t.DEPTH_TEST)},setMask:function(r){n===r||e||(t.depthMask(r),n=r)},setFunc:function(e){if(r!==e){if(e)switch(e){case ko:t.depthFunc(t.NEVER);break;case Fo:t.depthFunc(t.ALWAYS);break;case Bo:t.depthFunc(t.LESS);break;case zo:t.depthFunc(t.LEQUAL);break;case jo:t.depthFunc(t.EQUAL);break;case Vo:t.depthFunc(t.GEQUAL);break;case Go:t.depthFunc(t.GREATER);break;case Ho:t.depthFunc(t.NOTEQUAL);break;default:t.depthFunc(t.LEQUAL)}else t.depthFunc(t.LEQUAL);r=e}},setLocked:function(t){e=t},setClear:function(e){i!==e&&(t.clearDepth(e),i=e)},reset:function(){e=!1,n=null,r=null,i=null}}}function o(){var e=!1,n=null,r=null,i=null,o=null,a=null,s=null,u=null,c=null;return{setTest:function(e){e?d(t.STENCIL_TEST):f(t.STENCIL_TEST)},setMask:function(r){n===r||e||(t.stencilMask(r),n=r)},setFunc:function(e,n,a){r===e&&i===n&&o===a||(t.stencilFunc(e,n,a),r=e,i=n,o=a)},setOp:function(e,n,r){a===e&&s===n&&u===r||(t.stencilOp(e,n,r),a=e,s=n,u=r)},setLocked:function(t){e=t},setClear:function(e){c!==e&&(t.clearStencil(e),c=e)},reset:function(){e=!1,n=null,r=null,i=null,o=null,a=null,s=null,u=null,c=null}}}function s(e,n,r){var i=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(e,t.TEXTURE_MAG_FILTER,t.NEAREST);for(var a=0;a=1,lt=null,ht={},pt=new a,dt=new a,ft={};return ft[t.TEXTURE_2D]=s(t.TEXTURE_2D,t.TEXTURE_2D,1),ft[t.TEXTURE_CUBE_MAP]=s(t.TEXTURE_CUBE_MAP,t.TEXTURE_CUBE_MAP_POSITIVE_X,6),{buffers:{color:F,depth:B,stencil:z},init:u,initAttributes:c,enableAttribute:l,enableAttributeAndDivisor:h,disableUnusedAttributes:p,enable:d,disable:f,getCompressedTextureFormats:m,setBlending:v,setColorWrite:g,setDepthTest:y,setDepthWrite:b,setDepthFunc:x,setStencilTest:_,setStencilWrite:w,setStencilFunc:M,setStencilOp:E,setFlipSided:T,setCullFace:S,setLineWidth:A,setPolygonOffset:C,getScissorTest:P,setScissorTest:L,activeTexture:R,bindTexture:O,compressedTexImage2D:I,texImage2D:N,scissor:D,viewport:U,reset:k}}function se(t,e,n){function r(){if(void 0!==o)return o;var n=e.get("EXT_texture_filter_anisotropic");return o=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}function i(e){if("highp"===e){if(t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.HIGH_FLOAT).precision>0&&t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.HIGH_FLOAT).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.MEDIUM_FLOAT).precision>0&&t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}var o,a=void 0!==n.precision?n.precision:"highp",s=i(a);s!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",s,"instead."),a=s);var u=!0===n.logarithmicDepthBuffer&&!!e.get("EXT_frag_depth"),c=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),l=t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS),h=t.getParameter(t.MAX_TEXTURE_SIZE),p=t.getParameter(t.MAX_CUBE_MAP_TEXTURE_SIZE),d=t.getParameter(t.MAX_VERTEX_ATTRIBS),f=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS),m=t.getParameter(t.MAX_VARYING_VECTORS),v=t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS),g=l>0,y=!!e.get("OES_texture_float");return{getMaxAnisotropy:r,getMaxPrecision:i,precision:a,logarithmicDepthBuffer:u,maxTextures:c,maxVertexTextures:l,maxTextureSize:h,maxCubemapSize:p,maxAttributes:d,maxVertexUniforms:f,maxVaryings:m,maxFragmentUniforms:v,vertexTextures:g,floatFragmentTextures:y,floatVertexTextures:g&&y}}function ue(t){var e={};return{get:function(n){if(void 0!==e[n])return e[n];var r;switch(n){case"WEBGL_depth_texture":r=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":r=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":r=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":r=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":r=t.getExtension("WEBGL_compressed_texture_etc1");break;default:r=t.getExtension(n)}return null===r&&console.warn("THREE.WebGLRenderer: "+n+" extension not supported."),e[n]=r,r}}}function ce(){function t(){c.value!==r&&(c.value=r,c.needsUpdate=i>0),n.numPlanes=i,n.numIntersection=0}function e(t,e,r,i){var o=null!==t?t.length:0,a=null;if(0!==o){if(a=c.value,!0!==i||null===a){var l=r+4*o,h=e.matrixWorldInverse;u.getNormalMatrix(h),(null===a||a.length=0){var l=o[u];if(void 0!==l){var h=l.normalized,p=l.itemSize,d=he.getAttributeProperties(l),f=d.__webglBuffer,m=d.type,v=d.bytesPerElement;if(l.isInterleavedBufferAttribute){var g=l.data,y=g.stride,b=l.offset;g&&g.isInstancedInterleavedBuffer?(te.enableAttributeAndDivisor(c,g.meshPerAttribute,i),void 0===n.maxInstancedCount&&(n.maxInstancedCount=g.meshPerAttribute*g.count)):te.enableAttribute(c),Zt.bindBuffer(Zt.ARRAY_BUFFER,f),Zt.vertexAttribPointer(c,p,m,h,y*v,(r*y+b)*v)}else l.isInstancedBufferAttribute?(te.enableAttributeAndDivisor(c,l.meshPerAttribute,i),void 0===n.maxInstancedCount&&(n.maxInstancedCount=l.meshPerAttribute*l.count)):te.enableAttribute(c),Zt.bindBuffer(Zt.ARRAY_BUFFER,f),Zt.vertexAttribPointer(c,p,m,h,0,r*p*v)}else if(void 0!==s){var x=s[u];if(void 0!==x)switch(x.length){case 2:Zt.vertexAttrib2fv(c,x);break;case 3:Zt.vertexAttrib3fv(c,x);break;case 4:Zt.vertexAttrib4fv(c,x);break;default:Zt.vertexAttrib1fv(c,x)}}}}te.disableUnusedAttributes()}function p(t,e){return Math.abs(e[0])-Math.abs(t[0])}function d(t,e){return t.object.renderOrder!==e.object.renderOrder?t.object.renderOrder-e.object.renderOrder:t.material.program&&e.material.program&&t.material.program!==e.material.program?t.material.program.id-e.material.program.id:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function f(t,e){return t.object.renderOrder!==e.object.renderOrder?t.object.renderOrder-e.object.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function m(t,e,n,r,i){var o,a;n.transparent?(o=rt,a=++it):(o=tt,a=++et);var s=o[a];void 0!==s?(s.id=t.id,s.object=t,s.geometry=e,s.material=n,s.z=Wt.z,s.group=i):(s={id:t.id,object:t,geometry:e,material:n,z:Wt.z,group:i},o.push(s))}function v(t){var e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Gt.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),y(Gt)}function g(t){return Gt.center.set(0,0,0),Gt.radius=.7071067811865476,Gt.applyMatrix4(t.matrixWorld),y(Gt)}function y(t){if(!It.intersectsSphere(t))return!1;var e=Dt.numPlanes;if(0===e)return!0;var n=lt.clippingPlanes,r=t.center,i=-t.radius,o=0;do{if(n[o].distanceToPoint(r)=0&&t.numSupportedMorphTargets++}if(t.morphNormals){t.numSupportedMorphNormals=0;for(var p=0;p=0&&t.numSupportedMorphNormals++}var d=r.__webglShader.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)&&!0!==t.clipping||(r.numClippingPlanes=Dt.numPlanes,r.numIntersection=Dt.numIntersection,d.clippingPlanes=Dt.uniform),r.fog=e,r.lightsHash=Yt.hash,t.lights&&(d.ambientLightColor.value=Yt.ambient,d.directionalLights.value=Yt.directional,d.spotLights.value=Yt.spot,d.rectAreaLights.value=Yt.rectArea,d.pointLights.value=Yt.point,d.hemisphereLights.value=Yt.hemi,d.directionalShadowMap.value=Yt.directionalShadowMap,d.directionalShadowMatrix.value=Yt.directionalShadowMatrix,d.spotShadowMap.value=Yt.spotShadowMap,d.spotShadowMatrix.value=Yt.spotShadowMatrix,d.pointShadowMap.value=Yt.pointShadowMap,d.pointShadowMatrix.value=Yt.pointShadowMatrix);var f=r.program.getUniforms(),m=X.seqWithValue(f.seq,d);r.uniformsList=m}function w(t){t.side===uo?te.disable(Zt.CULL_FACE):te.enable(Zt.CULL_FACE),te.setFlipSided(t.side===so),!0===t.transparent?te.setBlending(t.blending,t.blendEquation,t.blendSrc,t.blendDst,t.blendEquationAlpha,t.blendSrcAlpha,t.blendDstAlpha,t.premultipliedAlpha):te.setBlending(mo),te.setDepthFunc(t.depthFunc),te.setDepthTest(t.depthTest),te.setDepthWrite(t.depthWrite),te.setColorWrite(t.colorWrite),te.setPolygonOffset(t.polygonOffset,t.polygonOffsetFactor,t.polygonOffsetUnits)}function M(t,e,n,r){_t=0;var i=ne.get(n);if(jt&&(Vt||t!==gt)){var o=t===gt&&n.id===mt;Dt.setState(n.clippingPlanes,n.clipIntersection,n.clipShadows,t,i,o)}!1===n.needsUpdate&&(void 0===i.program?n.needsUpdate=!0:n.fog&&i.fog!==e?n.needsUpdate=!0:n.lights&&i.lightsHash!==Yt.hash?n.needsUpdate=!0:void 0===i.numClippingPlanes||i.numClippingPlanes===Dt.numPlanes&&i.numIntersection===Dt.numIntersection||(n.needsUpdate=!0)),n.needsUpdate&&(_(n,e,r),n.needsUpdate=!1);var a=!1,s=!1,u=!1,c=i.program,l=c.getUniforms(),h=i.__webglShader.uniforms;if(c.id!==ht&&(Zt.useProgram(c.program),ht=c.id,a=!0,s=!0,u=!0),n.id!==mt&&(mt=n.id,s=!0),a||t!==gt){if(l.set(Zt,t,"projectionMatrix"),Qt.logarithmicDepthBuffer&&l.setValue(Zt,"logDepthBufFC",2/(Math.log(t.far+1)/Math.LN2)),t!==gt&&(gt=t,s=!0,u=!0),n.isShaderMaterial||n.isMeshPhongMaterial||n.isMeshStandardMaterial||n.envMap){var p=l.map.cameraPosition;void 0!==p&&p.setValue(Zt,Wt.setFromMatrixPosition(t.matrixWorld))}(n.isMeshPhongMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial||n.skinning)&&l.setValue(Zt,"viewMatrix",t.matrixWorldInverse),l.set(Zt,lt,"toneMappingExposure"),l.set(Zt,lt,"toneMappingWhitePoint")}if(n.skinning){l.setOptional(Zt,r,"bindMatrix"),l.setOptional(Zt,r,"bindMatrixInverse");var d=r.skeleton;d&&(Qt.floatVertexTextures&&d.useVertexTexture?(l.set(Zt,d,"boneTexture"),l.set(Zt,d,"boneTextureWidth"),l.set(Zt,d,"boneTextureHeight")):l.setOptional(Zt,d,"boneMatrices"))}return s&&(n.lights&&D(h,u),e&&n.fog&&C(h,e),(n.isMeshBasicMaterial||n.isMeshLambertMaterial||n.isMeshPhongMaterial||n.isMeshStandardMaterial||n.isMeshNormalMaterial||n.isMeshDepthMaterial)&&E(h,n),n.isLineBasicMaterial?T(h,n):n.isLineDashedMaterial?(T(h,n),S(h,n)):n.isPointsMaterial?A(h,n):n.isMeshLambertMaterial?P(h,n):n.isMeshToonMaterial?R(h,n):n.isMeshPhongMaterial?L(h,n):n.isMeshPhysicalMaterial?I(h,n):n.isMeshStandardMaterial?O(h,n):n.isMeshDepthMaterial?n.displacementMap&&(h.displacementMap.value=n.displacementMap,h.displacementScale.value=n.displacementScale,h.displacementBias.value=n.displacementBias):n.isMeshNormalMaterial&&N(h,n),void 0!==h.ltcMat&&(h.ltcMat.value=THREE.UniformsLib.LTC_MAT_TEXTURE),void 0!==h.ltcMag&&(h.ltcMag.value=THREE.UniformsLib.LTC_MAG_TEXTURE),X.upload(Zt,i.uniformsList,h,lt)),l.set(Zt,r,"modelViewMatrix"),l.set(Zt,r,"normalMatrix"),l.setValue(Zt,"modelMatrix",r.matrixWorld),c}function E(t,e){t.opacity.value=e.opacity,t.diffuse.value=e.color,e.emissive&&t.emissive.value.copy(e.emissive).multiplyScalar(e.emissiveIntensity),t.map.value=e.map,t.specularMap.value=e.specularMap,t.alphaMap.value=e.alphaMap,e.lightMap&&(t.lightMap.value=e.lightMap,t.lightMapIntensity.value=e.lightMapIntensity),e.aoMap&&(t.aoMap.value=e.aoMap,t.aoMapIntensity.value=e.aoMapIntensity);var n;if(e.map?n=e.map:e.specularMap?n=e.specularMap:e.displacementMap?n=e.displacementMap:e.normalMap?n=e.normalMap:e.bumpMap?n=e.bumpMap:e.roughnessMap?n=e.roughnessMap:e.metalnessMap?n=e.metalnessMap:e.alphaMap?n=e.alphaMap:e.emissiveMap&&(n=e.emissiveMap),void 0!==n){n.isWebGLRenderTarget&&(n=n.texture);var r=n.offset,i=n.repeat;t.offsetRepeat.value.set(r.x,r.y,i.x,i.y)}t.envMap.value=e.envMap,t.flipEnvMap.value=e.envMap&&e.envMap.isCubeTexture?-1:1,t.reflectivity.value=e.reflectivity,t.refractionRatio.value=e.refractionRatio}function T(t,e){t.diffuse.value=e.color,t.opacity.value=e.opacity}function S(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}function A(t,e){if(t.diffuse.value=e.color,t.opacity.value=e.opacity,t.size.value=e.size*St,t.scale.value=.5*Tt,t.map.value=e.map,null!==e.map){var n=e.map.offset,r=e.map.repeat;t.offsetRepeat.value.set(n.x,n.y,r.x,r.y)}}function C(t,e){t.fogColor.value=e.color,e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)}function P(t,e){e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap)}function L(t,e){t.specular.value=e.specular,t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function R(t,e){L(t,e),e.gradientMap&&(t.gradientMap.value=e.gradientMap)}function O(t,e){t.roughness.value=e.roughness,t.metalness.value=e.metalness,e.roughnessMap&&(t.roughnessMap.value=e.roughnessMap),e.metalnessMap&&(t.metalnessMap.value=e.metalnessMap),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias),e.envMap&&(t.envMapIntensity.value=e.envMapIntensity)}function I(t,e){t.clearCoat.value=e.clearCoat,t.clearCoatRoughness.value=e.clearCoatRoughness,O(t,e)}function N(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function D(t,e){t.ambientLightColor.needsUpdate=e,t.directionalLights.needsUpdate=e,t.pointLights.needsUpdate=e,t.spotLights.needsUpdate=e,t.rectAreaLights.needsUpdate=e,t.hemisphereLights.needsUpdate=e}function U(t){for(var e=0,n=0,r=t.length;n=Qt.maxTextures&&console.warn("WebGLRenderer: trying to use "+t+" texture units while this GPU supports only "+Qt.maxTextures),_t+=1,t}function B(t){var e;if(t===sa)return Zt.REPEAT;if(t===ua)return Zt.CLAMP_TO_EDGE;if(t===ca)return Zt.MIRRORED_REPEAT;if(t===la)return Zt.NEAREST;if(t===ha)return Zt.NEAREST_MIPMAP_NEAREST;if(t===pa)return Zt.NEAREST_MIPMAP_LINEAR;if(t===da)return Zt.LINEAR;if(t===fa)return Zt.LINEAR_MIPMAP_NEAREST;if(t===ma)return Zt.LINEAR_MIPMAP_LINEAR;if(t===va)return Zt.UNSIGNED_BYTE;if(t===Ea)return Zt.UNSIGNED_SHORT_4_4_4_4;if(t===Ta)return Zt.UNSIGNED_SHORT_5_5_5_1;if(t===Sa)return Zt.UNSIGNED_SHORT_5_6_5;if(t===ga)return Zt.BYTE;if(t===ya)return Zt.SHORT;if(t===ba)return Zt.UNSIGNED_SHORT;if(t===xa)return Zt.INT;if(t===_a)return Zt.UNSIGNED_INT;if(t===wa)return Zt.FLOAT;if(t===Ma&&null!==(e=$t.get("OES_texture_half_float")))return e.HALF_FLOAT_OES;if(t===Ca)return Zt.ALPHA;if(t===Pa)return Zt.RGB;if(t===La)return Zt.RGBA;if(t===Ra)return Zt.LUMINANCE;if(t===Oa)return Zt.LUMINANCE_ALPHA;if(t===Na)return Zt.DEPTH_COMPONENT;if(t===Da)return Zt.DEPTH_STENCIL;if(t===_o)return Zt.FUNC_ADD;if(t===wo)return Zt.FUNC_SUBTRACT;if(t===Mo)return Zt.FUNC_REVERSE_SUBTRACT;if(t===So)return Zt.ZERO;if(t===Ao)return Zt.ONE;if(t===Co)return Zt.SRC_COLOR;if(t===Po)return Zt.ONE_MINUS_SRC_COLOR;if(t===Lo)return Zt.SRC_ALPHA;if(t===Ro)return Zt.ONE_MINUS_SRC_ALPHA;if(t===Oo)return Zt.DST_ALPHA;if(t===Io)return Zt.ONE_MINUS_DST_ALPHA;if(t===No)return Zt.DST_COLOR;if(t===Do)return Zt.ONE_MINUS_DST_COLOR;if(t===Uo)return Zt.SRC_ALPHA_SATURATE;if((t===Ua||t===ka||t===Fa||t===Ba)&&null!==(e=$t.get("WEBGL_compressed_texture_s3tc"))){if(t===Ua)return e.COMPRESSED_RGB_S3TC_DXT1_EXT;if(t===ka)return e.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(t===Fa)return e.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(t===Ba)return e.COMPRESSED_RGBA_S3TC_DXT5_EXT}if((t===za||t===ja||t===Va||t===Ga)&&null!==(e=$t.get("WEBGL_compressed_texture_pvrtc"))){if(t===za)return e.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(t===ja)return e.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(t===Va)return e.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(t===Ga)return e.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(t===Ha&&null!==(e=$t.get("WEBGL_compressed_texture_etc1")))return e.COMPRESSED_RGB_ETC1_WEBGL;if((t===Eo||t===To)&&null!==(e=$t.get("EXT_blend_minmax"))){if(t===Eo)return e.MIN_EXT;if(t===To)return e.MAX_EXT}return t===Aa&&null!==(e=$t.get("WEBGL_depth_texture"))?e.UNSIGNED_INT_24_8_WEBGL:0}console.log("THREE.WebGLRenderer",Ki),t=t||{};var z=void 0!==t.canvas?t.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),j=void 0!==t.context?t.context:null,V=void 0!==t.alpha&&t.alpha,G=void 0===t.depth||t.depth,H=void 0===t.stencil||t.stencil,W=void 0!==t.antialias&&t.antialias,Y=void 0===t.premultipliedAlpha||t.premultipliedAlpha,K=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,$=[],tt=[],et=-1,rt=[],it=-1,st=new Float32Array(8),ut=[],ct=[];this.domElement=z,this.context=null,this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.gammaInput=!1,this.gammaOutput=!1,this.physicallyCorrectLights=!1,this.toneMapping=Ko,this.toneMappingExposure=1,this.toneMappingWhitePoint=1,this.maxMorphTargets=8,this.maxMorphNormals=4;var lt=this,ht=null,pt=null,dt=null,mt=-1,vt="",gt=null,yt=new a,bt=null,xt=new a,_t=0,wt=new q(0),Mt=0,Et=z.width,Tt=z.height,St=1,At=new a(0,0,Et,Tt),Ct=!1,Rt=new a(0,0,Et,Tt),It=new ot,Dt=new ce,jt=!1,Vt=!1,Gt=new nt,Ht=new h,Wt=new l,Xt=new h,qt=new h,Yt={hash:"",ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],shadows:[]},Kt={calls:0,vertices:0,faces:0,points:0};this.info={render:Kt,memory:{geometries:0,textures:0},programs:null};var Zt;try{var Jt={alpha:V,depth:G,stencil:H,antialias:W,premultipliedAlpha:Y,preserveDrawingBuffer:K};if(null===(Zt=j||z.getContext("webgl",Jt)||z.getContext("experimental-webgl",Jt)))throw null!==z.getContext("webgl")?"Error creating WebGL context with your selected attributes.":"Error creating WebGL context.";void 0===Zt.getShaderPrecisionFormat&&(Zt.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}}),z.addEventListener("webglcontextlost",i,!1)}catch(t){console.error("THREE.WebGLRenderer: "+t)}var $t=new ue(Zt);$t.get("WEBGL_depth_texture"),$t.get("OES_texture_float"),$t.get("OES_texture_float_linear"),$t.get("OES_texture_half_float"),$t.get("OES_texture_half_float_linear"),$t.get("OES_standard_derivatives"),$t.get("ANGLE_instanced_arrays"),$t.get("OES_element_index_uint")&&(Pt.MaxIndex=4294967296);var Qt=new se(Zt,$t,t),te=new ae(Zt,$t,B),ne=new oe,le=new ie(Zt,$t,te,ne,Qt,B,this.info),he=new re(Zt,ne,this.info),pe=new ee(this,Qt),de=new zt;this.info.programs=pe.programs;var fe,me,ve,ge,ye=new Bt(Zt,$t,Kt),be=new Ft(Zt,$t,Kt);n(),this.context=Zt,this.capabilities=Qt,this.extensions=$t,this.properties=ne,this.state=te;var xe=new at(this,Yt,he,Qt);this.shadowMap=xe;var _e=new J(this,ut),we=new Z(this,ct);this.getContext=function(){return Zt},this.getContextAttributes=function(){return Zt.getContextAttributes()},this.forceContextLoss=function(){$t.get("WEBGL_lose_context").loseContext()},this.getMaxAnisotropy=function(){return Qt.getMaxAnisotropy()},this.getPrecision=function(){return Qt.precision},this.getPixelRatio=function(){return St},this.setPixelRatio=function(t){void 0!==t&&(St=t,this.setSize(Rt.z,Rt.w,!1))},this.getSize=function(){return{width:Et,height:Tt}},this.setSize=function(t,e,n){Et=t,Tt=e,z.width=t*St,z.height=e*St,!1!==n&&(z.style.width=t+"px",z.style.height=e+"px"),this.setViewport(0,0,t,e)},this.setViewport=function(t,e,n,r){te.viewport(Rt.set(t,e,n,r))},this.setScissor=function(t,e,n,r){te.scissor(At.set(t,e,n,r))},this.setScissorTest=function(t){te.setScissorTest(Ct=t)},this.getClearColor=function(){return wt},this.setClearColor=function(t,e){wt.set(t),Mt=void 0!==e?e:1,te.buffers.color.setClear(wt.r,wt.g,wt.b,Mt,Y)},this.getClearAlpha=function(){return Mt},this.setClearAlpha=function(t){Mt=t,te.buffers.color.setClear(wt.r,wt.g,wt.b,Mt,Y)},this.clear=function(t,e,n){var r=0;(void 0===t||t)&&(r|=Zt.COLOR_BUFFER_BIT),(void 0===e||e)&&(r|=Zt.DEPTH_BUFFER_BIT),(void 0===n||n)&&(r|=Zt.STENCIL_BUFFER_BIT),Zt.clear(r)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.clearTarget=function(t,e,n,r){this.setRenderTarget(t),this.clear(e,n,r)},this.resetGLState=r,this.dispose=function(){rt=[],it=-1,tt=[],et=-1,z.removeEventListener("webglcontextlost",i,!1)},this.renderBufferImmediate=function(t,e,n){te.initAttributes();var r=ne.get(t);t.hasPositions&&!r.position&&(r.position=Zt.createBuffer()),t.hasNormals&&!r.normal&&(r.normal=Zt.createBuffer()),t.hasUvs&&!r.uv&&(r.uv=Zt.createBuffer()),t.hasColors&&!r.color&&(r.color=Zt.createBuffer());var i=e.getAttributes();if(t.hasPositions&&(Zt.bindBuffer(Zt.ARRAY_BUFFER,r.position),Zt.bufferData(Zt.ARRAY_BUFFER,t.positionArray,Zt.DYNAMIC_DRAW),te.enableAttribute(i.position),Zt.vertexAttribPointer(i.position,3,Zt.FLOAT,!1,0,0)),t.hasNormals){if(Zt.bindBuffer(Zt.ARRAY_BUFFER,r.normal),!n.isMeshPhongMaterial&&!n.isMeshStandardMaterial&&!n.isMeshNormalMaterial&&n.shading===co)for(var o=0,a=3*t.count;o8&&(d.length=8);for(var g=r.morphAttributes,f=0,m=d.length;f0&&E.renderInstances(r,L,O):E.render(L,O)}},this.render=function(t,e,n,r){if(void 0!==e&&!0!==e.isCamera)return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");vt="",mt=-1,gt=null,!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),e.matrixWorldInverse.getInverse(e.matrixWorld),Ht.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),It.setFromMatrix(Ht),$.length=0,et=-1,it=-1,ut.length=0,ct.length=0,Vt=this.localClippingEnabled,jt=Dt.init(this.clippingPlanes,Vt,e),b(t,e),tt.length=et+1,rt.length=it+1,!0===lt.sortObjects&&(tt.sort(d),rt.sort(f)),jt&&Dt.beginShadows(),U($),xe.render(t,e),k($,e),jt&&Dt.endShadows(),Kt.calls=0,Kt.vertices=0,Kt.faces=0,Kt.points=0,void 0===n&&(n=null),this.setRenderTarget(n);var i=t.background;if(null===i?te.buffers.color.setClear(wt.r,wt.g,wt.b,Mt,Y):i&&i.isColor&&(te.buffers.color.setClear(i.r,i.g,i.b,1,Y),r=!0),(this.autoClear||r)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil),i&&i.isCubeTexture?(void 0===ve&&(ve=new Ut,ge=new Lt(new Ot(5,5,5),new Q({uniforms:Es.cube.uniforms,vertexShader:Es.cube.vertexShader,fragmentShader:Es.cube.fragmentShader,side:so,depthTest:!1,depthWrite:!1,fog:!1}))),ve.projectionMatrix.copy(e.projectionMatrix),ve.matrixWorld.extractRotation(e.matrixWorld),ve.matrixWorldInverse.getInverse(ve.matrixWorld),ge.material.uniforms.tCube.value=i,ge.modelViewMatrix.multiplyMatrices(ve.matrixWorldInverse,ge.matrixWorld),he.update(ge),lt.renderBufferDirect(ve,null,ge.geometry,ge.material,ge,null)):i&&i.isTexture&&(void 0===fe&&(fe=new kt(-1,1,1,-1,0,1),me=new Lt(new Nt(2,2),new ft({depthTest:!1,depthWrite:!1,fog:!1}))),me.material.map=i,he.update(me),lt.renderBufferDirect(fe,null,me.geometry,me.material,me,null)),t.overrideMaterial){var o=t.overrideMaterial;x(tt,t,e,o),x(rt,t,e,o)}else te.setBlending(mo),x(tt,t,e),x(rt,t,e);_e.render(t,e),we.render(t,e,xt),n&&le.updateRenderTargetMipmap(n),te.setDepthTest(!0),te.setDepthWrite(!0),te.setColorWrite(!0)},this.setFaceCulling=function(t,e){te.setCullFace(t),te.setFlipSided(e===eo)},this.allocTextureUnit=F,this.setTexture2D=function(){var t=!1;return function(e,n){e&&e.isWebGLRenderTarget&&(t||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),t=!0),e=e.texture),le.setTexture2D(e,n)}}(),this.setTexture=function(){var t=!1;return function(e,n){t||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),t=!0),le.setTexture2D(e,n)}}(),this.setTextureCube=function(){var t=!1;return function(e,n){e&&e.isWebGLRenderTargetCube&&(t||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),t=!0),e=e.texture),e&&e.isCubeTexture||Array.isArray(e.image)&&6===e.image.length?le.setTextureCube(e,n):le.setTextureCubeDynamic(e,n)}}(),this.getCurrentRenderTarget=function(){return pt},this.setRenderTarget=function(t){pt=t,t&&void 0===ne.get(t).__webglFramebuffer&&le.setupRenderTarget(t);var e,n=t&&t.isWebGLRenderTargetCube;if(t){var r=ne.get(t);e=n?r.__webglFramebuffer[t.activeCubeFace]:r.__webglFramebuffer,yt.copy(t.scissor),bt=t.scissorTest,xt.copy(t.viewport)}else e=null,yt.copy(At).multiplyScalar(St),bt=Ct,xt.copy(Rt).multiplyScalar(St);if(dt!==e&&(Zt.bindFramebuffer(Zt.FRAMEBUFFER,e),dt=e),te.scissor(yt),te.setScissorTest(bt),te.viewport(xt),n){var i=ne.get(t.texture);Zt.framebufferTexture2D(Zt.FRAMEBUFFER,Zt.COLOR_ATTACHMENT0,Zt.TEXTURE_CUBE_MAP_POSITIVE_X+t.activeCubeFace,i.__webglTexture,t.activeMipMapLevel)}},this.readRenderTargetPixels=function(t,e,n,r,i,o){if(!1===(t&&t.isWebGLRenderTarget))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");var a=ne.get(t).__webglFramebuffer;if(a){var s=!1;a!==dt&&(Zt.bindFramebuffer(Zt.FRAMEBUFFER,a),s=!0);try{var u=t.texture,c=u.format,l=u.type;if(c!==La&&B(c)!==Zt.getParameter(Zt.IMPLEMENTATION_COLOR_READ_FORMAT))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!(l===va||B(l)===Zt.getParameter(Zt.IMPLEMENTATION_COLOR_READ_TYPE)||l===wa&&($t.get("OES_texture_float")||$t.get("WEBGL_color_buffer_float"))||l===Ma&&$t.get("EXT_color_buffer_half_float")))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");Zt.checkFramebufferStatus(Zt.FRAMEBUFFER)===Zt.FRAMEBUFFER_COMPLETE?e>=0&&e<=t.width-r&&n>=0&&n<=t.height-i&&Zt.readPixels(e,n,r,i,B(c),B(l),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&Zt.bindFramebuffer(Zt.FRAMEBUFFER,dt)}}}}function he(t,e){this.name="",this.color=new q(t),this.density=void 0!==e?e:25e-5}function pe(t,e,n){this.name="",this.color=new q(t),this.near=void 0!==e?e:1,this.far=void 0!==n?n:1e3}function de(){lt.call(this),this.type="Scene",this.background=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0}function fe(t,e,n,r,i){lt.call(this),this.lensFlares=[],this.positionScreen=new l,this.customUpdateCallback=void 0,void 0!==t&&this.add(t,e,n,r,i)}function me(t){$.call(this),this.type="SpriteMaterial",this.color=new q(16777215),this.map=null,this.rotation=0,this.fog=!1,this.lights=!1,this.setValues(t)}function ve(t){lt.call(this),this.type="Sprite",this.material=void 0!==t?t:new me}function ge(){lt.call(this),this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function ye(t,e,n){if(this.useVertexTexture=void 0===n||n,this.identityMatrix=new h,t=t||[],this.bones=t.slice(0),this.useVertexTexture){var r=Math.sqrt(4*this.bones.length);r=ds.nextPowerOfTwo(Math.ceil(r)),r=Math.max(r,4),this.boneTextureWidth=r,this.boneTextureHeight=r,this.boneMatrices=new Float32Array(this.boneTextureWidth*this.boneTextureHeight*4),this.boneTexture=new Y(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,La,wa)}else this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===e)this.calculateInverses();else if(this.bones.length===e.length)this.boneInverses=e.slice(0);else{console.warn("THREE.Skeleton bonInverses is the wrong length."),this.boneInverses=[];for(var i=0,o=this.bones.length;i=t.HAVE_CURRENT_DATA&&(h.needsUpdate=!0)}o.call(this,t,e,n,r,i,a,s,u,c),this.generateMipmaps=!1;var h=this;l()}function Ce(t,e,n,r,i,a,s,u,c,l,h,p){o.call(this,null,a,s,u,c,l,r,i,h,p),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function Pe(t,e,n,r,i,a,s,u,c){o.call(this,t,e,n,r,i,a,s,u,c),this.needsUpdate=!0}function Le(t,e,n,r,i,a,s,u,c,l){if((l=void 0!==l?l:Na)!==Na&&l!==Da)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&l===Na&&(n=ba),void 0===n&&l===Da&&(n=Aa),o.call(this,null,r,i,a,s,u,l,n,c),this.image={width:t,height:e},this.magFilter=void 0!==s?s:la,this.minFilter=void 0!==u?u:la,this.flipY=!1,this.generateMipmaps=!1}function Re(t){function e(t,e){return t-e}Pt.call(this),this.type="WireframeGeometry";var n,r,i,o,a,s,u,c,h=[],p=[0,0],d={},f=["a","b","c"];if(t&&t.isGeometry){var m=t.faces;for(n=0,i=m.length;n.9&&o<.1&&(e<.2&&(m[t+0]+=1),n<.2&&(m[t+2]+=1),r<.2&&(m[t+4]+=1))}}function s(t){f.push(t.x,t.y,t.z)}function u(e,n){var r=3*e;n.x=t[r+0],n.y=t[r+1],n.z=t[r+2]}function c(){for(var t=new l,e=new l,n=new l,r=new l,o=new i,a=new i,s=new i,u=0,c=0;u0)&&m.push(w,M,T),(u!==n-1||c0&&c(!0),e>0&&c(!1)),this.setIndex(p),this.addAttribute("position",new Mt(d,3)),this.addAttribute("normal",new Mt(f,3)),this.addAttribute("uv",new Mt(m,2))}function ln(t,e,n,r,i,o,a){un.call(this,0,t,e,n,r,i,o,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:r,openEnded:i,thetaStart:o,thetaLength:a}}function hn(t,e,n,r,i,o,a){cn.call(this,0,t,e,n,r,i,o,a),this.type="ConeBufferGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:r,openEnded:i,thetaStart:o,thetaLength:a}}function pn(t,e,n,r){Ct.call(this),this.type="CircleGeometry",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:r},this.fromBufferGeometry(new dn(t,e,n,r))}function dn(t,e,n,r){Pt.call(this),this.type="CircleBufferGeometry",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:r},t=t||50,e=void 0!==e?Math.max(3,e):8,n=void 0!==n?n:0,r=void 0!==r?r:2*Math.PI;var o,a,s=[],u=[],c=[],h=[],p=new l,d=new i;for(u.push(0,0,0),c.push(0,0,1),h.push(.5,.5),a=0,o=3;a<=e;a++,o+=3){var f=n+a/e*r;p.x=t*Math.cos(f),p.y=t*Math.sin(f),u.push(p.x,p.y,p.z),c.push(0,0,1),d.x=(u[o]/t+1)/2,d.y=(u[o+1]/t+1)/2,h.push(d.x,d.y)}for(o=1;o<=e;o++)s.push(o,o+1,0);this.setIndex(s),this.addAttribute("position",new Mt(u,3)),this.addAttribute("normal",new Mt(c,3)),this.addAttribute("uv",new Mt(h,2))}function fn(){Q.call(this,{uniforms:xs.merge([Ms.lights,{opacity:{value:1}}]),vertexShader:_s.shadow_vert,fragmentShader:_s.shadow_frag}),this.lights=!0,this.transparent=!0,Object.defineProperties(this,{opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(t){this.uniforms.opacity.value=t}}})}function mn(t){Q.call(this,t),this.type="RawShaderMaterial"}function vn(t){this.uuid=ds.generateUUID(),this.type="MultiMaterial",this.materials=Array.isArray(t)?t:[],this.visible=!0}function gn(t){$.call(this),this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new q(16777215),this.roughness=.5,this.metalness=.5,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new q(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new i(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function yn(t){gn.call(this),this.defines={PHYSICAL:""},this.type="MeshPhysicalMaterial",this.reflectivity=.5,this.clearCoat=0,this.clearCoatRoughness=0,this.setValues(t)}function bn(t){$.call(this),this.type="MeshPhongMaterial",this.color=new q(16777215),this.specular=new q(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new q(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new i(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Wo,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function xn(t){bn.call(this),this.defines={TOON:""},this.type="MeshToonMaterial",this.gradientMap=null,this.setValues(t)}function _n(t){$.call(this,t),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new i(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function wn(t){$.call(this),this.type="MeshLambertMaterial",this.color=new q(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new q(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Wo,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function Mn(t){$.call(this),this.type="LineDashedMaterial",this.color=new q(16777215),this.linewidth=1,this.scale=1,this.dashSize=3,this.gapSize=1,this.lights=!1,this.setValues(t)}function En(t,e,n){var r=this,i=!1,o=0,a=0;this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){a++,!1===i&&void 0!==r.onStart&&r.onStart(t,o,a),i=!0},this.itemEnd=function(t){o++,void 0!==r.onProgress&&r.onProgress(t,o,a),o===a&&(i=!1,void 0!==r.onLoad&&r.onLoad())},this.itemError=function(t){void 0!==r.onError&&r.onError(t)}}function Tn(t){this.manager=void 0!==t?t:Is}function Sn(t){this.manager=void 0!==t?t:Is,this._parser=null}function An(t){this.manager=void 0!==t?t:Is,this._parser=null}function Cn(t){this.manager=void 0!==t?t:Is}function Pn(t){this.manager=void 0!==t?t:Is}function Ln(t){this.manager=void 0!==t?t:Is}function Rn(t,e){lt.call(this),this.type="Light",this.color=new q(t),this.intensity=void 0!==e?e:1,this.receiveShadow=void 0}function On(t,e,n){Rn.call(this,t,n),this.type="HemisphereLight",this.castShadow=void 0,this.position.copy(lt.DefaultUp),this.updateMatrix(),this.groundColor=new q(e)}function In(t){this.camera=t,this.bias=0,this.radius=1,this.mapSize=new i(512,512),this.map=null,this.matrix=new h}function Nn(){In.call(this,new Ut(50,1,.5,500))}function Dn(t,e,n,r,i,o){Rn.call(this,t,e),this.type="SpotLight",this.position.copy(lt.DefaultUp),this.updateMatrix(),this.target=new lt,Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(t){this.intensity=t/Math.PI}}),this.distance=void 0!==n?n:0,this.angle=void 0!==r?r:Math.PI/3,this.penumbra=void 0!==i?i:0,this.decay=void 0!==o?o:1,this.shadow=new Nn}function Un(t,e,n,r){Rn.call(this,t,e),this.type="PointLight",Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(t){this.intensity=t/(4*Math.PI)}}),this.distance=void 0!==n?n:0,this.decay=void 0!==r?r:1,this.shadow=new In(new Ut(90,1,.5,500))}function kn(){In.call(this,new kt(-5,5,5,-5,.5,500))}function Fn(t,e){Rn.call(this,t,e),this.type="DirectionalLight",this.position.copy(lt.DefaultUp),this.updateMatrix(),this.target=new lt,this.shadow=new kn}function Bn(t,e){Rn.call(this,t,e),this.type="AmbientLight",this.castShadow=void 0}function zn(t,e,n,r){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==r?r:new e.constructor(n),this.sampleValues=e,this.valueSize=n}function jn(t,e,n,r){zn.call(this,t,e,n,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0}function Vn(t,e,n,r){zn.call(this,t,e,n,r)}function Gn(t,e,n,r){zn.call(this,t,e,n,r)}function Hn(t,e,n,r){if(void 0===t)throw new Error("track name is undefined");if(void 0===e||0===e.length)throw new Error("no keyframes in track named "+t);this.name=t,this.times=Ns.convertArray(e,this.TimeBufferType),this.values=Ns.convertArray(n,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation),this.validate(),this.optimize()}function Wn(t,e,n,r){Hn.call(this,t,e,n,r)}function Xn(t,e,n,r){zn.call(this,t,e,n,r)}function qn(t,e,n,r){Hn.call(this,t,e,n,r)}function Yn(t,e,n,r){Hn.call(this,t,e,n,r)}function Kn(t,e,n,r){Hn.call(this,t,e,n,r)}function Zn(t,e,n){Hn.call(this,t,e,n)}function Jn(t,e,n,r){Hn.call(this,t,e,n,r)}function $n(t,e,n,r){Hn.apply(this,arguments)}function Qn(t,e,n){this.name=t,this.tracks=n,this.duration=void 0!==e?e:-1,this.uuid=ds.generateUUID(),this.duration<0&&this.resetDuration(),this.optimize()}function tr(t){this.manager=void 0!==t?t:Is,this.textures={}}function er(t){this.manager=void 0!==t?t:Is}function nr(){this.onLoadStart=function(){},this.onLoadProgress=function(){},this.onLoadComplete=function(){}}function rr(t){"boolean"==typeof t&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),t=void 0),this.manager=void 0!==t?t:Is,this.withCredentials=!1}function ir(t){this.manager=void 0!==t?t:Is,this.texturePath=""}function or(t,e,n,r,i){var o=.5*(r-e),a=.5*(i-n),s=t*t;return(2*n-2*r+o+a)*(t*s)+(-3*n+3*r-2*o-a)*s+o*t+n}function ar(t,e){var n=1-t;return n*n*e}function sr(t,e){return 2*(1-t)*t*e}function ur(t,e){return t*t*e}function cr(t,e,n,r){return ar(t,e)+sr(t,n)+ur(t,r)}function lr(t,e){var n=1-t;return n*n*n*e}function hr(t,e){var n=1-t;return 3*n*n*t*e}function pr(t,e){return 3*(1-t)*t*t*e}function dr(t,e){return t*t*t*e}function fr(t,e,n,r,i){return lr(t,e)+hr(t,n)+pr(t,r)+dr(t,i)}function mr(){}function vr(t,e){this.v1=t,this.v2=e}function gr(){this.curves=[],this.autoClose=!1}function yr(t,e,n,r,i,o,a,s){this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=r,this.aStartAngle=i,this.aEndAngle=o,this.aClockwise=a,this.aRotation=s||0}function br(t){this.points=void 0===t?[]:t}function xr(t,e,n,r){this.v0=t,this.v1=e,this.v2=n,this.v3=r}function _r(t,e,n){this.v0=t,this.v1=e,this.v2=n}function wr(t){gr.call(this),this.currentPoint=new i,t&&this.fromPoints(t)}function Mr(){wr.apply(this,arguments),this.holes=[]}function Er(){this.subPaths=[],this.currentPath=null}function Tr(t){this.data=t}function Sr(t){this.manager=void 0!==t?t:Is}function Ar(t){this.manager=void 0!==t?t:Is}function Cr(t,e,n,r){Rn.call(this,t,e),this.type="RectAreaLight",this.position.set(0,1,0),this.updateMatrix(),this.width=void 0!==n?n:10,this.height=void 0!==r?r:10}function Pr(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new Ut,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new Ut,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1}function Lr(t,e,n){lt.call(this),this.type="CubeCamera";var r=new Ut(90,1,t,e);r.up.set(0,-1,0),r.lookAt(new l(1,0,0)),this.add(r);var i=new Ut(90,1,t,e);i.up.set(0,-1,0),i.lookAt(new l(-1,0,0)),this.add(i);var o=new Ut(90,1,t,e);o.up.set(0,0,1),o.lookAt(new l(0,1,0)),this.add(o);var a=new Ut(90,1,t,e);a.up.set(0,0,-1),a.lookAt(new l(0,-1,0)),this.add(a);var s=new Ut(90,1,t,e);s.up.set(0,-1,0),s.lookAt(new l(0,0,1)),this.add(s);var c=new Ut(90,1,t,e);c.up.set(0,-1,0),c.lookAt(new l(0,0,-1)),this.add(c);var h={format:Pa,magFilter:da,minFilter:da};this.renderTarget=new u(n,n,h),this.updateCubeMap=function(t,e){null===this.parent&&this.updateMatrixWorld();var n=this.renderTarget,u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,n.activeCubeFace=0,t.render(e,r,n),n.activeCubeFace=1,t.render(e,i,n),n.activeCubeFace=2,t.render(e,o,n),n.activeCubeFace=3,t.render(e,a,n),n.activeCubeFace=4,t.render(e,s,n),n.texture.generateMipmaps=u,n.activeCubeFace=5,t.render(e,c,n),t.setRenderTarget(null)}}function Rr(){lt.call(this),this.type="AudioListener",this.context=Fs.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null}function Or(t){lt.call(this),this.type="Audio",this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.loop=!1,this.startTime=0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.sourceType="empty",this.filters=[]}function Ir(t){Or.call(this,t),this.panner=this.context.createPanner(),this.panner.connect(this.gain)}function Nr(t,e){this.analyser=t.context.createAnalyser(),this.analyser.fftSize=void 0!==e?e:2048,this.data=new Uint8Array(this.analyser.frequencyBinCount),t.getOutput().connect(this.analyser)}function Dr(t,e,n){this.binding=t,this.valueSize=n;var r,i=Float64Array;switch(e){case"quaternion":r=this._slerp;break;case"string":case"bool":i=Array,r=this._select;break;default:r=this._lerp}this.buffer=new i(4*n),this._mixBufferRegion=r,this.cumulativeWeight=0,this.useCount=0,this.referenceCount=0}function Ur(t,e,n){this.path=e,this.parsedPath=n||Ur.parseTrackName(e),this.node=Ur.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}function kr(t){this.uuid=ds.generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;var e={};this._indicesByUUID=e;for(var n=0,r=arguments.length;n!==r;++n)e[arguments[n].uuid]=n;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};var i=this;this.stats={objects:{get total(){return i._objects.length},get inUse(){return this.total-i.nCachedObjects_}},get bindingsPerObject(){return i._bindings.length}}}function Fr(t,e,n){this._mixer=t,this._clip=e,this._localRoot=n||null;for(var r=e.tracks,i=r.length,o=new Array(i),a={endingStart:Ja,endingEnd:Ja},s=0;s!==i;++s){var u=r[s].createInterpolant(null);o[s]=u,u.settings=a}this._interpolantSettings=a,this._interpolants=o,this._propertyBindings=new Array(i),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=Xa,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}function Br(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}function zr(t){"string"==typeof t&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),t=arguments[1]),this.value=t}function jr(){Pt.call(this),this.type="InstancedBufferGeometry",this.maxInstancedCount=void 0}function Vr(t,e,n,r){this.uuid=ds.generateUUID(),this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===r}function Gr(t,e){this.uuid=ds.generateUUID(),this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.onUploadCallback=function(){},this.version=0}function Hr(t,e,n){Gr.call(this,t,e),this.meshPerAttribute=n||1}function Wr(t,e,n){mt.call(this,t,e),this.meshPerAttribute=n||1}function Xr(t,e,n,r){this.ray=new st(t,e),this.near=n||0,this.far=r||1/0,this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}},Object.defineProperties(this.params,{PointCloud:{get:function(){return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."),this.Points}}})}function qr(t,e){return t.distance-e.distance}function Yr(t,e,n,r){if(!1!==t.visible&&(t.raycast(e,n),!0===r))for(var i=t.children,o=0,a=i.length;o0?1:+t}),void 0===Function.prototype.name&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&function(){Object.assign=function(t){if(void 0===t||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;n>=4,n[i]=e[19===i?3&t|8:t]);return n.join("")}}(),clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,r,i){return r+(t-e)*(i-r)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},degToRad:function(t){return t*ds.DEG2RAD},radToDeg:function(t){return t*ds.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},nearestPowerOfTwo:function(t){return Math.pow(2,Math.round(Math.log(t)/Math.LN2))},nextPowerOfTwo:function(t){return t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,++t}};i.prototype={constructor:i,isVector2:!0,get width(){return this.x},set width(t){this.x=t},get height(){return this.y},set height(t){this.y=t},set:function(t,e){return this.x=t,this.y=e,this},setScalar:function(t){return this.x=t,this.y=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(t){return this.x=t.x,this.y=t.y,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)},addScalar:function(t){return this.x+=t,this.y+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)},subScalar:function(t){return this.x-=t,this.y-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this},multiply:function(t){return this.x*=t.x,this.y*=t.y,this},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t):(this.x=0,this.y=0),this},divide:function(t){return this.x/=t.x,this.y/=t.y,this},divideScalar:function(t){return this.multiplyScalar(1/t)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this},clampScalar:function(){var t,e;return function(n,r){return void 0===t&&(t=new i,e=new i),t.set(n,n),e.set(r,r),this.clamp(t,e)}}(),clampLength:function(t,e){var n=this.length();return this.multiplyScalar(Math.max(t,Math.min(e,n))/n)},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(t){return this.x*t.x+this.y*t.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,n=this.y-t.y;return e*e+n*n},distanceToManhattan:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this},rotateAround:function(t,e){var n=Math.cos(e),r=Math.sin(e),i=this.x-t.x,o=this.y-t.y;return this.x=i*n-o*r+t.x,this.y=i*r+o*n+t.y,this}};var fs=0;o.DEFAULT_IMAGE=void 0,o.DEFAULT_MAPPING=Qo,o.prototype={constructor:o,isTexture:!0,set needsUpdate(t){!0===t&&this.version++},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){if(void 0!==t.textures[this.uuid])return t.textures[this.uuid];var e={metadata:{version:4.4,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var n=this.image;void 0===n.uuid&&(n.uuid=ds.generateUUID()),void 0===t.images[n.uuid]&&(t.images[n.uuid]={uuid:n.uuid,url:function(t){var e;return void 0!==t.toDataURL?e=t:(e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),e.width=t.width,e.height=t.height,e.getContext("2d").drawImage(t,0,0,t.width,t.height)),e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}(n)}),e.image=n.uuid}return t.textures[this.uuid]=e,e},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(t){if(this.mapping===Qo){if(t.multiply(this.repeat),t.add(this.offset),t.x<0||t.x>1)switch(this.wrapS){case sa:t.x=t.x-Math.floor(t.x);break;case ua:t.x=t.x<0?0:1;break;case ca:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case sa:t.y=t.y-Math.floor(t.y);break;case ua:t.y=t.y<0?0:1;break;case ca:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}this.flipY&&(t.y=1-t.y)}}},Object.assign(o.prototype,r.prototype),a.prototype={constructor:a,isVector4:!0,set:function(t,e,n,r){return this.x=t,this.y=e,this.z=n,this.w=r,this},setScalar:function(t){return this.x=t,this.y=t,this.z=t,this.w=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setW:function(t){return this.w=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t,this.z*=t,this.w*=t):(this.x=0,this.y=0,this.z=0,this.w=0),this},applyMatrix4:function(t){var e=this.x,n=this.y,r=this.z,i=this.w,o=t.elements;return this.x=o[0]*e+o[4]*n+o[8]*r+o[12]*i,this.y=o[1]*e+o[5]*n+o[9]*r+o[13]*i,this.z=o[2]*e+o[6]*n+o[10]*r+o[14]*i,this.w=o[3]*e+o[7]*n+o[11]*r+o[15]*i,this},divideScalar:function(t){return this.multiplyScalar(1/t)},setAxisAngleFromQuaternion:function(t){this.w=2*Math.acos(t.w);var e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this},setAxisAngleFromRotationMatrix:function(t){var e,n,r,i,o=t.elements,a=o[0],s=o[4],u=o[8],c=o[1],l=o[5],h=o[9],p=o[2],d=o[6],f=o[10];if(Math.abs(s-c)<.01&&Math.abs(u-p)<.01&&Math.abs(h-d)<.01){if(Math.abs(s+c)<.1&&Math.abs(u+p)<.1&&Math.abs(h+d)<.1&&Math.abs(a+l+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;var m=(a+1)/2,v=(l+1)/2,g=(f+1)/2,y=(s+c)/4,b=(u+p)/4,x=(h+d)/4;return m>v&&m>g?m<.01?(n=0,r=.707106781,i=.707106781):(n=Math.sqrt(m),r=y/n,i=b/n):v>g?v<.01?(n=.707106781,r=0,i=.707106781):(r=Math.sqrt(v),n=y/r,i=x/r):g<.01?(n=.707106781,r=.707106781,i=0):(i=Math.sqrt(g),n=b/i,r=x/i),this.set(n,r,i,e),this}var _=Math.sqrt((d-h)*(d-h)+(u-p)*(u-p)+(c-s)*(c-s));return Math.abs(_)<.001&&(_=1),this.x=(d-h)/_,this.y=(u-p)/_,this.z=(c-s)/_,this.w=Math.acos((a+l+f-1)/2),this},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this},clampScalar:function(){var t,e;return function(n,r){return void 0===t&&(t=new a,e=new a),t.set(n,n,n,n),e.set(r,r,r,r),this.clamp(t,e)}}(),floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}},s.prototype={constructor:s,isWebGLRenderTarget:!0,setSize:function(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this},dispose:function(){this.dispatchEvent({type:"dispose"})}},Object.assign(s.prototype,r.prototype),u.prototype=Object.create(s.prototype),u.prototype.constructor=u,u.prototype.isWebGLRenderTargetCube=!0,c.prototype={constructor:c,get x(){return this._x},set x(t){this._x=t,this.onChangeCallback()},get y(){return this._y},set y(t){this._y=t,this.onChangeCallback()},get z(){return this._z},set z(t){this._z=t,this.onChangeCallback()},get w(){return this._w},set w(t){this._w=t,this.onChangeCallback()},set:function(t,e,n,r){return this._x=t,this._y=e,this._z=n,this._w=r,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this.onChangeCallback(),this},setFromEuler:function(t,e){if(!1===(t&&t.isEuler))throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var n=Math.cos(t._x/2),r=Math.cos(t._y/2),i=Math.cos(t._z/2),o=Math.sin(t._x/2),a=Math.sin(t._y/2),s=Math.sin(t._z/2),u=t.order;return"XYZ"===u?(this._x=o*r*i+n*a*s,this._y=n*a*i-o*r*s,this._z=n*r*s+o*a*i,this._w=n*r*i-o*a*s):"YXZ"===u?(this._x=o*r*i+n*a*s,this._y=n*a*i-o*r*s,this._z=n*r*s-o*a*i,this._w=n*r*i+o*a*s):"ZXY"===u?(this._x=o*r*i-n*a*s,this._y=n*a*i+o*r*s,this._z=n*r*s+o*a*i,this._w=n*r*i-o*a*s):"ZYX"===u?(this._x=o*r*i-n*a*s,this._y=n*a*i+o*r*s,this._z=n*r*s-o*a*i,this._w=n*r*i+o*a*s):"YZX"===u?(this._x=o*r*i+n*a*s,this._y=n*a*i+o*r*s,this._z=n*r*s-o*a*i,this._w=n*r*i-o*a*s):"XZY"===u&&(this._x=o*r*i-n*a*s,this._y=n*a*i-o*r*s,this._z=n*r*s+o*a*i,this._w=n*r*i+o*a*s),!1!==e&&this.onChangeCallback(),this},setFromAxisAngle:function(t,e){var n=e/2,r=Math.sin(n);return this._x=t.x*r,this._y=t.y*r,this._z=t.z*r,this._w=Math.cos(n),this.onChangeCallback(),this},setFromRotationMatrix:function(t){var e,n=t.elements,r=n[0],i=n[4],o=n[8],a=n[1],s=n[5],u=n[9],c=n[2],l=n[6],h=n[10],p=r+s+h;return p>0?(e=.5/Math.sqrt(p+1),this._w=.25/e,this._x=(l-u)*e,this._y=(o-c)*e,this._z=(a-i)*e):r>s&&r>h?(e=2*Math.sqrt(1+r-s-h),this._w=(l-u)/e,this._x=.25*e,this._y=(i+a)/e,this._z=(o+c)/e):s>h?(e=2*Math.sqrt(1+s-r-h),this._w=(o-c)/e,this._x=(i+a)/e,this._y=.25*e,this._z=(u+l)/e):(e=2*Math.sqrt(1+h-r-s),this._w=(a-i)/e,this._x=(o+c)/e,this._y=(u+l)/e,this._z=.25*e),this.onChangeCallback(),this},setFromUnitVectors:function(){var t,e;return function(n,r){return void 0===t&&(t=new l),e=n.dot(r)+1,e<1e-6?(e=0,Math.abs(n.x)>Math.abs(n.z)?t.set(-n.y,n.x,0):t.set(0,-n.z,n.y)):t.crossVectors(n,r),this._x=t.x,this._y=t.y,this._z=t.z,this._w=e,this.normalize()}}(),inverse:function(){return this.conjugate().normalize()},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this.onChangeCallback(),this},dot:function(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this.onChangeCallback(),this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)},premultiply:function(t){return this.multiplyQuaternions(t,this)},multiplyQuaternions:function(t,e){var n=t._x,r=t._y,i=t._z,o=t._w,a=e._x,s=e._y,u=e._z,c=e._w;return this._x=n*c+o*a+r*u-i*s,this._y=r*c+o*s+i*a-n*u,this._z=i*c+o*u+n*s-r*a,this._w=o*c-n*a-r*s-i*u,this.onChangeCallback(),this},slerp:function(t,e){if(0===e)return this;if(1===e)return this.copy(t);var n=this._x,r=this._y,i=this._z,o=this._w,a=o*t._w+n*t._x+r*t._y+i*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=o,this._x=n,this._y=r,this._z=i,this;var s=Math.sqrt(1-a*a);if(Math.abs(s)<.001)return this._w=.5*(o+this._w),this._x=.5*(n+this._x),this._y=.5*(r+this._y),this._z=.5*(i+this._z),this;var u=Math.atan2(s,a),c=Math.sin((1-e)*u)/s,l=Math.sin(e*u)/s;return this._w=o*c+this._w*l,this._x=n*c+this._x*l,this._y=r*c+this._y*l,this._z=i*c+this._z*l,this.onChangeCallback(),this},equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w},fromArray:function(t,e){return void 0===e&&(e=0),this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}},Object.assign(c,{slerp:function(t,e,n,r){return n.copy(t).slerp(e,r)},slerpFlat:function(t,e,n,r,i,o,a){var s=n[r+0],u=n[r+1],c=n[r+2],l=n[r+3],h=i[o+0],p=i[o+1],d=i[o+2],f=i[o+3];if(l!==f||s!==h||u!==p||c!==d){var m=1-a,v=s*h+u*p+c*d+l*f,g=v>=0?1:-1,y=1-v*v;if(y>Number.EPSILON){var b=Math.sqrt(y),x=Math.atan2(b,v*g);m=Math.sin(m*x)/b,a=Math.sin(a*x)/b}var _=a*g;if(s=s*m+h*_,u=u*m+p*_,c=c*m+d*_,l=l*m+f*_,m===1-a){var w=1/Math.sqrt(s*s+u*u+c*c+l*l);s*=w,u*=w,c*=w,l*=w}}t[e]=s,t[e+1]=u,t[e+2]=c,t[e+3]=l}}),l.prototype={constructor:l,isVector3:!0,set:function(t,e,n){return this.x=t,this.y=e,this.z=n,this},setScalar:function(t){return this.x=t,this.y=t,this.z=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t,this.z*=t):(this.x=0,this.y=0,this.z=0),this},multiplyVectors:function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},applyEuler:function(){var t;return function(e){return!1===(e&&e.isEuler)&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),void 0===t&&(t=new c),this.applyQuaternion(t.setFromEuler(e))}}(),applyAxisAngle:function(){var t;return function(e,n){return void 0===t&&(t=new c),this.applyQuaternion(t.setFromAxisAngle(e,n))}}(),applyMatrix3:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6]*r,this.y=i[1]*e+i[4]*n+i[7]*r,this.z=i[2]*e+i[5]*n+i[8]*r,this},applyMatrix4:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;this.x=i[0]*e+i[4]*n+i[8]*r+i[12],this.y=i[1]*e+i[5]*n+i[9]*r+i[13],this.z=i[2]*e+i[6]*n+i[10]*r+i[14];var o=i[3]*e+i[7]*n+i[11]*r+i[15];return this.divideScalar(o)},applyQuaternion:function(t){var e=this.x,n=this.y,r=this.z,i=t.x,o=t.y,a=t.z,s=t.w,u=s*e+o*r-a*n,c=s*n+a*e-i*r,l=s*r+i*n-o*e,h=-i*e-o*n-a*r;return this.x=u*s+h*-i+c*-a-l*-o,this.y=c*s+h*-o+l*-i-u*-a,this.z=l*s+h*-a+u*-o-c*-i,this},project:function(){var t;return function(e){return void 0===t&&(t=new h),t.multiplyMatrices(e.projectionMatrix,t.getInverse(e.matrixWorld)),this.applyMatrix4(t)}}(),unproject:function(){var t;return function(e){return void 0===t&&(t=new h),t.multiplyMatrices(e.matrixWorld,t.getInverse(e.projectionMatrix)),this.applyMatrix4(t)}}(),transformDirection:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[4]*n+i[8]*r,this.y=i[1]*e+i[5]*n+i[9]*r,this.z=i[2]*e+i[6]*n+i[10]*r,this.normalize()},divide:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},divideScalar:function(t){return this.multiplyScalar(1/t)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this},clampScalar:function(){var t,e;return function(n,r){return void 0===t&&(t=new l,e=new l),t.set(n,n,n),e.set(r,r,r),this.clamp(t,e)}}(),clampLength:function(t,e){var n=this.length();return this.multiplyScalar(Math.max(t,Math.min(e,n))/n)},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},cross:function(t,e){if(void 0!==e)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e);var n=this.x,r=this.y,i=this.z;return this.x=r*t.z-i*t.y,this.y=i*t.x-n*t.z,this.z=n*t.y-r*t.x,this},crossVectors:function(t,e){var n=t.x,r=t.y,i=t.z,o=e.x,a=e.y,s=e.z;return this.x=r*s-i*a,this.y=i*o-n*s,this.z=n*a-r*o,this},projectOnVector:function(t){var e=t.dot(this)/t.lengthSq();return this.copy(t).multiplyScalar(e)},projectOnPlane:function(){var t;return function(e){return void 0===t&&(t=new l),t.copy(this).projectOnVector(e),this.sub(t)}}(),reflect:function(){var t;return function(e){return void 0===t&&(t=new l),this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(t){var e=this.dot(t)/Math.sqrt(this.lengthSq()*t.lengthSq());return Math.acos(ds.clamp(e,-1,1))},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,n=this.y-t.y,r=this.z-t.z;return e*e+n*n+r*r},distanceToManhattan:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)},setFromSpherical:function(t){var e=Math.sin(t.phi)*t.radius;return this.x=e*Math.sin(t.theta),this.y=Math.cos(t.phi)*t.radius,this.z=e*Math.cos(t.theta),this},setFromCylindrical:function(t){return this.x=t.radius*Math.sin(t.theta),this.y=t.y,this.z=t.radius*Math.cos(t.theta),this},setFromMatrixPosition:function(t){return this.setFromMatrixColumn(t,3)},setFromMatrixScale:function(t){var e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),r=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=r,this},setFromMatrixColumn:function(t,e){if("number"==typeof t){console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index ).");var n=t;t=e,e=n}return this.fromArray(t.elements,4*e)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}},h.prototype={constructor:h,isMatrix4:!0,set:function(t,e,n,r,i,o,a,s,u,c,l,h,p,d,f,m){var v=this.elements;return v[0]=t,v[4]=e,v[8]=n,v[12]=r,v[1]=i,v[5]=o,v[9]=a,v[13]=s,v[2]=u,v[6]=c,v[10]=l,v[14]=h,v[3]=p,v[7]=d,v[11]=f,v[15]=m,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},clone:function(){return(new h).fromArray(this.elements)},copy:function(t){return this.elements.set(t.elements),this},copyPosition:function(t){var e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this},extractBasis:function(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this},makeBasis:function(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this},extractRotation:function(){var t;return function(e){void 0===t&&(t=new l);var n=this.elements,r=e.elements,i=1/t.setFromMatrixColumn(e,0).length(),o=1/t.setFromMatrixColumn(e,1).length(),a=1/t.setFromMatrixColumn(e,2).length();return n[0]=r[0]*i,n[1]=r[1]*i,n[2]=r[2]*i,n[4]=r[4]*o,n[5]=r[5]*o,n[6]=r[6]*o,n[8]=r[8]*a,n[9]=r[9]*a,n[10]=r[10]*a,this}}(),makeRotationFromEuler:function(t){!1===(t&&t.isEuler)&&console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var e=this.elements,n=t.x,r=t.y,i=t.z,o=Math.cos(n),a=Math.sin(n),s=Math.cos(r),u=Math.sin(r),c=Math.cos(i),l=Math.sin(i);if("XYZ"===t.order){var h=o*c,p=o*l,d=a*c,f=a*l;e[0]=s*c,e[4]=-s*l,e[8]=u,e[1]=p+d*u,e[5]=h-f*u,e[9]=-a*s,e[2]=f-h*u,e[6]=d+p*u,e[10]=o*s}else if("YXZ"===t.order){var m=s*c,v=s*l,g=u*c,y=u*l;e[0]=m+y*a,e[4]=g*a-v,e[8]=o*u,e[1]=o*l,e[5]=o*c,e[9]=-a,e[2]=v*a-g,e[6]=y+m*a,e[10]=o*s}else if("ZXY"===t.order){var m=s*c,v=s*l,g=u*c,y=u*l;e[0]=m-y*a,e[4]=-o*l,e[8]=g+v*a,e[1]=v+g*a,e[5]=o*c,e[9]=y-m*a,e[2]=-o*u,e[6]=a,e[10]=o*s}else if("ZYX"===t.order){var h=o*c,p=o*l,d=a*c,f=a*l;e[0]=s*c,e[4]=d*u-p,e[8]=h*u+f,e[1]=s*l,e[5]=f*u+h,e[9]=p*u-d,e[2]=-u,e[6]=a*s,e[10]=o*s}else if("YZX"===t.order){var b=o*s,x=o*u,_=a*s,w=a*u;e[0]=s*c,e[4]=w-b*l,e[8]=_*l+x,e[1]=l,e[5]=o*c,e[9]=-a*c,e[2]=-u*c,e[6]=x*l+_,e[10]=b-w*l}else if("XZY"===t.order){var b=o*s,x=o*u,_=a*s,w=a*u;e[0]=s*c,e[4]=-l,e[8]=u*c,e[1]=b*l+w,e[5]=o*c,e[9]=x*l-_,e[2]=_*l-x,e[6]=a*c,e[10]=w*l+b}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},makeRotationFromQuaternion:function(t){var e=this.elements,n=t.x,r=t.y,i=t.z,o=t.w,a=n+n,s=r+r,u=i+i,c=n*a,l=n*s,h=n*u,p=r*s,d=r*u,f=i*u,m=o*a,v=o*s,g=o*u;return e[0]=1-(p+f),e[4]=l-g,e[8]=h+v,e[1]=l+g,e[5]=1-(c+f),e[9]=d-m,e[2]=h-v,e[6]=d+m,e[10]=1-(c+p),e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},lookAt:function(){var t,e,n;return function(r,i,o){void 0===t&&(t=new l,e=new l,n=new l);var a=this.elements;return n.subVectors(r,i).normalize(),0===n.lengthSq()&&(n.z=1),t.crossVectors(o,n).normalize(),0===t.lengthSq()&&(n.z+=1e-4,t.crossVectors(o,n).normalize()),e.crossVectors(n,t),a[0]=t.x,a[4]=e.x,a[8]=n.x,a[1]=t.y,a[5]=e.y,a[9]=n.y,a[2]=t.z,a[6]=e.z,a[10]=n.z,this}}(),multiply:function(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},premultiply:function(t){return this.multiplyMatrices(t,this)},multiplyMatrices:function(t,e){var n=t.elements,r=e.elements,i=this.elements,o=n[0],a=n[4],s=n[8],u=n[12],c=n[1],l=n[5],h=n[9],p=n[13],d=n[2],f=n[6],m=n[10],v=n[14],g=n[3],y=n[7],b=n[11],x=n[15],_=r[0],w=r[4],M=r[8],E=r[12],T=r[1],S=r[5],A=r[9],C=r[13],P=r[2],L=r[6],R=r[10],O=r[14],I=r[3],N=r[7],D=r[11],U=r[15];return i[0]=o*_+a*T+s*P+u*I,i[4]=o*w+a*S+s*L+u*N,i[8]=o*M+a*A+s*R+u*D,i[12]=o*E+a*C+s*O+u*U,i[1]=c*_+l*T+h*P+p*I,i[5]=c*w+l*S+h*L+p*N,i[9]=c*M+l*A+h*R+p*D,i[13]=c*E+l*C+h*O+p*U,i[2]=d*_+f*T+m*P+v*I,i[6]=d*w+f*S+m*L+v*N,i[10]=d*M+f*A+m*R+v*D,i[14]=d*E+f*C+m*O+v*U,i[3]=g*_+y*T+b*P+x*I,i[7]=g*w+y*S+b*L+x*N,i[11]=g*M+y*A+b*R+x*D,i[15]=g*E+y*C+b*O+x*U,this},multiplyToArray:function(t,e,n){var r=this.elements;return this.multiplyMatrices(t,e),n[0]=r[0],n[1]=r[1],n[2]=r[2],n[3]=r[3],n[4]=r[4],n[5]=r[5],n[6]=r[6],n[7]=r[7],n[8]=r[8],n[9]=r[9],n[10]=r[10],n[11]=r[11],n[12]=r[12],n[13]=r[13],n[14]=r[14],n[15]=r[15],this},multiplyScalar:function(t){var e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this},applyToBufferAttribute:function(){var t;return function(e){void 0===t&&(t=new l);for(var n=0,r=e.count;n 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t\t}\n\t\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 ltcTextureCoords( const in GeometricContext geometry, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = (LUT_SIZE - 1.0)/LUT_SIZE;\n\tconst float LUT_BIAS = 0.5/LUT_SIZE;\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 P = geometry.position;\n\tfloat theta = acos( dot( N, V ) );\n\tvec2 uv = vec2(\n\t\tsqrt( saturate( roughness ) ),\n\t\tsaturate( theta / ( 0.5 * PI ) ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nvoid clipQuadToHorizon( inout vec3 L[5], out int n ) {\n\tint config = 0;\n\tif ( L[0].z > 0.0 ) config += 1;\n\tif ( L[1].z > 0.0 ) config += 2;\n\tif ( L[2].z > 0.0 ) config += 4;\n\tif ( L[3].z > 0.0 ) config += 8;\n\tn = 0;\n\tif ( config == 0 ) {\n\t} else if ( config == 1 ) {\n\t\tn = 3;\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t\tL[2] = -L[3].z * L[0] + L[0].z * L[3];\n\t} else if ( config == 2 ) {\n\t\tn = 3;\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t} else if ( config == 3 ) {\n\t\tn = 4;\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t\tL[3] = -L[3].z * L[0] + L[0].z * L[3];\n\t} else if ( config == 4 ) {\n\t\tn = 3;\n\t\tL[0] = -L[3].z * L[2] + L[2].z * L[3];\n\t\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\n\t} else if ( config == 5 ) {\n\t\tn = 0;\n\t} else if ( config == 6 ) {\n\t\tn = 4;\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\n\t} else if ( config == 7 ) {\n\t\tn = 5;\n\t\tL[4] = -L[3].z * L[0] + L[0].z * L[3];\n\t\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\n\t} else if ( config == 8 ) {\n\t\tn = 3;\n\t\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\n\t\tL[1] = -L[2].z * L[3] + L[3].z * L[2];\n\t\tL[2] = L[3];\n\t} else if ( config == 9 ) {\n\t\tn = 4;\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t\tL[2] = -L[2].z * L[3] + L[3].z * L[2];\n\t} else if ( config == 10 ) {\n\t\tn = 0;\n\t} else if ( config == 11 ) {\n\t\tn = 5;\n\t\tL[4] = L[3];\n\t\tL[3] = -L[2].z * L[3] + L[3].z * L[2];\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t} else if ( config == 12 ) {\n\t\tn = 4;\n\t\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\n\t\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\n\t} else if ( config == 13 ) {\n\t\tn = 5;\n\t\tL[4] = L[3];\n\t\tL[3] = L[2];\n\t\tL[2] = -L[1].z * L[2] + L[2].z * L[1];\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t} else if ( config == 14 ) {\n\t\tn = 5;\n\t\tL[4] = -L[0].z * L[3] + L[3].z * L[0];\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t} else if ( config == 15 ) {\n\t\tn = 4;\n\t}\n\tif ( n == 3 )\n\t\tL[3] = L[0];\n\tif ( n == 4 )\n\t\tL[4] = L[0];\n}\nfloat integrateLtcBrdfOverRectEdge( vec3 v1, vec3 v2 ) {\n\tfloat cosTheta = dot( v1, v2 );\n\tfloat theta = acos( cosTheta );\n\tfloat res = cross( v1, v2 ).z * ( ( theta > 0.001 ) ? theta / sin( theta ) : 1.0 );\n\treturn res;\n}\nvoid initRectPoints( const in vec3 pos, const in vec3 halfWidth, const in vec3 halfHeight, out vec3 rectPoints[4] ) {\n\trectPoints[0] = pos - halfWidth - halfHeight;\n\trectPoints[1] = pos + halfWidth - halfHeight;\n\trectPoints[2] = pos + halfWidth + halfHeight;\n\trectPoints[3] = pos - halfWidth + halfHeight;\n}\nvec3 integrateLtcBrdfOverRect( const in GeometricContext geometry, const in mat3 brdfMat, const in vec3 rectPoints[4] ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 P = geometry.position;\n\tvec3 T1, T2;\n\tT1 = normalize(V - N * dot( V, N ));\n\tT2 = - cross( N, T1 );\n\tmat3 brdfWrtSurface = brdfMat * transpose( mat3( T1, T2, N ) );\n\tvec3 clippedRect[5];\n\tclippedRect[0] = brdfWrtSurface * ( rectPoints[0] - P );\n\tclippedRect[1] = brdfWrtSurface * ( rectPoints[1] - P );\n\tclippedRect[2] = brdfWrtSurface * ( rectPoints[2] - P );\n\tclippedRect[3] = brdfWrtSurface * ( rectPoints[3] - P );\n\tint n;\n\tclipQuadToHorizon(clippedRect, n);\n\tif ( n == 0 )\n\t\treturn vec3( 0, 0, 0 );\n\tclippedRect[0] = normalize( clippedRect[0] );\n\tclippedRect[1] = normalize( clippedRect[1] );\n\tclippedRect[2] = normalize( clippedRect[2] );\n\tclippedRect[3] = normalize( clippedRect[3] );\n\tclippedRect[4] = normalize( clippedRect[4] );\n\tfloat sum = 0.0;\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[0], clippedRect[1] );\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[1], clippedRect[2] );\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[2], clippedRect[3] );\n\tif (n >= 4)\n\t\tsum += integrateLtcBrdfOverRectEdge( clippedRect[3], clippedRect[4] );\n\tif (n == 5)\n\t\tsum += integrateLtcBrdfOverRectEdge( clippedRect[4], clippedRect[0] );\n\tsum = max( 0.0, sum );\n\tvec3 Lo_i = vec3( sum, sum, sum );\n\treturn Lo_i;\n}\nvec3 Rect_Area_Light_Specular_Reflectance(\n\t\tconst in GeometricContext geometry,\n\t\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight,\n\t\tconst in float roughness,\n\t\tconst in sampler2D ltcMat, const in sampler2D ltcMag ) {\n\tvec3 rectPoints[4];\n\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\n\tvec2 uv = ltcTextureCoords( geometry, roughness );\n\tvec4 brdfLtcApproxParams, t;\n\tbrdfLtcApproxParams = texture2D( ltcMat, uv );\n\tt = texture2D( ltcMat, uv );\n\tfloat brdfLtcScalar = texture2D( ltcMag, uv ).a;\n\tmat3 brdfLtcApproxMat = mat3(\n\t\tvec3( 1, 0, t.y ),\n\t\tvec3( 0, t.z, 0 ),\n\t\tvec3( t.w, 0, t.x )\n\t);\n\tvec3 specularReflectance = integrateLtcBrdfOverRect( geometry, brdfLtcApproxMat, rectPoints );\n\tspecularReflectance *= brdfLtcScalar;\n\treturn specularReflectance;\n}\nvec3 Rect_Area_Light_Diffuse_Reflectance(\n\t\tconst in GeometricContext geometry,\n\t\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight ) {\n\tvec3 rectPoints[4];\n\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\n\tmat3 diffuseBrdfMat = mat3(1);\n\tvec3 diffuseReflectance = integrateLtcBrdfOverRect( geometry, diffuseBrdfMat, rectPoints );\n\treturn diffuseReflectance;\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos );\n\t\tvec3 vSigmaY = dFdy( surf_pos );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n\t\tvec4 plane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t\t\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n\t\t\tvec4 plane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t\n\t#endif\n#endif\n",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transpose( const in mat3 v ) {\n\tmat3 tmp;\n\ttmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n\ttmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n\ttmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n\treturn tmp;\n}\n",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n",defaultnormal_vertex:"#ifdef FLIP_SIDED\n\tobjectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;\n",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n",encodings_fragment:" gl_FragColor = linearToOutputTexel( gl_FragColor );\n",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max(vRGB, 0.0), 1.0 );\n}\n",envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\tvec3 reflectView = flipNormal * normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n",envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n",envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n",fog_vertex:"\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n varying float fogDepth;\n#endif\n",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif\n",gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n",lights_pars:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltcMat;\tuniform sampler2D ltcMag;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = saturate( reflectVec.y * 0.5 + 0.5 );\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_BlinnPhong( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 matDiffColor = material.diffuseColor;\n\t\tvec3 matSpecColor = material.specularColor;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = BlinnExponentToGGXRoughness( material.specularShininess );\n\t\tvec3 spec = Rect_Area_Light_Specular_Reflectance(\n\t\t\t\tgeometry,\n\t\t\t\trectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\n\t\t\t\troughness,\n\t\t\t\tltcMat, ltcMag );\n\t\tvec3 diff = Rect_Area_Light_Diffuse_Reflectance(\n\t\t\t\tgeometry,\n\t\t\t\trectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\n\t\treflectedLight.directSpecular += lightColor * matSpecColor * spec / PI2;\n\t\treflectedLight.directDiffuse += lightColor * matDiffColor * diff / PI2;\n\t}\n#endif\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 matDiffColor = material.diffuseColor;\n\t\tvec3 matSpecColor = material.specularColor;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 spec = Rect_Area_Light_Specular_Reflectance(\n\t\t\t\tgeometry,\n\t\t\t\trectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\n\t\t\t\troughness,\n\t\t\t\tltcMat, ltcMag );\n\t\tvec3 diff = Rect_Area_Light_Diffuse_Reflectance(\n\t\t\t\tgeometry,\n\t\t\t\trectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\n\t\treflectedLight.directSpecular += lightColor * matSpecColor * spec;\n\t\treflectedLight.directDiffuse += lightColor * matDiffColor * diff;\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n",lights_template:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n\t#endif\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n\t#ifndef STANDARD\n\t\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\n\t#else\n\t\tvec3 clearCoatRadiance = vec3( 0.0 );\n\t#endif\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n",logdepthbuf_fragment:"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\t#endif\n#endif\n",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n",map_particle_fragment:"#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform vec4 offsetRepeat;\n\tuniform sampler2D map;\n#endif\n",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.r;\n#endif\n",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n",normal_flip:"#ifdef DOUBLE_SIDED\n\tfloat flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n#else\n\tfloat flipNormal = 1.0;\n#endif\n",normal_fragment:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal ) * flipNormal;\n#endif\n#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif\n",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 1.0 - 2.0 * rgb.xyz;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n",project_vertex:"#ifdef USE_SKINNING\n\tvec4 mvPosition = modelViewMatrix * skinned;\n#else\n\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.r;\n#endif\n",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn 1.0;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\tfloat dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif\n",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif\n",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}\n",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureWidth;\n\t\tuniform int boneTextureHeight;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\tskinned = bindMatrixInverse * skinned;\n#endif\n",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n",tonemapping_pars_fragment:"#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n",uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform vec4 offsetRepeat;\n#endif\n",uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\t#ifdef USE_SKINNING\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\t#else\n\t\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n\t#endif\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n",cube_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",distanceRGBA_frag:"uniform vec3 lightPos;\nvarying vec4 vWorldPosition;\n#include \n#include \n#include \nvoid main () {\n\t#include \n\tgl_FragColor = packDepthToRGBA( length( vWorldPosition.xyz - lightPos.xyz ) / 1000.0 );\n}\n",distanceRGBA_vert:"varying vec4 vWorldPosition;\n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition;\n}\n",equirect_frag:"uniform sampler2D tEquirect;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n",equirect_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}\n",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",shadow_frag:"uniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0 - getShadowMask() ) );\n}\n",shadow_vert:"#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"};q.prototype={constructor:q,isColor:!0,r:1,g:1,b:1,set:function(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this},setScalar:function(t){return this.r=t,this.g=t,this.b=t,this},setHex:function(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this},setRGB:function(t,e,n){return this.r=t,this.g=e,this.b=n,this},setHSL:function(){function t(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}return function(e,n,r){if(e=ds.euclideanModulo(e,1),n=ds.clamp(n,0,1),r=ds.clamp(r,0,1),0===n)this.r=this.g=this.b=r;else{var i=r<=.5?r*(1+n):r+n-r*n,o=2*r-i;this.r=t(o,i,e+1/3),this.g=t(o,i,e),this.b=t(o,i,e-1/3)}return this}}(),setStyle:function(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}var n;if(n=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(t)){var r,i=n[1],o=n[2];switch(i){case"rgb":case"rgba":if(r=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o))return this.r=Math.min(255,parseInt(r[1],10))/255,this.g=Math.min(255,parseInt(r[2],10))/255,this.b=Math.min(255,parseInt(r[3],10))/255,e(r[5]),this;if(r=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o))return this.r=Math.min(100,parseInt(r[1],10))/100,this.g=Math.min(100,parseInt(r[2],10))/100,this.b=Math.min(100,parseInt(r[3],10))/100,e(r[5]),this;break;case"hsl":case"hsla":if(r=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)){var a=parseFloat(r[1])/360,s=parseInt(r[2],10)/100,u=parseInt(r[3],10)/100;return e(r[5]),this.setHSL(a,s,u)}}}else if(n=/^\#([A-Fa-f0-9]+)$/.exec(t)){var c=n[1],l=c.length;if(3===l)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===l)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}if(t&&t.length>0){var c=ws[t];void 0!==c?this.setHex(c):console.warn("THREE.Color: Unknown color "+t)}return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(t){return this.r=t.r,this.g=t.g,this.b=t.b,this},copyGammaToLinear:function(t,e){return void 0===e&&(e=2),this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this},copyLinearToGamma:function(t,e){void 0===e&&(e=2);var n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this},convertGammaToLinear:function(){var t=this.r,e=this.g,n=this.b;return this.r=t*t,this.g=e*e,this.b=n*n,this},convertLinearToGamma:function(){return this.r=Math.sqrt(this.r),this.g=Math.sqrt(this.g),this.b=Math.sqrt(this.b),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(t){var e,n,r=t||{h:0,s:0,l:0},i=this.r,o=this.g,a=this.b,s=Math.max(i,o,a),u=Math.min(i,o,a),c=(u+s)/2;if(u===s)e=0,n=0;else{var l=s-u;switch(n=c<=.5?l/(s+u):l/(2-s-u),s){case i:e=(o-a)/l+(othis.max.x||t.ythis.max.y)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y},getParameter:function(t,e){return(e||new i).set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)},clampPoint:function(t,e){return(e||new i).copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new i;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}};var Ts=0;$.prototype={constructor:$,isMaterial:!0,get needsUpdate(){return this._needsUpdate},set needsUpdate(t){!0===t&&this.update(),this._needsUpdate=t},setValues:function(t){if(void 0!==t)for(var e in t){var n=t[e];if(void 0!==n){var r=this[e];void 0!==r?r&&r.isColor?r.set(n):r&&r.isVector3&&n&&n.isVector3?r.copy(n):this[e]="overdraw"===e?Number(n):n:console.warn("THREE."+this.type+": '"+e+"' is not a property of this material.")}else console.warn("THREE.Material: '"+e+"' parameter is undefined.")}},toJSON:function(t){function e(t){var e=[];for(var n in t){var r=t[n];delete r.metadata,e.push(r)}return e}var n=void 0===t;n&&(t={textures:{},images:{}});var r={metadata:{version:4.4,type:"Material",generator:"Material.toJSON"}};if(r.uuid=this.uuid,r.type=this.type,""!==this.name&&(r.name=this.name),this.color&&this.color.isColor&&(r.color=this.color.getHex()),void 0!==this.roughness&&(r.roughness=this.roughness),void 0!==this.metalness&&(r.metalness=this.metalness),this.emissive&&this.emissive.isColor&&(r.emissive=this.emissive.getHex()),this.specular&&this.specular.isColor&&(r.specular=this.specular.getHex()),void 0!==this.shininess&&(r.shininess=this.shininess),void 0!==this.clearCoat&&(r.clearCoat=this.clearCoat),void 0!==this.clearCoatRoughness&&(r.clearCoatRoughness=this.clearCoatRoughness),this.map&&this.map.isTexture&&(r.map=this.map.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(r.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(r.lightMap=this.lightMap.toJSON(t).uuid),this.bumpMap&&this.bumpMap.isTexture&&(r.bumpMap=this.bumpMap.toJSON(t).uuid,r.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(r.normalMap=this.normalMap.toJSON(t).uuid,r.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(r.displacementMap=this.displacementMap.toJSON(t).uuid,r.displacementScale=this.displacementScale,r.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(r.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(r.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(r.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(r.specularMap=this.specularMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(r.envMap=this.envMap.toJSON(t).uuid,r.reflectivity=this.reflectivity),this.gradientMap&&this.gradientMap.isTexture&&(r.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.size&&(r.size=this.size),void 0!==this.sizeAttenuation&&(r.sizeAttenuation=this.sizeAttenuation),this.blending!==vo&&(r.blending=this.blending),this.shading!==lo&&(r.shading=this.shading),this.side!==ao&&(r.side=this.side),this.vertexColors!==ho&&(r.vertexColors=this.vertexColors),this.opacity<1&&(r.opacity=this.opacity),!0===this.transparent&&(r.transparent=this.transparent),r.depthFunc=this.depthFunc,r.depthTest=this.depthTest,r.depthWrite=this.depthWrite,this.alphaTest>0&&(r.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(r.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(r.wireframe=this.wireframe),this.wireframeLinewidth>1&&(r.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(r.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(r.wireframeLinejoin=this.wireframeLinejoin),r.skinning=this.skinning,r.morphTargets=this.morphTargets,n){var i=e(t.textures),o=e(t.images);i.length>0&&(r.textures=i),o.length>0&&(r.images=o)}return r},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.lights=t.lights,this.blending=t.blending,this.side=t.side,this.shading=t.shading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.overdraw=t.overdraw,this.visible=t.visible,this.clipShadows=t.clipShadows,this.clipIntersection=t.clipIntersection;var e=t.clippingPlanes,n=null;if(null!==e){var r=e.length;n=new Array(r);for(var i=0;i!==r;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this},update:function(){this.dispatchEvent({type:"update"})},dispose:function(){this.dispatchEvent({type:"dispose"})}},Object.assign($.prototype,r.prototype),Q.prototype=Object.create($.prototype),Q.prototype.constructor=Q,Q.prototype.isShaderMaterial=!0,Q.prototype.copy=function(t){return $.prototype.copy.call(this,t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=xs.clone(t.uniforms),this.defines=t.defines,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.extensions=t.extensions,this},Q.prototype.toJSON=function(t){var e=$.prototype.toJSON.call(this,t);return e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e},tt.prototype=Object.create($.prototype),tt.prototype.constructor=tt,tt.prototype.isMeshDepthMaterial=!0,tt.prototype.copy=function(t){return $.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},et.prototype={constructor:et,isBox3:!0,set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromArray:function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,o=-1/0,a=-1/0,s=0,u=t.length;si&&(i=c),l>o&&(o=l),h>a&&(a=h)}return this.min.set(e,n,r),this.max.set(i,o,a),this},setFromBufferAttribute:function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,o=-1/0,a=-1/0,s=0,u=t.count;si&&(i=c),l>o&&(o=l),h>a&&(a=h)}return this.min.set(e,n,r),this.max.set(i,o,a),this},setFromPoints:function(t){this.makeEmpty();for(var e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z},getParameter:function(t,e){return(e||new l).set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)},intersectsSphere:function(){var t;return function(e){return void 0===t&&(t=new l),this.clampPoint(e.center,t),t.distanceToSquared(e.center)<=e.radius*e.radius}}(),intersectsPlane:function(t){var e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=t.constant&&n>=t.constant},clampPoint:function(t,e){return(e||new l).copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new l;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),getBoundingSphere:function(){var t=new l;return function(e){var n=e||new nt;return this.getCenter(n.center),n.radius=.5*this.getSize(t).length(),n}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},applyMatrix4:function(){var t=[new l,new l,new l,new l,new l,new l,new l,new l];return function(e){return this.isEmpty()?this:(t[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),t[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),t[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),t[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),t[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),t[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),t[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),t[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(t),this)}}(),translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}},nt.prototype={constructor:nt,set:function(t,e){return this.center.copy(t),this.radius=e,this},setFromPoints:function(){var t;return function(e,n){void 0===t&&(t=new et);var r=this.center;void 0!==n?r.copy(n):t.setFromPoints(e).getCenter(r);for(var i=0,o=0,a=e.length;othis.radius*this.radius&&(r.sub(this.center).normalize(),r.multiplyScalar(this.radius).add(this.center)),r},getBoundingBox:function(t){var e=t||new et;return e.set(this.center,this.center),e.expandByScalar(this.radius),e},applyMatrix4:function(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this},translate:function(t){return this.center.add(t),this},equals:function(t){return t.center.equals(this.center)&&t.radius===this.radius}},rt.prototype={constructor:rt,isMatrix3:!0,set:function(t,e,n,r,i,o,a,s,u){var c=this.elements;return c[0]=t,c[1]=r,c[2]=a,c[3]=e,c[4]=i,c[5]=s,c[6]=n,c[7]=o,c[8]=u,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(t){var e=t.elements;return this.set(e[0],e[3],e[6],e[1],e[4],e[7],e[2],e[5],e[8]),this},setFromMatrix4:function(t){var e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this},applyToBufferAttribute:function(){var t;return function(e){void 0===t&&(t=new l);for(var n=0,r=e.count;n1))return r.copy(i).multiplyScalar(a).add(e.start)}else if(0===this.distanceToPoint(e.start))return r.copy(e.start)}}(),intersectsLine:function(t){var e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0},intersectsBox:function(t){return t.intersectsPlane(this)},intersectsSphere:function(t){return t.intersectsPlane(this)},coplanarPoint:function(t){return(t||new l).copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var t=new l,e=new rt;return function(n,r){var i=this.coplanarPoint(t).applyMatrix4(n),o=r||e.getNormalMatrix(n),a=this.normal.applyMatrix3(o).normalize();return this.constant=-i.dot(a),this}}(),translate:function(t){return this.constant=this.constant-t.dot(this.normal),this},equals:function(t){return t.normal.equals(this.normal)&&t.constant===this.constant}},ot.prototype={constructor:ot,set:function(t,e,n,r,i,o){var a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(r),a[4].copy(i),a[5].copy(o),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){for(var e=this.planes,n=0;n<6;n++)e[n].copy(t.planes[n]);return this},setFromMatrix:function(t){var e=this.planes,n=t.elements,r=n[0],i=n[1],o=n[2],a=n[3],s=n[4],u=n[5],c=n[6],l=n[7],h=n[8],p=n[9],d=n[10],f=n[11],m=n[12],v=n[13],g=n[14],y=n[15];return e[0].setComponents(a-r,l-s,f-h,y-m).normalize(),e[1].setComponents(a+r,l+s,f+h,y+m).normalize(),e[2].setComponents(a+i,l+u,f+p,y+v).normalize(),e[3].setComponents(a-i,l-u,f-p,y-v).normalize(),e[4].setComponents(a-o,l-c,f-d,y-g).normalize(),e[5].setComponents(a+o,l+c,f+d,y+g).normalize(),this},intersectsObject:function(){var t=new nt;return function(e){var n=e.geometry;return null===n.boundingSphere&&n.computeBoundingSphere(),t.copy(n.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSprite:function(){var t=new nt;return function(e){return t.center.set(0,0,0),t.radius=.7071067811865476,t.applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSphere:function(t){for(var e=this.planes,n=t.center,r=-t.radius,i=0;i<6;i++){if(e[i].distanceToPoint(n)0?n.min.x:n.max.x,e.x=o.normal.x>0?n.max.x:n.min.x,t.y=o.normal.y>0?n.min.y:n.max.y,e.y=o.normal.y>0?n.max.y:n.min.y,t.z=o.normal.z>0?n.min.z:n.max.z,e.z=o.normal.z>0?n.max.z:n.min.z;var a=o.distanceToPoint(t),s=o.distanceToPoint(e);if(a<0&&s<0)return!1}return!0}}(),containsPoint:function(t){for(var e=this.planes,n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}},st.prototype={constructor:st,set:function(t,e){return this.origin.copy(t),this.direction.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this},at:function(t,e){return(e||new l).copy(this.direction).multiplyScalar(t).add(this.origin)},lookAt:function(t){return this.direction.copy(t).sub(this.origin).normalize(),this},recast:function(){var t=new l;return function(e){return this.origin.copy(this.at(e,t)),this}}(),closestPointToPoint:function(t,e){var n=e||new l;n.subVectors(t,this.origin);var r=n.dot(this.direction);return r<0?n.copy(this.origin):n.copy(this.direction).multiplyScalar(r).add(this.origin)},distanceToPoint:function(t){return Math.sqrt(this.distanceSqToPoint(t))},distanceSqToPoint:function(){var t=new l;return function(e){var n=t.subVectors(e,this.origin).dot(this.direction);return n<0?this.origin.distanceToSquared(e):(t.copy(this.direction).multiplyScalar(n).add(this.origin),t.distanceToSquared(e))}}(),distanceSqToSegment:function(){var t=new l,e=new l,n=new l;return function(r,i,o,a){t.copy(r).add(i).multiplyScalar(.5),e.copy(i).sub(r).normalize(),n.copy(this.origin).sub(t);var s,u,c,l,h=.5*r.distanceTo(i),p=-this.direction.dot(e),d=n.dot(this.direction),f=-n.dot(e),m=n.lengthSq(),v=Math.abs(1-p*p);if(v>0)if(s=p*f-d,u=p*d-f,l=h*v,s>=0)if(u>=-l)if(u<=l){var g=1/v;s*=g,u*=g,c=s*(s+p*u+2*d)+u*(p*s+u+2*f)+m}else u=h,s=Math.max(0,-(p*u+d)),c=-s*s+u*(u+2*f)+m;else u=-h,s=Math.max(0,-(p*u+d)),c=-s*s+u*(u+2*f)+m;else u<=-l?(s=Math.max(0,-(-p*h+d)),u=s>0?-h:Math.min(Math.max(-h,-f),h),c=-s*s+u*(u+2*f)+m):u<=l?(s=0,u=Math.min(Math.max(-h,-f),h),c=u*(u+2*f)+m):(s=Math.max(0,-(p*h+d)),u=s>0?h:Math.min(Math.max(-h,-f),h),c=-s*s+u*(u+2*f)+m);else u=p>0?-h:h,s=Math.max(0,-(p*u+d)),c=-s*s+u*(u+2*f)+m;return o&&o.copy(this.direction).multiplyScalar(s).add(this.origin),a&&a.copy(e).multiplyScalar(u).add(t),c}}(),intersectSphere:function(){var t=new l;return function(e,n){t.subVectors(e.center,this.origin);var r=t.dot(this.direction),i=t.dot(t)-r*r,o=e.radius*e.radius;if(i>o)return null;var a=Math.sqrt(o-i),s=r-a,u=r+a;return s<0&&u<0?null:s<0?this.at(u,n):this.at(s,n)}}(),intersectsSphere:function(t){return this.distanceToPoint(t.center)<=t.radius},distanceToPlane:function(t){var e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;var n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null},intersectPlane:function(t,e){var n=this.distanceToPlane(t);return null===n?null:this.at(n,e)},intersectsPlane:function(t){var e=t.distanceToPoint(this.origin);return 0===e||t.normal.dot(this.direction)*e<0},intersectBox:function(t,e){var n,r,i,o,a,s,u=1/this.direction.x,c=1/this.direction.y,l=1/this.direction.z,h=this.origin;return u>=0?(n=(t.min.x-h.x)*u,r=(t.max.x-h.x)*u):(n=(t.max.x-h.x)*u,r=(t.min.x-h.x)*u),c>=0?(i=(t.min.y-h.y)*c,o=(t.max.y-h.y)*c):(i=(t.max.y-h.y)*c,o=(t.min.y-h.y)*c),n>o||i>r?null:((i>n||n!==n)&&(n=i),(o=0?(a=(t.min.z-h.z)*l,s=(t.max.z-h.z)*l):(a=(t.max.z-h.z)*l,s=(t.min.z-h.z)*l),n>s||a>r?null:((a>n||n!==n)&&(n=a),(s=0?n:r,e)))},intersectsBox:function(){var t=new l;return function(e){return null!==this.intersectBox(e,t)}}(),intersectTriangle:function(){var t=new l,e=new l,n=new l,r=new l;return function(i,o,a,s,u){e.subVectors(o,i),n.subVectors(a,i),r.crossVectors(e,n);var c,l=this.direction.dot(r);if(l>0){if(s)return null;c=1}else{if(!(l<0))return null;c=-1,l=-l}t.subVectors(this.origin,i);var h=c*this.direction.dot(n.crossVectors(t,n));if(h<0)return null;var p=c*this.direction.dot(e.cross(t));if(p<0)return null;if(h+p>l)return null;var d=-c*t.dot(r);return d<0?null:this.at(d/l,u)}}(),applyMatrix4:function(t){return this.direction.add(this.origin).applyMatrix4(t),this.origin.applyMatrix4(t),this.direction.sub(this.origin),this.direction.normalize(),this},equals:function(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}},ut.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"],ut.DefaultOrder="XYZ",ut.prototype={constructor:ut,isEuler:!0,get x(){return this._x},set x(t){this._x=t,this.onChangeCallback()},get y(){return this._y},set y(t){this._y=t,this.onChangeCallback()},get z(){return this._z},set z(t){this._z=t,this.onChangeCallback()},get order(){return this._order},set order(t){this._order=t,this.onChangeCallback()},set:function(t,e,n,r){return this._x=t,this._y=e,this._z=n,this._order=r||this._order,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this.onChangeCallback(),this},setFromRotationMatrix:function(t,e,n){var r=ds.clamp,i=t.elements,o=i[0],a=i[4],s=i[8],u=i[1],c=i[5],l=i[9],h=i[2],p=i[6],d=i[10];return e=e||this._order,"XYZ"===e?(this._y=Math.asin(r(s,-1,1)),Math.abs(s)<.99999?(this._x=Math.atan2(-l,d),this._z=Math.atan2(-a,o)):(this._x=Math.atan2(p,c),this._z=0)):"YXZ"===e?(this._x=Math.asin(-r(l,-1,1)),Math.abs(l)<.99999?(this._y=Math.atan2(s,d),this._z=Math.atan2(u,c)):(this._y=Math.atan2(-h,o),this._z=0)):"ZXY"===e?(this._x=Math.asin(r(p,-1,1)),Math.abs(p)<.99999?(this._y=Math.atan2(-h,d),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(u,o))):"ZYX"===e?(this._y=Math.asin(-r(h,-1,1)),Math.abs(h)<.99999?(this._x=Math.atan2(p,d),this._z=Math.atan2(u,o)):(this._x=0,this._z=Math.atan2(-a,c))):"YZX"===e?(this._z=Math.asin(r(u,-1,1)),Math.abs(u)<.99999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-h,o)):(this._x=0,this._y=Math.atan2(s,d))):"XZY"===e?(this._z=Math.asin(-r(a,-1,1)),Math.abs(a)<.99999?(this._x=Math.atan2(p,c),this._y=Math.atan2(s,o)):(this._x=Math.atan2(-l,d),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+e),this._order=e,!1!==n&&this.onChangeCallback(),this},setFromQuaternion:function(){var t;return function(e,n,r){return void 0===t&&(t=new h),t.makeRotationFromQuaternion(e),this.setFromRotationMatrix(t,n,r)}}(),setFromVector3:function(t,e){return this.set(t.x,t.y,t.z,e||this._order)},reorder:function(){var t=new c;return function(e){return t.setFromEuler(this),this.setFromQuaternion(t,e)}}(),equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order},fromArray:function(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t},toVector3:function(t){return t?t.set(this._x,this._y,this._z):new l(this._x,this._y,this._z)},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}},ct.prototype={constructor:ct,set:function(t){this.mask=1<1){for(var e=0;e1)for(var e=0;e0){i.children=[];for(var o=0;o0&&(r.geometries=a),s.length>0&&(r.materials=s),u.length>0&&(r.textures=u),c.length>0&&(r.images=c)}return r.object=i,r},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e){if(void 0===e&&(e=!0),this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(var n=0;n0?o.multiplyScalar(1/Math.sqrt(a)):o.set(0,0,0)}}(),pt.barycoordFromPoint=function(){var t=new l,e=new l,n=new l;return function(r,i,o,a,s){t.subVectors(a,i),e.subVectors(o,i),n.subVectors(r,i);var u=t.dot(t),c=t.dot(e),h=t.dot(n),p=e.dot(e),d=e.dot(n),f=u*p-c*c,m=s||new l;if(0===f)return m.set(-2,-1,-1);var v=1/f,g=(p*h-c*d)*v,y=(u*d-c*h)*v;return m.set(1-g-y,y,g)}}(),pt.containsPoint=function(){var t=new l;return function(e,n,r,i){var o=pt.barycoordFromPoint(e,n,r,i,t);return o.x>=0&&o.y>=0&&o.x+o.y<=1}}(),pt.prototype={constructor:pt,set:function(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this},setFromPointsAndIndices:function(t,e,n,r){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[r]),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this},area:function(){var t=new l,e=new l;return function(){return t.subVectors(this.c,this.b),e.subVectors(this.a,this.b),.5*t.cross(e).length()}}(),midpoint:function(t){return(t||new l).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(t){return pt.normal(this.a,this.b,this.c,t)},plane:function(t){return(t||new it).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(t,e){return pt.barycoordFromPoint(t,this.a,this.b,this.c,e)},containsPoint:function(t){return pt.containsPoint(t,this.a,this.b,this.c)},closestPointToPoint:function(){var t,e,n,r;return function(i,o){void 0===t&&(t=new it,e=[new ht,new ht,new ht],n=new l,r=new l);var a=o||new l,s=1/0;if(t.setFromCoplanarPoints(this.a,this.b,this.c),t.projectPoint(i,n),!0===this.containsPoint(n))a.copy(n);else{e[0].set(this.a,this.b),e[1].set(this.b,this.c),e[2].set(this.c,this.a);for(var u=0;u0,s=o[1]&&o[1].length>0,u=t.morphTargets,c=u.length;if(c>0){e=[];for(var l=0;l0){h=[];for(var l=0;l0)for(var m=0;m0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var t,e,n;for(this.computeFaceNormals(),t=0,e=this.faces.length;t0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var t,e,n,r,i;for(n=0,r=this.faces.length;n0&&(t+=e[n].distanceTo(e[n-1])),this.lineDistances[n]=t},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new et),this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new nt),this.boundingSphere.setFromPoints(this.vertices)},merge:function(t,e,n){if(!1===(t&&t.isGeometry))return void console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",t);var r,i=this.vertices.length,o=this.vertices,a=t.vertices,s=this.faces,u=t.faces,c=this.faceVertexUvs[0],l=t.faceVertexUvs[0],h=this.colors,p=t.colors;void 0===n&&(n=0),void 0!==e&&(r=(new rt).getNormalMatrix(e));for(var d=0,f=a.length;d=0;n--){var f=p[n];for(this.faces.splice(f,1),a=0,s=this.faceVertexUvs.length;a0,x=g.vertexNormals.length>0,_=1!==g.color.r||1!==g.color.g||1!==g.color.b,w=g.vertexColors.length>0,M=0;if(M=t(M,0,0),M=t(M,1,!0),M=t(M,2,!1),M=t(M,3,y),M=t(M,4,b),M=t(M,5,x),M=t(M,6,_),M=t(M,7,w),l.push(M),l.push(g.a,g.b,g.c),l.push(g.materialIndex),y){var E=this.faceVertexUvs[0][u];l.push(r(E[0]),r(E[1]),r(E[2]))}if(b&&l.push(e(g.normal)),x){var T=g.vertexNormals;l.push(e(T[0]),e(T[1]),e(T[2]))}if(_&&l.push(n(g.color)),w){var S=g.vertexColors;l.push(n(S[0]),n(S[1]),n(S[2]))}}return i.data={},i.data.vertices=s,i.data.normals=h,d.length>0&&(i.data.colors=d),m.length>0&&(i.data.uvs=[m]),i.data.faces=l,i},clone:function(){return(new Ct).copy(this)},copy:function(t){var e,n,r,i,o,a;this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;var s=t.vertices;for(e=0,n=s.length;e65535?wt:xt)(t,1):this.index=t},addAttribute:function(t,e){return!1===(e&&e.isBufferAttribute)&&!1===(e&&e.isInterleavedBufferAttribute)?(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),void this.addAttribute(t,new mt(arguments[1],arguments[2]))):"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),void this.setIndex(e)):(this.attributes[t]=e,this)},getAttribute:function(t){return this.attributes[t]},removeAttribute:function(t){return delete this.attributes[t],this},addGroup:function(t,e,n){this.groups.push({start:t,count:e,materialIndex:void 0!==n?n:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix:function(t){var e=this.attributes.position;void 0!==e&&(t.applyToBufferAttribute(e),e.needsUpdate=!0);var n=this.attributes.normal;if(void 0!==n){(new rt).getNormalMatrix(t).applyToBufferAttribute(n),n.needsUpdate=!0}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(){var t;return function(e){return void 0===t&&(t=new h),t.makeRotationX(e),this.applyMatrix(t),this}}(),rotateY:function(){var t;return function(e){return void 0===t&&(t=new h),t.makeRotationY(e),this.applyMatrix(t),this}}(),rotateZ:function(){var t;return function(e){return void 0===t&&(t=new h),t.makeRotationZ(e),this.applyMatrix(t),this}}(),translate:function(){var t;return function(e,n,r){return void 0===t&&(t=new h),t.makeTranslation(e,n,r),this.applyMatrix(t),this}}(),scale:function(){var t;return function(e,n,r){return void 0===t&&(t=new h),t.makeScale(e,n,r),this.applyMatrix(t),this}}(),lookAt:function(){var t;return function(e){void 0===t&&(t=new lt),t.lookAt(e),t.updateMatrix(),this.applyMatrix(t.matrix)}}(),center:function(){this.computeBoundingBox();var t=this.boundingBox.getCenter().negate();return this.translate(t.x,t.y,t.z),t},setFromObject:function(t){var e=t.geometry;if(t.isPoints||t.isLine){var n=new Mt(3*e.vertices.length,3),r=new Mt(3*e.colors.length,3);if(this.addAttribute("position",n.copyVector3sArray(e.vertices)),this.addAttribute("color",r.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length){var i=new Mt(e.lineDistances.length,1);this.addAttribute("lineDistance",i.copyArray(e.lineDistances))}null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else t.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},updateFromObject:function(t){var e=t.geometry;if(t.isMesh){var n=e.__directGeometry;if(!0===e.elementsNeedUpdate&&(n=void 0,e.elementsNeedUpdate=!1),void 0===n)return this.fromGeometry(e);n.verticesNeedUpdate=e.verticesNeedUpdate,n.normalsNeedUpdate=e.normalsNeedUpdate,n.colorsNeedUpdate=e.colorsNeedUpdate,n.uvsNeedUpdate=e.uvsNeedUpdate,n.groupsNeedUpdate=e.groupsNeedUpdate,e.verticesNeedUpdate=!1,e.normalsNeedUpdate=!1,e.colorsNeedUpdate=!1,e.uvsNeedUpdate=!1,e.groupsNeedUpdate=!1,e=n}var r;return!0===e.verticesNeedUpdate&&(r=this.attributes.position,void 0!==r&&(r.copyVector3sArray(e.vertices),r.needsUpdate=!0),e.verticesNeedUpdate=!1),!0===e.normalsNeedUpdate&&(r=this.attributes.normal,void 0!==r&&(r.copyVector3sArray(e.normals),r.needsUpdate=!0),e.normalsNeedUpdate=!1),!0===e.colorsNeedUpdate&&(r=this.attributes.color,void 0!==r&&(r.copyColorsArray(e.colors),r.needsUpdate=!0),e.colorsNeedUpdate=!1),e.uvsNeedUpdate&&(r=this.attributes.uv,void 0!==r&&(r.copyVector2sArray(e.uvs),r.needsUpdate=!0),e.uvsNeedUpdate=!1),e.lineDistancesNeedUpdate&&(r=this.attributes.lineDistance,void 0!==r&&(r.copyArray(e.lineDistances),r.needsUpdate=!0),e.lineDistancesNeedUpdate=!1),e.groupsNeedUpdate&&(e.computeGroups(t.geometry),this.groups=e.groups,e.groupsNeedUpdate=!1),this},fromGeometry:function(t){return t.__directGeometry=(new Tt).fromGeometry(t),this.fromDirectGeometry(t.__directGeometry)},fromDirectGeometry:function(t){var e=new Float32Array(3*t.vertices.length);if(this.addAttribute("position",new mt(e,3).copyVector3sArray(t.vertices)),t.normals.length>0){var n=new Float32Array(3*t.normals.length);this.addAttribute("normal",new mt(n,3).copyVector3sArray(t.normals))}if(t.colors.length>0){var r=new Float32Array(3*t.colors.length);this.addAttribute("color",new mt(r,3).copyColorsArray(t.colors))}if(t.uvs.length>0){var i=new Float32Array(2*t.uvs.length);this.addAttribute("uv",new mt(i,2).copyVector2sArray(t.uvs))}if(t.uvs2.length>0){var o=new Float32Array(2*t.uvs2.length);this.addAttribute("uv2",new mt(o,2).copyVector2sArray(t.uvs2))}if(t.indices.length>0){var a=St(t.indices)>65535?Uint32Array:Uint16Array,s=new a(3*t.indices.length);this.setIndex(new mt(s,1).copyIndicesArray(t.indices))}this.groups=t.groups;for(var u in t.morphTargets){for(var c=[],l=t.morphTargets[u],h=0,p=l.length;h0){var m=new Mt(4*t.skinIndices.length,4);this.addAttribute("skinIndex",m.copyVector4sArray(t.skinIndices))}if(t.skinWeights.length>0){var v=new Mt(4*t.skinWeights.length,4);this.addAttribute("skinWeight",v.copyVector4sArray(t.skinWeights))}return null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new et);var t=this.attributes.position;void 0!==t?this.boundingBox.setFromBufferAttribute(t):this.boundingBox.makeEmpty(),(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)},computeBoundingSphere:function(){var t=new et,e=new l;return function(){null===this.boundingSphere&&(this.boundingSphere=new nt);var n=this.attributes.position;if(n){var r=this.boundingSphere.center;t.setFromBufferAttribute(n),t.getCenter(r);for(var i=0,o=0,a=n.count;o0&&(t.data.groups=JSON.parse(JSON.stringify(s)));var u=this.boundingSphere;return null!==u&&(t.data.boundingSphere={center:u.center.toArray(),radius:u.radius}),t},clone:function(){return(new Pt).copy(this)},copy:function(t){var e,n,r;this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;var i=t.index;null!==i&&this.setIndex(i.clone());var o=t.attributes;for(e in o){var a=o[e];this.addAttribute(e,a.clone())}var s=t.morphAttributes;for(e in s){var u=[],c=s[e];for(n=0,r=c.length;n0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(var e=0,n=t.length;ee.far?null:{distance:u,point:x.clone(),object:t}}function n(n,r,i,o,a,l,h,p){s.fromBufferAttribute(o,l),u.fromBufferAttribute(o,h),c.fromBufferAttribute(o,p);var d=e(n,r,i,s,u,c,b);return d&&(a&&(m.fromBufferAttribute(a,l),v.fromBufferAttribute(a,h),g.fromBufferAttribute(a,p),d.uv=t(b,s,u,c,m,v,g)),d.face=new dt(l,h,p,pt.normal(s,u,c)),d.faceIndex=l),d}var r=new h,o=new st,a=new nt,s=new l,u=new l,c=new l,p=new l,d=new l,f=new l,m=new i,v=new i,g=new i,y=new l,b=new l,x=new l;return function(i,l){var h=this.geometry,y=this.material,x=this.matrixWorld;if(void 0!==y&&(null===h.boundingSphere&&h.computeBoundingSphere(),a.copy(h.boundingSphere),a.applyMatrix4(x),!1!==i.ray.intersectsSphere(a)&&(r.getInverse(x),o.copy(i.ray).applyMatrix4(r),null===h.boundingBox||!1!==o.intersectsBox(h.boundingBox)))){var _;if(h.isBufferGeometry){var w,M,E,T,S,A=h.index,C=h.attributes.position,P=h.attributes.uv;if(null!==A)for(T=0,S=A.count;T0&&(I=F);for(var B=0,z=k.length;Bthis.scale.x*this.scale.y/4||n.push({distance:Math.sqrt(r),point:this.position,face:null,object:this})}}(),clone:function(){return new this.constructor(this.material).copy(this)}}),ge.prototype=Object.assign(Object.create(lt.prototype),{constructor:ge,copy:function(t){lt.prototype.copy.call(this,t,!1);for(var e=t.levels,n=0,r=e.length;n1){t.setFromMatrixPosition(n.matrixWorld),e.setFromMatrixPosition(this.matrixWorld);var i=t.distanceTo(e);r[0].object.visible=!0;for(var o=1,a=r.length;o=r[o].distance;o++)r[o-1].object.visible=!1,r[o].object.visible=!0;for(;oa)){d.applyMatrix4(this.matrixWorld);var E=r.ray.origin.distanceTo(d);Er.far||i.push({distance:E,point:p.clone().applyMatrix4(this.matrixWorld),index:b,face:null,faceIndex:null,object:this})}}else for(var b=0,x=g.length/3-1;ba)){d.applyMatrix4(this.matrixWorld);var E=r.ray.origin.distanceTo(d);Er.far||i.push({distance:E,point:p.clone().applyMatrix4(this.matrixWorld),index:b,face:null,faceIndex:null,object:this})}}}else if(s.isGeometry)for(var T=s.vertices,S=T.length,b=0;ba)){d.applyMatrix4(this.matrixWorld);var E=r.ray.origin.distanceTo(d);Er.far||i.push({distance:E,point:p.clone().applyMatrix4(this.matrixWorld),index:b,face:null,faceIndex:null,object:this})}}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),Me.prototype=Object.assign(Object.create(we.prototype),{constructor:Me,isLineSegments:!0}),Ee.prototype=Object.create($.prototype),Ee.prototype.constructor=Ee,Ee.prototype.isPointsMaterial=!0,Ee.prototype.copy=function(t){return $.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this},Te.prototype=Object.assign(Object.create(lt.prototype),{constructor:Te,isPoints:!0,raycast:function(){var t=new h,e=new st,n=new nt;return function(r,i){function o(t,n){var o=e.distanceSqToPoint(t);if(or.far)return;i.push({distance:c,distanceToRay:Math.sqrt(o),point:s.clone(),index:n,face:null,object:a})}}var a=this,s=this.geometry,u=this.matrixWorld,c=r.params.Points.threshold;if(null===s.boundingSphere&&s.computeBoundingSphere(),n.copy(s.boundingSphere),n.applyMatrix4(u),!1!==r.ray.intersectsSphere(n)){t.getInverse(u),e.copy(r.ray).applyMatrix4(t);var h=c/((this.scale.x+this.scale.y+this.scale.z)/3),p=h*h,d=new l;if(s.isBufferGeometry){var f=s.index,m=s.attributes,v=m.position.array;if(null!==f)for(var g=f.array,y=0,b=g.length;y=-Number.EPSILON&&C>=-Number.EPSILON&&A>=-Number.EPSILON))return!1;return!0}return function(e,n){var r=e.length;if(r<3)return null;var i,o,a,s=[],u=[],c=[];if(Ps.area(e)>0)for(o=0;o2;){if(h--<=0)return console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()"),n?c:s;if(i=o,l<=i&&(i=0),o=i+1,l<=o&&(o=0),a=o+1,l<=a&&(a=0),t(e,i,o,a,l,u)){var p,d,f,m,v;for(p=u[i],d=u[o],f=u[a],s.push([e[p],e[d],e[f]]),c.push([u[i],u[o],u[a]]),m=o,v=o+1;v2&&t[e-1].equals(t[0])&&t.pop()}function r(t,e,n){return t.x!==e.x?t.xNumber.EPSILON){var f;if(p>0){if(d<0||d>p)return[];if((f=c*l-u*h)<0||f>p)return[]}else{if(d>0||d0||fT?[]:x===T?o?[]:[y]:_<=T?[y,b]:[y,M]}function o(t,e,n,r){var i=e.x-t.x,o=e.y-t.y,a=n.x-t.x,s=n.y-t.y,u=r.x-t.x,c=r.y-t.y,l=i*s-o*a,h=i*c-o*u;if(Math.abs(l)>Number.EPSILON){var p=u*s-c*a;return l>0?h>=0&&p>=0:h>=0||p>=0}return h>0}n(t),e.forEach(n);for(var a,s,u,c,l,h,p={},d=t.concat(),f=0,m=e.length;f0;){if(--_<0){console.log("Infinite Loop! Holes left:"+v.length+", Probably Hole outside Shape!");break}for(a=x;ar&&(a=0);var s=o(m[t],m[i],m[a],n[e]);if(!s)return!1;var u=n.length-1,c=e-1;c<0&&(c=u);var l=e+1;return l>u&&(l=0),!!(s=o(n[e],n[c],n[l],m[t]))}(a,w)&&!function(t,e){var n,r,o;for(n=0;n0)return!0;return!1}(s,u)&&!function(t,n){var r,o,a,s,u;for(r=0;r0)return!0;return!1}(s,u)){r=w,v.splice(y,1),h=m.slice(0,a+1),p=m.slice(a),d=n.slice(r),f=n.slice(0,r+1),m=h.concat(d).concat(f).concat(p),x=a;break}if(r>=0)break;g[l]=!0}if(r>=0)break}}return m}(t,e),g=Ps.triangulate(v,!1);for(a=0,s=g.length;aNumber.EPSILON){var d=Math.sqrt(h),f=Math.sqrt(c*c+l*l),m=e.x-u/d,v=e.y+s/d,g=n.x-l/f,y=n.y+c/f,b=((g-m)*l-(y-v)*c)/(s*l-u*c);r=m+s*b-t.x,o=v+u*b-t.y;var x=r*r+o*o;if(x<=2)return new i(r,o);a=Math.sqrt(x/2)}else{var _=!1;s>Number.EPSILON?c>Number.EPSILON&&(_=!0):s<-Number.EPSILON?c<-Number.EPSILON&&(_=!0):Math.sign(u)===Math.sign(l)&&(_=!0),_?(r=-u,o=s,a=Math.sqrt(h)):(r=s,o=u,a=Math.sqrt(h/2))}return new i(r/a,o/a)}function o(t,e){var n,r;for(W=t.length;--W>=0;){n=W,r=W-1,r<0&&(r=t.length-1);var i=0,o=_+2*y;for(i=0;i=0;U--){for(F=U/y,B=v*Math.cos(F*Math.PI/2),k=g*Math.sin(F*Math.PI/2),W=0,X=D.length;W0||0===t.search(/^data\:image\/jpeg/);i.format=r?Pa:La,i.image=n,i.needsUpdate=!0,void 0!==e&&e(i)},n,r),i},setCrossOrigin:function(t){return this.crossOrigin=t,this},setPath:function(t){return this.path=t,this}}),Rn.prototype=Object.assign(Object.create(lt.prototype),{constructor:Rn,isLight:!0,copy:function(t){return lt.prototype.copy.call(this,t),this.color.copy(t.color),this.intensity=t.intensity,this},toJSON:function(t){var e=lt.prototype.toJSON.call(this,t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(e.object.distance=this.distance),void 0!==this.angle&&(e.object.angle=this.angle),void 0!==this.decay&&(e.object.decay=this.decay),void 0!==this.penumbra&&(e.object.penumbra=this.penumbra),void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON()),e}}),On.prototype=Object.assign(Object.create(Rn.prototype),{constructor:On,isHemisphereLight:!0,copy:function(t){return Rn.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}),Object.assign(In.prototype,{copy:function(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var t={};return 0!==this.bias&&(t.bias=this.bias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}),Nn.prototype=Object.assign(Object.create(In.prototype),{constructor:Nn,isSpotLightShadow:!0,update:function(t){var e=2*ds.RAD2DEG*t.angle,n=this.mapSize.width/this.mapSize.height,r=t.distance||500,i=this.camera;e===i.fov&&n===i.aspect&&r===i.far||(i.fov=e,i.aspect=n,i.far=r,i.updateProjectionMatrix())}}),Dn.prototype=Object.assign(Object.create(Rn.prototype),{constructor:Dn,isSpotLight:!0,copy:function(t){return Rn.prototype.copy.call(this,t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}),Un.prototype=Object.assign(Object.create(Rn.prototype),{constructor:Un,isPointLight:!0,copy:function(t){return Rn.prototype.copy.call(this,t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}),kn.prototype=Object.assign(Object.create(In.prototype),{constructor:kn}),Fn.prototype=Object.assign(Object.create(Rn.prototype),{constructor:Fn,isDirectionalLight:!0,copy:function(t){return Rn.prototype.copy.call(this,t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}),Bn.prototype=Object.assign(Object.create(Rn.prototype),{constructor:Bn,isAmbientLight:!0});var Ns={arraySlice:function(t,e,n){return Ns.isTypedArray(t)?new t.constructor(t.subarray(e,n)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n&&t.constructor===e?t:"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){function e(e,n){return t[e]-t[n]}for(var n=t.length,r=new Array(n),i=0;i!==n;++i)r[i]=i;return r.sort(e),r},sortedArray:function(t,e,n){for(var r=t.length,i=new t.constructor(r),o=0,a=0;a!==r;++o)for(var s=n[o]*e,u=0;u!==e;++u)i[a++]=t[s+u];return i},flattenJSON:function(t,e,n,r){for(var i=1,o=t[0];void 0!==o&&void 0===o[r];)o=t[i++];if(void 0!==o){var a=o[r];if(void 0!==a)if(Array.isArray(a))do{a=o[r],void 0!==a&&(e.push(o.time),n.push.apply(n,a)),o=t[i++]}while(void 0!==o);else if(void 0!==a.toArray)do{a=o[r],void 0!==a&&(e.push(o.time),a.toArray(n,n.length)),o=t[i++]}while(void 0!==o);else do{a=o[r],void 0!==a&&(e.push(o.time),n.push(a)),o=t[i++]}while(void 0!==o)}}};zn.prototype={constructor:zn,evaluate:function(t){var e=this.parameterPositions,n=this._cachedIndex,r=e[n],i=e[n-1];t:{e:{var o;n:{r:if(!(t=i)break t;var s=e[1];t=i)break e}o=n,n=0}}for(;n>>1;te;)--o;if(++o,0!==i||o!==r){i>=o&&(o=Math.max(o,1),i=o-1);var a=this.getValueSize();this.times=Ns.arraySlice(n,i,o),this.values=Ns.arraySlice(this.values,i*a,o*a)}return this},validate:function(){var t=!0,e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("invalid value size in track",this),t=!1);var n=this.times,r=this.values,i=n.length;0===i&&(console.error("track is empty",this),t=!1);for(var o=null,a=0;a!==i;a++){var s=n[a];if("number"==typeof s&&isNaN(s)){console.error("time is not a valid number",this,a,s),t=!1;break}if(null!==o&&o>s){console.error("out of order keys",this,a,s,o),t=!1;break}o=s}if(void 0!==r&&Ns.isTypedArray(r))for(var a=0,u=r.length;a!==u;++a){var c=r[a];if(isNaN(c)){console.error("value is not a valid number",this,a,c),t=!1;break}}return t},optimize:function(){for(var t=this.times,e=this.values,n=this.getValueSize(),r=this.getInterpolation()===Za,i=1,o=t.length-1,a=1;a0){t[i]=t[o];for(var f=o*n,m=i*n,p=0;p!==n;++p)e[m+p]=e[f+p];++i}return i!==t.length&&(this.times=Ns.arraySlice(t,0,i),this.values=Ns.arraySlice(e,0,i*n)),this}},Wn.prototype=Object.assign(Object.create(Ds),{constructor:Wn,ValueTypeName:"vector"}),Xn.prototype=Object.assign(Object.create(zn.prototype),{constructor:Xn,interpolate_:function(t,e,n,r){for(var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize,s=t*a,u=(n-e)/(r-e),l=s+a;s!==l;s+=4)c.slerpFlat(i,0,o,s-a,o,s,u);return i}}),qn.prototype=Object.assign(Object.create(Ds),{constructor:qn,ValueTypeName:"quaternion",DefaultInterpolation:Ka,InterpolantFactoryMethodLinear:function(t){return new Xn(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),Yn.prototype=Object.assign(Object.create(Ds),{constructor:Yn,ValueTypeName:"number"}),Kn.prototype=Object.assign(Object.create(Ds),{constructor:Kn,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:Ya,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Zn.prototype=Object.assign(Object.create(Ds),{constructor:Zn,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:Ya,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Jn.prototype=Object.assign(Object.create(Ds),{constructor:Jn,ValueTypeName:"color"}),$n.prototype=Ds,Ds.constructor=$n,Object.assign($n,{parse:function(t){if(void 0===t.type)throw new Error("track type undefined, can not parse");var e=$n._getTrackTypeForValueTypeName(t.type);if(void 0===t.times){var n=[],r=[];Ns.flattenJSON(t.keys,n,r,"value"),t.times=n,t.values=r}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)},toJSON:function(t){var e,n=t.constructor;if(void 0!==n.toJSON)e=n.toJSON(t);else{e={name:t.name,times:Ns.convertArray(t.times,Array),values:Ns.convertArray(t.values,Array)};var r=t.getInterpolation();r!==t.DefaultInterpolation&&(e.interpolation=r)}return e.type=t.ValueTypeName,e},_getTrackTypeForValueTypeName:function(t){switch(t.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return Yn;case"vector":case"vector2":case"vector3":case"vector4":return Wn;case"color":return Jn;case"quaternion":return qn;case"bool":case"boolean":return Zn;case"string":return Kn}throw new Error("Unsupported typeName: "+t)}}),Qn.prototype={constructor:Qn,resetDuration:function(){for(var t=this.tracks,e=0,n=0,r=t.length;n!==r;++n){var i=this.tracks[n];e=Math.max(e,i.times[i.times.length-1])}this.duration=e},trim:function(){for(var t=0;t1){var c=u[1],l=r[c];l||(r[c]=l=[]),l.push(s)}}var h=[];for(var c in r)h.push(Qn.CreateFromMorphTargetSequence(c,r[c],e,n));return h},parseAnimation:function(t,e){if(!t)return console.error(" no animation in JSONLoader data"),null;for(var n=function(t,e,n,r,i){if(0!==n.length){var o=[],a=[];Ns.flattenJSON(n,o,a,r),0!==o.length&&i.push(new t(e,o,a))}},r=[],i=t.name||"default",o=t.length||-1,a=t.fps||30,s=t.hierarchy||[],u=0;u1?t.skinWeights[r+1]:0,u=e>2?t.skinWeights[r+2]:0,c=e>3?t.skinWeights[r+3]:0;n.skinWeights.push(new a(o,s,u,c))}if(t.skinIndices)for(var r=0,i=t.skinIndices.length;r1?t.skinIndices[r+1]:0,p=e>2?t.skinIndices[r+2]:0,d=e>3?t.skinIndices[r+3]:0;n.skinIndices.push(new a(l,h,p,d))}n.bones=t.bones,n.bones&&n.bones.length>0&&(n.skinWeights.length!==n.skinIndices.length||n.skinIndices.length!==n.vertices.length)&&console.warn("When skinning, number of vertices ("+n.vertices.length+"), skinIndices ("+n.skinIndices.length+"), and skinWeights ("+n.skinWeights.length+") should match.")}(),function(e){if(void 0!==t.morphTargets)for(var r=0,i=t.morphTargets.length;r0){console.warn('THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.');for(var h=n.faces,p=t.morphColors[0].colors,r=0,i=h.length;r0&&(n.animations=e)}(),n.computeFaceNormals(),n.computeBoundingSphere(),void 0===t.materials||0===t.materials.length)return{geometry:n};var o=nr.prototype.initMaterials(t.materials,e,this.crossOrigin);return{geometry:n,materials:o}}}),Object.assign(ir.prototype,{load:function(t,e,n,r){""===this.texturePath&&(this.texturePath=t.substring(0,t.lastIndexOf("/")+1));var i=this;new Tn(i.manager).load(t,function(n){var o=null;try{o=JSON.parse(n)}catch(e){return void 0!==r&&r(e),void console.error("THREE:ObjectLoader: Can't parse "+t+".",e.message)}var a=o.metadata;if(void 0===a||void 0===a.type||"geometry"===a.type.toLowerCase())return void console.error("THREE.ObjectLoader: Can't load "+t+". Use THREE.JSONLoader instead.");i.parse(o,e)},n,r)},setTexturePath:function(t){this.texturePath=t},setCrossOrigin:function(t){this.crossOrigin=t},parse:function(t,e){var n=this.parseGeometries(t.geometries),r=this.parseImages(t.images,function(){void 0!==e&&e(a)}),i=this.parseTextures(t.textures,r),o=this.parseMaterials(t.materials,i),a=this.parseObject(t.object,n,o);return t.animations&&(a.animations=this.parseAnimations(t.animations)),void 0!==t.images&&0!==t.images.length||void 0!==e&&e(a),a},parseGeometries:function(t){var e={};if(void 0!==t)for(var n=new rr,r=new er,i=0,o=t.length;i0){var i=new En(e),o=new Cn(i);o.setCrossOrigin(this.crossOrigin);for(var a=0,s=t.length;a0?new xe(s,u):new Lt(s,u);break;case"LOD":a=new ge;break;case"Line":a=new we(i(e.geometry),o(e.material),e.mode);break;case"LineSegments":a=new Me(i(e.geometry),o(e.material));break;case"PointCloud":case"Points":a=new Te(i(e.geometry),o(e.material));break;case"Sprite":a=new ve(o(e.material));break;case"Group":a=new Se;break;case"SkinnedMesh":console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh type. Instantiates Object3D instead.");default:a=new lt}if(a.uuid=e.uuid,void 0!==e.name&&(a.name=e.name),void 0!==e.matrix?(t.fromArray(e.matrix),t.decompose(a.position,a.quaternion,a.scale)):(void 0!==e.position&&a.position.fromArray(e.position),void 0!==e.rotation&&a.rotation.fromArray(e.rotation),void 0!==e.quaternion&&a.quaternion.fromArray(e.quaternion),void 0!==e.scale&&a.scale.fromArray(e.scale)),void 0!==e.castShadow&&(a.castShadow=e.castShadow),void 0!==e.receiveShadow&&(a.receiveShadow=e.receiveShadow),e.shadow&&(void 0!==e.shadow.bias&&(a.shadow.bias=e.shadow.bias),void 0!==e.shadow.radius&&(a.shadow.radius=e.shadow.radius),void 0!==e.shadow.mapSize&&a.shadow.mapSize.fromArray(e.shadow.mapSize),void 0!==e.shadow.camera&&(a.shadow.camera=this.parseObject(e.shadow.camera))),void 0!==e.visible&&(a.visible=e.visible),void 0!==e.userData&&(a.userData=e.userData),void 0!==e.children)for(var c in e.children)a.add(this.parseObject(e.children[c],n,r));if("LOD"===e.type)for(var l=e.levels,h=0;h0)){u=i;break}u=i-1}if(i=u,r[i]===n){var c=i/(o-1);return c}var l=r[i],h=r[i+1],p=h-l,d=(n-l)/p,c=(i+d)/(o-1);return c},getTangent:function(t){var e=t-1e-4,n=t+1e-4;e<0&&(e=0),n>1&&(n=1);var r=this.getPoint(e);return this.getPoint(n).clone().sub(r).normalize()},getTangentAt:function(t){var e=this.getUtoTmapping(t);return this.getTangent(e)},computeFrenetFrames:function(t,e){var n,r,i,o=new l,a=[],s=[],u=[],c=new l,p=new h;for(n=0;n<=t;n++)r=n/t,a[n]=this.getTangentAt(r),a[n].normalize();s[0]=new l,u[0]=new l;var d=Number.MAX_VALUE,f=Math.abs(a[0].x),m=Math.abs(a[0].y),v=Math.abs(a[0].z);for(f<=d&&(d=f,o.set(1,0,0)),m<=d&&(d=m,o.set(0,1,0)),v<=d&&o.set(0,0,1),c.crossVectors(a[0],o).normalize(),s[0].crossVectors(a[0],c),u[0].crossVectors(a[0],s[0]),n=1;n<=t;n++)s[n]=s[n-1].clone(),u[n]=u[n-1].clone(),c.crossVectors(a[n-1],a[n]),c.length()>Number.EPSILON&&(c.normalize(),i=Math.acos(ds.clamp(a[n-1].dot(a[n]),-1,1)),s[n].applyMatrix4(p.makeRotationAxis(c,i))),u[n].crossVectors(a[n],s[n]);if(!0===e)for(i=Math.acos(ds.clamp(s[0].dot(s[t]),-1,1)),i/=t,a[0].dot(c.crossVectors(s[0],s[t]))>0&&(i=-i),n=1;n<=t;n++)s[n].applyMatrix4(p.makeRotationAxis(a[n],i*n)),u[n].crossVectors(a[n],s[n]);return{tangents:a,normals:s,binormals:u}}},vr.prototype=Object.create(mr.prototype),vr.prototype.constructor=vr,vr.prototype.isLineCurve=!0,vr.prototype.getPoint=function(t){if(1===t)return this.v2.clone();var e=this.v2.clone().sub(this.v1);return e.multiplyScalar(t).add(this.v1),e},vr.prototype.getPointAt=function(t){return this.getPoint(t)},vr.prototype.getTangent=function(t){return this.v2.clone().sub(this.v1).normalize()},gr.prototype=Object.assign(Object.create(mr.prototype),{constructor:gr,add:function(t){this.curves.push(t)},closePath:function(){var t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new vr(e,t))},getPoint:function(t){for(var e=t*this.getLength(),n=this.getCurveLengths(),r=0;r=e){var i=n[r]-e,o=this.curves[r],a=o.getLength(),s=0===a?0:1-i/a;return o.getPointAt(s)}r++}return null},getLength:function(){var t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var t=[],e=0,n=0,r=this.curves.length;n1&&!n[n.length-1].equals(n[0])&&n.push(n[0]),n},createPointsGeometry:function(t){var e=this.getPoints(t);return this.createGeometry(e)},createSpacedPointsGeometry:function(t){var e=this.getSpacedPoints(t);return this.createGeometry(e)},createGeometry:function(t){for(var e=new Ct,n=0,r=t.length;ne;)n-=e;ne.length-2?e.length-1:r+1],c=e[r>e.length-3?e.length-1:r+2];return new i(or(o,a.x,s.x,u.x,c.x),or(o,a.y,s.y,u.y,c.y))},xr.prototype=Object.create(mr.prototype),xr.prototype.constructor=xr,xr.prototype.getPoint=function(t){var e=this.v0,n=this.v1,r=this.v2,o=this.v3;return new i(fr(t,e.x,n.x,r.x,o.x),fr(t,e.y,n.y,r.y,o.y))},_r.prototype=Object.create(mr.prototype),_r.prototype.constructor=_r,_r.prototype.getPoint=function(t){var e=this.v0,n=this.v1,r=this.v2;return new i(cr(t,e.x,n.x,r.x),cr(t,e.y,n.y,r.y))};var Us=Object.assign(Object.create(gr.prototype),{fromPoints:function(t){this.moveTo(t[0].x,t[0].y);for(var e=1,n=t.length;e0){var c=u.getPoint(0);c.equals(this.currentPoint)||this.lineTo(c.x,c.y)}this.curves.push(u);var l=u.getPoint(1);this.currentPoint.copy(l)}});wr.prototype=Us,Us.constructor=wr,Mr.prototype=Object.assign(Object.create(Us),{constructor:Mr,getPointsHoles:function(t){for(var e=[],n=0,r=this.holes.length;n1){for(var g=!1,y=[],b=0,x=p.length;bNumber.EPSILON){if(c<0&&(a=e[o],u=-u,s=e[i],c=-c),t.ys.y)continue;if(t.y===a.y){if(t.x===a.x)return!0}else{var l=c*(t.x-a.x)-u*(t.y-a.y);if(0===l)return!0;if(l<0)continue;r=!r}}else{if(t.y!==a.y)continue;if(s.x<=t.x&&t.x<=a.x||a.x<=t.x&&t.x<=s.x)return!0}}return r})(M.p,p[T].p)&&(b!==T&&y.push({froms:b,tos:T,hole:w}),E?(E=!1,h[T].push(M)):g=!0);E&&h[b].push(M)}y.length>0&&(g||(d=h))}for(var S,m=0,A=p.length;m0){this.source.connect(this.filters[0]);for(var t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(var t=1,e=this.filters.length;t=.5)for(var o=0;o!==i;++o)t[e+o]=t[n+o]},_slerp:function(t,e,n,r,i){c.slerpFlat(t,e,t,e,t,n,r)},_lerp:function(t,e,n,r,i){for(var o=1-r,a=0;a!==i;++a){var s=e+a;t[s]=t[s]*o+t[n+a]*r}}},Ur.prototype={constructor:Ur,getValue:function(t,e){this.bind(),this.getValue(t,e)},setValue:function(t,e){this.bind(),this.setValue(t,e)},bind:function(){var t=this.node,e=this.parsedPath,n=e.objectName,r=e.propertyName,i=e.propertyIndex;if(t||(t=Ur.findNode(this.rootNode,e.nodeName)||this.rootNode,this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t)return void console.error(" trying to update node for track: "+this.path+" but it wasn't found.");if(n){var o=e.objectIndex;switch(n){case"materials":if(!t.material)return void console.error(" can not bind to material as node does not have a material",this);if(!t.material.materials)return void console.error(" can not bind to material.materials as node.material does not have a materials array",this);t=t.material.materials;break;case"bones":if(!t.skeleton)return void console.error(" can not bind to bones as node does not have a skeleton",this);t=t.skeleton.bones;for(var a=0;a=n){var h=n++,p=e[h];r[p.uuid]=l,e[l]=p,r[c]=h,e[h]=u;for(var d=0,f=o;d!==f;++d){var m=i[d],v=m[h],g=m[l];m[l]=v,m[h]=g}}}this.nCachedObjects_=n},uncache:function(t){for(var e=this._objects,n=e.length,r=this.nCachedObjects_,i=this._indicesByUUID,o=this._bindings,a=o.length,s=0,u=arguments.length;s!==u;++s){var c=arguments[s],l=c.uuid,h=i[l];if(void 0!==h)if(delete i[l],h0)for(var u=this._interpolants,c=this._propertyBindings,l=0,h=u.length;l!==h;++l)u[l].evaluate(a),c[l].accumulate(r,s)},_updateWeight:function(t){var e=0;if(this.enabled){e=this.weight;var n=this._weightInterpolant;if(null!==n){var r=n.evaluate(t)[0];e*=r,t>n.parameterPositions[1]&&(this.stopFading(),0===r&&(this.enabled=!1))}}return this._effectiveWeight=e,e},_updateTimeScale:function(t){var e=0;if(!this.paused){e=this.timeScale;var n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e},_updateTime:function(t){var e=this.time+t;if(0===t)return e;var n=this._clip.duration,r=this.loop,i=this._loopCount;if(r===Wa){-1===i&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(e>=n)e=n;else{if(!(e<0))break t;e=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{var o=r===qa;if(-1===i&&(t>=0?(i=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),e>=n||e<0){var a=Math.floor(e/n);e-=n*a,i+=Math.abs(a);var s=this.repetitions-i;if(s<0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,e=t>0?n:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(0===s){var u=t<0;this._setEndings(u,!u,o)}else this._setEndings(!1,!1,o);this._loopCount=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:a})}}if(o&&1==(1&i))return this.time=e,n-e}return this.time=e,e},_setEndings:function(t,e,n){var r=this._interpolantSettings;n?(r.endingStart=$a,r.endingEnd=$a):(r.endingStart=t?this.zeroSlopeAtStart?$a:Ja:Qa,r.endingEnd=e?this.zeroSlopeAtEnd?$a:Ja:Qa)},_scheduleFading:function(t,e,n){var r=this._mixer,i=r.time,o=this._weightInterpolant;null===o&&(o=r._lendControlInterpolant(),this._weightInterpolant=o);var a=o.parameterPositions,s=o.sampleValues;return a[0]=i,s[0]=e,a[1]=i+t,s[1]=n,this}},Br.prototype={constructor:Br,clipAction:function(t,e){var n=e||this._root,r=n.uuid,i="string"==typeof t?Qn.findByName(n,t):t,o=null!==i?i.uuid:t,a=this._actionsByClip[o],s=null;if(void 0!==a){var u=a.actionByRoot[r];if(void 0!==u)return u;s=a.knownActions[0],null===i&&(i=s._clip)}if(null===i)return null;var c=new Fr(this,i,e);return this._bindAction(c,s),this._addInactiveAction(c,o,r),c},existingAction:function(t,e){var n=e||this._root,r=n.uuid,i="string"==typeof t?Qn.findByName(n,t):t,o=i?i.uuid:t,a=this._actionsByClip[o];return void 0!==a?a.actionByRoot[r]||null:null},stopAllAction:function(){var t=this._actions,e=this._nActiveActions,n=this._bindings,r=this._nActiveBindings;this._nActiveActions=0,this._nActiveBindings=0;for(var i=0;i!==e;++i)t[i].reset();for(var i=0;i!==r;++i)n[i].useCount=0;return this},update:function(t){t*=this.timeScale;for(var e=this._actions,n=this._nActiveActions,r=this.time+=t,i=Math.sign(t),o=this._accuIndex^=1,a=0;a!==n;++a){var s=e[a];s.enabled&&s._update(r,t,i,o)}for(var u=this._bindings,c=this._nActiveBindings,a=0;a!==c;++a)u[a].apply(o);return this},getRoot:function(){return this._root},uncacheClip:function(t){var e=this._actions,n=t.uuid,r=this._actionsByClip,i=r[n];if(void 0!==i){for(var o=i.knownActions,a=0,s=o.length;a!==s;++a){var u=o[a];this._deactivateAction(u);var c=u._cacheIndex,l=e[e.length-1];u._cacheIndex=null,u._byClipCacheIndex=null,l._cacheIndex=c,e[c]=l,e.pop(),this._removeInactiveBindingsForAction(u)}delete r[n]}},uncacheRoot:function(t){var e=t.uuid,n=this._actionsByClip;for(var r in n){var i=n[r].actionByRoot,o=i[e];void 0!==o&&(this._deactivateAction(o),this._removeInactiveAction(o))}var a=this._bindingsByRootAndName,s=a[e];if(void 0!==s)for(var u in s){var c=s[u];c.restoreOriginalState(),this._removeInactiveBinding(c)}},uncacheAction:function(t,e){var n=this.existingAction(t,e);null!==n&&(this._deactivateAction(n),this._removeInactiveAction(n))}},Object.assign(Br.prototype,{_bindAction:function(t,e){var n=t._localRoot||this._root,r=t._clip.tracks,i=r.length,o=t._propertyBindings,a=t._interpolants,s=n.uuid,u=this._bindingsByRootAndName,c=u[s];void 0===c&&(c={},u[s]=c);for(var l=0;l!==i;++l){var h=r[l],p=h.name,d=c[p];if(void 0!==d)o[l]=d;else{if(void 0!==(d=o[l])){null===d._cacheIndex&&(++d.referenceCount,this._addInactiveBinding(d,s,p));continue}var f=e&&e._propertyBindings[l].binding.parsedPath;d=new Dr(Ur.create(n,p,f),h.ValueTypeName,h.getValueSize()),++d.referenceCount,this._addInactiveBinding(d,s,p),o[l]=d}a[l].resultBuffer=d.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){var e=(t._localRoot||this._root).uuid,n=t._clip.uuid,r=this._actionsByClip[n];this._bindAction(t,r&&r.knownActions[0]),this._addInactiveAction(t,n,e)}for(var i=t._propertyBindings,o=0,a=i.length;o!==a;++o){var s=i[o];0==s.useCount++&&(this._lendBinding(s),s.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){for(var e=t._propertyBindings,n=0,r=e.length;n!==r;++n){var i=e[n];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){var e=t._cacheIndex;return null!==e&&e1){var c=u[1];r[c]||(r[c]={start:1/0,end:-1/0});var l=r[c];ol.end&&(l.end=o),e||(e=c)}}for(var c in r){var l=r[c];this.createAnimation(c,l.start,l.end,t)}this.firstAnimation=e},$r.prototype.setAnimationDirectionForward=function(t){var e=this.animationsMap[t];e&&(e.direction=1,e.directionBackwards=!1)},$r.prototype.setAnimationDirectionBackward=function(t){var e=this.animationsMap[t];e&&(e.direction=-1,e.directionBackwards=!0)},$r.prototype.setAnimationFPS=function(t,e){var n=this.animationsMap[t];n&&(n.fps=e,n.duration=(n.end-n.start)/n.fps)},$r.prototype.setAnimationDuration=function(t,e){var n=this.animationsMap[t];n&&(n.duration=e,n.fps=(n.end-n.start)/n.duration)},$r.prototype.setAnimationWeight=function(t,e){var n=this.animationsMap[t];n&&(n.weight=e)},$r.prototype.setAnimationTime=function(t,e){var n=this.animationsMap[t];n&&(n.time=e)},$r.prototype.getAnimationTime=function(t){var e=0,n=this.animationsMap[t];return n&&(e=n.time),e},$r.prototype.getAnimationDuration=function(t){var e=-1,n=this.animationsMap[t];return n&&(e=n.duration),e},$r.prototype.playAnimation=function(t){var e=this.animationsMap[t];e?(e.time=0,e.active=!0):console.warn("THREE.MorphBlendMesh: animation["+t+"] undefined in .playAnimation()")},$r.prototype.stopAnimation=function(t){var e=this.animationsMap[t];e&&(e.active=!1)},$r.prototype.update=function(t){for(var e=0,n=this.animationsList.length;er.duration||r.time<0)&&(r.direction*=-1,r.time>r.duration&&(r.time=r.duration,r.directionBackwards=!0),r.time<0&&(r.time=0,r.directionBackwards=!1)):(r.time=r.time%r.duration,r.time<0&&(r.time+=r.duration));var o=r.start+ds.clamp(Math.floor(r.time/i),0,r.length-1),a=r.weight;o!==r.currentFrame&&(this.morphTargetInfluences[r.lastFrame]=0,this.morphTargetInfluences[r.currentFrame]=1*a,this.morphTargetInfluences[o]=0,r.lastFrame=r.currentFrame,r.currentFrame=o);var s=r.time%i/i;r.directionBackwards&&(s=1-s),r.currentFrame!==r.lastFrame?(this.morphTargetInfluences[r.currentFrame]=s*a,this.morphTargetInfluences[r.lastFrame]=(1-s)*a):this.morphTargetInfluences[r.currentFrame]=a}}},Qr.prototype=Object.create(lt.prototype),Qr.prototype.constructor=Qr,Qr.prototype.isImmediateRenderObject=!0,ti.prototype=Object.create(Me.prototype),ti.prototype.constructor=ti,ti.prototype.update=function(){var t=new l,e=new l,n=new rt;return function(){var r=["a","b","c"];this.object.updateMatrixWorld(!0),n.getNormalMatrix(this.object.matrixWorld);var i=this.object.matrixWorld,o=this.geometry.attributes.position,a=this.object.geometry;if(a&&a.isGeometry)for(var s=a.vertices,u=a.faces,c=0,l=0,h=u.length;l.99999?this.quaternion.set(0,0,0,1):n.y<-.99999?this.quaternion.set(1,0,0,0):(e.set(n.z,0,-n.x).normalize(),t=Math.acos(n.y),this.quaternion.setFromAxisAngle(e,t))}}(),pi.prototype.setLength=function(t,e,n){void 0===e&&(e=.2*t),void 0===n&&(n=.2*e),this.line.scale.set(1,Math.max(0,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()},pi.prototype.setColor=function(t){this.line.material.color.copy(t),this.cone.material.color.copy(t)},di.prototype=Object.create(Me.prototype),di.prototype.constructor=di;var js=new l,Vs=new fi,Gs=new fi,Hs=new fi;mi.prototype=Object.create(mr.prototype),mi.prototype.constructor=mi,mi.prototype.getPoint=function(t){var e=this.points,n=e.length;n<2&&console.log("duh, you need at least 2 points");var r=(n-(this.closed?0:1))*t,i=Math.floor(r),o=r-i;this.closed?i+=i>0?0:(Math.floor(Math.abs(i)/e.length)+1)*e.length:0===o&&i===n-1&&(i=n-2,o=1);var a,s,u,c;if(this.closed||i>0?a=e[(i-1)%n]:(js.subVectors(e[0],e[1]).add(e[0]),a=js),s=e[i%n],u=e[(i+1)%n],this.closed||i+21){for(var f=Array(d),m=0;m1){for(var g=Array(v),y=0;y",i="function"==typeof t?t:e,o="function"==typeof t?e:n;return xe("function"==typeof i,ve("m002")),xe(0===i.length,ve("m003")),xe("string"==typeof r&&r.length>0,"actions should have valid names, got: '"+r+"'"),B(r,i,o,void 0)}function o(t){return"function"==typeof t&&!0===t.isMobxAction}function a(t,e,n){var r=function(){return B(e,n,t,arguments)};r.isMobxAction=!0,Le(t,e,r)}function s(t,e,n){function r(){a(u)}var i,a,s;"string"==typeof t?(i=t,a=e,s=n):(i=t.name||"Autorun@"+ye(),a=t,s=e),xe("function"==typeof a,ve("m004")),xe(!1===o(a),ve("m005")),s&&(a=a.bind(s));var u=new dn(i,function(){this.track(r)});return u.schedule(),u.getDisposer()}function u(t,e,n,r){var i,o,a,u;return"string"==typeof t?(i=t,o=e,a=n,u=r):(i="When@"+ye(),o=t,a=e,u=n),s(i,function(t){if(o.call(u)){t.dispose();var e=et();a.call(u),nt(e)}})}function c(t,e,n,r){function i(){s(h)}var a,s,u,c;"string"==typeof t?(a=t,s=e,u=n,c=r):(a=t.name||"AutorunAsync@"+ye(),s=t,u=e,c=n),xe(!1===o(s),ve("m006")),void 0===u&&(u=1),c&&(s=s.bind(c));var l=!1,h=new dn(a,function(){l||(l=!0,setTimeout(function(){l=!1,h.isDisposed||h.track(i)},u))});return h.schedule(),h.getDisposer()}function l(t,e,n){function r(){if(!u.isDisposed){var n=!1;u.track(function(){var e=t(u);n=Ce(i.compareStructural,o,e),o=e}),a&&i.fireImmediately&&e(o,u),a||!0!==n||e(o,u),a&&(a=!1)}}arguments.length>3&&be(ve("m007")),Ft(t)&&be(ve("m008"));var i;i="object"==typeof n?n:{},i.name=i.name||t.name||e.name||"Reaction@"+ye(),i.fireImmediately=!0===n||!0===i.fireImmediately,i.delay=i.delay||0,i.compareStructural=i.compareStructural||i.struct||!1,e=We(i.name,i.context?e.bind(i.context):e),i.context&&(t=t.bind(i.context));var o,a=!0,s=!1,u=new dn(i.name,function(){a||i.delay<1?r():s||(s=!0,setTimeout(function(){s=!1,r()},i.delay))});return u.schedule(),u.getDisposer()}function h(t){return ce(function(e,n,r,i,o){xe(void 0!==o,ve("m009")),xe("function"==typeof o.get,ve("m010")),Qt(Zt(e,""),n,o.get,o.set,t,!1)},function(t){var e=this.$mobx.values[t];if(void 0!==e)return e.get()},function(t,e){this.$mobx.values[t].set(e)},!1,!1)}function p(t,e){xe("function"==typeof t&&t.length<2,"createTransformer expects a function that accepts one argument");var n={},r=pn.resetId,i=function(r){function i(e,n){var i=r.call(this,function(){return t(n)},void 0,!1,"Transformer-"+t.name+"-"+e,void 0)||this;return i.sourceIdentifier=e,i.sourceObject=n,i}return Ve(i,r),i.prototype.onBecomeUnobserved=function(){var t=this.value;r.prototype.onBecomeUnobserved.call(this),delete n[this.sourceIdentifier],e&&e(t,this.sourceObject)},i}(an);return function(t){r!==pn.resetId&&(n={},r=pn.resetId);var e=d(t),o=n[e];return o?o.get():(o=n[e]=new i(e,t),o.get())}}function d(t){if("string"==typeof t||"number"==typeof t)return t;if(null===t||"object"!=typeof t)throw new Error("[mobx] transform expected some kind of object or primitive value, got: "+t);var e=t.$transformId;return void 0===e&&(e=ye(),Le(t,"$transformId",e)),e}function f(t,e){return K()||console.warn(ve("m013")),Ye(t,{context:e}).get()}function m(t){for(var e=[],n=1;n=2,ve("m014")),xe("object"==typeof t,ve("m015")),xe(!An(t),ve("m016")),n.forEach(function(t){xe("object"==typeof t,ve("m017")),xe(!S(t),ve("m018"))});for(var r=Zt(t),i={},o=n.length-1;o>=0;o--){var a=n[o];for(var s in a)if(!0!==i[s]&&Pe(a,s)){if(i[s]=!0,t===a&&!Oe(t,s))continue;var u=Object.getOwnPropertyDescriptor(a,s);Jt(r,s,u,e)}}return t}function y(t,e){return b(ae(t,e))}function b(t){var e={name:t.name};return t.observing&&t.observing.length>0&&(e.dependencies=Me(t.observing).map(b)),e}function x(t,e){return _(ae(t,e))}function _(t){var e={name:t.name};return st(t)&&(e.observers=ut(t).map(_)),e}function w(t,e,n){return"function"==typeof n?E(t,e,n):M(t,e)}function M(t,e){return se(t).intercept(e)}function E(t,e,n){return se(t,e).intercept(n)}function T(t,e){if(null===t||void 0===t)return!1;if(void 0!==e){if(!1===oe(t))return!1;var n=ae(t,e);return un(n)}return un(t)}function S(t,e){if(null===t||void 0===t)return!1;if(void 0!==e){if(Yt(t)||An(t))throw new Error(ve("m019"));if(oe(t)){var n=t.$mobx;return n.values&&!!n.values[e]}return!1}return oe(t)||!!t.$mobx||on(t)||vn(t)||un(t)}function A(t){if(void 0===t&&(t=void 0),"string"==typeof arguments[1])return Ke.apply(null,arguments);if(xe(arguments.length<=1,ve("m021")),xe(!Ft(t),ve("m020")),S(t))return t;var e=zt(t,void 0,void 0);return e!==t?e:en.box(t)}function C(t){be("Expected one or two arguments to observable."+t+". Did you accidentally try to use observable."+t+" as decorator?")}function P(t){return xe(!!t,":("),ce(function(e,n,r,i,o){Ie(e,n),xe(!o||!o.get,ve("m022")),$t(Zt(e,void 0),n,r,t)},function(t){var e=this.$mobx.values[t];if(void 0!==e)return e.get()},function(t,e){re(this,t,e)},!0,!1)}function L(t,e,n,r){return"function"==typeof n?O(t,e,n,r):R(t,e,n)}function R(t,e,n){return se(t).observe(e,n)}function O(t,e,n,r){return se(t,e).observe(n,r)}function I(t,e,n){function r(r){return e&&n.push([t,r]),r}if(void 0===e&&(e=!0),void 0===n&&(n=[]),S(t)){if(e&&null===n&&(n=[]),e&&null!==t&&"object"==typeof t)for(var i=0,o=n.length;i0,"actions should have valid names, got: '"+t+"'");var n=function(){return B(t,e,this,arguments)};return n.originalFn=e,n.isMobxAction=!0,n}function B(t,e,n,r){var i=z(t,e,n,r);try{return e.apply(n,r)}finally{j(i)}}function z(t,e,n,r){var i=Mt()&&!!t,o=0;if(i){o=Date.now();var a=r&&r.length||0,s=new Array(a);if(a>0)for(var u=0;u0;pn.computationDepth>0&&e&&be(ve("m031")+t.name),!pn.allowStateChanges&&e&&be(ve(pn.strictMode?"m030a":"m030b")+t.name)}function J(t,e,n){rt(t),t.newObserving=new Array(t.observing.length+100),t.unboundDepsCount=0,t.runId=++pn.runId;var r=pn.trackingDerivation;pn.trackingDerivation=t;var i;try{i=e.call(n)}catch(t){i=new cn(t)}return pn.trackingDerivation=r,$(t),i}function $(t){var e=t.observing,n=t.observing=t.newObserving,r=sn.UP_TO_DATE;t.newObserving=null;for(var i=0,o=t.unboundDepsCount,a=0;ar&&(r=s.dependenciesState)}for(n.length=i,o=e.length;o--;){var s=e[o];0===s.diffValue&<(s,t),s.diffValue=0}for(;i--;){var s=n[i];1===s.diffValue&&(s.diffValue=0,ct(s,t))}r!==sn.UP_TO_DATE&&(t.dependenciesState=r,t.onBecomeStale())}function Q(t){var e=t.observing;t.observing=[];for(var n=e.length;n--;)lt(e[n],t);t.dependenciesState=sn.NOT_TRACKING}function tt(t){var e=et(),n=t();return nt(e),n}function et(){var t=pn.trackingDerivation;return pn.trackingDerivation=null,t}function nt(t){pn.trackingDerivation=t}function rt(t){if(t.dependenciesState!==sn.UP_TO_DATE){t.dependenciesState=sn.UP_TO_DATE;for(var e=t.observing,n=e.length;n--;)e[n].lowestObserverState=sn.UP_TO_DATE}}function it(){var t=ge(),e=pn;if(t.__mobservableTrackingStack||t.__mobservableViewStack)throw new Error("[mobx] An incompatible version of mobservable is already loaded.");if(t.__mobxGlobal&&t.__mobxGlobal.version!==e.version)throw new Error("[mobx] An incompatible version of mobx is already loaded.");t.__mobxGlobal?pn=t.__mobxGlobal:t.__mobxGlobal=e}function ot(){return pn}function at(){pn.resetId++;var t=new hn;for(var e in t)-1===ln.indexOf(e)&&(pn[e]=t[e]);pn.allowStateChanges=!pn.strictMode}function st(t){return t.observers&&t.observers.length>0}function ut(t){return t.observers}function ct(t,e){var n=t.observers.length;n&&(t.observersIndexes[e.__mapid]=n),t.observers[n]=e,t.lowestObserverState>e.dependenciesState&&(t.lowestObserverState=e.dependenciesState)}function lt(t,e){if(1===t.observers.length)t.observers.length=0,ht(t);else{var n=t.observers,r=t.observersIndexes,i=n.pop();if(i!==e){var o=r[e.__mapid]||0;o?r[i.__mapid]=o:delete r[i.__mapid],n[o]=i}delete r[e.__mapid]}}function ht(t){t.isPendingUnobservation||(t.isPendingUnobservation=!0,pn.pendingUnobservations.push(t))}function pt(){pn.inBatch++}function dt(){if(0==--pn.inBatch){xt();for(var t=pn.pendingUnobservations,e=0;e=0&&pn.globalReactionErrorHandlers.splice(e,1)}}function xt(){pn.inBatch>0||pn.isRunningReactions||mn(_t)}function _t(){pn.isRunningReactions=!0;for(var t=pn.pendingReactions,e=0;t.length>0;){++e===fn&&(console.error("Reaction doesn't converge to a stable state after "+fn+" iterations. Probably there is a cycle in the reactive function: "+t[0]),t.splice(0));for(var n=t.splice(0),r=0,i=n.length;r0}function Pt(t,e){var n=t.interceptors||(t.interceptors=[]);return n.push(e),we(function(){var t=n.indexOf(e);-1!==t&&n.splice(t,1)})}function Lt(t,e){var n=et();try{var r=t.interceptors;if(r)for(var i=0,o=r.length;i0}function Ot(t,e){var n=t.changeListeners||(t.changeListeners=[]);return n.push(e),we(function(){var t=n.indexOf(e);-1!==t&&n.splice(t,1)})}function It(t,e){var n=et(),r=t.changeListeners;if(r){r=r.slice();for(var i=0,o=r.length;i=this.length,value:ee?" (... and "+(t.length-e)+"more)":""):""}function Te(t){return null!==t&&"object"==typeof t}function Se(t){if(null===t||"object"!=typeof t)return!1;var e=Object.getPrototypeOf(t);return e===Object.prototype||null===e}function Ae(){for(var t=arguments[0],e=1,n=arguments.length;e=0;i--)if(!De(t[i],e[i]))return!1;return!0}if(r){if(t.size!==e.size)return!1;var o=!0;return t.forEach(function(t,n){o=o&&De(e.get(n),t)}),o}if("object"==typeof t&&"object"==typeof e){if(null===t||null===e)return!1;if(Fe(t)&&Fe(e))return t.size===e.size&&De(en.shallowMap(t).entries(),en.shallowMap(e).entries());if(Ne(t).length!==Ne(e).length)return!1;for(var a in t){if(!(a in e))return!1;if(!De(t[a],e[a]))return!1}return!0}return!1}function Ue(t,e){var n="isMobX"+t;return e.prototype[n]=!0,function(t){return Te(t)&&!0===t[n]}}function ke(t){return Array.isArray(t)||Yt(t)}function Fe(t){return Be(t)||An(t)}function Be(t){return void 0!==ge().Map&&t instanceof ge().Map}function ze(){return"function"==typeof Symbol&&Symbol.toPrimitive||"@@toPrimitive"}function je(t){return null===t?null:"object"==typeof t?""+t:t}var Ve=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0}),e.extras={allowStateChanges:H,deepEqual:De,getAtom:ae,getDebugName:ue,getDependencyTree:y,getAdministration:se,getGlobalState:ot,getObserverTree:x,isComputingDerivation:K,isSpyEnabled:Mt,onReactionError:bt,reserveArrayBuffer:qt,resetGlobalState:at,shareGlobalState:it,spyReport:Et,spyReportEnd:St,spyReportStart:Tt,setReactionScheduler:wt},"object"==typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx(t.exports),t.exports.default=t.exports;var Ge=ce(function(t,e,n,r,i){var o=r&&1===r.length?r[0]:n.name||e||"";Le(t,e,We(o,n))},function(t){return this[t]},function(){xe(!1,ve("m001"))},!1,!0),He=ce(function(t,e,n){a(t,e,n)},function(t){return this[t]},function(){xe(!1,ve("m001"))},!1,!1),We=function(t,e,n,i){return 1===arguments.length&&"function"==typeof t?F(t.name||"",t):2===arguments.length&&"function"==typeof e?F(t,e):1===arguments.length&&"string"==typeof t?r(t):r(e).apply(null,arguments)};e.action=We,We.bound=function(t,e,n){if("function"==typeof t){var r=F("",t);return r.autoBind=!0,r}return He.apply(null,arguments)},e.runInAction=i,e.isAction=o,e.autorun=s,e.when=u,e.autorunAsync=c,e.reaction=l;var Xe=h(!1),qe=h(!0),Ye=function(t,e,n){if("string"==typeof e)return Xe.apply(null,arguments);xe("function"==typeof t,ve("m011")),xe(arguments.length<3,ve("m012"));var r="object"==typeof e?e:{};return r.setter="function"==typeof e?e:r.setter,new an(t,r.context,r.compareStructural||r.struct||!1,r.name||t.name||"",r.setter)};e.computed=Ye,Ye.struct=qe,e.createTransformer=p,e.expr=f,e.extendObservable=m,e.extendShallowObservable=v,e.intercept=w,e.isComputed=T,e.isObservable=S;var Ke=P(zt),Ze=P(jt),Je=P(Vt),$e=P(Gt),Qe=P(Ht),tn=function(){function t(){}return t.prototype.box=function(t,e){return arguments.length>2&&C("box"),new In(t,zt,e)},t.prototype.shallowBox=function(t,e){return arguments.length>2&&C("shallowBox"),new In(t,Vt,e)},t.prototype.array=function(t,e){return arguments.length>2&&C("array"),new wn(t,zt,e)},t.prototype.shallowArray=function(t,e){return arguments.length>2&&C("shallowArray"),new wn(t,Vt,e)},t.prototype.map=function(t,e){return arguments.length>2&&C("map"),new Sn(t,zt,e)},t.prototype.shallowMap=function(t,e){return arguments.length>2&&C("shallowMap"),new Sn(t,Vt,e)},t.prototype.object=function(t,e){arguments.length>2&&C("object");var n={};return Zt(n,e),m(n,t),n},t.prototype.shallowObject=function(t,e){arguments.length>2&&C("shallowObject");var n={};return Zt(n,e),v(n,t),n},t.prototype.ref=function(){return arguments.length<2?Bt(Vt,arguments[0]):Je.apply(null,arguments)},t.prototype.shallow=function(){return arguments.length<2?Bt(jt,arguments[0]):Ze.apply(null,arguments)},t.prototype.deep=function(){return arguments.length<2?Bt(zt,arguments[0]):Ke.apply(null,arguments)},t.prototype.struct=function(){return arguments.length<2?Bt(Gt,arguments[0]):$e.apply(null,arguments)},t}();e.IObservableFactories=tn;var en=A;e.observable=en,Object.keys(tn.prototype).forEach(function(t){return en[t]=tn.prototype[t]}),en.deep.struct=en.struct,en.ref.struct=function(){return arguments.length<2?Bt(Ht,arguments[0]):Qe.apply(null,arguments)},e.observe=L,e.toJS=I,e.transaction=N,e.whyRun=k,e.useStrict=V,e.isStrictModeEnabled=G;var nn=function(){function t(t){void 0===t&&(t="Atom@"+ye()),this.name=t,this.isPendingUnobservation=!0,this.observers=[],this.observersIndexes={},this.diffValue=0,this.lastAccessedBy=0,this.lowestObserverState=sn.NOT_TRACKING}return t.prototype.onBecomeUnobserved=function(){},t.prototype.reportObserved=function(){ft(this)},t.prototype.reportChanged=function(){pt(),mt(this),dt()},t.prototype.toString=function(){return this.name},t}();e.BaseAtom=nn;var rn=function(t){function e(e,n,r){void 0===e&&(e="Atom@"+ye()),void 0===n&&(n=Bn),void 0===r&&(r=Bn);var i=t.call(this,e)||this;return i.name=e,i.onBecomeObservedHandler=n,i.onBecomeUnobservedHandler=r,i.isPendingUnobservation=!1,i.isBeingTracked=!1,i}return Ve(e,t),e.prototype.reportObserved=function(){return pt(),t.prototype.reportObserved.call(this),this.isBeingTracked||(this.isBeingTracked=!0,this.onBecomeObservedHandler()),dt(),!!pn.trackingDerivation},e.prototype.onBecomeUnobserved=function(){this.isBeingTracked=!1,this.onBecomeUnobservedHandler()},e}(nn);e.Atom=rn;var on=Ue("Atom",nn),an=function(){function t(t,e,n,r,i){this.derivation=t,this.scope=e,this.compareStructural=n,this.dependenciesState=sn.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isPendingUnobservation=!1,this.observers=[],this.observersIndexes={},this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=sn.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+ye(),this.value=void 0,this.isComputing=!1,this.isRunningSetter=!1,this.name=r||"ComputedValue@"+ye(),i&&(this.setter=F(r+"-setter",i))}return t.prototype.onBecomeStale=function(){gt(this)},t.prototype.onBecomeUnobserved=function(){Q(this),this.value=void 0},t.prototype.get=function(){xe(!this.isComputing,"Cycle detected in computation "+this.name,this.derivation),0===pn.inBatch?(pt(),Y(this)&&(this.value=this.computeValue(!1)),dt()):(ft(this),Y(this)&&this.trackAndCompute()&&vt(this));var t=this.value;if(q(t))throw t.cause;return t},t.prototype.peek=function(){var t=this.computeValue(!1);if(q(t))throw t.cause;return t},t.prototype.set=function(t){if(this.setter){xe(!this.isRunningSetter,"The setter of computed value '"+this.name+"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"),this.isRunningSetter=!0;try{this.setter.call(this.scope,t)}finally{this.isRunningSetter=!1}}else xe(!1,"[ComputedValue '"+this.name+"'] It is not possible to assign a new value to a computed value.")},t.prototype.trackAndCompute=function(){Mt()&&Et({object:this.scope,type:"compute",fn:this.derivation});var t=this.value,e=this.value=this.computeValue(!0);return q(e)||Ce(this.compareStructural,e,t)},t.prototype.computeValue=function(t){this.isComputing=!0,pn.computationDepth++;var e;if(t)e=J(this,this.derivation,this.scope);else try{e=this.derivation.call(this.scope)}catch(t){e=new cn(t)}return pn.computationDepth--,this.isComputing=!1,e},t.prototype.observe=function(t,e){var n=this,r=!0,i=void 0;return s(function(){var o=n.get();if(!r||e){var a=et();t({type:"update",object:n,newValue:o,oldValue:i}),nt(a)}r=!1,i=o})},t.prototype.toJSON=function(){return this.get()},t.prototype.toString=function(){return this.name+"["+this.derivation.toString()+"]"},t.prototype.valueOf=function(){return je(this.get())},t.prototype.whyRun=function(){var t=Boolean(pn.trackingDerivation),e=Me(this.isComputing?this.newObserving:this.observing).map(function(t){return t.name}),n=Me(ut(this).map(function(t){return t.name}));return"\nWhyRun? computation '"+this.name+"':\n * Running because: "+(t?"[active] the value of this computation is needed by a reaction":this.isComputing?"[get] The value of this computed was requested outside a reaction":"[idle] not running at the moment")+"\n"+(this.dependenciesState===sn.NOT_TRACKING?ve("m032"):" * This computation will re-run if any of the following observables changes:\n "+Ee(e)+"\n "+(this.isComputing&&t?" (... or any observable accessed during the remainder of the current run)":"")+"\n\t"+ve("m038")+"\n\n * If the outcome of this computation changes, the following observers will be re-run:\n "+Ee(n)+"\n")},t}();an.prototype[ze()]=an.prototype.valueOf;var sn,un=Ue("ComputedValue",an);!function(t){t[t.NOT_TRACKING=-1]="NOT_TRACKING",t[t.UP_TO_DATE=0]="UP_TO_DATE",t[t.POSSIBLY_STALE=1]="POSSIBLY_STALE",t[t.STALE=2]="STALE"}(sn||(sn={})),e.IDerivationState=sn;var cn=function(){function t(t){this.cause=t}return t}();e.untracked=tt;var ln=["mobxGuid","resetId","spyListeners","strictMode","runId"],hn=function(){function t(){this.version=5,this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.strictMode=!1,this.resetId=0,this.spyListeners=[],this.globalReactionErrorHandlers=[]}return t}(),pn=new hn,dn=function(){function t(t,e){void 0===t&&(t="Reaction@"+ye()),this.name=t,this.onInvalidate=e,this.observing=[],this.newObserving=[],this.dependenciesState=sn.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+ye(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1}return t.prototype.onBecomeStale=function(){this.schedule()},t.prototype.schedule=function(){this._isScheduled||(this._isScheduled=!0,pn.pendingReactions.push(this),xt())},t.prototype.isScheduled=function(){return this._isScheduled},t.prototype.runReaction=function(){this.isDisposed||(pt(),this._isScheduled=!1,Y(this)&&(this._isTrackPending=!0,this.onInvalidate(),this._isTrackPending&&Mt()&&Et({object:this,type:"scheduled-reaction"})),dt())},t.prototype.track=function(t){pt();var e,n=Mt();n&&(e=Date.now(),Tt({object:this,type:"reaction",fn:t})),this._isRunning=!0;var r=J(this,t,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&Q(this),q(r)&&this.reportExceptionInDerivation(r.cause),n&&St({time:Date.now()-e}),dt()},t.prototype.reportExceptionInDerivation=function(t){var e=this;if(this.errorHandler)return void this.errorHandler(t,this);var n="[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '"+this,r=ve("m037");console.error(n||r,t),Mt()&&Et({type:"error",message:n,error:t,object:this}),pn.globalReactionErrorHandlers.forEach(function(n){return n(t,e)})},t.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._isRunning||(pt(),Q(this),dt()))},t.prototype.getDisposer=function(){var t=this.dispose.bind(this);return t.$mobx=this,t.onError=yt,t},t.prototype.toString=function(){return"Reaction["+this.name+"]"},t.prototype.whyRun=function(){var t=Me(this._isRunning?this.newObserving:this.observing).map(function(t){return t.name});return"\nWhyRun? reaction '"+this.name+"':\n * Status: ["+(this.isDisposed?"stopped":this._isRunning?"running":this.isScheduled()?"scheduled":"idle")+"]\n * This reaction will re-run if any of the following observables changes:\n "+Ee(t)+"\n "+(this._isRunning?" (... or any observable accessed during the remainder of the current run)":"")+"\n\t"+ve("m038")+"\n"},t}();e.Reaction=dn;var fn=100,mn=function(t){return t()},vn=Ue("Reaction",dn),gn={spyReportEnd:!0};e.spy=At,e.asReference=Nt,e.asStructure=Dt,e.asFlat=Ut,e.asMap=kt,e.isModifierDescriptor=Ft;var yn=function(){var t=!1,e={};return Object.defineProperty(e,"0",{set:function(){t=!0}}),Object.create(e)[0]=1,!1===t}(),bn=0,xn=function(){function t(){}return t}();xn.prototype=[];var _n=function(){function t(t,e,n,r){this.array=n,this.owned=r,this.lastKnownLength=0,this.interceptors=null,this.changeListeners=null,this.atom=new nn(t||"ObservableArray@"+ye()),this.enhancer=function(n,r){return e(n,r,t+"[..]")}}return t.prototype.intercept=function(t){return Pt(this,t)},t.prototype.observe=function(t,e){return void 0===e&&(e=!1),e&&t({object:this.array,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),Ot(this,t)},t.prototype.getArrayLength=function(){return this.atom.reportObserved(),this.values.length},t.prototype.setArrayLength=function(t){if("number"!=typeof t||t<0)throw new Error("[mobx.array] Out of range: "+t);var e=this.values.length;if(t!==e)if(t>e){for(var n=new Array(t-e),r=0;r0&&t+e+1>bn&&qt(t+e+1)},t.prototype.spliceWithArray=function(t,e,n){var r=this;Z(this.atom);var i=this.values.length;if(void 0===t?t=0:t>i?t=i:t<0&&(t=Math.max(0,i+t)),e=1===arguments.length?i-t:void 0===e||null===e?0:Math.max(0,Math.min(e,i-t)),void 0===n&&(n=[]),Ct(this)){var o=Lt(this,{object:this.array,type:"splice",index:t,removedCount:e,added:n});if(!o)return kn;e=o.removedCount,n=o.added}n=n.map(function(t){return r.enhancer(t,void 0)});var a=n.length-e;this.updateArrayLength(i,a);var s=this.spliceItemsIntoValues(t,e,n);return 0===e&&0===n.length||this.notifyArraySplice(t,n,s),s},t.prototype.spliceItemsIntoValues=function(t,e,n){if(n.length<1e4)return(i=this.values).splice.apply(i,[t,e].concat(n));var r=this.values.slice(t,t+e);return this.values=this.values.slice(0,t).concat(n,this.values.slice(t+e)),r;var i},t.prototype.notifyArrayChildUpdate=function(t,e,n){var r=!this.owned&&Mt(),i=Rt(this),o=i||r?{object:this.array,type:"update",index:t,newValue:e,oldValue:n}:null;r&&Tt(o),this.atom.reportChanged(),i&&It(this,o),r&&St()},t.prototype.notifyArraySplice=function(t,e,n){var r=!this.owned&&Mt(),i=Rt(this),o=i||r?{object:this.array,type:"splice",index:t,removed:n,added:e,removedCount:n.length,addedCount:e.length}:null;r&&Tt(o),this.atom.reportChanged(),i&&It(this,o),r&&St()},t}(),wn=function(t){function e(e,n,r,i){void 0===r&&(r="ObservableArray@"+ye()),void 0===i&&(i=!1);var o=t.call(this)||this,a=new _n(r,n,o,i);return Re(o,"$mobx",a),e&&e.length?(a.updateArrayLength(0,e.length),a.values=e.map(function(t){return n(t,void 0,r+"[..]")}),a.notifyArraySplice(0,a.values.slice(),kn)):a.values=[],yn&&Object.defineProperty(a.array,"0",Mn),o}return Ve(e,t),e.prototype.intercept=function(t){return this.$mobx.intercept(t)},e.prototype.observe=function(t,e){return void 0===e&&(e=!1),this.$mobx.observe(t,e)},e.prototype.clear=function(){return this.splice(0)},e.prototype.concat=function(){for(var t=[],e=0;e-1&&(this.splice(e,1),!0)},e.prototype.move=function(t,e){function n(t){if(t<0)throw new Error("[mobx.array] Index out of bounds: "+t+" is negative");var e=this.$mobx.values.length;if(t>=e)throw new Error("[mobx.array] Index out of bounds: "+t+" is not smaller than "+e)}if(n.call(this,t),n.call(this,e),t!==e){var r,i=this.$mobx.values;r=t]/;t.exports=i},function(t,e,n){"use strict";var r,i=n(7),o=n(77),a=/^[ \r\n\t\f]/,s=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,u=n(85),c=u(function(t,e){if(t.namespaceURI!==o.svg||"innerHTML"in t)t.innerHTML=e;else{r=r||document.createElement("div"),r.innerHTML=""+e+"";for(var n=r.firstChild;n.firstChild;)t.appendChild(n.firstChild)}});if(i.canUseDOM){var l=document.createElement("div");l.innerHTML=" ",""===l.innerHTML&&(c=function(t,e){if(t.parentNode&&t.parentNode.replaceChild(t,t),a.test(e)||"<"===e[0]&&s.test(e)){t.innerHTML=String.fromCharCode(65279)+e;var n=t.firstChild;1===n.data.length?t.removeChild(n):n.deleteData(0,1)}else t.innerHTML=e}),l=null}t.exports=c},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e,n,r){n&&(0,d.default)(t,e,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function o(t,e,n,r,i){var o={};return Object.keys(r).forEach(function(t){o[t]=r[t]}),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=n.slice().reverse().reduce(function(n,r){return r(t,e,n)||n},o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(t,e,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0});var a,s,u,c,l,h,p=n(38),d=r(p),f=n(48),m=r(f),v=n(4),g=r(v),y=n(5),b=r(y),x=n(42),_=n(19),w=(function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);e.default=t}(_),n(158)),M=r(w),E=n(159),T=r(E),S=n(160),A=r(S),C=n(47),P=r(C),L=(a=function(){function t(){(0,g.default)(this,t),i(this,"timestamp",s,this),i(this,"dimension",u,this),i(this,"meters",c,this),i(this,"monitor",l,this),i(this,"options",h,this)}return(0,b.default)(t,[{key:"updateTimestamp",value:function(t){this.timestamp=t}},{key:"updateDimension",value:function(){this.dimension={width:window.innerWidth,height:window.innerHeight}}}]),t}(),s=o(a.prototype,"timestamp",[x.observable],{enumerable:!0,initializer:function(){return 0}}),u=o(a.prototype,"dimension",[x.observable],{enumerable:!0,initializer:function(){return{width:window.innerWidth,height:window.innerHeight}}}),c=o(a.prototype,"meters",[x.observable],{enumerable:!0,initializer:function(){return new M.default}}),l=o(a.prototype,"monitor",[x.observable],{enumerable:!0,initializer:function(){return new T.default}}),h=o(a.prototype,"options",[x.observable],{enumerable:!0,initializer:function(){return new A.default}}),o(a.prototype,"updateTimestamp",[x.action],(0,m.default)(a.prototype,"updateTimestamp"),a.prototype),o(a.prototype,"updateDimension",[x.action],(0,m.default)(a.prototype,"updateDimension"),a.prototype),a),R=new L;P.default.debug.autoMonitorMessage&&setInterval(function(){var t=[{level:"FATAL",message:"There is a fatal hardware issue detected. It might be due to an incorrect power management setup. Please see the logs for details."},{level:"WARN",message:"The warning indicator on the instrument panel is on. This is usually due to a failure in engine."},{level:"ERROR",message:"Invalid coordinates received from the localization module."},{level:"INFO",message:"Monitor module has started and is succesfully initialized."}][Math.floor(4*Math.random())];R.monitor.insert(t.level,t.message,Date.now())},1e4);e.default=R},function(t,e,n){var r,i;/*! +var i=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(t){r[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var n,s,u=r(t),c=1;c0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}function p(t,e,n,r,i,a,s,u,c,l){t=void 0!==t?t:[],e=void 0!==e?e:ta,o.call(this,t,e,n,r,i,a,s,u,c,l),this.flipY=!1}function f(){this.seq=[],this.map={}}function d(t,e,n){var r=t[0];if(r<=0||r>0)return t;var i=e*n,o=gs[i];if(void 0===o&&(o=new Float32Array(i),gs[i]=o),0!==e){r.toArray(o,0);for(var a=1,s=0;a!==e;++a)s+=n,t[a].toArray(o,s)}return o}function m(t,e){var n=ys[e];void 0===n&&(n=new Int32Array(e),ys[e]=n);for(var r=0;r!==e;++r)n[r]=t.allocTextureUnit();return n}function v(t,e){t.uniform1f(this.addr,e)}function g(t,e){t.uniform1i(this.addr,e)}function y(t,e){void 0===e.x?t.uniform2fv(this.addr,e):t.uniform2f(this.addr,e.x,e.y)}function b(t,e){void 0!==e.x?t.uniform3f(this.addr,e.x,e.y,e.z):void 0!==e.r?t.uniform3f(this.addr,e.r,e.g,e.b):t.uniform3fv(this.addr,e)}function x(t,e){void 0===e.x?t.uniform4fv(this.addr,e):t.uniform4f(this.addr,e.x,e.y,e.z,e.w)}function _(t,e){t.uniformMatrix2fv(this.addr,!1,e.elements||e)}function w(t,e){t.uniformMatrix3fv(this.addr,!1,e.elements||e)}function E(t,e){t.uniformMatrix4fv(this.addr,!1,e.elements||e)}function M(t,e,n){var r=n.allocTextureUnit();t.uniform1i(this.addr,r),n.setTexture2D(e||ms,r)}function T(t,e,n){var r=n.allocTextureUnit();t.uniform1i(this.addr,r),n.setTextureCube(e||vs,r)}function S(t,e){t.uniform2iv(this.addr,e)}function A(t,e){t.uniform3iv(this.addr,e)}function C(t,e){t.uniform4iv(this.addr,e)}function P(t){switch(t){case 5126:return v;case 35664:return y;case 35665:return b;case 35666:return x;case 35674:return _;case 35675:return w;case 35676:return E;case 35678:return M;case 35680:return T;case 5124:case 35670:return g;case 35667:case 35671:return S;case 35668:case 35672:return A;case 35669:case 35673:return C}}function R(t,e){t.uniform1fv(this.addr,e)}function L(t,e){t.uniform1iv(this.addr,e)}function O(t,e){t.uniform2fv(this.addr,d(e,this.size,2))}function I(t,e){t.uniform3fv(this.addr,d(e,this.size,3))}function N(t,e){t.uniform4fv(this.addr,d(e,this.size,4))}function D(t,e){t.uniformMatrix2fv(this.addr,!1,d(e,this.size,4))}function k(t,e){t.uniformMatrix3fv(this.addr,!1,d(e,this.size,9))}function U(t,e){t.uniformMatrix4fv(this.addr,!1,d(e,this.size,16))}function F(t,e,n){var r=e.length,i=m(n,r);t.uniform1iv(this.addr,i);for(var o=0;o!==r;++o)n.setTexture2D(e[o]||ms,i[o])}function B(t,e,n){var r=e.length,i=m(n,r);t.uniform1iv(this.addr,i);for(var o=0;o!==r;++o)n.setTextureCube(e[o]||vs,i[o])}function z(t){switch(t){case 5126:return R;case 35664:return O;case 35665:return I;case 35666:return N;case 35674:return D;case 35675:return k;case 35676:return U;case 35678:return F;case 35680:return B;case 5124:case 35670:return L;case 35667:case 35671:return S;case 35668:case 35672:return A;case 35669:case 35673:return C}}function j(t,e,n){this.id=t,this.addr=n,this.setValue=P(e.type)}function V(t,e,n){this.id=t,this.addr=n,this.size=e.size,this.setValue=z(e.type)}function H(t){this.id=t,f.call(this)}function G(t,e){t.seq.push(e),t.map[e.id]=e}function W(t,e,n){var r=t.name,i=r.length;for(bs.lastIndex=0;;){var o=bs.exec(r),a=bs.lastIndex,s=o[1],u="]"===o[2],c=o[3];if(u&&(s|=0),void 0===c||"["===c&&a+2===i){G(n,void 0===c?new j(s,t,e):new V(s,t,e));break}var l=n.map,h=l[s];void 0===h&&(h=new H(s),G(n,h)),n=h}}function X(t,e,n){f.call(this),this.renderer=n;for(var r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),i=0;i.001&&L.scale>.001&&(E.x=L.x,E.y=L.y,E.z=L.z,_=L.size*L.scale/v.w,w.x=_*y,w.y=_,d.uniform3f(h.screenPosition,E.x,E.y,E.z),d.uniform2f(h.scale,w.x,w.y),d.uniform1f(h.rotation,L.rotation),d.uniform1f(h.opacity,L.opacity),d.uniform3f(h.color,L.color.r,L.color.g,L.color.b),m.setBlending(L.blending,L.blendEquation,L.blendSrc,L.blendDst),t.setTexture2D(L.texture,1),d.drawElements(d.TRIANGLES,6,d.UNSIGNED_SHORT,0))}}}m.enable(d.CULL_FACE),m.enable(d.DEPTH_TEST),m.setDepthWrite(!0),t.resetGLState()}}}function J(t,e){function n(){var t=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),e=new Uint16Array([0,1,2,0,2,3]);a=d.createBuffer(),s=d.createBuffer(),d.bindBuffer(d.ARRAY_BUFFER,a),d.bufferData(d.ARRAY_BUFFER,t,d.STATIC_DRAW),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,s),d.bufferData(d.ELEMENT_ARRAY_BUFFER,e,d.STATIC_DRAW),u=r(),h={position:d.getAttribLocation(u,"position"),uv:d.getAttribLocation(u,"uv")},p={uvOffset:d.getUniformLocation(u,"uvOffset"),uvScale:d.getUniformLocation(u,"uvScale"),rotation:d.getUniformLocation(u,"rotation"),scale:d.getUniformLocation(u,"scale"),color:d.getUniformLocation(u,"color"),map:d.getUniformLocation(u,"map"),opacity:d.getUniformLocation(u,"opacity"),modelViewMatrix:d.getUniformLocation(u,"modelViewMatrix"),projectionMatrix:d.getUniformLocation(u,"projectionMatrix"),fogType:d.getUniformLocation(u,"fogType"),fogDensity:d.getUniformLocation(u,"fogDensity"),fogNear:d.getUniformLocation(u,"fogNear"),fogFar:d.getUniformLocation(u,"fogFar"),fogColor:d.getUniformLocation(u,"fogColor"),alphaTest:d.getUniformLocation(u,"alphaTest")};var n=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");n.width=8,n.height=8;var i=n.getContext("2d");i.fillStyle="white",i.fillRect(0,0,8,8),f=new o(n),f.needsUpdate=!0}function r(){var e=d.createProgram(),n=d.createShader(d.VERTEX_SHADER),r=d.createShader(d.FRAGMENT_SHADER);return d.shaderSource(n,["precision "+t.getPrecision()+" float;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform float rotation;","uniform vec2 scale;","uniform vec2 uvOffset;","uniform vec2 uvScale;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","void main() {","vUV = uvOffset + uv * uvScale;","vec2 alignedPosition = position * scale;","vec2 rotatedPosition;","rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;","rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;","vec4 finalPosition;","finalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );","finalPosition.xy += rotatedPosition;","finalPosition = projectionMatrix * finalPosition;","gl_Position = finalPosition;","}"].join("\n")),d.shaderSource(r,["precision "+t.getPrecision()+" float;","uniform vec3 color;","uniform sampler2D map;","uniform float opacity;","uniform int fogType;","uniform vec3 fogColor;","uniform float fogDensity;","uniform float fogNear;","uniform float fogFar;","uniform float alphaTest;","varying vec2 vUV;","void main() {","vec4 texture = texture2D( map, vUV );","if ( texture.a < alphaTest ) discard;","gl_FragColor = vec4( color * texture.xyz, texture.a * opacity );","if ( fogType > 0 ) {","float depth = gl_FragCoord.z / gl_FragCoord.w;","float fogFactor = 0.0;","if ( fogType == 1 ) {","fogFactor = smoothstep( fogNear, fogFar, depth );","} else {","const float LOG2 = 1.442695;","fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );","fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );","}","gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );","}","}"].join("\n")),d.compileShader(n),d.compileShader(r),d.attachShader(e,n),d.attachShader(e,r),d.linkProgram(e),e}function i(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:e.id-t.id}var a,s,u,h,p,f,d=t.context,m=t.state,v=new l,g=new c,y=new l;this.render=function(r,o){if(0!==e.length){void 0===u&&n(),d.useProgram(u),m.initAttributes(),m.enableAttribute(h.position),m.enableAttribute(h.uv),m.disableUnusedAttributes(),m.disable(d.CULL_FACE),m.enable(d.BLEND),d.bindBuffer(d.ARRAY_BUFFER,a),d.vertexAttribPointer(h.position,2,d.FLOAT,!1,16,0),d.vertexAttribPointer(h.uv,2,d.FLOAT,!1,16,8),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,s),d.uniformMatrix4fv(p.projectionMatrix,!1,o.projectionMatrix.elements),m.activeTexture(d.TEXTURE0),d.uniform1i(p.map,0);var c=0,l=0,b=r.fog;b?(d.uniform3f(p.fogColor,b.color.r,b.color.g,b.color.b),b.isFog?(d.uniform1f(p.fogNear,b.near),d.uniform1f(p.fogFar,b.far),d.uniform1i(p.fogType,1),c=1,l=1):b.isFogExp2&&(d.uniform1f(p.fogDensity,b.density),d.uniform1i(p.fogType,2),c=2,l=2)):(d.uniform1i(p.fogType,0),c=0,l=0);for(var x=0,_=e.length;x<_;x++){var w=e[x];w.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,w.matrixWorld),w.z=-w.modelViewMatrix.elements[14]}e.sort(i);for(var E=[],x=0,_=e.length;x<_;x++){var w=e[x],M=w.material;if(!1!==M.visible){d.uniform1f(p.alphaTest,M.alphaTest),d.uniformMatrix4fv(p.modelViewMatrix,!1,w.modelViewMatrix.elements),w.matrixWorld.decompose(v,g,y),E[0]=y.x,E[1]=y.y;var T=0;r.fog&&M.fog&&(T=l),c!==T&&(d.uniform1i(p.fogType,T),c=T),null!==M.map?(d.uniform2f(p.uvOffset,M.map.offset.x,M.map.offset.y),d.uniform2f(p.uvScale,M.map.repeat.x,M.map.repeat.y)):(d.uniform2f(p.uvOffset,0,0),d.uniform2f(p.uvScale,1,1)),d.uniform1f(p.opacity,M.opacity),d.uniform3f(p.color,M.color.r,M.color.g,M.color.b),d.uniform1f(p.rotation,M.rotation),d.uniform2fv(p.scale,E),m.setBlending(M.blending,M.blendEquation,M.blendSrc,M.blendDst),m.setDepthTest(M.depthTest),m.setDepthWrite(M.depthWrite),M.map?t.setTexture2D(M.map,0):t.setTexture2D(f,0),d.drawElements(d.TRIANGLES,6,d.UNSIGNED_SHORT,0)}}m.enable(d.CULL_FACE),t.resetGLState()}}}function $(){Object.defineProperty(this,"id",{value:Ts++}),this.uuid=fs.generateUUID(),this.name="",this.type="Material",this.fog=!0,this.lights=!0,this.blending=vo,this.side=ao,this.shading=lo,this.vertexColors=ho,this.opacity=1,this.transparent=!1,this.blendSrc=Ro,this.blendDst=Lo,this.blendEquation=_o,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=zo,this.depthTest=!0,this.depthWrite=!0,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.alphaTest=0,this.premultipliedAlpha=!1,this.overdraw=0,this.visible=!0,this._needsUpdate=!0}function Q(t){$.call(this),this.type="ShaderMaterial",this.defines={},this.uniforms={},this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,void 0!==t&&(void 0!==t.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(t))}function tt(t){$.call(this),this.type="MeshDepthMaterial",this.depthPacking=hs,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.setValues(t)}function et(t,e){this.min=void 0!==t?t:new l(1/0,1/0,1/0),this.max=void 0!==e?e:new l(-1/0,-1/0,-1/0)}function nt(t,e){this.center=void 0!==t?t:new l,this.radius=void 0!==e?e:0}function rt(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]),arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}function it(t,e){this.normal=void 0!==t?t:new l(1,0,0),this.constant=void 0!==e?e:0}function ot(t,e,n,r,i,o){this.planes=[void 0!==t?t:new it,void 0!==e?e:new it,void 0!==n?n:new it,void 0!==r?r:new it,void 0!==i?i:new it,void 0!==o?o:new it]}function at(t,e,n,r){function o(e,n,r,i){var o=e.geometry,a=null,s=M,u=e.customDepthMaterial;if(r&&(s=T,u=e.customDistanceMaterial),u)a=u;else{var c=!1;n.morphTargets&&(o&&o.isBufferGeometry?c=o.morphAttributes&&o.morphAttributes.position&&o.morphAttributes.position.length>0:o&&o.isGeometry&&(c=o.morphTargets&&o.morphTargets.length>0));var l=e.isSkinnedMesh&&n.skinning,h=0;c&&(h|=_),l&&(h|=w),a=s[h]}if(t.localClippingEnabled&&!0===n.clipShadows&&0!==n.clippingPlanes.length){var p=a.uuid,f=n.uuid,d=S[p];void 0===d&&(d={},S[p]=d);var m=d[f];void 0===m&&(m=a.clone(),d[f]=m),a=m}a.visible=n.visible,a.wireframe=n.wireframe;var v=n.side;return F.renderSingleSided&&v==uo&&(v=ao),F.renderReverseSided&&(v===ao?v=so:v===so&&(v=ao)),a.side=v,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,r&&void 0!==a.uniforms.lightPos&&a.uniforms.lightPos.value.copy(i),a}function u(t,e,n){if(!1!==t.visible){if(0!=(t.layers.mask&e.layers.mask)&&(t.isMesh||t.isLine||t.isPoints)&&t.castShadow&&(!1===t.frustumCulled||!0===f.intersectsObject(t))){!0===t.material.visible&&(t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,t.matrixWorld),x.push(t))}for(var r=t.children,i=0,o=r.length;in&&(n=t[e]);return n}function At(){return As++}function Ct(){Object.defineProperty(this,"id",{value:At()}),this.uuid=fs.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}function Pt(){Object.defineProperty(this,"id",{value:At()}),this.uuid=fs.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0}}function Rt(t,e){lt.call(this),this.type="Mesh",this.geometry=void 0!==t?t:new Pt,this.material=void 0!==e?e:new dt({color:16777215*Math.random()}),this.drawMode=ts,this.updateMorphTargets()}function Lt(t,e,n,r,i,o){Ct.call(this),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:r,heightSegments:i,depthSegments:o},this.fromBufferGeometry(new Ot(t,e,n,r,i,o)),this.mergeVertices()}function Ot(t,e,n,r,i,o){function a(t,e,n,r,i,o,a,m,v,g,y){var b,x,_=o/v,w=a/g,E=o/2,M=a/2,T=m/2,S=v+1,A=g+1,C=0,P=0,R=new l;for(x=0;x0?1:-1,h.push(R.x,R.y,R.z),p.push(b/v),p.push(1-x/g),C+=1}}for(x=0;x");return $t(n)}var n=/#include +<([\w\d.]+)>/g;return t.replace(n,e)}function Qt(t){function e(t,e,n,r){for(var i="",o=parseInt(e);o0?t.gammaFactor:1,v=qt(o,r,t.extensions),g=Yt(a),y=i.createProgram();n.isRawShaderMaterial?(f=[g,"\n"].filter(Kt).join("\n"),d=[v,g,"\n"].filter(Kt).join("\n")):(f=["precision "+r.precision+" float;","precision "+r.precision+" int;","#define SHADER_NAME "+n.__webglShader.name,g,r.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+m,"#define MAX_BONES "+r.maxBones,r.useFog&&r.fog?"#define USE_FOG":"",r.useFog&&r.fogExp?"#define FOG_EXP2":"",r.map?"#define USE_MAP":"",r.envMap?"#define USE_ENVMAP":"",r.envMap?"#define "+h:"",r.lightMap?"#define USE_LIGHTMAP":"",r.aoMap?"#define USE_AOMAP":"",r.emissiveMap?"#define USE_EMISSIVEMAP":"",r.bumpMap?"#define USE_BUMPMAP":"",r.normalMap?"#define USE_NORMALMAP":"",r.displacementMap&&r.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",r.specularMap?"#define USE_SPECULARMAP":"",r.roughnessMap?"#define USE_ROUGHNESSMAP":"",r.metalnessMap?"#define USE_METALNESSMAP":"",r.alphaMap?"#define USE_ALPHAMAP":"",r.vertexColors?"#define USE_COLOR":"",r.flatShading?"#define FLAT_SHADED":"",r.skinning?"#define USE_SKINNING":"",r.useVertexTexture?"#define BONE_TEXTURE":"",r.morphTargets?"#define USE_MORPHTARGETS":"",r.morphNormals&&!1===r.flatShading?"#define USE_MORPHNORMALS":"",r.doubleSided?"#define DOUBLE_SIDED":"",r.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+r.numClippingPlanes,r.shadowMapEnabled?"#define USE_SHADOWMAP":"",r.shadowMapEnabled?"#define "+c:"",r.sizeAttenuation?"#define USE_SIZEATTENUATION":"",r.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",r.logarithmicDepthBuffer&&t.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Kt).join("\n"),d=[v,"precision "+r.precision+" float;","precision "+r.precision+" int;","#define SHADER_NAME "+n.__webglShader.name,g,r.alphaTest?"#define ALPHATEST "+r.alphaTest:"","#define GAMMA_FACTOR "+m,r.useFog&&r.fog?"#define USE_FOG":"",r.useFog&&r.fogExp?"#define FOG_EXP2":"",r.map?"#define USE_MAP":"",r.envMap?"#define USE_ENVMAP":"",r.envMap?"#define "+l:"",r.envMap?"#define "+h:"",r.envMap?"#define "+p:"",r.lightMap?"#define USE_LIGHTMAP":"",r.aoMap?"#define USE_AOMAP":"",r.emissiveMap?"#define USE_EMISSIVEMAP":"",r.bumpMap?"#define USE_BUMPMAP":"",r.normalMap?"#define USE_NORMALMAP":"",r.specularMap?"#define USE_SPECULARMAP":"",r.roughnessMap?"#define USE_ROUGHNESSMAP":"",r.metalnessMap?"#define USE_METALNESSMAP":"",r.alphaMap?"#define USE_ALPHAMAP":"",r.vertexColors?"#define USE_COLOR":"",r.gradientMap?"#define USE_GRADIENTMAP":"",r.flatShading?"#define FLAT_SHADED":"",r.doubleSided?"#define DOUBLE_SIDED":"",r.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+r.numClippingPlanes,"#define UNION_CLIPPING_PLANES "+(r.numClippingPlanes-r.numClipIntersection),r.shadowMapEnabled?"#define USE_SHADOWMAP":"",r.shadowMapEnabled?"#define "+c:"",r.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",r.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",r.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",r.logarithmicDepthBuffer&&t.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"",r.envMap&&t.extensions.get("EXT_shader_texture_lod")?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",r.toneMapping!==Yo?"#define TONE_MAPPING":"",r.toneMapping!==Yo?_s.tonemapping_pars_fragment:"",r.toneMapping!==Yo?Xt("toneMapping",r.toneMapping):"",r.outputEncoding||r.mapEncoding||r.envMapEncoding||r.emissiveMapEncoding?_s.encodings_pars_fragment:"",r.mapEncoding?Gt("mapTexelToLinear",r.mapEncoding):"",r.envMapEncoding?Gt("envMapTexelToLinear",r.envMapEncoding):"",r.emissiveMapEncoding?Gt("emissiveMapTexelToLinear",r.emissiveMapEncoding):"",r.outputEncoding?Wt("linearToOutputTexel",r.outputEncoding):"",r.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Kt).join("\n")),s=$t(s,r),s=Jt(s,r),u=$t(u,r),u=Jt(u,r),n.isShaderMaterial||(s=Qt(s),u=Qt(u));var b=f+s,x=d+u,_=Vt(i,i.VERTEX_SHADER,b),w=Vt(i,i.FRAGMENT_SHADER,x);i.attachShader(y,_),i.attachShader(y,w),void 0!==n.index0AttributeName?i.bindAttribLocation(y,0,n.index0AttributeName):!0===r.morphTargets&&i.bindAttribLocation(y,0,"position"),i.linkProgram(y);var E=i.getProgramInfoLog(y),M=i.getShaderInfoLog(_),T=i.getShaderInfoLog(w),S=!0,A=!0;!1===i.getProgramParameter(y,i.LINK_STATUS)?(S=!1,console.error("THREE.WebGLProgram: shader error: ",i.getError(),"gl.VALIDATE_STATUS",i.getProgramParameter(y,i.VALIDATE_STATUS),"gl.getProgramInfoLog",E,M,T)):""!==E?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",E):""!==M&&""!==T||(A=!1),A&&(this.diagnostics={runnable:S,material:n,programLog:E,vertexShader:{log:M,prefix:f},fragmentShader:{log:T,prefix:d}}),i.deleteShader(_),i.deleteShader(w);var C;this.getUniforms=function(){return void 0===C&&(C=new X(i,y,t)),C};var P;return this.getAttributes=function(){return void 0===P&&(P=Zt(i,y)),P},this.destroy=function(){i.deleteProgram(y),this.program=void 0},Object.defineProperties(this,{uniforms:{get:function(){return console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms()."),this.getUniforms()}},attributes:{get:function(){return console.warn("THREE.WebGLProgram: .attributes is now .getAttributes()."),this.getAttributes()}}}),this.id=Cs++,this.code=e,this.usedTimes=1,this.program=y,this.vertexShader=_,this.fragmentShader=w,this}function ee(t,e){function n(t){if(e.floatVertexTextures&&t&&t.skeleton&&t.skeleton.useVertexTexture)return 1024;var n=e.maxVertexUniforms,r=Math.floor((n-20)/4),i=r;return void 0!==t&&t&&t.isSkinnedMesh&&(i=Math.min(t.skeleton.bones.length,i))0,shadowMapType:t.shadowMap.type,toneMapping:t.toneMapping,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:i.premultipliedAlpha,alphaTest:i.alphaTest,doubleSided:i.side===uo,flipSided:i.side===so,depthPacking:void 0!==i.depthPacking&&i.depthPacking}},this.getProgramCode=function(t,e){var n=[];if(e.shaderID?n.push(e.shaderID):(n.push(t.fragmentShader),n.push(t.vertexShader)),void 0!==t.defines)for(var r in t.defines)n.push(r),n.push(t.defines[r]);for(var i=0;i65535?wt:xt)(o,1);return i(d,t.ELEMENT_ARRAY_BUFFER),r.wireframe=d,d}var l=new ne(t,e,n);return{getAttributeBuffer:s,getAttributeProperties:u,getWireframeAttribute:c,update:r}}function ie(t,e,n,r,i,o,a){function s(t,e){if(t.width>e||t.height>e){var n=e/Math.max(t.width,t.height),r=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");r.width=Math.floor(t.width*n),r.height=Math.floor(t.height*n);return r.getContext("2d").drawImage(t,0,0,t.width,t.height,0,0,r.width,r.height),console.warn("THREE.WebGLRenderer: image is too big ("+t.width+"x"+t.height+"). Resized to "+r.width+"x"+r.height,t),r}return t}function u(t){return fs.isPowerOfTwo(t.width)&&fs.isPowerOfTwo(t.height)}function c(t){if(t instanceof HTMLImageElement||t instanceof HTMLCanvasElement){var e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");e.width=fs.nearestPowerOfTwo(t.width),e.height=fs.nearestPowerOfTwo(t.height);return e.getContext("2d").drawImage(t,0,0,e.width,e.height),console.warn("THREE.WebGLRenderer: image is not power of two ("+t.width+"x"+t.height+"). Resized to "+e.width+"x"+e.height,t),e}return t}function l(t){return t.wrapS!==ua||t.wrapT!==ua||t.minFilter!==la&&t.minFilter!==fa}function h(e){return e===la||e===ha||e===pa?t.NEAREST:t.LINEAR}function p(t){var e=t.target;e.removeEventListener("dispose",p),d(e),A.textures--}function f(t){var e=t.target;e.removeEventListener("dispose",f),m(e),A.textures--}function d(e){var n=r.get(e);if(e.image&&n.__image__webglTextureCube)t.deleteTexture(n.__image__webglTextureCube);else{if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture)}r.delete(e)}function m(e){var n=r.get(e),i=r.get(e.texture);if(e){if(void 0!==i.__webglTexture&&t.deleteTexture(i.__webglTexture),e.depthTexture&&e.depthTexture.dispose(),e.isWebGLRenderTargetCube)for(var o=0;o<6;o++)t.deleteFramebuffer(n.__webglFramebuffer[o]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[o]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer);r.delete(e.texture),r.delete(e)}}function v(e,i){var o=r.get(e);if(e.version>0&&o.__version!==e.version){var a=e.image;if(void 0===a)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",e);else{if(!1!==a.complete)return void x(o,e,i);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",e)}}n.activeTexture(t.TEXTURE0+i),n.bindTexture(t.TEXTURE_2D,o.__webglTexture)}function g(e,a){var c=r.get(e);if(6===e.image.length)if(e.version>0&&c.__version!==e.version){c.__image__webglTextureCube||(e.addEventListener("dispose",p),c.__image__webglTextureCube=t.createTexture(),A.textures++),n.activeTexture(t.TEXTURE0+a),n.bindTexture(t.TEXTURE_CUBE_MAP,c.__image__webglTextureCube),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,e.flipY);for(var l=e&&e.isCompressedTexture,h=e.image[0]&&e.image[0].isDataTexture,f=[],d=0;d<6;d++)f[d]=l||h?h?e.image[d].image:e.image[d]:s(e.image[d],i.maxCubemapSize);var m=f[0],v=u(m),g=o(e.format),y=o(e.type);b(t.TEXTURE_CUBE_MAP,e,v);for(var d=0;d<6;d++)if(l)for(var x,_=f[d].mipmaps,w=0,E=_.length;w-1?n.compressedTexImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+d,w,g,x.width,x.height,0,x.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+d,w,g,x.width,x.height,0,g,y,x.data);else h?n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+d,0,g,f[d].width,f[d].height,0,g,y,f[d].data):n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+d,0,g,g,y,f[d]);e.generateMipmaps&&v&&t.generateMipmap(t.TEXTURE_CUBE_MAP),c.__version=e.version,e.onUpdate&&e.onUpdate(e)}else n.activeTexture(t.TEXTURE0+a),n.bindTexture(t.TEXTURE_CUBE_MAP,c.__image__webglTextureCube)}function y(e,i){n.activeTexture(t.TEXTURE0+i),n.bindTexture(t.TEXTURE_CUBE_MAP,r.get(e).__webglTexture)}function b(n,a,s){var u;if(s?(t.texParameteri(n,t.TEXTURE_WRAP_S,o(a.wrapS)),t.texParameteri(n,t.TEXTURE_WRAP_T,o(a.wrapT)),t.texParameteri(n,t.TEXTURE_MAG_FILTER,o(a.magFilter)),t.texParameteri(n,t.TEXTURE_MIN_FILTER,o(a.minFilter))):(t.texParameteri(n,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(n,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),a.wrapS===ua&&a.wrapT===ua||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.",a),t.texParameteri(n,t.TEXTURE_MAG_FILTER,h(a.magFilter)),t.texParameteri(n,t.TEXTURE_MIN_FILTER,h(a.minFilter)),a.minFilter!==la&&a.minFilter!==fa&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.",a)),u=e.get("EXT_texture_filter_anisotropic")){if(a.type===wa&&null===e.get("OES_texture_float_linear"))return;if(a.type===Ea&&null===e.get("OES_texture_half_float_linear"))return;(a.anisotropy>1||r.get(a).__currentAnisotropy)&&(t.texParameterf(n,u.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,i.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy)}}function x(e,r,a){void 0===e.__webglInit&&(e.__webglInit=!0,r.addEventListener("dispose",p),e.__webglTexture=t.createTexture(),A.textures++),n.activeTexture(t.TEXTURE0+a),n.bindTexture(t.TEXTURE_2D,e.__webglTexture),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,r.flipY),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultiplyAlpha),t.pixelStorei(t.UNPACK_ALIGNMENT,r.unpackAlignment);var h=s(r.image,i.maxTextureSize);l(r)&&!1===u(h)&&(h=c(h));var f=u(h),d=o(r.format),m=o(r.type);b(t.TEXTURE_2D,r,f);var v,g=r.mipmaps;if(r.isDepthTexture){var y=t.DEPTH_COMPONENT;if(r.type===wa){if(!C)throw new Error("Float Depth Texture only supported in WebGL2.0");y=t.DEPTH_COMPONENT32F}else C&&(y=t.DEPTH_COMPONENT16);r.format===Na&&y===t.DEPTH_COMPONENT&&r.type!==ba&&r.type!==_a&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),r.type=ba,m=o(r.type)),r.format===Da&&(y=t.DEPTH_STENCIL,r.type!==Aa&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),r.type=Aa,m=o(r.type))),n.texImage2D(t.TEXTURE_2D,0,y,h.width,h.height,0,d,m,null)}else if(r.isDataTexture)if(g.length>0&&f){for(var x=0,_=g.length;x<_;x++)v=g[x],n.texImage2D(t.TEXTURE_2D,x,d,v.width,v.height,0,d,m,v.data);r.generateMipmaps=!1}else n.texImage2D(t.TEXTURE_2D,0,d,h.width,h.height,0,d,m,h.data);else if(r.isCompressedTexture)for(var x=0,_=g.length;x<_;x++)v=g[x],r.format!==Ra&&r.format!==Pa?n.getCompressedTextureFormats().indexOf(d)>-1?n.compressedTexImage2D(t.TEXTURE_2D,x,d,v.width,v.height,0,v.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):n.texImage2D(t.TEXTURE_2D,x,d,v.width,v.height,0,d,m,v.data);else if(g.length>0&&f){for(var x=0,_=g.length;x<_;x++)v=g[x],n.texImage2D(t.TEXTURE_2D,x,d,d,m,v);r.generateMipmaps=!1}else n.texImage2D(t.TEXTURE_2D,0,d,d,m,h);r.generateMipmaps&&f&&t.generateMipmap(t.TEXTURE_2D),e.__version=r.version,r.onUpdate&&r.onUpdate(r)}function _(e,i,a,s){var u=o(i.texture.format),c=o(i.texture.type);n.texImage2D(s,0,u,i.width,i.height,0,u,c,null),t.bindFramebuffer(t.FRAMEBUFFER,e),t.framebufferTexture2D(t.FRAMEBUFFER,a,s,r.get(i.texture).__webglTexture,0),t.bindFramebuffer(t.FRAMEBUFFER,null)}function w(e,n){t.bindRenderbuffer(t.RENDERBUFFER,e),n.depthBuffer&&!n.stencilBuffer?(t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,n.width,n.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e)):n.depthBuffer&&n.stencilBuffer?(t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,n.width,n.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e)):t.renderbufferStorage(t.RENDERBUFFER,t.RGBA4,n.width,n.height),t.bindRenderbuffer(t.RENDERBUFFER,null)}function E(e,n){if(n&&n.isWebGLRenderTargetCube)throw new Error("Depth Texture with cube render targets is not supported!");if(t.bindFramebuffer(t.FRAMEBUFFER,e),!n.depthTexture||!n.depthTexture.isDepthTexture)throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");r.get(n.depthTexture).__webglTexture&&n.depthTexture.image.width===n.width&&n.depthTexture.image.height===n.height||(n.depthTexture.image.width=n.width,n.depthTexture.image.height=n.height,n.depthTexture.needsUpdate=!0),v(n.depthTexture,0);var i=r.get(n.depthTexture).__webglTexture;if(n.depthTexture.format===Na)t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.TEXTURE_2D,i,0);else{if(n.depthTexture.format!==Da)throw new Error("Unknown depthTexture format");t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.TEXTURE_2D,i,0)}}function M(e){var n=r.get(e),i=!0===e.isWebGLRenderTargetCube;if(e.depthTexture){if(i)throw new Error("target.depthTexture not supported in Cube render targets");E(n.__webglFramebuffer,e)}else if(i){n.__webglDepthbuffer=[];for(var o=0;o<6;o++)t.bindFramebuffer(t.FRAMEBUFFER,n.__webglFramebuffer[o]),n.__webglDepthbuffer[o]=t.createRenderbuffer(),w(n.__webglDepthbuffer[o],e)}else t.bindFramebuffer(t.FRAMEBUFFER,n.__webglFramebuffer),n.__webglDepthbuffer=t.createRenderbuffer(),w(n.__webglDepthbuffer,e);t.bindFramebuffer(t.FRAMEBUFFER,null)}function T(e){var i=r.get(e),o=r.get(e.texture);e.addEventListener("dispose",f),o.__webglTexture=t.createTexture(),A.textures++;var a=!0===e.isWebGLRenderTargetCube,s=u(e);if(a){i.__webglFramebuffer=[];for(var c=0;c<6;c++)i.__webglFramebuffer[c]=t.createFramebuffer()}else i.__webglFramebuffer=t.createFramebuffer();if(a){n.bindTexture(t.TEXTURE_CUBE_MAP,o.__webglTexture),b(t.TEXTURE_CUBE_MAP,e.texture,s);for(var c=0;c<6;c++)_(i.__webglFramebuffer[c],e,t.COLOR_ATTACHMENT0,t.TEXTURE_CUBE_MAP_POSITIVE_X+c);e.texture.generateMipmaps&&s&&t.generateMipmap(t.TEXTURE_CUBE_MAP),n.bindTexture(t.TEXTURE_CUBE_MAP,null)}else n.bindTexture(t.TEXTURE_2D,o.__webglTexture),b(t.TEXTURE_2D,e.texture,s),_(i.__webglFramebuffer,e,t.COLOR_ATTACHMENT0,t.TEXTURE_2D),e.texture.generateMipmaps&&s&&t.generateMipmap(t.TEXTURE_2D),n.bindTexture(t.TEXTURE_2D,null);e.depthBuffer&&M(e)}function S(e){var i=e.texture;if(i.generateMipmaps&&u(e)&&i.minFilter!==la&&i.minFilter!==fa){var o=e&&e.isWebGLRenderTargetCube?t.TEXTURE_CUBE_MAP:t.TEXTURE_2D,a=r.get(i).__webglTexture;n.bindTexture(o,a),t.generateMipmap(o),n.bindTexture(o,null)}}var A=a.memory,C="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext;this.setTexture2D=v,this.setTextureCube=g,this.setTextureCubeDynamic=y,this.setupRenderTarget=T,this.updateRenderTargetMipmap=S}function oe(){var t={};return{get:function(e){var n=e.uuid,r=t[n];return void 0===r&&(r={},t[n]=r),r},delete:function(e){delete t[e.uuid]},clear:function(){t={}}}}function ae(t,e,n){function r(){var e=!1,n=new a,r=null,i=new a;return{setMask:function(n){r===n||e||(t.colorMask(n,n,n,n),r=n)},setLocked:function(t){e=t},setClear:function(e,r,o,a,s){!0===s&&(e*=a,r*=a,o*=a),n.set(e,r,o,a),!1===i.equals(n)&&(t.clearColor(e,r,o,a),i.copy(n))},reset:function(){e=!1,r=null,i.set(0,0,0,1)}}}function i(){var e=!1,n=null,r=null,i=null;return{setTest:function(e){e?f(t.DEPTH_TEST):d(t.DEPTH_TEST)},setMask:function(r){n===r||e||(t.depthMask(r),n=r)},setFunc:function(e){if(r!==e){if(e)switch(e){case Uo:t.depthFunc(t.NEVER);break;case Fo:t.depthFunc(t.ALWAYS);break;case Bo:t.depthFunc(t.LESS);break;case zo:t.depthFunc(t.LEQUAL);break;case jo:t.depthFunc(t.EQUAL);break;case Vo:t.depthFunc(t.GEQUAL);break;case Ho:t.depthFunc(t.GREATER);break;case Go:t.depthFunc(t.NOTEQUAL);break;default:t.depthFunc(t.LEQUAL)}else t.depthFunc(t.LEQUAL);r=e}},setLocked:function(t){e=t},setClear:function(e){i!==e&&(t.clearDepth(e),i=e)},reset:function(){e=!1,n=null,r=null,i=null}}}function o(){var e=!1,n=null,r=null,i=null,o=null,a=null,s=null,u=null,c=null;return{setTest:function(e){e?f(t.STENCIL_TEST):d(t.STENCIL_TEST)},setMask:function(r){n===r||e||(t.stencilMask(r),n=r)},setFunc:function(e,n,a){r===e&&i===n&&o===a||(t.stencilFunc(e,n,a),r=e,i=n,o=a)},setOp:function(e,n,r){a===e&&s===n&&u===r||(t.stencilOp(e,n,r),a=e,s=n,u=r)},setLocked:function(t){e=t},setClear:function(e){c!==e&&(t.clearStencil(e),c=e)},reset:function(){e=!1,n=null,r=null,i=null,o=null,a=null,s=null,u=null,c=null}}}function s(e,n,r){var i=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(e,t.TEXTURE_MAG_FILTER,t.NEAREST);for(var a=0;a=1,lt=null,ht={},pt=new a,ft=new a,dt={};return dt[t.TEXTURE_2D]=s(t.TEXTURE_2D,t.TEXTURE_2D,1),dt[t.TEXTURE_CUBE_MAP]=s(t.TEXTURE_CUBE_MAP,t.TEXTURE_CUBE_MAP_POSITIVE_X,6),{buffers:{color:F,depth:B,stencil:z},init:u,initAttributes:c,enableAttribute:l,enableAttributeAndDivisor:h,disableUnusedAttributes:p,enable:f,disable:d,getCompressedTextureFormats:m,setBlending:v,setColorWrite:g,setDepthTest:y,setDepthWrite:b,setDepthFunc:x,setStencilTest:_,setStencilWrite:w,setStencilFunc:E,setStencilOp:M,setFlipSided:T,setCullFace:S,setLineWidth:A,setPolygonOffset:C,getScissorTest:P,setScissorTest:R,activeTexture:L,bindTexture:O,compressedTexImage2D:I,texImage2D:N,scissor:D,viewport:k,reset:U}}function se(t,e,n){function r(){if(void 0!==o)return o;var n=e.get("EXT_texture_filter_anisotropic");return o=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}function i(e){if("highp"===e){if(t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.HIGH_FLOAT).precision>0&&t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.HIGH_FLOAT).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.MEDIUM_FLOAT).precision>0&&t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}var o,a=void 0!==n.precision?n.precision:"highp",s=i(a);s!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",s,"instead."),a=s);var u=!0===n.logarithmicDepthBuffer&&!!e.get("EXT_frag_depth"),c=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),l=t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS),h=t.getParameter(t.MAX_TEXTURE_SIZE),p=t.getParameter(t.MAX_CUBE_MAP_TEXTURE_SIZE),f=t.getParameter(t.MAX_VERTEX_ATTRIBS),d=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS),m=t.getParameter(t.MAX_VARYING_VECTORS),v=t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS),g=l>0,y=!!e.get("OES_texture_float");return{getMaxAnisotropy:r,getMaxPrecision:i,precision:a,logarithmicDepthBuffer:u,maxTextures:c,maxVertexTextures:l,maxTextureSize:h,maxCubemapSize:p,maxAttributes:f,maxVertexUniforms:d,maxVaryings:m,maxFragmentUniforms:v,vertexTextures:g,floatFragmentTextures:y,floatVertexTextures:g&&y}}function ue(t){var e={};return{get:function(n){if(void 0!==e[n])return e[n];var r;switch(n){case"WEBGL_depth_texture":r=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":r=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":r=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":r=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":r=t.getExtension("WEBGL_compressed_texture_etc1");break;default:r=t.getExtension(n)}return null===r&&console.warn("THREE.WebGLRenderer: "+n+" extension not supported."),e[n]=r,r}}}function ce(){function t(){c.value!==r&&(c.value=r,c.needsUpdate=i>0),n.numPlanes=i,n.numIntersection=0}function e(t,e,r,i){var o=null!==t?t.length:0,a=null;if(0!==o){if(a=c.value,!0!==i||null===a){var l=r+4*o,h=e.matrixWorldInverse;u.getNormalMatrix(h),(null===a||a.length=0){var l=o[u];if(void 0!==l){var h=l.normalized,p=l.itemSize,f=he.getAttributeProperties(l),d=f.__webglBuffer,m=f.type,v=f.bytesPerElement;if(l.isInterleavedBufferAttribute){var g=l.data,y=g.stride,b=l.offset;g&&g.isInstancedInterleavedBuffer?(te.enableAttributeAndDivisor(c,g.meshPerAttribute,i),void 0===n.maxInstancedCount&&(n.maxInstancedCount=g.meshPerAttribute*g.count)):te.enableAttribute(c),Kt.bindBuffer(Kt.ARRAY_BUFFER,d),Kt.vertexAttribPointer(c,p,m,h,y*v,(r*y+b)*v)}else l.isInstancedBufferAttribute?(te.enableAttributeAndDivisor(c,l.meshPerAttribute,i),void 0===n.maxInstancedCount&&(n.maxInstancedCount=l.meshPerAttribute*l.count)):te.enableAttribute(c),Kt.bindBuffer(Kt.ARRAY_BUFFER,d),Kt.vertexAttribPointer(c,p,m,h,0,r*p*v)}else if(void 0!==s){var x=s[u];if(void 0!==x)switch(x.length){case 2:Kt.vertexAttrib2fv(c,x);break;case 3:Kt.vertexAttrib3fv(c,x);break;case 4:Kt.vertexAttrib4fv(c,x);break;default:Kt.vertexAttrib1fv(c,x)}}}}te.disableUnusedAttributes()}function p(t,e){return Math.abs(e[0])-Math.abs(t[0])}function f(t,e){return t.object.renderOrder!==e.object.renderOrder?t.object.renderOrder-e.object.renderOrder:t.material.program&&e.material.program&&t.material.program!==e.material.program?t.material.program.id-e.material.program.id:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function d(t,e){return t.object.renderOrder!==e.object.renderOrder?t.object.renderOrder-e.object.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function m(t,e,n,r,i){var o,a;n.transparent?(o=rt,a=++it):(o=tt,a=++et);var s=o[a];void 0!==s?(s.id=t.id,s.object=t,s.geometry=e,s.material=n,s.z=Wt.z,s.group=i):(s={id:t.id,object:t,geometry:e,material:n,z:Wt.z,group:i},o.push(s))}function v(t){var e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Ht.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),y(Ht)}function g(t){return Ht.center.set(0,0,0),Ht.radius=.7071067811865476,Ht.applyMatrix4(t.matrixWorld),y(Ht)}function y(t){if(!It.intersectsSphere(t))return!1;var e=Dt.numPlanes;if(0===e)return!0;var n=lt.clippingPlanes,r=t.center,i=-t.radius,o=0;do{if(n[o].distanceToPoint(r)=0&&t.numSupportedMorphTargets++}if(t.morphNormals){t.numSupportedMorphNormals=0;for(var p=0;p=0&&t.numSupportedMorphNormals++}var f=r.__webglShader.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)&&!0!==t.clipping||(r.numClippingPlanes=Dt.numPlanes,r.numIntersection=Dt.numIntersection,f.clippingPlanes=Dt.uniform),r.fog=e,r.lightsHash=Yt.hash,t.lights&&(f.ambientLightColor.value=Yt.ambient,f.directionalLights.value=Yt.directional,f.spotLights.value=Yt.spot,f.rectAreaLights.value=Yt.rectArea,f.pointLights.value=Yt.point,f.hemisphereLights.value=Yt.hemi,f.directionalShadowMap.value=Yt.directionalShadowMap,f.directionalShadowMatrix.value=Yt.directionalShadowMatrix,f.spotShadowMap.value=Yt.spotShadowMap,f.spotShadowMatrix.value=Yt.spotShadowMatrix,f.pointShadowMap.value=Yt.pointShadowMap,f.pointShadowMatrix.value=Yt.pointShadowMatrix);var d=r.program.getUniforms(),m=X.seqWithValue(d.seq,f);r.uniformsList=m}function w(t){t.side===uo?te.disable(Kt.CULL_FACE):te.enable(Kt.CULL_FACE),te.setFlipSided(t.side===so),!0===t.transparent?te.setBlending(t.blending,t.blendEquation,t.blendSrc,t.blendDst,t.blendEquationAlpha,t.blendSrcAlpha,t.blendDstAlpha,t.premultipliedAlpha):te.setBlending(mo),te.setDepthFunc(t.depthFunc),te.setDepthTest(t.depthTest),te.setDepthWrite(t.depthWrite),te.setColorWrite(t.colorWrite),te.setPolygonOffset(t.polygonOffset,t.polygonOffsetFactor,t.polygonOffsetUnits)}function E(t,e,n,r){_t=0;var i=ne.get(n);if(jt&&(Vt||t!==gt)){var o=t===gt&&n.id===mt;Dt.setState(n.clippingPlanes,n.clipIntersection,n.clipShadows,t,i,o)}!1===n.needsUpdate&&(void 0===i.program?n.needsUpdate=!0:n.fog&&i.fog!==e?n.needsUpdate=!0:n.lights&&i.lightsHash!==Yt.hash?n.needsUpdate=!0:void 0===i.numClippingPlanes||i.numClippingPlanes===Dt.numPlanes&&i.numIntersection===Dt.numIntersection||(n.needsUpdate=!0)),n.needsUpdate&&(_(n,e,r),n.needsUpdate=!1);var a=!1,s=!1,u=!1,c=i.program,l=c.getUniforms(),h=i.__webglShader.uniforms;if(c.id!==ht&&(Kt.useProgram(c.program),ht=c.id,a=!0,s=!0,u=!0),n.id!==mt&&(mt=n.id,s=!0),a||t!==gt){if(l.set(Kt,t,"projectionMatrix"),Qt.logarithmicDepthBuffer&&l.setValue(Kt,"logDepthBufFC",2/(Math.log(t.far+1)/Math.LN2)),t!==gt&&(gt=t,s=!0,u=!0),n.isShaderMaterial||n.isMeshPhongMaterial||n.isMeshStandardMaterial||n.envMap){var p=l.map.cameraPosition;void 0!==p&&p.setValue(Kt,Wt.setFromMatrixPosition(t.matrixWorld))}(n.isMeshPhongMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial||n.skinning)&&l.setValue(Kt,"viewMatrix",t.matrixWorldInverse),l.set(Kt,lt,"toneMappingExposure"),l.set(Kt,lt,"toneMappingWhitePoint")}if(n.skinning){l.setOptional(Kt,r,"bindMatrix"),l.setOptional(Kt,r,"bindMatrixInverse");var f=r.skeleton;f&&(Qt.floatVertexTextures&&f.useVertexTexture?(l.set(Kt,f,"boneTexture"),l.set(Kt,f,"boneTextureWidth"),l.set(Kt,f,"boneTextureHeight")):l.setOptional(Kt,f,"boneMatrices"))}return s&&(n.lights&&D(h,u),e&&n.fog&&C(h,e),(n.isMeshBasicMaterial||n.isMeshLambertMaterial||n.isMeshPhongMaterial||n.isMeshStandardMaterial||n.isMeshNormalMaterial||n.isMeshDepthMaterial)&&M(h,n),n.isLineBasicMaterial?T(h,n):n.isLineDashedMaterial?(T(h,n),S(h,n)):n.isPointsMaterial?A(h,n):n.isMeshLambertMaterial?P(h,n):n.isMeshToonMaterial?L(h,n):n.isMeshPhongMaterial?R(h,n):n.isMeshPhysicalMaterial?I(h,n):n.isMeshStandardMaterial?O(h,n):n.isMeshDepthMaterial?n.displacementMap&&(h.displacementMap.value=n.displacementMap,h.displacementScale.value=n.displacementScale,h.displacementBias.value=n.displacementBias):n.isMeshNormalMaterial&&N(h,n),void 0!==h.ltcMat&&(h.ltcMat.value=THREE.UniformsLib.LTC_MAT_TEXTURE),void 0!==h.ltcMag&&(h.ltcMag.value=THREE.UniformsLib.LTC_MAG_TEXTURE),X.upload(Kt,i.uniformsList,h,lt)),l.set(Kt,r,"modelViewMatrix"),l.set(Kt,r,"normalMatrix"),l.setValue(Kt,"modelMatrix",r.matrixWorld),c}function M(t,e){t.opacity.value=e.opacity,t.diffuse.value=e.color,e.emissive&&t.emissive.value.copy(e.emissive).multiplyScalar(e.emissiveIntensity),t.map.value=e.map,t.specularMap.value=e.specularMap,t.alphaMap.value=e.alphaMap,e.lightMap&&(t.lightMap.value=e.lightMap,t.lightMapIntensity.value=e.lightMapIntensity),e.aoMap&&(t.aoMap.value=e.aoMap,t.aoMapIntensity.value=e.aoMapIntensity);var n;if(e.map?n=e.map:e.specularMap?n=e.specularMap:e.displacementMap?n=e.displacementMap:e.normalMap?n=e.normalMap:e.bumpMap?n=e.bumpMap:e.roughnessMap?n=e.roughnessMap:e.metalnessMap?n=e.metalnessMap:e.alphaMap?n=e.alphaMap:e.emissiveMap&&(n=e.emissiveMap),void 0!==n){n.isWebGLRenderTarget&&(n=n.texture);var r=n.offset,i=n.repeat;t.offsetRepeat.value.set(r.x,r.y,i.x,i.y)}t.envMap.value=e.envMap,t.flipEnvMap.value=e.envMap&&e.envMap.isCubeTexture?-1:1,t.reflectivity.value=e.reflectivity,t.refractionRatio.value=e.refractionRatio}function T(t,e){t.diffuse.value=e.color,t.opacity.value=e.opacity}function S(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}function A(t,e){if(t.diffuse.value=e.color,t.opacity.value=e.opacity,t.size.value=e.size*St,t.scale.value=.5*Tt,t.map.value=e.map,null!==e.map){var n=e.map.offset,r=e.map.repeat;t.offsetRepeat.value.set(n.x,n.y,r.x,r.y)}}function C(t,e){t.fogColor.value=e.color,e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)}function P(t,e){e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap)}function R(t,e){t.specular.value=e.specular,t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function L(t,e){R(t,e),e.gradientMap&&(t.gradientMap.value=e.gradientMap)}function O(t,e){t.roughness.value=e.roughness,t.metalness.value=e.metalness,e.roughnessMap&&(t.roughnessMap.value=e.roughnessMap),e.metalnessMap&&(t.metalnessMap.value=e.metalnessMap),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias),e.envMap&&(t.envMapIntensity.value=e.envMapIntensity)}function I(t,e){t.clearCoat.value=e.clearCoat,t.clearCoatRoughness.value=e.clearCoatRoughness,O(t,e)}function N(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function D(t,e){t.ambientLightColor.needsUpdate=e,t.directionalLights.needsUpdate=e,t.pointLights.needsUpdate=e,t.spotLights.needsUpdate=e,t.rectAreaLights.needsUpdate=e,t.hemisphereLights.needsUpdate=e}function k(t){for(var e=0,n=0,r=t.length;n=Qt.maxTextures&&console.warn("WebGLRenderer: trying to use "+t+" texture units while this GPU supports only "+Qt.maxTextures),_t+=1,t}function B(t){var e;if(t===sa)return Kt.REPEAT;if(t===ua)return Kt.CLAMP_TO_EDGE;if(t===ca)return Kt.MIRRORED_REPEAT;if(t===la)return Kt.NEAREST;if(t===ha)return Kt.NEAREST_MIPMAP_NEAREST;if(t===pa)return Kt.NEAREST_MIPMAP_LINEAR;if(t===fa)return Kt.LINEAR;if(t===da)return Kt.LINEAR_MIPMAP_NEAREST;if(t===ma)return Kt.LINEAR_MIPMAP_LINEAR;if(t===va)return Kt.UNSIGNED_BYTE;if(t===Ma)return Kt.UNSIGNED_SHORT_4_4_4_4;if(t===Ta)return Kt.UNSIGNED_SHORT_5_5_5_1;if(t===Sa)return Kt.UNSIGNED_SHORT_5_6_5;if(t===ga)return Kt.BYTE;if(t===ya)return Kt.SHORT;if(t===ba)return Kt.UNSIGNED_SHORT;if(t===xa)return Kt.INT;if(t===_a)return Kt.UNSIGNED_INT;if(t===wa)return Kt.FLOAT;if(t===Ea&&null!==(e=$t.get("OES_texture_half_float")))return e.HALF_FLOAT_OES;if(t===Ca)return Kt.ALPHA;if(t===Pa)return Kt.RGB;if(t===Ra)return Kt.RGBA;if(t===La)return Kt.LUMINANCE;if(t===Oa)return Kt.LUMINANCE_ALPHA;if(t===Na)return Kt.DEPTH_COMPONENT;if(t===Da)return Kt.DEPTH_STENCIL;if(t===_o)return Kt.FUNC_ADD;if(t===wo)return Kt.FUNC_SUBTRACT;if(t===Eo)return Kt.FUNC_REVERSE_SUBTRACT;if(t===So)return Kt.ZERO;if(t===Ao)return Kt.ONE;if(t===Co)return Kt.SRC_COLOR;if(t===Po)return Kt.ONE_MINUS_SRC_COLOR;if(t===Ro)return Kt.SRC_ALPHA;if(t===Lo)return Kt.ONE_MINUS_SRC_ALPHA;if(t===Oo)return Kt.DST_ALPHA;if(t===Io)return Kt.ONE_MINUS_DST_ALPHA;if(t===No)return Kt.DST_COLOR;if(t===Do)return Kt.ONE_MINUS_DST_COLOR;if(t===ko)return Kt.SRC_ALPHA_SATURATE;if((t===ka||t===Ua||t===Fa||t===Ba)&&null!==(e=$t.get("WEBGL_compressed_texture_s3tc"))){if(t===ka)return e.COMPRESSED_RGB_S3TC_DXT1_EXT;if(t===Ua)return e.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(t===Fa)return e.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(t===Ba)return e.COMPRESSED_RGBA_S3TC_DXT5_EXT}if((t===za||t===ja||t===Va||t===Ha)&&null!==(e=$t.get("WEBGL_compressed_texture_pvrtc"))){if(t===za)return e.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(t===ja)return e.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(t===Va)return e.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(t===Ha)return e.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(t===Ga&&null!==(e=$t.get("WEBGL_compressed_texture_etc1")))return e.COMPRESSED_RGB_ETC1_WEBGL;if((t===Mo||t===To)&&null!==(e=$t.get("EXT_blend_minmax"))){if(t===Mo)return e.MIN_EXT;if(t===To)return e.MAX_EXT}return t===Aa&&null!==(e=$t.get("WEBGL_depth_texture"))?e.UNSIGNED_INT_24_8_WEBGL:0}console.log("THREE.WebGLRenderer",Zi),t=t||{};var z=void 0!==t.canvas?t.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),j=void 0!==t.context?t.context:null,V=void 0!==t.alpha&&t.alpha,H=void 0===t.depth||t.depth,G=void 0===t.stencil||t.stencil,W=void 0!==t.antialias&&t.antialias,Y=void 0===t.premultipliedAlpha||t.premultipliedAlpha,Z=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,$=[],tt=[],et=-1,rt=[],it=-1,st=new Float32Array(8),ut=[],ct=[];this.domElement=z,this.context=null,this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.gammaInput=!1,this.gammaOutput=!1,this.physicallyCorrectLights=!1,this.toneMapping=Zo,this.toneMappingExposure=1,this.toneMappingWhitePoint=1,this.maxMorphTargets=8,this.maxMorphNormals=4;var lt=this,ht=null,pt=null,ft=null,mt=-1,vt="",gt=null,yt=new a,bt=null,xt=new a,_t=0,wt=new q(0),Et=0,Mt=z.width,Tt=z.height,St=1,At=new a(0,0,Mt,Tt),Ct=!1,Lt=new a(0,0,Mt,Tt),It=new ot,Dt=new ce,jt=!1,Vt=!1,Ht=new nt,Gt=new h,Wt=new l,Xt=new h,qt=new h,Yt={hash:"",ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],shadows:[]},Zt={calls:0,vertices:0,faces:0,points:0};this.info={render:Zt,memory:{geometries:0,textures:0},programs:null};var Kt;try{var Jt={alpha:V,depth:H,stencil:G,antialias:W,premultipliedAlpha:Y,preserveDrawingBuffer:Z};if(null===(Kt=j||z.getContext("webgl",Jt)||z.getContext("experimental-webgl",Jt)))throw null!==z.getContext("webgl")?"Error creating WebGL context with your selected attributes.":"Error creating WebGL context.";void 0===Kt.getShaderPrecisionFormat&&(Kt.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}}),z.addEventListener("webglcontextlost",i,!1)}catch(t){console.error("THREE.WebGLRenderer: "+t)}var $t=new ue(Kt);$t.get("WEBGL_depth_texture"),$t.get("OES_texture_float"),$t.get("OES_texture_float_linear"),$t.get("OES_texture_half_float"),$t.get("OES_texture_half_float_linear"),$t.get("OES_standard_derivatives"),$t.get("ANGLE_instanced_arrays"),$t.get("OES_element_index_uint")&&(Pt.MaxIndex=4294967296);var Qt=new se(Kt,$t,t),te=new ae(Kt,$t,B),ne=new oe,le=new ie(Kt,$t,te,ne,Qt,B,this.info),he=new re(Kt,ne,this.info),pe=new ee(this,Qt),fe=new zt;this.info.programs=pe.programs;var de,me,ve,ge,ye=new Bt(Kt,$t,Zt),be=new Ft(Kt,$t,Zt);n(),this.context=Kt,this.capabilities=Qt,this.extensions=$t,this.properties=ne,this.state=te;var xe=new at(this,Yt,he,Qt);this.shadowMap=xe;var _e=new J(this,ut),we=new K(this,ct);this.getContext=function(){return Kt},this.getContextAttributes=function(){return Kt.getContextAttributes()},this.forceContextLoss=function(){$t.get("WEBGL_lose_context").loseContext()},this.getMaxAnisotropy=function(){return Qt.getMaxAnisotropy()},this.getPrecision=function(){return Qt.precision},this.getPixelRatio=function(){return St},this.setPixelRatio=function(t){void 0!==t&&(St=t,this.setSize(Lt.z,Lt.w,!1))},this.getSize=function(){return{width:Mt,height:Tt}},this.setSize=function(t,e,n){Mt=t,Tt=e,z.width=t*St,z.height=e*St,!1!==n&&(z.style.width=t+"px",z.style.height=e+"px"),this.setViewport(0,0,t,e)},this.setViewport=function(t,e,n,r){te.viewport(Lt.set(t,e,n,r))},this.setScissor=function(t,e,n,r){te.scissor(At.set(t,e,n,r))},this.setScissorTest=function(t){te.setScissorTest(Ct=t)},this.getClearColor=function(){return wt},this.setClearColor=function(t,e){wt.set(t),Et=void 0!==e?e:1,te.buffers.color.setClear(wt.r,wt.g,wt.b,Et,Y)},this.getClearAlpha=function(){return Et},this.setClearAlpha=function(t){Et=t,te.buffers.color.setClear(wt.r,wt.g,wt.b,Et,Y)},this.clear=function(t,e,n){var r=0;(void 0===t||t)&&(r|=Kt.COLOR_BUFFER_BIT),(void 0===e||e)&&(r|=Kt.DEPTH_BUFFER_BIT),(void 0===n||n)&&(r|=Kt.STENCIL_BUFFER_BIT),Kt.clear(r)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.clearTarget=function(t,e,n,r){this.setRenderTarget(t),this.clear(e,n,r)},this.resetGLState=r,this.dispose=function(){rt=[],it=-1,tt=[],et=-1,z.removeEventListener("webglcontextlost",i,!1)},this.renderBufferImmediate=function(t,e,n){te.initAttributes();var r=ne.get(t);t.hasPositions&&!r.position&&(r.position=Kt.createBuffer()),t.hasNormals&&!r.normal&&(r.normal=Kt.createBuffer()),t.hasUvs&&!r.uv&&(r.uv=Kt.createBuffer()),t.hasColors&&!r.color&&(r.color=Kt.createBuffer());var i=e.getAttributes();if(t.hasPositions&&(Kt.bindBuffer(Kt.ARRAY_BUFFER,r.position),Kt.bufferData(Kt.ARRAY_BUFFER,t.positionArray,Kt.DYNAMIC_DRAW),te.enableAttribute(i.position),Kt.vertexAttribPointer(i.position,3,Kt.FLOAT,!1,0,0)),t.hasNormals){if(Kt.bindBuffer(Kt.ARRAY_BUFFER,r.normal),!n.isMeshPhongMaterial&&!n.isMeshStandardMaterial&&!n.isMeshNormalMaterial&&n.shading===co)for(var o=0,a=3*t.count;o8&&(f.length=8);for(var g=r.morphAttributes,d=0,m=f.length;d0&&M.renderInstances(r,R,O):M.render(R,O)}},this.render=function(t,e,n,r){if(void 0!==e&&!0!==e.isCamera)return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");vt="",mt=-1,gt=null,!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),e.matrixWorldInverse.getInverse(e.matrixWorld),Gt.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),It.setFromMatrix(Gt),$.length=0,et=-1,it=-1,ut.length=0,ct.length=0,Vt=this.localClippingEnabled,jt=Dt.init(this.clippingPlanes,Vt,e),b(t,e),tt.length=et+1,rt.length=it+1,!0===lt.sortObjects&&(tt.sort(f),rt.sort(d)),jt&&Dt.beginShadows(),k($),xe.render(t,e),U($,e),jt&&Dt.endShadows(),Zt.calls=0,Zt.vertices=0,Zt.faces=0,Zt.points=0,void 0===n&&(n=null),this.setRenderTarget(n);var i=t.background;if(null===i?te.buffers.color.setClear(wt.r,wt.g,wt.b,Et,Y):i&&i.isColor&&(te.buffers.color.setClear(i.r,i.g,i.b,1,Y),r=!0),(this.autoClear||r)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil),i&&i.isCubeTexture?(void 0===ve&&(ve=new kt,ge=new Rt(new Ot(5,5,5),new Q({uniforms:Ms.cube.uniforms,vertexShader:Ms.cube.vertexShader,fragmentShader:Ms.cube.fragmentShader,side:so,depthTest:!1,depthWrite:!1,fog:!1}))),ve.projectionMatrix.copy(e.projectionMatrix),ve.matrixWorld.extractRotation(e.matrixWorld),ve.matrixWorldInverse.getInverse(ve.matrixWorld),ge.material.uniforms.tCube.value=i,ge.modelViewMatrix.multiplyMatrices(ve.matrixWorldInverse,ge.matrixWorld),he.update(ge),lt.renderBufferDirect(ve,null,ge.geometry,ge.material,ge,null)):i&&i.isTexture&&(void 0===de&&(de=new Ut(-1,1,1,-1,0,1),me=new Rt(new Nt(2,2),new dt({depthTest:!1,depthWrite:!1,fog:!1}))),me.material.map=i,he.update(me),lt.renderBufferDirect(de,null,me.geometry,me.material,me,null)),t.overrideMaterial){var o=t.overrideMaterial;x(tt,t,e,o),x(rt,t,e,o)}else te.setBlending(mo),x(tt,t,e),x(rt,t,e);_e.render(t,e),we.render(t,e,xt),n&&le.updateRenderTargetMipmap(n),te.setDepthTest(!0),te.setDepthWrite(!0),te.setColorWrite(!0)},this.setFaceCulling=function(t,e){te.setCullFace(t),te.setFlipSided(e===eo)},this.allocTextureUnit=F,this.setTexture2D=function(){var t=!1;return function(e,n){e&&e.isWebGLRenderTarget&&(t||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),t=!0),e=e.texture),le.setTexture2D(e,n)}}(),this.setTexture=function(){var t=!1;return function(e,n){t||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),t=!0),le.setTexture2D(e,n)}}(),this.setTextureCube=function(){var t=!1;return function(e,n){e&&e.isWebGLRenderTargetCube&&(t||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),t=!0),e=e.texture),e&&e.isCubeTexture||Array.isArray(e.image)&&6===e.image.length?le.setTextureCube(e,n):le.setTextureCubeDynamic(e,n)}}(),this.getCurrentRenderTarget=function(){return pt},this.setRenderTarget=function(t){pt=t,t&&void 0===ne.get(t).__webglFramebuffer&&le.setupRenderTarget(t);var e,n=t&&t.isWebGLRenderTargetCube;if(t){var r=ne.get(t);e=n?r.__webglFramebuffer[t.activeCubeFace]:r.__webglFramebuffer,yt.copy(t.scissor),bt=t.scissorTest,xt.copy(t.viewport)}else e=null,yt.copy(At).multiplyScalar(St),bt=Ct,xt.copy(Lt).multiplyScalar(St);if(ft!==e&&(Kt.bindFramebuffer(Kt.FRAMEBUFFER,e),ft=e),te.scissor(yt),te.setScissorTest(bt),te.viewport(xt),n){var i=ne.get(t.texture);Kt.framebufferTexture2D(Kt.FRAMEBUFFER,Kt.COLOR_ATTACHMENT0,Kt.TEXTURE_CUBE_MAP_POSITIVE_X+t.activeCubeFace,i.__webglTexture,t.activeMipMapLevel)}},this.readRenderTargetPixels=function(t,e,n,r,i,o){if(!1===(t&&t.isWebGLRenderTarget))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");var a=ne.get(t).__webglFramebuffer;if(a){var s=!1;a!==ft&&(Kt.bindFramebuffer(Kt.FRAMEBUFFER,a),s=!0);try{var u=t.texture,c=u.format,l=u.type;if(c!==Ra&&B(c)!==Kt.getParameter(Kt.IMPLEMENTATION_COLOR_READ_FORMAT))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!(l===va||B(l)===Kt.getParameter(Kt.IMPLEMENTATION_COLOR_READ_TYPE)||l===wa&&($t.get("OES_texture_float")||$t.get("WEBGL_color_buffer_float"))||l===Ea&&$t.get("EXT_color_buffer_half_float")))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");Kt.checkFramebufferStatus(Kt.FRAMEBUFFER)===Kt.FRAMEBUFFER_COMPLETE?e>=0&&e<=t.width-r&&n>=0&&n<=t.height-i&&Kt.readPixels(e,n,r,i,B(c),B(l),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&Kt.bindFramebuffer(Kt.FRAMEBUFFER,ft)}}}}function he(t,e){this.name="",this.color=new q(t),this.density=void 0!==e?e:25e-5}function pe(t,e,n){this.name="",this.color=new q(t),this.near=void 0!==e?e:1,this.far=void 0!==n?n:1e3}function fe(){lt.call(this),this.type="Scene",this.background=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0}function de(t,e,n,r,i){lt.call(this),this.lensFlares=[],this.positionScreen=new l,this.customUpdateCallback=void 0,void 0!==t&&this.add(t,e,n,r,i)}function me(t){$.call(this),this.type="SpriteMaterial",this.color=new q(16777215),this.map=null,this.rotation=0,this.fog=!1,this.lights=!1,this.setValues(t)}function ve(t){lt.call(this),this.type="Sprite",this.material=void 0!==t?t:new me}function ge(){lt.call(this),this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function ye(t,e,n){if(this.useVertexTexture=void 0===n||n,this.identityMatrix=new h,t=t||[],this.bones=t.slice(0),this.useVertexTexture){var r=Math.sqrt(4*this.bones.length);r=fs.nextPowerOfTwo(Math.ceil(r)),r=Math.max(r,4),this.boneTextureWidth=r,this.boneTextureHeight=r,this.boneMatrices=new Float32Array(this.boneTextureWidth*this.boneTextureHeight*4),this.boneTexture=new Y(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,Ra,wa)}else this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===e)this.calculateInverses();else if(this.bones.length===e.length)this.boneInverses=e.slice(0);else{console.warn("THREE.Skeleton bonInverses is the wrong length."),this.boneInverses=[];for(var i=0,o=this.bones.length;i=t.HAVE_CURRENT_DATA&&(h.needsUpdate=!0)}o.call(this,t,e,n,r,i,a,s,u,c),this.generateMipmaps=!1;var h=this;l()}function Ce(t,e,n,r,i,a,s,u,c,l,h,p){o.call(this,null,a,s,u,c,l,r,i,h,p),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function Pe(t,e,n,r,i,a,s,u,c){o.call(this,t,e,n,r,i,a,s,u,c),this.needsUpdate=!0}function Re(t,e,n,r,i,a,s,u,c,l){if((l=void 0!==l?l:Na)!==Na&&l!==Da)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&l===Na&&(n=ba),void 0===n&&l===Da&&(n=Aa),o.call(this,null,r,i,a,s,u,l,n,c),this.image={width:t,height:e},this.magFilter=void 0!==s?s:la,this.minFilter=void 0!==u?u:la,this.flipY=!1,this.generateMipmaps=!1}function Le(t){function e(t,e){return t-e}Pt.call(this),this.type="WireframeGeometry";var n,r,i,o,a,s,u,c,h=[],p=[0,0],f={},d=["a","b","c"];if(t&&t.isGeometry){var m=t.faces;for(n=0,i=m.length;n.9&&o<.1&&(e<.2&&(m[t+0]+=1),n<.2&&(m[t+2]+=1),r<.2&&(m[t+4]+=1))}}function s(t){d.push(t.x,t.y,t.z)}function u(e,n){var r=3*e;n.x=t[r+0],n.y=t[r+1],n.z=t[r+2]}function c(){for(var t=new l,e=new l,n=new l,r=new l,o=new i,a=new i,s=new i,u=0,c=0;u0)&&m.push(w,E,T),(u!==n-1||c0&&c(!0),e>0&&c(!1)),this.setIndex(p),this.addAttribute("position",new Et(f,3)),this.addAttribute("normal",new Et(d,3)),this.addAttribute("uv",new Et(m,2))}function ln(t,e,n,r,i,o,a){un.call(this,0,t,e,n,r,i,o,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:r,openEnded:i,thetaStart:o,thetaLength:a}}function hn(t,e,n,r,i,o,a){cn.call(this,0,t,e,n,r,i,o,a),this.type="ConeBufferGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:r,openEnded:i,thetaStart:o,thetaLength:a}}function pn(t,e,n,r){Ct.call(this),this.type="CircleGeometry",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:r},this.fromBufferGeometry(new fn(t,e,n,r))}function fn(t,e,n,r){Pt.call(this),this.type="CircleBufferGeometry",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:r},t=t||50,e=void 0!==e?Math.max(3,e):8,n=void 0!==n?n:0,r=void 0!==r?r:2*Math.PI;var o,a,s=[],u=[],c=[],h=[],p=new l,f=new i;for(u.push(0,0,0),c.push(0,0,1),h.push(.5,.5),a=0,o=3;a<=e;a++,o+=3){var d=n+a/e*r;p.x=t*Math.cos(d),p.y=t*Math.sin(d),u.push(p.x,p.y,p.z),c.push(0,0,1),f.x=(u[o]/t+1)/2,f.y=(u[o+1]/t+1)/2,h.push(f.x,f.y)}for(o=1;o<=e;o++)s.push(o,o+1,0);this.setIndex(s),this.addAttribute("position",new Et(u,3)),this.addAttribute("normal",new Et(c,3)),this.addAttribute("uv",new Et(h,2))}function dn(){Q.call(this,{uniforms:xs.merge([Es.lights,{opacity:{value:1}}]),vertexShader:_s.shadow_vert,fragmentShader:_s.shadow_frag}),this.lights=!0,this.transparent=!0,Object.defineProperties(this,{opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(t){this.uniforms.opacity.value=t}}})}function mn(t){Q.call(this,t),this.type="RawShaderMaterial"}function vn(t){this.uuid=fs.generateUUID(),this.type="MultiMaterial",this.materials=Array.isArray(t)?t:[],this.visible=!0}function gn(t){$.call(this),this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new q(16777215),this.roughness=.5,this.metalness=.5,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new q(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new i(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function yn(t){gn.call(this),this.defines={PHYSICAL:""},this.type="MeshPhysicalMaterial",this.reflectivity=.5,this.clearCoat=0,this.clearCoatRoughness=0,this.setValues(t)}function bn(t){$.call(this),this.type="MeshPhongMaterial",this.color=new q(16777215),this.specular=new q(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new q(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new i(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Wo,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function xn(t){bn.call(this),this.defines={TOON:""},this.type="MeshToonMaterial",this.gradientMap=null,this.setValues(t)}function _n(t){$.call(this,t),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new i(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function wn(t){$.call(this),this.type="MeshLambertMaterial",this.color=new q(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new q(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Wo,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function En(t){$.call(this),this.type="LineDashedMaterial",this.color=new q(16777215),this.linewidth=1,this.scale=1,this.dashSize=3,this.gapSize=1,this.lights=!1,this.setValues(t)}function Mn(t,e,n){var r=this,i=!1,o=0,a=0;this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){a++,!1===i&&void 0!==r.onStart&&r.onStart(t,o,a),i=!0},this.itemEnd=function(t){o++,void 0!==r.onProgress&&r.onProgress(t,o,a),o===a&&(i=!1,void 0!==r.onLoad&&r.onLoad())},this.itemError=function(t){void 0!==r.onError&&r.onError(t)}}function Tn(t){this.manager=void 0!==t?t:Is}function Sn(t){this.manager=void 0!==t?t:Is,this._parser=null}function An(t){this.manager=void 0!==t?t:Is,this._parser=null}function Cn(t){this.manager=void 0!==t?t:Is}function Pn(t){this.manager=void 0!==t?t:Is}function Rn(t){this.manager=void 0!==t?t:Is}function Ln(t,e){lt.call(this),this.type="Light",this.color=new q(t),this.intensity=void 0!==e?e:1,this.receiveShadow=void 0}function On(t,e,n){Ln.call(this,t,n),this.type="HemisphereLight",this.castShadow=void 0,this.position.copy(lt.DefaultUp),this.updateMatrix(),this.groundColor=new q(e)}function In(t){this.camera=t,this.bias=0,this.radius=1,this.mapSize=new i(512,512),this.map=null,this.matrix=new h}function Nn(){In.call(this,new kt(50,1,.5,500))}function Dn(t,e,n,r,i,o){Ln.call(this,t,e),this.type="SpotLight",this.position.copy(lt.DefaultUp),this.updateMatrix(),this.target=new lt,Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(t){this.intensity=t/Math.PI}}),this.distance=void 0!==n?n:0,this.angle=void 0!==r?r:Math.PI/3,this.penumbra=void 0!==i?i:0,this.decay=void 0!==o?o:1,this.shadow=new Nn}function kn(t,e,n,r){Ln.call(this,t,e),this.type="PointLight",Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(t){this.intensity=t/(4*Math.PI)}}),this.distance=void 0!==n?n:0,this.decay=void 0!==r?r:1,this.shadow=new In(new kt(90,1,.5,500))}function Un(){In.call(this,new Ut(-5,5,5,-5,.5,500))}function Fn(t,e){Ln.call(this,t,e),this.type="DirectionalLight",this.position.copy(lt.DefaultUp),this.updateMatrix(),this.target=new lt,this.shadow=new Un}function Bn(t,e){Ln.call(this,t,e),this.type="AmbientLight",this.castShadow=void 0}function zn(t,e,n,r){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==r?r:new e.constructor(n),this.sampleValues=e,this.valueSize=n}function jn(t,e,n,r){zn.call(this,t,e,n,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0}function Vn(t,e,n,r){zn.call(this,t,e,n,r)}function Hn(t,e,n,r){zn.call(this,t,e,n,r)}function Gn(t,e,n,r){if(void 0===t)throw new Error("track name is undefined");if(void 0===e||0===e.length)throw new Error("no keyframes in track named "+t);this.name=t,this.times=Ns.convertArray(e,this.TimeBufferType),this.values=Ns.convertArray(n,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation),this.validate(),this.optimize()}function Wn(t,e,n,r){Gn.call(this,t,e,n,r)}function Xn(t,e,n,r){zn.call(this,t,e,n,r)}function qn(t,e,n,r){Gn.call(this,t,e,n,r)}function Yn(t,e,n,r){Gn.call(this,t,e,n,r)}function Zn(t,e,n,r){Gn.call(this,t,e,n,r)}function Kn(t,e,n){Gn.call(this,t,e,n)}function Jn(t,e,n,r){Gn.call(this,t,e,n,r)}function $n(t,e,n,r){Gn.apply(this,arguments)}function Qn(t,e,n){this.name=t,this.tracks=n,this.duration=void 0!==e?e:-1,this.uuid=fs.generateUUID(),this.duration<0&&this.resetDuration(),this.optimize()}function tr(t){this.manager=void 0!==t?t:Is,this.textures={}}function er(t){this.manager=void 0!==t?t:Is}function nr(){this.onLoadStart=function(){},this.onLoadProgress=function(){},this.onLoadComplete=function(){}}function rr(t){"boolean"==typeof t&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),t=void 0),this.manager=void 0!==t?t:Is,this.withCredentials=!1}function ir(t){this.manager=void 0!==t?t:Is,this.texturePath=""}function or(t,e,n,r,i){var o=.5*(r-e),a=.5*(i-n),s=t*t;return(2*n-2*r+o+a)*(t*s)+(-3*n+3*r-2*o-a)*s+o*t+n}function ar(t,e){var n=1-t;return n*n*e}function sr(t,e){return 2*(1-t)*t*e}function ur(t,e){return t*t*e}function cr(t,e,n,r){return ar(t,e)+sr(t,n)+ur(t,r)}function lr(t,e){var n=1-t;return n*n*n*e}function hr(t,e){var n=1-t;return 3*n*n*t*e}function pr(t,e){return 3*(1-t)*t*t*e}function fr(t,e){return t*t*t*e}function dr(t,e,n,r,i){return lr(t,e)+hr(t,n)+pr(t,r)+fr(t,i)}function mr(){}function vr(t,e){this.v1=t,this.v2=e}function gr(){this.curves=[],this.autoClose=!1}function yr(t,e,n,r,i,o,a,s){this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=r,this.aStartAngle=i,this.aEndAngle=o,this.aClockwise=a,this.aRotation=s||0}function br(t){this.points=void 0===t?[]:t}function xr(t,e,n,r){this.v0=t,this.v1=e,this.v2=n,this.v3=r}function _r(t,e,n){this.v0=t,this.v1=e,this.v2=n}function wr(t){gr.call(this),this.currentPoint=new i,t&&this.fromPoints(t)}function Er(){wr.apply(this,arguments),this.holes=[]}function Mr(){this.subPaths=[],this.currentPath=null}function Tr(t){this.data=t}function Sr(t){this.manager=void 0!==t?t:Is}function Ar(t){this.manager=void 0!==t?t:Is}function Cr(t,e,n,r){Ln.call(this,t,e),this.type="RectAreaLight",this.position.set(0,1,0),this.updateMatrix(),this.width=void 0!==n?n:10,this.height=void 0!==r?r:10}function Pr(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new kt,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new kt,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1}function Rr(t,e,n){lt.call(this),this.type="CubeCamera";var r=new kt(90,1,t,e);r.up.set(0,-1,0),r.lookAt(new l(1,0,0)),this.add(r);var i=new kt(90,1,t,e);i.up.set(0,-1,0),i.lookAt(new l(-1,0,0)),this.add(i);var o=new kt(90,1,t,e);o.up.set(0,0,1),o.lookAt(new l(0,1,0)),this.add(o);var a=new kt(90,1,t,e);a.up.set(0,0,-1),a.lookAt(new l(0,-1,0)),this.add(a);var s=new kt(90,1,t,e);s.up.set(0,-1,0),s.lookAt(new l(0,0,1)),this.add(s);var c=new kt(90,1,t,e);c.up.set(0,-1,0),c.lookAt(new l(0,0,-1)),this.add(c);var h={format:Pa,magFilter:fa,minFilter:fa};this.renderTarget=new u(n,n,h),this.updateCubeMap=function(t,e){null===this.parent&&this.updateMatrixWorld();var n=this.renderTarget,u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,n.activeCubeFace=0,t.render(e,r,n),n.activeCubeFace=1,t.render(e,i,n),n.activeCubeFace=2,t.render(e,o,n),n.activeCubeFace=3,t.render(e,a,n),n.activeCubeFace=4,t.render(e,s,n),n.texture.generateMipmaps=u,n.activeCubeFace=5,t.render(e,c,n),t.setRenderTarget(null)}}function Lr(){lt.call(this),this.type="AudioListener",this.context=Fs.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null}function Or(t){lt.call(this),this.type="Audio",this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.loop=!1,this.startTime=0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.sourceType="empty",this.filters=[]}function Ir(t){Or.call(this,t),this.panner=this.context.createPanner(),this.panner.connect(this.gain)}function Nr(t,e){this.analyser=t.context.createAnalyser(),this.analyser.fftSize=void 0!==e?e:2048,this.data=new Uint8Array(this.analyser.frequencyBinCount),t.getOutput().connect(this.analyser)}function Dr(t,e,n){this.binding=t,this.valueSize=n;var r,i=Float64Array;switch(e){case"quaternion":r=this._slerp;break;case"string":case"bool":i=Array,r=this._select;break;default:r=this._lerp}this.buffer=new i(4*n),this._mixBufferRegion=r,this.cumulativeWeight=0,this.useCount=0,this.referenceCount=0}function kr(t,e,n){this.path=e,this.parsedPath=n||kr.parseTrackName(e),this.node=kr.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}function Ur(t){this.uuid=fs.generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;var e={};this._indicesByUUID=e;for(var n=0,r=arguments.length;n!==r;++n)e[arguments[n].uuid]=n;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};var i=this;this.stats={objects:{get total(){return i._objects.length},get inUse(){return this.total-i.nCachedObjects_}},get bindingsPerObject(){return i._bindings.length}}}function Fr(t,e,n){this._mixer=t,this._clip=e,this._localRoot=n||null;for(var r=e.tracks,i=r.length,o=new Array(i),a={endingStart:Ja,endingEnd:Ja},s=0;s!==i;++s){var u=r[s].createInterpolant(null);o[s]=u,u.settings=a}this._interpolantSettings=a,this._interpolants=o,this._propertyBindings=new Array(i),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=Xa,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}function Br(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}function zr(t){"string"==typeof t&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),t=arguments[1]),this.value=t}function jr(){Pt.call(this),this.type="InstancedBufferGeometry",this.maxInstancedCount=void 0}function Vr(t,e,n,r){this.uuid=fs.generateUUID(),this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===r}function Hr(t,e){this.uuid=fs.generateUUID(),this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.onUploadCallback=function(){},this.version=0}function Gr(t,e,n){Hr.call(this,t,e),this.meshPerAttribute=n||1}function Wr(t,e,n){mt.call(this,t,e),this.meshPerAttribute=n||1}function Xr(t,e,n,r){this.ray=new st(t,e),this.near=n||0,this.far=r||1/0,this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}},Object.defineProperties(this.params,{PointCloud:{get:function(){return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."),this.Points}}})}function qr(t,e){return t.distance-e.distance}function Yr(t,e,n,r){if(!1!==t.visible&&(t.raycast(e,n),!0===r))for(var i=t.children,o=0,a=i.length;o0?1:+t}),void 0===Function.prototype.name&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&function(){Object.assign=function(t){if(void 0===t||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;n>=4,n[i]=e[19===i?3&t|8:t]);return n.join("")}}(),clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,r,i){return r+(t-e)*(i-r)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},degToRad:function(t){return t*fs.DEG2RAD},radToDeg:function(t){return t*fs.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},nearestPowerOfTwo:function(t){return Math.pow(2,Math.round(Math.log(t)/Math.LN2))},nextPowerOfTwo:function(t){return t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,++t}};i.prototype={constructor:i,isVector2:!0,get width(){return this.x},set width(t){this.x=t},get height(){return this.y},set height(t){this.y=t},set:function(t,e){return this.x=t,this.y=e,this},setScalar:function(t){return this.x=t,this.y=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(t){return this.x=t.x,this.y=t.y,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)},addScalar:function(t){return this.x+=t,this.y+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)},subScalar:function(t){return this.x-=t,this.y-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this},multiply:function(t){return this.x*=t.x,this.y*=t.y,this},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t):(this.x=0,this.y=0),this},divide:function(t){return this.x/=t.x,this.y/=t.y,this},divideScalar:function(t){return this.multiplyScalar(1/t)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this},clampScalar:function(){var t,e;return function(n,r){return void 0===t&&(t=new i,e=new i),t.set(n,n),e.set(r,r),this.clamp(t,e)}}(),clampLength:function(t,e){var n=this.length();return this.multiplyScalar(Math.max(t,Math.min(e,n))/n)},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(t){return this.x*t.x+this.y*t.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,n=this.y-t.y;return e*e+n*n},distanceToManhattan:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this},rotateAround:function(t,e){var n=Math.cos(e),r=Math.sin(e),i=this.x-t.x,o=this.y-t.y;return this.x=i*n-o*r+t.x,this.y=i*r+o*n+t.y,this}};var ds=0;o.DEFAULT_IMAGE=void 0,o.DEFAULT_MAPPING=Qo,o.prototype={constructor:o,isTexture:!0,set needsUpdate(t){!0===t&&this.version++},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){if(void 0!==t.textures[this.uuid])return t.textures[this.uuid];var e={metadata:{version:4.4,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var n=this.image;void 0===n.uuid&&(n.uuid=fs.generateUUID()),void 0===t.images[n.uuid]&&(t.images[n.uuid]={uuid:n.uuid,url:function(t){var e;return void 0!==t.toDataURL?e=t:(e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),e.width=t.width,e.height=t.height,e.getContext("2d").drawImage(t,0,0,t.width,t.height)),e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}(n)}),e.image=n.uuid}return t.textures[this.uuid]=e,e},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(t){if(this.mapping===Qo){if(t.multiply(this.repeat),t.add(this.offset),t.x<0||t.x>1)switch(this.wrapS){case sa:t.x=t.x-Math.floor(t.x);break;case ua:t.x=t.x<0?0:1;break;case ca:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case sa:t.y=t.y-Math.floor(t.y);break;case ua:t.y=t.y<0?0:1;break;case ca:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}this.flipY&&(t.y=1-t.y)}}},Object.assign(o.prototype,r.prototype),a.prototype={constructor:a,isVector4:!0,set:function(t,e,n,r){return this.x=t,this.y=e,this.z=n,this.w=r,this},setScalar:function(t){return this.x=t,this.y=t,this.z=t,this.w=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setW:function(t){return this.w=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t,this.z*=t,this.w*=t):(this.x=0,this.y=0,this.z=0,this.w=0),this},applyMatrix4:function(t){var e=this.x,n=this.y,r=this.z,i=this.w,o=t.elements;return this.x=o[0]*e+o[4]*n+o[8]*r+o[12]*i,this.y=o[1]*e+o[5]*n+o[9]*r+o[13]*i,this.z=o[2]*e+o[6]*n+o[10]*r+o[14]*i,this.w=o[3]*e+o[7]*n+o[11]*r+o[15]*i,this},divideScalar:function(t){return this.multiplyScalar(1/t)},setAxisAngleFromQuaternion:function(t){this.w=2*Math.acos(t.w);var e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this},setAxisAngleFromRotationMatrix:function(t){var e,n,r,i,o=t.elements,a=o[0],s=o[4],u=o[8],c=o[1],l=o[5],h=o[9],p=o[2],f=o[6],d=o[10];if(Math.abs(s-c)<.01&&Math.abs(u-p)<.01&&Math.abs(h-f)<.01){if(Math.abs(s+c)<.1&&Math.abs(u+p)<.1&&Math.abs(h+f)<.1&&Math.abs(a+l+d-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;var m=(a+1)/2,v=(l+1)/2,g=(d+1)/2,y=(s+c)/4,b=(u+p)/4,x=(h+f)/4;return m>v&&m>g?m<.01?(n=0,r=.707106781,i=.707106781):(n=Math.sqrt(m),r=y/n,i=b/n):v>g?v<.01?(n=.707106781,r=0,i=.707106781):(r=Math.sqrt(v),n=y/r,i=x/r):g<.01?(n=.707106781,r=.707106781,i=0):(i=Math.sqrt(g),n=b/i,r=x/i),this.set(n,r,i,e),this}var _=Math.sqrt((f-h)*(f-h)+(u-p)*(u-p)+(c-s)*(c-s));return Math.abs(_)<.001&&(_=1),this.x=(f-h)/_,this.y=(u-p)/_,this.z=(c-s)/_,this.w=Math.acos((a+l+d-1)/2),this},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this},clampScalar:function(){var t,e;return function(n,r){return void 0===t&&(t=new a,e=new a),t.set(n,n,n,n),e.set(r,r,r,r),this.clamp(t,e)}}(),floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}},s.prototype={constructor:s,isWebGLRenderTarget:!0,setSize:function(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this},dispose:function(){this.dispatchEvent({type:"dispose"})}},Object.assign(s.prototype,r.prototype),u.prototype=Object.create(s.prototype),u.prototype.constructor=u,u.prototype.isWebGLRenderTargetCube=!0,c.prototype={constructor:c,get x(){return this._x},set x(t){this._x=t,this.onChangeCallback()},get y(){return this._y},set y(t){this._y=t,this.onChangeCallback()},get z(){return this._z},set z(t){this._z=t,this.onChangeCallback()},get w(){return this._w},set w(t){this._w=t,this.onChangeCallback()},set:function(t,e,n,r){return this._x=t,this._y=e,this._z=n,this._w=r,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this.onChangeCallback(),this},setFromEuler:function(t,e){if(!1===(t&&t.isEuler))throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var n=Math.cos(t._x/2),r=Math.cos(t._y/2),i=Math.cos(t._z/2),o=Math.sin(t._x/2),a=Math.sin(t._y/2),s=Math.sin(t._z/2),u=t.order;return"XYZ"===u?(this._x=o*r*i+n*a*s,this._y=n*a*i-o*r*s,this._z=n*r*s+o*a*i,this._w=n*r*i-o*a*s):"YXZ"===u?(this._x=o*r*i+n*a*s,this._y=n*a*i-o*r*s,this._z=n*r*s-o*a*i,this._w=n*r*i+o*a*s):"ZXY"===u?(this._x=o*r*i-n*a*s,this._y=n*a*i+o*r*s,this._z=n*r*s+o*a*i,this._w=n*r*i-o*a*s):"ZYX"===u?(this._x=o*r*i-n*a*s,this._y=n*a*i+o*r*s,this._z=n*r*s-o*a*i,this._w=n*r*i+o*a*s):"YZX"===u?(this._x=o*r*i+n*a*s,this._y=n*a*i+o*r*s,this._z=n*r*s-o*a*i,this._w=n*r*i-o*a*s):"XZY"===u&&(this._x=o*r*i-n*a*s,this._y=n*a*i-o*r*s,this._z=n*r*s+o*a*i,this._w=n*r*i+o*a*s),!1!==e&&this.onChangeCallback(),this},setFromAxisAngle:function(t,e){var n=e/2,r=Math.sin(n);return this._x=t.x*r,this._y=t.y*r,this._z=t.z*r,this._w=Math.cos(n),this.onChangeCallback(),this},setFromRotationMatrix:function(t){var e,n=t.elements,r=n[0],i=n[4],o=n[8],a=n[1],s=n[5],u=n[9],c=n[2],l=n[6],h=n[10],p=r+s+h;return p>0?(e=.5/Math.sqrt(p+1),this._w=.25/e,this._x=(l-u)*e,this._y=(o-c)*e,this._z=(a-i)*e):r>s&&r>h?(e=2*Math.sqrt(1+r-s-h),this._w=(l-u)/e,this._x=.25*e,this._y=(i+a)/e,this._z=(o+c)/e):s>h?(e=2*Math.sqrt(1+s-r-h),this._w=(o-c)/e,this._x=(i+a)/e,this._y=.25*e,this._z=(u+l)/e):(e=2*Math.sqrt(1+h-r-s),this._w=(a-i)/e,this._x=(o+c)/e,this._y=(u+l)/e,this._z=.25*e),this.onChangeCallback(),this},setFromUnitVectors:function(){var t,e;return function(n,r){return void 0===t&&(t=new l),e=n.dot(r)+1,e<1e-6?(e=0,Math.abs(n.x)>Math.abs(n.z)?t.set(-n.y,n.x,0):t.set(0,-n.z,n.y)):t.crossVectors(n,r),this._x=t.x,this._y=t.y,this._z=t.z,this._w=e,this.normalize()}}(),inverse:function(){return this.conjugate().normalize()},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this.onChangeCallback(),this},dot:function(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this.onChangeCallback(),this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)},premultiply:function(t){return this.multiplyQuaternions(t,this)},multiplyQuaternions:function(t,e){var n=t._x,r=t._y,i=t._z,o=t._w,a=e._x,s=e._y,u=e._z,c=e._w;return this._x=n*c+o*a+r*u-i*s,this._y=r*c+o*s+i*a-n*u,this._z=i*c+o*u+n*s-r*a,this._w=o*c-n*a-r*s-i*u,this.onChangeCallback(),this},slerp:function(t,e){if(0===e)return this;if(1===e)return this.copy(t);var n=this._x,r=this._y,i=this._z,o=this._w,a=o*t._w+n*t._x+r*t._y+i*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=o,this._x=n,this._y=r,this._z=i,this;var s=Math.sqrt(1-a*a);if(Math.abs(s)<.001)return this._w=.5*(o+this._w),this._x=.5*(n+this._x),this._y=.5*(r+this._y),this._z=.5*(i+this._z),this;var u=Math.atan2(s,a),c=Math.sin((1-e)*u)/s,l=Math.sin(e*u)/s;return this._w=o*c+this._w*l,this._x=n*c+this._x*l,this._y=r*c+this._y*l,this._z=i*c+this._z*l,this.onChangeCallback(),this},equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w},fromArray:function(t,e){return void 0===e&&(e=0),this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}},Object.assign(c,{slerp:function(t,e,n,r){return n.copy(t).slerp(e,r)},slerpFlat:function(t,e,n,r,i,o,a){var s=n[r+0],u=n[r+1],c=n[r+2],l=n[r+3],h=i[o+0],p=i[o+1],f=i[o+2],d=i[o+3];if(l!==d||s!==h||u!==p||c!==f){var m=1-a,v=s*h+u*p+c*f+l*d,g=v>=0?1:-1,y=1-v*v;if(y>Number.EPSILON){var b=Math.sqrt(y),x=Math.atan2(b,v*g);m=Math.sin(m*x)/b,a=Math.sin(a*x)/b}var _=a*g;if(s=s*m+h*_,u=u*m+p*_,c=c*m+f*_,l=l*m+d*_,m===1-a){var w=1/Math.sqrt(s*s+u*u+c*c+l*l);s*=w,u*=w,c*=w,l*=w}}t[e]=s,t[e+1]=u,t[e+2]=c,t[e+3]=l}}),l.prototype={constructor:l,isVector3:!0,set:function(t,e,n){return this.x=t,this.y=e,this.z=n,this},setScalar:function(t){return this.x=t,this.y=t,this.z=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t,this.z*=t):(this.x=0,this.y=0,this.z=0),this},multiplyVectors:function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},applyEuler:function(){var t;return function(e){return!1===(e&&e.isEuler)&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),void 0===t&&(t=new c),this.applyQuaternion(t.setFromEuler(e))}}(),applyAxisAngle:function(){var t;return function(e,n){return void 0===t&&(t=new c),this.applyQuaternion(t.setFromAxisAngle(e,n))}}(),applyMatrix3:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6]*r,this.y=i[1]*e+i[4]*n+i[7]*r,this.z=i[2]*e+i[5]*n+i[8]*r,this},applyMatrix4:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;this.x=i[0]*e+i[4]*n+i[8]*r+i[12],this.y=i[1]*e+i[5]*n+i[9]*r+i[13],this.z=i[2]*e+i[6]*n+i[10]*r+i[14];var o=i[3]*e+i[7]*n+i[11]*r+i[15];return this.divideScalar(o)},applyQuaternion:function(t){var e=this.x,n=this.y,r=this.z,i=t.x,o=t.y,a=t.z,s=t.w,u=s*e+o*r-a*n,c=s*n+a*e-i*r,l=s*r+i*n-o*e,h=-i*e-o*n-a*r;return this.x=u*s+h*-i+c*-a-l*-o,this.y=c*s+h*-o+l*-i-u*-a,this.z=l*s+h*-a+u*-o-c*-i,this},project:function(){var t;return function(e){return void 0===t&&(t=new h),t.multiplyMatrices(e.projectionMatrix,t.getInverse(e.matrixWorld)),this.applyMatrix4(t)}}(),unproject:function(){var t;return function(e){return void 0===t&&(t=new h),t.multiplyMatrices(e.matrixWorld,t.getInverse(e.projectionMatrix)),this.applyMatrix4(t)}}(),transformDirection:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[4]*n+i[8]*r,this.y=i[1]*e+i[5]*n+i[9]*r,this.z=i[2]*e+i[6]*n+i[10]*r,this.normalize()},divide:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},divideScalar:function(t){return this.multiplyScalar(1/t)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this},clampScalar:function(){var t,e;return function(n,r){return void 0===t&&(t=new l,e=new l),t.set(n,n,n),e.set(r,r,r),this.clamp(t,e)}}(),clampLength:function(t,e){var n=this.length();return this.multiplyScalar(Math.max(t,Math.min(e,n))/n)},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},cross:function(t,e){if(void 0!==e)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e);var n=this.x,r=this.y,i=this.z;return this.x=r*t.z-i*t.y,this.y=i*t.x-n*t.z,this.z=n*t.y-r*t.x,this},crossVectors:function(t,e){var n=t.x,r=t.y,i=t.z,o=e.x,a=e.y,s=e.z;return this.x=r*s-i*a,this.y=i*o-n*s,this.z=n*a-r*o,this},projectOnVector:function(t){var e=t.dot(this)/t.lengthSq();return this.copy(t).multiplyScalar(e)},projectOnPlane:function(){var t;return function(e){return void 0===t&&(t=new l),t.copy(this).projectOnVector(e),this.sub(t)}}(),reflect:function(){var t;return function(e){return void 0===t&&(t=new l),this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(t){var e=this.dot(t)/Math.sqrt(this.lengthSq()*t.lengthSq());return Math.acos(fs.clamp(e,-1,1))},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,n=this.y-t.y,r=this.z-t.z;return e*e+n*n+r*r},distanceToManhattan:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)},setFromSpherical:function(t){var e=Math.sin(t.phi)*t.radius;return this.x=e*Math.sin(t.theta),this.y=Math.cos(t.phi)*t.radius,this.z=e*Math.cos(t.theta),this},setFromCylindrical:function(t){return this.x=t.radius*Math.sin(t.theta),this.y=t.y,this.z=t.radius*Math.cos(t.theta),this},setFromMatrixPosition:function(t){return this.setFromMatrixColumn(t,3)},setFromMatrixScale:function(t){var e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),r=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=r,this},setFromMatrixColumn:function(t,e){if("number"==typeof t){console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index ).");var n=t;t=e,e=n}return this.fromArray(t.elements,4*e)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}},h.prototype={constructor:h,isMatrix4:!0,set:function(t,e,n,r,i,o,a,s,u,c,l,h,p,f,d,m){var v=this.elements;return v[0]=t,v[4]=e,v[8]=n,v[12]=r,v[1]=i,v[5]=o,v[9]=a,v[13]=s,v[2]=u,v[6]=c,v[10]=l,v[14]=h,v[3]=p,v[7]=f,v[11]=d,v[15]=m,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},clone:function(){return(new h).fromArray(this.elements)},copy:function(t){return this.elements.set(t.elements),this},copyPosition:function(t){var e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this},extractBasis:function(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this},makeBasis:function(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this},extractRotation:function(){var t;return function(e){void 0===t&&(t=new l);var n=this.elements,r=e.elements,i=1/t.setFromMatrixColumn(e,0).length(),o=1/t.setFromMatrixColumn(e,1).length(),a=1/t.setFromMatrixColumn(e,2).length();return n[0]=r[0]*i,n[1]=r[1]*i,n[2]=r[2]*i,n[4]=r[4]*o,n[5]=r[5]*o,n[6]=r[6]*o,n[8]=r[8]*a,n[9]=r[9]*a,n[10]=r[10]*a,this}}(),makeRotationFromEuler:function(t){!1===(t&&t.isEuler)&&console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var e=this.elements,n=t.x,r=t.y,i=t.z,o=Math.cos(n),a=Math.sin(n),s=Math.cos(r),u=Math.sin(r),c=Math.cos(i),l=Math.sin(i);if("XYZ"===t.order){var h=o*c,p=o*l,f=a*c,d=a*l;e[0]=s*c,e[4]=-s*l,e[8]=u,e[1]=p+f*u,e[5]=h-d*u,e[9]=-a*s,e[2]=d-h*u,e[6]=f+p*u,e[10]=o*s}else if("YXZ"===t.order){var m=s*c,v=s*l,g=u*c,y=u*l;e[0]=m+y*a,e[4]=g*a-v,e[8]=o*u,e[1]=o*l,e[5]=o*c,e[9]=-a,e[2]=v*a-g,e[6]=y+m*a,e[10]=o*s}else if("ZXY"===t.order){var m=s*c,v=s*l,g=u*c,y=u*l;e[0]=m-y*a,e[4]=-o*l,e[8]=g+v*a,e[1]=v+g*a,e[5]=o*c,e[9]=y-m*a,e[2]=-o*u,e[6]=a,e[10]=o*s}else if("ZYX"===t.order){var h=o*c,p=o*l,f=a*c,d=a*l;e[0]=s*c,e[4]=f*u-p,e[8]=h*u+d,e[1]=s*l,e[5]=d*u+h,e[9]=p*u-f,e[2]=-u,e[6]=a*s,e[10]=o*s}else if("YZX"===t.order){var b=o*s,x=o*u,_=a*s,w=a*u;e[0]=s*c,e[4]=w-b*l,e[8]=_*l+x,e[1]=l,e[5]=o*c,e[9]=-a*c,e[2]=-u*c,e[6]=x*l+_,e[10]=b-w*l}else if("XZY"===t.order){var b=o*s,x=o*u,_=a*s,w=a*u;e[0]=s*c,e[4]=-l,e[8]=u*c,e[1]=b*l+w,e[5]=o*c,e[9]=x*l-_,e[2]=_*l-x,e[6]=a*c,e[10]=w*l+b}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},makeRotationFromQuaternion:function(t){var e=this.elements,n=t.x,r=t.y,i=t.z,o=t.w,a=n+n,s=r+r,u=i+i,c=n*a,l=n*s,h=n*u,p=r*s,f=r*u,d=i*u,m=o*a,v=o*s,g=o*u;return e[0]=1-(p+d),e[4]=l-g,e[8]=h+v,e[1]=l+g,e[5]=1-(c+d),e[9]=f-m,e[2]=h-v,e[6]=f+m,e[10]=1-(c+p),e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},lookAt:function(){var t,e,n;return function(r,i,o){void 0===t&&(t=new l,e=new l,n=new l);var a=this.elements;return n.subVectors(r,i).normalize(),0===n.lengthSq()&&(n.z=1),t.crossVectors(o,n).normalize(),0===t.lengthSq()&&(n.z+=1e-4,t.crossVectors(o,n).normalize()),e.crossVectors(n,t),a[0]=t.x,a[4]=e.x,a[8]=n.x,a[1]=t.y,a[5]=e.y,a[9]=n.y,a[2]=t.z,a[6]=e.z,a[10]=n.z,this}}(),multiply:function(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},premultiply:function(t){return this.multiplyMatrices(t,this)},multiplyMatrices:function(t,e){var n=t.elements,r=e.elements,i=this.elements,o=n[0],a=n[4],s=n[8],u=n[12],c=n[1],l=n[5],h=n[9],p=n[13],f=n[2],d=n[6],m=n[10],v=n[14],g=n[3],y=n[7],b=n[11],x=n[15],_=r[0],w=r[4],E=r[8],M=r[12],T=r[1],S=r[5],A=r[9],C=r[13],P=r[2],R=r[6],L=r[10],O=r[14],I=r[3],N=r[7],D=r[11],k=r[15];return i[0]=o*_+a*T+s*P+u*I,i[4]=o*w+a*S+s*R+u*N,i[8]=o*E+a*A+s*L+u*D,i[12]=o*M+a*C+s*O+u*k,i[1]=c*_+l*T+h*P+p*I,i[5]=c*w+l*S+h*R+p*N,i[9]=c*E+l*A+h*L+p*D,i[13]=c*M+l*C+h*O+p*k,i[2]=f*_+d*T+m*P+v*I,i[6]=f*w+d*S+m*R+v*N,i[10]=f*E+d*A+m*L+v*D,i[14]=f*M+d*C+m*O+v*k,i[3]=g*_+y*T+b*P+x*I,i[7]=g*w+y*S+b*R+x*N,i[11]=g*E+y*A+b*L+x*D,i[15]=g*M+y*C+b*O+x*k,this},multiplyToArray:function(t,e,n){var r=this.elements;return this.multiplyMatrices(t,e),n[0]=r[0],n[1]=r[1],n[2]=r[2],n[3]=r[3],n[4]=r[4],n[5]=r[5],n[6]=r[6],n[7]=r[7],n[8]=r[8],n[9]=r[9],n[10]=r[10],n[11]=r[11],n[12]=r[12],n[13]=r[13],n[14]=r[14],n[15]=r[15],this},multiplyScalar:function(t){var e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this},applyToBufferAttribute:function(){var t;return function(e){void 0===t&&(t=new l);for(var n=0,r=e.count;n 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t\t}\n\t\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 ltcTextureCoords( const in GeometricContext geometry, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = (LUT_SIZE - 1.0)/LUT_SIZE;\n\tconst float LUT_BIAS = 0.5/LUT_SIZE;\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 P = geometry.position;\n\tfloat theta = acos( dot( N, V ) );\n\tvec2 uv = vec2(\n\t\tsqrt( saturate( roughness ) ),\n\t\tsaturate( theta / ( 0.5 * PI ) ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nvoid clipQuadToHorizon( inout vec3 L[5], out int n ) {\n\tint config = 0;\n\tif ( L[0].z > 0.0 ) config += 1;\n\tif ( L[1].z > 0.0 ) config += 2;\n\tif ( L[2].z > 0.0 ) config += 4;\n\tif ( L[3].z > 0.0 ) config += 8;\n\tn = 0;\n\tif ( config == 0 ) {\n\t} else if ( config == 1 ) {\n\t\tn = 3;\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t\tL[2] = -L[3].z * L[0] + L[0].z * L[3];\n\t} else if ( config == 2 ) {\n\t\tn = 3;\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t} else if ( config == 3 ) {\n\t\tn = 4;\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t\tL[3] = -L[3].z * L[0] + L[0].z * L[3];\n\t} else if ( config == 4 ) {\n\t\tn = 3;\n\t\tL[0] = -L[3].z * L[2] + L[2].z * L[3];\n\t\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\n\t} else if ( config == 5 ) {\n\t\tn = 0;\n\t} else if ( config == 6 ) {\n\t\tn = 4;\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\n\t} else if ( config == 7 ) {\n\t\tn = 5;\n\t\tL[4] = -L[3].z * L[0] + L[0].z * L[3];\n\t\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\n\t} else if ( config == 8 ) {\n\t\tn = 3;\n\t\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\n\t\tL[1] = -L[2].z * L[3] + L[3].z * L[2];\n\t\tL[2] = L[3];\n\t} else if ( config == 9 ) {\n\t\tn = 4;\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t\tL[2] = -L[2].z * L[3] + L[3].z * L[2];\n\t} else if ( config == 10 ) {\n\t\tn = 0;\n\t} else if ( config == 11 ) {\n\t\tn = 5;\n\t\tL[4] = L[3];\n\t\tL[3] = -L[2].z * L[3] + L[3].z * L[2];\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t} else if ( config == 12 ) {\n\t\tn = 4;\n\t\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\n\t\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\n\t} else if ( config == 13 ) {\n\t\tn = 5;\n\t\tL[4] = L[3];\n\t\tL[3] = L[2];\n\t\tL[2] = -L[1].z * L[2] + L[2].z * L[1];\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t} else if ( config == 14 ) {\n\t\tn = 5;\n\t\tL[4] = -L[0].z * L[3] + L[3].z * L[0];\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t} else if ( config == 15 ) {\n\t\tn = 4;\n\t}\n\tif ( n == 3 )\n\t\tL[3] = L[0];\n\tif ( n == 4 )\n\t\tL[4] = L[0];\n}\nfloat integrateLtcBrdfOverRectEdge( vec3 v1, vec3 v2 ) {\n\tfloat cosTheta = dot( v1, v2 );\n\tfloat theta = acos( cosTheta );\n\tfloat res = cross( v1, v2 ).z * ( ( theta > 0.001 ) ? theta / sin( theta ) : 1.0 );\n\treturn res;\n}\nvoid initRectPoints( const in vec3 pos, const in vec3 halfWidth, const in vec3 halfHeight, out vec3 rectPoints[4] ) {\n\trectPoints[0] = pos - halfWidth - halfHeight;\n\trectPoints[1] = pos + halfWidth - halfHeight;\n\trectPoints[2] = pos + halfWidth + halfHeight;\n\trectPoints[3] = pos - halfWidth + halfHeight;\n}\nvec3 integrateLtcBrdfOverRect( const in GeometricContext geometry, const in mat3 brdfMat, const in vec3 rectPoints[4] ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 P = geometry.position;\n\tvec3 T1, T2;\n\tT1 = normalize(V - N * dot( V, N ));\n\tT2 = - cross( N, T1 );\n\tmat3 brdfWrtSurface = brdfMat * transpose( mat3( T1, T2, N ) );\n\tvec3 clippedRect[5];\n\tclippedRect[0] = brdfWrtSurface * ( rectPoints[0] - P );\n\tclippedRect[1] = brdfWrtSurface * ( rectPoints[1] - P );\n\tclippedRect[2] = brdfWrtSurface * ( rectPoints[2] - P );\n\tclippedRect[3] = brdfWrtSurface * ( rectPoints[3] - P );\n\tint n;\n\tclipQuadToHorizon(clippedRect, n);\n\tif ( n == 0 )\n\t\treturn vec3( 0, 0, 0 );\n\tclippedRect[0] = normalize( clippedRect[0] );\n\tclippedRect[1] = normalize( clippedRect[1] );\n\tclippedRect[2] = normalize( clippedRect[2] );\n\tclippedRect[3] = normalize( clippedRect[3] );\n\tclippedRect[4] = normalize( clippedRect[4] );\n\tfloat sum = 0.0;\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[0], clippedRect[1] );\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[1], clippedRect[2] );\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[2], clippedRect[3] );\n\tif (n >= 4)\n\t\tsum += integrateLtcBrdfOverRectEdge( clippedRect[3], clippedRect[4] );\n\tif (n == 5)\n\t\tsum += integrateLtcBrdfOverRectEdge( clippedRect[4], clippedRect[0] );\n\tsum = max( 0.0, sum );\n\tvec3 Lo_i = vec3( sum, sum, sum );\n\treturn Lo_i;\n}\nvec3 Rect_Area_Light_Specular_Reflectance(\n\t\tconst in GeometricContext geometry,\n\t\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight,\n\t\tconst in float roughness,\n\t\tconst in sampler2D ltcMat, const in sampler2D ltcMag ) {\n\tvec3 rectPoints[4];\n\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\n\tvec2 uv = ltcTextureCoords( geometry, roughness );\n\tvec4 brdfLtcApproxParams, t;\n\tbrdfLtcApproxParams = texture2D( ltcMat, uv );\n\tt = texture2D( ltcMat, uv );\n\tfloat brdfLtcScalar = texture2D( ltcMag, uv ).a;\n\tmat3 brdfLtcApproxMat = mat3(\n\t\tvec3( 1, 0, t.y ),\n\t\tvec3( 0, t.z, 0 ),\n\t\tvec3( t.w, 0, t.x )\n\t);\n\tvec3 specularReflectance = integrateLtcBrdfOverRect( geometry, brdfLtcApproxMat, rectPoints );\n\tspecularReflectance *= brdfLtcScalar;\n\treturn specularReflectance;\n}\nvec3 Rect_Area_Light_Diffuse_Reflectance(\n\t\tconst in GeometricContext geometry,\n\t\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight ) {\n\tvec3 rectPoints[4];\n\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\n\tmat3 diffuseBrdfMat = mat3(1);\n\tvec3 diffuseReflectance = integrateLtcBrdfOverRect( geometry, diffuseBrdfMat, rectPoints );\n\treturn diffuseReflectance;\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos );\n\t\tvec3 vSigmaY = dFdy( surf_pos );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n\t\tvec4 plane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t\t\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n\t\t\tvec4 plane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t\n\t#endif\n#endif\n",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transpose( const in mat3 v ) {\n\tmat3 tmp;\n\ttmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n\ttmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n\ttmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n\treturn tmp;\n}\n",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n",defaultnormal_vertex:"#ifdef FLIP_SIDED\n\tobjectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;\n",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n",encodings_fragment:" gl_FragColor = linearToOutputTexel( gl_FragColor );\n",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max(vRGB, 0.0), 1.0 );\n}\n",envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\tvec3 reflectView = flipNormal * normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n",envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n",envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n",fog_vertex:"\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n varying float fogDepth;\n#endif\n",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif\n",gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n",lights_pars:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltcMat;\tuniform sampler2D ltcMag;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = saturate( reflectVec.y * 0.5 + 0.5 );\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_BlinnPhong( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 matDiffColor = material.diffuseColor;\n\t\tvec3 matSpecColor = material.specularColor;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = BlinnExponentToGGXRoughness( material.specularShininess );\n\t\tvec3 spec = Rect_Area_Light_Specular_Reflectance(\n\t\t\t\tgeometry,\n\t\t\t\trectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\n\t\t\t\troughness,\n\t\t\t\tltcMat, ltcMag );\n\t\tvec3 diff = Rect_Area_Light_Diffuse_Reflectance(\n\t\t\t\tgeometry,\n\t\t\t\trectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\n\t\treflectedLight.directSpecular += lightColor * matSpecColor * spec / PI2;\n\t\treflectedLight.directDiffuse += lightColor * matDiffColor * diff / PI2;\n\t}\n#endif\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 matDiffColor = material.diffuseColor;\n\t\tvec3 matSpecColor = material.specularColor;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 spec = Rect_Area_Light_Specular_Reflectance(\n\t\t\t\tgeometry,\n\t\t\t\trectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\n\t\t\t\troughness,\n\t\t\t\tltcMat, ltcMag );\n\t\tvec3 diff = Rect_Area_Light_Diffuse_Reflectance(\n\t\t\t\tgeometry,\n\t\t\t\trectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\n\t\treflectedLight.directSpecular += lightColor * matSpecColor * spec;\n\t\treflectedLight.directDiffuse += lightColor * matDiffColor * diff;\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n",lights_template:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n\t#endif\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n\t#ifndef STANDARD\n\t\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\n\t#else\n\t\tvec3 clearCoatRadiance = vec3( 0.0 );\n\t#endif\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n",logdepthbuf_fragment:"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\t#endif\n#endif\n",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n",map_particle_fragment:"#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform vec4 offsetRepeat;\n\tuniform sampler2D map;\n#endif\n",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.r;\n#endif\n",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n",normal_flip:"#ifdef DOUBLE_SIDED\n\tfloat flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n#else\n\tfloat flipNormal = 1.0;\n#endif\n",normal_fragment:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal ) * flipNormal;\n#endif\n#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif\n",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 1.0 - 2.0 * rgb.xyz;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n",project_vertex:"#ifdef USE_SKINNING\n\tvec4 mvPosition = modelViewMatrix * skinned;\n#else\n\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.r;\n#endif\n",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn 1.0;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\tfloat dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif\n",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif\n",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}\n",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureWidth;\n\t\tuniform int boneTextureHeight;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\tskinned = bindMatrixInverse * skinned;\n#endif\n",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n",tonemapping_pars_fragment:"#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n",uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform vec4 offsetRepeat;\n#endif\n",uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\t#ifdef USE_SKINNING\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\t#else\n\t\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n\t#endif\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n",cube_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",distanceRGBA_frag:"uniform vec3 lightPos;\nvarying vec4 vWorldPosition;\n#include \n#include \n#include \nvoid main () {\n\t#include \n\tgl_FragColor = packDepthToRGBA( length( vWorldPosition.xyz - lightPos.xyz ) / 1000.0 );\n}\n",distanceRGBA_vert:"varying vec4 vWorldPosition;\n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition;\n}\n",equirect_frag:"uniform sampler2D tEquirect;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n",equirect_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}\n",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",shadow_frag:"uniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0 - getShadowMask() ) );\n}\n",shadow_vert:"#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"};q.prototype={constructor:q,isColor:!0,r:1,g:1,b:1,set:function(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this},setScalar:function(t){return this.r=t,this.g=t,this.b=t,this},setHex:function(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this},setRGB:function(t,e,n){return this.r=t,this.g=e,this.b=n,this},setHSL:function(){function t(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}return function(e,n,r){if(e=fs.euclideanModulo(e,1),n=fs.clamp(n,0,1),r=fs.clamp(r,0,1),0===n)this.r=this.g=this.b=r;else{var i=r<=.5?r*(1+n):r+n-r*n,o=2*r-i;this.r=t(o,i,e+1/3),this.g=t(o,i,e),this.b=t(o,i,e-1/3)}return this}}(),setStyle:function(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}var n;if(n=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(t)){var r,i=n[1],o=n[2];switch(i){case"rgb":case"rgba":if(r=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o))return this.r=Math.min(255,parseInt(r[1],10))/255,this.g=Math.min(255,parseInt(r[2],10))/255,this.b=Math.min(255,parseInt(r[3],10))/255,e(r[5]),this;if(r=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o))return this.r=Math.min(100,parseInt(r[1],10))/100,this.g=Math.min(100,parseInt(r[2],10))/100,this.b=Math.min(100,parseInt(r[3],10))/100,e(r[5]),this;break;case"hsl":case"hsla":if(r=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)){var a=parseFloat(r[1])/360,s=parseInt(r[2],10)/100,u=parseInt(r[3],10)/100;return e(r[5]),this.setHSL(a,s,u)}}}else if(n=/^\#([A-Fa-f0-9]+)$/.exec(t)){var c=n[1],l=c.length;if(3===l)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===l)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}if(t&&t.length>0){var c=ws[t];void 0!==c?this.setHex(c):console.warn("THREE.Color: Unknown color "+t)}return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(t){return this.r=t.r,this.g=t.g,this.b=t.b,this},copyGammaToLinear:function(t,e){return void 0===e&&(e=2),this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this},copyLinearToGamma:function(t,e){void 0===e&&(e=2);var n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this},convertGammaToLinear:function(){var t=this.r,e=this.g,n=this.b;return this.r=t*t,this.g=e*e,this.b=n*n,this},convertLinearToGamma:function(){return this.r=Math.sqrt(this.r),this.g=Math.sqrt(this.g),this.b=Math.sqrt(this.b),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(t){var e,n,r=t||{h:0,s:0,l:0},i=this.r,o=this.g,a=this.b,s=Math.max(i,o,a),u=Math.min(i,o,a),c=(u+s)/2;if(u===s)e=0,n=0;else{var l=s-u;switch(n=c<=.5?l/(s+u):l/(2-s-u),s){case i:e=(o-a)/l+(othis.max.x||t.ythis.max.y)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y},getParameter:function(t,e){return(e||new i).set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)},clampPoint:function(t,e){return(e||new i).copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new i;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}};var Ts=0;$.prototype={constructor:$,isMaterial:!0,get needsUpdate(){return this._needsUpdate},set needsUpdate(t){!0===t&&this.update(),this._needsUpdate=t},setValues:function(t){if(void 0!==t)for(var e in t){var n=t[e];if(void 0!==n){var r=this[e];void 0!==r?r&&r.isColor?r.set(n):r&&r.isVector3&&n&&n.isVector3?r.copy(n):this[e]="overdraw"===e?Number(n):n:console.warn("THREE."+this.type+": '"+e+"' is not a property of this material.")}else console.warn("THREE.Material: '"+e+"' parameter is undefined.")}},toJSON:function(t){function e(t){var e=[];for(var n in t){var r=t[n];delete r.metadata,e.push(r)}return e}var n=void 0===t;n&&(t={textures:{},images:{}});var r={metadata:{version:4.4,type:"Material",generator:"Material.toJSON"}};if(r.uuid=this.uuid,r.type=this.type,""!==this.name&&(r.name=this.name),this.color&&this.color.isColor&&(r.color=this.color.getHex()),void 0!==this.roughness&&(r.roughness=this.roughness),void 0!==this.metalness&&(r.metalness=this.metalness),this.emissive&&this.emissive.isColor&&(r.emissive=this.emissive.getHex()),this.specular&&this.specular.isColor&&(r.specular=this.specular.getHex()),void 0!==this.shininess&&(r.shininess=this.shininess),void 0!==this.clearCoat&&(r.clearCoat=this.clearCoat),void 0!==this.clearCoatRoughness&&(r.clearCoatRoughness=this.clearCoatRoughness),this.map&&this.map.isTexture&&(r.map=this.map.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(r.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(r.lightMap=this.lightMap.toJSON(t).uuid),this.bumpMap&&this.bumpMap.isTexture&&(r.bumpMap=this.bumpMap.toJSON(t).uuid,r.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(r.normalMap=this.normalMap.toJSON(t).uuid,r.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(r.displacementMap=this.displacementMap.toJSON(t).uuid,r.displacementScale=this.displacementScale,r.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(r.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(r.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(r.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(r.specularMap=this.specularMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(r.envMap=this.envMap.toJSON(t).uuid,r.reflectivity=this.reflectivity),this.gradientMap&&this.gradientMap.isTexture&&(r.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.size&&(r.size=this.size),void 0!==this.sizeAttenuation&&(r.sizeAttenuation=this.sizeAttenuation),this.blending!==vo&&(r.blending=this.blending),this.shading!==lo&&(r.shading=this.shading),this.side!==ao&&(r.side=this.side),this.vertexColors!==ho&&(r.vertexColors=this.vertexColors),this.opacity<1&&(r.opacity=this.opacity),!0===this.transparent&&(r.transparent=this.transparent),r.depthFunc=this.depthFunc,r.depthTest=this.depthTest,r.depthWrite=this.depthWrite,this.alphaTest>0&&(r.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(r.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(r.wireframe=this.wireframe),this.wireframeLinewidth>1&&(r.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(r.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(r.wireframeLinejoin=this.wireframeLinejoin),r.skinning=this.skinning,r.morphTargets=this.morphTargets,n){var i=e(t.textures),o=e(t.images);i.length>0&&(r.textures=i),o.length>0&&(r.images=o)}return r},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.lights=t.lights,this.blending=t.blending,this.side=t.side,this.shading=t.shading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.overdraw=t.overdraw,this.visible=t.visible,this.clipShadows=t.clipShadows,this.clipIntersection=t.clipIntersection;var e=t.clippingPlanes,n=null;if(null!==e){var r=e.length;n=new Array(r);for(var i=0;i!==r;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this},update:function(){this.dispatchEvent({type:"update"})},dispose:function(){this.dispatchEvent({type:"dispose"})}},Object.assign($.prototype,r.prototype),Q.prototype=Object.create($.prototype),Q.prototype.constructor=Q,Q.prototype.isShaderMaterial=!0,Q.prototype.copy=function(t){return $.prototype.copy.call(this,t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=xs.clone(t.uniforms),this.defines=t.defines,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.extensions=t.extensions,this},Q.prototype.toJSON=function(t){var e=$.prototype.toJSON.call(this,t);return e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e},tt.prototype=Object.create($.prototype),tt.prototype.constructor=tt,tt.prototype.isMeshDepthMaterial=!0,tt.prototype.copy=function(t){return $.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},et.prototype={constructor:et,isBox3:!0,set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromArray:function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,o=-1/0,a=-1/0,s=0,u=t.length;si&&(i=c),l>o&&(o=l),h>a&&(a=h)}return this.min.set(e,n,r),this.max.set(i,o,a),this},setFromBufferAttribute:function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,o=-1/0,a=-1/0,s=0,u=t.count;si&&(i=c),l>o&&(o=l),h>a&&(a=h)}return this.min.set(e,n,r),this.max.set(i,o,a),this},setFromPoints:function(t){this.makeEmpty();for(var e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z},getParameter:function(t,e){return(e||new l).set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)},intersectsSphere:function(){var t;return function(e){return void 0===t&&(t=new l),this.clampPoint(e.center,t),t.distanceToSquared(e.center)<=e.radius*e.radius}}(),intersectsPlane:function(t){var e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=t.constant&&n>=t.constant},clampPoint:function(t,e){return(e||new l).copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new l;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),getBoundingSphere:function(){var t=new l;return function(e){var n=e||new nt;return this.getCenter(n.center),n.radius=.5*this.getSize(t).length(),n}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},applyMatrix4:function(){var t=[new l,new l,new l,new l,new l,new l,new l,new l];return function(e){return this.isEmpty()?this:(t[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),t[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),t[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),t[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),t[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),t[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),t[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),t[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(t),this)}}(),translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}},nt.prototype={constructor:nt,set:function(t,e){return this.center.copy(t),this.radius=e,this},setFromPoints:function(){var t;return function(e,n){void 0===t&&(t=new et);var r=this.center;void 0!==n?r.copy(n):t.setFromPoints(e).getCenter(r);for(var i=0,o=0,a=e.length;othis.radius*this.radius&&(r.sub(this.center).normalize(),r.multiplyScalar(this.radius).add(this.center)),r},getBoundingBox:function(t){var e=t||new et;return e.set(this.center,this.center),e.expandByScalar(this.radius),e},applyMatrix4:function(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this},translate:function(t){return this.center.add(t),this},equals:function(t){return t.center.equals(this.center)&&t.radius===this.radius}},rt.prototype={constructor:rt,isMatrix3:!0,set:function(t,e,n,r,i,o,a,s,u){var c=this.elements;return c[0]=t,c[1]=r,c[2]=a,c[3]=e,c[4]=i,c[5]=s,c[6]=n,c[7]=o,c[8]=u,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(t){var e=t.elements;return this.set(e[0],e[3],e[6],e[1],e[4],e[7],e[2],e[5],e[8]),this},setFromMatrix4:function(t){var e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this},applyToBufferAttribute:function(){var t;return function(e){void 0===t&&(t=new l);for(var n=0,r=e.count;n1))return r.copy(i).multiplyScalar(a).add(e.start)}else if(0===this.distanceToPoint(e.start))return r.copy(e.start)}}(),intersectsLine:function(t){var e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0},intersectsBox:function(t){return t.intersectsPlane(this)},intersectsSphere:function(t){return t.intersectsPlane(this)},coplanarPoint:function(t){return(t||new l).copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var t=new l,e=new rt;return function(n,r){var i=this.coplanarPoint(t).applyMatrix4(n),o=r||e.getNormalMatrix(n),a=this.normal.applyMatrix3(o).normalize();return this.constant=-i.dot(a),this}}(),translate:function(t){return this.constant=this.constant-t.dot(this.normal),this},equals:function(t){return t.normal.equals(this.normal)&&t.constant===this.constant}},ot.prototype={constructor:ot,set:function(t,e,n,r,i,o){var a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(r),a[4].copy(i),a[5].copy(o),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){for(var e=this.planes,n=0;n<6;n++)e[n].copy(t.planes[n]);return this},setFromMatrix:function(t){var e=this.planes,n=t.elements,r=n[0],i=n[1],o=n[2],a=n[3],s=n[4],u=n[5],c=n[6],l=n[7],h=n[8],p=n[9],f=n[10],d=n[11],m=n[12],v=n[13],g=n[14],y=n[15];return e[0].setComponents(a-r,l-s,d-h,y-m).normalize(),e[1].setComponents(a+r,l+s,d+h,y+m).normalize(),e[2].setComponents(a+i,l+u,d+p,y+v).normalize(),e[3].setComponents(a-i,l-u,d-p,y-v).normalize(),e[4].setComponents(a-o,l-c,d-f,y-g).normalize(),e[5].setComponents(a+o,l+c,d+f,y+g).normalize(),this},intersectsObject:function(){var t=new nt;return function(e){var n=e.geometry;return null===n.boundingSphere&&n.computeBoundingSphere(),t.copy(n.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSprite:function(){var t=new nt;return function(e){return t.center.set(0,0,0),t.radius=.7071067811865476,t.applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSphere:function(t){for(var e=this.planes,n=t.center,r=-t.radius,i=0;i<6;i++){if(e[i].distanceToPoint(n)0?n.min.x:n.max.x,e.x=o.normal.x>0?n.max.x:n.min.x,t.y=o.normal.y>0?n.min.y:n.max.y,e.y=o.normal.y>0?n.max.y:n.min.y,t.z=o.normal.z>0?n.min.z:n.max.z,e.z=o.normal.z>0?n.max.z:n.min.z;var a=o.distanceToPoint(t),s=o.distanceToPoint(e);if(a<0&&s<0)return!1}return!0}}(),containsPoint:function(t){for(var e=this.planes,n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}},st.prototype={constructor:st,set:function(t,e){return this.origin.copy(t),this.direction.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this},at:function(t,e){return(e||new l).copy(this.direction).multiplyScalar(t).add(this.origin)},lookAt:function(t){return this.direction.copy(t).sub(this.origin).normalize(),this},recast:function(){var t=new l;return function(e){return this.origin.copy(this.at(e,t)),this}}(),closestPointToPoint:function(t,e){var n=e||new l;n.subVectors(t,this.origin);var r=n.dot(this.direction);return r<0?n.copy(this.origin):n.copy(this.direction).multiplyScalar(r).add(this.origin)},distanceToPoint:function(t){return Math.sqrt(this.distanceSqToPoint(t))},distanceSqToPoint:function(){var t=new l;return function(e){var n=t.subVectors(e,this.origin).dot(this.direction);return n<0?this.origin.distanceToSquared(e):(t.copy(this.direction).multiplyScalar(n).add(this.origin),t.distanceToSquared(e))}}(),distanceSqToSegment:function(){var t=new l,e=new l,n=new l;return function(r,i,o,a){t.copy(r).add(i).multiplyScalar(.5),e.copy(i).sub(r).normalize(),n.copy(this.origin).sub(t);var s,u,c,l,h=.5*r.distanceTo(i),p=-this.direction.dot(e),f=n.dot(this.direction),d=-n.dot(e),m=n.lengthSq(),v=Math.abs(1-p*p);if(v>0)if(s=p*d-f,u=p*f-d,l=h*v,s>=0)if(u>=-l)if(u<=l){var g=1/v;s*=g,u*=g,c=s*(s+p*u+2*f)+u*(p*s+u+2*d)+m}else u=h,s=Math.max(0,-(p*u+f)),c=-s*s+u*(u+2*d)+m;else u=-h,s=Math.max(0,-(p*u+f)),c=-s*s+u*(u+2*d)+m;else u<=-l?(s=Math.max(0,-(-p*h+f)),u=s>0?-h:Math.min(Math.max(-h,-d),h),c=-s*s+u*(u+2*d)+m):u<=l?(s=0,u=Math.min(Math.max(-h,-d),h),c=u*(u+2*d)+m):(s=Math.max(0,-(p*h+f)),u=s>0?h:Math.min(Math.max(-h,-d),h),c=-s*s+u*(u+2*d)+m);else u=p>0?-h:h,s=Math.max(0,-(p*u+f)),c=-s*s+u*(u+2*d)+m;return o&&o.copy(this.direction).multiplyScalar(s).add(this.origin),a&&a.copy(e).multiplyScalar(u).add(t),c}}(),intersectSphere:function(){var t=new l;return function(e,n){t.subVectors(e.center,this.origin);var r=t.dot(this.direction),i=t.dot(t)-r*r,o=e.radius*e.radius;if(i>o)return null;var a=Math.sqrt(o-i),s=r-a,u=r+a;return s<0&&u<0?null:s<0?this.at(u,n):this.at(s,n)}}(),intersectsSphere:function(t){return this.distanceToPoint(t.center)<=t.radius},distanceToPlane:function(t){var e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;var n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null},intersectPlane:function(t,e){var n=this.distanceToPlane(t);return null===n?null:this.at(n,e)},intersectsPlane:function(t){var e=t.distanceToPoint(this.origin);return 0===e||t.normal.dot(this.direction)*e<0},intersectBox:function(t,e){var n,r,i,o,a,s,u=1/this.direction.x,c=1/this.direction.y,l=1/this.direction.z,h=this.origin;return u>=0?(n=(t.min.x-h.x)*u,r=(t.max.x-h.x)*u):(n=(t.max.x-h.x)*u,r=(t.min.x-h.x)*u),c>=0?(i=(t.min.y-h.y)*c,o=(t.max.y-h.y)*c):(i=(t.max.y-h.y)*c,o=(t.min.y-h.y)*c),n>o||i>r?null:((i>n||n!==n)&&(n=i),(o=0?(a=(t.min.z-h.z)*l,s=(t.max.z-h.z)*l):(a=(t.max.z-h.z)*l,s=(t.min.z-h.z)*l),n>s||a>r?null:((a>n||n!==n)&&(n=a),(s=0?n:r,e)))},intersectsBox:function(){var t=new l;return function(e){return null!==this.intersectBox(e,t)}}(),intersectTriangle:function(){var t=new l,e=new l,n=new l,r=new l;return function(i,o,a,s,u){e.subVectors(o,i),n.subVectors(a,i),r.crossVectors(e,n);var c,l=this.direction.dot(r);if(l>0){if(s)return null;c=1}else{if(!(l<0))return null;c=-1,l=-l}t.subVectors(this.origin,i);var h=c*this.direction.dot(n.crossVectors(t,n));if(h<0)return null;var p=c*this.direction.dot(e.cross(t));if(p<0)return null;if(h+p>l)return null;var f=-c*t.dot(r);return f<0?null:this.at(f/l,u)}}(),applyMatrix4:function(t){return this.direction.add(this.origin).applyMatrix4(t),this.origin.applyMatrix4(t),this.direction.sub(this.origin),this.direction.normalize(),this},equals:function(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}},ut.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"],ut.DefaultOrder="XYZ",ut.prototype={constructor:ut,isEuler:!0,get x(){return this._x},set x(t){this._x=t,this.onChangeCallback()},get y(){return this._y},set y(t){this._y=t,this.onChangeCallback()},get z(){return this._z},set z(t){this._z=t,this.onChangeCallback()},get order(){return this._order},set order(t){this._order=t,this.onChangeCallback()},set:function(t,e,n,r){return this._x=t,this._y=e,this._z=n,this._order=r||this._order,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this.onChangeCallback(),this},setFromRotationMatrix:function(t,e,n){var r=fs.clamp,i=t.elements,o=i[0],a=i[4],s=i[8],u=i[1],c=i[5],l=i[9],h=i[2],p=i[6],f=i[10];return e=e||this._order,"XYZ"===e?(this._y=Math.asin(r(s,-1,1)),Math.abs(s)<.99999?(this._x=Math.atan2(-l,f),this._z=Math.atan2(-a,o)):(this._x=Math.atan2(p,c),this._z=0)):"YXZ"===e?(this._x=Math.asin(-r(l,-1,1)),Math.abs(l)<.99999?(this._y=Math.atan2(s,f),this._z=Math.atan2(u,c)):(this._y=Math.atan2(-h,o),this._z=0)):"ZXY"===e?(this._x=Math.asin(r(p,-1,1)),Math.abs(p)<.99999?(this._y=Math.atan2(-h,f),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(u,o))):"ZYX"===e?(this._y=Math.asin(-r(h,-1,1)),Math.abs(h)<.99999?(this._x=Math.atan2(p,f),this._z=Math.atan2(u,o)):(this._x=0,this._z=Math.atan2(-a,c))):"YZX"===e?(this._z=Math.asin(r(u,-1,1)),Math.abs(u)<.99999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-h,o)):(this._x=0,this._y=Math.atan2(s,f))):"XZY"===e?(this._z=Math.asin(-r(a,-1,1)),Math.abs(a)<.99999?(this._x=Math.atan2(p,c),this._y=Math.atan2(s,o)):(this._x=Math.atan2(-l,f),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+e),this._order=e,!1!==n&&this.onChangeCallback(),this},setFromQuaternion:function(){var t;return function(e,n,r){return void 0===t&&(t=new h),t.makeRotationFromQuaternion(e),this.setFromRotationMatrix(t,n,r)}}(),setFromVector3:function(t,e){return this.set(t.x,t.y,t.z,e||this._order)},reorder:function(){var t=new c;return function(e){return t.setFromEuler(this),this.setFromQuaternion(t,e)}}(),equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order},fromArray:function(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t},toVector3:function(t){return t?t.set(this._x,this._y,this._z):new l(this._x,this._y,this._z)},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}},ct.prototype={constructor:ct,set:function(t){this.mask=1<1){for(var e=0;e1)for(var e=0;e0){i.children=[];for(var o=0;o0&&(r.geometries=a),s.length>0&&(r.materials=s),u.length>0&&(r.textures=u),c.length>0&&(r.images=c)}return r.object=i,r},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e){if(void 0===e&&(e=!0),this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(var n=0;n0?o.multiplyScalar(1/Math.sqrt(a)):o.set(0,0,0)}}(),pt.barycoordFromPoint=function(){var t=new l,e=new l,n=new l;return function(r,i,o,a,s){t.subVectors(a,i),e.subVectors(o,i),n.subVectors(r,i);var u=t.dot(t),c=t.dot(e),h=t.dot(n),p=e.dot(e),f=e.dot(n),d=u*p-c*c,m=s||new l;if(0===d)return m.set(-2,-1,-1);var v=1/d,g=(p*h-c*f)*v,y=(u*f-c*h)*v;return m.set(1-g-y,y,g)}}(),pt.containsPoint=function(){var t=new l;return function(e,n,r,i){var o=pt.barycoordFromPoint(e,n,r,i,t);return o.x>=0&&o.y>=0&&o.x+o.y<=1}}(),pt.prototype={constructor:pt,set:function(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this},setFromPointsAndIndices:function(t,e,n,r){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[r]),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this},area:function(){var t=new l,e=new l;return function(){return t.subVectors(this.c,this.b),e.subVectors(this.a,this.b),.5*t.cross(e).length()}}(),midpoint:function(t){return(t||new l).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(t){return pt.normal(this.a,this.b,this.c,t)},plane:function(t){return(t||new it).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(t,e){return pt.barycoordFromPoint(t,this.a,this.b,this.c,e)},containsPoint:function(t){return pt.containsPoint(t,this.a,this.b,this.c)},closestPointToPoint:function(){var t,e,n,r;return function(i,o){void 0===t&&(t=new it,e=[new ht,new ht,new ht],n=new l,r=new l);var a=o||new l,s=1/0;if(t.setFromCoplanarPoints(this.a,this.b,this.c),t.projectPoint(i,n),!0===this.containsPoint(n))a.copy(n);else{e[0].set(this.a,this.b),e[1].set(this.b,this.c),e[2].set(this.c,this.a);for(var u=0;u0,s=o[1]&&o[1].length>0,u=t.morphTargets,c=u.length;if(c>0){e=[];for(var l=0;l0){h=[];for(var l=0;l0)for(var m=0;m0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var t,e,n;for(this.computeFaceNormals(),t=0,e=this.faces.length;t0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var t,e,n,r,i;for(n=0,r=this.faces.length;n0&&(t+=e[n].distanceTo(e[n-1])),this.lineDistances[n]=t},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new et),this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new nt),this.boundingSphere.setFromPoints(this.vertices)},merge:function(t,e,n){if(!1===(t&&t.isGeometry))return void console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",t);var r,i=this.vertices.length,o=this.vertices,a=t.vertices,s=this.faces,u=t.faces,c=this.faceVertexUvs[0],l=t.faceVertexUvs[0],h=this.colors,p=t.colors;void 0===n&&(n=0),void 0!==e&&(r=(new rt).getNormalMatrix(e));for(var f=0,d=a.length;f=0;n--){var d=p[n];for(this.faces.splice(d,1),a=0,s=this.faceVertexUvs.length;a0,x=g.vertexNormals.length>0,_=1!==g.color.r||1!==g.color.g||1!==g.color.b,w=g.vertexColors.length>0,E=0;if(E=t(E,0,0),E=t(E,1,!0),E=t(E,2,!1),E=t(E,3,y),E=t(E,4,b),E=t(E,5,x),E=t(E,6,_),E=t(E,7,w),l.push(E),l.push(g.a,g.b,g.c),l.push(g.materialIndex),y){var M=this.faceVertexUvs[0][u];l.push(r(M[0]),r(M[1]),r(M[2]))}if(b&&l.push(e(g.normal)),x){var T=g.vertexNormals;l.push(e(T[0]),e(T[1]),e(T[2]))}if(_&&l.push(n(g.color)),w){var S=g.vertexColors;l.push(n(S[0]),n(S[1]),n(S[2]))}}return i.data={},i.data.vertices=s,i.data.normals=h,f.length>0&&(i.data.colors=f),m.length>0&&(i.data.uvs=[m]),i.data.faces=l,i},clone:function(){return(new Ct).copy(this)},copy:function(t){var e,n,r,i,o,a;this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;var s=t.vertices;for(e=0,n=s.length;e65535?wt:xt)(t,1):this.index=t},addAttribute:function(t,e){return!1===(e&&e.isBufferAttribute)&&!1===(e&&e.isInterleavedBufferAttribute)?(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),void this.addAttribute(t,new mt(arguments[1],arguments[2]))):"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),void this.setIndex(e)):(this.attributes[t]=e,this)},getAttribute:function(t){return this.attributes[t]},removeAttribute:function(t){return delete this.attributes[t],this},addGroup:function(t,e,n){this.groups.push({start:t,count:e,materialIndex:void 0!==n?n:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix:function(t){var e=this.attributes.position;void 0!==e&&(t.applyToBufferAttribute(e),e.needsUpdate=!0);var n=this.attributes.normal;if(void 0!==n){(new rt).getNormalMatrix(t).applyToBufferAttribute(n),n.needsUpdate=!0}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(){var t;return function(e){return void 0===t&&(t=new h),t.makeRotationX(e),this.applyMatrix(t),this}}(),rotateY:function(){var t;return function(e){return void 0===t&&(t=new h),t.makeRotationY(e),this.applyMatrix(t),this}}(),rotateZ:function(){var t;return function(e){return void 0===t&&(t=new h),t.makeRotationZ(e),this.applyMatrix(t),this}}(),translate:function(){var t;return function(e,n,r){return void 0===t&&(t=new h),t.makeTranslation(e,n,r),this.applyMatrix(t),this}}(),scale:function(){var t;return function(e,n,r){return void 0===t&&(t=new h),t.makeScale(e,n,r),this.applyMatrix(t),this}}(),lookAt:function(){var t;return function(e){void 0===t&&(t=new lt),t.lookAt(e),t.updateMatrix(),this.applyMatrix(t.matrix)}}(),center:function(){this.computeBoundingBox();var t=this.boundingBox.getCenter().negate();return this.translate(t.x,t.y,t.z),t},setFromObject:function(t){var e=t.geometry;if(t.isPoints||t.isLine){var n=new Et(3*e.vertices.length,3),r=new Et(3*e.colors.length,3);if(this.addAttribute("position",n.copyVector3sArray(e.vertices)),this.addAttribute("color",r.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length){var i=new Et(e.lineDistances.length,1);this.addAttribute("lineDistance",i.copyArray(e.lineDistances))}null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else t.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},updateFromObject:function(t){var e=t.geometry;if(t.isMesh){var n=e.__directGeometry;if(!0===e.elementsNeedUpdate&&(n=void 0,e.elementsNeedUpdate=!1),void 0===n)return this.fromGeometry(e);n.verticesNeedUpdate=e.verticesNeedUpdate,n.normalsNeedUpdate=e.normalsNeedUpdate,n.colorsNeedUpdate=e.colorsNeedUpdate,n.uvsNeedUpdate=e.uvsNeedUpdate,n.groupsNeedUpdate=e.groupsNeedUpdate,e.verticesNeedUpdate=!1,e.normalsNeedUpdate=!1,e.colorsNeedUpdate=!1,e.uvsNeedUpdate=!1,e.groupsNeedUpdate=!1,e=n}var r;return!0===e.verticesNeedUpdate&&(r=this.attributes.position,void 0!==r&&(r.copyVector3sArray(e.vertices),r.needsUpdate=!0),e.verticesNeedUpdate=!1),!0===e.normalsNeedUpdate&&(r=this.attributes.normal,void 0!==r&&(r.copyVector3sArray(e.normals),r.needsUpdate=!0),e.normalsNeedUpdate=!1),!0===e.colorsNeedUpdate&&(r=this.attributes.color,void 0!==r&&(r.copyColorsArray(e.colors),r.needsUpdate=!0),e.colorsNeedUpdate=!1),e.uvsNeedUpdate&&(r=this.attributes.uv,void 0!==r&&(r.copyVector2sArray(e.uvs),r.needsUpdate=!0),e.uvsNeedUpdate=!1),e.lineDistancesNeedUpdate&&(r=this.attributes.lineDistance,void 0!==r&&(r.copyArray(e.lineDistances),r.needsUpdate=!0),e.lineDistancesNeedUpdate=!1),e.groupsNeedUpdate&&(e.computeGroups(t.geometry),this.groups=e.groups,e.groupsNeedUpdate=!1),this},fromGeometry:function(t){return t.__directGeometry=(new Tt).fromGeometry(t),this.fromDirectGeometry(t.__directGeometry)},fromDirectGeometry:function(t){var e=new Float32Array(3*t.vertices.length);if(this.addAttribute("position",new mt(e,3).copyVector3sArray(t.vertices)),t.normals.length>0){var n=new Float32Array(3*t.normals.length);this.addAttribute("normal",new mt(n,3).copyVector3sArray(t.normals))}if(t.colors.length>0){var r=new Float32Array(3*t.colors.length);this.addAttribute("color",new mt(r,3).copyColorsArray(t.colors))}if(t.uvs.length>0){var i=new Float32Array(2*t.uvs.length);this.addAttribute("uv",new mt(i,2).copyVector2sArray(t.uvs))}if(t.uvs2.length>0){var o=new Float32Array(2*t.uvs2.length);this.addAttribute("uv2",new mt(o,2).copyVector2sArray(t.uvs2))}if(t.indices.length>0){var a=St(t.indices)>65535?Uint32Array:Uint16Array,s=new a(3*t.indices.length);this.setIndex(new mt(s,1).copyIndicesArray(t.indices))}this.groups=t.groups;for(var u in t.morphTargets){for(var c=[],l=t.morphTargets[u],h=0,p=l.length;h0){var m=new Et(4*t.skinIndices.length,4);this.addAttribute("skinIndex",m.copyVector4sArray(t.skinIndices))}if(t.skinWeights.length>0){var v=new Et(4*t.skinWeights.length,4);this.addAttribute("skinWeight",v.copyVector4sArray(t.skinWeights))}return null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new et);var t=this.attributes.position;void 0!==t?this.boundingBox.setFromBufferAttribute(t):this.boundingBox.makeEmpty(),(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)},computeBoundingSphere:function(){var t=new et,e=new l;return function(){null===this.boundingSphere&&(this.boundingSphere=new nt);var n=this.attributes.position;if(n){var r=this.boundingSphere.center;t.setFromBufferAttribute(n),t.getCenter(r);for(var i=0,o=0,a=n.count;o0&&(t.data.groups=JSON.parse(JSON.stringify(s)));var u=this.boundingSphere;return null!==u&&(t.data.boundingSphere={center:u.center.toArray(),radius:u.radius}),t},clone:function(){return(new Pt).copy(this)},copy:function(t){var e,n,r;this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;var i=t.index;null!==i&&this.setIndex(i.clone());var o=t.attributes;for(e in o){var a=o[e];this.addAttribute(e,a.clone())}var s=t.morphAttributes;for(e in s){var u=[],c=s[e];for(n=0,r=c.length;n0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(var e=0,n=t.length;ee.far?null:{distance:u,point:x.clone(),object:t}}function n(n,r,i,o,a,l,h,p){s.fromBufferAttribute(o,l),u.fromBufferAttribute(o,h),c.fromBufferAttribute(o,p);var f=e(n,r,i,s,u,c,b);return f&&(a&&(m.fromBufferAttribute(a,l),v.fromBufferAttribute(a,h),g.fromBufferAttribute(a,p),f.uv=t(b,s,u,c,m,v,g)),f.face=new ft(l,h,p,pt.normal(s,u,c)),f.faceIndex=l),f}var r=new h,o=new st,a=new nt,s=new l,u=new l,c=new l,p=new l,f=new l,d=new l,m=new i,v=new i,g=new i,y=new l,b=new l,x=new l;return function(i,l){var h=this.geometry,y=this.material,x=this.matrixWorld;if(void 0!==y&&(null===h.boundingSphere&&h.computeBoundingSphere(),a.copy(h.boundingSphere),a.applyMatrix4(x),!1!==i.ray.intersectsSphere(a)&&(r.getInverse(x),o.copy(i.ray).applyMatrix4(r),null===h.boundingBox||!1!==o.intersectsBox(h.boundingBox)))){var _;if(h.isBufferGeometry){var w,E,M,T,S,A=h.index,C=h.attributes.position,P=h.attributes.uv;if(null!==A)for(T=0,S=A.count;T0&&(I=F);for(var B=0,z=U.length;Bthis.scale.x*this.scale.y/4||n.push({distance:Math.sqrt(r),point:this.position,face:null,object:this})}}(),clone:function(){return new this.constructor(this.material).copy(this)}}),ge.prototype=Object.assign(Object.create(lt.prototype),{constructor:ge,copy:function(t){lt.prototype.copy.call(this,t,!1);for(var e=t.levels,n=0,r=e.length;n1){t.setFromMatrixPosition(n.matrixWorld),e.setFromMatrixPosition(this.matrixWorld);var i=t.distanceTo(e);r[0].object.visible=!0;for(var o=1,a=r.length;o=r[o].distance;o++)r[o-1].object.visible=!1,r[o].object.visible=!0;for(;oa)){f.applyMatrix4(this.matrixWorld);var M=r.ray.origin.distanceTo(f);Mr.far||i.push({distance:M,point:p.clone().applyMatrix4(this.matrixWorld),index:b,face:null,faceIndex:null,object:this})}}else for(var b=0,x=g.length/3-1;ba)){f.applyMatrix4(this.matrixWorld);var M=r.ray.origin.distanceTo(f);Mr.far||i.push({distance:M,point:p.clone().applyMatrix4(this.matrixWorld),index:b,face:null,faceIndex:null,object:this})}}}else if(s.isGeometry)for(var T=s.vertices,S=T.length,b=0;ba)){f.applyMatrix4(this.matrixWorld);var M=r.ray.origin.distanceTo(f);Mr.far||i.push({distance:M,point:p.clone().applyMatrix4(this.matrixWorld),index:b,face:null,faceIndex:null,object:this})}}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),Ee.prototype=Object.assign(Object.create(we.prototype),{constructor:Ee,isLineSegments:!0}),Me.prototype=Object.create($.prototype),Me.prototype.constructor=Me,Me.prototype.isPointsMaterial=!0,Me.prototype.copy=function(t){return $.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this},Te.prototype=Object.assign(Object.create(lt.prototype),{constructor:Te,isPoints:!0,raycast:function(){var t=new h,e=new st,n=new nt;return function(r,i){function o(t,n){var o=e.distanceSqToPoint(t);if(or.far)return;i.push({distance:c,distanceToRay:Math.sqrt(o),point:s.clone(),index:n,face:null,object:a})}}var a=this,s=this.geometry,u=this.matrixWorld,c=r.params.Points.threshold;if(null===s.boundingSphere&&s.computeBoundingSphere(),n.copy(s.boundingSphere),n.applyMatrix4(u),!1!==r.ray.intersectsSphere(n)){t.getInverse(u),e.copy(r.ray).applyMatrix4(t);var h=c/((this.scale.x+this.scale.y+this.scale.z)/3),p=h*h,f=new l;if(s.isBufferGeometry){var d=s.index,m=s.attributes,v=m.position.array;if(null!==d)for(var g=d.array,y=0,b=g.length;y=-Number.EPSILON&&C>=-Number.EPSILON&&A>=-Number.EPSILON))return!1;return!0}return function(e,n){var r=e.length;if(r<3)return null;var i,o,a,s=[],u=[],c=[];if(Ps.area(e)>0)for(o=0;o2;){if(h--<=0)return console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()"),n?c:s;if(i=o,l<=i&&(i=0),o=i+1,l<=o&&(o=0),a=o+1,l<=a&&(a=0),t(e,i,o,a,l,u)){var p,f,d,m,v;for(p=u[i],f=u[o],d=u[a],s.push([e[p],e[f],e[d]]),c.push([u[i],u[o],u[a]]),m=o,v=o+1;v2&&t[e-1].equals(t[0])&&t.pop()}function r(t,e,n){return t.x!==e.x?t.xNumber.EPSILON){var d;if(p>0){if(f<0||f>p)return[];if((d=c*l-u*h)<0||d>p)return[]}else{if(f>0||f0||dT?[]:x===T?o?[]:[y]:_<=T?[y,b]:[y,E]}function o(t,e,n,r){var i=e.x-t.x,o=e.y-t.y,a=n.x-t.x,s=n.y-t.y,u=r.x-t.x,c=r.y-t.y,l=i*s-o*a,h=i*c-o*u;if(Math.abs(l)>Number.EPSILON){var p=u*s-c*a;return l>0?h>=0&&p>=0:h>=0||p>=0}return h>0}n(t),e.forEach(n);for(var a,s,u,c,l,h,p={},f=t.concat(),d=0,m=e.length;d0;){if(--_<0){console.log("Infinite Loop! Holes left:"+v.length+", Probably Hole outside Shape!");break}for(a=x;ar&&(a=0);var s=o(m[t],m[i],m[a],n[e]);if(!s)return!1;var u=n.length-1,c=e-1;c<0&&(c=u);var l=e+1;return l>u&&(l=0),!!(s=o(n[e],n[c],n[l],m[t]))}(a,w)&&!function(t,e){var n,r,o;for(n=0;n0)return!0;return!1}(s,u)&&!function(t,n){var r,o,a,s,u;for(r=0;r0)return!0;return!1}(s,u)){r=w,v.splice(y,1),h=m.slice(0,a+1),p=m.slice(a),f=n.slice(r),d=n.slice(0,r+1),m=h.concat(f).concat(d).concat(p),x=a;break}if(r>=0)break;g[l]=!0}if(r>=0)break}}return m}(t,e),g=Ps.triangulate(v,!1);for(a=0,s=g.length;aNumber.EPSILON){var f=Math.sqrt(h),d=Math.sqrt(c*c+l*l),m=e.x-u/f,v=e.y+s/f,g=n.x-l/d,y=n.y+c/d,b=((g-m)*l-(y-v)*c)/(s*l-u*c);r=m+s*b-t.x,o=v+u*b-t.y;var x=r*r+o*o;if(x<=2)return new i(r,o);a=Math.sqrt(x/2)}else{var _=!1;s>Number.EPSILON?c>Number.EPSILON&&(_=!0):s<-Number.EPSILON?c<-Number.EPSILON&&(_=!0):Math.sign(u)===Math.sign(l)&&(_=!0),_?(r=-u,o=s,a=Math.sqrt(h)):(r=s,o=u,a=Math.sqrt(h/2))}return new i(r/a,o/a)}function o(t,e){var n,r;for(W=t.length;--W>=0;){n=W,r=W-1,r<0&&(r=t.length-1);var i=0,o=_+2*y;for(i=0;i=0;k--){for(F=k/y,B=v*Math.cos(F*Math.PI/2),U=g*Math.sin(F*Math.PI/2),W=0,X=D.length;W0||0===t.search(/^data\:image\/jpeg/);i.format=r?Pa:Ra,i.image=n,i.needsUpdate=!0,void 0!==e&&e(i)},n,r),i},setCrossOrigin:function(t){return this.crossOrigin=t,this},setPath:function(t){return this.path=t,this}}),Ln.prototype=Object.assign(Object.create(lt.prototype),{constructor:Ln,isLight:!0,copy:function(t){return lt.prototype.copy.call(this,t),this.color.copy(t.color),this.intensity=t.intensity,this},toJSON:function(t){var e=lt.prototype.toJSON.call(this,t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(e.object.distance=this.distance),void 0!==this.angle&&(e.object.angle=this.angle),void 0!==this.decay&&(e.object.decay=this.decay),void 0!==this.penumbra&&(e.object.penumbra=this.penumbra),void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON()),e}}),On.prototype=Object.assign(Object.create(Ln.prototype),{constructor:On,isHemisphereLight:!0,copy:function(t){return Ln.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}),Object.assign(In.prototype,{copy:function(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var t={};return 0!==this.bias&&(t.bias=this.bias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}),Nn.prototype=Object.assign(Object.create(In.prototype),{constructor:Nn,isSpotLightShadow:!0,update:function(t){var e=2*fs.RAD2DEG*t.angle,n=this.mapSize.width/this.mapSize.height,r=t.distance||500,i=this.camera;e===i.fov&&n===i.aspect&&r===i.far||(i.fov=e,i.aspect=n,i.far=r,i.updateProjectionMatrix())}}),Dn.prototype=Object.assign(Object.create(Ln.prototype),{constructor:Dn,isSpotLight:!0,copy:function(t){return Ln.prototype.copy.call(this,t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}),kn.prototype=Object.assign(Object.create(Ln.prototype),{constructor:kn,isPointLight:!0,copy:function(t){return Ln.prototype.copy.call(this,t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}),Un.prototype=Object.assign(Object.create(In.prototype),{constructor:Un}),Fn.prototype=Object.assign(Object.create(Ln.prototype),{constructor:Fn,isDirectionalLight:!0,copy:function(t){return Ln.prototype.copy.call(this,t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}),Bn.prototype=Object.assign(Object.create(Ln.prototype),{constructor:Bn,isAmbientLight:!0});var Ns={arraySlice:function(t,e,n){return Ns.isTypedArray(t)?new t.constructor(t.subarray(e,n)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n&&t.constructor===e?t:"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){function e(e,n){return t[e]-t[n]}for(var n=t.length,r=new Array(n),i=0;i!==n;++i)r[i]=i;return r.sort(e),r},sortedArray:function(t,e,n){for(var r=t.length,i=new t.constructor(r),o=0,a=0;a!==r;++o)for(var s=n[o]*e,u=0;u!==e;++u)i[a++]=t[s+u];return i},flattenJSON:function(t,e,n,r){for(var i=1,o=t[0];void 0!==o&&void 0===o[r];)o=t[i++];if(void 0!==o){var a=o[r];if(void 0!==a)if(Array.isArray(a))do{a=o[r],void 0!==a&&(e.push(o.time),n.push.apply(n,a)),o=t[i++]}while(void 0!==o);else if(void 0!==a.toArray)do{a=o[r],void 0!==a&&(e.push(o.time),a.toArray(n,n.length)),o=t[i++]}while(void 0!==o);else do{a=o[r],void 0!==a&&(e.push(o.time),n.push(a)),o=t[i++]}while(void 0!==o)}}};zn.prototype={constructor:zn,evaluate:function(t){var e=this.parameterPositions,n=this._cachedIndex,r=e[n],i=e[n-1];t:{e:{var o;n:{r:if(!(t=i)break t;var s=e[1];t=i)break e}o=n,n=0}}for(;n>>1;te;)--o;if(++o,0!==i||o!==r){i>=o&&(o=Math.max(o,1),i=o-1);var a=this.getValueSize();this.times=Ns.arraySlice(n,i,o),this.values=Ns.arraySlice(this.values,i*a,o*a)}return this},validate:function(){var t=!0,e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("invalid value size in track",this),t=!1);var n=this.times,r=this.values,i=n.length;0===i&&(console.error("track is empty",this),t=!1);for(var o=null,a=0;a!==i;a++){var s=n[a];if("number"==typeof s&&isNaN(s)){console.error("time is not a valid number",this,a,s),t=!1;break}if(null!==o&&o>s){console.error("out of order keys",this,a,s,o),t=!1;break}o=s}if(void 0!==r&&Ns.isTypedArray(r))for(var a=0,u=r.length;a!==u;++a){var c=r[a];if(isNaN(c)){console.error("value is not a valid number",this,a,c),t=!1;break}}return t},optimize:function(){for(var t=this.times,e=this.values,n=this.getValueSize(),r=this.getInterpolation()===Ka,i=1,o=t.length-1,a=1;a0){t[i]=t[o];for(var d=o*n,m=i*n,p=0;p!==n;++p)e[m+p]=e[d+p];++i}return i!==t.length&&(this.times=Ns.arraySlice(t,0,i),this.values=Ns.arraySlice(e,0,i*n)),this}},Wn.prototype=Object.assign(Object.create(Ds),{constructor:Wn,ValueTypeName:"vector"}),Xn.prototype=Object.assign(Object.create(zn.prototype),{constructor:Xn,interpolate_:function(t,e,n,r){for(var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize,s=t*a,u=(n-e)/(r-e),l=s+a;s!==l;s+=4)c.slerpFlat(i,0,o,s-a,o,s,u);return i}}),qn.prototype=Object.assign(Object.create(Ds),{constructor:qn,ValueTypeName:"quaternion",DefaultInterpolation:Za,InterpolantFactoryMethodLinear:function(t){return new Xn(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),Yn.prototype=Object.assign(Object.create(Ds),{constructor:Yn,ValueTypeName:"number"}),Zn.prototype=Object.assign(Object.create(Ds),{constructor:Zn,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:Ya,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Kn.prototype=Object.assign(Object.create(Ds),{constructor:Kn,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:Ya,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Jn.prototype=Object.assign(Object.create(Ds),{constructor:Jn,ValueTypeName:"color"}),$n.prototype=Ds,Ds.constructor=$n,Object.assign($n,{parse:function(t){if(void 0===t.type)throw new Error("track type undefined, can not parse");var e=$n._getTrackTypeForValueTypeName(t.type);if(void 0===t.times){var n=[],r=[];Ns.flattenJSON(t.keys,n,r,"value"),t.times=n,t.values=r}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)},toJSON:function(t){var e,n=t.constructor;if(void 0!==n.toJSON)e=n.toJSON(t);else{e={name:t.name,times:Ns.convertArray(t.times,Array),values:Ns.convertArray(t.values,Array)};var r=t.getInterpolation();r!==t.DefaultInterpolation&&(e.interpolation=r)}return e.type=t.ValueTypeName,e},_getTrackTypeForValueTypeName:function(t){switch(t.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return Yn;case"vector":case"vector2":case"vector3":case"vector4":return Wn;case"color":return Jn;case"quaternion":return qn;case"bool":case"boolean":return Kn;case"string":return Zn}throw new Error("Unsupported typeName: "+t)}}),Qn.prototype={constructor:Qn,resetDuration:function(){for(var t=this.tracks,e=0,n=0,r=t.length;n!==r;++n){var i=this.tracks[n];e=Math.max(e,i.times[i.times.length-1])}this.duration=e},trim:function(){for(var t=0;t1){var c=u[1],l=r[c];l||(r[c]=l=[]),l.push(s)}}var h=[];for(var c in r)h.push(Qn.CreateFromMorphTargetSequence(c,r[c],e,n));return h},parseAnimation:function(t,e){if(!t)return console.error(" no animation in JSONLoader data"),null;for(var n=function(t,e,n,r,i){if(0!==n.length){var o=[],a=[];Ns.flattenJSON(n,o,a,r),0!==o.length&&i.push(new t(e,o,a))}},r=[],i=t.name||"default",o=t.length||-1,a=t.fps||30,s=t.hierarchy||[],u=0;u1?t.skinWeights[r+1]:0,u=e>2?t.skinWeights[r+2]:0,c=e>3?t.skinWeights[r+3]:0;n.skinWeights.push(new a(o,s,u,c))}if(t.skinIndices)for(var r=0,i=t.skinIndices.length;r1?t.skinIndices[r+1]:0,p=e>2?t.skinIndices[r+2]:0,f=e>3?t.skinIndices[r+3]:0;n.skinIndices.push(new a(l,h,p,f))}n.bones=t.bones,n.bones&&n.bones.length>0&&(n.skinWeights.length!==n.skinIndices.length||n.skinIndices.length!==n.vertices.length)&&console.warn("When skinning, number of vertices ("+n.vertices.length+"), skinIndices ("+n.skinIndices.length+"), and skinWeights ("+n.skinWeights.length+") should match.")}(),function(e){if(void 0!==t.morphTargets)for(var r=0,i=t.morphTargets.length;r0){console.warn('THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.');for(var h=n.faces,p=t.morphColors[0].colors,r=0,i=h.length;r0&&(n.animations=e)}(),n.computeFaceNormals(),n.computeBoundingSphere(),void 0===t.materials||0===t.materials.length)return{geometry:n};var o=nr.prototype.initMaterials(t.materials,e,this.crossOrigin);return{geometry:n,materials:o}}}),Object.assign(ir.prototype,{load:function(t,e,n,r){""===this.texturePath&&(this.texturePath=t.substring(0,t.lastIndexOf("/")+1));var i=this;new Tn(i.manager).load(t,function(n){var o=null;try{o=JSON.parse(n)}catch(e){return void 0!==r&&r(e),void console.error("THREE:ObjectLoader: Can't parse "+t+".",e.message)}var a=o.metadata;if(void 0===a||void 0===a.type||"geometry"===a.type.toLowerCase())return void console.error("THREE.ObjectLoader: Can't load "+t+". Use THREE.JSONLoader instead.");i.parse(o,e)},n,r)},setTexturePath:function(t){this.texturePath=t},setCrossOrigin:function(t){this.crossOrigin=t},parse:function(t,e){var n=this.parseGeometries(t.geometries),r=this.parseImages(t.images,function(){void 0!==e&&e(a)}),i=this.parseTextures(t.textures,r),o=this.parseMaterials(t.materials,i),a=this.parseObject(t.object,n,o);return t.animations&&(a.animations=this.parseAnimations(t.animations)),void 0!==t.images&&0!==t.images.length||void 0!==e&&e(a),a},parseGeometries:function(t){var e={};if(void 0!==t)for(var n=new rr,r=new er,i=0,o=t.length;i0){var i=new Mn(e),o=new Cn(i);o.setCrossOrigin(this.crossOrigin);for(var a=0,s=t.length;a0?new xe(s,u):new Rt(s,u);break;case"LOD":a=new ge;break;case"Line":a=new we(i(e.geometry),o(e.material),e.mode);break;case"LineSegments":a=new Ee(i(e.geometry),o(e.material));break;case"PointCloud":case"Points":a=new Te(i(e.geometry),o(e.material));break;case"Sprite":a=new ve(o(e.material));break;case"Group":a=new Se;break;case"SkinnedMesh":console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh type. Instantiates Object3D instead.");default:a=new lt}if(a.uuid=e.uuid,void 0!==e.name&&(a.name=e.name),void 0!==e.matrix?(t.fromArray(e.matrix),t.decompose(a.position,a.quaternion,a.scale)):(void 0!==e.position&&a.position.fromArray(e.position),void 0!==e.rotation&&a.rotation.fromArray(e.rotation),void 0!==e.quaternion&&a.quaternion.fromArray(e.quaternion),void 0!==e.scale&&a.scale.fromArray(e.scale)),void 0!==e.castShadow&&(a.castShadow=e.castShadow),void 0!==e.receiveShadow&&(a.receiveShadow=e.receiveShadow),e.shadow&&(void 0!==e.shadow.bias&&(a.shadow.bias=e.shadow.bias),void 0!==e.shadow.radius&&(a.shadow.radius=e.shadow.radius),void 0!==e.shadow.mapSize&&a.shadow.mapSize.fromArray(e.shadow.mapSize),void 0!==e.shadow.camera&&(a.shadow.camera=this.parseObject(e.shadow.camera))),void 0!==e.visible&&(a.visible=e.visible),void 0!==e.userData&&(a.userData=e.userData),void 0!==e.children)for(var c in e.children)a.add(this.parseObject(e.children[c],n,r));if("LOD"===e.type)for(var l=e.levels,h=0;h0)){u=i;break}u=i-1}if(i=u,r[i]===n){var c=i/(o-1);return c}var l=r[i],h=r[i+1],p=h-l,f=(n-l)/p,c=(i+f)/(o-1);return c},getTangent:function(t){var e=t-1e-4,n=t+1e-4;e<0&&(e=0),n>1&&(n=1);var r=this.getPoint(e);return this.getPoint(n).clone().sub(r).normalize()},getTangentAt:function(t){var e=this.getUtoTmapping(t);return this.getTangent(e)},computeFrenetFrames:function(t,e){var n,r,i,o=new l,a=[],s=[],u=[],c=new l,p=new h;for(n=0;n<=t;n++)r=n/t,a[n]=this.getTangentAt(r),a[n].normalize();s[0]=new l,u[0]=new l;var f=Number.MAX_VALUE,d=Math.abs(a[0].x),m=Math.abs(a[0].y),v=Math.abs(a[0].z);for(d<=f&&(f=d,o.set(1,0,0)),m<=f&&(f=m,o.set(0,1,0)),v<=f&&o.set(0,0,1),c.crossVectors(a[0],o).normalize(),s[0].crossVectors(a[0],c),u[0].crossVectors(a[0],s[0]),n=1;n<=t;n++)s[n]=s[n-1].clone(),u[n]=u[n-1].clone(),c.crossVectors(a[n-1],a[n]),c.length()>Number.EPSILON&&(c.normalize(),i=Math.acos(fs.clamp(a[n-1].dot(a[n]),-1,1)),s[n].applyMatrix4(p.makeRotationAxis(c,i))),u[n].crossVectors(a[n],s[n]);if(!0===e)for(i=Math.acos(fs.clamp(s[0].dot(s[t]),-1,1)),i/=t,a[0].dot(c.crossVectors(s[0],s[t]))>0&&(i=-i),n=1;n<=t;n++)s[n].applyMatrix4(p.makeRotationAxis(a[n],i*n)),u[n].crossVectors(a[n],s[n]);return{tangents:a,normals:s,binormals:u}}},vr.prototype=Object.create(mr.prototype),vr.prototype.constructor=vr,vr.prototype.isLineCurve=!0,vr.prototype.getPoint=function(t){if(1===t)return this.v2.clone();var e=this.v2.clone().sub(this.v1);return e.multiplyScalar(t).add(this.v1),e},vr.prototype.getPointAt=function(t){return this.getPoint(t)},vr.prototype.getTangent=function(t){return this.v2.clone().sub(this.v1).normalize()},gr.prototype=Object.assign(Object.create(mr.prototype),{constructor:gr,add:function(t){this.curves.push(t)},closePath:function(){var t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new vr(e,t))},getPoint:function(t){for(var e=t*this.getLength(),n=this.getCurveLengths(),r=0;r=e){var i=n[r]-e,o=this.curves[r],a=o.getLength(),s=0===a?0:1-i/a;return o.getPointAt(s)}r++}return null},getLength:function(){var t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var t=[],e=0,n=0,r=this.curves.length;n1&&!n[n.length-1].equals(n[0])&&n.push(n[0]),n},createPointsGeometry:function(t){var e=this.getPoints(t);return this.createGeometry(e)},createSpacedPointsGeometry:function(t){var e=this.getSpacedPoints(t);return this.createGeometry(e)},createGeometry:function(t){for(var e=new Ct,n=0,r=t.length;ne;)n-=e;ne.length-2?e.length-1:r+1],c=e[r>e.length-3?e.length-1:r+2];return new i(or(o,a.x,s.x,u.x,c.x),or(o,a.y,s.y,u.y,c.y))},xr.prototype=Object.create(mr.prototype),xr.prototype.constructor=xr,xr.prototype.getPoint=function(t){var e=this.v0,n=this.v1,r=this.v2,o=this.v3;return new i(dr(t,e.x,n.x,r.x,o.x),dr(t,e.y,n.y,r.y,o.y))},_r.prototype=Object.create(mr.prototype),_r.prototype.constructor=_r,_r.prototype.getPoint=function(t){var e=this.v0,n=this.v1,r=this.v2;return new i(cr(t,e.x,n.x,r.x),cr(t,e.y,n.y,r.y))};var ks=Object.assign(Object.create(gr.prototype),{fromPoints:function(t){this.moveTo(t[0].x,t[0].y);for(var e=1,n=t.length;e0){var c=u.getPoint(0);c.equals(this.currentPoint)||this.lineTo(c.x,c.y)}this.curves.push(u);var l=u.getPoint(1);this.currentPoint.copy(l)}});wr.prototype=ks,ks.constructor=wr,Er.prototype=Object.assign(Object.create(ks),{constructor:Er,getPointsHoles:function(t){for(var e=[],n=0,r=this.holes.length;n1){for(var g=!1,y=[],b=0,x=p.length;bNumber.EPSILON){if(c<0&&(a=e[o],u=-u,s=e[i],c=-c),t.ys.y)continue;if(t.y===a.y){if(t.x===a.x)return!0}else{var l=c*(t.x-a.x)-u*(t.y-a.y);if(0===l)return!0;if(l<0)continue;r=!r}}else{if(t.y!==a.y)continue;if(s.x<=t.x&&t.x<=a.x||a.x<=t.x&&t.x<=s.x)return!0}}return r})(E.p,p[T].p)&&(b!==T&&y.push({froms:b,tos:T,hole:w}),M?(M=!1,h[T].push(E)):g=!0);M&&h[b].push(E)}y.length>0&&(g||(f=h))}for(var S,m=0,A=p.length;m0){this.source.connect(this.filters[0]);for(var t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(var t=1,e=this.filters.length;t=.5)for(var o=0;o!==i;++o)t[e+o]=t[n+o]},_slerp:function(t,e,n,r,i){c.slerpFlat(t,e,t,e,t,n,r)},_lerp:function(t,e,n,r,i){for(var o=1-r,a=0;a!==i;++a){var s=e+a;t[s]=t[s]*o+t[n+a]*r}}},kr.prototype={constructor:kr,getValue:function(t,e){this.bind(),this.getValue(t,e)},setValue:function(t,e){this.bind(),this.setValue(t,e)},bind:function(){var t=this.node,e=this.parsedPath,n=e.objectName,r=e.propertyName,i=e.propertyIndex;if(t||(t=kr.findNode(this.rootNode,e.nodeName)||this.rootNode,this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t)return void console.error(" trying to update node for track: "+this.path+" but it wasn't found.");if(n){var o=e.objectIndex;switch(n){case"materials":if(!t.material)return void console.error(" can not bind to material as node does not have a material",this);if(!t.material.materials)return void console.error(" can not bind to material.materials as node.material does not have a materials array",this);t=t.material.materials;break;case"bones":if(!t.skeleton)return void console.error(" can not bind to bones as node does not have a skeleton",this);t=t.skeleton.bones;for(var a=0;a=n){var h=n++,p=e[h];r[p.uuid]=l,e[l]=p,r[c]=h,e[h]=u;for(var f=0,d=o;f!==d;++f){var m=i[f],v=m[h],g=m[l];m[l]=v,m[h]=g}}}this.nCachedObjects_=n},uncache:function(t){for(var e=this._objects,n=e.length,r=this.nCachedObjects_,i=this._indicesByUUID,o=this._bindings,a=o.length,s=0,u=arguments.length;s!==u;++s){var c=arguments[s],l=c.uuid,h=i[l];if(void 0!==h)if(delete i[l],h0)for(var u=this._interpolants,c=this._propertyBindings,l=0,h=u.length;l!==h;++l)u[l].evaluate(a),c[l].accumulate(r,s)},_updateWeight:function(t){var e=0;if(this.enabled){e=this.weight;var n=this._weightInterpolant;if(null!==n){var r=n.evaluate(t)[0];e*=r,t>n.parameterPositions[1]&&(this.stopFading(),0===r&&(this.enabled=!1))}}return this._effectiveWeight=e,e},_updateTimeScale:function(t){var e=0;if(!this.paused){e=this.timeScale;var n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e},_updateTime:function(t){var e=this.time+t;if(0===t)return e;var n=this._clip.duration,r=this.loop,i=this._loopCount;if(r===Wa){-1===i&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(e>=n)e=n;else{if(!(e<0))break t;e=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{var o=r===qa;if(-1===i&&(t>=0?(i=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),e>=n||e<0){var a=Math.floor(e/n);e-=n*a,i+=Math.abs(a);var s=this.repetitions-i;if(s<0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,e=t>0?n:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(0===s){var u=t<0;this._setEndings(u,!u,o)}else this._setEndings(!1,!1,o);this._loopCount=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:a})}}if(o&&1==(1&i))return this.time=e,n-e}return this.time=e,e},_setEndings:function(t,e,n){var r=this._interpolantSettings;n?(r.endingStart=$a,r.endingEnd=$a):(r.endingStart=t?this.zeroSlopeAtStart?$a:Ja:Qa,r.endingEnd=e?this.zeroSlopeAtEnd?$a:Ja:Qa)},_scheduleFading:function(t,e,n){var r=this._mixer,i=r.time,o=this._weightInterpolant;null===o&&(o=r._lendControlInterpolant(),this._weightInterpolant=o);var a=o.parameterPositions,s=o.sampleValues;return a[0]=i,s[0]=e,a[1]=i+t,s[1]=n,this}},Br.prototype={constructor:Br,clipAction:function(t,e){var n=e||this._root,r=n.uuid,i="string"==typeof t?Qn.findByName(n,t):t,o=null!==i?i.uuid:t,a=this._actionsByClip[o],s=null;if(void 0!==a){var u=a.actionByRoot[r];if(void 0!==u)return u;s=a.knownActions[0],null===i&&(i=s._clip)}if(null===i)return null;var c=new Fr(this,i,e);return this._bindAction(c,s),this._addInactiveAction(c,o,r),c},existingAction:function(t,e){var n=e||this._root,r=n.uuid,i="string"==typeof t?Qn.findByName(n,t):t,o=i?i.uuid:t,a=this._actionsByClip[o];return void 0!==a?a.actionByRoot[r]||null:null},stopAllAction:function(){var t=this._actions,e=this._nActiveActions,n=this._bindings,r=this._nActiveBindings;this._nActiveActions=0,this._nActiveBindings=0;for(var i=0;i!==e;++i)t[i].reset();for(var i=0;i!==r;++i)n[i].useCount=0;return this},update:function(t){t*=this.timeScale;for(var e=this._actions,n=this._nActiveActions,r=this.time+=t,i=Math.sign(t),o=this._accuIndex^=1,a=0;a!==n;++a){var s=e[a];s.enabled&&s._update(r,t,i,o)}for(var u=this._bindings,c=this._nActiveBindings,a=0;a!==c;++a)u[a].apply(o);return this},getRoot:function(){return this._root},uncacheClip:function(t){var e=this._actions,n=t.uuid,r=this._actionsByClip,i=r[n];if(void 0!==i){for(var o=i.knownActions,a=0,s=o.length;a!==s;++a){var u=o[a];this._deactivateAction(u);var c=u._cacheIndex,l=e[e.length-1];u._cacheIndex=null,u._byClipCacheIndex=null,l._cacheIndex=c,e[c]=l,e.pop(),this._removeInactiveBindingsForAction(u)}delete r[n]}},uncacheRoot:function(t){var e=t.uuid,n=this._actionsByClip;for(var r in n){var i=n[r].actionByRoot,o=i[e];void 0!==o&&(this._deactivateAction(o),this._removeInactiveAction(o))}var a=this._bindingsByRootAndName,s=a[e];if(void 0!==s)for(var u in s){var c=s[u];c.restoreOriginalState(),this._removeInactiveBinding(c)}},uncacheAction:function(t,e){var n=this.existingAction(t,e);null!==n&&(this._deactivateAction(n),this._removeInactiveAction(n))}},Object.assign(Br.prototype,{_bindAction:function(t,e){var n=t._localRoot||this._root,r=t._clip.tracks,i=r.length,o=t._propertyBindings,a=t._interpolants,s=n.uuid,u=this._bindingsByRootAndName,c=u[s];void 0===c&&(c={},u[s]=c);for(var l=0;l!==i;++l){var h=r[l],p=h.name,f=c[p];if(void 0!==f)o[l]=f;else{if(void 0!==(f=o[l])){null===f._cacheIndex&&(++f.referenceCount,this._addInactiveBinding(f,s,p));continue}var d=e&&e._propertyBindings[l].binding.parsedPath;f=new Dr(kr.create(n,p,d),h.ValueTypeName,h.getValueSize()),++f.referenceCount,this._addInactiveBinding(f,s,p),o[l]=f}a[l].resultBuffer=f.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){var e=(t._localRoot||this._root).uuid,n=t._clip.uuid,r=this._actionsByClip[n];this._bindAction(t,r&&r.knownActions[0]),this._addInactiveAction(t,n,e)}for(var i=t._propertyBindings,o=0,a=i.length;o!==a;++o){var s=i[o];0==s.useCount++&&(this._lendBinding(s),s.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){for(var e=t._propertyBindings,n=0,r=e.length;n!==r;++n){var i=e[n];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){var e=t._cacheIndex;return null!==e&&e1){var c=u[1];r[c]||(r[c]={start:1/0,end:-1/0});var l=r[c];ol.end&&(l.end=o),e||(e=c)}}for(var c in r){var l=r[c];this.createAnimation(c,l.start,l.end,t)}this.firstAnimation=e},$r.prototype.setAnimationDirectionForward=function(t){var e=this.animationsMap[t];e&&(e.direction=1,e.directionBackwards=!1)},$r.prototype.setAnimationDirectionBackward=function(t){var e=this.animationsMap[t];e&&(e.direction=-1,e.directionBackwards=!0)},$r.prototype.setAnimationFPS=function(t,e){var n=this.animationsMap[t];n&&(n.fps=e,n.duration=(n.end-n.start)/n.fps)},$r.prototype.setAnimationDuration=function(t,e){var n=this.animationsMap[t];n&&(n.duration=e,n.fps=(n.end-n.start)/n.duration)},$r.prototype.setAnimationWeight=function(t,e){var n=this.animationsMap[t];n&&(n.weight=e)},$r.prototype.setAnimationTime=function(t,e){var n=this.animationsMap[t];n&&(n.time=e)},$r.prototype.getAnimationTime=function(t){var e=0,n=this.animationsMap[t];return n&&(e=n.time),e},$r.prototype.getAnimationDuration=function(t){var e=-1,n=this.animationsMap[t];return n&&(e=n.duration),e},$r.prototype.playAnimation=function(t){var e=this.animationsMap[t];e?(e.time=0,e.active=!0):console.warn("THREE.MorphBlendMesh: animation["+t+"] undefined in .playAnimation()")},$r.prototype.stopAnimation=function(t){var e=this.animationsMap[t];e&&(e.active=!1)},$r.prototype.update=function(t){for(var e=0,n=this.animationsList.length;er.duration||r.time<0)&&(r.direction*=-1,r.time>r.duration&&(r.time=r.duration,r.directionBackwards=!0),r.time<0&&(r.time=0,r.directionBackwards=!1)):(r.time=r.time%r.duration,r.time<0&&(r.time+=r.duration));var o=r.start+fs.clamp(Math.floor(r.time/i),0,r.length-1),a=r.weight;o!==r.currentFrame&&(this.morphTargetInfluences[r.lastFrame]=0,this.morphTargetInfluences[r.currentFrame]=1*a,this.morphTargetInfluences[o]=0,r.lastFrame=r.currentFrame,r.currentFrame=o);var s=r.time%i/i;r.directionBackwards&&(s=1-s),r.currentFrame!==r.lastFrame?(this.morphTargetInfluences[r.currentFrame]=s*a,this.morphTargetInfluences[r.lastFrame]=(1-s)*a):this.morphTargetInfluences[r.currentFrame]=a}}},Qr.prototype=Object.create(lt.prototype),Qr.prototype.constructor=Qr,Qr.prototype.isImmediateRenderObject=!0,ti.prototype=Object.create(Ee.prototype),ti.prototype.constructor=ti,ti.prototype.update=function(){var t=new l,e=new l,n=new rt;return function(){var r=["a","b","c"];this.object.updateMatrixWorld(!0),n.getNormalMatrix(this.object.matrixWorld);var i=this.object.matrixWorld,o=this.geometry.attributes.position,a=this.object.geometry;if(a&&a.isGeometry)for(var s=a.vertices,u=a.faces,c=0,l=0,h=u.length;l.99999?this.quaternion.set(0,0,0,1):n.y<-.99999?this.quaternion.set(1,0,0,0):(e.set(n.z,0,-n.x).normalize(),t=Math.acos(n.y),this.quaternion.setFromAxisAngle(e,t))}}(),pi.prototype.setLength=function(t,e,n){void 0===e&&(e=.2*t),void 0===n&&(n=.2*e),this.line.scale.set(1,Math.max(0,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()},pi.prototype.setColor=function(t){this.line.material.color.copy(t),this.cone.material.color.copy(t)},fi.prototype=Object.create(Ee.prototype),fi.prototype.constructor=fi;var js=new l,Vs=new di,Hs=new di,Gs=new di;mi.prototype=Object.create(mr.prototype),mi.prototype.constructor=mi,mi.prototype.getPoint=function(t){var e=this.points,n=e.length;n<2&&console.log("duh, you need at least 2 points");var r=(n-(this.closed?0:1))*t,i=Math.floor(r),o=r-i;this.closed?i+=i>0?0:(Math.floor(Math.abs(i)/e.length)+1)*e.length:0===o&&i===n-1&&(i=n-2,o=1);var a,s,u,c;if(this.closed||i>0?a=e[(i-1)%n]:(js.subVectors(e[0],e[1]).add(e[0]),a=js),s=e[i%n],u=e[(i+1)%n],this.closed||i+26?u-6:0),l=6;l>",s=s||i,null==r[i]){if(n){var e=null===r[i]?"null":"undefined";return new Error("The "+a+" `"+s+"` is marked as required in `"+o+"`, but its value is `"+e+"`.")}return null}return t.apply(void 0,[r,i,o,a,s].concat(c))})}var r=n.bind(null,!1);return r.isRequired=n.bind(null,!0),r}function o(t,e){return"symbol"===t||("Symbol"===e["@@toStringTag"]||"function"==typeof Symbol&&e instanceof Symbol)}function a(t){var e=void 0===t?"undefined":M(t);return Array.isArray(t)?"array":t instanceof RegExp?"object":o(e,t)?"symbol":e}function s(t){var e=a(t);if("object"===e){if(t instanceof Date)return"date";if(t instanceof RegExp)return"regexp"}return e}function u(t,n){return i(function(r,i,o,u,c){return e.untracked(function(){if(t&&a(r[i])===n.toLowerCase())return null;var u=void 0;switch(n){case"Array":u=e.isObservableArray;break;case"Object":u=e.isObservableObject;break;case"Map":u=e.isObservableMap;break;default:throw new Error("Unexpected mobxType: "+n)}var l=r[i];if(!u(l)){var h=s(l),p=t?" or javascript `"+n.toLowerCase()+"`":"";return new Error("Invalid prop `"+c+"` of type `"+h+"` supplied to `"+o+"`, expected `mobx.Observable"+n+"`"+p+".")}return null})})}function c(t,n){return i(function(r,i,o,a,s){for(var c=arguments.length,l=Array(c>5?c-5:0),h=5;h2&&void 0!==arguments[2]&&arguments[2],r=t[e],i=K[e],o=r?!0===n?function(){i.apply(this,arguments),r.apply(this,arguments)}:function(){r.apply(this,arguments),i.apply(this,arguments)}:i;t[e]=o}function b(t,e){if(null==t||null==e||"object"!==(void 0===t?"undefined":M(t))||"object"!==(void 0===e?"undefined":M(e)))return t!==e;var n=Object.keys(t);if(n.length!==Object.keys(e).length)return!0;for(var r=void 0,i=n.length-1;r=n[i];i--)if(e[r]!==t[r])return!0;return!1}function x(t,e){if("string"==typeof t)throw new Error("Store names should be provided as array");if(Array.isArray(t))return X||(X=!0,console.warn('Mobx observer: Using observer to inject stores is deprecated since 4.0. Use `@inject("store1", "store2") @observer ComponentClass` or `inject("store1", "store2")(observer(componentClass))` instead of `@observer(["store1", "store2"]) ComponentClass`')),e?f.apply(null,t)(x(e)):function(e){return x(t,e)};var r=t;if(!0===r.isMobxInjector&&console.warn("Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'"),!("function"!=typeof r||r.prototype&&r.prototype.render||r.isReactClass||w.Component.isPrototypeOf(r))){var i,o;return x((o=i=function(t){function e(){return T(this,e),C(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return A(e,t),S(e,[{key:"render",value:function(){return r.call(this,this.props,this.context)}}]),e}(n.Component),i.displayName=r.displayName||r.name,i.contextTypes=r.contextTypes,i.propTypes=r.propTypes,i.defaultProps=r.defaultProps,o))}if(!r)throw new Error("Please pass a valid component to 'observer'");return _(r.prototype||r),r.isMobXReactObserver=!0,r}function _(t){y(t,"componentWillMount",!0),["componentDidMount","componentWillUnmount","componentDidUpdate"].forEach(function(e){y(t,e)}),t.shouldComponentUpdate||(t.shouldComponentUpdate=K.shouldComponentUpdate)}var w="default"in n?n.default:n,E="default"in r?r.default:r,M="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},T=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},S=function(){function t(t,e){for(var n=0;n",i=this._reactInternalInstance&&this._reactInternalInstance._rootNodeID,o=!1,a=!1;t.call(this,"props"),t.call(this,"state");var s=this.render.bind(this),u=null,c=!1,l=function(){return u=new e.Reaction(r+"#"+i+".render()",function(){if(!c&&(c=!0,"function"==typeof n.componentWillReact&&n.componentWillReact(),!0!==n.__$mobxIsUnmounted)){var t=!0;try{a=!0,o||w.Component.prototype.forceUpdate.call(n),t=!1}finally{a=!1,t&&u.dispose()}}}),h.$mobx=u,n.render=h,h()},h=function(){c=!1;var t=void 0,r=void 0;if(u.track(function(){G&&(n.__$mobRenderStart=Date.now());try{r=e.extras.allowStateChanges(!1,s)}catch(e){t=e}G&&(n.__$mobRenderEnd=Date.now())}),t)throw Z.emit(t),t;return r};this.render=l}},componentWillUnmount:function(){if(!0!==W&&(this.render.$mobx&&this.render.$mobx.dispose(),this.__$mobxIsUnmounted=!0,G)){var t=d(this);t&&q&&q.delete(t),Y.emit({event:"destroy",component:this,node:t})}},componentDidMount:function(){G&&m(this)},componentDidUpdate:function(){G&&m(this)},shouldComponentUpdate:function(t,e){return W&&console.warn("[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side."),this.state!==e||b(this.props,t)}},J=x(function(t){return(0,t.children)()});J.propTypes={children:function(t,e,n,r,i){if("function"!=typeof t[e])return new Error("Invalid prop `"+i+"` of type `"+M(t[e])+"` supplied to `"+n+"`, expected `function`.")}};var $,Q,tt={children:!0,key:!0,ref:!0},et=(Q=$=function(t){function e(){return T(this,e),C(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return A(e,t),S(e,[{key:"render",value:function(){return w.Children.only(this.props.children)}},{key:"getChildContext",value:function(){var t={},e=this.context.mobxStores;if(e)for(var n in e)t[n]=e[n];for(var r in this.props)tt[r]||"suppressChangedStoreWarning"===r||(t[r]=this.props[r]);return{mobxStores:t}}},{key:"componentWillReceiveProps",value:function(t){if(Object.keys(t).length!==Object.keys(this.props).length&&console.warn("MobX Provider: The set of provided stores has changed. Please avoid changing stores as the change might not propagate to all children"),!t.suppressChangedStoreWarning)for(var e in t)tt[e]||this.props[e]===t[e]||console.warn("MobX Provider: Provided store '"+e+"' has changed. Please avoid replacing stores as the change might not propagate to all children")}}]),e}(n.Component),$.contextTypes={mobxStores:k},$.childContextTypes={mobxStores:k.isRequired},Q),nt=void 0;if(nt="mobx-react",!e)throw new Error(nt+" requires the MobX package");if(!w)throw new Error(nt+" requires React to be available");"function"==typeof r.unstable_batchedUpdates&&e.extras.setReactionScheduler(r.unstable_batchedUpdates);var rt=function(t){return Z.on(t)};"object"===("undefined"==typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__?"undefined":M(__MOBX_DEVTOOLS_GLOBAL_HOOK__))&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobxReact(t,e),t.propTypes=U,t.PropTypes=U,t.onError=rt,t.default=t,t.observer=x,t.Observer=J,t.renderReporter=Y,t.componentByNodeRegistery=q,t.trackComponents=v,t.useStaticRendering=g,t.Provider=et,t.inject=f,Object.defineProperty(t,"__esModule",{value:!0})})},function(t,e,n){"use strict";var r=!("undefined"==typeof window||!window.document||!window.document.createElement),i={canUseDOM:r,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:r&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:r&&!!window.screen,isInWorker:!r};t.exports=i},function(t,e){var n=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},function(t,e,n){"use strict";function r(t){return function(){return t}}var i=function(){};i.thatReturns=r,i.thatReturnsFalse=r(!1),i.thatReturnsTrue=r(!0),i.thatReturnsNull=r(null),i.thatReturnsThis=function(){return this},i.thatReturnsArgument=function(t){return t},t.exports=i},function(t,e,n){"use strict";var r=null;t.exports={debugTool:r}},function(t,e,n){"use strict";function r(){A.ReactReconcileTransaction&&_||l("123")}function i(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=p.getPooled(),this.reconcileTransaction=A.ReactReconcileTransaction.getPooled(!0)}function o(t,e,n,i,o,a){return r(),_.batchedUpdates(t,e,n,i,o,a)}function a(t,e){return t._mountOrder-e._mountOrder}function s(t){var e=t.dirtyComponentsLength;e!==g.length&&l("124",e,g.length),g.sort(a),y++;for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:0,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,a=new m.MeshBasicMaterial({map:M.load(t),transparent:!0,depthWrite:!1}),s=new m.Mesh(new m.PlaneGeometry(e,n),a);return s.position.set(r,i,o),s.overdraw=!0,s}function a(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:16711680,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:4,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,s=!(arguments.length>6&&void 0!==arguments[6])||arguments[6],u=new m.Path,c=u.createGeometry(t);c.computeLineDistances();var l=new m.LineDashedMaterial({color:e,dashSize:r,linewidth:n,gapSize:o}),h=new m.Line(c,l);return i(h,a),h.matrixAutoUpdate=s,s||h.updateMatrix(),h}function s(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:32,r=new m.CircleGeometry(t,n);return new m.Mesh(r,e)}function u(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.5,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:16777215,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,a=w(t.map(function(t){return[t.x,t.y]})),s=new m.ShaderMaterial(E({side:m.DoubleSide,diffuse:n,thickness:e,opacity:r,transparent:!0})),u=new m.Mesh(a,s);return i(u,o),u}function c(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:16711680,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,u=new m.Path,c=u.createGeometry(t),l=new m.LineBasicMaterial({color:e,linewidth:n,transparent:a,opacity:s}),h=new m.Line(c,l);return i(h,r),h.matrixAutoUpdate=o,!1===o&&h.updateMatrix(),h}function l(t,e,n){var r=new m.CubeGeometry(t.x,t.y,t.z),i=new m.MeshBasicMaterial({color:e}),o=new m.Mesh(r,i),a=new m.BoxHelper(o);return a.material.color=new m.Color(e),a.material.linewidth=n,a}function h(t,e,n,r,i){var o=new m.Vector3(0,t,0);return c([new m.Vector3(0,0,0),o,new m.Vector3(r/2,t-n,0),o,new m.Vector3(-r/2,t-n,0)],i,e,1)}function p(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=new m.Shape;if(e){n.moveTo(t[0].x,t[0].y);for(var r=1;r1&&void 0!==arguments[1]?arguments[1]:new m.MeshBasicMaterial({color:16711680}),n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=p(t,n),s=new m.Mesh(a,e);return i(s,r),s.matrixAutoUpdate=o,!1===o&&s.updateMatrix(),s}Object.defineProperty(e,"__esModule",{value:!0}),e.addOffsetZ=i,e.drawImage=o,e.drawDashedLineFromPoints=a,e.drawCircle=s,e.drawThickBandFromPoints=u,e.drawSegmentsFromPoints=c,e.drawBox=l,e.drawArrow=h,e.getShapeGeometryFromPoints=p,e.drawShapeFromPoints=f;var d=n(8),m=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(d),v=n(338),g=r(v),y=n(339),b=r(y),x=n(35),_=.04,w=(0,g.default)(m),E=(0,b.default)(m),M=new m.TextureLoader},function(t,e,n){t.exports=!n(31)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var r=n(44),i=n(106),o=n(78),a=Object.defineProperty;e.f=n(26)?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return a(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){"use strict";var r=n(4),i=(n(0),function(t){var e=this;if(e.instancePool.length){var n=e.instancePool.pop();return e.call(n,t),n}return new e(t)}),o=function(t,e){var n=this;if(n.instancePool.length){var r=n.instancePool.pop();return n.call(r,t,e),r}return new n(t,e)},a=function(t,e,n){var r=this;if(r.instancePool.length){var i=r.instancePool.pop();return r.call(i,t,e,n),i}return new r(t,e,n)},s=function(t,e,n,r){var i=this;if(i.instancePool.length){var o=i.instancePool.pop();return i.call(o,t,e,n,r),o}return new i(t,e,n,r)},u=function(t){var e=this;t instanceof e||r("25"),t.destructor(),e.instancePool.length-1}function d(t,e,n){for(var r=-1,i=null==t?0:t.length;++r-1;);return n}function B(t,e){for(var n=t.length;n--&&M(e,t[n],0)>-1;);return n}function z(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}function j(t){return"\\"+Cn[t]}function V(t,e){return null==t?it:t[e]}function H(t){return bn.test(t)}function G(t){return xn.test(t)}function W(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}function X(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function q(t,e){return function(n){return t(e(n))}}function Y(t,e){for(var n=-1,r=t.length,i=0,o=[];++n>>1,Bt=[["ary",Et],["bind",vt],["bindKey",gt],["curry",bt],["curryRight",xt],["flip",Tt],["partial",_t],["partialRight",wt],["rearg",Mt]],zt="[object Arguments]",jt="[object Array]",Vt="[object AsyncFunction]",Ht="[object Boolean]",Gt="[object Date]",Wt="[object DOMException]",Xt="[object Error]",qt="[object Function]",Yt="[object GeneratorFunction]",Zt="[object Map]",Kt="[object Number]",Jt="[object Null]",$t="[object Object]",Qt="[object Proxy]",te="[object RegExp]",ee="[object Set]",ne="[object String]",re="[object Symbol]",ie="[object Undefined]",oe="[object WeakMap]",ae="[object WeakSet]",se="[object ArrayBuffer]",ue="[object DataView]",ce="[object Float32Array]",le="[object Float64Array]",he="[object Int8Array]",pe="[object Int16Array]",fe="[object Int32Array]",de="[object Uint8Array]",me="[object Uint8ClampedArray]",ve="[object Uint16Array]",ge="[object Uint32Array]",ye=/\b__p \+= '';/g,be=/\b(__p \+=) '' \+/g,xe=/(__e\(.*?\)|\b__t\)) \+\n'';/g,_e=/&(?:amp|lt|gt|quot|#39);/g,we=/[&<>"']/g,Ee=RegExp(_e.source),Me=RegExp(we.source),Te=/<%-([\s\S]+?)%>/g,Se=/<%([\s\S]+?)%>/g,Ae=/<%=([\s\S]+?)%>/g,Ce=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Pe=/^\w*$/,Re=/^\./,Le=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Oe=/[\\^$.*+?()[\]{}|]/g,Ie=RegExp(Oe.source),Ne=/^\s+|\s+$/g,De=/^\s+/,ke=/\s+$/,Ue=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Fe=/\{\n\/\* \[wrapped with (.+)\] \*/,Be=/,? & /,ze=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,je=/\\(\\)?/g,Ve=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,He=/\w*$/,Ge=/^[-+]0x[0-9a-f]+$/i,We=/^0b[01]+$/i,Xe=/^\[object .+?Constructor\]$/,qe=/^0o[0-7]+$/i,Ye=/^(?:0|[1-9]\d*)$/,Ze=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ke=/($^)/,Je=/['\n\r\u2028\u2029\\]/g,$e="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Qe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",tn="["+Qe+"]",en="["+$e+"]",nn="[a-z\\xdf-\\xf6\\xf8-\\xff]",rn="[^\\ud800-\\udfff"+Qe+"\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",on="\\ud83c[\\udffb-\\udfff]",an="(?:\\ud83c[\\udde6-\\uddff]){2}",sn="[\\ud800-\\udbff][\\udc00-\\udfff]",un="[A-Z\\xc0-\\xd6\\xd8-\\xde]",cn="(?:"+nn+"|"+rn+")",ln="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",hn="(?:\\u200d(?:"+["[^\\ud800-\\udfff]",an,sn].join("|")+")[\\ufe0e\\ufe0f]?"+ln+")*",pn="[\\ufe0e\\ufe0f]?"+ln+hn,fn="(?:"+["[\\u2700-\\u27bf]",an,sn].join("|")+")"+pn,dn="(?:"+["[^\\ud800-\\udfff]"+en+"?",en,an,sn,"[\\ud800-\\udfff]"].join("|")+")",mn=RegExp("['’]","g"),vn=RegExp(en,"g"),gn=RegExp(on+"(?="+on+")|"+dn+pn,"g"),yn=RegExp([un+"?"+nn+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[tn,un,"$"].join("|")+")","(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[tn,un+cn,"$"].join("|")+")",un+"?"+cn+"+(?:['’](?:d|ll|m|re|s|t|ve))?",un+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)","\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)","\\d+",fn].join("|"),"g"),bn=RegExp("[\\u200d\\ud800-\\udfff"+$e+"\\ufe0e\\ufe0f]"),xn=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,_n=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],wn=-1,En={};En[ce]=En[le]=En[he]=En[pe]=En[fe]=En[de]=En[me]=En[ve]=En[ge]=!0,En[zt]=En[jt]=En[se]=En[Ht]=En[ue]=En[Gt]=En[Xt]=En[qt]=En[Zt]=En[Kt]=En[$t]=En[te]=En[ee]=En[ne]=En[oe]=!1;var Mn={};Mn[zt]=Mn[jt]=Mn[se]=Mn[ue]=Mn[Ht]=Mn[Gt]=Mn[ce]=Mn[le]=Mn[he]=Mn[pe]=Mn[fe]=Mn[Zt]=Mn[Kt]=Mn[$t]=Mn[te]=Mn[ee]=Mn[ne]=Mn[re]=Mn[de]=Mn[me]=Mn[ve]=Mn[ge]=!0,Mn[Xt]=Mn[qt]=Mn[oe]=!1;var Tn={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},Sn={"&":"&","<":"<",">":">",'"':""","'":"'"},An={"&":"&","<":"<",">":">",""":'"',"'":"'"},Cn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Pn=parseFloat,Rn=parseInt,Ln="object"==typeof t&&t&&t.Object===Object&&t,On="object"==typeof self&&self&&self.Object===Object&&self,In=Ln||On||Function("return this")(),Nn="object"==typeof e&&e&&!e.nodeType&&e,Dn=Nn&&"object"==typeof r&&r&&!r.nodeType&&r,kn=Dn&&Dn.exports===Nn,Un=kn&&Ln.process,Fn=function(){try{return Un&&Un.binding&&Un.binding("util")}catch(t){}}(),Bn=Fn&&Fn.isArrayBuffer,zn=Fn&&Fn.isDate,jn=Fn&&Fn.isMap,Vn=Fn&&Fn.isRegExp,Hn=Fn&&Fn.isSet,Gn=Fn&&Fn.isTypedArray,Wn=C("length"),Xn=P(Tn),qn=P(Sn),Yn=P(An),Zn=function t(e){function n(t){if(ou(t)&&!vp(t)&&!(t instanceof x)){if(t instanceof i)return t;if(vl.call(t,"__wrapped__"))return na(t)}return new i(t)}function r(){}function i(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=it}function x(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=kt,this.__views__=[]}function P(){var t=new x(this.__wrapped__);return t.__actions__=Ui(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ui(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ui(this.__views__),t}function J(){if(this.__filtered__){var t=new x(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function et(){var t=this.__wrapped__.value(),e=this.__dir__,n=vp(t),r=e<0,i=n?t.length:0,o=Ao(0,i,this.__views__),a=o.start,s=o.end,u=s-a,c=r?s:a-1,l=this.__iteratees__,h=l.length,p=0,f=Xl(u,this.__takeCount__);if(!n||!r&&i==u&&f==u)return yi(t,this.__actions__);var d=[];t:for(;u--&&p-1}function un(t,e){var n=this.__data__,r=Kn(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function cn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function rr(t,e,n,r,i,o){var a,s=e&ht,u=e&pt,l=e&ft;if(n&&(a=i?n(t,r,i,o):n(t)),a!==it)return a;if(!iu(t))return t;var h=vp(t);if(h){if(a=Ro(t),!s)return Ui(t,a)}else{var p=Sh(t),f=p==qt||p==Yt;if(yp(t))return Ti(t,s);if(p==$t||p==zt||f&&!i){if(a=u||f?{}:Lo(t),!s)return u?zi(t,Qn(a,t)):Bi(t,$n(a,t))}else{if(!Mn[p])return i?t:{};a=Oo(t,p,rr,s)}}o||(o=new xn);var d=o.get(t);if(d)return d;o.set(t,a);var m=l?u?bo:yo:u?ju:zu,v=h?it:m(t);return c(v||t,function(r,i){v&&(i=r,r=t[i]),Wn(a,i,rr(r,e,n,i,t,o))}),a}function ir(t){var e=zu(t);return function(n){return or(n,t,e)}}function or(t,e,n){var r=n.length;if(null==t)return!r;for(t=sl(t);r--;){var i=n[r],o=e[i],a=t[i];if(a===it&&!(i in t)||!o(a))return!1}return!0}function ar(t,e,n){if("function"!=typeof t)throw new ll(st);return Ph(function(){t.apply(it,n)},e)}function sr(t,e,n,r){var i=-1,o=f,a=!0,s=t.length,u=[],c=e.length;if(!s)return u;n&&(e=m(e,D(n))),r?(o=d,a=!1):e.length>=ot&&(o=U,a=!1,e=new gn(e));t:for(;++ii?0:i+n),r=r===it||r>i?i:wu(r),r<0&&(r+=i),r=n>r?0:Eu(r);n0&&n(s)?e>1?pr(s,e-1,n,r,i):v(i,s):r||(i[i.length]=s)}return i}function fr(t,e){return t&&vh(t,e,zu)}function dr(t,e){return t&&gh(t,e,zu)}function mr(t,e){return p(e,function(e){return eu(t[e])})}function vr(t,e){e=Ei(e,t);for(var n=0,r=e.length;null!=t&&ne}function xr(t,e){return null!=t&&vl.call(t,e)}function _r(t,e){return null!=t&&e in sl(t)}function wr(t,e,n){return t>=Xl(e,n)&&t=120&&l.length>=120)?new gn(a&&l):it}l=t[0];var h=-1,p=s[0];t:for(;++h-1;)s!==t&&Rl.call(s,u,1),Rl.call(t,u,1);return t}function $r(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;Do(i)?Rl.call(t,i,1):mi(t,i)}}return t}function Qr(t,e){return t+Bl(Zl()*(e-t+1))}function ti(t,e,n,r){for(var i=-1,o=Wl(Fl((e-t)/(n||1)),0),a=nl(o);o--;)a[r?o:++i]=t,t+=n;return a}function ei(t,e){var n="";if(!t||e<1||e>It)return n;do{e%2&&(n+=t),(e=Bl(e/2))&&(t+=t)}while(e);return n}function ni(t,e){return Rh(qo(t,e,Rc),t+"")}function ri(t){return Nn(Qu(t))}function ii(t,e){var n=Qu(t);return $o(n,nr(e,0,n.length))}function oi(t,e,n,r){if(!iu(t))return t;e=Ei(e,t);for(var i=-1,o=e.length,a=o-1,s=t;null!=s&&++ii?0:i+e),n=n>i?i:n,n<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=nl(i);++r>>1,a=t[o];null!==a&&!vu(a)&&(n?a<=e:a=ot){var c=e?null:wh(t);if(c)return Z(c);a=!1,i=U,u=new gn}else u=e?[]:s;t:for(;++r=r?t:si(t,e,n)}function Ti(t,e){if(e)return t.slice();var n=t.length,r=Sl?Sl(n):new t.constructor(n);return t.copy(r),r}function Si(t){var e=new t.constructor(t.byteLength);return new Tl(e).set(new Tl(t)),e}function Ai(t,e){var n=e?Si(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Ci(t,e,n){return g(e?n(X(t),ht):X(t),o,new t.constructor)}function Pi(t){var e=new t.constructor(t.source,He.exec(t));return e.lastIndex=t.lastIndex,e}function Ri(t,e,n){return g(e?n(Z(t),ht):Z(t),a,new t.constructor)}function Li(t){return hh?sl(hh.call(t)):{}}function Oi(t,e){var n=e?Si(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Ii(t,e){if(t!==e){var n=t!==it,r=null===t,i=t===t,o=vu(t),a=e!==it,s=null===e,u=e===e,c=vu(e);if(!s&&!c&&!o&&t>e||o&&a&&u&&!s&&!c||r&&a&&u||!n&&u||!i)return 1;if(!r&&!o&&!c&&t=s)return u;return u*("desc"==n[r]?-1:1)}}return t.index-e.index}function Di(t,e,n,r){for(var i=-1,o=t.length,a=n.length,s=-1,u=e.length,c=Wl(o-a,0),l=nl(u+c),h=!r;++s1?n[i-1]:it,a=i>2?n[2]:it;for(o=t.length>3&&"function"==typeof o?(i--,o):it,a&&ko(n[0],n[1],a)&&(o=i<3?it:o,i=1),e=sl(e);++r-1?i[o?e[a]:a]:it}}function Ji(t){return go(function(e){var n=e.length,r=n,o=i.prototype.thru;for(t&&e.reverse();r--;){var a=e[r];if("function"!=typeof a)throw new ll(st);if(o&&!s&&"wrapper"==xo(a))var s=new i([],!0)}for(r=s?r:n;++r1&&y.reverse(),h&&us))return!1;var c=o.get(t);if(c&&o.get(e))return c==e;var l=-1,h=!0,p=n&mt?new gn:it;for(o.set(t,e),o.set(e,t);++l1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Ue,"{\n/* [wrapped with "+e+"] */\n")}function No(t){return vp(t)||mp(t)||!!(Ll&&t&&t[Ll])}function Do(t,e){return!!(e=null==e?It:e)&&("number"==typeof t||Ye.test(t))&&t>-1&&t%1==0&&t0){if(++e>=Ct)return arguments[0]}else e=0;return t.apply(it,arguments)}}function $o(t,e){var n=-1,r=t.length,i=r-1;for(e=e===it?r:e;++n=this.__values__.length;return{done:t,value:t?it:this.__values__[this.__index__++]}}function ns(){return this}function rs(t){for(var e,n=this;n instanceof r;){var i=na(n);i.__index__=0,i.__values__=it,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e}function is(){var t=this.__wrapped__;if(t instanceof x){var e=t;return this.__actions__.length&&(e=new x(this)),e=e.reverse(),e.__actions__.push({func:$a,args:[Ca],thisArg:it}),new i(e,this.__chain__)}return this.thru(Ca)}function os(){return yi(this.__wrapped__,this.__actions__)}function as(t,e,n){var r=vp(t)?h:ur;return n&&ko(t,e,n)&&(e=it),r(t,wo(e,3))}function ss(t,e){return(vp(t)?p:hr)(t,wo(e,3))}function us(t,e){return pr(ds(t,e),1)}function cs(t,e){return pr(ds(t,e),Ot)}function ls(t,e,n){return n=n===it?1:wu(n),pr(ds(t,e),n)}function hs(t,e){return(vp(t)?c:dh)(t,wo(e,3))}function ps(t,e){return(vp(t)?l:mh)(t,wo(e,3))}function fs(t,e,n,r){t=Xs(t)?t:Qu(t),n=n&&!r?wu(n):0;var i=t.length;return n<0&&(n=Wl(i+n,0)),mu(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&M(t,e,n)>-1}function ds(t,e){return(vp(t)?m:jr)(t,wo(e,3))}function ms(t,e,n,r){return null==t?[]:(vp(e)||(e=null==e?[]:[e]),n=r?it:n,vp(n)||(n=null==n?[]:[n]),qr(t,e,n))}function vs(t,e,n){var r=vp(t)?g:R,i=arguments.length<3;return r(t,wo(e,4),n,i,dh)}function gs(t,e,n){var r=vp(t)?y:R,i=arguments.length<3;return r(t,wo(e,4),n,i,mh)}function ys(t,e){return(vp(t)?p:hr)(t,Os(wo(e,3)))}function bs(t){return(vp(t)?Nn:ri)(t)}function xs(t,e,n){return e=(n?ko(t,e,n):e===it)?1:wu(e),(vp(t)?Dn:ii)(t,e)}function _s(t){return(vp(t)?Un:ai)(t)}function ws(t){if(null==t)return 0;if(Xs(t))return mu(t)?Q(t):t.length;var e=Sh(t);return e==Zt||e==ee?t.size:Fr(t).length}function Es(t,e,n){var r=vp(t)?b:ui;return n&&ko(t,e,n)&&(e=it),r(t,wo(e,3))}function Ms(t,e){if("function"!=typeof e)throw new ll(st);return t=wu(t),function(){if(--t<1)return e.apply(this,arguments)}}function Ts(t,e,n){return e=n?it:e,e=t&&null==e?t.length:e,co(t,Et,it,it,it,it,e)}function Ss(t,e){var n;if("function"!=typeof e)throw new ll(st);return t=wu(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=it),n}}function As(t,e,n){e=n?it:e;var r=co(t,bt,it,it,it,it,it,e);return r.placeholder=As.placeholder,r}function Cs(t,e,n){e=n?it:e;var r=co(t,xt,it,it,it,it,it,e);return r.placeholder=Cs.placeholder,r}function Ps(t,e,n){function r(e){var n=p,r=f;return p=f=it,y=e,m=t.apply(r,n)}function i(t){return y=t,v=Ph(s,e),b?r(t):m}function o(t){var n=t-g,r=t-y,i=e-n;return x?Xl(i,d-r):i}function a(t){var n=t-g,r=t-y;return g===it||n>=e||n<0||x&&r>=d}function s(){var t=ip();if(a(t))return u(t);v=Ph(s,o(t))}function u(t){return v=it,_&&p?r(t):(p=f=it,m)}function c(){v!==it&&_h(v),y=0,p=g=f=v=it}function l(){return v===it?m:u(ip())}function h(){var t=ip(),n=a(t);if(p=arguments,f=this,g=t,n){if(v===it)return i(g);if(x)return v=Ph(s,e),r(g)}return v===it&&(v=Ph(s,e)),m}var p,f,d,m,v,g,y=0,b=!1,x=!1,_=!0;if("function"!=typeof t)throw new ll(st);return e=Mu(e)||0,iu(n)&&(b=!!n.leading,x="maxWait"in n,d=x?Wl(Mu(n.maxWait)||0,e):d,_="trailing"in n?!!n.trailing:_),h.cancel=c,h.flush=l,h}function Rs(t){return co(t,Tt)}function Ls(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new ll(st);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(Ls.Cache||cn),n}function Os(t){if("function"!=typeof t)throw new ll(st);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function Is(t){return Ss(2,t)}function Ns(t,e){if("function"!=typeof t)throw new ll(st);return e=e===it?e:wu(e),ni(t,e)}function Ds(t,e){if("function"!=typeof t)throw new ll(st);return e=null==e?0:Wl(wu(e),0),ni(function(n){var r=n[e],i=Mi(n,0,e);return r&&v(i,r),s(t,this,i)})}function ks(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new ll(st);return iu(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),Ps(t,e,{leading:r,maxWait:e,trailing:i})}function Us(t){return Ts(t,1)}function Fs(t,e){return lp(wi(e),t)}function Bs(){if(!arguments.length)return[];var t=arguments[0];return vp(t)?t:[t]}function zs(t){return rr(t,ft)}function js(t,e){return e="function"==typeof e?e:it,rr(t,ft,e)}function Vs(t){return rr(t,ht|ft)}function Hs(t,e){return e="function"==typeof e?e:it,rr(t,ht|ft,e)}function Gs(t,e){return null==e||or(t,e,zu(e))}function Ws(t,e){return t===e||t!==t&&e!==e}function Xs(t){return null!=t&&ru(t.length)&&!eu(t)}function qs(t){return ou(t)&&Xs(t)}function Ys(t){return!0===t||!1===t||ou(t)&&yr(t)==Ht}function Zs(t){return ou(t)&&1===t.nodeType&&!fu(t)}function Ks(t){if(null==t)return!0;if(Xs(t)&&(vp(t)||"string"==typeof t||"function"==typeof t.splice||yp(t)||Ep(t)||mp(t)))return!t.length;var e=Sh(t);if(e==Zt||e==ee)return!t.size;if(jo(t))return!Fr(t).length;for(var n in t)if(vl.call(t,n))return!1;return!0}function Js(t,e){return Pr(t,e)}function $s(t,e,n){n="function"==typeof n?n:it;var r=n?n(t,e):it;return r===it?Pr(t,e,it,n):!!r}function Qs(t){if(!ou(t))return!1;var e=yr(t);return e==Xt||e==Wt||"string"==typeof t.message&&"string"==typeof t.name&&!fu(t)}function tu(t){return"number"==typeof t&&Vl(t)}function eu(t){if(!iu(t))return!1;var e=yr(t);return e==qt||e==Yt||e==Vt||e==Qt}function nu(t){return"number"==typeof t&&t==wu(t)}function ru(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=It}function iu(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function ou(t){return null!=t&&"object"==typeof t}function au(t,e){return t===e||Or(t,e,Mo(e))}function su(t,e,n){return n="function"==typeof n?n:it,Or(t,e,Mo(e),n)}function uu(t){return pu(t)&&t!=+t}function cu(t){if(Ah(t))throw new il(at);return Ir(t)}function lu(t){return null===t}function hu(t){return null==t}function pu(t){return"number"==typeof t||ou(t)&&yr(t)==Kt}function fu(t){if(!ou(t)||yr(t)!=$t)return!1;var e=Al(t);if(null===e)return!0;var n=vl.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&ml.call(n)==xl}function du(t){return nu(t)&&t>=-It&&t<=It}function mu(t){return"string"==typeof t||!vp(t)&&ou(t)&&yr(t)==ne}function vu(t){return"symbol"==typeof t||ou(t)&&yr(t)==re}function gu(t){return t===it}function yu(t){return ou(t)&&Sh(t)==oe}function bu(t){return ou(t)&&yr(t)==ae}function xu(t){if(!t)return[];if(Xs(t))return mu(t)?tt(t):Ui(t);if(Ol&&t[Ol])return W(t[Ol]());var e=Sh(t);return(e==Zt?X:e==ee?Z:Qu)(t)}function _u(t){if(!t)return 0===t?t:0;if((t=Mu(t))===Ot||t===-Ot){return(t<0?-1:1)*Nt}return t===t?t:0}function wu(t){var e=_u(t),n=e%1;return e===e?n?e-n:e:0}function Eu(t){return t?nr(wu(t),0,kt):0}function Mu(t){if("number"==typeof t)return t;if(vu(t))return Dt;if(iu(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=iu(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Ne,"");var n=We.test(t);return n||qe.test(t)?Rn(t.slice(2),n?2:8):Ge.test(t)?Dt:+t}function Tu(t){return Fi(t,ju(t))}function Su(t){return t?nr(wu(t),-It,It):0===t?t:0}function Au(t){return null==t?"":fi(t)}function Cu(t,e){var n=fh(t);return null==e?n:$n(n,e)}function Pu(t,e){return w(t,wo(e,3),fr)}function Ru(t,e){return w(t,wo(e,3),dr)}function Lu(t,e){return null==t?t:vh(t,wo(e,3),ju)}function Ou(t,e){return null==t?t:gh(t,wo(e,3),ju)}function Iu(t,e){return t&&fr(t,wo(e,3))}function Nu(t,e){return t&&dr(t,wo(e,3))}function Du(t){return null==t?[]:mr(t,zu(t))}function ku(t){return null==t?[]:mr(t,ju(t))}function Uu(t,e,n){var r=null==t?it:vr(t,e);return r===it?n:r}function Fu(t,e){return null!=t&&Po(t,e,xr)}function Bu(t,e){return null!=t&&Po(t,e,_r)}function zu(t){return Xs(t)?On(t):Fr(t)}function ju(t){return Xs(t)?On(t,!0):Br(t)}function Vu(t,e){var n={};return e=wo(e,3),fr(t,function(t,r,i){tr(n,e(t,r,i),t)}),n}function Hu(t,e){var n={};return e=wo(e,3),fr(t,function(t,r,i){tr(n,r,e(t,r,i))}),n}function Gu(t,e){return Wu(t,Os(wo(e)))}function Wu(t,e){if(null==t)return{};var n=m(bo(t),function(t){return[t]});return e=wo(e),Zr(t,n,function(t,n){return e(t,n[0])})}function Xu(t,e,n){e=Ei(e,t);var r=-1,i=e.length;for(i||(i=1,t=it);++re){var r=t;t=e,e=r}if(n||t%1||e%1){var i=Zl();return Xl(t+i*(e-t+Pn("1e-"+((i+"").length-1))),e)}return Qr(t,e)}function ic(t){return Zp(Au(t).toLowerCase())}function oc(t){return(t=Au(t))&&t.replace(Ze,Xn).replace(vn,"")}function ac(t,e,n){t=Au(t),e=fi(e);var r=t.length;n=n===it?r:nr(wu(n),0,r);var i=n;return(n-=e.length)>=0&&t.slice(n,i)==e}function sc(t){return t=Au(t),t&&Me.test(t)?t.replace(we,qn):t}function uc(t){return t=Au(t),t&&Ie.test(t)?t.replace(Oe,"\\$&"):t}function cc(t,e,n){t=Au(t),e=wu(e);var r=e?Q(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return no(Bl(i),n)+t+no(Fl(i),n)}function lc(t,e,n){t=Au(t),e=wu(e);var r=e?Q(t):0;return e&&r>>0)?(t=Au(t),t&&("string"==typeof e||null!=e&&!_p(e))&&!(e=fi(e))&&H(t)?Mi(tt(t),0,n):t.split(e,n)):[]}function vc(t,e,n){return t=Au(t),n=null==n?0:nr(wu(n),0,t.length),e=fi(e),t.slice(n,n+e.length)==e}function gc(t,e,r){var i=n.templateSettings;r&&ko(t,e,r)&&(e=it),t=Au(t),e=Cp({},e,i,lo);var o,a,s=Cp({},e.imports,i.imports,lo),u=zu(s),c=k(s,u),l=0,h=e.interpolate||Ke,p="__p += '",f=ul((e.escape||Ke).source+"|"+h.source+"|"+(h===Ae?Ve:Ke).source+"|"+(e.evaluate||Ke).source+"|$","g"),d="//# sourceURL="+("sourceURL"in e?e.sourceURL:"lodash.templateSources["+ ++wn+"]")+"\n";t.replace(f,function(e,n,r,i,s,u){return r||(r=i),p+=t.slice(l,u).replace(Je,j),n&&(o=!0,p+="' +\n__e("+n+") +\n'"),s&&(a=!0,p+="';\n"+s+";\n__p += '"),r&&(p+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),l=u+e.length,e}),p+="';\n";var m=e.variable;m||(p="with (obj) {\n"+p+"\n}\n"),p=(a?p.replace(ye,""):p).replace(be,"$1").replace(xe,"$1;"),p="function("+(m||"obj")+") {\n"+(m?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(o?", __e = _.escape":"")+(a?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+p+"return __p\n}";var v=Kp(function(){return ol(u,d+"return "+p).apply(it,c)});if(v.source=p,Qs(v))throw v;return v}function yc(t){return Au(t).toLowerCase()}function bc(t){return Au(t).toUpperCase()}function xc(t,e,n){if((t=Au(t))&&(n||e===it))return t.replace(Ne,"");if(!t||!(e=fi(e)))return t;var r=tt(t),i=tt(e);return Mi(r,F(r,i),B(r,i)+1).join("")}function _c(t,e,n){if((t=Au(t))&&(n||e===it))return t.replace(ke,"");if(!t||!(e=fi(e)))return t;var r=tt(t);return Mi(r,0,B(r,tt(e))+1).join("")}function wc(t,e,n){if((t=Au(t))&&(n||e===it))return t.replace(De,"");if(!t||!(e=fi(e)))return t;var r=tt(t);return Mi(r,F(r,tt(e))).join("")}function Ec(t,e){var n=St,r=At;if(iu(e)){var i="separator"in e?e.separator:i;n="length"in e?wu(e.length):n,r="omission"in e?fi(e.omission):r}t=Au(t);var o=t.length;if(H(t)){var a=tt(t);o=a.length}if(n>=o)return t;var s=n-Q(r);if(s<1)return r;var u=a?Mi(a,0,s).join(""):t.slice(0,s);if(i===it)return u+r;if(a&&(s+=u.length-s),_p(i)){if(t.slice(s).search(i)){var c,l=u;for(i.global||(i=ul(i.source,Au(He.exec(i))+"g")),i.lastIndex=0;c=i.exec(l);)var h=c.index;u=u.slice(0,h===it?s:h)}}else if(t.indexOf(fi(i),s)!=s){var p=u.lastIndexOf(i);p>-1&&(u=u.slice(0,p))}return u+r}function Mc(t){return t=Au(t),t&&Ee.test(t)?t.replace(_e,Yn):t}function Tc(t,e,n){return t=Au(t),e=n?it:e,e===it?G(t)?rt(t):_(t):t.match(e)||[]}function Sc(t){var e=null==t?0:t.length,n=wo();return t=e?m(t,function(t){if("function"!=typeof t[1])throw new ll(st);return[n(t[0]),t[1]]}):[],ni(function(n){for(var r=-1;++rIt)return[];var n=kt,r=Xl(t,kt);e=wo(e),t-=kt;for(var i=I(r,e);++n1?t[e-1]:it;return n="function"==typeof n?(t.pop(),n):it,qa(t,n)}),Zh=go(function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,o=function(e){return er(e,t)};return!(e>1||this.__actions__.length)&&r instanceof x&&Do(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:$a,args:[o],thisArg:it}),new i(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(it),t})):this.thru(o)}),Kh=ji(function(t,e,n){vl.call(t,n)?++t[n]:tr(t,n,1)}),Jh=Ki(ha),$h=Ki(pa),Qh=ji(function(t,e,n){vl.call(t,n)?t[n].push(e):tr(t,n,[e])}),tp=ni(function(t,e,n){var r=-1,i="function"==typeof e,o=Xs(t)?nl(t.length):[];return dh(t,function(t){o[++r]=i?s(e,t,n):Tr(t,e,n)}),o}),ep=ji(function(t,e,n){tr(t,n,e)}),np=ji(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),rp=ni(function(t,e){if(null==t)return[];var n=e.length;return n>1&&ko(t,e[0],e[1])?e=[]:n>2&&ko(e[0],e[1],e[2])&&(e=[e[0]]),qr(t,pr(e,1),[])}),ip=kl||function(){return In.Date.now()},op=ni(function(t,e,n){var r=vt;if(n.length){var i=Y(n,_o(op));r|=_t}return co(t,r,e,n,i)}),ap=ni(function(t,e,n){var r=vt|gt;if(n.length){var i=Y(n,_o(ap));r|=_t}return co(e,r,t,n,i)}),sp=ni(function(t,e){return ar(t,1,e)}),up=ni(function(t,e,n){return ar(t,Mu(e)||0,n)});Ls.Cache=cn;var cp=xh(function(t,e){e=1==e.length&&vp(e[0])?m(e[0],D(wo())):m(pr(e,1),D(wo()));var n=e.length;return ni(function(r){for(var i=-1,o=Xl(r.length,n);++i=e}),mp=Sr(function(){return arguments}())?Sr:function(t){return ou(t)&&vl.call(t,"callee")&&!Pl.call(t,"callee")},vp=nl.isArray,gp=Bn?D(Bn):Ar,yp=jl||jc,bp=zn?D(zn):Cr,xp=jn?D(jn):Lr,_p=Vn?D(Vn):Nr,wp=Hn?D(Hn):Dr,Ep=Gn?D(Gn):kr,Mp=oo(zr),Tp=oo(function(t,e){return t<=e}),Sp=Vi(function(t,e){if(jo(e)||Xs(e))return void Fi(e,zu(e),t);for(var n in e)vl.call(e,n)&&Wn(t,n,e[n])}),Ap=Vi(function(t,e){Fi(e,ju(e),t)}),Cp=Vi(function(t,e,n,r){Fi(e,ju(e),t,r)}),Pp=Vi(function(t,e,n,r){Fi(e,zu(e),t,r)}),Rp=go(er),Lp=ni(function(t){return t.push(it,lo),s(Cp,it,t)}),Op=ni(function(t){return t.push(it,ho),s(Up,it,t)}),Ip=Qi(function(t,e,n){t[e]=n},Cc(Rc)),Np=Qi(function(t,e,n){vl.call(t,e)?t[e].push(n):t[e]=[n]},wo),Dp=ni(Tr),kp=Vi(function(t,e,n){Gr(t,e,n)}),Up=Vi(function(t,e,n,r){Gr(t,e,n,r)}),Fp=go(function(t,e){var n={};if(null==t)return n;var r=!1;e=m(e,function(e){return e=Ei(e,t),r||(r=e.length>1),e}),Fi(t,bo(t),n),r&&(n=rr(n,ht|pt|ft,po));for(var i=e.length;i--;)mi(n,e[i]);return n}),Bp=go(function(t,e){return null==t?{}:Yr(t,e)}),zp=uo(zu),jp=uo(ju),Vp=qi(function(t,e,n){return e=e.toLowerCase(),t+(n?ic(e):e)}),Hp=qi(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),Gp=qi(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),Wp=Xi("toLowerCase"),Xp=qi(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}),qp=qi(function(t,e,n){return t+(n?" ":"")+Zp(e)}),Yp=qi(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),Zp=Xi("toUpperCase"),Kp=ni(function(t,e){try{return s(t,it,e)}catch(t){return Qs(t)?t:new il(t)}}),Jp=go(function(t,e){return c(e,function(e){e=Qo(e),tr(t,e,op(t[e],t))}),t}),$p=Ji(),Qp=Ji(!0),tf=ni(function(t,e){return function(n){return Tr(n,t,e)}}),ef=ni(function(t,e){return function(n){return Tr(t,n,e)}}),nf=eo(m),rf=eo(h),of=eo(b),af=io(),sf=io(!0),uf=to(function(t,e){return t+e},0),cf=so("ceil"),lf=to(function(t,e){return t/e},1),hf=so("floor"),pf=to(function(t,e){return t*e},1),ff=so("round"),df=to(function(t,e){return t-e},0);return n.after=Ms,n.ary=Ts,n.assign=Sp,n.assignIn=Ap,n.assignInWith=Cp,n.assignWith=Pp,n.at=Rp,n.before=Ss,n.bind=op,n.bindAll=Jp,n.bindKey=ap,n.castArray=Bs,n.chain=Ka,n.chunk=ra,n.compact=ia,n.concat=oa,n.cond=Sc,n.conforms=Ac,n.constant=Cc,n.countBy=Kh,n.create=Cu,n.curry=As,n.curryRight=Cs,n.debounce=Ps,n.defaults=Lp,n.defaultsDeep=Op,n.defer=sp,n.delay=up,n.difference=Oh,n.differenceBy=Ih,n.differenceWith=Nh,n.drop=aa,n.dropRight=sa,n.dropRightWhile=ua,n.dropWhile=ca,n.fill=la,n.filter=ss,n.flatMap=us,n.flatMapDeep=cs,n.flatMapDepth=ls,n.flatten=fa,n.flattenDeep=da,n.flattenDepth=ma,n.flip=Rs,n.flow=$p,n.flowRight=Qp,n.fromPairs=va,n.functions=Du,n.functionsIn=ku,n.groupBy=Qh,n.initial=ba,n.intersection=Dh,n.intersectionBy=kh,n.intersectionWith=Uh,n.invert=Ip,n.invertBy=Np,n.invokeMap=tp,n.iteratee=Lc,n.keyBy=ep,n.keys=zu,n.keysIn=ju,n.map=ds,n.mapKeys=Vu,n.mapValues=Hu,n.matches=Oc,n.matchesProperty=Ic,n.memoize=Ls,n.merge=kp,n.mergeWith=Up,n.method=tf,n.methodOf=ef,n.mixin=Nc,n.negate=Os,n.nthArg=Uc,n.omit=Fp,n.omitBy=Gu,n.once=Is,n.orderBy=ms,n.over=nf,n.overArgs=cp,n.overEvery=rf,n.overSome=of,n.partial=lp,n.partialRight=hp,n.partition=np,n.pick=Bp,n.pickBy=Wu,n.property=Fc,n.propertyOf=Bc,n.pull=Fh,n.pullAll=Ma,n.pullAllBy=Ta,n.pullAllWith=Sa,n.pullAt=Bh,n.range=af,n.rangeRight=sf,n.rearg=pp,n.reject=ys,n.remove=Aa,n.rest=Ns,n.reverse=Ca,n.sampleSize=xs,n.set=qu,n.setWith=Yu,n.shuffle=_s,n.slice=Pa,n.sortBy=rp,n.sortedUniq=ka,n.sortedUniqBy=Ua,n.split=mc,n.spread=Ds,n.tail=Fa,n.take=Ba,n.takeRight=za,n.takeRightWhile=ja,n.takeWhile=Va,n.tap=Ja,n.throttle=ks,n.thru=$a,n.toArray=xu,n.toPairs=zp,n.toPairsIn=jp,n.toPath=Xc,n.toPlainObject=Tu,n.transform=Zu,n.unary=Us,n.union=zh,n.unionBy=jh,n.unionWith=Vh,n.uniq=Ha,n.uniqBy=Ga,n.uniqWith=Wa,n.unset=Ku,n.unzip=Xa,n.unzipWith=qa,n.update=Ju,n.updateWith=$u,n.values=Qu,n.valuesIn=tc,n.without=Hh,n.words=Tc,n.wrap=Fs,n.xor=Gh,n.xorBy=Wh,n.xorWith=Xh,n.zip=qh,n.zipObject=Ya,n.zipObjectDeep=Za,n.zipWith=Yh,n.entries=zp,n.entriesIn=jp,n.extend=Ap,n.extendWith=Cp,Nc(n,n),n.add=uf,n.attempt=Kp,n.camelCase=Vp,n.capitalize=ic,n.ceil=cf,n.clamp=ec,n.clone=zs,n.cloneDeep=Vs,n.cloneDeepWith=Hs,n.cloneWith=js,n.conformsTo=Gs,n.deburr=oc,n.defaultTo=Pc,n.divide=lf,n.endsWith=ac,n.eq=Ws,n.escape=sc,n.escapeRegExp=uc,n.every=as,n.find=Jh,n.findIndex=ha,n.findKey=Pu,n.findLast=$h,n.findLastIndex=pa,n.findLastKey=Ru,n.floor=hf,n.forEach=hs,n.forEachRight=ps,n.forIn=Lu,n.forInRight=Ou,n.forOwn=Iu,n.forOwnRight=Nu,n.get=Uu,n.gt=fp,n.gte=dp,n.has=Fu,n.hasIn=Bu,n.head=ga,n.identity=Rc,n.includes=fs,n.indexOf=ya,n.inRange=nc,n.invoke=Dp,n.isArguments=mp,n.isArray=vp,n.isArrayBuffer=gp,n.isArrayLike=Xs,n.isArrayLikeObject=qs,n.isBoolean=Ys,n.isBuffer=yp,n.isDate=bp,n.isElement=Zs,n.isEmpty=Ks,n.isEqual=Js,n.isEqualWith=$s,n.isError=Qs,n.isFinite=tu,n.isFunction=eu,n.isInteger=nu,n.isLength=ru,n.isMap=xp,n.isMatch=au,n.isMatchWith=su,n.isNaN=uu,n.isNative=cu,n.isNil=hu,n.isNull=lu,n.isNumber=pu,n.isObject=iu,n.isObjectLike=ou,n.isPlainObject=fu,n.isRegExp=_p,n.isSafeInteger=du,n.isSet=wp,n.isString=mu,n.isSymbol=vu,n.isTypedArray=Ep,n.isUndefined=gu,n.isWeakMap=yu,n.isWeakSet=bu,n.join=xa,n.kebabCase=Hp,n.last=_a,n.lastIndexOf=wa,n.lowerCase=Gp,n.lowerFirst=Wp,n.lt=Mp,n.lte=Tp,n.max=Yc,n.maxBy=Zc,n.mean=Kc,n.meanBy=Jc,n.min=$c,n.minBy=Qc,n.stubArray=zc,n.stubFalse=jc,n.stubObject=Vc,n.stubString=Hc,n.stubTrue=Gc,n.multiply=pf,n.nth=Ea,n.noConflict=Dc,n.noop=kc,n.now=ip,n.pad=cc,n.padEnd=lc,n.padStart=hc,n.parseInt=pc,n.random=rc,n.reduce=vs,n.reduceRight=gs,n.repeat=fc,n.replace=dc,n.result=Xu,n.round=ff,n.runInContext=t,n.sample=bs,n.size=ws,n.snakeCase=Xp,n.some=Es,n.sortedIndex=Ra,n.sortedIndexBy=La,n.sortedIndexOf=Oa,n.sortedLastIndex=Ia,n.sortedLastIndexBy=Na,n.sortedLastIndexOf=Da,n.startCase=qp,n.startsWith=vc,n.subtract=df,n.sum=tl,n.sumBy=el,n.template=gc,n.times=Wc,n.toFinite=_u,n.toInteger=wu,n.toLength=Eu,n.toLower=yc,n.toNumber=Mu,n.toSafeInteger=Su,n.toString=Au,n.toUpper=bc,n.trim=xc,n.trimEnd=_c,n.trimStart=wc,n.truncate=Ec,n.unescape=Mc,n.uniqueId=qc,n.upperCase=Yp,n.upperFirst=Zp,n.each=hs,n.eachRight=ps,n.first=ga,Nc(n,function(){var t={};return fr(n,function(e,r){vl.call(n.prototype,r)||(t[r]=e)}),t}(),{chain:!1}),n.VERSION="4.17.4",c(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){n[t].placeholder=n}),c(["drop","take"],function(t,e){x.prototype[t]=function(n){n=n===it?1:Wl(wu(n),0);var r=this.__filtered__&&!e?new x(this):this.clone();return r.__filtered__?r.__takeCount__=Xl(n,r.__takeCount__):r.__views__.push({size:Xl(n,kt),type:t+(r.__dir__<0?"Right":"")}),r},x.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),c(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==Rt||3==n;x.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:wo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),c(["head","last"],function(t,e){var n="take"+(e?"Right":"");x.prototype[t]=function(){return this[n](1).value()[0]}}),c(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");x.prototype[t]=function(){return this.__filtered__?new x(this):this[n](1)}}),x.prototype.compact=function(){return this.filter(Rc)},x.prototype.find=function(t){return this.filter(t).head()},x.prototype.findLast=function(t){return this.reverse().find(t)},x.prototype.invokeMap=ni(function(t,e){return"function"==typeof t?new x(this):this.map(function(n){return Tr(n,t,e)})}),x.prototype.reject=function(t){return this.filter(Os(wo(t)))},x.prototype.slice=function(t,e){t=wu(t);var n=this;return n.__filtered__&&(t>0||e<0)?new x(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==it&&(e=wu(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},x.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},x.prototype.toArray=function(){return this.take(kt)},fr(x.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),o=/^(?:head|last)$/.test(e),a=n[o?"take"+("last"==e?"Right":""):e],s=o||/^find/.test(e);a&&(n.prototype[e]=function(){var e=this.__wrapped__,u=o?[1]:arguments,c=e instanceof x,l=u[0],h=c||vp(e),p=function(t){var e=a.apply(n,v([t],u));return o&&f?e[0]:e};h&&r&&"function"==typeof l&&1!=l.length&&(c=h=!1);var f=this.__chain__,d=!!this.__actions__.length,m=s&&!f,g=c&&!d;if(!s&&h){e=g?e:new x(this);var y=t.apply(e,u);return y.__actions__.push({func:$a,args:[p],thisArg:it}),new i(y,f)}return m&&g?t.apply(this,u):(y=this.thru(p),m?o?y.value()[0]:y.value():y)})}),c(["pop","push","shift","sort","splice","unshift"],function(t){var e=hl[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",i=/^(?:pop|shift)$/.test(t);n.prototype[t]=function(){var t=arguments;if(i&&!this.__chain__){var n=this.value();return e.apply(vp(n)?n:[],t)}return this[r](function(n){return e.apply(vp(n)?n:[],t)})}}),fr(x.prototype,function(t,e){var r=n[e];if(r){var i=r.name+"";(ih[i]||(ih[i]=[])).push({name:e,func:r})}}),ih[$i(it,gt).name]=[{name:"wrapper",func:it}],x.prototype.clone=P,x.prototype.reverse=J,x.prototype.value=et,n.prototype.at=Zh,n.prototype.chain=Qa,n.prototype.commit=ts,n.prototype.next=es,n.prototype.plant=rs,n.prototype.reverse=is,n.prototype.toJSON=n.prototype.valueOf=n.prototype.value=os,n.prototype.first=n.prototype.head,Ol&&(n.prototype[Ol]=ns),n}();In._=Zn,(i=function(){return Zn}.call(e,n,e,r))!==it&&(r.exports=i)}).call(this)}).call(e,n(144),n(341)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),function(t,r){function i(t,e){function n(){this.constructor=t}We(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}function o(t){return t.interceptors&&t.interceptors.length>0}function a(t,e){var n=t.interceptors||(t.interceptors=[]);return n.push(e),Et(function(){var t=n.indexOf(e);-1!==t&&n.splice(t,1)})}function s(t,e){var n=he();try{var r=t.interceptors;if(r)for(var i=0,o=r.length;i0}function c(t,e){var n=t.changeListeners||(t.changeListeners=[]);return n.push(e),Et(function(){var t=n.indexOf(e);-1!==t&&n.splice(t,1)})}function l(t,e){var n=he(),r=t.changeListeners;if(r){r=r.slice();for(var i=0,o=r.length;i=this.length,value:e0,"actions should have valid names, got: '"+t+"'");var n=function(){return T(t,e,this,arguments)};return n.originalFn=e,n.isMobxAction=!0,n}function T(t,e,n,r){var i=S(t,e,n,r);try{return e.apply(n,r)}finally{A(i)}}function S(t,e,n,r){var i=h()&&!!t,o=0;if(i){o=Date.now();var a=r&&r.length||0,s=new Array(a);if(a>0)for(var u=0;u",i="function"==typeof t?t:e,o="function"==typeof t?e:n;return _t("function"==typeof i,E("m002")),_t(0===i.length,E("m003")),_t("string"==typeof r&&r.length>0,"actions should have valid names, got: '"+r+"'"),T(r,i,o,void 0)}function B(t){return"function"==typeof t&&!0===t.isMobxAction}function z(t,e,n){var r=function(){return T(e,n,t,arguments)};r.isMobxAction=!0,Lt(t,e,r)}function j(t,e,n){function r(){o(s)}var i,o,a;"string"==typeof t?(i=t,o=e,a=n):(i=t.name||"Autorun@"+bt(),o=t,a=e),_t("function"==typeof o,E("m004")),_t(!1===B(o),E("m005")),a&&(o=o.bind(a));var s=new Un(i,function(){this.track(r)});return s.schedule(),s.getDisposer()}function V(t,e,n,r){var i,o,a,s;return"string"==typeof t?(i=t,o=e,a=n,s=r):(i="When@"+bt(),o=t,a=e,s=n),j(i,function(t){if(o.call(s)){t.dispose();var e=he();a.call(s),pe(e)}})}function H(t,e,n,r){function i(){a(l)}var o,a,s,u;"string"==typeof t?(o=t,a=e,s=n,u=r):(o=t.name||"AutorunAsync@"+bt(),a=t,s=e,u=n),_t(!1===B(a),E("m006")),void 0===s&&(s=1),u&&(a=a.bind(u));var c=!1,l=new Un(o,function(){c||(c=!0,setTimeout(function(){c=!1,l.isDisposed||l.track(i)},s))});return l.schedule(),l.getDisposer()}function G(t,e,n){function r(){if(!u.isDisposed){var n=!1;u.track(function(){var e=t(u);n=Pt(i.compareStructural,o,e),o=e}),a&&i.fireImmediately&&e(o,u),a||!0!==n||e(o,u),a&&(a=!1)}}arguments.length>3&&xt(E("m007")),ut(t)&&xt(E("m008"));var i;i="object"==typeof n?n:{},i.name=i.name||t.name||e.name||"Reaction@"+bt(),i.fireImmediately=!0===n||!0===i.fireImmediately,i.delay=i.delay||0,i.compareStructural=i.compareStructural||i.struct||!1,e=hn(i.name,i.context?e.bind(i.context):e),i.context&&(t=t.bind(i.context));var o,a=!0,s=!1,u=new Un(i.name,function(){a||i.delay<1?r():s||(s=!0,setTimeout(function(){s=!1,r()},i.delay))});return u.schedule(),u.getDisposer()}function W(t,e){if(tt(t))return t.$mobx;_t(Object.isExtensible(t),E("m035")),At(t)||(e=(t.constructor.name||"ObservableObject")+"@"+bt()),e||(e="ObservableObject@"+bt());var n=new dn(t,e);return Ot(t,"$mobx",n),n}function X(t,e,n,r){if(t.values[e])return _t("value"in n,"The property "+e+" in "+t.name+" is already observable, cannot redefine it as computed property"),void(t.target[e]=n.value);if("value"in n)if(ut(n.value)){var i=n.value;q(t,e,i.initialValue,i.enhancer)}else B(n.value)&&!0===n.value.autoBind?z(t.target,e,n.value.originalFn):fn(n.value)?Z(t,e,n.value):q(t,e,n.value,r);else Y(t,e,n.get,n.set,!1,!0)}function q(t,e,n,r){if(Nt(t.target,e),o(t)){var i=s(t,{object:t.target,name:e,type:"add",newValue:n});if(!i)return;n=i.newValue}n=(t.values[e]=new an(n,r,t.name+"."+e,!1)).value,Object.defineProperty(t.target,e,K(e)),Q(t,t.target,e,n)}function Y(t,e,n,r,i,o){o&&Nt(t.target,e),t.values[e]=new pn(n,t.target,i,t.name+"."+e,r),o&&Object.defineProperty(t.target,e,J(e))}function Z(t,e,n){var r=t.name+"."+e;n.name=r,n.scope||(n.scope=t.target),t.values[e]=n,Object.defineProperty(t.target,e,J(e))}function K(t){return mn[t]||(mn[t]={configurable:!0,enumerable:!0,get:function(){return this.$mobx.values[t].get()},set:function(e){$(this,t,e)}})}function J(t){return vn[t]||(vn[t]={configurable:!0,enumerable:!1,get:function(){return this.$mobx.values[t].get()},set:function(e){return this.$mobx.values[t].set(e)}})}function $(t,e,n){var r=t.$mobx,i=r.values[e];if(o(r)){var a=s(r,{type:"update",object:t,name:e,newValue:n});if(!a)return;n=a.newValue}if((n=i.prepareNewValue(n))!==on){var c=u(r),p=h(),a=c||p?{type:"update",object:t,oldValue:i.value,name:e,newValue:n}:null;p&&f(a),i.setNewValue(n),c&&l(r,a),p&&d()}}function Q(t,e,n,r){var i=u(t),o=h(),a=i||o?{type:"add",object:e,name:n,newValue:r}:null;o&&f(a),i&&l(t,a),o&&d()}function tt(t){return!!St(t)&&(D(t),gn(t.$mobx))}function et(t,e){if(null===t||void 0===t)return!1;if(void 0!==e){if(w(t)||An(t))throw new Error(E("m019"));if(tt(t)){var n=t.$mobx;return n.values&&!!n.values[e]}return!1}return tt(t)||!!t.$mobx||Ye(t)||zn(t)||fn(t)}function nt(t){return _t(!!t,":("),I(function(e,n,r,i,o){Nt(e,n),_t(!o||!o.get,E("m022")),q(W(e,void 0),n,r,t)},function(t){var e=this.$mobx.values[t];if(void 0!==e)return e.get()},function(t,e){$(this,t,e)},!0,!1)}function rt(t){for(var e=[],n=1;n=2,E("m014")),_t("object"==typeof t,E("m015")),_t(!An(t),E("m016")),n.forEach(function(t){_t("object"==typeof t,E("m017")),_t(!et(t),E("m018"))});for(var r=W(t),i={},o=n.length-1;o>=0;o--){var a=n[o];for(var s in a)if(!0!==i[s]&&Rt(a,s)){if(i[s]=!0,t===a&&!It(t,s))continue;var u=Object.getOwnPropertyDescriptor(a,s);X(r,s,u,e)}}return t}function at(t){if(void 0===t&&(t=void 0),"string"==typeof arguments[1])return yn.apply(null,arguments);if(_t(arguments.length<=1,E("m021")),_t(!ut(t),E("m020")),et(t))return t;var e=lt(t,void 0,void 0);return e!==t?e:Mn.box(t)}function st(t){xt("Expected one or two arguments to observable."+t+". Did you accidentally try to use observable."+t+" as decorator?")}function ut(t){return"object"==typeof t&&null!==t&&!0===t.isMobxModifierDescriptor}function ct(t,e){return _t(!ut(e),"Modifiers cannot be nested"),{isMobxModifierDescriptor:!0,initialValue:e,enhancer:t}}function lt(t,e,n){return ut(t)&&xt("You tried to assign a modifier wrapped value to a collection, please define modifiers when creating the collection, not when modifying it"),et(t)?t:Array.isArray(t)?Mn.array(t,n):At(t)?Mn.object(t,n):zt(t)?Mn.map(t,n):t}function ht(t,e,n){return ut(t)&&xt("You tried to assign a modifier wrapped value to a collection, please define modifiers when creating the collection, not when modifying it"),void 0===t||null===t?t:tt(t)||w(t)||An(t)?t:Array.isArray(t)?Mn.shallowArray(t,n):At(t)?Mn.shallowObject(t,n):zt(t)?Mn.shallowMap(t,n):xt("The shallow modifier / decorator can only used in combination with arrays, objects and maps")}function pt(t){return t}function ft(t,e,n){if(kt(t,e))return e;if(et(t))return t;if(Array.isArray(t))return new en(t,ft,n);if(zt(t))return new Sn(t,ft,n);if(At(t)){var r={};return W(r,n),ot(r,ft,[t]),r}return t}function dt(t,e,n){return kt(t,e)?e:t}function mt(t,e){return void 0===e&&(e=void 0),wt(E("m023")),vt.apply(void 0,arguments)}function vt(t,e){return void 0===e&&(e=void 0),T("",t)}function gt(t){return wt("`mobx.map` is deprecated, use `new ObservableMap` or `mobx.observable.map` instead"),Mn.map(t)}function yt(){return t}function bt(){return++Dn.mobxGuid}function xt(t,e){throw _t(!1,t,e),"X"}function _t(t,e,n){if(!t)throw new Error("[mobx] Invariant failed: "+e+(n?" in '"+n+"'":""))}function wt(t){return-1===Rn.indexOf(t)&&(Rn.push(t),console.error("[mobx] Deprecated: "+t),!0)}function Et(t){var e=!1;return function(){if(!e)return e=!0,t.apply(this,arguments)}}function Mt(t){var e=[];return t.forEach(function(t){-1===e.indexOf(t)&&e.push(t)}),e}function Tt(t,e,n){return void 0===e&&(e=100),void 0===n&&(n=" - "),t?t.slice(0,e).join(n)+(t.length>e?" (... and "+(t.length-e)+"more)":""):""}function St(t){return null!==t&&"object"==typeof t}function At(t){if(null===t||"object"!=typeof t)return!1;var e=Object.getPrototypeOf(t);return e===Object.prototype||null===e}function Ct(){for(var t=arguments[0],e=1,n=arguments.length;e=0;i--)if(!kt(t[i],e[i]))return!1;return!0}if(r){if(t.size!==e.size)return!1;var o=!0;return t.forEach(function(t,n){o=o&&kt(e.get(n),t)}),o}if("object"==typeof t&&"object"==typeof e){if(null===t||null===e)return!1;if(Bt(t)&&Bt(e))return t.size===e.size&&kt(Mn.shallowMap(t).entries(),Mn.shallowMap(e).entries());if(Dt(t).length!==Dt(e).length)return!1;for(var a in t){if(!(a in e))return!1;if(!kt(t[a],e[a]))return!1}return!0}return!1}function Ut(t,e){var n="isMobX"+t;return e.prototype[n]=!0,function(t){return St(t)&&!0===t[n]}}function Ft(t){return Array.isArray(t)||w(t)}function Bt(t){return zt(t)||An(t)}function zt(t){return void 0!==yt().Map&&t instanceof yt().Map}function jt(){return"function"==typeof Symbol&&Symbol.toPrimitive||"@@toPrimitive"}function Vt(t){return null===t?null:"object"==typeof t?""+t:t}function Ht(){var t=yt(),e=Dn;if(t.__mobservableTrackingStack||t.__mobservableViewStack)throw new Error("[mobx] An incompatible version of mobservable is already loaded.");if(t.__mobxGlobal&&t.__mobxGlobal.version!==e.version)throw new Error("[mobx] An incompatible version of mobx is already loaded.");t.__mobxGlobal?Dn=t.__mobxGlobal:t.__mobxGlobal=e}function Gt(){return Dn}function Wt(){Dn.resetId++;var t=new Nn;for(var e in t)-1===In.indexOf(e)&&(Dn[e]=t[e]);Dn.allowStateChanges=!Dn.strictMode}function Xt(t){return t.observers&&t.observers.length>0}function qt(t){return t.observers}function Yt(t,e){var n=t.observers.length;n&&(t.observersIndexes[e.__mapid]=n),t.observers[n]=e,t.lowestObserverState>e.dependenciesState&&(t.lowestObserverState=e.dependenciesState)}function Zt(t,e){if(1===t.observers.length)t.observers.length=0,Kt(t);else{var n=t.observers,r=t.observersIndexes,i=n.pop();if(i!==e){var o=r[e.__mapid]||0;o?r[i.__mapid]=o:delete r[i.__mapid],n[o]=i}delete r[e.__mapid]}}function Kt(t){t.isPendingUnobservation||(t.isPendingUnobservation=!0,Dn.pendingUnobservations.push(t))}function Jt(){Dn.inBatch++}function $t(){if(0==--Dn.inBatch){ve();for(var t=Dn.pendingUnobservations,e=0;e0;Dn.computationDepth>0&&e&&xt(E("m031")+t.name),!Dn.allowStateChanges&&e&&xt(E(Dn.strictMode?"m030a":"m030b")+t.name)}function se(t,e,n){fe(t),t.newObserving=new Array(t.observing.length+100),t.unboundDepsCount=0,t.runId=++Dn.runId;var r=Dn.trackingDerivation;Dn.trackingDerivation=t;var i;try{i=e.call(n)}catch(t){i=new kn(t)}return Dn.trackingDerivation=r,ue(t),i}function ue(t){var e=t.observing,n=t.observing=t.newObserving,r=Pn.UP_TO_DATE;t.newObserving=null;for(var i=0,o=t.unboundDepsCount,a=0;ar&&(r=s.dependenciesState)}for(n.length=i,o=e.length;o--;){var s=e[o];0===s.diffValue&&Zt(s,t),s.diffValue=0}for(;i--;){var s=n[i];1===s.diffValue&&(s.diffValue=0,Yt(s,t))}r!==Pn.UP_TO_DATE&&(t.dependenciesState=r,t.onBecomeStale())}function ce(t){var e=t.observing;t.observing=[];for(var n=e.length;n--;)Zt(e[n],t);t.dependenciesState=Pn.NOT_TRACKING}function le(t){var e=he(),n=t();return pe(e),n}function he(){var t=Dn.trackingDerivation;return Dn.trackingDerivation=null,t}function pe(t){Dn.trackingDerivation=t}function fe(t){if(t.dependenciesState!==Pn.UP_TO_DATE){t.dependenciesState=Pn.UP_TO_DATE;for(var e=t.observing,n=e.length;n--;)e[n].lowestObserverState=Pn.UP_TO_DATE}}function de(t){_t(this&&this.$mobx&&zn(this.$mobx),"Invalid `this`"),_t(!this.$mobx.errorHandler,"Only one onErrorHandler can be registered"),this.$mobx.errorHandler=t}function me(t){return Dn.globalReactionErrorHandlers.push(t),function(){var e=Dn.globalReactionErrorHandlers.indexOf(t);e>=0&&Dn.globalReactionErrorHandlers.splice(e,1)}}function ve(){Dn.inBatch>0||Dn.isRunningReactions||Bn(ge)}function ge(){Dn.isRunningReactions=!0;for(var t=Dn.pendingReactions,e=0;t.length>0;){++e===Fn&&(console.error("Reaction doesn't converge to a stable state after "+Fn+" iterations. Probably there is a cycle in the reactive function: "+t[0]),t.splice(0));for(var n=t.splice(0),r=0,i=n.length;r0&&(e.dependencies=Mt(t.observing).map(je)),e}function Ve(t,e){return He(Me(t,e))}function He(t){var e={name:t.name};return Xt(t)&&(e.observers=qt(t).map(He)),e}function Ge(t,e,n){var r;if(An(t)||w(t)||sn(t))r=Te(t);else{if(!tt(t))return xt("Expected observable map, object or array as first array");if("string"!=typeof e)return xt("InterceptReads can only be used with a specific property, not with an object in general");r=Te(t,e)}return void 0!==r.dehancer?xt("An intercept reader was already established"):(r.dehancer="function"==typeof e?e:n,function(){r.dehancer=void 0})}n.d(e,"extras",function(){return Gn}),n.d(e,"Reaction",function(){return Un}),n.d(e,"untracked",function(){return le}),n.d(e,"IDerivationState",function(){return Pn}),n.d(e,"Atom",function(){return qe}),n.d(e,"BaseAtom",function(){return Xe}),n.d(e,"useStrict",function(){return C}),n.d(e,"isStrictModeEnabled",function(){return P}),n.d(e,"spy",function(){return m}),n.d(e,"asReference",function(){return be}),n.d(e,"asFlat",function(){return _e}),n.d(e,"asStructure",function(){return xe}),n.d(e,"asMap",function(){return we}),n.d(e,"isModifierDescriptor",function(){return ut}),n.d(e,"isObservableObject",function(){return tt}),n.d(e,"isBoxedObservable",function(){return sn}),n.d(e,"isObservableArray",function(){return w}),n.d(e,"ObservableMap",function(){return Sn}),n.d(e,"isObservableMap",function(){return An}),n.d(e,"map",function(){return gt}),n.d(e,"transaction",function(){return mt}),n.d(e,"observable",function(){return Mn}),n.d(e,"IObservableFactories",function(){return En}),n.d(e,"computed",function(){return Hn}),n.d(e,"isObservable",function(){return et}),n.d(e,"isComputed",function(){return Ae}),n.d(e,"extendObservable",function(){return rt}),n.d(e,"extendShallowObservable",function(){return it}),n.d(e,"observe",function(){return Ce}),n.d(e,"intercept",function(){return Le}),n.d(e,"autorun",function(){return j}),n.d(e,"autorunAsync",function(){return H}),n.d(e,"when",function(){return V}),n.d(e,"reaction",function(){return G}),n.d(e,"action",function(){return hn}),n.d(e,"isAction",function(){return B}),n.d(e,"runInAction",function(){return F}),n.d(e,"expr",function(){return Ne}),n.d(e,"toJS",function(){return De}),n.d(e,"createTransformer",function(){return ke}),n.d(e,"whyRun",function(){return Be}),n.d(e,"isArrayLike",function(){return Ft});/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. 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 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +var We=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},Xe=function(){function t(t){void 0===t&&(t="Atom@"+bt()),this.name=t,this.isPendingUnobservation=!0,this.observers=[],this.observersIndexes={},this.diffValue=0,this.lastAccessedBy=0,this.lowestObserverState=Pn.NOT_TRACKING}return t.prototype.onBecomeUnobserved=function(){},t.prototype.reportObserved=function(){Qt(this)},t.prototype.reportChanged=function(){Jt(),te(this),$t()},t.prototype.toString=function(){return this.name},t}(),qe=function(t){function e(e,n,r){void 0===e&&(e="Atom@"+bt()),void 0===n&&(n=Ln),void 0===r&&(r=Ln);var i=t.call(this,e)||this;return i.name=e,i.onBecomeObservedHandler=n,i.onBecomeUnobservedHandler=r,i.isPendingUnobservation=!1,i.isBeingTracked=!1,i}return i(e,t),e.prototype.reportObserved=function(){return Jt(),t.prototype.reportObserved.call(this),this.isBeingTracked||(this.isBeingTracked=!0,this.onBecomeObservedHandler()),$t(),!!Dn.trackingDerivation},e.prototype.onBecomeUnobserved=function(){this.isBeingTracked=!1,this.onBecomeUnobservedHandler()},e}(Xe),Ye=Ut("Atom",Xe),Ze={spyReportEnd:!0},Ke="__$$iterating",Je=function(){var t=!1,e={};return Object.defineProperty(e,"0",{set:function(){t=!0}}),Object.create(e)[0]=1,!1===t}(),$e=0,Qe=function(){function t(){}return t}();!function(t,e){void 0!==Object.setPrototypeOf?Object.setPrototypeOf(t.prototype,e):void 0!==t.prototype.__proto__?t.prototype.__proto__=e:t.prototype=e}(Qe,Array.prototype);var tn=function(){function t(t,e,n,r){this.array=n,this.owned=r,this.values=[],this.lastKnownLength=0,this.interceptors=null,this.changeListeners=null,this.atom=new Xe(t||"ObservableArray@"+bt()),this.enhancer=function(n,r){return e(n,r,t+"[..]")}}return t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.dehanceValues=function(t){return void 0!==this.dehancer?t.map(this.dehancer):t},t.prototype.intercept=function(t){return a(this,t)},t.prototype.observe=function(t,e){return void 0===e&&(e=!1),e&&t({object:this.array,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),c(this,t)},t.prototype.getArrayLength=function(){return this.atom.reportObserved(),this.values.length},t.prototype.setArrayLength=function(t){if("number"!=typeof t||t<0)throw new Error("[mobx.array] Out of range: "+t);var e=this.values.length;if(t!==e)if(t>e){for(var n=new Array(t-e),r=0;r0&&t+e+1>$e&&_(t+e+1)},t.prototype.spliceWithArray=function(t,e,n){var r=this;ae(this.atom);var i=this.values.length;if(void 0===t?t=0:t>i?t=i:t<0&&(t=Math.max(0,i+t)),e=1===arguments.length?i-t:void 0===e||null===e?0:Math.max(0,Math.min(e,i-t)),void 0===n&&(n=[]),o(this)){var a=s(this,{object:this.array,type:"splice",index:t,removedCount:e,added:n});if(!a)return Cn;e=a.removedCount,n=a.added}n=n.map(function(t){return r.enhancer(t,void 0)});var u=n.length-e;this.updateArrayLength(i,u);var c=this.spliceItemsIntoValues(t,e,n);return 0===e&&0===n.length||this.notifyArraySplice(t,n,c),this.dehanceValues(c)},t.prototype.spliceItemsIntoValues=function(t,e,n){if(n.length<1e4)return(i=this.values).splice.apply(i,[t,e].concat(n));var r=this.values.slice(t,t+e);return this.values=this.values.slice(0,t).concat(n,this.values.slice(t+e)),r;var i},t.prototype.notifyArrayChildUpdate=function(t,e,n){var r=!this.owned&&h(),i=u(this),o=i||r?{object:this.array,type:"update",index:t,newValue:e,oldValue:n}:null;r&&f(o),this.atom.reportChanged(),i&&l(this,o),r&&d()},t.prototype.notifyArraySplice=function(t,e,n){var r=!this.owned&&h(),i=u(this),o=i||r?{object:this.array,type:"splice",index:t,removed:n,added:e,removedCount:n.length,addedCount:e.length}:null;r&&f(o),this.atom.reportChanged(),i&&l(this,o),r&&d()},t}(),en=function(t){function e(e,n,r,i){void 0===r&&(r="ObservableArray@"+bt()),void 0===i&&(i=!1);var o=t.call(this)||this,a=new tn(r,n,o,i);return Ot(o,"$mobx",a),e&&e.length&&o.spliceWithArray(0,0,e),Je&&Object.defineProperty(a.array,"0",nn),o}return i(e,t),e.prototype.intercept=function(t){return this.$mobx.intercept(t)},e.prototype.observe=function(t,e){return void 0===e&&(e=!1),this.$mobx.observe(t,e)},e.prototype.clear=function(){return this.splice(0)},e.prototype.concat=function(){for(var t=[],e=0;e-1&&(this.splice(e,1),!0)},e.prototype.move=function(t,e){function n(t){if(t<0)throw new Error("[mobx.array] Index out of bounds: "+t+" is negative");var e=this.$mobx.values.length;if(t>=e)throw new Error("[mobx.array] Index out of bounds: "+t+" is not smaller than "+e)}if(n.call(this,t),n.call(this,e),t!==e){var r,i=this.$mobx.values;r=t";Lt(t,e,hn(o,n))},function(t){return this[t]},function(){_t(!1,E("m001"))},!1,!0),ln=I(function(t,e,n){z(t,e,n)},function(t){return this[t]},function(){_t(!1,E("m001"))},!1,!1),hn=function(t,e,n,r){return 1===arguments.length&&"function"==typeof t?M(t.name||"",t):2===arguments.length&&"function"==typeof e?M(t,e):1===arguments.length&&"string"==typeof t?U(t):U(e).apply(null,arguments)};hn.bound=function(t,e,n){if("function"==typeof t){var r=M("",t);return r.autoBind=!0,r}return ln.apply(null,arguments)};var pn=function(){function t(t,e,n,r,i){this.derivation=t,this.scope=e,this.compareStructural=n,this.dependenciesState=Pn.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isPendingUnobservation=!1,this.observers=[],this.observersIndexes={},this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=Pn.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+bt(),this.value=void 0,this.isComputing=!1,this.isRunningSetter=!1,this.name=r||"ComputedValue@"+bt(),i&&(this.setter=M(r+"-setter",i))}return t.prototype.onBecomeStale=function(){ne(this)},t.prototype.onBecomeUnobserved=function(){ce(this),this.value=void 0},t.prototype.get=function(){_t(!this.isComputing,"Cycle detected in computation "+this.name,this.derivation),0===Dn.inBatch?(Jt(),ie(this)&&(this.value=this.computeValue(!1)),$t()):(Qt(this),ie(this)&&this.trackAndCompute()&&ee(this));var t=this.value;if(re(t))throw t.cause;return t},t.prototype.peek=function(){var t=this.computeValue(!1);if(re(t))throw t.cause;return t},t.prototype.set=function(t){if(this.setter){_t(!this.isRunningSetter,"The setter of computed value '"+this.name+"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"),this.isRunningSetter=!0;try{this.setter.call(this.scope,t)}finally{this.isRunningSetter=!1}}else _t(!1,"[ComputedValue '"+this.name+"'] It is not possible to assign a new value to a computed value.")},t.prototype.trackAndCompute=function(){h()&&p({object:this.scope,type:"compute",fn:this.derivation});var t=this.value,e=this.value=this.computeValue(!0);return re(e)||Pt(this.compareStructural,e,t)},t.prototype.computeValue=function(t){this.isComputing=!0,Dn.computationDepth++;var e;if(t)e=se(this,this.derivation,this.scope);else try{e=this.derivation.call(this.scope)}catch(t){e=new kn(t)}return Dn.computationDepth--,this.isComputing=!1,e},t.prototype.observe=function(t,e){var n=this,r=!0,i=void 0;return j(function(){var o=n.get();if(!r||e){var a=he();t({type:"update",object:n,newValue:o,oldValue:i}),pe(a)}r=!1,i=o})},t.prototype.toJSON=function(){return this.get()},t.prototype.toString=function(){return this.name+"["+this.derivation.toString()+"]"},t.prototype.valueOf=function(){return Vt(this.get())},t.prototype.whyRun=function(){var t=Boolean(Dn.trackingDerivation),e=Mt(this.isComputing?this.newObserving:this.observing).map(function(t){return t.name}),n=Mt(qt(this).map(function(t){return t.name}));return"\nWhyRun? computation '"+this.name+"':\n * Running because: "+(t?"[active] the value of this computation is needed by a reaction":this.isComputing?"[get] The value of this computed was requested outside a reaction":"[idle] not running at the moment")+"\n"+(this.dependenciesState===Pn.NOT_TRACKING?E("m032"):" * This computation will re-run if any of the following observables changes:\n "+Tt(e)+"\n "+(this.isComputing&&t?" (... or any observable accessed during the remainder of the current run)":"")+"\n\t"+E("m038")+"\n\n * If the outcome of this computation changes, the following observers will be re-run:\n "+Tt(n)+"\n")},t}();pn.prototype[jt()]=pn.prototype.valueOf;var fn=Ut("ComputedValue",pn),dn=function(){function t(t,e){this.target=t,this.name=e,this.values={},this.changeListeners=null,this.interceptors=null}return t.prototype.observe=function(t,e){return _t(!0!==e,"`observe` doesn't support the fire immediately property for observable objects."),c(this,t)},t.prototype.intercept=function(t){return a(this,t)},t}(),mn={},vn={},gn=Ut("ObservableObjectAdministration",dn),yn=nt(lt),bn=nt(ht),xn=nt(pt),_n=nt(ft),wn=nt(dt),En=function(){function t(){}return t.prototype.box=function(t,e){return arguments.length>2&&st("box"),new an(t,lt,e)},t.prototype.shallowBox=function(t,e){return arguments.length>2&&st("shallowBox"),new an(t,pt,e)},t.prototype.array=function(t,e){return arguments.length>2&&st("array"),new en(t,lt,e)},t.prototype.shallowArray=function(t,e){return arguments.length>2&&st("shallowArray"),new en(t,pt,e)},t.prototype.map=function(t,e){return arguments.length>2&&st("map"),new Sn(t,lt,e)},t.prototype.shallowMap=function(t,e){return arguments.length>2&&st("shallowMap"),new Sn(t,pt,e)},t.prototype.object=function(t,e){arguments.length>2&&st("object");var n={};return W(n,e),rt(n,t),n},t.prototype.shallowObject=function(t,e){arguments.length>2&&st("shallowObject");var n={};return W(n,e),it(n,t),n},t.prototype.ref=function(){return arguments.length<2?ct(pt,arguments[0]):xn.apply(null,arguments)},t.prototype.shallow=function(){return arguments.length<2?ct(ht,arguments[0]):bn.apply(null,arguments)},t.prototype.deep=function(){return arguments.length<2?ct(lt,arguments[0]):yn.apply(null,arguments)},t.prototype.struct=function(){return arguments.length<2?ct(ft,arguments[0]):_n.apply(null,arguments)},t}(),Mn=at;Object.getOwnPropertyNames(En.prototype).filter(function(t){return"constructor"!==t}).forEach(function(t){return Mn[t]=En.prototype[t]}),Mn.deep.struct=Mn.struct,Mn.ref.struct=function(){return arguments.length<2?ct(dt,arguments[0]):wn.apply(null,arguments)};var Tn={},Sn=function(){function t(t,e,n){void 0===e&&(e=lt),void 0===n&&(n="ObservableMap@"+bt()),this.enhancer=e,this.name=n,this.$mobx=Tn,this._data=Object.create(null),this._hasMap=Object.create(null),this._keys=new en(void 0,pt,this.name+".keys()",!0),this.interceptors=null,this.changeListeners=null,this.dehancer=void 0,this.merge(t)}return t.prototype._has=function(t){return void 0!==this._data[t]},t.prototype.has=function(t){return!!this.isValidKey(t)&&(t=""+t,this._hasMap[t]?this._hasMap[t].get():this._updateHasMapEntry(t,!1).get())},t.prototype.set=function(t,e){this.assertValidKey(t),t=""+t;var n=this._has(t);if(o(this)){var r=s(this,{type:n?"update":"add",object:this,newValue:e,name:t});if(!r)return this;e=r.newValue}return n?this._updateValue(t,e):this._addValue(t,e),this},t.prototype.delete=function(t){var e=this;if(this.assertValidKey(t),t=""+t,o(this)){var n=s(this,{type:"delete",object:this,name:t});if(!n)return!1}if(this._has(t)){var r=h(),i=u(this),n=i||r?{type:"delete",object:this,oldValue:this._data[t].value,name:t}:null;return r&&f(n),vt(function(){e._keys.remove(t),e._updateHasMapEntry(t,!1),e._data[t].setNewValue(void 0),e._data[t]=void 0}),i&&l(this,n),r&&d(),!0}return!1},t.prototype._updateHasMapEntry=function(t,e){var n=this._hasMap[t];return n?n.setNewValue(e):n=this._hasMap[t]=new an(e,pt,this.name+"."+t+"?",!1),n},t.prototype._updateValue=function(t,e){var n=this._data[t];if((e=n.prepareNewValue(e))!==on){var r=h(),i=u(this),o=i||r?{type:"update",object:this,oldValue:n.value,name:t,newValue:e}:null;r&&f(o),n.setNewValue(e),i&&l(this,o),r&&d()}},t.prototype._addValue=function(t,e){var n=this;vt(function(){var r=n._data[t]=new an(e,n.enhancer,n.name+"."+t,!1);e=r.value,n._updateHasMapEntry(t,!0),n._keys.push(t)});var r=h(),i=u(this),o=i||r?{type:"add",object:this,name:t,newValue:e}:null;r&&f(o),i&&l(this,o),r&&d()},t.prototype.get=function(t){return t=""+t,this.has(t)?this.dehanceValue(this._data[t].get()):this.dehanceValue(void 0)},t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.keys=function(){return g(this._keys.slice())},t.prototype.values=function(){return g(this._keys.map(this.get,this))},t.prototype.entries=function(){var t=this;return g(this._keys.map(function(e){return[e,t.get(e)]}))},t.prototype.forEach=function(t,e){var n=this;this.keys().forEach(function(r){return t.call(e,n.get(r),r,n)})},t.prototype.merge=function(t){var e=this;return An(t)&&(t=t.toJS()),vt(function(){At(t)?Object.keys(t).forEach(function(n){return e.set(n,t[n])}):Array.isArray(t)?t.forEach(function(t){var n=t[0],r=t[1];return e.set(n,r)}):zt(t)?t.forEach(function(t,n){return e.set(n,t)}):null!==t&&void 0!==t&&xt("Cannot initialize map from "+t)}),this},t.prototype.clear=function(){var t=this;vt(function(){le(function(){t.keys().forEach(t.delete,t)})})},t.prototype.replace=function(t){var e=this;return vt(function(){e.clear(),e.merge(t)}),this},Object.defineProperty(t.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),t.prototype.toJS=function(){var t=this,e={};return this.keys().forEach(function(n){return e[n]=t.get(n)}),e},t.prototype.toJSON=function(){return this.toJS()},t.prototype.isValidKey=function(t){return null!==t&&void 0!==t&&("string"==typeof t||"number"==typeof t||"boolean"==typeof t)},t.prototype.assertValidKey=function(t){if(!this.isValidKey(t))throw new Error("[mobx.map] Invalid key: '"+t+"', only strings, numbers and booleans are accepted as key in observable maps.")},t.prototype.toString=function(){var t=this;return this.name+"[{ "+this.keys().map(function(e){return e+": "+t.get(e)}).join(", ")+" }]"},t.prototype.observe=function(t,e){return _t(!0!==e,E("m033")),c(this,t)},t.prototype.intercept=function(t){return a(this,t)},t}();y(Sn.prototype,function(){return this.entries()});var An=Ut("ObservableMap",Sn),Cn=[];Object.freeze(Cn);var Pn,Rn=[],Ln=function(){},On=Object.prototype.hasOwnProperty,In=["mobxGuid","resetId","spyListeners","strictMode","runId"],Nn=function(){function t(){this.version=5,this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.strictMode=!1,this.resetId=0,this.spyListeners=[],this.globalReactionErrorHandlers=[]}return t}(),Dn=new Nn;!function(t){t[t.NOT_TRACKING=-1]="NOT_TRACKING",t[t.UP_TO_DATE=0]="UP_TO_DATE",t[t.POSSIBLY_STALE=1]="POSSIBLY_STALE",t[t.STALE=2]="STALE"}(Pn||(Pn={}));var kn=function(){function t(t){this.cause=t}return t}(),Un=function(){function t(t,e){void 0===t&&(t="Reaction@"+bt()),this.name=t,this.onInvalidate=e,this.observing=[],this.newObserving=[],this.dependenciesState=Pn.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+bt(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1}return t.prototype.onBecomeStale=function(){this.schedule()},t.prototype.schedule=function(){this._isScheduled||(this._isScheduled=!0,Dn.pendingReactions.push(this),ve())},t.prototype.isScheduled=function(){return this._isScheduled},t.prototype.runReaction=function(){this.isDisposed||(Jt(),this._isScheduled=!1,ie(this)&&(this._isTrackPending=!0,this.onInvalidate(),this._isTrackPending&&h()&&p({object:this,type:"scheduled-reaction"})),$t())},t.prototype.track=function(t){Jt();var e,n=h();n&&(e=Date.now(),f({object:this,type:"reaction",fn:t})),this._isRunning=!0;var r=se(this,t,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&ce(this),re(r)&&this.reportExceptionInDerivation(r.cause),n&&d({time:Date.now()-e}),$t()},t.prototype.reportExceptionInDerivation=function(t){var e=this;if(this.errorHandler)return void this.errorHandler(t,this);var n="[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '"+this,r=E("m037");console.error(n||r,t),h()&&p({type:"error",message:n,error:t,object:this}),Dn.globalReactionErrorHandlers.forEach(function(n){return n(t,e)})},t.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._isRunning||(Jt(),ce(this),$t()))},t.prototype.getDisposer=function(){var t=this.dispose.bind(this);return t.$mobx=this,t.onError=de,t},t.prototype.toString=function(){return"Reaction["+this.name+"]"},t.prototype.whyRun=function(){var t=Mt(this._isRunning?this.newObserving:this.observing).map(function(t){return t.name});return"\nWhyRun? reaction '"+this.name+"':\n * Status: ["+(this.isDisposed?"stopped":this._isRunning?"running":this.isScheduled()?"scheduled":"idle")+"]\n * This reaction will re-run if any of the following observables changes:\n "+Tt(t)+"\n "+(this._isRunning?" (... or any observable accessed during the remainder of the current run)":"")+"\n\t"+E("m038")+"\n"},t}(),Fn=100,Bn=function(t){return t()},zn=Ut("Reaction",Un),jn=Ee(!1),Vn=Ee(!0),Hn=function(t,e,n){if("string"==typeof e)return jn.apply(null,arguments);_t("function"==typeof t,E("m011")),_t(arguments.length<3,E("m012"));var r="object"==typeof e?e:{};return r.setter="function"==typeof e?e:r.setter,new pn(t,r.context,r.compareStructural||r.struct||!1,r.name||t.name||"",r.setter)};Hn.struct=Vn;var Gn={allowStateChanges:R,deepEqual:kt,getAtom:Me,getDebugName:Se,getDependencyTree:ze,getAdministration:Te,getGlobalState:Gt,getObserverTree:Ve,interceptReads:Ge,isComputingDerivation:oe,isSpyEnabled:h,onReactionError:me,reserveArrayBuffer:_,resetGlobalState:Wt,shareGlobalState:Ht,spyReport:p,spyReportEnd:d,spyReportStart:f,setReactionScheduler:ye},Wn="undefined"!=typeof exports?exports:void 0!==r&&void 0!==r.exports?r.exports:{};"object"==typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({spy:m,extras:Gn}),Wn.default=Wn}.call(e,n(144),n(340)(t))},function(t,e,n){"use strict";function r(t){if(d){var e=t.node,n=t.children;if(n.length)for(var r=0;r1){for(var d=Array(f),m=0;m1){for(var g=Array(v),y=0;ydocument.F=Object<\/script>"),t.close(),u=t.F;r--;)delete u.prototype[o[r]];return u()};t.exports=Object.create||function(t,e){var n;return null!==t?(s.prototype=r(t),n=new s,s.prototype=null,n[a]=t):n=u(),void 0===e?n:i(n,e)}},function(t,e,n){var r=n(49),i=n(50),o=n(23),a=n(72),s=n(24),u=n(102),c=Object.getOwnPropertyDescriptor;e.f=n(20)?c:function(t,e){if(t=o(t),e=a(e,!0),u)try{return c(t,e)}catch(t){}if(s(t,e))return i(!r.f.call(t,e),t[e])}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var r=n(21),i=n(9),o=n(28);t.exports=function(t,e){var n=(i.Object||{})[t]||Object[t],a={};a[t]=e(n),r(r.S+r.F*o(function(){n(1)}),"Object",a)}},function(t,e,n){var r=n(25).f,i=n(24),o=n(31)("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},function(t,e,n){var r=n(69)("keys"),i=n(51);t.exports=function(t){return r[t]||(r[t]=i(t))}},function(t,e,n){var r=n(22),i=r["__core-js_shared__"]||(r["__core-js_shared__"]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e,n){var r=n(59);t.exports=function(t){return Object(r(t))}},function(t,e,n){var r=n(30);t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e,n){var r=n(22),i=n(9),o=n(62),a=n(74),s=n(25).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:r.Symbol||{});"_"==t.charAt(0)||t in e||s(e,t,{value:a.f(t)})}},function(t,e,n){e.f=n(31)},function(t,e,n){"use strict";function r(t,e){return t===e?0!==t||0!==e||1/t==1/e:t!==t&&e!==e}function i(t,e){if(r(t,e))return!0;if("object"!=typeof t||null===t||"object"!=typeof e||null===e)return!1;var n=Object.keys(t),i=Object.keys(e);if(n.length!==i.length)return!1;for(var a=0;a-1||a("96",t),!c.plugins[n]){e.extractEvents||a("97",t),c.plugins[n]=e;var r=e.eventTypes;for(var o in r)i(r[o],e,o)||a("98",o,t)}}}function i(t,e,n){c.eventNameDispatchConfigs.hasOwnProperty(n)&&a("99",n),c.eventNameDispatchConfigs[n]=t;var r=t.phasedRegistrationNames;if(r){for(var i in r)if(r.hasOwnProperty(i)){var s=r[i];o(s,e,n)}return!0}return!!t.registrationName&&(o(t.registrationName,e,n),!0)}function o(t,e,n){c.registrationNameModules[t]&&a("100",t),c.registrationNameModules[t]=e,c.registrationNameDependencies[t]=e.eventTypes[n].dependencies}var a=n(2),s=(n(0),null),u={},c={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:null,injectEventPluginOrder:function(t){s&&a("101"),s=Array.prototype.slice.call(t),r()},injectEventPluginsByName:function(t){var e=!1;for(var n in t)if(t.hasOwnProperty(n)){var i=t[n];u.hasOwnProperty(n)&&u[n]===i||(u[n]&&a("102",n),u[n]=i,e=!0)}e&&r()},getPluginModuleForEvent:function(t){var e=t.dispatchConfig;if(e.registrationName)return c.registrationNameModules[e.registrationName]||null;if(void 0!==e.phasedRegistrationNames){var n=e.phasedRegistrationNames;for(var r in n)if(n.hasOwnProperty(r)){var i=c.registrationNameModules[n[r]];if(i)return i}}return null},_resetEventPlugins:function(){s=null;for(var t in u)u.hasOwnProperty(t)&&delete u[t];c.plugins.length=0;var e=c.eventNameDispatchConfigs;for(var n in e)e.hasOwnProperty(n)&&delete e[n];var r=c.registrationNameModules;for(var i in r)r.hasOwnProperty(i)&&delete r[i]}};t.exports=c},function(t,e,n){"use strict";function r(t){return"topMouseUp"===t||"topTouchEnd"===t||"topTouchCancel"===t}function i(t){return"topMouseMove"===t||"topTouchMove"===t}function o(t){return"topMouseDown"===t||"topTouchStart"===t}function a(t,e,n,r){var i=t.type||"unknown-event";t.currentTarget=g.getNodeFromInstance(r),e?m.invokeGuardedCallbackWithCatch(i,n,t):m.invokeGuardedCallback(i,n,t),t.currentTarget=null}function s(t,e){var n=t._dispatchListeners,r=t._dispatchInstances;if(Array.isArray(n))for(var i=0;i0&&r.length<20?n+" (keys: "+r.join(", ")+")":n}function o(t,e){var n=s.get(t);if(!n){return null}return n}var a=n(2),s=(n(18),n(45)),u=(n(12),n(16)),c=(n(0),n(1),{isMounted:function(t){var e=s.get(t);return!!e&&!!e._renderedComponent},enqueueCallback:function(t,e,n){c.validateCallback(e,n);var i=o(t);if(!i)return null;i._pendingCallbacks?i._pendingCallbacks.push(e):i._pendingCallbacks=[e],r(i)},enqueueCallbackInternal:function(t,e){t._pendingCallbacks?t._pendingCallbacks.push(e):t._pendingCallbacks=[e],r(t)},enqueueForceUpdate:function(t){var e=o(t,"forceUpdate");e&&(e._pendingForceUpdate=!0,r(e))},enqueueReplaceState:function(t,e,n){var i=o(t,"replaceState");i&&(i._pendingStateQueue=[e],i._pendingReplaceState=!0,void 0!==n&&null!==n&&(c.validateCallback(n,"replaceState"),i._pendingCallbacks?i._pendingCallbacks.push(n):i._pendingCallbacks=[n]),r(i))},enqueueSetState:function(t,e){var n=o(t,"setState");if(n){(n._pendingStateQueue||(n._pendingStateQueue=[])).push(e),r(n)}},enqueueElementInternal:function(t,e,n){t._pendingElement=e,t._context=n,r(t)},validateCallback:function(t,e){t&&"function"!=typeof t&&a("122",e,i(t))}});t.exports=c},function(t,e,n){"use strict";var r=function(t){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,n,r,i){MSApp.execUnsafeLocalFunction(function(){return t(e,n,r,i)})}:t};t.exports=r},function(t,e,n){"use strict";function r(t){var e,n=t.keyCode;return"charCode"in t?0===(e=t.charCode)&&13===n&&(e=13):e=n,e>=32||13===e?e:0}t.exports=r},function(t,e,n){"use strict";function r(t){var e=this,n=e.nativeEvent;if(n.getModifierState)return n.getModifierState(t);var r=o[t];return!!r&&!!n[r]}function i(t){return r}var o={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};t.exports=i},function(t,e,n){"use strict";function r(t){var e=t.target||t.srcElement||window;return e.correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}t.exports=r},function(t,e,n){"use strict";/** +!function(){"use strict";function n(){for(var t=[],e=0;e150&&console.log("Last sim_world_update took "+(t.timestamp-this.lastUpdateTimestamp)+"ms"),this.lastUpdateTimestamp=t.timestamp,-1!==this.lastSeqNum&&t.world.sequenceNum>this.lastSeqNum+1&&console.debug("Last seq: "+this.lastSeqNum+". New seq: "+t.world.sequenceNum+"."),this.lastSeqNum=t.world.sequenceNum}},{key:"requestMapData",value:function(t){this.websocket.send((0,o.default)({type:"RetrieveMapData",elements:t}))}},{key:"requestMapElementsByRadius",value:function(t){this.websocket.send((0,o.default)({type:"RetrieveMapElementsByRadius",radius:t}))}},{key:"requestRoute",value:function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];this.websocket.send((0,o.default)({type:"SendRoutingRequest",start:t,end:n,waypoint:e,sendDefaultRoute:r}))}}]),t}(),v=function(){var t=window.location.origin,e=document.createElement("a");return e.href=t,("https:"===location.protocol?"wss":"ws")+"://"+e.hostname+":"+window.location.port+"/websocket"}(),g=new m(v);e.default=g},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var i=n(1),o=r(i),a=n(2),s=r(a),u=n(8),c=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(u);n(149);var l=n(42),h=r(l),p=n(168),f=r(p),d=n(167),m=r(d),v=n(170),g=r(v),y=n(171),b=r(y),x=n(176),_=r(x),w=n(99),E=r(w),M=n(169),T=r(M),S=n(172),A=r(S),C=n(173),P=r(C),R=n(174),L=r(R),O=n(335),I=r(O),N=function(){function t(){(0,o.default)(this,t);var e=!this.isMobileDevice();this.coordinates=new f.default,this.renderer=new c.WebGLRenderer({antialias:e}),this.scene=new c.Scene,this.scene.background=new c.Color(203825),this.ground=new g.default,this.map=new b.default,this.adc=new m.default,this.adcMeshAddedToScene=!1,this.planningTrajectory=new _.default,this.perceptionObstacles=new E.default,this.decision=new T.default,this.prediction=new A.default,this.routing=new P.default,this.routingEditor=new L.default,this.stats=null,h.default.debug.performanceMonitor&&(this.stats=new I.default,this.stats.showPanel(1),this.stats.domElement.style.position="absolute",this.stats.domElement.style.top=null,this.stats.domElement.style.bottom="0px",document.body.appendChild(this.stats.domElement))}return(0,s.default)(t,[{key:"initialize",value:function(t,e,n,r){this.options=r,this.canvasId=t,this.viewAngle=h.default.camera.viewAngle,this.viewDistance=h.default.camera.laneWidth*h.default.camera.laneWidthToViewDistanceRatio,this.camera=new c.PerspectiveCamera(h.default.camera[this.options.cameraAngle].fov,window.innerWidth/window.innerHeight,h.default.camera[this.options.cameraAngle].near,h.default.camera[this.options.cameraAngle].far),this.camera.name="camera",this.scene.add(this.camera),this.updateDimension(e,n),this.renderer.setPixelRatio(window.devicePixelRatio),document.getElementById(t).appendChild(this.renderer.domElement);var i=new c.AmbientLight(4473924),o=new c.DirectionalLight(16772829);o.position.set(0,0,1).normalize(),this.controls=new c.OrbitControls(this.camera,this.renderer.domElement),this.controls.enable=!1,this.onMouseDownHandler=this.editRoute.bind(this),this.scene.add(i),this.scene.add(o),this.animate()}},{key:"maybeInitializeOffest",value:function(t,e){this.coordinates.isInitialized()||this.coordinates.initialize(t,e)}},{key:"updateDimension",value:function(t,e){this.camera.aspect=t/e,this.camera.updateProjectionMatrix(),this.renderer.setSize(t,e)}},{key:"enableOrbitControls",value:function(){var t=this.adc.mesh.position;this.controls.enabled=!0,this.controls.enableRotate=!1,this.controls.reset(),this.controls.minDistance=20,this.controls.maxDistance=1e3,this.controls.target.set(t.x,t.y,0),this.camera.position.set(t.x,t.y,50),this.camera.up.set(0,1,0),this.camera.lookAt(t.x,t.y,0)}},{key:"adjustCamera",value:function(t,e){if(!this.routingEditor.isInEditingMode()){switch(this.camera.fov=h.default.camera[e].fov,this.camera.near=h.default.camera[e].near,this.camera.far=h.default.camera[e].far,e){case"Default":var n=this.viewDistance*Math.cos(t.rotation.y)*Math.cos(this.viewAngle),r=this.viewDistance*Math.sin(t.rotation.y)*Math.cos(this.viewAngle),i=this.viewDistance*Math.sin(this.viewAngle);this.camera.position.x=t.position.x-n,this.camera.position.y=t.position.y-r,this.camera.position.z=t.position.z+i,this.camera.up.set(0,0,1),this.camera.lookAt({x:t.position.x+2*n,y:t.position.y+2*r,z:0}),this.controls.enabled=!1;break;case"Near":n=.5*this.viewDistance*Math.cos(t.rotation.y)*Math.cos(this.viewAngle),r=.5*this.viewDistance*Math.sin(t.rotation.y)*Math.cos(this.viewAngle),i=.5*this.viewDistance*Math.sin(this.viewAngle),this.camera.position.x=t.position.x-n,this.camera.position.y=t.position.y-r,this.camera.position.z=t.position.z+i,this.camera.up.set(0,0,1),this.camera.lookAt({x:t.position.x+2*n,y:t.position.y+2*r,z:0}),this.controls.enabled=!1;break;case"Overhead":r=.5*this.viewDistance*Math.sin(t.rotation.y)*Math.cos(this.viewAngle),i=2*this.viewDistance*Math.sin(this.viewAngle),this.camera.position.x=t.position.x,this.camera.position.y=t.position.y+r,this.camera.position.z=2*(t.position.z+i),this.camera.up.set(0,1,0),this.camera.lookAt({x:t.position.x,y:t.position.y+r,z:0}),this.controls.enabled=!1;break;case"Map":this.controls.enabled||this.enableOrbitControls()}this.camera.updateProjectionMatrix()}}},{key:"enableRouteEditing",value:function(){this.enableOrbitControls(),this.routingEditor.enableEditingMode(this.camera,this.adc),document.getElementById(this.canvasId).addEventListener("mousedown",this.onMouseDownHandler,!1)}},{key:"disableRouteEditing",value:function(){this.routingEditor.disableEditingMode(this.scene),document.getElementById(this.canvasId).removeEventListener("mousedown",this.onMouseDownHandler,!1)}},{key:"removeAllRoutingPoints",value:function(){this.routingEditor.removeAllRoutePoints(this.scene)}},{key:"removeLastRoutingPoint",value:function(){this.routingEditor.removeLastRoutingPoint(this.scene)}},{key:"sendRoutingRequest",value:function(){return arguments.length>0&&void 0!==arguments[0]&&arguments[0]?this.routingEditor.sendDefaultRoutingRequest(this.adc.mesh.position,this.coordinates):this.routingEditor.sendRoutingRequest(this.Scene,this.adc.mesh.position,this.coordinates)}},{key:"editRoute",value:function(t){this.routingEditor.isInEditingMode()&&t.button===c.MOUSE.LEFT&&this.coordinates.isInitialized()&&this.ground.mesh&&this.routingEditor.addRoutingPoint(t,this.camera,this.ground,this.scene)}},{key:"render",value:function(){this.coordinates.isInitialized()&&this.adc.mesh&&this.ground.mesh&&(this.adcMeshAddedToScene||(this.adcMeshAddedToScene=!0,this.adc.mesh.name="adc",this.scene.add(this.adc.mesh)),this.ground.initialized||(this.ground.initialize(this.coordinates),this.ground.mesh.name="ground",this.scene.add(this.ground.mesh)),this.adjustCamera(this.adc.mesh,this.options.cameraAngle),this.renderer.render(this.scene,this.camera))}},{key:"animate",value:function(){var t=this;requestAnimationFrame(function(){t.animate()}),this.stats&&this.stats.update(),this.render()}},{key:"updateWorld",value:function(t){this.adc.update(t,this.coordinates),this.planningTrajectory.update(t,this.coordinates,this.scene),this.perceptionObstacles.update(t,this.coordinates,this.scene),this.decision.update(t,this.coordinates,this.scene),this.prediction.update(t,this.coordinates,this.scene),this.routing.update(t,this.coordinates,this.scene)}},{key:"updateMap",value:function(t){this.map.appendMapData(t,this.coordinates,this.scene)}},{key:"updateMapIndex",value:function(t,e,n){this.routingEditor.isInEditingMode()&&this.routingEditor.EDITING_MAP_RADIUS!==n||this.map.updateIndex(t,e,this.scene)}},{key:"isMobileDevice",value:function(){return navigator.userAgent.match(/Android/i)||navigator.userAgent.match(/webOS/i)||navigator.userAgent.match(/iPhone/i)||navigator.userAgent.match(/iPad/i)||navigator.userAgent.match(/iPod/i)}}]),t}(),D=new N;e.default=D},function(t,e){e.f={}.propertyIsEnumerable},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var r=n(66);t.exports=function(t){return Object(r(t))}},function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},function(t,e,n){"use strict";var r={};t.exports=r},function(t,e,n){"use strict";function r(t){return Object.prototype.hasOwnProperty.call(t,m)||(t[m]=f++,h[t[m]]={}),h[t[m]]}var i,o=n(5),a=n(84),s=n(288),u=n(129),c=n(320),l=n(95),h={},p=!1,f=0,d={topAbort:"abort",topAnimationEnd:c("animationend")||"animationend",topAnimationIteration:c("animationiteration")||"animationiteration",topAnimationStart:c("animationstart")||"animationstart",topBlur:"blur",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topChange:"change",topClick:"click",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy",topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragenter",topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topScroll:"scroll",topSeeked:"seeked",topSeeking:"seeking",topSelectionChange:"selectionchange",topStalled:"stalled",topSuspend:"suspend",topTextInput:"textInput",topTimeUpdate:"timeupdate",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove",topTouchStart:"touchstart",topTransitionEnd:c("transitionend")||"transitionend",topVolumeChange:"volumechange",topWaiting:"waiting",topWheel:"wheel"},m="_reactListenersID"+String(Math.random()).slice(2),v=o({},s,{ReactEventListener:null,injection:{injectReactEventListener:function(t){t.setHandleTopLevel(v.handleTopLevel),v.ReactEventListener=t}},setEnabled:function(t){v.ReactEventListener&&v.ReactEventListener.setEnabled(t)},isEnabled:function(){return!(!v.ReactEventListener||!v.ReactEventListener.isEnabled())},listenTo:function(t,e){for(var n=e,i=r(n),o=a.registrationNameDependencies[t],s=0;s]/;t.exports=i},function(t,e,n){"use strict";var r,i=n(13),o=n(83),a=/^[ \r\n\t\f]/,s=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,u=n(91),c=u(function(t,e){if(t.namespaceURI!==o.svg||"innerHTML"in t)t.innerHTML=e;else{r=r||document.createElement("div"),r.innerHTML=""+e+"";for(var n=r.firstChild;n.firstChild;)t.appendChild(n.firstChild)}});if(i.canUseDOM){var l=document.createElement("div");l.innerHTML=" ",""===l.innerHTML&&(c=function(t,e){if(t.parentNode&&t.parentNode.replaceChild(t,t),a.test(e)||"<"===e[0]&&s.test(e)){t.innerHTML=String.fromCharCode(65279)+e;var n=t.firstChild;1===n.data.length?t.removeChild(n):n.deleteData(0,1)}else t.innerHTML=e}),l=null}t.exports=c},function(t,e,n){"use strict";t.exports=n(273)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e,n,r){function i(t){if(r){var e=t.clone();r(e)}}p[e]?i(p[e]):l.load(t,function(t){var r=new s.OBJLoader;t.preload(),r.setMaterials(t),r.load(e,function(t){t.name=e,t.scale.set(n.x,n.y,n.z),p[e]=t,i(t)})})}function o(t,e){h.load(t,e)}Object.defineProperty(e,"__esModule",{value:!0}),e.loadObject=i,e.loadTexture=o;var a=n(8),s=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(a),u=n(410),c=(r(u),n(409)),l=(r(c),new s.MTLLoader),h=new s.TextureLoader,p={}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e){t.exports={}},function(t,e){t.exports=!0},function(t,e,n){var r=n(44),i=n(213),o=n(67),a=n(75)("IE_PROTO"),s=function(){},u=function(){var t,e=n(105)("iframe"),r=o.length;for(e.style.display="none",n(206).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(" + +$$ MSE = \frac1{n}\sum_{i=1}^n{(truth- predict )^2} $$ diff --git a/modules/e2e/model/data_overview_cn.md b/modules/e2e/model/data_overview_cn.md new file mode 100644 index 00000000000..f43ac88703e --- /dev/null +++ b/modules/e2e/model/data_overview_cn.md @@ -0,0 +1,75 @@ +本文档描述了百度阿波罗计划中端到端驾驶平台的数据格式及相关评测标准。 + +# 数据集简介 + +数据是通过百度自己的地图采集车采集而来。 目前,该数据覆盖了中国整个公路网,总长达百万公里。本数据集提供车前图像和车辆运动状态两种类型数据。地图采集车辆捕获360度视图图像,但是由于文件大小限制,我们只提供320 * 320分辨率的车前图像jpg格式数据。 车辆运动状态数据包括当前速度和轨迹曲率。 +# 采集情况 +数据采集设备如图所示,CCD 相机的光圈应为 2.8,焦距应为∞。摄像头位于车上方顶盖中。通过调整行李架卡扣前后位置,保证行李架本身与车辆中心线垂直,且两条行李架在同一水平面上。将设备支架移动至行李支架中间,保证 CCD 拍摄图像的中间与车辆中心线重合。 + + +# 数据用途 +数据主要来源于传感器的原始数据,包括图像、激光雷达、雷达等。end-to-end输入以图像为主。 输出是车辆的控制决策指令,如方向盘角度、加速、刹车。 连接输入输出的是深度神经网络,即通过神经网络直接生成车辆控制指令对车辆进行横向控制和纵向控制,中间没有人工参与的逻辑程序。横向控制,主要是指通过方向盘控制车身横向移动,即方向盘角度。纵向控制,是指通过油门和刹车控制车身纵向的移动,即加速、刹车等。横向模型的输出没有采用方向盘角度,而是使用要行驶的曲率(即拐弯半径的倒数)。原因如下: +(1)曲率更普适,不受车辆自身参数如steering ratio、wheel base等影响。 +(2)曲率与方向盘角度之间的函数关系简单,低速时通过Ackermann模型就可以反演,高速时通过一个简单的网络也可以拟合。故得到的横向控制模型就是:通过前向的影像,给出车辆要行驶的曲率。纵向模型的输出是加速度。 + + + + +# 数据分类 +数据分为两部分,训练集和测试集。使用训练集调试算法,使用测试集检验模型。 +## 训练集 +训练集包含图像image和姿态attr两部分数据。image为输入数据,attr为输出数据。其中image文件和attr文件通过文件名一一对应,读取image和attr需要hdf5库支持。 +### 训练集格式 +* 训练数据按照如下目录结构组织: + ``` +trainsets/ // 训练数据的顶层文件夹 +├── image // 包含了训练数据中的图像文件 +│   ├── 119.h5 +│   ├── .. +│   └── 123.h5 +└── attr // 包含了与图像文件对应的姿态文件 + ├── 119.h5 + ├── .. + └── 123.h5 + ``` + + +* 图像文件:h5文件。key-value格式,以时间戳UTC time为索引检索一幅图像,key:UTC time, value:320 * 320 * 3的图像编码后jpg格式数据。解码示例: + + ``` + with h5py.File(img_file, 'r') as f: + for t in f: + img = cv2.imdecode(f[t][:], 1) + + ``` + +* 姿态文件:h5文件。一个时刻的姿态数据以二维数组整体存在hdf5中,第一维为’attrs’,第二维为姿态数据:[t, VEast, VNorth, curv1, curv2, curv3, curv4, curv5, curv6, x, y, heading, tag]。对于图像文件中的一个UTC time的图像,一定存在一行与之对应的姿态数据,每一行有13个数据,类型为64位浮点数。字段说明如下: + + 列:变量 | 单位 | 说明 + ------------ | ------------- | ------------ + 01 : t | 十进制(无符号) | 当前UTC time 时间戳 + 02 : VEast| 米/秒 | 当前车辆朝东的速度 + 03 : VNorth| 米/秒 | 当前车辆朝北的速度 04 : curv1 | 十进制(有符号) | [t,t+0.125)间曲率1,左拐为正 05 : curv2 | 十进制(有符号) | [t,t+0.125)间曲率2,左拐为正 06 : curv3 | 十进制(有符号) | [t,t+0.125)间曲率3,左拐为正 07 : curv4 | 十进制(有符号) | [t,t+0.125)间曲率4,左拐为正 08 : curv5 | 十进制(有符号) | [t,t+0.125)间曲率5,左拐为正 09 : curv6 | 十进制(有符号) | [t,t+0.125)间曲率6,左拐为正 10 : x | 十进制(无符号) | 与正东向x轴的相对位移 11 : y | 十进制(无符号) | 与正北向y轴的相对位移 12 : heading | 度,十进制浮点数(有符号) | 与北向的顺时针夹角 13 : tag | 十进制(无符号) | 保留的标记位,暂未使用 + +# 评测数据格式 +* 测试集只包含图像数据,格式同训练集。测试数据按照如下目录结构组织: ``` testsets/ // 测试数据的顶层文件夹 +├── image // 包含了测试数据中的图像文件 +│   ├── testfile_part01.h5 +│   ├── .. +│   └── testfile_part04.h5 +└── attr // 包含了与图像文件对应的姿态文件 + ├── testfile_part01.h5 + ├── .. + └── testfile_part04.h5 ``` +* 使用测试集预测曲率和加速度。预测结果写入.h5文件,二维数组整体存在hdf5中,浮点数存储。 + 列:变量 | 单位 | 说明 + ------------ | ------------- | ------------ + 01 : t | 十进制(无符号) | 当前UTC time 时间戳 + 02 : curv| 十进制(有符号)| [t,t+0.125)间曲率,左拐为正 + 03: acc |十进制(有符号)|[t,t+0.125)间加速度,加速为正 + +# 评测指标说明 +横纵向模型预测效果使用均方差(MSE)指标来衡量。均方差是指预测值与真实值差值的平方的均值,均方差值越小,效果越好。该指标用来衡量预测的精确性,定义公式如下: + + +$$ MSE = \frac1{n}\sum_{i=1}^n{(truth- predict )^2} $$ \ No newline at end of file diff --git a/modules/e2e/model/model_overview.md b/modules/e2e/model/model_overview.md new file mode 100644 index 00000000000..983ed50b8c8 --- /dev/null +++ b/modules/e2e/model/model_overview.md @@ -0,0 +1,74 @@ +# Steering Model + +The steering wheel control model is computing curvature. + +`code file:run_model.py` +## Generator Data + +``` +def generator_data_steering(): +``` + +Filter the abnormal values: + +``` +def filter(c,v): + return v > 1 and c < 0.5 + +``` +Sequentially generator the data, due to the collected data contains a large number of straight lines data(curvature less than or equal to 0.0001). After filtering the abnormal values, select the straight line data by probability of 10%. + +``` +if filter(curv, speed) and (curv > 0.0001 or random.randint(1, 10) == 1) +``` +## CNN Model +`model file:src\steering_model.py` + + + + + + + +# Longitudinal Model +The longitudinal model is computing the acceleration. + +`code file:run_model.py` +## Generator Data + +``` +def generator_data_acc(): +``` + +Filter the abnormal values: + +``` +def filter(c,v): + return v > 1 and c < 0.5 + +``` +Sequentially read the data, defines time_step = 5, filters the abnormal datas, selects the five-frame image of the order, and compute the acceleration value at the time of the fifth frame as the input.Each frame interval of 0.125s, the fifth frame of the acceleration: + + + +$$ ACC_5 = \frac{(V_6-V_4)}\{0.25} $$ + + +If the sixth frame velocity value is filtered out by the filter, then discard the sample of the five frames. + +``` +next_curv = attrs[i+1][4] +next_speed = math.sqrt(attrs[i+1][1] ** 2 + attrs[i+1][2] ** 2) +if not filter(next_curv, next_speed): + step_cnt = 0 + continue +else: + acc = (next_speed - step_v[3]) / t_sep + +``` + +## Conv_LSTM模型 +`model file:src\acc_model.py` + + + diff --git a/modules/e2e/model/model_overview_cn.md b/modules/e2e/model/model_overview_cn.md new file mode 100644 index 00000000000..cc57d140d9c --- /dev/null +++ b/modules/e2e/model/model_overview_cn.md @@ -0,0 +1,75 @@ +#模型说明文档 +## 横向模型 + +横向模型即计算曲率模型。 + +`代码文件:run_model.py` +### 生成数据 + +``` +def generator_data_steering(): +``` + +异常值过滤: + +``` +def filter(c,v): + return v > 1 and c < 0.5 + +``` +顺序生成数据,因采集的数据含有大量直行(曲率小于等于0.0001)的数据。过滤异常值后,选取10%的直行数据。 + +``` +if filter(curv, speed) and (curv > 0.0001 or random.randint(1, 10) == 1) +``` +### CNN模型 +`模型文件:src\steering_model.py` + + + + + + + +## 纵向模型 +纵向模型即计算加速度。 + +`代码文件:run_model.py` +### 生成数据 + +``` +def generator_data_acc(): +``` + +异常值过滤: + +``` +def filter(c,v): + return v > 1 and c < 0.5 + +``` +顺序读取数据,定义time_step=5,过滤异常数据,选取顺序的五帧图,求得的第五帧图时刻的加速度值作为输入。 +每帧图间隔0.125s,第五帧的加速度 + + + +$$ ACC_5 = \frac{(V_6-V_4)}\{0.25} $$ + +如果第六帧速度值经filter被过滤掉,则丢弃该样本,即这五帧图。 + +``` +next_curv = attrs[i+1][4] +next_speed = math.sqrt(attrs[i+1][1] ** 2 + attrs[i+1][2] ** 2) +if not filter(next_curv, next_speed): + step_cnt = 0 + continue +else: + acc = (next_speed - step_v[3]) / t_sep + +``` + +### Conv_LSTM模型 +`模型文件:src\acc_model.py` + + + diff --git a/modules/e2e/model/png_resource/1.png b/modules/e2e/model/png_resource/1.png new file mode 100644 index 00000000000..f0501bf220b Binary files /dev/null and b/modules/e2e/model/png_resource/1.png differ diff --git a/modules/e2e/model/png_resource/2.png b/modules/e2e/model/png_resource/2.png new file mode 100644 index 00000000000..c35ce9dd508 Binary files /dev/null and b/modules/e2e/model/png_resource/2.png differ diff --git a/modules/e2e/model/png_resource/acc_model.png b/modules/e2e/model/png_resource/acc_model.png new file mode 100644 index 00000000000..0f16d0d57a4 Binary files /dev/null and b/modules/e2e/model/png_resource/acc_model.png differ diff --git a/modules/e2e/model/png_resource/steering_model1.png b/modules/e2e/model/png_resource/steering_model1.png new file mode 100644 index 00000000000..42e8afb45c4 Binary files /dev/null and b/modules/e2e/model/png_resource/steering_model1.png differ diff --git a/modules/e2e/model/png_resource/steering_model2.png b/modules/e2e/model/png_resource/steering_model2.png new file mode 100644 index 00000000000..76a83c29847 Binary files /dev/null and b/modules/e2e/model/png_resource/steering_model2.png differ diff --git a/modules/e2e/model/png_resource/steering_model3.png b/modules/e2e/model/png_resource/steering_model3.png new file mode 100644 index 00000000000..84ef9833852 Binary files /dev/null and b/modules/e2e/model/png_resource/steering_model3.png differ diff --git a/modules/e2e/model/run_predict.sh b/modules/e2e/model/run_predict.sh new file mode 100644 index 00000000000..0f3940f4629 --- /dev/null +++ b/modules/e2e/model/run_predict.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +CUDA_VISIBLE_DEVICES=0 python src/run_model.py \ + --type=predict \ + --steering_model_path=$1 \ + --acc_model_path=$2 \ + --input_dir=$3 \ + --output_path=$4 \ + --logtype="predict" diff --git a/modules/e2e/model/run_train.sh b/modules/e2e/model/run_train.sh new file mode 100644 index 00000000000..afa9c96ed04 --- /dev/null +++ b/modules/e2e/model/run_train.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +CUDA_VISIBLE_DEVICES=0 python src/run_model.py \ + --type=train \ + --input_dir=./trainsets \ + --logtype=train diff --git a/modules/e2e/model/src/acc_model.py b/modules/e2e/model/src/acc_model.py new file mode 100644 index 00000000000..f6386866e0d --- /dev/null +++ b/modules/e2e/model/src/acc_model.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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 module creates acceleration model . +""" +from keras.models import Sequential +from keras.layers.core import Dense +from keras.layers.core import Flatten +from keras.layers.convolutional_recurrent import ConvLSTM2D +from keras.layers.normalization import BatchNormalization +from keras.optimizers import RMSprop + + +def get_model(shape=None): + """ + :param shape: the input shape + :return: model sequential + """ + seq = Sequential() + seq.add(ConvLSTM2D(nb_filter=24, nb_row=5, nb_col=5, + input_shape=shape, + subsample=(4, 4), + border_mode='same', return_sequences=True)) + seq.add(BatchNormalization()) + + seq.add(ConvLSTM2D(nb_filter=48, nb_row=3, nb_col=3, + subsample=(2, 2), + border_mode='same', return_sequences=True)) + seq.add(BatchNormalization()) + + seq.add(ConvLSTM2D(nb_filter=64, nb_row=3, nb_col=3, + subsample=(2, 2), + border_mode='same', return_sequences=False)) + + seq.add(Flatten()) + seq.add(Dense(512, activation='relu')) + seq.add(Dense(1)) + + seq.compile(loss='mse', optimizer=RMSprop(lr=0.00001)) + + return seq \ No newline at end of file diff --git a/modules/e2e/model/src/run_model.py b/modules/e2e/model/src/run_model.py new file mode 100644 index 00000000000..833e26c2136 --- /dev/null +++ b/modules/e2e/model/src/run_model.py @@ -0,0 +1,270 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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 module trains end to end model and predict . +""" +import os +import argparse +import glob +import numpy as np +import h5py +import tensorflow as tf +import cv2 +import math +import random +from keras.optimizers import Adam +import steering_model +import acc_model + + +def filter(c, v): + """ + :param c: curvature + :param v: speed + :return: Ture or False + """ + return v > 1 and c < 0.5 + + +def run_train_steering(image_paths, attr_paths, nb_epoch, batch_size, log_type): + """ + :param image_paths: input image path + :param attr_paths: input attr path + :param nb_epoch: epochs size + :param batch_size: batch size + :param log_type: log type + """ + + def generate_data_steering(): + """ + :return: (img,curv) + """ + buffer_i = [] + buffer_c = [] + for _ in range(nb_epoch): + for path0, path1 in zip(image_paths, attr_paths): + with h5py.File(path1, 'r') as f: + attrs = f['attrs'][:] + with h5py.File(path0, 'r') as f: + for i, t in enumerate(f): + img = cv2.imdecode(f[t][:], 1) + curv = attrs[i][4] + speed = math.sqrt(math.pow(attrs[i][1], 2) + math.pow(attrs[i][2], 2)) + if filter(curv, speed) and (curv > 0.0001 or random.randint(1, 10) == 1): + buffer_i.append(img) + buffer_c.append(curv) + if len(buffer_i) >= batch_size: + yield np.asarray(buffer_i), np.asarray(buffer_c) + buffer_i = [] + buffer_c = [] + + if len(buffer_i) > 0: + yield np.asarray(buffer_i), np.asarray(buffer_c) + raise StopIteration + + with tf.device("/gpu:0"): + model = steering_model.get_model((320, 320, 3)) + model.compile(loss='mse', optimizer=Adam(lr=0.00001)) + + train_log = open('logs/{}_steering.log'.format(log_type), 'w') + step = 0 + for i, c in generate_data_steering(): + step += 1 + history = model.fit(i, c, epochs=1) + train_log.write('steering Iteration {}, loss = {} \n' \ + .format(step, history.history['loss'][0])) + if step % 5000 == 0: + model.save_weights('models/steering_model.{}'.format(step)) + # save last step + if step % 5000 != 0: + model.save_weights('models/steering_model.{}'.format(step)) + + train_log.write('steering train end') + train_log.close() + + +def run_train_acc(image_paths, attr_paths, nb_epoch, batch_size, log_type): + """ + :param image_paths: input image path + :param attr_paths: input attr path + :param nb_epoch: epochs size + :param batch_size: batch size + :param log_type: log type + """ + + def generate_data_acc(): + """ + :return: (img,acc) + """ + time_step = 5 + t_sep = 0.25 + + batch_img = np.zeros((batch_size, time_step, 320, 320, 3), dtype='uint8') + batch_acc = np.zeros((batch_size, 1), dtype='float32') + step_img = np.zeros((time_step, 320, 320, 3), dtype='uint8') + step_v = [0] * time_step + step_t = [0] * time_step + for _ in range(nb_epoch): + for path0, path1 in zip(image_paths, attr_paths): + batch_cnt = 0 + step_cnt = 0 + with h5py.File(path1, 'r') as f: + attrs = f['attrs'][:] + with h5py.File(path0, 'r') as f: + for i, t in enumerate(f): + img = cv2.imdecode(f[t][:], 1) / 127.5 - 1.0 + curv = attrs[i][4] + v = math.sqrt(attrs[i][1] ** 2 + attrs[i][2] ** 2) + + if filter(curv, v) and (step_cnt != time_step - 1): + step_img[step_cnt] = img + step_v[step_cnt] = v + step_t[step_cnt] = t + step_cnt = (step_cnt + 1) % time_step + + else: + if i != len(attrs) - 1: + next_curv = attrs[i + 1][4] + next_speed = math.sqrt(attrs[i + 1][1] ** 2 + attrs[i + 1][2] ** 2) + + if not filter(next_curv, next_speed): + step_cnt = 0 + continue + else: + acc = (next_speed - step_v[3]) / t_sep + step_img[step_cnt] = img + batch_img[batch_cnt] = step_img + batch_acc[batch_cnt] = acc + step_cnt = (step_cnt + 1) % time_step + batch_cnt = (batch_cnt + 1) % batch_size + if batch_cnt == 0: + yield batch_img, batch_acc + batch_cnt = 0 + step_cnt = 0 + else: + break + + raise StopIteration + + with tf.device("/gpu:0"): + + model = acc_model.get_model((5, 320, 320, 3)) + train_log = open('logs/{}_acc.log'.format(log_type), 'w') + + step = 0 + for i, a in generate_data_acc(): + step += 1 + history = model.fit(i, a, epochs=1) + train_log.write('acc Iteration {}, loss = {} \n' \ + .format(step, history.history['loss'][0])) + if step % 5000 == 0: + model.save_weights('models/acc_model.{}'.format(step)) + + # save last step + if step % 5000 != 0: + model.save_weights('models/acc_model.{}'.format(step)) + + train_log.write('acc train end') + train_log.close() + + +def run_predict(steering_model_path, acc_model_path, image_paths, output_path, log_type): + + """ + :param steering_model_path: steering model + :param acc_model_path: acc model + :param image_paths: test image path + :param output_path: predict output path + :param log_type: log type + """ + pred_log = open('logs/{}.log'.format(log_type), 'w') + with tf.device("/gpu:0"): + model = steering_model.get_model((320, 320, 3)) + model.load_weights(steering_model_path) + + time_list = [] + pred_c_list = [] + for path in image_paths: + pred_log.write('run steering predict: {}...\n'.format(path)) + with h5py.File(path, 'r') as f: + for t in f: + img = cv2.imdecode(f[t][:], 1) + img = img.reshape((1,) + img.shape) + pred_c = model.predict(img) + time_list.append(float(t)) + pred_c_list.append(pred_c[0][0]) + + #predict acc + steps_size = 5 + model = acc_model.get_model((steps_size, 320, 320, 3)) + model.load_weights(acc_model_path) + + pred_a_list = [] + buffer_i = [] + for path in image_paths: + pred_log.write('run acc predict: {}...\n'.format(path)) + with h5py.File(path, 'r') as f: + for t in f: + img = cv2.imdecode(f[t][:], 1) + buffer_i.append(img) + if len(buffer_i) < steps_size: pred_a_list.append(0) + if len(buffer_i) >= steps_size: + pred_a = model.predict( + np.asarray(buffer_i).reshape((1,)+np.asarray(buffer_i).shape) + ) + pred_a_list.append(pred_a[0][0]) + buffer_i.pop(0) + + pred_log.write('write predictions...\n') + with h5py.File(output_path, 'w') as f: + data = f.create_dataset('attrs', shape=(len(time_list), 3), dtype=np.float64) + data[:, 0] = np.asarray(time_list) + data[:, 1] = np.asarray(pred_c_list) + data[:, 2] = np.asarray(pred_a_list) + pred_log.close() + + +if __name__ == '__main__': + + parser = argparse.ArgumentParser(description='run_model') + parser.add_argument('--type', choices=['train', 'predict'], required=True) + parser.add_argument('--logtype', required=True) + parser.add_argument('--input_dir', required=True) + parser.add_argument('--nb_epoch', type=int, default=1) + parser.add_argument('--batch_size', type=int, default=100) + parser.add_argument('--steering_model_path') + parser.add_argument('--acc_model_path') + parser.add_argument('--output_path') + args = parser.parse_args() + + config = tf.ConfigProto() + config.gpu_options.allow_growth=True + + if args.type == 'train': + image_paths = sorted(glob.glob(os.path.join(args.input_dir, 'image', '*.h5'))) + attr_paths = sorted(glob.glob(os.path.join(args.input_dir, 'attr', '*.h5'))) + with tf.Session(config=config): + run_train_steering(image_paths, attr_paths, + args.nb_epoch, args.batch_size, args.logtype) + with tf.Session(config=config): + run_train_acc(image_paths, attr_paths, args.nb_epoch, args.batch_size, args.logtype) + else: + image_paths = sorted(glob.glob(os.path.join(args.input_dir, 'image', '*.h5'))) + with tf.Session(config=config): + run_predict(args.steering_model_path, args.acc_model_path, + image_paths, args.output_path, args.logtype) diff --git a/modules/e2e/model/src/steering_model.py b/modules/e2e/model/src/steering_model.py new file mode 100644 index 00000000000..98f7b4295c9 --- /dev/null +++ b/modules/e2e/model/src/steering_model.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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 module creates steering model . +""" +import tensorflow as tf +from keras.models import Model +from keras.layers import Dense +from keras.layers import Input +from keras.layers import Dropout +from keras.layers import Flatten +from keras.layers import Lambda +from keras.layers import ELU +from keras.layers import GaussianNoise +from keras.layers.convolutional import Conv2D +from keras.optimizers import Nadam + + +def get_model(input_shape): + """ + + :param input_shape: the input shape + :return: model + """ + + std = 1.0 / 255 * 0.1 + output_shape = (320, 320, 3) + inputs = Input(shape=input_shape, name='input') + x = Lambda(tf.image.rgb_to_hsv, input_shape=input_shape, output_shape=output_shape)(inputs) + x = GaussianNoise(std, input_shape=input_shape)(x) + + x = Conv2D(24, (5, 5), strides=(2, 2), activation='elu', padding='valid')(x) + x = Conv2D(24, (5, 5), strides=(2, 2), activation='elu', padding='valid')(x) + x = Dropout(0.2)(x) + x = Conv2D(48, (3, 3), strides=(1, 1), activation='elu', padding='valid')(x) + x = Conv2D(48, (3, 3), strides=(2, 2), activation='elu', padding='valid')(x) + x = Dropout(0.2)(x) + x = Conv2D(64, (3, 3), strides=(1, 1), activation='elu', padding='valid')(x) + x = Conv2D(64, (3, 3), strides=(2, 2), activation='elu', padding='valid')(x) + x = Dropout(0.2)(x) + x = Conv2D(96, (3, 3), strides=(1, 1), activation='elu', padding='valid')(x) + x = Conv2D(96, (3, 3), strides=(1, 1), activation='elu', padding='valid')(x) + x = Dropout(0.2)(x) + x = Flatten()(x) + + x = Dense(1024)(x) + x = ELU()(x) + x = Dropout(.2)(x) + x = Dense(256)(x) + + x = ELU()(x) + x = Dropout(.2)(x) + x = Dense(32)(x) + x = ELU()(x) + x = Dense(1)(x) + + model = Model(inputs=[inputs], outputs=[x]) + nadam = Nadam(lr=0.0001, schedule_decay=0.02) + model.compile(optimizer=nadam, loss="mse") + + return model \ No newline at end of file diff --git a/modules/e2e/online_system/README.md b/modules/e2e/online_system/README.md new file mode 100644 index 00000000000..2457745d0b3 --- /dev/null +++ b/modules/e2e/online_system/README.md @@ -0,0 +1,9 @@ +#Module introduction This module is to collect the sensor data and vehicle parameter in the environment of ROS of PX2. #Prerequisites 1. Ubuntu 16.04 LTS 2. ROS Kinetic – recommend ros-kinetic-desktop-full. 3. Px2 driveworks0.1 version #Building and Installing the Module Building and installing this module is accomplished by utilizing the ROS catkin tool. + First, we should install ROS. It is assumed that ROS packages will be installed at ~/ros. For convenience, we add the following to the ~/.bash_profile to use the catkin tool in the new bash shell: + if [ -f /opt/ros/kinetic/setup.bash ]; then source /opt/ros/kinetic/setup.bash fi Next, a catkin workspace should be created to build and install that code . For example , we could create ~/catkin_ws , and then:: + $ cd ~/catkin_ws $ mkdir src $ cd src Then , the source code could be gitcloned to the ~/catkin_ws/src. + Finally , the source code could be complied in the ~/catkin_ws with the catkin_make. All the exe and lib file will be generated in the ~/catkin_ws/devel For convenince, we add the following to our ~/.bash_profile to enter the module environment in the bash shell. + source ~/catkin_ws/devel/setup.bash + Attention: + sometimes erros will appear saying that “msg not found”. In this case , the msg module could be complied first, and then other modules could be complied afterwards. #Module usage: To test , a fresh bash shell could be opened to start up a ROS core: $ roscore And open another bash shell and initialize the camera node: + $ rosrun px2_camera_image px2_camera_node Finally open another bash shell and open the rviz to visualize the data coming from the camera. #LICENSE Please see the license file. \ No newline at end of file diff --git a/modules/e2e/online_system/README_cn.md b/modules/e2e/online_system/README_cn.md new file mode 100644 index 00000000000..7328ad03ec2 --- /dev/null +++ b/modules/e2e/online_system/README_cn.md @@ -0,0 +1,10 @@ +#模块简介 此模块主要是在PX2 的硬件环境下,在ROS环境中给end to end 系统收集传感器数据以及汽车相关状态参数。 #安装环境 1. Ubuntu 16.04 LTS 2. ROS Kinetic – 建议 ros-kinetic-desktop-full. 3. Px2 driveworks 的0.1 版本 #编译以及安装此模块 编译和安装此模块都是通过ROS catkin的工具来完成的。 + 首先应该安装ROS环境,例如安装到~/ros目录下面,为了方便起见,可以将下面的代码加入到~/.bash_profile,以便每次打开一个新的bash shell都能进入到ROS环境当中去以便使用catkin的编译工具: + if [ -f /opt/ros/kinetic/setup.bash ]; then source /opt/ros/kinetic/setup.bash fi 然后应该建立catkin的工作空间来编译以及安装源代码。例如可以建立~/catkin_ws.然后: + $ cd ~/catkin_ws $ mkdir src $ cd src 这样可以将源代码gitclone 到~/catkin_ws/src目录下面。 最后进行源代码的编译。编译的路径是在~/catkin_ws 下面,用catkin_make指令进行编译安装。 + +生成的可执行文件以及库文件都会生成到~/catkin_ws/devel目录下面。为了方便调用模块,可以在~/.bash_profile加入下面的指令,以便每次打开一个新的bash shell都能进入到模块环境当中去: + source ~/catkin_ws/devel/setup.bash + 注意: + 编译的时候有些模块会报错找不到msg,可以先将msg那个子模块编译出来,然后再将其他的子模块加入到src中进行编译。 #使用模块 为了进行测试,首先打开一个bash shell,然后开启一个ROS core: $ roscore 然后打开另外一个bash shell,启动camera的node: + $ rosrun px2_camera_image px2_camera_node 最后打开另外一个bash shell,打开可视化工具rviz观察是否有image消息发布出来。 #LICENSE 请看相应的license 文件。 \ No newline at end of file diff --git a/modules/e2e/online_system/car_act/CMakeLists.txt b/modules/e2e/online_system/car_act/CMakeLists.txt new file mode 100644 index 00000000000..b586a7e3066 --- /dev/null +++ b/modules/e2e/online_system/car_act/CMakeLists.txt @@ -0,0 +1,201 @@ +cmake_minimum_required(VERSION 2.8.3) +project(car_act) + +## Add support for C++11, supported in ROS Kinetic and newer +# add_definitions(-std=c++11) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + car_msgs + rc_msgs + novatel_msgs + roscpp + rospy +) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a run_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +# add_message_files( +# FILES +# Message1.msg +# Message2.msg +# ) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here +# generate_messages( +# DEPENDENCIES +# car_msgs# novatel_msgs +# ) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a run_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if you package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES car_act +# CATKIN_DEPENDS car_msgs novatel_msgs roscpp rospy +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +# include_directories(include) +include_directories( + ${catkin_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(${PROJECT_NAME} +# src/${PROJECT_NAME}/car_act.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +## With catkin_make all packages are built within a single CMake context +## The recommended prefix ensures that target names across packages don't collide +# add_executable(${PROJECT_NAME}_node src/car_act_node.cpp) + +## Rename C++ executable without prefix +## The above recommended prefix causes long target names, the following renames the +## target back to the shorter version for ease of user use +## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" +# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +# target_link_libraries(${PROJECT_NAME}_node +# ${catkin_LIBRARIES} +# ) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination + install(PROGRAMS + scripts/main.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) + +## Mark executables and/or libraries for installation +# install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_car_act.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/modules/e2e/online_system/car_act/package.xml b/modules/e2e/online_system/car_act/package.xml new file mode 100644 index 00000000000..cf0a8557426 --- /dev/null +++ b/modules/e2e/online_system/car_act/package.xml @@ -0,0 +1,76 @@ + + + + + car_act + 0.0.0 + The car_act package + + + + + zhengchao04 + + + + + + BSD + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + car_msgs + rc_msgs + novatel_msgs + roscpp + rospy + car_msgs + rc_msgs + novatel_msgs + roscpp + rospy + + + + + + + + diff --git a/modules/e2e/online_system/car_act/scripts/main.py b/modules/e2e/online_system/car_act/scripts/main.py new file mode 100644 index 00000000000..cc7c14a496e --- /dev/null +++ b/modules/e2e/online_system/car_act/scripts/main.py @@ -0,0 +1,239 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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 module publishes the car control message. + +""" + +import rospy +import time +import threading +from car_msgs.msg import ABS +from car_msgs.msg import ABM +from car_msgs.msg import BCM +from car_msgs.msg import ECM +from car_msgs.msg import SAS +from car_msgs.msg import PX2 +from rc_msgs.msg import RCCommand +from novatel_msgs.msg import INSPVA +from std_msgs.msg import Bool +import sys +import signal +import numpy as np + + +class CarAct(object): + """Summary of class here. + + Subscribe the CAN message and generate the car control message. + + Attributes: + current_mode: current car control mode. + abs_lock: threading lock for the abs CAN message. + abm_lock: threading lock for the abm CAN message. + ecm_lock: threading lock for the ecm CAN message. + bcm_lock: threading lock for the bcm CAN message. + sas_lock: threading lock for the sas CAN message. + px2_lock: threading lock for the px2 CAN message. + rc_lock: threading lock for the rc CAN message. + inspva_lock: threading lock for the inspva message. + abs_message: abs CAN message. + abm_message: abm CAN message. + bcm_message: bcm CAN message. + ecm_message: ecm CAN message. + sas_message: sas CAN message. + rc_message: rc message. + px2_message: the computed speed and steering_angle from the PX2. + inspva_message: inspva message from the novatel. + mode: car control mode. + mode_sub: subscriber for the mode message. + abs_sub: subscriber for the abs CAN message. + abm_sub: subscriber for the abm CAN message. + ecm_sub: subscriber for the ecm CAN message. + sas_sub: subscriber for the sas CAN message. + bcm_sub: subscriber for the bcm CAN message. + px2_sub: subscriber for the computed speed and steering_angle from the PX2. + rc_sub: subscriber for the rc message. + inspva_sub: subscriber for the novatel inspva message. + px2_pub: publisher for the car control message. + """ + def __init__(self): + """ Inits the CarAct .""" + self.current_mode = 0 + self.abs_lock = threading.Lock() + self.abm_lock = threading.Lock() + self.ecm_lock = threading.Lock() + self.bcm_lock = threading.Lock() + self.sas_lock = threading.Lock() + self.px2_lock = threading.Lock() + self.rc_lock = threading.Lock() + self.inspva_lock = threading.Lock() + self.abs_message = ABS() + self.abm_message = ABM() + self.bcm_message = BCM() + self.ecm_message = ECM() + self.sas_message = SAS() + self.rc_message = RCCommand() + self.px2_message = PX2() + self.inspva_message = INSPVA() + self.mode = Bool("True") + self.mode_sub = rospy.Subscriber( + '/temp/mode', Bool, self.mode_callback, queue_size=1) + self.abs_sub = rospy.Subscriber( + '/car_msgs/ABS', ABS, self.abs_callback, queue_size=1) + self.abm_sub = rospy.Subscriber( + '/car_msgs/ABM', ABM, self.abm_callback, queue_size=1) + self.ecm_sub = rospy.Subscriber( + '/car_msgs/ECM', ECM, self.ecm_callback, queue_size=1) + self.sas_sub = rospy.Subscriber( + '/car_msgs/SAS', SAS, self.sas_callback, queue_size=1) + self.bcm_sub = rospy.Subscriber( + '/car_msgs/BCM', BCM, self.bcm_callback, queue_size=1) + self.px2_sub = rospy.Subscriber( + '/car_msgs/estimate_px2', + PX2, + self.px2_callback, + queue_size=1) + self.rc_sub = rospy.Subscriber( + '/car_msgs/rc_command', + RCCommand, + self.rc_callback, + queue_size=10) + self.inspva_sub = rospy.Subscriber( + '/novatel_data/inspva', + INSPVA, + self.inspva_callback, + queue_size=1) + self.px2_pub = rospy.Publisher('/car_msgs/PX2', PX2, queue_size=1) + + def inspva_callback(self, data): + """inspva_callback function.""" + self.inspva_lock.acquire() + self.inspva_message = data + self.inspva_lock.release() + + def mode_callback(self, data): + """mode_callback function.""" + self.mode = data + + def abs_callback(self, data): + """abs_callback function.""" + self.abs_lock.acquire() + self.abs_message = data + self.abs_lock.release() + + def abm_callback(self, data): + """abm_callback function.""" + self.abm_lock.acquire() + self.abm_message = data + self.abm_lock.release() + + def ecm_callback(self, data): + """ecm_callback function.""" + self.ecm_lock.acquire() + self.ecm_message = data + self.ecm_lock.release() + + def sas_callback(self, data): + """sas_callback function.""" + self.sas_lock.acquire() + self.sas_message = data + self.sas_lock.release() + + def bcm_callback(self, data): + """bcm_callback function.""" + self.bcm_lock.acquire() + self.bcm_message = data + self.bcm_lock.release() + + def px2_callback(self, data): + """px2_callback function.""" + self.px2_lock.acquire() + self.px2_message = data + self.px2_lock.release() + + def rc_callback(self, data): + """rc_callback function.""" + self.rc_lock.acquire() + self.rc_message = data + self.rc_lock.release() + + def roll(self): + """ros roll main function.""" + rate = rospy.Rate(50) + while not rospy.is_shutdown(): + self.rc_lock.acquire() + rc = self.rc_message + self.rc_lock.release() + + px2_message = PX2() + px2_message.Mode = 2 + px2_message.header.stamp = rospy.Time.now() + + if rc.enable: + px2_message.TarSteeringAngle = rc.steering_angle + + # Mock rc angle + self.px2_lock.acquire() + px2_message = self.px2_message + self.px2_lock.release() + + px2_message.TarAcce = rc.acceleration + px2_message.Mode = 2 + if px2_message.TarAcce < 0: + px2_message.DecToStop = 0 + else: + px2_message.DecToStop = 1 + + else: + self.px2_lock.acquire() + target_angle = self.px2_message.TarSteeringAngle + target_speed = self.px2_message.TarAcce + self.px2_lock.release() + + self.ecm_lock.acquire() + current_speed = self.ecm_message.VehicleSpd + self.ecm_lock.release() + + self.sas_lock.acquire() + angle = self.sas_message.SteeringWheelAngle + angle_sign = self.sas_message.SteeringWheelAngleSign + if angle_sign == 1: + angle = -angle + self.sas_lock.release() + + self.inspva_lock.acquire() + longitude = self.inspva_message.longitude + latitude = self.inspva_message.latitude + heading = self.inspva_message.azimuth + self.inspva_lock.release() + + px2_message.TarAcce = target_acce + px2_message.TarSteeringAngle = target_angle + + self.px2_pub.publish(px2_message) + rate.sleep() + + +if __name__ == '__main__': + rospy.init_node('car_act', anonymous=True) + car_act = CarAct() + car_act.roll() + rospy.spin() diff --git a/modules/e2e/online_system/car_control_estimate/CMakeLists.txt b/modules/e2e/online_system/car_control_estimate/CMakeLists.txt new file mode 100644 index 00000000000..92db01bb0dd --- /dev/null +++ b/modules/e2e/online_system/car_control_estimate/CMakeLists.txt @@ -0,0 +1,200 @@ +cmake_minimum_required(VERSION 2.8.3) +project(car_control_estimate) + +## Add support for C++11, supported in ROS Kinetic and newer +# add_definitions(-std=c++11) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + car_msgs + roscpp + rospy + sensor_msgs +) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a run_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +# add_message_files( +# FILES +# Message1.msg +# Message2.msg +# ) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here +# generate_messages( +# DEPENDENCIES +# car_msgs# sensor_msgs +# ) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a run_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if you package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES car_control_estimate +# CATKIN_DEPENDS car_msgs roscpp rospy sensor_msgs +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +# include_directories(include) +include_directories( + ${catkin_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(${PROJECT_NAME} +# src/${PROJECT_NAME}/car_control_estimate.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +## With catkin_make all packages are built within a single CMake context +## The recommended prefix ensures that target names across packages don't collide +# add_executable(${PROJECT_NAME}_node src/car_control_estimate_node.cpp) + +## Rename C++ executable without prefix +## The above recommended prefix causes long target names, the following renames the +## target back to the shorter version for ease of user use +## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" +# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +# target_link_libraries(${PROJECT_NAME}_node +# ${catkin_LIBRARIES} +# ) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination + install(PROGRAMS + scripts/main.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) + +## Mark executables and/or libraries for installation +# install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_car_control_estimate.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/modules/e2e/online_system/car_control_estimate/package.xml b/modules/e2e/online_system/car_control_estimate/package.xml new file mode 100644 index 00000000000..3f6376e326d --- /dev/null +++ b/modules/e2e/online_system/car_control_estimate/package.xml @@ -0,0 +1,74 @@ + + + + + car_control_estimate + 0.0.0 + The car_control_estimate package + + + + + zhengchao04 + + + + + + BSD + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + car_msgs + roscpp + rospy + sensor_msgs + car_msgs + roscpp + rospy + sensor_msgs + + + + + + + + diff --git a/modules/e2e/online_system/car_control_estimate/scripts/main.py b/modules/e2e/online_system/car_control_estimate/scripts/main.py new file mode 100644 index 00000000000..0e750ef0932 --- /dev/null +++ b/modules/e2e/online_system/car_control_estimate/scripts/main.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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 module receives the image and output the car control message . + +""" +import rospy +import cv2 +import sys +from models.nv_cls import NvCls +from models.nv_reg import NvReg +from cv_bridge import CvBridge, CvBridgeError +from sensor_msgs.msg import Image +from car_msgs.msg import PX2 +import keras +from keras import backend as K +import tensorflow as tf +import time + + +class CarControllEstimate(object): + """Summary of class here. + + Subscribe the image message and generate the car control message. + + Attributes: + px2_pub: publish the car control message. + bridge: opencv bridge. + _loaded: weights load flag. + _M: prediction module.\ + image_sub: image message subscriber. + """ + + def __init__(self): + """ Inits the CarControllEstimate .""" + self.px2_pub = rospy.Publisher( + "/car_msgs/estimate_px2", PX2, queue_size=1) + self.bridge = CvBridge() + self._loaded = False + self._M = NvCls() + self._M.load_weights( + "/workspace/roadhacker/outputs/ces/h7_cls_chp.h5.0605b") + self._loaded = True + print "param loaded" + self.image_sub = rospy.Subscriber( + '/car_msgs/image', + Image, + self.callback, + queue_size=1, + buff_size=1024 * 1024 * 8) + + def callback(self, data): + """ Image callback . Get the image and output the car control_estimate .""" + try: + bridge = CvBridge() + cv_image = bridge.imgmsg_to_cv2(data, "rgb8") + rospy.loginfo("received image") + # call method + img = cv2.resize(cv_image, (320, 320)) + if self._loaded: + t = time.time() + angle_pred, speed_pred = self._M.predict(img) + angle_pred = angle_pred * -1. + speed_pred = speed_pred + else: + print "not loaded" + px2_msg = PX2() + px2_msg.header.stamp = rospy.Time.now() + px2_msg.TarAcce = speed_pred + px2_msg.TarSteeringAngle = angle_pred + px2_msg.Curvature = 0 + px2_msg.Mode = 2 + px2_msg.PX2_UID = 0 + + self.px2_pub.publish(px2_msg) + except CvBridgeError as e: + rospy.logerr(e) + + +if __name__ == '__main__': + rospy.init_node('control_estimate', anonymous=True) + ce = CarControllEstimate() + + rospy.spin() diff --git a/modules/e2e/online_system/car_msgs/CMakeLists.txt b/modules/e2e/online_system/car_msgs/CMakeLists.txt new file mode 100644 index 00000000000..306c99c844b --- /dev/null +++ b/modules/e2e/online_system/car_msgs/CMakeLists.txt @@ -0,0 +1,199 @@ +cmake_minimum_required(VERSION 2.8.3) +project(car_msgs) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + can_msgs + message_generation + roscpp + rospy + sensor_msgs +) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a run_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder + add_message_files( + FILES + ABM.msg + ABS.msg + BCM.msg + ECM.msg + PX2.msg + PX2_FB.msg + SAS.msg + WorkStatus.msg +# Message1.msg +# Message2.msg + ) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here + generate_messages( + DEPENDENCIES + can_msgs + sensor_msgs + ) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a run_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if you package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES car_msgs +# CATKIN_DEPENDS can_msgs message_generation roscpp rospy sensor_msgs +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +# include_directories(include) +include_directories( + ${catkin_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(car_msgs +# src/${PROJECT_NAME}/car_msgs.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(car_msgs ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +# add_executable(car_msgs_node src/car_msgs_node.cpp) + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(car_msgs_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +# target_link_libraries(car_msgs_node +# ${catkin_LIBRARIES} +# ) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# install(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables and/or libraries for installation +# install(TARGETS car_msgs car_msgs_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_car_msgs.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/modules/e2e/online_system/car_msgs/msg/ABM.msg b/modules/e2e/online_system/car_msgs/msg/ABM.msg new file mode 100644 index 00000000000..e35133515dd --- /dev/null +++ b/modules/e2e/online_system/car_msgs/msg/ABM.msg @@ -0,0 +1,5 @@ +Header header +int32 id=1 +float32 VehDynYawRate +float32 LateralAcce +float32 LongitudeAcc diff --git a/modules/e2e/online_system/car_msgs/msg/ABS.msg b/modules/e2e/online_system/car_msgs/msg/ABS.msg new file mode 100644 index 00000000000..de06fbcc90b --- /dev/null +++ b/modules/e2e/online_system/car_msgs/msg/ABS.msg @@ -0,0 +1,6 @@ +Header header +int32 id=2 +float32 RLWheelSpd +float32 RRWheelSpd +float32 FLWheelSpd +float32 FRWheelSpd diff --git a/modules/e2e/online_system/car_msgs/msg/BCM.msg b/modules/e2e/online_system/car_msgs/msg/BCM.msg new file mode 100644 index 00000000000..f402ef4cac6 --- /dev/null +++ b/modules/e2e/online_system/car_msgs/msg/BCM.msg @@ -0,0 +1,7 @@ +Header header +int32 id=3 +int8 WiperSwitchSts +int8 RightTurnSigLampSts +int8 LeftTurnSigLampSts +int8 BrakePedSts +int8 BrakeLmpFailSts diff --git a/modules/e2e/online_system/car_msgs/msg/ECM.msg b/modules/e2e/online_system/car_msgs/msg/ECM.msg new file mode 100644 index 00000000000..fd0d10e4709 --- /dev/null +++ b/modules/e2e/online_system/car_msgs/msg/ECM.msg @@ -0,0 +1,4 @@ +Header header +int32 id=4 +float32 AccPedalPos +float32 VehicleSpd diff --git a/modules/e2e/online_system/car_msgs/msg/PX2.msg b/modules/e2e/online_system/car_msgs/msg/PX2.msg new file mode 100644 index 00000000000..e411673050e --- /dev/null +++ b/modules/e2e/online_system/car_msgs/msg/PX2.msg @@ -0,0 +1,8 @@ +Header header +uint32 id=6 +int8 Mode +float32 TarAcce +float32 Curvature +float32 TarSteeringAngle +uint8 DecToStop +uint8 PX2_UID diff --git a/modules/e2e/online_system/car_msgs/msg/PX2_FB.msg b/modules/e2e/online_system/car_msgs/msg/PX2_FB.msg new file mode 100644 index 00000000000..600684663b3 --- /dev/null +++ b/modules/e2e/online_system/car_msgs/msg/PX2_FB.msg @@ -0,0 +1,7 @@ +Header header +uint32 id=7 +int8 Mode +float32 TarAcce +float32 TarSteeringAngle +uint8 DecToStop +uint8 PX2_UID diff --git a/modules/e2e/online_system/car_msgs/msg/SAS.msg b/modules/e2e/online_system/car_msgs/msg/SAS.msg new file mode 100644 index 00000000000..7a29eb13654 --- /dev/null +++ b/modules/e2e/online_system/car_msgs/msg/SAS.msg @@ -0,0 +1,7 @@ +Header header +int32 id=5 +int8 SteeringWheelSpeedSign +float32 SteeringWheelAngle +int8 SteeringWheelAngleSign +float32 SteeringWheelSpeed +int8 SAS_Status diff --git a/modules/e2e/online_system/car_msgs/msg/WorkStatus.msg b/modules/e2e/online_system/car_msgs/msg/WorkStatus.msg new file mode 100644 index 00000000000..3383861f7cc --- /dev/null +++ b/modules/e2e/online_system/car_msgs/msg/WorkStatus.msg @@ -0,0 +1,3 @@ +Header header +uint8 id=8 +uint8 status diff --git a/modules/e2e/online_system/car_msgs/package.xml b/modules/e2e/online_system/car_msgs/package.xml new file mode 100644 index 00000000000..90f598b2484 --- /dev/null +++ b/modules/e2e/online_system/car_msgs/package.xml @@ -0,0 +1,75 @@ + + + + + car_msgs + 0.0.0 + The car_msgs package + + + + + zhengchao04 + + + + + + BSD + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + can_msgs + message_generation + roscpp + rospy + sensor_msgs + can_msgs + roscpp + rospy + sensor_msgs + + + + + + + + diff --git a/modules/e2e/online_system/data_checker/CMakeLists.txt b/modules/e2e/online_system/data_checker/CMakeLists.txt new file mode 100644 index 00000000000..89f5759c8fb --- /dev/null +++ b/modules/e2e/online_system/data_checker/CMakeLists.txt @@ -0,0 +1,192 @@ +cmake_minimum_required(VERSION 2.8.3) +project(data_checker) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + can_msgs + car_msgs + novatel_msgs + roscpp + rospy + sensor_msgs + std_msgs +) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a run_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +# add_message_files( +# FILES +# Message1.msg +# Message2.msg +# ) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here +# generate_messages( +# DEPENDENCIES +# novatel_msgs# sensor_msgs# std_msgs +# ) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a run_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if you package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES data_checker +# CATKIN_DEPENDS can_msgs novatel_msgs roscpp rospy sensor_msgs std_msgs +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +# include_directories(include) +include_directories( + ${catkin_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(data_checker +# src/${PROJECT_NAME}/data_checker.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(data_checker ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +# add_executable(data_checker_node src/data_checker_node.cpp) + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(data_checker_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +# target_link_libraries(data_checker_node +# ${catkin_LIBRARIES} +# ) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination + install(PROGRAMS + scripts/my_python_script + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) + +## Mark executables and/or libraries for installation +# install(TARGETS data_checker data_checker_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_data_checker.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/modules/e2e/online_system/data_checker/package.xml b/modules/e2e/online_system/data_checker/package.xml new file mode 100644 index 00000000000..e387ca15dd8 --- /dev/null +++ b/modules/e2e/online_system/data_checker/package.xml @@ -0,0 +1,80 @@ + + + + + data_checker + 0.0.0 + The data_checker package + + + + + zhengchao04 + + + + + + BSD + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + can_msgs + car_msgs + novatel_msgs + roscpp + rospy + sensor_msgs + std_msgs + can_msgs + car_msgs + novatel_msgs + roscpp + rospy + sensor_msgs + std_msgs + + + + + + + + diff --git a/modules/e2e/online_system/data_checker/scripts/main.py b/modules/e2e/online_system/data_checker/scripts/main.py new file mode 100644 index 00000000000..950211d1480 --- /dev/null +++ b/modules/e2e/online_system/data_checker/scripts/main.py @@ -0,0 +1,205 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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 module publishes the car control message. + +""" + + +import rospy +import threading +import math +from sensor_msgs.msg import Image +from std_msgs.msg import Bool +from car_msgs.msg import ABS, PX2 +from novatel_msgs.msg import BESTPOS, INSPVA, Alignment + +g_image_msg = Image() +g_can_msg = ABS() +g_rtk_msg = BESTPOS() +g_ins_msg = INSPVA() +g_alig_msg = Alignment() +g_est_msg = PX2() +g_act_msg = PX2() + + +def est_callback(data): + global g_est_msg + g_est_msg = data + + +def act_callback(data): + global g_act_msg + g_act_msg = data + + +def image_callback(data): + global g_image_msg + g_image_msg = data + + +def rtk_callback(data): + global g_rtk_msg + g_rtk_msg = data + + +def ins_callback(data): + global g_ins_msg + g_ins_msg = data + + +def alig_callback(data): + global g_alig_msg + g_alig_msg = data + + +def can_callback(data): + global g_can_msg + g_can_msg = data + + +def check_msg(time): + now = rospy.Time.now() + t = abs((now - time).to_sec()) + rospy.loginfo("diff " + str(t) + " now " + str(now) + " msg " + str(time)) + if t > 2: + return False + else: + return True + + +def work(): + global g_image_msg + global g_can_msg + global g_rtk_msg + global g_alig_msg + global g_ins_msg + global g_est_msg + global g_act_msg + + r = rospy.Rate(1) + + while not rospy.is_shutdown(): + rospy.loginfo("check image") + ret = check_msg(g_image_msg.header.stamp) + if not ret: + image_status_pub.publish(False) + else: + image_status_pub.publish(True) + + rospy.loginfo("check can") + ret = check_msg(g_can_msg.header.stamp) + if not ret: + can_status_pub.publish(False) + else: + can_status_pub.publish(True) + + rospy.loginfo("check est") + ret = check_msg(g_est_msg.header.stamp) + if not ret: + est_status_pub.publish(False) + else: + est_status_pub.publish(True) + + rospy.loginfo("check act") + ret = check_msg(g_act_msg.header.stamp) + if not ret: + act_status_pub.publish(False) + else: + act_status_pub.publish(True) + + rospy.loginfo("check alig") + ret = check_msg(g_alig_msg.header.stamp) + if not ret: + rtk_status_pub.publish(False) + else: + if g_rtk_msg.position_type != 48 and g_rtk_msg.position_type != 50 and g_rtk_msg.position_type != 56: + rtk_status_pub.publish(False) + else: + rtk_status_pub.publish(True) + + if g_ins_msg.insstatus != 3: + ins_status_pub.publish(False) + else: + ins_status_pub.publish(True) + + r.sleep() + + +rospy.init_node('data_check', anonymous=True) + +image_sub = rospy.Subscriber( + '/car_msgs/image', + Image, + image_callback, + queue_size=1, + buff_size=1024 * 1024 * 16) +can_sub = rospy.Subscriber( + '/car_msgs/ABS', + ABS, + can_callback, + queue_size=1, + buff_size=1024 * + 1024 * + 16) +rtk_sub = rospy.Subscriber( + '/novatel_data/bestpos', + BESTPOS, + rtk_callback, + queue_size=1, + buff_size=1024 * 1024 * 16) +ins_sub = rospy.Subscriber( + '/novatel_data/inspva', + INSPVA, + ins_callback, + queue_size=1, + buff_size=1024 * 1024 * 16) +alig_sub = rospy.Subscriber( + '/novatel_data/align', + Alignment, + alig_callback, + queue_size=1, + buff_size=1024 * 1024 * 16) +est_sub = rospy.Subscriber( + '/car_msgs/estimate_px2', + PX2, + est_callback, + queue_size=1, + buff_size=1024 * 1024 * 16) +act_sub = rospy.Subscriber( + '/car_msgs/PX2', + PX2, + act_callback, + queue_size=1, + buff_size=1024 * + 1024 * + 16) + +image_status_pub = rospy.Publisher('/system_info/image', Bool, queue_size=1) +rtk_status_pub = rospy.Publisher('/system_info/rtk', Bool, queue_size=1) +ins_status_pub = rospy.Publisher('/system_info/ins', Bool, queue_size=1) +can_status_pub = rospy.Publisher('/system_info/can', Bool, queue_size=1) +act_status_pub = rospy.Publisher('/system_info/act', Bool, queue_size=1) +est_status_pub = rospy.Publisher('/system_info/est', Bool, queue_size=1) + +th = threading.Thread(target=work) +th.setDaemon(True) +th.start() + +rospy.spin() diff --git a/modules/e2e/online_system/px2_camera_image/CMakeLists.txt b/modules/e2e/online_system/px2_camera_image/CMakeLists.txt new file mode 100644 index 00000000000..ccaaa890175 --- /dev/null +++ b/modules/e2e/online_system/px2_camera_image/CMakeLists.txt @@ -0,0 +1,220 @@ +cmake_minimum_required(VERSION 2.8.3) +project(px2_camera_image) + +## Add support for C++11, supported in ROS Kinetic and newer +# add_definitions(-std=c++11) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +SET(OpenCV_DIR "/usr/local/share/OpenCV") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2 -fopenmp") + +find_package(catkin REQUIRED COMPONENTS + #cv_bridge + OpenCV + roscpp + rospy + sensor_msgs + std_msgs + cv_bridge +) + +## System dependencies are found with CMake's conventions +#find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a run_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +# add_message_files( +# FILES +# Message1.msg +# Message2.msg +# ) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here +#generate_messages( +# DEPENDENCIES +# sensor_msgs# std_msgs +# df_nav_msgs +# ) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a run_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if you package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES px2_camera_image +# CATKIN_DEPENDS cv_bridge roscpp rospy sensor_msgs std_msgs +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +# include_directories(include) +include_directories( + ./include/px2_camera_image/ + ${catkin_INCLUDE_DIRS} + /usr/local/include/ + /usr/local/driveworks/include +) + +link_directories( + #./lib + /usr/local/driveworks/lib + /usr/local/lib +) + +## Declare a C++ library +# add_library(${PROJECT_NAME} +# src/${PROJECT_NAME}/px2_camera_image.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +## With catkin_make all packages are built within a single CMake context +## The recommended prefix ensures that target names across packages don't collide +add_executable(px2_camera_node src/px2_camera_node.cpp src/camera_px2.cpp) + +## Rename C++ executable without prefix +## The above recommended prefix causes long target names, the following renames the +## target back to the shorter version for ease of user use +## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" +# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +target_link_libraries(px2_camera_node + driveworks + #libcamera_px2.so + ${catkin_LIBRARIES} + /usr/local/lib/libopencv_core.so + /usr/local/lib/libopencv_highgui.so + ) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# install(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables and/or libraries for installation +install(TARGETS px2_camera_node px2_camera_node + ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} + LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} + RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_px2_camera_image.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/modules/e2e/online_system/px2_camera_image/include/px2_camera_image/camera_px2.h b/modules/e2e/online_system/px2_camera_image/include/px2_camera_image/camera_px2.h new file mode 100644 index 00000000000..041d8f28400 --- /dev/null +++ b/modules/e2e/online_system/px2_camera_image/include/px2_camera_image/camera_px2.h @@ -0,0 +1,24 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef PX2_CAMERA_IMAGE_INCLUDE_PX2_CAMERA_IMAGE_CAMERA_PX2_H +#define PX2_CAMERA_IMAGE_INCLUDE_PX2_CAMERA_IMAGE_CAMERA_PX2_H +void init(int& image_width, int& image_height); +void start(); +bool read_frame(unsigned char** image_data); +void reset_frame(); +void stop(); +void release(); +#endif diff --git a/modules/e2e/online_system/px2_camera_image/package.xml b/modules/e2e/online_system/px2_camera_image/package.xml new file mode 100644 index 00000000000..76bdf209848 --- /dev/null +++ b/modules/e2e/online_system/px2_camera_image/package.xml @@ -0,0 +1,76 @@ + + + + + px2_camera_image + 0.0.0 + The px2_camera_image package + + + + + zhengchao04 + + + + + + BSD + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + cv_bridge + roscpp + rospy + sensor_msgs + std_msgs + cv_bridge + roscpp + rospy + sensor_msgs + std_msgs + + + + + + + + diff --git a/modules/e2e/online_system/px2_camera_image/src/camera_px2.cpp b/modules/e2e/online_system/px2_camera_image/src/camera_px2.cpp new file mode 100644 index 00000000000..e9b2343aaff --- /dev/null +++ b/modules/e2e/online_system/px2_camera_image/src/camera_px2.cpp @@ -0,0 +1,410 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#include "camera_px2.h" + +#include +#include +#include + +#include +#include +#include + +#ifdef LINUX +#include +#include +#endif + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +// SAMPLE COMMON +#include +#include +#include +#include +#include + +// CORE +#include +#include + +// RENDERER +#include + +// HAL +#include +#include +#include + +// IMAGE +#include +#include + +//------------------------------------------------------------------------------ +// Variables +//------------------------------------------------------------------------------ +static volatile bool g_run = true; + +// 1KB should be plenty for data lines from any sensor +// Actual size is returned during runtime +#define MAX_EMBED_DATA_SIZE (1024 * 1024) +NvMediaISCEmbeddedData sensorData; + +//SDK objects +WindowBase *window = nullptr; +dwContextHandle_t sdk = DW_NULL_HANDLE; +dwRendererHandle_t renderer = DW_NULL_HANDLE; +dwSALHandle_t sal = DW_NULL_HANDLE; +dwSensorHandle_t cameraSensor = DW_NULL_HANDLE; + +// create HAL and camera +uint32_t image_width_ = 0; +uint32_t image_height_ = 0; +dwImageType cameraImageType; + +// start +dwImageProperties cameraImageProperties; +dwCameraProperties cameraProperties; +std::vector rgbaImagePool; +dwImageFormatConverterHandle_t yuv2rgba = DW_NULL_HANDLE; +dwImageStreamerHandle_t nvm2gl = DW_NULL_HANDLE; +dwImageStreamerHandle_t nvm2cpu = DW_NULL_HANDLE; + +dwImageCPU *frameCPU = nullptr; + +// Program arguments +ProgramArguments g_arguments( +{ + ProgramArguments::Option_t("camera-type", "ar0231"), + ProgramArguments::Option_t("csi-port", "ab"), + ProgramArguments::Option_t("offscreen", "0"), + ProgramArguments::Option_t("write-file", ""), + ProgramArguments::Option_t("serialize-type", "h264"), + ProgramArguments::Option_t("serialize-bitrate", "8000000"), + ProgramArguments::Option_t("serialize-framerate", "30"), + ProgramArguments::Option_t("slave", "0"), + +}); + +//------------------------------------------------------------------------------ +void initGL(WindowBase **window) +{ + *window = new WindowOffscreenEGL(1280, 800); +} + +//------------------------------------------------------------------------------ +void initSdk(dwContextHandle_t *context, WindowBase *window) +{ + // create a Logger to log to console + // we keep the ownership of the logger at the application level + dwLogger_initialize(getConsoleLoggerCallback(true)); + dwLogger_setLogLevel(DW_LOG_VERBOSE); + + // instantiate Driveworks SDK context + dwContextParameters sdkParams; + memset(&sdkParams, 0, sizeof(dwContextParameters)); + +#ifdef VIBRANTE + sdkParams.eglDisplay = window->getEGLDisplay(); +#else + (void)window; +#endif + + dwInitialize(context, DW_VERSION, &sdkParams); +} + +//------------------------------------------------------------------------------ +void initRenderer(dwRendererHandle_t *renderer, + dwContextHandle_t context, WindowBase *window) +{ + dwStatus result; + + result = dwRenderer_initialize(renderer, context); + if (result != DW_SUCCESS) + throw std::runtime_error(std::string("Cannot init renderer: ") + + dwGetStatusName(result)); + + // Set some renderer defaults + dwRect rect; + rect.width = window->width(); + rect.height = window->height(); + rect.x = 0; + rect.y = 0; + + dwRenderer_setRect(rect, *renderer); +} + +//------------------------------------------------------------------------------ +void initSensors(dwSALHandle_t *sal, dwSensorHandle_t *camera, + uint32_t *imageWidth, uint32_t *imageHeight, dwImageType *cameraImageType, + dwContextHandle_t context) +{ + dwStatus result; + + result = dwSAL_initialize(sal, context); + if (result != DW_SUCCESS) { + std::cerr << "Cannot initialize SAL: " + << dwGetStatusName(result) << std::endl; + exit(1); + } + + // create GMSL Camera interface + dwSensorParams params; + std::string parameterString = g_arguments.parameterString(); + parameterString += ",output-format=yuv+data"; + params.parameters = parameterString.c_str(); + params.protocol = "camera.gmsl"; + result = dwSAL_createSensor(camera, params, *sal); + if (result != DW_SUCCESS) { + std::cerr << "Cannot create driver: camera.gmsl with params: " + << params.parameters << std::endl + << "Error: " << dwGetStatusName(result) << std::endl; + exit(1); + } + + dwImageProperties cameraImageProperties; + dwSensorCamera_getImageProperties(&cameraImageProperties, + DW_CAMERA_PROCESSED_IMAGE, + *camera); + *imageWidth = cameraImageProperties.width; + *imageHeight = cameraImageProperties.height; + *cameraImageType = cameraImageProperties.type; + + dwCameraProperties cameraProperties; + dwSensorCamera_getSensorProperties(&cameraProperties, *camera); + + std::cout << "Camera image with " << *imageWidth << "x" << *imageHeight + << " at " << cameraProperties.framerate << " FPS" << std::endl; +} + +void init(int& image_width, int& image_height) { + initGL(&window); + initSdk(&sdk, window); + initRenderer(&renderer, sdk, window); + initSensors(&sal, &cameraSensor, &image_width_, &image_height_, &cameraImageType, sdk); + if (cameraImageType != DW_IMAGE_NVMEDIA) + { + std::cerr << "Error: Expected nvmedia image type, received " + << cameraImageType << " instead." << std::endl; + exit(-1); + } + + // Allocate buffer for parsed embedded data + sensorData.top.data = new uint8_t[MAX_EMBED_DATA_SIZE]; + sensorData.bottom.data = new uint8_t[MAX_EMBED_DATA_SIZE]; + sensorData.top.bufferSize = MAX_EMBED_DATA_SIZE; + sensorData.bottom.bufferSize = MAX_EMBED_DATA_SIZE; + + image_width = image_width_; + image_height = image_height_; +} + +void start() { + // RGBA image pool for conversion from YUV camera output + NvMediaDevice *nvmedia; + dwContext_getNvMediaDevice(&nvmedia, sdk); + + for (int i = 0; i < 1; ++i) { + NvMediaImageAdvancedConfig advConfig; + memset(&advConfig, 0, sizeof(advConfig)); + dwImageNvMedia *rgbaImage = new dwImageNvMedia(); + NvMediaImage *rgbaNvMediaImage; + + rgbaNvMediaImage = NvMediaImageCreate(nvmedia, NvMediaSurfaceType_Image_RGBA, + NVMEDIA_IMAGE_CLASS_SINGLE_IMAGE, 1, + image_width_, image_height_, + 0, + &advConfig); + dwImageNvMedia_setFromImage(rgbaImage, rgbaNvMediaImage); + + rgbaImagePool.push_back(rgbaImage); + } + + // format converter + dwSensorCamera_getImageProperties(&cameraImageProperties, DW_CAMERA_PROCESSED_IMAGE, cameraSensor); + dwImageProperties displayImageProperties = cameraImageProperties; + displayImageProperties.pxlFormat = DW_IMAGE_RGBA; + + dwStatus status = dwImageFormatConverter_initialize(&yuv2rgba, + cameraImageProperties, + displayImageProperties, + sdk); + if (status != DW_SUCCESS) { + std::cerr << "Cannot initialize pixel format converter" << std::endl; + exit(1); + } + + // image API translator + dwImageStreamer_initialize(&nvm2cpu, DW_IMAGE_NVMEDIA, DW_IMAGE_CPU, + DW_IMAGE_RGBA, DW_TYPE_UINT8, image_width_, image_height_, sdk); + + // Start Sensor and Processing + dwSensorCamera_getSensorProperties(&cameraProperties, cameraSensor); + + g_run = dwSensor_start(cameraSensor) == DW_SUCCESS; +} + +bool read_frame(unsigned char** image_data) { + if (image_data == nullptr) { + return false; + } + + dwCameraFrameHandle_t frameHandle; + dwImageNvMedia *frame = nullptr; + uint32_t camera = 0u; + dwStatus status = dwSensorCamera_readFrame(&frameHandle, camera, 1000000, cameraSensor); + if (status != DW_SUCCESS) { + std::cout << "\n ERROR readFrame: " << dwGetStatusName(status) << std::endl; + return false; + } + + if (cameraProperties.outputTypes & DW_CAMERA_PROCESSED_IMAGE) { + status = dwSensorCamera_getImageNvMedia(&frame, DW_CAMERA_PROCESSED_IMAGE, frameHandle); + if (status != DW_SUCCESS) { + std::cout << "\n ERROR getImageNvMedia " << dwGetStatusName(status) << std::endl; + return false; + } + } + + // get embedded lines + if (cameraProperties.outputTypes & DW_CAMERA_DATALINES) { + const dwCameraDataLines* dataLines = nullptr; + status = dwSensorCamera_getDataLines(&dataLines, frameHandle); + // parse the data + if (status == DW_SUCCESS) { + status = dwSensorCamera_parseDataNvMedia(&sensorData, dataLines, cameraSensor); + if (status == DW_SUCCESS) { + std::cout << "Exposure Time (s): " << sensorData.exposureMidpointTime << "\r";// std::endl; + } else { + std::cout << "Could not parse embedded data: " << dwGetStatusName(status) << "\r"; //std::endl; + return false; + } + } else { + std::cout << "Error getting datalines: " << dwGetStatusName(status) << "\r"; //std::endl; + return false; + } + } + + // log message + std::cout << frame->timestamp_us; + std::cout << " IMAGE SIZE " << frame->img->width << "x" << frame->img->height; + std::cout << std::endl; + + // Convert from YUV to RGBA + if (frame && rgbaImagePool.size() > 0) { + std::cout << "rgbaImagePool size: " << rgbaImagePool.size() << std::endl; + dwImageNvMedia *rgbaImage = rgbaImagePool.back(); + rgbaImagePool.pop_back(); + + std::cout << " CONVERSION YUV->RGBA\n"; + status = dwImageFormatConverter_copyConvertNvMedia(rgbaImage, frame, yuv2rgba); + if (status != DW_SUCCESS) { + std::cout << "\n ERROR copyConvert: " << dwGetStatusName(status) << std::endl; + rgbaImagePool.push_back(rgbaImage); + + } else { + // take screenshot if requested + //if (gTakeScreenshot) + //{ + // clock_t begin = clock(); + // std::cout << "width: " << rgbaImage->prop.width << std::endl; + // std::cout << "height: " << rgbaImage->prop.height << std::endl; + // NvMediaImageSurfaceMap surfaceMap; + // if (NvMediaImageLock(rgbaImage->img, NVMEDIA_IMAGE_ACCESS_READ, &surfaceMap) == NVMEDIA_STATUS_OK) { + // clock_t cpy_begin = clock(); + // memcpy(image_data, (unsigned char*)surfaceMap.surface[0].mapping, image_width_ * image_height_ * 4); + // clock_t cpy_end = clock(); + // double cpy_time = double(cpy_end - cpy_begin)/ CLOCKS_PER_SEC; + // std::cout << "copy use time: " << cpy_time << std::endl; + // NvMediaImageUnlock(rgbaImage->img); + // } else { + // std::cout << "CANNOT LOCK NVMEDIA IMAGE - NO SCREENSHOT\n"; + // } + // clock_t end = clock(); + // double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC; + // std::cout << "use time: " << elapsed_secs << std::endl; + //} + + // Send via ImageStreamer to get CPU image back + status = dwImageStreamer_postNvMedia(rgbaImage, nvm2cpu); + if (status != DW_SUCCESS) { + std::cout << "\n ERROR postNvMedia: " << dwGetStatusName(status) << std::endl; + return false; + } else { + status = dwImageStreamer_receiveCPU(&frameCPU, 60000, nvm2cpu); + if (status == DW_SUCCESS && frameCPU) { + *image_data = frameCPU->data[0]; + //memcpy(image_data, frameCPU->data[0], image_width_ * image_height_ * 4); + //dwImageStreamer_returnReceivedCPU(frameCPU, nvm2cpu); + } else { + memset(image_data, 0, image_width_ * image_height_ * 4); + } + } + + // any image returned back, we put back into the pool + dwImageNvMedia *retimg = nullptr; + dwImageStreamer_waitPostedNvMedia(&retimg, 33000, nvm2cpu); + + if (retimg) + rgbaImagePool.push_back(retimg); + } + } + + dwSensorCamera_returnFrame(&frameHandle); + + //if (window) + // window->swapBuffers(); + + return true; +} + +void reset_frame() { + dwImageStreamer_returnReceivedCPU(frameCPU, nvm2cpu); +} + +void stop() { + dwSensor_stop(cameraSensor); + dwImageStreamer_release(&nvm2gl); + + for (auto frame : rgbaImagePool) { + NvMediaImageDestroy(frame->img); + delete frame; + } + + dwImageFormatConverter_release(&yuv2rgba); +} + +void release() { + // release used objects in correct order + dwSAL_releaseSensor(&cameraSensor); + dwSAL_release(&sal); + dwRenderer_release(&renderer); + dwRelease(&sdk); + dwLogger_release(); + delete window; + delete[] sensorData.top.data; + delete[] sensorData.bottom.data; +} diff --git a/modules/e2e/online_system/px2_camera_image/src/px2_camera_node.cpp b/modules/e2e/online_system/px2_camera_image/src/px2_camera_node.cpp new file mode 100644 index 00000000000..bfbc321d139 --- /dev/null +++ b/modules/e2e/online_system/px2_camera_image/src/px2_camera_node.cpp @@ -0,0 +1,87 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include "std_msgs/String.h" +#include +#include +//#include +#include "camera_px2.h" + +#include + +int main(int argc, char** argv) +{ + ros::init(argc, argv, "px2_camera_image"); + ros::NodeHandle n; + + // px2 camera initialize + int screen_shot_count = 0; + int image_width = 1920; + int image_height = 1208; + init(image_width, image_height); + start(); + + // define image compress topic + ros::Publisher image_publisher; + image_publisher = n.advertise("/car_msgs/image", 10); + ROS_INFO("initialize px2 image topic..."); + //ros::Rate loop_rate(20); + + int i = 0; + while (ros::ok()) + { + + // get image from px2 camera + int size = image_width * image_height * 4; + unsigned char* image_data = 0; + bool ret = read_frame(&image_data); + + if (!ret){ + ROS_ERROR_STREAM("read frame error"); + continue; + } + + + //if (i % 4 == 0) { + // convert to jpg + //cv::Mat image = cv::Mat(image_height, image_width, CV_8UC4, image_data); + + cv_bridge::CvImage image; + image.header.stamp = ros::Time::now(); + cv::Mat src = cv::Mat(image_height, image_width, CV_8UC4, image_data); + cv::resize(src, image.image, cv::Size(960, 604)); + image.encoding = "rgba8"; + image_publisher.publish(image.toImageMsg()); + + ++i; + reset_frame(); + //ros::spinOnce(); + //loop_rate.sleep(); + } + + + // ros::spin(); + stop(); + release(); + + return 0; +} diff --git a/modules/e2e/online_system/rc_msgs/CMakeLists.txt b/modules/e2e/online_system/rc_msgs/CMakeLists.txt new file mode 100644 index 00000000000..0d985aac68b --- /dev/null +++ b/modules/e2e/online_system/rc_msgs/CMakeLists.txt @@ -0,0 +1,200 @@ +cmake_minimum_required(VERSION 2.8.3) +project(rc_msgs) + +## Add support for C++11, supported in ROS Kinetic and newer +# add_definitions(-std=c++11) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + message_generation + roscpp + rospy +) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a run_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder + add_message_files( + FILES + RCCommand.msg +# Message1.msg +# Message2.msg + ) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here + generate_messages( + DEPENDENCIES + std_msgs # Or other packages containing msgs + ) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a run_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if you package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES rc_msgs +# CATKIN_DEPENDS message_generation roscpp rospy +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +# include_directories(include) +include_directories( + ${catkin_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(${PROJECT_NAME} +# src/${PROJECT_NAME}/rc_msgs.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +## With catkin_make all packages are built within a single CMake context +## The recommended prefix ensures that target names across packages don't collide +# add_executable(${PROJECT_NAME}_node src/rc_msgs_node.cpp) + +## Rename C++ executable without prefix +## The above recommended prefix causes long target names, the following renames the +## target back to the shorter version for ease of user use +## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" +# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +# target_link_libraries(${PROJECT_NAME}_node +# ${catkin_LIBRARIES} +# ) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# install(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables and/or libraries for installation +# install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_rc_msgs.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/modules/e2e/online_system/rc_msgs/msg/RCCommand.msg b/modules/e2e/online_system/rc_msgs/msg/RCCommand.msg new file mode 100644 index 00000000000..828503cb6d3 --- /dev/null +++ b/modules/e2e/online_system/rc_msgs/msg/RCCommand.msg @@ -0,0 +1,4 @@ +Header header +float32 acceleration +float32 steering_angle +int8 enable diff --git a/modules/e2e/online_system/rc_msgs/package.xml b/modules/e2e/online_system/rc_msgs/package.xml new file mode 100644 index 00000000000..c1a17db29b9 --- /dev/null +++ b/modules/e2e/online_system/rc_msgs/package.xml @@ -0,0 +1,72 @@ + + + + + rc_msgs + 0.0.0 + The rc_msgs package + + + + + zhengchao04 + + + + + + BSD + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + message_generation + roscpp + rospy + roscpp + rospy + message_runtime + + + + + + + + diff --git a/modules/e2e/online_system/system_check/CMakeLists.txt b/modules/e2e/online_system/system_check/CMakeLists.txt new file mode 100644 index 00000000000..47be2d75a75 --- /dev/null +++ b/modules/e2e/online_system/system_check/CMakeLists.txt @@ -0,0 +1,190 @@ +cmake_minimum_required(VERSION 2.8.3) +project(system_check) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + can_msgs + roscpp + rospy + sensor_msgs + std_msgs +) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a run_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +# add_message_files( +# FILES +# Message1.msg +# Message2.msg +# ) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here +# generate_messages( +# DEPENDENCIES +# can_msgs# sensor_msgs# std_msgs +# ) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a run_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if you package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES system_check +# CATKIN_DEPENDS can_msgs roscpp rospy sensor_msgs std_msgs +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +# include_directories(include) +include_directories( + ${catkin_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(system_check +# src/${PROJECT_NAME}/system_check.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(system_check ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +# add_executable(system_check_node src/system_check_node.cpp) + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(system_check_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +# target_link_libraries(system_check_node +# ${catkin_LIBRARIES} +# ) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination + install(PROGRAMS + scripts/system_check + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) + +## Mark executables and/or libraries for installation +# install(TARGETS system_check system_check_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_system_check.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/modules/e2e/online_system/system_check/package.xml b/modules/e2e/online_system/system_check/package.xml new file mode 100644 index 00000000000..0669e923633 --- /dev/null +++ b/modules/e2e/online_system/system_check/package.xml @@ -0,0 +1,76 @@ + + + + + system_check + 0.0.0 + The system_check package + + + + + zhengchao04 + + + + + + BSD + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + can_msgs + roscpp + rospy + sensor_msgs + std_msgs + can_msgs + roscpp + rospy + sensor_msgs + std_msgs + + + + + + + + diff --git a/modules/e2e/online_system/system_check/scripts/pygui.py b/modules/e2e/online_system/system_check/scripts/pygui.py new file mode 100644 index 00000000000..1a61379edc3 --- /dev/null +++ b/modules/e2e/online_system/system_check/scripts/pygui.py @@ -0,0 +1,198 @@ +#! /usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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 module publishes the car control message. + +""" + +#from Tkinter import * +from Tkinter import TK +from Tkinter import Frame +from std_msgs.msg import String +import time +import threading +import rospy + +g_mount_status = False +g_image_status = False +g_can_status = False +g_ins_status = False +g_rtk_status = False +g_est_status = False +g_act_status = False + + +def est_callback(data): + """car_control_estimate_callback function.""" + global g_est_status + g_est_status = data.data + rospy.loginfo("received est" + str(g_est_status)) + + +def act_callback(data): + """car_act_callback function.""" + global g_act_status + g_act_status = data.data + rospy.loginfo("received act " + str(g_act_status)) + + +def ins_callback(data): + """inspva_callback function.""" + global g_ins_status + g_ins_status = data.data + rospy.loginfo("received ins " + str(g_ins_status)) + + +def rtk_callback(data): + """rtk_status_callback function.""" + global g_rtk_status + g_rtk_status = data.data + rospy.loginfo("received rtk" + str(g_rtk_status)) + + +def mount_callback(data): + """disk_mount_status_callback function.""" + global g_mount_status + g_mount_status = data.data + rospy.loginfo("received mount " + str(g_mount_status)) + + +def image_callback(data): + """image_receive_status_callback function.""" + global g_image_status + g_image_status = data.data + rospy.loginfo("received image " + str(g_image_status)) + + +def can_callback(data): + """can_status_callback function.""" + global g_can_status + g_can_status = data.data + rospy.loginfo("received can " + str(g_can_status)) + + +def work(): + """A monitor is initialized to monitor all import status.""" + global g_mount_status + global g_image_status + global g_can_status + global g_rtk_status + global g_ins_status + global g_est_status + global g_act_status + + is_show = rospy.get_param("~is_show", False) + + rospy.loginfo("~is show " + str(is_show)) + + try: + while True: + if (g_rtk_status and g_can_status and g_image_status + and (is_show or g_mount_status) and (not is_show + or (g_est_status + and g_act_status + and g_ins_status))): + frame['bg'] = '#00FF00' + rospy.loginfo("all true") + else: + frame['bg'] = '#FF0000' + rospy.loginfo("not all true") + if is_show: + rospy.loginfo( + "image " + + str(g_image_status) + + " can " + + str(g_can_status) + + " rtk " + + str(g_rtk_status) + + " est " + + str(g_est_status) + + " act " + + str(g_act_status) + + " ins " + + str(g_ins_status)) + else: + rospy.loginfo( + "image " + + str(g_image_status) + + " can " + + str(g_can_status) + + " rtk " + + str(g_rtk_status) + + " mount " + + str(g_mount_status)) + time.sleep(1) + except KeyboardInterrupt: + exit(0) + + +rospy.init_node('system_check', anonymous=True) +mount_sub = rospy.Subscriber( + '/system_info/mount', + Bool, + mount_callback, + queue_size=1, + buff_size=1024 * 1024 * 8) +can_sub = rospy.Subscriber( + '/system_info/can', + Bool, + can_callback, + queue_size=1, + buff_size=1024 * 1024 * 8) +image_sub = rospy.Subscriber( + '/system_info/image', + Bool, + image_callback, + queue_size=1, + buff_size=1024 * 1024 * 8) +ins_sub = rospy.Subscriber( + '/system_info/ins', + Bool, + ins_callback, + queue_size=1, + buff_size=1024 * 1024 * 8) +rtk_sub = rospy.Subscriber( + '/system_info/rtk', + Bool, + rtk_callback, + queue_size=1, + buff_size=1024 * 1024 * 8) +est_sub = rospy.Subscriber( + '/system_info/est', + Bool, + est_callback, + queue_size=1, + buff_size=1024 * 1024 * 8) +act_sub = rospy.Subscriber( + '/system_info/act', + Bool, + act_callback, + queue_size=1, + buff_size=1024 * 1024 * 8) + +root = Tk(className='system_check') + +frame = Frame(root, width=1000, height=1000) +frame.pack() + +th = threading.Thread(target=work) +th.setDaemon(True) +th.start() + +root.mainloop() diff --git a/modules/elo/CMakeLists.txt b/modules/elo/CMakeLists.txt new file mode 100755 index 00000000000..ad6a43e9e05 --- /dev/null +++ b/modules/elo/CMakeLists.txt @@ -0,0 +1,12 @@ +project(localization_test) +cmake_minimum_required(VERSION 2.8) +IF(CMAKE_VERSION VERSION_GREATER "2.8.11") + CMAKE_POLICY(SET CMP0022 OLD) +ENDIF() + +include_directories(${PROJECT_SOURCE_DIR}/include) +include_directories(/usr/local/cuda-8.0/targets/aarch64-linux/include/) +find_package(OpenCV) + +add_executable(localization_test localization_test.cc) +target_link_libraries(localization_test ${PROJECT_SOURCE_DIR}/lib/libcamera_localization.so ${OpenCV_LIBS} ${PROJECT_SOURCE_DIR}/lib/libcaffe.so) diff --git a/modules/elo/README.md b/modules/elo/README.md new file mode 100755 index 00000000000..d81707dea14 --- /dev/null +++ b/modules/elo/README.md @@ -0,0 +1,160 @@ + +### 1. Introduction + +Baidu ego localization system is an accurate ego localization solution for self-driving. By combining sensor information, Global navigation satellite systems (GNSS), and Baidu HD Map into one system, Baidu ego localization system is able to offer a localization solution with high accuracy. + +GNSS positioning observes range measurements from orbiting GNSS satellites, while GNSS in general has some restrictions that it may not be available for high accuracy requirements of self-driving. Baidu ego localization system combines sensor information with HD Map and GNSS solution to provide high-accuracy localization solution. System extracts features from sensors and Baidu HD Map for feature matching. After feature matching, system is able to locate current vehicle in HD Map. Motion compensation is proposed to compensate current localization solution. + +![components of Baidu ego localization system](docs/pictures/flowchart.jpg) + +The main components of Baidu ego localization system is introduced as follow: +* Sensors: inlcude vision sensors (in-vehicle cameras, industrial camera CCDs and other image collecting sensors) and position sensors (include GPS, GLONASS, Beidou and other GNSS). +* HD Map: HD Map provides road information within specific area. +* Real-time location feature: Baidu ego localization system applies deep neural network architecture `ENet` (see: [ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation](https://arxiv.org/abs/1606.02147)) to extract lane lines and mark features by sensor for feature matching. +* Pre-stored location feature: obtains lane lines and mark features provided by HD Map. +* Feature matching: Baidu ego localization system locates current ego vehicle in HD Map by feature matching. +* Motion compensation: compensates current frame and adjusts the matching result via historical information. + +### 2. Requirements: software + +#### a. External dependencies + +* Requirements for `cmake 2.8.7` or higher (see: [cmake installation instructions](https://cmake.org/Wiki/CMake)) + +* Requirements for `OpenCV 3.X` (see: [OpenCV installation instructions](http://docs.opencv.org/master/df/d65/tutorial_table_of_content_introduction.html)) + +* Recommended requirements for `Protobuf` (see: [github](https://github.com/google/protobuf)) + +* Recommended requirements for `CUDA` (see: [CUDA installation instructions](http://docs.nvidia.com/cuda/index.html#installation-guides)) + +* Recommended requirements for `Eigen 3` (see: [Eigen installation instructions](http://eigen.tuxfamily.org/dox/)) + +* Recommended requirements for `jsoncpp` (see: [github](https://github.com/open-source-parsers/jsoncpp)) + +#### b. Internal dependencies + +* Requirements for `modified Caffe` (`lib/libcaffe.so`) + +* Requirements for `HD Map database` (`config/hadmap/hadmap.db`) + +### 3. Requirements: hardware + +Deployed on NVIDIA Drive PX2 (PDK 4.1.4.0). + +### 4. Data format + +* Input file: + + Note that optimum solution from SPAN-CPT (ground_truth_longitude` and `ground_truth_latitude`) are provided to make comparison with solution from Baidu ego localization system. + + ``` + image_name longitude latitude ground_truth_longitude ground_truth_latitude + ``` +* Config file: + + ``` + # effective image rectangle: top-left corner point, width and height of resulting cropped image in BGR format, pixel + top-left_corner_point_x top-left_corner_point_y width height + + # width and height of ENet input image, pixel + segmented_image_width segmented_image_height + + # camera parameters: principal point, focal length and rotation angle of camera related to vehicle coordinate system, pixel and radian + principal_point_x principal_point_y focal_length_x focal_length_y pitch yaw roll + + # center point of image, pixel + center_point_x center_point_y + + # ENet parameters file + enet_para_path + + # ENet structure file + enet_structure_path + + # camera parameters: translation of camera related to vehicle coordinate system, pixel + translation_x translation_y + + # database of HD Map + database_path + ``` + Sample config parameters + + ``` + 510 808 1410 1068 + 448 224 + 948.617 628.628 1918.64 1924.48 -3.9 0.6 0 + 960 604 + ../config/model/model_binary.caffemodel + ../config/model/net.prototxt + 0 150 + ../config/hadmap/hadmap.db + ``` +* Output format: + + ``` + image_name + [+] Begin Localization + [-] End Localization, misc time: runtime #### + [INFO] GROUNDTRUTH (ground_truth_longitude, ground_truth_latitude) LOCALIZATION (localization_longitude, localization_latitude) + ``` + Sample output: + ``` + 20170628_000038553.jpg + [+] Begin Localization + [-] End Localization, misc time: 91.95475700ms #### + [INFO] GROUNDTRUTH (115.66500838, 38.97777951) LOCALIZATION (115.66497835, 38.97775830) + ``` + +### 5. Installation + +* Install and build dependencies in `2. Recommended requirements: software`, then do the following steps. + +* a. System software dependencies can be installed with: + + ```Shell + sudo apt-get install cmake libhdf5-dev liblmdb-dev libleveldb-dev libatlas-dev libatlas-base-dev libgflags-dev libgoogle-glog-dev libopencv-dev libmatio-dev libcurl4-openssl-dev + ``` + +* b. Clone the `localization` repository: + + ```Shell + # Make sure to clone with --recursive + git clone --recursive repository_apollo-elo + + # We'll call the directory that you cloned localization into `P_ROOT` + ``` + +* c. Compile and run localization: + + ```Shell + cd $P_ROOT + mkdir build + cd build + cmake .. + make + ./localization_test config_file input_file image_path + ``` + +### 6. Demo + +* Hardware description: + + image: SEKONIX SF3323, 30 Hz; + + GNSS: U-Blox M8, 8 Hz; + + SPAN-CPT: 10 Hz; + +* Test data path: + + [testdata1.zip](http://pan.baidu.com/s/1eSelklW) + + [testdata2.zip](http://pan.baidu.com/s/1i4Nkn3J) + + unzip testdata in /data folder. + +* To run the localization demo in testdata1: + + ```Shell + ./localization_test ../config/apollo_release.config ../data/testdata1/test_list.txt ../data/testdata1/image/ + ``` diff --git a/modules/elo/config/apollo_release.config b/modules/elo/config/apollo_release.config new file mode 100755 index 00000000000..99400d537be --- /dev/null +++ b/modules/elo/config/apollo_release.config @@ -0,0 +1,8 @@ +510 808 1410 1068 +448 224 +948.617 628.628 1918.64 1924.48 -3.9 0.6 0 +960 604 +../config/model/model_binary.caffemodel +../config/model/net.prototxt +0 150 +../config/hadmap/hadmap.xml diff --git a/modules/elo/config/hadmap/hadmap.xml b/modules/elo/config/hadmap/hadmap.xml new file mode 100755 index 00000000000..ddfd26525d2 --- /dev/null +++ b/modules/elo/config/hadmap/hadmap.xml @@ -0,0 +1,5836 @@ + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
diff --git a/modules/elo/config/model/model_binary.caffemodel b/modules/elo/config/model/model_binary.caffemodel new file mode 100755 index 00000000000..8b4d3607f4f Binary files /dev/null and b/modules/elo/config/model/model_binary.caffemodel differ diff --git a/modules/elo/config/model/net.prototxt b/modules/elo/config/model/net.prototxt new file mode 100755 index 00000000000..8c0aca3fbf2 --- /dev/null +++ b/modules/elo/config/model/net.prototxt @@ -0,0 +1,2645 @@ +name: "enet" +layer { + name: "data" + type: "MemoryData" + top: "data" + top: "label" + include { + phase: TEST + } + memory_data_param { + batch_size: 1 + channels: 3 + height: 224 + width: 448 + } +} +layer { + bottom: "data" + top: "enet_initial_branch2a" + name: "enet_initial_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 13 + pad_w: 1 + pad_h: 1 + stride_w: 2 + stride_h: 2 + kernel_w: 3 + kernel_h: 3 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "data" + top: "pool_initial_branch1a" + name: "pool_initial_branch1a" + type: "Pooling" + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layer { + bottom: "enet_initial_branch2a" + bottom: "pool_initial_branch1a" + top: "enet_initial" + name: "enet_initial" + type: "Concat" + concat_param { + axis: 1 + } +} +layer { + bottom: "enet_initial" + top: "enet_initial" + name: "bn_initial" + type: "BN" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + bn_param { + bn_mode: INFERENCE + scale_filler: { + type: "constant" + value: 1 + } + shift_filler: { + type: "constant" + value: 0.001 + } + } +} +layer { + bottom: "enet_initial" + top: "enet_initial" + name: "relu_initial" + type: "PReLU" +} +layer { + bottom: "enet_initial" + top: "enet1_0_branch2a" + name: "enet1_0_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 0 + pad_h: 0 + stride_w: 2 + stride_h: 2 + kernel_w: 2 + kernel_h: 2 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_0_branch2a" + top: "enet1_0_branch2a" + name: "relu1_0_branch2a" + type: "PReLU" +} +layer { + bottom: "enet1_0_branch2a" + top: "enet1_0_branch2b" + name: "enet1_0_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 1 + pad_h: 1 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_0_branch2b" + top: "enet1_0_branch2b" + name: "relu1_0_branch2b" + type: "PReLU" +} +layer { + bottom: "enet1_0_branch2b" + top: "enet1_0_branch2c" + name: "enet1_0_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 64 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet_initial" + top: "enet1_0_branch1a" + name: "enet1_0_branch1a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 64 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_0_branch1a" + top: "pool1_0_branch1a" + top: "pool1_0_branch1a_mask" + name: "pool1_0_branch1a" + type: "Pooling" + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layer { + bottom: "pool1_0_branch1a" + bottom: "enet1_0_branch2c" + top: "enet1_0" + name: "enet1_0" + type: "Eltwise" +} +layer { + bottom: "enet1_0" + top: "enet1_0" + name: "relu1_0" + type: "PReLU" +} +layer { + bottom: "enet1_0" + top: "enet1_1_branch2a" + name: "enet1_1_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_1_branch2a" + top: "enet1_1_branch2a" + name: "relu1_1_branch2a" + type: "PReLU" +} +layer { + bottom: "enet1_1_branch2a" + top: "enet1_1_branch2b" + name: "enet1_1_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 1 + pad_h: 1 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_1_branch2b" + top: "enet1_1_branch2b" + name: "relu1_1_branch2b" + type: "PReLU" +} +layer { + bottom: "enet1_1_branch2b" + top: "enet1_1_branch2c" + name: "enet1_1_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 64 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_0" + bottom: "enet1_1_branch2c" + top: "enet1_1" + name: "enet1_1" + type: "Eltwise" +} +layer { + bottom: "enet1_1" + top: "enet1_1" + name: "relu1_1" + type: "PReLU" +} +layer { + bottom: "enet1_1" + top: "enet1_2_branch2a" + name: "enet1_2_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_2_branch2a" + top: "enet1_2_branch2a" + name: "relu1_2_branch2a" + type: "PReLU" +} +layer { + bottom: "enet1_2_branch2a" + top: "enet1_2_branch2b" + name: "enet1_2_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 1 + pad_h: 1 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_2_branch2b" + top: "enet1_2_branch2b" + name: "relu1_2_branch2b" + type: "PReLU" +} +layer { + bottom: "enet1_2_branch2b" + top: "enet1_2_branch2c" + name: "enet1_2_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 64 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_1" + bottom: "enet1_2_branch2c" + top: "enet1_2" + name: "enet1_2" + type: "Eltwise" +} +layer { + bottom: "enet1_2" + top: "enet1_2" + name: "relu1_2" + type: "PReLU" +} +layer { + bottom: "enet1_2" + top: "enet1_3_branch2a" + name: "enet1_3_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_3_branch2a" + top: "enet1_3_branch2a" + name: "relu1_3_branch2a" + type: "PReLU" +} +layer { + bottom: "enet1_3_branch2a" + top: "enet1_3_branch2b" + name: "enet1_3_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 1 + pad_h: 1 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_3_branch2b" + top: "enet1_3_branch2b" + name: "relu1_3_branch2b" + type: "PReLU" +} +layer { + bottom: "enet1_3_branch2b" + top: "enet1_3_branch2c" + name: "enet1_3_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 64 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_2" + bottom: "enet1_3_branch2c" + top: "enet1_3" + name: "enet1_3" + type: "Eltwise" +} +layer { + bottom: "enet1_3" + top: "enet1_3" + name: "relu1_3" + type: "PReLU" +} +layer { + bottom: "enet1_3" + top: "enet1_4_branch2a" + name: "enet1_4_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_4_branch2a" + top: "enet1_4_branch2a" + name: "relu1_4_branch2a" + type: "PReLU" +} +layer { + bottom: "enet1_4_branch2a" + top: "enet1_4_branch2b" + name: "enet1_4_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 1 + pad_h: 1 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_4_branch2b" + top: "enet1_4_branch2b" + name: "relu1_4_branch2b" + type: "PReLU" +} +layer { + bottom: "enet1_4_branch2b" + top: "enet1_4_branch2c" + name: "enet1_4_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 64 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_3" + bottom: "enet1_4_branch2c" + top: "enet1_4" + name: "enet1_4" + type: "Eltwise" +} +layer { + bottom: "enet1_4" + top: "enet1_4" + name: "relu1_4" + type: "PReLU" +} +layer { + bottom: "enet1_4" + top: "enet2_0_branch2a" + name: "enet2_0_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 0 + pad_h: 0 + stride_w: 2 + stride_h: 2 + kernel_w: 2 + kernel_h: 2 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_0_branch2a" + top: "enet2_0_branch2a" + name: "relu2_0_branch2a" + type: "PReLU" +} +layer { + bottom: "enet2_0_branch2a" + top: "enet2_0_branch2b" + name: "enet2_0_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 1 + pad_h: 1 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_0_branch2b" + top: "enet2_0_branch2b" + name: "relu2_0_branch2b" + type: "PReLU" +} +layer { + bottom: "enet2_0_branch2b" + top: "enet2_0_branch2c" + name: "enet2_0_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 128 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet1_4" + top: "enet2_0_branch1a" + name: "enet2_0_branch1a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 128 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_0_branch1a" + top: "pool2_0_branch1a" + top: "pool2_0_branch1a_mask" + name: "pool2_0_branch1a" + type: "Pooling" + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layer { + bottom: "pool2_0_branch1a" + bottom: "enet2_0_branch2c" + top: "enet2_0" + name: "enet2_0" + type: "Eltwise" +} +layer { + bottom: "enet2_0" + top: "enet2_0" + name: "relu2_0" + type: "PReLU" +} +layer { + bottom: "enet2_0" + top: "enet2_1_branch2a" + name: "enet2_1_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_1_branch2a" + top: "enet2_1_branch2a" + name: "relu2_1_branch2a" + type: "PReLU" +} +layer { + bottom: "enet2_1_branch2a" + top: "enet2_1_branch2b" + name: "enet2_1_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 1 + pad_h: 1 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_1_branch2b" + top: "enet2_1_branch2b" + name: "relu2_1_branch2b" + type: "PReLU" +} +layer { + bottom: "enet2_1_branch2b" + top: "enet2_1_branch2c" + name: "enet2_1_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 128 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_0" + bottom: "enet2_1_branch2c" + top: "enet2_1" + name: "enet2_1" + type: "Eltwise" +} +layer { + bottom: "enet2_1" + top: "enet2_1" + name: "relu2_1" + type: "PReLU" +} +layer { + bottom: "enet2_1" + top: "enet2_2_branch2a" + name: "enet2_2_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_2_branch2a" + top: "enet2_2_branch2a" + name: "relu2_2_branch2a" + type: "PReLU" +} +layer { + bottom: "enet2_2_branch2a" + top: "enet2_2_branch2b" + name: "enet2_2_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 2 + pad_h: 2 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 2 + bias_term: true + } +} +layer { + bottom: "enet2_2_branch2b" + top: "enet2_2_branch2b" + name: "relu2_2_branch2b" + type: "PReLU" +} +layer { + bottom: "enet2_2_branch2b" + top: "enet2_2_branch2c" + name: "enet2_2_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 128 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_1" + bottom: "enet2_2_branch2c" + top: "enet2_2" + name: "enet2_2" + type: "Eltwise" +} +layer { + bottom: "enet2_2" + top: "enet2_2" + name: "relu2_2" + type: "PReLU" +} +layer { + bottom: "enet2_2" + top: "enet2_3_branch2a" + name: "enet2_3_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_3_branch2a" + top: "enet2_3_branch2a" + name: "relu2_3_branch2a" + type: "PReLU" +} +layer { + bottom: "enet2_3_branch2a" + top: "enet2_3_branch2b1" + name: "enet2_3_branch2b1" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 2 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 5 + kernel_h: 1 + dilation: 1 + bias_term: false + } +} +layer { + bottom: "enet2_3_branch2b1" + top: "enet2_3_branch2b" + name: "enet2_3_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 0 + pad_h: 2 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 5 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_3_branch2b" + top: "enet2_3_branch2b" + name: "relu2_3_branch2b" + type: "PReLU" +} +layer { + bottom: "enet2_3_branch2b" + top: "enet2_3_branch2c" + name: "enet2_3_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 128 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_2" + bottom: "enet2_3_branch2c" + top: "enet2_3" + name: "enet2_3" + type: "Eltwise" +} +layer { + bottom: "enet2_3" + top: "enet2_3" + name: "relu2_3" + type: "PReLU" +} +layer { + bottom: "enet2_3" + top: "enet2_4_branch2a" + name: "enet2_4_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_4_branch2a" + top: "enet2_4_branch2a" + name: "relu2_4_branch2a" + type: "PReLU" +} +layer { + bottom: "enet2_4_branch2a" + top: "enet2_4_branch2b" + name: "enet2_4_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 4 + pad_h: 4 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 4 + bias_term: true + } +} +layer { + bottom: "enet2_4_branch2b" + top: "enet2_4_branch2b" + name: "relu2_4_branch2b" + type: "PReLU" +} +layer { + bottom: "enet2_4_branch2b" + top: "enet2_4_branch2c" + name: "enet2_4_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 128 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_3" + bottom: "enet2_4_branch2c" + top: "enet2_4" + name: "enet2_4" + type: "Eltwise" +} +layer { + bottom: "enet2_4" + top: "enet2_4" + name: "relu2_4" + type: "PReLU" +} +layer { + bottom: "enet2_4" + top: "enet2_5_branch2a" + name: "enet2_5_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_5_branch2a" + top: "enet2_5_branch2a" + name: "relu2_5_branch2a" + type: "PReLU" +} +layer { + bottom: "enet2_5_branch2a" + top: "enet2_5_branch2b" + name: "enet2_5_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 1 + pad_h: 1 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_5_branch2b" + top: "enet2_5_branch2b" + name: "relu2_5_branch2b" + type: "PReLU" +} +layer { + bottom: "enet2_5_branch2b" + top: "enet2_5_branch2c" + name: "enet2_5_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 128 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_4" + bottom: "enet2_5_branch2c" + top: "enet2_5" + name: "enet2_5" + type: "Eltwise" +} +layer { + bottom: "enet2_5" + top: "enet2_5" + name: "relu2_5" + type: "PReLU" +} +layer { + bottom: "enet2_5" + top: "enet2_6_branch2a" + name: "enet2_6_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_6_branch2a" + top: "enet2_6_branch2a" + name: "relu2_6_branch2a" + type: "PReLU" +} +layer { + bottom: "enet2_6_branch2a" + top: "enet2_6_branch2b" + name: "enet2_6_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 8 + pad_h: 8 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 8 + bias_term: true + } +} +layer { + bottom: "enet2_6_branch2b" + top: "enet2_6_branch2b" + name: "relu2_6_branch2b" + type: "PReLU" +} +layer { + bottom: "enet2_6_branch2b" + top: "enet2_6_branch2c" + name: "enet2_6_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 128 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_5" + bottom: "enet2_6_branch2c" + top: "enet2_6" + name: "enet2_6" + type: "Eltwise" +} +layer { + bottom: "enet2_6" + top: "enet2_6" + name: "relu2_6" + type: "PReLU" +} +layer { + bottom: "enet2_6" + top: "enet2_7_branch2a" + name: "enet2_7_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_7_branch2a" + top: "enet2_7_branch2a" + name: "relu2_7_branch2a" + type: "PReLU" +} +layer { + bottom: "enet2_7_branch2a" + top: "enet2_7_branch2b1" + name: "enet2_7_branch2b1" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 2 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 5 + kernel_h: 1 + dilation: 1 + bias_term: false + } +} +layer { + bottom: "enet2_7_branch2b1" + top: "enet2_7_branch2b" + name: "enet2_7_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 0 + pad_h: 2 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 5 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_7_branch2b" + top: "enet2_7_branch2b" + name: "relu2_7_branch2b" + type: "PReLU" +} +layer { + bottom: "enet2_7_branch2b" + top: "enet2_7_branch2c" + name: "enet2_7_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 128 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_6" + bottom: "enet2_7_branch2c" + top: "enet2_7" + name: "enet2_7" + type: "Eltwise" +} +layer { + bottom: "enet2_7" + top: "enet2_7" + name: "relu2_7" + type: "PReLU" +} +layer { + bottom: "enet2_7" + top: "enet2_8_branch2a" + name: "enet2_8_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_8_branch2a" + top: "enet2_8_branch2a" + name: "relu2_8_branch2a" + type: "PReLU" +} +layer { + bottom: "enet2_8_branch2a" + top: "enet2_8_branch2b" + name: "enet2_8_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 32 + pad_w: 16 + pad_h: 16 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 16 + bias_term: true + } +} +layer { + bottom: "enet2_8_branch2b" + top: "enet2_8_branch2b" + name: "relu2_8_branch2b" + type: "PReLU" +} +layer { + bottom: "enet2_8_branch2b" + top: "enet2_8_branch2c" + name: "enet2_8_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 128 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_7" + bottom: "enet2_8_branch2c" + top: "enet2_8" + name: "enet2_8" + type: "Eltwise" +} +layer { + bottom: "enet2_8" + top: "enet2_8" + name: "relu2_8" + type: "PReLU" +} + +layer { + bottom: "enet2_8" + top: "enet4_0_branch2a" + name: "enet4_0_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet4_0_branch2a" + top: "enet4_0_branch2a" + name: "relu4_0_branch2a" + type: "ReLU" +} +layer { + bottom: "enet4_0_branch2a" + top: "enet4_0_branch2b" + name: "enet4_0_branch2b" + type: "Deconvolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad: 1 + stride: 2 + kernel_size: 4 + } +} +layer { + bottom: "enet4_0_branch2b" + top: "enet4_0_branch2b" + name: "bn4_0_branch2b" + type: "BN" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + bn_param { + bn_mode: INFERENCE + scale_filler: { + type: "constant" + value: 1 + } + shift_filler: { + type: "constant" + value: 0.001 + } + } +} +layer { + bottom: "enet4_0_branch2b" + top: "enet4_0_branch2b" + name: "relu4_0_branch2b" + type: "ReLU" +} +layer { + bottom: "enet4_0_branch2b" + top: "enet4_0_branch2c" + name: "enet4_0_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 64 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet2_8" + top: "enet4_0_branch1a" + name: "enet4_0_branch1a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 64 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet4_0_branch1a" + bottom: "pool2_0_branch1a_mask" + top: "unpool4_0_branch1a" + name: "unpool4_0_branch1a" + type: "UnPooling" + unpooling_param { + unpool: MAX + kernel_size: 2 + stride: 2 + unpool_w: 112 + unpool_h: 56 + } +} +layer { + bottom: "unpool4_0_branch1a" + bottom: "enet4_0_branch2c" + top: "enet4_0" + name: "enet4_0" + type: "Eltwise" +} +layer { + bottom: "enet4_0" + top: "enet4_0" + name: "relu4_0" + type: "ReLU" +} +layer { + bottom: "enet4_0" + top: "enet4_1_branch2a" + name: "enet4_1_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet4_1_branch2a" + top: "enet4_1_branch2a" + name: "relu4_1_branch2a" + type: "ReLU" +} +layer { + bottom: "enet4_1_branch2a" + top: "enet4_1_branch2b" + name: "enet4_1_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 1 + pad_h: 1 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet4_1_branch2b" + top: "enet4_1_branch2b" + name: "relu4_1_branch2b" + type: "ReLU" +} +layer { + bottom: "enet4_1_branch2b" + top: "enet4_1_branch2c" + name: "enet4_1_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 64 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet4_0" + bottom: "enet4_1_branch2c" + top: "enet4_1" + name: "enet4_1" + type: "Eltwise" +} +layer { + bottom: "enet4_1" + top: "enet4_1" + name: "relu4_1" + type: "ReLU" +} +layer { + bottom: "enet4_1" + top: "enet4_2_branch2a" + name: "enet4_2_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet4_2_branch2a" + top: "enet4_2_branch2a" + name: "relu4_2_branch2a" + type: "ReLU" +} +layer { + bottom: "enet4_2_branch2a" + top: "enet4_2_branch2b" + name: "enet4_2_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 1 + pad_h: 1 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet4_2_branch2b" + top: "enet4_2_branch2b" + name: "relu4_2_branch2b" + type: "ReLU" +} +layer { + bottom: "enet4_2_branch2b" + top: "enet4_2_branch2c" + name: "enet4_2_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 64 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet4_1" + bottom: "enet4_2_branch2c" + top: "enet4_2" + name: "enet4_2" + type: "Eltwise" +} +layer { + bottom: "enet4_2" + top: "enet4_2" + name: "relu4_2" + type: "ReLU" +} +layer { + bottom: "enet4_2" + top: "enet5_0_branch2a" + name: "enet5_0_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 4 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet5_0_branch2a" + top: "enet5_0_branch2a" + name: "relu5_0_branch2a" + type: "ReLU" +} +layer { + bottom: "enet5_0_branch2a" + top: "enet5_0_branch2b" + name: "enet5_0_branch2b" + type: "Deconvolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 4 + pad: 1 + stride: 2 + kernel_size: 4 + } +} +layer { + bottom: "enet5_0_branch2b" + top: "enet5_0_branch2b" + name: "bn5_0_branch2b" + type: "BN" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + bn_param { + bn_mode: INFERENCE + scale_filler: { + type: "constant" + value: 1 + } + shift_filler: { + type: "constant" + value: 0.001 + } + } +} +layer { + bottom: "enet5_0_branch2b" + top: "enet5_0_branch2b" + name: "relu5_0_branch2b" + type: "ReLU" +} +layer { + bottom: "enet5_0_branch2b" + top: "enet5_0_branch2c" + name: "enet5_0_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet4_2" + top: "enet5_0_branch1a" + name: "enet5_0_branch1a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet5_0_branch1a" + bottom: "pool1_0_branch1a_mask" + top: "unpool5_0_branch1a" + name: "unpool5_0_branch1a" + type: "UnPooling" + unpooling_param { + unpool: MAX + kernel_size: 2 + stride: 2 + unpool_w: 224 + unpool_h: 112 + } +} +layer { + bottom: "unpool5_0_branch1a" + bottom: "enet5_0_branch2c" + top: "enet5_0" + name: "enet5_0" + type: "Eltwise" +} +layer { + bottom: "enet5_0" + top: "enet5_0" + name: "relu5_0" + type: "ReLU" +} +layer { + bottom: "enet5_0" + top: "enet5_1_branch2a" + name: "enet5_1_branch2a" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 4 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet5_1_branch2a" + top: "enet5_1_branch2a" + name: "relu5_1_branch2a" + type: "ReLU" +} +layer { + bottom: "enet5_1_branch2a" + top: "enet5_1_branch2b" + name: "enet5_1_branch2b" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 4 + pad_w: 1 + pad_h: 1 + stride_w: 1 + stride_h: 1 + kernel_w: 3 + kernel_h: 3 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet5_1_branch2b" + top: "enet5_1_branch2b" + name: "relu5_1_branch2b" + type: "ReLU" +} +layer { + bottom: "enet5_1_branch2b" + top: "enet5_1_branch2c" + name: "enet5_1_branch2c" + type: "Convolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 16 + pad_w: 0 + pad_h: 0 + stride_w: 1 + stride_h: 1 + kernel_w: 1 + kernel_h: 1 + dilation: 1 + bias_term: true + } +} +layer { + bottom: "enet5_0" + bottom: "enet5_1_branch2c" + top: "enet5_1" + name: "enet5_1" + type: "Eltwise" +} +layer { + bottom: "enet5_1" + top: "enet5_1" + name: "relu5_1" + type: "ReLU" +} +layer { + bottom: "enet5_1" + top: "enet6_0" + name: "enet6_0" + type: "Deconvolution" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + weight_filler: { + type: "msra" + } + bias_filler: { + type: "constant" + } + num_output: 6 + pad: 1 + stride: 2 + kernel_size: 4 + } +} +layer { + bottom: "enet6_0" + top: "probs" + name: "probs" + type: "Softmax" + softmax_param {engine: CAFFE} +} \ No newline at end of file diff --git a/modules/elo/docs/Baidu_ego_localization_Apollo-CHI.pdf b/modules/elo/docs/Baidu_ego_localization_Apollo-CHI.pdf new file mode 100755 index 00000000000..2691d37a566 Binary files /dev/null and b/modules/elo/docs/Baidu_ego_localization_Apollo-CHI.pdf differ diff --git a/modules/elo/docs/Baidu_ego_localization_Apollo-ENG.pdf b/modules/elo/docs/Baidu_ego_localization_Apollo-ENG.pdf new file mode 100755 index 00000000000..de75a88170d Binary files /dev/null and b/modules/elo/docs/Baidu_ego_localization_Apollo-ENG.pdf differ diff --git a/modules/elo/docs/pictures/flowchart.jpg b/modules/elo/docs/pictures/flowchart.jpg new file mode 100755 index 00000000000..8daa84b1ea1 Binary files /dev/null and b/modules/elo/docs/pictures/flowchart.jpg differ diff --git a/modules/elo/include/camera_localization.h b/modules/elo/include/camera_localization.h new file mode 100755 index 00000000000..6beaa187224 --- /dev/null +++ b/modules/elo/include/camera_localization.h @@ -0,0 +1,45 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef MODULES_LOCALIZATION_CAMERA_LOCALIZATION_CAMERA_H_ +#define MODULES_LOCALIZATION_CAMERA_LOCALIZATION_CAMERA_H_ +#include +#include +#include "opencv2/opencv.hpp" + +class SceneInterface; + +namespace apollo { +namespace localization { + +struct PosInfo { + double longitude; + double latitude; +}; + +class CameraLocalization { +public: + CameraLocalization(); + ~CameraLocalization(); + + bool init(const std::string& param_path); + bool get_ego_position(const cv::Mat& image, const PosInfo& init_pos, PosInfo& res_pos); +private: + SceneInterface* scene_interface_; +}; + +} // localization +} // apollo +#endif // MODULES_LOCALIZATION_Camera_LOCALIZATION_Camera_H_ diff --git a/modules/elo/lib/libcaffe.so b/modules/elo/lib/libcaffe.so new file mode 100755 index 00000000000..e1e59e3fc05 Binary files /dev/null and b/modules/elo/lib/libcaffe.so differ diff --git a/modules/elo/lib/libcaffe.so.1.0.0-rc3 b/modules/elo/lib/libcaffe.so.1.0.0-rc3 new file mode 100755 index 00000000000..e1e59e3fc05 Binary files /dev/null and b/modules/elo/lib/libcaffe.so.1.0.0-rc3 differ diff --git a/modules/elo/lib/libcamera_localization.so b/modules/elo/lib/libcamera_localization.so new file mode 100755 index 00000000000..6db8d5f3b01 Binary files /dev/null and b/modules/elo/lib/libcamera_localization.so differ diff --git a/modules/elo/localization_test.cc b/modules/elo/localization_test.cc new file mode 100755 index 00000000000..74965538ab4 --- /dev/null +++ b/modules/elo/localization_test.cc @@ -0,0 +1,50 @@ +#include +#include +#include "opencv2/opencv.hpp" +#include "camera_localization.h" + +int main(int argc, char* argv[]) { + if (argc != 4) { + std::cout << "Input Error!" << std::endl; + std::cout << "Usage: ./localization_test ../config/apollo_release.config ../data/testdata1/test_list.txt ../data/testdata1/image/" << std::endl; + std::cout << " or: ./localization_test ../config/apollo_release.config ../data/testdata2/test_list.txt ../data/testdata2/image/" << std::endl; + return -1; + } + + std::string config_file = argv[1]; + std::string test_file_name = argv[2]; + std::string img_dir = argv[3]; + apollo::localization::CameraLocalization loc; + if(!loc.init(config_file)) { + return -1; + } + std::ifstream test_file(test_file_name.c_str()); + std::string imname; + double l_x = 0; + double l_y = 0; + double h_x = 0; + double h_y = 0; + while (test_file >> imname >> l_x >> l_y >> h_x >> h_y) { + std::cout << imname << std::endl; + std::string impath = img_dir + imname; + cv::Mat image = cv::imread(impath); + if (image.empty()) { + std::cout << "[ERROR] Can not open image " << impath << std::endl; + continue; + } + apollo::localization::PosInfo input_pos; + apollo::localization::PosInfo output_pos; + input_pos.longitude = l_x; + input_pos.latitude = l_y; + if (!loc.get_ego_position(image, input_pos, output_pos)) { + continue; + } + std::cout << std::setiosflags(std::ios::fixed); + std::cout << "[INFO] GROUNDTRUTH (" << std::setprecision(8) + << h_x << ", " << std::setprecision(8) << h_y << ")\t" + << " LOCALIZATION (" << output_pos.longitude << ", " + << output_pos.latitude << ")" << std::endl; + std::cout << std::endl; + } + return 0; +} diff --git a/modules/hmi/README.md b/modules/hmi/README.md index 664542aaf7a..0bfe3014b43 100644 --- a/modules/hmi/README.md +++ b/modules/hmi/README.md @@ -31,5 +31,8 @@ python modules/hmi/web/hmi_main.py --help|--helpfull ### View HMI -Point your web browser to http://localhost:8887 (or your customized address) to +Point your web browser to http://127.0.0.1:8887 (or your customized address) to see the home page. + +If you enabled HTTPS, the url should be like https://apollo.hmi:8887, which +varies according to your config. diff --git a/modules/hmi/conf/config.pb.txt b/modules/hmi/conf/config.pb.txt index 4fca6c2fb86..79fe008dae8 100644 --- a/modules/hmi/conf/config.pb.txt +++ b/modules/hmi/conf/config.pb.txt @@ -1,3 +1,10 @@ +server { + https { + enabled: false + server_key: 'modules/common/data/ssl_keys/server.key' + server_cert: 'modules/common/data/ssl_keys/server.crt' + } +} modules { name: "GPS" display_name: "GPS Driver" @@ -16,6 +23,114 @@ modules { stderr_file: "data/log/gnss_driver.stderr" } } +modules { + name: "velodyne" + display_name: "Velodyne" + supported_commands { + name: "start" + command: "scripts/velodyne.sh" + command: "start" + stdout_file: "data/log/velodyne.stdout" + stderr_file: "data/log/velodyne.stderr" + } + supported_commands { + name: "stop" + command: "scripts/velodyne.sh" + command: "stop" + stdout_file: "data/log/velodyne.stdout" + stderr_file: "data/log/velodyne.stderr" + } +} +modules { + name: "localization" + display_name: "Localization" + supported_commands { + name: "start" + command: "scripts/localization.sh" + command: "start" + stdout_file: "data/log/localization.stdout" + stderr_file: "data/log/localization.stderr" + } + supported_commands { + name: "stop" + command: "scripts/localization.sh" + command: "stop" + stdout_file: "data/log/localization.stdout" + stderr_file: "data/log/localization.stderr" + } +} +modules { + name: "perception" + display_name: "Perception" + supported_commands { + name: "start" + command: "scripts/perception.sh" + command: "start" + stdout_file: "data/log/perception.stdout" + stderr_file: "data/log/perception.stderr" + } + supported_commands { + name: "stop" + command: "scripts/perception.sh" + command: "stop" + stdout_file: "data/log/perception.stdout" + stderr_file: "data/log/perception.stderr" + } +} +modules { + name: "prediction" + display_name: "Prediction" + supported_commands { + name: "start" + command: "scripts/prediction.sh" + command: "start" + stdout_file: "data/log/prediction.stdout" + stderr_file: "data/log/prediction.stderr" + } + supported_commands { + name: "stop" + command: "scripts/prediction.sh" + command: "stop" + stdout_file: "data/log/prediction.stdout" + stderr_file: "data/log/prediction.stderr" + } +} +modules { + name: "planning" + display_name: "Planning" + supported_commands { + name: "start" + command: "scripts/planning.sh" + command: "start" + stdout_file: "data/log/planning.stdout" + stderr_file: "data/log/planning.stderr" + } + supported_commands { + name: "stop" + command: "scripts/planning.sh" + command: "stop" + stdout_file: "data/log/planning.stdout" + stderr_file: "data/log/planning.stderr" + } +} +modules { + name: "routing" + display_name: "Routing" + supported_commands { + name: "start" + command: "scripts/routing.sh" + command: "start" + stdout_file: "data/log/routing.stdout" + stderr_file: "data/log/routing.stderr" + } + supported_commands { + name: "stop" + command: "scripts/routing.sh" + command: "stop" + stdout_file: "data/log/routing.stdout" + stderr_file: "data/log/routing.stderr" + } +} modules { name: "control" display_name: "Control" @@ -25,8 +140,6 @@ modules { command: "start" stdout_file: "data/log/control.stdout" stderr_file: "data/log/control.stderr" - log_files: "data/log/control.INFO" - log_files: "data/log/control.ERROR" } supported_commands { name: "stop" @@ -45,8 +158,6 @@ modules { command: "start" stdout_file: "data/log/canbus.stdout" stderr_file: "data/log/canbus.stderr" - log_files: "data/log/canbus.INFO" - log_files: "data/log/canbus.ERROR" } supported_commands { name: "stop" @@ -56,26 +167,6 @@ modules { stderr_file: "data/log/canbus.stderr" } } -modules { - name: "localization" - display_name: "Localization" - supported_commands { - name: "start" - command: "scripts/localization.sh" - command: "start" - stdout_file: "data/log/localization.stdout" - stderr_file: "data/log/localization.stderr" - log_files: "data/log/localization.INFO" - log_files: "data/log/localization.ERROR" - } - supported_commands { - name: "stop" - command: "scripts/localization.sh" - command: "stop" - stdout_file: "data/log/localization.stdout" - stderr_file: "data/log/localization.stderr" - } -} modules { name: "dreamview" display_name: "Dreamview" @@ -85,8 +176,6 @@ modules { command: "start" stdout_file: "data/log/dreamview.stdout" stderr_file: "data/log/dreamview.stderr" - log_files: "data/log/dreamview.INFO" - log_files: "data/log/dreamview.ERROR" } supported_commands { name: "stop" @@ -97,21 +186,21 @@ modules { } } modules { - name: "apollo_record" - display_name: "Apollo Data Record" + name: "record_bag" + display_name: "Record Bag" supported_commands { name: "start" - command: "scripts/apollo_record.sh" + command: "scripts/record_bag.sh" command: "start" - stdout_file: "data/log/apollo_record.stdout" - stderr_file: "data/log/apollo_record.stderr" + stdout_file: "data/log/record_bag.stdout" + stderr_file: "data/log/record_bag.stderr" } supported_commands { name: "stop" - command: "scripts/apollo_record.sh" + command: "scripts/record_bag.sh" command: "stop" - stdout_file: "data/log/apollo_record.stdout" - stderr_file: "data/log/apollo_record.stderr" + stdout_file: "data/log/record_bag.stdout" + stderr_file: "data/log/record_bag.stderr" } } tools { @@ -156,3 +245,14 @@ hardware { command: "can" } } +available_maps { + name: "Demo" + map_dir: "modules/map/data/demo" +} +available_maps { + name: "Sunnyvale Loop" + map_dir: "modules/map/data/sunnyvale_loop" +} +available_vehicles { + name: "Lincoln MKZ" +} diff --git a/modules/hmi/conf/ros_bridge_adapter.pb.txt b/modules/hmi/conf/ros_bridge_adapter.pb.txt new file mode 100644 index 00000000000..a91a7f58d28 --- /dev/null +++ b/modules/hmi/conf/ros_bridge_adapter.pb.txt @@ -0,0 +1,15 @@ +config { + type: CHASSIS + mode: RECEIVE_ONLY + message_history_limit: 1 +} +config { + type: HMI_COMMAND + mode: RECEIVE_ONLY + message_history_limit: 1 +} +config { + type: PAD + mode: PUBLISH_ONLY +} +is_ros: true diff --git a/modules/hmi/proto/BUILD b/modules/hmi/proto/BUILD index 8c75177d95e..8a7c05dd36c 100644 --- a/modules/hmi/proto/BUILD +++ b/modules/hmi/proto/BUILD @@ -1,31 +1,35 @@ package(default_visibility = ["//visibility:public"]) -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile") +cc_proto_library( + name = "config_proto", + deps = [":config_proto_lib"], +) -py_proto_compile( - name = "config_proto_pylib", - protos = ["config.proto"], +proto_library( + name = "config_proto_lib", + srcs = ["config.proto"], ) cc_proto_library( name = "runtime_status_proto", - protos = ["runtime_status.proto"], + deps = [":runtime_status_proto_lib"], ) -py_proto_compile( - name = "runtime_status_proto_pylib", - protos = ["runtime_status.proto"], +proto_library( + name = "runtime_status_proto_lib", + srcs = ["runtime_status.proto"], ) cc_proto_library( - name = "ros_node_proto", - protos = ["ros_node.proto"], - with_grpc = True, + name = "hmi_message_proto", + deps = [":hmi_message_proto_lib"], ) -py_proto_compile( - name = "ros_node_proto_pylib", - protos = ["ros_node.proto"], - with_grpc = True, +proto_library( + name = "hmi_message_proto_lib", + srcs = ["hmi_message.proto"], + deps = [ + "//modules/canbus/proto:canbus_proto_lib", + "//modules/common/proto:header_proto_lib", + ], ) diff --git a/modules/hmi/proto/config.proto b/modules/hmi/proto/config.proto index b1b1c039e67..1c102dd494f 100644 --- a/modules/hmi/proto/config.proto +++ b/modules/hmi/proto/config.proto @@ -11,10 +11,8 @@ message Command { repeated string command = 2; // Log file paths. - // Note that only files under /apollo/data can be viewed from HMI. - optional string stdout_file = 3 [default = '/dev/null']; - optional string stderr_file = 4 [default = '/dev/null']; - repeated string log_files = 5; + optional string stdout_file = 3 [default = "/dev/null"]; + optional string stderr_file = 4 [default = "/dev/null"]; } message Component { @@ -24,7 +22,61 @@ message Component { } message Config { - repeated Component modules = 1; - repeated Component hardware = 2; - repeated Command tools = 3; + message Server { + optional string binding_ip = 1 [default = "0.0.0.0"]; + optional string domain = 2 [default = "apollo.hmi"]; + optional int32 port = 3 [default = 8887]; + optional string log_file = 4 [default = "data/log/hmi.log"]; + + // HTTPS configs. + message Https { + optional bool enabled = 1; + optional string server_key = 2; + optional string server_cert = 3; + optional bool client_cert_required = 4; + } + optional Https https = 5; + } + optional Server server = 1; + + repeated Component modules = 2; + repeated Component hardware = 3; + repeated Command tools = 4; + optional string global_flagfile = 5 + [default = "modules/common/data/global_flagfile.txt"]; + + // HDMaps. + message HDMap { + optional string name = 1; + optional string map_dir = 2; + } + repeated HDMap available_maps = 6; + + // Vehicle config. + message VehicleConfig { + optional string name = 1; + optional string vehicle_param_pb_path = 2 + [default = "modules/common/data/mkz_config.pb.txt"]; + optional string calibration_table_path = 3 + [default = "modules/control/conf/lincoln.pb.txt"]; + optional string velodyne_params_path = 4; + optional string velodyne_launch_path = 5; + optional string gnss_driver_path = 6; + optional string gnss_conf_path = 7; + } + optional string vehicle_param_pb_target_path = 7 + [default = "modules/common/data/mkz_config.pb.txt"]; + optional string calibration_table_target_path = 8 + [default = "modules/control/conf/lincoln.pb.txt"]; + // Paths relative to ROS root directory. + optional string velodyne_params_target_path = 9 + [default = "share/velodyne_pointcloud/params"]; + optional string velodyne_launch_target_path = 10 + [default = "share/velodyne/launch/start_velodyne.launch"]; + optional string gnss_driver_target_path = 11 + [default = "share/gnss_driver/launch/gnss_driver.launch"]; + optional string gnss_conf_target_path = 12 + [default = "share/gnss_driver/conf/gnss_conf_mkz.txt"]; + + repeated VehicleConfig available_vehicles = 13; } diff --git a/modules/hmi/proto/hmi_message.proto b/modules/hmi/proto/hmi_message.proto new file mode 100644 index 00000000000..5d6d5c33606 --- /dev/null +++ b/modules/hmi/proto/hmi_message.proto @@ -0,0 +1,25 @@ +syntax = "proto2"; + +package apollo.hmi; + +import "modules/canbus/proto/chassis.proto"; +import "modules/common/proto/header.proto"; + +// Message between HMI frontend and HMI server. +message SocketIORequest { + optional string api_name = 1; + optional string command_name = 2; + repeated string args = 3; +} + +// Message between HMI server and HMI bridge. +message HMICommand { + optional apollo.common.Header header = 1; + + // Sub commands. + message ChangeDrivingMode { + optional apollo.canbus.Chassis.DrivingMode target_mode = 1; + optional bool reset_first = 2; + } + optional ChangeDrivingMode change_driving_mode = 2; +} diff --git a/modules/hmi/proto/ros_node.proto b/modules/hmi/proto/ros_node.proto deleted file mode 100644 index f20a614f6cf..00000000000 --- a/modules/hmi/proto/ros_node.proto +++ /dev/null @@ -1,26 +0,0 @@ -syntax = "proto2"; - -package apollo.hmi; - -service HMIRosNode { - rpc ChangeDrivingMode(ChangeDrivingModeRequest) returns (ChangeDrivingModeResponse) {} -} - -message ChangeDrivingModeRequest { - enum Action { - RESET_TO_MANUAL = 1; - START_TO_AUTO = 2; - } - - optional Action action = 1; -} - -message ChangeDrivingModeResponse { - enum Result { - UNKNOWN = 1; - SUCCESS = 2; - FAIL = 3; - } - - optional Result result = 1; -} diff --git a/modules/hmi/proto/runtime_status.proto b/modules/hmi/proto/runtime_status.proto index 7c77fe3febd..83aa9468a14 100644 --- a/modules/hmi/proto/runtime_status.proto +++ b/modules/hmi/proto/runtime_status.proto @@ -55,8 +55,14 @@ message ToolStatus { optional bool planning_ready = 4; } +message ConfigStatus { + optional string current_map = 1; + optional string current_vehicle = 2; +} + message RuntimeStatus { repeated ModuleStatus modules = 1; repeated HardwareStatus hardware = 2; optional ToolStatus tools = 3; + optional ConfigStatus config = 4; } diff --git a/modules/hmi/ros_node/BUILD b/modules/hmi/ros_bridge/BUILD similarity index 68% rename from modules/hmi/ros_node/BUILD rename to modules/hmi/ros_bridge/BUILD index 1c37ca20fae..d78ce3ed2c1 100644 --- a/modules/hmi/ros_node/BUILD +++ b/modules/hmi/ros_bridge/BUILD @@ -3,10 +3,9 @@ load("//tools:cpplint.bzl", "cpplint") package(default_visibility = ["//visibility:public"]) cc_binary( - name = "ros_node_service", + name = "ros_bridge", srcs = [ - "ros_node_service.cc", - "ros_node_service.h", + "ros_bridge.cc", ], deps = [ "//external:gflags", @@ -14,8 +13,6 @@ cc_binary( "//modules/common/adapters:adapter_manager", "//modules/control/common", "//modules/control/proto:control_proto", - "//modules/hmi/proto:ros_node_proto", - "@com_github_google_protobuf//:protobuf", "@ros//:ros_common", ], ) diff --git a/modules/hmi/ros_bridge/ros_bridge.cc b/modules/hmi/ros_bridge/ros_bridge.cc new file mode 100644 index 00000000000..58ae713620b --- /dev/null +++ b/modules/hmi/ros_bridge/ros_bridge.cc @@ -0,0 +1,133 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include +#include + +#include "gflags/gflags.h" +#include "modules/canbus/proto/chassis.pb.h" +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/log.h" +#include "modules/common/util/file.h" +#include "modules/control/common/control_gflags.h" +#include "modules/control/proto/pad_msg.pb.h" + + +DEFINE_string(adapter_config_file, + "modules/hmi/conf/ros_bridge_adapter.pb.txt", + "Adapter config file for ros bridge."); + +DEFINE_int32(spin_rate, 10, "ROS spin rate"); + +namespace apollo { +namespace hmi { +namespace { + +using apollo::common::adapter::AdapterManager; +using apollo::common::adapter::AdapterManagerConfig; +using apollo::control::DrivingAction; +using apollo::canbus::Chassis; + +constexpr char kHMIRosBridgeName[] = "hmi_ros_bridge"; + +class RosBridge { + public: + void Init() { + // Init AdapterManager. + AdapterManagerConfig adapter_conf; + CHECK(apollo::common::util::GetProtoFromASCIIFile(FLAGS_adapter_config_file, + &adapter_conf)); + AdapterManager::Init(adapter_conf); + AdapterManager::AddHMICommandCallback(OnHMICommand); + } + + private: + static void OnHMICommand(const HMICommand& command) { + if (command.has_change_driving_mode()) { + const auto& cmd = command.change_driving_mode(); + if (cmd.reset_first()) { + ChangeDrivingModeTo(Chassis::COMPLETE_MANUAL); + } + ChangeDrivingModeTo(cmd.target_mode()); + } + } + + static bool ChangeDrivingModeTo(const Chassis::DrivingMode target_mode) { + AINFO << "RosBridge is changing driving mode to " << target_mode; + auto driving_action = DrivingAction::RESET; + switch (target_mode) { + case Chassis::COMPLETE_MANUAL: + // Default driving action: RESET. + break; + case Chassis::COMPLETE_AUTO_DRIVE: + driving_action = DrivingAction::START; + break; + default: + AFATAL << "Unknown action to change driving mode to " << target_mode; + } + + constexpr int kMaxTries = 3; + constexpr auto kTryInterval = std::chrono::milliseconds(500); + auto* chassis = AdapterManager::GetChassis(); + for (int i = 0; i < kMaxTries; ++i) { + // Send driving action periodically until entering target driving mode. + SendPadMessage(driving_action); + std::this_thread::sleep_for(kTryInterval); + + chassis->Observe(); + if (chassis->Empty()) { + AERROR << "No Chassis message received!"; + } else if (chassis->GetLatestObserved().driving_mode() == target_mode) { + return true; + } + } + AERROR << "Failed to change driving mode to " << target_mode; + return false; + } + + static void SendPadMessage(const DrivingAction action) { + control::PadMessage pad; + pad.set_action(action); + AdapterManager::FillPadHeader(kHMIRosBridgeName, &pad); + AdapterManager::PublishPad(pad); + AINFO << "Sent PadMessage"; + } + + private: + DECLARE_SINGLETON(RosBridge); +}; + +RosBridge::RosBridge() {} + +} // namespace +} // namespace hmi +} // namespace apollo + +int main(int argc, char **argv) { + google::InitGoogleLogging(argv[0]); + google::ParseCommandLineFlags(&argc, &argv, true); + + ros::init(argc, argv, apollo::hmi::kHMIRosBridgeName); + apollo::hmi::RosBridge::instance()->Init(); + + ros::Rate rate(FLAGS_spin_rate); + while (ros::ok()) { + ros::spinOnce(); + rate.sleep(); + } + return 0; +} diff --git a/modules/hmi/ros_node/ros_node_service.cc b/modules/hmi/ros_node/ros_node_service.cc deleted file mode 100644 index fc8a4250b62..00000000000 --- a/modules/hmi/ros_node/ros_node_service.cc +++ /dev/null @@ -1,167 +0,0 @@ -/****************************************************************************** - * Copyright 2017 The Apollo 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. - *****************************************************************************/ - -#include "modules/hmi/ros_node/ros_node_service.h" - -#include -#include -#include - -#include "gflags/gflags.h" -#include "grpc++/security/server_credentials.h" -#include "grpc++/server.h" -#include "grpc++/server_builder.h" - -#include "modules/canbus/proto/chassis.pb.h" -#include "modules/control/proto/pad_msg.pb.h" - -#include "modules/common/adapters/adapter_manager.h" -#include "modules/common/log.h" -#include "modules/control/common/control_gflags.h" - -DEFINE_string(hmi_ros_node_service_address, "127.0.0.1:8897", - "HMI Ros node service address."); - -using apollo::common::adapter::AdapterConfig; -using apollo::common::adapter::AdapterManager; -using apollo::common::adapter::AdapterManagerConfig; -using apollo::control::DrivingAction; -using apollo::canbus::Chassis; - -namespace apollo { -namespace hmi { -namespace { - -static constexpr char kHMIRosNodeName[] = "hmi_ros_node_service"; - -void SendPadMessage(DrivingAction action) { - control::PadMessage pb; - pb.set_action(action); - AINFO << "Sending PadMessage:\n" << pb.DebugString(); - AdapterManager::FillPadHeader(kHMIRosNodeName, pb.mutable_header()); - AdapterManager::PublishPad(pb); -} - -void RunGRPCServer() { - // Start GRPC service. - HMIRosNodeImpl service; - grpc::ServerBuilder builder; - builder.AddListeningPort(FLAGS_hmi_ros_node_service_address, - grpc::InsecureServerCredentials()); - builder.RegisterService(&service); - std::unique_ptr server(builder.BuildAndStart()); - AINFO << "Server listening on " << FLAGS_hmi_ros_node_service_address; - server->Wait(); -} - -} // namespace - -// Init static members. -std::mutex HMIRosNodeImpl::current_driving_mode_mutex_; -Chassis::DrivingMode HMIRosNodeImpl::current_driving_mode_ = - Chassis::COMPLETE_MANUAL; - -void HMIRosNodeImpl::Init() { - // Setup AdapterManager. - AdapterManagerConfig config; - config.set_is_ros(true); - { - auto *sub_config = config.add_config(); - sub_config->set_mode(AdapterConfig::PUBLISH_ONLY); - sub_config->set_type(AdapterConfig::PAD); - } - - { - auto *sub_config = config.add_config(); - sub_config->set_mode(AdapterConfig::RECEIVE_ONLY); - sub_config->set_type(AdapterConfig::CHASSIS); - } - AdapterManager::Init(config); - AdapterManager::SetChassisCallback(MonitorDrivingMode); -} - -grpc::Status HMIRosNodeImpl::ChangeDrivingMode( - grpc::ServerContext *context, const ChangeDrivingModeRequest *request, - ChangeDrivingModeResponse *response) { - AINFO << "received ChangeDrivingModeRequest: " << request->DebugString(); - auto driving_action_to_send = DrivingAction::RESET; - auto driving_mode_to_wait = Chassis::COMPLETE_MANUAL; - switch (request->action()) { - case ChangeDrivingModeRequest::RESET_TO_MANUAL: - // Default action and mode. - break; - case ChangeDrivingModeRequest::START_TO_AUTO: - driving_action_to_send = DrivingAction::START; - driving_mode_to_wait = Chassis::COMPLETE_AUTO_DRIVE; - break; - default: - response->set_result(ChangeDrivingModeResponse::UNKNOWN); - return grpc::Status(grpc::StatusCode::UNKNOWN, - "Unknown ChangeDrivingMode action."); - } - - constexpr int kMaxTries = 5; - constexpr auto kTryInterval = std::chrono::milliseconds(500); - auto result = ChangeDrivingModeResponse::FAIL; - for (int i = 0; i < kMaxTries; ++i) { - // Send driving action periodically until entering target driving mode. - SendPadMessage(driving_action_to_send); - std::this_thread::sleep_for(kTryInterval); - - std::lock_guard guard(current_driving_mode_mutex_); - if (current_driving_mode_ == driving_mode_to_wait) { - result = ChangeDrivingModeResponse::SUCCESS; - break; - } - } - response->set_result(result); - AINFO << "ChangeDrivingModeResponse: " << response->DebugString(); - if (result == ChangeDrivingModeResponse::FAIL) { - AERROR << "Failed to change driving mode to " << request->DebugString(); - } - return grpc::Status::OK; -} - -void HMIRosNodeImpl::MonitorDrivingMode(const canbus::Chassis &status) { - auto driving_mode = status.driving_mode(); - std::lock_guard guard(current_driving_mode_mutex_); - // Update current_driving_mode_ when it is changed. - if (driving_mode != current_driving_mode_) { - AINFO << "Found Chassis DrivingMode changed: " - << Chassis_DrivingMode_Name(current_driving_mode_) << " -> " - << Chassis_DrivingMode_Name(driving_mode); - current_driving_mode_ = driving_mode; - } -} - -} // namespace hmi -} // namespace apollo - -int main(int argc, char **argv) { - google::InitGoogleLogging(argv[0]); - google::ParseCommandLineFlags(&argc, &argv, true); - - // Setup ros node. - ros::init(argc, argv, ::apollo::hmi::kHMIRosNodeName); - ::apollo::hmi::HMIRosNodeImpl::Init(); - - // Run GRPC server in background thread. - std::thread grpc_server_thread(::apollo::hmi::RunGRPCServer); - - ros::spin(); - grpc_server_thread.join(); - return 0; -} diff --git a/modules/hmi/ros_node/ros_node_service.h b/modules/hmi/ros_node/ros_node_service.h deleted file mode 100644 index c496c79c569..00000000000 --- a/modules/hmi/ros_node/ros_node_service.h +++ /dev/null @@ -1,71 +0,0 @@ -/****************************************************************************** - * Copyright 2017 The Apollo 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. - *****************************************************************************/ - -/** - * @file ros_node_service.h - * @brief the class of HMIRosNodeImpl - */ - -#ifndef MODULES_HMI_ROS_NODE_ROS_NODE_SERVICE_H_ -#define MODULES_HMI_ROS_NODE_ROS_NODE_SERVICE_H_ - -#include - -#include "modules/canbus/proto/chassis.pb.h" -#include "modules/hmi/proto/ros_node.grpc.pb.h" - -/** - * @namespace apollo::hmi - * @brief apollo::hmi - */ -namespace apollo { -namespace hmi { - -/** - * @class HMIRosNodeImpl - * - * @brief Implementation of HMIRosNode service. - */ -class HMIRosNodeImpl final : public HMIRosNode::Service { - public: - /* - * @brief Init the ROS node. - */ - static void Init(); - - /* - * @brief Implementation of ChangeDrivingMode RPC. - * @param context a pointer to the grpc context - * @param point a pointer to an instance of ChangeDrivingModeRequest - * @param feature a pointer to an instance of ChangeDrivingModeResponse - * @return the grpc status - */ - grpc::Status ChangeDrivingMode(grpc::ServerContext *context, - const ChangeDrivingModeRequest *point, - ChangeDrivingModeResponse *feature) override; - - private: - // Monitor the driving mode by listening to Chassis message. - static void MonitorDrivingMode(const apollo::canbus::Chassis &status); - - static std::mutex current_driving_mode_mutex_; - static apollo::canbus::Chassis::DrivingMode current_driving_mode_; -}; - -} // namespace hmi -} // namespace apollo - -#endif // MODULES_HMI_ROS_NODE_ROS_NODE_SERVICE_H_ diff --git a/modules/hmi/utils/BUILD b/modules/hmi/utils/BUILD index 8cea8a1c8cc..d4d095b6219 100644 --- a/modules/hmi/utils/BUILD +++ b/modules/hmi/utils/BUILD @@ -9,6 +9,9 @@ cc_library( deps = [ ":restful_client", "//external:gflags", + "//modules/common/util", + "//modules/common/util:string_util", + "//modules/hmi/proto:config_proto", "//modules/hmi/proto:runtime_status_proto", ], ) @@ -19,7 +22,7 @@ cc_library( hdrs = ["restful_client.h"], deps = [ "//modules/common:log", - "@com_github_google_protobuf//:protobuf", + "@com_google_protobuf//:protobuf", "@curlpp//:curlpp", "@glog//:glog", ], diff --git a/modules/hmi/utils/hmi_status_helper.cc b/modules/hmi/utils/hmi_status_helper.cc index 52fefb8625b..189153a6297 100644 --- a/modules/hmi/utils/hmi_status_helper.cc +++ b/modules/hmi/utils/hmi_status_helper.cc @@ -17,39 +17,54 @@ #include "modules/hmi/utils/hmi_status_helper.h" #include "gflags/gflags.h" +#include "modules/common/util/file.h" +#include "modules/common/util/string_util.h" +#include "modules/hmi/proto/config.pb.h" #include "modules/hmi/utils/restful_client.h" -DEFINE_string(hmi_runtime_status_api, - "http://127.0.0.1:8887/runtime_status_api", - "Address of HMI runtime status restful api."); +DEFINE_string(hmi_config_file, "modules/hmi/conf/config.pb.txt", + "HMI config file, which should be text-formatted config proto."); namespace apollo { namespace hmi { namespace { -template -void VectorToRepeatedPtrField(const std::vector &src, - google::protobuf::RepeatedPtrField *dst) { - *dst = google::protobuf::RepeatedPtrField(src.begin(), src.end()); +RestfulClient* InitRestfulClient() { + Config conf_pb; + if (!apollo::common::util::GetProtoFromASCIIFile(FLAGS_hmi_config_file, + &conf_pb)) { + return nullptr; + } + const auto& server = conf_pb.server(); + const auto url = apollo::common::util::StrCat( + server.https().enabled() ? "https://" : "http://", + "127.0.0.1:", server.port(), "/runtime_status"); + return new RestfulClient(url); +} + +void ReportRuntimeStatus(const RuntimeStatus& runtime_status) { + static auto* client = InitRestfulClient(); + if (client) { + client->Post(runtime_status); + } else { + AERROR << "Cannot connect to HMI server."; + } } } // namespace void HMIStatusHelper::ReportHardwareStatus( const std::vector &hardware_status) { - auto runtime_status = RuntimeStatus(); - VectorToRepeatedPtrField(hardware_status, runtime_status.mutable_hardware()); - - RestfulClient client(FLAGS_hmi_runtime_status_api); - client.Post(runtime_status); + RuntimeStatus runtime_status; + *runtime_status.mutable_hardware() = {hardware_status.begin(), + hardware_status.end()}; + ReportRuntimeStatus(runtime_status); } void HMIStatusHelper::ReportModuleStatus(const ModuleStatus &module_status) { - auto runtime_status = RuntimeStatus(); + RuntimeStatus runtime_status; *runtime_status.add_modules() = module_status; - - RestfulClient client(FLAGS_hmi_runtime_status_api); - client.Post(runtime_status); + ReportRuntimeStatus(runtime_status); } } // namespace hmi diff --git a/modules/hmi/utils/hmi_status_helper.py b/modules/hmi/utils/hmi_status_helper.py index c2d16d0c95d..9ccea5e714e 100644 --- a/modules/hmi/utils/hmi_status_helper.py +++ b/modules/hmi/utils/hmi_status_helper.py @@ -22,11 +22,10 @@ import google.protobuf.json_format as json_format import requests -# Make sure /bazel-genfiles is in your PYTHONPATH. -import modules.hmi.proto.runtime_status_pb2 as runtime_status_pb2 +from modules.hmi.proto.runtime_status_pb2 import RuntimeStatus gflags.DEFINE_string('hmi_runtime_status_api', - 'http://127.0.0.1:8887/runtime_status_api', + 'http://127.0.0.1:8887/runtime_status', 'Address of HMI runtime status restful api.') @@ -36,25 +35,25 @@ class HMIStatusHelper(object): @staticmethod def report_hardware_status(hardware_status_list): """Report hardware status to HMI.""" - status_pb = runtime_status_pb2.RuntimeStatus() + status_pb = RuntimeStatus() for hardware_status in hardware_status_list: status_pb.hardware.add().MergeFrom(hardware_status) json_dict = json_format.MessageToDict(status_pb, False, True) try: - req = requests.post( - gflags.FLAGS.hmi_runtime_status_api, json=json_dict) + req = requests.post(gflags.FLAGS.hmi_runtime_status_api, + json=json_dict) glog.info('Put HardwareStatus: {}'.format(req.json())) - except Exception as e: - glog.error('Failed to put HardwareStatus: {}'.format(e)) + except requests.exceptions.RequestException as exception: + glog.error('Failed to put HardwareStatus: {}'.format(exception)) @staticmethod def report_status(status): """Report status to HMI.""" json_dict = json_format.MessageToDict(status, False, True) try: - req = requests.post( - gflags.FLAGS.hmi_runtime_status_api, json=json_dict) - glog.info('Put RuntimeStatus: {}'.format(req.json())) - except Exception as e: - glog.error('Failed to put RuntimeStatus: {}'.format(e)) + req = requests.post(gflags.FLAGS.hmi_runtime_status_api, + json=json_dict) + glog.info('Put RuntimeStatus result: {}'.format(req.status_code)) + except requests.exceptions.RequestException as exception: + glog.error('Failed to put RuntimeStatus: {}'.format(exception)) diff --git a/modules/hmi/utils/restful_client.cc b/modules/hmi/utils/restful_client.cc index 0989685b290..302341c7e33 100644 --- a/modules/hmi/utils/restful_client.cc +++ b/modules/hmi/utils/restful_client.cc @@ -33,7 +33,7 @@ RestfulClient::STATUS RestfulClient::Post( std::string json; const auto status = google::protobuf::util::MessageToJsonString(proto, &json); CHECK(status.ok()) << status.error_message(); - AINFO << "Put proto message to " << url_ << ":\n" << proto.DebugString(); + ADEBUG << "Put proto message to " << url_ << ":\n" << proto.DebugString(); try { curlpp::Cleanup cleaner; @@ -44,6 +44,8 @@ RestfulClient::STATUS RestfulClient::Post( new curlpp::options::HttpHeader({"Content-Type: application/json"})); request.setOpt(new curlpp::options::PostFields(json)); request.setOpt(new curlpp::options::PostFieldSize(json.length())); + request.setOpt(new curlpp::options::WriteFile(dev_null_)); + request.perform(); } catch (curlpp::LogicError &e) { AERROR << "LogicError: " << e.what(); diff --git a/modules/hmi/utils/restful_client.h b/modules/hmi/utils/restful_client.h index 06438919838..158f530709c 100644 --- a/modules/hmi/utils/restful_client.h +++ b/modules/hmi/utils/restful_client.h @@ -22,8 +22,8 @@ #ifndef MODULES_HMI_UTILS_RESTFUL_CLIENT_H_ #define MODULES_HMI_UTILS_RESTFUL_CLIENT_H_ -#include #include +#include "google/protobuf/message.h" /** * @namespace apollo::hmi @@ -52,7 +52,13 @@ class RestfulClient { * It init client with an APT url * @param url the API url string. */ - explicit RestfulClient(const std::string &url) : url_(url) {} + explicit RestfulClient(const std::string &url) : url_(url) { + dev_null_ = fopen("/dev/null", "w+"); + } + + ~RestfulClient() { + fclose(dev_null_); + } /* * @brief post a proto to target API. Note that the data is transferred as @@ -63,6 +69,7 @@ class RestfulClient { STATUS Post(const google::protobuf::Message &proto); private: + FILE *dev_null_; const std::string url_; }; diff --git a/modules/hmi/utils/restful_client_test.cc b/modules/hmi/utils/restful_client_test.cc index 3ae44524e8e..8b4f6f20010 100644 --- a/modules/hmi/utils/restful_client_test.cc +++ b/modules/hmi/utils/restful_client_test.cc @@ -31,7 +31,7 @@ namespace hmi { TEST(RestfulClientTest, Post) { ModuleStatus module_status; module_status.set_name("control"); - module_status.set_status(::apollo::hmi::ModuleStatus::STARTED); + module_status.set_status(hmi::ModuleStatus::STARTED); RestfulClient client(FLAGS_hmi_runtime_status_api); EXPECT_TRUE(client.Post(module_status) == RestfulClient::RUNTIME_ERROR); diff --git a/modules/hmi/web/config.py b/modules/hmi/web/config.py index b745f99da58..7a7a2b785ab 100644 --- a/modules/hmi/web/config.py +++ b/modules/hmi/web/config.py @@ -16,68 +16,106 @@ # limitations under the License. ############################################################################### """Global config access.""" - +import logging import os -import google.protobuf.text_format as text_format import gflags -import glog +import google.protobuf.text_format as text_format import modules.hmi.proto.config_pb2 as config_pb2 +gflags.DEFINE_string( + 'conf', 'modules/hmi/conf/config.pb.txt', + 'HMI config file, which should be text-formatted config proto.') + class Config(object): """Global config.""" pb_singleton = None - hardware_dict = None - module_dict = None - tool_dict = None - apollo_root = os.path.join(os.path.dirname(__file__), '../../..') + apollo_root = os.path.abspath( + os.path.join(os.path.dirname(__file__), '../../..')) + ros_root = os.path.abspath(os.path.join( + os.environ.get('ROS_ROOT', '/apollo/ros/share/ros'), '../..')) + + log = logging.getLogger('HMI') + record_replay_required_modules = [ + 'GPS', 'control', 'canbus', 'localization', 'dreamview', 'record_bag'] @classmethod def get_pb(cls): """Get a pb instance from the config.""" if cls.pb_singleton is None: - # Init the config by reading conf file. - with open(gflags.FLAGS.conf, 'r') as conf_file: - cls.pb_singleton = text_format.Merge(conf_file.read(), - config_pb2.Config()) - glog.info('Get config: {}'.format(cls.pb_singleton)) + cls.__init_once(logging.DEBUG) return cls.pb_singleton + @classmethod + def __init_once(cls, log_level=logging.DEBUG): + """Init config once.""" + # Init the config by reading conf file. + with open(gflags.FLAGS.conf, 'r') as conf_file: + cls.pb_singleton = text_format.Merge(conf_file.read(), + config_pb2.Config()) + cls.log.info('Get config: %s', str(cls.pb_singleton)) + + # Init logger + file_handler = logging.handlers.TimedRotatingFileHandler( + cls.get_realpath(cls.pb_singleton.server.log_file), + when='H', interval=1, backupCount=0) + file_handler.setLevel(log_level) + file_handler.setFormatter(logging.Formatter( + '[%(name)s][%(levelname)s] %(asctime)s ' + '%(filename)s:%(lineno)s %(message)s')) + file_handler.suffix = "%Y%m%d%H%M.log" + cls.log.addHandler(file_handler) + cls.log.setLevel(log_level) + @classmethod def get_hardware(cls, hardware_name): """Get Hardware config by name.""" - if cls.hardware_dict is None: - # Init the hardware_dict once. - cls.hardware_dict = {hw.name: hw for hw in cls.get_pb().hardware} - return cls.hardware_dict.get(hardware_name) + return cls.__find_by_name(hardware_name, cls.get_pb().hardware) @classmethod def get_module(cls, module_name): """Get module config by name.""" - if cls.module_dict is None: - # Init the module_dict once. - cls.module_dict = {mod.name: mod for mod in cls.get_pb().modules} - return cls.module_dict.get(module_name) + return cls.__find_by_name(module_name, cls.get_pb().modules) @classmethod def get_tool(cls, tool_name): """Get module config by name.""" - if cls.tool_dict is None: - # Init the module_dict once. - cls.tool_dict = {tool.name: tool for tool in cls.get_pb().tools} - return cls.tool_dict.get(tool_name) + return cls.__find_by_name(tool_name, cls.get_pb().tools) @classmethod - def get_realpath(cls, path_str): + def get_map(cls, map_name): + """Get map config by name.""" + return cls.__find_by_name(map_name, cls.get_pb().available_maps) + + @classmethod + def get_vehicle(cls, vehicle_name): + """Get map config by name.""" + return cls.__find_by_name(vehicle_name, cls.get_pb().available_vehicles) + + @classmethod + def global_flagfile(cls): + """Get global flagfile path.""" + return cls.get_realpath(cls.get_pb().global_flagfile) + + @classmethod + def get_realpath(cls, path_str, from_ros_root=False): """ Get realpath from a path string in config. - Starting with '/' indicates an absolute path, otherwise it will be taken - as a relative path of the Apollo root. + 1. Starting with '/' indicates an absolute path. + 2. from_ros_root=True indicates a relative path against ROS root. + 3. Otherwise it will be taken as a relative path against Apollo root. """ if path_str.startswith('/'): return path_str - return os.path.abspath(os.path.join(cls.apollo_root, path_str)) + if from_ros_root: + return os.path.join(cls.ros_root, path_str) + return os.path.join(cls.apollo_root, path_str) + + @staticmethod + def __find_by_name(name, value_list): + """Find a value in list by name.""" + return next((value for value in value_list if value.name == name), None) diff --git a/modules/hmi/web/handlers.py b/modules/hmi/web/handlers.py index 2b68d06acb8..4f004ce191e 100644 --- a/modules/hmi/web/handlers.py +++ b/modules/hmi/web/handlers.py @@ -18,44 +18,51 @@ """HTTP request handlers.""" import datetime -import os +import httplib import flask -import flask_restful import flask_socketio -import config -import hardware_api -import module_api -import ros_service_api -import runtime_status_api -import tool_api +from config import Config +from runtime_status import RuntimeStatus +from socketio_api import SocketIOApi app = flask.Flask(__name__) app.secret_key = str(datetime.datetime.now()) -socketio = flask_socketio.SocketIO(app) +socketio = flask_socketio.SocketIO(app, async_mode='eventlet') # Web page handlers. @app.route('/') def index_page(): """Handler of index page.""" - return flask.render_template('index.tpl', conf_pb=config.Config.get_pb()) + conf = Config.get_pb() + protocol = 'https' if conf.server.https.enabled else 'http' + return flask.render_template('index.tpl', conf_pb=conf, protocol=protocol) @app.route('/module_card/') def module_card(module_name): """Handler of module card.""" return flask.render_template( - 'cards/module_detail.tpl', module=config.Config.get_module(module_name)) - - -# Restful API handlers. -api = flask_restful.Api(app) -api.add_resource(hardware_api.HardwareApi, - '/hardware_api/') -api.add_resource(module_api.ModuleApi, '/module_api/') -api.add_resource(ros_service_api.RosServiceApi, - '/ros_service_api/') -api.add_resource(runtime_status_api.RuntimeStatusApi, '/runtime_status_api') -api.add_resource(tool_api.ToolApi, '/tool_api/') + 'cards/module_detail.tpl', module=Config.get_module(module_name)) + + +@app.route('/runtime_status', methods=['GET', 'POST']) +def runtime_status(): + """ + Handler of runtime_status. + Return current runtime status on GET request. + Update runtime status on POST request which brings a RuntimeStatus json. + """ + if flask.request.method == 'GET': + return flask.jsonify(RuntimeStatus.status_json()) + else: + RuntimeStatus.update(flask.request.get_json()) + return ('OK', httplib.OK) + +# SocketIO handlers. +@socketio.on('socketio_api', namespace='/io_frontend') +def frontend_handler(socketio_request_json): + """Handler of SocketIO request for frontend.""" + SocketIOApi.execute(socketio_request_json) diff --git a/modules/hmi/web/hardware_api.py b/modules/hmi/web/hardware_api.py index 24c6f3973d7..9c9e89fa133 100644 --- a/modules/hmi/web/hardware_api.py +++ b/modules/hmi/web/hardware_api.py @@ -15,73 +15,46 @@ # See the License for the specific language governing permissions and # limitations under the License. ############################################################################### -"""Hardware restful Api.""" +"""Hardware API.""" -import httplib - -import flask -import flask_restful -import glog - -import config -import modules.hmi.proto.runtime_status_pb2 as runtime_status_pb2 -import runtime_status +from config import Config +from modules.hmi.proto.runtime_status_pb2 import HardwareStatus +from runtime_status import RuntimeStatus import system_cmd -class HardwareApi(flask_restful.Resource): - """Hardware in Apollo.""" - - def post(self, hardware_name): - """Query on hardware.""" - args = flask.request.form - if args.get('execute_command'): - return HardwareApi.execute_cmd(hardware_name, - args['execute_command']) - - msg = 'Unknown query: {}'.format(args) - glog.error(msg) - return msg, httplib.BAD_REQUEST +class HardwareApi(object): + """ + Hardware SocketIO API: + health_check [all | ] + """ @staticmethod - def execute_cmd(hardware_name, cmd_name): - """Execute hardware command.""" - # Run command on all hardware if the name is 'all'. - if hardware_name == 'all': - for hw_conf in config.Config.get_pb().hardware: - HardwareApi._run_command(hw_conf, cmd_name) - runtime_status.RuntimeStatus.broadcast_status_if_changed() - return 'OK', httplib.OK - - # Or else, run command on the specified hardware. - conf = config.Config.get_hardware(hardware_name) - if conf is None: - msg = 'Cannot find config for hardware {}'.format(hardware_name) - glog.error(msg) - return msg, httplib.BAD_REQUEST - result = HardwareApi._run_command(conf, cmd_name) - runtime_status.RuntimeStatus.broadcast_status_if_changed() - return result + def health_check(*args): + """SocketIO Api: health_check(hardware_name)""" + if len(args) != 1: + Config.log.critical('HardwareApi::health_check bad args') + return + hardware_name = args[0] + + def __single_check(hardware_name): + conf = Config.get_hardware(hardware_name) + if conf is None: + Config.log.critical('HardwareApi::health_check conf is None') + return + cmd = next((cmd for cmd in conf.supported_commands + if cmd.name == 'health_check'), None) + if cmd is None: + Config.log.critical('HardwareApi::health_check cmd is None') + return + + # Update status and run command. + RuntimeStatus.get_hardware(hardware_name).status = \ + HardwareStatus.CHECKING + system_cmd.async_run_command_pb(cmd) - @staticmethod - def _run_command(conf, cmd_name): - """Implementation of running command on hardware.""" - cmd = next((cmd for cmd in conf.supported_commands - if cmd.name == cmd_name), None) - if cmd is None: - msg = 'Cannot find command {} for hardware {}'.format( - cmd_name, conf.name) - glog.error(msg) - return msg, httplib.BAD_REQUEST - - # Construct the command string by joining all components. - cmd.command[0] = config.Config.get_realpath(cmd.command[0]) - cmd_str = ' '.join(cmd.command) - system_cmd.run_in_background(cmd_str, cmd.stdout_file, cmd.stderr_file) - - # Update hardware status. - hardware_status = runtime_status.RuntimeStatus.get_hardware(conf.name) - if cmd_name == 'health_check': - hardware_status.status = runtime_status_pb2.HardwareStatus.CHECKING - - return 'OK', httplib.OK + if hardware_name == 'all': + _ = [__single_check(conf.name) for conf in Config.get_pb().hardware] + else: + __single_check(hardware_name) + RuntimeStatus.broadcast_status_if_changed() diff --git a/modules/hmi/web/hmi_main.py b/modules/hmi/web/hmi_main.py index 9ec51328c2b..1710603c812 100644 --- a/modules/hmi/web/hmi_main.py +++ b/modules/hmi/web/hmi_main.py @@ -16,27 +16,39 @@ # limitations under the License. ############################################################################### """Entry point of the server.""" +import ssl -import gflags import google.apputils.app +from config import Config +from ros_bridge_api import RosBridgeApi +from runtime_status import RuntimeStatus import handlers -import runtime_status - -gflags.DEFINE_string('host', '0.0.0.0', 'Host of the HMI server.') -gflags.DEFINE_integer('port', 8887, 'Port of the HMI server.') -gflags.DEFINE_string( - 'conf', './conf/config.pb.txt', - 'HMI config file, which should be text-formatted config proto.') def main(argv): """App entry point.""" - runtime_status.RuntimeStatus.reset(True) - - FLAGS = gflags.FLAGS + conf = Config.get_pb() + # Module initialization. + RuntimeStatus.reset(True) + RosBridgeApi.init_ros() # Start web server. - return handlers.socketio.run(handlers.app, host=FLAGS.host, port=FLAGS.port) + kwargs = {} + https = conf.server.https + if https.enabled: + # See https://docs.python.org/2/library/ssl.html#ssl.wrap_socket + kwargs = { + 'server_side': True, + 'ssl_version': ssl.PROTOCOL_TLSv1, + 'keyfile': Config.get_realpath(https.server_key), + 'certfile': Config.get_realpath(https.server_cert) + } + if https.client_cert_required: + kwargs['cert_reqs'] = ssl.CERT_REQUIRED + return handlers.socketio.run(handlers.app, + host=conf.server.binding_ip, + port=conf.server.port, + **kwargs) if __name__ == '__main__': diff --git a/modules/hmi/web/module_api.py b/modules/hmi/web/module_api.py index 285afa387a4..5ca3d800ea8 100644 --- a/modules/hmi/web/module_api.py +++ b/modules/hmi/web/module_api.py @@ -15,74 +15,77 @@ # See the License for the specific language governing permissions and # limitations under the License. ############################################################################### -"""Module restful Api.""" +"""Module API.""" -import httplib - -import flask -import flask_restful -import glog - -import config -import modules.hmi.proto.runtime_status_pb2 as runtime_status_pb2 -import runtime_status +from config import Config +from modules.hmi.proto.runtime_status_pb2 import ModuleStatus +from runtime_status import RuntimeStatus import system_cmd -class ModuleApi(flask_restful.Resource): - """Module in Apollo.""" +class ModuleApi(object): + """ + Module SocketIO API: + start [all | record_replay | ] + stop [all | ] + """ - def post(self, module_name): - """Run module command and return HTTP response as (content, status).""" - args = flask.request.form - if args.get('execute_command'): - return ModuleApi.execute_cmd(module_name, args['execute_command']) + @staticmethod + def start(*args): + """SocketIO Api: start(module_name)""" + if len(args) != 1: + Config.log.critical('ModuleApi::start bad args') + return + module_name = args[0] - msg = 'Unknown query: {}'.format(args) - glog.error(msg) - return msg, httplib.BAD_REQUEST + def __single_start(module_name): + conf = Config.get_module(module_name) + if conf is None: + Config.log.critical('ModuleApi::start conf is None') + return + cmd = next((cmd for cmd in conf.supported_commands + if cmd.name == 'start'), None) + if cmd is None: + Config.log.critical('ModuleApi::start cmd is None') + return + # Update status and run command. + RuntimeStatus.get_module(module_name).status = ModuleStatus.STARTED + system_cmd.async_run_command_pb(cmd) - @staticmethod - def execute_cmd(module_name, cmd_name): - """""" - # Run command on all modules if the module name is exactly 'all'. if module_name == 'all': - for conf in config.Config.get_pb().modules: - ModuleApi._run_command(conf, cmd_name) - runtime_status.RuntimeStatus.broadcast_status_if_changed() - return 'OK', httplib.OK - - # Or else, run command on the specified module. - conf = config.Config.get_module(module_name) - if conf is None: - msg = 'Cannot find config for module {}'.format(module_name) - glog.fatal(msg) - return msg, httplib.BAD_REQUEST - result = ModuleApi._run_command(conf, cmd_name) - runtime_status.RuntimeStatus.broadcast_status_if_changed() - return result + for conf in Config.get_pb().modules: + __single_start(conf.name) + elif module_name == 'record_replay_required_modules': + for mod in Config.record_replay_required_modules: + __single_start(mod) + else: + __single_start(module_name) + RuntimeStatus.broadcast_status_if_changed() @staticmethod - def _run_command(conf, cmd_name): - """Implementation of running command on module.""" - cmd = next((cmd for cmd in conf.supported_commands - if cmd.name == cmd_name), None) - if cmd is None: - msg = 'Cannot find command {} for module {}'.format( - cmd_name, conf.name) - glog.fatal(msg) - return msg, httplib.BAD_REQUEST - - # Construct the command string by joining all components. - cmd.command[0] = config.Config.get_realpath(cmd.command[0]) - cmd_str = ' '.join(cmd.command) - system_cmd.run_in_background(cmd_str, cmd.stdout_file, cmd.stderr_file) + def stop(*args): + """SocketIO Api: stop(module_name)""" + if len(args) != 1: + Config.log.critical('ModuleApi::stop bad args') + return + module_name = args[0] - # Update module status. - module_status = runtime_status.RuntimeStatus.get_module(conf.name) - if cmd_name == 'start': - module_status.status = runtime_status_pb2.ModuleStatus.STARTED - elif cmd_name == 'stop': - module_status.status = runtime_status_pb2.ModuleStatus.STOPPED + def __single_stop(module_name): + conf = Config.get_module(module_name) + if conf is None: + Config.log.critical('ModuleApi::stop conf is None') + return + cmd = next((cmd for cmd in conf.supported_commands + if cmd.name == 'stop'), None) + if cmd is None: + Config.log.critical('ModuleApi::stop cmd is None') + return + # Update status and run command. + RuntimeStatus.get_module(module_name).status = ModuleStatus.STOPPED + system_cmd.async_run_command_pb(cmd) - return 'OK', httplib.OK + if module_name == 'all': + _ = [__single_stop(conf.name) for conf in Config.get_pb().modules] + else: + __single_stop(module_name) + RuntimeStatus.broadcast_status_if_changed() diff --git a/modules/hmi/web/ros_bridge_api.py b/modules/hmi/web/ros_bridge_api.py new file mode 100644 index 00000000000..f2705b13110 --- /dev/null +++ b/modules/hmi/web/ros_bridge_api.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### +"""HMI ros API.""" +import rospy + +from config import Config +from modules.canbus.proto.chassis_pb2 import Chassis +from modules.hmi.proto.hmi_message_pb2 import HMICommand + + +class RosBridgeApi(object): + """ + HMI ros API: + change_driving_mode [manual | auto] + """ + ros_command_pub = None + ros_command_seq_num = 0 + + @classmethod + def init_ros(cls): + """Init ros node.""" + rospy.init_node('hmi_ros_bridge', log_level=rospy.DEBUG, anonymous=True) + cls.ros_command_pub = rospy.Publisher( + '/apollo/hmi_command', HMICommand, queue_size=1) + + @classmethod + def change_driving_mode(cls, *args): + """SocketIO Api: change_driving_mode(target_mode)""" + if len(args) != 1: + Config.log.critical('RosBridgeApi::change_driving_mode bad args') + return + target_mode = args[0] + + Config.log.info('RosBridgeApi change_driving_mode %s', target_mode) + + cmd_msg = cls.__new_command_message() + sub_cmd = cmd_msg.change_driving_mode + if target_mode == 'manual': + sub_cmd.target_mode = Chassis.COMPLETE_MANUAL + elif target_mode == 'auto': + sub_cmd.target_mode = Chassis.COMPLETE_AUTO_DRIVE + sub_cmd.reset_first = True + else: + Config.log.critical('Unknown args: %s', str(args)) + return + Config.log.debug('Publishing message: %s', str(cmd_msg)) + cls.ros_command_pub.publish(cmd_msg) + + @classmethod + def __new_command_message(cls): + """Create a new HMICommand message with header filled.""" + cmd_msg = HMICommand() + cmd_msg.header.timestamp_sec = rospy.get_time() + cmd_msg.header.module_name = 'hmi_ros_bridge' + cls.ros_command_seq_num += 1 + cmd_msg.header.sequence_num = cls.ros_command_seq_num + return cmd_msg diff --git a/modules/hmi/web/ros_service_api.py b/modules/hmi/web/ros_service_api.py deleted file mode 100644 index 0d829946347..00000000000 --- a/modules/hmi/web/ros_service_api.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env python - -############################################################################### -# Copyright 2017 The Apollo 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. -############################################################################### -"""HMI ros node service restful Api.""" - -import httplib - -import flask_restful -import gflags -import glog -import grpc - -import modules.hmi.proto.ros_node_pb2 as ros_node_pb2 -import modules.hmi.proto.runtime_status_pb2 as runtime_status_pb2 -import runtime_status - -gflags.DEFINE_string('hmi_ros_node_service', '127.0.0.1:8897', - 'Address of HMI ros node grpc service.') - - -class RosServiceApi(flask_restful.Resource): - """HMI ros node service.""" - - def get(self, cmd_name): - """Run ros command by sending GRPC requests and return HTTP response.""" - return RosServiceApi.execute_cmd(cmd_name) - - @staticmethod - def execute_cmd(cmd_name): - """Run ros command by sending GRPC requests and return HTTP response.""" - ToolStatus = runtime_status_pb2.ToolStatus - channel = grpc.insecure_channel(gflags.FLAGS.hmi_ros_node_service) - stub = ros_node_pb2.HMIRosNodeStub(channel) - - response = None - status = runtime_status.RuntimeStatus - if cmd_name == 'reset': - request = ros_node_pb2.ChangeDrivingModeRequest( - action=ros_node_pb2.ChangeDrivingModeRequest.RESET_TO_MANUAL) - response = stub.ChangeDrivingMode(request) - - # Update runtime status. - tool_status = status.get_tools() - if tool_status.playing_status != ToolStatus.PLAYING_NOT_READY: - tool_status.playing_status = ToolStatus.PLAYING_READY_TO_CHECK - - elif cmd_name == 'start_auto_driving': - request = ros_node_pb2.ChangeDrivingModeRequest( - action=ros_node_pb2.ChangeDrivingModeRequest.START_TO_AUTO) - response = stub.ChangeDrivingMode(request) - - # Update runtime status. - status.get_tools().playing_status = ToolStatus.PLAYING - else: - error_msg = 'RosServiceApi: Unknown command "{}"'.format(cmd_name) - glog.error(error_msg) - return error_msg, httplib.BAD_REQUEST - - status.broadcast_status_if_changed() - glog.info('Processed command "{}", and get response:{}'.format( - cmd_name, response)) - return 'OK', httplib.OK diff --git a/modules/hmi/web/runtime_status.py b/modules/hmi/web/runtime_status.py index cfac0b94084..36b248017c8 100644 --- a/modules/hmi/web/runtime_status.py +++ b/modules/hmi/web/runtime_status.py @@ -15,17 +15,17 @@ # See the License for the specific language governing permissions and # limitations under the License. ############################################################################### -"""Global runtime status.""" +"""Runtime status API.""" import os import time import flask_socketio import gflags -import glog import google.protobuf.json_format as json_format -import config +from config import Config +from modules.hmi.proto.runtime_status_pb2 import ToolStatus import modules.hmi.proto.runtime_status_pb2 as runtime_status_pb2 gflags.DEFINE_string('file_to_play', 'data/log/garage.csv', @@ -37,19 +37,13 @@ class RuntimeStatus(object): pb_singleton = runtime_status_pb2.RuntimeStatus() pb_fingerprint = 0 - - module_dict = {} - hardware_dict = {} playable_duration = 0 @classmethod def reset(cls, check_playable_file=False): """Reset runtime status to start.""" - ToolStatus = runtime_status_pb2.ToolStatus cls.pb_singleton.Clear() cls.pb_fingerprint = 0 - cls.module_dict.clear() - cls.hardware_dict.clear() tool_status = cls.get_tools() if check_playable_file and cls.stat_playable_duration() > 0: @@ -60,23 +54,34 @@ def reset(cls, check_playable_file=False): tool_status.playing_status = ToolStatus.PLAYING_NOT_READY cls._calculate() + @classmethod + def update(cls, status_json): + """Update runtime status.""" + new_status = json_format.ParseDict(status_json, + runtime_status_pb2.RuntimeStatus()) + # Merge status. + Config.log.debug('RuntimeStatus: Update status:\n%s', str(new_status)) + for module in new_status.modules: + cls.get_module(module.name).MergeFrom(module) + for hardware in new_status.hardware: + cls.get_hardware(hardware.name).MergeFrom(hardware) + cls.get_tools().MergeFrom(new_status.tools) + + cls.broadcast_status_if_changed() + @classmethod def get_module(cls, module_name): """Get module status by name.""" - if cls.module_dict.get(module_name) is None: - # Init module status for once. - module_status = cls.pb_singleton.modules.add(name=module_name) - cls.module_dict[module_name] = module_status - return cls.module_dict[module_name] + mod = cls.__find_by_name(module_name, cls.pb_singleton.modules) + # Init module status if not exist. + return mod if mod else cls.pb_singleton.modules.add(name=module_name) @classmethod def get_hardware(cls, hardware_name): - """Get harware status by name.""" - if cls.hardware_dict.get(hardware_name) is None: - # Init hardware status for once. - hardware_status = cls.pb_singleton.hardware.add(name=hardware_name) - cls.hardware_dict[hardware_name] = hardware_status - return cls.hardware_dict[hardware_name] + """Get hardware status by name.""" + hdw = cls.__find_by_name(hardware_name, cls.pb_singleton.hardware) + # Init hardware status for once. + return hdw if hdw else cls.pb_singleton.hardware.add(name=hardware_name) @classmethod def get_tools(cls): @@ -86,24 +91,10 @@ def get_tools(cls): @classmethod def status_json(cls): """Convert status to json dict.""" - - def pb_to_json(pb, include_default_values=False): - """Convert proto to json dict.""" - return json_format.MessageToDict(pb, include_default_values, True) - - def pb_dict_to_json(pb_dict): - """Convert {key: value_pb} to {key, value_dict}.""" - return { - key: pb_to_json(value_pb) - for key, value_pb in pb_dict.iteritems() - } - - return { - 'timestamp': cls._current_timestamp(), - 'modules': pb_dict_to_json(cls.module_dict), - 'hardware': pb_dict_to_json(cls.hardware_dict), - 'tools': pb_to_json(cls.pb_singleton.tools, True), - } + json_dict = json_format.MessageToDict(cls.pb_singleton, True, True) + # Inject current timestamp. + json_dict['timestamp'] = cls._current_timestamp() + return json_dict @classmethod def broadcast_status_if_changed(cls): @@ -111,26 +102,24 @@ def broadcast_status_if_changed(cls): cls._calculate() new_fingerprint = hash(str(cls.pb_singleton)) if cls.pb_fingerprint != new_fingerprint: - flask_socketio.emit('new_status', - cls.status_json(), - broadcast=True, - namespace='/runtime_status') + flask_socketio.emit('current_status', cls.status_json(), + broadcast=True, namespace='/io_frontend') cls.pb_fingerprint = new_fingerprint @classmethod def _calculate(cls): """Update runtime status fields which need to be calculated.""" - modules_and_hardware_ready = cls.are_all_modules_ready( + modules_and_hardware_ready = cls.are_record_replay_modules_ready( ) and cls.are_all_hardware_ready() cls._calculate_recording_status(modules_and_hardware_ready) cls._calculate_playing_status(modules_and_hardware_ready) cls._calculate_guide_message() @classmethod - def are_all_modules_ready(cls): + def are_record_replay_modules_ready(cls): """Check if all modules are ready.""" - for mod in config.Config.get_pb().modules: - mod_status = cls.get_module(mod.name).status + for mod in Config.record_replay_required_modules: + mod_status = cls.get_module(mod).status if mod_status != runtime_status_pb2.ModuleStatus.STARTED: return False return True @@ -138,7 +127,7 @@ def are_all_modules_ready(cls): @classmethod def are_all_hardware_ready(cls): """Check if all modules are ready.""" - for hw in config.Config.get_pb().hardware: + for hw in Config.get_pb().hardware: hw_status = cls.get_hardware(hw.name).status if hw_status != int(runtime_status_pb2.HardwareStatus.OK): return False @@ -147,7 +136,7 @@ def are_all_hardware_ready(cls): @classmethod def stat_playable_duration(cls): """Stat playable duration.""" - file_to_play = config.Config.get_realpath(gflags.FLAGS.file_to_play) + file_to_play = Config.get_realpath(gflags.FLAGS.file_to_play) if os.path.exists(file_to_play): with open(file_to_play, 'r') as f: kFreq = 100 @@ -159,21 +148,18 @@ def stat_playable_duration(cls): @classmethod def _calculate_recording_status(cls, modules_and_hardware_ready): """Calculate recording status.""" - CHECKING = runtime_status_pb2.ToolStatus.RECORDING_CHECKING - READY_TO_START = runtime_status_pb2.ToolStatus.RECORDING_READY_TO_START - tool_status = cls.get_tools() recording_status = tool_status.recording_status - if recording_status == CHECKING and modules_and_hardware_ready: - tool_status.recording_status = READY_TO_START - elif recording_status == READY_TO_START and \ - not modules_and_hardware_ready: - tool_status.recording_status = CHECKING + if (recording_status == ToolStatus.RECORDING_CHECKING and + modules_and_hardware_ready): + tool_status.recording_status = ToolStatus.RECORDING_READY_TO_START + elif (recording_status == ToolStatus.RECORDING_READY_TO_START and + not modules_and_hardware_ready): + tool_status.recording_status = ToolStatus.RECORDING_CHECKING @classmethod def _calculate_playing_status(cls, modules_and_hardware_ready): """Calculate playing status.""" - ToolStatus = runtime_status_pb2.ToolStatus tool_status = cls.get_tools() playing_status = tool_status.playing_status @@ -183,24 +169,23 @@ def _calculate_playing_status(cls, modules_and_hardware_ready): tool_status.playing_status = \ ToolStatus.PLAYING_READY_TO_CHECK else: - glog.info('RuntimeStatus::_calculate_playing_status: ' \ - 'No file to play') + Config.log.info('RuntimeStatus::_calculate_playing_status: ' + 'No file to play') elif (playing_status == ToolStatus.PLAYING_CHECKING and modules_and_hardware_ready and tool_status.planning_ready): tool_status.playing_status = ToolStatus.PLAYING_READY_TO_START - glog.info( - 'RuntimeStatus::_calculate_playing_status: ' \ + Config.log.info( + 'RuntimeStatus::_calculate_playing_status: ' 'All modules/hardware are ready') elif playing_status == ToolStatus.PLAYING_READY_TO_START and not ( modules_and_hardware_ready and tool_status.planning_ready): tool_status.playing_status = ToolStatus.PLAYING_CHECKING - glog.info('RuntimeStatus::_calculate_playing_status: ' \ - 'Not all modules/hardware are ready') + Config.log.info('RuntimeStatus::_calculate_playing_status: ' + 'Not all modules/hardware are ready') @classmethod def _calculate_guide_message(cls): """Update guide message according to status.""" - ToolStatus = runtime_status_pb2.ToolStatus tool_status = cls.get_tools() if tool_status.recording_status == ToolStatus.RECORDING_READY_TO_CHECK: @@ -241,3 +226,8 @@ def _calculate_guide_message(cls): def _current_timestamp(cls): """Current timestamp in milliseconds.""" return int(time.time() * 1000) + + @staticmethod + def __find_by_name(name, value_list): + """Find a value in list by name.""" + return next((value for value in value_list if value.name == name), None) diff --git a/modules/hmi/web/runtime_status_api.py b/modules/hmi/web/runtime_status_api.py deleted file mode 100644 index 79730815e3d..00000000000 --- a/modules/hmi/web/runtime_status_api.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python - -############################################################################### -# Copyright 2017 The Apollo 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. -############################################################################### -"""Runtime status restful Api.""" - -import httplib - -import flask -import flask_restful -import glog -import google.protobuf.json_format as json_format - -import modules.hmi.proto.runtime_status_pb2 as runtime_status_pb2 -import runtime_status - - -class RuntimeStatusApi(flask_restful.Resource): - """HMI runtime status api.""" - - def get(self): - """Get global runtime status.""" - glog.info('RuntimeStatusApi: Get global status.') - return runtime_status.RuntimeStatus.status_json() - - def post(self): - """ - Clients report runtime status. - - The client must PUT a json object which can be converted to - runtime_status_pb2.RuntimeStatus. - """ - try: - new_status = json_format.ParseDict( - flask.request.get_json(), runtime_status_pb2.RuntimeStatus()) - except Exception as e: - error_msg = 'RuntimeStatusApi: Cannot parse given data "{}"'.format( - flask.request.get_json()) - glog.error(error_msg) - return error_msg, httplib.BAD_REQUEST - - # Merge status. - glog.info('RuntimeStatusApi: Put status:\n{}'.format(new_status)) - cur_status = runtime_status.RuntimeStatus - for module in new_status.modules: - cur_status.get_module(module.name).MergeFrom(module) - for hardware in new_status.hardware: - cur_status.get_hardware(hardware.name).MergeFrom(hardware) - cur_status.get_tools().MergeFrom(new_status.tools) - - cur_status.broadcast_status_if_changed() - return 'OK', httplib.OK diff --git a/modules/hmi/web/socketio_api.py b/modules/hmi/web/socketio_api.py new file mode 100644 index 00000000000..6f09ca79ca1 --- /dev/null +++ b/modules/hmi/web/socketio_api.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### +"""SocketIO API.""" +import google.protobuf.json_format as json_format + +from config import Config +from modules.hmi.proto.hmi_message_pb2 import SocketIORequest +import hardware_api +import module_api +import ros_bridge_api +import tool_api + +class SocketIOApi(object): + """ + Socket IO API, which delegate request to target api, and broadcast result + all HMI frontends. + """ + API = { + 'hardware_api': hardware_api.HardwareApi, + 'module_api': module_api.ModuleApi, + 'ros_bridge_api': ros_bridge_api.RosBridgeApi, + 'tool_api': tool_api.ToolApi, + } + + @classmethod + def execute(cls, socketio_request_json): + """Execute a command on the given API.""" + Config.log.info('SocketIOApi::execute %s', socketio_request_json) + socketio_request = json_format.ParseDict(socketio_request_json, + SocketIORequest()) + + api = cls.API.get(socketio_request.api_name) + if api is None: + Config.log.critical('Cannot find %s', socketio_request.api_name) + return + cmd = eval('api.' + socketio_request.command_name) + cmd(*socketio_request.args) diff --git a/modules/hmi/web/static/lib/bootstrap/3.3.7/css/bootstrap.min.css b/modules/hmi/web/static/lib/bootstrap/3.3.7/css/bootstrap.min.css deleted file mode 100644 index ed3905e0e0c..00000000000 --- a/modules/hmi/web/static/lib/bootstrap/3.3.7/css/bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,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-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}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{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;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-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!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:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@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.woff2) format('woff2'),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:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.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"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.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,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.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:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;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;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}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{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-md-1,.col-md-10,.col-md-11,.col-md-12,.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-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{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:auto}.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:auto}.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-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{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:auto}.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:auto}.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-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{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:auto}.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:auto}.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-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{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:auto}.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:auto}.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{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{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=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-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,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@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 .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{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;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.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,.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-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-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:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(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-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.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-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.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:3px}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}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn: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:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{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-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-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:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-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:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{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{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.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:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.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:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.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{margin-bottom:5px;text-align:center}.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:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;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-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{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-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{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;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.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:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@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 .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-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{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.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 th:first-child,.panel>.table-responsive:first-child>.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 th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.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 th:last-child,.panel>.table-responsive:first-child>.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 th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.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 th:first-child,.panel>.table-responsive:last-child>.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 th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.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 th:last-child,.panel>.table-responsive:last-child>.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 th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.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:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;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{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.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;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.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%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(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-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left: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}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!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!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/modules/hmi/web/static/lib/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.ttf b/modules/hmi/web/static/lib/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index 1413fc609ab..00000000000 Binary files a/modules/hmi/web/static/lib/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.ttf and /dev/null differ diff --git a/modules/hmi/web/static/lib/bootstrap/3.3.7/js/bootstrap.min.js b/modules/hmi/web/static/lib/bootstrap/3.3.7/js/bootstrap.min.js deleted file mode 100644 index 9bcd2fccaed..00000000000 --- a/modules/hmi/web/static/lib/bootstrap/3.3.7/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under the MIT license - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},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!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/modules/hmi/web/static/lib/jquery/3.2.1/jquery.min.js b/modules/hmi/web/static/lib/jquery/3.2.1/jquery.min.js deleted file mode 100644 index 644d35e274f..00000000000 --- a/modules/hmi/web/static/lib/jquery/3.2.1/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), -a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), -null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,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"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" + + -

Debug

+

Controllers

Modules

    {% for module in conf_pb.modules %} -
  • +
  • {{ module.display_name }}
    diff --git a/modules/hmi/web/templates/cards/quick_start_panel.tpl b/modules/hmi/web/templates/cards/left_panel.tpl similarity index 79% rename from modules/hmi/web/templates/cards/quick_start_panel.tpl rename to modules/hmi/web/templates/cards/left_panel.tpl index 52087ab0b57..3a8b8f95fef 100644 --- a/modules/hmi/web/templates/cards/quick_start_panel.tpl +++ b/modules/hmi/web/templates/cards/left_panel.tpl @@ -3,7 +3,7 @@ .quick_start_body { overflow: auto; background: #03223e; - margin-bottom: 20px; + padding-bottom: 20px; } .quick_start_body .info_window { @@ -19,7 +19,7 @@ } .quick_start_row { - margin: 40px 20px 0px 20px; + margin: 20px 20px 0px 20px; overflow: auto; } @@ -28,11 +28,12 @@ } .hmi_large_btn, .hmi_large_btn:hover, .hmi_large_btn:focus { - width: 100%; + width: 96%; height: 40px; background: #2284d0; border-radius: 0; color: #ffffff; + padding: 0; } .hmi_large_btn:active { @@ -51,7 +52,7 @@ .quick_start_col1 { padding-left: 0; - padding-right: 13px; + padding-right: 14px; text-align: center; } @@ -62,7 +63,7 @@ } .quick_start_col3 { - padding-left: 13px; + padding-left: 14px; padding-right: 0; text-align: center; } @@ -74,45 +75,69 @@

    - Quick Record: - + Quick Record +

    - +
    - +
    - +
    -

    Quick Play:

    +

    Quick Replay

    - +
    - +
    -
    +
    + onclick="io_request('tool_api', 'stop_playing')" disabled>Stop + +
    +
    +
    + +

    + +
    +

    Follow Traffic

    + +
    +
    + + +
    +
    +
    diff --git a/modules/hmi/web/templates/cards/right_panel.tpl b/modules/hmi/web/templates/cards/right_panel.tpl new file mode 100644 index 00000000000..0663238188a --- /dev/null +++ b/modules/hmi/web/templates/cards/right_panel.tpl @@ -0,0 +1,211 @@ + + +
    + +
    +

    Hardware

    + +
      + {% for hardware in conf_pb.hardware %} +
    • +
      + {{ hardware.display_name }} + + +
      +
    • + {% endfor %} +
    + +

    Profile

    +
      +
    • +
      Map + +
      +
    • + +
    • +
      Vehicle + +
      +
    • +
    + + + +
    + + diff --git a/modules/hmi/web/templates/index.tpl b/modules/hmi/web/templates/index.tpl index cc707a6a2a9..ed1b0eb1310 100644 --- a/modules/hmi/web/templates/index.tpl +++ b/modules/hmi/web/templates/index.tpl @@ -26,14 +26,18 @@ .debug_item { overflow: auto; border: 0; - background-color: #03294b; + background: rgba(3, 41, 75, 0.4); margin-bottom: 0; font-size: 16px; padding: 0; } + .debug_item + .light { + background: rgba(3, 41, 75, 1); + } + .debug_item .item_content { - margin: 15px 20px; + margin: 12px 20px; } .hmi_small_btn, .hmi_small_btn:hover, .hmi_small_btn:focus { @@ -80,25 +84,17 @@
    - {% include 'cards/quick_start_panel.tpl' %} + {% include 'cards/left_panel.tpl' %}
    - {% include 'cards/modules_panel.tpl' %} + {% include 'cards/center_panel.tpl' %}
    - {% include 'cards/hardware_panel.tpl' %} + {% include 'cards/right_panel.tpl' %}
    - + {% endblock %} diff --git a/modules/hmi/web/tool_api.py b/modules/hmi/web/tool_api.py index 0494c0003c8..d944a81631b 100644 --- a/modules/hmi/web/tool_api.py +++ b/modules/hmi/web/tool_api.py @@ -15,103 +15,182 @@ # See the License for the specific language governing permissions and # limitations under the License. ############################################################################### -"""Tools restful Api.""" +"""Tool API.""" -import httplib import os +import shutil -import flask_restful import gflags -import glog - -import config -import hardware_api -import module_api -import modules.hmi.proto.runtime_status_pb2 as runtime_status_pb2 -import ros_service_api -import runtime_status + +from config import Config +from hardware_api import HardwareApi +from module_api import ModuleApi +from modules.hmi.proto.runtime_status_pb2 import ToolStatus +from ros_bridge_api import RosBridgeApi +from runtime_status import RuntimeStatus import system_cmd -class ToolApi(flask_restful.Resource): - """Tools in Apollo.""" - - def get(self, tool_name): - """Run tool command and return HTTP response as (content, status).""" - glog.info("ToolApi receives:" + tool_name) - if tool_name == 'setup_recording': - if not runtime_status.RuntimeStatus.are_all_modules_ready(): - module_api.ModuleApi.execute_cmd('all', 'start') - if not runtime_status.RuntimeStatus.are_all_hardware_ready(): - hardware_api.HardwareApi.execute_cmd('all', 'health_check') - elif tool_name == 'reset_recording': - file_to_play = config.Config.get_realpath(gflags.FLAGS.file_to_play) - if os.path.exists(file_to_play): - os.rename(file_to_play, file_to_play + '.bak') - # Also stop player in case user has set it up. - ToolApi._exec_bash_tool('stop_player') - runtime_status.RuntimeStatus.get_tools().planning_ready = False - elif tool_name == 'setup_playing': - if not runtime_status.RuntimeStatus.are_all_modules_ready(): - module_api.ModuleApi.execute_cmd('all', 'start') - if not runtime_status.RuntimeStatus.are_all_hardware_ready(): - hardware_api.HardwareApi.execute_cmd('all', 'health_check') - ToolApi._exec_bash_tool('start_player') - elif tool_name == 'start_playing': - # The RESET command will try multiple times to change driving mode - # to MANUAL. - ros_service_api.RosServiceApi.execute_cmd('reset') - ros_service_api.RosServiceApi.execute_cmd('start_auto_driving') - elif tool_name == 'stop_playing': - ros_service_api.RosServiceApi.execute_cmd('reset') - ToolApi._exec_bash_tool('stop_player') - elif tool_name == 'reset_all': - module_api.ModuleApi.execute_cmd('all', 'stop') - runtime_status.RuntimeStatus.reset() - ToolApi._exec_bash_tool('stop_player') - ToolApi._exec_bash_tool('stop_recording') - else: - ToolApi._exec_bash_tool(tool_name) - - ToolApi._update_runtime_status(tool_name) - return 'OK', httplib.OK +class ToolApi(object): + """ + Tool SocketIO API: + setup_recording + start_recording + stop_recording + reset_recording + setup_playing + start_playing + stop_playing + reset_all + switch_map + """ - @staticmethod - def _exec_bash_tool(tool_name): - """Execute bash tool configured in config.""" - tool = config.Config.get_tool(tool_name) - if tool is None: - msg = 'Cannot find config for tool {}'.format(tool_name) - glog.fatal(msg) - return msg, httplib.BAD_REQUEST + @classmethod + def setup_recording(cls): + """SocketIO Api: setup_recording()""" + if not RuntimeStatus.are_record_replay_modules_ready(): + ModuleApi.start('record_replay_required_modules') + if not RuntimeStatus.are_all_hardware_ready(): + HardwareApi.health_check('all') + RuntimeStatus.get_tools().recording_status = ( + ToolStatus.RECORDING_CHECKING) + RuntimeStatus.broadcast_status_if_changed() + + @classmethod + def start_recording(cls): + """SocketIO Api: start_recording()""" + cls.__exec_bash_tool('start_recording') + tool_status = RuntimeStatus.get_tools() + tool_status.recording_status = ToolStatus.RECORDING + tool_status.playing_status = ToolStatus.PLAYING_NOT_READY + RuntimeStatus.broadcast_status_if_changed() + + @classmethod + def stop_recording(cls): + """SocketIO Api: stop_recording()""" + cls.__exec_bash_tool('stop_recording') + RuntimeStatus.get_tools().recording_status = ( + ToolStatus.RECORDING_FINISHED) + RuntimeStatus.stat_playable_duration() + + @classmethod + def reset_recording(cls): + """SocketIO Api: reset_recording()""" + file_to_play = Config.get_realpath(gflags.FLAGS.file_to_play) + if os.path.exists(file_to_play): + os.rename(file_to_play, file_to_play + '.bak') + # Also stop player in case user has set it up. + cls.__exec_bash_tool('stop_player') + tool_status = RuntimeStatus.get_tools() + Rtool_status.recording_status = ToolStatus.RECORDING_READY_TO_CHECK + tool_status.playing_status = ToolStatus.PLAYING_NOT_READY + tool_status.planning_ready = False + RuntimeStatus.broadcast_status_if_changed() + + @classmethod + def setup_playing(cls): + """SocketIO Api: setup_playing()""" + if not RuntimeStatus.are_record_replay_modules_ready(): + ModuleApi.start('record_replay_required_modules') + if not RuntimeStatus.are_all_hardware_ready(): + HardwareApi.health_check('all') + cls.__exec_bash_tool('start_player') + RuntimeStatus.get_tools().playing_status = ToolStatus.PLAYING_CHECKING + RuntimeStatus.broadcast_status_if_changed() + + @classmethod + def start_playing(cls): + """SocketIO Api: start_playing()""" + RosBridgeApi.change_driving_mode('auto') + RuntimeStatus.get_tools().playing_status = ToolStatus.PLAYING + RuntimeStatus.broadcast_status_if_changed() - # Construct the command string by joining all components. - tool.command[0] = config.Config.get_realpath(tool.command[0]) - cmd_str = ' '.join(tool.command) - system_cmd.run_in_background(cmd_str, tool.stdout_file, - tool.stderr_file) + @classmethod + def stop_playing(cls): + """SocketIO Api: stop_playing()""" + RosBridgeApi.change_driving_mode('manual') + cls.__exec_bash_tool('stop_player') + tool_status = RuntimeStatus.get_tools() + tool_status.playing_status = ToolStatus.PLAYING_READY_TO_CHECK + tool_status.planning_ready = False + RuntimeStatus.broadcast_status_if_changed() + + @classmethod + def reset_all(cls): + """SocketIO Api: reset_all()""" + ModuleApi.stop('all') + RuntimeStatus.reset() + cls.__exec_bash_tool('stop_player') + cls.__exec_bash_tool('stop_recording') + RuntimeStatus.broadcast_status_if_changed() + + @classmethod + def switch_map(cls, *args): + """SocketIO Api: switch_map(map_name)""" + if len(args) != 1: + Config.log.critical('ToolApi::switch_map bad args') + return + map_name = args[0] + map_conf = Config.get_map(map_name) + if map_conf is None: + Config.log.critical('Cannot find map %s', map_name) + return + with open(Config.global_flagfile(), 'a') as fout: + fout.write('\n--map_dir={}\n'.format(map_conf.map_dir)) + + RuntimeStatus.pb_singleton.config.current_map = map_name + RuntimeStatus.broadcast_status_if_changed() + + @classmethod + def switch_vehicle(cls, *args): + """SocketIO Api: switch_vehicle(vehicle_name)""" + if len(args) != 1: + Config.log.critical('ToolApi::switch_vehicle bad args') + return + vehicle_name = args[0] + vehicle_conf = Config.get_vehicle(vehicle_name) + if vehicle_conf is None: + Config.log.critical('Cannot find vehicle %s', vehicle_name) + return + + conf_pb = Config.get_pb() + # Copy vehicle_param_pb. + if vehicle_conf.HasField('vehicle_param_pb_path'): + system_cmd.copyfile(vehicle_conf.vehicle_param_pb_path, + conf_pb.vehicle_param_pb_target_path) + # Copy calibration_table. + if vehicle_conf.HasField('calibration_table_path'): + system_cmd.copyfile(vehicle_conf.calibration_table_path, + conf_pb.calibration_table_target_path) + # Copy velodyne_params. + if vehicle_conf.HasField('velodyne_params_path'): + system_cmd.copytree( + vehicle_conf.velodyne_params_path, + Config.get_realpath(conf_pb.velodyne_params_target_path, True)) + # Copy velodyne launch file. + if vehicle_conf.HasField('velodyne_launch_path'): + system_cmd.copyfile( + vehicle_conf.velodyne_launch_path, + Config.get_realpath(conf_pb.velodyne_launch_target_path, True)) + # Copy gnss_driver. + if vehicle_conf.HasField('gnss_driver_path'): + system_cmd.copyfile( + vehicle_conf.gnss_driver_path, + Config.get_realpath(conf_pb.gnss_driver_target_path, True)) + # Copy gnss_conf. + if vehicle_conf.HasField('gnss_conf_path'): + system_cmd.copyfile( + vehicle_conf.gnss_conf_path, + Config.get_realpath(conf_pb.gnss_conf_target_path, True)) + + RuntimeStatus.pb_singleton.config.current_vehicle = vehicle_name + RuntimeStatus.broadcast_status_if_changed() @staticmethod - def _update_runtime_status(tool_name): - """Update runtime status.""" - ToolStatus = runtime_status_pb2.ToolStatus - - tools_status = runtime_status.RuntimeStatus.get_tools() - if tool_name == 'setup_recording': - tools_status.recording_status = ToolStatus.RECORDING_CHECKING - elif tool_name == 'start_recording': - tools_status.recording_status = ToolStatus.RECORDING - tools_status.playing_status = ToolStatus.PLAYING_NOT_READY - elif tool_name == 'stop_recording': - tools_status.recording_status = ToolStatus.RECORDING_FINISHED - runtime_status.RuntimeStatus.stat_playable_duration() - elif tool_name == 'reset_recording': - tools_status.recording_status = ToolStatus.RECORDING_READY_TO_CHECK - tools_status.playing_status = ToolStatus.PLAYING_NOT_READY - elif tool_name == 'setup_playing': - tools_status.playing_status = ToolStatus.PLAYING_CHECKING - elif tool_name == 'stop_playing': - tools_status.playing_status = ToolStatus.PLAYING_READY_TO_CHECK - tools_status.planning_ready = False - - runtime_status.RuntimeStatus.broadcast_status_if_changed() + def __exec_bash_tool(tool_name): + """Execute bash tool configured in config.""" + tool = Config.get_tool(tool_name) + if tool is None: + Config.log.critical('Unknown tool %s', tool_name) + return + system_cmd.async_run_command_pb(tool) diff --git a/modules/localization/camera/camera_localization.cc b/modules/localization/camera/camera_localization.cc index 9d0146ddda2..8ad86eccfb3 100644 --- a/modules/localization/camera/camera_localization.cc +++ b/modules/localization/camera/camera_localization.cc @@ -25,11 +25,11 @@ namespace apollo { namespace localization { -using ::apollo::common::adapter::AdapterManager; -using ::apollo::common::monitor::MonitorMessageItem; -using ::apollo::common::monitor::MonitorBuffer; -using ::apollo::common::Status; -using ::apollo::common::time::Clock; +using apollo::common::adapter::AdapterManager; +using apollo::common::monitor::MonitorMessageItem; +using apollo::common::monitor::MonitorBuffer; +using apollo::common::Status; +using apollo::common::time::Clock; CameraLocalization::CameraLocalization() : monitor_(MonitorMessageItem::LOCALIZATION) {} @@ -142,7 +142,7 @@ bool CameraLocalization::CreateLocalizationMsg( // header AdapterManager::FillLocalizationHeader(FLAGS_localization_module_name, - localization->mutable_header()); + localization); if (FLAGS_enable_gps_timestamp) { // copy time stamp, do NOT use Clock::Now() localization->mutable_header()->set_timestamp_sec( @@ -186,7 +186,7 @@ bool CameraLocalization::PublishLocalization() { // publish localization messages AdapterManager::PublishLocalization(localization); - AINFO << "[OnTimer]: Localization message publish success!"; + ADEBUG << "[OnTimer]: Localization message publish success!"; return true; } diff --git a/modules/localization/camera/camera_localization.h b/modules/localization/camera/camera_localization.h index f15367b0765..abe04fa0be3 100644 --- a/modules/localization/camera/camera_localization.h +++ b/modules/localization/camera/camera_localization.h @@ -76,8 +76,8 @@ class CameraLocalization : public LocalizationBase { void RunWatchDog(); bool PrepareLocalizationMsg(LocalizationEstimate *localization); - bool CreateLocalizationMsg(const ::apollo::localization::Gps &gps_msg, - const ::apollo::localization::Camera &camera_msg, + bool CreateLocalizationMsg(const localization::Gps &gps_msg, + const localization::Camera &camera_msg, LocalizationEstimate *localization); private: diff --git a/modules/localization/common/localization_gflags.cc b/modules/localization/common/localization_gflags.cc index aa5664f3dfe..ed7a372e648 100644 --- a/modules/localization/common/localization_gflags.cc +++ b/modules/localization/common/localization_gflags.cc @@ -47,9 +47,6 @@ DEFINE_bool(enable_watchdog, true, "enable watchdog"); DEFINE_double(gps_time_delay_tolerance, 1.0, "gps message time delay tolerance (sec)"); -DEFINE_double(imu_time_delay_tolerance, 1.0, - "imu message time delay tolerance (sec)"); - DEFINE_double(camera_time_delay_tolerance, 1.0, "camera imu message time delay tolerance (sec)"); @@ -62,10 +59,6 @@ DEFINE_double(map_offset_x, 0.0, "map_offsite: x"); DEFINE_double(map_offset_y, 0.0, "map_offsite: y"); DEFINE_double(map_offset_z, 0.0, "map_offsite: z"); -DEFINE_int32(monitor_level, 2, - "minimum log level(INFO=0; WARN=1;" - "ERROR=2;FATAL=3) for monitor msg"); - DEFINE_int32(report_threshold_err_num, 10, "report threshold error num"); DEFINE_double(report_gps_imu_time_diff_threshold, 0.02, "report threshold of timestamp diff between gps and imu(sec)"); diff --git a/modules/localization/common/localization_gflags.h b/modules/localization/common/localization_gflags.h index 32f011cbc1b..b4dd898ff65 100644 --- a/modules/localization/common/localization_gflags.h +++ b/modules/localization/common/localization_gflags.h @@ -38,7 +38,6 @@ DECLARE_bool(enable_map_reference_unify); DECLARE_bool(enable_watchdog); DECLARE_double(gps_time_delay_tolerance); -DECLARE_double(imu_time_delay_tolerance); DECLARE_double(camera_time_delay_tolerance); DECLARE_double(gps_imu_timestamp_sec_diff_tolerance); DECLARE_double(timestamp_sec_tolerance); @@ -47,8 +46,6 @@ DECLARE_double(map_offset_x); DECLARE_double(map_offset_y); DECLARE_double(map_offset_z); -DECLARE_int32(monitor_level); - DECLARE_int32(report_threshold_err_num); DECLARE_double(report_gps_imu_time_diff_threshold); diff --git a/modules/localization/conf/localization.conf b/modules/localization/conf/localization.conf index ccba030f76c..4c1606e1c74 100644 --- a/modules/localization/conf/localization.conf +++ b/modules/localization/conf/localization.conf @@ -1 +1,2 @@ +--flagfile=modules/common/data/global_flagfile.txt --noenable_gps_imu_interprolate diff --git a/modules/localization/main.cc b/modules/localization/main.cc index 58c0679b17f..b1aee54fd0e 100644 --- a/modules/localization/main.cc +++ b/modules/localization/main.cc @@ -17,4 +17,4 @@ #include "modules/common/apollo_app.h" #include "modules/localization/localization.h" -APOLLO_MAIN(::apollo::localization::Localization) +APOLLO_MAIN(apollo::localization::Localization) diff --git a/modules/localization/proto/BUILD b/modules/localization/proto/BUILD index 87cbca46ac0..f85179c3e29 100644 --- a/modules/localization/proto/BUILD +++ b/modules/localization/proto/BUILD @@ -2,126 +2,116 @@ load("//tools:cpplint.bzl", "cpplint") package(default_visibility = ["//visibility:public"]) -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile") - cc_proto_library( name = "localization_config_proto", - protos = ["localization_config.proto"], deps = [ - "//modules/common/proto:common_proto", + ":localization_config_proto_lib", ], ) -py_proto_compile( - name = "localization_config_proto_pylib", - protos = ["localization_config.proto"], +proto_library( + name = "localization_config_proto_lib", + srcs = ["localization_config.proto"], deps = [ - "//modules/common/proto:common_proto_pylib", + "//modules/common/proto:common_proto_lib", ], ) cc_proto_library( name = "pose_proto", - protos = ["pose.proto"], deps = [ - "//modules/common/proto:common_proto", + ":pose_proto_lib", ], ) -py_proto_compile( - name = "pose_proto_pylib", - protos = ["pose.proto"], +proto_library( + name = "pose_proto_lib", + srcs = ["pose.proto"], deps = [ - "//modules/common/proto:common_proto_pylib", + "//modules/common/proto:common_proto_lib", ], ) cc_proto_library( name = "gps_proto", - protos = ["gps.proto"], deps = [ - ":pose_proto", - "//modules/common/proto:common_proto", + ":gps_proto_lib", ], ) -py_proto_compile( - name = "gps_proto_pylib", - protos = ["gps.proto"], +proto_library( + name = "gps_proto_lib", + srcs = ["gps.proto"], deps = [ - ":pose_proto_pylib", - "//modules/common/proto:common_proto_pylib", + ":pose_proto_lib", + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:header_proto_lib", ], ) cc_proto_library( name = "imu_proto", - protos = ["imu.proto"], deps = [ - ":pose_proto", - "//modules/common/proto:common_proto", + ":imu_proto_lib", ], ) -py_proto_compile( - name = "imu_proto_pylib", - protos = ["imu.proto"], +proto_library( + name = "imu_proto_lib", + srcs = ["imu.proto"], deps = [ - ":pose_proto_pylib", - "//modules/common/proto:common_proto_pylib", + ":pose_proto_lib", + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:header_proto_lib", ], ) cc_proto_library( name = "camera_proto", - protos = ["camera.proto"], deps = [ - ":pose_proto", - "//modules/common/proto:common_proto", + ":camera_proto_lib", ], ) -py_proto_compile( - name = "camera_proto_pylib", - protos = ["camera.proto"], +proto_library( + name = "camera_proto_lib", + srcs = ["camera.proto"], deps = [ - ":pose_proto_pylib", - "//modules/common/proto:common_proto_pylib", + ":pose_proto_lib", + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:header_proto_lib", ], ) cc_proto_library( name = "camera_parameter_proto", - protos = ["camera_parameter.proto"], deps = [ - "//modules/common/proto:common_proto", + ":camera_parameter_proto_lib", ], ) -py_proto_compile( - name = "camera_parameter_proto_pylib", - protos = ["camera_parameter.proto"], +proto_library( + name = "camera_parameter_proto_lib", + srcs = ["camera_parameter.proto"], deps = [ - "//modules/common/proto:common_proto_pylib", + "//modules/common/proto:common_proto_lib", ], ) cc_proto_library( name = "localization_proto", - protos = ["localization.proto"], deps = [ - ":pose_proto", - "//modules/common/proto:common_proto", + ":localization_proto_lib", ], ) -py_proto_compile( - name = "localization_proto_pylib", - protos = ["localization.proto"], +proto_library( + name = "localization_proto_lib", + srcs = ["localization.proto"], deps = [ - ":pose_proto_pylib", - "//modules/common/proto:common_proto_pylib", + ":pose_proto_lib", + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:header_proto_lib", ], ) diff --git a/modules/localization/proto/pose.proto b/modules/localization/proto/pose.proto index c3dd40a29c8..8e8588c0a2a 100644 --- a/modules/localization/proto/pose.proto +++ b/modules/localization/proto/pose.proto @@ -52,4 +52,9 @@ message Pose { // Angular velocity of the vehicle in the vehicle reference frame. // Around right/forward/up axes in radians per second. optional apollo.common.Point3D angular_velocity_vrf = 8; + + // Roll/pitch/yaw that represents a rotation of the intrinsic sequence z-y-x. + + // Roll/pitch/yaw in radians. + optional apollo.common.Point3D euler_angles = 9; } diff --git a/modules/localization/rtk/rtk_localization.cc b/modules/localization/rtk/rtk_localization.cc index a958b4be097..d40af076315 100644 --- a/modules/localization/rtk/rtk_localization.cc +++ b/modules/localization/rtk/rtk_localization.cc @@ -25,11 +25,11 @@ namespace apollo { namespace localization { using ::Eigen::Vector3d; -using ::apollo::common::adapter::AdapterManager; -using ::apollo::common::adapter::ImuAdapter; -using ::apollo::common::monitor::MonitorMessageItem; -using ::apollo::common::Status; -using ::apollo::common::time::Clock; +using apollo::common::adapter::AdapterManager; +using apollo::common::adapter::ImuAdapter; +using apollo::common::monitor::MonitorMessageItem; +using apollo::common::Status; +using apollo::common::time::Clock; RTKLocalization::RTKLocalization() : monitor_(MonitorMessageItem::LOCALIZATION), @@ -213,6 +213,13 @@ void RTKLocalization::InterpolateIMU(const Imu &imu1, const Imu &imu2, imu2.imu().linear_acceleration(), frac1); imu_msg->mutable_imu()->mutable_linear_acceleration()->CopyFrom(val); } + + if (imu1.has_imu() && imu1.imu().has_euler_angles() && imu2.has_imu() && + imu2.imu().has_euler_angles()) { + auto val = InterpolateXYZ(imu1.imu().euler_angles(), + imu2.imu().euler_angles(), frac1); + imu_msg->mutable_imu()->mutable_euler_angles()->CopyFrom(val); + } } } } @@ -248,14 +255,13 @@ void RTKLocalization::PrepareLocalizationMsg( } void RTKLocalization::ComposeLocalizationMsg( - const ::apollo::localization::Gps &gps_msg, - const ::apollo::localization::Imu &imu_msg, + const localization::Gps &gps_msg, const localization::Imu &imu_msg, LocalizationEstimate *localization) { localization->Clear(); // header AdapterManager::FillLocalizationHeader(FLAGS_localization_module_name, - localization->mutable_header()); + localization); if (FLAGS_enable_gps_timestamp) { // copy time stamp, do NOT use Clock::Now() localization->mutable_header()->set_timestamp_sec( @@ -349,6 +355,11 @@ void RTKLocalization::ComposeLocalizationMsg( imu.angular_velocity()); } } + + // euler angle + if (imu.has_euler_angles()) { + mutable_pose->mutable_euler_angles()->CopyFrom(imu.euler_angles()); + } } } @@ -358,7 +369,7 @@ void RTKLocalization::PublishLocalization() { // publish localization messages AdapterManager::PublishLocalization(localization); - AINFO << "[OnTimer]: Localization message publish success!"; + ADEBUG << "[OnTimer]: Localization message publish success!"; } void RTKLocalization::RunWatchDog() { diff --git a/modules/localization/rtk/rtk_localization.h b/modules/localization/rtk/rtk_localization.h index 7807004dd36..bfb9cd02a5a 100644 --- a/modules/localization/rtk/rtk_localization.h +++ b/modules/localization/rtk/rtk_localization.h @@ -74,8 +74,8 @@ class RTKLocalization : public LocalizationBase { void RunWatchDog(); void PrepareLocalizationMsg(LocalizationEstimate *localization); - void ComposeLocalizationMsg(const ::apollo::localization::Gps &gps, - const ::apollo::localization::Imu &imu, + void ComposeLocalizationMsg(const localization::Gps &gps, + const localization::Imu &imu, LocalizationEstimate *localization); bool FindMatchingIMU(const double gps_timestamp_sec, Imu *imu_msg); void InterpolateIMU(const Imu &imu1, const Imu &imu2, diff --git a/modules/localization/rtk/rtk_localization_test.cc b/modules/localization/rtk/rtk_localization_test.cc index ba7703d3e0a..cd924e02836 100644 --- a/modules/localization/rtk/rtk_localization_test.cc +++ b/modules/localization/rtk/rtk_localization_test.cc @@ -52,7 +52,7 @@ class RTKLocalizationTest : public ::testing::Test { protected: template void load_data(const std::string &filename, T *data) { - CHECK(::apollo::common::util::GetProtoFromFile(filename, data)) + CHECK(common::util::GetProtoFromFile(filename, data)) << "Failed to open file " << filename; } @@ -181,6 +181,8 @@ TEST_F(RTKLocalizationTest, ComposeLocalizationMsg) { EXPECT_STREQ(expected_result.pose().DebugString().c_str(), localization.pose().DebugString().c_str()); } + + // TODO(Qi Luo) Update test once got new imu data for euler angle. } } // namespace localization diff --git a/modules/map/BUILD b/modules/map/BUILD new file mode 100644 index 00000000000..f3513c56bf5 --- /dev/null +++ b/modules/map/BUILD @@ -0,0 +1,8 @@ +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "map_data", + srcs = glob([ + "data/**", + ]), +) diff --git a/modules/map/data/README.md b/modules/map/data/README.md new file mode 100644 index 00000000000..480f966c454 --- /dev/null +++ b/modules/map/data/README.md @@ -0,0 +1,51 @@ +# Map Data + +A bundle of correlated maps are organized as a directory, with a structure like: + +```txt + # Defined by FLAGS_map_dir + |-- base_map.xml # Defined by FLAGS_base_map_filename + |-- routing_map.bin # Defined by FLAGS_routing_map_filename + |-- sim_map.bin # Defined by FLAGS_sim_map_filename + |-- default_end_way_point.txt # Defined by FLAGS_end_way_point_filename +``` + +You can specify the map filenames as a list of candidates: + +```txt +--base_map_filename="base.xml|base.bin|base.txt" +``` + +Then it will find the first available file to load. Generally we follow the +extension pattern of: + +```txt +x.xml # An OpenDrive formatted map. +x.bin # A binary pb map. +x.txt # A text pb map. +``` + +## Use a different map + +1. [Prefered] Change global flagfile: *modules/common/data/global_flagfile.txt* + + Note that it's the basement of all modules' flagfile, which keeps the whole + system in one page. + +1. Pass as flag, which only affect individual process: + + ```bash + --map_dir=/path/to/your/map + ``` + +1. Override in the module's own flagfile, which generally located at + *modules//conf/.conf* + + Obviously it also only affect single module. + + ```txt + --flagfile=modules/common/data/global_flagfile.txt + + # Override values from the global flagfile. + --map_dir=/path/to/your/map + ``` diff --git a/modules/map/data/demo/base_map.txt b/modules/map/data/demo/base_map.txt new file mode 100644 index 00000000000..633ed52f433 --- /dev/null +++ b/modules/map/data/demo/base_map.txt @@ -0,0 +1,15760 @@ +header { + version: "03/10/17_22.46.20" + date: "20161124" + projection { + proj: "+proj=tmerc +lat_0={37.413082} +lon_0={-122.013332} +k={0.9999999996} +ellps=WGS84 +no_defs" + } +} +lane { + id { + id: "1_-1" + } + central_curve { + segment { + line_segment { + point { + x: 586392.84003 + y: 4140673.01232 + } + point { + x: 586392.64623335819 + y: 4140673.061791297 + } + point { + x: 586392.45243671641 + y: 4140673.1112625939 + } + point { + x: 586392.25864007475 + y: 4140673.1607338907 + } + point { + x: 586392.064843433 + y: 4140673.2102051876 + } + point { + x: 586391.8710467912 + y: 4140673.2596764839 + } + point { + x: 586391.67725014954 + y: 4140673.3091477808 + } + point { + x: 586391.48345350777 + y: 4140673.3586190776 + } + point { + x: 586391.289656866 + y: 4140673.4080903744 + } + point { + x: 586391.09586022433 + y: 4140673.4575616713 + } + point { + x: 586390.90206358256 + y: 4140673.5070329681 + } + point { + x: 586390.70826694078 + y: 4140673.5565042645 + } + point { + x: 586390.51447029912 + y: 4140673.6059755613 + } + point { + x: 586390.32067365735 + y: 4140673.6554468581 + } + point { + x: 586390.12687701569 + y: 4140673.704918155 + } + point { + x: 586389.93308037391 + y: 4140673.7543894518 + } + point { + x: 586389.73928373214 + y: 4140673.8038607487 + } + point { + x: 586389.54548709048 + y: 4140673.853332045 + } + point { + x: 586389.3516904487 + y: 4140673.9028033419 + } + point { + x: 586389.15789380693 + y: 4140673.9522746387 + } + point { + x: 586388.96409716527 + y: 4140674.0017459355 + } + point { + x: 586388.77030052349 + y: 4140674.0512172324 + } + point { + x: 586388.57650388172 + y: 4140674.1006885287 + } + point { + x: 586388.38270724006 + y: 4140674.1501598256 + } + point { + x: 586388.18891059828 + y: 4140674.1996311224 + } + point { + x: 586387.99511395651 + y: 4140674.2491024192 + } + point { + x: 586387.80131731485 + y: 4140674.2985737161 + } + point { + x: 586387.60752067307 + y: 4140674.3480450129 + } + point { + x: 586387.4137240313 + y: 4140674.3975163093 + } + point { + x: 586387.21992738964 + y: 4140674.4469876061 + } + point { + x: 586387.02613074786 + y: 4140674.496458903 + } + point { + x: 586386.83233410609 + y: 4140674.5459302 + } + point { + x: 586386.63853746443 + y: 4140674.5954014966 + } + point { + x: 586386.44474082266 + y: 4140674.6448727935 + } + point { + x: 586386.25094418088 + y: 4140674.69434409 + } + point { + x: 586386.05714753922 + y: 4140674.7438153867 + } + point { + x: 586385.86335089745 + y: 4140674.7932866835 + } + point { + x: 586385.66955425567 + y: 4140674.8427579803 + } + point { + x: 586385.475757614 + y: 4140674.8922292772 + } + point { + x: 586385.28196097224 + y: 4140674.941700574 + } + point { + x: 586385.08816433046 + y: 4140674.9911718704 + } + point { + x: 586384.8943676888 + y: 4140675.0406431672 + } + point { + x: 586384.700571047 + y: 4140675.0901144641 + } + point { + x: 586384.50677440525 + y: 4140675.1395857609 + } + point { + x: 586384.31297776359 + y: 4140675.1890570577 + } + point { + x: 586384.11918112182 + y: 4140675.2385283541 + } + point { + x: 586383.92538448 + y: 4140675.2879996509 + } + point { + x: 586383.73158783838 + y: 4140675.3374709478 + } + point { + x: 586383.53779119661 + y: 4140675.3869422446 + } + point { + x: 586383.34399455483 + y: 4140675.4364135414 + } + point { + x: 586383.15019791317 + y: 4140675.4858848383 + } + point { + x: 586382.9564012714 + y: 4140675.5353561346 + } + point { + x: 586382.76260462962 + y: 4140675.5848274315 + } + point { + x: 586382.568807988 + y: 4140675.6342987283 + } + point { + x: 586382.37501134619 + y: 4140675.6837700251 + } + point { + x: 586382.18121470441 + y: 4140675.733241322 + } + point { + x: 586381.98741806275 + y: 4140675.7827126188 + } + point { + x: 586381.793621421 + y: 4140675.8321839152 + } + point { + x: 586381.59982477932 + y: 4140675.881655212 + } + point { + x: 586381.40602813754 + y: 4140675.9311265089 + } + point { + x: 586381.21223149577 + y: 4140675.9805978057 + } + point { + x: 586381.01843485411 + y: 4140676.0300691025 + } + point { + x: 586380.82463821233 + y: 4140676.0795403994 + } + point { + x: 586380.63084157056 + y: 4140676.1290116957 + } + point { + x: 586380.4370449289 + y: 4140676.1784829926 + } + point { + x: 586380.24324828712 + y: 4140676.2279542894 + } + point { + x: 586380.04945164535 + y: 4140676.2774255862 + } + point { + x: 586379.85565500369 + y: 4140676.3268968831 + } + point { + x: 586379.66185836191 + y: 4140676.3763681795 + } + point { + x: 586379.46806172014 + y: 4140676.4258394763 + } + point { + x: 586379.27426507848 + y: 4140676.4753107731 + } + point { + x: 586379.0804684367 + y: 4140676.52478207 + } + point { + x: 586378.88667179493 + y: 4140676.5742533668 + } + point { + x: 586378.69287515327 + y: 4140676.6237246636 + } + point { + x: 586378.49907851149 + y: 4140676.67319596 + } + point { + x: 586378.30528186972 + y: 4140676.7226672568 + } + point { + x: 586378.11148522806 + y: 4140676.7721385537 + } + point { + x: 586377.91768858628 + y: 4140676.8216098505 + } + point { + x: 586377.72389194451 + y: 4140676.8710811473 + } + point { + x: 586377.53009530285 + y: 4140676.9205524442 + } + point { + x: 586377.33629866107 + y: 4140676.9700237405 + } + point { + x: 586377.1425020193 + y: 4140677.0194950374 + } + point { + x: 586376.94870537764 + y: 4140677.0689663342 + } + point { + x: 586376.75490873586 + y: 4140677.1184376311 + } + point { + x: 586376.56111209409 + y: 4140677.1679089279 + } + point { + x: 586376.36731545243 + y: 4140677.2173802247 + } + point { + x: 586376.17351881065 + y: 4140677.2668515211 + } + point { + x: 586375.97972216888 + y: 4140677.3163228179 + } + point { + x: 586375.78592552722 + y: 4140677.3657941148 + } + point { + x: 586375.59212888544 + y: 4140677.4152654116 + } + point { + x: 586375.39833224367 + y: 4140677.4647367084 + } + point { + x: 586375.204535602 + y: 4140677.5142080048 + } + point { + x: 586375.01073896023 + y: 4140677.5636793016 + } + point { + x: 586374.81694231846 + y: 4140677.6131505985 + } + point { + x: 586374.6231456768 + y: 4140677.6626218953 + } + point { + x: 586374.429349035 + y: 4140677.7120931922 + } + point { + x: 586374.23555239325 + y: 4140677.761564489 + } + point { + x: 586374.04175575159 + y: 4140677.8110357854 + } + point { + x: 586373.84795910981 + y: 4140677.8605070822 + } + point { + x: 586373.65416246816 + y: 4140677.909978379 + } + point { + x: 586373.46036582638 + y: 4140677.9594496759 + } + point { + x: 586373.26656918461 + y: 4140678.0089209727 + } + point { + x: 586373.072772543 + y: 4140678.0583922695 + } + point { + x: 586372.87897590117 + y: 4140678.1078635659 + } + point { + x: 586372.6851792594 + y: 4140678.1573348627 + } + point { + x: 586372.49138261774 + y: 4140678.2068061596 + } + point { + x: 586372.297585976 + y: 4140678.2562774564 + } + point { + x: 586372.10378933419 + y: 4140678.3057487532 + } + point { + x: 586371.90999269253 + y: 4140678.35522005 + } + point { + x: 586371.71619605075 + y: 4140678.4046913465 + } + point { + x: 586371.522399409 + y: 4140678.4541626433 + } + point { + x: 586371.32860276732 + y: 4140678.50363394 + } + point { + x: 586371.13480612554 + y: 4140678.553105237 + } + point { + x: 586370.94100948377 + y: 4140678.6025765338 + } + point { + x: 586370.74721284211 + y: 4140678.65204783 + } + point { + x: 586370.55341620033 + y: 4140678.701519127 + } + point { + x: 586370.35961955856 + y: 4140678.7509904238 + } + point { + x: 586370.1658229169 + y: 4140678.8004617207 + } + point { + x: 586369.97202627512 + y: 4140678.8499330175 + } + point { + x: 586369.77822963335 + y: 4140678.8994043143 + } + point { + x: 586369.58443299169 + y: 4140678.9488756107 + } + point { + x: 586369.39063634991 + y: 4140678.9983469076 + } + point { + x: 586369.19683970814 + y: 4140679.0478182044 + } + point { + x: 586369.00304306648 + y: 4140679.0972895012 + } + point { + x: 586368.8092464247 + y: 4140679.1467607981 + } + point { + x: 586368.61544978293 + y: 4140679.1962320949 + } + point { + x: 586368.42165314127 + y: 4140679.2457033913 + } + point { + x: 586368.22785649949 + y: 4140679.2951746881 + } + point { + x: 586368.03405985772 + y: 4140679.3446459849 + } + point { + x: 586367.840263216 + y: 4140679.3941172818 + } + point { + x: 586367.64646657428 + y: 4140679.4435885786 + } + point { + x: 586367.45266993251 + y: 4140679.493059875 + } + point { + x: 586367.25887329085 + y: 4140679.5425311718 + } + point { + x: 586367.06507664907 + y: 4140679.5920024686 + } + point { + x: 586366.8712800073 + y: 4140679.6414737655 + } + point { + x: 586366.67748336564 + y: 4140679.6909450623 + } + point { + x: 586366.48368672386 + y: 4140679.7404163592 + } + point { + x: 586366.28989008209 + y: 4140679.7898876555 + } + point { + x: 586366.09609344043 + y: 4140679.8393589524 + } + point { + x: 586365.90229679865 + y: 4140679.8888302492 + } + point { + x: 586365.708500157 + y: 4140679.938301546 + } + point { + x: 586365.51470351522 + y: 4140679.9877728429 + } + point { + x: 586365.32090687344 + y: 4140680.0372441397 + } + point { + x: 586365.12711023178 + y: 4140680.0867154361 + } + point { + x: 586364.93331359 + y: 4140680.1361867329 + } + point { + x: 586364.73951694823 + y: 4140680.1856580297 + } + point { + x: 586364.54572030657 + y: 4140680.2351293266 + } + point { + x: 586364.3519236648 + y: 4140680.2846006234 + } + point { + x: 586364.158127023 + y: 4140680.3340719203 + } + point { + x: 586363.96433038136 + y: 4140680.3835432166 + } + point { + x: 586363.77053373959 + y: 4140680.4330145135 + } + point { + x: 586363.57673709781 + y: 4140680.4824858103 + } + point { + x: 586363.38294045615 + y: 4140680.5319571071 + } + point { + x: 586363.18914381438 + y: 4140680.581428404 + } + point { + x: 586362.9953471726 + y: 4140680.6308997003 + } + point { + x: 586362.801550531 + y: 4140680.6803709972 + } + point { + x: 586362.60775388917 + y: 4140680.729842294 + } + point { + x: 586362.41395724739 + y: 4140680.7793135908 + } + point { + x: 586362.22016060574 + y: 4140680.8287848877 + } + point { + x: 586362.026363964 + y: 4140680.8782561845 + } + point { + x: 586361.83256732218 + y: 4140680.9277274809 + } + point { + x: 586361.63877068053 + y: 4140680.9771987777 + } + point { + x: 586361.44497403875 + y: 4140681.0266700746 + } + point { + x: 586361.251177397 + y: 4140681.0761413714 + } + point { + x: 586361.05738075532 + y: 4140681.1256126682 + } + point { + x: 586360.86358411354 + y: 4140681.1750839651 + } + point { + x: 586360.66978747176 + y: 4140681.2245552614 + } + point { + x: 586360.47599083011 + y: 4140681.2740265583 + } + point { + x: 586360.28219418833 + y: 4140681.3234978551 + } + point { + x: 586360.08839754655 + y: 4140681.3729691519 + } + point { + x: 586359.8946009049 + y: 4140681.4224404488 + } + point { + x: 586359.70080426312 + y: 4140681.4719117456 + } + point { + x: 586359.50700762135 + y: 4140681.521383042 + } + point { + x: 586359.31321097969 + y: 4140681.5708543388 + } + point { + x: 586359.11941433791 + y: 4140681.6203256357 + } + point { + x: 586358.92561769614 + y: 4140681.6697969325 + } + point { + x: 586358.73182105448 + y: 4140681.7192682293 + } + point { + x: 586358.5380244127 + y: 4140681.7687395257 + } + point { + x: 586358.34422777093 + y: 4140681.8182108225 + } + point { + x: 586358.15043112927 + y: 4140681.8676821194 + } + point { + x: 586357.95663448749 + y: 4140681.9171534162 + } + point { + x: 586357.76283784572 + y: 4140681.966624713 + } + point { + x: 586357.569041204 + y: 4140682.01609601 + } + point { + x: 586357.37524456228 + y: 4140682.0655673062 + } + point { + x: 586357.18144792062 + y: 4140682.1150386031 + } + point { + x: 586356.98765127885 + y: 4140682.1645099 + } + point { + x: 586356.79385463707 + y: 4140682.2139811967 + } + point { + x: 586356.60005799541 + y: 4140682.2634524936 + } + point { + x: 586356.40626135364 + y: 4140682.3129237904 + } + point { + x: 586356.21246471186 + y: 4140682.3623950868 + } + point { + x: 586356.0186680702 + y: 4140682.4118663836 + } + point { + x: 586355.82487142843 + y: 4140682.4613376805 + } + point { + x: 586355.63107478665 + y: 4140682.5108089773 + } + point { + x: 586355.437278145 + y: 4140682.5602802741 + } + point { + x: 586355.24348150322 + y: 4140682.609751571 + } + point { + x: 586355.04968486144 + y: 4140682.6592228673 + } + point { + x: 586354.85588821978 + y: 4140682.7086941642 + } + point { + x: 586354.662091578 + y: 4140682.758165461 + } + point { + x: 586354.46829493623 + y: 4140682.8076367578 + } + point { + x: 586354.27449829457 + y: 4140682.8571080547 + } + point { + x: 586354.0807016528 + y: 4140682.9065793511 + } + point { + x: 586353.886905011 + y: 4140682.9560506479 + } + point { + x: 586353.69310836936 + y: 4140683.0055219447 + } + point { + x: 586353.49931172759 + y: 4140683.0549932416 + } + point { + x: 586353.30551508581 + y: 4140683.1044645384 + } + point { + x: 586353.11171844415 + y: 4140683.1539358352 + } + point { + x: 586352.91792180238 + y: 4140683.2034071316 + } + point { + x: 586352.7241251606 + y: 4140683.2528784284 + } + point { + x: 586352.530328519 + y: 4140683.3023497253 + } + point { + x: 586352.33653187717 + y: 4140683.3518210221 + } + point { + x: 586352.14273523539 + y: 4140683.4012923189 + } + point { + x: 586351.94893859373 + y: 4140683.4507636158 + } + point { + x: 586351.755141952 + y: 4140683.5002349121 + } + point { + x: 586351.56134531018 + y: 4140683.549706209 + } + point { + x: 586351.36754866852 + y: 4140683.5991775058 + } + point { + x: 586351.17375202675 + y: 4140683.6486488027 + } + point { + x: 586350.979955385 + y: 4140683.6981200995 + } + point { + x: 586350.78615874331 + y: 4140683.7475913963 + } + point { + x: 586350.59236210154 + y: 4140683.7970626927 + } + point { + x: 586350.39856545976 + y: 4140683.8465339895 + } + point { + x: 586350.2047688181 + y: 4140683.8960052864 + } + point { + x: 586350.01097217633 + y: 4140683.9454765832 + } + point { + x: 586349.81717553455 + y: 4140683.99494788 + } + point { + x: 586349.62337889289 + y: 4140684.0444191764 + } + point { + x: 586349.42958225112 + y: 4140684.0938904732 + } + point { + x: 586349.23578560946 + y: 4140684.14336177 + } + point { + x: 586349.04198896769 + y: 4140684.1928330669 + } + point { + x: 586348.84819232591 + y: 4140684.2423043638 + } + point { + x: 586348.65439568425 + y: 4140684.2917756606 + } + point { + x: 586348.46059904248 + y: 4140684.341246957 + } + point { + x: 586348.2668024007 + y: 4140684.3907182538 + } + point { + x: 586348.073005759 + y: 4140684.4401895506 + } + point { + x: 586347.87665356509 + y: 4140684.4903132142 + } + point { + x: 586347.72302824655 + y: 4140684.5736279017 + } + point { + x: 586347.569402928 + y: 4140684.6569425897 + } + point { + x: 586347.41577760945 + y: 4140684.7402572772 + } + point { + x: 586347.2621522909 + y: 4140684.8235719651 + } + point { + x: 586347.10852697236 + y: 4140684.906886653 + } + point { + x: 586346.95490165381 + y: 4140684.9902013405 + } + point { + x: 586346.80127633526 + y: 4140685.0735160285 + } + point { + x: 586346.64765101671 + y: 4140685.1568307159 + } + point { + x: 586346.49402569816 + y: 4140685.2401454039 + } + point { + x: 586346.34040037962 + y: 4140685.3234600914 + } + point { + x: 586346.18677506107 + y: 4140685.4067747793 + } + point { + x: 586346.03314974252 + y: 4140685.4900894668 + } + point { + x: 586345.879524424 + y: 4140685.5734041547 + } + point { + x: 586345.68815281987 + y: 4140685.6762909689 + } + point { + x: 586345.56125069747 + y: 4140685.7897441746 + } + point { + x: 586345.43434857507 + y: 4140685.9031973807 + } + point { + x: 586345.30744645279 + y: 4140686.0166505864 + } + point { + x: 586345.18054433039 + y: 4140686.1301037921 + } + point { + x: 586345.053642208 + y: 4140686.2435569977 + } + point { + x: 586344.92674008559 + y: 4140686.3570102039 + } + point { + x: 586344.79983796331 + y: 4140686.4704634096 + } + point { + x: 586344.67293584091 + y: 4140686.5839166152 + } + point { + x: 586344.54603371851 + y: 4140686.6973698214 + } + point { + x: 586344.41913159611 + y: 4140686.810823027 + } + point { + x: 586344.29222947382 + y: 4140686.9242762327 + } + point { + x: 586344.16532735142 + y: 4140687.0377294389 + } + point { + x: 586344.02943487035 + y: 4140687.1588886632 + } + point { + x: 586343.95230469562 + y: 4140687.3011883148 + } + point { + x: 586343.875174521 + y: 4140687.4434879669 + } + point { + x: 586343.79804434627 + y: 4140687.5857876185 + } + point { + x: 586343.72091417166 + y: 4140687.7280872706 + } + point { + x: 586343.643783997 + y: 4140687.8703869223 + } + point { + x: 586343.56665382232 + y: 4140688.0126865744 + } + point { + x: 586343.4895236477 + y: 4140688.154986226 + } + point { + x: 586343.41239347309 + y: 4140688.2972858781 + } + point { + x: 586343.33526329836 + y: 4140688.43958553 + } + point { + x: 586343.25813312375 + y: 4140688.5818851818 + } + point { + x: 586343.18100294913 + y: 4140688.7241848339 + } + point { + x: 586343.1038727744 + y: 4140688.8664844856 + } + point { + x: 586343.02674259979 + y: 4140689.0087841377 + } + point { + x: 586342.949612425 + y: 4140689.1510837893 + } + point { + x: 586342.87831022893 + y: 4140689.2835487211 + } + point { + x: 586342.83490688 + y: 4140689.431658647 + } + point { + x: 586342.79150353116 + y: 4140689.5797685729 + } + point { + x: 586342.74810018227 + y: 4140689.7278784988 + } + point { + x: 586342.70469683339 + y: 4140689.8759884248 + } + point { + x: 586342.6612934845 + y: 4140690.0240983507 + } + point { + x: 586342.61789013562 + y: 4140690.1722082766 + } + point { + x: 586342.55869757663 + y: 4140690.3676857753 + } + point { + x: 586342.55811543646 + y: 4140690.5261298358 + } + point { + x: 586342.55753329629 + y: 4140690.6845738962 + } + point { + x: 586342.55695115612 + y: 4140690.8430179567 + } + point { + x: 586342.556369016 + y: 4140691.0014620177 + } + point { + x: 586342.55578687578 + y: 4140691.1599060781 + } + point { + x: 586342.5552047356 + y: 4140691.3183501386 + } + point { + x: 586342.55462259543 + y: 4140691.4767941991 + } + point { + x: 586342.55404045526 + y: 4140691.6352382596 + } + point { + x: 586342.55345831509 + y: 4140691.7936823205 + } + point { + x: 586342.55287617492 + y: 4140691.952126381 + } + point { + x: 586342.55229403474 + y: 4140692.1105704415 + } + point { + x: 586342.55224384693 + y: 4140692.2557157562 + } + point { + x: 586342.58864930947 + y: 4140692.4516071687 + } + point { + x: 586342.62582384958 + y: 4140692.6473087566 + } + point { + x: 586342.6637494904 + y: 4140692.8428249569 + } + point { + x: 586342.70240825508 + y: 4140693.0381602072 + } + point { + x: 586342.74178216688 + y: 4140693.233318944 + } + point { + x: 586342.78185324883 + y: 4140693.4283056054 + } + point { + x: 586342.82260352431 + y: 4140693.6231246274 + } + point { + x: 586342.86401501624 + y: 4140693.8177804481 + } + point { + x: 586342.906069748 + y: 4140694.012277504 + } + point { + x: 586342.9487497427 + y: 4140694.2066202327 + } + point { + x: 586342.99203702353 + y: 4140694.4008130711 + } + point { + x: 586343.03591361351 + y: 4140694.5948604564 + } + point { + x: 586343.080361536 + y: 4140694.788766826 + } + point { + x: 586343.125362814 + y: 4140694.9825366167 + } + point { + x: 586343.17089947092 + y: 4140695.1761742658 + } + point { + x: 586343.21695352974 + y: 4140695.3696842105 + } + point { + x: 586343.26350701367 + y: 4140695.5630708882 + } + point { + x: 586343.310541946 + y: 4140695.7563387351 + } + point { + x: 586343.35804034967 + y: 4140695.9494921896 + } + point { + x: 586343.405984248 + y: 4140696.1425356879 + } + point { + x: 586343.4543556642 + y: 4140696.3354736678 + } + point { + x: 586343.50313662132 + y: 4140696.5283105657 + } + point { + x: 586343.55230914254 + y: 4140696.72105082 + } + point { + x: 586343.60185525124 + y: 4140696.9136988665 + } + point { + x: 586343.65175697033 + y: 4140697.106259143 + } + point { + x: 586343.70199632307 + y: 4140697.2987360866 + } + point { + x: 586343.75255533273 + y: 4140697.4911341346 + } + point { + x: 586343.80341602233 + y: 4140697.6834577238 + } + point { + x: 586343.85456041514 + y: 4140697.8757112916 + } + point { + x: 586343.90597053431 + y: 4140698.0678992751 + } + point { + x: 586343.957628403 + y: 4140698.2600261113 + } + point { + x: 586344.00951604429 + y: 4140698.4520962378 + } + point { + x: 586344.06161548162 + y: 4140698.6441140915 + } + point { + x: 586344.1139087379 + y: 4140698.8360841093 + } + point { + x: 586344.16637783637 + y: 4140699.0280107288 + } + point { + x: 586344.21900480019 + y: 4140699.2198983864 + } + point { + x: 586344.27177165262 + y: 4140699.4117515204 + } + point { + x: 586344.32466041681 + y: 4140699.603574567 + } + point { + x: 586344.37765311578 + y: 4140699.7953719636 + } + point { + x: 586344.43073177291 + y: 4140699.9871481475 + } + point { + x: 586344.48387841124 + y: 4140700.178907556 + } + point { + x: 586344.537075054 + y: 4140700.3706546258 + } + point { + x: 586344.5903037244 + y: 4140700.5623937948 + } + point { + x: 586344.64354644541 + y: 4140700.7541294992 + } + point { + x: 586344.69678524043 + y: 4140700.9458661764 + } + point { + x: 586344.75000213261 + y: 4140701.1376082641 + } + point { + x: 586344.803179145 + y: 4140701.3293601992 + } + point { + x: 586344.85629830079 + y: 4140701.5211264188 + } + point { + x: 586344.90934162575 + y: 4140701.712911359 + } + point { + x: 586344.962295973 + y: 4140701.904718264 + } + point { + x: 586345.01516315481 + y: 4140702.0965466872 + } + point { + x: 586345.06794787524 + y: 4140702.2883954686 + } + point { + x: 586345.12065483863 + y: 4140702.4802634497 + } + point { + x: 586345.17328874918 + y: 4140702.6721494715 + } + point { + x: 586345.225854311 + y: 4140702.8640523739 + } + point { + x: 586345.27835622861 + y: 4140703.0559709989 + } + point { + x: 586345.33079920616 + y: 4140703.2479041861 + } + point { + x: 586345.38318794768 + y: 4140703.4398507774 + } + point { + x: 586345.43552715762 + y: 4140703.6318096132 + } + point { + x: 586345.4878215401 + y: 4140703.8237795341 + } + point { + x: 586345.54007579945 + y: 4140704.015759381 + } + point { + x: 586345.59229463991 + y: 4140704.2077479949 + } + point { + x: 586345.64448276558 + y: 4140704.3997442168 + } + point { + x: 586345.69664488069 + y: 4140704.5917468872 + } + point { + x: 586345.74878568971 + y: 4140704.783754847 + } + point { + x: 586345.80090989673 + y: 4140704.9757669368 + } + point { + x: 586345.85302220588 + y: 4140705.1677819979 + } + point { + x: 586345.9051273216 + y: 4140705.359798871 + } + point { + x: 586345.9572299479 + y: 4140705.5518163969 + } + point { + x: 586346.00933478924 + y: 4140705.7438334161 + } + point { + x: 586346.06144654984 + y: 4140705.9358487697 + } + point { + x: 586346.11356993369 + y: 4140706.1278612986 + } + point { + x: 586346.16570964537 + y: 4140706.3198698433 + } + point { + x: 586346.21787014115 + y: 4140706.5118733062 + } + point { + x: 586346.27005260717 + y: 4140706.703871395 + } + point { + x: 586346.32225591119 + y: 4140706.895864387 + } + point { + x: 586346.37447887147 + y: 4140707.0878525707 + } + point { + x: 586346.42672030639 + y: 4140707.2798362356 + } + point { + x: 586346.47897903423 + y: 4140707.4718156708 + } + point { + x: 586346.53125387337 + y: 4140707.6637911657 + } + point { + x: 586346.58354364219 + y: 4140707.8557630088 + } + point { + x: 586346.635847159 + y: 4140708.0477314894 + } + point { + x: 586346.68816324219 + y: 4140708.2396968966 + } + point { + x: 586346.7404907099 + y: 4140708.4316595197 + } + point { + x: 586346.79282838071 + y: 4140708.6236196477 + } + point { + x: 586346.8451750729 + y: 4140708.81557757 + } + point { + x: 586346.89752960461 + y: 4140709.0075335749 + } + point { + x: 586346.94989079447 + y: 4140709.1994879525 + } + point { + x: 586347.00225746073 + y: 4140709.3914409908 + } + point { + x: 586347.05462842155 + y: 4140709.58339298 + } + point { + x: 586347.10700249544 + y: 4140709.7753442088 + } + point { + x: 586347.15937850077 + y: 4140709.9672949663 + } + point { + x: 586347.2117552557 + y: 4140710.1592455413 + } + point { + x: 586347.26413157873 + y: 4140710.3511962229 + } + point { + x: 586347.31650628825 + y: 4140710.5431473008 + } + point { + x: 586347.3688782024 + y: 4140710.7350990642 + } + point { + x: 586347.42124613957 + y: 4140710.9270518012 + } + point { + x: 586347.47360891965 + y: 4140711.1190058012 + } + point { + x: 586347.52596576326 + y: 4140711.3109612544 + } + point { + x: 586347.578316848 + y: 4140711.5029181172 + } + point { + x: 586347.630662492 + y: 4140711.6948763118 + } + point { + x: 586347.68300301337 + y: 4140711.88683576 + } + point { + x: 586347.73533873016 + y: 4140712.0787963839 + } + point { + x: 586347.78766996029 + y: 4140712.2707581059 + } + point { + x: 586347.83999702206 + y: 4140712.4627208482 + } + point { + x: 586347.8923202334 + y: 4140712.6546845324 + } + point { + x: 586347.94463991246 + y: 4140712.8466490814 + } + point { + x: 586347.99695637717 + y: 4140713.038614417 + } + point { + x: 586348.04926994583 + y: 4140713.2305804612 + } + point { + x: 586348.10158093623 + y: 4140713.4225471364 + } + point { + x: 586348.15388966666 + y: 4140713.6145143644 + } + point { + x: 586348.206196455 + y: 4140713.8064820678 + } + point { + x: 586348.25850161957 + y: 4140713.9984501684 + } + point { + x: 586348.31080547825 + y: 4140714.1904185885 + } + point { + x: 586348.36310834915 + y: 4140714.38238725 + } + point { + x: 586348.41541055043 + y: 4140714.5743560754 + } + point { + x: 586348.4677124 + y: 4140714.7663249867 + } + point { + x: 586348.52001421608 + y: 4140714.9582939059 + } + point { + x: 586348.57231631654 + y: 4140715.1502627553 + } + point { + x: 586348.62461901968 + y: 4140715.3422314571 + } + point { + x: 586348.67692264344 + y: 4140715.5341999331 + } + point { + x: 586348.729227506 + y: 4140715.7261681054 + } + point { + x: 586348.78153390007 + y: 4140715.9181359028 + } + point { + x: 586348.83384187729 + y: 4140716.1101033129 + } + point { + x: 586348.886151354 + y: 4140716.302070356 + } + point { + x: 586348.9384622447 + y: 4140716.4940370526 + } + point { + x: 586348.9907744641 + y: 4140716.6860034242 + } + point { + x: 586349.04308792681 + y: 4140716.8779694913 + } + point { + x: 586349.09540254751 + y: 4140717.0699352748 + } + point { + x: 586349.147718241 + y: 4140717.2619007961 + } + point { + x: 586349.20003492164 + y: 4140717.4538660757 + } + point { + x: 586349.25235250441 + y: 4140717.6458311342 + } + point { + x: 586349.30467090383 + y: 4140717.8377959928 + } + point { + x: 586349.35699003458 + y: 4140718.0297606727 + } + point { + x: 586349.40930981131 + y: 4140718.2217251947 + } + point { + x: 586349.4616301487 + y: 4140718.4136895789 + } + point { + x: 586349.51395096141 + y: 4140718.6056538471 + } + point { + x: 586349.566272164 + y: 4140718.79761802 + } + point { + x: 586349.61859367124 + y: 4140718.9895821181 + } + point { + x: 586349.67091539782 + y: 4140719.1815461628 + } + point { + x: 586349.72323725838 + y: 4140719.3735101745 + } + point { + x: 586349.77555916749 + y: 4140719.5654741745 + } + point { + x: 586349.82788103994 + y: 4140719.7574381833 + } + point { + x: 586349.88020279026 + y: 4140719.9494022224 + } + point { + x: 586349.93252433313 + y: 4140720.1413663123 + } + point { + x: 586349.98484558333 + y: 4140720.3333304734 + } + point { + x: 586350.03716645588 + y: 4140720.5252947276 + } + point { + x: 586350.0894869006 + y: 4140720.7172590862 + } + point { + x: 586350.14180693333 + y: 4140720.9092235458 + } + point { + x: 586350.19412657677 + y: 4140721.1011881009 + } + point { + x: 586350.24644585385 + y: 4140721.2931527453 + } + point { + x: 586350.2987647875 + y: 4140721.4851174741 + } + point { + x: 586350.35108340043 + y: 4140721.6770822811 + } + point { + x: 586350.40340171556 + y: 4140721.8690471612 + } + point { + x: 586350.45571975573 + y: 4140722.0610121083 + } + point { + x: 586350.508037544 + y: 4140722.2529771174 + } + point { + x: 586350.56035510288 + y: 4140722.4449421824 + } + point { + x: 586350.61267245549 + y: 4140722.6369072981 + } + point { + x: 586350.66498962464 + y: 4140722.8288724585 + } + point { + x: 586350.71730663325 + y: 4140723.0208376581 + } + point { + x: 586350.769623504 + y: 4140723.2128028916 + } + point { + x: 586350.82194026 + y: 4140723.4047681531 + } + point { + x: 586350.87425692391 + y: 4140723.5967334374 + } + point { + x: 586350.92657351855 + y: 4140723.7886987384 + } + point { + x: 586350.97889006708 + y: 4140723.9806640507 + } + point { + x: 586351.031206592 + y: 4140724.172629369 + } + point { + x: 586351.08352311642 + y: 4140724.3645946868 + } + point { + x: 586351.13583966321 + y: 4140724.5565599995 + } + point { + x: 586351.188156255 + y: 4140724.7485253015 + } + point { + x: 586351.24047291488 + y: 4140724.9404905862 + } + point { + x: 586351.29278966563 + y: 4140725.1324558491 + } + point { + x: 586351.34510652756 + y: 4140725.3244210845 + } + point { + x: 586351.39742350264 + y: 4140725.5163862924 + } + point { + x: 586351.44974058494 + y: 4140725.7083514738 + } + point { + x: 586351.502057768 + y: 4140725.9003166305 + } + point { + x: 586351.554375046 + y: 4140726.0922817644 + } + point { + x: 586351.60669241275 + y: 4140726.2842468764 + } + point { + x: 586351.659009862 + y: 4140726.4762119679 + } + point { + x: 586351.71132738772 + y: 4140726.6681770408 + } + point { + x: 586351.76364498376 + y: 4140726.8601420969 + } + point { + x: 586351.81596264406 + y: 4140727.0521071367 + } + point { + x: 586351.86828036245 + y: 4140727.2440721625 + } + point { + x: 586351.92059813277 + y: 4140727.4360371758 + } + point { + x: 586351.97291594883 + y: 4140727.6280021779 + } + point { + x: 586352.02523380471 + y: 4140727.8199671702 + } + point { + x: 586352.07755169412 + y: 4140728.0119321542 + } + point { + x: 586352.129869611 + y: 4140728.2038971311 + } + point { + x: 586352.18218754919 + y: 4140728.3958621034 + } + point { + x: 586352.23450550251 + y: 4140728.587827072 + } + point { + x: 586352.286823465 + y: 4140728.7797920378 + } + point { + x: 586352.33914143045 + y: 4140728.9717570036 + } + point { + x: 586352.39145939262 + y: 4140729.1637219694 + } + point { + x: 586352.44377734559 + y: 4140729.3556869379 + } + point { + x: 586352.49609528307 + y: 4140729.54765191 + } + point { + x: 586352.548413199 + y: 4140729.7396168881 + } + point { + x: 586352.60073108738 + y: 4140729.931581872 + } + point { + x: 586352.65304894489 + y: 4140730.1235468639 + } + point { + x: 586352.70536677307 + y: 4140730.3155118632 + } + point { + x: 586352.75768457341 + y: 4140730.507476869 + } + point { + x: 586352.81000234769 + y: 4140730.6994418814 + } + point { + x: 586352.86232009728 + y: 4140730.8914068993 + } + point { + x: 586352.914637824 + y: 4140731.0833719233 + } + point { + x: 586352.96695552964 + y: 4140731.2753369524 + } + point { + x: 586353.01927321567 + y: 4140731.4673019862 + } + point { + x: 586353.07159088366 + y: 4140731.6592670246 + } + point { + x: 586353.12390853534 + y: 4140731.8512320668 + } + point { + x: 586353.17622617236 + y: 4140732.0431971126 + } + point { + x: 586353.22854379634 + y: 4140732.2351621618 + } + point { + x: 586353.280861409 + y: 4140732.4271272132 + } + point { + x: 586353.33317901182 + y: 4140732.6190922675 + } + point { + x: 586353.38549660658 + y: 4140732.8110573236 + } + point { + x: 586353.437814195 + y: 4140733.0030223816 + } + point { + x: 586353.49013177841 + y: 4140733.1949874405 + } + point { + x: 586353.54244935873 + y: 4140733.3869525003 + } + point { + x: 586353.59476693755 + y: 4140733.57891756 + } + point { + x: 586353.64708451636 + y: 4140733.7708826205 + } + point { + x: 586353.69940209691 + y: 4140733.96284768 + } + point { + x: 586353.751719681 + y: 4140734.1548127388 + } + point { + x: 586353.80403727 + y: 4140734.3467777963 + } + point { + x: 586353.85635486571 + y: 4140734.5387428524 + } + point { + x: 586353.90867246944 + y: 4140734.7307079062 + } + point { + x: 586353.96099008131 + y: 4140734.9226729581 + } + point { + x: 586354.01330770075 + y: 4140735.1146380082 + } + point { + x: 586354.06562532741 + y: 4140735.3066030564 + } + point { + x: 586354.11794296093 + y: 4140735.4985681032 + } + point { + x: 586354.17026060075 + y: 4140735.6905331486 + } + point { + x: 586354.22257824638 + y: 4140735.8824981921 + } + point { + x: 586354.2748958976 + y: 4140736.0744632343 + } + point { + x: 586354.32721355371 + y: 4140736.2664282755 + } + point { + x: 586354.37953121448 + y: 4140736.4583933158 + } + point { + x: 586354.43184887932 + y: 4140736.6503583547 + } + point { + x: 586354.48416654789 + y: 4140736.8423233926 + } + point { + x: 586354.5364842196 + y: 4140737.03428843 + } + point { + x: 586354.58880189422 + y: 4140737.2262534667 + } + point { + x: 586354.64111957117 + y: 4140737.4182185028 + } + point { + x: 586354.6934372501 + y: 4140737.6101835384 + } + point { + x: 586354.74575493054 + y: 4140737.8021485736 + } + point { + x: 586354.798072612 + y: 4140737.9941136083 + } + point { + x: 586354.8503902941 + y: 4140738.186078643 + } + point { + x: 586354.90270797629 + y: 4140738.3780436781 + } + point { + x: 586354.95502565836 + y: 4140738.5700087128 + } + point { + x: 586355.00734333962 + y: 4140738.7619737475 + } + point { + x: 586355.05966101971 + y: 4140738.9539387831 + } + point { + x: 586355.11197869829 + y: 4140739.1459038188 + } + point { + x: 586355.16429637477 + y: 4140739.3378688549 + } + point { + x: 586355.216614049 + y: 4140739.5298338914 + } + point { + x: 586355.26893172134 + y: 4140739.7217989285 + } + point { + x: 586355.32124939153 + y: 4140739.9137639664 + } + point { + x: 586355.37356705987 + y: 4140740.1057290044 + } + point { + x: 586355.42588472646 + y: 4140740.2976940433 + } + point { + x: 586355.47820239153 + y: 4140740.4896590821 + } + point { + x: 586355.530520055 + y: 4140740.6816241215 + } + point { + x: 586355.582837717 + y: 4140740.8735891613 + } + point { + x: 586355.63515537779 + y: 4140741.0655542011 + } + point { + x: 586355.6874730374 + y: 4140741.2575192414 + } + point { + x: 586355.73979069607 + y: 4140741.4494842817 + } + point { + x: 586355.79210835369 + y: 4140741.6414493229 + } + point { + x: 586355.8444260105 + y: 4140741.8334143637 + } + point { + x: 586355.89674366673 + y: 4140742.0253794049 + } + point { + x: 586355.94906132226 + y: 4140742.2173444461 + } + point { + x: 586356.00137897744 + y: 4140742.4093094873 + } + point { + x: 586356.05369663227 + y: 4140742.601274529 + } + point { + x: 586356.10601428687 + y: 4140742.79323957 + } + point { + x: 586356.15833194135 + y: 4140742.9852046119 + } + point { + x: 586356.21064959583 + y: 4140743.1771696536 + } + point { + x: 586356.26296725043 + y: 4140743.3691346953 + } + point { + x: 586356.31528490537 + y: 4140743.5610997365 + } + point { + x: 586356.36760256067 + y: 4140743.7530647777 + } + point { + x: 586356.41992021643 + y: 4140743.9450298189 + } + point { + x: 586356.47223787266 + y: 4140744.13699486 + } + point { + x: 586356.52455552958 + y: 4140744.3289599009 + } + point { + x: 586356.57687318709 + y: 4140744.5209249421 + } + point { + x: 586356.62919084507 + y: 4140744.7128899824 + } + point { + x: 586356.68150850351 + y: 4140744.9048550231 + } + point { + x: 586356.73382616241 + y: 4140745.0968200634 + } + point { + x: 586356.78614382178 + y: 4140745.2887851042 + } + point { + x: 586356.8384614815 + y: 4140745.4807501445 + } + point { + x: 586356.89077914157 + y: 4140745.6727151843 + } + point { + x: 586356.943096802 + y: 4140745.8646802246 + } + point { + x: 586356.99541446264 + y: 4140746.0566452644 + } + point { + x: 586357.04773212364 + y: 4140746.2486103047 + } + point { + x: 586357.10004978476 + y: 4140746.4405753445 + } + point { + x: 586357.15236744622 + y: 4140746.6325403843 + } + point { + x: 586357.20468510769 + y: 4140746.8245054241 + } + point { + x: 586357.25700276939 + y: 4140747.0164704639 + } + point { + x: 586357.3093204312 + y: 4140747.2084355038 + } + point { + x: 586357.36163809313 + y: 4140747.4004005436 + } + point { + x: 586357.413955755 + y: 4140747.5923655829 + } + point { + x: 586357.46627341688 + y: 4140747.7843306228 + } + point { + x: 586357.51859107881 + y: 4140747.9762956626 + } + point { + x: 586357.57090874063 + y: 4140748.1682607024 + } + point { + x: 586357.62322640244 + y: 4140748.3602257422 + } + point { + x: 586357.675544064 + y: 4140748.552190782 + } + point { + x: 586357.72786172561 + y: 4140748.7441558219 + } + point { + x: 586357.78017938684 + y: 4140748.9361208617 + } + point { + x: 586357.83249704808 + y: 4140749.1280859015 + } + point { + x: 586357.88481470908 + y: 4140749.3200509413 + } + point { + x: 586357.93713237008 + y: 4140749.5120159811 + } + point { + x: 586357.98945003084 + y: 4140749.7039810214 + } + point { + x: 586358.04176769149 + y: 4140749.8959460612 + } + point { + x: 586358.094085352 + y: 4140750.0879111015 + } + point { + x: 586358.14640301256 + y: 4140750.2798761413 + } + point { + x: 586358.19872067287 + y: 4140750.4718411816 + } + point { + x: 586358.25103833317 + y: 4140750.6638062219 + } + point { + x: 586358.30335599335 + y: 4140750.8557712617 + } + point { + x: 586358.35567365354 + y: 4140751.047736302 + } + point { + x: 586358.40799131361 + y: 4140751.2397013423 + } + point { + x: 586358.46030897368 + y: 4140751.4316663826 + } + point { + x: 586358.51262663363 + y: 4140751.6236314224 + } + point { + x: 586358.5649442937 + y: 4140751.8155964627 + } + point { + x: 586358.61726195365 + y: 4140752.007561503 + } + point { + x: 586358.66957961349 + y: 4140752.1995265433 + } + point { + x: 586358.72189727344 + y: 4140752.3914915835 + } + point { + x: 586358.77421493339 + y: 4140752.5834566238 + } + point { + x: 586358.82653259335 + y: 4140752.7754216637 + } + point { + x: 586358.8788502533 + y: 4140752.9673867039 + } + point { + x: 586358.93116791325 + y: 4140753.1593517442 + } + point { + x: 586358.98348557332 + y: 4140753.3513167845 + } + point { + x: 586359.03580323339 + y: 4140753.5432818248 + } + point { + x: 586359.08812089346 + y: 4140753.7352468646 + } + point { + x: 586359.14043855364 + y: 4140753.9272119049 + } + point { + x: 586359.19275621383 + y: 4140754.1191769452 + } + point { + x: 586359.245073874 + y: 4140754.3111419855 + } + point { + x: 586359.2973915342 + y: 4140754.5031070253 + } + point { + x: 586359.3497091945 + y: 4140754.6950720656 + } + point { + x: 586359.4020268548 + y: 4140754.8870371059 + } + point { + x: 586359.45434451511 + y: 4140755.0790021457 + } + point { + x: 586359.50666217552 + y: 4140755.270967186 + } + point { + x: 586359.55897983583 + y: 4140755.4629322258 + } + point { + x: 586359.61129749625 + y: 4140755.6548972661 + } + point { + x: 586359.66361515666 + y: 4140755.8468623064 + } + point { + x: 586359.71593281708 + y: 4140756.0388273462 + } + point { + x: 586359.7682504775 + y: 4140756.2307923865 + } + point { + x: 586359.820568138 + y: 4140756.4227574263 + } + point { + x: 586359.87288579845 + y: 4140756.6147224666 + } + point { + x: 586359.92520345887 + y: 4140756.8066875064 + } + point { + x: 586359.97752111929 + y: 4140756.9986525467 + } + point { + x: 586360.02983877982 + y: 4140757.190617587 + } + point { + x: 586360.08215644024 + y: 4140757.3825826268 + } + point { + x: 586360.13447410066 + y: 4140757.5745476671 + } + point { + x: 586360.1867917612 + y: 4140757.7665127069 + } + point { + x: 586360.23910942161 + y: 4140757.9584777472 + } + point { + x: 586360.291427082 + y: 4140758.150442787 + } + point { + x: 586360.34374474245 + y: 4140758.3424078273 + } + point { + x: 586360.39606240287 + y: 4140758.5343728676 + } + point { + x: 586360.44838006329 + y: 4140758.7263379074 + } + point { + x: 586360.50069772359 + y: 4140758.9183029477 + } + point { + x: 586360.553015384 + y: 4140759.1102679875 + } + point { + x: 586360.60533304443 + y: 4140759.3022330278 + } + point { + x: 586360.65765070473 + y: 4140759.494198068 + } + point { + x: 586360.70996836515 + y: 4140759.6861631079 + } + point { + x: 586360.76228602545 + y: 4140759.8781281481 + } + point { + x: 586360.81460368575 + y: 4140760.0700931884 + } + point { + x: 586360.86692134617 + y: 4140760.2620582283 + } + point { + x: 586360.91923900647 + y: 4140760.4540232685 + } + point { + x: 586360.97155666677 + y: 4140760.6459883084 + } + point { + x: 586361.02387432707 + y: 4140760.8379533486 + } + point { + x: 586361.07619198749 + y: 4140761.0299183889 + } + point { + x: 586361.12850964779 + y: 4140761.2218834287 + } + point { + x: 586361.1808273081 + y: 4140761.413848469 + } + point { + x: 586361.2331449684 + y: 4140761.6058135093 + } + point { + x: 586361.2854626287 + y: 4140761.7977785491 + } + point { + x: 586361.337780289 + y: 4140761.9897435894 + } + point { + x: 586361.3900979493 + y: 4140762.1817086297 + } + point { + x: 586361.44241560972 + y: 4140762.3736736695 + } + point { + x: 586361.49473327 + y: 4140762.56563871 + } + point { + x: 586361.54705093033 + y: 4140762.7576037496 + } + point { + x: 586361.59936859063 + y: 4140762.94956879 + } + point { + x: 586361.65168625093 + y: 4140763.14153383 + } + point { + x: 586361.70400391135 + y: 4140763.33349887 + } + point { + x: 586361.75632157165 + y: 4140763.5254639103 + } + point { + x: 586361.808639232 + y: 4140763.7174289506 + } + point { + x: 586361.86095689237 + y: 4140763.9093939904 + } + point { + x: 586361.91327455267 + y: 4140764.1013590307 + } + point { + x: 586361.965592213 + y: 4140764.2933240705 + } + point { + x: 586362.01790987339 + y: 4140764.4852891108 + } + point { + x: 586362.0702275337 + y: 4140764.6772541511 + } + point { + x: 586362.122545194 + y: 4140764.8692191909 + } + point { + x: 586362.17486285442 + y: 4140765.0611842312 + } + point { + x: 586362.22718051472 + y: 4140765.2531492715 + } + point { + x: 586362.27949817514 + y: 4140765.4451143113 + } + point { + x: 586362.33181583544 + y: 4140765.6370793516 + } + point { + x: 586362.38413349586 + y: 4140765.8290443914 + } + point { + x: 586362.43645115616 + y: 4140766.0210094317 + } + point { + x: 586362.48876881658 + y: 4140766.212974472 + } + point { + x: 586362.54108647688 + y: 4140766.4049395118 + } + point { + x: 586362.59340413718 + y: 4140766.5969045521 + } + point { + x: 586362.6457217976 + y: 4140766.7888695924 + } + point { + x: 586362.6980394579 + y: 4140766.9808346322 + } + point { + x: 586362.75035711832 + y: 4140767.1727996725 + } + point { + x: 586362.80267477862 + y: 4140767.3647647123 + } + point { + x: 586362.854992439 + y: 4140767.5567297526 + } + point { + x: 586362.90731009934 + y: 4140767.7486947929 + } + point { + x: 586362.95962775976 + y: 4140767.9406598327 + } + point { + x: 586363.01194542006 + y: 4140768.132624873 + } + point { + x: 586363.06426308036 + y: 4140768.3245899128 + } + point { + x: 586363.11658074078 + y: 4140768.5165549531 + } + point { + x: 586363.16889840108 + y: 4140768.7085199933 + } + point { + x: 586363.2212160615 + y: 4140768.9004850332 + } + point { + x: 586363.2735337218 + y: 4140769.0924500735 + } + point { + x: 586363.32585138211 + y: 4140769.2844151137 + } + point { + x: 586363.37816904252 + y: 4140769.4763801536 + } + point { + x: 586363.43048670283 + y: 4140769.6683451938 + } + point { + x: 586363.48280436313 + y: 4140769.8603102337 + } + point { + x: 586363.53512202355 + y: 4140770.0522752739 + } + point { + x: 586363.58743968385 + y: 4140770.2442403142 + } + point { + x: 586363.63975734427 + y: 4140770.4362053541 + } + point { + x: 586363.69207500457 + y: 4140770.6281703943 + } + point { + x: 586363.74439266487 + y: 4140770.8201354346 + } + point { + x: 586363.79671032529 + y: 4140771.0121004744 + } + point { + x: 586363.84902798559 + y: 4140771.2040655147 + } + point { + x: 586363.90134564589 + y: 4140771.3960305545 + } + point { + x: 586363.95366330631 + y: 4140771.5879955948 + } + point { + x: 586364.00598096661 + y: 4140771.7799606351 + } + point { + x: 586364.058298627 + y: 4140771.9719256749 + } + point { + x: 586364.11061628733 + y: 4140772.1638907152 + } + point { + x: 586364.16293394763 + y: 4140772.3558557555 + } + point { + x: 586364.215251608 + y: 4140772.5478207953 + } + point { + x: 586364.26756926836 + y: 4140772.7397858356 + } + point { + x: 586364.31988692866 + y: 4140772.9317508754 + } + point { + x: 586364.37220458908 + y: 4140773.1237159157 + } + point { + x: 586364.42452224938 + y: 4140773.315680956 + } + point { + x: 586364.4768399098 + y: 4140773.5076459958 + } + point { + x: 586364.5291575701 + y: 4140773.6996110361 + } + point { + x: 586364.5814752304 + y: 4140773.8915760764 + } + point { + x: 586364.63379289082 + y: 4140774.0835411162 + } + point { + x: 586364.68611055112 + y: 4140774.2755061565 + } + point { + x: 586364.73842821154 + y: 4140774.4674711963 + } + point { + x: 586364.79074587184 + y: 4140774.6594362366 + } + point { + x: 586364.84306353214 + y: 4140774.8514012769 + } + point { + x: 586364.89538119256 + y: 4140775.0433663167 + } + point { + x: 586364.94769885286 + y: 4140775.235331357 + } + point { + x: 586365.00001651316 + y: 4140775.4272963973 + } + point { + x: 586365.05233417358 + y: 4140775.6192614371 + } + point { + x: 586365.10465183388 + y: 4140775.8112264774 + } + point { + x: 586365.1569694943 + y: 4140776.0031915172 + } + point { + x: 586365.2092871546 + y: 4140776.1951565575 + } + point { + x: 586365.26160481491 + y: 4140776.3871215978 + } + point { + x: 586365.31392247532 + y: 4140776.5790866376 + } + point { + x: 586365.36624013563 + y: 4140776.7710516779 + } + point { + x: 586365.418557796 + y: 4140776.9630167182 + } + point { + x: 586365.47087545635 + y: 4140777.154981758 + } + point { + x: 586365.52319311665 + y: 4140777.3469467983 + } + point { + x: 586365.57551077707 + y: 4140777.5389118381 + } + point { + x: 586365.62782843737 + y: 4140777.7308768784 + } + point { + x: 586365.68014609779 + y: 4140777.9228419187 + } + point { + x: 586365.73246375809 + y: 4140778.1148069585 + } + point { + x: 586365.78478141839 + y: 4140778.3067719988 + } + point { + x: 586365.83709907881 + y: 4140778.4987370386 + } + point { + x: 586365.88941673911 + y: 4140778.6907020789 + } + point { + x: 586365.94173439953 + y: 4140778.8826671191 + } + point { + x: 586365.99405205983 + y: 4140779.074632159 + } + point { + x: 586366.04636972013 + y: 4140779.2665971993 + } + point { + x: 586366.09868738055 + y: 4140779.4585622395 + } + point { + x: 586366.15100504085 + y: 4140779.6505272794 + } + point { + x: 586366.20332270127 + y: 4140779.8424923196 + } + point { + x: 586366.25564036157 + y: 4140780.0344573595 + } + point { + x: 586366.30795802188 + y: 4140780.2264223997 + } + point { + x: 586366.36027568229 + y: 4140780.41838744 + } + point { + x: 586366.4125933426 + y: 4140780.61035248 + } + point { + x: 586366.464911003 + y: 4140780.80231752 + } + point { + x: 586366.51722866332 + y: 4140780.9942825604 + } + point { + x: 586366.56954632362 + y: 4140781.1862476002 + } + point { + x: 586366.621863984 + y: 4140781.3782126405 + } + point { + x: 586366.67418164434 + y: 4140781.5701776803 + } + point { + x: 586366.72649930476 + y: 4140781.7621427206 + } + point { + x: 586366.77881696506 + y: 4140781.9541077609 + } + point { + x: 586366.83113462536 + y: 4140782.1460728007 + } + point { + x: 586366.88345228578 + y: 4140782.338037841 + } + point { + x: 586366.93576994608 + y: 4140782.5300028813 + } + point { + x: 586366.9880876065 + y: 4140782.7219679211 + } + point { + x: 586367.0404052668 + y: 4140782.9139329614 + } + point { + x: 586367.0927229271 + y: 4140783.1058980012 + } + point { + x: 586367.14504058752 + y: 4140783.2978630415 + } + point { + x: 586367.19735824782 + y: 4140783.4898280818 + } + point { + x: 586367.24967590813 + y: 4140783.6817931216 + } + point { + x: 586367.30199356854 + y: 4140783.8737581619 + } + point { + x: 586367.35431122885 + y: 4140784.0657232022 + } + point { + x: 586367.40662888926 + y: 4140784.257688242 + } + point { + x: 586367.45894654957 + y: 4140784.4496532823 + } + point { + x: 586367.51126420987 + y: 4140784.6416183221 + } + point { + x: 586367.56358187029 + y: 4140784.8335833624 + } + point { + x: 586367.61589953059 + y: 4140785.0255484027 + } + point { + x: 586367.66821719089 + y: 4140785.2175134425 + } + point { + x: 586367.72053485131 + y: 4140785.4094784828 + } + point { + x: 586367.77285251161 + y: 4140785.6014435231 + } + point { + x: 586367.825170172 + y: 4140785.7934085629 + } + point { + x: 586367.87748783233 + y: 4140785.9853736032 + } + point { + x: 586367.93636111321 + y: 4140786.2013956155 + } + } + } + } + left_boundary { + curve { + segment { + line_segment { + point { + x: 586392.40718075773 + y: 4140671.3166957693 + } + point { + x: 586392.21339513129 + y: 4140671.366164254 + } + point { + x: 586392.01960950484 + y: 4140671.4156327387 + } + point { + x: 586391.8258238784 + y: 4140671.4651012234 + } + point { + x: 586391.632038252 + y: 4140671.5145697086 + } + point { + x: 586391.43825262552 + y: 4140671.5640381933 + } + point { + x: 586391.24446699908 + y: 4140671.613506678 + } + point { + x: 586391.05068137276 + y: 4140671.6629751627 + } + point { + x: 586390.85689574631 + y: 4140671.7124436479 + } + point { + x: 586390.66311011987 + y: 4140671.7619121326 + } + point { + x: 586390.46932449343 + y: 4140671.8113806173 + } + point { + x: 586390.275538867 + y: 4140671.860849102 + } + point { + x: 586390.08175324055 + y: 4140671.9103175872 + } + point { + x: 586389.88796761411 + y: 4140671.9597860719 + } + point { + x: 586389.69418198778 + y: 4140672.0092545566 + } + point { + x: 586389.50039636134 + y: 4140672.0587230418 + } + point { + x: 586389.3066107349 + y: 4140672.1081915265 + } + point { + x: 586389.11282510846 + y: 4140672.1576600112 + } + point { + x: 586388.919039482 + y: 4140672.2071284959 + } + point { + x: 586388.72525385558 + y: 4140672.2565969811 + } + point { + x: 586388.53146822914 + y: 4140672.3060654658 + } + point { + x: 586388.33768260281 + y: 4140672.3555339505 + } + point { + x: 586388.14389697637 + y: 4140672.4050024352 + } + point { + x: 586387.95011134993 + y: 4140672.4544709204 + } + point { + x: 586387.75632572349 + y: 4140672.5039394051 + } + point { + x: 586387.562540097 + y: 4140672.55340789 + } + point { + x: 586387.3687544706 + y: 4140672.6028763745 + } + point { + x: 586387.17496884416 + y: 4140672.6523448597 + } + point { + x: 586386.98118321784 + y: 4140672.7018133444 + } + point { + x: 586386.7873975914 + y: 4140672.7512818291 + } + point { + x: 586386.593611965 + y: 4140672.8007503138 + } + point { + x: 586386.39982633851 + y: 4140672.850218799 + } + point { + x: 586386.20604071207 + y: 4140672.8996872837 + } + point { + x: 586386.01225508563 + y: 4140672.9491557684 + } + point { + x: 586385.81846945919 + y: 4140672.9986242536 + } + point { + x: 586385.62468383287 + y: 4140673.0480927383 + } + point { + x: 586385.43089820642 + y: 4140673.097561223 + } + point { + x: 586385.23711258 + y: 4140673.1470297077 + } + point { + x: 586385.04332695354 + y: 4140673.1964981928 + } + point { + x: 586384.8495413271 + y: 4140673.2459666776 + } + point { + x: 586384.65575570066 + y: 4140673.2954351623 + } + point { + x: 586384.46197007422 + y: 4140673.344903647 + } + point { + x: 586384.26818444789 + y: 4140673.3943721321 + } + point { + x: 586384.07439882145 + y: 4140673.4438406168 + } + point { + x: 586383.880613195 + y: 4140673.4933091016 + } + point { + x: 586383.68682756857 + y: 4140673.5427775863 + } + point { + x: 586383.49304194213 + y: 4140673.5922460714 + } + point { + x: 586383.29925631569 + y: 4140673.6417145561 + } + point { + x: 586383.10547068925 + y: 4140673.6911830408 + } + point { + x: 586382.91168506292 + y: 4140673.7406515256 + } + point { + x: 586382.71789943648 + y: 4140673.7901200107 + } + point { + x: 586382.52411381 + y: 4140673.8395884954 + } + point { + x: 586382.3303281836 + y: 4140673.88905698 + } + point { + x: 586382.13654255716 + y: 4140673.9385254649 + } + point { + x: 586381.94275693072 + y: 4140673.98799395 + } + point { + x: 586381.74897130427 + y: 4140674.0374624347 + } + point { + x: 586381.555185678 + y: 4140674.0869309194 + } + point { + x: 586381.36140005151 + y: 4140674.1363994046 + } + point { + x: 586381.16761442507 + y: 4140674.1858678893 + } + point { + x: 586380.97382879863 + y: 4140674.235336374 + } + point { + x: 586380.78004317218 + y: 4140674.2848048587 + } + point { + x: 586380.58625754574 + y: 4140674.3342733439 + } + point { + x: 586380.39247191942 + y: 4140674.3837418286 + } + point { + x: 586380.198686293 + y: 4140674.4332103133 + } + point { + x: 586380.00490066654 + y: 4140674.482678798 + } + point { + x: 586379.81111504009 + y: 4140674.5321472832 + } + point { + x: 586379.61732941365 + y: 4140674.5816157679 + } + point { + x: 586379.42354378721 + y: 4140674.6310842526 + } + point { + x: 586379.22975816077 + y: 4140674.6805527373 + } + point { + x: 586379.03597253445 + y: 4140674.7300212225 + } + point { + x: 586378.842186908 + y: 4140674.7794897072 + } + point { + x: 586378.64840128156 + y: 4140674.8289581919 + } + point { + x: 586378.45461565512 + y: 4140674.8784266766 + } + point { + x: 586378.26083002868 + y: 4140674.9278951618 + } + point { + x: 586378.06704440224 + y: 4140674.9773636465 + } + point { + x: 586377.8732587758 + y: 4140675.0268321312 + } + point { + x: 586377.67947314947 + y: 4140675.0763006164 + } + point { + x: 586377.485687523 + y: 4140675.1257691011 + } + point { + x: 586377.29190189659 + y: 4140675.1752375858 + } + point { + x: 586377.09811627015 + y: 4140675.2247060705 + } + point { + x: 586376.90433064371 + y: 4140675.2741745557 + } + point { + x: 586376.71054501727 + y: 4140675.3236430404 + } + point { + x: 586376.51675939083 + y: 4140675.3731115251 + } + point { + x: 586376.3229737645 + y: 4140675.42258001 + } + point { + x: 586376.12918813806 + y: 4140675.472048495 + } + point { + x: 586375.93540251162 + y: 4140675.5215169797 + } + point { + x: 586375.74161688518 + y: 4140675.5709854644 + } + point { + x: 586375.54783125874 + y: 4140675.6204539491 + } + point { + x: 586375.3540456323 + y: 4140675.6699224343 + } + point { + x: 586375.16026000585 + y: 4140675.719390919 + } + point { + x: 586374.96647437953 + y: 4140675.7688594037 + } + point { + x: 586374.77268875309 + y: 4140675.8183278884 + } + point { + x: 586374.57890312665 + y: 4140675.8677963736 + } + point { + x: 586374.38511750021 + y: 4140675.9172648583 + } + point { + x: 586374.19133187376 + y: 4140675.966733343 + } + point { + x: 586373.99754624732 + y: 4140676.0162018277 + } + point { + x: 586373.80376062088 + y: 4140676.0656703128 + } + point { + x: 586373.60997499456 + y: 4140676.1151387976 + } + point { + x: 586373.41618936812 + y: 4140676.1646072823 + } + point { + x: 586373.22240374167 + y: 4140676.2140757674 + } + point { + x: 586373.02861811523 + y: 4140676.2635442521 + } + point { + x: 586372.83483248879 + y: 4140676.3130127368 + } + point { + x: 586372.64104686235 + y: 4140676.3624812216 + } + point { + x: 586372.44726123591 + y: 4140676.4119497067 + } + point { + x: 586372.25347560958 + y: 4140676.4614181914 + } + point { + x: 586372.05968998314 + y: 4140676.5108866761 + } + point { + x: 586371.8659043567 + y: 4140676.5603551609 + } + point { + x: 586371.67211873026 + y: 4140676.609823646 + } + point { + x: 586371.47833310382 + y: 4140676.6592921307 + } + point { + x: 586371.28454747738 + y: 4140676.7087606154 + } + point { + x: 586371.09076185094 + y: 4140676.7582291 + } + point { + x: 586370.89697622461 + y: 4140676.8076975853 + } + point { + x: 586370.70319059817 + y: 4140676.85716607 + } + point { + x: 586370.50940497173 + y: 4140676.9066345547 + } + point { + x: 586370.31561934529 + y: 4140676.9561030394 + } + point { + x: 586370.12183371885 + y: 4140677.0055715246 + } + point { + x: 586369.92804809241 + y: 4140677.0550400093 + } + point { + x: 586369.734262466 + y: 4140677.104508494 + } + point { + x: 586369.54047683964 + y: 4140677.1539769792 + } + point { + x: 586369.3466912132 + y: 4140677.2034454639 + } + point { + x: 586369.15290558676 + y: 4140677.2529139486 + } + point { + x: 586368.95911996032 + y: 4140677.3023824333 + } + point { + x: 586368.76533433388 + y: 4140677.3518509185 + } + point { + x: 586368.57154870743 + y: 4140677.4013194032 + } + point { + x: 586368.377763081 + y: 4140677.4507878879 + } + point { + x: 586368.18397745467 + y: 4140677.5002563726 + } + point { + x: 586367.99019182823 + y: 4140677.5497248578 + } + point { + x: 586367.79640620179 + y: 4140677.5991933425 + } + point { + x: 586367.60262057534 + y: 4140677.6486618272 + } + point { + x: 586367.4088349489 + y: 4140677.6981303119 + } + point { + x: 586367.21504932246 + y: 4140677.7475987971 + } + point { + x: 586367.021263696 + y: 4140677.7970672818 + } + point { + x: 586366.8274780697 + y: 4140677.8465357665 + } + point { + x: 586366.63369244325 + y: 4140677.8960042512 + } + point { + x: 586366.43990681681 + y: 4140677.9454727364 + } + point { + x: 586366.24612119037 + y: 4140677.9949412211 + } + point { + x: 586366.05233556393 + y: 4140678.0444097058 + } + point { + x: 586365.85854993749 + y: 4140678.0938781905 + } + point { + x: 586365.664764311 + y: 4140678.1433466757 + } + point { + x: 586365.47097868472 + y: 4140678.1928151604 + } + point { + x: 586365.27719305828 + y: 4140678.2422836451 + } + point { + x: 586365.08340743184 + y: 4140678.2917521303 + } + point { + x: 586364.8896218054 + y: 4140678.341220615 + } + point { + x: 586364.695836179 + y: 4140678.3906890997 + } + point { + x: 586364.50205055252 + y: 4140678.4401575844 + } + point { + x: 586364.30826492608 + y: 4140678.4896260696 + } + point { + x: 586364.11447929975 + y: 4140678.5390945543 + } + point { + x: 586363.92069367331 + y: 4140678.588563039 + } + point { + x: 586363.72690804687 + y: 4140678.6380315237 + } + point { + x: 586363.53312242043 + y: 4140678.6875000088 + } + point { + x: 586363.339336794 + y: 4140678.7369684936 + } + point { + x: 586363.14555116754 + y: 4140678.7864369783 + } + point { + x: 586362.9517655411 + y: 4140678.835905463 + } + point { + x: 586362.75797991478 + y: 4140678.8853739481 + } + point { + x: 586362.56419428834 + y: 4140678.9348424328 + } + point { + x: 586362.3704086619 + y: 4140678.9843109176 + } + point { + x: 586362.17662303546 + y: 4140679.0337794023 + } + point { + x: 586361.982837409 + y: 4140679.0832478874 + } + point { + x: 586361.78905178257 + y: 4140679.1327163721 + } + point { + x: 586361.59526615613 + y: 4140679.1821848569 + } + point { + x: 586361.40148052981 + y: 4140679.231653342 + } + point { + x: 586361.20769490337 + y: 4140679.2811218267 + } + point { + x: 586361.01390927692 + y: 4140679.3305903114 + } + point { + x: 586360.82012365048 + y: 4140679.3800587961 + } + point { + x: 586360.626338024 + y: 4140679.4295272813 + } + point { + x: 586360.4325523976 + y: 4140679.478995766 + } + point { + x: 586360.23876677128 + y: 4140679.5284642507 + } + point { + x: 586360.04498114483 + y: 4140679.5779327354 + } + point { + x: 586359.85119551839 + y: 4140679.6274012206 + } + point { + x: 586359.657409892 + y: 4140679.6768697053 + } + point { + x: 586359.46362426551 + y: 4140679.72633819 + } + point { + x: 586359.26983863907 + y: 4140679.7758066747 + } + point { + x: 586359.07605301263 + y: 4140679.82527516 + } + point { + x: 586358.8822673863 + y: 4140679.8747436446 + } + point { + x: 586358.68848175986 + y: 4140679.9242121293 + } + point { + x: 586358.49469613342 + y: 4140679.973680614 + } + point { + x: 586358.300910507 + y: 4140680.0231490992 + } + point { + x: 586358.10712488054 + y: 4140680.0726175839 + } + point { + x: 586357.9133392541 + y: 4140680.1220860686 + } + point { + x: 586357.71955362766 + y: 4140680.1715545533 + } + point { + x: 586357.52576800133 + y: 4140680.2210230385 + } + point { + x: 586357.33198237489 + y: 4140680.2704915232 + } + point { + x: 586357.13819674845 + y: 4140680.3199600079 + } + point { + x: 586356.944411122 + y: 4140680.3694284931 + } + point { + x: 586356.75062549557 + y: 4140680.4188969778 + } + point { + x: 586356.55683986912 + y: 4140680.4683654625 + } + point { + x: 586356.36305424268 + y: 4140680.5178339472 + } + point { + x: 586356.16926861636 + y: 4140680.5673024324 + } + point { + x: 586355.97548298992 + y: 4140680.6167709171 + } + point { + x: 586355.78169736348 + y: 4140680.6662394018 + } + point { + x: 586355.587911737 + y: 4140680.7157078865 + } + point { + x: 586355.39412611059 + y: 4140680.7651763717 + } + point { + x: 586355.20034048415 + y: 4140680.8146448564 + } + point { + x: 586355.00655485771 + y: 4140680.8641133411 + } + point { + x: 586354.81276923139 + y: 4140680.9135818258 + } + point { + x: 586354.618983605 + y: 4140680.963050311 + } + point { + x: 586354.4251979785 + y: 4140681.0125187957 + } + point { + x: 586354.23141235206 + y: 4140681.0619872804 + } + point { + x: 586354.03762672562 + y: 4140681.1114557651 + } + point { + x: 586353.84384109918 + y: 4140681.1609242503 + } + point { + x: 586353.65005547274 + y: 4140681.210392735 + } + point { + x: 586353.45626984641 + y: 4140681.2598612197 + } + point { + x: 586353.26248422 + y: 4140681.3093297048 + } + point { + x: 586353.06869859353 + y: 4140681.3587981896 + } + point { + x: 586352.87491296709 + y: 4140681.4082666743 + } + point { + x: 586352.68112734065 + y: 4140681.457735159 + } + point { + x: 586352.48734171421 + y: 4140681.5072036441 + } + point { + x: 586352.29355608777 + y: 4140681.5566721288 + } + point { + x: 586352.09977046144 + y: 4140681.6061406136 + } + point { + x: 586351.905984835 + y: 4140681.6556090983 + } + point { + x: 586351.71219920856 + y: 4140681.7050775834 + } + point { + x: 586351.51841358212 + y: 4140681.7545460681 + } + point { + x: 586351.32462795568 + y: 4140681.8040145529 + } + point { + x: 586351.13084232924 + y: 4140681.8534830376 + } + point { + x: 586350.93705670279 + y: 4140681.9029515227 + } + point { + x: 586350.74327107647 + y: 4140681.9524200074 + } + point { + x: 586350.54948545 + y: 4140682.0018884921 + } + point { + x: 586350.35569982359 + y: 4140682.0513569769 + } + point { + x: 586350.16191419715 + y: 4140682.100825462 + } + point { + x: 586349.9681285707 + y: 4140682.1502939467 + } + point { + x: 586349.77434294426 + y: 4140682.1997624314 + } + point { + x: 586349.58055731782 + y: 4140682.2492309161 + } + point { + x: 586349.3867716915 + y: 4140682.2986994013 + } + point { + x: 586349.192986065 + y: 4140682.348167886 + } + point { + x: 586348.99920043861 + y: 4140682.3976363707 + } + point { + x: 586348.80541481217 + y: 4140682.4471048559 + } + point { + x: 586348.61162918573 + y: 4140682.4965733406 + } + point { + x: 586348.41784355929 + y: 4140682.5460418253 + } + point { + x: 586348.22405793285 + y: 4140682.59551031 + } + point { + x: 586348.03027230653 + y: 4140682.6449787952 + } + point { + x: 586347.83648668008 + y: 4140682.69444728 + } + point { + x: 586347.64270105364 + y: 4140682.7439157646 + } + point { + x: 586347.44380432274 + y: 4140682.7946889829 + } + point { + x: 586347.266253375 + y: 4140682.8867523358 + } + point { + x: 586347.08870242722 + y: 4140682.9788156888 + } + point { + x: 586346.91115147935 + y: 4140683.0708790417 + } + point { + x: 586346.73360053159 + y: 4140683.1629423941 + } + point { + x: 586346.55604958383 + y: 4140683.2550057471 + } + point { + x: 586346.378498636 + y: 4140683.3470691 + } + point { + x: 586346.20094768819 + y: 4140683.4391324529 + } + point { + x: 586346.02339674043 + y: 4140683.5311958059 + } + point { + x: 586345.84584579256 + y: 4140683.6232591583 + } + point { + x: 586345.6682948448 + y: 4140683.7153225113 + } + point { + x: 586345.490743897 + y: 4140683.8073858642 + } + point { + x: 586345.31319294916 + y: 4140683.8994492171 + } + point { + x: 586345.13564200141 + y: 4140683.99151257 + } + point { + x: 586344.88259848254 + y: 4140684.1227201754 + } + point { + x: 586344.73074713477 + y: 4140684.2528784187 + } + point { + x: 586344.57889578713 + y: 4140684.3830366614 + } + point { + x: 586344.42704443936 + y: 4140684.5131949042 + } + point { + x: 586344.27519309171 + y: 4140684.6433531474 + } + point { + x: 586344.123341744 + y: 4140684.77351139 + } + point { + x: 586343.9714903963 + y: 4140684.903669633 + } + point { + x: 586343.81963904854 + y: 4140685.0338278762 + } + point { + x: 586343.66778770078 + y: 4140685.163986119 + } + point { + x: 586343.51593635313 + y: 4140685.2941443617 + } + point { + x: 586343.36408500536 + y: 4140685.424302605 + } + point { + x: 586343.21223365772 + y: 4140685.5544608478 + } + point { + x: 586343.06038231 + y: 4140685.6846190905 + } + point { + x: 586342.89055024483 + y: 4140685.8301893706 + } + point { + x: 586342.788589817 + y: 4140686.002247707 + } + point { + x: 586342.68662938918 + y: 4140686.1743060434 + } + point { + x: 586342.58466896135 + y: 4140686.34636438 + } + point { + x: 586342.48270853353 + y: 4140686.5184227168 + } + point { + x: 586342.3807481057 + y: 4140686.6904810532 + } + point { + x: 586342.27878767787 + y: 4140686.8625393896 + } + point { + x: 586342.17682725016 + y: 4140687.0345977261 + } + point { + x: 586342.07486682234 + y: 4140687.2066560625 + } + point { + x: 586341.97290639451 + y: 4140687.3787143989 + } + point { + x: 586341.87094596669 + y: 4140687.5507727354 + } + point { + x: 586341.76898553886 + y: 4140687.7228310723 + } + point { + x: 586341.667025111 + y: 4140687.8948894087 + } + point { + x: 586341.56506468321 + y: 4140688.0669477452 + } + point { + x: 586341.46310425538 + y: 4140688.2390060816 + } + point { + x: 586341.37279978441 + y: 4140688.3913949779 + } + point { + x: 586341.309554162 + y: 4140688.5811316143 + } + point { + x: 586341.24630853953 + y: 4140688.7708682506 + } + point { + x: 586341.18306291709 + y: 4140688.9606048875 + } + point { + x: 586341.11981729465 + y: 4140689.1503415238 + } + point { + x: 586341.05657167209 + y: 4140689.3400781606 + } + point { + x: 586340.99332604965 + y: 4140689.529814797 + } + point { + x: 586340.89850200713 + y: 4140689.8142865784 + } + point { + x: 586340.89050836291 + y: 4140690.0141267688 + } + point { + x: 586340.8825147188 + y: 4140690.2139669592 + } + point { + x: 586340.8745210747 + y: 4140690.4138071495 + } + point { + x: 586340.86652743048 + y: 4140690.61364734 + } + point { + x: 586340.85853378638 + y: 4140690.8134875298 + } + point { + x: 586340.85054014227 + y: 4140691.01332772 + } + point { + x: 586340.842546498 + y: 4140691.2131679105 + } + point { + x: 586340.834552854 + y: 4140691.4130081008 + } + point { + x: 586340.82655920985 + y: 4140691.6128482912 + } + point { + x: 586340.81856556563 + y: 4140691.8126884815 + } + point { + x: 586340.81057192152 + y: 4140692.0125286719 + } + point { + x: 586340.80364218191 + y: 4140692.18577137 + } + point { + x: 586340.83557984489 + y: 4140692.3837095662 + } + point { + x: 586340.86848375213 + y: 4140692.5814158847 + } + point { + x: 586340.90233176679 + y: 4140692.7788956226 + } + point { + x: 586340.93710175168 + y: 4140692.9761540778 + } + point { + x: 586340.97277156974 + y: 4140693.1731965481 + } + point { + x: 586341.00931908388 + y: 4140693.3700283309 + } + point { + x: 586341.04672215716 + y: 4140693.5666547245 + } + point { + x: 586341.08495865238 + y: 4140693.7630810258 + } + point { + x: 586341.12400643248 + y: 4140693.9593125335 + } + point { + x: 586341.1638433605 + y: 4140694.1553545445 + } + point { + x: 586341.20444729936 + y: 4140694.3512123572 + } + point { + x: 586341.24579611188 + y: 4140694.5468912688 + } + point { + x: 586341.2878676611 + y: 4140694.7423965773 + } + point { + x: 586341.33063981 + y: 4140694.9377335804 + } + point { + x: 586341.37409042136 + y: 4140695.1329075759 + } + point { + x: 586341.41819735814 + y: 4140695.3279238613 + } + point { + x: 586341.46293848346 + y: 4140695.5227877344 + } + point { + x: 586341.50829166011 + y: 4140695.7175044934 + } + point { + x: 586341.554234751 + y: 4140695.9120794353 + } + point { + x: 586341.60074561927 + y: 4140696.1065178583 + } + point { + x: 586341.64780212753 + y: 4140696.30082506 + } + point { + x: 586341.695382139 + y: 4140696.4950063378 + } + point { + x: 586341.74346351647 + y: 4140696.68906699 + } + point { + x: 586341.7920241229 + y: 4140696.8830123139 + } + point { + x: 586341.84104182129 + y: 4140697.0768476073 + } + point { + x: 586341.89049447444 + y: 4140697.2705781683 + } + point { + x: 586341.94035994553 + y: 4140697.4642092944 + } + point { + x: 586341.99061609723 + y: 4140697.6577462829 + } + point { + x: 586342.04124079261 + y: 4140697.8511944325 + } + point { + x: 586342.09221189457 + y: 4140698.04455904 + } + point { + x: 586342.14350726607 + y: 4140698.2378454036 + } + point { + x: 586342.19510477 + y: 4140698.4310588208 + } + point { + x: 586342.24698226934 + y: 4140698.6242045895 + } + point { + x: 586342.299117627 + y: 4140698.8172880071 + } + point { + x: 586342.351488706 + y: 4140699.0103143719 + } + point { + x: 586342.40407336922 + y: 4140699.2032889812 + } + point { + x: 586342.45684947947 + y: 4140699.3962171329 + } + point { + x: 586342.5097949 + y: 4140699.5891041248 + } + point { + x: 586342.5628874934 + y: 4140699.7819552547 + } + point { + x: 586342.61610512272 + y: 4140699.9747758196 + } + point { + x: 586342.66942565108 + y: 4140700.1675711181 + } + point { + x: 586342.72282694117 + y: 4140700.3603464477 + } + point { + x: 586342.776286856 + y: 4140700.5531071061 + } + point { + x: 586342.82978325861 + y: 4140700.7458583908 + } + point { + x: 586342.88329401193 + y: 4140700.9386055996 + } + point { + x: 586342.9367969787 + y: 4140701.13135403 + } + point { + x: 586342.990270022 + y: 4140701.3241089811 + } + point { + x: 586343.04369100474 + y: 4140701.5168757485 + } + point { + x: 586343.09703779186 + y: 4140701.7096596314 + } + point { + x: 586343.15029382252 + y: 4140701.9024645993 + } + point { + x: 586343.20346033853 + y: 4140702.0952903884 + } + point { + x: 586343.25654212781 + y: 4140702.288135889 + } + point { + x: 586343.30954397819 + y: 4140702.4809999936 + } + point { + x: 586343.3624706777 + y: 4140702.6738815932 + } + point { + x: 586343.4153270144 + y: 4140702.8667795788 + } + point { + x: 586343.46811777586 + y: 4140703.059692842 + } + point { + x: 586343.52084775036 + y: 4140703.2526202747 + } + point { + x: 586343.57352172572 + y: 4140703.4455607673 + } + point { + x: 586343.62614448974 + y: 4140703.6385132121 + } + point { + x: 586343.67872083047 + y: 4140703.8314765 + } + point { + x: 586343.73125553585 + y: 4140704.0244495221 + } + point { + x: 586343.7837533938 + y: 4140704.2174311704 + } + point { + x: 586343.83621919225 + y: 4140704.4104203363 + } + point { + x: 586343.88865771913 + y: 4140704.6034159111 + } + point { + x: 586343.94107376237 + y: 4140704.7964167856 + } + point { + x: 586343.9934721099 + y: 4140704.9894218519 + } + point { + x: 586344.04585754953 + y: 4140705.182430001 + } + point { + x: 586344.09823486942 + y: 4140705.3754401244 + } + point { + x: 586344.1506088574 + y: 4140705.5684511131 + } + point { + x: 586344.20298430137 + y: 4140705.7614618596 + } + point { + x: 586344.25536598929 + y: 4140705.9544712538 + } + point { + x: 586344.30775870907 + y: 4140706.1474781884 + } + point { + x: 586344.36016724864 + y: 4140706.3404815542 + } + point { + x: 586344.412596167 + y: 4140706.533480295 + } + point { + x: 586344.465046771 + y: 4140706.7264741063 + } + point { + x: 586344.51751795062 + y: 4140706.9194632396 + } + point { + x: 586344.57000853808 + y: 4140707.1124479612 + } + point { + x: 586344.62251736561 + y: 4140707.3054285366 + } + point { + x: 586344.6750432658 + y: 4140707.4984052312 + } + point { + x: 586344.72758507077 + y: 4140707.6913783108 + } + point { + x: 586344.780141613 + y: 4140707.8843480404 + } + point { + x: 586344.8327117248 + y: 4140708.077314687 + } + point { + x: 586344.88529423857 + y: 4140708.2702785148 + } + point { + x: 586344.93788798654 + y: 4140708.4632397904 + } + point { + x: 586344.990491801 + y: 4140708.6561987791 + } + point { + x: 586345.04310451448 + y: 4140708.8491557464 + } + point { + x: 586345.09572495928 + y: 4140709.0421109577 + } + point { + x: 586345.14835196768 + y: 4140709.2350646793 + } + point { + x: 586345.20098437206 + y: 4140709.4280171762 + } + point { + x: 586345.25362100475 + y: 4140709.6209687144 + } + point { + x: 586345.306260698 + y: 4140709.8139195596 + } + point { + x: 586345.35890228441 + y: 4140710.0068699773 + } + point { + x: 586345.41154459608 + y: 4140710.1998202326 + } + point { + x: 586345.46418646548 + y: 4140710.3927705921 + } + point { + x: 586345.51682672487 + y: 4140710.5857213205 + } + point { + x: 586345.5694642067 + y: 4140710.778672684 + } + point { + x: 586345.62209774321 + y: 4140710.9716249481 + } + point { + x: 586345.67472616758 + y: 4140711.1645783782 + } + point { + x: 586345.72734868666 + y: 4140711.357533155 + } + point { + x: 586345.77996546542 + y: 4140711.5504892403 + } + point { + x: 586345.83257682051 + y: 4140711.743446562 + } + point { + x: 586345.88518306834 + y: 4140711.9364050482 + } + point { + x: 586345.93778452545 + y: 4140712.1293646265 + } + point { + x: 586345.9903815086 + y: 4140712.322325225 + } + point { + x: 586346.04297433421 + y: 4140712.5152867716 + } + point { + x: 586346.09556331881 + y: 4140712.7082491932 + } + point { + x: 586346.14814877906 + y: 4140712.9012124185 + } + point { + x: 586346.20073103148 + y: 4140713.0941763753 + } + point { + x: 586346.25331039261 + y: 4140713.2871409911 + } + point { + x: 586346.305887179 + y: 4140713.480106194 + } + point { + x: 586346.35846170725 + y: 4140713.6730719116 + } + point { + x: 586346.41103429382 + y: 4140713.8660380715 + } + point { + x: 586346.46360525547 + y: 4140714.059004602 + } + point { + x: 586346.51617490861 + y: 4140714.2519714306 + } + point { + x: 586346.56874356978 + y: 4140714.4449384855 + } + point { + x: 586346.6213115555 + y: 4140714.6379056941 + } + point { + x: 586346.67387918255 + y: 4140714.8308729846 + } + point { + x: 586346.72644676734 + y: 4140715.0238402844 + } + point { + x: 586346.7790146264 + y: 4140715.2168075214 + } + point { + x: 586346.83158307639 + y: 4140715.4097746238 + } + point { + x: 586346.88415243372 + y: 4140715.602741519 + } + point { + x: 586346.936723015 + y: 4140715.7957081352 + } + point { + x: 586346.98929511523 + y: 4140715.9886744046 + } + point { + x: 586347.041868794 + y: 4140716.1816403144 + } + point { + x: 586347.09444396873 + y: 4140716.3746058829 + } + point { + x: 586347.14702055429 + y: 4140716.5675711292 + } + point { + x: 586347.1995984657 + y: 4140716.7605360737 + } + point { + x: 586347.252177618 + y: 4140716.9535007346 + } + point { + x: 586347.30475792638 + y: 4140717.146465132 + } + point { + x: 586347.35733930569 + y: 4140717.3394292854 + } + point { + x: 586347.40992167115 + y: 4140717.5323932138 + } + point { + x: 586347.46250493766 + y: 4140717.7253569365 + } + point { + x: 586347.51508902037 + y: 4140717.9183204728 + } + point { + x: 586347.56767383427 + y: 4140718.1112838429 + } + point { + x: 586347.6202592944 + y: 4140718.304247065 + } + point { + x: 586347.67284531577 + y: 4140718.4972101594 + } + point { + x: 586347.72543181351 + y: 4140718.6901731454 + } + point { + x: 586347.77801870264 + y: 4140718.8831360419 + } + point { + x: 586347.830605898 + y: 4140719.0760988682 + } + point { + x: 586347.883193315 + y: 4140719.2690616446 + } + point { + x: 586347.9357808684 + y: 4140719.4620243893 + } + point { + x: 586347.98836847325 + y: 4140719.6549871224 + } + point { + x: 586348.0409560448 + y: 4140719.8479498634 + } + point { + x: 586348.09354349785 + y: 4140720.040912631 + } + point { + x: 586348.14613074763 + y: 4140720.2338754451 + } + point { + x: 586348.198717709 + y: 4140720.4268383249 + } + point { + x: 586348.25130429748 + y: 4140720.61980129 + } + point { + x: 586348.30389046029 + y: 4140720.8127643522 + } + point { + x: 586348.35647621192 + y: 4140721.0057275081 + } + point { + x: 586348.40906157519 + y: 4140721.1986907525 + } + point { + x: 586348.4616465728 + y: 4140721.3916540802 + } + point { + x: 586348.51423122745 + y: 4140721.5846174862 + } + point { + x: 586348.56681556208 + y: 4140721.7775809648 + } + point { + x: 586348.61939959927 + y: 4140721.9705445119 + } + point { + x: 586348.671983362 + y: 4140722.1635081214 + } + point { + x: 586348.7245668727 + y: 4140722.3564717881 + } + point { + x: 586348.77715015435 + y: 4140722.5494355075 + } + point { + x: 586348.82973322971 + y: 4140722.7423992734 + } + point { + x: 586348.88231612137 + y: 4140722.9353630817 + } + point { + x: 586348.93489885225 + y: 4140723.1283269264 + } + point { + x: 586348.98748144507 + y: 4140723.3212908027 + } + point { + x: 586349.04006392264 + y: 4140723.514254705 + } + point { + x: 586349.09264630754 + y: 4140723.7072186288 + } + point { + x: 586349.14522862271 + y: 4140723.9001825685 + } + point { + x: 586349.19781089085 + y: 4140724.0931465188 + } + point { + x: 586349.25039313466 + y: 4140724.2861104747 + } + point { + x: 586349.30297537684 + y: 4140724.4790744307 + } + point { + x: 586349.35555764032 + y: 4140724.6720383819 + } + point { + x: 586349.4081399478 + y: 4140724.8650023234 + } + point { + x: 586349.46072232211 + y: 4140725.0579662495 + } + point { + x: 586349.51330478583 + y: 4140725.2509301552 + } + point { + x: 586349.56588735955 + y: 4140725.4438940356 + } + point { + x: 586349.61847004632 + y: 4140725.6368578905 + } + point { + x: 586349.67105284 + y: 4140725.8298217212 + } + point { + x: 586349.72363573441 + y: 4140726.0227855286 + } + point { + x: 586349.77621872351 + y: 4140726.2157493145 + } + point { + x: 586349.8288018012 + y: 4140726.40871308 + } + point { + x: 586349.88138496142 + y: 4140726.6016768268 + } + point { + x: 586349.933968198 + y: 4140726.7946405564 + } + point { + x: 586349.98655150493 + y: 4140726.9876042698 + } + point { + x: 586350.0391348761 + y: 4140727.1805679686 + } + point { + x: 586350.09171830525 + y: 4140727.373531654 + } + point { + x: 586350.14430178655 + y: 4140727.5664953277 + } + point { + x: 586350.19688531372 + y: 4140727.7594589908 + } + point { + x: 586350.24946888059 + y: 4140727.9524226449 + } + point { + x: 586350.30205248133 + y: 4140728.1453862912 + } + point { + x: 586350.35463610967 + y: 4140728.3383499314 + } + point { + x: 586350.40721975942 + y: 4140728.5313135665 + } + point { + x: 586350.45980342466 + y: 4140728.7242771983 + } + point { + x: 586350.51238709921 + y: 4140728.9172408278 + } + point { + x: 586350.564970777 + y: 4140729.1102044564 + } + point { + x: 586350.617554452 + y: 4140729.3031680859 + } + point { + x: 586350.670138118 + y: 4140729.4961317172 + } + point { + x: 586350.72272176889 + y: 4140729.6890953523 + } + point { + x: 586350.77530539862 + y: 4140729.8820589921 + } + point { + x: 586350.82788900111 + y: 4140730.0750226383 + } + point { + x: 586350.8804725731 + y: 4140730.2679862911 + } + point { + x: 586350.93305611564 + y: 4140730.4609499509 + } + point { + x: 586350.98563963035 + y: 4140730.6539136167 + } + point { + x: 586351.0382231191 + y: 4140730.8468772885 + } + point { + x: 586351.09080658318 + y: 4140731.039840966 + } + point { + x: 586351.14339002455 + y: 4140731.232804649 + } + point { + x: 586351.19597344461 + y: 4140731.4257683363 + } + point { + x: 586351.248556845 + y: 4140731.6187320286 + } + point { + x: 586351.30114022759 + y: 4140731.8116957247 + } + point { + x: 586351.35372359375 + y: 4140732.0046594245 + } + point { + x: 586351.40630694525 + y: 4140732.1976231276 + } + point { + x: 586351.45889028371 + y: 4140732.3905868339 + } + point { + x: 586351.51147361065 + y: 4140732.5835505426 + } + point { + x: 586351.56405692792 + y: 4140732.7765142536 + } + point { + x: 586351.61664023693 + y: 4140732.9694779669 + } + point { + x: 586351.66922353953 + y: 4140733.1624416811 + } + point { + x: 586351.72180683713 + y: 4140733.3554053963 + } + point { + x: 586351.77439013158 + y: 4140733.5483691129 + } + point { + x: 586351.82697342429 + y: 4140733.7413328295 + } + point { + x: 586351.87955671712 + y: 4140733.934296546 + } + point { + x: 586351.93214001157 + y: 4140734.1272602621 + } + point { + x: 586351.98472330929 + y: 4140734.3202239778 + } + point { + x: 586352.03730661189 + y: 4140734.513187692 + } + point { + x: 586352.08988992113 + y: 4140734.7061514049 + } + point { + x: 586352.14247323829 + y: 4140734.8991151159 + } + point { + x: 586352.19505656348 + y: 4140735.092078825 + } + point { + x: 586352.24763989635 + y: 4140735.2850425327 + } + point { + x: 586352.30022323644 + y: 4140735.4780062386 + } + point { + x: 586352.35280658328 + y: 4140735.6709699426 + } + point { + x: 586352.40538993641 + y: 4140735.8639336457 + } + point { + x: 586352.45797329547 + y: 4140736.0568973473 + } + point { + x: 586352.51055666 + y: 4140736.2498610471 + } + point { + x: 586352.56314002955 + y: 4140736.4428247465 + } + point { + x: 586352.61572340364 + y: 4140736.6357884444 + } + point { + x: 586352.66830678191 + y: 4140736.8287521414 + } + point { + x: 586352.72089016391 + y: 4140737.021715838 + } + point { + x: 586352.773473549 + y: 4140737.2146795336 + } + point { + x: 586352.82605693711 + y: 4140737.4076432283 + } + point { + x: 586352.87864032749 + y: 4140737.6006069225 + } + point { + x: 586352.93122372 + y: 4140737.7935706167 + } + point { + x: 586352.98380711384 + y: 4140737.98653431 + } + point { + x: 586353.03639050876 + y: 4140738.1794980033 + } + point { + x: 586353.08897390438 + y: 4140738.3724616966 + } + point { + x: 586353.14155730023 + y: 4140738.56542539 + } + point { + x: 586353.19414069573 + y: 4140738.7583890827 + } + point { + x: 586353.24672409066 + y: 4140738.951352776 + } + point { + x: 586353.29930748441 + y: 4140739.14431647 + } + point { + x: 586353.35189087666 + y: 4140739.3372801635 + } + point { + x: 586353.4044742668 + y: 4140739.5302438582 + } + point { + x: 586353.45705765486 + y: 4140739.7232075529 + } + point { + x: 586353.50964104082 + y: 4140739.9161712485 + } + point { + x: 586353.56222442479 + y: 4140740.1091349442 + } + point { + x: 586353.61480780679 + y: 4140740.3020986402 + } + point { + x: 586353.66739118716 + y: 4140740.4950623368 + } + point { + x: 586353.7199745659 + y: 4140740.6880260338 + } + point { + x: 586353.772557943 + y: 4140740.8809897313 + } + point { + x: 586353.82514131884 + y: 4140741.0739534292 + } + point { + x: 586353.87772469339 + y: 4140741.2669171272 + } + point { + x: 586353.93030806666 + y: 4140741.4598808251 + } + point { + x: 586353.982891439 + y: 4140741.6528445235 + } + point { + x: 586354.0354748104 + y: 4140741.8458082224 + } + point { + x: 586354.08805818087 + y: 4140742.0387719213 + } + point { + x: 586354.14064155077 + y: 4140742.23173562 + } + point { + x: 586354.19322492008 + y: 4140742.4246993195 + } + point { + x: 586354.24580828892 + y: 4140742.6176630189 + } + point { + x: 586354.29839165742 + y: 4140742.8106267182 + } + point { + x: 586354.35097502568 + y: 4140743.0035904176 + } + point { + x: 586354.40355839382 + y: 4140743.1965541169 + } + point { + x: 586354.456141762 + y: 4140743.3895178162 + } + point { + x: 586354.50872513023 + y: 4140743.5824815156 + } + point { + x: 586354.56130849884 + y: 4140743.7754452149 + } + point { + x: 586354.61389186769 + y: 4140743.9684089143 + } + point { + x: 586354.66647523711 + y: 4140744.1613726136 + } + point { + x: 586354.719058607 + y: 4140744.3543363125 + } + point { + x: 586354.7716419776 + y: 4140744.5473000114 + } + point { + x: 586354.82422534865 + y: 4140744.7402637103 + } + point { + x: 586354.87680872018 + y: 4140744.9332274087 + } + point { + x: 586354.92939209228 + y: 4140745.1261911071 + } + point { + x: 586354.98197546485 + y: 4140745.3191548055 + } + point { + x: 586355.03455883777 + y: 4140745.5121185039 + } + point { + x: 586355.087142211 + y: 4140745.7050822023 + } + point { + x: 586355.13972558477 + y: 4140745.8980459003 + } + point { + x: 586355.19230895885 + y: 4140746.0910095987 + } + point { + x: 586355.24489233317 + y: 4140746.2839732966 + } + point { + x: 586355.29747570772 + y: 4140746.4769369946 + } + point { + x: 586355.3500590825 + y: 4140746.6699006925 + } + point { + x: 586355.40264245751 + y: 4140746.86286439 + } + point { + x: 586355.45522583264 + y: 4140747.055828088 + } + point { + x: 586355.507809208 + y: 4140747.2487917859 + } + point { + x: 586355.56039258349 + y: 4140747.4417554834 + } + point { + x: 586355.612975959 + y: 4140747.6347191813 + } + point { + x: 586355.66555933445 + y: 4140747.8276828788 + } + point { + x: 586355.71814271 + y: 4140748.0206465768 + } + point { + x: 586355.77072608552 + y: 4140748.2136102747 + } + point { + x: 586355.823309461 + y: 4140748.4065739722 + } + point { + x: 586355.87589283648 + y: 4140748.59953767 + } + point { + x: 586355.92847621173 + y: 4140748.7925013676 + } + point { + x: 586355.98105958686 + y: 4140748.9854650656 + } + point { + x: 586356.03364296188 + y: 4140749.1784287635 + } + point { + x: 586356.08622633666 + y: 4140749.3713924615 + } + point { + x: 586356.13880971132 + y: 4140749.5643561594 + } + point { + x: 586356.191393086 + y: 4140749.7573198574 + } + point { + x: 586356.24397646042 + y: 4140749.9502835553 + } + point { + x: 586356.29655983474 + y: 4140750.1432472533 + } + point { + x: 586356.34914320894 + y: 4140750.3362109512 + } + point { + x: 586356.401726583 + y: 4140750.5291746492 + } + point { + x: 586356.454309957 + y: 4140750.7221383476 + } + point { + x: 586356.506893331 + y: 4140750.9151020455 + } + point { + x: 586356.5594767048 + y: 4140751.1080657435 + } + point { + x: 586356.61206007865 + y: 4140751.3010294419 + } + point { + x: 586356.66464345239 + y: 4140751.49399314 + } + point { + x: 586356.717226826 + y: 4140751.6869568382 + } + point { + x: 586356.76981019974 + y: 4140751.8799205362 + } + point { + x: 586356.82239357335 + y: 4140752.0728842346 + } + point { + x: 586356.87497694686 + y: 4140752.2658479325 + } + point { + x: 586356.92756032047 + y: 4140752.458811631 + } + point { + x: 586356.980143694 + y: 4140752.6517753289 + } + point { + x: 586357.03272706759 + y: 4140752.8447390273 + } + point { + x: 586357.08531044121 + y: 4140753.0377027253 + } + point { + x: 586357.13789381483 + y: 4140753.2306664237 + } + point { + x: 586357.19047718844 + y: 4140753.4236301216 + } + point { + x: 586357.24306056206 + y: 4140753.61659382 + } + point { + x: 586357.29564393579 + y: 4140753.809557518 + } + point { + x: 586357.34822730953 + y: 4140754.0025212164 + } + point { + x: 586357.40081068326 + y: 4140754.1954849144 + } + point { + x: 586357.45339405711 + y: 4140754.3884486123 + } + point { + x: 586357.505977431 + y: 4140754.5814123107 + } + point { + x: 586357.55856080481 + y: 4140754.7743760087 + } + point { + x: 586357.61114417878 + y: 4140754.9673397066 + } + point { + x: 586357.66372755275 + y: 4140755.160303405 + } + point { + x: 586357.71631092671 + y: 4140755.353267103 + } + point { + x: 586357.76889430068 + y: 4140755.5462308009 + } + point { + x: 586357.82147767465 + y: 4140755.7391944993 + } + point { + x: 586357.87406104873 + y: 4140755.9321581973 + } + point { + x: 586357.9266444227 + y: 4140756.1251218952 + } + point { + x: 586357.97922779678 + y: 4140756.3180855932 + } + point { + x: 586358.03181117086 + y: 4140756.5110492916 + } + point { + x: 586358.084394545 + y: 4140756.7040129895 + } + point { + x: 586358.136977919 + y: 4140756.8969766875 + } + point { + x: 586358.18956129311 + y: 4140757.0899403854 + } + point { + x: 586358.24214466719 + y: 4140757.2829040838 + } + point { + x: 586358.29472804139 + y: 4140757.4758677818 + } + point { + x: 586358.34731141548 + y: 4140757.6688314797 + } + point { + x: 586358.39989478956 + y: 4140757.8617951777 + } + point { + x: 586358.45247816364 + y: 4140758.0547588761 + } + point { + x: 586358.50506153773 + y: 4140758.247722574 + } + point { + x: 586358.55764491181 + y: 4140758.440686272 + } + point { + x: 586358.61022828589 + y: 4140758.63364997 + } + point { + x: 586358.66281165986 + y: 4140758.8266136684 + } + point { + x: 586358.71539503394 + y: 4140759.0195773663 + } + point { + x: 586358.76797840791 + y: 4140759.2125410642 + } + point { + x: 586358.820561782 + y: 4140759.4055047627 + } + point { + x: 586358.873145156 + y: 4140759.5984684606 + } + point { + x: 586358.92572852992 + y: 4140759.7914321586 + } + point { + x: 586358.978311904 + y: 4140759.984395857 + } + point { + x: 586359.030895278 + y: 4140760.1773595549 + } + point { + x: 586359.08347865194 + y: 4140760.3703232529 + } + point { + x: 586359.13606202591 + y: 4140760.5632869508 + } + point { + x: 586359.18864539987 + y: 4140760.7562506492 + } + point { + x: 586359.24122877384 + y: 4140760.9492143472 + } + point { + x: 586359.29381214781 + y: 4140761.1421780451 + } + point { + x: 586359.34639552177 + y: 4140761.3351417435 + } + point { + x: 586359.39897889574 + y: 4140761.5281054415 + } + point { + x: 586359.45156226971 + y: 4140761.7210691394 + } + point { + x: 586359.50414564367 + y: 4140761.9140328378 + } + point { + x: 586359.55672901764 + y: 4140762.1069965358 + } + point { + x: 586359.60931239161 + y: 4140762.2999602337 + } + point { + x: 586359.66189576557 + y: 4140762.4929239322 + } + point { + x: 586359.71447913954 + y: 4140762.68588763 + } + point { + x: 586359.76706251351 + y: 4140762.878851328 + } + point { + x: 586359.81964588747 + y: 4140763.0718150265 + } + point { + x: 586359.87222926144 + y: 4140763.2647787244 + } + point { + x: 586359.92481263541 + y: 4140763.4577424224 + } + point { + x: 586359.97739600937 + y: 4140763.6507061203 + } + point { + x: 586360.02997938334 + y: 4140763.8436698187 + } + point { + x: 586360.08256275731 + y: 4140764.0366335167 + } + point { + x: 586360.13514613127 + y: 4140764.2295972146 + } + point { + x: 586360.18772950524 + y: 4140764.422560913 + } + point { + x: 586360.24031287921 + y: 4140764.615524611 + } + point { + x: 586360.29289625317 + y: 4140764.8084883089 + } + point { + x: 586360.34547962726 + y: 4140765.0014520073 + } + point { + x: 586360.39806300122 + y: 4140765.1944157053 + } + point { + x: 586360.45064637519 + y: 4140765.3873794032 + } + point { + x: 586360.50322974916 + y: 4140765.5803431016 + } + point { + x: 586360.55581312312 + y: 4140765.7733067996 + } + point { + x: 586360.60839649721 + y: 4140765.9662704975 + } + point { + x: 586360.66097987117 + y: 4140766.1592341955 + } + point { + x: 586360.71356324514 + y: 4140766.3521978939 + } + point { + x: 586360.76614661911 + y: 4140766.5451615918 + } + point { + x: 586360.81872999319 + y: 4140766.73812529 + } + point { + x: 586360.87131336716 + y: 4140766.9310889882 + } + point { + x: 586360.92389674112 + y: 4140767.1240526862 + } + point { + x: 586360.97648011509 + y: 4140767.3170163841 + } + point { + x: 586361.02906348917 + y: 4140767.5099800825 + } + point { + x: 586361.08164686314 + y: 4140767.7029437805 + } + point { + x: 586361.1342302371 + y: 4140767.8959074784 + } + point { + x: 586361.18681361107 + y: 4140768.0888711764 + } + point { + x: 586361.239396985 + y: 4140768.2818348748 + } + point { + x: 586361.29198035912 + y: 4140768.4747985727 + } + point { + x: 586361.34456373309 + y: 4140768.6677622707 + } + point { + x: 586361.397147107 + y: 4140768.8607259691 + } + point { + x: 586361.449730481 + y: 4140769.053689667 + } + point { + x: 586361.502313855 + y: 4140769.246653365 + } + point { + x: 586361.55489722907 + y: 4140769.4396170634 + } + point { + x: 586361.607480603 + y: 4140769.6325807613 + } + point { + x: 586361.660063977 + y: 4140769.8255444593 + } + point { + x: 586361.712647351 + y: 4140770.0185081572 + } + point { + x: 586361.76523072494 + y: 4140770.2114718556 + } + point { + x: 586361.8178140989 + y: 4140770.4044355536 + } + point { + x: 586361.870397473 + y: 4140770.5973992515 + } + point { + x: 586361.922980847 + y: 4140770.79036295 + } + point { + x: 586361.97556422092 + y: 4140770.9833266479 + } + point { + x: 586362.02814759489 + y: 4140771.1762903458 + } + point { + x: 586362.08073096885 + y: 4140771.3692540443 + } + point { + x: 586362.13331434282 + y: 4140771.5622177422 + } + point { + x: 586362.1858977169 + y: 4140771.75518144 + } + point { + x: 586362.23848109087 + y: 4140771.9481451381 + } + point { + x: 586362.29106446484 + y: 4140772.1411088365 + } + point { + x: 586362.3436478388 + y: 4140772.3340725345 + } + point { + x: 586362.39623121277 + y: 4140772.5270362324 + } + point { + x: 586362.44881458674 + y: 4140772.7199999308 + } + point { + x: 586362.50139796082 + y: 4140772.9129636288 + } + point { + x: 586362.55398133479 + y: 4140773.1059273267 + } + point { + x: 586362.60656470875 + y: 4140773.2988910251 + } + point { + x: 586362.65914808272 + y: 4140773.4918547231 + } + point { + x: 586362.71173145669 + y: 4140773.684818421 + } + point { + x: 586362.76431483065 + y: 4140773.8777821194 + } + point { + x: 586362.81689820474 + y: 4140774.0707458174 + } + point { + x: 586362.8694815787 + y: 4140774.2637095153 + } + point { + x: 586362.92206495267 + y: 4140774.4566732133 + } + point { + x: 586362.97464832664 + y: 4140774.6496369117 + } + point { + x: 586363.0272317006 + y: 4140774.8426006096 + } + point { + x: 586363.07981507457 + y: 4140775.0355643076 + } + point { + x: 586363.13239844865 + y: 4140775.228528006 + } + point { + x: 586363.18498182262 + y: 4140775.4214917039 + } + point { + x: 586363.23756519658 + y: 4140775.6144554019 + } + point { + x: 586363.29014857055 + y: 4140775.8074191003 + } + point { + x: 586363.34273194452 + y: 4140776.0003827983 + } + point { + x: 586363.3953153186 + y: 4140776.1933464962 + } + point { + x: 586363.44789869257 + y: 4140776.3863101942 + } + point { + x: 586363.50048206653 + y: 4140776.5792738926 + } + point { + x: 586363.5530654405 + y: 4140776.7722375905 + } + point { + x: 586363.60564881447 + y: 4140776.9652012885 + } + point { + x: 586363.65823218843 + y: 4140777.1581649869 + } + point { + x: 586363.71081556252 + y: 4140777.3511286848 + } + point { + x: 586363.76339893648 + y: 4140777.5440923828 + } + point { + x: 586363.81598231045 + y: 4140777.7370560812 + } + point { + x: 586363.86856568442 + y: 4140777.9300197791 + } + point { + x: 586363.92114905838 + y: 4140778.1229834771 + } + point { + x: 586363.97373243247 + y: 4140778.315947175 + } + point { + x: 586364.02631580643 + y: 4140778.5089108734 + } + point { + x: 586364.0788991804 + y: 4140778.7018745714 + } + point { + x: 586364.13148255437 + y: 4140778.8948382693 + } + point { + x: 586364.18406592833 + y: 4140779.0878019677 + } + point { + x: 586364.2366493023 + y: 4140779.2807656657 + } + point { + x: 586364.28923267638 + y: 4140779.4737293636 + } + point { + x: 586364.34181605035 + y: 4140779.6666930621 + } + point { + x: 586364.39439942432 + y: 4140779.85965676 + } + point { + x: 586364.44698279828 + y: 4140780.052620458 + } + point { + x: 586364.49956617225 + y: 4140780.2455841564 + } + point { + x: 586364.55214954633 + y: 4140780.4385478543 + } + point { + x: 586364.6047329203 + y: 4140780.6315115523 + } + point { + x: 586364.65731629427 + y: 4140780.82447525 + } + point { + x: 586364.70989966823 + y: 4140781.0174389486 + } + point { + x: 586364.7624830422 + y: 4140781.2104026466 + } + point { + x: 586364.81506641628 + y: 4140781.4033663445 + } + point { + x: 586364.86764979025 + y: 4140781.5963300429 + } + point { + x: 586364.92023316422 + y: 4140781.7892937409 + } + point { + x: 586364.97281653818 + y: 4140781.9822574388 + } + point { + x: 586365.02539991215 + y: 4140782.1752211372 + } + point { + x: 586365.07798328612 + y: 4140782.3681848352 + } + point { + x: 586365.1305666602 + y: 4140782.5611485331 + } + point { + x: 586365.18315003417 + y: 4140782.7541122311 + } + point { + x: 586365.23573340813 + y: 4140782.9470759295 + } + point { + x: 586365.2883167821 + y: 4140783.1400396274 + } + point { + x: 586365.34090015606 + y: 4140783.3330033254 + } + point { + x: 586365.39348353 + y: 4140783.5259670238 + } + point { + x: 586365.44606690411 + y: 4140783.7189307217 + } + point { + x: 586365.49865027808 + y: 4140783.9118944197 + } + point { + x: 586365.551233652 + y: 4140784.1048581181 + } + point { + x: 586365.603817026 + y: 4140784.2978218161 + } + point { + x: 586365.6564004 + y: 4140784.490785514 + } + point { + x: 586365.70898377406 + y: 4140784.6837492124 + } + point { + x: 586365.761567148 + y: 4140784.8767129104 + } + point { + x: 586365.814150522 + y: 4140785.0696766083 + } + point { + x: 586365.866733896 + y: 4140785.2626403063 + } + point { + x: 586365.91931726993 + y: 4140785.4556040047 + } + point { + x: 586365.9719006439 + y: 4140785.6485677026 + } + point { + x: 586366.02448401786 + y: 4140785.8415314006 + } + point { + x: 586366.077067392 + y: 4140786.034495099 + } + point { + x: 586366.12965076591 + y: 4140786.2274587969 + } + point { + x: 586366.18223413988 + y: 4140786.4204224949 + } + point { + x: 586366.24792875489 + y: 4140786.6615001382 + } + } + heading: -0.24993649105035462 + length: 156.61603286829296 + } + } + boundary_type { + s: 0 + types: DOTTED_YELLOW + } + length: 156.61603286829296 + } + right_boundary { + curve { + segment { + line_segment { + point { + x: 586393.2728792422 + y: 4140674.7079442316 + } + point { + x: 586393.07907158509 + y: 4140674.75741834 + } + point { + x: 586392.8852639281 + y: 4140674.806892449 + } + point { + x: 586392.691456271 + y: 4140674.8563665575 + } + point { + x: 586392.497648614 + y: 4140674.9058406665 + } + point { + x: 586392.303840957 + y: 4140674.955314775 + } + point { + x: 586392.11003329989 + y: 4140675.0047888835 + } + point { + x: 586391.9162256429 + y: 4140675.0542629925 + } + point { + x: 586391.72241798579 + y: 4140675.103737101 + } + point { + x: 586391.52861032879 + y: 4140675.1532112095 + } + point { + x: 586391.33480267168 + y: 4140675.2026853184 + } + point { + x: 586391.14099501469 + y: 4140675.2521594269 + } + point { + x: 586390.94718735758 + y: 4140675.3016335359 + } + point { + x: 586390.75337970059 + y: 4140675.3511076444 + } + point { + x: 586390.55957204348 + y: 4140675.4005817529 + } + point { + x: 586390.36576438649 + y: 4140675.4500558618 + } + point { + x: 586390.17195672938 + y: 4140675.4995299703 + } + point { + x: 586389.97814907238 + y: 4140675.5490040793 + } + point { + x: 586389.78434141539 + y: 4140675.5984781878 + } + point { + x: 586389.59053375828 + y: 4140675.6479522963 + } + point { + x: 586389.39672610129 + y: 4140675.6974264053 + } + point { + x: 586389.20291844418 + y: 4140675.7469005138 + } + point { + x: 586389.00911078718 + y: 4140675.7963746227 + } + point { + x: 586388.81530313008 + y: 4140675.8458487312 + } + point { + x: 586388.62149547308 + y: 4140675.8953228397 + } + point { + x: 586388.427687816 + y: 4140675.9447969487 + } + point { + x: 586388.233880159 + y: 4140675.9942710572 + } + point { + x: 586388.04007250187 + y: 4140676.0437451662 + } + point { + x: 586387.84626484488 + y: 4140676.0932192747 + } + point { + x: 586387.65245718777 + y: 4140676.1426933832 + } + point { + x: 586387.45864953077 + y: 4140676.1921674921 + } + point { + x: 586387.26484187378 + y: 4140676.2416416006 + } + point { + x: 586387.07103421667 + y: 4140676.2911157091 + } + point { + x: 586386.87722655968 + y: 4140676.3405898181 + } + point { + x: 586386.68341890257 + y: 4140676.3900639266 + } + point { + x: 586386.48961124558 + y: 4140676.4395380355 + } + point { + x: 586386.29580358847 + y: 4140676.489012144 + } + point { + x: 586386.10199593147 + y: 4140676.5384862525 + } + point { + x: 586385.90818827436 + y: 4140676.5879603615 + } + point { + x: 586385.71438061737 + y: 4140676.63743447 + } + point { + x: 586385.52057296026 + y: 4140676.686908579 + } + point { + x: 586385.32676530327 + y: 4140676.7363826875 + } + point { + x: 586385.13295764616 + y: 4140676.785856796 + } + point { + x: 586384.93914998916 + y: 4140676.8353309049 + } + point { + x: 586384.74534233217 + y: 4140676.8848050134 + } + point { + x: 586384.55153467506 + y: 4140676.9342791224 + } + point { + x: 586384.35772701807 + y: 4140676.9837532309 + } + point { + x: 586384.163919361 + y: 4140677.0332273394 + } + point { + x: 586383.970111704 + y: 4140677.0827014484 + } + point { + x: 586383.77630404686 + y: 4140677.1321755568 + } + point { + x: 586383.58249638986 + y: 4140677.1816496653 + } + point { + x: 586383.38868873275 + y: 4140677.2311237743 + } + point { + x: 586383.19488107576 + y: 4140677.2805978828 + } + point { + x: 586383.00107341865 + y: 4140677.3300719918 + } + point { + x: 586382.80726576166 + y: 4140677.3795461003 + } + point { + x: 586382.61345810455 + y: 4140677.4290202088 + } + point { + x: 586382.41965044755 + y: 4140677.4784943177 + } + point { + x: 586382.22584279056 + y: 4140677.5279684262 + } + point { + x: 586382.03203513345 + y: 4140677.5774425352 + } + point { + x: 586381.83822747646 + y: 4140677.6269166437 + } + point { + x: 586381.64441981935 + y: 4140677.6763907522 + } + point { + x: 586381.45061216236 + y: 4140677.7258648612 + } + point { + x: 586381.25680450525 + y: 4140677.7753389697 + } + point { + x: 586381.06299684825 + y: 4140677.8248130786 + } + point { + x: 586380.86918919114 + y: 4140677.8742871871 + } + point { + x: 586380.67538153415 + y: 4140677.9237612956 + } + point { + x: 586380.481573877 + y: 4140677.9732354046 + } + point { + x: 586380.28776622 + y: 4140678.0227095131 + } + point { + x: 586380.09395856294 + y: 4140678.072183622 + } + point { + x: 586379.900150906 + y: 4140678.1216577305 + } + point { + x: 586379.706343249 + y: 4140678.171131839 + } + point { + x: 586379.51253559184 + y: 4140678.220605948 + } + point { + x: 586379.31872793485 + y: 4140678.2700800565 + } + point { + x: 586379.12492027774 + y: 4140678.319554165 + } + point { + x: 586378.93111262075 + y: 4140678.369028274 + } + point { + x: 586378.73730496364 + y: 4140678.4185023825 + } + point { + x: 586378.54349730664 + y: 4140678.4679764914 + } + point { + x: 586378.34968964953 + y: 4140678.5174506 + } + point { + x: 586378.15588199254 + y: 4140678.5669247084 + } + point { + x: 586377.96207433543 + y: 4140678.6163988174 + } + point { + x: 586377.76826667844 + y: 4140678.6658729259 + } + point { + x: 586377.57445902133 + y: 4140678.7153470349 + } + point { + x: 586377.38065136434 + y: 4140678.7648211434 + } + point { + x: 586377.18684370734 + y: 4140678.8142952519 + } + point { + x: 586376.99303605023 + y: 4140678.8637693608 + } + point { + x: 586376.79922839324 + y: 4140678.9132434693 + } + point { + x: 586376.60542073613 + y: 4140678.9627175783 + } + point { + x: 586376.41161307914 + y: 4140679.0121916868 + } + point { + x: 586376.217805422 + y: 4140679.0616657953 + } + point { + x: 586376.023997765 + y: 4140679.1111399042 + } + point { + x: 586375.83019010792 + y: 4140679.1606140127 + } + point { + x: 586375.63638245093 + y: 4140679.2100881212 + } + point { + x: 586375.44257479382 + y: 4140679.25956223 + } + point { + x: 586375.24876713683 + y: 4140679.3090363387 + } + point { + x: 586375.05495947972 + y: 4140679.3585104477 + } + point { + x: 586374.86115182273 + y: 4140679.4079845562 + } + point { + x: 586374.66734416573 + y: 4140679.4574586647 + } + point { + x: 586374.47353650862 + y: 4140679.5069327736 + } + point { + x: 586374.27972885163 + y: 4140679.5564068821 + } + point { + x: 586374.08592119452 + y: 4140679.6058809911 + } + point { + x: 586373.89211353753 + y: 4140679.6553550996 + } + point { + x: 586373.69830588042 + y: 4140679.7048292081 + } + point { + x: 586373.50449822342 + y: 4140679.7543033171 + } + point { + x: 586373.31069056632 + y: 4140679.8037774255 + } + point { + x: 586373.11688290932 + y: 4140679.8532515345 + } + point { + x: 586372.92307525221 + y: 4140679.902725643 + } + point { + x: 586372.72926759522 + y: 4140679.9521997515 + } + point { + x: 586372.53545993811 + y: 4140680.0016738605 + } + point { + x: 586372.34165228112 + y: 4140680.051147969 + } + point { + x: 586372.14784462412 + y: 4140680.1006220779 + } + point { + x: 586371.954036967 + y: 4140680.1500961864 + } + point { + x: 586371.76022931 + y: 4140680.1995702949 + } + point { + x: 586371.56642165291 + y: 4140680.2490444039 + } + point { + x: 586371.37261399592 + y: 4140680.2985185124 + } + point { + x: 586371.17880633881 + y: 4140680.3479926209 + } + point { + x: 586370.98499868182 + y: 4140680.39746673 + } + point { + x: 586370.79119102471 + y: 4140680.4469408384 + } + point { + x: 586370.59738336771 + y: 4140680.4964149473 + } + point { + x: 586370.4035757106 + y: 4140680.5458890558 + } + point { + x: 586370.20976805361 + y: 4140680.5953631643 + } + point { + x: 586370.0159603965 + y: 4140680.6448372733 + } + point { + x: 586369.82215273951 + y: 4140680.6943113818 + } + point { + x: 586369.62834508251 + y: 4140680.7437854907 + } + point { + x: 586369.4345374254 + y: 4140680.7932595992 + } + point { + x: 586369.24072976841 + y: 4140680.8427337077 + } + point { + x: 586369.0469221113 + y: 4140680.8922078167 + } + point { + x: 586368.85311445431 + y: 4140680.9416819252 + } + point { + x: 586368.6593067972 + y: 4140680.9911560342 + } + point { + x: 586368.46549914021 + y: 4140681.0406301427 + } + point { + x: 586368.2716914831 + y: 4140681.0901042512 + } + point { + x: 586368.0778838261 + y: 4140681.13957836 + } + point { + x: 586367.884076169 + y: 4140681.1890524686 + } + point { + x: 586367.690268512 + y: 4140681.2385265771 + } + point { + x: 586367.49646085489 + y: 4140681.2880006861 + } + point { + x: 586367.3026531979 + y: 4140681.3374747946 + } + point { + x: 586367.1088455409 + y: 4140681.3869489036 + } + point { + x: 586366.91503788379 + y: 4140681.4364230121 + } + point { + x: 586366.7212302268 + y: 4140681.4858971206 + } + point { + x: 586366.52742256969 + y: 4140681.5353712295 + } + point { + x: 586366.3336149127 + y: 4140681.584845338 + } + point { + x: 586366.13980725559 + y: 4140681.634319447 + } + point { + x: 586365.9459995986 + y: 4140681.6837935555 + } + point { + x: 586365.75219194149 + y: 4140681.733267664 + } + point { + x: 586365.55838428449 + y: 4140681.7827417729 + } + point { + x: 586365.36457662738 + y: 4140681.8322158814 + } + point { + x: 586365.17076897039 + y: 4140681.8816899904 + } + point { + x: 586364.97696131328 + y: 4140681.9311640989 + } + point { + x: 586364.78315365629 + y: 4140681.9806382074 + } + point { + x: 586364.58934599929 + y: 4140682.0301123164 + } + point { + x: 586364.39553834219 + y: 4140682.0795864249 + } + point { + x: 586364.20173068519 + y: 4140682.1290605338 + } + point { + x: 586364.00792302808 + y: 4140682.1785346423 + } + point { + x: 586363.81411537109 + y: 4140682.2280087508 + } + point { + x: 586363.620307714 + y: 4140682.27748286 + } + point { + x: 586363.426500057 + y: 4140682.3269569683 + } + point { + x: 586363.23269239988 + y: 4140682.3764310768 + } + point { + x: 586363.03888474288 + y: 4140682.4259051858 + } + point { + x: 586362.84507708577 + y: 4140682.4753792943 + } + point { + x: 586362.65126942878 + y: 4140682.5248534032 + } + point { + x: 586362.45746177167 + y: 4140682.5743275117 + } + point { + x: 586362.26365411468 + y: 4140682.62380162 + } + point { + x: 586362.06984645769 + y: 4140682.6732757292 + } + point { + x: 586361.87603880058 + y: 4140682.7227498377 + } + point { + x: 586361.68223114358 + y: 4140682.7722239466 + } + point { + x: 586361.48842348647 + y: 4140682.8216980551 + } + point { + x: 586361.29461582948 + y: 4140682.8711721636 + } + point { + x: 586361.10080817237 + y: 4140682.9206462726 + } + point { + x: 586360.90700051538 + y: 4140682.9701203811 + } + point { + x: 586360.71319285827 + y: 4140683.01959449 + } + point { + x: 586360.51938520127 + y: 4140683.0690685986 + } + point { + x: 586360.32557754416 + y: 4140683.1185427071 + } + point { + x: 586360.13176988717 + y: 4140683.168016816 + } + point { + x: 586359.93796223006 + y: 4140683.2174909245 + } + point { + x: 586359.74415457307 + y: 4140683.266965033 + } + point { + x: 586359.55034691608 + y: 4140683.316439142 + } + point { + x: 586359.356539259 + y: 4140683.3659132505 + } + point { + x: 586359.162731602 + y: 4140683.4153873594 + } + point { + x: 586358.96892394486 + y: 4140683.4648614679 + } + point { + x: 586358.77511628787 + y: 4140683.5143355764 + } + point { + x: 586358.58130863076 + y: 4140683.5638096854 + } + point { + x: 586358.38750097377 + y: 4140683.6132837939 + } + point { + x: 586358.19369331666 + y: 4140683.6627579029 + } + point { + x: 586357.99988565966 + y: 4140683.7122320114 + } + point { + x: 586357.80607800256 + y: 4140683.76170612 + } + point { + x: 586357.61227034556 + y: 4140683.8111802288 + } + point { + x: 586357.41846268845 + y: 4140683.8606543373 + } + point { + x: 586357.22465503146 + y: 4140683.9101284463 + } + point { + x: 586357.03084737447 + y: 4140683.9596025548 + } + point { + x: 586356.83703971736 + y: 4140684.0090766633 + } + point { + x: 586356.64323206036 + y: 4140684.0585507723 + } + point { + x: 586356.44942440325 + y: 4140684.1080248808 + } + point { + x: 586356.25561674626 + y: 4140684.1574989893 + } + point { + x: 586356.06180908915 + y: 4140684.2069730982 + } + point { + x: 586355.86800143216 + y: 4140684.2564472067 + } + point { + x: 586355.674193775 + y: 4140684.3059213157 + } + point { + x: 586355.480386118 + y: 4140684.3553954242 + } + point { + x: 586355.286578461 + y: 4140684.4048695327 + } + point { + x: 586355.092770804 + y: 4140684.4543436416 + } + point { + x: 586354.89896314684 + y: 4140684.50381775 + } + point { + x: 586354.70515548985 + y: 4140684.5532918591 + } + point { + x: 586354.51134783286 + y: 4140684.6027659676 + } + point { + x: 586354.31754017575 + y: 4140684.6522400761 + } + point { + x: 586354.12373251875 + y: 4140684.7017141851 + } + point { + x: 586353.92992486164 + y: 4140684.7511882936 + } + point { + x: 586353.73611720465 + y: 4140684.8006624025 + } + point { + x: 586353.54230954754 + y: 4140684.850136511 + } + point { + x: 586353.34850189055 + y: 4140684.8996106195 + } + point { + x: 586353.15469423344 + y: 4140684.9490847285 + } + point { + x: 586352.96088657645 + y: 4140684.998558837 + } + point { + x: 586352.76707891934 + y: 4140685.048032946 + } + point { + x: 586352.57327126234 + y: 4140685.0975070545 + } + point { + x: 586352.37946360523 + y: 4140685.146981163 + } + point { + x: 586352.18565594824 + y: 4140685.1964552719 + } + point { + x: 586351.99184829125 + y: 4140685.2459293804 + } + point { + x: 586351.79804063414 + y: 4140685.2954034889 + } + point { + x: 586351.60423297714 + y: 4140685.3448775979 + } + point { + x: 586351.41042532 + y: 4140685.3943517064 + } + point { + x: 586351.216617663 + y: 4140685.4438258153 + } + point { + x: 586351.02281000593 + y: 4140685.4932999238 + } + point { + x: 586350.82900234894 + y: 4140685.5427740323 + } + point { + x: 586350.63519469183 + y: 4140685.5922481413 + } + point { + x: 586350.44138703484 + y: 4140685.64172225 + } + point { + x: 586350.24757937773 + y: 4140685.6911963588 + } + point { + x: 586350.05377172073 + y: 4140685.7406704673 + } + point { + x: 586349.85996406362 + y: 4140685.7901445758 + } + point { + x: 586349.66615640663 + y: 4140685.8396186847 + } + point { + x: 586349.47234874964 + y: 4140685.8890927932 + } + point { + x: 586349.27854109253 + y: 4140685.9385669022 + } + point { + x: 586349.08473343553 + y: 4140685.9880410107 + } + point { + x: 586348.89092577843 + y: 4140686.0375151192 + } + point { + x: 586348.69711812143 + y: 4140686.0869892281 + } + point { + x: 586348.50331046432 + y: 4140686.1364633366 + } + point { + x: 586348.30950280733 + y: 4140686.1859374451 + } + point { + x: 586348.179803118 + y: 4140686.2605034681 + } + point { + x: 586348.05010342877 + y: 4140686.3350694906 + } + point { + x: 586347.92040373944 + y: 4140686.4096355131 + } + point { + x: 586347.7907040501 + y: 4140686.484201536 + } + point { + x: 586347.66100436088 + y: 4140686.5587675585 + } + point { + x: 586347.53130467155 + y: 4140686.633333581 + } + point { + x: 586347.40160498221 + y: 4140686.7078996035 + } + point { + x: 586347.271905293 + y: 4140686.7824656265 + } + point { + x: 586347.14220560365 + y: 4140686.857031649 + } + point { + x: 586347.01250591443 + y: 4140686.9315976715 + } + point { + x: 586346.8828062251 + y: 4140687.0061636944 + } + point { + x: 586346.75310653576 + y: 4140687.0807297169 + } + point { + x: 586346.62340684654 + y: 4140687.1552957394 + } + point { + x: 586346.49370715721 + y: 4140687.2298617619 + } + point { + x: 586346.39175426017 + y: 4140687.326609931 + } + point { + x: 586346.28980136313 + y: 4140687.4233580995 + } + point { + x: 586346.1878484661 + y: 4140687.5201062681 + } + point { + x: 586346.08589556906 + y: 4140687.6168544372 + } + point { + x: 586345.983942672 + y: 4140687.7136026057 + } + point { + x: 586345.881989775 + y: 4140687.8103507743 + } + point { + x: 586345.780036878 + y: 4140687.9070989434 + } + point { + x: 586345.67808398092 + y: 4140688.0038471119 + } + point { + x: 586345.57613108389 + y: 4140688.1005952805 + } + point { + x: 586345.47417818685 + y: 4140688.1973434491 + } + point { + x: 586345.37222528982 + y: 4140688.2940916182 + } + point { + x: 586345.27027239278 + y: 4140688.3908397867 + } + point { + x: 586345.16831949574 + y: 4140688.4875879553 + } + point { + x: 586345.11601957423 + y: 4140688.6001289226 + } + point { + x: 586345.06371965283 + y: 4140688.71266989 + } + point { + x: 586345.01141973131 + y: 4140688.8252108572 + } + point { + x: 586344.95911980979 + y: 4140688.9377518245 + } + point { + x: 586344.90681988827 + y: 4140689.0502927918 + } + point { + x: 586344.85451996676 + y: 4140689.1628337591 + } + point { + x: 586344.80222004524 + y: 4140689.2753747264 + } + point { + x: 586344.74992012384 + y: 4140689.3879156937 + } + point { + x: 586344.69762020232 + y: 4140689.500456661 + } + point { + x: 586344.6453202808 + y: 4140689.6129976283 + } + point { + x: 586344.59302035929 + y: 4140689.7255385956 + } + point { + x: 586344.54072043777 + y: 4140689.8380795629 + } + point { + x: 586344.48842051625 + y: 4140689.95062053 + } + point { + x: 586344.43612059474 + y: 4140690.0631614975 + } + point { + x: 586344.38382067333 + y: 4140690.1757024643 + } + point { + x: 586344.360259598 + y: 4140690.28218568 + } + point { + x: 586344.33669852267 + y: 4140690.3886688952 + } + point { + x: 586344.31313744735 + y: 4140690.4951521102 + } + point { + x: 586344.28957637213 + y: 4140690.6016353257 + } + point { + x: 586344.2660152968 + y: 4140690.7081185412 + } + point { + x: 586344.24245422147 + y: 4140690.8146017562 + } + point { + x: 586344.21889314626 + y: 4140690.9210849716 + } + point { + x: 586344.22572251 + y: 4140691.0381329027 + } + point { + x: 586344.23255187389 + y: 4140691.1551808333 + } + point { + x: 586344.23938123765 + y: 4140691.2722287644 + } + point { + x: 586344.24621060141 + y: 4140691.3892766954 + } + point { + x: 586344.25303996529 + y: 4140691.506324626 + } + point { + x: 586344.259869329 + y: 4140691.6233725571 + } + point { + x: 586344.26669869293 + y: 4140691.7404204877 + } + point { + x: 586344.27352805668 + y: 4140691.8574684188 + } + point { + x: 586344.28035742044 + y: 4140691.97451635 + } + point { + x: 586344.28718678432 + y: 4140692.0915642804 + } + point { + x: 586344.29401614808 + y: 4140692.2086122115 + } + point { + x: 586344.300845512 + y: 4140692.3256601421 + } + point { + x: 586344.341718774 + y: 4140692.5195047706 + } + point { + x: 586344.38316394691 + y: 4140692.7132016281 + } + point { + x: 586344.42516721389 + y: 4140692.9067542912 + } + point { + x: 586344.46771475847 + y: 4140693.1001663366 + } + point { + x: 586344.5107927639 + y: 4140693.2934413403 + } + point { + x: 586344.55438741378 + y: 4140693.4865828794 + } + point { + x: 586344.59848489147 + y: 4140693.6795945307 + } + point { + x: 586344.64307138021 + y: 4140693.87247987 + } + point { + x: 586344.68813306361 + y: 4140694.0652424749 + } + point { + x: 586344.73365612491 + y: 4140694.2578859208 + } + point { + x: 586344.77962674759 + y: 4140694.4504137854 + } + point { + x: 586344.82603111514 + y: 4140694.6428296445 + } + point { + x: 586344.87285541091 + y: 4140694.8351370748 + } + point { + x: 586344.92008581827 + y: 4140695.0273396531 + } + point { + x: 586344.96770852059 + y: 4140695.2194409561 + } + point { + x: 586345.01570970134 + y: 4140695.4114445597 + } + point { + x: 586345.064075544 + y: 4140695.6033540415 + } + point { + x: 586345.11279223184 + y: 4140695.7951729773 + } + point { + x: 586345.16184594831 + y: 4140695.9869049438 + } + point { + x: 586345.21122287679 + y: 4140696.1785535179 + } + point { + x: 586345.26090920076 + y: 4140696.3701222758 + } + point { + x: 586345.31089110358 + y: 4140696.5616147942 + } + point { + x: 586345.36115476873 + y: 4140696.7530346494 + } + point { + x: 586345.41168637946 + y: 4140696.9443854187 + } + point { + x: 586345.46247211937 + y: 4140697.1356706782 + } + point { + x: 586345.5134981717 + y: 4140697.3268940048 + } + point { + x: 586345.56475071993 + y: 4140697.5180589748 + } + point { + x: 586345.61621594743 + y: 4140697.7091691643 + } + point { + x: 586345.66788003768 + y: 4140697.9002281507 + } + point { + x: 586345.719729174 + y: 4140698.09123951 + } + point { + x: 586345.77174953988 + y: 4140698.2822068194 + } + point { + x: 586345.82392731868 + y: 4140698.4731336548 + } + point { + x: 586345.87624869379 + y: 4140698.6640235935 + } + point { + x: 586345.92869984871 + y: 4140698.8548802114 + } + point { + x: 586345.98126696667 + y: 4140699.0457070852 + } + point { + x: 586346.03393623128 + y: 4140699.2365077916 + } + point { + x: 586346.08669382578 + y: 4140699.4272859073 + } + point { + x: 586346.13952593366 + y: 4140699.6180450087 + } + point { + x: 586346.19241873827 + y: 4140699.808788673 + } + point { + x: 586346.2453584231 + y: 4140699.9995204755 + } + point { + x: 586346.29833117151 + y: 4140700.1902439939 + } + point { + x: 586346.35132316686 + y: 4140700.3809628044 + } + point { + x: 586346.40432059264 + y: 4140700.5716804834 + } + point { + x: 586346.45730963221 + y: 4140700.7624006076 + } + point { + x: 586346.510276469 + y: 4140700.9531267537 + } + point { + x: 586346.56320728653 + y: 4140701.143862498 + } + point { + x: 586346.61608826788 + y: 4140701.3346114177 + } + point { + x: 586346.66890559671 + y: 4140701.5253770887 + } + point { + x: 586346.72164545953 + y: 4140701.7161630867 + } + point { + x: 586346.77429812343 + y: 4140701.9069719287 + } + point { + x: 586346.826865971 + y: 4140702.0978029859 + } + point { + x: 586346.87935362256 + y: 4140702.2886550482 + } + point { + x: 586346.931765699 + y: 4140702.4795269058 + } + point { + x: 586346.98410682054 + y: 4140702.67041735 + } + point { + x: 586347.03638160776 + y: 4140702.8613251694 + } + point { + x: 586347.08859468147 + y: 4140703.0522491555 + } + point { + x: 586347.14075066184 + y: 4140703.2431880981 + } + point { + x: 586347.19285416976 + y: 4140703.4341407875 + } + point { + x: 586347.2449098255 + y: 4140703.6251060143 + } + point { + x: 586347.29692224984 + y: 4140703.8160825684 + } + point { + x: 586347.348896063 + y: 4140704.00706924 + } + point { + x: 586347.4008358859 + y: 4140704.1980648194 + } + point { + x: 586347.45274633879 + y: 4140704.3890680973 + } + point { + x: 586347.50463204237 + y: 4140704.5800778633 + } + point { + x: 586347.556497617 + y: 4140704.7710929085 + } + point { + x: 586347.60834768345 + y: 4140704.9621120221 + } + point { + x: 586347.66018686222 + y: 4140705.1531339954 + } + point { + x: 586347.71201977367 + y: 4140705.344157618 + } + point { + x: 586347.76385103853 + y: 4140705.53518168 + } + point { + x: 586347.81568527722 + y: 4140705.7262049727 + } + point { + x: 586347.86752711039 + y: 4140705.9172262852 + } + point { + x: 586347.91938115843 + y: 4140706.1082444089 + } + point { + x: 586347.9712520421 + y: 4140706.2992581329 + } + point { + x: 586348.02314411546 + y: 4140706.4902663175 + } + point { + x: 586348.07505844347 + y: 4140706.6812686841 + } + point { + x: 586348.12699387176 + y: 4140706.8722655345 + } + point { + x: 586348.17894920486 + y: 4140707.06325718 + } + point { + x: 586348.230923247 + y: 4140707.254243935 + } + point { + x: 586348.28291480266 + y: 4140707.445226111 + } + point { + x: 586348.334922676 + y: 4140707.6362040206 + } + point { + x: 586348.3869456714 + y: 4140707.8271779767 + } + point { + x: 586348.43898259324 + y: 4140708.0181482919 + } + point { + x: 586348.4910322458 + y: 4140708.2091152784 + } + point { + x: 586348.54309343337 + y: 4140708.4000792489 + } + point { + x: 586348.59516496037 + y: 4140708.5910405167 + } + point { + x: 586348.6472456312 + y: 4140708.7819993934 + } + point { + x: 586348.69933425006 + y: 4140708.9729561922 + } + point { + x: 586348.75142962125 + y: 4140709.1639112253 + } + point { + x: 586348.80353054928 + y: 4140709.3548648059 + } + point { + x: 586348.85563583835 + y: 4140709.5458172457 + } + point { + x: 586348.90774429287 + y: 4140709.736768858 + } + point { + x: 586348.95985471713 + y: 4140709.9277199553 + } + point { + x: 586349.01196591533 + y: 4140710.1186708496 + } + point { + x: 586349.0640766921 + y: 4140710.3096218542 + } + point { + x: 586349.11618585151 + y: 4140710.5005732817 + } + point { + x: 586349.1682921981 + y: 4140710.6915254439 + } + point { + x: 586349.22039453592 + y: 4140710.8824786539 + } + point { + x: 586349.27249167161 + y: 4140711.0734332241 + } + point { + x: 586349.32458283973 + y: 4140711.2643893543 + } + point { + x: 586349.37666823051 + y: 4140711.4553469941 + } + point { + x: 586349.42874816363 + y: 4140711.6463060612 + } + point { + x: 586349.4808229584 + y: 4140711.8372664712 + } + point { + x: 586349.53289293475 + y: 4140712.0282281409 + } + point { + x: 586349.5849584121 + y: 4140712.2191909864 + } + point { + x: 586349.63701970992 + y: 4140712.4101549247 + } + point { + x: 586349.689077148 + y: 4140712.6011198717 + } + point { + x: 586349.74113104586 + y: 4140712.792085744 + } + point { + x: 586349.793181723 + y: 4140712.9830524586 + } + point { + x: 586349.84522949893 + y: 4140713.1740199313 + } + point { + x: 586349.89727469347 + y: 4140713.3649880788 + } + point { + x: 586349.94931762607 + y: 4140713.5559568177 + } + point { + x: 586350.00135861628 + y: 4140713.7469260641 + } + point { + x: 586350.05339798378 + y: 4140713.9378957353 + } + point { + x: 586350.105436048 + y: 4140714.1288657463 + } + point { + x: 586350.15747312864 + y: 4140714.3198360149 + } + point { + x: 586350.20950954524 + y: 4140714.5108064571 + } + point { + x: 586350.26154561748 + y: 4140714.7017769893 + } + point { + x: 586350.3135816647 + y: 4140714.8927475275 + } + point { + x: 586350.36561800668 + y: 4140715.0837179893 + } + point { + x: 586350.417654963 + y: 4140715.27468829 + } + point { + x: 586350.46969285316 + y: 4140715.4656583467 + } + point { + x: 586350.52173199679 + y: 4140715.656628076 + } + point { + x: 586350.5737726849 + y: 4140715.8475974011 + } + point { + x: 586350.62581496057 + y: 4140716.0385663114 + } + point { + x: 586350.67785873928 + y: 4140716.229534829 + } + point { + x: 586350.72990393511 + y: 4140716.420502976 + } + point { + x: 586350.78195046238 + y: 4140716.6114707747 + } + point { + x: 586350.83399823552 + y: 4140716.8024382479 + } + point { + x: 586350.88604716863 + y: 4140716.993405418 + } + point { + x: 586350.93809717614 + y: 4140717.1843723068 + } + point { + x: 586350.99014817225 + y: 4140717.3753389376 + } + point { + x: 586351.04220007116 + y: 4140717.5663053324 + } + point { + x: 586351.0942527873 + y: 4140717.7572715133 + } + point { + x: 586351.14630623488 + y: 4140717.9482375029 + } + point { + x: 586351.19836032821 + y: 4140718.139203324 + } + point { + x: 586351.25041498162 + y: 4140718.3301689983 + } + point { + x: 586351.30247010919 + y: 4140718.5211345493 + } + point { + x: 586351.35452562547 + y: 4140718.7120999983 + } + point { + x: 586351.40658144455 + y: 4140718.9030653681 + } + point { + x: 586351.45863748074 + y: 4140719.0940306811 + } + point { + x: 586351.51069364836 + y: 4140719.2849959596 + } + point { + x: 586351.56274986162 + y: 4140719.4759612265 + } + point { + x: 586351.614806035 + y: 4140719.6669265036 + } + point { + x: 586351.66686208255 + y: 4140719.8578918139 + } + point { + x: 586351.71891791874 + y: 4140720.048857179 + } + point { + x: 586351.77097345772 + y: 4140720.2398226219 + } + point { + x: 586351.82302861428 + y: 4140720.430788165 + } + point { + x: 586351.875083341 + y: 4140720.6217538207 + } + point { + x: 586351.92713765474 + y: 4140720.812719584 + } + point { + x: 586351.97919157846 + y: 4140721.0036854493 + } + point { + x: 586352.031245135 + y: 4140721.1946514104 + } + point { + x: 586352.08329834742 + y: 4140721.3856174615 + } + point { + x: 586352.13535123866 + y: 4140721.5765835969 + } + point { + x: 586352.18740383175 + y: 4140721.76754981 + } + point { + x: 586352.23945614963 + y: 4140721.9585160953 + } + point { + x: 586352.29150821513 + y: 4140722.1494824463 + } + point { + x: 586352.34356005141 + y: 4140722.3404488573 + } + point { + x: 586352.39561168139 + y: 4140722.5314153223 + } + point { + x: 586352.447663128 + y: 4140722.7223818349 + } + point { + x: 586352.49971441424 + y: 4140722.91334839 + } + point { + x: 586352.551765563 + y: 4140723.1043149806 + } + point { + x: 586352.60381659726 + y: 4140723.2952816011 + } + point { + x: 586352.65586754016 + y: 4140723.4862482459 + } + point { + x: 586352.7079184145 + y: 4140723.6772149084 + } + point { + x: 586352.75996924331 + y: 4140723.8681815825 + } + point { + x: 586352.81202004943 + y: 4140724.0591482627 + } + point { + x: 586352.864070856 + y: 4140724.2501149429 + } + point { + x: 586352.916121686 + y: 4140724.441081617 + } + point { + x: 586352.96817256219 + y: 4140724.632048279 + } + point { + x: 586353.02022350777 + y: 4140724.8230149229 + } + point { + x: 586353.07227454556 + y: 4140725.0139815426 + } + point { + x: 586353.12432569556 + y: 4140725.2049481329 + } + point { + x: 586353.17637695908 + y: 4140725.3959146938 + } + point { + x: 586353.22842832981 + y: 4140725.5868812264 + } + point { + x: 586353.2804798017 + y: 4140725.7778477329 + } + point { + x: 586353.33253136848 + y: 4140725.9688142142 + } + point { + x: 586353.38458302419 + y: 4140726.1597806723 + } + point { + x: 586353.43663476256 + y: 4140726.3507471089 + } + point { + x: 586353.48868657742 + y: 4140726.5417135255 + } + point { + x: 586353.54073846259 + y: 4140726.732679924 + } + point { + x: 586353.592790412 + y: 4140726.9236463052 + } + point { + x: 586353.64484241954 + y: 4140727.1146126715 + } + point { + x: 586353.69689447887 + y: 4140727.3055790244 + } + point { + x: 586353.74894658406 + y: 4140727.4965453651 + } + point { + x: 586353.80099872872 + y: 4140727.6875116951 + } + point { + x: 586353.85305090691 + y: 4140727.8784780167 + } + point { + x: 586353.90510311234 + y: 4140728.0694443313 + } + point { + x: 586353.95715533884 + y: 4140728.2604106404 + } + point { + x: 586354.00920758047 + y: 4140728.4513769452 + } + point { + x: 586354.06125983072 + y: 4140728.6423432482 + } + point { + x: 586354.11331208376 + y: 4140728.8333095503 + } + point { + x: 586354.16536433331 + y: 4140729.0242758533 + } + point { + x: 586354.2174165732 + y: 4140729.2152421586 + } + point { + x: 586354.26946879725 + y: 4140729.4062084681 + } + point { + x: 586354.32152099942 + y: 4140729.5971747837 + } + point { + x: 586354.37357317354 + y: 4140729.7881411063 + } + point { + x: 586354.4256253168 + y: 4140729.9791074372 + } + point { + x: 586354.47767743061 + y: 4140730.1700737756 + } + point { + x: 586354.52972951648 + y: 4140730.3610401214 + } + point { + x: 586354.58178157627 + y: 4140730.5520064738 + } + point { + x: 586354.63383361138 + y: 4140730.7429728326 + } + point { + x: 586354.68588562368 + y: 4140730.933939198 + } + point { + x: 586354.73793761479 + y: 4140731.1249055685 + } + point { + x: 586354.78998958622 + y: 4140731.3158719442 + } + point { + x: 586354.84204153973 + y: 4140731.5068383245 + } + point { + x: 586354.89409347693 + y: 4140731.697804709 + } + point { + x: 586354.94614539959 + y: 4140731.8887710976 + } + point { + x: 586354.99819730909 + y: 4140732.0797374891 + } + point { + x: 586355.0502492073 + y: 4140732.2707038838 + } + point { + x: 586355.10230109585 + y: 4140732.4616702814 + } + point { + x: 586355.15435297636 + y: 4140732.6526366808 + } + point { + x: 586355.20640485035 + y: 4140732.843603082 + } + point { + x: 586355.25845671969 + y: 4140733.0345694842 + } + point { + x: 586355.31050858588 + y: 4140733.2255358873 + } + point { + x: 586355.36256045068 + y: 4140733.4165022909 + } + point { + x: 586355.4146123156 + y: 4140733.6074686944 + } + point { + x: 586355.46666418237 + y: 4140733.7984350976 + } + point { + x: 586355.51871605264 + y: 4140733.9894014997 + } + point { + x: 586355.570767928 + y: 4140734.1803679005 + } + point { + x: 586355.62281981029 + y: 4140734.3713342994 + } + point { + x: 586355.67487170058 + y: 4140734.5623006965 + } + point { + x: 586355.726923599 + y: 4140734.7532670912 + } + point { + x: 586355.77897550515 + y: 4140734.9442334836 + } + point { + x: 586355.83102741849 + y: 4140735.1351998746 + } + point { + x: 586355.88307933859 + y: 4140735.3261662638 + } + point { + x: 586355.935131265 + y: 4140735.5171326511 + } + point { + x: 586355.98718319729 + y: 4140735.7080990369 + } + point { + x: 586356.03923513507 + y: 4140735.8990654214 + } + point { + x: 586356.09128707787 + y: 4140736.0900318045 + } + point { + x: 586356.14333902521 + y: 4140736.2809981867 + } + point { + x: 586356.19539097662 + y: 4140736.4719645674 + } + point { + x: 586356.24744293175 + y: 4140736.6629309477 + } + point { + x: 586356.29949489015 + y: 4140736.8538973266 + } + point { + x: 586356.35154685134 + y: 4140737.0448637051 + } + point { + x: 586356.40359881485 + y: 4140737.2358300826 + } + point { + x: 586356.45565078035 + y: 4140737.42679646 + } + point { + x: 586356.50770274724 + y: 4140737.6177628366 + } + point { + x: 586356.5597547153 + y: 4140737.8087292132 + } + point { + x: 586356.61180668382 + y: 4140737.9996955898 + } + point { + x: 586356.66385865246 + y: 4140738.1906619663 + } + point { + x: 586356.71591062087 + y: 4140738.3816283424 + } + point { + x: 586356.76796258858 + y: 4140738.572594719 + } + point { + x: 586356.820014555 + y: 4140738.763561096 + } + point { + x: 586356.87206651992 + y: 4140738.9545274735 + } + point { + x: 586356.92411848274 + y: 4140739.1454938515 + } + point { + x: 586356.97617044335 + y: 4140739.33646023 + } + point { + x: 586357.02822240186 + y: 4140739.5274266088 + } + point { + x: 586357.08027435828 + y: 4140739.7183929887 + } + point { + x: 586357.132326313 + y: 4140739.9093593685 + } + point { + x: 586357.18437826587 + y: 4140740.1003257493 + } + point { + x: 586357.23643021716 + y: 4140740.29129213 + } + point { + x: 586357.28848216683 + y: 4140740.4822585112 + } + point { + x: 586357.34053411521 + y: 4140740.6732248929 + } + point { + x: 586357.39258606231 + y: 4140740.8641912751 + } + point { + x: 586357.44463800814 + y: 4140741.0551576577 + } + point { + x: 586357.496689953 + y: 4140741.2461240403 + } + point { + x: 586357.548741897 + y: 4140741.437090423 + } + point { + x: 586357.60079384013 + y: 4140741.628056806 + } + point { + x: 586357.65284578269 + y: 4140741.8190231891 + } + point { + x: 586357.70489772456 + y: 4140742.0099895727 + } + point { + x: 586357.756949666 + y: 4140742.2009559562 + } + point { + x: 586357.80900160712 + y: 4140742.39192234 + } + point { + x: 586357.861053548 + y: 4140742.5828887234 + } + point { + x: 586357.91310548887 + y: 4140742.7738551069 + } + point { + x: 586357.96515742969 + y: 4140742.9648214909 + } + point { + x: 586358.01720937062 + y: 4140743.1557878745 + } + point { + x: 586358.0692613119 + y: 4140743.346754258 + } + point { + x: 586358.12131325353 + y: 4140743.5377206416 + } + point { + x: 586358.17336519575 + y: 4140743.7286870247 + } + point { + x: 586358.22541713843 + y: 4140743.9196534078 + } + point { + x: 586358.27746908169 + y: 4140744.1106197909 + } + point { + x: 586358.32952102553 + y: 4140744.3015861739 + } + point { + x: 586358.38157297 + y: 4140744.4925525566 + } + point { + x: 586358.43362491473 + y: 4140744.6835189392 + } + point { + x: 586358.48567686009 + y: 4140744.8744853218 + } + point { + x: 586358.53772880579 + y: 4140745.065451704 + } + point { + x: 586358.58978075185 + y: 4140745.2564180861 + } + point { + x: 586358.64183269837 + y: 4140745.4473844683 + } + point { + x: 586358.69388464512 + y: 4140745.6383508504 + } + point { + x: 586358.74593659223 + y: 4140745.8293172326 + } + point { + x: 586358.79798853956 + y: 4140746.0202836148 + } + point { + x: 586358.85004048713 + y: 4140746.2112499964 + } + point { + x: 586358.90209243482 + y: 4140746.4022163786 + } + point { + x: 586358.95414438273 + y: 4140746.5931827603 + } + point { + x: 586359.00619633088 + y: 4140746.784149142 + } + point { + x: 586359.058248279 + y: 4140746.9751155237 + } + point { + x: 586359.1103002273 + y: 4140747.1660819054 + } + point { + x: 586359.16235217557 + y: 4140747.3570482871 + } + point { + x: 586359.21440412384 + y: 4140747.5480146687 + } + point { + x: 586359.2664560721 + y: 4140747.7389810504 + } + point { + x: 586359.31850802025 + y: 4140747.9299474321 + } + point { + x: 586359.3705599684 + y: 4140748.1209138143 + } + point { + x: 586359.42261191644 + y: 4140748.311880196 + } + point { + x: 586359.47466386424 + y: 4140748.5028465777 + } + point { + x: 586359.52671581192 + y: 4140748.69381296 + } + point { + x: 586359.57876775949 + y: 4140748.8847793415 + } + point { + x: 586359.63081970683 + y: 4140749.0757457237 + } + point { + x: 586359.68287165416 + y: 4140749.2667121054 + } + point { + x: 586359.73492360127 + y: 4140749.4576784875 + } + point { + x: 586359.78697554825 + y: 4140749.6486448697 + } + point { + x: 586359.83902749524 + y: 4140749.8396112514 + } + point { + x: 586359.891079442 + y: 4140750.0305776335 + } + point { + x: 586359.94313138875 + y: 4140750.2215440157 + } + point { + x: 586359.99518333538 + y: 4140750.4125103978 + } + point { + x: 586360.047235282 + y: 4140750.60347678 + } + point { + x: 586360.09928722843 + y: 4140750.7944431622 + } + point { + x: 586360.151339175 + y: 4140750.9854095443 + } + point { + x: 586360.20339112135 + y: 4140751.1763759269 + } + point { + x: 586360.25544306764 + y: 4140751.3673423091 + } + point { + x: 586360.307495014 + y: 4140751.5583086913 + } + point { + x: 586360.35954696033 + y: 4140751.7492750734 + } + point { + x: 586360.41159890662 + y: 4140751.9402414556 + } + point { + x: 586360.46365085291 + y: 4140752.1312078377 + } + point { + x: 586360.5157027992 + y: 4140752.3221742203 + } + point { + x: 586360.56775474548 + y: 4140752.5131406025 + } + point { + x: 586360.61980669177 + y: 4140752.7041069847 + } + point { + x: 586360.67185863818 + y: 4140752.8950733668 + } + point { + x: 586360.72391058446 + y: 4140753.086039749 + } + point { + x: 586360.775962531 + y: 4140753.2770061311 + } + point { + x: 586360.82801447739 + y: 4140753.4679725133 + } + point { + x: 586360.88006642391 + y: 4140753.6589388954 + } + point { + x: 586360.93211837043 + y: 4140753.8499052776 + } + point { + x: 586360.98417031707 + y: 4140754.0408716598 + } + point { + x: 586361.03622226359 + y: 4140754.2318380419 + } + point { + x: 586361.08827421023 + y: 4140754.4228044241 + } + point { + x: 586361.140326157 + y: 4140754.6137708062 + } + point { + x: 586361.19237810362 + y: 4140754.8047371884 + } + point { + x: 586361.24443005037 + y: 4140754.9957035705 + } + point { + x: 586361.29648199712 + y: 4140755.1866699527 + } + point { + x: 586361.34853394388 + y: 4140755.3776363349 + } + point { + x: 586361.40058589063 + y: 4140755.568602717 + } + point { + x: 586361.45263783738 + y: 4140755.7595690992 + } + point { + x: 586361.50468978414 + y: 4140755.9505354813 + } + point { + x: 586361.556741731 + y: 4140756.1415018635 + } + point { + x: 586361.60879367776 + y: 4140756.3324682456 + } + point { + x: 586361.66084562463 + y: 4140756.5234346273 + } + point { + x: 586361.7128975715 + y: 4140756.7144010095 + } + point { + x: 586361.76494951826 + y: 4140756.9053673916 + } + point { + x: 586361.81700146513 + y: 4140757.0963337738 + } + point { + x: 586361.86905341188 + y: 4140757.287300156 + } + point { + x: 586361.92110535875 + y: 4140757.4782665381 + } + point { + x: 586361.9731573055 + y: 4140757.6692329203 + } + point { + x: 586362.02520925226 + y: 4140757.8601993024 + } + point { + x: 586362.07726119913 + y: 4140758.0511656846 + } + point { + x: 586362.12931314588 + y: 4140758.2421320663 + } + point { + x: 586362.18136509263 + y: 4140758.4330984484 + } + point { + x: 586362.23341703939 + y: 4140758.6240648306 + } + point { + x: 586362.285468986 + y: 4140758.8150312128 + } + point { + x: 586362.33752093278 + y: 4140759.0059975949 + } + point { + x: 586362.38957287953 + y: 4140759.1969639771 + } + point { + x: 586362.44162482629 + y: 4140759.3879303592 + } + point { + x: 586362.49367677292 + y: 4140759.5788967414 + } + point { + x: 586362.54572871968 + y: 4140759.7698631235 + } + point { + x: 586362.59778066631 + y: 4140759.9608295057 + } + point { + x: 586362.64983261307 + y: 4140760.1517958879 + } + point { + x: 586362.7018845597 + y: 4140760.34276227 + } + point { + x: 586362.75393650646 + y: 4140760.5337286522 + } + point { + x: 586362.8059884531 + y: 4140760.7246950343 + } + point { + x: 586362.85804039973 + y: 4140760.9156614165 + } + point { + x: 586362.91009234649 + y: 4140761.1066277986 + } + point { + x: 586362.96214429312 + y: 4140761.2975941808 + } + point { + x: 586363.01419623976 + y: 4140761.488560563 + } + point { + x: 586363.06624818651 + y: 4140761.6795269446 + } + point { + x: 586363.11830013315 + y: 4140761.8704933268 + } + point { + x: 586363.17035207979 + y: 4140762.061459709 + } + point { + x: 586363.22240402654 + y: 4140762.2524260911 + } + point { + x: 586363.27445597318 + y: 4140762.4433924733 + } + point { + x: 586363.32650791993 + y: 4140762.6343588554 + } + point { + x: 586363.37855986657 + y: 4140762.8253252376 + } + point { + x: 586363.43061181332 + y: 4140763.0162916197 + } + point { + x: 586363.48266376 + y: 4140763.2072580019 + } + point { + x: 586363.53471570672 + y: 4140763.3982243841 + } + point { + x: 586363.58676765335 + y: 4140763.5891907662 + } + point { + x: 586363.63881960011 + y: 4140763.7801571484 + } + point { + x: 586363.69087154674 + y: 4140763.9711235305 + } + point { + x: 586363.7429234935 + y: 4140764.1620899127 + } + point { + x: 586363.79497544013 + y: 4140764.3530562948 + } + point { + x: 586363.84702738689 + y: 4140764.544022677 + } + point { + x: 586363.89907933364 + y: 4140764.7349890592 + } + point { + x: 586363.95113128028 + y: 4140764.9259554413 + } + point { + x: 586364.003183227 + y: 4140765.1169218235 + } + point { + x: 586364.05523517379 + y: 4140765.3078882052 + } + point { + x: 586364.10728712042 + y: 4140765.4988545873 + } + point { + x: 586364.15933906718 + y: 4140765.6898209695 + } + point { + x: 586364.21139101393 + y: 4140765.8807873516 + } + point { + x: 586364.26344296057 + y: 4140766.0717537338 + } + point { + x: 586364.31549490732 + y: 4140766.2627201159 + } + point { + x: 586364.36754685408 + y: 4140766.4536864981 + } + point { + x: 586364.41959880071 + y: 4140766.6446528803 + } + point { + x: 586364.47165074747 + y: 4140766.8356192624 + } + point { + x: 586364.52370269422 + y: 4140767.0265856446 + } + point { + x: 586364.57575464086 + y: 4140767.2175520267 + } + point { + x: 586364.62780658761 + y: 4140767.4085184089 + } + point { + x: 586364.67985853436 + y: 4140767.599484791 + } + point { + x: 586364.731910481 + y: 4140767.7904511732 + } + point { + x: 586364.78396242775 + y: 4140767.9814175554 + } + point { + x: 586364.83601437439 + y: 4140768.1723839375 + } + point { + x: 586364.88806632115 + y: 4140768.3633503197 + } + point { + x: 586364.9401182679 + y: 4140768.5543167014 + } + point { + x: 586364.99217021454 + y: 4140768.7452830835 + } + point { + x: 586365.04422216129 + y: 4140768.9362494657 + } + point { + x: 586365.09627410793 + y: 4140769.1272158478 + } + point { + x: 586365.14832605468 + y: 4140769.31818223 + } + point { + x: 586365.20037800143 + y: 4140769.5091486122 + } + point { + x: 586365.25242994807 + y: 4140769.7001149943 + } + point { + x: 586365.30448189483 + y: 4140769.8910813765 + } + point { + x: 586365.35653384146 + y: 4140770.0820477586 + } + point { + x: 586365.40858578822 + y: 4140770.2730141408 + } + point { + x: 586365.460637735 + y: 4140770.4639805229 + } + point { + x: 586365.51268968161 + y: 4140770.6549469051 + } + point { + x: 586365.56474162836 + y: 4140770.8459132873 + } + point { + x: 586365.616793575 + y: 4140771.0368796694 + } + point { + x: 586365.66884552175 + y: 4140771.2278460516 + } + point { + x: 586365.72089746851 + y: 4140771.4188124337 + } + point { + x: 586365.77294941514 + y: 4140771.6097788159 + } + point { + x: 586365.8250013619 + y: 4140771.8007451976 + } + point { + x: 586365.87705330853 + y: 4140771.9917115797 + } + point { + x: 586365.92910525529 + y: 4140772.1826779619 + } + point { + x: 586365.98115720192 + y: 4140772.373644344 + } + point { + x: 586366.03320914868 + y: 4140772.5646107262 + } + point { + x: 586366.08526109543 + y: 4140772.7555771084 + } + point { + x: 586366.13731304207 + y: 4140772.9465434905 + } + point { + x: 586366.18936498882 + y: 4140773.1375098727 + } + point { + x: 586366.24141693546 + y: 4140773.3284762548 + } + point { + x: 586366.29346888221 + y: 4140773.519442637 + } + point { + x: 586366.345520829 + y: 4140773.7104090191 + } + point { + x: 586366.3975727756 + y: 4140773.9013754013 + } + point { + x: 586366.44962472236 + y: 4140774.0923417835 + } + point { + x: 586366.501676669 + y: 4140774.2833081656 + } + point { + x: 586366.55372861575 + y: 4140774.4742745478 + } + point { + x: 586366.6057805625 + y: 4140774.66524093 + } + point { + x: 586366.65783250914 + y: 4140774.8562073121 + } + point { + x: 586366.70988445589 + y: 4140775.0471736942 + } + point { + x: 586366.76193640253 + y: 4140775.2381400759 + } + point { + x: 586366.81398834928 + y: 4140775.4291064581 + } + point { + x: 586366.866040296 + y: 4140775.6200728402 + } + point { + x: 586366.91809224267 + y: 4140775.8110392224 + } + point { + x: 586366.97014418943 + y: 4140776.0020056046 + } + point { + x: 586367.02219613607 + y: 4140776.1929719867 + } + point { + x: 586367.07424808282 + y: 4140776.3839383689 + } + point { + x: 586367.12630002957 + y: 4140776.574904751 + } + point { + x: 586367.17835197621 + y: 4140776.7658711332 + } + point { + x: 586367.230403923 + y: 4140776.9568375153 + } + point { + x: 586367.28245586972 + y: 4140777.1478038975 + } + point { + x: 586367.33450781635 + y: 4140777.3387702797 + } + point { + x: 586367.38655976311 + y: 4140777.5297366618 + } + point { + x: 586367.43861170975 + y: 4140777.720703044 + } + point { + x: 586367.4906636565 + y: 4140777.9116694261 + } + point { + x: 586367.54271560325 + y: 4140778.1026358083 + } + point { + x: 586367.59476754989 + y: 4140778.2936021904 + } + point { + x: 586367.64681949664 + y: 4140778.4845685721 + } + point { + x: 586367.69887144328 + y: 4140778.6755349543 + } + point { + x: 586367.75092339 + y: 4140778.8665013365 + } + point { + x: 586367.80297533679 + y: 4140779.0574677186 + } + point { + x: 586367.85502728343 + y: 4140779.2484341008 + } + point { + x: 586367.90707923018 + y: 4140779.4394004829 + } + point { + x: 586367.95913117693 + y: 4140779.6303668651 + } + point { + x: 586368.01118312357 + y: 4140779.8213332472 + } + point { + x: 586368.06323507032 + y: 4140780.0122996294 + } + point { + x: 586368.115287017 + y: 4140780.2032660116 + } + point { + x: 586368.16733896371 + y: 4140780.3942323937 + } + point { + x: 586368.21939091047 + y: 4140780.5851987759 + } + point { + x: 586368.27144285711 + y: 4140780.776165158 + } + point { + x: 586368.32349480386 + y: 4140780.96713154 + } + point { + x: 586368.3755467505 + y: 4140781.1580979223 + } + point { + x: 586368.42759869725 + y: 4140781.3490643045 + } + point { + x: 586368.479650644 + y: 4140781.5400306867 + } + point { + x: 586368.53170259064 + y: 4140781.7309970683 + } + point { + x: 586368.58375453739 + y: 4140781.9219634505 + } + point { + x: 586368.635806484 + y: 4140782.1129298327 + } + point { + x: 586368.68785843079 + y: 4140782.3038962148 + } + point { + x: 586368.73991037754 + y: 4140782.494862597 + } + point { + x: 586368.79196232418 + y: 4140782.6858289791 + } + point { + x: 586368.84401427093 + y: 4140782.8767953613 + } + point { + x: 586368.89606621757 + y: 4140783.0677617434 + } + point { + x: 586368.94811816432 + y: 4140783.2587281256 + } + point { + x: 586369.00017011107 + y: 4140783.4496945078 + } + point { + x: 586369.05222205771 + y: 4140783.64066089 + } + point { + x: 586369.10427400446 + y: 4140783.8316272721 + } + point { + x: 586369.1563259511 + y: 4140784.0225936542 + } + point { + x: 586369.20837789786 + y: 4140784.2135600364 + } + point { + x: 586369.26042984461 + y: 4140784.4045264185 + } + point { + x: 586369.31248179125 + y: 4140784.5954928007 + } + point { + x: 586369.364533738 + y: 4140784.7864591829 + } + point { + x: 586369.41658568464 + y: 4140784.977425565 + } + point { + x: 586369.46863763139 + y: 4140785.1683919467 + } + point { + x: 586369.520689578 + y: 4140785.3593583289 + } + point { + x: 586369.57274152478 + y: 4140785.550324711 + } + point { + x: 586369.62479347154 + y: 4140785.7412910932 + } + } + heading: -0.24993649105040971 + length: 151.14875772478879 + } + } + boundary_type { + s: 0 + types: CURB + } + length: 151.14875772478879 + } + length: 153.87421245705966 + speed_limit: 4.5 + overlap_id { + id: "1_-1_and_2" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 0 + width: 1.7499999999999969 + } + left_sample { + s: 0.20001136855364768 + width: 1.7499999999999132 + } + left_sample { + s: 0.40002273710671876 + width: 1.7499999999999685 + } + left_sample { + s: 0.60003410566029847 + width: 1.7500000000000242 + } + left_sample { + s: 0.80004547421347971 + width: 1.750000000000135 + } + left_sample { + s: 1.0000568427671555 + width: 1.7500000000000511 + } + left_sample { + s: 1.2000682113204328 + width: 1.7500000000000786 + } + left_sample { + s: 1.4000795798740127 + width: 1.7500000000000226 + } + left_sample { + s: 1.6000909484271939 + width: 1.7499999999999953 + } + left_sample { + s: 1.8001023169806494 + width: 1.7500000000000226 + } + left_sample { + s: 2.0001136855341328 + width: 1.7500000000000502 + } + left_sample { + s: 2.2001250540875064 + width: 1.7499999999999944 + } + left_sample { + s: 2.4001364226407835 + width: 1.7500000000000768 + } + left_sample { + s: 2.600147791194253 + width: 1.7499999999999107 + } + left_sample { + s: 2.8001591597478326 + width: 1.7499999999999936 + } + left_sample { + s: 3.0001705283009996 + width: 1.749999999999966 + } + left_sample { + s: 3.2001818968545792 + width: 1.7499999999999936 + } + left_sample { + s: 3.4001932654079527 + width: 1.7499999999999096 + } + left_sample { + s: 3.6002046339613263 + width: 1.7499999999999651 + } + left_sample { + s: 3.8002160025149059 + width: 1.7499999999998817 + } + left_sample { + s: 4.0002273710682656 + width: 1.7499999999999367 + } + left_sample { + s: 4.2002387396216534 + width: 1.7499999999999645 + } + left_sample { + s: 4.400250108175233 + width: 1.7499999999999636 + } + left_sample { + s: 4.6002614767284822 + width: 1.7499999999999361 + } + left_sample { + s: 4.8002728452820618 + width: 1.7500000000000187 + } + left_sample { + s: 5.0002842138355312 + width: 1.7499999999999911 + } + left_sample { + s: 5.2002955823890007 + width: 1.7499999999999636 + } + left_sample { + s: 5.40030695094225 + width: 1.7499999999999911 + } + left_sample { + s: 5.6003183194958295 + width: 1.7500000000000184 + } + left_sample { + s: 5.8003296880491888 + width: 1.7500000000000178 + } + left_sample { + s: 6.0003410566026583 + width: 1.7500000000001281 + } + left_sample { + s: 6.2003524251559359 + width: 1.7500000000000728 + } + left_sample { + s: 6.4003637937095013 + width: 1.7500000000000453 + } + left_sample { + s: 6.6003751622628748 + width: 1.7500000000001557 + } + left_sample { + s: 6.8003865308163585 + width: 1.7500000000001 + } + left_sample { + s: 7.0003978993698137 + width: 1.7499999999999343 + } + left_sample { + s: 7.2004092679233933 + width: 1.7499999999999605 + } + left_sample { + s: 7.4004206364766709 + width: 1.7500000000000988 + } + left_sample { + s: 7.6004320050301546 + width: 1.7500000000000435 + } + left_sample { + s: 7.8004433735835281 + width: 1.7500000000000706 + } + left_sample { + s: 8.0004547421369 + width: 1.7499999999999605 + } + left_sample { + s: 8.200466110690467 + width: 1.7499999999999045 + } + left_sample { + s: 8.40047747924395 + width: 1.7500000000000149 + } + left_sample { + s: 8.6004888477974326 + width: 1.7499999999999027 + } + left_sample { + s: 8.8005002163506 + width: 1.7499999999999036 + } + left_sample { + s: 9.00051158490418 + width: 1.750000000000014 + } + left_sample { + s: 9.20052295345754 + width: 1.7499999999999305 + } + left_sample { + s: 9.4005343220111328 + width: 1.74999999999993 + } + left_sample { + s: 9.600545690564493 + width: 1.7499999999999853 + } + left_sample { + s: 9.8005570591178657 + width: 1.7500000000000129 + } + left_sample { + s: 10.000568427671226 + width: 1.7500000000000404 + } + left_sample { + s: 10.200579796224586 + width: 1.7500000000000677 + } + left_sample { + s: 10.400591164778028 + width: 1.7499999999999571 + } + left_sample { + s: 10.6006025333314 + width: 1.7500000000001505 + } + left_sample { + s: 10.800613901884663 + width: 1.7500000000001235 + } + left_sample { + s: 11.000625270438244 + width: 1.7500000000001228 + } + left_sample { + s: 11.200636638991575 + width: 1.7500000000001228 + } + left_sample { + s: 11.400648007544977 + width: 1.7500000000002056 + } + left_sample { + s: 11.600659376098349 + width: 1.7500000000002334 + } + left_sample { + s: 11.800670744651915 + width: 1.7500000000001776 + } + left_sample { + s: 12.000682113205496 + width: 1.7500000000001763 + } + left_sample { + s: 12.200693481758869 + width: 1.7500000000001201 + } + left_sample { + s: 12.400704850312145 + width: 1.7500000000000386 + } + left_sample { + s: 12.600716218865628 + width: 1.7500000000001206 + } + left_sample { + s: 12.800727587419111 + width: 1.7500000000000644 + } + left_sample { + s: 13.000738955972622 + width: 1.7500000000000087 + } + left_sample { + s: 13.200750324525995 + width: 1.7499999999998703 + } + left_sample { + s: 13.400761693079367 + width: 1.7499999999998981 + } + left_sample { + s: 13.60077306163285 + width: 1.7500000000000628 + } + left_sample { + s: 13.800784430186333 + width: 1.7499999999999527 + } + left_sample { + s: 14.000795798739789 + width: 1.7499999999998967 + } + left_sample { + s: 14.200807167293176 + width: 1.7499999999999252 + } + left_sample { + s: 14.400818535846646 + width: 1.7499999999999798 + } + left_sample { + s: 14.600829904400006 + width: 1.7499999999998963 + } + left_sample { + s: 14.800841272953477 + width: 1.7499999999998408 + } + left_sample { + s: 15.000852641506849 + width: 1.749999999999923 + } + left_sample { + s: 15.200864010060222 + width: 1.7499999999999509 + } + left_sample { + s: 15.400875378613774 + width: 1.7499999999999225 + } + left_sample { + s: 15.600886747167024 + width: 1.7499999999998674 + } + left_sample { + s: 15.800898115720521 + width: 1.7499999999999782 + } + left_sample { + s: 16.000909484274086 + width: 1.7499999999999503 + } + left_sample { + s: 16.200920852827444 + width: 1.74999999999995 + } + left_sample { + s: 16.400932221380913 + width: 1.7500000000000049 + } + left_sample { + s: 16.600943589934285 + width: 1.7499999999999771 + } + left_sample { + s: 16.800954958487658 + width: 1.7499999999999214 + } + left_sample { + s: 17.000966327040921 + width: 1.7499999999998661 + } + left_sample { + s: 17.200977695594418 + width: 1.7499999999999223 + } + left_sample { + s: 17.400989064147982 + width: 1.749999999999865 + } + left_sample { + s: 17.601000432701245 + width: 1.7499999999997828 + } + left_sample { + s: 17.801011801254742 + width: 1.749999999999782 + } + left_sample { + s: 18.001023169808114 + width: 1.7499999999996994 + } + left_sample { + s: 18.2010345383615 + width: 1.7499999999996998 + } + left_sample { + s: 18.401045906915066 + width: 1.7499999999997538 + } + left_sample { + s: 18.601057275468342 + width: 1.7499999999996712 + } + left_sample { + s: 18.801068644021715 + width: 1.7499999999997267 + } + left_sample { + s: 19.001080012574977 + width: 1.7499999999998364 + } + left_sample { + s: 19.201091381128585 + width: 1.7499999999997535 + } + left_sample { + s: 19.401102749681943 + width: 1.7499999999997815 + } + left_sample { + s: 19.601114118235522 + width: 1.7499999999998084 + } + left_sample { + s: 19.801125486788784 + width: 1.7499999999999192 + } + left_sample { + s: 20.001136855342267 + width: 1.7499999999999738 + } + left_sample { + s: 20.201148223895832 + width: 1.7499999999999181 + } + left_sample { + s: 20.401159592449094 + width: 1.7500000000000553 + } + left_sample { + s: 20.601170961002481 + width: 1.7499999999999452 + } + left_sample { + s: 20.801182329555949 + width: 1.75 + } + left_sample { + s: 21.001193698109432 + width: 1.7500000000000278 + } + left_sample { + s: 21.201205066662887 + width: 1.7499999999999718 + } + left_sample { + s: 21.401216435216163 + width: 1.7500000000000826 + } + left_sample { + s: 21.601227803769618 + width: 1.7499999999999711 + } + left_sample { + s: 21.801239172323005 + width: 1.7499999999999989 + } + left_sample { + s: 22.001250540876377 + width: 1.7499999999999711 + } + left_sample { + s: 22.20126190942975 + width: 1.7499999999999445 + } + left_sample { + s: 22.401273277983314 + width: 1.7499999999998876 + } + left_sample { + s: 22.6012846465367 + width: 1.7499999999999156 + } + left_sample { + s: 22.80129601509006 + width: 1.7499999999998874 + } + left_sample { + s: 23.001307383643447 + width: 1.7499999999998879 + } + left_sample { + s: 23.201318752197025 + width: 1.74999999999986 + } + left_sample { + s: 23.401330120750192 + width: 1.750000000000026 + } + left_sample { + s: 23.601341489303852 + width: 1.7499999999998586 + } + left_sample { + s: 23.801352857857033 + width: 1.7499999999999141 + } + left_sample { + s: 24.001364226410516 + width: 1.7499999999999145 + } + left_sample { + s: 24.201375594964095 + width: 1.7500000000000229 + } + left_sample { + s: 24.401386963517467 + width: 1.7499999999998854 + } + left_sample { + s: 24.60139833207084 + width: 1.7499999999999685 + } + left_sample { + s: 24.801409700624308 + width: 1.7499999999999947 + } + left_sample { + s: 25.001421069177777 + width: 1.7499999999998557 + } + left_sample { + s: 25.201432437731054 + width: 1.7499999999999134 + } + left_sample { + s: 25.401443806284728 + width: 1.7499999999999938 + } + left_sample { + s: 25.601455174837991 + width: 1.7499999999999949 + } + left_sample { + s: 25.80146654339168 + width: 1.7500000000000755 + } + left_sample { + s: 26.001477911944832 + width: 1.7500000000000764 + } + left_sample { + s: 26.201489280498425 + width: 1.7499999999999936 + } + left_sample { + s: 26.401500649051755 + width: 1.7499999999999389 + } + left_sample { + s: 26.601512017605348 + width: 1.7499999999999933 + } + left_sample { + s: 26.801523386158802 + width: 1.7499999999999938 + } + left_sample { + s: 27.001534754712271 + width: 1.75000000000002 + } + left_sample { + s: 27.201546123265643 + width: 1.7499999999999662 + } + left_sample { + s: 27.401557491818988 + width: 1.7500000000000768 + } + left_sample { + s: 27.601568860372566 + width: 1.7500000000000187 + } + left_sample { + s: 27.801580228925953 + width: 1.7499999999999647 + } + left_sample { + s: 28.001591597479312 + width: 1.7500000000000207 + } + left_sample { + s: 28.201602966032862 + width: 1.7499999999999909 + } + left_sample { + s: 28.401614334586153 + width: 1.7500000000000493 + } + left_sample { + s: 28.601625703139607 + width: 1.7500000000001577 + } + left_sample { + s: 28.80163707169298 + width: 1.7500000000001019 + } + left_sample { + s: 29.001648440246353 + width: 1.7500000000000477 + } + left_sample { + s: 29.201659808799725 + width: 1.7500000000001854 + } + left_sample { + s: 29.401671177353098 + width: 1.7500000000001852 + } + left_sample { + s: 29.601682545906566 + width: 1.750000000000157 + } + left_sample { + s: 29.801693914460063 + width: 1.7500000000001561 + } + left_sample { + s: 30.00170528301323 + width: 1.7500000000002132 + } + left_sample { + s: 30.201716651566795 + width: 1.750000000000157 + } + left_sample { + s: 30.401728020120387 + width: 1.7500000000001568 + } + left_sample { + s: 30.601739388673746 + width: 1.7500000000002109 + } + left_sample { + s: 30.801750757227243 + width: 1.7500000000002109 + } + left_sample { + s: 31.001762125780711 + width: 1.7500000000001537 + } + left_sample { + s: 31.201773494333988 + width: 1.7500000000001283 + } + left_sample { + s: 31.401784862887457 + width: 1.7500000000001534 + } + left_sample { + s: 31.601796231440844 + width: 1.7500000000000713 + } + left_sample { + s: 31.801807599994312 + width: 1.7500000000000158 + } + left_sample { + s: 32.001818968547795 + width: 1.7500000000000424 + } + left_sample { + s: 32.201830337101171 + width: 1.7500000000000424 + } + left_sample { + s: 32.401841705654547 + width: 1.7500000000000697 + } + left_sample { + s: 32.601853074207924 + width: 1.7500000000000975 + } + left_sample { + s: 32.801864442761286 + width: 1.7500000000000979 + } + left_sample { + s: 33.001875811314854 + width: 1.7499999999999851 + } + left_sample { + s: 33.20188717986813 + width: 1.7500000000000422 + } + left_sample { + s: 33.401898548421478 + width: 1.7500000000000671 + } + left_sample { + s: 33.601909916974854 + width: 1.7499999999999303 + } + left_sample { + s: 33.801921285528216 + width: 1.7499999999999576 + } + left_sample { + s: 34.001932654081592 + width: 1.75000000000004 + } + left_sample { + s: 34.201944022635061 + width: 1.7500000000000111 + } + left_sample { + s: 34.401955391188338 + width: 1.7500000000000124 + } + left_sample { + s: 34.601966759741806 + width: 1.7500000000000373 + } + left_sample { + s: 34.801978128295183 + width: 1.7499999999999023 + } + left_sample { + s: 35.001989496848751 + width: 1.75000000000001 + } + left_sample { + s: 35.202000865402141 + width: 1.75000000000001 + } + left_sample { + s: 35.402012233955531 + width: 1.7500000000000655 + } + left_sample { + s: 35.602023602509014 + width: 1.7500000000000386 + } + left_sample { + s: 35.802034971062469 + width: 1.749999999999984 + } + left_sample { + s: 36.002046339616051 + width: 1.7500000000000921 + } + left_sample { + s: 36.20205770816947 + width: 1.7500000000002012 + } + left_sample { + s: 36.402069076722832 + width: 1.7500000000000653 + } + left_sample { + s: 36.602080445276442 + width: 1.7500000000001465 + } + left_sample { + s: 36.802091813829819 + width: 1.7500000000001181 + } + left_sample { + s: 37.002103182383209 + width: 1.7500000000000651 + } + left_sample { + s: 37.202114550936557 + width: 1.7500000000000651 + } + left_sample { + s: 37.402125919490054 + width: 1.7500000000001745 + } + left_sample { + s: 37.602137288043636 + width: 1.7500000000000346 + } + left_sample { + s: 37.802148656596913 + width: 1.7500000000000082 + } + left_sample { + s: 38.002160025150289 + width: 1.7500000000000089 + } + left_sample { + s: 38.202171393703743 + width: 1.7499999999999805 + } + left_sample { + s: 38.40218276225702 + width: 1.7500000000000902 + } + left_sample { + s: 38.602194130810382 + width: 1.7499999999999802 + } + left_sample { + s: 38.802205499363758 + width: 1.7500000000000089 + } + left_sample { + s: 39.002216867917355 + width: 1.7500000000000902 + } + left_sample { + s: 39.202228236470809 + width: 1.7499999999999776 + } + left_sample { + s: 39.402239605024086 + width: 1.7499999999999227 + } + left_sample { + s: 39.602250973577462 + width: 1.7499999999998679 + } + left_sample { + s: 39.802262342130838 + width: 1.7499999999998959 + } + left_sample { + s: 40.0022737106842 + width: 1.7499999999999225 + } + left_sample { + s: 40.202285079237562 + width: 1.7499999999998683 + } + left_sample { + s: 40.402296447791144 + width: 1.7499999999999236 + } + left_sample { + s: 40.602307816344712 + width: 1.7499999999998672 + } + left_sample { + s: 40.802319184897989 + width: 1.7500000000000036 + } + left_sample { + s: 41.002330553451237 + width: 1.7499999999999236 + } + left_sample { + s: 41.20234192200482 + width: 1.7500000000000049 + } + left_sample { + s: 41.402353290558288 + width: 1.7500000000000062 + } + left_sample { + s: 41.602364659111842 + width: 1.7500000000000313 + } + left_sample { + s: 41.802376027665311 + width: 1.7499999999999747 + } + left_sample { + s: 42.0023873962187 + width: 1.7500000000000047 + } + left_sample { + s: 42.202398764772283 + width: 1.7500000000000866 + } + left_sample { + s: 42.402410133325645 + width: 1.7500000000001397 + } + left_sample { + s: 42.602421501879022 + width: 1.7500000000000597 + } + left_sample { + s: 42.80243287043259 + width: 1.75000000000014 + } + left_sample { + s: 43.002444238986172 + width: 1.7500000000000846 + } + left_sample { + s: 43.202455607539534 + width: 1.7500000000001128 + } + left_sample { + s: 43.402466976093 + width: 1.7500000000001668 + } + left_sample { + s: 43.602478344646265 + width: 1.750000000000195 + } + left_sample { + s: 43.802489713199861 + width: 1.7500000000001956 + } + left_sample { + s: 44.002501081753444 + width: 1.7500000000002474 + } + left_sample { + s: 44.2025124503066 + width: 1.7500000000002478 + } + left_sample { + s: 44.402523818860082 + width: 1.7500000000001661 + } + left_sample { + s: 44.602535187413444 + width: 1.7500000000002209 + } + left_sample { + s: 44.802546555966913 + width: 1.7500000000001923 + } + left_sample { + s: 45.002557924520382 + width: 1.7500000000001075 + } + left_sample { + s: 45.202569293073658 + width: 1.7500000000001092 + } + left_sample { + s: 45.402580661627141 + width: 1.7500000000000806 + } + left_sample { + s: 45.602592030180517 + width: 1.7500000000000817 + } + left_sample { + s: 45.802603398734014 + width: 1.7500000000001621 + } + left_sample { + s: 46.002614767287376 + width: 1.7499999999999971 + } + left_sample { + s: 46.202626135840767 + width: 1.7500000000000242 + } + left_sample { + s: 46.405275008788429 + width: 1.7045462093850519 + } + left_sample { + s: 46.580037921587085 + width: 1.7077929087142993 + } + left_sample { + s: 46.754800834385684 + width: 1.71103960804394 + } + left_sample { + s: 46.929563747184112 + width: 1.7142863073738455 + } + left_sample { + s: 47.104326659982767 + width: 1.7175330067035213 + } + left_sample { + s: 47.279089572781288 + width: 1.7207797060329915 + } + left_sample { + s: 47.453852485579887 + width: 1.7240264053630119 + } + left_sample { + s: 47.6286153983785 + width: 1.7272731046925802 + } + left_sample { + s: 47.803378311176765 + width: 1.7305198040219829 + } + left_sample { + s: 47.978141223975484 + width: 1.7337665033514491 + } + left_sample { + s: 48.152904136773955 + width: 1.7370132026812946 + } + left_sample { + s: 48.327667049572725 + width: 1.7402599020111846 + } + left_sample { + s: 48.502429962371316 + width: 1.7435066013405374 + } + left_sample { + s: 48.677192875169595 + width: 1.7467533006703742 + } + left_sample { + s: 48.89446870767695 + width: 1.7038067791879112 + } + left_sample { + s: 49.064691439921788 + width: 1.7073601038650055 + } + left_sample { + s: 49.234914172166171 + width: 1.7109134285430225 + } + left_sample { + s: 49.405136904410725 + width: 1.7144667532212192 + } + left_sample { + s: 49.575359636655541 + width: 1.7180200778991059 + } + left_sample { + s: 49.745582368900152 + width: 1.7215734025770484 + } + left_sample { + s: 49.915805101144933 + width: 1.7251267272549038 + } + left_sample { + s: 50.086027833389466 + width: 1.728680051932189 + } + left_sample { + s: 50.256250565634048 + width: 1.7322333766105573 + } + left_sample { + s: 50.426473297878772 + width: 1.7357867012883936 + } + left_sample { + s: 50.596696030123347 + width: 1.7393400259662384 + } + left_sample { + s: 50.766918762367951 + width: 1.7428933506445472 + } + left_sample { + s: 50.937141494612746 + width: 1.7122866516116459 + } + left_sample { + s: 51.1192028141192 + width: 1.6571467121271966 + } + left_sample { + s: 51.281061563556669 + width: 1.6633369313183521 + } + left_sample { + s: 51.442920312994346 + width: 1.6695271505097786 + } + left_sample { + s: 51.604779062431859 + width: 1.6757173697018979 + } + left_sample { + s: 51.766637811869323 + width: 1.68190758889346 + } + left_sample { + s: 51.928496561306851 + width: 1.6880978080848918 + } + left_sample { + s: 52.090355310744414 + width: 1.6942880272767669 + } + left_sample { + s: 52.252214060181828 + width: 1.7004782464682655 + } + left_sample { + s: 52.414072809619505 + width: 1.706668465659487 + } + left_sample { + s: 52.575931559056876 + width: 1.7128586848510754 + } + left_sample { + s: 52.7377903084946 + width: 1.7190489040423946 + } + left_sample { + s: 52.899649057932123 + width: 1.7252391232340183 + } + left_sample { + s: 53.061507807369807 + width: 1.7314293424251044 + } + left_sample { + s: 53.223366556807264 + width: 1.7376195616168679 + } + left_sample { + s: 53.385225306244692 + width: 1.7361305931596187 + } + left_sample { + s: 53.535661210641251 + width: 1.7103765340275698 + } + left_sample { + s: 53.689999802215809 + width: 1.7160370291669369 + } + left_sample { + s: 53.844338393790366 + width: 1.7216975243058208 + } + left_sample { + s: 53.998676985364973 + width: 1.7273580194437872 + } + left_sample { + s: 54.153015576939609 + width: 1.7330185145831594 + } + left_sample { + s: 54.307354168514195 + width: 1.7386790097226739 + } + left_sample { + s: 54.461692760088695 + width: 1.7323197473081078 + } + left_sample { + s: 54.665935780616486 + width: 1.6809873739043004 + } + left_sample { + s: 54.824380910618657 + width: 1.6867384260787182 + } + left_sample { + s: 54.982826040620893 + width: 1.6924894782531832 + } + left_sample { + s: 55.141271170623064 + width: 1.6982405304276418 + } + left_sample { + s: 55.299716300625292 + width: 1.7039915826023764 + } + left_sample { + s: 55.458161430627634 + width: 1.7097426347775693 + } + left_sample { + s: 55.616606560629869 + width: 1.7154936869519686 + } + left_sample { + s: 55.775051690631933 + width: 1.7212447391265151 + } + left_sample { + s: 55.933496820634218 + width: 1.7269957913012017 + } + left_sample { + s: 56.0919419506365 + width: 1.7327468434756381 + } + left_sample { + s: 56.250387080638674 + width: 1.7384978956504389 + } + left_sample { + s: 56.408832210640846 + width: 1.7382631653591363 + } + left_sample { + s: 56.553977533807334 + width: 1.7143851358298732 + } + left_sample { + s: 56.753223118960371 + width: 1.7173709564130593 + } + left_sample { + s: 56.952424168022134 + width: 1.7201681962611712 + } + left_sample { + s: 57.151584753684595 + width: 1.7227831603418249 + } + left_sample { + s: 57.35070873530254 + width: 1.7252221440565063 + } + left_sample { + s: 57.549799763669434 + width: 1.7274914275517201 + } + left_sample { + s: 57.748861285838053 + width: 1.729597270377621 + } + left_sample { + s: 57.947896549981593 + width: 1.7315244703797095 + } + left_sample { + s: 58.146908610289984 + width: 1.7332995224521572 + } + left_sample { + s: 58.345900331902719 + width: 1.734931763457775 + } + left_sample { + s: 58.544874395870735 + width: 1.7364272742299249 + } + left_sample { + s: 58.743833304148026 + width: 1.7377920906752209 + } + left_sample { + s: 58.942779384607512 + width: 1.7390322005253542 + } + left_sample { + s: 59.141714796080507 + width: 1.7401535403660473 + } + left_sample { + s: 59.3406415334168 + width: 1.7411619929298514 + } + left_sample { + s: 59.539561432564724 + width: 1.742063384640701 + } + left_sample { + s: 59.738476175663934 + width: 1.7428634833965828 + } + left_sample { + s: 59.937387296157368 + width: 1.7435679965854831 + } + left_sample { + s: 60.136296183911625 + width: 1.7441825693160693 + } + left_sample { + s: 60.335204090351745 + width: 1.7447127828567228 + } + left_sample { + s: 60.5341121336035 + width: 1.7451641532670887 + } + left_sample { + s: 60.733021303644449 + width: 1.7455421302135119 + } + left_sample { + s: 60.931932467461309 + width: 1.7458520959561428 + } + left_sample { + s: 61.13084637421376 + width: 1.7460993644962861 + } + left_sample { + s: 61.329763660402456 + width: 1.7462891808719885 + } + left_sample { + s: 61.528684855040041 + width: 1.7464267205928548 + } + left_sample { + s: 61.72761038482539 + width: 1.7465170892009478 + } + left_sample { + s: 61.926540579319919 + width: 1.7465653219490451 + } + left_sample { + s: 62.125475676125411 + width: 1.7465763835855834 + } + left_sample { + s: 62.324415826061234 + width: 1.7465551682357172 + } + left_sample { + s: 62.523361098343877 + width: 1.7465064993694308 + } + left_sample { + s: 62.722311485764074 + width: 1.74643512984659 + } + left_sample { + s: 62.921266909865345 + width: 1.7463457420302484 + } + left_sample { + s: 63.120227226120427 + width: 1.7462429479584445 + } + left_sample { + s: 63.319192229106612 + width: 1.746131289568396 + } + left_sample { + s: 63.518161657681482 + width: 1.7460152389611925 + } + left_sample { + s: 63.71713520015583 + width: 1.7458991987018682 + } + left_sample { + s: 63.9161124994651 + width: 1.7457875021455453 + } + left_sample { + s: 64.115093158341665 + width: 1.7456844137838088 + } + left_sample { + s: 64.314076744482747 + width: 1.7455941296011459 + } + left_sample { + s: 64.5130627957203 + width: 1.7455207774397241 + } + left_sample { + s: 64.712050825187291 + width: 1.7454684173604043 + } + left_sample { + s: 64.911040326484837 + width: 1.745441041997609 + } + left_sample { + s: 65.110030778847687 + width: 1.7454425768996913 + } + left_sample { + s: 65.309021652309283 + width: 1.74547688085287 + } + left_sample { + s: 65.508012412866748 + width: 1.7455477461763969 + } + left_sample { + s: 65.707002527645415 + width: 1.7456588981052958 + } + left_sample { + s: 65.905991470063285 + width: 1.7458114853915638 + } + left_sample { + s: 66.10497872499684 + width: 1.7459957083067854 + } + left_sample { + s: 66.303963794006421 + width: 1.7461902993687859 + } + left_sample { + s: 66.502946335281322 + width: 1.7463769455907896 + } + left_sample { + s: 66.701926441717717 + width: 1.7465527319916831 + } + left_sample { + s: 66.900904284031469 + width: 1.7467177176982212 + } + left_sample { + s: 67.0998800267398 + width: 1.7468719585087285 + } + left_sample { + s: 67.2988538285142 + width: 1.747015506902817 + } + left_sample { + s: 67.4978258425342 + width: 1.7471484120535878 + } + left_sample { + s: 67.696796216840738 + width: 1.7472707198391462 + } + left_sample { + s: 67.89576509468904 + width: 1.7473824728541483 + } + left_sample { + s: 68.094732614902483 + width: 1.7474837104223073 + } + left_sample { + s: 68.293698912226361 + width: 1.7475744686106274 + } + left_sample { + s: 68.4926641176806 + width: 1.7476547802403375 + } + left_sample { + s: 68.691628358914556 + width: 1.7477246749032451 + } + left_sample { + s: 68.890591760559445 + width: 1.7477841789738191 + } + left_sample { + s: 69.089554444582532 + width: 1.7478333156244035 + } + left_sample { + s: 69.2885165306413 + width: 1.7478721048400281 + } + left_sample { + s: 69.4874781364359 + width: 1.7479005634335731 + } + left_sample { + s: 69.686439378064151 + width: 1.7479187050614606 + } + left_sample { + s: 69.88540037037447 + width: 1.7479265402395052 + } + left_sample { + s: 70.084361227320045 + width: 1.7479240763592545 + } + left_sample { + s: 70.2833220623119 + width: 1.7479113177045529 + } + left_sample { + s: 70.482282988573587 + width: 1.7478882654686589 + } + left_sample { + s: 70.68124411949421 + width: 1.7478549829529648 + } + left_sample { + s: 70.8802055689828 + width: 1.7478126091885651 + } + left_sample { + s: 71.079167451821164 + width: 1.7477653308037542 + } + left_sample { + s: 71.278129878222842 + width: 1.7477188752078991 + } + left_sample { + s: 71.477092879511758 + width: 1.7476756444607671 + } + left_sample { + s: 71.6760564285364 + width: 1.7476356542518534 + } + left_sample { + s: 71.875020496419182 + width: 1.7475988691541122 + } + left_sample { + s: 72.073985053911883 + width: 1.7475652535402786 + } + left_sample { + s: 72.2729500714176 + width: 1.7475347715820153 + } + left_sample { + s: 72.471915519013081 + width: 1.7475073872527134 + } + left_sample { + s: 72.670881366470681 + width: 1.7474830643269788 + } + left_sample { + s: 72.869847583281654 + width: 1.7474617663838667 + } + left_sample { + s: 73.068814138677482 + width: 1.7474434568067614 + } + left_sample { + s: 73.267781001652438 + width: 1.7474280987841282 + } + left_sample { + s: 73.466748140985885 + width: 1.7474156553116431 + } + left_sample { + s: 73.665715525265341 + width: 1.7474060891928991 + } + left_sample { + s: 73.864683122906911 + width: 1.7473993630402702 + } + left_sample { + s: 74.063650902180029 + width: 1.7473954392770203 + } + left_sample { + s: 74.262618831227513 + width: 1.747394280136688 + } + left_sample { + s: 74.461586878089335 + width: 1.747395847665917 + } + left_sample { + s: 74.6605550107244 + width: 1.7474001037239459 + } + left_sample { + s: 74.859523197032644 + width: 1.7474070099854704 + } + left_sample { + s: 75.058491404877827 + width: 1.7474165279407463 + } + left_sample { + s: 75.257459602109549 + width: 1.7474286188962334 + } + left_sample { + s: 75.456427756585271 + width: 1.7474432438353285 + } + left_sample { + s: 75.655395836193264 + width: 1.7474603027547451 + } + left_sample { + s: 75.854363808874254 + width: 1.7474792302864381 + } + left_sample { + s: 76.053331642673925 + width: 1.7474986227462475 + } + left_sample { + s: 76.252299316211335 + width: 1.7475173591036397 + } + left_sample { + s: 76.451266834243526 + width: 1.7475353031133447 + } + left_sample { + s: 76.650234205509847 + width: 1.7475524629689179 + } + left_sample { + s: 76.849201438722034 + width: 1.7475688468487056 + } + left_sample { + s: 77.048168542565577 + width: 1.7475844629158248 + } + left_sample { + s: 77.247135525702021 + width: 1.7475993193196104 + } + left_sample { + s: 77.4461023967699 + width: 1.7476134241949071 + } + left_sample { + s: 77.645069164386371 + width: 1.7476267856610523 + } + left_sample { + s: 77.844035837149235 + width: 1.7476394118238656 + } + left_sample { + s: 78.043002423638185 + width: 1.7476513107746445 + } + left_sample { + s: 78.241968932417038 + width: 1.7476624905904796 + } + left_sample { + s: 78.440935372034232 + width: 1.7476729593336506 + } + left_sample { + s: 78.6399017510257 + width: 1.7476827250538256 + } + left_sample { + s: 78.838868077915649 + width: 1.7476917957849989 + } + left_sample { + s: 79.037834361218046 + width: 1.7477001795478664 + } + left_sample { + s: 79.236800609439484 + width: 1.7477078843501501 + } + left_sample { + s: 79.435766831079235 + width: 1.7477149181844767 + } + left_sample { + s: 79.634733034631466 + width: 1.7477212890303506 + } + left_sample { + s: 79.833699228587619 + width: 1.7477270048535196 + } + left_sample { + s: 80.032665421436789 + width: 1.7477320736067792 + } + left_sample { + s: 80.231631621668072 + width: 1.7477365032282657 + } + left_sample { + s: 80.430597837771913 + width: 1.7477403023318498 + } + left_sample { + s: 80.629564078242211 + width: 1.7477435070189138 + } + left_sample { + s: 80.828530351576745 + width: 1.7477463870970471 + } + left_sample { + s: 81.027496665660578 + width: 1.7477493277325256 + } + left_sample { + s: 81.226463022025769 + width: 1.7477524676529916 + } + left_sample { + s: 81.425429418456758 + width: 1.7477558063437886 + } + left_sample { + s: 81.6243958526868 + width: 1.7477593417056068 + } + left_sample { + s: 81.823362322447338 + width: 1.7477630661360051 + } + left_sample { + s: 82.0223288254678 + width: 1.7477669837965195 + } + left_sample { + s: 82.221295359475789 + width: 1.7477710927095158 + } + left_sample { + s: 82.420261922197867 + width: 1.7477753907720013 + } + left_sample { + s: 82.619228511358585 + width: 1.7477798758796241 + } + left_sample { + s: 82.818195124681566 + width: 1.7477845459268639 + } + left_sample { + s: 83.017161759888936 + width: 1.7477893988078672 + } + left_sample { + s: 83.216128414701728 + width: 1.7477944324149366 + } + left_sample { + s: 83.415095086839983 + width: 1.7477996446396733 + } + left_sample { + s: 83.614061774023057 + width: 1.7478050333728201 + } + left_sample { + s: 83.813028473969368 + width: 1.7478105965039408 + } + left_sample { + s: 84.011995184396667 + width: 1.7478163319220905 + } + left_sample { + s: 84.210961903022223 + width: 1.7478222375142509 + } + left_sample { + s: 84.409928627562877 + width: 1.7478283111673676 + } + left_sample { + s: 84.608895355735285 + width: 1.7478345507671109 + } + left_sample { + s: 84.807862085255621 + width: 1.747840954197557 + } + left_sample { + s: 85.006828813840386 + width: 1.7478475193430487 + } + left_sample { + s: 85.205795539205909 + width: 1.747854244086211 + } + left_sample { + s: 85.404762259068733 + width: 1.7478611261176604 + } + left_sample { + s: 85.603728971145387 + width: 1.7478681334777768 + } + left_sample { + s: 85.802695673160528 + width: 1.7478751704969586 + } + left_sample { + s: 86.001662363733416 + width: 1.747882163651727 + } + left_sample { + s: 86.200629043264755 + width: 1.7478891060332484 + } + left_sample { + s: 86.399595712367031 + width: 1.7478959982130957 + } + left_sample { + s: 86.5985623716527 + width: 1.7479028407626052 + } + left_sample { + s: 86.797529021733922 + width: 1.7479096342531781 + } + left_sample { + s: 86.99649566322293 + width: 1.7479163792563197 + } + left_sample { + s: 87.195462296731719 + width: 1.7479230763428348 + } + left_sample { + s: 87.3944289228722 + width: 1.7479297260844491 + } + left_sample { + s: 87.593395542256275 + width: 1.7479363290519996 + } + left_sample { + s: 87.792362155495468 + width: 1.7479428858162727 + } + left_sample { + s: 87.9913287632016 + width: 1.7479493969486308 + } + left_sample { + s: 88.190295365986088 + width: 1.7479558630195169 + } + left_sample { + s: 88.3892619644607 + width: 1.7479622846003058 + } + left_sample { + s: 88.5882285592366 + width: 1.7479686622611292 + } + left_sample { + s: 88.787195150925157 + width: 1.747974996573231 + } + left_sample { + s: 88.98616174013803 + width: 1.7479812881066024 + } + left_sample { + s: 89.185128327486112 + width: 1.7479875374319096 + } + left_sample { + s: 89.384094913581052 + width: 1.7479937451201584 + } + left_sample { + s: 89.583061499034 + width: 1.7479999117408116 + } + left_sample { + s: 89.782028084456172 + width: 1.7480060378648021 + } + left_sample { + s: 89.980994670458813 + width: 1.7480121240622144 + } + left_sample { + s: 90.179961257653261 + width: 1.7480181709031077 + } + left_sample { + s: 90.378927846650839 + width: 1.7480241806508272 + } + left_sample { + s: 90.577894438062813 + width: 1.7480301700448997 + } + left_sample { + s: 90.776861032438561 + width: 1.7480361640547979 + } + left_sample { + s: 90.975827629844943 + width: 1.7480421708656073 + } + left_sample { + s: 91.174794230119431 + width: 1.7480481903663736 + } + left_sample { + s: 91.373760833098558 + width: 1.7480542224042153 + } + left_sample { + s: 91.572727438618315 + width: 1.7480602668261453 + } + left_sample { + s: 91.771694046515066 + width: 1.7480663234796143 + } + left_sample { + s: 91.9706606566251 + width: 1.7480723922119339 + } + left_sample { + s: 92.1696272687846 + width: 1.7480784728704664 + } + left_sample { + s: 92.368593882829614 + width: 1.7480845653018628 + } + left_sample { + s: 92.567560498596535 + width: 1.7480906693537244 + } + left_sample { + s: 92.766527115921264 + width: 1.7480967848732465 + } + left_sample { + s: 92.9654937346404 + width: 1.7481029117079003 + } + left_sample { + s: 93.164460354589878 + width: 1.7481090497044243 + } + left_sample { + s: 93.363426975605819 + width: 1.7481151987101564 + } + left_sample { + s: 93.5623935975247 + width: 1.7481213585725859 + } + left_sample { + s: 93.761360220182425 + width: 1.7481275291388769 + } + left_sample { + s: 93.9603268434154 + width: 1.7481337102560526 + } + left_sample { + s: 94.159293467059285 + width: 1.7481399017708135 + } + left_sample { + s: 94.358260090950893 + width: 1.7481461035311636 + } + left_sample { + s: 94.557226714926017 + width: 1.7481523153841358 + } + left_sample { + s: 94.75619333882095 + width: 1.7481585371765787 + } + left_sample { + s: 94.9551599624718 + width: 1.74816476875556 + } + left_sample { + s: 95.154126585714664 + width: 1.7481710099453738 + } + left_sample { + s: 95.353093208385957 + width: 1.7481772587796356 + } + left_sample { + s: 95.552059830322733 + width: 1.7481835094265925 + } + left_sample { + s: 95.751026451437809 + width: 1.7481897572071179 + } + left_sample { + s: 95.949993071764069 + width: 1.7481960017905669 + } + left_sample { + s: 96.148959691345269 + width: 1.7482022432178674 + } + left_sample { + s: 96.347926310225432 + width: 1.7482084815301606 + } + left_sample { + s: 96.546892928448543 + width: 1.7482147167684758 + } + left_sample { + s: 96.745859546058256 + width: 1.7482209489735809 + } + left_sample { + s: 96.944826163098639 + width: 1.7482271781864505 + } + left_sample { + s: 97.143792779613634 + width: 1.7482334044478969 + } + left_sample { + s: 97.342759395647022 + width: 1.7482396277989556 + } + left_sample { + s: 97.541726011242744 + width: 1.7482458482808605 + } + left_sample { + s: 97.7406926264447 + width: 1.7482520659343428 + } + left_sample { + s: 97.939659241296866 + width: 1.7482582808002856 + } + left_sample { + s: 98.138625855842989 + width: 1.7482644929196864 + } + left_sample { + s: 98.337592470127049 + width: 1.7482707023334143 + } + left_sample { + s: 98.536559084192959 + width: 1.7482769090826 + } + left_sample { + s: 98.735525698084686 + width: 1.7482831132082006 + } + left_sample { + s: 98.9344923118458 + width: 1.7482893147506253 + } + left_sample { + s: 99.1334589255206 + width: 1.7482955137515903 + } + left_sample { + s: 99.332425539152752 + width: 1.7483017102515139 + } + left_sample { + s: 99.531392152786154 + width: 1.748307904291591 + } + left_sample { + s: 99.730358766464775 + width: 1.7483140959126391 + } + left_sample { + s: 99.929325380232555 + width: 1.7483202851555482 + } + left_sample { + s: 100.12829199413333 + width: 1.7483264721698502 + } + left_sample { + s: 100.32725860821087 + width: 1.7483326579033911 + } + left_sample { + s: 100.52622522250338 + width: 1.7483388439662657 + } + left_sample { + s: 100.72519183701246 + width: 1.7483450308303137 + } + left_sample { + s: 100.9241584517268 + width: 1.7483512184858561 + } + left_sample { + s: 101.12312506663427 + width: 1.7483574069214376 + } + left_sample { + s: 101.32209168172321 + width: 1.7483635961262396 + } + left_sample { + s: 101.52105829698193 + width: 1.7483697860893568 + } + left_sample { + s: 101.72002491239864 + width: 1.748375976799756 + } + left_sample { + s: 101.91899152796124 + width: 1.748382168246092 + } + left_sample { + s: 102.1179581436587 + width: 1.748388360418129 + } + left_sample { + s: 102.31692475947861 + width: 1.7483945533043348 + } + left_sample { + s: 102.51589137540958 + width: 1.7484007468943512 + } + left_sample { + s: 102.71485799143966 + width: 1.7484069411763234 + } + left_sample { + s: 102.913824607557 + width: 1.7484131361397441 + } + left_sample { + s: 103.11279122375012 + width: 1.7484193317739249 + } + left_sample { + s: 103.31175784000713 + width: 1.7484255280676124 + } + left_sample { + s: 103.51072445631614 + width: 1.7484317250096364 + } + left_sample { + s: 103.70969107266545 + width: 1.7484379225891937 + } + left_sample { + s: 103.90865768904341 + width: 1.748444120795358 + } + left_sample { + s: 104.10762430543835 + width: 1.7484503196173027 + } + left_sample { + s: 104.30659092183825 + width: 1.7484565190437957 + } + left_sample { + s: 104.50555753823137 + width: 1.7484627190640725 + } + left_sample { + s: 104.704524154606 + width: 1.7484689196670167 + } + left_sample { + s: 104.9034907709505 + width: 1.748475120839367 + } + left_sample { + s: 105.102457387253 + width: 1.7484813224774098 + } + left_sample { + s: 105.30142400350199 + width: 1.7484875242291942 + } + left_sample { + s: 105.5003906196919 + width: 1.7484937257979998 + } + left_sample { + s: 105.69935723582545 + width: 1.7484999271694739 + } + left_sample { + s: 105.89832385190573 + width: 1.7485061283463204 + } + left_sample { + s: 106.09729046793591 + width: 1.7485123293319169 + } + left_sample { + s: 106.29625708391929 + width: 1.7485185301288002 + } + left_sample { + s: 106.49522369985878 + width: 1.7485247307400011 + } + left_sample { + s: 106.69419031575767 + width: 1.7485309311684816 + } + left_sample { + s: 106.89315693161915 + width: 1.7485371314175093 + } + left_sample { + s: 107.09212354744621 + width: 1.7485433314894441 + } + left_sample { + s: 107.29109016324213 + width: 1.7485495313875883 + } + left_sample { + s: 107.49005677901003 + width: 1.7485557311147018 + } + left_sample { + s: 107.68902339475305 + width: 1.7485619306739011 + } + left_sample { + s: 107.88799001047445 + width: 1.7485681300682436 + } + left_sample { + s: 108.0869566261773 + width: 1.7485743293003961 + } + left_sample { + s: 108.28592324186454 + width: 1.7485805283731009 + } + left_sample { + s: 108.4848898575396 + width: 1.7485867272896181 + } + left_sample { + s: 108.68385647320567 + width: 1.7485929260531716 + } + left_sample { + s: 108.88282308886565 + width: 1.7485991246661912 + } + left_sample { + s: 109.08178970452279 + width: 1.7486053231316177 + } + left_sample { + s: 109.28075632018046 + width: 1.7486115214527045 + } + left_sample { + s: 109.47972293584154 + width: 1.7486177196325037 + } + left_sample { + s: 109.67868955150917 + width: 1.7486239176732337 + } + left_sample { + s: 109.87765616718666 + width: 1.7486301155837869 + } + left_sample { + s: 110.07662278287708 + width: 1.748636313412 + } + left_sample { + s: 110.27558939858304 + width: 1.7486425112625437 + } + left_sample { + s: 110.47455601430464 + width: 1.7486487091620311 + } + left_sample { + s: 110.67352263004081 + width: 1.7486549071098916 + } + left_sample { + s: 110.8724892457908 + width: 1.7486611051050955 + } + left_sample { + s: 111.07145586155362 + width: 1.7486673031468567 + } + left_sample { + s: 111.27042247732872 + width: 1.7486735012344075 + } + left_sample { + s: 111.4693890931151 + width: 1.7486796993671463 + } + left_sample { + s: 111.66835570891185 + width: 1.7486858975441604 + } + left_sample { + s: 111.86732232471822 + width: 1.748692095764516 + } + left_sample { + s: 112.06628894053325 + width: 1.7486982940273628 + } + left_sample { + s: 112.26525555635617 + width: 1.7487044923323105 + } + left_sample { + s: 112.46422217218631 + width: 1.7487106906785856 + } + left_sample { + s: 112.66318878802244 + width: 1.7487168890647076 + } + left_sample { + s: 112.86215540386415 + width: 1.7487230874907929 + } + left_sample { + s: 113.06112201971017 + width: 1.7487292859553065 + } + left_sample { + s: 113.26008863556 + width: 1.7487354844579315 + } + left_sample { + s: 113.45905525141258 + width: 1.74874168299781 + } + left_sample { + s: 113.65802186726718 + width: 1.7487478815738093 + } + left_sample { + s: 113.85698848312288 + width: 1.7487540801855666 + } + left_sample { + s: 114.05595509897887 + width: 1.7487602788319607 + } + left_sample { + s: 114.25492171483438 + width: 1.7487664775125538 + } + left_sample { + s: 114.45388833068846 + width: 1.7487726762260547 + } + left_sample { + s: 114.65285494654036 + width: 1.7487788749724502 + } + left_sample { + s: 114.85182156238906 + width: 1.7487850737466721 + } + left_sample { + s: 115.05078817823399 + width: 1.748791272528686 + } + left_sample { + s: 115.24975479407476 + width: 1.7487974712994494 + } + left_sample { + s: 115.4487214099112 + width: 1.7488036700578933 + } + left_sample { + s: 115.64768802574412 + width: 1.7488098688052078 + } + left_sample { + s: 115.8466546415732 + width: 1.7488160675406164 + } + left_sample { + s: 116.04562125739919 + width: 1.748822266265 + } + left_sample { + s: 116.2445878732219 + width: 1.7488284649785348 + } + left_sample { + s: 116.44355448904177 + width: 1.7488346636811523 + } + left_sample { + s: 116.64252110485896 + width: 1.7488408623734435 + } + left_sample { + s: 116.84148772067356 + width: 1.7488470610545475 + } + left_sample { + s: 117.04045433648618 + width: 1.7488532597259081 + } + left_sample { + s: 117.23942095229661 + width: 1.7488594583874917 + } + left_sample { + s: 117.43838756810543 + width: 1.7488656570392527 + } + left_sample { + s: 117.63735418391263 + width: 1.7488718556812273 + } + left_sample { + s: 117.83632079971851 + width: 1.7488780543141762 + } + left_sample { + s: 118.03528741552323 + width: 1.7488842529376882 + } + left_sample { + s: 118.23425403132725 + width: 1.7488904515525219 + } + left_sample { + s: 118.43322064713053 + width: 1.7488966501587031 + } + left_sample { + s: 118.63218726293347 + width: 1.7489028487562306 + } + left_sample { + s: 118.83115387873617 + width: 1.7489090473456819 + } + left_sample { + s: 119.03012049453892 + width: 1.7489152459270085 + } + left_sample { + s: 119.22908711034189 + width: 1.7489214445002976 + } + left_sample { + s: 119.42805372614545 + width: 1.7489276430662717 + } + left_sample { + s: 119.62702034194962 + width: 1.7489338416242468 + } + left_sample { + s: 119.82598695775499 + width: 1.7489400401774573 + } + left_sample { + s: 120.02495357356129 + width: 1.7489462387318035 + } + left_sample { + s: 120.22392018936868 + width: 1.7489524372889385 + } + left_sample { + s: 120.42288680517723 + width: 1.7489586358490778 + } + left_sample { + s: 120.62185342098651 + width: 1.7489648344116313 + } + left_sample { + s: 120.82082003679695 + width: 1.7489710329773607 + } + left_sample { + s: 121.01978665260823 + width: 1.7489772315454248 + } + left_sample { + s: 121.21875326842026 + width: 1.7489834301160918 + } + left_sample { + s: 121.41771988423316 + width: 1.7489896286897044 + } + left_sample { + s: 121.61668650004654 + width: 1.7489958272656481 + } + left_sample { + s: 121.81565311586067 + width: 1.7490020258438579 + } + left_sample { + s: 122.01461973167535 + width: 1.749008224424863 + } + left_sample { + s: 122.21358634749059 + width: 1.7490144230080509 + } + left_sample { + s: 122.41255296330611 + width: 1.7490206215933628 + } + left_sample { + s: 122.61151957912209 + width: 1.7490268201811385 + } + left_sample { + s: 122.81048619493843 + width: 1.7490330187711336 + } + left_sample { + s: 123.00945281075498 + width: 1.7490392173631177 + } + left_sample { + s: 123.20841942657179 + width: 1.7490454159572992 + } + left_sample { + s: 123.40738604238858 + width: 1.7490516145533854 + } + left_sample { + s: 123.60635265820554 + width: 1.7490578131515333 + } + left_sample { + s: 123.80531927402251 + width: 1.7490640117513685 + } + left_sample { + s: 124.00428588983966 + width: 1.7490702103532874 + } + left_sample { + s: 124.20325250565648 + width: 1.7490764089567752 + } + left_sample { + s: 124.40221912147318 + width: 1.7490826075621377 + } + left_sample { + s: 124.60118573728963 + width: 1.7490888061696004 + } + left_sample { + s: 124.80015235310563 + width: 1.7490950047764684 + } + left_sample { + s: 124.99911896892162 + width: 1.7491012033832927 + } + left_sample { + s: 125.19808558473716 + width: 1.7491074019891832 + } + left_sample { + s: 125.39705220055264 + width: 1.749113600594743 + } + left_sample { + s: 125.59601881636749 + width: 1.749119799199004 + } + left_sample { + s: 125.79498543218237 + width: 1.7491259978029261 + } + left_sample { + s: 125.993952047997 + width: 1.7491321964062454 + } + left_sample { + s: 126.19291866381134 + width: 1.7491383950090813 + } + left_sample { + s: 126.39188527962558 + width: 1.7491445936112449 + } + left_sample { + s: 126.59085189543963 + width: 1.749150792212701 + } + left_sample { + s: 126.78981851125349 + width: 1.7491569908134856 + } + left_sample { + s: 126.98878512706722 + width: 1.7491631894141144 + } + left_sample { + s: 127.18775174288078 + width: 1.7491693880137851 + } + left_sample { + s: 127.38671835869428 + width: 1.7491755866132894 + } + left_sample { + s: 127.5856849745076 + width: 1.7491817852119158 + } + left_sample { + s: 127.78465159032095 + width: 1.7491879838102813 + } + left_sample { + s: 127.98361820613424 + width: 1.7491941824082349 + } + left_sample { + s: 128.18258482194739 + width: 1.7492003810053738 + } + left_sample { + s: 128.38155143776069 + width: 1.7492065796026379 + } + left_sample { + s: 128.58051805357371 + width: 1.7492127781988953 + } + left_sample { + s: 128.77948466938693 + width: 1.7492189767950195 + } + left_sample { + s: 128.97845128520012 + width: 1.7492251753907524 + } + left_sample { + s: 129.17741790101337 + width: 1.7492313739858572 + } + left_sample { + s: 129.37638451682665 + width: 1.7492375725807816 + } + left_sample { + s: 129.57535113264009 + width: 1.7492437711755902 + } + left_sample { + s: 129.77431774845348 + width: 1.7492499697702146 + } + left_sample { + s: 129.97328436426693 + width: 1.7492561683652978 + } + left_sample { + s: 130.17225098008049 + width: 1.749262366960425 + } + left_sample { + s: 130.37121759589419 + width: 1.7492685655557236 + } + left_sample { + s: 130.57018421170793 + width: 1.7492747641511248 + } + left_sample { + s: 130.76915082752168 + width: 1.749280962746562 + } + left_sample { + s: 130.96811744333559 + width: 1.7492871613424645 + } + left_sample { + s: 131.16708405914932 + width: 1.7492933599380711 + } + left_sample { + s: 131.36605067496342 + width: 1.7492995585342346 + } + left_sample { + s: 131.56501729077729 + width: 1.7493057571304083 + } + left_sample { + s: 131.76398390659125 + width: 1.7493119557265639 + } + left_sample { + s: 131.96295052240535 + width: 1.7493181543229639 + } + left_sample { + s: 132.16191713821954 + width: 1.7493243529195805 + } + left_sample { + s: 132.36088375403355 + width: 1.7493305515160664 + } + left_sample { + s: 132.55985036984774 + width: 1.7493367501129553 + } + left_sample { + s: 132.75881698566187 + width: 1.7493429487095615 + } + left_sample { + s: 132.95778360147605 + width: 1.7493491473064582 + } + left_sample { + s: 133.15675021729035 + width: 1.7493553459037283 + } + left_sample { + s: 133.35571683310448 + width: 1.7493615445007518 + } + left_sample { + s: 133.55468344891858 + width: 1.749367743097918 + } + left_sample { + s: 133.75365006473282 + width: 1.7493739416952245 + } + left_sample { + s: 133.95261668054695 + width: 1.7493801402924032 + } + left_sample { + s: 134.1515832963612 + width: 1.749386338890252 + } + left_sample { + s: 134.35054991217524 + width: 1.7493925374876778 + } + left_sample { + s: 134.54951652798937 + width: 1.7493987360851659 + } + left_sample { + s: 134.74848314380353 + width: 1.7494049346828235 + } + left_sample { + s: 134.94744975961754 + width: 1.7494111332800961 + } + left_sample { + s: 135.14641637543178 + width: 1.7494173318777115 + } + left_sample { + s: 135.34538299124577 + width: 1.7494235304750696 + } + left_sample { + s: 135.54434960705976 + width: 1.7494297290723766 + } + left_sample { + s: 135.74331622287383 + width: 1.7494359276696665 + } + left_sample { + s: 135.94228283868782 + width: 1.7494421262670539 + } + left_sample { + s: 136.1412494545018 + width: 1.7494483248641413 + } + left_sample { + s: 136.34021607031582 + width: 1.7494545234615109 + } + left_sample { + s: 136.53918268612975 + width: 1.7494607220586937 + } + left_sample { + s: 136.73814930194374 + width: 1.7494669206558218 + } + left_sample { + s: 136.93711591775764 + width: 1.7494731192529225 + } + left_sample { + s: 137.13608253357157 + width: 1.7494793178500361 + } + left_sample { + s: 137.33504914938555 + width: 1.7494855164472232 + } + left_sample { + s: 137.53401576519943 + width: 1.7494917150443843 + } + left_sample { + s: 137.73298238101341 + width: 1.7494979136413369 + } + left_sample { + s: 137.93194899682729 + width: 1.7495041122383783 + } + left_sample { + s: 138.13091561264122 + width: 1.7495103108353454 + } + left_sample { + s: 138.32988222845515 + width: 1.749516509432413 + } + left_sample { + s: 138.52884884426913 + width: 1.7495227080293516 + } + left_sample { + s: 138.727815460083 + width: 1.7495289066263295 + } + left_sample { + s: 138.92678207589688 + width: 1.7495351052233334 + } + left_sample { + s: 139.12574869171075 + width: 1.749541303820249 + } + left_sample { + s: 139.32471530752474 + width: 1.749547502417061 + } + left_sample { + s: 139.52368192333878 + width: 1.749553701014001 + } + left_sample { + s: 139.72264853915271 + width: 1.7495598996111434 + } + left_sample { + s: 139.92161515496664 + width: 1.7495660982080645 + } + left_sample { + s: 140.12058177078052 + width: 1.7495722968048815 + } + left_sample { + s: 140.31954838659451 + width: 1.7495784954017948 + } + left_sample { + s: 140.51851500240841 + width: 1.7495846939987247 + } + left_sample { + s: 140.71748161822242 + width: 1.7495908925959258 + } + left_sample { + s: 140.91644823403641 + width: 1.7495970911927932 + } + left_sample { + s: 141.11541484985034 + width: 1.7496032897897846 + } + left_sample { + s: 141.31438146566435 + width: 1.7496094883867719 + } + left_sample { + s: 141.51334808147831 + width: 1.7496156869839179 + } + left_sample { + s: 141.71231469729216 + width: 1.749621885580757 + } + left_sample { + s: 141.91128131310617 + width: 1.749628084177798 + } + left_sample { + s: 142.11024792892022 + width: 1.7496342827749989 + } + left_sample { + s: 142.30921454473417 + width: 1.7496404813719213 + } + left_sample { + s: 142.50818116054825 + width: 1.7496466799688901 + } + left_sample { + s: 142.70714777636223 + width: 1.7496528785660572 + } + left_sample { + s: 142.90611439217625 + width: 1.7496590771629965 + } + left_sample { + s: 143.10508100799021 + width: 1.749665275760103 + } + left_sample { + s: 143.30404762380422 + width: 1.7496714743571449 + } + left_sample { + s: 143.50301423961815 + width: 1.7496776729540975 + } + left_sample { + s: 143.70198085543225 + width: 1.7496838715512346 + } + left_sample { + s: 143.90094747124616 + width: 1.7496900701481948 + } + left_sample { + s: 144.09991408706026 + width: 1.7496962687453761 + } + left_sample { + s: 144.29888070287416 + width: 1.7497024673424511 + } + left_sample { + s: 144.49784731868809 + width: 1.7497086659395027 + } + left_sample { + s: 144.69681393450222 + width: 1.7497148645365919 + } + left_sample { + s: 144.89578055031623 + width: 1.7497210631337217 + } + left_sample { + s: 145.09474716613019 + width: 1.7497272617306927 + } + left_sample { + s: 145.29371378194418 + width: 1.7497334603277364 + } + left_sample { + s: 145.49268039775822 + width: 1.7497396589248408 + } + left_sample { + s: 145.69164701357218 + width: 1.7497458575218459 + } + left_sample { + s: 145.89061362938617 + width: 1.7497520561189555 + } + left_sample { + s: 146.08958024520015 + width: 1.7497582547160548 + } + left_sample { + s: 146.2885468610142 + width: 1.7497644533131698 + } + left_sample { + s: 146.48751347682824 + width: 1.7497706519102738 + } + left_sample { + s: 146.6864800926422 + width: 1.7497768505072893 + } + left_sample { + s: 146.88544670845624 + width: 1.7497830491044455 + } + left_sample { + s: 147.08441332427023 + width: 1.7497892477015164 + } + left_sample { + s: 147.28337994008416 + width: 1.7497954462985248 + } + left_sample { + s: 147.4823465558982 + width: 1.7498016448955513 + } + left_sample { + s: 147.68131317171219 + width: 1.7498078434926596 + } + left_sample { + s: 147.88027978752615 + width: 1.749814042089693 + } + left_sample { + s: 148.07924640334028 + width: 1.7498202406870356 + } + left_sample { + s: 148.27821301915421 + width: 1.7498264392838938 + } + left_sample { + s: 148.47717963496819 + width: 1.74983263788095 + } + left_sample { + s: 148.67614625078212 + width: 1.7498388364780038 + } + left_sample { + s: 148.87511286659617 + width: 1.7498450350751484 + } + left_sample { + s: 149.07407948241027 + width: 1.7498512336721996 + } + left_sample { + s: 149.2730460982242 + width: 1.7498574322691649 + } + left_sample { + s: 149.47201271403819 + width: 1.749863630866193 + } + left_sample { + s: 149.67097932985217 + width: 1.7498698294633503 + } + left_sample { + s: 149.86994594566625 + width: 1.7498760280603842 + } + left_sample { + s: 150.06891256148012 + width: 1.7498822266572631 + } + left_sample { + s: 150.26787917729413 + width: 1.7498884252543485 + } + left_sample { + s: 150.46684579310806 + width: 1.7498946238514341 + } + left_sample { + s: 150.66581240892205 + width: 1.7499008224485113 + } + left_sample { + s: 150.86477902473598 + width: 1.7499070210453955 + } + left_sample { + s: 151.06374564054997 + width: 1.7499132196423814 + } + left_sample { + s: 151.26271225636395 + width: 1.749919418239565 + } + left_sample { + s: 151.46167887217788 + width: 1.7499256168364306 + } + left_sample { + s: 151.66064548799187 + width: 1.7499318154334782 + } + left_sample { + s: 151.85961210380577 + width: 1.7499380140303975 + } + left_sample { + s: 152.0585787196197 + width: 1.7499442126274645 + } + left_sample { + s: 152.25754533543369 + width: 1.7499504112245647 + } + left_sample { + s: 152.45651195124751 + width: 1.7499566098214128 + } + left_sample { + s: 152.65547856706155 + width: 1.7499628084184666 + } + left_sample { + s: 152.85444518287542 + width: 1.7499690070153391 + } + left_sample { + s: 153.05341179868932 + width: 1.7499752056123097 + } + left_sample { + s: 153.25237841450328 + width: 1.7499814042091824 + } + left_sample { + s: 153.45134503031719 + width: 1.749987602806093 + } + left_sample { + s: 153.65031164613103 + width: 1.7499938014031609 + } + left_sample { + s: 153.87421245705966 + width: 1.7500000000000586 + } + right_sample { + s: 0 + width: 1.7499999999999967 + } + right_sample { + s: 0.20001136855364768 + width: 1.7499999999999127 + } + right_sample { + s: 0.40002273710671876 + width: 1.7499999999998856 + } + right_sample { + s: 0.60003410566029847 + width: 1.7499999999999409 + } + right_sample { + s: 0.80004547421347971 + width: 1.7500000000001348 + } + right_sample { + s: 1.0000568427671555 + width: 1.7499999999999962 + } + right_sample { + s: 1.2000682113204328 + width: 1.7499999999999951 + } + right_sample { + s: 1.4000795798740127 + width: 1.749999999999996 + } + right_sample { + s: 1.6000909484271939 + width: 1.7500000000000233 + } + right_sample { + s: 1.8001023169806494 + width: 1.7500000000000777 + } + right_sample { + s: 2.0001136855341328 + width: 1.75000000000005 + } + right_sample { + s: 2.2001250540875064 + width: 1.7500000000000775 + } + right_sample { + s: 2.4001364226407835 + width: 1.7500000000000218 + } + right_sample { + s: 2.600147791194253 + width: 1.7499999999999112 + } + right_sample { + s: 2.8001591597478326 + width: 1.7500000000000766 + } + right_sample { + s: 3.0001705283009996 + width: 1.7499999999999378 + } + right_sample { + s: 3.2001818968545792 + width: 1.7499999999999933 + } + right_sample { + s: 3.4001932654079527 + width: 1.7499999999999096 + } + right_sample { + s: 3.6002046339613263 + width: 1.7499999999998819 + } + right_sample { + s: 3.8002160025149059 + width: 1.7499999999999096 + } + right_sample { + s: 4.0002273710682656 + width: 1.7499999999999085 + } + right_sample { + s: 4.2002387396216534 + width: 1.7500000000000193 + } + right_sample { + s: 4.400250108175233 + width: 1.749999999999909 + } + right_sample { + s: 4.6002614767284822 + width: 1.7499999999999361 + } + right_sample { + s: 4.8002728452820618 + width: 1.7500000000000184 + } + right_sample { + s: 5.0002842138355312 + width: 1.7499999999999631 + } + right_sample { + s: 5.2002955823890007 + width: 1.7499999999999636 + } + right_sample { + s: 5.40030695094225 + width: 1.7499999999999627 + } + right_sample { + s: 5.6003183194958295 + width: 1.7500000000000735 + } + right_sample { + s: 5.8003296880491888 + width: 1.7500000000000178 + } + right_sample { + s: 6.0003410566026583 + width: 1.7500000000001283 + } + right_sample { + s: 6.2003524251559359 + width: 1.7500000000000726 + } + right_sample { + s: 6.4003637937095013 + width: 1.7500000000000455 + } + right_sample { + s: 6.6003751622628748 + width: 1.7500000000001272 + } + right_sample { + s: 6.8003865308163585 + width: 1.7500000000001 + } + right_sample { + s: 7.0003978993698137 + width: 1.7499999999999616 + } + right_sample { + s: 7.2004092679233933 + width: 1.7500000000000435 + } + right_sample { + s: 7.4004206364766709 + width: 1.7500000000000988 + } + right_sample { + s: 7.6004320050301546 + width: 1.7500000000000435 + } + right_sample { + s: 7.8004433735835281 + width: 1.7500000000000426 + } + right_sample { + s: 8.0004547421369 + width: 1.7499999999999323 + } + right_sample { + s: 8.200466110690467 + width: 1.7499999999999316 + } + right_sample { + s: 8.40047747924395 + width: 1.7500000000000147 + } + right_sample { + s: 8.6004888477974326 + width: 1.7499999999998481 + } + right_sample { + s: 8.8005002163506 + width: 1.74999999999993 + } + right_sample { + s: 9.00051158490418 + width: 1.7500000000000142 + } + right_sample { + s: 9.20052295345754 + width: 1.7499999999999307 + } + right_sample { + s: 9.4005343220111328 + width: 1.7499999999999578 + } + right_sample { + s: 9.600545690564493 + width: 1.7499999999999851 + } + right_sample { + s: 9.8005570591178657 + width: 1.7499999999999576 + } + right_sample { + s: 10.000568427671226 + width: 1.7499999999999851 + } + right_sample { + s: 10.200579796224586 + width: 1.7500000000000124 + } + right_sample { + s: 10.400591164778028 + width: 1.7500000000000127 + } + right_sample { + s: 10.6006025333314 + width: 1.7500000000001503 + } + right_sample { + s: 10.800613901884663 + width: 1.750000000000095 + } + right_sample { + s: 11.000625270438244 + width: 1.7500000000000677 + } + right_sample { + s: 11.200636638991575 + width: 1.75000000000015 + } + right_sample { + s: 11.400648007544977 + width: 1.7500000000002049 + } + right_sample { + s: 11.600659376098349 + width: 1.7500000000001499 + } + right_sample { + s: 11.800670744651915 + width: 1.7500000000001776 + } + right_sample { + s: 12.000682113205496 + width: 1.7500000000002052 + } + right_sample { + s: 12.200693481758869 + width: 1.750000000000149 + } + right_sample { + s: 12.400704850312145 + width: 1.750000000000093 + } + right_sample { + s: 12.600716218865628 + width: 1.7500000000001485 + } + right_sample { + s: 12.800727587419111 + width: 1.7500000000000653 + } + right_sample { + s: 13.000738955972622 + width: 1.7500000000000369 + } + right_sample { + s: 13.200750324525995 + width: 1.7499999999998987 + } + right_sample { + s: 13.400761693079367 + width: 1.7499999999999256 + } + right_sample { + s: 13.60077306163285 + width: 1.750000000000008 + } + right_sample { + s: 13.800784430186333 + width: 1.7499999999999531 + } + right_sample { + s: 14.000795798739789 + width: 1.7499999999998979 + } + right_sample { + s: 14.200807167293176 + width: 1.7499999999999241 + } + right_sample { + s: 14.400818535846646 + width: 1.74999999999998 + } + right_sample { + s: 14.600829904400006 + width: 1.7499999999998419 + } + right_sample { + s: 14.800841272953477 + width: 1.7499999999998408 + } + right_sample { + s: 15.000852641506849 + width: 1.7499999999999225 + } + right_sample { + s: 15.200864010060222 + width: 1.7499999999998952 + } + right_sample { + s: 15.400875378613774 + width: 1.7499999999999238 + } + right_sample { + s: 15.600886747167024 + width: 1.7499999999999223 + } + right_sample { + s: 15.800898115720521 + width: 1.7499999999999225 + } + right_sample { + s: 16.000909484274086 + width: 1.7499999999999507 + } + right_sample { + s: 16.200920852827444 + width: 1.7499999999999496 + } + right_sample { + s: 16.400932221380913 + width: 1.7500000000000051 + } + right_sample { + s: 16.600943589934285 + width: 1.7499999999999494 + } + right_sample { + s: 16.800954958487658 + width: 1.7499999999999216 + } + right_sample { + s: 17.000966327040921 + width: 1.7499999999998659 + } + right_sample { + s: 17.200977695594418 + width: 1.7499999999998663 + } + right_sample { + s: 17.400989064147982 + width: 1.7499999999998943 + } + right_sample { + s: 17.601000432701245 + width: 1.7499999999998384 + } + right_sample { + s: 17.801011801254742 + width: 1.7499999999997826 + } + right_sample { + s: 18.001023169808114 + width: 1.7499999999997002 + } + right_sample { + s: 18.2010345383615 + width: 1.7499999999997267 + } + right_sample { + s: 18.401045906915066 + width: 1.7499999999998102 + } + right_sample { + s: 18.601057275468342 + width: 1.7499999999996709 + } + right_sample { + s: 18.801068644021715 + width: 1.749999999999726 + } + right_sample { + s: 19.001080012574977 + width: 1.7499999999998632 + } + right_sample { + s: 19.201091381128585 + width: 1.749999999999754 + } + right_sample { + s: 19.401102749681943 + width: 1.7499999999997806 + } + right_sample { + s: 19.601114118235522 + width: 1.7499999999998086 + } + right_sample { + s: 19.801125486788784 + width: 1.7499999999999183 + } + right_sample { + s: 20.001136855342267 + width: 1.7499999999999181 + } + right_sample { + s: 20.201148223895832 + width: 1.7499999999999463 + } + right_sample { + s: 20.401159592449094 + width: 1.7500000000000557 + } + right_sample { + s: 20.601170961002481 + width: 1.7499999999998899 + } + right_sample { + s: 20.801182329555949 + width: 1.7499999999999167 + } + right_sample { + s: 21.001193698109432 + width: 1.7500000000000266 + } + right_sample { + s: 21.201205066662887 + width: 1.7500000000000007 + } + right_sample { + s: 21.401216435216163 + width: 1.7500000000000266 + } + right_sample { + s: 21.601227803769618 + width: 1.7499999999999447 + } + right_sample { + s: 21.801239172323005 + width: 1.7499999999999984 + } + right_sample { + s: 22.001250540876377 + width: 1.7499999999999714 + } + right_sample { + s: 22.20126190942975 + width: 1.7499999999999158 + } + right_sample { + s: 22.401273277983314 + width: 1.749999999999917 + } + right_sample { + s: 22.6012846465367 + width: 1.7499999999999147 + } + right_sample { + s: 22.80129601509006 + width: 1.7499999999999429 + } + right_sample { + s: 23.001307383643447 + width: 1.7499999999998044 + } + right_sample { + s: 23.201318752197025 + width: 1.7499999999998879 + } + right_sample { + s: 23.401330120750192 + width: 1.7499999999999409 + } + right_sample { + s: 23.601341489303852 + width: 1.7499999999999163 + } + right_sample { + s: 23.801352857857033 + width: 1.7499999999999127 + } + right_sample { + s: 24.001364226410516 + width: 1.7499999999999132 + } + right_sample { + s: 24.201375594964095 + width: 1.7499999999999969 + } + right_sample { + s: 24.401386963517467 + width: 1.7499999999999136 + } + right_sample { + s: 24.60139833207084 + width: 1.7499999999999949 + } + right_sample { + s: 24.801409700624308 + width: 1.7499999999999956 + } + right_sample { + s: 25.001421069177777 + width: 1.7499999999998854 + } + right_sample { + s: 25.201432437731054 + width: 1.7499999999999654 + } + right_sample { + s: 25.401443806284728 + width: 1.7499999999999951 + } + right_sample { + s: 25.601455174837991 + width: 1.7499999999999385 + } + right_sample { + s: 25.80146654339168 + width: 1.7500000000000491 + } + right_sample { + s: 26.001477911944832 + width: 1.7500000000000477 + } + right_sample { + s: 26.201489280498425 + width: 1.7499999999999667 + } + right_sample { + s: 26.401500649051755 + width: 1.749999999999966 + } + right_sample { + s: 26.601512017605348 + width: 1.7500000000000207 + } + right_sample { + s: 26.801523386158802 + width: 1.7500000000000488 + } + right_sample { + s: 27.001534754712271 + width: 1.7500000000001037 + } + right_sample { + s: 27.201546123265643 + width: 1.7499999999999378 + } + right_sample { + s: 27.401557491818988 + width: 1.750000000000103 + } + right_sample { + s: 27.601568860372566 + width: 1.7500000000001037 + } + right_sample { + s: 27.801580228925953 + width: 1.7499999999999378 + } + right_sample { + s: 28.001591597479312 + width: 1.7500000000000193 + } + right_sample { + s: 28.201602966032862 + width: 1.7500000000000764 + } + right_sample { + s: 28.401614334586153 + width: 1.7500000000000466 + } + right_sample { + s: 28.601625703139607 + width: 1.7500000000001581 + } + right_sample { + s: 28.80163707169298 + width: 1.7500000000000751 + } + right_sample { + s: 29.001648440246353 + width: 1.7500000000000469 + } + right_sample { + s: 29.201659808799725 + width: 1.7500000000001845 + } + right_sample { + s: 29.401671177353098 + width: 1.7500000000002116 + } + right_sample { + s: 29.601682545906566 + width: 1.7500000000002129 + } + right_sample { + s: 29.801693914460063 + width: 1.7500000000001847 + } + right_sample { + s: 30.00170528301323 + width: 1.7500000000001832 + } + right_sample { + s: 30.201716651566795 + width: 1.7500000000001301 + } + right_sample { + s: 30.401728020120387 + width: 1.7500000000001839 + } + right_sample { + s: 30.601739388673746 + width: 1.7500000000002938 + } + right_sample { + s: 30.801750757227243 + width: 1.7500000000001565 + } + right_sample { + s: 31.001762125780711 + width: 1.7500000000001834 + } + right_sample { + s: 31.201773494333988 + width: 1.7500000000001272 + } + right_sample { + s: 31.401784862887457 + width: 1.7500000000002098 + } + right_sample { + s: 31.601796231440844 + width: 1.7500000000000717 + } + right_sample { + s: 31.801807599994312 + width: 1.7500000000000164 + } + right_sample { + s: 32.001818968547795 + width: 1.7500000000000426 + } + right_sample { + s: 32.201830337101171 + width: 1.7500000000001243 + } + right_sample { + s: 32.401841705654547 + width: 1.7500000000000977 + } + right_sample { + s: 32.601853074207924 + width: 1.7500000000000422 + } + right_sample { + s: 32.801864442761286 + width: 1.7500000000000695 + } + right_sample { + s: 33.001875811314854 + width: 1.7499999999999878 + } + right_sample { + s: 33.20188717986813 + width: 1.75000000000004 + } + right_sample { + s: 33.401898548421478 + width: 1.7500000000001237 + } + right_sample { + s: 33.601909916974854 + width: 1.7499999999999316 + } + right_sample { + s: 33.801921285528216 + width: 1.7499999999999571 + } + right_sample { + s: 34.001932654081592 + width: 1.7500000000000386 + } + right_sample { + s: 34.201944022635061 + width: 1.7500000000000129 + } + right_sample { + s: 34.401955391188338 + width: 1.7499999999999558 + } + right_sample { + s: 34.601966759741806 + width: 1.749999999999984 + } + right_sample { + s: 34.801978128295183 + width: 1.7499999999999283 + } + right_sample { + s: 35.001989496848751 + width: 1.7500000000000389 + } + right_sample { + s: 35.202000865402141 + width: 1.7500000000000371 + } + right_sample { + s: 35.402012233955531 + width: 1.7499999999999822 + } + right_sample { + s: 35.602023602509014 + width: 1.7500000000000375 + } + right_sample { + s: 35.802034971062469 + width: 1.7500000000000386 + } + right_sample { + s: 36.002046339616051 + width: 1.7500000000001756 + } + right_sample { + s: 36.20205770816947 + width: 1.7500000000001736 + } + right_sample { + s: 36.402069076722832 + width: 1.7500000000001485 + } + right_sample { + s: 36.602080445276442 + width: 1.7500000000001201 + } + right_sample { + s: 36.802091813829819 + width: 1.7500000000001195 + } + right_sample { + s: 37.002103182383209 + width: 1.7500000000000915 + } + right_sample { + s: 37.202114550936557 + width: 1.7500000000000924 + } + right_sample { + s: 37.402125919490054 + width: 1.7500000000002283 + } + right_sample { + s: 37.602137288043636 + width: 1.7500000000000937 + } + right_sample { + s: 37.802148656596913 + width: 1.7500000000000082 + } + right_sample { + s: 38.002160025150289 + width: 1.7500000000000075 + } + right_sample { + s: 38.202171393703743 + width: 1.7500000000000364 + } + right_sample { + s: 38.40218276225702 + width: 1.7500000000000615 + } + right_sample { + s: 38.602194130810382 + width: 1.7499999999999534 + } + right_sample { + s: 38.802205499363758 + width: 1.7499999999999787 + } + right_sample { + s: 39.002216867917355 + width: 1.7500000000000626 + } + right_sample { + s: 39.202228236470809 + width: 1.7499999999999816 + } + right_sample { + s: 39.402239605024086 + width: 1.749999999999923 + } + right_sample { + s: 39.602250973577462 + width: 1.7499999999998959 + } + right_sample { + s: 39.802262342130838 + width: 1.749999999999923 + } + right_sample { + s: 40.0022737106842 + width: 1.749999999999923 + } + right_sample { + s: 40.202285079237562 + width: 1.7499999999998681 + } + right_sample { + s: 40.402296447791144 + width: 1.749999999999923 + } + right_sample { + s: 40.602307816344712 + width: 1.7499999999999514 + } + right_sample { + s: 40.802319184897989 + width: 1.749999999999948 + } + right_sample { + s: 41.002330553451237 + width: 1.7499999999999487 + } + right_sample { + s: 41.20234192200482 + width: 1.7499999999999503 + } + right_sample { + s: 41.402353290558288 + width: 1.7500000000000038 + } + right_sample { + s: 41.602364659111842 + width: 1.7500000000000333 + } + right_sample { + s: 41.802376027665311 + width: 1.7500000000000591 + } + right_sample { + s: 42.0023873962187 + width: 1.7500000000000568 + } + right_sample { + s: 42.202398764772283 + width: 1.7500000000000315 + } + right_sample { + s: 42.402410133325645 + width: 1.7500000000001124 + } + right_sample { + s: 42.602421501879022 + width: 1.7500000000000575 + } + right_sample { + s: 42.80243287043259 + width: 1.7500000000001681 + } + right_sample { + s: 43.002444238986172 + width: 1.7500000000001137 + } + right_sample { + s: 43.202455607539534 + width: 1.7500000000001397 + } + right_sample { + s: 43.402466976093 + width: 1.7500000000002218 + } + right_sample { + s: 43.602478344646265 + width: 1.7500000000001663 + } + right_sample { + s: 43.802489713199861 + width: 1.7500000000001397 + } + right_sample { + s: 44.002501081753444 + width: 1.7500000000002212 + } + right_sample { + s: 44.2025124503066 + width: 1.7500000000002196 + } + right_sample { + s: 44.402523818860082 + width: 1.7500000000001112 + } + right_sample { + s: 44.602535187413444 + width: 1.7500000000002194 + } + right_sample { + s: 44.802546555966913 + width: 1.7500000000002207 + } + right_sample { + s: 45.002557924520382 + width: 1.7500000000001656 + } + right_sample { + s: 45.202569293073658 + width: 1.7500000000001354 + } + right_sample { + s: 45.402580661627141 + width: 1.7500000000000817 + } + right_sample { + s: 45.602592030180517 + width: 1.7500000000001352 + } + right_sample { + s: 45.802603398734014 + width: 1.7500000000001363 + } + right_sample { + s: 46.002614767287376 + width: 1.7500000000000822 + } + right_sample { + s: 46.202626135840767 + width: 1.7500000000001072 + } + right_sample { + s: 46.405275008788429 + width: 1.7499999999999969 + } + right_sample { + s: 46.580037921587085 + width: 1.7156615267790134 + } + right_sample { + s: 46.754800834385684 + width: 1.6986974716873728 + } + right_sample { + s: 46.929563747184112 + width: 1.6987619053676635 + } + right_sample { + s: 47.104326659982767 + width: 1.7031022242685836 + } + right_sample { + s: 47.279089572781288 + width: 1.7074425431706817 + } + right_sample { + s: 47.453852485579887 + width: 1.7117828620724331 + } + right_sample { + s: 47.6286153983785 + width: 1.7161231809743946 + } + right_sample { + s: 47.803378311176765 + width: 1.7204634998756454 + } + right_sample { + s: 47.978141223975484 + width: 1.72480381877709 + } + right_sample { + s: 48.152904136773955 + width: 1.7291441376783752 + } + right_sample { + s: 48.327667049572725 + width: 1.7334844565798568 + } + right_sample { + s: 48.502429962371316 + width: 1.7378247754817031 + } + right_sample { + s: 48.677192875169595 + width: 1.7421650943828741 + } + right_sample { + s: 48.89446870767695 + width: 1.7483508657443871 + } + right_sample { + s: 49.064691439921788 + width: 1.7156379906187833 + } + right_sample { + s: 49.234914172166171 + width: 1.6977275950080777 + } + right_sample { + s: 49.405136904410725 + width: 1.6966000786573563 + } + right_sample { + s: 49.575359636655541 + width: 1.7016563544295906 + } + right_sample { + s: 49.745582368900152 + width: 1.7067126302022859 + } + right_sample { + s: 49.915805101144933 + width: 1.7117689059743175 + } + right_sample { + s: 50.086027833389466 + width: 1.7168251817467506 + } + right_sample { + s: 50.256250565634048 + width: 1.7218814575181898 + } + right_sample { + s: 50.426473297878772 + width: 1.7269377332904112 + } + right_sample { + s: 50.596696030123347 + width: 1.7319940090630959 + } + right_sample { + s: 50.766918762367951 + width: 1.737050284834931 + } + right_sample { + s: 50.937141494612746 + width: 1.7421065606081232 + } + right_sample { + s: 51.1192028141192 + width: 1.7477615499732737 + } + right_sample { + s: 51.281061563556669 + width: 1.6988926103085866 + } + right_sample { + s: 51.442920312994346 + width: 1.6620375183074247 + } + right_sample { + s: 51.604779062431859 + width: 1.6403956329799205 + } + right_sample { + s: 51.766637811869323 + width: 1.6345713391212757 + } + right_sample { + s: 51.928496561306851 + width: 1.6426483081548331 + } + right_sample { + s: 52.090355310744414 + width: 1.6526245064266427 + } + right_sample { + s: 52.252214060181828 + width: 1.6626007046999218 + } + right_sample { + s: 52.414072809619505 + width: 1.672576902972593 + } + right_sample { + s: 52.575931559056876 + width: 1.6825531012454573 + } + right_sample { + s: 52.7377903084946 + width: 1.6925292995184407 + } + right_sample { + s: 52.899649057932123 + width: 1.7025054977908451 + } + right_sample { + s: 53.061507807369807 + width: 1.7124816960633686 + } + right_sample { + s: 53.223366556807264 + width: 1.7224578943355291 + } + right_sample { + s: 53.385225306244692 + width: 1.7324340926081396 + } + right_sample { + s: 53.535661210641251 + width: 1.7412698274768559 + } + right_sample { + s: 53.689999802215809 + width: 1.7182119056021121 + } + right_sample { + s: 53.844338393790366 + width: 1.7001797211774521 + } + right_sample { + s: 53.998676985364973 + width: 1.6959150418002333 + } + right_sample { + s: 54.153015576939609 + width: 1.7042207122227377 + } + right_sample { + s: 54.307354168514195 + width: 1.7146013518046217 + } + right_sample { + s: 54.461692760088695 + width: 1.7249819913860889 + } + right_sample { + s: 54.665935780616486 + width: 1.7405456647484217 + } + right_sample { + s: 54.824380910618657 + width: 1.7068837525660823 + } + right_sample { + s: 54.982826040620893 + width: 1.6781102584991336 + } + right_sample { + s: 55.141271170623064 + width: 1.6637745151258956 + } + right_sample { + s: 55.299716300625292 + width: 1.6644659663473875 + } + right_sample { + s: 55.458161430627634 + width: 1.6741933595699252 + } + right_sample { + s: 55.616606560629869 + width: 1.6840035079164717 + } + right_sample { + s: 55.775051690631933 + width: 1.6938136562633266 + } + right_sample { + s: 55.933496820634218 + width: 1.7036238046097087 + } + right_sample { + s: 56.0919419506365 + width: 1.7134339529558162 + } + right_sample { + s: 56.250387080638674 + width: 1.7232441013021618 + } + right_sample { + s: 56.408832210640846 + width: 1.7330542496488626 + } + right_sample { + s: 56.553977533807334 + width: 1.7415587279817974 + } + right_sample { + s: 56.753223118960371 + width: 1.7168222066200696 + } + right_sample { + s: 56.952424168022134 + width: 1.7056246364373082 + } + right_sample { + s: 57.151584753684595 + width: 1.7085745023601029 + } + right_sample { + s: 57.35070873530254 + width: 1.7115455850023651 + } + right_sample { + s: 57.549799763669434 + width: 1.7143499184745583 + } + right_sample { + s: 57.748861285838053 + width: 1.7169925424607209 + } + right_sample { + s: 57.947896549981593 + width: 1.7194784850458384 + } + right_sample { + s: 58.146908610289984 + width: 1.7218127610217104 + } + right_sample { + s: 58.345900331902719 + width: 1.7240003702972044 + } + right_sample { + s: 58.544874395870735 + width: 1.7260462964127996 + } + right_sample { + s: 58.743833304148026 + width: 1.72795550515534 + } + right_sample { + s: 58.942779384607512 + width: 1.7297329432697646 + } + right_sample { + s: 59.141714796080507 + width: 1.7313835372674764 + } + right_sample { + s: 59.3406415334168 + width: 1.7329121923233921 + } + right_sample { + s: 59.539561432564724 + width: 1.7343237912625697 + } + right_sample { + s: 59.738476175663934 + width: 1.7356231936337776 + } + right_sample { + s: 59.937387296157368 + width: 1.7368152348624468 + } + right_sample { + s: 60.136296183911625 + width: 1.7379047254846227 + } + right_sample { + s: 60.335204090351745 + width: 1.7388964504550248 + } + right_sample { + s: 60.5341121336035 + width: 1.7397951685281356 + } + right_sample { + s: 60.733021303644449 + width: 1.7406056117082618 + } + right_sample { + s: 60.931932467461309 + width: 1.7413324847668439 + } + right_sample { + s: 61.13084637421376 + width: 1.7419804648196646 + } + right_sample { + s: 61.329763660402456 + width: 1.7425542009658193 + } + right_sample { + s: 61.528684855040041 + width: 1.7430583139814022 + } + right_sample { + s: 61.72761038482539 + width: 1.743497396068441 + } + right_sample { + s: 61.926540579319919 + width: 1.7438760106513205 + } + right_sample { + s: 62.125475676125411 + width: 1.7441986922206532 + } + right_sample { + s: 62.324415826061234 + width: 1.7444699462221172 + } + right_sample { + s: 62.523361098343877 + width: 1.7446942489846222 + } + right_sample { + s: 62.722311485764074 + width: 1.7448760476876581 + } + right_sample { + s: 62.921266909865345 + width: 1.7450197603609783 + } + right_sample { + s: 63.120227226120427 + width: 1.7451297759189899 + } + right_sample { + s: 63.319192229106612 + width: 1.7452104542228553 + } + right_sample { + s: 63.518161657681482 + width: 1.7452661261681668 + } + right_sample { + s: 63.71713520015583 + width: 1.7453010937965572 + } + right_sample { + s: 63.9161124994651 + width: 1.7453196304292276 + } + right_sample { + s: 64.115093158341665 + width: 1.7453259808162884 + } + right_sample { + s: 64.314076744482747 + width: 1.7453243613038918 + } + right_sample { + s: 64.5130627957203 + width: 1.745318960012058 + } + right_sample { + s: 64.712050825187291 + width: 1.7453139370245139 + } + right_sample { + s: 64.911040326484837 + width: 1.74531342458506 + } + right_sample { + s: 65.110030778847687 + width: 1.745321527301354 + } + right_sample { + s: 65.309021652309283 + width: 1.7453423223482725 + } + right_sample { + s: 65.508012412866748 + width: 1.7453798596764503 + } + right_sample { + s: 65.707002527645415 + width: 1.745438162215373 + } + right_sample { + s: 65.905991470063285 + width: 1.7455212260748196 + } + right_sample { + s: 66.10497872499684 + width: 1.7456330207390254 + } + right_sample { + s: 66.303963794006421 + width: 1.7457774866634908 + } + right_sample { + s: 66.502946335281322 + width: 1.7459535672379909 + } + right_sample { + s: 66.701926441717717 + width: 1.7461447798879726 + } + right_sample { + s: 66.900904284031469 + width: 1.7463340188616472 + } + right_sample { + s: 67.0998800267398 + width: 1.7465132940854222 + } + right_sample { + s: 67.2988538285142 + width: 1.7466816419750426 + } + right_sample { + s: 67.4978258425342 + width: 1.7468391241609351 + } + right_sample { + s: 67.696796216840738 + width: 1.7469857990172331 + } + right_sample { + s: 67.89576509468904 + width: 1.747121721674503 + } + right_sample { + s: 68.094732614902483 + width: 1.7472469440323017 + } + right_sample { + s: 68.293698912226361 + width: 1.7473615147699391 + } + right_sample { + s: 68.4926641176806 + width: 1.747465479361777 + } + right_sample { + s: 68.691628358914556 + width: 1.7475588800882127 + } + right_sample { + s: 68.890591760559445 + width: 1.7476417560504909 + } + right_sample { + s: 69.089554444582532 + width: 1.7477141431844665 + } + right_sample { + s: 69.2885165306413 + width: 1.747776074274856 + } + right_sample { + s: 69.4874781364359 + width: 1.7478275789694684 + } + right_sample { + s: 69.686439378064151 + width: 1.747868683794406 + } + right_sample { + s: 69.88540037037447 + width: 1.7478994121685587 + } + right_sample { + s: 70.084361227320045 + width: 1.7479197844197265 + } + right_sample { + s: 70.2833220623119 + width: 1.7479298178005123 + } + right_sample { + s: 70.482282988573587 + width: 1.7479295265038441 + } + right_sample { + s: 70.68124411949421 + width: 1.7479189216796331 + } + right_sample { + s: 70.8802055689828 + width: 1.7478980114504792 + } + right_sample { + s: 71.079167451821164 + width: 1.7478668009302312 + } + right_sample { + s: 71.278129878222842 + width: 1.7478255472283224 + } + right_sample { + s: 71.477092879511758 + width: 1.7477778721287573 + } + right_sample { + s: 71.6760564285364 + width: 1.7477295812136366 + } + right_sample { + s: 71.875020496419182 + width: 1.7476839710431029 + } + right_sample { + s: 72.073985053911883 + width: 1.7476416912658177 + } + right_sample { + s: 72.2729500714176 + width: 1.7476027183925977 + } + right_sample { + s: 72.471915519013081 + width: 1.7475670168793287 + } + right_sample { + s: 72.670881366470681 + width: 1.7475345509610714 + } + right_sample { + s: 72.869847583281654 + width: 1.7475052846531229 + } + right_sample { + s: 73.068814138677482 + width: 1.7474791817512485 + } + right_sample { + s: 73.267781001652438 + width: 1.7474562058350411 + } + right_sample { + s: 73.466748140985885 + width: 1.7474363202680647 + } + right_sample { + s: 73.665715525265341 + width: 1.7474194881977496 + } + right_sample { + s: 73.864683122906911 + width: 1.747405672559152 + } + right_sample { + s: 74.063650902180029 + width: 1.747394836074214 + } + right_sample { + s: 74.262618831227513 + width: 1.7473869412539884 + } + right_sample { + s: 74.461586878089335 + width: 1.7473819503998917 + } + right_sample { + s: 74.6605550107244 + width: 1.7473798256036166 + } + right_sample { + s: 74.859523197032644 + width: 1.7473805287501853 + } + right_sample { + s: 75.058491404877827 + width: 1.7473840215175824 + } + right_sample { + s: 75.257459602109549 + width: 1.7473902653790283 + } + right_sample { + s: 75.456427756585271 + width: 1.7473992216033924 + } + right_sample { + s: 75.655395836193264 + width: 1.7474108512570574 + } + right_sample { + s: 75.854363808874254 + width: 1.7474251152045222 + } + right_sample { + s: 76.053331642673925 + width: 1.7474419726316373 + } + right_sample { + s: 76.252299316211335 + width: 1.7474609698167938 + } + right_sample { + s: 76.451266834243526 + width: 1.7474806697943497 + } + right_sample { + s: 76.650234205509847 + width: 1.7474998658026675 + } + right_sample { + s: 76.849201438722034 + width: 1.7475182674278134 + } + right_sample { + s: 77.048168542565577 + width: 1.7475358617488579 + } + right_sample { + s: 77.247135525702021 + width: 1.7475526571458431 + } + right_sample { + s: 77.4461023967699 + width: 1.7475686619845257 + } + right_sample { + s: 77.645069164386371 + width: 1.7475838846152385 + } + right_sample { + s: 77.844035837149235 + width: 1.7475983333717853 + } + right_sample { + s: 78.043002423638185 + width: 1.7476120165724636 + } + right_sample { + s: 78.241968932417038 + width: 1.7476249425208774 + } + right_sample { + s: 78.440935372034232 + width: 1.7476371195047973 + } + right_sample { + s: 78.6399017510257 + width: 1.7476485557967283 + } + right_sample { + s: 78.838868077915649 + width: 1.7476592596535832 + } + right_sample { + s: 79.037834361218046 + width: 1.7476692393184141 + } + right_sample { + s: 79.236800609439484 + width: 1.7476785030173163 + } + right_sample { + s: 79.435766831079235 + width: 1.7476870589629048 + } + right_sample { + s: 79.634733034631466 + width: 1.7476949153528505 + } + right_sample { + s: 79.833699228587619 + width: 1.7477020803693946 + } + right_sample { + s: 80.032665421436789 + width: 1.7477085621800623 + } + right_sample { + s: 80.231631621668072 + width: 1.7477143689385146 + } + right_sample { + s: 80.430597837771913 + width: 1.7477195087836896 + } + right_sample { + s: 80.629564078242211 + width: 1.7477239898386105 + } + right_sample { + s: 80.828530351576745 + width: 1.747727820214275 + } + right_sample { + s: 81.027496665660578 + width: 1.7477310339092125 + } + right_sample { + s: 81.226463022025769 + width: 1.7477339133585876 + } + right_sample { + s: 81.425429418456758 + width: 1.7477368515503322 + } + right_sample { + s: 81.6243958526868 + width: 1.7477399909083915 + } + right_sample { + s: 81.823362322447338 + width: 1.7477433345727218 + } + right_sample { + s: 82.0223288254678 + width: 1.7477468804388974 + } + right_sample { + s: 82.221295359475789 + width: 1.7477506263713809 + } + right_sample { + s: 82.420261922197867 + width: 1.7477545702336343 + } + right_sample { + s: 82.619228511358585 + width: 1.7477587148981024 + } + right_sample { + s: 82.818195124681566 + width: 1.747763053093691 + } + right_sample { + s: 83.017161759888936 + width: 1.7477675818906393 + } + right_sample { + s: 83.216128414701728 + width: 1.7477722991471036 + } + right_sample { + s: 83.415095086839983 + width: 1.7477772027208036 + } + right_sample { + s: 83.614061774023057 + width: 1.7477822904669784 + } + right_sample { + s: 83.813028473969368 + width: 1.747787560240835 + } + right_sample { + s: 84.011995184396667 + width: 1.7477930098960239 + } + right_sample { + s: 84.210961903022223 + width: 1.7477986372854906 + } + right_sample { + s: 84.409928627562877 + width: 1.7478044402612056 + } + right_sample { + s: 84.608895355735285 + width: 1.7478104166730302 + } + right_sample { + s: 84.807862085255621 + width: 1.7478165643709376 + } + right_sample { + s: 85.006828813840386 + width: 1.7478228812035319 + } + right_sample { + s: 85.205795539205909 + width: 1.7478293650180461 + } + right_sample { + s: 85.404762259068733 + width: 1.7478360136609752 + } + right_sample { + s: 85.603728971145387 + width: 1.7478428249774984 + } + right_sample { + s: 85.802695673160528 + width: 1.74784979645367 + } + right_sample { + s: 86.001662363733416 + width: 1.7478568895498579 + } + right_sample { + s: 86.200629043264755 + width: 1.7478640025872523 + } + right_sample { + s: 86.399595712367031 + width: 1.7478710691471266 + } + right_sample { + s: 86.5985623716527 + width: 1.7478780839876782 + } + right_sample { + s: 86.797529021733922 + width: 1.7478850476903705 + } + right_sample { + s: 86.99649566322293 + width: 1.7478919608375443 + } + right_sample { + s: 87.195462296731719 + width: 1.7478988240107698 + } + right_sample { + s: 87.3944289228722 + width: 1.7479056377923166 + } + right_sample { + s: 87.593395542256275 + width: 1.7479124027633375 + } + right_sample { + s: 87.792362155495468 + width: 1.747919119505738 + } + right_sample { + s: 87.9913287632016 + width: 1.7479257886008519 + } + right_sample { + s: 88.190295365986088 + width: 1.7479324106305874 + } + right_sample { + s: 88.3892619644607 + width: 1.747938986175922 + } + right_sample { + s: 88.5882285592366 + width: 1.7479455158183246 + } + right_sample { + s: 88.787195150925157 + width: 1.7479520001392677 + } + right_sample { + s: 88.98616174013803 + width: 1.7479584397193459 + } + right_sample { + s: 89.185128327486112 + width: 1.7479648351402339 + } + right_sample { + s: 89.384094913581052 + width: 1.747971186982465 + } + right_sample { + s: 89.583061499034 + width: 1.7479774958273915 + } + right_sample { + s: 89.782028084456172 + width: 1.7479837622557008 + } + right_sample { + s: 89.980994670458813 + width: 1.7479899868479851 + } + right_sample { + s: 90.179961257653261 + width: 1.7479961701851803 + } + right_sample { + s: 90.378927846650839 + width: 1.7480023128477495 + } + right_sample { + s: 90.577894438062813 + width: 1.7480084154162907 + } + right_sample { + s: 90.776861032438561 + width: 1.7480144811071945 + } + right_sample { + s: 90.975827629844943 + width: 1.7480205312929895 + } + right_sample { + s: 91.174794230119431 + width: 1.7480265887675062 + } + right_sample { + s: 91.373760833098558 + width: 1.7480326593019506 + } + right_sample { + s: 91.572727438618315 + width: 1.7480387427544408 + } + right_sample { + s: 91.771694046515066 + width: 1.7480448389691372 + } + right_sample { + s: 91.9706606566251 + width: 1.7480509477907926 + } + right_sample { + s: 92.1696272687846 + width: 1.7480570690635449 + } + right_sample { + s: 92.368593882829614 + width: 1.7480632026323044 + } + right_sample { + s: 92.567560498596535 + width: 1.7480693483414056 + } + right_sample { + s: 92.766527115921264 + width: 1.7480755060354018 + } + right_sample { + s: 92.9654937346404 + width: 1.7480816755583539 + } + right_sample { + s: 93.164460354589878 + width: 1.7480878567550606 + } + right_sample { + s: 93.363426975605819 + width: 1.7480940494700332 + } + right_sample { + s: 93.5623935975247 + width: 1.7481002535472203 + } + right_sample { + s: 93.761360220182425 + width: 1.7481064688315784 + } + right_sample { + s: 93.9603268434154 + width: 1.7481126951675525 + } + right_sample { + s: 94.159293467059285 + width: 1.7481189323996873 + } + right_sample { + s: 94.358260090950893 + width: 1.7481251803718862 + } + right_sample { + s: 94.557226714926017 + width: 1.7481314389285607 + } + right_sample { + s: 94.75619333882095 + width: 1.7481377079146763 + } + right_sample { + s: 94.9551599624718 + width: 1.7481439871743438 + } + right_sample { + s: 95.154126585714664 + width: 1.7481502765520029 + } + right_sample { + s: 95.353093208385957 + width: 1.7481565758917625 + } + right_sample { + s: 95.552059830322733 + width: 1.7481628849779578 + } + right_sample { + s: 95.751026451437809 + width: 1.7481692005696319 + } + right_sample { + s: 95.949993071764069 + width: 1.7481755161605887 + } + right_sample { + s: 96.148959691345269 + width: 1.7481818286469959 + } + right_sample { + s: 96.347926310225432 + width: 1.7481881378812063 + } + right_sample { + s: 96.546892928448543 + width: 1.7481944439047117 + } + right_sample { + s: 96.745859546058256 + width: 1.7482007467594682 + } + right_sample { + s: 96.944826163098639 + width: 1.7482070464871706 + } + right_sample { + s: 97.143792779613634 + width: 1.7482133431296534 + } + right_sample { + s: 97.342759395647022 + width: 1.7482196367281904 + } + right_sample { + s: 97.541726011242744 + width: 1.7482259273244991 + } + right_sample { + s: 97.7406926264447 + width: 1.7482322149606295 + } + right_sample { + s: 97.939659241296866 + width: 1.7482384996780134 + } + right_sample { + s: 98.138625855842989 + width: 1.748244781518411 + } + right_sample { + s: 98.337592470127049 + width: 1.7482510605236223 + } + right_sample { + s: 98.536559084192959 + width: 1.7482573367352354 + } + right_sample { + s: 98.735525698084686 + width: 1.7482636101947757 + } + right_sample { + s: 98.9344923118458 + width: 1.7482698809443415 + } + right_sample { + s: 99.1334589255206 + width: 1.7482761490251739 + } + right_sample { + s: 99.332425539152752 + width: 1.7482824144792974 + } + right_sample { + s: 99.531392152786154 + width: 1.748288677348143 + } + right_sample { + s: 99.730358766464775 + width: 1.7482949376732964 + } + right_sample { + s: 99.929325380232555 + width: 1.7483011954968468 + } + right_sample { + s: 100.12829199413333 + width: 1.7483074508602992 + } + right_sample { + s: 100.32725860821087 + width: 1.7483137038054393 + } + right_sample { + s: 100.52622522250338 + width: 1.74831995463223 + } + right_sample { + s: 100.72519183701246 + width: 1.7483262048930295 + } + right_sample { + s: 100.9241584517268 + width: 1.7483324557609687 + } + right_sample { + s: 101.12312506663427 + width: 1.7483387074442729 + } + right_sample { + s: 101.32209168172321 + width: 1.7483449599318042 + } + right_sample { + s: 101.52105829698193 + width: 1.7483512132123715 + } + right_sample { + s: 101.72002491239864 + width: 1.7483574672746462 + } + right_sample { + s: 101.91899152796124 + width: 1.7483637221077175 + } + right_sample { + s: 102.1179581436587 + width: 1.7483699776999626 + } + right_sample { + s: 102.31692475947861 + width: 1.7483762340409206 + } + right_sample { + s: 102.51589137540958 + width: 1.7483824911186303 + } + right_sample { + s: 102.71485799143966 + width: 1.7483887489227024 + } + right_sample { + s: 102.913824607557 + width: 1.7483950074415102 + } + right_sample { + s: 103.11279122375012 + width: 1.7484012666636841 + } + right_sample { + s: 103.31175784000713 + width: 1.7484075265785908 + } + right_sample { + s: 103.51072445631614 + width: 1.7484137871748973 + } + right_sample { + s: 103.70969107266545 + width: 1.7484200484410872 + } + right_sample { + s: 103.90865768904341 + width: 1.7484263103663611 + } + right_sample { + s: 104.10762430543835 + width: 1.7484325729392454 + } + right_sample { + s: 104.30659092183825 + width: 1.7484388361489409 + } + right_sample { + s: 104.50555753823137 + width: 1.7484450999841585 + } + right_sample { + s: 104.704524154606 + width: 1.7484513644334683 + } + right_sample { + s: 104.9034907709505 + width: 1.7484576294860159 + } + right_sample { + s: 105.102457387253 + width: 1.7484638951303677 + } + right_sample { + s: 105.30142400350199 + width: 1.7484701613468596 + } + right_sample { + s: 105.5003906196919 + width: 1.7484764278713487 + } + right_sample { + s: 105.69935723582545 + width: 1.7484826943175464 + } + right_sample { + s: 105.89832385190573 + width: 1.7484889605651157 + } + right_sample { + s: 106.09729046793591 + width: 1.748495226611809 + } + right_sample { + s: 106.29625708391929 + width: 1.7485014924613922 + } + right_sample { + s: 106.49522369985878 + width: 1.7485077581164155 + } + right_sample { + s: 106.69419031575767 + width: 1.7485140235799455 + } + right_sample { + s: 106.89315693161915 + width: 1.7485202888549853 + } + right_sample { + s: 107.09212354744621 + width: 1.7485265539446504 + } + right_sample { + s: 107.29109016324213 + width: 1.7485328188515947 + } + right_sample { + s: 107.49005677901003 + width: 1.74853908357936 + } + right_sample { + s: 107.68902339475305 + width: 1.7485453481303264 + } + right_sample { + s: 107.88799001047445 + width: 1.748551612507768 + } + right_sample { + s: 108.0869566261773 + width: 1.7485578767148238 + } + right_sample { + s: 108.28592324186454 + width: 1.7485641407546679 + } + right_sample { + s: 108.4848898575396 + width: 1.7485704046295809 + } + right_sample { + s: 108.68385647320567 + width: 1.7485766683427379 + } + right_sample { + s: 108.88282308886565 + width: 1.7485829318976589 + } + right_sample { + s: 109.08178970452279 + width: 1.7485891952971591 + } + right_sample { + s: 109.28075632018046 + width: 1.7485954585438159 + } + right_sample { + s: 109.47972293584154 + width: 1.748601721640842 + } + right_sample { + s: 109.67868955150917 + width: 1.7486079845917186 + } + right_sample { + s: 109.87765616718666 + width: 1.7486142473986712 + } + right_sample { + s: 110.07662278287708 + width: 1.7486205100649554 + } + right_sample { + s: 110.27558939858304 + width: 1.7486267726185 + } + right_sample { + s: 110.47455601430464 + width: 1.748633035166193 + } + right_sample { + s: 110.67352263004081 + width: 1.7486392977587175 + } + right_sample { + s: 110.8724892457908 + width: 1.7486455604008806 + } + right_sample { + s: 111.07145586155362 + width: 1.7486518230917316 + } + right_sample { + s: 111.27042247732872 + width: 1.7486580858308072 + } + right_sample { + s: 111.4693890931151 + width: 1.7486643486169733 + } + right_sample { + s: 111.66835570891185 + width: 1.7486706114499677 + } + right_sample { + s: 111.86732232471822 + width: 1.7486768743284558 + } + right_sample { + s: 112.06628894053325 + width: 1.7486831372518086 + } + right_sample { + s: 112.26525555635617 + width: 1.74868940021922 + } + right_sample { + s: 112.46422217218631 + width: 1.7486956632298059 + } + right_sample { + s: 112.66318878802244 + width: 1.7487019262831416 + } + right_sample { + s: 112.86215540386415 + width: 1.7487081893777754 + } + right_sample { + s: 113.06112201971017 + width: 1.7487144525135925 + } + right_sample { + s: 113.26008863556 + width: 1.7487207156892819 + } + right_sample { + s: 113.45905525141258 + width: 1.7487269789042585 + } + right_sample { + s: 113.65802186726718 + width: 1.7487332421577801 + } + right_sample { + s: 113.85698848312288 + width: 1.7487395054489747 + } + right_sample { + s: 114.05595509897887 + width: 1.7487457687768617 + } + right_sample { + s: 114.25492171483438 + width: 1.7487520321407837 + } + right_sample { + s: 114.45388833068846 + width: 1.7487582955402279 + } + right_sample { + s: 114.65285494654036 + width: 1.7487645589737979 + } + right_sample { + s: 114.85182156238906 + width: 1.7487708224412948 + } + right_sample { + s: 115.05078817823399 + width: 1.7487770859403631 + } + right_sample { + s: 115.24975479407476 + width: 1.7487833494502807 + } + right_sample { + s: 115.4487214099112 + width: 1.7487896129510436 + } + right_sample { + s: 115.64768802574412 + width: 1.7487958764393685 + } + right_sample { + s: 115.8466546415732 + width: 1.7488021399158131 + } + right_sample { + s: 116.04562125739919 + width: 1.7488084033803484 + } + right_sample { + s: 116.2445878732219 + width: 1.7488146668333457 + } + right_sample { + s: 116.44355448904177 + width: 1.7488209302749345 + } + right_sample { + s: 116.64252110485896 + width: 1.7488271937054722 + } + right_sample { + s: 116.84148772067356 + width: 1.7488334571252926 + } + right_sample { + s: 117.04045433648618 + width: 1.7488397205339143 + } + right_sample { + s: 117.23942095229661 + width: 1.74884598393211 + } + right_sample { + s: 117.43838756810543 + width: 1.7488522473199359 + } + right_sample { + s: 117.63735418391263 + width: 1.7488585106980699 + } + right_sample { + s: 117.83632079971851 + width: 1.748864774066027 + } + right_sample { + s: 118.03528741552323 + width: 1.7488710374243821 + } + right_sample { + s: 118.23425403132725 + width: 1.7488773007733083 + } + right_sample { + s: 118.43322064713053 + width: 1.7488835641128289 + } + right_sample { + s: 118.63218726293347 + width: 1.7488898274437668 + } + right_sample { + s: 118.83115387873617 + width: 1.7488960907655655 + } + right_sample { + s: 119.03012049453892 + width: 1.7489023540790758 + } + right_sample { + s: 119.22908711034189 + width: 1.7489086173840711 + } + right_sample { + s: 119.42805372614545 + width: 1.7489148806807029 + } + right_sample { + s: 119.62702034194962 + width: 1.7489211439696881 + } + right_sample { + s: 119.82598695775499 + width: 1.7489274072506018 + } + right_sample { + s: 120.02495357356129 + width: 1.748933670526833 + } + right_sample { + s: 120.22392018936868 + width: 1.7489399338042317 + } + right_sample { + s: 120.42288680517723 + width: 1.7489461970849833 + } + right_sample { + s: 120.62185342098651 + width: 1.7489524603686726 + } + right_sample { + s: 120.82082003679695 + width: 1.7489587236551125 + } + right_sample { + s: 121.01978665260823 + width: 1.7489649869446227 + } + right_sample { + s: 121.21875326842026 + width: 1.7489712502368691 + } + right_sample { + s: 121.41771988423316 + width: 1.7489775135313705 + } + right_sample { + s: 121.61668650004654 + width: 1.7489837768291185 + } + right_sample { + s: 121.81565311586067 + width: 1.7489900401289318 + } + right_sample { + s: 122.01461973167535 + width: 1.74899630343154 + } + right_sample { + s: 122.21358634749059 + width: 1.7490025667362836 + } + right_sample { + s: 122.41255296330611 + width: 1.7490088300438664 + } + right_sample { + s: 122.61151957912209 + width: 1.7490150933533388 + } + right_sample { + s: 122.81048619493843 + width: 1.7490213566652186 + } + right_sample { + s: 123.00945281075498 + width: 1.7490276199795036 + } + right_sample { + s: 123.20841942657179 + width: 1.7490338832958268 + } + right_sample { + s: 123.40738604238858 + width: 1.7490401466143501 + } + right_sample { + s: 123.60635265820554 + width: 1.7490464099345953 + } + right_sample { + s: 123.80531927402251 + width: 1.7490526732570859 + } + right_sample { + s: 124.00428588983966 + width: 1.7490589365812459 + } + right_sample { + s: 124.20325250565648 + width: 1.749065199907742 + } + right_sample { + s: 124.40221912147318 + width: 1.7490714632356057 + } + right_sample { + s: 124.60118573728963 + width: 1.7490777265652253 + } + right_sample { + s: 124.80015235310563 + width: 1.7490839898970534 + } + right_sample { + s: 124.99911896892162 + width: 1.7490902532282837 + } + right_sample { + s: 125.19808558473716 + width: 1.7490965165594137 + } + right_sample { + s: 125.39705220055264 + width: 1.74910277988939 + } + right_sample { + s: 125.59601881636749 + width: 1.7491090432191729 + } + right_sample { + s: 125.79498543218237 + width: 1.7491153065479201 + } + right_sample { + s: 125.993952047997 + width: 1.7491215698759135 + } + right_sample { + s: 126.19291866381134 + width: 1.7491278332034292 + } + right_sample { + s: 126.39188527962558 + width: 1.7491340965302473 + } + right_sample { + s: 126.59085189543963 + width: 1.7491403598568613 + } + right_sample { + s: 126.78981851125349 + width: 1.7491466231825128 + } + right_sample { + s: 126.98878512706722 + width: 1.7491528865074359 + } + right_sample { + s: 127.18775174288078 + width: 1.749159149832078 + } + right_sample { + s: 127.38671835869428 + width: 1.7491654131560737 + } + right_sample { + s: 127.5856849745076 + width: 1.7491716764796708 + } + right_sample { + s: 127.78465159032095 + width: 1.7491779398025906 + } + right_sample { + s: 127.98361820613424 + width: 1.7491842031249645 + } + right_sample { + s: 128.18258482194739 + width: 1.7491904664470839 + } + right_sample { + s: 128.38155143776069 + width: 1.7491967297683437 + } + right_sample { + s: 128.58051805357371 + width: 1.7492029930896953 + } + right_sample { + s: 128.77948466938693 + width: 1.7492092564101711 + } + right_sample { + s: 128.97845128520012 + width: 1.7492155197303139 + } + right_sample { + s: 129.17741790101337 + width: 1.7492217830502765 + } + right_sample { + s: 129.37638451682665 + width: 1.7492280463695002 + } + right_sample { + s: 129.57535113264009 + width: 1.7492343096885108 + } + right_sample { + s: 129.77431774845348 + width: 1.7492405730075118 + } + right_sample { + s: 129.97328436426693 + width: 1.7492468363262315 + } + right_sample { + s: 130.17225098008049 + width: 1.749253099645347 + } + right_sample { + s: 130.37121759589419 + width: 1.749259362964614 + } + right_sample { + s: 130.57018421170793 + width: 1.7492656262840893 + } + right_sample { + s: 130.76915082752168 + width: 1.749271889603693 + } + right_sample { + s: 130.96811744333559 + width: 1.7492781529234118 + } + right_sample { + s: 131.16708405914932 + width: 1.7492844162433352 + } + right_sample { + s: 131.36605067496342 + width: 1.7492906795631189 + } + right_sample { + s: 131.56501729077729 + width: 1.7492969428833918 + } + right_sample { + s: 131.76398390659125 + width: 1.7493032062038727 + } + right_sample { + s: 131.96295052240535 + width: 1.7493094695241425 + } + right_sample { + s: 132.16191713821954 + width: 1.7493157328447098 + } + right_sample { + s: 132.36088375403355 + width: 1.7493219961654591 + } + right_sample { + s: 132.55985036984774 + width: 1.7493282594860744 + } + right_sample { + s: 132.75881698566187 + width: 1.7493345228071873 + } + right_sample { + s: 132.95778360147605 + width: 1.7493407861281167 + } + right_sample { + s: 133.15675021729035 + width: 1.7493470494489616 + } + right_sample { + s: 133.35571683310448 + width: 1.7493533127704974 + } + right_sample { + s: 133.55468344891858 + width: 1.7493595760917584 + } + right_sample { + s: 133.75365006473282 + width: 1.7493658394130116 + } + right_sample { + s: 133.95261668054695 + width: 1.7493721027346365 + } + right_sample { + s: 134.1515832963612 + width: 1.7493783660558173 + } + right_sample { + s: 134.35054991217524 + width: 1.7493846293777542 + } + right_sample { + s: 134.54951652798937 + width: 1.7493908926993902 + } + right_sample { + s: 134.74848314380353 + width: 1.7493971560210582 + } + right_sample { + s: 134.94744975961754 + width: 1.7494034193428902 + } + right_sample { + s: 135.14641637543178 + width: 1.7494096826644285 + } + right_sample { + s: 135.34538299124577 + width: 1.7494159459861574 + } + right_sample { + s: 135.54434960705976 + width: 1.7494222093076872 + } + right_sample { + s: 135.74331622287383 + width: 1.7494284726292102 + } + right_sample { + s: 135.94228283868782 + width: 1.7494347359506053 + } + right_sample { + s: 136.1412494545018 + width: 1.74944099927211 + } + right_sample { + s: 136.34021607031582 + width: 1.7494472625934099 + } + right_sample { + s: 136.53918268612975 + width: 1.7494535259149204 + } + right_sample { + s: 136.73814930194374 + width: 1.749459789236314 + } + right_sample { + s: 136.93711591775764 + width: 1.7494660525575711 + } + right_sample { + s: 137.13608253357157 + width: 1.7494723158789094 + } + right_sample { + s: 137.33504914938555 + width: 1.7494785792002339 + } + right_sample { + s: 137.53401576519943 + width: 1.7494848425215275 + } + right_sample { + s: 137.73298238101341 + width: 1.7494911058428468 + } + right_sample { + s: 137.93194899682729 + width: 1.749497369163922 + } + right_sample { + s: 138.13091561264122 + width: 1.7495036324850681 + } + right_sample { + s: 138.32988222845515 + width: 1.7495098958062427 + } + right_sample { + s: 138.52884884426913 + width: 1.7495161591274833 + } + right_sample { + s: 138.727815460083 + width: 1.7495224224486037 + } + right_sample { + s: 138.92678207589688 + width: 1.7495286857697292 + } + right_sample { + s: 139.12574869171075 + width: 1.7495349490908423 + } + right_sample { + s: 139.32471530752474 + width: 1.7495412124119258 + } + right_sample { + s: 139.52368192333878 + width: 1.7495474757330105 + } + right_sample { + s: 139.72264853915271 + width: 1.7495537390540679 + } + right_sample { + s: 139.92161515496664 + width: 1.7495600023752664 + } + right_sample { + s: 140.12058177078052 + width: 1.7495662656963873 + } + right_sample { + s: 140.31954838659451 + width: 1.7495725290174249 + } + right_sample { + s: 140.51851500240841 + width: 1.7495787923385759 + } + right_sample { + s: 140.71748161822242 + width: 1.7495850556596158 + } + right_sample { + s: 140.91644823403641 + width: 1.7495913189809109 + } + right_sample { + s: 141.11541484985034 + width: 1.7495975823019931 + } + right_sample { + s: 141.31438146566435 + width: 1.7496038456232186 + } + right_sample { + s: 141.51334808147831 + width: 1.7496101089443021 + } + right_sample { + s: 141.71231469729216 + width: 1.7496163722656142 + } + right_sample { + s: 141.91128131310617 + width: 1.7496226355866753 + } + right_sample { + s: 142.11024792892022 + width: 1.7496288989077944 + } + right_sample { + s: 142.30921454473417 + width: 1.7496351622291593 + } + right_sample { + s: 142.50818116054825 + width: 1.749641425550265 + } + right_sample { + s: 142.70714777636223 + width: 1.7496476888714456 + } + right_sample { + s: 142.90611439217625 + width: 1.7496539521927441 + } + right_sample { + s: 143.10508100799021 + width: 1.7496602155138028 + } + right_sample { + s: 143.30404762380422 + width: 1.7496664788351013 + } + right_sample { + s: 143.50301423961815 + width: 1.7496727421563443 + } + right_sample { + s: 143.70198085543225 + width: 1.7496790054774243 + } + right_sample { + s: 143.90094747124616 + width: 1.7496852687988036 + } + right_sample { + s: 144.09991408706026 + width: 1.7496915321198991 + } + right_sample { + s: 144.29888070287416 + width: 1.7496977954412036 + } + right_sample { + s: 144.49784731868809 + width: 1.7497040587625268 + } + right_sample { + s: 144.69681393450222 + width: 1.7497103220835832 + } + right_sample { + s: 144.89578055031623 + width: 1.7497165854049537 + } + right_sample { + s: 145.09474716613019 + width: 1.7497228487262257 + } + right_sample { + s: 145.29371378194418 + width: 1.7497291120473517 + } + right_sample { + s: 145.49268039775822 + width: 1.7497353753685934 + } + right_sample { + s: 145.69164701357218 + width: 1.7497416386898283 + } + right_sample { + s: 145.89061362938617 + width: 1.7497479020110285 + } + right_sample { + s: 146.08958024520015 + width: 1.7497541653322937 + } + right_sample { + s: 146.2885468610142 + width: 1.7497604286535788 + } + right_sample { + s: 146.48751347682824 + width: 1.7497666919748485 + } + right_sample { + s: 146.6864800926422 + width: 1.7497729552960832 + } + right_sample { + s: 146.88544670845624 + width: 1.7497792186172991 + } + right_sample { + s: 147.08441332427023 + width: 1.7497854819387064 + } + right_sample { + s: 147.28337994008416 + width: 1.7497917452599281 + } + right_sample { + s: 147.4823465558982 + width: 1.7497980085811107 + } + right_sample { + s: 147.68131317171219 + width: 1.7498042719022744 + } + right_sample { + s: 147.88027978752615 + width: 1.7498105352234692 + } + right_sample { + s: 148.07924640334028 + width: 1.7498167985447162 + } + right_sample { + s: 148.27821301915421 + width: 1.7498230618661583 + } + right_sample { + s: 148.47717963496819 + width: 1.7498293251872907 + } + right_sample { + s: 148.67614625078212 + width: 1.7498355885085106 + } + right_sample { + s: 148.87511286659617 + width: 1.7498418518297498 + } + right_sample { + s: 149.07407948241027 + width: 1.7498481151509391 + } + right_sample { + s: 149.2730460982242 + width: 1.7498543784720642 + } + right_sample { + s: 149.47201271403819 + width: 1.7498606417932008 + } + right_sample { + s: 149.67097932985217 + width: 1.7498669051144884 + } + right_sample { + s: 149.86994594566625 + width: 1.7498731684357609 + } + right_sample { + s: 150.06891256148012 + width: 1.7498794317569155 + } + right_sample { + s: 150.26787917729413 + width: 1.749885695078027 + } + right_sample { + s: 150.46684579310806 + width: 1.7498919583993295 + } + right_sample { + s: 150.66581240892205 + width: 1.7498982217205836 + } + right_sample { + s: 150.86477902473598 + width: 1.7499044850417922 + } + right_sample { + s: 151.06374564054997 + width: 1.7499107483627707 + } + right_sample { + s: 151.26271225636395 + width: 1.7499170116839913 + } + right_sample { + s: 151.46167887217788 + width: 1.7499232750052252 + } + right_sample { + s: 151.66064548799187 + width: 1.749929538326344 + } + right_sample { + s: 151.85961210380577 + width: 1.7499358016475619 + } + right_sample { + s: 152.0585787196197 + width: 1.7499420649687962 + } + right_sample { + s: 152.25754533543369 + width: 1.7499483282899493 + } + right_sample { + s: 152.45651195124751 + width: 1.7499545916111396 + } + right_sample { + s: 152.65547856706155 + width: 1.7499608549320564 + } + right_sample { + s: 152.85444518287542 + width: 1.7499671182533481 + } + right_sample { + s: 153.05341179868932 + width: 1.7499733815744833 + } + right_sample { + s: 153.25237841450328 + width: 1.7499796448954572 + } + right_sample { + s: 153.45134503031719 + width: 1.7499859082165838 + } + right_sample { + s: 153.65031164613103 + width: 1.7499921715377003 + } + right_sample { + s: 153.87421245705966 + width: 1.7499999965673967 + } +} +stop_sign { + id { + id: "2" + } + stop_line { + segment { + line_segment { + point { + x: 586365.90892295539 + y: 4140785.417460287 + } + point { + x: 586367.59595983266 + y: 4140784.9523852509 + } + point { + x: 586369.28299449442 + y: 4140784.4873108254 + } + } + } + } + overlap_id { + id: "1_-1_and_2" + } +} +overlap { + id { + id: "1_-1_and_2" + } + object { + id { + id: "1_-1" + } + lane_overlap_info { + start_s: 152.57964692253393 + end_s: 152.57964692253393 + } + } + object { + id { + id: "2" + } + } +} diff --git a/modules/map/data/demo/default_end_way_point.txt b/modules/map/data/demo/default_end_way_point.txt new file mode 100644 index 00000000000..a506b4f1dd2 --- /dev/null +++ b/modules/map/data/demo/default_end_way_point.txt @@ -0,0 +1,6 @@ +id: "1_-1" +s: 153.0 +pose { + x: 586367.706490 + y: 4140785.357946 +} diff --git a/modules/map/data/demo/garage_routing.pb.txt b/modules/map/data/demo/garage_routing.pb.txt new file mode 100644 index 00000000000..89826281e8d --- /dev/null +++ b/modules/map/data/demo/garage_routing.pb.txt @@ -0,0 +1,37 @@ +header { + module_name: "routing" + timestamp_sec: 1234.5 + sequence_num: 1 +} +routing_request { + start { + id: "1_-1" + s: 0.0 + pose { + x: 586392.840030 + y: 4140673.012320 + } + } + end { + id: "1_-1" + s: 153.0 + pose { + x: 586367.706490 + y: 4140785.357946 + } + } +} +route { + road_info { + passage_region { + segment { + id: "1_-1" + start_s: 0.0 + end_s: 153.0 + } + } + } +} +measurement { + distance: 153.0 +} diff --git a/modules/map/data/demo/routing_map.txt b/modules/map/data/demo/routing_map.txt new file mode 100755 index 00000000000..b897952f180 --- /dev/null +++ b/modules/map/data/demo/routing_map.txt @@ -0,0 +1,3147 @@ +hdmap_version: "03/10/17_22.46.20" +hdmap_district: "" +node { + lane_id: "1_-1" + length: 0 + cost: 0 + central_curve { + segment { + line_segment { + point { + x: 586392.84003 + y: 4140673.01232 + } + point { + x: 586392.64623335819 + y: 4140673.061791297 + } + point { + x: 586392.45243671641 + y: 4140673.1112625939 + } + point { + x: 586392.25864007475 + y: 4140673.1607338907 + } + point { + x: 586392.064843433 + y: 4140673.2102051876 + } + point { + x: 586391.8710467912 + y: 4140673.2596764839 + } + point { + x: 586391.67725014954 + y: 4140673.3091477808 + } + point { + x: 586391.48345350777 + y: 4140673.3586190776 + } + point { + x: 586391.289656866 + y: 4140673.4080903744 + } + point { + x: 586391.09586022433 + y: 4140673.4575616713 + } + point { + x: 586390.90206358256 + y: 4140673.5070329681 + } + point { + x: 586390.70826694078 + y: 4140673.5565042645 + } + point { + x: 586390.51447029912 + y: 4140673.6059755613 + } + point { + x: 586390.32067365735 + y: 4140673.6554468581 + } + point { + x: 586390.12687701569 + y: 4140673.704918155 + } + point { + x: 586389.93308037391 + y: 4140673.7543894518 + } + point { + x: 586389.73928373214 + y: 4140673.8038607487 + } + point { + x: 586389.54548709048 + y: 4140673.853332045 + } + point { + x: 586389.3516904487 + y: 4140673.9028033419 + } + point { + x: 586389.15789380693 + y: 4140673.9522746387 + } + point { + x: 586388.96409716527 + y: 4140674.0017459355 + } + point { + x: 586388.77030052349 + y: 4140674.0512172324 + } + point { + x: 586388.57650388172 + y: 4140674.1006885287 + } + point { + x: 586388.38270724006 + y: 4140674.1501598256 + } + point { + x: 586388.18891059828 + y: 4140674.1996311224 + } + point { + x: 586387.99511395651 + y: 4140674.2491024192 + } + point { + x: 586387.80131731485 + y: 4140674.2985737161 + } + point { + x: 586387.60752067307 + y: 4140674.3480450129 + } + point { + x: 586387.4137240313 + y: 4140674.3975163093 + } + point { + x: 586387.21992738964 + y: 4140674.4469876061 + } + point { + x: 586387.02613074786 + y: 4140674.496458903 + } + point { + x: 586386.83233410609 + y: 4140674.5459302 + } + point { + x: 586386.63853746443 + y: 4140674.5954014966 + } + point { + x: 586386.44474082266 + y: 4140674.6448727935 + } + point { + x: 586386.25094418088 + y: 4140674.69434409 + } + point { + x: 586386.05714753922 + y: 4140674.7438153867 + } + point { + x: 586385.86335089745 + y: 4140674.7932866835 + } + point { + x: 586385.66955425567 + y: 4140674.8427579803 + } + point { + x: 586385.475757614 + y: 4140674.8922292772 + } + point { + x: 586385.28196097224 + y: 4140674.941700574 + } + point { + x: 586385.08816433046 + y: 4140674.9911718704 + } + point { + x: 586384.8943676888 + y: 4140675.0406431672 + } + point { + x: 586384.700571047 + y: 4140675.0901144641 + } + point { + x: 586384.50677440525 + y: 4140675.1395857609 + } + point { + x: 586384.31297776359 + y: 4140675.1890570577 + } + point { + x: 586384.11918112182 + y: 4140675.2385283541 + } + point { + x: 586383.92538448 + y: 4140675.2879996509 + } + point { + x: 586383.73158783838 + y: 4140675.3374709478 + } + point { + x: 586383.53779119661 + y: 4140675.3869422446 + } + point { + x: 586383.34399455483 + y: 4140675.4364135414 + } + point { + x: 586383.15019791317 + y: 4140675.4858848383 + } + point { + x: 586382.9564012714 + y: 4140675.5353561346 + } + point { + x: 586382.76260462962 + y: 4140675.5848274315 + } + point { + x: 586382.568807988 + y: 4140675.6342987283 + } + point { + x: 586382.37501134619 + y: 4140675.6837700251 + } + point { + x: 586382.18121470441 + y: 4140675.733241322 + } + point { + x: 586381.98741806275 + y: 4140675.7827126188 + } + point { + x: 586381.793621421 + y: 4140675.8321839152 + } + point { + x: 586381.59982477932 + y: 4140675.881655212 + } + point { + x: 586381.40602813754 + y: 4140675.9311265089 + } + point { + x: 586381.21223149577 + y: 4140675.9805978057 + } + point { + x: 586381.01843485411 + y: 4140676.0300691025 + } + point { + x: 586380.82463821233 + y: 4140676.0795403994 + } + point { + x: 586380.63084157056 + y: 4140676.1290116957 + } + point { + x: 586380.4370449289 + y: 4140676.1784829926 + } + point { + x: 586380.24324828712 + y: 4140676.2279542894 + } + point { + x: 586380.04945164535 + y: 4140676.2774255862 + } + point { + x: 586379.85565500369 + y: 4140676.3268968831 + } + point { + x: 586379.66185836191 + y: 4140676.3763681795 + } + point { + x: 586379.46806172014 + y: 4140676.4258394763 + } + point { + x: 586379.27426507848 + y: 4140676.4753107731 + } + point { + x: 586379.0804684367 + y: 4140676.52478207 + } + point { + x: 586378.88667179493 + y: 4140676.5742533668 + } + point { + x: 586378.69287515327 + y: 4140676.6237246636 + } + point { + x: 586378.49907851149 + y: 4140676.67319596 + } + point { + x: 586378.30528186972 + y: 4140676.7226672568 + } + point { + x: 586378.11148522806 + y: 4140676.7721385537 + } + point { + x: 586377.91768858628 + y: 4140676.8216098505 + } + point { + x: 586377.72389194451 + y: 4140676.8710811473 + } + point { + x: 586377.53009530285 + y: 4140676.9205524442 + } + point { + x: 586377.33629866107 + y: 4140676.9700237405 + } + point { + x: 586377.1425020193 + y: 4140677.0194950374 + } + point { + x: 586376.94870537764 + y: 4140677.0689663342 + } + point { + x: 586376.75490873586 + y: 4140677.1184376311 + } + point { + x: 586376.56111209409 + y: 4140677.1679089279 + } + point { + x: 586376.36731545243 + y: 4140677.2173802247 + } + point { + x: 586376.17351881065 + y: 4140677.2668515211 + } + point { + x: 586375.97972216888 + y: 4140677.3163228179 + } + point { + x: 586375.78592552722 + y: 4140677.3657941148 + } + point { + x: 586375.59212888544 + y: 4140677.4152654116 + } + point { + x: 586375.39833224367 + y: 4140677.4647367084 + } + point { + x: 586375.204535602 + y: 4140677.5142080048 + } + point { + x: 586375.01073896023 + y: 4140677.5636793016 + } + point { + x: 586374.81694231846 + y: 4140677.6131505985 + } + point { + x: 586374.6231456768 + y: 4140677.6626218953 + } + point { + x: 586374.429349035 + y: 4140677.7120931922 + } + point { + x: 586374.23555239325 + y: 4140677.761564489 + } + point { + x: 586374.04175575159 + y: 4140677.8110357854 + } + point { + x: 586373.84795910981 + y: 4140677.8605070822 + } + point { + x: 586373.65416246816 + y: 4140677.909978379 + } + point { + x: 586373.46036582638 + y: 4140677.9594496759 + } + point { + x: 586373.26656918461 + y: 4140678.0089209727 + } + point { + x: 586373.072772543 + y: 4140678.0583922695 + } + point { + x: 586372.87897590117 + y: 4140678.1078635659 + } + point { + x: 586372.6851792594 + y: 4140678.1573348627 + } + point { + x: 586372.49138261774 + y: 4140678.2068061596 + } + point { + x: 586372.297585976 + y: 4140678.2562774564 + } + point { + x: 586372.10378933419 + y: 4140678.3057487532 + } + point { + x: 586371.90999269253 + y: 4140678.35522005 + } + point { + x: 586371.71619605075 + y: 4140678.4046913465 + } + point { + x: 586371.522399409 + y: 4140678.4541626433 + } + point { + x: 586371.32860276732 + y: 4140678.50363394 + } + point { + x: 586371.13480612554 + y: 4140678.553105237 + } + point { + x: 586370.94100948377 + y: 4140678.6025765338 + } + point { + x: 586370.74721284211 + y: 4140678.65204783 + } + point { + x: 586370.55341620033 + y: 4140678.701519127 + } + point { + x: 586370.35961955856 + y: 4140678.7509904238 + } + point { + x: 586370.1658229169 + y: 4140678.8004617207 + } + point { + x: 586369.97202627512 + y: 4140678.8499330175 + } + point { + x: 586369.77822963335 + y: 4140678.8994043143 + } + point { + x: 586369.58443299169 + y: 4140678.9488756107 + } + point { + x: 586369.39063634991 + y: 4140678.9983469076 + } + point { + x: 586369.19683970814 + y: 4140679.0478182044 + } + point { + x: 586369.00304306648 + y: 4140679.0972895012 + } + point { + x: 586368.8092464247 + y: 4140679.1467607981 + } + point { + x: 586368.61544978293 + y: 4140679.1962320949 + } + point { + x: 586368.42165314127 + y: 4140679.2457033913 + } + point { + x: 586368.22785649949 + y: 4140679.2951746881 + } + point { + x: 586368.03405985772 + y: 4140679.3446459849 + } + point { + x: 586367.840263216 + y: 4140679.3941172818 + } + point { + x: 586367.64646657428 + y: 4140679.4435885786 + } + point { + x: 586367.45266993251 + y: 4140679.493059875 + } + point { + x: 586367.25887329085 + y: 4140679.5425311718 + } + point { + x: 586367.06507664907 + y: 4140679.5920024686 + } + point { + x: 586366.8712800073 + y: 4140679.6414737655 + } + point { + x: 586366.67748336564 + y: 4140679.6909450623 + } + point { + x: 586366.48368672386 + y: 4140679.7404163592 + } + point { + x: 586366.28989008209 + y: 4140679.7898876555 + } + point { + x: 586366.09609344043 + y: 4140679.8393589524 + } + point { + x: 586365.90229679865 + y: 4140679.8888302492 + } + point { + x: 586365.708500157 + y: 4140679.938301546 + } + point { + x: 586365.51470351522 + y: 4140679.9877728429 + } + point { + x: 586365.32090687344 + y: 4140680.0372441397 + } + point { + x: 586365.12711023178 + y: 4140680.0867154361 + } + point { + x: 586364.93331359 + y: 4140680.1361867329 + } + point { + x: 586364.73951694823 + y: 4140680.1856580297 + } + point { + x: 586364.54572030657 + y: 4140680.2351293266 + } + point { + x: 586364.3519236648 + y: 4140680.2846006234 + } + point { + x: 586364.158127023 + y: 4140680.3340719203 + } + point { + x: 586363.96433038136 + y: 4140680.3835432166 + } + point { + x: 586363.77053373959 + y: 4140680.4330145135 + } + point { + x: 586363.57673709781 + y: 4140680.4824858103 + } + point { + x: 586363.38294045615 + y: 4140680.5319571071 + } + point { + x: 586363.18914381438 + y: 4140680.581428404 + } + point { + x: 586362.9953471726 + y: 4140680.6308997003 + } + point { + x: 586362.801550531 + y: 4140680.6803709972 + } + point { + x: 586362.60775388917 + y: 4140680.729842294 + } + point { + x: 586362.41395724739 + y: 4140680.7793135908 + } + point { + x: 586362.22016060574 + y: 4140680.8287848877 + } + point { + x: 586362.026363964 + y: 4140680.8782561845 + } + point { + x: 586361.83256732218 + y: 4140680.9277274809 + } + point { + x: 586361.63877068053 + y: 4140680.9771987777 + } + point { + x: 586361.44497403875 + y: 4140681.0266700746 + } + point { + x: 586361.251177397 + y: 4140681.0761413714 + } + point { + x: 586361.05738075532 + y: 4140681.1256126682 + } + point { + x: 586360.86358411354 + y: 4140681.1750839651 + } + point { + x: 586360.66978747176 + y: 4140681.2245552614 + } + point { + x: 586360.47599083011 + y: 4140681.2740265583 + } + point { + x: 586360.28219418833 + y: 4140681.3234978551 + } + point { + x: 586360.08839754655 + y: 4140681.3729691519 + } + point { + x: 586359.8946009049 + y: 4140681.4224404488 + } + point { + x: 586359.70080426312 + y: 4140681.4719117456 + } + point { + x: 586359.50700762135 + y: 4140681.521383042 + } + point { + x: 586359.31321097969 + y: 4140681.5708543388 + } + point { + x: 586359.11941433791 + y: 4140681.6203256357 + } + point { + x: 586358.92561769614 + y: 4140681.6697969325 + } + point { + x: 586358.73182105448 + y: 4140681.7192682293 + } + point { + x: 586358.5380244127 + y: 4140681.7687395257 + } + point { + x: 586358.34422777093 + y: 4140681.8182108225 + } + point { + x: 586358.15043112927 + y: 4140681.8676821194 + } + point { + x: 586357.95663448749 + y: 4140681.9171534162 + } + point { + x: 586357.76283784572 + y: 4140681.966624713 + } + point { + x: 586357.569041204 + y: 4140682.01609601 + } + point { + x: 586357.37524456228 + y: 4140682.0655673062 + } + point { + x: 586357.18144792062 + y: 4140682.1150386031 + } + point { + x: 586356.98765127885 + y: 4140682.1645099 + } + point { + x: 586356.79385463707 + y: 4140682.2139811967 + } + point { + x: 586356.60005799541 + y: 4140682.2634524936 + } + point { + x: 586356.40626135364 + y: 4140682.3129237904 + } + point { + x: 586356.21246471186 + y: 4140682.3623950868 + } + point { + x: 586356.0186680702 + y: 4140682.4118663836 + } + point { + x: 586355.82487142843 + y: 4140682.4613376805 + } + point { + x: 586355.63107478665 + y: 4140682.5108089773 + } + point { + x: 586355.437278145 + y: 4140682.5602802741 + } + point { + x: 586355.24348150322 + y: 4140682.609751571 + } + point { + x: 586355.04968486144 + y: 4140682.6592228673 + } + point { + x: 586354.85588821978 + y: 4140682.7086941642 + } + point { + x: 586354.662091578 + y: 4140682.758165461 + } + point { + x: 586354.46829493623 + y: 4140682.8076367578 + } + point { + x: 586354.27449829457 + y: 4140682.8571080547 + } + point { + x: 586354.0807016528 + y: 4140682.9065793511 + } + point { + x: 586353.886905011 + y: 4140682.9560506479 + } + point { + x: 586353.69310836936 + y: 4140683.0055219447 + } + point { + x: 586353.49931172759 + y: 4140683.0549932416 + } + point { + x: 586353.30551508581 + y: 4140683.1044645384 + } + point { + x: 586353.11171844415 + y: 4140683.1539358352 + } + point { + x: 586352.91792180238 + y: 4140683.2034071316 + } + point { + x: 586352.7241251606 + y: 4140683.2528784284 + } + point { + x: 586352.530328519 + y: 4140683.3023497253 + } + point { + x: 586352.33653187717 + y: 4140683.3518210221 + } + point { + x: 586352.14273523539 + y: 4140683.4012923189 + } + point { + x: 586351.94893859373 + y: 4140683.4507636158 + } + point { + x: 586351.755141952 + y: 4140683.5002349121 + } + point { + x: 586351.56134531018 + y: 4140683.549706209 + } + point { + x: 586351.36754866852 + y: 4140683.5991775058 + } + point { + x: 586351.17375202675 + y: 4140683.6486488027 + } + point { + x: 586350.979955385 + y: 4140683.6981200995 + } + point { + x: 586350.78615874331 + y: 4140683.7475913963 + } + point { + x: 586350.59236210154 + y: 4140683.7970626927 + } + point { + x: 586350.39856545976 + y: 4140683.8465339895 + } + point { + x: 586350.2047688181 + y: 4140683.8960052864 + } + point { + x: 586350.01097217633 + y: 4140683.9454765832 + } + point { + x: 586349.81717553455 + y: 4140683.99494788 + } + point { + x: 586349.62337889289 + y: 4140684.0444191764 + } + point { + x: 586349.42958225112 + y: 4140684.0938904732 + } + point { + x: 586349.23578560946 + y: 4140684.14336177 + } + point { + x: 586349.04198896769 + y: 4140684.1928330669 + } + point { + x: 586348.84819232591 + y: 4140684.2423043638 + } + point { + x: 586348.65439568425 + y: 4140684.2917756606 + } + point { + x: 586348.46059904248 + y: 4140684.341246957 + } + point { + x: 586348.2668024007 + y: 4140684.3907182538 + } + point { + x: 586348.073005759 + y: 4140684.4401895506 + } + point { + x: 586347.87665356509 + y: 4140684.4903132142 + } + point { + x: 586347.72302824655 + y: 4140684.5736279017 + } + point { + x: 586347.569402928 + y: 4140684.6569425897 + } + point { + x: 586347.41577760945 + y: 4140684.7402572772 + } + point { + x: 586347.2621522909 + y: 4140684.8235719651 + } + point { + x: 586347.10852697236 + y: 4140684.906886653 + } + point { + x: 586346.95490165381 + y: 4140684.9902013405 + } + point { + x: 586346.80127633526 + y: 4140685.0735160285 + } + point { + x: 586346.64765101671 + y: 4140685.1568307159 + } + point { + x: 586346.49402569816 + y: 4140685.2401454039 + } + point { + x: 586346.34040037962 + y: 4140685.3234600914 + } + point { + x: 586346.18677506107 + y: 4140685.4067747793 + } + point { + x: 586346.03314974252 + y: 4140685.4900894668 + } + point { + x: 586345.879524424 + y: 4140685.5734041547 + } + point { + x: 586345.68815281987 + y: 4140685.6762909689 + } + point { + x: 586345.56125069747 + y: 4140685.7897441746 + } + point { + x: 586345.43434857507 + y: 4140685.9031973807 + } + point { + x: 586345.30744645279 + y: 4140686.0166505864 + } + point { + x: 586345.18054433039 + y: 4140686.1301037921 + } + point { + x: 586345.053642208 + y: 4140686.2435569977 + } + point { + x: 586344.92674008559 + y: 4140686.3570102039 + } + point { + x: 586344.79983796331 + y: 4140686.4704634096 + } + point { + x: 586344.67293584091 + y: 4140686.5839166152 + } + point { + x: 586344.54603371851 + y: 4140686.6973698214 + } + point { + x: 586344.41913159611 + y: 4140686.810823027 + } + point { + x: 586344.29222947382 + y: 4140686.9242762327 + } + point { + x: 586344.16532735142 + y: 4140687.0377294389 + } + point { + x: 586344.02943487035 + y: 4140687.1588886632 + } + point { + x: 586343.95230469562 + y: 4140687.3011883148 + } + point { + x: 586343.875174521 + y: 4140687.4434879669 + } + point { + x: 586343.79804434627 + y: 4140687.5857876185 + } + point { + x: 586343.72091417166 + y: 4140687.7280872706 + } + point { + x: 586343.643783997 + y: 4140687.8703869223 + } + point { + x: 586343.56665382232 + y: 4140688.0126865744 + } + point { + x: 586343.4895236477 + y: 4140688.154986226 + } + point { + x: 586343.41239347309 + y: 4140688.2972858781 + } + point { + x: 586343.33526329836 + y: 4140688.43958553 + } + point { + x: 586343.25813312375 + y: 4140688.5818851818 + } + point { + x: 586343.18100294913 + y: 4140688.7241848339 + } + point { + x: 586343.1038727744 + y: 4140688.8664844856 + } + point { + x: 586343.02674259979 + y: 4140689.0087841377 + } + point { + x: 586342.949612425 + y: 4140689.1510837893 + } + point { + x: 586342.87831022893 + y: 4140689.2835487211 + } + point { + x: 586342.83490688 + y: 4140689.431658647 + } + point { + x: 586342.79150353116 + y: 4140689.5797685729 + } + point { + x: 586342.74810018227 + y: 4140689.7278784988 + } + point { + x: 586342.70469683339 + y: 4140689.8759884248 + } + point { + x: 586342.6612934845 + y: 4140690.0240983507 + } + point { + x: 586342.61789013562 + y: 4140690.1722082766 + } + point { + x: 586342.55869757663 + y: 4140690.3676857753 + } + point { + x: 586342.55811543646 + y: 4140690.5261298358 + } + point { + x: 586342.55753329629 + y: 4140690.6845738962 + } + point { + x: 586342.55695115612 + y: 4140690.8430179567 + } + point { + x: 586342.556369016 + y: 4140691.0014620177 + } + point { + x: 586342.55578687578 + y: 4140691.1599060781 + } + point { + x: 586342.5552047356 + y: 4140691.3183501386 + } + point { + x: 586342.55462259543 + y: 4140691.4767941991 + } + point { + x: 586342.55404045526 + y: 4140691.6352382596 + } + point { + x: 586342.55345831509 + y: 4140691.7936823205 + } + point { + x: 586342.55287617492 + y: 4140691.952126381 + } + point { + x: 586342.55229403474 + y: 4140692.1105704415 + } + point { + x: 586342.55224384693 + y: 4140692.2557157562 + } + point { + x: 586342.58864930947 + y: 4140692.4516071687 + } + point { + x: 586342.62582384958 + y: 4140692.6473087566 + } + point { + x: 586342.6637494904 + y: 4140692.8428249569 + } + point { + x: 586342.70240825508 + y: 4140693.0381602072 + } + point { + x: 586342.74178216688 + y: 4140693.233318944 + } + point { + x: 586342.78185324883 + y: 4140693.4283056054 + } + point { + x: 586342.82260352431 + y: 4140693.6231246274 + } + point { + x: 586342.86401501624 + y: 4140693.8177804481 + } + point { + x: 586342.906069748 + y: 4140694.012277504 + } + point { + x: 586342.9487497427 + y: 4140694.2066202327 + } + point { + x: 586342.99203702353 + y: 4140694.4008130711 + } + point { + x: 586343.03591361351 + y: 4140694.5948604564 + } + point { + x: 586343.080361536 + y: 4140694.788766826 + } + point { + x: 586343.125362814 + y: 4140694.9825366167 + } + point { + x: 586343.17089947092 + y: 4140695.1761742658 + } + point { + x: 586343.21695352974 + y: 4140695.3696842105 + } + point { + x: 586343.26350701367 + y: 4140695.5630708882 + } + point { + x: 586343.310541946 + y: 4140695.7563387351 + } + point { + x: 586343.35804034967 + y: 4140695.9494921896 + } + point { + x: 586343.405984248 + y: 4140696.1425356879 + } + point { + x: 586343.4543556642 + y: 4140696.3354736678 + } + point { + x: 586343.50313662132 + y: 4140696.5283105657 + } + point { + x: 586343.55230914254 + y: 4140696.72105082 + } + point { + x: 586343.60185525124 + y: 4140696.9136988665 + } + point { + x: 586343.65175697033 + y: 4140697.106259143 + } + point { + x: 586343.70199632307 + y: 4140697.2987360866 + } + point { + x: 586343.75255533273 + y: 4140697.4911341346 + } + point { + x: 586343.80341602233 + y: 4140697.6834577238 + } + point { + x: 586343.85456041514 + y: 4140697.8757112916 + } + point { + x: 586343.90597053431 + y: 4140698.0678992751 + } + point { + x: 586343.957628403 + y: 4140698.2600261113 + } + point { + x: 586344.00951604429 + y: 4140698.4520962378 + } + point { + x: 586344.06161548162 + y: 4140698.6441140915 + } + point { + x: 586344.1139087379 + y: 4140698.8360841093 + } + point { + x: 586344.16637783637 + y: 4140699.0280107288 + } + point { + x: 586344.21900480019 + y: 4140699.2198983864 + } + point { + x: 586344.27177165262 + y: 4140699.4117515204 + } + point { + x: 586344.32466041681 + y: 4140699.603574567 + } + point { + x: 586344.37765311578 + y: 4140699.7953719636 + } + point { + x: 586344.43073177291 + y: 4140699.9871481475 + } + point { + x: 586344.48387841124 + y: 4140700.178907556 + } + point { + x: 586344.537075054 + y: 4140700.3706546258 + } + point { + x: 586344.5903037244 + y: 4140700.5623937948 + } + point { + x: 586344.64354644541 + y: 4140700.7541294992 + } + point { + x: 586344.69678524043 + y: 4140700.9458661764 + } + point { + x: 586344.75000213261 + y: 4140701.1376082641 + } + point { + x: 586344.803179145 + y: 4140701.3293601992 + } + point { + x: 586344.85629830079 + y: 4140701.5211264188 + } + point { + x: 586344.90934162575 + y: 4140701.712911359 + } + point { + x: 586344.962295973 + y: 4140701.904718264 + } + point { + x: 586345.01516315481 + y: 4140702.0965466872 + } + point { + x: 586345.06794787524 + y: 4140702.2883954686 + } + point { + x: 586345.12065483863 + y: 4140702.4802634497 + } + point { + x: 586345.17328874918 + y: 4140702.6721494715 + } + point { + x: 586345.225854311 + y: 4140702.8640523739 + } + point { + x: 586345.27835622861 + y: 4140703.0559709989 + } + point { + x: 586345.33079920616 + y: 4140703.2479041861 + } + point { + x: 586345.38318794768 + y: 4140703.4398507774 + } + point { + x: 586345.43552715762 + y: 4140703.6318096132 + } + point { + x: 586345.4878215401 + y: 4140703.8237795341 + } + point { + x: 586345.54007579945 + y: 4140704.015759381 + } + point { + x: 586345.59229463991 + y: 4140704.2077479949 + } + point { + x: 586345.64448276558 + y: 4140704.3997442168 + } + point { + x: 586345.69664488069 + y: 4140704.5917468872 + } + point { + x: 586345.74878568971 + y: 4140704.783754847 + } + point { + x: 586345.80090989673 + y: 4140704.9757669368 + } + point { + x: 586345.85302220588 + y: 4140705.1677819979 + } + point { + x: 586345.9051273216 + y: 4140705.359798871 + } + point { + x: 586345.9572299479 + y: 4140705.5518163969 + } + point { + x: 586346.00933478924 + y: 4140705.7438334161 + } + point { + x: 586346.06144654984 + y: 4140705.9358487697 + } + point { + x: 586346.11356993369 + y: 4140706.1278612986 + } + point { + x: 586346.16570964537 + y: 4140706.3198698433 + } + point { + x: 586346.21787014115 + y: 4140706.5118733062 + } + point { + x: 586346.27005260717 + y: 4140706.703871395 + } + point { + x: 586346.32225591119 + y: 4140706.895864387 + } + point { + x: 586346.37447887147 + y: 4140707.0878525707 + } + point { + x: 586346.42672030639 + y: 4140707.2798362356 + } + point { + x: 586346.47897903423 + y: 4140707.4718156708 + } + point { + x: 586346.53125387337 + y: 4140707.6637911657 + } + point { + x: 586346.58354364219 + y: 4140707.8557630088 + } + point { + x: 586346.635847159 + y: 4140708.0477314894 + } + point { + x: 586346.68816324219 + y: 4140708.2396968966 + } + point { + x: 586346.7404907099 + y: 4140708.4316595197 + } + point { + x: 586346.79282838071 + y: 4140708.6236196477 + } + point { + x: 586346.8451750729 + y: 4140708.81557757 + } + point { + x: 586346.89752960461 + y: 4140709.0075335749 + } + point { + x: 586346.94989079447 + y: 4140709.1994879525 + } + point { + x: 586347.00225746073 + y: 4140709.3914409908 + } + point { + x: 586347.05462842155 + y: 4140709.58339298 + } + point { + x: 586347.10700249544 + y: 4140709.7753442088 + } + point { + x: 586347.15937850077 + y: 4140709.9672949663 + } + point { + x: 586347.2117552557 + y: 4140710.1592455413 + } + point { + x: 586347.26413157873 + y: 4140710.3511962229 + } + point { + x: 586347.31650628825 + y: 4140710.5431473008 + } + point { + x: 586347.3688782024 + y: 4140710.7350990642 + } + point { + x: 586347.42124613957 + y: 4140710.9270518012 + } + point { + x: 586347.47360891965 + y: 4140711.1190058012 + } + point { + x: 586347.52596576326 + y: 4140711.3109612544 + } + point { + x: 586347.578316848 + y: 4140711.5029181172 + } + point { + x: 586347.630662492 + y: 4140711.6948763118 + } + point { + x: 586347.68300301337 + y: 4140711.88683576 + } + point { + x: 586347.73533873016 + y: 4140712.0787963839 + } + point { + x: 586347.78766996029 + y: 4140712.2707581059 + } + point { + x: 586347.83999702206 + y: 4140712.4627208482 + } + point { + x: 586347.8923202334 + y: 4140712.6546845324 + } + point { + x: 586347.94463991246 + y: 4140712.8466490814 + } + point { + x: 586347.99695637717 + y: 4140713.038614417 + } + point { + x: 586348.04926994583 + y: 4140713.2305804612 + } + point { + x: 586348.10158093623 + y: 4140713.4225471364 + } + point { + x: 586348.15388966666 + y: 4140713.6145143644 + } + point { + x: 586348.206196455 + y: 4140713.8064820678 + } + point { + x: 586348.25850161957 + y: 4140713.9984501684 + } + point { + x: 586348.31080547825 + y: 4140714.1904185885 + } + point { + x: 586348.36310834915 + y: 4140714.38238725 + } + point { + x: 586348.41541055043 + y: 4140714.5743560754 + } + point { + x: 586348.4677124 + y: 4140714.7663249867 + } + point { + x: 586348.52001421608 + y: 4140714.9582939059 + } + point { + x: 586348.57231631654 + y: 4140715.1502627553 + } + point { + x: 586348.62461901968 + y: 4140715.3422314571 + } + point { + x: 586348.67692264344 + y: 4140715.5341999331 + } + point { + x: 586348.729227506 + y: 4140715.7261681054 + } + point { + x: 586348.78153390007 + y: 4140715.9181359028 + } + point { + x: 586348.83384187729 + y: 4140716.1101033129 + } + point { + x: 586348.886151354 + y: 4140716.302070356 + } + point { + x: 586348.9384622447 + y: 4140716.4940370526 + } + point { + x: 586348.9907744641 + y: 4140716.6860034242 + } + point { + x: 586349.04308792681 + y: 4140716.8779694913 + } + point { + x: 586349.09540254751 + y: 4140717.0699352748 + } + point { + x: 586349.147718241 + y: 4140717.2619007961 + } + point { + x: 586349.20003492164 + y: 4140717.4538660757 + } + point { + x: 586349.25235250441 + y: 4140717.6458311342 + } + point { + x: 586349.30467090383 + y: 4140717.8377959928 + } + point { + x: 586349.35699003458 + y: 4140718.0297606727 + } + point { + x: 586349.40930981131 + y: 4140718.2217251947 + } + point { + x: 586349.4616301487 + y: 4140718.4136895789 + } + point { + x: 586349.51395096141 + y: 4140718.6056538471 + } + point { + x: 586349.566272164 + y: 4140718.79761802 + } + point { + x: 586349.61859367124 + y: 4140718.9895821181 + } + point { + x: 586349.67091539782 + y: 4140719.1815461628 + } + point { + x: 586349.72323725838 + y: 4140719.3735101745 + } + point { + x: 586349.77555916749 + y: 4140719.5654741745 + } + point { + x: 586349.82788103994 + y: 4140719.7574381833 + } + point { + x: 586349.88020279026 + y: 4140719.9494022224 + } + point { + x: 586349.93252433313 + y: 4140720.1413663123 + } + point { + x: 586349.98484558333 + y: 4140720.3333304734 + } + point { + x: 586350.03716645588 + y: 4140720.5252947276 + } + point { + x: 586350.0894869006 + y: 4140720.7172590862 + } + point { + x: 586350.14180693333 + y: 4140720.9092235458 + } + point { + x: 586350.19412657677 + y: 4140721.1011881009 + } + point { + x: 586350.24644585385 + y: 4140721.2931527453 + } + point { + x: 586350.2987647875 + y: 4140721.4851174741 + } + point { + x: 586350.35108340043 + y: 4140721.6770822811 + } + point { + x: 586350.40340171556 + y: 4140721.8690471612 + } + point { + x: 586350.45571975573 + y: 4140722.0610121083 + } + point { + x: 586350.508037544 + y: 4140722.2529771174 + } + point { + x: 586350.56035510288 + y: 4140722.4449421824 + } + point { + x: 586350.61267245549 + y: 4140722.6369072981 + } + point { + x: 586350.66498962464 + y: 4140722.8288724585 + } + point { + x: 586350.71730663325 + y: 4140723.0208376581 + } + point { + x: 586350.769623504 + y: 4140723.2128028916 + } + point { + x: 586350.82194026 + y: 4140723.4047681531 + } + point { + x: 586350.87425692391 + y: 4140723.5967334374 + } + point { + x: 586350.92657351855 + y: 4140723.7886987384 + } + point { + x: 586350.97889006708 + y: 4140723.9806640507 + } + point { + x: 586351.031206592 + y: 4140724.172629369 + } + point { + x: 586351.08352311642 + y: 4140724.3645946868 + } + point { + x: 586351.13583966321 + y: 4140724.5565599995 + } + point { + x: 586351.188156255 + y: 4140724.7485253015 + } + point { + x: 586351.24047291488 + y: 4140724.9404905862 + } + point { + x: 586351.29278966563 + y: 4140725.1324558491 + } + point { + x: 586351.34510652756 + y: 4140725.3244210845 + } + point { + x: 586351.39742350264 + y: 4140725.5163862924 + } + point { + x: 586351.44974058494 + y: 4140725.7083514738 + } + point { + x: 586351.502057768 + y: 4140725.9003166305 + } + point { + x: 586351.554375046 + y: 4140726.0922817644 + } + point { + x: 586351.60669241275 + y: 4140726.2842468764 + } + point { + x: 586351.659009862 + y: 4140726.4762119679 + } + point { + x: 586351.71132738772 + y: 4140726.6681770408 + } + point { + x: 586351.76364498376 + y: 4140726.8601420969 + } + point { + x: 586351.81596264406 + y: 4140727.0521071367 + } + point { + x: 586351.86828036245 + y: 4140727.2440721625 + } + point { + x: 586351.92059813277 + y: 4140727.4360371758 + } + point { + x: 586351.97291594883 + y: 4140727.6280021779 + } + point { + x: 586352.02523380471 + y: 4140727.8199671702 + } + point { + x: 586352.07755169412 + y: 4140728.0119321542 + } + point { + x: 586352.129869611 + y: 4140728.2038971311 + } + point { + x: 586352.18218754919 + y: 4140728.3958621034 + } + point { + x: 586352.23450550251 + y: 4140728.587827072 + } + point { + x: 586352.286823465 + y: 4140728.7797920378 + } + point { + x: 586352.33914143045 + y: 4140728.9717570036 + } + point { + x: 586352.39145939262 + y: 4140729.1637219694 + } + point { + x: 586352.44377734559 + y: 4140729.3556869379 + } + point { + x: 586352.49609528307 + y: 4140729.54765191 + } + point { + x: 586352.548413199 + y: 4140729.7396168881 + } + point { + x: 586352.60073108738 + y: 4140729.931581872 + } + point { + x: 586352.65304894489 + y: 4140730.1235468639 + } + point { + x: 586352.70536677307 + y: 4140730.3155118632 + } + point { + x: 586352.75768457341 + y: 4140730.507476869 + } + point { + x: 586352.81000234769 + y: 4140730.6994418814 + } + point { + x: 586352.86232009728 + y: 4140730.8914068993 + } + point { + x: 586352.914637824 + y: 4140731.0833719233 + } + point { + x: 586352.96695552964 + y: 4140731.2753369524 + } + point { + x: 586353.01927321567 + y: 4140731.4673019862 + } + point { + x: 586353.07159088366 + y: 4140731.6592670246 + } + point { + x: 586353.12390853534 + y: 4140731.8512320668 + } + point { + x: 586353.17622617236 + y: 4140732.0431971126 + } + point { + x: 586353.22854379634 + y: 4140732.2351621618 + } + point { + x: 586353.280861409 + y: 4140732.4271272132 + } + point { + x: 586353.33317901182 + y: 4140732.6190922675 + } + point { + x: 586353.38549660658 + y: 4140732.8110573236 + } + point { + x: 586353.437814195 + y: 4140733.0030223816 + } + point { + x: 586353.49013177841 + y: 4140733.1949874405 + } + point { + x: 586353.54244935873 + y: 4140733.3869525003 + } + point { + x: 586353.59476693755 + y: 4140733.57891756 + } + point { + x: 586353.64708451636 + y: 4140733.7708826205 + } + point { + x: 586353.69940209691 + y: 4140733.96284768 + } + point { + x: 586353.751719681 + y: 4140734.1548127388 + } + point { + x: 586353.80403727 + y: 4140734.3467777963 + } + point { + x: 586353.85635486571 + y: 4140734.5387428524 + } + point { + x: 586353.90867246944 + y: 4140734.7307079062 + } + point { + x: 586353.96099008131 + y: 4140734.9226729581 + } + point { + x: 586354.01330770075 + y: 4140735.1146380082 + } + point { + x: 586354.06562532741 + y: 4140735.3066030564 + } + point { + x: 586354.11794296093 + y: 4140735.4985681032 + } + point { + x: 586354.17026060075 + y: 4140735.6905331486 + } + point { + x: 586354.22257824638 + y: 4140735.8824981921 + } + point { + x: 586354.2748958976 + y: 4140736.0744632343 + } + point { + x: 586354.32721355371 + y: 4140736.2664282755 + } + point { + x: 586354.37953121448 + y: 4140736.4583933158 + } + point { + x: 586354.43184887932 + y: 4140736.6503583547 + } + point { + x: 586354.48416654789 + y: 4140736.8423233926 + } + point { + x: 586354.5364842196 + y: 4140737.03428843 + } + point { + x: 586354.58880189422 + y: 4140737.2262534667 + } + point { + x: 586354.64111957117 + y: 4140737.4182185028 + } + point { + x: 586354.6934372501 + y: 4140737.6101835384 + } + point { + x: 586354.74575493054 + y: 4140737.8021485736 + } + point { + x: 586354.798072612 + y: 4140737.9941136083 + } + point { + x: 586354.8503902941 + y: 4140738.186078643 + } + point { + x: 586354.90270797629 + y: 4140738.3780436781 + } + point { + x: 586354.95502565836 + y: 4140738.5700087128 + } + point { + x: 586355.00734333962 + y: 4140738.7619737475 + } + point { + x: 586355.05966101971 + y: 4140738.9539387831 + } + point { + x: 586355.11197869829 + y: 4140739.1459038188 + } + point { + x: 586355.16429637477 + y: 4140739.3378688549 + } + point { + x: 586355.216614049 + y: 4140739.5298338914 + } + point { + x: 586355.26893172134 + y: 4140739.7217989285 + } + point { + x: 586355.32124939153 + y: 4140739.9137639664 + } + point { + x: 586355.37356705987 + y: 4140740.1057290044 + } + point { + x: 586355.42588472646 + y: 4140740.2976940433 + } + point { + x: 586355.47820239153 + y: 4140740.4896590821 + } + point { + x: 586355.530520055 + y: 4140740.6816241215 + } + point { + x: 586355.582837717 + y: 4140740.8735891613 + } + point { + x: 586355.63515537779 + y: 4140741.0655542011 + } + point { + x: 586355.6874730374 + y: 4140741.2575192414 + } + point { + x: 586355.73979069607 + y: 4140741.4494842817 + } + point { + x: 586355.79210835369 + y: 4140741.6414493229 + } + point { + x: 586355.8444260105 + y: 4140741.8334143637 + } + point { + x: 586355.89674366673 + y: 4140742.0253794049 + } + point { + x: 586355.94906132226 + y: 4140742.2173444461 + } + point { + x: 586356.00137897744 + y: 4140742.4093094873 + } + point { + x: 586356.05369663227 + y: 4140742.601274529 + } + point { + x: 586356.10601428687 + y: 4140742.79323957 + } + point { + x: 586356.15833194135 + y: 4140742.9852046119 + } + point { + x: 586356.21064959583 + y: 4140743.1771696536 + } + point { + x: 586356.26296725043 + y: 4140743.3691346953 + } + point { + x: 586356.31528490537 + y: 4140743.5610997365 + } + point { + x: 586356.36760256067 + y: 4140743.7530647777 + } + point { + x: 586356.41992021643 + y: 4140743.9450298189 + } + point { + x: 586356.47223787266 + y: 4140744.13699486 + } + point { + x: 586356.52455552958 + y: 4140744.3289599009 + } + point { + x: 586356.57687318709 + y: 4140744.5209249421 + } + point { + x: 586356.62919084507 + y: 4140744.7128899824 + } + point { + x: 586356.68150850351 + y: 4140744.9048550231 + } + point { + x: 586356.73382616241 + y: 4140745.0968200634 + } + point { + x: 586356.78614382178 + y: 4140745.2887851042 + } + point { + x: 586356.8384614815 + y: 4140745.4807501445 + } + point { + x: 586356.89077914157 + y: 4140745.6727151843 + } + point { + x: 586356.943096802 + y: 4140745.8646802246 + } + point { + x: 586356.99541446264 + y: 4140746.0566452644 + } + point { + x: 586357.04773212364 + y: 4140746.2486103047 + } + point { + x: 586357.10004978476 + y: 4140746.4405753445 + } + point { + x: 586357.15236744622 + y: 4140746.6325403843 + } + point { + x: 586357.20468510769 + y: 4140746.8245054241 + } + point { + x: 586357.25700276939 + y: 4140747.0164704639 + } + point { + x: 586357.3093204312 + y: 4140747.2084355038 + } + point { + x: 586357.36163809313 + y: 4140747.4004005436 + } + point { + x: 586357.413955755 + y: 4140747.5923655829 + } + point { + x: 586357.46627341688 + y: 4140747.7843306228 + } + point { + x: 586357.51859107881 + y: 4140747.9762956626 + } + point { + x: 586357.57090874063 + y: 4140748.1682607024 + } + point { + x: 586357.62322640244 + y: 4140748.3602257422 + } + point { + x: 586357.675544064 + y: 4140748.552190782 + } + point { + x: 586357.72786172561 + y: 4140748.7441558219 + } + point { + x: 586357.78017938684 + y: 4140748.9361208617 + } + point { + x: 586357.83249704808 + y: 4140749.1280859015 + } + point { + x: 586357.88481470908 + y: 4140749.3200509413 + } + point { + x: 586357.93713237008 + y: 4140749.5120159811 + } + point { + x: 586357.98945003084 + y: 4140749.7039810214 + } + point { + x: 586358.04176769149 + y: 4140749.8959460612 + } + point { + x: 586358.094085352 + y: 4140750.0879111015 + } + point { + x: 586358.14640301256 + y: 4140750.2798761413 + } + point { + x: 586358.19872067287 + y: 4140750.4718411816 + } + point { + x: 586358.25103833317 + y: 4140750.6638062219 + } + point { + x: 586358.30335599335 + y: 4140750.8557712617 + } + point { + x: 586358.35567365354 + y: 4140751.047736302 + } + point { + x: 586358.40799131361 + y: 4140751.2397013423 + } + point { + x: 586358.46030897368 + y: 4140751.4316663826 + } + point { + x: 586358.51262663363 + y: 4140751.6236314224 + } + point { + x: 586358.5649442937 + y: 4140751.8155964627 + } + point { + x: 586358.61726195365 + y: 4140752.007561503 + } + point { + x: 586358.66957961349 + y: 4140752.1995265433 + } + point { + x: 586358.72189727344 + y: 4140752.3914915835 + } + point { + x: 586358.77421493339 + y: 4140752.5834566238 + } + point { + x: 586358.82653259335 + y: 4140752.7754216637 + } + point { + x: 586358.8788502533 + y: 4140752.9673867039 + } + point { + x: 586358.93116791325 + y: 4140753.1593517442 + } + point { + x: 586358.98348557332 + y: 4140753.3513167845 + } + point { + x: 586359.03580323339 + y: 4140753.5432818248 + } + point { + x: 586359.08812089346 + y: 4140753.7352468646 + } + point { + x: 586359.14043855364 + y: 4140753.9272119049 + } + point { + x: 586359.19275621383 + y: 4140754.1191769452 + } + point { + x: 586359.245073874 + y: 4140754.3111419855 + } + point { + x: 586359.2973915342 + y: 4140754.5031070253 + } + point { + x: 586359.3497091945 + y: 4140754.6950720656 + } + point { + x: 586359.4020268548 + y: 4140754.8870371059 + } + point { + x: 586359.45434451511 + y: 4140755.0790021457 + } + point { + x: 586359.50666217552 + y: 4140755.270967186 + } + point { + x: 586359.55897983583 + y: 4140755.4629322258 + } + point { + x: 586359.61129749625 + y: 4140755.6548972661 + } + point { + x: 586359.66361515666 + y: 4140755.8468623064 + } + point { + x: 586359.71593281708 + y: 4140756.0388273462 + } + point { + x: 586359.7682504775 + y: 4140756.2307923865 + } + point { + x: 586359.820568138 + y: 4140756.4227574263 + } + point { + x: 586359.87288579845 + y: 4140756.6147224666 + } + point { + x: 586359.92520345887 + y: 4140756.8066875064 + } + point { + x: 586359.97752111929 + y: 4140756.9986525467 + } + point { + x: 586360.02983877982 + y: 4140757.190617587 + } + point { + x: 586360.08215644024 + y: 4140757.3825826268 + } + point { + x: 586360.13447410066 + y: 4140757.5745476671 + } + point { + x: 586360.1867917612 + y: 4140757.7665127069 + } + point { + x: 586360.23910942161 + y: 4140757.9584777472 + } + point { + x: 586360.291427082 + y: 4140758.150442787 + } + point { + x: 586360.34374474245 + y: 4140758.3424078273 + } + point { + x: 586360.39606240287 + y: 4140758.5343728676 + } + point { + x: 586360.44838006329 + y: 4140758.7263379074 + } + point { + x: 586360.50069772359 + y: 4140758.9183029477 + } + point { + x: 586360.553015384 + y: 4140759.1102679875 + } + point { + x: 586360.60533304443 + y: 4140759.3022330278 + } + point { + x: 586360.65765070473 + y: 4140759.494198068 + } + point { + x: 586360.70996836515 + y: 4140759.6861631079 + } + point { + x: 586360.76228602545 + y: 4140759.8781281481 + } + point { + x: 586360.81460368575 + y: 4140760.0700931884 + } + point { + x: 586360.86692134617 + y: 4140760.2620582283 + } + point { + x: 586360.91923900647 + y: 4140760.4540232685 + } + point { + x: 586360.97155666677 + y: 4140760.6459883084 + } + point { + x: 586361.02387432707 + y: 4140760.8379533486 + } + point { + x: 586361.07619198749 + y: 4140761.0299183889 + } + point { + x: 586361.12850964779 + y: 4140761.2218834287 + } + point { + x: 586361.1808273081 + y: 4140761.413848469 + } + point { + x: 586361.2331449684 + y: 4140761.6058135093 + } + point { + x: 586361.2854626287 + y: 4140761.7977785491 + } + point { + x: 586361.337780289 + y: 4140761.9897435894 + } + point { + x: 586361.3900979493 + y: 4140762.1817086297 + } + point { + x: 586361.44241560972 + y: 4140762.3736736695 + } + point { + x: 586361.49473327 + y: 4140762.56563871 + } + point { + x: 586361.54705093033 + y: 4140762.7576037496 + } + point { + x: 586361.59936859063 + y: 4140762.94956879 + } + point { + x: 586361.65168625093 + y: 4140763.14153383 + } + point { + x: 586361.70400391135 + y: 4140763.33349887 + } + point { + x: 586361.75632157165 + y: 4140763.5254639103 + } + point { + x: 586361.808639232 + y: 4140763.7174289506 + } + point { + x: 586361.86095689237 + y: 4140763.9093939904 + } + point { + x: 586361.91327455267 + y: 4140764.1013590307 + } + point { + x: 586361.965592213 + y: 4140764.2933240705 + } + point { + x: 586362.01790987339 + y: 4140764.4852891108 + } + point { + x: 586362.0702275337 + y: 4140764.6772541511 + } + point { + x: 586362.122545194 + y: 4140764.8692191909 + } + point { + x: 586362.17486285442 + y: 4140765.0611842312 + } + point { + x: 586362.22718051472 + y: 4140765.2531492715 + } + point { + x: 586362.27949817514 + y: 4140765.4451143113 + } + point { + x: 586362.33181583544 + y: 4140765.6370793516 + } + point { + x: 586362.38413349586 + y: 4140765.8290443914 + } + point { + x: 586362.43645115616 + y: 4140766.0210094317 + } + point { + x: 586362.48876881658 + y: 4140766.212974472 + } + point { + x: 586362.54108647688 + y: 4140766.4049395118 + } + point { + x: 586362.59340413718 + y: 4140766.5969045521 + } + point { + x: 586362.6457217976 + y: 4140766.7888695924 + } + point { + x: 586362.6980394579 + y: 4140766.9808346322 + } + point { + x: 586362.75035711832 + y: 4140767.1727996725 + } + point { + x: 586362.80267477862 + y: 4140767.3647647123 + } + point { + x: 586362.854992439 + y: 4140767.5567297526 + } + point { + x: 586362.90731009934 + y: 4140767.7486947929 + } + point { + x: 586362.95962775976 + y: 4140767.9406598327 + } + point { + x: 586363.01194542006 + y: 4140768.132624873 + } + point { + x: 586363.06426308036 + y: 4140768.3245899128 + } + point { + x: 586363.11658074078 + y: 4140768.5165549531 + } + point { + x: 586363.16889840108 + y: 4140768.7085199933 + } + point { + x: 586363.2212160615 + y: 4140768.9004850332 + } + point { + x: 586363.2735337218 + y: 4140769.0924500735 + } + point { + x: 586363.32585138211 + y: 4140769.2844151137 + } + point { + x: 586363.37816904252 + y: 4140769.4763801536 + } + point { + x: 586363.43048670283 + y: 4140769.6683451938 + } + point { + x: 586363.48280436313 + y: 4140769.8603102337 + } + point { + x: 586363.53512202355 + y: 4140770.0522752739 + } + point { + x: 586363.58743968385 + y: 4140770.2442403142 + } + point { + x: 586363.63975734427 + y: 4140770.4362053541 + } + point { + x: 586363.69207500457 + y: 4140770.6281703943 + } + point { + x: 586363.74439266487 + y: 4140770.8201354346 + } + point { + x: 586363.79671032529 + y: 4140771.0121004744 + } + point { + x: 586363.84902798559 + y: 4140771.2040655147 + } + point { + x: 586363.90134564589 + y: 4140771.3960305545 + } + point { + x: 586363.95366330631 + y: 4140771.5879955948 + } + point { + x: 586364.00598096661 + y: 4140771.7799606351 + } + point { + x: 586364.058298627 + y: 4140771.9719256749 + } + point { + x: 586364.11061628733 + y: 4140772.1638907152 + } + point { + x: 586364.16293394763 + y: 4140772.3558557555 + } + point { + x: 586364.215251608 + y: 4140772.5478207953 + } + point { + x: 586364.26756926836 + y: 4140772.7397858356 + } + point { + x: 586364.31988692866 + y: 4140772.9317508754 + } + point { + x: 586364.37220458908 + y: 4140773.1237159157 + } + point { + x: 586364.42452224938 + y: 4140773.315680956 + } + point { + x: 586364.4768399098 + y: 4140773.5076459958 + } + point { + x: 586364.5291575701 + y: 4140773.6996110361 + } + point { + x: 586364.5814752304 + y: 4140773.8915760764 + } + point { + x: 586364.63379289082 + y: 4140774.0835411162 + } + point { + x: 586364.68611055112 + y: 4140774.2755061565 + } + point { + x: 586364.73842821154 + y: 4140774.4674711963 + } + point { + x: 586364.79074587184 + y: 4140774.6594362366 + } + point { + x: 586364.84306353214 + y: 4140774.8514012769 + } + point { + x: 586364.89538119256 + y: 4140775.0433663167 + } + point { + x: 586364.94769885286 + y: 4140775.235331357 + } + point { + x: 586365.00001651316 + y: 4140775.4272963973 + } + point { + x: 586365.05233417358 + y: 4140775.6192614371 + } + point { + x: 586365.10465183388 + y: 4140775.8112264774 + } + point { + x: 586365.1569694943 + y: 4140776.0031915172 + } + point { + x: 586365.2092871546 + y: 4140776.1951565575 + } + point { + x: 586365.26160481491 + y: 4140776.3871215978 + } + point { + x: 586365.31392247532 + y: 4140776.5790866376 + } + point { + x: 586365.36624013563 + y: 4140776.7710516779 + } + point { + x: 586365.418557796 + y: 4140776.9630167182 + } + point { + x: 586365.47087545635 + y: 4140777.154981758 + } + point { + x: 586365.52319311665 + y: 4140777.3469467983 + } + point { + x: 586365.57551077707 + y: 4140777.5389118381 + } + point { + x: 586365.62782843737 + y: 4140777.7308768784 + } + point { + x: 586365.68014609779 + y: 4140777.9228419187 + } + point { + x: 586365.73246375809 + y: 4140778.1148069585 + } + point { + x: 586365.78478141839 + y: 4140778.3067719988 + } + point { + x: 586365.83709907881 + y: 4140778.4987370386 + } + point { + x: 586365.88941673911 + y: 4140778.6907020789 + } + point { + x: 586365.94173439953 + y: 4140778.8826671191 + } + point { + x: 586365.99405205983 + y: 4140779.074632159 + } + point { + x: 586366.04636972013 + y: 4140779.2665971993 + } + point { + x: 586366.09868738055 + y: 4140779.4585622395 + } + point { + x: 586366.15100504085 + y: 4140779.6505272794 + } + point { + x: 586366.20332270127 + y: 4140779.8424923196 + } + point { + x: 586366.25564036157 + y: 4140780.0344573595 + } + point { + x: 586366.30795802188 + y: 4140780.2264223997 + } + point { + x: 586366.36027568229 + y: 4140780.41838744 + } + point { + x: 586366.4125933426 + y: 4140780.61035248 + } + point { + x: 586366.464911003 + y: 4140780.80231752 + } + point { + x: 586366.51722866332 + y: 4140780.9942825604 + } + point { + x: 586366.56954632362 + y: 4140781.1862476002 + } + point { + x: 586366.621863984 + y: 4140781.3782126405 + } + point { + x: 586366.67418164434 + y: 4140781.5701776803 + } + point { + x: 586366.72649930476 + y: 4140781.7621427206 + } + point { + x: 586366.77881696506 + y: 4140781.9541077609 + } + point { + x: 586366.83113462536 + y: 4140782.1460728007 + } + point { + x: 586366.88345228578 + y: 4140782.338037841 + } + point { + x: 586366.93576994608 + y: 4140782.5300028813 + } + point { + x: 586366.9880876065 + y: 4140782.7219679211 + } + point { + x: 586367.0404052668 + y: 4140782.9139329614 + } + point { + x: 586367.0927229271 + y: 4140783.1058980012 + } + point { + x: 586367.14504058752 + y: 4140783.2978630415 + } + point { + x: 586367.19735824782 + y: 4140783.4898280818 + } + point { + x: 586367.24967590813 + y: 4140783.6817931216 + } + point { + x: 586367.30199356854 + y: 4140783.8737581619 + } + point { + x: 586367.35431122885 + y: 4140784.0657232022 + } + point { + x: 586367.40662888926 + y: 4140784.257688242 + } + point { + x: 586367.45894654957 + y: 4140784.4496532823 + } + point { + x: 586367.51126420987 + y: 4140784.6416183221 + } + point { + x: 586367.56358187029 + y: 4140784.8335833624 + } + point { + x: 586367.61589953059 + y: 4140785.0255484027 + } + point { + x: 586367.66821719089 + y: 4140785.2175134425 + } + point { + x: 586367.72053485131 + y: 4140785.4094784828 + } + point { + x: 586367.77285251161 + y: 4140785.6014435231 + } + point { + x: 586367.825170172 + y: 4140785.7934085629 + } + point { + x: 586367.87748783233 + y: 4140785.9853736032 + } + point { + x: 586367.93636111321 + y: 4140786.2013956155 + } + } + } + } + is_virtual: false + road_id: "" +} diff --git a/modules/map/data/demo/sim_map.txt b/modules/map/data/demo/sim_map.txt new file mode 100644 index 00000000000..46a4e21b4ba --- /dev/null +++ b/modules/map/data/demo/sim_map.txt @@ -0,0 +1,7376 @@ +header { + version: "03/10/17_22.46.20" + date: "20161124" + projection { + proj: "+proj=tmerc +lat_0={37.413082} +lon_0={-122.013332} +k={0.9999999996} +ellps=WGS84 +no_defs" + } +} +lane { + id { + id: "1_-1" + } + central_curve { + segment { + line_segment { + point { + x: 586392.84003 + y: 4140673.01232 + } + point { + x: 586347.87665356509 + y: 4140684.4903132142 + } + point { + x: 586346.80127633526 + y: 4140685.0735160285 + } + point { + x: 586345.879524424 + y: 4140685.5734041547 + } + point { + x: 586344.92674008559 + y: 4140686.3570102039 + } + point { + x: 586344.16532735142 + y: 4140687.0377294389 + } + point { + x: 586342.949612425 + y: 4140689.1510837893 + } + point { + x: 586342.61789013562 + y: 4140690.1722082766 + } + point { + x: 586342.55229403474 + y: 4140692.1105704415 + } + point { + x: 586342.74178216688 + y: 4140693.233318944 + } + point { + x: 586342.99203702353 + y: 4140694.4008130711 + } + point { + x: 586343.26350701367 + y: 4140695.5630708882 + } + point { + x: 586343.55230914254 + y: 4140696.72105082 + } + point { + x: 586343.85456041514 + y: 4140697.8757112916 + } + point { + x: 586344.16637783637 + y: 4140699.0280107288 + } + point { + x: 586344.48387841124 + y: 4140700.178907556 + } + point { + x: 586344.803179145 + y: 4140701.3293601992 + } + point { + x: 586345.12065483863 + y: 4140702.4802634497 + } + point { + x: 586345.43552715762 + y: 4140703.6318096132 + } + point { + x: 586345.74878568971 + y: 4140704.783754847 + } + point { + x: 586346.06144654984 + y: 4140705.9358487697 + } + point { + x: 586346.37447887147 + y: 4140707.0878525707 + } + point { + x: 586346.68816324219 + y: 4140708.2396968966 + } + point { + x: 586347.00225746073 + y: 4140709.3914409908 + } + point { + x: 586347.31650628825 + y: 4140710.5431473008 + } + point { + x: 586347.630662492 + y: 4140711.6948763118 + } + point { + x: 586347.94463991246 + y: 4140712.8466490814 + } + point { + x: 586348.25850161957 + y: 4140713.9984501684 + } + point { + x: 586348.57231631654 + y: 4140715.1502627553 + } + point { + x: 586348.886151354 + y: 4140716.302070356 + } + point { + x: 586349.20003492164 + y: 4140717.4538660757 + } + point { + x: 586349.51395096141 + y: 4140718.6056538471 + } + point { + x: 586349.82788103994 + y: 4140719.7574381833 + } + point { + x: 586350.14180693333 + y: 4140720.9092235458 + } + point { + x: 586350.45571975573 + y: 4140722.0610121083 + } + point { + x: 586350.769623504 + y: 4140723.2128028916 + } + point { + x: 586351.08352311642 + y: 4140724.3645946868 + } + point { + x: 586351.39742350264 + y: 4140725.5163862924 + } + point { + x: 586351.71132738772 + y: 4140726.6681770408 + } + point { + x: 586352.02523380471 + y: 4140727.8199671702 + } + point { + x: 586352.39145939262 + y: 4140729.1637219694 + } + point { + x: 586352.70536677307 + y: 4140730.3155118632 + } + point { + x: 586353.01927321567 + y: 4140731.4673019862 + } + point { + x: 586353.33317901182 + y: 4140732.6190922675 + } + point { + x: 586353.69940209691 + y: 4140733.96284768 + } + point { + x: 586354.01330770075 + y: 4140735.1146380082 + } + point { + x: 586354.32721355371 + y: 4140736.2664282755 + } + point { + x: 586354.64111957117 + y: 4140737.4182185028 + } + point { + x: 586354.95502565836 + y: 4140738.5700087128 + } + point { + x: 586355.26893172134 + y: 4140739.7217989285 + } + point { + x: 586355.582837717 + y: 4140740.8735891613 + } + point { + x: 586356.26296725043 + y: 4140743.3691346953 + } + point { + x: 586356.62919084507 + y: 4140744.7128899824 + } + point { + x: 586357.04773212364 + y: 4140746.2486103047 + } + point { + x: 586357.36163809313 + y: 4140747.4004005436 + } + point { + x: 586357.72786172561 + y: 4140748.7441558219 + } + point { + x: 586367.87748783233 + y: 4140785.9853736032 + } + } + } + } + left_boundary { + curve { + segment { + line_segment { + point { + x: 586392.40718075773 + y: 4140671.3166957693 + } + point { + x: 586391.43825262552 + y: 4140671.5640381933 + } + point { + x: 586390.08175324055 + y: 4140671.9103175872 + } + point { + x: 586388.72525385558 + y: 4140672.2565969811 + } + point { + x: 586387.562540097 + y: 4140672.55340789 + } + point { + x: 586386.39982633851 + y: 4140672.850218799 + } + point { + x: 586385.04332695354 + y: 4140673.1964981928 + } + point { + x: 586383.880613195 + y: 4140673.4933091016 + } + point { + x: 586382.71789943648 + y: 4140673.7901200107 + } + point { + x: 586381.36140005151 + y: 4140674.1363994046 + } + point { + x: 586380.198686293 + y: 4140674.4332103133 + } + point { + x: 586379.03597253445 + y: 4140674.7300212225 + } + point { + x: 586378.06704440224 + y: 4140674.9773636465 + } + point { + x: 586376.90433064371 + y: 4140675.2741745557 + } + point { + x: 586375.74161688518 + y: 4140675.5709854644 + } + point { + x: 586374.57890312665 + y: 4140675.8677963736 + } + point { + x: 586373.22240374167 + y: 4140676.2140757674 + } + point { + x: 586372.05968998314 + y: 4140676.5108866761 + } + point { + x: 586370.89697622461 + y: 4140676.8076975853 + } + point { + x: 586369.92804809241 + y: 4140677.0550400093 + } + point { + x: 586368.76533433388 + y: 4140677.3518509185 + } + point { + x: 586367.60262057534 + y: 4140677.6486618272 + } + point { + x: 586366.43990681681 + y: 4140677.9454727364 + } + point { + x: 586365.08340743184 + y: 4140678.2917521303 + } + point { + x: 586363.92069367331 + y: 4140678.588563039 + } + point { + x: 586362.75797991478 + y: 4140678.8853739481 + } + point { + x: 586361.78905178257 + y: 4140679.1327163721 + } + point { + x: 586360.626338024 + y: 4140679.4295272813 + } + point { + x: 586359.46362426551 + y: 4140679.72633819 + } + point { + x: 586358.300910507 + y: 4140680.0231490992 + } + point { + x: 586356.944411122 + y: 4140680.3694284931 + } + point { + x: 586355.78169736348 + y: 4140680.6662394018 + } + point { + x: 586354.618983605 + y: 4140680.963050311 + } + point { + x: 586353.26248422 + y: 4140681.3093297048 + } + point { + x: 586352.09977046144 + y: 4140681.6061406136 + } + point { + x: 586350.74327107647 + y: 4140681.9524200074 + } + point { + x: 586349.77434294426 + y: 4140682.1997624314 + } + point { + x: 586348.80541481217 + y: 4140682.4471048559 + } + point { + x: 586347.44380432274 + y: 4140682.7946889829 + } + point { + x: 586345.13564200141 + y: 4140683.99151257 + } + point { + x: 586342.89055024483 + y: 4140685.8301893706 + } + point { + x: 586341.87094596669 + y: 4140687.5507727354 + } + point { + x: 586340.89850200713 + y: 4140689.8142865784 + } + point { + x: 586340.81057192152 + y: 4140692.0125286719 + } + point { + x: 586340.97277156974 + y: 4140693.1731965481 + } + point { + x: 586341.1638433605 + y: 4140694.1553545445 + } + point { + x: 586341.41819735814 + y: 4140695.3279238613 + } + point { + x: 586341.695382139 + y: 4140696.4950063378 + } + point { + x: 586341.99061609723 + y: 4140697.6577462829 + } + point { + x: 586342.299117627 + y: 4140698.8172880071 + } + point { + x: 586342.5628874934 + y: 4140699.7819552547 + } + point { + x: 586342.82978325861 + y: 4140700.7458583908 + } + point { + x: 586343.09703779186 + y: 4140701.7096596314 + } + point { + x: 586343.3624706777 + y: 4140702.6738815932 + } + point { + x: 586343.62614448974 + y: 4140703.6385132121 + } + point { + x: 586343.94107376237 + y: 4140704.7964167856 + } + point { + x: 586344.25536598929 + y: 4140705.9544712538 + } + point { + x: 586344.57000853808 + y: 4140707.1124479612 + } + point { + x: 586344.88529423857 + y: 4140708.2702785148 + } + point { + x: 586345.14835196768 + y: 4140709.2350646793 + } + point { + x: 586345.41154459608 + y: 4140710.1998202326 + } + point { + x: 586345.67472616758 + y: 4140711.1645783782 + } + point { + x: 586345.93778452545 + y: 4140712.1293646265 + } + point { + x: 586346.20073103148 + y: 4140713.0941763753 + } + point { + x: 586346.51617490861 + y: 4140714.2519714306 + } + point { + x: 586346.83158307639 + y: 4140715.4097746238 + } + point { + x: 586347.14702055429 + y: 4140716.5675711292 + } + point { + x: 586347.46250493766 + y: 4140717.7253569365 + } + point { + x: 586347.72543181351 + y: 4140718.6901731454 + } + point { + x: 586347.98836847325 + y: 4140719.6549871224 + } + point { + x: 586348.25130429748 + y: 4140720.61980129 + } + point { + x: 586348.51423122745 + y: 4140721.5846174862 + } + point { + x: 586348.77715015435 + y: 4140722.5494355075 + } + point { + x: 586349.09264630754 + y: 4140723.7072186288 + } + point { + x: 586349.4081399478 + y: 4140724.8650023234 + } + point { + x: 586349.72363573441 + y: 4140726.0227855286 + } + point { + x: 586350.0391348761 + y: 4140727.1805679686 + } + point { + x: 586350.30205248133 + y: 4140728.1453862912 + } + point { + x: 586350.617554452 + y: 4140729.3031680859 + } + point { + x: 586350.8804725731 + y: 4140730.2679862911 + } + point { + x: 586351.14339002455 + y: 4140731.232804649 + } + point { + x: 586351.40630694525 + y: 4140732.1976231276 + } + point { + x: 586351.77439013158 + y: 4140733.5483691129 + } + point { + x: 586352.08988992113 + y: 4140734.7061514049 + } + point { + x: 586352.40538993641 + y: 4140735.8639336457 + } + point { + x: 586352.72089016391 + y: 4140737.021715838 + } + point { + x: 586353.03639050876 + y: 4140738.1794980033 + } + point { + x: 586353.35189087666 + y: 4140739.3372801635 + } + point { + x: 586353.61480780679 + y: 4140740.3020986402 + } + point { + x: 586353.87772469339 + y: 4140741.2669171272 + } + point { + x: 586354.29839165742 + y: 4140742.8106267182 + } + point { + x: 586354.7716419776 + y: 4140744.5473000114 + } + point { + x: 586355.087142211 + y: 4140745.7050822023 + } + point { + x: 586356.24397646042 + y: 4140749.9502835553 + } + point { + x: 586356.5594767048 + y: 4140751.1080657435 + } + point { + x: 586357.45339405711 + y: 4140754.3884486123 + } + point { + x: 586357.82147767465 + y: 4140755.7391944993 + } + point { + x: 586358.71539503394 + y: 4140759.0195773663 + } + point { + x: 586360.55581312312 + y: 4140765.7733067996 + } + point { + x: 586360.87131336716 + y: 4140766.9310889882 + } + point { + x: 586361.239396985 + y: 4140768.2818348748 + } + point { + x: 586361.8178140989 + y: 4140770.4044355536 + } + point { + x: 586362.13331434282 + y: 4140771.5622177422 + } + point { + x: 586362.44881458674 + y: 4140772.7199999308 + } + point { + x: 586362.76431483065 + y: 4140773.8777821194 + } + point { + x: 586363.34273194452 + y: 4140776.0003827983 + } + point { + x: 586363.65823218843 + y: 4140777.1581649869 + } + point { + x: 586364.02631580643 + y: 4140778.5089108734 + } + point { + x: 586364.34181605035 + y: 4140779.6666930621 + } + point { + x: 586364.7624830422 + y: 4140781.2104026466 + } + point { + x: 586365.07798328612 + y: 4140782.3681848352 + } + point { + x: 586365.39348353 + y: 4140783.5259670238 + } + point { + x: 586366.24792875489 + y: 4140786.6615001382 + } + } + heading: -0.24993649105035462 + length: 156.61603286829296 + } + } + length: 156.61603286829296 + boundary_type { + s: 0 + types: DOTTED_YELLOW + } + } + right_boundary { + curve { + segment { + line_segment { + point { + x: 586393.2728792422 + y: 4140674.7079442316 + } + point { + x: 586348.30950280733 + y: 4140686.1859374451 + } + point { + x: 586346.49370715721 + y: 4140687.2298617619 + } + point { + x: 586345.67808398092 + y: 4140688.0038471119 + } + point { + x: 586345.01141973131 + y: 4140688.8252108572 + } + point { + x: 586344.54072043777 + y: 4140689.8380795629 + } + point { + x: 586344.21889314626 + y: 4140690.9210849716 + } + point { + x: 586344.300845512 + y: 4140692.3256601421 + } + point { + x: 586344.55438741378 + y: 4140693.4865828794 + } + point { + x: 586344.82603111514 + y: 4140694.6428296445 + } + point { + x: 586345.11279223184 + y: 4140695.7951729773 + } + point { + x: 586345.41168637946 + y: 4140696.9443854187 + } + point { + x: 586345.719729174 + y: 4140698.09123951 + } + point { + x: 586346.03393623128 + y: 4140699.2365077916 + } + point { + x: 586346.35132316686 + y: 4140700.3809628044 + } + point { + x: 586346.66890559671 + y: 4140701.5253770887 + } + point { + x: 586346.98410682054 + y: 4140702.67041735 + } + point { + x: 586347.29692224984 + y: 4140703.8160825684 + } + point { + x: 586347.60834768345 + y: 4140704.9621120221 + } + point { + x: 586347.91938115843 + y: 4140706.1082444089 + } + point { + x: 586348.230923247 + y: 4140707.254243935 + } + point { + x: 586348.54309343337 + y: 4140708.4000792489 + } + point { + x: 586348.85563583835 + y: 4140709.5458172457 + } + point { + x: 586349.1682921981 + y: 4140710.6915254439 + } + point { + x: 586349.4808229584 + y: 4140711.8372664712 + } + point { + x: 586349.793181723 + y: 4140712.9830524586 + } + point { + x: 586350.105436048 + y: 4140714.1288657463 + } + point { + x: 586350.417654963 + y: 4140715.27468829 + } + point { + x: 586350.72990393511 + y: 4140716.420502976 + } + point { + x: 586351.04220007116 + y: 4140717.5663053324 + } + point { + x: 586351.35452562547 + y: 4140718.7120999983 + } + point { + x: 586351.66686208255 + y: 4140719.8578918139 + } + point { + x: 586351.97919157846 + y: 4140721.0036854493 + } + point { + x: 586352.29150821513 + y: 4140722.1494824463 + } + point { + x: 586352.60381659726 + y: 4140723.2952816011 + } + point { + x: 586352.916121686 + y: 4140724.441081617 + } + point { + x: 586353.22842832981 + y: 4140725.5868812264 + } + point { + x: 586353.54073846259 + y: 4140726.732679924 + } + point { + x: 586353.85305090691 + y: 4140727.8784780167 + } + point { + x: 586354.16536433331 + y: 4140729.0242758533 + } + point { + x: 586354.47767743061 + y: 4140730.1700737756 + } + point { + x: 586354.78998958622 + y: 4140731.3158719442 + } + point { + x: 586355.10230109585 + y: 4140732.4616702814 + } + point { + x: 586355.4146123156 + y: 4140733.6074686944 + } + point { + x: 586355.726923599 + y: 4140734.7532670912 + } + point { + x: 586356.03923513507 + y: 4140735.8990654214 + } + point { + x: 586356.35154685134 + y: 4140737.0448637051 + } + point { + x: 586356.820014555 + y: 4140738.763561096 + } + point { + x: 586357.132326313 + y: 4140739.9093593685 + } + point { + x: 586357.496689953 + y: 4140741.2461240403 + } + point { + x: 586358.22541713843 + y: 4140743.9196534078 + } + point { + x: 586358.69388464512 + y: 4140745.6383508504 + } + point { + x: 586359.058248279 + y: 4140746.9751155237 + } + point { + x: 586359.42261191644 + y: 4140748.311880196 + } + point { + x: 586359.83902749524 + y: 4140749.8396112514 + } + point { + x: 586360.20339112135 + y: 4140751.1763759269 + } + point { + x: 586360.5157027992 + y: 4140752.3221742203 + } + point { + x: 586361.60879367776 + y: 4140756.3324682456 + } + point { + x: 586361.92110535875 + y: 4140757.4782665381 + } + point { + x: 586362.23341703939 + y: 4140758.6240648306 + } + point { + x: 586362.54572871968 + y: 4140759.7698631235 + } + point { + x: 586362.85804039973 + y: 4140760.9156614165 + } + point { + x: 586363.17035207979 + y: 4140762.061459709 + } + point { + x: 586363.48266376 + y: 4140763.2072580019 + } + point { + x: 586363.79497544013 + y: 4140764.3530562948 + } + point { + x: 586364.10728712042 + y: 4140765.4988545873 + } + point { + x: 586364.41959880071 + y: 4140766.6446528803 + } + point { + x: 586364.731910481 + y: 4140767.7904511732 + } + point { + x: 586365.04422216129 + y: 4140768.9362494657 + } + point { + x: 586365.35653384146 + y: 4140770.0820477586 + } + point { + x: 586365.66884552175 + y: 4140771.2278460516 + } + point { + x: 586365.98115720192 + y: 4140772.373644344 + } + point { + x: 586366.29346888221 + y: 4140773.519442637 + } + point { + x: 586366.6057805625 + y: 4140774.66524093 + } + point { + x: 586366.91809224267 + y: 4140775.8110392224 + } + point { + x: 586367.230403923 + y: 4140776.9568375153 + } + point { + x: 586367.54271560325 + y: 4140778.1026358083 + } + point { + x: 586367.85502728343 + y: 4140779.2484341008 + } + point { + x: 586368.16733896371 + y: 4140780.3942323937 + } + point { + x: 586368.479650644 + y: 4140781.5400306867 + } + point { + x: 586368.79196232418 + y: 4140782.6858289791 + } + point { + x: 586369.10427400446 + y: 4140783.8316272721 + } + point { + x: 586369.41658568464 + y: 4140784.977425565 + } + } + heading: -0.24993649105040971 + length: 151.14875772478879 + } + } + length: 151.14875772478879 + boundary_type { + s: 0 + types: CURB + } + } + length: 153.87421245705966 + speed_limit: 4.5 + overlap_id { + id: "1_-1_and_2" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 0 + width: 1.7499999999999969 + } + left_sample { + s: 0.20001136855364768 + width: 1.7499999999999132 + } + left_sample { + s: 0.40002273710671876 + width: 1.7499999999999685 + } + left_sample { + s: 0.60003410566029847 + width: 1.7500000000000242 + } + left_sample { + s: 0.80004547421347971 + width: 1.750000000000135 + } + left_sample { + s: 1.0000568427671555 + width: 1.7500000000000511 + } + left_sample { + s: 1.2000682113204328 + width: 1.7500000000000786 + } + left_sample { + s: 1.4000795798740127 + width: 1.7500000000000226 + } + left_sample { + s: 1.6000909484271939 + width: 1.7499999999999953 + } + left_sample { + s: 1.8001023169806494 + width: 1.7500000000000226 + } + left_sample { + s: 2.0001136855341328 + width: 1.7500000000000502 + } + left_sample { + s: 2.2001250540875064 + width: 1.7499999999999944 + } + left_sample { + s: 2.4001364226407835 + width: 1.7500000000000768 + } + left_sample { + s: 2.600147791194253 + width: 1.7499999999999107 + } + left_sample { + s: 2.8001591597478326 + width: 1.7499999999999936 + } + left_sample { + s: 3.0001705283009996 + width: 1.749999999999966 + } + left_sample { + s: 3.2001818968545792 + width: 1.7499999999999936 + } + left_sample { + s: 3.4001932654079527 + width: 1.7499999999999096 + } + left_sample { + s: 3.6002046339613263 + width: 1.7499999999999651 + } + left_sample { + s: 3.8002160025149059 + width: 1.7499999999998817 + } + left_sample { + s: 4.0002273710682656 + width: 1.7499999999999367 + } + left_sample { + s: 4.2002387396216534 + width: 1.7499999999999645 + } + left_sample { + s: 4.400250108175233 + width: 1.7499999999999636 + } + left_sample { + s: 4.6002614767284822 + width: 1.7499999999999361 + } + left_sample { + s: 4.8002728452820618 + width: 1.7500000000000187 + } + left_sample { + s: 5.0002842138355312 + width: 1.7499999999999911 + } + left_sample { + s: 5.2002955823890007 + width: 1.7499999999999636 + } + left_sample { + s: 5.40030695094225 + width: 1.7499999999999911 + } + left_sample { + s: 5.6003183194958295 + width: 1.7500000000000184 + } + left_sample { + s: 5.8003296880491888 + width: 1.7500000000000178 + } + left_sample { + s: 6.0003410566026583 + width: 1.7500000000001281 + } + left_sample { + s: 6.2003524251559359 + width: 1.7500000000000728 + } + left_sample { + s: 6.4003637937095013 + width: 1.7500000000000453 + } + left_sample { + s: 6.6003751622628748 + width: 1.7500000000001557 + } + left_sample { + s: 6.8003865308163585 + width: 1.7500000000001 + } + left_sample { + s: 7.0003978993698137 + width: 1.7499999999999343 + } + left_sample { + s: 7.2004092679233933 + width: 1.7499999999999605 + } + left_sample { + s: 7.4004206364766709 + width: 1.7500000000000988 + } + left_sample { + s: 7.6004320050301546 + width: 1.7500000000000435 + } + left_sample { + s: 7.8004433735835281 + width: 1.7500000000000706 + } + left_sample { + s: 8.0004547421369 + width: 1.7499999999999605 + } + left_sample { + s: 8.200466110690467 + width: 1.7499999999999045 + } + left_sample { + s: 8.40047747924395 + width: 1.7500000000000149 + } + left_sample { + s: 8.6004888477974326 + width: 1.7499999999999027 + } + left_sample { + s: 8.8005002163506 + width: 1.7499999999999036 + } + left_sample { + s: 9.00051158490418 + width: 1.750000000000014 + } + left_sample { + s: 9.20052295345754 + width: 1.7499999999999305 + } + left_sample { + s: 9.4005343220111328 + width: 1.74999999999993 + } + left_sample { + s: 9.600545690564493 + width: 1.7499999999999853 + } + left_sample { + s: 9.8005570591178657 + width: 1.7500000000000129 + } + left_sample { + s: 10.000568427671226 + width: 1.7500000000000404 + } + left_sample { + s: 10.200579796224586 + width: 1.7500000000000677 + } + left_sample { + s: 10.400591164778028 + width: 1.7499999999999571 + } + left_sample { + s: 10.6006025333314 + width: 1.7500000000001505 + } + left_sample { + s: 10.800613901884663 + width: 1.7500000000001235 + } + left_sample { + s: 11.000625270438244 + width: 1.7500000000001228 + } + left_sample { + s: 11.200636638991575 + width: 1.7500000000001228 + } + left_sample { + s: 11.400648007544977 + width: 1.7500000000002056 + } + left_sample { + s: 11.600659376098349 + width: 1.7500000000002334 + } + left_sample { + s: 11.800670744651915 + width: 1.7500000000001776 + } + left_sample { + s: 12.000682113205496 + width: 1.7500000000001763 + } + left_sample { + s: 12.200693481758869 + width: 1.7500000000001201 + } + left_sample { + s: 12.400704850312145 + width: 1.7500000000000386 + } + left_sample { + s: 12.600716218865628 + width: 1.7500000000001206 + } + left_sample { + s: 12.800727587419111 + width: 1.7500000000000644 + } + left_sample { + s: 13.000738955972622 + width: 1.7500000000000087 + } + left_sample { + s: 13.200750324525995 + width: 1.7499999999998703 + } + left_sample { + s: 13.400761693079367 + width: 1.7499999999998981 + } + left_sample { + s: 13.60077306163285 + width: 1.7500000000000628 + } + left_sample { + s: 13.800784430186333 + width: 1.7499999999999527 + } + left_sample { + s: 14.000795798739789 + width: 1.7499999999998967 + } + left_sample { + s: 14.200807167293176 + width: 1.7499999999999252 + } + left_sample { + s: 14.400818535846646 + width: 1.7499999999999798 + } + left_sample { + s: 14.600829904400006 + width: 1.7499999999998963 + } + left_sample { + s: 14.800841272953477 + width: 1.7499999999998408 + } + left_sample { + s: 15.000852641506849 + width: 1.749999999999923 + } + left_sample { + s: 15.200864010060222 + width: 1.7499999999999509 + } + left_sample { + s: 15.400875378613774 + width: 1.7499999999999225 + } + left_sample { + s: 15.600886747167024 + width: 1.7499999999998674 + } + left_sample { + s: 15.800898115720521 + width: 1.7499999999999782 + } + left_sample { + s: 16.000909484274086 + width: 1.7499999999999503 + } + left_sample { + s: 16.200920852827444 + width: 1.74999999999995 + } + left_sample { + s: 16.400932221380913 + width: 1.7500000000000049 + } + left_sample { + s: 16.600943589934285 + width: 1.7499999999999771 + } + left_sample { + s: 16.800954958487658 + width: 1.7499999999999214 + } + left_sample { + s: 17.000966327040921 + width: 1.7499999999998661 + } + left_sample { + s: 17.200977695594418 + width: 1.7499999999999223 + } + left_sample { + s: 17.400989064147982 + width: 1.749999999999865 + } + left_sample { + s: 17.601000432701245 + width: 1.7499999999997828 + } + left_sample { + s: 17.801011801254742 + width: 1.749999999999782 + } + left_sample { + s: 18.001023169808114 + width: 1.7499999999996994 + } + left_sample { + s: 18.2010345383615 + width: 1.7499999999996998 + } + left_sample { + s: 18.401045906915066 + width: 1.7499999999997538 + } + left_sample { + s: 18.601057275468342 + width: 1.7499999999996712 + } + left_sample { + s: 18.801068644021715 + width: 1.7499999999997267 + } + left_sample { + s: 19.001080012574977 + width: 1.7499999999998364 + } + left_sample { + s: 19.201091381128585 + width: 1.7499999999997535 + } + left_sample { + s: 19.401102749681943 + width: 1.7499999999997815 + } + left_sample { + s: 19.601114118235522 + width: 1.7499999999998084 + } + left_sample { + s: 19.801125486788784 + width: 1.7499999999999192 + } + left_sample { + s: 20.001136855342267 + width: 1.7499999999999738 + } + left_sample { + s: 20.201148223895832 + width: 1.7499999999999181 + } + left_sample { + s: 20.401159592449094 + width: 1.7500000000000553 + } + left_sample { + s: 20.601170961002481 + width: 1.7499999999999452 + } + left_sample { + s: 20.801182329555949 + width: 1.75 + } + left_sample { + s: 21.001193698109432 + width: 1.7500000000000278 + } + left_sample { + s: 21.201205066662887 + width: 1.7499999999999718 + } + left_sample { + s: 21.401216435216163 + width: 1.7500000000000826 + } + left_sample { + s: 21.601227803769618 + width: 1.7499999999999711 + } + left_sample { + s: 21.801239172323005 + width: 1.7499999999999989 + } + left_sample { + s: 22.001250540876377 + width: 1.7499999999999711 + } + left_sample { + s: 22.20126190942975 + width: 1.7499999999999445 + } + left_sample { + s: 22.401273277983314 + width: 1.7499999999998876 + } + left_sample { + s: 22.6012846465367 + width: 1.7499999999999156 + } + left_sample { + s: 22.80129601509006 + width: 1.7499999999998874 + } + left_sample { + s: 23.001307383643447 + width: 1.7499999999998879 + } + left_sample { + s: 23.201318752197025 + width: 1.74999999999986 + } + left_sample { + s: 23.401330120750192 + width: 1.750000000000026 + } + left_sample { + s: 23.601341489303852 + width: 1.7499999999998586 + } + left_sample { + s: 23.801352857857033 + width: 1.7499999999999141 + } + left_sample { + s: 24.001364226410516 + width: 1.7499999999999145 + } + left_sample { + s: 24.201375594964095 + width: 1.7500000000000229 + } + left_sample { + s: 24.401386963517467 + width: 1.7499999999998854 + } + left_sample { + s: 24.60139833207084 + width: 1.7499999999999685 + } + left_sample { + s: 24.801409700624308 + width: 1.7499999999999947 + } + left_sample { + s: 25.001421069177777 + width: 1.7499999999998557 + } + left_sample { + s: 25.201432437731054 + width: 1.7499999999999134 + } + left_sample { + s: 25.401443806284728 + width: 1.7499999999999938 + } + left_sample { + s: 25.601455174837991 + width: 1.7499999999999949 + } + left_sample { + s: 25.80146654339168 + width: 1.7500000000000755 + } + left_sample { + s: 26.001477911944832 + width: 1.7500000000000764 + } + left_sample { + s: 26.201489280498425 + width: 1.7499999999999936 + } + left_sample { + s: 26.401500649051755 + width: 1.7499999999999389 + } + left_sample { + s: 26.601512017605348 + width: 1.7499999999999933 + } + left_sample { + s: 26.801523386158802 + width: 1.7499999999999938 + } + left_sample { + s: 27.001534754712271 + width: 1.75000000000002 + } + left_sample { + s: 27.201546123265643 + width: 1.7499999999999662 + } + left_sample { + s: 27.401557491818988 + width: 1.7500000000000768 + } + left_sample { + s: 27.601568860372566 + width: 1.7500000000000187 + } + left_sample { + s: 27.801580228925953 + width: 1.7499999999999647 + } + left_sample { + s: 28.001591597479312 + width: 1.7500000000000207 + } + left_sample { + s: 28.201602966032862 + width: 1.7499999999999909 + } + left_sample { + s: 28.401614334586153 + width: 1.7500000000000493 + } + left_sample { + s: 28.601625703139607 + width: 1.7500000000001577 + } + left_sample { + s: 28.80163707169298 + width: 1.7500000000001019 + } + left_sample { + s: 29.001648440246353 + width: 1.7500000000000477 + } + left_sample { + s: 29.201659808799725 + width: 1.7500000000001854 + } + left_sample { + s: 29.401671177353098 + width: 1.7500000000001852 + } + left_sample { + s: 29.601682545906566 + width: 1.750000000000157 + } + left_sample { + s: 29.801693914460063 + width: 1.7500000000001561 + } + left_sample { + s: 30.00170528301323 + width: 1.7500000000002132 + } + left_sample { + s: 30.201716651566795 + width: 1.750000000000157 + } + left_sample { + s: 30.401728020120387 + width: 1.7500000000001568 + } + left_sample { + s: 30.601739388673746 + width: 1.7500000000002109 + } + left_sample { + s: 30.801750757227243 + width: 1.7500000000002109 + } + left_sample { + s: 31.001762125780711 + width: 1.7500000000001537 + } + left_sample { + s: 31.201773494333988 + width: 1.7500000000001283 + } + left_sample { + s: 31.401784862887457 + width: 1.7500000000001534 + } + left_sample { + s: 31.601796231440844 + width: 1.7500000000000713 + } + left_sample { + s: 31.801807599994312 + width: 1.7500000000000158 + } + left_sample { + s: 32.001818968547795 + width: 1.7500000000000424 + } + left_sample { + s: 32.201830337101171 + width: 1.7500000000000424 + } + left_sample { + s: 32.401841705654547 + width: 1.7500000000000697 + } + left_sample { + s: 32.601853074207924 + width: 1.7500000000000975 + } + left_sample { + s: 32.801864442761286 + width: 1.7500000000000979 + } + left_sample { + s: 33.001875811314854 + width: 1.7499999999999851 + } + left_sample { + s: 33.20188717986813 + width: 1.7500000000000422 + } + left_sample { + s: 33.401898548421478 + width: 1.7500000000000671 + } + left_sample { + s: 33.601909916974854 + width: 1.7499999999999303 + } + left_sample { + s: 33.801921285528216 + width: 1.7499999999999576 + } + left_sample { + s: 34.001932654081592 + width: 1.75000000000004 + } + left_sample { + s: 34.201944022635061 + width: 1.7500000000000111 + } + left_sample { + s: 34.401955391188338 + width: 1.7500000000000124 + } + left_sample { + s: 34.601966759741806 + width: 1.7500000000000373 + } + left_sample { + s: 34.801978128295183 + width: 1.7499999999999023 + } + left_sample { + s: 35.001989496848751 + width: 1.75000000000001 + } + left_sample { + s: 35.202000865402141 + width: 1.75000000000001 + } + left_sample { + s: 35.402012233955531 + width: 1.7500000000000655 + } + left_sample { + s: 35.602023602509014 + width: 1.7500000000000386 + } + left_sample { + s: 35.802034971062469 + width: 1.749999999999984 + } + left_sample { + s: 36.002046339616051 + width: 1.7500000000000921 + } + left_sample { + s: 36.20205770816947 + width: 1.7500000000002012 + } + left_sample { + s: 36.402069076722832 + width: 1.7500000000000653 + } + left_sample { + s: 36.602080445276442 + width: 1.7500000000001465 + } + left_sample { + s: 36.802091813829819 + width: 1.7500000000001181 + } + left_sample { + s: 37.002103182383209 + width: 1.7500000000000651 + } + left_sample { + s: 37.202114550936557 + width: 1.7500000000000651 + } + left_sample { + s: 37.402125919490054 + width: 1.7500000000001745 + } + left_sample { + s: 37.602137288043636 + width: 1.7500000000000346 + } + left_sample { + s: 37.802148656596913 + width: 1.7500000000000082 + } + left_sample { + s: 38.002160025150289 + width: 1.7500000000000089 + } + left_sample { + s: 38.202171393703743 + width: 1.7499999999999805 + } + left_sample { + s: 38.40218276225702 + width: 1.7500000000000902 + } + left_sample { + s: 38.602194130810382 + width: 1.7499999999999802 + } + left_sample { + s: 38.802205499363758 + width: 1.7500000000000089 + } + left_sample { + s: 39.002216867917355 + width: 1.7500000000000902 + } + left_sample { + s: 39.202228236470809 + width: 1.7499999999999776 + } + left_sample { + s: 39.402239605024086 + width: 1.7499999999999227 + } + left_sample { + s: 39.602250973577462 + width: 1.7499999999998679 + } + left_sample { + s: 39.802262342130838 + width: 1.7499999999998959 + } + left_sample { + s: 40.0022737106842 + width: 1.7499999999999225 + } + left_sample { + s: 40.202285079237562 + width: 1.7499999999998683 + } + left_sample { + s: 40.402296447791144 + width: 1.7499999999999236 + } + left_sample { + s: 40.602307816344712 + width: 1.7499999999998672 + } + left_sample { + s: 40.802319184897989 + width: 1.7500000000000036 + } + left_sample { + s: 41.002330553451237 + width: 1.7499999999999236 + } + left_sample { + s: 41.20234192200482 + width: 1.7500000000000049 + } + left_sample { + s: 41.402353290558288 + width: 1.7500000000000062 + } + left_sample { + s: 41.602364659111842 + width: 1.7500000000000313 + } + left_sample { + s: 41.802376027665311 + width: 1.7499999999999747 + } + left_sample { + s: 42.0023873962187 + width: 1.7500000000000047 + } + left_sample { + s: 42.202398764772283 + width: 1.7500000000000866 + } + left_sample { + s: 42.402410133325645 + width: 1.7500000000001397 + } + left_sample { + s: 42.602421501879022 + width: 1.7500000000000597 + } + left_sample { + s: 42.80243287043259 + width: 1.75000000000014 + } + left_sample { + s: 43.002444238986172 + width: 1.7500000000000846 + } + left_sample { + s: 43.202455607539534 + width: 1.7500000000001128 + } + left_sample { + s: 43.402466976093 + width: 1.7500000000001668 + } + left_sample { + s: 43.602478344646265 + width: 1.750000000000195 + } + left_sample { + s: 43.802489713199861 + width: 1.7500000000001956 + } + left_sample { + s: 44.002501081753444 + width: 1.7500000000002474 + } + left_sample { + s: 44.2025124503066 + width: 1.7500000000002478 + } + left_sample { + s: 44.402523818860082 + width: 1.7500000000001661 + } + left_sample { + s: 44.602535187413444 + width: 1.7500000000002209 + } + left_sample { + s: 44.802546555966913 + width: 1.7500000000001923 + } + left_sample { + s: 45.002557924520382 + width: 1.7500000000001075 + } + left_sample { + s: 45.202569293073658 + width: 1.7500000000001092 + } + left_sample { + s: 45.402580661627141 + width: 1.7500000000000806 + } + left_sample { + s: 45.602592030180517 + width: 1.7500000000000817 + } + left_sample { + s: 45.802603398734014 + width: 1.7500000000001621 + } + left_sample { + s: 46.002614767287376 + width: 1.7499999999999971 + } + left_sample { + s: 46.202626135840767 + width: 1.7500000000000242 + } + left_sample { + s: 46.405275008788429 + width: 1.7045462093850519 + } + left_sample { + s: 46.580037921587085 + width: 1.7077929087142993 + } + left_sample { + s: 46.754800834385684 + width: 1.71103960804394 + } + left_sample { + s: 46.929563747184112 + width: 1.7142863073738455 + } + left_sample { + s: 47.104326659982767 + width: 1.7175330067035213 + } + left_sample { + s: 47.279089572781288 + width: 1.7207797060329915 + } + left_sample { + s: 47.453852485579887 + width: 1.7240264053630119 + } + left_sample { + s: 47.6286153983785 + width: 1.7272731046925802 + } + left_sample { + s: 47.803378311176765 + width: 1.7305198040219829 + } + left_sample { + s: 47.978141223975484 + width: 1.7337665033514491 + } + left_sample { + s: 48.152904136773955 + width: 1.7370132026812946 + } + left_sample { + s: 48.327667049572725 + width: 1.7402599020111846 + } + left_sample { + s: 48.502429962371316 + width: 1.7435066013405374 + } + left_sample { + s: 48.677192875169595 + width: 1.7467533006703742 + } + left_sample { + s: 48.89446870767695 + width: 1.7038067791879112 + } + left_sample { + s: 49.064691439921788 + width: 1.7073601038650055 + } + left_sample { + s: 49.234914172166171 + width: 1.7109134285430225 + } + left_sample { + s: 49.405136904410725 + width: 1.7144667532212192 + } + left_sample { + s: 49.575359636655541 + width: 1.7180200778991059 + } + left_sample { + s: 49.745582368900152 + width: 1.7215734025770484 + } + left_sample { + s: 49.915805101144933 + width: 1.7251267272549038 + } + left_sample { + s: 50.086027833389466 + width: 1.728680051932189 + } + left_sample { + s: 50.256250565634048 + width: 1.7322333766105573 + } + left_sample { + s: 50.426473297878772 + width: 1.7357867012883936 + } + left_sample { + s: 50.596696030123347 + width: 1.7393400259662384 + } + left_sample { + s: 50.766918762367951 + width: 1.7428933506445472 + } + left_sample { + s: 50.937141494612746 + width: 1.7122866516116459 + } + left_sample { + s: 51.1192028141192 + width: 1.6571467121271966 + } + left_sample { + s: 51.281061563556669 + width: 1.6633369313183521 + } + left_sample { + s: 51.442920312994346 + width: 1.6695271505097786 + } + left_sample { + s: 51.604779062431859 + width: 1.6757173697018979 + } + left_sample { + s: 51.766637811869323 + width: 1.68190758889346 + } + left_sample { + s: 51.928496561306851 + width: 1.6880978080848918 + } + left_sample { + s: 52.090355310744414 + width: 1.6942880272767669 + } + left_sample { + s: 52.252214060181828 + width: 1.7004782464682655 + } + left_sample { + s: 52.414072809619505 + width: 1.706668465659487 + } + left_sample { + s: 52.575931559056876 + width: 1.7128586848510754 + } + left_sample { + s: 52.7377903084946 + width: 1.7190489040423946 + } + left_sample { + s: 52.899649057932123 + width: 1.7252391232340183 + } + left_sample { + s: 53.061507807369807 + width: 1.7314293424251044 + } + left_sample { + s: 53.223366556807264 + width: 1.7376195616168679 + } + left_sample { + s: 53.385225306244692 + width: 1.7361305931596187 + } + left_sample { + s: 53.535661210641251 + width: 1.7103765340275698 + } + left_sample { + s: 53.689999802215809 + width: 1.7160370291669369 + } + left_sample { + s: 53.844338393790366 + width: 1.7216975243058208 + } + left_sample { + s: 53.998676985364973 + width: 1.7273580194437872 + } + left_sample { + s: 54.153015576939609 + width: 1.7330185145831594 + } + left_sample { + s: 54.307354168514195 + width: 1.7386790097226739 + } + left_sample { + s: 54.461692760088695 + width: 1.7323197473081078 + } + left_sample { + s: 54.665935780616486 + width: 1.6809873739043004 + } + left_sample { + s: 54.824380910618657 + width: 1.6867384260787182 + } + left_sample { + s: 54.982826040620893 + width: 1.6924894782531832 + } + left_sample { + s: 55.141271170623064 + width: 1.6982405304276418 + } + left_sample { + s: 55.299716300625292 + width: 1.7039915826023764 + } + left_sample { + s: 55.458161430627634 + width: 1.7097426347775693 + } + left_sample { + s: 55.616606560629869 + width: 1.7154936869519686 + } + left_sample { + s: 55.775051690631933 + width: 1.7212447391265151 + } + left_sample { + s: 55.933496820634218 + width: 1.7269957913012017 + } + left_sample { + s: 56.0919419506365 + width: 1.7327468434756381 + } + left_sample { + s: 56.250387080638674 + width: 1.7384978956504389 + } + left_sample { + s: 56.408832210640846 + width: 1.7382631653591363 + } + left_sample { + s: 56.553977533807334 + width: 1.7143851358298732 + } + left_sample { + s: 56.753223118960371 + width: 1.7173709564130593 + } + left_sample { + s: 56.952424168022134 + width: 1.7201681962611712 + } + left_sample { + s: 57.151584753684595 + width: 1.7227831603418249 + } + left_sample { + s: 57.35070873530254 + width: 1.7252221440565063 + } + left_sample { + s: 57.549799763669434 + width: 1.7274914275517201 + } + left_sample { + s: 57.748861285838053 + width: 1.729597270377621 + } + left_sample { + s: 57.947896549981593 + width: 1.7315244703797095 + } + left_sample { + s: 58.146908610289984 + width: 1.7332995224521572 + } + left_sample { + s: 58.345900331902719 + width: 1.734931763457775 + } + left_sample { + s: 58.544874395870735 + width: 1.7364272742299249 + } + left_sample { + s: 58.743833304148026 + width: 1.7377920906752209 + } + left_sample { + s: 58.942779384607512 + width: 1.7390322005253542 + } + left_sample { + s: 59.141714796080507 + width: 1.7401535403660473 + } + left_sample { + s: 59.3406415334168 + width: 1.7411619929298514 + } + left_sample { + s: 59.539561432564724 + width: 1.742063384640701 + } + left_sample { + s: 59.738476175663934 + width: 1.7428634833965828 + } + left_sample { + s: 59.937387296157368 + width: 1.7435679965854831 + } + left_sample { + s: 60.136296183911625 + width: 1.7441825693160693 + } + left_sample { + s: 60.335204090351745 + width: 1.7447127828567228 + } + left_sample { + s: 60.5341121336035 + width: 1.7451641532670887 + } + left_sample { + s: 60.733021303644449 + width: 1.7455421302135119 + } + left_sample { + s: 60.931932467461309 + width: 1.7458520959561428 + } + left_sample { + s: 61.13084637421376 + width: 1.7460993644962861 + } + left_sample { + s: 61.329763660402456 + width: 1.7462891808719885 + } + left_sample { + s: 61.528684855040041 + width: 1.7464267205928548 + } + left_sample { + s: 61.72761038482539 + width: 1.7465170892009478 + } + left_sample { + s: 61.926540579319919 + width: 1.7465653219490451 + } + left_sample { + s: 62.125475676125411 + width: 1.7465763835855834 + } + left_sample { + s: 62.324415826061234 + width: 1.7465551682357172 + } + left_sample { + s: 62.523361098343877 + width: 1.7465064993694308 + } + left_sample { + s: 62.722311485764074 + width: 1.74643512984659 + } + left_sample { + s: 62.921266909865345 + width: 1.7463457420302484 + } + left_sample { + s: 63.120227226120427 + width: 1.7462429479584445 + } + left_sample { + s: 63.319192229106612 + width: 1.746131289568396 + } + left_sample { + s: 63.518161657681482 + width: 1.7460152389611925 + } + left_sample { + s: 63.71713520015583 + width: 1.7458991987018682 + } + left_sample { + s: 63.9161124994651 + width: 1.7457875021455453 + } + left_sample { + s: 64.115093158341665 + width: 1.7456844137838088 + } + left_sample { + s: 64.314076744482747 + width: 1.7455941296011459 + } + left_sample { + s: 64.5130627957203 + width: 1.7455207774397241 + } + left_sample { + s: 64.712050825187291 + width: 1.7454684173604043 + } + left_sample { + s: 64.911040326484837 + width: 1.745441041997609 + } + left_sample { + s: 65.110030778847687 + width: 1.7454425768996913 + } + left_sample { + s: 65.309021652309283 + width: 1.74547688085287 + } + left_sample { + s: 65.508012412866748 + width: 1.7455477461763969 + } + left_sample { + s: 65.707002527645415 + width: 1.7456588981052958 + } + left_sample { + s: 65.905991470063285 + width: 1.7458114853915638 + } + left_sample { + s: 66.10497872499684 + width: 1.7459957083067854 + } + left_sample { + s: 66.303963794006421 + width: 1.7461902993687859 + } + left_sample { + s: 66.502946335281322 + width: 1.7463769455907896 + } + left_sample { + s: 66.701926441717717 + width: 1.7465527319916831 + } + left_sample { + s: 66.900904284031469 + width: 1.7467177176982212 + } + left_sample { + s: 67.0998800267398 + width: 1.7468719585087285 + } + left_sample { + s: 67.2988538285142 + width: 1.747015506902817 + } + left_sample { + s: 67.4978258425342 + width: 1.7471484120535878 + } + left_sample { + s: 67.696796216840738 + width: 1.7472707198391462 + } + left_sample { + s: 67.89576509468904 + width: 1.7473824728541483 + } + left_sample { + s: 68.094732614902483 + width: 1.7474837104223073 + } + left_sample { + s: 68.293698912226361 + width: 1.7475744686106274 + } + left_sample { + s: 68.4926641176806 + width: 1.7476547802403375 + } + left_sample { + s: 68.691628358914556 + width: 1.7477246749032451 + } + left_sample { + s: 68.890591760559445 + width: 1.7477841789738191 + } + left_sample { + s: 69.089554444582532 + width: 1.7478333156244035 + } + left_sample { + s: 69.2885165306413 + width: 1.7478721048400281 + } + left_sample { + s: 69.4874781364359 + width: 1.7479005634335731 + } + left_sample { + s: 69.686439378064151 + width: 1.7479187050614606 + } + left_sample { + s: 69.88540037037447 + width: 1.7479265402395052 + } + left_sample { + s: 70.084361227320045 + width: 1.7479240763592545 + } + left_sample { + s: 70.2833220623119 + width: 1.7479113177045529 + } + left_sample { + s: 70.482282988573587 + width: 1.7478882654686589 + } + left_sample { + s: 70.68124411949421 + width: 1.7478549829529648 + } + left_sample { + s: 70.8802055689828 + width: 1.7478126091885651 + } + left_sample { + s: 71.079167451821164 + width: 1.7477653308037542 + } + left_sample { + s: 71.278129878222842 + width: 1.7477188752078991 + } + left_sample { + s: 71.477092879511758 + width: 1.7476756444607671 + } + left_sample { + s: 71.6760564285364 + width: 1.7476356542518534 + } + left_sample { + s: 71.875020496419182 + width: 1.7475988691541122 + } + left_sample { + s: 72.073985053911883 + width: 1.7475652535402786 + } + left_sample { + s: 72.2729500714176 + width: 1.7475347715820153 + } + left_sample { + s: 72.471915519013081 + width: 1.7475073872527134 + } + left_sample { + s: 72.670881366470681 + width: 1.7474830643269788 + } + left_sample { + s: 72.869847583281654 + width: 1.7474617663838667 + } + left_sample { + s: 73.068814138677482 + width: 1.7474434568067614 + } + left_sample { + s: 73.267781001652438 + width: 1.7474280987841282 + } + left_sample { + s: 73.466748140985885 + width: 1.7474156553116431 + } + left_sample { + s: 73.665715525265341 + width: 1.7474060891928991 + } + left_sample { + s: 73.864683122906911 + width: 1.7473993630402702 + } + left_sample { + s: 74.063650902180029 + width: 1.7473954392770203 + } + left_sample { + s: 74.262618831227513 + width: 1.747394280136688 + } + left_sample { + s: 74.461586878089335 + width: 1.747395847665917 + } + left_sample { + s: 74.6605550107244 + width: 1.7474001037239459 + } + left_sample { + s: 74.859523197032644 + width: 1.7474070099854704 + } + left_sample { + s: 75.058491404877827 + width: 1.7474165279407463 + } + left_sample { + s: 75.257459602109549 + width: 1.7474286188962334 + } + left_sample { + s: 75.456427756585271 + width: 1.7474432438353285 + } + left_sample { + s: 75.655395836193264 + width: 1.7474603027547451 + } + left_sample { + s: 75.854363808874254 + width: 1.7474792302864381 + } + left_sample { + s: 76.053331642673925 + width: 1.7474986227462475 + } + left_sample { + s: 76.252299316211335 + width: 1.7475173591036397 + } + left_sample { + s: 76.451266834243526 + width: 1.7475353031133447 + } + left_sample { + s: 76.650234205509847 + width: 1.7475524629689179 + } + left_sample { + s: 76.849201438722034 + width: 1.7475688468487056 + } + left_sample { + s: 77.048168542565577 + width: 1.7475844629158248 + } + left_sample { + s: 77.247135525702021 + width: 1.7475993193196104 + } + left_sample { + s: 77.4461023967699 + width: 1.7476134241949071 + } + left_sample { + s: 77.645069164386371 + width: 1.7476267856610523 + } + left_sample { + s: 77.844035837149235 + width: 1.7476394118238656 + } + left_sample { + s: 78.043002423638185 + width: 1.7476513107746445 + } + left_sample { + s: 78.241968932417038 + width: 1.7476624905904796 + } + left_sample { + s: 78.440935372034232 + width: 1.7476729593336506 + } + left_sample { + s: 78.6399017510257 + width: 1.7476827250538256 + } + left_sample { + s: 78.838868077915649 + width: 1.7476917957849989 + } + left_sample { + s: 79.037834361218046 + width: 1.7477001795478664 + } + left_sample { + s: 79.236800609439484 + width: 1.7477078843501501 + } + left_sample { + s: 79.435766831079235 + width: 1.7477149181844767 + } + left_sample { + s: 79.634733034631466 + width: 1.7477212890303506 + } + left_sample { + s: 79.833699228587619 + width: 1.7477270048535196 + } + left_sample { + s: 80.032665421436789 + width: 1.7477320736067792 + } + left_sample { + s: 80.231631621668072 + width: 1.7477365032282657 + } + left_sample { + s: 80.430597837771913 + width: 1.7477403023318498 + } + left_sample { + s: 80.629564078242211 + width: 1.7477435070189138 + } + left_sample { + s: 80.828530351576745 + width: 1.7477463870970471 + } + left_sample { + s: 81.027496665660578 + width: 1.7477493277325256 + } + left_sample { + s: 81.226463022025769 + width: 1.7477524676529916 + } + left_sample { + s: 81.425429418456758 + width: 1.7477558063437886 + } + left_sample { + s: 81.6243958526868 + width: 1.7477593417056068 + } + left_sample { + s: 81.823362322447338 + width: 1.7477630661360051 + } + left_sample { + s: 82.0223288254678 + width: 1.7477669837965195 + } + left_sample { + s: 82.221295359475789 + width: 1.7477710927095158 + } + left_sample { + s: 82.420261922197867 + width: 1.7477753907720013 + } + left_sample { + s: 82.619228511358585 + width: 1.7477798758796241 + } + left_sample { + s: 82.818195124681566 + width: 1.7477845459268639 + } + left_sample { + s: 83.017161759888936 + width: 1.7477893988078672 + } + left_sample { + s: 83.216128414701728 + width: 1.7477944324149366 + } + left_sample { + s: 83.415095086839983 + width: 1.7477996446396733 + } + left_sample { + s: 83.614061774023057 + width: 1.7478050333728201 + } + left_sample { + s: 83.813028473969368 + width: 1.7478105965039408 + } + left_sample { + s: 84.011995184396667 + width: 1.7478163319220905 + } + left_sample { + s: 84.210961903022223 + width: 1.7478222375142509 + } + left_sample { + s: 84.409928627562877 + width: 1.7478283111673676 + } + left_sample { + s: 84.608895355735285 + width: 1.7478345507671109 + } + left_sample { + s: 84.807862085255621 + width: 1.747840954197557 + } + left_sample { + s: 85.006828813840386 + width: 1.7478475193430487 + } + left_sample { + s: 85.205795539205909 + width: 1.747854244086211 + } + left_sample { + s: 85.404762259068733 + width: 1.7478611261176604 + } + left_sample { + s: 85.603728971145387 + width: 1.7478681334777768 + } + left_sample { + s: 85.802695673160528 + width: 1.7478751704969586 + } + left_sample { + s: 86.001662363733416 + width: 1.747882163651727 + } + left_sample { + s: 86.200629043264755 + width: 1.7478891060332484 + } + left_sample { + s: 86.399595712367031 + width: 1.7478959982130957 + } + left_sample { + s: 86.5985623716527 + width: 1.7479028407626052 + } + left_sample { + s: 86.797529021733922 + width: 1.7479096342531781 + } + left_sample { + s: 86.99649566322293 + width: 1.7479163792563197 + } + left_sample { + s: 87.195462296731719 + width: 1.7479230763428348 + } + left_sample { + s: 87.3944289228722 + width: 1.7479297260844491 + } + left_sample { + s: 87.593395542256275 + width: 1.7479363290519996 + } + left_sample { + s: 87.792362155495468 + width: 1.7479428858162727 + } + left_sample { + s: 87.9913287632016 + width: 1.7479493969486308 + } + left_sample { + s: 88.190295365986088 + width: 1.7479558630195169 + } + left_sample { + s: 88.3892619644607 + width: 1.7479622846003058 + } + left_sample { + s: 88.5882285592366 + width: 1.7479686622611292 + } + left_sample { + s: 88.787195150925157 + width: 1.747974996573231 + } + left_sample { + s: 88.98616174013803 + width: 1.7479812881066024 + } + left_sample { + s: 89.185128327486112 + width: 1.7479875374319096 + } + left_sample { + s: 89.384094913581052 + width: 1.7479937451201584 + } + left_sample { + s: 89.583061499034 + width: 1.7479999117408116 + } + left_sample { + s: 89.782028084456172 + width: 1.7480060378648021 + } + left_sample { + s: 89.980994670458813 + width: 1.7480121240622144 + } + left_sample { + s: 90.179961257653261 + width: 1.7480181709031077 + } + left_sample { + s: 90.378927846650839 + width: 1.7480241806508272 + } + left_sample { + s: 90.577894438062813 + width: 1.7480301700448997 + } + left_sample { + s: 90.776861032438561 + width: 1.7480361640547979 + } + left_sample { + s: 90.975827629844943 + width: 1.7480421708656073 + } + left_sample { + s: 91.174794230119431 + width: 1.7480481903663736 + } + left_sample { + s: 91.373760833098558 + width: 1.7480542224042153 + } + left_sample { + s: 91.572727438618315 + width: 1.7480602668261453 + } + left_sample { + s: 91.771694046515066 + width: 1.7480663234796143 + } + left_sample { + s: 91.9706606566251 + width: 1.7480723922119339 + } + left_sample { + s: 92.1696272687846 + width: 1.7480784728704664 + } + left_sample { + s: 92.368593882829614 + width: 1.7480845653018628 + } + left_sample { + s: 92.567560498596535 + width: 1.7480906693537244 + } + left_sample { + s: 92.766527115921264 + width: 1.7480967848732465 + } + left_sample { + s: 92.9654937346404 + width: 1.7481029117079003 + } + left_sample { + s: 93.164460354589878 + width: 1.7481090497044243 + } + left_sample { + s: 93.363426975605819 + width: 1.7481151987101564 + } + left_sample { + s: 93.5623935975247 + width: 1.7481213585725859 + } + left_sample { + s: 93.761360220182425 + width: 1.7481275291388769 + } + left_sample { + s: 93.9603268434154 + width: 1.7481337102560526 + } + left_sample { + s: 94.159293467059285 + width: 1.7481399017708135 + } + left_sample { + s: 94.358260090950893 + width: 1.7481461035311636 + } + left_sample { + s: 94.557226714926017 + width: 1.7481523153841358 + } + left_sample { + s: 94.75619333882095 + width: 1.7481585371765787 + } + left_sample { + s: 94.9551599624718 + width: 1.74816476875556 + } + left_sample { + s: 95.154126585714664 + width: 1.7481710099453738 + } + left_sample { + s: 95.353093208385957 + width: 1.7481772587796356 + } + left_sample { + s: 95.552059830322733 + width: 1.7481835094265925 + } + left_sample { + s: 95.751026451437809 + width: 1.7481897572071179 + } + left_sample { + s: 95.949993071764069 + width: 1.7481960017905669 + } + left_sample { + s: 96.148959691345269 + width: 1.7482022432178674 + } + left_sample { + s: 96.347926310225432 + width: 1.7482084815301606 + } + left_sample { + s: 96.546892928448543 + width: 1.7482147167684758 + } + left_sample { + s: 96.745859546058256 + width: 1.7482209489735809 + } + left_sample { + s: 96.944826163098639 + width: 1.7482271781864505 + } + left_sample { + s: 97.143792779613634 + width: 1.7482334044478969 + } + left_sample { + s: 97.342759395647022 + width: 1.7482396277989556 + } + left_sample { + s: 97.541726011242744 + width: 1.7482458482808605 + } + left_sample { + s: 97.7406926264447 + width: 1.7482520659343428 + } + left_sample { + s: 97.939659241296866 + width: 1.7482582808002856 + } + left_sample { + s: 98.138625855842989 + width: 1.7482644929196864 + } + left_sample { + s: 98.337592470127049 + width: 1.7482707023334143 + } + left_sample { + s: 98.536559084192959 + width: 1.7482769090826 + } + left_sample { + s: 98.735525698084686 + width: 1.7482831132082006 + } + left_sample { + s: 98.9344923118458 + width: 1.7482893147506253 + } + left_sample { + s: 99.1334589255206 + width: 1.7482955137515903 + } + left_sample { + s: 99.332425539152752 + width: 1.7483017102515139 + } + left_sample { + s: 99.531392152786154 + width: 1.748307904291591 + } + left_sample { + s: 99.730358766464775 + width: 1.7483140959126391 + } + left_sample { + s: 99.929325380232555 + width: 1.7483202851555482 + } + left_sample { + s: 100.12829199413333 + width: 1.7483264721698502 + } + left_sample { + s: 100.32725860821087 + width: 1.7483326579033911 + } + left_sample { + s: 100.52622522250338 + width: 1.7483388439662657 + } + left_sample { + s: 100.72519183701246 + width: 1.7483450308303137 + } + left_sample { + s: 100.9241584517268 + width: 1.7483512184858561 + } + left_sample { + s: 101.12312506663427 + width: 1.7483574069214376 + } + left_sample { + s: 101.32209168172321 + width: 1.7483635961262396 + } + left_sample { + s: 101.52105829698193 + width: 1.7483697860893568 + } + left_sample { + s: 101.72002491239864 + width: 1.748375976799756 + } + left_sample { + s: 101.91899152796124 + width: 1.748382168246092 + } + left_sample { + s: 102.1179581436587 + width: 1.748388360418129 + } + left_sample { + s: 102.31692475947861 + width: 1.7483945533043348 + } + left_sample { + s: 102.51589137540958 + width: 1.7484007468943512 + } + left_sample { + s: 102.71485799143966 + width: 1.7484069411763234 + } + left_sample { + s: 102.913824607557 + width: 1.7484131361397441 + } + left_sample { + s: 103.11279122375012 + width: 1.7484193317739249 + } + left_sample { + s: 103.31175784000713 + width: 1.7484255280676124 + } + left_sample { + s: 103.51072445631614 + width: 1.7484317250096364 + } + left_sample { + s: 103.70969107266545 + width: 1.7484379225891937 + } + left_sample { + s: 103.90865768904341 + width: 1.748444120795358 + } + left_sample { + s: 104.10762430543835 + width: 1.7484503196173027 + } + left_sample { + s: 104.30659092183825 + width: 1.7484565190437957 + } + left_sample { + s: 104.50555753823137 + width: 1.7484627190640725 + } + left_sample { + s: 104.704524154606 + width: 1.7484689196670167 + } + left_sample { + s: 104.9034907709505 + width: 1.748475120839367 + } + left_sample { + s: 105.102457387253 + width: 1.7484813224774098 + } + left_sample { + s: 105.30142400350199 + width: 1.7484875242291942 + } + left_sample { + s: 105.5003906196919 + width: 1.7484937257979998 + } + left_sample { + s: 105.69935723582545 + width: 1.7484999271694739 + } + left_sample { + s: 105.89832385190573 + width: 1.7485061283463204 + } + left_sample { + s: 106.09729046793591 + width: 1.7485123293319169 + } + left_sample { + s: 106.29625708391929 + width: 1.7485185301288002 + } + left_sample { + s: 106.49522369985878 + width: 1.7485247307400011 + } + left_sample { + s: 106.69419031575767 + width: 1.7485309311684816 + } + left_sample { + s: 106.89315693161915 + width: 1.7485371314175093 + } + left_sample { + s: 107.09212354744621 + width: 1.7485433314894441 + } + left_sample { + s: 107.29109016324213 + width: 1.7485495313875883 + } + left_sample { + s: 107.49005677901003 + width: 1.7485557311147018 + } + left_sample { + s: 107.68902339475305 + width: 1.7485619306739011 + } + left_sample { + s: 107.88799001047445 + width: 1.7485681300682436 + } + left_sample { + s: 108.0869566261773 + width: 1.7485743293003961 + } + left_sample { + s: 108.28592324186454 + width: 1.7485805283731009 + } + left_sample { + s: 108.4848898575396 + width: 1.7485867272896181 + } + left_sample { + s: 108.68385647320567 + width: 1.7485929260531716 + } + left_sample { + s: 108.88282308886565 + width: 1.7485991246661912 + } + left_sample { + s: 109.08178970452279 + width: 1.7486053231316177 + } + left_sample { + s: 109.28075632018046 + width: 1.7486115214527045 + } + left_sample { + s: 109.47972293584154 + width: 1.7486177196325037 + } + left_sample { + s: 109.67868955150917 + width: 1.7486239176732337 + } + left_sample { + s: 109.87765616718666 + width: 1.7486301155837869 + } + left_sample { + s: 110.07662278287708 + width: 1.748636313412 + } + left_sample { + s: 110.27558939858304 + width: 1.7486425112625437 + } + left_sample { + s: 110.47455601430464 + width: 1.7486487091620311 + } + left_sample { + s: 110.67352263004081 + width: 1.7486549071098916 + } + left_sample { + s: 110.8724892457908 + width: 1.7486611051050955 + } + left_sample { + s: 111.07145586155362 + width: 1.7486673031468567 + } + left_sample { + s: 111.27042247732872 + width: 1.7486735012344075 + } + left_sample { + s: 111.4693890931151 + width: 1.7486796993671463 + } + left_sample { + s: 111.66835570891185 + width: 1.7486858975441604 + } + left_sample { + s: 111.86732232471822 + width: 1.748692095764516 + } + left_sample { + s: 112.06628894053325 + width: 1.7486982940273628 + } + left_sample { + s: 112.26525555635617 + width: 1.7487044923323105 + } + left_sample { + s: 112.46422217218631 + width: 1.7487106906785856 + } + left_sample { + s: 112.66318878802244 + width: 1.7487168890647076 + } + left_sample { + s: 112.86215540386415 + width: 1.7487230874907929 + } + left_sample { + s: 113.06112201971017 + width: 1.7487292859553065 + } + left_sample { + s: 113.26008863556 + width: 1.7487354844579315 + } + left_sample { + s: 113.45905525141258 + width: 1.74874168299781 + } + left_sample { + s: 113.65802186726718 + width: 1.7487478815738093 + } + left_sample { + s: 113.85698848312288 + width: 1.7487540801855666 + } + left_sample { + s: 114.05595509897887 + width: 1.7487602788319607 + } + left_sample { + s: 114.25492171483438 + width: 1.7487664775125538 + } + left_sample { + s: 114.45388833068846 + width: 1.7487726762260547 + } + left_sample { + s: 114.65285494654036 + width: 1.7487788749724502 + } + left_sample { + s: 114.85182156238906 + width: 1.7487850737466721 + } + left_sample { + s: 115.05078817823399 + width: 1.748791272528686 + } + left_sample { + s: 115.24975479407476 + width: 1.7487974712994494 + } + left_sample { + s: 115.4487214099112 + width: 1.7488036700578933 + } + left_sample { + s: 115.64768802574412 + width: 1.7488098688052078 + } + left_sample { + s: 115.8466546415732 + width: 1.7488160675406164 + } + left_sample { + s: 116.04562125739919 + width: 1.748822266265 + } + left_sample { + s: 116.2445878732219 + width: 1.7488284649785348 + } + left_sample { + s: 116.44355448904177 + width: 1.7488346636811523 + } + left_sample { + s: 116.64252110485896 + width: 1.7488408623734435 + } + left_sample { + s: 116.84148772067356 + width: 1.7488470610545475 + } + left_sample { + s: 117.04045433648618 + width: 1.7488532597259081 + } + left_sample { + s: 117.23942095229661 + width: 1.7488594583874917 + } + left_sample { + s: 117.43838756810543 + width: 1.7488656570392527 + } + left_sample { + s: 117.63735418391263 + width: 1.7488718556812273 + } + left_sample { + s: 117.83632079971851 + width: 1.7488780543141762 + } + left_sample { + s: 118.03528741552323 + width: 1.7488842529376882 + } + left_sample { + s: 118.23425403132725 + width: 1.7488904515525219 + } + left_sample { + s: 118.43322064713053 + width: 1.7488966501587031 + } + left_sample { + s: 118.63218726293347 + width: 1.7489028487562306 + } + left_sample { + s: 118.83115387873617 + width: 1.7489090473456819 + } + left_sample { + s: 119.03012049453892 + width: 1.7489152459270085 + } + left_sample { + s: 119.22908711034189 + width: 1.7489214445002976 + } + left_sample { + s: 119.42805372614545 + width: 1.7489276430662717 + } + left_sample { + s: 119.62702034194962 + width: 1.7489338416242468 + } + left_sample { + s: 119.82598695775499 + width: 1.7489400401774573 + } + left_sample { + s: 120.02495357356129 + width: 1.7489462387318035 + } + left_sample { + s: 120.22392018936868 + width: 1.7489524372889385 + } + left_sample { + s: 120.42288680517723 + width: 1.7489586358490778 + } + left_sample { + s: 120.62185342098651 + width: 1.7489648344116313 + } + left_sample { + s: 120.82082003679695 + width: 1.7489710329773607 + } + left_sample { + s: 121.01978665260823 + width: 1.7489772315454248 + } + left_sample { + s: 121.21875326842026 + width: 1.7489834301160918 + } + left_sample { + s: 121.41771988423316 + width: 1.7489896286897044 + } + left_sample { + s: 121.61668650004654 + width: 1.7489958272656481 + } + left_sample { + s: 121.81565311586067 + width: 1.7490020258438579 + } + left_sample { + s: 122.01461973167535 + width: 1.749008224424863 + } + left_sample { + s: 122.21358634749059 + width: 1.7490144230080509 + } + left_sample { + s: 122.41255296330611 + width: 1.7490206215933628 + } + left_sample { + s: 122.61151957912209 + width: 1.7490268201811385 + } + left_sample { + s: 122.81048619493843 + width: 1.7490330187711336 + } + left_sample { + s: 123.00945281075498 + width: 1.7490392173631177 + } + left_sample { + s: 123.20841942657179 + width: 1.7490454159572992 + } + left_sample { + s: 123.40738604238858 + width: 1.7490516145533854 + } + left_sample { + s: 123.60635265820554 + width: 1.7490578131515333 + } + left_sample { + s: 123.80531927402251 + width: 1.7490640117513685 + } + left_sample { + s: 124.00428588983966 + width: 1.7490702103532874 + } + left_sample { + s: 124.20325250565648 + width: 1.7490764089567752 + } + left_sample { + s: 124.40221912147318 + width: 1.7490826075621377 + } + left_sample { + s: 124.60118573728963 + width: 1.7490888061696004 + } + left_sample { + s: 124.80015235310563 + width: 1.7490950047764684 + } + left_sample { + s: 124.99911896892162 + width: 1.7491012033832927 + } + left_sample { + s: 125.19808558473716 + width: 1.7491074019891832 + } + left_sample { + s: 125.39705220055264 + width: 1.749113600594743 + } + left_sample { + s: 125.59601881636749 + width: 1.749119799199004 + } + left_sample { + s: 125.79498543218237 + width: 1.7491259978029261 + } + left_sample { + s: 125.993952047997 + width: 1.7491321964062454 + } + left_sample { + s: 126.19291866381134 + width: 1.7491383950090813 + } + left_sample { + s: 126.39188527962558 + width: 1.7491445936112449 + } + left_sample { + s: 126.59085189543963 + width: 1.749150792212701 + } + left_sample { + s: 126.78981851125349 + width: 1.7491569908134856 + } + left_sample { + s: 126.98878512706722 + width: 1.7491631894141144 + } + left_sample { + s: 127.18775174288078 + width: 1.7491693880137851 + } + left_sample { + s: 127.38671835869428 + width: 1.7491755866132894 + } + left_sample { + s: 127.5856849745076 + width: 1.7491817852119158 + } + left_sample { + s: 127.78465159032095 + width: 1.7491879838102813 + } + left_sample { + s: 127.98361820613424 + width: 1.7491941824082349 + } + left_sample { + s: 128.18258482194739 + width: 1.7492003810053738 + } + left_sample { + s: 128.38155143776069 + width: 1.7492065796026379 + } + left_sample { + s: 128.58051805357371 + width: 1.7492127781988953 + } + left_sample { + s: 128.77948466938693 + width: 1.7492189767950195 + } + left_sample { + s: 128.97845128520012 + width: 1.7492251753907524 + } + left_sample { + s: 129.17741790101337 + width: 1.7492313739858572 + } + left_sample { + s: 129.37638451682665 + width: 1.7492375725807816 + } + left_sample { + s: 129.57535113264009 + width: 1.7492437711755902 + } + left_sample { + s: 129.77431774845348 + width: 1.7492499697702146 + } + left_sample { + s: 129.97328436426693 + width: 1.7492561683652978 + } + left_sample { + s: 130.17225098008049 + width: 1.749262366960425 + } + left_sample { + s: 130.37121759589419 + width: 1.7492685655557236 + } + left_sample { + s: 130.57018421170793 + width: 1.7492747641511248 + } + left_sample { + s: 130.76915082752168 + width: 1.749280962746562 + } + left_sample { + s: 130.96811744333559 + width: 1.7492871613424645 + } + left_sample { + s: 131.16708405914932 + width: 1.7492933599380711 + } + left_sample { + s: 131.36605067496342 + width: 1.7492995585342346 + } + left_sample { + s: 131.56501729077729 + width: 1.7493057571304083 + } + left_sample { + s: 131.76398390659125 + width: 1.7493119557265639 + } + left_sample { + s: 131.96295052240535 + width: 1.7493181543229639 + } + left_sample { + s: 132.16191713821954 + width: 1.7493243529195805 + } + left_sample { + s: 132.36088375403355 + width: 1.7493305515160664 + } + left_sample { + s: 132.55985036984774 + width: 1.7493367501129553 + } + left_sample { + s: 132.75881698566187 + width: 1.7493429487095615 + } + left_sample { + s: 132.95778360147605 + width: 1.7493491473064582 + } + left_sample { + s: 133.15675021729035 + width: 1.7493553459037283 + } + left_sample { + s: 133.35571683310448 + width: 1.7493615445007518 + } + left_sample { + s: 133.55468344891858 + width: 1.749367743097918 + } + left_sample { + s: 133.75365006473282 + width: 1.7493739416952245 + } + left_sample { + s: 133.95261668054695 + width: 1.7493801402924032 + } + left_sample { + s: 134.1515832963612 + width: 1.749386338890252 + } + left_sample { + s: 134.35054991217524 + width: 1.7493925374876778 + } + left_sample { + s: 134.54951652798937 + width: 1.7493987360851659 + } + left_sample { + s: 134.74848314380353 + width: 1.7494049346828235 + } + left_sample { + s: 134.94744975961754 + width: 1.7494111332800961 + } + left_sample { + s: 135.14641637543178 + width: 1.7494173318777115 + } + left_sample { + s: 135.34538299124577 + width: 1.7494235304750696 + } + left_sample { + s: 135.54434960705976 + width: 1.7494297290723766 + } + left_sample { + s: 135.74331622287383 + width: 1.7494359276696665 + } + left_sample { + s: 135.94228283868782 + width: 1.7494421262670539 + } + left_sample { + s: 136.1412494545018 + width: 1.7494483248641413 + } + left_sample { + s: 136.34021607031582 + width: 1.7494545234615109 + } + left_sample { + s: 136.53918268612975 + width: 1.7494607220586937 + } + left_sample { + s: 136.73814930194374 + width: 1.7494669206558218 + } + left_sample { + s: 136.93711591775764 + width: 1.7494731192529225 + } + left_sample { + s: 137.13608253357157 + width: 1.7494793178500361 + } + left_sample { + s: 137.33504914938555 + width: 1.7494855164472232 + } + left_sample { + s: 137.53401576519943 + width: 1.7494917150443843 + } + left_sample { + s: 137.73298238101341 + width: 1.7494979136413369 + } + left_sample { + s: 137.93194899682729 + width: 1.7495041122383783 + } + left_sample { + s: 138.13091561264122 + width: 1.7495103108353454 + } + left_sample { + s: 138.32988222845515 + width: 1.749516509432413 + } + left_sample { + s: 138.52884884426913 + width: 1.7495227080293516 + } + left_sample { + s: 138.727815460083 + width: 1.7495289066263295 + } + left_sample { + s: 138.92678207589688 + width: 1.7495351052233334 + } + left_sample { + s: 139.12574869171075 + width: 1.749541303820249 + } + left_sample { + s: 139.32471530752474 + width: 1.749547502417061 + } + left_sample { + s: 139.52368192333878 + width: 1.749553701014001 + } + left_sample { + s: 139.72264853915271 + width: 1.7495598996111434 + } + left_sample { + s: 139.92161515496664 + width: 1.7495660982080645 + } + left_sample { + s: 140.12058177078052 + width: 1.7495722968048815 + } + left_sample { + s: 140.31954838659451 + width: 1.7495784954017948 + } + left_sample { + s: 140.51851500240841 + width: 1.7495846939987247 + } + left_sample { + s: 140.71748161822242 + width: 1.7495908925959258 + } + left_sample { + s: 140.91644823403641 + width: 1.7495970911927932 + } + left_sample { + s: 141.11541484985034 + width: 1.7496032897897846 + } + left_sample { + s: 141.31438146566435 + width: 1.7496094883867719 + } + left_sample { + s: 141.51334808147831 + width: 1.7496156869839179 + } + left_sample { + s: 141.71231469729216 + width: 1.749621885580757 + } + left_sample { + s: 141.91128131310617 + width: 1.749628084177798 + } + left_sample { + s: 142.11024792892022 + width: 1.7496342827749989 + } + left_sample { + s: 142.30921454473417 + width: 1.7496404813719213 + } + left_sample { + s: 142.50818116054825 + width: 1.7496466799688901 + } + left_sample { + s: 142.70714777636223 + width: 1.7496528785660572 + } + left_sample { + s: 142.90611439217625 + width: 1.7496590771629965 + } + left_sample { + s: 143.10508100799021 + width: 1.749665275760103 + } + left_sample { + s: 143.30404762380422 + width: 1.7496714743571449 + } + left_sample { + s: 143.50301423961815 + width: 1.7496776729540975 + } + left_sample { + s: 143.70198085543225 + width: 1.7496838715512346 + } + left_sample { + s: 143.90094747124616 + width: 1.7496900701481948 + } + left_sample { + s: 144.09991408706026 + width: 1.7496962687453761 + } + left_sample { + s: 144.29888070287416 + width: 1.7497024673424511 + } + left_sample { + s: 144.49784731868809 + width: 1.7497086659395027 + } + left_sample { + s: 144.69681393450222 + width: 1.7497148645365919 + } + left_sample { + s: 144.89578055031623 + width: 1.7497210631337217 + } + left_sample { + s: 145.09474716613019 + width: 1.7497272617306927 + } + left_sample { + s: 145.29371378194418 + width: 1.7497334603277364 + } + left_sample { + s: 145.49268039775822 + width: 1.7497396589248408 + } + left_sample { + s: 145.69164701357218 + width: 1.7497458575218459 + } + left_sample { + s: 145.89061362938617 + width: 1.7497520561189555 + } + left_sample { + s: 146.08958024520015 + width: 1.7497582547160548 + } + left_sample { + s: 146.2885468610142 + width: 1.7497644533131698 + } + left_sample { + s: 146.48751347682824 + width: 1.7497706519102738 + } + left_sample { + s: 146.6864800926422 + width: 1.7497768505072893 + } + left_sample { + s: 146.88544670845624 + width: 1.7497830491044455 + } + left_sample { + s: 147.08441332427023 + width: 1.7497892477015164 + } + left_sample { + s: 147.28337994008416 + width: 1.7497954462985248 + } + left_sample { + s: 147.4823465558982 + width: 1.7498016448955513 + } + left_sample { + s: 147.68131317171219 + width: 1.7498078434926596 + } + left_sample { + s: 147.88027978752615 + width: 1.749814042089693 + } + left_sample { + s: 148.07924640334028 + width: 1.7498202406870356 + } + left_sample { + s: 148.27821301915421 + width: 1.7498264392838938 + } + left_sample { + s: 148.47717963496819 + width: 1.74983263788095 + } + left_sample { + s: 148.67614625078212 + width: 1.7498388364780038 + } + left_sample { + s: 148.87511286659617 + width: 1.7498450350751484 + } + left_sample { + s: 149.07407948241027 + width: 1.7498512336721996 + } + left_sample { + s: 149.2730460982242 + width: 1.7498574322691649 + } + left_sample { + s: 149.47201271403819 + width: 1.749863630866193 + } + left_sample { + s: 149.67097932985217 + width: 1.7498698294633503 + } + left_sample { + s: 149.86994594566625 + width: 1.7498760280603842 + } + left_sample { + s: 150.06891256148012 + width: 1.7498822266572631 + } + left_sample { + s: 150.26787917729413 + width: 1.7498884252543485 + } + left_sample { + s: 150.46684579310806 + width: 1.7498946238514341 + } + left_sample { + s: 150.66581240892205 + width: 1.7499008224485113 + } + left_sample { + s: 150.86477902473598 + width: 1.7499070210453955 + } + left_sample { + s: 151.06374564054997 + width: 1.7499132196423814 + } + left_sample { + s: 151.26271225636395 + width: 1.749919418239565 + } + left_sample { + s: 151.46167887217788 + width: 1.7499256168364306 + } + left_sample { + s: 151.66064548799187 + width: 1.7499318154334782 + } + left_sample { + s: 151.85961210380577 + width: 1.7499380140303975 + } + left_sample { + s: 152.0585787196197 + width: 1.7499442126274645 + } + left_sample { + s: 152.25754533543369 + width: 1.7499504112245647 + } + left_sample { + s: 152.45651195124751 + width: 1.7499566098214128 + } + left_sample { + s: 152.65547856706155 + width: 1.7499628084184666 + } + left_sample { + s: 152.85444518287542 + width: 1.7499690070153391 + } + left_sample { + s: 153.05341179868932 + width: 1.7499752056123097 + } + left_sample { + s: 153.25237841450328 + width: 1.7499814042091824 + } + left_sample { + s: 153.45134503031719 + width: 1.749987602806093 + } + left_sample { + s: 153.65031164613103 + width: 1.7499938014031609 + } + left_sample { + s: 153.87421245705966 + width: 1.7500000000000586 + } + right_sample { + s: 0 + width: 1.7499999999999967 + } + right_sample { + s: 0.20001136855364768 + width: 1.7499999999999127 + } + right_sample { + s: 0.40002273710671876 + width: 1.7499999999998856 + } + right_sample { + s: 0.60003410566029847 + width: 1.7499999999999409 + } + right_sample { + s: 0.80004547421347971 + width: 1.7500000000001348 + } + right_sample { + s: 1.0000568427671555 + width: 1.7499999999999962 + } + right_sample { + s: 1.2000682113204328 + width: 1.7499999999999951 + } + right_sample { + s: 1.4000795798740127 + width: 1.749999999999996 + } + right_sample { + s: 1.6000909484271939 + width: 1.7500000000000233 + } + right_sample { + s: 1.8001023169806494 + width: 1.7500000000000777 + } + right_sample { + s: 2.0001136855341328 + width: 1.75000000000005 + } + right_sample { + s: 2.2001250540875064 + width: 1.7500000000000775 + } + right_sample { + s: 2.4001364226407835 + width: 1.7500000000000218 + } + right_sample { + s: 2.600147791194253 + width: 1.7499999999999112 + } + right_sample { + s: 2.8001591597478326 + width: 1.7500000000000766 + } + right_sample { + s: 3.0001705283009996 + width: 1.7499999999999378 + } + right_sample { + s: 3.2001818968545792 + width: 1.7499999999999933 + } + right_sample { + s: 3.4001932654079527 + width: 1.7499999999999096 + } + right_sample { + s: 3.6002046339613263 + width: 1.7499999999998819 + } + right_sample { + s: 3.8002160025149059 + width: 1.7499999999999096 + } + right_sample { + s: 4.0002273710682656 + width: 1.7499999999999085 + } + right_sample { + s: 4.2002387396216534 + width: 1.7500000000000193 + } + right_sample { + s: 4.400250108175233 + width: 1.749999999999909 + } + right_sample { + s: 4.6002614767284822 + width: 1.7499999999999361 + } + right_sample { + s: 4.8002728452820618 + width: 1.7500000000000184 + } + right_sample { + s: 5.0002842138355312 + width: 1.7499999999999631 + } + right_sample { + s: 5.2002955823890007 + width: 1.7499999999999636 + } + right_sample { + s: 5.40030695094225 + width: 1.7499999999999627 + } + right_sample { + s: 5.6003183194958295 + width: 1.7500000000000735 + } + right_sample { + s: 5.8003296880491888 + width: 1.7500000000000178 + } + right_sample { + s: 6.0003410566026583 + width: 1.7500000000001283 + } + right_sample { + s: 6.2003524251559359 + width: 1.7500000000000726 + } + right_sample { + s: 6.4003637937095013 + width: 1.7500000000000455 + } + right_sample { + s: 6.6003751622628748 + width: 1.7500000000001272 + } + right_sample { + s: 6.8003865308163585 + width: 1.7500000000001 + } + right_sample { + s: 7.0003978993698137 + width: 1.7499999999999616 + } + right_sample { + s: 7.2004092679233933 + width: 1.7500000000000435 + } + right_sample { + s: 7.4004206364766709 + width: 1.7500000000000988 + } + right_sample { + s: 7.6004320050301546 + width: 1.7500000000000435 + } + right_sample { + s: 7.8004433735835281 + width: 1.7500000000000426 + } + right_sample { + s: 8.0004547421369 + width: 1.7499999999999323 + } + right_sample { + s: 8.200466110690467 + width: 1.7499999999999316 + } + right_sample { + s: 8.40047747924395 + width: 1.7500000000000147 + } + right_sample { + s: 8.6004888477974326 + width: 1.7499999999998481 + } + right_sample { + s: 8.8005002163506 + width: 1.74999999999993 + } + right_sample { + s: 9.00051158490418 + width: 1.7500000000000142 + } + right_sample { + s: 9.20052295345754 + width: 1.7499999999999307 + } + right_sample { + s: 9.4005343220111328 + width: 1.7499999999999578 + } + right_sample { + s: 9.600545690564493 + width: 1.7499999999999851 + } + right_sample { + s: 9.8005570591178657 + width: 1.7499999999999576 + } + right_sample { + s: 10.000568427671226 + width: 1.7499999999999851 + } + right_sample { + s: 10.200579796224586 + width: 1.7500000000000124 + } + right_sample { + s: 10.400591164778028 + width: 1.7500000000000127 + } + right_sample { + s: 10.6006025333314 + width: 1.7500000000001503 + } + right_sample { + s: 10.800613901884663 + width: 1.750000000000095 + } + right_sample { + s: 11.000625270438244 + width: 1.7500000000000677 + } + right_sample { + s: 11.200636638991575 + width: 1.75000000000015 + } + right_sample { + s: 11.400648007544977 + width: 1.7500000000002049 + } + right_sample { + s: 11.600659376098349 + width: 1.7500000000001499 + } + right_sample { + s: 11.800670744651915 + width: 1.7500000000001776 + } + right_sample { + s: 12.000682113205496 + width: 1.7500000000002052 + } + right_sample { + s: 12.200693481758869 + width: 1.750000000000149 + } + right_sample { + s: 12.400704850312145 + width: 1.750000000000093 + } + right_sample { + s: 12.600716218865628 + width: 1.7500000000001485 + } + right_sample { + s: 12.800727587419111 + width: 1.7500000000000653 + } + right_sample { + s: 13.000738955972622 + width: 1.7500000000000369 + } + right_sample { + s: 13.200750324525995 + width: 1.7499999999998987 + } + right_sample { + s: 13.400761693079367 + width: 1.7499999999999256 + } + right_sample { + s: 13.60077306163285 + width: 1.750000000000008 + } + right_sample { + s: 13.800784430186333 + width: 1.7499999999999531 + } + right_sample { + s: 14.000795798739789 + width: 1.7499999999998979 + } + right_sample { + s: 14.200807167293176 + width: 1.7499999999999241 + } + right_sample { + s: 14.400818535846646 + width: 1.74999999999998 + } + right_sample { + s: 14.600829904400006 + width: 1.7499999999998419 + } + right_sample { + s: 14.800841272953477 + width: 1.7499999999998408 + } + right_sample { + s: 15.000852641506849 + width: 1.7499999999999225 + } + right_sample { + s: 15.200864010060222 + width: 1.7499999999998952 + } + right_sample { + s: 15.400875378613774 + width: 1.7499999999999238 + } + right_sample { + s: 15.600886747167024 + width: 1.7499999999999223 + } + right_sample { + s: 15.800898115720521 + width: 1.7499999999999225 + } + right_sample { + s: 16.000909484274086 + width: 1.7499999999999507 + } + right_sample { + s: 16.200920852827444 + width: 1.7499999999999496 + } + right_sample { + s: 16.400932221380913 + width: 1.7500000000000051 + } + right_sample { + s: 16.600943589934285 + width: 1.7499999999999494 + } + right_sample { + s: 16.800954958487658 + width: 1.7499999999999216 + } + right_sample { + s: 17.000966327040921 + width: 1.7499999999998659 + } + right_sample { + s: 17.200977695594418 + width: 1.7499999999998663 + } + right_sample { + s: 17.400989064147982 + width: 1.7499999999998943 + } + right_sample { + s: 17.601000432701245 + width: 1.7499999999998384 + } + right_sample { + s: 17.801011801254742 + width: 1.7499999999997826 + } + right_sample { + s: 18.001023169808114 + width: 1.7499999999997002 + } + right_sample { + s: 18.2010345383615 + width: 1.7499999999997267 + } + right_sample { + s: 18.401045906915066 + width: 1.7499999999998102 + } + right_sample { + s: 18.601057275468342 + width: 1.7499999999996709 + } + right_sample { + s: 18.801068644021715 + width: 1.749999999999726 + } + right_sample { + s: 19.001080012574977 + width: 1.7499999999998632 + } + right_sample { + s: 19.201091381128585 + width: 1.749999999999754 + } + right_sample { + s: 19.401102749681943 + width: 1.7499999999997806 + } + right_sample { + s: 19.601114118235522 + width: 1.7499999999998086 + } + right_sample { + s: 19.801125486788784 + width: 1.7499999999999183 + } + right_sample { + s: 20.001136855342267 + width: 1.7499999999999181 + } + right_sample { + s: 20.201148223895832 + width: 1.7499999999999463 + } + right_sample { + s: 20.401159592449094 + width: 1.7500000000000557 + } + right_sample { + s: 20.601170961002481 + width: 1.7499999999998899 + } + right_sample { + s: 20.801182329555949 + width: 1.7499999999999167 + } + right_sample { + s: 21.001193698109432 + width: 1.7500000000000266 + } + right_sample { + s: 21.201205066662887 + width: 1.7500000000000007 + } + right_sample { + s: 21.401216435216163 + width: 1.7500000000000266 + } + right_sample { + s: 21.601227803769618 + width: 1.7499999999999447 + } + right_sample { + s: 21.801239172323005 + width: 1.7499999999999984 + } + right_sample { + s: 22.001250540876377 + width: 1.7499999999999714 + } + right_sample { + s: 22.20126190942975 + width: 1.7499999999999158 + } + right_sample { + s: 22.401273277983314 + width: 1.749999999999917 + } + right_sample { + s: 22.6012846465367 + width: 1.7499999999999147 + } + right_sample { + s: 22.80129601509006 + width: 1.7499999999999429 + } + right_sample { + s: 23.001307383643447 + width: 1.7499999999998044 + } + right_sample { + s: 23.201318752197025 + width: 1.7499999999998879 + } + right_sample { + s: 23.401330120750192 + width: 1.7499999999999409 + } + right_sample { + s: 23.601341489303852 + width: 1.7499999999999163 + } + right_sample { + s: 23.801352857857033 + width: 1.7499999999999127 + } + right_sample { + s: 24.001364226410516 + width: 1.7499999999999132 + } + right_sample { + s: 24.201375594964095 + width: 1.7499999999999969 + } + right_sample { + s: 24.401386963517467 + width: 1.7499999999999136 + } + right_sample { + s: 24.60139833207084 + width: 1.7499999999999949 + } + right_sample { + s: 24.801409700624308 + width: 1.7499999999999956 + } + right_sample { + s: 25.001421069177777 + width: 1.7499999999998854 + } + right_sample { + s: 25.201432437731054 + width: 1.7499999999999654 + } + right_sample { + s: 25.401443806284728 + width: 1.7499999999999951 + } + right_sample { + s: 25.601455174837991 + width: 1.7499999999999385 + } + right_sample { + s: 25.80146654339168 + width: 1.7500000000000491 + } + right_sample { + s: 26.001477911944832 + width: 1.7500000000000477 + } + right_sample { + s: 26.201489280498425 + width: 1.7499999999999667 + } + right_sample { + s: 26.401500649051755 + width: 1.749999999999966 + } + right_sample { + s: 26.601512017605348 + width: 1.7500000000000207 + } + right_sample { + s: 26.801523386158802 + width: 1.7500000000000488 + } + right_sample { + s: 27.001534754712271 + width: 1.7500000000001037 + } + right_sample { + s: 27.201546123265643 + width: 1.7499999999999378 + } + right_sample { + s: 27.401557491818988 + width: 1.750000000000103 + } + right_sample { + s: 27.601568860372566 + width: 1.7500000000001037 + } + right_sample { + s: 27.801580228925953 + width: 1.7499999999999378 + } + right_sample { + s: 28.001591597479312 + width: 1.7500000000000193 + } + right_sample { + s: 28.201602966032862 + width: 1.7500000000000764 + } + right_sample { + s: 28.401614334586153 + width: 1.7500000000000466 + } + right_sample { + s: 28.601625703139607 + width: 1.7500000000001581 + } + right_sample { + s: 28.80163707169298 + width: 1.7500000000000751 + } + right_sample { + s: 29.001648440246353 + width: 1.7500000000000469 + } + right_sample { + s: 29.201659808799725 + width: 1.7500000000001845 + } + right_sample { + s: 29.401671177353098 + width: 1.7500000000002116 + } + right_sample { + s: 29.601682545906566 + width: 1.7500000000002129 + } + right_sample { + s: 29.801693914460063 + width: 1.7500000000001847 + } + right_sample { + s: 30.00170528301323 + width: 1.7500000000001832 + } + right_sample { + s: 30.201716651566795 + width: 1.7500000000001301 + } + right_sample { + s: 30.401728020120387 + width: 1.7500000000001839 + } + right_sample { + s: 30.601739388673746 + width: 1.7500000000002938 + } + right_sample { + s: 30.801750757227243 + width: 1.7500000000001565 + } + right_sample { + s: 31.001762125780711 + width: 1.7500000000001834 + } + right_sample { + s: 31.201773494333988 + width: 1.7500000000001272 + } + right_sample { + s: 31.401784862887457 + width: 1.7500000000002098 + } + right_sample { + s: 31.601796231440844 + width: 1.7500000000000717 + } + right_sample { + s: 31.801807599994312 + width: 1.7500000000000164 + } + right_sample { + s: 32.001818968547795 + width: 1.7500000000000426 + } + right_sample { + s: 32.201830337101171 + width: 1.7500000000001243 + } + right_sample { + s: 32.401841705654547 + width: 1.7500000000000977 + } + right_sample { + s: 32.601853074207924 + width: 1.7500000000000422 + } + right_sample { + s: 32.801864442761286 + width: 1.7500000000000695 + } + right_sample { + s: 33.001875811314854 + width: 1.7499999999999878 + } + right_sample { + s: 33.20188717986813 + width: 1.75000000000004 + } + right_sample { + s: 33.401898548421478 + width: 1.7500000000001237 + } + right_sample { + s: 33.601909916974854 + width: 1.7499999999999316 + } + right_sample { + s: 33.801921285528216 + width: 1.7499999999999571 + } + right_sample { + s: 34.001932654081592 + width: 1.7500000000000386 + } + right_sample { + s: 34.201944022635061 + width: 1.7500000000000129 + } + right_sample { + s: 34.401955391188338 + width: 1.7499999999999558 + } + right_sample { + s: 34.601966759741806 + width: 1.749999999999984 + } + right_sample { + s: 34.801978128295183 + width: 1.7499999999999283 + } + right_sample { + s: 35.001989496848751 + width: 1.7500000000000389 + } + right_sample { + s: 35.202000865402141 + width: 1.7500000000000371 + } + right_sample { + s: 35.402012233955531 + width: 1.7499999999999822 + } + right_sample { + s: 35.602023602509014 + width: 1.7500000000000375 + } + right_sample { + s: 35.802034971062469 + width: 1.7500000000000386 + } + right_sample { + s: 36.002046339616051 + width: 1.7500000000001756 + } + right_sample { + s: 36.20205770816947 + width: 1.7500000000001736 + } + right_sample { + s: 36.402069076722832 + width: 1.7500000000001485 + } + right_sample { + s: 36.602080445276442 + width: 1.7500000000001201 + } + right_sample { + s: 36.802091813829819 + width: 1.7500000000001195 + } + right_sample { + s: 37.002103182383209 + width: 1.7500000000000915 + } + right_sample { + s: 37.202114550936557 + width: 1.7500000000000924 + } + right_sample { + s: 37.402125919490054 + width: 1.7500000000002283 + } + right_sample { + s: 37.602137288043636 + width: 1.7500000000000937 + } + right_sample { + s: 37.802148656596913 + width: 1.7500000000000082 + } + right_sample { + s: 38.002160025150289 + width: 1.7500000000000075 + } + right_sample { + s: 38.202171393703743 + width: 1.7500000000000364 + } + right_sample { + s: 38.40218276225702 + width: 1.7500000000000615 + } + right_sample { + s: 38.602194130810382 + width: 1.7499999999999534 + } + right_sample { + s: 38.802205499363758 + width: 1.7499999999999787 + } + right_sample { + s: 39.002216867917355 + width: 1.7500000000000626 + } + right_sample { + s: 39.202228236470809 + width: 1.7499999999999816 + } + right_sample { + s: 39.402239605024086 + width: 1.749999999999923 + } + right_sample { + s: 39.602250973577462 + width: 1.7499999999998959 + } + right_sample { + s: 39.802262342130838 + width: 1.749999999999923 + } + right_sample { + s: 40.0022737106842 + width: 1.749999999999923 + } + right_sample { + s: 40.202285079237562 + width: 1.7499999999998681 + } + right_sample { + s: 40.402296447791144 + width: 1.749999999999923 + } + right_sample { + s: 40.602307816344712 + width: 1.7499999999999514 + } + right_sample { + s: 40.802319184897989 + width: 1.749999999999948 + } + right_sample { + s: 41.002330553451237 + width: 1.7499999999999487 + } + right_sample { + s: 41.20234192200482 + width: 1.7499999999999503 + } + right_sample { + s: 41.402353290558288 + width: 1.7500000000000038 + } + right_sample { + s: 41.602364659111842 + width: 1.7500000000000333 + } + right_sample { + s: 41.802376027665311 + width: 1.7500000000000591 + } + right_sample { + s: 42.0023873962187 + width: 1.7500000000000568 + } + right_sample { + s: 42.202398764772283 + width: 1.7500000000000315 + } + right_sample { + s: 42.402410133325645 + width: 1.7500000000001124 + } + right_sample { + s: 42.602421501879022 + width: 1.7500000000000575 + } + right_sample { + s: 42.80243287043259 + width: 1.7500000000001681 + } + right_sample { + s: 43.002444238986172 + width: 1.7500000000001137 + } + right_sample { + s: 43.202455607539534 + width: 1.7500000000001397 + } + right_sample { + s: 43.402466976093 + width: 1.7500000000002218 + } + right_sample { + s: 43.602478344646265 + width: 1.7500000000001663 + } + right_sample { + s: 43.802489713199861 + width: 1.7500000000001397 + } + right_sample { + s: 44.002501081753444 + width: 1.7500000000002212 + } + right_sample { + s: 44.2025124503066 + width: 1.7500000000002196 + } + right_sample { + s: 44.402523818860082 + width: 1.7500000000001112 + } + right_sample { + s: 44.602535187413444 + width: 1.7500000000002194 + } + right_sample { + s: 44.802546555966913 + width: 1.7500000000002207 + } + right_sample { + s: 45.002557924520382 + width: 1.7500000000001656 + } + right_sample { + s: 45.202569293073658 + width: 1.7500000000001354 + } + right_sample { + s: 45.402580661627141 + width: 1.7500000000000817 + } + right_sample { + s: 45.602592030180517 + width: 1.7500000000001352 + } + right_sample { + s: 45.802603398734014 + width: 1.7500000000001363 + } + right_sample { + s: 46.002614767287376 + width: 1.7500000000000822 + } + right_sample { + s: 46.202626135840767 + width: 1.7500000000001072 + } + right_sample { + s: 46.405275008788429 + width: 1.7499999999999969 + } + right_sample { + s: 46.580037921587085 + width: 1.7156615267790134 + } + right_sample { + s: 46.754800834385684 + width: 1.6986974716873728 + } + right_sample { + s: 46.929563747184112 + width: 1.6987619053676635 + } + right_sample { + s: 47.104326659982767 + width: 1.7031022242685836 + } + right_sample { + s: 47.279089572781288 + width: 1.7074425431706817 + } + right_sample { + s: 47.453852485579887 + width: 1.7117828620724331 + } + right_sample { + s: 47.6286153983785 + width: 1.7161231809743946 + } + right_sample { + s: 47.803378311176765 + width: 1.7204634998756454 + } + right_sample { + s: 47.978141223975484 + width: 1.72480381877709 + } + right_sample { + s: 48.152904136773955 + width: 1.7291441376783752 + } + right_sample { + s: 48.327667049572725 + width: 1.7334844565798568 + } + right_sample { + s: 48.502429962371316 + width: 1.7378247754817031 + } + right_sample { + s: 48.677192875169595 + width: 1.7421650943828741 + } + right_sample { + s: 48.89446870767695 + width: 1.7483508657443871 + } + right_sample { + s: 49.064691439921788 + width: 1.7156379906187833 + } + right_sample { + s: 49.234914172166171 + width: 1.6977275950080777 + } + right_sample { + s: 49.405136904410725 + width: 1.6966000786573563 + } + right_sample { + s: 49.575359636655541 + width: 1.7016563544295906 + } + right_sample { + s: 49.745582368900152 + width: 1.7067126302022859 + } + right_sample { + s: 49.915805101144933 + width: 1.7117689059743175 + } + right_sample { + s: 50.086027833389466 + width: 1.7168251817467506 + } + right_sample { + s: 50.256250565634048 + width: 1.7218814575181898 + } + right_sample { + s: 50.426473297878772 + width: 1.7269377332904112 + } + right_sample { + s: 50.596696030123347 + width: 1.7319940090630959 + } + right_sample { + s: 50.766918762367951 + width: 1.737050284834931 + } + right_sample { + s: 50.937141494612746 + width: 1.7421065606081232 + } + right_sample { + s: 51.1192028141192 + width: 1.7477615499732737 + } + right_sample { + s: 51.281061563556669 + width: 1.6988926103085866 + } + right_sample { + s: 51.442920312994346 + width: 1.6620375183074247 + } + right_sample { + s: 51.604779062431859 + width: 1.6403956329799205 + } + right_sample { + s: 51.766637811869323 + width: 1.6345713391212757 + } + right_sample { + s: 51.928496561306851 + width: 1.6426483081548331 + } + right_sample { + s: 52.090355310744414 + width: 1.6526245064266427 + } + right_sample { + s: 52.252214060181828 + width: 1.6626007046999218 + } + right_sample { + s: 52.414072809619505 + width: 1.672576902972593 + } + right_sample { + s: 52.575931559056876 + width: 1.6825531012454573 + } + right_sample { + s: 52.7377903084946 + width: 1.6925292995184407 + } + right_sample { + s: 52.899649057932123 + width: 1.7025054977908451 + } + right_sample { + s: 53.061507807369807 + width: 1.7124816960633686 + } + right_sample { + s: 53.223366556807264 + width: 1.7224578943355291 + } + right_sample { + s: 53.385225306244692 + width: 1.7324340926081396 + } + right_sample { + s: 53.535661210641251 + width: 1.7412698274768559 + } + right_sample { + s: 53.689999802215809 + width: 1.7182119056021121 + } + right_sample { + s: 53.844338393790366 + width: 1.7001797211774521 + } + right_sample { + s: 53.998676985364973 + width: 1.6959150418002333 + } + right_sample { + s: 54.153015576939609 + width: 1.7042207122227377 + } + right_sample { + s: 54.307354168514195 + width: 1.7146013518046217 + } + right_sample { + s: 54.461692760088695 + width: 1.7249819913860889 + } + right_sample { + s: 54.665935780616486 + width: 1.7405456647484217 + } + right_sample { + s: 54.824380910618657 + width: 1.7068837525660823 + } + right_sample { + s: 54.982826040620893 + width: 1.6781102584991336 + } + right_sample { + s: 55.141271170623064 + width: 1.6637745151258956 + } + right_sample { + s: 55.299716300625292 + width: 1.6644659663473875 + } + right_sample { + s: 55.458161430627634 + width: 1.6741933595699252 + } + right_sample { + s: 55.616606560629869 + width: 1.6840035079164717 + } + right_sample { + s: 55.775051690631933 + width: 1.6938136562633266 + } + right_sample { + s: 55.933496820634218 + width: 1.7036238046097087 + } + right_sample { + s: 56.0919419506365 + width: 1.7134339529558162 + } + right_sample { + s: 56.250387080638674 + width: 1.7232441013021618 + } + right_sample { + s: 56.408832210640846 + width: 1.7330542496488626 + } + right_sample { + s: 56.553977533807334 + width: 1.7415587279817974 + } + right_sample { + s: 56.753223118960371 + width: 1.7168222066200696 + } + right_sample { + s: 56.952424168022134 + width: 1.7056246364373082 + } + right_sample { + s: 57.151584753684595 + width: 1.7085745023601029 + } + right_sample { + s: 57.35070873530254 + width: 1.7115455850023651 + } + right_sample { + s: 57.549799763669434 + width: 1.7143499184745583 + } + right_sample { + s: 57.748861285838053 + width: 1.7169925424607209 + } + right_sample { + s: 57.947896549981593 + width: 1.7194784850458384 + } + right_sample { + s: 58.146908610289984 + width: 1.7218127610217104 + } + right_sample { + s: 58.345900331902719 + width: 1.7240003702972044 + } + right_sample { + s: 58.544874395870735 + width: 1.7260462964127996 + } + right_sample { + s: 58.743833304148026 + width: 1.72795550515534 + } + right_sample { + s: 58.942779384607512 + width: 1.7297329432697646 + } + right_sample { + s: 59.141714796080507 + width: 1.7313835372674764 + } + right_sample { + s: 59.3406415334168 + width: 1.7329121923233921 + } + right_sample { + s: 59.539561432564724 + width: 1.7343237912625697 + } + right_sample { + s: 59.738476175663934 + width: 1.7356231936337776 + } + right_sample { + s: 59.937387296157368 + width: 1.7368152348624468 + } + right_sample { + s: 60.136296183911625 + width: 1.7379047254846227 + } + right_sample { + s: 60.335204090351745 + width: 1.7388964504550248 + } + right_sample { + s: 60.5341121336035 + width: 1.7397951685281356 + } + right_sample { + s: 60.733021303644449 + width: 1.7406056117082618 + } + right_sample { + s: 60.931932467461309 + width: 1.7413324847668439 + } + right_sample { + s: 61.13084637421376 + width: 1.7419804648196646 + } + right_sample { + s: 61.329763660402456 + width: 1.7425542009658193 + } + right_sample { + s: 61.528684855040041 + width: 1.7430583139814022 + } + right_sample { + s: 61.72761038482539 + width: 1.743497396068441 + } + right_sample { + s: 61.926540579319919 + width: 1.7438760106513205 + } + right_sample { + s: 62.125475676125411 + width: 1.7441986922206532 + } + right_sample { + s: 62.324415826061234 + width: 1.7444699462221172 + } + right_sample { + s: 62.523361098343877 + width: 1.7446942489846222 + } + right_sample { + s: 62.722311485764074 + width: 1.7448760476876581 + } + right_sample { + s: 62.921266909865345 + width: 1.7450197603609783 + } + right_sample { + s: 63.120227226120427 + width: 1.7451297759189899 + } + right_sample { + s: 63.319192229106612 + width: 1.7452104542228553 + } + right_sample { + s: 63.518161657681482 + width: 1.7452661261681668 + } + right_sample { + s: 63.71713520015583 + width: 1.7453010937965572 + } + right_sample { + s: 63.9161124994651 + width: 1.7453196304292276 + } + right_sample { + s: 64.115093158341665 + width: 1.7453259808162884 + } + right_sample { + s: 64.314076744482747 + width: 1.7453243613038918 + } + right_sample { + s: 64.5130627957203 + width: 1.745318960012058 + } + right_sample { + s: 64.712050825187291 + width: 1.7453139370245139 + } + right_sample { + s: 64.911040326484837 + width: 1.74531342458506 + } + right_sample { + s: 65.110030778847687 + width: 1.745321527301354 + } + right_sample { + s: 65.309021652309283 + width: 1.7453423223482725 + } + right_sample { + s: 65.508012412866748 + width: 1.7453798596764503 + } + right_sample { + s: 65.707002527645415 + width: 1.745438162215373 + } + right_sample { + s: 65.905991470063285 + width: 1.7455212260748196 + } + right_sample { + s: 66.10497872499684 + width: 1.7456330207390254 + } + right_sample { + s: 66.303963794006421 + width: 1.7457774866634908 + } + right_sample { + s: 66.502946335281322 + width: 1.7459535672379909 + } + right_sample { + s: 66.701926441717717 + width: 1.7461447798879726 + } + right_sample { + s: 66.900904284031469 + width: 1.7463340188616472 + } + right_sample { + s: 67.0998800267398 + width: 1.7465132940854222 + } + right_sample { + s: 67.2988538285142 + width: 1.7466816419750426 + } + right_sample { + s: 67.4978258425342 + width: 1.7468391241609351 + } + right_sample { + s: 67.696796216840738 + width: 1.7469857990172331 + } + right_sample { + s: 67.89576509468904 + width: 1.747121721674503 + } + right_sample { + s: 68.094732614902483 + width: 1.7472469440323017 + } + right_sample { + s: 68.293698912226361 + width: 1.7473615147699391 + } + right_sample { + s: 68.4926641176806 + width: 1.747465479361777 + } + right_sample { + s: 68.691628358914556 + width: 1.7475588800882127 + } + right_sample { + s: 68.890591760559445 + width: 1.7476417560504909 + } + right_sample { + s: 69.089554444582532 + width: 1.7477141431844665 + } + right_sample { + s: 69.2885165306413 + width: 1.747776074274856 + } + right_sample { + s: 69.4874781364359 + width: 1.7478275789694684 + } + right_sample { + s: 69.686439378064151 + width: 1.747868683794406 + } + right_sample { + s: 69.88540037037447 + width: 1.7478994121685587 + } + right_sample { + s: 70.084361227320045 + width: 1.7479197844197265 + } + right_sample { + s: 70.2833220623119 + width: 1.7479298178005123 + } + right_sample { + s: 70.482282988573587 + width: 1.7479295265038441 + } + right_sample { + s: 70.68124411949421 + width: 1.7479189216796331 + } + right_sample { + s: 70.8802055689828 + width: 1.7478980114504792 + } + right_sample { + s: 71.079167451821164 + width: 1.7478668009302312 + } + right_sample { + s: 71.278129878222842 + width: 1.7478255472283224 + } + right_sample { + s: 71.477092879511758 + width: 1.7477778721287573 + } + right_sample { + s: 71.6760564285364 + width: 1.7477295812136366 + } + right_sample { + s: 71.875020496419182 + width: 1.7476839710431029 + } + right_sample { + s: 72.073985053911883 + width: 1.7476416912658177 + } + right_sample { + s: 72.2729500714176 + width: 1.7476027183925977 + } + right_sample { + s: 72.471915519013081 + width: 1.7475670168793287 + } + right_sample { + s: 72.670881366470681 + width: 1.7475345509610714 + } + right_sample { + s: 72.869847583281654 + width: 1.7475052846531229 + } + right_sample { + s: 73.068814138677482 + width: 1.7474791817512485 + } + right_sample { + s: 73.267781001652438 + width: 1.7474562058350411 + } + right_sample { + s: 73.466748140985885 + width: 1.7474363202680647 + } + right_sample { + s: 73.665715525265341 + width: 1.7474194881977496 + } + right_sample { + s: 73.864683122906911 + width: 1.747405672559152 + } + right_sample { + s: 74.063650902180029 + width: 1.747394836074214 + } + right_sample { + s: 74.262618831227513 + width: 1.7473869412539884 + } + right_sample { + s: 74.461586878089335 + width: 1.7473819503998917 + } + right_sample { + s: 74.6605550107244 + width: 1.7473798256036166 + } + right_sample { + s: 74.859523197032644 + width: 1.7473805287501853 + } + right_sample { + s: 75.058491404877827 + width: 1.7473840215175824 + } + right_sample { + s: 75.257459602109549 + width: 1.7473902653790283 + } + right_sample { + s: 75.456427756585271 + width: 1.7473992216033924 + } + right_sample { + s: 75.655395836193264 + width: 1.7474108512570574 + } + right_sample { + s: 75.854363808874254 + width: 1.7474251152045222 + } + right_sample { + s: 76.053331642673925 + width: 1.7474419726316373 + } + right_sample { + s: 76.252299316211335 + width: 1.7474609698167938 + } + right_sample { + s: 76.451266834243526 + width: 1.7474806697943497 + } + right_sample { + s: 76.650234205509847 + width: 1.7474998658026675 + } + right_sample { + s: 76.849201438722034 + width: 1.7475182674278134 + } + right_sample { + s: 77.048168542565577 + width: 1.7475358617488579 + } + right_sample { + s: 77.247135525702021 + width: 1.7475526571458431 + } + right_sample { + s: 77.4461023967699 + width: 1.7475686619845257 + } + right_sample { + s: 77.645069164386371 + width: 1.7475838846152385 + } + right_sample { + s: 77.844035837149235 + width: 1.7475983333717853 + } + right_sample { + s: 78.043002423638185 + width: 1.7476120165724636 + } + right_sample { + s: 78.241968932417038 + width: 1.7476249425208774 + } + right_sample { + s: 78.440935372034232 + width: 1.7476371195047973 + } + right_sample { + s: 78.6399017510257 + width: 1.7476485557967283 + } + right_sample { + s: 78.838868077915649 + width: 1.7476592596535832 + } + right_sample { + s: 79.037834361218046 + width: 1.7476692393184141 + } + right_sample { + s: 79.236800609439484 + width: 1.7476785030173163 + } + right_sample { + s: 79.435766831079235 + width: 1.7476870589629048 + } + right_sample { + s: 79.634733034631466 + width: 1.7476949153528505 + } + right_sample { + s: 79.833699228587619 + width: 1.7477020803693946 + } + right_sample { + s: 80.032665421436789 + width: 1.7477085621800623 + } + right_sample { + s: 80.231631621668072 + width: 1.7477143689385146 + } + right_sample { + s: 80.430597837771913 + width: 1.7477195087836896 + } + right_sample { + s: 80.629564078242211 + width: 1.7477239898386105 + } + right_sample { + s: 80.828530351576745 + width: 1.747727820214275 + } + right_sample { + s: 81.027496665660578 + width: 1.7477310339092125 + } + right_sample { + s: 81.226463022025769 + width: 1.7477339133585876 + } + right_sample { + s: 81.425429418456758 + width: 1.7477368515503322 + } + right_sample { + s: 81.6243958526868 + width: 1.7477399909083915 + } + right_sample { + s: 81.823362322447338 + width: 1.7477433345727218 + } + right_sample { + s: 82.0223288254678 + width: 1.7477468804388974 + } + right_sample { + s: 82.221295359475789 + width: 1.7477506263713809 + } + right_sample { + s: 82.420261922197867 + width: 1.7477545702336343 + } + right_sample { + s: 82.619228511358585 + width: 1.7477587148981024 + } + right_sample { + s: 82.818195124681566 + width: 1.747763053093691 + } + right_sample { + s: 83.017161759888936 + width: 1.7477675818906393 + } + right_sample { + s: 83.216128414701728 + width: 1.7477722991471036 + } + right_sample { + s: 83.415095086839983 + width: 1.7477772027208036 + } + right_sample { + s: 83.614061774023057 + width: 1.7477822904669784 + } + right_sample { + s: 83.813028473969368 + width: 1.747787560240835 + } + right_sample { + s: 84.011995184396667 + width: 1.7477930098960239 + } + right_sample { + s: 84.210961903022223 + width: 1.7477986372854906 + } + right_sample { + s: 84.409928627562877 + width: 1.7478044402612056 + } + right_sample { + s: 84.608895355735285 + width: 1.7478104166730302 + } + right_sample { + s: 84.807862085255621 + width: 1.7478165643709376 + } + right_sample { + s: 85.006828813840386 + width: 1.7478228812035319 + } + right_sample { + s: 85.205795539205909 + width: 1.7478293650180461 + } + right_sample { + s: 85.404762259068733 + width: 1.7478360136609752 + } + right_sample { + s: 85.603728971145387 + width: 1.7478428249774984 + } + right_sample { + s: 85.802695673160528 + width: 1.74784979645367 + } + right_sample { + s: 86.001662363733416 + width: 1.7478568895498579 + } + right_sample { + s: 86.200629043264755 + width: 1.7478640025872523 + } + right_sample { + s: 86.399595712367031 + width: 1.7478710691471266 + } + right_sample { + s: 86.5985623716527 + width: 1.7478780839876782 + } + right_sample { + s: 86.797529021733922 + width: 1.7478850476903705 + } + right_sample { + s: 86.99649566322293 + width: 1.7478919608375443 + } + right_sample { + s: 87.195462296731719 + width: 1.7478988240107698 + } + right_sample { + s: 87.3944289228722 + width: 1.7479056377923166 + } + right_sample { + s: 87.593395542256275 + width: 1.7479124027633375 + } + right_sample { + s: 87.792362155495468 + width: 1.747919119505738 + } + right_sample { + s: 87.9913287632016 + width: 1.7479257886008519 + } + right_sample { + s: 88.190295365986088 + width: 1.7479324106305874 + } + right_sample { + s: 88.3892619644607 + width: 1.747938986175922 + } + right_sample { + s: 88.5882285592366 + width: 1.7479455158183246 + } + right_sample { + s: 88.787195150925157 + width: 1.7479520001392677 + } + right_sample { + s: 88.98616174013803 + width: 1.7479584397193459 + } + right_sample { + s: 89.185128327486112 + width: 1.7479648351402339 + } + right_sample { + s: 89.384094913581052 + width: 1.747971186982465 + } + right_sample { + s: 89.583061499034 + width: 1.7479774958273915 + } + right_sample { + s: 89.782028084456172 + width: 1.7479837622557008 + } + right_sample { + s: 89.980994670458813 + width: 1.7479899868479851 + } + right_sample { + s: 90.179961257653261 + width: 1.7479961701851803 + } + right_sample { + s: 90.378927846650839 + width: 1.7480023128477495 + } + right_sample { + s: 90.577894438062813 + width: 1.7480084154162907 + } + right_sample { + s: 90.776861032438561 + width: 1.7480144811071945 + } + right_sample { + s: 90.975827629844943 + width: 1.7480205312929895 + } + right_sample { + s: 91.174794230119431 + width: 1.7480265887675062 + } + right_sample { + s: 91.373760833098558 + width: 1.7480326593019506 + } + right_sample { + s: 91.572727438618315 + width: 1.7480387427544408 + } + right_sample { + s: 91.771694046515066 + width: 1.7480448389691372 + } + right_sample { + s: 91.9706606566251 + width: 1.7480509477907926 + } + right_sample { + s: 92.1696272687846 + width: 1.7480570690635449 + } + right_sample { + s: 92.368593882829614 + width: 1.7480632026323044 + } + right_sample { + s: 92.567560498596535 + width: 1.7480693483414056 + } + right_sample { + s: 92.766527115921264 + width: 1.7480755060354018 + } + right_sample { + s: 92.9654937346404 + width: 1.7480816755583539 + } + right_sample { + s: 93.164460354589878 + width: 1.7480878567550606 + } + right_sample { + s: 93.363426975605819 + width: 1.7480940494700332 + } + right_sample { + s: 93.5623935975247 + width: 1.7481002535472203 + } + right_sample { + s: 93.761360220182425 + width: 1.7481064688315784 + } + right_sample { + s: 93.9603268434154 + width: 1.7481126951675525 + } + right_sample { + s: 94.159293467059285 + width: 1.7481189323996873 + } + right_sample { + s: 94.358260090950893 + width: 1.7481251803718862 + } + right_sample { + s: 94.557226714926017 + width: 1.7481314389285607 + } + right_sample { + s: 94.75619333882095 + width: 1.7481377079146763 + } + right_sample { + s: 94.9551599624718 + width: 1.7481439871743438 + } + right_sample { + s: 95.154126585714664 + width: 1.7481502765520029 + } + right_sample { + s: 95.353093208385957 + width: 1.7481565758917625 + } + right_sample { + s: 95.552059830322733 + width: 1.7481628849779578 + } + right_sample { + s: 95.751026451437809 + width: 1.7481692005696319 + } + right_sample { + s: 95.949993071764069 + width: 1.7481755161605887 + } + right_sample { + s: 96.148959691345269 + width: 1.7481818286469959 + } + right_sample { + s: 96.347926310225432 + width: 1.7481881378812063 + } + right_sample { + s: 96.546892928448543 + width: 1.7481944439047117 + } + right_sample { + s: 96.745859546058256 + width: 1.7482007467594682 + } + right_sample { + s: 96.944826163098639 + width: 1.7482070464871706 + } + right_sample { + s: 97.143792779613634 + width: 1.7482133431296534 + } + right_sample { + s: 97.342759395647022 + width: 1.7482196367281904 + } + right_sample { + s: 97.541726011242744 + width: 1.7482259273244991 + } + right_sample { + s: 97.7406926264447 + width: 1.7482322149606295 + } + right_sample { + s: 97.939659241296866 + width: 1.7482384996780134 + } + right_sample { + s: 98.138625855842989 + width: 1.748244781518411 + } + right_sample { + s: 98.337592470127049 + width: 1.7482510605236223 + } + right_sample { + s: 98.536559084192959 + width: 1.7482573367352354 + } + right_sample { + s: 98.735525698084686 + width: 1.7482636101947757 + } + right_sample { + s: 98.9344923118458 + width: 1.7482698809443415 + } + right_sample { + s: 99.1334589255206 + width: 1.7482761490251739 + } + right_sample { + s: 99.332425539152752 + width: 1.7482824144792974 + } + right_sample { + s: 99.531392152786154 + width: 1.748288677348143 + } + right_sample { + s: 99.730358766464775 + width: 1.7482949376732964 + } + right_sample { + s: 99.929325380232555 + width: 1.7483011954968468 + } + right_sample { + s: 100.12829199413333 + width: 1.7483074508602992 + } + right_sample { + s: 100.32725860821087 + width: 1.7483137038054393 + } + right_sample { + s: 100.52622522250338 + width: 1.74831995463223 + } + right_sample { + s: 100.72519183701246 + width: 1.7483262048930295 + } + right_sample { + s: 100.9241584517268 + width: 1.7483324557609687 + } + right_sample { + s: 101.12312506663427 + width: 1.7483387074442729 + } + right_sample { + s: 101.32209168172321 + width: 1.7483449599318042 + } + right_sample { + s: 101.52105829698193 + width: 1.7483512132123715 + } + right_sample { + s: 101.72002491239864 + width: 1.7483574672746462 + } + right_sample { + s: 101.91899152796124 + width: 1.7483637221077175 + } + right_sample { + s: 102.1179581436587 + width: 1.7483699776999626 + } + right_sample { + s: 102.31692475947861 + width: 1.7483762340409206 + } + right_sample { + s: 102.51589137540958 + width: 1.7483824911186303 + } + right_sample { + s: 102.71485799143966 + width: 1.7483887489227024 + } + right_sample { + s: 102.913824607557 + width: 1.7483950074415102 + } + right_sample { + s: 103.11279122375012 + width: 1.7484012666636841 + } + right_sample { + s: 103.31175784000713 + width: 1.7484075265785908 + } + right_sample { + s: 103.51072445631614 + width: 1.7484137871748973 + } + right_sample { + s: 103.70969107266545 + width: 1.7484200484410872 + } + right_sample { + s: 103.90865768904341 + width: 1.7484263103663611 + } + right_sample { + s: 104.10762430543835 + width: 1.7484325729392454 + } + right_sample { + s: 104.30659092183825 + width: 1.7484388361489409 + } + right_sample { + s: 104.50555753823137 + width: 1.7484450999841585 + } + right_sample { + s: 104.704524154606 + width: 1.7484513644334683 + } + right_sample { + s: 104.9034907709505 + width: 1.7484576294860159 + } + right_sample { + s: 105.102457387253 + width: 1.7484638951303677 + } + right_sample { + s: 105.30142400350199 + width: 1.7484701613468596 + } + right_sample { + s: 105.5003906196919 + width: 1.7484764278713487 + } + right_sample { + s: 105.69935723582545 + width: 1.7484826943175464 + } + right_sample { + s: 105.89832385190573 + width: 1.7484889605651157 + } + right_sample { + s: 106.09729046793591 + width: 1.748495226611809 + } + right_sample { + s: 106.29625708391929 + width: 1.7485014924613922 + } + right_sample { + s: 106.49522369985878 + width: 1.7485077581164155 + } + right_sample { + s: 106.69419031575767 + width: 1.7485140235799455 + } + right_sample { + s: 106.89315693161915 + width: 1.7485202888549853 + } + right_sample { + s: 107.09212354744621 + width: 1.7485265539446504 + } + right_sample { + s: 107.29109016324213 + width: 1.7485328188515947 + } + right_sample { + s: 107.49005677901003 + width: 1.74853908357936 + } + right_sample { + s: 107.68902339475305 + width: 1.7485453481303264 + } + right_sample { + s: 107.88799001047445 + width: 1.748551612507768 + } + right_sample { + s: 108.0869566261773 + width: 1.7485578767148238 + } + right_sample { + s: 108.28592324186454 + width: 1.7485641407546679 + } + right_sample { + s: 108.4848898575396 + width: 1.7485704046295809 + } + right_sample { + s: 108.68385647320567 + width: 1.7485766683427379 + } + right_sample { + s: 108.88282308886565 + width: 1.7485829318976589 + } + right_sample { + s: 109.08178970452279 + width: 1.7485891952971591 + } + right_sample { + s: 109.28075632018046 + width: 1.7485954585438159 + } + right_sample { + s: 109.47972293584154 + width: 1.748601721640842 + } + right_sample { + s: 109.67868955150917 + width: 1.7486079845917186 + } + right_sample { + s: 109.87765616718666 + width: 1.7486142473986712 + } + right_sample { + s: 110.07662278287708 + width: 1.7486205100649554 + } + right_sample { + s: 110.27558939858304 + width: 1.7486267726185 + } + right_sample { + s: 110.47455601430464 + width: 1.748633035166193 + } + right_sample { + s: 110.67352263004081 + width: 1.7486392977587175 + } + right_sample { + s: 110.8724892457908 + width: 1.7486455604008806 + } + right_sample { + s: 111.07145586155362 + width: 1.7486518230917316 + } + right_sample { + s: 111.27042247732872 + width: 1.7486580858308072 + } + right_sample { + s: 111.4693890931151 + width: 1.7486643486169733 + } + right_sample { + s: 111.66835570891185 + width: 1.7486706114499677 + } + right_sample { + s: 111.86732232471822 + width: 1.7486768743284558 + } + right_sample { + s: 112.06628894053325 + width: 1.7486831372518086 + } + right_sample { + s: 112.26525555635617 + width: 1.74868940021922 + } + right_sample { + s: 112.46422217218631 + width: 1.7486956632298059 + } + right_sample { + s: 112.66318878802244 + width: 1.7487019262831416 + } + right_sample { + s: 112.86215540386415 + width: 1.7487081893777754 + } + right_sample { + s: 113.06112201971017 + width: 1.7487144525135925 + } + right_sample { + s: 113.26008863556 + width: 1.7487207156892819 + } + right_sample { + s: 113.45905525141258 + width: 1.7487269789042585 + } + right_sample { + s: 113.65802186726718 + width: 1.7487332421577801 + } + right_sample { + s: 113.85698848312288 + width: 1.7487395054489747 + } + right_sample { + s: 114.05595509897887 + width: 1.7487457687768617 + } + right_sample { + s: 114.25492171483438 + width: 1.7487520321407837 + } + right_sample { + s: 114.45388833068846 + width: 1.7487582955402279 + } + right_sample { + s: 114.65285494654036 + width: 1.7487645589737979 + } + right_sample { + s: 114.85182156238906 + width: 1.7487708224412948 + } + right_sample { + s: 115.05078817823399 + width: 1.7487770859403631 + } + right_sample { + s: 115.24975479407476 + width: 1.7487833494502807 + } + right_sample { + s: 115.4487214099112 + width: 1.7487896129510436 + } + right_sample { + s: 115.64768802574412 + width: 1.7487958764393685 + } + right_sample { + s: 115.8466546415732 + width: 1.7488021399158131 + } + right_sample { + s: 116.04562125739919 + width: 1.7488084033803484 + } + right_sample { + s: 116.2445878732219 + width: 1.7488146668333457 + } + right_sample { + s: 116.44355448904177 + width: 1.7488209302749345 + } + right_sample { + s: 116.64252110485896 + width: 1.7488271937054722 + } + right_sample { + s: 116.84148772067356 + width: 1.7488334571252926 + } + right_sample { + s: 117.04045433648618 + width: 1.7488397205339143 + } + right_sample { + s: 117.23942095229661 + width: 1.74884598393211 + } + right_sample { + s: 117.43838756810543 + width: 1.7488522473199359 + } + right_sample { + s: 117.63735418391263 + width: 1.7488585106980699 + } + right_sample { + s: 117.83632079971851 + width: 1.748864774066027 + } + right_sample { + s: 118.03528741552323 + width: 1.7488710374243821 + } + right_sample { + s: 118.23425403132725 + width: 1.7488773007733083 + } + right_sample { + s: 118.43322064713053 + width: 1.7488835641128289 + } + right_sample { + s: 118.63218726293347 + width: 1.7488898274437668 + } + right_sample { + s: 118.83115387873617 + width: 1.7488960907655655 + } + right_sample { + s: 119.03012049453892 + width: 1.7489023540790758 + } + right_sample { + s: 119.22908711034189 + width: 1.7489086173840711 + } + right_sample { + s: 119.42805372614545 + width: 1.7489148806807029 + } + right_sample { + s: 119.62702034194962 + width: 1.7489211439696881 + } + right_sample { + s: 119.82598695775499 + width: 1.7489274072506018 + } + right_sample { + s: 120.02495357356129 + width: 1.748933670526833 + } + right_sample { + s: 120.22392018936868 + width: 1.7489399338042317 + } + right_sample { + s: 120.42288680517723 + width: 1.7489461970849833 + } + right_sample { + s: 120.62185342098651 + width: 1.7489524603686726 + } + right_sample { + s: 120.82082003679695 + width: 1.7489587236551125 + } + right_sample { + s: 121.01978665260823 + width: 1.7489649869446227 + } + right_sample { + s: 121.21875326842026 + width: 1.7489712502368691 + } + right_sample { + s: 121.41771988423316 + width: 1.7489775135313705 + } + right_sample { + s: 121.61668650004654 + width: 1.7489837768291185 + } + right_sample { + s: 121.81565311586067 + width: 1.7489900401289318 + } + right_sample { + s: 122.01461973167535 + width: 1.74899630343154 + } + right_sample { + s: 122.21358634749059 + width: 1.7490025667362836 + } + right_sample { + s: 122.41255296330611 + width: 1.7490088300438664 + } + right_sample { + s: 122.61151957912209 + width: 1.7490150933533388 + } + right_sample { + s: 122.81048619493843 + width: 1.7490213566652186 + } + right_sample { + s: 123.00945281075498 + width: 1.7490276199795036 + } + right_sample { + s: 123.20841942657179 + width: 1.7490338832958268 + } + right_sample { + s: 123.40738604238858 + width: 1.7490401466143501 + } + right_sample { + s: 123.60635265820554 + width: 1.7490464099345953 + } + right_sample { + s: 123.80531927402251 + width: 1.7490526732570859 + } + right_sample { + s: 124.00428588983966 + width: 1.7490589365812459 + } + right_sample { + s: 124.20325250565648 + width: 1.749065199907742 + } + right_sample { + s: 124.40221912147318 + width: 1.7490714632356057 + } + right_sample { + s: 124.60118573728963 + width: 1.7490777265652253 + } + right_sample { + s: 124.80015235310563 + width: 1.7490839898970534 + } + right_sample { + s: 124.99911896892162 + width: 1.7490902532282837 + } + right_sample { + s: 125.19808558473716 + width: 1.7490965165594137 + } + right_sample { + s: 125.39705220055264 + width: 1.74910277988939 + } + right_sample { + s: 125.59601881636749 + width: 1.7491090432191729 + } + right_sample { + s: 125.79498543218237 + width: 1.7491153065479201 + } + right_sample { + s: 125.993952047997 + width: 1.7491215698759135 + } + right_sample { + s: 126.19291866381134 + width: 1.7491278332034292 + } + right_sample { + s: 126.39188527962558 + width: 1.7491340965302473 + } + right_sample { + s: 126.59085189543963 + width: 1.7491403598568613 + } + right_sample { + s: 126.78981851125349 + width: 1.7491466231825128 + } + right_sample { + s: 126.98878512706722 + width: 1.7491528865074359 + } + right_sample { + s: 127.18775174288078 + width: 1.749159149832078 + } + right_sample { + s: 127.38671835869428 + width: 1.7491654131560737 + } + right_sample { + s: 127.5856849745076 + width: 1.7491716764796708 + } + right_sample { + s: 127.78465159032095 + width: 1.7491779398025906 + } + right_sample { + s: 127.98361820613424 + width: 1.7491842031249645 + } + right_sample { + s: 128.18258482194739 + width: 1.7491904664470839 + } + right_sample { + s: 128.38155143776069 + width: 1.7491967297683437 + } + right_sample { + s: 128.58051805357371 + width: 1.7492029930896953 + } + right_sample { + s: 128.77948466938693 + width: 1.7492092564101711 + } + right_sample { + s: 128.97845128520012 + width: 1.7492155197303139 + } + right_sample { + s: 129.17741790101337 + width: 1.7492217830502765 + } + right_sample { + s: 129.37638451682665 + width: 1.7492280463695002 + } + right_sample { + s: 129.57535113264009 + width: 1.7492343096885108 + } + right_sample { + s: 129.77431774845348 + width: 1.7492405730075118 + } + right_sample { + s: 129.97328436426693 + width: 1.7492468363262315 + } + right_sample { + s: 130.17225098008049 + width: 1.749253099645347 + } + right_sample { + s: 130.37121759589419 + width: 1.749259362964614 + } + right_sample { + s: 130.57018421170793 + width: 1.7492656262840893 + } + right_sample { + s: 130.76915082752168 + width: 1.749271889603693 + } + right_sample { + s: 130.96811744333559 + width: 1.7492781529234118 + } + right_sample { + s: 131.16708405914932 + width: 1.7492844162433352 + } + right_sample { + s: 131.36605067496342 + width: 1.7492906795631189 + } + right_sample { + s: 131.56501729077729 + width: 1.7492969428833918 + } + right_sample { + s: 131.76398390659125 + width: 1.7493032062038727 + } + right_sample { + s: 131.96295052240535 + width: 1.7493094695241425 + } + right_sample { + s: 132.16191713821954 + width: 1.7493157328447098 + } + right_sample { + s: 132.36088375403355 + width: 1.7493219961654591 + } + right_sample { + s: 132.55985036984774 + width: 1.7493282594860744 + } + right_sample { + s: 132.75881698566187 + width: 1.7493345228071873 + } + right_sample { + s: 132.95778360147605 + width: 1.7493407861281167 + } + right_sample { + s: 133.15675021729035 + width: 1.7493470494489616 + } + right_sample { + s: 133.35571683310448 + width: 1.7493533127704974 + } + right_sample { + s: 133.55468344891858 + width: 1.7493595760917584 + } + right_sample { + s: 133.75365006473282 + width: 1.7493658394130116 + } + right_sample { + s: 133.95261668054695 + width: 1.7493721027346365 + } + right_sample { + s: 134.1515832963612 + width: 1.7493783660558173 + } + right_sample { + s: 134.35054991217524 + width: 1.7493846293777542 + } + right_sample { + s: 134.54951652798937 + width: 1.7493908926993902 + } + right_sample { + s: 134.74848314380353 + width: 1.7493971560210582 + } + right_sample { + s: 134.94744975961754 + width: 1.7494034193428902 + } + right_sample { + s: 135.14641637543178 + width: 1.7494096826644285 + } + right_sample { + s: 135.34538299124577 + width: 1.7494159459861574 + } + right_sample { + s: 135.54434960705976 + width: 1.7494222093076872 + } + right_sample { + s: 135.74331622287383 + width: 1.7494284726292102 + } + right_sample { + s: 135.94228283868782 + width: 1.7494347359506053 + } + right_sample { + s: 136.1412494545018 + width: 1.74944099927211 + } + right_sample { + s: 136.34021607031582 + width: 1.7494472625934099 + } + right_sample { + s: 136.53918268612975 + width: 1.7494535259149204 + } + right_sample { + s: 136.73814930194374 + width: 1.749459789236314 + } + right_sample { + s: 136.93711591775764 + width: 1.7494660525575711 + } + right_sample { + s: 137.13608253357157 + width: 1.7494723158789094 + } + right_sample { + s: 137.33504914938555 + width: 1.7494785792002339 + } + right_sample { + s: 137.53401576519943 + width: 1.7494848425215275 + } + right_sample { + s: 137.73298238101341 + width: 1.7494911058428468 + } + right_sample { + s: 137.93194899682729 + width: 1.749497369163922 + } + right_sample { + s: 138.13091561264122 + width: 1.7495036324850681 + } + right_sample { + s: 138.32988222845515 + width: 1.7495098958062427 + } + right_sample { + s: 138.52884884426913 + width: 1.7495161591274833 + } + right_sample { + s: 138.727815460083 + width: 1.7495224224486037 + } + right_sample { + s: 138.92678207589688 + width: 1.7495286857697292 + } + right_sample { + s: 139.12574869171075 + width: 1.7495349490908423 + } + right_sample { + s: 139.32471530752474 + width: 1.7495412124119258 + } + right_sample { + s: 139.52368192333878 + width: 1.7495474757330105 + } + right_sample { + s: 139.72264853915271 + width: 1.7495537390540679 + } + right_sample { + s: 139.92161515496664 + width: 1.7495600023752664 + } + right_sample { + s: 140.12058177078052 + width: 1.7495662656963873 + } + right_sample { + s: 140.31954838659451 + width: 1.7495725290174249 + } + right_sample { + s: 140.51851500240841 + width: 1.7495787923385759 + } + right_sample { + s: 140.71748161822242 + width: 1.7495850556596158 + } + right_sample { + s: 140.91644823403641 + width: 1.7495913189809109 + } + right_sample { + s: 141.11541484985034 + width: 1.7495975823019931 + } + right_sample { + s: 141.31438146566435 + width: 1.7496038456232186 + } + right_sample { + s: 141.51334808147831 + width: 1.7496101089443021 + } + right_sample { + s: 141.71231469729216 + width: 1.7496163722656142 + } + right_sample { + s: 141.91128131310617 + width: 1.7496226355866753 + } + right_sample { + s: 142.11024792892022 + width: 1.7496288989077944 + } + right_sample { + s: 142.30921454473417 + width: 1.7496351622291593 + } + right_sample { + s: 142.50818116054825 + width: 1.749641425550265 + } + right_sample { + s: 142.70714777636223 + width: 1.7496476888714456 + } + right_sample { + s: 142.90611439217625 + width: 1.7496539521927441 + } + right_sample { + s: 143.10508100799021 + width: 1.7496602155138028 + } + right_sample { + s: 143.30404762380422 + width: 1.7496664788351013 + } + right_sample { + s: 143.50301423961815 + width: 1.7496727421563443 + } + right_sample { + s: 143.70198085543225 + width: 1.7496790054774243 + } + right_sample { + s: 143.90094747124616 + width: 1.7496852687988036 + } + right_sample { + s: 144.09991408706026 + width: 1.7496915321198991 + } + right_sample { + s: 144.29888070287416 + width: 1.7496977954412036 + } + right_sample { + s: 144.49784731868809 + width: 1.7497040587625268 + } + right_sample { + s: 144.69681393450222 + width: 1.7497103220835832 + } + right_sample { + s: 144.89578055031623 + width: 1.7497165854049537 + } + right_sample { + s: 145.09474716613019 + width: 1.7497228487262257 + } + right_sample { + s: 145.29371378194418 + width: 1.7497291120473517 + } + right_sample { + s: 145.49268039775822 + width: 1.7497353753685934 + } + right_sample { + s: 145.69164701357218 + width: 1.7497416386898283 + } + right_sample { + s: 145.89061362938617 + width: 1.7497479020110285 + } + right_sample { + s: 146.08958024520015 + width: 1.7497541653322937 + } + right_sample { + s: 146.2885468610142 + width: 1.7497604286535788 + } + right_sample { + s: 146.48751347682824 + width: 1.7497666919748485 + } + right_sample { + s: 146.6864800926422 + width: 1.7497729552960832 + } + right_sample { + s: 146.88544670845624 + width: 1.7497792186172991 + } + right_sample { + s: 147.08441332427023 + width: 1.7497854819387064 + } + right_sample { + s: 147.28337994008416 + width: 1.7497917452599281 + } + right_sample { + s: 147.4823465558982 + width: 1.7497980085811107 + } + right_sample { + s: 147.68131317171219 + width: 1.7498042719022744 + } + right_sample { + s: 147.88027978752615 + width: 1.7498105352234692 + } + right_sample { + s: 148.07924640334028 + width: 1.7498167985447162 + } + right_sample { + s: 148.27821301915421 + width: 1.7498230618661583 + } + right_sample { + s: 148.47717963496819 + width: 1.7498293251872907 + } + right_sample { + s: 148.67614625078212 + width: 1.7498355885085106 + } + right_sample { + s: 148.87511286659617 + width: 1.7498418518297498 + } + right_sample { + s: 149.07407948241027 + width: 1.7498481151509391 + } + right_sample { + s: 149.2730460982242 + width: 1.7498543784720642 + } + right_sample { + s: 149.47201271403819 + width: 1.7498606417932008 + } + right_sample { + s: 149.67097932985217 + width: 1.7498669051144884 + } + right_sample { + s: 149.86994594566625 + width: 1.7498731684357609 + } + right_sample { + s: 150.06891256148012 + width: 1.7498794317569155 + } + right_sample { + s: 150.26787917729413 + width: 1.749885695078027 + } + right_sample { + s: 150.46684579310806 + width: 1.7498919583993295 + } + right_sample { + s: 150.66581240892205 + width: 1.7498982217205836 + } + right_sample { + s: 150.86477902473598 + width: 1.7499044850417922 + } + right_sample { + s: 151.06374564054997 + width: 1.7499107483627707 + } + right_sample { + s: 151.26271225636395 + width: 1.7499170116839913 + } + right_sample { + s: 151.46167887217788 + width: 1.7499232750052252 + } + right_sample { + s: 151.66064548799187 + width: 1.749929538326344 + } + right_sample { + s: 151.85961210380577 + width: 1.7499358016475619 + } + right_sample { + s: 152.0585787196197 + width: 1.7499420649687962 + } + right_sample { + s: 152.25754533543369 + width: 1.7499483282899493 + } + right_sample { + s: 152.45651195124751 + width: 1.7499545916111396 + } + right_sample { + s: 152.65547856706155 + width: 1.7499608549320564 + } + right_sample { + s: 152.85444518287542 + width: 1.7499671182533481 + } + right_sample { + s: 153.05341179868932 + width: 1.7499733815744833 + } + right_sample { + s: 153.25237841450328 + width: 1.7499796448954572 + } + right_sample { + s: 153.45134503031719 + width: 1.7499859082165838 + } + right_sample { + s: 153.65031164613103 + width: 1.7499921715377003 + } + right_sample { + s: 153.87421245705966 + width: 1.7499999965673967 + } +} +stop_sign { + id { + id: "2" + } + stop_line { + segment { + line_segment { + point { + x: 586365.90892295539 + y: 4140785.417460287 + } + point { + x: 586367.59595983266 + y: 4140784.9523852509 + } + point { + x: 586369.28299449442 + y: 4140784.4873108254 + } + } + } + } + overlap_id { + id: "1_-1_and_2" + } +} +overlap { + id { + id: "1_-1_and_2" + } + object { + id { + id: "1_-1" + } + lane_overlap_info { + start_s: 152.57964692253393 + end_s: 152.57964692253393 + } + } + object { + id { + id: "2" + } + } +} diff --git a/modules/map/hdmap/BUILD b/modules/map/hdmap/BUILD new file mode 100644 index 00000000000..4ec5558463e --- /dev/null +++ b/modules/map/hdmap/BUILD @@ -0,0 +1,69 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "hdmap", + srcs = [ + "hdmap.cc", + "hdmap_common.cc", + "hdmap_impl.cc", + ], + hdrs = [ + "hdmap.h", + "hdmap_common.h", + "hdmap_impl.h", + "hdmap_util.h", + ], + deps = [ + "//modules/common:macro", + "//modules/common/configs:config_gflags", + "//modules/common/math", + "//modules/common/math:linear_interpolation", + "//modules/common/util", + "//modules/map/hdmap/adapter:opendrive_adapter", + "//modules/map/proto:map_proto", + "@glog//:glog", + ], +) + +cc_library( + name = "hdmap_util", + srcs = ["hdmap_util.cc"], + hdrs = ["hdmap_util.h"], + deps = [ + ":hdmap", + "//modules/common:log", + "//modules/common:macro", + "//modules/common/configs:config_gflags", + "//modules/common/util", + "//modules/common/util:string_util", + ], +) + +filegroup( + name = "testdata", + srcs = glob([ + "test-data/*", + ]), +) + +cc_test( + name = "hdmap_map_test", + size = "medium", + timeout = "short", + srcs = [ + "hdmap_common_test.cc", + "hdmap_impl_test.cc", + ], + data = [ + ":testdata", + ], + deps = [ + ":hdmap", + "@glog//:glog", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/map/hdmap/adapter/BUILD b/modules/map/hdmap/adapter/BUILD new file mode 100644 index 00000000000..ef93c96d898 --- /dev/null +++ b/modules/map/hdmap/adapter/BUILD @@ -0,0 +1,43 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "opendrive_adapter", + srcs = [ + "coordinate_convert_tool.cc", + "opendrive_adapter.cc", + "proto_organizer.cc", + "xml_parser/header_xml_parser.cc", + "xml_parser/junctions_xml_parser.cc", + "xml_parser/lanes_xml_parser.cc", + "xml_parser/objects_xml_parser.cc", + "xml_parser/roads_xml_parser.cc", + "xml_parser/signals_xml_parser.cc", + "xml_parser/util_xml_parser.cc", + ], + hdrs = [ + "coordinate_convert_tool.h", + "opendrive_adapter.h", + "proto_organizer.h", + "xml_parser/common_define.h", + "xml_parser/header_xml_parser.h", + "xml_parser/junctions_xml_parser.h", + "xml_parser/lanes_xml_parser.h", + "xml_parser/objects_xml_parser.h", + "xml_parser/roads_xml_parser.h", + "xml_parser/signals_xml_parser.h", + "xml_parser/status.h", + "xml_parser/util_xml_parser.h", + ], + deps = [ + "//modules/common:log", + "//modules/common/math", + "//modules/common/status", + "//modules/map/proto:map_proto", + "@proj4//:proj4", + "@tinyxml2//:tinyxml2", + ], +) + +cpplint() diff --git a/modules/map/hdmap/adapter/coordinate_convert_tool.cc b/modules/map/hdmap/adapter/coordinate_convert_tool.cc new file mode 100644 index 00000000000..bec31c3e034 --- /dev/null +++ b/modules/map/hdmap/adapter/coordinate_convert_tool.cc @@ -0,0 +1,115 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#include "modules/map/hdmap/adapter/coordinate_convert_tool.h" +#include +#include "glog/logging.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +CoordinateConvertTool::CoordinateConvertTool() + : pj_from_(NULL), pj_to_(NULL) {} + +CoordinateConvertTool::~CoordinateConvertTool() { + if (pj_from_) { + pj_free(pj_from_); + pj_from_ = NULL; + } + + if (pj_to_) { + pj_free(pj_to_); + pj_to_ = NULL; + } +} + +CoordinateConvertTool* CoordinateConvertTool::GetInstance() { + static CoordinateConvertTool instance; + return &instance; +} + +Status CoordinateConvertTool::SetConvertParam(const std::string &source_param, + const std::string &dst_param) { + source_convert_param_ = source_param; + dst_convert_param_ = dst_param; + if (pj_from_) { + pj_free(pj_from_); + pj_from_ = NULL; + } + + if (pj_to_) { + pj_free(pj_to_); + pj_to_ = NULL; + } + + if (!(pj_from_ = pj_init_plus(source_convert_param_.c_str()))) { + std::string err_msg = "Fail to pj_init_plus " + source_convert_param_; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + if (!(pj_to_ = pj_init_plus(dst_convert_param_.c_str()))) { + std::string err_msg = "Fail to pj_init_plus " + dst_convert_param_; + pj_free(pj_from_); + pj_from_ = NULL; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + return Status::OK(); +} + +Status CoordinateConvertTool::CoordiateConvert(const double longitude, + const double latitude, + const double height_ellipsoid, + double* utm_x, double* utm_y, + double* utm_z) { + CHECK_NOTNULL(utm_x); + CHECK_NOTNULL(utm_y); + CHECK_NOTNULL(utm_z); + if (!pj_from_ || !pj_to_) { + std::string err_msg = "no transform param"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + double gps_longitude = longitude; + double gps_latitude = latitude; + double gps_alt = height_ellipsoid; + + if (pj_is_latlong(pj_from_)) { + gps_longitude *= DEG_TO_RAD; + gps_latitude *= DEG_TO_RAD; + gps_alt = height_ellipsoid; + } + + if (0 != pj_transform(pj_from_, pj_to_, 1, 1, &gps_longitude, + &gps_latitude, &gps_alt)) { + std::string err_msg = "fail to transform coordinate"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + if (pj_is_latlong(pj_to_)) { + gps_longitude *= RAD_TO_DEG; + gps_latitude *= RAD_TO_DEG; + } + + *utm_x = gps_longitude; + *utm_y = gps_latitude; + *utm_z = gps_alt; + + return Status::OK(); +} + +} // namespace adapter +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/adapter/coordinate_convert_tool.h b/modules/map/hdmap/adapter/coordinate_convert_tool.h new file mode 100644 index 00000000000..5124a095775 --- /dev/null +++ b/modules/map/hdmap/adapter/coordinate_convert_tool.h @@ -0,0 +1,52 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#ifndef MODULES_MAP_MAP_LOADER_ADAPTER_COORDINATE_CONVERT_TOOL_H_ +#define MODULES_MAP_MAP_LOADER_ADAPTER_COORDINATE_CONVERT_TOOL_H_ +#include +#include +#include "modules/map/hdmap/adapter/xml_parser/status.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +class CoordinateConvertTool { + public: + CoordinateConvertTool(); + ~CoordinateConvertTool(); + + public: + static CoordinateConvertTool* GetInstance(); + + public: + Status SetConvertParam(const std::string &source_param, + const std::string &dst_param); + Status CoordiateConvert(const double longitude, const double latitude, + const double height_ellipsoid, double* utm_x, + double* utm_y, double* utm_z); + + private: + std::string source_convert_param_; + std::string dst_convert_param_; + + projPJ pj_from_; + projPJ pj_to_; +}; + +} // namespace adapter +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_MAP_LOADER_ADAPTER_COORDINATE_CONVERT_TOOL_H_ diff --git a/modules/map/hdmap/adapter/opendrive_adapter.cc b/modules/map/hdmap/adapter/opendrive_adapter.cc new file mode 100644 index 00000000000..ffd07051d60 --- /dev/null +++ b/modules/map/hdmap/adapter/opendrive_adapter.cc @@ -0,0 +1,75 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#include "modules/map/hdmap/adapter/opendrive_adapter.h" + +#include + +#include "modules/common/log.h" +#include "modules/map/hdmap/adapter/proto_organizer.h" +#include "modules/map/hdmap/adapter/xml_parser/status.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +bool OpendriveAdapter::LoadData(const std::string& filename, + apollo::hdmap::Map* pb_map) { + CHECK_NOTNULL(pb_map); + + tinyxml2::XMLDocument document; + if (document.LoadFile(filename.c_str()) != tinyxml2::XML_SUCCESS) { + AERROR << "fail to load file " << filename; + return false; + } + + // root node + const tinyxml2::XMLElement* root_node = document.RootElement(); + CHECK(root_node != nullptr); + // header + PbHeader* map_header = pb_map->mutable_header(); + Status status = HeaderXmlParser::Parse(*root_node, map_header); + if (!status.ok()) { + AERROR << "fail to parse opendrive header, " << status.error_message(); + return false; + } + + // roads + std::vector roads; + status = RoadsXmlParser::Parse(*root_node, &roads); + if (!status.ok()) { + AERROR << "fail to parse opendrive road, " << status.error_message(); + return false; + } + + // junction + std::vector junctions; + status = JunctionsXmlParser::Parse(*root_node, &junctions); + if (!status.ok()) { + AERROR << "fail to parse opendrive junction, " << status.error_message(); + return false; + } + + ProtoOrganizer proto_organizer; + proto_organizer.GetRoadElements(&roads); + proto_organizer.GetJunctionElements(junctions); + proto_organizer.GetOverlapElements(roads, junctions); + proto_organizer.OutputData(pb_map); + + return true; +} + +} // namespace adapter +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/adapter/opendrive_adapter.h b/modules/map/hdmap/adapter/opendrive_adapter.h new file mode 100644 index 00000000000..f559819961c --- /dev/null +++ b/modules/map/hdmap/adapter/opendrive_adapter.h @@ -0,0 +1,46 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#ifndef MODULES_MAP_HDMAP_ADAPTER_OPENDRIVE_ADAPTER_H_ +#define MODULES_MAP_HDMAP_ADAPTER_OPENDRIVE_ADAPTER_H_ + +#include +#include +#include + +#include "modules/map/proto/map.pb.h" + +#include "modules/map/hdmap/adapter/coordinate_convert_tool.h" +#include "modules/map/hdmap/adapter/xml_parser/common_define.h" +#include "modules/map/hdmap/adapter/xml_parser/header_xml_parser.h" +#include "modules/map/hdmap/adapter/xml_parser/junctions_xml_parser.h" +#include "modules/map/hdmap/adapter/xml_parser/lanes_xml_parser.h" +#include "modules/map/hdmap/adapter/xml_parser/objects_xml_parser.h" +#include "modules/map/hdmap/adapter/xml_parser/roads_xml_parser.h" +#include "modules/map/hdmap/adapter/xml_parser/signals_xml_parser.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +class OpendriveAdapter { + public: + static bool LoadData(const std::string& filename, apollo::hdmap::Map* pb_map); +}; + +} // namespace adapter +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_ADAPTER_OPENDRIVE_ADAPTER_H_ diff --git a/modules/map/hdmap/adapter/proto_organizer.cc b/modules/map/hdmap/adapter/proto_organizer.cc new file mode 100644 index 00000000000..75c99e131dc --- /dev/null +++ b/modules/map/hdmap/adapter/proto_organizer.cc @@ -0,0 +1,385 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#include "modules/map/hdmap/adapter/proto_organizer.h" + +#include +#include +#include +#include +#include +#include + +#include "modules/common/log.h" +#include "modules/common/math/polygon2d.h" +#include "modules/common/math/vec2d.h" + +namespace { + +std::string CreateOverlapId() { + static int count = 0; + ++count; + return "overlap_" + std::to_string(count); +} + +} // namespace + +namespace apollo { +namespace hdmap { +namespace adapter { + +void ProtoOrganizer::GetRoadElements(std::vector* roads) { + for (auto& road_internal : *roads) { + // lanes + for (auto& section_internal : road_internal.sections) { + for (auto& lane_internal : section_internal.lanes) { + std::string lane_id = lane_internal.lane.id().id(); + proto_data_.pb_lanes[lane_id] = lane_internal.lane; + section_internal.section.add_lane_id()->set_id(lane_id); + } + (*road_internal.road.add_section()) = section_internal.section; + proto_data_.pb_roads[road_internal.id] = road_internal.road; + } + // crosswalks + for (auto& crosswalk : road_internal.crosswalks) { + proto_data_.pb_crosswalks[crosswalk.id().id()] = crosswalk; + } + // clear areas + for (auto& clear_area : road_internal.clear_areas) { + proto_data_.pb_clear_areas[clear_area.id().id()] = clear_area; + } + // speed_bump + for (auto& speed_bump : road_internal.speed_bumps) { + proto_data_.pb_speed_bumps[speed_bump.id().id()] = speed_bump; + } + // stop lines + for (auto& stop_line_internal : road_internal.stop_lines) { + proto_data_.pb_stop_lines[stop_line_internal.id] = stop_line_internal; + } + // traffic_lights + for (auto& traffic_light_internal : road_internal.traffic_lights) { + auto& traffic_light = traffic_light_internal.traffic_light; + for (auto stop_line_id : traffic_light_internal.stop_line_ids) { + CHECK_GT(proto_data_.pb_stop_lines.count(stop_line_id), 0); + auto& stop_line_curve = proto_data_.pb_stop_lines[stop_line_id].curve; + (*traffic_light.add_stop_line()) = stop_line_curve; + } + proto_data_.pb_signals[traffic_light.id().id()] = traffic_light; + } + // stop signs + for (auto& stop_sign_internal : road_internal.stop_signs) { + auto& stop_sign = stop_sign_internal.stop_sign; + for (auto stop_line_id : stop_sign_internal.stop_line_ids) { + CHECK_GT(proto_data_.pb_stop_lines.count(stop_line_id), 0); + auto& stop_line_curve = proto_data_.pb_stop_lines[stop_line_id].curve; + (*stop_sign.add_stop_line()) = stop_line_curve; + } + proto_data_.pb_stop_signs[stop_sign.id().id()] = stop_sign; + } + // yield signs + for (auto& yield_sign_internal : road_internal.yield_signs) { + auto& yield_sign = yield_sign_internal.yield_sign; + for (auto stop_line_id : yield_sign_internal.stop_line_ids) { + CHECK_GT(proto_data_.pb_stop_lines.count(stop_line_id), 0); + auto& stop_line_curve = proto_data_.pb_stop_lines[stop_line_id].curve; + (*yield_sign.add_stop_line()) = stop_line_curve; + } + proto_data_.pb_yield_signs[yield_sign.id().id()] = yield_sign; + } + } +} + +void ProtoOrganizer::GetJunctionElements( + const std::vector& junctions) { + for (auto& junction_internal : junctions) { + std::string junction_id = junction_internal.junction.id().id(); + proto_data_.pb_junctions[junction_id] = junction_internal.junction; + } +} + +void ProtoOrganizer::GetLaneObjectOverlapElements( + const std::string& lane_id, + const std::vector& overlap_with_lanes) { + for (auto& overlap_object : overlap_with_lanes) { + std::string object_id = overlap_object.object_id; + if (proto_data_.pb_crosswalks.count(object_id) <= 0 && + proto_data_.pb_clear_areas.count(object_id) <= 0 && + proto_data_.pb_speed_bumps.count(object_id) <= 0) { + continue; + } + PbOverlap overlap; + std::string overlap_id = CreateOverlapId(); + proto_data_.pb_lanes[lane_id].add_overlap_id()->set_id(overlap_id); + overlap.mutable_id()->set_id(overlap_id); + PbObjectOverlapInfo* object_overlap = overlap.add_object(); + object_overlap->mutable_id()->set_id(lane_id); + object_overlap->mutable_lane_overlap_info()->set_start_s( + overlap_object.start_s); + object_overlap->mutable_lane_overlap_info()->set_end_s( + overlap_object.end_s); + object_overlap->mutable_lane_overlap_info()->set_is_merge( + overlap_object.is_merge); + object_overlap = overlap.add_object(); + object_overlap->mutable_id()->set_id(object_id); + if (proto_data_.pb_crosswalks.count(object_id) > 0) { + proto_data_.pb_crosswalks[object_id].add_overlap_id()->set_id(overlap_id); + object_overlap->mutable_crosswalk_overlap_info(); + } else if (proto_data_.pb_clear_areas.count(object_id) > 0) { + object_overlap->mutable_clear_area_overlap_info(); + proto_data_.pb_clear_areas[object_id].add_overlap_id()->set_id( + overlap_id); + } else if (proto_data_.pb_speed_bumps.count(object_id)) { + object_overlap->mutable_speed_bump_overlap_info(); + proto_data_.pb_speed_bumps[object_id].add_overlap_id()->set_id( + overlap_id); + } else { + AERROR << "unknown object, object id:" << object_id; + } + proto_data_.pb_overlaps[overlap_id] = overlap; + } +} + +void ProtoOrganizer::GetLaneSignalOverlapElements( + const std::string& lane_id, + const std::vector& overlap_with_lanes) { + for (auto& overlap_signal : overlap_with_lanes) { + std::string object_id = overlap_signal.object_id; + if (proto_data_.pb_signals.count(object_id) <= 0 && + proto_data_.pb_stop_signs.count(object_id) <= 0 && + proto_data_.pb_yield_signs.count(object_id) <= 0) { + AINFO << "cannot find signal object_id:" << object_id; + continue; + } + PbOverlap overlap; + std::string overlap_id = CreateOverlapId(); + proto_data_.pb_lanes[lane_id].add_overlap_id()->set_id(overlap_id); + overlap.mutable_id()->set_id(overlap_id); + PbObjectOverlapInfo* object_overlap = overlap.add_object(); + object_overlap->mutable_id()->set_id(lane_id); + object_overlap->mutable_lane_overlap_info()->set_start_s( + overlap_signal.start_s); + object_overlap->mutable_lane_overlap_info()->set_end_s( + overlap_signal.end_s); + object_overlap->mutable_lane_overlap_info()->set_is_merge( + overlap_signal.is_merge); + object_overlap = overlap.add_object(); + object_overlap->mutable_id()->set_id(object_id); + if (proto_data_.pb_signals.count(object_id) > 0) { + object_overlap->mutable_signal_overlap_info(); + proto_data_.pb_signals[object_id].add_overlap_id()->set_id(overlap_id); + } else if (proto_data_.pb_stop_signs.count(object_id) > 0) { + object_overlap->mutable_stop_sign_overlap_info(); + proto_data_.pb_stop_signs[object_id].add_overlap_id()->set_id(overlap_id); + } else if (proto_data_.pb_yield_signs.count(object_id) > 0) { + object_overlap->mutable_yield_sign_overlap_info(); + proto_data_.pb_yield_signs[object_id].add_overlap_id()->set_id( + overlap_id); + } else { + AERROR << "unknown signal, signal id:" << object_id; + } + proto_data_.pb_overlaps[overlap_id] = overlap; + } +} + +void ProtoOrganizer::GetLaneJunctionOverlapElements( + const std::string& lane_id, + const std::vector& overlap_with_lanes) { + for (auto& overlap_junction : overlap_with_lanes) { + std::string object_id = overlap_junction.object_id; + if (proto_data_.pb_junctions.count(object_id) <= 0) { + AINFO << "cannot find junction object " << object_id; + continue; + } + PbOverlap overlap; + std::string overlap_id = CreateOverlapId(); + proto_data_.pb_lanes[lane_id].add_overlap_id()->set_id(overlap_id); + overlap.mutable_id()->set_id(overlap_id); + PbObjectOverlapInfo* object_overlap = overlap.add_object(); + object_overlap->mutable_id()->set_id(lane_id); + object_overlap->mutable_lane_overlap_info()->set_start_s( + overlap_junction.start_s); + object_overlap->mutable_lane_overlap_info()->set_end_s( + overlap_junction.end_s); + object_overlap->mutable_lane_overlap_info()->set_is_merge( + overlap_junction.is_merge); + object_overlap = overlap.add_object(); + object_overlap->mutable_id()->set_id(object_id); + if (proto_data_.pb_junctions.count(object_id) > 0) { + object_overlap->mutable_junction_overlap_info(); + proto_data_.pb_junctions[object_id].add_overlap_id()->set_id(overlap_id); + } else { + AERROR << "unknown junction overlap, id:" << object_id; + } + proto_data_.pb_overlaps[overlap_id] = overlap; + } +} + +void ProtoOrganizer::GetLaneLaneOverlapElements( + const std::unordered_map, + OverlapWithLane, HashFunc>& lane_lane_overlaps) { + std::unordered_set close_set; + for (auto& overlap_lane_pair : lane_lane_overlaps) { + auto& lane_id = overlap_lane_pair.first.first; + auto& overlap_lane = overlap_lane_pair.second; + std::string object_id = overlap_lane.object_id; + std::string unique_object_id = lane_id + "_" + object_id; + if (close_set.count(unique_object_id) > 0) { + continue; + } + unique_object_id = object_id + "_" + lane_id; + if (close_set.count(unique_object_id) > 0) { + continue; + } + close_set.insert(unique_object_id); + PbOverlap overlap; + std::string overlap_id = CreateOverlapId(); + proto_data_.pb_lanes[lane_id].add_overlap_id()->set_id(overlap_id); + overlap.mutable_id()->set_id(overlap_id); + PbObjectOverlapInfo* object_overlap = overlap.add_object(); + object_overlap->mutable_id()->set_id(lane_id); + object_overlap->mutable_lane_overlap_info()->set_start_s( + overlap_lane.start_s); + object_overlap->mutable_lane_overlap_info()->set_end_s(overlap_lane.end_s); + object_overlap->mutable_lane_overlap_info()->set_is_merge( + overlap_lane.is_merge); + object_overlap = overlap.add_object(); + object_overlap->mutable_id()->set_id(object_id); + if (proto_data_.pb_lanes.count(object_id) <= 0) { + AERROR << "unknown overlap lane, id:" << object_id; + continue; + } + + if (lane_lane_overlaps.count(make_pair(object_id, lane_id)) <= 0) { + AERROR << "lane overlap is not symmetrical " << overlap_id; + continue; + } + auto& lane_lane_overlap = + lane_lane_overlaps.at(make_pair(object_id, lane_id)); + object_overlap->mutable_lane_overlap_info()->set_start_s( + lane_lane_overlap.start_s); + object_overlap->mutable_lane_overlap_info()->set_end_s( + lane_lane_overlap.end_s); + object_overlap->mutable_lane_overlap_info()->set_is_merge( + lane_lane_overlap.is_merge); + proto_data_.pb_lanes[object_id].add_overlap_id()->set_id(overlap_id); + proto_data_.pb_overlaps[overlap_id] = overlap; + } +} + +void ProtoOrganizer::GetJunctionObjectOverlapElements( + const std::vector& junctions) { + for (auto& junction_internal : junctions) { + std::string junction_id = junction_internal.junction.id().id(); + for (auto& overlap_junction : junction_internal.overlap_with_junctions) { + PbOverlap overlap; + std::string overlap_id = CreateOverlapId(); + proto_data_.pb_junctions[junction_id].add_overlap_id()->set_id( + overlap_id); + overlap.mutable_id()->set_id(overlap_id); + PbObjectOverlapInfo* object_overlap = overlap.add_object(); + object_overlap->mutable_id()->set_id(junction_id); + std::string object_id = overlap_junction.object_id; + object_overlap = overlap.add_object(); + object_overlap->mutable_id()->set_id(object_id); + if (proto_data_.pb_crosswalks.count(object_id) > 0) { + object_overlap->mutable_crosswalk_overlap_info(); + proto_data_.pb_crosswalks[object_id].add_overlap_id()->set_id( + overlap_id); + } else if (proto_data_.pb_clear_areas.count(object_id) > 0) { + object_overlap->mutable_clear_area_overlap_info(); + proto_data_.pb_clear_areas[object_id].add_overlap_id()->set_id( + overlap_id); + } else { + continue; + } + proto_data_.pb_overlaps[overlap_id] = overlap; + } + } +} + +void ProtoOrganizer::GetOverlapElements( + const std::vector& roads, + const std::vector& junctions) { + std::unordered_map, OverlapWithLane, + HashFunc> + lane_lane_overlaps; + // overlap + for (auto& road_internal : roads) { + for (auto& road_section : road_internal.sections) { + for (auto& lane_internal : road_section.lanes) { + std::string lane_id = lane_internal.lane.id().id(); + GetLaneObjectOverlapElements(lane_id, lane_internal.overlap_objects); + GetLaneSignalOverlapElements(lane_id, lane_internal.overlap_signals); + GetLaneJunctionOverlapElements(lane_id, + lane_internal.overlap_junctions); + for (auto& overlap_lane : lane_internal.overlap_lanes) { + lane_lane_overlaps[make_pair(lane_id, overlap_lane.object_id)] = + overlap_lane; + } + } + } + } + + GetLaneLaneOverlapElements(lane_lane_overlaps); + GetJunctionObjectOverlapElements(junctions); +} + +void ProtoOrganizer::OutputData(apollo::hdmap::Map* pb_map) { + for (auto& road_pair : proto_data_.pb_roads) { + *(pb_map->add_road()) = road_pair.second; + } + for (auto& lane_pair : proto_data_.pb_lanes) { + *(pb_map->add_lane()) = lane_pair.second; + } + for (auto& crosswalk_pair : proto_data_.pb_crosswalks) { + *(pb_map->add_crosswalk()) = crosswalk_pair.second; + } + for (auto& clear_area_pair : proto_data_.pb_clear_areas) { + *(pb_map->add_clear_area()) = clear_area_pair.second; + } + for (auto& speed_bump_pair : proto_data_.pb_speed_bumps) { + *(pb_map->add_speed_bump()) = speed_bump_pair.second; + } + for (auto& signal_pair : proto_data_.pb_signals) { + *(pb_map->add_signal()) = signal_pair.second; + } + for (auto& stop_sign_pair : proto_data_.pb_stop_signs) { + *(pb_map->add_stop_sign()) = stop_sign_pair.second; + } + for (auto& yield_sign_pair : proto_data_.pb_yield_signs) { + *(pb_map->add_yield()) = yield_sign_pair.second; + } + for (auto& junction_pair : proto_data_.pb_junctions) { + *(pb_map->add_junction()) = junction_pair.second; + } + for (auto& overlap_pair : proto_data_.pb_overlaps) { + *(pb_map->add_overlap()) = overlap_pair.second; + } + + AINFO << "hdmap statistics: roads-" << proto_data_.pb_roads.size() + << ",lanes-" << proto_data_.pb_lanes.size() << ",crosswalks-" + << proto_data_.pb_crosswalks.size() << ",clear areas-" + << proto_data_.pb_clear_areas.size() << ",speed bumps-" + << proto_data_.pb_speed_bumps.size() << ",signals-" + << proto_data_.pb_signals.size() << ",stop signs-" + << proto_data_.pb_stop_signs.size() << ",yield signs-" + << proto_data_.pb_yield_signs.size() << ",junctions-" + << proto_data_.pb_junctions.size() << ",overlaps-" + << proto_data_.pb_overlaps.size(); +} + +} // namespace adapter +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/adapter/proto_organizer.h b/modules/map/hdmap/adapter/proto_organizer.h new file mode 100644 index 00000000000..1a4499eaf73 --- /dev/null +++ b/modules/map/hdmap/adapter/proto_organizer.h @@ -0,0 +1,88 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#ifndef MODULES_MAP_HDMAP_ADAPTER_PROTO_ORGANIZER_H_ +#define MODULES_MAP_HDMAP_ADAPTER_PROTO_ORGANIZER_H_ + +#include +#include +#include +#include +#include + +#include "modules/map/proto/map.pb.h" + +#include "modules/map/hdmap/adapter/xml_parser/common_define.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +struct ProtoData { + PbHeader header; + std::unordered_map pb_lanes; + std::unordered_map pb_roads; + std::unordered_map pb_crosswalks; + std::unordered_map pb_clear_areas; + std::unordered_map pb_speed_bumps; + std::unordered_map pb_junction; + std::unordered_map pb_signals; + std::unordered_map pb_stop_signs; + std::unordered_map pb_yield_signs; + std::unordered_map pb_overlaps; + std::unordered_map pb_junctions; + std::unordered_map pb_stop_lines; +}; + +struct HashFunc { + template + size_t operator()(const std::pair& k) const { + return std::hash()(k.first) ^ std::hash()(k.second); + } +}; + +class ProtoOrganizer { + public: + void GetRoadElements(std::vector* roads); + void GetJunctionElements(const std::vector& junctions); + void GetOverlapElements(const std::vector& roads, + const std::vector& junctions); + void OutputData(apollo::hdmap::Map* pb_map); + + private: + void GetLaneObjectOverlapElements( + const std::string& lane_id, + const std::vector& overlap_with_lanes); + void GetLaneSignalOverlapElements( + const std::string& lane_id, + const std::vector& overlap_with_lanes); + void GetLaneJunctionOverlapElements( + const std::string& lane_id, + const std::vector& overlap_with_lanes); + void GetLaneLaneOverlapElements( + const std::unordered_map, + OverlapWithLane, HashFunc>& lane_lane_overlaps); + void GetJunctionObjectOverlapElements( + const std::vector& junctions); + + private: + ProtoData proto_data_; +}; + +} // namespace adapter +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_ADAPTER_PROTO_ORGANIZER_H_ diff --git a/modules/map/hdmap/adapter/xml_parser/common_define.h b/modules/map/hdmap/adapter/xml_parser/common_define.h new file mode 100644 index 00000000000..bdcf4f20567 --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/common_define.h @@ -0,0 +1,140 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#ifndef MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_COMMON_DEFINE_H_ +#define MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_COMMON_DEFINE_H_ + +#include +#include +#include +#include "modules/common/log.h" +#include "modules/map/proto/map.pb.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +using PbHeader = apollo::hdmap::Header; +using PbRoad = apollo::hdmap::Road; +using PbRoadSection = apollo::hdmap::RoadSection; +using PbLane = apollo::hdmap::Lane; +using PbJunction = apollo::hdmap::Junction; +using PbSignal = apollo::hdmap::Signal; +using PbSubSignal = apollo::hdmap::Subsignal; +using PbCrosswalk = apollo::hdmap::Crosswalk; +using PbSpeedBump = apollo::hdmap::SpeedBump; +using PbStopSign = apollo::hdmap::StopSign; +using PbYieldSign = apollo::hdmap::YieldSign; +using PbObjectOverlapInfo = apollo::hdmap::ObjectOverlapInfo; +using PbOverlap = apollo::hdmap::Overlap; +using PbClearArea = apollo::hdmap::ClearArea; +using PbLineSegment = apollo::hdmap::LineSegment; +using PbCurveSegment = apollo::hdmap::CurveSegment; +using PbCurve = apollo::hdmap::Curve; +using PbPoint3D = apollo::common::PointENU; +using PbLaneType = apollo::hdmap::Lane_LaneType; +using PbTurnType = apollo::hdmap::Lane_LaneTurn; +using PbID = apollo::hdmap::Id; +using PbLaneBoundary = apollo::hdmap::LaneBoundary; +using PbLaneBoundaryTypeType = apollo::hdmap::LaneBoundaryType_Type; +using PbPolygon = apollo::hdmap::Polygon; +using PbBoundaryPolygon = apollo::hdmap::BoundaryPolygon; +using PbBoundaryEdge = apollo::hdmap::BoundaryEdge; + +using PbLaneDirection = apollo::hdmap::Lane_LaneDirection; +using PbSignalType = apollo::hdmap::Signal_Type; +using PbSubSignalType = apollo::hdmap::Subsignal_Type; +using PbBoundaryEdgeType = apollo::hdmap::BoundaryEdge_Type; + +struct StopLineInternal { + std::string id; + PbCurve curve; +}; + +struct StopSignInternal { + std::string id; + PbStopSign stop_sign; + std::unordered_set stop_line_ids; +}; + +struct YieldSignInternal { + std::string id; + PbYieldSign yield_sign; + std::unordered_set stop_line_ids; +}; + +struct TrafficLightInternal { + std::string id; + PbSignal traffic_light; + std::unordered_set stop_line_ids; +}; + +struct OverlapWithLane { + std::string object_id; + double start_s; + double end_s; + bool is_merge; + + OverlapWithLane() : is_merge(false) {} +}; + +struct OverlapWithJunction { + std::string object_id; +}; + +struct LaneInternal { + PbLane lane; + std::vector overlap_signals; + std::vector overlap_objects; + std::vector overlap_junctions; + std::vector overlap_lanes; +}; + +struct JunctionInternal { + PbJunction junction; + std::unordered_set road_ids; + std::vector overlap_with_junctions; +}; + +struct RoadSectionInternal { + std::string id; + PbRoadSection section; + std::vector lanes; +}; + +struct RoadInternal { + std::string id; + PbRoad road; + + bool in_junction; + std::string junction_id; + + std::vector sections; + + std::vector traffic_lights; + std::vector stop_signs; + std::vector yield_signs; + std::vector crosswalks; + std::vector clear_areas; + std::vector speed_bumps; + std::vector stop_lines; + + RoadInternal() : in_junction(false) { junction_id = ""; } +}; + +} // namespace adapter +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_COMMON_DEFINE_H_ diff --git a/modules/map/hdmap/adapter/xml_parser/header_xml_parser.cc b/modules/map/hdmap/adapter/xml_parser/header_xml_parser.cc new file mode 100644 index 00000000000..27d0703f4d6 --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/header_xml_parser.cc @@ -0,0 +1,116 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#include "modules/map/hdmap/adapter/xml_parser/header_xml_parser.h" + +#include + +#include "modules/map/hdmap/adapter/coordinate_convert_tool.h" +#include "modules/map/hdmap/adapter/xml_parser/util_xml_parser.h" + +namespace { +int GetLongZone(double longitude) { + double longZone = 0.0; + if (longitude < 0.0) { + longZone = ((180.0 + longitude) / 6.0) + 1; + } else { + longZone = (longitude / 6.0) + 31; + } + return static_cast(longZone); +} +} // namespace + +namespace apollo { +namespace hdmap { +namespace adapter { + +Status HeaderXmlParser::Parse(const tinyxml2::XMLElement& xml_node, + PbHeader* header) { + auto header_node = xml_node.FirstChildElement("header"); + if (!header_node) { + std::string err_msg = "xml data missing header"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + int rev_major = 0; + int rev_minor = 0; + std::string database_name; + float version = 0.0; + std::string date; + double north = 0.0; + double south = 0.0; + double west = 0.0; + double east = 0.0; + std::string vendor; + int checker = header_node->QueryIntAttribute("revMajor", &rev_major); + checker += header_node->QueryIntAttribute("revMinor", &rev_minor); + checker += + UtilXmlParser::QueryStringAttribute(*header_node, "name", &database_name); + checker += header_node->QueryFloatAttribute("version", &version); + checker += UtilXmlParser::QueryStringAttribute(*header_node, "date", &date); + checker += header_node->QueryDoubleAttribute("north", &north); + checker += header_node->QueryDoubleAttribute("south", &south); + checker += header_node->QueryDoubleAttribute("east", &east); + checker += header_node->QueryDoubleAttribute("west", &west); + checker += + UtilXmlParser::QueryStringAttribute(*header_node, "vendor", &vendor); + + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parsing header attributes"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + auto geo_reference_node = header_node->FirstChildElement("geoReference"); + if (!geo_reference_node) { + std::string err_msg = "Error parsing header geoReoference attributes"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + auto geo_text = geo_reference_node->FirstChild()->ToText(); + if (!geo_text) { + std::string err_msg = "Error parsing header geoReoference text"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + // coordinate frame + std::string from_coordinate = geo_text->Value(); + int eastZone = GetLongZone(east); + int westZone = GetLongZone(west); + if (eastZone != westZone) { + std::string err_msg = "unsupport data in more than one zones"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + int zone = westZone; + std::string to_coordinate = "+proj=utm +zone=" + std::to_string(zone) + + " +ellps=WGS84 +datum=WGS84 +units=m +no_defs"; + CoordinateConvertTool::GetInstance()->SetConvertParam(from_coordinate, + to_coordinate); + + header->set_version(std::to_string(version)); + header->set_date(date); + header->mutable_projection()->set_proj(to_coordinate); + header->set_district(database_name); + header->set_rev_major(std::to_string(rev_major)); + header->set_rev_minor(std::to_string(rev_minor)); + header->set_left(west); + header->set_right(east); + header->set_top(north); + header->set_bottom(south); + header->set_vendor(vendor); + + return Status::OK(); +} + +} // namespace adapter +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/adapter/xml_parser/header_xml_parser.h b/modules/map/hdmap/adapter/xml_parser/header_xml_parser.h new file mode 100644 index 00000000000..f893b9bb4ef --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/header_xml_parser.h @@ -0,0 +1,36 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#ifndef MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_HEADER_XML_PARSER_H_ +#define MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_HEADER_XML_PARSER_H_ + +#include "tinyxml2/tinyxml2.h" + +#include "modules/map/hdmap/adapter/xml_parser/common_define.h" +#include "modules/map/hdmap/adapter/xml_parser/status.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +class HeaderXmlParser { + public: + static Status Parse(const tinyxml2::XMLElement& xml_node, PbHeader* header); +}; + +} // namespace adapter +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_HEADER_XML_PARSER_H_ diff --git a/modules/map/hdmap/adapter/xml_parser/junctions_xml_parser.cc b/modules/map/hdmap/adapter/xml_parser/junctions_xml_parser.cc new file mode 100644 index 00000000000..79c55211029 --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/junctions_xml_parser.cc @@ -0,0 +1,90 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#include "modules/map/hdmap/adapter/xml_parser/junctions_xml_parser.h" + +#include +#include + +#include "tinyxml2/tinyxml2.h" + +#include "modules/map/hdmap/adapter/xml_parser/common_define.h" +#include "modules/map/hdmap/adapter/xml_parser/status.h" +#include "modules/map/hdmap/adapter/xml_parser/util_xml_parser.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +Status JunctionsXmlParser::Parse(const tinyxml2::XMLElement& xml_node, + std::vector* junctions) { + const tinyxml2::XMLElement* junction_node = + xml_node.FirstChildElement("junction"); + while (junction_node) { + // id + std::string junction_id; + int checker = + UtilXmlParser::QueryStringAttribute(*junction_node, "id", &junction_id); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse junction id"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + // outline + const tinyxml2::XMLElement* sub_node = + junction_node->FirstChildElement("outline"); + if (!sub_node) { + std::string err_msg = "Error parse junction outline"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + PbJunction junction; + junction.mutable_id()->set_id(junction_id); + PbPolygon* polygon = junction.mutable_polygon(); + RETURN_IF_ERROR(UtilXmlParser::ParseOutline(*sub_node, polygon)); + + JunctionInternal junction_internal; + junction_internal.junction = junction; + + // overlap + sub_node = junction_node->FirstChildElement("objectOverlapGroup"); + if (sub_node) { + sub_node = sub_node->FirstChildElement("objectReference"); + while (sub_node) { + std::string object_id; + checker = + UtilXmlParser::QueryStringAttribute(*sub_node, "id", &object_id); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse junction overlap id"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + OverlapWithJunction overlap_with_juntion; + overlap_with_juntion.object_id = object_id; + junction_internal.overlap_with_junctions.push_back( + overlap_with_juntion); + + sub_node = sub_node->NextSiblingElement("objectReference"); + } + } + + junctions->push_back(junction_internal); + junction_node = junction_node->NextSiblingElement("junction"); + } + return Status::OK(); +} + +} // namespace adapter +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/adapter/xml_parser/junctions_xml_parser.h b/modules/map/hdmap/adapter/xml_parser/junctions_xml_parser.h new file mode 100644 index 00000000000..06096aa0ba9 --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/junctions_xml_parser.h @@ -0,0 +1,41 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#ifndef MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_JUNCTIONS_XML_PARSER_H_ +#define MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_JUNCTIONS_XML_PARSER_H_ + +#include +#include +#include + +#include "tinyxml2/tinyxml2.h" + +#include "modules/map/hdmap/adapter/xml_parser/common_define.h" +#include "modules/map/hdmap/adapter/xml_parser/status.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +class JunctionsXmlParser { + public: + static Status Parse(const tinyxml2::XMLElement& xml_node, + std::vector* junctions); +}; + +} // namespace adapter +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_JUNCTIONS_XML_PARSER_H_ diff --git a/modules/map/hdmap/adapter/xml_parser/lanes_xml_parser.cc b/modules/map/hdmap/adapter/xml_parser/lanes_xml_parser.cc new file mode 100644 index 00000000000..c65c6bac985 --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/lanes_xml_parser.cc @@ -0,0 +1,737 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#include "modules/map/hdmap/adapter/xml_parser/lanes_xml_parser.h" + +#include +#include +#include + +#include "modules/map/hdmap/adapter/xml_parser/util_xml_parser.h" + +namespace { +double ToMPS(double speed) { return speed * 1000.0 / 3600.0; } +bool IsReferenceLane(int lane_id) { return lane_id == 0; } +}; + +namespace apollo { +namespace hdmap { +namespace adapter { + +Status LanesXmlParser::Parse(const tinyxml2::XMLElement& xml_node, + const std::string& road_id, + std::vector* sections) { + CHECK_NOTNULL(sections); + const auto lanes_node = xml_node.FirstChildElement("lanes"); + CHECK_NOTNULL(lanes_node); + const tinyxml2::XMLElement* sub_node = + lanes_node->FirstChildElement("laneSection"); + CHECK_NOTNULL(sub_node); + + size_t section_cnt = 0; + while (sub_node) { + RoadSectionInternal section_internal; + std::string section_id = std::to_string(++section_cnt); + section_internal.id = section_id; + section_internal.section.mutable_id()->set_id(section_id); + RETURN_IF_ERROR(ParseLaneSection(*sub_node, + §ion_internal.lanes)); + RETURN_IF_ERROR(ParseSectionBoundary( + *sub_node, + section_internal.section.mutable_boundary()->mutable_outer_polygon())); + sections->push_back(section_internal); + + sub_node = sub_node->NextSiblingElement("laneSection"); + } + + CHECK_GT(sections->size(), 0); + + return Status::OK(); +} + +Status LanesXmlParser::ParseSectionBoundary( + const tinyxml2::XMLElement& xml_node, PbBoundaryPolygon* boundary) { + CHECK_NOTNULL(boundary); + + auto boundaries_node = xml_node.FirstChildElement("boundaries"); + if (boundaries_node == nullptr) { + std::string err_msg = "Error parse boundaries"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + auto sub_node = boundaries_node->FirstChildElement("boundary"); + while (sub_node) { + PbBoundaryEdge* boundary_edge = boundary->add_edge(); + RETURN_IF_ERROR( + UtilXmlParser::ParseCurve(*sub_node, boundary_edge->mutable_curve())); + std::string type; + int checker = UtilXmlParser::QueryStringAttribute(*sub_node, "type", &type); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse boundary type"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + PbBoundaryEdgeType boundary_type; + RETURN_IF_ERROR(ToPbBoundaryType(type, &boundary_type)); + boundary_edge->set_type(boundary_type); + + sub_node = sub_node->NextSiblingElement("boundary"); + } + + return Status::OK(); +} + +Status LanesXmlParser::ToPbBoundaryType(const std::string& type, + PbBoundaryEdgeType* boundary_type) { + CHECK_NOTNULL(boundary_type); + + std::string upper_type = UtilXmlParser::ToUpper(type); + + if (upper_type == "LEFTBOUNDARY") { + *boundary_type = hdmap::BoundaryEdge::LEFT_BOUNDARY; + } else if (upper_type == "RIGHTBOUNDARY") { + *boundary_type = hdmap::BoundaryEdge::RIGHT_BOUNDARY; + } else { + *boundary_type = hdmap::BoundaryEdge::NORMAL; + } + + return Status::OK(); +} + +Status LanesXmlParser::ParseLaneSection(const tinyxml2::XMLElement& xml_node, + std::vector* lanes) { + CHECK_NOTNULL(lanes); + + // left + const tinyxml2::XMLElement* sub_node = xml_node.FirstChildElement("left"); + if (sub_node) { + sub_node = sub_node->FirstChildElement("lane"); + while (sub_node) { + LaneInternal lane_internal; + RETURN_IF_ERROR(ParseLane(*sub_node, &lane_internal)); + *(lane_internal.lane.mutable_left_boundary()) = + lane_internal.lane.right_boundary(); + lane_internal.lane.clear_right_boundary(); + if (lanes->size() > 0) { + PbLane& left_neighbor_lane = lanes->back().lane; + *(left_neighbor_lane.mutable_right_boundary()) = + lane_internal.lane.left_boundary(); + } + lanes->push_back(lane_internal); + sub_node = sub_node->NextSiblingElement("lane"); + } + } + + // center + LaneInternal reference_lane_internal; + sub_node = xml_node.FirstChildElement("center"); + CHECK_NOTNULL(sub_node); + sub_node = sub_node->FirstChildElement("lane"); + CHECK_NOTNULL(sub_node); + RETURN_IF_ERROR(ParseLane(*sub_node, &reference_lane_internal)); + *(reference_lane_internal.lane.mutable_left_boundary()) = + reference_lane_internal.lane.right_boundary(); + if (lanes->size() > 0) { + PbLane& left_neighbor_lane = lanes->back().lane; + *(left_neighbor_lane.mutable_right_boundary()) = + reference_lane_internal.lane.left_boundary(); + } + + // right + sub_node = xml_node.FirstChildElement("right"); + if (sub_node) { + sub_node = sub_node->FirstChildElement("lane"); + PbLane* left_neighbor_lane = &reference_lane_internal.lane; + while (sub_node) { + // PbLane lane + LaneInternal lane_internal; + RETURN_IF_ERROR(ParseLane(*sub_node, &lane_internal)); + *(lane_internal.lane.mutable_left_boundary()) = + left_neighbor_lane->right_boundary(); + lanes->push_back(lane_internal); + left_neighbor_lane = &lanes->back().lane; + sub_node = sub_node->NextSiblingElement("lane"); + } + } + return Status::OK(); +} + +Status LanesXmlParser::ParseLane(const tinyxml2::XMLElement& xml_node, + LaneInternal* lane_internal) { + CHECK_NOTNULL(lane_internal); + + PbLane* lane = &lane_internal->lane; + // lane id + int id = 0; + int checker = xml_node.QueryIntAttribute("id", &id); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse lane id"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + std::string lane_id; + checker = UtilXmlParser::QueryStringAttribute(xml_node, "uid", &lane_id); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse lane uid"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + lane->mutable_id()->set_id(lane_id); + + // lane type + std::string lane_type; + checker = UtilXmlParser::QueryStringAttribute(xml_node, "type", &lane_type); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse lane type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + PbLaneType pb_lane_type; + Status success = ToPbLaneType(lane_type, &pb_lane_type); + if (!success.ok()) { + std::string err_msg = "Error convert lane type to pb lane type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + lane->set_type(pb_lane_type); + + // border + const tinyxml2::XMLElement* sub_node = xml_node.FirstChildElement("border"); + if (sub_node) { + PbLaneBoundary* lane_boundary = lane->mutable_right_boundary(); + CHECK(lane_boundary != nullptr); + success = + UtilXmlParser::ParseCurve(*sub_node, lane_boundary->mutable_curve()); + if (!success.ok()) { + std::string err_msg = "Error parse lane border"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + lane_boundary->set_length( + UtilXmlParser::CurveLength(*lane_boundary->mutable_curve())); + } + + // road mark + if (sub_node) { + sub_node = sub_node->FirstChildElement("borderType"); + } + while (sub_node) { + PbLaneBoundary* lane_boundary = lane->mutable_right_boundary(); + PbLaneBoundaryTypeType boundary_type; + success = ParseLaneBorderMark(*sub_node, &boundary_type); + if (!success.ok()) { + std::string err_msg = "Error parse lane border type"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + double s_offset = 0.0; + checker = sub_node->QueryDoubleAttribute("sOffset", &s_offset); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse lane boundary type offset."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + auto lane_boundary_type = lane_boundary->add_boundary_type(); + lane_boundary_type->set_s(s_offset); + lane_boundary_type->add_types(boundary_type); + sub_node = sub_node->NextSiblingElement("borderType"); + } + + // reference line + if (IsReferenceLane(id)) { + return Status::OK(); + } + + // turn type + std::string turn_type; + checker = + UtilXmlParser::QueryStringAttribute(xml_node, "turnType", &turn_type); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse lane turn type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + PbTurnType pb_turn_type; + success = ToPbTurnType(turn_type, &pb_turn_type); + if (!success.ok()) { + std::string err_msg = "Error convert turn type to pb turn type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + lane->set_turn(pb_turn_type); + + // direction + RETURN_IF_ERROR(ParseDirection(xml_node, lane)); + + // link + sub_node = xml_node.FirstChildElement("link"); + if (sub_node) { + ParseLaneLink(*sub_node, lane); + } + + // center curve + RETURN_IF_ERROR(ParseCenterCurve(xml_node, lane)); + // speed + RETURN_IF_ERROR(ParseSpeed(xml_node, lane)); + // sample association + RETURN_IF_ERROR(ParseSampleAssociates(xml_node, lane)); + + // overlap object + ParseObjectOverlapGroup(xml_node, &lane_internal->overlap_objects); + // overlap signal + ParseSignalOverlapGroup(xml_node, &lane_internal->overlap_signals); + // overlap junction + ParseJunctionOverlapGroup(xml_node, &lane_internal->overlap_junctions); + // overlap lane + ParseLaneOverlapGroup(xml_node, &lane_internal->overlap_lanes); + + return Status::OK(); +} + +Status LanesXmlParser::ParseDirection(const tinyxml2::XMLElement& xml_node, + PbLane* lane) { + CHECK_NOTNULL(lane); + std::string direction; + int checker = + UtilXmlParser::QueryStringAttribute(xml_node, "direction", &direction); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse lane direction."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + PbLaneDirection pb_lane_direction; + Status success = ToPbDirection(direction, &pb_lane_direction); + if (!success.ok()) { + std::string err_msg = "Error convert direction to pb direction"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + lane->set_direction(pb_lane_direction); + + return Status::OK(); +} + +Status LanesXmlParser::ParseCenterCurve(const tinyxml2::XMLElement& xml_node, + PbLane* lane) { + CHECK_NOTNULL(lane); + auto sub_node = xml_node.FirstChildElement("centerLine"); + if (!sub_node) { + std::string err_msg = "Error parse lane center curve"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + PbCurve* center_curve = lane->mutable_central_curve(); + Status success = UtilXmlParser::ParseCurve(*sub_node, center_curve); + if (!success.ok()) { + std::string err_msg = "Error parse lane center curve"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + lane->set_length(UtilXmlParser::CurveLength(*center_curve)); + + return Status::OK(); +} + +Status LanesXmlParser::ParseSpeed(const tinyxml2::XMLElement& xml_node, + PbLane* lane) { + double max_speed = 0.0; + auto sub_node = xml_node.FirstChildElement("speed"); + if (sub_node) { + int checker = sub_node->QueryDoubleAttribute("max", &max_speed); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse lane speed attribute"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + lane->set_speed_limit(ToMPS(max_speed)); + } + + return Status::OK(); +} + +Status LanesXmlParser::ParseSampleAssociates( + const tinyxml2::XMLElement& xml_node, PbLane* lane) { + CHECK_NOTNULL(lane); + auto sub_node = xml_node.FirstChildElement("sampleAssociates"); + if (sub_node == nullptr) { + std::string err_msg = "Error parse sample associates"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + sub_node = sub_node->FirstChildElement("sampleAssociate"); + if (sub_node == nullptr) { + std::string err_msg = "Error parse sample associate"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + while (sub_node) { + double left_width = 0.0; + double right_width = 0.0; + double s = 0.0; + int checker = sub_node->QueryDoubleAttribute("sOffset", &s); + checker += sub_node->QueryDoubleAttribute("leftWidth", &left_width); + checker += sub_node->QueryDoubleAttribute("rightWidth", &right_width); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse lane sample associate attribute"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + auto left_sample = lane->add_left_sample(); + left_sample->set_s(s); + left_sample->set_width(left_width); + + auto right_sample = lane->add_right_sample(); + right_sample->set_s(s); + right_sample->set_width(right_width); + + sub_node = sub_node->NextSiblingElement("sampleAssociate"); + } + + return Status::OK(); +} + +Status LanesXmlParser::ParseObjectOverlapGroup( + const tinyxml2::XMLElement& xml_node, + std::vector* object_overlaps) { + CHECK_NOTNULL(object_overlaps); + + auto object_overlap = xml_node.FirstChildElement("objectOverlapGroup"); + if (object_overlap) { + auto sub_node = object_overlap->FirstChildElement("objectReference"); + while (sub_node) { + std::string object_id; + double start_s = 0.0; + double end_s = 0.0; + int checker = + UtilXmlParser::QueryStringAttribute(*sub_node, "id", &object_id); + checker += sub_node->QueryDoubleAttribute("startOffset", &start_s); + checker += sub_node->QueryDoubleAttribute("endOffset", &end_s); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse lane object overlap"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + bool is_merge = false; + checker = sub_node->QueryBoolAttribute("isMerge", &is_merge); + if (checker != tinyxml2::XML_SUCCESS) { + is_merge = false; + } + + OverlapWithLane overlap_with_lane; + overlap_with_lane.object_id = object_id; + overlap_with_lane.start_s = start_s; + overlap_with_lane.end_s = end_s; + overlap_with_lane.is_merge = is_merge; + object_overlaps->push_back(overlap_with_lane); + + sub_node = sub_node->NextSiblingElement("objectReference"); + } + } + return Status::OK(); +} + +Status LanesXmlParser::ParseSignalOverlapGroup( + const tinyxml2::XMLElement& xml_node, + std::vector* signal_overlaps) { + CHECK_NOTNULL(signal_overlaps); + + auto signal_overlap = xml_node.FirstChildElement("signalOverlapGroup"); + if (signal_overlap) { + auto sub_node = signal_overlap->FirstChildElement("signalReference"); + while (sub_node) { + std::string object_id; + double start_s = 0.0; + double end_s = 0.0; + int checker = + UtilXmlParser::QueryStringAttribute(*sub_node, "id", &object_id); + checker += sub_node->QueryDoubleAttribute("startOffset", &start_s); + checker += sub_node->QueryDoubleAttribute("endOffset", &end_s); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse lane signal overlap"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + bool is_merge = false; + checker = sub_node->QueryBoolAttribute("isMerge", &is_merge); + if (checker != tinyxml2::XML_SUCCESS) { + is_merge = false; + } + + OverlapWithLane overlap_with_lane; + overlap_with_lane.object_id = object_id; + overlap_with_lane.start_s = start_s; + overlap_with_lane.end_s = end_s; + overlap_with_lane.is_merge = is_merge; + + signal_overlaps->push_back(overlap_with_lane); + + sub_node = sub_node->NextSiblingElement("signalReference"); + } + } + return Status::OK(); +} + +Status LanesXmlParser::ParseJunctionOverlapGroup( + const tinyxml2::XMLElement& xml_node, + std::vector* junction_overlaps) { + CHECK_NOTNULL(junction_overlaps); + + auto overlap_group = xml_node.FirstChildElement("junctionOverlapGroup"); + if (overlap_group) { + auto sub_node = overlap_group->FirstChildElement("junctionReference"); + while (sub_node) { + std::string object_id; + double start_s = 0.0; + double end_s = 0.0; + int checker = + UtilXmlParser::QueryStringAttribute(*sub_node, "id", &object_id); + checker += sub_node->QueryDoubleAttribute("startOffset", &start_s); + checker += sub_node->QueryDoubleAttribute("endOffset", &end_s); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse lane junction overlap"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + bool is_merge = false; + checker = sub_node->QueryBoolAttribute("isMerge", &is_merge); + if (checker != tinyxml2::XML_SUCCESS) { + is_merge = false; + } + + OverlapWithLane overlap_with_lane; + overlap_with_lane.object_id = object_id; + overlap_with_lane.start_s = start_s; + overlap_with_lane.end_s = end_s; + overlap_with_lane.is_merge = is_merge; + + junction_overlaps->push_back(overlap_with_lane); + + sub_node = sub_node->NextSiblingElement("junctionReference"); + } + } + return Status::OK(); +} + +Status LanesXmlParser::ParseLaneOverlapGroup( + const tinyxml2::XMLElement& xml_node, + std::vector* lane_overlaps) { + CHECK_NOTNULL(lane_overlaps); + + auto overlap_node = xml_node.FirstChildElement("laneOverlapGroup"); + if (overlap_node) { + auto sub_node = overlap_node->FirstChildElement("laneReference"); + while (sub_node) { + std::string lane_id; + double start_s = 0.0; + double end_s = 0.0; + int checker = UtilXmlParser::QueryStringAttribute(*sub_node, "id", + &lane_id); + checker += sub_node->QueryDoubleAttribute("startOffset", &start_s); + checker += sub_node->QueryDoubleAttribute("endOffset", &end_s); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse lane lane overlap"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + bool is_merge = false; + checker = sub_node->QueryBoolAttribute("isMerge", &is_merge); + if (checker != tinyxml2::XML_SUCCESS) { + is_merge = false; + } + + OverlapWithLane overlap_with_lane; + overlap_with_lane.object_id = lane_id; + overlap_with_lane.start_s = start_s; + overlap_with_lane.end_s = end_s; + overlap_with_lane.is_merge = is_merge; + + lane_overlaps->push_back(overlap_with_lane); + + sub_node = sub_node->NextSiblingElement("laneReference"); + } + } + + return Status::OK(); +} + +Status LanesXmlParser::ToPbLaneType(const std::string& type, + PbLaneType* lane_type) { + CHECK_NOTNULL(lane_type); + + std::string upper_str = UtilXmlParser::ToUpper(type); + + if (upper_str == "NONE") { + *lane_type = hdmap::Lane::NONE; + } else if (upper_str == "DRIVING") { + *lane_type = hdmap::Lane::CITY_DRIVING; + } else if (upper_str == "BIKING") { + *lane_type = hdmap::Lane::BIKING; + } else if (upper_str == "PARKING") { + *lane_type = hdmap::Lane::PARKING; + } else { + std::string err_msg = "Error or unsupport lane type:" + type; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + return Status::OK(); +} + +Status LanesXmlParser::ToPbTurnType(const std::string& type, + PbTurnType* pb_turn_type) { + CHECK_NOTNULL(pb_turn_type); + + std::string upper_str = UtilXmlParser::ToUpper(type); + + if (upper_str == "NOTURN") { + *pb_turn_type = hdmap::Lane::NO_TURN; + } else if (upper_str == "LEFTTURN") { + *pb_turn_type = hdmap::Lane::LEFT_TURN; + } else if (upper_str == "RIGHTTURN") { + *pb_turn_type = hdmap::Lane::RIGHT_TURN; + } else if (upper_str == "UTURN") { + *pb_turn_type = hdmap::Lane::U_TURN; + } else { + std::string err_msg = "Error or unsupport turn type:" + type; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + return Status::OK(); +} + +Status LanesXmlParser::ToPbDirection(const std::string& type, + PbLaneDirection* pb_direction) { + CHECK_NOTNULL(pb_direction); + + std::string upper_str = UtilXmlParser::ToUpper(type); + + if (upper_str == "FORWARD") { + *pb_direction = hdmap::Lane::FORWARD; + } else if (upper_str == "BACKWARD") { + *pb_direction = hdmap::Lane::BACKWARD; + } else if (upper_str == "BIDIRECTION") { + *pb_direction = hdmap::Lane::BIDIRECTION; + } else { + std::string err_msg = "Error or unsupport dirction:" + type; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + return Status::OK(); +} + +void LanesXmlParser::ParseLaneLink(const tinyxml2::XMLElement& xml_node, + PbLane* lane) { + CHECK_NOTNULL(lane); + + const tinyxml2::XMLElement* sub_node = + xml_node.FirstChildElement("predecessor"); + while (sub_node) { + std::string lane_id; + int checker = UtilXmlParser::QueryStringAttribute(*sub_node, "id", + &lane_id); + if (checker == tinyxml2::XML_SUCCESS) { + PbID* pb_lane_id = lane->add_predecessor_id(); + pb_lane_id->set_id(lane_id); + } + sub_node = sub_node->NextSiblingElement("predecessor"); + } + + sub_node = xml_node.FirstChildElement("successor"); + while (sub_node) { + std::string lane_id; + int checker = UtilXmlParser::QueryStringAttribute(*sub_node, "id", + &lane_id); + if (checker == tinyxml2::XML_SUCCESS) { + PbID* pb_lane_id = lane->add_successor_id(); + pb_lane_id->set_id(lane_id); + } + sub_node = sub_node->NextSiblingElement("successor"); + } + sub_node = xml_node.FirstChildElement("neighbor"); + while (sub_node) { + std::string side; + std::string direction; + std::string lane_id; + int checker = UtilXmlParser::QueryStringAttribute(*sub_node, "id", + &lane_id); + checker += UtilXmlParser::QueryStringAttribute(*sub_node, "side", &side); + checker += + UtilXmlParser::QueryStringAttribute(*sub_node, "direction", &direction); + if (checker == tinyxml2::XML_SUCCESS) { + if (side == "left") { + lane->add_left_neighbor_forward_lane_id()->set_id(lane_id); + } else if (side == "right") { + lane->add_right_neighbor_forward_lane_id()->set_id(lane_id); + } + } + sub_node = sub_node->NextSiblingElement("neighbor"); + } +} + +Status LanesXmlParser::ParseLaneBorderMark( + const tinyxml2::XMLElement& xml_node, + PbLaneBoundaryTypeType* boundary_type) { + CHECK_NOTNULL(boundary_type); + + std::string type; + std::string color; + + int checker = UtilXmlParser::QueryStringAttribute(xml_node, "type", &type); + checker += UtilXmlParser::QueryStringAttribute(xml_node, "color", &color); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error to parse lane border mark"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + Status success = ToPbLaneMarkType(type, color, boundary_type); + if (!success.ok()) { + std::string err_msg = "fail to convert to pb lane border mark"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + return Status::OK(); +} + +Status LanesXmlParser::ToPbLaneMarkType(const std::string& type, + const std::string& color, + PbLaneBoundaryTypeType* boundary_type) { + CHECK_NOTNULL(boundary_type); + + std::string upper_type = UtilXmlParser::ToUpper(type); + std::string upper_color = UtilXmlParser::ToUpper(color); + + if (upper_type == "CURB") { + *boundary_type = hdmap::LaneBoundaryType::CURB; + return Status::OK(); + } + + if (upper_type == "NONE") { + *boundary_type = hdmap::LaneBoundaryType::UNKNOWN; + return Status::OK(); + } + + if (upper_color == "YELLOW") { + if (upper_type == "SOLID") { + *boundary_type = hdmap::LaneBoundaryType::SOLID_YELLOW; + } else if (upper_type == "BROKEN") { + *boundary_type = hdmap::LaneBoundaryType::DOTTED_YELLOW; + } else { + std::string err_msg = "Error or unsupport lane boundary type"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + } else if (upper_color == "WHITE") { + if (upper_type == "SOLID") { + *boundary_type = hdmap::LaneBoundaryType::SOLID_WHITE; + } else if (upper_type == "BROKEN") { + *boundary_type = hdmap::LaneBoundaryType::DOTTED_WHITE; + } else { + std::string err_msg = "Error or unsupport lane boundary type"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + } else { + std::string err_msg = "Error or unsupport lane boundary color."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + return Status::OK(); +} + +} // namespace adapter +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/adapter/xml_parser/lanes_xml_parser.h b/modules/map/hdmap/adapter/xml_parser/lanes_xml_parser.h new file mode 100644 index 00000000000..e368eea3a12 --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/lanes_xml_parser.h @@ -0,0 +1,85 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#ifndef MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_LANE_XML_PARSER_H_ +#define MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_LANE_XML_PARSER_H_ + +#include +#include + +#include "tinyxml2/tinyxml2.h" + +#include "modules/map/hdmap/adapter/xml_parser/common_define.h" +#include "modules/map/hdmap/adapter/xml_parser/status.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +class LanesXmlParser { + public: + static Status Parse(const tinyxml2::XMLElement& xml_node, + const std::string& road_id, + std::vector* sections); + + private: + static Status ParseLaneSection(const tinyxml2::XMLElement& xml_node, + std::vector* lanes); + + static Status ParseSectionBoundary(const tinyxml2::XMLElement& xml_node, + PbBoundaryPolygon* boundary); + + static Status ToPbBoundaryType(const std::string& type, + PbBoundaryEdgeType* boundary_type); + static Status ParseLane(const tinyxml2::XMLElement& xml_node, + LaneInternal* lane_internal); + static Status ParseDirection(const tinyxml2::XMLElement& xml_node, + PbLane* lane); + static Status ParseCenterCurve(const tinyxml2::XMLElement& xml_node, + PbLane* lane); + static Status ParseSpeed(const tinyxml2::XMLElement& xml_node, PbLane* lane); + static Status ParseSampleAssociates(const tinyxml2::XMLElement& xml_node, + PbLane* lane); + static Status ParseObjectOverlapGroup( + const tinyxml2::XMLElement& xml_node, + std::vector* object_overlaps); + static Status ParseSignalOverlapGroup( + const tinyxml2::XMLElement& xml_node, + std::vector* signal_overlaps); + static Status ParseJunctionOverlapGroup( + const tinyxml2::XMLElement& xml_node, + std::vector* junction_overlaps); + static Status ParseLaneOverlapGroup( + const tinyxml2::XMLElement& xml_node, + std::vector* lane_overlaps); + + static Status ToPbLaneType(const std::string& type, PbLaneType* pb_type); + static Status ToPbTurnType(const std::string& type, PbTurnType* pb_turn_type); + static Status ToPbDirection(const std::string& type, + PbLaneDirection* pb_direction); + + static void ParseLaneLink(const tinyxml2::XMLElement& xml_node, + PbLane* lane); + static Status ParseLaneBorderMark(const tinyxml2::XMLElement& xml_node, + PbLaneBoundaryTypeType* boundary_type); + static Status ToPbLaneMarkType(const std::string& type, + const std::string& color, + PbLaneBoundaryTypeType* boundary_type); +}; + +} // namespace adapter +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_LANE_XML_PARSER_H_ diff --git a/modules/map/hdmap/adapter/xml_parser/objects_xml_parser.cc b/modules/map/hdmap/adapter/xml_parser/objects_xml_parser.cc new file mode 100644 index 00000000000..e414a21f138 --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/objects_xml_parser.cc @@ -0,0 +1,175 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#include "modules/map/hdmap/adapter/xml_parser/objects_xml_parser.h" + +#include +#include + +#include "modules/map/hdmap/adapter/xml_parser/util_xml_parser.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +Status ObjectsXmlParser::ParseCrosswalks(const tinyxml2::XMLElement& xml_node, + std::vector* crosswalks) { + CHECK_NOTNULL(crosswalks); + const tinyxml2::XMLElement* sub_node = xml_node.FirstChildElement("object"); + while (sub_node) { + std::string object_type; + std::string object_id; + int checker = + UtilXmlParser::QueryStringAttribute(*sub_node, "type", &object_type); + checker += UtilXmlParser::QueryStringAttribute(*sub_node, "id", &object_id); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse object type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + if (object_type == "crosswalk") { + PbCrosswalk crosswalk; + crosswalk.mutable_id()->set_id(object_id); + PbPolygon* polygon = crosswalk.mutable_polygon(); + const tinyxml2::XMLElement* outline_node = + sub_node->FirstChildElement("outline"); + if (outline_node == nullptr) { + std::string err_msg = "Error parse crosswalk outline"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + RETURN_IF_ERROR(UtilXmlParser::ParseOutline(*outline_node, polygon)); + crosswalks->emplace_back(crosswalk); + } + sub_node = sub_node->NextSiblingElement("object"); + } + return Status::OK(); +} + +Status ObjectsXmlParser::ParseClearAreas( + const tinyxml2::XMLElement& xml_node, + std::vector* clear_areas) { + CHECK_NOTNULL(clear_areas); + const tinyxml2::XMLElement* sub_node = xml_node.FirstChildElement("object"); + while (sub_node) { + std::string object_type; + std::string object_id; + int checker = + UtilXmlParser::QueryStringAttribute(*sub_node, "id", &object_id); + checker += + UtilXmlParser::QueryStringAttribute(*sub_node, "type", &object_type); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse object type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + if (object_type == "clearArea") { + PbClearArea clear_area; + clear_area.mutable_id()->set_id(object_id); + PbPolygon* polygon = clear_area.mutable_polygon(); + CHECK(polygon != nullptr); + const tinyxml2::XMLElement* outline_node = + sub_node->FirstChildElement("outline"); + if (outline_node == nullptr) { + std::string err_msg = "Error parse cleararea outline"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + RETURN_IF_ERROR(UtilXmlParser::ParseOutline(*outline_node, polygon)); + clear_areas->emplace_back(clear_area); + } + sub_node = sub_node->NextSiblingElement("object"); + } + + return Status::OK(); +} + +Status ObjectsXmlParser::ParseSpeedBumps( + const tinyxml2::XMLElement& xml_node, + std::vector* speed_bumps) { + CHECK_NOTNULL(speed_bumps); + const tinyxml2::XMLElement* object_node = + xml_node.FirstChildElement("object"); + while (object_node) { + std::string object_type; + std::string object_id; + int checker = + UtilXmlParser::QueryStringAttribute(*object_node, "id", &object_id); + checker += + UtilXmlParser::QueryStringAttribute(*object_node, "type", &object_type); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse object type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + if (object_type == "speedBump") { + PbSpeedBump speed_bump; + const tinyxml2::XMLElement* sub_node = + object_node->FirstChildElement("geometry"); + speed_bump.mutable_id()->set_id(object_id); + while (sub_node) { + PbCurve* curve = speed_bump.add_position(); + PbCurveSegment* curve_segment = curve->add_segment(); + RETURN_IF_ERROR(UtilXmlParser::ParseGeometry(*sub_node, curve_segment)); + sub_node = sub_node->NextSiblingElement("geometry"); + } + if (speed_bump.position_size() <= 0) { + std::string err_msg = "Error speed bump miss stop line."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + speed_bumps->emplace_back(speed_bump); + } + object_node = object_node->NextSiblingElement("object"); + } + return Status::OK(); +} + +Status ObjectsXmlParser::ParseStopLines( + const tinyxml2::XMLElement& xml_node, + std::vector* stop_lines) { + CHECK_NOTNULL(stop_lines); + const tinyxml2::XMLElement* object_node = + xml_node.FirstChildElement("object"); + while (object_node) { + std::string object_type; + std::string object_id; + int checker = + UtilXmlParser::QueryStringAttribute(*object_node, "id", &object_id); + checker += + UtilXmlParser::QueryStringAttribute(*object_node, "type", &object_type); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse object type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + if (object_type == "stopline") { + StopLineInternal stop_line; + stop_line.id = object_id; + PbCurveSegment* curve_segment = stop_line.curve.add_segment(); + CHECK(curve_segment != nullptr); + const auto sub_node = object_node->FirstChildElement("geometry"); + if (sub_node == nullptr) { + std::string err_msg = "Error parse stopline geometry"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + RETURN_IF_ERROR(UtilXmlParser::ParseGeometry(*sub_node, curve_segment)); + stop_lines->emplace_back(stop_line); + } + object_node = object_node->NextSiblingElement("object"); + } + return Status::OK(); +} + +} // namespace adapter +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/adapter/xml_parser/objects_xml_parser.h b/modules/map/hdmap/adapter/xml_parser/objects_xml_parser.h new file mode 100644 index 00000000000..d178df7848c --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/objects_xml_parser.h @@ -0,0 +1,45 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#ifndef MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_OBJECTS_XML_PARSER_H_ +#define MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_OBJECTS_XML_PARSER_H_ + +#include + +#include "tinyxml2/tinyxml2.h" + +#include "modules/map/hdmap/adapter/xml_parser/common_define.h" +#include "modules/map/hdmap/adapter/xml_parser/status.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +class ObjectsXmlParser { + public: + static Status ParseCrosswalks(const tinyxml2::XMLElement& xml_node, + std::vector* crosswalks); + static Status ParseClearAreas(const tinyxml2::XMLElement& xml_node, + std::vector* clear_areas); + static Status ParseSpeedBumps(const tinyxml2::XMLElement& xml_node, + std::vector* speed_bumps); + static Status ParseStopLines(const tinyxml2::XMLElement& xml_node, + std::vector* stop_lines); +}; + +} // namespace adapter +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_OBJECTS_XML_PARSER_H_ diff --git a/modules/map/hdmap/adapter/xml_parser/roads_xml_parser.cc b/modules/map/hdmap/adapter/xml_parser/roads_xml_parser.cc new file mode 100644 index 00000000000..0b9182848d3 --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/roads_xml_parser.cc @@ -0,0 +1,95 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#include +#include + +#include "modules/map/hdmap/adapter/xml_parser/lanes_xml_parser.h" +#include "modules/map/hdmap/adapter/xml_parser/objects_xml_parser.h" +#include "modules/map/hdmap/adapter/xml_parser/roads_xml_parser.h" +#include "modules/map/hdmap/adapter/xml_parser/signals_xml_parser.h" +#include "modules/map/hdmap/adapter/xml_parser/util_xml_parser.h" + +namespace { +bool IsRoadBelongToJunction(const std::string& road_id) { + CHECK(!road_id.empty()); + return road_id != "-1"; +} +} // namespace + +namespace apollo { +namespace hdmap { +namespace adapter { + +Status RoadsXmlParser::Parse(const tinyxml2::XMLElement& xml_node, + std::vector* roads) { + CHECK_NOTNULL(roads); + + auto road_node = xml_node.FirstChildElement("road"); + while (road_node) { + // road attributes + std::string id; + std::string junction_id; + int checker = UtilXmlParser::QueryStringAttribute(*road_node, "id", &id); + checker += UtilXmlParser::QueryStringAttribute(*road_node, "junction", + &junction_id); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parsing road attributes"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + RoadInternal road_internal; + road_internal.id = id; + road_internal.road.mutable_id()->set_id(id); + if (IsRoadBelongToJunction(junction_id)) { + road_internal.road.mutable_junction_id()->set_id(junction_id); + } + // lanes + RETURN_IF_ERROR(LanesXmlParser::Parse(*road_node, road_internal.id, + &road_internal.sections)); + + // objects + auto sub_node = road_node->FirstChildElement("objects"); + if (sub_node != nullptr) { + // stop line + ObjectsXmlParser::ParseStopLines(*sub_node, &road_internal.stop_lines); + // crosswalks + ObjectsXmlParser::ParseCrosswalks(*sub_node, &road_internal.crosswalks); + // clearareas + ObjectsXmlParser::ParseClearAreas(*sub_node, &road_internal.clear_areas); + // speed_bumps + ObjectsXmlParser::ParseSpeedBumps(*sub_node, &road_internal.speed_bumps); + } + + // signals + sub_node = road_node->FirstChildElement("signals"); + if (sub_node != nullptr) { + // traffic lights + SignalsXmlParser::ParseTrafficLights(*sub_node, + &road_internal.traffic_lights); + // stop signs + SignalsXmlParser::ParseStopSigns(*sub_node, &road_internal.stop_signs); + // yield signs + SignalsXmlParser::ParseYieldSigns(*sub_node, &road_internal.yield_signs); + } + + roads->push_back(road_internal); + road_node = road_node->NextSiblingElement("road"); + } + + return Status::OK(); +} + +} // namespace adapter +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/adapter/xml_parser/roads_xml_parser.h b/modules/map/hdmap/adapter/xml_parser/roads_xml_parser.h new file mode 100644 index 00000000000..915b3790306 --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/roads_xml_parser.h @@ -0,0 +1,41 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#ifndef MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_ROADS_XML_PARSER_H_ +#define MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_ROADS_XML_PARSER_H_ + +#include +#include +#include + +#include "tinyxml2/tinyxml2.h" + +#include "modules/map/hdmap/adapter/xml_parser/common_define.h" +#include "modules/map/hdmap/adapter/xml_parser/status.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +class RoadsXmlParser { + public: + static Status Parse(const tinyxml2::XMLElement& xml_node, + std::vector* roads); +}; + +} // namespace adapter +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_ROADS_XML_PARSER_H_ diff --git a/modules/map/hdmap/adapter/xml_parser/signals_xml_parser.cc b/modules/map/hdmap/adapter/xml_parser/signals_xml_parser.cc new file mode 100644 index 00000000000..58b56ee6bee --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/signals_xml_parser.cc @@ -0,0 +1,264 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#include "modules/map/hdmap/adapter/xml_parser/signals_xml_parser.h" + +#include +#include +#include + +#include "modules/map/hdmap/adapter/xml_parser/util_xml_parser.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +Status SignalsXmlParser::ParseTrafficLights( + const tinyxml2::XMLElement& xml_node, + std::vector* traffic_lights) { + CHECK_NOTNULL(traffic_lights); + auto signal_node = xml_node.FirstChildElement("signal"); + while (signal_node) { + std::string object_type; + std::string object_id; + int checker = + UtilXmlParser::QueryStringAttribute(*signal_node, "type", &object_type); + checker += + UtilXmlParser::QueryStringAttribute(*signal_node, "id", &object_id); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse signal type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + if (object_type == "trafficLight") { + PbSignal traffic_light; + traffic_light.mutable_id()->set_id(object_id); + std::string layout_type; + int checker = UtilXmlParser::QueryStringAttribute( + *signal_node, "layoutType", &layout_type); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse signal layout type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + PbSignalType signal_layout_type; + ToPbSignalType(layout_type, &signal_layout_type); + traffic_light.set_type(signal_layout_type); + + PbPolygon* polygon = traffic_light.mutable_boundary(); + auto outline_node = signal_node->FirstChildElement("outline"); + if (outline_node == nullptr) { + std::string err_msg = "Error parse signal outline"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + RETURN_IF_ERROR(UtilXmlParser::ParseOutline(*outline_node, polygon)); + auto sub_node = signal_node->FirstChildElement("subSignal"); + if (sub_node == nullptr) { + std::string err_msg = "Error parse sub signal."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + while (sub_node) { + std::string sub_signal_id; + std::string sub_signal_xml_type; + checker = UtilXmlParser::QueryStringAttribute(*sub_node, "type", + &sub_signal_xml_type); + checker += UtilXmlParser::QueryStringAttribute(*sub_node, "id", + &sub_signal_id); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse sub signal layout type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + PbSubSignal* sub_signal = traffic_light.add_subsignal(); + PbSubSignalType sub_signal_type; + ToPbSubSignalType(sub_signal_xml_type, &sub_signal_type); + sub_signal->mutable_id()->set_id(sub_signal_id); + sub_signal->set_type(sub_signal_type); + PbPoint3D* pt = sub_signal->mutable_location(); + RETURN_IF_ERROR(UtilXmlParser::ParsePoint(*sub_node, pt)); + + sub_node = sub_node->NextSiblingElement("subSignal"); + } + + TrafficLightInternal trafficlight_internal; + trafficlight_internal.id = object_id; + trafficlight_internal.traffic_light = traffic_light; + + sub_node = signal_node->FirstChildElement("stopline"); + if (sub_node) { + sub_node = sub_node->FirstChildElement("objectReference"); + while (sub_node) { + std::string stop_line_id; + int checker = UtilXmlParser::QueryStringAttribute(*sub_node, "id", + &stop_line_id); + CHECK(checker == tinyxml2::XML_SUCCESS); + trafficlight_internal.stop_line_ids.insert(stop_line_id); + sub_node = sub_node->NextSiblingElement("objectReference"); + } + } + traffic_lights->emplace_back(trafficlight_internal); + } + signal_node = signal_node->NextSiblingElement("signal"); + } + return Status::OK(); +} + +Status SignalsXmlParser::ToPbSignalType(const std::string& xml_type, + PbSignalType* signal_type) { + CHECK_NOTNULL(signal_type); + + std::string upper_str = UtilXmlParser::ToUpper(xml_type); + + if (upper_str == "UNKNOWN") { + *signal_type = hdmap::Signal::UNKNOWN; + } else if (upper_str == "MIX2HORIZONTAL") { + *signal_type = hdmap::Signal::MIX_2_HORIZONTAL; + } else if (upper_str == "MIX2VERTICAL") { + *signal_type = hdmap::Signal::MIX_2_VERTICAL; + } else if (upper_str == "MIX3HORIZONTAL") { + *signal_type = hdmap::Signal::MIX_3_HORIZONTAL; + } else if (upper_str == "MIX3VERTICAL") { + *signal_type = hdmap::Signal::MIX_3_VERTICAL; + } else if (upper_str == "SINGLE") { + *signal_type = hdmap::Signal::SINGLE; + } else { + std::string err_msg = "Error or unsupport signal layout type"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + return Status::OK(); +} + +Status SignalsXmlParser::ToPbSubSignalType(const std::string& xml_type, + PbSubSignalType* sub_signal_type) { + CHECK_NOTNULL(sub_signal_type); + + std::string upper_str = UtilXmlParser::ToUpper(xml_type); + + if (upper_str == "UNKNOWN") { + *sub_signal_type = hdmap::Subsignal::UNKNOWN; + } else if (upper_str == "CIRCLE") { + *sub_signal_type = hdmap::Subsignal::CIRCLE; + } else if (upper_str == "ARROWLEFT") { + *sub_signal_type = hdmap::Subsignal::ARROW_LEFT; + } else if (upper_str == "ARROWFORWARD") { + *sub_signal_type = hdmap::Subsignal::ARROW_FORWARD; + } else if (upper_str == "ARROWRIGHT") { + *sub_signal_type = hdmap::Subsignal::ARROW_RIGHT; + } else if (upper_str == "ARROWLEFTANDFORWARD") { + *sub_signal_type = hdmap::Subsignal::ARROW_LEFT_AND_FORWARD; + } else if (upper_str == "ARROWRIGHTANDFORWARD") { + *sub_signal_type = hdmap::Subsignal::ARROW_RIGHT_AND_FORWARD; + } else if (upper_str == "ARROWUTURN") { + *sub_signal_type = hdmap::Subsignal::ARROW_U_TURN; + } else { + std::string err_msg = "Error or unsupport sub signal type"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + return Status::OK(); +} + +Status SignalsXmlParser::ParseStopSigns( + const tinyxml2::XMLElement& xml_node, + std::vector* stop_signs) { + CHECK_NOTNULL(stop_signs); + + auto signal_node = xml_node.FirstChildElement("signal"); + while (signal_node) { + std::string object_type; + std::string object_id; + int checker = + UtilXmlParser::QueryStringAttribute(*signal_node, "type", &object_type); + checker += + UtilXmlParser::QueryStringAttribute(*signal_node, "id", &object_id); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse signal type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + if (object_type == "stopSign") { + PbStopSign stop_sign; + stop_sign.mutable_id()->set_id(object_id); + + StopSignInternal stop_sign_internal; + stop_sign_internal.stop_sign = stop_sign; + + auto sub_node = signal_node->FirstChildElement("stopline"); + if (sub_node) { + sub_node = sub_node->FirstChildElement("objectReference"); + while (sub_node) { + std::string stop_line_id; + UtilXmlParser::QueryStringAttribute(*sub_node, "id", &stop_line_id); + CHECK(checker == tinyxml2::XML_SUCCESS); + stop_sign_internal.stop_line_ids.insert(stop_line_id); + + sub_node = sub_node->NextSiblingElement("objectReference"); + } + } + stop_signs->emplace_back(stop_sign_internal); + } + + signal_node = signal_node->NextSiblingElement("signal"); + } + return Status::OK(); +} + +Status SignalsXmlParser::ParseYieldSigns( + const tinyxml2::XMLElement& xml_node, + std::vector* yield_signs) { + CHECK_NOTNULL(yield_signs); + + auto signal_node = xml_node.FirstChildElement("signal"); + while (signal_node) { + std::string object_type; + std::string object_id; + int checker = + UtilXmlParser::QueryStringAttribute(*signal_node, "type", &object_type); + checker += + UtilXmlParser::QueryStringAttribute(*signal_node, "id", &object_id); + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse signal type."; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + if (object_type == "yieldSign") { + PbYieldSign yield_sign; + yield_sign.mutable_id()->set_id(object_id); + YieldSignInternal yield_sign_internal; + yield_sign_internal.id = object_id; + yield_sign_internal.yield_sign = yield_sign; + auto sub_node = signal_node->FirstChildElement("stopline"); + if (sub_node) { + sub_node = sub_node->FirstChildElement("objectReference"); + while (sub_node) { + std::string stop_line_id; + int checker = UtilXmlParser::QueryStringAttribute(*sub_node, "id", + &stop_line_id); + CHECK(checker == tinyxml2::XML_SUCCESS); + yield_sign_internal.stop_line_ids.insert(stop_line_id); + + sub_node = sub_node->NextSiblingElement("objectReference"); + } + } + yield_signs->emplace_back(yield_sign_internal); + } + + signal_node = signal_node->NextSiblingElement("signal"); + } + return Status::OK(); +} + +} // namespace adapter +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/adapter/xml_parser/signals_xml_parser.h b/modules/map/hdmap/adapter/xml_parser/signals_xml_parser.h new file mode 100644 index 00000000000..8c54824ba8d --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/signals_xml_parser.h @@ -0,0 +1,51 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#ifndef MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_SIGNALS_XML_PARSER_H_ +#define MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_SIGNALS_XML_PARSER_H_ + +#include +#include + +#include "tinyxml2/tinyxml2.h" + +#include "modules/map/hdmap/adapter/xml_parser/common_define.h" +#include "modules/map/hdmap/adapter/xml_parser/status.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +class SignalsXmlParser { + public: + static Status ParseTrafficLights( + const tinyxml2::XMLElement& xml_node, + std::vector* traffic_lights); + static Status ParseStopSigns(const tinyxml2::XMLElement& xml_node, + std::vector* stop_signs); + static Status ParseYieldSigns(const tinyxml2::XMLElement& xml_node, + std::vector* yield_signs); + + private: + static Status ToPbSignalType(const std::string& xml_type, + PbSignalType* signal_type); + static Status ToPbSubSignalType(const std::string& xml_type, + PbSubSignalType* sub_signal_type); +}; + +} // namespace adapter +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_SIGNALS_XML_PARSER_H_ diff --git a/modules/map/hdmap/adapter/xml_parser/status.h b/modules/map/hdmap/adapter/xml_parser/status.h new file mode 100644 index 00000000000..a829352358d --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/status.h @@ -0,0 +1,43 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#ifndef MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_STATUS_H_ +#define MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_STATUS_H_ + +#include +#include +#include +#include +#include +#include + +#include "modules/common/status/status.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +using apollo::common::Status; + +#define RETURN_IF_ERROR(expr) \ + do { \ + const apollo::common::Status status_ = (expr); \ + if (!status_.ok()) return status_; \ + } while (0) + +} // namespace adapter +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_STATUS_H_ diff --git a/modules/map/hdmap/adapter/xml_parser/util_xml_parser.cc b/modules/map/hdmap/adapter/xml_parser/util_xml_parser.cc new file mode 100644 index 00000000000..f64108f7468 --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/util_xml_parser.cc @@ -0,0 +1,220 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#include "modules/map/hdmap/adapter/xml_parser/util_xml_parser.h" + +#include +#include +#include +#include +#include +#include + +#include "modules/common/log.h" +#include "modules/map/hdmap/adapter/coordinate_convert_tool.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +Status UtilXmlParser::ParseCurve(const tinyxml2::XMLElement& xml_node, + PbCurve* curve) { + CHECK_NOTNULL(curve); + + const tinyxml2::XMLElement* sub_node = xml_node.FirstChildElement("geometry"); + while (sub_node) { + PbCurveSegment* curve_segment = curve->add_segment(); + RETURN_IF_ERROR(UtilXmlParser::ParseGeometry(*sub_node, curve_segment)); + sub_node = sub_node->NextSiblingElement("geometry"); + } + + return Status::OK(); +} + +Status UtilXmlParser::ParseGeometry(const tinyxml2::XMLElement& xml_node, + PbCurveSegment* curve_segment) { + CHECK_NOTNULL(curve_segment); + + // Read geometry attributes + double s = 0.0; + double ptx = 0.0; + double pty = 0.0; + double ptz = 0.0; + double length = 0.0; + + int checker = tinyxml2::XML_SUCCESS; + + checker += xml_node.QueryDoubleAttribute("sOffset", &s); + checker += xml_node.QueryDoubleAttribute("x", &ptx); + checker += xml_node.QueryDoubleAttribute("y", &pty); + checker += xml_node.QueryDoubleAttribute("length", &length); + + if (checker == tinyxml2::XML_SUCCESS) { + curve_segment->set_s(s); + + double output_x = 0.0; + double output_y = 0.0; + double output_z = 0.0; + + WGS84ToUTM(ptx, pty, ptz, &output_x, &output_y, &output_z); + + curve_segment->mutable_start_position()->set_x(output_x); + curve_segment->mutable_start_position()->set_y(output_y); + curve_segment->set_length(length); + } + + const auto sub_node = xml_node.FirstChildElement("pointSet"); + if (sub_node) { + PbLineSegment* line_segment = curve_segment->mutable_line_segment(); + RETURN_IF_ERROR(ParsePointSet(*sub_node, line_segment)); + return Status::OK(); + } + + std::string err_msg = "Error geometry object"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); +} + +Status UtilXmlParser::ParsePointSet(const tinyxml2::XMLElement& xml_node, + PbLineSegment* line_segment) { + const tinyxml2::XMLElement* sub_node = xml_node.FirstChildElement("point"); + while (sub_node) { + double ptx = 0.0; + double pty = 0.0; + double ptz = 0.0; + int checker = tinyxml2::XML_SUCCESS; + checker += sub_node->QueryDoubleAttribute("x", &ptx); + checker += sub_node->QueryDoubleAttribute("y", &pty); + + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parsing geometry point attributes"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + PbPoint3D* pt = line_segment->add_point(); + double output_x = 0.0; + double output_y = 0.0; + double output_z = 0.0; + WGS84ToUTM(ptx, pty, ptz, &output_x, &output_y, &output_z); + pt->set_x(output_x); + pt->set_y(output_y); + + sub_node = sub_node->NextSiblingElement("point"); + } + + return Status::OK(); +} + +Status UtilXmlParser::ParseOutline(const tinyxml2::XMLElement& xml_node, + PbPolygon* polygon) { + const tinyxml2::XMLElement* sub_node = + xml_node.FirstChildElement("cornerGlobal"); + while (sub_node) { + double ptx = 0.0; + double pty = 0.0; + double ptz = 0.0; + int checker = tinyxml2::XML_SUCCESS; + checker += sub_node->QueryDoubleAttribute("x", &ptx); + checker += sub_node->QueryDoubleAttribute("y", &pty); + checker += sub_node->QueryDoubleAttribute("z", &ptz); + + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parsing cornerGlobal point attributes"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + PbPoint3D* pt = polygon->add_point(); + double output_x = 0.0; + double output_y = 0.0; + double output_z = 0.0; + WGS84ToUTM(ptx, pty, ptz, &output_x, &output_y, &output_z); + pt->set_x(output_x); + pt->set_y(output_y); + // pt->set_z(output_z); + + sub_node = sub_node->NextSiblingElement("cornerGlobal"); + } + + return Status::OK(); +} + +Status UtilXmlParser::ParsePoint(const tinyxml2::XMLElement& xml_node, + PbPoint3D* pt) { + CHECK_NOTNULL(pt); + + const auto sub_node = xml_node.FirstChildElement("centerPoint"); + CHECK(sub_node != nullptr); + int checker = tinyxml2::XML_SUCCESS; + double ptx = 0.0; + double pty = 0.0; + double ptz = 0.0; + checker += sub_node->QueryDoubleAttribute("x", &ptx); + checker += sub_node->QueryDoubleAttribute("y", &pty); + checker += sub_node->QueryDoubleAttribute("z", &ptz); + + if (checker != tinyxml2::XML_SUCCESS) { + std::string err_msg = "Error parse point attributes"; + return Status(apollo::common::ErrorCode::HDMAP_DATA_ERROR, err_msg); + } + + double output_x = 0.0; + double output_y = 0.0; + double output_z = 0.0; + WGS84ToUTM(ptx, pty, ptz, &output_x, &output_y, &output_z); + pt->set_x(output_x); + pt->set_y(output_y); + pt->set_z(output_z); + + return Status::OK(); +} + +std::string UtilXmlParser::ToUpper(const std::string& s) { + std::string value = s; + std::transform(value.begin(), value.end(), value.begin(), + [](unsigned char c) { return std::toupper(c); }); + + return value; +} + +void UtilXmlParser::WGS84ToUTM(const double x, const double y, const double z, + double* output_x, double* output_y, + double* output_z) { + CoordinateConvertTool::GetInstance()->CoordiateConvert(x, y, z, output_x, + output_y, output_z); +} + +double UtilXmlParser::CurveLength(const PbCurve& curve) { + double length = 0.0; + for (int i = 0; i < curve.segment_size(); ++i) { + length += curve.segment(i).length(); + } + + return length; +} + +tinyxml2::XMLError UtilXmlParser::QueryStringAttribute( + const tinyxml2::XMLElement& xml_node, const std::string& name, + std::string* value) { + CHECK_NOTNULL(value); + const char* val = xml_node.Attribute(name.c_str()); + if (val == nullptr) { + return tinyxml2::XML_NO_ATTRIBUTE; + } + + *value = val; + return tinyxml2::XML_SUCCESS; +} + +} // namespace adapter +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/adapter/xml_parser/util_xml_parser.h b/modules/map/hdmap/adapter/xml_parser/util_xml_parser.h new file mode 100644 index 00000000000..fc656d16c49 --- /dev/null +++ b/modules/map/hdmap/adapter/xml_parser/util_xml_parser.h @@ -0,0 +1,58 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#ifndef MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_UTIL_XML_PARSER_H_ +#define MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_UTIL_XML_PARSER_H_ + +#include +#include + +#include "tinyxml2/tinyxml2.h" + +#include "modules/map/hdmap/adapter/xml_parser/common_define.h" +#include "modules/map/hdmap/adapter/xml_parser/status.h" + +namespace apollo { +namespace hdmap { +namespace adapter { + +class UtilXmlParser { + public: + static Status ParseCurve(const tinyxml2::XMLElement& xml_node, + PbCurve* curve); + static Status ParseGeometry(const tinyxml2::XMLElement& xml_node, + PbCurveSegment* curve_segment); + static Status ParsePointSet(const tinyxml2::XMLElement& xml_node, + PbLineSegment* line_segment); + static Status ParseOutline(const tinyxml2::XMLElement& xml_node, + PbPolygon* polygon); + static Status ParsePoint(const tinyxml2::XMLElement& xml_node, PbPoint3D* pt); + + static std::string ToUpper(const std::string& s); + + static void WGS84ToUTM(const double x, const double y, const double z, + double* output_x, double* output_y, double* output_z); + + static double CurveLength(const PbCurve& curve); + + static tinyxml2::XMLError QueryStringAttribute( + const tinyxml2::XMLElement& xml_node, const std::string& name, + std::string* value); +}; + +} // namespace adapter +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_ADAPTER_XML_PARSER_UTIL_XML_PARSER_H_ diff --git a/modules/map/hdmap/hdmap.cc b/modules/map/hdmap/hdmap.cc new file mode 100644 index 00000000000..77b7ae6d737 --- /dev/null +++ b/modules/map/hdmap/hdmap.cc @@ -0,0 +1,130 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#include "modules/map/hdmap/hdmap.h" + +#include "modules/map/hdmap/hdmap_util.h" + +namespace apollo { +namespace hdmap { + +int HDMap::LoadMapFromFile(const std::string& map_filename) { + return impl_.LoadMapFromFile(map_filename); +} + +LaneInfoConstPtr HDMap::GetLaneById(const Id& id) const { + return impl_.GetLaneById(id); +} + +JunctionInfoConstPtr HDMap::GetJunctionById(const Id& id) const { + return impl_.GetJunctionById(id); +} + +SignalInfoConstPtr HDMap::GetSignalById(const Id& id) const { + return impl_.GetSignalById(id); +} + +CrosswalkInfoConstPtr HDMap::GetCrosswalkById(const Id& id) const { + return impl_.GetCrosswalkById(id); +} + +StopSignInfoConstPtr HDMap::GetStopSignById(const Id& id) const { + return impl_.GetStopSignById(id); +} + +YieldSignInfoConstPtr HDMap::GetYieldSignById(const Id& id) const { + return impl_.GetYieldSignById(id); +} + +OverlapInfoConstPtr HDMap::GetOverlapById(const Id& id) const { + return impl_.GetOverlapById(id); +} + +RoadInfoConstPtr HDMap::GetRoadById(const Id& id) const { + return impl_.GetRoadById(id); +} + +int HDMap::GetLanes(const apollo::common::PointENU& point, double distance, + std::vector* lanes) const { + return impl_.GetLanes(point, distance, lanes); +} + +int HDMap::GetJunctions(const apollo::common::PointENU& point, double distance, + std::vector* junctions) const { + return impl_.GetJunctions(point, distance, junctions); +} + +int HDMap::GetSignals(const apollo::common::PointENU& point, double distance, + std::vector* signals) const { + return impl_.GetSignals(point, distance, signals); +} + +int HDMap::GetCrosswalks(const apollo::common::PointENU& point, double distance, + std::vector* crosswalks) const { + return impl_.GetCrosswalks(point, distance, crosswalks); +} + +int HDMap::GetStopSigns(const apollo::common::PointENU& point, double distance, + std::vector* stop_signs) const { + return impl_.GetStopSigns(point, distance, stop_signs); +} + +int HDMap::GetYieldSigns( + const apollo::common::PointENU& point, double distance, + std::vector* yield_signs) const { + return impl_.GetYieldSigns(point, distance, yield_signs); +} + +int HDMap::GetRoads(const apollo::common::PointENU& point, double distance, + std::vector* roads) const { + return impl_.GetRoads(point, distance, roads); +} + +int HDMap::GetNearestLane(const common::PointENU& point, + LaneInfoConstPtr* nearest_lane, + double* nearest_s, double* nearest_l) const { + return impl_.GetNearestLane(point, nearest_lane, nearest_s, nearest_l); +} + +int HDMap::GetNearestLaneWithHeading(const apollo::common::PointENU& point, + const double distance, + const double central_heading, + const double max_heading_difference, + LaneInfoConstPtr* nearest_lane, + double* nearest_s, + double* nearest_l) const { + return impl_.GetNearestLaneWithHeading( + point, distance, central_heading, max_heading_difference, nearest_lane, + nearest_s, nearest_l); +} + +int HDMap::GetLanesWithHeading(const apollo::common::PointENU& point, + const double distance, + const double central_heading, + const double max_heading_difference, + std::vector* lanes) const { + return impl_.GetLanesWithHeading( + point, distance, central_heading, max_heading_difference, lanes); +} + +int HDMap::GetRoadBoundaries( + const apollo::common::PointENU& point, double radius, + std::vector* road_boundaries, + std::vector* junctions) const { + return impl_.GetRoadBoundaries(point, radius, road_boundaries, junctions); +} + +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/hdmap.h b/modules/map/hdmap/hdmap.h new file mode 100644 index 00000000000..bfad2981e9d --- /dev/null +++ b/modules/map/hdmap/hdmap.h @@ -0,0 +1,191 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_MAP_HDMAP_HDMAP_H_ +#define MODULES_MAP_HDMAP_HDMAP_H_ + +#include +#include +#include + +#include "modules/common/macro.h" +#include "modules/common/proto/geometry.pb.h" +#include "modules/map/hdmap/hdmap_common.h" +#include "modules/map/hdmap/hdmap_impl.h" +#include "modules/map/proto/map_crosswalk.pb.h" +#include "modules/map/proto/map_junction.pb.h" +#include "modules/map/proto/map_lane.pb.h" +#include "modules/map/proto/map_overlap.pb.h" +#include "modules/map/proto/map_road.pb.h" +#include "modules/map/proto/map_signal.pb.h" +#include "modules/map/proto/map_stop_sign.pb.h" +#include "modules/map/proto/map_yield_sign.pb.h" + +/** + * @namespace apollo::hdmap + * @brief apollo::hdmap + */ +namespace apollo { +namespace hdmap { + +/** + * @class HDMap + * + * @brief High-precision map loader interface. + */ +class HDMap { + public: + /** + * @brief load map from local file + * @param map_filename path of map data file + * @return 0:success, otherwise failed + */ + int LoadMapFromFile(const std::string& map_filename); + + LaneInfoConstPtr GetLaneById(const Id& id) const; + JunctionInfoConstPtr GetJunctionById(const Id& id) const; + SignalInfoConstPtr GetSignalById(const Id& id) const; + CrosswalkInfoConstPtr GetCrosswalkById(const Id& id) const; + StopSignInfoConstPtr GetStopSignById(const Id& id) const; + YieldSignInfoConstPtr GetYieldSignById(const Id& id) const; + OverlapInfoConstPtr GetOverlapById(const Id& id) const; + RoadInfoConstPtr GetRoadById(const Id& id) const; + + /** + * @brief get all lanes in certain range + * @param point the central point of the range + * @param distance the search radius + * @param lanes store all lanes in target range + * @return 0:success, otherwise failed + */ + int GetLanes(const apollo::common::PointENU& point, double distance, + std::vector* lanes) const; + /** + * @brief get all junctions in certain range + * @param point the central point of the range + * @param distance the search radius + * @param junctions store all junctions in target range + * @return 0:success, otherwise failed + */ + int GetJunctions(const apollo::common::PointENU& point, double distance, + std::vector* junctions) const; + /** + * @brief get all signals in certain range + * @param point the central point of the range + * @param distance the search radius + * @param signals store all signals in target range + * @return 0:success, otherwise failed + */ + int GetSignals(const apollo::common::PointENU& point, double distance, + std::vector* signals) const; + /** + * @brief get all crosswalks in certain range + * @param point the central point of the range + * @param distance the search radius + * @param crosswalks store all crosswalks in target range + * @return 0:success, otherwise failed + */ + int GetCrosswalks(const apollo::common::PointENU& point, double distance, + std::vector* crosswalks) const; + /** + * @brief get all stop signs in certain range + * @param point the central point of the range + * @param distance the search radius + * @param stop signs store all stop signs in target range + * @return 0:success, otherwise failed + */ + int GetStopSigns(const apollo::common::PointENU& point, double distance, + std::vector* stop_signs) const; + /** + * @brief get all yield signs in certain range + * @param point the central point of the range + * @param distance the search radius + * @param yield signs store all yield signs in target range + * @return 0:success, otherwise failed + */ + int GetYieldSigns(const apollo::common::PointENU& point, double distance, + std::vector* yield_signs) const; + /** + * @brief get all roads in certain range + * @param point the central point of the range + * @param distance the search radius + * @param roads store all roads in target range + * @return 0:success, otherwise failed + */ + int GetRoads(const apollo::common::PointENU& point, double distance, + std::vector* roads) const; + /** + * @brief get nearest lane from target point, + * @param point the target point + * @param nearest_lane the nearest lane that match search conditions + * @param nearest_s the offset from lane start point along lane center line + * @param nearest_l the lateral offset from lane center line + * @return 0:success, otherwise, failed. + */ + int GetNearestLane(const apollo::common::PointENU& point, + LaneInfoConstPtr* nearest_lane, + double* nearest_s, double* nearest_l) const; + /** + * @brief get the nearest lane within a certain range by pose + * @param point the target position + * @param distance the search radius + * @param central_heading the base heading + * @param max_heading_difference the heading range + * @param nearest_lane the nearest lane that match search conditions + * @param nearest_s the offset from lane start point along lane center line + * @param nearest_l the lateral offset from lane center line + * @return 0:success, otherwise, failed. + */ + int GetNearestLaneWithHeading(const apollo::common::PointENU& point, + const double distance, + const double central_heading, + const double max_heading_difference, + LaneInfoConstPtr* nearest_lane, + double* nearest_s, double* nearest_l) const; + /** + * @brief get all lanes within a certain range by pose + * @param point the target position + * @param distance the search radius + * @param central_heading the base heading + * @param max_heading_difference the heading range + * @param nearest_lane all lanes that match search conditions + * @return 0:success, otherwise, failed. + */ + int GetLanesWithHeading(const apollo::common::PointENU& point, + const double distance, + const double central_heading, + const double max_heading_difference, + std::vector* lanes) const; + /** + * @brief get all road and junctions boundaries within certain range + * @param point the target position + * @param radius the search radius + * @param road_boundaries the roads' boundaries + * @param junctions the junctions' boundaries + * @return 0:success, otherwise failed + */ + int GetRoadBoundaries(const apollo::common::PointENU& point, double radius, + std::vector* road_boundaries, + std::vector* junctions) const; + + private: + HDMapImpl impl_; +}; + +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_HDMAP_H_ diff --git a/modules/map/hdmap/hdmap_common.cc b/modules/map/hdmap/hdmap_common.cc new file mode 100644 index 00000000000..39f43142caa --- /dev/null +++ b/modules/map/hdmap/hdmap_common.cc @@ -0,0 +1,531 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#include "modules/map/hdmap/hdmap_common.h" + +#include +#include +#include + +#include "modules/common/log.h" +#include "modules/common/math/linear_interpolation.h" +#include "modules/common/math/math_utils.h" +#include "modules/map/hdmap/hdmap_impl.h" +#include "modules/map/hdmap/hdmap_util.h" + +namespace apollo { +namespace hdmap { +namespace { +using apollo::common::math::Vec2d; +using apollo::common::PointENU; + +// Minimum error in lane segmentation. +const double kSegmentationEpsilon = 0.2; + +// Minimum distance to remove duplicated points. +const double kDuplicatedPointsEpsilon = 1e-7; + +void RemoveDuplicates(std::vector *points) { + CHECK_NOTNULL(points); + + int count = 0; + const double limit = kDuplicatedPointsEpsilon * kDuplicatedPointsEpsilon; + for (const auto &point : *points) { + if (count == 0 || point.DistanceSquareTo((*points)[count - 1]) > limit) { + (*points)[count++] = point; + } + } + points->resize(count); +} + +void PointsFromCurve(const Curve &input_curve, std::vector *points) { + CHECK_NOTNULL(points)->clear(); + + for (const auto &curve : input_curve.segment()) { + if (curve.has_line_segment()) { + for (const auto &point : curve.line_segment().point()) { + points->emplace_back(point.x(), point.y()); + } + } else { + LOG(FATAL) << "Can not handle curve type."; + } + } + RemoveDuplicates(points); +} + +apollo::common::math::Polygon2d ConvertToPolygon2d(const Polygon &polygon) { + std::vector points; + points.reserve(polygon.point_size()); + for (const auto &point : polygon.point()) { + points.emplace_back(point.x(), point.y()); + } + RemoveDuplicates(&points); + while (points.size() >= 2 && + points[0].DistanceTo(points.back()) <= + apollo::common::math::kMathEpsilon) { + points.pop_back(); + } + return apollo::common::math::Polygon2d(points); +} + +void SegmentsFromCurve( + const Curve &curve, + std::vector *segments) { + CHECK_NOTNULL(segments); + + std::vector points; + PointsFromCurve(curve, &points); + for (size_t i = 0; i + 1 < points.size(); ++i) { + segments->emplace_back(points[i], points[i + 1]); + } +} + +PointENU PointFromVec2d(const Vec2d &point) { + PointENU pt; + pt.set_x(point.x()); + pt.set_y(point.y()); + return pt; +} + +Vec2d Vec2dFromPoint(const PointENU &point) { return {point.x(), point.y()}; } + +} // namespace + +LaneInfo::LaneInfo(const Lane &lane) : lane_(lane) { Init(); } + +void LaneInfo::Init() { + PointsFromCurve(lane_.central_curve(), &points_); + CHECK_GE(points_.size(), 2); + segments_.clear(); + accumulated_s_.clear(); + unit_directions_.clear(); + headings_.clear(); + + double s = 0; + for (size_t i = 0; i + 1 < points_.size(); ++i) { + segments_.emplace_back(points_[i], points_[i + 1]); + accumulated_s_.push_back(s); + unit_directions_.push_back(segments_.back().unit_direction()); + s += segments_.back().length(); + } + + accumulated_s_.push_back(s); + total_length_ = s; + CHECK(!unit_directions_.empty()); + unit_directions_.push_back(unit_directions_.back()); + for (const auto &direction : unit_directions_) { + headings_.push_back(direction.Angle()); + } + for (const auto &overlap_id : lane_.overlap_id()) { + overlap_ids_.emplace_back(overlap_id.id()); + } + CHECK(!segments_.empty()); + + sampled_left_width_.clear(); + sampled_right_width_.clear(); + for (const auto &sample : lane_.left_sample()) { + sampled_left_width_.emplace_back(sample.s(), sample.width()); + } + for (const auto &sample : lane_.right_sample()) { + sampled_right_width_.emplace_back(sample.s(), sample.width()); + } + + if (lane_.has_type()) { + if (lane_.type() == Lane::CITY_DRIVING) { + const double kMinHalfWidth = 1.05; + for (const auto &p : sampled_left_width_) { + if (p.second < kMinHalfWidth) { + AERROR + << "lane[id = " << lane_.id().DebugString() + << "]. sampled_left_width_[" << p.second + << "] is too small. It should be larger than half vehicle width[" + << kMinHalfWidth << "]."; + } + } + for (const auto &p : sampled_right_width_) { + if (p.second < kMinHalfWidth) { + AERROR + << "lane[id = " << lane_.id().DebugString() + << "]. sampled_right_width_[" << p.second + << "] is too small. It should be larger than half vehicle width[" + << kMinHalfWidth << "]."; + } + } + } else if (lane_.type() == Lane::NONE) { + AERROR << "lane_[id = " << lane_.id().DebugString() << " type is NONE."; + } + } else { + AERROR << "lane_[id = " << lane_.id().DebugString() << "has NO type."; + } + + CreateKDTree(); +} + +void LaneInfo::GetWidth(const double s, double *left_width, + double *right_width) const { + if (left_width != nullptr) { + *left_width = GetWidthFromSample(sampled_left_width_, s); + } + if (right_width != nullptr) { + *right_width = GetWidthFromSample(sampled_right_width_, s); + } +} + +double LaneInfo::Heading(const double s) const { + CHECK(common::math::DoubleCompare(s, accumulated_s_.front()) >= 0) + << "s should be >= " << accumulated_s_.front(); + CHECK(common::math::DoubleCompare(s, accumulated_s_.back()) <= 0) + << "s should be <= " << accumulated_s_.back(); + auto iter = std::lower_bound(accumulated_s_.begin(), accumulated_s_.end(), s); + int index = std::distance(accumulated_s_.begin(), iter); + if (index == 0 || *iter - s <= common::math::kMathEpsilon) { + return headings_[index]; + } else { + return common::math::slerp( + headings_[index - 1], accumulated_s_[index - 1], headings_[index], + accumulated_s_[index], s); + // return headings_[index - 1]; + } +} + +double LaneInfo::GetWidth(const double s) const { + double left_width = 0.0; + double right_width = 0.0; + GetWidth(s, &left_width, &right_width); + return left_width + right_width; +} + +double LaneInfo::GetEffectiveWidth(const double s) const { + double left_width = 0.0; + double right_width = 0.0; + GetWidth(s, &left_width, &right_width); + return 2 * std::min(left_width, right_width); +} + +double LaneInfo::GetWidthFromSample( + const std::vector &samples, const double s) const { + if (samples.empty()) { + return 0.0; + } + if (s <= samples[0].first) { + return samples[0].second; + } + if (s >= samples.back().first) { + return samples.back().second; + } + int low = 0; + int high = static_cast(samples.size()); + while (low + 1 < high) { + const int mid = (low + high) / 2; + if (samples[mid].first <= s) { + low = mid; + } else { + high = mid; + } + } + const LaneInfo::SampledWidth &sample1 = samples[low]; + const LaneInfo::SampledWidth &sample2 = samples[high]; + const double ratio = (sample2.first - s) / (sample2.first - sample1.first); + return sample1.second * ratio + sample2.second * (1.0 - ratio); +} + +bool LaneInfo::IsOnLane(const Vec2d &point) const { + double accumulate_s = 0.0; + double lateral = 0.0; + if (!GetProjection(point, &accumulate_s, &lateral)) { + return false; + } + + if (accumulate_s > total_length() || accumulate_s < 0.0) { + return false; + } + + double left_width = 0.0; + double right_width = 0.0; + GetWidth(accumulate_s, &left_width, &right_width); + if (lateral < left_width && lateral > -right_width) { + return true; + } + return false; +} + +bool LaneInfo::IsOnLane(const apollo::common::math::Box2d &box) const { + std::vector corners; + box.GetAllCorners(&corners); + for (const auto &corner : corners) { + if (!IsOnLane(corner)) { + return false; + } + } + return true; +} + +PointENU LaneInfo::GetSmoothPoint(double s) const { + CHECK_GE(points_.size(), 2); + if (s <= 0.0) { + return PointFromVec2d(points_[0]); + } + + if (s >= total_length()) { + return PointFromVec2d(points_.back()); + } + + const auto low_itr = + std::lower_bound(accumulated_s_.begin(), accumulated_s_.end(), s); + CHECK(low_itr != accumulated_s_.end()); + size_t index = low_itr - accumulated_s_.begin(); + double delta_s = *low_itr - s; + if (delta_s < apollo::common::math::kMathEpsilon) { + return PointFromVec2d(points_[index]); + } + + auto smooth_point = points_[index] - unit_directions_[index - 1] * delta_s; + + return PointFromVec2d(smooth_point); +} + +double LaneInfo::DistanceTo(const Vec2d &point) const { + const auto segment_box = lane_segment_kdtree_->GetNearestObject(point); + CHECK(segment_box != nullptr); + return segment_box->DistanceTo(point); +} + +double LaneInfo::DistanceTo(const Vec2d &point, Vec2d *map_point, + double *s_offset, int *s_offset_index) const { + CHECK_NOTNULL(map_point); + CHECK_NOTNULL(s_offset); + CHECK_NOTNULL(s_offset_index); + + const auto segment_box = lane_segment_kdtree_->GetNearestObject(point); + CHECK(segment_box != nullptr); + int index = segment_box->id(); + double distance = segments_[index].DistanceTo(point, map_point); + *s_offset_index = index; + *s_offset = + accumulated_s_[index] + segments_[index].start().DistanceTo(*map_point); + return distance; +} + +PointENU LaneInfo::GetNearestPoint(const Vec2d &point, double *distance) const { + CHECK_NOTNULL(distance); + + const auto segment_box = lane_segment_kdtree_->GetNearestObject(point); + CHECK(segment_box != nullptr); + int index = segment_box->id(); + Vec2d nearest_point; + *distance = segments_[index].DistanceTo(point, &nearest_point); + + return PointFromVec2d(nearest_point); +} + +bool LaneInfo::GetProjection(const Vec2d &point, double *accumulate_s, + double *lateral) const { + CHECK_NOTNULL(accumulate_s); + CHECK_NOTNULL(lateral); + + if (segments_.empty()) { + return false; + } + double min_distance = std::numeric_limits::infinity(); + std::size_t min_index = 0; + double min_proj = 0.0; + std::size_t num_segments = segments_.size(); + for (std::size_t i = 0; i < num_segments; ++i) { + const auto &segment = segments_[i]; + const double distance = segment.DistanceTo(point); + if (distance < min_distance) { + const double proj = segment.ProjectOntoUnit(point); + if (proj < 0.0 && i > 0) { + continue; + } + if (proj > segment.length() && i + 1 < num_segments) { + const auto &next_segment = segments_[i + 1]; + if ((point - next_segment.start()) + .InnerProd(next_segment.unit_direction()) >= 0.0) { + continue; + } + } + min_distance = distance; + min_index = i; + min_proj = proj; + } + } + + const auto &segment = segments_[min_index]; + if (min_index + 1 >= num_segments) { + *accumulate_s = accumulated_s_[min_index] + min_proj; + } else { + *accumulate_s = + accumulated_s_[min_index] + std::min(min_proj, segment.length()); + } + const double prod = segment.ProductOntoUnit(point); + if ((min_index == 0 && min_proj < 0.0) || + (min_index + 1 == num_segments && min_proj > segment.length())) { + *lateral = prod; + } else { + *lateral = (prod > 0.0 ? min_distance : -min_distance); + } + + return true; +} + +void LaneInfo::PostProcess(const HDMapImpl &map_instance) { + UpdateOverlaps(map_instance); +} + +void LaneInfo::UpdateOverlaps(const HDMapImpl &map_instance) { + for (const auto &overlap_id : overlap_ids_) { + const auto &overlap_ptr = + map_instance.GetOverlapById(MakeMapId(overlap_id)); + if (overlap_ptr == nullptr) { + continue; + } + overlaps_.emplace_back(overlap_ptr); + for (const auto &object : overlap_ptr->overlap().object()) { + const auto &object_id = object.id().id(); + if (object_id == lane_.id().id()) { + continue; + } + const auto &object_map_id = MakeMapId(object_id); + if (map_instance.GetLaneById(object_map_id) != nullptr) { + cross_lanes_.emplace_back(overlap_ptr); + } + if (map_instance.GetSignalById(object_map_id) != nullptr) { + signals_.emplace_back(overlap_ptr); + } + if (map_instance.GetYieldSignById(object_map_id) != nullptr) { + yield_signs_.emplace_back(overlap_ptr); + } + if (map_instance.GetStopSignById(object_map_id) != nullptr) { + stop_signs_.emplace_back(overlap_ptr); + } + if (map_instance.GetCrosswalkById(object_map_id) != nullptr) { + crosswalks_.emplace_back(overlap_ptr); + } + if (map_instance.GetJunctionById(object_map_id) != nullptr) { + junctions_.emplace_back(overlap_ptr); + } + + // TODO(all): support parking and speed bump + /* + if (map_instance.get_parking_space_by_id(object_map_id) != nullptr) { + parking_spaces_.emplace_back(overlap_ptr); + } + if (map_instance.get_speed_bump_by_id(object_map_id) != nullptr) { + speed_bumps_.emplace_back(overlap_ptr); + } + */ + } + } +} + +void LaneInfo::CreateKDTree() { + apollo::common::math::AABoxKDTreeParams params; + params.max_leaf_dimension = 5.0; // meters. + params.max_leaf_size = 16; + + segment_box_list_.clear(); + for (size_t id = 0; id < segments_.size(); ++id) { + const auto &segment = segments_[id]; + segment_box_list_.emplace_back( + apollo::common::math::AABox2d(segment.start(), segment.end()), this, + &segment, id); + } + lane_segment_kdtree_.reset(new LaneSegmentKDTree(segment_box_list_, params)); +} + +JunctionInfo::JunctionInfo(const Junction &junction) : junction_(junction) { + Init(); +} + +void JunctionInfo::Init() { + polygon_ = ConvertToPolygon2d(junction_.polygon()); + CHECK_GT(polygon_.num_points(), 2); +} + +SignalInfo::SignalInfo(const Signal &signal) : signal_(signal) { Init(); } + +void SignalInfo::Init() { + for (const auto &stop_line : signal_.stop_line()) { + SegmentsFromCurve(stop_line, &segments_); + } + CHECK(!segments_.empty()); + std::vector points; + for (const auto &segment : segments_) { + points.emplace_back(segment.start()); + points.emplace_back(segment.end()); + } + CHECK_GT(points.size(), 0); +} + +CrosswalkInfo::CrosswalkInfo(const Crosswalk &crosswalk) + : crosswalk_(crosswalk) { + Init(); +} + +void CrosswalkInfo::Init() { + polygon_ = ConvertToPolygon2d(crosswalk_.polygon()); + CHECK_GT(polygon_.num_points(), 2); +} + +StopSignInfo::StopSignInfo(const StopSign &stop_sign) : stop_sign_(stop_sign) { + init(); +} + +void StopSignInfo::init() { + for (const auto &stop_line : stop_sign_.stop_line()) { + SegmentsFromCurve(stop_line, &segments_); + } + CHECK(!segments_.empty()); +} + +YieldSignInfo::YieldSignInfo(const YieldSign &yield_sign) + : yield_sign_(yield_sign) { + Init(); +} + +void YieldSignInfo::Init() { + for (const auto &stop_line : yield_sign_.stop_line()) { + SegmentsFromCurve(stop_line, &segments_); + } + // segments_from_curve(yield_sign_.stop_line(), &segments_); + CHECK(!segments_.empty()); +} + +OverlapInfo::OverlapInfo(const Overlap &overlap) : overlap_(overlap) {} + +const ObjectOverlapInfo *OverlapInfo::get_object_overlap_info( + const Id &id) const { + for (const auto &object : overlap_.object()) { + if (object.id().id() == id.id()) { + return &object; + } + } + return nullptr; +} + +RoadInfo::RoadInfo(const Road &road) : road_(road) { + for (const auto §ion : road_.section()) { + sections_.push_back(section); + road_boundaries_.push_back(section.boundary()); + } +} + +const std::vector &RoadInfo::GetBoundaries() const { + return road_boundaries_; +} + +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/hdmap_common.h b/modules/map/hdmap/hdmap_common.h new file mode 100644 index 00000000000..c2860a6944e --- /dev/null +++ b/modules/map/hdmap/hdmap_common.h @@ -0,0 +1,345 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#ifndef MODULES_MAP_HDMAP_HDMAP_COMMON_H_ +#define MODULES_MAP_HDMAP_HDMAP_COMMON_H_ + +#include +#include +#include +#include + +#include "modules/common/math/aabox2d.h" +#include "modules/common/math/aaboxkdtree2d.h" +#include "modules/common/math/math_utils.h" +#include "modules/common/math/polygon2d.h" +#include "modules/common/math/vec2d.h" +#include "modules/map/proto/map_crosswalk.pb.h" +#include "modules/map/proto/map_id.pb.h" +#include "modules/map/proto/map_junction.pb.h" +#include "modules/map/proto/map_lane.pb.h" +#include "modules/map/proto/map_overlap.pb.h" +#include "modules/map/proto/map_road.pb.h" +#include "modules/map/proto/map_signal.pb.h" +#include "modules/map/proto/map_stop_sign.pb.h" +#include "modules/map/proto/map_yield_sign.pb.h" + +/** + * @namespace apollo::hdmap + * @brief apollo::hdmap + */ +namespace apollo { +namespace hdmap { + +template +class ObjectWithAABox { + public: + ObjectWithAABox(const apollo::common::math::AABox2d &aabox, + const Object *object, const GeoObject *geo_object, + const int id) + : aabox_(aabox), object_(object), geo_object_(geo_object), id_(id) {} + ~ObjectWithAABox() {} + const apollo::common::math::AABox2d &aabox() const { return aabox_; } + double DistanceTo(const apollo::common::math::Vec2d &point) const { + return geo_object_->DistanceTo(point); + } + double DistanceSquareTo(const apollo::common::math::Vec2d &point) const { + return geo_object_->DistanceSquareTo(point); + } + const Object *object() const { return object_; } + const GeoObject *geo_object() const { return geo_object_; } + int id() const { return id_; } + + private: + apollo::common::math::AABox2d aabox_; + const Object *object_; + const GeoObject *geo_object_; + int id_; +}; + +class LaneInfo; +class JunctionInfo; +class CrosswalkInfo; +class SignalInfo; +class StopSignInfo; +class YieldSignInfo; +class OverlapInfo; +class ClearAreaInfo; + +class HDMapImpl; + +using LaneSegmentBox = + ObjectWithAABox; +using LaneSegmentKDTree = apollo::common::math::AABoxKDTree2d; + +typedef std::shared_ptr OverlapInfoConstPtr; +class LaneInfo { + public: + explicit LaneInfo(const Lane &lane); + + const Id &id() const { return lane_.id(); } + const Id &road_id() const { return road_id_; } + const Id §ion_id() const { return section_id_; } + const Lane &lane() const { return lane_; } + const std::vector &points() const { + return points_; + } + const std::vector &unit_directions() const { + return unit_directions_; + } + double Heading(const double s) const; + const std::vector &headings() const { return headings_; } + const std::vector &segments() const { + return segments_; + } + const std::vector &accumulate_s() const { return accumulated_s_; } + const std::vector &overlaps() const { return overlaps_; } + const std::vector &cross_lanes() const { + return cross_lanes_; + } + const std::vector &signals() const { return signals_; } + const std::vector &yield_signs() const { + return yield_signs_; + } + const std::vector &stop_signs() const { + return stop_signs_; + } + const std::vector &crosswalks() const { + return crosswalks_; + } + const std::vector &junctions() const { + return junctions_; + } + double total_length() const { return total_length_; } + using SampledWidth = std::pair; + const std::vector &sampled_left_width() const { + return sampled_left_width_; + } + const std::vector &sampled_right_width() const { + return sampled_right_width_; + } + void GetWidth(const double s, double *left_width, double *right_width) const; + double GetWidth(const double s) const; + double GetEffectiveWidth(const double s) const; + + bool IsOnLane(const apollo::common::math::Vec2d &point) const; + bool IsOnLane(const apollo::common::math::Box2d &box) const; + + apollo::common::PointENU GetSmoothPoint(double s) const; + double DistanceTo(const apollo::common::math::Vec2d &point) const; + double DistanceTo(const apollo::common::math::Vec2d &point, + apollo::common::math::Vec2d *map_point, double *s_offset, + int *s_offset_index) const; + apollo::common::PointENU GetNearestPoint( + const apollo::common::math::Vec2d &point, double *distance) const; + bool GetProjection(const apollo::common::math::Vec2d &point, + double *accumulate_s, double *lateral) const; + + private: + friend class HDMapImpl; + friend class RoadInfo; + void Init(); + void PostProcess(const HDMapImpl &map_instance); + void UpdateOverlaps(const HDMapImpl &map_instance); + double GetWidthFromSample( + const std::vector &samples, const double s) const; + void CreateKDTree(); + void set_road_id(const Id &road_id) { road_id_ = road_id; } + void set_section_id(const Id §ion_id) { section_id_ = section_id; } + + private: + const Lane &lane_; + std::vector points_; + std::vector unit_directions_; + std::vector headings_; + std::vector segments_; + std::vector accumulated_s_; + std::vector overlap_ids_; + std::vector overlaps_; + std::vector cross_lanes_; + std::vector signals_; + std::vector yield_signs_; + std::vector stop_signs_; + std::vector crosswalks_; + std::vector parking_spaces_; + std::vector junctions_; + double total_length_ = 0.0; + std::vector sampled_left_width_; + std::vector sampled_right_width_; + + std::vector segment_box_list_; + std::unique_ptr lane_segment_kdtree_; + + Id road_id_; + Id section_id_; +}; + +class JunctionInfo { + public: + explicit JunctionInfo(const Junction &junction); + + const Id &id() const { return junction_.id(); } + const Junction &junction() const { return junction_; } + const apollo::common::math::Polygon2d &polygon() const { return polygon_; } + const apollo::common::math::AABox2d &mbr() const { return mbr_; } + + private: + void Init(); + + private: + const Junction &junction_; + apollo::common::math::Polygon2d polygon_; + apollo::common::math::AABox2d mbr_; +}; +using JunctionPolygonBox = + ObjectWithAABox; +using JunctionPolygonKDTree = + apollo::common::math::AABoxKDTree2d; + +class SignalInfo { + public: + explicit SignalInfo(const Signal &signal); + + const Id &id() const { return signal_.id(); } + const Signal &signal() const { return signal_; } + const std::vector &segments() const { + return segments_; + } + + private: + void Init(); + + private: + const Signal &signal_; + std::vector segments_; +}; +using SignalSegmentBox = + ObjectWithAABox; +using SignalSegmentKDTree = + apollo::common::math::AABoxKDTree2d; + +class CrosswalkInfo { + public: + explicit CrosswalkInfo(const Crosswalk &crosswalk); + + const Id &id() const { return crosswalk_.id(); } + const Crosswalk &crosswalk() const { return crosswalk_; } + const apollo::common::math::Polygon2d &polygon() const { return polygon_; } + + private: + void Init(); + + private: + const Crosswalk &crosswalk_; + apollo::common::math::Polygon2d polygon_; +}; +using CrosswalkPolygonBox = + ObjectWithAABox; +using CrosswalkPolygonKDTree = + apollo::common::math::AABoxKDTree2d; + +class StopSignInfo { + public: + explicit StopSignInfo(const StopSign &stop_sign); + + const Id &id() const { return stop_sign_.id(); } + const StopSign &stop_sign() const { return stop_sign_; } + const std::vector &segments() const { + return segments_; + } + + private: + void init(); + + private: + const StopSign &stop_sign_; + std::vector segments_; +}; +using StopSignSegmentBox = + ObjectWithAABox; +using StopSignSegmentKDTree = + apollo::common::math::AABoxKDTree2d; + +class YieldSignInfo { + public: + explicit YieldSignInfo(const YieldSign &yield_sign); + + const Id &id() const { return yield_sign_.id(); } + const YieldSign &yield_sign() const { return yield_sign_; } + const std::vector &segments() const { + return segments_; + } + + private: + void Init(); + + private: + const YieldSign &yield_sign_; + std::vector segments_; +}; +using YieldSignSegmentBox = + ObjectWithAABox; +using YieldSignSegmentKDTree = + apollo::common::math::AABoxKDTree2d; + +class OverlapInfo { + public: + explicit OverlapInfo(const Overlap &overlap); + + const Id &id() const { return overlap_.id(); } + const Overlap &overlap() const { return overlap_; } + const ObjectOverlapInfo *get_object_overlap_info(const Id &id) const; + + private: + const Overlap &overlap_; +}; + +class RoadInfo { + public: + explicit RoadInfo(const Road &road); + const Id &id() const { return road_.id(); } + const Road &road() const { return road_; } + const std::vector §ions() const { return sections_; } + + const Id &junction_id() const { return road_.junction_id(); } + bool has_junction_id() const { return road_.has_junction_id(); } + + const std::vector &GetBoundaries() const; + + private: + Road road_; + std::vector sections_; + std::vector road_boundaries_; +}; + +typedef std::shared_ptr LaneInfoConstPtr; +typedef std::shared_ptr JunctionInfoConstPtr; +typedef std::shared_ptr SignalInfoConstPtr; +typedef std::shared_ptr CrosswalkInfoConstPtr; +typedef std::shared_ptr StopSignInfoConstPtr; +typedef std::shared_ptr YieldSignInfoConstPtr; +typedef std::shared_ptr RoadInfoConstPtr; +typedef std::shared_ptr RoadROIBoundaryPtr; + +struct JunctionBoundary { + JunctionInfoConstPtr junction_info; +}; + +using JunctionBoundaryPtr = std::shared_ptr; + +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_HDMAP_COMMON_H_ diff --git a/modules/map/hdmap/hdmap_common_test.cc b/modules/map/hdmap/hdmap_common_test.cc new file mode 100644 index 00000000000..58d41589de5 --- /dev/null +++ b/modules/map/hdmap/hdmap_common_test.cc @@ -0,0 +1,527 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#include "gtest/gtest.h" +#include "modules/map/hdmap/hdmap_impl.h" + +namespace apollo { +namespace hdmap { + +class HDMapCommonTestSuite : public ::testing::Test { + protected: + HDMapCommonTestSuite() {} + virtual ~HDMapCommonTestSuite() {} + virtual void SetUp() {} + virtual void TearDown() {} + void init_lane_obj(Lane* lane); + void init_junction_obj(Junction* junction); + void init_signal_obj(Signal* signal); + void init_crosswalk_obj(Crosswalk* crosswalk); + void init_stop_sign_obj(StopSign* stop_sign); + void init_yield_sign_obj(YieldSign* yield_sign); + void init_road_obj(Road* road); +}; + +void HDMapCommonTestSuite::init_lane_obj(Lane* lane) { + lane->mutable_id()->set_id("lane_1"); + CurveSegment* curve_segment = lane->mutable_central_curve()->add_segment(); + LineSegment* line_segment = curve_segment->mutable_line_segment(); + apollo::common::PointENU* pt = line_segment->add_point(); + pt->set_x(1.0); + pt->set_y(1.0); + pt = line_segment->add_point(); + pt->set_x(2.0); + pt->set_y(1.0); + pt = line_segment->add_point(); + pt->set_x(3.0); + pt->set_y(1.0); + pt = line_segment->add_point(); + pt->set_x(4.0); + pt->set_y(1.0); + pt = line_segment->add_point(); + pt->set_x(5.0); + pt->set_y(1.0); + LaneSampleAssociation* lane_sample = lane->add_left_sample(); + lane_sample->set_s(0.0); + lane_sample->set_width(1.5); + lane_sample = lane->add_left_sample(); + lane_sample->set_s(1.0); + lane_sample->set_width(1.5); + lane_sample = lane->add_left_sample(); + lane_sample->set_s(2.0); + lane_sample->set_width(1.5); + lane_sample = lane->add_left_sample(); + lane_sample->set_s(3.0); + lane_sample->set_width(1.2); + lane_sample = lane->add_left_sample(); + lane_sample->set_s(4.0); + lane_sample->set_width(1.2); + + lane_sample = lane->add_right_sample(); + lane_sample->set_s(0.0); + lane_sample->set_width(1.5); + lane_sample = lane->add_right_sample(); + lane_sample->set_s(1.0); + lane_sample->set_width(1.5); + lane_sample = lane->add_right_sample(); + lane_sample->set_s(2.0); + lane_sample->set_width(1.5); + lane_sample = lane->add_right_sample(); + lane_sample->set_s(3.0); + lane_sample->set_width(1.2); + lane_sample = lane->add_right_sample(); + lane_sample->set_s(4.0); + lane_sample->set_width(1.2); + + lane->set_type(Lane::CITY_DRIVING); +} + +void HDMapCommonTestSuite::init_junction_obj(Junction* junction) { + junction->mutable_id()->set_id("junction_1"); + Polygon* polygon = junction->mutable_polygon(); + apollo::common::PointENU* pt = polygon->add_point(); + pt->set_x(1.0); + pt->set_y(1.0); + pt = polygon->add_point(); + pt->set_x(2.0); + pt->set_y(1.0); + pt = polygon->add_point(); + pt->set_x(3.0); + pt->set_y(1.0); + pt = polygon->add_point(); + pt->set_x(4.0); + pt->set_y(1.0); + pt = polygon->add_point(); + pt->set_x(5.0); + pt->set_y(1.0); + pt = polygon->add_point(); + pt->set_x(5.0); + pt->set_y(1.0); + pt = polygon->add_point(); + pt->set_x(5.0); + pt->set_y(2.0); + pt = polygon->add_point(); + pt->set_x(1.0); + pt->set_y(2.0); + pt = polygon->add_point(); + pt->set_x(1.0); + pt->set_y(1.0); +} + +void HDMapCommonTestSuite::init_signal_obj(Signal* signal) { + signal->mutable_id()->set_id("signal_1"); + Polygon* polygon = signal->mutable_boundary(); + apollo::common::PointENU* pt = polygon->add_point(); + pt->set_x(1.0); + pt->set_y(1.0); + pt->set_z(1.0); + pt = polygon->add_point(); + pt->set_x(1.0); + pt->set_y(1.0); + pt->set_z(5.0); + pt = polygon->add_point(); + pt->set_x(3.0); + pt->set_y(1.0); + pt->set_z(5.0); + pt = polygon->add_point(); + pt->set_x(3.0); + pt->set_y(1.0); + pt->set_z(1.0); + + Subsignal* sub_signal = signal->add_subsignal(); + sub_signal->mutable_id()->set_id("sub_signal_1"); + pt = sub_signal->mutable_location(); + pt->set_x(2.0); + pt->set_y(1.0); + pt->set_z(4.0); + sub_signal = signal->add_subsignal(); + sub_signal->mutable_id()->set_id("sub_signal_2"); + pt = sub_signal->mutable_location(); + pt->set_x(2.0); + pt->set_y(1.0); + pt->set_z(3.0); + sub_signal = signal->add_subsignal(); + sub_signal->mutable_id()->set_id("sub_signal_3"); + pt = sub_signal->mutable_location(); + pt->set_x(2.0); + pt->set_y(1.0); + pt->set_z(2.0); + + CurveSegment* curve_segment = signal->add_stop_line()->add_segment(); + LineSegment* line_segment = curve_segment->mutable_line_segment(); + pt = line_segment->add_point(); + pt->set_x(0.0); + pt->set_y(4.0); + pt->set_z(0.0); + pt = line_segment->add_point(); + pt->set_x(1.0); + pt->set_y(4.0); + pt->set_z(0.0); + pt = line_segment->add_point(); + pt->set_x(2.0); + pt->set_y(4.0); + pt->set_z(0.0); + + curve_segment = signal->add_stop_line()->add_segment(); + line_segment = curve_segment->mutable_line_segment(); + pt = line_segment->add_point(); + pt->set_x(2.0); + pt->set_y(4.0); + pt->set_z(0.0); + pt = line_segment->add_point(); + pt->set_x(3.0); + pt->set_y(4.0); + pt->set_z(0.0); + pt = line_segment->add_point(); + pt->set_x(4.0); + pt->set_y(4.0); + pt->set_z(0.0); +} +void HDMapCommonTestSuite::init_crosswalk_obj(Crosswalk* crosswalk) { + crosswalk->mutable_id()->set_id("crosswalk_1"); + Polygon* polygon = crosswalk->mutable_polygon(); + apollo::common::PointENU* pt = polygon->add_point(); + pt->set_x(0.0); + pt->set_y(0.0); + pt->set_z(0.0); + pt = polygon->add_point(); + pt->set_x(3.0); + pt->set_y(0.0); + pt->set_z(0.0); + pt = polygon->add_point(); + pt->set_x(3.0); + pt->set_y(3.0); + pt->set_z(0.0); + pt = polygon->add_point(); + pt->set_x(0.0); + pt->set_y(3.0); + pt->set_z(0.0); +} +void HDMapCommonTestSuite::init_stop_sign_obj(StopSign* stop_sign) { + stop_sign->mutable_id()->set_id("stop_sign_1"); + CurveSegment* curve_segment = stop_sign->add_stop_line()->add_segment(); + LineSegment* line_segment = curve_segment->mutable_line_segment(); + apollo::common::PointENU* pt = line_segment->add_point(); + pt->set_x(0.0); + pt->set_y(0.0); + pt->set_z(0.0); + pt = line_segment->add_point(); + pt->set_x(1.0); + pt->set_y(0.0); + pt->set_z(0.0); + pt = line_segment->add_point(); + pt->set_x(2.0); + pt->set_y(0.0); + pt->set_z(0.0); +} +void HDMapCommonTestSuite::init_yield_sign_obj(YieldSign* yield_sign) { + yield_sign->mutable_id()->set_id("yield_sign_1"); + CurveSegment* curve_segment = yield_sign->add_stop_line()->add_segment(); + LineSegment* line_segment = curve_segment->mutable_line_segment(); + apollo::common::PointENU* pt = line_segment->add_point(); + pt->set_x(0.0); + pt->set_y(0.0); + pt->set_z(0.0); + pt = line_segment->add_point(); + pt->set_x(1.0); + pt->set_y(0.0); + pt->set_z(0.0); + pt = line_segment->add_point(); + pt->set_x(2.0); + pt->set_y(0.0); + pt->set_z(0.0); +} + +void HDMapCommonTestSuite::init_road_obj(Road* road) { + road->mutable_id()->set_id("road_1"); + road->mutable_junction_id()->set_id("junction_1"); + + RoadSection* section = road->add_section(); + section->mutable_id()->set_id("section_1"); + section->add_lane_id()->set_id("section_1_1"); + section->add_lane_id()->set_id("section_1_2"); + + section = road->add_section(); + section->mutable_id()->set_id("section_2"); + section->add_lane_id()->set_id("section_2_1"); +} + +TEST_F(HDMapCommonTestSuite, lane_info) { + Lane lane; + init_lane_obj(&lane); + LaneInfo lane_info(lane); + EXPECT_EQ(lane.id().id(), lane_info.id().id()); + EXPECT_EQ(lane.central_curve().segment(0).line_segment().point_size(), + lane_info.points().size()); + for (std::size_t i = 0; i < lane_info.points().size(); ++i) { + EXPECT_NEAR(lane.central_curve().segment(0).line_segment().point(i).x(), + lane_info.points()[i].x(), 1E-5); + EXPECT_NEAR(lane.central_curve().segment(0).line_segment().point(i).y(), + lane_info.points()[i].y(), 1E-5); + } + EXPECT_EQ(lane.central_curve().segment(0).line_segment().point_size() - 1, + lane_info.segments().size()); + for (const auto& segment : lane_info.segments()) { + EXPECT_NEAR(1.0, segment.length(), 1E-4); + } + EXPECT_EQ(lane_info.unit_directions().size(), + lane_info.segments().size() + 1); + for (std::size_t i = 0; i < lane_info.segments().size(); ++i) { + EXPECT_EQ(lane_info.segments()[i].unit_direction(), + lane_info.unit_directions()[i]); + } + EXPECT_EQ(lane.central_curve().segment(0).line_segment().point_size(), + lane_info.accumulate_s().size()); + for (std::size_t i = 0; i < lane_info.accumulate_s().size(); ++i) { + EXPECT_NEAR(i * 1.0, lane_info.accumulate_s()[i], 1E-4); + } + EXPECT_EQ(lane.central_curve().segment(0).line_segment().point_size(), + lane_info.headings().size()); + for (std::size_t i = 0; i < lane_info.headings().size(); ++i) { + EXPECT_NEAR(lane_info.unit_directions()[i].Angle(), lane_info.headings()[i], + 1E-3); + } + double left_width = 0.0; + double right_width = 0.0; + lane_info.GetWidth(2.0, &left_width, &right_width); + EXPECT_NEAR(1.5, left_width, 1E-3); + EXPECT_NEAR(1.5, right_width, 1E-3); + lane_info.GetWidth(3.5, &left_width, &right_width); + EXPECT_NEAR(1.2, left_width, 1E-3); + EXPECT_NEAR(1.2, right_width, 1E-3); + EXPECT_NEAR(4.0, lane_info.total_length(), 1E-3); +} + +TEST_F(HDMapCommonTestSuite, lane_info_get_width) { + Lane lane; + init_lane_obj(&lane); + LaneInfo lane_info(lane); + EXPECT_NEAR(3.0, lane_info.GetWidth(2.0), 1E-3); + EXPECT_NEAR(2.4, lane_info.GetWidth(3.5), 1E-3); +} + +TEST_F(HDMapCommonTestSuite, lane_info_get_effective_width) { + Lane lane; + init_lane_obj(&lane); + LaneInfo lane_info(lane); + EXPECT_NEAR(3.0, lane_info.GetEffectiveWidth(2.0), 1E-3); + EXPECT_NEAR(2.4, lane_info.GetEffectiveWidth(3.5), 1E-3); +} + +TEST_F(HDMapCommonTestSuite, point_is_on_lane) { + Lane lane; + init_lane_obj(&lane); + LaneInfo lane_info(lane); + + EXPECT_TRUE(lane_info.IsOnLane({1.5, 1.5})); + EXPECT_TRUE(lane_info.IsOnLane({1.5, 0.5})); + EXPECT_TRUE(!lane_info.IsOnLane({0.5, 1.5})); + EXPECT_TRUE(!lane_info.IsOnLane({1.5, 3})); +} + +TEST_F(HDMapCommonTestSuite, box_is_on_lane) { + Lane lane; + init_lane_obj(&lane); + LaneInfo lane_info(lane); + + apollo::common::math::Box2d target_in_box( + apollo::common::math::LineSegment2d({2, 1}, {3, 1}), 0.5); + EXPECT_TRUE(lane_info.IsOnLane(target_in_box)); + + apollo::common::math::Box2d target_out_box( + apollo::common::math::LineSegment2d({2, 1}, {3, 1}), 4); + EXPECT_TRUE(!lane_info.IsOnLane(target_out_box)); +} + +TEST_F(HDMapCommonTestSuite, GetSmoothPoint) { + Lane lane; + init_lane_obj(&lane); + LaneInfo lane_info(lane); + + auto smooth_point = lane_info.GetSmoothPoint(1.5); + EXPECT_NEAR(smooth_point.x(), 2.5, 1E-3); + EXPECT_NEAR(smooth_point.y(), 1.0, 1E-3); +} + +TEST_F(HDMapCommonTestSuite, DistanceTo) { + Lane lane; + init_lane_obj(&lane); + LaneInfo lane_info(lane); + + double distance = lane_info.DistanceTo({2.5, 3.0}); + EXPECT_NEAR(distance, 2.0, 1E-3); + + distance = lane_info.DistanceTo({0.5, 3.0}); + EXPECT_NEAR(distance, 2.0615, 1E-3); +} + +TEST_F(HDMapCommonTestSuite, distance_to_with_more_info) { + Lane lane; + init_lane_obj(&lane); + LaneInfo lane_info(lane); + + apollo::common::math::Vec2d foot_point; + double s_offset = 0.0; + int s_offset_index = 0; + double distance = lane_info.DistanceTo( + {2.5, 3.0}, &foot_point, &s_offset, &s_offset_index); + EXPECT_NEAR(distance, 2.0, 1E-3); + EXPECT_NEAR(foot_point.x(), 2.5, 1E-3); + EXPECT_NEAR(foot_point.y(), 1.0, 1E-3); + EXPECT_NEAR(s_offset, 1.5, 1E-3); + + distance = lane_info.DistanceTo( + {0.5, 3.0}, &foot_point, &s_offset, &s_offset_index); + EXPECT_NEAR(distance, 2.06155, 1E-3); + EXPECT_NEAR(foot_point.x(), 1.0, 1E-3); + EXPECT_NEAR(foot_point.y(), 1.0, 1E-3); + EXPECT_NEAR(s_offset, 0.0, 1E-3); +} + +TEST_F(HDMapCommonTestSuite, GetNearestPoint) { + Lane lane; + init_lane_obj(&lane); + LaneInfo lane_info(lane); + + double distance = 0.0; + auto nearest_point = lane_info.GetNearestPoint({2.4, 3.0}, &distance); + EXPECT_NEAR(nearest_point.x(), 2.4, 1E-3); + EXPECT_NEAR(nearest_point.y(), 1.0, 1E-3); + + nearest_point = lane_info.GetNearestPoint({0.5, 3.0}, &distance); + EXPECT_NEAR(nearest_point.x(), 1.0, 1E-3); + EXPECT_NEAR(nearest_point.y(), 1.0, 1E-3); + + nearest_point = lane_info.GetNearestPoint({10.5, 3.0}, &distance); + EXPECT_NEAR(nearest_point.x(), 5.0, 1E-3); + EXPECT_NEAR(nearest_point.y(), 1.0, 1E-3); +} + +TEST_F(HDMapCommonTestSuite, GetProjection) { + Lane lane; + init_lane_obj(&lane); + LaneInfo lane_info(lane); + + double accumulate_s = 0.0; + double lateral = 0.0; + bool success = lane_info.GetProjection({2.4, 3.0}, &accumulate_s, &lateral); + EXPECT_TRUE(success); + EXPECT_NEAR(accumulate_s, 1.4, 1E-3); + EXPECT_NEAR(lateral, 2.0, 1E-3); + + success = lane_info.GetProjection({0.5, 3.0}, &accumulate_s, &lateral); + EXPECT_TRUE(success); + EXPECT_NEAR(accumulate_s, -0.5, 1E-3); + EXPECT_NEAR(lateral, 2.0, 1E-3); + + success = lane_info.GetProjection({10.5, 3.0}, &accumulate_s, &lateral); + EXPECT_TRUE(success); + EXPECT_NEAR(accumulate_s, 9.5, 1E-3); + EXPECT_NEAR(lateral, 2.0, 1E-3); +} + +TEST_F(HDMapCommonTestSuite, junction_info) { + Junction junction; + init_junction_obj(&junction); + JunctionInfo junction_info(junction); + EXPECT_EQ(junction.id().id(), junction_info.id().id()); + EXPECT_EQ(7, junction_info.polygon().points().size()); + for (std::size_t i = 0; i < 5; ++i) { + EXPECT_NEAR((i + 1) * 1.0, junction_info.polygon().points()[i].x(), 1E-3); + } + EXPECT_NEAR(5.0, junction_info.polygon().points()[5].x(), 1E-3); + EXPECT_NEAR(2.0, junction_info.polygon().points()[5].y(), 1E-3); + EXPECT_NEAR(1.0, junction_info.polygon().points()[6].x(), 1E-3); + EXPECT_NEAR(2.0, junction_info.polygon().points()[6].y(), 1E-3); +} + +TEST_F(HDMapCommonTestSuite, signal_info) { + Signal signal; + init_signal_obj(&signal); + SignalInfo signal_info(signal); + EXPECT_EQ(signal.id().id(), signal_info.id().id()); + EXPECT_EQ(4, signal_info.signal().boundary().point_size()); + + int segment_size = 0; + for (const auto& stop_line : signal.stop_line()) { + segment_size += stop_line.segment(0).line_segment().point_size() - 1; + } + EXPECT_EQ(segment_size, signal_info.segments().size()); + for (const auto& segment : signal_info.segments()) { + EXPECT_NEAR(1.0, segment.length(), 1E-4); + } +} + +TEST_F(HDMapCommonTestSuite, crosswalk_info) { + Crosswalk crosswalk; + init_crosswalk_obj(&crosswalk); + CrosswalkInfo crosswalk_info(crosswalk); + EXPECT_EQ(crosswalk.id().id(), crosswalk_info.id().id()); + EXPECT_EQ(4, crosswalk_info.crosswalk().polygon().point_size()); + EXPECT_NEAR(0.0, crosswalk_info.polygon().points()[0].x(), 1E-3); + EXPECT_NEAR(0.0, crosswalk_info.polygon().points()[0].y(), 1E-3); + EXPECT_NEAR(3.0, crosswalk_info.polygon().points()[1].x(), 1E-3); + EXPECT_NEAR(0.0, crosswalk_info.polygon().points()[1].y(), 1E-3); + EXPECT_NEAR(3.0, crosswalk_info.polygon().points()[2].x(), 1E-3); + EXPECT_NEAR(3.0, crosswalk_info.polygon().points()[2].y(), 1E-3); + EXPECT_NEAR(0.0, crosswalk_info.polygon().points()[3].x(), 1E-3); + EXPECT_NEAR(3.0, crosswalk_info.polygon().points()[3].y(), 1E-3); +} + +TEST_F(HDMapCommonTestSuite, stop_sign_info) { + StopSign stop_sign; + init_stop_sign_obj(&stop_sign); + StopSignInfo stop_sign_info(stop_sign); + EXPECT_EQ(stop_sign.id().id(), stop_sign_info.id().id()); + EXPECT_EQ(stop_sign.stop_line(0).segment(0).line_segment().point_size() - 1, + stop_sign_info.segments().size()); + for (const auto& segment : stop_sign_info.segments()) { + EXPECT_NEAR(1.0, segment.length(), 1E-4); + } +} + +TEST_F(HDMapCommonTestSuite, yield_sign_info) { + YieldSign yield_sign; + init_yield_sign_obj(&yield_sign); + YieldSignInfo yield_sign_info(yield_sign); + EXPECT_EQ(yield_sign.id().id(), yield_sign_info.id().id()); + EXPECT_EQ(yield_sign.stop_line(0).segment(0).line_segment().point_size() - 1, + yield_sign_info.segments().size()); + for (const auto& segment : yield_sign_info.segments()) { + EXPECT_NEAR(1.0, segment.length(), 1E-4); + } +} + +TEST_F(HDMapCommonTestSuite, road_info) { + Road road; + init_road_obj(&road); + RoadInfo road_info(road); + EXPECT_EQ(road.id().id(), road_info.id().id()); + EXPECT_EQ(2, road_info.sections().size()); + + const RoadSection& section0 = road_info.sections()[0]; + EXPECT_EQ(section0.id().id(), "section_1"); + EXPECT_EQ(section0.lane_id_size(), 2); + EXPECT_EQ(section0.lane_id(0).id(), "section_1_1"); + EXPECT_EQ(section0.lane_id(1).id(), "section_1_2"); + + const RoadSection& section1 = road_info.sections()[1]; + EXPECT_EQ(section1.id().id(), "section_2"); + EXPECT_EQ(section1.lane_id_size(), 1); + EXPECT_EQ(section1.lane_id(0).id(), "section_2_1"); +} + +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/hdmap_impl.cc b/modules/map/hdmap/hdmap_impl.cc new file mode 100644 index 00000000000..852f95fdfb9 --- /dev/null +++ b/modules/map/hdmap/hdmap_impl.cc @@ -0,0 +1,612 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#include "modules/map/hdmap/hdmap_impl.h" + +#include +#include + +#include "modules/common/util/file.h" +#include "modules/common/util/string_util.h" +#include "modules/map/hdmap/adapter/opendrive_adapter.h" + +namespace apollo { +namespace hdmap { +namespace { + +using apollo::common::math::AABoxKDTreeParams; +using apollo::common::math::Vec2d; +using apollo::common::PointENU; + +Id CreateHDMapId(const std::string& string_id) { + Id id; + id.set_id(string_id); + return id; +} + +} // namespace + +int HDMapImpl::LoadMapFromFile(const std::string& map_filename) { + Clear(); + + if (apollo::common::util::EndWith(map_filename, ".xml")) { + if (!adapter::OpendriveAdapter::LoadData(map_filename, &map_)) { + return -1; + } + } else if (!apollo::common::util::GetProtoFromFile(map_filename, &map_)) { + return -1; + } + + for (const auto& lane : map_.lane()) { + lane_table_[lane.id().id()].reset(new LaneInfo(lane)); + } + for (const auto& junction : map_.junction()) { + junction_table_[junction.id().id()].reset(new JunctionInfo(junction)); + } + for (const auto& signal : map_.signal()) { + signal_table_[signal.id().id()].reset(new SignalInfo(signal)); + } + for (const auto& crosswalk : map_.crosswalk()) { + crosswalk_table_[crosswalk.id().id()].reset(new CrosswalkInfo(crosswalk)); + } + for (const auto& stop_sign : map_.stop_sign()) { + stop_sign_table_[stop_sign.id().id()].reset(new StopSignInfo(stop_sign)); + } + for (const auto& yield_sign : map_.yield()) { + yield_sign_table_[yield_sign.id().id()].reset( + new YieldSignInfo(yield_sign)); + } + for (const auto& overlap : map_.overlap()) { + overlap_table_[overlap.id().id()].reset(new OverlapInfo(overlap)); + } + + for (const auto& road : map_.road()) { + road_table_[road.id().id()].reset(new RoadInfo(road)); + } + + for (const auto& road_ptr_pair : road_table_) { + const auto& road_id = road_ptr_pair.second->id(); + for (const auto& road_section : road_ptr_pair.second->sections()) { + const auto& section_id = road_section.id(); + for (const auto& lane_id : road_section.lane_id()) { + lane_table_[lane_id.id()]->set_road_id(road_id); + lane_table_[lane_id.id()]->set_section_id(section_id); + } + } + } + for (const auto& lane_ptr_pair : lane_table_) { + lane_ptr_pair.second->PostProcess(*this); + } + + BuildLaneSegmentKDTree(); + BuildJunctionPolygonKDTree(); + BuildSignalSegmentKDTree(); + BuildCrosswalkPolygonKDTree(); + BuildStopSignSegmentKDTree(); + BuildYieldSignSegmentKDTree(); + + return 0; +} + +LaneInfoConstPtr HDMapImpl::GetLaneById(const Id& id) const { + LaneTable::const_iterator it = lane_table_.find(id.id()); + return it != lane_table_.end() ? it->second : nullptr; +} + +JunctionInfoConstPtr HDMapImpl::GetJunctionById(const Id& id) const { + JunctionTable::const_iterator it = junction_table_.find(id.id()); + return it != junction_table_.end() ? it->second : nullptr; +} + +SignalInfoConstPtr HDMapImpl::GetSignalById(const Id& id) const { + SignalTable::const_iterator it = signal_table_.find(id.id()); + return it != signal_table_.end() ? it->second : nullptr; +} + +CrosswalkInfoConstPtr HDMapImpl::GetCrosswalkById(const Id& id) const { + CrosswalkTable::const_iterator it = crosswalk_table_.find(id.id()); + return it != crosswalk_table_.end() ? it->second : nullptr; +} + +StopSignInfoConstPtr HDMapImpl::GetStopSignById(const Id& id) const { + StopSignTable::const_iterator it = stop_sign_table_.find(id.id()); + return it != stop_sign_table_.end() ? it->second : nullptr; +} + +YieldSignInfoConstPtr HDMapImpl::GetYieldSignById(const Id& id) const { + YieldSignTable::const_iterator it = yield_sign_table_.find(id.id()); + return it != yield_sign_table_.end() ? it->second : nullptr; +} + +OverlapInfoConstPtr HDMapImpl::GetOverlapById(const Id& id) const { + OverlapTable::const_iterator it = overlap_table_.find(id.id()); + return it != overlap_table_.end() ? it->second : nullptr; +} + +RoadInfoConstPtr HDMapImpl::GetRoadById(const Id& id) const { + RoadTable::const_iterator it = road_table_.find(id.id()); + return it != road_table_.end() ? it->second : nullptr; +} + +int HDMapImpl::GetLanes(const PointENU& point, double distance, + std::vector* lanes) const { + return GetLanes({point.x(), point.y()}, distance, lanes); +} + +int HDMapImpl::GetLanes(const Vec2d& point, double distance, + std::vector* lanes) const { + if (lanes == nullptr || lane_segment_kdtree_ == nullptr) { + return -1; + } + + lanes->clear(); + std::vector ids; + const int status = + SearchObjects(point, distance, *lane_segment_kdtree_, &ids); + if (status < 0) { + return status; + } + + for (const auto& id : ids) { + lanes->emplace_back(GetLaneById(CreateHDMapId(id))); + } + return 0; +} + +int HDMapImpl::GetRoads(const PointENU& point, double distance, + std::vector* roads) const { + return GetRoads({point.x(), point.y()}, distance, roads); +} + +int HDMapImpl::GetRoads(const Vec2d& point, double distance, + std::vector* roads) const { + std::vector lanes; + if (GetLanes(point, distance, &lanes) != 0) { + return -1; + } + std::unordered_set road_ids; + for (auto& lane : lanes) { + road_ids.insert(lane->road_id().id()); + } + + for (auto& road_id : road_ids) { + RoadInfoConstPtr road = GetRoadById(CreateHDMapId(road_id)); + CHECK_NOTNULL(road); + roads->push_back(road); + } + + return 0; +} + +int HDMapImpl::GetJunctions( + const PointENU& point, double distance, + std::vector* junctions) const { + return GetJunctions({point.x(), point.y()}, distance, junctions); +} + +int HDMapImpl::GetJunctions( + const Vec2d& point, double distance, + std::vector* junctions) const { + if (junctions == nullptr || junction_polygon_kdtree_ == nullptr) { + return -1; + } + junctions->clear(); + std::vector ids; + const int status = + SearchObjects(point, distance, *junction_polygon_kdtree_, &ids); + if (status < 0) { + return status; + } + for (const auto& id : ids) { + junctions->emplace_back(GetJunctionById(CreateHDMapId(id))); + } + return 0; +} + +int HDMapImpl::GetSignals(const PointENU& point, double distance, + std::vector* signals) const { + return GetSignals({point.x(), point.y()}, distance, signals); +} + +int HDMapImpl::GetSignals(const Vec2d& point, double distance, + std::vector* signals) const { + if (signals == nullptr || signal_segment_kdtree_ == nullptr) { + return -1; + } + signals->clear(); + std::vector ids; + const int status = + SearchObjects(point, distance, *signal_segment_kdtree_, &ids); + if (status < 0) { + return status; + } + for (const auto& id : ids) { + signals->emplace_back(GetSignalById(CreateHDMapId(id))); + } + return 0; +} + +int HDMapImpl::GetCrosswalks( + const PointENU& point, double distance, + std::vector* crosswalks) const { + return GetCrosswalks({point.x(), point.y()}, distance, crosswalks); +} + +int HDMapImpl::GetCrosswalks( + const Vec2d& point, double distance, + std::vector* crosswalks) const { + if (crosswalks == nullptr || crosswalk_polygon_kdtree_ == nullptr) { + return -1; + } + crosswalks->clear(); + std::vector ids; + const int status = + SearchObjects(point, distance, *crosswalk_polygon_kdtree_, &ids); + if (status < 0) { + return status; + } + for (const auto& id : ids) { + crosswalks->emplace_back(GetCrosswalkById(CreateHDMapId(id))); + } + return 0; +} + +int HDMapImpl::GetStopSigns( + const PointENU& point, double distance, + std::vector* stop_signs) const { + return GetStopSigns({point.x(), point.y()}, distance, stop_signs); +} + +int HDMapImpl::GetStopSigns( + const Vec2d& point, double distance, + std::vector* stop_signs) const { + if (stop_signs == nullptr || stop_sign_segment_kdtree_ == nullptr) { + return -1; + } + stop_signs->clear(); + std::vector ids; + const int status = + SearchObjects(point, distance, *stop_sign_segment_kdtree_, &ids); + if (status < 0) { + return status; + } + for (const auto& id : ids) { + stop_signs->emplace_back(GetStopSignById(CreateHDMapId(id))); + } + return 0; +} + +int HDMapImpl::GetYieldSigns( + const PointENU& point, double distance, + std::vector* yield_signs) const { + return GetYieldSigns({point.x(), point.y()}, distance, yield_signs); +} + +int HDMapImpl::GetYieldSigns( + const Vec2d& point, double distance, + std::vector* yield_signs) const { + if (yield_signs == nullptr || yield_sign_segment_kdtree_ == nullptr) { + return -1; + } + yield_signs->clear(); + std::vector ids; + const int status = + SearchObjects(point, distance, *yield_sign_segment_kdtree_, &ids); + if (status < 0) { + return status; + } + for (const auto& id : ids) { + yield_signs->emplace_back(GetYieldSignById(CreateHDMapId(id))); + } + + return 0; +} + +int HDMapImpl::GetNearestLane(const PointENU& point, + LaneInfoConstPtr* nearest_lane, double* nearest_s, + double* nearest_l) const { + return GetNearestLane({point.x(), point.y()}, nearest_lane, nearest_s, + nearest_l); +} + +int HDMapImpl::GetNearestLane(const Vec2d& point, + LaneInfoConstPtr* nearest_lane, double* nearest_s, + double* nearest_l) const { + CHECK_NOTNULL(nearest_lane); + CHECK_NOTNULL(nearest_s); + CHECK_NOTNULL(nearest_l); + const auto* segment_object = lane_segment_kdtree_->GetNearestObject(point); + if (segment_object == nullptr) { + return -1; + } + const Id& lane_id = segment_object->object()->id(); + *nearest_lane = GetLaneById(lane_id); + CHECK(*nearest_lane); + const int id = segment_object->id(); + const auto& segment = (*nearest_lane)->segments()[id]; + Vec2d nearest_pt; + segment.DistanceTo(point, &nearest_pt); + *nearest_s = (*nearest_lane)->accumulate_s()[id] + + nearest_pt.DistanceTo(segment.start()); + *nearest_l = segment.unit_direction().CrossProd(point - segment.start()); + + return 0; +} + +int HDMapImpl::GetNearestLaneWithHeading( + const PointENU& point, const double distance, const double central_heading, + const double max_heading_difference, LaneInfoConstPtr* nearest_lane, + double* nearest_s, double* nearest_l) const { + return GetNearestLaneWithHeading({point.x(), point.y()}, distance, + central_heading, max_heading_difference, + nearest_lane, nearest_s, nearest_l); +} + +int HDMapImpl::GetNearestLaneWithHeading( + const Vec2d& point, const double distance, const double central_heading, + const double max_heading_difference, LaneInfoConstPtr* nearest_lane, + double* nearest_s, double* nearest_l) const { + CHECK_NOTNULL(nearest_lane); + CHECK_NOTNULL(nearest_s); + CHECK_NOTNULL(nearest_l); + + std::vector lanes; + if (GetLanesWithHeading(point, distance, central_heading, + max_heading_difference, &lanes) != 0) { + return -1; + } + + double s = 0; + size_t s_index = 0; + Vec2d map_point; + double min_distance = distance; + for (const auto& lane : lanes) { + double s_offset = 0.0; + int s_offset_index = 0; + double distance = + lane->DistanceTo(point, &map_point, &s_offset, &s_offset_index); + if (distance < min_distance) { + min_distance = distance; + *nearest_lane = lane; + s = s_offset; + s_index = s_offset_index; + } + } + + if (*nearest_lane == nullptr) { + return -1; + } + + *nearest_s = s; + int segment_index = std::min(s_index, (*nearest_lane)->segments().size() - 1); + const auto& segment_2d = (*nearest_lane)->segments()[segment_index]; + *nearest_l = + segment_2d.unit_direction().CrossProd(point - segment_2d.start()); + + return 0; +} + +int HDMapImpl::GetLanesWithHeading(const PointENU& point, const double distance, + const double central_heading, + const double max_heading_difference, + std::vector* lanes) const { + return GetLanesWithHeading({point.x(), point.y()}, distance, central_heading, + max_heading_difference, lanes); +} + +int HDMapImpl::GetLanesWithHeading(const Vec2d& point, const double distance, + const double central_heading, + const double max_heading_difference, + std::vector* lanes) const { + CHECK_NOTNULL(lanes); + std::vector all_lanes; + const int status = GetLanes(point, distance, &all_lanes); + if (status < 0 || all_lanes.size() <= 0) { + return -1; + } + + lanes->clear(); + for (auto& lane : all_lanes) { + Vec2d proj_pt(0.0, 0.0); + double s_offset = 0.0; + int s_offset_index = 0; + double dis = lane->DistanceTo(point, &proj_pt, &s_offset, &s_offset_index); + if (dis <= distance) { + double heading_diff = + fabs(lane->headings()[s_offset_index] - central_heading); + if (fabs(apollo::common::math::NormalizeAngle(heading_diff)) <= + max_heading_difference) { + lanes->push_back(lane); + } + } + } + + return 0; +} + +int HDMapImpl::GetRoadBoundaries( + const PointENU& point, double radius, + std::vector* road_boundaries, + std::vector* junctions) const { + CHECK_NOTNULL(road_boundaries); + CHECK_NOTNULL(junctions); + + road_boundaries->clear(); + junctions->clear(); + + std::vector lanes; + if (GetLanes(point, radius, &lanes) != 0 || lanes.size() <= 0) { + return -1; + } + + std::unordered_set junction_id_set; + std::unordered_set road_section_id_set; + for (const auto& lane : lanes) { + const auto road_id = lane->road_id(); + const auto section_id = lane->section_id(); + std::string unique_id = road_id.id() + section_id.id(); + if (road_section_id_set.count(unique_id) > 0) { + continue; + } + road_section_id_set.insert(unique_id); + const auto road_ptr = GetRoadById(road_id); + CHECK_NOTNULL(road_ptr); + if (road_ptr->has_junction_id()) { + const Id junction_id = road_ptr->junction_id(); + if (junction_id_set.count(junction_id.id()) > 0) { + continue; + } + junction_id_set.insert(junction_id.id()); + JunctionBoundaryPtr junction_boundary_ptr(new JunctionBoundary()); + junction_boundary_ptr->junction_info = GetJunctionById(junction_id); + CHECK_NOTNULL(junction_boundary_ptr->junction_info); + junctions->push_back(junction_boundary_ptr); + } else { + RoadROIBoundaryPtr road_boundary_ptr(new RoadROIBoundary()); + road_boundary_ptr->mutable_id()->CopyFrom(road_ptr->id()); + for (const auto& section : road_ptr->sections()) { + if (section.id().id() == section_id.id()) { + road_boundary_ptr->add_road_boundaries()->CopyFrom( + section.boundary()); + } + } + road_boundaries->push_back(road_boundary_ptr); + } + } + + return 0; +} + +template +void HDMapImpl::BuildSegmentKDTree(const Table& table, + const AABoxKDTreeParams& params, + BoxTable* const box_table, + std::unique_ptr* const kdtree) { + box_table->clear(); + for (const auto& info_with_id : table) { + const auto* info = info_with_id.second.get(); + for (size_t id = 0; id < info->segments().size(); ++id) { + const auto& segment = info->segments()[id]; + box_table->emplace_back( + apollo::common::math::AABox2d(segment.start(), segment.end()), info, + &segment, id); + } + } + kdtree->reset(new KDTree(*box_table, params)); +} + +template +void HDMapImpl::BuildPolygonKDTree(const Table& table, + const AABoxKDTreeParams& params, + BoxTable* const box_table, + std::unique_ptr* const kdtree) { + box_table->clear(); + for (const auto& info_with_id : table) { + const auto* info = info_with_id.second.get(); + const auto& polygon = info->polygon(); + box_table->emplace_back(polygon.AABoundingBox(), info, &polygon, 0); + } + kdtree->reset(new KDTree(*box_table, params)); +} + +void HDMapImpl::BuildLaneSegmentKDTree() { + AABoxKDTreeParams params; + params.max_leaf_dimension = 5.0; // meters. + params.max_leaf_size = 16; + BuildSegmentKDTree(lane_table_, params, &lane_segment_boxes_, + &lane_segment_kdtree_); +} + +void HDMapImpl::BuildJunctionPolygonKDTree() { + AABoxKDTreeParams params; + params.max_leaf_dimension = 5.0; // meters. + params.max_leaf_size = 1; + BuildPolygonKDTree(junction_table_, params, &junction_polygon_boxes_, + &junction_polygon_kdtree_); +} + +void HDMapImpl::BuildCrosswalkPolygonKDTree() { + AABoxKDTreeParams params; + params.max_leaf_dimension = 5.0; // meters. + params.max_leaf_size = 1; + BuildPolygonKDTree(crosswalk_table_, params, &crosswalk_polygon_boxes_, + &crosswalk_polygon_kdtree_); +} + +void HDMapImpl::BuildSignalSegmentKDTree() { + AABoxKDTreeParams params; + params.max_leaf_dimension = 5.0; // meters. + params.max_leaf_size = 4; + BuildSegmentKDTree(signal_table_, params, &signal_segment_boxes_, + &signal_segment_kdtree_); +} + +void HDMapImpl::BuildStopSignSegmentKDTree() { + AABoxKDTreeParams params; + params.max_leaf_dimension = 5.0; // meters. + params.max_leaf_size = 4; + BuildSegmentKDTree(stop_sign_table_, params, &stop_sign_segment_boxes_, + &stop_sign_segment_kdtree_); +} + +void HDMapImpl::BuildYieldSignSegmentKDTree() { + AABoxKDTreeParams params; + params.max_leaf_dimension = 5.0; // meters. + params.max_leaf_size = 4; + BuildSegmentKDTree(yield_sign_table_, params, &yield_sign_segment_boxes_, + &yield_sign_segment_kdtree_); +} + +template +int HDMapImpl::SearchObjects(const Vec2d& center, const double radius, + const KDTree& kdtree, + std::vector* const results) { + if (results == nullptr) { + return -1; + } + auto objects = kdtree.GetObjects(center, radius); + std::unordered_set result_ids; + for (const auto* object_ptr : objects) { + result_ids.insert(object_ptr->object()->id().id()); + } + results->assign(result_ids.begin(), result_ids.end()); + return 0; +} + +void HDMapImpl::Clear() { + map_.Clear(); + lane_table_.clear(); + junction_table_.clear(); + signal_table_.clear(); + crosswalk_table_.clear(); + stop_sign_table_.clear(); + yield_sign_table_.clear(); + overlap_table_.clear(); + lane_segment_boxes_.clear(); + lane_segment_kdtree_.reset(nullptr); + junction_polygon_boxes_.clear(); + junction_polygon_kdtree_.reset(nullptr); + crosswalk_polygon_boxes_.clear(); + crosswalk_polygon_kdtree_.reset(nullptr); + signal_segment_boxes_.clear(); + signal_segment_kdtree_.reset(nullptr); + stop_sign_segment_boxes_.clear(); + stop_sign_segment_kdtree_.reset(nullptr); + yield_sign_segment_boxes_.clear(); + yield_sign_segment_kdtree_.reset(nullptr); +} + +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/hdmap_impl.h b/modules/map/hdmap/hdmap_impl.h new file mode 100644 index 00000000000..839a31a9f23 --- /dev/null +++ b/modules/map/hdmap/hdmap_impl.h @@ -0,0 +1,290 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#ifndef MODULES_MAP_HDMAP_HDMAP_IMPL_H_ +#define MODULES_MAP_HDMAP_HDMAP_IMPL_H_ + +#include +#include +#include +#include + +#include "modules/common/math/aabox2d.h" +#include "modules/common/math/aaboxkdtree2d.h" +#include "modules/common/math/line_segment2d.h" +#include "modules/common/math/polygon2d.h" +#include "modules/common/math/vec2d.h" +#include "modules/map/hdmap/hdmap_common.h" +#include "modules/map/proto/map.pb.h" +#include "modules/map/proto/map_crosswalk.pb.h" +#include "modules/map/proto/map_geometry.pb.h" +#include "modules/map/proto/map_junction.pb.h" +#include "modules/map/proto/map_lane.pb.h" +#include "modules/map/proto/map_overlap.pb.h" +#include "modules/map/proto/map_signal.pb.h" +#include "modules/map/proto/map_stop_sign.pb.h" +#include "modules/map/proto/map_yield_sign.pb.h" + +/** + * @namespace apollo::hdmap + * @brief apollo::hdmap + */ +namespace apollo { +namespace hdmap { + +/** + * @class HDMapImpl + * + * @brief High-precision map loader implement. + */ +class HDMapImpl { + public: + using LaneTable = std::unordered_map>; + using JunctionTable = + std::unordered_map>; + using SignalTable = + std::unordered_map>; + using CrosswalkTable = + std::unordered_map>; + using StopSignTable = + std::unordered_map>; + using YieldSignTable = + std::unordered_map>; + using OverlapTable = + std::unordered_map>; + using RoadTable = std::unordered_map>; + + public: + /** + * @brief load map from local file + * @param map_filename path of map data file + * @return 0:success, otherwise failed + */ + int LoadMapFromFile(const std::string& map_filename); + + LaneInfoConstPtr GetLaneById(const Id& id) const; + JunctionInfoConstPtr GetJunctionById(const Id& id) const; + SignalInfoConstPtr GetSignalById(const Id& id) const; + CrosswalkInfoConstPtr GetCrosswalkById(const Id& id) const; + StopSignInfoConstPtr GetStopSignById(const Id& id) const; + YieldSignInfoConstPtr GetYieldSignById(const Id& id) const; + OverlapInfoConstPtr GetOverlapById(const Id& id) const; + RoadInfoConstPtr GetRoadById(const Id& id) const; + + /** + * @brief get all lanes in certain range + * @param point the central point of the range + * @param distance the search radius + * @param lanes store all lanes in target range + * @return 0:success, otherwise failed + */ + int GetLanes(const apollo::common::PointENU& point, double distance, + std::vector* lanes) const; + /** + * @brief get all junctions in certain range + * @param point the central point of the range + * @param distance the search radius + * @param junctions store all junctions in target range + * @return 0:success, otherwise failed + */ + int GetJunctions(const apollo::common::PointENU& point, double distance, + std::vector* junctions) const; + /** + * @brief get all crosswalks in certain range + * @param point the central point of the range + * @param distance the search radius + * @param crosswalks store all crosswalks in target range + * @return 0:success, otherwise failed + */ + int GetCrosswalks(const apollo::common::PointENU& point, double distance, + std::vector* crosswalks) const; + /** + * @brief get all signals in certain range + * @param point the central point of the range + * @param distance the search radius + * @param signals store all signals in target range + * @return 0:success, otherwise failed + */ + int GetSignals(const apollo::common::PointENU& point, double distance, + std::vector* signals) const; + /** + * @brief get all stop signs in certain range + * @param point the central point of the range + * @param distance the search radius + * @param stop signs store all stop signs in target range + * @return 0:success, otherwise failed + */ + int GetStopSigns(const apollo::common::PointENU& point, double distance, + std::vector* stop_signs) const; + /** + * @brief get all yield signs in certain range + * @param point the central point of the range + * @param distance the search radius + * @param yield signs store all yield signs in target range + * @return 0:success, otherwise failed + */ + int GetYieldSigns(const apollo::common::PointENU& point, double distance, + std::vector* yield_signs) const; + /** + * @brief get all roads in certain range + * @param point the central point of the range + * @param distance the search radius + * @param roads store all roads in target range + * @return 0:success, otherwise failed + */ + int GetRoads(const apollo::common::PointENU& point, double distance, + std::vector* roads) const; + + /** + * @brief get nearest lane from target point, + * @param point the target point + * @param nearest_lane the nearest lane that match search conditions + * @param nearest_s the offset from lane start point along lane center line + * @param nearest_l the lateral offset from lane center line + * @return 0:success, otherwise, failed. + */ + int GetNearestLane(const apollo::common::PointENU& point, + LaneInfoConstPtr* nearest_lane, double* nearest_s, + double* nearest_l) const; + /** + * @brief get the nearest lane within a certain range by pose + * @param point the target position + * @param distance the search radius + * @param central_heading the base heading + * @param max_heading_difference the heading range + * @param nearest_lane the nearest lane that match search conditions + * @param nearest_s the offset from lane start point along lane center line + * @param nearest_l the lateral offset from lane center line + * @return 0:success, otherwise, failed. + */ + int GetNearestLaneWithHeading(const apollo::common::PointENU& point, + const double distance, + const double central_heading, + const double max_heading_difference, + LaneInfoConstPtr* nearest_lane, + double* nearest_s, double* nearest_l) const; + /** + * @brief get all lanes within a certain range by pose + * @param point the target position + * @param distance the search radius + * @param central_heading the base heading + * @param max_heading_difference the heading range + * @param nearest_lane all lanes that match search conditions + * @return 0:success, otherwise, failed. + */ + int GetLanesWithHeading(const apollo::common::PointENU& point, + const double distance, const double central_heading, + const double max_heading_difference, + std::vector* lanes) const; + /** + * @brief get all road and junctions boundaries within certain range + * @param point the target position + * @param radius the search radius + * @param road_boundaries the roads' boundaries + * @param junctions the junctions' boundaries + * @return 0:success, otherwise failed + */ + int GetRoadBoundaries(const apollo::common::PointENU& point, double radius, + std::vector* road_boundaries, + std::vector* junctions) const; + + private: + int GetLanes(const apollo::common::math::Vec2d& point, double distance, + std::vector* lanes) const; + int GetJunctions(const apollo::common::math::Vec2d& point, double distance, + std::vector* junctions) const; + int GetCrosswalks(const apollo::common::math::Vec2d& point, double distance, + std::vector* crosswalks) const; + int GetSignals(const apollo::common::math::Vec2d& point, double distance, + std::vector* signals) const; + int GetStopSigns(const apollo::common::math::Vec2d& point, double distance, + std::vector* stop_signs) const; + int GetYieldSigns(const apollo::common::math::Vec2d& point, double distance, + std::vector* yield_signs) const; + int GetNearestLane(const apollo::common::math::Vec2d& point, + LaneInfoConstPtr* nearest_lane, double* nearest_s, + double* nearest_l) const; + int GetNearestLaneWithHeading(const apollo::common::math::Vec2d& point, + const double distance, + const double central_heading, + const double max_heading_difference, + LaneInfoConstPtr* nearest_lane, + double* nearest_s, double* nearest_l) const; + int GetLanesWithHeading(const apollo::common::math::Vec2d& point, + const double distance, const double central_heading, + const double max_heading_difference, + std::vector* lanes) const; + int GetRoads(const apollo::common::math::Vec2d& point, double distance, + std::vector* roads) const; + + template + static void BuildSegmentKDTree( + const Table& table, const apollo::common::math::AABoxKDTreeParams& params, + BoxTable* const box_table, std::unique_ptr* const kdtree); + + template + static void BuildPolygonKDTree( + const Table& table, const apollo::common::math::AABoxKDTreeParams& params, + BoxTable* const box_table, std::unique_ptr* const kdtree); + + void BuildLaneSegmentKDTree(); + void BuildJunctionPolygonKDTree(); + void BuildCrosswalkPolygonKDTree(); + void BuildSignalSegmentKDTree(); + void BuildStopSignSegmentKDTree(); + void BuildYieldSignSegmentKDTree(); + + template + static int SearchObjects(const apollo::common::math::Vec2d& center, + const double radius, const KDTree& kdtree, + std::vector* const results); + + void Clear(); + + private: + Map map_; + + LaneTable lane_table_; + JunctionTable junction_table_; + CrosswalkTable crosswalk_table_; + SignalTable signal_table_; + StopSignTable stop_sign_table_; + YieldSignTable yield_sign_table_; + OverlapTable overlap_table_; + RoadTable road_table_; + + std::vector lane_segment_boxes_; + std::unique_ptr lane_segment_kdtree_; + + std::vector junction_polygon_boxes_; + std::unique_ptr junction_polygon_kdtree_; + + std::vector crosswalk_polygon_boxes_; + std::unique_ptr crosswalk_polygon_kdtree_; + + std::vector signal_segment_boxes_; + std::unique_ptr signal_segment_kdtree_; + + std::vector stop_sign_segment_boxes_; + std::unique_ptr stop_sign_segment_kdtree_; + + std::vector yield_sign_segment_boxes_; + std::unique_ptr yield_sign_segment_kdtree_; +}; + +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_HDMAP_IMPL_H_ diff --git a/modules/map/hdmap/hdmap_impl_test.cc b/modules/map/hdmap/hdmap_impl_test.cc new file mode 100644 index 00000000000..c937f78ca3d --- /dev/null +++ b/modules/map/hdmap/hdmap_impl_test.cc @@ -0,0 +1,313 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#include +#include +#include + +#include "gtest/gtest.h" +#include "modules/map/hdmap/hdmap_impl.h" + +namespace { + +constexpr char kMapFilename[] = "modules/map/hdmap/test-data/base_map.bin"; + +} // namespace + +namespace apollo { +namespace hdmap { + +class HDMapImplTestSuite : public ::testing::Test { + public: + HDMapImplTestSuite() { + EXPECT_EQ(0, hdmap_impl_.LoadMapFromFile(kMapFilename)); + } + + public: + HDMapImpl hdmap_impl_; +}; + +TEST_F(HDMapImplTestSuite, GetLaneById) { + Id lane_id; + lane_id.set_id("1"); + EXPECT_TRUE(nullptr == hdmap_impl_.GetLaneById(lane_id)); + lane_id.set_id("1272_1_-1"); + LaneInfoConstPtr lane_ptr = hdmap_impl_.GetLaneById(lane_id); + EXPECT_TRUE(nullptr != lane_ptr); + EXPECT_STREQ(lane_id.id().c_str(), lane_ptr->id().id().c_str()); +} + +TEST_F(HDMapImplTestSuite, GetJunctionById) { + Id junction_id; + junction_id.set_id("1"); + EXPECT_TRUE(nullptr == hdmap_impl_.GetJunctionById(junction_id)); + junction_id.set_id("1183"); + JunctionInfoConstPtr junction_ptr = hdmap_impl_.GetJunctionById(junction_id); + EXPECT_TRUE(nullptr != junction_ptr); + EXPECT_STREQ(junction_id.id().c_str(), junction_ptr->id().id().c_str()); +} + +TEST_F(HDMapImplTestSuite, GetSignalById) { + Id signal_id; + signal_id.set_id("abc"); + EXPECT_TRUE(nullptr == hdmap_impl_.GetSignalById(signal_id)); + signal_id.set_id("1278"); + SignalInfoConstPtr signal_ptr = hdmap_impl_.GetSignalById(signal_id); + EXPECT_TRUE(nullptr != signal_ptr); + EXPECT_STREQ(signal_id.id().c_str(), signal_ptr->id().id().c_str()); +} + +TEST_F(HDMapImplTestSuite, GetCrosswalkById) { + Id crosswalk_id; + crosswalk_id.set_id("1"); + EXPECT_TRUE(nullptr == hdmap_impl_.GetCrosswalkById(crosswalk_id)); + crosswalk_id.set_id("1277"); + CrosswalkInfoConstPtr crosswalk_ptr = + hdmap_impl_.GetCrosswalkById(crosswalk_id); + EXPECT_TRUE(nullptr != crosswalk_ptr); + EXPECT_STREQ(crosswalk_id.id().c_str(), crosswalk_ptr->id().id().c_str()); +} + +TEST_F(HDMapImplTestSuite, GetStopSignById) { + Id stop_sign_id; + stop_sign_id.set_id("1"); + EXPECT_TRUE(nullptr == hdmap_impl_.GetStopSignById(stop_sign_id)); + stop_sign_id.set_id("1276"); + StopSignInfoConstPtr stop_sign_ptr = + hdmap_impl_.GetStopSignById(stop_sign_id); + EXPECT_TRUE(nullptr != stop_sign_ptr); + EXPECT_STREQ(stop_sign_id.id().c_str(), stop_sign_ptr->id().id().c_str()); +} + +TEST_F(HDMapImplTestSuite, GetYieldSignById) { + Id yield_sign_id; + yield_sign_id.set_id("1"); + EXPECT_TRUE(nullptr == hdmap_impl_.GetYieldSignById(yield_sign_id)); + yield_sign_id.set_id("1275"); + YieldSignInfoConstPtr yield_sign_ptr = + hdmap_impl_.GetYieldSignById(yield_sign_id); + EXPECT_TRUE(nullptr != yield_sign_ptr); + EXPECT_STREQ(yield_sign_id.id().c_str(), yield_sign_ptr->id().id().c_str()); +} + +TEST_F(HDMapImplTestSuite, GetOverlapById) { + Id overlap_id; + overlap_id.set_id("1"); + EXPECT_TRUE(nullptr == hdmap_impl_.GetOverlapById(overlap_id)); + overlap_id.set_id("overlap_20"); + OverlapInfoConstPtr overlap_ptr = hdmap_impl_.GetOverlapById(overlap_id); + EXPECT_TRUE(nullptr != overlap_ptr); + EXPECT_STREQ(overlap_id.id().c_str(), overlap_ptr->id().id().c_str()); +} + +TEST_F(HDMapImplTestSuite, GetRoadById) { + Id road_id; + road_id.set_id("1"); + EXPECT_TRUE(nullptr == hdmap_impl_.GetRoadById(road_id)); + road_id.set_id("1272"); + RoadInfoConstPtr road_ptr = hdmap_impl_.GetRoadById(road_id); + EXPECT_TRUE(nullptr != road_ptr); + EXPECT_STREQ(road_id.id().c_str(), road_ptr->id().id().c_str()); +} + +TEST_F(HDMapImplTestSuite, GetLanes) { + std::vector lanes; + apollo::common::PointENU point; + point.set_x(586424.09); + point.set_y(4140727.02); + point.set_z(0.0); + EXPECT_EQ(0, hdmap_impl_.GetLanes(point, 1e-6, &lanes)); + EXPECT_EQ(0, lanes.size()); + EXPECT_EQ(0, hdmap_impl_.GetLanes(point, 5, &lanes)); + EXPECT_EQ(1, lanes.size()); + std::vector ids; + for (const auto& lane : lanes) { + ids.push_back(lane->id().id()); + } + + EXPECT_EQ("773_1_-2", ids[0]); +} + +TEST_F(HDMapImplTestSuite, GetNearestLaneWithHeading) { + apollo::common::PointENU point; + point.set_x(586424.09); + point.set_y(4140727.02); + point.set_z(0.0); + + LaneInfoConstPtr nearest_lane; + double nearest_s = 0.0; + double nearest_l = 0.0; + EXPECT_EQ(-1, + hdmap_impl_.GetNearestLaneWithHeading( + point, 1e-6, 0.86, 0.2, &nearest_lane, &nearest_s, &nearest_l)); + + EXPECT_EQ(0, + hdmap_impl_.GetNearestLaneWithHeading( + point, 5, -2.35, 1.0, &nearest_lane, &nearest_s, &nearest_l)); + EXPECT_EQ("773_1_-2", nearest_lane->id().id()); + EXPECT_NEAR(nearest_l, -3.257, 1E-3); + EXPECT_NEAR(nearest_s, 25.891, 1E-3); +} + +TEST_F(HDMapImplTestSuite, GetLanesWithHeading) { + apollo::common::PointENU point; + point.set_x(586424.09); + point.set_y(4140727.02); + point.set_z(0.0); + + std::vector lanes; + EXPECT_EQ(-1, + hdmap_impl_.GetLanesWithHeading(point, 1e-6, 0.86, 0.2, &lanes)); + + EXPECT_EQ(0, hdmap_impl_.GetLanesWithHeading(point, 5, -2.35, 1.0, &lanes)); + EXPECT_EQ(1, lanes.size()); + EXPECT_EQ("773_1_-2", lanes[0]->id().id()); +} + +TEST_F(HDMapImplTestSuite, GetJunctions) { + std::vector junctions; + apollo::common::PointENU point; + point.set_x(586441.61); + point.set_y(4140746.48); + point.set_z(0.0); + EXPECT_EQ(0, hdmap_impl_.GetJunctions(point, 1, &junctions)); + EXPECT_EQ(0, junctions.size()); + EXPECT_EQ(0, hdmap_impl_.GetJunctions(point, 3, &junctions)); + EXPECT_EQ(1, junctions.size()); + EXPECT_EQ("1183", junctions[0]->id().id()); +} + +TEST_F(HDMapImplTestSuite, GetCrosswalks) { + std::vector crosswalks; + apollo::common::PointENU point; + point.set_x(586449.32); + point.set_y(4140789.59); + point.set_z(0.0); + EXPECT_EQ(0, hdmap_impl_.GetCrosswalks(point, 1, &crosswalks)); + EXPECT_EQ(0, crosswalks.size()); + EXPECT_EQ(0, hdmap_impl_.GetCrosswalks(point, 3, &crosswalks)); + EXPECT_EQ(1, crosswalks.size()); + EXPECT_EQ("1277", crosswalks[0]->id().id()); +} + +TEST_F(HDMapImplTestSuite, GetSignals) { + std::vector signals; + + apollo::common::PointENU point; + point.set_x(586440.37); + point.set_y(4140738.64); + point.set_z(0.0); + EXPECT_EQ(0, hdmap_impl_.GetSignals(point, 7.0, &signals)); + EXPECT_EQ(0, signals.size()); + EXPECT_EQ(0, hdmap_impl_.GetSignals(point, 12, &signals)); + EXPECT_EQ(1, signals.size()); + EXPECT_EQ("1278", signals[0]->id().id()); +} + +TEST_F(HDMapImplTestSuite, GetStopSigns) { + std::vector stop_signs; + + apollo::common::PointENU point; + point.set_x(586418.82); + point.set_y(4140779.06); + point.set_z(0.0); + EXPECT_EQ(0, hdmap_impl_.GetStopSigns(point, 100.0, &stop_signs)); + EXPECT_EQ(1, stop_signs.size()); + EXPECT_EQ("1276", stop_signs[0]->id().id()); +} + +TEST_F(HDMapImplTestSuite, GetYieldSigns) { + std::vector yield_signs; + + apollo::common::PointENU point; + point.set_x(586376.08); + point.set_y(4140785.77); + point.set_z(0.0); + EXPECT_EQ(0, hdmap_impl_.GetYieldSigns(point, 100.0, &yield_signs)); + EXPECT_EQ(1, yield_signs.size()); + EXPECT_EQ("1275", yield_signs[0]->id().id()); +} + +TEST_F(HDMapImplTestSuite, GetRoads) { + std::vector roads; + + apollo::common::PointENU point; + point.set_x(586427.18); + point.set_y(4140741.36); + point.set_z(0.0); + EXPECT_EQ(0, hdmap_impl_.GetRoads(point, 4.0, &roads)); + EXPECT_EQ(1, roads.size()); + + EXPECT_EQ(roads[0]->id().id(), "773"); + EXPECT_TRUE(!roads[0]->has_junction_id()); + + EXPECT_EQ(1, roads[0]->sections().size()); + const apollo::hdmap::RoadSection& section = roads[0]->sections()[0]; + EXPECT_EQ(section.id().id(), "1"); + EXPECT_EQ(section.lane_id_size(), 2); + + std::set lane_ids; + lane_ids.insert("773_1_-1"); + lane_ids.insert("773_1_-2"); + for (int i = 0; i < section.lane_id_size(); ++i) { + const apollo::hdmap::Id& lane_id = section.lane_id(i); + EXPECT_GT(lane_ids.count(lane_id.id()), 0); + } +} + +TEST_F(HDMapImplTestSuite, GetNearestLane) { + LaneInfoConstPtr lane; + double s = 0.0; + double l = 0.0; + + apollo::common::PointENU point; + point.set_x(586424.09); + point.set_y(4140727.02); + point.set_z(0.0); + EXPECT_EQ(0, hdmap_impl_.GetNearestLane(point, &lane, &s, &l)); + EXPECT_EQ("773_1_-2", lane->id().id()); + EXPECT_NEAR(s, 25.891, 1e-3); + EXPECT_NEAR(l, -3.257, 1e-3); +} + +TEST_F(HDMapImplTestSuite, GetRoadBoundaries) { + apollo::common::PointENU point; + point.set_x(586427.58); + point.set_y(4140749.35); + point.set_z(0.0); + std::vector road_boundaries; + std::vector junctions; + EXPECT_EQ(-1, hdmap_impl_.GetRoadBoundaries(point, 3.0, &road_boundaries, + &junctions)); + + point.set_x(586434.75); + point.set_y(4140746.94); + point.set_z(0.0); + EXPECT_EQ(0, hdmap_impl_.GetRoadBoundaries(point, 2.0, &road_boundaries, + &junctions)); + EXPECT_EQ(1, road_boundaries.size()); + EXPECT_EQ(0, junctions.size()); + + point.set_x(586434.75); + point.set_y(4140746.94); + point.set_z(0.0); + EXPECT_EQ(0, hdmap_impl_.GetRoadBoundaries(point, 4.5, &road_boundaries, + &junctions)); + EXPECT_EQ(1, road_boundaries.size()); + EXPECT_EQ(1, junctions.size()); +} + +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/hdmap_util.cc b/modules/map/hdmap/hdmap_util.cc new file mode 100644 index 00000000000..45984f79423 --- /dev/null +++ b/modules/map/hdmap/hdmap_util.cc @@ -0,0 +1,91 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ +#include "modules/map/hdmap/hdmap_util.h" + +#include "modules/common/util/file.h" +#include "modules/common/util/string_tokenizer.h" + +namespace apollo { +namespace hdmap { + +namespace { + +// Find the first existing file from a list of candidates: "file_a|file_b|...". +std::string FindFirstExist(const std::string& dir, const std::string& files) { + const auto candidates = + apollo::common::util::StringTokenizer::Split(files, "|"); + for (const auto& filename : candidates) { + const std::string file_path = + apollo::common::util::StrCat(FLAGS_map_dir, "/", filename); + if (apollo::common::util::PathExists(file_path)) { + return file_path; + } + } + AERROR << "No existing file found in " << dir << "/" << files << ". " + "Fallback to first candidate as default result."; + CHECK(!candidates.empty()) << "Please specify at least one map."; + return apollo::common::util::StrCat(FLAGS_map_dir, "/", candidates[0]); +} + +} // namespace + +std::string BaseMapFile() { + return FindFirstExist(FLAGS_map_dir, FLAGS_base_map_filename); +} + +std::string SimMapFile() { + return FindFirstExist(FLAGS_map_dir, FLAGS_sim_map_filename); +} + +std::string RoutingMapFile() { + return FindFirstExist(FLAGS_map_dir, FLAGS_routing_map_filename); +} + +std::unique_ptr CreateMap(const std::string& map_file_path) { + std::unique_ptr hdmap(new HDMap()); + if (hdmap->LoadMapFromFile(map_file_path) != 0) { + AERROR << "Failed to load HDMap " << map_file_path; + hdmap.reset(nullptr); + } else { + AINFO << "Load HDMap succ.: " << map_file_path; + } + return hdmap; +} + +std::unique_ptr HDMapUtil::base_map_ = nullptr; +std::mutex HDMapUtil::base_map_mutex_; + +const HDMap* HDMapUtil::BaseMapPtr() { + if (base_map_ == nullptr) { + std::lock_guard lock(base_map_mutex_); + if (base_map_ == nullptr) { // Double check. + base_map_ = CreateMap(BaseMapFile()); + } + } + return base_map_.get(); +} + +const HDMap& HDMapUtil::BaseMap() { + return *CHECK_NOTNULL(BaseMapPtr()); +} + +bool HDMapUtil::ReloadBaseMap() { + std::lock_guard lock(base_map_mutex_); + base_map_ = CreateMap(BaseMapFile()); + return base_map_ != nullptr; +} + +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/hdmap/hdmap_util.h b/modules/map/hdmap/hdmap_util.h new file mode 100644 index 00000000000..0273d8ee58d --- /dev/null +++ b/modules/map/hdmap/hdmap_util.h @@ -0,0 +1,97 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#ifndef MODULES_MAP_HDMAP_HDMAP_UTIL_H_ +#define MODULES_MAP_HDMAP_HDMAP_UTIL_H_ + +#include +#include +#include + +#include "modules/common/configs/config_gflags.h" +#include "modules/common/util/string_util.h" +#include "modules/map/hdmap/hdmap.h" +#include "modules/map/proto/map_id.pb.h" + +/** + * @namespace apollo::hdmap + * @brief apollo::hdmap + */ +namespace apollo { +namespace hdmap { + +/** + * @brief get base map file path from flags. + * @return base map path + */ +std::string BaseMapFile(); + +/** + * @brief get simulation map file path from flags. + * @return simulation map path + */ +std::string SimMapFile(); + +/** + * @brief get routing map file path from flags. + * @return routing map path + */ +std::string RoutingMapFile(); + +/** + * @brief get end way point file path from flags. + * @return end way point file path + */ +inline std::string EndWayPointFile() { + return apollo::common::util::StrCat(FLAGS_map_dir, "/", + FLAGS_end_way_point_filename); +} + +/** + * @brief create a Map ID given a string. + * @param id a string id + * @return a Map ID instance + */ +inline apollo::hdmap::Id MakeMapId(const std::string& id) { + apollo::hdmap::Id map_id; + map_id.set_id(id); + return map_id; +} + +std::unique_ptr CreateMap(const std::string& map_file_path); + +class HDMapUtil { + public: + // Get default base map from the file specified by global flags. + // Return nullptr if failed to load. + static const HDMap* BaseMapPtr(); + // Similar to BaseMap(), but garantee to return a valid HDMap, or else raise + // fatal error. + static const HDMap& BaseMap(); + + // Reload the base map from the file specified by global flags. + static bool ReloadBaseMap(); + + private: + HDMapUtil() = delete; + + static std::unique_ptr base_map_; + static std::mutex base_map_mutex_; +}; + +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_HDMAP_HDMAP_UTIL_H_ diff --git a/modules/map/hdmap/test-data/base_map.bin b/modules/map/hdmap/test-data/base_map.bin new file mode 100644 index 00000000000..95d06a74bf6 Binary files /dev/null and b/modules/map/hdmap/test-data/base_map.bin differ diff --git a/modules/map/pnc_map/BUILD b/modules/map/pnc_map/BUILD new file mode 100644 index 00000000000..003325fe702 --- /dev/null +++ b/modules/map/pnc_map/BUILD @@ -0,0 +1,50 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "path", + srcs = [ + "path.cc", + ], + hdrs = [ + "path.h", + ], + deps = [ + "//modules/common/math", + "//modules/map/hdmap", + "//modules/map/proto:map_proto", + "//modules/routing/proto:routing_proto", + ], +) + +cc_library( + name = "pnc_map", + srcs = [ + "pnc_map.cc", + ], + hdrs = [ + "pnc_map.h", + ], + deps = [ + "//modules/map/hdmap", + "//modules/map/pnc_map:path", + ], +) + +cc_test( + name = "pnc_path_test", + size = "small", + srcs = [ + "path_test.cc", + ], + deps = [ + ":path", + "//modules/common:log", + "//modules/common/time", + "//modules/common/util", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/map/pnc_map/path.cc b/modules/map/pnc_map/path.cc new file mode 100644 index 00000000000..4a1a218d094 --- /dev/null +++ b/modules/map/pnc_map/path.cc @@ -0,0 +1,900 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/map/pnc_map/path.h" + +#include +#include +#include +#include + +#include "modules/common/math/line_segment2d.h" +#include "modules/common/math/math_utils.h" +#include "modules/common/math/polygon2d.h" +#include "modules/common/math/vec2d.h" +#include "modules/common/util/string_util.h" + +namespace apollo { +namespace hdmap { + +using common::math::LineSegment2d; +using common::math::Polygon2d; +using common::math::Vec2d; +using common::math::Box2d; +using common::math::kMathEpsilon; +using common::math::Sqr; +using std::placeholders::_1; + +namespace { + +const double kSampleDistance = 0.25; + +bool find_lane_segment(const MapPathPoint& p1, const MapPathPoint& p2, + LaneSegment* const lane_segment) { + for (const auto& wp1 : p1.lane_waypoints()) { + for (const auto& wp2 : p2.lane_waypoints()) { + if (wp1.lane->id().id() == wp2.lane->id().id() && wp1.s < wp2.s) { + *lane_segment = LaneSegment(wp1.lane, wp1.s, wp2.s); + return true; + } + } + } + return false; +} + +} // namespace + +std::string LaneWaypoint::DebugString() const { + if (lane == nullptr) { + return "(lane is null)"; + } + return common::util::StrCat("id = ", lane->id().id(), " s = ", s); +} + +std::string LaneSegment::DebugString() const { + if (lane == nullptr) { + return "(lane is null)"; + } + return common::util::StrCat("id = ", lane->id().id(), + " " + "start_s = ", + start_s, + " " + "end_s = ", + end_s); +} + +std::string MapPathPoint::DebugString() const { + return common::util::StrCat( + "x = ", x_, " y = ", y_, " heading = ", heading_, + " lwp = " + "{(", + common::util::PrintDebugStringIter(lane_waypoints_, "), ("), ")}"); +} + +std::string Path::DebugString() const { + return common::util::StrCat( + "num_points = ", num_points_, + " points = " + "{(", + common::util::PrintDebugStringIter(path_points_, "), ("), + ")} " + "numlane_segments_ = ", + lane_segments_.size(), + " lane_segments = " + "{(", + common::util::PrintDebugStringIter(lane_segments_, "), ("), ")}"); +} + +std::string PathOverlap::DebugString() const { + return common::util::StrCat(object_id, " ", start_s, " ", end_s); +} + +Path::Path(std::vector path_points) + : path_points_(std::move(path_points)) { + Init(); +} + +Path::Path(std::vector path_points, + std::vector lane_segments) + : path_points_(std::move(path_points)), + lane_segments_(std::move(lane_segments)) { + Init(); +} + +Path::Path(std::vector path_points, + std::vector lane_segments, + const double max_approximation_error) + : path_points_(std::move(path_points)), + lane_segments_(std::move(lane_segments)) { + Init(); + if (max_approximation_error > 0.0) { + use_path_approximation_ = true; + approximation_ = PathApproximation(*this, max_approximation_error); + } +} + +void Path::Init() { + InitPoints(); + InitLaneSegments(); + InitPointIndex(); + InitWidth(); + // InitOverlaps(); +} + +void Path::InitPoints() { + num_points_ = static_cast(path_points_.size()); + CHECK_GE(num_points_, 2); + + accumulated_s_.clear(); + accumulated_s_.reserve(num_points_); + segments_.clear(); + segments_.reserve(num_points_); + unit_directions_.clear(); + unit_directions_.reserve(num_points_); + double s = 0.0; + for (int i = 0; i < num_points_; ++i) { + accumulated_s_.push_back(s); + Vec2d heading; + if (i + 1 >= num_points_) { + heading = path_points_[i] - path_points_[i - 1]; + } else { + segments_.emplace_back(path_points_[i], path_points_[i + 1]); + heading = path_points_[i + 1] - path_points_[i]; + // TODO(lianglia_apollo): + // use heading.length when all adjacent lanes are guarantee to be + // connected. + s += heading.Length(); + } + heading.Normalize(); + unit_directions_.push_back(heading); + } + length_ = s; + num_sample_points_ = static_cast(length_ / kSampleDistance) + 1; + num_segments_ = num_points_ - 1; + + CHECK_EQ(accumulated_s_.size(), num_points_); + CHECK_EQ(unit_directions_.size(), num_points_); + CHECK_EQ(segments_.size(), num_segments_); +} + +void Path::InitLaneSegments() { + if (lane_segments_.empty()) { + lane_segments_.reserve(num_points_); + for (int i = 0; i + 1 < num_points_; ++i) { + LaneSegment lane_segment; + if (find_lane_segment(path_points_[i], path_points_[i + 1], + &lane_segment)) { + lane_segments_.push_back(lane_segment); + } + } + } + + lane_segments_to_next_point_.clear(); + lane_segments_to_next_point_.reserve(num_points_); + for (int i = 0; i + 1 < num_points_; ++i) { + LaneSegment lane_segment; + if (find_lane_segment(path_points_[i], path_points_[i + 1], + &lane_segment)) { + lane_segments_to_next_point_.push_back(lane_segment); + } else { + lane_segments_to_next_point_.push_back(LaneSegment()); + } + } + CHECK_EQ(lane_segments_to_next_point_.size(), num_segments_); +} + +void Path::InitWidth() { + left_width_.clear(); + left_width_.reserve(num_sample_points_); + right_width_.clear(); + right_width_.reserve(num_sample_points_); + + double s = 0; + for (int i = 0; i < num_sample_points_; ++i) { + const MapPathPoint point = GetSmoothPoint(s); + if (point.lane_waypoints().empty()) { + left_width_.push_back(0.0); + right_width_.push_back(0.0); + AERROR << "path point:" << point.DebugString() << " has invalid width."; + } else { + const LaneWaypoint waypoint = point.lane_waypoints()[0]; + CHECK_NOTNULL(waypoint.lane); + double left_width = 0.0; + double right_width = 0.0; + waypoint.lane->GetWidth(waypoint.s, &left_width, &right_width); + left_width_.push_back(left_width); + right_width_.push_back(right_width); + } + s += kSampleDistance; + } + CHECK_EQ(left_width_.size(), num_sample_points_); + CHECK_EQ(right_width_.size(), num_sample_points_); +} + +void Path::InitPointIndex() { + last_point_index_.clear(); + last_point_index_.reserve(num_sample_points_); + double s = 0.0; + int last_index = 0; + for (int i = 0; i < num_sample_points_; ++i) { + while (last_index + 1 < num_points_ && + accumulated_s_[last_index + 1] <= s) { + ++last_index; + } + last_point_index_.push_back(last_index); + s += kSampleDistance; + } + CHECK_EQ(last_point_index_.size(), num_sample_points_); +} + +void Path::GetAllOverlaps(GetOverlapFromLaneFunc get_overlaps_from_lane, + std::vector* const overlaps) const { + if (overlaps == nullptr) { + return; + } + overlaps->clear(); + std::unordered_map>> + overlaps_by_id; + double s = 0.0; + for (const auto& lane_segment : lane_segments_) { + if (lane_segment.lane == nullptr) { + continue; + } + for (const auto& overlap : get_overlaps_from_lane(*(lane_segment.lane))) { + const auto& overlap_info = + overlap->get_object_overlap_info(lane_segment.lane->id()); + if (overlap_info == nullptr) { + continue; + } + + const auto& lane_overlap_info = overlap_info->lane_overlap_info(); + if (lane_overlap_info.start_s() < lane_segment.end_s && + lane_overlap_info.end_s() > lane_segment.start_s) { + const double ref_s = s - lane_segment.start_s; + const double adjusted_start_s = + std::max(lane_overlap_info.start_s(), lane_segment.start_s) + ref_s; + const double adjusted_end_s = + std::min(lane_overlap_info.end_s(), lane_segment.end_s) + ref_s; + for (const auto& object : overlap->overlap().object()) { + if (object.id().id() != lane_segment.lane->id().id()) { + overlaps_by_id[object.id().id()].emplace_back(adjusted_start_s, + adjusted_end_s); + } + } + } + } + s += lane_segment.end_s - lane_segment.start_s; + } + for (auto& overlaps_one_object : overlaps_by_id) { + const std::string& object_id = overlaps_one_object.first; + auto& segments = overlaps_one_object.second; + std::sort(segments.begin(), segments.end()); + + const double kMinOverlapDistanceGap = 1.5; // in meters. + for (const auto& segment : segments) { + if (!overlaps->empty() && overlaps->back().object_id == object_id && + segment.first - overlaps->back().end_s <= kMinOverlapDistanceGap) { + overlaps->back().end_s = + std::max(overlaps->back().end_s, segment.second); + } else { + overlaps->emplace_back(object_id, segment.first, segment.second); + } + } + } + std::sort(overlaps->begin(), overlaps->end(), + [](const PathOverlap& overlap1, const PathOverlap& overlap2) { + return overlap1.start_s < overlap2.start_s; + }); +} + +void Path::InitOverlaps() { + GetAllOverlaps(std::bind(&LaneInfo::cross_lanes, _1), &lane_overlaps_); + GetAllOverlaps(std::bind(&LaneInfo::signals, _1), &signal_overlaps_); + GetAllOverlaps(std::bind(&LaneInfo::yield_signs, _1), &yield_sign_overlaps_); + GetAllOverlaps(std::bind(&LaneInfo::stop_signs, _1), &stop_sign_overlaps_); + GetAllOverlaps(std::bind(&LaneInfo::crosswalks, _1), &crosswalk_overlaps_); + GetAllOverlaps(std::bind(&LaneInfo::junctions, _1), &junction_overlaps_); + + // TODO(all): add support for parking and speed bumps. + /* + GetAllOverlaps(std::bind(&LaneInfo::parking_spaces, _1), + &parking_space_overlaps_); + GetAllOverlaps(std::bind(&LaneInfo::speed_bumps, _1), + &speed_bump_overlaps_); + */ +} + +MapPathPoint Path::GetSmoothPoint(const InterpolatedIndex& index) const { + CHECK_GE(index.id, 0); + CHECK_LT(index.id, num_points_); + + const MapPathPoint& ref_point = path_points_[index.id]; + if (std::abs(index.offset) > kMathEpsilon) { + const Vec2d delta = unit_directions_[index.id] * index.offset; + MapPathPoint point({ref_point.x() + delta.x(), ref_point.y() + delta.y()}, + ref_point.heading()); + if (index.id < num_segments_) { + const LaneSegment& lane_segment = lane_segments_to_next_point_[index.id]; + if (lane_segment.lane != nullptr) { + point.add_lane_waypoint(LaneWaypoint( + lane_segment.lane, lane_segment.start_s + index.offset)); + } + } + if (point.lane_waypoints().empty() && !ref_point.lane_waypoints().empty()) { + point.add_lane_waypoint(ref_point.lane_waypoints()[0]); + } + return point; + } else { + return ref_point; + } +} + +MapPathPoint Path::GetSmoothPoint(double s) const { + return GetSmoothPoint(GetIndexFromS(s)); +} + +double Path::GetSFromIndex(const InterpolatedIndex& index) const { + if (index.id < 0) { + return 0.0; + } + if (index.id >= num_points_) { + return length_; + } + return accumulated_s_[index.id] + index.offset; +} + +InterpolatedIndex Path::GetIndexFromS(double s) const { + if (s <= 0.0) { + return {0, 0.0}; + } + CHECK_GT(num_points_, 0); + if (s >= length_) { + return {num_points_ - 1, 0.0}; + } + const int sample_id = static_cast(s / kSampleDistance); + if (sample_id >= num_sample_points_) { + return {num_points_ - 1, 0.0}; + } + const int next_sample_id = sample_id + 1; + int low = last_point_index_[sample_id]; + int high = (next_sample_id < num_sample_points_ + ? std::min(num_points_, last_point_index_[next_sample_id] + 1) + : num_points_); + while (low + 1 < high) { + const int mid = (low + high) / 2; + if (accumulated_s_[mid] <= s) { + low = mid; + } else { + high = mid; + } + } + return {low, s - accumulated_s_[low]}; +} + +bool Path::GetNearestPoint(const Vec2d& point, double* accumulate_s, + double* lateral) const { + double distance = 0.0; + return GetNearestPoint(point, accumulate_s, lateral, &distance); +} + +bool Path::GetNearestPoint(const Vec2d& point, double* accumulate_s, + double* lateral, double* min_distance) const { + if (!GetProjection(point, accumulate_s, lateral, min_distance)) { + return false; + } + if (*accumulate_s < 0.0) { + *accumulate_s = 0.0; + *min_distance = point.DistanceTo(path_points_[0]); + } else if (*accumulate_s > length_) { + *accumulate_s = length_; + *min_distance = point.DistanceTo(path_points_.back()); + } + return true; +} + +bool Path::GetProjection(const common::math::Vec2d& point, double* accumulate_s, + double* lateral) const { + double distance = 0.0; + return GetProjection(point, accumulate_s, lateral, &distance); +} + +bool Path::GetProjection(const Vec2d& point, double* accumulate_s, + double* lateral, double* min_distance) const { + if (segments_.empty()) { + return false; + } + if (accumulate_s == nullptr || lateral == nullptr || + min_distance == nullptr) { + return false; + } + if (use_path_approximation_) { + return approximation_.GetProjection(*this, point, accumulate_s, lateral, + min_distance); + } + CHECK_GE(num_points_, 2); + *min_distance = std::numeric_limits::infinity(); + + for (int i = 0; i < num_segments_; ++i) { + const auto& segment = segments_[i]; + const double distance = segment.DistanceTo(point); + if (distance < *min_distance) { + const double proj = segment.ProjectOntoUnit(point); + if (proj < 0.0 && i > 0) { + continue; + } + if (proj > segment.length() && i + 1 < num_segments_) { + const auto& next_segment = segments_[i + 1]; + if ((point - next_segment.start()) + .InnerProd(next_segment.unit_direction()) >= 0.0) { + continue; + } + } + *min_distance = distance; + if (i + 1 >= num_segments_) { + *accumulate_s = accumulated_s_[i] + proj; + } else { + *accumulate_s = accumulated_s_[i] + std::min(proj, segment.length()); + } + const double prod = segment.ProductOntoUnit(point); + if ((i == 0 && proj < 0.0) || + (i + 1 == num_segments_ && proj > segment.length())) { + *lateral = prod; + } else { + *lateral = (prod > 0.0 ? distance : -distance); + } + } + } + return true; +} + +bool Path::GetHeadingAlongPath(const Vec2d& point, double* heading) const { + if (heading == nullptr) { + return false; + } + double s = 0; + double l = 0; + if (GetProjection(point, &s, &l)) { + *heading = GetSmoothPoint(s).heading(); + return true; + } + return false; +} + +double Path::GetLeftWidth(const double s) const { + return GetSample(left_width_, s); +} + +double Path::GetRightWidth(const double s) const { + return GetSample(right_width_, s); +} + +bool Path::GetWidth(const double s, double* left_width, + double* right_width) const { + CHECK_NOTNULL(left_width); + CHECK_NOTNULL(right_width); + + if (s < 0.0 || s > length_) { + return false; + } + *left_width = GetSample(left_width_, s); + *right_width = GetSample(right_width_, s); + return true; +} + +double Path::GetSample(const std::vector& samples, + const double s) const { + if (samples.empty()) { + return 0.0; + } + if (s <= 0.0) { + return samples[0]; + } + const int idx = static_cast(s / kSampleDistance); + if (idx >= num_sample_points_ - 1) { + return samples.back(); + } + const double ratio = (s - idx * kSampleDistance) / kSampleDistance; + return samples[idx] * (1.0 - ratio) + samples[idx + 1] * ratio; +} + +bool Path::IsOnPath(const Vec2d& point) const { + double accumulate_s = 0.0; + double lateral = 0.0; + if (!GetProjection(point, &accumulate_s, &lateral)) { + return false; + } + double left_width = 0.0; + double right_width = 0.0; + if (!GetWidth(accumulate_s, &left_width, &right_width)) { + return false; + } + if (lateral < left_width && lateral > -right_width) { + return true; + } + return false; +} + +bool Path::OverlapWith(const common::math::Box2d& box, double width) const { + if (use_path_approximation_) { + return approximation_.OverlapWith(*this, box, width); + } + const Vec2d center = box.center(); + const double radius_sqr = Sqr(box.diagonal() / 2.0 + width) + kMathEpsilon; + for (const auto& segment : segments_) { + if (segment.DistanceSquareTo(center) > radius_sqr) { + continue; + } + if (box.DistanceTo(segment) <= width + kMathEpsilon) { + return true; + } + } + return false; +} + +double PathApproximation::compute_max_error(const Path& path, const int s, + const int t) { + if (s + 1 >= t) { + return 0.0; + } + const auto& points = path.path_points(); + const LineSegment2d segment(points[s], points[t]); + double max_distance_sqr = 0.0; + for (int i = s + 1; i < t; ++i) { + max_distance_sqr = + std::max(max_distance_sqr, segment.DistanceSquareTo(points[i])); + } + return sqrt(max_distance_sqr); +} + +bool PathApproximation::is_within_max_error(const Path& path, const int s, + const int t) { + if (s + 1 >= t) { + return true; + } + const auto& points = path.path_points(); + const LineSegment2d segment(points[s], points[t]); + for (int i = s + 1; i < t; ++i) { + if (segment.DistanceSquareTo(points[i]) > max_sqr_error_) { + return false; + } + } + return true; +} + +void PathApproximation::Init(const Path& path) { + InitDilute(path); + InitProjections(path); +} + +void PathApproximation::InitDilute(const Path& path) { + const int num_original_points = path.num_points(); + original_ids_.clear(); + int last_idx = 0; + while (last_idx < num_original_points - 1) { + original_ids_.push_back(last_idx); + int next_idx = last_idx + 1; + int delta = 2; + for (; last_idx + delta < num_original_points; delta *= 2) { + if (!is_within_max_error(path, last_idx, last_idx + delta)) { + break; + } + next_idx = last_idx + delta; + } + for (; delta > 0; delta /= 2) { + if (next_idx + delta < num_original_points && + is_within_max_error(path, last_idx, next_idx + delta)) { + next_idx += delta; + } + } + last_idx = next_idx; + } + original_ids_.push_back(last_idx); + num_points_ = static_cast(original_ids_.size()); + if (num_points_ == 0) { + return; + } + + segments_.clear(); + segments_.reserve(num_points_ - 1); + for (int i = 0; i < num_points_ - 1; ++i) { + segments_.emplace_back(path.path_points()[original_ids_[i]], + path.path_points()[original_ids_[i + 1]]); + } + max_error_per_segment_.clear(); + max_error_per_segment_.reserve(num_points_ - 1); + for (int i = 0; i < num_points_ - 1; ++i) { + max_error_per_segment_.push_back( + compute_max_error(path, original_ids_[i], original_ids_[i + 1])); + } +} + +void PathApproximation::InitProjections(const Path& path) { + if (num_points_ == 0) { + return; + } + projections_.clear(); + projections_.reserve(segments_.size() + 1); + double s = 0.0; + projections_.push_back(0); + for (const auto& segment : segments_) { + s += segment.length(); + projections_.push_back(s); + } + const auto& original_points = path.path_points(); + const int num_original_points = original_points.size(); + original_projections_.clear(); + original_projections_.reserve(num_original_points); + for (size_t i = 0; i < projections_.size(); ++i) { + original_projections_.push_back(projections_[i]); + if (i + 1 < projections_.size()) { + const auto& segment = segments_[i]; + for (int idx = original_ids_[i] + 1; idx < original_ids_[i + 1]; ++idx) { + const double proj = segment.ProjectOntoUnit(original_points[idx]); + original_projections_.push_back( + projections_[i] + std::max(0.0, std::min(proj, segment.length()))); + } + } + } + + // max_p_to_left[i] = max(p[0], p[1], ... p[i]). + max_original_projections_to_left_.resize(num_original_points); + double last_projection = -std::numeric_limits::infinity(); + for (int i = 0; i < num_original_points; ++i) { + last_projection = std::max(last_projection, original_projections_[i]); + max_original_projections_to_left_[i] = last_projection; + } + for (int i = 0; i + 1 < num_original_points; ++i) { + CHECK_LE(max_original_projections_to_left_[i], + max_original_projections_to_left_[i + 1] + kMathEpsilon); + } + + // min_p_to_right[i] = min(p[i], p[i + 1], ... p[size - 1]). + min_original_projections_to_right_.resize(original_projections_.size()); + last_projection = std::numeric_limits::infinity(); + for (int i = num_original_points - 1; i >= 0; --i) { + last_projection = std::min(last_projection, original_projections_[i]); + min_original_projections_to_right_[i] = last_projection; + } + for (int i = 0; i + 1 < num_original_points; ++i) { + CHECK_LE(min_original_projections_to_right_[i], + min_original_projections_to_right_[i + 1] + kMathEpsilon); + } + + // Sample max_p_to_left by sample_distance. + max_projection_ = projections_.back(); + num_projection_samples_ = + static_cast(max_projection_ / kSampleDistance) + 1; + sampled_max_original_projections_to_left_.clear(); + sampled_max_original_projections_to_left_.reserve(num_projection_samples_); + double proj = 0.0; + int last_index = 0; + for (int i = 0; i < num_projection_samples_; ++i) { + while (last_index + 1 < num_original_points && + max_original_projections_to_left_[last_index + 1] < proj) { + ++last_index; + } + sampled_max_original_projections_to_left_.push_back(last_index); + proj += kSampleDistance; + } + CHECK_EQ(sampled_max_original_projections_to_left_.size(), + num_projection_samples_); +} + +bool PathApproximation::GetProjection(const Path& path, + const common::math::Vec2d& point, + double* accumulate_s, double* lateral, + double* min_distance) const { + if (num_points_ == 0) { + return false; + } + if (accumulate_s == nullptr || lateral == nullptr || + min_distance == nullptr) { + return false; + } + double min_distance_sqr = std::numeric_limits::infinity(); + int estimate_nearest_segment_idx = -1; + std::vector distance_sqr_to_segments; + distance_sqr_to_segments.reserve(segments_.size()); + for (size_t i = 0; i < segments_.size(); ++i) { + const double distance_sqr = segments_[i].DistanceSquareTo(point); + distance_sqr_to_segments.push_back(distance_sqr); + if (distance_sqr < min_distance_sqr) { + min_distance_sqr = distance_sqr; + estimate_nearest_segment_idx = i; + } + } + if (estimate_nearest_segment_idx < 0) { + return false; + } + const auto& original_segments = path.segments(); + const int num_original_segments = static_cast(original_segments.size()); + const auto& original_accumulated_s = path.accumulated_s(); + double min_distance_sqr_with_error = + Sqr(sqrt(min_distance_sqr) + + max_error_per_segment_[estimate_nearest_segment_idx] + max_error_); + *min_distance = std::numeric_limits::infinity(); + int nearest_segment_idx = -1; + for (size_t i = 0; i < segments_.size(); ++i) { + if (distance_sqr_to_segments[i] >= min_distance_sqr_with_error) { + continue; + } + int first_segment_idx = original_ids_[i]; + int last_segment_idx = original_ids_[i + 1] - 1; + double max_original_projection = std::numeric_limits::infinity(); + if (first_segment_idx < last_segment_idx) { + const auto& segment = segments_[i]; + const double projection = segment.ProjectOntoUnit(point); + const double prod_sqr = Sqr(segment.ProductOntoUnit(point)); + if (prod_sqr >= min_distance_sqr_with_error) { + continue; + } + const double scan_distance = sqrt(min_distance_sqr_with_error - prod_sqr); + const double min_projection = projection - scan_distance; + max_original_projection = projections_[i] + projection + scan_distance; + if (min_projection > 0.0) { + const double limit = projections_[i] + min_projection; + const int sample_index = + std::max(0, static_cast(limit / kSampleDistance)); + if (sample_index >= num_projection_samples_) { + first_segment_idx = last_segment_idx; + } else { + first_segment_idx = + std::max(first_segment_idx, + sampled_max_original_projections_to_left_[sample_index]); + if (first_segment_idx >= last_segment_idx) { + first_segment_idx = last_segment_idx; + } else { + while (first_segment_idx < last_segment_idx && + max_original_projections_to_left_[first_segment_idx + 1] < + limit) { + ++first_segment_idx; + } + } + } + } + } + bool min_distance_updated = false; + bool is_within_end_point = false; + for (int idx = first_segment_idx; idx <= last_segment_idx; ++idx) { + if (min_original_projections_to_right_[idx] > max_original_projection) { + break; + } + const auto& original_segment = original_segments[idx]; + const double x0 = point.x() - original_segment.start().x(); + const double y0 = point.y() - original_segment.start().y(); + const double ux = original_segment.unit_direction().x(); + const double uy = original_segment.unit_direction().y(); + double proj = x0 * ux + y0 * uy; + double distance = 0.0; + if (proj < 0.0) { + if (is_within_end_point) { + continue; + } + is_within_end_point = true; + distance = hypot(x0, y0); + } else if (proj <= original_segment.length()) { + is_within_end_point = true; + distance = std::abs(x0 * uy - y0 * ux); + } else { + is_within_end_point = false; + if (idx != last_segment_idx) { + continue; + } + distance = original_segment.end().DistanceTo(point); + } + if (distance < *min_distance) { + min_distance_updated = true; + *min_distance = distance; + nearest_segment_idx = idx; + } + } + if (min_distance_updated) { + min_distance_sqr_with_error = Sqr(*min_distance + max_error_); + } + } + if (nearest_segment_idx >= 0) { + const auto& segment = original_segments[nearest_segment_idx]; + double proj = segment.ProjectOntoUnit(point); + const double prod = segment.ProductOntoUnit(point); + if (nearest_segment_idx > 0) { + proj = std::max(0.0, proj); + } + if (nearest_segment_idx + 1 < num_original_segments) { + proj = std::min(segment.length(), proj); + } + *accumulate_s = original_accumulated_s[nearest_segment_idx] + proj; + if ((nearest_segment_idx == 0 && proj < 0.0) || + (nearest_segment_idx + 1 == num_original_segments && + proj > segment.length())) { + *lateral = prod; + } else { + *lateral = (prod > 0 ? (*min_distance) : -(*min_distance)); + } + return true; + } + return false; +} + +bool PathApproximation::OverlapWith(const Path& path, const Box2d& box, + double width) const { + if (num_points_ == 0) { + return false; + } + const Vec2d center = box.center(); + const double radius = box.diagonal() / 2.0 + width; + const double radius_sqr = Sqr(radius); + const auto& original_segments = path.segments(); + for (size_t i = 0; i < segments_.size(); ++i) { + const LineSegment2d& segment = segments_[i]; + const double max_error = max_error_per_segment_[i]; + const double radius_sqr_with_error = Sqr(radius + max_error); + if (segment.DistanceSquareTo(center) > radius_sqr_with_error) { + continue; + } + int first_segment_idx = original_ids_[i]; + int last_segment_idx = original_ids_[i + 1] - 1; + double max_original_projection = std::numeric_limits::infinity(); + if (first_segment_idx < last_segment_idx) { + const auto& segment = segments_[i]; + const double projection = segment.ProjectOntoUnit(center); + const double prod_sqr = Sqr(segment.ProductOntoUnit(center)); + if (prod_sqr >= radius_sqr_with_error) { + continue; + } + const double scan_distance = sqrt(radius_sqr_with_error - prod_sqr); + const double min_projection = projection - scan_distance; + max_original_projection = projections_[i] + projection + scan_distance; + if (min_projection > 0.0) { + const double limit = projections_[i] + min_projection; + const int sample_index = + std::max(0, static_cast(limit / kSampleDistance)); + if (sample_index >= num_projection_samples_) { + first_segment_idx = last_segment_idx; + } else { + first_segment_idx = + std::max(first_segment_idx, + sampled_max_original_projections_to_left_[sample_index]); + if (first_segment_idx >= last_segment_idx) { + first_segment_idx = last_segment_idx; + } else { + while (first_segment_idx < last_segment_idx && + max_original_projections_to_left_[first_segment_idx + 1] < + limit) { + ++first_segment_idx; + } + } + } + } + } + for (int idx = first_segment_idx; idx <= last_segment_idx; ++idx) { + if (min_original_projections_to_right_[idx] > max_original_projection) { + break; + } + const auto& original_segment = original_segments[idx]; + if (original_segment.DistanceSquareTo(center) > radius_sqr) { + continue; + } + if (box.DistanceTo(original_segment) <= width) { + return true; + } + } + } + return false; +} + +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/pnc_map/path.h b/modules/map/pnc_map/path.h new file mode 100644 index 00000000000..94a9d55f2a6 --- /dev/null +++ b/modules/map/pnc_map/path.h @@ -0,0 +1,313 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_MAP_PNC_MAP_PATH_H_ +#define MODULES_MAP_PNC_MAP_PATH_H_ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "modules/map/proto/map_lane.pb.h" + +#include "modules/common/log.h" +#include "modules/common/math/box2d.h" +#include "modules/common/math/line_segment2d.h" +#include "modules/common/math/vec2d.h" +#include "modules/map/hdmap/hdmap.h" +#include "modules/map/hdmap/hdmap_common.h" + +namespace apollo { +namespace hdmap { + +// class LaneInfoConstPtr; +// class OverlapInfoConstPtr; + +struct LaneWaypoint { + LaneWaypoint() = default; + LaneWaypoint(LaneInfoConstPtr lane, const double s) + : lane(CHECK_NOTNULL(lane)), s(s) {} + LaneInfoConstPtr lane = nullptr; + double s = 0.0; + + std::string DebugString() const; +}; + +struct LaneSegment { + LaneSegment() = default; + LaneSegment(LaneInfoConstPtr lane, const double start_s, const double end_s) + : lane(CHECK_NOTNULL(lane)), start_s(start_s), end_s(end_s) {} + LaneInfoConstPtr lane = nullptr; + double start_s = 0.0; + double end_s = 0.0; + + std::string DebugString() const; +}; + +struct PathOverlap { + PathOverlap() = default; + PathOverlap(std::string object_id, const double start_s, const double end_s) + : object_id(std::move(object_id)), start_s(start_s), end_s(end_s) {} + + std::string object_id; + double start_s = 0.0; + double end_s = 0.0; + + std::string DebugString() const; +}; + +class MapPathPoint : public common::math::Vec2d { + public: + MapPathPoint() = default; + MapPathPoint(const common::math::Vec2d& point, double heading) + : Vec2d(point.x(), point.y()), heading_(heading) {} + MapPathPoint(const common::math::Vec2d& point, double heading, + LaneWaypoint lane_waypoint) + : Vec2d(point.x(), point.y()), heading_(heading) { + lane_waypoints_.emplace_back(std::move(lane_waypoint)); + } + MapPathPoint(const common::math::Vec2d& point, double heading, + std::vector lane_waypoints) + : Vec2d(point.x(), point.y()), + heading_(heading), + lane_waypoints_(std::move(lane_waypoints)) {} + + double heading() const { return heading_; } + void set_heading(const double heading) { heading_ = heading; } + + const std::vector& lane_waypoints() const { + return lane_waypoints_; + } + + void add_lane_waypoint(LaneWaypoint lane_waypoint) { + lane_waypoints_.emplace_back(std::move(lane_waypoint)); + } + void add_lane_waypoints(const std::vector& lane_waypoints) { + lane_waypoints_.insert(lane_waypoints_.end(), lane_waypoints.begin(), + lane_waypoints.end()); + } + + void clear_lane_waypoints() { lane_waypoints_.clear(); } + + std::string DebugString() const; + + protected: + double heading_ = 0.0; + std::vector lane_waypoints_; +}; + +class Path; + +class PathApproximation { + public: + PathApproximation() = default; + PathApproximation(const Path& path, const double max_error) + : max_error_(max_error), max_sqr_error_(max_error * max_error) { + Init(path); + } + double max_error() const { return max_error_; } + const std::vector& original_ids() const { return original_ids_; } + const std::vector& segments() const { + return segments_; + } + + bool GetProjection(const Path& path, const common::math::Vec2d& point, + double* accumulate_s, double* lateral, + double* distance) const; + + bool OverlapWith(const Path& path, const common::math::Box2d& box, + double width) const; + + protected: + void Init(const Path& path); + bool is_within_max_error(const Path& path, const int s, const int t); + double compute_max_error(const Path& path, const int s, const int t); + + void InitDilute(const Path& path); + void InitProjections(const Path& path); + + protected: + double max_error_ = 0; + double max_sqr_error_ = 0; + + int num_points_ = 0; + std::vector original_ids_; + std::vector segments_; + std::vector max_error_per_segment_; + + // TODO(@lianglia_apollo): use direction change checks to early stop. + + // Projection of points onto the diluated segments. + std::vector projections_; + double max_projection_; + int num_projection_samples_ = 0; + + // The original_projection is the projection of original points onto the + // diluated segments. + std::vector original_projections_; + // max_p_to_left[i] = max(p[0], p[1], ... p[i]). + // min_p_to_right[i] = min(p[i], p[i + 1], ... p[size - 1]). + std::vector max_original_projections_to_left_; + std::vector min_original_projections_to_right_; + std::vector sampled_max_original_projections_to_left_; +}; + +class InterpolatedIndex { + public: + InterpolatedIndex(int id, double offset) : id(id), offset(offset) {} + int id = 0; + double offset = 0.0; +}; + +class Path { + public: + Path() = default; + explicit Path(std::vector path_points); + + Path(std::vector path_points, + std::vector lane_segments); + Path(std::vector path_points, + std::vector lane_segments, + const double max_approximation_error); + + // Return smooth coordinate by interpolated index or accumulate_s. + MapPathPoint GetSmoothPoint(const InterpolatedIndex& index) const; + MapPathPoint GetSmoothPoint(double s) const; + + // Compute accumulate s value of the index. + double GetSFromIndex(const InterpolatedIndex& index) const; + // Compute interpolated index by accumulate_s. + InterpolatedIndex GetIndexFromS(double s) const; + + bool GetNearestPoint(const common::math::Vec2d& point, double* accumulate_s, + double* lateral) const; + bool GetNearestPoint(const common::math::Vec2d& point, double* accumulate_s, + double* lateral, double* distance) const; + bool GetProjection(const common::math::Vec2d& point, double* accumulate_s, + double* lateral) const; + bool GetProjection(const common::math::Vec2d& point, double* accumulate_s, + double* lateral, double* distance) const; + + bool GetHeadingAlongPath(const common::math::Vec2d& point, + double* heading) const; + + int num_points() const { return num_points_; } + int num_segments() const { return num_segments_; } + const std::vector& path_points() const { return path_points_; } + const std::vector& lane_segments() const { + return lane_segments_; + } + const std::vector& lane_segments_to_next_point() const { + return lane_segments_to_next_point_; + } + const std::vector& unit_directions() const { + return unit_directions_; + } + const std::vector& accumulated_s() const { return accumulated_s_; } + const std::vector& segments() const { + return segments_; + } + const PathApproximation* approximation() const { return &approximation_; } + double length() const { return length_; } + + const std::vector& lane_overlaps() const { + return lane_overlaps_; + } + const std::vector& signal_overlaps() const { + return signal_overlaps_; + } + const std::vector& yield_sign_overlaps() const { + return yield_sign_overlaps_; + } + const std::vector& stop_sign_overlaps() const { + return stop_sign_overlaps_; + } + const std::vector& crosswalk_overlaps() const { + return crosswalk_overlaps_; + } + const std::vector& parking_space_overlaps() const { + return parking_space_overlaps_; + } + const std::vector& junction_overlaps() const { + return junction_overlaps_; + } + const std::vector& speed_bump_overlaps() const { + return speed_bump_overlaps_; + } + + double GetLeftWidth(const double s) const; + double GetRightWidth(const double s) const; + bool GetWidth(const double s, double* left_width, double* right_width) const; + + bool IsOnPath(const common::math::Vec2d& point) const; + bool OverlapWith(const common::math::Box2d& box, double width) const; + + std::string DebugString() const; + + protected: + void Init(); + void InitPoints(); + void InitLaneSegments(); + void InitWidth(); + void InitPointIndex(); + void InitOverlaps(); + + double GetSample(const std::vector& samples, const double s) const; + + using GetOverlapFromLaneFunc = + std::function&(const LaneInfo&)>; + void GetAllOverlaps(GetOverlapFromLaneFunc get_overlaps_from_lane, + std::vector* const overlaps) const; + + protected: + int num_points_ = 0; + int num_segments_ = 0; + std::vector path_points_; + std::vector lane_segments_; + std::vector lane_segments_to_next_point_; + std::vector unit_directions_; + double length_ = 0.0; + std::vector accumulated_s_; + std::vector segments_; + bool use_path_approximation_ = false; + PathApproximation approximation_; + + // Sampled every fixed length. + int num_sample_points_ = 0; + std::vector left_width_; + std::vector right_width_; + std::vector last_point_index_; + + std::vector lane_overlaps_; + std::vector signal_overlaps_; + std::vector yield_sign_overlaps_; + std::vector stop_sign_overlaps_; + std::vector crosswalk_overlaps_; + std::vector parking_space_overlaps_; + std::vector junction_overlaps_; + std::vector speed_bump_overlaps_; +}; + +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_PNC_MAP_PATH_H_ diff --git a/modules/map/pnc_map/path_test.cc b/modules/map/pnc_map/path_test.cc new file mode 100644 index 00000000000..aa928df36e7 --- /dev/null +++ b/modules/map/pnc_map/path_test.cc @@ -0,0 +1,822 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/map/pnc_map/path.h" + +#include +#include + +#include "gflags/gflags.h" +#include "gtest/gtest.h" + +#include "modules/common/util/string_util.h" +#include "modules/routing/proto/routing.pb.h" + +#include "modules/map/hdmap/hdmap.h" + +using Lane = apollo::hdmap::Lane; +using LaneSampleAssociation = apollo::hdmap::LaneSampleAssociation; +using Point = apollo::common::PointENU; +using RoutingRequest = apollo::routing::RoutingRequest; +using RoutingResponse = apollo::routing::RoutingResponse; +using MapPathPoint = apollo::hdmap::MapPathPoint; +using AABox2d = apollo::common::math::AABox2d; +using Box2d = apollo::common::math::Box2d; +using Polygon2d = apollo::common::math::Polygon2d; +using Vec2d = apollo::common::math::Vec2d; +using LaneWaypoint = apollo::hdmap::LaneWaypoint; +using LaneInfoConstPtr = apollo::hdmap::LaneInfoConstPtr; + +namespace apollo { +namespace hdmap { +namespace { + +const char kMapFilename[] = + "modules/map/pnc_map/testdata/example_intersection.graph"; + +Point MakePoint(double x, double y, double z) { + Point pt; + pt.set_x(x); + pt.set_y(y); + pt.set_z(z); + return pt; +} + +Lane MakeDefaultLane() { + Lane lane; + lane.mutable_id()->set_id("test"); + auto* segment = + lane.mutable_central_curve()->add_segment()->mutable_line_segment(); + *segment->add_point() = MakePoint(0, 0, 0); + *segment->add_point() = MakePoint(1, 1, 1); + return lane; +} + +LaneSampleAssociation MakeSample(double s, double width) { + LaneSampleAssociation sample; + sample.set_s(s); + sample.set_width(width); + return sample; +} + +MapPathPoint MakeMapPathPoint(double x, double y, double heading = 0) { + return MapPathPoint({x, y}, heading); +} + +int RandomInt(int s, int t) { + if (s >= t) { + return s; + } + return s + rand() % (t - s + 1); // NOLINT +} + +double RandomDouble(double s, double t) { + return s + (t - s) / 16383.0 * (rand() & 16383); // NOLINT +} + +template +std::string ToString(const T& val) { + return apollo::common::util::StrCat(val); +} + +} // namespace + +TEST(TestSuite, hdmap_line_path) { + Lane lane; + lane.mutable_id()->set_id("id"); + auto* line_segment = + lane.mutable_central_curve()->add_segment()->mutable_line_segment(); + *line_segment->add_point() = MakePoint(0, 0, 0); + *line_segment->add_point() = MakePoint(0, 3, 0); + lane.set_length(3.0); + *lane.add_left_sample() = MakeSample(0.0, 4.0); + *lane.add_left_sample() = MakeSample(1.0, 5.0); + *lane.add_left_sample() = MakeSample(3.0, 6.0); + *lane.add_right_sample() = MakeSample(0.0, 7.0); + *lane.add_right_sample() = MakeSample(2.0, 8.0); + *lane.add_right_sample() = MakeSample(3.0, 5.0); + + LaneInfoConstPtr lane_info(new LaneInfo(lane)); + + const std::vector points{ + MapPathPoint({0, 0}, M_PI_2, LaneWaypoint(lane_info, 0)), + MapPathPoint({0, 1}, M_PI_2, LaneWaypoint(lane_info, 1)), + MapPathPoint({0, 2}, M_PI_2, LaneWaypoint(lane_info, 2)), + MapPathPoint({0, 3}, M_PI_2, LaneWaypoint(lane_info, 3))}; + const Path path(points, {}, 2.0); + EXPECT_EQ(path.num_points(), 4); + EXPECT_EQ(path.num_segments(), 3); + EXPECT_NEAR(path.path_points()[0].x(), 0, 1e-6); + EXPECT_NEAR(path.path_points()[0].y(), 0, 1e-6); + EXPECT_NEAR(path.unit_directions()[0].x(), 0, 1e-6); + EXPECT_NEAR(path.unit_directions()[0].y(), 1, 1e-6); + EXPECT_NEAR(path.accumulated_s()[0], 0, 1e-6); + EXPECT_NEAR(path.path_points()[1].x(), 0, 1e-6); + EXPECT_NEAR(path.path_points()[1].y(), 1, 1e-6); + EXPECT_NEAR(path.unit_directions()[1].x(), 0, 1e-6); + EXPECT_NEAR(path.unit_directions()[1].y(), 1, 1e-6); + EXPECT_NEAR(path.accumulated_s()[1], 1, 1e-6); + EXPECT_NEAR(path.path_points()[2].x(), 0, 1e-6); + EXPECT_NEAR(path.path_points()[2].y(), 2, 1e-6); + EXPECT_NEAR(path.unit_directions()[2].x(), 0, 1e-6); + EXPECT_NEAR(path.unit_directions()[2].y(), 1, 1e-6); + EXPECT_NEAR(path.accumulated_s()[2], 2, 1e-6); + EXPECT_NEAR(path.path_points()[3].x(), 0, 1e-6); + EXPECT_NEAR(path.path_points()[3].y(), 3, 1e-6); + EXPECT_NEAR(path.unit_directions()[3].x(), 0, 1e-6); + EXPECT_NEAR(path.unit_directions()[3].y(), 1, 1e-6); + EXPECT_NEAR(path.accumulated_s()[3], 3, 1e-6); + EXPECT_EQ(path.segments().size(), 3); + const auto* path_approximation = path.approximation(); + EXPECT_NEAR(path_approximation->max_error(), 2.0, 1e-6); + EXPECT_EQ(path_approximation->original_ids().size(), 2); + EXPECT_EQ(path_approximation->original_ids()[0], 0); + EXPECT_EQ(path_approximation->original_ids()[1], 3); + EXPECT_EQ(path.lane_segments().size(), 3); + + EXPECT_EQ(path.lane_segments_to_next_point().size(), 3); + EXPECT_EQ(path.lane_segments_to_next_point()[0].lane->id().id(), "id"); + EXPECT_NEAR(path.lane_segments_to_next_point()[0].start_s, 0.0, 1e-6); + EXPECT_NEAR(path.lane_segments_to_next_point()[0].end_s, 1.0, 1e-6); + EXPECT_EQ(path.lane_segments_to_next_point()[1].lane->id().id(), "id"); + EXPECT_NEAR(path.lane_segments_to_next_point()[1].start_s, 1.0, 1e-6); + EXPECT_NEAR(path.lane_segments_to_next_point()[1].end_s, 2.0, 1e-6); + EXPECT_EQ(path.lane_segments_to_next_point()[2].lane->id().id(), "id"); + EXPECT_NEAR(path.lane_segments_to_next_point()[2].start_s, 2.0, 1e-6); + EXPECT_NEAR(path.lane_segments_to_next_point()[2].end_s, 3.0, 1e-6); + + MapPathPoint point = path.GetSmoothPoint({1, 0.5}); + EXPECT_NEAR(point.x(), 0, 1e-6); + EXPECT_NEAR(point.y(), 1.5, 1e-6); + point = path.GetSmoothPoint(2.3); + EXPECT_NEAR(point.x(), 0, 1e-6); + EXPECT_NEAR(point.y(), 2.3, 1e-6); + point = path.GetSmoothPoint(-0.5); + EXPECT_NEAR(point.x(), 0, 1e-6); + EXPECT_NEAR(point.y(), 0, 1e-6); + point = path.GetSmoothPoint(10.0); + EXPECT_NEAR(point.x(), 0, 1e-6); + EXPECT_NEAR(point.y(), 3, 1e-6); + + EXPECT_NEAR(path.GetSFromIndex({1, 0.4}), 1.4, 1e-6); + EXPECT_EQ(path.GetIndexFromS(2.6).id, 2); + EXPECT_NEAR(path.GetIndexFromS(2.6).offset, 0.6, 1e-6); + + double accumulate_s; + double lateral; + double distance; + EXPECT_TRUE( + path.GetNearestPoint({0.3, -1}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 0.0, 1e-6); + EXPECT_NEAR(lateral, -0.3, 1e-6); + EXPECT_NEAR(distance, hypot(0.3, 1.0), 1e-6); + EXPECT_TRUE( + path.GetNearestPoint({-0.5, 1.5}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 1.5, 1e-6); + EXPECT_NEAR(lateral, 0.5, 1e-6); + EXPECT_NEAR(distance, 0.5, 1e-6); + EXPECT_TRUE( + path.GetNearestPoint({0.0, 3.5}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 3.0, 1e-6); + EXPECT_NEAR(lateral, 0.0, 1e-6); + EXPECT_NEAR(distance, 0.5, 1e-6); + + EXPECT_TRUE( + path.GetProjection({0.3, -1}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, -1.0, 1e-6); + EXPECT_NEAR(lateral, -0.3, 1e-6); + EXPECT_NEAR(distance, hypot(0.3, 1.0), 1e-6); + EXPECT_TRUE( + path.GetProjection({-0.5, 1.5}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 1.5, 1e-6); + EXPECT_NEAR(lateral, 0.5, 1e-6); + EXPECT_NEAR(distance, 0.5, 1e-6); + EXPECT_TRUE( + path.GetProjection({0.0, 3.5}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 3.5, 1e-6); + EXPECT_NEAR(lateral, 0.0, 1e-6); + EXPECT_NEAR(distance, 0.5, 1e-6); + + EXPECT_NEAR(path.GetLeftWidth(-0.5), 4.0, 1e-6); + EXPECT_NEAR(path.GetLeftWidth(0.0), 4.0, 1e-6); + EXPECT_NEAR(path.GetLeftWidth(0.5), 4.5, 1e-6); + EXPECT_NEAR(path.GetLeftWidth(1.0), 5.0, 1e-6); + EXPECT_NEAR(path.GetLeftWidth(1.5), 5.25, 1e-6); + EXPECT_NEAR(path.GetLeftWidth(2.0), 5.5, 1e-6); + EXPECT_NEAR(path.GetLeftWidth(2.5), 5.75, 1e-6); + EXPECT_NEAR(path.GetLeftWidth(3.0), 6.0, 1e-6); + EXPECT_NEAR(path.GetLeftWidth(3.5), 6.0, 1e-6); + + EXPECT_NEAR(path.GetRightWidth(-0.5), 7.0, 1e-6); + EXPECT_NEAR(path.GetRightWidth(0.0), 7.0, 1e-6); + EXPECT_NEAR(path.GetRightWidth(0.5), 7.25, 1e-6); + EXPECT_NEAR(path.GetRightWidth(1.0), 7.5, 1e-6); + EXPECT_NEAR(path.GetRightWidth(1.5), 7.75, 1e-6); + EXPECT_NEAR(path.GetRightWidth(2.0), 8.0, 1e-6); + EXPECT_NEAR(path.GetRightWidth(2.5), 6.5, 1e-6); + EXPECT_NEAR(path.GetRightWidth(3.0), 5.0, 1e-6); + EXPECT_NEAR(path.GetRightWidth(3.5), 5.0, 1e-6); +} + +TEST(TestSuite, hdmap_curvy_path) { + const std::vector points{ + MakeMapPathPoint(2, 0), MakeMapPathPoint(2, 1), MakeMapPathPoint(1, 2), + MakeMapPathPoint(0, 2)}; + Path path(points, {}, 2.0); + EXPECT_EQ(path.num_points(), 4); + EXPECT_EQ(path.num_segments(), 3); + EXPECT_NEAR(path.path_points()[0].x(), 2, 1e-6); + EXPECT_NEAR(path.path_points()[0].y(), 0, 1e-6); + EXPECT_NEAR(path.unit_directions()[0].x(), 0, 1e-6); + EXPECT_NEAR(path.unit_directions()[0].y(), 1, 1e-6); + EXPECT_NEAR(path.accumulated_s()[0], 0, 1e-6); + EXPECT_NEAR(path.path_points()[1].x(), 2, 1e-6); + EXPECT_NEAR(path.path_points()[1].y(), 1, 1e-6); + EXPECT_NEAR(path.unit_directions()[1].x(), -0.5 * sqrt(2.0), 1e-6); + EXPECT_NEAR(path.unit_directions()[1].y(), 0.5 * sqrt(2.0), 1e-6); + EXPECT_NEAR(path.accumulated_s()[1], 1, 1e-6); + EXPECT_NEAR(path.path_points()[2].x(), 1, 1e-6); + EXPECT_NEAR(path.path_points()[2].y(), 2, 1e-6); + EXPECT_NEAR(path.unit_directions()[2].x(), -1, 1e-6); + EXPECT_NEAR(path.unit_directions()[2].y(), 0, 1e-6); + EXPECT_NEAR(path.accumulated_s()[2], 1 + sqrt(2.0), 1e-6); + EXPECT_NEAR(path.path_points()[3].x(), 0, 1e-6); + EXPECT_NEAR(path.path_points()[3].y(), 2, 1e-6); + EXPECT_NEAR(path.unit_directions()[3].x(), -1, 1e-6); + EXPECT_NEAR(path.unit_directions()[3].y(), 0, 1e-6); + EXPECT_NEAR(path.accumulated_s()[3], 2 + sqrt(2.0), 1e-6); + EXPECT_EQ(path.segments().size(), 3); + const auto* path_approximation = path.approximation(); + EXPECT_NEAR(path_approximation->max_error(), 2.0, 1e-6); + EXPECT_EQ(path_approximation->original_ids().size(), 2); + EXPECT_EQ(path_approximation->original_ids()[0], 0); + EXPECT_EQ(path_approximation->original_ids()[1], 3); + EXPECT_EQ(path.lane_segments().size(), 0); + + double accumulate_s; + double lateral; + double distance; + EXPECT_TRUE( + path.GetNearestPoint({1.5, 0.5}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 0.5, 1e-6); + EXPECT_NEAR(lateral, 0.5, 1e-6); + EXPECT_NEAR(distance, 0.5, 1e-6); + EXPECT_TRUE( + path.GetNearestPoint({2.5, 1.1}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 1.0, 1e-6); + EXPECT_NEAR(distance, hypot(0.5, 0.1), 1e-6); + EXPECT_TRUE( + path.GetNearestPoint({1.6, 1.6}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 1.0 + 0.5 * sqrt(2.0), 1e-6); + EXPECT_NEAR(lateral, -0.1 * sqrt(2.0), 1e-6); + EXPECT_NEAR(distance, 0.1 * sqrt(2.0), 1e-6); + + EXPECT_TRUE( + path.GetProjection({1.5, 0.5}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 0.5, 1e-6); + EXPECT_NEAR(lateral, 0.5, 1e-6); + EXPECT_NEAR(distance, 0.5, 1e-6); + EXPECT_TRUE( + path.GetProjection({2.5, 1.1}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 1.0, 1e-6); + EXPECT_NEAR(distance, hypot(0.5, 0.1), 1e-6); + EXPECT_TRUE( + path.GetProjection({1.6, 1.6}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 1.0 + 0.5 * sqrt(2.0), 1e-6); + EXPECT_NEAR(lateral, -0.1 * sqrt(2.0), 1e-6); + EXPECT_NEAR(distance, 0.1 * sqrt(2.0), 1e-6); + + EXPECT_NEAR(path.GetSFromIndex({-1, 0.5}), 0.0, 1e-6); + EXPECT_NEAR(path.GetSFromIndex({0, 0.5}), 0.5, 1e-6); + EXPECT_NEAR(path.GetSFromIndex({1, 0.5}), 1.5, 1e-6); + EXPECT_NEAR(path.GetSFromIndex({2, 0.5}), 1.5 + sqrt(2.0), 1e-6); + EXPECT_NEAR(path.GetSFromIndex({3, 0.0}), 2 + sqrt(2.0), 1e-6); + EXPECT_NEAR(path.GetSFromIndex({4, 0.0}), 2 + sqrt(2.0), 1e-6); + + const auto& traj_points = path.path_points(); + for (size_t i = 0; i < traj_points.size(); ++i) { + Vec2d point{traj_points[i].x(), traj_points[i].y()}; + double heading = 0; + path.GetHeadingAlongPath(point, &heading); + EXPECT_NEAR(heading, traj_points[i].heading(), 1e-5); + } + + // Test move constructor. + Path other_path(std::move(path)); + const auto* other_path_approximation = other_path.approximation(); + EXPECT_NEAR(other_path_approximation->max_error(), 2.0, 1e-6); + EXPECT_EQ(other_path_approximation->original_ids().size(), 2); + EXPECT_EQ(other_path_approximation->original_ids()[0], 0); + EXPECT_EQ(other_path_approximation->original_ids()[1], 3); + + EXPECT_TRUE( + other_path.GetProjection({1.5, 0.5}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 0.5, 1e-6); + EXPECT_NEAR(lateral, 0.5, 1e-6); + EXPECT_NEAR(distance, 0.5, 1e-6); + EXPECT_TRUE( + other_path.GetProjection({2.5, 1.1}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 1.0, 1e-6); + EXPECT_NEAR(distance, hypot(0.5, 0.1), 1e-6); + EXPECT_TRUE( + other_path.GetProjection({1.6, 1.6}, &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 1.0 + 0.5 * sqrt(2.0), 1e-6); + EXPECT_NEAR(lateral, -0.1 * sqrt(2.0), 1e-6); + EXPECT_NEAR(distance, 0.1 * sqrt(2.0), 1e-6); +} + +TEST(TestSuite, hdmap_circle_path) { + const double kRadius = 50.0; + const int kNumSegments = 100; + std::vector points; + for (int i = 0; i <= kNumSegments; ++i) { + const double p = + M_PI_2 * static_cast(i) / static_cast(kNumSegments); + points.push_back(MakeMapPathPoint(kRadius * cos(p), kRadius * sin(p))); + } + const Path path(points, {}, 2.0); + EXPECT_EQ(path.num_points(), kNumSegments + 1); + EXPECT_EQ(path.num_segments(), kNumSegments); + EXPECT_EQ(path.path_points().size(), kNumSegments + 1); + EXPECT_EQ(path.lane_segments().size(), 0); + EXPECT_EQ(path.segments().size(), kNumSegments); + const auto* path_approximation = path.approximation(); + EXPECT_NEAR(path_approximation->max_error(), 2.0, 1e-6); + EXPECT_EQ(path_approximation->original_ids().size(), 4); + EXPECT_EQ(path_approximation->original_ids()[0], 0); + EXPECT_EQ(path_approximation->original_ids()[1], 36); + EXPECT_EQ(path_approximation->original_ids()[2], 72); + EXPECT_EQ(path_approximation->original_ids()[3], 100); + const double total_length = path.accumulated_s().back(); + + const double kLargeEps = 0.1; + double accumulate_s; + double lateral; + double distance; + EXPECT_TRUE(path.GetProjection({kRadius + 1, -1}, &accumulate_s, &lateral, + &distance)); + EXPECT_NEAR(accumulate_s, -1.0, kLargeEps); + EXPECT_NEAR(lateral, -1.0, kLargeEps); + EXPECT_NEAR(distance, sqrt(2.0), 1e-6); + + EXPECT_TRUE(path.GetProjection({-1, kRadius - 1}, &accumulate_s, &lateral, + &distance)); + EXPECT_NEAR(accumulate_s, total_length + 1.0, kLargeEps); + EXPECT_NEAR(lateral, 1.0, kLargeEps); + EXPECT_NEAR(distance, sqrt(2.0), 1e-6); + + EXPECT_TRUE( + path.GetProjection({kRadius / sqrt(2.0) + 1, kRadius / sqrt(2.0) + 1}, + &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, total_length / 2.0, 1e-6); + EXPECT_NEAR(lateral, -sqrt(2.0), 1e-6); + EXPECT_NEAR(distance, sqrt(2.0), 1e-6); + + EXPECT_TRUE(path.GetProjection({kRadius / sqrt(2.0), kRadius / sqrt(2.0)}, + &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, total_length / 2.0, 1e-6); + EXPECT_NEAR(lateral, 0.0, 1e-6); + EXPECT_NEAR(distance, 0.0, 1e-6); + + // Randomly generated test cases on path.approxmiation. + const Path path_no_approximation(points, {}); + for (int case_id = 0; case_id < 10000; ++case_id) { + const double x = RandomDouble(-kRadius * 0.5, kRadius * 1.5); + const double y = RandomDouble(-kRadius * 0.5, kRadius * 1.5); + EXPECT_TRUE( + path.GetNearestPoint({x, y}, &accumulate_s, &lateral, &distance)); + + double other_accumulate_s; + double other_lateral; + double other_distance; + EXPECT_TRUE(path_no_approximation.GetNearestPoint( + {x, y}, &other_accumulate_s, &other_lateral, &other_distance)); + + EXPECT_NEAR(distance, other_distance, 1e-6); + EXPECT_NEAR(path.GetSmoothPoint(accumulate_s).DistanceTo({x, y}), distance, + 1e-6); + } + + // Test path.get_smooth_point and get_s_from_index + for (int case_id = -10; case_id <= 80; ++case_id) { + const double ratio = static_cast(case_id) / 70.0; + const double s = path.length() * ratio; + const auto index = path.GetIndexFromS(s); + + const double angle = M_PI_2 / static_cast(kNumSegments); + const double length = kRadius * sin(angle / 2.0) * 2.0; + if (s <= 0.0) { + EXPECT_EQ(0, index.id); + EXPECT_NEAR(0.0, index.offset, 1e-6); + } else if (s >= path.length()) { + EXPECT_EQ(kNumSegments, index.id); + EXPECT_NEAR(0.0, index.offset, 1e-6); + } else { + EXPECT_EQ(static_cast(s / length), index.id); + EXPECT_NEAR(fmod(s, length), index.offset, 1e-6); + } + const MapPathPoint point = path.GetSmoothPoint(s); + Vec2d expected_point = points[index.id]; + if (index.id + 1 < static_cast(points.size())) { + Vec2d direction = points[index.id + 1] - points[index.id]; + direction.Normalize(); + expected_point += direction * index.offset; + } + EXPECT_NEAR(expected_point.x(), point.x(), 1e-6); + EXPECT_NEAR(expected_point.y(), point.y(), 1e-6); + } + + // Test get_width, GetLeftWidth, GetRightWidth + double delta_s = 0.1; + double cur_s = 0.0; + while (cur_s < path.accumulated_s().back()) { + double left_width = 0.0; + double right_width = 0.0; + EXPECT_TRUE(path.GetWidth(cur_s, &left_width, &right_width)); + EXPECT_NEAR(left_width, path.GetLeftWidth(cur_s), 1e-6); + EXPECT_NEAR(right_width, path.GetRightWidth(cur_s), 1e-6); + cur_s += delta_s; + } +} + +TEST(TestSuite, hdmap_jerky_path) { + const int kNumPaths = 100; + const int kCasesPerPath = 1000; + for (int path_id = 0; path_id < kNumPaths; ++path_id) { + const int num_segments = RandomInt(50, 100); + const double average_segment_length = RandomDouble(0.5, 5.0); + const double max_y = RandomDouble(0.5, 10.0); + + std::vector points; + double sum_x = 0; + for (int i = 0; i <= num_segments; ++i) { + points.push_back(MakeMapPathPoint(sum_x, RandomDouble(-max_y, max_y))); + sum_x += RandomDouble(average_segment_length * 0.1, + average_segment_length * 1.9); + } + const double angle = RandomDouble(0, M_PI); + const double cos_angle = cos(angle); + const double sin_angle = sin(angle); + for (auto& point : points) { + const double new_x = point.x() * cos_angle - point.y() * sin_angle; + const double new_y = point.x() * sin_angle + point.y() * cos_angle; + point.set_x(new_x); + point.set_y(new_y); + } + const Path path(points, {}, 2.0); + EXPECT_EQ(path.num_points(), num_segments + 1); + EXPECT_EQ(path.num_segments(), num_segments); + EXPECT_EQ(path.path_points().size(), num_segments + 1); + EXPECT_EQ(path.lane_segments().size(), 0); + EXPECT_EQ(path.segments().size(), num_segments); + const auto* path_approximation = path.approximation(); + EXPECT_NEAR(path_approximation->max_error(), 2.0, 1e-6); + + double accumulate_s; + double lateral; + double distance; + EXPECT_TRUE( + path.GetProjection(points[0], &accumulate_s, &lateral, &distance)); + EXPECT_NEAR(accumulate_s, 0.0, 1e-6); + EXPECT_NEAR(lateral, 0.0, 1e-6); + EXPECT_NEAR(distance, 0.0, 1e-6); + EXPECT_TRUE(path.GetProjection(points[num_segments], &accumulate_s, + &lateral, &distance)); + EXPECT_NEAR(accumulate_s, path.length(), 1e-6); + EXPECT_NEAR(lateral, 0.0, 1e-6); + EXPECT_NEAR(distance, 0.0, 1e-6); + + std::vector original_points; + for (const auto& point : points) { + original_points.push_back(point); + } + const AABox2d box(original_points); + const Path path_no_approximation(points, {}); + for (int case_id = 0; case_id < kCasesPerPath; ++case_id) { + const double x = RandomDouble(box.min_x(), box.max_x()); + const double y = RandomDouble(box.min_y(), box.max_y()); + EXPECT_TRUE( + path.GetNearestPoint({x, y}, &accumulate_s, &lateral, &distance)); + + double other_accumulate_s; + double other_lateral; + double other_distance; + EXPECT_TRUE(path_no_approximation.GetNearestPoint( + {x, y}, &other_accumulate_s, &other_lateral, &other_distance)); + + EXPECT_NEAR(distance, other_distance, 1e-6); + EXPECT_NEAR(path.GetSmoothPoint(accumulate_s).DistanceTo({x, y}), + distance, 1e-6); + } + } +} + +TEST(TestSuite, hdmap_s_path) { + std::vector points; + const double kRadius = 50.0; + const int kNumSegments = 100; + for (int i = 0; i <= kNumSegments; ++i) { + if (i <= kNumSegments / 2) { + const double p = -M_PI_2 + + 2.0 * M_PI * static_cast(i) / + static_cast(kNumSegments); + points.push_back( + MakeMapPathPoint(kRadius * cos(p), kRadius * (sin(p) - 1.0))); + } else { + const double p = M_PI_2 - + 2.0 * M_PI * static_cast(i) / + static_cast(kNumSegments); + points.push_back( + MakeMapPathPoint(kRadius * cos(p), kRadius * (sin(p) + 1.0))); + } + } + + const Path path(points, {}, 2.0); + EXPECT_EQ(path.num_points(), kNumSegments + 1); + EXPECT_EQ(path.num_segments(), kNumSegments); + EXPECT_EQ(path.path_points().size(), kNumSegments + 1); + EXPECT_EQ(path.lane_segments().size(), 0); + EXPECT_EQ(path.segments().size(), kNumSegments); + const auto* path_approximation = path.approximation(); + EXPECT_NEAR(path_approximation->max_error(), 2.0, 1e-6); + EXPECT_EQ(path_approximation->original_ids().size(), 12); + EXPECT_EQ(path_approximation->original_ids()[0], 0); + EXPECT_EQ(path_approximation->original_ids()[1], 9); + EXPECT_EQ(path_approximation->original_ids()[2], 18); + EXPECT_EQ(path_approximation->original_ids()[3], 27); + EXPECT_EQ(path_approximation->original_ids()[4], 36); + EXPECT_EQ(path_approximation->original_ids()[5], 45); + EXPECT_EQ(path_approximation->original_ids()[6], 57); + EXPECT_EQ(path_approximation->original_ids()[7], 66); + EXPECT_EQ(path_approximation->original_ids()[8], 75); + EXPECT_EQ(path_approximation->original_ids()[9], 84); + EXPECT_EQ(path_approximation->original_ids()[10], 93); + EXPECT_EQ(path_approximation->original_ids()[11], 100); + const double total_length = path.accumulated_s().back(); + + const double kLargeEps = 0.1; + double accumulate_s; + double lateral; + double distance; + EXPECT_TRUE(path.GetProjection({-1, -2.0 * kRadius - 1}, &accumulate_s, + &lateral, &distance)); + EXPECT_NEAR(accumulate_s, -1.0, kLargeEps); + EXPECT_NEAR(lateral, -1.0, kLargeEps); + EXPECT_NEAR(distance, sqrt(2.0), 1e-6); + + EXPECT_TRUE(path.GetProjection({1, 2.0 * kRadius + 1}, &accumulate_s, + &lateral, &distance)); + EXPECT_NEAR(accumulate_s, total_length + 1.0, kLargeEps); + EXPECT_NEAR(lateral, 1.0, kLargeEps); + EXPECT_NEAR(distance, sqrt(2.0), 1e-6); + + const Path path_no_approximation(points, {}); + for (int case_id = 0; case_id < 10000; ++case_id) { + const double x = RandomDouble(-kRadius * 1.5, kRadius * 1.5); + const double y = RandomDouble(-kRadius * 2.5, kRadius * 2.5); + EXPECT_TRUE( + path.GetNearestPoint({x, y}, &accumulate_s, &lateral, &distance)); + + double other_accumulate_s; + double other_lateral; + double other_distance; + EXPECT_TRUE(path_no_approximation.GetNearestPoint( + {x, y}, &other_accumulate_s, &other_lateral, &other_distance)); + + EXPECT_NEAR(distance, other_distance, 1e-6); + EXPECT_NEAR(path.GetSmoothPoint(accumulate_s).DistanceTo({x, y}), distance, + 1e-6); + } +} + +TEST(TestSuite, hdmap_path_get_smooth_point) { + const double kRadius = 50.0; + const int kNumSegments = 100; + std::vector points; + for (int i = 0; i <= kNumSegments; ++i) { + if (i <= kNumSegments / 2) { + const double p = -M_PI_2 + + 2.0 * M_PI * static_cast(i) / + static_cast(kNumSegments); + points.push_back( + MakeMapPathPoint(kRadius * cos(p), kRadius * (sin(p) - 1.0))); + } else { + const double p = M_PI_2 - + 2.0 * M_PI * static_cast(i) / + static_cast(kNumSegments); + points.push_back( + MakeMapPathPoint(kRadius * cos(p), kRadius * (sin(p) + 1.0))); + } + } + const double segment_length = points[0].DistanceTo(points[1]); + std::vector original_lanes; + std::vector lanes; + for (int i = 0; i < kNumSegments; ++i) { + Lane lane; + lane.mutable_id()->set_id(ToString(i)); + auto* segment = + lane.mutable_central_curve()->add_segment()->mutable_line_segment(); + auto* point1 = segment->add_point(); + point1->set_x(points[i].x()); + point1->set_y(points[i].y()); + auto* point2 = segment->add_point(); + point2->set_x(points[i + 1].x()); + point2->set_y(points[i + 1].y()); + original_lanes.push_back(lane); + } + for (int i = 0; i < kNumSegments; ++i) { + lanes.push_back(LaneInfoConstPtr(new LaneInfo(original_lanes[i]))); + } + for (int i = 0; i <= kNumSegments; ++i) { + points[i].set_heading((i < kNumSegments) + ? (points[i + 1] - points[i]).Angle() + : (points[i] - points[i - 1]).Angle()); + if (i > 0) { + points[i].add_lane_waypoint(LaneWaypoint(lanes[i - 1], segment_length)); + } + if (i < kNumSegments) { + points[i].add_lane_waypoint(LaneWaypoint(lanes[i], 0.0)); + } + } + const Path path(points); + EXPECT_EQ(path.num_points(), kNumSegments + 1); + EXPECT_EQ(path.num_segments(), kNumSegments); + EXPECT_EQ(path.path_points().size(), kNumSegments + 1); + EXPECT_EQ(path.segments().size(), kNumSegments); + EXPECT_EQ(path.lane_segments_to_next_point().size(), kNumSegments); + + EXPECT_NEAR(path.length(), segment_length * kNumSegments, 1e-6); + for (int i = 0; i <= kNumSegments; ++i) { + MapPathPoint point = path.GetSmoothPoint(segment_length * i); + EXPECT_NEAR(point.x(), points[i].x(), 1e-6); + EXPECT_NEAR(point.y(), points[i].y(), 1e-6); + EXPECT_NEAR(point.heading(), points[i].heading(), 1e-6); + if (i == 0) { + EXPECT_EQ(point.lane_waypoints().size(), 1); + EXPECT_EQ(point.lane_waypoints()[0].lane->id().id(), ToString(i)); + EXPECT_NEAR(point.lane_waypoints()[0].s, 0.0, 1e-6); + } else if (i == kNumSegments) { + EXPECT_EQ(point.lane_waypoints().size(), 1); + EXPECT_EQ(point.lane_waypoints()[0].lane->id().id(), ToString(i - 1)); + EXPECT_NEAR(point.lane_waypoints()[0].s, segment_length, 1e-6); + } else { + EXPECT_EQ(point.lane_waypoints().size(), 2); + EXPECT_EQ(point.lane_waypoints()[0].lane->id().id(), ToString(i - 1)); + EXPECT_NEAR(point.lane_waypoints()[0].s, segment_length, 1e-6); + EXPECT_EQ(point.lane_waypoints()[1].lane->id().id(), ToString(i)); + EXPECT_NEAR(point.lane_waypoints()[1].s, 0.0, 1e-6); + } + + if (i < kNumSegments) { + for (int case_id = 0; case_id < 20; ++case_id) { + const double offset = RandomDouble(0.01, 0.99) * segment_length; + const double s = segment_length * i + offset; + point = path.GetSmoothPoint(s); + EXPECT_NEAR(point.x(), + points[i].x() + offset * cos(points[i].heading()), 1e-6); + EXPECT_NEAR(point.y(), + points[i].y() + offset * sin(points[i].heading()), 1e-6); + EXPECT_NEAR(point.heading(), points[i].heading(), 1e-6); + EXPECT_EQ(point.lane_waypoints().size(), 1); + EXPECT_EQ(point.lane_waypoints()[0].lane->id().id(), ToString(i)); + EXPECT_NEAR(point.lane_waypoints()[0].s, offset, 1e-6); + const InterpolatedIndex index = path.GetIndexFromS(s); + EXPECT_EQ(index.id, i); + EXPECT_NEAR(index.offset, offset, 1e-6); + EXPECT_NEAR(path.GetSFromIndex(index), s, 1e-6); + } + } + } + InterpolatedIndex index = path.GetIndexFromS(0.0); + EXPECT_EQ(index.id, 0); + EXPECT_NEAR(index.offset, 0, 1e-6); + EXPECT_NEAR(path.GetSFromIndex(index), 0.0, 1e-6); + index = path.GetIndexFromS(-0.1); + EXPECT_EQ(index.id, 0); + EXPECT_NEAR(index.offset, 0, 1e-6); + EXPECT_NEAR(path.GetSFromIndex(index), 0.0, 1e-6); + index = path.GetIndexFromS(segment_length * kNumSegments); + EXPECT_EQ(index.id, kNumSegments); + EXPECT_NEAR(index.offset, 0, 1e-6); + EXPECT_NEAR(path.GetSFromIndex(index), segment_length * kNumSegments, 1e-6); + index = path.GetIndexFromS(segment_length * kNumSegments + 0.2); + EXPECT_EQ(index.id, kNumSegments); + EXPECT_NEAR(index.offset, 0, 1e-6); + EXPECT_NEAR(path.GetSFromIndex(index), segment_length * kNumSegments, 1e-6); +} + +TEST(TestSuite, compute_lane_segments_from_points) { + std::vector points{ + MakeMapPathPoint(2, 0), MakeMapPathPoint(2, 1), MakeMapPathPoint(2, 2)}; + Lane lane1; + lane1.mutable_id()->set_id("id1"); + auto* curve = lane1.mutable_central_curve(); + auto* segment = curve->add_segment()->mutable_line_segment(); + *segment->add_point() = MakePoint(0, 0, 0); + *segment->add_point() = MakePoint(1, 0, 0); + LaneInfoConstPtr lane_info1(new LaneInfo(lane1)); + + Lane lane2 = lane1; + lane2.mutable_id()->set_id("id2"); + LaneInfoConstPtr lane_info2(new LaneInfo(lane2)); + + points[0].add_lane_waypoint(LaneWaypoint(lane_info1, 0.1)); + points[1].add_lane_waypoint(LaneWaypoint(lane_info1, 0.7)); + points[1].add_lane_waypoint(LaneWaypoint(lane_info2, 0.0)); + points[2].add_lane_waypoint(LaneWaypoint(lane_info2, 0.4)); + + const Path path(points); + EXPECT_EQ(path.lane_segments().size(), 2); + EXPECT_EQ(path.lane_segments()[0].lane->id().id(), "id1"); + EXPECT_NEAR(path.lane_segments()[0].start_s, 0.1, 1e-6); + EXPECT_NEAR(path.lane_segments()[0].end_s, 0.7, 1e-6); + EXPECT_EQ(path.lane_segments()[1].lane->id().id(), "id2"); + EXPECT_NEAR(path.lane_segments()[1].start_s, 0.0, 1e-6); + EXPECT_NEAR(path.lane_segments()[1].end_s, 0.4, 1e-6); +} + +TEST(TestSuite, lane_info) { + Lane lane; + lane.mutable_id()->set_id("test-id"); + auto* curve = lane.mutable_central_curve(); + auto* segment1 = curve->add_segment()->mutable_line_segment(); + auto* segment2 = curve->add_segment()->mutable_line_segment(); + *segment1->add_point() = MakePoint(0, 0, 0); + *segment1->add_point() = MakePoint(1, 0, 0); + *segment1->add_point() = MakePoint(2, 0, 0); + *segment1->add_point() = MakePoint(3, 0, 0); + *segment2->add_point() = MakePoint(3, 0, 0); + *segment2->add_point() = MakePoint(3, 1, 0); + *segment2->add_point() = MakePoint(3, 2, 0); + *lane.add_left_sample() = MakeSample(0.0, 0); + *lane.add_left_sample() = MakeSample(1.0, 10); + *lane.add_left_sample() = MakeSample(2.0, 20); + *lane.add_left_sample() = MakeSample(3.0, 30); + *lane.add_right_sample() = MakeSample(0.0, 30); + *lane.add_right_sample() = MakeSample(1.0, 20); + *lane.add_right_sample() = MakeSample(2.0, 10); + *lane.add_right_sample() = MakeSample(3.0, 0); + + // LaneInfo lane_info(lane); + LaneInfoConstPtr lane_info(new LaneInfo(lane)); + EXPECT_EQ("test-id", lane_info->id().id()); + EXPECT_EQ("test-id", lane_info->lane().id().id()); + EXPECT_EQ(6, lane_info->points().size()); + EXPECT_EQ(5, lane_info->segments().size()); + EXPECT_EQ(6, lane_info->accumulate_s().size()); + EXPECT_NEAR(lane_info->accumulate_s()[0], 0.0, 1e-6); + EXPECT_NEAR(lane_info->accumulate_s()[1], 1.0, 1e-6); + EXPECT_NEAR(lane_info->accumulate_s()[2], 2.0, 1e-6); + EXPECT_NEAR(lane_info->accumulate_s()[3], 3.0, 1e-6); + EXPECT_NEAR(lane_info->accumulate_s()[4], 4.0, 1e-6); + EXPECT_NEAR(lane_info->accumulate_s()[5], 5.0, 1e-6); + EXPECT_NEAR(lane_info->total_length(), 5.0, 1e-6); + double left_width = 0.0; + double right_width = 0.0; + double lane_width = 0.0; + double effective_width = 0.0; + lane_info->GetWidth(-0.5, &left_width, &right_width); + lane_width = lane_info->GetWidth(-0.5); + effective_width = lane_info->GetEffectiveWidth(-0.5); + EXPECT_NEAR(left_width, 0.0, 1e-6); + EXPECT_NEAR(right_width, 30.0, 1e-6); + EXPECT_NEAR(lane_width, 30.0, 1e-6); + EXPECT_NEAR(effective_width, 0.0, 1e-6); + lane_info->GetWidth(0.7, &left_width, &right_width); + lane_width = lane_info->GetWidth(0.7); + effective_width = lane_info->GetEffectiveWidth(0.7); + EXPECT_NEAR(left_width, 7.0, 1e-6); + EXPECT_NEAR(right_width, 23.0, 1e-6); + EXPECT_NEAR(lane_width, 30.0, 1e-6); + EXPECT_NEAR(effective_width, 14.0, 1e-6); + lane_info->GetWidth(2.1, &left_width, &right_width); + lane_width = lane_info->GetWidth(2.1); + effective_width = lane_info->GetEffectiveWidth(2.1); + EXPECT_NEAR(left_width, 21.0, 1e-6); + EXPECT_NEAR(right_width, 9.0, 1e-6); + EXPECT_NEAR(lane_width, 30.0, 1e-6); + EXPECT_NEAR(effective_width, 18.0, 1e-6); + lane_info->GetWidth(5.0, &left_width, &right_width); + lane_width = lane_info->GetWidth(5.0); + effective_width = lane_info->GetEffectiveWidth(5); + EXPECT_NEAR(left_width, 30.0, 1e-6); + EXPECT_NEAR(right_width, 0.0, 1e-6); + EXPECT_NEAR(lane_width, 30.0, 1e-6); + EXPECT_NEAR(effective_width, 0.0, 1e-6); +} + +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/pnc_map/pnc_map.cc b/modules/map/pnc_map/pnc_map.cc new file mode 100644 index 00000000000..279fad67771 --- /dev/null +++ b/modules/map/pnc_map/pnc_map.cc @@ -0,0 +1,481 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: pnc_map.cc + **/ + +#include "modules/map/pnc_map/pnc_map.h" + +#include +#include +#include +#include +#include +#include + +#include "google/protobuf/text_format.h" + +#include "modules/map/proto/map_id.pb.h" + +#include "modules/common/log.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/map/pnc_map/path.h" + +namespace apollo { +namespace hdmap { +namespace { +using apollo::routing::RoutingResponse; + +// Minimum error in lane segmentation. +const double kSegmentationEpsilon = 0.2; + +// Minimum distance to remove duplicated points. +const double kDuplicatedPointsEpsilon = 1e-7; + +// Maximum lateral error used in trajectory approximation. +const double kTrajectoryApproximationMaxError = 2.0; + +void RemoveDuplicates(std::vector *points) { + CHECK_NOTNULL(points); + int count = 0; + const double limit = kDuplicatedPointsEpsilon * kDuplicatedPointsEpsilon; + for (size_t i = 0; i < points->size(); ++i) { + if (count == 0 || + (*points)[i].DistanceSquareTo((*points)[count - 1]) > limit) { + (*points)[count++] = (*points)[i]; + } + } + points->resize(count); +} + +void RemoveDuplicates(std::vector *points) { + CHECK_NOTNULL(points); + int count = 0; + const double limit = kDuplicatedPointsEpsilon * kDuplicatedPointsEpsilon; + for (size_t i = 0; i < points->size(); ++i) { + if (count == 0 || + (*points)[i].DistanceSquareTo((*points)[count - 1]) > limit) { + (*points)[count++] = (*points)[i]; + } else { + (*points)[count - 1].add_lane_waypoints((*points)[i].lane_waypoints()); + } + } + points->resize(count); +} + +} // namespace + +PncMap::PncMap(const std::string &map_file) { + CHECK(!hdmap_.LoadMapFromFile(map_file)) << "Failed to load map file:" + << map_file; + AINFO << "map loaded, Map file: " << map_file; +} + +bool PncMap::ValidateRouting(const RoutingResponse &routing) const { + const int num_routes = routing.route_size(); + if (num_routes == 0) { + AERROR << "Route is empty."; + return false; + } + /* + const double kLargeEps = 1e-3; + for (int i = 0; i < num_routes; ++i) { + const auto &segment = routing.route(i); + const auto lane = hdmap_.get_lane_by_id(MakeMapId(segment.id())); + if (lane == nullptr) { + AERROR << "Can not find lane with id = " + segment.id() + "."; + return false; + } + if (segment.start_s() > segment.end_s() + kLargeEps) { + AERROR << "Segment " << i << " is empty."; + return false; + } + bool start_point_in_lane_change = false; + bool end_point_in_lane_change = false; + for (const auto &info : routing.lane_change_info()) { + if (i > info.start_route_index() && i <= info.end_route_index()) { + start_point_in_lane_change = true; + } + if (i >= info.start_route_index() && i < info.end_route_index()) { + end_point_in_lane_change = true; + } + } + if (!start_point_in_lane_change && + ((i > 0 && std::abs(segment.start_s()) > kLargeEps) || + (i == 0 && segment.start_s() < -kLargeEps))) { + AERROR << "Segment " << i << " (lane " << segment.id() + << ") should start at s = 0."; + return false; + } + if (!end_point_in_lane_change && + ((i < num_routes - 1 && + std::abs(segment.end_s() - lane->total_length()) > kLargeEps) || + (i == num_routes - 1 && + segment.end_s() > lane->total_length() + kLargeEps))) { + AERROR << "Segment " << i << " (lane " << segment.id() + << ") should end at s = " << lane->total_length() << "."; + return false; + } + } + for (int i = 0; i < num_routes - 1; ++i) { + bool is_lane_change = false; + for (const auto &info : routing.lane_change_info()) { + if (i >= info.start_route_index() && i < info.end_route_index()) { + is_lane_change = true; + break; + } + } + if (is_lane_change) { + // TODO: check lane change information. + continue; + } + const auto &segment = routing.route(i); + const auto lane = hdmap_.get_lane_by_id(MakeMapId(segment.id())); + const std::string next_id = routing.route(i + 1).id(); + bool is_successor = false; + for (const auto &other_lane_id : lane->lane().successor_id()) { + if (other_lane_id.id() == next_id) { + is_successor = true; + break; + } + } + if (!is_successor) { + AERROR << "Lane " + segment.id() + " can not connect to Lane " + next_id + + + "."; + return false; + } + } + */ + return true; +} + +bool PncMap::GetLaneSegmentsFromRouting( + const RoutingResponse &routing, const common::PointENU &point, + const double backward_length, const double forward_length, + std::vector *const route_segments) const { + if (route_segments == nullptr) { + AERROR << "the provided proute_segments is null"; + return false; + } + if (backward_length < 0.0 || forward_length < 0.0 || + backward_length + forward_length <= 0.0) { + AERROR << "backward_length[" << backward_length << "] or forward_length[" + << forward_length << "] are invalid"; + return false; + } + if (!ValidateRouting(routing)) { + AERROR << "The provided routing result is invalid"; + return false; + } + route_segments->clear(); + const double kMaxDistance = 20.0; // meters. + std::vector lanes; + const int status = hdmap_.GetLanes(point, kMaxDistance, &lanes); + if (status < 0) { + AERROR << "failed to get lane from point " << point.DebugString(); + return false; + } + // get all lanes from routing + std::unordered_set routing_lane_ids; + for (const auto &way : routing.route()) { + if (way.has_road_info()) { + for (const auto &passage_region : way.road_info().passage_region()) { + for (const auto &segment : passage_region.segment()) { + routing_lane_ids.insert(segment.id()); + } + } + } else if (way.has_junction_info()) { + for (const auto &segment : + way.junction_info().passage_region().segment()) { + routing_lane_ids.insert(segment.id()); + } + } + } + // get nearest_wayponints for current position + double min_distance = std::numeric_limits::infinity(); + std::vector nearest_waypoints; + for (const auto lane : lanes) { + if (!routing_lane_ids.count(lane->id().id())) { + continue; + } + double distance = 0.0; + common::PointENU map_point = + lane->GetNearestPoint({point.x(), point.y()}, &distance); + if (distance < min_distance) { + min_distance = distance; + double s = 0.0; + double l = 0.0; + if (!lane->GetProjection({map_point.x(), map_point.y()}, &s, &l)) { + AERROR << "Failed to get projection for map_point " + << map_point.DebugString(); + return false; + } + nearest_waypoints.emplace_back(lane, s); + } + } + if (nearest_waypoints.empty()) { + AERROR << "Failed to find point on routing. Point:" << point.DebugString(); + return false; + } + + const auto &start_waypoint = nearest_waypoints.back(); + double min_overlap_distance = std::numeric_limits::infinity(); + double proj_s = 0.0; + double accumulate_s = 0.0; + LaneSegments connected_lanes; + LaneSegments cropped_lanes; + bool found_region = false; + for (const auto &way : routing.route()) { + if (!way.has_road_info()) { // skip checking junction_info + continue; + } + for (const auto &passage_region : way.road_info().passage_region()) { + if (passage_region.segment().empty()) { + continue; + } + if (!found_region) { + bool on_current_region = false; + for (const auto &waypoint : nearest_waypoints) { + for (const auto &segment : passage_region.segment()) { + if (segment.id() == waypoint.lane->id().id()) { + on_current_region = true; + } + } + } + if (!on_current_region) { + break; + } else { + found_region = true; + } + } + for (const auto &lane_segment : passage_region.segment()) { + const double length = lane_segment.end_s() - lane_segment.start_s(); + auto lane = hdmap_.GetLaneById(MakeMapId(lane_segment.id())); + if (!lane) { + AERROR << "Failed to fine lane " << lane_segment.id(); + return false; + } + connected_lanes.emplace_back(lane, lane_segment.start_s(), + lane_segment.end_s()); + if (lane_segment.id() == start_waypoint.lane->id().id()) { + double overlap_distance = 0.0; + if (start_waypoint.s < lane_segment.start_s()) { + overlap_distance = lane_segment.start_s() - start_waypoint.s; + } else if (start_waypoint.s > lane_segment.end_s()) { + overlap_distance = start_waypoint.s - lane_segment.end_s(); + } + if (overlap_distance < min_overlap_distance) { + min_overlap_distance = overlap_distance; + proj_s = + accumulate_s + + std::max(0.0, std::min(length, start_waypoint.s - + lane_segment.start_s())); + } + } + accumulate_s += length; + } + } + } + if (min_overlap_distance < std::numeric_limits::infinity()) { + LaneSegments truncated_segments; + if (TruncateLaneSegments(connected_lanes, proj_s - backward_length, + proj_s + forward_length, &truncated_segments)) { + route_segments->emplace_back(std::move(truncated_segments)); + return true; + } else { + AERROR << "Failed to truncate lane segments"; + return false; + } + } else { + AERROR << "Failed to get lanes from routing"; + return false; + } +} + +bool PncMap::TruncateLaneSegments( + const LaneSegments &segments, double start_s, double end_s, + LaneSegments *const truncated_segments) const { + if (segments.empty()) { + AERROR << "The input segments is empty"; + return false; + } + if (truncated_segments == nullptr) { + AERROR << "the output truncated segments buffer is null"; + return false; + } + if (start_s >= end_s) { + AERROR << "start_s(" << start_s << " >= end_s(" << end_s << ")"; + return false; + } + const double kRouteEpsilon = 1e-3; + // Extend the trajectory towards the start of the trajectory. + if (start_s < 0) { + const auto &first_segment = segments[0]; + auto lane = first_segment.lane; + double s = first_segment.start_s; + double extend_s = -start_s; + std::vector extended_lane_segments; + while (extend_s > kRouteEpsilon) { + if (s <= kRouteEpsilon) { + if (lane->lane().predecessor_id_size() == 0) { + break; + } + const auto &next_lane_id = lane->lane().predecessor_id(0); + lane = hdmap_.GetLaneById(next_lane_id); + if (lane == nullptr) { + break; + } + s = lane->total_length(); + } else { + const double length = std::min(s, extend_s); + extended_lane_segments.emplace_back(lane, s - length, s); + extend_s -= length; + s -= length; + } + } + truncated_segments->insert(truncated_segments->end(), + extended_lane_segments.rbegin(), + extended_lane_segments.rend()); + } + double router_s = 0; + for (const auto &lane_segment : segments) { + const double adjusted_start_s = std::max( + start_s - router_s + lane_segment.start_s, lane_segment.start_s); + const double adjusted_end_s = + std::min(end_s - router_s + lane_segment.start_s, lane_segment.end_s); + if (adjusted_start_s < adjusted_end_s) { + truncated_segments->emplace_back(lane_segment.lane, adjusted_start_s, + adjusted_end_s); + } + router_s += (lane_segment.end_s - lane_segment.start_s); + if (router_s > end_s) { + break; + } + } + // Extend the trajectory towards the end of the trajectory. + if (router_s < end_s) { + const auto &last_segment = segments.back(); + std::string last_lane_id = last_segment.lane->id().id(); + double last_s = last_segment.end_s; + while (router_s < end_s - kRouteEpsilon) { + const auto lane = hdmap_.GetLaneById(MakeMapId(last_lane_id)); + if (lane == nullptr) { + break; + } + if (last_s >= lane->total_length() - kRouteEpsilon) { + if (lane->lane().successor_id_size() == 0) { + break; + } + last_lane_id = lane->lane().successor_id(0).id(); + last_s = 0.0; + } else { + const double length = + std::min(end_s - router_s, lane->total_length() - last_s); + truncated_segments->emplace_back(lane, last_s, last_s + length); + router_s += length; + last_s += length; + } + } + } + return true; +} + +void PncMap::AppendLaneToPoints(LaneInfoConstPtr lane, const double start_s, + const double end_s, + std::vector *const points) { + if (points == nullptr || start_s >= end_s) { + return; + } + double accumulate_s = 0.0; + for (size_t i = 0; i < lane->points().size(); ++i) { + if (accumulate_s >= start_s && accumulate_s <= end_s) { + points->emplace_back(lane->points()[i], lane->headings()[i], + LaneWaypoint(lane, accumulate_s)); + } + if (i < lane->segments().size()) { + const auto &segment = lane->segments()[i]; + const double next_accumulate_s = accumulate_s + segment.length(); + if (start_s > accumulate_s && start_s < next_accumulate_s) { + points->emplace_back( + segment.start() + + segment.unit_direction() * (start_s - accumulate_s), + lane->headings()[i], LaneWaypoint(lane, start_s)); + } + if (end_s > accumulate_s && end_s < next_accumulate_s) { + points->emplace_back( + segment.start() + segment.unit_direction() * (end_s - accumulate_s), + lane->headings()[i], LaneWaypoint(lane, end_s)); + } + accumulate_s = next_accumulate_s; + } + if (accumulate_s > end_s) { + break; + } + } +} + +bool PncMap::CreatePathFromRouting(const RoutingResponse &routing, + Path *const path) const { + LaneSegments segments; + for (const auto &way : routing.route()) { + if (way.has_road_info() && !way.road_info().passage_region().empty()) { + for (const auto &segment : way.road_info().passage_region(0).segment()) { + auto lane_ptr = hdmap_.GetLaneById(MakeMapId(segment.id())); + if (!lane_ptr) { + AERROR << "Failed to fine lane: " << segment.id(); + return false; + } + segments.emplace_back(lane_ptr, segment.start_s(), segment.end_s()); + } + } else if (way.has_junction_info()) { + for (const auto &segment : + way.junction_info().passage_region().segment()) { + auto lane_ptr = hdmap_.GetLaneById(MakeMapId(segment.id())); + if (!lane_ptr) { + AERROR << "Failed to fine lane: " << segment.id(); + return false; + } + segments.emplace_back(lane_ptr, segment.start_s(), segment.end_s()); + } + } + } + return CreatePathFromLaneSegments(segments, path); +} + +bool PncMap::CreatePathFromLaneSegments(const LaneSegments &segments, + Path *const path) { + std::vector points; + for (const auto &segment : segments) { + AppendLaneToPoints(segment.lane, segment.start_s, segment.end_s, &points); + } + RemoveDuplicates(&points); + + if (points.size() < 2) { + AWARN << "Cannot create path from " << points.size() + << " points. Expecting more than 2."; + return false; + } + + *path = Path(points, segments, kTrajectoryApproximationMaxError); + return true; +} + +const HDMap &PncMap::HDMap() const { return hdmap_; } + +} // namespace hdmap +} // namespace apollo diff --git a/modules/map/pnc_map/pnc_map.h b/modules/map/pnc_map/pnc_map.h new file mode 100644 index 00000000000..9ad8b3a790e --- /dev/null +++ b/modules/map/pnc_map/pnc_map.h @@ -0,0 +1,78 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: pnc_map.h + **/ + +#ifndef MODULES_MAP_PNC_MAP_PNC_MAP_H_ +#define MODULES_MAP_PNC_MAP_PNC_MAP_H_ + +#include +#include +#include +#include + +#include "modules/routing/proto/routing.pb.h" + +#include "modules/map/hdmap/hdmap.h" +#include "modules/map/pnc_map/path.h" + +namespace apollo { +namespace hdmap { + +using LaneSegments = std::vector; + +class PncMap { + public: + PncMap() = default; + virtual ~PncMap() = default; + explicit PncMap(const std::string &map_file); + + const hdmap::HDMap& HDMap() const; + + /** + * @brief Warning: this function only works if there is no change lane in + *routing. + **/ + bool CreatePathFromRouting(const routing::RoutingResponse &routing, + Path *const path) const; + + bool GetLaneSegmentsFromRouting( + const routing::RoutingResponse &routing, + const common::PointENU &point, + const double backward_length, const double forward_length, + std::vector *const route_segments) const; + + static bool CreatePathFromLaneSegments(const LaneSegments &segments, + Path *const path); + + private: + bool TruncateLaneSegments(const LaneSegments &segments, + double start_s, double end_s, + LaneSegments *const truncated_segments) const; + + bool ValidateRouting(const routing::RoutingResponse &routing) const; + static void AppendLaneToPoints( + LaneInfoConstPtr lane, const double start_s, const double end_s, + std::vector *const points); + hdmap::HDMap hdmap_; +}; + +} // namespace hdmap +} // namespace apollo + +#endif // MODULES_MAP_PNC_MAP_PNC_MAP_H_ diff --git a/modules/map/pnc_map/testdata/example_intersection.bin b/modules/map/pnc_map/testdata/example_intersection.bin new file mode 100644 index 00000000000..15db6cc86e0 Binary files /dev/null and b/modules/map/pnc_map/testdata/example_intersection.bin differ diff --git a/modules/map/pnc_map/testdata/example_intersection.graph b/modules/map/pnc_map/testdata/example_intersection.graph new file mode 100644 index 00000000000..a51fd64b51f --- /dev/null +++ b/modules/map/pnc_map/testdata/example_intersection.graph @@ -0,0 +1,1460 @@ +header { + version: "fake" + date: "2016-5-24" +} +crosswalk { + id { + id: "cross-l1-l2" + } + polygon { + point { + x: -10 + y: -11 + } + point { + x: 10 + y: -11 + } + point { + x: 10 + y: -9 + } + point { + x: -10 + y: -9 + } + } + overlap_id { + id: "l1-and-cross-l1-l2" + } + overlap_id { + id: "l2-and-cross-l1-l2" + } + overlap_id { + id: "int-l1-l2-uturn-and-cross-l1-l2-part1" + } + overlap_id { + id: "int-l1-l2-uturn-and-cross-l1-l2-part2" + } +} +junction { + id { + id: "i1" + } + polygon { + point { + x: -10 + y: -10 + } + point { + x: 10 + y: -10 + } + point { + x: 10 + y: 10 + } + point { + x: -10 + y: 10 + } + } + overlap_id { + id: "l1-and-i1" + } + overlap_id { + id: "l2-and-i1" + } + overlap_id { + id: "int-l1-l8-and-i1" + } + overlap_id { + id: "stopsign-1-and-i1" + } + overlap_id { + id: "stopsign-2-and-i1" + } + overlap_id { + id: "stopsign-3-and-i1" + } +} +lane { + id { + id: "l1" + } + central_curve { + segment { + line_segment { + point { + x: 2 + y: -200 + } + point { + x: 2 + y: -10 + } + } + } + } + left_boundary { + curve { + segment { + line_segment { + point { + x: 0.1 + y: -200 + } + point { + x: 0.1 + y: -10 + } + } + } + } + type: CURB + } + right_boundary { + curve { + segment { + line_segment { + point { + x: 3.9 + y: -200 + } + point { + x: 3.9 + y: -10 + } + } + } + } + type: CURB + } + width: 3.8 + length: 190 + speed_limit: 20 + overlap_id { + id: "l1-and-cross-l1-l2" + } + overlap_id { + id: "l1-and-i1" + } + successor_id { + id: "int-l1-l8" + } + successor_id { + id: "int-l1-l4" + } + successor_id { + id: "int-l1-l6" + } + successor_id { + id: "int-l1-l2-uturn" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 10 + width: 1.9 + } + right_sample { + s: 10 + width: 1.9 + } +} +lane { + id { + id: "l2" + } + central_curve { + segment { + line_segment { + point { + x: -2 + y: -10 + } + point { + x: -2 + y: -200 + } + } + } + } + left_boundary { + curve { + segment { + line_segment { + point { + x: -0.1 + y: -10 + } + point { + x: -0.1 + y: -200 + } + } + } + } + type: CURB + } + right_boundary { + curve { + segment { + line_segment { + point { + x: -3.9 + y: -10 + } + point { + x: -3.9 + y: -200 + } + } + } + } + type: CURB + } + width: 3.8 + length: 190 + speed_limit: 20 + overlap_id { + id: "l2-and-cross-l1-l2" + } + overlap_id { + id: "l2-and-i1" + } + predecessor_id { + id: "int-l5-l2" + } + predecessor_id { + id: "int-l7-l2" + } + predecessor_id { + id: "int-l3-l2" + } + predecessor_id { + id: "int-l1-l2-uturn" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 10 + width: 1.9 + } + right_sample { + s: 10 + width: 1.9 + } +} +lane { + id { + id: "l3" + } + central_curve { + segment { + line_segment { + point { + x: -200 + y: -2 + } + point { + x: -10 + y: -2 + } + } + } + } + left_boundary { + curve { + segment { + line_segment { + point { + x: -200 + y: -0.1 + } + point { + x: -10 + y: -0.1 + } + } + } + } + type: CURB + } + right_boundary { + curve { + segment { + line_segment { + point { + x: -200 + y: -3.9 + } + point { + x: -10 + y: -3.9 + } + } + } + } + type: CURB + } + width: 3.8 + length: 190 + speed_limit: 20 + successor_id { + id: "int-l3-l2" + } + successor_id { + id: "int-l3-l6" + } + successor_id { + id: "int-l3-l8" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 10 + width: 1.9 + } + right_sample { + s: 10 + width: 1.9 + } +} +lane { + id { + id: "l4" + } + central_curve { + segment { + line_segment { + point { + x: -10 + y: 2 + } + point { + x: -200 + y: 2 + } + } + } + } + left_boundary { + curve { + segment { + line_segment { + point { + x: -10 + y: 0.1 + } + point { + x: -200 + y: 0.1 + } + } + } + } + type: CURB + } + right_boundary { + curve { + segment { + line_segment { + point { + x: -10 + y: 3.9 + } + point { + x: -200 + y: 3.9 + } + } + } + } + type: CURB + } + width: 3.8 + length: 190 + speed_limit: 20 + predecessor_id { + id: "int-l5-l4" + } + predecessor_id { + id: "int-l1-l4" + } + predecessor_id { + id: "int-l7-l4" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 10 + width: 1.9 + } + right_sample { + s: 10 + width: 1.9 + } +} +lane { + id { + id: "l5" + } + central_curve { + segment { + line_segment { + point { + x: -2 + y: 200 + } + point { + x: -2 + y: 10 + } + } + } + } + left_boundary { + curve { + segment { + line_segment { + point { + x: -0.1 + y: 200 + } + point { + x: -0.1 + y: 10 + } + } + } + } + type: CURB + } + right_boundary { + curve { + segment { + line_segment { + point { + x: -3.9 + y: 200 + } + point { + x: -3.9 + y: 10 + } + } + } + } + type: CURB + } + width: 3.8 + length: 190 + speed_limit: 20 + successor_id { + id: "int-l5-l4" + } + successor_id { + id: "int-l5-l8" + } + successor_id { + id: "int-l5-l2" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 10 + width: 1.9 + } + right_sample { + s: 10 + width: 1.9 + } +} +lane { + id { + id: "l6" + } + central_curve { + segment { + line_segment { + point { + x: 2 + y: 10 + } + point { + x: 2 + y: 200 + } + } + } + } + left_boundary { + curve { + segment { + line_segment { + point { + x: 0.1 + y: 10 + } + point { + x: 0.1 + y: 200 + } + } + } + } + type: CURB + } + right_boundary { + curve { + segment { + line_segment { + point { + x: 3.9 + y: 10 + } + point { + x: 3.9 + y: 200 + } + } + } + } + type: CURB + } + width: 3.8 + length: 190 + speed_limit: 20 + predecessor_id { + id: "int-l1-l6" + } + predecessor_id { + id: "int-l7-l6" + } + predecessor_id { + id: "int-l3-l6" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 10 + width: 1.9 + } + right_sample { + s: 10 + width: 1.9 + } +} +lane { + id { + id: "l7" + } + central_curve { + segment { + line_segment { + point { + x: 200 + y: 2 + } + point { + x: 10 + y: 2 + } + } + } + } + left_boundary { + curve { + segment { + line_segment { + point { + x: 200 + y: 0.1 + } + point { + x: 10 + y: 0.1 + } + } + } + } + type: CURB + } + right_boundary { + curve { + segment { + line_segment { + point { + x: 200 + y: 3.9 + } + point { + x: 10 + y: 3.9 + } + } + } + } + type: CURB + } + width: 3.8 + length: 190 + speed_limit: 20 + successor_id { + id: "int-l7-l6" + } + successor_id { + id: "int-l7-l2" + } + successor_id { + id: "int-l7-l4" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 10 + width: 1.9 + } + right_sample { + s: 10 + width: 1.9 + } +} +lane { + id { + id: "l8" + } + central_curve { + segment { + line_segment { + point { + x: 10 + y: -2 + } + point { + x: 200 + y: -2 + } + } + } + } + left_boundary { + curve { + segment { + line_segment { + point { + x: 10 + y: -0.1 + } + point { + x: 200 + y: -0.1 + } + } + } + } + type: CURB + } + right_boundary { + curve { + segment { + line_segment { + point { + x: 10 + y: -3.9 + } + point { + x: 200 + y: -3.9 + } + } + } + } + type: CURB + } + width: 3.8 + length: 190 + speed_limit: 20 + predecessor_id { + id: "int-l5-l8" + } + predecessor_id { + id: "int-l1-l8" + } + predecessor_id { + id: "int-l3-l8" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 10 + width: 1.9 + } + right_sample { + s: 10 + width: 1.9 + } +} +lane { + id { + id: "int-l5-l4" + } + central_curve { + segment { + arc { + center { + x: -10 + y: 10 + } + radius: 8 + start_angle: 0 + end_angle: -1.57079632679 + } + } + } + length: 12.566370614352 + speed_limit: 20 + predecessor_id { + id: "l5" + } + successor_id { + id: "l4" + } + type: CITY_DRIVING + turn: RIGHT_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +lane { + id { + id: "int-l5-l8" + } + central_curve { + segment { + arc { + center { + x: 10 + y: 10 + } + radius: 12 + start_angle: 3.14159265359 + end_angle: 4.71238898038 + } + } + } + length: 18.849555921519997 + speed_limit: 20 + predecessor_id { + id: "l5" + } + successor_id { + id: "l8" + } + type: CITY_DRIVING + turn: LEFT_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +lane { + id { + id: "int-l5-l2" + } + central_curve { + segment { + line_segment { + point { + x: -2 + y: 10 + } + point { + x: -2 + y: -10 + } + } + } + } + length: 20 + speed_limit: 20 + predecessor_id { + id: "l5" + } + successor_id { + id: "l2" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +lane { + id { + id: "int-l1-l8" + } + central_curve { + segment { + arc { + center { + x: 10 + y: -10 + } + radius: 8 + start_angle: 3.14159265359 + end_angle: 1.57079632679 + } + } + } + length: 12.566370614352 + speed_limit: 20 + overlap_id { + id: "int-l1-l8-and-i1" + } + predecessor_id { + id: "l1" + } + successor_id { + id: "l8" + } + type: CITY_DRIVING + turn: RIGHT_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +lane { + id { + id: "int-l1-l4" + } + central_curve { + segment { + arc { + center { + x: -10 + y: -10 + } + radius: 12 + start_angle: 0 + end_angle: 1.57079632679 + } + } + } + length: 18.849555921519997 + speed_limit: 20 + predecessor_id { + id: "l1" + } + successor_id { + id: "l4" + } + type: CITY_DRIVING + turn: LEFT_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +lane { + id { + id: "int-l1-l6" + } + central_curve { + segment { + line_segment { + point { + x: 2 + y: -10 + } + point { + x: 2 + y: 10 + } + } + } + } + length: 20 + speed_limit: 20 + predecessor_id { + id: "l1" + } + successor_id { + id: "l6" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +lane { + id { + id: "int-l7-l6" + } + central_curve { + segment { + arc { + center { + x: 10 + y: 10 + } + radius: 8 + start_angle: -1.57079632679 + end_angle: -3.14159265359 + } + } + } + length: 12.566370614352 + speed_limit: 20 + predecessor_id { + id: "l7" + } + successor_id { + id: "l6" + } + type: CITY_DRIVING + turn: RIGHT_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +lane { + id { + id: "int-l7-l2" + } + central_curve { + segment { + arc { + center { + x: 10 + y: -10 + } + radius: 12 + start_angle: 1.57079632679 + end_angle: 3.14159265359 + } + } + } + length: 18.849555921519997 + speed_limit: 20 + predecessor_id { + id: "l7" + } + successor_id { + id: "l2" + } + type: CITY_DRIVING + turn: LEFT_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +lane { + id { + id: "int-l7-l4" + } + central_curve { + segment { + line_segment { + point { + x: 10 + y: 2 + } + point { + x: -10 + y: 2 + } + } + } + } + length: 20 + speed_limit: 20 + predecessor_id { + id: "l7" + } + successor_id { + id: "l4" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +lane { + id { + id: "int-l3-l2" + } + central_curve { + segment { + arc { + center { + x: -10 + y: -10 + } + radius: 8 + start_angle: 1.57079632679 + end_angle: 0 + } + } + } + length: 12.566370614352 + speed_limit: 20 + predecessor_id { + id: "l3" + } + successor_id { + id: "l2" + } + type: CITY_DRIVING + turn: RIGHT_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +lane { + id { + id: "int-l3-l6" + } + central_curve { + segment { + arc { + center { + x: -10 + y: 10 + } + radius: 12 + start_angle: -1.57079632679 + end_angle: 0 + } + } + } + length: 18.849555921519997 + speed_limit: 20 + predecessor_id { + id: "l3" + } + successor_id { + id: "l6" + } + type: CITY_DRIVING + turn: LEFT_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +lane { + id { + id: "int-l3-l8" + } + central_curve { + segment { + line_segment { + point { + x: -10 + y: -2 + } + point { + x: 10 + y: -2 + } + } + } + } + length: 20 + speed_limit: 20 + predecessor_id { + id: "l3" + } + successor_id { + id: "l8" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +lane { + id { + id: "int-l1-l2-uturn" + } + central_curve { + segment { + arc { + center { + x: 0 + y: -10 + } + radius: 2 + start_angle: 0 + end_angle: 3.1415926535897931 + } + } + } + length: 6.28318530716 + speed_limit: 20 + overlap_id { + id: "int-l1-l2-uturn-and-cross-l1-l2-part1" + } + overlap_id { + id: "int-l1-l2-uturn-and-cross-l1-l2-part2" + } + predecessor_id { + id: "l1" + } + successor_id { + id: "l2" + } + type: CITY_DRIVING + turn: U_TURN + left_sample { + s: 5 + width: 1.9 + } + right_sample { + s: 5 + width: 1.9 + } +} +signal { + id { + id: "tl-l1" + } + boundary { + point { + x: 9 + y: 10 + } + point { + x: 9.2 + y: 10 + } + point { + x: 9.2 + y: 10.2 + } + point { + x: 9 + y: 10.2 + } + } + stop_line { + segment { + line_segment { + point { + x: -10 + y: -12.2 + } + point { + x: 10 + y: -12.2 + } + } + } + } +} +stop_sign { + id { + id: "stopsign-1" + } + stop_line { + segment { + line_segment { + point { + x: -10 + y: 12.2 + } + point { + x: 0 + y: 12.2 + } + } + } + } + overlap_id { + id: "stopsign-1-and-i1" + } +} +stop_sign { + id { + id: "stopsign-2" + } + stop_line { + segment { + line_segment { + point { + x: -12.2 + y: -10 + } + point { + x: -12.2 + y: 0 + } + } + } + } + overlap_id { + id: "stopsign-2-and-i1" + } +} +stop_sign { + id { + id: "stopsign-3" + } + stop_line { + segment { + line_segment { + point { + x: 12.2 + y: 0 + } + point { + x: 12.2 + y: 10 + } + } + } + } + overlap_id { + id: "stopsign-3-and-i1" + } +} +overlap { + id { + id: "l1-and-cross-l1-l2" + } + object { + id { + id: "l1" + } + lane_overlap_info { + start_s: 187.8 + end_s: 189.8 + } + } + object { + id { + id: "cross-l1-l2" + } + } +} +overlap { + id { + id: "l2-and-cross-l1-l2" + } + object { + id { + id: "l2" + } + lane_overlap_info { + start_s: 0.2 + end_s: 2.2 + } + } + object { + id { + id: "cross-l1-l2" + } + } +} +overlap { + id { + id: "l1-and-i1" + } + object { + id { + id: "l1" + } + lane_overlap_info { + start_s: 189 + end_s: 190 + } + } + object { + id { + id: "i1" + } + } +} +overlap { + id { + id: "l2-and-i1" + } + object { + id { + id: "l2" + } + lane_overlap_info { + start_s: 0 + end_s: 1 + } + } + object { + id { + id: "i1" + } + } +} +overlap { + id { + id: "int-l1-l8-and-i1" + } + object { + id { + id: "int-l1-l8" + } + lane_overlap_info { + start_s: 0 + end_s: 5 + } + } + object { + id { + id: "i1" + } + } +} +overlap { + id { + id: "int-l1-l2-uturn-and-cross-l1-l2-part1" + } + object { + id { + id: "int-l1-l2-uturn" + } + lane_overlap_info { + start_s: 0 + end_s: 1.3 + } + } + object { + id { + id: "cross-l1-l2" + } + } +} +overlap { + id { + id: "int-l1-l2-uturn-and-cross-l1-l2-part2" + } + object { + id { + id: "int-l1-l2-uturn" + } + lane_overlap_info { + start_s: 4.7 + end_s: 6 + } + } + object { + id { + id: "cross-l1-l2" + } + } +} +overlap { + id { + id: "stopsign-1-and-i1" + } + object { + id { + id: "stopsign-1" + } + } + object { + id { + id: "i1" + } + } +} +overlap { + id { + id: "stopsign-2-and-i1" + } + object { + id { + id: "stopsign-2" + } + } + object { + id { + id: "i1" + } + } +} +overlap { + id { + id: "stopsign-3-and-i1" + } + object { + id { + id: "stopsign-3" + } + } + object { + id { + id: "i1" + } + } +} diff --git a/modules/map/proto/BUILD b/modules/map/proto/BUILD new file mode 100644 index 00000000000..2d3ee778c0f --- /dev/null +++ b/modules/map/proto/BUILD @@ -0,0 +1,34 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_proto_library( + name = "map_proto", + deps = [ + ":map_proto_lib", + ], +) + +proto_library( + name = "map_proto_lib", + srcs = [ + "map.proto", + "map_clear_area.proto", + "map_crosswalk.proto", + "map_geometry.proto", + "map_id.proto", + "map_junction.proto", + "map_lane.proto", + "map_overlap.proto", + "map_road.proto", + "map_signal.proto", + "map_speed_bump.proto", + "map_stop_sign.proto", + "map_yield_sign.proto", + ], + deps = [ + "//modules/common/proto:common_proto_lib", + ], +) + +cpplint() diff --git a/modules/map/proto/map.proto b/modules/map/proto/map.proto new file mode 100644 index 00000000000..e8906844b69 --- /dev/null +++ b/modules/map/proto/map.proto @@ -0,0 +1,51 @@ +syntax = "proto2"; + +package apollo.hdmap; + +import "modules/map/proto/map_clear_area.proto"; +import "modules/map/proto/map_crosswalk.proto"; +import "modules/map/proto/map_junction.proto"; +import "modules/map/proto/map_lane.proto"; +import "modules/map/proto/map_overlap.proto"; +import "modules/map/proto/map_signal.proto"; +import "modules/map/proto/map_speed_bump.proto"; +import "modules/map/proto/map_stop_sign.proto"; +import "modules/map/proto/map_yield_sign.proto"; +import "modules/map/proto/map_road.proto"; + +// This message defines how we project the ellipsoidal Earth surface to a plane. +message Projection { + // PROJ.4 setting: + // "+proj=tmerc +lat_0={origin.lat} +lon_0={origin.lon} +k={scale_factor} +ellps=WGS84 +no_defs" + optional string proj = 1; +} + +message Header { + optional bytes version = 1; + optional bytes date = 2; + optional Projection projection = 3; + optional bytes district = 4; + optional bytes generation = 5; + optional bytes rev_major = 6; + optional bytes rev_minor = 7; + optional double left = 8; + optional double top = 9; + optional double right = 10; + optional double bottom = 11; + optional bytes vendor = 12; +} + +message Map { + optional Header header = 1; + + repeated Crosswalk crosswalk = 2; + repeated Junction junction = 3; + repeated Lane lane = 4; + repeated StopSign stop_sign = 5; + repeated Signal signal = 6; + repeated YieldSign yield = 7; + repeated Overlap overlap = 8; + repeated ClearArea clear_area = 9; + repeated SpeedBump speed_bump = 10; + repeated Road road = 11; +} diff --git a/modules/map/proto/map_clear_area.proto b/modules/map/proto/map_clear_area.proto new file mode 100644 index 00000000000..1221b790156 --- /dev/null +++ b/modules/map/proto/map_clear_area.proto @@ -0,0 +1,14 @@ +syntax = "proto2"; + +package apollo.hdmap; + +import "modules/map/proto/map_id.proto"; +import "modules/map/proto/map_geometry.proto"; + +// A clear area means in which stopping car is prohibited + +message ClearArea { + optional Id id = 1; + repeated Id overlap_id = 2; + optional Polygon polygon = 3; +} diff --git a/modules/map/proto/map_crosswalk.proto b/modules/map/proto/map_crosswalk.proto new file mode 100644 index 00000000000..0d6ec7888ca --- /dev/null +++ b/modules/map/proto/map_crosswalk.proto @@ -0,0 +1,15 @@ +syntax = "proto2"; + +package apollo.hdmap; + +import "modules/map/proto/map_geometry.proto"; +import "modules/map/proto/map_id.proto"; + +// Crosswalk is a place designated for pedestrians to cross a road. +message Crosswalk { + optional Id id = 1; + + optional Polygon polygon = 2; + + repeated Id overlap_id = 3; +} diff --git a/modules/map/proto/map_geometry.proto b/modules/map/proto/map_geometry.proto new file mode 100644 index 00000000000..b7f14b8033f --- /dev/null +++ b/modules/map/proto/map_geometry.proto @@ -0,0 +1,31 @@ +syntax = "proto2"; + +import "modules/common/proto/geometry.proto"; + +package apollo.hdmap; + +// Polygon, not necessary convex. +message Polygon { + repeated apollo.common.PointENU point = 1; +} + +// Straight line segment. +message LineSegment { + repeated apollo.common.PointENU point = 1; +} + +// Generalization of a line. +message CurveSegment { + oneof curve_type { + LineSegment line_segment = 1; + } + optional double s = 6; // start position (s-coordinate) + optional apollo.common.PointENU start_position = 7; + optional double heading = 8; // start orientation + optional double length = 9; +} + +// An object similar to a line but that need not be straight. +message Curve { + repeated CurveSegment segment = 1; +} diff --git a/modules/map/proto/map_id.proto b/modules/map/proto/map_id.proto new file mode 100644 index 00000000000..176acef6496 --- /dev/null +++ b/modules/map/proto/map_id.proto @@ -0,0 +1,8 @@ +syntax = "proto2"; + +package apollo.hdmap; + +// Global unique ids for all objects (include lanes, junctions, overlaps, etc). +message Id { + optional string id = 1; +} diff --git a/modules/map/proto/map_junction.proto b/modules/map/proto/map_junction.proto new file mode 100644 index 00000000000..4505c8c7357 --- /dev/null +++ b/modules/map/proto/map_junction.proto @@ -0,0 +1,15 @@ +syntax = "proto2"; + +package apollo.hdmap; + +import "modules/map/proto/map_id.proto"; +import "modules/map/proto/map_geometry.proto"; + +// An junction is the junction at-grade of two or more roads crossing. +message Junction { + optional Id id = 1; + + optional Polygon polygon = 2; + + repeated Id overlap_id = 3; +} diff --git a/modules/map/proto/map_lane.proto b/modules/map/proto/map_lane.proto new file mode 100644 index 00000000000..db73deae928 --- /dev/null +++ b/modules/map/proto/map_lane.proto @@ -0,0 +1,101 @@ +syntax = "proto2"; + +package apollo.hdmap; + +import "modules/map/proto/map_id.proto"; +import "modules/map/proto/map_geometry.proto"; + +message LaneBoundaryType { + enum Type { + UNKNOWN = 0; + DOTTED_YELLOW = 1; + DOTTED_WHITE = 2; + SOLID_YELLOW = 3; + SOLID_WHITE = 4; + DOUBLE_YELLOW = 5; + CURB = 6; + }; + // Offset relative to the starting point of boundary + optional double s = 1; + // support multiple types + repeated Type types = 2; +} + +message LaneBoundary { + optional Curve curve = 1; + + optional double length = 2; + // indicate whether the lane boundary exists in real world + optional bool virtual = 3; + // in ascending order of s + repeated LaneBoundaryType boundary_type = 4; +} + +// Association between central point to closest boundary. +message LaneSampleAssociation { + optional double s = 1; + optional double width = 2; +} + +// A lane is part of a roadway, that is designated for use by a single line of vehicles. +// Most public roads (include highways) have more than two lanes. +message Lane { + optional Id id = 1; + + // Central lane as reference trajectory, not necessary to be the geometry central. + optional Curve central_curve = 2; + + // Lane boundary curve. + optional LaneBoundary left_boundary = 3; + optional LaneBoundary right_boundary = 4; + + // in meters. + optional double length = 5; + + // Speed limit of the lane, in meters per second. + optional double speed_limit = 6; + + repeated Id overlap_id = 7; + + // All lanes can be driving into (or from). + repeated Id predecessor_id = 8; + repeated Id successor_id = 9; + + // Neighbor lanes on the same direction. + repeated Id left_neighbor_forward_lane_id = 10; + repeated Id right_neighbor_forward_lane_id = 11; + + enum LaneType { + NONE = 1; + CITY_DRIVING = 2; + BIKING = 3; + SIDEWALK = 4; + PARKING = 5; + }; + optional LaneType type = 12; + + enum LaneTurn { + NO_TURN = 1; + LEFT_TURN = 2; + RIGHT_TURN = 3; + U_TURN = 4; + }; + optional LaneTurn turn = 13; + + repeated Id left_neighbor_reverse_lane_id = 14; + repeated Id right_neighbor_reverse_lane_id = 15; + + optional Id junction_id = 16; + + // Association between central point to closest boundary. + repeated LaneSampleAssociation left_sample = 17; + repeated LaneSampleAssociation right_sample = 18; + + enum LaneDirection { + FORWARD = 1; + BACKWARD = 2; + BIDIRECTION = 3; + } + optional LaneDirection direction = 19; +} + diff --git a/modules/map/proto/map_overlap.proto b/modules/map/proto/map_overlap.proto new file mode 100644 index 00000000000..3c67f084ee8 --- /dev/null +++ b/modules/map/proto/map_overlap.proto @@ -0,0 +1,61 @@ +syntax = "proto2"; + +package apollo.hdmap; + +import "modules/map/proto/map_id.proto"; + +message LaneOverlapInfo { + optional double start_s = 1; //position (s-coordinate) + optional double end_s = 2; //position (s-coordinate) + optional bool is_merge = 3; +} + +message SignalOverlapInfo { +} + +message StopSignOverlapInfo { +} + +message CrosswalkOverlapInfo { +} + +message JunctionOverlapInfo { +} + +message YieldOverlapInfo { +} + +message ClearAreaOverlapInfo { +} + +message SpeedBumpOverlapInfo { +} + +message ParkingSpaceOverlapInfo { +} + +// Information about one object in the overlap. +message ObjectOverlapInfo { + optional Id id = 1; + + oneof overlap_info { + LaneOverlapInfo lane_overlap_info = 3; + SignalOverlapInfo signal_overlap_info = 4; + StopSignOverlapInfo stop_sign_overlap_info = 5; + CrosswalkOverlapInfo crosswalk_overlap_info = 6; + JunctionOverlapInfo junction_overlap_info = 7; + YieldOverlapInfo yield_sign_overlap_info = 8; + ClearAreaOverlapInfo clear_area_overlap_info = 9; + SpeedBumpOverlapInfo speed_bump_overlap_info = 10; + ParkingSpaceOverlapInfo parking_space_overlap_info = 11; + } +} + +// Here, the "overlap" includes any pair of objects on the map +// (e.g. lanes, junctions, and crosswalks). +message Overlap { + optional Id id = 1; + + // Information about one overlap, include all overlapped objects. + repeated ObjectOverlapInfo object = 2; +} diff --git a/modules/map/proto/map_road.proto b/modules/map/proto/map_road.proto new file mode 100644 index 00000000000..94d386caa82 --- /dev/null +++ b/modules/map/proto/map_road.proto @@ -0,0 +1,53 @@ +syntax = "proto2"; + +package apollo.hdmap; + +import "modules/map/proto/map_geometry.proto"; +import "modules/map/proto/map_id.proto"; + +message BoundaryEdge { + optional Curve curve = 1; + enum Type { + UNKNOWN = 0; + NORMAL = 1; + LEFT_BOUNDARY = 2; + RIGHT_BOUNDARY = 3; + }; + optional Type type = 2; +} + +message BoundaryPolygon { + repeated BoundaryEdge edge = 1; +} + +// boundary with holes +message RoadBoundary { + optional BoundaryPolygon outer_polygon = 1; + // if boundary without hole, hole is null + repeated BoundaryPolygon hole = 2; +} + +message RoadROIBoundary { + optional Id id = 1; + repeated RoadBoundary road_boundaries = 2; +} + +// road section defines a road cross-section, At least one section must be defined in order to +// use a road, If multiple road sections are defined, they must be listed in order along the road +message RoadSection { + optional Id id = 1; + // lanes contained in this section + repeated Id lane_id = 2; + // boundary of section + optional RoadBoundary boundary = 3; +} + +// The road is a collection of traffic elements, such as lanes, road boundary etc. +// It provides general information about the road. +message Road { + optional Id id = 1; + repeated RoadSection section = 2; + + // if lane road not in the junction, junction id is null. + optional Id junction_id = 3; +} diff --git a/modules/map/proto/map_signal.proto b/modules/map/proto/map_signal.proto new file mode 100644 index 00000000000..ff1ae7ee9b7 --- /dev/null +++ b/modules/map/proto/map_signal.proto @@ -0,0 +1,47 @@ +syntax = "proto2"; + +package apollo.hdmap; + +import "modules/common/proto/geometry.proto"; +import "modules/map/proto/map_geometry.proto"; +import "modules/map/proto/map_id.proto"; + +message Subsignal { + enum Type { + UNKNOWN = 1; + CIRCLE = 2; + ARROW_LEFT = 3; + ARROW_FORWARD = 4; + ARROW_RIGHT = 5; + ARROW_LEFT_AND_FORWARD = 6; + ARROW_RIGHT_AND_FORWARD = 7; + ARROW_U_TURN = 8; + }; + + optional Id id = 1; + optional Type type = 2; + + // Location of the center of the bulb. now no data support. + optional apollo.common.PointENU location = 3; +} + +message Signal { + enum Type { + UNKNOWN = 1; + MIX_2_HORIZONTAL = 2; + MIX_2_VERTICAL = 3; + MIX_3_HORIZONTAL = 4; + MIX_3_VERTICAL = 5; + SINGLE = 6; + }; + + optional Id id = 1; + optional Polygon boundary = 2; + repeated Subsignal subsignal = 3; + // TODO: add orientation. now no data support. + repeated Id overlap_id = 4; + optional Type type = 5; + // stop line + repeated Curve stop_line = 6; +} + diff --git a/modules/map/proto/map_speed_bump.proto b/modules/map/proto/map_speed_bump.proto new file mode 100644 index 00000000000..b41b6090f48 --- /dev/null +++ b/modules/map/proto/map_speed_bump.proto @@ -0,0 +1,12 @@ +syntax = "proto2"; + +package apollo.hdmap; + +import "modules/map/proto/map_id.proto"; +import "modules/map/proto/map_geometry.proto"; + +message SpeedBump { + optional Id id = 1; + repeated Id overlap_id = 2; + repeated Curve position = 3; +} diff --git a/modules/map/proto/map_stop_sign.proto b/modules/map/proto/map_stop_sign.proto new file mode 100644 index 00000000000..ca070680db1 --- /dev/null +++ b/modules/map/proto/map_stop_sign.proto @@ -0,0 +1,16 @@ +syntax = "proto2"; + +package apollo.hdmap; + +import "modules/map/proto/map_id.proto"; +import "modules/map/proto/map_geometry.proto"; + +// A stop sign is a traffic sign to notify drivers that they must stop before proceeding. +message StopSign { + + optional Id id = 1; + + repeated Curve stop_line = 2; + + repeated Id overlap_id = 3; +} diff --git a/modules/map/proto/map_yield_sign.proto b/modules/map/proto/map_yield_sign.proto new file mode 100644 index 00000000000..8905f8a00d3 --- /dev/null +++ b/modules/map/proto/map_yield_sign.proto @@ -0,0 +1,16 @@ +syntax = "proto2"; + +package apollo.hdmap; + +import "modules/map/proto/map_id.proto"; +import "modules/map/proto/map_geometry.proto"; + +// A yield indicates that each driver must prepare to stop if necessary to let a driver on another approach proceed. +// A driver who stops or slows down to let another vehicle through has yielded the right of way to that vehicle. +message YieldSign { + optional Id id = 1; + + repeated Curve stop_line = 2; + + repeated Id overlap_id = 3; +} diff --git a/modules/map/tools/BUILD b/modules/map/tools/BUILD new file mode 100644 index 00000000000..d843a0f377c --- /dev/null +++ b/modules/map/tools/BUILD @@ -0,0 +1,73 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_binary( + name = "map_tool", + srcs = ["map_tool.cc"], + data = ["//modules/map:map_data"], + deps = [ + "//external:gflags", + "//modules/common", + "//modules/common/configs:config_gflags", + "//modules/common/util", + "//modules/map/hdmap:hdmap_util", + "//modules/map/proto:map_proto", + ], +) + +cc_binary( + name = "map_xysl", + srcs = ["map_xysl.cc"], + data = ["//modules/map:map_data"], + deps = [ + "//external:gflags", + "//modules/common", + "//modules/common/configs:config_gflags", + "//modules/common/util", + "//modules/map/hdmap:hdmap_util", + ], +) + +cc_binary( + name = "refresh_default_end_way_point", + srcs = ["refresh_default_end_way_point.cc"], + deps = [ + "//modules/common/configs:config_gflags", + "//modules/common/util", + "//modules/map/hdmap:hdmap_util", + "//modules/routing/proto:routing_proto", + ], +) + +cc_binary( + name = "sim_map_generator", + srcs = ["sim_map_generator.cc"], + data = ["//modules/map:map_data"], + deps = [ + "//external:gflags", + "//modules/common", + "//modules/common/configs:config_gflags", + "//modules/common/util", + "//modules/common/util:points_downsampler", + "//modules/map/hdmap:hdmap_util", + "//modules/map/hdmap/adapter:opendrive_adapter", + "//modules/map/proto:map_proto", + ], +) + +cc_binary( + name = "proto_map_generator", + srcs = ["proto_map_generator.cc"], + data = ["//modules/map:map_data"], + deps = [ + "//external:gflags", + "//modules/common", + "//modules/common/util", + "//modules/map/hdmap:hdmap_util", + "//modules/map/hdmap/adapter:opendrive_adapter", + "//modules/map/proto:map_proto", + ], +) + +cpplint() diff --git a/modules/map/tools/map_tool.cc b/modules/map/tools/map_tool.cc new file mode 100644 index 00000000000..59513dce826 --- /dev/null +++ b/modules/map/tools/map_tool.cc @@ -0,0 +1,89 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include + +#include "gflags/gflags.h" + +#include "modules/common/configs/config_gflags.h" +#include "modules/common/log.h" +#include "modules/common/util/file.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/map/proto/map.pb.h" + +DEFINE_double(x_offset, 587318.4866268333, "x offset"); +DEFINE_double(y_offset, 4141146.110116891, "y offset"); +DEFINE_string(output_dir, "/tmp/", "output map directory"); + +using apollo::hdmap::Map; + +void ShiftMap(Map* map_pb) { + for (auto& lane : *(map_pb->mutable_lane())) { + for (auto& segment : *(lane.mutable_central_curve()->mutable_segment())) { + for (auto& point : *(segment.mutable_line_segment()->mutable_point())) { + point.set_x(point.x() + FLAGS_x_offset); + point.set_y(point.y() + FLAGS_y_offset); + } + } + for (auto& segment : + *(lane.mutable_left_boundary()->mutable_curve()->mutable_segment())) { + for (auto& point : *(segment.mutable_line_segment()->mutable_point())) { + point.set_x(point.x() + FLAGS_x_offset); + point.set_y(point.y() + FLAGS_y_offset); + } + } + for (auto& segment : + *(lane.mutable_right_boundary()->mutable_curve()->mutable_segment())) { + for (auto& point : *(segment.mutable_line_segment()->mutable_point())) { + point.set_x(point.x() + FLAGS_x_offset); + point.set_y(point.y() + FLAGS_y_offset); + } + } + } + for (auto& stop_sign : *(map_pb->mutable_stop_sign())) { + for (auto& stop_line : *(stop_sign.mutable_stop_line())) { + for (auto& segment : *(stop_line.mutable_segment())) { + for (auto& point : *(segment.mutable_line_segment()->mutable_point())) { + point.set_x(point.x() + FLAGS_x_offset); + point.set_y(point.y() + FLAGS_y_offset); + } + } + } + } +} + +void OutputMap(const Map& map_pb) { + const std::string txt_file = FLAGS_output_dir + "/base_map.txt"; + const std::string bin_file = FLAGS_output_dir + "/base_map.bin"; + CHECK(apollo::common::util::SetProtoToASCIIFile(map_pb, txt_file)); + CHECK(apollo::common::util::SetProtoToBinaryFile(map_pb, bin_file)); +} + +int main(int32_t argc, char** argv) { + google::InitGoogleLogging(argv[0]); + FLAGS_alsologtostderr = true; + FLAGS_v = 3; + + google::ParseCommandLineFlags(&argc, &argv, true); + + Map map_pb; + const auto map_file = apollo::hdmap::BaseMapFile(); + CHECK(apollo::common::util::GetProtoFromFile(map_file, &map_pb)) + << "Fail to open:" << map_file; + ShiftMap(&map_pb); + OutputMap(map_pb); + AINFO << "modified map at:" << FLAGS_output_dir; +} diff --git a/modules/map/tools/map_xysl.cc b/modules/map/tools/map_xysl.cc new file mode 100644 index 00000000000..b8328c2c86a --- /dev/null +++ b/modules/map/tools/map_xysl.cc @@ -0,0 +1,288 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include +#include +#include "gflags/gflags.h" + +#include "modules/common/configs/config_gflags.h" +#include "modules/common/log.h" +#include "modules/common/util/file.h" +#include "modules/map/hdmap/hdmap_common.h" +#include "modules/map/hdmap/hdmap_impl.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/map/proto/map_geometry.pb.h" + +DEFINE_bool(xy_to_sl, false, "calculate xy to sl"); +DEFINE_bool(sl_to_xy, false, "calculate sl to xy"); +DEFINE_bool(xy_to_lane, false, "calculate xy to lane"); +DEFINE_bool(lane_to_lane, false, "calculate lane to lane"); +DEFINE_bool(dump_lane_width, false, "dump all lane width info"); +DEFINE_string(dump_txt_map, "", "text file name for dumping map"); +DEFINE_string(dump_bin_map, "", "binary file name for dumping map"); +DEFINE_string(overlap, "", "get overlap information"); +DEFINE_string(signal_info, "", "print signal info"); +DEFINE_double(x, 0.0, "x"); +DEFINE_double(y, 0.0, "y"); +DEFINE_string(lane, "", "lane_id"); +DEFINE_string(from_lane, "", "from_lane"); +DEFINE_string(to_lane, "", "to_lane"); +DEFINE_double(s, 0.0, "s"); +DEFINE_double(l, 0.0, "l"); + +using apollo::common::PointENU; + +namespace apollo { +namespace hdmap { + +#define QUIT_IF(CONDITION, RET, LEVEL, MSG, ...) \ + do { \ + if (CONDITION) { \ + RAW_LOG(LEVEL, MSG, ##__VA_ARGS__); \ + return RET; \ + } \ + } while (0); + +class MapUtil { + public: + const OverlapInfo *get_overlap(const std::string &overlap_id) { + auto ret = HDMapUtil::BaseMap().GetOverlapById(MakeMapId(overlap_id)); + AERROR_IF(ret == nullptr) << "failed to find overlap[" << overlap_id << "]"; + return ret.get(); + } + + const SignalInfo *get_signal(const std::string &signal_id) { + auto ret = HDMapUtil::BaseMap().GetSignalById(MakeMapId(signal_id)); + AERROR_IF(ret == nullptr) << "failed to find overlap[" << signal_id << "]"; + return ret.get(); + } + + const LaneInfo *get_lane(const std::string &lane_id) { + auto ret = HDMapUtil::BaseMap().GetLaneById(MakeMapId(lane_id)); + AERROR_IF(ret == nullptr) << "failed to find lane[" << lane_id << "]"; + return ret.get(); + } + + int point_to_sl(const PointENU &point, std::string *lane_id, double *s, + double *l) { + QUIT_IF(lane_id == nullptr, -1, ERROR, "arg lane id is null"); + QUIT_IF(s == nullptr, -2, ERROR, "arg s is null"); + QUIT_IF(l == nullptr, -3, ERROR, "arg l is null"); + LaneInfoConstPtr lane = nullptr; + int ret = HDMapUtil::BaseMap().GetNearestLane(point, &lane, s, l); + QUIT_IF(ret != 0, -4, ERROR, "get_nearest_lane failed with ret[%d]", ret); + QUIT_IF(lane == nullptr, -5, ERROR, "lane is null"); + *lane_id = lane->id().id(); + return 0; + } + + int sl_to_point(const std::string &lane_id, const double s, const double l, + PointENU *point, double *heading) { + QUIT_IF(point == nullptr, -1, ERROR, "arg point is null"); + QUIT_IF(heading == nullptr, -2, ERROR, "arg heading is null"); + const auto lane = HDMapUtil::BaseMap().GetLaneById(MakeMapId(lane_id)); + QUIT_IF(lane == nullptr, -3, ERROR, "get_smooth_point_from_lane[%s] failed", + lane_id.c_str()); + *point = lane->GetSmoothPoint(s); + return 0; + } + + int lane_projection(const apollo::common::math::Vec2d &vec2d, + const std::string &lane_id, double *s, double *l) { + QUIT_IF(s == nullptr, -1, ERROR, "arg s is nullptr"); + const auto lane = HDMapUtil::BaseMap().GetLaneById(MakeMapId(lane_id)); + QUIT_IF(lane == nullptr, -2, ERROR, "get_lane_by_id[%s] failed", + lane_id.c_str()); + bool ret = lane->GetProjection(vec2d, s, l); + QUIT_IF(!ret, -3, ERROR, "lane[%s] get projection for point[%f, %f] failed", + lane_id.c_str(), vec2d.x(), vec2d.y()); + return 0; + } +}; + +} // namespace hdmap +} // namespace apollo + +std::ostream &operator<<( + std::ostream &os, + const ::google::protobuf::RepeatedPtrField &ids) { + for (int i = 0; i < ids.size(); ++i) { + os << ids.Get(i).id(); + if (i != ids.size() - 1) { + os << ", "; + } + } + return os; +} + +int main(int argc, char *argv[]) { + google::InitGoogleLogging(argv[0]); + google::ParseCommandLineFlags(&argc, &argv, true); + const std::string map_file = apollo::hdmap::BaseMapFile(); + apollo::hdmap::MapUtil map_util; + + if (FLAGS_xy_to_sl) { + double x = FLAGS_x; + double y = FLAGS_y; + PointENU point; + point.set_x(x); + point.set_y(y); + point.set_z(0); + std::string lane_id; + double s = 0.0; + double l = 0.0; + map_util.point_to_sl(point, &lane_id, &s, &l); + double heading = 0.0; + map_util.sl_to_point(lane_id, s, l, &point, &heading); + printf("lane_id[%s], s[%f], l[%f], heading[%f]\n", lane_id.c_str(), s, l, + heading); + } + if (FLAGS_sl_to_xy) { + PointENU point; + double heading = 0.0; + map_util.sl_to_point(FLAGS_lane, FLAGS_s, FLAGS_l, &point, &heading); + printf("x[%f] y[%f], heading[%f]\n", point.x(), point.y(), heading); + } + if (FLAGS_xy_to_lane) { + double s = 0.0; + double l = 0.0; + int ret = map_util.lane_projection({FLAGS_x, FLAGS_y}, FLAGS_lane, &s, &l); + if (ret != 0) { + printf("lane_projection for x[%f], y[%f], lane_id[%s] failed\n", FLAGS_x, + FLAGS_y, FLAGS_lane.c_str()); + return -1; + } + printf("lane[%s] s[%f], l[%f]\n", FLAGS_lane.c_str(), s, l); + } + if (FLAGS_lane_to_lane) { + PointENU point; + double heading = 0.0; + map_util.sl_to_point(FLAGS_from_lane, FLAGS_s, 0.0, &point, &heading); + double target_s = 0.0; + double target_l = 0.0; + int ret = map_util.lane_projection({point.x(), point.y()}, FLAGS_to_lane, + &target_s, &target_l); + if (ret != 0) { + printf("lane_projection for lane[%s], s[%f] to lane_id[%s] failed\n", + FLAGS_from_lane.c_str(), FLAGS_s, FLAGS_to_lane.c_str()); + return -1; + } + printf("lane[%s] s[%f], l[%f]\n", FLAGS_to_lane.c_str(), target_s, + target_l); + } + if (!FLAGS_lane.empty()) { + const auto *lane_ptr = map_util.get_lane(FLAGS_lane); + const auto &lane = lane_ptr->lane(); + + PointENU start_point; + double start_heading = 0.0; + map_util.sl_to_point(FLAGS_lane, 0, 0, &start_point, &start_heading); + + PointENU end_point; + double end_heading = 0.0; + map_util.sl_to_point(FLAGS_lane, lane_ptr->total_length(), 0, &end_point, + &end_heading); + + double left_width = 0.0; + double right_width = 0.0; + lane_ptr->GetWidth(FLAGS_s, &left_width, &right_width); + + std::cout << "lane[" << FLAGS_lane << std::fixed << "] length[" + << lane_ptr->total_length() << "] type[" + << Lane_LaneType_Name(lane.type()) << "] turn[" + << Lane_LaneTurn_Name(lane.turn()) << "] speed_limit[" + << lane.speed_limit() << "] predecessor[" << lane.predecessor_id() + << "] successor[" << lane.successor_id() << "] left_forward[" + << lane.left_neighbor_forward_lane_id() << "] right_forward[" + << lane.right_neighbor_forward_lane_id() << "] left_reverse[" + << lane.left_neighbor_reverse_lane_id() << "] right_reverse[" + << lane.right_neighbor_reverse_lane_id() << "] overlap[" + << lane.overlap_id() << "] stop_sign num:[" + << lane_ptr->stop_signs().size() << "]" + << " start point(x,y,heading):" << start_point.x() << "," + << start_point.y() << "," << start_heading + << " end point(x,y,heading):" << end_point.x() << "," + << end_point.y() << "," << end_heading + << " left_width:" << left_width << " right_width:" << right_width + << std::endl; + std::cout.unsetf(std::ios_base::fixed); + + if (FLAGS_dump_lane_width) { + const auto sample_left_widthes = lane_ptr->sampled_left_width(); + std::cout << "left width num: " << sample_left_widthes.size() + << std::endl; + int num = 0; + for (auto w : sample_left_widthes) { + std::cout << " " << w.second; + if (++num % 10 == 0) { + std::cout << std::endl; + } + } + std::cout << std::endl; + num = 0; + const auto sample_right_widthes = lane_ptr->sampled_right_width(); + std::cout << "right width num: " << sample_right_widthes.size() + << std::endl; + for (auto w : sample_right_widthes) { + std::cout << " " << w.second; + if (++num % 10 == 0) { + std::cout << std::endl; + } + } + std::cout << std::endl; + } + } + if (!FLAGS_overlap.empty()) { + const auto *overlap_ptr = map_util.get_overlap(FLAGS_overlap); + if (overlap_ptr != nullptr) { + std::cout << "overlap[" << overlap_ptr->id().id() << "] info[" + << overlap_ptr->overlap().DebugString() << "]" << std::endl; + } + } + if (!FLAGS_signal_info.empty()) { + const auto *signal_ptr = map_util.get_signal(FLAGS_signal_info); + if (signal_ptr) { + std::cout << "signal[" << FLAGS_signal_info << "] info[" + << signal_ptr->signal().DebugString() << "]" << std::endl; + } + } + if (!FLAGS_dump_txt_map.empty()) { + apollo::hdmap::Map map; + CHECK(apollo::common::util::GetProtoFromFile(map_file, &map)); + CHECK(apollo::common::util::SetProtoToASCIIFile(map, FLAGS_dump_txt_map)); + } + if (!FLAGS_dump_bin_map.empty()) { + apollo::hdmap::Map map; + CHECK(apollo::common::util::GetProtoFromFile(map_file, &map)); + CHECK(apollo::common::util::SetProtoToBinaryFile(map, FLAGS_dump_bin_map)); + } + if (!FLAGS_sl_to_xy && !FLAGS_xy_to_sl && !FLAGS_xy_to_lane && + !FLAGS_lane_to_lane && FLAGS_lane.empty() && FLAGS_dump_txt_map.empty() && + FLAGS_dump_bin_map.empty() && FLAGS_signal_info.empty() && + FLAGS_overlap.empty()) { + std::cout << "usage: --dump_txt_map" << std::endl; + std::cout << "usage: --dump_bin_map" << std::endl; + std::cout << "usage: --xy_to_sl --x --y" << std::endl; + std::cout << "usage: --sl_to_xy --lane --s --l" << std::endl; + std::cout << "usage: --xy_to_lane --x --y --lane" << std::endl; + std::cout << "usage: --lane_to_lane --from_lane --s --to_lane" << std::endl; + std::cout << "usage: --lane" << std::endl; + std::cout << "usage: --signal_info" << std::endl; + std::cout << "usage: --overlap" << std::endl; + } + return 0; +} diff --git a/modules/map/tools/proto_map_generator.cc b/modules/map/tools/proto_map_generator.cc new file mode 100644 index 00000000000..fed3affc146 --- /dev/null +++ b/modules/map/tools/proto_map_generator.cc @@ -0,0 +1,56 @@ +/* Copyright 2017 The Apollo 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. +=========================================================================*/ + +#include + +#include "gflags/gflags.h" + +#include "modules/common/log.h" +#include "modules/common/util/file.h" +#include "modules/map/hdmap/adapter/opendrive_adapter.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/map/proto/map.pb.h" + +/** + * A map tool to transform opendrive map to pb map + */ + +DEFINE_string(output_dir, "/tmp/", "output map directory"); + +int main(int argc, char **argv) { + google::InitGoogleLogging(argv[0]); + FLAGS_alsologtostderr = true; + + google::ParseCommandLineFlags(&argc, &argv, true); + + const auto map_filename = apollo::hdmap::BaseMapFile(); + apollo::hdmap::Map pb_map; + CHECK(apollo::hdmap::adapter::OpendriveAdapter::LoadData( + map_filename, &pb_map)) << "fail to load data"; + + const std::string output_ascii_file = FLAGS_output_dir + "/base_map.txt"; + CHECK(apollo::common::util::SetProtoToASCIIFile(pb_map, output_ascii_file)); + + const std::string output_bin_file = FLAGS_output_dir + "/base_map.bin"; + CHECK(apollo::common::util::SetProtoToBinaryFile(pb_map, output_bin_file)); + + pb_map.Clear(); + CHECK(apollo::common::util::GetProtoFromFile(output_bin_file, &pb_map)) + << "load map fail"; + + AINFO << "load map success"; + + return 0; +} diff --git a/modules/map/tools/refresh_default_end_way_point.cc b/modules/map/tools/refresh_default_end_way_point.cc new file mode 100644 index 00000000000..b38f5c3c28a --- /dev/null +++ b/modules/map/tools/refresh_default_end_way_point.cc @@ -0,0 +1,108 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +// A tool to refresh default_end_way_point.txt file after the map is updated. +// +// Usage: +// bazel-bin/modules/map/tools/refresh_default_end_way_point --map_dir= +// +// How it works: +// Assuming that the lanes information is changed while our end point's +// absolute (x,y,z) is still correct. Then we can find the nearest point on +// the new map as the new end point. + +#include + +#include "modules/common/util/file.h" +#include "modules/common/log.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/routing/proto/routing.pb.h" + +namespace apollo { +namespace hdmap { + +apollo::common::PointENU SLToXYZ(const std::string& lane_id, + const double s, const double l) { + const auto lane_info = HDMapUtil::BaseMap().GetLaneById(MakeMapId(lane_id)); + CHECK(lane_info); + return lane_info->GetSmoothPoint(s); +} + +void XYZToSL(const apollo::common::PointENU& point, + std::string* lane_id, double* s, double* l) { + CHECK(lane_id); + CHECK(s); + CHECK(l); + LaneInfoConstPtr lane = nullptr; + + CHECK_EQ(HDMapUtil::BaseMap().GetNearestLane(point, &lane, s, l), 0); + *lane_id = lane->id().id(); +} + +double XYZDistance(const apollo::common::PointENU& p1, + const apollo::common::PointENU& p2) { + const double x_diff = p1.x() - p2.x(); + const double y_diff = p1.y() - p2.y(); + const double z_diff = p1.z() - p2.z(); + return std::sqrt(x_diff * x_diff + y_diff * y_diff + z_diff * z_diff); +} + +void RefreshDefaultEndPoint() { + // Read xyz from old point. + apollo::routing::RoutingRequest::LaneWaypoint old_end_point; + CHECK(apollo::common::util::GetProtoFromASCIIFile(EndWayPointFile(), + &old_end_point)); + apollo::common::PointENU old_xyz; + old_xyz.set_x(old_end_point.pose().x()); + old_xyz.set_y(old_end_point.pose().y()); + old_xyz.set_z(old_end_point.pose().z()); + + // Get new lane info from xyz. + std::string new_lane; + double new_s; + double new_l; + XYZToSL(old_xyz, &new_lane, &new_s, &new_l); + + // Get new xyz from lane info. + const auto new_xyz = SLToXYZ(new_lane, new_s, new_l); + + // Update default end way point. + apollo::routing::RoutingRequest::LaneWaypoint new_end_point; + new_end_point.set_id(new_lane); + new_end_point.set_s(new_s); + auto* pose = new_end_point.mutable_pose(); + pose->set_x(new_xyz.x()); + pose->set_y(new_xyz.y()); + pose->set_z(new_xyz.z()); + CHECK(apollo::common::util::SetProtoToASCIIFile(new_end_point, + EndWayPointFile())); + AINFO << "Refreshed default end way point\n ============ from ============ \n" + << old_end_point.DebugString() << "\n ============ to ============ \n" + << new_end_point.DebugString() + << "XYZ distance is " << XYZDistance(old_xyz, new_xyz); +} + +} // namespace hdmap +} // namespace apollo + +int main(int argc, char *argv[]) { + google::InitGoogleLogging(argv[0]); + google::ParseCommandLineFlags(&argc, &argv, true); + FLAGS_logtostderr = true; + + apollo::hdmap::RefreshDefaultEndPoint(); + return 0; +} diff --git a/modules/map/tools/sim_map_generator.cc b/modules/map/tools/sim_map_generator.cc new file mode 100644 index 00000000000..568a71b3e7c --- /dev/null +++ b/modules/map/tools/sim_map_generator.cc @@ -0,0 +1,124 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include + +#include "gflags/gflags.h" + +#include "modules/common/configs/config_gflags.h" +#include "modules/common/log.h" +#include "modules/common/util/file.h" +#include "modules/common/util/points_downsampler.h" +#include "modules/map/hdmap/adapter/opendrive_adapter.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/map/proto/map.pb.h" + +/** + * A map tool to generate a downsampled map to be displayed by dreamview + * frontend. + */ + +DEFINE_string(output_dir, "/tmp/", "output map directory"); +DEFINE_double(angle_threshold, 1 / 180 * M_PI, /* 1 degree */ + "Points are sampled when the accumulated direction change " + "exceeds the threshold"); +DEFINE_int32(downsample_distance, 5, "downsample rate for a normal path"); +DEFINE_int32(steep_turn_downsample_distance, 1, + "downsample rate for a steep turn path"); + +using apollo::common::util::DownsampleByAngle; +using apollo::common::util::DownsampleByDistance; +using apollo::common::util::GetProtoFromFile; +using apollo::common::PointENU; +using apollo::hdmap::adapter::OpendriveAdapter; +using apollo::hdmap::Curve; +using apollo::hdmap::Map; + +void DownsampleCurve(Curve* curve) { + auto* line_segment = curve->mutable_segment(0)->mutable_line_segment(); + std::vector points(line_segment->point().begin(), + line_segment->point().end()); + line_segment->clear_point(); + + // NOTE: this not the most efficient implementation, but since this map tool + // is only run once for each, we can probably live with that. + + // Downsample points by angle then by distance. + auto sampled_indices = DownsampleByAngle(points, FLAGS_angle_threshold); + std::vector downsampled_points; + for (int index : sampled_indices) { + downsampled_points.push_back(points[index]); + } + + sampled_indices = DownsampleByDistance(downsampled_points, + FLAGS_downsample_distance, + FLAGS_steep_turn_downsample_distance); + + for (int index : sampled_indices) { + *line_segment->add_point() = downsampled_points[index]; + } + int new_size = line_segment->point_size(); + CHECK_GT(new_size, 1); + + AINFO << "Lane curve downsampled from " << points.size() << " points to " + << new_size << " points."; +} + +void DownsampleMap(Map* map_pb) { + for (int i = 0; i < map_pb->lane_size(); ++i) { + auto* lane = map_pb->mutable_lane(i); + AINFO << "Downsampling lane " << lane->id().id(); + + DownsampleCurve(lane->mutable_central_curve()); + DownsampleCurve(lane->mutable_left_boundary()->mutable_curve()); + DownsampleCurve(lane->mutable_right_boundary()->mutable_curve()); + } +} + +void OutputMap(const Map& map_pb) { + std::ofstream map_txt_file(FLAGS_output_dir + "/sim_map.txt"); + map_txt_file << map_pb.DebugString(); + map_txt_file.close(); + + std::ofstream map_bin_file(FLAGS_output_dir + "/sim_map.bin"); + std::string map_str; + map_pb.SerializeToString(&map_str); + map_bin_file << map_str; + map_bin_file.close(); +} + +int main(int32_t argc, char** argv) { + google::InitGoogleLogging(argv[0]); + FLAGS_alsologtostderr = true; + FLAGS_v = 3; + + google::ParseCommandLineFlags(&argc, &argv, true); + + Map map_pb; + const auto map_file = apollo::hdmap::BaseMapFile(); + if (apollo::common::util::EndWith(map_file, ".xml")) { + CHECK(OpendriveAdapter::LoadData(map_file, &map_pb)); + } else { + CHECK(GetProtoFromFile(map_file, &map_pb)) << "Fail to open: " << map_file; + } + + DownsampleMap(&map_pb); + OutputMap(map_pb); + AINFO << "sim_map generated at:" << FLAGS_output_dir; + + return 0; +} diff --git a/modules/monitor/common/BUILD b/modules/monitor/common/BUILD index dc1b6c75fdb..41c5a8baa00 100644 --- a/modules/monitor/common/BUILD +++ b/modules/monitor/common/BUILD @@ -15,4 +15,12 @@ cc_library( ], ) +cc_binary( + name = "log_test", + srcs = ["tests/log_test.cc"], + deps = [ + ":platform_common_lib", + ], +) + cpplint() diff --git a/modules/monitor/common/tests/test_log.cc b/modules/monitor/common/tests/log_test.cc similarity index 86% rename from modules/monitor/common/tests/test_log.cc rename to modules/monitor/common/tests/log_test.cc index ab221c323c6..66cb6bc1fea 100644 --- a/modules/monitor/common/tests/test_log.cc +++ b/modules/monitor/common/tests/log_test.cc @@ -17,12 +17,11 @@ // @todo: complete this using gmock & gtest, capture logging contents and do // checks. -#include "apollo/platform/log.h" - -using namespace apollo::platform::log; +#include "modules/monitor/common/log.h" int main() { - LogModule m1 = {"test", 5, 10, platform_log_printf}; + apollo::platform::log::LogModule m1 = { + "test", 5, 10, apollo::platform::log::platform_log_printf}; m1.set_log_lvl(7); PLATFORM_LOG(&m1, 3, "test"); diff --git a/modules/monitor/hwmonitor/hw/esdcan/BUILD b/modules/monitor/hwmonitor/hw/esdcan/BUILD index 4527cabe39c..05a3dfc234c 100644 --- a/modules/monitor/hwmonitor/hw/esdcan/BUILD +++ b/modules/monitor/hwmonitor/hw/esdcan/BUILD @@ -12,6 +12,7 @@ cc_library( ], hdrs = glob(["*.h"]), deps = [ + "//modules/common/util:string_util", "//modules/monitor/common:interface", "//modules/monitor/common:platform_common_lib", "//modules/monitor/hwmonitor/hw:platform_hw_log_module_lib", @@ -29,6 +30,7 @@ cc_library( ], hdrs = glob(["*.h"]), deps = [ + "//modules/common/util:string_util", "//modules/monitor/common:interface", "//modules/monitor/common:platform_common_lib", "//modules/monitor/hwmonitor/hw:platform_hw_log_module_lib", diff --git a/modules/monitor/hwmonitor/hw/esdcan/esdcan_checker.cc b/modules/monitor/hwmonitor/hw/esdcan/esdcan_checker.cc index a1a7e1057c2..f52303d78ca 100644 --- a/modules/monitor/hwmonitor/hw/esdcan/esdcan_checker.cc +++ b/modules/monitor/hwmonitor/hw/esdcan/esdcan_checker.cc @@ -16,10 +16,10 @@ #include "modules/monitor/hwmonitor/hw/esdcan/esdcan_checker.h" -#include #include #include +#include "modules/common/util/string_util.h" #include "modules/monitor/hwmonitor/hw/esdcan/esdcan_err_str.h" #include "modules/monitor/hwmonitor/hw/hw_log_module.h" @@ -30,9 +30,7 @@ namespace hw { const char EsdCanChecker::ESD_CAN_NAME[] = "ESD_CAN"; EsdCanChecker::EsdCanChecker(int id) : can_id_(id) { - std::ostringstream os; - os << ESD_CAN_NAME << "-" << id; - name_ = os.str(); + name_ = apollo::common::util::StrCat(ESD_CAN_NAME, "-", id); } hw::Status EsdCanChecker::esdcan_result_to_hw_status(NTCAN_RESULT ntstatus) { diff --git a/modules/perception/BUILD b/modules/perception/BUILD index ed9ef03bd78..b0089f962e1 100644 --- a/modules/perception/BUILD +++ b/modules/perception/BUILD @@ -8,8 +8,10 @@ cc_library( hdrs = ["perception.h"], deps = [ "//modules/common:apollo_app", + "//modules/common:log", "//modules/common/adapters:adapter_manager", "//modules/perception/common:perception_common", + "//modules/perception/obstacle/onboard:perception_obstacle_lidar_process", ], ) @@ -29,4 +31,18 @@ cc_binary( ], ) +filegroup( + name = "perception_data", + srcs = glob([ + "data/**", + ]), +) + +filegroup( + name = "perception_model", + srcs = glob([ + "model/**", + ]), +) + cpplint() diff --git a/modules/perception/README.md b/modules/perception/README.md index 3d6a6075330..4824c14fa8c 100644 --- a/modules/perception/README.md +++ b/modules/perception/README.md @@ -1,2 +1,16 @@ -# perception - perception module processes all sensors input(e.g Lidar, camera, etc) and accomplishes object detection, traffic light detection, etc. +# Perception + +## Introduction + The goal of perception module is to provide the ability of perceiving obstacles given input 3D point cloud data from LiDAR sensor. It detects, segments and tracks obstacles in the ROI defined by high-resolution (HD) map. In addition, it predicts the obstacles’ motion and pose information (e.g., heading, velocity, etc). It consists of four successive sub-modules including **_HDMap ROI Filter_**, **_CNN Segmentation_**, **_MinBox Builder_** and **_HM Object Tracker_**. Please see details in [the document of perception](https://github.com/ApolloAuto/apollo/blob/master/docs/specs/3d_obstacle_perception.md). + +## Input + * Point cloud data from LiDAR sensor (ROS topic _/apollo/sensor/velodyne64/compensator/PointCloud2_) + * Coordinate frame transformation information over time (ROS topic _/tf_) + * HD map + * Extrinsic parameters of LiDAR sensor calibration (ROS topic _/tf_static_) + +## Output + * 3D obstacle tracks with heading and velocity information (ROS topic _/apollo/perception/obstacles_) + +## Instruction + Before running the 3D obstacle perception program, please select the appropriate HD map by setting the option `--map_dir` in the global configuration file `modules/common/data/global_flagfile.txt`. After that, you may setup the general settings in the configuration file `modules/perception/conf/perception.conf`. Then, you can launch the perception program by using the command `./scripts/perception start` or enabling the perception button in HMI. The command of stopping perception is `./scripts/perception stop`. In addition we provide some demo data for developers. Please download the demo data from our [Open Data Platform](https://console.bce.baidu.com/apollo/task/download). \ No newline at end of file diff --git a/modules/perception/common/BUILD b/modules/perception/common/BUILD index ba3082de98f..101e1cd2f16 100644 --- a/modules/perception/common/BUILD +++ b/modules/perception/common/BUILD @@ -11,7 +11,7 @@ cc_library( "*.h", ]), deps = [ - "@glog//:glog", + "//modules/common", ], ) diff --git a/modules/perception/common/define.h b/modules/perception/common/define.h new file mode 100644 index 00000000000..52e784085ec --- /dev/null +++ b/modules/perception/common/define.h @@ -0,0 +1,42 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_COMMON_DEFINE_H_ +#define MODULES_PERCEPTION_COMMON_DEFINE_H_ + +namespace apollo { +namespace perception { + +const double PI = 3.1415926535898; +const double kRadianToDegree = 57.29577951308232; + +// Error code definition +enum StatusCode { + SUCC = 0, + // Common error, process will proceeding and warning log will be printed. + // Under most circumstances, function should return this code when a error + // occurs. + FAIL = 1, + // Fatal error, process will be terminated and fatal log will be printed. + // Generated only when a fatal error occurs, such as config loading error. + FATAL = 2, + TAIL = 3, +}; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_COMMON_DEFINE_H_ diff --git a/modules/perception/common/perception_gflags.cc b/modules/perception/common/perception_gflags.cc index 96f6bbfcdfe..ac56c1e4de1 100644 --- a/modules/perception/common/perception_gflags.cc +++ b/modules/perception/common/perception_gflags.cc @@ -16,6 +16,36 @@ #include "modules/perception/common/perception_gflags.h" -DEFINE_int32(perception_loop_rate, 10, "Loop rate for perception node, in Hz."); - DEFINE_string(node_name, "perception", "The perception module name in proto"); + +DEFINE_string(adapter_config_filename, "modules/perception/conf/adapter.conf", + "The adapter config filename"); + +/// lib/config_manager/config_manager.cc +DEFINE_string(config_manager_path, "./conf/config_manager.config", + "The ModelConfig config paths file."); +DEFINE_string(work_root, "modules/perception", "Project work root direcotry."); + +/// obstacle/base/object.cc +DEFINE_bool(is_serialize_point_cloud, false, + "serialize and output object cloud"); + +/// obstacle/onboard/hdmap_input.cc +DEFINE_double(map_radius, 60.0, "get map radius of car center"); +DEFINE_int32(map_sample_step, 1, "step for sample road boundary points"); + +/// obstacle/onboard/lidar_process.cc +DEFINE_bool(enable_hdmap_input, false, "enable hdmap input for roi filter"); +DEFINE_string(onboard_roi_filter, "DummyROIFilter", "onboard roi filter"); +DEFINE_string(onboard_segmentor, "DummySegmentation", "onboard segmentation"); +DEFINE_string(onboard_object_builder, "DummyObjectBuilder", + "onboard object builder"); +DEFINE_string(onboard_tracker, "DummyTracker", "onboard tracker"); + +DEFINE_int32(tf2_buff_in_ms, 10, "the tf2 buff size in ms"); +DEFINE_string(lidar_tf2_frame_id, "world", "the tf2 transform frame id"); +DEFINE_string(lidar_tf2_child_frame_id, "velodyne64", + "the tf2 transform child frame id"); +DEFINE_string(obstacle_module_name, "perception_obstacle", + "perception obstacle module name"); +DEFINE_bool(enable_visualization, false, "enable visualization for debug"); diff --git a/modules/perception/common/perception_gflags.h b/modules/perception/common/perception_gflags.h index 1d94c2ad024..1fb8d88856b 100644 --- a/modules/perception/common/perception_gflags.h +++ b/modules/perception/common/perception_gflags.h @@ -19,6 +19,29 @@ #include "gflags/gflags.h" -DECLARE_int32(perception_loop_rate); +DECLARE_string(adapter_config_filename); + +/// lib/config_manager/config_manager.cc +DECLARE_string(config_manager_path); +DECLARE_string(work_root); + +/// obstacle/base/object.cc +DECLARE_bool(is_serialize_point_cloud); + +/// obstacle/onboard/hdmap_input.cc +DECLARE_double(map_radius); +DECLARE_int32(map_sample_step); + +/// obstacle/onboard/lidar_process.cc +DECLARE_bool(enable_hdmap_input); +DECLARE_string(onboard_roi_filter); +DECLARE_string(onboard_segmentor); +DECLARE_string(onboard_object_builder); +DECLARE_string(onboard_tracker); +DECLARE_int32(tf2_buff_in_ms); +DECLARE_string(lidar_tf2_frame_id); +DECLARE_string(lidar_tf2_child_frame_id); +DECLARE_string(obstacle_module_name); +DECLARE_bool(enable_visualization); #endif /* MODULES_PERCEPTION_COMMON_PERCEPTION_GFLAGS_H_ */ diff --git a/modules/perception/conf/BUILD b/modules/perception/conf/BUILD index 80dba5cfda7..4f738925c87 100644 --- a/modules/perception/conf/BUILD +++ b/modules/perception/conf/BUILD @@ -6,3 +6,11 @@ filegroup( "adapter.conf", ], ) + +filegroup( + name = "perception_config", + srcs = [ + "config_manager.config", + "perception.conf", + ], +) diff --git a/modules/perception/conf/adapter.conf b/modules/perception/conf/adapter.conf index 9891ad0b0ff..070ef5bb24f 100644 --- a/modules/perception/conf/adapter.conf +++ b/modules/perception/conf/adapter.conf @@ -1,11 +1,13 @@ -config { - type: PERCEPTION_OBSTACLES - mode: PUBLISH_ONLY - message_history_limit: 50 +config: { + type: POINT_CLOUD + mode: RECEIVE_ONLY + message_history_limit: 5 } + config { - type: TRAFFIC_LIGHT_DETECTION + type: PERCEPTION_OBSTACLES mode: PUBLISH_ONLY message_history_limit: 50 } + is_ros: true diff --git a/modules/perception/conf/config_manager.config b/modules/perception/conf/config_manager.config new file mode 100644 index 00000000000..d7014c1eebe --- /dev/null +++ b/modules/perception/conf/config_manager.config @@ -0,0 +1,3 @@ +model_config_path: "model/tracker.config" +model_config_path: "model/cnn_segmentation.config" +model_config_path: "model/hdmap_roi_filter.config" diff --git a/modules/perception/conf/perception.conf b/modules/perception/conf/perception.conf index e3382075876..b5eee8ef47d 100644 --- a/modules/perception/conf/perception.conf +++ b/modules/perception/conf/perception.conf @@ -1 +1,90 @@ ---adapter_config_path=modules/perception/conf/adapter.conf +# The pointcloud topic name. +# type: string +# default: /apollo/sensor/velodyne64/compensator/PointCloud2 +--pointcloud_topic=/apollo/sensor/velodyne64/compensator/PointCloud2 + +#################################################################### +# Flags from lib/config_manager/config_manager.cc +# The ModelConfig config paths file. +# type: string +# default: ./conf/config_manager.config +--config_manager_path=./conf/config_manager.config + +# Project work root directory. +# type: string +# default: "" +--work_root=modules/perception + +#################################################################### +# Flags from obstacle/base/object.cc +# Is serialize and output object cloud. +# type: bool +# default: false +--is_serialize_point_cloud=false + +#################################################################### +# Flags from obstacle/onboard/hdmap_input.cc + +# roi distance of car center +# type: double +# default: 60.0 +--map_radius=60.0 + +# step for sample road boundary points +# type: int32 +# default: 1 +--map_sample_step=1 + +--flagfile=modules/common/data/global_flagfile.txt + +#################################################################### +# Flags from obstacle/onboard/lidar_process.cc +# enable hdmap input for roi filter +# type: bool +# default: false +--enable_hdmap_input=true + +# roi filter before GroundDetector. +# type: string +# candidate: DummyROIFilter, HdmapROIFilter +--onboard_roi_filter=HdmapROIFilter + +# the segmentation algorithm for onboard +# type: string +# candidate: DummySegmentation, CNNSegmentation +--onboard_segmentor=CNNSegmentation + +# the object build algorithm for onboard +# type: string +# candidate: DummyObjectBuilder, MinBoxObjectBuilder +--onboard_object_builder=MinBoxObjectBuilder + +# the tracking algorithm for onboard +# type: string +# candidate: DummyTracker, HmObjectTracker +--onboard_tracker=HmObjectTracker + +# the perception module's output topic name. +# type: string +# default: perception_obstacle +--obstacle_module_name=perception_obstacle + +# Query Ros TF timeout in ms. ros::Duration time. +# type: int +# default: 10 +--tf2_buff_in_ms=10 + +# ros TF2 quary frame id. tf2_buffer.lookupTransform. +# type: string +# default: world +--lidar_tf2_frame_id=world + +# ros TF2 quary child frame id. tf2_buffer.lookupTransform. +# type: string +# default: velodyne64 +--lidar_tf2_child_frame_id=velodyne64 + +# enable visualization for debug +# type: bool +# default: false +--enable_visualization=false diff --git a/modules/perception/data/cnnseg_test/uscar_12_1470770225_1470770492_1349-detection.txt b/modules/perception/data/cnnseg_test/uscar_12_1470770225_1470770492_1349-detection.txt new file mode 100644 index 00000000000..d7a0daea741 --- /dev/null +++ b/modules/perception/data/cnnseg_test/uscar_12_1470770225_1470770492_1349-detection.txt @@ -0,0 +1,262145 @@ +512 512 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 85 +0 0 85 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 85 +0 0 85 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +127 127 127 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 40 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 40 +0 0 40 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 255 255 +0 0 40 +0 0 40 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 81 +0 0 81 +0 255 255 +0 255 255 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 255 255 +0 255 255 +0 255 255 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 245 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 245 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 245 +0 0 245 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 255 255 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 245 +0 0 0 +0 0 0 +0 0 245 +0 0 245 +0 0 0 +0 255 255 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 255 255 +0 0 0 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 255 255 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 255 255 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 255 255 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 255 255 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 255 255 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 0 245 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 149 +0 0 149 +0 255 255 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 255 255 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 255 255 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 255 255 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 255 255 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 250 +0 0 0 +0 0 0 +0 0 250 +0 0 250 +0 0 250 +0 255 255 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 255 255 +0 0 0 +0 0 250 +0 0 250 +0 0 0 +0 0 0 +0 0 250 +0 255 255 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 255 255 +0 0 0 +0 0 0 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 255 255 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 250 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 250 +0 255 255 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 250 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 250 +0 255 255 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 250 +0 0 0 +0 0 0 +0 0 0 +0 0 250 +0 0 250 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 250 +0 0 250 +0 0 0 +0 0 250 +0 0 250 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 255 255 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 255 255 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 250 +0 0 250 +0 0 0 +0 0 250 +0 255 255 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 250 +0 0 250 +0 0 250 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 255 255 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 255 255 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 0 250 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 250 +0 255 255 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 27 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 255 255 +0 0 185 +0 0 185 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 255 255 +0 0 249 +0 0 249 +0 0 249 +0 0 249 +0 0 249 +0 0 249 +0 0 249 +0 0 249 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 249 +0 0 249 +0 0 0 +0 0 249 +0 0 249 +0 0 249 +0 0 249 +0 0 249 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 249 +0 0 249 +0 0 249 +0 0 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 249 +0 0 249 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 255 255 +0 0 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 249 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 255 255 +0 0 0 +0 0 249 +0 0 249 +0 0 249 +0 0 249 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 249 +0 0 249 +0 0 249 +0 0 249 +0 0 249 +0 0 249 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 249 +0 0 0 +0 0 0 +0 0 0 +0 0 249 +0 0 249 +0 0 0 +0 255 255 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 249 +0 0 249 +0 255 255 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +127 127 127 +127 127 127 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/modules/perception/data/cnnseg_test/uscar_12_1470770225_1470770492_1349.pcd b/modules/perception/data/cnnseg_test/uscar_12_1470770225_1470770492_1349.pcd new file mode 100644 index 00000000000..46375a4f068 Binary files /dev/null and b/modules/perception/data/cnnseg_test/uscar_12_1470770225_1470770492_1349.pcd differ diff --git a/modules/perception/data/config_manager_test/config_manager.config b/modules/perception/data/config_manager_test/config_manager.config new file mode 100644 index 00000000000..5e26fff72ec --- /dev/null +++ b/modules/perception/data/config_manager_test/config_manager.config @@ -0,0 +1,4 @@ +model_config_path: "./config_manager_test/roi_filter_test.config" +model_config_path: "./config_manager_test/tracker_test.config" +model_config_path: "./config_manager_test/segmentation_test.config" +model_config_path: "./config_manager_test/hdmap_roi_filter.config" diff --git a/modules/perception/data/config_manager_test/hdmap_roi_filter.config b/modules/perception/data/config_manager_test/hdmap_roi_filter.config new file mode 100644 index 00000000000..95b582d47c5 --- /dev/null +++ b/modules/perception/data/config_manager_test/hdmap_roi_filter.config @@ -0,0 +1,30 @@ +model_configs { + # HdmapROIFilter model. + name: "HdmapROIFilter" + version: "1.0.0" + + # @name: range + # @brief: create a bitmap mask which represents [-range, range]*[-range, range] + # square area around the car. + # @required: range > 0.0 && range - (-range) > cell_size + double_params { + name: "range" + value: 70.0 + } + + # @name: cell_size + # @brief: discretize the area using small cells. + # @required: cell_size > 0.0 + double_params { + name: "cell_size" + value: 0.25 + } + + # @name: extend_dist + # @brief: extend the intervals returned by polygon scans conversion algorithm + # @required: none + double_params { + name: "extend_dist" + value: 0.0 + } +} diff --git a/modules/perception/data/config_manager_test/roi_filter_test.config b/modules/perception/data/config_manager_test/roi_filter_test.config new file mode 100644 index 00000000000..0a3c0183b9f --- /dev/null +++ b/modules/perception/data/config_manager_test/roi_filter_test.config @@ -0,0 +1,86 @@ +model_configs { + # ROIFilterTest model. + name: "ROIFilterTest" + version: "1.0.0" + integer_params { + name: "threshold1" + value: 1 + } + + integer_params { + name: "threshold2" + value: 2 + } + + string_params { + name: "threshold3" + value: "str3" + } + + double_params { + name: "threshold4" + value: 4.0 + } + + float_params { + name: "threshold5" + value: 5.0 + } + + bool_params { + name: "bool_value_true" + value: true + } + + bool_params { + name: "bool_value_false" + value: false + } + + array_integer_params { + name: "array_p1" + values: 1 + values: 2 + values: 3 + } + + array_string_params { + name: "array_p2" + values: "str1" + values: "str2" + values: "str3" + values: "str4" + } + + array_string_params { + name: "array_p3" + values: "str1" + values: "str2" + values: "str3" + values: "str4" + } + + array_double_params { + name: "array_p4" + values: 1.1 + values: 1.2 + values: 1.3 + values: 1.4 + } + + array_bool_params { + name: "array_bool" + values: true + values: false + values: true + values: true + } + + array_float_params { + name: "array_float" + values: 2.1 + values: 2.2 + values: 2.3 + values: 2.4 + } +} diff --git a/modules/perception/data/config_manager_test/segmentation_test.config b/modules/perception/data/config_manager_test/segmentation_test.config new file mode 100644 index 00000000000..e69de29bb2d diff --git a/modules/perception/data/config_manager_test/tracker_test.config b/modules/perception/data/config_manager_test/tracker_test.config new file mode 100644 index 00000000000..bf3d36a837c --- /dev/null +++ b/modules/perception/data/config_manager_test/tracker_test.config @@ -0,0 +1,60 @@ +model_configs { + # TrackerTest model. + name: "TrackerTest" + version: "1.0.0" + integer_params { + name: "threshold1" + value: 1 + } + + integer_params { + name: "threshold2" + value: 2 + } + + string_params { + name: "threshold3" + value: "str3" + } + + double_params { + name: "threshold4" + value: 4.0 + } + + float_params { + name: "threshold5" + value: 5.0 + } + + array_integer_params { + name: "array_p1" + values: 1 + values: 2 + values: 3 + } + + array_string_params { + name: "array_p2" + values: "str1" + values: "str2" + values: "str3" + values: "str4" + } + + array_string_params { + name: "array_p3" + values: "str1" + values: "str2" + values: "str3" + values: "str4" + } + + array_double_params { + name: "array_p4" + values: 1.1 + values: 1.2 + values: 1.3 + values: 1.4 + } +} diff --git a/modules/perception/data/hdmap_roi_filter_test/poly_mask_ut.pcd b/modules/perception/data/hdmap_roi_filter_test/poly_mask_ut.pcd new file mode 100644 index 00000000000..ce2a7b325b1 Binary files /dev/null and b/modules/perception/data/hdmap_roi_filter_test/poly_mask_ut.pcd differ diff --git a/modules/perception/data/hdmap_roi_filter_test/poly_mask_ut.png b/modules/perception/data/hdmap_roi_filter_test/poly_mask_ut.png new file mode 100644 index 00000000000..c5871502b76 Binary files /dev/null and b/modules/perception/data/hdmap_roi_filter_test/poly_mask_ut.png differ diff --git a/modules/perception/data/hdmap_roi_filter_test/poly_mask_ut.poly b/modules/perception/data/hdmap_roi_filter_test/poly_mask_ut.poly new file mode 100644 index 00000000000..de1066909f5 --- /dev/null +++ b/modules/perception/data/hdmap_roi_filter_test/poly_mask_ut.poly @@ -0,0 +1,164 @@ +2 +100 + -56.797295 21.719618 -35.257153 + -55.109047 21.095926 -35.279827 + -51.505474 19.890896 -35.328865 + -46.573025 18.245855 -35.396004 + -41.853970 16.594790 -35.459850 + -39.411713 15.704602 -35.492714 + -38.117691 15.171782 -35.509815 + -37.210770 14.746956 -35.521542 + -17.307014 4.653051 -35.774979 + -16.210264 4.166119 -35.789291 + -15.095193 3.722775 -35.804111 + -13.963129 3.324845 -35.819416 + -12.815557 2.974134 -35.835201 + -11.654149 2.672410 -35.851440 + -10.480737 2.421396 -35.868126 + -9.297334 2.222755 -35.885227 + -8.106133 2.078077 -35.902721 + -6.909502 1.988862 -35.920578 + -5.709984 1.956511 -35.938766 + -4.510309 1.982302 -35.957253 + -3.313378 2.067378 -35.975998 + -2.122262 2.212728 -35.994961 + -0.940200 2.419173 -36.014091 + 0.035485 2.638342 -36.030128 + 1.000476 2.900630 -36.046223 + 1.952659 3.206186 -36.062340 + 2.889837 3.555056 -36.078445 + 3.809781 3.947140 -36.094505 + 4.710231 4.382171 -36.110485 + 5.588755 4.859900 -36.126347 + 6.442970 5.379857 -36.142048 + 7.270809 5.940990 -36.157555 + 8.069407 6.542902 -36.172821 + 8.835688 7.185322 -36.187798 + 9.569380 7.865219 -36.202469 + 10.271077 8.578709 -36.216816 + 11.071718 9.473769 -36.233597 + 11.505333 9.996913 -36.242882 + 26.713064 36.198364 -36.608223 + 26.928568 37.378845 -36.617500 + 27.087154 38.568321 -36.625946 + 27.188049 39.764080 -36.633545 + 27.230597 40.963337 -36.640266 + 27.214281 42.163242 -36.646091 + 27.138723 43.360882 -36.651001 + 27.003695 44.553288 -36.654972 + 26.809116 45.737434 -36.657990 + 26.555073 46.910267 -36.660038 + 26.241806 48.068687 -36.661110 + 29.490210 48.965050 -36.715351 + 29.878679 47.591373 -36.714340 + 30.202415 46.201023 -36.712257 + 30.461609 44.797207 -36.709114 + 30.656610 43.383049 -36.704937 + 30.787926 41.961563 -36.699749 + 30.856201 40.535667 -36.693577 + 30.862219 39.108154 -36.686440 + 30.806879 37.681705 -36.678371 + 30.691198 36.258884 -36.669399 + 30.516283 34.842136 -36.659550 + 14.767246 7.251028 -36.278889 + 13.970146 6.412719 -36.262447 + 13.135984 5.612436 -36.245632 + 12.266781 4.851057 -36.228477 + 11.364559 4.129461 -36.211021 + 10.431340 3.448530 -36.193295 + 9.469160 2.809151 -36.175335 + 8.279223 2.098008 -36.153530 + 7.054143 1.449296 -36.131500 + 5.797502 0.864071 -36.109310 + 4.512857 0.343195 -36.087017 + 3.203741 -0.112689 -36.064678 + 1.873644 -0.503141 -36.042351 + 0.526004 -0.827909 -36.020084 + -0.835801 -1.086927 -35.997936 + -2.208465 -1.280312 -35.975956 + -3.588762 -1.408345 -35.954189 + -4.973547 -1.471466 -35.932682 + -6.359772 -1.470266 -35.911476 + -7.744485 -1.405476 -35.890617 + -9.124841 -1.277962 -35.870144 + -10.498097 -1.088708 -35.850090 + -11.861628 -0.838810 -35.830490 + -13.212917 -0.529472 -35.811382 + -14.549574 -0.161992 -35.792789 + -15.869317 0.262251 -35.774746 + -17.169991 0.741797 -35.757271 + -18.449575 1.275110 -35.740395 + -19.289938 1.659755 -35.729481 + -24.359314 -8.183993 -35.602081 + -43.562851 1.536656 -35.357468 + -38.454487 11.474043 -35.485939 + -39.358456 11.901594 -35.474274 + -40.463120 12.362632 -35.459705 + -41.958115 12.919719 -35.439651 + -46.663498 14.573189 -35.376026 + -49.875744 15.660888 -35.332382 + -55.363018 17.494202 -35.257706 + -57.061386 18.076418 -35.234669 + -58.366749 18.572729 -35.217209 +61 + 16.632355 -25.408609 -36.142075 + 32.943996 0.391788 -36.522278 + 45.869164 22.285410 -36.830887 + 50.146183 24.138117 -36.905708 + 58.545204 19.735392 -37.011929 + 71.166473 39.569790 -37.305462 + 70.097816 40.639034 -37.294525 + 67.772453 44.667198 -37.279339 + 66.639900 48.548214 -37.281658 + 67.229607 53.208767 -37.314278 + 69.603416 58.986172 -37.379848 + 74.579124 70.257896 -37.513046 + 67.384018 74.603920 -37.424961 + 66.646980 74.455078 -37.412930 + 66.092125 74.297897 -37.403645 + 65.042519 74.300293 -37.387596 + 63.378979 74.561600 -37.363464 + 62.044697 75.759232 -37.349113 + 61.496403 77.577576 -37.349930 + 61.308796 78.487892 -37.351669 + 50.965881 84.535103 -37.224030 + 45.927914 75.506798 -37.101238 + 43.925369 74.210236 -37.064034 + 39.441582 70.861618 -36.978474 + 35.819569 69.361534 -36.915462 + 31.346478 68.677803 -36.843559 + 27.309334 69.029167 -36.783566 + 22.557241 70.745949 -36.719547 + 17.011417 59.949547 -36.580032 + 17.955336 59.276699 -36.591068 + 21.909159 56.232269 -36.636150 + 24.093714 53.106419 -36.653751 + 26.566463 41.704506 -36.633858 + 26.455107 37.137882 -36.609035 + 22.981701 31.363352 -36.526653 + 10.103000 9.191478 -36.217346 + 6.440410 5.662829 -36.143440 + 1.158876 2.889174 -36.048588 + -3.588590 1.161052 -35.967197 + -10.305121 1.902931 -35.868187 + -17.943230 5.343270 -35.768738 + -25.250523 -8.207562 -35.588326 + -22.476599 -10.087483 -35.621250 + -19.131630 -12.593239 -35.659744 + -17.188578 -15.496134 -35.674778 + -15.802088 -18.465815 -35.680958 + -14.355320 -23.145086 -35.679401 + -14.222145 -26.288055 -35.665527 + -14.739930 -30.554495 -35.636005 + -16.605429 -36.050903 -35.579632 + -18.798969 -39.640949 -35.527893 + -11.523026 -43.941193 -35.617451 + -11.269746 -43.445347 -35.623837 + -10.687948 -42.826149 -35.635872 + -9.325750 -42.288799 -35.659435 + -8.120568 -42.159439 -35.678532 + -6.528458 -42.647484 -35.700420 + -5.380292 -44.775909 -35.707214 + -5.504132 -46.477070 -35.696705 + -6.312108 -48.008526 -35.676590 + -0.039604 -51.246975 -35.756168 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_2.pose b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_2.pose new file mode 100644 index 00000000000..019dcfd0ab7 --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_2.pose @@ -0,0 +1 @@ +11989 588.419051 33.330463 45.010161 40.746964 -0.002165 -0.010956 -0.639926 0.768355 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_2.seg b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_2.seg new file mode 100644 index 00000000000..3803d1572fe --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_2.seg @@ -0,0 +1,30 @@ +unknow 0.838741 1 0 37 -52.5717 -21.4468 0.0514659 187 -52.661 -21.1944 0.0514989 187 -52.4541 -21.5913 0.0516137 187 -52.5787 -20.9696 0.0519366 187 -52.7333 -20.3622 0.0521501 186 -52.713 -20.1643 0.0523963 186 -52.8697 -19.7497 0.0523965 186 -52.763 -19.9936 0.0524346 186 -52.0997 -21.6373 0.0524617 186 -50.8407 -19.8161 0.057517 182 -50.5793 -19.9894 0.0580092 181 -49.8279 -20.6001 0.380691 255 -50.0011 -20.2134 0.380736 252 -50.1606 -19.9121 0.380852 178 -49.9497 -20.467 0.380891 255 -49.8238 -20.782 0.380904 147 -50.7119 -19.8551 0.382443 244 -51.1618 -19.8463 0.383789 177 -51.6924 -19.8658 0.385412 190 -52.2984 -19.9106 0.387294 167 -52.9888 -19.8884 0.389357 153 -50.1061 -20.3361 0.701333 164 -50.1772 -20.1815 0.701407 164 -50.0504 -20.5887 0.701736 164 -50.0613 -20.7772 0.702488 164 -50.4537 -19.9253 0.702891 187 -50.428 -20.0985 0.703257 224 -51.0074 -19.8664 0.707417 165 -51.5343 -19.8851 0.711979 167 -52.0898 -19.9114 0.716816 168 -52.7239 -19.8693 0.722112 169 -53.457 -19.9536 0.728671 171 -51.1806 -20.0029 1.07505 134 -51.383 -19.8962 1.07743 134 -51.3143 -21.5572 1.08626 135 -53.3455 -19.9854 1.10696 137 -51.6346 -20.1399 1.3654 168 +unknow 0.575044 1 0 11 56.2125 -12.5726 -1.64906 95 56.1591 -12.7461 -1.64861 133 56.0057 -11.606 -1.63595 94 55.8878 -11.8565 -1.6339 133 55.9733 -11.416 -1.63369 94 56.2205 -12.5538 -1.35281 112 55.8943 -12.2045 -1.34213 112 55.9213 -11.5677 -1.33924 111 55.8486 -11.8273 -1.33876 159 56.1982 -11.7889 -0.9633 212 55.9086 -11.9117 -0.958042 208 +unknow 0.786892 1 0 28 55.8073 -22.6115 -1.73356 144 55.8298 -22.4167 -1.73188 162 55.9427 -21.9535 -1.72974 228 55.9032 -22.2223 -1.42223 134 55.8034 -22.3859 -1.42136 164 55.7309 -22.5603 -1.42131 206 55.8729 -21.7036 -1.41631 160 55.663 -23.6345 -1.02582 255 55.711 -23.3457 -1.02442 255 55.7361 -23.1506 -1.02336 255 55.7678 -22.9587 -1.02245 255 55.8365 -22.6798 -1.02159 255 55.8685 -22.4886 -1.02073 255 55.898 -22.2967 -1.01983 255 55.9894 -22.0279 -1.01954 255 56.0323 -21.8418 -1.01896 255 56.885 -24.5459 -0.767654 163 56.9215 -23.4033 -0.761175 163 56.0185 -23.2377 -0.747043 190 55.9219 -22.4799 -0.741108 160 55.7049 -24.9173 -0.349329 248 56.4415 -23.1477 -0.349102 206 55.7189 -24.7138 -0.348686 206 55.7322 -24.5105 -0.348043 206 55.9149 -23.5498 -0.346087 233 55.7996 -23.8115 -0.346057 214 56.0192 -23.1805 -0.345659 205 55.9424 -23.3548 -0.345627 205 +unknow 0.427277 1 0 4 54.7344 4.84064 -1.28044 108 55.2599 5.02201 -0.66523 151 55.6167 5.09924 -0.301507 193 54.9701 4.89895 0.0560294 183 +unknow 0.83508 1 0 42 53.0146 -25.8763 -1.69425 123 52.8604 -25.4935 -1.68437 152 52.8411 -25.2799 -1.68082 128 52.8281 -25.0701 -1.67753 135 52.8415 -24.8734 -1.6752 151 52.8657 -24.5811 -1.67191 156 53.9205 -22.0454 -1.6703 118 52.8809 -24.3865 -1.66971 155 52.8754 -24.1829 -1.6668 153 52.9123 -23.8989 -1.66409 157 52.9214 -23.7032 -1.66176 161 52.9353 -23.5101 -1.65963 137 52.9211 -23.305 -1.65653 128 53.0065 -23.045 -1.65569 124 53.321 -22.0944 -1.65302 95 52.9923 -22.8412 -1.65265 172 53.1978 -22.2395 -1.65116 95 53.0282 -22.3646 -1.64768 188 52.9768 -25.5279 -1.38568 114 52.7948 -25.7474 -1.38384 114 52.7912 -25.0308 -1.37532 173 52.7863 -24.8256 -1.37282 190 52.8447 -24.5496 -1.37108 157 52.8327 -24.3424 -1.36842 155 52.8307 -24.1406 -1.36609 205 52.8892 -23.8666 -1.36445 170 52.8855 -23.6652 -1.36212 175 52.8938 -23.4697 -1.36016 177 52.9361 -23.1905 -1.35815 178 52.9481 -22.9978 -1.35636 144 53.1333 -22.387 -1.35445 112 52.9574 -22.6073 -1.3524 175 52.9351 -25.6888 -0.992546 183 52.9798 -25.4028 -0.990826 183 52.951 -25.1847 -0.988374 183 52.9666 -24.9884 -0.986942 183 53.0384 -24.7175 -0.985915 183 53.0432 -24.114 -0.980843 182 53.1239 -23.1509 -0.974335 181 52.9338 -23.3655 -0.972546 181 52.851 -23.5277 -0.972346 181 53.0536 -25.4065 -0.7184 157 +unknow 0.946254 1 0 34 49.8913 -28.9879 -1.65268 104 50.0083 -28.7415 -1.65196 95 50.0087 -28.3254 -1.64531 145 50.0492 -28.0377 -1.64189 158 50.0479 -27.8308 -1.63859 149 51.2335 -25.4077 -1.63602 94 50.0546 -27.629 -1.63562 147 50.1208 -26.4458 -1.61935 194 50.6236 -25.4034 -1.61835 94 50.1647 -26.2678 -1.61792 144 50.1281 -26.0484 -1.6136 144 50.3651 -25.4722 -1.61191 126 50.2278 -25.6013 -1.60985 241 49.9841 -29.229 -1.36128 161 49.9167 -28.9794 -1.35629 131 49.9014 -28.4487 -1.34875 179 49.9262 -28.2553 -1.34674 209 49.9837 -27.9777 -1.3444 204 49.9771 -27.7681 -1.34147 209 51.2117 -25.3741 -1.34087 111 49.9818 -27.5655 -1.33892 171 50.7181 -25.4277 -1.32955 111 50.1424 -26.4338 -1.32816 111 50.3865 -25.4597 -1.32191 180 50.1259 -25.7246 -1.31888 201 50.2065 -25.567 -1.31888 229 50.0917 -27.7063 -0.960053 235 50.1136 -27.5132 -0.958539 209 50.8214 -25.9592 -0.95642 179 50.4427 -26.0663 -0.95055 178 50.2566 -26.3716 -0.950068 246 50.3144 -26.2006 -0.949493 178 51.1221 -28.7693 -0.715937 157 50.1656 -28.9615 -0.704363 156 +unknow 0.899616 1 0 48 47.9725 30.2138 -2.33661 221 48.0384 29.3149 -2.31787 186 48.0495 29.0118 -2.31123 208 47.9297 28.7342 -2.30019 210 48.0971 28.3234 -2.29724 227 47.9099 28.518 -2.29445 255 46.3078 30.0872 -2.27055 184 46.3788 28.5015 -2.23521 188 46.2024 28.5934 -2.23063 181 45.9428 28.6327 -2.22166 190 45.6406 28.9444 -2.21761 205 48.9709 28.4248 -1.97279 196 48.2006 28.4865 -1.94837 194 47.8652 28.4917 -1.93735 193 47.5406 28.5012 -1.9268 193 46.834 28.5804 -1.90507 191 45.7949 28.6425 -1.87225 196 45.6107 28.9276 -1.87209 189 45.6692 28.7639 -1.87063 189 49.1865 28.458 -1.62329 153 48.736 28.4019 -1.60982 172 48.3811 28.3989 -1.59989 178 47.9821 28.4693 -1.58996 160 47.6351 28.466 -1.58029 165 47.3023 28.469 -1.57114 180 46.9218 28.5419 -1.56185 178 46.5848 28.5377 -1.5525 153 45.6785 29.5862 -1.54579 132 46.2653 28.5421 -1.5438 170 45.667 29.3755 -1.54179 123 45.7071 29.0976 -1.53806 143 45.9743 28.6624 -1.53787 196 45.8654 28.795 -1.53716 123 45.7341 28.9133 -1.53561 213 49.0356 28.3945 -1.32653 170 48.7302 28.4226 -1.31976 154 48.3648 28.4136 -1.31109 190 48.0395 28.528 -1.30507 110 47.7077 28.5342 -1.29743 109 46.7527 28.4644 -1.2743 108 46.6596 28.6091 -1.27419 108 48.5777 28.663 -0.941785 178 47.3221 29.8607 -0.932633 177 47.2107 29.5833 -0.927702 198 47.2273 29.2845 -0.92477 200 47.4404 28.6993 -0.92225 255 47.2135 29.071 -0.922245 237 47.2466 28.887 -0.920861 238 +unknow 0.9395 1 0 35 46.0587 21.0389 -2.0646 172 43.7156 19.7186 -1.94426 164 43.936 18.9113 -1.93871 164 43.6642 19.5305 -1.9387 164 43.8544 19.0397 -1.93763 164 43.7093 19.222 -1.93493 164 44.3242 20.0849 -1.66607 174 43.559 19.4918 -1.6298 171 43.3752 19.2463 -1.61948 242 43.3695 19.0811 -1.6167 216 43.4018 18.9327 -1.61555 217 43.5889 18.4466 -1.61479 255 43.5013 18.5709 -1.61355 255 43.4097 18.6933 -1.61217 255 45.7143 20.8034 -1.41053 85 43.6918 19.6336 -1.33557 82 43.5214 19.3928 -1.32739 147 43.7233 18.7465 -1.32501 130 43.6238 18.8663 -1.32359 112 43.4725 19.2075 -1.32352 207 44.4437 19.9995 -1.11183 112 43.9256 19.601 -1.09461 97 43.7949 19.3781 -1.08892 125 43.8007 19.2163 -1.0873 164 44.0879 18.5221 -1.08704 138 44.0001 18.7297 -1.08704 139 43.8522 18.9931 -1.08617 162 43.9006 18.8505 -1.08584 169 45.2821 20.302 -0.803662 161 45.2205 20.1393 -0.57078 138 45.1958 19.9584 -0.569272 138 45.4853 19.2383 -0.56897 138 45.2362 19.722 -0.568364 137 45.3555 19.4359 -0.568305 137 45.2832 19.5735 -0.568115 137 +unknow 0.888617 1 0 45 33.7994 -9.00957 -1.75853 103 33.7531 -8.71397 -1.75178 132 33.3438 -9.67845 -1.74394 150 33.4821 -9.15089 -1.74336 102 33.2289 -9.75846 -1.73899 255 33.3577 -9.28614 -1.73864 181 33.6609 -9.58175 -1.56254 119 33.739 -9.09034 -1.55969 86 33.6921 -8.96422 -1.55574 86 33.732 -8.80484 -1.55564 86 33.6609 -8.67333 -1.55048 85 33.2682 -9.63939 -1.54423 133 33.3568 -9.26872 -1.54341 133 33.1687 -9.72358 -1.54059 146 33.6842 -10.0373 -1.36938 153 33.6792 -9.92072 -1.36767 167 33.7801 -9.31931 -1.3646 255 33.6905 -9.12408 -1.3584 178 33.7105 -8.90255 -1.35669 125 33.6611 -9.00275 -1.35571 170 33.7192 -8.7351 -1.35516 125 33.4593 -9.45766 -1.3524 199 33.3149 -9.7001 -1.34917 171 33.3195 -9.30533 -1.34449 223 33.1935 -9.55185 -1.34208 237 33.7155 -9.11057 -1.13704 131 33.5605 -8.95552 -1.12972 131 33.5595 -8.84238 -1.12856 131 33.2998 -9.39207 -1.12449 130 33.1003 -9.61698 -1.11949 163 33.1203 -9.45374 -1.11848 233 33.6378 -9.04744 -0.914656 63 33.1443 -9.58844 -0.90403 189 33.1994 -9.32244 -0.903379 62 33.1353 -9.41688 -0.902221 252 33.797 -9.05632 -0.739821 74 33.751 -9.15773 -0.739336 122 33.694 -9.31294 -0.73896 215 33.2449 -9.301 -0.727148 176 33.1152 -9.54572 -0.725582 226 33.0867 -9.36881 -0.723519 247 33.2478 -9.36718 -0.496593 118 33.172 -9.45846 -0.495617 255 33.2384 -9.43758 -0.336101 155 33.2583 -9.33041 -0.335941 102 +unknow 0.901154 1 0 49 28.974 -20.4202 -1.78512 131 29.5305 -19.5201 -1.78239 125 28.8641 -20.4788 -1.78197 126 28.7688 -20.5474 -1.77984 128 28.6538 -20.6699 -1.7786 162 28.5185 -20.846 -1.77827 166 28.5822 -20.7551 -1.77816 165 28.4087 -20.9719 -1.77749 169 32.2082 -19.8476 -1.70635 92 31.9641 -19.8359 -1.69552 91 31.7798 -19.8599 -1.68824 100 29.4811 -21.5305 -1.63922 89 29.2654 -21.514 -1.62991 139 29.0338 -21.5552 -1.62172 165 29.2709 -21.0958 -1.61766 88 29.8046 -19.6826 -1.59921 130 28.9071 -20.9716 -1.59904 98 28.9214 -20.6371 -1.58972 87 29.4723 -19.663 -1.58464 124 28.7841 -20.4028 -1.57717 95 32.4113 -19.885 -1.49888 135 32.1616 -19.8713 -1.489 135 31.9361 -19.871 -1.48038 134 29.8951 -19.6617 -1.39807 128 29.599 -19.6676 -1.38712 168 28.6354 -20.5563 -1.37422 255 28.6587 -20.3691 -1.37017 255 28.7681 -20.176 -1.36918 255 28.667 -20.2398 -1.36712 255 32.2957 -19.9344 -1.25401 141 30.9593 -19.7183 -1.20593 137 29.8009 -19.7116 -1.16834 134 28.9006 -20.9993 -1.16814 134 29.6612 -19.8207 -1.16619 134 28.8287 -20.8089 -1.16159 133 28.8728 -20.6344 -1.15904 133 28.7698 -20.4243 -1.1511 132 29.0975 -20.9498 -0.947889 64 29.064 -20.7185 -0.942661 64 29.0441 -20.5671 -0.939305 64 31.5961 -19.8921 -0.803692 79 31.3765 -19.8916 -0.798654 78 29.7663 -21.0387 -0.779721 90 29.885 -19.8795 -0.764574 76 31.1759 -20.141 -0.376705 147 31.0153 -20.1755 -0.374881 127 30.715 -20.4643 -0.373441 125 30.8598 -20.2125 -0.373152 126 30.7542 -20.3511 -0.372966 125 +unknow 0.880691 1 0 74 27.8277 26.4942 -2.18067 133 25.042 24.7723 -2.1799 104 25.1615 24.5796 -2.17651 106 25.0728 24.6473 -2.17543 98 27.6492 26.4904 -2.17247 172 25.1885 24.4517 -2.17177 135 25.3452 24.22 -2.16852 109 27.4666 26.4816 -2.16389 141 26.3414 24.5349 -2.0297 117 26.1607 24.5207 -2.02087 107 25.9615 24.4878 -2.01044 116 27.3264 24.7232 -1.86326 128 27.0549 24.7102 -1.85146 128 26.8508 24.6788 -1.8418 147 26.6032 24.6056 -1.82876 174 26.3557 24.608 -1.81864 129 26.1081 24.5306 -1.80549 126 25.3744 25.2293 -1.80313 255 25.4039 25.1003 -1.79919 255 25.5549 24.7 -1.78953 145 25.6281 24.6154 -1.7892 255 27.6722 24.7406 -1.66937 90 27.4635 24.71 -1.66047 90 27.2347 24.6595 -1.65015 90 26.9706 24.6529 -1.64003 89 26.7268 24.5848 -1.6286 102 26.5277 24.5561 -1.6202 110 26.3839 24.655 -1.61828 88 26.0879 24.5326 -1.60311 88 25.4067 24.9675 -1.59349 100 25.5126 24.8363 -1.59268 87 25.8452 24.4581 -1.59158 101 25.6878 24.5396 -1.58864 87 25.5316 24.6991 -1.58854 87 25.5817 24.5925 -1.58662 87 27.1551 24.6825 -1.43831 131 26.8884 24.6723 -1.42916 130 26.6802 24.6359 -1.42117 130 26.493 24.6175 -1.41444 129 26.2092 24.5848 -1.40412 142 25.5134 25.1669 -1.39971 154 25.5932 25.0086 -1.39729 145 25.6401 24.8974 -1.39532 145 25.908 24.6099 -1.39505 218 25.6909 24.7904 -1.39361 151 25.7557 24.6971 -1.39281 191 27.799 24.8172 -1.22667 139 27.5811 24.7789 -1.21943 138 27.3277 24.7852 -1.21235 138 26.1466 25.6558 -1.20225 159 26.1483 25.4968 -1.19801 137 26.6752 24.7339 -1.19247 136 26.1646 25.2734 -1.19247 136 26.7826 24.5998 -1.19201 136 26.1746 25.1247 -1.18877 136 26.2216 25.012 -1.18708 136 26.4819 24.71 -1.18639 136 26.313 24.8635 -1.18569 136 26.3735 24.7643 -1.18477 135 27.5554 25.2135 -0.995236 67 27.5945 25.0905 -0.993497 66 26.6531 26.054 -0.992713 66 26.7727 24.8857 -0.969518 65 26.9795 26.0055 -0.806511 79 26.9585 25.8225 -0.802666 79 27.6844 24.9771 -0.801484 79 26.9957 25.6154 -0.799527 79 26.9873 25.4469 -0.796224 78 27.0043 25.3032 -0.793896 78 27.2337 24.9616 -0.792166 78 27.069 25.1254 -0.791893 78 27.111 25.0064 -0.79054 78 25.661 24.2431 0.944657 115 25.9217 24.2133 1.57775 68 +unknow 0.965445 1 0 196 24.8547 -19.5015 -1.75625 118 24.7761 -19.5659 -1.75488 162 24.5455 -19.8258 -1.75377 117 24.6618 -19.665 -1.75315 111 24.5937 -19.7373 -1.75265 153 24.463 -19.8864 -1.75216 149 24.3598 -19.9939 -1.75142 119 24.2722 -20.05 -1.74943 153 24.206 -20.1236 -1.74918 121 23.7198 -20.4874 -1.74074 105 23.6538 -20.5605 -1.74062 117 23.5531 -20.6032 -1.73764 146 23.4482 -20.7073 -1.73702 114 23.3652 -20.7649 -1.73553 145 23.282 -20.8223 -1.73404 112 23.1 -20.9884 -1.73255 116 23.1584 -20.909 -1.73193 146 22.9927 -21.0231 -1.72907 146 22.9163 -21.0857 -1.72821 115 22.7904 -21.169 -1.72597 154 22.7179 -21.2351 -1.72548 116 22.5959 -21.2543 -1.72075 160 23.3898 -19.6311 -1.69051 124 23.0976 -19.7597 -1.68181 108 23.1726 -19.573 -1.67783 150 23.0547 -19.5978 -1.67323 118 26.1093 -19.6596 -1.62953 186 25.9257 -19.7136 -1.62312 137 25.6778 -19.7812 -1.61436 111 25.5544 -19.8787 -1.61223 96 25.7049 -19.6738 -1.61188 139 24.153 -21.2859 -1.60204 128 25.3014 -19.8101 -1.59862 155 25.1104 -19.7882 -1.58941 150 24.8962 -19.7468 -1.5785 211 24.6844 -19.7691 -1.56996 155 23.324 -21.2832 -1.56719 145 23.3567 -21.179 -1.5646 146 23.3994 -21.0841 -1.5628 206 24.4899 -19.7402 -1.56041 179 23.0921 -21.2052 -1.5546 133 22.9758 -21.2989 -1.55337 128 24.2912 -19.7064 -1.55051 182 23.5214 -20.5342 -1.54739 119 24.0775 -19.7221 -1.54175 177 23.9106 -19.7113 -1.5341 181 23.7101 -19.6717 -1.52399 185 23.4946 -19.6808 -1.51499 147 23.3181 -19.658 -1.50656 159 22.934 -19.77 -1.4942 226 22.9814 -19.6228 -1.49083 114 26.3241 -19.6691 -1.45454 153 26.1521 -19.6688 -1.44756 219 25.8843 -19.6588 -1.43643 113 25.7161 -19.6586 -1.42965 110 25.5657 -19.671 -1.42399 228 25.3056 -19.6613 -1.41326 146 25.1321 -19.6532 -1.40608 160 24.9463 -19.6344 -1.39809 159 24.7718 -19.6232 -1.3908 163 24.5606 -19.6448 -1.38311 161 24.3992 -19.6417 -1.37664 164 24.2242 -19.6263 -1.36925 160 24.0186 -19.6479 -1.36187 163 23.8566 -19.6406 -1.35529 164 23.6611 -19.6045 -1.34649 148 22.3145 -20.9206 -1.33945 76 23.3277 -19.639 -1.33465 161 22.2464 -20.5953 -1.32568 75 22.2799 -20.4321 -1.32132 75 22.9943 -19.6062 -1.32069 75 22.8502 -19.67 -1.31725 223 22.7083 -19.6723 -1.31189 161 22.3131 -20.015 -1.30836 75 22.5787 -19.6844 -1.30734 182 22.3147 -19.8902 -1.30421 81 26.3822 -19.6404 -1.26819 230 25.9991 -19.6748 -1.25535 162 25.775 -19.633 -1.2462 131 25.6196 -19.6423 -1.2409 117 25.386 -19.654 -1.23291 224 25.2169 -19.6503 -1.22681 205 25.0308 -19.6321 -1.21972 210 24.856 -19.6216 -1.21326 207 24.6491 -19.6477 -1.2067 206 24.4672 -19.6288 -1.19979 207 24.3027 -19.6229 -1.19387 212 24.0984 -19.6464 -1.18741 208 23.9408 -19.6435 -1.18184 212 23.7726 -19.6309 -1.17565 207 22.3783 -21.0436 -1.17066 204 23.5939 -19.6085 -1.16882 180 22.3289 -20.8655 -1.16356 193 22.302 -20.7097 -1.15791 201 23.2391 -19.6245 -1.15707 145 22.2876 -20.5664 -1.15305 202 23.0981 -19.6302 -1.1524 158 22.309 -20.3925 -1.14847 208 22.9051 -19.6531 -1.14648 250 22.3167 -20.2713 -1.14506 206 22.7918 -19.6806 -1.14342 199 22.312 -20.1396 -1.14092 207 22.6514 -19.684 -1.13876 202 22.3604 -19.993 -1.13814 206 22.3948 -19.8974 -1.13643 210 22.5103 -19.7484 -1.13589 213 22.4347 -19.8071 -1.13508 214 26.3668 -19.7312 -1.06049 125 26.0478 -19.6202 -1.04808 255 25.8295 -19.647 -1.042 241 25.6646 -19.649 -1.03699 207 25.4761 -19.6319 -1.03083 231 25.2714 -19.6645 -1.02536 204 25.0727 -19.6365 -1.01866 233 24.8933 -19.6222 -1.01288 209 24.6802 -19.6434 -1.00695 205 24.4906 -19.6183 -1.00063 233 24.3262 -19.6123 -0.995544 209 24.1606 -19.6041 -0.990382 207 23.9613 -19.6303 -0.985067 208 23.8071 -19.6291 -0.980445 211 22.4333 -21.0631 -0.977249 182 23.6331 -19.6105 -0.974821 207 22.384 -20.8847 -0.971158 213 23.4378 -19.6356 -0.96966 200 22.3675 -20.7381 -0.96684 189 23.2615 -19.6124 -0.963882 230 22.3679 -20.5432 -0.961751 224 23.1313 -19.6272 -0.960416 208 22.3822 -20.427 -0.959128 196 22.992 -19.6335 -0.956487 214 22.3634 -20.2813 -0.95481 204 22.8267 -19.6789 -0.952791 217 22.3721 -20.1614 -0.951957 250 22.4207 -20.0144 -0.949565 190 22.6893 -19.685 -0.948939 223 22.4521 -19.916 -0.947944 218 22.5867 -19.7206 -0.94686 238 22.4831 -19.8176 -0.946324 237 25.9474 -19.822 -0.844581 59 25.6804 -19.7464 -0.836263 140 25.3055 -19.7766 -0.827303 86 25.3295 -19.6676 -0.825752 107 25.0986 -19.7424 -0.821371 81 24.9266 -19.7344 -0.816858 58 24.6459 -19.702 -0.80912 188 24.4794 -19.6955 -0.804801 186 24.3071 -19.6831 -0.800224 145 24.0948 -19.7001 -0.79526 145 23.9293 -19.6907 -0.79094 146 23.7749 -19.6893 -0.787072 145 22.4944 -20.9473 -0.782852 173 23.5637 -19.7025 -0.782109 156 23.4052 -19.6954 -0.778047 145 22.425 -20.7517 -0.776916 255 23.2486 -19.6889 -0.77405 146 22.3943 -20.5284 -0.771301 255 23.0968 -19.6854 -0.770246 151 22.3936 -20.3988 -0.768461 255 22.9477 -19.7458 -0.767862 93 22.7734 -19.8463 -0.765738 188 22.4727 -20.1503 -0.764973 149 22.3537 -20.2345 -0.763943 255 22.4716 -20.0224 -0.762197 131 22.5225 -19.9411 -0.761679 108 22.5535 -19.8426 -0.760322 109 25.424 -19.8257 -0.665587 69 25.1829 -19.8933 -0.66158 90 24.4561 -20.0787 -0.649394 68 24.1927 -20.1181 -0.644574 81 24.2729 -19.8006 -0.640772 67 23.6156 -19.8265 -0.627499 66 22.493 -20.8981 -0.623953 106 22.4456 -20.7229 -0.619777 131 23.2166 -19.7412 -0.617745 114 22.4693 -20.5493 -0.617063 131 22.592 -20.4024 -0.616842 112 22.5056 -20.4531 -0.616031 171 22.6522 -20.2637 -0.615538 139 23.0551 -19.7917 -0.615308 223 22.6918 -20.1711 -0.614669 90 22.7371 -20.0838 -0.614016 86 22.9399 -19.8182 -0.613413 164 24.9926 -19.8859 -0.443756 110 24.9082 -19.9468 -0.443187 110 23.486 -21.1608 -0.437144 109 23.3854 -20.8716 -0.431672 108 23.4059 -20.7583 -0.430445 108 23.3704 -20.5961 -0.427708 107 23.9115 -19.8373 -0.426015 107 23.7886 -19.9254 -0.425243 107 23.3131 -20.416 -0.4244 107 23.3743 -20.2758 -0.423458 107 23.3878 -20.1592 -0.422109 107 23.6004 -19.8944 -0.421898 203 23.5119 -19.9465 -0.421206 138 +unknow 0.771602 1 0 49 21.0605 22.8636 -2.07384 196 20.9216 22.9287 -2.07046 189 20.0413 22.8863 -2.02499 185 19.8561 22.8916 -2.01634 213 21.1967 22.8938 -1.90664 164 20.9897 22.8134 -1.8931 62 20.6158 22.7629 -1.87345 97 20.4922 22.7697 -1.86817 167 20.289 22.903 -1.86573 89 20.3263 22.8004 -1.8622 133 20.1629 22.9052 -1.86017 98 20.0515 22.9233 -1.85611 99 19.8531 22.9134 -1.84676 91 21.1892 22.8125 -1.72699 99 21.0998 22.8599 -1.72537 102 20.8942 22.7806 -1.71307 163 20.7315 22.8183 -1.70797 101 20.4316 22.9912 -1.7035 71 20.4369 22.7803 -1.69393 219 20.1648 22.8355 -1.68523 83 20.0877 22.8927 -1.68474 92 19.9474 22.8775 -1.67827 105 20.399 22.9993 -1.51946 150 20.438 22.8255 -1.51362 201 20.0583 23.0489 -1.5089 224 20.113 22.8205 -1.50125 176 20.0084 22.8459 -1.49844 151 20.7462 22.6938 -1.34668 148 20.5934 22.741 -1.34324 190 20.4737 22.7521 -1.3396 199 20.2745 22.8898 -1.33808 147 20.3661 22.7762 -1.33687 170 19.9411 22.9458 -1.32908 174 19.9684 22.832 -1.32564 160 20.0228 22.7496 -1.32433 188 20.8765 22.7679 -1.17751 165 20.7766 22.8024 -1.17563 209 20.6502 22.8792 -1.17437 255 20.4006 23.0354 -1.17212 158 20.4051 22.8951 -1.16755 192 20.4356 22.7847 -1.16477 175 20.7233 23.1407 -0.987663 255 20.6687 22.9345 -0.980347 192 20.6801 22.8029 -0.976882 214 20.7482 22.6625 -0.97465 239 20.7234 22.8953 -0.786658 205 20.8162 22.7812 -0.78595 178 20.6824 22.9021 -0.627336 95 20.7591 22.7704 -0.626092 151 +unknow 0.785952 1 0 111 16.4398 -16.879 -1.71144 118 16.2957 -16.9961 -1.71014 121 16.359 -16.9019 -1.70819 154 16.1612 -17.0692 -1.70689 113 16.212 -17.0155 -1.70656 159 16.0765 -17.1408 -1.7064 125 15.8789 -17.3078 -1.70543 135 15.7618 -17.3983 -1.70446 162 15.807 -17.3384 -1.70332 149 15.9953 -17.1621 -1.70315 163 15.94 -17.2108 -1.70299 121 15.675 -17.4122 -1.70055 162 15.5503 -17.4383 -1.69535 151 15.4769 -17.4662 -1.69307 156 15.4048 -17.4954 -1.69096 142 15.2656 -17.6143 -1.6908 128 15.3025 -17.5452 -1.68852 132 16.9759 -17.6142 -1.58757 163 16.6254 -17.6342 -1.57084 135 16.2887 -17.6618 -1.55544 133 16.1981 -17.6746 -1.55163 133 15.9915 -17.6148 -1.53813 132 15.8199 -17.5359 -1.52537 131 15.6531 -17.4607 -1.51304 168 15.564 -17.5268 -1.51231 145 15.4733 -17.5352 -1.50835 130 17.0476 -17.573 -1.45133 106 16.9549 -17.5877 -1.44767 79 16.7832 -17.6856 -1.44442 152 16.8097 -17.6026 -1.44157 97 16.6001 -17.6034 -1.43182 82 16.4573 -17.5624 -1.42315 169 16.3268 -17.5886 -1.41841 203 16.2078 -17.5709 -1.41204 113 16.0715 -17.5336 -1.40391 158 15.9551 -17.5723 -1.40052 104 15.77 -17.4787 -1.38738 194 15.6559 -17.573 -1.38697 74 15.5187 -17.5853 -1.38142 177 15.4489 -17.6175 -1.37993 87 17.1731 -17.8552 -1.33168 206 16.7064 -17.5337 -1.29712 218 16.3677 -17.3953 -1.27636 132 16.0958 -17.4875 -1.26903 203 15.9407 -17.4834 -1.26232 179 16.2619 -17.174 -1.26181 103 16.068 -17.3474 -1.26145 135 15.8509 -17.4949 -1.25909 140 15.7171 -17.457 -1.25176 107 15.6303 -17.4706 -1.24877 88 15.4649 -17.5613 -1.24617 119 15.4949 -17.4842 -1.2438 194 16.9611 -17.5053 -1.16177 120 16.8825 -17.534 -1.15986 222 16.7817 -17.5946 -1.1584 171 16.2883 -17.6795 -1.14289 202 16.3342 -17.618 -1.1421 179 16.3926 -17.4049 -1.13558 255 16.1003 -17.5864 -1.13187 154 16.2381 -17.4047 -1.12962 239 15.8763 -17.5069 -1.12007 255 15.7797 -17.5107 -1.11658 214 15.6819 -17.5127 -1.11299 214 15.5899 -17.5759 -1.1122 205 16.8945 -17.5075 -1.0224 61 16.7139 -17.4843 -1.01521 118 16.4226 -17.2874 -0.997808 234 16.3189 -17.2866 -0.994166 232 16.2304 -17.356 -0.993662 211 15.9714 -17.5704 -0.992758 139 16.1595 -17.3893 -0.992449 194 16.0953 -17.4297 -0.991742 229 16.0135 -17.4507 -0.98972 255 15.4836 -17.5247 -0.974547 107 15.5001 -17.4326 -0.971611 86 16.468 -17.2951 -0.863404 226 16.4095 -17.3424 -0.863136 191 15.9718 -17.6414 -0.859644 206 16.2864 -17.3212 -0.858648 255 16.161 -17.351 -0.855776 245 15.9544 -17.5114 -0.854794 234 16.0724 -17.3651 -0.853533 249 16.0083 -17.4052 -0.852906 255 16.4941 -17.4984 -0.717928 146 16.5983 -17.2252 -0.713067 179 16.3216 -17.4794 -0.712843 164 16.4232 -17.2048 -0.707828 190 16.3581 -17.2447 -0.707213 184 15.9011 -17.5188 -0.702984 167 16.0819 -17.3312 -0.702362 223 15.9157 -17.4245 -0.70067 180 15.9908 -17.3419 -0.700283 211 16.5751 -17.3472 -0.565241 44 15.9374 -17.5425 -0.555835 175 16.1225 -17.3589 -0.555507 175 16.2556 -17.2288 -0.555375 44 15.9928 -17.4378 -0.554542 193 16.1551 -17.2848 -0.554473 221 16.034 -17.3728 -0.553896 199 15.9637 -17.6246 -0.436244 137 16.1961 -17.2717 -0.433471 52 15.9409 -17.4885 -0.433098 175 16.0574 -17.3408 -0.432281 243 15.9961 -17.3838 -0.432011 200 16.0941 -17.2712 -0.431575 52 16.3008 -17.4707 -0.279631 84 16.0672 -17.6046 -0.278411 152 16.1215 -17.4979 -0.277552 255 16.1478 -17.4164 -0.276693 83 16.1306 -17.445 -0.166484 72 16.3421 -17.5784 -0.011807 92 +unknow 0.9152 1 0 829 13.9541 -1.14897 -1.32747 111 13.9379 -1.10352 -1.32528 123 13.9467 -1.1598 -1.24648 255 13.8788 -1.11041 -1.23901 255 13.874 -1.04426 -1.23797 255 13.8415 -0.998163 -1.23423 252 14.0998 -1.23761 -1.18653 193 13.8729 -1.18273 -1.08623 246 13.7617 0.0830745 -1.07115 71 13.7534 0.12622 -1.07041 79 13.9514 -1.19629 -1.00468 226 13.9271 -1.12806 -1.00208 255 13.881 -1.08034 -0.997746 255 13.8724 -1.03582 -0.996706 255 13.8696 -0.991793 -0.996185 255 13.7946 -0.920964 -0.989254 255 14.005 -1.14347 -0.934639 255 13.9955 -1.20912 -0.934315 160 13.9476 -1.00667 -0.929104 255 13.9462 -0.940543 -0.928614 255 13.9431 -0.896352 -0.928125 255 13.9151 -1.09231 -0.92699 252 13.9125 -1.04815 -0.9265 255 13.8842 -0.848888 -0.923079 229 13.986 -1.15027 -0.820125 159 13.9756 -1.1052 -0.819097 134 13.9644 -1.19264 -0.818806 140 13.8844 -0.988135 -0.81176 147 13.8697 -1.05278 -0.811028 255 13.8735 -0.943539 -0.810733 217 13.8724 -0.899673 -0.810438 206 13.8526 -0.832814 -0.808677 221 14.0125 -1.21714 -0.743533 74 13.9645 -1.16888 -0.740009 130 13.9642 -1.12469 -0.739737 67 13.8957 -1.05343 -0.734722 126 13.891 -1.00921 -0.73418 255 13.8861 -0.965014 -0.733637 255 13.8891 -0.921387 -0.733636 255 13.8913 -0.85581 -0.733499 255 13.8924 -0.768297 -0.733227 251 13.8839 -0.702237 -0.732412 222 13.858 -0.810139 -0.73106 245 13.914 1.20785 -0.658378 164 13.9198 -1.11476 -0.658297 216 13.8704 -1.1546 -0.655439 129 13.8684 -1.00098 -0.654566 255 13.8675 -0.957125 -0.654317 255 13.8535 -1.06554 -0.653946 198 13.8644 -0.913149 -0.653943 255 13.8593 -0.869073 -0.653445 255 13.8577 -0.759745 -0.652946 255 13.82 1.13429 -0.652165 100 13.8313 -0.801845 -0.651455 219 13.7843 -0.712149 -0.648222 200 14.0313 1.24762 -0.582218 89 13.9988 -1.13596 -0.579902 101 13.9833 -1.02428 -0.578551 255 13.9785 -0.979797 -0.5781 255 13.9736 -0.935358 -0.57765 255 13.9551 1.13028 -0.577386 255 13.9474 -1.176 -0.577205 101 13.9505 -1.08804 -0.576978 160 13.9411 -0.779393 -0.575286 253 13.9119 1.19273 -0.575249 177 13.9186 -0.887875 -0.574389 245 13.9147 -0.821819 -0.573938 245 13.8956 -0.733156 -0.572588 125 13.877 -0.666653 -0.57135 255 13.8351 -0.621166 -0.568876 90 13.9664 1.23528 -0.499818 199 13.961 -1.20562 -0.49946 147 13.9123 -1.09129 -0.496523 180 13.8969 -1.134 -0.495917 98 13.8905 1.16278 -0.495671 99 13.8845 1.0087 -0.494763 255 13.8582 1.1163 -0.493851 176 13.8619 -1.04343 -0.493791 255 13.8627 -0.97781 -0.493587 255 13.8557 1.07231 -0.493548 211 13.8617 -0.933978 -0.493384 255 13.8655 0.87609 -0.493349 255 13.8606 -0.890162 -0.493181 255 13.8633 -0.846613 -0.49318 255 13.8572 -0.780694 -0.492673 255 13.8598 -0.693507 -0.49257 255 13.8666 -0.54107 -0.492567 255 13.8684 -0.43208 -0.492464 255 13.8569 -0.627904 -0.492265 255 13.8496 -0.736607 -0.492166 255 13.8569 -0.584279 -0.492163 255 13.8612 0.0255511 -0.491747 255 13.8603 0.156188 -0.491744 255 13.8512 0.52621 -0.491737 255 13.8495 0.569723 -0.491736 255 13.8537 -0.388031 -0.491653 255 13.8258 0.960896 -0.491628 106 13.8475 0.460744 -0.491435 255 13.8276 0.808369 -0.491226 253 13.8351 -0.474491 -0.490846 246 13.8147 0.264283 -0.489516 159 14.0225 -1.21611 -0.42246 155 13.9843 -1.14651 -0.420484 140 13.9731 1.23064 -0.420258 51 13.954 -1.09996 -0.418957 255 13.9454 -1.05524 -0.418417 255 13.9183 -0.987305 -0.41698 255 13.9174 -0.943311 -0.416799 255 13.9203 -0.899583 -0.416799 255 13.9084 -0.833049 -0.416079 255 13.9094 -0.745437 -0.415898 255 13.9008 -0.635558 -0.415267 239 13.883 -0.787818 -0.414822 255 13.8538 -0.698925 -0.413294 255 14.0622 1.23316 -0.334689 54 13.9435 -1.21439 -0.330112 142 13.9241 -1.05852 -0.328876 255 13.9132 -1.14565 -0.328723 210 13.9121 -0.947731 -0.328103 255 13.907 -0.991285 -0.328027 255 13.8926 1.15267 -0.327911 97 13.8829 -1.09919 -0.327413 123 13.8791 -0.901624 -0.326716 255 13.8583 1.10606 -0.326448 93 13.8598 -0.791061 -0.325712 255 13.8478 0.75567 -0.325144 255 13.8485 -0.703113 -0.325094 255 13.8306 0.90737 -0.324834 213 13.828 -0.854584 -0.324635 255 13.8274 0.863555 -0.324603 173 13.8263 -0.745514 -0.324325 255 13.8118 0.949759 -0.324217 241 13.8161 0.710477 -0.323836 188 13.8193 0.601861 -0.323761 197 13.8074 0.797051 -0.32368 117 13.8133 0.645091 -0.323606 199 13.8151 0.558208 -0.32353 165 13.8139 -0.483886 -0.323395 255 13.8131 0.44951 -0.323301 168 13.8075 -0.548814 -0.323242 114 13.8124 0.40606 -0.323225 128 13.8107 -0.396896 -0.323162 222 13.8048 0.514382 -0.323069 173 13.8079 -0.353399 -0.323008 216 13.8094 -0.288324 -0.323006 215 13.8109 -0.201556 -0.323005 211 13.8062 -0.244863 -0.322851 213 13.7904 0.0154205 -0.322153 147 13.9898 -1.23324 -0.243985 85 13.9217 -1.16129 -0.241598 247 13.8934 -1.11505 -0.240565 240 13.8978 -1.00561 -0.240434 255 13.8801 1.20252 -0.240329 40 13.8869 -1.07064 -0.240242 237 13.8958 -0.917756 -0.240175 255 13.8717 1.13592 -0.239879 233 13.8749 -0.960199 -0.239595 255 13.8652 1.09154 -0.239557 101 13.8658 1.00395 -0.239366 255 13.8653 0.894496 -0.23911 255 13.8687 -0.806681 -0.239077 255 13.8715 -0.71942 -0.239011 255 13.8581 -0.849773 -0.23882 255 13.8485 0.937077 -0.238658 255 13.8627 -0.653505 -0.238622 255 13.8606 0.69756 -0.238597 255 13.8651 -0.500898 -0.238491 255 13.8512 -0.762038 -0.238431 255 13.8587 -0.609701 -0.238428 255 13.8606 -0.566155 -0.238427 255 13.848 0.784163 -0.238338 255 13.8401 0.849155 -0.238208 255 13.8517 0.588051 -0.238148 255 13.8227 1.04442 -0.238075 245 13.8526 -0.456904 -0.238038 255 13.8418 0.631189 -0.237889 255 13.8492 -0.369706 -0.237843 255 13.8435 0.544123 -0.237827 255 13.8391 0.500397 -0.237634 255 13.838 -0.412938 -0.237522 255 13.8348 -0.304121 -0.237326 255 13.8184 0.738889 -0.237307 255 13.8345 -0.217153 -0.23726 255 13.8317 -0.260591 -0.237197 255 13.8337 -0.108485 -0.237194 255 13.804 -0.0649423 -0.236226 255 13.8042 0.000111238 -0.236225 255 13.7973 -0.151615 -0.236034 255 13.7441 0.0431741 -0.23429 255 13.9549 -1.22998 -0.17106 72 13.9229 -1.18302 -0.170084 255 13.9098 -1.0719 -0.169486 255 13.9044 -1.11543 -0.169433 255 13.8929 1.18215 -0.169227 40 13.8732 -1.02518 -0.168401 255 13.8715 1.0488 -0.168363 255 13.8601 1.09177 -0.168145 255 13.866 -0.95894 -0.168075 255 13.8589 -0.914697 -0.167803 255 13.8458 -0.87012 -0.167369 255 13.8457 -0.804624 -0.167259 255 13.8344 0.980537 -0.167226 255 13.8228 1.13259 -0.167223 238 13.8462 -0.761008 -0.167204 255 13.8303 0.892973 -0.166957 255 13.8365 -0.716862 -0.166878 255 13.8307 -0.672985 -0.166661 255 13.8115 0.935365 -0.166522 255 13.8164 0.826739 -0.16647 255 13.8193 0.739813 -0.166418 255 13.8169 0.783222 -0.166417 255 13.8238 -0.607344 -0.166389 255 13.8256 -0.563912 -0.166388 255 13.8207 0.631079 -0.166311 255 13.8186 0.674493 -0.16631 255 13.8233 -0.520317 -0.166278 255 13.8256 -0.45517 -0.166277 255 13.8206 0.587571 -0.166258 255 13.825 -0.41167 -0.166222 255 13.8278 -0.303076 -0.16622 255 13.8204 0.544077 -0.166204 255 13.8242 -0.368178 -0.166167 255 13.8208 0.478876 -0.166151 255 13.8227 -0.259509 -0.166057 255 13.8234 -0.216074 -0.166056 255 13.824 -0.172648 -0.166055 255 13.8227 -0.107486 -0.166 255 13.821 -0.0640495 -0.165945 255 13.8171 -0.0206114 -0.165836 255 13.8083 0.435042 -0.165773 255 13.813 0.0444979 -0.165726 255 14.3994 1.28146 -0.0866893 50 13.969 -1.19947 -0.0778452 218 13.9401 -1.08683 -0.0770681 255 13.9368 1.12918 -0.0770262 255 13.9327 -1.13031 -0.0769874 255 13.9395 -1.04274 -0.0769857 255 13.9423 -0.976907 -0.0769436 255 13.9252 1.17227 -0.0768624 236 13.9303 1.08459 -0.0768231 255 13.9324 0.974721 -0.0767028 255 13.9256 1.04022 -0.0766608 255 13.9282 -0.888051 -0.076534 255 13.9322 -0.822406 -0.0765327 255 13.9307 -0.778416 -0.0764503 255 13.9173 -0.931284 -0.0763717 255 13.9291 -0.734444 -0.0763679 255 13.9163 0.885729 -0.0762557 255 13.9208 0.776282 -0.076217 255 13.9233 -0.6903 -0.0762039 255 13.9043 0.819173 -0.0759307 255 13.9085 -0.623907 -0.0758355 255 13.9104 -0.580208 -0.0758347 255 13.9159 -0.427223 -0.0758317 255 13.9032 0.731459 -0.07581 255 13.8835 0.927387 -0.0756432 255 13.9045 -0.47062 -0.0756286 255 13.9088 -0.317705 -0.0756257 255 13.8901 -0.535698 -0.0753852 255 13.8902 0.533958 -0.0753649 255 13.8846 0.621124 -0.0753226 255 13.8886 0.46835 -0.0752847 255 13.8892 -0.382784 -0.0752599 255 13.8726 0.664248 -0.0751179 255 13.8786 -0.229837 -0.0749715 255 13.8758 -0.273401 -0.0749315 255 13.8719 -0.120774 -0.0748063 255 13.8652 -0.186073 -0.0746852 255 13.8465 0.575767 -0.0745077 255 13.8562 -0.0771336 -0.0744792 255 13.8504 -0.0335989 -0.074356 255 13.8484 0.031662 -0.074314 255 13.8403 0.0751099 -0.07415 255 13.9316 1.21942 -0.0122286 42 13.9198 -1.19278 -0.0120544 184 13.9048 -1.08152 -0.0116746 255 13.8914 -1.12437 -0.0115181 236 13.8894 -0.992519 -0.0113267 255 13.8766 1.08305 -0.0111927 255 13.8696 1.17022 -0.0111911 42 13.8827 0.973892 -0.0111632 255 13.8875 -0.838993 -0.0111348 255 13.8817 0.930016 -0.0111011 255 13.884 0.864472 -0.0110708 255 13.8899 -0.685935 -0.0110374 255 13.8826 0.820624 -0.0110087 255 13.8811 0.776782 -0.0109466 255 13.886 -0.642007 -0.0109422 255 13.8869 -0.576477 -0.0109094 255 13.8886 -0.532847 -0.0109086 255 13.8808 0.667459 -0.0108542 255 13.8775 0.732864 -0.010853 255 13.8512 1.1249 -0.0108458 250 13.8842 -0.488989 -0.0108133 255 13.8523 -1.03356 -0.0107925 255 13.8844 -0.42349 -0.0107805 255 13.8857 -0.379869 -0.0107797 255 13.8787 0.579991 -0.0107614 255 13.8848 -0.336191 -0.0107474 255 13.8773 0.514441 -0.0106997 255 13.8769 0.470777 -0.0106691 255 13.8721 0.361581 -0.0105453 255 13.8703 0.426948 -0.010544 255 13.8722 -0.270458 -0.0105258 255 13.8421 -0.923498 -0.0105071 255 13.871 -0.226839 -0.0104935 255 13.8716 -0.18326 -0.0104927 255 13.8429 -0.879876 -0.0104748 255 13.8357 1.01437 -0.0104702 255 13.8701 -0.139656 -0.0104604 255 13.8334 -0.770208 -0.0102209 255 13.8546 -0.0741771 -0.0102074 255 13.8258 -0.726201 -0.0100627 255 13.8309 0.62161 -0.0100369 255 13.8172 0.31682 -0.00966501 175 13.8148 -0.0304872 -0.00957721 255 13.7948 0.0129327 -0.0092617 255 13.7063 0.120669 -0.00787508 255 13.6647 0.0774496 -0.00721506 255 13.9941 -1.22704 0.0792982 150 13.9598 -1.15785 0.0796641 255 13.9375 -1.11197 0.0799019 255 13.9209 -1.06669 0.0800851 255 13.9071 1.21142 0.0801472 53 13.9162 -1.02238 0.0801589 255 13.9169 -0.95652 0.0801966 255 13.9119 -0.912285 0.0802704 255 13.9084 0.903849 0.0803419 255 13.8942 1.10038 0.0803456 255 13.9025 0.837676 0.0804318 255 13.8927 -0.867246 0.0804718 255 13.8906 -0.801433 0.0805278 255 13.8931 -0.75779 0.0805286 255 13.8891 0.793054 0.0805768 255 13.8697 1.05455 0.0805999 255 13.8628 1.14167 0.0806015 255 13.8736 0.945304 0.0806343 255 13.8816 0.748858 0.0806671 255 13.8774 -0.713249 0.0806935 255 13.8586 0.988009 0.0807444 255 13.877 0.639331 0.0807561 255 13.8679 0.704402 0.080812 255 13.8647 -0.647129 0.0808407 255 13.8646 -0.603485 0.0808598 255 13.8664 -0.450879 0.0808992 255 13.863 0.595015 0.0809011 255 13.8605 -0.559694 0.0809153 255 13.8621 -0.516147 0.0809161 255 13.8638 -0.407204 0.0809365 255 13.865 -0.363647 0.0809373 255 13.8627 0.442347 0.0809529 255 13.8612 0.485896 0.0809537 255 13.8588 0.55121 0.080955 255 13.8645 -0.298266 0.0809569 255 13.8661 -0.211146 0.0809585 255 13.8667 -0.167583 0.0809594 255 13.8654 -0.102224 0.0809789 255 13.8656 -0.0586642 0.0809797 255 13.8594 -0.254608 0.0810124 255 13.8557 -0.0151113 0.0810717 255 13.7997 0.0498748 0.0815833 255 13.7674 0.0929512 0.0818757 255 13.9648 -1.1992 0.168516 175 13.9491 1.21843 0.168598 51 13.9167 -1.15095 0.168659 255 13.9196 -1.06317 0.168672 255 13.9145 -0.996832 0.1687 255 13.9176 -0.953115 0.168701 255 13.8903 -1.10479 0.168742 255 13.9046 -0.908304 0.168746 255 13.9027 -0.8424 0.168763 255 13.8944 1.1039 0.168771 255 13.8918 1.05979 0.168787 255 13.8877 -0.753913 0.16882 255 13.8753 -0.796945 0.168846 255 13.8731 1.01458 0.168846 255 13.8792 -0.687841 0.168854 255 13.8718 0.948794 0.168862 255 13.8512 1.16624 0.168876 255 13.8693 -0.643659 0.168887 255 13.8615 0.860652 0.168904 255 13.8618 0.751451 0.168918 255 13.8527 0.903814 0.168921 255 13.8552 -0.599358 0.168932 255 13.855 -0.555746 0.168938 255 13.855 -0.446775 0.168951 255 13.8515 -0.490223 0.168956 255 13.8454 0.794218 0.168957 255 13.8561 -0.337886 0.168959 255 13.8579 -0.250824 0.16896 255 13.8523 -0.403125 0.168963 255 13.8483 0.663504 0.168966 255 13.8442 0.706906 0.168972 255 13.8491 0.554573 0.168975 255 13.8473 0.598076 0.168976 255 13.8511 -0.294217 0.168976 255 13.8529 -0.185429 0.168978 255 13.851 0.445718 0.168978 255 13.8488 0.510988 0.16898 255 13.8398 -0.0982574 0.169018 255 13.8301 -0.0547151 0.169046 255 13.8224 0.40139 0.16906 228 13.7982 0.010497 0.169135 255 13.7801 0.0538066 0.169185 238 13.7064 0.0356457 0.250771 255 13.8305 -0.00724369 0.251171 255 13.8219 0.427125 0.251172 225 13.8423 -0.0724614 0.251209 255 13.846 -0.115972 0.251221 255 13.8462 0.0797732 0.251224 255 13.847 -0.202993 0.251226 255 13.8476 -0.159493 0.251226 255 13.8501 -0.420691 0.251247 255 13.8448 -0.616539 0.25125 255 13.8507 -0.464274 0.251253 255 13.8486 -0.573115 0.251257 255 13.8457 0.493231 0.251258 255 13.8441 0.536724 0.251258 255 13.8512 -0.507853 0.251259 255 13.8423 0.580212 0.251259 255 13.8414 0.645529 0.251267 255 13.8371 0.732493 0.251268 255 13.8329 0.841265 0.251277 255 13.8433 0.689227 0.251281 255 13.8415 0.798162 0.251296 255 13.8422 0.885511 0.251316 255 13.8687 -0.661217 0.251333 255 13.829 1.14676 0.251341 255 13.8726 -0.705075 0.251352 255 13.8731 -0.770657 0.251364 255 13.8587 0.995965 0.251396 255 13.8866 -0.815149 0.251415 255 13.8859 -0.858889 0.25142 255 13.8713 0.931194 0.251421 255 13.8735 1.04088 0.251455 255 13.9027 -0.96954 0.251496 255 13.9057 -0.925861 0.251496 255 13.8901 1.08606 0.251521 255 13.9116 -1.01407 0.251534 255 13.9183 -1.05851 0.251565 255 13.8971 1.19651 0.251574 89 13.9175 -1.16845 0.251589 253 13.9331 -1.12566 0.251628 255 13.9975 -1.2193 0.25186 83 13.8113 0.0504298 0.332559 255 13.8232 0.245896 0.332691 255 13.8347 0.137409 0.332781 255 13.8363 0.289586 0.33282 255 13.8432 -0.0582396 0.332851 255 13.851 0.0940132 0.332927 255 13.8499 0.202803 0.332929 255 13.8553 -0.0147805 0.332961 255 13.8558 -0.210685 0.332976 255 13.857 -0.101856 0.332978 255 13.8608 0.355406 0.33306 255 13.8508 -0.755294 0.333094 255 13.8706 -0.145559 0.333105 255 13.871 -0.254541 0.333122 255 13.8571 -0.711989 0.333131 255 13.8663 0.442731 0.333135 255 13.8696 0.399216 0.333152 255 13.8741 -0.298208 0.333158 255 13.8666 0.63906 0.333212 255 13.8623 -0.799636 0.333221 255 13.8765 -0.494616 0.333227 255 13.8706 0.595578 0.333229 255 13.8768 0.486687 0.333245 255 13.88 -0.451088 0.333246 255 13.8675 0.704603 0.333249 255 13.8846 -0.363918 0.333266 255 13.88 -0.560256 0.333281 255 13.8784 0.552229 0.333283 255 13.8854 -0.407596 0.333284 255 13.8732 0.74858 0.333323 255 13.8676 -0.909293 0.333329 255 13.8704 -0.865722 0.33333 255 13.8686 -0.953137 0.333365 255 13.8504 1.1408 0.333367 254 13.8882 -0.604312 0.333372 255 13.8579 1.0976 0.333403 255 13.8827 0.792819 0.333434 255 13.8788 0.858227 0.333435 255 13.8761 0.901829 0.333436 255 13.8752 0.945548 0.333455 255 13.8962 -0.648426 0.333462 255 13.8795 -0.997732 0.333492 255 13.8827 -1.06375 0.333564 255 13.8861 0.990107 0.333584 255 13.8912 1.05628 0.333677 255 13.8932 -1.1085 0.333692 255 13.9107 1.21166 0.333973 46 13.9395 -1.15637 0.334149 248 13.9817 -1.22633 0.334587 86 13.8265 0.179796 0.42438 255 13.8295 0.0712175 0.42441 255 13.8292 0.114662 0.424411 255 13.8317 -0.0156843 0.42444 255 13.8317 0.0277697 0.424441 255 13.8299 0.223302 0.424445 255 13.8317 -0.232973 0.424468 255 13.8331 -0.124332 0.42447 255 13.8335 -0.0808727 0.424471 255 13.8311 0.266795 0.424477 255 13.8286 0.375416 0.424479 255 13.8317 0.332025 0.42451 255 13.8314 0.418985 0.424543 255 13.8387 -0.167851 0.424564 255 13.8296 0.527683 0.424577 255 13.8409 -0.276607 0.424625 255 13.8423 -0.385408 0.424686 255 13.84 0.462793 0.424702 255 13.8048 1.11439 0.424746 255 13.8451 -0.42901 0.424749 255 13.8419 0.571729 0.424799 255 13.842 0.615315 0.424832 255 13.839 0.680534 0.424833 255 13.856 -0.320428 0.424877 255 13.8521 -0.516347 0.424905 255 13.8616 -0.473084 0.425033 255 13.8567 0.725087 0.42515 255 13.8544 0.768614 0.425151 255 13.8636 -0.625816 0.425156 255 13.8499 0.877532 0.425185 255 13.8546 0.834143 0.425215 255 13.8735 -0.58258 0.425284 255 13.8755 -0.670016 0.425377 255 13.867 0.922408 0.425502 255 13.8882 -0.736213 0.425629 255 13.8721 0.966536 0.425629 255 13.8898 -0.780057 0.425691 255 13.8591 1.18467 0.425696 86 13.8893 -0.823805 0.425722 255 13.8753 1.03251 0.425757 255 13.88 1.07672 0.425884 255 13.8944 -0.933647 0.42591 255 13.8972 -0.889992 0.425911 255 13.9073 -0.978386 0.426162 255 13.9122 -1.02264 0.426288 255 13.9132 -1.08865 0.426382 255 13.9336 -1.13426 0.42676 255 13.9658 -1.18099 0.427329 229 13.9848 1.23992 0.427755 38 13.8341 0.100819 0.494819 241 13.8365 -0.0078419 0.494859 239 13.8333 0.296418 0.494864 238 13.8383 0.0573658 0.494902 237 13.8377 0.144314 0.494903 243 13.8372 0.187786 0.494904 239 13.8395 -0.160033 0.49494 241 13.8381 0.253023 0.494947 242 13.8409 -0.312293 0.49502 233 13.8461 -0.0948663 0.495066 235 13.8423 0.340102 0.495075 239 13.847 -0.203644 0.495106 232 13.8484 -0.0513778 0.495109 230 13.8412 0.44887 0.495119 230 13.8482 -0.247184 0.495147 238 13.8465 0.405493 0.495201 227 13.8474 -0.443065 0.495227 231 13.8507 -0.399621 0.49527 235 13.8452 0.557871 0.495288 230 13.8491 -0.508469 0.49531 226 13.8539 -0.35616 0.495313 232 13.8497 0.492688 0.495329 232 13.8474 0.601531 0.495373 232 13.8433 0.68853 0.495374 232 13.8474 0.645128 0.495415 230 13.8459 0.754069 0.495501 231 13.8574 -0.552392 0.495518 224 13.8567 -0.661409 0.4956 224 13.8616 -0.596193 0.495643 224 13.8515 0.798007 0.495669 227 13.8562 -0.748683 0.495682 224 13.8468 0.906905 0.495713 227 13.8625 -0.705359 0.495766 226 13.8569 0.841993 0.495838 226 13.8498 0.950799 0.49584 227 13.8645 -0.814698 0.495932 220 13.8631 -0.902062 0.496014 218 13.8659 -0.858505 0.496014 219 13.8647 0.995558 0.496217 228 13.8742 -0.946589 0.496306 217 13.8695 1.0397 0.496385 231 13.8795 -1.01271 0.496514 226 13.8883 -1.05724 0.496764 227 13.8988 -1.102 0.497056 227 13.9063 1.1083 0.497266 237 13.9147 1.15295 0.497518 47 13.9194 -1.16971 0.497599 209 13.9574 -1.21716 0.498477 136 13.7826 0.0723591 0.562686 133 13.7848 -0.035893 0.562736 160 13.7839 0.158984 0.562739 133 13.7835 -0.382401 0.562833 144 13.7901 -0.274206 0.562939 128 13.7923 -0.425992 0.563092 114 13.7988 0.0291231 0.5631 101 13.7937 0.375882 0.563107 113 13.7996 -0.187648 0.563148 126 13.8003 0.115844 0.563154 101 13.8007 -0.33946 0.563249 100 13.8106 -0.0792996 0.56341 103 13.8073 0.311169 0.563417 112 13.811 0.224445 0.563467 109 13.8143 -0.122715 0.563513 108 13.8122 0.267876 0.56352 115 13.8149 -0.231238 0.563563 98 13.8104 0.419796 0.563575 103 13.8188 -0.470219 0.563817 140 13.827 0.463818 0.564043 170 13.8247 0.528971 0.564044 255 13.8264 -0.535702 0.564076 181 13.8308 -0.622911 0.564282 253 13.8327 -0.579457 0.564283 218 13.8451 0.616938 0.564669 255 13.8489 0.573525 0.56472 255 13.8451 0.660529 0.564722 255 13.8434 0.769477 0.564827 255 13.8409 0.812964 0.564828 255 13.8478 0.726091 0.564879 255 13.8589 0.879614 0.565401 255 13.8496 1.1196 0.565613 255 13.8774 -0.734167 0.565629 255 13.8584 1.03271 0.565663 255 13.8745 -0.821462 0.565679 255 13.8816 -0.690662 0.565682 255 13.868 0.923969 0.565713 255 13.879 -0.777977 0.565732 255 13.877 0.96839 0.566025 255 13.8864 -0.887825 0.566093 255 13.8936 -0.932098 0.566352 255 13.883 1.07846 0.566391 255 13.9018 -1.04235 0.566765 255 13.9105 -0.977105 0.56687 255 13.9104 -1.08694 0.567076 255 13.9217 1.16961 0.567586 56 13.9368 -1.13301 0.567853 255 13.9472 -1.20001 0.568267 247 13.8099 0.0085202 0.648753 91 13.8112 0.138696 0.64882 90 13.8144 0.203832 0.64895 133 13.8178 0.0519245 0.649011 135 13.8148 0.29066 0.649016 127 13.8176 -0.251977 0.64907 113 13.8211 -0.143464 0.649136 88 13.8215 -0.100045 0.649137 126 13.8192 -0.360604 0.649197 110 13.8223 -0.208637 0.6492 111 13.8227 -0.295522 0.649262 109 13.8188 0.442788 0.649276 82 13.8206 -0.447564 0.649324 105 13.8185 0.507968 0.649341 114 13.8261 0.399537 0.649468 113 13.8209 0.551528 0.649471 105 13.828 -0.404325 0.649518 109 13.8335 0.0954121 0.649527 98 13.8357 -0.0567091 0.649588 96 13.8313 0.356183 0.649596 86 13.8291 -0.491352 0.649645 96 13.8231 0.638623 0.649665 104 13.8268 -0.600041 0.649707 62 13.8416 0.247676 0.649851 101 13.835 0.595607 0.649986 103 13.8319 0.704346 0.650052 108 13.8272 0.791243 0.650054 101 13.8369 -0.644054 0.650092 60 13.8406 -0.557106 0.650094 88 13.8316 0.747905 0.650117 103 13.8394 -0.753165 0.650347 59 13.8417 -0.709672 0.650348 61 13.8235 -1.05761 0.65047 44 13.8453 0.857708 0.650763 99 13.8425 0.901198 0.650763 73 13.8499 -1.10348 0.651434 252 13.8625 0.989966 0.651601 153 13.8642 -0.995099 0.651629 58 13.8769 -0.864646 0.65176 44 13.8848 -0.799484 0.65189 44 13.8792 -0.952384 0.652016 64 13.8841 -0.908913 0.652081 44 13.8737 1.05646 0.652117 255 13.8707 1.14393 0.652247 252 13.8902 1.10158 0.652761 255 13.956 -1.15626 0.654971 255 14.0121 -1.22753 0.656964 100 14.0305 1.22339 0.657588 44 13.8355 0.338669 0.739777 78 13.8397 0.230026 0.739852 85 13.8403 0.382308 0.74001 80 13.8474 0.0778853 0.740081 84 13.8534 -0.0744029 0.740311 90 13.8524 0.186732 0.740316 83 13.8471 0.426045 0.74032 76 13.8567 -0.161479 0.740464 86 13.8576 0.0344213 0.740467 92 13.8596 -0.0091091 0.740544 63 13.859 -0.270381 0.740617 77 13.8618 -0.226859 0.740695 77 13.8549 0.491663 0.740708 42 13.8651 0.121577 0.740779 85 13.8553 0.535272 0.740786 41 13.8624 -0.379367 0.740847 80 13.8641 -0.314042 0.740848 88 13.8649 0.274063 0.740859 88 13.8602 -0.510069 0.740922 40 13.8575 0.578969 0.740942 41 13.8525 0.687795 0.740944 42 13.8543 0.731526 0.741099 40 13.8692 -0.423149 0.741155 74 13.8539 0.77516 0.741177 40 13.8618 -0.662808 0.741228 40 13.8737 -0.466906 0.741387 68 13.8581 0.840932 0.741488 40 13.8554 0.884476 0.741489 40 13.8716 0.623253 0.741562 69 13.8871 -0.118147 0.741625 60 13.8796 -0.576251 0.741772 40 13.8798 -0.619943 0.741848 40 13.8657 -1.07843 0.742381 40 13.8924 0.930743 0.743037 44 13.9084 -0.730647 0.743162 40 13.8987 -0.927329 0.743235 42 13.8898 1.12803 0.743505 227 13.9155 -0.818709 0.743624 40 13.9045 -1.01549 0.743698 40 13.8981 -1.12482 0.743773 227 13.922 -0.775195 0.74378 40 13.9136 -0.972209 0.743931 53 13.9265 1.04303 0.744664 78 13.9408 -0.864101 0.744707 40 13.9292 1.08726 0.744897 251 13.97 1.201 0.746834 40 14.0319 -1.17978 0.749111 185 14.1377 -1.25559 0.753443 58 13.8167 0.238649 0.803039 166 13.817 0.325509 0.803127 163 13.8228 -0.0218314 0.803208 179 13.8257 0.173625 0.803385 131 13.8181 0.54279 0.803478 163 13.8342 0.130246 0.803731 169 13.8357 -0.174017 0.803811 171 13.8366 -0.0653535 0.803813 123 13.8339 0.282385 0.80382 134 13.8326 -0.413114 0.803894 154 13.8387 0.0433302 0.803902 135 13.8405 0.0868122 0.80399 127 13.8403 -0.261076 0.80407 130 13.8359 0.434659 0.804083 154 13.8324 0.630388 0.80426 152 13.8354 -0.609081 0.804323 145 13.8454 -0.304699 0.804329 167 13.829 0.739111 0.804349 150 13.8241 0.825982 0.80435 140 13.8458 -0.369998 0.804415 128 13.8491 -0.217726 0.804417 122 13.8383 0.587087 0.804432 125 13.8543 -0.108995 0.804593 129 13.8465 0.478513 0.804604 126 13.8366 0.783096 0.804783 142 13.832 0.891876 0.804871 138 13.8529 -0.522692 0.804932 110 13.8237 -1.06631 0.805008 81 13.8438 -0.762079 0.805014 125 13.8331 0.935586 0.805045 109 13.8652 0.39193 0.805296 130 13.8543 0.674961 0.805301 127 13.8493 -0.806046 0.80536 96 13.8652 -0.457754 0.805366 117 13.8621 -0.719441 0.805708 136 13.8643 -0.675888 0.805709 149 13.8692 -0.566978 0.805711 121 13.8595 -0.959694 0.806223 126 13.8544 1.13391 0.806609 255 13.8648 -1.02575 0.806656 94 13.8745 -0.916961 0.806744 126 13.8641 -1.11334 0.806914 255 13.8692 1.04742 0.806954 197 13.8778 1.09191 0.807475 255 13.8992 -0.87479 0.807699 82 13.9623 1.1867 0.811464 82 13.9861 -1.18973 0.81246 255 13.8808 0.204583 0.897261 144 13.8616 0.79306 0.897372 94 13.8902 -0.0571054 0.897656 97 13.8902 0.0519894 0.897658 142 13.8881 0.248356 0.897662 91 13.8877 0.357473 0.897764 80 13.8912 0.292075 0.897862 99 13.8975 -0.144447 0.898054 99 13.898 0.0956969 0.898058 94 13.8872 0.554017 0.898067 87 13.893 -0.450074 0.898148 120 13.8971 -0.297287 0.898151 139 13.9003 0.00837615 0.898157 90 13.8965 0.401406 0.898264 146 13.8757 0.859514 0.898272 95 13.9001 -0.341036 0.89835 86 13.9039 -0.100818 0.898354 97 13.886 0.750724 0.89847 128 13.8974 0.598178 0.898667 129 13.9113 0.161377 0.898759 81 13.9012 -0.603387 0.898844 79 13.882 0.947514 0.898873 66 13.8907 -0.8436 0.898939 58 13.8933 -0.799957 0.89894 76 13.9147 -0.210174 0.898951 101 13.9091 0.445539 0.898964 91 13.9069 0.511082 0.898965 99 13.8977 -0.75641 0.899041 97 13.9034 0.642223 0.899067 91 13.8909 0.9043 0.899172 94 13.8925 -0.909429 0.899238 59 13.9163 -0.407027 0.899247 84 13.8905 -0.99698 0.899436 51 13.9112 -0.647591 0.899442 125 13.9195 -0.49466 0.899545 89 13.9279 -0.254117 0.89965 94 13.9122 0.708362 0.899668 85 13.921 -0.560401 0.899744 121 13.9075 -0.954267 0.900136 55 13.9022 -1.10759 0.900432 245 13.9079 1.05915 0.900573 253 13.9479 -0.715111 0.901439 76 13.9245 1.10446 0.901573 255 13.9434 -1.06674 0.902331 37 13.9448 1.15022 0.902772 225 14.03 -1.1619 0.907024 239 14.1339 -1.23738 0.912516 82 14.2038 1.2395 0.916058 38 +unknow 0.980647 1 0 264 13.0313 25.1574 -2.1001 85 12.8513 25.1962 -2.0962 85 12.7315 25.2547 -2.09603 85 12.6459 25.2821 -2.0949 85 12.9222 25.1397 -2.09473 85 12.546 25.2806 -2.09115 84 12.0026 25.3755 -2.07879 161 11.9093 25.3843 -2.07618 124 11.2589 25.6554 -2.07439 144 11.1331 25.6972 -2.07342 150 11.0445 25.7137 -2.07179 143 10.9636 25.7483 -2.07179 152 10.8757 25.7661 -2.07033 149 10.7412 25.7858 -2.06756 150 10.6525 25.801 -2.06593 152 10.5692 25.8288 -2.06544 153 10.4444 25.8709 -2.06479 152 10.2772 25.9249 -2.06382 163 10.3549 25.8832 -2.063 148 10.1325 25.9154 -2.05877 143 9.57718 26.0514 -2.05308 151 9.44888 26.0813 -2.05178 165 9.28017 26.127 -2.05064 153 9.15563 26.1667 -2.05031 154 11.9256 25.0083 -2.04901 111 9.35079 26.0658 -2.04787 147 8.98008 26.1916 -2.04755 153 9.06101 26.1595 -2.04722 153 8.8502 26.2147 -2.04592 156 8.76276 26.2273 -2.04462 156 8.67595 26.2414 -2.04348 162 12.1657 24.8058 -2.04267 98 8.58358 26.2382 -2.04088 156 12.0207 24.7059 -2.03014 103 11.9361 24.7291 -2.02884 98 9.55179 24.6548 -1.94569 119 9.47358 24.6828 -1.94553 152 9.34589 24.6974 -1.94292 202 9.18638 24.7444 -1.94195 107 9.24243 24.6575 -1.9369 159 12.544 25.0235 -1.84633 207 12.2052 24.7353 -1.81626 255 12.0675 24.7495 -1.81274 240 11.9584 24.7227 -1.80746 228 11.8737 24.7458 -1.80629 231 11.6305 24.7354 -1.79793 206 11.5409 24.7466 -1.79587 238 8.48221 25.8559 -1.78898 180 10.8732 24.7206 -1.77387 245 8.49353 25.619 -1.7727 176 10.7787 24.7163 -1.77079 246 10.6408 24.7173 -1.76683 249 10.5474 24.714 -1.7639 239 10.4565 24.7158 -1.76141 236 8.51805 25.4258 -1.75979 189 10.3517 24.6841 -1.75627 255 10.2292 24.7179 -1.7551 227 10.1355 24.7112 -1.75202 235 10.0405 24.7004 -1.74865 235 9.90616 24.703 -1.74513 245 8.56174 25.1626 -1.74249 162 9.80338 24.671 -1.74014 255 9.58544 24.6859 -1.7353 255 9.50641 24.7122 -1.73501 189 8.59067 24.9904 -1.73119 146 9.40949 24.6917 -1.73105 255 9.27334 24.6835 -1.72694 197 9.18319 24.6788 -1.7243 211 8.6337 24.8616 -1.72327 215 8.74011 24.7906 -1.72093 230 9.00669 24.678 -1.71975 255 8.81059 24.7423 -1.71931 197 8.88218 24.6976 -1.71799 255 12.9428 24.8619 -1.69135 255 12.8091 24.8907 -1.68891 255 12.6674 24.8063 -1.67943 187 12.5444 24.757 -1.67266 205 12.4161 24.7926 -1.6709 233 12.0825 24.8038 -1.66155 188 12.1975 24.743 -1.66128 152 11.9629 24.7554 -1.65505 112 11.8619 24.7442 -1.65139 195 11.6138 24.7228 -1.64286 241 11.5193 24.7229 -1.64015 191 10.8567 24.7053 -1.6205 218 8.48227 25.6136 -1.62023 222 10.7591 24.6935 -1.61712 226 10.6253 24.7036 -1.61414 234 10.5297 24.6946 -1.61102 235 10.4358 24.689 -1.60818 233 8.49451 25.3824 -1.6056 255 10.3382 24.6738 -1.60465 233 10.2096 24.6927 -1.60249 234 9.76763 24.8301 -1.59991 100 10.1162 24.6859 -1.59964 236 10.0213 24.675 -1.59653 239 9.89161 24.6886 -1.59409 241 9.46145 24.8502 -1.59368 125 9.52805 24.7905 -1.59151 116 9.79931 24.6824 -1.59138 221 8.53846 25.119 -1.58962 167 9.57205 24.673 -1.58515 104 8.57791 24.9769 -1.58135 223 8.63938 24.9008 -1.57783 233 9.30116 24.6613 -1.57783 192 9.09756 24.7073 -1.57594 123 9.1689 24.6618 -1.57472 86 8.73943 24.8109 -1.57431 233 8.80866 24.7589 -1.57255 243 8.88238 24.7198 -1.57174 254 8.9824 24.6327 -1.56848 255 12.8611 24.8099 -1.5284 205 12.6975 24.7797 -1.52206 225 12.322 24.9084 -1.5187 145 12.5761 24.7341 -1.5161 228 12.465 24.7075 -1.5115 242 12.3163 24.7017 -1.50702 253 12.1203 24.6962 -1.50131 128 11.9794 24.7028 -1.49783 126 11.8809 24.6972 -1.49485 111 11.7972 24.7218 -1.49398 110 11.6741 24.6631 -1.48739 242 11.5417 24.6835 -1.48503 255 8.50352 25.8331 -1.4818 121 10.8783 24.6648 -1.46689 205 8.53754 25.5316 -1.46465 132 10.7863 24.666 -1.46465 252 10.692 24.6613 -1.46204 247 10.5884 24.6342 -1.45794 255 9.64739 25.0028 -1.45707 214 10.4597 24.6545 -1.45596 253 8.56261 25.3421 -1.45397 100 10.3683 24.6541 -1.45372 250 10.2738 24.6461 -1.45099 251 10.1408 24.6536 -1.44825 255 9.35159 24.9338 -1.44651 132 10.0452 24.641 -1.44527 255 9.9565 24.6447 -1.44341 253 9.47806 24.7963 -1.44129 115 9.81949 24.6394 -1.43993 247 8.55875 25.0715 -1.43794 129 9.64699 24.656 -1.43694 199 9.72366 24.6237 -1.43682 254 8.59636 24.9256 -1.43011 154 9.33349 24.6505 -1.42961 96 8.69321 24.8264 -1.42626 225 9.03023 24.6655 -1.4239 255 8.75647 24.7576 -1.42353 209 9.1049 24.6295 -1.4234 255 8.94929 24.6843 -1.42328 255 8.83083 24.7206 -1.4229 248 12.8695 24.8747 -1.36547 192 12.7058 24.8444 -1.35974 198 12.5979 24.8253 -1.35603 213 12.4876 24.8006 -1.35199 218 12.3422 24.8019 -1.34839 224 12.2272 24.7653 -1.34367 219 12.1265 24.757 -1.34075 235 11.9837 24.7599 -1.33738 237 11.8911 24.7668 -1.33547 244 11.7876 24.7499 -1.3321 244 11.6978 24.7616 -1.33052 243 11.5625 24.7766 -1.32805 232 10.8913 24.7433 -1.31074 238 10.7983 24.7426 -1.30861 249 10.7039 24.7379 -1.30625 251 8.60719 25.5347 -1.3058 149 10.6073 24.7273 -1.30355 250 10.4743 24.7384 -1.30119 243 10.3804 24.7325 -1.29883 245 10.2843 24.7207 -1.29613 251 10.1556 24.7393 -1.29434 245 8.61933 25.3071 -1.29389 191 10.0613 24.7304 -1.29186 245 9.97011 24.7286 -1.28984 245 9.83949 24.74 -1.28771 244 9.74931 24.7392 -1.2858 250 8.64566 25.125 -1.28467 178 9.65487 24.7269 -1.28321 239 9.56062 24.7143 -1.28063 235 8.73047 24.9879 -1.27894 219 9.43056 24.7236 -1.27849 233 9.07943 24.8526 -1.27838 128 8.8023 24.9415 -1.27782 143 9.1485 24.7995 -1.27692 255 9.33877 24.7157 -1.27624 226 9.26037 24.7431 -1.27613 238 8.96337 24.7758 -1.27209 111 12.8122 24.8148 -1.20384 188 12.6579 24.802 -1.19969 213 12.55 24.7828 -1.19635 214 12.447 24.7722 -1.19352 216 12.2954 24.7608 -1.18957 216 12.1963 24.7563 -1.18715 216 12.0939 24.7443 -1.18432 217 8.96663 26.001 -1.18239 124 11.9925 24.7337 -1.18158 224 11.8533 24.7431 -1.17895 209 11.7549 24.7369 -1.17653 225 11.6515 24.7196 -1.17349 224 8.93822 25.6578 -1.1655 134 10.8546 24.7202 -1.1568 210 10.7625 24.7212 -1.15498 220 8.94899 25.4318 -1.15488 131 10.6641 24.7073 -1.15235 212 10.5707 24.7039 -1.15033 213 8.98792 25.2888 -1.14871 147 10.4417 24.724 -1.14871 212 10.3493 24.7217 -1.14679 213 10.2547 24.7136 -1.14457 220 9.07096 25.1467 -1.14335 133 10.1199 24.7173 -1.14214 211 10.0286 24.7156 -1.14032 217 9.12321 25.0449 -1.13941 134 9.9405 24.7211 -1.1389 218 9.81209 24.7379 -1.13728 210 9.7182 24.7278 -1.13506 207 9.63611 24.747 -1.13445 202 9.55182 24.7604 -1.13354 200 9.15897 24.8999 -1.13314 170 9.42508 24.779 -1.13212 191 9.34647 24.8066 -1.13202 197 9.25799 24.8078 -1.13051 241 12.8277 24.935 -1.04952 117 9.84149 26.2339 -1.04853 183 12.6739 24.9239 -1.04593 137 12.5631 24.8993 -1.0427 146 12.4536 24.8761 -1.03955 156 12.3088 24.879 -1.03677 180 12.2025 24.8601 -1.0339 176 12.0287 24.9003 -1.03211 149 12.1043 24.857 -1.03184 200 11.8614 24.8521 -1.0269 121 9.80508 25.2855 -1.00815 99 10.9026 24.8189 -1.00761 99 9.82926 25.1131 -1.00133 99 9.87076 24.9873 -0.99675 99 10.0391 24.8404 -0.993429 255 9.94395 24.8292 -0.991366 98 10.1943 24.6648 -0.988764 233 10.0734 24.7014 -0.988225 230 10.0535 26.122 -0.869187 152 12.2021 24.9189 -0.859792 158 11.9948 24.9906 -0.85879 106 12.0514 24.9078 -0.856865 255 10.0587 25.5367 -0.848239 105 10.0552 25.2952 -0.839536 104 10.9478 24.8825 -0.83815 104 10.1234 25.1215 -0.8343 104 10.1578 24.9804 -0.829756 104 10.2134 24.8929 -0.827445 103 10.2854 24.8459 -0.826829 189 10.3737 25.7994 -0.68751 102 11.75 25.0325 -0.682548 147 10.3647 25.5443 -0.679777 136 11.1221 25.0095 -0.673461 157 10.3694 25.3266 -0.673332 120 10.9857 25.0196 -0.671979 195 10.8903 25.0154 -0.670626 191 10.4108 25.2015 -0.67011 129 10.7904 24.9999 -0.668886 194 10.6568 25.0137 -0.667597 199 10.4863 25.0488 -0.666501 136 10.5626 25.0102 -0.666308 213 +unknow 0.951495 1 0 1730 9.18584 -0.916121 -1.72341 144 8.14653 -0.807855 -1.72329 136 8.13089 -0.9355 -1.72284 143 7.41209 -0.914302 -1.72198 114 8.13134 -0.896758 -1.72195 143 8.13681 -0.84565 -1.72195 137 8.1432 -0.781717 -1.72195 137 8.13023 -0.870805 -1.72106 141 7.40533 -0.93711 -1.72101 109 7.41133 -0.855197 -1.72003 141 7.40282 -0.877811 -1.71857 110 8.1356 0.69266 -1.71836 118 8.56646 1.16618 -1.71802 117 8.15009 -0.460476 -1.71793 121 8.1515 -0.434869 -1.71793 145 8.14527 0.539057 -1.71791 127 7.42771 -0.586206 -1.7176 110 8.14498 0.513336 -1.71747 129 7.41888 -0.667675 -1.71711 107 8.14471 -0.485859 -1.71704 142 8.15076 -0.37067 -1.71704 121 8.15189 -0.345061 -1.71704 128 7.42196 -0.609234 -1.71662 108 8.14931 0.359538 -1.71658 118 8.14624 0.423532 -1.71658 118 8.08622 1.07408 -1.71657 119 8.56233 1.13826 -1.71633 115 7.39855 -0.830232 -1.71614 111 7.40484 -0.772099 -1.71614 103 7.41708 -0.644042 -1.71614 107 8.14071 0.487376 -1.71613 119 8.1511 -0.191229 -1.7157 120 8.15214 -0.14001 -1.7157 119 8.12174 0.717149 -1.71568 146 7.41095 -0.690459 -1.71565 106 8.14177 -0.395921 -1.71526 143 8.13097 0.57657 -1.71524 126 8.1175 0.742477 -1.71523 143 8.11392 0.780722 -1.71523 121 8.13974 0.397532 -1.71479 148 7.43656 0.196973 -1.71466 124 8.14349 -0.255078 -1.71436 126 8.06966 1.12349 -1.71434 115 7.39466 -0.794556 -1.7142 141 7.39951 -0.748078 -1.71419 112 7.41976 -0.480195 -1.7137 112 8.14191 -0.165454 -1.71347 150 8.12135 0.60151 -1.71345 164 7.41147 0.569909 -1.7132 118 8.13589 -0.306039 -1.71302 160 8.06735 1.09733 -1.713 145 7.39603 -0.724281 -1.71274 107 9.52483 1.28003 -1.71233 110 7.4175 -0.421595 -1.71224 119 7.39881 0.674258 -1.71222 118 8.13291 -0.280355 -1.71213 122 8.13193 0.307528 -1.71212 130 8.13092 0.333074 -1.71212 135 8.1254 0.447987 -1.71212 145 10.013 1.33376 -1.71207 107 7.7002 -0.889608 -1.71184 91 7.40802 -0.53792 -1.71176 112 7.36165 0.987094 -1.71173 108 8.10963 0.651877 -1.71167 110 10.0133 1.3018 -1.71135 99 7.40854 -0.50288 -1.71127 118 7.4198 -0.293232 -1.71127 126 7.35499 1.0215 -1.71125 106 8.1302 0.243522 -1.71123 127 7.6991 -0.864966 -1.7109 109 7.71289 -0.731811 -1.7109 97 7.7184 -0.671211 -1.7109 92 9.51092 1.32379 -1.71081 115 8.12901 -0.216334 -1.71079 150 7.41297 -0.397999 -1.71078 112 7.4233 -0.0716756 -1.71078 120 7.42236 0.138217 -1.71078 104 7.3951 0.650482 -1.71077 118 7.69984 -0.840556 -1.71044 103 7.72338 -0.586149 -1.71043 91 8.12506 0.281684 -1.71034 133 8.09009 0.80402 -1.71033 126 7.42057 -0.129949 -1.71029 128 7.42149 0.0565742 -1.71029 126 7.42128 0.0798894 -1.71029 123 7.41693 0.266367 -1.71029 123 7.6882 -0.92493 -1.70997 90 8.09318 -0.751432 -1.70991 157 7.41969 0.0332428 -1.7098 118 7.41161 0.347804 -1.7098 116 7.40217 0.510696 -1.7098 123 7.3813 0.754553 -1.70979 103 7.37256 0.83567 -1.70979 115 7.3699 0.858827 -1.70979 115 7.36716 0.881975 -1.70979 115 7.36292 0.91668 -1.70979 138 7.36001 0.939809 -1.70979 103 7.35702 0.962925 -1.70979 115 7.12756 -0.595325 -1.70947 91 7.40381 -0.45587 -1.70933 119 7.41385 0.242925 -1.70931 119 7.4054 0.429157 -1.70931 119 7.38285 0.719564 -1.70931 145 7.7004 -0.779449 -1.70903 90 7.71936 -0.56144 -1.70903 91 8.04113 1.1581 -1.70899 152 7.39469 -0.560352 -1.70884 107 7.40915 -0.316162 -1.70884 115 7.41431 -0.153161 -1.70884 119 7.41413 0.161338 -1.70883 127 7.40879 0.324333 -1.70883 119 7.39035 0.614954 -1.70882 114 7.38314 0.696179 -1.70882 123 9.99125 1.36287 -1.70881 114 7.70657 -0.694551 -1.70857 84 8.12179 -0.0757881 -1.70856 141 8.12213 0.0135192 -1.70856 131 8.11987 0.192119 -1.70856 123 7.11123 -0.729155 -1.70847 94 7.40905 -0.269538 -1.70835 126 7.40784 0.300971 -1.70834 122 7.40284 0.405665 -1.70834 115 7.40015 0.452172 -1.70834 119 7.39793 0.487037 -1.70834 126 7.39473 0.533515 -1.70834 124 7.39031 0.591573 -1.70834 114 7.37311 0.777107 -1.70833 115 7.37063 0.800265 -1.70833 119 7.33692 1.06598 -1.70833 119 8.11956 -0.101286 -1.70812 148 8.0961 0.625146 -1.7081 123 7.71181 -0.609612 -1.7081 90 7.09564 -0.851678 -1.70797 90 7.40256 -0.374161 -1.70787 122 7.40424 -0.339273 -1.70787 123 7.41185 -0.048319 -1.70786 123 7.32989 1.10024 -1.70784 111 9.49117 1.35141 -1.70778 113 9.48688 1.38122 -1.70777 118 8.11809 -0.0502607 -1.70767 137 7.09893 -0.806852 -1.70746 88 7.10266 -0.773389 -1.70746 98 7.12596 -0.51633 -1.70746 99 7.41003 -0.0250337 -1.70737 116 7.41007 -0.00175403 -1.70737 111 7.40918 0.11464 -1.70737 115 7.40682 0.219371 -1.70737 123 7.40021 0.382194 -1.70737 107 7.32092 1.14597 -1.70736 111 7.69508 -0.754468 -1.70717 108 9.072 1.20018 -1.70709 119 9.97718 1.39291 -1.707 117 7.0849 -0.906875 -1.70696 85 7.11095 -0.672714 -1.70696 90 7.11504 -0.62802 -1.70695 128 7.12151 -0.549749 -1.70695 91 7.40512 -0.211194 -1.70689 130 8.11143 0.217393 -1.70677 126 7.70303 -0.64544 -1.7067 90 7.08579 -0.884366 -1.70646 119 7.09252 -0.828687 -1.70645 125 7.40248 -0.234403 -1.70641 130 7.4038 -0.187887 -1.7064 123 7.33255 1.04181 -1.70638 115 8.11094 0.153636 -1.70633 121 9.05841 1.27086 -1.7063 122 7.68505 -0.814459 -1.70623 86 9.06042 1.24213 -1.7059 122 7.31873 1.12207 -1.7059 118 8.11035 0.0389423 -1.70589 123 7.66091 1.00186 -1.70573 90 7.40154 -0.106425 -1.70543 115 7.71304 -0.414952 -1.70529 99 9.03373 1.3979 -1.7051 106 8.10654 -0.0120246 -1.705 130 7.07434 -0.928093 -1.70495 125 7.09543 -0.750019 -1.70494 117 7.10532 -0.649637 -1.70494 96 7.71619 -0.305789 -1.70482 102 7.72222 0.0216468 -1.70482 99 7.69046 0.699977 -1.70481 99 8.10395 0.102547 -1.70455 120 7.09918 -0.694073 -1.70444 121 7.11747 -0.470738 -1.70443 96 7.70413 -0.499471 -1.70436 96 7.70712 -0.451055 -1.70436 93 7.71619 0.252019 -1.70435 90 7.70878 0.421634 -1.70434 100 7.69857 0.578954 -1.70434 92 8.10228 0.0770618 -1.7041 116 7.12825 0.201126 -1.70392 98 7.12211 0.357826 -1.70392 100 7.69975 -0.535629 -1.70389 90 7.69841 0.554631 -1.70387 94 7.64172 1.08497 -1.70387 95 7.11575 -0.436941 -1.70343 105 7.11778 0.402464 -1.70341 101 7.70907 0.336691 -1.70341 99 7.70797 0.360908 -1.70341 98 7.10893 0.536555 -1.70341 104 7.7068 0.385122 -1.70341 102 7.09092 0.737318 -1.70341 90 7.08239 0.81524 -1.70341 89 7.07979 0.837485 -1.70341 102 7.68786 0.663247 -1.70341 98 9.03885 1.29713 -1.70312 124 7.70578 -0.365987 -1.70296 97 7.71315 0.142823 -1.70295 100 7.67206 0.807838 -1.70294 94 7.11017 -0.492673 -1.70293 102 7.1203 -0.313836 -1.70292 109 7.12548 -0.157188 -1.70292 104 7.11388 0.435895 -1.70291 99 7.11247 0.45824 -1.70291 96 7.6979 -0.47476 -1.70249 95 7.71072 0.167018 -1.70248 100 7.71015 0.191242 -1.70248 96 7.70952 0.215463 -1.70248 100 7.70759 0.276007 -1.70248 97 7.69429 0.530062 -1.70247 97 7.688 0.614632 -1.70247 99 7.68603 0.638782 -1.70247 101 7.67854 0.723255 -1.70247 99 7.66755 0.831732 -1.70247 93 7.66078 0.891931 -1.70247 89 7.65203 0.964092 -1.70247 93 7.12485 -0.0788007 -1.70241 110 7.12528 -0.000452724 -1.70241 102 7.12458 0.100274 -1.70241 97 7.12381 0.145041 -1.70241 100 7.11515 0.379909 -1.70241 103 7.05891 0.970266 -1.7024 96 9.0245 1.3675 -1.70233 131 7.70743 -0.220555 -1.70202 108 7.71054 -0.0267943 -1.70202 101 7.71058 -0.00257061 -1.70202 102 7.71036 0.0579884 -1.70202 103 7.69771 0.445322 -1.70201 99 7.67191 0.771302 -1.702 99 7.65601 0.915768 -1.702 91 7.65309 0.939815 -1.702 93 7.63904 1.04792 -1.702 94 7.11375 -0.369535 -1.70192 98 7.12016 -0.213016 -1.70191 109 7.12111 0.178566 -1.70191 97 7.11787 0.279216 -1.70191 101 7.0816 0.770117 -1.7019 98 7.70672 -0.172073 -1.70155 106 7.67236 0.747015 -1.70154 94 9.02487 1.33858 -1.70153 101 8.08994 0.127747 -1.70143 116 7.09854 -0.570337 -1.70142 125 7.10936 -0.414105 -1.70141 101 7.11348 -0.335909 -1.70141 104 7.12133 -0.0339988 -1.70141 101 7.11791 0.22325 -1.7014 140 7.11678 0.256792 -1.7014 90 7.09949 0.558306 -1.7014 100 7.08771 0.692021 -1.7014 103 7.0855 0.71429 -1.7014 102 7.06247 0.914316 -1.70139 128 7.05809 0.947586 -1.70139 95 7.69965 -0.329312 -1.70109 103 7.70419 -0.196227 -1.70109 106 7.70589 -0.111504 -1.70109 101 7.69239 0.469279 -1.70107 104 7.6591 0.855191 -1.70107 109 7.10869 -0.391654 -1.70091 102 7.11925 -0.0563509 -1.7009 101 7.11944 0.0219342 -1.7009 104 7.10327 0.480088 -1.7009 127 7.09296 0.613892 -1.70089 90 6.87436 -0.655512 -1.70068 110 7.70047 -0.256659 -1.70062 103 7.70431 0.0821686 -1.70061 106 7.6248 1.10706 -1.7006 91 7.11528 -0.179293 -1.7004 105 7.11723 0.0666564 -1.7004 95 7.11018 0.323692 -1.70039 97 7.07337 0.791734 -1.70039 129 6.87545 -0.622942 -1.70016 114 6.89967 -0.233352 -1.70016 97 7.69295 -0.389565 -1.70016 96 7.70161 -0.135631 -1.70015 98 7.70254 -0.0630393 -1.70015 107 7.687 0.493207 -1.70014 99 7.63458 1.0229 -1.70013 94 7.61395 1.16662 -1.70013 90 7.10965 -0.290948 -1.6999 102 7.11095 -0.257441 -1.6999 99 7.11472 -0.112185 -1.6999 102 7.08511 0.658099 -1.69989 96 7.06231 0.869234 -1.69988 121 7.03152 1.09064 -1.69988 98 8.67025 1.16778 -1.69977 121 7.70036 -0.087209 -1.69968 100 7.61744 1.13045 -1.69966 97 7.11261 0.122497 -1.69939 96 7.04432 0.990868 -1.69938 119 7.04117 1.01299 -1.69938 90 7.033 1.06826 -1.69938 97 7.6938 -0.280617 -1.69922 103 7.69308 0.299736 -1.69921 99 6.86434 -0.698127 -1.69913 110 6.88508 -0.449723 -1.69913 127 7.10785 -0.234958 -1.69889 108 7.10535 0.301129 -1.69889 105 7.0557 0.890948 -1.69888 91 7.69624 0.106291 -1.69875 103 6.87345 -0.579261 -1.69861 109 6.88095 -0.482037 -1.69861 94 6.88708 -0.384713 -1.69861 95 6.89602 -0.15736 -1.6986 98 7.10853 -0.134404 -1.69839 100 7.09127 0.512891 -1.69838 114 6.84748 0.815644 -1.69807 115 6.86073 -0.676012 -1.69758 109 6.87139 -0.557368 -1.69757 110 6.85641 0.718551 -1.69755 90 6.85176 0.761615 -1.69755 90 7.10579 0.0442645 -1.69738 140 7.08227 0.579403 -1.69737 101 7.0775 0.635009 -1.69737 90 6.87362 -0.503253 -1.69705 115 6.87874 -0.427641 -1.69705 88 6.88846 0.221608 -1.69704 90 6.87944 0.416267 -1.69704 95 6.83839 0.858154 -1.69703 94 6.8639 -0.600212 -1.69654 113 6.88217 -0.330272 -1.69653 94 6.88932 -0.103108 -1.69653 102 6.8858 0.243178 -1.69652 129 6.87917 -0.351799 -1.69602 125 6.88124 -0.308565 -1.69602 99 6.88307 0.264726 -1.69601 92 6.86623 -0.524424 -1.6955 114 6.88489 -0.135512 -1.69549 98 6.87018 0.469865 -1.69548 93 6.84644 0.739228 -1.69548 119 6.8353 0.835942 -1.69548 115 6.88429 -0.00572042 -1.69497 96 6.87478 0.361785 -1.69497 90 6.86517 0.512875 -1.69497 106 6.85223 0.663711 -1.69496 117 6.82661 0.889344 -1.69496 118 6.87945 -0.200296 -1.69446 126 6.88211 -0.0597833 -1.69446 91 6.85719 0.588153 -1.69445 94 6.83782 0.781782 -1.69444 117 6.82187 0.910522 -1.69444 115 6.87982 0.0915339 -1.69394 115 6.87889 0.145568 -1.69394 120 6.8784 0.167177 -1.69394 94 6.85043 0.641804 -1.69393 91 6.8738 -0.254193 -1.69342 95 6.87618 -0.178598 -1.69342 93 6.87833 0.0482831 -1.69342 89 6.87814 0.0698939 -1.69342 127 6.87757 0.11311 -1.69342 95 6.86722 0.393825 -1.69341 119 6.85774 0.533968 -1.69341 114 6.84434 0.684639 -1.69341 113 6.86462 -0.405178 -1.69291 124 6.87609 -0.0813561 -1.6929 131 6.87655 0.0158591 -1.6929 127 6.87017 0.296614 -1.6929 123 6.8692 0.318194 -1.6929 94 6.86817 0.339775 -1.6929 123 6.87205 0.188604 -1.69238 125 6.84761 0.608981 -1.69237 121 6.86718 -0.275575 -1.69187 132 6.87265 -0.0273448 -1.69187 119 6.85882 0.436576 -1.69186 124 6.80941 0.930607 -1.69185 113 6.85133 0.490139 -1.69082 122 6.83591 0.564613 -1.68823 111 8.61746 1.11916 -1.68738 85 8.01274 -0.503672 -1.68717 134 7.93267 1.01516 -1.68001 106 7.90139 0.80974 -1.66754 175 7.86157 -0.693335 -1.65597 113 7.87019 -0.532414 -1.65508 113 8.26912 1.07376 -1.65178 75 7.84039 -0.666729 -1.65062 122 7.84248 -0.617306 -1.65018 119 7.83661 -0.641636 -1.64929 113 7.80592 0.911362 -1.64837 109 7.79573 0.947412 -1.64703 108 7.79078 0.97165 -1.64658 98 7.80253 0.836467 -1.64569 114 7.79325 0.885023 -1.6448 116 7.8218 -0.553986 -1.64438 98 7.81807 -0.578419 -1.64393 124 7.79018 0.859874 -1.64346 114 7.83169 -0.748711 -1.55014 62 7.77756 -0.718701 -1.5379 80 7.73803 -0.678142 -1.52862 79 7.70548 0.965468 -1.52817 86 7.66965 0.936647 -1.51973 96 7.79798 -0.737022 -1.50644 59 7.51719 0.894592 -1.48598 92 7.62541 0.962944 -1.47542 79 7.59363 -0.694336 -1.46264 72 7.411 -0.62492 -1.45732 113 7.37425 -0.516788 -1.44761 79 7.3453 -0.537856 -1.44171 87 7.29204 0.833765 -1.4362 82 7.43814 0.914911 -1.43493 151 7.29994 -0.592069 -1.43285 82 7.289 -0.556567 -1.4299 80 7.25872 0.760869 -1.42734 107 7.24658 0.782656 -1.42523 50 7.24408 0.805417 -1.42523 72 7.27412 -0.429083 -1.42483 255 7.26348 -0.474242 -1.42314 255 7.66967 0.994204 -1.41998 53 7.38035 -0.640523 -1.41678 165 7.2404 -0.324316 -1.41639 138 7.19412 0.720082 -1.41258 200 7.1782 0.593521 -1.40667 158 7.33596 -0.532488 -1.40562 228 7.32783 -0.508797 -1.40356 224 7.3027 0.735098 -1.4023 164 7.28561 0.872377 -1.40188 113 7.17349 -0.28721 -1.40162 40 7.14902 0.613825 -1.40077 255 7.27337 0.789813 -1.39734 203 7.14759 -0.342331 -1.39656 247 7.27117 0.754901 -1.3961 135 7.28653 -0.563595 -1.39571 107 7.11848 0.690214 -1.3957 255 7.27505 -0.608743 -1.39406 77 7.12735 0.488188 -1.39402 39 7.12706 0.43197 -1.39317 39 7.24947 0.810191 -1.39279 125 7.12891 -0.363823 -1.39277 255 7.12372 0.454243 -1.39275 39 7.26522 -0.584985 -1.39158 87 7.1215 -0.206529 -1.38981 45 7.12212 -0.184156 -1.38981 46 7.10628 0.50925 -1.3898 43 7.12071 -0.161727 -1.38939 45 7.1153 0.274461 -1.38896 45 7.1138 -0.262214 -1.38855 44 7.11459 -0.239865 -1.38854 45 7.1068 0.37483 -1.38811 47 7.51517 0.950718 -1.38781 158 7.08473 0.630958 -1.38727 255 7.09716 -0.440394 -1.38686 255 7.11033 -0.083239 -1.38685 45 7.11081 -0.00505708 -1.38685 46 7.1075 -0.139039 -1.38643 46 7.1044 0.251734 -1.38643 46 7.09589 -0.395559 -1.38602 255 7.10417 -0.10547 -1.38559 45 7.10078 -0.0607824 -1.38474 45 7.09339 0.329503 -1.38474 45 7.20802 0.828356 -1.38453 64 7.09811 0.117656 -1.38432 45 7.09291 0.296 -1.38432 46 7.09037 0.351695 -1.38432 46 7.06805 0.66311 -1.38431 255 7.0932 0.0173093 -1.38306 45 7.09258 0.0952968 -1.38305 45 7.08952 0.228967 -1.38305 46 7.07763 0.406847 -1.38221 45 7.08698 0.0729764 -1.38179 45 7.08535 -0.0272045 -1.38137 45 7.08271 0.195371 -1.38137 45 7.08333 0.0395732 -1.38095 45 7.07402 0.150689 -1.37926 45 7.0696 0.172833 -1.37841 45 7.2005 -0.477683 -1.37629 205 7.47937 -0.681791 -1.37473 120 7.40083 0.901254 -1.36359 165 7.14652 -0.36168 -1.36348 255 7.13759 -0.417476 -1.36224 255 7.13429 -0.439784 -1.36182 255 7.12326 0.592227 -1.36181 255 7.11736 0.659339 -1.36181 255 7.13496 -0.39485 -1.36141 255 7.11747 0.614251 -1.36098 255 7.11355 0.636425 -1.36057 255 7.09282 0.555934 -1.35478 91 7.35655 -0.646863 -1.34932 130 7.08117 -0.291743 -1.34901 76 7.07724 -0.336145 -1.3486 209 7.07268 -0.258048 -1.34695 71 7.06262 -0.313271 -1.3453 80 7.05069 -0.212984 -1.34199 76 7.03568 0.506772 -1.34198 71 7.04823 -0.157525 -1.34116 61 7.03692 0.429129 -1.34115 67 7.01683 0.68303 -1.34115 255 7.28678 0.864557 -1.33976 149 7.03825 -0.234784 -1.33951 88 7.04193 -0.0578367 -1.33951 56 7.03238 -0.00255693 -1.33744 64 7.01601 0.449909 -1.33702 66 7.01457 0.47195 -1.33702 82 7.02838 -0.0356924 -1.33661 63 7.01663 0.372519 -1.33619 53 7.02031 -0.179069 -1.33538 72 7.01152 0.394326 -1.33537 61 7.01934 -0.134927 -1.33496 69 7.01139 0.217724 -1.33372 61 7.00711 0.327829 -1.33372 27 7.01279 0.019408 -1.33331 63 7.00409 0.349735 -1.3333 27 7.01012 -0.101744 -1.3329 57 7.58063 0.989143 -1.3322 122 7.00486 0.0413628 -1.33166 66 7.00399 0.118384 -1.33165 63 7.00335 0.151387 -1.33165 65 6.99969 0.272371 -1.33165 28 7.00258 -0.0796585 -1.33124 55 7.00263 0.0743423 -1.33124 66 6.99855 0.2503 -1.33124 30 6.99684 0.29427 -1.33124 28 7.00041 0.0963127 -1.33083 65 6.99697 0.173219 -1.33041 64 7.26578 -0.604059 -1.33026 217 7.59291 -0.722623 -1.32881 57 6.98661 0.194893 -1.32835 61 7.23102 0.835117 -1.32785 222 7.2442 -0.579271 -1.32549 229 7.21412 0.810278 -1.32388 231 7.2284 -0.555096 -1.32192 235 7.22229 -0.531781 -1.32033 237 7.54341 -0.68224 -1.31856 148 7.19056 0.773439 -1.31832 234 7.21299 -0.49689 -1.31794 239 7.18321 0.749863 -1.31633 237 7.17187 0.725958 -1.31355 239 7.48634 0.952588 -1.31322 186 7.14607 -0.469481 -1.30404 240 7.13453 0.62059 -1.30402 239 7.11861 0.686897 -1.30204 241 7.14292 -0.311673 -1.30166 239 7.13382 -0.446123 -1.30126 242 7.11942 0.540549 -1.29966 239 7.10511 0.663131 -1.29886 241 7.11602 0.506599 -1.29847 239 7.12828 -0.232474 -1.29808 239 7.11432 -0.411178 -1.29689 242 7.10928 0.461281 -1.29648 238 7.11865 -0.153782 -1.2957 238 7.11948 -0.109054 -1.2957 239 7.10922 0.360451 -1.29529 239 7.11393 -0.187211 -1.2949 239 7.10888 0.326865 -1.2949 239 7.11322 -0.131289 -1.29451 239 7.10159 0.42722 -1.2945 239 7.10188 -0.388027 -1.29411 243 7.10218 0.382491 -1.2941 239 7.10094 0.404801 -1.2941 239 7.08373 0.638777 -1.2941 241 7.10848 -0.0306729 -1.29331 239 7.0768 0.582204 -1.29171 240 7.08936 -0.364958 -1.29133 242 7.07469 0.559674 -1.29092 240 7.08513 -0.331249 -1.29014 241 7.08707 -0.286721 -1.29014 242 7.08402 -0.264296 -1.28935 242 7.08 -0.208458 -1.28815 240 7.06672 0.480967 -1.28814 240 7.06491 -0.0858164 -1.28458 240 7.06468 0.102851 -1.28457 240 7.06327 -0.0525029 -1.28418 240 7.06342 0.0251665 -1.28418 240 7.05948 0.169349 -1.28378 240 7.05664 0.202566 -1.28338 241 7.05597 0.224734 -1.28338 240 7.05523 0.246898 -1.28338 240 7.05307 0.302306 -1.28338 241 7.05758 -0.00808923 -1.28299 240 7.36158 -0.643122 -1.28286 181 7.05528 0.069496 -1.28259 241 7.05007 0.280006 -1.28259 241 7.05351 0.047326 -1.28219 241 7.05017 0.147003 -1.28179 241 7.3232 0.896196 -1.28056 182 7.03296 0.124604 -1.27822 253 7.26751 0.866008 -1.26917 223 7.29115 -0.614151 -1.26881 222 7.2783 -0.578596 -1.26577 235 7.24485 0.840142 -1.26423 235 7.25853 -0.554161 -1.2616 238 7.22337 0.803079 -1.25929 239 7.53586 0.950108 -1.2512 133 7.19364 -0.526719 -1.24868 241 7.16146 0.773192 -1.24676 242 7.53031 -0.713613 -1.24544 75 7.16861 -0.491035 -1.24337 243 7.14238 0.748362 -1.24259 243 7.15247 -0.467423 -1.23995 244 7.10564 0.721806 -1.23499 245 7.1245 -0.443229 -1.23425 245 7.12194 -0.420627 -1.23349 244 7.08942 0.686352 -1.23119 245 7.08373 0.663316 -1.22967 246 7.10227 -0.385967 -1.22931 246 7.10149 -0.363559 -1.22893 246 7.08186 0.640692 -1.22892 247 7.10063 -0.34116 -1.22855 247 7.07698 0.606608 -1.2274 247 7.09431 -0.307384 -1.22703 246 7.09132 -0.284952 -1.22627 247 7.07478 0.561644 -1.22626 247 7.07298 0.583867 -1.22626 246 7.09022 -0.262607 -1.22589 246 7.07344 0.527991 -1.2255 246 7.0731 0.50562 -1.22512 246 7.07026 0.460763 -1.22398 244 7.0796 -0.228854 -1.22361 245 7.08028 -0.206612 -1.22361 245 7.06682 0.48283 -1.2236 246 7.07948 -0.162083 -1.22323 244 7.07501 -0.184235 -1.22247 246 7.06256 0.42681 -1.22208 245 7.07231 -0.128606 -1.22171 245 7.0619 0.404502 -1.2217 244 7.37865 0.907304 -1.22154 105 7.07071 -0.106364 -1.22133 244 7.06949 -0.0286109 -1.22095 244 7.05898 0.348716 -1.22057 244 7.06544 -0.0508067 -1.22019 243 7.05612 0.326336 -1.21981 244 7.0612 -0.0840693 -1.21943 243 7.06169 -0.00642287 -1.21943 241 7.05874 0.204311 -1.21943 242 7.0565 0.270829 -1.21943 244 7.05138 0.381635 -1.21943 243 7.05339 0.248504 -1.21867 243 7.05575 0.0268107 -1.21829 242 7.04926 0.303801 -1.21829 242 7.05177 0.170825 -1.21791 242 7.05021 0.226204 -1.21791 242 7.05171 0.0489354 -1.21753 242 7.05031 0.148619 -1.21753 243 7.0493 0.0932116 -1.21715 243 7.04563 0.071012 -1.21639 242 7.04289 0.1263 -1.21601 242 7.34453 -0.672082 -1.21071 104 7.274 0.871629 -1.20164 179 7.28688 -0.63198 -1.1995 188 7.23111 0.832114 -1.19296 203 7.22417 -0.603449 -1.18756 214 7.18089 0.80367 -1.18319 219 7.56326 0.962198 -1.18073 150 7.18682 -0.577459 -1.18032 222 7.5812 -0.709988 -1.17905 113 7.15599 0.778229 -1.17813 224 7.17182 -0.542187 -1.17707 224 7.15779 -0.518459 -1.17417 226 7.13609 0.742144 -1.17379 225 7.13251 0.719148 -1.1727 227 7.14566 -0.494968 -1.17164 228 7.13221 -0.460219 -1.16874 228 7.11124 0.694529 -1.16836 228 7.12381 -0.437172 -1.16694 229 7.10359 0.671297 -1.16655 229 7.11533 -0.414182 -1.16513 227 7.09884 0.637138 -1.16511 228 7.1107 -0.391481 -1.16404 230 7.08904 0.613855 -1.16294 228 7.08897 0.591426 -1.16258 227 7.09479 -0.357014 -1.16078 226 7.09296 -0.312241 -1.16006 227 7.07599 0.556838 -1.15968 227 7.08016 -0.333924 -1.15789 222 7.07864 -0.278137 -1.15717 227 7.06561 0.511421 -1.15715 227 7.07828 -0.233583 -1.1568 227 7.07554 -0.255741 -1.15644 227 7.06005 0.533338 -1.15643 223 7.06129 0.488835 -1.15607 228 7.07111 -0.211081 -1.15536 228 7.05959 0.455315 -1.15534 228 7.05706 0.432907 -1.15462 228 7.05446 0.410521 -1.1539 229 7.06272 -0.155285 -1.15355 228 7.06023 -0.177416 -1.15318 228 7.05239 0.377077 -1.15317 230 7.05924 -0.133008 -1.15282 228 7.05389 -0.0996349 -1.15174 229 7.04676 0.332416 -1.15173 229 7.04568 0.354552 -1.15173 229 7.05241 -0.0552891 -1.15137 229 7.04718 0.27699 -1.15137 230 7.04628 0.299129 -1.15137 230 7.05023 -0.0774161 -1.15101 228 7.04869 0.000116636 -1.15065 229 7.04587 0.19939 -1.15065 229 7.04669 -0.0220144 -1.15029 230 7.0445 0.177211 -1.15028 230 7.04289 0.232533 -1.15028 229 7.04212 0.254658 -1.15028 230 7.4185 -0.671816 -1.15027 165 7.04462 0.0443948 -1.14992 229 7.04433 0.0775915 -1.14992 229 7.04405 0.0997219 -1.14992 227 7.04305 0.155043 -1.14992 229 7.04276 0.0222641 -1.14956 229 7.03977 0.121798 -1.1492 229 7.38251 0.915002 -1.14853 182 7.30518 0.881839 -1.13448 224 7.32732 -0.629093 -1.13382 227 7.31354 -0.604827 -1.13108 242 7.28186 0.84413 -1.12968 240 7.23682 -0.575877 -1.11737 250 7.20815 0.812369 -1.11632 249 7.2209 -0.551851 -1.11429 251 7.18717 0.787061 -1.11221 251 7.20377 -0.516479 -1.11086 251 7.20787 -0.255622 -1.10914 232 7.19356 -0.493079 -1.1088 253 7.17121 0.75106 -1.10878 253 7.20265 -0.289441 -1.10846 233 7.20631 -0.17627 -1.10845 233 7.19879 -0.232693 -1.10743 233 7.19281 -0.334354 -1.10709 244 7.19383 -0.311755 -1.10709 231 7.19555 -0.209975 -1.10674 231 7.19745 0.129219 -1.10674 246 7.1873 0.366421 -1.10639 236 7.18284 0.445427 -1.10639 233 7.17933 -0.469505 -1.10606 254 7.19303 -0.153385 -1.10606 231 7.19429 -0.0742851 -1.10605 233 7.17944 0.467855 -1.10605 231 7.19151 -0.130758 -1.10571 231 7.18093 0.411334 -1.1057 233 7.19008 -0.0968479 -1.10537 232 7.174 0.490125 -1.10536 229 7.15394 0.726465 -1.10536 255 7.18871 0.027383 -1.10502 233 7.18827 0.0838422 -1.10502 236 7.18575 0.208029 -1.10502 232 7.18209 0.309593 -1.10502 236 7.17825 0.388545 -1.10502 232 7.16965 0.523776 -1.10502 229 7.1866 -0.0516549 -1.10468 230 7.18192 0.26438 -1.10468 234 7.17858 0.343333 -1.10468 234 7.16601 0.546141 -1.10467 234 7.18464 0.0499255 -1.10434 233 7.18322 0.151489 -1.10434 233 7.18112 0.230463 -1.10434 234 7.18279 -0.0290754 -1.104 231 7.17712 0.28677 -1.10399 234 7.14834 0.703187 -1.10399 255 7.18009 0.10628 -1.10365 235 7.16376 -0.434658 -1.10298 255 7.17693 0.00474785 -1.10297 230 7.17455 0.185106 -1.10297 232 7.15919 -0.411832 -1.10195 255 7.13 0.667394 -1.10022 255 7.12226 0.644068 -1.0985 255 7.1329 -0.387941 -1.09715 255 7.13268 -0.354233 -1.09681 255 7.1007 0.619548 -1.09439 255 7.09749 0.563108 -1.09302 255 7.60781 0.978305 -1.09204 108 7.08887 0.596031 -1.09199 255 7.54844 -0.708257 -1.07775 94 7.71721 -0.734121 -1.07253 70 7.43786 0.92144 -1.06372 136 7.39244 -0.657944 -1.05197 111 7.55432 0.94932 -1.05079 91 7.32697 0.884741 -1.04526 172 7.52768 -0.680966 -1.04214 89 7.32564 -0.628567 -1.04083 160 7.26302 0.854116 -1.03444 208 7.28626 -0.60199 -1.03415 205 7.25322 0.818378 -1.03221 211 7.2595 -0.565241 -1.02937 219 7.23023 0.792881 -1.02808 224 7.24549 -0.5412 -1.02683 227 7.2255 -0.516806 -1.02332 232 7.20126 0.766931 -1.02299 233 7.37495 0.902622 -1.02196 138 7.20936 -0.492829 -1.02046 235 7.18711 0.731247 -1.02012 233 7.21227 -0.379302 -1.01982 242 7.18544 0.708292 -1.01949 235 7.18686 0.606006 -1.01821 238 7.19962 -0.355911 -1.01759 241 7.1919 -0.457524 -1.01728 235 7.19464 -0.41233 -1.01728 224 7.3703 -0.643945 -1.01702 134 7.18936 -0.434677 -1.01664 236 7.17888 0.582663 -1.01662 242 7.16993 0.684092 -1.01662 235 7.19282 -0.332899 -1.01632 241 7.19234 -0.298912 -1.016 241 7.18929 -0.276148 -1.01536 241 7.17367 0.548252 -1.01535 241 7.16418 0.660868 -1.01535 235 7.17107 0.502777 -1.0144 240 7.16945 0.525302 -1.0144 241 7.18026 -0.253178 -1.01377 241 7.18102 -0.230617 -1.01377 239 7.17085 0.446205 -1.01376 241 7.16941 0.468737 -1.01376 240 7.15737 0.626273 -1.01376 232 7.18005 -0.196712 -1.01345 240 7.17866 -0.1741 -1.01313 240 7.17917 -0.151548 -1.01313 240 7.16828 0.423458 -1.01313 239 7.17586 -0.117638 -1.0125 241 7.16168 0.400524 -1.01185 239 7.15757 0.366492 -1.0109 240 7.31517 -0.616176 -1.00803 221 7.28754 0.868375 -1.0077 196 7.66302 0.959683 -1.00528 112 7.27964 -0.590293 -1.00214 227 7.25035 0.829164 -1.00119 224 7.65661 -0.707724 -1.00031 118 7.23525 0.804349 -0.998395 229 7.07781 0.340408 -0.99785 255 7.24884 -0.553546 -0.996867 229 7.24858 -0.530634 -0.996557 232 7.23838 -0.507071 -0.994696 235 7.21418 0.778986 -0.994675 232 7.2107 0.75568 -0.993745 234 7.04639 0.23924 -0.992123 255 7.22294 -0.471858 -0.991905 236 7.04136 0.316622 -0.991804 255 7.20042 0.720268 -0.991575 237 7.22044 -0.448935 -0.991284 237 7.03969 0.261177 -0.991168 255 7.03955 0.205832 -0.990851 255 7.03686 0.283222 -0.99085 255 7.21507 -0.369048 -0.989732 242 7.20931 -0.402836 -0.989113 236 7.21225 -0.346205 -0.989112 242 7.03071 0.00676651 -0.988945 255 7.02832 0.183452 -0.988942 255 7.20603 -0.425375 -0.988803 239 7.02813 -0.0925904 -0.988628 255 7.02736 0.139252 -0.988624 255 7.02688 0.161327 -0.988624 255 7.21079 -0.289402 -0.988491 243 7.02596 0.106114 -0.988307 255 7.20738 -0.323295 -0.988181 243 7.19014 0.59388 -0.988166 241 7.18824 0.616465 -0.988166 242 7.17906 0.69527 -0.987855 238 7.02254 0.0619449 -0.987671 255 7.02231 0.0840089 -0.98767 255 7.20574 -0.26655 -0.98756 244 7.17924 0.672519 -0.987545 239 7.02048 -0.0704032 -0.987355 255 7.02078 0.0288489 -0.987353 255 7.18036 0.6385 -0.987235 234 7.01885 -0.0152539 -0.987036 255 7.18498 0.559351 -0.986927 242 7.01679 -0.0372854 -0.986718 255 7.20062 -0.243733 -0.98663 244 7.19282 0.378388 -0.986309 244 7.18599 0.491323 -0.986308 243 7.19639 -0.187039 -0.985698 243 7.18047 0.513599 -0.985687 243 7.17882 0.53616 -0.985687 244 7.19496 -0.16439 -0.985388 244 7.19545 -0.141787 -0.985388 244 7.18231 0.457058 -0.985378 244 7.18174 0.434366 -0.985068 244 7.17715 0.411439 -0.984138 244 7.47937 0.913461 -0.977325 137 7.13453 -0.208083 -0.976087 245 7.11111 0.351392 -0.973287 250 7.41454 -0.661032 -0.963815 187 7.04193 -0.106123 -0.961202 255 7.36959 0.865224 -0.960258 112 6.99673 0.301256 -0.954994 255 6.99722 0.169214 -0.954376 255 6.99723 -0.0286685 -0.954069 255 6.99727 0.0152946 -0.954069 255 6.99635 0.114213 -0.954067 255 6.99215 0.268034 -0.954065 255 6.99481 -0.0836109 -0.95376 255 6.99504 -0.0616368 -0.95376 255 6.99514 0.0482455 -0.953758 255 6.9947 0.0921973 -0.953758 255 6.99172 0.224021 -0.953755 255 6.99098 0.24599 -0.953755 255 6.98786 0.32284 -0.953754 255 6.99333 -0.00669799 -0.953449 255 6.99072 0.191011 -0.953446 255 6.991 0.0701691 -0.953138 255 6.98981 0.147036 -0.953136 255 7.33678 -0.618981 -0.95175 66 7.28152 -0.591084 -0.943215 56 7.27349 -0.567401 -0.941744 75 7.249 0.805369 -0.941426 68 7.2603 -0.531906 -0.939389 84 7.23772 0.781156 -0.939367 82 7.24023 -0.507495 -0.936151 79 7.23982 -0.484607 -0.935857 56 7.24202 -0.450485 -0.935856 66 7.2434 -0.427731 -0.935856 146 7.2118 0.744102 -0.934953 105 7.20228 0.720304 -0.933188 113 7.2078 0.640898 -0.932895 133 7.21706 -0.403328 -0.931736 204 7.19466 0.69675 -0.931717 137 7.19195 0.662317 -0.930835 161 7.19203 0.616795 -0.930247 191 7.68708 0.960225 -0.929668 171 7.70605 -0.690489 -0.928325 137 7.19047 -0.0624443 -0.926139 255 7.18345 0.276278 -0.925839 255 7.18254 0.298846 -0.925838 255 7.18232 -0.0849103 -0.924962 255 7.17748 0.219637 -0.924663 255 7.17876 -0.0397435 -0.924373 255 7.17439 0.253397 -0.924368 255 7.17625 0.095553 -0.924076 255 7.17477 0.174456 -0.924075 255 7.15904 -0.377315 -0.922907 245 7.13766 0.578467 -0.921714 245 7.12123 -0.341535 -0.917021 254 7.11238 -0.318682 -0.915549 255 7.11137 -0.296246 -0.915255 255 7.09604 0.552817 -0.915241 254 7.11071 -0.262651 -0.91496 255 7.1115 -0.240311 -0.91496 255 7.11222 -0.217968 -0.914959 255 7.11221 -0.139702 -0.914664 255 7.09543 0.507951 -0.914653 255 7.09861 0.429795 -0.91436 255 7.09722 0.452093 -0.914359 255 7.09182 0.530101 -0.914358 255 7.10724 -0.184274 -0.914076 255 7.10778 -0.161945 -0.914075 255 7.09182 0.474136 -0.913771 255 7.095 0.351352 -0.913184 254 7.08475 0.395509 -0.912006 255 7.07805 0.372864 -0.91083 255 7.0335 -0.115764 -0.902892 255 7.00763 0.314253 -0.899943 255 7.47186 0.908763 -0.899224 100 7.00676 -0.00514841 -0.898771 255 7.0027 0.0388668 -0.898182 255 6.99661 0.0608389 -0.897298 255 6.99224 0.192656 -0.897002 255 6.99196 0.115734 -0.896709 255 6.98894 0.0168861 -0.896122 255 6.9876 0.137642 -0.89612 255 7.34585 -0.601334 -0.877581 137 7.33238 0.728026 -0.877284 246 7.29314 0.851529 -0.873717 143 7.31984 -0.553032 -0.873466 229 7.31841 -0.518266 -0.872917 228 7.30819 -0.575284 -0.872095 196 7.28397 0.827231 -0.872071 192 7.27884 0.745625 -0.870153 217 7.29628 -0.493751 -0.869625 193 7.26291 0.801652 -0.86878 198 7.26267 0.766982 -0.868232 229 7.22661 -0.466489 -0.859751 103 7.22279 -0.432095 -0.858927 213 7.21224 -0.408772 -0.857281 187 7.1939 0.656748 -0.857263 225 7.20953 -0.385914 -0.856732 222 7.18212 0.632875 -0.855343 222 7.1994 -0.351399 -0.855086 226 7.19453 -0.32853 -0.854262 228 7.17618 0.60961 -0.854246 226 7.1642 0.676636 -0.853423 221 7.1876 -0.305617 -0.853165 218 7.17284 0.552593 -0.85315 225 7.17107 0.575123 -0.85315 228 7.18816 0.168793 -0.852608 248 7.18061 -0.282752 -0.852067 185 7.15279 0.471899 -0.849586 235 7.14689 0.527913 -0.849311 136 7.1581 -0.248173 -0.848775 213 7.14535 0.493943 -0.848763 221 7.84164 -0.698517 -0.846057 40 7.13808 0.189877 -0.845751 212 7.12765 -0.123995 -0.84411 252 7.12419 -0.0903695 -0.843561 252 7.12461 -0.0456048 -0.84356 251 7.11404 0.390675 -0.843553 252 7.12246 -0.0679758 -0.843287 252 7.1227 0.0327203 -0.843285 251 7.11775 0.267618 -0.843281 251 7.1193 -0.146253 -0.843014 253 7.1149 0.289889 -0.843006 252 7.1124 0.345764 -0.843005 252 7.11878 -0.023224 -0.842737 251 7.11881 0.0103229 -0.842737 251 7.1093 0.367996 -0.842731 252 7.1133 -0.224414 -0.842466 252 7.11397 -0.202066 -0.842466 253 7.11484 -0.168539 -0.842465 253 7.11299 0.233858 -0.842459 252 7.10999 0.312054 -0.842457 252 7.11068 0.0549616 -0.841639 253 7.09894 0.41217 -0.841633 253 7.10577 0.211248 -0.841362 252 7.1044 0.0883738 -0.840815 255 7.10409 0.110693 -0.840815 254 7.09099 0.445223 -0.840809 254 7.77954 0.913991 -0.840679 78 7.09776 0.132878 -0.839992 255 7.46915 0.819166 -0.797617 162 7.46672 -0.640231 -0.794967 44 7.44551 0.852171 -0.794942 54 10.1057 1.06306 -0.791495 40 7.43608 -0.602201 -0.79042 90 8.09931 -0.701427 -0.787832 190 7.41226 -0.576748 -0.786942 236 10.0548 1.08978 -0.786768 41 7.38494 0.786763 -0.785849 234 10.0496 1.0254 -0.785588 40 10.0041 1.13212 -0.782239 61 8.02939 0.937772 -0.782168 169 10.0286 -0.79342 -0.781486 40 7.34004 0.758831 -0.77943 240 9.97081 1.16017 -0.779285 82 7.35673 -0.548979 -0.779185 242 7.3454 -0.513289 -0.777312 243 7.32463 0.734052 -0.777023 239 7.33511 -0.489377 -0.775706 243 7.31419 0.69826 -0.775151 242 7.32079 -0.465268 -0.773566 246 7.30056 0.673878 -0.773012 245 7.31628 -0.441887 -0.772763 247 7.29869 0.650595 -0.772477 245 7.31432 -0.407171 -0.772228 236 7.27999 0.510935 -0.768467 239 7.25031 0.612044 -0.765524 230 7.26528 -0.358482 -0.765272 193 7.25818 -0.380972 -0.76447 186 7.26284 -0.278326 -0.764469 248 7.57471 0.875787 -0.763836 65 7.23836 0.58819 -0.763652 229 7.23881 0.531046 -0.763118 207 7.24709 -0.323287 -0.762597 208 7.24609 -0.300428 -0.762329 206 7.22832 0.564565 -0.762047 229 7.24426 -0.243361 -0.761793 250 7.24103 -0.220466 -0.761258 251 7.23971 -0.197651 -0.76099 252 7.24029 -0.174907 -0.76099 252 7.2323 0.382347 -0.76098 249 7.22976 0.427779 -0.760979 250 7.23205 0.348168 -0.760713 249 7.22909 0.404961 -0.760712 248 7.23707 -0.140696 -0.760454 252 7.23781 -0.0952208 -0.760453 251 7.23842 -0.0156332 -0.760452 247 7.23112 0.325365 -0.760446 249 7.2355 -0.117922 -0.760186 250 7.23645 0.00711462 -0.760184 247 7.23228 0.245777 -0.76018 248 7.23147 0.268495 -0.76018 249 7.23013 0.302571 -0.760179 248 7.23422 -0.0610631 -0.759918 249 7.23257 0.166199 -0.759914 249 7.2317 0.200281 -0.759913 249 7.21826 0.484046 -0.759909 224 7.23239 -0.0383193 -0.75965 250 7.23238 0.0412053 -0.759648 253 7.21777 0.461245 -0.759641 226 7.22707 0.22289 -0.759378 248 7.22032 0.0638628 -0.758043 223 7.20729 0.143059 -0.756437 210 7.19978 0.120313 -0.755368 222 7.1963 0.0863519 -0.754833 164 7.37052 0.828007 -0.737074 181 7.37748 -0.589797 -0.735059 112 7.35418 -0.529938 -0.731489 244 7.62093 -0.634338 -0.728299 65 7.31686 -0.550487 -0.726902 192 7.29424 0.795962 -0.726879 150 7.31028 -0.503856 -0.725626 253 7.2904 0.737611 -0.725605 246 7.30787 -0.480641 -0.725116 254 7.57197 0.849698 -0.724844 49 7.28479 0.713903 -0.724586 252 7.27712 0.69004 -0.723312 255 7.29421 -0.445287 -0.723077 255 7.26241 0.757746 -0.722292 225 7.27042 0.654817 -0.722038 255 7.28567 -0.421832 -0.721802 255 9.95356 1.02601 -0.720581 57 7.25861 0.630722 -0.720254 255 9.96947 -0.809996 -0.720242 40 7.27309 -0.398231 -0.720017 255 7.25858 0.607744 -0.72 255 9.94237 1.05641 -0.719837 63 7.2729 -0.363861 -0.719762 255 9.96443 -0.746621 -0.719312 40 7.26806 -0.340753 -0.718997 255 9.91631 1.164 -0.718534 179 9.95211 -0.777173 -0.718383 40 9.912 1.13192 -0.717791 66 7.24357 0.572058 -0.717707 255 7.24928 -0.317122 -0.716447 255 7.23545 0.548514 -0.716433 255 7.24672 -0.282816 -0.715937 255 7.22568 0.49068 -0.714649 255 7.23568 -0.259664 -0.714407 255 7.23448 -0.236873 -0.714152 255 7.21735 0.524274 -0.713884 255 7.2181 0.421821 -0.713121 255 7.21932 -0.213732 -0.712112 255 7.22025 -0.179709 -0.712112 255 7.2074 0.466625 -0.712101 255 7.20685 0.443849 -0.711846 255 7.46209 0.814026 -0.71088 141 7.20021 0.386665 -0.710573 255 7.19346 0.363615 -0.709554 255 7.47151 -0.585941 -0.709434 101 7.19259 0.340914 -0.709299 255 7.19744 -0.133982 -0.709052 255 7.19864 0.0243239 -0.70905 255 7.19213 0.306926 -0.709045 255 7.195 -0.156557 -0.708798 255 7.196 -0.100043 -0.708797 255 7.19628 -0.0774349 -0.708796 255 7.19667 -0.0209129 -0.708795 255 7.19451 -0.0548185 -0.708541 255 7.19426 0.0807989 -0.708539 255 7.19361 0.126001 -0.708538 255 7.19111 0.227685 -0.708536 255 7.1891 0.284153 -0.708535 255 7.19273 0.00168117 -0.708285 255 7.18981 0.205026 -0.708282 255 7.18798 0.261488 -0.708281 255 7.83603 -0.623097 -0.708155 94 7.19059 0.0468575 -0.70803 255 7.18843 0.182381 -0.708027 255 7.18802 0.103292 -0.707774 255 7.18699 0.159747 -0.707773 255 7.39155 0.783095 -0.701816 81 9.24396 0.33241 -0.701325 40 7.40405 -0.557011 -0.700859 97 9.18339 0.402637 -0.695614 40 7.69485 0.86731 -0.694364 75 9.15478 0.372656 -0.692661 43 7.31891 0.752422 -0.692507 108 7.33451 -0.528362 -0.692039 99 7.31514 -0.49225 -0.689344 147 7.31215 -0.445894 -0.688608 235 7.2789 0.713815 -0.687118 144 7.28299 -0.466987 -0.685179 219 7.27049 0.632421 -0.68516 238 7.26332 0.68932 -0.684914 187 7.27983 -0.420852 -0.684443 241 7.26254 0.608778 -0.683935 240 7.2437 0.664582 -0.682219 227 7.26192 -0.385419 -0.681992 245 7.24265 0.584282 -0.681241 243 7.25516 -0.362179 -0.681012 245 7.60617 -0.58155 -0.680858 91 7.21761 0.548142 -0.677812 245 7.22455 -0.337787 -0.677092 248 7.21137 0.524914 -0.676832 247 7.21101 0.502127 -0.676587 247 7.22011 -0.303466 -0.676356 248 7.22103 -0.280782 -0.676356 248 7.22187 -0.258095 -0.676355 248 7.20859 0.479222 -0.676098 245 7.2068 0.445015 -0.675608 247 7.21507 -0.223785 -0.675375 249 7.21574 -0.201117 -0.675375 246 7.20618 0.422261 -0.675364 248 7.21553 -0.121723 -0.675128 248 7.21237 -0.178334 -0.674884 249 7.21289 -0.155675 -0.674884 248 7.20531 0.365467 -0.674875 244 7.20351 0.399415 -0.674874 247 7.20579 0.263436 -0.674387 249 7.20246 0.342656 -0.674385 246 7.5271 0.811917 -0.674068 102 7.20596 -0.0988821 -0.673903 249 7.20587 0.104876 -0.673899 247 7.2005 0.297241 -0.673896 247 7.19953 0.319861 -0.673896 244 7.20425 -0.076215 -0.673657 249 7.20455 0.0369551 -0.673655 249 7.2023 0.184059 -0.673653 247 7.20135 0.217997 -0.673652 246 7.20266 0.00301011 -0.673411 244 7.20056 -0.0422271 -0.673167 247 7.19934 0.138739 -0.673164 246 7.19887 0.161356 -0.673163 245 7.19666 0.240501 -0.673162 246 7.19867 -0.0195929 -0.672921 248 7.19845 0.0595612 -0.67292 248 7.19822 0.0821757 -0.67292 248 7.49586 -0.537987 -0.667559 102 7.44864 0.779505 -0.664503 165 7.43211 -0.510175 -0.659859 129 7.39376 0.750088 -0.657738 92 7.39424 -0.449403 -0.654959 94 7.39006 -0.48412 -0.654726 125 7.37388 0.666142 -0.654473 111 7.38966 -0.425849 -0.654259 97 7.36582 0.688732 -0.653773 94 7.38105 -0.402126 -0.653092 101 7.35261 0.72243 -0.652605 100 7.37604 -0.343801 -0.652157 100 7.37037 -0.378367 -0.651691 100 7.3522 0.640821 -0.651674 110 7.35922 -0.319913 -0.650057 107 7.33139 0.604128 -0.648875 124 7.3291 0.557575 -0.648176 97 7.32137 0.58011 -0.647475 99 7.33637 -0.295915 -0.647257 113 7.31497 0.533335 -0.64631 89 7.31981 -0.260767 -0.645157 118 7.32131 -0.21477 -0.645156 111 7.30902 0.475187 -0.645144 104 7.31464 -0.237598 -0.644457 119 7.30262 0.417166 -0.643979 102 7.30057 0.451574 -0.643978 100 7.29561 0.497295 -0.643744 98 7.30734 -0.134021 -0.643288 107 7.30618 -0.0766113 -0.643054 106 7.29716 0.370842 -0.643046 110 7.30092 -0.15687 -0.642589 110 7.29199 0.393537 -0.642579 104 7.29812 -0.191229 -0.642356 119 7.29191 0.31315 -0.642114 101 7.28891 0.335958 -0.64188 114 7.29382 -0.110902 -0.641655 110 7.28381 0.266928 -0.640948 106 7.28234 0.186706 -0.640483 101 7.27897 0.289637 -0.640481 99 7.74164 -0.576893 -0.640403 69 7.28159 0.129463 -0.640251 105 7.28071 0.0264965 -0.640019 108 7.74355 -0.491472 -0.639964 40 7.27659 -0.053545 -0.639554 110 7.27642 0.0721887 -0.639552 101 7.27463 0.049308 -0.639319 107 7.26911 0.232036 -0.639082 101 7.27082 0.00358267 -0.638853 113 7.26583 0.20907 -0.638616 98 7.26526 0.151949 -0.638384 104 7.2648 -0.0306768 -0.638154 119 7.25416 0.10608 -0.636985 104 7.67439 0.79437 -0.635125 60 7.66695 -0.534748 -0.631863 92 8.08051 0.627269 -0.63171 69 7.60957 0.763736 -0.627682 76 7.62893 -0.507884 -0.627484 117 8.04043 0.547827 -0.626937 75 7.63061 -0.375678 -0.626825 40 8.0347 0.572788 -0.626521 68 8.03286 0.598029 -0.626521 117 7.59553 0.702184 -0.625493 106 7.61213 -0.458676 -0.625294 40 7.58933 0.72568 -0.625055 116 7.6045 -0.338386 -0.623759 40 7.60403 0.175522 -0.623093 40 7.60351 0.0918859 -0.622876 40 7.58444 -0.421047 -0.622009 40 7.58325 0.210867 -0.620903 40 7.98337 0.505965 -0.620709 118 7.98294 0.480758 -0.620502 67 7.58019 0.0202356 -0.62025 56 7.56997 0.067809 -0.619154 65 7.56816 0.0440233 -0.618935 83 7.95062 0.654484 -0.618423 51 7.55198 -0.395336 -0.618286 40 7.9586 0.454112 -0.617803 75 7.55131 0.127026 -0.617183 53 7.54889 0.150714 -0.616963 55 7.80109 0.802407 -0.604303 69 7.81296 -0.550129 -0.603288 78 7.78258 -0.351864 -0.598924 40 7.71651 0.768925 -0.595168 174 7.73208 -0.508107 -0.594567 157 7.74422 -0.264982 -0.594563 40 7.73924 -0.155339 -0.59373 40 7.71974 -0.48299 -0.593113 213 7.69346 0.717741 -0.592263 189 7.7195 -0.288498 -0.592072 40 7.68523 0.741313 -0.59164 194 7.69738 -0.457395 -0.590621 143 7.7043 -0.203191 -0.590202 40 7.69772 0.377736 -0.590192 40 7.69252 0.401695 -0.589776 45 7.68874 -0.311639 -0.588958 40 7.69133 -0.239162 -0.588957 40 7.69098 -0.178711 -0.588748 40 7.68311 -0.00956631 -0.587707 40 7.67683 -0.069875 -0.587085 40 7.67425 -0.118082 -0.586879 40 7.65508 -0.430901 -0.586054 66 7.65624 -0.370679 -0.585845 53 7.66463 -0.0938853 -0.58584 40 7.64524 -0.0336646 -0.583763 40 7.6309 0.314165 -0.582927 40 7.63337 0.0143105 -0.582516 40 7.63076 0.0982084 -0.582307 40 7.61928 -0.393007 -0.582108 93 7.62732 0.0382399 -0.581893 40 7.62308 0.0741318 -0.581477 40 7.61867 0.205772 -0.581268 40 7.60946 0.349143 -0.58085 40 7.6145 0.12187 -0.580646 40 7.61331 0.181675 -0.580645 40 7.61085 0.265374 -0.580644 40 7.60998 0.289282 -0.580643 40 7.59993 0.157421 -0.579192 40 7.56195 0.239714 -0.575454 40 7.93872 0.464099 -0.572941 88 7.91438 0.775417 -0.572936 40 7.93219 0.438743 -0.572154 84 7.9094 0.487412 -0.570184 86 7.85686 -0.529088 -0.565279 70 7.82955 0.519799 -0.562505 84 7.81795 0.543735 -0.56152 46 7.80554 0.629203 -0.560928 42 7.80826 0.567741 -0.560732 45 7.80351 0.604381 -0.560534 45 7.80243 -0.476005 -0.559568 40 7.79692 -0.500247 -0.559175 171 7.80198 -0.279388 -0.55858 40 7.76614 0.736766 -0.557972 158 7.79526 -0.242345 -0.557792 40 7.79399 -0.217791 -0.557595 40 7.79546 -0.156571 -0.557593 40 7.78913 -0.303393 -0.557399 40 7.76247 0.71184 -0.557382 126 7.78616 -0.327772 -0.557203 40 7.78867 -0.193137 -0.557003 40 7.77657 -0.364061 -0.556416 40 7.78465 -0.0829233 -0.556411 40 7.77402 -0.131636 -0.555427 40 7.74697 -0.435797 -0.553857 40 7.74714 -0.0458894 -0.552669 40 7.72538 0.00285476 -0.550502 40 7.71868 -0.106253 -0.549913 40 7.7169 0.196867 -0.549908 40 7.70657 -0.409101 -0.549722 43 7.7139 0.233174 -0.549711 40 7.71064 0.111913 -0.549122 40 7.70737 0.0392306 -0.548729 40 7.70355 0.172351 -0.54853 40 7.70206 0.148119 -0.548334 40 7.69726 0.0633942 -0.547744 40 7.68397 -0.383617 -0.547358 43 7.69105 0.0875266 -0.547153 40 7.68726 0.25663 -0.54715 40 8.07606 0.101427 -0.540487 40 7.9274 -0.249665 -0.526924 40 7.87078 0.780853 -0.524862 121 7.89213 0.458596 -0.524496 92 7.88305 -0.509036 -0.523955 90 7.85411 0.493414 -0.52115 86 7.84582 0.431014 -0.520035 53 7.8406 0.517258 -0.520034 78 7.84162 -0.469409 -0.519865 222 7.84696 -0.272073 -0.51949 40 7.82655 0.627552 -0.519474 84 7.8169 0.738129 -0.519473 212 7.82836 0.57821 -0.519289 77 7.81658 0.602001 -0.51836 101 7.79759 0.686826 -0.517243 56 7.82263 -0.222115 -0.517073 40 7.80716 0.539584 -0.51706 122 7.78548 0.710381 -0.516313 207 7.80977 -0.307756 -0.516145 40 7.80906 -0.111331 -0.515584 40 7.8095 -0.0745302 -0.515583 40 7.80981 -0.0254599 -0.515582 40 7.80622 -0.160361 -0.515399 40 7.79742 0.403625 -0.515389 40 7.80169 -0.184803 -0.515027 40 7.80372 -0.049977 -0.515025 40 7.78738 -0.441799 -0.51466 68 7.77878 -0.416832 -0.513731 54 7.78876 -0.135584 -0.513726 40 7.77338 0.365575 -0.512973 40 7.74719 0.120581 -0.509818 40 7.73912 -0.329559 -0.50964 117 7.73001 0.253917 -0.508514 40 7.73219 0.0109717 -0.508333 40 7.73035 0.168857 -0.50833 40 7.72878 0.229563 -0.508329 40 7.72477 0.338801 -0.508327 40 7.72549 0.205163 -0.507957 40 7.71784 0.314182 -0.507584 40 7.72089 0.144353 -0.507401 40 7.70049 -0.388646 -0.506295 87 7.70287 0.289284 -0.506097 40 7.68234 -0.351511 -0.504436 57 8.07162 0.755377 -0.491982 166 8.04106 -0.475264 -0.487499 204 8.0273 -0.436449 -0.486113 40 8.01964 -0.499222 -0.485767 76 7.98506 0.596012 -0.483323 40 7.95796 0.707307 -0.481761 149 7.96086 0.481251 -0.480552 65 7.95484 0.543628 -0.480378 63 7.96684 -0.269933 -0.480219 40 7.95798 -0.29464 -0.479526 40 7.95278 -0.206887 -0.478832 40 7.92639 0.679517 -0.478817 70 7.95258 -0.119393 -0.478657 40 7.93322 0.567259 -0.478645 90 7.9481 -0.231741 -0.478486 40 7.93711 -0.406244 -0.478142 49 7.9305 0.454514 -0.477781 66 7.92748 0.504338 -0.47778 111 7.92351 -0.18112 -0.476233 40 7.91193 0.391204 -0.475876 40 7.91954 -0.031697 -0.47571 40 7.89276 0.62683 -0.475526 42 7.91307 -0.0938054 -0.475191 40 7.91163 -0.00678355 -0.475017 40 7.90836 0.142312 -0.474841 40 7.90635 -0.143395 -0.474673 40 7.90535 -0.0688496 -0.474498 40 7.89321 0.365489 -0.474144 40 7.89073 0.216455 -0.473454 40 7.88179 -0.353586 -0.473117 66 7.87617 0.426762 -0.47293 40 7.87593 0.302785 -0.472412 40 7.87568 0.253235 -0.47224 40 7.87757 0.0552287 -0.47207 40 7.87344 0.191288 -0.471895 40 7.87176 0.0181116 -0.471551 40 7.87138 0.0799357 -0.47155 40 7.86346 -0.315576 -0.471384 75 7.86489 0.277658 -0.471373 40 7.86047 0.33934 -0.471199 40 7.86312 0.104585 -0.470857 40 7.84283 -0.376406 -0.469826 81 7.84213 0.165983 -0.469123 40 8.16162 -0.47117 -0.454876 67 8.14849 -0.419111 -0.453573 40 8.09263 -0.378195 -0.448853 40 8.08741 -0.44164 -0.448692 159 8.07224 0.638747 -0.44851 40 8.06075 0.727095 -0.448183 137 8.06228 0.612439 -0.447534 40 8.07167 -0.174192 -0.446571 40 8.07155 -0.00934328 -0.446406 40 8.06607 -0.237477 -0.446247 40 8.04917 0.573256 -0.446233 40 8.04298 0.547398 -0.445582 40 8.05133 -0.262407 -0.445108 40 8.04685 -0.211676 -0.444619 40 8.0356 -0.0346626 -0.443477 40 8.01719 0.482319 -0.443142 40 8.01085 0.519823 -0.442816 40 8.0127 0.45677 -0.442654 40 8.0161 -0.349633 -0.442506 40 8.02349 -0.0598569 -0.442501 40 8.01281 -0.122751 -0.441688 40 8.0129 0.116414 -0.441684 40 8.01116 -0.0975595 -0.441525 40 8.00946 0.191874 -0.44152 40 8.00971 0.0282742 -0.44136 40 7.99618 0.430572 -0.44119 40 8.00441 -0.147803 -0.441038 40 7.99948 0.317403 -0.441029 40 7.99941 0.0784703 -0.440545 40 7.99651 0.229235 -0.440543 40 7.99563 0.0532992 -0.44022 40 7.98212 0.166039 -0.439242 40 7.97898 0.278865 -0.43924 40 7.97532 -0.322891 -0.439088 43 7.98061 0.14092 -0.43908 40 7.96634 -0.297495 -0.438274 44 7.96387 0.253238 -0.437938 40 8.67616 -0.48454 -0.427122 194 8.22556 -0.432105 -0.393822 69 8.22352 -0.393133 -0.393528 90 8.1967 0.704611 -0.393069 63 8.21276 -0.366726 -0.392647 85 8.186 0.664893 -0.392043 73 8.20391 -0.340475 -0.391913 43 8.1801 0.638574 -0.391457 87 8.15501 0.572309 -0.389258 101 8.15446 0.520815 -0.388965 118 8.14824 0.610444 -0.388963 131 8.16404 -0.223129 -0.388684 117 8.15284 0.482161 -0.388672 122 8.1488 0.546175 -0.388671 115 8.15703 -0.184442 -0.388097 116 8.15005 -0.133034 -0.387509 116 8.1511 0.0206096 -0.387506 110 8.14902 -0.0433966 -0.387361 108 8.14701 0.0462057 -0.387213 123 8.1446 -0.0945397 -0.387068 113 8.13241 0.455391 -0.387059 112 8.14161 -0.158455 -0.386923 115 8.14087 -0.0689031 -0.386774 112 8.13405 0.340223 -0.386768 118 8.12981 0.429635 -0.386766 115 8.12515 0.403816 -0.386326 108 8.13073 0.199458 -0.386183 109 8.13007 0.225 -0.386183 112 8.12522 -0.311392 -0.386045 42 8.12959 0.16111 -0.386037 104 8.1265 0.276018 -0.386035 114 8.12533 0.250432 -0.385889 115 8.12718 -0.0176752 -0.385747 107 8.12112 0.31417 -0.385741 118 8.11899 0.365192 -0.38574 106 8.12246 0.10994 -0.385451 110 8.1209 0.071653 -0.385305 118 8.11809 0.135409 -0.385157 108 8.07278 -0.271117 -0.382084 50 8.4654 -0.385047 -0.363865 110 8.44361 0.718793 -0.363846 93 8.45617 -0.411275 -0.363323 72 8.42412 -0.264033 -0.360746 151 8.39016 0.687529 -0.360053 123 8.39131 0.647826 -0.359918 97 8.40077 -0.355864 -0.359393 109 8.38042 -0.315517 -0.357902 105 8.3674 -0.288751 -0.356953 110 8.34755 0.617932 -0.356802 120 8.35177 0.105423 -0.355591 168 8.33224 0.550969 -0.355448 130 8.32557 0.589935 -0.355177 121 8.31999 0.523869 -0.3545 103 8.31761 0.497475 -0.35423 95 8.30751 -0.130182 -0.352614 117 8.29523 0.469914 -0.352604 126 8.30617 -0.0779685 -0.352478 93 8.29536 0.430711 -0.352469 95 8.30082 -0.169228 -0.352209 99 8.3019 -0.104028 -0.352207 112 8.29824 0.19586 -0.352067 99 8.29846 0.0393964 -0.351934 98 8.29818 0.0785073 -0.351933 104 8.2887 0.404236 -0.351928 118 8.2964 -0.0518438 -0.3518 100 8.29086 0.247799 -0.351659 94 8.29057 -0.0127551 -0.351393 103 8.28166 0.338681 -0.351251 120 8.27997 0.377702 -0.351251 112 8.28086 0.169363 -0.350848 113 8.27564 0.286341 -0.35071 129 8.2747 0.312337 -0.35071 120 8.27631 -0.194815 -0.350583 50 8.27859 0.0132325 -0.350579 121 8.27564 0.221272 -0.350576 130 8.2218 -0.219546 -0.346925 52 8.61309 0.689507 -0.326807 63 8.60032 0.620599 -0.32569 167 8.60169 -0.393992 -0.324961 66 8.58804 -0.339259 -0.323966 127 8.56146 0.658475 -0.323452 57 8.57358 -0.298181 -0.322971 120 8.55453 -0.270553 -0.321728 98 8.52654 0.588581 -0.320967 89 8.49647 0.55979 -0.318979 116 8.50346 -0.242037 -0.318496 149 8.47961 0.43846 -0.31749 120 8.47427 0.531665 -0.317488 124 8.48565 -0.148119 -0.317252 67 8.48223 -0.2147 -0.317129 120 8.46473 0.49107 -0.316743 114 8.45825 0.464063 -0.316247 115 8.46085 0.370949 -0.316124 118 8.45366 0.397264 -0.315751 115 8.44954 0.304027 -0.315255 121 8.44601 0.343768 -0.31513 115 8.44446 0.277303 -0.314883 121 8.44205 0.224145 -0.314635 103 8.44278 0.0649719 -0.314514 100 8.44253 0.0915021 -0.314513 102 8.44156 0.157803 -0.314512 117 8.44095 0.0384461 -0.31439 101 8.43133 0.250398 -0.314013 126 8.42904 0.184096 -0.313766 124 8.42404 0.131059 -0.313394 108 8.41908 -0.00125815 -0.313024 76 8.39308 -0.0275448 -0.311408 52 8.38696 -0.053854 -0.311036 61 8.35635 -0.119203 -0.309173 54 8.34683 -0.0796956 -0.308551 93 8.29956 -0.170385 -0.305694 67 9.09493 0.598247 -0.30234 174 8.83175 0.552312 -0.287391 84 8.78797 0.480174 -0.284695 168 8.78146 0.452131 -0.284245 100 8.7648 0.382222 -0.283123 136 8.75925 -0.182454 -0.282458 201 8.75093 0.422905 -0.282447 128 8.74508 0.326254 -0.281887 120 8.74475 -0.0860214 -0.281557 171 8.73204 0.353205 -0.281212 112 8.73467 -0.209468 -0.28111 174 8.7357 0.161066 -0.281103 152 8.73416 0.229671 -0.281102 131 8.73255 0.284546 -0.281101 126 8.73445 -0.113394 -0.280996 158 8.73285 0.20218 -0.28099 153 8.7276 -0.250474 -0.280773 154 8.731 -0.0584963 -0.28077 174 8.72919 0.0100704 -0.280656 167 8.72542 0.256849 -0.280652 139 8.72718 -0.0173555 -0.280544 170 8.71187 0.516986 -0.280535 66 8.72512 0.0374703 -0.280431 175 8.70681 -0.277315 -0.27965 107 8.705 0.0646714 -0.279306 173 8.67097 -0.330824 -0.27774 57 8.65682 0.595495 -0.277724 72 8.65392 0.636284 -0.277723 55 8.66333 -0.371443 -0.277403 46 8.57282 0.103695 -0.271887 54 9.35203 0.452026 -0.263904 255 9.34143 0.422137 -0.263297 68 9.33021 -0.120887 -0.262295 224 9.26212 0.623077 -0.259854 60 8.98899 0.209284 -0.245091 255 8.92897 -0.212791 -0.242063 255 8.7155 -0.0701352 -0.231134 249 8.63761 0.460281 -0.227786 255 8.60356 0.0797631 -0.225466 255 8.5758 0.0526464 -0.22405 255 8.56044 -0.162576 -0.223346 208 8.54238 0.482404 -0.223031 255 8.55274 0.146628 -0.222935 110 8.51387 0.266507 -0.221112 255 8.4907 0.239157 -0.219899 255 8.32628 -0.0135257 -0.211405 89 8.3182 -0.0396207 -0.211001 101 8.96232 0.709059 -0.193979 219 8.95805 0.737041 -0.193889 79 8.92068 0.677438 -0.192005 255 8.92707 -0.361292 -0.191485 255 8.92668 -0.319155 -0.191394 255 8.91965 -0.290872 -0.191035 179 8.81717 0.641415 -0.187248 78 8.69559 -0.22954 -0.18089 139 8.69458 -0.188523 -0.1808 171 8.68284 -0.256539 -0.180352 113 8.6856 -0.133765 -0.18035 218 8.67353 0.439029 -0.18025 150 8.68114 -0.16099 -0.180171 224 8.66419 0.534114 -0.180069 104 8.66047 0.561196 -0.179979 127 8.65468 0.588118 -0.179799 145 8.66014 0.465596 -0.179711 157 8.65464 0.492562 -0.179531 147 8.54248 0.27068 -0.17406 255 8.52013 0.336914 -0.173161 255 8.49209 0.215524 -0.171727 255 8.48322 0.308649 -0.171456 255 8.47645 0.0818785 -0.170921 255 8.47554 0.14845 -0.17092 255 8.46796 0.388002 -0.170916 85 8.47466 0.0552292 -0.170832 255 8.47304 0.175029 -0.17083 255 8.44344 0.240687 -0.169572 255 8.43321 0.359753 -0.169301 255 8.40605 0.120602 -0.167779 255 8.36871 -0.0641002 -0.166077 237 8.36691 0.0279088 -0.165985 66 8.3409 -0.0377691 -0.16482 84 8.323 0.00147761 -0.164011 142 9.4233 -0.0848566 -0.153823 183 9.29431 -0.419441 -0.149206 222 9.07161 -0.280322 -0.140421 77 8.95104 0.695335 -0.13663 181 8.93222 -0.373971 -0.135184 74 8.90775 0.0751215 -0.133944 255 8.88876 0.242616 -0.133325 248 8.8804 0.172635 -0.132941 240 8.87796 0.0470667 -0.132789 100 8.87582 0.200453 -0.132786 254 8.87349 0.102814 -0.132634 140 8.83094 0.144069 -0.131015 88 8.32837 -0.045816 -0.111604 76 9.3024 0.050032 -0.0910339 255 8.89663 0.270407 -0.0780713 103 8.7805 0.0733489 -0.0742065 243 8.64169 0.234739 -0.0698196 69 8.48625 0.110016 -0.0647285 96 8.47587 0.136483 -0.0644057 100 8.46454 0.202782 -0.0640822 119 8.45341 0.162618 -0.063696 147 8.88509 0.261254 -0.0322704 255 8.87623 0.219166 -0.0320002 255 8.85089 0.190789 -0.0312963 255 8.83545 0.162736 -0.0308633 255 8.83246 0.0933066 -0.0307562 255 8.82013 0.120928 -0.0304306 255 8.77273 0.0652906 -0.0291312 255 9.00441 0.138788 0.0244677 255 8.99081 0.110287 0.0247527 255 8.98356 0.265484 0.024837 255 8.89742 0.192761 0.0266302 255 8.89598 0.164766 0.0266705 255 8.89441 0.234626 0.0266718 255 8.88726 0.0668308 0.0268727 255 8.94953 0.186224 0.0669561 98 8.93272 0.115747 0.067238 86 8.88009 0.157073 0.068057 253 9.02513 0.122854 0.125087 97 9.00761 0.0801101 0.12525 107 8.9927 0.150578 0.125379 122 8.97619 0.178465 0.125525 255 8.96052 0.248529 0.125654 86 8.9296 0.205472 0.125945 188 9.02193 0.0725321 0.182198 96 8.90909 0.141934 0.182505 232 8.9026 0.169824 0.182522 239 8.9017 0.211772 0.182523 131 7.18797 -0.0611394 0.187212 58 7.29142 0.881684 0.23021 40 7.29258 0.905092 0.230223 40 7.30358 0.929821 0.230269 40 7.72685 -0.161211 0.231435 255 7.75967 -0.210563 0.231544 255 7.79629 -0.186928 0.231661 255 8.88866 0.181539 0.235198 255 8.89005 0.209519 0.235205 163 8.93532 0.238808 0.235355 80 8.96141 0.140995 0.235431 248 8.9998 0.113431 0.235553 93 9.03211 0.0855537 0.235656 182 +unknow 0.97267 1 0 542 -1.53995 -20.1705 -1.43949 130 -1.4439 -20.1636 -1.43835 149 -2.03719 -20.0341 -1.432 133 -2.09704 -19.9979 -1.42956 131 -2.15901 -19.9833 -1.42891 140 -2.25205 -19.963 -1.4281 141 -2.6799 -19.8296 -1.42159 150 -2.73705 -19.7836 -1.41849 143 -2.7978 -19.765 -1.41768 139 -2.85932 -19.7522 -1.41735 136 -2.94973 -19.7207 -1.41589 136 -2.29613 -19.7934 -1.41475 128 -3.00749 -19.6838 -1.41361 139 -3.06688 -19.6585 -1.41231 142 -3.15791 -19.634 -1.41149 142 -3.21766 -19.6121 -1.41051 138 -3.2786 -19.598 -1.41019 142 -2.56679 -19.6898 -1.40905 138 -3.3365 -19.566 -1.4084 142 -3.48694 -19.5215 -1.40693 135 -3.4232 -19.5186 -1.40579 140 -3.54258 -19.4791 -1.40433 131 -3.63216 -19.4504 -1.40335 139 -2.33964 -19.6277 -1.40172 128 -3.68955 -19.4193 -1.40172 138 -2.49322 -19.6048 -1.4014 130 -3.74941 -19.4017 -1.40123 136 -2.42968 -19.5967 -1.4001 121 -3.83734 -19.3663 -1.39977 139 -3.95695 -19.332 -1.39895 139 -3.89503 -19.3385 -1.39847 138 -4.01283 -19.296 -1.397 141 -4.10207 -19.2691 -1.39635 142 -4.15672 -19.2289 -1.39407 138 -3.67108 -21.2988 -1.37811 185 -3.73797 -21.2871 -1.37811 185 -3.83503 -21.2516 -1.37679 183 -3.90105 -21.2355 -1.37649 194 -3.96443 -21.2055 -1.37517 191 -4.1274 -21.1561 -1.37385 192 -4.0594 -21.1612 -1.37326 191 -4.18915 -21.1196 -1.37209 191 -4.28583 -21.0859 -1.37106 191 -4.41782 -21.0566 -1.37092 186 -4.35003 -21.0626 -1.37033 186 -4.47852 -21.0173 -1.36901 186 -4.57494 -20.9843 -1.36813 185 -4.70275 -20.9376 -1.36681 185 -4.63565 -20.9464 -1.36637 184 -4.79463 -20.8861 -1.3646 181 -4.85477 -20.8476 -1.36284 181 -4.91886 -20.8264 -1.3624 181 -4.98053 -20.7953 -1.36123 182 -5.07608 -20.762 -1.36049 181 -5.13164 -20.7072 -1.35756 173 -5.67743 -20.4194 -1.34728 177 -5.61166 -20.4313 -1.34684 169 -5.76868 -20.3751 -1.34596 175 -5.88376 -20.2944 -1.34259 167 -5.81887 -20.309 -1.34229 218 -5.97026 -20.2359 -1.34024 183 -6.03266 -20.2132 -1.33994 176 -5.30561 -19.5617 -1.27919 184 -5.23843 -19.5571 -1.27758 163 -5.14417 -19.5739 -1.27699 204 -5.07711 -19.5687 -1.27538 185 -5.01163 -19.5691 -1.2742 158 -4.91204 -19.5635 -1.272 243 -5.14836 -21.0432 -1.26004 86 -2.94598 -19.6802 -1.25205 143 -2.88209 -19.6755 -1.25102 147 -2.81627 -19.6568 -1.24897 144 -2.43757 -19.6451 -1.24442 255 -2.7145 -19.6047 -1.24413 146 -2.37246 -19.6249 -1.24236 159 -2.5852 -19.5759 -1.24075 220 -2.30773 -19.6065 -1.24046 209 -2.02887 -19.6233 -1.23943 255 -2.14926 -19.5844 -1.23752 149 -2.20897 -19.5617 -1.23635 226 -1.50484 -20.4352 -1.18034 94 -5.38319 -19.5805 -1.16787 98 -5.10235 -19.6411 -1.16692 88 -5.31592 -19.5761 -1.16637 130 -5.25234 -19.585 -1.16583 151 -5.15797 -19.6018 -1.16529 196 -5.02829 -19.6087 -1.16353 248 -4.70949 -19.6425 -1.16055 140 -4.92422 -19.5857 -1.16028 141 -4.86075 -19.5933 -1.15973 149 -4.64365 -19.6397 -1.15933 169 -4.57562 -19.627 -1.15743 192 -4.51171 -19.6316 -1.15675 203 -4.41262 -19.6234 -1.15472 199 -4.3458 -19.6138 -1.15309 203 -4.28036 -19.6098 -1.15187 200 -1.53703 -20.0066 -1.15147 168 -4.18335 -19.6083 -1.15038 204 -4.11928 -19.6096 -1.14957 208 -2.12958 -19.9161 -1.14903 107 -4.05484 -19.6088 -1.14862 206 -3.9569 -19.6003 -1.14672 213 -3.67687 -19.6405 -1.14578 255 -3.61407 -19.6461 -1.14537 255 -3.89144 -19.593 -1.14537 231 -3.54916 -19.6396 -1.14415 255 -3.82607 -19.5856 -1.14401 250 -3.76265 -19.5877 -1.14334 255 -2.73944 -19.7326 -1.14171 90 -3.44491 -19.5893 -1.13954 255 -3.38268 -19.5961 -1.13927 245 -3.32044 -19.6027 -1.139 235 -3.16417 -19.6144 -1.13805 235 -3.25624 -19.5973 -1.13791 226 -3.09976 -19.6065 -1.13683 244 -3.03633 -19.6043 -1.13602 244 -2.94303 -19.6125 -1.13561 246 -2.88054 -19.6157 -1.1352 249 -2.54043 -19.6566 -1.1348 255 -2.81721 -19.6128 -1.13439 235 -2.65804 -19.5967 -1.13182 97 -2.44192 -19.6208 -1.13154 213 -2.59569 -19.5991 -1.13141 245 -2.37884 -19.6165 -1.13073 121 -2.00788 -19.6499 -1.13019 255 -1.94594 -19.6541 -1.13005 255 -2.31582 -19.612 -1.12992 220 -2.15675 -19.5839 -1.1268 93 -2.2156 -19.5533 -1.12517 248 -5.64213 -19.6208 -1.06049 148 -5.50573 -19.6098 -1.05751 194 -5.56238 -19.5751 -1.05639 209 -4.99985 -19.6974 -1.05465 140 -5.27468 -19.6132 -1.0539 160 -1.50563 -20.2482 -1.05353 121 -5.38981 -19.5508 -1.05204 114 -5.32626 -19.56 -1.05154 201 -5.10379 -19.5903 -1.0498 195 -5.19605 -19.5661 -1.0498 255 -5.03472 -19.5773 -1.04793 173 -4.81533 -19.6159 -1.04694 101 -4.86143 -19.5388 -1.04296 153 -4.73384 -19.5495 -1.04172 255 -4.6375 -19.5541 -1.0406 255 -4.3593 -19.6119 -1.04023 255 -4.57193 -19.5511 -1.03948 255 -4.29294 -19.604 -1.03886 255 -4.50598 -19.5459 -1.03824 255 -4.4401 -19.5405 -1.03699 255 -4.22328 -19.5804 -1.0365 255 -4.12931 -19.5922 -1.036 255 -4.06651 -19.5993 -1.03563 255 -1.57752 -19.9484 -1.03526 222 -4.0013 -19.5943 -1.03451 255 -3.90657 -19.6012 -1.03376 255 -3.84342 -19.6056 -1.03327 255 -2.13457 -19.8383 -1.03165 110 -3.77496 -19.5823 -1.03103 255 -2.78291 -19.7235 -1.02954 186 -3.70781 -19.5646 -1.02916 255 -3.61338 -19.5701 -1.02842 255 -3.48823 -19.5806 -1.02767 255 -3.54973 -19.5696 -1.02767 255 -3.39524 -19.5929 -1.02742 255 -3.27173 -19.6119 -1.0273 255 -3.33333 -19.6015 -1.0273 255 -3.17799 -19.6192 -1.0268 255 -2.989 -19.6227 -1.02518 255 -3.04878 -19.6013 -1.02444 255 -2.89444 -19.6227 -1.02431 255 -2.83048 -19.6159 -1.02332 255 -3.10529 -19.5601 -1.02245 255 -2.54926 -19.6262 -1.02158 123 -2.4815 -19.5866 -1.0186 175 -2.60319 -19.5608 -1.01797 170 -2.66409 -19.5485 -1.01772 87 -2.38722 -19.5823 -1.0176 157 -1.95584 -19.628 -1.01748 255 -2.0481 -19.6166 -1.01735 255 -2.32379 -19.5738 -1.01661 155 -2.16509 -19.5478 -1.01387 111 -2.25417 -19.5116 -1.01225 254 -5.92005 -19.7753 -0.951816 102 -5.83589 -19.7191 -0.94743 210 -1.45388 -20.451 -0.943952 250 -5.75605 -19.676 -0.943832 236 -5.65228 -19.6645 -0.941583 242 -5.5807 -19.6476 -0.939559 245 -4.86595 -19.8305 -0.939225 131 -5.42146 -19.6734 -0.938548 164 -5.5125 -19.6419 -0.93821 217 -5.20228 -19.7222 -0.937986 159 -5.3471 -19.6441 -0.935849 116 -5.27814 -19.6338 -0.934274 236 -5.06095 -19.6868 -0.934051 125 -5.11876 -19.6553 -0.933151 159 -4.98002 -19.6271 -0.929665 185 -1.49836 -20.1755 -0.928657 130 -4.88172 -19.6271 -0.928316 142 -4.75036 -19.6244 -0.926404 255 -4.65417 -19.631 -0.925505 255 -4.58795 -19.6261 -0.92438 255 -4.52136 -19.619 -0.923143 255 -4.45839 -19.6272 -0.922806 255 -4.36154 -19.6285 -0.921682 255 -2.71233 -19.9094 -0.920897 180 -4.29688 -19.6285 -0.920895 253 -4.23143 -19.6243 -0.919883 254 -2.20854 -19.9474 -0.919548 118 -4.13768 -19.6381 -0.919546 255 -4.07072 -19.6256 -0.918084 255 -4.00627 -19.6246 -0.917297 255 -3.91181 -19.6335 -0.916735 255 -3.84668 -19.628 -0.915723 255 -3.78312 -19.6302 -0.91516 255 -3.71884 -19.6283 -0.914373 255 -3.62343 -19.6299 -0.913474 255 -3.55891 -19.6254 -0.912574 255 -3.49584 -19.6286 -0.912124 255 -3.40162 -19.6351 -0.911562 255 -3.33925 -19.6417 -0.911337 255 -3.27427 -19.6324 -0.910213 255 -3.18077 -19.6417 -0.909876 255 -3.1175 -19.6417 -0.909313 255 -3.05334 -19.6356 -0.908414 255 -2.98955 -19.6313 -0.907626 255 -2.89643 -19.6412 -0.907402 255 -2.8316 -19.6285 -0.906165 255 -2.05819 -19.7186 -0.905827 255 -2.76661 -19.6136 -0.904815 255 -2.61065 -19.6208 -0.904028 133 -1.90004 -19.7003 -0.903915 151 -2.45574 -19.6348 -0.903691 159 -2.11528 -19.6663 -0.903241 255 -2.54696 -19.6131 -0.903128 104 -1.96036 -19.6784 -0.903016 255 -2.39117 -19.6186 -0.902341 142 -2.26786 -19.6332 -0.902341 109 -2.32883 -19.6201 -0.902004 113 -5.94804 -19.7504 -0.834962 93 -5.85677 -19.6714 -0.829799 237 -1.48604 -20.4328 -0.827884 82 -5.77908 -19.636 -0.826965 253 -5.40742 -19.7395 -0.826866 191 -5.70336 -19.6062 -0.824435 247 -5.59987 -19.5944 -0.822411 255 -5.52684 -19.5716 -0.820285 255 -5.45939 -19.5677 -0.819172 255 -5.2982 -19.583 -0.817756 153 -5.22578 -19.559 -0.81563 136 -4.94679 -19.6232 -0.815226 104 -5.12846 -19.5641 -0.814618 130 -4.848 -19.6211 -0.813911 241 -5.06144 -19.5588 -0.813505 129 -4.99699 -19.563 -0.812898 164 -1.55895 -20.1289 -0.812801 146 -4.7754 -19.5916 -0.811583 255 -4.71101 -19.5948 -0.810976 255 -4.61816 -19.6149 -0.810875 255 -4.55379 -19.6176 -0.810268 255 -4.4899 -19.6221 -0.809762 255 -4.3908 -19.6138 -0.808244 255 -2.55577 -19.928 -0.807842 197 -4.32656 -19.6158 -0.807636 255 -4.25851 -19.6 -0.806118 255 -4.19019 -19.5821 -0.804499 255 -4.09663 -19.5957 -0.804195 255 -3.96944 -19.6015 -0.803183 255 -2.32523 -19.8597 -0.802983 158 -2.38689 -19.8464 -0.802679 126 -3.87469 -19.6082 -0.802576 255 -3.81076 -19.6086 -0.801969 255 -4.02249 -19.5479 -0.801057 255 -3.74537 -19.6008 -0.800957 255 -3.68117 -19.5987 -0.800248 255 -2.44255 -19.7853 -0.799946 128 -3.58443 -19.5923 -0.799034 255 -3.51859 -19.5799 -0.797819 255 -3.45461 -19.5771 -0.79711 255 -3.3613 -19.5872 -0.796807 255 -3.29841 -19.5898 -0.796402 255 -3.23652 -19.5981 -0.796301 255 -3.14318 -19.6072 -0.795998 255 -3.08 -19.6071 -0.795491 255 -3.01716 -19.6088 -0.795086 255 -2.58419 -19.6625 -0.794682 130 -2.95374 -19.6064 -0.794479 255 -2.7971 -19.6112 -0.793568 255 -2.85841 -19.6003 -0.793467 255 -2.73464 -19.6139 -0.793265 255 -2.01819 -19.6403 -0.790228 255 -2.0786 -19.6219 -0.78962 255 -2.13958 -19.6094 -0.789317 255 -2.23173 -19.5971 -0.789215 255 -2.63115 -19.5454 -0.789114 255 -5.2957 -19.8836 -0.715078 172 -5.20144 -19.9064 -0.714989 171 -5.85231 -19.7144 -0.714537 212 -5.1215 -19.8549 -0.711845 171 -5.77187 -19.6694 -0.711573 235 -5.69342 -19.6299 -0.708878 242 -5.59213 -19.6257 -0.707442 254 -1.55836 -20.3252 -0.706461 133 -5.30429 -19.6662 -0.705737 206 -5.51913 -19.6028 -0.705556 255 -5.44952 -19.5912 -0.704209 255 -5.35138 -19.5954 -0.703221 255 -4.93561 -19.6424 -0.700528 255 -4.99534 -19.6191 -0.700169 255 -4.83539 -19.6344 -0.699092 255 -4.76899 -19.6301 -0.698194 255 -4.70683 -19.643 -0.698104 255 -4.59697 -19.5911 -0.694691 255 -4.52958 -19.5801 -0.693524 255 -4.2519 -19.6402 -0.693435 255 -4.46627 -19.5864 -0.693165 255 -4.18687 -19.6378 -0.692716 255 -4.3683 -19.5819 -0.691998 255 -4.09023 -19.6378 -0.691819 255 -4.30207 -19.5741 -0.69101 255 -4.02254 -19.6212 -0.690471 255 -3.95656 -19.6122 -0.689484 255 -3.86333 -19.6267 -0.689304 255 -3.79825 -19.6211 -0.688496 255 -3.73548 -19.627 -0.688227 255 -3.64114 -19.6346 -0.687778 255 -3.57837 -19.64 -0.687508 255 -1.93221 -19.8636 -0.68724 123 -3.51526 -19.6433 -0.687149 255 -3.45044 -19.6365 -0.686341 255 -3.35653 -19.6447 -0.685982 255 -3.29119 -19.6334 -0.684994 255 -3.22789 -19.6338 -0.684545 255 -3.07083 -19.6408 -0.683737 255 -3.13127 -19.6232 -0.683377 255 -3.00552 -19.6266 -0.682659 255 -2.94237 -19.6261 -0.68221 255 -2.84928 -19.6358 -0.68203 255 -2.78174 -19.6031 -0.680144 255 -2.00958 -19.6932 -0.679964 255 -2.71878 -19.6019 -0.679695 255 -2.62481 -19.6026 -0.679156 255 -2.56219 -19.6028 -0.678797 255 -2.50009 -19.6068 -0.678617 255 -2.12923 -19.6425 -0.678258 255 -2.06751 -19.6491 -0.678258 249 -2.40574 -19.6025 -0.677899 255 -2.22066 -19.6223 -0.677809 255 -2.28184 -19.6112 -0.677629 255 -2.34321 -19.602 -0.677539 255 -5.89268 -19.7386 -0.585165 120 -5.79826 -19.6478 -0.580771 183 -5.71965 -19.6084 -0.578458 198 -5.61556 -19.5948 -0.57684 213 -5.54304 -19.5739 -0.575298 226 -5.4734 -19.5624 -0.574142 223 -5.37371 -19.561 -0.573063 230 -5.30329 -19.545 -0.571753 233 -5.23874 -19.55 -0.57129 239 -5.1389 -19.5455 -0.570134 239 -5.07243 -19.5422 -0.569364 243 -5.00851 -19.5483 -0.568978 248 -4.94264 -19.5466 -0.568285 253 -4.84709 -19.5561 -0.567745 255 -4.77847 -19.5421 -0.566589 253 -4.7147 -19.5473 -0.566204 255 -4.61838 -19.5518 -0.56551 252 -4.55329 -19.5506 -0.564894 255 -4.4878 -19.5473 -0.5642 253 -4.39079 -19.5468 -0.563352 253 -4.32675 -19.5488 -0.56289 250 -4.2606 -19.5408 -0.562042 245 -4.1975 -19.5463 -0.561734 245 -4.10245 -19.5522 -0.561194 242 -4.03816 -19.5513 -0.560655 243 -3.97191 -19.5403 -0.55973 243 -3.87822 -19.551 -0.559422 242 -3.8137 -19.5474 -0.558805 218 -3.74696 -19.5318 -0.557726 225 -3.53055 -19.564 -0.557418 255 -3.59199 -19.5528 -0.557418 238 -3.68297 -19.5298 -0.557186 255 -3.46591 -19.5573 -0.556724 255 -3.37302 -19.5694 -0.55657 255 -1.95023 -19.75 -0.556108 113 -3.3085 -19.5622 -0.555876 255 -3.24538 -19.5627 -0.555491 255 -3.15188 -19.5698 -0.555183 255 -3.08944 -19.5737 -0.554951 255 -3.02578 -19.5695 -0.554412 255 -2.03786 -19.6889 -0.554103 193 -2.96247 -19.5671 -0.553949 241 -2.16065 -19.6677 -0.553795 184 -2.86847 -19.5689 -0.553487 218 -2.09799 -19.6665 -0.553487 216 -2.25215 -19.6474 -0.55341 212 -2.8067 -19.5759 -0.55341 204 -2.74462 -19.5806 -0.553255 209 -2.37483 -19.6269 -0.553178 204 -2.31268 -19.6303 -0.553024 209 -2.52838 -19.6037 -0.553024 196 -2.58969 -19.5937 -0.552947 202 -2.43548 -19.6114 -0.55287 194 -2.65015 -19.5775 -0.552639 204 -2.1381 -20.6764 -0.461978 75 -5.92284 -19.8499 -0.459647 79 -5.84468 -19.8147 -0.45784 131 -2.18943 -20.5403 -0.457784 128 -5.74396 -19.7005 -0.453388 83 -2.23024 -20.3148 -0.450686 131 -5.55329 -19.618 -0.44913 134 -5.4852 -19.6123 -0.448356 245 -5.38692 -19.6167 -0.447646 251 -2.31132 -20.1749 -0.446491 133 -5.31329 -19.5891 -0.446163 250 -5.24915 -19.596 -0.44584 249 -5.15068 -19.5974 -0.445066 243 -5.08409 -19.5941 -0.444421 225 -5.01905 -19.5964 -0.44397 230 -4.95357 -19.5966 -0.443454 241 -2.36313 -20.0683 -0.443265 137 -4.85782 -19.6061 -0.443002 247 -4.72847 -19.611 -0.442164 241 -4.78911 -19.5921 -0.442035 241 -4.63052 -19.6097 -0.44139 247 -4.56439 -19.6047 -0.440745 250 -4.49922 -19.6033 -0.440229 252 -4.40243 -19.6048 -0.439584 250 -2.41215 -19.9437 -0.439458 106 -4.33825 -19.6068 -0.439197 251 -4.27155 -19.5969 -0.438423 250 -4.20663 -19.5946 -0.437907 247 -4.11261 -19.6064 -0.437649 240 -4.04939 -19.6113 -0.437391 237 -3.33507 -19.7251 -0.436747 185 -3.9838 -19.6044 -0.436746 236 -3.88906 -19.6112 -0.436359 223 -3.82553 -19.6135 -0.436036 229 -3.7624 -19.6175 -0.435778 224 -3.66918 -19.6311 -0.435649 221 -3.60641 -19.6366 -0.435456 211 -2.45823 -19.8011 -0.43507 105 -3.54259 -19.6361 -0.435069 200 -3.47742 -19.6274 -0.434424 185 -3.38354 -19.6357 -0.434166 169 -3.25394 -19.6191 -0.43294 68 -2.60433 -19.7098 -0.432747 186 -2.5424 -19.7179 -0.432747 177 -2.75823 -19.6828 -0.432553 230 -2.66385 -19.6837 -0.432166 228 -3.07534 -19.488 -0.427842 217 -3.00593 -19.4442 -0.4261 40 -3.83475 -21.113 -0.373498 47 -3.89558 -21.0713 -0.372685 47 -5.77696 -19.7283 -0.349029 193 -5.66561 -19.6919 -0.347239 232 -5.58943 -19.6596 -0.345829 233 -5.51841 -19.6444 -0.344907 235 -5.44861 -19.6328 -0.344094 230 -5.34917 -19.6331 -0.343389 233 -5.28172 -19.6286 -0.342793 230 -5.21436 -19.6239 -0.342197 228 -5.11574 -19.625 -0.341546 232 -5.05056 -19.6274 -0.341167 232 -4.98294 -19.62 -0.340516 231 -4.91737 -19.62 -0.340082 222 -4.8215 -19.6294 -0.339703 220 -4.75507 -19.625 -0.339161 220 -4.69199 -19.634 -0.338998 211 -2.66556 -20.004 -0.33884 54 -4.59713 -19.6462 -0.338728 191 -4.5268 -19.6235 -0.337697 200 -4.46245 -19.626 -0.337372 147 -4.36948 -19.6448 -0.337318 44 -4.30646 -19.6526 -0.337155 44 -4.18122 -19.6714 -0.336939 44 -4.24257 -19.6563 -0.336884 44 -2.74435 -19.8804 -0.335802 44 -4.07988 -19.6498 -0.3358 44 -3.85699 -19.6602 -0.334879 44 -3.94324 -19.6104 -0.33401 74 -2.78958 -19.7509 -0.332493 44 -2.90361 -19.6658 -0.330649 112 -2.83518 -19.6293 -0.329402 92 -3.19717 -19.527 -0.328154 224 -3.10068 -19.5142 -0.327394 250 -3.03812 -19.516 -0.327177 191 -3.99615 -21.106 -0.23057 75 -3.89521 -21.1167 -0.230407 75 -4.96735 -20.5286 -0.223216 74 -2.88075 -20.4351 -0.213336 103 -4.96709 -19.9748 -0.212229 72 -5.39363 -19.8183 -0.211328 173 -5.31998 -19.7927 -0.21043 234 -5.24756 -19.7706 -0.209613 255 -5.14932 -19.7758 -0.209205 255 -5.02105 -19.7922 -0.208879 72 -5.08321 -19.7764 -0.208879 255 -2.90732 -20.1627 -0.207904 95 -4.7172 -19.762 -0.206797 71 -2.94463 -19.9754 -0.204228 83 -4.03108 -19.7501 -0.203532 71 -3.96706 -19.7528 -0.203327 71 -3.87317 -19.7674 -0.203246 71 -3.01904 -19.8308 -0.201532 70 -3.07736 -19.7955 -0.201001 238 -4.96104 -20.9774 -0.131973 65 -3.92921 -20.9853 -0.128729 65 -5.20592 -19.7847 -0.114663 103 -5.10409 -19.7761 -0.114128 170 -4.88586 -19.8291 -0.114097 62 -4.97092 -19.7729 -0.113561 246 -5.03103 -19.7494 -0.113435 199 -3.08409 -20.1272 -0.113156 96 -3.12113 -19.9515 -0.110507 71 -4.05104 -19.751 -0.110001 61 -3.92098 -19.7467 -0.109529 61 -3.9822 -19.7303 -0.109465 61 -3.25548 -19.7922 -0.108363 229 -3.19201 -19.7945 -0.108237 61 -3.38084 -20.45 0.0178838 114 -3.40746 -20.2144 0.0199682 134 -4.85792 -19.9157 0.019972 127 -4.77765 -19.8569 0.0206666 175 -4.70744 -19.8387 0.0209773 220 -4.6103 -19.8451 0.0211231 227 -3.44742 -20.0656 0.0212482 150 -4.5426 -19.8361 0.0213423 215 -4.47807 -19.8405 0.0214336 194 -4.37596 -19.8223 0.0217989 204 -4.31239 -19.8301 0.0218536 185 -4.24882 -19.8377 0.0219083 154 -4.14959 -19.8301 0.0221639 143 -4.08487 -19.8313 0.0222735 146 -3.95786 -19.8448 0.022383 174 -3.51949 -19.9211 0.0224369 183 -4.0186 -19.8244 0.0224562 147 -3.86202 -19.8514 0.0224924 202 -3.79814 -19.8556 0.0225654 226 -3.73207 -19.8478 0.0227481 237 -3.63671 -19.8553 0.0228393 225 -3.57291 -19.8587 0.0229123 238 +unknow 0.967204 1 0 383 -5.01054 26.446 -1.76734 231 -4.88587 26.4693 -1.76734 236 -5.17547 26.4081 -1.76691 227 -5.09211 26.4223 -1.76676 236 -4.80127 26.4767 -1.76676 239 -4.71668 26.4838 -1.76617 232 -6.00971 26.0753 -1.75577 208 -6.08528 26.0291 -1.75371 209 -6.19865 25.9613 -1.75078 198 -6.27316 25.9126 -1.74858 245 -6.34792 25.8657 -1.74653 197 -6.46056 25.7987 -1.74374 195 -5.22988 26.0333 -1.74065 178 -6.53033 25.7338 -1.74037 239 -6.60719 25.6977 -1.7392 199 -6.68238 25.6556 -1.73758 193 -5.29378 25.9288 -1.73405 174 -6.78434 25.5525 -1.73216 236 -6.862 25.5214 -1.73143 196 -6.94109 25.4958 -1.73113 191 -7.04576 25.4071 -1.72688 238 -7.12018 25.3656 -1.72542 197 -7.18571 25.2932 -1.7216 195 -7.37521 25.2054 -1.71926 195 -7.29544 25.2265 -1.71911 235 -7.43686 25.1228 -1.71471 203 -7.54084 25.0397 -1.71105 232 -7.61425 24.9987 -1.70973 197 -7.66993 24.9003 -1.70401 194 -7.74575 24.8685 -1.70342 249 -8.16985 24.5874 -1.6933 191 -8.23755 24.5332 -1.69111 188 -8.41443 24.4225 -1.68759 193 -8.33445 24.4394 -1.68685 234 -8.4715 24.3394 -1.68319 185 -7.77162 24.5425 -1.68113 198 -8.52748 24.2543 -1.67864 234 -8.62897 24.1782 -1.67586 193 -7.97517 24.2547 -1.66558 209 -7.84977 24.2578 -1.66294 205 -7.76806 24.2653 -1.66162 206 -7.80579 26.3381 -1.65352 120 -6.81839 26.483 -1.64511 167 -6.33138 26.4786 -1.63684 156 -5.53708 24.3665 -1.62552 181 -7.97106 25.8503 -1.62507 156 -5.34171 24.3917 -1.6242 227 -5.4153 24.3611 -1.62317 238 -7.87989 25.8428 -1.62277 135 -7.74824 25.8472 -1.62046 117 -5.17763 24.374 -1.62038 255 -5.05989 24.3845 -1.61936 175 -5.10895 26.463 -1.61827 141 -5.23517 26.0191 -1.59037 149 -5.09473 25.9534 -1.58413 120 -7.89847 24.3896 -1.52902 200 -8.00331 24.3218 -1.52686 90 -8.07399 24.2795 -1.52564 129 -7.79433 24.3288 -1.52293 97 -7.70515 24.3132 -1.52008 98 -7.58155 24.3207 -1.51805 115 -5.47802 24.6216 -1.50096 93 -5.54463 24.3796 -1.48592 202 -5.15854 24.4519 -1.48511 88 -5.34912 24.4048 -1.4847 139 -5.27243 24.4215 -1.4847 185 -5.06863 24.4055 -1.48077 95 -4.99114 24.4174 -1.4805 128 -8.25999 24.4267 -1.39405 109 -8.07193 24.3738 -1.38722 136 -8.28392 24.2457 -1.38386 95 -8.11373 24.2442 -1.38038 141 -7.91567 24.2844 -1.37889 255 -7.83079 24.2826 -1.37715 175 -7.746 24.2804 -1.37541 234 -7.62434 24.2938 -1.37392 123 -7.46629 24.324 -1.3728 96 -7.53146 24.2642 -1.37044 97 -7.32744 24.2787 -1.36758 128 -7.24601 24.2843 -1.36646 130 -7.16969 24.307 -1.36646 99 -7.0866 24.3064 -1.36497 126 -6.95994 24.2973 -1.36223 121 -6.87816 24.2998 -1.36099 124 -6.79375 24.2924 -1.35912 116 -6.67498 24.3088 -1.35813 104 -4.55006 24.7803 -1.35724 59 -6.58973 24.2969 -1.35601 76 -6.50925 24.302 -1.35502 83 -6.38809 24.3073 -1.3534 117 -6.31169 24.3273 -1.3534 138 -6.22932 24.3238 -1.35191 107 -6.10737 24.3238 -1.35005 148 -5.95394 24.3598 -1.34992 107 -6.02948 24.3371 -1.34967 101 -5.68348 24.414 -1.3493 143 -5.86901 24.3434 -1.34768 131 -5.75011 24.3533 -1.34656 100 -5.58764 24.3481 -1.34395 139 -5.4724 24.3722 -1.34383 212 -4.58595 24.5402 -1.34295 82 -5.19747 24.3997 -1.34184 130 -5.31112 24.369 -1.34147 163 -5.11346 24.3807 -1.3396 247 -5.03643 24.3947 -1.33948 118 -4.83851 24.4021 -1.33749 134 -4.68471 24.4301 -1.33736 123 -4.75725 24.3937 -1.33599 110 -8.62087 24.5481 -1.25365 143 -8.48848 24.4167 -1.2442 164 -8.0025 24.4983 -1.23982 131 -8.34737 24.3809 -1.23971 255 -8.15581 24.3193 -1.23296 132 -8.07558 24.3334 -1.23229 161 -7.88115 24.3866 -1.23172 199 -7.51793 24.4383 -1.22835 207 -7.78192 24.3409 -1.22757 137 -7.58218 24.3746 -1.22599 128 -7.6503 24.324 -1.22442 118 -7.38007 24.399 -1.22397 255 -7.29304 24.3876 -1.22194 255 -7.21241 24.397 -1.22115 255 -7.08899 24.402 -1.21947 255 -7.00509 24.3992 -1.21801 255 -6.92513 24.4095 -1.21733 255 -6.83922 24.3985 -1.21542 255 -6.7215 24.4208 -1.21486 255 -4.5106 24.922 -1.21473 114 -6.63633 24.411 -1.21306 255 -6.55597 24.4182 -1.21227 255 -6.43623 24.4315 -1.21126 253 -5.66429 24.6157 -1.21091 113 -6.3544 24.4322 -1.21013 242 -6.27113 24.427 -1.20867 242 -4.56886 24.7998 -1.20854 150 -6.15155 24.4388 -1.20766 244 -6.07233 24.4483 -1.2071 241 -5.9888 24.4401 -1.20552 243 -5.8717 24.4603 -1.20507 246 -5.7879 24.4495 -1.20339 232 -5.70831 24.4559 -1.20271 138 -5.50461 24.4494 -1.19979 129 -5.34489 24.4561 -1.19821 193 -4.61197 24.6008 -1.19798 197 -5.41779 24.4217 -1.1972 150 -4.95611 24.5175 -1.19709 139 -5.22371 24.4537 -1.19664 148 -4.68321 24.5548 -1.19618 255 -5.06671 24.4704 -1.19574 126 -4.86967 24.486 -1.19439 243 -4.79272 24.5012 -1.19439 255 -5.13736 24.4251 -1.19405 120 -8.56888 24.5703 -1.10745 220 -8.12053 24.516 -1.09753 119 -4.48729 25.3276 -1.09224 108 -8.35014 24.3099 -1.09136 169 -7.64411 24.4867 -1.08873 160 -8.25449 24.2793 -1.08833 232 -7.95912 24.2831 -1.08377 128 -7.68565 24.3501 -1.08276 120 -7.8699 24.2681 -1.08165 123 -7.78815 24.2756 -1.08074 132 -7.50842 24.3197 -1.07861 252 -7.37869 24.3051 -1.07598 255 -7.30116 24.3243 -1.07578 255 -7.21904 24.328 -1.07477 255 -7.09708 24.3368 -1.07345 255 -7.01563 24.3417 -1.07254 255 -4.53508 24.9111 -1.07191 127 -6.93039 24.3328 -1.07092 255 -6.81137 24.3498 -1.07011 255 -6.72795 24.3461 -1.06879 255 -6.64879 24.3575 -1.06829 255 -5.41487 24.6529 -1.06787 140 -5.29697 24.6704 -1.06747 139 -6.56603 24.3551 -1.06707 255 -5.21655 24.6732 -1.06676 177 -6.44305 24.3548 -1.06545 255 -6.36349 24.3634 -1.06485 255 -5.47715 24.5676 -1.06433 116 -6.28244 24.3658 -1.06393 255 -6.16218 24.3738 -1.06282 255 -6.08125 24.3756 -1.06191 255 -6.00084 24.3791 -1.0611 255 -5.88169 24.3896 -1.06019 255 -4.56916 24.657 -1.05957 176 -5.80136 24.3924 -1.05938 255 -5.71699 24.3775 -1.05766 255 -5.59625 24.3788 -1.05634 255 -4.62709 24.5385 -1.05421 255 -4.69744 24.4885 -1.05239 255 -4.96482 24.4276 -1.05199 243 -4.8101 24.4524 -1.05168 255 -4.88299 24.4176 -1.05067 255 -5.07259 24.3687 -1.05017 126 -8.60756 24.5753 -0.959703 123 -8.44787 24.4891 -0.953689 243 -4.54661 25.4666 -0.952038 166 -8.31586 24.3549 -0.94606 255 -8.21428 24.3071 -0.94256 255 -8.08636 24.3057 -0.940674 255 -7.71894 24.3453 -0.93726 242 -7.78437 24.2866 -0.935646 119 -7.6238 24.3103 -0.934478 255 -7.5468 24.3322 -0.934387 255 -7.42212 24.335 -0.932861 255 -7.34274 24.3487 -0.932411 255 -7.26048 24.3525 -0.931513 255 -7.13718 24.3577 -0.930166 255 -7.05393 24.357 -0.929088 255 -6.97242 24.3617 -0.92828 255 -6.85319 24.3789 -0.927561 255 -6.77013 24.3772 -0.926483 255 -6.68715 24.3753 -0.925406 255 -4.51844 24.8606 -0.925027 176 -6.56803 24.3911 -0.924687 255 -6.48519 24.3884 -0.923609 255 -6.40446 24.3932 -0.92289 255 -6.32327 24.3958 -0.922082 255 -6.20181 24.4002 -0.920915 255 -6.12024 24.4002 -0.920016 255 -6.04211 24.4135 -0.919746 255 -5.9199 24.4125 -0.918399 255 -5.84038 24.4194 -0.91786 255 -5.76134 24.4279 -0.917411 255 -5.6412 24.4333 -0.916423 255 -4.59868 24.6427 -0.916055 218 -5.55638 24.4159 -0.914807 255 -5.47613 24.4176 -0.914088 255 -4.66373 24.5634 -0.913094 255 -5.3929 24.4055 -0.912741 255 -5.2753 24.4189 -0.912202 255 -4.73516 24.5192 -0.911749 255 -5.19605 24.4236 -0.911663 255 -4.85025 24.4946 -0.91166 255 -5.11805 24.434 -0.911393 255 -4.92519 24.4695 -0.911212 255 -5.00084 24.448 -0.910943 255 -8.16969 24.3391 -0.780027 99 -8.06681 24.2849 -0.776792 99 -7.94423 24.298 -0.775789 255 -7.86295 24.3076 -0.775172 229 -7.77804 24.3055 -0.774093 232 -7.69383 24.3051 -0.773091 242 -7.57032 24.3124 -0.771935 246 -7.48981 24.3227 -0.771395 247 -7.4064 24.3232 -0.77047 237 -4.52979 24.9865 -0.769213 168 -7.28198 24.3253 -0.76916 239 -7.19931 24.3269 -0.768312 239 -7.11558 24.3245 -0.76731 244 -6.99647 24.3424 -0.766693 247 -6.91289 24.3392 -0.765691 249 -6.83048 24.3396 -0.764843 253 -6.71358 24.3639 -0.764534 253 -6.62969 24.3578 -0.763455 246 -6.55003 24.367 -0.762992 254 -6.46732 24.3642 -0.762067 247 -6.34542 24.3673 -0.760988 252 -4.56859 24.756 -0.760741 168 -6.26437 24.3697 -0.760294 249 -6.18289 24.3699 -0.759523 247 -6.06557 24.3891 -0.759137 247 -5.98512 24.3925 -0.75852 244 -5.90285 24.3879 -0.757595 243 -5.78602 24.4076 -0.757286 244 -5.70433 24.4043 -0.756438 249 -5.54779 24.426 -0.755898 208 -5.62362 24.4045 -0.755744 226 -4.61994 24.6 -0.755197 188 -5.42487 24.4167 -0.75451 255 -5.34559 24.4219 -0.754048 244 -5.2659 24.4249 -0.753508 247 -5.1495 24.4436 -0.753276 248 -4.72565 24.525 -0.753118 182 -5.06906 24.442 -0.752582 247 -4.99104 24.452 -0.75235 255 -4.87421 24.4674 -0.752041 255 -4.79617 24.4767 -0.751809 243 -8.11247 24.7586 -0.631091 89 -8.00002 24.6775 -0.627481 142 -7.87837 24.5655 -0.62284 128 -7.73235 24.5071 -0.619616 128 -7.62724 24.4416 -0.616586 158 -7.53563 24.4177 -0.614974 107 -4.56346 25.0844 -0.613079 118 -7.32 24.3977 -0.61233 115 -7.23532 24.3937 -0.611427 139 -7.15696 24.4106 -0.611232 129 -7.03574 24.4229 -0.610523 174 -6.87345 24.4359 -0.60949 168 -6.94963 24.4122 -0.609426 176 -6.74914 24.4353 -0.608393 182 -6.66706 24.4371 -0.607748 199 -6.58243 24.4289 -0.60678 213 -6.50358 24.4418 -0.606522 216 -6.38073 24.4431 -0.605554 224 -4.59943 24.84 -0.605539 131 -6.29991 24.4476 -0.605038 229 -6.21911 24.4518 -0.604521 230 -6.09653 24.4517 -0.603554 229 -6.01776 24.463 -0.603295 237 -5.93614 24.4623 -0.60265 239 -5.81802 24.4784 -0.602262 243 -5.73696 24.479 -0.601682 242 -5.65642 24.4814 -0.601165 242 -4.65065 24.684 -0.600899 197 -5.53568 24.4843 -0.600391 247 -5.45741 24.4958 -0.600197 247 -5.37828 24.503 -0.599874 247 -5.29492 24.4905 -0.598907 243 -5.17944 24.5152 -0.598906 247 -5.09953 24.5176 -0.598454 245 -5.01926 24.5179 -0.597938 128 -4.7467 24.5578 -0.597484 88 -4.82306 24.5389 -0.597356 119 -4.89973 24.5217 -0.597292 171 -7.47706 25.8153 -0.519519 85 -7.39319 25.8291 -0.519247 58 -7.29031 25.7752 -0.51708 143 -4.66009 25.4028 -0.491061 86 -6.08055 24.895 -0.485658 56 -4.6844 25.0893 -0.48283 145 -6.09748 24.6273 -0.478726 55 -6.16804 24.5808 -0.477969 55 -7.16596 24.3066 -0.477924 103 -6.43642 24.5057 -0.477809 55 -6.34891 24.4852 -0.476671 55 -6.26653 24.4837 -0.476074 55 -4.70938 24.7896 -0.474977 94 -5.71309 24.5571 -0.474444 55 -5.78976 24.5371 -0.474391 55 -5.51439 24.5759 -0.473739 55 -5.58847 24.5448 -0.47336 55 -5.31363 24.5833 -0.472762 55 -5.42812 24.5521 -0.472601 55 -5.22105 24.5275 -0.470758 73 -4.8734 24.5969 -0.4707 255 -5.06602 24.5559 -0.470648 255 -4.94986 24.5775 -0.470593 255 -5.14069 24.5281 -0.470324 103 -7.01336 25.7892 -0.336721 182 -7.04481 25.5878 -0.332931 96 -4.85475 25.445 -0.319951 144 -6.21125 25.002 -0.317069 90 -4.9063 25.0745 -0.312737 147 -6.85419 24.5969 -0.312428 107 -6.06194 24.734 -0.311035 89 -6.20352 24.6412 -0.309895 89 -6.27643 24.6041 -0.309529 89 -5.91954 24.6554 -0.308792 89 -5.76177 24.6805 -0.308546 88 -5.83419 24.6408 -0.308099 88 -5.63555 24.6645 -0.307649 88 -5.55275 24.6586 -0.307159 88 -5.27625 24.6947 -0.306667 255 -5.19409 24.6897 -0.306218 255 -5.00001 24.7297 -0.306217 169 -5.46481 24.6291 -0.30618 88 -5.07605 24.706 -0.306054 255 -5.344 24.6331 -0.30573 88 -4.9707 25.1856 -0.195894 134 -6.8181 24.6104 -0.193804 116 -5.02044 25.0228 -0.193537 145 -6.72813 24.5854 -0.193049 211 -6.60651 24.5956 -0.192702 189 -6.52717 24.6085 -0.192575 163 -6.44024 24.5921 -0.191977 210 -6.32329 24.6183 -0.191913 196 -5.07477 24.8873 -0.191619 117 -6.24053 24.6167 -0.191567 205 -6.15931 24.6207 -0.191314 221 -6.03846 24.63 -0.190999 234 -5.95731 24.6333 -0.190747 232 -5.8762 24.6364 -0.190494 226 -5.79604 24.643 -0.190305 219 -5.67717 24.6583 -0.190115 214 -5.59702 24.6644 -0.189926 208 -5.40016 24.6939 -0.189704 209 -5.5156 24.6643 -0.189642 215 -5.12631 24.742 -0.189545 131 -5.32004 24.699 -0.189515 199 -5.24243 24.7156 -0.189514 171 +unknow 0.971623 1 0 4069 -4.35759 0.820387 -1.5228 82 -4.42717 -0.212506 -1.5221 90 -4.39145 0.600142 -1.52209 86 -4.52134 1.31284 -1.52158 110 -4.43001 0.0589021 -1.52139 91 -4.38068 0.661872 -1.52138 87 -4.67173 -0.568544 -1.52093 98 -4.41513 -0.344252 -1.52068 85 -4.4079 0.426889 -1.52068 86 -4.35714 0.791955 -1.52067 114 -4.34281 0.86712 -1.52067 110 -4.67743 -0.502252 -1.52026 104 -4.4922 1.39669 -1.52024 114 -4.41858 0.267272 -1.51997 87 -4.37489 0.67504 -1.51996 110 -4.59095 1.01788 -1.51957 101 -4.42472 -0.0246094 -1.51926 99 -4.39923 0.474906 -1.51926 89 -4.3859 0.585311 -1.51926 129 -4.35714 0.770741 -1.51925 111 -4.3364 0.879994 -1.51925 111 -4.6525 -0.670359 -1.51892 119 -4.60304 0.952487 -1.5189 101 -4.59696 0.98139 -1.5189 107 -4.55851 1.14679 -1.5189 105 -4.39805 -0.468372 -1.51856 114 -4.40423 -0.406152 -1.51856 75 -4.4121 -0.309207 -1.51856 91 -4.41523 -0.260674 -1.51856 89 -4.41907 -0.184351 -1.51856 89 -4.42124 -0.12186 -1.51856 90 -4.42231 -0.0732396 -1.51856 93 -4.42161 0.107382 -1.51855 91 -4.41681 0.232342 -1.51855 94 -4.37834 0.626344 -1.51855 82 -4.34912 0.804587 -1.51855 115 -4.32464 0.927219 -1.51854 78 -4.66263 0.580831 -1.51823 97 -4.65189 0.661304 -1.51823 94 -4.64656 0.697819 -1.51823 96 -4.62755 0.814367 -1.51823 94 -4.42105 -0.00377819 -1.51785 90 -4.4202 0.0864958 -1.51784 101 -4.41779 0.169795 -1.51784 94 -4.41122 0.294621 -1.51784 85 -4.40488 0.377714 -1.51784 117 -4.40367 0.39155 -1.51784 111 -4.40242 0.405384 -1.51784 125 -4.394 0.48829 -1.51784 107 -4.36612 0.694734 -1.51784 100 -4.35822 0.742699 -1.51784 124 -4.34214 0.831534 -1.51784 112 -4.3257 0.91323 -1.51784 118 -4.75805 -0.694333 -1.51759 114 -4.67148 -0.486816 -1.51757 99 -4.69227 0.205748 -1.51757 105 -4.67869 0.411858 -1.51756 107 -4.67087 0.492636 -1.51756 100 -4.66686 0.529305 -1.51756 103 -4.64248 0.712118 -1.51756 137 -4.56197 1.11721 -1.51755 93 -4.54572 1.18159 -1.51755 97 -4.41901 -0.0384943 -1.51714 118 -4.41911 0.0239793 -1.51714 90 -4.41858 0.0725679 -1.51714 125 -4.39059 0.501869 -1.51713 114 -4.22215 0.833822 -1.51706 74 -4.6437 -0.691475 -1.5169 113 -4.65102 -0.640373 -1.5169 122 -4.66226 -0.552595 -1.5169 131 -4.67329 -0.449941 -1.5169 103 -4.68036 -0.369128 -1.5169 99 -4.69378 0.102466 -1.5169 108 -4.69237 0.15407 -1.5169 118 -4.6799 0.37494 -1.51689 107 -4.65022 0.646147 -1.51689 102 -4.61188 0.878979 -1.51689 94 -4.5945 0.96575 -1.51689 123 -4.58038 1.03061 -1.51688 136 -4.57712 1.04499 -1.51688 102 -4.56878 1.08091 -1.51688 100 -4.50456 1.32325 -1.51688 108 -4.41117 -0.232667 -1.51643 98 -4.41478 -0.149481 -1.51643 94 -4.41522 -0.135611 -1.51643 125 -4.41615 -0.10093 -1.51643 114 -4.41456 0.155762 -1.51643 118 -4.41192 0.218153 -1.51643 125 -4.38713 0.51543 -1.51642 114 -4.3698 0.646116 -1.51642 122 -4.36023 0.707827 -1.51642 107 -4.35798 0.721521 -1.51642 111 -4.35218 0.755726 -1.51642 89 -4.32489 0.898853 -1.51642 104 -4.76165 -0.641449 -1.51628 128 -4.80404 -0.0773288 -1.51627 101 -4.69262 1.03155 -1.51626 95 -4.66377 -0.523091 -1.51623 128 -4.68461 -0.280742 -1.51623 113 -4.68547 -0.266025 -1.51623 120 -4.68876 -0.199762 -1.51623 111 -4.69018 -0.162929 -1.51623 106 -4.69111 -0.133456 -1.51623 110 -4.69169 -0.11135 -1.51623 109 -4.69291 -0.0302697 -1.51623 100 -4.69095 0.139259 -1.51622 104 -4.68596 0.257101 -1.51622 101 -4.68286 0.308609 -1.51622 109 -4.66143 0.543507 -1.51622 97 -4.63303 0.747937 -1.51622 120 -4.5865 0.994189 -1.51621 103 -4.57032 1.06611 -1.51621 108 -4.51502 1.28022 -1.51621 108 -4.48794 1.37214 -1.51621 112 -4.39345 -0.440028 -1.51572 107 -4.39548 -0.419319 -1.51572 122 -4.41542 0.0100664 -1.51572 118 -4.41378 0.121023 -1.51572 132 -4.41337 0.134889 -1.51572 89 -4.41163 0.183408 -1.51572 122 -4.39212 0.453156 -1.51571 118 -4.3828 0.535861 -1.51571 111 -4.22109 0.819865 -1.51561 64 -4.47015 0.744823 -1.51558 147 -4.66023 -0.537535 -1.51556 93 -4.67092 -0.434929 -1.51556 102 -4.68879 -0.148146 -1.51556 109 -4.69108 0.0213138 -1.51555 115 -4.69099 0.0360503 -1.51555 111 -4.6773 0.359926 -1.51555 102 -4.67433 0.39665 -1.51555 109 -4.67175 0.426012 -1.51555 95 -4.65046 0.616401 -1.51555 98 -4.6335 0.733073 -1.51555 100 -4.60114 0.914419 -1.51554 94 -4.50917 1.29387 -1.51554 109 -4.49467 1.34337 -1.51554 115 -4.39019 -0.453647 -1.51502 114 -4.40669 -0.246336 -1.51501 122 -4.40916 0.197171 -1.51501 87 -4.40466 0.280243 -1.51501 122 -4.40281 0.307912 -1.51501 114 -4.40026 0.342482 -1.51501 93 -4.39166 0.439158 -1.51501 111 -4.37749 0.563138 -1.515 114 -4.37104 0.611236 -1.515 122 -4.33085 0.850503 -1.515 106 -4.79177 -0.29576 -1.51496 106 -4.78738 0.359803 -1.51495 106 -4.47645 -0.6938 -1.51491 143 -4.65217 -0.588516 -1.51489 104 -4.68886 -0.0597289 -1.51488 109 -4.68759 0.124402 -1.51488 114 -4.66638 0.462493 -1.51488 108 -4.66491 0.477151 -1.51488 103 -4.66101 0.513775 -1.51488 142 -4.63942 0.681797 -1.51487 130 -4.6233 0.783651 -1.51487 93 -4.55114 1.12968 -1.51487 124 -4.52131 1.2437 -1.51487 95 -4.39724 -0.356859 -1.51431 125 -4.40184 -0.294661 -1.5143 111 -4.40868 -0.163174 -1.5143 117 -4.41139 -0.0523324 -1.5143 114 -4.41153 0.0377544 -1.5143 118 -4.79165 -0.265531 -1.5143 113 -4.40486 0.245525 -1.5143 122 -4.39945 0.328506 -1.5143 114 -4.3973 0.356143 -1.5143 85 -4.37739 0.54914 -1.5143 107 -4.71851 0.875223 -1.51429 124 -4.65971 1.14783 -1.51428 131 -4.64651 -0.617498 -1.51422 90 -4.6814 -0.236327 -1.51421 107 -4.68665 -0.0818013 -1.51421 107 -4.67623 0.322898 -1.51421 107 -4.67465 0.344931 -1.51421 118 -4.65321 0.564755 -1.5142 123 -4.64957 0.59398 -1.5142 127 -4.64477 0.63048 -1.5142 132 -4.6003 0.899216 -1.5142 122 -4.59456 0.928102 -1.5142 129 -4.55804 1.09345 -1.5142 124 -4.52912 1.20765 -1.5142 98 -4.51557 1.25738 -1.5142 143 -4.76876 -0.520724 -1.51365 122 -4.79711 -0.00181786 -1.51364 100 -4.79404 0.171459 -1.51364 98 -4.78954 0.269312 -1.51364 106 -4.73475 0.770961 -1.51363 123 -4.70381 0.94148 -1.51363 116 -4.39423 -0.370525 -1.5136 111 -4.39804 -0.322187 -1.5136 122 -4.40539 -0.197722 -1.51359 124 -4.64656 -0.602665 -1.51355 132 -4.66174 -0.471064 -1.51354 132 -4.66663 -0.419777 -1.51354 98 -4.66979 -0.383114 -1.51354 107 -4.67474 -0.317058 -1.51354 121 -4.68448 -0.0964963 -1.51354 109 -4.66406 0.44745 -1.51353 132 -4.62323 0.761223 -1.51353 127 -4.60806 0.848229 -1.51353 97 -4.60537 0.8627 -1.51353 132 -4.5403 1.15731 -1.51353 107 -4.52156 1.22848 -1.51353 133 -4.77617 0.42697 -1.51298 121 -4.75949 0.584261 -1.51298 126 -4.74869 0.666408 -1.51298 125 -4.74549 0.688778 -1.51298 124 -4.73528 0.755795 -1.51297 119 -4.60322 1.34333 -1.51297 98 -4.39901 -0.280614 -1.51289 118 -4.4071 -0.0869269 -1.51289 125 -4.6787 -0.214112 -1.51287 111 -4.68359 0.0065236 -1.51287 115 -4.6803 0.175693 -1.51287 101 -4.67808 0.227143 -1.51287 105 -4.6744 0.293254 -1.51287 108 -4.52925 1.19244 -1.51285 135 -4.48323 1.35526 -1.51285 103 -4.47305 -0.678858 -1.51283 148 -4.4869 -0.580332 -1.51283 156 -4.48958 -0.559183 -1.51283 138 -4.43297 0.904344 -1.51281 168 -4.4272 0.932179 -1.51281 154 -4.75625 -0.595076 -1.51233 121 -4.71966 0.837178 -1.51232 118 -4.71017 0.889022 -1.51232 122 -4.63591 -0.653216 -1.5122 121 -4.66996 -0.331498 -1.5122 113 -4.67499 -0.250761 -1.5122 110 -4.67807 -0.184646 -1.5122 109 -4.67342 0.278445 -1.51219 148 -4.6083 0.825818 -1.51219 127 -4.38871 -0.390918 -1.51218 107 -4.47434 -0.657487 -1.51214 154 -4.48298 0.595806 -1.51212 147 -4.44738 0.820299 -1.51212 155 -4.76474 -0.505113 -1.51167 127 -4.7809 -0.31766 -1.51167 112 -4.79136 0.0283209 -1.51167 108 -4.78997 0.118626 -1.51167 134 -4.5889 1.37837 -1.51165 105 -4.67961 -0.0449596 -1.51153 108 -4.52051 0.00793805 -1.51144 182 -4.4743 0.644806 -1.51143 163 -4.44293 0.833932 -1.51143 153 -4.43895 0.854859 -1.51143 134 -4.74152 -0.676611 -1.51102 120 -4.75525 -0.572185 -1.51102 119 -4.76953 -0.437522 -1.51102 100 -4.7878 -0.129656 -1.51101 131 -4.78835 -0.107093 -1.51101 102 -4.78769 0.133631 -1.51101 101 -4.76703 0.463951 -1.51101 129 -4.75567 0.568663 -1.511 124 -4.71854 0.82172 -1.511 117 -4.66819 -0.301927 -1.51086 114 -4.67408 0.190135 -1.51085 134 -4.48906 -0.51617 -1.51075 148 -4.51253 0.234971 -1.51074 180 -4.48379 0.560135 -1.51074 158 -4.4344 0.86845 -1.51073 133 -4.43165 0.882376 -1.51073 158 -4.74175 -0.661441 -1.51036 117 -4.78227 -0.227291 -1.51036 100 -4.78093 0.253814 -1.51035 134 -4.76996 0.411355 -1.51035 129 -4.71008 0.858424 -1.51034 120 -4.69747 0.924923 -1.51034 124 -4.69157 0.954421 -1.51034 118 -4.68393 0.991237 -1.51034 115 -4.65403 1.12326 -1.51034 121 -4.6414 1.17436 -1.51034 99 -4.61844 1.26164 -1.51034 104 -4.6757 0.0578861 -1.51018 107 -4.66982 0.241409 -1.51018 102 -5.90808 1.28849 -1.51015 34 -4.47282 -0.628545 -1.51006 150 -4.48556 -0.530039 -1.51006 153 -4.51297 0.185275 -1.51005 171 -4.48536 0.531741 -1.51005 165 -4.47924 0.581028 -1.51004 155 -4.45058 0.77042 -1.51004 164 -4.44814 0.784399 -1.51004 156 -4.44439 0.805352 -1.51004 153 -4.42275 0.916785 -1.51004 149 -4.74493 -0.623924 -1.5097 117 -4.755 -0.541847 -1.5097 124 -4.76437 -0.452126 -1.5097 137 -4.77925 -0.249716 -1.5097 117 -4.78311 -0.15959 -1.5097 120 -4.78547 -0.0543726 -1.5097 135 -4.77597 0.306257 -1.50969 126 -4.77498 0.32126 -1.50969 128 -4.75788 0.515951 -1.50969 122 -4.75624 0.530896 -1.50969 117 -4.74139 0.650253 -1.50969 115 -4.63021 1.21031 -1.50968 114 -4.66083 -0.352974 -1.50951 137 -4.67361 0.0725344 -1.50951 101 -4.46897 -0.642318 -1.50936 155 -4.48925 -0.480476 -1.50936 151 -4.49751 -0.395775 -1.50936 179 -4.51087 -0.19056 -1.50936 174 -4.50355 0.31974 -1.50936 160 -4.48595 0.510399 -1.50935 155 -4.47171 0.622969 -1.50935 158 -4.46459 0.6721 -1.50935 174 -4.45917 0.707143 -1.50935 156 -4.77128 -0.347104 -1.50904 129 -4.7807 -0.174535 -1.50904 110 -4.78158 0.148527 -1.50904 135 -4.77866 0.223613 -1.50904 99 -4.76352 0.44099 -1.50903 127 -4.72986 0.716943 -1.50903 119 -4.69664 0.909464 -1.50903 122 -4.68332 0.975768 -1.50903 118 -4.67709 1.00517 -1.50903 133 -4.62455 1.22438 -1.50902 124 -4.65541 -0.396735 -1.50884 138 -4.67148 0.0871712 -1.50884 145 -4.60413 0.795193 -1.50883 129 -4.4924 -0.430896 -1.50867 169 -4.51178 -0.105448 -1.50867 170 -4.51267 -0.0558335 -1.50867 178 -4.51244 0.0717658 -1.50867 177 -4.5122 0.0859409 -1.50867 170 -4.50762 0.220551 -1.50866 175 -4.50066 0.333759 -1.50866 167 -4.49671 0.383224 -1.50866 171 -4.45507 0.720861 -1.50866 162 -4.75692 -0.489124 -1.50839 123 -4.76335 -0.421828 -1.50839 116 -4.77046 -0.331971 -1.50839 135 -4.7773 -0.211983 -1.50838 135 -4.78111 -0.0918636 -1.50838 135 -4.78184 -0.0392865 -1.50838 99 -4.78194 -0.0242635 -1.50838 132 -4.77777 0.201024 -1.50838 137 -4.76964 0.343507 -1.50838 138 -4.76739 0.373468 -1.50838 128 -4.73022 0.701814 -1.50837 120 -4.72456 0.738943 -1.50837 118 -4.66391 1.05613 -1.50837 123 -4.5755 1.39008 -1.50836 136 -4.67038 -0.0155777 -1.50817 144 -4.47204 -0.592626 -1.50798 154 -4.47829 -0.543418 -1.50798 157 -4.48701 -0.465962 -1.50798 157 -4.49186 -0.416597 -1.50798 157 -4.49499 -0.381306 -1.50798 166 -4.49993 -0.317724 -1.50798 177 -4.5065 -0.204538 -1.50798 180 -4.50847 -0.154975 -1.50797 170 -4.51113 -0.00619797 -1.50797 187 -4.50841 0.156752 -1.50797 155 -4.49771 0.347762 -1.50797 166 -4.49362 0.397195 -1.50797 180 -4.48898 0.446579 -1.50797 172 -4.48755 0.460681 -1.50797 160 -4.48533 0.481823 -1.50797 183 -4.47807 0.545183 -1.50797 167 -4.46992 0.608433 -1.50797 161 -4.75655 -0.473981 -1.50773 121 -4.77984 0.0508402 -1.50772 134 -4.77915 0.095886 -1.50772 129 -4.75615 0.478031 -1.50772 125 -4.74263 0.597403 -1.50772 126 -4.63773 1.15799 -1.50771 138 -4.62849 1.19438 -1.50771 121 -4.59701 1.31031 -1.50771 130 -4.59287 1.32475 -1.50771 132 -4.48213 -0.493928 -1.50729 151 -4.50396 -0.218593 -1.50728 175 -4.50905 0.0433981 -1.50728 171 -4.50118 0.269898 -1.50728 173 -4.50031 0.284037 -1.50728 152 -4.49048 0.41115 -1.50728 173 -4.48849 0.432306 -1.50728 165 -4.4558 0.692299 -1.50727 151 -4.44557 0.75522 -1.50727 167 -4.73938 -0.60801 -1.50707 121 -4.74578 -0.555862 -1.50707 129 -4.77005 -0.279257 -1.50707 141 -4.77416 -0.196799 -1.50707 104 -4.77777 0.0658407 -1.50707 103 -4.7746 0.185886 -1.50707 125 -4.76181 0.395638 -1.50706 130 -4.75274 0.492786 -1.50706 123 -4.74704 0.545015 -1.50706 124 -4.70991 0.805042 -1.50706 116 -4.64834 1.1065 -1.50705 126 -4.60534 1.27367 -1.50705 131 -4.59929 1.29536 -1.50705 106 -4.49941 -0.26798 -1.50659 177 -4.50023 -0.253843 -1.50659 177 -4.5073 -0.0274114 -1.50659 167 -4.50611 0.107103 -1.50659 167 -4.50535 0.135414 -1.50659 169 -4.50415 0.170793 -1.50659 167 -4.50267 0.206163 -1.50659 158 -4.49228 0.368668 -1.50658 172 -4.48007 0.495521 -1.50658 158 -4.77038 0.238289 -1.50641 129 -4.73698 0.611836 -1.5064 124 -4.71179 0.782539 -1.5064 115 -4.66167 1.04027 -1.5064 125 -4.48355 -0.444224 -1.5059 154 -4.49056 -0.366692 -1.5059 172 -4.4933 -0.331412 -1.5059 193 -4.4953 -0.303173 -1.5059 163 -4.50497 -0.0698497 -1.5059 163 -4.50532 -0.0415424 -1.5059 166 -4.50545 0.0221516 -1.5059 159 -4.50514 0.0575364 -1.5059 164 -4.45739 0.656757 -1.50589 154 -4.75776 -0.398704 -1.50576 118 -4.76559 0.290624 -1.50575 126 -4.57689 1.35919 -1.50574 138 -4.80137 1.19838 -1.50525 103 -4.79181 1.23606 -1.50525 98 -4.46273 -0.60562 -1.50521 149 -4.4948 -0.281858 -1.50521 173 -4.49763 -0.232419 -1.50521 184 -4.50144 -0.140534 -1.5052 176 -4.502 0.121178 -1.5052 172 -4.49638 0.255468 -1.5052 154 -4.49377 0.297833 -1.5052 155 -4.75711 -0.383594 -1.5051 126 -4.77038 -0.144091 -1.5051 128 -4.77187 0.0807854 -1.50509 125 -4.7303 0.633671 -1.50509 127 -4.64627 1.09062 -1.50508 118 -4.87872 0.817653 -1.50462 95 -4.81951 1.11481 -1.50461 90 -4.64783 1.0756 -1.50442 120 -4.60595 1.24279 -1.50442 135 -4.90055 -0.660497 -1.504 87 -4.89365 0.709893 -1.50398 87 -4.88065 0.794338 -1.50398 92 -4.87426 0.832647 -1.50398 90 -4.81414 1.1295 -1.50398 89 -4.75453 -0.368334 -1.50378 129 -4.90564 -0.606351 -1.50336 79 -4.91538 -0.5215 -1.50336 92 -4.93604 0.261612 -1.50335 95 -4.89398 0.694238 -1.50335 94 -4.85728 0.916378 -1.50334 84 -4.83596 1.02297 -1.50334 95 -4.82442 1.07608 -1.50334 92 -4.49484 -0.168569 -1.50313 171 -4.49643 -0.119137 -1.50313 161 -4.49709 -0.0908829 -1.50313 179 -4.91183 -0.536745 -1.50272 90 -4.93194 0.300245 -1.50271 101 -4.89532 0.670902 -1.50271 90 -4.86108 0.885491 -1.50271 74 -4.48234 -0.351794 -1.50244 153 -4.90824 -0.551971 -1.50209 90 -4.93793 -0.110884 -1.50208 92 -4.85641 0.900404 -1.50207 92 -4.80504 1.14328 -1.50207 92 -4.7996 1.1659 -1.50207 94 -4.76309 0.0133444 -1.50181 132 -4.91558 0.462367 -1.50144 94 -4.89864 0.616542 -1.50144 98 -4.87806 0.762447 -1.50144 95 -4.83359 1.00658 -1.50144 81 -4.82717 1.03693 -1.50143 98 -4.82223 1.05967 -1.50143 90 -4.79408 1.18051 -1.50143 90 -5.0451 -0.666067 -1.50114 101 -4.90667 0.531597 -1.5008 87 -4.81363 1.08952 -1.5008 92 -4.76107 1.30011 -1.5008 97 -4.88611 -0.68207 -1.50018 79 -4.91282 -0.451144 -1.50018 100 -4.93088 0.160411 -1.50017 90 -4.89679 0.600667 -1.50017 90 -4.86042 0.845946 -1.50016 87 -4.7633 1.28464 -1.50016 100 -4.89143 -0.628073 -1.49954 82 -4.92829 -0.180442 -1.49954 105 -4.92623 0.230002 -1.49953 95 -4.92152 0.315084 -1.49953 92 -4.91998 0.338271 -1.49953 92 -4.91657 0.384626 -1.49953 95 -4.77141 1.2467 -1.49952 98 -4.74284 1.35132 -1.49952 94 -4.91777 -0.342762 -1.4989 100 -4.92335 -0.250008 -1.4989 101 -4.92483 -0.219068 -1.4989 97 -4.92937 -0.0565243 -1.4989 97 -4.92953 -0.0410365 -1.4989 98 -4.92151 0.284035 -1.4989 90 -4.91282 0.407625 -1.4989 98 -4.91151 0.423056 -1.4989 95 -4.90267 0.515556 -1.4989 90 -4.88816 0.638597 -1.49889 96 -4.86815 0.776533 -1.49889 90 -4.77732 1.21622 -1.49889 94 -5.03545 -0.680856 -1.49867 128 -5.04064 -0.641287 -1.49867 121 -4.87831 -0.696642 -1.49827 94 -4.91362 -0.37352 -1.49827 77 -4.9259 0.136984 -1.49826 94 -4.90468 0.476841 -1.49826 95 -4.87223 0.737981 -1.49826 74 -4.76381 1.2607 -1.49825 98 -4.72407 1.40229 -1.49825 98 -4.94192 1.17366 -1.49803 102 -4.90865 -0.411951 -1.49763 82 -4.91833 -0.273015 -1.49763 97 -4.92033 -0.234378 -1.49763 108 -4.92498 -0.0951844 -1.49763 94 -4.92563 0.051823 -1.49763 82 -4.91322 0.353288 -1.49763 100 -4.88237 0.653428 -1.49762 92 -4.83321 0.951116 -1.49762 74 -4.8302 0.966295 -1.49762 87 -4.74784 1.31248 -1.49761 100 -4.7416 1.33484 -1.49761 98 -4.73312 1.36461 -1.49761 98 -4.72881 1.37947 -1.49761 102 -5.02287 0.742597 -1.49742 100 -5.00798 0.837139 -1.49741 100 -5.00262 0.868589 -1.49741 98 -4.98536 0.962726 -1.49741 94 -4.96299 1.07212 -1.49741 101 -4.9596 1.08771 -1.49741 131 -4.88868 -0.588768 -1.497 99 -4.90544 -0.427214 -1.497 89 -4.91314 -0.326961 -1.49699 100 -4.91556 -0.288365 -1.49699 92 -4.92125 -0.164744 -1.49699 100 -4.92251 0.121395 -1.49699 95 -4.9203 0.190971 -1.49699 98 -5.04701 -0.537595 -1.49681 95 -5.062 -0.370848 -1.49681 109 -5.07512 0.0673198 -1.4968 105 -5.05964 0.401754 -1.4968 101 -5.0351 0.639651 -1.4968 130 -4.97261 1.01711 -1.49679 105 -4.92142 0.0826874 -1.49636 79 -4.91779 0.206337 -1.49635 95 -4.8975 0.491648 -1.49635 90 -4.83246 0.935186 -1.49635 104 -5.03702 -0.608652 -1.49619 115 -5.07309 -0.0761469 -1.49619 106 -5.06895 0.218662 -1.49618 99 -5.03808 0.59987 -1.49618 103 -5.00158 0.852248 -1.49618 130 -4.96753 1.03235 -1.49618 94 -5.4886 -0.636777 -1.49596 88 -4.88674 -0.572985 -1.49572 77 -4.91795 -0.149189 -1.49572 90 -4.9186 -0.126011 -1.49572 100 -4.92018 -0.0178234 -1.49572 87 -4.91412 0.24485 -1.49572 92 -4.90642 0.368266 -1.49572 92 -4.90072 0.43759 -1.49572 94 -4.88548 0.583637 -1.49571 95 -4.86703 0.721519 -1.49571 102 -4.84333 0.866434 -1.49571 102 -5.02387 -0.695319 -1.49557 122 -5.03702 -0.592592 -1.49557 124 -5.0473 -0.497546 -1.49557 93 -5.06768 -0.203525 -1.49557 112 -5.06961 -0.147792 -1.49557 105 -5.06802 0.194709 -1.49557 105 -5.06153 0.322009 -1.49556 136 -5.05996 0.345857 -1.49556 106 -5.05885 0.361751 -1.49556 104 -5.02508 0.68658 -1.49556 102 -4.99003 0.90686 -1.49556 99 -4.94177 1.14092 -1.49556 97 -4.92132 1.22613 -1.49555 104 -4.89478 -0.4806 -1.49509 102 -4.89627 -0.465221 -1.49509 71 -4.91443 -0.195466 -1.49509 97 -4.91824 0.0285283 -1.49508 100 -4.88803 0.545028 -1.49508 99 -5.05512 -0.386284 -1.49495 105 -5.04777 0.472738 -1.49494 100 -5.01765 0.725764 -1.49494 103 -4.99098 0.890855 -1.49494 131 -4.94347 1.12497 -1.49494 141 -4.8955 1.31819 -1.49493 116 -4.89133 1.33356 -1.49493 111 -5.48961 -0.593255 -1.49482 96 -4.90705 -0.303378 -1.49445 98 -4.9159 -0.0718854 -1.49445 94 -4.91597 0.067119 -1.49445 104 -4.9133 0.175201 -1.49445 94 -4.81632 0.987094 -1.49444 100 -5.03774 -0.55258 -1.49433 127 -5.06505 -0.171532 -1.49433 112 -5.06664 -0.115829 -1.49433 114 -5.06712 -0.0919504 -1.49433 107 -5.06796 -0.00438879 -1.49433 106 -5.05965 0.290001 -1.49433 108 -5.05077 0.41706 -1.49433 141 -5.04281 0.504265 -1.49432 99 -5.0305 0.615032 -1.49432 98 -5.00748 0.780607 -1.49432 101 -4.98341 0.921861 -1.49432 135 -4.96832 1.00002 -1.49432 137 -4.94686 1.10126 -1.49432 100 -4.93445 1.15559 -1.49432 131 -4.92145 1.20977 -1.49432 105 -4.87454 1.38675 -1.49432 113 -5.47556 -0.696388 -1.49425 120 -5.47772 -0.679183 -1.49425 92 -4.87251 -0.641299 -1.49382 97 -4.88869 -0.503293 -1.49382 87 -4.90153 -0.357186 -1.49381 85 -4.91453 -0.00239305 -1.49381 99 -5.02754 -0.623498 -1.49372 121 -5.06586 -0.0441657 -1.49371 101 -5.05199 0.377247 -1.49371 109 -5.04754 0.432773 -1.49371 106 -5.04544 0.456553 -1.49371 109 -5.03507 0.559481 -1.49371 100 -5.03238 0.583203 -1.49371 127 -5.02363 0.654285 -1.4937 101 -5.01613 0.709482 -1.4937 129 -4.92338 1.19387 -1.4937 139 -4.87704 1.37092 -1.4937 116 -4.9115 0.105624 -1.49317 84 -5.03815 -0.512592 -1.4931 130 -5.0567 -0.274693 -1.49309 106 -5.05833 -0.242915 -1.49309 97 -5.06414 0.0115451 -1.49309 107 -5.06403 0.0354089 -1.49309 118 -5.06302 0.106994 -1.49309 104 -5.05874 0.234195 -1.49309 134 -5.01966 0.669824 -1.49309 133 -5.00615 0.764318 -1.49308 130 -4.97527 0.944643 -1.49308 107 -4.90017 1.27829 -1.49308 108 -4.8665 1.40102 -1.49308 123 -4.89479 -0.395386 -1.49254 104 -5.37643 1.22364 -1.49251 104 -5.03032 -0.567735 -1.49248 95 -5.03937 -0.480736 -1.49248 116 -5.04158 -0.456983 -1.49248 120 -5.04986 -0.353944 -1.49248 102 -5.05148 -0.330142 -1.49248 144 -5.05249 -0.314272 -1.49248 115 -5.06076 0.122863 -1.49247 104 -5.05964 0.162607 -1.49247 101 -5.03869 0.487899 -1.49247 129 -4.96737 0.975528 -1.49246 121 -5.28408 0.68928 -1.49242 105 -5.36079 1.28223 -1.49194 106 -4.87688 0.559252 -1.4919 86 -5.04246 -0.425127 -1.49186 102 -5.05689 -0.187122 -1.49186 113 -5.05112 0.305475 -1.49185 102 -5.03281 0.52727 -1.49185 128 -4.99749 0.795178 -1.49185 122 -4.95122 1.04527 -1.49184 135 -4.87582 1.3541 -1.49184 114 -5.47133 -0.652273 -1.49139 119 -5.38581 1.16362 -1.49137 101 -5.37651 1.20589 -1.49137 134 -4.90693 0.0129863 -1.49127 85 -5.27937 -0.695781 -1.49125 106 -5.28754 0.630703 -1.49124 127 -5.03921 -0.440791 -1.49124 127 -5.04188 -0.409121 -1.49124 138 -5.05336 -0.226737 -1.49124 135 -5.0553 0.178386 -1.49123 130 -5.14592 1.36943 -1.49123 125 -5.02923 0.542883 -1.49123 107 -4.99308 0.810579 -1.49123 127 -4.89863 1.26149 -1.49122 112 -5.47342 -0.617676 -1.49082 123 -5.34265 1.34014 -1.4908 111 -5.33841 1.35692 -1.4908 117 -5.25416 0.854024 -1.49065 108 -5.20809 1.10058 -1.49064 111 -5.19929 1.14145 -1.49064 106 -5.19568 1.15778 -1.49064 108 -5.17293 1.25551 -1.49064 116 -5.04776 -0.29803 -1.49062 106 -5.04914 0.273547 -1.49061 106 -4.88673 1.29945 -1.4906 111 -5.28959 -0.579089 -1.49007 102 -5.25753 0.82071 -1.49006 118 -5.1379 1.38462 -1.49005 126 -5.04804 -0.258271 -1.49 107 -5.05294 -0.13133 -1.49 109 -5.05439 0.0512693 -1.49 107 -5.05275 0.138592 -1.49 103 -5.04848 0.249665 -1.49 105 -4.89888 1.24518 -1.48999 104 -5.36128 1.24675 -1.48965 99 -5.35733 1.26359 -1.48965 111 -5.34929 1.29722 -1.48965 108 -5.32825 1.38108 -1.48965 112 -5.32389 1.39782 -1.48965 108 -5.27584 -0.678434 -1.48948 91 -5.27898 -0.653564 -1.48948 138 -5.28101 -0.636977 -1.48948 109 -5.05239 -0.0598533 -1.48938 105 -5.0527 -0.0201703 -1.48938 129 -5.65065 -0.660032 -1.48912 102 -5.47238 -0.574096 -1.4891 91 -5.34126 1.32194 -1.48908 105 -5.27588 0.662998 -1.48888 104 -5.26827 0.720968 -1.48888 103 -5.26245 0.762323 -1.48888 108 -5.2563 0.803629 -1.48888 112 -5.24441 0.877856 -1.48888 100 -5.16339 1.27041 -1.48887 120 -5.27919 -0.619917 -1.4883 105 -5.28205 -0.595033 -1.4883 101 -5.12871 -0.609759 -1.4883 70 -5.14241 -0.480682 -1.4883 84 -5.27604 0.646195 -1.48829 116 -5.26293 0.745526 -1.48829 111 -5.23974 0.894016 -1.48829 104 -5.19537 1.12353 -1.48828 107 -5.1827 1.18059 -1.48828 117 -5.04812 0.0908912 -1.48814 111 -5.25624 0.778309 -1.4877 108 -5.20553 1.06597 -1.48769 98 -5.20216 1.08231 -1.48769 105 -5.17332 1.2127 -1.48769 102 -5.16948 1.22895 -1.48769 105 -5.14954 1.31 -1.48769 121 -5.13897 -0.49666 -1.48769 80 -5.06425 1.00457 -1.48767 79 -5.26483 0.703682 -1.48711 107 -5.24548 0.835766 -1.48711 108 -5.20862 1.04106 -1.4871 98 -5.14355 1.3257 -1.4871 124 -5.12099 -0.641517 -1.48708 74 -5.15066 -0.326791 -1.48708 85 -5.15724 -0.19725 -1.48708 81 -5.82123 1.28835 -1.48683 47 -5.36531 1.18561 -1.4868 94 -5.17338 1.1956 -1.48651 111 -5.15195 1.28481 -1.48651 119 -5.13892 -0.455966 -1.48648 81 -5.05573 1.02764 -1.48646 79 -4.98956 1.31174 -1.48646 87 -5.63686 -0.694305 -1.48635 106 -5.64611 -0.61455 -1.48635 110 -5.27809 -0.560988 -1.48594 107 -5.12575 -0.568659 -1.48587 76 -5.15695 -0.0513555 -1.48587 83 -5.15708 -0.0351539 -1.48587 85 -5.15683 0.0620559 -1.48587 92 -5.1003 0.764016 -1.48586 77 -5.09664 0.788043 -1.48586 77 -5.06937 0.947744 -1.48586 75 -5.05061 1.04313 -1.48586 78 -5.03183 1.13023 -1.48586 76 -4.98149 1.33474 -1.48585 86 -5.11876 1.3968 -1.48533 127 -5.11223 -0.664932 -1.48527 69 -5.12733 -0.536252 -1.48527 68 -5.07761 0.891608 -1.48525 76 -5.13195 1.33996 -1.48474 123 -5.9201 -0.637999 -1.48473 78 -5.51278 1.34167 -1.48467 122 -5.50424 1.37629 -1.48467 130 -5.14145 -0.350579 -1.48466 80 -5.15226 -0.107995 -1.48466 85 -5.15271 -0.083713 -1.48466 83 -5.09038 0.803437 -1.48465 71 -5.04358 1.05819 -1.48464 82 -4.99815 1.25538 -1.48464 81 -4.98813 1.2946 -1.48464 84 -4.96284 1.38839 -1.48464 87 -5.36697 1.14181 -1.48451 135 -5.91299 -0.684262 -1.4842 75 -5.52533 1.28055 -1.48412 118 -5.10418 -0.696544 -1.48406 75 -5.126 -0.511725 -1.48405 80 -5.13273 -0.439209 -1.48405 84 -5.15147 -0.0108684 -1.48405 85 -5.14927 0.150949 -1.48405 75 -5.07936 0.859032 -1.48404 78 -5.00791 1.20776 -1.48404 79 -5.00022 1.2392 -1.48404 84 -5.20061 1.02253 -1.48356 101 -5.11544 -0.591967 -1.48345 77 -5.14641 -0.180705 -1.48344 85 -5.14782 0.134712 -1.48344 84 -5.11229 0.618568 -1.48344 80 -5.06483 0.930398 -1.48343 72 -5.01538 1.16795 -1.48343 76 -5.01169 1.1837 -1.48343 84 -5.78499 1.38553 -1.48312 75 -5.62757 -0.675167 -1.48303 134 -5.53532 1.21891 -1.48301 114 -5.53146 1.2363 -1.48301 114 -5.10256 -0.680022 -1.48284 86 -5.13028 -0.422787 -1.48284 83 -5.13344 -0.382481 -1.48284 83 -5.14723 -0.0674798 -1.48284 81 -5.14767 0.00529136 -1.48284 87 -5.10843 0.634382 -1.48283 80 -5.09896 0.706534 -1.48283 73 -4.96809 1.34784 -1.48282 86 -5.80212 1.30318 -1.4826 70 -5.51566 1.29661 -1.48245 126 -5.1403 -0.237124 -1.48223 80 -5.05056 0.985283 -1.48222 70 -5.03278 1.0724 -1.48222 75 -5.0242 1.11189 -1.48222 72 -4.99854 1.2221 -1.48222 81 -5.62888 -0.630502 -1.48192 141 -5.50968 1.3135 -1.4819 122 -5.4992 1.35673 -1.4819 118 -5.13082 -0.366101 -1.48163 83 -5.13286 0.336308 -1.48162 82 -5.11484 0.545601 -1.48162 83 -5.10161 0.657941 -1.48162 76 -5.07583 0.833813 -1.48162 69 -4.9493 1.40133 -1.48161 91 -5.25816 0.602242 -1.48121 104 -5.10405 -0.623212 -1.48102 78 -5.11235 -0.550994 -1.48102 81 -5.90464 -0.655163 -1.48102 77 -5.1349 -0.269237 -1.48102 86 -5.14191 0.021412 -1.48102 91 -5.13778 0.207125 -1.48102 82 -5.13519 0.263606 -1.48102 81 -5.11864 0.489137 -1.48101 75 -4.98111 1.27603 -1.48101 83 -5.52004 1.252 -1.48079 114 -5.48465 1.39894 -1.48079 130 -5.13382 -0.25302 -1.48042 87 -5.13869 0.118272 -1.48041 81 -5.13008 0.319926 -1.48041 87 -5.04802 0.968304 -1.4804 82 -4.95649 1.36138 -1.4804 89 -5.52972 1.19952 -1.48024 118 -5.12208 -0.405964 -1.47981 83 -5.1334 -0.220685 -1.47981 90 -5.13552 -0.164229 -1.47981 85 -5.13665 -0.123889 -1.47981 82 -5.13713 0.102079 -1.47981 79 -5.08383 0.745131 -1.4798 72 -5.0635 0.872651 -1.4798 77 -5.19065 1.00371 -1.47943 132 -5.12692 -0.309243 -1.4792 84 -5.13433 -0.139984 -1.4792 83 -5.13565 0.0778327 -1.4792 84 -5.13104 0.231049 -1.4792 87 -5.13029 0.247168 -1.4792 82 -5.12361 0.35992 -1.4792 79 -5.11519 0.464464 -1.4792 80 -5.08983 0.688922 -1.47919 71 -5.07091 0.816612 -1.47919 78 -5.01837 1.09403 -1.47919 83 -5.12055 0.375867 -1.47859 75 -5.11744 0.416071 -1.47859 68 -5.00418 1.1487 -1.47858 87 -5.13222 0.0455094 -1.47799 87 -5.12438 0.287221 -1.47799 81 -5.12345 0.303317 -1.47799 79 -5.11283 0.44804 -1.47798 79 -5.05087 0.91135 -1.47798 84 -5.12215 -0.292836 -1.47739 88 -5.12698 0.190502 -1.47738 72 -5.0786 0.728035 -1.47738 83 -5.20111 0.904429 -1.47707 89 -5.11365 0.391485 -1.47677 87 -5.77525 1.32567 -1.47677 93 -5.18897 0.961224 -1.47648 105 -5.09151 0.599713 -1.47616 69 -5.08252 0.671631 -1.47616 84 -5.1825 0.985316 -1.47589 116 -5.76306 1.36103 -1.47571 88 -5.10662 0.431295 -1.47556 78 -5.1882 0.94425 -1.4753 107 -5.76543 1.34247 -1.47518 68 -5.09812 0.503246 -1.47495 85 -5.09038 0.559053 -1.47435 75 -5.08671 0.57482 -1.47374 82 -5.11422 0.173874 -1.47314 78 -5.23342 0.582889 -1.47294 102 -5.08514 0.518044 -1.47132 70 -5.17608 0.925331 -1.47058 97 -6.00057 -0.673411 -1.46819 98 -6.00074 -0.654338 -1.46767 97 -5.99267 -0.69157 -1.46664 124 -5.8956 1.27759 -1.46662 107 -5.87931 1.34192 -1.4661 109 -6.40561 -0.70237 -1.46532 90 -5.86044 1.4056 -1.46507 119 -5.86942 1.3591 -1.46455 108 -5.86512 1.37753 -1.46455 112 -6.1751 -0.655384 -1.46442 129 -6.16917 -0.674375 -1.46342 93 -5.87236 1.31131 -1.46248 114 -5.22035 -0.339676 -1.46233 132 -6.27481 1.3972 -1.46141 147 -6.0391 1.3866 -1.46088 118 -5.86701 1.29082 -1.45989 144 -5.18771 0.56154 -1.45819 101 -6.03022 1.36458 -1.45736 125 -5.45628 1.15708 -1.45695 121 -6.0307 1.34477 -1.45635 167 -6.25072 1.37136 -1.45412 176 -5.79542 -0.606709 -1.44976 58 -5.15465 -0.318811 -1.44167 66 -5.13436 -0.520532 -1.44049 79 -5.10244 -0.355579 -1.42633 108 -5.07705 -0.498312 -1.4222 88 -5.07407 -0.425642 -1.41925 117 -5.06718 -0.481217 -1.41866 101 -5.06296 -0.464742 -1.41689 100 -5.06963 -0.385159 -1.41689 97 -5.06205 -0.408555 -1.41511 102 -5.0651 -0.368785 -1.41511 92 -5.05368 -0.439825 -1.41334 103 -5.03353 0.529644 -1.40979 99 -5.09881 1.06668 -1.40159 98 -4.9957 0.399281 -1.39445 64 -4.99907 -0.221754 -1.3921 77 -5.0719 1.03596 -1.39187 88 -5.06199 1.01731 -1.38787 77 -4.95987 0.498667 -1.38619 111 -4.93917 0.410671 -1.37733 135 -4.91745 0.440093 -1.37143 116 -5.01069 0.990348 -1.37128 113 -4.90433 0.477825 -1.36848 127 -5.06022 -0.516766 -1.36501 108 -4.89058 0.461061 -1.36376 135 -4.88643 0.422019 -1.3614 107 -5.03206 -0.4901 -1.35586 75 -4.80973 -0.174524 -1.33308 164 -4.79848 0.346656 -1.33248 181 -4.78974 0.361196 -1.33012 174 -4.79329 -0.279517 -1.32954 62 -4.75187 0.328544 -1.31773 201 -4.75762 -0.187323 -1.31714 197 -4.75297 -0.157205 -1.31537 198 -4.74646 -0.261567 -1.31478 75 -4.74286 0.290575 -1.31419 230 -4.82396 0.936699 -1.31353 120 -4.7362 0.305137 -1.31241 215 -4.73985 0.200845 -1.31183 231 -4.73913 -0.104515 -1.31065 225 -4.72856 -0.238131 -1.30888 91 -4.7337 -0.0894855 -1.30888 229 -5.03489 -0.529182 -1.3084 106 -4.72356 -0.222974 -1.30711 78 -4.72501 -0.133837 -1.30652 211 -4.72541 -0.118991 -1.30652 217 -4.72643 -0.0670262 -1.30652 224 -4.84841 -0.457801 -1.30039 68 -4.70475 0.103392 -1.30002 236 -4.69494 0.221353 -1.29825 238 -4.69605 -0.0516726 -1.29707 240 -4.6944 -0.014772 -1.29648 239 -4.69372 0.0810858 -1.29648 238 -4.6908 0.184279 -1.29648 197 -4.69236 -0.0368689 -1.29589 239 -4.69223 0.0515819 -1.29589 240 -4.68912 0.117874 -1.2953 163 -4.68487 2.91477e-05 -1.29353 239 -4.68484 0.0147473 -1.29353 240 -4.67895 0.235417 -1.29353 241 -4.68281 0.0368193 -1.29294 241 -4.67867 0.0662091 -1.29176 241 -4.67659 0.154383 -1.29176 95 -4.66482 0.249476 -1.2894 255 -4.66169 0.271355 -1.28881 243 -4.6658 0.132082 -1.28822 103 -4.7399 0.896735 -1.28665 92 -4.65698 0.168489 -1.28586 117 -4.72764 0.878955 -1.28207 73 -4.71719 0.861616 -1.27807 101 -4.71554 0.838341 -1.27636 94 -4.76906 -0.420536 -1.2758 81 -4.7639 -0.435189 -1.27465 85 -4.70495 0.821143 -1.27235 72 -4.75188 -0.396568 -1.27008 109 -4.69803 0.781891 -1.26835 64 -4.74355 -0.380923 -1.26722 80 -4.68486 0.802352 -1.26549 78 -4.73708 -0.365472 -1.26493 66 -4.73492 -0.342888 -1.26379 69 -4.79899 1.00516 -1.26237 67 -4.72833 -0.327523 -1.2615 85 -4.68811 0.697095 -1.26149 66 -4.67779 0.7633 -1.26149 68 -4.67833 0.710626 -1.2592 75 -4.6726 0.747347 -1.2592 59 -4.86456 -0.494942 -1.2585 54 -4.67133 0.6795 -1.25577 131 -4.67258 0.657202 -1.2552 184 -4.67273 0.642248 -1.25463 171 -5.00391 1.06253 -1.25422 27 -4.70064 -0.310928 -1.25292 79 -4.70205 -0.288774 -1.25292 76 -4.65223 0.72898 -1.25234 58 -4.66333 0.625973 -1.2512 148 -4.75691 0.981002 -1.24906 70 -4.68954 -0.273295 -1.24892 83 -4.68463 -0.258275 -1.2472 87 -4.75394 0.957099 -1.24685 99 -4.64911 0.586822 -1.24548 136 -4.64724 0.601425 -1.24548 101 -4.67393 -0.243024 -1.24377 85 -4.67119 -0.220836 -1.24263 98 -4.64142 0.57099 -1.24262 152 -4.64332 0.504666 -1.24091 81 -4.63749 0.55569 -1.2409 102 -4.66421 -0.205864 -1.24034 87 -4.63815 0.533602 -1.24033 97 -4.66427 -0.154514 -1.23977 88 -4.7305 0.937074 -1.23909 83 -4.6341 0.518355 -1.23862 81 -4.65717 -0.190939 -1.23805 92 -4.65899 -0.13972 -1.23805 53 -4.63612 0.481736 -1.23805 74 -4.62999 0.466358 -1.23576 72 -4.62952 0.451613 -1.23519 65 -5.01877 -0.505018 -1.23463 30 -4.649 -0.0737246 -1.23462 82 -4.71643 0.918991 -1.2341 76 -4.64461 -0.168578 -1.23405 48 -4.64599 -0.124798 -1.23405 62 -4.64299 -0.0882538 -1.23291 64 -4.62397 0.42904 -1.2329 66 -4.62467 0.399803 -1.23233 73 -4.63985 -0.0371875 -1.23176 71 -4.63994 -0.0226094 -1.23176 63 -4.71126 0.895014 -1.23133 85 -4.63779 -0.0517524 -1.23119 68 -4.63503 -0.102712 -1.23062 74 -4.62017 0.384763 -1.23061 81 -4.76886 -0.446858 -1.22968 91 -4.76553 -0.461643 -1.22912 61 -4.62306 0.26091 -1.2289 92 -4.61194 0.41324 -1.2289 67 -4.7046 0.878497 -1.22855 84 -4.62848 0.0137332 -1.22833 66 -4.62841 0.0282742 -1.22833 94 -4.62624 0.144578 -1.22833 110 -4.62374 0.209964 -1.22833 88 -4.62003 0.246158 -1.22776 93 -4.61604 0.282309 -1.22718 90 -4.61418 0.311307 -1.22718 77 -4.90728 1.02538 -1.22614 27 -4.70056 0.847266 -1.22578 74 -4.61865 0.0499269 -1.22547 95 -4.60586 0.347073 -1.22547 86 -4.61655 0.0643993 -1.2249 99 -4.61402 0.1659 -1.2249 87 -4.60284 0.361379 -1.22489 92 -4.60557 0.296141 -1.22432 83 -4.61223 0.0933048 -1.22375 92 -4.61173 0.115039 -1.22375 95 -4.60943 0.129463 -1.22318 97 -4.60714 0.194611 -1.22318 82 -4.60582 0.180051 -1.22261 91 -4.74538 -0.429487 -1.22247 69 -4.68652 0.860011 -1.22246 89 -4.60742 -0.000922723 -1.22204 70 -4.59546 0.331707 -1.22204 87 -4.7512 0.332953 -1.22191 84 -4.60292 0.0785978 -1.2209 89 -4.59782 0.230363 -1.22089 91 -4.75705 0.0190103 -1.22025 121 -4.96657 -0.484288 -1.2198 27 -4.74505 0.310102 -1.21969 99 -4.74999 0.175771 -1.21914 89 -4.73521 -0.391024 -1.21859 61 -4.73453 0.399182 -1.21858 82 -4.67987 0.820924 -1.21858 76 -4.74739 0.138369 -1.21803 82 -4.74715 0.0563109 -1.21748 87 -4.74476 0.160684 -1.21747 98 -4.74366 0.190493 -1.21747 98 -4.74478 0.086113 -1.21692 88 -4.73857 0.257441 -1.21692 95 -4.73176 0.361576 -1.21692 86 -4.74364 0.00412825 -1.21637 90 -4.73919 0.205249 -1.21637 92 -4.73096 0.346579 -1.21636 85 -4.87463 1.00239 -1.21607 26 -4.72677 0.376156 -1.21581 85 -4.73967 0.0339273 -1.21526 81 -4.73856 0.10837 -1.21526 84 -4.72176 0.413111 -1.21525 106 -4.73241 0.227335 -1.2147 85 -4.73168 0.242202 -1.2147 103 -4.67533 0.767312 -1.2147 67 -4.66915 0.804008 -1.2147 70 -4.73542 0.0711146 -1.21415 91 -4.96891 0.000821346 -1.21396 26 -4.72297 0.293886 -1.21304 84 -4.71071 0.449495 -1.21304 83 -4.8869 0.877467 -1.21289 26 -4.70895 0.426965 -1.21193 89 -4.70908 -0.403627 -1.21138 71 -4.72631 -0.0180642 -1.21138 103 -4.69971 0.463402 -1.21026 91 -4.71898 0.122863 -1.20971 87 -4.70501 -0.358602 -1.20916 69 -4.69058 0.477427 -1.20805 95 -4.65726 0.734456 -1.20804 62 -4.64511 0.784999 -1.20693 73 -4.69856 -0.283895 -1.20584 75 -4.64733 0.747903 -1.20583 67 -4.67872 0.498561 -1.20527 92 -4.69043 -0.320365 -1.20417 74 -4.69317 0.277404 -1.20417 78 -4.6895 -0.305491 -1.20362 70 -4.66184 0.593295 -1.20361 93 -4.65194 0.666447 -1.20361 106 -4.83397 0.97006 -1.20336 26 -4.6828 -0.371592 -1.20307 73 -4.66785 0.527127 -1.20306 86 -4.66357 0.563772 -1.20306 83 -5.08296 1.11248 -1.20267 24 -4.65327 0.614534 -1.20195 93 -4.65132 0.62915 -1.20195 95 -4.64412 0.680255 -1.20195 88 -4.90275 -0.462865 -1.20178 26 -4.65605 0.577742 -1.20139 91 -4.6436 0.643 -1.20028 89 -4.84543 0.846224 -1.20018 26 -4.65471 0.540523 -1.19973 82 -4.63215 0.708301 -1.19973 74 -4.67216 -0.33377 -1.19919 95 -4.63245 0.693471 -1.19917 56 -4.65419 0.510868 -1.19862 87 -4.82916 0.88247 -1.19753 26 -4.6779 -0.0617063 -1.19752 105 -4.66764 -0.252422 -1.19641 61 -4.67342 -0.0983421 -1.19641 108 -4.67435 -0.0322659 -1.19641 108 -4.67179 -0.0836153 -1.19586 90 -4.88112 -0.445478 -1.19542 26 -4.66077 -0.046741 -1.19253 103 -4.65773 -0.112567 -1.19198 106 -4.65221 -0.214861 -1.19142 52 -4.97741 -0.522468 -1.19108 61 -4.64381 -0.26564 -1.18976 66 -4.85626 -0.420288 -1.188 26 -4.86279 -0.336318 -1.188 26 -4.64031 -0.177727 -1.18754 60 -4.64178 -0.133986 -1.18754 79 -4.85371 -0.404729 -1.18694 26 -4.63424 -0.228527 -1.18643 67 -4.6375 -0.148422 -1.18643 71 -4.82002 0.686274 -1.1864 26 -4.80983 0.754344 -1.1864 26 -4.78659 0.890021 -1.1864 177 -4.82144 0.647863 -1.18534 26 -4.79745 0.806525 -1.18534 26 -4.81212 0.700549 -1.18481 26 -4.81365 0.662186 -1.18375 26 -4.76517 0.940296 -1.18322 28 -4.84135 -0.365517 -1.1827 26 -4.61831 -0.198565 -1.18144 29 -4.8367 -0.349918 -1.18111 25 -4.82996 -0.387607 -1.18005 25 -4.79274 0.713018 -1.18004 25 -4.78932 0.735595 -1.18004 25 -4.61397 -0.162052 -1.17978 95 -4.774 0.817899 -1.17951 25 -4.80052 0.629581 -1.17899 25 -4.82775 -0.311239 -1.17793 36 -4.80579 0.538311 -1.1774 94 -4.77267 0.779095 -1.17739 25 -4.82234 -0.136346 -1.17422 25 -4.78802 0.574359 -1.17369 93 -4.76178 0.761893 -1.17369 25 -4.81137 -0.295101 -1.17317 124 -4.81586 -0.158908 -1.17263 25 -4.81539 -0.105915 -1.1721 25 -4.81241 -0.0529398 -1.17104 25 -4.81029 -0.0680427 -1.17051 25 -4.80732 -0.120891 -1.16998 25 -4.80882 -0.0151517 -1.16998 25 -4.80291 -0.0377981 -1.16839 25 -4.76874 0.556738 -1.16786 72 -4.76515 0.586691 -1.16786 61 -4.80445 1.02239 -1.1662 44 -4.79256 -0.0904751 -1.16575 25 -4.78543 -0.240883 -1.16522 25 -4.77653 -0.225446 -1.16257 25 -4.77622 -0.187858 -1.16204 25 -4.77784 0.0373165 -1.16151 90 -4.76757 -0.210067 -1.15992 25 -4.76715 -0.172557 -1.15939 25 -4.76832 0.0147179 -1.15886 57 -4.73081 0.514452 -1.1562 64 -4.70975 0.594601 -1.15302 44 -4.73416 -0.260947 -1.15144 29 -4.73761 0.993008 -1.14704 57 -4.73692 0.977359 -1.146 116 -4.74776 0.871269 -1.14341 160 -4.745 0.886179 -1.14341 151 -4.68707 0.0508395 -1.1366 85 -4.65574 0.491069 -1.13501 84 -4.72077 0.835869 -1.13461 105 -4.65753 0.454289 -1.13448 105 -4.65608 0.46892 -1.13448 98 -4.69638 0.953866 -1.13409 66 -4.71431 0.850031 -1.13357 120 -4.65772 0.38789 -1.13289 93 -4.65264 0.402167 -1.13183 108 -4.65136 0.416782 -1.13183 109 -4.64963 0.167169 -1.12706 99 -4.63778 0.371444 -1.12706 109 -4.64887 0.130582 -1.12653 119 -4.63015 0.436778 -1.12653 105 -4.64733 0.115916 -1.126 125 -4.64523 0.181604 -1.126 130 -4.67336 0.911202 -1.1258 91 -4.64435 0.15234 -1.12547 113 -4.64103 0.232561 -1.12547 134 -4.64027 0.247141 -1.12547 101 -4.63906 0.269005 -1.12547 129 -4.63372 0.349117 -1.12547 113 -4.63389 0.319853 -1.12494 112 -4.63287 0.334409 -1.12494 117 -4.64254 0.0646979 -1.12441 157 -4.64039 0.0792379 -1.12388 133 -4.63996 0.101105 -1.12388 121 -4.63596 0.217676 -1.12388 110 -4.62472 0.282678 -1.12176 116 -4.62506 0.202539 -1.1207 145 -4.61804 0.296801 -1.12017 112 -4.6496 0.92186 -1.12011 63 -4.71565 -0.441226 -1.11908 64 -4.70079 -0.454663 -1.11546 62 -4.67807 0.647932 -1.11545 179 -4.93196 1.06333 -1.11473 32 -4.74591 1.01351 -1.11157 35 -4.67921 -0.415369 -1.10872 85 -4.64007 0.694923 -1.10716 83 -4.64051 0.665227 -1.10612 57 -4.67516 -0.318885 -1.10562 98 -4.61795 0.795834 -1.1056 57 -4.63266 0.678993 -1.10457 79 -4.72379 0.977631 -1.10402 60 -4.7188 0.992057 -1.10352 45 -4.63219 0.627021 -1.1025 118 -4.65356 -0.398212 -1.10147 61 -4.6568 -0.332238 -1.10095 79 -4.65269 -0.361331 -1.10044 72 -4.6119 0.713081 -1.10043 65 -4.60136 0.778207 -1.10042 74 -4.64709 -0.382912 -1.0994 57 -4.65348 -0.295255 -1.0994 95 -4.60351 0.741452 -1.09939 90 -4.60391 0.726694 -1.09887 63 -4.6461 -0.346095 -1.09836 77 -4.58852 0.761303 -1.09628 61 -4.63704 -0.27949 -1.09474 49 -4.61923 0.492901 -1.09473 255 -4.62909 -0.162323 -1.09111 115 -4.62829 -0.125898 -1.09059 90 -4.59005 0.606889 -1.09058 70 -4.59084 0.570365 -1.08955 79 -4.6236 -0.0748739 -1.08904 94 -4.59241 0.541293 -1.08903 72 -4.67443 0.928872 -1.08892 61 -4.58427 0.591521 -1.08851 78 -4.66959 0.943159 -1.08842 62 -4.61901 -0.111071 -1.088 91 -4.61413 -0.1472 -1.08697 87 -4.73616 -0.456168 -1.08692 15 -4.61118 -0.176104 -1.08645 83 -4.61354 -0.0964047 -1.08645 90 -4.61415 -0.0601685 -1.08645 98 -4.58531 0.518615 -1.08644 71 -4.6126 -0.00941538 -1.08593 85 -4.61261 0.00507585 -1.08593 81 -4.60319 -0.262744 -1.08541 66 -4.60343 0.258435 -1.08541 255 -4.60871 0.0195724 -1.08489 102 -4.60752 0.106436 -1.08489 255 -4.60607 0.157091 -1.08489 255 -4.57534 0.553948 -1.08489 85 -4.60052 -0.240826 -1.08438 72 -4.60466 -0.0455211 -1.08386 100 -4.60289 -0.023802 -1.08334 105 -4.59423 -0.211516 -1.08231 91 -4.59517 -0.189863 -1.08231 65 -4.65499 0.886912 -1.08188 46 -4.65076 0.908839 -1.08188 61 -4.59697 0.0412526 -1.08179 110 -4.58775 -0.22563 -1.08075 73 -4.56578 0.502005 -1.08074 216 -4.71251 -0.43909 -1.08038 56 -4.71193 -0.424119 -1.07988 63 -4.7966 1.01913 -1.07924 50 -4.67474 0.701686 -1.07886 104 -4.66678 0.715459 -1.07735 74 -4.66671 0.662971 -1.07534 87 -4.66353 0.684955 -1.07534 94 -4.63194 0.852235 -1.07433 50 -4.62734 0.866416 -1.07382 56 -4.64808 0.734939 -1.07332 75 -4.65536 0.646369 -1.07181 88 -4.68108 -0.399295 -1.07132 80 -4.68231 -0.384588 -1.07132 52 -4.63811 0.748263 -1.07131 52 -4.62707 0.813755 -1.07131 49 -4.65357 0.616312 -1.0703 91 -4.65161 0.630928 -1.0703 88 -4.62579 0.798536 -1.0703 48 -4.76366 0.996697 -1.07 48 -4.61557 0.834131 -1.06929 54 -4.64875 0.593352 -1.06829 92 -4.64867 0.578496 -1.06779 74 -4.64279 0.562914 -1.06577 78 -4.66033 -0.368174 -1.06528 42 -4.64836 0.497007 -1.06527 255 -4.60902 0.758282 -1.06426 62 -4.64403 0.422816 -1.06225 255 -4.64057 0.459275 -1.06225 255 -4.63169 0.524604 -1.06175 53 -4.65702 -0.147829 -1.06125 85 -4.6281 0.538917 -1.06124 84 -4.59396 0.777989 -1.06124 63 -4.73516 0.952181 -1.06076 64 -4.73062 0.974485 -1.06076 59 -4.63428 0.443913 -1.06024 255 -4.64183 -0.33017 -1.05974 55 -4.65073 -0.162289 -1.05974 88 -4.63696 0.392757 -1.05974 255 -4.64188 -0.300883 -1.05924 69 -4.63377 0.407141 -1.05923 255 -4.7267 0.935104 -1.05785 75 -4.63305 -0.344221 -1.05773 65 -4.63512 -0.315104 -1.05773 64 -4.63184 0.275226 -1.05621 255 -4.62904 0.318866 -1.05621 255 -4.6264 0.355212 -1.05621 255 -4.63472 -0.176396 -1.05572 69 -4.63753 0.0712646 -1.05571 255 -4.63424 -0.132664 -1.05521 85 -4.63288 -0.110789 -1.05471 96 -4.62786 0.202056 -1.0542 255 -4.62686 0.223862 -1.0542 255 -4.77804 -0.486893 -1.05397 39 -4.62284 -0.263326 -1.0537 64 -4.62364 -0.248802 -1.0537 63 -4.62933 -0.0961756 -1.0537 83 -4.62954 0.085646 -1.0537 255 -4.62006 -0.277741 -1.0532 67 -4.62252 0.136342 -1.05219 255 -4.61703 -0.226674 -1.05169 64 -4.61989 0.158046 -1.05169 255 -4.61578 -0.21209 -1.05119 65 -4.61743 0.172475 -1.05118 255 -4.61453 0.237735 -1.05118 255 -4.61107 0.186714 -1.04967 255 -4.60869 -0.197301 -1.04917 65 -4.6953 0.913766 -1.0491 59 -4.60199 0.2878 -1.04866 255 -4.60445 -0.081328 -1.04716 86 -4.60478 -0.0596294 -1.04716 95 -4.6862 0.889171 -1.04569 63 -4.59539 -0.0306852 -1.04464 105 -4.68324 0.873408 -1.04423 63 -4.5914 -0.0451061 -1.04363 99 -4.73204 -0.45942 -1.04182 19 -4.58387 -0.0090739 -1.04162 104 -4.7296 -0.444168 -1.04084 60 -4.67259 0.856317 -1.04083 75 -4.57997 0.0196893 -1.04061 123 -4.57795 0.0340525 -1.04011 118 -4.5742 0.00526197 -1.0391 105 -4.66702 0.832636 -1.0384 83 -4.56999 0.0554879 -1.0381 183 -4.41273 0.423044 -1.03775 255 -4.71552 -0.427821 -1.03695 75 -4.41326 0.374195 -1.03672 255 -4.41019 0.408845 -1.03672 255 -4.40543 0.457312 -1.03672 255 -4.40369 0.436189 -1.03568 255 -4.65685 0.80075 -1.03451 83 -4.40479 0.3596 -1.03413 255 -4.4075 0.297174 -1.03361 255 -4.40052 0.387109 -1.03361 255 -4.70396 -0.404356 -1.03355 78 -4.40462 0.310896 -1.03309 255 -4.40362 0.324731 -1.03309 255 -4.40718 0.199956 -1.03206 255 -4.40391 0.26224 -1.03206 255 -4.39873 0.338291 -1.03206 255 -4.69868 -0.374134 -1.03161 97 -4.40824 0.116812 -1.03154 255 -4.40114 0.275964 -1.03154 255 -4.40421 0.179052 -1.03102 255 -4.40267 0.213635 -1.03102 255 -4.64766 0.761726 -1.03062 91 -4.40377 0.137487 -1.03051 255 -4.69168 -0.388382 -1.03015 88 -4.64211 0.783306 -1.03013 91 -4.63709 0.812458 -1.03013 75 -4.40346 0.0682786 -1.02999 255 -4.40089 0.165092 -1.02999 255 -4.39812 0.22729 -1.02999 255 -4.39729 0.0889465 -1.02843 255 -4.63701 0.730179 -1.02673 100 -4.6347 0.744743 -1.02673 95 -4.67856 -0.357627 -1.02626 92 -4.68019 -0.335576 -1.02626 98 -4.63848 0.708038 -1.02625 85 -4.3882 0.0543453 -1.02585 234 -4.6712 0.422564 -1.02576 255 -4.66773 0.459238 -1.02576 255 -4.66627 0.473899 -1.02576 255 -4.63323 0.677529 -1.02381 96 -4.63108 0.692082 -1.02381 89 -4.66381 -0.319581 -1.02188 101 -4.63353 0.57389 -1.02041 105 -4.62292 0.65386 -1.02041 103 -4.65512 -0.30424 -1.01945 94 -4.64876 -0.281787 -1.0175 103 -4.61341 0.637805 -1.01749 107 -4.62767 0.506925 -1.01701 229 -4.64656 -0.25234 -1.01653 96 -4.61629 0.586572 -1.01652 89 -4.61155 0.62281 -1.01652 115 -4.64576 -0.230336 -1.01604 99 -4.64468 -0.164476 -1.01507 87 -4.64604 0.120193 -1.01507 255 -4.64519 0.149383 -1.01507 255 -4.64444 0.171271 -1.01507 255 -4.64155 0.23691 -1.01507 255 -4.64078 0.251491 -1.01507 255 -4.63866 0.287932 -1.01507 255 -4.63774 0.302503 -1.01507 255 -4.63413 0.353479 -1.01507 255 -4.62996 0.404411 -1.01507 255 -4.638 -0.266449 -1.01459 108 -4.6437 0.134742 -1.01458 255 -4.62928 0.389712 -1.01458 255 -4.61218 0.556669 -1.01458 100 -4.63567 0.273151 -1.01409 255 -4.44872 0.488687 -1.01343 255 -4.63484 -0.215133 -1.01313 103 -4.6361 -0.186008 -1.01313 120 -4.60897 0.534291 -1.01312 105 -4.60001 0.606619 -1.01312 114 -4.60869 0.519603 -1.01263 120 -4.72972 1.00992 -1.01201 59 -4.63205 -0.13482 -1.01167 98 -4.62966 -0.149297 -1.01118 130 -4.62355 -0.0836495 -1.00924 105 -4.71766 0.991772 -1.00827 53 -4.61612 -0.199625 -1.00826 109 -4.61939 -0.0980705 -1.00826 104 -4.61846 0.0180506 -1.00778 130 -4.42933 0.451243 -1.00739 255 -4.6113 -0.11235 -1.00632 98 -4.61226 -0.0616397 -1.00632 110 -4.61049 -0.0471196 -1.00583 108 -4.61062 -0.0326338 -1.00583 115 -4.6107 -0.0181498 -1.00583 115 -4.61062 0.0325479 -1.00583 133 -4.60491 0.00360585 -1.00437 116 -4.41697 0.35192 -1.00185 255 -4.76927 -0.481892 -1.00175 15 -4.69564 0.96391 -1.00174 45 -4.76882 -0.466729 -1.00128 10 -4.40945 0.323395 -0.999337 255 -4.41205 0.115075 -0.997326 255 -4.40703 0.23976 -0.997324 255 -4.67961 0.9452 -0.997067 69 -4.4022 0.288065 -0.996821 255 -4.67303 0.928547 -0.994732 61 -4.40078 0.100879 -0.994306 255 -4.66972 0.904994 -0.992865 69 -4.87888 1.05205 -0.992721 48 -4.663 0.888446 -0.990531 76 -4.71479 -0.439326 -0.987744 19 -4.65454 0.848921 -0.986796 78 -4.64094 0.869004 -0.984461 71 -4.52505 0.0537518 -0.984437 255 -4.70195 -0.408432 -0.984008 66 -4.63615 0.830406 -0.98166 82 -4.633 0.814795 -0.98026 87 -4.48136 0.470376 -0.97957 255 -4.67933 -0.421402 -0.978872 61 -4.68174 -0.369784 -0.978405 72 -4.62787 0.79887 -0.978392 76 -4.66892 -0.383598 -0.975604 80 -4.6225 0.76054 -0.975591 95 -4.6693 -0.354118 -0.975137 88 -4.61626 0.774394 -0.974657 78 -4.47263 0.327944 -0.974224 255 -4.465 0.419202 -0.974223 255 -4.66651 -0.339188 -0.974203 99 -4.61912 0.745053 -0.974191 100 -4.80007 1.01973 -0.973553 75 -4.61742 0.692723 -0.971857 102 -4.65447 -0.316347 -0.970934 102 -4.61138 0.706615 -0.970923 91 -4.65442 -0.286986 -0.970467 123 -4.6053 0.720476 -0.969989 114 -4.4567 0.305769 -0.969848 255 -4.45307 0.354754 -0.969847 255 -4.6131 0.655016 -0.969523 111 -4.64767 -0.301261 -0.969066 112 -4.60717 0.668925 -0.968589 103 -4.77997 0.992082 -0.967759 67 -4.60942 0.624931 -0.967656 127 -4.64293 -0.249767 -0.967198 110 -4.64018 -0.264251 -0.966732 103 -4.64175 -0.235092 -0.966731 120 -4.60359 0.638851 -0.966722 118 -4.45309 0.0673007 -0.966447 255 -4.84924 -0.510055 -0.966438 48 -4.60268 0.601887 -0.965321 124 -4.44703 0.0812181 -0.964988 255 -4.44417 0.178986 -0.964987 255 -4.44263 0.213884 -0.964987 255 -4.60262 0.587168 -0.964855 142 -4.44482 0.0951575 -0.964502 255 -4.63374 -0.198267 -0.964396 137 -4.60252 0.572454 -0.964388 149 -4.43777 0.192729 -0.963528 255 -4.63045 -0.183577 -0.963462 150 -4.62692 -0.219858 -0.962996 128 -4.60108 0.535582 -0.962987 162 -4.59551 0.549551 -0.962054 157 -4.62441 -0.132474 -0.961594 165 -4.59694 0.520436 -0.961587 182 -4.61545 -0.168548 -0.959727 148 -4.6162 -0.146797 -0.959727 159 -4.74673 0.969839 -0.959289 64 -4.6112 -0.117673 -0.958326 175 -4.60975 -0.0959138 -0.957859 187 -4.60809 -0.0814077 -0.957392 188 -4.60638 -0.0669131 -0.956925 198 -4.6047 -0.0451975 -0.956457 203 -4.73636 0.952303 -0.956169 124 -4.57769 0.481742 -0.955985 235 -4.59206 0.287087 -0.95552 232 -4.58078 0.431187 -0.955518 224 -4.5787 0.452767 -0.955518 225 -4.57725 0.46715 -0.955518 229 -4.58448 0.36622 -0.955052 229 -4.73359 0.936316 -0.954832 89 -4.58948 0.265198 -0.954586 233 -4.58528 0.330051 -0.954586 230 -4.59509 -0.0307209 -0.954123 214 -4.58532 0.301097 -0.954119 232 -4.57631 0.416231 -0.954118 224 -4.57979 0.351336 -0.953652 230 -4.5775 0.380105 -0.953651 225 -4.57565 0.401672 -0.953651 223 -4.56457 0.494798 -0.953183 222 -4.79266 -0.488573 -0.953065 28 -4.5891 0.0485822 -0.952721 230 -4.58882 0.0702081 -0.952721 231 -4.57853 0.315067 -0.952718 231 -4.72645 0.911844 -0.952157 89 -4.58544 -0.0163052 -0.951788 215 -4.58547 -0.00190033 -0.951788 218 -4.58348 0.0196896 -0.951321 219 -4.57476 0.249843 -0.950851 235 -4.57951 0.0340382 -0.950387 222 -4.57857 0.0987735 -0.950386 235 -4.57359 0.235357 -0.950385 236 -4.72162 0.895579 -0.950375 97 -4.7806 -0.472099 -0.949944 64 -4.57691 0.0843418 -0.949919 235 -4.56882 0.213498 -0.948984 238 -4.71674 0.879353 -0.948592 95 -4.71123 0.855427 -0.946363 107 -4.56074 0.112625 -0.946184 239 -4.55781 0.198569 -0.946183 239 -4.7069 0.824179 -0.944135 97 -4.94232 1.0762 -0.943942 25 -4.54461 0.13357 -0.942448 240 -4.74714 -0.453551 -0.94192 79 -4.74923 -0.431174 -0.94192 85 -4.70168 0.785323 -0.941461 103 -4.69919 0.800089 -0.94146 127 -4.74668 -0.415891 -0.941028 109 -4.68892 0.836309 -0.940568 115 -4.69834 0.769634 -0.940123 109 -4.74019 -0.400277 -0.939245 110 -4.52927 0.182904 -0.93918 241 -4.69496 0.753974 -0.938786 108 -4.7362 -0.377439 -0.937907 126 -4.51891 0.146879 -0.936379 255 -4.7284 -0.324476 -0.935232 113 -4.72376 -0.361443 -0.934787 123 -4.67918 0.728945 -0.934329 115 -4.67952 0.713959 -0.933883 122 -4.50288 0.160433 -0.932643 255 -4.71578 -0.308653 -0.932112 119 -4.71478 -0.293704 -0.931666 127 -4.70738 -0.34522 -0.930775 134 -4.67561 0.645942 -0.930764 161 -4.67356 0.660626 -0.930763 148 -4.67146 0.675306 -0.930763 135 -4.67667 0.623653 -0.930318 172 -4.66437 0.696757 -0.929872 124 -4.70638 -0.27087 -0.929437 128 -4.70215 -0.240961 -0.928099 135 -4.667 0.607512 -0.927644 179 -4.8693 1.04388 -0.927066 24 -4.6951 -0.225771 -0.926316 135 -4.69611 -0.203643 -0.926315 142 -4.66931 0.540835 -0.926307 85 -4.68969 -0.255033 -0.925425 136 -4.66177 0.502955 -0.923633 101 -4.68366 -0.173552 -0.923195 156 -4.68443 -0.151478 -0.923195 164 -4.64953 0.590499 -0.923186 185 -4.68115 -0.188175 -0.922749 147 -4.6516 0.524087 -0.92185 134 -4.64821 0.553304 -0.921849 91 -4.67896 -0.0336107 -0.92141 113 -4.66555 0.35559 -0.921406 85 -4.6759 -0.107045 -0.920965 160 -4.66625 0.318814 -0.920961 84 -4.66246 0.370102 -0.92096 88 -4.92437 -0.509048 -0.920753 24 -4.63781 0.574287 -0.920066 126 -4.84167 1.01394 -0.919895 24 -4.66929 -0.13622 -0.919628 167 -4.64587 0.486577 -0.919621 127 -4.669 -0.0554889 -0.919182 113 -4.66933 -0.00414797 -0.919181 78 -4.66643 0.164513 -0.919179 101 -4.6658 -0.121427 -0.918737 150 -4.66661 -0.0847782 -0.918736 201 -4.66734 -0.0187986 -0.918736 79 -4.66132 0.237701 -0.918733 82 -4.65974 0.266984 -0.918732 85 -4.64566 0.449719 -0.91873 104 -4.6654 0.0178612 -0.918289 75 -4.66347 0.135098 -0.918288 84 -4.65355 0.332703 -0.918286 83 -4.64961 0.38385 -0.918285 91 -4.66211 0.113084 -0.917843 85 -4.63961 0.471234 -0.917838 132 -4.66102 0.0691221 -0.917397 85 -4.65913 0.149645 -0.917396 88 -4.65471 0.25206 -0.917395 81 -4.64123 0.434609 -0.917393 108 -4.65934 0.0471482 -0.916952 89 -4.65883 0.0837408 -0.916951 86 -4.65586 0.186166 -0.91695 78 -4.63998 0.405122 -0.916502 98 -4.63868 0.419696 -0.916502 94 -4.65516 -0.0698771 -0.916061 146 -4.6507 0.215258 -0.916058 85 -4.64719 0.280981 -0.916057 79 -4.64582 0.302878 -0.916057 83 -4.64941 0.200572 -0.915613 92 -4.65074 0.0982557 -0.915168 83 -4.64582 0.0324919 -0.913832 83 -4.87336 0.626528 -0.912727 106 -4.88313 -0.489513 -0.911471 24 -4.80084 0.989415 -0.910191 24 -4.7867 0.970739 -0.906394 24 -4.8662 1.05718 -0.904096 21 -4.83459 0.605892 -0.903867 36 -4.84592 -0.447587 -0.902611 24 -4.83986 -0.470062 -0.901767 24 -4.76866 0.951377 -0.901754 29 -4.82782 -0.430729 -0.898392 23 -4.75584 0.92544 -0.897957 29 -4.81185 0.549215 -0.897539 136 -4.8194 0.458226 -0.897118 84 -4.8105 0.526088 -0.896696 98 -4.8215 0.389714 -0.896275 88 -4.75105 0.908985 -0.89627 30 -4.75958 0.841027 -0.895427 23 -4.81685 0.37408 -0.89501 105 -4.80746 0.479909 -0.895009 74 -4.81581 0.305544 -0.893745 90 -4.80525 0.441569 -0.893743 77 -4.76328 0.772365 -0.89374 23 -4.80577 -0.413674 -0.893329 23 -4.79658 0.509238 -0.893321 91 -4.73661 0.890708 -0.892473 56 -4.75063 0.800938 -0.892052 23 -4.7468 0.823315 -0.892052 23 -4.80744 0.282223 -0.891636 97 -4.74927 0.78535 -0.891208 23 -4.73499 0.86729 -0.891208 59 -4.80119 0.213744 -0.889527 83 -4.79323 0.349392 -0.889525 111 -4.79982 0.14571 -0.888684 103 -4.79141 -0.253744 -0.887843 23 -4.79781 0.0551482 -0.887841 67 -4.78558 0.318566 -0.887416 60 -4.77842 -0.388803 -0.887001 33 -4.79012 0.198112 -0.886995 69 -4.71847 0.848845 -0.886989 60 -4.78683 0.228102 -0.886573 81 -4.78714 0.107626 -0.885731 98 -4.78329 1.02391 -0.885504 41 -4.78623 0.0399144 -0.885309 98 -4.7717 -0.290395 -0.884047 23 -4.73966 0.623773 -0.884038 51 -4.76911 -0.267708 -0.883203 23 -4.77485 0.129802 -0.883199 87 -4.75795 0.421888 -0.883196 101 -4.75151 0.489108 -0.883196 70 -4.76237 -0.342454 -0.882781 60 -4.7746 0.0247518 -0.882778 80 -4.76679 -0.237564 -0.882359 23 -4.73847 0.570643 -0.882351 45 -4.75905 -0.304699 -0.881516 28 -4.76147 0.264261 -0.88151 105 -4.762 -0.214866 -0.881093 57 -4.70705 0.740169 -0.880662 26 -4.74957 -0.356601 -0.88025 68 -4.75832 0.159192 -0.879824 188 -4.83835 -0.501356 -0.879735 45 -4.74637 -0.318926 -0.878984 50 -4.75699 -0.0277409 -0.878982 57 -4.74041 0.397721 -0.878978 59 -4.70163 0.724146 -0.878974 29 -4.73867 -0.370811 -0.878141 68 -4.75254 0.076784 -0.878137 94 -4.75354 0.99433 -0.878067 49 -4.74607 0.173646 -0.877292 162 -4.70172 0.656204 -0.876866 34 -4.74116 -0.19912 -0.876452 30 -4.74176 -0.184224 -0.876452 29 -4.70183 0.641154 -0.876444 56 -4.73859 0.0913766 -0.875184 118 -4.74321 0.976702 -0.875175 59 -4.68804 0.669249 -0.874334 63 -4.73359 -0.0128611 -0.873919 36 -4.73361 0.00201013 -0.873919 68 -4.72715 0.247271 -0.873917 67 -4.72217 0.328909 -0.873916 78 -4.73121 -0.0648911 -0.873497 61 -4.67877 0.705445 -0.87349 29 -4.919 1.07339 -0.873228 71 -4.72951 -0.0425896 -0.873075 77 -4.67625 0.682509 -0.872225 55 -4.7309 0.958769 -0.87187 71 -4.72082 -0.168678 -0.871811 29 -4.70752 -0.0794892 -0.868435 51 -4.7166 0.94055 -0.868152 73 -4.77957 -0.479767 -0.866926 21 -4.69894 -0.116309 -0.866748 78 -4.76252 0.61162 -0.866503 185 -4.70944 0.916134 -0.865673 78 -4.69357 -0.0940786 -0.865482 81 -4.69029 -0.145631 -0.86506 31 -4.69073 -0.130896 -0.86506 69 -4.70075 0.899191 -0.863194 84 -4.69879 0.845433 -0.860716 63 -4.94511 -0.516619 -0.860536 42 -4.69008 0.88196 -0.860302 87 -4.75144 -0.424048 -0.859902 78 -4.74407 -0.460953 -0.859076 22 -4.68455 0.85814 -0.858237 78 -4.85124 1.03428 -0.858138 54 -4.69674 0.776763 -0.857824 131 -4.68792 0.828359 -0.857824 70 -4.73256 -0.437257 -0.856184 65 -4.73826 -0.37031 -0.856183 59 -4.74489 -0.2361 -0.855769 163 -4.67826 0.804012 -0.854932 51 -4.73745 -0.265548 -0.854529 71 -4.73074 -0.339778 -0.854117 53 -4.73224 -0.28761 -0.853703 93 -4.72157 -0.406263 -0.853291 86 -4.7324 -0.250321 -0.85329 78 -4.72546 -0.30207 -0.852464 86 -4.67174 0.735154 -0.851214 47 -4.72638 0.0918188 -0.850808 117 -4.72571 0.121514 -0.850807 109 -4.72322 0.195728 -0.850807 96 -4.70723 -0.39005 -0.849986 77 -4.67904 0.616296 -0.84915 93 -4.71629 0.1065 -0.848742 102 -4.70497 -0.315496 -0.848332 67 -4.71335 0.14349 -0.848328 101 -4.71288 0.158296 -0.848328 130 -4.70108 0.34307 -0.847913 76 -4.65394 0.747429 -0.847908 24 -4.80464 1.00831 -0.847813 52 -4.69844 -0.352126 -0.847506 63 -4.69629 0.379834 -0.847499 93 -4.67116 0.585489 -0.846671 138 -4.65274 0.717311 -0.846669 70 -4.82268 0.886153 -0.846623 140 -4.6916 0.364656 -0.84626 91 -4.66349 0.629236 -0.846257 74 -4.7982 0.991172 -0.845828 52 -4.87334 -0.486307 -0.845446 17 -4.70121 0.0766954 -0.845436 116 -4.81218 0.899818 -0.845035 133 -4.65048 0.679658 -0.845017 60 -4.81581 0.869205 -0.844638 141 -4.69084 0.172429 -0.843783 137 -4.68795 -0.19605 -0.843373 63 -4.67361 0.392902 -0.842954 71 -4.79047 0.950324 -0.842651 19 -4.65616 0.54661 -0.842539 67 -4.6356 0.699877 -0.842538 60 -4.68152 0.208961 -0.84213 102 -4.66648 0.429259 -0.842128 100 -4.65054 0.560788 -0.841713 92 -4.80442 0.843707 -0.841461 68 -4.6372 0.648083 -0.841299 77 -4.6803 -0.0117556 -0.840893 83 -4.68 0.0544113 -0.840892 95 -4.65253 0.509214 -0.840887 112 -4.65008 0.531134 -0.840887 118 -4.77634 0.970884 -0.840665 64 -4.67548 -0.0925191 -0.840067 62 -4.67632 -0.0264145 -0.840066 96 -4.67444 0.0029783 -0.839653 86 -4.65341 0.442869 -0.839648 90 -4.64979 0.479404 -0.839648 89 -4.67232 0.039684 -0.839239 109 -4.64632 0.493813 -0.839235 91 -4.67046 0.0250066 -0.838826 86 -4.84166 -0.467965 -0.838694 19 -4.64616 0.456944 -0.838409 76 -4.66313 -0.180196 -0.838002 71 -4.64636 0.41281 -0.837583 81 -4.61769 0.660254 -0.83758 155 -4.84708 -0.330533 -0.837502 28 -4.66228 -0.06288 -0.837174 95 -4.66245 -0.0482337 -0.837174 96 -4.83729 -0.383377 -0.836311 79 -4.83215 -0.398269 -0.835517 91 -4.96345 1.05624 -0.83519 78 -4.82162 -0.450861 -0.834326 64 -4.82731 -0.359765 -0.833928 55 -4.77038 0.822086 -0.833916 22 -4.64412 -0.164744 -0.83387 86 -4.81979 -0.427808 -0.833531 49 -4.81533 0.475345 -0.833523 140 -4.64445 -0.077136 -0.833456 99 -4.8172 -0.412352 -0.832737 51 -4.62792 0.323528 -0.832213 165 -4.62891 0.243336 -0.831387 160 -4.63116 -0.142359 -0.830978 128 -4.63001 -0.113199 -0.830564 164 -4.79535 0.45805 -0.829154 106 -4.61985 -0.127419 -0.828498 134 -4.60883 0.28596 -0.827668 80 -4.60858 0.256898 -0.827255 85 -4.60353 0.307436 -0.826842 143 -4.60655 0.220529 -0.826429 184 -4.73224 0.777049 -0.824783 18 -4.7266 0.799003 -0.824385 17 -4.74639 0.657322 -0.82399 93 -4.77756 -0.341244 -0.823603 43 -4.58821 0.270334 -0.823123 121 -4.72736 0.74572 -0.822797 46 -4.76821 -0.272959 -0.820822 67 -4.71532 0.758958 -0.820812 37 -4.89171 1.02532 -0.82038 106 -4.74543 0.400382 -0.818036 89 -4.75676 0.123935 -0.817244 89 -4.75062 -0.234643 -0.816851 72 -4.88148 0.967381 -0.816203 126 -4.74594 -0.249382 -0.816056 70 -4.74742 -0.219557 -0.816056 79 -4.8718 1.0053 -0.815823 51 -4.74188 -0.286542 -0.81566 57 -4.7496 0.093847 -0.815656 129 -4.74929 0.108769 -0.815656 94 -4.6929 0.724978 -0.815252 55 -4.74336 0.175731 -0.814861 110 -4.87071 0.981201 -0.814684 94 -4.72026 0.480432 -0.814461 49 -4.93371 -0.516794 -0.81318 74 -4.88362 0.825188 -0.811648 223 -4.72458 -0.203757 -0.811291 42 -4.72234 0.15998 -0.810493 106 -4.68244 0.633115 -0.810488 88 -4.6752 0.684562 -0.810487 127 -4.67302 0.699246 -0.810487 56 -4.67661 0.602376 -0.808503 100 -4.68519 0.513897 -0.808106 59 -4.68355 0.528615 -0.808106 80 -4.70919 0.0410325 -0.807317 78 -4.67357 0.579576 -0.807311 86 -4.66181 0.667563 -0.80731 86 -4.70448 -0.166003 -0.806922 74 -4.70741 0.00403203 -0.80692 99 -4.90289 -0.490045 -0.806724 122 -4.67323 0.549719 -0.806518 64 -4.66499 0.615729 -0.806517 104 -4.70296 0.0705001 -0.806125 91 -4.69806 -0.180588 -0.805731 22 -4.70128 -0.0476999 -0.805729 83 -4.70149 0.0187661 -0.805729 85 -4.85502 0.781375 -0.804813 179 -4.67779 0.409115 -0.804533 75 -4.66175 0.563169 -0.804532 78 -4.89818 -0.388672 -0.804065 109 -4.68779 -0.0108194 -0.802949 79 -4.66868 0.423057 -0.802945 77 -4.68342 -0.15065 -0.802553 109 -4.6848 -0.099145 -0.802553 52 -4.68347 -0.0623326 -0.802155 83 -4.81118 0.938148 -0.801773 58 -4.68129 -0.0770237 -0.801758 77 -4.67662 -0.113714 -0.800965 90 -4.64977 0.495028 -0.800561 47 -4.88038 -0.36402 -0.800267 161 -4.67036 -0.128277 -0.799773 124 -4.65683 0.377684 -0.799768 106 -4.66641 0.187142 -0.799373 59 -4.66788 0.0551117 -0.798977 71 -4.65921 0.289577 -0.798975 88 -4.66613 -0.032878 -0.798581 83 -4.66427 0.135686 -0.798579 58 -4.64989 0.340328 -0.797783 73 -4.64684 0.354773 -0.797386 117 -4.79328 0.895778 -0.796836 47 -4.85166 -0.469254 -0.796471 42 -4.78708 0.917995 -0.796457 50 -4.79495 0.864966 -0.796077 65 -4.64116 0.324978 -0.795798 91 -4.6425 0.2738 -0.795401 114 -4.64327 0.222634 -0.795004 138 -4.79578 0.826311 -0.794939 76 -4.64003 0.207848 -0.79421 142 -4.77867 0.877614 -0.793419 72 -4.84558 -0.223681 -0.791911 126 -4.62572 0.258133 -0.791827 106 -4.78467 0.785848 -0.791521 255 -4.62113 0.301578 -0.791429 61 -5.06626 -0.526528 -0.791151 68 -4.8238 -0.45111 -0.790774 43 -4.82864 -0.344627 -0.790014 61 -4.79913 -0.395466 -0.785078 68 -4.79392 -0.432958 -0.784698 20 -4.80305 0.284474 -0.784311 101 -4.78669 0.26097 -0.780894 98 -4.7485 0.642935 -0.78051 138 -4.77923 -0.288038 -0.77976 219 -4.76853 -0.40787 -0.779381 58 -4.72545 0.746014 -0.77899 50 -4.94053 0.926629 -0.778836 84 -4.73881 0.626533 -0.778232 116 -4.91184 1.04965 -0.778111 11 -4.76507 -0.3247 -0.777482 57 -4.76642 -0.234613 -0.776721 255 -4.9948 -0.44823 -0.77668 109 -4.75871 -0.301701 -0.775963 103 -4.72807 0.602532 -0.775573 145 -4.71029 0.728558 -0.775572 65 -4.72409 0.58698 -0.774434 124 -4.70948 0.652929 -0.773294 71 -4.7044 0.674845 -0.772914 76 -4.70007 0.704391 -0.772914 73 -4.7437 -0.25579 -0.772544 255 -4.71615 0.57101 -0.772536 105 -4.90092 0.934951 -0.771962 75 -4.73504 -0.270202 -0.771025 255 -4.71099 0.547915 -0.771017 148 -4.73642 -0.203141 -0.770645 53 -4.89897 0.902673 -0.770516 179 -4.70683 0.532482 -0.769878 105 -4.71348 0.428518 -0.76912 101 -4.88103 0.954934 -0.769068 76 -4.70946 0.45055 -0.76874 92 -4.70802 0.465343 -0.768739 109 -4.70653 0.48013 -0.768739 110 -4.71089 0.413387 -0.76836 112 -4.70226 0.502107 -0.768359 100 -4.67893 0.686331 -0.768357 157 -4.94258 -0.498629 -0.767998 59 -4.72529 -0.128272 -0.767986 96 -4.72699 0.0202177 -0.767985 97 -4.72669 0.0573413 -0.767984 104 -4.86128 1.0226 -0.767982 10 -4.71144 0.383631 -0.767981 118 -4.69871 0.516673 -0.767979 104 -4.72404 -0.0985277 -0.767606 99 -4.72427 0.0870138 -0.767604 100 -4.72184 0.109241 -0.767224 105 -4.72106 0.138907 -0.767224 104 -4.7063 0.398121 -0.767221 109 -4.71978 -0.113252 -0.766847 131 -4.72091 -0.0465185 -0.766846 95 -4.71844 -0.0835492 -0.766467 99 -4.71682 -0.061276 -0.766087 99 -4.7034 0.360728 -0.766082 109 -4.71524 -0.00939522 -0.765706 95 -4.71525 0.00541845 -0.765706 128 -4.71318 -0.031592 -0.765327 123 -4.71274 0.0720574 -0.765326 103 -4.71166 0.123872 -0.765325 104 -4.71054 0.160873 -0.765325 107 -4.71113 0.0424378 -0.764946 127 -4.70609 0.175545 -0.764565 103 -4.70398 -0.179363 -0.764189 109 -4.91745 -0.472842 -0.762933 125 -4.85868 0.871357 -0.762196 67 -4.69324 -0.149364 -0.76191 144 -4.9158 -0.425997 -0.761848 59 -4.83946 0.962387 -0.761833 134 -4.86409 0.817209 -0.761473 223 -4.91903 -0.33302 -0.761123 74 -4.68294 -0.16371 -0.760011 127 -4.6718 0.30687 -0.759247 124 -4.90449 -0.370817 -0.758953 125 -5.16443 -0.541883 -0.75801 66 -4.6649 0.291744 -0.757728 111 -4.66247 0.328373 -0.757728 200 -4.66141 0.343019 -0.757728 208 -4.89637 -0.347057 -0.757144 216 -4.66626 0.188958 -0.75697 116 -4.66565 0.203616 -0.75697 92 -4.83236 0.850818 -0.756769 192 -4.64894 0.224929 -0.753931 134 -4.64625 0.239442 -0.753552 119 -4.87686 -0.315005 -0.753164 153 -4.84911 -0.397567 -0.749186 141 -4.79876 0.790372 -0.748811 198 -4.83268 -0.381035 -0.74593 217 -4.82133 -0.288915 -0.742673 155 -4.75561 0.821476 -0.741938 255 -4.99401 1.00567 -0.740861 130 -4.97244 1.0421 -0.738462 75 -4.79864 -0.272557 -0.738332 52 -4.97537 1.01828 -0.73812 208 -4.79633 -0.242223 -0.737608 134 -4.7372 0.764601 -0.736874 78 -4.78375 -0.256721 -0.735438 125 -5.03288 -0.511423 -0.73471 105 -4.96989 0.94426 -0.734694 82 -4.97089 0.92829 -0.734352 107 -4.77186 -0.218588 -0.732905 89 -4.71046 0.744949 -0.731448 85 -4.94104 0.979159 -0.730925 67 -5.01214 -0.437683 -0.729912 155 -4.94857 0.908175 -0.729898 190 -5.00681 -0.45305 -0.729227 166 -4.93204 0.953317 -0.728526 218 -4.69284 0.704299 -0.727107 77 -4.6906 0.719037 -0.727107 92 -4.70502 0.570604 -0.726023 102 -4.6892 0.688663 -0.726022 92 -4.70949 0.496198 -0.725301 106 -4.6993 0.584876 -0.7253 91 -4.68655 0.665696 -0.724937 87 -4.72042 0.325473 -0.724579 64 -4.68869 0.635962 -0.724576 88 -4.6979 0.547236 -0.724215 120 -4.68969 0.613593 -0.724214 99 -4.68473 0.650407 -0.724214 93 -4.72471 -0.0978229 -0.723498 88 -4.72523 -0.0681344 -0.723498 91 -4.71945 -0.201619 -0.723138 92 -4.69929 0.480136 -0.72313 101 -4.96782 -0.488705 -0.72306 133 -4.71892 -0.164489 -0.722776 83 -4.68379 0.597818 -0.722767 72 -4.71613 -0.186659 -0.722414 62 -4.70707 0.34678 -0.722408 85 -4.7017 0.413288 -0.722408 84 -4.70037 0.428057 -0.722407 95 -4.7132 -0.0828379 -0.721328 95 -4.71392 0.00601369 -0.721327 80 -4.71336 0.072653 -0.721326 104 -4.71173 -0.0458088 -0.720966 83 -4.68709 0.463938 -0.720598 105 -4.6817 0.515446 -0.720598 100 -4.7061 -0.134519 -0.720243 76 -4.70799 -0.0162111 -0.720242 87 -4.95773 -0.377747 -0.719632 213 -4.70172 -0.149201 -0.71952 114 -4.70328 0.0872236 -0.719517 77 -4.7008 0.175858 -0.719516 85 -4.69826 0.190534 -0.719154 86 -4.94654 -0.462963 -0.718948 197 -4.69863 -0.119578 -0.718796 120 -4.69765 0.153553 -0.718793 84 -4.69392 0.242069 -0.718792 96 -4.68338 0.396747 -0.71879 70 -4.88872 0.873739 -0.71859 136 -4.69814 0.0206668 -0.718433 85 -4.69304 0.219844 -0.71843 115 -4.69117 0.256695 -0.71843 78 -4.68243 0.35963 -0.718067 92 -4.66639 0.528525 -0.718065 77 -4.94907 -0.361402 -0.717919 172 -4.69119 0.101677 -0.717346 98 -4.67736 0.374002 -0.717344 108 -4.68631 0.138381 -0.716623 109 -4.68625 0.0352722 -0.716262 89 -4.68235 -0.0309759 -0.715539 82 -4.67331 0.292463 -0.715536 83 -4.68014 0.05725 -0.715176 91 -4.65986 0.438914 -0.715172 68 -4.67099 0.123155 -0.713729 81 -4.91796 -0.405615 -0.713122 98 -4.66228 0.203552 -0.712643 80 -4.64715 0.268694 -0.710471 160 -4.6449 0.305184 -0.710471 194 -4.8839 -0.33316 -0.706268 65 -4.87602 -0.386509 -0.705584 110 -4.81374 0.845161 -0.704885 73 -4.81245 0.806067 -0.703515 50 -4.86134 -0.316156 -0.702157 74 -4.80523 0.789399 -0.701802 59 -4.78916 0.825493 -0.700088 60 -4.79016 0.771574 -0.698718 97 -4.83478 -0.29903 -0.697359 60 -4.82434 -0.275506 -0.695303 105 -4.77658 0.731051 -0.695292 104 -4.76452 0.744585 -0.693579 95 -4.81417 -0.244525 -0.693247 121 -4.80945 -0.259416 -0.692562 157 -4.76871 0.676358 -0.692552 107 -4.76325 0.713791 -0.692551 98 -4.76886 0.661113 -0.692209 109 -4.76352 0.698547 -0.692209 131 -4.76804 0.622905 -0.691182 128 -4.76114 0.644858 -0.690496 117 -4.79362 -0.220723 -0.689478 104 -4.79233 -0.205567 -0.689135 97 -4.78592 -0.167604 -0.687764 120 -4.75041 0.605537 -0.687755 144 -4.75111 0.567762 -0.68707 159 -4.74642 0.589912 -0.686728 159 -4.74503 0.551965 -0.6857 168 -4.76933 -0.189443 -0.685023 135 -4.74087 0.536422 -0.684672 173 -4.76082 -0.151612 -0.683309 126 -4.76301 -0.0468871 -0.683308 173 -4.75971 -0.121636 -0.682966 148 -4.73273 0.520503 -0.682959 183 -4.75734 -0.13652 -0.682624 137 -4.73317 0.497999 -0.682617 193 -4.75629 -0.0991001 -0.682281 153 -4.73275 0.482938 -0.682274 200 -4.75461 -0.0841114 -0.681938 164 -4.75131 -0.0317806 -0.681252 179 -4.73051 0.445231 -0.681247 205 -4.72836 0.467518 -0.681247 202 -4.74894 -0.0690565 -0.68091 169 -4.72992 0.430199 -0.680904 208 -4.74353 -0.00187997 -0.679881 184 -4.74129 0.0502673 -0.679538 199 -4.7265 0.377581 -0.679534 211 -4.73956 -0.0167469 -0.679196 186 -4.73955 0.0204778 -0.679196 191 -4.71946 0.414369 -0.678849 213 -4.73552 0.0353587 -0.67851 193 -4.73509 0.0725511 -0.67851 206 -4.7194 0.391971 -0.678506 213 -4.73116 0.154299 -0.678166 210 -4.73038 0.176592 -0.678166 213 -4.72918 0.206311 -0.678166 211 -4.7198 0.362171 -0.678164 213 -4.72054 0.324967 -0.677822 212 -4.71895 0.347207 -0.677822 213 -4.72587 0.191315 -0.677481 212 -4.72186 0.27294 -0.67748 213 -4.72052 0.295188 -0.67748 209 -4.71957 0.310016 -0.677479 214 -4.72666 0.102174 -0.677139 206 -4.72613 0.124446 -0.677139 213 -4.72572 0.139294 -0.677139 211 -4.72072 0.258008 -0.677137 211 -4.72499 0.0872989 -0.676796 208 -4.71757 0.242995 -0.676452 210 -4.71473 0.220598 -0.675767 211 -5.0535 -0.497986 -0.674279 28 -4.92435 1.04757 -0.667262 29 -4.92344 1.02311 -0.666308 33 -4.90151 1.00237 -0.662171 33 -5.1086 -0.51164 -0.661767 67 -4.88336 0.982569 -0.65867 53 -4.87826 0.957594 -0.657079 63 -4.93115 -0.47093 -0.654228 34 -4.85219 0.936497 -0.652305 88 -4.83573 0.917466 -0.649123 36 -5.21348 1.08571 -0.648716 181 -4.89003 -0.44399 -0.647227 34 -4.93217 1.03364 -0.646869 34 -4.82254 0.891345 -0.646259 59 -4.87698 -0.41201 -0.64468 58 -4.88006 -0.373693 -0.64468 80 -4.81367 0.874013 -0.64435 62 -4.91796 1.01464 -0.644078 70 -4.81324 0.842698 -0.643395 62 -4.90561 0.996117 -0.641598 88 -4.85598 -0.42571 -0.641498 75 -4.79309 0.854602 -0.640531 61 -4.78993 0.815222 -0.63894 34 -4.89279 0.969622 -0.638808 89 -4.83984 -0.355544 -0.637997 64 -4.83555 -0.385801 -0.637679 34 -4.88131 0.935606 -0.636018 94 -4.82767 -0.331859 -0.635769 67 -4.77355 0.781486 -0.63544 33 -4.9431 -0.478532 -0.635411 57 -4.76912 0.796144 -0.635121 34 -4.8667 0.948729 -0.634157 64 -4.76549 0.757061 -0.63353 33 -4.80898 -0.315505 -0.632586 66 -4.86233 0.90836 -0.632297 92 -4.75614 0.740201 -0.631621 32 -4.79812 -0.29972 -0.630676 64 -4.74869 0.723714 -0.63003 32 -4.90329 -0.458916 -0.6289 62 -4.78721 -0.284009 -0.628767 62 -4.74119 0.707283 -0.628439 31 -4.78535 -0.24622 -0.62813 62 -4.78258 -0.261154 -0.627812 60 -4.73666 0.683763 -0.627166 32 -4.82902 0.870984 -0.626096 90 -4.82626 0.886151 -0.626096 91 -4.73304 0.652866 -0.625893 31 -4.82978 0.855474 -0.625786 89 -4.72824 0.629469 -0.624621 31 -4.72315 0.666586 -0.62462 31 -4.76346 -0.207724 -0.62431 58 -4.76045 -0.230086 -0.623992 59 -4.729 0.576694 -0.623666 31 -4.75817 -0.192552 -0.623356 57 -4.75875 -0.177602 -0.623355 32 -4.87445 -0.378897 -0.623318 97 -4.81685 0.814325 -0.622686 82 -4.75407 -0.14008 -0.6224 31 -4.86409 -0.431914 -0.622388 77 -4.86345 -0.416453 -0.622078 70 -4.71644 0.597678 -0.622075 31 -4.71454 0.612492 -0.622075 32 -4.72648 0.493606 -0.621758 31 -4.80648 0.828154 -0.621446 86 -4.85687 -0.400479 -0.620838 87 -4.74177 -0.154694 -0.620491 32 -4.71266 0.529554 -0.620166 31 -4.71097 0.544358 -0.620166 31 -4.70924 0.559155 -0.620166 31 -4.7387 -0.124815 -0.619854 31 -4.71314 0.50712 -0.619848 31 -4.79988 0.79606 -0.619586 80 -4.73781 -0.0726836 -0.619535 31 -4.73314 -0.109822 -0.618899 31 -4.73361 -0.0875176 -0.618899 31 -4.71969 0.373174 -0.618895 32 -4.73244 -0.0057252 -0.61858 31 -4.73034 -0.0354563 -0.618262 31 -4.73007 0.0611396 -0.618261 32 -4.7094 0.424482 -0.617939 31 -4.70805 0.439274 -0.617939 31 -4.79186 0.771612 -0.617726 69 -4.70249 0.476028 -0.617621 30 -4.7232 0.112972 -0.617306 31 -4.71366 0.320533 -0.617304 31 -4.70742 0.401927 -0.617303 31 -4.70271 0.453663 -0.617303 31 -4.72222 -0.0576939 -0.616989 31 -4.72253 -0.0206031 -0.616989 31 -4.72235 0.0461595 -0.616988 32 -4.72155 0.0980798 -0.616988 32 -4.71887 0.187057 -0.616987 31 -4.83643 -0.329894 -0.616806 82 -4.70472 0.386791 -0.616667 31 -5.08473 -0.484074 -0.616362 146 -4.83032 -0.359961 -0.616186 79 -4.71592 0.08311 -0.616033 32 -4.71427 0.149769 -0.616033 31 -4.70984 0.253398 -0.616032 31 -4.7126 0.0312034 -0.615397 32 -4.71077 0.134824 -0.615396 32 -4.70983 0.16442 -0.615396 32 -4.70839 0.201404 -0.615396 31 -4.7107 0.0163814 -0.615079 31 -4.70506 0.230877 -0.615077 31 -4.7031 0.267823 -0.615077 31 -4.69885 0.334282 -0.615076 31 -4.69722 0.356422 -0.615076 31 -4.69889 0.304614 -0.614758 31 -4.82413 -0.30615 -0.614636 84 -4.82507 -0.290992 -0.614635 82 -4.70182 0.215891 -0.614441 31 -4.8196 -0.343877 -0.614326 73 -4.69633 0.282208 -0.614122 31 -4.76887 0.752684 -0.613695 80 -4.76926 0.737408 -0.613385 70 -4.81018 -0.274846 -0.612155 83 -4.81142 -0.252176 -0.612155 83 -4.76486 0.713797 -0.612145 59 -4.76121 0.697995 -0.611215 78 -4.8043 -0.236626 -0.610914 83 -4.76276 0.629624 -0.609976 65 -4.75871 0.659537 -0.609975 60 -4.75163 0.681415 -0.609355 67 -4.79318 -0.220923 -0.609054 79 -4.76563 0.523717 -0.608426 73 -4.75382 0.590568 -0.607806 61 -4.78035 -0.197686 -0.606883 77 -4.78095 -0.182668 -0.606883 77 -4.74116 0.642039 -0.606875 76 -4.78069 -0.130024 -0.606572 75 -4.77755 -0.167487 -0.606263 77 -4.74824 0.536994 -0.605946 73 -4.73922 0.611511 -0.605945 71 -4.74173 0.558922 -0.605325 69 -4.73995 0.573817 -0.605325 77 -4.76659 -0.0246999 -0.604091 75 -4.75095 0.386687 -0.604087 77 -4.76226 -0.151888 -0.603782 78 -4.76167 -0.0994621 -0.603472 73 -4.73962 0.468348 -0.603466 74 -4.75936 -0.114364 -0.603162 79 -4.73539 0.490484 -0.603156 76 -4.75835 -0.0619895 -0.602851 77 -4.74805 0.318997 -0.602847 81 -4.75654 -0.0470086 -0.602541 75 -4.7299 0.50496 -0.602535 78 -4.75418 -0.0768516 -0.602231 78 -4.91062 0.996948 -0.601928 69 -4.73263 0.437702 -0.601916 72 -4.7503 0.0724794 -0.60161 81 -4.73267 0.415233 -0.601606 77 -4.90791 0.980323 -0.601045 91 -4.74655 0.0575302 -0.60099 79 -4.73001 0.400052 -0.600986 72 -4.72533 0.452036 -0.600986 72 -4.74492 0.00534495 -0.60068 81 -4.74329 0.124583 -0.600679 86 -4.74275 0.0426052 -0.60037 80 -4.74168 0.109647 -0.600369 79 -4.73966 0.176668 -0.600368 80 -4.74093 0.0202566 -0.60006 84 -4.74003 0.0947215 -0.600059 82 -4.73471 0.243563 -0.600058 74 -4.72709 0.36247 -0.600056 85 -4.73151 0.228517 -0.599438 75 -4.72534 0.332506 -0.599437 78 -4.73022 0.213574 -0.599128 77 -4.89739 0.962159 -0.598986 83 -4.73306 -0.00947314 -0.59882 77 -4.72386 0.295159 -0.598817 81 -4.72032 0.347081 -0.598816 77 -4.72364 0.265372 -0.598507 79 -4.72279 0.280211 -0.598507 79 -4.72684 0.146532 -0.598198 85 -4.72636 0.16138 -0.598198 80 -4.89411 0.93754 -0.597809 92 -4.71538 0.190729 -0.596647 79 -4.88435 0.90381 -0.595455 88 -4.94433 -0.455767 -0.595175 51 -4.87955 0.918774 -0.595161 85 -4.88134 0.887369 -0.594572 93 -4.92406 -0.438415 -0.591937 72 -4.86795 0.861163 -0.591924 91 -4.86674 0.845169 -0.591336 91 -4.91818 -0.414583 -0.59076 97 -4.86352 0.828846 -0.590453 92 -4.91454 -0.359945 -0.589583 92 -4.90885 -0.382812 -0.588994 110 -4.9017 -0.397785 -0.588112 87 -4.85177 0.803252 -0.5881 107 -4.89696 -0.327842 -0.58664 101 -4.89394 -0.343097 -0.586346 82 -4.84062 0.785714 -0.58604 99 -4.88415 -0.311647 -0.58458 93 -4.8333 0.768897 -0.584569 81 -4.88135 -0.257645 -0.583696 92 -4.87854 -0.272878 -0.583402 90 -4.87568 -0.288096 -0.583108 86 -4.8271 0.744553 -0.583098 87 -4.82973 0.713908 -0.582804 83 -4.82747 0.729077 -0.582804 87 -4.81739 0.688817 -0.58045 88 -4.85879 -0.233625 -0.580165 95 -4.81757 0.673395 -0.580156 84 -4.81975 0.642841 -0.579862 91 -4.85555 -0.218203 -0.579576 94 -4.80595 0.656309 -0.578096 91 -4.80704 0.618018 -0.577508 92 -4.84129 -0.179559 -0.577222 94 -4.80503 0.602401 -0.57692 92 -4.83644 -0.202228 -0.576634 94 -4.83788 -0.164237 -0.576633 92 -4.80298 0.586801 -0.576331 87 -4.83046 -0.148836 -0.575456 95 -4.79762 0.547886 -0.57486 89 -4.79587 0.562954 -0.57486 92 -4.82497 -0.133528 -0.574573 99 -4.82555 -0.110789 -0.574573 93 -4.80138 0.494887 -0.574567 92 -4.82279 -0.0273954 -0.573983 93 -4.79505 0.478972 -0.57339 95 -4.78949 0.531666 -0.573389 92 -4.81626 -0.0803554 -0.573101 98 -4.81658 -0.0576587 -0.573101 101 -4.79456 0.463704 -0.573096 95 -4.79472 0.440915 -0.572802 93 -4.7872 0.516172 -0.572801 92 -4.81203 -0.0954301 -0.572513 94 -4.81081 -0.0425061 -0.572218 100 -4.81093 0.0255066 -0.572217 97 -4.79214 0.425477 -0.572213 90 -4.809 0.0103784 -0.571923 94 -4.80703 -0.00473971 -0.571629 93 -4.80662 0.0632182 -0.571629 102 -4.79374 0.357374 -0.571625 97 -4.78952 0.410062 -0.571625 94 -4.79896 0.198894 -0.571039 89 -4.79814 0.168656 -0.570745 96 -4.79528 0.236469 -0.570744 84 -4.79895 0.0404563 -0.570452 101 -4.79849 0.0781457 -0.570451 98 -4.7885 0.319145 -0.570449 96 -4.7847 0.371776 -0.570448 95 -4.78351 0.386807 -0.570448 102 -4.79575 0.115772 -0.570157 97 -4.79536 0.130838 -0.570156 97 -4.79056 0.251305 -0.570155 89 -4.78751 0.303963 -0.570155 95 -4.79041 0.213573 -0.569861 86 -4.78353 0.333889 -0.56986 93 -4.79229 0.0930719 -0.569568 101 -4.78968 0.183383 -0.569567 94 -4.7858 0.266112 -0.569567 92 -4.78449 0.288663 -0.569566 96 -4.789 0.14569 -0.569273 97 -5.01616 1.00575 -0.565509 80 -5.05187 -0.477551 -0.559764 75 -4.9726 0.981019 -0.558926 85 -4.96159 0.954661 -0.556732 96 -4.95677 0.937636 -0.555635 97 -4.94994 0.9203 -0.554264 102 -4.94447 0.895248 -0.552893 87 -5.0001 -0.456539 -0.552358 77 -4.98376 -0.439172 -0.549889 93 -4.92578 0.876006 -0.549876 92 -4.97644 -0.383372 -0.548243 78 -4.91679 0.858543 -0.54823 91 -4.91751 0.842767 -0.547956 96 -4.96801 -0.414107 -0.547421 101 -4.91165 0.81801 -0.546585 101 -4.95942 -0.397655 -0.546049 104 -4.90312 0.745618 -0.543843 92 -4.94207 -0.364923 -0.543306 88 -4.89071 0.798865 -0.543294 98 -4.94176 -0.341483 -0.543031 98 -4.88928 0.782891 -0.542746 84 -4.93688 -0.325535 -0.542208 104 -4.88116 0.75808 -0.5411 92 -4.92799 -0.30935 -0.540837 101 -4.9294 -0.286124 -0.540837 101 -4.87994 0.726552 -0.540278 105 -4.87939 0.703002 -0.539729 104 -4.91643 -0.269804 -0.538917 105 -4.91132 -0.254018 -0.538094 92 -4.91316 -0.215437 -0.538093 90 -4.86783 0.685808 -0.53781 103 -4.868 0.670252 -0.537535 104 -4.90653 -0.230562 -0.537271 93 -4.86615 0.654448 -0.536987 87 -4.86912 0.600439 -0.536439 95 -4.89544 -0.160647 -0.53535 99 -4.89265 -0.183631 -0.535076 86 -4.89394 -0.145198 -0.535075 101 -4.8554 0.614305 -0.534793 91 -4.85345 0.629555 -0.534793 88 -4.85614 0.575706 -0.534245 117 -4.85573 0.544762 -0.533697 86 -4.85399 0.560014 -0.533697 101 -4.88305 -0.106435 -0.533429 92 -4.87819 -0.198363 -0.533156 88 -4.87853 -0.12932 -0.532881 110 -4.85156 0.490395 -0.532326 106 -4.87402 -0.0525778 -0.532057 97 -4.84802 0.505438 -0.532052 90 -4.87147 -0.0908089 -0.531784 85 -4.87173 -0.075504 -0.531783 102 -4.85524 0.383158 -0.531504 92 -4.84247 0.520265 -0.531503 90 -4.84876 0.436352 -0.531229 104 -4.85007 0.398105 -0.530956 90 -4.84395 0.46663 -0.530955 104 -4.86439 -0.00657367 -0.530686 92 -4.84616 0.420796 -0.530681 86 -4.85458 0.275893 -0.530408 92 -4.83947 0.45089 -0.530132 86 -4.85831 -0.0370607 -0.529863 107 -4.85742 0.100303 -0.529862 96 -4.85648 0.138449 -0.529861 98 -4.85597 0.0697636 -0.529588 95 -4.84633 0.31366 -0.529585 99 -4.84259 0.366929 -0.529585 94 -4.85426 0.0468702 -0.529314 95 -4.85246 -0.0217378 -0.52904 94 -4.85241 0.0316184 -0.52904 96 -4.85114 0.115452 -0.529039 96 -4.8481 0.206868 -0.529038 92 -4.84632 0.244938 -0.529037 92 -4.84137 0.328637 -0.529036 96 -4.8478 0.0849215 -0.52849 96 -4.84561 0.16867 -0.528489 92 -4.84476 0.191502 -0.528489 93 -4.83938 0.297988 -0.528488 93 -4.84456 0.0163883 -0.527942 95 -4.8324 0.343325 -0.527939 94 -4.83753 0.221699 -0.527666 101 -4.83225 0.15308 -0.52657 95 -4.82574 0.259206 -0.526294 94 -5.3988 1.06189 -0.526213 55 -5.28194 -0.461437 -0.499213 57 -5.19409 1.00367 -0.497594 40 -5.15702 0.954327 -0.491442 40 -5.22211 -0.439987 -0.490921 44 -5.14858 0.977859 -0.490907 40 -5.21552 -0.398253 -0.489583 40 -5.14636 0.935572 -0.48957 40 -5.20686 -0.381193 -0.488246 40 -5.19778 -0.421623 -0.487443 40 -5.13368 0.916534 -0.48743 40 -5.19814 -0.364188 -0.486908 40 -5.12233 0.889542 -0.485291 40 -5.11924 0.872417 -0.484489 40 -5.11616 0.830547 -0.483152 40 -5.10633 0.853637 -0.482349 40 -5.15034 -0.336707 -0.480221 40 -5.09137 0.809971 -0.479407 40 -5.09561 0.769654 -0.47914 40 -5.14148 -0.319959 -0.478883 40 -5.1385 -0.303591 -0.478348 40 -5.09213 0.752742 -0.478338 40 -5.08606 0.792712 -0.478337 40 -5.29478 1.00664 -0.476665 40 -5.07851 0.693646 -0.475396 40 -5.0729 0.733511 -0.475396 40 -5.07322 0.717284 -0.475129 40 -5.1137 -0.286137 -0.474871 40 -5.11579 -0.245966 -0.474871 40 -5.0819 0.637251 -0.474862 40 -5.11301 -0.261944 -0.474603 40 -5.07295 0.660395 -0.474059 40 -5.06888 0.676057 -0.473792 40 -5.10828 -0.189384 -0.473533 40 -5.10568 -0.205362 -0.473265 40 -5.07011 0.61953 -0.47299 40 -5.09277 -0.228947 -0.471661 40 -5.0622 0.602378 -0.471653 40 -5.0942 -0.132873 -0.471392 40 -5.08903 -0.172764 -0.470858 40 -5.05816 0.585757 -0.47085 40 -5.46067 1.04203 -0.470635 155 -5.08385 -0.148637 -0.470055 40 -5.06608 0.449938 -0.470049 40 -5.08106 -0.100659 -0.46952 40 -5.08201 -0.0208362 -0.469519 40 -5.05845 0.489309 -0.469514 40 -5.05688 0.5052 -0.469514 40 -5.05445 0.529023 -0.469514 40 -5.07874 -0.116586 -0.469252 40 -5.05079 0.544677 -0.469246 40 -5.04905 0.560542 -0.469246 40 -5.07591 -0.0447622 -0.468717 40 -5.07178 -0.0606827 -0.468182 40 -5.06386 0.289721 -0.468179 40 -5.05301 0.416713 -0.46791 40 -5.04812 0.472248 -0.467909 40 -5.0676 -0.0765754 -0.467647 40 -5.06629 0.138353 -0.467645 40 -5.0662 -0.00493614 -0.467379 40 -5.06553 0.0825976 -0.467378 40 -5.06081 0.233719 -0.467377 40 -5.05097 0.392568 -0.467375 40 -5.04575 0.432047 -0.467107 40 -5.05853 0.193794 -0.466842 40 -5.05982 0.0665743 -0.466576 40 -5.05914 0.106313 -0.466576 40 -5.05826 0.0109222 -0.466309 40 -5.05802 0.050649 -0.466309 40 -5.05568 0.161859 -0.466307 40 -5.0481 0.320582 -0.466306 40 -5.04543 0.36022 -0.466306 40 -5.05419 0.0347094 -0.465774 40 -5.04258 0.344078 -0.465771 40 -5.04921 0.177502 -0.465505 40 -5.03835 0.375597 -0.465503 40 -5.04117 0.304204 -0.465236 40 -5.04223 0.248648 -0.464969 40 -5.04143 0.264487 -0.464969 40 -5.20424 0.972965 -0.464431 40 -5.03776 0.216676 -0.464167 40 -5.03897 0.121625 -0.463901 40 -5.26849 -0.459095 -0.46368 63 -5.15798 0.93944 -0.457804 40 -5.21458 -0.437622 -0.456543 40 -5.154 0.905345 -0.45653 40 -5.14722 0.920853 -0.45602 40 -5.21065 -0.412543 -0.455778 40 -5.20995 -0.396012 -0.455523 40 -5.4099 -0.468818 -0.454726 42 -5.20325 -0.379028 -0.454503 40 -5.19024 -0.337042 -0.452464 40 -5.1269 0.875858 -0.452452 40 -5.17926 -0.352623 -0.45119 40 -5.17742 -0.31981 -0.45068 40 -5.11396 0.857203 -0.450413 40 -5.10683 0.839572 -0.449139 40 -5.16303 -0.294424 -0.44864 40 -5.1016 0.822301 -0.448119 40 -5.15799 -0.277853 -0.447875 40 -5.10346 0.797955 -0.447865 40 -5.15567 -0.245231 -0.447365 40 -5.15347 -0.204555 -0.446855 40 -5.1021 0.740418 -0.446591 40 -5.14299 -0.260764 -0.445836 40 -5.14501 -0.163707 -0.445581 40 -5.11122 0.611065 -0.445573 40 -5.10927 0.62712 -0.445573 40 -5.0907 0.763315 -0.445571 40 -5.26315 0.986241 -0.445402 59 -5.08632 0.779015 -0.445316 40 -5.13894 -0.220079 -0.445071 40 -5.09813 0.682754 -0.445062 40 -5.13625 -0.18762 -0.444561 40 -5.11114 0.521706 -0.444299 40 -5.13517 -0.0745545 -0.44405 40 -5.1075 0.537563 -0.444044 40 -5.10128 0.593688 -0.444044 40 -5.08475 0.721698 -0.444042 40 -5.13262 -0.106767 -0.443796 40 -5.11261 0.465136 -0.44379 40 -5.08503 0.705457 -0.443788 40 -5.09918 0.577234 -0.443534 40 -5.25213 0.9585 -0.443443 40 -5.51136 1.02757 -0.443417 20 -5.08647 0.665002 -0.443278 40 -5.10125 0.480316 -0.442516 40 -5.09395 0.552382 -0.442515 40 -5.12149 -0.058193 -0.442266 40 -5.10219 0.44809 -0.442261 40 -5.11774 -0.146606 -0.442012 40 -5.11905 -0.0903252 -0.442011 40 -5.10226 0.423888 -0.442006 40 -5.1162 -0.130466 -0.441757 40 -5.08984 0.495428 -0.441241 40 -5.10981 -0.0339174 -0.440737 40 -5.09474 0.366967 -0.440478 40 -5.22974 0.93732 -0.440258 57 -5.08972 0.40682 -0.440222 40 -5.06491 0.646128 -0.44022 40 -5.08702 0.390545 -0.439713 40 -5.09006 -0.017695 -0.438187 40 -5.07517 0.333628 -0.437674 40 -5.07662 0.125977 -0.436657 40 -5.07548 0.165845 -0.436656 40 -5.20141 0.915227 -0.436339 60 -5.07422 -0.00161858 -0.436148 40 -5.06574 0.29313 -0.436145 40 -5.06898 0.181606 -0.435892 40 -5.06668 0.237331 -0.435891 40 -5.26099 -0.415044 -0.435862 40 -5.06822 0.0222984 -0.435383 40 -5.06812 0.0382208 -0.435383 40 -5.05886 0.308713 -0.43538 40 -5.05628 0.348434 -0.43538 40 -5.19784 0.889329 -0.435359 60 -5.06568 0.0780039 -0.435128 40 -5.06541 0.0939169 -0.435128 40 -5.1967 0.872318 -0.434869 63 -5.25237 -0.397813 -0.434637 40 -5.06203 0.0541098 -0.434618 40 -5.06113 0.109766 -0.434618 40 -5.06011 0.149511 -0.434617 40 -5.05618 0.205071 -0.434362 40 -5.19158 0.854661 -0.433889 60 -5.04683 0.276233 -0.433597 40 -5.24345 -0.355803 -0.433167 61 -5.0456 0.220571 -0.433087 40 -5.04213 0.252179 -0.432832 40 -5.23775 -0.380239 -0.432677 58 -5.18184 0.827925 -0.432175 63 -5.1791 0.794108 -0.431195 61 -5.17658 0.810375 -0.431195 63 -5.17765 0.777224 -0.430705 62 -5.21878 -0.337788 -0.429982 63 -5.21586 -0.321168 -0.429492 59 -5.16948 0.751047 -0.429236 61 -5.20891 -0.304356 -0.428511 63 -5.20037 -0.279323 -0.427286 62 -5.15838 0.716288 -0.427276 62 -5.19924 -0.262895 -0.427041 66 -5.15217 0.731911 -0.426786 63 -5.19013 -0.24614 -0.425816 60 -5.18528 -0.221454 -0.425081 61 -5.15323 0.616722 -0.425072 65 -5.14614 0.673346 -0.425072 65 -5.14203 0.689237 -0.424827 67 -5.1826 -0.188745 -0.424591 65 -5.1443 0.656653 -0.424582 62 -5.15109 0.58363 -0.424338 42 -5.17598 -0.147849 -0.42361 64 -5.13946 0.631395 -0.423602 64 -5.41482 -0.473776 -0.423369 70 -5.17206 -0.204683 -0.423366 62 -5.1459 0.558454 -0.423358 82 -5.14135 0.598852 -0.423358 40 -5.16756 -0.163897 -0.422631 63 -5.1665 -0.131384 -0.422385 66 -5.1649 -0.115119 -0.42214 66 -5.14705 0.444261 -0.422134 62 -5.14185 0.500828 -0.422134 63 -5.13579 0.540978 -0.421889 66 -5.1599 -0.0582845 -0.421405 66 -5.15745 -0.0906795 -0.42116 66 -5.14051 0.42739 -0.421155 62 -5.15626 -0.00156444 -0.420914 96 -5.12957 0.483299 -0.420419 63 -5.15028 -0.0177731 -0.420179 68 -5.13392 0.410566 -0.420175 64 -5.31706 0.975011 -0.419854 20 -5.1458 -0.074363 -0.41969 68 -5.14622 -0.033946 -0.41969 67 -5.12316 0.466421 -0.419439 64 -5.11773 0.522723 -0.419439 66 -5.13719 0.111341 -0.418708 63 -5.12982 0.296827 -0.418706 65 -5.13612 0.0548174 -0.418464 66 -5.13417 0.151616 -0.418463 65 -5.13441 0.0144614 -0.418219 40 -5.13428 0.0386575 -0.418219 67 -5.12228 0.35292 -0.418216 64 -5.12115 0.369011 -0.418216 61 -5.11997 0.385098 -0.418215 64 -5.12915 0.18371 -0.417972 65 -5.12958 0.0950151 -0.417728 67 -5.1228 0.280236 -0.417726 65 -5.12094 0.312417 -0.417726 62 -5.12427 0.207697 -0.417482 63 -5.11743 0.336406 -0.417481 62 -5.126 0.0707668 -0.417239 64 -5.12491 0.127125 -0.417238 66 -5.1216 0.223698 -0.417237 64 -5.12088 0.239788 -0.417237 62 -5.29811 0.945869 -0.417055 20 -5.12177 0.167296 -0.416993 66 -5.11415 0.255546 -0.416502 62 -5.28827 0.909941 -0.415189 20 -5.26189 0.922549 -0.412389 20 -5.26975 0.864325 -0.412157 20 -5.26701 0.880876 -0.412156 20 -5.26919 0.830299 -0.411457 20 -5.31068 -0.38018 -0.410303 20 -5.25282 0.844707 -0.409824 20 -5.29497 -0.404077 -0.40867 20 -5.2917 -0.420542 -0.408437 20 -5.28412 -0.36146 -0.407036 20 -5.24063 0.767029 -0.407025 20 -5.27532 -0.344162 -0.40587 20 -5.23238 0.740713 -0.405625 20 -5.22392 0.798199 -0.405625 20 -5.22443 0.7815 -0.405392 20 -5.22708 0.706541 -0.404459 20 -5.25706 -0.318002 -0.403537 20 -5.25605 -0.301363 -0.403303 20 -5.25697 -0.284847 -0.403303 20 -5.21105 0.72112 -0.402826 20 -5.21875 0.647145 -0.402594 20 -5.88315 -0.505565 -0.402187 58 -5.21064 0.679429 -0.402127 20 -5.24391 -0.226264 -0.401436 20 -5.2446 -0.209789 -0.401436 20 -5.21568 0.588659 -0.401428 20 -5.20684 0.662333 -0.401427 20 -5.20892 0.629376 -0.401194 20 -5.23723 -0.242433 -0.400736 20 -5.21421 0.547086 -0.400728 20 -5.23206 -0.266888 -0.40027 20 -5.23418 -0.16815 -0.400036 20 -5.20404 0.529555 -0.399329 20 -5.19972 0.57041 -0.399328 20 -5.22475 -0.151369 -0.398869 20 -5.2261 -0.0939125 -0.398868 20 -5.20559 0.471963 -0.398863 20 -5.19209 0.602632 -0.398861 20 -5.21982 -0.110174 -0.398169 20 -5.21843 -0.0773349 -0.397935 20 -5.21377 -0.183794 -0.397703 20 -5.19715 0.45479 -0.397696 20 -5.19184 0.511907 -0.397696 20 -5.21329 -0.134588 -0.397469 20 -5.21466 0.0619984 -0.397467 20 -5.21444 0.0783807 -0.397467 20 -5.21014 0.225765 -0.397465 20 -5.19986 0.397477 -0.397464 20 -5.21291 -0.0362776 -0.397235 20 -5.21079 -0.0526232 -0.397002 20 -5.20337 0.282842 -0.396998 20 -5.20788 0.111044 -0.396767 20 -5.18628 0.486732 -0.396763 20 -5.20708 0.00468977 -0.396534 20 -5.18865 0.437675 -0.39653 20 -5.20496 0.0374027 -0.396301 20 -5.19749 0.241638 -0.396065 20 -5.1867 0.412924 -0.396064 20 -5.19756 0.192579 -0.395833 20 -5.19254 0.298668 -0.395832 20 -5.18721 0.380191 -0.395831 20 -5.19828 0.0945527 -0.3956 20 -5.19512 0.0210599 -0.395134 20 -5.1934 0.135293 -0.395133 20 -5.18299 0.355366 -0.395131 20 -5.19096 0.15156 -0.3949 20 -5.18898 0.208627 -0.394899 20 -5.18314 0.322679 -0.394898 20 -5.18649 0.167758 -0.394433 20 -5.18718 -0.0196717 -0.394202 20 -5.17616 0.338602 -0.394198 20 -5.16257 0.264569 -0.392099 20 -8.8042 0.482386 -0.387241 55 -8.80136 0.191489 -0.386295 54 -8.79502 0.384981 -0.386293 86 -6.87951 -0.33288 -0.386048 57 -8.7838 0.412171 -0.385615 55 -6.03673 -0.502207 -0.385582 81 -8.77777 0.453363 -0.385344 88 -8.78163 0.26013 -0.385075 72 -8.77878 0.287656 -0.384939 81 -8.77624 0.356597 -0.384938 85 -8.77877 0.218657 -0.384804 80 -8.76786 0.314908 -0.384261 83 -6.79882 -0.35069 -0.379118 83 -6.76351 -0.0831283 -0.375305 99 -6.75907 -0.199925 -0.375132 84 -6.75967 -0.178688 -0.375132 110 -6.75923 -0.10433 -0.374958 107 -6.75688 -0.125534 -0.374785 115 -6.75422 -0.157336 -0.374612 120 -5.54882 1.00042 -0.374354 40 -6.7481 -0.231471 -0.374266 123 -6.75178 -0.0618176 -0.374265 83 -6.75206 -0.00878767 -0.374265 68 -6.74253 -0.27372 -0.37392 90 -6.74608 0.0123925 -0.373745 81 -6.74594 0.0441822 -0.373744 59 -6.73539 -0.252267 -0.373227 115 -6.74004 -0.0299916 -0.373225 83 -6.1638 1.14154 -0.371788 40 -5.55031 0.777272 -0.370826 40 -6.7058 -0.293471 -0.370802 161 -5.52818 0.871852 -0.369995 56 -5.54207 0.749565 -0.369581 40 -5.50685 0.97522 -0.369579 40 -5.52106 0.853007 -0.368957 83 -5.57067 -0.257518 -0.367929 40 -5.51577 0.807944 -0.367712 40 -5.51434 0.790066 -0.367297 40 -5.55456 -0.335469 -0.366684 40 -5.5599 -0.230714 -0.366684 40 -5.56011 -0.169498 -0.366475 40 -5.50009 0.832197 -0.366466 71 -5.47999 0.944001 -0.366257 42 -5.54963 -0.317649 -0.366061 63 -5.55107 -0.291493 -0.366061 57 -5.54867 -0.212734 -0.365438 40 -5.50494 0.727124 -0.365429 40 -5.47312 0.92517 -0.365219 90 -5.50325 0.709337 -0.365014 40 -5.54471 -0.15152 -0.364814 40 -5.54516 -0.1341 -0.364814 40 -5.5307 -0.395014 -0.364609 40 -5.4701 0.907022 -0.364597 73 -5.54232 -0.0730491 -0.364398 40 -5.53739 -0.194824 -0.364192 40 -5.54008 -0.0904177 -0.364191 40 -5.52349 -0.411914 -0.363986 40 -5.53209 -0.27298 -0.363985 40 -5.52916 0.327047 -0.36398 40 -5.4927 0.681746 -0.363561 40 -5.53258 -0.0554916 -0.36336 40 -5.52965 -0.116269 -0.363153 40 -5.52222 0.309269 -0.363149 40 -5.52481 0.031411 -0.362529 40 -5.52291 0.00538195 -0.362322 40 -5.52146 0.126826 -0.362321 40 -5.52029 0.170188 -0.36232 40 -5.51904 0.14413 -0.362113 40 -5.51712 0.204806 -0.362112 40 -5.45073 0.87755 -0.362106 71 -5.50473 -0.366962 -0.361702 40 -5.51687 -0.029259 -0.361699 40 -5.51433 0.0833751 -0.36149 40 -5.49639 -0.427141 -0.361287 40 -5.51096 -0.0118857 -0.361076 40 -5.48763 0.506795 -0.361071 40 -5.50859 0.0660073 -0.360868 40 -7.01478 0.298005 -0.360722 54 -5.50382 0.187065 -0.360659 40 -5.49977 0.282131 -0.360658 40 -5.48202 0.480273 -0.360241 40 -7.01054 0.253729 -0.360234 81 -7.00771 0.275679 -0.360071 56 -5.48234 0.428295 -0.359826 62 -5.47245 0.540149 -0.359825 40 -5.48601 -0.348313 -0.359626 40 -5.48473 0.367864 -0.359619 40 -5.47756 0.462575 -0.359618 59 -5.47214 0.522775 -0.359618 40 -7.00369 0.220469 -0.359584 48 -5.48156 0.384963 -0.359412 40 -5.46222 0.599872 -0.359409 75 -5.49 0.108999 -0.358999 40 -5.48888 0.0486189 -0.358792 40 -5.44937 0.659206 -0.358786 40 -6.98236 0.351696 -0.358281 40 -5.47678 0.263816 -0.358167 40 -5.45401 0.564369 -0.358164 40 -5.46643 0.401229 -0.357958 40 -5.46312 0.444149 -0.357958 66 -5.46853 0.340984 -0.357751 40 -5.47162 0.246369 -0.357544 40 -5.43758 0.640521 -0.357333 55 -5.46242 0.228808 -0.356506 40 -5.43638 0.579887 -0.356503 40 -5.43262 0.614032 -0.356503 76 -6.90414 0.905805 -0.355997 67 -6.95156 0.328372 -0.355677 40 -6.90374 0.402399 -0.352096 40 -5.62155 1.00839 -0.351307 40 -6.89388 -0.324353 -0.350963 40 -5.63844 0.883897 -0.350915 40 -5.63132 0.928153 -0.350914 40 -5.63367 0.901283 -0.350717 40 -6.8757 0.368376 -0.349655 40 -5.62153 0.863069 -0.348946 40 -5.59923 0.986119 -0.348748 40 -5.61296 0.798601 -0.347174 40 -5.60389 0.833249 -0.34678 40 -6.83341 -0.3751 -0.346244 40 -5.59861 0.814456 -0.345993 40 -5.57935 0.937371 -0.345991 40 -5.57638 0.954894 -0.345991 40 -5.59498 0.769061 -0.345009 40 -5.5954 0.751205 -0.344812 40 -5.633 -0.345876 -0.344625 40 -5.62358 -0.425192 -0.344232 40 -5.62791 -0.363331 -0.344232 40 -5.58984 0.732552 -0.344024 40 -6.8116 -0.0524173 -0.343638 81 -6.79884 -0.201853 -0.342825 85 -6.80144 -0.0736706 -0.342824 84 -6.79918 -0.0950025 -0.342662 82 -6.79982 -0.0202368 -0.342661 88 -5.57963 0.68661 -0.34245 40 -6.79582 0.0224908 -0.342335 80 -5.57436 0.712635 -0.342253 40 -6.79225 -0.148247 -0.342174 88 -6.79268 -0.126905 -0.342174 88 -6.78976 -0.169526 -0.342011 85 -6.78988 0.00116242 -0.341847 87 -6.78719 0.0971288 -0.341684 76 -5.57893 0.624296 -0.341663 40 -6.78028 -0.27589 -0.341524 86 -6.78224 -0.222629 -0.341524 86 -6.78575 0.0438129 -0.341521 84 -6.77752 -0.243775 -0.341198 83 -5.56605 0.649381 -0.340678 40 -5.56398 0.666864 -0.340678 40 -6.77351 0.075703 -0.340545 76 -5.58642 -0.387281 -0.340294 40 -5.58319 -0.404695 -0.340097 40 -6.75549 -0.296049 -0.339571 74 -5.55288 0.506638 -0.337923 40 -5.56557 0.305618 -0.337728 40 -5.56244 0.358056 -0.337727 40 -5.54499 0.567452 -0.337725 40 -5.5412 0.584651 -0.337528 40 -5.56437 0.200418 -0.337138 40 -5.55862 0.322726 -0.337137 40 -5.56501 0.104199 -0.336942 40 -5.54331 0.479382 -0.336742 40 -5.79679 1.05633 -0.336659 40 -5.54082 0.461614 -0.336348 40 -5.53374 0.539898 -0.336347 40 -5.55587 0.0428813 -0.335958 40 -5.55206 -0.000774868 -0.335565 40 -5.53886 0.382654 -0.335561 40 -6.30547 0.0594089 -0.335455 40 -5.54394 0.260663 -0.335365 40 -5.53233 0.443365 -0.335364 40 -5.52551 0.521529 -0.335363 40 -5.54675 0.121207 -0.33517 40 -6.65309 0.841964 -0.335004 40 -5.54377 0.0601487 -0.334777 40 -5.53375 0.338617 -0.334774 40 -5.54208 0.0165912 -0.33458 40 -5.53966 0.164562 -0.334579 40 -5.53678 0.242857 -0.334578 40 -5.53713 0.181888 -0.334382 40 -5.53588 0.216676 -0.334381 40 -5.53316 0.277532 -0.334381 40 -5.52572 0.399136 -0.334379 40 -5.53441 0.138278 -0.333988 40 -8.74113 0.483201 -0.333981 83 -8.74001 0.428061 -0.333732 79 -8.73931 0.400506 -0.333608 78 -8.73278 0.52401 -0.333607 72 -8.73712 0.359143 -0.33336 82 -8.73264 0.45519 -0.333359 79 -8.73421 0.331529 -0.333112 44 -5.76246 1.02222 -0.332942 40 -8.73134 0.235293 -0.33274 82 -8.73056 0.262721 -0.33274 79 -8.72805 0.207757 -0.332491 47 -5.50262 0.414746 -0.332213 40 -8.71726 0.303409 -0.331994 57 -5.8117 -0.579088 -0.331841 40 -6.63578 0.408709 -0.330289 74 -6.61854 0.428585 -0.328987 115 -5.78266 -0.548542 -0.328867 40 -5.78039 -0.529993 -0.328495 43 -5.77211 -0.510909 -0.327566 40 -6.5886 0.457943 -0.326708 115 -5.73875 -0.48055 -0.32422 40 -5.62686 0.916998 -0.318816 40 -5.63463 0.854783 -0.318631 40 -5.62207 0.871 -0.317702 40 -5.612 0.896569 -0.317144 40 -5.62593 0.790364 -0.316959 40 -5.61955 0.834525 -0.316959 40 -5.61031 0.815202 -0.315843 40 -5.63971 -0.329296 -0.313996 40 -5.62067 0.547991 -0.313802 40 -5.59482 0.768236 -0.313799 40 -5.57087 0.926098 -0.313798 40 -5.61038 0.627181 -0.313615 40 -5.5595 0.969155 -0.313425 58 -5.60721 0.582312 -0.312872 40 -5.91937 1.22473 -0.312747 60 -5.61445 0.485182 -0.312687 40 -5.59644 0.661298 -0.312685 40 -5.92124 1.20572 -0.312574 82 -5.58514 0.704511 -0.312127 40 -5.62325 -0.0451875 -0.311577 40 -5.6234 0.0166439 -0.311576 40 -5.59939 0.5194 -0.311571 40 -5.57154 0.747331 -0.311383 40 -5.59117 0.56298 -0.311199 40 -5.58554 0.597897 -0.311013 40 -5.59306 0.501133 -0.310828 40 -5.59479 -0.432447 -0.310465 40 -5.61148 -0.000964218 -0.310461 40 -5.59561 0.421734 -0.310457 40 -5.59426 0.439312 -0.310457 40 -5.56512 0.719837 -0.310454 40 -5.52912 0.94613 -0.310266 40 -5.58944 -0.449682 -0.310093 40 -5.60648 -0.106638 -0.31009 40 -5.57078 0.640654 -0.310083 40 -5.6054 0.0342854 -0.309903 40 -5.89376 1.18071 -0.309802 85 -5.60345 -0.0273316 -0.309718 40 -5.59918 -0.062476 -0.309346 40 -5.58704 -0.308365 -0.308977 40 -5.59484 -0.0887802 -0.308975 40 -5.58285 0.376775 -0.308971 40 -5.58246 -0.3521 -0.308791 40 -5.57498 0.455507 -0.308784 40 -5.54975 0.682517 -0.308596 40 -5.88363 1.1498 -0.308416 79 -5.57505 0.402676 -0.308413 40 -5.88135 1.13016 -0.307897 84 -5.56544 -0.36851 -0.307305 40 -5.56227 -0.385845 -0.307119 40 -5.56413 0.358048 -0.307112 40 -7.04932 0.200027 -0.306759 40 -5.55507 -0.402857 -0.306561 40 -5.86531 1.10789 -0.306164 88 -5.55419 -0.288893 -0.305817 40 -5.92479 -0.674394 -0.305661 67 -5.86459 1.07913 -0.305645 75 -5.54187 0.295588 -0.304696 40 -5.91702 -0.635928 -0.304622 65 -5.91301 -0.654304 -0.304449 125 -5.54248 0.190961 -0.304326 73 -5.5354 0.33888 -0.304324 40 -5.53759 -0.261787 -0.304144 40 -5.85032 1.05744 -0.304086 144 -7.00879 0.220767 -0.303825 40 -5.53441 -0.244194 -0.303772 40 -5.53925 0.077694 -0.303769 123 -5.53278 -0.183175 -0.3034 40 -5.53499 0.0950476 -0.303397 116 -5.53009 0.251487 -0.303396 40 -5.52918 -0.226533 -0.303214 40 -5.52934 -0.165656 -0.303028 40 -5.5267 0.11231 -0.302654 103 -5.51904 0.311866 -0.302652 40 -5.89417 -0.605504 -0.302369 72 -5.51691 0.277001 -0.30228 40 -5.51989 -0.14797 -0.302098 40 -5.51626 -0.199906 -0.301913 40 -5.51765 0.0514891 -0.301725 169 -5.51416 0.138111 -0.301538 85 -5.88613 -0.586042 -0.301503 90 -5.50972 0.155339 -0.301166 117 -5.50722 0.172595 -0.30098 105 -5.87802 -0.566633 -0.300636 94 -5.50261 -0.121476 -0.300425 40 -5.79873 1.02906 -0.299235 103 -5.85482 -0.536678 -0.298384 77 -5.47514 0.232015 -0.298191 40 -5.81374 0.834919 -0.297851 40 -5.84616 -0.498916 -0.297344 66 -5.84059 -0.516946 -0.296998 115 -5.83851 -0.470606 -0.296477 45 -5.76793 0.911586 -0.294905 40 -5.75396 0.844533 -0.292827 40 -5.76367 0.680073 -0.291789 40 -5.7381 0.869794 -0.291787 40 -5.7638 0.661726 -0.291616 40 -5.78136 0.407214 -0.291099 40 -5.72551 0.886248 -0.29092 40 -6.82582 0.386247 -0.290915 40 -5.77864 0.388765 -0.290752 40 -5.75696 0.633422 -0.29075 40 -5.73155 0.804361 -0.290401 40 -5.77444 0.36113 -0.290233 40 -5.71051 0.929872 -0.290227 40 -5.76362 0.342225 -0.289193 40 -5.72024 0.784394 -0.289189 40 -5.74551 0.549987 -0.289018 40 -5.74285 0.577056 -0.289018 40 -6.01174 1.25843 -0.288945 40 -5.74523 0.531743 -0.288845 40 -5.73903 0.594881 -0.288844 40 -5.7587 0.323753 -0.288674 40 -5.75018 0.450306 -0.288673 40 -5.73516 0.612687 -0.288671 40 -5.72592 0.693703 -0.28867 40 -5.7557 0.305432 -0.288327 40 -6.79314 -0.224472 -0.287986 40 -6.79244 -0.0750126 -0.287692 40 -5.74032 0.422274 -0.287633 40 -5.67511 0.960612 -0.287628 43 -6.79065 -0.0536663 -0.287545 40 -6.78765 -0.128298 -0.287398 40 -5.73286 0.467003 -0.287286 40 -6.78485 0.0209617 -0.287104 40 -6.78248 0.0742193 -0.286957 40 -5.7274 0.484657 -0.28694 40 -6.77431 -0.298511 -0.286813 40 -6.78005 -0.106879 -0.286812 40 -6.78089 -0.000367494 -0.286811 40 -5.73917 0.277358 -0.286768 40 -5.72306 0.511454 -0.286766 40 -6.77586 -0.202663 -0.286666 40 -6.77822 0.0954556 -0.286663 40 -5.73507 -0.317961 -0.286601 40 -6.76421 0.414519 -0.286514 40 -6.77477 0.0421785 -0.28637 40 -6.77126 -0.149331 -0.286225 40 -6.77151 0.137898 -0.286223 40 -5.98244 1.23284 -0.286179 40 -8.80082 0.654126 -0.286128 59 -8.8076 0.487918 -0.285905 82 -8.80602 0.515588 -0.285905 83 -8.80717 0.418551 -0.28568 81 -8.79572 0.584352 -0.285567 78 -6.76194 0.116414 -0.28549 40 -6.7588 -0.170346 -0.285345 40 -6.76087 -0.0323027 -0.285344 40 -8.80074 0.33518 -0.285119 83 -8.78587 0.611453 -0.285117 76 -5.97449 1.20194 -0.28504 40 -5.67882 0.733105 -0.285031 40 -5.67649 0.750944 -0.285031 40 -5.64864 0.93775 -0.285029 110 -5.6411 0.982085 -0.285029 80 -8.80023 0.293641 -0.285007 87 -8.78755 0.556117 -0.285005 78 -6.75053 -0.24446 -0.284906 40 -8.80093 0.196822 -0.284895 91 -8.79712 0.265886 -0.284782 84 -8.79591 0.238197 -0.28467 83 -8.796 0.141441 -0.284559 89 -8.79352 0.169044 -0.284446 94 -8.78767 0.362366 -0.284445 85 -8.77917 0.458772 -0.284219 87 -6.73934 -0.275898 -0.284172 40 -8.78051 0.389725 -0.284107 87 -5.96259 1.18014 -0.283738 40 -8.78043 0.113649 -0.28366 49 -5.65936 0.712426 -0.283126 40 -5.67503 -0.440223 -0.282097 56 -5.68728 0.0957124 -0.281746 177 -5.66477 -0.359019 -0.28071 70 -8.71667 -0.339023 -0.280403 40 -5.65765 -0.376443 -0.280191 40 -5.65791 -0.340779 -0.280017 40 -5.91927 1.15246 -0.279833 40 -5.66178 0.0684801 -0.279494 109 -5.98744 -0.666558 -0.279362 40 -5.64587 -0.402438 -0.279325 43 -6.6594 0.4287 -0.278886 40 -8.68563 -0.365061 -0.278717 40 -6.61984 0.793255 -0.278443 40 -5.63066 -0.419202 -0.278112 40 -5.97366 -0.64596 -0.27806 40 -6.60346 0.812287 -0.277416 40 -8.65253 -0.390807 -0.276919 40 -5.89087 1.09915 -0.276741 40 -5.62641 0.209405 -0.27672 133 -5.8957 1.06177 -0.276579 105 -5.96409 -0.540767 -0.276432 40 -5.87955 1.1162 -0.27609 40 -5.61965 0.173767 -0.276028 161 -5.9499 -0.624375 -0.275944 40 -5.61709 0.191344 -0.275854 135 -6.61425 0.446493 -0.275658 40 -5.61525 0.111819 -0.275509 141 -5.61487 0.12946 -0.275508 154 -5.6142 0.155917 -0.275508 155 -5.92606 -0.602944 -0.273829 40 -6.58111 0.516897 -0.273604 125 -6.58224 0.475384 -0.273458 99 -6.56679 0.494957 -0.272431 95 -5.90504 -0.572597 -0.271875 40 -5.89292 -0.55268 -0.270736 40 -5.80728 0.914984 -0.267467 40 -5.85404 0.105742 -0.265523 45 -7.58998 0.945307 -0.265125 46 -5.7463 0.942665 -0.26291 40 -5.72802 0.967471 -0.261771 40 -6.90631 -0.321757 -0.257987 40 -5.74391 -0.329248 -0.257227 40 -6.84157 0.879233 -0.256893 40 -6.81701 0.897937 -0.255402 40 -6.85792 -0.286933 -0.254599 40 -6.81458 0.82154 -0.25459 66 -5.69893 -0.407394 -0.253973 40 -6.81849 -0.360289 -0.252161 40 -6.81294 0.422114 -0.252019 74 -6.82401 0.00421978 -0.251887 97 -6.7735 0.795175 -0.251609 88 -6.81199 -0.166985 -0.251211 95 -6.80943 -0.188324 -0.251076 80 -6.81142 -0.0920414 -0.251075 87 -6.81167 -0.070642 -0.251075 92 -6.80958 0.0791435 -0.250938 90 -6.80482 -0.209577 -0.250805 87 -6.80794 -0.0385029 -0.250804 87 -6.80795 0.0363541 -0.250803 95 -6.8078 0.0577421 -0.250803 88 -6.80603 -0.0171035 -0.250668 82 -6.79698 -0.262762 -0.250399 88 -6.79778 -0.241405 -0.250399 88 -6.80112 -0.113236 -0.250398 100 -6.80115 0.111133 -0.250396 104 -6.80077 0.132498 -0.250396 46 -6.79873 -0.134555 -0.250262 99 -6.78833 0.399284 -0.250258 141 -6.71868 0.982134 -0.249575 60 -5.65524 0.165246 -0.249411 44 -6.71286 0.938287 -0.248763 40 -5.6462 0.129527 -0.248598 53 -6.7591 0.450961 -0.248496 85 -5.63182 0.146964 -0.247458 57 -6.69068 0.764481 -0.245784 102 -6.6664 0.953324 -0.245782 44 -6.71584 0.469431 -0.245651 95 -6.65609 0.591708 -0.242262 88 -6.65262 0.486257 -0.24145 119 -6.63071 0.726238 -0.241448 83 -6.6409 0.558899 -0.241043 116 -6.64229 0.517015 -0.240908 99 -6.64064 0.53788 -0.240908 88 -8.87176 0.32265 -0.239407 40 -6.59859 0.628619 -0.238604 103 -6.59655 0.607534 -0.238333 94 -6.58153 0.679241 -0.23779 53 -6.57738 0.699712 -0.237654 121 -6.57274 0.647093 -0.236977 99 -8.78702 0.73504 -0.236368 40 -8.76663 0.663967 -0.235053 67 -8.77717 0.387989 -0.234752 85 -8.77392 0.415462 -0.234651 84 -8.76683 0.511787 -0.234549 82 -8.76144 0.566725 -0.234447 77 -8.7742 0.249826 -0.234349 82 -8.76515 0.470241 -0.234347 85 -8.75919 0.538941 -0.234245 81 -8.7626 0.442491 -0.234145 81 -8.75075 0.635067 -0.234143 66 -8.76095 0.345861 -0.233842 77 -8.76296 0.221918 -0.233742 89 -8.75962 0.194289 -0.23354 88 -8.75433 -0.24598 -0.233341 62 -8.75553 -0.067165 -0.233238 77 -8.75106 -0.21839 -0.233138 79 -8.75089 0.12531 -0.233034 87 -8.75046 0.152804 -0.233034 92 -8.73078 0.605988 -0.233031 111 -8.74509 -0.286992 -0.232936 132 -8.74925 0.0977912 -0.232933 78 -8.71871 0.687756 -0.232726 42 -8.74362 0.0565021 -0.23263 71 -8.73972 -0.190668 -0.232531 47 -8.73929 -0.0945441 -0.232429 71 -8.73977 -0.0259034 -0.232429 129 -8.73776 0.0289968 -0.232327 137 -8.73429 -0.163118 -0.232227 61 -6.51456 -0.363599 -0.231566 40 -7.80183 0.891889 -0.231385 122 -7.83304 -0.388329 -0.230833 40 -8.65528 -0.338761 -0.228485 57 -7.73657 0.933912 -0.228012 48 -7.69839 0.966244 -0.226101 40 -6.8406 0.90402 -0.21852 40 -6.84083 0.871254 -0.218272 40 -6.88106 -0.263402 -0.21766 40 -6.79127 0.799754 -0.214668 102 -6.78872 0.821086 -0.214668 45 -6.80394 0.499152 -0.213677 97 -6.8015 0.477481 -0.213428 77 -6.79438 0.519886 -0.213179 93 -6.7977 0.445009 -0.213056 67 -6.79996 -0.292697 -0.212689 40 -6.7891 0.422994 -0.212434 142 -6.79719 -0.121607 -0.21219 85 -6.79374 -0.185616 -0.212067 102 -6.79626 -0.0148297 -0.212065 101 -6.79278 -0.142892 -0.211942 87 -6.79369 -0.089538 -0.211942 84 -6.7903 -0.164192 -0.211818 92 -6.79228 0.00650275 -0.211817 89 -6.78681 -0.217461 -0.211694 73 -6.78595 -0.0681462 -0.211444 79 -6.78614 -0.0468252 -0.211444 75 -6.78225 0.0277625 -0.211195 90 -6.78182 0.0810289 -0.211195 95 -6.77954 0.102295 -0.21107 96 -6.76443 -0.365844 -0.210701 40 -6.77406 0.0596199 -0.210698 94 -6.76813 -0.238217 -0.210576 79 -6.68657 0.925876 -0.209199 40 -6.71116 0.534415 -0.208084 79 -6.65343 0.974504 -0.207582 40 -6.65448 0.953307 -0.207458 40 -6.66482 0.562175 -0.205349 133 -6.67635 -0.329878 -0.205108 51 -6.61851 0.747125 -0.203608 51 -6.6332 0.580383 -0.203485 93 -5.95784 1.21129 -0.201337 40 -5.94977 1.18054 -0.200389 40 -7.28543 -0.244705 -0.199696 40 -6.56775 0.595204 -0.199508 56 -5.93189 1.15773 -0.198899 40 -5.92765 1.13762 -0.198357 40 -5.91746 1.11646 -0.197409 40 -6.53111 0.622792 -0.197395 83 -5.96047 -0.613249 -0.195392 40 -6.48742 0.63903 -0.194785 108 -5.88338 1.08152 -0.194699 40 -6.48339 0.6592 -0.19466 119 -6.47207 0.709422 -0.194287 88 -5.93768 -0.639109 -0.194037 40 -5.94236 -0.573582 -0.193901 40 -6.46633 0.688209 -0.19379 101 -5.93656 -0.591836 -0.19363 40 -5.9461 -0.376477 -0.193086 40 -5.91092 -0.523569 -0.191462 40 -5.90726 -0.541945 -0.191326 40 -7.83487 0.938669 -0.189423 60 -6.3465 0.948721 -0.188443 40 -8.81556 0.440137 -0.186709 59 -8.80868 -0.321695 -0.186176 31 -8.8124 0.0520657 -0.186084 31 -5.7781 0.94119 -0.186029 40 -8.79051 0.56362 -0.1859 71 -8.78469 0.494031 -0.185452 76 -8.78569 -0.293151 -0.185099 130 -8.76875 0.589952 -0.185002 96 -8.78133 0.148541 -0.184737 79 -8.76824 0.465528 -0.184644 60 -8.76431 0.534381 -0.184644 105 -8.7759 0.217417 -0.184556 80 -8.77118 0.244887 -0.184377 117 -8.7721 0.0932855 -0.184288 79 -8.76883 0.175921 -0.184198 109 -5.74753 0.954882 -0.184132 44 -8.76377 0.120758 -0.183929 113 -5.74894 0.908804 -0.183726 40 -6.24094 0.952571 -0.181981 40 -7.68127 0.944251 -0.181734 58 -5.70513 0.966446 -0.181422 40 -8.69529 -0.358263 -0.18115 30 -6.27572 -0.380848 -0.180377 40 -5.75593 -0.409029 -0.18035 71 -8.67017 -0.384443 -0.180073 30 -5.75182 -0.381478 -0.179944 40 -6.93519 -0.111772 -0.179799 67 -7.63865 0.963244 -0.17971 41 -6.87221 0.909238 -0.179565 55 -6.90498 0.540644 -0.179231 51 -6.92238 -0.155033 -0.179125 73 -6.91989 -0.0571069 -0.178899 52 -6.89256 0.594202 -0.178781 40 -8.63899 -0.41017 -0.178727 53 -6.91211 0.0189901 -0.178449 69 -6.90886 -0.132961 -0.178338 91 -6.90813 -0.013561 -0.178224 73 -6.90406 -0.0352268 -0.178 58 -6.90187 0.0623678 -0.177887 42 -6.89957 -0.0893829 -0.177775 93 -6.88764 -0.186602 -0.177214 48 -6.88006 0.0406374 -0.17665 72 -6.81758 0.880441 -0.176306 40 -6.8537 -0.379713 -0.175754 40 -6.72637 0.944281 -0.171696 40 -6.66404 0.95712 -0.168324 40 -6.6555 0.98794 -0.168099 40 -6.65716 -0.389063 -0.164739 40 -6.6161 0.592353 -0.163269 127 -6.56971 0.734271 -0.161469 62 -6.57641 0.609782 -0.161133 69 -6.5595 0.660261 -0.160458 106 -6.55143 0.68027 -0.160121 93 -6.54727 0.700642 -0.160008 90 -6.54862 0.628062 -0.159672 107 -8.14349 0.93665 -0.15843 28 -8.08937 0.969228 -0.156185 28 -5.80035 0.976987 -0.155135 40 -5.79892 0.911239 -0.15439 40 -5.78914 0.946996 -0.154141 40 -5.78224 0.927178 -0.15352 40 -5.73251 -0.368212 -0.146573 40 -6.92339 -0.102059 -0.140466 81 -7.73317 0.952346 -0.140208 27 -5.62234 -0.26421 -0.139363 40 -6.80455 0.887808 -0.137321 164 -6.78054 0.960559 -0.136612 64 -6.02814 0.916645 -0.132579 40 -6.73156 0.578296 -0.131962 103 -8.77311 0.352833 -0.129094 32 -8.77047 0.256154 -0.128863 32 -8.76524 0.228428 -0.128632 32 -8.75294 0.517388 -0.12863 32 -8.74929 0.475792 -0.128399 32 -8.75519 0.296967 -0.128324 32 -8.75022 0.32431 -0.12817 32 -8.73677 0.447543 -0.12786 32 -8.74162 0.104107 -0.127632 32 -8.72081 0.611702 -0.127628 77 -8.73794 0.200165 -0.127554 32 -8.73725 0.131496 -0.127478 32 -8.72882 -0.307541 -0.127326 32 -8.73279 0.158858 -0.127323 32 -8.71737 0.542672 -0.12732 57 -8.71163 0.569783 -0.127166 123 -5.91421 0.947367 -0.126509 40 -8.70178 -0.279302 -0.126248 54 -5.91268 0.918593 -0.126172 40 -6.569 0.971934 -0.12609 59 -6.61237 0.588535 -0.125992 186 -5.85795 0.957479 -0.123474 40 -6.52044 0.724881 -0.122045 85 -6.52205 0.611142 -0.121541 80 -6.50815 0.651076 -0.121034 133 -6.50619 0.630225 -0.120832 154 -6.50104 0.681304 -0.120832 106 -6.4949 0.701281 -0.120629 109 -5.85315 -0.385088 -0.119552 40 -7.1967 0.911047 -0.116062 24 -8.09595 0.976857 -0.104975 38 -6.87468 0.522405 -0.0999083 76 -6.83699 0.888643 -0.0999047 23 -6.85906 0.542948 -0.0992798 127 -6.85443 0.575104 -0.0991897 53 -6.87172 -0.104805 -0.0989265 62 -6.86816 -0.180298 -0.0988374 81 -6.85237 0.499152 -0.0988314 98 -6.85358 -0.201409 -0.0982092 65 -6.85295 -0.147524 -0.098119 80 -6.84848 -0.0290481 -0.0978487 88 -6.84417 -0.0720211 -0.0976696 57 -6.8394 -0.125686 -0.0974905 113 -6.82857 0.00328938 -0.0969508 101 -6.82638 -0.0503195 -0.0968615 49 -5.98221 0.911606 -0.0962449 40 -6.73475 0.929563 -0.0955957 23 -5.95862 0.94628 -0.095334 40 -6.64416 0.970619 -0.0918253 22 -7.76112 0.898274 -0.0918021 28 -5.92206 -0.333227 -0.0901865 168 -5.85119 0.947612 -0.0899718 41 -5.83139 0.906726 -0.0886571 40 -7.65367 0.970905 -0.0880265 28 -5.86514 -0.348758 -0.0873539 85 -6.57185 0.57326 -0.0865332 53 -6.56802 0.593732 -0.0864433 22 -5.84176 -0.301459 -0.0860383 96 -6.54307 0.684922 -0.0857243 88 -5.82894 -0.383525 -0.0856343 121 -5.8327 -0.282667 -0.0855323 114 -6.52189 0.713862 -0.0849161 85 -6.52133 0.662036 -0.0846473 96 -6.52139 0.641357 -0.0845578 87 -6.52235 0.61044 -0.0844683 134 -5.77556 -0.216541 -0.0824966 40 -8.7355 -0.306455 -0.073002 100 -8.71798 -0.346931 -0.0724865 74 -8.56482 0.927914 -0.068931 66 -5.94385 0.937907 -0.0604983 19 -5.94623 0.909592 -0.0604088 19 -5.99527 0.222745 -0.0596977 19 -5.97657 0.240931 -0.0588897 74 -5.96696 0.278141 -0.0585302 63 -5.94376 -0.33963 -0.0576383 19 -5.94185 0.258379 -0.0573636 132 -5.93482 -0.320372 -0.0571893 19 -8.15303 0.923437 -0.0557143 56 -5.87595 -0.298422 -0.0544963 84 -6.81808 0.591113 -0.0544402 24 -6.81819 0.515635 -0.0542097 24 -6.80796 0.568648 -0.0539781 24 -6.8006 0.535736 -0.0535932 24 -6.819 -0.0959011 -0.0535213 24 -6.80765 0.0218467 -0.0530581 24 -6.80165 -0.0209324 -0.0528274 24 -6.79849 -0.127734 -0.0527511 24 -6.79728 -0.074323 -0.0526737 24 -6.79149 -0.0529426 -0.0524424 24 -6.79169 0.000397266 -0.052442 24 -6.73202 0.883099 -0.0523575 24 -6.78157 -0.170109 -0.0521352 24 -6.78207 -0.148804 -0.052135 24 -6.74673 -0.201184 -0.0508257 29 -6.68281 0.91922 -0.0506622 23 -7.87996 0.918456 -0.0469462 40 -6.5109 0.656194 -0.0428835 23 -6.50696 0.63513 -0.0426526 23 -6.47152 0.724063 -0.0416503 29 -6.47396 0.683168 -0.0415736 46 -6.46582 0.702831 -0.0413423 67 -7.6681 0.955545 -0.0403053 40 -8.73193 -0.29859 -0.0282407 67 -8.73283 -0.271156 -0.0282405 40 -8.53294 0.944841 -0.0241133 56 -8.50014 0.968157 -0.0233003 48 -5.94118 -0.329842 -0.020011 20 -5.9227 -0.300915 -0.0192404 20 -5.87969 -0.280405 -0.0175454 38 -5.88054 -0.261933 -0.0175452 31 -6.86961 0.880684 -0.0144526 40 -6.84157 0.724743 -0.0129711 40 -6.8471 0.605919 -0.0127788 101 -6.85718 -0.191835 -0.012334 40 -6.79708 0.925954 -0.0123246 40 -6.83195 0.572213 -0.0121988 86 -6.81928 0.625155 -0.0119404 52 -6.81577 0.549371 -0.0116188 71 -6.81179 -0.168976 -0.010851 73 -6.81052 -0.136825 -0.0107863 79 -6.74387 0.886579 -0.0104552 40 -6.74436 0.693405 -0.0097478 40 -6.60323 0.658494 -0.00510613 40 -7.70561 0.912029 -0.00173595 40 -7.68684 0.93425 -0.00130227 40 -7.64024 0.952802 -0.000110047 40 -6.24664 0.893084 0.00540508 40 -6.01305 0.928208 0.0126908 40 -6.0021 0.90728 0.0131419 40 -6.00096 0.887851 0.0132706 40 -6.03691 -0.336804 0.0139045 40 -5.98821 -0.381089 0.015387 40 -5.97607 -0.314315 0.0159033 95 -5.96743 -0.360853 0.0160963 40 -5.96705 -0.295 0.0162258 92 -5.96637 -0.26678 0.0162905 91 -6.78378 0.918944 0.023026 40 -6.7589 0.893851 0.0237843 40 -6.79318 -0.088602 0.0244258 77 -6.78543 -0.0672112 0.0246427 69 -6.78376 0.00739017 0.0246975 60 -6.77981 -0.16305 0.0247503 65 -6.77526 -0.184254 0.0248585 47 -6.77688 -0.109746 0.0248591 66 -6.77375 -0.0139383 0.0249683 49 -6.76368 -0.035207 0.025239 128 -6.7583 -0.141372 0.0253465 107 -6.75572 0.0284766 0.0254563 51 -6.36919 1.00434 0.0338093 40 -6.26408 0.896711 0.0370593 40 -5.28047 0.256607 0.0384087 56 -5.26848 0.0490198 0.038987 56 -5.16755 0.308647 0.0419551 236 -6.09553 -0.321805 0.0431168 40 -6.037 0.902019 0.0431279 40 -6.02399 0.880666 0.0435612 40 -6.01689 0.927952 0.0435616 40 -6.03293 -0.366292 0.0447419 40 -6.01609 -0.346382 0.0452297 40 -5.97668 -0.297216 0.0463679 97 -5.96989 -0.381558 0.0464214 40 -5.9636 -0.277849 0.0467473 101 -5.96085 -0.249593 0.0468559 86 -4.81792 0.38075 0.053045 40 -4.80686 0.311654 0.0535601 58 -4.81495 -0.00590635 0.0536214 40 -4.81117 0.19069 0.0536233 50 -4.808 0.258686 0.053624 59 -4.80386 0.326629 0.0536247 54 -4.80081 0.341588 0.0536893 51 -4.80791 0.0998801 0.0538158 54 -4.79856 0.205357 0.0540103 46 -4.8006 -0.0586018 0.0540722 46 -4.79853 0.15253 0.0540743 49 -4.78719 0.363365 0.0540764 50 -4.79204 0.167427 0.0542678 42 -4.79283 -0.0358748 0.0543303 51 -4.79159 0.11469 0.0543318 57 -4.791 0.137268 0.054332 47 -4.79093 0.0168304 0.0543953 54 -4.78656 0.0619521 0.0545247 56 -4.78622 0.0845072 0.0545249 42 -4.77841 -0.0732256 0.0547813 40 -4.77686 0.0318633 0.0548467 40 -4.77493 -0.0206416 0.0549107 40 -4.76124 0.271423 0.055107 40 -4.73598 0.217921 0.056009 41 -5.18163 0.391003 0.067722 40 -6.72196 0.900461 0.0697437 30 -6.72216 0.868279 0.069825 30 -6.76792 -0.0342259 0.0700208 30 -6.73802 -0.00220731 0.0706328 30 -6.63382 -0.0538754 0.0727531 30 -6.56364 -0.0736538 0.0741804 30 -6.50306 0.892787 0.0741892 46 -6.43927 -0.102119 0.0767088 30 -6.32697 -0.119767 0.0789925 34 -4.74816 0.461355 0.0792638 80 -4.74241 0.498413 0.0793184 46 -4.74824 0.393657 0.0794256 60 -4.74299 0.408209 0.0795342 49 -4.73401 0.482444 0.0795891 52 -4.73704 0.43017 0.0796427 57 -6.29199 -0.227778 0.0796441 67 -4.73367 0.444852 0.0796971 52 -4.73152 0.377211 0.0799131 48 -6.2566 -0.137811 0.0804198 51 -6.18939 0.762049 0.0808767 94 -6.16539 0.867523 0.0810817 30 -4.68163 0.254717 0.0814831 40 -6.13372 0.932048 0.081531 31 -6.18993 -0.165256 0.0817655 77 -6.18278 -0.203921 0.0818875 72 -6.11881 0.9102 0.0818978 30 -6.17099 -0.252024 0.082091 30 -6.16482 -0.33912 0.082131 30 -4.65261 0.333717 0.0821341 40 -6.16939 -0.184021 0.0821731 79 -4.64566 0.318508 0.0823507 40 -4.64603 0.281879 0.0824045 40 -4.65215 0.0626689 0.0824564 40 -4.64711 0.179471 0.0825118 40 -4.64421 0.20127 0.0825662 40 -4.6409 0.266904 0.0825669 40 -6.14389 -0.318518 0.0825799 30 -6.08402 0.885659 0.0826725 30 -4.64318 0.113578 0.0826737 40 -4.64215 0.150041 0.082674 40 -4.63687 0.230115 0.0827291 40 -4.63557 0.215444 0.0827831 40 -4.63781 0.0842591 0.0828359 40 -4.6366 0.135249 0.0828364 40 -4.62916 0.295365 0.0828381 40 -4.63167 0.164215 0.0829451 40 -4.62833 0.0476724 0.0831065 40 -4.62753 0.09856 0.083107 40 -6.0994 -0.287204 0.0835181 30 -6.08017 -0.382036 0.0838028 37 -6.07791 -0.353131 0.0838846 30 -6.06631 -0.266403 0.0842116 30 -6.07213 0.0196543 0.0842141 30 -5.24934 0.491835 0.100532 30 -4.98287 0.578925 0.105754 35 -4.836 0.578027 0.108731 36 -4.82291 0.476927 0.109219 53 -4.78984 0.542274 0.10975 30 -4.75769 0.48592 0.110525 44 -6.10232 0.896918 0.110682 40 -6.08419 0.923506 0.110903 40 -6.092 0.856264 0.110934 40 -4.75123 0.222676 0.111052 30 -6.08674 0.835999 0.111059 40 -6.07543 0.873348 0.111154 40 -4.72431 0.497687 0.111177 30 -4.72272 0.512527 0.111178 30 -6.08519 0.787109 0.111185 40 -4.74192 0.207365 0.111256 30 -6.08325 0.738296 0.11131 40 -6.07476 0.805139 0.111311 40 -6.11292 -0.36642 0.111363 40 -6.11457 -0.337609 0.111363 40 -4.72414 0.392908 0.11138 30 -6.07958 0.718451 0.111404 40 -4.72365 0.348095 0.111461 30 -4.72137 0.377768 0.111462 30 -4.71693 0.429659 0.111462 30 -4.72653 0.273753 0.111501 30 -6.06582 0.765143 0.111531 40 -4.72616 0.243957 0.111542 30 -4.71854 0.362649 0.111543 30 -4.7192 0.29568 0.111624 30 -4.71028 0.414181 0.111625 30 -6.09377 -0.384565 0.111646 40 -6.0798 0.563899 0.111655 53 -6.06593 0.697453 0.111656 40 -6.09563 -0.317442 0.111678 40 -6.09394 -0.269398 0.111741 40 -4.71857 0.191626 0.111745 30 -6.08118 0.477398 0.111748 64 -6.08593 0.381687 0.111779 40 -6.08075 0.429322 0.111811 40 -6.07408 0.515244 0.111811 60 -4.71593 0.154452 0.111826 30 -4.70827 0.309902 0.111828 30 -6.08876 -0.250033 0.111836 40 -6.05929 0.648462 0.111844 67 -4.71342 0.169205 0.111867 30 -6.05524 0.667266 0.111876 58 -6.05732 0.628993 0.111907 73 -4.70328 0.324439 0.11191 30 -6.08679 -0.115993 0.111931 40 -6.07513 0.3618 0.111967 40 -6.0721 0.409503 0.111968 40 -6.07662 -0.297398 0.111993 40 -6.07952 -0.230565 0.111993 40 -6.07529 0.323508 0.111998 40 -6.0814 -0.0776968 0.112026 40 -6.07475 0.294769 0.11203 40 -6.05765 0.542551 0.112032 85 -6.07165 0.275486 0.112092 40 -4.69741 0.257426 0.112113 30 -6.07222 -0.211222 0.112119 40 -6.05944 0.446869 0.112125 46 -6.05574 0.494446 0.112126 97 -6.04535 0.608498 0.112127 78 -6.07031 0.208554 0.112155 40 -6.06426 0.341986 0.112156 40 -6.07112 -0.0966856 0.112183 40 -6.06449 0.256038 0.112218 40 -6.0637 -0.163297 0.112277 40 -6.06418 -0.144248 0.112277 40 -6.06351 0.17015 0.11228 40 -6.0382 0.579007 0.112284 79 -6.06102 0.103384 0.112342 54 -6.05564 0.227038 0.112375 40 -6.04916 -0.181987 0.112497 40 -6.04696 0.188631 0.112532 40 -6.04744 0.0745897 0.112562 91 -6.04362 -0.0583887 0.112624 41 -6.04379 0.0365492 0.112625 84 -6.03783 -0.0299032 0.112719 77 -6.03789 -0.0109358 0.112719 76 -6.03626 0.140802 0.11272 40 -6.03267 0.121739 0.112783 60 -6.02989 0.00798951 0.112845 78 -6.02565 0.0552922 0.112908 85 -6.17348 0.909682 0.150399 51 -6.1613 0.838871 0.150598 54 -6.15467 0.857687 0.150635 42 -6.13868 0.885019 0.150745 47 -6.18833 -0.348799 0.150769 25 -6.14209 0.816702 0.150798 92 -6.14871 0.748886 0.150816 59 -6.14388 0.787504 0.150816 64 -6.12846 0.766041 0.15098 97 -6.16325 -0.366714 0.150988 25 -6.13055 0.697956 0.151034 63 -6.12089 0.657985 0.151161 63 -6.11441 0.715644 0.151162 109 -6.13786 -0.278064 0.151262 66 -6.10686 0.675942 0.151271 99 -6.13748 -0.239408 0.15128 66 -6.13149 -0.326032 0.151298 70 -6.09606 0.626391 0.151416 89 -6.11299 -0.296081 0.15148 50 -6.1185 -0.142368 0.151482 70 -6.11073 -0.257482 0.151517 105 -6.08792 0.586975 0.151525 42 -6.11119 -0.190207 0.151536 74 -6.08863 0.558106 0.151543 40 -6.08406 0.605907 0.151544 48 -6.11169 -0.0749533 0.151555 71 -6.10457 -0.209173 0.151591 99 -6.10576 -0.170812 0.151591 107 -6.10328 -0.103582 0.151628 62 -6.10092 -0.122708 0.151646 111 -6.0834 0.451846 0.15167 39 -6.0979 -0.055565 0.151683 96 -6.07844 0.489907 0.151688 41 -6.07607 0.518546 0.151688 37 -6.07242 0.537465 0.151707 38 -6.06998 0.47008 0.151779 38 -6.07279 0.403185 0.151797 41 -6.07082 0.431798 0.151797 38 -6.08405 -0.036264 0.151811 62 -6.07765 0.078366 0.151866 70 -6.06989 0.316914 0.151869 37 -6.06886 0.335982 0.151869 37 -6.07614 0.0115397 0.151884 75 -6.07608 0.0306288 0.151884 75 -6.06404 0.383518 0.151888 40 -6.07395 0.0497083 0.151903 71 -6.07215 -0.00752733 0.15192 87 -6.07104 0.116461 0.151922 41 -6.06679 0.202217 0.151941 40 -6.06577 0.230803 0.151941 38 -6.05922 0.364129 0.151942 38 -6.06642 0.144992 0.151958 39 -6.0582 0.268671 0.151996 37 -6.05687 0.297216 0.151996 37 -6.06138 0.0972714 0.152012 38 -6.05794 0.163866 0.152031 38 -6.0534 0.182794 0.152068 38 -6.04503 0.249119 0.152123 39 -6.26521 0.862414 0.189501 40 -6.27988 -0.325137 0.189589 40 -6.17312 0.260037 0.226345 40 -6.17761 0.192199 0.226351 40 -6.17897 0.211664 0.226357 40 -6.18244 0.163174 0.226364 40 -6.18136 0.299261 0.226378 40 -6.19034 0.0563601 0.226382 40 -6.18892 0.143865 0.226383 40 -6.19213 0.0758223 0.226389 40 -6.19135 0.124452 0.226389 40 -6.18387 0.32858 0.226391 40 -6.19026 0.280168 0.226403 40 -6.19859 0.00771482 0.226408 40 -6.19849 0.036926 0.226408 40 -6.19627 0.231674 0.226416 40 -6.20652 -0.0313036 0.226433 40 -6.20658 -0.0118062 0.226433 40 -6.2057 0.105181 0.226434 40 -6.2083 -0.0605798 0.226439 40 -6.21608 -0.0802205 0.226465 40 -6.21676 0.349776 0.226501 40 -6.22945 -0.119603 0.22651 40 -6.22979 -0.100032 0.22651 40 -6.23681 -0.14918 0.226536 40 -6.23831 -0.168837 0.226542 40 -6.23042 0.389761 0.226553 40 -6.23361 0.370296 0.226559 40 -6.24375 -0.18864 0.226561 40 -6.23649 0.419622 0.226579 40 -6.23549 0.488464 0.226593 40 -6.24113 0.439608 0.226599 40 -6.23972 0.459212 0.226599 40 -6.2419 0.508668 0.226619 40 -6.26477 -0.21892 0.226632 40 -6.2439 0.577972 0.226645 40 -6.25024 0.529077 0.226651 40 -6.27205 -0.238939 0.226658 40 -6.24604 0.597952 0.226658 40 -6.27926 -0.259004 0.226684 40 -6.25964 0.559544 0.22669 40 -6.26205 0.619268 0.226717 40 -6.26702 0.649562 0.226743 40 -6.2595 0.718432 0.226744 40 -6.26516 0.738997 0.22677 40 -6.31192 -0.290294 0.226793 48 -6.27873 0.69061 0.226795 40 -6.27075 0.759605 0.226796 40 -6.28484 0.671291 0.226808 40 -6.27827 0.780494 0.226828 40 -6.32088 -0.350481 0.226832 74 -6.29833 0.813047 0.226906 40 -6.34592 -0.331974 0.226909 119 -6.36091 -0.312781 0.226955 67 -6.40698 -0.385911 0.227116 40 -6.35639 0.891422 0.227127 77 -6.37113 0.842487 0.227152 59 -6.3335 0.281218 0.264023 18 -6.36215 0.142516 0.264242 18 -6.36113 0.182485 0.264242 18 -6.36255 0.30266 0.264298 19 -6.36749 0.232766 0.264316 19 -6.37275 0.11275 0.264333 19 -6.36873 0.252856 0.264334 19 -6.3777 0.0226804 0.264369 19 -6.37766 0.162975 0.264389 19 -6.38018 0.21321 0.264426 19 -6.3716 0.393498 0.264427 19 -6.38507 0.0929521 0.264443 19 -6.38733 0.0729245 0.264461 19 -6.38154 0.323744 0.264482 19 -6.38847 0.344252 0.264555 19 -6.40174 0.00275162 0.264589 19 -6.40152 0.0530288 0.264589 19 -6.39029 0.414888 0.264611 19 -6.39476 0.374853 0.264629 19 -6.38578 0.50535 0.26463 19 -6.40023 0.445881 0.264721 19 -6.41772 -0.0173388 0.264735 19 -6.41956 -0.0475878 0.264753 19 -6.40478 0.466444 0.264776 19 -6.40527 0.486723 0.264795 19 -6.40551 0.557666 0.26485 19 -6.40922 0.537716 0.264868 19 -6.43265 -0.118372 0.264881 19 -6.43338 -0.0678481 0.264881 19 -6.43914 -0.0881155 0.264936 19 -6.43978 -0.158953 0.264954 34 -6.44425 -0.13879 0.264991 19 -6.44724 -0.179372 0.265027 37 -6.42961 0.580229 0.265089 19 -6.4308 0.651729 0.265163 19 -6.43875 0.611704 0.265199 19 -6.46172 -0.322014 0.265209 25 -6.44077 0.632335 0.265236 19 -6.47232 -0.210494 0.265265 37 -6.48162 -0.231141 0.265357 67 -6.45946 0.685529 0.265456 19 -6.4692 0.70717 0.265566 19 -6.51883 -0.252824 0.265705 70 -6.49873 0.731195 0.26586 19 -6.49279 0.782213 0.26586 41 -6.53463 -0.304782 0.265869 19 -6.49918 0.762293 0.265897 19 -6.49766 0.855439 0.265989 19 -6.57552 -0.285832 0.266236 19 -6.53196 0.807927 0.266245 48 -6.60389 0.890981 0.266997 20 -6.66386 -0.362756 0.267078 20 -6.58687 -0.320791 0.309822 58 -6.60403 0.186936 0.310016 93 -6.61084 0.155932 0.310111 96 -6.60524 0.353235 0.310144 97 -6.61957 0.260177 0.310301 80 -6.62281 0.322819 0.310397 93 -6.6347 0.281587 0.310555 114 -6.64264 0.0208899 0.310584 96 -6.6394 0.208675 0.310586 121 -6.64329 0.135692 0.310617 97 -6.63978 0.302679 0.31065 115 -6.59625 0.8333 0.310686 126 -6.6487 0.229837 0.310744 104 -6.64603 0.376192 0.310809 126 -6.65866 -0.0105019 0.310837 98 -6.64881 0.397294 0.310872 102 -6.67038 0.0627814 0.311028 106 -6.67 0.0942137 0.311028 112 -6.67168 0.115193 0.31106 101 -6.67654 0.0418394 0.311122 110 -6.66 0.471444 0.311126 89 -6.67282 0.430193 0.311284 103 -6.66768 0.503536 0.311285 130 -6.67343 0.45128 0.311316 104 -6.69199 0.526419 0.311696 115 -6.73459 -0.0320746 0.31204 110 -6.73645 -0.053254 0.312071 108 -6.71822 0.549616 0.31214 111 -6.75145 -0.127685 0.312324 106 -6.76212 -0.0854278 0.312482 115 -6.75541 0.584563 0.312773 111 -6.75161 0.626998 0.312773 99 -6.78581 -0.107142 0.312862 119 -6.75757 0.648939 0.3129 106 -6.7655 0.60681 0.312963 114 -6.80699 -0.150347 0.31321 91 -6.84019 -0.183461 0.313747 129 -6.81813 0.68695 0.313913 131 -6.87955 -0.206299 0.31438 122 -6.93682 -0.230051 0.315298 121 -6.90548 0.71733 0.315338 95 -6.97362 -0.264317 0.315899 103 -6.94297 0.743128 0.315971 123 -6.97717 0.77992 0.316572 127 -7.02869 -0.288731 0.316785 162 -7.10166 -0.314352 0.317956 96 -7.09791 0.815538 0.318535 89 -7.10525 0.83897 0.318693 87 -7.18283 -0.374798 0.319284 166 -6.9059 -0.291465 0.349801 40 -6.87987 0.848873 0.35023 40 -6.93608 0.8339 0.35136 40 -7.07694 0.358323 0.353449 120 -7.08003 0.336192 0.353491 77 -7.09477 0.214151 0.353699 82 -7.1077 0.181067 0.35395 88 -7.12395 0.293582 0.354369 125 -7.13022 0.159306 0.35441 82 -7.12508 0.394616 0.354496 80 -7.14402 0.238287 0.354746 82 -7.14296 0.31692 0.354788 63 -7.15322 0.261131 0.354955 79 -7.17866 0.138002 0.355415 85 -7.18374 0.0591088 0.355498 86 -7.16665 0.498807 0.355502 77 -7.17569 0.420226 0.355585 86 -7.18099 0.522538 0.355837 120 -7.20151 0.0819453 0.355875 86 -7.20322 0.104607 0.355917 89 -7.20227 0.444591 0.356171 88 -7.20408 0.478807 0.356255 87 -7.22193 0.0255253 0.356293 87 -7.23197 0.0028781 0.356502 88 -7.25506 0.551121 0.357428 78 -7.30793 -0.0197774 0.358093 88 -7.33183 -0.0427894 0.358595 87 -7.30817 0.590007 0.3586 88 -7.35726 -0.100635 0.359139 88 -7.33707 0.673746 0.359355 75 -7.34415 0.639525 0.359438 82 -7.37353 -0.0776347 0.359474 87 -7.34811 0.616621 0.35948 87 -7.39489 -0.124255 0.359934 93 -7.42621 -0.159677 0.360603 88 -7.44636 0.707776 0.361699 129 -7.54762 -0.185583 0.363157 87 -7.54754 0.74169 0.363876 79 -7.61097 -0.210849 0.364496 88 -7.62151 0.785505 0.365509 87 -7.68422 -0.236786 0.366045 89 -7.75297 -0.275242 0.36751 84 -7.74223 0.822962 0.368105 96 -7.77736 0.85154 0.368901 56 -7.84998 -0.303053 0.369561 40 -7.20583 0.826756 0.393064 40 -7.28789 -0.324063 0.394144 40 -7.29087 -0.301257 0.394196 40 -7.30381 0.81441 0.395556 40 -7.53302 0.815206 0.401474 40 -7.74569 -0.28511 0.405981 66 -7.78744 0.804762 0.408015 40 -7.88536 0.15535 0.409514 139 -7.89054 0.192635 0.40967 81 -7.88496 0.353711 0.409672 57 -7.98193 0.332622 0.412163 81 -8.00673 0.0441339 0.412628 56 -8.00491 0.308319 0.412734 152 -8.01502 0.396965 0.413098 82 -8.02571 0.422733 0.41341 77 -8.02813 0.486099 0.413566 74 -8.05574 0.132832 0.413927 58 -8.06011 0.107563 0.41403 53 -8.07041 0.0823103 0.41429 78 -8.1048 0.0188936 0.415172 40 -8.06853 0.807266 0.415282 40 -8.11081 -0.00659302 0.415327 40 -8.18571 0.2246 0.417354 71 -8.20967 0.289718 0.418029 71 -8.20603 0.4575 0.418134 79 -8.2263 0.796454 0.419331 40 -8.26291 0.25245 0.419378 122 -8.27201 -0.280229 0.419634 41 +unknow 0.955867 1 0 232 -11.3604 24.2994 -1.60966 135 -11.4239 24.2366 -1.60763 132 -11.4785 24.1555 -1.60424 136 -12.0514 26.4116 -1.59613 198 -11.8973 26.4026 -1.59165 103 -12.6668 26.0089 -1.5898 147 -12.7344 25.9403 -1.58781 150 -12.8052 25.8787 -1.58632 145 -12.9074 25.7787 -1.58359 143 -12.974 25.7095 -1.5816 145 -13.0321 25.6241 -1.57849 140 -13.1381 25.534 -1.57651 140 -13.1999 25.4572 -1.57402 142 -13.2549 25.3678 -1.57067 144 -13.3613 25.2803 -1.56893 150 -13.4294 25.2171 -1.56744 143 -13.484 25.129 -1.56421 137 -13.5785 25.0213 -1.56111 130 -13.6428 24.9522 -1.55924 128 -13.7577 24.7909 -1.5539 148 -13.6749 24.8253 -1.55328 131 -13.8539 24.6893 -1.55129 131 -13.9108 24.6091 -1.54868 132 -13.9713 24.5358 -1.54657 88 -14.0778 24.4541 -1.54546 66 -11.8101 24.441 -1.47871 128 -11.6845 24.4748 -1.47721 186 -11.5863 24.4662 -1.47411 124 -11.4958 24.4736 -1.47212 117 -14.0738 26.3713 -1.47172 208 -13.7756 26.5102 -1.47081 176 -11.2941 24.5432 -1.47075 105 -13.6739 26.5179 -1.46857 175 -11.346 24.4532 -1.46702 133 -14.3882 26.0666 -1.46509 133 -14.2899 26.0819 -1.46318 176 -14.1325 26.0858 -1.45913 149 -14.0296 26.0914 -1.45666 143 -14.1465 24.527 -1.38294 124 -13.9435 24.62 -1.38181 120 -13.9732 24.4928 -1.37642 183 -12.3203 25.0445 -1.36022 121 -12.3376 24.8822 -1.35247 137 -12.0459 24.683 -1.33516 187 -11.833 24.54 -1.32268 152 -11.7403 24.5446 -1.32066 186 -11.646 24.5453 -1.31841 140 -11.4377 24.6034 -1.31638 140 -11.5509 24.5439 -1.31605 189 -14.1367 24.464 -1.22059 174 -13.9886 24.4731 -1.21725 234 -13.7797 24.463 -1.21158 123 -13.6478 24.498 -1.20986 120 -13.5225 24.4533 -1.2048 147 -13.4399 24.4851 -1.20419 121 -13.2844 24.4744 -1.19994 159 -13.1866 24.4773 -1.19772 110 -13.0758 24.4552 -1.19407 140 -12.9492 24.4953 -1.19286 94 -12.7628 24.5142 -1.18932 69 -12.8361 24.4669 -1.18891 85 -12.64 24.4654 -1.18426 139 -12.5137 24.5033 -1.18304 105 -12.4006 24.4712 -1.179 91 -12.3004 24.4636 -1.17637 126 -12.1734 24.498 -1.17505 120 -12.0717 24.486 -1.17222 106 -11.9772 24.4879 -1.17019 107 -11.685 24.5712 -1.16756 123 -11.8374 24.4937 -1.16736 122 -11.7544 24.5181 -1.16665 201 -11.5635 24.5138 -1.1623 112 -11.4268 24.5227 -1.15977 171 -11.2476 24.5395 -1.15673 101 -11.3163 24.4859 -1.15572 121 -11.0817 24.4812 -1.15056 110 -11.0007 24.5068 -1.15005 74 -14.191 24.562 -1.0643 143 -14.05 24.4956 -1.05856 177 -13.9472 24.4945 -1.05623 148 -13.8643 24.5278 -1.05569 255 -13.7017 24.5092 -1.05138 255 -13.6042 24.5154 -1.04949 255 -13.5069 24.5213 -1.04761 255 -13.3577 24.5233 -1.04446 255 -13.2472 24.5037 -1.04132 255 -13.1494 24.5064 -1.03935 255 -13.0103 24.524 -1.0371 255 -12.908 24.5171 -1.03468 255 -12.804 24.5062 -1.03207 255 -12.703 24.5002 -1.02974 255 -12.5619 24.51 -1.02723 255 -12.4676 24.5155 -1.02552 255 -12.3671 24.5082 -1.02318 255 -12.2309 24.5251 -1.02112 255 -11.8812 24.692 -1.02094 157 -12.1351 24.5258 -1.01923 255 -12.0333 24.5136 -1.01672 249 -11.9054 24.5449 -1.01546 182 -11.7027 24.5183 -1.01044 149 -11.5648 24.5262 -1.0081 158 -11.464 24.5118 -1.00559 165 -14.0462 24.5264 -0.879898 133 -13.9098 24.5557 -0.87828 156 -13.7377 24.4303 -0.870807 167 -13.6415 24.4384 -0.869266 192 -13.5001 24.4551 -0.867185 203 -13.4011 24.4571 -0.865413 198 -13.2966 24.4481 -0.863178 216 -13.152 24.4559 -0.860789 212 -13.0516 24.453 -0.858863 224 -12.9542 24.455 -0.857167 203 -12.8193 24.4786 -0.855549 210 -12.7203 24.4762 -0.853699 223 -12.6214 24.4734 -0.85185 234 -12.5208 24.4666 -0.849846 230 -12.3838 24.4825 -0.847997 240 -12.2871 24.482 -0.846301 237 -12.1861 24.4722 -0.844221 233 -12.0486 24.4844 -0.842294 236 -11.9463 24.4701 -0.84006 233 -11.8485 24.4643 -0.83821 226 -11.7073 24.4658 -0.835898 255 -11.6141 24.4681 -0.834434 242 -11.5176 24.4629 -0.832662 235 -11.4238 24.4627 -0.83112 246 -11.2925 24.4817 -0.829656 237 -11.2048 24.4935 -0.828653 244 -11.1253 24.5231 -0.828422 243 -11.0064 24.5679 -0.828112 215 -10.9251 24.5933 -0.827726 161 -14.1457 24.4748 -0.702559 231 -14.0014 24.4909 -0.700689 237 -13.8977 24.4879 -0.698948 236 -13.7912 24.4792 -0.697013 226 -13.6918 24.4823 -0.69553 233 -13.5462 24.4924 -0.69353 234 -13.4432 24.4875 -0.691789 234 -13.3422 24.4858 -0.690177 236 -13.1982 24.4956 -0.688242 242 -13.0957 24.4894 -0.686501 236 -12.9971 24.4898 -0.685018 239 -12.8546 24.4995 -0.683147 239 -12.7618 24.5096 -0.682051 244 -12.6572 24.4963 -0.680116 243 -12.5564 24.4897 -0.678439 244 -12.4209 24.5094 -0.67702 244 -12.325 24.5108 -0.675666 237 -12.2247 24.503 -0.673989 241 -12.0878 24.5173 -0.672441 241 -11.9931 24.5192 -0.671151 240 -11.888 24.4993 -0.669088 237 -11.756 24.5208 -0.667862 241 -11.6591 24.5161 -0.666379 241 -11.5607 24.5074 -0.664766 242 -11.4315 24.5327 -0.663734 243 -11.3418 24.5412 -0.662766 186 -14.1968 24.4905 -0.558365 161 -14.0484 24.4998 -0.556576 186 -13.9418 24.4917 -0.55495 196 -13.8304 24.4744 -0.553053 213 -13.732 24.4794 -0.551861 215 -13.5855 24.4879 -0.550126 228 -13.4882 24.4936 -0.548988 235 -13.3902 24.4973 -0.547795 233 -13.2461 24.5073 -0.546169 232 -13.1455 24.5047 -0.544814 239 -13.0422 24.4965 -0.543296 236 -12.8996 24.5063 -0.541724 242 -12.8013 24.5059 -0.540478 241 -12.7068 24.5123 -0.539447 242 -12.563 24.5167 -0.537767 250 -12.466 24.5168 -0.536575 246 -12.3655 24.5095 -0.535165 245 -12.2679 24.507 -0.533919 247 -12.1302 24.5198 -0.532564 249 -12.0346 24.52 -0.531425 255 -11.9339 24.5092 -0.529962 255 -11.7975 24.5219 -0.528661 255 -11.699 24.5137 -0.527306 255 -11.6065 24.5178 -0.52633 255 -11.4714 24.5305 -0.525083 255 -11.38 24.5356 -0.524161 250 -11.2879 24.5385 -0.523185 255 -11.1664 24.5787 -0.522805 159 -11.0817 24.5972 -0.522317 187 -13.6577 26.0817 -0.392137 168 -13.6564 25.8813 -0.38851 101 -13.808 25.6782 -0.386311 128 -13.8023 24.639 -0.367686 229 -13.6645 24.5739 -0.365157 169 -13.5146 24.4855 -0.362099 255 -13.4289 24.5121 -0.361731 255 -12.2145 25.0258 -0.359639 97 -12.5309 24.7793 -0.358012 97 -12.6644 24.6574 -0.357036 96 -12.3926 24.7952 -0.357033 96 -12.5705 24.665 -0.356301 96 -12.1366 24.6699 -0.352424 96 -11.892 24.66 -0.350058 125 -11.7946 24.6558 -0.349119 143 -11.6981 24.653 -0.348221 255 -11.5776 24.6988 -0.348016 255 -11.4889 24.7115 -0.347486 255 -13.5587 26.0045 -0.253453 87 -13.8127 25.7956 -0.252418 94 -13.4049 26.0076 -0.252382 132 -12.5436 25.9149 -0.245016 86 -13.4961 24.6412 -0.234086 225 -12.4916 24.9016 -0.230365 83 -12.5375 24.7015 -0.227881 83 -11.8547 24.6863 -0.222906 82 -11.7694 24.7072 -0.222622 82 -11.6282 24.7099 -0.221709 82 -11.5446 24.7336 -0.221488 82 -11.3234 24.7653 -0.22048 255 -11.4375 24.7062 -0.220387 82 -11.2233 24.7515 -0.21963 173 -13.2377 24.7267 -0.0480421 163 -13.0995 24.7481 -0.0476221 255 -12.7641 24.7698 -0.046381 117 -12.6735 24.7849 -0.0461251 106 -12.4461 24.8194 -0.0454676 106 -12.5602 24.7551 -0.0454141 106 -12.3351 24.7921 -0.044793 106 -12.2367 24.7895 -0.0443733 106 -12.0242 24.8489 -0.0440071 253 -12.0952 24.7966 -0.0438624 105 -11.9001 24.791 -0.0430412 232 -11.811 24.8048 -0.0428036 238 -11.6777 24.8258 -0.0424566 224 -11.5844 24.8298 -0.0421279 225 +unknow 0.966493 1 0 398 -11.259 -1.16815 -1.31127 110 -11.2679 -1.07968 -1.31127 108 -11.2585 -1.1145 -1.31047 103 -11.2613 -1.04339 -1.30994 94 -11.6602 -1.34396 -1.29232 84 -11.652 -1.3801 -1.29181 186 -11.6507 -1.25017 -1.28977 120 -11.6598 -1.12161 -1.28926 117 -11.6328 -1.30371 -1.28824 121 -11.6445 -1.17552 -1.28799 126 -11.6309 -1.21105 -1.28671 126 -12.0887 -1.36043 -1.28596 74 -12.0693 -1.31991 -1.28302 70 -12.0655 -1.28117 -1.28204 88 -12.0654 -1.2237 -1.28131 101 -12.0593 -1.18485 -1.28008 97 -12.0531 -1.14604 -1.27886 100 -12.0547 -1.10799 -1.27861 87 -12.4793 -1.44299 -1.26046 252 -12.484 -1.38395 -1.26023 205 -12.4688 -1.48148 -1.25976 255 -12.44 -1.61693 -1.25836 121 -12.4464 -1.51844 -1.25766 243 -12.4727 -1.2044 -1.25673 133 -12.4567 -1.34125 -1.25649 92 -12.4233 -1.57504 -1.25579 134 -12.447 -1.30064 -1.25486 126 -12.4451 -1.24117 -1.25393 122 -13.2106 -1.11864 -1.24565 99 -13.1646 -1.5535 -1.24543 121 -13.1694 -1.51213 -1.24543 236 -13.1557 -1.59438 -1.24499 178 -13.1914 -1.17967 -1.24411 117 -13.1816 -1.22057 -1.24346 166 -13.7063 -1.60428 -1.22621 122 -13.7423 -1.25934 -1.2262 148 -12.5008 -1.19849 -1.16858 91 -12.3506 -1.24315 -1.15259 99 -12.3307 -1.31948 -1.15128 96 -12.311 -1.27832 -1.14865 145 -12.7405 -1.2262 -1.12177 84 -12.3084 -1.3988 -1.0788 93 -12.3269 -1.22465 -1.0788 136 -12.2913 -1.2991 -1.07589 99 -12.283 -1.35678 -1.07569 103 -12.2815 -1.25903 -1.07444 111 -12.2909 -1.38518 -1.00997 118 -12.2616 -1.34295 -1.00662 111 -12.2657 -1.30443 -1.00662 98 -12.2361 -1.26249 -1.00327 101 -12.0181 -1.18325 -0.981023 97 -11.9008 -1.13424 -0.969012 102 -11.8548 -1.09238 -0.964089 115 -11.8281 -1.03381 -0.960938 122 -11.8055 -0.994528 -0.958378 72 -12.1988 -1.36055 -0.932396 114 -12.1476 -1.31609 -0.927192 115 -11.9141 -1.25242 -0.904887 68 -11.8105 -1.00294 -0.755205 183 -11.6854 -0.919763 -0.650173 64 -11.8521 -1.001 -0.59618 157 -11.7853 -1.03252 -0.591844 40 -11.7414 -0.935693 -0.588321 80 -12.1648 -1.38762 -0.551234 67 -11.9985 -1.31178 -0.540422 158 -11.9272 -1.26623 -0.535699 133 -11.9073 -1.22635 -0.534207 81 -11.8652 -1.16564 -0.531224 94 -11.839 -1.1256 -0.52936 130 -11.8087 -1.08536 -0.527247 119 -11.7822 -1.04568 -0.525382 120 -11.7512 -0.987217 -0.523145 93 -11.7572 -0.913361 -0.523144 255 -11.7135 -0.854567 -0.520161 128 -11.7005 -0.946072 -0.519789 215 -12.1634 -1.23256 -0.477567 255 -12.1389 -1.13377 -0.475655 225 -12.082 -1.3009 -0.473408 40 -12.0578 -1.16425 -0.471272 255 -12.0423 -1.25828 -0.470935 244 -11.8733 -1.03316 -0.460255 149 -11.8104 -0.971484 -0.456433 190 -11.8114 -0.934216 -0.456321 169 -12.1925 -1.3527 -0.411102 71 -11.994 -1.29299 -0.400783 178 -11.968 -1.19525 -0.398961 93 -11.9603 -1.25144 -0.39886 223 -11.8902 -1.14994 -0.394813 126 -11.8739 -1.11077 -0.393801 134 -11.8574 -1.0717 -0.392789 117 -11.8026 -1.01083 -0.389754 108 -11.7679 -0.970713 -0.387831 228 -11.7709 -0.933735 -0.387831 193 -11.7712 -0.877968 -0.387628 212 -12.1716 -1.33922 -0.340303 80 -12.0407 -1.28625 -0.334199 92 -12.0445 -1.19105 -0.333929 118 -12.0209 -1.2459 -0.333122 235 -11.9845 -1.14697 -0.331057 158 -11.9662 -1.10724 -0.330069 213 -11.902 -1.06345 -0.327017 81 -11.8412 -0.926753 -0.323785 92 -11.8252 -1.00027 -0.323336 122 -11.8184 -0.962281 -0.322887 169 -11.9952 -1.2842 -0.255679 66 -11.9952 -1.24611 -0.255525 82 -11.9573 -1.2043 -0.253907 90 -11.9489 -1.14663 -0.253367 92 -11.9067 -1.10494 -0.251595 138 -11.8663 -1.0637 -0.2499 90 -11.8254 -1.00398 -0.248128 99 -11.7966 -0.964292 -0.246895 166 -11.7976 -0.927072 -0.246818 105 -11.7918 -0.870756 -0.246432 115 -11.7806 -0.83275 -0.245893 114 -12.2688 -1.33259 -0.18912 93 -12.1179 -1.27736 -0.184091 104 -12.0861 -1.23555 -0.18293 81 -12.0263 -1.19113 -0.180867 113 -11.994 -1.1308 -0.179642 101 -11.9775 -1.09126 -0.178997 102 -11.9391 -1.04986 -0.177643 95 -11.9101 -0.990693 -0.176546 101 -11.9101 -0.915367 -0.176353 107 -11.9051 -0.952613 -0.176288 103 -11.8923 -0.8576 -0.175643 69 -12.3603 -1.34882 -0.12843 96 -12.1417 -1.28686 -0.122361 138 -12.1159 -1.24571 -0.121548 90 -12.0798 -1.18459 -0.12041 105 -12.0497 -1.1435 -0.119488 108 -12.0293 -1.10349 -0.118838 112 -12.0085 -1.0446 -0.118133 108 -11.9718 -1.00361 -0.117049 115 -11.967 -0.965368 -0.116832 104 -11.9534 -0.907645 -0.116345 102 -11.9772 0.127038 -0.116067 40 -11.9429 -0.831444 -0.115911 100 -11.9363 -0.868679 -0.115802 102 -12.7599 -1.55857 -0.0541346 44 -12.7528 -1.51704 -0.0538897 44 -12.69 -1.46901 -0.0525028 44 -12.6292 -1.40156 -0.0511158 65 -12.4368 -1.34025 -0.0470778 84 -12.3216 -1.28845 -0.0446305 114 -12.2799 -1.24499 -0.0436923 118 -12.2438 -1.18298 -0.0428355 118 -12.2037 -1.14033 -0.041938 123 -12.2534 0.18645 -0.041889 42 -12.2032 -1.10162 -0.0418562 123 -12.208 0.147492 -0.0409512 42 -12.1585 -1.03973 -0.0408363 118 -12.1557 -1.00103 -0.0407137 123 -12.1865 0.0898473 -0.040503 42 -12.1848 0.0515597 -0.0404625 42 -12.1349 -0.96089 -0.0402241 123 -12.1253 -0.902623 -0.0399383 126 -12.0962 -0.862185 -0.0392855 109 -12.7027 -1.51773 0.00641341 40 -12.6899 -1.55667 0.00653905 40 -12.6819 -1.45472 0.00685427 40 -12.6804 -1.41422 0.0069489 40 -12.5197 -1.35683 0.00956099 40 -12.3767 -1.30232 0.0118899 40 -12.3111 -1.23693 0.013023 120 -12.2851 -1.19541 0.0134953 91 -12.241 -1.15241 0.0142508 131 -12.2184 -1.09228 0.0146916 84 -12.2098 -1.05288 0.0148807 88 -12.1811 -1.01194 0.0153844 132 -12.1858 -0.954525 0.0153847 86 -12.1748 -0.915215 0.0156052 92 -12.1503 -0.836705 0.0160777 81 -12.1502 -0.779189 0.016141 70 -12.1377 -0.874176 0.0162348 129 -12.8095 -1.54124 0.0896749 49 -12.743 -1.57375 0.0902396 49 -12.7084 -1.38726 0.090751 48 -12.6053 -1.33573 0.0917354 48 -12.5955 -1.29466 0.0918632 48 -12.5197 -1.1874 0.0926474 77 -12.5139 -1.22652 0.0926654 86 -12.4915 -1.14508 0.0929393 100 -12.4649 -1.08336 0.0932312 114 -12.4655 -1.00452 0.0932864 94 -12.4503 -1.04265 0.0933955 130 -12.4361 -0.943128 0.0935966 109 -12.4191 -0.902565 0.093779 147 -12.394 -0.861541 0.0940345 91 -13.7918 -1.2708 0.168905 50 -12.764 -1.36023 0.171677 46 -12.7182 -1.59837 0.171726 46 -12.7132 -1.5572 0.171753 46 -12.6567 -1.30883 0.171984 46 -12.6608 -1.26906 0.171984 46 -12.6609 -1.1883 0.247481 40 -12.7188 -1.25436 0.247688 40 -12.7208 -1.29493 0.247707 40 -12.7803 -1.3417 0.247914 40 -13.334 -0.873367 0.249572 40 -13.3491 -0.916524 0.24963 40 -13.5321 -0.993545 0.250238 40 -13.5349 -1.03652 0.250257 40 -13.5435 -1.08002 0.250295 40 -13.5642 -1.14606 0.250379 40 -13.8156 -1.25528 0.251219 41 -12.7657 -1.31667 0.32351 42 -12.8036 -1.25957 0.323804 42 -12.9764 -1.37917 0.325489 43 -13.1161 -1.20652 0.326607 43 -13.4516 -0.89655 0.329449 44 -13.4587 -0.939487 0.329541 45 -13.5434 -0.987995 0.330347 54 -13.5674 -0.839861 0.330476 45 -13.758 -1.06842 0.332362 63 -13.9141 -1.12423 0.333827 46 -14.8319 -0.868947 0.342056 49 -14.8346 -0.822346 0.342056 49 -12.7916 -1.11193 0.408656 35 -12.8007 -1.05197 0.408719 35 -12.8279 -1.15578 0.409288 35 -12.8562 -1.23989 0.409858 35 -12.876 -1.20101 0.410111 35 -12.8681 -1.3023 0.410142 35 -12.9793 -1.355 0.411977 35 -13.4327 -0.914196 0.418531 36 -13.4697 -0.959311 0.419164 37 -13.4894 -0.875595 0.419386 37 -13.4829 -1.02417 0.419448 44 -14.7668 -0.891104 0.439577 53 -14.8414 -0.848948 0.440717 40 -12.9336 -1.2786 0.477188 43 -13.1385 -1.34012 0.481583 44 -13.4776 -0.883724 0.487865 45 -13.5103 -0.843185 0.488494 45 -14.8252 -0.712507 0.515832 50 -14.8311 -0.82957 0.516082 50 -14.8368 -0.759767 0.516124 50 -12.8295 -0.812635 0.538511 51 -12.8634 -0.875739 0.539497 52 -12.8686 -0.916731 0.539705 52 -12.8696 -0.95746 0.539808 52 -12.8909 -1.0202 0.540483 52 -12.8882 -1.10152 0.540586 52 -12.9215 -1.06355 0.541365 52 -12.9565 -1.16904 0.542506 52 -12.9667 -1.21107 0.542869 52 -12.9807 -1.25356 0.543336 52 -13.0165 -1.29839 0.544374 52 -13.3787 -0.0907991 0.552117 54 -13.3904 -0.132975 0.552428 54 -14.6363 -0.354752 0.584872 59 -14.7825 -0.730632 0.589023 80 -14.8162 -0.849064 0.590061 60 -14.8372 -0.313343 0.590064 60 -14.8308 -0.803186 0.590372 60 -14.8561 -0.26708 0.590531 60 -12.9315 -0.619763 0.62088 41 -12.9376 -0.477534 0.620881 41 -12.9435 -0.355636 0.620946 41 -12.951 -0.43727 0.621267 41 -12.9523 -0.396581 0.621267 41 -12.9582 -0.0709596 0.621269 41 -12.9579 -0.254179 0.621333 41 -12.9494 -0.579813 0.621395 41 -12.963 -0.295008 0.621525 41 -12.9679 -0.111739 0.621591 41 -12.9706 -0.213639 0.621719 41 -12.9631 -0.539606 0.621781 41 -12.9744 -0.0098787 0.621784 41 -12.9755 -0.152553 0.621848 41 -12.9604 -0.682311 0.621909 41 -12.9581 -0.825141 0.622101 41 -12.9863 0.0309349 0.62217 41 -12.9682 -0.723558 0.622231 41 -12.9678 -0.764413 0.622295 41 -12.9981 0.0718236 0.622557 41 -13.0039 0.112723 0.62275 41 -12.9826 -0.908578 0.623066 41 -13.0232 0.174311 0.623394 41 -12.9993 -0.868692 0.623516 41 -13.0036 -0.951062 0.623838 41 -13.0189 -1.01384 0.62448 41 -13.0149 -1.15762 0.624737 74 -13.0416 -1.05678 0.625317 41 -13.0998 0.257818 0.625903 41 -13.053 -1.20227 0.626088 89 -13.0691 -1.24513 0.626731 169 -13.1373 0.361878 0.62719 41 -13.1603 0.321183 0.627897 41 -13.1447 -1.3147 0.629368 41 -13.212 0.405626 0.629635 83 -13.1822 -1.36021 0.630718 42 -13.0319 -0.338265 0.70858 92 -13.0395 -0.420484 0.708966 91 -13.0408 -0.379516 0.708966 92 -13.0381 -0.564014 0.70912 93 -13.0382 -0.605066 0.709197 89 -13.0438 -0.523215 0.709275 90 -13.0461 -0.461746 0.709275 92 -13.0513 -0.277266 0.709276 96 -13.0521 -0.236265 0.709277 96 -13.0676 -0.133918 0.709819 96 -13.051 -0.708462 0.709893 104 -13.0728 -0.1956 0.710051 97 -13.0739 -0.0929182 0.710051 98 -13.0801 -0.0518829 0.710284 99 -13.0692 -0.668302 0.710512 106 -13.0922 0.00974406 0.710748 96 -13.069 -0.812478 0.710821 96 -13.0704 -0.853798 0.710976 103 -13.0767 -0.751118 0.710976 96 -13.1041 0.0508949 0.711213 95 -13.0836 -0.89598 0.711594 97 -13.1139 0.0921137 0.7116 95 -13.1215 0.133378 0.71191 98 -13.0861 -0.999491 0.711981 97 -13.0986 -0.938397 0.712291 97 -13.1148 -1.04319 0.713219 101 -13.1627 0.195751 0.713535 95 -13.168 0.237196 0.713768 108 -13.1274 -1.08574 0.713838 97 -13.142 -1.14937 0.714611 94 -13.1912 0.279027 0.714697 93 -13.1602 -1.19268 0.715462 85 -13.2157 0.341806 0.715703 96 -13.1843 -1.23669 0.716545 85 -13.2815 -1.35133 0.720723 40 -13.2857 -1.30959 0.720724 40 -13.0594 -0.329909 0.770186 156 -13.063 -0.473756 0.770532 152 -13.0677 -0.391725 0.77062 150 -13.0763 -0.289204 0.77088 154 -13.0744 -0.433026 0.770966 151 -13.0689 -0.6179 0.771052 147 -13.0832 -0.24822 0.771141 158 -13.0774 -0.515388 0.771226 157 -13.0768 -0.577095 0.771312 167 -13.0922 -0.186663 0.771488 158 -13.0947 -0.145549 0.771575 157 -13.0777 -0.721269 0.771658 165 -13.0991 -0.104433 0.771748 161 -13.0849 -0.659825 0.771832 151 -13.0913 -0.763247 0.772351 159 -13.1154 -0.0427278 0.772442 159 -13.0948 -0.804724 0.772611 163 -13.0968 -0.866809 0.772871 161 -13.1275 -0.00149792 0.772962 166 -13.112 -0.909159 0.77365 160 -13.1434 0.039821 0.773656 164 -13.1492 0.0811617 0.773916 160 -13.119 -0.951051 0.774084 157 -13.1607 0.143282 0.774437 162 -13.1319 -0.993436 0.774777 163 -13.147 -1.05687 0.775643 159 -13.1901 0.185104 0.775737 162 -13.1955 0.226653 0.775998 164 -13.1675 -1.10012 0.776683 153 -13.2142 0.289312 0.776865 153 -13.178 -1.14266 0.77729 156 -13.2352 0.331419 0.777819 150 -13.2122 -1.2083 0.779023 150 -13.2342 -1.25221 0.78015 171 -13.2959 -1.30006 0.78301 78 -13.2163 -0.484717 0.864312 112 -13.2223 -0.360193 0.864413 116 -13.2178 -0.547162 0.864511 118 -13.2258 -0.297927 0.864513 121 -13.2251 -0.40186 0.864612 117 -13.2287 -0.25642 0.864613 120 -13.2201 -0.58887 0.864711 112 -13.2221 -0.630598 0.86491 112 -13.2297 -0.443616 0.864912 114 -13.221 -0.693007 0.86501 114 -13.2423 -0.152677 0.865213 123 -13.2434 -0.215117 0.865313 123 -13.259 -0.0695842 0.866013 123 -13.2383 -0.777396 0.866108 129 -13.2607 -0.11126 0.866112 123 -13.2385 -0.840031 0.866308 106 -13.2671 0.0345548 0.866413 123 -13.2487 -0.736264 0.866508 115 -13.2851 -0.00716758 0.867312 125 -13.2617 -0.883395 0.867606 108 -13.2628 -0.92534 0.867805 123 -13.2969 0.0763518 0.867911 123 -13.2858 -0.968938 0.869104 118 -13.3245 0.118316 0.86931 119 -13.293 -1.03249 0.869703 118 -13.3318 0.181198 0.86971 119 -13.2977 -1.0749 0.870102 113 -13.3472 0.22332 0.870509 124 -13.3584 0.265463 0.871109 121 -13.332 -1.11992 0.871999 117 -13.3989 0.329361 0.873207 96 -13.3644 -1.18617 0.873897 110 -13.3686 -1.22889 0.874296 109 -13.4839 -1.28246 0.880289 36 +unknow 0.966657 1 0 255 -19.6197 25.2519 -1.40918 109 -19.9241 24.6693 -1.39563 125 -19.9562 24.5507 -1.39199 162 -18.9686 25.3041 -1.39127 112 -19.042 25.2364 -1.39076 107 -20.0055 24.4539 -1.38977 127 -20.0773 24.3069 -1.38633 159 -20.1216 24.2053 -1.3838 124 -20.1489 24.0837 -1.37996 159 -20.1962 23.9867 -1.37773 122 -20.2573 23.8303 -1.37369 157 -20.3048 23.7347 -1.37157 124 -19.3053 24.1339 -1.35486 116 -19.0581 23.9785 -1.3409 116 -18.8336 24.0818 -1.33797 102 -18.9369 23.9802 -1.33716 118 -21.7452 25.1694 -1.28424 167 -21.6113 25.174 -1.28047 149 -21.5009 25.2053 -1.27832 148 -21.6782 24.005 -1.24306 165 -21.7306 23.9117 -1.24153 158 -21.4744 23.9304 -1.23444 152 -19.1819 25.3324 -1.21745 162 -19.0625 25.3398 -1.21449 160 -19.2044 25.1973 -1.21323 155 -18.8712 25.3333 -1.2091 160 -18.7773 25.3732 -1.20802 211 -19.2089 24.0868 -1.17402 255 -19.2719 24.0107 -1.17312 181 -19.0412 24.0312 -1.16738 202 -18.8944 24.0783 -1.16495 158 -21.8072 23.8877 -1.03725 123 -21.724 23.9472 -1.03679 122 -21.5257 23.8787 -1.0297 185 -21.361 23.9217 -1.0267 150 -21.2116 23.9049 -1.02238 175 -21.0888 23.9174 -1.01961 176 -20.9207 23.9533 -1.01637 169 -20.7721 23.9343 -1.01206 145 -20.6394 23.9328 -1.00867 192 -20.4849 23.9811 -1.0062 156 -20.3022 23.9188 -0.999805 191 -18.2705 25.3938 -0.996313 119 -20.1665 23.9106 -0.996184 154 -19.6358 24.3483 -0.996177 177 -19.9921 23.9317 -0.992485 144 -19.8658 23.9329 -0.989403 183 -18.2574 25.1246 -0.987611 118 -19.7207 23.9103 -0.985165 178 -18.2879 25.0009 -0.984454 118 -19.5986 23.9149 -0.982314 180 -18.3297 24.8934 -0.982067 118 -19.4279 23.9356 -0.97877 178 -18.33 24.6495 -0.97452 129 -19.1822 23.9386 -0.972914 171 -19.0431 23.9958 -0.971295 240 -18.8304 24.0363 -0.967441 146 -18.6301 24.0125 -0.961971 116 -18.2004 24.3148 -0.961196 154 -18.2663 24.0072 -0.953264 208 -21.9403 23.9826 -0.839211 59 -21.8567 24.0426 -0.838823 101 -21.529 23.9078 -0.828508 86 -21.4418 23.9619 -0.827927 76 -21.3025 23.9575 -0.824832 106 -21.1132 23.8956 -0.819288 93 -20.9227 23.9061 -0.815483 114 -20.7884 23.9039 -0.812581 160 -20.6478 23.8935 -0.809357 112 -20.492 23.9405 -0.807229 129 -20.335 23.9089 -0.803167 117 -20.2004 23.9025 -0.800201 121 -18.2874 25.3639 -0.799338 161 -20.0374 23.9377 -0.797686 125 -19.9071 23.9345 -0.794913 127 -18.2878 25.1144 -0.792829 94 -19.7757 23.9291 -0.792076 122 -19.6459 23.9248 -0.789303 124 -19.2378 24.1929 -0.787751 176 -18.2495 24.8973 -0.786449 137 -19.4736 23.9442 -0.786272 124 -19.3479 23.9431 -0.783692 129 -19.2451 23.9695 -0.782273 133 -18.2492 24.7337 -0.782196 101 -19.0115 24.0635 -0.77995 112 -18.2531 24.4969 -0.776139 131 -18.8148 23.9691 -0.773633 117 -18.6574 24.0008 -0.771311 128 -18.2327 24.3099 -0.770919 94 -18.2604 24.0311 -0.764282 144 -21.8815 23.8681 -0.668772 69 -21.7472 23.8716 -0.666388 69 -21.5475 23.8773 -0.662865 144 -21.4177 23.8838 -0.660643 127 -21.2987 23.9017 -0.658855 124 -21.1375 23.8711 -0.655332 150 -20.9655 23.9027 -0.652893 122 -20.8181 23.8855 -0.649913 172 -20.692 23.8918 -0.647799 124 -20.5167 23.9162 -0.645198 135 -20.3754 23.9029 -0.642434 117 -18.2624 25.4381 -0.639861 67 -20.2137 23.8645 -0.638804 174 -20.0407 23.8874 -0.636256 118 -18.2183 25.2087 -0.63412 81 -19.9144 23.8888 -0.634088 120 -19.787 23.8881 -0.631866 133 -19.6274 23.9239 -0.629861 139 -19.4915 23.911 -0.62726 136 -19.3698 23.9145 -0.625254 142 -19.2445 23.9129 -0.623087 139 -19.0918 23.9533 -0.621352 132 -18.1963 24.6031 -0.620528 255 -18.9495 23.9285 -0.618426 136 -18.8273 23.9281 -0.616366 131 -18.1805 24.4207 -0.616304 255 -18.6664 23.955 -0.614252 133 -18.1657 24.1621 -0.610455 255 -18.1946 24.0427 -0.608343 159 -18.264 23.9774 -0.608074 116 -21.5029 23.9206 -0.447745 165 -21.3663 23.9195 -0.445868 155 -21.1644 23.9196 -0.443135 198 -21.0588 23.9515 -0.442196 155 -20.8979 23.9197 -0.439545 168 -20.7727 23.9279 -0.437994 185 -20.6063 23.9634 -0.436321 168 -20.462 23.9475 -0.434159 172 -20.2959 23.9051 -0.431304 178 -18.2816 25.4023 -0.430014 190 -20.1264 23.9331 -0.429509 182 -20.0075 23.9441 -0.428122 179 -19.8669 23.9285 -0.426041 180 -18.2439 25.1829 -0.425938 170 -19.7018 23.9585 -0.424368 177 -19.5834 23.9677 -0.422981 175 -18.2441 24.9354 -0.421863 175 -19.455 23.9639 -0.421268 173 -19.2955 23.9977 -0.419758 237 -18.2547 24.7862 -0.41954 155 -19.1538 23.9755 -0.417596 183 -19.0286 23.9729 -0.415964 185 -18.2252 24.5843 -0.415872 180 -18.8924 23.9557 -0.413965 211 -18.7473 24.0035 -0.412904 185 -18.2042 24.3956 -0.41253 151 -18.6092 23.9818 -0.410824 160 -18.2815 24.1022 -0.4087 211 -21.6847 23.9125 -0.29999 96 -21.5426 23.9062 -0.298416 95 -21.3768 23.8724 -0.296276 120 -21.1964 23.8965 -0.29467 153 -21.0578 23.8909 -0.293159 152 -20.9208 23.8862 -0.29168 152 -20.7557 23.9241 -0.29042 155 -20.6139 23.9119 -0.288815 168 -20.4932 23.9233 -0.287713 146 -20.3001 23.8489 -0.28485 156 -20.1359 23.8831 -0.28359 172 -18.2657 25.3125 -0.283188 93 -20.0159 23.8925 -0.282488 133 -19.8717 23.8722 -0.280789 166 -18.2289 25.0948 -0.280075 92 -19.7222 23.9209 -0.279875 136 -19.5811 23.9022 -0.278238 171 -19.4681 23.917 -0.277294 139 -18.1933 24.8807 -0.277025 92 -19.2749 23.9088 -0.275279 169 -18.2142 24.6643 -0.274479 91 -19.166 23.9271 -0.274429 137 -19.0285 23.9089 -0.272855 172 -18.2046 24.4897 -0.272184 91 -18.9211 23.9277 -0.272036 139 -18.7416 23.9316 -0.270337 168 -18.6357 23.9508 -0.269549 138 -18.2478 23.9918 -0.266338 169 -21.3378 24.7458 -0.090247 123 -21.3918 24.6515 -0.0899204 123 -21.3072 24.3219 -0.0871538 122 -21.3636 24.2324 -0.0868818 131 -21.3387 24.0515 -0.085499 151 -21.4385 23.9358 -0.0853184 162 -20.5527 23.9886 -0.0803576 119 -18.3139 25.5443 -0.0788897 167 -20.3604 23.9161 -0.0787175 186 -20.1662 23.9156 -0.0775689 197 -20.0485 23.9282 -0.0769668 167 -18.2453 25.2808 -0.0765783 134 -19.9041 23.9082 -0.0759824 201 -19.7543 23.957 -0.0754528 164 -18.2222 25.0827 -0.0749953 134 -19.6078 23.9324 -0.074432 202 -19.4921 23.9442 -0.0738482 163 -18.1934 24.8785 -0.0733394 135 -19.3213 23.9643 -0.0730091 189 -19.1996 23.9671 -0.0723342 162 -18.201 24.6446 -0.0716656 163 -19.0706 23.9601 -0.0715501 185 -18.9141 23.9948 -0.0709114 155 -18.2067 24.491 -0.0705742 170 -18.7855 23.9864 -0.0701273 178 -18.6511 23.9696 -0.0692521 169 -18.2138 24.1033 -0.0677907 191 -18.2736 24.0253 -0.0675551 195 -20.4399 25.3656 0.117937 117 -20.5044 25.2826 0.118002 117 -21.2635 23.9807 0.119357 147 -20.538 23.9843 0.120656 114 -20.2541 23.8793 0.121378 135 -18.3181 25.3948 0.121403 113 -20.1545 23.9137 0.121483 120 -18.2759 24.7572 0.122873 111 -18.2625 24.02 0.124499 229 -18.3039 24.0366 0.304307 191 -18.265 24.7829 0.306172 91 -18.3602 25.4092 0.307997 93 -20.2763 24.0181 0.308245 241 -20.397 24.0076 0.30847 145 -20.5998 24.0159 0.308916 159 -20.7327 24.0176 0.3092 153 -20.8632 24.0157 0.309471 148 -20.4979 25.229 0.311731 96 -20.4411 25.3213 0.311849 96 -20.8113 25.2075 0.312318 96 -18.2674 24.1174 0.483375 157 -18.2792 24.2914 0.484715 126 -18.8163 24.0482 0.485938 101 -18.2841 24.4577 0.485963 118 -18.9251 24.0314 0.486432 101 -19.0588 24.0455 0.487292 101 -18.2709 24.6819 0.487541 122 -19.1941 24.0606 0.488172 101 -19.3474 24.0198 0.488757 102 -18.2856 24.8649 0.488973 123 -19.4831 24.0335 0.489636 102 -19.604 24.028 0.490295 102 -18.3005 25.0499 0.490423 121 -19.7793 24.011 0.491192 102 -19.8635 23.9596 0.49132 109 -18.2958 25.2932 0.492203 124 -20.2506 24.0401 0.494159 103 -20.3402 23.9931 0.49436 103 -20.4933 24.0204 0.495459 104 -20.6858 24.0161 0.496576 104 -18.4547 24.5034 0.691183 89 -19.1303 24.507 0.697731 83 -19.2827 24.4636 0.69868 83 -19.3919 24.4437 0.699502 83 -19.4748 24.3904 0.699659 83 -19.6184 24.3341 0.700386 83 -19.7351 24.3221 0.701398 83 -19.8456 24.3017 0.702252 83 -19.9994 24.2557 0.703232 84 -20.1139 24.2389 0.704181 84 -20.2323 24.2262 0.705224 84 +unknow 0.970894 1 0 203 -20.8093 -21.4101 -0.942099 170 -21.1056 -21.1095 -0.94186 177 -20.6804 -21.4791 -0.940561 167 -21.0138 -21.1502 -0.940474 141 -20.8359 -21.3032 -0.939862 185 -21.1335 -21.0051 -0.939776 167 -21.1838 -20.9232 -0.938927 163 -20.581 -21.5108 -0.938789 180 -21.2778 -20.8189 -0.938692 132 -21.3216 -20.7311 -0.937534 133 -20.8564 -21.1907 -0.937316 147 -21.3823 -20.6598 -0.937301 131 -20.4541 -21.5131 -0.935477 187 -21.6991 -20.1892 -0.933666 113 -20.3328 -21.5207 -0.932472 184 -21.733 -20.0938 -0.932123 113 -21.8695 -19.9037 -0.931038 113 -21.7725 -20.0038 -0.930887 113 -20.1765 -21.5579 -0.929391 184 -22.025 -19.6084 -0.9274 113 -22.0976 -19.4872 -0.926398 112 -20.0228 -21.5291 -0.924537 199 -21.2837 -19.9284 -0.915091 111 -20.9366 -19.7898 -0.901681 110 -20.7902 -19.9003 -0.900529 118 -20.7975 -19.7826 -0.897598 110 -24.5977 -21.2576 -0.839652 59 -24.4867 -21.3641 -0.839201 75 -24.4044 -21.4277 -0.838556 76 -24.331 -21.499 -0.838298 107 -23.521 -21.2475 -0.813411 57 -23.3492 -21.2257 -0.808833 57 -23.571 -19.7934 -0.783821 65 -23.4492 -19.817 -0.781306 56 -23.2583 -19.8442 -0.77718 56 -23.1898 -19.9119 -0.776922 56 -21.7537 -20.2145 -0.748874 54 -20.241 -21.0605 -0.733722 87 -20.1995 -20.8198 -0.727203 74 -21.0944 -19.787 -0.723923 68 -20.1895 -20.679 -0.723717 92 -20.9654 -19.79 -0.720957 75 -20.1844 -20.5441 -0.72049 114 -20.2247 -20.3919 -0.717906 125 -20.8133 -19.7704 -0.71696 74 -20.2252 -20.2645 -0.715001 123 -20.6637 -19.8142 -0.714445 85 -20.235 -20.1473 -0.712547 124 -20.2385 -20.0245 -0.709836 145 -20.3227 -19.9191 -0.709381 125 -23.542 -19.8147 -0.625411 66 -23.3865 -19.8099 -0.622106 66 -23.188 -19.8303 -0.618367 66 -23.0679 -19.8535 -0.616308 78 -22.9192 -19.8514 -0.613219 65 -22.7185 -19.8658 -0.609372 65 -22.5478 -19.8421 -0.605471 65 -22.3596 -19.8016 -0.600919 70 -22.175 -19.8255 -0.597614 108 -22.0382 -19.8283 -0.594904 116 -21.8765 -19.8076 -0.591274 126 -21.7313 -19.8009 -0.588239 134 -21.5361 -19.8098 -0.5845 123 -21.4635 -19.8679 -0.584121 111 -21.2619 -19.8058 -0.578973 63 -21.0342 -19.7799 -0.573988 76 -19.9859 -20.6527 -0.570354 255 -20.8703 -19.7498 -0.570195 104 -20.0215 -20.4954 -0.567971 255 -20.589 -19.7927 -0.565481 125 -20.0086 -20.354 -0.564991 255 -20.0569 -20.2755 -0.564395 128 -20.4821 -19.8142 -0.563801 154 -20.1099 -20.1383 -0.56277 114 -20.3696 -19.8297 -0.561904 161 -20.139 -20.0412 -0.56147 141 -20.2557 -19.8433 -0.559954 167 -20.1435 -19.9203 -0.559249 174 -24.2767 -19.9004 -0.432228 168 -24.0769 -19.8632 -0.428598 195 -23.8267 -19.9732 -0.42611 107 -23.851 -19.8663 -0.425091 208 -23.5073 -19.8312 -0.419258 120 -23.3657 -19.8376 -0.417137 134 -23.1278 -19.8237 -0.413262 145 -23.0579 -19.8897 -0.413058 153 -22.8504 -19.8361 -0.409142 105 -22.1327 -19.8306 -0.398089 152 -21.9739 -19.8129 -0.395438 178 -21.8331 -19.8106 -0.393276 186 -21.6822 -19.7981 -0.390828 189 -20.248 -21.2323 -0.390375 102 -21.502 -19.82 -0.388422 185 -20.1929 -21.0415 -0.386786 101 -21.3708 -19.8235 -0.386505 180 -21.1457 -20.0518 -0.386341 133 -21.2028 -19.9797 -0.386178 146 -20.2339 -20.952 -0.386052 149 -21.1901 -19.7799 -0.383201 140 -20.1754 -20.5653 -0.379568 130 -20.7675 -19.8169 -0.37745 170 -20.1585 -20.4192 -0.377203 100 -20.2207 -20.29 -0.376224 99 -20.6236 -19.8659 -0.376022 172 -20.273 -20.2151 -0.375898 123 -20.4026 -20.0272 -0.375083 99 -20.5051 -19.8763 -0.374431 199 -20.2768 -20.0921 -0.374186 110 -20.3925 -19.8917 -0.373003 154 -24.1387 -19.8382 -0.283965 173 -23.9622 -19.8197 -0.281636 167 -23.7594 -19.8415 -0.279401 154 -23.6282 -19.9853 -0.279275 144 -23.5698 -19.8094 -0.276789 158 -23.1807 -19.7954 -0.271974 175 -23.0304 -19.7926 -0.270149 169 -22.8666 -19.7773 -0.26804 165 -22.7093 -19.7664 -0.266058 163 -22.5152 -19.7849 -0.263949 162 -22.363 -19.7761 -0.262061 163 -22.205 -19.7612 -0.260047 161 -22.0194 -19.7829 -0.258095 157 -21.8695 -19.7729 -0.256238 158 -21.7185 -19.7609 -0.25435 156 -21.5751 -19.7548 -0.252619 157 -20.2009 -21.1082 -0.252048 112 -21.4068 -19.7871 -0.251014 166 -20.1574 -20.9309 -0.249563 194 -21.2596 -19.7753 -0.249189 148 -21.1257 -19.7751 -0.247646 151 -20.1679 -20.7454 -0.24758 132 -20.9683 -19.8141 -0.246262 159 -20.1518 -20.5991 -0.245755 140 -20.8349 -19.8124 -0.244719 159 -20.1589 -20.4774 -0.244466 149 -20.7075 -19.8156 -0.243303 163 -20.1846 -20.3113 -0.242892 145 -20.5476 -19.8491 -0.241855 163 -20.1931 -20.1927 -0.241665 142 -20.4407 -19.8704 -0.24088 164 -20.1954 -20.0686 -0.240313 187 -20.3338 -19.8912 -0.239904 169 -20.2655 -19.9494 -0.239778 140 -24.1932 -19.8859 -0.0781675 208 -24.0012 -19.8546 -0.0766363 212 -23.7878 -19.8674 -0.0752146 213 -23.6166 -19.8506 -0.0739203 212 -23.4382 -19.8264 -0.072535 213 -23.2411 -19.8482 -0.0712955 197 -23.0741 -19.8311 -0.0700377 198 -22.9195 -19.8236 -0.0689257 207 -22.7546 -19.8061 -0.0676862 204 -22.5709 -19.8339 -0.0665925 206 -22.4187 -19.8251 -0.0654987 206 -22.2727 -19.8209 -0.0644779 189 -20.9597 -21.0891 -0.0637269 113 -22.0824 -19.8387 -0.0632931 194 -20.9424 -20.9397 -0.0626518 113 -21.9459 -19.8408 -0.0623816 206 -21.8051 -19.8383 -0.0614154 196 -20.8848 -20.751 -0.0610665 112 -20.9354 -20.606 -0.0604653 112 -21.6275 -19.8636 -0.0603764 182 -20.9429 -20.4842 -0.0597365 111 -21.4901 -19.8622 -0.0594466 185 -20.9584 -20.3709 -0.059117 111 -21.3226 -19.9572 -0.0589177 111 -20.9734 -20.2576 -0.0584976 111 -21.3413 -19.8492 -0.0583711 191 -21.0542 -20.1447 -0.0583156 111 -21.1145 -20.0757 -0.0582794 111 -21.1382 -19.9722 -0.0577875 111 -23.2666 -21.1579 0.120246 114 -24.1318 -19.9526 0.121136 152 -23.9167 -19.9018 0.121677 187 -23.7543 -19.8935 0.122033 159 -22.4074 -21.0298 0.122214 111 -22.4506 -20.8723 0.122427 111 -23.3147 -20.157 0.122483 112 -23.5304 -19.8956 0.122498 157 -23.4647 -19.9668 0.122509 112 -23.3563 -20.0014 0.122674 111 -22.4464 -20.2849 0.123539 110 -22.3805 -20.0982 0.124021 109 -22.3897 -19.9799 0.124221 109 -21.5943 -19.9515 0.125886 107 -21.8088 -19.9903 0.302019 88 -22.3205 -20.0126 0.303293 89 -22.422 -19.977 0.303461 89 -23.3422 -20.0213 0.305794 91 -23.4308 -19.97 0.305904 125 -23.3406 -21.0616 0.308015 93 -22.3361 -20.2406 0.482082 99 -22.2538 -20.3577 0.482248 100 -22.4145 -20.1837 0.482265 100 -22.2192 -20.4546 0.482614 100 -22.5315 -20.1611 0.482925 100 -22.2062 -20.5718 0.483256 100 -22.7041 -20.1236 0.483877 100 -22.1631 -20.7267 0.483934 100 -22.1372 -20.8332 0.484429 100 -22.8543 -20.1288 0.48494 100 -23.0138 -20.1411 0.486112 101 +unknow 0.954351 1 0 131 -22.9462 25.0095 -1.31477 189 -22.9799 24.8889 -1.31181 190 -23.0035 24.7581 -1.30822 190 -23.0816 24.6086 -1.30571 184 -23.1231 24.4982 -1.30338 185 -23.1421 24.3647 -1.29961 185 -23.2097 24.2063 -1.29656 183 -23.2384 24.0845 -1.29351 180 -23.2596 23.9555 -1.29001 182 -26.4978 26.0056 -1.2216 158 -26.6453 25.5811 -1.21429 156 -26.5158 25.698 -1.21382 156 -26.425 25.7714 -1.21328 154 -26.685 25.4586 -1.21213 157 -26.7127 25.3251 -1.20936 156 -26.8042 25.0149 -1.20374 156 -26.8329 24.8843 -1.20112 157 -26.6436 24.5532 -1.1871 174 -24.1959 25.7668 -1.15295 154 -23.8328 25.54 -1.13701 153 -23.6927 25.5503 -1.13362 166 -23.4748 25.5556 -1.12807 142 -24.0306 24.1055 -1.10251 128 -23.8578 24.1587 -1.09927 128 -23.5814 24.1807 -1.09241 127 -23.6335 24.0823 -1.09111 127 -26.2534 24.2874 -0.944374 75 -26.0804 24.2799 -0.940118 64 -25.852 24.2959 -0.935089 64 -25.6534 24.2617 -0.929673 63 -25.4612 24.232 -0.924515 63 -25.2549 24.1875 -0.918712 63 -25.0055 24.1757 -0.912652 62 -24.8434 24.1706 -0.908783 62 -24.6815 24.1647 -0.904914 62 -24.455 24.1698 -0.89982 62 -24.3066 24.1747 -0.896532 62 -24.0792 24.0997 -0.889633 90 -23.857 24.1036 -0.884668 91 -22.8597 24.8291 -0.87937 61 -23.6535 24.0489 -0.878801 81 -23.5135 24.0574 -0.875835 100 -22.8975 24.6363 -0.875633 61 -22.89 24.4738 -0.871638 73 -22.9174 24.3494 -0.869318 99 -23.181 24.093 -0.869193 75 -23.0803 24.1397 -0.868032 60 -22.9933 24.2006 -0.867515 114 -26.255 24.2449 -0.759754 108 -26.0631 24.2197 -0.755473 85 -25.8452 24.245 -0.751625 75 -25.657 24.2203 -0.747453 75 -25.4548 24.1809 -0.742739 75 -25.2661 24.1529 -0.738512 74 -25.0384 24.162 -0.734231 74 -24.8663 24.1471 -0.730601 74 -24.6703 24.1077 -0.726049 73 -24.4555 24.1239 -0.722201 73 -24.2525 24.2262 -0.720249 73 -24.2874 24.109 -0.718679 73 -23.868 24.0674 -0.709847 84 -23.7502 24.0995 -0.708221 72 -23.5668 24.064 -0.704048 72 -22.8287 24.7462 -0.703659 72 -22.8892 24.5783 -0.701439 72 -23.3627 24.0814 -0.700526 78 -22.883 24.4173 -0.698136 87 -23.2245 24.0899 -0.698087 71 -23.0879 24.0992 -0.695702 71 -22.8966 24.2783 -0.695645 88 -22.9983 24.1571 -0.695159 71 -26.1994 24.2797 -0.520269 122 -25.9751 24.3005 -0.51721 121 -25.7588 24.2506 -0.513294 121 -25.5677 24.2228 -0.510072 120 -25.3434 24.2381 -0.506972 120 -25.1633 24.2178 -0.504035 119 -24.9707 24.1841 -0.500731 119 -24.8014 24.1718 -0.49808 118 -24.5888 24.1917 -0.495265 118 -24.3961 24.1536 -0.49192 117 -24.2152 24.1258 -0.488902 117 -24.0137 24.1518 -0.486373 117 -22.9398 25.1172 -0.485501 246 -23.8646 24.1532 -0.484251 116 -22.9211 24.9391 -0.482567 255 -23.7031 24.1411 -0.481763 116 -23.4998 24.1608 -0.479152 115 -22.8621 24.7188 -0.47845 255 -22.9551 24.586 -0.477759 163 -23.3403 24.1483 -0.476705 115 -23.039 24.3672 -0.475682 168 -23.1259 24.2295 -0.474868 221 -23.1978 24.1524 -0.474746 115 -26.2531 24.278 -0.354721 112 -26.0376 24.3072 -0.352549 104 -25.8504 24.2847 -0.350157 104 -25.6578 24.2558 -0.34764 104 -25.4276 24.2659 -0.345122 103 -25.2287 24.2279 -0.342447 103 -25.0505 24.2083 -0.340212 102 -24.8697 24.185 -0.337915 102 -24.6457 24.194 -0.335491 102 -24.48 24.1827 -0.333508 101 -24.2948 24.1508 -0.331085 101 -24.0805 24.1644 -0.32885 100 -23.9258 24.1603 -0.327087 100 -22.9277 25.0471 -0.32635 100 -23.767 24.1512 -0.32523 100 -22.921 24.8822 -0.324369 100 -23.5749 24.1827 -0.323467 100 -22.9285 24.7337 -0.322735 99 -23.4209 24.1761 -0.321705 99 -22.9724 24.548 -0.321069 99 -23.313 24.2164 -0.32098 99 -23.0042 24.4276 -0.320033 99 -23.1227 24.2464 -0.319249 99 -23.0259 24.2971 -0.318776 99 -24.891 24.732 -0.112256 131 -24.9159 24.6017 -0.111583 131 -23.6808 25.5342 -0.109836 130 -23.5965 25.0463 -0.10607 129 -23.9084 24.285 -0.103055 128 -23.7602 24.3631 -0.102616 128 -24.2236 25.252 0.111316 125 -24.1741 24.9637 0.111975 124 -24.1952 24.8288 0.112197 124 -24.4985 24.4391 0.112367 124 -24.213 24.6912 0.112431 124 -24.3065 24.5541 0.112517 124 -24.3638 24.4578 0.112592 124 +unknow 0.915161 1 0 75 -27.6886 -21.3621 -0.739253 133 -27.773 -21.2193 -0.738711 129 -27.8364 -21.1295 -0.738603 126 -27.5976 -21.4306 -0.73844 133 -27.5286 -21.516 -0.738386 114 -27.8611 -21.0107 -0.737195 120 -28.0988 -20.5734 -0.735299 74 -28.1696 -20.422 -0.734432 74 -28.2092 -20.3159 -0.73362 74 -28.2501 -20.2109 -0.732861 74 -28.3206 -20.0603 -0.732049 74 -28.3605 -19.9551 -0.73129 74 -28.3936 -19.8453 -0.730315 74 -28.4753 -19.7033 -0.729936 74 -28.5008 -19.5889 -0.728744 74 -28.5539 -19.4936 -0.728473 74 -26.7073 -21.4898 -0.720504 110 -26.2022 -21.5626 -0.71113 134 -26.7941 -19.7492 -0.693578 71 -26.589 -19.7274 -0.688755 71 -26.4756 -19.7726 -0.687021 81 -29.4173 -19.8034 -0.515272 121 -29.1188 -19.8022 -0.510214 120 -29.0185 -19.8676 -0.509276 134 -28.8703 -19.8996 -0.507155 120 -28.6024 -19.8475 -0.502057 119 -28.286 -19.8258 -0.49651 118 -28.0881 -19.8188 -0.493125 118 -27.8497 -19.7818 -0.48872 117 -27.5857 -19.7903 -0.484437 128 -27.3856 -19.7772 -0.48097 135 -27.1811 -19.7596 -0.477381 149 -26.9379 -19.7773 -0.473588 141 -26.0062 -20.9809 -0.473503 131 -26.7567 -19.7738 -0.470569 131 -26.5421 -19.7442 -0.466694 132 -25.9035 -20.4977 -0.465714 255 -25.9919 -20.3692 -0.46551 255 -26.0435 -20.1467 -0.463553 255 -26.2507 -19.8495 -0.463227 195 -26.0969 -19.9921 -0.462493 196 -26.8747 -19.7789 -0.317387 98 -26.6806 -19.7657 -0.314806 98 -26.4371 -19.7145 -0.31125 104 -26.0844 -20.0315 -0.309834 245 -25.8978 -20.2136 -0.309267 128 -25.9486 -20.1224 -0.309015 97 -26.0772 -19.8961 -0.308449 208 -29.3701 -19.8286 -0.115717 132 -28.9939 -19.7739 -0.1126 131 -28.8081 -19.7798 -0.111233 131 -28.5813 -19.7564 -0.10941 130 -28.3551 -19.7318 -0.107587 130 -28.126 -19.7696 -0.106075 129 -27.9186 -19.7549 -0.104452 128 -27.7066 -19.7357 -0.102775 128 -27.4932 -19.7795 -0.101427 127 -27.3014 -19.7718 -0.0999683 127 -27.0906 -19.749 -0.0982914 126 -26.854 -19.7708 -0.0966692 125 -26.4114 -20.1578 -0.0955566 149 -26.6697 -19.7645 -0.0952839 125 -26.2703 -20.1809 -0.0946634 125 -26.3759 -19.9997 -0.0944268 144 -26.5001 -19.768 -0.0940625 124 -26.0054 -20.304 -0.093442 149 -26.066 -20.2198 -0.0934057 124 -28.0711 -19.7803 0.112849 123 -27.2916 -19.7231 0.315232 99 -27.1648 -19.9582 0.315349 99 -28.5467 -19.8895 0.318852 102 -28.7472 -19.8955 0.319396 102 -28.9791 -19.8548 0.319939 103 -29.1752 -19.8549 0.320462 103 -29.413 -19.882 0.321148 104 +unknow 0.921826 1 0 30 -38.2262 24.3184 -0.715815 149 -37.9509 24.3112 -0.711002 149 -37.7335 24.4235 -0.708513 148 -37.5024 24.4416 -0.70476 148 -37.2649 24.4541 -0.700844 147 -36.9058 24.4682 -0.694889 146 -36.5692 24.411 -0.688527 218 -36.2898 24.3898 -0.68355 182 -38.2605 24.2999 -0.505288 128 -37.9836 24.2917 -0.501543 167 -37.5883 24.289 -0.496287 184 -37.3359 24.2923 -0.492983 203 -37.0738 24.2878 -0.489489 164 -36.7355 24.3142 -0.485272 191 -36.456 24.2941 -0.481433 186 -36.1953 24.2847 -0.477939 181 -35.9117 24.3404 -0.474729 170 -38.2622 24.5231 -0.206674 164 -38.2828 24.2826 -0.205656 186 -37.6656 24.3084 -0.201044 202 -37.3978 24.3025 -0.198965 177 -37.1622 24.3159 -0.197234 161 -36.8219 24.342 -0.194772 160 -36.5587 24.3336 -0.192731 159 -36.3109 24.3337 -0.190853 159 -35.9937 24.3679 -0.188629 158 -37.0354 24.3553 0.0857481 163 -36.7671 24.3444 0.0863775 153 -36.4642 24.3088 0.0871217 152 -36.195 24.3764 0.0876314 152 +unknow 0.923019 1 0 49 -41.3042 26.0921 -0.788194 159 -41.3063 25.9123 -0.786279 158 -41.2852 25.6289 -0.782856 158 -43.4087 25.8806 -0.587316 183 -43.2857 24.3536 -0.573611 138 -43.0055 24.3741 -0.569929 138 -40.5381 25.5699 -0.546249 158 -40.4522 25.3383 -0.543168 178 -40.544 25.1305 -0.542667 167 -40.7907 24.492 -0.540754 150 -40.4423 24.8918 -0.539333 152 -40.551 24.5216 -0.537764 151 -40.2764 24.6153 -0.534836 151 -41.0583 24.6167 -0.228784 171 -40.6827 24.5659 -0.225612 170 -40.3599 24.6313 -0.223406 170 -40.0999 24.6461 -0.221455 169 -39.9049 24.6994 -0.220197 168 -43.1417 24.2826 0.071571 180 -42.8357 24.2876 0.0722936 167 -42.5108 24.3688 0.0729565 167 -42.2003 24.3671 0.0736954 166 -41.9041 24.3717 0.0743906 165 -41.5733 24.4421 0.0750753 165 -41.295 24.4532 0.0757159 164 -40.9845 24.4434 0.0764602 163 -40.6744 24.4318 0.0772046 162 -40.4067 24.5308 0.0776926 162 -39.9278 25.1943 0.0778584 255 -40.2134 24.5866 0.0780654 162 -39.8969 24.8255 0.0784619 209 -40.0032 24.6309 0.0784929 161 -40.9521 24.5214 0.360915 134 -41.2181 24.505 0.361626 134 -41.5189 24.5074 0.362466 135 -41.7924 24.492 0.363203 135 -42.1289 24.4231 0.36403 136 -42.4725 24.4441 0.365025 136 -42.7262 24.4116 0.365684 137 -40.249 24.8836 0.63968 147 -40.2063 25.0322 0.640067 148 -40.4477 24.7438 0.640558 148 -40.2206 25.2168 0.641076 148 -40.2702 25.5132 0.642911 148 -40.773 24.7673 0.643215 148 -40.3348 25.7322 0.644489 149 -40.3598 25.9269 0.645646 149 -41.7154 24.7165 0.650377 150 -42.4763 24.5407 0.655578 152 +unknow 0.887309 1 0 37 -43.6605 -21.0646 -0.234553 173 -43.6327 -20.8824 -0.233605 173 -43.6709 -20.7324 -0.233332 173 -43.7175 -20.5025 -0.232821 172 -43.7654 -20.3575 -0.232657 172 -43.7946 -20.204 -0.232311 172 -43.8579 -20.0663 -0.232311 172 -47.369 -20.1127 0.0660074 173 -44.3809 -20.5985 0.0729391 167 -44.5048 -20.2327 0.0730485 166 -44.4265 -20.3658 0.0730923 166 -44.3872 -20.2551 0.364109 202 -44.3325 -20.3987 0.364142 255 -44.2757 -20.6259 0.364284 184 -44.2722 -20.7939 0.364504 214 -44.3025 -20.9783 0.364847 203 -44.3428 -21.1682 0.365228 137 -44.419 -21.4623 0.365862 137 -45.6192 -20.0436 0.367466 162 -46.1039 -19.9982 0.368843 154 -46.6 -20.0399 0.370369 140 -47.0711 -20.0678 0.371805 141 -47.6201 -20.1256 0.373512 142 -44.6733 -20.4653 0.656096 152 -44.6197 -20.6106 0.656206 152 -44.5837 -20.8494 0.656828 152 -44.5523 -21.0056 0.657177 152 -44.7192 -21.2561 0.65954 153 -45.9663 -20.0177 0.665239 165 -46.4311 -20.0466 0.669251 156 -46.9076 -20.0774 0.673374 157 -47.4051 -20.1141 0.677698 158 -47.9495 -20.0787 0.682168 159 -47.2268 -20.4517 1.01989 127 -47.1574 -20.6861 1.02037 127 -46.6316 -20.3346 1.27012 157 -46.4032 -21.0206 1.27159 157 +unknow 0.849342 1 0 42 -46.4816 25.8662 -0.629109 146 -46.3771 25.6175 -0.625776 145 -46.3154 25.3937 -0.623229 145 -46.2711 25.0865 -0.620306 145 -46.186 24.8528 -0.617382 144 -46.1756 24.6604 -0.61581 144 -46.0745 24.4205 -0.612634 144 -46.0066 24.1075 -0.609396 143 -49.8529 24.3049 -0.29796 192 -47.691 24.2806 -0.280226 194 -49.9685 24.2273 0.0550817 184 -49.4987 24.1916 0.0562798 183 -47.8977 24.2532 0.0601275 241 -47.4626 24.3143 0.0611129 243 -46.7696 24.3312 0.0627769 177 -46.0139 25.4272 0.0631925 231 -46.0164 25.2402 0.0634314 252 -46.3802 24.4068 0.0636257 243 -46.0024 25.0448 0.0637195 248 -46.0266 24.7774 0.0640071 255 -46.1443 24.468 0.0641189 255 -46.0302 24.5931 0.0642351 255 -46.1516 24.5699 0.375629 241 -46.0441 24.7919 0.375663 255 -46.0082 24.9593 0.37582 242 -46.3081 24.4668 0.375919 185 -46.012 25.1487 0.376126 230 -46.0414 25.3529 0.376529 228 -46.6169 24.4428 0.376766 226 -46.0596 25.6464 0.377043 221 -46.1375 25.8799 0.377633 188 -46.982 24.3525 0.377676 222 -47.3304 24.3446 0.378666 221 -47.6917 24.3411 0.3797 216 -48.1113 24.27 0.380805 194 -49.8706 24.2783 0.385913 150 -46.8462 24.8556 0.692002 168 -46.8342 25.1329 0.693104 162 -47.1113 24.6182 0.693136 162 -46.8887 25.3522 0.694499 162 -47.0125 25.6105 0.696627 163 -47.3613 25.994 0.701119 164 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_3.pose b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_3.pose new file mode 100644 index 00000000000..1a02c944274 --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_3.pose @@ -0,0 +1 @@ +11990 588.519102 33.330382 45.010216 40.747129 -0.002152 -0.010966 -0.639940 0.768343 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_3.seg b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_3.seg new file mode 100644 index 00000000000..73a5d11fa56 --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_3.seg @@ -0,0 +1,33 @@ +unknow 0.767973 1 0 13 56.1406 -12.3705 -1.64724 125 56.1069 -12.1784 -1.64485 95 55.9885 -11.9687 -1.63969 94 55.9482 -11.3184 -1.63413 94 55.8341 -11.478 -1.63155 101 55.8992 -11.1258 -1.63136 94 56.1147 -12.1594 -1.34958 112 55.8773 -11.1005 -1.33743 111 55.8323 -11.274 -1.33716 111 55.7653 -11.4429 -1.33629 152 56.2737 -11.251 -0.964504 180 55.8356 -11.5289 -0.956865 227 55.852 -11.3495 -0.956456 179 +unknow 0.6302 1 0 30 55.9878 -22.3769 -1.73784 133 55.8746 -22.5355 -1.73636 146 55.8638 -22.0227 -1.7299 159 55.8788 -21.826 -1.72803 196 55.7106 -22.6528 -1.42346 159 56.0216 -21.8616 -1.42336 143 55.737 -22.4598 -1.42216 225 55.7906 -22.2779 -1.42167 240 55.8075 -21.9802 -1.41912 170 55.7134 -23.4484 -1.02699 255 55.7148 -23.2432 -1.0254 255 55.7321 -23.0452 -1.02418 255 55.8104 -22.7702 -1.02352 255 55.8353 -22.576 -1.0225 255 55.8874 -22.3931 -1.0221 255 55.924 -22.2041 -1.02136 255 56.015 -21.9353 -1.02108 255 56.0781 -21.757 -1.02096 221 56.4799 -24.475 -0.763098 163 56.0248 -23.3423 -0.74951 161 56.0923 -23.1638 -0.749416 161 55.8962 -22.5704 -0.743016 160 55.6971 -25.0176 -0.351357 255 55.717 -24.8164 -0.350772 206 55.716 -24.6066 -0.349987 206 55.7727 -24.3182 -0.349404 206 56.2077 -23.1538 -0.348917 206 55.8282 -23.7188 -0.347705 236 55.8877 -23.4338 -0.347195 255 55.9573 -23.2566 -0.34716 205 +unknow 0.561361 1 0 12 53.8696 5.07768 -1.87821 189 53.8431 5.33127 -1.87813 189 53.7141 4.8929 -1.87158 189 53.5899 4.71195 -1.86619 188 54.8739 4.94072 -1.28647 108 55.9576 5.14496 -0.939989 177 55.8755 5.31444 -0.938639 177 55.4789 5.13064 -0.670904 151 55.178 4.9282 -0.665892 212 55.7499 5.20081 -0.304917 194 55.1276 5.00113 0.0535894 184 54.5413 4.77553 0.055259 182 +unknow 0.786935 1 0 41 52.9154 -25.7239 -1.69076 140 52.8486 -25.3843 -1.68405 153 52.8541 -25.183 -1.68141 121 52.8552 -24.9801 -1.67863 134 52.8835 -24.6894 -1.67547 154 52.8701 -24.4811 -1.67225 154 52.8777 -24.2833 -1.66979 154 52.8883 -24.0872 -1.66747 155 52.9082 -23.7959 -1.66418 159 52.9224 -23.6028 -1.66205 135 52.9177 -23.4017 -1.65928 171 52.9926 -23.1369 -1.65806 128 52.9934 -22.9393 -1.65554 189 52.9715 -22.7326 -1.65225 161 53.2146 -22.1472 -1.65212 95 53.0987 -22.295 -1.65051 95 52.9022 -25.6958 -1.38741 114 52.805 -25.854 -1.38692 120 52.7938 -25.3363 -1.38052 127 52.7955 -25.1333 -1.37819 157 52.8092 -24.9365 -1.37624 168 52.8246 -24.64 -1.3732 189 52.8383 -24.4446 -1.3713 161 52.8222 -24.2359 -1.36854 200 52.8794 -23.9611 -1.36686 167 52.8924 -23.767 -1.36501 172 52.8828 -23.5632 -1.36252 177 53.1185 -22.9716 -1.36193 138 52.8834 -23.3646 -1.36035 169 52.9142 -23.0807 -1.35802 149 53.1006 -22.2739 -1.35406 112 52.9899 -22.4234 -1.35287 241 52.9998 -25.5135 -0.993756 183 52.9822 -25.3004 -0.991551 183 52.962 -25.0868 -0.989305 183 52.9736 -24.8889 -0.987795 183 53.0359 -24.6137 -0.986572 182 53.0678 -23.3239 -0.976325 181 52.848 -23.4258 -0.973055 181 53.0646 -25.513 -0.72088 158 53.0488 -25.3005 -0.71921 157 +unknow 0.943464 1 0 38 50.0069 -28.8441 -1.65497 95 49.9602 -28.6084 -1.64987 104 50.0064 -28.4266 -1.64826 133 50.0171 -28.2252 -1.64535 150 51.4387 -25.4076 -1.64345 95 50.0605 -27.9396 -1.64207 158 50.0658 -27.7367 -1.63903 163 51.0168 -25.3991 -1.63112 124 50.5679 -25.4739 -1.61924 94 50.1096 -26.3382 -1.61885 151 50.123 -26.1446 -1.61633 137 50.1339 -25.9503 -1.61375 126 50.2666 -25.5205 -1.61124 180 50.1719 -25.671 -1.61072 185 49.996 -29.1293 -1.36159 198 49.9007 -29.2842 -1.36148 186 49.937 -28.7805 -1.35547 177 49.9256 -28.3575 -1.3495 206 49.9414 -28.1592 -1.34723 208 51.3272 -25.3299 -1.34465 112 49.974 -27.868 -1.34414 208 49.9756 -27.6634 -1.34148 204 50.8662 -25.3012 -1.3331 111 50.1649 -26.5452 -1.33156 255 50.1878 -26.3559 -1.32972 133 50.5929 -25.4632 -1.32843 111 50.1394 -25.9297 -1.32321 148 50.272 -25.4998 -1.3211 195 50.1631 -25.6431 -1.32023 228 50.0865 -27.5996 -0.960347 240 50.9286 -25.9118 -0.959426 191 50.6138 -26.0528 -0.955011 179 50.228 -26.456 -0.951819 240 50.3453 -26.1151 -0.950719 178 50.2542 -26.2685 -0.950514 255 51.0531 -28.8348 -0.716962 157 50.1015 -29.0282 -0.705444 220 50.2343 -28.7898 -0.705384 156 +unknow 0.847892 1 0 46 47.9683 30.3176 -2.341 230 47.8475 30.4521 -2.33965 255 47.9703 30.1083 -2.33607 235 48.0293 29.414 -2.32189 212 48.0751 29.1314 -2.31705 207 48.0192 28.8916 -2.30933 209 47.9657 28.6544 -2.30179 251 48.1255 28.2394 -2.29848 216 47.9558 28.4445 -2.29658 255 46.3947 30.0412 -2.27471 184 46.1044 30.059 -2.26419 183 46.3369 28.5771 -2.23737 182 45.9788 28.5559 -2.22318 194 48.0573 28.5048 -1.94592 194 47.6346 28.4569 -1.93096 193 47.3891 28.5127 -1.92394 192 45.9904 28.6652 -1.88098 189 45.5258 29.0757 -1.87426 189 45.6049 28.8245 -1.87164 189 48.9339 28.4154 -1.61755 153 48.5667 28.4064 -1.60716 174 48.1794 28.4852 -1.59767 178 47.8167 28.4737 -1.5874 177 47.4751 28.4725 -1.57792 176 47.1442 28.4757 -1.56881 179 46.7707 28.5516 -1.55978 174 46.41 28.5318 -1.54951 140 45.6539 29.4695 -1.54497 118 46.1333 28.5617 -1.54241 205 45.6588 29.2698 -1.54162 177 45.872 28.9007 -1.54105 223 45.7287 29.0115 -1.53904 146 48.8988 28.419 -1.32567 209 48.5487 28.4201 -1.31748 158 48.206 28.5255 -1.31091 110 47.8756 28.5336 -1.30331 109 46.7279 28.551 -1.27689 108 46.6261 28.6903 -1.2765 108 46.826 28.3088 -1.27575 108 48.717 28.6432 -0.946061 178 47.2949 29.9485 -0.935114 177 47.2754 29.7284 -0.932383 176 47.2656 29.4123 -0.928795 176 47.2166 29.1763 -0.92541 199 47.2484 28.9912 -0.923985 234 47.3298 28.735 -0.922684 255 +unknow 0.944934 1 0 36 45.5512 20.7212 -2.03984 170 43.1904 19.4006 -1.91868 163 43.442 18.6184 -1.91492 162 43.1507 19.22 -1.91374 191 43.3558 18.7428 -1.91357 162 43.229 18.8494 -1.91024 162 45.7897 20.8356 -1.73127 179 43.0763 19.4395 -1.6137 170 43.0122 19.1672 -1.60715 255 43.2611 18.1489 -1.60039 255 42.8967 18.9546 -1.59975 255 43.0426 18.2963 -1.59483 255 42.9011 18.5553 -1.59375 255 42.9519 18.4172 -1.59344 255 43.6168 19.7657 -1.33686 82 43.133 19.3016 -1.31647 81 43.0291 19.0929 -1.31067 136 42.9992 18.9182 -1.30751 122 43.0714 18.7082 -1.30693 115 43.1605 18.4254 -1.30597 127 43.095 18.5577 -1.30571 106 45.1197 20.4748 -1.13564 122 43.6481 19.5604 -1.08905 97 43.3858 19.2797 -1.07946 122 43.3346 19.0942 -1.07615 160 43.3727 18.8675 -1.07464 162 43.572 18.3871 -1.07448 133 43.4061 18.72 -1.07388 162 43.4628 18.5828 -1.07383 168 45.7092 20.581 -0.815794 162 44.727 19.8366 -0.563592 137 45.034 18.9652 -0.562602 136 44.7504 19.5951 -0.562398 136 44.7677 19.4353 -0.561645 136 44.876 19.1482 -0.561431 136 44.8157 19.2891 -0.561428 136 +unknow 0.882823 1 0 48 33.7447 -9.67902 -1.76676 135 33.7866 -8.94872 -1.7581 103 33.7549 -8.77038 -1.75382 127 33.7417 -8.6539 -1.75146 164 33.3531 -9.22781 -1.73864 205 33.2079 -9.69504 -1.73796 255 33.3384 -9.05487 -1.73526 150 33.6719 -10.0434 -1.57076 129 33.676 -9.52824 -1.56367 122 33.7283 -9.02998 -1.55952 86 33.7305 -8.7472 -1.55598 85 33.4134 -9.34044 -1.54828 122 33.3042 -9.53586 -1.54565 233 33.3868 -9.21996 -1.54535 133 33.1649 -9.66524 -1.54069 146 33.6718 -9.86045 -1.36773 162 33.8246 -9.10262 -1.36513 174 33.6609 -9.45674 -1.36225 194 33.6859 -9.17898 -1.36001 213 33.6618 -8.94565 -1.35623 151 33.6704 -8.8348 -1.35534 157 33.7097 -8.67554 -1.35525 125 33.2612 -9.62718 -1.34707 174 33.3246 -9.24969 -1.34518 255 33.2216 -9.44635 -1.34312 213 33.6314 -9.03048 -1.13422 131 33.69 -8.65018 -1.13267 131 33.5457 -8.89448 -1.12967 131 33.566 -8.73075 -1.12882 130 33.3457 -9.23498 -1.12566 130 33.2492 -9.32076 -1.12296 255 33.1275 -9.39892 -1.11926 220 33.7197 -9.01198 -0.918032 63 33.351 -9.19494 -0.908092 71 33.1514 -9.47707 -0.904348 138 33.1386 -9.36096 -0.902928 253 33.1602 -9.25466 -0.90267 62 33.8789 -9.02065 -0.742853 75 33.8137 -9.11712 -0.741822 255 33.729 -9.20799 -0.740249 191 33.1528 -9.44321 -0.726902 214 33.2038 -9.23257 -0.726684 196 33.0938 -9.31403 -0.724406 253 33.5442 -9.27941 -0.503065 119 33.2491 -9.31054 -0.497426 118 33.2005 -9.40951 -0.497018 255 33.2534 -9.38472 -0.337228 142 33.2788 -9.27912 -0.337165 102 +unknow 0.918704 1 0 52 28.8835 -20.4237 -1.78184 124 29.4294 -19.5857 -1.78051 123 28.6297 -20.7202 -1.77993 142 28.7899 -20.4935 -1.77982 126 28.6962 -20.5629 -1.77779 177 28.5322 -20.7865 -1.77767 163 28.4506 -20.8642 -1.77655 169 32.1009 -19.8502 -1.70271 92 31.7945 -19.9378 -1.69187 91 31.8028 -19.804 -1.68863 106 29.121 -21.5482 -1.62582 132 29.1376 -21.2082 -1.61631 88 29.0744 -20.8146 -1.60204 87 28.9711 -20.9479 -1.60173 87 29.8374 -19.6362 -1.60014 106 29.6058 -19.6172 -1.58981 112 28.863 -20.5262 -1.58483 87 32.319 -19.8976 -1.49657 135 32.044 -19.8675 -1.48534 134 30.3061 -19.7268 -1.41598 129 29.9999 -19.6622 -1.40286 128 29.7628 -19.641 -1.39343 128 29.5435 -19.6969 -1.3866 185 28.657 -20.6392 -1.37796 255 28.6384 -20.4216 -1.37158 255 28.6616 -20.3027 -1.36934 255 28.6599 -20.1666 -1.36575 255 32.3018 -19.8673 -1.25375 141 32.1118 -19.8896 -1.24796 141 31.1086 -19.7441 -1.21218 138 30.8377 -19.7081 -1.20262 137 29.7591 -19.8179 -1.17007 134 28.9371 -20.9557 -1.16904 134 28.8439 -20.7502 -1.16149 133 28.8047 -20.5165 -1.15502 148 28.8562 -20.2811 -1.1514 157 28.7418 -20.3358 -1.149 149 29.1347 -21.0452 -0.951426 64 29.0774 -20.7961 -0.945233 64 29.0268 -20.6226 -0.940653 64 29.0081 -20.4725 -0.937363 71 31.3001 -20.8925 -0.81259 79 31.7554 -19.8526 -0.807668 79 31.4773 -19.8855 -0.801752 79 31.3203 -19.9242 -0.798713 78 30.921 -19.8065 -0.787861 78 29.745 -21.093 -0.780892 85 31.2747 -20.065 -0.378245 134 31.1194 -20.173 -0.377107 108 30.9136 -20.1776 -0.374425 128 30.82 -20.2549 -0.373856 126 30.7226 -20.3988 -0.373822 124 +unknow 0.891698 1 0 68 25.0734 24.7262 -2.18034 132 25.1367 24.6334 -2.17899 135 25.1883 24.5292 -2.17655 137 25.2864 24.3936 -2.17493 138 27.3699 26.4724 -2.1604 189 26.9503 26.4796 -2.14199 171 26.7818 26.48 -2.13453 127 26.2864 24.5616 -2.02951 82 26.0621 24.5061 -2.01695 82 27.1656 24.734 -1.8582 129 26.9494 24.6923 -1.84762 125 26.703 24.6211 -1.83469 141 26.4786 24.6459 -1.82636 143 26.2336 24.5718 -1.81343 137 25.3867 25.163 -1.80216 255 25.4514 25.0691 -1.80104 145 25.5572 24.7808 -1.79396 161 25.6034 24.6699 -1.79149 252 25.6764 24.5852 -1.79115 193 27.5689 24.7271 -1.66627 90 27.3575 24.6933 -1.65716 90 27.0872 24.6821 -1.64663 89 26.8814 24.6497 -1.63782 89 26.5649 24.6687 -1.62668 89 26.6202 24.5649 -1.62516 118 26.199 24.5602 -1.60937 88 25.9676 24.4972 -1.59864 87 25.4541 24.9362 -1.59528 87 25.5268 24.7729 -1.59215 87 25.7759 24.4701 -1.59064 102 25.5614 24.6511 -1.58911 87 25.6243 24.5568 -1.5881 87 27.2763 24.7154 -1.4446 131 26.9974 24.6952 -1.43471 131 26.7993 24.6688 -1.42735 130 26.5942 24.6347 -1.41953 130 26.3516 24.564 -1.40938 142 26.1382 24.5961 -1.40336 166 25.5412 25.1159 -1.40019 145 25.9723 24.5943 -1.39788 185 25.6135 24.9506 -1.39733 145 25.8603 24.6426 -1.39572 175 25.6487 24.8283 -1.39463 145 25.7165 24.7379 -1.39401 158 27.6881 24.7973 -1.22418 139 27.4675 24.7558 -1.21678 138 27.1952 24.7438 -1.20868 145 26.1464 25.5759 -1.20125 137 26.1891 25.3774 -1.19709 136 26.1996 25.2285 -1.19339 136 26.7421 24.6409 -1.19311 136 26.7914 24.5311 -1.19165 184 26.551 24.6973 -1.18917 136 26.1978 25.0687 -1.18908 136 26.2721 24.9822 -1.18885 136 26.3589 24.8294 -1.18724 136 26.4295 24.7396 -1.18686 136 27.5798 25.1571 -0.995812 67 26.5946 26.0794 -0.993133 78 26.8665 24.8168 -0.971421 65 26.9853 25.9303 -0.806432 79 26.9437 25.7281 -0.801826 79 27.5943 24.9754 -0.800875 79 26.9847 25.5253 -0.798848 78 26.9977 25.3775 -0.796357 78 27.032 25.2503 -0.794679 78 27.0875 25.0643 -0.792352 78 27.1411 24.9561 -0.791433 78 +unknow 0.972694 1 0 194 24.7883 -19.5116 -1.75402 156 24.7207 -19.5844 -1.75352 119 24.6094 -19.6857 -1.75203 154 24.5474 -19.7629 -1.75203 118 24.3837 -19.9488 -1.7514 119 24.4666 -19.8249 -1.75053 149 24.2901 -19.9999 -1.74891 157 24.2211 -20.071 -1.74841 121 24.1196 -20.115 -1.7453 146 23.7477 -20.4458 -1.74094 105 23.6698 -20.5085 -1.73982 119 23.5255 -20.6436 -1.73857 117 23.5857 -20.5657 -1.7382 148 23.3921 -20.7225 -1.73559 147 23.3225 -20.7919 -1.73521 116 23.2229 -20.8343 -1.73235 146 23.1126 -20.9328 -1.73135 115 23.0335 -20.9932 -1.73023 147 22.9439 -21.0439 -1.72824 115 22.8123 -21.1219 -1.7255 149 22.7385 -21.1866 -1.72488 118 22.6384 -21.2265 -1.72201 153 22.5411 -21.2688 -1.7194 120 23.2799 -19.6004 -1.68462 117 23.0949 -19.5688 -1.67455 152 23.0318 -19.64 -1.67442 101 26.1948 -19.6588 -1.63404 122 26.0827 -19.7676 -1.63269 140 25.8937 -20.0113 -1.63257 145 25.6949 -19.7294 -1.61401 140 25.41 -19.83 -1.60479 146 25.1826 -19.7803 -1.59298 182 25.0169 -19.7777 -1.58555 155 24.7907 -19.7896 -1.57599 172 23.3711 -21.2581 -1.56875 164 23.2997 -21.3274 -1.56841 144 23.748 -20.7967 -1.5673 142 23.4185 -21.1672 -1.56729 138 24.6053 -19.7687 -1.5671 181 23.4763 -21.0193 -1.56414 190 24.4079 -19.7367 -1.55731 176 22.9671 -21.223 -1.55064 142 24.2063 -19.7 -1.54719 184 23.9851 -19.7087 -1.53785 182 23.8168 -19.6963 -1.53009 174 23.4227 -19.6825 -1.51254 174 23.2662 -19.6761 -1.50556 183 23.0764 -19.6405 -1.49612 128 22.9002 -19.6776 -1.48993 209 22.8262 -19.739 -1.48902 128 26.3745 -19.6415 -1.45645 130 26.1785 -19.6235 -1.44795 188 26.0466 -19.6527 -1.44349 114 25.8378 -19.6868 -1.4361 112 25.6792 -19.6936 -1.42992 128 25.4213 -19.6227 -1.41736 183 25.2136 -19.6525 -1.40997 160 25.0277 -19.6341 -1.40197 159 24.8609 -19.6297 -1.39519 158 24.6604 -19.6606 -1.3882 157 24.4818 -19.6441 -1.3806 163 24.3066 -19.6292 -1.37321 159 24.1333 -19.6147 -1.36592 163 23.9356 -19.6419 -1.35903 160 23.7676 -19.6292 -1.35205 151 22.3634 -21.0319 -1.34563 76 23.3987 -19.6353 -1.33787 112 22.2836 -20.825 -1.33551 76 23.2591 -19.6429 -1.33271 114 22.2626 -20.6746 -1.32954 76 22.2658 -20.4828 -1.32306 75 22.9087 -19.657 -1.31964 123 22.2623 -20.3507 -1.31841 75 22.7501 -19.6453 -1.31316 192 22.6446 -19.6786 -1.31022 150 22.3225 -19.9595 -1.30738 75 22.5301 -19.7036 -1.30668 121 22.4086 -19.7844 -1.30475 101 22.3284 -19.8388 -1.30353 102 26.3004 -19.6431 -1.26602 247 25.7381 -19.6681 -1.24652 117 25.5161 -19.626 -1.23745 233 25.3113 -19.6591 -1.23106 206 25.1234 -19.6402 -1.22388 210 24.9421 -19.6252 -1.21705 203 24.7382 -19.6544 -1.21067 210 24.5686 -19.646 -1.20447 203 24.3915 -19.6305 -1.19782 210 24.2272 -19.6241 -1.19189 209 24.0246 -19.6483 -1.18551 212 23.8624 -19.6412 -1.17967 209 22.3589 -21.1572 -1.17405 154 23.6758 -19.613 -1.17239 195 22.346 -20.9465 -1.16714 220 22.3064 -20.7782 -1.16067 195 23.1872 -19.6425 -1.15639 111 22.2938 -20.6362 -1.15592 200 22.3127 -20.4594 -1.15116 205 22.9991 -19.6077 -1.14893 110 22.3103 -20.3287 -1.14712 206 22.8443 -19.6625 -1.14525 255 22.3133 -20.2036 -1.14344 209 22.725 -19.6845 -1.14183 203 22.3217 -20.084 -1.14012 207 22.6058 -19.706 -1.13842 205 22.3698 -19.9374 -1.13733 212 22.4114 -19.8485 -1.13608 216 22.4691 -19.774 -1.13581 219 26.2179 -19.6832 -1.05546 124 25.9116 -19.6446 -1.04513 248 25.7529 -19.6519 -1.04042 213 25.5817 -19.6486 -1.0351 206 25.3745 -19.6163 -1.028 231 25.1684 -19.647 -1.02245 207 24.9872 -19.6321 -1.01659 234 24.7938 -19.6062 -1.01011 208 24.5888 -19.633 -1.00455 204 24.4149 -19.6199 -0.999002 239 24.2491 -19.6122 -0.993834 217 24.045 -19.6352 -0.98828 212 23.8891 -19.6331 -0.983575 207 23.7227 -19.6214 -0.97833 210 22.4084 -20.9727 -0.974669 204 23.555 -19.6075 -0.973008 206 22.3645 -20.8 -0.968889 219 23.3523 -19.6256 -0.967454 198 22.3447 -20.6509 -0.964419 220 23.1868 -19.611 -0.962209 238 22.3696 -20.4792 -0.960644 221 23.0643 -19.6319 -0.959124 215 22.3747 -20.355 -0.957562 198 22.8958 -19.6752 -0.955265 207 22.3734 -20.2256 -0.954171 209 22.7583 -19.6816 -0.951409 217 22.4089 -20.0665 -0.95109 240 22.4301 -19.9588 -0.948933 200 22.6346 -19.6991 -0.948246 228 22.4627 -19.8617 -0.947393 232 22.5366 -19.7385 -0.946394 242 26.0409 -19.8279 -0.847765 59 25.7816 -19.759 -0.839761 59 25.4217 -19.6106 -0.827626 117 24.9862 -19.717 -0.81865 58 24.7835 -19.7474 -0.814129 105 24.5653 -19.7002 -0.807674 172 24.3975 -19.692 -0.803284 143 24.2066 -19.6641 -0.797926 177 24.0209 -19.7019 -0.794051 144 23.8385 -19.6782 -0.789015 145 23.6843 -19.6764 -0.785141 149 22.4853 -21.0039 -0.784396 198 23.4917 -19.7044 -0.780944 148 22.4324 -20.8231 -0.77917 132 23.3318 -19.6956 -0.776812 150 22.4051 -20.6023 -0.773688 255 23.1707 -19.6848 -0.772615 153 22.3944 -20.4631 -0.770399 255 22.9972 -19.7249 -0.769192 147 22.3904 -20.3309 -0.767432 255 22.4111 -20.2216 -0.765563 243 22.5017 -20.1118 -0.765372 107 22.7369 -19.7511 -0.76338 116 22.5064 -19.9893 -0.762857 166 22.6432 -19.7948 -0.762023 194 25.446 -19.7779 -0.665914 69 25.2941 -19.7874 -0.66282 102 24.3627 -19.9371 -0.645611 68 24.2354 -20.0885 -0.645553 68 24.2506 -19.9728 -0.643873 75 23.5543 -19.8373 -0.626996 66 22.4588 -20.7998 -0.621976 129 23.2907 -19.7404 -0.619834 201 22.4565 -20.6017 -0.618291 134 23.1632 -19.7576 -0.617499 177 22.5962 -20.341 -0.616344 144 22.5307 -20.4105 -0.616287 121 22.6843 -20.2276 -0.616076 134 22.4591 -20.4744 -0.616014 187 22.9941 -19.8013 -0.614784 175 22.7104 -20.123 -0.614721 90 22.751 -20.0318 -0.613909 97 22.882 -19.8302 -0.612992 132 24.9696 -19.9308 -0.444599 110 23.3886 -21.0059 -0.434105 108 23.3602 -20.7826 -0.430636 108 23.3924 -20.68 -0.42974 108 23.3415 -20.5049 -0.426596 107 23.811 -19.8798 -0.42559 107 23.3458 -20.3146 -0.424108 107 23.6764 -19.8941 -0.423669 247 23.3762 -20.2124 -0.423211 107 23.5344 -19.9013 -0.421543 169 24.1174 -20.472 -0.291069 94 24.1755 -20.3909 -0.290945 94 +unknow 0.826766 1 0 54 20.7594 22.9681 -2.06554 203 20.5631 22.8953 -2.0519 168 20.4072 22.9384 -2.04661 183 19.8249 22.9291 -2.01784 166 19.6682 22.893 -2.0083 165 19.5353 22.8834 -2.0014 172 19.346 22.8793 -1.99215 208 20.7826 22.8756 -1.88769 94 20.6198 22.84 -1.87847 79 20.4055 22.7456 -1.86396 80 20.1154 22.7794 -1.85257 144 19.9688 22.757 -1.84485 90 19.7686 22.8889 -1.84267 92 19.8051 22.786 -1.83901 77 19.6563 22.9039 -1.83847 92 19.5558 22.9321 -1.83548 110 19.3472 22.905 -1.82491 91 20.6845 22.8393 -1.70795 72 20.5793 22.8671 -1.70484 83 20.3515 22.7576 -1.69029 108 20.2096 22.8145 -1.68705 127 19.9379 23.0127 -1.68518 119 19.9409 22.7984 -1.67524 183 19.6137 22.9283 -1.66802 112 19.6465 22.8213 -1.66429 114 20.2264 22.8774 -1.50885 205 20.2968 22.7401 -1.5057 130 19.9045 23.0183 -1.50288 141 19.9524 22.855 -1.49771 175 19.5525 23.0464 -1.49118 138 19.5994 22.8094 -1.48275 189 19.5134 22.8542 -1.48151 166 20.3308 22.6657 -1.33249 114 20.2315 22.6982 -1.33036 158 20.0648 22.7259 -1.3258 184 19.9577 22.7483 -1.32307 183 19.8809 22.8049 -1.32266 183 19.7314 22.85 -1.31942 131 19.5087 23.0273 -1.3189 123 19.4785 22.8459 -1.31091 150 19.5111 22.7392 -1.30788 166 20.3635 22.7768 -1.16333 193 20.2627 22.8078 -1.16136 255 20.1537 22.9015 -1.16126 206 19.9505 22.9598 -1.15722 111 19.8872 22.742 -1.14797 152 20.2649 23.0637 -0.974658 255 20.1687 23.1002 -0.973268 117 20.1889 22.8324 -0.966028 221 20.3462 22.6494 -0.964801 155 20.247 22.6819 -0.96318 212 20.2368 22.9307 -0.777999 56 20.3035 22.7888 -0.776003 232 20.338 22.8805 -0.621634 66 +unknow 0.835061 1 0 98 16.1127 -17.0711 -1.70464 161 16.0266 -17.141 -1.70399 116 15.8372 -17.3162 -1.70398 128 15.9686 -17.1869 -1.7035 127 15.9132 -17.2355 -1.70333 172 15.7733 -17.3555 -1.70284 153 15.7053 -17.3902 -1.70121 156 15.6059 -17.4447 -1.69909 162 15.5112 -17.449 -1.69421 152 17.3853 -17.5909 -1.60775 167 17.1646 -17.6424 -1.59908 137 17.0426 -17.6274 -1.59204 136 16.6553 -17.721 -1.57736 135 16.4616 -17.681 -1.56547 155 16.2788 -17.5948 -1.55167 133 16.0551 -17.5729 -1.53934 132 15.8932 -17.5611 -1.53068 132 17.5006 -17.7018 -1.47949 198 17.1995 -17.673 -1.46376 127 17.2392 -17.5477 -1.45956 186 17.0217 -17.6008 -1.45183 110 16.7741 -17.6199 -1.44112 197 16.6445 -17.5943 -1.4338 125 16.4824 -17.5333 -1.42322 110 16.3792 -17.5889 -1.42119 147 16.1922 -17.4983 -1.40804 172 16.0793 -17.5968 -1.40776 135 15.8417 -17.6128 -1.39773 79 15.8554 -17.5172 -1.39353 101 17.3292 -17.5693 -1.32609 107 17.1319 -17.5336 -1.31589 206 16.7625 -17.372 -1.29263 142 16.6708 -17.4407 -1.29176 93 16.5117 -17.4928 -1.28728 138 16.3884 -17.4717 -1.28106 191 16.4896 -17.3597 -1.28032 165 16.2706 -17.5106 -1.27782 142 16.1344 -17.4736 -1.27036 102 16.0605 -17.5036 -1.26862 98 15.8691 -17.5699 -1.26364 140 15.8867 -17.4785 -1.26016 176 17.3504 -17.5714 -1.18014 223 17.1947 -17.5788 -1.17429 171 16.7291 -17.705 -1.16123 205 16.8256 -17.4196 -1.15337 239 16.6428 -17.5035 -1.14965 180 16.6631 -17.4151 -1.14684 218 16.4955 -17.5685 -1.14661 175 16.3104 -17.5365 -1.13817 255 16.2051 -17.5334 -1.13401 201 16.0809 -17.5093 -1.12827 198 15.9781 -17.5628 -1.12658 214 17.2721 -17.4541 -1.03422 141 17.1379 -17.4825 -1.03047 144 16.8282 -17.2741 -1.01194 180 16.5782 -17.5059 -1.01163 136 16.6806 -17.3392 -1.0091 212 16.7252 -17.2766 -1.0084 254 16.5849 -17.4031 -1.00809 163 16.3844 -17.5756 -1.00747 150 16.4041 -17.4312 -1.00282 255 15.8998 -17.5462 -0.989751 208 16.8172 -17.3307 -0.87581 188 16.859 -17.265 -0.875003 212 16.6975 -17.316 -0.871586 255 16.3668 -17.6261 -0.871485 206 16.5798 -17.3569 -0.869248 245 16.3592 -17.5076 -0.867355 237 16.4797 -17.3612 -0.866282 237 16.4086 -17.3954 -0.865202 255 17.1028 -17.3081 -0.729314 242 16.8095 -17.5544 -0.728225 165 16.8781 -17.4606 -0.727457 140 16.8548 -17.2184 -0.720136 188 16.7603 -17.2296 -0.717899 192 16.3058 -17.6278 -0.716959 140 16.4983 -17.3375 -0.713883 227 16.2917 -17.5018 -0.713029 171 16.404 -17.3471 -0.711646 216 16.3494 -17.3986 -0.711644 186 17.0386 -17.3882 -0.576962 45 16.3458 -17.6534 -0.567718 85 16.6882 -17.2467 -0.565795 44 16.5343 -17.3584 -0.564952 165 16.3234 -17.5187 -0.564042 180 16.5666 -17.2833 -0.563921 222 16.4426 -17.3711 -0.563208 188 16.3879 -17.4227 -0.563206 196 16.3555 -17.607 -0.443415 155 16.3439 -17.4839 -0.440759 183 16.4545 -17.3274 -0.439733 242 16.3973 -17.3761 -0.439623 199 16.502 -17.2684 -0.439464 52 16.603 -17.4607 -0.28407 84 16.4544 -17.5789 -0.283738 175 16.4972 -17.4591 -0.282557 255 16.5234 -17.425 -0.170841 72 16.7583 -17.5766 -0.0147643 93 +unknow 0.833285 1 0 138 13.9916 -1.12975 -1.33194 124 13.9607 -1.18278 -1.24868 150 13.9187 -1.13528 -1.2439 255 13.8865 -1.08882 -1.24016 255 13.8887 -0.979309 -1.23954 90 13.824 -1.01852 -1.2331 255 14.0382 -1.20963 -1.18077 45 13.9802 -1.21353 -1.097 128 13.823 -1.13459 -1.08175 225 13.995 -1.1777 -1.00886 255 13.9892 -1.22148 -1.00869 69 13.9189 -1.10512 -1.00176 255 13.9204 -1.06123 -1.00158 255 13.8859 -1.01466 -0.998291 255 13.8905 -0.949216 -0.998291 255 13.9994 -1.18704 -0.93503 249 13.9869 -1.11965 -0.933565 255 13.9539 -1.02889 -0.930308 255 13.9586 -0.963123 -0.930308 255 13.9327 -1.07138 -0.928843 203 13.9977 -1.12887 -0.821385 241 13.9127 -1.01192 -0.814487 233 13.8999 -0.967071 -0.813312 213 14.0022 -1.14956 -0.742979 105 13.9865 -1.19255 -0.742166 107 13.9371 -1.03423 -0.737963 255 13.9301 -1.09974 -0.737827 136 13.8985 -0.987548 -0.735116 255 13.9015 -0.943869 -0.735115 255 13.9581 -1.18388 -0.661568 83 13.8996 -1.09088 -0.657463 154 13.8822 -1.13338 -0.656593 245 13.8711 -1.04475 -0.655473 255 13.8739 -0.979228 -0.655349 255 14.0609 -1.20734 -0.584268 89 14.0085 -1.11433 -0.580893 104 13.9929 -1.0026 -0.579543 255 13.9751 -1.15592 -0.579207 200 13.988 -0.958107 -0.579093 255 13.9661 -1.0669 -0.578306 181 14.0148 -1.23228 -0.502839 104 13.9548 -1.16064 -0.499498 92 13.9524 -1.1163 -0.499194 131 13.9041 -1.06839 -0.496561 239 13.8675 -1.02169 -0.494536 255 13.8702 -0.956192 -0.494435 255 14.0144 -1.1708 -0.422472 97 13.9861 -1.12427 -0.421035 228 13.9437 -1.07687 -0.418968 139 13.9487 -1.01115 -0.418968 255 13.9438 -0.966785 -0.418608 255 13.9437 -1.03776 -0.330097 255 13.9269 -1.12452 -0.329712 233 13.9305 -0.970749 -0.329403 255 13.8866 -1.07729 -0.328015 100 13.9737 -1.18736 -0.243871 209 13.9256 -1.13931 -0.242193 248 13.9245 -1.05121 -0.241934 255 13.9051 -1.09372 -0.241418 240 13.9073 -0.984065 -0.241224 255 13.9084 -0.940238 -0.241159 255 13.9529 -1.20744 -0.171488 209 13.9265 -1.13901 -0.17062 255 13.9141 -1.09396 -0.170185 255 13.9035 -1.04917 -0.169805 255 13.8983 -0.982913 -0.169534 255 14.0309 -1.22659 -0.0796947 132 13.9982 -1.1131 -0.0788361 255 13.9668 -1.15482 -0.0782644 239 13.9558 -1.0657 -0.0778961 255 13.9538 -0.955397 -0.0776912 255 13.9487 -0.999091 -0.0776507 255 13.9917 -1.22094 -0.0137671 107 13.9217 -1.17064 -0.0125998 206 13.9337 -1.01749 -0.0125989 255 13.9244 -0.950843 -0.0123778 255 13.8926 -1.05831 -0.012 229 13.8852 -1.10162 -0.0119372 254 13.98 -1.20343 0.0788924 255 13.9656 -1.13596 0.0790756 255 13.9492 -1.09056 0.0792589 255 13.9426 -1.046 0.0793507 255 13.9433 -0.98001 0.0793876 255 13.9587 -1.17631 0.168013 244 13.9359 -1.08619 0.168096 255 13.9229 -1.01917 0.168147 255 13.9105 -1.12815 0.168157 255 13.9041 -0.973845 0.168208 255 13.9262 -0.948884 0.251036 255 13.9311 -0.993195 0.251061 255 13.9233 -1.14663 0.251073 255 13.9399 -1.03782 0.251099 255 13.9408 -1.10396 0.251118 255 13.9835 -1.1957 0.251277 196 13.917 -0.978243 0.333286 255 13.9302 -1.04519 0.33345 255 13.9293 -1.1332 0.333504 255 13.9448 -1.09039 0.333614 255 13.9915 -1.18263 0.334106 184 13.9168 -0.956792 0.425748 255 13.9277 -1.00149 0.425969 255 13.9368 -1.06815 0.42619 255 13.9354 -1.11209 0.426221 255 13.9478 -1.15715 0.426473 255 14.0158 -1.20701 0.42761 85 13.8951 -0.99164 0.496262 224 13.9079 -1.03651 0.496596 228 13.9125 -1.08083 0.496763 225 13.9389 -1.127 0.49739 216 13.9574 -1.19477 0.497891 180 13.917 -0.999223 0.566527 255 13.92 -0.955496 0.566527 255 13.9181 -1.06524 0.566682 255 13.9366 -1.11067 0.567252 255 13.941 -1.15509 0.567459 255 14.0031 -1.22658 0.569222 150 13.8577 -1.08192 0.651103 252 13.8817 -0.974192 0.651617 85 13.9558 -1.13389 0.654379 255 13.9906 -1.04832 0.65528 92 14.0159 -1.18323 0.656435 209 13.9059 -1.10317 0.743475 227 13.961 -0.953115 0.745177 40 13.962 -0.997247 0.745331 40 13.995 -1.06584 0.746799 40 14.0099 -1.15552 0.747649 230 14.1377 -1.21054 0.752752 93 13.8559 -1.09047 0.805946 255 13.889 -0.939576 0.8069 105 13.8899 -0.983495 0.807073 117 13.8872 -1.04909 0.807159 119 13.9818 -1.14483 0.811576 255 14.0738 -1.21934 0.815819 156 13.8681 -1.08273 0.898095 37 13.9468 -1.02263 0.901789 51 13.9539 -0.979087 0.901989 61 13.9502 -1.13309 0.902387 245 14.1099 -1.19038 0.910571 146 +unknow 0.878713 1 0 686 13.7755 0.105069 -1.073 80 13.9034 -0.906239 -0.999157 255 13.9576 -0.919012 -0.929982 255 13.9544 -0.874795 -0.929493 255 13.9126 -0.806458 -0.925748 209 13.8989 -0.923129 -0.813018 255 13.8911 -0.856854 -0.812137 203 13.8778 -0.812249 -0.810963 225 13.9185 -0.835243 -0.735792 255 13.9018 -0.878109 -0.734844 255 13.8971 -0.790201 -0.734165 255 13.8437 -0.743642 -0.730369 216 13.9478 1.23305 -0.661173 139 13.9057 1.1634 -0.658189 96 13.9137 -0.828454 -0.657213 255 13.8749 -0.935498 -0.655224 255 13.8718 -0.891509 -0.654851 255 13.8668 -0.73816 -0.653979 255 13.8485 -0.780792 -0.652985 249 14.0193 1.22459 -0.581997 168 13.9909 -0.914157 -0.579093 255 13.9588 1.10878 -0.578062 98 13.9493 1.15212 -0.577724 255 13.9682 -0.758592 -0.577292 243 13.9698 -0.648685 -0.577066 255 13.9353 -0.844703 -0.575718 244 13.9319 -0.800587 -0.57538 247 13.9298 -0.690761 -0.574929 120 13.864 -0.600332 -0.570992 190 14.0241 1.21834 -0.503222 194 13.9011 1.05404 -0.49634 255 13.8958 1.09755 -0.496238 138 13.8883 1.14088 -0.496035 161 13.8681 0.985907 -0.494417 133 13.8711 -0.912478 -0.494333 255 13.8719 -0.868768 -0.494232 255 13.8741 0.833126 -0.494216 255 13.8719 -0.80315 -0.494029 255 13.8743 -0.759566 -0.494028 255 13.8612 0.941672 -0.493911 137 13.8621 0.897998 -0.493811 220 13.8719 -0.650185 -0.493623 255 13.8801 0.440202 -0.493613 255 13.8745 0.59279 -0.493611 255 13.8667 -0.715441 -0.493522 255 13.8719 -0.60651 -0.493521 255 13.8791 -0.410346 -0.49352 255 13.8697 -0.562758 -0.493318 255 13.8777 0.200215 -0.493211 255 13.8683 0.548902 -0.493207 255 13.8742 0.28737 -0.493108 255 13.8654 -0.518947 -0.493014 249 13.8667 0.483411 -0.493005 255 13.8663 -0.366346 -0.49281 255 13.8458 -0.452842 -0.4919 255 14.0806 1.26286 -0.425774 52 14.0765 1.21792 -0.425415 52 13.9468 -0.922974 -0.418608 255 13.9316 -0.878057 -0.417799 255 13.9361 -0.768505 -0.417709 255 13.9276 -0.811945 -0.417439 255 13.8965 -0.722619 -0.415822 255 13.8719 -0.655856 -0.414564 239 13.9566 1.20226 -0.331079 54 13.9335 -0.926983 -0.329402 255 13.9063 1.13205 -0.328921 212 13.9224 -0.88229 -0.328862 255 13.9053 -0.727757 -0.327859 255 13.8908 0.736306 -0.327306 230 13.872 0.975934 -0.327149 241 13.8531 0.930905 -0.326301 255 13.8526 -0.81221 -0.326009 255 13.8491 -0.768346 -0.325777 255 13.834 0.820592 -0.3253 221 13.8423 0.624853 -0.325225 193 13.8332 0.689792 -0.324993 198 13.8383 -0.528069 -0.324927 255 13.8386 -0.462778 -0.32485 255 13.8413 -0.375817 -0.324849 216 13.836 -0.419168 -0.324695 191 13.8369 -0.310439 -0.324617 212 13.8259 0.537128 -0.324455 165 13.8187 -0.657768 -0.324388 255 13.8318 -0.266843 -0.324385 211 13.8326 -0.223391 -0.324385 207 13.8222 0.580485 -0.324377 169 13.8237 0.428355 -0.324225 158 13.8203 0.471715 -0.324147 167 13.8252 -0.179816 -0.324076 207 13.8223 0.0373672 -0.32392 144 14.0813 1.24287 -0.247464 40 13.9013 1.11668 -0.241334 128 13.8919 1.18183 -0.241204 214 13.9073 -0.896289 -0.24103 255 13.8988 0.96277 -0.240884 255 13.8941 1.02825 -0.240883 255 13.8848 1.07143 -0.240689 125 13.8993 -0.83005 -0.240642 255 13.8946 0.809045 -0.240434 255 13.8976 -0.6767 -0.240318 255 13.8997 -0.633038 -0.240318 255 13.8883 -0.741871 -0.240125 255 13.8778 0.917476 -0.24011 255 13.8786 0.873733 -0.240046 255 13.8916 -0.588966 -0.239995 255 13.8934 -0.545317 -0.239994 254 13.8799 -0.785182 -0.239932 255 13.8796 0.676946 -0.239725 255 13.8754 0.720444 -0.23966 255 13.8787 0.611353 -0.239597 255 13.8846 -0.392147 -0.239541 255 13.8799 -0.479315 -0.239478 255 13.8725 0.567403 -0.239339 255 13.8763 -0.326501 -0.239218 255 13.8726 0.458292 -0.239211 255 13.8702 0.523662 -0.239211 255 13.8693 -0.435356 -0.23909 255 13.8551 0.763006 -0.239079 255 13.8621 -0.239067 -0.238701 255 13.8455 -0.130045 -0.238119 255 13.8393 -0.282205 -0.237992 255 13.8391 -0.173476 -0.237926 255 13.8279 -0.0864716 -0.237538 255 13.8201 -0.0430221 -0.23728 255 13.8201 0.0221067 -0.237279 255 13.756 0.0651044 -0.235213 255 13.9767 1.23362 -0.172171 80 13.8962 1.11677 -0.169731 255 13.8877 1.0722 -0.169406 255 13.8923 -0.894775 -0.169207 255 13.8688 1.15847 -0.16908 178 13.8727 1.00534 -0.168865 255 13.8849 -0.784822 -0.168827 255 13.8734 -0.937307 -0.168774 255 13.8698 0.96135 -0.168702 255 13.8793 -0.740756 -0.16861 255 13.8709 0.852024 -0.168541 255 13.8716 -0.696629 -0.168338 255 13.8769 0.415519 -0.168166 255 13.8647 -0.63078 -0.168066 255 13.8511 -0.848355 -0.168014 255 13.854 0.76369 -0.167945 255 13.8587 -0.586866 -0.167849 255 13.8524 0.719965 -0.167837 255 13.8541 -0.499475 -0.167631 255 13.8484 -0.542833 -0.167523 255 13.8416 0.654042 -0.167458 255 13.8229 0.914568 -0.167347 255 13.8423 -0.433719 -0.167251 255 13.8356 0.610219 -0.167241 255 13.8176 0.805294 -0.167022 255 13.8275 0.566356 -0.166971 255 13.8316 -0.389869 -0.166925 255 13.8342 -0.281225 -0.166924 255 13.828 0.501117 -0.166917 255 13.8308 -0.34636 -0.16687 255 13.8337 -0.194258 -0.166869 255 13.8311 -0.237689 -0.166815 255 13.8325 -0.129047 -0.166815 255 13.8328 -0.0855928 -0.166814 255 13.833 -0.0421377 -0.166814 255 13.8291 0.00133149 -0.166705 255 13.8135 0.457176 -0.166483 255 14.027 1.2257 -0.079591 239 13.9748 1.1547 -0.078407 255 13.9465 1.1082 -0.0777539 255 13.9479 1.06422 -0.0777136 255 13.9448 0.997892 -0.0775508 255 13.9495 -0.867103 -0.0774862 255 13.9447 -0.910796 -0.0774457 255 13.9399 0.95352 -0.077388 255 13.9479 -0.757099 -0.0773221 255 13.9416 0.865664 -0.0773073 255 13.9435 -0.800803 -0.0772816 255 13.9462 -0.713079 -0.07724 255 13.9348 0.909189 -0.0772251 255 13.9434 -0.647084 -0.0771171 255 13.938 0.755575 -0.0771042 255 13.9295 0.799002 -0.0769811 255 13.9314 -0.602698 -0.0768307 255 13.9352 -0.449419 -0.0767887 255 13.9352 0.448358 -0.0767805 255 13.9223 0.710835 -0.076737 255 13.9272 -0.558699 -0.0767078 255 13.9337 -0.361757 -0.0767062 255 13.9277 -0.492995 -0.0766665 255 13.9258 0.491841 -0.0766167 255 13.9215 0.601198 -0.0766156 255 13.9225 -0.405257 -0.0765023 255 13.9193 -0.295781 -0.0763789 255 13.9075 0.644357 -0.07637 255 13.9162 -0.251986 -0.0762968 255 13.9117 -0.142631 -0.0761734 255 13.9069 -0.208135 -0.0760921 255 13.8961 -0.0988417 -0.0758461 255 13.8663 -0.0551222 -0.0752328 255 13.8554 0.554616 -0.0752271 255 13.8565 -0.0115698 -0.0750281 255 13.8561 0.0972583 -0.0750272 255 13.8524 0.0537044 -0.0749459 255 13.9872 1.20233 -0.0136507 190 13.9665 0.100798 -0.0125271 255 13.9173 -0.906425 -0.0122198 255 13.8933 1.15047 -0.012106 255 13.9022 0.953549 -0.0120137 255 13.9042 -0.861678 -0.0119671 255 13.9008 -0.817629 -0.0118721 255 13.8931 0.909111 -0.011825 255 13.8988 -0.708006 -0.0117453 255 13.8963 0.755978 -0.0117321 255 13.8918 0.799516 -0.0117 255 13.8893 0.843165 -0.0116995 255 13.897 -0.66414 -0.0116818 255 13.9 -0.598644 -0.0116815 255 13.8998 -0.55489 -0.0116495 255 13.8937 0.690198 -0.011638 255 13.9017 -0.445637 -0.0116172 255 13.8938 0.646457 -0.011607 255 13.8974 -0.511065 -0.0115861 255 13.901 -0.401899 -0.0115853 255 13.8965 0.537243 -0.0115766 255 13.8982 -0.358115 -0.0115218 255 13.8941 0.493448 -0.011514 255 13.8589 1.10387 -0.0115073 255 13.8973 -0.314402 -0.0114899 255 13.8967 0.340602 -0.011484 255 13.8936 0.449735 -0.0114829 255 13.8966 -0.248869 -0.0114579 255 13.8929 0.40603 -0.0114519 255 13.8953 -0.205177 -0.0114259 255 13.858 1.03811 -0.0114134 223 13.8919 -0.161469 -0.0113624 255 13.8798 0.602142 -0.0113552 255 13.8845 -0.0959325 -0.0112358 255 13.8433 0.993314 -0.0111301 255 13.8566 -0.749432 -0.0111148 255 13.8747 -0.0522561 -0.0110777 255 13.8701 0.143859 -0.0110128 255 13.8288 -0.00855195 -0.0103519 255 13.7967 0.0565443 -0.0098468 255 14.1003 1.25122 0.0777801 54 13.9343 1.12593 0.0793888 255 13.9424 -0.935941 0.0794245 255 13.9353 -0.825608 0.0795533 255 13.9317 0.883705 0.0795688 255 13.9289 0.927468 0.0795694 255 13.9179 1.08057 0.0795711 255 13.9239 0.97108 0.0795882 255 13.9233 -0.890771 0.0796262 255 13.9048 1.16748 0.0796272 241 13.9259 -0.781174 0.0796634 255 13.9178 0.816955 0.0797329 255 13.9202 -0.737013 0.079737 255 13.9207 0.729382 0.0797501 255 13.9183 0.773112 0.0797507 255 13.8949 1.01288 0.0798266 255 13.916 0.619565 0.0798405 255 13.908 0.662983 0.0798959 255 13.9005 -0.692225 0.0799386 255 13.9016 -0.626625 0.0799573 255 13.9013 -0.539119 0.0799946 255 13.8999 0.575065 0.0800046 255 13.8997 -0.473476 0.0800316 255 13.8896 0.530914 0.0801139 255 13.8816 -0.582069 0.0801589 255 13.884 0.465172 0.0801865 255 13.8771 -0.42911 0.0802516 255 13.8775 -0.341863 0.0802707 255 13.8744 -0.385408 0.0802886 255 13.8725 -0.18916 0.0803451 255 13.8735 -0.0802005 0.080346 255 13.869 -0.276283 0.0803626 255 13.8698 -0.232711 0.080363 255 13.8712 -0.123771 0.0803638 255 13.8697 -0.0366119 0.080383 255 13.8637 0.0287242 0.0804384 255 13.8136 0.071924 0.0808962 255 13.9331 -0.931945 0.168136 255 13.926 -0.82163 0.168176 255 13.9101 1.08338 0.168188 255 13.9173 -0.86499 0.168192 255 13.9189 -0.733466 0.16821 255 13.9034 1.03895 0.168215 255 13.9105 -0.776842 0.168226 255 13.8927 0.994293 0.168253 255 13.8952 0.928688 0.168258 255 13.9067 -0.513886 0.168272 255 13.8712 1.19009 0.168272 51 13.9012 0.688083 0.168278 255 13.8966 0.775421 0.168279 255 13.8962 -0.66657 0.168282 255 13.9001 -0.579243 0.168283 255 13.8881 0.88441 0.168285 255 13.8848 0.840426 0.168301 255 13.889 0.731242 0.168306 255 13.8882 -0.62244 0.16831 255 13.8823 0.621629 0.168338 255 13.8843 -0.469342 0.168339 255 13.8508 1.12266 0.168343 255 13.8849 -0.382041 0.168345 255 13.8846 -0.316547 0.168351 255 13.8757 -0.425398 0.168367 255 13.8803 -0.229197 0.168369 255 13.874 -0.0765004 0.168392 255 13.8655 -0.272498 0.168407 255 13.8599 0.533439 0.168409 255 13.8562 0.576903 0.168415 255 13.8632 -0.163536 0.168419 255 13.8555 0.489696 0.168425 255 13.8557 0.424338 0.16843 255 13.8322 -0.0110115 0.168509 255 13.7482 0.0324084 0.168742 198 13.7265 0.0144399 0.250301 255 13.7624 0.0577795 0.250417 229 13.8542 -0.0939955 0.25071 255 13.8545 -0.0287055 0.25071 255 13.8558 -0.137533 0.250716 255 13.8583 -0.246421 0.250728 255 13.8613 -0.181133 0.250735 255 13.8544 0.472028 0.250741 255 13.8569 0.515711 0.250754 255 13.8632 0.559577 0.25078 255 13.8614 0.603124 0.25078 255 13.87 -0.486424 0.250783 255 13.8734 -0.44291 0.25079 255 13.8793 -0.37762 0.250803 255 13.8724 0.669134 0.250826 255 13.8797 -0.59591 0.250827 255 13.8823 -0.530501 0.250828 255 13.8877 -0.639957 0.250859 255 13.8819 0.75708 0.250872 255 13.8862 0.713574 0.250878 255 13.8801 0.822606 0.250879 255 13.8795 0.86634 0.250886 255 13.9016 -0.684338 0.25091 255 13.8867 0.91061 0.250918 255 13.9142 -0.750675 0.250961 255 13.9022 0.977482 0.250983 255 13.9198 -0.79483 0.250986 255 13.9232 -0.838903 0.251005 255 13.9225 -0.882761 0.251011 255 13.913 1.0222 0.251028 255 13.9137 1.06622 0.251042 255 13.9129 1.17615 0.251068 255 13.9222 1.1109 0.25108 255 14.0505 1.23252 0.251523 90 13.8512 0.0725279 0.332382 255 13.8575 0.224941 0.332456 255 13.8568 0.268473 0.332457 255 13.8722 0.181565 0.332584 255 13.8773 0.029021 0.332619 255 13.8769 0.116209 0.33262 255 13.8831 -0.0800174 0.332673 255 13.8782 0.377903 0.332677 255 13.8713 -0.625102 0.332686 255 13.8853 -0.0364067 0.332691 255 13.8838 0.312579 0.332713 255 13.8722 -0.690669 0.332723 255 13.8901 -0.189176 0.332745 255 13.8462 1.11884 0.332758 254 13.8759 -0.734575 0.332777 255 13.8954 -0.232928 0.332799 255 13.891 0.421903 0.332805 255 13.8775 -0.778395 0.332813 255 13.894 -0.385749 0.332816 255 13.8977 -0.320325 0.332835 255 13.9008 -0.123824 0.332836 255 13.8956 0.465728 0.33286 255 13.8717 0.967479 0.332884 255 13.8669 1.03283 0.332885 255 13.9046 -0.276796 0.33289 255 13.8955 0.575007 0.332898 255 13.8989 -0.538909 0.332906 255 13.887 -0.822721 0.332922 255 13.9012 0.531498 0.332934 255 13.8976 0.618826 0.332935 255 13.8923 0.727964 0.332936 255 13.8736 1.07715 0.332976 255 13.8666 1.1643 0.332978 46 13.9016 0.662755 0.33299 255 13.9127 -0.430063 0.332998 255 13.893 -0.88881 0.333013 255 13.9133 -0.473837 0.333016 255 13.8921 -0.932589 0.333031 255 13.8994 0.815913 0.333047 255 13.9131 -0.583271 0.333052 255 13.9059 0.772459 0.333083 255 13.8994 0.881652 0.333084 255 13.9066 0.925957 0.333176 255 14.0143 1.24294 0.334384 47 13.8382 0.201985 0.424021 255 13.8413 -0.102371 0.42405 255 13.8395 0.245494 0.424053 255 13.8454 0.0933521 0.424115 255 13.8448 0.158592 0.424115 255 13.8496 -0.0589054 0.424176 255 13.8556 0.0498992 0.424272 255 13.8552 0.354683 0.424338 255 13.8677 0.00640188 0.424461 255 13.8681 -0.211451 0.424491 255 13.8667 0.289613 0.424495 255 13.868 0.398634 0.42456 255 13.8749 -0.146149 0.424586 255 13.8664 0.507617 0.424592 255 13.8774 -0.255183 0.424648 255 13.8764 -0.451461 0.42471 255 13.8815 -0.342508 0.424742 255 13.8786 0.442609 0.42475 255 13.8865 -0.298975 0.424806 255 13.876 0.660848 0.424846 255 13.8827 0.551923 0.424877 255 13.8809 0.595532 0.424877 255 13.8897 -0.408194 0.4249 255 13.8798 0.70475 0.424942 255 13.8884 -0.561047 0.424962 255 13.8949 -0.495728 0.425025 255 13.8925 -0.604925 0.425056 255 13.8831 0.792411 0.425069 255 13.8966 -0.648836 0.42515 255 13.8915 0.749129 0.425163 255 13.8872 0.858336 0.425196 255 13.8688 1.14188 0.425231 246 13.9064 -0.693065 0.42534 255 13.8964 0.902764 0.425386 255 13.9066 -0.802598 0.425434 255 13.8975 0.946693 0.42545 255 13.912 -0.846754 0.42556 255 13.917 -0.759326 0.42556 255 13.9009 1.01277 0.425577 255 13.9016 1.05675 0.42564 255 13.9198 -0.913066 0.425749 255 13.9062 1.10106 0.425767 255 13.931 1.21326 0.426305 38 13.8537 0.275326 0.494726 239 13.8585 0.014153 0.494766 236 13.8582 0.0794592 0.494766 235 13.8579 0.122996 0.494767 240 13.8548 0.318889 0.494768 236 13.8603 -0.0729366 0.494807 236 13.8585 0.231861 0.494809 238 13.8633 -0.181852 0.494889 234 13.8644 -0.0294088 0.494891 232 13.8646 -0.22544 0.494931 235 13.866 -0.116541 0.494931 236 13.8655 0.166612 0.494934 240 13.8637 0.362657 0.494978 235 13.8653 -0.37799 0.495013 229 13.8679 -0.269081 0.495014 232 13.8644 0.471659 0.495063 230 13.8649 0.515283 0.495105 229 13.8679 -0.487097 0.495138 226 13.8699 0.428216 0.495146 232 13.872 -0.421805 0.49518 229 13.8644 0.62433 0.495189 228 13.8764 -0.334689 0.495222 230 13.8664 0.668079 0.495274 228 13.8743 -0.530983 0.495304 223 13.8723 0.581014 0.495314 224 13.8766 -0.574741 0.495388 219 13.8691 0.733717 0.4954 229 13.8787 -0.618518 0.495471 219 13.8816 -0.68422 0.495596 217 13.8767 0.777823 0.495609 226 13.8814 -0.727935 0.495637 221 13.8801 0.821754 0.495735 231 13.8775 0.86536 0.495735 228 13.885 -0.771885 0.495762 222 13.8852 -0.837557 0.495845 222 13.8793 0.93114 0.495861 228 13.8877 -0.92533 0.496012 219 13.8831 1.01904 0.496072 235 13.8945 -0.881957 0.496096 225 13.8902 0.97569 0.496155 232 13.8961 1.08582 0.496448 227 13.9604 1.13485 0.49787 232 14.0783 1.18874 0.50042 47 13.7862 0.137637 0.562234 126 13.7947 -0.0572864 0.562439 155 13.8007 0.0510915 0.562595 134 13.7997 -0.295779 0.562644 132 13.8088 -0.0139366 0.562802 104 13.8116 -0.447982 0.563058 119 13.8173 -0.20928 0.56306 126 13.8229 -0.404864 0.563317 151 13.8231 0.39875 0.563325 107 13.8305 -0.100818 0.563372 101 13.8293 0.20333 0.563374 102 13.8345 0.0947445 0.563477 102 13.8318 0.29031 0.563479 103 13.8361 -0.144319 0.563527 100 13.8366 0.246933 0.563582 114 13.8385 -0.253048 0.56363 103 13.8381 -0.361775 0.563681 100 13.8376 -0.557595 0.563835 177 13.8417 0.442852 0.563843 123 13.8433 -0.514261 0.563939 157 13.8523 0.356094 0.56405 106 13.8503 0.486705 0.564103 199 13.8478 -0.601563 0.564145 246 13.8678 -0.646046 0.564715 255 13.872 0.596634 0.564778 255 13.87 0.640212 0.564779 255 13.8709 0.705776 0.564883 255 13.8662 0.792915 0.564884 255 13.8474 1.09779 0.564939 255 13.8818 0.553385 0.564985 255 13.8746 0.749684 0.565039 255 13.8795 0.90313 0.565404 255 13.8856 0.837839 0.565455 255 13.9002 -0.756937 0.565699 255 13.8757 1.14399 0.565769 104 13.8925 0.947848 0.565819 255 13.9105 -0.713659 0.565907 255 13.9077 -0.801158 0.565958 255 13.8994 0.992218 0.566079 255 13.9006 1.05817 0.566235 255 13.9178 -0.867533 0.566321 255 13.923 -0.91176 0.566528 255 14.0116 1.22195 0.569451 57 13.8358 -0.0347041 0.649054 139 13.8354 0.117433 0.649056 140 13.8362 -0.317306 0.64918 109 13.8373 0.269619 0.649186 133 13.8413 -0.121695 0.649246 90 13.8373 -0.426096 0.649308 106 13.8412 -0.273926 0.649309 109 13.842 0.226207 0.649314 93 13.8337 0.530525 0.649317 110 13.8301 0.617436 0.649318 106 13.8457 -0.0782432 0.649375 93 13.8407 0.378433 0.64938 118 13.8466 -0.187021 0.649439 119 13.8401 0.46546 0.649445 116 13.8419 -0.469784 0.6495 99 13.84 0.574303 0.649574 105 13.8486 -0.38292 0.64963 109 13.8538 0.0305046 0.649633 98 13.854 -0.230666 0.649695 84 13.8547 0.182851 0.649699 96 13.8514 0.422267 0.649766 84 13.8498 -0.579006 0.649885 61 13.8617 0.0740528 0.649891 90 13.8623 0.313625 0.650022 93 13.8575 -0.535738 0.650078 91 13.8504 0.770973 0.650219 101 13.8439 0.879723 0.65022 98 13.863 0.684311 0.650475 109 13.8628 0.727958 0.65054 112 13.8599 0.815161 0.650605 99 13.8738 -0.623726 0.65072 61 13.8758 -0.667506 0.650848 61 13.8785 -0.733224 0.651041 59 13.867 0.924888 0.651056 74 13.8566 1.12115 0.651187 252 13.8827 -0.930441 0.651553 70 13.9035 -0.887999 0.652132 44 13.916 -0.779128 0.652326 44 13.9155 -0.822962 0.652389 44 13.9019 1.08079 0.652536 255 13.9072 1.03726 0.652599 255 13.9089 1.19127 0.653051 44 13.8641 0.20897 0.740238 86 13.8624 0.448617 0.740395 75 13.8733 -0.0959856 0.740544 89 13.8736 0.0129772 0.740545 92 13.8705 0.296256 0.740548 83 13.8689 0.361625 0.740549 80 13.8753 0.100167 0.740623 88 13.8733 0.252722 0.740625 87 13.8775 0.0565902 0.7407 88 13.8786 0.165609 0.740779 85 13.8794 -0.248654 0.740852 80 13.8804 -0.183237 0.740853 80 13.8778 -0.401293 0.740928 73 13.8835 -0.0524224 0.740931 61 13.8761 0.514561 0.741014 43 13.8817 0.405626 0.74109 78 13.8845 -0.445135 0.741237 74 13.8875 -0.336074 0.741238 81 13.8905 -0.292484 0.741316 82 13.893 -0.489083 0.741623 68 13.8904 0.558822 0.741633 69 13.8885 0.602461 0.741633 73 13.8834 0.711522 0.741635 42 13.8908 -0.641993 0.741777 40 13.8945 -0.554701 0.741778 40 13.8851 0.755357 0.74179 40 13.9069 -0.139845 0.741858 58 13.8915 0.668198 0.741866 74 13.8866 0.799209 0.741945 40 13.8987 -0.5986 0.742009 40 13.8867 0.864891 0.7421 40 13.8959 0.909329 0.742564 65 13.8836 1.10584 0.742644 247 13.9186 -0.687048 0.742936 40 13.9242 -0.840868 0.743476 40 13.9332 -0.753565 0.743632 40 13.944 -0.907989 0.744404 40 13.9328 1.06581 0.744422 239 13.9607 -0.799001 0.744791 40 13.936 1.17623 0.744887 67 13.9999 1.22606 0.747516 40 13.8323 0.260902 0.803186 125 13.8405 -0.0868378 0.803442 169 13.8406 0.0653534 0.803443 177 13.8414 0.304554 0.803619 170 13.8374 0.609107 0.803882 157 13.852 0.152426 0.803964 164 13.8486 0.413541 0.804053 165 13.8554 -0.195787 0.804134 167 13.8627 -0.0434687 0.804395 133 13.8552 0.457291 0.8044 124 13.8592 -0.391885 0.804479 159 13.8627 -0.239478 0.80448 130 13.8648 8.27948e-05 0.804482 130 13.8644 0.108976 0.804483 133 13.8557 0.500883 0.804487 162 13.8651 0.21789 0.804571 134 13.8481 0.718564 0.804576 156 13.8458 0.762063 0.804576 149 13.8659 -0.283113 0.804653 167 13.8638 0.370382 0.804659 128 13.8386 0.914389 0.804665 132 13.8614 0.653748 0.805008 125 13.8553 0.806229 0.805097 138 13.8692 0.566796 0.805181 127 13.8759 -0.436022 0.805258 121 13.8567 0.849987 0.80527 139 13.8777 -0.501557 0.805431 149 13.8627 -0.850274 0.805515 100 13.8781 -0.545235 0.805517 150 13.8763 -0.632517 0.805603 107 13.8901 -0.13088 0.805607 133 13.8705 -0.785171 0.805688 117 13.8752 -0.698005 0.805689 139 13.8884 -0.349098 0.805692 129 13.8596 0.959469 0.805705 111 13.8679 -0.89435 0.805861 97 13.8809 -0.742034 0.806035 139 13.8902 -0.589451 0.806123 117 13.8875 1.07099 0.807265 255 13.9139 1.11695 0.808565 255 13.9323 1.16245 0.809518 255 14.1516 1.2475 0.819306 83 13.8971 0.379862 0.897708 137 13.8866 -0.77741 0.897997 75 13.9104 0.227213 0.898205 97 13.9142 -0.0350155 0.898303 97 13.9141 0.074267 0.898304 99 13.893 0.838993 0.898511 90 13.9176 -0.275527 0.8986 89 13.9101 0.53337 0.898608 139 13.9034 0.686282 0.898609 133 13.9233 -0.166252 0.898801 97 13.8934 0.926673 0.898812 95 13.9067 0.774079 0.89901 108 13.93 -0.0787888 0.899101 97 13.9302 0.0306191 0.899102 101 13.9298 0.118144 0.899103 99 13.9276 0.271307 0.899104 96 13.9022 0.883414 0.899111 98 13.9269 -0.385135 0.899198 83 13.9286 -0.319502 0.899199 139 13.9184 0.621317 0.899208 83 13.9282 -0.472761 0.899397 123 13.9322 0.337089 0.899404 89 13.9298 0.424615 0.899405 90 13.9377 -0.122606 0.8995 97 13.939 0.183936 0.899602 96 13.9283 0.57793 0.899606 91 13.9403 -0.232127 0.899699 96 13.9231 0.731148 0.899708 92 13.9219 -0.823202 0.899894 51 13.917 -0.932648 0.899993 119 13.9404 0.468804 0.900005 84 13.9341 -0.670259 0.900094 123 13.9382 -0.626566 0.900194 79 13.9136 1.03789 0.90021 78 13.9496 -0.429579 0.900396 83 13.9108 1.12563 0.900411 245 13.9481 -0.583094 0.900594 113 13.9546 -0.5175 0.900794 90 13.9381 1.08382 0.901608 255 13.9647 -0.737643 0.901791 77 13.9697 -0.892011 0.902488 37 14.0088 1.20023 0.905602 37 +unknow 0.982751 1 0 258 13.1016 25.1973 -2.1064 85 12.995 25.1851 -2.10151 85 12.7914 25.2757 -2.10053 85 12.8959 25.1868 -2.09793 85 12.6753 25.2427 -2.09385 98 12.5836 25.2574 -2.09157 100 11.9751 25.4216 -2.08195 121 11.8935 25.4555 -2.08163 117 12.4433 25.1735 -2.08034 100 12.043 25.3586 -2.07968 154 11.223 25.6842 -2.07607 151 11.0987 25.7295 -2.07542 154 11.0131 25.7532 -2.07444 148 10.9282 25.7785 -2.07362 149 10.8043 25.8242 -2.07313 149 10.6351 25.875 -2.07166 149 10.7148 25.8377 -2.07134 149 10.5432 25.8824 -2.06938 154 10.413 25.9114 -2.06759 142 10.2441 25.9615 -2.06628 210 10.3212 25.9181 -2.06531 134 9.5024 26.1021 -2.05552 164 9.24803 26.1679 -2.05356 157 9.61289 26.0234 -2.05259 135 9.11871 26.1943 -2.05209 159 9.03379 26.2153 -2.05144 156 9.39809 26.0699 -2.05015 155 8.94626 26.2284 -2.05013 153 9.31414 26.0937 -2.04966 144 8.81181 26.2381 -2.04736 160 8.72181 26.243 -2.04541 159 11.9962 24.7554 -2.03362 82 12.0704 24.7104 -2.03297 102 9.52271 24.696 -1.9486 138 9.42735 24.6792 -1.94453 193 9.29202 24.6729 -1.94014 188 9.20542 24.6777 -1.93802 118 12.5302 25.095 -1.85127 191 12.2419 24.7127 -1.81665 255 12.1545 24.7313 -1.81503 230 12.0134 24.7381 -1.81092 255 11.9122 24.7272 -1.80695 204 11.8112 24.716 -1.80299 228 11.5752 24.7195 -1.7958 255 8.48615 25.7328 -1.78105 192 10.8244 24.7159 -1.77275 248 8.52331 25.5755 -1.77092 200 10.7292 24.7095 -1.76952 250 10.5969 24.7231 -1.76658 242 10.4981 24.7068 -1.76262 255 10.4072 24.7084 -1.76012 232 10.2699 24.7074 -1.75615 255 10.1816 24.7138 -1.7541 233 10.0911 24.7143 -1.7516 238 8.55907 25.2857 -1.75156 183 9.99014 24.6885 -1.74705 255 9.77459 24.7125 -1.74279 179 9.84256 24.6576 -1.74089 195 9.54921 24.7085 -1.73648 195 9.65751 24.6428 -1.73487 191 8.55367 25.0115 -1.73235 167 9.44651 24.6732 -1.73134 224 9.35335 24.6618 -1.72811 222 9.22722 24.6794 -1.72606 255 8.60411 24.9035 -1.72604 169 8.70481 24.8156 -1.72237 224 9.1309 24.6578 -1.72209 176 8.93016 24.71 -1.72062 255 8.7734 24.7619 -1.72032 193 8.84373 24.7135 -1.71871 255 12.8277 24.8317 -1.68664 255 12.7324 24.8381 -1.68407 184 12.6037 24.7783 -1.67648 198 12.5016 24.7697 -1.67281 244 12.0083 24.9505 -1.66901 131 12.351 24.7604 -1.66766 99 12.244 24.7401 -1.66319 113 12.153 24.7515 -1.66115 176 12.0171 24.769 -1.65817 173 11.7978 24.7107 -1.64813 107 11.6701 24.7426 -1.64637 129 11.567 24.7248 -1.6423 247 8.4722 25.7198 -1.62745 151 10.8064 24.6968 -1.61925 228 10.7097 24.6867 -1.61599 225 10.576 24.6965 -1.61301 234 10.482 24.691 -1.61016 239 8.46623 25.4317 -1.60875 255 10.3867 24.6815 -1.60704 238 10.255 24.6933 -1.60433 235 10.1652 24.6959 -1.60216 233 10.0688 24.6815 -1.59877 235 9.97851 24.6815 -1.59646 240 8.52735 25.2176 -1.59629 164 9.84216 24.6782 -1.5928 238 9.68257 24.7284 -1.59198 87 9.74704 24.6645 -1.58955 209 9.47241 24.7627 -1.589 124 9.53008 24.6807 -1.58521 140 8.54927 25.0226 -1.58423 201 9.36707 24.7195 -1.58371 214 8.60707 24.9352 -1.5799 231 9.21426 24.6662 -1.57666 127 8.70605 24.8416 -1.57611 234 8.77541 24.7897 -1.57435 241 9.04266 24.6786 -1.5734 249 8.84188 24.7301 -1.57204 254 8.94405 24.6487 -1.5692 255 12.9135 24.8164 -1.53098 150 12.7599 24.806 -1.52601 212 12.6419 24.7677 -1.52053 223 12.2719 24.9064 -1.51791 141 12.5233 24.7272 -1.51494 229 12.4142 24.7041 -1.51059 246 12.2896 24.7462 -1.50946 233 12.0671 24.6867 -1.50001 136 11.9289 24.6984 -1.4969 120 11.7254 24.6719 -1.48994 213 11.6031 24.7143 -1.48906 255 8.49784 25.6816 -1.47332 130 10.8327 24.6674 -1.46655 248 10.7424 24.672 -1.46456 253 10.645 24.6598 -1.46145 247 8.54542 25.4237 -1.45903 124 10.5107 24.6675 -1.45858 251 10.4136 24.6545 -1.45547 255 10.3191 24.6466 -1.45274 250 9.57334 24.9286 -1.45172 206 10.2233 24.6346 -1.44975 254 9.67474 24.8423 -1.44899 135 10.0934 24.6493 -1.44751 248 8.55958 25.204 -1.44635 115 10.0046 24.6532 -1.44565 253 9.90473 24.6289 -1.44191 255 9.77749 24.6475 -1.44005 254 9.68392 24.6373 -1.43731 255 8.577 24.9977 -1.43455 138 9.39108 24.6863 -1.43357 113 8.66309 24.8665 -1.42858 177 9.16485 24.6732 -1.42785 202 8.72323 24.7884 -1.42523 220 9.06795 24.6495 -1.42437 255 8.98978 24.676 -1.42424 255 8.79301 24.7383 -1.42374 221 8.90543 24.6853 -1.423 255 12.9357 24.9078 -1.36958 122 12.809 24.8542 -1.36362 195 12.6574 24.8466 -1.35934 208 12.546 24.8203 -1.35518 222 12.4331 24.79 -1.35079 222 12.2905 24.7964 -1.34753 222 12.1773 24.7631 -1.34303 224 12.0759 24.7528 -1.33999 239 11.9418 24.7734 -1.33774 236 11.845 24.7712 -1.33526 238 11.7432 24.7577 -1.33211 252 11.6137 24.7857 -1.33042 255 10.8472 24.7495 -1.31073 245 10.748 24.734 -1.30769 250 10.6568 24.7364 -1.30578 246 10.5199 24.7386 -1.30285 244 10.4321 24.7476 -1.30139 240 8.60797 25.4059 -1.29954 178 10.335 24.7342 -1.29858 246 10.2405 24.7259 -1.2961 243 10.1081 24.735 -1.29374 247 10.0146 24.7278 -1.29137 242 9.92722 24.735 -1.28991 243 8.631 25.2124 -1.28965 187 9.79662 24.7463 -1.28777 249 9.69847 24.7248 -1.28462 240 9.60992 24.7273 -1.28293 235 8.70265 25.0356 -1.28156 203 9.47831 24.7331 -1.28057 235 9.38714 24.7273 -1.27843 230 8.76278 24.9554 -1.27841 211 9.22881 24.7783 -1.27798 255 9.30171 24.7361 -1.27719 230 8.83314 24.9051 -1.27707 126 9.07146 24.7109 -1.27134 79 8.9897 24.728 -1.27066 101 12.7546 24.7995 -1.20255 200 12.604 24.7935 -1.1988 210 12.5035 24.7884 -1.19627 214 12.3862 24.749 -1.19181 218 12.2526 24.7731 -1.18989 216 12.1474 24.7559 -1.18675 225 8.9046 26.0878 -1.18615 103 12.0424 24.7383 -1.18361 221 11.904 24.7498 -1.18108 220 11.7994 24.7312 -1.17794 205 8.96448 25.8644 -1.17644 133 11.7046 24.7321 -1.17591 218 11.603 24.7181 -1.17307 218 8.94576 25.5515 -1.16116 144 10.9408 24.7062 -1.15859 201 10.809 24.7227 -1.15666 214 10.7097 24.7071 -1.15393 215 8.97189 25.3708 -1.15297 143 10.6218 24.7168 -1.15261 213 10.4864 24.7225 -1.15018 215 10.3916 24.7148 -1.14795 213 9.05277 25.2211 -1.1472 146 10.3039 24.7233 -1.14663 215 10.2086 24.7132 -1.1443 211 9.10875 25.1287 -1.14377 133 10.0792 24.7296 -1.14258 210 9.98648 24.7241 -1.14055 215 9.89834 24.7294 -1.13914 203 9.15187 25.0025 -1.13851 137 9.76186 24.7256 -1.1364 208 9.67974 24.745 -1.13579 207 9.59472 24.7567 -1.13478 202 9.4708 24.7829 -1.13376 194 9.38581 24.7939 -1.13275 194 9.22984 24.8524 -1.13274 215 9.30224 24.8083 -1.13194 197 12.7718 24.9233 -1.04865 151 12.6262 24.9279 -1.04586 150 12.5058 24.8835 -1.04164 152 9.80852 26.0221 -1.03976 129 12.4008 24.869 -1.03894 167 12.2518 24.8626 -1.0357 175 12.0857 24.9193 -1.03471 249 12.1526 24.8579 -1.03355 169 11.9165 24.8678 -1.02932 101 11.8229 24.8727 -1.0277 116 9.73925 25.5933 -1.02064 125 9.80018 25.3924 -1.01319 100 10.9549 24.833 -1.00982 100 10.8377 24.8844 -1.00981 100 9.80972 25.1808 -1.00449 99 9.85086 25.0531 -0.999822 99 9.91641 24.8746 -0.99345 98 9.97962 24.8062 -0.991657 246 10.0515 24.76 -0.990941 213 10.2411 24.6692 -0.990408 192 10.1514 24.6716 -0.988969 225 10.1222 26.0569 -0.868429 143 12.1442 24.9005 -0.858855 246 12.0085 24.9197 -0.857234 106 11.9033 24.9014 -0.854843 114 10.0284 25.3445 -0.841541 112 10.0679 25.2127 -0.837382 104 10.8907 24.8596 -0.837096 104 10.1967 24.9645 -0.830375 104 10.2438 24.8566 -0.827218 255 10.3698 25.6738 -0.684349 131 11.707 25.0438 -0.682968 129 10.3609 25.4208 -0.676677 119 11.0777 25.0161 -0.673732 200 10.3876 25.2586 -0.672165 121 10.9341 25.0094 -0.671665 194 10.8396 25.007 -0.670373 190 10.4704 25.1226 -0.669137 132 10.7444 25.0023 -0.669016 194 10.6078 25.0085 -0.667465 217 10.5253 25.0325 -0.667141 164 +unknow 0.953381 1 0 1747 8.65998 -0.912994 -1.7319 114 8.65641 -0.871366 -1.73021 103 9.65437 -0.92685 -1.72985 108 9.19799 -0.931816 -1.72656 114 9.19448 -0.887685 -1.72498 103 8.13762 -0.910229 -1.72409 139 8.1385 -0.884455 -1.72364 140 8.62798 -0.841036 -1.72346 125 8.14325 -0.820318 -1.72319 134 8.13542 -0.858287 -1.7223 136 8.13803 -0.793998 -1.72141 142 8.13782 0.79615 -1.7214 119 7.40674 -0.92535 -1.72132 150 8.16491 -0.35828 -1.72052 121 7.40331 -0.889537 -1.71938 102 8.15655 0.411395 -1.71917 125 8.15269 -0.447632 -1.71873 148 7.40222 -0.865837 -1.7184 127 8.12689 -0.767188 -1.71829 150 8.1493 -0.473136 -1.71829 117 8.14045 0.551712 -1.71739 124 8.55873 1.17899 -1.71711 120 8.14692 -0.408843 -1.71695 117 8.14816 -0.383246 -1.71695 152 8.15092 -0.319238 -1.71695 132 8.14181 0.500427 -1.71694 126 8.13392 0.615477 -1.71694 147 8.08444 1.08692 -1.71693 120 8.13825 0.525871 -1.7165 160 7.39979 -0.818484 -1.71646 111 7.40599 -0.76034 -1.71646 107 8.14418 0.38508 -1.71605 122 8.12495 0.679005 -1.71605 108 7.40164 -0.783406 -1.71597 106 8.77293 -0.937086 -1.71586 116 8.56015 1.12444 -1.71584 108 8.1375 0.474487 -1.7156 120 8.12084 0.704352 -1.7156 145 8.11506 0.768112 -1.7156 141 7.39333 -0.841302 -1.71548 131 7.41416 -0.631948 -1.71548 111 8.52726 1.33891 -1.71542 127 8.14683 -0.203807 -1.71516 122 8.11664 0.729681 -1.71516 142 8.77194 -0.909122 -1.71503 112 8.77612 -0.867777 -1.71503 125 8.53953 1.24479 -1.715 120 8.77686 -0.840022 -1.71462 106 8.13811 0.34634 -1.71427 137 8.54883 1.15031 -1.71415 118 7.70927 -0.878284 -1.71404 90 7.39869 -0.736143 -1.71403 111 7.41125 -0.596556 -1.71402 107 8.13825 -0.293182 -1.71383 128 8.13913 -0.267613 -1.71383 126 8.13186 0.435692 -1.71382 151 8.06394 1.13575 -1.71381 118 8.52369 1.31095 -1.71373 123 7.40015 -0.701092 -1.71354 110 7.41116 -0.573127 -1.71354 141 7.41852 -0.468298 -1.71354 110 8.06554 1.11013 -1.71337 145 8.53566 1.21687 -1.71331 122 7.40038 -0.67767 -1.71305 107 7.39741 0.70943 -1.71304 115 8.13768 -0.17803 -1.71294 150 8.13914 -0.088541 -1.71293 143 8.11832 0.588595 -1.71293 155 7.41809 -0.409818 -1.71256 114 7.41257 0.499876 -1.71256 118 7.37809 0.871692 -1.71255 115 9.5248 1.26495 -1.71236 107 9.52078 1.29487 -1.71236 116 7.39861 -0.65409 -1.71208 106 7.40711 -0.549431 -1.71208 102 7.41874 0.35997 -1.71207 110 7.38278 0.813495 -1.71207 110 8.50563 1.36296 -1.71162 128 8.50131 1.38968 -1.71162 132 8.13235 -0.152372 -1.7116 120 7.40769 -0.514391 -1.71159 112 7.41986 0.289952 -1.71159 123 7.39592 0.662397 -1.71158 118 7.71168 -0.743792 -1.71124 100 7.7151 -0.707443 -1.71124 85 8.51817 1.26907 -1.7112 120 8.12779 0.256363 -1.71115 132 8.12552 0.320191 -1.71115 133 7.41596 0.33647 -1.7111 119 7.41181 0.417994 -1.7111 111 7.4083 0.476194 -1.7111 130 7.39187 0.685445 -1.7111 119 7.38626 0.74348 -1.7111 114 8.11468 -0.496817 -1.71071 138 7.41115 0.394598 -1.71061 111 7.40068 0.557473 -1.71061 122 7.39889 0.580719 -1.71061 119 9.49626 1.39802 -1.71046 123 8.12789 -0.0246153 -1.71026 131 8.12776 0.0519893 -1.71026 115 7.40346 -0.490752 -1.71013 115 7.41083 -0.36276 -1.71013 126 7.41246 -0.327833 -1.71013 127 7.41437 -0.281252 -1.71013 127 7.41561 -0.246309 -1.71013 126 7.4191 -0.0948367 -1.71013 123 7.41961 -0.036564 -1.71013 122 7.41609 0.231462 -1.71013 119 7.4131 0.312994 -1.71013 124 7.3614 0.928366 -1.71012 111 7.35845 0.951487 -1.71012 111 7.71358 -0.658437 -1.70983 92 8.12518 -0.113963 -1.70981 145 7.40772 -0.385947 -1.70965 119 7.41642 -0.141421 -1.70965 126 7.41775 -0.0132574 -1.70964 110 7.41339 0.254692 -1.70964 115 7.39316 0.60363 -1.70964 111 7.3781 0.766058 -1.70964 112 7.37566 0.789232 -1.70964 119 9.99943 1.31618 -1.70961 107 7.68574 -0.912247 -1.70937 90 7.69267 -0.851855 -1.70937 109 7.70954 -0.682489 -1.70937 92 9.9933 1.34733 -1.70925 109 7.40321 -0.432377 -1.70916 115 7.41569 0.0449837 -1.70916 120 7.4138 0.173107 -1.70916 123 7.40271 0.440791 -1.70915 119 7.36184 0.893183 -1.70915 112 7.3469 1.00871 -1.70915 114 7.33191 1.11247 -1.70915 115 7.32838 1.1355 -1.70915 112 7.71174 -0.633869 -1.7089 107 9.98707 1.37846 -1.70888 97 7.40764 -0.304326 -1.70867 127 7.41053 -0.222856 -1.70867 123 7.38737 0.626511 -1.70867 116 7.34965 0.973817 -1.70866 115 7.34178 1.03151 -1.70866 114 9.49089 1.36675 -1.70856 116 8.12013 0.000893974 -1.70848 130 7.6977 -0.76682 -1.70843 100 7.7127 -0.597364 -1.70843 105 7.10331 -0.784645 -1.70827 94 7.1158 -0.661796 -1.70827 99 7.41163 0.0682315 -1.70818 119 7.41043 0.149722 -1.70818 114 7.39355 0.521869 -1.70818 123 7.36346 0.846455 -1.70818 118 7.33658 1.05429 -1.70817 115 8.09309 0.637839 -1.70802 99 7.69332 -0.790794 -1.70797 103 7.7126 -0.57298 -1.70797 87 9.49125 1.33637 -1.7078 111 7.095 -0.840176 -1.70776 93 7.12252 -0.560975 -1.70776 95 8.11264 -0.241317 -1.70759 154 8.11599 -0.0628642 -1.70758 134 8.1109 0.294047 -1.70758 133 9.06021 1.28577 -1.70748 119 7.10425 -0.739583 -1.70726 88 7.10984 -0.683763 -1.70726 85 7.12315 -0.527255 -1.70726 100 7.40803 0.0216362 -1.70721 107 8.11378 0.0900952 -1.70714 124 8.11346 0.115585 -1.70714 118 8.11101 0.230273 -1.70714 124 7.71298 -0.512117 -1.70703 94 7.6631 1.01451 -1.70702 94 7.08435 -0.895375 -1.70676 89 7.10461 -0.717059 -1.70676 130 7.40344 -0.199392 -1.70673 122 7.40588 -0.0598115 -1.70673 119 7.40556 0.0914236 -1.70673 158 7.40321 0.207736 -1.70672 123 8.11111 0.141034 -1.70669 122 8.10975 0.204734 -1.70669 125 9.06032 1.25677 -1.70669 121 7.68371 -0.826396 -1.70657 105 7.32556 1.07617 -1.70623 115 8.10645 0.179157 -1.7058 116 7.40042 -0.164429 -1.70575 131 7.40131 -0.117927 -1.70575 119 7.08465 -0.861499 -1.70575 120 7.09612 -0.761258 -1.70575 126 7.11114 -0.605032 -1.70575 92 7.10821 -0.638536 -1.70575 128 7.68292 0.796884 -1.70562 95 9.04642 1.31285 -1.70549 127 7.39923 0.126201 -1.70527 103 7.088 -0.816739 -1.70525 125 7.12084 0.447641 -1.70524 97 7.70475 0.518723 -1.70515 96 7.69664 0.627593 -1.70515 102 7.70079 -0.547736 -1.7047 93 7.71097 -0.378265 -1.7047 96 7.71485 0.288508 -1.70469 100 7.69758 0.591174 -1.70469 93 7.68507 0.736156 -1.70469 96 7.67651 0.820615 -1.70468 91 9.05824 1.18409 -1.7043 115 9.05256 1.22676 -1.7043 121 7.30562 1.15542 -1.70428 111 7.70291 -0.487107 -1.70423 94 7.7065 -0.426593 -1.70423 94 7.65468 0.988979 -1.70422 90 7.70246 -0.462782 -1.70376 93 7.71544 0.118744 -1.70376 105 7.71183 0.264149 -1.70376 91 7.68673 0.675449 -1.70375 102 7.68347 0.711665 -1.70375 95 7.67884 0.759932 -1.70375 99 7.65732 0.952664 -1.70375 96 7.11707 0.413758 -1.70373 109 8.09864 0.026266 -1.70357 147 7.68688 0.651139 -1.70329 90 7.66809 0.844108 -1.70328 97 7.66122 0.90431 -1.70328 101 7.65834 0.928373 -1.70328 88 7.06807 -0.915837 -1.70323 123 7.10933 -0.503723 -1.70323 96 7.12399 0.212337 -1.70323 100 7.12123 0.290659 -1.70322 94 7.1176 0.368941 -1.70322 106 7.08166 0.804016 -1.70322 98 9.0242 1.38211 -1.70311 130 7.70593 -0.317345 -1.70283 100 7.71246 0.00966774 -1.70282 101 7.7109 0.155036 -1.70282 99 7.70873 0.239812 -1.70282 98 7.70563 0.324559 -1.70282 100 7.70223 0.397169 -1.70282 106 7.6974 0.481835 -1.70282 112 7.69338 0.542275 -1.70282 99 7.10144 -0.581698 -1.70273 123 7.10895 -0.481248 -1.70273 96 7.11251 -0.425399 -1.70273 137 7.11676 -0.347167 -1.70273 102 7.11447 0.3912 -1.70272 102 7.10974 0.469406 -1.70272 102 7.08223 0.781557 -1.70272 95 7.06479 0.926009 -1.70271 98 9.02656 1.35347 -1.70271 102 8.02762 1.04059 -1.70267 131 7.70701 -0.23253 -1.70236 103 7.71042 -0.0387754 -1.70236 104 7.70994 0.0944524 -1.70236 103 7.70844 0.179222 -1.70236 103 7.66153 0.867771 -1.70235 112 7.11311 -0.38059 -1.70222 98 7.12296 -0.067467 -1.70222 102 7.06575 0.903572 -1.70221 95 7.69809 -0.401841 -1.70189 96 7.70844 0.046002 -1.70189 107 7.70069 0.348603 -1.70189 103 7.69639 0.433255 -1.70189 102 7.62327 1.14366 -1.70188 112 7.10995 -0.402819 -1.70172 95 7.11585 -0.279912 -1.70172 107 7.12028 -0.123365 -1.70172 99 7.12078 -0.0898116 -1.70172 108 7.12048 0.111534 -1.70172 97 7.11882 0.189823 -1.70172 97 7.11292 0.346319 -1.70171 100 7.08978 0.669866 -1.70171 98 7.08654 0.703266 -1.70171 105 7.07333 0.825607 -1.70171 128 7.05651 0.958782 -1.70171 99 7.70194 -0.268697 -1.70143 102 7.70497 -0.159789 -1.70142 102 7.70631 0.0702078 -1.70142 103 7.70395 0.203348 -1.70142 101 7.11743 -0.168052 -1.70122 101 7.11815 0.133873 -1.70121 99 7.11744 0.16742 -1.70121 98 7.10004 0.524824 -1.70121 98 7.08006 0.747587 -1.70121 125 7.05155 0.980685 -1.7012 99 7.04843 1.00284 -1.7012 117 7.04363 1.03604 -1.7012 93 6.87533 -0.644599 -1.70097 113 7.70187 -0.208139 -1.70096 102 7.70249 -0.183941 -1.70096 102 7.70432 -0.0750334 -1.70096 102 7.69567 0.372619 -1.70095 99 7.68387 0.565897 -1.70095 97 7.11008 -0.324426 -1.70071 106 7.11322 -0.246227 -1.70071 101 7.11733 -0.0450323 -1.70071 105 7.11362 0.234432 -1.70071 98 7.11061 0.312638 -1.70071 102 7.09643 0.546985 -1.70071 99 7.09192 0.602703 -1.7007 92 7.70273 -0.014511 -1.70049 100 7.68917 0.457106 -1.70049 100 7.63289 1.03501 -1.70048 96 6.87135 -0.666017 -1.70046 105 6.88268 -0.536381 -1.70046 110 7.10077 -0.458253 -1.70021 99 7.10913 -0.301998 -1.70021 106 7.11553 0.0108764 -1.70021 101 7.1105 0.267888 -1.7002 130 7.09858 0.491106 -1.7002 119 7.09275 0.569131 -1.7002 98 7.08806 0.62482 -1.7002 96 8.672 1.15429 -1.70014 100 8.66832 1.18153 -1.70014 125 7.6927 -0.353081 -1.70003 96 7.69523 -0.292651 -1.70003 107 7.69981 -0.123365 -1.70002 98 7.6226 1.09466 -1.70001 94 8.65288 1.27648 -1.69972 106 7.11009 -0.223743 -1.69971 110 7.11212 -0.145552 -1.6997 101 7.11305 0.0890963 -1.6997 101 7.08413 0.646914 -1.6997 94 7.11163 -0.0226302 -1.6992 104 7.11159 0.0332255 -1.6992 141 7.07466 0.724581 -1.69919 81 7.05975 0.857799 -1.69919 91 7.05702 0.879973 -1.69919 119 6.86345 -0.687045 -1.6989 114 6.8743 -0.568351 -1.6989 109 6.88013 -0.492735 -1.6989 88 6.88641 -0.395417 -1.6989 89 6.89571 -0.16808 -1.6989 98 8.65876 1.20793 -1.6989 119 8.65492 1.23512 -1.6989 101 8.63445 1.37092 -1.69889 114 6.88704 0.384296 -1.69889 93 7.10952 0.0555614 -1.6987 95 7.69432 -0.0990791 -1.69862 99 7.61335 1.11778 -1.69861 92 8.63888 1.32991 -1.69848 117 6.87663 -0.514209 -1.69838 112 6.89577 0.0269192 -1.69838 93 6.84349 0.848008 -1.69837 90 7.61829 1.06966 -1.69814 90 8.64109 1.30246 -1.69807 113 6.86674 -0.611208 -1.69787 111 6.87994 -0.438448 -1.69786 89 6.85287 0.750959 -1.69785 94 8.62238 1.39676 -1.69724 121 7.10108 -0.201095 -1.69719 107 6.86478 -0.589318 -1.69683 106 6.88263 -0.319349 -1.69683 102 6.88534 0.254103 -1.69682 98 6.85136 0.729004 -1.69682 115 6.88379 -0.243589 -1.69631 94 6.8802 0.329695 -1.6963 96 6.85906 0.631889 -1.6963 89 6.84472 0.771812 -1.6963 120 6.8854 0.102562 -1.69579 94 6.87293 0.4268 -1.69579 92 6.86816 -0.470243 -1.69527 122 6.87826 -0.286688 -1.69527 97 6.88163 -0.189424 -1.69527 92 6.87872 0.275478 -1.69527 97 6.8293 0.868001 -1.69526 121 6.82513 0.900172 -1.69526 116 6.88213 -0.0488622 -1.69475 85 6.88228 -0.0164254 -1.69475 97 6.88205 0.0592487 -1.69475 99 6.86397 0.502045 -1.69475 117 6.85127 0.652865 -1.69475 118 6.83526 0.803365 -1.69474 113 6.8327 0.824834 -1.69474 109 6.87905 0.13487 -1.69423 129 6.87646 0.232103 -1.69423 95 6.85426 0.598859 -1.69423 120 6.86585 -0.415957 -1.69372 122 6.86891 -0.362019 -1.69372 121 6.87796 0.080808 -1.69372 121 6.87554 0.199634 -1.69372 115 6.85851 0.523304 -1.69371 105 6.84319 0.695495 -1.69371 115 6.87589 -0.0920452 -1.6932 96 6.87421 0.177977 -1.6932 123 6.8646 0.404599 -1.6932 124 6.85973 0.480054 -1.69319 90 6.85226 0.576982 -1.69319 90 6.871 -0.221578 -1.69268 127 6.87303 -0.146012 -1.69268 100 6.87458 0.00516001 -1.69268 127 6.85999 0.447591 -1.69268 117 6.86422 -0.340174 -1.69217 93 6.8637 0.350461 -1.69216 125 6.87035 -0.070407 -1.69165 123 6.86384 0.307233 -1.69164 117 6.83765 0.673205 -1.69164 115 6.86368 -0.264542 -1.69113 127 6.86784 -0.113546 -1.69113 132 6.86701 0.156176 -1.69113 91 6.80696 0.919481 -1.69112 110 6.84442 0.554636 -1.6906 113 7.9879 0.806353 -1.68751 164 7.96806 -0.727464 -1.68128 133 7.92934 -0.523575 -1.6688 133 7.82977 0.989284 -1.6563 89 7.83412 0.815205 -1.65274 142 7.84317 -0.679229 -1.65186 111 7.84339 -0.629636 -1.65097 117 7.84984 -0.543356 -1.65097 93 7.8336 -0.653651 -1.64918 115 7.83655 -0.591965 -1.64874 115 7.79222 0.959542 -1.64694 102 7.79649 0.873135 -1.6456 126 7.78746 0.934103 -1.64516 112 7.82086 -0.566134 -1.64472 108 7.79532 0.848202 -1.64471 97 7.78984 0.897165 -1.64471 116 7.85032 -0.737983 -1.55425 88 7.74658 0.982963 -1.53778 85 7.77 -0.69323 -1.53611 82 7.68557 0.950916 -1.52386 89 7.58561 0.91471 -1.50149 101 7.58132 -0.651756 -1.49476 105 7.70943 -0.71661 -1.48775 68 7.66068 0.979884 -1.4836 76 7.39615 0.868959 -1.45972 84 7.51621 0.936911 -1.4522 111 7.37111 -0.504799 -1.44707 80 7.34414 -0.526048 -1.44159 94 7.33402 -0.606435 -1.44074 93 7.48744 -0.673014 -1.44023 119 7.29497 -0.579993 -1.43188 78 7.29373 -0.545299 -1.43104 86 7.26801 0.819669 -1.43103 75 7.289 -0.441386 -1.42851 255 7.25129 0.737221 -1.42554 131 7.24773 0.771389 -1.42554 89 7.26624 -0.31401 -1.42218 40 7.22389 0.791887 -1.4209 78 7.64587 0.979131 -1.41515 81 7.33465 0.890246 -1.41294 142 7.34456 -0.521365 -1.40758 235 7.17915 0.605069 -1.4074 242 7.19103 -0.333129 -1.40614 213 7.3267 -0.624344 -1.40552 139 7.32336 -0.543057 -1.40345 208 7.16412 -0.275411 -1.39981 40 7.28591 0.74504 -1.39931 197 7.12901 0.702618 -1.39854 228 7.28237 0.721548 -1.39807 176 7.147 -0.353437 -1.39686 255 7.13822 0.500277 -1.39685 39 7.58167 -0.703357 -1.3961 92 7.13269 0.46615 -1.39517 39 7.27974 -0.574473 -1.39477 73 7.13153 -0.453783 -1.39475 255 7.13158 0.421107 -1.39432 39 7.11682 0.622557 -1.39432 255 7.12632 0.44328 -1.39348 39 7.2739 -0.493646 -1.39229 202 7.12784 -0.251452 -1.3918 44 7.24289 0.798037 -1.39145 100 7.11657 -0.374244 -1.39053 255 7.23452 0.820104 -1.39021 117 7.11982 -0.195162 -1.38969 45 7.10346 0.520392 -1.38968 44 7.22802 0.842363 -1.38939 56 7.11101 -0.22843 -1.388 45 7.11222 0.0844346 -1.38757 45 7.08056 0.675576 -1.38757 255 7.10918 -0.150132 -1.38715 46 7.09717 -0.406704 -1.38673 255 7.10818 -0.0942586 -1.38673 45 7.10845 -0.0719247 -1.38673 45 7.10394 0.26301 -1.38673 45 7.10476 -0.172355 -1.38631 45 7.10684 -0.0160845 -1.38631 45 7.10484 0.028573 -1.38589 45 7.23499 -0.593974 -1.38568 80 7.09527 0.28504 -1.38504 45 7.09384 0.318478 -1.38504 46 7.09886 -0.0494897 -1.38462 45 7.09903 0.00626304 -1.38462 46 7.08858 0.385222 -1.38462 46 7.09613 -0.116353 -1.3842 46 7.06809 0.640846 -1.38419 255 7.21156 0.760081 -1.38402 230 7.09106 0.240279 -1.38377 47 7.08695 0.340501 -1.38377 46 7.09042 0.106536 -1.38293 45 7.07608 0.362299 -1.38166 47 7.08117 0.0619328 -1.38082 45 7.07959 0.162033 -1.38082 45 7.07904 0.184272 -1.38082 45 7.07811 0.139757 -1.3804 45 7.07647 0.206463 -1.3804 46 7.44459 0.930294 -1.37345 174 7.4316 -0.66537 -1.36512 138 7.13689 -0.428564 -1.36254 255 7.11714 0.682006 -1.36253 255 7.12226 0.603533 -1.36212 255 7.11833 0.64827 -1.36212 255 7.13429 -0.405934 -1.36171 255 7.13162 -0.383324 -1.36089 255 7.11059 0.625012 -1.36005 255 7.3496 0.883619 -1.35319 143 7.09727 -0.325728 -1.35303 89 7.08081 -0.447725 -1.35097 255 7.06912 -0.246695 -1.34642 81 7.0644 -0.268767 -1.34559 78 7.0611 -0.301979 -1.34518 77 7.04262 0.518546 -1.34393 55 7.04595 0.440946 -1.34352 69 7.04453 0.463082 -1.34352 66 7.04835 -0.223883 -1.34188 79 7.04206 -0.168356 -1.34022 64 7.3009 -0.630088 -1.33811 181 7.03232 -0.0134864 -1.33774 64 7.01495 0.494245 -1.33774 80 7.02554 -0.201154 -1.33692 78 7.0269 -0.145966 -1.33692 69 7.02827 -0.0466122 -1.33692 61 7.02221 -0.0686585 -1.33568 56 7.01863 0.00854121 -1.33485 64 7.00628 0.416221 -1.33484 64 7.01609 -0.090664 -1.33444 55 7.00805 0.305933 -1.33402 28 7.00543 0.360961 -1.33402 50 7.01167 -0.123673 -1.33361 61 7.00998 0.107614 -1.33319 63 7.00776 0.2067 -1.33319 60 7.00035 0.382745 -1.33319 57 7.00475 0.239648 -1.33278 30 7.00311 0.283657 -1.33278 28 7.00637 0.0855226 -1.33237 65 7.00374 0.129504 -1.33195 63 7.00006 0.261491 -1.33195 28 7.24717 0.848584 -1.33174 208 7.00292 0.0304636 -1.33154 63 6.9948 0.338342 -1.33154 27 6.99887 0.0524188 -1.33072 64 6.99327 0.162242 -1.32989 63 6.99273 0.184214 -1.32989 63 6.97097 0.557078 -1.32947 255 7.5951 -0.698629 -1.32914 173 6.98087 -0.342793 -1.32865 189 7.25106 -0.591187 -1.32739 225 7.23725 -0.567123 -1.32421 232 7.21278 0.82173 -1.3242 228 7.5276 0.970142 -1.32191 201 7.22531 -0.543305 -1.32143 235 7.20293 0.786293 -1.32142 234 7.19366 0.762464 -1.31903 236 7.21216 -0.508092 -1.31825 238 7.19416 -0.484045 -1.31428 239 7.16481 0.736763 -1.31268 238 7.16319 0.713877 -1.31188 239 7.12437 0.552285 -1.30116 239 7.12065 0.57452 -1.30077 239 7.1272 -0.456804 -1.30038 241 7.12273 -0.434032 -1.29919 241 7.10401 0.674411 -1.29918 240 7.13121 -0.198819 -1.29879 239 7.11321 0.517762 -1.29838 238 7.43683 -0.661067 -1.29799 142 7.11436 0.472937 -1.29799 239 7.11284 0.495285 -1.29799 238 7.12472 -0.142615 -1.2972 238 7.11394 0.416832 -1.29719 239 7.40353 0.91826 -1.29684 141 7.11296 -0.399759 -1.2968 241 7.12317 -0.120192 -1.2968 239 7.12005 -0.176079 -1.2964 239 7.1113 0.394275 -1.2964 239 7.10407 0.449882 -1.2956 239 7.11567 -0.0976751 -1.29521 239 7.10831 0.338153 -1.29521 239 7.08656 0.650371 -1.2952 240 7.08662 0.627936 -1.29481 240 7.09265 -0.37619 -1.29243 243 7.09343 -0.320377 -1.29203 242 7.07582 0.593439 -1.29203 240 7.08793 -0.353591 -1.29124 241 7.08853 -0.297824 -1.29084 241 7.0816 -0.275214 -1.28925 240 7.08086 -0.241768 -1.28886 241 7.08158 -0.219522 -1.28886 240 7.0616 0.369458 -1.28607 240 7.06037 0.313825 -1.28528 240 7.06143 0.236113 -1.28488 240 7.06313 -0.0634736 -1.28449 240 7.06341 0.014195 -1.28449 240 7.05822 0.213825 -1.28409 241 7.05674 0.258166 -1.28409 241 7.05544 0.291422 -1.28409 240 7.05938 -0.0412475 -1.28369 241 7.05772 0.158346 -1.28369 241 7.0569 0.191605 -1.28369 240 7.05751 -0.0190581 -1.28329 241 7.0573 0.058546 -1.28329 241 7.05708 0.0807158 -1.28329 241 7.0527 0.113923 -1.2825 241 7.05156 0.036367 -1.2821 241 7.31558 -0.627563 -1.27406 211 7.27777 0.879001 -1.27177 215 6.99743 0.135225 -1.27138 251 7.28909 -0.590807 -1.26836 231 7.24931 0.852354 -1.26569 230 7.26349 -0.565867 -1.26305 237 7.2344 0.827502 -1.26227 238 7.24956 -0.54193 -1.26001 238 7.57724 0.96741 -1.2595 64 7.21286 0.790532 -1.25734 240 7.58982 -0.731357 -1.25698 93 7.19442 -0.515289 -1.24899 241 7.15089 0.760777 -1.2448 243 7.16541 -0.479396 -1.24292 244 7.12006 0.734762 -1.23835 244 7.13944 -0.455233 -1.2376 245 7.45722 0.928712 -1.23671 125 7.12319 -0.431796 -1.23418 244 7.09023 0.697809 -1.23189 245 7.10554 -0.397199 -1.23038 244 7.10087 -0.374586 -1.22924 246 7.08079 0.651938 -1.22923 247 7.07871 0.674179 -1.22923 245 7.10005 -0.352185 -1.22886 246 7.07988 0.618202 -1.22847 247 7.43741 -0.692563 -1.2284 83 7.09574 -0.31848 -1.22772 246 7.07787 0.595614 -1.22771 246 7.07775 0.573211 -1.22733 247 7.09278 -0.296037 -1.22696 245 7.0756 0.550655 -1.22657 246 7.08779 -0.273547 -1.22582 245 7.0742 0.517004 -1.22582 246 7.0858 -0.217765 -1.22506 245 7.07188 0.49449 -1.22506 246 7.08077 -0.251029 -1.2243 246 7.06752 0.471854 -1.22392 244 7.07663 -0.195268 -1.22316 244 7.07721 -0.173035 -1.22316 244 7.06574 0.438284 -1.22316 245 7.07639 -0.11742 -1.22278 244 7.07402 -0.139619 -1.2224 244 7.06121 0.415718 -1.22202 244 7.07083 -0.0951304 -1.22164 243 7.06052 0.393417 -1.22164 243 7.06143 0.337847 -1.22126 244 7.0652 -0.0728769 -1.2205 243 7.06079 0.260028 -1.2205 243 7.05388 0.370794 -1.22012 243 7.06163 -0.0173893 -1.21974 242 7.06155 0.0380734 -1.21974 243 7.0593 0.182258 -1.21974 244 7.05958 -0.0395704 -1.21936 243 7.05569 0.237623 -1.21936 242 7.05265 0.315188 -1.21936 243 7.05772 0.00477875 -1.21898 242 7.05528 0.082355 -1.2186 242 7.04968 0.292853 -1.2186 242 7.05198 0.15987 -1.21822 243 7.05051 0.215255 -1.21822 243 7.04961 0.0601122 -1.21746 242 7.04892 0.115481 -1.21746 243 7.04853 0.137625 -1.21746 242 7.31163 0.887786 -1.20921 161 7.30739 -0.64527 -1.20379 147 7.25771 0.858315 -1.19872 189 7.66245 -0.729316 -1.19378 85 7.24865 -0.616922 -1.19258 202 7.61833 0.981707 -1.19102 97 7.19911 0.817224 -1.18714 215 7.20743 -0.590458 -1.18462 218 7.1723 0.791473 -1.18171 222 7.18268 -0.554269 -1.17955 222 7.1687 -0.530483 -1.17666 225 7.14541 0.7659 -1.17628 224 7.15268 -0.506644 -1.1734 227 7.13328 0.730674 -1.17339 226 7.14246 -0.483331 -1.17123 228 7.12183 0.706948 -1.17086 227 7.13289 -0.448883 -1.16906 228 7.10835 0.683123 -1.16796 228 7.11856 -0.425476 -1.16616 228 7.09973 0.648586 -1.16579 228 7.11382 -0.369117 -1.16472 228 7.11004 -0.402518 -1.16435 229 7.09389 0.625614 -1.16435 228 7.46504 0.937578 -1.1636 167 7.08798 0.602687 -1.1629 227 7.08003 0.579651 -1.16109 227 7.47432 -0.688371 -1.16053 126 7.09137 -0.345531 -1.16037 224 7.08653 -0.322961 -1.15929 225 7.08358 -0.300515 -1.15856 226 7.06832 0.50058 -1.15783 228 7.06671 0.522782 -1.15783 226 7.06307 0.544842 -1.15747 226 7.0759 -0.244495 -1.15676 227 7.07313 -0.266642 -1.15639 227 7.06275 0.466776 -1.15639 228 7.06877 -0.221988 -1.15531 228 7.06973 -0.188675 -1.15531 228 7.05829 0.444236 -1.1553 228 7.06046 -0.166196 -1.1535 229 7.06095 -0.144013 -1.1535 229 7.05173 0.388282 -1.15349 229 7.04983 0.421508 -1.15349 229 7.05958 -0.1107 -1.15314 229 7.04899 0.365936 -1.15277 229 7.05441 -0.044101 -1.15205 230 7.05203 -0.0883927 -1.15169 228 7.05227 -0.0662374 -1.15169 229 7.04525 0.321392 -1.15168 230 7.04421 0.343524 -1.15168 229 7.05061 -0.0108365 -1.15133 229 7.04472 0.288115 -1.15132 230 7.0466 0.0334602 -1.1506 229 7.04636 0.0666665 -1.1506 229 7.04472 0.166273 -1.1506 230 7.04416 0.188405 -1.1506 230 7.04166 0.265847 -1.1506 230 7.0447 0.0113263 -1.15024 230 7.04157 0.210482 -1.15024 230 7.04219 0.0887681 -1.14988 227 7.04187 0.110892 -1.14988 229 7.04127 0.144075 -1.14988 228 7.03657 0.243541 -1.14951 231 7.34674 0.89886 -1.14235 203 7.36061 -0.65499 -1.14031 211 7.31844 -0.616651 -1.13243 235 7.28047 0.855699 -1.13002 231 7.3007 -0.592133 -1.129 247 7.26356 0.830514 -1.12659 245 7.22 -0.563056 -1.11461 251 7.19174 0.799154 -1.11357 249 7.20881 -0.528068 -1.11221 255 7.18172 0.763747 -1.11117 250 7.20257 -0.504895 -1.11084 255 7.20348 -0.266676 -1.10878 232 7.20429 -0.244044 -1.10878 233 7.20745 0.118244 -1.10878 245 7.19821 -0.300469 -1.10809 229 7.18445 -0.481019 -1.10741 254 7.19914 -0.142046 -1.10741 233 7.19758 -0.119403 -1.10706 233 7.16057 0.738669 -1.10706 255 7.19471 -0.164587 -1.10672 232 7.18061 0.479402 -1.10672 232 7.17827 0.513235 -1.10672 232 7.18074 -0.446812 -1.10638 254 7.19123 -0.221036 -1.10638 230 7.19219 -0.187145 -1.10638 233 7.18745 0.321292 -1.10637 236 7.19265 -0.00634845 -1.10603 233 7.18192 0.35495 -1.10569 233 7.18077 0.377511 -1.10569 235 7.17618 0.456445 -1.10569 231 7.16902 0.557848 -1.10569 246 7.18844 -0.0628193 -1.10535 231 7.18602 0.196875 -1.10535 233 7.18342 0.275877 -1.10535 235 7.17562 0.433771 -1.10535 232 7.15306 0.715154 -1.10534 255 7.18673 0.0162136 -1.10501 233 7.18648 0.0613692 -1.10501 232 7.18463 0.174243 -1.10501 233 7.17754 -0.322269 -1.10467 229 7.18414 0.0952011 -1.10466 234 7.1834 0.140339 -1.10466 234 7.18143 0.219315 -1.10466 233 7.18031 0.253155 -1.10466 233 7.17365 0.399719 -1.10466 232 7.1827 0.038756 -1.10432 231 7.17661 0.298177 -1.10432 232 7.18033 -0.0853372 -1.10398 230 7.18072 -0.0402198 -1.10398 230 7.16091 0.534554 -1.10397 228 7.13566 0.690709 -1.10192 255 7.1526 -0.422614 -1.10124 255 7.12903 0.656136 -1.1002 255 7.14011 -0.399421 -1.09884 255 7.13713 -0.343068 -1.09781 253 7.11143 0.631921 -1.09678 255 7.12362 -0.376117 -1.09576 255 7.09065 0.573888 -1.09232 255 7.08787 0.607296 -1.09232 255 7.63179 -0.728336 -1.09175 85 7.50495 0.941616 -1.07518 124 7.64289 0.973102 -1.06539 88 7.45428 -0.675341 -1.06246 104 7.62977 -0.713876 -1.05889 102 7.3667 0.901265 -1.05226 130 7.34035 -0.641371 -1.04368 125 7.27927 0.867688 -1.03762 193 7.30102 -0.614683 -1.037 187 7.25776 0.830547 -1.03348 201 7.44404 0.923333 -1.03344 118 7.27734 -0.58958 -1.03286 211 7.23874 0.805418 -1.02998 221 7.25445 -0.553235 -1.02872 225 7.42634 -0.660262 -1.02632 102 7.21571 0.780007 -1.02584 230 7.23252 -0.528628 -1.0249 231 7.22037 -0.504891 -1.02267 233 7.19848 0.755342 -1.02266 231 7.76943 0.985182 -1.0218 86 7.21495 -0.402068 -1.02076 201 7.19016 0.720271 -1.02075 235 7.2069 -0.469775 -1.02012 236 7.7795 -0.73169 -1.01917 80 7.20297 -0.367306 -1.01853 242 7.18382 0.59453 -1.01789 245 7.1747 0.696028 -1.01789 237 7.19258 -0.446098 -1.01758 237 7.1962 -0.34427 -1.01726 240 7.17798 0.616771 -1.01725 224 7.1933 -0.321471 -1.01662 243 7.18607 -0.423008 -1.0163 237 7.1767 0.55994 -1.0163 240 7.18685 -0.287225 -1.01535 240 7.18771 -0.264646 -1.01535 243 7.17416 0.514433 -1.01534 241 7.17251 0.536968 -1.01534 240 7.16112 0.672067 -1.01534 234 7.18456 -0.241915 -1.01471 241 7.16027 0.637975 -1.0147 233 7.18365 -0.207993 -1.01439 242 7.18229 -0.185363 -1.01407 241 7.17585 0.356187 -1.01407 251 7.34764 -0.630291 -1.01361 194 7.32141 0.884337 -1.0136 176 7.17075 0.378538 -1.01343 239 7.16756 0.434842 -1.01343 239 7.17692 -0.162644 -1.01312 237 7.17739 -0.140097 -1.01312 240 7.16419 0.457237 -1.01311 241 7.16195 0.490998 -1.01311 238 7.16495 0.412111 -1.0128 240 7.29838 -0.60315 -1.00555 224 7.25747 0.853252 -1.00305 221 7.26567 -0.566116 -0.999963 228 7.23982 0.816524 -0.999641 227 7.24968 -0.542026 -0.997172 231 7.07729 -0.10442 -0.996884 255 7.22468 0.791776 -0.99685 230 7.24543 -0.518847 -0.996241 233 7.05463 0.328401 -0.994333 255 7.23322 -0.495185 -0.99407 234 7.20749 0.766915 -0.993749 233 7.05462 0.228523 -0.993698 255 7.20513 0.732323 -0.992819 235 7.22561 -0.460499 -0.99252 237 7.04515 0.272569 -0.992424 255 7.04379 0.305764 -0.992424 255 7.0361 0.250118 -0.990833 255 7.2184 -0.380442 -0.990658 241 7.18774 0.707675 -0.989718 237 7.03053 0.172571 -0.98956 255 7.02995 0.194663 -0.98956 255 7.2073 -0.436674 -0.989418 238 7.21166 -0.357401 -0.989418 241 7.21227 -0.300671 -0.989107 243 7.0287 -0.00414277 -0.988925 255 7.02608 0.0952027 -0.988606 255 7.02575 0.117274 -0.988606 255 7.55055 0.934079 -0.988545 158 7.02437 0.0731137 -0.988288 255 7.02314 0.150344 -0.988287 255 7.20486 -0.334406 -0.988177 242 7.18905 0.582546 -0.988169 241 7.02253 -0.0592742 -0.98797 255 7.02275 0.0179444 -0.98797 255 7.18521 0.604954 -0.987858 242 7.02062 0.0510325 -0.987651 255 7.20331 -0.277668 -0.987556 243 7.18131 0.627348 -0.987548 234 7.01836 -0.0812744 -0.987334 255 7.01878 -0.026153 -0.987334 255 7.20217 -0.254975 -0.987246 244 7.17631 0.660992 -0.987238 238 7.20096 -0.232292 -0.986936 244 7.18384 0.548034 -0.986929 243 7.17223 0.683341 -0.986927 238 7.2 -0.198306 -0.986625 244 7.18746 0.468874 -0.986619 244 7.18891 -0.412965 -0.986317 232 7.19861 -0.175643 -0.986315 244 7.19913 -0.153028 -0.986315 244 7.17961 0.525004 -0.985998 244 7.18564 0.400762 -0.98569 244 7.18434 0.423333 -0.985689 244 7.17926 0.502302 -0.985689 244 7.17312 0.445256 -0.984139 244 7.5277 -0.683304 -0.981201 158 7.12865 -0.11818 -0.97515 246 7.12037 0.363227 -0.975146 245 7.40608 0.893105 -0.966471 172 7.38306 -0.634598 -0.959126 102 6.99717 0.334453 -0.955608 255 6.99987 0.136409 -0.954989 255 6.99859 -0.0945088 -0.954681 255 6.99922 0.00443958 -0.95468 255 6.99918 0.0264272 -0.95468 255 6.99897 0.0594113 -0.95468 255 6.9945 0.257257 -0.954678 255 6.99707 -0.0505289 -0.95437 255 6.99723 -0.0175505 -0.95437 255 6.99649 0.103351 -0.954369 255 6.99493 0.180273 -0.954369 255 6.9933 0.235202 -0.954368 255 6.99029 0.312085 -0.954367 255 6.9949 -0.0724965 -0.954061 255 6.9948 0.0813372 -0.954059 255 6.99348 0.158246 -0.954059 255 6.99235 0.202182 -0.954058 255 6.98971 0.279056 -0.954058 255 7.78964 0.985967 -0.944551 94 7.2845 -0.602724 -0.944115 56 7.28242 -0.579508 -0.943526 58 7.25948 0.818175 -0.943514 65 7.27126 -0.544101 -0.941465 82 7.24824 0.793904 -0.941454 76 7.25913 -0.520216 -0.939405 84 7.22632 0.757152 -0.937628 96 7.23677 -0.438592 -0.935284 92 7.21291 0.732904 -0.935273 113 7.23113 -0.495274 -0.93499 63 7.23219 -0.415493 -0.934401 162 7.22278 -0.471874 -0.933518 58 7.20674 0.652349 -0.933214 144 7.22161 -0.392084 -0.932634 228 7.19745 0.708554 -0.932625 126 7.19889 0.628881 -0.931742 142 7.1948 0.674098 -0.931742 163 7.19295 0.605624 -0.930565 225 7.1925 -0.0510378 -0.926745 255 7.18279 0.00548535 -0.925273 255 7.18199 0.107024 -0.925272 255 7.18076 0.028049 -0.924979 255 7.17964 0.129557 -0.924978 255 7.17667 0.0505966 -0.92439 255 7.13646 -0.353427 -0.919684 252 7.11975 -0.330116 -0.917034 255 7.10301 0.564693 -0.916732 253 7.11087 -0.307283 -0.915562 255 7.09686 0.541799 -0.915555 255 7.10982 -0.284856 -0.915268 255 7.11184 -0.229006 -0.915267 255 7.10911 -0.251271 -0.914973 255 7.11055 -0.206598 -0.914973 255 7.09646 0.463369 -0.914673 255 7.0926 0.519091 -0.914672 255 7.10749 -0.172977 -0.914384 255 7.108 -0.150649 -0.914384 255 7.09791 0.40751 -0.914379 255 7.09591 0.440959 -0.914379 255 7.093 0.485532 -0.914378 255 7.09637 0.362719 -0.913791 255 7.1025 -0.128183 -0.913501 255 7.58471 -0.66788 -0.911644 173 7.54113 0.929606 -0.909435 166 7.05993 0.338761 -0.908199 255 7.03593 0.382012 -0.90496 255 7.00637 -0.0710569 -0.899078 255 7.00215 -0.0929994 -0.898489 255 7.00228 0.0829964 -0.898488 255 7.00094 0.159987 -0.898487 255 6.99913 0.225958 -0.898487 255 7.00074 -0.0269874 -0.898194 255 6.99645 0.181891 -0.897898 255 6.99226 0.302749 -0.897897 255 6.99205 0.258742 -0.897603 255 6.9912 0.280709 -0.897603 255 6.98002 0.203467 -0.895544 255 7.32503 -0.587986 -0.87488 179 7.31756 -0.529621 -0.873234 210 7.31524 -0.50637 -0.872685 200 7.30116 -0.563081 -0.871313 216 7.27913 0.780486 -0.871027 163 7.26688 0.836935 -0.870203 193 7.27367 0.756768 -0.86993 232 7.25766 0.812738 -0.868558 218 7.25828 0.732062 -0.867461 249 7.26934 -0.480419 -0.8661 134 7.22901 0.706062 -0.863072 168 7.91981 0.942756 -0.860283 60 7.22937 -0.420934 -0.860064 245 7.21021 -0.442616 -0.857595 107 7.21087 -0.397202 -0.85732 214 7.21208 -0.374546 -0.85732 223 7.19291 0.645397 -0.857311 214 7.20189 -0.340038 -0.855674 227 7.17604 0.587025 -0.854294 226 7.19105 -0.31693 -0.854028 228 7.17122 0.620659 -0.854019 224 7.17564 0.541615 -0.853746 199 7.18211 -0.293967 -0.852656 156 7.18526 0.202735 -0.852652 242 7.16008 0.563017 -0.851825 228 7.17351 -0.259796 -0.851284 210 7.17232 -0.2372 -0.851009 215 7.152 0.483267 -0.849905 183 7.14372 0.51652 -0.849082 193 7.13042 0.178572 -0.84497 213 7.12543 -0.135025 -0.84415 252 7.12627 -0.0790576 -0.844149 252 7.1247 0.0216802 -0.843874 251 7.11461 0.379634 -0.843871 252 7.11539 0.323647 -0.843597 252 7.11988 -0.112566 -0.843326 252 7.12054 -0.0566435 -0.843326 252 7.12068 -0.0342732 -0.843326 252 7.12077 -0.000717052 -0.843326 251 7.11439 0.301198 -0.843323 252 7.11652 -0.179622 -0.843053 253 7.11705 -0.157264 -0.843052 253 7.11219 0.256336 -0.842775 252 7.11163 -0.213052 -0.842504 254 7.10937 0.278593 -0.8425 253 7.10349 0.40139 -0.842499 253 7.10936 0.222681 -0.842226 252 7.1039 0.356642 -0.842225 253 7.10874 0.0439074 -0.841679 254 7.10659 0.0662145 -0.841404 255 7.1062 0.099703 -0.841404 255 7.09361 0.434345 -0.841401 253 7.10345 0.144303 -0.841129 255 7.0745 0.656759 -0.841124 255 7.10189 0.121945 -0.840855 255 7.08826 0.456358 -0.840852 253 7.51699 0.872202 -0.805169 58 7.46275 -0.616117 -0.79448 96 10.1218 1.08097 -0.793691 40 8.12783 -0.716701 -0.791851 58 7.78401 0.913255 -0.791451 68 7.4133 0.836947 -0.790722 78 10.0618 1.04276 -0.787389 40 8.06336 0.954618 -0.786935 188 7.38562 0.798703 -0.786442 198 10.0016 1.10023 -0.782069 61 7.37182 -0.584974 -0.781906 188 10.0135 -0.807827 -0.780511 40 7.36176 -0.560866 -0.7803 240 7.34274 0.770897 -0.780288 240 9.96497 1.17555 -0.779311 78 7.34965 -0.536676 -0.778427 242 7.33132 0.746466 -0.778416 238 9.95873 1.14313 -0.778327 64 7.34024 -0.501184 -0.776822 243 7.32094 0.71062 -0.776543 241 7.68897 -0.649918 -0.775913 58 7.31524 0.686905 -0.775474 243 7.32398 -0.476899 -0.774414 246 7.29762 0.662193 -0.772798 246 7.3116 -0.45298 -0.772541 248 7.31098 -0.395313 -0.772005 241 7.28075 0.499634 -0.768787 232 7.26815 -0.415754 -0.766387 229 7.92441 -0.673021 -0.766365 84 7.2493 0.623565 -0.765843 225 7.2627 -0.369647 -0.765316 198 7.2453 0.60032 -0.76504 205 7.25987 -0.346625 -0.764781 149 7.25477 0.440739 -0.764774 248 7.23924 0.576954 -0.76397 213 7.25334 -0.266379 -0.763443 251 7.23509 0.553774 -0.763168 221 7.24756 -0.311764 -0.762908 209 7.23168 0.51927 -0.762366 205 7.24059 -0.288649 -0.761838 190 7.23739 0.359936 -0.761832 249 7.24065 -0.231702 -0.76157 251 7.24396 0.0755027 -0.761567 234 7.23236 0.416664 -0.761564 250 7.23936 -0.208891 -0.761302 250 7.23998 -0.186141 -0.761302 250 7.24122 -0.129276 -0.761302 251 7.23166 0.393841 -0.761297 249 7.2388 -0.151975 -0.761034 251 7.22491 0.473209 -0.761029 209 7.23531 0.211878 -0.760764 249 7.23383 0.257335 -0.760763 248 7.23159 0.314142 -0.760763 250 7.23594 -0.0836848 -0.760498 251 7.23263 0.234552 -0.760496 249 7.22859 0.336773 -0.760495 250 7.23366 -0.106383 -0.760231 251 7.23428 -0.0495629 -0.760231 251 7.2344 -0.0268367 -0.76023 248 7.23445 -0.00410673 -0.76023 248 7.23438 0.029983 -0.76023 250 7.23226 0.177695 -0.760229 248 7.22858 0.291277 -0.760228 250 7.2308 0.154939 -0.759961 243 7.22038 0.052658 -0.758357 255 7.20389 0.109185 -0.756216 101 7.19955 0.131757 -0.755681 217 7.4401 0.848054 -0.74658 124 7.43586 -0.605867 -0.743023 91 7.34079 -0.575252 -0.73053 144 7.31462 0.810032 -0.730008 170 7.32331 -0.516123 -0.727725 248 10.0172 1.04884 -0.727139 40 10.0243 -0.798274 -0.725668 40 7.30187 -0.537741 -0.725176 228 7.28559 0.725685 -0.725165 251 7.27967 0.782883 -0.725164 198 7.30312 -0.491725 -0.724921 253 7.27994 0.702004 -0.724145 252 7.29744 -0.456837 -0.723901 255 7.29488 -0.433687 -0.723391 255 7.95583 -0.644642 -0.722729 68 7.26934 0.666372 -0.722361 255 7.28432 -0.410141 -0.721861 255 7.26152 0.642623 -0.721087 255 7.24974 0.745005 -0.72083 242 7.27344 -0.352295 -0.720076 255 9.92797 1.14978 -0.719886 76 7.25363 0.618929 -0.719812 255 7.26834 -0.374953 -0.719566 255 7.54968 -0.604134 -0.719559 78 9.92035 1.18049 -0.719513 130 7.26064 -0.328864 -0.718291 255 7.2446 0.583737 -0.718283 255 9.94536 -0.760762 -0.718044 40 7.24974 -0.305594 -0.716761 255 9.8979 1.11471 -0.716725 62 7.5022 0.83033 -0.716361 115 7.23058 0.559694 -0.716243 255 7.24399 -0.248401 -0.715741 255 7.22802 0.513811 -0.715479 255 7.23921 -0.271024 -0.715231 255 7.2368 -0.225424 -0.714721 255 7.22044 0.536053 -0.714714 255 7.21798 0.456101 -0.713695 255 7.2086 0.47822 -0.712675 255 7.21795 -0.190865 -0.712171 255 7.83941 0.896727 -0.71198 84 7.20354 0.432413 -0.711655 255 7.20077 0.375492 -0.710891 255 7.20662 -0.167954 -0.710641 255 7.20711 -0.145313 -0.710641 255 7.19164 0.397644 -0.709871 255 9.32599 0.320638 -0.709789 40 7.19811 -0.0886173 -0.709366 255 7.1911 0.329655 -0.709362 255 7.19563 -0.12251 -0.709111 255 7.19654 -0.0433835 -0.70911 255 7.19666 0.0131374 -0.70911 255 7.19633 0.069663 -0.709109 255 7.19149 0.27308 -0.709107 255 7.18805 0.352139 -0.709107 255 7.19438 -0.0659811 -0.708855 255 7.1946 0.0357351 -0.708855 255 7.1941 0.0922368 -0.708854 255 7.18861 0.295582 -0.708852 255 7.1927 -0.009479 -0.7086 255 7.19009 0.19387 -0.708598 255 7.18835 0.250335 -0.708598 255 7.1898 0.114759 -0.708344 255 7.18941 0.137348 -0.708344 255 7.18746 0.216392 -0.708343 255 7.1867 0.171173 -0.708089 255 7.42975 0.798954 -0.707049 122 7.41107 -0.56913 -0.70216 116 7.3772 -0.543096 -0.697749 94 7.34731 0.767043 -0.696512 104 9.18597 0.38846 -0.696197 40 9.16979 0.344544 -0.694425 40 7.32542 -0.515963 -0.691132 112 7.68644 -0.599404 -0.690756 92 7.29552 0.727094 -0.689651 122 7.29499 -0.433141 -0.686721 240 7.27831 0.656253 -0.686711 235 7.27405 0.701968 -0.686711 146 7.29015 -0.478831 -0.686476 192 7.2811 -0.397836 -0.68476 243 7.2604 0.677694 -0.68475 213 7.26785 -0.454355 -0.683535 232 7.25561 0.619837 -0.683526 241 7.25554 0.596886 -0.683281 241 7.25853 -0.37365 -0.681819 244 7.58367 0.842484 -0.681408 77 7.23956 0.572745 -0.681076 243 7.23984 -0.349815 -0.679368 246 7.22555 -0.314946 -0.677408 248 7.2105 0.536382 -0.677155 247 7.22254 -0.29207 -0.676918 248 7.22144 -0.269297 -0.676672 247 7.20977 0.49081 -0.676666 246 7.22026 -0.246533 -0.676427 248 7.20621 0.513323 -0.67642 248 7.20804 0.456591 -0.676176 246 7.21738 -0.212375 -0.675937 250 7.2068 0.41108 -0.675686 245 7.20548 0.433718 -0.675686 246 7.20608 0.388339 -0.675442 247 7.21206 -0.189521 -0.675201 248 7.21262 -0.166863 -0.675201 248 7.21332 -0.132872 -0.675201 248 7.21371 -0.11021 -0.675201 248 7.20584 0.354288 -0.675197 244 7.20335 0.274826 -0.674462 246 7.20097 0.33139 -0.674462 247 7.20608 -0.0874216 -0.674221 249 7.20641 -0.0534626 -0.67422 248 7.20295 0.229504 -0.674218 246 7.2022 0.252132 -0.674218 246 7.54849 -0.553348 -0.674186 95 7.20456 -0.0308068 -0.673975 249 7.20461 0.0144616 -0.673975 248 7.19801 0.308612 -0.673972 247 7.20247 0.0484064 -0.673729 247 7.20056 0.172844 -0.673728 249 7.19999 0.195465 -0.673728 245 7.20065 -0.00815385 -0.673485 247 7.19909 0.150188 -0.673483 247 7.19832 0.0710088 -0.673239 246 7.19754 0.127542 -0.673238 246 7.19409 0.0935856 -0.672749 244 7.47699 0.794601 -0.66834 140 7.44317 -0.522493 -0.661584 112 7.41624 0.764368 -0.660872 118 7.40909 -0.496839 -0.657383 138 7.37711 0.736776 -0.655972 107 7.38897 -0.437308 -0.654582 92 7.38484 -0.472004 -0.654349 109 7.35894 0.676544 -0.653172 100 7.37245 -0.413156 -0.652482 101 7.3551 0.652875 -0.652472 94 7.37456 -0.331985 -0.652248 107 7.3469 0.698687 -0.652005 88 7.36555 -0.354797 -0.651315 97 7.35189 -0.388915 -0.649914 103 7.35374 -0.307978 -0.649681 107 7.33337 0.62765 -0.649672 116 7.81602 -0.59489 -0.649046 72 7.32437 0.592085 -0.648272 102 7.31828 0.568423 -0.647339 101 7.31855 0.510639 -0.646873 101 7.33012 -0.249426 -0.646646 117 7.31211 0.544812 -0.646406 96 7.77199 0.816622 -0.646406 81 7.32092 -0.283686 -0.645713 115 7.30775 0.463715 -0.64524 102 7.30427 0.486532 -0.645006 101 7.31566 -0.20298 -0.644779 109 7.30167 0.359731 -0.643841 110 7.30505 -0.22569 -0.643612 110 7.29852 0.382557 -0.643607 110 7.29399 0.428285 -0.643373 102 7.30312 -0.145289 -0.643145 108 7.28935 0.405016 -0.642673 106 7.29667 -0.168116 -0.642445 114 7.29361 -0.122214 -0.641978 108 7.28856 -0.0419969 -0.641277 110 7.28333 0.221232 -0.641041 100 7.28441 -0.0648734 -0.640811 105 7.28374 0.118207 -0.640809 103 7.28061 0.244039 -0.640808 100 7.27938 0.278345 -0.640808 104 7.27649 0.301124 -0.640574 106 7.27551 0.323982 -0.640574 113 7.2802 -0.0877243 -0.640344 106 7.27872 -0.0191083 -0.64011 114 7.27605 0.198105 -0.640108 100 7.27467 0.0380244 -0.639643 108 7.27216 0.0951253 -0.639409 103 7.26944 0.14077 -0.639175 112 7.2688 0.0151361 -0.638943 114 7.2626 0.0607362 -0.638242 102 7.25678 0.174696 -0.637775 101 7.71895 -0.501858 -0.637657 40 7.68108 -0.559897 -0.633934 77 7.62811 0.777776 -0.630199 69 7.63717 -0.472168 -0.628458 40 7.61586 0.740338 -0.628448 110 8.0408 0.649639 -0.62811 69 8.0397 0.586013 -0.627487 66 7.62414 -0.519436 -0.627364 96 8.03584 0.611109 -0.627279 114 7.60429 0.71515 -0.626915 136 7.62379 -0.351167 -0.626267 40 8.02762 0.559737 -0.626034 77 7.60757 -0.434255 -0.624954 40 7.60816 -0.386341 -0.624735 40 7.61754 0.080185 -0.624731 40 7.60769 0.187693 -0.623854 40 8.00635 0.520278 -0.623542 75 7.60316 0.115914 -0.623198 40 7.5939 0.0561562 -0.622103 71 7.98961 0.468728 -0.621466 71 7.98016 0.493316 -0.620635 121 7.57025 -0.00339536 -0.619475 54 7.56223 0.0322738 -0.618599 54 7.54538 -0.406711 -0.617945 40 7.54909 0.222043 -0.617502 40 7.54862 0.162713 -0.617284 56 7.53518 0.13879 -0.615751 52 7.93612 0.427894 -0.615651 52 7.78903 0.653121 -0.601942 93 7.76273 0.786157 -0.600486 77 7.79194 -0.364373 -0.600289 40 7.76219 -0.534325 -0.598214 106 7.73285 -0.495811 -0.594891 193 7.72589 -0.276417 -0.59302 40 7.72672 -0.252142 -0.59302 40 7.71253 -0.470258 -0.592606 166 7.69565 0.693712 -0.592596 66 7.68798 0.753928 -0.592387 186 7.71106 -0.300191 -0.591566 40 7.68042 0.7288 -0.591349 195 7.70913 -0.16681 -0.590942 40 7.69963 -0.336127 -0.590528 40 7.70197 -0.215095 -0.59032 40 7.6943 0.365587 -0.590107 40 7.68272 -0.190473 -0.588243 40 7.66928 0.388468 -0.587615 40 7.67602 -0.130016 -0.587412 40 7.67241 -0.10586 -0.586996 40 7.65042 -0.406407 -0.585752 60 7.659 -0.0575961 -0.585542 40 7.64679 0.0866023 -0.584294 40 7.64526 -0.0215098 -0.584088 40 7.63179 -0.381446 -0.583675 65 7.63933 0.00248875 -0.583465 40 7.6369 -0.0814971 -0.583257 40 7.63455 0.11041 -0.583048 40 7.62061 -0.440938 -0.582845 71 7.63133 0.0264325 -0.582634 40 7.6263 0.278107 -0.582631 40 7.62351 0.170117 -0.582009 40 7.62117 0.253929 -0.582009 40 7.61593 0.337616 -0.5818 40 7.61545 0.301639 -0.581593 40 7.61918 0.0622574 -0.581387 40 7.61627 0.134017 -0.581179 40 7.61498 0.193835 -0.581178 40 7.6024 0.217374 -0.579932 40 7.93742 0.451673 -0.573088 88 7.91113 0.787805 -0.573084 40 7.93199 0.47638 -0.572694 86 7.92829 -0.471448 -0.572308 40 7.86092 0.497128 -0.565799 82 7.84023 0.644427 -0.564813 47 7.84339 0.42192 -0.563633 47 7.82274 0.53186 -0.562253 82 7.81924 0.580998 -0.562253 45 8.26167 0.834204 -0.562025 40 7.81994 -0.513986 -0.561868 97 7.81705 0.556163 -0.561859 46 7.80252 0.616789 -0.560874 43 7.7907 0.751509 -0.560872 152 7.80852 -0.316347 -0.5597 40 7.80953 -0.230404 -0.559503 40 7.80041 -0.266905 -0.558715 40 7.80027 -0.205573 -0.558518 40 7.77148 0.700478 -0.558509 98 7.79157 -0.291086 -0.557927 40 7.78971 -0.144043 -0.557335 40 7.77385 -0.486275 -0.557141 188 7.78695 -0.180697 -0.557139 40 7.77567 -0.339382 -0.556549 40 7.74941 0.723109 -0.556539 154 7.73968 -0.423014 -0.553398 40 7.74833 -0.118792 -0.553199 40 7.73872 -0.0942881 -0.552214 40 7.73922 -0.0335092 -0.552213 40 7.73111 -0.057735 -0.551425 40 7.71938 -0.00910634 -0.550243 40 7.71937 0.0151473 -0.550243 40 7.71221 0.136312 -0.549651 40 7.70123 -0.396516 -0.549458 40 7.70528 0.0514794 -0.548864 40 7.70508 0.0756848 -0.548864 40 7.70229 0.220904 -0.548862 40 7.70282 0.099874 -0.548666 40 7.70126 0.184559 -0.548666 40 7.68256 -0.371292 -0.547488 42 7.68986 0.160157 -0.547484 40 8.06636 0.0760859 -0.539905 40 7.89281 0.446344 -0.52484 94 7.89146 -0.434767 -0.524662 68 7.87601 -0.235678 -0.522429 40 7.8533 0.642359 -0.522421 47 7.85798 -0.494954 -0.521873 148 7.85727 0.50617 -0.521865 84 7.85683 0.481356 -0.521679 87 7.861 -0.321815 -0.521314 40 7.85532 -0.259828 -0.52057 40 7.81966 0.75095 -0.520188 169 7.83138 0.590968 -0.520004 71 7.84651 -0.284243 -0.519826 40 7.81757 0.614595 -0.518888 94 7.82187 0.528457 -0.518703 75 7.8044 0.699961 -0.51833 159 7.8145 -0.455405 -0.517596 219 7.79423 0.723711 -0.517586 192 7.82386 -0.172805 -0.517408 40 7.80627 0.551997 -0.517402 123 7.8197 -0.037589 -0.516849 40 7.81978 -0.0130222 -0.516849 40 7.80902 -0.209345 -0.516107 40 7.79802 0.391528 -0.51573 40 7.80162 -0.0620725 -0.515176 40 7.7989 -0.123319 -0.514991 40 7.78852 -0.147665 -0.514061 40 7.78148 -0.0864273 -0.513317 40 7.76795 0.353225 -0.512755 40 7.75952 -0.40349 -0.512204 53 7.74018 0.30314 -0.509966 40 7.73521 0.327272 -0.509594 40 7.73938 0.108425 -0.509411 40 7.7311 0.217636 -0.508852 40 7.7256 0.266058 -0.508479 40 7.71757 -0.364998 -0.508113 68 7.72179 0.193066 -0.507922 40 7.71271 -0.340507 -0.507555 60 7.71864 0.156584 -0.507551 40 7.71645 0.241439 -0.50755 40 7.70316 0.132001 -0.506063 40 7.70227 0.0230791 -0.505878 44 8.02079 0.763649 -0.488006 60 8.01124 0.737392 -0.486967 179 8.00251 -0.485319 -0.484551 168 7.9822 -0.421115 -0.482471 40 7.97019 -0.458122 -0.481604 66 7.97833 -0.28275 -0.481603 40 7.95018 0.581123 -0.480555 45 7.96637 -0.219649 -0.48039 40 7.93719 0.693126 -0.480207 119 7.95767 -0.244405 -0.479696 40 7.93639 0.605229 -0.479515 40 7.94367 0.467899 -0.479343 64 7.93975 0.530278 -0.479343 68 7.93818 0.492625 -0.478996 119 7.93009 0.554687 -0.478649 93 7.93316 0.442316 -0.478304 53 7.94079 -0.106543 -0.477962 40 7.92963 -0.305814 -0.477444 40 7.92447 -0.131173 -0.476576 40 7.90982 -0.168173 -0.475363 40 7.90527 -0.192911 -0.475016 40 7.90225 0.291438 -0.475012 40 7.90362 -0.0190083 -0.474668 40 7.90153 -0.0438207 -0.474495 40 7.89725 -0.0810016 -0.474149 40 7.89755 0.0430542 -0.474148 40 7.89169 0.00585239 -0.473628 40 7.88066 0.37751 -0.473451 40 7.88307 0.204036 -0.473106 40 7.87325 -0.365412 -0.472764 87 7.87724 0.265822 -0.472759 40 7.87944 0.0677699 -0.472588 40 7.87886 0.117277 -0.472587 40 7.8621 0.240639 -0.471373 40 7.85949 0.314726 -0.471372 40 7.86176 0.178844 -0.4712 40 7.85393 0.351595 -0.471025 40 7.85926 0.0923555 -0.470854 40 7.8583 0.154079 -0.470854 40 7.84702 -0.327052 -0.470337 60 7.8257 0.3997 -0.468771 40 8.14383 -0.431547 -0.4536 40 8.12324 -0.404938 -0.451809 40 8.11258 -0.455549 -0.451158 115 8.07545 0.741422 -0.449844 89 8.07377 0.715685 -0.449519 81 8.08958 -0.250648 -0.448551 40 8.06523 0.651085 -0.44838 40 8.06395 0.561785 -0.44773 40 8.0724 -0.224791 -0.447086 40 8.05134 0.624459 -0.447078 40 8.05712 -0.199087 -0.445783 40 8.03233 0.584848 -0.445288 40 8.04559 -0.0218733 -0.444642 40 8.03184 0.470746 -0.444638 40 8.0293 0.445277 -0.444312 40 8.02193 0.533397 -0.444149 40 8.03751 -0.0471285 -0.443991 40 8.03564 0.015989 -0.443828 40 8.03091 -0.110191 -0.443503 40 8.02608 -0.160582 -0.443178 40 8.01163 0.507398 -0.443172 40 8.02455 -0.135339 -0.443015 40 8.01902 -0.273906 -0.442853 40 8.02337 -0.0722986 -0.442852 40 8.01588 0.305655 -0.442686 40 8.01562 0.041067 -0.4422 40 8.01424 0.154378 -0.442199 40 7.99726 0.0911671 -0.440734 40 7.99674 0.128853 -0.440734 40 7.99484 0.216773 -0.440733 40 7.98776 -0.310627 -0.440411 40 7.98954 0.0659506 -0.440083 40 7.98781 0.178891 -0.440082 40 7.97081 -0.335102 -0.439109 52 7.96424 0.240887 -0.43829 40 8.28062 -0.448057 -0.398269 71 8.25201 -0.381433 -0.39592 73 8.21077 0.679963 -0.394296 43 8.22024 -0.418701 -0.393719 80 8.20841 -0.327601 -0.392544 43 8.17707 0.651424 -0.391655 83 8.1914 -0.352649 -0.391371 118 8.15712 0.598357 -0.389895 97 8.15162 0.533653 -0.389161 97 8.14526 0.623254 -0.38916 77 8.15769 -0.235602 -0.388581 111 8.15839 -0.209974 -0.388581 118 8.13932 0.507219 -0.388134 107 8.14583 -0.145594 -0.387553 116 8.13309 0.442763 -0.387401 114 8.13166 0.468318 -0.387401 112 8.14294 -0.0559792 -0.387259 124 8.14307 0.0335619 -0.387258 125 8.14221 0.123091 -0.387258 111 8.13753 0.30211 -0.387256 117 8.12403 0.557569 -0.387253 150 8.13735 -0.170989 -0.386966 112 8.13149 0.353074 -0.386962 119 8.12846 0.416924 -0.386961 110 8.13428 -0.119789 -0.386672 116 8.1351 -0.0303394 -0.386672 105 8.13472 0.0846651 -0.386671 112 8.13295 0.059102 -0.386524 116 8.1284 0.212339 -0.386376 110 8.12877 -0.081375 -0.386232 112 8.12259 0.327155 -0.386228 117 8.12582 0.148436 -0.386083 106 8.12532 0.173962 -0.386083 106 8.12292 0.263291 -0.386082 113 8.11838 0.378098 -0.386081 106 8.12319 0.00802108 -0.385791 107 8.11971 0.237669 -0.385789 108 8.0823 -0.284022 -0.383152 51 8.51531 -0.427208 -0.367739 58 8.44285 -0.397213 -0.362723 98 8.41611 0.663283 -0.362035 90 8.42967 -0.277287 -0.361502 164 8.40494 0.702244 -0.361493 149 8.42412 -0.369871 -0.361367 100 8.38788 -0.328804 -0.358791 107 8.38488 -0.302321 -0.35852 89 8.34455 0.631045 -0.35702 138 8.33854 0.604222 -0.356478 122 8.33641 0.577736 -0.356207 126 8.327 -0.156433 -0.354316 103 8.3104 0.48408 -0.354039 96 8.30719 0.536287 -0.354039 99 8.30485 0.509931 -0.353768 128 8.31568 -0.117059 -0.353502 115 8.29601 0.41784 -0.35282 91 8.29465 0.443899 -0.352819 125 8.30403 -0.0908378 -0.352689 93 8.30228 -0.0647416 -0.352553 95 8.29255 -0.181954 -0.352012 69 8.29251 -0.0256158 -0.351875 98 8.29239 0.0525353 -0.351874 96 8.28655 0.182684 -0.351602 102 8.28657 0.000415383 -0.351468 86 8.28653 0.0264471 -0.351468 124 8.28195 0.208602 -0.351331 131 8.28005 0.273642 -0.35133 127 8.27711 0.351666 -0.351329 114 8.27536 0.390665 -0.351329 114 8.28174 0.117493 -0.351196 142 8.28008 0.0914475 -0.351061 137 8.27726 0.234497 -0.351059 93 8.27517 0.299499 -0.351059 121 8.2702 0.325324 -0.350787 118 8.27136 0.143304 -0.350518 62 8.97317 -0.440211 -0.348573 208 8.23938 -0.232749 -0.348488 63 8.21813 -0.206383 -0.346996 50 8.65774 0.706799 -0.330034 63 8.63215 0.650226 -0.32817 155 8.61142 -0.353633 -0.325816 106 8.59431 -0.379932 -0.324821 58 8.58257 -0.325353 -0.323951 119 8.57964 -0.230781 -0.323577 172 8.53155 0.602545 -0.321704 130 8.54411 -0.28346 -0.321463 122 8.54296 -0.256553 -0.321339 105 8.51547 0.574582 -0.320585 86 8.48935 0.54612 -0.318845 133 8.48186 0.505543 -0.318223 89 8.47091 0.451542 -0.317353 116 8.4722 0.38491 -0.31723 119 8.46497 0.41125 -0.316856 123 8.45741 0.357667 -0.316235 119 8.45151 0.477193 -0.316234 116 8.45683 0.0519194 -0.315741 97 8.44868 0.197907 -0.315366 97 8.44288 0.264148 -0.315117 94 8.43855 0.330378 -0.314992 121 8.44265 0.0783989 -0.31487 99 8.43802 0.290544 -0.314868 128 8.4297 0.23727 -0.314247 126 8.42822 0.118036 -0.313999 106 8.42731 0.170987 -0.313999 125 8.42501 0.025355 -0.313751 88 8.42381 0.144456 -0.31375 115 8.41506 -0.0142972 -0.31313 66 8.40898 -0.0406889 -0.312757 52 8.35568 -0.158417 -0.309525 127 8.35614 -0.132167 -0.309525 87 8.35692 -0.0665304 -0.309524 97 8.35452 -0.105881 -0.3094 59 8.34317 -0.184363 -0.308779 53 8.80867 0.537083 -0.286419 93 8.79698 0.564088 -0.285856 173 8.79268 0.466766 -0.285295 141 8.78519 0.494031 -0.284957 102 8.77417 0.438087 -0.28417 123 8.75465 0.0928674 -0.282486 194 8.74454 0.340162 -0.282259 113 8.74159 0.408835 -0.282258 130 8.73544 0.367271 -0.281809 138 8.73832 -0.223104 -0.281702 147 8.73898 -0.195651 -0.281701 160 8.73941 0.175051 -0.281698 150 8.73577 0.243623 -0.281585 138 8.7366 -0.0995165 -0.281476 167 8.73687 -0.072069 -0.281475 159 8.73717 -0.0034477 -0.281475 164 8.73593 0.147513 -0.281474 122 8.73159 0.312149 -0.281472 126 8.73107 -0.044608 -0.281138 166 8.73103 0.0514009 -0.281137 135 8.72851 0.215958 -0.281135 140 8.72698 0.270797 -0.281135 132 8.72915 0.0239531 -0.281025 158 8.7192 -0.26379 -0.28069 147 8.69557 0.584724 -0.280232 49 8.69343 -0.317766 -0.27934 53 8.67081 0.624054 -0.278994 51 8.68564 -0.167318 -0.278664 175 8.65991 -0.357508 -0.277541 83 9.3587 0.437783 -0.264606 255 9.32654 -0.0913376 -0.262485 92 9.30404 -0.134907 -0.261372 94 8.72011 0.45087 -0.232311 255 8.63969 -0.0555523 -0.227658 249 8.61938 0.500271 -0.227349 95 8.61408 -0.177119 -0.226444 255 8.60062 -0.149771 -0.225735 248 8.59742 0.093404 -0.225531 59 8.57645 0.160611 -0.224518 112 8.53392 0.0392833 -0.222292 80 8.51518 0.467708 -0.221984 248 8.52177 0.0660371 -0.221684 255 8.51736 0.213223 -0.221581 255 8.49629 0.252825 -0.220569 255 8.32228 -0.000264585 -0.21156 67 8.31625 -0.0263723 -0.211257 121 8.99038 -0.37763 -0.194739 204 8.94922 0.722315 -0.19383 139 8.93561 -0.347373 -0.192223 255 8.92517 -0.304886 -0.191684 197 8.90378 0.662217 -0.191585 255 8.88772 0.689062 -0.190956 255 8.76709 0.48566 -0.184939 179 8.69558 0.604923 -0.182063 78 8.6984 -0.270448 -0.181443 92 8.68278 0.453379 -0.181077 144 8.69086 -0.174618 -0.180993 201 8.68937 -0.147286 -0.180903 232 8.68627 -0.20184 -0.180813 173 8.68323 -0.242721 -0.180724 144 8.66753 0.575527 -0.180716 152 8.6673 0.548162 -0.180627 102 8.67998 -0.106244 -0.180453 163 8.61196 0.503754 -0.178022 73 8.54637 0.378557 -0.174789 255 8.53766 0.230416 -0.174162 255 8.50659 0.416853 -0.173082 188 8.50561 0.349853 -0.172903 255 8.50126 0.162513 -0.172456 255 8.49668 0.32272 -0.172454 255 8.49471 0.0422516 -0.172097 255 8.47655 0.0687374 -0.171289 255 8.47443 0.201874 -0.171287 255 8.47299 0.255116 -0.171287 255 8.47215 0.281734 -0.171287 255 8.46615 0.108523 -0.170839 255 8.45378 0.134892 -0.1703 255 8.42653 -0.0774264 -0.169044 217 8.35081 -0.0507283 -0.16563 97 8.33494 -0.0244961 -0.164911 114 8.33496 0.0147818 -0.164911 81 9.25227 0.601198 -0.148339 88 9.01546 -0.391708 -0.138787 221 8.93597 0.7085 -0.136463 213 8.90585 0.0612965 -0.134234 255 8.88636 0.256699 -0.133615 213 8.87811 0.186721 -0.13323 252 8.87548 0.214568 -0.133153 254 8.87563 0.0890644 -0.133077 255 8.84514 0.130532 -0.13192 134 8.52896 0.153598 -0.119736 112 8.33242 -0.0325966 -0.112104 74 8.32428 -0.0586909 -0.111796 60 8.89304 0.256481 -0.0783135 194 8.78859 0.0598103 -0.0748301 223 8.55436 0.0978409 -0.0672786 93 8.48818 0.216933 -0.0652122 72 8.47207 0.123269 -0.0646322 82 8.46564 0.149758 -0.0644382 208 8.45714 0.176161 -0.0641798 111 8.89366 0.149843 -0.0328088 255 8.87949 0.247327 -0.0324824 255 8.87256 0.205313 -0.0322657 255 8.85679 0.0519348 -0.0317789 255 8.8223 0.10727 -0.0308561 255 8.81719 0.176485 -0.030747 255 8.81459 0.0795026 -0.0306393 255 8.91665 0.123354 0.0258842 118 8.90422 0.151125 0.0261297 255 8.90002 0.248963 0.0261714 255 8.8957 0.178921 0.0262934 255 8.87677 0.220337 0.0266614 255 8.87114 0.0807806 0.0268236 255 8.95922 0.200662 0.0664151 68 8.93653 0.130011 0.066793 138 8.93181 0.172057 0.0668563 234 9.04292 0.137546 0.124534 201 9.03347 0.0947965 0.124625 90 8.9801 0.263437 0.125084 57 8.93491 0.233886 0.125504 128 8.93447 0.163662 0.125522 179 8.92591 0.191535 0.125595 220 8.79974 0.0640225 0.126765 55 8.98603 0.0584132 0.181928 83 8.95181 0.0864122 0.182023 78 8.91535 0.226248 0.182118 107 8.90886 0.156108 0.18214 255 8.89232 0.183809 0.182184 194 7.17207 -0.0495285 0.18695 50 7.28803 0.893037 0.229884 40 7.28915 0.91644 0.229897 40 7.78658 -0.174326 0.231301 255 7.79799 -0.199052 0.231339 255 8.8732 0.153474 0.234778 255 8.88971 0.223664 0.234836 132 8.89837 0.195936 0.234862 236 8.92694 0.25278 0.234958 67 8.97434 0.0568204 0.235097 72 8.97562 0.127341 0.235104 72 8.99997 0.0994789 0.235181 122 +unknow 0.970541 1 0 545 -1.41289 -20.1818 -1.4391 135 -1.50536 -20.1391 -1.43617 139 -1.56816 -20.1283 -1.43567 125 -2.0049 -20.0334 -1.43109 100 -2.06621 -20.0111 -1.42979 128 -2.12615 -19.9768 -1.42751 137 -2.1889 -19.97 -1.4275 137 -2.27962 -19.9298 -1.42506 136 -2.70528 -19.7859 -1.41771 137 -2.61149 -19.7945 -1.41739 147 -2.76551 -19.7635 -1.41657 141 -2.82479 -19.735 -1.41494 134 -2.88649 -19.7241 -1.41477 139 -2.97586 -19.6866 -1.41282 138 -3.03498 -19.6594 -1.41135 139 -3.18675 -19.6192 -1.41004 138 -3.09365 -19.6301 -1.40972 145 -3.24578 -19.5934 -1.40873 141 -3.30403 -19.5634 -1.4071 142 -3.39618 -19.5476 -1.4071 140 -3.45447 -19.5192 -1.40563 142 -3.51297 -19.4925 -1.40433 136 -2.31161 -19.6592 -1.40341 127 -3.57133 -19.4657 -1.40302 135 -2.52587 -19.6187 -1.40226 130 -2.46397 -19.6246 -1.4021 116 -3.66009 -19.433 -1.40171 135 -3.71815 -19.4057 -1.40041 136 -2.36769 -19.6043 -1.3995 126 -3.77531 -19.3744 -1.39878 139 -3.92617 -19.3383 -1.39828 142 -3.86501 -19.3486 -1.39812 137 -3.9825 -19.3044 -1.39649 140 -4.12818 -19.2452 -1.3942 138 -4.06483 -19.2444 -1.39307 138 -3.57055 -21.3179 -1.37757 177 -3.63649 -21.3007 -1.37713 185 -3.70236 -21.2832 -1.37668 185 -3.80226 -21.2636 -1.37653 182 -3.86868 -21.2496 -1.37638 196 -3.92994 -21.2079 -1.37418 192 -3.99245 -21.1739 -1.37256 192 -4.09142 -21.1509 -1.37226 191 -4.15591 -21.1282 -1.37153 190 -4.22149 -21.1111 -1.37123 188 -4.31649 -21.0695 -1.36961 189 -4.37816 -21.0344 -1.36799 186 -4.44422 -21.0205 -1.36799 185 -4.50561 -20.985 -1.36637 184 -4.60273 -20.9557 -1.36578 186 -4.73121 -20.9128 -1.36475 183 -4.66505 -20.9256 -1.3646 180 -4.82022 -20.8495 -1.36166 181 -4.88524 -20.8323 -1.36151 182 -4.94788 -20.8052 -1.36063 181 -5.04114 -20.7623 -1.35916 178 -5.10059 -20.7231 -1.35739 180 -5.74058 -20.3997 -1.34636 175 -5.64011 -20.4111 -1.34519 177 -5.78653 -20.3182 -1.34151 215 -5.84811 -20.2923 -1.34092 167 -5.91127 -20.2719 -1.34077 172 -6.05822 -20.1848 -1.33768 166 -5.99136 -20.1922 -1.33681 218 -5.34858 -19.5997 -1.28198 187 -4.91096 -19.6912 -1.28039 147 -5.27186 -19.5605 -1.27773 171 -4.96347 -19.639 -1.2776 161 -5.17501 -19.5678 -1.27641 189 -5.10996 -19.5705 -1.27539 193 -5.03845 -19.5478 -1.27246 154 -2.97798 -19.6854 -1.25218 139 -2.84991 -19.6742 -1.24998 153 -2.4063 -19.6489 -1.24384 156 -2.55846 -19.6136 -1.24266 168 -2.61794 -19.5897 -1.24149 188 -2.67755 -19.5675 -1.24046 140 -2.46199 -19.5938 -1.24032 255 -2.06118 -19.638 -1.24019 226 -1.96821 -19.6435 -1.23991 186 -2.33668 -19.591 -1.23901 255 -2.24342 -19.5939 -1.23842 241 -2.17895 -19.5751 -1.23652 151 -5.41987 -19.5952 -1.16875 110 -5.20002 -19.6382 -1.16767 121 -5.34938 -19.5794 -1.16645 135 -5.07157 -19.6511 -1.16633 112 -5.28319 -19.5787 -1.16523 141 -4.84949 -19.6824 -1.16471 96 -1.51959 -20.204 -1.16421 99 -5.12273 -19.5945 -1.16348 156 -4.77497 -19.6452 -1.16106 108 -4.95699 -19.5877 -1.16023 223 -4.89062 -19.5838 -1.15888 127 -4.67361 -19.6306 -1.15849 142 -4.61056 -19.6393 -1.15809 174 -4.54347 -19.6304 -1.15646 191 -4.44565 -19.6282 -1.15484 198 -4.38051 -19.6265 -1.15376 206 -4.31329 -19.6148 -1.152 202 -4.21789 -19.6213 -1.15106 202 -4.15253 -19.6169 -1.14984 207 -4.08441 -19.5985 -1.14768 211 -4.01963 -19.5956 -1.1466 206 -2.81211 -19.803 -1.14653 176 -3.71024 -19.6505 -1.14621 255 -3.64596 -19.6483 -1.14526 255 -3.92296 -19.5928 -1.14511 222 -3.85909 -19.5933 -1.1443 239 -3.58101 -19.642 -1.14405 255 -3.793 -19.5818 -1.14268 255 -3.47561 -19.5859 -1.13904 255 -3.41372 -19.5948 -1.13891 253 -3.35114 -19.5995 -1.1385 242 -3.2889 -19.606 -1.13824 236 -3.19456 -19.6095 -1.13743 228 -3.13044 -19.6036 -1.13635 237 -3.06762 -19.6055 -1.13581 244 -2.9746 -19.6158 -1.13554 244 -2.91093 -19.6112 -1.1346 247 -2.84589 -19.5966 -1.13298 253 -2.6271 -19.6029 -1.13136 222 -2.41092 -19.6267 -1.1311 147 -2.47158 -19.6111 -1.13056 188 -2.56397 -19.5992 -1.13055 255 -2.34737 -19.6183 -1.13002 143 -2.06939 -19.6455 -1.12976 255 -1.9762 -19.6491 -1.12936 255 -2.13046 -19.633 -1.12935 77 -2.25265 -19.6093 -1.12867 255 -1.91236 -19.6334 -1.12787 143 -2.18665 -19.5766 -1.12596 162 -5.68366 -19.6504 -1.06221 93 -5.3281 -19.6898 -1.05862 108 -5.45063 -19.6521 -1.05837 126 -1.47958 -20.3342 -1.0582 92 -5.60371 -19.6048 -1.05811 181 -5.52302 -19.5551 -1.05377 246 -5.0224 -19.6587 -1.05193 109 -5.35442 -19.544 -1.0503 205 -5.22841 -19.5657 -1.04956 222 -5.13463 -19.5843 -1.04919 207 -4.78551 -19.6294 -1.0466 185 -5.06202 -19.5579 -1.04646 227 -1.52671 -20.1125 -1.04466 141 -4.83463 -19.5639 -1.04336 125 -4.89607 -19.5486 -1.04336 157 -4.66871 -19.5508 -1.04014 255 -4.60359 -19.5498 -1.03915 255 -4.53942 -19.5525 -1.03841 255 -4.32286 -19.5954 -1.03805 255 -4.4717 -19.5395 -1.03667 255 -4.37739 -19.5506 -1.03606 255 -4.09728 -19.5949 -1.03508 255 -4.03368 -19.5979 -1.03446 255 -3.96929 -19.5968 -1.03359 255 -3.87612 -19.6113 -1.03335 255 -4.24465 -19.5329 -1.0332 255 -4.15047 -19.5429 -1.03259 255 -3.81027 -19.6019 -1.03198 255 -3.74377 -19.5883 -1.03037 255 -3.64553 -19.5743 -1.02839 255 -3.58185 -19.5739 -1.02765 255 -3.51927 -19.5791 -1.02728 255 -2.71638 -19.7025 -1.02707 127 -3.42558 -19.5876 -1.02679 255 -2.59174 -19.7133 -1.0267 84 -3.30177 -19.6048 -1.02654 255 -3.36301 -19.5924 -1.02642 255 -3.23853 -19.6053 -1.02593 255 -3.0807 -19.6064 -1.02444 255 -2.92573 -19.6241 -1.02408 255 -3.01817 -19.6101 -1.02407 255 -2.86116 -19.6135 -1.02284 255 -3.13559 -19.5553 -1.02183 255 -2.79184 -19.569 -1.01949 255 -2.36061 -19.6237 -1.01938 124 -2.08275 -19.6531 -1.01927 225 -2.51159 -19.5808 -1.01788 214 -2.41706 -19.5746 -1.01677 190 -2.01645 -19.6159 -1.01654 255 -2.29308 -19.5814 -1.01628 200 -2.6308 -19.5369 -1.01614 119 -2.13769 -19.585 -1.01542 92 -2.19695 -19.5583 -1.01417 192 -5.87322 -19.733 -0.947995 181 -5.48696 -19.7921 -0.945206 184 -5.79604 -19.6996 -0.944964 223 -5.68824 -19.6749 -0.941935 238 -5.61548 -19.6543 -0.939691 237 -5.55155 -19.6641 -0.939245 255 -5.26839 -19.7233 -0.938249 138 -1.47589 -20.3133 -0.93575 250 -5.09989 -19.7118 -0.935223 107 -5.37541 -19.6281 -0.934645 114 -5.31009 -19.6314 -0.933862 174 -5.14919 -19.6474 -0.93241 193 -5.02417 -19.6735 -0.932079 250 -4.86378 -19.6891 -0.930739 102 -4.91403 -19.6272 -0.928038 133 -4.78544 -19.6364 -0.926809 255 -4.68686 -19.6335 -0.925353 255 -4.6206 -19.6286 -0.924233 255 -4.55622 -19.6314 -0.923561 255 -1.52233 -20.0756 -0.922596 148 -4.49054 -19.6281 -0.922553 255 -4.39496 -19.6354 -0.921772 255 -4.33026 -19.6354 -0.920988 255 -4.26476 -19.6314 -0.91998 245 -4.17014 -19.6415 -0.919423 255 -4.10314 -19.6291 -0.917965 255 -4.03705 -19.6203 -0.916732 255 -3.94338 -19.6333 -0.9164 255 -2.17034 -19.8913 -0.915594 157 -3.87822 -19.6279 -0.915392 255 -3.81237 -19.6185 -0.914159 255 -3.74998 -19.6264 -0.913937 255 -3.65563 -19.634 -0.91338 255 -3.59215 -19.6356 -0.912822 255 -3.52799 -19.633 -0.912038 255 -3.43338 -19.6376 -0.911369 255 -3.37 -19.6385 -0.91081 255 -2.65818 -19.7454 -0.910735 137 -3.30631 -19.6371 -0.910139 255 -2.71858 -19.7251 -0.910057 216 -3.24299 -19.6376 -0.90958 255 -3.14822 -19.6388 -0.908798 255 -3.08558 -19.6427 -0.908464 255 -2.92772 -19.6426 -0.907124 255 -3.01995 -19.6267 -0.907007 255 -1.99699 -19.7369 -0.905936 255 -2.86285 -19.63 -0.905891 255 -2.08852 -19.7134 -0.905144 255 -2.79921 -19.6251 -0.905107 255 -2.51622 -19.6211 -0.902761 107 -1.9294 -19.6854 -0.902679 255 -2.42349 -19.6307 -0.902654 195 -2.57733 -19.6091 -0.902533 117 -2.36015 -19.6244 -0.90187 128 -2.29642 -19.6138 -0.900862 124 -5.90159 -19.7101 -0.831539 191 -5.81288 -19.6385 -0.826789 247 -4.93798 -19.8519 -0.825623 143 -5.74045 -19.6203 -0.82487 253 -1.51106 -20.3428 -0.82287 127 -5.41877 -19.6618 -0.82246 209 -5.63352 -19.5972 -0.822246 252 -5.34906 -19.6499 -0.820946 157 -5.56261 -19.5822 -0.82053 255 -5.49184 -19.5669 -0.818814 255 -5.25813 -19.5586 -0.815286 138 -5.19254 -19.5596 -0.81448 150 -5.09778 -19.5742 -0.813979 147 -4.96728 -19.5768 -0.812468 133 -5.02776 -19.5572 -0.812263 129 -4.8062 -19.5861 -0.81096 255 -4.64944 -19.6116 -0.810361 255 -4.74181 -19.5895 -0.810356 255 -4.58369 -19.6086 -0.809454 255 -4.52162 -19.621 -0.809356 255 -4.45684 -19.6214 -0.808652 255 -4.35997 -19.6227 -0.807645 255 -2.36573 -19.9374 -0.806537 171 -2.58481 -19.9102 -0.806525 140 -4.29272 -19.611 -0.806333 255 -1.57972 -19.997 -0.805667 161 -4.22262 -19.5853 -0.804314 255 -4.12738 -19.5913 -0.803611 255 -4.06377 -19.5944 -0.803108 255 -4.00098 -19.6012 -0.802808 255 -3.9066 -19.61 -0.802307 255 -3.84266 -19.6105 -0.801704 255 -2.50982 -19.8211 -0.801572 148 -3.77571 -19.595 -0.800291 255 -2.41297 -19.805 -0.800161 110 -3.71263 -19.5989 -0.79989 255 -3.61512 -19.5887 -0.798478 255 -3.54818 -19.5705 -0.796964 255 -3.48527 -19.5737 -0.796563 255 -3.39231 -19.5859 -0.796365 255 -3.32975 -19.5906 -0.796065 255 -3.26686 -19.5931 -0.795664 255 -3.17256 -19.5964 -0.795062 255 -3.11035 -19.6023 -0.794863 255 -3.04752 -19.6041 -0.794461 255 -2.98318 -19.5958 -0.793554 255 -2.89022 -19.6057 -0.793357 255 -2.82717 -19.6048 -0.792854 255 -2.76473 -19.6077 -0.792554 255 -2.67093 -19.6106 -0.792053 255 -1.95724 -19.6585 -0.790269 255 -2.26416 -19.6114 -0.789545 255 -2.04713 -19.6232 -0.788949 255 -2.60107 -19.5575 -0.78892 255 -2.10833 -19.6127 -0.788744 255 -2.16927 -19.6001 -0.788437 255 -5.89647 -19.7513 -0.715895 173 -5.23679 -19.9157 -0.715034 173 -5.32132 -19.856 -0.713414 170 -5.16371 -19.8914 -0.713153 183 -5.8068 -19.6758 -0.711502 230 -5.73047 -19.6441 -0.709172 238 -5.62742 -19.6343 -0.707472 249 -5.06566 -19.7681 -0.706695 186 -5.55216 -19.6038 -0.705232 255 -5.48198 -19.5904 -0.7038 255 -5.38485 -19.5987 -0.702997 255 -5.31805 -19.5962 -0.702103 255 -4.86912 -19.6405 -0.698986 255 -4.80314 -19.6382 -0.698182 255 -4.73769 -19.6377 -0.697468 255 -4.94992 -19.5708 -0.696828 255 -4.64144 -19.6442 -0.696755 255 -4.56348 -19.5886 -0.693527 255 -4.28568 -19.6492 -0.693453 255 -4.49925 -19.5912 -0.692992 255 -4.21892 -19.6391 -0.692379 255 -4.43198 -19.5799 -0.691829 255 -4.12225 -19.6392 -0.691487 255 -4.33579 -19.583 -0.691026 255 -4.05651 -19.6325 -0.690593 255 -3.98967 -19.6197 -0.689429 255 -3.89292 -19.6167 -0.688447 255 -3.82938 -19.6191 -0.688002 255 -3.76585 -19.6212 -0.687556 255 -3.70382 -19.631 -0.68747 255 -3.6102 -19.6423 -0.687206 255 -3.54671 -19.6437 -0.68676 255 -3.48256 -19.641 -0.686135 255 -3.38727 -19.6414 -0.685422 255 -3.32356 -19.6401 -0.684887 255 -3.25827 -19.6288 -0.683903 255 -3.10277 -19.6459 -0.683552 255 -3.16321 -19.6281 -0.68319 255 -3.03619 -19.6239 -0.68212 255 -2.97363 -19.6274 -0.681854 255 -2.88053 -19.6373 -0.681679 255 -1.9519 -19.7472 -0.681548 105 -2.81827 -19.6423 -0.681503 255 -2.74995 -19.6035 -0.679352 255 -2.03925 -19.6821 -0.67903 241 -2.65647 -19.6084 -0.678998 255 -2.59356 -19.6067 -0.678552 255 -2.53043 -19.6029 -0.678017 255 -2.4373 -19.6086 -0.677753 255 -2.25216 -19.6287 -0.677673 255 -2.0973 -19.6399 -0.677412 255 -2.15856 -19.6292 -0.677229 255 -2.37426 -19.6043 -0.677218 255 -2.3122 -19.6077 -0.677041 255 -5.84065 -19.679 -0.581621 168 -5.75902 -19.6302 -0.578929 187 -5.65144 -19.6053 -0.576855 211 -5.57882 -19.5845 -0.575318 226 -5.50857 -19.5712 -0.574089 224 -5.40719 -19.5642 -0.572785 221 -5.33829 -19.5541 -0.57171 229 -5.27109 -19.5496 -0.570866 233 -5.20345 -19.5429 -0.569945 232 -5.10571 -19.5459 -0.569103 241 -5.03826 -19.5386 -0.568182 247 -4.97537 -19.5485 -0.567954 247 -4.87979 -19.5582 -0.56742 243 -4.81304 -19.5521 -0.566576 252 -4.74732 -19.5496 -0.565886 255 -4.6491 -19.5465 -0.56489 255 -4.58492 -19.5494 -0.564431 252 -4.5194 -19.5462 -0.563741 255 -4.45396 -19.5427 -0.563051 253 -4.35919 -19.5518 -0.562594 255 -4.29429 -19.5498 -0.561981 250 -4.22945 -19.5476 -0.561368 243 -4.1323 -19.5438 -0.560449 248 -4.06842 -19.545 -0.55999 249 -4.00498 -19.5479 -0.559608 242 -3.90927 -19.5489 -0.558919 244 -3.84628 -19.5532 -0.558615 227 -3.77987 -19.5397 -0.557617 208 -3.71508 -19.5338 -0.556927 244 -3.56011 -19.5545 -0.556626 248 -3.62152 -19.5433 -0.556623 255 -3.49795 -19.5617 -0.556476 255 -3.40504 -19.574 -0.556326 255 -3.34048 -19.5669 -0.555636 255 -3.27733 -19.5674 -0.555254 255 -3.21388 -19.5658 -0.554795 255 -1.97838 -19.723 -0.554627 137 -3.1191 -19.565 -0.554184 255 -3.05638 -19.5668 -0.553879 255 -2.06834 -19.6857 -0.553544 197 -2.99337 -19.5664 -0.553497 255 -2.12974 -19.6751 -0.553387 181 -2.89995 -19.5724 -0.553194 236 -2.837 -19.5715 -0.552812 216 -2.77521 -19.5783 -0.552738 207 -2.6211 -19.5975 -0.552669 202 -2.1893 -19.6485 -0.552614 195 -2.68238 -19.5872 -0.552589 205 -2.2814 -19.6339 -0.552455 211 -2.34283 -19.6247 -0.552375 216 -2.40447 -19.6172 -0.552372 200 -2.49689 -19.6057 -0.552367 187 -2.55795 -19.5938 -0.55221 198 -2.16494 -20.6233 -0.459771 105 -5.88495 -19.8382 -0.458157 186 -5.79292 -19.7549 -0.454745 91 -2.20784 -20.4117 -0.453128 132 -5.67001 -19.6782 -0.45127 80 -5.59127 -19.6363 -0.449275 84 -5.51985 -19.6191 -0.448119 221 -2.25315 -20.2338 -0.447581 136 -5.41992 -19.6179 -0.447221 249 -5.34673 -19.5924 -0.445807 252 -5.28257 -19.5995 -0.445488 251 -5.18252 -19.5951 -0.444526 246 -5.11691 -19.5958 -0.444014 234 -2.3357 -20.1117 -0.443967 116 -5.04887 -19.5867 -0.443179 226 -4.98437 -19.5908 -0.442796 230 -4.88911 -19.6024 -0.442414 245 -4.8218 -19.5944 -0.441644 239 -2.38903 -20.0209 -0.441256 115 -4.75694 -19.5958 -0.441196 250 -4.6627 -19.6102 -0.440944 239 -4.59517 -19.5995 -0.440109 248 -4.53179 -19.606 -0.439854 250 -4.46531 -19.5987 -0.439149 253 -4.36815 -19.5981 -0.438445 252 -4.30016 -19.5824 -0.437481 253 -4.2382 -19.5939 -0.43742 249 -4.14541 -19.6117 -0.43736 244 -4.08135 -19.6129 -0.436977 239 -2.43388 -19.8645 -0.436418 97 -3.30428 -19.7343 -0.436244 80 -4.01493 -19.6021 -0.436207 238 -3.92174 -19.6169 -0.436083 234 -3.85741 -19.6153 -0.435635 225 -3.79388 -19.6176 -0.435316 229 -3.72927 -19.6137 -0.434803 222 -3.63571 -19.6251 -0.434615 215 -3.5712 -19.6207 -0.434103 207 -3.50814 -19.624 -0.433848 198 -3.41257 -19.6225 -0.433273 204 -3.34957 -19.6253 -0.433018 160 -2.51247 -19.7338 -0.432546 127 -2.57087 -19.698 -0.43164 200 -2.63274 -19.6899 -0.431637 209 -2.69378 -19.6756 -0.43144 239 -2.78646 -19.6626 -0.431435 104 -2.98512 -19.5162 -0.427686 40 -3.04213 -19.4791 -0.42678 204 -3.80572 -21.1446 -0.373501 47 -3.8627 -21.0814 -0.372089 47 -3.96051 -21.0551 -0.371867 47 -5.82108 -19.7653 -0.349551 145 -5.73482 -19.701 -0.347225 222 -5.62591 -19.6721 -0.34566 236 -5.55425 -19.655 -0.344688 233 -5.48437 -19.6435 -0.343879 232 -5.38378 -19.6402 -0.343072 238 -5.31418 -19.6281 -0.342263 237 -5.2473 -19.6254 -0.341725 231 -5.14915 -19.6287 -0.341134 229 -5.08091 -19.6196 -0.340433 235 -5.01627 -19.6238 -0.340112 219 -4.9482 -19.6143 -0.339411 227 -4.85282 -19.6258 -0.339091 226 -4.78686 -19.6234 -0.338607 223 -4.72236 -19.6267 -0.338285 220 -4.62798 -19.641 -0.338074 204 -2.69301 -19.9741 -0.337525 44 -4.55943 -19.6262 -0.337264 217 -4.33858 -19.6537 -0.33668 44 -4.49191 -19.6151 -0.336564 164 -4.27297 -19.6496 -0.336196 44 -4.20911 -19.6532 -0.335929 44 -4.39239 -19.6048 -0.335702 167 -4.1144 -19.663 -0.335663 44 -3.88935 -19.6639 -0.334482 44 -3.98078 -19.6395 -0.334315 88 -3.82525 -19.6643 -0.334161 44 -2.76562 -19.8088 -0.333349 44 -2.81472 -19.709 -0.330854 44 -2.87079 -19.6605 -0.329768 245 -3.01959 -19.6018 -0.328785 211 -3.22672 -19.5181 -0.327419 88 -3.13183 -19.5153 -0.326936 243 -3.06831 -19.5112 -0.32656 246 -3.86902 -21.1642 -0.230553 75 -3.93077 -21.1264 -0.23002 75 -5.65284 -20.2716 -0.220872 104 -4.84908 -20.1786 -0.214961 73 -5.47263 -19.9874 -0.214315 109 -4.86442 -19.9651 -0.210799 72 -5.3537 -19.796 -0.209916 225 -4.91281 -19.8914 -0.209573 72 -5.28275 -19.7799 -0.209227 255 -5.18242 -19.7774 -0.208661 255 -5.11279 -19.7646 -0.208053 255 -5.04574 -19.7612 -0.207649 219 -4.98169 -19.7692 -0.207489 71 -4.65142 -19.7632 -0.205794 71 -2.9222 -20.0453 -0.204948 86 -3.0001 -19.9206 -0.20266 71 -3.99721 -19.7447 -0.202607 71 -3.90373 -19.7613 -0.202571 71 -4.05321 -19.7026 -0.201992 77 -3.11198 -19.8164 -0.2009 255 -3.03886 -19.7549 -0.199436 70 -4.8914 -20.9793 -0.130983 65 -3.87695 -21.0743 -0.129244 65 -3.96576 -21.0008 -0.128358 65 -5.1382 -19.7817 -0.113598 153 -4.94958 -19.8215 -0.113482 62 -5.06654 -19.7609 -0.113004 189 -5.00295 -19.7709 -0.112913 251 -4.71551 -19.8086 -0.112425 62 -4.8351 -19.7591 -0.112104 62 -3.10225 -20.0394 -0.11119 73 -4.01912 -19.7554 -0.109284 61 -3.14222 -19.8854 -0.10889 61 -3.95032 -19.7347 -0.108753 61 -3.22229 -19.7875 -0.107564 61 -3.28014 -19.7516 -0.107152 210 -3.39023 -20.3105 0.0197968 133 -4.81208 -19.865 0.021259 155 -3.42572 -20.1322 0.021348 141 -4.74087 -19.8431 0.0216015 203 -4.64096 -19.8379 0.0218512 223 -4.57549 -19.8388 0.0219752 221 -4.50962 -19.8374 0.0221174 201 -4.40875 -19.8253 0.0224219 216 -4.34304 -19.8234 0.0225641 188 -3.49693 -19.9798 0.0226095 161 -4.27696 -19.8193 0.0227246 159 -4.21261 -19.8229 0.0228122 143 -4.11633 -19.8288 0.0229346 140 -4.05162 -19.8299 0.0230404 146 -3.89499 -19.8572 0.0230684 175 -3.98735 -19.8327 0.0231281 155 -3.82958 -19.8536 0.0232107 205 -3.76534 -19.8557 0.0232984 237 -3.60715 -19.8728 0.0233993 213 -3.66776 -19.8516 0.0234937 236 -3.54156 -19.8663 0.0235598 218 +unknow 0.977439 1 0 375 -6.05274 26.0735 -1.75654 209 -5.96901 26.0847 -1.75596 190 -6.12824 26.0272 -1.75449 206 -6.24618 25.9787 -1.75302 208 -6.31694 25.9143 -1.74964 194 -6.38927 25.8575 -1.74686 242 -6.51056 25.8252 -1.74671 200 -6.57789 25.7505 -1.7426 192 -6.73048 25.6739 -1.73996 200 -6.64631 25.6814 -1.73893 240 -6.83909 25.5957 -1.73643 197 -5.25134 25.9273 -1.73352 232 -6.90544 25.5221 -1.73247 236 -6.98297 25.4906 -1.73174 200 -7.0966 25.4344 -1.72998 191 -7.16081 25.3563 -1.72572 234 -7.35363 25.2782 -1.7241 190 -7.23387 25.3106 -1.72396 200 -7.4156 25.1956 -1.71956 234 -7.48677 25.1454 -1.7175 195 -7.58675 25.0488 -1.71281 232 -7.6555 24.9924 -1.71031 196 -7.71869 24.9186 -1.7065 191 -7.78564 24.8581 -1.70371 235 -8.21059 24.5801 -1.69387 233 -8.28522 24.5467 -1.69329 193 -8.3808 24.4488 -1.68874 186 -8.44261 24.379 -1.68536 232 -8.51849 24.3505 -1.68522 197 -8.61185 24.2499 -1.68052 188 -8.67456 24.1852 -1.67759 232 -8.74508 24.1428 -1.67641 188 -8.04532 24.3387 -1.67319 178 -7.89056 24.253 -1.66366 205 -7.7362 24.2964 -1.66322 197 -7.80762 24.2568 -1.66205 204 -7.9483 25.92 -1.62929 202 -5.23611 24.4594 -1.62761 187 -5.38326 24.3968 -1.62541 228 -5.45338 24.3506 -1.62321 217 -7.79544 25.8559 -1.62211 118 -5.02624 24.4138 -1.62116 183 -5.10291 24.3979 -1.62116 172 -7.70617 25.8535 -1.62021 107 -5.45893 26.0689 -1.59694 103 -5.15795 26.0569 -1.59207 201 -5.06151 25.9986 -1.58692 101 -8.11489 24.2743 -1.52631 92 -8.03797 24.2977 -1.52618 139 -7.91284 24.3031 -1.52388 78 -7.55959 24.384 -1.52185 87 -7.82725 24.2994 -1.52184 118 -7.6194 24.3068 -1.51805 112 -5.6951 24.5047 -1.49668 103 -5.42187 24.5502 -1.4956 103 -5.47441 24.424 -1.48801 179 -5.58587 24.3824 -1.48692 108 -5.31103 24.4131 -1.48489 208 -5.19427 24.4301 -1.48435 115 -4.95782 24.4486 -1.48233 89 -5.02934 24.4075 -1.48056 111 -8.30499 24.4325 -1.39543 61 -8.10291 24.3383 -1.38586 134 -7.96273 24.2984 -1.38077 176 -8.15013 24.2257 -1.38014 116 -7.53818 24.421 -1.38003 98 -7.87161 24.2778 -1.37778 242 -7.79045 24.2872 -1.37679 255 -7.66573 24.2912 -1.37468 173 -4.55404 25.0231 -1.37237 60 -7.37218 24.2881 -1.36909 130 -7.28839 24.2862 -1.36748 103 -7.20754 24.2937 -1.36649 130 -7.12839 24.3066 -1.36587 100 -7.0022 24.2997 -1.36326 117 -6.92038 24.3023 -1.36202 119 -6.8316 24.2798 -1.35916 115 -6.56164 24.3438 -1.35854 59 -6.71394 24.3001 -1.35842 106 -6.63023 24.2941 -1.35668 74 -6.43109 24.3146 -1.35469 83 -5.66104 24.491 -1.35383 135 -6.27471 24.341 -1.35382 109 -6.35116 24.3211 -1.35382 132 -4.57333 24.6867 -1.35199 59 -6.07084 24.3391 -1.3506 105 -6.14728 24.3199 -1.35059 151 -5.99387 24.3561 -1.35047 109 -5.90748 24.3341 -1.34786 141 -5.79044 24.352 -1.34724 100 -5.36287 24.4211 -1.34551 103 -5.70666 24.3389 -1.34526 129 -5.51093 24.3635 -1.34402 172 -5.1635 24.4273 -1.34328 245 -5.43091 24.3651 -1.34302 140 -5.23771 24.3992 -1.34253 178 -4.61629 24.4878 -1.3403 86 -5.07459 24.3847 -1.33955 177 -4.99039 24.3634 -1.33719 98 -4.72182 24.4148 -1.33707 105 -4.79814 24.3979 -1.33695 131 -4.87359 24.3769 -1.33657 101 -8.58916 24.5804 -1.2549 246 -8.01068 24.6532 -1.24839 184 -8.24223 24.4482 -1.24153 128 -8.3833 24.3601 -1.23939 243 -8.11341 24.3187 -1.23231 144 -7.99497 24.3453 -1.23164 162 -7.57195 24.476 -1.23142 125 -7.82652 24.3476 -1.22883 130 -7.70083 24.3499 -1.22681 135 -7.61771 24.353 -1.22558 140 -7.33159 24.376 -1.2221 255 -7.25211 24.3894 -1.22153 255 -7.39997 24.3262 -1.22052 225 -7.13036 24.4003 -1.22019 255 -7.04588 24.3957 -1.21862 255 -6.96646 24.4081 -1.21805 255 -6.88322 24.4069 -1.21671 255 -6.76117 24.414 -1.21525 255 -6.67915 24.4159 -1.21413 255 -6.59509 24.4098 -1.21255 255 -6.4769 24.429 -1.21188 255 -5.58497 24.6236 -1.21055 136 -6.39302 24.4222 -1.21031 251 -4.5345 24.8304 -1.21011 241 -6.31376 24.4325 -1.20975 244 -6.19363 24.4426 -1.20863 242 -6.10903 24.431 -1.20683 249 -6.03128 24.4462 -1.2066 249 -5.95303 24.4592 -1.20627 249 -5.8326 24.4656 -1.20503 241 -5.02092 24.6368 -1.2046 127 -5.7447 24.4371 -1.20234 243 -5.46121 24.4345 -1.19863 142 -5.38356 24.4477 -1.19841 167 -4.64825 24.5798 -1.19741 255 -4.91824 24.5272 -1.19741 224 -5.26405 24.4533 -1.19729 175 -5.18138 24.4423 -1.19572 128 -4.75564 24.5145 -1.19494 255 -4.8299 24.4857 -1.19415 255 -5.09802 24.4272 -1.19392 130 -8.59586 24.5228 -1.10576 199 -8.16431 24.5183 -1.09848 124 -8.41715 24.3798 -1.09595 114 -7.72099 24.5966 -1.09535 139 -8.29544 24.2738 -1.08887 252 -8.01183 24.3142 -1.08624 132 -7.91566 24.2784 -1.08301 122 -7.83324 24.2842 -1.08199 125 -4.48923 25.1061 -1.08144 203 -7.71329 24.3037 -1.08109 134 -7.53741 24.2772 -1.07714 189 -7.4206 24.3048 -1.07674 255 -7.33903 24.3108 -1.07583 255 -7.2575 24.3165 -1.07492 255 -7.13722 24.3313 -1.07391 255 -7.05632 24.3382 -1.0731 255 -6.97324 24.3372 -1.07189 255 -6.88699 24.3244 -1.07007 255 -6.7707 24.3508 -1.06977 255 -5.26385 24.704 -1.06899 155 -6.6889 24.3527 -1.06876 255 -5.33471 24.6561 -1.06737 131 -6.60505 24.3466 -1.06734 255 -5.44826 24.619 -1.06676 133 -6.48615 24.362 -1.06654 255 -6.40403 24.361 -1.06543 255 -4.54756 24.7565 -1.06455 147 -6.32297 24.3636 -1.06452 255 -6.20415 24.3776 -1.06371 255 -6.12172 24.3738 -1.0625 255 -6.04178 24.3793 -1.06179 255 -5.92306 24.392 -1.06098 255 -5.84132 24.3891 -1.05987 255 -5.1454 24.5249 -1.05887 110 -5.75781 24.3781 -1.05835 255 -5.67534 24.3708 -1.05704 255 -4.59647 24.587 -1.05655 214 -5.556 24.3778 -1.05603 136 -5.47808 24.3893 -1.05573 99 -4.66144 24.5076 -1.05321 255 -4.73616 24.4811 -1.05261 255 -4.84683 24.435 -1.05139 255 -4.99707 24.3884 -1.05058 180 -4.92003 24.402 -1.05048 255 -4.54364 25.6802 -0.961699 144 -8.50823 24.538 -0.956786 229 -8.36345 24.3682 -0.947453 255 -8.25979 24.3149 -0.943685 255 -8.1305 24.31 -0.941622 255 -8.04401 24.305 -0.940187 173 -7.87075 24.2924 -0.937228 122 -7.6737 24.3344 -0.936334 255 -7.7422 24.2855 -0.935166 135 -7.58466 24.3184 -0.93445 255 -7.46705 24.3443 -0.934003 255 -7.38356 24.3447 -0.932927 255 -4.50602 25.0131 -0.931899 150 -7.29898 24.341 -0.931672 255 -7.17965 24.3598 -0.930956 255 -7.09748 24.363 -0.930059 255 -7.01314 24.3583 -0.928804 255 -6.895 24.3796 -0.928268 255 -6.80975 24.3704 -0.926833 255 -6.72568 24.3647 -0.925578 255 -6.64595 24.3741 -0.92504 255 -6.52581 24.3859 -0.924145 255 -6.44507 24.3908 -0.923428 255 -6.36336 24.3916 -0.922532 255 -6.24287 24.4 -0.921547 255 -6.16226 24.404 -0.92083 255 -4.57485 24.7284 -0.91987 193 -6.07973 24.4 -0.919754 255 -5.96422 24.4264 -0.919666 255 -5.88039 24.4159 -0.918321 255 -5.79995 24.4187 -0.917604 255 -5.68074 24.4283 -0.916799 255 -5.59632 24.4129 -0.915274 255 -4.63282 24.6099 -0.915112 255 -5.51783 24.4226 -0.914916 255 -5.43323 24.4047 -0.913302 255 -4.70068 24.5462 -0.912866 255 -5.31604 24.4203 -0.912856 255 -4.89055 24.4948 -0.912235 255 -5.23634 24.4232 -0.912229 255 -4.77469 24.5156 -0.912147 255 -5.15711 24.4278 -0.911691 255 -4.96429 24.4636 -0.911515 255 -5.04031 24.444 -0.911334 255 -8.20686 24.3224 -0.780001 99 -8.00811 24.3633 -0.779079 255 -8.1222 24.3234 -0.779001 99 -4.52663 25.1943 -0.777283 134 -7.90627 24.3104 -0.775922 235 -7.82192 24.3104 -0.774922 229 -7.73524 24.3024 -0.773613 243 -7.61587 24.3233 -0.772999 240 -7.52882 24.3128 -0.771613 245 -7.44657 24.3172 -0.770844 241 -7.325 24.329 -0.769922 240 -7.24172 24.3289 -0.768998 239 -7.15906 24.3305 -0.768152 244 -7.03548 24.3332 -0.766921 246 -6.95353 24.336 -0.766152 252 -6.87163 24.3385 -0.765383 255 -4.54782 24.8614 -0.764803 188 -6.7526 24.3552 -0.764769 255 -6.66923 24.3512 -0.763768 251 -6.59008 24.3624 -0.763384 251 -6.5089 24.3656 -0.762692 248 -6.38745 24.3708 -0.761693 252 -6.30686 24.3753 -0.761077 249 -6.22631 24.3795 -0.760462 244 -6.10459 24.3814 -0.759386 249 -6.02463 24.3869 -0.758848 243 -5.94421 24.3902 -0.758233 242 -5.82505 24.4004 -0.757541 245 -4.59061 24.6564 -0.75733 159 -5.74426 24.4011 -0.756849 245 -5.66488 24.4073 -0.756388 246 -5.58551 24.4133 -0.755927 208 -5.46562 24.4179 -0.755081 215 -4.65548 24.575 -0.754709 186 -5.38589 24.4213 -0.754543 255 -5.30702 24.4283 -0.754159 246 -5.1869 24.4296 -0.753237 241 -4.76175 24.5038 -0.752782 177 -5.10768 24.434 -0.752776 248 -5.03009 24.446 -0.752623 252 -4.91405 24.4655 -0.752471 253 -4.83679 24.4789 -0.752395 255 -8.05827 24.7238 -0.629616 112 -7.94425 24.6368 -0.625814 147 -7.7935 24.5654 -0.622142 129 -4.56675 25.3256 -0.620967 97 -7.67906 24.4715 -0.618146 137 -7.58431 24.4383 -0.616214 141 -7.10335 24.5116 -0.614029 195 -7.36144 24.3957 -0.6128 89 -7.2773 24.3938 -0.611963 78 -7.19779 24.4069 -0.611642 100 -6.99152 24.4128 -0.609969 142 -6.91424 24.4327 -0.609906 174 -6.7942 24.4477 -0.609327 164 -4.58024 24.9533 -0.609234 111 -6.71151 24.4477 -0.608619 182 -6.62943 24.4494 -0.607976 202 -6.54636 24.4469 -0.607204 208 -6.42343 24.4485 -0.606239 221 -6.34105 24.4473 -0.605531 226 -6.26073 24.4535 -0.605081 227 -6.14152 24.4673 -0.604567 234 -6.05835 24.4612 -0.60373 231 -4.62319 24.7502 -0.603044 187 -5.97576 24.4568 -0.602958 238 -5.8595 24.4808 -0.602831 236 -5.77749 24.4777 -0.602123 241 -5.69737 24.4821 -0.601673 242 -5.57972 24.499 -0.601352 244 -5.49832 24.4969 -0.600709 250 -5.417 24.4945 -0.600065 247 -4.68178 24.6354 -0.599755 131 -5.33704 24.4977 -0.599615 244 -5.21818 24.507 -0.599102 242 -5.14035 24.5193 -0.598974 244 -5.06207 24.5295 -0.598782 230 -4.94284 24.5354 -0.598203 112 -4.86262 24.5352 -0.597689 139 -4.78513 24.5484 -0.597626 116 -7.44171 25.8443 -0.520171 58 -7.34359 25.8079 -0.518493 58 -4.68793 25.3286 -0.489441 168 -6.11608 24.8698 -0.485408 56 -4.69865 24.9462 -0.479309 94 -6.39715 24.5119 -0.477873 55 -7.20152 24.2857 -0.477806 113 -6.20151 24.5497 -0.477551 55 -6.47107 24.4801 -0.477547 55 -6.12388 24.5672 -0.477498 55 -6.31316 24.5048 -0.477116 55 -5.83267 24.5455 -0.475064 55 -5.74872 24.5345 -0.474253 55 -5.55147 24.5593 -0.473714 55 -5.62725 24.5359 -0.473551 55 -5.46995 24.5571 -0.473174 55 -5.39235 24.5723 -0.473121 55 -5.27066 24.57 -0.472365 55 -5.10564 24.5518 -0.470959 255 -4.98949 24.5736 -0.470906 255 -5.18235 24.5336 -0.470903 103 -4.83462 24.6025 -0.470855 179 -4.9115 24.5852 -0.470799 255 -6.9336 25.8149 -0.336981 127 -7.00274 25.591 -0.332942 92 -4.87218 25.3195 -0.317725 164 -6.16645 24.9884 -0.316766 90 -6.00333 24.8307 -0.312853 89 -6.19574 24.773 -0.312646 89 -6.89088 24.5784 -0.312431 137 -6.36599 24.6307 -0.310686 89 -4.92219 24.9471 -0.310465 130 -6.23605 24.6062 -0.309546 89 -5.88291 24.6724 -0.309144 89 -5.68174 24.6867 -0.308495 88 -5.79388 24.6421 -0.308126 88 -5.59571 24.6674 -0.307722 88 -5.51732 24.6809 -0.307641 88 -5.31485 24.6844 -0.306829 255 -5.23436 24.6873 -0.306545 255 -5.3885 24.65 -0.306461 88 -5.15514 24.6958 -0.306383 255 -5.03829 24.7179 -0.306344 255 -5.00429 25.1463 -0.19561 150 -5.05604 24.9952 -0.193438 139 -6.76857 24.5806 -0.193315 194 -6.64797 24.5948 -0.193034 208 -6.56554 24.5962 -0.19272 179 -6.48417 24.6013 -0.19247 185 -6.36368 24.6141 -0.192189 199 -6.28337 24.6224 -0.192001 218 -6.12183 24.6342 -0.191564 229 -6.1987 24.6129 -0.191531 227 -5.1101 24.8597 -0.191518 120 -6 24.6394 -0.191188 235 -5.91746 24.6368 -0.190843 232 -5.8359 24.6377 -0.190561 224 -5.71748 24.6552 -0.190406 220 -5.63911 24.6691 -0.190345 216 -5.55852 24.6731 -0.190126 214 -5.43962 24.6873 -0.189939 209 -5.16704 24.7417 -0.189881 150 -5.35992 24.6945 -0.189783 201 -5.2819 24.7092 -0.189753 175 +unknow 0.972409 1 0 4078 -4.39426 0.593487 -1.52278 86 -4.36142 0.799825 -1.52278 86 -4.59346 1.04119 -1.52223 112 -4.5275 1.2915 -1.52156 111 -4.41045 0.420136 -1.52137 82 -4.40253 0.496276 -1.52137 85 -4.37426 0.703111 -1.52136 100 -4.37019 0.716536 -1.52065 114 -4.3584 0.785092 -1.52065 122 -4.68211 0.456688 -1.52022 102 -4.61836 0.895285 -1.52022 93 -4.5944 1.01106 -1.52022 102 -4.42594 -0.0802468 -1.51995 91 -4.42643 -0.0454846 -1.51995 90 -4.39137 0.55797 -1.51995 83 -4.34767 0.832603 -1.51994 119 -4.34503 0.846258 -1.51994 75 -4.66244 -0.612094 -1.51957 98 -4.69991 0.154339 -1.51956 107 -4.6287 0.829564 -1.51955 98 -4.59571 0.996213 -1.51955 103 -4.58936 1.02507 -1.51955 105 -4.49911 1.36786 -1.51954 111 -4.49262 1.38904 -1.51954 117 -4.40277 -0.440919 -1.51925 107 -4.42348 -0.10802 -1.51925 87 -4.42449 0.0518281 -1.51924 89 -4.4163 0.274068 -1.51924 94 -4.40679 0.398808 -1.51924 125 -4.37822 0.640359 -1.51924 91 -4.2196 0.874662 -1.51922 103 -4.6493 -0.692292 -1.5189 126 -4.65562 -0.648443 -1.51889 90 -4.68835 0.338591 -1.51888 110 -4.64953 0.690784 -1.51888 93 -4.4175 -0.219066 -1.51854 98 -4.42292 -0.0107314 -1.51854 98 -4.42179 0.10042 -1.51853 89 -4.42107 0.128201 -1.51853 94 -4.41787 0.211508 -1.51853 94 -4.39663 0.481584 -1.51853 122 -4.39107 0.529898 -1.51853 87 -4.38126 0.605686 -1.51853 114 -4.3589 0.749855 -1.51853 118 -4.35653 0.763544 -1.51853 78 -4.32898 0.906809 -1.51853 114 -4.22971 0.814583 -1.51849 71 -4.66688 -0.545704 -1.51822 95 -4.67413 -0.479676 -1.51822 97 -4.69079 0.272159 -1.51821 107 -4.61969 0.857923 -1.51821 93 -4.59971 0.959298 -1.51821 93 -4.57751 1.06021 -1.5182 109 -4.56206 1.12482 -1.5182 99 -4.50819 1.32431 -1.5182 115 -4.4163 -0.205112 -1.51783 86 -4.42106 0.00315247 -1.51783 87 -4.42034 0.0795368 -1.51783 101 -4.41753 0.176719 -1.51782 91 -4.41029 0.308461 -1.51782 114 -4.39627 0.467561 -1.51782 114 -4.34603 0.811045 -1.51782 111 -4.32997 0.892817 -1.51782 111 -4.64772 -0.67716 -1.51755 91 -4.65488 -0.626016 -1.51755 124 -4.69664 -0.0376691 -1.51754 102 -4.6909 0.235206 -1.51754 107 -4.68351 0.353013 -1.51754 99 -4.66346 0.558596 -1.51754 95 -4.6551 0.624466 -1.51754 98 -4.63197 0.777653 -1.51754 98 -4.60526 0.922763 -1.51753 97 -4.56892 1.0885 -1.51753 96 -4.5476 1.17443 -1.51753 102 -4.52067 1.27414 -1.51753 114 -4.50221 1.33792 -1.51753 111 -4.39987 -0.412756 -1.51712 78 -4.40114 -0.398931 -1.51712 111 -4.40687 -0.329752 -1.51712 93 -4.40885 -0.302056 -1.51712 86 -4.41751 -0.121794 -1.51712 97 -4.41903 0.0378467 -1.51712 98 -4.40532 0.349854 -1.51711 82 -4.38568 0.543208 -1.51711 117 -4.38128 0.577637 -1.51711 124 -4.37466 0.625774 -1.51711 122 -4.36752 0.673838 -1.51711 89 -4.35755 0.735512 -1.51711 113 -4.3323 0.872022 -1.51711 107 -4.32245 0.919606 -1.51711 111 -4.68364 -0.325019 -1.51688 120 -4.69096 -0.192481 -1.51688 110 -4.69376 -0.10403 -1.51687 108 -4.69422 0.0803252 -1.51687 108 -4.67872 0.38962 -1.51687 105 -4.67129 0.470399 -1.51687 101 -4.65981 0.573004 -1.51687 129 -4.64819 0.660732 -1.51687 101 -4.59299 0.972943 -1.51686 137 -4.57049 1.0737 -1.51686 105 -4.48105 1.40086 -1.51686 112 -4.40228 -0.364209 -1.51641 114 -4.41403 -0.170297 -1.51641 122 -4.41455 -0.15643 -1.51641 89 -4.41692 -0.05932 -1.51641 124 -4.41085 0.238926 -1.51641 91 -4.40557 0.322021 -1.51641 114 -4.3947 0.446439 -1.5164 81 -4.36879 0.652961 -1.5164 125 -4.36353 0.687252 -1.5164 92 -4.48232 -0.680333 -1.51627 144 -4.65499 -0.596298 -1.51621 127 -4.67545 -0.405741 -1.51621 100 -4.69301 0.0139413 -1.5162 110 -4.69294 0.0286848 -1.5162 109 -4.69275 0.0508002 -1.5162 112 -4.67559 0.404143 -1.5162 107 -4.66558 0.506858 -1.5162 103 -4.65612 0.587394 -1.51619 97 -4.61143 0.87135 -1.51619 129 -4.60444 0.907542 -1.51619 124 -4.54024 1.18773 -1.51619 103 -4.50896 1.30146 -1.51619 111 -4.40735 -0.267217 -1.5157 125 -4.41315 -0.142511 -1.5157 122 -4.41445 -0.0939794 -1.5157 122 -4.41397 0.114073 -1.5157 122 -4.39422 0.432435 -1.5157 118 -4.76276 -0.618767 -1.51559 122 -4.64422 -0.66179 -1.51554 129 -4.68401 -0.25859 -1.51553 121 -4.69085 -0.0523934 -1.51553 106 -4.68968 0.117077 -1.51553 109 -4.68811 0.168633 -1.51553 103 -4.68239 0.286393 -1.51553 111 -4.68147 0.301102 -1.51553 108 -4.64752 0.638287 -1.51552 137 -4.63803 0.703924 -1.51552 132 -4.5512 1.13727 -1.51552 132 -4.38948 -0.460555 -1.515 106 -4.39296 -0.426067 -1.515 121 -4.4063 -0.253272 -1.51499 90 -4.41346 -0.0315617 -1.51499 129 -4.41107 0.148664 -1.51499 114 -4.41059 0.16252 -1.51499 122 -4.40785 0.224855 -1.51499 125 -4.40423 0.287144 -1.51499 111 -4.38344 0.514954 -1.51499 118 -4.32952 0.857285 -1.51498 114 -4.79375 0.261953 -1.51493 106 -4.73606 0.786406 -1.51492 113 -4.65976 1.15557 -1.51492 110 -4.47732 0.688299 -1.51487 151 -4.66165 -0.508066 -1.51486 100 -4.68714 -0.140753 -1.51486 109 -4.68841 -0.0892065 -1.51486 106 -4.67487 0.367093 -1.51485 138 -4.66022 0.521074 -1.51485 101 -4.64957 0.608819 -1.51485 132 -4.6405 0.674487 -1.51485 126 -4.6328 0.72547 -1.51485 96 -4.6305 0.74002 -1.51485 120 -4.62815 0.754565 -1.51485 127 -4.59349 0.942899 -1.51485 133 -4.52714 1.22235 -1.51485 132 -4.39552 -0.377591 -1.51429 110 -4.3978 -0.349966 -1.51429 118 -4.40521 -0.239338 -1.51429 131 -4.41167 0.0169497 -1.51428 122 -4.41122 0.0654566 -1.51428 129 -4.4073 0.19706 -1.51428 121 -4.74762 -0.700394 -1.51428 115 -4.75504 -0.648149 -1.51428 121 -4.39617 0.369938 -1.51428 105 -4.78495 0.367166 -1.51427 106 -4.76597 0.562224 -1.51427 122 -4.74255 0.734007 -1.51426 120 -4.65213 -0.573695 -1.51419 97 -4.66649 -0.441948 -1.51419 101 -4.67227 -0.375934 -1.51419 100 -4.68428 -0.170142 -1.51419 108 -4.68587 -0.118626 -1.51419 108 -4.68689 -0.0670958 -1.51419 105 -4.68737 -0.000831714 -1.51419 120 -4.66867 0.418296 -1.51418 97 -4.46048 0.779265 -1.51418 152 -4.76365 -0.565663 -1.51362 124 -4.70531 0.934065 -1.5136 114 -4.6256 1.27132 -1.5136 102 -4.39855 -0.315292 -1.51358 118 -4.40221 0.259224 -1.51357 122 -4.39313 0.383573 -1.51357 118 -4.6632 -0.456432 -1.51352 127 -4.67753 -0.273005 -1.51352 112 -4.67953 -0.23626 -1.51352 105 -4.68025 -0.221557 -1.51352 110 -4.68092 -0.206853 -1.51352 111 -4.68291 -0.155372 -1.51352 112 -4.68503 0.0653947 -1.51351 102 -4.68191 0.183108 -1.51351 102 -4.67886 0.249277 -1.51351 107 -4.66478 0.440103 -1.51351 131 -4.66042 0.484047 -1.51351 133 -4.61837 0.790234 -1.51351 120 -4.60941 0.840966 -1.51351 124 -4.54033 1.15728 -1.5135 103 -4.51575 1.24975 -1.5135 105 -4.47166 -0.700242 -1.5135 145 -4.49652 -0.517084 -1.5135 150 -4.76771 -0.513039 -1.51296 130 -4.79427 0.096086 -1.51296 99 -4.78492 0.314304 -1.51295 129 -4.71344 0.881936 -1.51295 121 -4.69598 0.970619 -1.51295 119 -4.65017 -0.558648 -1.51285 128 -4.67132 -0.338976 -1.51285 114 -4.68249 0.102137 -1.51284 108 -4.68176 0.131555 -1.51284 103 -4.67845 0.219775 -1.51284 104 -4.67248 0.322597 -1.51284 106 -4.5274 1.19953 -1.51283 98 -4.51784 1.23505 -1.51283 102 -4.48538 1.34819 -1.51283 109 -4.48221 -0.615569 -1.51281 158 -4.52083 -0.176824 -1.5128 177 -4.46392 0.736601 -1.51279 168 -4.4592 0.764635 -1.51279 168 -4.43156 0.911285 -1.51279 154 -4.7442 -0.684636 -1.51231 120 -4.7815 0.336726 -1.5123 130 -4.75387 0.613899 -1.51229 126 -4.73462 0.748047 -1.51229 122 -4.72611 0.800061 -1.51229 115 -4.66223 -0.426802 -1.51218 133 -4.66543 -0.390172 -1.51218 148 -4.6817 -0.0155714 -1.51217 106 -4.67755 0.197636 -1.51217 105 -4.39716 -0.28052 -1.51216 114 -4.40197 -0.190677 -1.51216 114 -4.39335 0.33494 -1.51215 100 -4.50358 0.412254 -1.5121 181 -4.46771 0.701239 -1.5121 155 -4.46549 0.715273 -1.5121 158 -4.43947 0.862158 -1.5121 138 -4.74957 -0.632171 -1.51165 117 -4.75623 -0.57991 -1.51165 119 -4.76783 -0.475184 -1.51165 119 -4.78492 -0.250062 -1.51165 110 -4.79135 -0.03191 -1.51164 101 -4.75667 0.576328 -1.51164 125 -4.74285 0.680784 -1.51164 126 -4.6953 0.955129 -1.51163 121 -4.6892 0.984611 -1.51163 118 -4.66642 1.08748 -1.51163 122 -4.63762 1.20441 -1.51163 115 -4.59537 1.3567 -1.51163 137 -4.65066 -0.52171 -1.51151 128 -4.66647 -0.353387 -1.51151 136 -4.61031 0.803737 -1.51149 128 -4.54729 1.10592 -1.51149 127 -4.47146 -0.664242 -1.51142 146 -4.48845 -0.537566 -1.51142 162 -4.48019 0.602589 -1.51141 151 -4.4773 0.623694 -1.51141 148 -4.47532 0.637758 -1.51141 159 -4.44426 0.826931 -1.51141 154 -4.425 0.924457 -1.51141 159 -4.74259 -0.66918 -1.51099 120 -4.78937 0.043346 -1.51098 107 -4.76084 0.523794 -1.51098 113 -4.75296 0.591044 -1.51098 121 -4.74413 0.658175 -1.51098 122 -4.73881 0.695416 -1.51098 122 -4.71061 0.866129 -1.51098 119 -4.65589 1.12367 -1.51097 120 -4.62619 1.24032 -1.51097 130 -4.66772 -0.309276 -1.51083 115 -4.66912 -0.287278 -1.51083 113 -4.48312 -0.565512 -1.51073 148 -4.51368 -0.212028 -1.51073 179 -4.51851 0.0363179 -1.51072 178 -4.51721 0.114383 -1.51072 175 -4.51291 0.227865 -1.51072 185 -4.51178 0.249129 -1.51072 167 -4.49852 0.426068 -1.51072 160 -4.76178 -0.497234 -1.51033 121 -4.7833 -0.204772 -1.51033 142 -4.78767 -0.00930346 -1.51033 126 -4.78732 0.0583795 -1.51033 130 -4.78639 0.111014 -1.51033 130 -4.78209 0.231261 -1.51033 128 -4.69894 0.91752 -1.51032 127 -4.6744 1.03531 -1.51032 127 -4.63771 1.18892 -1.51032 101 -4.59808 1.334 -1.51031 103 -4.57656 1.40606 -1.51031 108 -4.6501 -0.492103 -1.51016 134 -4.64547 0.534132 -1.51015 133 -4.48302 -0.551185 -1.51004 143 -4.51678 0.000840522 -1.51003 184 -4.51326 0.178166 -1.51003 167 -4.50107 0.376434 -1.51003 170 -4.48016 0.573972 -1.51002 158 -4.46958 0.651293 -1.51002 157 -4.43662 0.847181 -1.51002 146 -4.43121 0.875041 -1.51002 144 -4.42704 0.895913 -1.51002 166 -4.77623 -0.302269 -1.50967 104 -4.77716 -0.287263 -1.50967 133 -4.78337 -0.152096 -1.50967 128 -4.78413 0.12601 -1.50967 136 -4.78371 0.141039 -1.50967 105 -4.7809 0.216161 -1.50967 98 -4.74243 0.642782 -1.50966 120 -4.71354 0.828472 -1.50966 117 -4.62832 1.21756 -1.50966 123 -4.60043 1.31904 -1.50966 138 -4.46796 -0.64935 -1.50935 145 -4.46998 -0.635311 -1.50935 153 -4.47669 -0.586124 -1.50934 171 -4.49494 -0.424041 -1.50934 163 -4.51379 0.100131 -1.50934 168 -4.50306 0.326795 -1.50933 175 -4.48267 0.538556 -1.50933 160 -4.44382 0.798027 -1.50933 146 -4.44129 0.811985 -1.50933 145 -4.7632 -0.444475 -1.50902 128 -4.76901 -0.377095 -1.50902 124 -4.77183 -0.339628 -1.50902 106 -4.78057 0.178545 -1.50901 96 -4.76685 0.403542 -1.50901 102 -4.76353 0.440968 -1.50901 123 -4.75917 0.485843 -1.50901 120 -4.71425 0.813348 -1.509 119 -4.70772 0.850349 -1.509 121 -4.67393 1.01984 -1.509 128 -4.64683 1.13697 -1.509 131 -4.60273 1.30408 -1.509 104 -4.48508 -0.501422 -1.50865 143 -4.51054 0.149703 -1.50864 161 -4.50315 0.298382 -1.50864 145 -4.49612 0.390268 -1.50864 183 -4.48247 0.524262 -1.50864 162 -4.47462 0.587577 -1.50864 154 -4.4638 0.664801 -1.50864 157 -4.75294 -0.526489 -1.50836 119 -4.77099 -0.324496 -1.50836 136 -4.77626 -0.234513 -1.50836 136 -4.77855 -0.181982 -1.50836 93 -4.78139 -0.0768615 -1.50836 105 -4.77922 0.163473 -1.50835 135 -4.75495 0.508074 -1.50835 117 -4.75166 0.53794 -1.50835 124 -4.74068 0.627405 -1.50835 119 -4.67684 0.997417 -1.50835 123 -4.66559 1.04878 -1.50835 122 -4.65378 1.10002 -1.50834 121 -4.63776 1.1657 -1.50834 132 -4.58202 1.36848 -1.50834 106 -4.5777 1.38287 -1.50834 134 -4.47111 -0.599664 -1.50796 146 -4.48477 -0.487115 -1.50796 159 -4.50264 0.277055 -1.50795 161 -4.48757 0.460662 -1.50795 160 -4.4861 0.474757 -1.50795 176 -4.44862 0.748517 -1.50794 163 -4.77238 -0.2719 -1.5077 115 -4.77909 -0.0993437 -1.5077 133 -4.77972 -0.0618062 -1.5077 127 -4.78012 0.00577072 -1.5077 128 -4.7708 0.29841 -1.5077 129 -4.76433 0.388279 -1.50769 133 -4.75691 0.470537 -1.50769 127 -4.60316 1.28861 -1.50769 132 -4.48441 -0.472817 -1.50727 148 -4.48659 -0.451678 -1.50727 155 -4.48799 -0.437582 -1.50727 150 -4.49544 -0.352913 -1.50726 158 -4.49757 -0.324661 -1.50726 178 -4.50289 -0.239831 -1.50726 180 -4.5075 -0.126597 -1.50726 167 -4.50884 -0.0628642 -1.50726 180 -4.50901 -0.0486978 -1.50726 170 -4.5063 0.163758 -1.50726 157 -4.50488 0.199145 -1.50726 167 -4.49845 0.31229 -1.50726 160 -4.47537 0.551978 -1.50725 171 -4.77687 -0.114301 -1.50704 130 -4.778 -0.0467612 -1.50704 136 -4.76535 0.35072 -1.50704 140 -4.71731 0.760594 -1.50703 122 -4.69252 0.901021 -1.50703 119 -4.65691 1.06993 -1.50703 122 -4.49186 -0.373926 -1.50657 168 -4.506 -0.112379 -1.50657 168 -4.50658 0.0858489 -1.50657 173 -4.50557 0.128318 -1.50657 170 -4.49974 0.26271 -1.50656 172 -4.49287 0.361594 -1.50656 169 -4.48595 0.439165 -1.50656 161 -4.48085 0.488463 -1.50656 163 -4.4793 0.502538 -1.50656 166 -4.7394 -0.592892 -1.50639 116 -4.74478 -0.548198 -1.50639 123 -4.75706 -0.428789 -1.50639 120 -4.77459 -0.129246 -1.50639 128 -4.7763 0.0207911 -1.50638 138 -4.77578 0.0733068 -1.50638 133 -4.76794 0.283216 -1.50638 126 -4.75803 0.417896 -1.50638 127 -4.72352 0.708409 -1.50638 120 -4.48755 -0.401963 -1.50588 175 -4.48879 -0.387864 -1.50588 161 -4.49482 -0.310249 -1.50588 164 -4.50151 -0.190126 -1.50588 184 -4.5031 -0.147693 -1.50588 165 -4.50486 -0.0769421 -1.50588 166 -4.50506 0.0645954 -1.50587 178 -4.50048 0.213139 -1.50587 170 -4.74807 1.4014 -1.50587 100 -4.75239 -0.458477 -1.50573 130 -4.75714 -0.406197 -1.50573 119 -4.76942 -0.21912 -1.50573 109 -4.77155 -0.166665 -1.50573 117 -4.77054 0.193234 -1.50572 134 -4.49436 -0.288934 -1.50519 170 -4.50362 0.0150624 -1.50518 158 -4.50336 0.0504328 -1.50518 169 -4.75944 -0.353715 -1.50507 134 -4.49422 -0.26057 -1.50449 172 -4.49613 -0.225264 -1.50449 171 -4.49886 -0.161682 -1.50449 172 -4.5007 -0.0980673 -1.50449 173 -4.48891 0.340024 -1.50449 164 -4.75463 -0.390919 -1.50442 130 -4.76436 0.245501 -1.50441 135 -4.74896 0.454742 -1.50441 129 -4.75773 1.34753 -1.50396 100 -4.49981 -0.0273392 -1.5038 168 -4.49987 -0.0132024 -1.5038 189 -4.60219 1.24951 -1.50374 131 -4.86708 0.862898 -1.50333 90 -4.83274 1.03813 -1.50332 94 -4.82945 1.05331 -1.50332 98 -4.48963 -0.274437 -1.50311 180 -4.89576 -0.667712 -1.50271 90 -4.92178 -0.436351 -1.5027 98 -4.88301 0.755365 -1.50269 97 -4.7686 1.29413 -1.50269 100 -4.80685 1.13571 -1.50205 82 -4.48157 -0.337574 -1.50172 173 -4.90549 -0.559486 -1.50143 87 -4.88944 0.685714 -1.50142 95 -4.83518 0.998967 -1.50142 79 -4.8172 1.08236 -1.50142 92 -4.90091 -0.582383 -1.5008 92 -4.92647 -0.296722 -1.50079 95 -4.93408 0.11397 -1.50079 95 -4.91785 0.415834 -1.50079 100 -4.89962 0.593196 -1.50078 90 -4.89773 0.608586 -1.50078 90 -4.89074 0.662401 -1.50078 92 -4.74437 1.35981 -1.50078 98 -5.87219 1.29015 -1.50058 34 -4.89332 -0.628316 -1.50016 84 -4.89293 0.631406 -1.50015 92 -4.87313 0.76948 -1.50015 92 -4.86437 0.823014 -1.50015 92 -4.81688 1.06638 -1.50014 92 -4.79592 1.15698 -1.50014 92 -4.79226 1.17204 -1.50014 87 -4.88424 -0.681828 -1.49953 78 -4.88843 -0.651126 -1.49953 89 -4.93096 -0.0797872 -1.49952 98 -4.92202 0.307335 -1.49951 94 -4.92052 0.330527 -1.49951 92 -4.91834 0.361437 -1.49951 100 -4.91658 0.38461 -1.49951 94 -4.89769 0.577337 -1.49951 100 -4.87599 0.738552 -1.49951 81 -4.86881 0.784473 -1.49951 92 -4.85039 0.891347 -1.49951 84 -4.84324 0.929412 -1.49951 81 -4.8373 0.959825 -1.49951 86 -4.78107 1.20917 -1.49951 74 -4.74918 1.32894 -1.4995 98 -5.03626 -0.689044 -1.49927 98 -4.9161 -0.365943 -1.49889 98 -4.92611 -0.188134 -1.49888 103 -4.92801 0.129291 -1.49888 97 -4.88717 0.646257 -1.49888 92 -4.86319 0.807088 -1.49887 92 -4.8513 0.875756 -1.49887 92 -4.83843 0.94425 -1.49887 90 -4.77542 1.2237 -1.49887 95 -4.76167 1.27614 -1.49887 98 -5.03963 -0.649216 -1.49865 95 -5.02429 0.758903 -1.49863 101 -5.00083 0.900639 -1.49863 104 -4.90347 -0.489192 -1.49825 87 -4.91534 -0.350373 -1.49825 100 -4.92107 -0.257665 -1.49825 94 -4.9278 -0.0100837 -1.49825 94 -4.92348 0.20659 -1.49824 103 -4.9016 0.507633 -1.49824 90 -4.85616 0.837296 -1.49824 92 -4.82901 0.981833 -1.49824 100 -4.76972 1.23821 -1.49823 92 -5.03788 0.648006 -1.49801 101 -5.00587 0.861023 -1.49801 102 -4.96655 1.06469 -1.49801 101 -4.88116 1.40514 -1.49801 117 -4.88964 -0.596678 -1.49762 76 -4.91604 -0.311648 -1.49761 98 -4.92484 -0.102934 -1.49761 94 -4.92583 0.028598 -1.49761 100 -4.92572 0.0440718 -1.49761 92 -4.92091 0.221963 -1.49761 95 -4.90968 0.399562 -1.49761 92 -4.90708 0.430402 -1.4976 87 -4.89643 0.538202 -1.4976 98 -4.89384 0.56127 -1.4976 84 -4.87379 0.714711 -1.4976 100 -4.84055 0.913108 -1.4976 99 -4.762 1.26018 -1.4976 100 -4.72883 1.37945 -1.4976 101 -5.06718 -0.323268 -1.49741 111 -5.05068 0.521014 -1.4974 105 -5.0473 0.552737 -1.4974 99 -4.9012 -0.47344 -1.49698 100 -4.90611 -0.419521 -1.49698 87 -4.91601 -0.280655 -1.49698 98 -4.9188 -0.226585 -1.49698 101 -4.92116 0.167768 -1.49697 98 -4.91753 0.252769 -1.49697 96 -4.91539 0.291383 -1.49697 100 -4.81904 1.01136 -1.49696 98 -4.99236 0.915344 -1.49677 107 -4.97422 1.00928 -1.49677 95 -4.89895 1.32732 -1.49677 112 -4.90552 -0.403961 -1.49634 99 -4.91617 -0.241955 -1.49634 108 -4.91792 -0.203335 -1.49634 100 -4.9191 -0.172431 -1.49634 103 -4.91986 -0.14925 -1.49634 102 -4.9217 -0.064222 -1.49634 92 -4.92188 -0.0487606 -1.49634 97 -4.92176 0.0594816 -1.49634 86 -4.87226 0.698839 -1.49633 86 -4.74626 1.30398 -1.49632 98 -5.03411 -0.632393 -1.49617 119 -5.04679 -0.521545 -1.49617 95 -5.05375 0.449245 -1.49616 104 -4.93267 1.18786 -1.49615 103 -4.91538 1.25747 -1.49615 143 -4.90547 -0.380703 -1.49571 82 -4.91841 -0.13375 -1.4957 100 -4.9188 -0.118298 -1.4957 100 -4.91682 0.183066 -1.4957 100 -4.9125 0.275707 -1.4957 92 -4.90811 0.345126 -1.4957 94 -4.79543 1.10114 -1.49569 87 -4.79195 1.1162 -1.49569 97 -4.77569 1.18383 -1.49569 105 -5.03887 -0.576779 -1.49555 91 -5.0708 0.0991344 -1.49554 104 -5.06671 0.226532 -1.49554 100 -5.04334 0.536305 -1.49554 106 -5.03714 0.591725 -1.49554 103 -5.37399 1.27649 -1.49534 105 -4.88021 -0.611133 -1.49507 96 -4.89004 -0.526724 -1.49507 81 -4.89247 -0.503674 -1.49507 90 -4.90747 -0.326626 -1.49507 100 -4.91826 -0.0255659 -1.49507 95 -4.91262 0.237015 -1.49506 90 -4.896 0.468167 -1.49506 78 -4.8945 0.483546 -1.49506 81 -5.0209 -0.702951 -1.49494 130 -5.0405 -0.544893 -1.49493 125 -5.05127 -0.433923 -1.49493 102 -5.06794 -0.13978 -1.49493 108 -5.06968 -0.044234 -1.49493 106 -5.06987 0.00354846 -1.49493 113 -5.05333 0.409252 -1.49492 99 -5.04852 0.464791 -1.49492 101 -5.03337 0.607328 -1.49492 99 -5.03045 0.631042 -1.49492 129 -5.01651 0.733626 -1.49492 133 -4.97177 0.992561 -1.49492 131 -4.96543 1.02378 -1.49492 130 -4.96055 1.04717 -1.49492 103 -5.47963 -0.679428 -1.49479 94 -4.88648 -0.541884 -1.49444 99 -4.88867 0.521761 -1.49442 87 -5.02333 -0.671128 -1.49432 133 -5.03326 -0.592141 -1.49432 126 -5.06218 0.242286 -1.49431 139 -5.05269 0.393236 -1.4943 105 -5.04514 0.480478 -1.4943 130 -5.04282 0.504247 -1.4943 103 -5.03519 0.575486 -1.4943 130 -5.00626 0.788453 -1.4943 99 -4.99992 0.827748 -1.4943 124 -4.97452 0.968767 -1.4943 93 -4.9434 1.11678 -1.4943 105 -4.91764 1.22521 -1.4943 109 -4.90588 1.2715 -1.4943 102 -4.89574 1.30999 -1.4943 121 -4.88104 1.36374 -1.49429 115 -5.38397 1.21646 -1.4942 101 -5.29101 -0.680474 -1.49418 95 -4.91219 0.151963 -1.49379 92 -5.02852 -0.615613 -1.4937 120 -5.04465 -0.465284 -1.4937 121 -5.04946 -0.409789 -1.49369 134 -5.05073 -0.393923 -1.49369 113 -5.05194 -0.378054 -1.49369 104 -5.0531 -0.362181 -1.49369 101 -5.0623 -0.195329 -1.49369 110 -5.06508 -0.0998786 -1.49369 108 -5.06538 0.083139 -1.49369 105 -5.06476 0.114964 -1.49369 104 -5.05822 0.281941 -1.49369 102 -5.02261 0.662159 -1.49368 131 -5.01943 0.685818 -1.49368 102 -4.94674 1.09307 -1.49368 137 -4.92896 1.17063 -1.49368 134 -4.8749 1.37856 -1.49368 117 -5.47998 -0.644556 -1.49365 85 -4.91264 0.00529983 -1.49316 92 -4.89178 0.452231 -1.49315 104 -5.0331 -0.560065 -1.49308 118 -5.48297 -0.601297 -1.49308 93 -5.05488 -0.306475 -1.49307 108 -5.06178 -0.155497 -1.49307 107 -5.06382 0.0592547 -1.49307 106 -5.05395 0.321548 -1.49307 108 -4.97677 0.936807 -1.49306 98 -4.9738 0.952437 -1.49306 123 -4.93615 1.13147 -1.49306 104 -5.36047 1.29996 -1.49306 104 -5.26828 0.813841 -1.49298 115 -5.47412 -0.661326 -1.4925 121 -5.48292 -0.583875 -1.4925 125 -5.38589 1.18135 -1.49248 97 -5.03862 -0.488664 -1.49246 89 -5.05523 -0.266654 -1.49246 103 -5.05717 -0.226942 -1.49246 99 -5.06157 -0.0838829 -1.49245 106 -5.06181 -0.067981 -1.49245 106 -5.06225 -0.0123216 -1.49245 135 -5.0579 0.210268 -1.49245 104 -5.05351 0.297626 -1.49245 131 -5.05101 0.337306 -1.49245 102 -5.04443 0.424526 -1.49245 139 -5.01349 0.701077 -1.49244 132 -5.01126 0.716824 -1.49244 101 -5.00307 0.771881 -1.49244 130 -4.99686 0.81115 -1.49244 119 -4.98489 0.881708 -1.49244 124 -4.93072 1.14655 -1.49244 102 -4.90823 1.23928 -1.49244 102 -4.89431 1.29318 -1.49244 138 -5.28949 -0.646493 -1.49241 111 -5.20311 1.1508 -1.49239 105 -5.35265 1.31586 -1.49191 102 -4.88756 -0.456709 -1.49189 82 -4.90788 0.0977989 -1.49188 74 -5.05415 -0.250668 -1.49184 106 -5.06029 0.0274366 -1.49183 109 -5.06018 0.043334 -1.49183 113 -5.05693 0.18637 -1.49183 110 -4.87796 1.34642 -1.49182 112 -5.21699 1.07676 -1.4918 95 -5.36885 1.23962 -1.49134 101 -5.336 1.37415 -1.49134 110 -4.90639 0.0746314 -1.49125 105 -5.05057 -0.282302 -1.49122 105 -5.05695 -0.123521 -1.49122 112 -5.05838 -0.0281833 -1.49122 97 -5.05559 0.170429 -1.49121 133 -5.05148 0.265689 -1.49121 105 -5.04613 0.352926 -1.49121 140 -5.17283 1.26405 -1.49121 120 -4.91411 1.19981 -1.4912 115 -5.47245 -0.626291 -1.49079 123 -5.36306 1.25603 -1.49077 99 -5.28581 -0.629167 -1.49064 101 -5.28871 -0.604251 -1.49064 102 -5.28159 0.663663 -1.49062 108 -5.14194 1.37701 -1.49062 124 -5.03139 -0.503895 -1.4906 126 -5.04527 -0.337681 -1.4906 136 -5.05216 -0.210787 -1.4906 138 -5.34291 1.33125 -1.4902 110 -5.32795 1.38992 -1.4902 114 -5.12417 -0.690993 -1.49009 72 -5.06203 1.05382 -1.49007 82 -5.27758 0.680016 -1.49003 104 -5.26744 0.754557 -1.49003 103 -5.20276 1.11652 -1.49003 109 -5.18269 1.20625 -1.49003 105 -5.15074 1.33611 -1.49003 119 -5.03473 -0.448364 -1.48998 127 -5.05149 -0.178962 -1.48998 107 -5.05276 0.138576 -1.48998 107 -5.04121 0.368521 -1.48997 104 -4.98415 0.841302 -1.48997 104 -4.93899 1.07515 -1.48997 121 -5.37281 1.19614 -1.48963 96 -5.33685 1.34755 -1.48962 120 -5.25946 0.795626 -1.48944 117 -5.21285 1.05888 -1.48944 110 -5.1712 1.24648 -1.48944 111 -5.05039 0.154399 -1.48936 101 -5.92916 -0.69551 -1.48895 75 -5.28671 -0.570368 -1.48887 134 -5.06482 1.02122 -1.48886 78 -5.266 0.737492 -1.48885 111 -5.24305 0.88607 -1.48885 109 -5.20422 1.09123 -1.48885 151 -5.19549 1.13207 -1.48885 108 -5.18644 1.17284 -1.48885 110 -5.37829 1.15308 -1.48848 131 -5.27417 -0.661377 -1.48828 130 -5.1114 0.741085 -1.48826 75 -5.04801 1.09231 -1.48826 77 -5.26784 0.695629 -1.48767 112 -5.25748 0.77003 -1.48767 103 -5.24203 0.868988 -1.48767 99 -5.1695 1.22893 -1.48767 111 -5.15769 1.27759 -1.48767 119 -5.1475 1.31806 -1.48767 119 -5.0823 0.908913 -1.48765 79 -4.98912 1.32839 -1.48765 85 -5.64389 -0.668225 -1.48743 102 -5.92868 -0.648318 -1.48736 75 -5.27919 -0.586312 -1.4871 91 -5.2468 0.827503 -1.48708 108 -5.14976 1.30142 -1.48708 119 -5.13514 1.35797 -1.48707 120 -5.05599 1.03595 -1.48704 78 -5.17527 1.18745 -1.48649 114 -5.11497 -0.673457 -1.48646 75 -5.12854 -0.560817 -1.48646 75 -5.14824 -0.334784 -1.48645 81 -5.02283 1.17803 -1.48644 85 -4.99973 1.27249 -1.48644 84 -5.25994 0.711435 -1.4859 99 -5.12281 1.38922 -1.48589 131 -5.15162 0.240172 -1.48584 89 -5.09541 0.796027 -1.48584 76 -5.64324 -0.623218 -1.48577 113 -5.26757 0.636785 -1.48531 103 -5.23718 0.851325 -1.48531 107 -5.12297 -0.576521 -1.48524 69 -5.14945 -0.245621 -1.48524 82 -5.069 0.939401 -1.48523 79 -5.05836 0.99508 -1.48523 70 -5.00588 1.23226 -1.48522 81 -4.97757 1.34203 -1.48522 84 -5.63414 -0.68499 -1.48521 137 -5.5311 1.27269 -1.48519 114 -5.91703 -0.665905 -1.48471 79 -5.11443 -0.632589 -1.48464 67 -5.11639 -0.616519 -1.48464 74 -5.12871 -0.503864 -1.48464 79 -5.13027 -0.487749 -1.48464 80 -5.14994 -0.188925 -1.48463 84 -5.04025 1.074 -1.48462 77 -5.26575 0.619807 -1.48413 114 -5.20089 1.03104 -1.48413 100 -5.62815 -0.702192 -1.4841 105 -5.63553 -0.640266 -1.4841 137 -5.53132 1.25447 -1.48408 152 -5.13061 -0.463406 -1.48403 86 -5.13342 -0.43116 -1.48403 84 -5.139 -0.358549 -1.48403 81 -5.14485 -0.261623 -1.48403 89 -5.14741 -0.205039 -1.48403 86 -5.13939 0.352974 -1.48402 84 -5.14484 -0.221135 -1.48342 84 -5.14745 -0.148382 -1.48342 81 -5.14828 -0.116038 -1.48342 86 -5.14947 -0.0351578 -1.48342 85 -5.14959 -0.00280309 -1.48342 81 -5.14957 0.0133762 -1.48342 88 -5.11327 0.610516 -1.48341 77 -5.10832 0.650658 -1.48341 73 -5.10413 0.682742 -1.48341 74 -5.09397 0.754828 -1.48341 79 -5.07884 0.850707 -1.48341 73 -5.06631 0.922419 -1.48341 77 -4.95702 1.39511 -1.48341 93 -5.53342 1.22758 -1.48298 110 -5.51958 1.28835 -1.48298 125 -5.50929 1.33166 -1.48297 126 -5.50508 1.34896 -1.48297 122 -5.13284 -0.39056 -1.48282 80 -5.14599 -0.132172 -1.48281 82 -5.14686 -0.0917504 -1.48281 85 -5.14498 0.166965 -1.48281 73 -5.05703 0.961815 -1.4828 75 -5.01899 1.14385 -1.4828 77 -5.01538 1.15961 -1.4828 81 -5.00611 1.19897 -1.4828 80 -4.96598 1.35562 -1.4828 89 -5.2195 0.899071 -1.48236 99 -5.11951 -0.519243 -1.48221 75 -5.12634 -0.446818 -1.48221 83 -5.14288 -0.172529 -1.48221 82 -5.14422 0.126495 -1.48221 88 -5.13816 0.279946 -1.4822 79 -5.10755 0.626095 -1.4822 78 -5.05212 0.977327 -1.4822 80 -5.51177 1.30481 -1.48187 122 -5.49709 1.36534 -1.48187 125 -5.19975 0.99694 -1.48177 93 -5.13024 -0.374176 -1.48161 87 -5.13502 -0.301614 -1.4816 89 -5.13638 -0.277412 -1.4816 85 -5.14384 -0.0189877 -1.4816 83 -5.14373 0.0375706 -1.4816 87 -5.14359 0.0537301 -1.4816 90 -5.0952 0.705972 -1.48159 73 -5.02061 1.11934 -1.48159 73 -4.9909 1.24515 -1.48159 82 -4.95587 1.37797 -1.48159 86 -5.10106 -0.647271 -1.481 82 -5.12589 -0.406262 -1.481 85 -5.13214 -0.317636 -1.481 85 -5.14162 -0.0593738 -1.481 81 -5.14149 0.0698535 -1.48099 88 -5.13097 0.336155 -1.48099 81 -5.06863 0.865336 -1.48099 86 -4.99677 1.21331 -1.48098 78 -5.79853 1.29276 -1.48098 75 -5.79237 1.32007 -1.48098 94 -5.78397 1.35644 -1.48098 90 -5.77564 1.38322 -1.48045 77 -5.77126 1.40136 -1.48045 90 -5.10598 -0.590935 -1.4804 83 -5.13786 0.150538 -1.48039 79 -5.13155 0.295728 -1.48039 77 -5.12249 0.424591 -1.48038 75 -5.119 0.464808 -1.48038 71 -5.11752 0.480889 -1.48038 75 -5.08094 0.777336 -1.48038 77 -5.06262 0.888874 -1.48038 69 -4.97322 1.29897 -1.48038 85 -5.48499 1.38983 -1.4802 126 -5.1376 -0.0754899 -1.47978 78 -5.13697 0.110132 -1.47978 82 -5.12869 0.311724 -1.47978 83 -5.10381 0.593073 -1.47978 77 -5.07021 0.832836 -1.47977 68 -5.18909 1.01184 -1.47941 128 -5.1324 0.198787 -1.47918 73 -5.1106 0.512633 -1.47917 73 -5.0722 0.808624 -1.47917 80 -5.10563 -0.542212 -1.47858 80 -5.13348 0.093903 -1.47857 78 -5.12115 0.367803 -1.47857 75 -4.97175 1.28189 -1.47856 84 -5.24868 0.601179 -1.47823 107 -5.5241 1.18922 -1.47799 167 -5.52033 1.20657 -1.47799 113 -5.1261 0.254999 -1.47796 77 -5.08925 0.664395 -1.47796 81 -5.08164 0.720314 -1.47796 83 -5.89616 -0.626176 -1.47782 72 -5.09898 0.568132 -1.47735 77 -5.77506 1.33516 -1.47727 68 -5.10055 0.535875 -1.47675 77 -5.09695 0.551682 -1.47614 78 -5.00737 1.09979 -1.47614 85 -5.11998 0.222417 -1.47554 82 -5.19261 0.919769 -1.47528 79 -5.18218 0.976807 -1.47527 118 -5.10857 0.382977 -1.47493 88 -5.10671 0.407045 -1.47493 70 -5.24005 0.575243 -1.47469 107 -5.18485 0.952042 -1.47468 107 -5.11586 0.181966 -1.47372 87 -5.10026 0.438777 -1.47372 82 -5.09323 0.494636 -1.47311 83 -6.00143 -0.68308 -1.46868 97 -5.16334 0.931458 -1.46701 98 -5.99587 -0.663338 -1.46661 100 -5.21524 -0.53744 -1.46585 101 -5.98775 -0.700533 -1.46558 119 -6.176 -0.665301 -1.4649 94 -6.29273 1.37002 -1.46429 32 -5.2266 -0.331885 -1.46408 105 -5.87804 1.31252 -1.464 111 -5.88227 1.2844 -1.46348 147 -5.8678 1.349 -1.46348 109 -5.85702 1.39505 -1.46348 111 -5.87012 1.33015 -1.46297 109 -6.16618 -0.683879 -1.46289 128 -6.16843 -0.644929 -1.46238 93 -5.85788 1.36614 -1.46193 112 -6.0536 1.33996 -1.46186 26 -6.03473 1.40554 -1.46085 124 -6.0394 1.37665 -1.46035 117 -5.86927 1.26234 -1.45882 142 -6.0286 1.35421 -1.45632 163 -6.24669 1.38074 -1.4536 177 -5.15248 0.549699 -1.44695 110 -5.23577 1.10461 -1.44388 109 -5.1512 -0.342977 -1.44106 93 -5.07627 -0.506302 -1.42217 71 -5.07023 -0.489578 -1.41981 80 -5.07392 -0.449743 -1.41981 118 -5.07902 -0.361864 -1.41922 130 -5.0715 -0.433455 -1.41863 106 -5.05536 -0.464021 -1.4145 103 -5.05881 -0.376303 -1.41332 92 -5.05189 -0.41569 -1.41214 86 -5.04999 -0.391563 -1.41096 111 -4.99823 0.51816 -1.39856 99 -5.00396 0.391971 -1.39679 68 -5.07191 1.03593 -1.39184 93 -5.06301 1.05067 -1.39013 96 -4.96637 0.491391 -1.38793 114 -5.12807 -0.531498 -1.38557 76 -5.04858 1.00626 -1.38327 98 -5.26896 -0.56339 -1.37656 64 -4.9435 -0.296902 -1.37614 64 -4.91606 0.455521 -1.37141 127 -4.91175 0.439593 -1.36964 106 -4.90362 0.400131 -1.3661 123 -4.89177 0.468895 -1.36433 128 -5.04847 -0.499632 -1.36098 75 -4.88994 -0.224059 -1.35843 72 -4.87567 0.413417 -1.35784 117 -4.90329 0.960517 -1.33809 98 -4.80366 0.354567 -1.33423 169 -4.94122 -0.473908 -1.32838 72 -4.78187 0.33798 -1.32715 185 -4.77373 -0.16553 -1.32184 192 -4.756 -0.26216 -1.31771 87 -4.7516 -0.194546 -1.31535 177 -4.74286 0.32047 -1.31475 207 -4.74837 -0.179452 -1.31417 217 -4.73859 0.297787 -1.31298 221 -4.73626 -0.14168 -1.31004 211 -4.73753 -0.0895948 -1.31004 227 -4.95554 1.04517 -1.30891 119 -4.73031 0.200476 -1.30885 231 -4.73133 -0.111752 -1.30827 223 -4.72633 -0.0744672 -1.30649 226 -4.71865 -0.245025 -1.30591 73 -4.72331 -0.126368 -1.30591 217 -4.72179 0.111076 -1.30531 227 -4.71558 -0.229994 -1.30473 80 -4.7916 0.922396 -1.30321 93 -4.70484 0.214343 -1.30118 235 -4.7017 -0.0591685 -1.29882 237 -4.7011 0.0959284 -1.29882 236 -4.70011 -0.0222205 -1.29823 239 -4.6918 0.280315 -1.29823 239 -4.69564 0.0810916 -1.29705 239 -4.69406 0.0589511 -1.29646 240 -4.68849 -0.0441981 -1.29469 240 -4.68869 -0.00737389 -1.29469 240 -4.6859 0.161989 -1.29469 91 -4.68314 0.228215 -1.29469 240 -4.68669 0.0294505 -1.2941 240 -4.68447 0.147216 -1.2941 99 -4.68487 0.00737146 -1.29351 240 -4.67702 0.044136 -1.29115 241 -4.67556 0.124939 -1.29115 108 -4.67391 0.17634 -1.29115 133 -4.73944 0.888904 -1.28605 100 -4.65186 0.241512 -1.28524 243 -4.79758 -0.445693 -1.28492 78 -5.10602 1.10152 -1.28387 28 -4.63922 0.262846 -1.2817 255 -4.7215 0.870076 -1.27976 90 -4.72064 0.831597 -1.27748 91 -4.92954 -0.501918 -1.27733 80 -4.7138 0.815078 -1.27462 72 -4.70725 0.852075 -1.27462 87 -4.7557 -0.419447 -1.27177 82 -4.75317 -0.4042 -1.27063 105 -4.75251 -0.389119 -1.27006 89 -4.69979 0.759407 -1.26776 68 -4.68802 0.795303 -1.26604 73 -4.74012 -0.350734 -1.26548 74 -4.68105 0.778946 -1.26318 63 -4.72886 -0.372368 -1.26262 66 -4.68324 0.703847 -1.26032 81 -4.67785 0.687975 -1.25804 67 -4.67 0.739367 -1.25803 62 -4.78364 0.994166 -1.25735 65 -4.66663 0.72378 -1.25632 66 -4.70869 -0.333718 -1.25576 77 -4.7078 -0.318804 -1.25519 72 -4.67185 0.634619 -1.25403 171 -4.66672 0.671291 -1.25403 169 -4.66604 0.648744 -1.25289 187 -4.69969 -0.296065 -1.25233 66 -4.66243 0.618363 -1.2506 125 -4.68911 -0.280677 -1.2489 79 -4.68805 -0.265845 -1.24832 85 -4.68734 -0.243662 -1.24775 92 -4.75281 0.972381 -1.24738 84 -5.06021 -0.517009 -1.24627 47 -4.64819 0.594105 -1.24546 111 -4.74979 0.948509 -1.24516 89 -4.64814 0.579251 -1.24488 173 -4.66836 -0.198695 -1.24146 91 -4.63663 0.562955 -1.24088 126 -4.66389 -0.213207 -1.24032 101 -4.66128 -0.227775 -1.23975 90 -4.66403 -0.161857 -1.23975 60 -4.63682 0.511277 -1.23917 79 -4.73199 0.929619 -1.23906 81 -4.63076 0.547443 -1.23859 97 -4.733 0.914394 -1.23851 81 -4.94904 1.04243 -1.23831 27 -4.65941 -0.1251 -1.23803 61 -4.6346 0.496279 -1.23802 81 -4.65584 -0.176263 -1.23746 63 -4.65494 -0.146956 -1.23689 65 -4.63263 0.459264 -1.23631 67 -4.63117 0.473816 -1.23631 75 -4.62568 0.52471 -1.23631 91 -4.65052 -0.095678 -1.23517 61 -4.62971 0.429584 -1.23459 73 -4.64505 -0.0809993 -1.23345 76 -4.64555 -0.0445152 -1.23345 68 -4.62452 0.443741 -1.23345 65 -4.71317 0.89534 -1.23186 100 -4.63772 -0.0590548 -1.23117 70 -4.71355 0.872441 -1.23075 92 -4.63487 -0.110009 -1.2306 74 -4.63613 0.0210649 -1.23059 83 -4.63598 0.0429116 -1.23059 107 -4.63416 -0.0299118 -1.23002 63 -4.6206 0.35555 -1.23002 89 -4.61888 0.37732 -1.23002 83 -4.7648 -0.469144 -1.2291 59 -4.76625 -0.454173 -1.2291 89 -4.62307 0.260892 -1.22888 92 -4.61892 0.32622 -1.22888 75 -4.61003 0.391138 -1.22773 73 -4.61467 0.30404 -1.22716 84 -4.61214 0.340275 -1.22716 86 -4.60687 0.40544 -1.22716 69 -4.99077 -0.494442 -1.22667 27 -4.62276 0.0064047 -1.22659 66 -4.6137 0.28941 -1.22659 88 -4.62084 -0.00812463 -1.22602 72 -4.61731 0.12245 -1.22545 97 -4.61086 0.238334 -1.22487 96 -4.60884 0.27454 -1.22487 92 -4.61307 0.13682 -1.2243 110 -4.61283 0.0570607 -1.22373 90 -4.61262 0.0715533 -1.22373 92 -4.60746 0.187356 -1.22316 95 -4.60611 0.172798 -1.22259 102 -4.60461 0.208969 -1.22259 90 -4.60393 0.223434 -1.22259 90 -4.74471 -0.436957 -1.22245 64 -4.60649 0.0931388 -1.22202 86 -4.60617 0.107611 -1.22202 89 -4.74959 0.35532 -1.22188 97 -4.74474 0.392463 -1.22133 93 -4.7479 0.325228 -1.22077 107 -4.89131 0.997874 -1.22029 27 -4.59705 0.157945 -1.21973 85 -4.74858 0.25043 -1.21967 96 -4.68496 0.814188 -1.21966 71 -4.73695 0.369406 -1.21856 97 -4.74588 0.183086 -1.218 89 -4.74497 0.205447 -1.218 107 -4.73726 0.339509 -1.218 82 -4.67274 0.849957 -1.218 69 -4.74556 0.0115548 -1.2169 113 -4.72816 0.406136 -1.21689 99 -4.6716 0.834619 -1.21689 80 -4.74322 0.0637179 -1.21634 92 -4.74148 0.048807 -1.21579 87 -4.74108 0.0785977 -1.21579 88 -4.74031 0.115832 -1.21579 89 -4.73875 0.167946 -1.21579 89 -4.73541 0.152954 -1.21468 99 -5.06382 -0.532005 -1.21437 61 -4.71801 -0.41193 -1.21413 69 -4.73489 0.100847 -1.21412 86 -4.73086 0.219804 -1.21412 75 -4.73014 0.234664 -1.21412 100 -4.89208 0.870466 -1.21393 26 -4.66912 0.781362 -1.21356 69 -4.732 0.0338959 -1.21302 85 -4.72827 -0.00324586 -1.21191 85 -4.7076 0.441736 -1.2119 81 -4.70619 0.456524 -1.2119 92 -4.85797 1.00682 -1.21181 26 -4.71676 0.300952 -1.21135 88 -4.70282 0.471125 -1.21135 94 -4.70902 -0.381284 -1.2108 59 -4.71664 0.271209 -1.2108 92 -4.71879 0.130256 -1.20969 80 -4.65147 0.793525 -1.20913 75 -4.70809 0.285602 -1.20858 74 -4.8525 0.965926 -1.2081 26 -4.69823 -0.395216 -1.20803 72 -4.70037 -0.343383 -1.20748 87 -4.65186 0.756074 -1.20746 70 -4.65232 0.741165 -1.20691 63 -4.68856 0.417787 -1.20581 87 -4.69377 -0.328038 -1.20526 101 -4.67032 0.571968 -1.20525 90 -4.85709 0.879819 -1.20493 26 -4.68902 -0.312874 -1.2036 78 -4.69045 -0.290775 -1.2036 75 -4.6681 0.54198 -1.20359 83 -4.65997 0.607918 -1.20359 91 -4.65606 0.637185 -1.20359 93 -4.90995 -0.447966 -1.20335 26 -4.66869 0.519775 -1.20303 88 -4.68204 -0.35674 -1.20249 69 -4.66995 0.490241 -1.20248 92 -4.66839 0.504909 -1.20248 92 -4.65897 0.585494 -1.20248 89 -4.64496 0.687799 -1.20248 55 -4.64167 0.70968 -1.20248 65 -4.6433 0.672674 -1.20137 120 -4.63562 0.723687 -1.20137 70 -4.65682 0.555558 -1.20081 83 -4.64348 0.657823 -1.20081 93 -4.64469 0.620845 -1.19971 91 -4.8905 -0.469532 -1.19858 26 -4.83157 0.890756 -1.19857 164 -4.68007 -0.0397078 -1.19805 105 -4.6755 -0.0910671 -1.19694 108 -4.90527 -0.00724185 -1.19646 26 -4.67012 -0.0689154 -1.19528 91 -4.67031 -0.0542445 -1.19528 87 -4.66065 -0.274062 -1.19473 74 -4.66675 -0.0175269 -1.19417 113 -4.65574 -0.259067 -1.19306 60 -4.65907 -0.134599 -1.19251 75 -4.65983 -0.105322 -1.19251 105 -4.64987 -0.119659 -1.18973 99 -4.64036 -0.221572 -1.18807 57 -4.64303 -0.155949 -1.18807 95 -4.63812 -0.184945 -1.18696 58 -4.63335 -0.206606 -1.18586 64 -4.81704 0.693543 -1.18585 26 -4.84731 -0.411905 -1.18534 26 -4.82246 0.640273 -1.18532 26 -4.62813 -0.235498 -1.18475 67 -4.84687 -0.342961 -1.18375 26 -4.81156 0.677291 -1.18373 26 -4.80721 0.707509 -1.18373 26 -4.62524 -0.169805 -1.18308 83 -4.76767 0.91744 -1.18267 53 -4.83446 -0.426177 -1.18216 26 -4.83511 -0.395646 -1.18163 26 -4.81749 0.555007 -1.18109 95 -4.78962 0.758764 -1.18108 25 -4.78099 0.811381 -1.18108 25 -4.83423 -0.357397 -1.18057 25 -4.80133 0.652718 -1.18003 25 -4.79049 0.728055 -1.18002 25 -4.75531 0.93051 -1.18002 40 -4.77591 0.795049 -1.17896 25 -4.75728 0.899875 -1.17896 72 -4.82726 -0.318833 -1.17792 35 -4.77675 0.741264 -1.17685 25 -4.81769 -0.371478 -1.17633 25 -4.83114 -0.0910069 -1.17632 25 -4.82791 -0.144075 -1.1758 25 -4.81476 -0.302892 -1.17421 123 -4.82256 -0.128783 -1.17421 25 -4.82033 0.0302928 -1.17314 41 -4.78318 0.566111 -1.17208 82 -4.81018 -0.0756112 -1.1705 25 -4.81077 0.00751052 -1.17049 60 -4.77564 0.580405 -1.17049 73 -4.80751 -0.113352 -1.16997 25 -4.80654 -0.0604702 -1.16944 25 -4.7779 0.527416 -1.16943 68 -4.80301 -0.0227221 -1.16838 25 -4.74036 0.773623 -1.16837 25 -4.79899 -0.0453396 -1.16732 25 -4.79387 -0.180929 -1.16679 25 -4.77617 -0.232961 -1.16255 25 -4.74227 0.614024 -1.16254 29 -4.77349 -0.247874 -1.16202 26 -4.76306 -0.262392 -1.15937 54 -4.7742 1.0161 -1.1579 55 -4.75665 -0.19469 -1.15672 25 -4.72314 0.59635 -1.15671 49 -4.74815 -0.164519 -1.15407 25 -4.74027 -0.216483 -1.15248 25 -4.70096 0.503549 -1.14771 75 -4.73728 0.985163 -1.1465 79 -4.75261 0.887539 -1.14547 158 -4.75103 0.864128 -1.14391 168 -4.71573 0.965373 -1.13977 98 -4.84853 1.05193 -1.13974 10 -4.69679 0.0436073 -1.13923 65 -4.66226 0.48437 -1.13658 91 -4.7156 0.89616 -1.13614 59 -4.66066 0.461993 -1.13552 105 -4.65904 0.395366 -1.1334 102 -4.65329 0.416951 -1.13234 111 -4.65057 0.446179 -1.13234 106 -4.64428 0.430812 -1.13022 104 -4.66 0.0577045 -1.12917 139 -4.64297 0.379217 -1.12863 98 -4.6523 0.145314 -1.12757 113 -4.69281 0.838654 -1.12734 136 -4.64717 0.225571 -1.12704 103 -4.63837 0.364145 -1.12704 110 -4.64744 0.174375 -1.12651 130 -4.64333 0.261941 -1.12651 124 -4.64604 0.159698 -1.12599 102 -4.644 0.210773 -1.12598 113 -4.63825 0.312841 -1.12598 116 -4.63619 0.341977 -1.12598 119 -4.67479 0.903842 -1.12578 70 -4.63864 0.276278 -1.12545 120 -4.63582 0.290717 -1.12492 116 -4.6334 0.327117 -1.12492 112 -4.64173 0.108436 -1.1244 125 -4.63886 0.195906 -1.1244 134 -4.63451 0.246787 -1.12386 130 -4.66434 0.917075 -1.12371 77 -4.63819 0.0937543 -1.12334 148 -4.65807 0.938674 -1.12319 51 -4.63654 0.0791375 -1.12281 144 -4.63366 0.12277 -1.12228 125 -4.72313 -0.464453 -1.12165 54 -4.72456 -0.449612 -1.12165 60 -4.6934 0.649951 -1.11957 170 -4.65543 0.817114 -1.11646 72 -4.66453 0.661047 -1.11232 66 -4.74941 1.00644 -1.11205 38 -4.68625 -0.423469 -1.11078 75 -4.64881 0.688706 -1.10921 83 -4.64552 0.710605 -1.10921 77 -4.64904 0.673832 -1.10869 73 -4.67794 -0.407853 -1.10819 71 -4.73362 0.987463 -1.10702 36 -4.66573 -0.391949 -1.10456 69 -4.6579 -0.36914 -1.10197 69 -4.61652 0.721171 -1.10196 62 -4.65975 -0.31776 -1.10145 91 -4.60205 0.785732 -1.10092 71 -4.65435 -0.339414 -1.10042 81 -4.65495 -0.302712 -1.0999 95 -4.60659 0.734495 -1.09989 87 -4.59926 0.755591 -1.09885 61 -4.77978 -0.467715 -1.09848 37 -4.64556 -0.353404 -1.09835 73 -4.59305 0.769418 -1.09782 73 -4.61402 0.617273 -1.0973 87 -4.69503 0.963799 -1.09595 78 -4.63853 -0.286915 -1.09524 83 -4.6006 0.60086 -1.09316 86 -4.60501 0.55002 -1.09264 81 -4.63076 -0.169688 -1.09161 115 -4.68056 0.937757 -1.09092 51 -4.62135 -0.249328 -1.09006 71 -4.62656 -0.118581 -1.09006 93 -4.6223 -0.132981 -1.08902 90 -4.61993 -0.147431 -1.0885 86 -4.58791 0.562689 -1.08849 78 -4.6167 -0.183622 -1.08798 76 -4.60453 0.381987 -1.08798 255 -4.58328 0.584068 -1.08798 73 -4.82566 1.04096 -1.08748 39 -4.61792 -0.0675072 -1.08747 92 -4.67021 0.920355 -1.08739 65 -4.61618 -0.0529671 -1.08695 95 -4.61648 -0.00220615 -1.08695 96 -4.60963 0.251472 -1.08694 255 -4.58559 0.533215 -1.08694 79 -4.60471 -0.270111 -1.08591 54 -4.61146 -0.103611 -1.08591 91 -4.61189 -0.0818791 -1.08591 92 -4.60736 0.11366 -1.08487 255 -4.6068 -0.0166201 -1.08436 98 -4.60479 -0.0310689 -1.08384 101 -4.72477 -0.432696 -1.08338 61 -4.59704 -0.233393 -1.08332 75 -4.60284 0.0340265 -1.08332 105 -4.60219 0.0846355 -1.08332 255 -4.59487 -0.197094 -1.08229 81 -4.59906 0.0195725 -1.08229 97 -4.7176 -0.447021 -1.08187 17 -4.655 0.886893 -1.08186 46 -4.56804 0.516743 -1.08176 79 -4.58425 -0.21823 -1.0797 80 -4.6408 0.899243 -1.07884 59 -4.67394 0.69403 -1.07833 103 -4.6447 0.847088 -1.07733 51 -4.66863 0.663236 -1.07582 89 -4.66461 0.677611 -1.07532 92 -4.65532 0.713618 -1.07431 86 -4.64924 0.727619 -1.0733 69 -4.7735 1.0065 -1.0729 51 -4.66021 0.639585 -1.0728 88 -4.62491 0.858402 -1.0728 56 -4.68431 -0.406975 -1.07231 80 -4.68557 -0.392257 -1.07231 62 -4.62896 0.791588 -1.07078 49 -4.65455 0.608985 -1.07028 88 -4.63312 0.754886 -1.07028 56 -4.62454 0.805783 -1.07028 52 -4.66077 0.542888 -1.06978 52 -4.63356 0.740011 -1.06978 59 -5.2015 1.12837 -1.06847 41 -4.64111 0.621997 -1.06726 87 -4.64393 0.585274 -1.06676 89 -4.75192 0.986505 -1.06658 52 -4.66361 -0.375799 -1.06627 36 -4.64914 0.489688 -1.06525 255 -4.60166 0.824048 -1.06525 54 -4.64707 0.452563 -1.06374 255 -4.63039 0.568709 -1.06273 75 -4.62831 0.553679 -1.06173 79 -4.52157 0.0480914 -1.06157 234 -4.65679 -0.155158 -1.06123 98 -4.49355 0.487323 -1.06104 255 -4.64143 0.385798 -1.06072 255 -4.63699 0.414769 -1.06022 255 -4.64973 -0.133034 -1.05922 86 -4.72455 0.965522 -1.0588 51 -4.64661 -0.169488 -1.05871 78 -4.63768 0.334142 -1.05871 255 -4.63444 -0.351647 -1.05821 62 -4.62973 -0.336697 -1.0567 59 -4.63223 -0.300325 -1.0567 57 -4.57802 0.767777 -1.05669 74 -4.63122 -0.285663 -1.0562 67 -4.6269 -0.321903 -1.0557 73 -4.63016 -0.271009 -1.0557 67 -4.71572 0.940662 -1.05539 76 -4.63047 0.129325 -1.05418 255 -4.62671 -0.183426 -1.05368 63 -4.62884 -0.118002 -1.05368 90 -4.62528 0.216477 -1.05368 255 -4.61731 0.34715 -1.05368 255 -4.62248 -0.234201 -1.05318 61 -4.62069 0.267197 -1.05317 255 -4.62531 -0.103396 -1.05267 98 -4.62387 0.0782285 -1.05217 255 -4.61165 -0.255501 -1.05066 67 -4.69959 0.922211 -1.05053 66 -4.614 -0.0887057 -1.04965 86 -4.58638 0.511899 -1.04965 110 -4.61184 0.0997014 -1.04915 255 -4.60645 -0.204479 -1.04865 57 -4.60663 -0.0668945 -1.04764 92 -4.59225 -0.218382 -1.04513 73 -4.68379 0.881092 -1.0447 65 -4.68462 0.866032 -1.04421 70 -4.59327 -0.0523441 -1.04412 93 -4.59147 -0.0379085 -1.04361 101 -4.73711 -0.467469 -1.04325 18 -4.67386 0.902082 -1.04324 61 -4.58957 0.0341903 -1.04311 107 -4.58773 -0.0162799 -1.04261 114 -4.67968 0.849965 -1.04227 79 -4.73416 -0.43713 -1.04179 62 -4.58169 0.048483 -1.0411 150 -4.58 0.0124812 -1.04059 118 -4.72697 -0.451416 -1.04034 56 -4.57808 -0.00191665 -1.04009 101 -4.41207 0.42996 -1.03774 255 -4.40955 0.415757 -1.0367 255 -4.40615 0.450377 -1.0367 255 -4.40471 0.464217 -1.0367 255 -4.41282 0.30445 -1.03515 255 -4.4069 0.380647 -1.03515 255 -4.40506 0.401411 -1.03515 255 -4.65495 0.822995 -1.03497 81 -4.65368 0.807725 -1.034 81 -4.65428 0.792785 -1.03352 88 -4.40413 0.3178 -1.03308 255 -4.40259 0.33855 -1.03308 255 -4.4015 0.35238 -1.03308 255 -4.40626 0.255408 -1.03256 255 -4.69213 0.468922 -1.03206 255 -4.40935 0.144546 -1.03204 255 -4.40808 0.179173 -1.03204 255 -4.40695 0.15834 -1.03152 255 -4.40557 0.192947 -1.03152 255 -4.40494 0.206786 -1.03152 255 -4.69367 -0.410859 -1.0311 81 -4.39965 0.26893 -1.03101 255 -4.4055 0.0613648 -1.03049 255 -4.40488 0.0959632 -1.03049 255 -4.40041 0.220454 -1.03049 255 -4.3964 0.289544 -1.03049 255 -4.64695 0.754107 -1.03011 86 -4.68721 -0.395417 -1.02915 67 -4.63952 0.775377 -1.02914 89 -4.68456 -0.380354 -1.02818 78 -4.64392 0.723741 -1.02817 81 -4.39434 0.130327 -1.0279 255 -4.68244 -0.357958 -1.02721 86 -4.784 1.0533 -1.02692 28 -4.64152 0.701011 -1.02671 89 -4.63587 0.737444 -1.02671 89 -4.67039 0.452065 -1.02623 255 -4.67105 -0.327506 -1.0238 100 -4.51185 0.0615251 -1.02298 255 -4.66613 -0.341873 -1.02283 94 -4.62678 0.654364 -1.02136 100 -4.65504 0.384359 -1.02088 255 -4.65851 -0.311846 -1.0204 88 -4.65993 -0.289892 -1.0204 93 -4.62086 0.668364 -1.02039 99 -4.61873 0.682876 -1.02039 95 -4.75663 1.02362 -1.01899 34 -4.65391 -0.26013 -1.01845 98 -4.64931 0.332514 -1.01845 255 -4.63939 0.36116 -1.0165 255 -4.61253 0.615548 -1.0165 109 -4.61252 0.600815 -1.01601 115 -4.60865 0.629784 -1.01601 113 -4.6485 0.0983111 -1.01553 255 -4.64665 0.164016 -1.01553 255 -4.64015 0.295314 -1.01553 255 -4.63254 0.397276 -1.01553 255 -4.63127 0.411827 -1.01553 255 -4.63952 -0.273874 -1.01505 110 -4.64359 0.193138 -1.01505 255 -4.64193 0.229602 -1.01505 255 -4.63998 0.266053 -1.01505 255 -4.63469 0.346182 -1.01504 255 -4.61144 0.578611 -1.01504 90 -4.63959 -0.237317 -1.01456 103 -4.64503 0.0763628 -1.01456 255 -4.64391 0.127432 -1.01456 255 -4.6156 0.527662 -1.01456 111 -4.63838 -0.222635 -1.01408 103 -4.63875 0.214861 -1.01407 255 -4.63712 -0.207965 -1.01359 105 -4.63912 -0.156966 -1.01359 95 -4.60746 0.563448 -1.01358 97 -4.4495 0.481682 -1.01341 255 -4.60728 0.54875 -1.0131 107 -4.63417 -0.185934 -1.01262 115 -4.72751 1.00164 -1.01105 58 -4.62698 -0.171044 -1.01067 120 -4.62858 -0.120158 -1.01067 97 -4.6018 0.511531 -1.01067 136 -4.62021 -0.141688 -1.00873 123 -4.4339 0.444678 -1.00838 255 -4.61955 -0.0908295 -1.00824 99 -4.61992 -0.0690586 -1.00824 105 -4.62012 -0.0545453 -1.00824 108 -4.61536 -0.105232 -1.00727 99 -4.61639 -0.0399738 -1.00727 112 -4.42697 0.415849 -1.00586 255 -4.60876 -0.0181463 -1.00532 113 -4.42717 0.345776 -1.00435 255 -4.60291 0.0252919 -1.00387 122 -4.70478 0.958106 -1.00358 55 -4.5991 -0.00360473 -1.00289 117 -4.59909 0.0108439 -1.00289 119 -4.59692 0.0469544 -1.00241 142 -4.42874 0.192227 -1.00234 255 -4.42673 0.233958 -1.00234 255 -4.42251 0.30346 -1.00234 255 -4.41661 0.379827 -1.00234 255 -4.76658 -0.48921 -1.00126 32 -4.6907 0.97823 -1.00124 56 -4.41424 0.281943 -0.999821 255 -4.40931 0.267689 -0.998312 255 -4.41416 0.108189 -0.99781 255 -4.55127 0.49174 -0.997539 255 -4.67538 0.936651 -0.995642 67 -4.40039 0.218546 -0.995292 255 -4.40157 0.142411 -0.99479 255 -4.40059 0.170064 -0.994789 255 -4.39917 0.156157 -0.994286 255 -4.66543 0.896504 -0.991441 68 -4.66115 0.918481 -0.991441 66 -4.72162 -0.469866 -0.990055 16 -4.71797 -0.447092 -0.988654 18 -4.65486 0.879244 -0.988173 78 -4.70325 -0.415994 -0.984452 60 -4.64232 0.861692 -0.984438 72 -4.64309 0.846744 -0.983971 78 -4.84237 1.0364 -0.98378 52 -4.6432 0.824154 -0.983037 85 -4.68642 -0.429434 -0.980717 21 -4.6362 0.807842 -0.980703 89 -4.6862 -0.362721 -0.979315 86 -4.6831 -0.377297 -0.978849 71 -4.67801 -0.391704 -0.977915 77 -4.4766 0.420206 -0.977119 255 -4.46978 0.469212 -0.976632 255 -4.62323 0.768111 -0.976035 79 -4.67233 -0.339594 -0.97558 95 -4.61795 0.752288 -0.974167 97 -4.6119 0.788534 -0.974167 80 -4.61826 0.700258 -0.9723 91 -4.60878 0.735874 -0.971366 82 -4.79213 1.01021 -0.971299 78 -4.46058 0.305996 -0.9708 255 -4.60836 0.713531 -0.970433 124 -4.61296 0.669777 -0.969966 109 -4.61083 0.684266 -0.969966 102 -4.64815 -0.3233 -0.96951 98 -4.64914 -0.308695 -0.96951 117 -4.64948 -0.27207 -0.969043 131 -4.61029 0.647188 -0.968566 113 -4.64426 -0.293752 -0.968109 126 -4.60845 0.632151 -0.967632 114 -4.64254 -0.257074 -0.967175 109 -4.64138 -0.242399 -0.966708 110 -4.44541 0.269997 -0.966424 255 -4.45032 0.109216 -0.96594 255 -4.44834 0.172117 -0.965939 255 -4.63665 -0.22028 -0.965307 123 -4.60363 0.594638 -0.965298 133 -4.44738 0.0602467 -0.964968 255 -4.44567 0.137078 -0.964967 255 -4.44158 0.234803 -0.964966 255 -4.60355 0.579919 -0.964831 147 -4.59693 0.615788 -0.964364 123 -4.7647 0.988972 -0.964167 60 -4.6041 0.543267 -0.963898 155 -4.63016 -0.190866 -0.963439 143 -4.5957 0.564214 -0.962497 155 -4.62491 -0.176129 -0.962038 149 -4.59806 0.527871 -0.962031 167 -4.62177 -0.205109 -0.961572 136 -4.62462 -0.125225 -0.961571 170 -4.6218 -0.154225 -0.961104 164 -4.59584 0.512968 -0.961097 182 -4.82485 -0.499707 -0.960617 53 -4.61837 -0.139609 -0.96017 167 -4.6138 -0.0887418 -0.958769 187 -4.60961 -0.10317 -0.957836 175 -4.74361 0.945955 -0.957481 117 -4.60628 -0.0741641 -0.956902 200 -4.5964 0.280115 -0.956431 232 -4.58039 0.474745 -0.956428 235 -4.58135 0.445756 -0.955962 225 -4.73296 0.959343 -0.955698 76 -4.59162 0.294283 -0.955497 233 -4.59067 0.308707 -0.955496 232 -4.58277 0.409577 -0.955495 225 -4.59879 -0.0524124 -0.955034 207 -4.57606 0.459736 -0.955028 228 -4.59699 -0.0379605 -0.954567 211 -4.58004 0.373065 -0.954095 228 -4.57823 0.394645 -0.954095 223 -4.57566 0.423403 -0.954095 224 -4.5926 0.077487 -0.953631 233 -4.58141 0.329733 -0.953629 231 -4.59125 -0.0235203 -0.953166 215 -4.58408 0.257611 -0.953163 235 -4.57841 0.343969 -0.953162 229 -4.57731 0.358349 -0.953162 230 -4.79149 -0.480855 -0.952593 29 -4.58699 0.0629464 -0.952231 230 -4.58099 0.242982 -0.952229 235 -4.58548 -0.00191634 -0.951765 218 -4.58546 0.0124906 -0.951765 219 -4.58529 0.0413007 -0.951764 225 -4.58346 0.0268728 -0.951298 224 -4.71592 0.925207 -0.950349 86 -4.71831 0.902619 -0.949904 98 -4.57679 0.0915144 -0.949896 236 -4.56813 0.227832 -0.948961 237 -4.54796 0.485652 -0.948958 239 -4.77043 -0.455919 -0.947244 70 -4.5627 0.112668 -0.946628 239 -4.56232 0.127002 -0.946628 239 -4.70577 0.884991 -0.946338 92 -4.70661 0.869859 -0.945892 104 -4.76407 -0.440169 -0.945461 88 -4.55424 0.191206 -0.945226 240 -4.54779 0.205217 -0.943825 240 -4.69793 0.830236 -0.942327 120 -4.70727 0.763439 -0.941882 112 -4.69337 0.844657 -0.941881 114 -4.70292 0.777916 -0.941436 104 -4.74408 -0.423179 -0.940557 110 -4.69282 0.814182 -0.940544 124 -4.69343 0.799119 -0.940098 126 -4.69962 0.72444 -0.938762 117 -4.9192 1.06293 -0.938437 25 -4.52497 0.139979 -0.937757 242 -4.72791 -0.406673 -0.936545 118 -4.68652 0.745101 -0.936533 108 -4.51596 0.175167 -0.935889 243 -4.72708 -0.369203 -0.935653 116 -4.72206 -0.331477 -0.93387 107 -4.68284 0.69188 -0.933859 129 -4.68065 0.706588 -0.933859 124 -4.71424 -0.38304 -0.932979 122 -4.71655 -0.353413 -0.932979 134 -4.72015 -0.301531 -0.932978 122 -4.50289 0.160416 -0.932621 255 -4.67832 0.668743 -0.932076 144 -4.67663 0.638576 -0.930739 159 -4.70752 -0.315513 -0.930304 118 -4.67267 0.653006 -0.930293 155 -4.70956 -0.248817 -0.929857 132 -4.70097 -0.263134 -0.928074 132 -4.69818 -0.277774 -0.927629 131 -4.66602 0.599923 -0.927173 188 -4.66315 0.621904 -0.927173 175 -4.69316 -0.225683 -0.925845 137 -4.68995 -0.21074 -0.924953 143 -4.85757 1.0333 -0.924094 24 -4.65853 0.532216 -0.923608 88 -4.68085 -0.195545 -0.922724 145 -4.68475 -0.0410616 -0.922723 125 -4.6563 0.517171 -0.922717 107 -4.64853 0.582944 -0.922716 169 -4.6812 -0.12929 -0.922278 157 -4.67755 -0.180666 -0.921833 147 -4.67835 -0.158621 -0.921832 161 -4.67882 -0.143924 -0.921832 167 -4.65093 0.494442 -0.920934 128 -4.66576 0.29669 -0.92049 83 -4.65811 0.399216 -0.920489 94 -4.64327 0.545334 -0.920487 93 -4.64065 0.567207 -0.920487 113 -4.658 0.377114 -0.920043 92 -4.66864 0.15722 -0.9196 107 -4.66406 0.259842 -0.919599 85 -4.65295 0.413524 -0.919597 103 -4.66811 -0.10684 -0.919157 154 -4.66926 -0.0261694 -0.919156 90 -4.66759 0.127841 -0.919155 83 -4.66127 0.27439 -0.919153 79 -4.65527 0.362199 -0.919152 88 -4.6447 0.47907 -0.919151 140 -4.64424 0.464293 -0.918705 116 -4.6648 -0.0774216 -0.918266 189 -4.66527 0.0398299 -0.918264 88 -4.65408 0.325374 -0.918261 82 -4.64373 0.449524 -0.91826 116 -4.66316 -0.0554036 -0.917819 106 -4.66132 0.142357 -0.917817 85 -4.83213 1.01187 -0.917766 24 -4.66065 0.0910694 -0.917372 84 -4.65752 0.193531 -0.917371 95 -4.65119 0.310514 -0.91737 83 -4.6486 0.347033 -0.917369 85 -4.90606 -0.515049 -0.916938 26 -4.65868 -0.0919272 -0.916928 186 -4.65957 -0.0114219 -0.916927 87 -4.65822 0.112993 -0.916926 87 -4.65494 0.208087 -0.916925 86 -4.65701 0.0763847 -0.916481 85 -4.65568 0.0105485 -0.916036 81 -4.65562 0.025176 -0.916035 83 -4.65528 0.0617388 -0.916035 85 -4.63609 0.426796 -0.916031 103 -4.64612 0.229678 -0.915142 82 -4.64537 0.244273 -0.915142 81 -4.64641 0.178515 -0.914697 79 -4.88625 -0.497568 -0.912298 24 -4.80814 0.983062 -0.911438 24 -4.86272 0.617318 -0.910176 101 -4.86053 -0.479672 -0.906391 24 -4.77866 0.961225 -0.904266 28 -4.83555 0.598282 -0.903848 24 -4.83742 -0.454521 -0.900906 24 -4.82436 0.543017 -0.900052 123 -4.82714 -0.438322 -0.898375 23 -4.75292 0.94036 -0.897938 29 -4.8007 0.624452 -0.897098 54 -4.75154 0.916812 -0.896673 30 -4.80662 0.525628 -0.895833 84 -4.75337 0.886201 -0.895829 57 -4.81486 -0.422035 -0.895422 23 -4.79934 0.555347 -0.894989 69 -4.76785 0.78081 -0.894987 23 -4.74673 0.900381 -0.894985 54 -4.82382 1.04026 -0.894573 21 -4.75706 0.83284 -0.894564 23 -4.8065 0.449295 -0.894146 84 -4.81042 0.381138 -0.893725 99 -4.80594 0.434006 -0.893725 76 -4.80239 0.471739 -0.893724 85 -4.75387 0.816868 -0.893299 23 -4.75574 0.794123 -0.892877 23 -4.80575 0.365546 -0.89246 94 -4.80654 0.29731 -0.891617 114 -4.73692 0.867638 -0.891611 60 -4.81158 0.0478099 -0.890776 87 -4.80738 0.206473 -0.890774 68 -4.80352 -0.246767 -0.890357 23 -4.79618 0.273924 -0.889086 90 -4.77601 0.499337 -0.888661 38 -4.7275 0.842832 -0.888658 32 -4.73943 0.760704 -0.888237 23 -4.79802 0.0325277 -0.887823 87 -4.79304 0.22087 -0.887821 99 -4.77976 -0.39647 -0.887406 32 -4.7849 -0.298679 -0.886983 23 -4.7871 -0.261091 -0.886982 23 -4.79175 0.070091 -0.886557 93 -4.78218 0.310761 -0.886554 80 -4.78235 -0.275923 -0.886139 23 -4.77569 0.348004 -0.88571 103 -4.78067 0.190133 -0.884868 96 -4.72559 0.735561 -0.88444 27 -4.75617 0.482046 -0.884021 53 -4.77701 0.122349 -0.883603 81 -4.76148 -0.380002 -0.883187 65 -4.77465 0.137289 -0.883181 103 -4.76363 0.324492 -0.882757 54 -4.76957 1.01321 -0.882179 44 -4.75652 -0.342076 -0.881499 67 -4.76166 -0.222356 -0.881076 61 -4.75078 0.391116 -0.881069 60 -4.75095 -0.36421 -0.880655 68 -4.76248 0.151851 -0.880649 122 -4.7222 0.636471 -0.880644 50 -4.70663 0.717356 -0.8798 30 -4.74781 -0.326515 -0.879389 54 -4.74687 -0.31148 -0.878967 28 -4.75408 0.0992192 -0.878541 74 -4.70332 0.686597 -0.878113 50 -4.75046 0.0841925 -0.877697 128 -4.6992 0.70107 -0.87769 49 -4.74922 0.0170101 -0.877276 82 -4.74608 0.173633 -0.877274 201 -4.70276 0.648804 -0.876847 31 -4.74521 -0.0352017 -0.876433 52 -4.74143 0.0020446 -0.875589 72 -4.73534 0.240271 -0.875586 55 -4.72358 0.411158 -0.875584 98 -4.74667 0.969615 -0.875569 63 -4.73944 -0.020302 -0.875167 72 -4.73066 0.254915 -0.874742 98 -4.72912 -0.206132 -0.873903 54 -4.68716 0.661587 -0.873894 85 -4.73246 0.990019 -0.873503 49 -4.72779 -0.191205 -0.873481 29 -4.7272 -0.0722978 -0.872636 59 -4.72083 -0.168689 -0.871794 29 -4.73049 0.950944 -0.871437 75 -4.72162 -0.0499901 -0.87137 82 -4.9073 1.06267 -0.870426 23 -4.71156 -0.153591 -0.869684 31 -4.78854 -0.488332 -0.868974 20 -4.70071 -0.123741 -0.867152 70 -4.70655 0.930909 -0.865653 76 -4.69248 -0.138322 -0.865465 34 -4.71265 0.878406 -0.864828 78 -4.70127 0.906919 -0.863588 83 -4.67778 -0.101212 -0.86209 95 -4.75697 -0.469835 -0.86195 21 -4.74018 0.601295 -0.861525 157 -4.69819 0.837704 -0.860283 65 -4.6887 0.88931 -0.860283 86 -4.75077 -0.431523 -0.859884 70 -4.74355 -0.445863 -0.858645 60 -4.69746 0.784436 -0.858218 89 -4.68205 0.850085 -0.857391 72 -4.74875 -0.27374 -0.85699 74 -4.68537 0.820324 -0.856978 64 -4.84168 1.03217 -0.85613 45 -4.70914 0.612559 -0.855328 126 -4.73569 -0.325214 -0.854925 57 -4.73179 -0.295056 -0.853685 84 -4.73396 -0.257883 -0.853685 77 -4.72324 -0.361598 -0.852859 53 -4.67284 0.765395 -0.852434 88 -4.73211 0.0993216 -0.852028 104 -4.71503 -0.390751 -0.85162 70 -4.72683 0.20328 -0.851614 87 -4.72549 0.188363 -0.851201 105 -4.70729 -0.412419 -0.850381 87 -4.70844 -0.37527 -0.849967 59 -4.71716 -0.242011 -0.849966 147 -4.72262 0.0843338 -0.849962 118 -4.89403 -0.496035 -0.849793 18 -4.71985 0.121383 -0.849549 103 -4.71945 0.136209 -0.849549 110 -4.70779 0.358374 -0.849546 96 -4.66516 0.726637 -0.849542 77 -4.67709 0.630978 -0.84913 60 -4.81007 1.00156 -0.848586 65 -4.65588 0.747714 -0.848303 55 -4.70351 -0.307978 -0.847901 74 -4.69509 -0.344448 -0.846662 62 -4.7053 0.150673 -0.846656 110 -4.8213 0.893709 -0.846601 160 -4.68984 0.386746 -0.846241 80 -4.70089 0.165338 -0.84583 140 -4.66892 0.555452 -0.845412 70 -4.68517 0.371579 -0.845001 96 -4.69351 -0.203712 -0.844594 60 -4.81793 0.846135 -0.844219 60 -4.8106 0.876028 -0.843822 108 -4.65848 0.57653 -0.84376 129 -4.79131 0.966147 -0.843424 59 -4.78825 0.981195 -0.843423 54 -4.68698 -0.21815 -0.843355 57 -4.63838 0.707712 -0.843345 57 -4.80947 0.8602 -0.843028 90 -4.66613 0.473579 -0.842934 81 -4.64186 0.670992 -0.842932 68 -4.68435 -0.188517 -0.842528 72 -4.68791 0.0470807 -0.842526 124 -4.64404 0.641555 -0.842519 67 -4.85848 -0.477214 -0.842248 18 -4.66581 0.436574 -0.842108 95 -4.68372 0.0691362 -0.841699 111 -4.65481 0.524232 -0.841694 112 -4.65683 0.487465 -0.841282 74 -4.65528 0.502091 -0.841281 105 -4.6309 0.691744 -0.841279 63 -4.66261 0.406772 -0.840869 85 -4.65936 0.421254 -0.840456 84 -4.67637 0.0176467 -0.840047 85 -4.65396 0.457653 -0.840042 82 -4.64341 0.53778 -0.839628 88 -4.67249 -0.0043646 -0.839221 75 -4.77468 0.939283 -0.839056 18 -4.67041 -0.0336967 -0.838808 97 -4.6678 -0.085001 -0.838396 86 -4.66846 0.0323274 -0.838394 94 -4.65671 0.332714 -0.838391 93 -4.84255 -0.437382 -0.838276 54 -4.62067 0.653248 -0.837975 158 -4.66441 -0.0482769 -0.837569 98 -4.66164 -0.0995072 -0.837156 71 -4.8412 -0.383678 -0.837084 81 -4.66022 -0.0701747 -0.836743 97 -4.84043 -0.368327 -0.836687 70 -4.6556 -0.17255 -0.836331 73 -4.65484 -0.018874 -0.835503 89 -4.82762 -0.405564 -0.834702 84 -4.81701 -0.458096 -0.833511 60 -4.81413 0.467566 -0.833104 137 -4.64071 -0.150016 -0.833026 117 -4.63231 0.214314 -0.831782 153 -4.62734 0.235964 -0.830955 171 -4.80288 -0.418812 -0.829937 47 -4.62071 0.250214 -0.829716 110 -4.622 -0.120236 -0.828893 155 -4.92665 1.0405 -0.827571 69 -4.74079 0.809132 -0.827541 21 -4.61378 -0.134483 -0.827241 119 -4.60206 0.300075 -0.82641 112 -4.60109 0.314531 -0.82641 185 -4.60232 0.263821 -0.825997 86 -4.78876 -0.349553 -0.825965 47 -4.59712 0.285285 -0.825171 117 -4.78157 -0.311348 -0.823979 61 -4.78275 -0.258659 -0.823581 59 -4.72452 0.77572 -0.823173 17 -4.72013 0.790225 -0.822776 17 -4.77027 -0.333247 -0.821994 79 -4.77459 0.116978 -0.820797 97 -4.71886 0.736713 -0.820791 61 -4.74636 0.47568 -0.819602 70 -4.76518 0.169148 -0.819208 133 -4.76004 -0.242563 -0.818816 73 -4.72118 0.653674 -0.818806 86 -4.75513 -0.294776 -0.818419 43 -4.75603 -0.279837 -0.818419 24 -4.95631 -0.527173 -0.817715 73 -4.75295 -0.227276 -0.817227 86 -4.87408 1.01372 -0.816559 119 -4.69331 0.747706 -0.816025 34 -4.74946 0.101295 -0.815635 91 -4.73435 0.391879 -0.815632 93 -4.87418 0.973906 -0.815041 102 -4.74583 0.08628 -0.814841 145 -4.71164 0.524426 -0.813645 72 -4.72138 0.405678 -0.813249 82 -4.7122 0.442166 -0.812057 82 -4.72654 -0.203844 -0.811667 50 -4.6842 0.663364 -0.811658 76 -4.68015 0.677785 -0.811261 130 -4.67469 0.714522 -0.81126 60 -4.85028 0.993025 -0.811243 47 -4.72121 0.234228 -0.810868 73 -4.85214 0.953796 -0.810104 92 -4.6815 0.610498 -0.809673 100 -4.66831 0.690996 -0.809275 59 -4.67567 0.624663 -0.808879 88 -4.68015 0.558015 -0.808085 82 -4.71133 -0.00335656 -0.807694 117 -4.90602 -0.498176 -0.807462 108 -4.70925 0.033621 -0.807296 86 -4.67604 0.5426 -0.806894 67 -4.70196 0.181353 -0.806501 88 -4.69147 0.336177 -0.806102 78 -4.67783 0.490722 -0.8061 61 -4.70121 -0.0550974 -0.805709 83 -4.66282 0.570725 -0.804908 60 -4.66008 0.592692 -0.804908 80 -4.69564 0.0113212 -0.804517 86 -4.68994 -0.187712 -0.804122 52 -4.69097 -0.0845118 -0.803724 74 -4.69162 -0.0329288 -0.803723 88 -4.6917 -0.0181893 -0.803723 74 -4.84164 0.826119 -0.80365 136 -4.68659 -0.172853 -0.803328 76 -4.68779 0.136488 -0.803324 56 -4.66263 0.503866 -0.80332 53 -4.68538 0.15114 -0.802927 77 -4.68337 -0.0697021 -0.802135 93 -4.81749 0.915804 -0.80213 46 -4.87631 -0.47952 -0.801386 48 -4.67955 0.0626527 -0.80134 71 -4.67535 -0.157798 -0.800945 88 -4.67777 0.04792 -0.800943 75 -4.65698 0.421915 -0.800542 70 -4.67212 -0.135672 -0.800151 109 -4.66554 0.282633 -0.800146 127 -4.87785 -0.371539 -0.799865 165 -4.65548 0.370186 -0.799351 100 -4.66469 -0.120835 -0.798562 136 -4.65602 0.20131 -0.797367 91 -4.87268 -0.232763 -0.797206 198 -4.79244 0.856746 -0.795295 49 -4.63568 0.346517 -0.794983 112 -4.78779 0.871455 -0.794915 73 -4.7831 0.886146 -0.794535 56 -4.84067 -0.460467 -0.79417 47 -4.99471 1.076 -0.794002 78 -4.63592 0.251438 -0.793792 106 -4.63287 0.302396 -0.793792 70 -4.77213 0.922958 -0.793776 20 -5.07718 -0.53568 -0.793296 42 -4.63119 0.265754 -0.792998 84 -4.62603 0.316515 -0.7926 104 -4.83593 -0.352839 -0.791511 69 -4.82909 -0.390472 -0.790752 108 -4.77498 0.784292 -0.7896 179 -4.61621 0.213901 -0.789425 197 -4.76862 0.798662 -0.78884 255 -4.78652 0.640205 -0.787702 116 -4.7631 0.759393 -0.786562 73 -4.79979 -0.433533 -0.785816 44 -5.02937 -0.459127 -0.783166 109 -4.79002 -0.334111 -0.782397 62 -4.77962 -0.416461 -0.781638 53 -4.78977 0.276195 -0.78163 101 -4.77699 -0.401092 -0.780879 67 -4.77878 -0.295558 -0.779738 130 -4.73785 0.618828 -0.777829 127 -4.99465 -0.511545 -0.777741 56 -4.76731 0.290047 -0.777453 102 -4.90581 1.04024 -0.776639 11 -4.7602 -0.309326 -0.776321 58 -4.73197 0.602991 -0.776311 131 -4.76017 -0.241782 -0.77556 255 -4.75964 0.252131 -0.775555 120 -4.9217 0.930989 -0.775555 61 -4.70915 0.73594 -0.77555 75 -4.72024 0.646793 -0.775171 75 -4.90569 0.951862 -0.773384 80 -4.70547 0.667438 -0.772892 86 -4.71526 0.578401 -0.772513 121 -4.90721 0.912195 -0.772299 142 -4.71685 0.548547 -0.772134 132 -4.68813 0.717704 -0.770993 76 -4.73391 -0.255221 -0.770624 255 -4.7361 -0.210594 -0.770623 49 -4.7073 0.562474 -0.770615 113 -4.70962 0.525278 -0.770236 104 -4.68757 0.695049 -0.770234 82 -4.68779 0.680049 -0.769854 172 -4.71408 0.443483 -0.769477 96 -4.95502 -0.429201 -0.769058 80 -4.73022 -0.0838366 -0.768723 97 -4.89072 0.893141 -0.768682 94 -4.7068 0.457751 -0.768338 115 -4.72701 -0.0169225 -0.767963 93 -4.71084 0.391015 -0.767959 111 -4.70338 0.472351 -0.767958 112 -4.7011 0.49451 -0.767957 103 -4.72313 -0.135641 -0.767585 84 -4.72389 -0.105961 -0.767584 100 -4.72463 0.0647372 -0.767582 108 -4.70567 0.427834 -0.767578 104 -4.69757 0.509075 -0.767578 100 -4.72099 -0.0391173 -0.766824 99 -4.72113 0.012794 -0.766823 99 -4.70372 0.40534 -0.766819 108 -4.71868 -0.068739 -0.766445 124 -4.71888 -0.0539143 -0.766445 97 -4.71918 -0.00202639 -0.766444 133 -4.71421 0.168375 -0.766062 108 -4.70225 0.375487 -0.76606 161 -4.70718 -0.275892 -0.765688 238 -4.71372 -0.120495 -0.765686 124 -4.85833 0.958283 -0.765064 120 -4.71023 0.10162 -0.764924 99 -4.70989 0.116417 -0.764924 91 -4.70883 0.153404 -0.764923 100 -4.70566 -0.186855 -0.764547 103 -4.70924 0.0350199 -0.764545 92 -4.7066 0.0867712 -0.764164 100 -4.69526 0.337893 -0.764162 230 -4.70518 0.0497934 -0.763785 134 -4.70361 0.131082 -0.763784 149 -4.68634 0.352098 -0.762643 96 -5.18708 -0.552632 -0.762094 55 -4.83019 1.00794 -0.761808 10 -4.69011 0.182398 -0.761505 121 -4.83411 0.969174 -0.761085 54 -4.6866 -0.171245 -0.76075 123 -4.90299 -0.479312 -0.760377 73 -4.91176 -0.379099 -0.760376 163 -4.85038 0.861933 -0.760362 76 -4.91366 -0.32495 -0.760013 82 -4.90673 -0.340009 -0.758928 155 -4.67731 -0.156138 -0.758851 170 -4.66298 0.321034 -0.757706 152 -4.89779 -0.354894 -0.757481 224 -4.66052 0.298826 -0.756947 152 -4.66369 0.203527 -0.756568 148 -4.88574 -0.408112 -0.756035 68 -4.87704 -0.461457 -0.755312 43 -4.65448 0.232478 -0.755049 96 -4.63752 0.217127 -0.751632 107 -4.85954 -0.3907 -0.75097 171 -4.80195 0.783142 -0.749149 135 -4.7795 0.833455 -0.746616 236 -4.83553 -0.282084 -0.745182 49 -4.77495 0.801728 -0.744808 238 -5.08105 -0.524652 -0.743249 86 -4.75304 0.813303 -0.74119 255 -4.80909 -0.295841 -0.740479 182 -4.99015 0.964215 -0.738779 217 -4.98399 0.995548 -0.738778 83 -4.98084 1.0112 -0.738778 179 -4.79437 -0.242149 -0.737223 129 -4.7951 -0.227086 -0.737222 89 -4.96636 1.03271 -0.737065 152 -4.72676 0.755217 -0.73468 73 -4.77549 -0.263857 -0.733967 113 -4.95806 0.974337 -0.733639 99 -4.96363 0.935012 -0.733297 90 -4.9549 0.917321 -0.731241 132 -4.70969 0.737216 -0.731063 77 -5.01537 -0.44594 -0.730571 166 -4.74665 -0.210115 -0.728179 188 -4.99135 -0.491157 -0.727145 150 -4.70803 0.578479 -0.726723 96 -4.69417 0.681865 -0.726722 91 -4.69744 0.644699 -0.726361 86 -4.68812 0.696011 -0.725999 91 -4.98649 -0.459023 -0.725774 111 -4.92671 0.89627 -0.72576 182 -4.69149 0.658884 -0.725637 91 -4.68397 0.710429 -0.725637 104 -4.98798 -0.419671 -0.725431 102 -4.69359 0.629121 -0.725276 103 -4.69449 0.591727 -0.724553 80 -4.69421 0.56173 -0.72383 104 -4.68871 0.605946 -0.723829 95 -4.70005 0.472736 -0.723107 117 -4.69854 0.4875 -0.723107 105 -4.69619 0.509636 -0.723107 104 -4.72174 -0.0236162 -0.72275 88 -4.71923 -0.0755103 -0.722389 92 -4.68899 0.538663 -0.722383 104 -4.717 -0.0903092 -0.722028 94 -4.69909 0.420471 -0.722022 104 -4.71277 -0.171735 -0.721667 86 -4.7159 -0.00139526 -0.721665 86 -4.71391 0.0134027 -0.721303 76 -4.69451 0.405167 -0.720937 81 -4.7097 -0.0532142 -0.72058 85 -4.70542 -0.156709 -0.72022 121 -4.67894 0.522553 -0.720212 72 -4.70489 -0.104929 -0.719858 79 -4.69543 0.316181 -0.719853 70 -4.70182 0.146303 -0.719493 108 -4.68336 0.441242 -0.71949 70 -4.94777 -0.470944 -0.719264 190 -4.70168 0.0650048 -0.719132 104 -4.69626 0.23479 -0.71913 90 -4.69715 0.168296 -0.718769 83 -4.8901 0.86604 -0.718564 122 -4.69667 -0.119554 -0.718411 98 -4.69811 0.0280322 -0.718409 83 -4.69158 0.249311 -0.718407 86 -4.69555 0.0796437 -0.718047 81 -4.69512 0.101769 -0.718047 93 -4.68408 0.337543 -0.718044 74 -4.683 0.352258 -0.718044 88 -4.6907 0.182788 -0.717684 88 -4.68819 -0.141491 -0.716964 115 -4.67421 0.388505 -0.716958 71 -4.66825 0.454544 -0.716958 94 -4.6882 -0.0383608 -0.716601 92 -4.68126 0.219211 -0.716237 106 -4.68063 0.130806 -0.715514 95 -4.67831 0.196961 -0.715513 79 -4.67512 0.115923 -0.714429 80 -4.66227 0.365322 -0.714426 113 -4.67039 0.0497244 -0.713345 93 -4.6609 0.26955 -0.71298 155 -4.66003 0.28419 -0.71298 72 -4.90878 -0.397059 -0.711383 107 -4.64931 0.298145 -0.711171 196 -4.88251 -0.379354 -0.706586 112 -4.88425 -0.356342 -0.706586 227 -4.82546 0.823733 -0.70623 56 -4.87748 -0.340404 -0.705215 76 -4.8073 0.83627 -0.703489 62 -4.80594 0.797239 -0.702119 58 -4.85888 -0.323665 -0.701788 71 -4.79869 0.780608 -0.700406 85 -4.78359 0.76283 -0.697322 112 -4.83235 -0.306505 -0.696991 53 -4.83374 -0.28373 -0.696991 78 -4.78163 0.724098 -0.695952 85 -4.77232 0.745742 -0.694924 94 -4.8169 -0.267464 -0.693907 145 -4.81689 -0.22952 -0.693564 107 -4.77023 0.707125 -0.693554 108 -4.81182 -0.25199 -0.692879 145 -4.76657 0.691317 -0.692526 119 -4.75806 0.66727 -0.690471 104 -4.75427 0.651547 -0.689443 110 -4.75729 0.613947 -0.689101 136 -4.75528 0.598526 -0.688416 146 -4.74457 0.635104 -0.687387 116 -4.78084 -0.197501 -0.687054 129 -4.77823 -0.212423 -0.686711 100 -4.77778 -0.174805 -0.686368 115 -4.77634 -0.159719 -0.686025 122 -4.74199 0.544066 -0.68499 173 -4.73741 0.566182 -0.684647 166 -4.76697 -0.144359 -0.684312 138 -4.73365 0.580833 -0.684304 160 -4.73943 0.513656 -0.683962 189 -4.76366 -0.121773 -0.683627 148 -4.73583 0.528334 -0.68362 181 -4.75811 -0.106641 -0.682598 153 -4.75645 -0.0916448 -0.682256 156 -4.73199 0.490354 -0.682249 202 -4.75474 -0.0766588 -0.681913 167 -4.73649 0.423246 -0.681907 210 -4.73155 0.4753 -0.681907 202 -4.73317 0.437953 -0.681565 210 -4.74914 -0.0541511 -0.680885 174 -4.72713 0.459892 -0.680879 201 -4.74348 -0.0242498 -0.679856 190 -4.74352 0.0130067 -0.679856 187 -4.74141 -0.0391238 -0.679514 173 -4.72208 0.407095 -0.679167 211 -4.73566 -0.00184941 -0.678486 185 -4.73521 0.0650965 -0.678485 200 -4.73498 0.0799724 -0.678485 202 -4.73342 0.050211 -0.678142 200 -4.71805 0.384392 -0.678139 214 -4.73163 0.0279032 -0.6778 192 -4.72672 0.169026 -0.677456 211 -4.72098 0.287757 -0.677455 209 -4.71908 0.317414 -0.677454 215 -4.71754 0.339647 -0.677454 210 -4.71645 0.354466 -0.677454 210 -4.71531 0.369282 -0.677454 211 -4.72683 0.094733 -0.677114 208 -4.72397 0.131811 -0.676771 210 -4.72353 0.14665 -0.676771 208 -4.71916 0.250481 -0.67677 213 -4.72239 0.11693 -0.676429 210 -4.72026 0.183678 -0.676428 212 -4.71638 0.265206 -0.676427 216 -4.71416 0.30224 -0.676427 212 -5.06254 -0.506867 -0.675851 67 -4.71474 0.220581 -0.675742 210 -4.71375 0.19829 -0.6754 211 -4.71008 0.235218 -0.675057 209 -5.16476 -0.525764 -0.670738 49 -4.93372 1.04149 -0.668515 31 -4.90766 1.01168 -0.663423 34 -4.88955 0.991834 -0.659923 53 -4.88684 0.975278 -0.658968 62 -4.87783 0.949527 -0.656741 77 -4.93902 -0.47165 -0.655483 59 -4.85173 0.928478 -0.651967 82 -4.89917 -0.452537 -0.6488 34 -4.82361 0.907228 -0.646876 62 -4.88286 -0.435658 -0.645935 37 -4.92799 1.0247 -0.645917 64 -4.81867 0.890592 -0.645603 61 -4.92731 1.00844 -0.645297 59 -4.8783 -0.419839 -0.64498 58 -4.81117 0.865715 -0.643694 62 -4.85978 -0.379936 -0.641479 67 -4.90524 0.988015 -0.641267 93 -4.97379 -0.489567 -0.640352 63 -4.90998 0.932944 -0.640337 127 -4.79124 0.830947 -0.639557 62 -4.78861 0.845996 -0.639557 60 -4.79316 0.808022 -0.639239 34 -4.84281 -0.394004 -0.638934 35 -4.83534 -0.362882 -0.637342 71 -4.77621 0.789635 -0.636057 34 -4.77672 0.774299 -0.635738 33 -4.81336 -0.338557 -0.633523 69 -4.76549 0.757047 -0.633511 33 -4.85939 0.955243 -0.633206 68 -4.85654 0.938878 -0.632276 59 -4.80454 -0.322826 -0.631932 66 -4.80693 -0.285082 -0.631931 62 -4.75926 0.733027 -0.63192 32 -4.79962 -0.307382 -0.630977 64 -4.91436 -0.467814 -0.630741 72 -4.79597 -0.269377 -0.630021 60 -4.74203 0.715021 -0.628738 32 -4.83901 0.904113 -0.628555 86 -5.1608 -0.499114 -0.627815 135 -4.78299 -0.253653 -0.627794 61 -4.7384 0.699224 -0.627783 32 -4.89488 -0.442579 -0.62733 66 -4.83349 0.879584 -0.627005 92 -4.83428 0.864056 -0.626696 88 -4.73397 0.660569 -0.626192 32 -4.73187 0.675438 -0.626192 32 -4.77192 -0.238099 -0.625884 60 -4.7697 -0.200469 -0.625247 33 -4.76707 -0.215375 -0.624929 57 -4.7282 0.644585 -0.62492 31 -4.72725 0.606644 -0.623965 32 -4.72532 0.621492 -0.623965 31 -4.72717 0.591534 -0.623647 31 -4.81753 0.822198 -0.622975 84 -4.72313 0.575931 -0.622693 31 -4.75336 -0.162492 -0.622383 32 -4.72722 0.523736 -0.622375 31 -4.86411 -0.408824 -0.622059 76 -4.71992 0.552947 -0.621738 31 -4.80581 0.843566 -0.621735 85 -4.74837 -0.132491 -0.621427 31 -4.74465 -0.184627 -0.62111 32 -4.85417 -0.384897 -0.620198 88 -4.80253 0.804215 -0.620185 82 -4.74004 -0.147205 -0.620155 31 -4.71394 0.499702 -0.619829 31 -4.70987 0.536711 -0.619829 31 -4.7371 -0.109903 -0.619518 31 -4.73818 -0.0429256 -0.619517 31 -4.84509 -0.422463 -0.619268 84 -4.71156 0.484465 -0.619193 31 -4.73397 -0.0652202 -0.618881 31 -4.71129 0.447052 -0.618557 31 -4.79333 0.787266 -0.618325 82 -4.73039 -0.0280364 -0.618244 31 -4.73046 0.00911639 -0.618243 32 -4.7132 0.380066 -0.617921 31 -4.72585 -0.0800009 -0.617608 31 -4.7081 0.416887 -0.617602 31 -4.70324 0.468628 -0.617602 31 -4.72449 0.0239152 -0.617288 32 -4.71648 0.276081 -0.617286 31 -4.70742 0.401915 -0.617284 31 -4.83566 -0.36804 -0.617097 96 -4.72162 -0.094791 -0.616972 31 -4.72085 0.127733 -0.616969 31 -4.71219 0.312974 -0.616967 31 -4.83482 -0.352693 -0.616787 73 -4.83643 -0.329905 -0.616787 82 -4.72044 0.0387035 -0.616652 32 -4.72021 0.0609462 -0.616652 32 -4.71942 0.10543 -0.616651 32 -4.7065 0.364604 -0.616648 31 -4.70088 0.431101 -0.616648 31 -4.78527 0.762864 -0.616465 67 -4.71861 -0.0132072 -0.616334 31 -4.70725 0.297763 -0.616013 31 -4.70369 0.349503 -0.616012 32 -4.71005 0.208887 -0.615695 31 -4.82956 -0.314155 -0.615546 82 -4.83052 -0.298979 -0.615546 78 -4.70629 0.245758 -0.615377 31 -4.70134 0.327037 -0.615376 31 -4.70674 0.193905 -0.615059 32 -4.70353 0.260423 -0.615058 31 -4.70789 0.0903105 -0.614742 32 -4.70661 0.14207 -0.614741 32 -4.70614 0.156855 -0.614741 32 -4.70338 0.178945 -0.614423 31 -4.70223 0.0753931 -0.613787 31 -4.81763 -0.282918 -0.613376 83 -4.7681 0.744884 -0.613365 79 -4.76847 0.729612 -0.613055 68 -4.68535 0.229788 -0.611876 31 -4.76403 0.706017 -0.611815 64 -4.80787 -0.244407 -0.611515 85 -4.80313 -0.259275 -0.610895 83 -4.76263 0.660043 -0.610575 58 -4.75839 0.689955 -0.610575 76 -4.79875 -0.228777 -0.609965 81 -4.75662 0.67447 -0.609955 66 -4.7598 0.606441 -0.609025 67 -4.75001 0.635582 -0.608095 73 -4.78596 -0.205493 -0.607794 75 -4.78839 -0.137814 -0.607793 74 -4.78321 -0.175251 -0.607174 79 -4.78201 -0.152637 -0.606863 76 -4.75414 0.537614 -0.606856 73 -4.77869 -0.190099 -0.606554 75 -4.74218 0.619431 -0.606545 68 -4.93456 1.01809 -0.606024 60 -4.74654 0.551895 -0.605925 73 -4.73905 0.581248 -0.605305 78 -4.77138 -0.10723 -0.605002 71 -4.73889 0.566133 -0.604995 67 -4.76986 -0.0846985 -0.604692 71 -4.746 0.483981 -0.604686 73 -4.92962 0.992821 -0.604553 78 -5.00273 -0.468776 -0.60398 50 -4.76312 -0.121974 -0.603762 75 -4.75149 0.326693 -0.603447 78 -4.74316 0.431095 -0.603446 73 -4.75478 -0.0171163 -0.602211 74 -4.72873 0.49732 -0.602205 78 -4.75232 -0.0693562 -0.601902 73 -4.75078 0.139662 -0.601899 87 -4.73696 0.363158 -0.601587 83 -4.72997 0.444948 -0.601586 75 -4.74884 0.0202349 -0.60128 79 -4.74843 0.0649895 -0.60128 79 -4.74586 0.169389 -0.601279 80 -4.74677 0.0351489 -0.60097 87 -4.74101 0.236376 -0.600968 75 -4.74482 -0.0319334 -0.600661 75 -4.74269 0.0500425 -0.60035 87 -4.73908 0.191544 -0.600348 78 -4.73418 0.288271 -0.600347 82 -4.74067 -0.0542264 -0.600041 73 -4.74098 -0.00209654 -0.60004 79 -4.72594 0.377305 -0.600036 80 -4.71338 0.51076 -0.600035 77 -4.9017 0.971017 -0.599845 80 -4.73112 0.27319 -0.599727 80 -4.72151 0.406832 -0.599726 75 -4.72481 0.339915 -0.599417 78 -4.73395 0.102059 -0.599109 81 -4.73056 0.206131 -0.599108 77 -4.72801 0.258132 -0.599107 77 -4.71882 0.391693 -0.599106 76 -4.71281 0.458362 -0.599105 71 -4.90188 0.939052 -0.598963 123 -4.72291 0.309984 -0.598797 79 -4.73029 0.0871363 -0.598489 78 -4.72661 0.153944 -0.598178 83 -4.89309 0.953283 -0.59808 70 -4.72199 0.220665 -0.597868 74 -4.72175 0.116703 -0.597249 81 -4.88189 0.895386 -0.594844 88 -4.87905 0.910719 -0.594844 88 -4.87301 0.877879 -0.593078 89 -4.93568 -0.369185 -0.592798 130 -4.92935 -0.423274 -0.592504 93 -4.92533 -0.44633 -0.59221 67 -4.86347 0.852444 -0.591019 94 -4.85443 0.835088 -0.589254 90 -4.90824 -0.390537 -0.588973 90 -4.90502 -0.405801 -0.588679 84 -4.85118 0.818813 -0.588371 95 -4.90524 -0.351582 -0.588089 71 -4.84329 0.793961 -0.586606 105 -4.89402 -0.312237 -0.586029 87 -4.8399 0.777769 -0.585723 97 -4.88657 -0.334922 -0.585147 83 -4.83688 0.746097 -0.584546 86 -4.88313 -0.296206 -0.584264 85 -4.83061 0.760651 -0.583958 79 -4.87613 -0.28045 -0.583086 92 -4.87304 -0.264937 -0.582498 89 -4.82327 0.689673 -0.58131 87 -4.81884 0.719964 -0.58131 84 -4.81912 0.704526 -0.581016 85 -4.85842 -0.241269 -0.580143 101 -4.8552 -0.225843 -0.579555 93 -4.85193 -0.210438 -0.578966 94 -4.81781 0.61175 -0.578957 88 -4.80884 0.664404 -0.578662 91 -4.84948 -0.172206 -0.578377 92 -4.80894 0.649019 -0.578368 89 -4.809 0.633641 -0.578074 88 -4.84101 -0.187176 -0.5772 98 -4.80766 0.564386 -0.576603 87 -4.83616 -0.156596 -0.576317 93 -4.80206 0.594329 -0.576309 96 -4.83091 -0.133673 -0.575434 93 -4.80044 0.540566 -0.575132 93 -4.79605 0.578252 -0.575132 87 -4.82735 -0.118419 -0.574845 95 -4.8277 -0.103254 -0.574845 92 -4.82638 -0.0653188 -0.574551 93 -4.79819 0.52503 -0.574544 93 -4.81811 -0.0879586 -0.573374 95 -4.79429 0.486489 -0.573368 91 -4.79195 0.509076 -0.573367 92 -4.81681 -0.0349738 -0.573079 92 -4.81469 -0.0500964 -0.572785 97 -4.80106 0.365532 -0.57278 95 -4.79332 0.45596 -0.572779 93 -4.7941 0.402875 -0.572191 97 -4.78793 0.470607 -0.572191 92 -4.79983 0.297227 -0.571898 96 -4.79084 0.417752 -0.571897 89 -4.80703 -0.0123033 -0.571607 94 -4.80704 0.00279979 -0.571607 97 -4.80545 0.123599 -0.571606 96 -4.80504 0.138695 -0.571606 96 -4.792 0.379946 -0.571603 95 -4.80186 0.108391 -0.571018 96 -4.80094 0.0404704 -0.570724 105 -4.80079 0.0555529 -0.570724 103 -4.79787 0.176179 -0.570723 96 -4.78945 0.33432 -0.570721 97 -4.78838 0.349366 -0.570721 101 -4.79367 0.228818 -0.570428 87 -4.79293 0.243877 -0.570428 80 -4.77966 0.431857 -0.570425 92 -4.79712 0.0178103 -0.570136 100 -4.79017 0.258815 -0.570133 105 -4.78889 0.281384 -0.570133 95 -4.78703 0.311468 -0.570133 96 -4.79465 0.0705155 -0.569841 96 -4.79247 0.160875 -0.56984 96 -4.79137 0.190984 -0.56984 96 -4.79042 0.213559 -0.569839 95 -4.78848 0.085439 -0.568958 96 -5.10236 -0.49069 -0.566871 96 -5.00218 0.994836 -0.56329 85 -4.97414 0.973188 -0.558902 93 -4.95335 0.945042 -0.555336 100 -5.01712 -0.466147 -0.554803 63 -4.9485 0.928056 -0.554239 94 -4.94359 0.911108 -0.553142 94 -4.93222 0.885085 -0.550949 93 -4.9936 -0.392691 -0.550688 113 -4.98701 -0.447387 -0.550414 83 -4.9247 0.83599 -0.548755 101 -4.91935 0.866916 -0.548755 91 -4.9201 0.851129 -0.54848 95 -4.97328 -0.422456 -0.54822 89 -4.91293 0.810277 -0.546561 101 -4.95484 -0.405114 -0.545477 91 -4.90371 0.793001 -0.544916 85 -4.948 -0.365405 -0.544105 77 -4.94715 -0.349708 -0.543831 99 -4.89639 0.776094 -0.543544 88 -4.89411 0.752139 -0.542722 107 -4.88861 0.735621 -0.541625 104 -4.93146 -0.317379 -0.541362 101 -4.92649 -0.332583 -0.540814 103 -4.87716 0.718313 -0.539705 87 -4.91883 -0.26221 -0.539167 91 -4.87873 0.67946 -0.539157 88 -4.87887 0.663873 -0.538883 91 -4.9148 -0.223268 -0.538344 90 -4.91548 -0.207828 -0.538344 92 -4.90918 -0.292598 -0.538071 102 -4.87504 0.64779 -0.53806 89 -4.86762 0.701353 -0.53806 89 -4.90814 -0.238389 -0.537521 93 -4.90414 -0.276807 -0.537248 104 -4.87017 0.623845 -0.536963 97 -4.87014 0.608308 -0.536689 89 -4.89067 -0.183559 -0.534778 87 -4.89122 -0.168194 -0.534778 98 -4.85705 0.568061 -0.534221 110 -4.85038 0.590485 -0.533673 97 -4.8529 0.552159 -0.533399 87 -4.87985 -0.152392 -0.533132 105 -4.87925 -0.0986777 -0.532857 92 -4.85079 0.497999 -0.532302 88 -4.84673 0.536081 -0.532302 91 -4.87239 -0.136797 -0.532035 89 -4.85036 0.482572 -0.532028 88 -4.86963 -0.0831265 -0.531486 88 -4.87014 -0.0448784 -0.531485 108 -4.87034 0.00867333 -0.531485 92 -4.84945 0.42872 -0.531206 99 -4.84808 0.443952 -0.531206 104 -4.84593 0.466794 -0.531206 88 -4.86307 -0.11355 -0.530663 88 -4.86431 -0.029509 -0.530662 94 -4.86424 0.0392584 -0.530662 93 -4.84872 0.390323 -0.530658 89 -4.83459 0.519445 -0.530382 88 -4.86007 -0.0600019 -0.530114 87 -4.85845 -0.00654787 -0.529839 92 -4.84782 0.321378 -0.529836 96 -4.8409 0.412695 -0.529835 87 -4.8551 0.11551 -0.529564 93 -4.84229 0.343959 -0.529287 92 -4.84119 0.359171 -0.529287 92 -4.84704 0.183941 -0.52874 92 -4.83609 0.374093 -0.528738 95 -4.84198 0.25235 -0.528465 93 -4.84651 0.023984 -0.528193 92 -4.84569 0.0924944 -0.528193 92 -4.84438 0.145769 -0.528192 96 -4.84183 0.214237 -0.528191 103 -4.83787 0.290264 -0.52819 92 -4.84192 0.160932 -0.527918 94 -4.83681 0.23688 -0.527642 92 -4.83523 0.267266 -0.527642 91 -4.83298 0.305232 -0.527642 96 -4.84023 0.0620018 -0.52737 97 -4.83887 0.130422 -0.527369 99 -4.83654 0.198814 -0.527369 95 -4.83605 0.0771669 -0.526821 95 -5.31281 -0.4724 -0.503468 58 -5.2275 1.01881 -0.502383 40 -5.17622 0.991667 -0.494894 40 -5.23525 -0.44932 -0.49277 50 -5.22603 -0.390763 -0.490897 40 -5.21687 -0.406603 -0.489827 40 -5.14684 0.944005 -0.489813 40 -5.14233 0.968248 -0.489813 40 -5.19909 -0.429954 -0.487688 40 -5.13419 0.924943 -0.487673 40 -5.12958 0.882515 -0.486069 40 -5.12342 0.906322 -0.485801 40 -5.11158 0.846265 -0.48286 40 -5.1089 0.862319 -0.482859 40 -5.1597 -0.345421 -0.481535 40 -5.15208 -0.369337 -0.480733 40 -5.09467 0.826929 -0.480185 40 -5.0946 0.802274 -0.47965 40 -5.14594 -0.312114 -0.479395 40 -5.3127 1.01858 -0.479187 43 -5.14097 -0.328047 -0.47886 40 -5.08974 0.76872 -0.478314 40 -5.13349 -0.287157 -0.477523 40 -5.13437 -0.271029 -0.477522 40 -5.08743 0.743836 -0.477511 40 -5.07947 0.783458 -0.477244 40 -5.07435 0.709299 -0.475105 40 -5.11419 -0.237861 -0.47458 40 -5.07387 0.668615 -0.474303 40 -5.10946 -0.253749 -0.474045 40 -5.06782 0.684002 -0.473767 40 -5.06033 0.723493 -0.4735 40 -5.10659 -0.181313 -0.473242 40 -5.07298 0.595615 -0.472966 40 -5.06815 0.635439 -0.472966 40 -5.06613 0.651359 -0.472965 40 -5.10139 -0.213248 -0.472707 40 -5.06569 0.554401 -0.471362 40 -5.09015 -0.196823 -0.471102 40 -5.092 -0.140843 -0.471102 40 -5.09242 -0.124845 -0.471101 40 -5.05732 0.609819 -0.471094 40 -5.0915 -0.068829 -0.470833 40 -5.08757 -0.156736 -0.470567 40 -5.08503 -0.10073 -0.470031 40 -5.24564 0.988997 -0.470012 40 -5.05528 0.521068 -0.46949 40 -5.05362 0.536946 -0.46949 40 -5.31121 -0.471454 -0.469263 69 -5.06223 0.425515 -0.469223 40 -5.05724 0.48115 -0.469223 40 -5.07801 -0.028831 -0.468961 40 -5.07374 0.210409 -0.468958 40 -5.05889 0.441234 -0.468956 40 -5.04531 0.576151 -0.468954 40 -5.05176 0.496627 -0.468688 40 -5.07144 -0.0845941 -0.468159 40 -5.07188 -0.0527273 -0.468159 40 -5.07215 0.00304186 -0.468158 40 -5.05869 0.36921 -0.468154 40 -5.0569 0.393045 -0.468154 40 -5.07015 -0.0128981 -0.467891 40 -5.05924 0.265499 -0.467353 40 -5.06355 0.0825413 -0.467087 40 -5.06008 0.0427176 -0.466553 40 -5.0582 0.0267986 -0.466285 40 -5.0566 0.130076 -0.466284 40 -5.05325 0.225362 -0.466283 40 -5.04599 0.35228 -0.466282 40 -5.05289 0.185584 -0.466016 40 -5.05054 0.241133 -0.466016 40 -5.04663 0.312506 -0.466015 40 -5.03984 0.407571 -0.466014 40 -5.03506 0.462961 -0.466013 40 -5.04999 0.153692 -0.465482 40 -5.04363 0.296397 -0.46548 40 -5.05001 0.0584474 -0.465215 40 -5.04906 0.113971 -0.465215 40 -5.03917 0.335856 -0.465212 40 -5.04741 0.0980591 -0.464947 40 -5.04552 0.169402 -0.464947 40 -5.04058 0.280309 -0.464945 40 -5.19796 0.963364 -0.463385 40 -5.45861 -0.481454 -0.460823 42 -5.17899 0.934745 -0.460327 40 -5.22644 -0.438689 -0.458048 45 -5.21988 -0.42159 -0.457028 40 -5.15258 0.913422 -0.456504 40 -5.21525 -0.404698 -0.456263 40 -5.14956 0.89624 -0.45574 40 -5.19277 -0.386428 -0.453205 40 -5.19255 -0.361805 -0.45295 40 -5.18971 -0.345208 -0.45244 40 -5.12103 0.874868 -0.451662 40 -5.30837 1.00356 -0.451254 47 -5.18087 -0.328225 -0.451165 40 -5.11727 0.849467 -0.450643 40 -5.11599 0.832769 -0.450133 40 -5.37106 -0.457156 -0.449799 40 -5.1703 -0.270445 -0.44938 40 -5.16256 -0.302547 -0.448616 40 -5.1106 0.790802 -0.448604 40 -5.1636 -0.245661 -0.448361 40 -5.55403 1.02628 -0.448286 20 -5.10094 0.813968 -0.44784 40 -5.10761 0.75755 -0.447585 40 -5.14765 -0.285369 -0.446577 40 -5.14785 -0.196214 -0.446066 40 -5.08951 0.771296 -0.445546 40 -5.14126 -0.212112 -0.445302 40 -5.13859 -0.228163 -0.445047 40 -5.09148 0.730754 -0.445037 40 -5.13484 -0.171421 -0.444282 40 -5.08785 0.713958 -0.444272 40 -5.08949 0.65724 -0.443508 40 -5.08417 0.697192 -0.443508 40 -5.2491 0.974978 -0.443415 52 -5.12194 -0.138708 -0.442497 40 -5.11949 -0.154729 -0.442243 40 -5.12055 -0.114516 -0.442242 40 -5.12117 -0.0823404 -0.442242 40 -5.11692 -0.0983312 -0.441732 40 -5.07256 0.679444 -0.441724 40 -5.07382 0.622932 -0.44096 40 -5.0679 0.638394 -0.44045 40 -5.07444 0.566477 -0.440196 40 -5.06881 0.598125 -0.439941 40 -5.22436 0.944789 -0.439741 60 -5.06869 0.581983 -0.439686 40 -5.22535 0.928016 -0.439496 58 -5.28805 -0.425415 -0.439265 45 -5.06689 0.525437 -0.438667 40 -5.06446 0.469003 -0.437648 40 -5.06219 0.492862 -0.437648 40 -5.07766 0.213804 -0.437141 40 -5.07321 0.301503 -0.43714 40 -5.06662 0.39707 -0.437139 40 -5.05337 0.540149 -0.437138 40 -5.07786 -0.0574894 -0.436634 40 -5.05939 0.436531 -0.436629 40 -5.07604 -0.04151 -0.436379 40 -5.05942 0.412534 -0.436374 40 -5.05074 0.507823 -0.436373 40 -5.2656 -0.407081 -0.436326 40 -5.20285 0.907037 -0.436312 58 -5.07266 0.125884 -0.436123 40 -5.07223 -0.00958864 -0.435869 40 -5.07215 0.0302484 -0.435869 40 -5.07203 0.0461831 -0.435869 40 -5.07121 0.10195 -0.435868 40 -5.20315 0.881827 -0.435822 61 -5.07023 0.0143192 -0.435614 40 -5.06977 0.0700675 -0.435614 40 -5.06827 0.14173 -0.435613 40 -5.0588 0.340599 -0.435611 40 -5.05597 0.38032 -0.43561 40 -5.20394 0.865142 -0.435577 69 -5.0653 0.173514 -0.435357 40 -5.06384 0.157548 -0.435103 40 -5.05915 0.268861 -0.435102 40 -5.05589 0.324471 -0.435101 40 -5.06424 -0.0254419 -0.43485 40 -5.05177 0.356101 -0.434846 40 -5.04416 0.451256 -0.434845 40 -5.05601 0.252787 -0.434592 40 -5.0565 0.197112 -0.434338 40 -5.05516 0.228879 -0.434337 40 -5.05035 0.284347 -0.434082 40 -5.24111 -0.388755 -0.433141 40 -5.19098 0.821046 -0.433128 61 -5.1851 0.845169 -0.432883 61 -5.04771 0.0857351 -0.43281 40 -5.23298 -0.363414 -0.431916 40 -5.18178 0.802852 -0.431658 60 -5.22815 -0.346606 -0.43118 40 -5.17643 0.785339 -0.430678 63 -5.47218 -0.479086 -0.430106 45 -5.21535 -0.329374 -0.429465 40 -5.21579 -0.288304 -0.42922 64 -5.16869 0.742617 -0.428964 61 -5.20079 -0.230236 -0.427015 64 -5.14944 0.764553 -0.427004 62 -5.19684 -0.270982 -0.42677 65 -5.16097 0.667094 -0.42676 69 -5.19306 -0.303523 -0.426526 65 -5.1494 0.723229 -0.42627 64 -5.15325 0.633142 -0.425291 66 -5.14705 0.681682 -0.42529 64 -5.18379 -0.254044 -0.425055 61 -5.18562 -0.213324 -0.425055 59 -5.14182 0.70565 -0.425045 64 -5.1473 0.648813 -0.424801 64 -5.1823 -0.1969 -0.424565 63 -5.14238 0.607154 -0.423576 66 -5.1673 -0.172028 -0.422605 64 -5.16828 -0.139557 -0.422604 68 -5.1695 -0.0827226 -0.422604 67 -5.13821 0.57391 -0.422597 64 -5.13638 0.59005 -0.422596 63 -5.16384 -0.155695 -0.422114 67 -5.16524 -0.0989069 -0.422114 66 -5.16403 -0.0421021 -0.421868 67 -5.16094 -0.115065 -0.421624 67 -5.14168 0.460038 -0.421618 64 -5.14021 0.476189 -0.421618 62 -5.13297 0.548807 -0.421617 74 -5.13474 0.491936 -0.421128 63 -5.13237 0.516127 -0.421127 64 -5.13072 0.53225 -0.421127 64 -5.15229 -0.00969215 -0.420398 76 -5.1479 -0.0663106 -0.419909 66 -5.14826 -0.0258775 -0.419908 65 -5.12932 0.418271 -0.419658 64 -5.14414 0.0468474 -0.419418 64 -5.14235 0.014509 -0.419173 74 -5.14036 0.143733 -0.419172 65 -5.13513 0.272866 -0.41917 63 -5.12665 0.401825 -0.419169 65 -5.14 0.0629395 -0.418927 68 -5.13766 0.0871164 -0.418682 64 -5.12569 0.361248 -0.418679 62 -5.12393 0.385399 -0.418679 64 -5.13252 0.199982 -0.418436 64 -5.13001 0.256403 -0.418435 63 -5.12588 0.328901 -0.418435 63 -5.30685 0.964564 -0.418426 20 -5.13142 0.175716 -0.418191 66 -5.12989 0.216011 -0.418191 65 -5.13106 0.119226 -0.417947 67 -5.12997 0.159521 -0.417946 66 -5.12434 0.288388 -0.417945 61 -5.13037 0.0305343 -0.417703 65 -5.11888 0.344571 -0.4177 62 -5.11945 0.30423 -0.417455 63 -5.1095 0.440812 -0.417454 62 -5.12546 0.102957 -0.417212 67 -5.10539 0.23093 -0.415251 64 -5.28002 0.934161 -0.414694 20 -5.27118 0.915584 -0.413294 20 -5.27207 0.898697 -0.413061 20 -5.2729 0.881812 -0.412828 20 -5.30489 -0.430059 -0.410042 20 -5.25022 0.835831 -0.409329 20 -5.29939 -0.370963 -0.408875 20 -5.29038 -0.41208 -0.408176 20 -5.23776 0.850777 -0.408162 20 -5.24483 0.792847 -0.40793 20 -5.24103 0.817555 -0.40793 20 -5.24142 0.733536 -0.406531 20 -5.2379 0.758227 -0.40653 20 -5.27444 -0.385753 -0.406076 20 -5.27676 -0.352606 -0.406076 20 -5.23156 0.774118 -0.406064 20 -5.27439 -0.327469 -0.405609 20 -5.26461 -0.252141 -0.403975 20 -5.22203 0.714213 -0.403965 20 -5.26049 -0.29336 -0.403742 20 -5.22031 0.697296 -0.403498 20 -5.2257 0.622979 -0.403032 20 -5.24963 -0.309253 -0.402576 20 -5.22265 0.5977 -0.402333 20 -5.21368 0.67147 -0.402332 20 -5.21385 0.638235 -0.401866 20 -5.21858 0.580658 -0.401633 20 -5.20985 0.654374 -0.401632 20 -5.2376 -0.234221 -0.400709 20 -5.24213 -0.0860574 -0.400707 20 -5.23405 -0.267014 -0.400476 20 -5.23531 -0.192913 -0.400242 20 -5.23786 -0.102428 -0.400241 20 -5.23444 -0.159944 -0.400008 20 -5.20883 0.521738 -0.399767 20 -5.22839 -0.217303 -0.399542 20 -5.22795 -0.176156 -0.399308 20 -5.20321 0.53771 -0.399301 20 -5.22496 0.144153 -0.398838 20 -5.20211 0.48812 -0.398601 20 -5.2229 -0.0282081 -0.398374 20 -5.19272 0.56141 -0.398367 20 -5.1966 0.504099 -0.398135 20 -5.21899 0.0128229 -0.397907 20 -5.19787 0.446609 -0.397669 20 -5.21329 -0.134603 -0.397442 20 -5.21467 -0.0608906 -0.397441 20 -5.21484 -0.0445076 -0.397441 20 -5.19923 0.405627 -0.397436 20 -5.21186 0.111093 -0.397206 20 -5.20742 0.242033 -0.397204 20 -5.19248 0.462604 -0.397202 20 -5.20575 -0.118003 -0.396508 20 -5.20462 0.160055 -0.396505 20 -5.19375 0.372423 -0.396503 20 -5.20264 0.0700723 -0.39604 20 -5.19957 0.127236 -0.395806 20 -5.19659 0.217052 -0.395805 20 -5.18661 0.388324 -0.395803 20 -5.19587 0.184339 -0.395572 20 -5.19275 0.257772 -0.395571 20 -5.19056 0.298547 -0.395571 20 -5.18142 0.428891 -0.395569 20 -5.19707 0.0292067 -0.39534 20 -5.18553 0.34733 -0.395337 20 -5.19489 0.0536861 -0.395107 20 -5.18931 0.20046 -0.394872 20 -5.18199 0.273609 -0.394404 20 -5.17968 0.314299 -0.394404 20 -5.18523 -0.00338072 -0.393941 20 -5.17074 0.330104 -0.393471 20 -5.17657 0.0861181 -0.393007 20 -8.79499 0.468029 -0.386515 86 -8.80365 0.177673 -0.386382 47 -8.79562 0.371138 -0.386245 88 -8.79243 0.440206 -0.386244 85 -8.78843 0.398515 -0.385838 57 -8.78876 0.343215 -0.385703 85 -8.78121 0.273897 -0.385027 64 -8.78077 0.218676 -0.384892 83 -8.77605 0.24616 -0.384621 80 -8.76635 0.301047 -0.384078 44 -6.84005 -0.363452 -0.382718 40 -6.81084 -0.308397 -0.379946 163 -6.76863 -0.136366 -0.375786 90 -6.76537 -0.0937941 -0.375439 101 -6.76305 -0.11502 -0.375266 110 -6.76374 -0.0619019 -0.375265 91 -6.75795 -0.168049 -0.37492 121 -6.76001 -0.0194063 -0.374918 71 -6.75793 -0.0406378 -0.374745 90 -6.19696 1.13746 -0.374728 40 -6.75341 -0.189183 -0.374574 100 -6.75008 0.00179022 -0.374052 71 -6.74481 -0.210181 -0.373881 119 -6.73811 -0.284178 -0.373535 98 -6.74402 0.0335459 -0.373532 71 -6.73814 -0.231188 -0.373362 117 -6.72901 -0.262656 -0.372669 114 -5.54515 0.785433 -0.370384 40 -5.50728 0.984192 -0.36976 40 -5.53773 0.766691 -0.369347 40 -5.51912 0.826108 -0.368308 73 -5.56949 -0.318892 -0.368113 68 -5.51185 0.860472 -0.3681 84 -5.56779 -0.178537 -0.367281 40 -5.49129 0.937003 -0.367269 41 -5.51113 0.798435 -0.367063 40 -5.48485 0.962536 -0.367061 40 -5.56224 -0.222083 -0.366866 40 -5.56291 -0.204609 -0.366866 40 -5.51366 0.737025 -0.366441 40 -5.49879 0.840818 -0.36644 77 -5.51003 0.718956 -0.365818 40 -5.54663 -0.299991 -0.365621 66 -5.55242 -0.16051 -0.36562 40 -5.55262 -0.0383531 -0.365411 40 -5.47653 0.916873 -0.365401 84 -5.52878 -0.421084 -0.364585 40 -5.54192 -0.0991808 -0.364373 40 -5.47236 0.88091 -0.364363 50 -5.52347 -0.438119 -0.36417 43 -5.54044 -0.0643252 -0.364165 40 -5.49646 0.699707 -0.364157 40 -5.53166 -0.281682 -0.36396 56 -5.535 -0.14252 -0.363751 40 -5.52016 -0.402942 -0.363546 40 -5.53363 -0.116385 -0.363543 40 -5.53425 -0.0816135 -0.363543 40 -5.53485 -0.00337025 -0.363542 40 -7.0468 0.243802 -0.36312 89 -5.51831 -0.341825 -0.362923 40 -5.5206 -0.263676 -0.362714 40 -5.52178 -0.237659 -0.362714 40 -5.51964 0.283041 -0.362708 40 -5.52142 0.196246 -0.362502 40 -5.52277 0.0400696 -0.362296 40 -5.52055 0.161501 -0.362295 40 -5.44796 0.894655 -0.362079 70 -5.50728 -0.358467 -0.361885 40 -5.51296 0.256695 -0.361878 40 -5.51248 0.22198 -0.361671 40 -5.51433 0.0833608 -0.361465 40 -5.51293 -0.0205739 -0.361258 40 -5.50778 0.239145 -0.361256 40 -5.49555 0.43793 -0.361254 40 -5.49819 -0.375188 -0.361055 40 -5.51093 0.0227273 -0.36105 40 -5.50283 0.29959 -0.361047 40 -7.0201 0.265055 -0.361005 67 -7.01369 -0.363603 -0.360849 40 -5.49018 0.454885 -0.360838 40 -5.50608 0.100577 -0.360634 40 -5.50411 0.178404 -0.360634 40 -7.01078 0.341959 -0.360516 40 -5.50136 0.135092 -0.360219 40 -5.48004 0.480093 -0.360008 40 -5.47653 0.497136 -0.3598 52 -5.48694 0.33338 -0.359594 40 -5.49477 0.0572614 -0.359389 40 -5.49381 0.117674 -0.359389 40 -5.47098 0.513986 -0.359384 40 -7.0017 0.22039 -0.359378 104 -5.45228 0.668215 -0.359175 40 -5.45242 0.633505 -0.35876 71 -6.98992 0.319014 -0.358726 40 -5.47423 0.375829 -0.358555 40 -5.47302 0.393025 -0.358555 40 -5.46141 0.530439 -0.358554 40 -5.45885 0.556168 -0.358554 40 -6.98379 0.362735 -0.3584 40 -5.47604 0.315512 -0.358348 40 -5.44645 0.650177 -0.358345 47 -6.98491 0.296822 -0.358238 65 -5.46515 0.418386 -0.357932 40 -5.44536 0.589433 -0.357515 72 -5.44252 0.615087 -0.357515 80 -5.45949 0.357666 -0.356895 40 -5.43135 0.570736 -0.355855 40 -6.48687 0.051656 -0.351184 41 -5.62886 0.918629 -0.350492 40 -5.62919 0.891453 -0.350098 40 -6.82561 0.906678 -0.349608 40 -5.60356 0.995967 -0.34931 40 -5.66716 -0.455157 -0.348734 40 -5.61821 0.871565 -0.34872 40 -5.62352 0.809153 -0.348327 40 -5.6024 0.932281 -0.348129 40 -6.85554 -0.33322 -0.347831 40 -5.58903 0.975198 -0.347538 40 -5.60519 0.851447 -0.347145 40 -6.84078 -0.386333 -0.346855 40 -5.598 0.832326 -0.346161 40 -5.57592 0.945774 -0.345766 40 -5.59696 0.769323 -0.345177 40 -5.63643 -0.354969 -0.344992 40 -6.75903 0.952142 -0.344726 40 -5.59521 0.706445 -0.344193 40 -5.58467 0.785471 -0.344192 40 -6.80684 0.386367 -0.344081 40 -5.58869 0.741314 -0.343996 40 -6.8144 -0.138127 -0.343923 86 -6.80952 -0.0631118 -0.343434 86 -6.80576 -0.030989 -0.343109 83 -5.61542 -0.371454 -0.343023 40 -5.58113 0.722431 -0.343012 40 -6.80144 -0.180576 -0.342947 86 -6.79583 -0.233836 -0.342623 81 -6.79984 -0.009578 -0.34262 81 -6.79971 0.0438275 -0.34262 81 -5.58268 0.678077 -0.342618 40 -6.79454 -0.212415 -0.34246 88 -5.60504 -0.432742 -0.342433 40 -6.79504 -0.105626 -0.342296 88 -6.79335 -0.0842474 -0.342133 86 -6.78228 -0.275999 -0.341647 64 -6.78788 0.0118113 -0.341644 82 -6.78404 -0.158719 -0.341483 82 -6.78558 0.0651107 -0.34148 82 -5.59247 -0.414166 -0.341055 40 -6.77737 0.0863555 -0.340829 76 -6.77707 0.107647 -0.340829 72 -5.5884 -0.387423 -0.340464 40 -5.5651 0.640384 -0.340453 40 -6.76718 -0.254029 -0.340345 77 -6.75701 -0.306779 -0.339694 59 -5.55515 0.656891 -0.339665 40 -5.5797 0.157151 -0.338489 40 -5.55043 0.532784 -0.337894 40 -6.68405 0.867066 -0.33773 40 -5.56008 0.392983 -0.337699 40 -5.54812 0.514956 -0.337501 40 -5.80238 1.0479 -0.336999 40 -5.56327 0.174106 -0.336914 40 -5.54376 0.496964 -0.33691 40 -5.55974 0.217707 -0.336717 40 -5.54406 0.470656 -0.336714 40 -5.55412 0.296165 -0.336519 40 -5.53223 0.574854 -0.336516 40 -5.55429 0.252436 -0.336322 40 -5.55118 0.313492 -0.336322 40 -5.53203 0.557264 -0.336319 40 -5.55689 0.112726 -0.336127 40 -5.54818 0.330802 -0.336125 40 -5.55108 0.234798 -0.335929 40 -5.55204 0.0166527 -0.335537 40 -5.54877 0.191039 -0.335535 40 -5.54997 0.0340736 -0.33534 40 -5.54983 0.0515094 -0.33534 40 -5.54353 0.269355 -0.335338 40 -5.53163 0.452037 -0.335336 40 -5.53548 0.373651 -0.33514 40 -6.65639 0.831727 -0.335126 40 -5.54608 -0.00952814 -0.334947 40 -5.54528 0.0950087 -0.334946 40 -5.53465 0.35612 -0.334943 40 -5.5386 0.12968 -0.334355 40 -8.74555 0.511 -0.334303 80 -8.75231 0.194622 -0.333933 60 -8.74592 0.387034 -0.333931 84 -8.74113 0.483174 -0.33393 82 -8.74067 0.414306 -0.333682 80 -5.51715 0.407176 -0.333564 40 -8.73335 0.441446 -0.333309 82 -8.73895 0.249232 -0.333187 80 -8.73473 0.317781 -0.333062 45 -8.73171 0.221552 -0.33269 84 -8.7277 0.344967 -0.332689 86 -5.81566 -0.579515 -0.332184 40 -5.49931 0.431849 -0.331989 40 -8.71573 0.289618 -0.331819 61 -6.65433 0.399268 -0.331714 85 -6.63513 0.419109 -0.330249 109 -5.79368 -0.558842 -0.329954 53 -5.77559 -0.538698 -0.328095 40 -6.60324 0.448462 -0.327808 99 -5.7713 -0.519989 -0.327537 64 -6.59186 0.468537 -0.326994 86 -5.75782 -0.49136 -0.32605 40 -7.88681 -0.371152 -0.32461 40 -8.57857 -0.375969 -0.3235 47 -5.64041 0.991983 -0.321202 40 -5.64452 0.829044 -0.319159 40 -6.05283 0.880027 -0.318953 40 -5.62633 0.90783 -0.318601 40 -5.634 0.845626 -0.318416 40 -5.62011 0.870685 -0.317486 40 -5.61538 0.888037 -0.3173 40 -5.65618 -0.464325 -0.316385 40 -5.6037 0.805274 -0.315071 40 -5.62774 0.55755 -0.314515 40 -5.62596 0.575226 -0.314515 40 -5.96957 1.06982 -0.314447 161 -5.61923 0.601327 -0.314143 40 -5.61731 0.618978 -0.314143 40 -5.59559 0.777269 -0.313956 40 -5.62153 0.539145 -0.313772 40 -5.59603 0.759429 -0.31377 40 -5.56839 0.916698 -0.313397 40 -5.61866 0.458854 -0.312844 40 -5.55812 0.941958 -0.312839 40 -5.9213 1.21541 -0.312714 66 -5.6117 0.493818 -0.312472 40 -5.6213 -0.337013 -0.312295 40 -5.63139 0.00776971 -0.312291 40 -5.91923 1.19559 -0.312194 85 -5.58841 0.678165 -0.312098 40 -5.90771 1.24162 -0.31202 40 -5.60417 0.51093 -0.311914 40 -5.5896 0.633823 -0.311727 40 -5.54335 0.957434 -0.311724 63 -5.57811 0.712535 -0.31154 40 -5.6062 0.413613 -0.311357 40 -5.57271 0.738561 -0.311354 40 -5.57636 0.694533 -0.311169 40 -5.60643 -0.318376 -0.310808 40 -5.61546 -0.00981914 -0.310804 40 -5.59693 0.430651 -0.310614 40 -5.59356 0.395082 -0.310057 40 -5.58544 0.473958 -0.30987 40 -5.6034 -0.0361497 -0.309689 40 -5.89367 1.17104 -0.309596 93 -5.60107 -0.0713205 -0.309504 40 -5.60127 -0.053725 -0.309504 40 -5.56281 0.657463 -0.309496 40 -5.58543 0.36811 -0.309128 40 -5.8913 1.1417 -0.308903 92 -5.57849 -0.351845 -0.308392 40 -5.57479 -0.377985 -0.308206 40 -7.59157 0.960609 -0.308068 40 -5.56831 -0.439093 -0.308021 53 -5.58474 -0.0973633 -0.308017 40 -5.58242 -0.114856 -0.307832 40 -5.58155 0.0254675 -0.307644 40 -5.56367 -0.298211 -0.306719 40 -5.87097 1.09941 -0.306478 87 -5.86553 1.11746 -0.306305 80 -5.87047 1.08022 -0.306132 82 -5.54649 -0.41097 -0.305791 40 -7.03504 0.210611 -0.305698 40 -5.54379 -0.393244 -0.305419 40 -5.55243 0.191241 -0.305226 66 -5.54513 -0.270926 -0.30486 40 -5.91594 -0.664033 -0.304764 52 -5.54473 -0.235985 -0.304674 40 -5.91702 -0.635944 -0.304591 71 -5.53792 0.330278 -0.304482 40 -5.53288 0.347442 -0.30411 40 -5.91304 -0.616757 -0.304071 86 -5.53583 -0.209431 -0.303744 40 -5.53248 -0.19188 -0.303372 40 -5.53557 0.0515565 -0.303369 40 -5.52729 0.268755 -0.303181 40 -5.53031 0.12973 -0.302997 94 -5.92884 0.0636025 -0.302677 56 -5.52688 0.103614 -0.302625 109 -5.52311 -0.174139 -0.302443 40 -5.52518 0.0862282 -0.30244 112 -5.51855 0.242315 -0.302252 40 -5.51793 0.146844 -0.301881 111 -5.51214 -0.2518 -0.3017 40 -5.51051 0.285369 -0.301694 40 -5.51392 -0.147797 -0.301513 40 -5.51547 0.0687924 -0.301511 185 -5.50759 0.302578 -0.301508 40 -5.8852 -0.595302 -0.301472 87 -6.97218 0.241392 -0.301151 42 -5.8358 0.941416 -0.301109 40 -5.50838 -0.130304 -0.300955 40 -5.5035 0.163828 -0.30058 120 -5.87316 -0.57551 -0.300259 91 -5.49739 0.224188 -0.300208 40 -5.85596 -0.546066 -0.298526 84 -5.84375 -0.526476 -0.297313 80 -5.83941 -0.507624 -0.296793 121 -6.90736 -0.314748 -0.29661 40 -6.89666 0.162587 -0.295431 40 -5.75132 1.01109 -0.294872 56 -5.77365 0.8197 -0.294181 40 -5.74772 0.89902 -0.292967 40 -5.74932 0.86228 -0.292621 40 -5.74068 0.879408 -0.292101 40 -5.78719 0.380228 -0.291413 40 -5.78829 -0.329803 -0.291248 40 -5.782 0.398115 -0.291067 40 -5.77842 0.361379 -0.290547 40 -5.77608 0.297488 -0.290028 40 -5.74307 0.65009 -0.289678 40 -5.7628 -0.355712 -0.289169 40 -5.76415 0.333152 -0.289162 40 -5.74574 0.568221 -0.289159 40 -5.74966 0.504827 -0.288987 40 -5.73717 0.631135 -0.288985 40 -5.71949 0.775112 -0.288984 40 -5.73111 0.666932 -0.288812 40 -5.71309 0.792512 -0.288637 40 -5.73414 0.603442 -0.288466 40 -5.74586 -0.454485 -0.288304 66 -5.73402 0.585213 -0.288293 40 -5.68744 0.935168 -0.288289 46 -6.798 -0.10711 -0.2881 40 -5.75125 0.314219 -0.287949 40 -6.73781 0.893901 -0.287943 40 -6.79472 -0.0430253 -0.287806 40 -6.79255 -0.0643604 -0.287659 40 -5.73218 0.521374 -0.287601 40 -5.71186 0.710141 -0.287599 40 -6.79086 0.0103197 -0.287512 40 -5.71317 0.68297 -0.287426 40 -6.78644 -0.18162 -0.287367 40 -6.78833 -0.0856631 -0.287366 40 -6.7868 0.0316186 -0.287218 40 -6.77677 -0.287963 -0.286928 40 -5.73238 0.421635 -0.286909 40 -5.72815 0.475641 -0.286908 40 -6.78088 -0.0110367 -0.286779 40 -6.76884 0.404129 -0.286774 40 -6.77284 -0.234546 -0.286488 40 -6.77548 -0.138776 -0.286487 40 -6.77637 0.084759 -0.286484 40 -8.80782 0.640689 -0.286412 71 -6.77155 -0.213212 -0.286341 40 -6.77302 -0.160022 -0.28634 40 -6.75957 0.424859 -0.286187 40 -8.80476 0.598786 -0.286075 77 -5.7211 0.438833 -0.286042 40 -6.76863 0.0633644 -0.285898 40 -6.7681 0.105892 -0.285897 40 -5.9766 1.24142 -0.285818 40 -6.76553 0.137736 -0.28575 40 -5.7087 0.537226 -0.285695 40 -8.80037 0.542986 -0.285626 79 -8.80948 -0.315219 -0.285523 40 -5.97656 1.22186 -0.285493 40 -8.79464 0.570384 -0.285401 81 -5.71175 0.456134 -0.285349 40 -6.75612 -0.255281 -0.285315 40 -8.7944 0.473344 -0.285065 85 -5.67767 0.742008 -0.285 40 -8.79821 0.348901 -0.284954 83 -8.7952 0.417989 -0.284953 87 -8.80176 0.155322 -0.284844 90 -8.79727 0.32119 -0.284842 86 -8.79508 0.376459 -0.284841 81 -5.678 0.723905 -0.284827 40 -8.79628 0.224353 -0.284618 86 -8.78587 0.44524 -0.284503 85 -8.79458 0.0999479 -0.284395 47 -8.79295 0.19664 -0.284394 90 -5.63479 0.971814 -0.284305 97 -8.78871 0.279445 -0.28428 49 -8.77692 0.500109 -0.284166 87 -5.63538 0.944572 -0.283958 72 -8.78623 0.127482 -0.283945 53 -5.96269 1.18986 -0.283866 40 -8.78156 0.251628 -0.283831 60 -5.68887 -0.387366 -0.282933 53 -5.94654 1.14794 -0.281914 40 -5.93508 1.16512 -0.281263 40 -5.67349 0.0864859 -0.280502 60 -5.66022 -0.367691 -0.280334 63 -5.6459 -0.429196 -0.279469 68 -8.69618 -0.351872 -0.279229 40 -6.61463 0.803136 -0.278116 40 -5.63196 -0.401525 -0.278082 83 -8.67109 -0.378077 -0.277881 40 -5.63239 0.209638 -0.27721 146 -5.89132 1.11836 -0.277032 40 -5.95085 -0.652872 -0.276237 40 -5.61976 0.226796 -0.27617 52 -6.5824 0.820099 -0.275916 45 -5.61539 0.18243 -0.275651 152 -5.61507 0.120624 -0.275478 146 -6.61096 0.435808 -0.275333 40 -6.6033 0.539593 -0.275332 66 -5.61245 0.147021 -0.275305 143 -5.60798 0.164516 -0.274958 161 -5.87773 1.04907 -0.274918 48 -5.93505 -0.632197 -0.274773 40 -5.93796 -0.604222 -0.274772 40 -5.87244 1.06718 -0.274755 81 -5.92898 -0.669244 -0.27461 40 -5.8671 1.08527 -0.274592 63 -5.5955 0.102524 -0.273746 175 -6.57396 0.505896 -0.272985 112 -5.91585 -0.564327 -0.272657 40 -6.56955 0.484777 -0.272546 88 -5.91207 -0.582706 -0.272494 40 -6.56309 0.463541 -0.271959 59 -5.89775 -0.543823 -0.271029 40 -7.73379 -0.36585 -0.270936 68 -6.54197 0.555042 -0.270931 44 -5.85261 -0.511646 -0.267123 40 -5.76156 0.935793 -0.264016 40 -5.74224 0.979056 -0.26304 40 -5.73544 0.959412 -0.262226 40 -7.5375 0.962629 -0.261975 40 -6.8778 0.894707 -0.259431 40 -5.74399 -0.419909 -0.257685 40 -5.73932 -0.401416 -0.257196 40 -5.71951 -0.336773 -0.255243 40 -6.7716 0.978782 -0.253063 40 -6.79207 0.808075 -0.252929 91 -6.82482 0.390518 -0.252662 87 -6.78665 0.785846 -0.252387 83 -6.81295 0.422095 -0.251985 109 -6.81802 -0.00648789 -0.251447 91 -6.80362 0.443009 -0.251442 104 -6.81585 -0.049305 -0.251312 92 -6.80935 -0.25259 -0.251179 84 -6.8117 0.0684421 -0.25104 93 -6.80773 -0.177586 -0.250907 88 -6.80999 -0.0278428 -0.250905 80 -6.80768 -0.0706028 -0.25077 76 -6.80731 0.100498 -0.250768 102 -6.80492 -0.124023 -0.250635 84 -6.80589 0.0470234 -0.250634 88 -6.80115 -0.198773 -0.250501 85 -6.80328 -0.102607 -0.2505 86 -6.80297 0.121826 -0.250497 68 -6.79656 -0.273454 -0.250366 103 -6.7985 -0.220066 -0.250365 88 -6.79368 -0.29471 -0.250231 97 -6.79852 -0.145251 -0.250229 84 -6.79603 0.0256437 -0.249956 90 -5.6555 0.156344 -0.249379 57 -6.77409 -0.368463 -0.249148 40 -5.65198 0.138498 -0.249054 72 -6.71433 0.92772 -0.248728 40 -6.69557 0.946636 -0.247644 40 -5.62847 0.120341 -0.247102 101 -6.67213 0.996895 -0.24656 44 -6.70064 0.457837 -0.244533 94 -6.65221 0.749633 -0.24304 116 -6.67528 0.477269 -0.242907 108 -6.66298 0.581731 -0.242635 90 -6.64376 0.548604 -0.241145 108 -6.62954 0.526527 -0.240061 119 -6.62519 0.505267 -0.239655 103 -6.61738 0.598873 -0.239654 91 -8.86364 0.0158366 -0.238646 65 -6.59361 0.6177 -0.238164 114 -6.57231 0.709611 -0.23735 91 -6.57252 0.688759 -0.237214 92 -6.57473 0.647261 -0.237079 83 -6.55479 0.666168 -0.23586 69 -8.79454 -0.302325 -0.235412 69 -8.76369 0.649857 -0.234796 69 -8.76233 0.552933 -0.234392 79 -8.77259 0.235951 -0.234193 87 -6.48738 0.990852 -0.234096 40 -8.76117 0.469986 -0.234089 81 -8.75605 0.5249 -0.233988 79 -8.76348 0.332153 -0.233888 74 -8.7606 0.400968 -0.233888 81 -8.75566 0.497272 -0.233887 79 -8.75982 0.373354 -0.233787 87 -8.74568 0.593232 -0.233684 73 -8.73642 0.716806 -0.233682 56 -8.76192 0.180546 -0.233587 87 -8.76131 0.208072 -0.233586 85 -8.75331 0.42818 -0.233584 84 -8.75907 0.111663 -0.233385 84 -8.75541 0.276738 -0.233383 54 -8.75673 -0.13598 -0.233286 55 -8.73381 0.619966 -0.233178 107 -8.75071 -0.232162 -0.233085 81 -8.74851 0.304015 -0.23308 61 -7.82582 0.944357 -0.233024 40 -8.75069 0.139029 -0.23298 87 -8.74971 -0.0396781 -0.232881 74 -8.74739 0.0839956 -0.232778 78 -8.71673 0.687563 -0.23257 59 -8.74162 0.0564555 -0.232475 71 -8.73629 -0.163177 -0.232275 62 -8.73744 -0.0808318 -0.232274 117 -8.73143 -0.204259 -0.232073 47 -8.72182 -0.0122316 -0.231464 45 -8.63584 -0.324502 -0.227421 67 -8.62879 -0.351403 -0.227118 53 -6.44445 -0.400064 -0.226929 40 -7.7118 0.955558 -0.22673 40 -6.88862 -0.274515 -0.218122 40 -6.80838 0.790968 -0.215625 91 -6.79199 0.810643 -0.214755 81 -6.77277 0.883947 -0.214133 40 -6.76067 0.958076 -0.214008 40 -6.80315 0.509818 -0.21364 94 -6.79676 0.487842 -0.213143 95 -6.79441 0.434041 -0.212771 73 -6.79175 0.412437 -0.212522 138 -6.7883 0.465764 -0.212522 90 -6.78277 0.540376 -0.212521 91 -6.79623 -0.0255246 -0.21203 67 -6.79055 -0.153542 -0.211783 90 -6.79211 0.0491601 -0.211781 96 -6.73239 0.900049 -0.211772 75 -6.78546 -0.196104 -0.211535 91 -6.78568 0.0917317 -0.211407 90 -6.78047 -0.22796 -0.211286 90 -6.78205 -0.1747 -0.211286 94 -6.78356 -0.100118 -0.211285 90 -6.78406 -0.0574931 -0.211285 79 -6.78318 0.123663 -0.211283 67 -6.78122 -0.121401 -0.211161 87 -6.70913 0.993632 -0.21115 62 -6.78031 -0.00422445 -0.211036 104 -6.78029 0.0170768 -0.211035 91 -6.77786 -0.0787608 -0.210912 80 -6.77595 0.0702729 -0.210786 90 -6.76576 -0.248801 -0.210417 79 -6.64581 0.549962 -0.204071 106 -6.6361 0.570122 -0.203574 90 -5.98724 1.2269 -0.203475 40 -5.97149 1.20423 -0.20212 40 -6.61042 0.588749 -0.202082 61 -5.95332 1.1521 -0.200224 40 -5.94586 1.17976 -0.200088 40 -6.53606 0.6129 -0.197608 113 -5.97236 -0.652503 -0.196449 43 -5.89959 1.10356 -0.196025 49 -5.96738 -0.604528 -0.195772 40 -5.88824 1.12063 -0.195483 40 -6.48483 0.721168 -0.195122 63 -6.51324 -0.353242 -0.195009 40 -6.48246 0.628219 -0.194377 76 -6.47733 0.679112 -0.194377 108 -6.47516 0.699456 -0.194377 98 -5.94552 -0.517385 -0.193738 40 -6.46656 0.647133 -0.193507 132 -5.9355 -0.58232 -0.193468 40 -5.93421 -0.553954 -0.193197 40 -5.91784 -0.618089 -0.19252 40 -5.924 -0.53418 -0.192384 40 -7.88393 0.932119 -0.191802 52 -8.85909 -0.309778 -0.188364 31 -5.77958 0.932096 -0.186001 40 -8.79875 0.259376 -0.185576 61 -8.79354 0.134867 -0.185219 77 -8.77472 0.493469 -0.184946 78 -8.77144 0.548591 -0.184945 69 -8.78422 0.203765 -0.184859 75 -5.75889 0.947411 -0.184781 40 -8.78393 0.107146 -0.18477 115 -8.76913 0.520807 -0.184766 112 -8.76896 0.451725 -0.184587 102 -5.7622 0.901554 -0.184511 40 -8.75572 0.57527 -0.184317 96 -5.748 0.964215 -0.184239 40 -8.77224 0.0794783 -0.184232 79 -8.77052 0.0381371 -0.184143 112 -8.76484 0.175823 -0.183962 115 -8.76157 0.230845 -0.183871 117 -6.95519 0.588342 -0.182227 43 -7.68818 0.969632 -0.182192 40 -6.91408 0.881477 -0.181662 40 -5.76714 -0.391678 -0.181002 59 -8.69072 -0.371764 -0.180916 30 -5.76711 -0.327997 -0.18073 40 -8.6784 -0.330235 -0.180287 30 -5.75042 -0.372316 -0.179782 40 -8.66357 -0.397797 -0.17975 30 -6.91379 0.530355 -0.179642 42 -6.92661 -0.144273 -0.179312 58 -6.92407 -0.0245476 -0.179086 79 -6.92154 -0.0897693 -0.178974 58 -6.92212 0.00808794 -0.178973 77 -6.92206 0.029833 -0.178973 58 -6.91329 -0.198283 -0.178638 40 -6.85054 0.95024 -0.178627 40 -6.8882 0.550257 -0.178293 56 -6.90706 -0.122085 -0.178188 95 -6.89618 -0.165205 -0.177626 56 -6.898 -0.0460277 -0.177625 94 -6.88984 -0.06759 -0.177176 83 -6.83063 0.903871 -0.177166 40 -5.71527 -0.288792 -0.177072 40 -6.88199 0.0514318 -0.176725 53 -6.79249 -0.365403 -0.172234 40 -7.44947 0.962509 -0.170155 40 -6.67484 0.980006 -0.169073 40 -6.71055 0.589795 -0.168515 166 -6.70835 -0.402849 -0.167626 40 -6.56306 0.985096 -0.162892 40 -6.59328 0.600818 -0.161996 66 -6.55863 0.743483 -0.160871 40 -6.55299 0.722033 -0.160421 84 -6.54837 0.690337 -0.159972 101 -6.54663 0.627859 -0.159523 97 -6.54057 0.668785 -0.15941 102 -6.54065 0.648046 -0.159298 118 -5.78324 0.945985 -0.153739 40 -5.77041 0.962462 -0.153118 40 -5.73248 0.909713 -0.15026 40 -5.75301 -0.360378 -0.147788 40 -5.73591 -0.377474 -0.146794 50 -7.88082 0.894717 -0.146441 75 -6.93753 -0.0913344 -0.141134 56 -7.68605 0.958929 -0.138094 26 -6.75763 0.892284 -0.134954 69 -6.74251 0.944193 -0.134549 40 -8.78285 0.242721 -0.129279 32 -8.78161 0.284108 -0.129279 32 -8.76822 0.187145 -0.128664 32 -8.75801 0.462469 -0.128661 32 -5.44557 -0.282454 -0.128402 40 -8.7576 0.214414 -0.128278 32 -8.74414 0.530603 -0.128275 32 -8.74745 0.43432 -0.128199 32 -8.74177 0.502888 -0.128121 32 -6.60539 0.998669 -0.128074 51 -6.60805 0.967236 -0.127973 94 -8.73173 0.598691 -0.127966 78 -8.74171 0.337699 -0.127815 32 -8.74128 -0.294217 -0.127744 32 -8.74303 0.145313 -0.127663 32 -8.73874 0.31008 -0.127661 32 -8.74144 0.117814 -0.127586 32 -8.71984 0.625378 -0.127581 117 -8.73977 0.0903226 -0.127509 32 -8.71451 0.556206 -0.127196 62 -8.72434 -0.321137 -0.127128 32 -5.91954 0.976792 -0.127039 40 -8.7186 -0.252402 -0.126819 58 -5.8924 0.906043 -0.124904 40 -5.88806 0.933799 -0.124904 40 -5.88313 0.951982 -0.124791 40 -6.56862 0.584447 -0.123729 63 -6.55186 0.749332 -0.123727 65 -6.52578 0.694346 -0.122109 115 -6.53096 0.601639 -0.121908 115 -6.51562 0.713941 -0.121704 110 -6.50916 0.62018 -0.120896 139 -6.5052 0.640423 -0.120795 133 -6.49416 0.670218 -0.12039 115 -5.84855 -0.394011 -0.119298 40 -8.34059 0.967273 -0.114252 31 -6.95338 0.892201 -0.105068 23 -6.88322 0.566504 -0.100405 77 -6.88106 0.490248 -0.100046 58 -6.87385 0.53318 -0.0998664 70 -6.8785 0.0139067 -0.0991539 60 -6.87002 -0.083206 -0.0987959 59 -6.86716 -0.137112 -0.0987067 78 -6.84161 0.509191 -0.098341 62 -6.85671 -0.158416 -0.0982582 70 -6.84758 -0.115126 -0.0978089 105 -6.84827 -0.0613422 -0.0978084 47 -6.84255 -0.00752529 -0.0975387 97 -6.83844 -0.0397328 -0.0973595 88 -6.82822 -0.179118 -0.0970021 118 -6.74215 0.919748 -0.0958241 23 -7.79794 0.927482 -0.093301 28 -6.64568 0.960158 -0.0917852 31 -5.86056 0.939701 -0.0903441 59 -5.85607 0.967306 -0.0903439 55 -5.83785 0.917142 -0.0890293 47 -5.83873 0.898484 -0.0889284 51 -5.89413 -0.331794 -0.088739 61 -5.86458 -0.357985 -0.087323 40 -5.86018 -0.293116 -0.0869177 89 -5.84926 -0.311039 -0.0864122 122 -6.55056 0.727273 -0.0862232 58 -5.84029 -0.393447 -0.0862108 48 -6.56099 0.582718 -0.0860451 22 -5.83153 -0.3745 -0.0857048 84 -5.83114 -0.273435 -0.0854001 53 -6.52426 0.672651 -0.0847877 83 -6.52637 0.631461 -0.0846985 98 -6.51903 0.703183 -0.0846978 75 -6.52037 0.651578 -0.0845187 112 -6.51837 0.610062 -0.08425 57 -6.51152 -0.384842 -0.0831835 21 -8.75698 -0.321069 -0.0736648 40 -8.69945 -0.359853 -0.0718603 40 -8.55392 0.95393 -0.0686243 40 -6.09076 0.235439 -0.0639712 20 -6.01571 0.890924 -0.0633364 20 -5.94532 0.92855 -0.0604642 19 -5.95822 0.249626 -0.0580478 85 -5.94827 -0.396214 -0.0579651 19 -5.95009 0.296143 -0.0577781 61 -5.945 0.277196 -0.0575091 68 -5.93232 -0.329589 -0.0570669 19 -5.9377 0.211501 -0.0570611 27 -5.87196 -0.298217 -0.0542846 94 -6.80905 0.5795 -0.0540207 24 -6.80857 0.536376 -0.0538671 24 -6.80088 0.557251 -0.0536359 24 -6.81484 -0.106582 -0.0533346 24 -6.80938 -0.0637291 -0.053103 24 -6.80568 0.0111265 -0.0529482 24 -6.79955 0.043136 -0.0527169 24 -6.79516 -0.0849983 -0.0525641 24 -6.73657 0.894464 -0.0525541 24 -6.79369 -0.0102822 -0.0524863 24 -6.78982 -0.15963 -0.0524108 24 -6.78363 -0.0316172 -0.0521014 24 -6.78029 -0.138133 -0.0520254 24 -6.74733 -0.180001 -0.0507935 36 -6.68622 0.908978 -0.0507053 23 -7.77809 0.89452 -0.0435507 106 -6.50397 0.645127 -0.0425431 23 -6.48679 0.694864 -0.0420804 65 -6.48457 0.715241 -0.0420802 34 -6.48409 0.622503 -0.041696 22 -6.46708 0.672123 -0.0412334 46 -7.63982 0.939914 -0.0392962 40 -7.63684 0.963911 -0.0392959 40 -8.7668 -0.272133 -0.0291123 40 -8.68949 -0.310953 -0.0270542 42 -8.53045 0.930963 -0.0239542 47 -8.48228 0.966039 -0.0227623 53 -5.91823 -0.310039 -0.0190601 20 -5.91518 -0.291265 -0.0189058 20 -5.90209 -0.272097 -0.0183664 20 -5.85737 -0.242584 -0.0165945 20 -6.91829 0.721572 -0.0153844 40 -6.87685 -0.203289 -0.0129445 40 -6.84207 0.594648 -0.0125496 98 -6.8322 0.615453 -0.0122915 73 -6.79655 0.914998 -0.0122242 59 -6.82859 0.539545 -0.01197 62 -6.82597 0.571716 -0.0119697 83 -6.81179 -0.168993 -0.0108172 69 -6.8063 -0.147441 -0.0106235 81 -6.80273 -0.125966 -0.0104944 78 -6.73931 0.875213 -0.0102263 40 -6.75458 0.630148 -0.00984192 40 -6.6957 0.677949 -0.00810113 40 -6.58471 0.929433 -0.00552033 45 -6.59232 0.646975 -0.0046852 40 -7.72094 0.90157 -0.00207061 40 -7.70616 0.924352 -0.00174535 40 -7.65958 0.943035 -0.000553431 40 -7.62334 0.974956 0.000313463 40 -6.01999 0.948589 0.012399 40 -5.99956 0.897259 0.013301 40 -5.99671 0.916104 0.0133012 40 -6.05339 -0.328269 0.0134171 158 -5.99839 0.877845 0.0134297 40 -6.00844 -0.344576 0.014835 40 -5.97364 -0.389536 0.0158658 40 -5.96543 -0.360736 0.0161884 40 -5.96258 -0.304166 0.0163825 83 -5.95996 -0.275863 0.0165116 90 -6.85549 -0.175371 0.0227275 40 -6.79731 -0.0779799 0.0243536 75 -6.79361 -0.0459362 0.0244622 77 -6.78869 -0.120576 0.0245697 74 -6.78504 -0.0992048 0.0246783 77 -6.78372 -0.0245934 0.0247333 75 -6.71788 0.89899 0.0249052 40 -6.76697 -0.194713 0.0251106 40 -6.76806 -0.152191 0.0251111 61 -6.76977 -0.00332977 0.0251127 62 -6.76371 0.0285233 0.0252755 80 -6.69294 0.87415 0.0256633 40 -6.55432 0.928948 0.0291847 40 -5.30843 0.257815 0.0375306 156 -5.17002 0.300624 0.0419143 216 -6.06888 0.877665 0.0424013 40 -5.1446 0.3236 0.0426879 255 -6.0302 0.920341 0.0432684 40 -6.08804 -0.31187 0.0433639 160 -6.00737 0.897444 0.0439723 40 -6.05309 -0.329293 0.0442845 40 -5.98187 0.932007 0.0445144 40 -5.97561 -0.353656 0.0463427 40 -5.96848 -0.372079 0.046505 40 -5.96844 -0.259281 0.0466687 98 -5.96316 -0.28723 0.0467768 80 -4.8173 0.335059 0.0531947 55 -4.81054 0.372596 0.053324 40 -4.8057 0.35707 0.0535172 51 -4.80636 0.319193 0.0535813 55 -4.81119 0.130164 0.0537081 46 -4.80828 0.160335 0.0537729 45 -4.8044 0.250935 0.0537739 54 -4.80879 0.0394468 0.053836 53 -4.80487 0.198023 0.0538378 46 -4.80423 0.213116 0.0538379 44 -4.80159 0.265928 0.0538385 40 -4.80287 -0.02847 0.0540286 43 -4.79948 0.18273 0.0540309 51 -4.80076 -0.0435286 0.0540929 44 -4.79856 0.0620319 0.0541585 43 -4.79634 0.0770856 0.0542232 44 -4.79576 0.107221 0.0542235 62 -4.79494 -0.0133154 0.0542866 43 -4.79495 0.00928118 0.0542868 55 -4.79277 0.144832 0.0542884 49 -4.7909 0.0243453 0.054416 40 -4.78008 0.0919318 0.054739 46 -4.77852 -0.06573 0.0548017 47 -6.82452 0.902874 0.0677029 30 -5.16231 0.381277 0.0682888 40 -6.78399 -0.0130736 0.0697321 30 -6.67189 -0.0438709 0.0720149 30 -6.60574 -0.063933 0.07336 30 -6.54752 -0.0837125 0.0745421 30 -6.32515 -0.109803 0.0790672 32 -4.75114 0.491817 0.0791235 47 -4.74868 0.476469 0.0792317 51 -6.3096 -0.23843 0.0793103 30 -4.74368 0.423284 0.079502 74 -4.74233 0.438183 0.0795022 52 -4.73894 0.45288 0.0795565 59 -4.74406 0.370766 0.0796098 57 -4.74288 0.385668 0.0796099 78 -6.29679 -0.128983 0.0796377 61 -4.73368 0.399849 0.0798268 53 -6.19853 0.753238 0.0807476 117 -6.18456 0.682717 0.0811954 30 -6.16279 0.857285 0.0811972 43 -6.19244 -0.214035 0.081716 89 -6.19441 -0.145935 0.0817167 56 -6.19108 -0.19451 0.081757 82 -6.11738 0.919793 0.0819316 30 -6.11825 0.900287 0.0819722 30 -4.66309 0.180167 0.0820994 40 -6.17394 -0.164777 0.0821242 82 -4.65735 0.106672 0.0823153 40 -6.15661 -0.261081 0.0824086 30 -4.6473 0.259972 0.0824253 40 -4.64447 0.27444 0.0824797 40 -4.64312 0.296324 0.0824799 40 -6.14937 -0.328528 0.0824894 30 -4.64018 0.310765 0.0825342 40 -4.64189 0.208454 0.0826414 40 -6.08739 0.87636 0.0826649 43 -4.64425 0.0552116 0.0826939 40 -4.64393 0.0770972 0.0826941 40 -4.64281 0.128154 0.0826947 40 -4.64053 0.193775 0.0826954 40 -4.64167 0.0916346 0.0827485 40 -4.63991 0.157245 0.0827492 40 -4.63612 0.24467 0.0827501 40 -4.63523 0.222714 0.0828041 40 -6.12636 -0.346512 0.0829376 30 -4.62839 0.14223 0.083074 40 -4.61924 0.32383 0.0830761 40 -6.11691 -0.297751 0.0831827 30 -6.09413 -0.382988 0.0835487 51 -6.06138 -0.361671 0.084242 30 -6.0579 -0.27555 0.0844061 30 -5.25609 0.484096 0.100437 30 -4.83203 0.577561 0.108836 38 -4.82962 0.469888 0.10912 47 -6.0975 0.915759 0.110749 40 -6.09581 0.886129 0.110843 40 -6.10191 0.82836 0.110874 40 -6.0973 0.847243 0.110906 40 -4.73902 0.491621 0.110914 30 -6.09263 0.866104 0.110937 40 -6.13707 -0.396804 0.110987 47 -4.74304 0.356894 0.111076 30 -4.72869 0.51313 0.111078 30 -4.72537 0.54283 0.111078 30 -4.7494 0.170287 0.111155 30 -4.73354 0.423575 0.111158 30 -4.73392 0.371213 0.111239 30 -6.07999 0.796114 0.111283 40 -4.72063 0.47484 0.111322 30 -4.72614 0.393051 0.111362 30 -4.73376 0.25175 0.111401 30 -6.08043 0.728227 0.111408 40 -6.07453 0.77596 0.111408 40 -6.11033 -0.375923 0.111428 40 -6.1131 -0.327921 0.111428 40 -6.07099 0.756107 0.111502 40 -4.73025 0.199465 0.111523 30 -4.72886 0.184538 0.111563 30 -4.72365 0.288477 0.111564 30 -6.07277 0.707921 0.111565 40 -6.09039 0.487772 0.111626 61 -4.71093 0.40677 0.111647 30 -6.09806 -0.346389 0.111648 40 -4.72055 0.236254 0.111686 30 -6.06716 0.668613 0.111722 62 -4.72216 0.147186 0.111726 30 -4.71075 0.302611 0.111809 30 -6.07243 0.534304 0.111846 60 -6.06895 0.572448 0.111847 50 -4.71162 0.213609 0.11189 30 -4.70899 0.265401 0.11189 30 -6.05311 0.68627 0.111911 40 -6.08515 -0.240341 0.111932 40 -6.07968 0.352487 0.111939 40 -6.07778 0.31406 0.112001 40 -6.07074 0.399807 0.112034 40 -6.06946 0.418876 0.112034 40 -6.06293 0.504637 0.112035 91 -6.07415 -0.306867 0.112057 40 -6.08127 -0.0872663 0.11206 40 -6.0752 0.28521 0.112064 40 -4.70461 0.131946 0.112093 30 -6.07663 0.199225 0.112094 40 -6.04639 0.637399 0.112099 73 -6.04637 0.618188 0.11213 73 -4.69227 0.338538 0.112136 30 -6.06953 -0.27799 0.112152 40 -6.0746 -0.125377 0.112154 40 -6.06679 0.332561 0.112159 40 -6.07296 -0.106264 0.112185 40 -6.07176 0.160855 0.112188 40 -6.07154 0.0654328 0.112219 61 -6.06923 0.179861 0.11222 40 -6.06688 0.246585 0.112221 40 -6.06 0.379931 0.112222 40 -6.05402 0.465561 0.112223 99 -6.06686 -0.191996 0.112247 40 -6.06408 0.265546 0.112252 40 -6.04484 0.55091 0.112255 87 -6.04033 0.598367 0.112256 40 -6.06543 -0.172887 0.112279 40 -6.05639 -0.258385 0.112372 40 -6.06085 0.112887 0.112376 44 -6.05364 0.226938 0.112441 40 -6.0415 0.445451 0.112443 42 -6.05223 -0.210628 0.112467 40 -6.05372 0.046145 0.112502 85 -6.05117 0.0936493 0.112534 90 -6.04595 -0.153409 0.112594 40 -6.04577 -0.0394206 0.112626 77 -6.03784 0.0269858 0.112753 82 -6.0339 -0.00148302 0.112816 81 -6.03162 -0.0583404 0.112846 40 -6.03186 -0.0204412 0.112847 77 -6.01648 0.130783 0.113069 40 -6.16658 0.82969 0.150598 62 -6.158 0.848264 0.150653 61 -6.14601 0.876178 0.150726 51 -6.13916 0.777104 0.150907 64 -6.13796 0.737823 0.150962 70 -6.1376 0.688951 0.151016 66 -6.12353 0.804512 0.151017 94 -6.15468 -0.375889 0.151095 33 -6.15844 -0.308194 0.151096 25 -6.15184 -0.356303 0.151132 25 -6.1215 0.706683 0.151143 100 -6.12589 0.648755 0.151161 61 -6.10186 0.753083 0.151271 91 -6.10791 0.66633 0.151307 102 -6.13429 -0.268247 0.151333 71 -6.13621 -0.22006 0.151334 75 -6.12897 -0.335561 0.151351 34 -6.12947 -0.181231 0.151407 62 -6.12226 -0.152113 0.15148 68 -6.11544 -0.286597 0.151497 92 -6.09747 0.549206 0.151506 39 -6.09297 0.597078 0.151506 46 -6.11351 -0.238387 0.151534 96 -6.08884 0.577394 0.151561 42 -6.11357 -0.0846057 0.151572 70 -6.0831 0.615447 0.151579 90 -6.10798 -0.0461202 0.151627 64 -6.10089 -0.199453 0.151662 112 -6.1011 -0.113142 0.151681 65 -6.07724 0.528236 0.151706 39 -6.07869 0.461098 0.151742 41 -6.09072 -0.132048 0.151772 112 -6.07089 0.508508 0.151779 38 -6.07976 0.355677 0.151795 37 -6.06648 0.488976 0.151833 40 -6.07142 0.393508 0.15185 38 -6.08152 0.0879359 0.151865 40 -6.07531 0.28846 0.151867 37 -6.08012 0.021065 0.151883 77 -6.07995 0.0497148 0.151883 71 -6.06415 0.440907 0.151887 38 -6.07721 0.106988 0.151902 39 -6.06739 0.326331 0.151922 39 -6.06151 0.421593 0.151923 39 -6.07413 -0.0170957 0.151937 86 -6.07012 0.221387 0.15194 39 -6.06638 0.307175 0.15194 36 -6.0662 0.268974 0.151958 38 -6.05865 0.373631 0.151978 39 -6.06781 -0.0647125 0.151991 100 -6.06816 0.00200938 0.151992 77 -6.06777 0.0687324 0.151992 68 -6.06567 0.173558 0.151994 64 -6.06479 0.202141 0.151994 39 -6.06419 0.154461 0.152012 43 -6.0574 0.240031 0.152049 39 -6.05865 0.135302 0.152066 39 -6.2599 -0.324198 0.189672 40 -6.24091 -0.303643 0.189727 40 -6.17045 0.162894 0.226355 40 -6.17552 0.250397 0.226381 40 -6.1767 0.269876 0.226388 40 -6.17782 0.289365 0.226395 40 -6.1839 0.182633 0.2264 40 -6.18329 0.202058 0.2264 40 -6.17651 0.386599 0.226409 40 -6.19186 0.0952628 0.226419 40 -6.18438 0.318852 0.226421 40 -6.18057 0.445334 0.226435 40 -6.19753 0.114799 0.226438 40 -6.18524 0.406616 0.226441 40 -6.18394 0.426045 0.226442 40 -6.20059 -0.00204427 0.226444 40 -6.20054 0.0271764 0.226444 40 -6.20314 0.134374 0.226458 40 -6.20646 -0.0410689 0.226463 40 -6.20642 0.0466746 0.226464 40 -6.20462 0.222179 0.226472 40 -6.21024 0.0661986 0.226477 40 -6.20532 0.33939 0.226493 40 -6.21856 -0.0216607 0.226502 40 -6.2203 -0.0607608 0.226508 40 -6.22194 -0.0901095 0.226514 40 -6.23325 -0.129501 0.226552 40 -6.23363 -0.109918 0.226553 40 -6.22819 0.360168 0.226571 40 -6.23804 -0.178649 0.226571 40 -6.24057 -0.159111 0.226578 40 -6.26042 -0.228612 0.226649 65 -6.26143 -0.199108 0.226649 40 -6.24257 0.548195 0.226663 40 -6.25221 0.479812 0.226675 40 -6.24907 0.519085 0.226676 40 -6.25267 0.499601 0.226682 40 -6.28365 -0.249329 0.226726 67 -6.26291 0.589558 0.226741 40 -6.29083 -0.269443 0.226752 67 -6.27071 0.570397 0.226761 40 -6.26605 0.639506 0.226768 40 -6.27599 0.620572 0.226794 40 -6.27793 0.660596 0.226813 40 -6.28577 0.681353 0.226846 40 -6.29243 0.712048 0.226879 40 -6.29812 0.732706 0.226905 40 -6.29976 0.752946 0.226918 40 -6.29614 0.782624 0.226918 40 -6.3394 -0.341607 0.22692 68 -6.30159 0.803381 0.226944 40 -6.37039 -0.323333 0.227017 133 -6.33872 0.828194 0.227074 55 -6.39818 -0.365184 0.227114 40 -6.34391 0.879552 0.227114 76 -6.36583 0.851963 0.227172 45 -6.43231 -0.397697 0.22723 40 -6.31995 0.270597 0.263928 18 -6.35807 0.312428 0.264295 18 -6.3654 0.172603 0.264312 19 -6.36836 0.132655 0.26433 19 -6.36512 0.242667 0.264331 19 -6.38184 0.223293 0.264477 19 -6.37849 0.343657 0.264497 19 -6.3879 0.153223 0.264513 19 -6.37696 0.403892 0.264516 19 -6.39074 0.113126 0.264531 19 -6.3925 0.203603 0.264569 19 -6.38898 0.293951 0.26457 19 -6.3976 0.0429154 0.264585 19 -6.38618 0.384369 0.264589 19 -6.38936 0.364426 0.264607 19 -6.40343 0.0630991 0.264641 19 -6.40573 0.0128158 0.264659 19 -6.40774 -0.00730287 0.264677 19 -6.39294 0.435232 0.264681 19 -6.38777 0.505499 0.264682 19 -6.40803 -0.14824 0.264693 31 -6.41348 -0.0576564 0.264731 19 -6.4172 0.0834532 0.264769 19 -6.41968 -0.0274363 0.264786 19 -6.40404 0.476487 0.26481 19 -6.40861 0.56808 0.264921 19 -6.41236 0.548122 0.264939 19 -6.43552 -0.168993 0.26495 37 -6.43727 -0.0780004 0.264951 19 -6.41803 0.52832 0.264976 19 -6.42545 0.457869 0.264993 19 -6.44299 -0.0982893 0.265006 19 -6.45295 -0.189665 0.265115 37 -6.42982 0.620999 0.26516 19 -6.46065 -0.118789 0.26517 19 -6.43572 0.601183 0.265196 19 -6.4338 0.641814 0.265215 19 -6.43667 0.672774 0.26527 19 -6.47021 -0.312232 0.265315 19 -6.47997 -0.220915 0.265371 69 -6.51123 -0.242334 0.265664 70 -6.48024 0.6981 0.265693 19 -6.51115 -0.334547 0.2657 26 -6.48199 0.718913 0.265729 19 -6.52243 -0.263223 0.265774 74 -6.49442 0.751353 0.265876 19 -6.51154 0.826089 0.266115 60 -6.56707 -0.295846 0.266196 19 -6.52974 0.776386 0.266225 19 -6.52925 0.797148 0.266244 44 -6.52802 0.869978 0.266318 19 -6.70181 -0.364689 0.26746 20 -6.5492 0.267973 0.30923 65 -6.60284 0.155758 0.31002 87 -6.60232 0.176501 0.31002 106 -6.61083 0.322265 0.310243 84 -6.61283 -0.322173 0.310268 83 -6.61577 0.343321 0.310338 112 -6.57372 0.820042 0.310343 110 -6.61666 0.364204 0.31037 126 -6.63595 0.2503 0.310591 99 -6.64371 0.198331 0.310685 122 -6.64705 0.219318 0.310749 100 -6.65749 0.125449 0.310875 106 -6.65423 0.292791 0.310908 138 -6.6626 0.031323 0.310937 103 -6.66214 0.083651 0.310937 106 -6.64852 0.491647 0.311005 101 -6.66846 0.0522779 0.311032 108 -6.66785 0.10465 0.311033 106 -6.66141 0.387481 0.311099 105 -6.68463 -0.0211606 0.311285 113 -6.67149 0.419574 0.311289 106 -6.67972 -0.30466 0.311313 58 -6.66688 0.51399 0.311322 99 -6.69066 0.0103274 0.31138 112 -6.67612 0.440904 0.311384 106 -6.6767 0.462004 0.311416 104 -6.72453 -0.0425673 0.311918 112 -6.71708 0.538892 0.312145 108 -6.74524 -0.13816 0.312265 116 -6.75035 -0.0640399 0.312329 114 -6.7344 0.572156 0.312462 113 -6.74452 0.594315 0.312652 115 -6.77763 -0.117648 0.312772 115 -6.77811 -0.0857081 0.312772 116 -6.75657 0.616722 0.312874 103 -6.75358 0.648553 0.312875 106 -6.79075 -0.160616 0.312993 89 -6.77938 0.672425 0.313318 108 -6.87187 -0.195253 0.314291 128 -6.88921 -0.217476 0.314575 121 -6.87077 0.702932 0.314807 125 -6.92846 -0.240657 0.315208 120 -6.9322 0.730988 0.31582 99 -6.99317 -0.27615 0.316253 100 -6.96844 0.767881 0.316454 127 -7.01967 0.795652 0.317309 94 -7.08216 -0.302288 0.317678 166 -7.11252 0.828459 0.318829 96 -7.17624 -0.385753 0.319228 93 -6.9354 -0.303528 0.350468 40 -6.90367 0.85188 0.350773 40 -7.08293 0.358629 0.353616 76 -7.0931 0.202923 0.353698 79 -7.09997 0.169659 0.353824 80 -7.09453 0.325745 0.353825 118 -7.12615 -0.288738 0.354447 40 -7.12169 0.383175 0.354454 84 -7.13639 0.226761 0.35462 129 -7.13439 0.282805 0.354621 75 -7.13946 0.305493 0.354746 64 -7.15962 0.250107 0.355123 67 -7.16444 0.148916 0.355164 84 -7.17583 0.0477237 0.355372 82 -7.17035 0.40857 0.355501 84 -7.16785 0.510191 0.355586 78 -7.17702 0.431603 0.355669 86 -7.17939 0.488386 0.355795 82 -7.20086 0.127173 0.355917 83 -7.20393 0.0253775 0.355958 87 -7.20737 0.0933382 0.356043 86 -7.21763 0.0708289 0.356252 86 -7.21081 0.46788 0.356423 89 -7.2152 0.547929 0.356633 127 -7.27596 -0.0083958 0.357465 86 -7.31788 -0.0312827 0.358345 87 -7.29514 0.577352 0.358351 81 -7.33309 -0.111931 0.358679 87 -7.31919 0.60249 0.358896 86 -7.34574 -0.0543826 0.358931 89 -7.3222 0.660703 0.359064 77 -7.3567 -0.135325 0.359181 89 -7.34017 0.639142 0.359398 87 -7.39139 -0.0893902 0.359894 89 -7.40766 0.692195 0.360907 118 -7.50618 -0.161136 0.362322 90 -7.51686 0.726621 0.363252 80 -7.56531 -0.197866 0.363578 89 -7.5929 0.77038 0.364928 86 -7.6506 -0.223857 0.365378 90 -7.71382 -0.249745 0.366718 83 -7.68388 0.804331 0.366896 86 -7.70314 0.867649 0.367441 45 -7.76677 0.837973 0.368698 81 -7.89042 -0.292092 0.370445 40 -7.30237 -0.313284 0.394551 40 -7.27271 0.822597 0.394822 40 -7.34285 0.80693 0.396588 40 -7.67947 0.818326 0.405312 40 -7.84501 0.352028 0.408683 114 -7.85833 0.799356 0.409882 40 -7.98731 0.156999 0.412212 151 -7.99643 0.320574 0.412577 82 -8.00677 0.182484 0.412731 88 -7.99742 0.496921 0.412838 66 -8.0044 0.409052 0.41289 49 -8.02278 0.0315459 0.413093 85 -8.02562 0.384797 0.413409 62 -8.03487 0.473796 0.413773 93 -8.05453 0.0695243 0.413925 74 -8.05793 0.120178 0.414029 55 -8.07227 0.0949802 0.414392 52 -8.07482 0.00621174 0.414443 40 -8.07333 0.29801 0.41455 96 -8.10879 -0.0193446 0.415326 40 -8.1357 -0.288001 0.416154 40 -8.14207 0.210719 0.416263 64 -8.11756 0.799113 0.41658 40 -8.1661 0.455376 0.417148 63 -8.21811 0.277042 0.418289 73 -8.2513 0.239137 0.419119 123 -8.28328 0.788637 0.420838 40 +unknow 0.963162 1 0 226 -11.3053 24.3802 -1.61312 124 -11.4022 24.2887 -1.61027 134 -11.4699 24.2347 -1.60892 130 -11.5227 24.15 -1.60526 134 -12.1072 26.4234 -1.59832 165 -11.9636 26.4383 -1.59546 167 -12.7166 26.0068 -1.5911 145 -12.7851 25.9398 -1.58924 146 -12.8496 25.8656 -1.58688 146 -12.9535 25.769 -1.58439 146 -13.0191 25.6979 -1.58228 144 -13.0834 25.6249 -1.58004 140 -13.1803 25.5168 -1.57681 143 -13.2521 25.4593 -1.57569 141 -13.2977 25.3521 -1.57109 147 -13.4171 25.2892 -1.57109 147 -13.4749 25.2064 -1.56823 145 -13.5379 25.1341 -1.56612 135 -13.6238 25.0104 -1.56189 119 -13.6802 24.9272 -1.55903 165 -13.7315 24.8351 -1.55555 123 -13.7988 24.7727 -1.55418 138 -13.9017 24.683 -1.55244 130 -13.9506 24.5888 -1.54884 121 -14.0248 24.5397 -1.54846 89 -14.1024 24.4076 -1.54374 82 -11.8601 24.4457 -1.48038 92 -11.7232 24.4563 -1.47728 165 -11.6343 24.4677 -1.47554 151 -11.5328 24.4518 -1.47194 111 -11.393 24.4534 -1.46834 142 -11.3036 24.4618 -1.46647 119 -14.3465 26.0873 -1.46501 167 -14.2014 26.1143 -1.46243 173 -14.0153 26.1625 -1.45985 131 -14.087 26.099 -1.45861 139 -14.1982 24.5271 -1.38443 138 -14.0368 24.514 -1.37926 153 -13.9468 24.5354 -1.3778 130 -12.3307 24.9659 -1.35657 140 -12.3466 24.802 -1.3487 132 -12.1439 24.7841 -1.34275 138 -11.9164 24.5151 -1.32353 202 -11.7903 24.5494 -1.32218 199 -11.7037 24.5665 -1.32095 117 -11.5982 24.5436 -1.31724 176 -11.4554 24.5401 -1.31365 171 -11.374 24.5669 -1.31308 121 -14.0352 24.4648 -1.21808 229 -13.8586 24.5125 -1.21576 107 -13.6767 24.4589 -1.20888 158 -13.5776 24.4616 -1.20655 117 -13.4891 24.4831 -1.20534 118 -13.3326 24.4709 -1.20099 163 -13.2319 24.4688 -1.19846 110 -13.1314 24.4662 -1.19594 144 -13.0329 24.4668 -1.19361 97 -12.8915 24.4784 -1.19078 81 -12.8099 24.5099 -1.19028 69 -12.6943 24.4755 -1.18603 97 -12.5488 24.4764 -1.18269 135 -12.4483 24.4694 -1.18006 127 -12.3489 24.4638 -1.17753 124 -12.221 24.4967 -1.17612 118 -12.1148 24.4758 -1.17278 87 -11.9118 24.5486 -1.17157 107 -12.015 24.4671 -1.17015 86 -11.7298 24.5653 -1.16834 164 -11.7836 24.4797 -1.1656 141 -11.5988 24.4882 -1.16196 130 -11.4622 24.4974 -1.15944 170 -11.3659 24.4916 -1.15711 173 -11.2697 24.4854 -1.15479 103 -11.0402 24.4912 -1.15024 80 -14.4475 24.8244 -1.0803 144 -14.1107 24.5115 -1.06056 165 -13.9968 24.4915 -1.05724 147 -13.8922 24.4867 -1.05473 215 -13.758 24.5188 -1.05302 255 -13.6508 24.5078 -1.05024 255 -13.5495 24.5069 -1.048 255 -13.4098 24.5267 -1.04576 255 -13.3031 24.5143 -1.04298 255 -13.2033 24.5138 -1.04082 255 -13.0575 24.5193 -1.03795 255 -12.958 24.5178 -1.0358 255 -12.8567 24.5125 -1.03347 255 -12.7528 24.5013 -1.03087 255 -12.6152 24.5186 -1.02871 255 -12.5118 24.5065 -1.02611 255 -12.4211 24.5189 -1.02477 255 -11.9411 24.7163 -1.02316 138 -12.2795 24.5254 -1.02217 255 -12.1819 24.5227 -1.0201 255 -12.0782 24.5072 -1.01741 255 -11.9442 24.5261 -1.01553 251 -11.7518 24.5214 -1.01158 151 -11.6138 24.5296 -1.00925 159 -11.5146 24.519 -1.00692 165 -11.4274 24.5333 -1.00584 159 -13.9071 24.4607 -0.875071 225 -13.7861 24.426 -0.871606 160 -13.6917 24.4377 -0.87022 186 -13.5513 24.4565 -0.868219 205 -13.4513 24.4569 -0.866371 197 -13.3448 24.4447 -0.863984 211 -13.1972 24.4474 -0.861367 204 -13.0987 24.4482 -0.859596 220 -13.004 24.4557 -0.858133 202 -12.8654 24.4725 -0.856209 203 -12.7672 24.472 -0.854438 217 -12.6683 24.4694 -0.85259 231 -12.5713 24.4699 -0.850897 238 -12.4287 24.4754 -0.848587 236 -12.3284 24.4679 -0.846585 237 -12.2355 24.4743 -0.8452 236 -12.0988 24.4887 -0.843353 239 -11.9998 24.4817 -0.841428 230 -11.8967 24.4653 -0.839118 228 -11.758 24.4725 -0.83704 241 -11.6596 24.4642 -0.835115 241 -11.5639 24.4609 -0.833421 241 -11.4658 24.4519 -0.831496 247 -11.3371 24.4766 -0.830265 236 -11.2501 24.4903 -0.829342 243 -11.1649 24.5073 -0.828572 249 -11.0468 24.5542 -0.828343 229 -10.9615 24.5705 -0.827574 209 -14.1914 24.4646 -0.703033 230 -14.049 24.4844 -0.701294 233 -13.9482 24.4868 -0.699748 231 -13.8427 24.48 -0.69788 235 -13.7382 24.4746 -0.696076 234 -13.5956 24.4902 -0.694272 237 -13.4992 24.4978 -0.692984 236 -13.3886 24.4787 -0.690729 236 -13.253 24.5046 -0.689376 234 -13.1438 24.4863 -0.687186 240 -13.047 24.4904 -0.685833 235 -12.91 24.511 -0.684352 237 -12.8033 24.4947 -0.68229 238 -12.705 24.494 -0.680808 239 -12.6125 24.5036 -0.679713 242 -12.466 24.5023 -0.677523 241 -12.3682 24.5003 -0.676042 239 -12.2732 24.5033 -0.674753 240 -12.1363 24.5179 -0.673208 239 -12.0353 24.5075 -0.671469 237 -11.9416 24.511 -0.670245 236 -11.8008 24.5148 -0.668377 243 -11.7065 24.5157 -0.667089 243 -11.614 24.5198 -0.665929 240 -11.4754 24.5254 -0.664191 245 -11.3839 24.5306 -0.663096 240 -14.0961 24.4932 -0.557088 236 -13.9884 24.4836 -0.55541 195 -13.8868 24.4839 -0.554057 205 -13.7804 24.4751 -0.552432 218 -13.6397 24.4943 -0.551026 221 -13.5346 24.4863 -0.549455 229 -13.4356 24.4884 -0.54821 226 -13.2991 24.5127 -0.54702 231 -13.1955 24.5051 -0.545504 236 -13.0931 24.4988 -0.544043 237 -12.9523 24.5125 -0.542582 240 -12.8521 24.5087 -0.541228 248 -12.7538 24.5082 -0.539983 247 -12.6126 24.5182 -0.538468 248 -12.5128 24.5132 -0.537115 247 -12.4141 24.5095 -0.535816 248 -12.3147 24.5037 -0.534462 244 -12.1769 24.5167 -0.53311 252 -12.0813 24.5172 -0.531973 255 -11.9805 24.5065 -0.530511 253 -11.8458 24.523 -0.529321 255 -11.7497 24.5205 -0.52813 255 -11.6504 24.5103 -0.526723 255 -11.5178 24.5287 -0.525641 255 -11.4264 24.5339 -0.524721 255 -11.335 24.5388 -0.523801 252 -11.2462 24.5489 -0.523044 165 -11.1189 24.5761 -0.522287 202 -11.04 24.6072 -0.522179 114 -13.6914 26.0459 -0.391859 213 -13.5473 25.5771 -0.382033 100 -13.7413 24.6204 -0.36678 255 -13.5795 24.5113 -0.363234 243 -13.4792 24.5118 -0.362257 237 -13.355 24.5593 -0.361891 166 -12.5655 24.7506 -0.357863 96 -12.4724 24.7596 -0.357171 96 -12.0776 24.9435 -0.356972 96 -12.5976 24.622 -0.355824 96 -12.203 24.7063 -0.353749 96 -12.0857 24.6637 -0.351915 96 -11.7724 24.7085 -0.349962 255 -11.8422 24.6552 -0.349594 176 -11.6217 24.6914 -0.348333 255 -11.5347 24.7078 -0.347885 255 -11.4453 24.7186 -0.347315 202 -13.6108 26.0043 -0.25388 88 -13.457 26.0077 -0.252812 87 -12.5456 26.0228 -0.246625 86 -13.5843 24.6179 -0.234469 143 -13.448 24.6447 -0.23381 178 -12.5085 24.8372 -0.229637 83 -12.5592 24.6479 -0.227339 83 -11.7981 24.6669 -0.222315 105 -11.6775 24.7132 -0.222159 82 -11.5194 24.7806 -0.222067 82 -11.3717 24.7674 -0.220904 255 -11.2666 24.7429 -0.219867 215 -13.147 24.7433 -0.0478322 253 -13.0505 24.7491 -0.0474689 172 -12.7273 24.7933 -0.0464709 106 -12.6084 24.753 -0.0456525 106 -12.488 24.805 -0.0455813 106 -12.3984 24.8209 -0.0453455 106 -12.2839 24.7863 -0.0446 106 -12.0713 24.846 -0.0442384 105 -12.1458 24.8008 -0.0441646 105 -11.941 24.7758 -0.0431469 255 -11.8501 24.7861 -0.0428747 237 -11.7204 24.8146 -0.0426032 229 -11.6279 24.8205 -0.0422947 221 -11.5397 24.8352 -0.0420771 201 +unknow 0.960729 1 0 410 -11.2806 -1.34973 -1.31683 70 -11.2665 -1.38398 -1.31549 163 -11.269 -1.18708 -1.31282 112 -11.276 -1.09835 -1.31255 105 -11.2514 -1.31047 -1.31228 93 -11.2696 -1.06202 -1.31121 97 -11.2514 -1.22102 -1.31095 105 -11.2587 -1.13242 -1.31068 103 -11.662 -1.36277 -1.29276 98 -11.6439 -1.39772 -1.29098 226 -11.6387 -1.32293 -1.28919 106 -11.6448 -1.26807 -1.28919 124 -11.6467 -1.23127 -1.28894 129 -11.6407 -1.19364 -1.28766 123 -11.6462 -1.13877 -1.28766 121 -12.0524 -1.43318 -1.28246 188 -12.059 -1.37637 -1.28246 130 -12.0632 -1.33848 -1.28246 61 -12.0438 -1.47056 -1.28197 196 -12.0352 -1.50791 -1.28148 218 -12.0654 -1.2046 -1.28099 97 -12.0151 -1.60135 -1.2805 91 -12.0081 -1.63883 -1.28026 94 -12.0127 -1.54347 -1.27928 92 -12.0606 -1.10856 -1.27927 97 -12.0397 -1.29765 -1.27903 90 -12.0457 -1.2409 -1.27903 88 -12.0434 -1.16426 -1.2778 93 -12.4838 -1.40383 -1.26038 241 -12.4731 -1.46216 -1.25991 255 -12.4665 -1.5011 -1.25968 255 -12.4763 -1.36328 -1.25898 101 -12.4943 -1.18677 -1.25898 113 -12.447 -1.57813 -1.25851 139 -12.4767 -1.22463 -1.25734 139 -12.4217 -1.6344 -1.25642 136 -12.4341 -1.53679 -1.25641 181 -12.4609 -1.26259 -1.25594 127 -12.447 -1.32045 -1.25501 115 -13.1986 -1.53647 -1.24886 219 -13.1799 -1.5763 -1.24733 128 -13.165 -1.61651 -1.24624 132 -13.197 -1.13842 -1.24426 115 -13.1776 -1.19937 -1.24273 168 -13.156 -1.23912 -1.24076 119 -13.7601 -1.28284 -1.2282 151 -13.7216 -1.62799 -1.228 119 -13.7423 -1.2376 -1.22592 110 -13.7029 -1.5821 -1.22551 96 -12.3683 -1.2057 -1.15406 98 -12.3207 -1.33804 -1.15034 108 -12.3209 -1.24026 -1.14925 84 -12.311 -1.2979 -1.14881 101 -12.6197 -1.21437 -1.10904 86 -12.2992 -1.28045 -1.07645 116 -12.2992 -1.2414 -1.07603 110 -12.2892 -1.31844 -1.07583 108 -12.2789 -1.37588 -1.07541 85 -12.3026 -1.40608 -1.01128 71 -12.2713 -1.36354 -1.00773 106 -12.2637 -1.32373 -1.00655 122 -12.2619 -1.26512 -1.00576 124 -12.1113 -1.21147 -0.990405 83 -11.909 -1.1539 -0.969928 98 -11.8729 -1.11286 -0.96599 115 -11.8344 -1.05311 -0.961658 118 -11.8059 -1.01327 -0.958507 107 -12.2165 -1.38202 -0.934182 113 -12.2069 -1.34208 -0.932881 138 -11.9537 -1.2757 -0.908719 65 -11.8188 -1.02242 -0.755941 40 -11.7098 -0.940164 -0.65202 64 -11.7007 -0.902478 -0.65114 185 -11.8561 -1.00138 -0.596388 40 -11.7299 -0.953335 -0.587581 177 -12.056 -1.33713 -0.544083 152 -11.9133 -1.28374 -0.534887 94 -11.8974 -1.24427 -0.533644 162 -11.8614 -1.18412 -0.531034 79 -11.8452 -1.14497 -0.52979 102 -11.8268 -1.10576 -0.528423 111 -11.8041 -1.04761 -0.526683 123 -11.7655 -1.00703 -0.524073 144 -11.7577 -0.932016 -0.523202 251 -11.7089 -0.965279 -0.520344 167 -11.7082 -0.872713 -0.519846 234 -12.3493 -1.40886 -0.488961 76 -12.1297 -1.24837 -0.475697 222 -12.1312 -1.15229 -0.475246 241 -12.1148 -1.1123 -0.474122 90 -12.0719 -1.18481 -0.4721 249 -12.0245 -1.27551 -0.469965 184 -11.9946 -1.3104 -0.468505 95 -11.8713 -1.03302 -0.460073 107 -11.8239 -0.953956 -0.457037 215 -11.8109 -0.990245 -0.456476 91 -12.3769 -1.39249 -0.420536 69 -11.9642 -1.21389 -0.398786 93 -11.9523 -1.3076 -0.398686 126 -11.9504 -1.26943 -0.398382 218 -11.9202 -1.17171 -0.396358 117 -11.884 -1.13056 -0.394334 136 -11.8654 -1.07244 -0.39312 134 -11.8328 -1.03211 -0.391299 121 -11.7783 -0.990209 -0.388365 161 -11.7754 -0.952728 -0.388061 198 -11.7738 -0.896789 -0.387757 217 -11.7626 -0.858808 -0.387048 128 -12.0824 -1.31003 -0.336096 92 -12.0565 -1.21143 -0.33448 136 -12.0149 -1.26439 -0.332864 225 -12.0006 -1.16761 -0.331787 111 -11.9744 -1.12703 -0.33044 255 -11.9656 -1.06932 -0.329811 144 -11.8398 -0.945388 -0.323707 114 -11.8148 -0.980711 -0.32272 180 -12.037 -1.26949 -0.257158 46 -11.9633 -1.20492 -0.254077 148 -11.9451 -1.16524 -0.253229 89 -11.9328 -1.12624 -0.252612 113 -11.8885 -1.08449 -0.250763 80 -11.8238 -1.02259 -0.248067 84 -11.812 -0.946878 -0.247373 125 -11.807 -0.983818 -0.247296 108 -11.8084 -0.890619 -0.247064 113 -11.7772 -0.851143 -0.245754 114 -12.106 -1.29534 -0.183704 59 -12.1 -1.25625 -0.183381 101 -12.0442 -1.19297 -0.181382 90 -12.016 -1.15201 -0.18035 99 -11.9798 -1.11048 -0.179061 101 -11.9494 -1.06973 -0.177964 101 -11.9224 -1.01064 -0.176933 100 -11.9176 -0.972513 -0.176674 107 -11.8987 -0.933301 -0.175965 107 -11.8969 -0.876766 -0.175771 106 -12.4396 -1.37712 -0.13058 48 -12.2113 -1.31351 -0.124242 40 -12.1437 -1.24854 -0.122237 114 -12.0899 -1.20476 -0.120666 100 -12.0638 -1.16395 -0.119853 108 -12.0395 -1.12351 -0.119094 109 -11.9968 -1.06263 -0.117793 108 -11.9802 -1.02328 -0.117251 106 -12.0229 0.146473 -0.117239 40 -11.9654 -0.984202 -0.116763 114 -12.0033 0.108477 -0.116698 52 -11.9659 -0.927503 -0.116654 101 -11.9556 -0.851199 -0.11622 102 -11.9508 -0.888611 -0.116166 98 -11.9375 -0.79344 -0.115624 75 -12.7574 -1.57865 -0.0540588 44 -12.7464 -1.53661 -0.0537321 44 -12.7294 -1.49396 -0.0532832 44 -12.6926 -1.42894 -0.0523857 44 -12.5241 -1.36979 -0.0488381 109 -12.3415 -1.3102 -0.0450052 162 -12.2918 -1.24626 -0.0438631 116 -12.2459 -1.20265 -0.0428434 118 -12.2277 -1.16205 -0.0423944 119 -12.2551 0.205686 -0.0418504 42 -12.1955 -1.12026 -0.0416601 121 -12.1728 -1.06029 -0.0410888 121 -12.2142 0.128328 -0.0409952 42 -12.2097 0.166654 -0.0409132 42 -12.1521 -1.01998 -0.0405991 122 -12.1493 -0.981305 -0.0404764 124 -12.1885 0.0898189 -0.0404656 42 -12.1768 0.0323782 -0.0402214 42 -12.1179 -0.921234 -0.039742 122 -12.1187 -0.883013 -0.0397008 121 -12.6894 -1.57688 0.00658715 40 -12.7 -1.4366 0.00668298 40 -12.6824 -1.53559 0.00677635 40 -12.6816 -1.4749 0.00690268 40 -12.6031 -1.38576 0.00828758 40 -12.4145 -1.30625 0.0113705 40 -12.3191 -1.2573 0.0129437 113 -12.3031 -1.21667 0.0132587 89 -12.2431 -1.17204 0.0142656 134 -12.2286 -1.11257 0.0145807 83 -12.2121 -1.07244 0.0148957 90 -12.1895 -1.03193 0.015305 132 -12.1803 -0.973391 0.0155256 81 -12.1693 -0.934075 0.0157463 90 -12.1623 -0.837541 0.0159674 78 -12.1569 -0.79882 0.0160936 84 -12.1363 -0.893276 0.0163129 138 -12.8328 -1.56459 0.0895222 49 -12.7227 -1.59153 0.0904869 48 -12.7086 -1.50868 0.0907064 81 -12.6529 -1.36101 0.0913634 48 -12.5537 -1.29032 0.0923291 101 -12.5159 -1.24662 0.0927119 139 -12.5058 -1.20592 0.0928399 82 -12.4837 -1.16416 0.0930771 102 -12.4798 -1.02549 0.0932242 93 -12.4711 -1.1037 0.0932415 105 -12.4626 -1.06347 0.0933512 131 -12.4267 -0.962065 0.0937527 108 -12.4296 -0.923023 0.0937532 132 -12.3946 -0.881193 0.0940997 97 -12.3707 -0.820866 0.0943551 82 -12.724 -1.51798 0.1718 46 -12.7033 -1.55604 0.171843 46 -12.6568 -1.28878 0.172054 46 -12.6487 -1.32813 0.172064 46 -12.6508 -1.22799 0.172087 46 -12.6948 -1.21171 0.247665 40 -12.7129 -1.27396 0.247743 40 -12.7148 -1.31452 0.247762 40 -12.8458 -1.36915 0.248202 40 -13.3366 -0.894622 0.249659 40 -13.5166 -1.01376 0.250267 56 -13.5299 -1.10033 0.250331 40 -13.5392 -1.05829 0.250351 40 -13.5571 -0.952645 0.250384 40 -13.5722 -1.14678 0.250479 40 -13.732 -1.26931 0.251029 41 -12.7392 -1.1323 0.323181 42 -12.7638 -1.23553 0.323492 42 -12.7756 -1.19615 0.323565 42 -12.8016 -1.27971 0.323876 42 -12.8273 -1.34329 0.324169 42 -13.4272 -0.958582 0.329344 51 -13.4741 -0.919307 0.329748 45 -13.4902 -0.856537 0.329859 45 -13.5857 -1.01249 0.330829 83 -13.862 -1.09825 0.333414 72 -13.8943 -1.14468 0.333743 80 -14.8186 -0.891583 0.342035 49 -14.8393 -0.846017 0.3422 49 -12.7777 -1.11073 0.408511 35 -12.7931 -1.07161 0.408701 35 -12.8622 -1.26091 0.410061 35 -12.8621 -1.32214 0.410155 35 -12.8838 -1.18138 0.410283 35 -12.8979 -1.22358 0.410568 35 -13.0249 -1.38057 0.412814 35 -13.4163 -0.976628 0.418423 43 -13.4302 -0.829306 0.418488 46 -13.48 -0.896273 0.419342 71 -13.5649 -0.9449 0.420735 37 -14.852 -0.873025 0.441 40 -12.9396 -1.2587 0.477353 43 -13.4662 -0.904281 0.487743 45 -13.473 -0.862215 0.487827 45 -14.822 -0.735741 0.515887 50 -14.8231 -0.829181 0.516012 50 -14.8256 -0.782608 0.516013 50 -14.8363 -0.689711 0.516139 50 -12.8601 -0.83496 0.539428 52 -12.887 -0.938476 0.540309 52 -12.8939 -0.898271 0.540414 52 -12.902 -0.980354 0.540776 52 -12.8992 -1.04131 0.540828 52 -12.9158 -1.08354 0.541346 52 -12.9362 -1.12624 0.541969 52 -12.9764 -1.17091 0.543111 52 -12.9926 -1.23417 0.543682 52 -12.9907 -1.27518 0.543733 52 -13.1099 -1.32873 0.546952 53 -13.3686 -0.111759 0.55195 54 -14.7188 -0.333812 0.587103 59 -14.7676 -0.706662 0.588709 75 -14.7773 -0.753685 0.589021 80 -14.8028 -0.801669 0.589747 60 -14.8169 -0.872501 0.590214 60 -14.8517 -0.29038 0.590531 60 -12.9145 -0.598682 0.620372 41 -12.9263 -0.456845 0.620566 41 -12.9335 -0.274104 0.620632 41 -12.9345 -0.314776 0.620696 41 -12.9337 -0.416414 0.62076 41 -12.9328 -0.497744 0.620823 41 -12.9463 -0.233662 0.621019 41 -12.9455 -0.355719 0.621082 41 -12.9583 -0.0302856 0.621342 41 -12.9612 -0.172811 0.62147 41 -12.962 -0.0913724 0.621471 41 -12.9543 -0.559669 0.621595 41 -12.9565 -0.641337 0.621787 41 -12.9717 -0.132173 0.621792 41 -12.9553 -0.70249 0.62185 41 -12.9666 -0.784812 0.622364 41 -12.9923 0.0105204 0.622437 41 -12.9681 -0.825787 0.622492 41 -12.973 -0.744289 0.622493 41 -12.9692 -0.928167 0.622749 41 -12.974 -0.887553 0.622814 41 -13.0062 0.0514209 0.622887 41 -13.0134 0.153676 0.623146 41 -13.0178 0.112838 0.623274 41 -13.0101 -0.972096 0.624164 41 -13.0469 0.195138 0.62424 41 -13.0259 -1.07617 0.624935 52 -13.0372 -1.03587 0.625193 41 -13.037 -1.18021 0.625577 77 -13.0511 -1.2228 0.626156 103 -13.1348 0.299832 0.627136 41 -13.087 -1.26757 0.627442 189 -13.1498 0.341539 0.627651 41 -13.1547 0.383036 0.627845 91 -13.1725 -1.31746 0.630337 42 -13.0321 -0.399771 0.708732 91 -13.0469 -0.297706 0.709197 94 -13.0477 -0.256713 0.709198 96 -13.0454 -0.48227 0.70935 97 -13.0449 -0.543829 0.709427 105 -13.0519 -0.338858 0.709429 93 -13.0528 -0.441499 0.709583 92 -13.0605 -0.215946 0.709663 94 -13.0461 -0.687664 0.709735 101 -13.0511 -0.58518 0.709736 102 -13.0698 -0.113449 0.709973 102 -13.0572 -0.626578 0.710045 103 -13.0721 -0.0724025 0.710051 96 -13.0753 -0.154588 0.710205 98 -13.0802 0.030269 0.710362 99 -13.0595 -0.770715 0.710431 96 -13.0619 -0.729686 0.710431 102 -13.0922 -0.0108551 0.710826 98 -13.071 -0.874496 0.711127 98 -13.079 -0.81315 0.711282 102 -13.104 0.0714454 0.711291 93 -13.0881 -0.916992 0.7119 97 -13.1235 0.133359 0.712065 97 -13.0971 -0.959005 0.712364 101 -13.135 0.174723 0.71253 99 -13.1124 -1.02231 0.713137 97 -13.1624 0.216389 0.713614 99 -13.1231 -1.06465 0.713679 97 -13.1336 -1.10708 0.71422 92 -13.1916 0.258271 0.714776 99 -13.1601 -1.17186 0.715458 89 -13.2122 0.320919 0.715627 93 -13.1762 -1.21506 0.716231 88 -13.2371 0.363086 0.716634 67 -13.1942 -1.25859 0.717082 86 -13.2518 -1.30623 0.719481 40 -13.0628 -0.350555 0.77044 152 -13.0626 -0.535418 0.770698 148 -13.0677 -0.39176 0.770699 153 -13.0662 -0.494452 0.770785 148 -13.0728 -0.26862 0.770787 154 -13.0737 -0.453596 0.771046 154 -13.0779 -0.309821 0.771047 157 -13.0699 -0.597406 0.771131 153 -13.0719 -0.638651 0.771304 150 -13.0879 -0.20721 0.771395 156 -13.0739 -0.679912 0.771477 167 -13.0945 -0.166156 0.771655 160 -13.0969 -0.125032 0.771742 159 -13.0845 -0.74228 0.772083 164 -13.1094 -0.0633477 0.772263 160 -13.1095 -0.0221594 0.772264 162 -13.0955 -0.825453 0.772776 159 -13.098 -0.784304 0.772776 160 -13.1215 0.0190641 0.772784 164 -13.1008 -0.867099 0.773122 159 -13.1452 0.0810919 0.773825 162 -13.1185 -0.930336 0.774075 162 -13.1235 -0.97212 0.774421 158 -13.1649 0.122615 0.774692 160 -13.1724 0.164089 0.77504 158 -13.1463 -1.01529 0.775548 160 -13.1878 0.205749 0.775734 162 -13.1553 -1.07835 0.776154 157 -13.1598 -1.12033 0.7765 156 -13.2187 0.268607 0.777121 159 -13.2318 0.310487 0.777729 156 -13.1941 -1.16494 0.778147 152 -13.2143 -1.22945 0.779274 141 -13.2806 0.353481 0.779896 118 -13.28 -1.27752 0.782307 78 -13.2978 -1.32137 0.783261 78 -13.219 -0.464062 0.864496 114 -13.2195 -0.505673 0.864595 113 -13.2243 -0.360288 0.864597 114 -13.219 -0.568051 0.864695 115 -13.2171 -0.6512 0.864794 111 -13.2264 -0.422737 0.864796 116 -13.2313 -0.318897 0.864897 119 -13.2382 -0.277465 0.865197 120 -13.24 -0.173484 0.865198 125 -13.2291 -0.610153 0.865294 113 -13.241 -0.235916 0.865298 120 -13.2448 -0.0903286 0.865399 125 -13.2315 -0.756165 0.865792 130 -13.2545 -0.132058 0.865898 128 -13.2551 -0.0279511 0.865899 123 -13.2331 -0.797975 0.865991 123 -13.2458 -0.715259 0.866392 114 -13.2505 -0.840849 0.86699 122 -13.2771 0.0136683 0.866998 125 -13.289 0.0554097 0.867598 123 -13.2623 -0.904399 0.867788 120 -13.2926 0.118056 0.867798 121 -13.2693 -0.94679 0.868287 121 -13.3321 0.160218 0.869797 125 -13.3002 -0.991059 0.869985 118 -13.3375 0.202181 0.870097 125 -13.3013 -1.05421 0.870284 117 -13.3548 0.244375 0.870997 116 -13.3178 -1.09767 0.871283 117 -13.3402 -1.14177 0.872581 99 -13.3994 0.308269 0.873295 124 -13.3526 -1.20628 0.873479 91 -13.4481 -1.25771 0.878474 84 -13.4501 -1.30054 0.878773 36 +unknow 0.961804 1 0 255 -19.6656 25.2288 -1.40963 108 -19.8667 24.7566 -1.39718 153 -19.9693 24.6456 -1.39607 126 -19.1131 25.2478 -1.39335 109 -19.9899 24.513 -1.39152 163 -20.0554 24.4362 -1.39061 124 -18.9894 25.2486 -1.3896 121 -20.1258 24.2875 -1.38707 159 -20.1739 24.1904 -1.38484 122 -20.1908 24.0565 -1.38019 158 -20.2495 23.9731 -1.37887 123 -20.3053 23.8105 -1.37442 157 -20.3397 23.6996 -1.37128 122 -19.1295 23.9906 -1.34358 132 -18.9897 23.9691 -1.33832 169 -21.6758 25.1686 -1.28209 187 -21.5498 25.1819 -1.27886 179 -21.4063 25.2543 -1.27716 155 -21.6624 23.9116 -1.23937 242 -21.5523 23.941 -1.23704 190 -19.129 25.3448 -1.21641 171 -19.1989 25.2718 -1.21569 180 -18.9388 25.3403 -1.21112 173 -18.7768 25.4556 -1.21094 174 -18.8185 25.3451 -1.20807 151 -19.2769 24.0938 -1.17611 255 -19.1115 24.0418 -1.16965 173 -18.9423 24.061 -1.16561 243 -21.8061 23.9618 -1.03924 123 -21.5593 23.9157 -1.03154 181 -21.4241 23.9163 -1.02807 223 -21.153 23.9141 -1.02107 175 -20.973 23.9368 -1.01714 171 -20.8478 23.9453 -1.01421 138 -20.7007 23.9274 -1.00998 152 -20.5292 23.9564 -1.00651 158 -20.3749 23.9279 -1.00181 194 -20.2403 23.9215 -0.99827 152 -20.0555 23.9308 -0.993958 143 -19.9202 23.9215 -0.990338 186 -18.2194 25.2384 -0.990273 152 -19.7851 23.9115 -0.986719 182 -18.2664 25.0537 -0.985574 118 -19.6567 23.9087 -0.983484 184 -18.3108 24.9495 -0.983339 118 -19.4155 23.997 -0.980251 189 -19.4845 23.9282 -0.979865 179 -18.3286 24.8098 -0.979411 117 -19.1867 24.0987 -0.977787 117 -18.9796 23.9926 -0.969624 153 -18.2686 24.4859 -0.968011 131 -18.8572 23.9924 -0.966697 145 -18.6912 24.0131 -0.963386 116 -18.198 24.2317 -0.958537 140 -18.2883 24.0357 -0.954608 181 -21.927 24.0435 -0.840277 59 -21.9605 23.9289 -0.838279 59 -21.4688 23.9162 -0.827324 100 -21.379 23.9671 -0.826615 106 -21.1775 23.8922 -0.820492 100 -20.9987 23.9166 -0.817271 110 -20.8537 23.9027 -0.813855 156 -20.7274 23.9092 -0.811342 109 -20.5467 23.9278 -0.807991 118 -20.4078 23.9178 -0.804833 115 -20.2717 23.9102 -0.801804 123 -18.2735 25.4282 -0.800723 131 -20.0842 23.9167 -0.798067 121 -18.2735 25.2606 -0.796339 120 -19.9602 23.9214 -0.795618 125 -19.839 23.9287 -0.793298 123 -19.6626 23.9447 -0.790077 127 -18.2731 25.0113 -0.789829 94 -19.5379 23.946 -0.787564 119 -19.2634 24.1469 -0.78705 158 -19.4122 23.9452 -0.784986 129 -19.1465 24.1556 -0.784923 132 -18.2449 24.8089 -0.784027 151 -19.2854 23.9423 -0.782344 128 -18.2465 24.6487 -0.779902 100 -18.865 23.9551 -0.774225 107 -18.2558 24.42 -0.774164 134 -18.7039 23.9823 -0.771712 120 -18.2494 24.2524 -0.769717 90 -18.3116 24.0197 -0.764946 102 -18.2252 24.0628 -0.764367 118 -21.8159 23.8712 -0.667539 69 -21.6066 23.867 -0.66364 98 -21.4821 23.8797 -0.661636 122 -21.3351 23.8665 -0.658712 177 -21.1575 23.8934 -0.656059 104 -21.0283 23.8982 -0.653838 121 -20.8821 23.8828 -0.650914 168 -20.7493 23.8818 -0.648531 121 -20.5844 23.9187 -0.646366 136 -20.4417 23.9042 -0.64355 132 -20.2902 23.8783 -0.640354 123 -18.25 25.3362 -0.63739 89 -20.1002 23.8818 -0.637106 180 -19.9726 23.8819 -0.634885 115 -19.8438 23.8799 -0.632611 120 -18.2147 25.12 -0.632081 93 -19.6867 23.9191 -0.630716 136 -19.5583 23.9158 -0.628442 133 -19.4277 23.9088 -0.626059 137 -19.2985 23.9028 -0.62373 140 -18.1827 24.6654 -0.621626 147 -19.1333 23.9278 -0.621457 132 -19.0108 23.9283 -0.619399 132 -18.1923 24.5166 -0.618538 255 -18.8848 23.9235 -0.617179 132 -18.7276 23.9555 -0.61523 134 -18.164 24.3182 -0.613771 255 -18.5971 23.9431 -0.612793 132 -18.2411 24.1829 -0.612091 248 -18.2289 24.0091 -0.608137 159 -21.5647 23.9133 -0.448385 161 -21.4254 23.9095 -0.446429 156 -21.2487 23.9385 -0.444473 192 -21.1164 23.9407 -0.442721 158 -20.9791 23.9363 -0.440805 204 -20.8302 23.9177 -0.438523 157 -20.6741 23.9657 -0.437178 171 -20.5297 23.9501 -0.435018 171 -20.3752 23.9217 -0.432532 159 -18.278 25.4812 -0.431243 163 -20.1771 23.9166 -0.429843 231 -20.0632 23.934 -0.42862 159 -18.276 25.3102 -0.428389 163 -19.9239 23.9201 -0.426582 168 -19.7587 23.9505 -0.424912 175 -18.2401 25.0943 -0.424394 171 -19.6453 23.9661 -0.42369 175 -19.5131 23.958 -0.421856 173 -18.255 24.8679 -0.420846 148 -19.3509 23.989 -0.420267 219 -19.2116 23.9702 -0.418188 196 -18.2343 24.677 -0.417462 180 -19.0863 23.9679 -0.416558 192 -18.9588 23.9619 -0.414847 187 -18.2329 24.5138 -0.414771 146 -18.795 23.9865 -0.413176 231 -18.6766 23.9903 -0.41175 157 -18.2151 24.33 -0.41155 137 -18.3159 24.0685 -0.408532 169 -18.2293 24.1116 -0.408165 156 -21.6018 23.8959 -0.298823 95 -21.4638 23.8937 -0.297345 95 -21.2594 23.8914 -0.295177 148 -21.1247 23.8906 -0.293762 153 -20.9836 23.8817 -0.29219 151 -20.8131 23.9139 -0.290807 153 -20.6843 23.9171 -0.289519 162 -20.5491 23.9122 -0.288072 168 -20.4116 23.9036 -0.286563 139 -18.3007 25.445 -0.285165 93 -20.1994 23.8818 -0.284143 177 -20.0729 23.8839 -0.282886 132 -18.267 25.2302 -0.282114 92 -19.926 23.8608 -0.281125 165 -19.7879 23.9236 -0.280497 137 -18.2273 25.0094 -0.278937 92 -19.6378 23.8945 -0.278642 170 -19.5184 23.9018 -0.277542 137 -19.3465 23.9204 -0.276065 170 -18.1924 24.7971 -0.275917 91 -19.2262 23.9249 -0.274933 136 -19.0874 23.9054 -0.27333 173 -18.2008 24.5648 -0.273054 91 -18.9762 23.9198 -0.272419 137 -18.7991 23.9271 -0.270784 170 -18.1656 24.3567 -0.270098 102 -18.6845 23.9356 -0.269779 136 -18.5554 23.9246 -0.268396 150 -18.2007 24.0076 -0.266039 162 -21.3886 24.7257 -0.0903223 123 -21.3991 24.5815 -0.0893935 123 -21.4881 24.2959 -0.0879722 122 -21.3628 24.3078 -0.0872991 122 -21.4695 23.8945 -0.0851311 148 -21.1983 23.8178 -0.0829659 145 -20.5412 24.0512 -0.0806391 120 -20.6062 23.9744 -0.080493 120 -18.325 25.4748 -0.078399 119 -20.222 23.9051 -0.0777458 157 -20.0992 23.9119 -0.0770728 197 -19.9765 23.9182 -0.0763997 167 -18.2406 25.1904 -0.0758497 133 -19.7972 23.932 -0.0754542 203 -19.6926 23.9585 -0.075036 167 -18.2111 24.9844 -0.0741743 133 -19.5375 23.9227 -0.0738897 197 -19.3931 23.9757 -0.0734357 161 -19.2625 23.968 -0.0726353 196 -18.1853 24.7853 -0.0725717 134 -19.1384 23.9675 -0.0719259 154 -18.2113 24.5773 -0.071187 136 -18.9619 23.9774 -0.0709986 177 -18.8382 23.9756 -0.0702892 182 -18.7184 23.9779 -0.0696344 168 -18.3273 24.0171 -0.0677434 161 -18.2191 24.0315 -0.0672525 255 -20.4799 25.3333 0.118 117 -21.1902 23.9735 0.119587 124 -20.6109 23.9928 0.120583 114 -20.3889 23.9617 0.12104 114 -20.2425 23.9415 0.121339 113 -18.3511 25.3562 0.121469 113 -19.2429 23.9543 0.123042 111 -18.304 23.9959 0.124526 157 -18.2273 24.0922 0.304344 166 -18.3491 24.0172 0.30439 142 -19.2707 23.9502 0.306068 98 -18.3474 25.3074 0.307739 93 -20.1394 23.9321 0.307816 117 -20.2637 23.9266 0.308063 147 -20.5011 24.053 0.308875 164 -20.6547 24.0031 0.309077 159 -20.7994 24.0181 0.309421 152 -20.9419 24.0295 0.309752 145 -20.2494 25.4085 0.311743 96 -20.5376 25.1967 0.311797 96 -20.4747 25.2813 0.311881 96 -20.8626 25.1885 0.312447 96 -20.9967 25.1889 0.312726 97 -18.3042 24.087 0.483401 208 -18.7126 24.0707 0.485568 101 -18.3011 24.4 0.485675 143 -18.8678 24.0358 0.486192 101 -18.2574 24.5824 0.486774 122 -19.0039 24.0533 0.487091 101 -19.1179 24.042 0.487661 101 -18.2868 24.7845 0.488424 129 -19.2495 24.0522 0.488486 101 -19.3991 24.0063 0.489019 102 -18.3093 24.9791 0.489983 151 -19.5462 24.0338 0.490065 102 -19.6621 24.0218 0.490653 102 -18.2829 25.1914 0.491412 121 -19.8362 24.0029 0.491534 102 -19.9652 24.0051 0.492305 103 -20.2563 23.9699 0.493774 103 -20.4272 24.0189 0.495131 104 -20.5533 24.0139 0.495847 104 -20.7134 24.0478 0.49704 104 -19.0772 24.5179 0.697405 83 -19.1949 24.5098 0.698451 83 -19.3648 24.4881 0.699845 83 -19.5483 24.4033 0.700606 83 -19.4765 24.4709 0.700733 83 -19.6933 24.3482 0.701367 83 -19.7836 24.3033 0.701716 83 -19.9093 24.3013 0.702952 84 -20.0721 24.2657 0.704156 84 -20.1905 24.2532 0.705202 84 +unknow 0.408834 1 0 19 -22.2525 -26.8287 -0.501633 119 -21.683 -26.9069 -0.49555 118 -22.0406 -26.7186 -0.337318 237 -22.0106 -26.6949 -0.108048 232 -21.9216 -26.7577 -0.107976 184 -21.6656 -26.873 -0.107321 252 -21.8666 -26.9255 0.113124 255 -21.8801 -26.77 0.113432 203 -21.9984 -26.6574 0.113473 237 -21.8276 -26.759 0.319243 101 -21.9675 -26.6728 0.319322 101 -22.0601 -26.6145 0.319374 101 -21.9211 -26.5505 0.522607 199 -21.882 -26.6733 0.523245 213 -21.775 -26.7994 0.523513 206 -21.8177 -27.0247 0.525365 228 -21.9778 -26.6523 0.753395 91 -21.9193 -26.7522 0.754024 91 -21.8572 -26.9344 0.755633 91 +unknow 0.969391 1 0 208 -20.8326 -21.3679 -0.93985 159 -20.7261 -21.4601 -0.939549 173 -21.1255 -21.0642 -0.939446 148 -21.0366 -21.1078 -0.938218 186 -21.1674 -20.9738 -0.938133 134 -20.6226 -21.4876 -0.937552 176 -20.9018 -21.1712 -0.936301 180 -21.226 -20.8347 -0.935971 132 -20.824 -21.2254 -0.93569 172 -20.5204 -21.5162 -0.935632 178 -21.2799 -20.7567 -0.935351 132 -21.3321 -20.6773 -0.934654 131 -21.371 -20.5852 -0.933265 129 -20.4004 -21.5255 -0.932712 184 -21.6523 -20.2102 -0.931165 113 -21.6995 -20.1272 -0.930315 113 -20.2276 -21.5457 -0.928716 181 -21.8955 -19.8035 -0.928709 113 -21.9368 -19.716 -0.92763 113 -22.0056 -19.5911 -0.926396 112 -22.0445 -19.502 -0.92524 112 -20.097 -21.5419 -0.92518 184 -19.9613 -21.5317 -0.921337 192 -21.0051 -19.7931 -0.902004 110 -20.8658 -19.7862 -0.897929 110 -20.7457 -19.7965 -0.894855 119 -24.4701 -21.3496 -0.838475 74 -24.3678 -21.4634 -0.838411 103 -24.5295 -21.2661 -0.838152 59 -24.2658 -21.5093 -0.83693 111 -24.8106 -20.7697 -0.834666 59 -24.134 -21.5281 -0.834158 85 -23.3241 -21.4723 -0.813595 90 -23.4402 -21.2414 -0.811337 57 -23.2804 -21.23 -0.807276 72 -23.5429 -19.833 -0.783929 56 -23.3647 -19.8085 -0.77903 56 -23.2013 -19.8586 -0.776065 56 -21.494 -20.0358 -0.73881 54 -20.2194 -20.973 -0.729533 53 -20.2219 -20.7786 -0.725084 53 -21.0857 -19.7788 -0.723532 53 -20.1949 -20.6206 -0.720829 162 -20.9284 -19.8174 -0.720695 53 -20.1811 -20.4772 -0.717219 105 -20.7837 -19.8044 -0.717021 52 -20.2154 -20.3195 -0.714379 116 -20.6521 -19.8031 -0.713927 81 -20.5299 -19.8724 -0.712639 97 -20.224 -20.2008 -0.711864 122 -20.423 -19.8935 -0.710641 105 -23.6236 -19.8201 -0.627167 66 -23.4665 -19.8143 -0.623809 66 -23.3157 -19.813 -0.620667 66 -23.1036 -19.8212 -0.616442 78 -22.9852 -19.8454 -0.614438 85 -22.8578 -19.8611 -0.612109 65 -22.6854 -19.8369 -0.608155 65 -22.5061 -19.8682 -0.605067 65 -22.288 -19.8009 -0.599433 86 -22.1422 -19.7962 -0.5964 115 -21.961 -19.8214 -0.593204 120 -21.8127 -19.8124 -0.590062 126 -21.6662 -19.804 -0.586974 135 -21.4756 -19.8165 -0.583399 126 -21.3942 -19.8662 -0.582696 63 -20.1088 -21.1084 -0.58157 190 -20.0628 -20.9283 -0.57718 122 -21.1664 -19.7792 -0.576574 63 -20.9949 -19.743 -0.572511 75 -19.9775 -20.6441 -0.570028 255 -20.8261 -19.7702 -0.569694 91 -20.0088 -20.5468 -0.568726 255 -20.0978 -20.3166 -0.565962 224 -19.9822 -20.3912 -0.565204 255 -20.5775 -19.7816 -0.565036 158 -20.4309 -19.8269 -0.563032 151 -20.116 -20.0813 -0.561789 220 -20.3227 -19.8463 -0.561299 139 -20.1491 -19.9885 -0.56065 118 -20.2088 -19.8597 -0.559349 173 -24.196 -19.8978 -0.430876 168 -23.9995 -19.8627 -0.427329 188 -23.874 -19.8855 -0.425658 255 -23.6806 -19.914 -0.423008 134 -23.4441 -19.8409 -0.41836 153 -23.0739 -19.8404 -0.412611 199 -23.0009 -19.9037 -0.412326 105 -22.7936 -19.8496 -0.408412 104 -22.2546 -19.8142 -0.399687 128 -22.0985 -19.7999 -0.397119 158 -21.9235 -19.83 -0.394876 180 -21.7709 -19.8166 -0.392389 173 -21.6202 -19.8038 -0.389943 174 -20.2054 -21.1209 -0.388121 101 -21.4533 -19.8375 -0.387905 161 -21.3791 -19.8939 -0.387579 232 -21.2304 -20.0058 -0.386928 135 -20.1715 -20.8873 -0.384205 171 -21.1444 -19.7995 -0.382768 125 -20.1743 -20.7592 -0.382369 133 -20.9376 -19.9167 -0.381342 135 -20.1473 -20.6013 -0.379677 115 -20.2301 -20.4919 -0.379269 100 -20.2437 -20.3771 -0.3778 100 -20.7191 -19.8329 -0.376938 172 -20.5168 -19.9503 -0.375635 247 -20.6005 -19.8437 -0.375348 160 -20.2438 -20.1225 -0.374128 123 -20.3028 -19.9918 -0.373107 99 -20.3455 -19.9083 -0.372536 165 -24.2441 -19.8611 -0.285416 134 -24.0535 -19.8317 -0.282806 159 -23.8771 -19.8127 -0.280478 142 -23.6167 -19.9121 -0.27834 141 -23.7041 -19.7955 -0.278214 201 -23.5296 -19.9655 -0.277838 132 -23.1578 -19.776 -0.271451 186 -22.9719 -19.8053 -0.269533 169 -22.8008 -19.7831 -0.267268 167 -22.6375 -19.7666 -0.265161 163 -22.4465 -19.7872 -0.263117 159 -22.2944 -19.7781 -0.261229 160 -22.1426 -19.7682 -0.259342 161 -21.9851 -19.7522 -0.257329 160 -21.8088 -19.7804 -0.255568 158 -21.6549 -19.7653 -0.253618 155 -20.2119 -21.1862 -0.253035 87 -20.2768 -21.0547 -0.252247 87 -21.5249 -19.7711 -0.252172 169 -21.3478 -19.7949 -0.250379 162 -21.208 -19.7896 -0.248712 151 -20.166 -20.8087 -0.248251 143 -21.0669 -19.7823 -0.247014 151 -20.1558 -20.668 -0.246551 152 -20.9363 -19.7839 -0.245535 160 -20.1827 -20.5016 -0.244977 154 -20.7849 -19.8272 -0.244278 161 -20.1653 -20.3557 -0.243151 150 -20.6546 -19.8273 -0.242799 159 -20.184 -20.247 -0.242143 146 -20.5303 -19.8324 -0.241447 164 -20.1851 -20.1214 -0.240758 145 -20.398 -19.8913 -0.240598 179 -20.2469 -19.9938 -0.240033 150 -20.2925 -19.9133 -0.239655 159 -24.1172 -19.8869 -0.0775703 211 -23.9208 -19.8514 -0.075986 212 -23.7463 -19.8328 -0.0746568 213 -23.5457 -19.8541 -0.0733822 212 -23.3658 -19.8282 -0.0719801 213 -23.2016 -19.8144 -0.0707601 194 -23.0005 -19.8307 -0.0694674 209 -22.8506 -19.8268 -0.0684114 210 -22.6843 -19.8076 -0.0671549 208 -22.5187 -19.8508 -0.0662812 204 -22.3621 -19.8377 -0.0651341 210 -22.2013 -19.8199 -0.0639323 184 -20.9406 -21.1362 -0.0638734 113 -22.0675 -19.8253 -0.0630585 197 -20.9166 -20.9796 -0.0627064 113 -21.8836 -19.8471 -0.0619479 205 -20.8861 -20.8177 -0.0614665 112 -21.737 -19.8388 -0.06091 190 -20.9058 -20.6417 -0.0604634 112 -20.9249 -20.5311 -0.0598795 111 -21.5907 -19.8298 -0.0598722 173 -20.9335 -20.4107 -0.059168 111 -21.3685 -19.9373 -0.0590538 242 -21.4281 -19.8674 -0.0590166 171 -20.9863 -20.2702 -0.0586205 111 -21.0341 -20.1889 -0.0584193 111 -21.0685 -20.0951 -0.0580541 111 -21.2111 -19.9153 -0.0578702 111 -21.1068 -20.0054 -0.0577435 111 -24.0465 -19.9459 0.121336 185 -23.87 -19.9266 0.12174 157 -23.2201 -21.2504 0.122016 139 -23.6678 -19.8845 0.122237 195 -23.2144 -20.3909 0.12227 119 -23.1984 -20.2482 0.122561 112 -23.5136 -19.8814 0.122564 164 -23.2496 -20.1008 0.12272 111 -23.3481 -19.931 0.12282 111 -22.3627 -21.188 0.123797 112 -22.4267 -20.9829 0.124059 111 -22.454 -20.3569 0.125169 110 -22.4361 -20.2127 0.12547 110 -21.6191 -19.9127 0.127627 107 -21.5403 -19.9656 0.127682 107 -21.7804 -20.0273 0.302037 88 -22.4562 -20.0709 0.303754 89 -23.3062 -20.0541 0.305789 91 -23.3858 -19.995 0.305861 147 -23.2081 -20.2892 0.306046 91 -23.303 -21.0942 0.308002 93 -22.288 -20.2608 0.481898 99 -22.242 -20.3469 0.482117 99 -22.3753 -20.2121 0.482192 99 -22.1694 -20.4732 0.482409 100 -22.4759 -20.1751 0.48265 100 -22.1724 -20.6053 0.483251 100 -22.6351 -20.1261 0.483439 100 -22.1675 -20.7308 0.484002 100 -22.7807 -20.1276 0.484448 100 -22.1176 -20.8803 0.484606 100 -22.9521 -20.1509 0.485768 101 -23.1314 -20.1159 0.486795 101 +unknow 0.868779 1 0 37 -52.4842 -21.5075 0.0518098 187 -52.6088 -21.0775 0.0519394 187 -52.5127 -21.2307 0.0520249 187 -52.2944 -21.6219 0.0521685 187 -52.5838 -20.3995 0.0526884 186 -52.6476 -20.2342 0.0526903 186 -52.6956 -19.9682 0.0528289 186 -51.9363 -21.6653 0.0530245 186 -52.494 -19.7036 0.0536012 185 -50.6903 -19.8494 0.058052 181 -49.862 -20.5226 0.380892 255 -49.9619 -20.2889 0.380907 198 -50.0383 -20.1371 0.380954 206 -49.8213 -20.6892 0.380974 255 -50.1236 -19.9887 0.381033 191 -50.9908 -19.8722 0.383511 149 -51.5063 -19.8872 0.385086 192 -52.1189 -19.8423 0.386888 167 -52.7891 -19.9081 0.388994 152 -53.3796 -19.9398 0.390822 154 -50.1065 -20.2447 0.70124 164 -50.0759 -20.4156 0.701568 164 -50.0365 -20.675 0.702135 164 -50.0396 -20.8605 0.702811 164 -50.4258 -19.9144 0.702839 175 -50.3629 -20.1644 0.703149 204 -50.7954 -19.876 0.705865 165 -51.3351 -19.9011 0.71056 166 -51.9178 -19.8458 0.715365 167 -52.4869 -19.8743 0.720334 169 -53.0847 -19.91 0.725579 170 -51.0821 -20.057 1.07416 133 -51.3444 -19.696 1.07597 161 -51.2678 -19.9443 1.07625 134 -51.2576 -21.4388 1.08494 135 -53.1026 -19.9895 1.10364 137 -51.7125 -19.9835 1.36601 168 +unknow 0.952293 1 0 133 -22.8159 25.7458 -1.3353 166 -22.8906 25.1064 -1.31619 186 -22.9924 24.9806 -1.31511 160 -23.0164 24.8497 -1.31152 192 -23.0658 24.7466 -1.30963 185 -23.1259 24.578 -1.30595 183 -23.1508 24.4501 -1.30254 185 -23.1958 24.344 -1.30048 186 -23.2298 24.151 -1.29527 190 -23.2833 24.0549 -1.29384 179 -23.3128 23.9345 -1.29087 179 -26.4574 25.884 -1.21707 155 -26.6138 25.7117 -1.21677 157 -26.7101 25.5625 -1.21546 156 -26.4828 25.7464 -1.21407 154 -26.7599 25.2898 -1.2096 156 -26.7912 25.1604 -1.20706 156 -26.8583 24.9862 -1.20436 156 -26.9058 24.8732 -1.20275 137 -23.9072 25.5389 -1.13883 163 -23.7752 25.5582 -1.1359 149 -23.5036 25.6675 -1.1319 131 -23.5205 25.5244 -1.12828 142 -24.0488 24.0478 -1.10131 166 -23.9015 24.1268 -1.09947 150 -23.6377 24.1621 -1.0933 127 -23.6477 24.0207 -1.08968 138 -26.3653 24.3137 -0.947451 79 -26.17 24.2863 -0.942231 64 -25.918 24.281 -0.936173 64 -25.7426 24.2691 -0.931791 63 -25.5386 24.2289 -0.926119 63 -25.3278 24.1807 -0.920125 63 -25.1228 24.2125 -0.916066 63 -24.9245 24.1731 -0.910587 62 -24.7569 24.162 -0.906463 62 -24.5344 24.1719 -0.901565 62 -24.3447 24.1363 -0.896409 62 -24.1597 24.104 -0.891446 61 -23.9317 24.1028 -0.886227 81 -23.7378 24.0584 -0.880813 75 -23.5949 24.0644 -0.877719 61 -22.8541 24.7446 -0.877143 61 -23.4032 24.0951 -0.874111 99 -22.9049 24.5665 -0.874048 61 -23.2357 24.0737 -0.869857 75 -22.8848 24.391 -0.869472 74 -23.1475 24.1336 -0.869277 60 -22.938 24.2943 -0.868376 88 -23.0163 24.1483 -0.8667 93 -26.1511 24.2248 -0.757168 86 -25.9403 24.2575 -0.753594 75 -25.7403 24.2223 -0.74899 75 -25.5452 24.1903 -0.744549 75 -25.3067 24.1915 -0.739892 74 -25.1326 24.1766 -0.736209 74 -24.946 24.1482 -0.732039 74 -24.747 24.1064 -0.727381 74 -24.5391 24.1302 -0.723807 73 -24.351 24.096 -0.719529 73 -24.2723 24.1695 -0.71942 73 -24.0342 24.1588 -0.714655 73 -23.8135 24.0877 -0.709076 72 -22.836 24.832 -0.705398 72 -23.5991 24.0211 -0.703715 92 -22.8379 24.6779 -0.702364 72 -23.4174 24.0617 -0.701061 79 -22.8775 24.4881 -0.69933 87 -23.2903 24.082 -0.699058 72 -22.8996 24.3578 -0.697164 87 -23.1481 24.0858 -0.696458 71 -22.928 24.2349 -0.695268 116 -23.035 24.1193 -0.694996 71 -26.2847 24.2818 -0.521422 130 -26.0412 24.2854 -0.517836 121 -25.8495 24.2591 -0.514615 121 -25.6641 24.2373 -0.511558 120 -25.4395 24.2532 -0.508461 120 -25.2419 24.2168 -0.505037 119 -25.0606 24.1947 -0.502062 119 -24.8797 24.1717 -0.499086 118 -24.6498 24.1753 -0.495785 118 -24.4854 24.1656 -0.493258 118 -24.3129 24.1467 -0.490486 117 -24.1069 24.169 -0.487838 117 -23.9281 24.141 -0.484862 116 -22.9334 25.0309 -0.484011 255 -23.7735 24.1364 -0.48258 116 -22.8912 24.828 -0.480383 255 -23.5616 24.148 -0.479727 116 -22.8806 24.6607 -0.477733 163 -23.4104 24.1445 -0.477526 115 -22.9775 24.5322 -0.477161 158 -23.1648 24.2698 -0.475897 115 -23.0747 24.3279 -0.475489 192 -23.2636 24.1445 -0.475448 115 -26.1374 24.3234 -0.353717 105 -25.9354 24.2877 -0.351013 104 -25.7383 24.2551 -0.348403 104 -25.5136 24.2713 -0.346014 103 -25.3001 24.2199 -0.343027 103 -25.1347 24.2132 -0.341078 102 -24.9272 24.2406 -0.339034 102 -24.7409 24.2111 -0.336613 102 -24.5409 24.1665 -0.333878 101 -24.3783 24.1575 -0.33196 101 -24.1879 24.1957 -0.330263 101 -24.0075 24.1665 -0.327936 100 -22.8949 25.1691 -0.327313 100 -23.8374 24.1464 -0.325829 100 -22.9335 24.974 -0.325457 100 -23.6605 24.1941 -0.324415 100 -22.9291 24.8122 -0.323538 100 -23.5175 24.1994 -0.322906 99 -22.9375 24.6653 -0.321934 99 -23.3623 24.1911 -0.321114 99 -22.9865 24.4854 -0.320392 99 -23.1928 24.2431 -0.319857 99 -23.0153 24.3622 -0.319291 99 -23.049 24.2448 -0.318316 99 -24.9143 24.6772 -0.111917 131 -24.9404 24.5483 -0.111261 131 -23.6556 25.4266 -0.108847 130 -23.5947 24.9655 -0.105405 129 -23.8098 24.337 -0.102636 128 -24.2117 25.3189 0.111318 125 -24.2177 25.1662 0.111607 125 -24.2413 24.9542 0.111978 125 -24.2148 24.7706 0.112387 124 -24.5569 24.4202 0.11241 124 -24.2659 24.6673 0.112491 124 -24.4334 24.4505 0.11259 124 -24.3509 24.5214 0.112611 124 +unknow 0.90871 1 0 77 -27.7285 -21.2544 -0.73828 125 -27.6505 -21.3329 -0.737902 134 -27.7777 -21.1539 -0.737683 123 -27.5371 -21.4531 -0.737469 135 -27.828 -21.0544 -0.73714 93 -27.4365 -21.5136 -0.736332 110 -28.1002 -20.4393 -0.733126 74 -28.1432 -20.3357 -0.73242 74 -28.2257 -20.1935 -0.731986 74 -28.2711 -20.092 -0.731389 74 -28.3046 -19.9824 -0.730413 74 -28.3444 -19.8773 -0.729653 74 -28.4032 -19.7196 -0.728514 74 -28.4535 -19.6223 -0.728134 74 -28.5084 -19.5283 -0.727916 74 -26.6953 -21.5493 -0.72122 144 -26.5359 -21.5588 -0.718024 112 -26.1189 -21.563 -0.709358 97 -25.9726 -21.5799 -0.706595 72 -26.948 -19.7322 -0.69661 71 -26.7132 -19.7545 -0.691843 71 -26.4701 -19.8333 -0.687835 80 -26.5323 -19.75 -0.687834 71 -29.3365 -19.816 -0.513962 141 -29.0103 -19.929 -0.509764 137 -29.0725 -19.7707 -0.508988 137 -28.7864 -19.9085 -0.505768 119 -28.5122 -19.8513 -0.500509 119 -28.227 -19.8507 -0.495738 118 -27.9721 -19.8028 -0.490927 117 -27.7714 -19.7918 -0.487462 117 -27.5353 -19.7541 -0.4831 130 -27.3157 -19.7921 -0.47992 135 -27.1032 -19.7681 -0.476128 133 -26.0027 -21.0457 -0.474225 142 -26.9298 -19.7714 -0.473315 115 -26.6517 -19.761 -0.468626 128 -26.4918 -19.7716 -0.46614 158 -25.9332 -20.389 -0.46476 255 -26.3289 -19.779 -0.463572 151 -26.094 -20.0551 -0.463167 255 -26.2163 -19.8883 -0.463083 160 -26.0024 -20.1149 -0.462434 163 -27.0336 -19.7651 -0.319194 99 -26.8247 -19.7422 -0.316332 98 -26.5949 -19.7671 -0.313658 98 -26.3917 -19.7452 -0.310891 104 -25.8777 -20.3948 -0.310709 150 -26.0655 -20.0822 -0.310014 145 -25.9391 -20.115 -0.308756 144 -26.0379 -19.931 -0.308219 243 -29.5239 -19.8652 -0.116952 133 -29.2875 -19.8399 -0.11504 132 -28.9575 -19.7491 -0.11209 131 -28.7193 -19.7854 -0.110488 131 -28.5158 -19.7774 -0.108922 130 -28.3011 -19.7603 -0.107229 129 -28.0541 -19.7849 -0.105517 129 -27.85 -19.7722 -0.103933 128 -27.6154 -19.7361 -0.102003 127 -27.4413 -19.7421 -0.100747 127 -27.2073 -19.7688 -0.0991628 126 -26.9901 -19.7408 -0.0974148 126 -26.7735 -19.7115 -0.0956667 125 -26.4303 -20.1066 -0.0953248 125 -26.5872 -19.7682 -0.094611 125 -26.4386 -19.7868 -0.0936281 124 -26.1436 -20.1488 -0.0934865 124 -26.0359 -20.1965 -0.0929773 132 -27.3079 -19.6697 0.315217 99 -27.2654 -19.7695 0.315294 99 -27.2403 -19.8822 0.315441 99 -28.6978 -19.8613 0.319253 102 -28.8919 -19.8618 0.319772 103 -29.0978 -19.8692 0.320336 103 -29.2957 -19.8698 0.320867 104 -29.1692 -19.9987 0.53 115 +unknow 0.907957 1 0 29 -38.1174 24.333 -0.713818 149 -37.7686 24.3618 -0.708152 148 -37.6298 24.4401 -0.706644 148 -37.3637 24.4346 -0.702037 147 -37.0228 24.4618 -0.696535 147 -36.6959 24.412 -0.69042 176 -36.418 24.3926 -0.685487 178 -38.3748 24.2877 -0.506411 157 -38.0444 24.3303 -0.502386 187 -37.761 24.3164 -0.498518 179 -37.4547 24.2857 -0.49421 207 -37.1924 24.2818 -0.490719 168 -36.8523 24.308 -0.486474 190 -36.5809 24.2941 -0.482795 189 -36.315 24.2821 -0.47921 181 -36.0229 24.3331 -0.475845 181 -38.2958 24.4595 -0.206321 164 -38.0135 24.4478 -0.2041 179 -37.5603 24.3238 -0.200022 162 -37.286 24.3129 -0.197874 161 -36.9638 24.3521 -0.195617 161 -36.6921 24.3388 -0.193487 160 -36.4341 24.333 -0.191503 159 -36.1283 24.3759 -0.18941 158 -37.1189 24.3265 0.0858491 161 -36.9088 24.3548 0.0862855 153 -36.6223 24.331 0.0869725 153 -36.3097 24.3706 0.087621 152 -36.0309 24.3478 0.0882863 151 +unknow 0.923705 1 0 50 -41.3292 26.1984 -0.789474 159 -41.3859 26.0525 -0.788863 159 -41.3115 25.8249 -0.785113 158 -43.5165 25.852 -0.588202 184 -43.3869 24.3206 -0.574401 138 -43.0195 24.471 -0.570532 138 -43.0805 24.3269 -0.570249 138 -40.5581 25.4931 -0.545561 172 -41.0282 24.5468 -0.544084 143 -40.5176 25.2903 -0.543328 168 -40.5308 25.0339 -0.541379 171 -40.6804 24.5124 -0.539115 133 -40.3571 24.7516 -0.536725 149 -40.322 24.556 -0.53465 174 -41.0627 24.5314 -0.228091 171 -40.8037 24.5511 -0.226162 171 -40.4568 24.603 -0.223704 170 -40.1763 24.6058 -0.221538 169 -40 24.671 -0.220482 169 -39.8698 24.8508 -0.220336 169 -43.4555 24.3693 0.071012 216 -42.9278 24.2506 0.0724243 183 -42.6325 24.3494 0.0729913 167 -42.3184 24.3465 0.0737386 166 -42.0255 24.3538 0.0744205 166 -41.7084 24.4332 0.0750583 165 -41.411 24.4339 0.0757565 164 -41.1364 24.4463 0.0763838 164 -40.8226 24.4335 0.0771365 163 -40.5103 24.5064 0.0777634 162 -40.3017 24.5534 0.0781835 162 -39.9683 24.7827 0.078631 209 -40.0403 24.5668 0.0787727 179 -41.0261 24.5653 0.361485 134 -41.36 24.5011 0.362309 134 -41.6213 24.4794 0.363002 135 -41.9312 24.4845 0.363878 135 -42.273 24.4176 0.364727 136 -42.6029 24.4298 0.365674 137 -42.9003 24.4214 0.366498 159 -40.3052 24.8307 0.640156 148 -40.2389 24.9645 0.640284 148 -40.2129 25.1237 0.640854 148 -40.5208 24.7009 0.64122 148 -40.1887 25.3728 0.641881 148 -40.8291 24.7134 0.643696 148 -40.4158 25.6943 0.64522 149 -40.3501 25.8309 0.645386 149 -41.6992 24.6181 0.650097 150 -42.6578 25.6388 0.662443 154 +unknow 0.897356 1 0 32 -43.6671 -20.5627 -0.232412 172 -43.6862 -20.4043 -0.231955 172 -43.721 -20.2535 -0.231662 172 -47.6145 -20.0406 0.0656288 174 -44.4475 -20.2911 0.0732655 166 -44.3599 -20.4197 0.073335 166 -44.3553 -20.3249 0.364267 187 -44.3058 -20.4708 0.364317 255 -44.3083 -20.6412 0.364555 207 -44.2829 -20.884 0.364812 180 -44.2947 -21.0599 0.365089 166 -44.4086 -21.2855 0.365735 137 -44.423 -21.5505 0.366147 137 -45.9257 -20.0067 0.368496 154 -46.4069 -20.0433 0.369974 140 -46.8906 -20.0779 0.371458 141 -47.4304 -20.0453 0.373027 142 -48.1608 -20.1763 0.375372 144 -44.6429 -20.5364 0.65629 152 -44.5854 -20.6799 0.656362 152 -44.7326 -20.4077 0.656549 152 -44.5999 -20.8571 0.657167 152 -44.6241 -21.1252 0.658411 153 -45.8303 -20.0443 0.664382 154 -46.2582 -20.0583 0.668032 155 -46.74 -20.0928 0.672213 156 -47.2706 -20.0572 0.676559 157 -47.7796 -20.096 0.680996 159 -46.4982 -20.3967 1.00918 137 -46.4976 -21.2736 1.01484 126 -46.4505 -21.4288 1.01519 126 -47.4519 -20.1962 1.02179 127 +unknow 0.831219 1 0 39 -46.4926 25.7764 -0.628204 146 -46.4017 25.5357 -0.625123 145 -46.3379 25.3111 -0.622545 145 -46.2913 25.003 -0.619589 145 -46.2057 24.7695 -0.616665 144 -46.1809 24.5697 -0.614842 144 -46.0952 24.3385 -0.61195 144 -47.8862 24.2849 -0.281431 196 -46.1391 24.5037 -0.268232 193 -48.0394 24.23 0.0601531 225 -47.6326 24.3069 0.0610474 235 -47.2857 24.3172 0.0618767 223 -46.8363 24.2722 0.0630221 237 -46.5992 24.4285 0.0633985 255 -46.0329 25.3431 0.0635824 251 -46.0018 25.1379 0.0639251 255 -45.9891 24.9436 0.0642077 254 -46.2288 24.4196 0.0643041 238 -45.9986 24.762 0.0644196 251 -46.0794 24.5262 0.0645283 255 -46.0813 24.7183 0.375992 253 -46.2097 24.5075 0.376038 220 -46.0246 24.8744 0.376071 255 -46.02 25.059 0.376344 238 -46.4528 24.4497 0.376647 198 -46.0375 25.2563 0.376702 222 -46.0334 25.5369 0.37713 242 -46.7635 24.4257 0.377502 221 -46.1171 25.7731 0.377741 204 -47.1269 24.3334 0.37841 220 -47.4809 24.3274 0.379422 219 -47.8549 24.3293 0.380504 212 -46.9098 24.6064 0.691804 186 -46.8544 25.0486 0.693254 162 -47.1678 24.5532 0.693675 162 -46.867 25.2451 0.694209 162 -46.9966 25.5058 0.696393 163 -47.0354 25.8146 0.698062 163 -47.9771 24.4979 0.700039 170 +unknow 0.66486 1 0 4 -49.9272 24.2437 -0.297907 192 -50.1596 24.2225 0.0549765 184 -49.7291 24.2073 0.0560512 183 -50.0311 24.259 0.386723 151 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_4.pose b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_4.pose new file mode 100644 index 00000000000..5cae17767aa --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_4.pose @@ -0,0 +1 @@ +11991 588.619153 33.330347 45.010282 40.747194 -0.002133 -0.010945 -0.639944 0.768341 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_4.seg b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_4.seg new file mode 100644 index 00000000000..4f435c2eac4 --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_4.seg @@ -0,0 +1,30 @@ +unknow 0.851864 1 0 36 -52.454 -21.5915 0.0517006 187 -52.507 -21.3245 0.0518433 187 -52.4865 -21.1244 0.0521009 187 -52.5489 -20.9579 0.0521124 187 -52.6605 -20.3343 0.052453 186 -52.1107 -21.642 0.0525147 186 -52.8303 -19.7351 0.0526023 186 -52.6251 -20.1309 0.0527434 186 -52.6445 -19.8545 0.0529626 186 -50.8705 -19.8279 0.0575155 182 -50.5569 -19.9807 0.0581602 181 -49.826 -20.5995 0.380776 255 -50.0029 -20.2143 0.380835 251 -49.8053 -20.7744 0.38093 147 -49.9663 -20.474 0.381041 255 -50.7305 -19.8626 0.382603 189 -51.199 -19.861 0.384014 176 -51.767 -19.8947 0.385768 192 -52.3931 -19.8527 0.387613 167 -53.0337 -19.9055 0.389612 153 -50.0875 -20.3287 0.701252 164 -50.1901 -20.1869 0.701637 164 -50.0337 -20.582 0.701673 164 -50.0316 -20.7652 0.702296 164 -50.4075 -20.0906 0.703159 223 -50.5295 -19.8638 0.703434 187 -51.0633 -19.8883 0.708071 166 -51.5771 -19.9018 0.712507 167 -52.1676 -19.8475 0.717382 168 -52.7744 -19.8885 0.722715 169 -53.5206 -19.9776 0.729405 171 -51.1954 -20.0089 1.07542 134 -51.3941 -19.9007 1.07773 134 -51.281 -21.5434 1.0858 135 -53.3866 -20.001 1.10777 137 -51.6606 -20.1503 1.36611 168 +unknow 0.76009 1 0 32 55.8081 -22.6093 -1.73341 160 55.8862 -22.3349 -1.73244 174 55.8446 -22.1151 -1.72858 134 55.8784 -21.9257 -1.72735 179 55.8394 -22.296 -1.42122 164 55.7281 -22.5566 -1.42105 212 55.8664 -22.1035 -1.41998 134 55.8569 -21.6948 -1.4157 152 55.6899 -23.5401 -1.02539 255 55.6935 -23.3357 -1.02384 255 55.724 -23.143 -1.0229 255 55.7844 -22.8604 -1.02184 255 55.8096 -22.6663 -1.02082 255 55.8601 -22.4826 -1.02038 255 56.0015 -22.0301 -1.01965 255 55.9153 -22.1992 -1.01928 255 56.0499 -21.846 -1.0192 255 56.987 -24.5872 -0.769181 164 56.9962 -23.3267 -0.761638 163 55.9905 -23.4298 -0.747625 194 56.0065 -23.23 -0.746651 187 55.9154 -22.4746 -0.740834 160 55.8297 -22.6442 -0.74058 160 55.6948 -25.1202 -0.349772 255 56.5214 -23.074 -0.349357 207 55.7241 -24.9231 -0.349281 206 55.6961 -24.7009 -0.348226 206 55.7624 -24.4165 -0.347736 206 56.0787 -23.0992 -0.345707 206 55.8103 -23.7098 -0.345591 212 55.8753 -23.5304 -0.345502 231 55.9249 -23.3448 -0.345267 205 +unknow 0.6361 1 0 14 56.0383 -12.0702 -1.64025 124 56.0085 -11.788 -1.63742 94 55.9415 -11.5905 -1.634 94 55.8164 -10.926 -1.62582 120 55.8426 -10.7491 -1.62556 94 55.6153 -11.341 -1.62207 94 56.0397 -11.7737 -1.3437 112 55.7852 -10.7171 -1.3313 111 55.7453 -10.8911 -1.33113 111 55.6559 -11.0553 -1.32961 155 55.5954 -11.3158 -1.32939 118 56.1825 -10.865 -0.959443 180 55.7066 -10.9548 -0.950262 178 55.6053 -11.2073 -0.94924 248 +unknow 0.406425 1 0 15 53.7081 5.23381 -1.87122 189 53.7004 5.06282 -1.87029 189 53.5764 4.79658 -1.86459 188 55.1773 5.03484 -1.57851 92 55.2423 5.06226 -1.29529 109 54.5031 4.82227 -1.27475 160 56.2106 5.5258 -0.944403 178 56.236 5.26087 -0.944402 178 55.6837 5.2388 -0.672808 152 55.5485 5.05016 -0.670415 226 54.6398 4.79496 -0.655805 186 55.9904 5.31326 -0.305713 194 55.2063 5.06349 -0.298378 192 55.2947 5.19249 0.0544803 201 54.701 4.87706 0.0561824 211 +unknow 0.75093 1 0 37 52.8362 -25.4792 -1.6832 191 52.8637 -25.2881 -1.68133 96 52.8291 -25.068 -1.67727 124 52.8742 -24.7848 -1.6747 153 52.8775 -24.5841 -1.67206 157 52.8709 -24.3794 -1.66909 155 52.9052 -24.0935 -1.66626 152 52.8913 -23.8869 -1.6631 157 52.9278 -23.7035 -1.66175 133 52.9511 -23.4151 -1.65865 166 52.975 -23.227 -1.65691 141 52.9524 -23.019 -1.65356 165 52.9767 -22.832 -1.65189 141 53.2153 -22.2443 -1.65157 95 53.0328 -22.364 -1.64764 230 52.8218 -25.6553 -1.38313 114 52.8968 -25.4866 -1.38297 114 52.8314 -24.9457 -1.37506 177 52.8208 -24.738 -1.37241 191 52.8312 -24.5407 -1.37041 158 52.81 -24.3294 -1.36748 197 52.8586 -24.0504 -1.36554 165 52.8683 -23.8546 -1.36359 171 52.8718 -23.6565 -1.36147 175 52.9205 -23.3796 -1.35963 178 52.9278 -23.1844 -1.35769 173 52.9784 -23.0084 -1.35704 141 53.1453 -22.3895 -1.3546 112 52.9772 -22.5149 -1.35173 194 52.9656 -25.5982 -0.992025 183 52.9448 -25.3833 -0.989742 183 52.9538 -25.1834 -0.988153 183 52.9995 -24.8996 -0.986524 183 52.9705 -24.6832 -0.984119 182 53.1249 -23.1488 -0.97414 181 52.9158 -23.5539 -0.973564 181 53.0312 -25.393 -0.717721 157 +unknow 0.938041 1 0 33 49.9726 -28.9275 -1.65356 95 49.9869 -28.7266 -1.65072 95 50.0543 -28.2447 -1.64493 146 50.0538 -28.0376 -1.64164 158 50.0595 -27.8346 -1.63861 153 51.2793 -25.4278 -1.63735 94 50.0329 -27.6144 -1.63442 139 50.1166 -26.4409 -1.61883 155 50.6751 -25.3272 -1.61845 94 50.1462 -26.2556 -1.6169 155 50.1717 -25.9685 -1.61335 148 50.3875 -25.481 -1.61239 129 50.2199 -25.5947 -1.60923 141 50.0077 -29.24 -1.36157 244 49.9252 -28.8768 -1.35469 166 49.9216 -28.4575 -1.34895 183 49.9699 -28.1738 -1.3463 194 49.9744 -27.9698 -1.3437 191 51.2539 -25.3925 -1.34183 112 49.9607 -27.7563 -1.34056 228 50.0261 -27.4849 -1.33856 155 50.7841 -25.3585 -1.33002 111 50.1823 -26.4522 -1.32903 111 50.4017 -25.4648 -1.32205 189 50.22 -25.5713 -1.31896 228 50.1216 -25.7198 -1.31841 206 50.0683 -27.6906 -0.959111 242 50.8314 -25.9616 -0.956316 179 50.5148 -26.0005 -0.95093 179 50.2559 -26.3686 -0.949701 243 50.2977 -26.1893 -0.948765 178 51.2417 -28.7279 -0.716861 157 50.1827 -28.8635 -0.703413 156 +unknow 0.890741 1 0 48 47.8831 30.3702 -2.33808 227 47.9343 30.1919 -2.33575 253 48.0409 29.3186 -2.31914 186 47.9824 29.0763 -2.31124 207 47.9048 28.7214 -2.30002 210 46.8627 30.2412 -2.29633 185 48.0104 28.376 -2.29616 229 47.9124 28.5216 -2.29571 255 46.2884 30.0767 -2.27065 184 46.4187 28.5281 -2.23842 182 46.1607 28.5696 -2.22954 181 45.924 28.7232 -2.22415 202 48.9216 28.3983 -1.97166 196 48.1894 28.4818 -1.94893 194 47.8248 28.4697 -1.9366 193 47.4572 28.5547 -1.92612 192 46.8093 28.5673 -1.905 191 45.5626 28.9995 -1.87302 189 45.6954 28.7823 -1.87287 189 49.1372 28.4315 -1.62253 152 48.7023 28.3842 -1.60963 158 48.3132 28.4631 -1.60009 185 47.964 28.4606 -1.59035 164 47.6119 28.4541 -1.58048 166 47.2224 28.5241 -1.57087 181 46.8919 28.5257 -1.56178 178 46.5771 28.5349 -1.55327 151 45.6725 29.5844 -1.54662 128 46.2076 28.6088 -1.54437 189 45.6543 29.3693 -1.54237 123 45.6773 29.1816 -1.53972 145 45.9632 28.6575 -1.5385 186 45.8425 28.7826 -1.53734 126 45.7197 28.9062 -1.53611 209 49.0243 28.39 -1.32726 187 48.7155 28.4161 -1.32037 153 48.3037 28.4819 -1.31165 189 48.0094 28.5122 -1.3052 110 46.7484 28.4638 -1.27522 108 46.64 28.5991 -1.27463 108 48.796 28.5877 -0.94591 178 48.4939 28.7184 -0.941952 177 47.338 29.8729 -0.934116 177 47.2114 29.5859 -0.928812 197 47.165 29.3507 -0.925466 202 47.2126 29.0725 -0.923304 238 47.3687 28.7597 -0.922692 255 47.2457 28.8886 -0.921917 240 +unknow 0.964629 1 0 34 45.0048 20.388 -2.01029 168 42.6698 19.0868 -1.89061 161 42.6146 18.9016 -1.88496 174 42.8088 18.4271 -1.88442 161 42.5969 18.7338 -1.88119 160 42.6774 18.5297 -1.88083 160 45.1338 20.4529 -1.70119 177 42.5613 19.1279 -1.58976 168 42.4609 18.8429 -1.58175 217 42.4138 18.6628 -1.57728 255 42.5721 18.0186 -1.57304 255 42.4804 18.1373 -1.57157 255 42.3761 18.3294 -1.5708 255 44.9533 20.4583 -1.38443 84 42.6966 19.2682 -1.30227 81 42.7048 19.0301 -1.29937 229 42.5085 18.7826 -1.29034 156 42.5468 18.4808 -1.28757 147 42.6279 18.2778 -1.28738 144 44.0909 19.926 -1.10313 125 43.0685 19.2208 -1.07002 96 42.8708 18.9715 -1.06238 123 42.8606 18.8062 -1.06032 161 42.8663 18.6484 -1.05874 159 43.0632 18.1736 -1.05858 139 43.0041 18.308 -1.05853 163 42.9353 18.4383 -1.0582 163 45.0224 20.1872 -0.798734 160 44.3063 19.7345 -0.555908 136 44.2345 19.5363 -0.553609 135 44.2077 19.3588 -0.552098 135 44.4124 18.8692 -0.552003 135 44.3326 19 -0.551656 135 44.2544 19.1312 -0.551342 135 +unknow 0.876199 1 0 48 33.7581 -9.62474 -1.76555 135 33.8013 -8.83829 -1.75623 103 33.7399 -8.70917 -1.75106 128 33.7187 -8.59084 -1.74825 167 33.271 -9.59935 -1.7388 255 33.3669 -9.23082 -1.73835 147 33.3418 -9.11125 -1.7352 150 33.6496 -9.97841 -1.56763 122 33.7103 -8.91097 -1.556 86 33.7057 -8.68349 -1.55287 85 33.4389 -9.12064 -1.54548 133 33.2982 -9.47679 -1.54345 233 33.2908 -9.19259 -1.5392 162 33.1723 -9.55364 -1.53839 146 33.6933 -9.75111 -1.36617 169 33.6355 -9.9064 -1.36563 150 33.6851 -9.12116 -1.35819 212 33.5874 -9.37847 -1.35702 179 33.6711 -9.00397 -1.35621 154 33.4529 -9.56795 -1.35351 160 33.6532 -8.82953 -1.35343 153 33.6769 -8.72276 -1.35325 157 33.6945 -8.61445 -1.35281 125 33.3383 -9.14001 -1.34337 255 33.1712 -9.37501 -1.33897 234 33.6386 -8.91843 -1.13232 131 33.6302 -8.57772 -1.1287 131 33.5602 -8.7848 -1.12808 130 33.4615 -9.15327 -1.12808 130 33.576 -8.67631 -1.12762 130 33.2593 -9.21022 -1.12114 243 33.1251 -9.34128 -1.11752 214 33.7325 -8.90123 -0.916451 63 33.513 -9.12556 -0.911484 110 33.1972 -9.43301 -0.904323 116 33.2201 -9.15821 -0.902648 253 33.142 -9.30496 -0.901486 234 33.9131 -8.91498 -0.741937 75 33.8263 -9.06276 -0.740689 255 33.7417 -9.15376 -0.739117 182 33.1486 -9.38496 -0.725293 208 33.1731 -9.11105 -0.723941 222 33.1086 -9.26133 -0.723343 244 33.5194 -9.15855 -0.500839 139 33.2582 -9.25598 -0.496228 166 33.2058 -9.35393 -0.495737 255 33.308 -9.17381 -0.33608 102 33.2529 -9.32742 -0.335889 145 +unknow 0.889569 1 0 54 28.9971 -20.3666 -1.78409 132 29.508 -19.5035 -1.7805 123 28.8389 -20.4591 -1.77982 126 29.4233 -19.5806 -1.77893 121 28.5863 -20.7562 -1.77801 140 28.7387 -20.5241 -1.77734 128 28.6498 -20.5969 -1.77565 173 28.4774 -20.8142 -1.77498 130 28.4039 -20.8976 -1.77441 170 31.9887 -19.8493 -1.69664 92 31.7586 -19.8448 -1.68662 101 29.2727 -21.5175 -1.62993 178 29.0766 -21.5142 -1.62183 131 29.3 -21.045 -1.61698 88 28.9047 -20.968 -1.59846 99 29.7237 -19.6273 -1.59393 125 28.9028 -20.6219 -1.58815 87 29.5206 -19.6265 -1.58533 134 28.7687 -20.39 -1.5758 95 32.1964 -19.8909 -1.49049 135 31.9725 -19.8918 -1.48196 134 29.901 -19.6637 -1.39802 128 29.7574 -19.7035 -1.39362 128 28.6523 -20.4984 -1.37295 255 28.6498 -20.3609 -1.36928 255 28.7695 -20.1078 -1.36712 167 28.6319 -20.2132 -1.36479 255 32.3209 -19.8781 -1.25341 141 31.9232 -19.8411 -1.23962 184 30.987 -19.7342 -1.20687 137 30.7298 -19.7061 -1.19793 137 29.7496 -19.8105 -1.16849 134 28.9063 -21.0016 -1.16801 134 29.79 -19.7026 -1.16749 134 28.8152 -20.7285 -1.159 133 28.8395 -20.6088 -1.15707 148 28.9172 -20.323 -1.15315 157 28.7087 -20.3791 -1.14783 151 29.1167 -21.1008 -0.950877 64 29.1053 -20.8842 -0.946494 64 29.0405 -20.6999 -0.941338 64 28.996 -20.5313 -0.937019 71 31.64 -19.8486 -0.803768 79 31.3891 -19.8978 -0.798726 78 31.2102 -19.922 -0.794986 78 30.8937 -19.8565 -0.786802 78 29.7541 -21.0282 -0.778925 106 30.0225 -19.7658 -0.765663 76 29.9003 -19.8202 -0.763711 76 31.2218 -20.0993 -0.376635 143 31.0144 -20.1731 -0.374524 127 30.859 -20.2101 -0.372792 127 30.7197 -20.3958 -0.372569 125 30.7636 -20.286 -0.372193 125 +unknow 0.887021 1 0 72 27.8327 26.5005 -2.18195 133 24.9825 24.7926 -2.17872 99 25.0706 24.6466 -2.17601 137 25.1351 24.5552 -2.17479 138 25.1907 24.4552 -2.17276 134 27.6325 26.476 -2.17189 172 27.4413 26.4589 -2.16256 140 27.0315 26.4768 -2.14504 180 26.8557 26.4706 -2.13696 140 26.3363 24.5316 -2.03006 125 26.1381 24.501 -2.01975 105 25.9281 24.5348 -2.01167 117 27.275 24.7562 -1.86313 128 27.0468 24.7043 -1.85166 127 26.8089 24.6417 -1.83941 145 26.5681 24.6523 -1.82985 174 26.3287 24.5842 -1.81737 129 26.0811 24.5067 -1.80422 125 25.3382 25.2741 -1.80421 255 25.4045 25.1024 -1.80005 245 25.5743 24.7202 -1.79185 137 25.6302 24.619 -1.79016 255 27.658 24.7295 -1.66923 90 27.4539 24.7028 -1.66063 90 27.1892 24.6977 -1.65051 90 26.9699 24.6537 -1.6408 89 26.7143 24.5748 -1.62855 101 26.5191 24.6271 -1.62309 88 26.3365 24.6122 -1.6158 88 26.0537 24.502 -1.60153 87 25.4274 24.9892 -1.59576 122 25.806 24.4994 -1.59233 101 25.4414 24.8464 -1.59121 101 25.5438 24.7124 -1.5902 87 25.6798 24.5335 -1.58888 87 25.5882 24.6002 -1.58787 87 27.1111 24.7219 -1.43882 131 26.8803 24.6664 -1.42948 130 26.6853 24.6421 -1.4223 130 26.4316 24.6395 -1.41386 129 26.2026 24.5801 -1.40452 142 25.5326 25.1873 -1.40174 154 25.5645 25.0608 -1.39878 144 25.6365 24.8954 -1.3959 145 25.8498 24.6334 -1.39465 218 25.6931 24.794 -1.39456 150 25.7463 24.6896 -1.39303 155 27.8117 24.83 -1.22811 139 27.5444 24.8257 -1.22033 138 27.3226 24.782 -1.21286 138 26.1458 25.6565 -1.20299 158 26.1533 25.5032 -1.19906 137 26.1356 25.3264 -1.19382 136 26.7746 24.5938 -1.19236 136 26.1739 25.1255 -1.1895 136 26.231 25.0225 -1.18835 136 26.2848 24.9166 -1.18704 136 26.4753 24.7053 -1.18681 136 26.3815 24.7733 -1.18596 135 27.5472 25.2076 -0.995673 67 27.6248 25.1196 -0.995609 67 26.6509 26.0534 -0.993412 66 26.7544 24.8702 -0.96949 65 26.9759 26.0036 -0.807178 79 26.9577 25.8233 -0.803439 79 27.634 25.012 -0.80187 79 26.9547 25.6586 -0.800296 79 26.9938 25.4546 -0.797261 78 27.0109 25.3109 -0.79493 78 27.0244 25.1647 -0.792492 78 27.2138 24.9449 -0.792221 78 27.1073 25.0045 -0.791191 78 +unknow 0.971856 1 0 204 24.832 -19.4819 -1.75402 117 24.7472 -19.5413 -1.75216 158 24.681 -19.6152 -1.75178 118 24.5184 -19.8022 -1.75116 119 24.4452 -19.8703 -1.75029 149 24.5959 -19.6739 -1.74992 151 24.375 -19.9406 -1.74966 117 24.1977 -20.1149 -1.74804 123 24.2484 -20.0285 -1.74705 157 23.6411 -20.5477 -1.73909 117 23.7301 -20.4296 -1.73847 107 23.5389 -20.589 -1.73598 145 23.4711 -20.6602 -1.73573 116 23.3422 -20.7427 -1.73312 146 23.2635 -20.8039 -1.732 114 23.1728 -20.8542 -1.72988 145 23.1043 -20.9242 -1.72963 116 22.973 -21.0032 -1.7269 146 22.8937 -21.0631 -1.72578 114 22.8099 -21.1186 -1.72428 153 22.6941 -21.2109 -1.72291 117 22.5881 -21.2451 -1.71956 157 22.4894 -21.2858 -1.71682 118 23.7136 -19.8382 -1.71386 106 23.1886 -19.5848 -1.67869 103 23.0454 -19.7133 -1.67707 114 23.0707 -19.6097 -1.67409 118 26.1165 -19.6633 -1.62962 172 25.8311 -20.0269 -1.62928 145 25.9893 -19.6959 -1.62501 153 25.6929 -19.791 -1.615 113 25.7153 -19.6799 -1.61219 130 24.2383 -21.2916 -1.60542 123 25.2944 -19.8029 -1.59769 182 25.1347 -19.8057 -1.59072 141 24.919 -19.7631 -1.5797 198 24.7537 -19.7591 -1.57228 161 23.3293 -21.2862 -1.56708 147 23.4205 -21.168 -1.56641 139 24.5219 -19.7641 -1.56227 167 23.417 -21.0316 -1.56113 210 23.1416 -21.2487 -1.55786 141 24.3215 -19.7292 -1.55227 179 22.9808 -21.2347 -1.55067 128 22.4227 -21.7888 -1.54931 171 24.1387 -19.7071 -1.5435 187 23.9253 -19.7217 -1.53473 183 23.734 -19.6898 -1.52529 186 23.5325 -19.6479 -1.51505 134 23.3605 -19.6293 -1.50696 138 23.1763 -19.6618 -1.50021 132 22.9704 -19.7368 -1.49414 225 22.9867 -19.6257 -1.49077 116 26.3314 -19.6727 -1.45458 178 26.1593 -19.6724 -1.4476 218 25.7423 -19.6769 -1.4309 108 25.576 -19.6772 -1.42422 228 25.3688 -19.6448 -1.41492 147 25.1747 -19.6212 -1.40642 160 24.9722 -19.6531 -1.39933 161 24.7836 -19.6308 -1.39113 163 24.6203 -19.6276 -1.38456 164 24.4109 -19.6494 -1.37697 165 24.2436 -19.6404 -1.37009 161 24.0627 -19.6191 -1.36229 163 23.8683 -19.6484 -1.35561 161 23.6911 -19.6277 -1.34802 145 22.3454 -21.0801 -1.34567 76 22.3038 -20.9086 -1.33819 76 23.3808 -19.6193 -1.33568 143 23.1647 -19.6246 -1.32748 113 22.2546 -20.5362 -1.32352 75 22.986 -19.5974 -1.31969 95 22.2631 -20.4149 -1.31968 75 22.8865 -19.637 -1.31716 123 22.2637 -20.2869 -1.31533 75 22.3146 -20.1416 -1.31229 75 22.7092 -19.6713 -1.31149 189 22.3362 -20.034 -1.30946 75 22.5961 -19.6979 -1.30805 154 22.3171 -19.8906 -1.3039 81 22.4001 -19.7759 -1.30319 106 26.4119 -19.6607 -1.26944 146 26.2604 -19.6766 -1.26442 160 26.0484 -19.646 -1.25598 135 25.8172 -19.6633 -1.24816 129 25.6505 -19.6642 -1.24224 117 25.4446 -19.6337 -1.23407 229 25.2691 -19.6254 -1.2276 208 25.0505 -19.6457 -1.22042 209 24.8804 -19.639 -1.21422 208 24.6964 -19.6202 -1.20722 205 24.493 -19.6477 -1.20085 206 24.3363 -19.6481 -1.19537 208 24.158 -19.6301 -1.18863 210 23.9833 -19.6136 -1.18208 213 23.7811 -19.6362 -1.17571 204 23.6163 -19.6253 -1.16969 190 22.353 -21.018 -1.16859 211 22.3093 -20.8454 -1.16186 194 22.3207 -20.6601 -1.15656 202 23.1461 -19.6693 -1.15478 111 22.306 -20.5169 -1.15172 202 22.2995 -20.382 -1.14741 209 22.9414 -19.6199 -1.14634 255 22.8048 -19.69 -1.14374 202 22.3013 -20.2555 -1.14364 205 22.34 -20.0995 -1.14023 213 22.6704 -19.6987 -1.13943 201 22.3688 -19.9986 -1.13817 208 22.5602 -19.7278 -1.13656 207 22.3911 -19.8924 -1.13574 213 22.4606 -19.7656 -1.13431 219 26.3068 -19.6846 -1.05721 124 26.1284 -19.6793 -1.05158 172 25.877 -19.6174 -1.04242 237 25.686 -19.6637 -1.03764 205 25.5007 -19.6491 -1.03163 227 25.3031 -19.6237 -1.025 229 25.0908 -19.6489 -1.01914 202 24.9129 -19.636 -1.01344 237 24.74 -19.6259 -1.00797 209 24.5627 -19.6112 -1.00226 205 24.3472 -19.6275 -0.996177 242 24.1846 -19.622 -0.991167 212 24.0161 -19.6106 -0.98585 210 23.8171 -19.6357 -0.980532 210 22.4152 -21.0443 -0.975807 197 23.6569 -19.6287 -0.9756 212 23.4863 -19.6119 -0.970129 200 22.3615 -20.8619 -0.96949 214 22.3716 -20.6748 -0.96487 216 23.2776 -19.6243 -0.964272 230 22.357 -20.5314 -0.960711 222 23.1427 -19.6352 -0.960572 207 22.3609 -20.4057 -0.957553 198 23.002 -19.6403 -0.956565 211 22.399 -20.2478 -0.95455 204 22.8705 -19.6525 -0.953019 213 22.3971 -20.1185 -0.951162 245 22.7022 -19.6945 -0.949165 221 22.4111 -20.0041 -0.94862 194 22.4484 -19.9111 -0.947312 225 22.5921 -19.7236 -0.946699 240 22.509 -19.776 -0.945619 240 25.9943 -19.8561 -0.84609 59 25.6939 -19.7551 -0.836417 185 25.3802 -19.6414 -0.826164 109 24.9651 -19.7631 -0.818036 58 24.7011 -19.6809 -0.809717 183 24.4974 -19.7082 -0.805137 182 24.3265 -19.6971 -0.800623 147 24.1514 -19.6813 -0.795915 143 23.9363 -19.6947 -0.790819 182 23.7788 -19.6908 -0.78682 148 22.5287 -21.1097 -0.786795 108 23.62 -19.6849 -0.782757 147 22.4734 -20.9258 -0.781445 109 23.4462 -19.6653 -0.778049 148 22.4085 -20.6694 -0.774291 255 23.2571 -19.6943 -0.773985 148 23.1083 -19.6934 -0.770309 151 22.3775 -20.5112 -0.770101 255 22.9856 -19.7139 -0.767729 108 22.3826 -20.387 -0.767523 255 22.475 -20.1506 -0.764625 125 22.3789 -20.1917 -0.763205 243 22.474 -20.0228 -0.761854 154 22.6883 -19.7705 -0.761665 180 22.5173 -19.9349 -0.761017 99 22.5854 -19.8061 -0.759923 133 25.4575 -19.7859 -0.665272 69 24.4523 -20.0738 -0.648842 68 24.2104 -20.1311 -0.644776 84 24.2939 -19.7526 -0.640012 67 23.5587 -19.7139 -0.623966 92 22.4676 -20.8726 -0.622537 122 23.4183 -19.7846 -0.622285 100 23.251 -19.7686 -0.618545 114 22.4422 -20.6527 -0.617987 142 22.6026 -20.3458 -0.615607 116 22.4421 -20.5227 -0.615604 128 23.0977 -19.7635 -0.615292 224 22.6471 -20.2573 -0.614904 136 22.4784 -20.4265 -0.614576 176 22.6807 -20.1595 -0.613822 130 22.9544 -19.829 -0.613502 171 22.747 -20.0272 -0.612794 122 22.8422 -19.8577 -0.611713 105 25.0513 -19.8666 -0.44407 110 24.92 -19.9545 -0.443089 110 23.5141 -21.1174 -0.43654 109 24.4942 -19.8678 -0.435214 130 23.3579 -20.8453 -0.430463 108 23.3724 -20.7267 -0.429078 108 23.372 -20.5306 -0.426429 107 23.8345 -19.8984 -0.425215 107 23.3369 -20.3704 -0.423738 107 23.3434 -20.2473 -0.422189 107 23.6196 -19.9088 -0.421991 206 23.3811 -20.1517 -0.421497 113 23.5036 -19.9377 -0.420562 146 24.0887 -20.5118 -0.290119 94 24.1317 -20.418 -0.28968 94 +unknow 0.8494 1 0 57 20.1706 22.8895 -2.03207 215 20.006 22.9198 -2.02576 167 19.8463 22.8816 -2.01593 166 19.6635 22.8155 -2.00346 165 19.5506 22.9019 -2.00287 165 19.4049 22.8766 -1.99451 196 19.275 22.8688 -1.98791 216 19.1389 22.9257 -1.98468 164 18.9597 22.8569 -1.97236 177 18.8357 22.8533 -1.96634 183 20.3729 22.9992 -1.87503 61 20.0503 22.7783 -1.84929 60 19.9008 22.8244 -1.84495 60 19.6959 22.7329 -1.83113 73 19.5814 22.7447 -1.82665 80 19.2993 22.922 -1.8234 87 19.4249 22.779 -1.82151 77 19.303 22.7805 -1.81622 76 19.0864 22.8869 -1.81229 135 18.9953 22.9237 -1.81026 96 20.1747 22.848 -1.68687 90 19.9737 22.7644 -1.67469 86 19.7954 22.7769 -1.66797 104 19.7055 22.8179 -1.66623 127 19.4571 22.8914 -1.65964 70 19.5088 22.7343 -1.6543 132 19.2923 22.8427 -1.65069 70 19.1613 22.8329 -1.64498 81 19.7326 22.8925 -1.49088 119 19.7756 22.7971 -1.48841 238 19.4412 22.9157 -1.48121 195 19.3653 22.9721 -1.48088 126 19.5139 22.7828 -1.47818 159 18.9592 22.9986 -1.46738 216 19.0957 22.7969 -1.46356 159 19.0227 22.8552 -1.46345 201 19.8176 22.6613 -1.31476 161 19.4218 22.9256 -1.31182 223 19.6674 22.7046 -1.31142 180 19.5621 22.727 -1.30879 180 19.4503 22.7413 -1.30565 132 18.9229 22.9883 -1.29806 106 18.9991 22.8605 -1.29553 180 19.0195 22.7394 -1.29148 150 19.7592 22.885 -1.14873 255 19.8445 22.766 -1.1472 220 19.6469 22.8999 -1.14595 190 19.3802 22.9511 -1.13993 109 19.4609 22.8276 -1.13805 109 19.7754 23.0863 -0.96264 255 19.695 22.8471 -0.953624 230 19.7221 22.7338 -0.951005 190 19.7868 22.6642 -0.95062 228 19.7696 22.9773 -0.768918 55 19.8969 22.7611 -0.76634 123 19.7659 22.8273 -0.765178 219 19.8055 22.9271 -0.612754 65 +unknow 0.896082 1 0 93 17.7487 -17.6228 -1.62753 168 17.6453 -17.6305 -1.62254 174 17.461 -17.6113 -1.61198 181 17.0122 -17.7619 -1.59686 151 17.0527 -17.6925 -1.59525 154 16.7242 -17.5708 -1.57207 135 16.4944 -17.604 -1.56224 134 16.5154 -17.5158 -1.55857 155 16.3236 -17.5315 -1.54977 133 17.8544 -17.6102 -1.49133 155 17.6601 -17.5286 -1.47805 108 17.6049 -17.584 -1.47805 186 17.3765 -17.6309 -1.46937 106 17.205 -17.5672 -1.45812 169 17.0414 -17.5651 -1.45026 150 16.8187 -17.5552 -1.43929 191 16.7236 -17.5661 -1.43536 106 16.4608 -17.5646 -1.42302 160 16.5118 -17.5084 -1.42262 106 16.3334 -17.5389 -1.41584 86 17.7717 -17.5703 -1.34483 125 17.6104 -17.5203 -1.33551 87 17.4882 -17.5635 -1.33203 123 17.1147 -17.4052 -1.30866 103 16.9483 -17.5089 -1.30605 142 16.838 -17.5044 -1.30108 212 17.0543 -17.2348 -1.29847 162 16.9401 -17.3359 -1.29797 121 16.7043 -17.4749 -1.29399 169 16.4504 -17.4819 -1.28342 107 16.2639 -17.5578 -1.27895 186 16.3233 -17.4561 -1.27684 117 17.7224 -17.5015 -1.1914 156 17.6361 -17.5261 -1.18892 173 17.4842 -17.5398 -1.18341 161 17.1538 -17.7022 -1.17689 202 17.2264 -17.3906 -1.16723 147 16.947 -17.5993 -1.16464 159 17.1339 -17.4063 -1.16419 253 17.0302 -17.4101 -1.16025 229 16.7755 -17.5314 -1.15519 168 16.6253 -17.5394 -1.14968 208 16.5085 -17.5262 -1.14462 168 16.4151 -17.5372 -1.14147 173 17.7037 -17.4458 -1.04862 87 17.585 -17.4379 -1.04407 190 17.0321 -17.9288 -1.04223 117 17.4948 -17.4578 -1.04153 107 17.0225 -17.5282 -1.02726 117 17.2001 -17.3258 -1.02626 239 17.0434 -17.3849 -1.02281 151 17.0797 -17.3128 -1.0215 219 16.8112 -17.5294 -1.01988 130 16.7664 -17.3729 -1.01259 255 16.3671 -17.5562 -1.0054 192 17.2556 -17.3397 -0.889137 213 17.2875 -17.2089 -0.885997 123 16.7663 -17.7171 -0.885986 126 17.1293 -17.3215 -0.884558 251 17.0272 -17.3268 -0.881505 241 16.7502 -17.5892 -0.88132 214 16.9188 -17.3797 -0.879798 243 16.8266 -17.394 -0.877373 253 16.7719 -17.4468 -0.877372 240 17.2987 -17.5611 -0.740813 162 17.3435 -17.2232 -0.732804 222 17.1838 -17.3348 -0.731492 155 17.0145 -17.3809 -0.728177 187 17.1733 -17.2155 -0.727949 188 16.7036 -17.6083 -0.726169 168 16.7174 -17.4571 -0.722318 181 16.8142 -17.3388 -0.721627 236 16.7541 -17.3858 -0.721318 191 17.4408 -17.3013 -0.583368 45 16.7238 -17.6113 -0.574332 139 17.1056 -17.2379 -0.574275 113 17.0387 -17.2787 -0.573694 217 16.969 -17.3165 -0.572983 160 16.8746 -17.3834 -0.572402 171 16.754 -17.4775 -0.571884 185 16.7977 -17.4133 -0.571369 190 16.7301 -17.5619 -0.448742 177 16.9899 -17.2827 -0.448206 53 16.8748 -17.3282 -0.446904 242 16.7656 -17.4338 -0.446901 195 16.7995 -17.3595 -0.44609 198 17.0703 -17.5048 -0.290577 85 16.8906 -17.5398 -0.288536 213 16.9024 -17.4422 -0.287273 255 17.0511 -17.4247 -0.175845 73 16.9448 -17.4251 -0.17468 73 16.8733 -17.4609 -0.174301 73 17.1092 -17.608 -0.0164177 94 +unknow 0.685268 1 0 824 14.0409 -1.11134 -1.33677 224 13.9982 -1.16346 -1.25199 255 13.9123 -1.0905 -1.24244 255 13.9137 -1.04664 -1.24223 255 13.9011 -1.00181 -1.24057 240 14.1394 -1.21823 -1.19037 93 13.9921 -1.21424 -1.09768 74 13.9006 -1.16249 -1.08875 246 13.999 -1.17774 -1.00877 237 13.9808 -1.13194 -1.00686 255 13.9406 -1.08453 -1.00305 255 13.9029 -0.971731 -0.999068 255 13.8982 -1.03724 -0.999068 255 13.8702 -0.925594 -0.99595 255 14.057 -1.19151 -0.939305 169 14.0428 -1.14591 -0.93784 255 13.9721 -0.941673 -0.930843 255 13.969 -0.897401 -0.930355 255 13.9631 -0.985153 -0.930355 255 13.9599 -1.02901 -0.930354 255 13.951 -1.09448 -0.930028 255 13.9174 -0.828352 -0.925799 230 14.0238 -1.1529 -0.823015 180 14.0161 -1.1966 -0.822722 140 14.0191 -1.08601 -0.822282 130 13.929 -1.03484 -0.815387 255 13.9253 -0.946615 -0.814655 229 13.9222 -0.990355 -0.814654 144 13.9276 -0.880844 -0.814508 196 13.9144 -0.836101 -0.813335 225 14.0463 -1.21946 -0.745939 88 14.0217 -1.1065 -0.743636 76 14.0044 -1.17158 -0.742822 140 13.9616 -0.815453 -0.738218 251 13.9478 -0.968639 -0.737946 255 13.9415 -1.05626 -0.737945 135 13.9494 -0.748823 -0.737134 255 13.9288 -1.01133 -0.736861 255 13.9323 -0.901653 -0.736591 255 13.9271 -0.857406 -0.736049 255 13.9238 -0.703634 -0.735237 211 14.0219 -1.2113 -0.665238 72 13.9617 1.21244 -0.661524 158 13.9536 -1.11698 -0.660515 146 13.9063 -1.15709 -0.65778 138 13.899 -1.0466 -0.656787 219 13.8843 -1.00161 -0.655668 255 13.8854 -0.957842 -0.655544 255 13.8864 -0.91408 -0.65542 255 13.8865 -0.848381 -0.655172 255 13.8836 -0.760662 -0.654676 255 13.8732 -0.803798 -0.654178 239 13.8392 -0.692744 -0.651693 201 14.0267 -1.1376 -0.581582 107 14.0232 -1.02655 -0.580909 255 14.0031 -1.18003 -0.580458 137 14.0064 -0.981134 -0.579785 255 14.0029 -0.914614 -0.579335 255 13.9775 1.19902 -0.579124 162 13.9881 -1.06823 -0.57911 163 13.9752 1.15459 -0.578787 250 13.9967 -0.671616 -0.578213 255 13.9739 -0.868695 -0.577537 246 13.9685 -0.824335 -0.577088 238 13.9671 -0.780232 -0.576863 242 13.9526 -0.713521 -0.575852 130 13.8751 -0.622325 -0.571243 190 14.0201 1.24049 -0.502718 151 14.0187 -1.18794 -0.502398 148 13.9641 -1.09488 -0.499262 178 13.9404 1.18946 -0.498467 127 13.9427 -1.13725 -0.498351 101 13.9347 1.03481 -0.497556 255 13.9339 0.836901 -0.496846 255 13.9114 1.07707 -0.496544 219 13.9134 -1.02485 -0.496429 255 13.896 1.11983 -0.495937 197 13.8986 -0.979838 -0.495519 255 13.8954 0.878474 -0.495025 250 13.9164 -0.433098 -0.495017 255 13.886 0.987442 -0.494925 89 13.9074 -0.520292 -0.494713 255 13.8856 -0.935066 -0.49471 255 13.8799 -0.868979 -0.494204 255 13.8831 -0.781636 -0.494104 255 13.8806 -0.825247 -0.494104 255 13.8848 -0.672374 -0.493902 255 13.8815 -0.737798 -0.493902 255 13.8849 -0.628657 -0.493801 255 13.8854 0.571687 -0.493708 255 13.8848 -0.584945 -0.4937 255 13.8851 0.52799 -0.493607 255 13.887 -0.475805 -0.4936 237 13.8827 0.484234 -0.493404 255 13.8863 -0.36661 -0.493399 255 13.8871 0.0261092 -0.493199 255 13.884 0.178779 -0.493099 255 13.8626 0.265666 -0.492087 205 14.0805 1.24086 -0.425276 52 14.0643 -1.19681 -0.424362 151 14.0361 -1.15007 -0.422926 139 14.0018 -1.10306 -0.42122 247 13.971 -1.03448 -0.419605 255 13.9867 -0.638745 -0.419249 216 13.9672 -0.946017 -0.419157 255 13.9642 -0.989892 -0.419156 255 13.9643 -0.835712 -0.418709 255 13.9616 -0.879578 -0.418708 255 13.9633 -0.747647 -0.41844 255 13.9449 -0.790635 -0.417721 255 13.9247 -0.67987 -0.416555 255 14.098 1.23678 -0.336239 54 14.07 1.18985 -0.335006 54 14.0071 -1.19732 -0.332602 146 13.961 -1.14912 -0.330676 229 13.9637 -1.03898 -0.330445 255 13.9546 -1.10445 -0.330291 124 13.9589 -0.994519 -0.330137 255 13.956 -0.950245 -0.329907 255 13.9423 -0.883295 -0.329214 255 13.922 1.11157 -0.329072 127 13.9336 -0.794859 -0.328675 255 13.9276 -0.137277 -0.3276 222 13.8835 0.955095 -0.327145 241 13.8912 -0.83615 -0.327133 255 13.8935 -0.683051 -0.326903 255 13.8705 0.910446 -0.326528 224 13.8733 0.866869 -0.326528 152 13.8762 -0.747745 -0.326363 255 13.862 0.822481 -0.325988 127 13.8743 -0.529216 -0.325903 158 13.8597 0.756837 -0.325756 248 13.8642 0.669732 -0.325756 185 13.86 0.713189 -0.325679 173 13.8612 0.604145 -0.325524 186 13.8673 -0.441693 -0.325518 201 13.8639 -0.48518 -0.325441 255 13.855 0.560284 -0.325216 154 13.8567 0.516757 -0.325216 154 13.8624 -0.332554 -0.32521 202 13.8587 -0.397816 -0.325133 207 13.8582 -0.245336 -0.32498 194 13.8574 -0.288869 -0.32498 200 13.8503 0.472968 -0.324907 154 13.8524 0.407699 -0.324907 132 13.8572 -0.180002 -0.324903 200 13.8464 0.0159209 -0.324442 117 14.0177 -1.21288 -0.244925 96 14.0135 1.21487 -0.244812 194 13.9774 1.16743 -0.243522 249 13.9656 -1.16429 -0.24312 246 13.9373 -1.11792 -0.242089 244 13.9325 -1.05149 -0.241767 244 13.9337 -1.00758 -0.241703 255 13.9372 -0.897862 -0.241574 255 13.9308 -0.963395 -0.241509 255 13.915 1.09609 -0.241329 91 13.9326 -0.809714 -0.241253 255 13.9144 1.05206 -0.2412 228 13.9207 0.964619 -0.241199 255 13.9116 1.0079 -0.241006 255 13.9225 0.811014 -0.24094 255 13.9287 -0.655928 -0.240867 255 13.918 -0.852769 -0.240865 255 13.9225 -0.699487 -0.240737 255 13.9092 0.897953 -0.240683 255 13.9247 -0.611917 -0.240673 255 13.9166 0.657198 -0.240488 255 13.9105 0.700711 -0.240359 255 13.9174 -0.545916 -0.240351 255 13.9071 -0.764447 -0.24035 255 13.9171 -0.502118 -0.240287 255 13.915 0.503833 -0.240229 255 13.9166 -0.392694 -0.240159 255 13.9094 0.547385 -0.240101 255 13.892 0.852979 -0.240038 255 13.9106 -0.458149 -0.24003 255 13.9016 0.590811 -0.239907 255 13.9057 -0.348697 -0.239772 255 13.8928 -0.304731 -0.239321 255 13.8877 -0.108254 -0.239065 255 13.8857 -0.260951 -0.239064 255 13.8663 0.742084 -0.239005 255 13.8828 -0.195456 -0.238935 255 13.8433 -0.151481 -0.237646 255 13.8382 0.000725957 -0.237453 255 13.8381 -0.0427517 -0.237453 255 13.8001 0.0440044 -0.236228 255 14.0443 1.21753 -0.173564 189 14.0005 -1.16703 -0.172248 255 13.9947 -1.21083 -0.172193 81 13.9557 -1.07495 -0.170839 255 13.9343 1.14207 -0.17042 255 13.9363 -1.11748 -0.170405 255 13.9253 1.05332 -0.169986 255 13.9199 1.09691 -0.169932 255 13.9247 -1.00651 -0.169864 255 13.9238 -0.962477 -0.169756 255 13.9188 -0.918189 -0.16954 255 13.9176 -0.808365 -0.169324 255 13.9026 1.00774 -0.169281 255 13.911 -0.851832 -0.169215 255 13.9141 -0.764297 -0.169161 255 13.9012 0.941826 -0.169118 255 13.9144 -0.720474 -0.169107 255 13.9008 0.854099 -0.168955 255 13.8961 0.897651 -0.168901 255 13.9037 -0.654212 -0.168729 255 13.8971 0.744388 -0.168683 255 13.9017 -0.610347 -0.16862 255 13.9015 -0.566585 -0.168567 255 13.9 -0.500918 -0.168459 255 13.8894 0.700243 -0.168412 255 13.8828 0.787384 -0.168358 255 13.8936 -0.45697 -0.168242 255 13.8863 0.547103 -0.16814 255 13.8806 0.634255 -0.168086 255 13.8825 0.590641 -0.168086 255 13.872 0.502922 -0.167706 255 13.8749 -0.412688 -0.1677 255 13.8698 -0.303513 -0.167484 255 13.8687 -0.347084 -0.167484 255 13.8594 -0.216143 -0.16716 255 13.8587 -0.259691 -0.167159 255 13.8563 -0.150783 -0.167052 255 13.8431 0.00160247 -0.166673 255 13.8429 -0.063634 -0.166673 255 13.8427 -0.10712 -0.166673 255 13.8342 0.436364 -0.166622 255 13.841 0.045093 -0.166619 255 14.0108 -1.18022 -0.0787663 212 13.9845 1.1337 -0.0781694 255 13.9766 -1.1332 -0.0779914 255 13.9581 -1.08762 -0.0775429 255 13.9642 -0.977824 -0.077503 255 13.9522 1.0869 -0.0774347 255 13.9555 1.04306 -0.0774345 255 13.9571 -1.0214 -0.077421 255 13.9655 -0.867759 -0.0773813 255 13.9392 1.1961 -0.0773537 196 13.9547 0.99892 -0.0773526 255 13.9553 -0.933171 -0.0772585 255 13.9562 0.888904 -0.0772296 255 13.9662 -0.713758 -0.0772192 255 13.9627 -0.779564 -0.0772188 255 13.9569 0.844934 -0.0771885 255 13.9582 -0.823311 -0.0771776 255 13.9644 -0.669694 -0.077138 255 13.9473 0.932331 -0.0771074 255 13.9551 0.73485 -0.0770247 255 13.9584 -0.625477 -0.0769751 255 13.9487 0.778454 -0.0769433 255 13.9533 0.690802 -0.0769428 255 13.9625 -0.471898 -0.0769353 255 13.9637 -0.362175 -0.0768953 255 13.9543 -0.581384 -0.0768529 255 13.9549 -0.51555 -0.0768126 255 13.9517 0.493106 -0.0767376 255 13.9577 -0.27429 -0.0767327 255 13.9424 0.580498 -0.0766157 255 13.9479 -0.427571 -0.0766092 255 13.9375 0.646099 -0.0765753 255 13.9488 -0.317971 -0.0765692 255 13.9401 0.536535 -0.0765339 255 13.9475 -0.16454 -0.0764886 255 13.9419 -0.120681 -0.0763665 255 13.9385 -0.230146 -0.076325 255 13.9322 -0.0768442 -0.0761628 255 13.8964 -0.0112277 -0.0754288 255 13.8602 0.0758214 -0.0746949 255 13.8584 0.0322695 -0.0746538 255 13.9755 -1.17495 -0.0130103 187 13.9747 -1.08648 -0.012885 255 13.968 -1.04181 -0.0127279 255 13.9514 1.19961 -0.0126796 190 13.9568 -0.974836 -0.0124766 255 13.9444 1.08878 -0.0124271 255 13.9538 -0.930575 -0.0123824 255 13.9527 -0.886472 -0.0123198 255 13.9405 0.978409 -0.0122375 255 13.9487 -0.820227 -0.0121943 255 13.9273 -1.12675 -0.012192 234 13.9433 -0.775943 -0.0120687 255 13.9316 0.933831 -0.0120484 255 13.9324 0.889938 -0.0120167 255 13.9356 -0.731592 -0.0119116 255 13.9369 -0.665815 -0.0118806 255 13.901 1.12942 -0.0117976 255 13.9225 0.823477 -0.0117959 255 13.915 0.779186 -0.0116382 255 13.8919 1.04089 -0.0115453 250 13.9074 0.734957 -0.0114805 255 13.9077 0.691167 -0.0114488 255 13.9087 0.581756 -0.0113851 255 13.9144 -0.423881 -0.0113786 255 13.9106 -0.53315 -0.0113778 255 13.9084 0.537985 -0.0113534 255 13.9108 0.472437 -0.011353 255 13.9122 0.428733 -0.0113527 255 13.9135 0.385024 -0.0113524 255 13.9162 -0.270819 -0.0113481 255 13.9008 0.625191 -0.0112909 255 13.9139 -0.16146 -0.0112859 255 13.9113 -0.314439 -0.0112849 255 13.9096 -0.379991 -0.0112844 255 13.911 -0.22699 -0.011254 255 13.9083 -0.117686 -0.0111917 255 13.9066 -0.0739767 -0.0111605 255 13.8888 -0.0302145 -0.0108775 255 13.873 -0.618963 -0.0108419 255 13.8729 -0.57529 -0.0108108 255 13.861 -0.465748 -0.0105597 255 13.8612 0.318316 -0.0105019 226 13.8148 0.035186 -0.00971297 255 13.7883 0.121805 -0.00930424 255 13.7206 0.0782285 -0.00823348 255 14.0356 -1.16339 0.0788631 255 14.0299 -1.20731 0.0788817 168 14.0166 1.22174 0.078975 202 13.9646 1.17291 0.079486 255 13.9694 -1.11386 0.0795012 255 13.9717 -1.00369 0.0795551 255 13.9685 -1.04758 0.0795554 255 13.9668 -0.95926 0.0796277 255 13.952 1.10564 0.0796506 255 13.964 -0.848948 0.0797181 255 13.9578 -0.914615 0.0797369 255 13.9454 1.06103 0.0797421 255 13.9543 0.907493 0.0797612 255 13.9511 0.863268 0.0798162 255 13.957 -0.760563 0.0798269 255 13.953 0.797398 0.0798348 255 13.9414 0.950628 0.0798522 255 13.9347 1.01616 0.07987 255 13.9486 -0.804073 0.079882 255 13.9525 -0.694402 0.0798994 255 13.9454 0.753002 0.0799263 255 13.9449 0.599263 0.0800002 255 13.9426 -0.650029 0.0800085 255 13.9377 0.708661 0.0800178 255 13.9379 0.664772 0.0800363 255 13.9404 -0.452556 0.0800983 255 13.9364 -0.562028 0.0800991 255 13.9349 -0.496213 0.0801351 255 13.9304 0.51094 0.0801649 255 13.9267 0.554618 0.0801829 255 13.9286 0.445154 0.0802018 255 13.9186 -0.605143 0.0802454 255 13.9218 -0.40821 0.0802805 255 13.9215 -0.342555 0.0802982 255 13.9025 -0.189204 0.0804978 255 13.9005 -0.298387 0.0804986 255 13.8994 -0.254683 0.0805165 255 13.899 -0.145493 0.080534 255 13.8934 -0.101795 0.0805885 255 13.8856 -0.0581286 0.0806611 255 13.8797 0.00729191 0.0807154 255 13.8497 0.0507301 0.0809888 255 13.8294 0.0940661 0.0811709 255 14.0107 -1.20265 0.168288 185 13.9929 1.22273 0.168317 121 13.9645 -1.15442 0.168425 255 13.9599 -1.0878 0.168452 255 13.9572 -1.04349 0.168468 255 13.9444 1.13037 0.168471 255 13.9584 -0.999489 0.168473 255 13.9337 1.06345 0.168515 255 13.931 1.01924 0.168532 255 13.9492 -0.800759 0.168532 255 13.9169 1.1722 0.168536 219 13.9488 -0.734803 0.168543 255 13.9426 -0.844326 0.168543 255 13.9241 0.974797 0.168559 255 13.9285 0.909168 0.16856 255 13.9391 -0.690358 0.168575 255 13.9214 0.864807 0.168587 255 13.92 -0.886813 0.168599 255 13.92 0.820842 0.168599 255 13.9116 -0.952127 0.16861 255 13.9197 0.755032 0.16861 255 13.92 0.711189 0.168616 255 13.9315 -0.492639 0.168618 255 13.9252 -0.645795 0.168619 255 13.9252 -0.60195 0.168624 255 13.919 0.557795 0.168639 255 13.9219 -0.536078 0.16864 255 13.9102 0.666905 0.168649 255 13.921 -0.448464 0.16865 255 13.9189 -0.382745 0.168661 255 13.9161 -0.3389 0.168672 255 13.9002 0.62269 0.168682 255 13.9131 -0.29509 0.168682 255 13.9027 0.513429 0.168688 255 13.8983 0.469555 0.168705 255 13.9043 -0.229344 0.168709 255 13.8989 -0.185572 0.168725 255 13.8898 -0.0981488 0.168752 255 13.8683 0.40319 0.168793 255 13.8641 -0.032581 0.168823 255 13.8622 0.0109805 0.168828 255 13.8281 0.0544571 0.168921 238 13.7344 0.0363293 0.250729 255 13.8565 -0.00664586 0.251123 255 13.8661 0.102268 0.251155 251 13.8691 0.451041 0.251185 255 13.8764 -0.0502094 0.251188 255 13.881 -0.202862 0.251208 255 13.886 -0.115667 0.251221 255 13.8896 -0.159333 0.251234 255 13.8956 0.495664 0.251275 255 13.9053 0.605412 0.251319 255 13.9127 -0.400036 0.251326 255 13.914 0.540126 0.251339 255 13.9113 0.649479 0.251345 255 13.9171 -0.509577 0.251352 255 13.9132 0.693396 0.251358 255 13.9207 -0.465918 0.251358 255 13.9113 0.802879 0.25137 255 13.9158 0.759287 0.251377 255 13.9235 -0.553597 0.251378 255 13.9247 -0.663207 0.251398 255 13.9187 0.847203 0.251402 255 13.9297 -0.597661 0.251404 255 13.92 0.891192 0.251414 255 13.9325 -0.707436 0.251431 255 13.9216 0.957197 0.251433 255 13.9385 -0.817526 0.25147 255 13.9186 1.15492 0.251471 255 13.9305 1.00182 0.251472 255 13.9462 -0.752038 0.251483 255 13.9333 1.04604 0.251491 255 13.9499 -0.862145 0.251516 255 13.9471 -0.905963 0.251516 255 13.9382 1.1125 0.251523 255 13.9506 -0.972214 0.251543 255 13.9515 -1.01633 0.251556 255 13.9562 -1.06074 0.251582 255 13.9548 1.20215 0.2516 90 13.9608 -1.1052 0.251608 255 13.9634 -1.17163 0.251634 255 14.0354 -1.22194 0.25188 93 13.8333 0.0510379 0.332626 255 13.8821 -0.188751 0.333086 255 13.8823 0.552946 0.333172 255 13.8891 -0.34164 0.333178 255 13.8914 -0.407208 0.333215 255 13.8814 0.705852 0.333227 255 13.8971 0.247643 0.333229 255 13.8905 -0.494564 0.333234 255 13.8909 -0.538281 0.333253 255 13.9018 0.313249 0.333284 255 13.9044 0.160384 0.333285 255 13.9059 0.204088 0.333303 255 13.909 0.0948696 0.333322 255 13.9093 0.00748072 0.333322 255 13.8963 -0.647847 0.333345 255 13.9133 -0.036232 0.333359 255 13.9128 0.35721 0.333393 255 13.9166 -0.145554 0.333397 255 13.917 -0.254896 0.333416 255 13.9142 0.444741 0.333429 255 13.9156 0.401022 0.33343 255 13.921 -0.101872 0.333433 255 13.9027 -0.757642 0.333456 255 13.9221 -0.298753 0.333471 255 13.918 0.510517 0.333484 255 13.9063 -0.801671 0.333511 255 13.9185 0.598114 0.33352 255 13.928 -0.452159 0.333563 255 13.9242 -0.605365 0.333583 255 13.9235 0.664059 0.333593 255 13.914 0.904786 0.333628 255 13.9167 0.861066 0.333628 255 13.9194 0.817344 0.333629 255 13.9251 0.751849 0.333647 255 13.9038 1.1017 0.333664 255 13.915 0.948755 0.333664 255 13.9301 -0.693357 0.333675 255 13.9215 -0.912344 0.333713 255 13.9171 1.05876 0.333755 255 13.9316 -0.847107 0.333768 255 13.9224 1.01517 0.333774 255 13.9485 -0.958187 0.333988 255 13.9494 -1.0023 0.334025 255 13.9383 1.17048 0.334029 255 13.9741 -1.04826 0.334282 255 13.9794 -1.15916 0.33441 247 13.9909 -1.11589 0.334483 255 14.0302 1.22241 0.334908 195 14.0334 -1.20816 0.334942 91 13.8779 0.224744 0.425064 255 13.8811 -0.124092 0.425097 255 13.8836 -0.0586827 0.425129 255 13.8845 0.181236 0.425159 255 13.893 0.137713 0.425286 255 13.8957 0.0285979 0.425318 255 13.8975 0.0722744 0.425349 255 13.8987 0.290642 0.425411 255 13.9041 -0.211627 0.425478 255 13.9037 0.334464 0.425506 255 13.9097 -0.0150456 0.42554 255 13.9031 0.487465 0.425568 255 13.9066 0.443854 0.4256 255 13.9105 0.378372 0.425632 255 13.9029 0.640596 0.425662 255 13.916 -0.321119 0.4257 255 13.9098 0.575237 0.425726 255 13.9115 0.531538 0.425726 255 13.9207 -0.168109 0.42573 255 13.9136 -0.474175 0.425733 255 13.9068 0.684574 0.425757 255 13.9209 -0.277471 0.425763 255 13.9189 -0.364933 0.425763 255 13.919 -0.430578 0.425795 255 13.9203 -0.561971 0.425891 255 13.915 0.794593 0.425977 255 13.928 -0.518449 0.425986 255 13.9117 0.882139 0.426009 255 13.9184 0.838681 0.426072 255 13.9246 0.729341 0.426073 255 13.8986 1.1447 0.426102 255 13.9169 0.92639 0.426135 255 13.9335 -0.628254 0.426145 255 13.9375 -0.672302 0.42624 255 13.9353 -0.716084 0.42624 255 13.9338 -0.781853 0.426272 255 13.9243 0.992839 0.426324 255 13.9352 -0.825852 0.426336 255 13.9231 1.03673 0.426356 255 13.9346 -0.869748 0.426368 255 13.9218 1.08062 0.426387 255 13.9209 1.19063 0.426513 86 13.9417 -0.914156 0.426526 255 13.9393 -0.979981 0.426559 255 13.9401 -1.02405 0.426622 255 13.9448 -1.06844 0.426749 255 13.9938 -1.1827 0.427667 236 14.0014 -1.13905 0.42773 255 13.8783 0.0580424 0.495601 234 13.8821 0.254329 0.495726 237 13.8828 0.210716 0.495726 236 13.8861 0.101686 0.495769 238 13.8897 0.145344 0.495852 243 13.8889 -0.203751 0.495854 233 13.8892 0.298096 0.495893 238 13.8921 -0.0946796 0.495895 238 13.8944 0.014429 0.495937 232 13.8943 -0.051047 0.495937 225 13.8914 -0.291104 0.495939 229 13.8891 0.450917 0.495976 229 13.8917 0.363641 0.495976 237 13.8942 -0.247501 0.49598 233 13.8978 -0.138393 0.496021 234 13.8964 -0.334899 0.496064 232 13.8947 -0.400381 0.496065 227 13.8911 0.560218 0.4961 231 13.8928 0.516575 0.496101 227 13.8985 0.407501 0.496143 233 13.8933 0.647763 0.496225 231 13.8973 0.604187 0.496268 228 13.9019 -0.488045 0.496275 228 13.9053 -0.444436 0.496316 231 13.9034 -0.553716 0.496359 223 13.8954 0.801033 0.496434 225 13.8978 0.757379 0.496434 230 13.9001 0.713716 0.496434 228 13.9056 -0.597572 0.496443 226 13.8974 0.86687 0.496559 225 13.9085 -0.707187 0.496611 223 13.9136 -0.641734 0.496652 225 13.9082 -0.75099 0.496653 227 13.9046 0.911164 0.496768 232 13.9112 -0.838859 0.496821 223 13.9157 -0.795269 0.496863 222 13.913 -0.904804 0.496947 217 13.9117 0.955506 0.496977 235 13.913 1.02148 0.497102 231 13.9117 1.06533 0.497144 228 13.9201 -0.949207 0.497157 218 13.933 -0.994102 0.497492 221 13.9341 -1.06021 0.497618 229 13.9507 -1.1056 0.498037 224 13.9611 -1.1506 0.49833 207 13.9661 1.11353 0.498357 237 14.0153 -1.2217 0.499586 142 14.0223 1.16224 0.499612 47 13.8258 -0.165642 0.563691 127 13.827 0.225324 0.56374 150 13.8301 -0.36127 0.5639 138 13.8388 -0.0136014 0.564001 153 13.8382 0.269018 0.564051 111 13.8406 0.0733643 0.564052 134 13.8401 -0.27451 0.564107 127 13.8429 -0.231059 0.564158 96 13.8501 0.138705 0.564311 99 13.8477 0.378043 0.564362 109 13.8528 0.0299311 0.564364 103 13.8508 0.334589 0.564414 107 13.8586 -0.0788912 0.56452 104 13.8508 -0.470649 0.564523 130 13.8596 0.182365 0.564571 98 13.8603 -0.122443 0.564573 106 13.8592 -0.318411 0.564626 99 13.8562 -0.427249 0.564627 115 13.8613 -0.514583 0.564835 158 13.8647 -0.580136 0.564991 191 13.8702 0.487751 0.565036 151 13.8766 0.531644 0.565243 250 13.8804 0.422643 0.565244 102 13.8867 -0.624724 0.565614 211 13.8907 -0.668624 0.56577 255 13.909 0.620494 0.566177 255 13.9119 0.686338 0.566332 255 13.9093 0.773849 0.566383 255 13.9116 0.730148 0.566384 255 13.9188 0.577141 0.566384 255 13.9095 0.839634 0.566487 255 13.9173 0.993838 0.566953 255 13.9093 1.12513 0.567004 255 13.9287 0.884763 0.567057 255 13.9279 0.928654 0.567109 255 13.9369 -0.78051 0.56712 255 13.9413 -0.736824 0.567172 255 13.9364 -0.824405 0.567172 255 13.9281 1.03862 0.567316 255 13.9417 -0.868665 0.56738 255 13.9347 1.08317 0.567575 255 13.9455 -0.934874 0.567588 255 13.9445 -0.978817 0.567641 255 13.9453 -1.0229 0.567745 255 13.9523 -1.08952 0.568057 255 13.9627 -1.13445 0.56842 255 13.995 -1.18127 0.569355 253 14.0274 1.20147 0.570221 57 13.8586 -0.448289 0.650426 103 13.8677 0.0525884 0.650487 98 13.8678 0.00901757 0.650487 138 13.8647 -0.295925 0.650489 115 13.864 0.401129 0.650549 113 13.8698 -0.0345557 0.650551 93 13.8695 -0.252449 0.650617 112 13.8703 0.314086 0.650678 126 13.8651 -0.492121 0.650683 94 13.86 0.662639 0.65074 105 13.8749 0.161581 0.650743 137 13.8699 -0.405056 0.650747 105 13.87 0.466707 0.650806 86 13.8763 0.205199 0.650807 99 13.8775 0.0962027 0.650808 94 13.8771 -0.143578 0.650809 122 13.8705 0.510345 0.65087 115 13.8708 0.553991 0.650934 106 13.8806 -0.187245 0.650938 83 13.8855 -0.100056 0.651066 94 13.8755 -0.536166 0.651069 62 13.8856 0.248949 0.651129 103 13.8738 0.706966 0.651254 107 13.879 0.59798 0.651255 106 13.8768 -0.64541 0.651263 60 13.8699 0.816022 0.651318 98 13.8808 -0.601904 0.651327 61 13.8932 0.35823 0.651449 90 13.8813 -0.754945 0.651585 59 13.8772 0.860188 0.651639 99 13.8835 0.751178 0.65164 99 13.8907 -0.689822 0.651778 60 13.9057 -0.340584 0.65184 82 13.8802 1.10137 0.652281 255 13.8889 -1.04021 0.652423 44 13.9004 0.905418 0.652475 71 13.8898 -1.10614 0.652617 252 13.9068 1.01556 0.652925 196 13.9208 -0.801038 0.652936 44 13.9151 -0.954331 0.653066 65 13.9242 -0.845139 0.653129 44 13.9047 1.16923 0.653245 92 13.932 -0.999507 0.653709 57 13.9294 1.06117 0.65376 255 13.9454 -0.890449 0.653901 44 13.9939 -1.15888 0.65609 255 14.0623 1.22667 0.658454 45 14.0658 -1.20948 0.658534 109 13.8844 0.29688 0.741493 86 13.8894 0.340667 0.741725 77 13.8943 0.187954 0.741803 85 13.8955 -0.0521438 0.741805 91 13.8957 0.231638 0.74188 87 13.8968 0.14433 0.741881 81 13.8974 0.0788387 0.741881 84 13.8923 0.449941 0.741956 72 13.8995 0.0351834 0.741959 93 13.8983 0.384592 0.742111 79 13.8968 0.493804 0.742188 76 13.8925 0.646675 0.742264 71 13.8992 0.537625 0.742342 72 13.9086 -0.161406 0.742347 87 13.9089 -0.270679 0.742425 77 13.907 -0.358061 0.742425 80 13.9121 -0.205149 0.742502 78 13.9156 -0.0084606 0.742578 62 13.9098 -0.401854 0.742581 73 13.914 -0.314496 0.742657 85 13.9097 -0.467464 0.742658 70 13.9102 -0.511227 0.742736 67 13.9044 0.691041 0.742806 43 13.9062 0.734935 0.74296 40 13.9291 -0.117844 0.74312 57 13.9165 0.801284 0.743501 40 13.9285 -0.555688 0.74351 40 13.9257 -0.621321 0.74351 40 13.9159 0.845122 0.743578 67 13.9314 0.582769 0.743657 74 13.9172 0.889109 0.743733 70 13.9297 -0.665338 0.743743 40 13.9535 -0.710366 0.744749 40 13.9312 -1.0608 0.744751 40 13.95 -0.90806 0.74506 41 13.9619 -0.776752 0.745214 40 13.9496 -0.974058 0.745215 40 13.9687 -0.865189 0.745678 40 13.9734 -0.821414 0.745755 40 13.9624 1.04636 0.745898 166 13.9763 -1.02 0.746376 40 13.9677 1.15716 0.746439 227 13.973 1.09133 0.74644 249 13.9798 -1.13069 0.746841 227 14.0639 -1.1818 0.750245 190 14.0754 1.21084 0.750772 40 14.2054 -1.23838 0.755893 59 13.8634 0.19639 0.804893 127 13.8624 0.348861 0.804979 165 13.8667 0.240001 0.805066 171 13.8745 0.0875468 0.805327 171 13.8786 -0.0650434 0.805501 170 13.8807 0.0439689 0.805587 127 13.8807 0.0003574 0.805588 138 13.879 -0.217665 0.805589 166 13.8798 0.28382 0.805672 135 13.874 0.545462 0.805757 156 13.8819 0.436598 0.805931 157 13.8883 -0.108738 0.805935 123 13.8709 0.74185 0.806016 152 13.8763 0.632886 0.806017 156 13.8939 0.153113 0.806193 130 13.8905 -0.414362 0.806284 123 13.8765 0.785857 0.806363 141 13.8963 -0.261647 0.806369 129 13.8912 -0.458067 0.806371 147 13.8832 0.698756 0.80645 127 13.8974 -0.305349 0.806456 170 13.8972 0.393357 0.806538 132 13.8983 -0.349061 0.806543 122 13.8779 0.895324 0.806709 135 13.9059 -0.152597 0.806715 133 13.8977 -0.502009 0.806717 153 13.8846 0.851948 0.806882 135 13.9016 0.502759 0.806884 127 13.9002 0.590177 0.80697 124 13.8993 -0.611419 0.806978 110 13.894 -0.720563 0.806979 135 13.8755 -1.06981 0.807155 82 13.9053 -0.655473 0.807325 148 13.8997 -0.764663 0.807326 127 13.8972 -0.808326 0.807326 96 13.8904 -0.917448 0.807327 151 13.9009 0.940621 0.807835 109 13.9023 -1.00604 0.808108 95 13.9311 -0.569029 0.808278 117 13.9114 -0.962782 0.808367 127 13.9079 -1.11634 0.808715 255 13.9161 1.13942 0.809134 255 13.925 1.05211 0.809221 255 13.9405 -0.85488 0.80932 82 13.9316 1.09662 0.809654 255 14.0318 -1.1709 0.814262 255 14.0778 1.21917 0.816413 83 13.9216 0.359002 0.899317 85 13.9262 0.0527865 0.899319 147 13.9267 0.205939 0.899418 101 13.9282 0.00904114 0.899419 82 13.9299 -0.100361 0.89952 95 13.9402 -0.0347231 0.900018 84 13.9155 0.862644 0.900113 98 13.9219 0.75332 0.900113 128 13.9419 -0.253747 0.90022 89 13.9212 -0.800908 0.900223 75 13.9222 0.819168 0.900313 94 13.9404 0.403349 0.900315 141 13.944 0.250054 0.900316 95 13.947 -0.297662 0.900519 136 13.9363 0.666333 0.900613 93 13.951 -0.188137 0.900619 101 13.948 -0.341522 0.90062 85 13.9489 -0.38539 0.90072 83 13.9451 0.557025 0.900814 83 13.9526 0.316002 0.900815 99 13.9401 0.710425 0.900913 84 13.9577 0.118743 0.900916 94 13.9575 -0.144359 0.900918 99 13.9509 -0.45124 0.90092 118 13.9307 0.907556 0.901011 93 13.9463 0.622922 0.901013 130 13.9508 0.51337 0.901014 97 13.9185 1.10456 0.90111 245 13.9563 0.469677 0.901214 91 13.9386 -0.845811 0.901222 56 13.9598 -0.539327 0.90152 123 13.9402 0.97419 0.90171 67 13.9732 0.162807 0.901715 101 13.9611 -0.649216 0.90182 120 13.9424 -0.999994 0.901923 51 13.965 -0.693359 0.90212 77 13.9667 -0.737431 0.90232 98 13.9598 -0.891079 0.902421 58 13.946 -1.11039 0.902523 245 13.981 -0.606098 0.902719 81 13.9874 -0.496341 0.902818 94 13.9654 -0.957517 0.902921 56 13.9617 1.06394 0.903108 255 13.9589 1.17408 0.903407 37 14.0288 -1.05034 0.906417 37 14.058 -1.16354 0.908315 246 14.1382 1.23424 0.912594 38 14.1717 -1.21758 0.914208 87 +unknow 0.983229 1 0 265 13.0342 25.1649 -2.10137 85 12.7335 25.2604 -2.09714 85 12.8065 25.2078 -2.096 85 12.9178 25.133 -2.0947 85 12.6167 25.2253 -2.0903 100 12.4783 25.2452 -2.08672 102 11.9314 25.4333 -2.08118 126 12.0088 25.3903 -2.0807 127 11.1403 25.7158 -2.07565 155 10.9754 25.778 -2.07499 164 11.2558 25.6503 -2.07451 150 10.8446 25.8073 -2.07304 159 11.0367 25.6976 -2.07093 147 10.7481 25.8045 -2.06979 158 10.6587 25.8178 -2.06799 148 10.5346 25.8622 -2.06751 152 10.4399 25.8619 -2.06458 149 10.2765 25.9251 -2.06441 211 10.3535 25.8816 -2.06344 129 10.1383 25.9324 -2.06083 135 9.53555 26.0667 -2.05367 161 11.9429 25.0464 -2.05303 135 9.44954 26.0853 -2.05269 159 9.15363 26.1631 -2.05057 151 9.23313 26.1267 -2.04992 155 9.06813 26.1823 -2.04976 155 9.35413 26.0773 -2.04943 145 8.97488 26.1786 -2.04699 153 8.85142 26.2206 -2.04699 154 8.76144 26.2256 -2.04504 158 8.67526 26.2417 -2.04406 161 12.1405 24.756 -2.03871 100 12.0252 24.7169 -2.03171 104 11.9276 24.7133 -2.02797 122 9.56046 24.6793 -1.94837 120 9.46793 24.6701 -1.94495 164 9.1961 24.7727 -1.94495 109 9.34172 24.6883 -1.94267 195 9.23759 24.6466 -1.93649 111 12.5487 25.0345 -1.84777 220 12.2046 24.7356 -1.81682 255 12.0642 24.7445 -1.81286 235 11.9577 24.723 -1.80801 230 11.8679 24.7353 -1.80596 244 11.6265 24.7285 -1.79789 243 11.5327 24.7306 -1.7951 225 8.48407 25.8637 -1.7901 190 10.8694 24.7136 -1.77383 249 8.4885 25.606 -1.7722 177 10.7717 24.7019 -1.77016 251 10.6386 24.7139 -1.76708 249 10.5484 24.7179 -1.76473 244 8.52759 25.4563 -1.76266 190 10.4481 24.6977 -1.76048 255 10.3131 24.7025 -1.75695 230 10.2194 24.6961 -1.75387 255 10.1296 24.6985 -1.75152 233 10.0041 24.7238 -1.74976 235 9.90406 24.6996 -1.74536 246 8.56563 25.1761 -1.74403 162 9.79981 24.6639 -1.74008 255 9.58121 24.6769 -1.73509 255 9.50364 24.7069 -1.73509 192 8.59461 25.0039 -1.73274 146 9.40176 24.6733 -1.7301 255 9.27906 24.7005 -1.72878 196 8.63637 24.8712 -1.72452 212 9.1777 24.666 -1.72379 212 8.81602 24.7594 -1.72115 197 8.96936 24.6979 -1.72071 255 8.69526 24.7894 -1.72027 226 8.88022 24.6941 -1.71822 255 12.8912 24.8595 -1.69017 255 12.7984 24.8715 -1.688 242 12.6668 24.8067 -1.68001 182 12.5031 24.7734 -1.67296 211 12.4109 24.784 -1.67079 229 12.1933 24.7362 -1.6613 147 12.0731 24.7862 -1.66076 190 11.9701 24.7718 -1.65683 110 11.8543 24.7301 -1.65087 192 11.6115 24.7195 -1.64314 241 11.5178 24.7214 -1.64057 175 8.48914 25.6365 -1.62239 222 10.8545 24.7019 -1.62078 224 10.7569 24.6901 -1.61739 226 10.6224 24.6984 -1.61428 231 10.5244 24.6839 -1.61075 238 10.4305 24.6782 -1.60791 230 8.49325 25.3807 -1.606 255 10.3019 24.6976 -1.60574 236 10.2075 24.6893 -1.60276 239 10.1155 24.6861 -1.60018 241 9.76555 24.8266 -1.60018 101 9.98195 24.6909 -1.59706 236 9.54242 24.8299 -1.59489 112 9.88728 24.6796 -1.59395 246 9.45871 24.8448 -1.59381 149 9.79943 24.6845 -1.59205 221 8.5404 25.1268 -1.59069 167 9.57287 24.677 -1.58595 111 8.58117 24.9885 -1.58269 219 9.26529 24.6854 -1.57904 181 8.63876 24.901 -1.57836 235 9.09281 24.6963 -1.57565 142 8.73881 24.8111 -1.57483 234 8.80671 24.7553 -1.5728 244 8.88109 24.7181 -1.57212 255 8.94308 24.647 -1.56901 255 12.8123 24.8127 -1.52774 203 12.6923 24.7711 -1.52202 227 12.3204 24.9069 -1.51916 146 12.5754 24.7344 -1.51667 230 12.4264 24.7292 -1.5122 243 12.3165 24.7038 -1.50772 253 12.1206 24.6983 -1.50201 132 11.9735 24.6924 -1.49765 125 11.8724 24.6813 -1.4943 99 11.7828 24.6933 -1.49256 125 11.6356 24.6835 -1.48808 249 11.5427 24.6874 -1.48584 247 8.50788 25.8485 -1.48334 118 10.8784 24.6669 -1.46757 221 8.5069 25.5755 -1.46718 134 10.7857 24.6662 -1.46521 248 10.6914 24.6616 -1.4626 247 10.553 24.6603 -1.45912 247 9.64964 25.0105 -1.45812 213 8.57223 25.3726 -1.45649 98 10.4575 24.6511 -1.45626 255 10.3676 24.6544 -1.45427 252 10.2345 24.6624 -1.45153 246 10.1387 24.6502 -1.44855 251 10.0446 24.6413 -1.44581 255 9.30058 24.9188 -1.44506 135 9.95062 24.632 -1.44308 252 9.8196 24.6415 -1.44059 249 9.46457 24.763 -1.4396 113 8.56264 25.0849 -1.43934 87 9.72597 24.6314 -1.43786 255 9.64709 24.6581 -1.43761 188 8.71904 24.902 -1.43176 215 9.34066 24.6713 -1.43152 99 8.59834 24.9334 -1.43114 144 8.76052 24.771 -1.42493 199 9.10705 24.6372 -1.42443 255 9.02617 24.6563 -1.42381 255 8.90853 24.6948 -1.42356 255 8.82886 24.7171 -1.42319 243 12.8251 24.8864 -1.3655 194 12.7061 24.8465 -1.36044 199 12.5892 24.8097 -1.35561 215 12.487 24.8009 -1.35257 217 12.3406 24.8005 -1.34886 221 12.2256 24.7639 -1.34414 225 12.1258 24.7573 -1.34133 236 11.9839 24.762 -1.33807 239 11.8836 24.7527 -1.33515 240 11.7886 24.7539 -1.3329 245 11.654 24.7712 -1.33054 244 11.5576 24.7678 -1.32806 213 10.8898 24.7417 -1.3112 240 10.7977 24.7429 -1.30917 245 8.61099 25.5482 -1.30714 149 10.7025 24.7363 -1.3067 248 10.5678 24.7442 -1.30411 249 10.4737 24.7387 -1.30175 249 10.3767 24.7254 -1.29894 248 10.2448 24.7371 -1.29669 247 8.62574 25.3282 -1.29567 190 10.1557 24.7415 -1.295 245 10.0584 24.7251 -1.29208 245 9.97022 24.7307 -1.29051 245 9.83812 24.7384 -1.28814 241 9.74575 24.732 -1.2859 243 8.64826 25.1347 -1.28578 177 9.65351 24.7253 -1.28365 240 9.5233 24.7351 -1.28151 235 8.73377 24.9994 -1.28016 239 9.43205 24.7294 -1.27937 230 8.801 24.9398 -1.27825 151 9.34587 24.7365 -1.27802 229 9.22503 24.7691 -1.27735 240 8.86526 24.8725 -1.27589 114 9.13752 24.7717 -1.27577 255 9.03301 24.7271 -1.27139 118 12.7662 24.8228 -1.20373 199 12.6508 24.7899 -1.19958 212 12.5485 24.7814 -1.19685 211 12.4409 24.7618 -1.19351 217 12.3 24.7719 -1.19077 216 12.193 24.7513 -1.18743 218 12.0879 24.7339 -1.1843 218 8.92966 26.0285 -1.18367 125 11.9512 24.7492 -1.18197 217 11.8492 24.7362 -1.17913 210 11.7551 24.7391 -1.17721 221 11.6112 24.7364 -1.17397 225 8.94283 25.6732 -1.16687 134 10.9825 24.6965 -1.15889 165 10.8523 24.7169 -1.15717 218 8.94966 25.4359 -1.15564 133 10.7554 24.7069 -1.15474 215 10.6643 24.7094 -1.15302 218 10.5273 24.7116 -1.15039 217 8.98727 25.2891 -1.14927 135 10.434 24.7078 -1.14837 216 10.3479 24.7202 -1.14725 213 9.07711 25.1657 -1.14492 130 10.2114 24.7207 -1.14462 213 10.1238 24.7286 -1.14331 208 10.031 24.7233 -1.14128 212 9.13078 25.0676 -1.14118 142 9.94134 24.7251 -1.13966 217 9.80996 24.7345 -1.13764 211 9.72268 24.7411 -1.13632 204 9.63837 24.7547 -1.13541 199 9.16593 24.9208 -1.1348 172 9.50797 24.7645 -1.13349 200 9.4223 24.7737 -1.13238 193 9.34159 24.7957 -1.13197 195 9.21907 24.8245 -1.13116 234 12.7814 24.943 -1.0495 119 9.84009 26.2323 -1.04903 188 12.6831 24.9439 -1.04752 138 12.558 24.8908 -1.04285 148 12.4413 24.8533 -1.03899 157 12.3073 24.8776 -1.03728 167 12.2036 24.8641 -1.03468 179 11.9958 24.9339 -1.03342 149 12.1018 24.8538 -1.03225 200 11.8685 24.8687 -1.0283 120 11.0129 24.8598 -1.01187 100 9.8145 25.3119 -1.00998 100 10.8709 24.8547 -1.00909 100 9.83513 25.1301 -1.00271 99 9.87376 24.9969 -0.99777 99 10.0414 24.8481 -0.994359 255 9.95292 24.8536 -0.993102 98 10.1936 24.6651 -0.989333 230 10.0765 24.711 -0.989242 229 10.0615 26.1447 -0.870668 147 12.0036 25.0107 -0.860201 106 12.157 24.9276 -0.859894 165 10.0276 25.815 -0.858341 136 12.0508 24.9081 -0.857427 255 10.0654 25.5555 -0.849557 105 10.0687 25.3307 -0.841544 105 10.9488 24.8865 -0.838852 104 10.0915 25.158 -0.835689 104 10.1534 24.9714 -0.82991 104 10.2135 24.895 -0.828061 103 10.2894 24.8573 -0.827831 213 10.3333 25.8178 -0.688138 91 11.7502 25.0346 -0.683181 125 10.3708 25.5613 -0.680916 134 10.3778 25.3491 -0.674662 124 11.0806 25.0236 -0.673892 167 10.9795 25.007 -0.672086 189 10.8881 25.0121 -0.671054 193 10.4056 25.1907 -0.670277 128 10.7905 25.0021 -0.669506 195 10.6593 25.0214 -0.668409 194 10.4972 25.0768 -0.668021 135 10.5589 25.0032 -0.666603 208 +unknow 0.938834 1 0 1751 8.65616 -0.91239 -1.73077 115 9.65052 -0.926275 -1.72878 139 8.64732 -0.883961 -1.72824 103 9.18924 -0.901535 -1.72388 127 8.14848 -0.807712 -1.7238 140 8.62866 -0.854608 -1.7236 126 8.13431 -0.922611 -1.72335 143 8.13523 -0.896844 -1.72291 139 8.1362 -0.832346 -1.72157 135 8.13219 -0.870677 -1.72157 142 8.14527 0.693833 -1.72069 117 7.4015 -0.936342 -1.72009 105 7.43162 -0.633204 -1.71961 107 7.40197 -0.900998 -1.71912 108 8.1547 -0.447549 -1.7189 115 7.42777 -0.609398 -1.71815 107 7.40363 -0.854041 -1.71814 143 8.78613 -0.924303 -1.71805 113 8.15345 -0.396126 -1.71801 117 8.12574 -0.779768 -1.71801 142 7.40818 -0.795667 -1.71766 141 8.12357 0.782 -1.71757 119 8.07579 1.16352 -1.71713 122 8.15065 0.372752 -1.71712 116 8.55118 1.23291 -1.71686 118 7.39513 -0.876631 -1.71669 111 8.13677 0.577318 -1.71668 122 8.14105 0.513394 -1.71668 122 8.15623 -0.12693 -1.71667 118 8.14276 -0.485423 -1.71667 142 8.55307 1.20577 -1.71644 116 8.56228 1.13856 -1.71644 115 8.14852 -0.331784 -1.71623 128 8.78338 -0.854355 -1.71599 123 7.41096 -0.690167 -1.71571 107 7.39793 -0.81811 -1.71571 111 8.11975 0.717285 -1.71534 147 8.14165 0.397951 -1.71534 152 8.14562 -0.306049 -1.71533 130 7.40683 -0.713266 -1.71523 107 7.40099 -0.771417 -1.71523 103 8.11434 0.755354 -1.7149 142 8.13854 -0.421077 -1.71489 146 8.51677 1.39232 -1.71476 132 8.12882 0.551062 -1.71445 156 8.13907 -0.369851 -1.71444 125 8.54897 1.16416 -1.71433 118 8.13244 0.461533 -1.714 118 8.5277 1.29801 -1.71391 120 8.53372 1.25782 -1.71391 120 7.41224 -0.584748 -1.71377 145 7.39759 -0.747598 -1.71377 112 8.129 0.486956 -1.71356 160 8.14134 -0.190708 -1.71355 123 7.41629 -0.503087 -1.71329 122 7.40343 -0.666046 -1.71328 111 8.0673 1.09764 -1.71312 117 8.07071 1.07229 -1.71312 143 8.11936 0.601675 -1.71311 164 8.13063 0.422989 -1.71311 143 8.1358 0.308006 -1.71311 134 8.76702 -0.880614 -1.71309 114 7.41943 -0.421409 -1.7128 116 8.13608 -0.241755 -1.71266 123 8.13485 -0.280092 -1.71266 151 7.41396 -0.479549 -1.71231 107 8.51164 1.35036 -1.71222 126 8.1105 0.665095 -1.71222 122 7.69739 -0.913485 -1.7119 90 7.37342 0.894782 -1.71184 111 7.42425 0.220233 -1.71183 118 7.42735 -0.0480788 -1.71183 122 8.05625 1.13481 -1.71178 147 8.13515 -0.101108 -1.71177 148 8.1329 -0.216102 -1.71177 156 7.70503 -0.82858 -1.71143 103 7.35494 1.02178 -1.71135 114 7.38089 0.813433 -1.71135 118 7.39699 0.650938 -1.71135 118 7.40545 0.546306 -1.71135 119 7.40951 0.488124 -1.71135 123 7.41443 0.406625 -1.71135 115 7.41684 0.36003 -1.71135 115 7.41845 0.325074 -1.71135 126 7.40693 -0.525861 -1.71134 110 7.40524 -0.549128 -1.71134 103 9.51691 1.29453 -1.71132 111 8.10672 0.639133 -1.71088 106 8.12451 0.345896 -1.71088 135 8.13045 -0.15216 -1.71088 156 7.42303 -0.0947093 -1.71086 119 7.42205 -0.153006 -1.71086 123 7.41476 -0.362772 -1.71086 122 8.50811 1.32244 -1.71054 125 7.69443 -0.88861 -1.7105 92 8.12588 0.256475 -1.71044 132 7.36188 0.940336 -1.71038 106 7.38078 0.778224 -1.71038 119 7.38889 0.697024 -1.71038 119 7.71239 -0.694786 -1.71003 99 7.71017 -0.719012 -1.71003 100 7.7067 -0.755337 -1.71003 103 8.12569 0.192595 -1.70999 132 8.12626 0.167066 -1.70999 126 8.12696 0.128771 -1.70999 125 8.12797 -0.0116662 -1.70999 135 8.12789 -0.0372007 -1.70999 140 7.36985 0.859103 -1.70989 114 7.38359 0.731639 -1.70989 115 7.38911 0.673623 -1.70989 115 7.40986 0.38301 -1.70989 111 7.41453 0.27822 -1.70989 124 7.41576 0.243279 -1.70989 119 7.40909 -0.397515 -1.70988 110 7.40645 -0.444059 -1.70988 119 9.50502 1.32331 -1.7098 112 7.69986 -0.803536 -1.70957 99 8.12114 0.281855 -1.70954 133 7.41579 0.17332 -1.7094 123 7.41652 0.138372 -1.7094 100 7.41759 0.0568164 -1.7094 120 7.69138 -0.863762 -1.7091 106 9.49693 1.3526 -1.70904 115 7.12373 -0.617262 -1.70903 93 7.1143 -0.717907 -1.70903 98 7.33367 1.10111 -1.70892 115 7.35312 0.962683 -1.70892 119 7.39403 0.568789 -1.70892 115 7.41139 -0.257672 -1.70891 123 7.41055 -0.280955 -1.70891 127 7.71375 -0.609464 -1.70863 105 7.34017 1.0432 -1.70843 122 7.3571 0.916216 -1.70843 110 7.36673 0.835271 -1.70843 114 7.39027 0.591852 -1.70843 114 7.41133 0.196501 -1.70843 123 7.41386 0.0334819 -1.70843 122 7.41392 0.0101904 -1.70843 107 7.40617 -0.339066 -1.70842 127 8.11725 0.217887 -1.70821 128 8.12016 0.0138305 -1.7082 129 7.71369 -0.585074 -1.70817 88 7.10213 -0.795643 -1.70802 88 7.34466 0.996789 -1.70795 114 7.37354 0.754014 -1.70795 106 7.40587 0.301168 -1.70794 123 7.41142 0.091678 -1.70794 119 7.4099 -0.176087 -1.70794 127 7.70792 -0.633363 -1.7077 104 9.48487 1.38128 -1.70753 122 7.32443 1.12324 -1.70746 115 7.38354 0.626328 -1.70746 115 7.39552 0.463819 -1.70746 126 7.40332 -0.315646 -1.70745 119 8.11611 0.0520582 -1.70731 125 8.11593 -0.0754308 -1.70731 142 8.08271 -0.737365 -1.70731 153 7.11096 -0.672436 -1.70701 93 7.30005 1.26076 -1.70698 123 7.31347 1.18041 -1.70698 123 7.32942 1.07691 -1.70698 111 7.39501 0.440462 -1.70697 122 7.40698 -0.129472 -1.70697 126 7.40441 -0.234169 -1.70697 127 8.11396 0.0775307 -1.70687 124 7.69075 -0.778129 -1.70676 100 7.11783 -0.571681 -1.70651 94 7.10689 -0.694577 -1.70651 116 7.30781 1.20306 -1.70649 119 7.40613 -0.0247484 -1.70648 115 7.11851 -0.537979 -1.70601 96 7.30208 1.22569 -1.706 119 7.70666 -0.547995 -1.70583 93 7.6971 -0.668979 -1.70583 103 7.28625 1.30556 -1.70552 118 7.31139 1.1565 -1.70552 111 7.38472 0.509713 -1.70551 126 7.4014 0.114777 -1.70551 138 7.40195 -0.0712581 -1.70551 122 9.06033 1.21348 -1.70523 120 7.08677 -0.827713 -1.705 127 7.67717 0.833041 -1.70491 92 7.69955 0.591484 -1.70491 94 7.7209 0.143242 -1.7049 103 7.08227 0.849313 -1.70451 96 7.10828 -0.593367 -1.7045 121 7.09113 -0.771812 -1.7045 129 7.08221 -0.849735 -1.7045 88 7.07951 -0.871981 -1.7045 118 7.07673 -0.894217 -1.7045 89 9.03839 1.34088 -1.70444 103 9.04256 1.31248 -1.70444 127 9.06206 1.17028 -1.70444 78 7.70782 -0.438642 -1.70443 93 7.70566 -0.474959 -1.70443 92 7.70413 -0.499165 -1.70443 99 7.28459 1.28163 -1.70406 115 7.39347 -0.210616 -1.70405 123 9.05064 1.24116 -1.70404 119 7.12417 -0.313746 -1.704 110 7.11902 -0.414427 -1.704 99 7.11627 -0.459149 -1.704 98 7.11403 -0.492679 -1.704 95 7.07052 -0.927297 -1.70399 117 7.66653 0.892878 -1.70398 90 7.71498 0.228025 -1.70397 115 8.10003 0.102804 -1.70375 125 7.64803 1.02495 -1.70351 93 7.65121 1.00092 -1.70351 90 7.66736 0.868574 -1.70351 94 7.67645 0.784217 -1.70351 99 7.69184 0.615224 -1.70351 95 7.05961 0.993228 -1.7035 90 7.08967 -0.74911 -1.70349 87 7.68267 0.699592 -1.70304 99 7.68483 0.675453 -1.70304 99 7.70156 0.44583 -1.70304 101 7.71033 0.252148 -1.70304 85 7.71365 -0.11134 -1.70303 100 7.06674 0.926403 -1.703 97 7.08042 0.815288 -1.703 91 7.1193 0.335551 -1.703 98 7.11642 -0.391833 -1.70299 100 7.09863 -0.637477 -1.70299 123 8.05707 0.800947 -1.70286 145 6.88309 -0.64514 -1.70281 119 7.26858 1.33773 -1.7026 127 7.6785 0.723548 -1.70257 101 7.68599 0.639076 -1.70257 97 7.70515 0.336832 -1.70257 100 7.70617 0.312624 -1.70257 99 7.71069 0.167319 -1.70257 99 7.71159 0.118868 -1.70257 104 7.71214 -0.0749637 -1.70257 98 7.11051 0.45839 -1.70249 94 7.11325 0.4137 -1.70249 98 7.11189 -0.436414 -1.70249 103 9.03893 1.26852 -1.70245 121 7.63733 1.0602 -1.70211 92 7.64853 0.97616 -1.70211 93 7.65596 0.916059 -1.70211 93 7.66814 0.807736 -1.70211 94 7.71012 0.0825121 -1.7021 106 7.69945 -0.41387 -1.7021 94 7.69283 -0.522674 -1.7021 94 9.0225 1.36754 -1.70205 132 7.08394 0.74813 -1.70199 94 7.11785 0.279485 -1.70199 100 7.12161 0.156465 -1.70199 101 7.12329 -0.0225544 -1.70199 99 7.12206 -0.134437 -1.70199 94 7.61966 1.16777 -1.70164 89 7.64962 0.951895 -1.70164 93 7.67231 0.747308 -1.70164 97 7.68867 0.554261 -1.70164 93 7.70367 0.27618 -1.70164 97 7.70259 -0.3049 -1.70163 101 7.69877 -0.389575 -1.70163 98 7.06526 0.892387 -1.70149 88 7.07963 0.770177 -1.70149 98 7.08981 0.670017 -1.70149 95 7.11125 0.379985 -1.70149 104 7.12033 0.122873 -1.70149 96 7.12069 0.100504 -1.70148 93 7.1028 -0.514292 -1.70148 131 9.01428 1.39529 -1.70126 103 7.62667 1.10762 -1.70118 94 7.63011 1.08365 -1.70118 94 7.69236 0.469575 -1.70117 102 7.69823 0.360784 -1.70117 102 7.70645 0.0582733 -1.70117 101 7.70663 -0.0264658 -1.70117 103 7.70651 -0.0506768 -1.70117 105 7.70502 -0.159617 -1.70117 103 7.70156 -0.280623 -1.70117 105 7.06611 0.869954 -1.70099 121 7.08353 0.714367 -1.70099 105 7.08574 0.692104 -1.70099 104 7.09096 0.636435 -1.70099 88 7.10611 0.435716 -1.70098 133 7.11048 0.357553 -1.70098 108 7.11482 0.256998 -1.70098 89 7.11662 0.201111 -1.70098 97 7.11874 -0.100806 -1.70098 101 7.11396 -0.279672 -1.70098 100 7.11155 -0.335536 -1.70098 104 7.68649 0.529849 -1.7007 99 7.70224 -0.195868 -1.7007 102 7.70086 -0.244259 -1.7007 101 7.09099 0.613997 -1.70048 93 7.10054 0.491384 -1.70048 124 7.11113 0.301622 -1.70048 107 7.11528 0.178712 -1.70048 99 7.1173 0.0557483 -1.70048 106 7.11749 0.0222067 -1.70048 106 7.11527 -0.17902 -1.70048 105 8.65876 1.26363 -1.7003 105 8.66842 1.19559 -1.7003 121 7.61019 1.19082 -1.70024 97 7.69127 0.421034 -1.70024 99 7.0714 0.791788 -1.69998 128 7.09096 0.59156 -1.69998 96 7.09703 0.513555 -1.69998 107 7.11094 -0.257167 -1.69997 101 7.69061 0.396776 -1.69977 103 7.70084 -0.00223318 -1.69977 100 7.69965 -0.135288 -1.69977 95 7.6977 -0.21994 -1.69977 107 7.69275 -0.352908 -1.69976 95 7.09174 0.557992 -1.69947 102 7.09345 0.535712 -1.69947 105 7.10979 0.234473 -1.69947 137 7.1108 -0.201249 -1.69947 111 7.61367 1.14242 -1.69931 108 7.6823 0.505335 -1.6993 94 7.69621 0.203339 -1.6993 98 7.69188 -0.328649 -1.6993 103 6.87538 -0.579152 -1.69919 110 6.87353 -0.600753 -1.69919 115 6.86651 -0.676294 -1.69919 83 7.03436 1.04614 -1.69897 95 7.04543 0.96873 -1.69897 122 7.04844 0.946593 -1.69897 96 7.1115 -0.0559894 -1.69897 99 7.11128 -0.0783292 -1.69897 106 7.10999 -0.156517 -1.69897 136 7.69688 0.0340522 -1.69883 99 6.86968 -0.622177 -1.69867 104 6.86243 -0.697674 -1.69867 108 8.65494 1.23529 -1.69865 113 7.10591 -0.234614 -1.69846 101 7.10079 -0.357354 -1.69846 101 8.66244 1.16702 -1.69823 117 6.87244 0.568026 -1.69816 87 6.88454 -0.395164 -1.69815 92 6.87978 -0.47084 -1.69815 92 7.03377 1.02349 -1.69797 126 6.89103 -0.200328 -1.69764 93 6.87555 -0.503123 -1.69763 115 7.10548 0.0780214 -1.69746 129 7.10591 -0.000109623 -1.69746 98 6.84101 0.836917 -1.69713 90 6.89088 0.124466 -1.69712 95 8.62458 1.38339 -1.697 122 7.57297 1.33174 -1.69697 98 6.83507 0.868895 -1.69661 123 6.86001 0.642993 -1.69661 88 6.88972 0.070314 -1.6966 97 8.62695 1.35598 -1.69658 114 7.57725 1.29572 -1.69651 94 7.58524 1.24808 -1.69651 96 6.87555 0.416274 -1.69609 98 6.88797 0.0486461 -1.69608 90 6.88345 -0.254252 -1.69608 98 6.88024 -0.329925 -1.69608 98 6.87351 -0.448748 -1.69608 124 6.86648 -0.545873 -1.69608 112 8.63347 1.28759 -1.69576 111 7.58719 1.21172 -1.69557 96 6.83785 0.814715 -1.69557 110 6.86864 0.491699 -1.69557 122 6.87779 0.340545 -1.69557 94 6.88544 -0.102804 -1.69556 95 6.8839 -0.178509 -1.69556 98 6.86623 -0.52416 -1.69556 115 7.57552 1.27096 -1.69511 93 6.87418 0.372838 -1.69505 119 6.88249 -0.156842 -1.69505 97 6.87103 -0.426928 -1.69504 116 7.55917 1.35384 -1.69464 99 6.84484 0.71755 -1.69454 90 6.85027 0.663769 -1.69453 117 8.6215 1.32735 -1.69452 114 7.55297 1.37724 -1.69417 105 6.82274 0.889079 -1.69402 115 6.85238 0.620532 -1.69402 115 6.8749 0.275455 -1.69401 118 6.87887 0.145826 -1.69401 125 6.83636 0.760099 -1.6935 114 6.83872 0.73862 -1.6935 120 6.86388 0.448002 -1.6935 117 6.86719 0.39408 -1.6935 88 6.87419 0.242981 -1.6935 94 6.87843 -0.0270868 -1.69349 120 6.87492 -0.221539 -1.69349 126 6.86838 -0.372658 -1.69349 122 8.03805 -0.504857 -1.69304 138 6.81608 0.909981 -1.69298 112 6.8413 0.695436 -1.69298 111 6.87014 0.296869 -1.69298 94 6.87013 -0.297037 -1.69297 100 6.86759 -0.350989 -1.69297 94 6.82887 0.791852 -1.69246 113 6.8555 0.512372 -1.69246 102 6.85666 0.469145 -1.69194 93 6.86913 0.221171 -1.69194 115 6.86979 0.199591 -1.69194 120 6.87066 0.167217 -1.69194 94 6.87269 -0.00549593 -1.69194 90 6.87221 -0.0810656 -1.69194 124 6.87157 -0.124241 -1.69194 127 6.86717 -0.275313 -1.69194 98 6.84561 0.587371 -1.69143 123 6.87015 0.0916265 -1.69142 118 6.87071 0.0268741 -1.69142 131 8.63309 1.13536 -1.69121 94 6.86146 0.318063 -1.69091 126 6.86865 -0.0486692 -1.6909 90 6.84146 0.543709 -1.68935 111 7.95227 1.03075 -1.68503 112 8.39708 1.09027 -1.67974 71 7.87098 0.819333 -1.66096 166 7.89243 -0.521075 -1.66005 118 7.84604 -0.691697 -1.65247 110 7.84428 -0.666728 -1.65158 119 7.84733 -0.604955 -1.65114 119 7.84125 -0.554981 -1.64891 86 7.83273 -0.641012 -1.64846 116 7.79955 0.948197 -1.64803 107 7.80442 0.836984 -1.64625 110 7.78686 0.971456 -1.6458 94 7.79281 0.922511 -1.6458 113 7.79707 0.885778 -1.6458 113 7.82197 -0.578376 -1.6449 125 7.79013 0.860176 -1.64357 119 8.16243 -0.781122 -1.62192 77 7.75339 -0.703801 -1.53248 84 7.71361 0.979046 -1.53038 85 7.67931 0.938077 -1.52194 95 7.70494 -0.674836 -1.52151 83 7.53074 0.896436 -1.48903 92 7.71225 -0.728906 -1.48832 56 7.62536 0.963224 -1.47553 79 7.57522 -0.680428 -1.45857 82 7.39737 -0.623438 -1.45443 111 7.31593 0.848323 -1.44178 85 7.34385 -0.502675 -1.44093 80 7.46139 0.918135 -1.43999 146 7.31021 -0.534881 -1.43418 88 7.27425 0.762711 -1.43081 101 7.28219 0.682683 -1.43081 255 7.28511 -0.555974 -1.42911 79 7.28639 -0.452549 -1.42785 255 7.27748 -0.578378 -1.42785 84 7.25376 0.806729 -1.42744 74 7.28193 -0.429291 -1.42658 255 7.23681 0.781907 -1.42322 81 7.2409 -0.312666 -1.41646 58 7.6801 -0.724825 -1.4161 59 7.22252 -0.471143 -1.41435 255 7.36476 -0.638935 -1.41354 162 7.191 0.731456 -1.41225 187 7.20811 -0.345174 -1.40971 239 7.18207 0.594096 -1.40761 190 7.30304 0.874804 -1.4057 117 7.33597 -0.532201 -1.40569 228 7.17739 -0.287106 -1.40254 40 7.32003 -0.507996 -1.40197 224 7.2855 0.768293 -1.3995 125 7.28709 0.733748 -1.39909 165 7.29913 -0.552709 -1.39825 140 7.12234 0.690841 -1.39664 255 7.12756 0.612328 -1.39621 255 7.55209 0.955551 -1.39546 134 7.14062 -0.364188 -1.39536 255 7.13077 0.466179 -1.39453 39 7.13289 0.43257 -1.39452 39 7.25583 0.788121 -1.39371 194 7.27589 -0.574019 -1.3937 76 7.24943 0.810462 -1.39289 127 7.12147 0.488075 -1.39284 39 7.12986 -0.0832675 -1.39115 45 7.12668 -0.228836 -1.39114 45 7.09733 0.643535 -1.39031 255 7.25555 -0.606896 -1.38998 73 7.11966 -0.262178 -1.38988 44 7.10429 0.509382 -1.38946 44 7.11332 0.27466 -1.38862 46 7.11625 -0.183711 -1.38861 46 7.11219 0.252251 -1.3882 46 7.11368 -0.206001 -1.38819 45 7.10298 0.408479 -1.38777 46 7.21833 0.841347 -1.3871 62 7.10206 0.3525 -1.38693 46 7.10684 -0.0270953 -1.38608 45 7.10506 -0.161043 -1.38608 45 7.09446 0.385668 -1.38566 47 7.09455 -0.384027 -1.38566 255 7.09532 0.329853 -1.38524 45 7.10281 -0.0493792 -1.38524 45 7.10038 0.0956423 -1.38482 45 7.10025 -0.105127 -1.38482 45 7.09988 -0.127434 -1.38482 46 7.09341 0.229347 -1.38398 47 7.09711 -0.00472735 -1.38397 47 7.0846 0.307097 -1.38271 46 7.09107 0.0509957 -1.38271 45 7.08628 0.206863 -1.38229 46 7.08717 0.173466 -1.38229 45 7.08536 0.0175883 -1.38144 45 7.0811 0.0732063 -1.3806 46 7.07835 0.12879 -1.38018 45 7.07205 0.150922 -1.37891 45 7.46377 -0.680015 -1.37162 127 7.1778 -0.464658 -1.37139 213 7.14847 -0.361493 -1.36396 255 7.39741 0.912925 -1.36329 185 7.11628 0.670786 -1.3619 255 7.1343 -0.439504 -1.36189 255 7.12128 0.592327 -1.36148 255 7.11547 0.636876 -1.36107 255 7.13173 -0.416875 -1.36106 255 7.12971 -0.38307 -1.36024 255 7.13002 -0.338179 -1.35982 181 7.10964 0.613818 -1.35942 255 7.1075 0.568648 -1.35818 100 7.08864 0.533453 -1.35363 55 7.08748 -0.280551 -1.35032 74 7.06877 -0.257644 -1.34619 71 7.33804 -0.633257 -1.34541 138 7.03626 0.685264 -1.34537 255 7.05126 0.508222 -1.34537 61 7.06066 -0.312915 -1.34495 81 7.04666 0.430029 -1.3433 66 7.05688 -0.20178 -1.3433 75 7.30037 0.866403 -1.34264 137 7.62729 0.995692 -1.34142 72 7.04216 -0.234625 -1.34041 86 7.0277 0.450971 -1.33958 66 7.03428 -0.0243788 -1.33793 64 7.03257 -0.156959 -1.33793 65 7.03205 -0.17905 -1.33793 70 7.03237 -0.00228433 -1.33751 63 7.03018 -0.0575106 -1.3371 54 7.02605 -0.0795651 -1.33627 55 7.00793 0.482809 -1.33587 82 7.01294 0.328394 -1.33504 27 7.01758 -0.123601 -1.33462 66 7.00684 0.372233 -1.33421 53 7.0114 0.273141 -1.33421 28 7.01669 0.0197053 -1.33421 63 7.00602 0.350108 -1.3338 27 7.0011 0.405005 -1.33339 59 7.00811 0.195843 -1.33297 60 7.01065 0.0527026 -1.33297 65 7.00815 -0.10145 -1.33256 54 7.00244 0.250724 -1.33215 29 7.00235 0.0966176 -1.33132 64 6.99439 0.305435 -1.33091 27 6.99733 0.228509 -1.33091 61 6.99986 0.129569 -1.33091 62 7.60382 -0.711267 -1.33078 96 6.995 0.173433 -1.33008 62 6.99355 0.151409 -1.32967 61 6.99479 0.0745008 -1.32967 64 7.23293 0.835611 -1.32834 221 7.25602 -0.602921 -1.32833 220 7.24616 -0.579144 -1.32595 229 7.22188 0.811402 -1.32556 229 7.23622 -0.555434 -1.32357 235 7.1971 0.785831 -1.32 233 7.21726 -0.519702 -1.3192 237 7.17732 0.749549 -1.31524 236 7.49214 0.95364 -1.31446 188 7.17573 0.726615 -1.31444 237 7.51212 -0.679212 -1.31255 133 7.16237 0.702591 -1.31127 239 7.16412 -0.493059 -1.30808 240 7.14033 0.643951 -1.30571 239 7.14803 -0.46933 -1.30451 241 7.12665 0.597667 -1.30213 239 7.12743 0.563931 -1.30173 239 7.12669 -0.434125 -1.29974 241 7.10117 0.663055 -1.29816 240 7.11708 0.462037 -1.29816 239 7.11168 0.48414 -1.29736 239 7.11628 -0.411012 -1.29736 242 7.124 -0.176031 -1.29696 239 7.12114 -0.209537 -1.29656 239 7.11909 -0.131136 -1.29577 239 7.08762 0.616957 -1.29459 240 7.11276 -0.153351 -1.29458 239 7.10091 0.405077 -1.29419 239 7.11179 -0.0974491 -1.29418 239 7.09014 -0.387058 -1.2918 241 7.08993 -0.353537 -1.2914 241 7.08904 -0.331163 -1.291 242 7.07442 0.537574 -1.29061 240 7.08613 -0.308705 -1.29021 242 7.08511 -0.286351 -1.28981 241 7.06825 0.514806 -1.28902 240 7.08322 -0.230558 -1.28902 240 7.08247 -0.252808 -1.28902 241 7.06957 0.436831 -1.28823 240 7.05938 0.336158 -1.28505 240 7.34317 0.910715 -1.28484 176 7.05517 0.380408 -1.28466 240 7.05633 0.35824 -1.28465 240 7.05696 0.302736 -1.28426 240 7.06339 -0.0300337 -1.28425 240 7.06326 -0.0522226 -1.28425 240 7.05677 0.258321 -1.28386 242 7.06145 0.0254462 -1.28386 240 7.06149 0.00326316 -1.28386 240 7.0611 -0.074383 -1.28386 240 7.05722 0.180675 -1.28346 243 7.05878 0.103065 -1.28346 240 7.052 0.280353 -1.28307 242 7.05711 0.0808717 -1.28306 240 7.05741 0.047617 -1.28306 240 7.05211 0.147314 -1.28227 242 7.35572 -0.642329 -1.28179 193 7.04615 0.224734 -1.28148 244 7.04094 0.202451 -1.28029 245 7.00158 0.12444 -1.27194 255 7.29407 -0.602554 -1.26925 222 7.25967 0.865333 -1.26775 222 7.24871 0.840891 -1.26509 235 7.26851 -0.577556 -1.26394 235 7.25462 -0.553579 -1.2609 238 7.22791 0.815387 -1.26053 238 7.54212 0.963211 -1.25275 126 7.18858 -0.514725 -1.24761 241 7.16142 0.773472 -1.24686 241 7.16665 -0.490614 -1.24305 242 7.14039 0.74843 -1.2423 243 7.15248 -0.46713 -1.24001 244 7.49619 -0.698065 -1.23899 78 7.12513 0.724141 -1.23888 244 7.13696 -0.432415 -1.2366 245 7.09025 0.697964 -1.23167 245 7.11083 -0.408515 -1.23128 245 7.10423 -0.385776 -1.22976 245 7.07978 0.663215 -1.22901 255 7.09953 -0.363176 -1.22862 245 7.41571 0.912029 -1.22851 99 7.07792 0.640603 -1.22825 247 7.07794 0.61818 -1.22787 246 7.09724 -0.329549 -1.22786 246 7.09627 -0.307173 -1.22748 246 7.07491 0.584315 -1.22673 247 7.09328 -0.284734 -1.22672 246 7.07452 0.53954 -1.22597 246 7.07084 0.561599 -1.22559 246 7.08745 -0.228791 -1.2252 245 7.08669 -0.251056 -1.2252 245 7.06915 0.505606 -1.22445 245 7.06827 0.460909 -1.22369 246 7.08028 -0.206324 -1.22369 244 7.07893 -0.184036 -1.22331 245 7.06092 0.482687 -1.22255 247 7.0658 0.405022 -1.22255 245 7.07426 -0.128347 -1.22217 243 7.07383 -0.150571 -1.22217 246 7.05989 0.438055 -1.22179 244 7.07267 -0.1061 -1.22179 244 7.06936 -0.0505346 -1.22103 244 7.06524 -0.0727175 -1.22027 243 7.05512 0.304358 -1.21951 243 7.0569 0.260027 -1.21951 244 7.06163 0.0271398 -1.21951 242 7.04939 0.381803 -1.21913 241 7.05056 0.359656 -1.21913 242 7.05217 0.326422 -1.21913 242 7.05608 0.226697 -1.21913 243 7.05936 0.0714857 -1.21913 241 7.05966 -0.028322 -1.21913 243 7.05016 0.281937 -1.21837 242 7.05465 0.126839 -1.21837 242 7.05148 0.182184 -1.21799 243 7.05383 0.00492041 -1.21799 242 7.04891 0.204274 -1.21761 243 7.05029 0.148902 -1.21761 242 7.04973 0.0491988 -1.21723 242 7.04716 0.104531 -1.21685 241 7.34167 -0.659872 -1.21005 121 7.27982 0.8726 -1.20283 174 7.2771 -0.630791 -1.19775 193 7.67311 -0.74227 -1.19556 68 7.22975 0.843759 -1.19306 202 7.22418 -0.603147 -1.18762 216 7.18867 0.804804 -1.18474 218 7.57494 0.964034 -1.1829 140 7.19557 -0.566514 -1.18183 221 7.15595 0.778515 -1.17823 222 7.17379 -0.542042 -1.17749 224 7.14271 0.754436 -1.17533 226 7.1578 -0.51816 -1.17424 225 7.13134 0.73064 -1.1728 228 7.53215 -0.705244 -1.17055 113 7.12099 0.695736 -1.17027 228 7.13662 -0.482745 -1.1699 226 7.13418 -0.460055 -1.16917 228 7.1297 -0.437257 -1.16809 228 7.10551 0.67176 -1.16701 228 7.09583 0.648401 -1.16484 228 7.11337 -0.413764 -1.16483 227 7.09293 0.614467 -1.16376 227 7.10345 -0.379565 -1.16266 227 7.08502 0.5914 -1.16195 227 7.09872 -0.356929 -1.16158 225 7.08096 0.568689 -1.16086 226 7.08605 -0.333928 -1.15905 223 7.08558 -0.300441 -1.15868 226 7.0659 0.534047 -1.15761 223 7.0806 -0.277927 -1.1576 227 7.06558 0.511707 -1.15724 227 7.06323 0.48925 -1.15652 226 7.07554 -0.255446 -1.15651 228 7.0747 -0.222032 -1.15615 227 7.0608 0.466813 -1.1558 228 7.05703 0.433194 -1.15471 228 7.05836 0.411022 -1.15471 229 7.0675 -0.199554 -1.1547 228 7.4157 0.919538 -1.15446 169 7.06612 -0.177293 -1.15434 229 7.06468 -0.155043 -1.15398 229 7.05372 0.388542 -1.15362 230 7.0614 -0.121667 -1.15326 229 7.04762 0.354931 -1.15218 230 7.05585 -0.0993776 -1.15217 229 7.04774 0.310564 -1.15182 229 7.05444 -0.0439389 -1.15181 229 7.04477 0.332618 -1.15145 230 7.04716 0.277278 -1.15145 230 7.04946 0.210849 -1.15145 229 7.04603 0.255074 -1.15109 231 7.05022 -0.0771242 -1.15109 228 7.04644 0.177542 -1.15073 230 7.04697 0.155404 -1.15073 229 7.04846 0.0557675 -1.15073 228 7.0486 0.0336238 -1.15073 229 7.04286 0.232821 -1.15037 230 7.04628 0.0778961 -1.15037 228 7.04671 0.000414821 -1.15037 229 7.04349 0.133205 -1.15 229 7.04471 -0.0217098 -1.15 230 7.0401 0.0999704 -1.14928 227 7.39011 -0.657331 -1.14519 178 7.31296 0.883107 -1.13595 220 7.3234 -0.628458 -1.1332 229 7.30373 -0.603739 -1.12943 243 7.27266 0.854915 -1.12841 236 7.26878 0.819723 -1.12704 248 7.2279 -0.56347 -1.11572 249 7.193 0.788019 -1.11334 253 7.21194 -0.5395 -1.11264 255 7.17586 0.763263 -1.10991 251 7.19591 -0.515637 -1.10956 252 7.20506 -0.277891 -1.10887 230 7.19825 -0.3003 -1.10784 229 7.18766 -0.49239 -1.10784 253 7.19478 -0.334133 -1.1075 242 7.19783 -0.198416 -1.10716 232 7.19682 -0.232333 -1.10716 231 7.19408 -0.254878 -1.10682 230 7.18221 0.423033 -1.10614 223 7.18007 -0.457922 -1.10613 254 7.18334 0.366503 -1.10579 229 7.19054 -0.175638 -1.10579 230 7.18934 0.140642 -1.10545 240 7.19053 -0.0513671 -1.10545 231 7.19007 -0.0965455 -1.10545 230 7.15194 0.726552 -1.10511 254 7.17495 0.445207 -1.10511 223 7.1776 0.400117 -1.10511 224 7.18157 0.321172 -1.10511 231 7.18573 0.208328 -1.10511 234 7.18689 0.163175 -1.10511 232 7.18869 0.027684 -1.10511 231 7.18712 -0.152978 -1.1051 228 7.16597 0.546436 -1.10477 237 7.16766 0.52392 -1.10477 229 7.17856 0.34363 -1.10477 232 7.18104 0.28724 -1.10477 233 7.18438 0.185695 -1.10476 232 7.17993 0.264599 -1.10442 231 7.18431 0.0840823 -1.10442 234 7.18382 -0.119057 -1.10442 227 7.16534 0.501111 -1.10408 225 7.18204 0.106616 -1.10408 236 7.18257 0.0614878 -1.10408 231 7.18283 0.00507427 -1.10408 230 7.18245 -0.073904 -1.10408 230 7.14635 0.703279 -1.10374 255 7.16565 0.467204 -1.10374 225 7.17679 0.241894 -1.10374 230 7.18084 -0.0174936 -1.10373 231 7.15393 -0.433792 -1.10133 255 7.12695 0.678692 -1.09997 255 7.14345 -0.41068 -1.09928 255 7.12418 0.644545 -1.09894 255 7.11244 0.620911 -1.09654 255 7.12956 -0.376239 -1.09654 255 7.12481 -0.353568 -1.09551 255 7.6254 0.9808 -1.09501 102 7.08687 0.596151 -1.09175 255 7.08871 0.573884 -1.09175 255 7.5299 -0.694216 -1.07463 95 7.68294 -0.718493 -1.06701 80 7.454 0.935557 -1.06668 136 7.55082 0.961222 -1.05059 94 7.37083 -0.655646 -1.04853 105 7.32889 0.885251 -1.04568 166 7.31385 -0.627217 -1.03898 174 7.48832 -0.677236 -1.036 92 7.26886 0.855065 -1.03549 203 7.27541 -0.589252 -1.0323 209 7.24011 0.828742 -1.0304 213 7.25951 -0.564949 -1.02943 222 7.23215 0.793367 -1.02849 223 7.2396 -0.540446 -1.02593 227 7.39452 0.905377 -1.02516 128 7.20908 0.768017 -1.02435 233 7.22748 -0.516663 -1.02371 233 7.19181 0.7434 -1.02117 233 7.21407 -0.481488 -1.02116 234 7.2057 -0.458162 -1.01957 236 7.20833 -0.378791 -1.01925 242 7.18147 0.708196 -1.01894 235 7.20119 -0.40109 -1.0183 207 7.2016 -0.355727 -1.01798 241 7.37228 -0.643809 -1.01739 148 7.18092 0.605808 -1.01735 232 7.17186 0.68455 -1.01703 235 7.19728 -0.321503 -1.01702 242 7.19134 -0.434514 -1.01702 237 7.17689 0.582788 -1.01639 241 7.17474 0.559947 -1.01576 240 7.19127 -0.275943 -1.01575 241 7.17533 0.525992 -1.01544 241 7.16218 0.660971 -1.01512 237 7.18642 -0.298357 -1.01511 240 7.18618 -0.253121 -1.0148 241 7.17258 0.480526 -1.01448 239 7.15832 0.63796 -1.01417 232 7.1671 0.502794 -1.01385 239 7.16885 0.446369 -1.01353 240 7.17022 0.423847 -1.01353 240 7.17866 -0.173814 -1.01321 240 7.17808 -0.196364 -1.01321 239 7.17742 -0.218916 -1.01321 238 7.17742 -0.13994 -1.01289 239 7.16485 0.378401 -1.01226 239 7.17388 -0.117313 -1.01225 246 7.16166 0.400804 -1.01194 239 7.69439 0.963812 -1.01009 111 7.28358 0.868177 -1.00717 201 7.29746 -0.614448 -1.0053 219 7.10146 0.341739 -1.00175 255 7.24311 0.84013 -1.00035 224 7.26678 -0.577513 -1.00003 226 7.25871 -0.553966 -0.998481 229 7.22932 0.803955 -0.997561 229 7.24858 -0.530338 -0.99662 232 7.22396 0.780364 -0.99632 231 7.62818 -0.692595 -0.995955 125 7.23523 -0.495149 -0.99414 234 7.05121 0.317306 -0.993477 255 7.2028 0.75511 -0.992599 234 7.22689 -0.471807 -0.99259 235 7.04625 0.294928 -0.992522 255 7.04835 0.239578 -0.992522 255 7.20121 0.732065 -0.991979 236 7.04361 0.261587 -0.991885 255 7.04315 0.217274 -0.991567 255 7.20198 0.617979 -0.990428 242 7.21585 -0.391517 -0.99011 238 7.21256 -0.448178 -0.990109 238 7.03422 0.183862 -0.989975 255 7.21507 -0.368754 -0.9898 241 7.03082 0.161681 -0.989338 255 7.03267 0.007041 -0.989337 255 7.02774 0.117454 -0.988702 255 7.02812 -0.0923096 -0.9887 255 7.18296 0.695947 -0.988568 237 7.02537 0.139498 -0.988384 255 7.02625 0.0843204 -0.988383 255 7.02664 0.0401677 -0.988383 255 7.02665 -0.0370941 -0.988382 255 7.20633 -0.345649 -0.98825 242 7.0245 0.0622342 -0.988065 255 7.02476 -0.0150087 -0.988064 255 7.18997 0.57141 -0.987947 242 7.20574 -0.266258 -0.98763 244 7.20487 -0.288892 -0.98763 243 7.20393 -0.311524 -0.98763 243 7.1988 -0.413334 -0.987629 239 7.0186 -0.0590716 -0.987109 255 7.17331 0.672227 -0.986707 239 7.1783 0.593144 -0.986396 242 7.18747 0.46903 -0.986396 243 7.19891 -0.164175 -0.986081 243 7.19704 -0.232018 -0.98608 243 7.16948 0.649134 -0.985777 238 7.17879 0.536443 -0.985776 243 7.18699 0.412325 -0.985775 244 7.19565 -0.13019 -0.985461 244 7.19379 -0.209304 -0.98546 243 7.17808 0.491039 -0.985155 243 7.19243 -0.18666 -0.98515 243 7.17453 0.513438 -0.984846 243 7.18036 0.389286 -0.984535 244 7.17383 0.434145 -0.983915 243 7.4754 0.913291 -0.976838 125 7.11898 0.352094 -0.974612 247 7.3839 0.878906 -0.962713 133 7.37815 -0.645667 -0.958287 116 7.01031 -0.105479 -0.956314 255 6.99178 0.323317 -0.954457 255 6.99276 0.301351 -0.954456 255 6.9992 0.0265831 -0.954454 255 6.99294 0.246347 -0.954146 255 6.99666 0.0925129 -0.954145 255 6.99711 0.0485493 -0.954144 255 6.99727 -0.00640377 -0.954144 255 6.99709 -0.0503726 -0.954143 255 6.99678 -0.0833431 -0.954143 255 6.99237 0.202336 -0.953835 255 6.99325 0.169385 -0.953835 255 6.99494 0.0705059 -0.953834 255 6.99327 -0.0283836 -0.953524 255 6.98578 0.279038 -0.953216 255 6.98775 0.22416 -0.953215 255 6.9898 0.147318 -0.953215 255 6.99022 0.125356 -0.953215 255 7.31511 -0.616769 -0.948576 60 7.28942 -0.591447 -0.944456 57 7.27832 -0.555986 -0.942396 80 7.25093 0.80587 -0.941818 68 7.26228 -0.531754 -0.939748 82 7.23178 0.780829 -0.938581 84 7.22633 0.757311 -0.937404 108 7.24024 -0.507192 -0.936217 68 7.23466 -0.472524 -0.93504 52 7.23353 -0.426811 -0.934452 172 7.23216 -0.449534 -0.934452 73 7.20422 0.720783 -0.933578 119 7.21171 0.641524 -0.933577 158 7.71258 0.963812 -0.933341 174 7.20251 0.697774 -0.932989 137 7.21904 -0.403145 -0.932098 220 7.19988 0.617732 -0.931517 197 7.19284 0.674079 -0.931223 169 7.18825 -0.0847053 -0.92592 255 7.18055 0.299063 -0.925629 255 7.18276 -0.0282019 -0.925038 255 7.18254 -0.0620509 -0.925038 255 7.17673 0.17479 -0.924451 255 7.17822 0.0958666 -0.92445 255 7.17884 0.0169348 -0.92445 255 7.1724 0.253626 -0.924157 255 7.66963 -0.674885 -0.923179 156 7.14066 0.590277 -0.922394 244 7.1537 -0.365446 -0.922092 249 7.12716 -0.341543 -0.917973 254 7.12029 -0.318768 -0.916796 255 7.1039 0.55369 -0.916508 254 7.09893 0.486074 -0.915036 255 7.09917 0.452499 -0.914742 255 7.11221 -0.139407 -0.914737 255 7.11058 -0.206435 -0.914737 255 7.10953 -0.239941 -0.914736 255 7.10874 -0.262275 -0.914736 255 7.10788 -0.284606 -0.914736 255 7.08982 0.530248 -0.914154 255 7.09145 0.50797 -0.914154 255 7.10778 -0.16165 -0.914148 255 7.09266 0.429746 -0.913564 255 7.10328 -0.183862 -0.91356 255 7.093 0.35155 -0.912975 255 7.08805 0.407138 -0.912681 255 7.06815 0.372668 -0.909444 255 7.49344 0.911771 -0.902344 117 7.01501 0.325887 -0.901204 255 7.01587 -0.104095 -0.900318 255 7.00242 0.0721564 -0.898259 255 7.00262 0.0501586 -0.898259 255 6.99725 0.149079 -0.897671 255 6.9959 0.116073 -0.897376 255 6.99222 0.192944 -0.897083 255 6.9929 -0.00479746 -0.896787 255 6.98177 0.269537 -0.895906 255 6.98135 0.225607 -0.895612 255 7.3422 0.729339 -0.878754 202 7.34191 -0.600712 -0.877097 157 7.29962 0.864239 -0.874914 87 7.32269 -0.541361 -0.873806 227 7.317 -0.564073 -0.873257 203 7.29865 -0.516627 -0.870241 225 7.26819 0.825682 -0.869977 203 7.27683 0.745713 -0.869976 174 7.27127 0.779776 -0.869702 190 7.29036 -0.493061 -0.868869 180 7.25894 0.801499 -0.868331 196 7.22148 0.659665 -0.861198 228 7.22734 -0.454829 -0.859818 107 7.22214 -0.40899 -0.858721 195 7.21884 -0.431566 -0.858446 233 7.21013 -0.374283 -0.856801 221 7.1828 0.690151 -0.856261 155 7.18011 0.632988 -0.855163 209 7.19544 -0.350915 -0.854607 227 7.17417 0.60973 -0.854066 222 7.19255 -0.328141 -0.854059 228 7.1721 0.586849 -0.853517 228 7.19006 -0.294096 -0.85351 213 7.16887 0.552569 -0.852694 226 7.16267 0.529433 -0.851597 152 7.17626 0.16877 -0.851045 237 7.168 -0.248177 -0.850219 178 7.16719 -0.270695 -0.850219 211 7.14486 0.471644 -0.848579 230 7.13663 0.504872 -0.847756 226 7.81888 0.918796 -0.846134 87 7.14005 0.190235 -0.846108 211 7.12418 -0.0900692 -0.843637 251 7.12325 -0.146019 -0.843637 252 7.11323 0.36851 -0.843366 252 7.12276 -0.0117345 -0.843363 251 7.11343 0.323711 -0.843092 252 7.12078 0.0106322 -0.843089 251 7.12065 -0.0452943 -0.843089 252 7.12047 -0.0676642 -0.843089 251 7.1188 -0.168318 -0.843088 253 7.10746 0.40179 -0.842818 253 7.11458 0.245403 -0.842817 252 7.11792 -0.112378 -0.842814 253 7.11625 -0.190635 -0.842813 253 7.10842 0.345852 -0.842543 252 7.11092 0.290009 -0.842543 253 7.1133 -0.224113 -0.842539 253 7.10783 0.267506 -0.841994 253 7.10972 0.211677 -0.841994 253 7.11057 0.0664293 -0.841718 253 7.11081 0.0329207 -0.841718 252 7.8081 -0.69509 -0.841574 54 7.09628 0.423489 -0.841447 254 7.09096 0.445516 -0.840898 254 7.10407 0.11099 -0.840896 254 7.10241 0.0886396 -0.840621 255 7.09951 0.144371 -0.840347 255 7.4632 0.854437 -0.79745 55 7.46379 -0.62784 -0.794496 51 7.41832 -0.600385 -0.788076 96 10.057 1.10639 -0.787291 41 8.06288 0.941906 -0.786443 180 8.08549 -0.699839 -0.786185 182 10.0456 1.02539 -0.785321 40 7.3752 0.821213 -0.785145 135 7.38659 -0.574347 -0.783529 239 9.99216 1.1312 -0.781186 64 9.97669 1.16123 -0.780005 88 7.33956 0.782388 -0.779795 226 7.33803 0.75893 -0.77926 241 7.35166 -0.536658 -0.778447 245 7.32657 0.734539 -0.777387 239 7.34343 -0.512834 -0.77711 244 7.32919 -0.488651 -0.77497 244 7.30911 0.709675 -0.774712 243 7.30447 0.674524 -0.773642 243 7.3208 -0.46496 -0.773633 246 7.31895 -0.430209 -0.773098 244 7.30067 0.62796 -0.772571 233 7.29668 0.650723 -0.772304 245 7.31433 -0.406863 -0.772296 240 7.29959 0.593245 -0.772036 232 7.62449 0.89417 -0.770566 68 7.29381 0.512154 -0.770431 233 7.26967 0.487606 -0.766953 240 7.25818 -0.380666 -0.764539 179 7.26129 -0.266533 -0.764272 250 7.23817 0.565596 -0.763476 225 7.23596 0.54257 -0.762941 187 7.24604 -0.345748 -0.762667 158 7.24609 -0.300124 -0.7624 201 7.24115 -0.322696 -0.761864 230 7.24228 -0.242983 -0.761598 251 7.23103 0.439543 -0.761335 250 7.24169 -0.197409 -0.76133 251 7.24103 -0.220163 -0.76133 250 7.23104 0.405361 -0.761068 249 7.23228 0.382644 -0.761067 250 7.23506 0.325827 -0.761067 250 7.23605 0.303097 -0.761067 250 7.23147 0.359824 -0.7608 249 7.23499 0.280294 -0.760799 249 7.23993 -0.08358 -0.760796 251 7.23946 -0.117698 -0.760796 249 7.23905 -0.140439 -0.760796 252 7.23857 -0.163179 -0.760796 251 7.23817 -0.0608088 -0.760529 251 7.23426 0.1779 -0.760263 249 7.23645 -0.00395062 -0.760262 249 7.23028 0.246015 -0.759996 246 7.23169 0.20058 -0.759996 247 7.23444 0.018784 -0.759995 249 7.23437 -0.0380354 -0.759994 250 7.22904 0.223243 -0.759729 249 7.21379 0.461302 -0.759196 225 7.21849 0.0414763 -0.757855 255 7.21596 0.0981522 -0.757588 125 7.20727 0.143357 -0.756518 216 7.20174 0.120638 -0.755716 231 7.20049 0.064058 -0.755448 229 7.48634 -0.621463 -0.749398 68 7.37837 0.829221 -0.738193 179 7.36456 -0.576857 -0.733339 117 7.3344 -0.528269 -0.729006 245 7.30406 0.797371 -0.728252 146 7.60809 -0.62086 -0.72665 68 7.31503 -0.492312 -0.726203 252 7.31094 -0.549749 -0.726202 201 7.29234 0.738117 -0.725957 244 7.28081 0.713801 -0.724173 253 7.3007 -0.468369 -0.724164 255 7.27301 0.770746 -0.723918 219 7.29223 -0.444862 -0.722889 255 7.27117 0.689756 -0.722643 255 7.28369 -0.421413 -0.721615 255 7.26648 0.631737 -0.721368 255 7.26145 0.665782 -0.721114 255 9.94857 1.07329 -0.720708 61 9.95351 1.0264 -0.720708 54 7.27767 -0.386692 -0.720596 255 9.9258 1.13393 -0.719221 64 7.25065 0.607353 -0.719074 255 9.92021 1.16487 -0.719036 173 7.26498 -0.363183 -0.718812 255 7.2641 -0.340272 -0.718557 255 7.24263 0.583733 -0.717799 255 7.25572 -0.305655 -0.717283 255 7.23542 0.548813 -0.716525 255 7.24361 -0.259612 -0.715499 255 7.24241 -0.236797 -0.715244 255 7.24078 -0.282297 -0.715244 255 7.22128 0.524874 -0.714485 255 7.48179 0.816419 -0.713432 154 7.21103 0.501318 -0.712956 255 7.21133 0.467195 -0.7127 255 7.22163 -0.202133 -0.71244 255 7.20484 0.444019 -0.711681 255 7.21628 -0.179318 -0.711676 255 7.20026 0.421015 -0.710916 255 7.20293 -0.156395 -0.709892 255 7.18967 0.39769 -0.709386 255 7.19257 0.341214 -0.709386 255 7.20053 -0.0432275 -0.709383 255 7.19962 -0.122397 -0.709382 255 7.18948 0.3637 -0.709131 255 7.19798 -0.0997583 -0.709127 255 7.19106 0.284539 -0.708876 255 7.19192 0.261947 -0.708875 255 7.19437 0.182855 -0.708875 255 7.19491 0.160254 -0.708875 255 7.19628 -0.0771305 -0.708873 255 7.18766 0.318333 -0.708621 255 7.19073 0.23928 -0.70862 255 7.19447 0.0585011 -0.708619 255 7.19468 -0.0206106 -0.708618 255 7.18946 0.216623 -0.708365 255 7.19272 0.00198456 -0.708364 255 7.18942 0.137512 -0.70811 255 7.18999 0.10363 -0.708109 255 7.19028 0.0810425 -0.708109 255 7.1907 0.0245715 -0.708109 255 7.45174 -0.583998 -0.707051 107 7.39941 0.78421 -0.702896 81 7.76475 -0.617328 -0.699825 96 7.73821 0.872671 -0.699603 77 7.37636 -0.55451 -0.697496 92 9.19168 0.345505 -0.696309 40 9.18337 0.403007 -0.695718 40 7.32875 0.753706 -0.693831 110 9.15873 0.373177 -0.693158 44 8.19387 0.872717 -0.693031 71 7.3393 -0.516815 -0.692596 102 7.29931 -0.490811 -0.687451 162 7.29898 -0.433218 -0.686962 239 7.27515 0.690706 -0.686481 183 7.26983 0.72479 -0.686236 146 7.27539 0.644648 -0.68599 237 7.2904 -0.409693 -0.685737 242 7.28101 -0.466537 -0.685001 226 7.25751 0.666105 -0.68403 223 7.2546 0.608446 -0.68305 243 7.26589 -0.385329 -0.682552 245 7.25517 -0.361865 -0.681082 245 7.23866 0.58428 -0.680845 244 7.23895 -0.326802 -0.678878 247 7.58529 -0.567714 -0.67836 92 7.21473 0.559634 -0.67766 247 7.21098 0.50243 -0.676679 247 7.20655 0.536266 -0.676434 247 7.21054 0.47965 -0.676434 245 7.22103 -0.28047 -0.676428 249 7.22011 -0.303154 -0.676428 248 7.20805 0.456756 -0.675944 247 7.21904 -0.223611 -0.675938 249 7.21908 -0.144175 -0.675694 248 7.21661 -0.1668 -0.675449 246 7.21434 -0.24614 -0.675448 249 7.20418 0.422456 -0.675209 246 7.20547 0.399822 -0.675208 246 7.20839 0.343222 -0.675208 247 7.21553 -0.121413 -0.675204 249 7.21376 -0.200743 -0.675204 249 7.20471 0.377088 -0.674963 245 7.20656 0.241103 -0.674472 247 7.21031 -0.0646644 -0.67447 248 7.20992 -0.0986414 -0.674469 248 7.52775 0.824276 -0.674404 93 7.20149 0.320246 -0.674228 246 7.20247 0.29762 -0.674228 245 7.20679 0.161812 -0.674227 247 7.20138 0.274923 -0.673982 247 7.20397 0.195725 -0.673982 246 7.20615 0.0825451 -0.673981 247 7.20653 0.037266 -0.673981 247 7.20661 0.0146259 -0.67398 249 7.20253 -0.0419373 -0.67349 249 7.19737 0.218197 -0.673247 247 7.19933 0.139046 -0.673246 246 7.19973 0.116428 -0.673246 247 7.19645 0.0598592 -0.672756 248 7.19668 -0.0192722 -0.672755 247 7.48597 -0.536983 -0.666461 102 7.45527 0.792386 -0.665538 167 7.39571 0.750605 -0.658071 89 7.41428 -0.508689 -0.657828 126 7.36838 0.724349 -0.654571 99 7.37062 0.701195 -0.654571 98 7.39028 -0.448853 -0.654562 97 7.3809 -0.471589 -0.653629 102 7.37777 -0.424883 -0.652929 99 7.35605 0.664781 -0.652471 99 7.34623 0.640592 -0.651071 94 7.36017 -0.342796 -0.650363 104 7.35725 -0.400592 -0.650363 103 7.35707 -0.365826 -0.65013 99 7.35525 -0.319434 -0.649663 107 7.3304 0.615952 -0.648971 119 7.31738 0.580092 -0.647104 100 7.33286 -0.283932 -0.646864 117 7.31323 0.556623 -0.646404 97 7.31064 0.510226 -0.645704 103 7.32457 -0.237566 -0.645698 116 7.30702 0.533039 -0.64547 89 7.30702 0.475362 -0.645003 101 7.31965 -0.202903 -0.644998 107 7.30989 -0.260131 -0.644064 121 7.29856 0.451755 -0.643836 103 7.30489 -0.156625 -0.643132 110 7.30336 -0.133646 -0.642899 106 7.28805 0.428082 -0.642437 103 7.29483 0.290638 -0.642436 122 7.29033 0.34782 -0.642203 111 7.29642 -0.179406 -0.642198 116 7.28602 0.393505 -0.64197 104 7.29048 -0.0532822 -0.641266 112 7.27929 0.370182 -0.641036 109 7.27971 0.209832 -0.640335 98 7.28158 0.129776 -0.640334 104 7.28206 -0.0990088 -0.640332 106 7.28035 -0.0761173 -0.640099 102 7.27007 0.312445 -0.639636 108 7.27599 0.106791 -0.639634 102 7.27474 0.0267675 -0.6394 105 7.27476 -0.0189414 -0.6394 119 7.27081 0.00389676 -0.638933 111 7.26276 0.243545 -0.638469 100 7.26445 0.186496 -0.638468 99 7.26659 0.0609536 -0.638467 106 7.26302 0.163621 -0.638235 103 7.70007 0.797252 -0.638071 88 7.72413 -0.514223 -0.638061 187 7.72075 -0.562746 -0.638061 67 7.25601 0.266121 -0.637769 103 7.2604 0.0836919 -0.637767 100 8.07155 0.639632 -0.630979 69 7.65704 -0.473289 -0.630398 40 7.65308 -0.533412 -0.630397 82 8.04274 0.599124 -0.627657 117 7.60756 0.763849 -0.627561 75 7.60398 0.73939 -0.626904 109 8.02475 0.572373 -0.625581 66 7.59352 0.702313 -0.625371 120 7.60955 -0.39823 -0.624706 40 7.6069 -0.446031 -0.624705 40 8.0143 0.520996 -0.624127 75 8.01064 0.546027 -0.623919 79 7.6113 0.104223 -0.623834 40 7.60696 0.128083 -0.623396 40 7.59149 -0.361348 -0.622516 40 7.5906 -0.337403 -0.622297 40 7.59062 0.151715 -0.621644 40 7.58721 0.211274 -0.621426 40 7.58785 0.0682199 -0.621206 40 7.57651 -0.420262 -0.621202 40 7.58187 0.187312 -0.620769 40 7.97843 0.455635 -0.619974 69 7.57024 0.0205551 -0.619235 59 7.96902 0.480199 -0.619144 117 7.55622 0.0443061 -0.617702 56 7.91293 0.65158 -0.614577 51 7.79978 0.814974 -0.604404 56 7.77413 -0.534927 -0.599203 86 7.72043 0.769646 -0.595683 149 7.73209 -0.50778 -0.594636 171 7.73166 -0.483369 -0.594428 186 7.73071 -0.252083 -0.593184 40 7.6852 0.741624 -0.591738 179 7.70763 0.378573 -0.591321 40 7.70663 -0.31198 -0.5909 40 7.67759 0.716521 -0.5907 196 7.70888 -0.178744 -0.590693 40 7.70761 -0.227174 -0.590693 40 7.70161 -0.287567 -0.590277 40 7.69969 -0.14226 -0.589656 40 7.68971 -0.335552 -0.589239 40 7.67952 -0.45607 -0.588822 96 7.67016 -0.370982 -0.58737 84 7.6711 -0.033371 -0.586542 40 7.6706 -0.0936182 -0.586541 40 7.67027 -0.117714 -0.586541 40 7.66918 -0.00927712 -0.586335 40 7.66055 -0.201864 -0.58571 40 7.64781 -0.418146 -0.585293 64 7.65504 -0.0574071 -0.584881 40 7.6312 -0.393259 -0.583425 90 7.635 0.0746057 -0.582805 40 7.62534 0.350241 -0.5826 40 7.63274 0.0985575 -0.582598 40 7.62078 0.266069 -0.581769 40 7.62378 0.158313 -0.581768 40 7.61647 0.325822 -0.581562 40 7.61926 0.182153 -0.581353 40 7.62127 0.050481 -0.581352 40 7.61745 0.0145434 -0.580936 40 7.61236 0.217862 -0.58073 40 7.60798 0.289513 -0.580523 40 7.60965 0.241705 -0.580523 40 7.60435 0.133937 -0.579691 40 7.95472 0.792177 -0.577174 72 7.94068 0.464536 -0.573234 86 7.9421 0.439589 -0.573234 86 7.89867 0.499566 -0.569296 85 7.85091 -0.528332 -0.564759 76 7.82953 0.520123 -0.5626 84 7.81147 0.629985 -0.561617 41 7.81341 0.605439 -0.561616 44 7.81594 0.543926 -0.561419 81 7.80932 0.580468 -0.561026 46 7.80715 -0.463665 -0.560033 40 7.80902 -0.303902 -0.559443 40 7.8052 -0.242356 -0.558853 40 7.79098 -0.499512 -0.558654 175 7.80043 -0.266726 -0.558459 40 7.8009 -0.180889 -0.558263 40 7.79996 -0.217647 -0.558263 40 7.76611 0.737085 -0.558073 149 7.79944 -0.156334 -0.558066 40 7.78815 -0.327531 -0.557474 40 7.75649 0.711634 -0.556891 126 7.77879 -0.0702933 -0.555901 40 7.7672 -0.351031 -0.555505 40 7.75294 -0.435821 -0.554519 40 7.7581 -0.130985 -0.553931 40 7.72325 -0.0453417 -0.550387 40 7.72266 -0.105994 -0.550387 40 7.7174 0.0153258 -0.549797 40 7.71532 0.0395693 -0.5496 40 7.69863 -0.408323 -0.549006 68 7.70117 0.25737 -0.548617 40 7.70264 0.20898 -0.548617 40 7.70521 0.0637573 -0.548616 40 7.70248 0.124246 -0.548419 40 7.70283 0.100049 -0.548419 40 7.70006 0.14841 -0.548222 40 7.69398 0.232962 -0.547829 40 7.69558 0.172523 -0.547829 40 7.67801 -0.382971 -0.54684 46 8.12582 0.102555 -0.545223 40 7.95197 0.78951 -0.532587 168 7.90152 -0.248597 -0.524586 40 7.87547 0.47032 -0.523105 94 7.87192 -0.495601 -0.522911 104 7.87363 0.432965 -0.522733 73 7.85806 0.494005 -0.521618 87 7.86249 -0.334059 -0.52124 64 7.84202 0.554821 -0.520503 80 7.82362 0.751519 -0.520318 206 7.85094 -0.271861 -0.519939 40 7.8323 0.578843 -0.519759 78 7.82057 0.627381 -0.519016 82 7.82866 0.51676 -0.519015 86 7.82175 -0.467947 -0.518078 218 7.80152 0.687514 -0.517715 63 7.83174 -0.0128226 -0.51771 40 7.80464 0.60137 -0.517343 98 7.81025 -0.295152 -0.516221 40 7.81165 -0.184671 -0.516036 40 7.77553 0.709767 -0.515485 205 7.80506 -0.209071 -0.515478 40 7.80571 -0.0496502 -0.515293 40 7.79335 -0.441781 -0.51529 40 7.80325 -0.0986752 -0.515107 40 7.80153 -0.0741477 -0.514921 40 7.78746 0.403405 -0.514553 48 7.79029 -0.159753 -0.513991 40 7.77944 -0.404277 -0.513803 51 7.77676 0.378319 -0.513438 40 7.76205 0.0114455 -0.511204 40 7.7569 -0.134804 -0.510831 40 7.73673 0.230154 -0.509161 40 7.73523 0.120684 -0.508789 40 7.72379 0.314771 -0.508232 40 7.72807 0.181274 -0.508231 40 7.72685 0.144812 -0.508045 40 7.72163 0.266084 -0.50786 40 7.71625 0.350875 -0.507675 40 7.71877 0.290262 -0.507675 40 7.71751 0.205252 -0.507302 40 7.71393 0.0718019 -0.506743 46 7.7011 -0.376217 -0.506368 68 7.70025 -0.351937 -0.506182 51 8.05515 -0.437703 -0.488614 66 8.02363 -0.499132 -0.486187 87 7.99221 0.748541 -0.485157 125 7.98408 0.60889 -0.483424 40 7.98811 -0.459021 -0.482895 200 7.96595 -0.294615 -0.480298 40 7.93299 0.718063 -0.479786 199 7.9573 -0.256719 -0.479432 40 7.92925 0.692638 -0.479266 86 7.93717 0.567866 -0.479091 45 7.94058 0.517987 -0.479091 72 7.93493 0.54267 -0.478745 96 7.94042 0.455389 -0.478744 60 7.93497 0.480109 -0.478398 116 7.9468 -0.206367 -0.478393 40 7.94014 -0.231139 -0.477873 40 7.93334 -0.05638 -0.477008 40 7.92269 -0.118504 -0.476141 40 7.92117 -0.0811413 -0.475968 40 7.9183 -0.143309 -0.475794 40 7.91555 -0.0313266 -0.475448 40 7.90387 -0.167842 -0.474581 40 7.89337 0.403112 -0.474412 40 7.89967 -0.00639355 -0.474062 40 7.89032 0.340868 -0.473892 40 7.8903 -0.341232 -0.473886 57 7.88523 0.365483 -0.473545 40 7.87144 0.315346 -0.472159 40 7.87542 0.191667 -0.472158 40 7.87599 0.166925 -0.472158 40 7.87756 0.0555678 -0.472157 40 7.87769 0.0308195 -0.472157 40 7.87085 0.278185 -0.471985 40 7.87448 0.142152 -0.471984 40 7.87489 0.117413 -0.471984 40 7.86846 0.228623 -0.471638 40 7.86148 -0.315147 -0.471288 109 7.8634 0.0802194 -0.470944 40 7.84541 -0.363843 -0.470074 105 7.83782 0.252479 -0.469039 40 8.14517 -0.405768 -0.453325 40 8.14117 -0.444045 -0.453162 40 8.11187 -0.4681 -0.450883 86 8.07065 0.728365 -0.449102 148 8.07618 0.639418 -0.448939 40 8.05687 0.548735 -0.446822 40 8.07126 -0.262639 -0.446816 40 8.05679 -0.376281 -0.446002 40 8.03642 0.610736 -0.445521 40 8.05772 -0.173584 -0.445515 40 8.05713 -0.198898 -0.445515 40 8.05623 -0.148239 -0.445352 40 8.04216 -0.236499 -0.444375 40 8.03058 0.458194 -0.444218 40 8.01842 0.583974 -0.443893 40 8.03966 0.00356877 -0.443889 40 8.01679 0.520573 -0.443404 40 8.0164 0.495255 -0.443241 40 8.02495 -0.10994 -0.442749 40 8.0081 0.431598 -0.442264 40 8.0192 0.0916751 -0.442262 40 8.01965 -0.0342966 -0.442261 40 8.0195 -0.0594908 -0.442261 40 8.00532 -0.0845824 -0.441121 40 8.00116 0.204572 -0.440961 40 7.99618 -0.348478 -0.440956 40 8.0016 0.0537059 -0.440797 40 7.99974 0.0285543 -0.440634 40 7.99579 0.179281 -0.440472 40 7.99126 -0.323133 -0.440468 67 7.99495 0.116442 -0.440309 40 7.99071 -0.285407 -0.440306 40 7.98179 0.254211 -0.439496 40 7.97263 0.141099 -0.438519 40 7.9427 0.227861 -0.436241 40 8.29386 -0.461696 -0.39903 93 8.2315 -0.393194 -0.39419 78 8.20263 0.705437 -0.393611 62 8.19399 0.639949 -0.392583 77 8.20831 -0.41787 -0.392576 70 8.20679 -0.366096 -0.392283 85 8.20591 -0.340221 -0.392136 43 8.15708 0.675865 -0.390089 75 8.16203 0.585995 -0.389942 93 8.15046 0.520906 -0.388768 118 8.14026 0.610204 -0.388475 79 8.1584 -0.209791 -0.388323 119 8.14409 0.494841 -0.388181 125 8.15304 -0.184 -0.387883 118 8.13485 0.545617 -0.387741 112 8.14035 0.456144 -0.387741 114 8.14174 0.430562 -0.38774 115 8.14884 -0.0686574 -0.387443 122 8.14312 0.0209523 -0.387004 119 8.14161 -0.158116 -0.387003 122 8.14104 -0.0429907 -0.386857 118 8.14061 -0.094142 -0.386856 118 8.12712 0.404241 -0.386567 114 8.13703 0.0465179 -0.386564 120 8.13628 -0.119643 -0.386563 118 8.12805 0.340326 -0.386419 108 8.12908 0.314787 -0.386419 104 8.13272 0.199836 -0.386418 105 8.13141 -0.247361 -0.386415 85 8.13131 0.174251 -0.386272 103 8.13204 0.135933 -0.386271 109 8.1277 -0.298364 -0.386268 42 8.12731 0.250822 -0.386125 109 8.12806 0.225286 -0.386125 110 8.12675 0.0847878 -0.385831 112 8.11639 0.37819 -0.385686 107 8.12519 -0.0045649 -0.385683 117 8.11807 0.288858 -0.385539 115 8.11647 0.110213 -0.385097 112 8.45749 0.720365 -0.364899 79 8.44606 -0.370576 -0.362587 102 8.44422 -0.410374 -0.362587 80 8.38217 0.687195 -0.359614 128 8.40133 -0.342315 -0.359471 106 8.37435 0.660046 -0.358936 92 8.37843 -0.315095 -0.357845 107 8.34752 0.618274 -0.356903 136 8.35943 -0.288148 -0.35649 127 8.33151 0.590718 -0.355683 121 8.35176 0.105771 -0.35568 169 8.32537 0.563974 -0.355141 127 8.31997 0.524212 -0.354599 96 8.31911 0.471686 -0.354327 96 8.31361 0.497567 -0.354057 125 8.3135 -0.129908 -0.353104 100 8.31105 -0.155997 -0.352968 103 8.30988 -0.103754 -0.352833 98 8.30054 -0.0123919 -0.352156 80 8.28669 0.443631 -0.352024 122 8.28792 0.378433 -0.351888 112 8.29647 -0.0384611 -0.351885 96 8.29619 -0.0775584 -0.351884 96 8.28271 0.404268 -0.351617 113 8.2904 0.0527017 -0.351479 98 8.28266 0.313006 -0.351345 121 8.2856 0.221914 -0.351345 131 8.28621 0.0787023 -0.351208 103 8.27962 0.286835 -0.351074 125 8.27512 0.351759 -0.350939 121 8.27828 0.195671 -0.350802 98 8.27692 -0.246514 -0.350799 137 8.2745 0.260613 -0.350667 100 8.2746 0.0135596 -0.350395 124 8.26833 -0.194305 -0.350122 51 8.2629 0.169283 -0.349718 119 8.19587 -0.21859 -0.345243 52 8.63913 0.63728 -0.32828 170 8.61306 0.689862 -0.326913 92 8.59771 -0.39343 -0.324792 64 8.57935 0.660153 -0.324676 60 8.59093 -0.366054 -0.324295 62 8.58657 -0.325321 -0.323923 124 8.55364 -0.297063 -0.32181 123 8.53249 0.589329 -0.321443 97 8.54256 -0.269775 -0.321064 105 8.50746 -0.241801 -0.318827 166 8.49047 0.559767 -0.318709 115 8.47824 0.532256 -0.317838 125 8.46896 0.411621 -0.316843 118 8.47458 -0.200802 -0.316714 106 8.45994 0.504492 -0.316595 112 8.46364 0.438037 -0.316595 124 8.46482 0.371465 -0.31647 117 8.45624 0.464313 -0.316222 110 8.45092 0.0388179 -0.3151 101 8.43802 0.343821 -0.31473 115 8.43706 0.317243 -0.314605 124 8.44071 0.197934 -0.314604 95 8.44277 0.0653283 -0.314603 103 8.43647 0.277419 -0.314481 124 8.43838 0.105081 -0.314355 106 8.43331 0.250805 -0.314232 121 8.43406 0.224312 -0.314232 127 8.42757 0.157939 -0.313734 116 8.42204 0.131389 -0.313361 111 8.41307 0.0123317 -0.312738 79 8.40509 -0.0140592 -0.312241 56 8.38587 -0.145715 -0.311121 125 8.37299 -0.0533658 -0.310252 58 8.34683 -0.0793409 -0.308636 94 8.33856 -0.105439 -0.308139 57 8.30554 -0.170172 -0.306149 78 8.85763 0.554379 -0.288958 100 8.80712 0.495526 -0.285922 142 8.79939 0.453477 -0.28536 121 8.79157 0.522324 -0.285136 95 8.75823 0.575501 -0.28345 79 8.75889 0.423682 -0.282999 118 8.76723 -0.182222 -0.282995 198 8.74622 0.395492 -0.282212 125 8.74798 0.354266 -0.282212 131 8.75012 0.230508 -0.282098 125 8.74205 0.299001 -0.281761 117 8.74475 -0.0856485 -0.281646 157 8.74244 -0.113101 -0.281534 151 8.73696 0.271334 -0.281424 120 8.74116 -0.0169695 -0.281422 155 8.73867 -0.209178 -0.28142 151 8.73309 0.32614 -0.281312 139 8.73483 0.202601 -0.281199 129 8.73518 0.0104667 -0.281085 157 8.73198 -0.236486 -0.281083 140 8.73143 0.175065 -0.280974 142 8.73108 -0.0444095 -0.28086 156 8.72512 0.0378411 -0.280523 197 9.67668 0.436761 -0.280405 255 8.7148 -0.277172 -0.280183 117 8.69892 -0.331432 -0.279396 55 8.66381 0.610043 -0.278279 66 8.64991 0.636341 -0.277604 58 8.66894 0.0782819 -0.277375 73 8.65393 -0.35708 -0.276922 84 9.32336 0.465791 -0.262596 255 9.33039 -0.105832 -0.26239 220 9.28402 0.62488 -0.261079 66 9.0146 0.224358 -0.246506 255 8.65558 -0.0690997 -0.228189 249 8.62961 0.460248 -0.227484 255 8.62752 0.0802851 -0.226773 255 8.62578 -0.190752 -0.226771 255 8.6022 0.485968 -0.226169 255 8.59771 0.269246 -0.225459 255 8.56643 -0.162335 -0.223736 208 8.56072 0.14711 -0.223435 122 8.54384 0.0529165 -0.222523 255 8.49468 0.239623 -0.220197 255 8.3143 -4.65766e-05 -0.210886 82 8.3142 -0.0392268 -0.210886 103 8.97822 0.710748 -0.19481 180 8.91866 0.677662 -0.192027 255 8.92764 -0.346877 -0.19157 255 8.90472 -0.318042 -0.190493 255 8.87691 0.64632 -0.190051 116 8.87971 -0.289296 -0.189326 100 8.71177 -0.120021 -0.181606 238 8.68747 0.440153 -0.180982 140 8.67365 0.603531 -0.180804 121 8.68995 -0.215368 -0.180708 149 8.68914 -0.160732 -0.180619 217 8.68859 -0.188029 -0.180618 180 8.68723 -0.242617 -0.180618 122 8.66842 0.562109 -0.180444 120 8.6641 0.466196 -0.179995 149 8.65384 0.506529 -0.179636 132 8.64821 0.533455 -0.179457 99 8.53003 0.216975 -0.173529 255 8.52207 0.283744 -0.17326 255 8.49951 0.149315 -0.172092 255 8.48719 0.309176 -0.171734 255 8.49054 0.0690915 -0.171642 255 8.4773 0.402174 -0.171465 90 8.47021 0.335156 -0.171016 244 8.47274 0.188708 -0.170925 255 8.47435 -0.0908322 -0.170923 78 8.47031 0.0954785 -0.170745 255 8.4614 0.241624 -0.170477 255 8.44317 0.360577 -0.169849 255 8.45062 -0.0641007 -0.169846 228 8.36808 0.120307 -0.166166 255 8.33498 0.00188437 -0.164639 152 8.32096 -0.0243036 -0.16401 81 9.31029 -0.419815 -0.149906 222 8.93507 0.694509 -0.136121 221 8.89874 0.243229 -0.133806 244 8.88239 0.173039 -0.133112 252 8.87948 0.214849 -0.133036 254 8.88195 0.0474477 -0.133034 246 8.84933 0.116876 -0.131802 93 8.84978 0.0751717 -0.131802 220 8.62511 0.141678 -0.123172 67 8.33449 -0.00624114 -0.111921 64 8.32437 -0.0454282 -0.111535 72 9.3004 0.0504065 -0.0910652 255 8.87821 0.284126 -0.0775889 65 8.79836 0.0877495 -0.074879 243 8.73359 0.237881 -0.0728809 75 8.48252 0.203629 -0.0647552 99 8.48424 0.110346 -0.0647545 77 8.47786 0.136883 -0.0645612 105 8.44914 0.17616 -0.0636587 129 8.88908 0.26174 -0.0324773 222 8.87786 0.233534 -0.0321519 255 8.85887 0.191317 -0.0316097 255 8.84391 0.135457 -0.0311757 255 8.83429 0.107582 -0.0309045 255 8.82345 0.162928 -0.0306339 255 8.79072 0.0657493 -0.0297117 255 9.31331 0.276585 0.0180044 255 8.99841 0.139068 0.0244927 255 8.93282 0.109795 0.0258394 240 8.89909 0.207173 0.0264915 255 8.89597 0.165152 0.0265734 255 8.8904 0.234893 0.0266546 255 8.86914 0.0809601 0.0271453 255 8.94153 0.186473 0.0669829 90 8.93252 0.130171 0.0671407 93 8.86208 0.157197 0.0682425 253 9.01112 0.123023 0.125116 118 9.00547 0.0946329 0.125171 105 8.9825 0.249601 0.125352 79 8.9807 0.150742 0.125389 96 8.93326 0.220004 0.125808 175 8.92991 0.191841 0.125845 253 8.9998 0.0869372 0.182165 98 8.95508 0.142913 0.182286 255 8.92231 0.184541 0.182373 228 8.91169 0.212359 0.1824 125 7.19998 -0.0609641 0.187104 52 7.28146 0.880765 0.230079 40 7.28858 0.904902 0.230111 40 7.30604 0.942134 0.230182 40 7.73909 -0.14892 0.231396 255 7.7943 -0.186539 0.231577 255 7.80967 -0.211403 0.231629 255 8.88804 0.209848 0.235103 172 8.89465 0.182062 0.235123 255 8.91318 0.154484 0.235181 255 8.93731 0.239251 0.235264 75 9.0078 0.113942 0.235484 83 9.02811 0.0858926 0.235549 219 +unknow 0.971609 1 0 546 -1.44272 -20.1616 -1.43739 152 -1.50474 -20.1391 -1.43593 136 -2.00527 -20.0433 -1.43169 106 -2.0958 -19.996 -1.4286 133 -2.15629 -19.9675 -1.42681 127 -2.21792 -19.9507 -1.42599 140 -2.30351 -19.8668 -1.41997 135 -2.64563 -19.8181 -1.41948 150 -2.70414 -19.782 -1.4172 142 -2.79733 -19.7691 -1.4172 141 -2.85518 -19.7306 -1.41475 136 -2.91657 -19.7176 -1.41443 136 -2.97584 -19.6906 -1.41296 139 -3.1276 -19.6489 -1.4115 139 -3.06555 -19.6566 -1.41133 138 -3.27562 -19.5863 -1.4084 138 -3.18266 -19.5976 -1.40808 142 -3.33515 -19.5642 -1.40743 139 -3.39456 -19.5418 -1.40645 140 -3.48418 -19.5118 -1.40531 136 -2.55914 -19.6385 -1.40402 138 -3.54086 -19.4753 -1.40319 134 -3.60166 -19.4621 -1.40303 143 -3.65729 -19.4213 -1.40059 136 -3.7484 -19.4019 -1.40042 137 -2.33745 -19.6179 -1.40012 126 -2.39883 -19.6085 -1.39995 125 -2.45969 -19.5949 -1.39946 119 -3.80666 -19.3763 -1.39928 135 -3.86557 -19.3545 -1.39847 136 -3.95356 -19.3205 -1.39717 135 -4.00899 -19.2826 -1.39505 139 -4.06587 -19.2523 -1.39358 138 -3.57025 -21.3199 -1.37755 187 -3.67 -21.2989 -1.37725 185 -3.73551 -21.2794 -1.37667 187 -3.49838 -21.3015 -1.37535 196 -3.79845 -21.246 -1.37505 185 -3.89744 -21.222 -1.37461 187 -3.9604 -21.19 -1.37314 181 -4.02583 -21.1716 -1.3727 191 -4.09118 -21.153 -1.37226 192 -4.18691 -21.1139 -1.37079 192 -4.25243 -21.0967 -1.3705 187 -4.31466 -21.0637 -1.36903 188 -4.41181 -21.0334 -1.3683 186 -4.47661 -21.0136 -1.36786 188 -4.53879 -20.9819 -1.36653 186 -4.60081 -20.95 -1.36521 186 -4.69904 -20.9261 -1.36507 183 -4.75853 -20.8841 -1.36301 183 -4.81959 -20.8496 -1.36154 179 -4.91687 -20.8227 -1.36125 183 -4.97946 -20.7956 -1.36037 183 -5.0372 -20.7488 -1.35802 180 -5.12769 -20.6958 -1.35582 179 -5.66994 -20.3966 -1.34466 218 -5.73399 -20.3787 -1.34466 167 -5.81948 -20.315 -1.34188 176 -5.88272 -20.2947 -1.34173 173 -5.9953 -20.2076 -1.33791 169 -5.92953 -20.2187 -1.33733 221 -6.08699 -20.1677 -1.33703 173 -5.51565 -20.0874 -1.31973 149 -2.84537 -20.0878 -1.27987 161 -5.27335 -19.5683 -1.27823 185 -5.20515 -19.5598 -1.27632 174 -5.14316 -19.5741 -1.27618 205 -4.92177 -19.6063 -1.27442 176 -5.04487 -19.5749 -1.27442 186 -4.97593 -19.5617 -1.27222 191 -2.88256 -19.6855 -1.25098 141 -2.06988 -19.7253 -1.24644 158 -2.4988 -19.6414 -1.24394 150 -2.71379 -19.6068 -1.2435 144 -2.55502 -19.5919 -1.24086 208 -1.9989 -19.6444 -1.23999 200 -2.36881 -19.6032 -1.23999 217 -2.43014 -19.5937 -1.23984 255 -2.27548 -19.6062 -1.2394 176 -2.20731 -19.5558 -1.23515 181 -1.50828 -20.4969 -1.18375 86 -4.80532 -19.7733 -1.16989 79 -5.38165 -19.5788 -1.1669 116 -5.28777 -19.5981 -1.1665 120 -5.22362 -19.605 -1.16582 155 -5.06254 -19.6184 -1.16393 100 -5.15342 -19.5885 -1.16352 168 -4.99304 -19.6032 -1.16176 236 -4.70756 -19.6388 -1.15946 142 -4.86165 -19.6013 -1.15946 134 -4.9203 -19.5743 -1.15864 128 -4.64036 -19.6302 -1.15784 171 -4.54422 -19.6363 -1.15675 192 -4.47721 -19.6271 -1.15513 204 -4.41248 -19.6275 -1.15418 203 -1.53933 -20.0504 -1.15368 153 -4.31484 -19.6247 -1.15256 205 -4.24854 -19.6167 -1.15107 203 -4.18234 -19.6084 -1.14958 201 -4.11787 -19.6078 -1.14863 210 -4.02224 -19.6114 -1.14755 203 -3.74052 -19.6447 -1.14606 255 -3.95433 -19.5926 -1.14538 210 -3.6755 -19.6387 -1.14484 255 -3.58256 -19.6538 -1.14471 255 -3.89044 -19.5932 -1.14457 232 -3.79392 -19.5897 -1.14308 249 -3.51626 -19.6394 -1.14295 255 -2.08842 -19.8341 -1.14243 136 -3.44426 -19.5914 -1.13889 255 -3.38236 -19.6002 -1.13875 247 -2.79486 -19.6845 -1.13822 214 -3.22607 -19.6124 -1.1378 232 -3.28767 -19.6021 -1.1378 236 -3.16255 -19.6106 -1.13699 233 -3.06734 -19.6075 -1.13578 240 -3.00334 -19.6013 -1.13469 247 -2.94145 -19.6086 -1.13456 247 -2.8761 -19.5921 -1.1328 254 -2.44215 -19.6308 -1.13145 161 -2.56442 -19.6072 -1.13091 252 -2.50256 -19.6131 -1.13077 234 -2.65652 -19.5929 -1.13077 162 -2.22216 -19.6208 -1.12901 238 -2.34539 -19.6064 -1.12901 129 -2.00589 -19.6401 -1.12875 255 -2.28287 -19.6058 -1.12847 240 -1.94282 -19.6324 -1.1278 241 -2.15511 -19.5781 -1.12563 82 -5.64055 -19.6191 -1.05953 162 -5.48522 -19.659 -1.05928 170 -1.50792 -20.292 -1.05548 103 -5.52951 -19.5802 -1.0553 217 -5.33367 -19.591 -1.0527 126 -4.83344 -19.6937 -1.05109 110 -5.233 -19.5851 -1.05071 197 -5.38453 -19.5357 -1.05021 128 -5.16582 -19.5802 -1.04934 233 -4.94826 -19.6281 -1.04885 146 -5.0099 -19.6124 -1.04885 131 -5.09417 -19.5577 -1.04686 227 -4.86235 -19.5467 -1.04264 144 -4.70071 -19.5513 -1.04053 255 -4.35872 -19.614 -1.03954 255 -4.63417 -19.5446 -1.03916 255 -4.57092 -19.5513 -1.03866 255 -4.25899 -19.6012 -1.03743 255 -4.47291 -19.5473 -1.03705 255 -4.40839 -19.5477 -1.03618 255 -1.54658 -19.9688 -1.0356 215 -4.19067 -19.5833 -1.03544 255 -4.12871 -19.5944 -1.03532 255 -4.06346 -19.5897 -1.0342 255 -3.96991 -19.6027 -1.03383 255 -3.90438 -19.5955 -1.03259 255 -2.7576 -19.7754 -1.03173 152 -3.83894 -19.5881 -1.03134 255 -3.74545 -19.6001 -1.03097 255 -3.67903 -19.5863 -1.02936 255 -2.13011 -19.8066 -1.02888 142 -3.61165 -19.5663 -1.02737 255 -3.51869 -19.5792 -1.02712 255 -3.45612 -19.5843 -1.02675 255 -3.33232 -19.6017 -1.0265 255 -3.39389 -19.5911 -1.0265 255 -3.23893 -19.6112 -1.02613 255 -3.17699 -19.6193 -1.02601 255 -3.11281 -19.6135 -1.02502 255 -2.95717 -19.6274 -1.0244 255 -3.01759 -19.6102 -1.0239 255 -2.89315 -19.6208 -1.0234 255 -2.60432 -19.5767 -1.01819 140 -2.45024 -19.5945 -1.01807 130 -2.78842 -19.5493 -1.01806 255 -2.51076 -19.5788 -1.01757 200 -2.3872 -19.5903 -1.01732 167 -2.66254 -19.5447 -1.0167 85 -2.01588 -19.6159 -1.01633 255 -2.29251 -19.5815 -1.01608 164 -1.95004 -19.5804 -1.01372 255 -2.16388 -19.5459 -1.01298 97 -2.22299 -19.5192 -1.01173 254 -1.4684 -20.6741 -0.955742 251 -5.91844 -19.7736 -0.950848 138 -5.79938 -19.7132 -0.94568 218 -5.72243 -19.6795 -0.942646 238 -5.49609 -19.7066 -0.940627 181 -5.6496 -19.659 -0.9404 237 -5.54663 -19.6488 -0.938266 240 -5.13476 -19.7213 -0.936136 116 -5.41251 -19.6448 -0.93602 140 -5.24985 -19.6558 -0.934224 196 -5.34242 -19.6309 -0.934222 138 -5.1825 -19.651 -0.932988 202 -1.50328 -20.2572 -0.932478 170 -5.02112 -19.664 -0.931417 194 -4.79614 -19.6831 -0.929397 190 -4.8874 -19.6544 -0.929059 121 -4.94427 -19.6196 -0.927934 139 -4.71804 -19.6301 -0.925465 255 -4.6536 -19.6331 -0.924791 255 -4.58783 -19.6301 -0.923781 255 -4.49173 -19.636 -0.922883 255 -4.42653 -19.6344 -0.921985 255 -4.36138 -19.6326 -0.921087 255 -2.21142 -19.9832 -0.920779 142 -1.54995 -20.0293 -0.91989 136 -4.26376 -19.6295 -0.919739 247 -4.20165 -19.6408 -0.919628 251 -2.70783 -19.8837 -0.918637 165 -4.13543 -19.6325 -0.918392 255 -4.07011 -19.6277 -0.917382 255 -3.97363 -19.6271 -0.916259 255 -3.90885 -19.6238 -0.915361 255 -3.84566 -19.6282 -0.914912 255 -3.74977 -19.6284 -0.913902 255 -3.68589 -19.6283 -0.913229 255 -3.62169 -19.6261 -0.912443 255 -3.52671 -19.6292 -0.911658 255 -3.46365 -19.6323 -0.911209 255 -3.39993 -19.6313 -0.910536 255 -3.33658 -19.632 -0.909975 255 -3.24145 -19.6317 -0.909077 255 -3.17912 -19.6379 -0.908853 255 -3.11586 -19.6379 -0.908292 255 -3.02208 -19.6445 -0.907844 255 -2.95888 -19.644 -0.907282 255 -2.74025 -19.6575 -0.906274 255 -2.02742 -19.7337 -0.905722 255 -2.89311 -19.6255 -0.90571 255 -2.79976 -19.633 -0.905374 255 -2.51665 -19.629 -0.903018 100 -2.45473 -19.6349 -0.902907 201 -2.60808 -19.609 -0.902567 120 -1.95897 -19.6744 -0.902015 255 -2.39064 -19.6226 -0.901784 138 -2.23623 -19.6388 -0.901673 108 -2.0813 -19.6498 -0.901339 255 -2.29654 -19.6198 -0.900998 118 -5.93658 -19.7162 -0.83228 135 -5.85 -19.6525 -0.827932 239 -5.40637 -19.7398 -0.826016 174 -5.74324 -19.6319 -0.825405 254 -5.66928 -19.6077 -0.82318 251 -5.59332 -19.5755 -0.820551 255 -4.9432 -19.7435 -0.820257 104 -5.43458 -19.6015 -0.819643 215 -5.49288 -19.5728 -0.819035 255 -1.53367 -20.2269 -0.816865 127 -5.29298 -19.5678 -0.816105 149 -5.19092 -19.5558 -0.814184 134 -5.12844 -19.5682 -0.813983 129 -5.06543 -19.5784 -0.81368 109 -4.96522 -19.5711 -0.812063 178 -4.74217 -19.5934 -0.810448 255 -4.67873 -19.6005 -0.810044 255 -4.83252 -19.5631 -0.810042 255 -4.61529 -19.6073 -0.80964 255 -4.5523 -19.6159 -0.809338 255 -4.45447 -19.6137 -0.808125 255 -4.39108 -19.6198 -0.807721 255 -4.32596 -19.6179 -0.806913 255 -2.52039 -19.9083 -0.805826 214 -4.22669 -19.6069 -0.805296 255 -2.39092 -19.8881 -0.804007 150 -4.15756 -19.5849 -0.803476 255 -4.0008 -19.6032 -0.80277 255 -3.93722 -19.6059 -0.802266 255 -2.60472 -19.825 -0.802183 101 -3.87366 -19.6084 -0.801761 255 -4.08656 -19.5529 -0.801151 255 -3.80859 -19.6028 -0.800851 255 -3.71392 -19.6088 -0.800246 255 -2.44251 -19.7933 -0.799556 104 -3.64678 -19.5909 -0.798729 255 -3.58232 -19.5865 -0.797921 255 -3.48645 -19.5835 -0.796911 255 -3.42214 -19.5787 -0.796103 255 -3.35994 -19.5854 -0.795901 255 -3.29806 -19.5939 -0.795801 255 -2.27795 -19.7345 -0.795613 186 -3.20406 -19.5993 -0.795296 255 -3.1412 -19.6014 -0.794893 255 -3.07836 -19.6033 -0.794489 255 -2.98503 -19.6117 -0.794187 255 -2.92162 -19.6091 -0.793581 255 -2.76556 -19.6176 -0.792875 255 -2.85768 -19.6024 -0.792773 255 -2.69924 -19.5926 -0.791156 255 -1.98795 -19.6594 -0.790256 255 -2.04614 -19.6193 -0.788536 255 -2.13857 -19.6094 -0.788535 255 -2.19993 -19.6006 -0.788432 255 -2.63041 -19.5475 -0.788426 255 -5.9349 -19.7689 -0.717083 131 -5.26595 -19.9018 -0.714669 170 -5.19938 -19.9027 -0.713952 186 -5.84503 -19.6936 -0.712687 218 -5.11846 -19.8474 -0.710632 173 -5.73545 -19.6634 -0.709996 237 -5.33068 -19.7687 -0.709642 176 -1.52905 -20.3775 -0.707901 121 -5.66042 -19.6352 -0.707843 245 -5.58672 -19.6106 -0.70587 255 -5.48621 -19.6078 -0.704525 255 -5.41876 -19.6038 -0.703538 255 -5.35033 -19.5956 -0.702373 255 -4.89937 -19.6329 -0.698879 255 -4.83387 -19.6327 -0.698162 255 -4.73757 -19.6397 -0.697445 255 -4.95323 -19.5864 -0.697442 255 -4.67217 -19.6389 -0.696728 255 -4.59457 -19.5854 -0.693588 255 -4.52854 -19.5803 -0.692692 255 -4.21876 -19.6412 -0.692337 255 -4.43271 -19.5858 -0.691975 255 -4.15374 -19.6387 -0.69162 255 -4.3664 -19.5782 -0.690989 255 -4.08717 -19.6282 -0.690544 255 -4.30061 -19.5723 -0.690092 255 -3.98909 -19.6198 -0.689289 255 -3.92588 -19.6244 -0.688931 255 -3.7976 -19.6232 -0.687766 255 -3.70361 -19.633 -0.687408 255 -3.64155 -19.6426 -0.68732 255 -3.57592 -19.6323 -0.686333 255 -3.85118 -19.57 -0.685881 255 -3.48128 -19.6371 -0.685796 255 -3.41788 -19.6381 -0.685348 255 -3.3545 -19.6389 -0.684901 255 -3.25802 -19.6308 -0.683825 255 -3.1318 -19.6331 -0.683019 255 -3.19347 -19.6232 -0.683018 255 -3.06674 -19.6212 -0.682033 255 -2.97335 -19.6295 -0.681765 255 -2.9108 -19.6328 -0.681497 255 -2.84882 -19.6398 -0.681408 255 -2.75047 -19.6115 -0.679525 255 -2.6867 -19.6042 -0.678808 255 -2.03807 -19.6762 -0.678548 246 -1.97604 -19.6805 -0.678459 209 -2.623 -19.5967 -0.678091 255 -2.56091 -19.6009 -0.677912 255 -2.46777 -19.6068 -0.677644 255 -2.12821 -19.6425 -0.67747 255 -2.40544 -19.6085 -0.677376 255 -2.25091 -19.6228 -0.677198 255 -2.18903 -19.6278 -0.67711 255 -2.34219 -19.6021 -0.676749 255 -5.88304 -19.7102 -0.58317 142 -5.76298 -19.6457 -0.579475 185 -5.68614 -19.6119 -0.577397 203 -5.61067 -19.5816 -0.575472 217 -5.51127 -19.5828 -0.574472 230 -5.43896 -19.5616 -0.572932 226 -5.36897 -19.5477 -0.571701 230 -5.30386 -19.551 -0.571163 231 -5.20753 -19.5603 -0.570548 240 -5.1384 -19.5476 -0.569394 238 -5.07091 -19.5405 -0.56847 245 -4.97728 -19.5583 -0.56824 247 -4.91043 -19.5525 -0.567394 248 -4.84512 -19.5524 -0.566779 251 -4.74819 -19.5556 -0.56601 255 -4.68205 -19.551 -0.56524 245 -4.61875 -19.5578 -0.564933 255 -4.55046 -19.543 -0.563779 251 -4.45563 -19.5525 -0.563318 251 -4.39022 -19.5489 -0.562626 247 -4.32618 -19.5509 -0.562164 249 -4.22932 -19.5496 -0.561318 247 -4.16453 -19.5471 -0.560703 247 -4.10062 -19.5484 -0.560242 248 -4.00402 -19.546 -0.559396 238 -3.94021 -19.5467 -0.558935 247 -3.87722 -19.5511 -0.558628 229 -3.81231 -19.5456 -0.557935 207 -3.71566 -19.5398 -0.557012 232 -3.49916 -19.5716 -0.556707 255 -3.59099 -19.5529 -0.556629 244 -3.65092 -19.5337 -0.55632 255 -3.43418 -19.5628 -0.555938 255 -3.371 -19.5636 -0.555554 255 -3.30784 -19.5643 -0.55517 255 -3.21398 -19.5698 -0.554786 255 -3.1496 -19.562 -0.554093 255 -3.0875 -19.5679 -0.55394 255 -2.00696 -19.702 -0.553724 205 -2.99281 -19.5664 -0.553325 255 -2.93103 -19.5738 -0.553249 243 -2.15921 -19.6638 -0.552875 185 -2.09721 -19.6685 -0.552799 210 -2.86777 -19.571 -0.552788 221 -2.65187 -19.5974 -0.552637 204 -2.71342 -19.589 -0.552636 209 -2.77495 -19.5803 -0.552635 209 -2.37408 -19.629 -0.552487 209 -2.28108 -19.636 -0.552334 208 -2.43523 -19.6174 -0.552332 200 -2.58923 -19.5977 -0.55233 206 -2.21893 -19.6391 -0.552181 206 -2.49583 -19.6018 -0.552023 193 -2.10556 -20.6897 -0.461492 73 -5.93488 -19.8942 -0.460279 186 -2.15715 -20.5537 -0.457301 123 -5.80635 -19.803 -0.456285 95 -5.70699 -19.6924 -0.451968 85 -2.23373 -20.3565 -0.451242 132 -5.52359 -19.6346 -0.448554 173 -5.45282 -19.6191 -0.44746 245 -2.28104 -20.2004 -0.446407 137 -5.37905 -19.5918 -0.445978 251 -5.31435 -19.597 -0.445592 251 -5.21324 -19.589 -0.444498 248 -5.14713 -19.5879 -0.443919 239 -4.98871 -19.6103 -0.443341 231 -5.07957 -19.5807 -0.443146 228 -2.33149 -20.08 -0.442733 115 -4.92175 -19.6045 -0.442633 243 -4.85536 -19.6005 -0.441989 242 -4.75684 -19.5979 -0.441153 247 -4.69386 -19.6069 -0.44096 237 -4.62676 -19.5982 -0.440188 248 -4.56382 -19.6068 -0.439995 250 -2.41399 -19.9675 -0.439445 107 -4.46387 -19.5949 -0.438901 252 -4.3988 -19.5932 -0.438386 250 -4.3338 -19.5913 -0.437871 253 -4.23933 -19.6018 -0.43755 250 -4.17483 -19.6013 -0.4371 245 -4.11119 -19.6045 -0.436779 242 -3.3047 -19.7403 -0.436274 171 -4.01438 -19.6021 -0.436071 239 -3.9516 -19.6088 -0.435878 238 -3.88804 -19.6113 -0.435557 225 -2.4599 -19.823 -0.434997 110 -3.73019 -19.6216 -0.434915 226 -3.82261 -19.6038 -0.434913 226 -3.66671 -19.6234 -0.434593 223 -3.60432 -19.6309 -0.434465 215 -3.50933 -19.6339 -0.434015 197 -3.44626 -19.6369 -0.433758 175 -3.38152 -19.6299 -0.433179 159 -3.225 -19.642 -0.43273 67 -2.51117 -19.7279 -0.43216 147 -2.66338 -19.6877 -0.431514 218 -2.60125 -19.694 -0.43145 209 -2.72494 -19.6773 -0.431448 245 -3.07403 -19.4861 -0.426996 231 -2.97978 -19.4846 -0.426482 40 -3.83833 -21.1387 -0.373338 47 -3.89923 -21.097 -0.372525 47 -3.95694 -21.0395 -0.371278 47 -5.8698 -19.8176 -0.351213 100 -5.74043 -19.7222 -0.347748 208 -5.66234 -19.6845 -0.346178 229 -5.5851 -19.6483 -0.344663 234 -5.48597 -19.6513 -0.344014 234 -5.4162 -19.6396 -0.343203 232 -5.34761 -19.6314 -0.342499 236 -5.24985 -19.6371 -0.341959 229 -5.18249 -19.6322 -0.341364 227 -5.1137 -19.6213 -0.340607 237 -5.04852 -19.6238 -0.340229 234 -4.95108 -19.628 -0.339688 226 -4.88551 -19.6279 -0.339256 222 -4.81999 -19.6276 -0.338823 223 -2.66693 -20.0219 -0.338528 73 -4.72274 -19.6307 -0.338283 221 -4.65826 -19.6338 -0.337959 209 -4.59335 -19.6347 -0.337581 190 -2.72137 -19.9521 -0.336848 44 -4.43059 -19.6331 -0.336554 140 -4.36846 -19.645 -0.3365 44 -4.52261 -19.6101 -0.336498 204 -4.30586 -19.6547 -0.336393 44 -4.14513 -19.6586 -0.335583 44 -4.20519 -19.6376 -0.335365 44 -3.92047 -19.6618 -0.334448 44 -3.98102 -19.6435 -0.334285 73 -3.85713 -19.6662 -0.334233 44 -2.76423 -19.8029 -0.333002 44 -2.90141 -19.6579 -0.329642 212 -2.83503 -19.6353 -0.328776 44 -3.04083 -19.5397 -0.32704 231 -3.16354 -19.5203 -0.327038 235 -3.09936 -19.5123 -0.326552 246 -6.01087 -20.9246 -0.235581 224 -3.98424 -21.2323 -0.232184 76 -3.8941 -21.1168 -0.229536 75 -4.93633 -20.5463 -0.222551 74 -4.96748 -19.9809 -0.211504 72 -5.38892 -19.805 -0.210193 203 -5.28526 -19.7916 -0.209379 245 -5.21494 -19.7771 -0.208728 255 -5.14476 -19.7624 -0.208077 255 -2.91079 -20.1944 -0.207741 98 -5.07522 -19.7494 -0.207466 239 -4.98113 -19.7693 -0.207386 71 -4.68649 -19.7754 -0.206086 71 -2.94532 -19.9873 -0.203664 84 -3.87442 -19.7793 -0.202673 77 -3.93576 -19.7631 -0.20259 71 -3.99626 -19.7428 -0.202426 71 -2.99246 -19.8731 -0.201503 70 -3.13353 -19.7542 -0.199544 141 -3.06872 -19.7462 -0.199178 118 -4.92559 -20.9795 -0.130988 65 -3.96927 -21.0225 -0.128548 65 -3.8988 -21.0113 -0.128171 65 -3.04231 -20.5035 -0.118089 93 -4.89105 -19.8545 -0.11366 62 -5.17073 -19.7814 -0.113625 129 -4.94512 -19.8061 -0.113125 231 -5.10052 -19.7666 -0.113123 173 -5.03047 -19.7515 -0.112621 215 -4.69586 -19.7289 -0.111021 69 -3.12942 -20.0109 -0.110634 61 -4.04757 -19.7394 -0.108986 61 -3.95332 -19.7524 -0.108893 61 -3.88697 -19.7431 -0.108548 61 -3.16876 -19.8548 -0.108307 61 -3.22011 -19.7777 -0.107237 109 -3.31194 -19.7544 -0.10711 114 -3.41562 -20.2697 0.0202959 134 -4.85308 -19.9003 0.0209712 141 -4.74077 -19.8451 0.0216979 192 -4.67475 -19.8443 0.0218426 223 -3.45039 -20.0893 0.021862 147 -4.60923 -19.8453 0.0219691 226 -4.50905 -19.8375 0.0222408 213 -4.44019 -19.8223 0.0225129 209 -4.37489 -19.8225 0.0226394 186 -4.30795 -19.8146 0.0228387 166 -4.21288 -19.8269 0.0229103 146 -4.14772 -19.8263 0.0230368 139 -3.49089 -19.9484 0.0230641 171 -4.0802 -19.8138 0.0232725 145 -3.92408 -19.8432 0.0232886 172 -3.986 -19.8288 0.0233077 143 -3.8583 -19.8378 0.0234515 200 -3.76441 -19.8538 0.0234684 227 -3.63673 -19.8613 0.0236122 227 -3.69765 -19.8419 0.0236859 241 -3.57115 -19.8549 0.0237751 238 +unknow 0.978995 1 0 374 -6.012 26.083 -1.75671 208 -6.09121 26.0523 -1.75583 207 -6.20699 25.9942 -1.75363 206 -6.28301 25.9513 -1.75187 199 -6.35457 25.8907 -1.74879 239 -6.47215 25.8431 -1.74747 201 -6.54842 25.8033 -1.746 195 -6.61214 25.715 -1.74086 241 -6.73122 25.6758 -1.74028 200 -5.22218 25.9921 -1.73794 177 -6.80063 25.6121 -1.73705 193 -6.94888 25.5227 -1.73353 198 -6.86713 25.5386 -1.73309 238 -7.05262 25.43 -1.72898 190 -7.12227 25.3713 -1.72619 237 -7.19596 25.3277 -1.72458 202 -7.30972 25.2743 -1.72311 234 -7.38182 25.2263 -1.7212 194 -7.44184 25.138 -1.71621 190 -7.54876 25.0644 -1.71328 236 -7.62572 25.0348 -1.71284 193 -7.68561 24.9497 -1.70814 193 -7.79358 24.8828 -1.7058 246 -8.16904 24.5835 -1.69332 184 -8.24433 24.552 -1.69288 232 -8.35672 24.5034 -1.69215 194 -8.41488 24.4224 -1.6879 230 -8.4811 24.3656 -1.68555 193 -8.58721 24.301 -1.68364 188 -8.64813 24.2306 -1.68027 233 -8.71612 24.1808 -1.6785 190 -7.75467 24.4872 -1.67719 196 -7.98245 24.2754 -1.66751 183 -7.84838 24.252 -1.66281 205 -7.7679 24.2632 -1.66179 205 -5.53755 24.3664 -1.62586 179 -7.96919 25.8426 -1.62487 156 -5.34261 24.3935 -1.62468 230 -5.41835 24.3727 -1.62439 242 -7.87921 25.8389 -1.62284 135 -5.17934 24.3798 -1.62117 255 -7.78874 25.8329 -1.62067 119 -5.06077 24.3863 -1.61985 171 -5.23727 26.0269 -1.59128 148 -5.09563 25.9553 -1.58464 128 -7.89954 24.3913 -1.52948 200 -8.00939 24.3387 -1.52839 92 -8.07571 24.2831 -1.52622 130 -7.78807 24.3078 -1.52175 102 -7.5838 24.3263 -1.51877 116 -7.69835 24.2903 -1.51877 91 -5.47284 24.5962 -1.49955 91 -5.54867 24.395 -1.48735 215 -5.35304 24.4203 -1.48613 135 -5.2746 24.4292 -1.48559 193 -5.19617 24.4378 -1.48505 89 -5.07401 24.4288 -1.48275 90 -4.99042 24.4114 -1.48044 141 -8.26045 24.4265 -1.39437 109 -8.08053 24.3983 -1.38915 133 -8.32245 24.2325 -1.38418 92 -8.11419 24.2441 -1.3807 138 -7.91984 24.2957 -1.37996 255 -7.83125 24.2824 -1.37747 197 -7.74344 24.2708 -1.37511 231 -7.62242 24.286 -1.37375 123 -7.54136 24.2946 -1.37275 99 -7.46443 24.3163 -1.37263 95 -7.25274 24.3052 -1.36815 98 -7.32848 24.2804 -1.36803 130 -7.15891 24.2685 -1.3643 127 -7.07817 24.2756 -1.36331 124 -6.95932 24.2933 -1.36231 120 -6.87593 24.2901 -1.3607 120 -6.79797 24.3058 -1.36033 114 -6.67177 24.2952 -1.35759 101 -4.54698 24.7606 -1.35636 59 -6.59021 24.2968 -1.35635 76 -6.51075 24.3058 -1.35561 83 -6.39059 24.3149 -1.35424 120 -6.31117 24.3233 -1.35349 142 -6.23276 24.3353 -1.353 111 -6.14848 24.3238 -1.35101 149 -6.03092 24.3408 -1.35026 103 -5.95207 24.35 -1.34964 111 -5.68126 24.4023 -1.3489 139 -5.86762 24.3355 -1.34753 130 -5.74922 24.3474 -1.34654 101 -5.59435 24.3752 -1.34604 140 -5.47289 24.3721 -1.34418 207 -4.58645 24.5401 -1.34331 81 -5.20086 24.4132 -1.34306 126 -5.31119 24.367 -1.34169 161 -4.96382 24.4279 -1.34095 92 -5.11354 24.3787 -1.33983 247 -5.03411 24.3809 -1.33896 124 -4.68632 24.4359 -1.33809 97 -4.75964 24.4034 -1.33697 108 -4.83437 24.3786 -1.33635 123 -8.61736 24.5366 -1.2533 136 -8.49421 24.4316 -1.24543 164 -8.34719 24.3788 -1.23992 255 -8.00111 24.4925 -1.23981 132 -7.89209 24.4187 -1.23397 202 -8.15947 24.3286 -1.23385 127 -8.07353 24.3257 -1.23217 161 -7.78361 24.3445 -1.22812 133 -7.66279 24.3619 -1.227 119 -7.58265 24.3744 -1.22632 127 -7.29352 24.3875 -1.22228 255 -7.36836 24.3587 -1.22194 255 -7.21232 24.395 -1.22138 255 -7.47894 24.3104 -1.22115 199 -7.13172 24.4041 -1.22059 255 -7.00557 24.399 -1.21835 255 -6.92561 24.4094 -1.21767 255 -6.84187 24.4061 -1.21621 255 -6.72146 24.4188 -1.21509 255 -4.5104 24.918 -1.21488 114 -6.63997 24.4224 -1.21408 255 -6.55646 24.4181 -1.21262 255 -6.43672 24.4314 -1.2116 255 -6.35439 24.4302 -1.21037 248 -5.66074 24.5981 -1.21026 113 -6.27311 24.4326 -1.20936 246 -4.56974 24.8016 -1.20903 163 -6.15547 24.4523 -1.2088 249 -6.07234 24.4463 -1.20733 244 -5.99073 24.4459 -1.20621 254 -5.91014 24.449 -1.20531 248 -5.78886 24.4514 -1.20385 239 -5.70744 24.45 -1.20273 150 -5.5104 24.4726 -1.20149 129 -5.00273 24.5468 -1.19958 138 -4.61248 24.6008 -1.19835 215 -5.42089 24.4333 -1.19823 150 -5.34196 24.4405 -1.19767 190 -5.22546 24.4595 -1.19734 147 -4.72076 24.5395 -1.1961 255 -5.14406 24.4543 -1.1961 128 -5.06436 24.4567 -1.19531 133 -4.87134 24.4918 -1.19509 243 -4.79322 24.5011 -1.19475 255 -8.55624 24.5324 -1.10576 213 -8.1721 24.5409 -1.09989 123 -4.48505 25.3117 -1.09182 108 -8.35061 24.3098 -1.09169 164 -7.65884 24.5323 -1.0915 122 -8.25496 24.2791 -1.08866 237 -7.95836 24.2792 -1.08391 132 -7.87652 24.287 -1.083 120 -7.68254 24.3386 -1.08249 102 -7.78681 24.2697 -1.08077 179 -7.4954 24.2756 -1.07662 212 -7.38033 24.3088 -1.07652 255 -7.29764 24.3108 -1.07541 255 -7.21952 24.3278 -1.07511 255 -7.09645 24.3328 -1.07359 255 -7.01281 24.33 -1.07228 255 -6.93306 24.3404 -1.07167 255 -4.53134 24.8874 -1.07108 129 -6.84848 24.3332 -1.07015 255 -6.7295 24.3498 -1.06934 255 -6.64719 24.3496 -1.06823 255 -5.29706 24.6683 -1.06773 139 -5.21871 24.6809 -1.06753 173 -5.41154 24.6353 -1.06733 139 -6.566 24.353 -1.06732 255 -6.44609 24.3644 -1.06631 255 -6.366 24.371 -1.0656 255 -6.28443 24.3715 -1.06459 255 -6.16366 24.3776 -1.06338 255 -5.46814 24.5246 -1.06247 114 -6.08271 24.3794 -1.06247 255 -6.00087 24.3771 -1.06135 255 -5.92002 24.3783 -1.06044 255 -5.80324 24.3982 -1.06004 255 -4.56715 24.6432 -1.05924 180 -5.7184 24.3813 -1.05822 255 -5.63683 24.3777 -1.05711 255 -4.62687 24.5345 -1.05438 251 -4.73754 24.4869 -1.05307 255 -4.96572 24.4295 -1.05246 242 -4.81099 24.4543 -1.05215 255 -4.88389 24.4195 -1.05114 255 -5.07229 24.3647 -1.05033 122 -8.45554 24.5097 -0.955014 252 -4.54186 25.4371 -0.951089 155 -8.31505 24.3509 -0.946218 255 -8.21861 24.3183 -0.943435 255 -8.08938 24.3132 -0.941372 255 -7.71458 24.3299 -0.936885 242 -7.82238 24.2724 -0.935897 119 -7.62609 24.3159 -0.93509 255 -7.54551 24.3264 -0.934463 255 -7.42729 24.3502 -0.933925 255 -7.34266 24.3466 -0.932669 255 -7.26097 24.3524 -0.931861 255 -7.14106 24.3691 -0.931054 255 -7.05499 24.3588 -0.929528 255 -6.97402 24.3654 -0.928811 255 -6.89252 24.3699 -0.928003 255 -6.76956 24.3733 -0.926657 255 -6.68872 24.379 -0.92594 255 -6.60421 24.371 -0.924594 255 -4.55367 24.8299 -0.924337 177 -6.40751 24.4028 -0.923697 255 -6.48414 24.3825 -0.923697 255 -6.32579 24.4034 -0.9228 255 -6.20083 24.3943 -0.921005 255 -6.12318 24.4098 -0.920826 255 -6.04021 24.4037 -0.91966 255 -5.92419 24.428 -0.919481 255 -5.84135 24.4212 -0.918315 255 -5.76046 24.4219 -0.917507 255 -4.60179 24.6564 -0.917065 222 -5.67872 24.4185 -0.91652 255 -5.55778 24.4197 -0.915354 255 -5.47664 24.4175 -0.914457 255 -5.39645 24.419 -0.913739 255 -4.665 24.5672 -0.913654 255 -5.27581 24.4188 -0.912573 255 -4.85194 24.5004 -0.912306 255 -4.73606 24.5211 -0.912217 255 -4.92769 24.4792 -0.912036 255 -5.11939 24.4378 -0.911945 255 -5.19614 24.4216 -0.911945 255 -5.00136 24.4479 -0.911318 255 -8.17013 24.339 -0.780338 99 -8.06851 24.2886 -0.777257 99 -7.98283 24.2854 -0.776102 255 -7.86279 24.3056 -0.775409 233 -7.7797 24.3092 -0.774562 234 -7.69428 24.305 -0.773407 238 -7.57314 24.3199 -0.77256 241 -7.48733 24.313 -0.771328 240 -7.40569 24.3192 -0.770635 238 -7.28472 24.3328 -0.769788 240 -7.20259 24.3364 -0.769018 239 -4.52567 24.9609 -0.768571 171 -7.11827 24.332 -0.76794 243 -6.99692 24.3423 -0.767016 248 -6.9128 24.3372 -0.765938 250 -6.83255 24.3453 -0.765399 252 -6.74964 24.3435 -0.764475 251 -6.63172 24.3635 -0.764013 254 -6.54842 24.3591 -0.763012 255 -6.46778 24.3641 -0.762396 248 -6.34739 24.373 -0.761549 251 -4.5698 24.7598 -0.761251 158 -6.26582 24.3735 -0.760779 252 -6.18678 24.3834 -0.760394 248 -6.06748 24.3948 -0.759701 244 -5.98511 24.3905 -0.758777 245 -5.90659 24.4014 -0.75847 242 -5.78648 24.4075 -0.757623 246 -5.70571 24.4081 -0.75693 250 -5.62364 24.4025 -0.756006 220 -5.54606 24.4161 -0.755852 205 -4.65794 24.5868 -0.755318 187 -5.42448 24.4127 -0.754697 255 -5.34734 24.4277 -0.754621 244 -5.26721 24.4288 -0.754005 249 -4.7265 24.5269 -0.753545 175 -5.14916 24.4396 -0.753466 250 -4.99311 24.4597 -0.753005 249 -5.06953 24.442 -0.752927 243 -4.87547 24.4712 -0.752543 254 -4.79741 24.4805 -0.752312 247 -8.11668 24.7699 -0.631802 78 -8.00976 24.7059 -0.628772 138 -7.88741 24.5921 -0.624066 131 -7.77978 24.5215 -0.620842 128 -7.63428 24.4625 -0.617619 138 -7.5426 24.4386 -0.616008 108 -7.32565 24.4148 -0.613236 70 -4.55964 25.0607 -0.612672 117 -7.23408 24.3879 -0.61156 112 -7.15686 24.4086 -0.611496 160 -7.03454 24.4171 -0.610659 136 -6.95504 24.4294 -0.610337 171 -6.87283 24.4319 -0.609693 151 -6.75121 24.4409 -0.60892 164 -6.58812 24.4481 -0.60776 205 -6.66489 24.4273 -0.607759 191 -6.50302 24.4378 -0.606729 213 -6.38323 24.4508 -0.606149 218 -6.30138 24.4514 -0.605505 226 -4.5959 24.8183 -0.605192 132 -6.22107 24.4575 -0.605054 224 -6.09894 24.4594 -0.604152 230 -6.01728 24.459 -0.603508 237 -5.93472 24.4545 -0.602734 238 -5.73973 24.4887 -0.602349 240 -5.81617 24.4686 -0.602284 242 -5.65735 24.4832 -0.601575 245 -5.57639 24.4833 -0.600996 250 -5.45833 24.4976 -0.600609 245 -4.6463 24.6584 -0.600421 197 -5.37877 24.5029 -0.600223 247 -5.29752 24.5002 -0.599579 242 -5.1791 24.5112 -0.599128 244 -5.10124 24.5234 -0.598999 244 -5.02378 24.5374 -0.598935 145 -4.74909 24.5676 -0.598163 95 -4.90336 24.5373 -0.598162 133 -4.82393 24.5408 -0.597776 112 -7.47867 25.819 -0.519981 81 -7.39533 25.8347 -0.519765 58 -7.29298 25.7828 -0.517652 142 -4.66132 25.4067 -0.491548 88 -6.07726 24.8793 -0.485578 56 -4.68454 25.0872 -0.483148 142 -6.71966 24.4835 -0.47956 55 -6.09605 24.6194 -0.478859 55 -7.17206 24.3257 -0.478798 100 -6.55643 24.4905 -0.478585 55 -6.17046 24.5885 -0.478533 55 -6.35189 24.4948 -0.477286 55 -6.26652 24.4817 -0.476365 55 -4.71359 24.8091 -0.475887 93 -5.7875 24.5254 -0.474417 55 -5.51618 24.5817 -0.474256 55 -5.59294 24.5623 -0.474201 55 -5.70726 24.5298 -0.474038 55 -5.43506 24.5813 -0.473769 55 -5.35104 24.567 -0.472902 55 -5.2232 24.5352 -0.471332 73 -5.06732 24.5597 -0.471116 255 -4.95114 24.5813 -0.471062 255 -4.87351 24.5948 -0.471008 255 -5.14159 24.53 -0.470736 103 -7.00861 25.7698 -0.336678 181 -7.04319 25.5799 -0.333129 96 -4.85339 25.4351 -0.32013 142 -6.2287 25.0698 -0.318857 90 -4.90527 25.0666 -0.31295 137 -6.85036 24.5814 -0.312449 110 -6.07296 24.7767 -0.31229 89 -6.20353 24.6392 -0.310209 89 -6.31606 24.5961 -0.309923 89 -5.92004 24.6553 -0.30915 89 -5.75861 24.6648 -0.30858 88 -5.83515 24.6427 -0.308498 88 -5.6365 24.6663 -0.30805 88 -5.55104 24.6488 -0.307317 88 -5.27507 24.6868 -0.30687 255 -5.46836 24.6427 -0.306828 88 -5.00092 24.7316 -0.306626 182 -5.1946 24.6896 -0.306584 255 -5.11617 24.7019 -0.306503 255 -5.3849 24.6324 -0.306257 88 -4.97084 25.1835 -0.196247 125 -5.02566 25.0462 -0.194295 144 -6.81807 24.6084 -0.194126 123 -6.72599 24.5757 -0.193246 234 -6.60959 24.6052 -0.193215 171 -6.52664 24.6045 -0.192869 178 -6.44427 24.6056 -0.192555 190 -5.07967 24.9088 -0.192343 122 -6.36294 24.6102 -0.192304 203 -6.24103 24.6166 -0.191927 219 -6.16126 24.6264 -0.19177 232 -6.07907 24.6262 -0.191455 232 -5.95968 24.641 -0.191236 235 -5.87624 24.6343 -0.190827 223 -5.797 24.6449 -0.190702 224 -5.67946 24.6661 -0.190608 219 -5.59753 24.6643 -0.190294 217 -5.51959 24.6798 -0.190263 214 -5.16893 24.7495 -0.190171 127 -5.39982 24.6899 -0.190012 209 -5.24335 24.7175 -0.189918 168 -5.32055 24.6989 -0.189886 191 +unknow 0.971846 1 0 4079 -4.67089 -0.687908 -1.52629 88 -4.37428 0.759661 -1.52493 84 -4.38438 0.662418 -1.5228 90 -4.33561 0.9296 -1.5228 79 -4.42979 -0.0733479 -1.52139 91 -4.6652 -0.619906 -1.52092 92 -4.51955 1.31226 -1.52091 116 -4.22867 0.848829 -1.52069 82 -4.42526 0.170096 -1.52068 91 -4.3713 0.709656 -1.52067 111 -4.66986 -0.568357 -1.52025 99 -4.63313 0.815336 -1.52024 99 -4.60674 0.953229 -1.52024 101 -4.57795 1.08308 -1.52024 99 -4.55302 1.18349 -1.52024 93 -4.41583 -0.309473 -1.51997 90 -4.41859 0.267241 -1.51997 86 -4.40605 0.426665 -1.51997 82 -4.40109 0.475086 -1.51997 86 -4.36375 0.743639 -1.51996 125 -4.64466 0.73486 -1.51957 96 -4.64808 0.712965 -1.51957 104 -4.59096 1.01784 -1.51957 106 -4.58774 1.03226 -1.51957 105 -4.52004 1.297 -1.51957 109 -4.4114 -0.344009 -1.51926 86 -4.42094 -0.184445 -1.51926 87 -4.42226 -0.149718 -1.51926 94 -4.42272 0.1352 -1.51926 87 -4.41495 0.294861 -1.51926 82 -4.37921 0.633465 -1.51926 86 -4.35097 0.804903 -1.51925 114 -4.33641 0.879959 -1.51925 114 -4.22097 0.868018 -1.51924 94 -4.68481 -0.384295 -1.51891 108 -4.68938 0.323841 -1.5189 106 -4.6867 0.360662 -1.5189 104 -4.66266 0.595684 -1.5189 99 -4.57766 1.06782 -1.5189 109 -4.41523 -0.260701 -1.51855 86 -4.41682 0.232311 -1.51855 90 -4.41399 0.28086 -1.51855 122 -4.38852 0.550569 -1.51855 111 -4.37535 0.646936 -1.51855 125 -4.35164 0.790885 -1.51855 112 -4.34002 0.852324 -1.51855 104 -4.34399 0.831862 -1.51855 107 -4.68184 0.39729 -1.51823 113 -4.6301 0.799785 -1.51823 130 -4.58081 1.04581 -1.51823 104 -4.40107 -0.419844 -1.51784 113 -4.40656 -0.357587 -1.51784 97 -4.41491 -0.232869 -1.51784 95 -4.41596 -0.212061 -1.51784 94 -4.42099 0.0239714 -1.51784 90 -4.41975 0.107296 -1.51784 93 -4.38492 0.564103 -1.51784 112 -4.34475 0.817855 -1.51784 111 -4.75804 -0.694365 -1.51758 118 -4.64877 -0.669872 -1.51757 116 -4.65288 -0.64065 -1.51757 123 -4.68837 -0.28098 -1.51756 115 -4.64471 0.697489 -1.51756 124 -4.58862 1.00217 -1.51756 103 -4.39577 -0.454215 -1.51714 111 -4.41769 -0.114867 -1.51713 89 -4.41918 -0.00381637 -1.51713 90 -4.41858 0.0725385 -1.51713 93 -4.41445 0.20436 -1.51713 86 -4.389 0.515626 -1.51713 114 -4.38036 0.584502 -1.51713 129 -4.3785 0.59826 -1.51713 86 -4.36645 0.680681 -1.51713 111 -4.36428 0.694396 -1.51713 104 -4.35164 0.769697 -1.51713 114 -4.33366 0.8652 -1.51713 113 -4.32673 0.89921 -1.51713 106 -4.32388 0.912797 -1.51713 118 -4.22216 0.833791 -1.51706 73 -4.64898 -0.655013 -1.51689 120 -4.65778 -0.589225 -1.51689 104 -4.67468 -0.435289 -1.51689 101 -4.68036 -0.369161 -1.51689 101 -4.693 -0.133534 -1.51689 106 -4.6939 -0.0966728 -1.51689 105 -4.69468 -0.0450558 -1.51689 105 -4.69362 0.109802 -1.51689 105 -4.67201 0.463043 -1.51689 107 -4.665 0.529043 -1.51689 101 -4.65224 0.631494 -1.51689 103 -4.65023 0.646107 -1.51689 97 -4.63253 0.762763 -1.51689 129 -4.59451 0.965708 -1.51689 125 -4.56016 1.11671 -1.51689 101 -4.5025 1.33028 -1.51689 110 -4.48976 1.37266 -1.51689 111 -4.39864 -0.405695 -1.51643 100 -4.41708 0.0447443 -1.51642 114 -4.39871 0.404987 -1.51642 122 -4.39399 0.453327 -1.51642 118 -4.38874 0.501613 -1.51642 112 -4.38466 0.536066 -1.51642 111 -4.35799 0.721487 -1.51642 114 -4.22293 0.820178 -1.51633 63 -4.67607 -0.398412 -1.51622 105 -4.68811 -0.214524 -1.51622 114 -4.69266 0.0581544 -1.51622 110 -4.6922 0.087637 -1.51622 109 -4.69095 0.139223 -1.51622 108 -4.68749 0.227615 -1.51622 106 -4.66144 0.543468 -1.51622 126 -4.62702 0.78426 -1.51622 96 -4.61548 0.849592 -1.51622 97 -4.60586 0.900289 -1.51622 125 -4.52496 1.24467 -1.51621 99 -4.51504 1.28017 -1.51621 109 -4.41513 -0.0523831 -1.51572 117 -4.41527 -0.0385122 -1.51572 90 -4.41537 -0.0246409 -1.51572 132 -4.4146 0.0863235 -1.51571 132 -4.41378 0.120994 -1.51571 132 -4.41163 0.183378 -1.51571 118 -4.3993 0.37717 -1.51571 115 -4.3981 0.390988 -1.51571 111 -4.39353 0.439323 -1.51571 111 -4.79971 0.171591 -1.51561 102 -4.44034 0.905764 -1.51558 166 -4.65216 -0.603391 -1.51555 130 -4.66023 -0.537566 -1.51555 90 -4.66953 -0.449632 -1.51555 104 -4.69042 -0.0818809 -1.51555 104 -4.69075 -0.0597774 -1.51555 113 -4.69113 0.00654045 -1.51555 110 -4.69099 0.0360145 -1.51555 113 -4.68836 0.161252 -1.51555 117 -4.68487 0.242234 -1.51555 102 -4.68193 0.29373 -1.51555 109 -4.67175 0.425973 -1.51555 95 -4.6629 0.513952 -1.51555 136 -4.64129 0.682041 -1.51555 100 -4.59826 0.928826 -1.51554 135 -4.54941 1.1444 -1.51554 104 -4.52703 1.22995 -1.51554 134 -4.51921 1.25837 -1.51554 143 -4.47965 1.39266 -1.51554 114 -4.38874 -0.467462 -1.51501 114 -4.39228 -0.432978 -1.51501 104 -4.39796 -0.370843 -1.51501 118 -4.40669 -0.246363 -1.51501 122 -4.41242 -0.100894 -1.51501 111 -4.40819 0.217916 -1.515 121 -4.40233 0.314797 -1.515 113 -4.40132 0.328625 -1.515 113 -4.37105 0.611203 -1.515 122 -4.80062 0.0509096 -1.51495 103 -4.78183 0.427403 -1.51495 95 -4.72311 0.860679 -1.51495 119 -4.65664 -0.551991 -1.51488 130 -4.66243 -0.500756 -1.51488 105 -4.6785 -0.317325 -1.51488 121 -4.6892 0.0212591 -1.51488 117 -4.67119 0.411117 -1.51487 105 -4.66492 0.477112 -1.51487 107 -4.60635 0.877849 -1.51487 94 -4.59931 0.913999 -1.51487 91 -4.55988 1.09386 -1.51487 125 -4.53096 1.20811 -1.51487 98 -4.49289 1.34277 -1.51487 110 -4.40868 -0.163202 -1.5143 118 -4.40962 -0.135499 -1.5143 132 -4.41131 0.0585144 -1.5143 128 -4.40896 0.155501 -1.5143 117 -4.3984 0.342294 -1.5143 96 -4.79165 -0.265568 -1.51429 112 -4.70119 0.96396 -1.51429 121 -4.66361 -0.471275 -1.51421 131 -4.67982 -0.265769 -1.51421 126 -4.68604 -0.111282 -1.51421 105 -4.4746 -0.693528 -1.51421 144 -4.6724 0.374258 -1.5142 105 -4.66152 0.491557 -1.5142 101 -4.65322 0.564716 -1.5142 96 -4.64673 0.615845 -1.5142 129 -4.60723 0.863016 -1.5142 128 -4.54933 1.12918 -1.5142 133 -4.76092 -0.58812 -1.51364 121 -4.76275 -0.573162 -1.51364 124 -4.79661 -0.0696702 -1.51363 100 -4.73716 0.756039 -1.51363 120 -4.61751 1.30034 -1.51363 105 -4.40539 -0.197749 -1.51359 125 -4.40897 -0.0869808 -1.51359 124 -4.403 0.245379 -1.51359 125 -4.39544 0.355949 -1.51359 86 -4.38286 0.486953 -1.51359 111 -4.67988 -0.228924 -1.51354 111 -4.67875 -0.250975 -1.51354 107 -4.68123 -0.199516 -1.51354 107 -4.68538 -0.030298 -1.51353 101 -4.68099 0.205153 -1.51353 110 -4.67845 0.256609 -1.51353 99 -4.67719 0.278652 -1.51353 147 -4.67534 0.308034 -1.51353 107 -4.58225 0.97812 -1.51353 104 -4.5385 1.16439 -1.51353 104 -4.48505 1.35577 -1.51353 113 -4.46987 1.405 -1.51353 111 -4.47805 -0.65808 -1.51351 154 -4.44179 0.869812 -1.5135 137 -4.74923 -0.662558 -1.51298 119 -4.76131 0.569263 -1.51297 122 -4.75477 0.62158 -1.51297 123 -4.65605 1.1469 -1.51297 134 -4.65243 1.16152 -1.51297 110 -4.39811 -0.294459 -1.51288 111 -4.39945 -0.273731 -1.51288 118 -4.65522 -0.514813 -1.51287 128 -4.67383 -0.302293 -1.51286 114 -4.68126 -0.147984 -1.51286 113 -4.68303 0.072697 -1.51286 103 -4.6709 0.344595 -1.51286 114 -4.62375 0.746343 -1.51286 115 -4.52109 -0.169735 -1.51282 177 -4.47388 0.673407 -1.51281 176 -4.45179 0.80661 -1.51281 154 -4.43012 0.918228 -1.51281 153 -4.74525 -0.677198 -1.51232 118 -4.75241 -0.624982 -1.51232 113 -4.77329 -0.437922 -1.51232 99 -4.79147 0.133677 -1.51232 99 -4.7881 0.223964 -1.51232 99 -4.78096 0.344218 -1.51232 138 -4.76207 0.546615 -1.51232 124 -4.73578 0.740589 -1.51232 121 -4.6783 1.04384 -1.51232 123 -4.68156 1.02914 -1.51232 98 -4.60562 1.3283 -1.51231 100 -4.66996 -0.331531 -1.51219 117 -4.68007 0.124124 -1.51219 115 -4.67842 0.175575 -1.51219 98 -4.63513 0.658785 -1.51219 123 -4.38871 -0.390944 -1.51217 110 -4.40608 0.00996123 -1.51217 121 -4.47226 -0.671565 -1.51213 147 -4.47639 -0.643454 -1.51213 159 -4.50292 0.419311 -1.51212 175 -4.4688 0.694204 -1.51212 156 -4.4666 0.708239 -1.51212 154 -4.46435 0.722269 -1.51212 163 -4.45614 0.771311 -1.51212 162 -4.43535 0.88305 -1.51212 159 -4.42537 0.931765 -1.51212 159 -4.75248 -0.609797 -1.51167 118 -4.78737 -0.197452 -1.51166 103 -4.79128 -0.0394533 -1.51166 101 -4.75575 0.583779 -1.51166 121 -4.72041 0.821989 -1.51166 114 -4.71781 0.836814 -1.51166 118 -4.68764 0.991954 -1.51166 120 -4.59323 1.3639 -1.51166 106 -4.58457 1.39273 -1.51166 103 -4.677 -0.162578 -1.51152 106 -4.67619 -0.184616 -1.51152 108 -4.65845 0.44684 -1.51152 134 -4.64395 0.578359 -1.51152 132 -4.60516 0.832668 -1.51152 130 -4.52563 1.19142 -1.51151 137 -4.47653 -0.629115 -1.51144 150 -4.47944 -0.608013 -1.51143 151 -4.47923 0.609609 -1.51143 161 -4.47431 0.64477 -1.51143 162 -4.45669 0.757005 -1.51143 171 -4.76668 -0.467515 -1.51101 119 -4.78956 -0.0018122 -1.51101 99 -4.77494 0.373976 -1.511 120 -4.74515 0.650703 -1.511 114 -4.73771 0.702838 -1.511 120 -4.72111 0.806846 -1.511 116 -4.69641 0.939992 -1.511 118 -4.66286 1.09437 -1.511 119 -4.63388 1.2112 -1.511 114 -4.65273 -0.484998 -1.51085 101 -4.66513 -0.345942 -1.51085 141 -4.67792 -0.0155961 -1.51085 140 -4.51845 -0.0417704 -1.51074 163 -4.50968 0.284541 -1.51074 146 -4.50628 0.334109 -1.51074 164 -4.75938 -0.519682 -1.51035 117 -4.76099 -0.504728 -1.51035 128 -4.78761 -0.024361 -1.51035 133 -4.7862 0.118514 -1.51035 132 -4.78012 0.268793 -1.51035 106 -4.7742 0.358842 -1.51035 109 -4.73802 0.68769 -1.51034 121 -4.72543 0.76945 -1.51034 120 -4.70461 0.887957 -1.51034 123 -4.66443 1.0793 -1.51034 120 -4.6224 1.24708 -1.51034 137 -4.61447 1.2761 -1.51034 133 -4.59597 1.3412 -1.51034 137 -4.47762 -0.593424 -1.51005 158 -4.49938 -0.395978 -1.51005 182 -4.51074 -0.233202 -1.51005 181 -4.38871 -0.321585 -1.51005 118 -4.49597 0.432948 -1.51004 164 -4.47925 0.580992 -1.51004 158 -4.48194 0.559878 -1.51004 157 -4.47358 0.623181 -1.51004 160 -4.46854 0.658297 -1.51004 153 -4.44815 0.784361 -1.51004 156 -4.43925 0.833223 -1.51004 151 -4.43528 0.854133 -1.51004 129 -4.76067 -0.489565 -1.50969 122 -4.76437 -0.45216 -1.50969 137 -4.77759 -0.279775 -1.50969 138 -4.78312 -0.159626 -1.50969 117 -4.78216 0.186099 -1.50969 128 -4.76541 0.441112 -1.50969 130 -4.75625 0.530854 -1.50969 117 -4.73934 0.665103 -1.50969 122 -4.69563 0.924524 -1.50969 125 -4.69851 0.909769 -1.50969 120 -4.68518 0.976098 -1.50969 123 -4.67896 1.00552 -1.50969 136 -4.65537 -0.418858 -1.50951 129 -4.48028 -0.557997 -1.50936 141 -4.49074 -0.466399 -1.50936 157 -4.51165 0.171002 -1.50935 171 -4.50879 0.234764 -1.50935 179 -4.50146 0.347995 -1.50935 173 -4.49736 0.39747 -1.50935 181 -4.49057 0.468062 -1.50935 165 -4.4835 0.531496 -1.50935 170 -4.47554 0.594825 -1.50935 147 -4.44 0.818943 -1.50935 150 -5.90433 1.28761 -1.50909 34 -4.76524 -0.422039 -1.50904 119 -4.7684 -0.384602 -1.50903 123 -4.77128 -0.347139 -1.50903 133 -4.76959 -0.369618 -1.50903 130 -4.77737 -0.249643 -1.50903 115 -4.78159 0.148487 -1.50903 138 -4.77966 0.201054 -1.50903 132 -4.63217 1.19525 -1.50903 124 -4.62457 1.22433 -1.50903 120 -4.48428 -0.508479 -1.50866 151 -4.50929 -0.183417 -1.50866 169 -4.51035 -0.155081 -1.50866 167 -4.51245 0.0717339 -1.50866 181 -4.51206 0.0929971 -1.50866 166 -4.51174 0.107172 -1.50866 164 -4.48567 0.496072 -1.50866 161 -4.45164 0.741809 -1.50866 151 -4.77292 -0.29453 -1.50838 110 -4.77605 0.238501 -1.50837 125 -4.76432 0.410857 -1.50837 131 -4.75413 0.515522 -1.50837 124 -4.74452 0.597586 -1.50837 127 -4.63592 1.17296 -1.50837 125 -4.57986 1.37566 -1.50837 137 -4.66655 0.18975 -1.50816 130 -4.48915 -0.444839 -1.50797 156 -4.49186 -0.416625 -1.50797 163 -4.49499 -0.381334 -1.50797 170 -4.49994 -0.317752 -1.50797 175 -4.50955 -0.119592 -1.50797 158 -4.50894 -0.140842 -1.50797 175 -4.50734 0.185043 -1.50797 173 -4.50388 0.255817 -1.50797 156 -4.49982 0.319462 -1.50797 158 -4.50127 0.298253 -1.50797 157 -4.48223 0.509961 -1.50797 157 -4.47808 0.545147 -1.50797 168 -4.73733 -0.638072 -1.50772 120 -4.74765 -0.556125 -1.50772 127 -4.76341 -0.399243 -1.50772 116 -4.77541 -0.211926 -1.50772 134 -4.77892 -0.106867 -1.50772 104 -4.7798 -0.054315 -1.50772 138 -4.77943 0.0808334 -1.50772 129 -4.77339 0.253415 -1.50772 132 -4.77032 0.305884 -1.50772 122 -4.7637 0.395743 -1.50772 128 -4.75463 0.492929 -1.50772 123 -4.7378 0.634591 -1.50772 122 -4.7143 0.790501 -1.50771 113 -4.69994 0.871835 -1.50771 120 -4.6502 1.10688 -1.50771 128 -4.47202 -0.578348 -1.50728 153 -4.48866 -0.430544 -1.50728 165 -4.4943 -0.367047 -1.50728 170 -4.50463 -0.204472 -1.50728 182 -4.50892 -0.0557963 -1.50728 178 -4.50926 0.00795164 -1.50728 177 -4.49298 0.382893 -1.50727 172 -4.48712 0.44637 -1.50727 172 -4.83889 1.06338 -1.50716 87 -4.7475 -0.540984 -1.50706 120 -4.76669 -0.331724 -1.50706 103 -4.77284 -0.226827 -1.50706 104 -4.77734 -0.0918078 -1.50706 132 -4.76745 0.320753 -1.50706 125 -4.66024 1.05527 -1.50706 124 -4.60934 1.25915 -1.50706 106 -4.59521 1.30976 -1.50706 131 -4.47456 -0.542972 -1.50659 154 -4.48026 -0.493738 -1.50659 154 -4.49717 -0.303338 -1.50659 164 -4.49941 -0.268009 -1.50659 174 -4.50738 -0.00620241 -1.50658 183 -4.50718 0.0433593 -1.50658 173 -4.50576 0.121225 -1.50658 175 -4.50467 0.15661 -1.50658 159 -4.48161 0.481409 -1.50658 186 -4.76583 -0.316612 -1.50641 140 -4.77478 -0.121763 -1.5064 131 -4.75387 0.4627 -1.5064 128 -4.72239 0.715808 -1.5064 117 -4.47993 -0.479451 -1.50589 150 -4.4933 -0.33144 -1.50589 192 -4.50459 -0.0911084 -1.50589 181 -4.50547 -0.0203425 -1.50589 164 -4.50546 0.0221201 -1.50589 158 -4.50348 0.135336 -1.50589 166 -4.5008 0.206055 -1.50589 165 -4.50013 0.220194 -1.50589 171 -4.49744 0.269661 -1.50589 173 -4.77227 -0.144195 -1.50575 123 -4.7656 0.290583 -1.50574 128 -4.86143 0.925066 -1.50525 86 -4.4948 -0.281887 -1.5052 174 -4.49834 -0.218317 -1.5052 173 -4.50327 0.0574916 -1.5052 164 -4.48855 0.368349 -1.5052 170 -4.7721 0.0657549 -1.50509 129 -4.63758 1.12703 -1.50508 123 -4.88253 0.794619 -1.50462 95 -4.47066 -0.528219 -1.50451 157 -4.50053 -0.10515 -1.50451 168 -4.76749 -0.174018 -1.50443 113 -4.77058 0.0282726 -1.50443 138 -4.76971 0.0957091 -1.50443 128 -4.89845 -0.67591 -1.50399 89 -4.79771 1.19741 -1.50398 100 -4.48663 -0.34509 -1.50382 153 -4.49274 -0.253406 -1.50381 178 -4.76876 0.0132913 -1.50377 130 -4.74487 0.476918 -1.50377 123 -4.92125 0.462899 -1.50335 95 -4.90988 0.571003 -1.50335 85 -4.8724 0.832284 -1.50335 90 -4.8311 1.04571 -1.50334 98 -4.79017 1.21953 -1.50334 95 -4.49747 -0.0697207 -1.50312 165 -4.90375 -0.60615 -1.50272 79 -4.92245 -0.428628 -1.50272 90 -4.92912 -0.343517 -1.50271 101 -4.92541 0.393122 -1.50271 98 -4.84045 0.992136 -1.50271 95 -4.79777 1.1814 -1.50271 92 -4.78059 1.24911 -1.50271 100 -4.91919 -0.443931 -1.50208 96 -4.93657 0.160597 -1.50208 90 -4.92646 0.35428 -1.50208 98 -4.916 0.477971 -1.50207 92 -4.87126 0.816327 -1.50207 92 -4.89303 -0.659545 -1.50144 89 -4.89806 -0.621094 -1.50144 89 -4.93093 -0.250377 -1.50144 101 -4.93525 -0.14189 -1.50144 94 -4.93676 -0.0721063 -1.50144 92 -4.93578 0.121765 -1.50144 95 -4.92343 0.369604 -1.50144 92 -4.90056 0.601117 -1.50144 89 -4.87565 0.777735 -1.50144 92 -4.86416 0.846583 -1.50144 89 -4.85737 0.884758 -1.50144 92 -4.78082 1.23312 -1.50143 97 -4.9181 -0.412717 -1.50081 86 -4.93536 -0.0178249 -1.5008 87 -4.88428 0.708451 -1.5008 82 -4.87619 0.762112 -1.5008 94 -4.84251 0.952962 -1.5008 74 -4.83174 1.00615 -1.5008 92 -4.88394 -0.697438 -1.50017 76 -4.90258 -0.551387 -1.50017 92 -4.93187 -0.126306 -1.50017 101 -4.93036 0.175872 -1.50017 95 -4.88781 0.669801 -1.50017 87 -4.80661 1.11172 -1.50016 87 -4.76332 1.28461 -1.50016 99 -4.75515 1.31451 -1.50016 103 -5.03705 -0.697236 -1.4999 95 -4.90646 -0.497268 -1.49954 87 -4.92693 0.214497 -1.49953 97 -4.92469 0.260922 -1.49953 98 -4.91341 0.423198 -1.49953 92 -4.79225 1.16404 -1.49953 92 -5.06595 0.418202 -1.49927 109 -5.0494 0.585051 -1.49927 99 -5.04062 0.656374 -1.49927 102 -4.89433 -0.58944 -1.4989 99 -4.90052 -0.535591 -1.4989 90 -4.90218 -0.520192 -1.4989 90 -4.92957 0.0363703 -1.4989 100 -4.92856 0.106053 -1.4989 84 -4.92434 0.229875 -1.49889 95 -4.9206 0.299465 -1.49889 100 -4.91016 0.438452 -1.49889 97 -4.90505 0.492415 -1.49889 90 -4.90267 0.515525 -1.49889 90 -4.90103 0.530923 -1.49889 86 -4.88817 0.638565 -1.49889 98 -4.85266 0.86812 -1.49889 92 -4.84711 0.898593 -1.49889 90 -4.8081 1.0882 -1.49889 74 -4.76566 1.26115 -1.49889 100 -4.74526 1.33585 -1.49889 97 -4.73028 1.38795 -1.49889 101 -5.07911 -0.148146 -1.49866 114 -5.03343 0.695692 -1.49865 103 -4.91477 -0.358105 -1.49826 90 -4.92293 -0.219019 -1.49826 98 -4.92391 -0.195818 -1.49826 98 -4.9245 -0.180348 -1.49826 106 -4.9217 0.245239 -1.49826 95 -4.91774 0.314792 -1.49826 92 -4.9162 0.337961 -1.49826 100 -4.88924 0.615277 -1.49826 97 -4.87107 0.745601 -1.49826 92 -4.82115 1.01971 -1.49826 95 -4.73495 1.36511 -1.49825 100 -4.94008 1.18139 -1.49803 102 -4.90471 1.32057 -1.49803 119 -4.91652 -0.303937 -1.49763 98 -4.92315 -0.164823 -1.49762 103 -4.92574 -0.0410515 -1.49762 98 -4.9222 0.191026 -1.49762 98 -4.90904 0.407261 -1.49762 98 -4.88238 0.653396 -1.49762 92 -4.87266 0.722351 -1.49762 90 -4.83619 0.935892 -1.49762 102 -4.8078 1.07224 -1.49762 102 -4.7374 1.3497 -1.49762 92 -5.04719 -0.55369 -1.49742 128 -5.06864 -0.299398 -1.49742 101 -5.06338 0.378006 -1.49742 107 -4.88191 -0.642507 -1.49699 90 -4.91365 -0.319268 -1.49699 103 -4.91644 -0.272945 -1.49699 98 -4.91556 -0.288389 -1.49699 89 -4.92309 -0.0951838 -1.49699 94 -5.03191 -0.664281 -1.4968 99 -5.04172 -0.585162 -1.4968 126 -5.04354 -0.569321 -1.4968 97 -5.06314 -0.35497 -1.4968 106 -5.07148 -0.203726 -1.4968 109 -5.07556 0.0114826 -1.4968 105 -5.04796 0.528744 -1.4968 99 -5.00612 0.836799 -1.4968 101 -5.00076 0.868237 -1.4968 98 -4.98351 0.962338 -1.49679 97 -4.9455 1.14172 -1.49679 95 -4.94906 1.12617 -1.49679 144 -4.92886 1.21151 -1.49679 106 -4.88862 -0.573218 -1.49635 78 -4.92022 0.136768 -1.49635 92 -4.91394 0.283529 -1.49635 95 -4.88737 0.58384 -1.49635 92 -4.8265 0.965497 -1.49635 90 -4.7483 1.29651 -1.49635 94 -5.0331 -0.640312 -1.49618 121 -5.07234 -0.116017 -1.49618 115 -5.07283 -0.0921122 -1.49618 107 -5.01912 0.742025 -1.49618 96 -4.97076 1.0167 -1.49618 103 -4.87567 1.40357 -1.49617 117 -4.91995 0.051706 -1.49572 79 -4.87147 0.690892 -1.49571 100 -5.0332 -0.624253 -1.49557 122 -5.04323 -0.537198 -1.49556 95 -5.07119 -0.0761378 -1.49556 106 -5.06346 0.290167 -1.49556 106 -5.04967 0.472872 -1.49556 101 -5.02722 0.670756 -1.49556 135 -4.90417 -0.372874 -1.49508 77 -4.91275 -0.234081 -1.49508 106 -4.91708 -0.110552 -1.49508 95 -4.91831 0.0130498 -1.49508 87 -4.91763 0.0825761 -1.49508 81 -4.88804 0.544997 -1.49508 100 -5.02415 -0.679293 -1.49495 127 -5.06008 -0.31481 -1.49494 112 -5.04059 0.544015 -1.49494 135 -4.98089 0.945642 -1.49494 105 -4.97485 0.976919 -1.49494 121 -4.95217 1.08608 -1.49494 130 -4.91756 1.23337 -1.49494 99 -4.88501 1.35656 -1.49494 114 -4.89289 -0.480447 -1.49445 102 -4.90047 -0.395838 -1.49445 104 -4.9161 -0.0564684 -1.49444 97 -4.7865 1.12282 -1.49444 100 -5.05199 -0.402031 -1.49433 108 -5.06506 -0.17156 -1.49433 111 -5.0677 0.0513057 -1.49432 111 -5.06178 0.250222 -1.49432 109 -5.05206 0.401158 -1.49432 103 -5.02756 0.638696 -1.49432 130 -5.01802 0.709704 -1.49432 98 -5.00992 0.764837 -1.49432 130 -5.00121 0.819876 -1.49432 130 -4.9537 1.07012 -1.49432 102 -4.94688 1.10122 -1.49432 98 -4.92524 1.19427 -1.49432 142 -5.48485 -0.618948 -1.49424 123 -4.89249 -0.464905 -1.49381 74 -5.04004 -0.51282 -1.49371 127 -5.04316 -0.481142 -1.49371 114 -5.04537 -0.457372 -1.49371 124 -5.05527 -0.330437 -1.49371 109 -5.0657 -0.0601087 -1.49371 104 -5.06233 0.194488 -1.4937 107 -5.06064 0.234242 -1.4937 107 -5.05533 0.329585 -1.4937 139 -5.03508 0.559447 -1.4937 108 -4.95682 1.04638 -1.4937 135 -4.87273 1.3862 -1.4937 111 -5.47365 -0.696191 -1.49367 88 -5.47895 -0.65318 -1.49367 89 -5.37039 1.26668 -1.49366 110 -4.77926 1.13696 -1.49317 82 -4.70957 1.39786 -1.49316 100 -5.02759 -0.607488 -1.49309 112 -5.04489 -0.441344 -1.49309 100 -5.05754 -0.258833 -1.49309 106 -5.06403 -0.0362123 -1.49309 99 -5.38589 1.19021 -1.49309 93 -5.06303 0.106963 -1.49309 103 -5.06101 0.178527 -1.49309 103 -5.05237 0.345344 -1.49309 101 -5.03823 0.511786 -1.49308 103 -4.98537 0.889845 -1.49308 133 -4.9646 0.999254 -1.49308 133 -4.93076 1.1547 -1.49308 130 -4.90812 1.24743 -1.49308 136 -4.90418 1.26285 -1.49308 110 -4.87522 1.37038 -1.49308 117 -4.91074 -0.00243795 -1.49253 99 -5.37644 1.22359 -1.49251 104 -5.04754 -0.385692 -1.49247 101 -5.06013 0.146679 -1.49247 100 -5.05303 0.305548 -1.49247 102 -5.04375 0.432435 -1.49247 100 -5.00185 0.779722 -1.49246 99 -4.99033 0.850352 -1.49246 128 -4.97781 0.920815 -1.49246 134 -5.28189 0.705835 -1.49242 106 -5.2651 0.821809 -1.49242 112 -5.3877 1.16399 -1.49194 98 -5.36875 1.24847 -1.49194 102 -4.90839 0.0669481 -1.4919 104 -5.04246 -0.425153 -1.49185 134 -5.05453 -0.242741 -1.49185 98 -5.02295 0.614113 -1.49185 98 -5.00824 0.724416 -1.49185 133 -4.9788 0.904841 -1.49185 100 -4.95449 1.02967 -1.49184 95 -4.88216 1.33107 -1.49184 113 -5.47818 -0.59211 -1.49138 93 -5.34029 1.35735 -1.49137 115 -5.08169 0.974897 -1.49131 80 -5.03406 -0.496197 -1.49123 95 -5.051 -0.274382 -1.49123 142 -5.05801 0.0671501 -1.49123 106 -5.03787 0.455873 -1.49123 133 -5.03491 0.487518 -1.49123 125 -4.99562 0.794853 -1.49123 120 -5.47145 -0.634906 -1.49081 114 -5.28364 0.647046 -1.49065 118 -5.27051 0.746519 -1.49065 109 -5.26814 0.763075 -1.49065 114 -5.25008 0.878732 -1.49065 101 -5.1993 1.14141 -1.49064 107 -5.05484 -0.131418 -1.49061 104 -5.05651 -0.0202345 -1.49061 130 -5.05655 -0.00435003 -1.49061 107 -5.05643 0.0353648 -1.49061 116 -5.05573 0.0909586 -1.49061 109 -5.05506 0.122723 -1.49061 106 -5.02108 0.597899 -1.49061 130 -5.37279 1.20498 -1.49023 134 -5.34912 1.30604 -1.49023 104 -5.34499 1.32283 -1.49023 109 -5.32576 1.39826 -1.49023 107 -5.2765 0.688286 -1.49006 104 -5.24541 0.894909 -1.49006 103 -5.20624 1.10015 -1.49005 108 -5.19383 1.15733 -1.49005 107 -5.05119 -0.18691 -1.48999 108 -5.04725 0.273422 -1.48999 104 -5.04177 0.360585 -1.48999 134 -5.33895 1.33914 -1.48965 109 -5.32827 1.38103 -1.48965 113 -5.27369 -0.695035 -1.48947 107 -5.2769 -0.670175 -1.48947 91 -5.27898 -0.653595 -1.48947 143 -5.28585 -0.595511 -1.48947 103 -5.25039 0.853386 -1.48947 103 -5.16526 1.27081 -1.48946 124 -5.15512 1.31134 -1.48946 119 -5.11929 -0.698557 -1.4889 76 -5.13871 -0.537413 -1.48889 78 -5.02838 1.18769 -1.48889 82 -5.26004 0.778808 -1.48888 105 -5.25116 0.836597 -1.48888 105 -5.2093 1.06667 -1.48887 102 -5.14912 1.32706 -1.48887 119 -5.13422 1.3836 -1.48887 121 -5.03735 -0.368942 -1.48876 141 -4.88729 1.27495 -1.48875 109 -5.45974 -0.668373 -1.48852 121 -5.27722 -0.636532 -1.48829 105 -5.2839 -0.578469 -1.48829 102 -5.12477 -0.642 -1.48829 77 -5.20405 1.08265 -1.48828 108 -5.19538 1.12349 -1.48828 105 -5.18272 1.18055 -1.48828 116 -5.17898 1.19682 -1.48828 115 -5.17136 1.22934 -1.48828 113 -5.06926 0.988986 -1.48828 77 -5.04425 0.217692 -1.48814 103 -4.87938 1.29749 -1.48813 111 -5.34777 1.279 -1.48794 103 -5.21051 1.04138 -1.48769 99 -5.13484 1.36649 -1.48769 125 -5.1198 -0.665905 -1.48768 70 -5.13897 -0.496689 -1.48768 80 -5.04095 1.11564 -1.48767 72 -5.00141 1.28129 -1.48767 86 -5.2754 -0.619484 -1.48711 110 -5.16179 1.25281 -1.4871 115 -5.12431 1.39823 -1.4871 126 -5.04253 0.162114 -1.4869 133 -5.53066 1.30001 -1.48689 126 -5.27999 -0.561231 -1.48652 108 -5.26071 0.719927 -1.48652 100 -5.24875 0.802468 -1.48651 112 -5.15761 -0.124321 -1.48647 83 -5.07711 0.916181 -1.48646 69 -5.05574 1.0276 -1.48646 73 -4.98958 1.3117 -1.48646 90 -5.64111 -0.658913 -1.48634 102 -5.92585 -0.638622 -1.48631 76 -5.03852 -0.218091 -1.48628 134 -5.15713 -0.0270855 -1.48586 82 -5.10268 0.747951 -1.48586 75 -5.06938 0.947704 -1.48586 77 -5.04732 1.05895 -1.48586 79 -5.02646 1.15389 -1.48586 80 -5.01347 1.20909 -1.48586 81 -5.00578 1.24057 -1.48586 82 -5.26856 0.628491 -1.48534 119 -5.26346 0.66985 -1.48533 105 -5.16588 1.21095 -1.48533 101 -5.13382 1.34039 -1.48533 120 -5.1298 -0.512114 -1.48526 83 -5.14595 -0.310325 -1.48526 83 -5.1553 0.00530439 -1.48526 85 -5.91789 -0.675422 -1.48525 76 -4.97967 1.33419 -1.48525 83 -5.64229 -0.614156 -1.48523 106 -5.36886 1.14216 -1.48508 137 -5.14639 1.2834 -1.48474 119 -5.63329 -0.675919 -1.48468 134 -5.54477 1.20266 -1.48467 151 -5.53121 1.26355 -1.48467 114 -5.50426 1.37623 -1.48467 126 -5.13102 -0.479704 -1.48465 83 -5.14145 -0.350609 -1.48465 79 -5.14305 -0.326377 -1.48465 85 -5.145 -0.294056 -1.48465 86 -5.15302 0.0619571 -1.48465 91 -5.14072 0.361172 -1.48465 78 -5.04689 1.04229 -1.48464 78 -4.99816 1.25534 -1.48464 81 -5.91081 -0.702863 -1.48419 74 -5.2025 1.02285 -1.48415 102 -5.52534 1.2805 -1.48412 118 -5.11545 -0.608279 -1.48405 70 -5.13842 -0.366635 -1.48405 85 -5.14524 -0.253556 -1.48404 90 -5.07937 0.858992 -1.48404 78 -4.96751 1.36443 -1.48404 89 -4.97178 1.34881 -1.48404 86 -5.62733 -0.693126 -1.48357 102 -5.63461 -0.63121 -1.48357 141 -5.51532 1.31475 -1.48356 122 -5.11636 -0.58396 -1.48344 76 -5.11993 -0.551801 -1.48344 66 -5.1489 -0.0837029 -1.48344 85 -5.14957 -0.0109071 -1.48344 83 -5.117 0.578361 -1.48343 78 -5.06485 0.930358 -1.48343 80 -5.03652 1.07317 -1.48343 75 -5.91231 -0.656009 -1.48313 73 -5.50719 1.34028 -1.48301 126 -5.50296 1.35758 -1.48301 122 -5.12752 -0.455042 -1.48283 81 -5.13028 -0.422817 -1.48283 81 -5.14061 -0.269539 -1.48283 86 -5.14576 -0.140269 -1.48283 84 -5.14709 0.07803 -1.48283 87 -5.11041 0.618292 -1.48283 81 -5.02256 1.12806 -1.48283 79 -5.0004 1.22252 -1.48283 79 -4.98262 1.29309 -1.48283 84 -5.79172 1.34867 -1.4826 77 -5.53345 1.21845 -1.48245 114 -5.49026 1.40029 -1.48245 126 -5.4495 -0.571841 -1.48223 117 -5.10783 -0.623682 -1.48223 78 -5.12703 -0.438779 -1.48223 85 -5.14136 -0.21293 -1.48223 87 -5.14222 0.191111 -1.48222 72 -5.08286 0.802171 -1.48222 71 -5.07641 0.842066 -1.48222 70 -5.80025 1.30271 -1.48207 81 -5.78558 1.3664 -1.48207 94 -5.52772 1.23542 -1.4819 114 -5.12841 -0.398359 -1.48162 85 -5.12964 -0.382247 -1.48162 83 -5.14069 -0.180565 -1.48162 83 -5.14361 -0.0513227 -1.48162 80 -5.14142 0.158729 -1.48162 72 -5.12695 0.416855 -1.48162 72 -5.12054 0.489291 -1.48162 75 -5.08348 0.785899 -1.48162 79 -5.25722 0.610459 -1.4812 102 -5.1382 -0.196649 -1.48101 83 -5.13933 -0.164364 -1.48101 87 -5.14151 -0.0674663 -1.48101 81 -5.13199 0.320018 -1.48101 85 -5.11296 0.545352 -1.48101 82 -5.08524 0.761642 -1.48101 77 -5.06726 0.873278 -1.48101 75 -5.00798 1.16614 -1.48101 87 -5.19442 1.00438 -1.48061 130 -5.79867 1.2832 -1.48048 85 -5.77563 1.3832 -1.48048 71 -5.13459 -0.236921 -1.48041 81 -5.13985 0.0455821 -1.48041 85 -5.12853 0.344061 -1.48041 85 -5.12182 0.432619 -1.48041 73 -5.10933 0.561193 -1.4804 77 -5.09142 0.705411 -1.4804 73 -5.13702 -0.107784 -1.4798 83 -5.1381 0.0213435 -1.4798 89 -5.13713 0.102045 -1.4798 78 -5.13639 0.134321 -1.4798 81 -4.9482 1.38416 -1.4798 89 -5.19839 0.962874 -1.47943 106 -5.09121 -0.678596 -1.4792 85 -5.13488 0.118131 -1.47919 83 -5.10098 0.600838 -1.47919 78 -5.03811 0.999202 -1.47919 84 -5.78278 1.32739 -1.47889 91 -5.12914 0.230919 -1.47859 85 -5.12629 0.287302 -1.47859 80 -5.09217 0.656636 -1.47859 75 -5.09521 0.632633 -1.47859 79 -5.11866 0.375681 -1.47798 76 -5.08606 0.688353 -1.47798 69 -5.09922 -0.565878 -1.47738 80 -5.12458 0.246829 -1.47738 81 -5.11556 0.391604 -1.47738 85 -5.10877 0.471907 -1.47737 70 -5.1041 0.520035 -1.47737 67 -5.08631 0.672112 -1.47737 85 -5.07861 0.727997 -1.47737 85 -5.05184 0.895096 -1.47737 83 -5.12188 0.26282 -1.47677 81 -5.11966 0.303037 -1.47677 78 -5.10192 0.503602 -1.47616 82 -5.06152 0.81501 -1.47616 80 -5.18252 0.985273 -1.47589 114 -5.10525 0.4473 -1.47556 85 -5.51839 1.16989 -1.47525 160 -5.00536 1.09108 -1.47495 78 -5.23913 0.583455 -1.47471 105 -5.11303 0.205968 -1.47313 82 -5.18793 0.902159 -1.47294 88 -5.17504 0.941877 -1.47117 110 -5.10471 0.173468 -1.4701 80 -6.00249 -0.673666 -1.4687 100 -6.00265 -0.654588 -1.46818 94 -5.16668 0.923653 -1.46763 102 -6.17879 -0.675422 -1.46592 94 -5.98883 -0.691142 -1.46559 120 -5.86234 1.40599 -1.46559 113 -5.87556 1.34103 -1.46507 108 -6.40369 -0.702191 -1.46482 83 -5.88806 1.27594 -1.46455 107 -5.87408 1.32132 -1.46351 117 -5.22225 -0.339843 -1.46291 135 -5.8619 1.35734 -1.46248 109 -6.1674 -0.654635 -1.4624 127 -6.04477 1.38787 -1.46239 122 -5.85572 1.37532 -1.46196 112 -6.04721 1.36844 -1.46189 122 -5.86514 1.29036 -1.45937 149 -6.26346 1.39466 -1.45849 137 -6.0345 1.34558 -1.45736 166 -6.25643 1.37253 -1.45558 176 -5.17251 0.559931 -1.45347 103 -6.61961 -0.700776 -1.44903 58 -5.11346 -0.518337 -1.43399 78 -5.12415 -0.316802 -1.43222 61 -5.09673 -0.355183 -1.42455 107 -5.06908 -0.481438 -1.41924 87 -5.06184 -0.496771 -1.41747 88 -5.06836 -0.425164 -1.41747 113 -5.07273 -0.36941 -1.41747 90 -5.06178 -0.456638 -1.41629 96 -5.05748 -0.440206 -1.41452 98 -5.05253 -0.407769 -1.41216 101 -5.0544 -0.383954 -1.41216 102 -5.03163 0.529415 -1.4092 101 -5.6208 -0.589243 -1.40153 45 -5.08759 1.06422 -1.39816 97 -5.00142 0.399671 -1.39622 65 -5.06278 1.04229 -1.38958 88 -4.98571 -0.221124 -1.38796 78 -5.05825 1.01649 -1.38672 75 -4.93896 0.496636 -1.37969 114 -4.93537 0.410338 -1.37615 139 -5.00695 0.989541 -1.37014 128 -5.07357 -0.518093 -1.369 82 -4.8927 0.437973 -1.36376 118 -4.89215 0.422446 -1.36317 108 -4.8834 0.475861 -1.36199 136 -5.0416 -0.491013 -1.35871 80 -4.86775 0.458993 -1.35667 139 -4.8023 0.346876 -1.33366 177 -4.80782 -0.174475 -1.33248 171 -4.7971 -0.279789 -1.33071 73 -4.78975 0.361161 -1.33012 175 -4.7748 -0.188123 -1.32245 197 -4.75569 0.328753 -1.3189 202 -4.75106 -0.157161 -1.31477 201 -4.74095 0.290435 -1.31359 230 -4.74002 0.305329 -1.31359 215 -4.73351 -0.253351 -1.31064 85 -4.73957 -0.0822114 -1.31064 229 -4.73531 -0.10444 -1.30946 224 -5.0368 -0.529426 -1.30894 106 -4.72737 -0.223204 -1.30828 79 -4.80517 0.932904 -1.30781 101 -4.72474 -0.237947 -1.30769 89 -4.72923 -0.119139 -1.30769 219 -4.72834 -0.0670943 -1.3071 225 -4.7231 -0.133803 -1.30592 213 -4.7128 0.20723 -1.30356 232 -4.708 0.184827 -1.30179 205 -4.70475 0.10336 -1.30002 235 -4.70067 0.221559 -1.30002 237 -4.70204 0.0146752 -1.29884 238 -4.69932 0.0885041 -1.29825 237 -4.69442 -5.44852e-05 -1.29648 239 -4.69294 0.117917 -1.29648 149 -4.69249 -0.014786 -1.29589 239 -4.68855 -0.0368481 -1.29471 240 -4.68841 -0.0515764 -1.29471 240 -4.68822 0.06626 -1.29471 240 -4.68472 0.0367929 -1.29353 241 -4.68459 0.0515092 -1.29353 241 -4.67153 0.132181 -1.28998 100 -4.66559 0.234787 -1.28939 242 -4.6636 0.271423 -1.28939 243 -4.74556 0.897793 -1.28836 80 -4.66513 0.154037 -1.28821 91 -4.65889 0.168516 -1.28644 114 -4.79496 -0.453072 -1.28437 67 -4.72953 0.879276 -1.28265 80 -4.63811 0.248164 -1.28113 255 -4.71933 0.838992 -1.2775 82 -4.70779 0.859804 -1.27521 99 -4.71062 0.822123 -1.27407 87 -4.75817 -0.434728 -1.27293 84 -4.75252 -0.411681 -1.27064 82 -4.70186 0.805317 -1.27064 66 -4.74997 -0.396449 -1.2695 107 -4.74737 -0.38124 -1.26836 80 -4.73683 -0.343047 -1.26435 72 -4.72752 -0.364818 -1.26207 67 -4.6778 0.763261 -1.26149 65 -4.72641 -0.327432 -1.26092 81 -4.67872 0.733241 -1.26034 61 -4.6745 0.747622 -1.25977 58 -5.02088 1.06618 -1.25899 28 -4.66405 0.776003 -1.25806 67 -4.67297 0.694719 -1.25691 63 -4.71211 -0.311654 -1.25635 79 -4.67843 0.643025 -1.25634 169 -4.66887 0.709097 -1.25634 69 -4.67134 0.679462 -1.25577 126 -4.77265 0.999739 -1.25461 74 -4.66904 0.626732 -1.25291 149 -4.66501 0.656055 -1.25291 182 -4.69822 -0.28859 -1.25177 77 -4.69528 -0.273628 -1.25063 84 -4.66052 0.588288 -1.24891 131 -4.68771 -0.236313 -1.24777 88 -4.74939 0.979447 -1.24685 75 -4.65105 0.601901 -1.24662 102 -4.6808 -0.258116 -1.24605 91 -4.74829 0.955948 -1.24518 95 -4.64768 0.534713 -1.24319 96 -4.64333 0.571198 -1.24319 147 -4.67187 -0.20619 -1.24262 87 -4.67334 -0.169491 -1.24262 50 -4.6432 0.556369 -1.24262 98 -4.73807 0.938485 -1.2413 83 -4.66354 -0.220548 -1.24033 99 -4.80227 -0.480676 -1.2402 53 -4.66292 -0.191174 -1.23976 92 -4.66236 -0.154493 -1.23919 92 -4.63601 0.518543 -1.23919 81 -4.66024 -0.0885169 -1.23805 71 -4.63381 0.503541 -1.23804 78 -4.65576 -0.11772 -1.2369 65 -4.63525 0.452167 -1.2369 66 -4.63041 0.481074 -1.23633 74 -4.72211 0.920021 -1.23576 76 -4.62237 0.465511 -1.23347 71 -4.64078 -0.102839 -1.23233 69 -4.71595 0.88051 -1.23188 85 -4.71175 0.902723 -1.23188 87 -4.63942 -0.0736581 -1.23176 79 -4.63995 -0.0226417 -1.23176 64 -4.77126 -0.462262 -1.23078 61 -4.77269 -0.447269 -1.23078 93 -4.63588 -0.0517737 -1.23061 69 -4.61635 0.428253 -1.23061 68 -4.63216 -0.139097 -1.23004 53 -4.6341 -0.0372057 -1.23004 65 -4.61576 0.413568 -1.23004 67 -4.6237 0.282786 -1.22947 89 -4.61513 0.398889 -1.22947 72 -4.62088 0.297176 -1.2289 84 -4.99574 -0.502842 -1.22827 30 -4.62657 0.0136844 -1.22775 69 -4.62564 0.0936188 -1.22775 88 -4.62079 0.231609 -1.22775 89 -4.61812 0.246011 -1.22718 95 -4.61691 0.267771 -1.22718 92 -4.61048 0.361987 -1.22718 95 -4.61227 0.311133 -1.22661 76 -4.60682 0.383539 -1.22661 72 -4.6194 0.115241 -1.22604 93 -4.61859 0.144262 -1.22604 111 -4.60778 0.347193 -1.22604 91 -4.61884 0.0281294 -1.22547 98 -4.61594 0.165946 -1.22546 91 -4.90672 1.00913 -1.22508 27 -4.61348 0.18036 -1.22489 88 -4.61098 0.194761 -1.22432 79 -4.60311 0.332268 -1.22432 86 -4.69221 0.860979 -1.22412 89 -4.61317 -0.000923507 -1.22375 72 -4.6129 0.0497999 -1.22375 96 -4.6125 0.0787828 -1.22375 88 -4.61135 0.129494 -1.22375 97 -4.693 0.845903 -1.22356 73 -4.60618 0.216286 -1.22318 89 -4.60889 0.0642167 -1.22261 85 -4.75014 0.34784 -1.2219 96 -4.74603 0.40005 -1.2219 92 -4.74594 0.377538 -1.22135 95 -4.88844 1.0213 -1.22084 27 -4.75898 0.0189722 -1.2208 116 -4.73773 -0.428784 -1.22024 69 -4.75326 0.19079 -1.22024 93 -4.68812 0.807125 -1.22024 69 -4.75 0.175735 -1.21913 87 -4.74121 0.309835 -1.21858 104 -4.7397 0.332172 -1.21858 82 -4.74496 0.20543 -1.21802 93 -4.74394 0.227788 -1.21802 86 -4.7356 0.36181 -1.21802 95 -4.7467 0.0861017 -1.21747 87 -4.74503 0.0711706 -1.21692 93 -4.74355 0.138242 -1.21692 85 -4.74284 0.160593 -1.21692 87 -4.73474 0.257216 -1.21581 96 -4.89639 0.879188 -1.21554 26 -4.73946 0.0562265 -1.21525 93 -4.73856 0.108334 -1.21525 85 -4.71985 0.412916 -1.2147 106 -4.73577 0.0413242 -1.21414 80 -4.71311 0.46461 -1.21414 96 -4.67344 0.766971 -1.21414 66 -4.66472 0.81831 -1.21414 75 -4.96891 0.000794645 -1.21396 26 -4.71798 -0.389538 -1.21359 62 -4.73211 0.00414653 -1.21304 84 -4.71072 0.449457 -1.21303 81 -4.72401 0.241814 -1.21248 104 -4.66867 0.736149 -1.21137 61 -4.72441 -0.0106603 -1.21082 100 -4.65839 0.787127 -1.21081 75 -4.70525 -0.403309 -1.21027 69 -4.70955 0.293088 -1.20915 83 -4.71514 0.122748 -1.2086 84 -4.69747 0.425949 -1.2086 87 -4.85098 0.973532 -1.20812 26 -4.69059 0.477389 -1.20804 96 -4.69791 -0.350628 -1.20694 70 -4.70277 0.277881 -1.20694 79 -4.69429 -0.3726 -1.20639 71 -4.6981 -0.320963 -1.20638 72 -4.68064 0.498716 -1.20583 92 -4.69472 -0.283674 -1.20472 73 -4.64355 0.747274 -1.20472 67 -4.65695 0.644732 -1.20416 87 -4.66185 0.593257 -1.20361 90 -4.659 0.615218 -1.20361 92 -4.66786 0.527089 -1.20305 87 -4.65514 0.629605 -1.20305 93 -4.90083 -0.462716 -1.20124 26 -4.65854 0.540907 -1.20084 81 -4.65415 0.577478 -1.20084 89 -4.64032 0.67968 -1.20084 87 -4.90103 -0.439454 -1.20071 26 -4.84734 0.846533 -1.20071 26 -4.65993 0.511427 -1.20028 89 -4.64053 0.664836 -1.20028 106 -4.83864 0.884221 -1.20018 44 -4.67408 -0.333949 -1.19973 96 -4.65021 0.562193 -1.19917 85 -4.67225 -0.304303 -1.19862 70 -4.67948 -0.0838292 -1.19807 106 -4.67148 -0.252683 -1.19751 63 -4.62675 0.69261 -1.19751 58 -4.61964 0.713839 -1.1964 73 -4.67038 -0.0469247 -1.1953 90 -4.67051 -0.0322519 -1.1953 94 -4.80676 0.948699 -1.19488 29 -4.66637 -0.0615238 -1.19419 106 -4.66382 -0.0981199 -1.19363 106 -4.66157 -0.112714 -1.19308 107 -4.64453 -0.214496 -1.1892 51 -4.6471 -0.148816 -1.1892 72 -4.86664 -0.336587 -1.18906 26 -4.63997 -0.265431 -1.18864 67 -4.6437 -0.134085 -1.18809 77 -4.85674 -0.366619 -1.18694 26 -4.63424 -0.228559 -1.18643 67 -4.63647 -0.17759 -1.18643 62 -4.82002 0.686243 -1.1864 26 -4.79746 0.806493 -1.18534 26 -4.84825 -0.350714 -1.18429 26 -4.81022 0.70023 -1.18428 26 -4.62791 -0.199063 -1.18421 29 -4.80266 0.737684 -1.18375 26 -4.94942 -0.511544 -1.1833 60 -4.77334 0.88745 -1.18269 183 -4.80999 0.64623 -1.18216 26 -4.83319 -0.418438 -1.18164 26 -5.00364 1.09466 -1.18154 24 -4.83064 -0.402952 -1.18058 25 -4.79465 0.713281 -1.18057 25 -4.61013 -0.161928 -1.17867 97 -4.82419 -0.387198 -1.17846 25 -4.82967 -0.311376 -1.17846 89 -4.79862 0.62929 -1.17845 25 -4.79457 0.659425 -1.17845 25 -4.77525 0.787208 -1.17845 25 -4.77938 0.749369 -1.17792 25 -4.80005 0.537607 -1.1758 95 -4.79746 0.560219 -1.1758 76 -4.82234 -0.13637 -1.17422 25 -4.82355 -0.0833387 -1.17422 25 -4.82311 -0.106068 -1.17422 25 -4.76369 0.762177 -1.17421 25 -4.78802 0.574329 -1.17369 93 -4.80752 -0.294909 -1.1721 98 -4.81008 -0.158773 -1.17104 25 -4.81075 -0.0151727 -1.17051 25 -4.79891 -0.241512 -1.16892 25 -4.80347 -0.120839 -1.16892 25 -4.80258 -0.0680002 -1.16839 25 -4.76707 0.586907 -1.16839 62 -4.80111 0.0149723 -1.16786 58 -4.79712 -0.037809 -1.1668 25 -4.79313 -0.0528569 -1.16574 25 -4.78038 -0.225631 -1.16362 25 -4.78962 1.02714 -1.16258 41 -4.7743 -0.187817 -1.1615 25 -4.77399 0.0372399 -1.16044 90 -4.75987 -0.209793 -1.15779 25 -4.76137 -0.172403 -1.15779 25 -4.7289 0.514204 -1.15567 64 -4.74227 -0.253903 -1.15355 28 -4.70881 0.601969 -1.15302 42 -4.75087 0.995676 -1.15067 51 -4.74396 0.870558 -1.14238 156 -4.7374 0.884768 -1.14134 150 -4.67683 0.493383 -1.14083 83 -4.71231 0.972382 -1.13927 91 -5.0269 1.08324 -1.13905 30 -4.72193 0.851328 -1.13565 128 -4.68322 0.0507514 -1.13554 92 -4.65894 0.439628 -1.13448 108 -4.71887 0.83551 -1.13409 105 -4.65417 0.468688 -1.13395 100 -4.65841 0.40267 -1.13342 105 -4.65646 0.424619 -1.13342 107 -4.65178 0.453668 -1.13289 103 -4.65389 0.387521 -1.13183 91 -4.67933 0.950464 -1.12943 64 -4.65658 0.130816 -1.12865 121 -4.64963 0.167143 -1.12706 99 -4.63949 0.349557 -1.12706 112 -4.63587 0.371253 -1.12653 109 -4.64296 0.232643 -1.126 130 -4.63672 0.334682 -1.126 115 -4.63988 0.254403 -1.12547 127 -4.63582 0.31997 -1.12547 113 -4.66858 0.92548 -1.12529 60 -4.64348 0.115773 -1.12494 125 -4.63981 0.217853 -1.12494 110 -4.63997 0.10108 -1.12388 125 -4.62958 0.297582 -1.12335 112 -4.66388 0.909373 -1.12321 92 -4.63676 0.0645602 -1.12282 149 -4.63277 0.202894 -1.12282 117 -4.63175 0.180976 -1.12229 134 -4.62751 0.268245 -1.12229 130 -4.62665 0.28278 -1.12229 119 -4.63255 0.0863169 -1.12176 141 -4.63086 0.151796 -1.12176 113 -4.71424 -0.456062 -1.11908 63 -4.68854 0.656794 -1.11855 181 -4.70988 -0.440678 -1.11752 64 -4.74404 1.01306 -1.11107 35 -4.68306 -0.415755 -1.10975 86 -4.64989 0.681388 -1.10923 79 -4.64052 0.665196 -1.10612 58 -4.63625 0.69434 -1.10612 83 -4.64369 0.628481 -1.1056 125 -4.6718 -0.311287 -1.10457 99 -4.6272 0.715327 -1.10457 65 -4.7226 0.992837 -1.10453 45 -4.61033 0.794532 -1.10353 57 -4.71623 0.975985 -1.10201 56 -4.60951 0.764632 -1.10198 63 -4.60709 0.77911 -1.10198 75 -4.65479 -0.383612 -1.10147 56 -4.64971 -0.397884 -1.10043 61 -4.65348 -0.295279 -1.09939 94 -4.60352 0.741421 -1.09939 92 -4.64803 -0.346272 -1.09888 76 -4.64717 -0.33152 -1.09836 82 -4.59819 0.725792 -1.09732 60 -4.63729 -0.360071 -1.09629 75 -4.60539 0.608798 -1.09473 85 -4.59837 0.556575 -1.0911 79 -4.62662 -0.176805 -1.09059 88 -4.62716 -0.162269 -1.09059 100 -4.61969 -0.27837 -1.09007 56 -4.59277 0.570563 -1.09007 76 -4.58811 0.591964 -1.08955 92 -4.61669 -0.263615 -1.08903 64 -4.6225 -0.125732 -1.08903 90 -4.62015 -0.140183 -1.08852 91 -4.58858 0.540833 -1.08799 74 -4.61708 -0.111039 -1.08748 93 -4.58834 0.526207 -1.08748 68 -4.66581 0.942337 -1.08741 60 -4.61547 -0.0964808 -1.08696 91 -4.73616 -0.456193 -1.08692 15 -4.61436 0.0412845 -1.08644 100 -4.6005 0.359851 -1.08644 255 -4.6721 0.890231 -1.08641 47 -4.66496 0.926899 -1.08641 60 -4.60438 -0.241073 -1.08541 75 -4.61029 -0.0601214 -1.08541 96 -4.61046 -0.0456362 -1.08541 100 -4.61062 -0.0239109 -1.08541 100 -4.61068 0.00505906 -1.08541 100 -4.60801 0.157119 -1.08541 255 -4.60032 0.309008 -1.08541 255 -4.60752 0.10641 -1.08489 255 -4.60289 -0.19025 -1.08437 63 -4.60681 -0.00939629 -1.08437 101 -4.60429 -0.0744774 -1.08385 95 -4.57732 0.503177 -1.08385 201 -4.72351 -0.425122 -1.08289 63 -4.59547 -0.226077 -1.08282 75 -4.59423 -0.21154 -1.0823 94 -4.59902 0.026784 -1.0823 105 -4.67858 0.702248 -1.07986 106 -4.70672 -0.438609 -1.07886 56 -4.66948 0.723368 -1.07835 72 -4.64717 0.855087 -1.07835 48 -4.63749 0.906132 -1.07835 62 -4.67311 0.68638 -1.07785 92 -4.70354 -0.386239 -1.07685 48 -4.63306 0.867482 -1.07533 56 -4.77951 1.01555 -1.07487 50 -4.65801 0.669124 -1.07332 90 -4.6592 0.646889 -1.07282 89 -4.77317 0.998595 -1.07243 47 -4.64427 0.73428 -1.07231 73 -4.67915 -0.399167 -1.07081 80 -4.62517 0.813375 -1.0708 48 -4.65162 0.630895 -1.0703 88 -4.6343 0.747592 -1.0703 55 -4.65444 0.579212 -1.0693 75 -4.61558 0.834097 -1.06929 54 -4.64591 0.61522 -1.06829 91 -4.643 0.592552 -1.06678 90 -4.61494 0.781628 -1.06678 57 -4.66419 -0.368483 -1.06628 47 -4.61285 0.758899 -1.06527 63 -4.64323 0.525943 -1.06477 54 -4.64452 0.496542 -1.06426 255 -4.59912 0.793745 -1.06325 58 -4.63387 0.539588 -1.06275 80 -4.62935 0.561176 -1.06225 77 -4.64211 0.422598 -1.06175 255 -4.64007 0.444467 -1.06175 255 -4.63865 0.459042 -1.06175 255 -4.64671 -0.315852 -1.06074 63 -4.64082 0.393074 -1.06074 255 -4.64376 -0.330322 -1.06024 54 -4.63763 0.407471 -1.06024 255 -4.73137 0.9514 -1.05979 64 -4.72683 0.973686 -1.05979 58 -4.65122 -0.147705 -1.05974 84 -4.65073 -0.162316 -1.05974 91 -4.63219 0.355659 -1.05772 255 -4.63832 -0.125493 -1.05621 84 -4.62854 0.326107 -1.05621 255 -4.62532 -0.343716 -1.05571 64 -4.62882 -0.292838 -1.05571 69 -4.63472 -0.176423 -1.05571 69 -4.62991 0.275071 -1.05571 255 -4.62779 -0.278188 -1.05521 68 -4.62944 -0.249108 -1.05521 67 -4.71338 0.932503 -1.05444 80 -4.62477 -0.263451 -1.0542 65 -4.77804 -0.48692 -1.05397 39 -4.62901 -0.110745 -1.0537 98 -4.62761 0.0855708 -1.05319 255 -4.62398 0.0709521 -1.05218 255 -4.6184 0.237926 -1.05218 255 -4.61913 0.223415 -1.05218 255 -4.61772 -0.212194 -1.05168 63 -4.62058 0.136245 -1.05168 255 -4.61989 0.158017 -1.05168 255 -4.61881 0.187042 -1.05168 255 -4.61937 0.172529 -1.05168 255 -4.61787 0.208805 -1.05168 255 -4.6151 -0.226616 -1.05118 65 -4.70338 0.892296 -1.05007 61 -4.61361 0.106987 -1.04967 255 -4.61132 0.121419 -1.04916 255 -4.60199 0.28777 -1.04866 255 -4.60482 -0.197184 -1.04816 64 -4.60611 -0.0958505 -1.04766 85 -4.60445 -0.081355 -1.04715 89 -4.74941 -0.461229 -1.04619 20 -4.68388 0.911568 -1.04618 61 -4.60091 -0.0596282 -1.04615 92 -4.59721 -0.0451575 -1.04514 99 -4.68406 0.858317 -1.04375 76 -4.58775 0.00532708 -1.04262 104 -4.67562 0.871991 -1.04229 64 -4.58581 -0.00909413 -1.04212 105 -4.73483 -0.429707 -1.04181 73 -4.58369 0.0413006 -1.04162 119 -4.57991 -0.0306967 -1.04061 109 -4.67345 0.818583 -1.03937 77 -4.57416 0.0196038 -1.0391 126 -4.56999 0.0554602 -1.03809 207 -4.66512 0.83227 -1.03791 80 -4.41139 0.436878 -1.03775 255 -4.40782 0.47151 -1.03775 255 -4.41019 0.408818 -1.03672 255 -4.40889 0.422671 -1.03672 255 -4.40543 0.457285 -1.03672 255 -4.71555 -0.405444 -1.03646 80 -4.70836 -0.442083 -1.03549 63 -4.40749 0.373712 -1.03516 255 -4.4063 0.387556 -1.03516 255 -4.41041 0.311244 -1.03465 255 -4.65112 0.79976 -1.03305 86 -4.39901 0.359136 -1.03257 255 -4.70134 -0.389263 -1.03257 89 -4.40718 0.199931 -1.03206 255 -4.40307 0.276048 -1.03206 255 -4.39977 0.324444 -1.03206 255 -4.40669 0.16525 -1.03154 255 -4.40279 0.24828 -1.03154 255 -4.68522 0.497989 -1.03111 255 -4.40631 0.116747 -1.03102 255 -4.40393 0.185945 -1.03102 255 -4.40005 0.227353 -1.0305 255 -4.39813 0.261904 -1.0305 255 -4.40184 0.137413 -1.02998 255 -4.39881 0.213445 -1.02998 255 -4.69095 -0.373503 -1.02965 82 -4.64853 0.731892 -1.02965 102 -4.40153 0.0682358 -1.02947 255 -4.64429 0.746194 -1.02916 94 -4.67786 0.474978 -1.02868 255 -4.3973 0.0889221 -1.02843 255 -4.63446 0.782022 -1.02819 92 -4.67689 0.445231 -1.0277 255 -4.63043 0.758963 -1.02624 97 -4.67718 -0.350148 -1.02576 89 -4.66581 0.459026 -1.02527 255 -4.63685 0.692875 -1.02527 88 -4.63465 0.707439 -1.02527 84 -4.38434 0.0542963 -1.02481 234 -4.67439 -0.335155 -1.02479 101 -4.63132 0.677225 -1.02333 94 -4.65704 0.40659 -1.02187 255 -4.66188 -0.319465 -1.02139 87 -4.64414 0.420234 -1.01895 255 -4.61716 0.653043 -1.01895 105 -4.64931 -0.303855 -1.01798 92 -4.61342 0.637771 -1.01749 111 -4.61823 0.586773 -1.01701 86 -4.64575 -0.266964 -1.01653 107 -4.6477 -0.23047 -1.01652 100 -4.63508 0.390136 -1.01604 255 -4.61156 0.608043 -1.01603 114 -4.64102 -0.281302 -1.01555 102 -4.64798 0.120202 -1.01555 255 -4.64758 0.134802 -1.01555 255 -4.64349 0.236967 -1.01555 255 -4.64149 0.273429 -1.01555 255 -4.64684 0.0836694 -1.01506 255 -4.64519 0.149352 -1.01506 255 -4.64079 0.25146 -1.01506 255 -4.63774 0.302472 -1.01506 255 -4.63867 0.2879 -1.01506 255 -4.63414 0.353447 -1.01506 255 -4.60578 0.62203 -1.01506 107 -4.63882 -0.251904 -1.01458 102 -4.64065 -0.215463 -1.01458 106 -4.64446 0.105533 -1.01458 255 -4.63862 0.171058 -1.01361 255 -4.61417 0.505489 -1.0136 220 -4.60656 0.570668 -1.0136 105 -4.44873 0.488657 -1.01343 255 -4.73543 1.01113 -1.01341 56 -4.60641 0.55597 -1.01312 97 -4.63354 -0.149472 -1.01215 96 -4.63399 -0.134916 -1.01215 98 -4.62774 -0.200221 -1.01118 107 -4.6267 -0.178326 -1.01069 114 -4.62682 -0.112844 -1.0102 99 -4.59906 0.518537 -1.0102 118 -4.59548 0.53277 -1.00971 105 -4.62142 -0.16355 -1.00923 116 -4.6239 -0.0618895 -1.00923 111 -4.61968 -0.083586 -1.00826 104 -4.79444 -0.484327 -1.00781 10 -4.61745 -0.0980468 -1.00777 104 -4.42741 0.451006 -1.00688 255 -4.61243 -0.0471791 -1.00631 115 -4.61266 -0.0109512 -1.00631 115 -4.70817 0.989681 -1.00594 53 -4.60868 -0.0326379 -1.00534 113 -4.60868 0.0325159 -1.00534 135 -4.70897 0.96668 -1.005 47 -4.60103 0.00359572 -1.0034 118 -4.59906 0.0180548 -1.00291 124 -4.4189 0.352056 -1.00235 255 -4.4191 0.324132 -1.00185 255 -4.76108 -0.466042 -0.999409 10 -4.41185 0.288726 -0.999334 255 -4.68723 0.946743 -0.998935 70 -4.4051 0.239616 -0.996818 255 -4.67494 0.928897 -0.9952 58 -4.6602 0.903053 -0.990531 71 -4.65538 0.88691 -0.988663 77 -4.85982 1.048 -0.988265 48 -4.71479 -0.439355 -0.987736 19 -4.64557 0.854743 -0.984928 75 -4.64095 0.868966 -0.984461 72 -4.6464 0.81719 -0.983528 88 -4.69226 -0.407673 -0.981666 64 -4.63616 0.830368 -0.98166 80 -4.68902 -0.422249 -0.981199 59 -4.50566 0.0536043 -0.97957 255 -4.62597 0.798492 -0.977925 80 -4.62777 0.776351 -0.977458 76 -4.6701 -0.368958 -0.975596 62 -4.62488 0.745977 -0.975591 74 -4.66504 -0.38333 -0.974663 81 -4.66348 -0.353738 -0.973729 79 -4.61101 0.758546 -0.972789 89 -4.79626 1.0189 -0.972663 74 -4.46638 0.306346 -0.972276 255 -4.65733 -0.33125 -0.971861 86 -4.65835 -0.316618 -0.971861 103 -4.61743 0.692687 -0.971856 101 -4.61487 0.67005 -0.970455 102 -4.60723 0.720751 -0.970455 117 -4.65378 -0.264979 -0.969993 104 -4.45134 0.326477 -0.968872 255 -4.4492 0.354438 -0.968872 255 -4.64185 -0.300946 -0.967659 114 -4.59795 0.704442 -0.967654 92 -4.64083 -0.286254 -0.967192 123 -4.60552 0.639094 -0.967187 121 -4.77269 0.99838 -0.966422 67 -4.63981 -0.235034 -0.966258 121 -4.60365 0.624079 -0.966253 126 -4.8473 -0.509872 -0.965983 51 -4.60462 0.602114 -0.965786 128 -4.59772 0.652707 -0.965786 112 -4.63516 -0.249422 -0.965324 108 -4.63698 -0.21301 -0.965324 123 -4.44727 0.0672187 -0.964984 255 -4.44418 0.178957 -0.964983 255 -4.44263 0.213855 -0.964983 255 -4.44165 0.192846 -0.964497 255 -4.63434 -0.18374 -0.96439 145 -4.62985 -0.198153 -0.963456 135 -4.59685 0.586362 -0.963452 138 -4.59938 0.549999 -0.962985 158 -4.59674 0.571667 -0.962985 147 -4.59915 0.535311 -0.962519 167 -4.62517 -0.168878 -0.962055 154 -4.62009 -0.146928 -0.960654 160 -4.59116 0.519713 -0.960184 181 -4.61469 -0.13228 -0.959254 162 -4.61559 -0.0960327 -0.959253 188 -4.6112 -0.117703 -0.95832 176 -4.74101 0.968658 -0.957953 61 -4.60809 -0.0814382 -0.957386 190 -4.73829 0.952637 -0.956615 122 -4.60249 -0.0669091 -0.955985 199 -4.60275 -0.04522 -0.955985 204 -4.58064 0.452935 -0.955982 226 -4.57919 0.467324 -0.955982 228 -4.5777 0.481707 -0.955982 234 -4.59017 0.315901 -0.955516 232 -4.58079 0.431153 -0.955516 225 -4.59855 0.0703805 -0.95505 233 -4.59143 0.265288 -0.955049 233 -4.58921 0.30134 -0.955049 232 -4.58819 0.286789 -0.954582 232 -4.79848 -0.489228 -0.954394 29 -4.58174 0.351463 -0.954115 230 -4.57631 0.416197 -0.954115 223 -4.72977 0.935539 -0.953941 89 -4.5814 0.329717 -0.953648 230 -4.5775 0.380072 -0.953648 225 -4.57566 0.401638 -0.953648 224 -4.57674 0.365523 -0.953181 227 -4.56457 0.494763 -0.953181 218 -4.58926 -0.0307456 -0.952716 215 -4.58911 0.0485509 -0.952716 229 -4.58253 0.250278 -0.952715 234 -4.73122 0.897304 -0.952604 100 -4.58739 -0.0163318 -0.952249 215 -4.72646 0.911804 -0.952158 90 -4.58547 -0.00193118 -0.951783 218 -4.78836 -0.472938 -0.951719 62 -4.58349 0.0196587 -0.951316 220 -4.5834 0.0340581 -0.951316 220 -4.58275 0.084451 -0.951315 234 -4.57747 0.235547 -0.951315 237 -4.72251 0.880354 -0.949929 94 -4.57274 0.0985831 -0.948981 236 -4.56882 0.213465 -0.94898 237 -4.55976 0.198632 -0.946645 239 -4.71198 0.840252 -0.945917 111 -4.55862 0.119695 -0.945712 239 -4.94996 1.07787 -0.94563 25 -4.7114 0.809669 -0.94458 102 -4.70164 0.853698 -0.944134 107 -4.69922 0.822837 -0.942351 123 -4.54268 0.13347 -0.941977 241 -4.74591 -0.44593 -0.941466 82 -4.74535 -0.430831 -0.94102 86 -4.70233 0.732381 -0.939677 115 -4.73891 -0.415199 -0.939237 109 -4.69206 0.78373 -0.939231 134 -4.52928 0.182873 -0.939175 241 -4.69258 0.768681 -0.938785 101 -4.69689 0.716471 -0.937894 116 -4.69112 0.753338 -0.937894 111 -4.73459 -0.347397 -0.937008 103 -4.52086 0.146922 -0.936841 255 -4.68947 0.700325 -0.935665 125 -4.72454 -0.376477 -0.935225 122 -4.71883 -0.398387 -0.934333 110 -4.50651 0.167641 -0.933573 255 -4.71793 -0.360996 -0.933442 128 -4.71383 -0.308546 -0.931658 124 -4.6734 0.675536 -0.931208 133 -4.70895 -0.323065 -0.930767 144 -4.67562 0.645904 -0.930762 165 -4.70894 -0.29334 -0.930321 125 -4.66777 0.659802 -0.929425 149 -4.70444 -0.270778 -0.928984 132 -4.87695 1.04553 -0.928755 24 -4.70137 -0.255764 -0.928092 134 -4.66603 0.62971 -0.928088 169 -4.66507 0.607233 -0.927196 180 -4.69631 -0.240661 -0.926754 132 -4.6951 -0.225803 -0.926309 135 -4.66711 0.525711 -0.925413 106 -4.69027 -0.203389 -0.924971 146 -4.68699 -0.188474 -0.92408 144 -4.68756 -0.17375 -0.92408 152 -4.68443 -0.15151 -0.923188 162 -4.65403 0.553927 -0.923184 91 -4.68334 -0.122013 -0.922742 157 -4.6579 0.502522 -0.922739 136 -4.67113 0.304351 -0.921848 83 -4.84582 1.02275 -0.921161 24 -4.67688 -0.0483118 -0.920959 121 -4.67423 0.16471 -0.920957 95 -4.6517 0.487117 -0.920956 124 -4.64169 0.574708 -0.920956 128 -4.67319 -0.136387 -0.920513 159 -4.67506 -0.0335938 -0.920513 107 -4.67322 0.135292 -0.920512 84 -4.63793 0.589052 -0.92051 183 -4.92242 -0.508878 -0.920325 24 -4.67246 -0.0849493 -0.920067 204 -4.6664 0.252593 -0.920065 80 -4.65289 0.435599 -0.920065 107 -4.64218 0.537808 -0.920064 103 -4.66695 0.201196 -0.91962 94 -4.66364 0.267151 -0.91962 84 -4.66328 0.237755 -0.919174 81 -4.65745 0.332924 -0.919174 84 -4.66663 0.0838039 -0.918729 88 -4.66366 0.1864 -0.918729 90 -4.65388 0.354731 -0.918728 86 -4.6435 0.47157 -0.918727 124 -4.66539 -0.0188127 -0.918284 78 -4.66492 0.0691248 -0.918283 87 -4.6508 0.369206 -0.918282 88 -4.64962 0.383814 -0.918282 93 -4.66242 -0.0993659 -0.917838 158 -4.65913 0.149611 -0.917391 86 -4.64387 0.405404 -0.91739 96 -4.64258 0.41999 -0.91739 104 -4.65958 -0.0041179 -0.916946 74 -4.65935 0.047115 -0.916946 86 -4.6546 0.215382 -0.916945 85 -4.6566 0.098313 -0.9165 85 -4.64915 0.281053 -0.916499 79 -4.63596 0.448798 -0.916498 112 -4.65516 -0.0699094 -0.916055 131 -4.65042 0.112831 -0.915163 83 -4.63901 0.31707 -0.914716 83 -4.64777 0.0324617 -0.914272 81 -4.6459 0.0178624 -0.913826 74 -4.86561 0.625462 -0.911037 105 -4.80585 0.974696 -0.910614 24 -4.79703 0.988575 -0.909348 24 -4.87145 -0.488425 -0.908934 24 -4.86396 -0.464586 -0.906824 24 -4.86812 1.05755 -0.904511 21 -4.82685 0.604851 -0.902178 36 -4.82156 0.550348 -0.899647 131 -4.75968 0.926178 -0.898801 30 -4.75143 0.947812 -0.897957 28 -4.82255 -0.445575 -0.897543 23 -4.82135 0.458394 -0.897538 81 -4.82197 -0.43026 -0.897121 23 -4.81161 0.533843 -0.897115 99 -4.81213 0.510945 -0.896694 93 -4.75298 0.909333 -0.896692 30 -4.75389 0.894024 -0.89627 56 -4.76662 0.788285 -0.895005 23 -4.80358 0.479473 -0.894162 71 -4.75643 0.825008 -0.894161 23 -4.80577 -0.413694 -0.893324 23 -4.80787 0.388512 -0.893319 83 -4.80331 0.441353 -0.893319 77 -4.81191 0.30525 -0.892898 90 -4.80712 0.373245 -0.892897 104 -4.74539 0.853808 -0.892895 59 -4.74131 0.87616 -0.892895 57 -4.75256 0.801244 -0.892473 23 -4.8094 0.282322 -0.892054 96 -4.80242 0.357673 -0.891632 110 -4.75172 0.770397 -0.891208 23 -4.80569 0.145895 -0.889945 101 -4.79645 -0.269115 -0.889104 23 -4.79924 0.213621 -0.889101 80 -4.72881 0.835389 -0.888676 31 -4.78927 -0.291389 -0.887838 23 -4.77842 -0.388824 -0.886995 33 -4.7939 0.0550583 -0.886993 91 -4.78905 1.02508 -0.886744 18 -4.78168 0.318259 -0.886569 60 -4.73407 0.744539 -0.886567 23 -4.78437 -0.238365 -0.886151 23 -4.78488 0.227973 -0.886148 75 -4.78829 0.0248737 -0.885727 85 -4.78818 0.0399177 -0.885727 83 -4.78463 0.130097 -0.885305 87 -4.75012 0.572082 -0.884881 46 -4.77579 -0.253023 -0.884463 23 -4.76402 -0.372675 -0.88362 68 -4.75346 0.489292 -0.883615 72 -4.77255 0.197265 -0.883195 66 -4.77657 0.998983 -0.883026 47 -4.77346 0.10722 -0.882774 96 -4.76733 0.264593 -0.882773 105 -4.76786 -0.21512 -0.882353 53 -4.75406 0.421496 -0.88235 103 -4.71515 0.726275 -0.881927 28 -4.75541 -0.357029 -0.881511 68 -4.76872 -0.0277682 -0.881509 58 -4.75125 -0.304263 -0.879823 28 -4.75752 0.181589 -0.87982 137 -4.74832 -0.319067 -0.879401 49 -4.74237 0.397869 -0.879397 68 -4.75618 0.0917886 -0.878977 119 -4.70003 0.70874 -0.87813 29 -4.82667 -0.500105 -0.877249 45 -4.69965 0.670943 -0.876864 60 -4.74533 0.00950992 -0.876446 64 -4.7392 -0.19907 -0.876025 29 -4.6999 0.640852 -0.876021 31 -4.9324 1.07635 -0.876009 69 -4.74099 -0.064994 -0.875602 33 -4.74081 0.0765068 -0.875602 98 -4.69063 0.692194 -0.875598 53 -4.72583 -0.33259 -0.87476 61 -4.73395 -0.183985 -0.874759 29 -4.73488 0.158255 -0.874757 191 -4.74051 0.960629 -0.873937 67 -4.73342 -0.042626 -0.873915 75 -4.68819 0.654211 -0.873911 35 -4.73164 -0.0128894 -0.873493 36 -4.72694 -0.161452 -0.873072 29 -4.71243 0.328151 -0.871803 81 -4.71349 0.246456 -0.87096 68 -4.72212 0.972442 -0.870631 63 -4.7173 -0.0796225 -0.87054 57 -4.79319 -0.48123 -0.869812 21 -4.70398 -0.146002 -0.868009 31 -4.7048 -0.116444 -0.868009 77 -4.70892 0.93903 -0.8665 70 -4.70368 0.915014 -0.864434 82 -4.68682 -0.13083 -0.864212 71 -4.6877 -0.0940155 -0.864212 77 -4.75088 0.610158 -0.864022 182 -4.71229 0.847755 -0.863608 65 -4.70164 0.884037 -0.862781 89 -4.68537 0.896303 -0.859889 83 -4.74407 -0.460974 -0.85907 22 -4.85508 1.03508 -0.858933 54 -4.74365 -0.423331 -0.858243 79 -4.75308 -0.266533 -0.857829 69 -4.69289 0.776116 -0.856998 132 -4.67878 0.857083 -0.856997 78 -4.68214 0.827339 -0.856584 70 -4.74396 -0.288409 -0.856177 95 -4.74684 -0.236231 -0.856176 158 -4.9178 -0.513934 -0.85497 41 -4.72671 -0.436706 -0.854938 65 -4.72547 -0.406642 -0.854112 85 -4.72851 -0.369516 -0.854111 58 -4.73327 -0.302635 -0.854111 88 -4.71953 -0.383693 -0.852459 76 -4.73105 0.195983 -0.852455 97 -4.66475 0.801736 -0.852039 55 -4.82382 1.0124 -0.851785 50 -4.72459 -0.249888 -0.851632 81 -4.7303 0.0918482 -0.85163 116 -4.71668 -0.316368 -0.850806 69 -4.72608 0.106642 -0.850803 106 -4.72161 0.128826 -0.849977 107 -4.70625 -0.352776 -0.849153 63 -4.81355 0.994392 -0.849005 51 -4.70332 0.365474 -0.848736 97 -4.70343 -0.337687 -0.848327 53 -4.71288 0.158271 -0.848324 135 -4.66049 0.718432 -0.848321 75 -4.67322 0.615533 -0.847908 91 -4.65084 0.754407 -0.847495 25 -4.70553 0.14327 -0.846671 104 -4.81989 0.901266 -0.846623 120 -4.66728 0.584995 -0.845843 140 -4.66056 0.636278 -0.845843 74 -4.8216 0.870247 -0.845829 143 -4.81884 0.88539 -0.845829 139 -4.70121 0.0766706 -0.845432 122 -4.68937 0.342253 -0.845431 77 -4.68653 0.379072 -0.845431 96 -4.64467 0.731015 -0.845429 47 -4.79746 0.975258 -0.845034 64 -4.69671 0.172587 -0.845019 145 -4.68142 0.393488 -0.844604 73 -4.69186 -0.196258 -0.844194 61 -4.66811 0.510804 -0.844191 100 -4.66221 0.562101 -0.84419 95 -4.86163 -0.485226 -0.843056 17 -4.68331 -0.0927408 -0.841715 63 -4.68406 0.0396941 -0.841714 109 -4.68391 0.0544105 -0.841714 98 -4.66586 0.414406 -0.841712 85 -4.8031 0.851219 -0.841461 70 -4.78472 0.949115 -0.84146 19 -4.68227 0.00291565 -0.841301 83 -4.63305 0.677179 -0.841298 62 -4.67566 0.208706 -0.840887 107 -4.65411 0.494569 -0.840885 80 -4.65008 0.531107 -0.840885 112 -4.99038 1.06178 -0.840507 82 -4.65518 0.465133 -0.840472 78 -4.67633 0.0249811 -0.840061 85 -4.65479 0.428222 -0.839646 86 -4.64256 0.545061 -0.839645 69 -4.62206 0.697879 -0.839645 60 -4.67206 -0.0630901 -0.839235 94 -4.65147 0.442667 -0.839233 76 -4.84361 -0.468167 -0.839085 19 -4.66704 -0.180392 -0.838823 73 -4.6685 -0.0263505 -0.838409 94 -4.66856 -0.0116848 -0.838409 84 -4.64396 0.478807 -0.838406 80 -4.61975 0.645714 -0.837579 81 -4.84192 -0.399047 -0.837496 91 -4.61382 0.659693 -0.836753 155 -4.84121 -0.330189 -0.836304 28 -4.83709 -0.360466 -0.835907 52 -4.6547 -0.0408193 -0.835517 97 -4.82748 -0.451401 -0.83551 62 -4.65228 -0.0773331 -0.835104 97 -4.82811 -0.375094 -0.834319 81 -4.64217 -0.164686 -0.833452 93 -4.8172 -0.412376 -0.83273 53 -4.81144 0.474909 -0.832726 136 -4.62793 0.323502 -0.83221 160 -4.80706 0.459201 -0.831534 106 -4.75881 0.819994 -0.831533 22 -4.76194 0.789747 -0.831136 10 -4.63196 -0.113281 -0.830972 137 -4.80611 -0.426693 -0.830745 50 -4.62725 -0.14224 -0.830146 120 -4.61914 0.242852 -0.829318 148 -4.6164 0.257264 -0.828905 84 -4.61424 0.293514 -0.828904 82 -4.61985 -0.127441 -0.828494 136 -4.61633 0.220917 -0.828492 183 -4.74205 0.801669 -0.827562 17 -4.60353 0.30741 -0.826839 147 -4.78343 -0.341656 -0.824788 44 -4.59212 0.270517 -0.823947 123 -4.72156 0.744741 -0.821605 42 -4.71533 0.758926 -0.820811 15 -4.89172 1.02528 -0.820381 106 -4.76433 -0.23527 -0.819625 69 -4.72506 0.654217 -0.81962 89 -4.75842 -0.272477 -0.81883 66 -4.75573 -0.249868 -0.818036 70 -4.73781 0.482285 -0.818032 51 -4.73567 0.399476 -0.816047 86 -4.8765 0.982298 -0.815824 89 -4.73992 -0.286459 -0.815256 59 -4.74733 0.108686 -0.815254 94 -4.74532 0.175786 -0.815254 111 -4.745 0.123537 -0.814857 91 -4.86604 1.00411 -0.814685 52 -4.87185 0.965487 -0.814305 126 -4.73762 -0.219183 -0.814065 76 -4.73469 -0.196715 -0.81327 42 -4.73605 0.160492 -0.813268 119 -4.73589 0.0934736 -0.812872 129 -4.93175 -0.516606 -0.812793 76 -4.68078 0.700418 -0.812074 55 -4.68121 0.670417 -0.81128 86 -4.67356 0.721848 -0.81128 54 -4.87588 0.823885 -0.810128 221 -4.68439 0.60339 -0.810089 98 -4.67857 0.632538 -0.809692 83 -4.67133 0.683942 -0.809692 127 -4.68745 0.529046 -0.808898 80 -4.70785 -0.180935 -0.807711 22 -4.71133 0.00403062 -0.80771 98 -4.71129 0.0188329 -0.80771 101 -4.68289 0.49871 -0.80731 48 -4.6813 0.513418 -0.80731 58 -4.67537 0.56486 -0.80731 75 -4.68951 0.410175 -0.806913 68 -4.66694 0.615966 -0.806912 104 -4.66774 0.57879 -0.806118 86 -4.69852 -0.0993847 -0.805327 61 -4.69541 -0.0476987 -0.804533 83 -4.69316 0.0702723 -0.804135 80 -4.67387 0.430934 -0.804133 80 -4.67637 0.379348 -0.803737 103 -4.68913 -0.0771348 -0.803342 80 -4.68959 0.040727 -0.803341 82 -4.68342 -0.150675 -0.802548 111 -4.65378 0.547292 -0.802544 65 -4.88141 -0.48781 -0.80254 99 -4.68097 -0.165329 -0.802151 78 -4.68382 -0.025572 -0.80215 80 -4.67778 0.23919 -0.802149 55 -4.68151 -0.0623432 -0.801753 86 -4.83757 0.778625 -0.801394 179 -4.86924 -0.471075 -0.799881 46 -4.66071 0.326428 -0.799766 83 -4.87646 -0.363733 -0.799501 153 -4.66878 -0.113593 -0.799371 91 -4.66984 0.0551193 -0.79937 61 -4.66644 -0.128217 -0.798974 107 -4.66819 -0.0109089 -0.798973 80 -4.79576 0.935188 -0.798735 60 -4.66406 0.142985 -0.798575 58 -4.6625 0.186935 -0.798575 56 -4.65184 0.340454 -0.798177 74 -4.6488 0.354905 -0.79778 115 -4.65033 0.274278 -0.796986 130 -4.78709 0.91796 -0.796457 49 -4.64915 0.222921 -0.796192 91 -4.78556 0.894341 -0.795317 47 -4.78915 0.863917 -0.794938 68 -4.63379 0.287827 -0.793809 90 -4.84535 -0.384225 -0.793805 138 -4.77868 0.87758 -0.793419 71 -4.63355 0.258586 -0.793412 98 -4.62848 0.309376 -0.793015 49 -4.78223 0.824015 -0.79228 74 -4.7808 0.785199 -0.790761 255 -4.62046 0.206834 -0.790235 151 -4.81403 -0.450169 -0.788868 46 -4.82276 -0.344203 -0.788868 63 -4.82597 -0.222697 -0.788108 104 -4.80499 -0.396007 -0.78621 69 -5.03886 -0.52385 -0.786078 66 -4.79264 -0.425269 -0.784311 48 -4.78417 -0.409319 -0.782412 58 -4.79257 0.261229 -0.782029 100 -4.78541 0.283494 -0.78089 101 -4.74656 0.64265 -0.780128 139 -4.92146 1.05172 -0.779921 11 -4.74661 0.627488 -0.779749 117 -4.72546 0.74598 -0.778989 48 -4.77335 -0.287678 -0.778614 219 -4.73384 0.588105 -0.776331 117 -4.75675 -0.301592 -0.775576 109 -4.76054 -0.234318 -0.775576 255 -4.72712 0.609926 -0.775572 147 -4.75332 -0.323861 -0.775197 57 -4.70836 0.728236 -0.775191 65 -4.70202 0.704638 -0.773293 72 -4.90964 0.92063 -0.773048 76 -4.71811 0.571203 -0.772913 107 -4.70754 0.652638 -0.772913 73 -4.71598 0.55594 -0.772154 145 -4.73822 -0.248024 -0.771399 255 -4.73504 -0.270228 -0.771019 255 -4.87667 1.02588 -0.770877 11 -4.73841 -0.0617031 -0.770258 100 -4.71936 0.428988 -0.770256 102 -4.89128 0.93302 -0.770154 74 -4.71533 0.451048 -0.769876 93 -4.8849 0.955671 -0.769792 78 -4.71677 0.413839 -0.769496 112 -4.89318 0.901536 -0.76943 179 -4.70293 0.53203 -0.769116 107 -4.70423 0.502274 -0.768737 104 -4.68301 0.671863 -0.768736 77 -4.72838 -0.0763776 -0.76836 98 -4.7134 0.383749 -0.768357 115 -4.70459 0.479911 -0.768357 117 -4.67894 0.686298 -0.768356 156 -4.72269 -0.202504 -0.767981 53 -4.72529 -0.128299 -0.76798 95 -4.72601 -0.0986066 -0.76798 98 -4.72693 -0.0317876 -0.76798 92 -4.71022 0.3984 -0.767977 108 -4.72507 0.00534773 -0.7676 102 -4.7231 -0.0094819 -0.76722 122 -4.7002 0.464582 -0.767218 113 -4.9367 -0.498096 -0.766905 59 -4.94188 -0.443786 -0.766904 150 -4.7208 0.057274 -0.76684 99 -4.70732 0.360976 -0.766838 110 -4.69286 0.51603 -0.766838 101 -4.8819 0.875608 -0.766536 64 -4.71586 -0.113163 -0.766081 128 -4.71699 -0.0464857 -0.766081 99 -4.71703 0.0424303 -0.766081 99 -4.71595 0.109108 -0.76608 105 -4.7147 0.0720483 -0.765701 99 -4.71431 0.0942646 -0.765701 103 -4.71166 0.123843 -0.765321 104 -4.70609 0.175516 -0.764561 99 -4.70536 0.138503 -0.764181 104 -4.70466 0.160675 -0.764181 107 -4.9194 -0.473048 -0.763287 127 -4.70146 0.0202211 -0.763043 100 -4.69716 -0.149537 -0.762664 135 -4.83948 0.962349 -0.761833 137 -4.6824 -0.178447 -0.760006 110 -4.68097 -0.163657 -0.759626 134 -4.67377 0.306959 -0.759623 123 -4.90645 -0.370984 -0.759307 134 -4.67079 0.292049 -0.758864 112 -4.90134 -0.386107 -0.758584 229 -4.84859 0.814483 -0.758578 226 -4.89343 -0.455184 -0.758222 44 -4.90333 -0.332069 -0.758222 78 -4.66443 0.32847 -0.758104 204 -4.66142 0.342989 -0.757724 207 -4.66823 0.188998 -0.757345 127 -4.83431 0.851133 -0.757131 179 -5.15268 -0.540621 -0.755945 69 -4.88263 -0.346185 -0.754604 212 -4.87529 -0.415018 -0.754243 59 -4.64767 0.210217 -0.753548 96 -4.64502 0.224733 -0.753168 137 -4.87685 -0.315034 -0.753157 168 -4.63841 0.239053 -0.752029 120 -4.83538 -0.396543 -0.746646 157 -4.78326 0.787696 -0.745917 198 -4.82525 -0.289158 -0.74339 147 -4.99983 1.00677 -0.74189 132 -4.74981 0.820405 -0.740852 255 -4.99444 0.973133 -0.739834 213 -4.98362 0.987326 -0.738463 59 -4.97731 1.01862 -0.738463 194 -4.79866 -0.234802 -0.737963 138 -4.74303 0.765538 -0.737958 78 -4.79471 -0.272383 -0.737602 51 -4.9628 1.04009 -0.73675 66 -4.78169 -0.219013 -0.734707 91 -4.77393 -0.256275 -0.733622 125 -4.95733 0.925788 -0.731953 102 -4.71241 0.745231 -0.731809 84 -5.01524 -0.50957 -0.731617 96 -5.01802 -0.438258 -0.730932 148 -4.9544 0.909172 -0.730925 193 -4.94665 0.939926 -0.730583 106 -5.0127 -0.453644 -0.730246 162 -4.6945 0.71962 -0.727829 92 -4.7072 0.600901 -0.727106 74 -4.69824 0.667386 -0.727106 89 -4.69836 0.652341 -0.726744 91 -4.69844 0.637304 -0.726383 86 -4.73848 -0.0980613 -0.726025 84 -4.70321 0.585349 -0.726021 92 -4.6892 0.688628 -0.726021 92 -4.72435 0.325733 -0.725299 70 -4.70376 0.547917 -0.725298 115 -4.72793 -0.187089 -0.724578 73 -4.67924 0.702146 -0.724574 78 -4.6897 0.61356 -0.724212 101 -4.70168 0.495297 -0.723851 109 -4.69332 0.569086 -0.723851 100 -4.70126 0.480313 -0.723489 103 -4.71945 -0.201647 -0.723131 79 -4.7043 0.428403 -0.723128 95 -4.69343 0.51677 -0.722766 86 -4.71696 -0.16446 -0.722407 98 -4.71934 -0.068111 -0.722407 93 -4.90815 0.877066 -0.722017 114 -4.96222 -0.464544 -0.72168 177 -4.70119 0.346282 -0.72132 70 -4.69514 0.397776 -0.720958 79 -4.68905 0.46411 -0.720957 106 -4.95486 -0.47953 -0.720652 140 -4.70995 0.0207543 -0.720598 73 -4.70448 0.22782 -0.720597 114 -4.69191 0.412341 -0.720596 101 -4.7073 -0.0827958 -0.720236 95 -4.70597 0.13904 -0.720235 102 -4.69981 0.242375 -0.719873 95 -4.67616 0.529653 -0.719872 76 -4.70353 0.0724171 -0.719512 101 -4.70299 0.101968 -0.719512 99 -4.7008 0.175827 -0.719512 89 -4.69707 0.257019 -0.719511 79 -4.70078 -0.112262 -0.719151 121 -4.70212 0.00590396 -0.719151 82 -4.70013 -0.0162569 -0.718789 86 -4.69765 0.153522 -0.718788 83 -4.69627 -0.134321 -0.718428 76 -4.69809 -0.0310218 -0.718427 82 -4.68324 0.374473 -0.718425 107 -4.67552 0.440445 -0.718063 65 -4.69403 -0.0457636 -0.717704 83 -4.68647 0.18996 -0.716979 86 -4.67656 0.359113 -0.716978 91 -4.68599 -0.148817 -0.716619 114 -4.93784 -0.352753 -0.715855 151 -4.68165 0.0866728 -0.715533 80 -4.68036 0.0351655 -0.715171 88 -4.92974 -0.406679 -0.71517 93 -4.6762 0.0571504 -0.714448 91 -4.67296 0.123188 -0.714086 83 -4.66546 0.291896 -0.714085 81 -4.66424 0.203618 -0.713 80 -4.65275 0.305712 -0.711914 194 -4.65066 0.276217 -0.711191 160 -4.84483 0.850409 -0.710367 67 -4.87917 -0.371378 -0.705918 223 -4.87602 -0.386538 -0.705576 111 -4.82219 0.807606 -0.705227 52 -4.81302 0.790598 -0.703172 57 -4.86425 -0.331745 -0.702834 64 -4.85937 -0.316048 -0.701806 78 -4.79112 0.82578 -0.70043 62 -5.19538 -0.527732 -0.697505 57 -4.78044 0.770022 -0.697004 99 -4.82827 -0.275782 -0.695981 106 -4.77719 0.700438 -0.694606 130 -4.77301 0.715162 -0.694263 96 -4.81512 -0.297738 -0.693925 58 -4.7653 0.752328 -0.69392 97 -4.76489 0.729289 -0.693235 104 -4.76897 0.645838 -0.691865 118 -4.80158 -0.258979 -0.691184 157 -4.76091 0.675257 -0.691179 107 -4.8004 -0.243781 -0.690841 118 -4.79756 -0.220956 -0.690156 100 -4.76218 0.622135 -0.690152 132 -4.75324 0.658997 -0.689466 108 -4.78901 -0.190363 -0.688442 103 -4.78642 -0.205312 -0.6881 131 -4.75042 0.605501 -0.687753 149 -4.75111 0.567727 -0.687068 163 -4.74447 0.589645 -0.686383 158 -4.74504 0.55193 -0.685698 172 -4.77112 -0.137021 -0.685016 138 -4.7687 -0.151936 -0.684673 128 -4.74254 0.521492 -0.68467 188 -4.74087 0.536388 -0.68467 183 -4.76623 -0.166837 -0.684331 116 -4.76562 -0.121849 -0.683988 149 -4.73472 0.483093 -0.682614 198 -4.75461 -0.0841421 -0.681932 160 -4.75525 -0.0318596 -0.681931 182 -4.72926 0.497573 -0.681929 193 -4.73033 0.467666 -0.681586 207 -4.75038 -0.0989752 -0.681246 158 -4.75139 -0.0168846 -0.681246 187 -4.74894 -0.0690873 -0.680904 171 -4.74724 -0.0466768 -0.680561 169 -4.72796 0.429998 -0.680559 208 -4.72463 0.444675 -0.680216 204 -4.72726 0.392547 -0.679873 213 -4.74152 0.0204442 -0.679533 189 -4.72571 0.362557 -0.679188 211 -4.73749 0.0353312 -0.678847 195 -4.71947 0.414335 -0.678846 211 -4.73565 0.00557355 -0.678505 184 -4.73485 0.087395 -0.678504 207 -4.72289 0.347441 -0.678503 212 -4.73313 0.0725002 -0.678162 202 -4.73204 0.124537 -0.678161 211 -4.71865 0.376963 -0.67816 213 -4.73061 0.102206 -0.677819 208 -4.72784 0.191351 -0.677818 212 -4.72939 0.0576038 -0.677477 202 -4.72052 0.295155 -0.677475 209 -4.72572 0.139262 -0.677134 209 -4.72261 0.22089 -0.677133 212 -4.71761 0.309864 -0.677133 212 -4.72251 0.176309 -0.676791 214 -4.71876 0.257878 -0.67679 212 -4.71793 0.272702 -0.67679 212 -4.71464 0.32456 -0.67679 213 -4.71758 0.242962 -0.676448 211 -4.71935 0.153947 -0.676106 209 -4.71737 0.205828 -0.676105 209 -4.92629 1.04796 -0.667581 29 -4.92152 1.02267 -0.66599 34 -4.99452 -0.4925 -0.664725 35 -4.89379 1.00071 -0.660898 33 -5.10074 -0.510836 -0.66052 67 -4.88988 0.959907 -0.658989 66 -4.8853 0.982939 -0.658989 53 -4.92598 -0.462682 -0.653267 34 -4.85607 0.937235 -0.652942 84 -4.83186 0.91668 -0.648487 65 -4.89003 -0.444011 -0.647221 35 -4.88794 -0.374275 -0.645947 82 -4.9225 1.03163 -0.645319 30 -4.81951 0.875073 -0.645304 61 -4.92378 1.01577 -0.645009 68 -4.87698 -0.412031 -0.644674 57 -4.80951 0.896657 -0.644349 61 -4.91338 0.997618 -0.642839 84 -4.86385 -0.426378 -0.642765 72 -4.80475 0.856715 -0.64244 62 -4.78993 0.838459 -0.639576 62 -4.84539 -0.386554 -0.639264 34 -4.84378 -0.355833 -0.638627 64 -4.78605 0.81451 -0.638303 34 -4.8831 0.967721 -0.637258 86 -4.77745 0.782116 -0.636075 33 -4.77497 0.797123 -0.636075 34 -4.77793 0.766781 -0.635757 33 -4.9431 -0.478555 -0.635405 57 -4.87059 0.949433 -0.634777 61 -4.76785 0.742059 -0.63353 33 -5.10902 1.06338 -0.632826 180 -4.85995 0.931595 -0.632607 94 -4.80797 -0.330632 -0.632581 68 -4.79519 -0.314695 -0.630353 66 -4.79418 -0.299516 -0.630034 63 -4.7487 0.723687 -0.630029 32 -4.749 0.708464 -0.629711 32 -4.84485 0.905156 -0.629506 92 -4.90525 -0.459133 -0.629203 59 -4.84378 0.889238 -0.628886 89 -4.78371 -0.276304 -0.628125 62 -4.78455 -0.261272 -0.628125 61 -4.74478 0.654521 -0.627801 32 -4.83681 0.872315 -0.627336 89 -4.77154 -0.245606 -0.625897 60 -4.72885 0.682565 -0.625892 31 -4.72902 0.667418 -0.625574 31 -4.76834 -0.230445 -0.62526 58 -4.7302 0.614586 -0.624619 32 -4.822 0.854107 -0.624546 89 -4.72434 0.628899 -0.623983 31 -4.75875 -0.177623 -0.62335 32 -4.72428 0.598688 -0.623346 31 -4.87445 -0.378919 -0.623312 101 -4.75556 -0.207444 -0.623032 59 -4.86802 -0.432306 -0.623002 78 -4.81623 0.829749 -0.622995 87 -4.75422 -0.192435 -0.622714 57 -4.75605 -0.140149 -0.622714 31 -4.86867 -0.401538 -0.622692 83 -4.75361 -0.155037 -0.622396 32 -4.81296 0.813657 -0.622065 83 -4.71635 0.582578 -0.621755 31 -4.72295 0.508204 -0.621437 31 -4.71512 0.559859 -0.621119 31 -4.74151 -0.0876422 -0.620167 31 -4.71624 0.47747 -0.619846 31 -4.70902 0.544095 -0.619846 31 -4.71275 0.492069 -0.619528 31 -4.70874 0.529066 -0.619528 31 -4.84574 -0.414863 -0.619281 72 -4.79794 0.795717 -0.619275 83 -4.73529 -0.102441 -0.619213 31 -4.71591 0.440025 -0.61921 31 -4.73278 -0.124713 -0.618895 31 -4.73386 -0.0726668 -0.618894 31 -4.71531 0.425021 -0.618892 31 -4.72847 0.0165187 -0.617939 32 -4.71494 0.35784 -0.617937 31 -4.70665 0.454038 -0.617937 31 -4.79187 0.771582 -0.617725 75 -4.72617 -0.0577425 -0.617621 31 -4.72639 -0.0354706 -0.617621 31 -4.71063 0.387284 -0.617619 31 -4.71366 0.320509 -0.617301 31 -4.72253 -0.0206254 -0.616985 31 -4.70482 0.409115 -0.616982 31 -4.83694 -0.322319 -0.6168 80 -4.72037 0.0461066 -0.616666 32 -4.71772 0.164716 -0.616665 32 -4.7087 0.335012 -0.616664 31 -4.70592 0.371984 -0.616664 32 -4.71665 -0.00581528 -0.61603 31 -4.71366 0.0978492 -0.615711 32 -4.70705 0.268045 -0.61571 31 -4.82638 -0.359668 -0.61556 76 -4.82748 -0.344504 -0.61556 82 -4.71033 0.149598 -0.615392 31 -4.70901 0.186588 -0.615392 31 -4.78442 0.71659 -0.615245 70 -4.70577 0.21607 -0.615074 31 -4.70224 0.282572 -0.615073 31 -4.77669 0.753845 -0.614934 66 -4.70865 0.0311329 -0.614756 32 -4.70826 0.0681143 -0.614756 32 -4.70802 0.0829044 -0.614756 32 -4.70741 0.112484 -0.614756 31 -4.70273 0.238132 -0.614755 31 -4.70196 0.252906 -0.614755 31 -5.07291 -0.483034 -0.614589 143 -4.70091 0.134464 -0.613801 32 -4.69854 0.200905 -0.613801 31 -4.82004 -0.275486 -0.613699 83 -4.69101 0.304035 -0.613482 31 -4.81624 -0.30563 -0.613389 82 -4.81718 -0.290496 -0.613389 80 -4.8043 -0.236649 -0.610909 80 -4.76355 0.667774 -0.610904 67 -4.80156 -0.251628 -0.610599 82 -4.80305 -0.221454 -0.610598 79 -4.74973 0.734465 -0.610283 77 -4.75339 0.696862 -0.609974 62 -4.74773 0.680847 -0.608733 76 -4.75492 0.61342 -0.608424 70 -4.75579 0.590773 -0.608114 65 -4.78687 -0.182949 -0.607808 75 -4.74959 0.559777 -0.606564 69 -4.73921 0.641756 -0.606563 58 -4.77755 -0.16751 -0.606257 75 -4.77872 -0.129982 -0.606257 77 -4.7474 0.544425 -0.605944 72 -4.76654 -0.197062 -0.604707 76 -4.74895 0.454138 -0.604704 71 -4.74838 0.439045 -0.604394 72 -4.74327 0.491228 -0.604394 75 -4.72748 0.625126 -0.604393 75 -4.76603 -0.0771316 -0.604086 75 -4.73812 0.520817 -0.604083 75 -4.92418 0.999739 -0.603988 68 -4.76331 -0.114504 -0.603777 75 -4.7358 0.50553 -0.603463 79 -4.75854 -0.144287 -0.603157 77 -4.72622 0.572202 -0.603153 80 -4.75671 -0.0246187 -0.602536 75 -4.73716 0.385613 -0.601914 75 -4.72979 0.467403 -0.601913 73 -4.74887 -0.00961549 -0.601296 81 -4.7488 0.0276818 -0.601295 87 -4.90792 0.980289 -0.601046 88 -4.74587 -0.0990691 -0.600986 72 -4.90904 0.964474 -0.600751 83 -4.74452 -0.0617573 -0.600676 75 -4.74469 -0.0468503 -0.600676 72 -4.74492 0.00532094 -0.600675 80 -4.74473 0.0425879 -0.600675 84 -4.73216 0.347859 -0.600673 77 -4.72805 0.39987 -0.600673 75 -4.7426 0.0574796 -0.600365 85 -4.74067 0.14686 -0.600365 84 -4.73669 0.243628 -0.600364 77 -4.73768 0.17658 -0.600054 80 -4.72928 0.332736 -0.600053 78 -4.72283 0.414396 -0.600053 75 -4.73418 0.213705 -0.599744 77 -4.73539 0.124394 -0.599434 86 -4.73285 0.19876 -0.599434 78 -4.72781 0.295358 -0.599434 81 -4.72759 0.265546 -0.599124 79 -4.73212 0.0945824 -0.598815 82 -4.72756 0.228323 -0.598814 75 -4.73054 0.0722617 -0.598504 83 -4.72279 0.280185 -0.598503 77 -4.71667 0.369151 -0.598503 82 -4.89412 0.937506 -0.597809 91 -4.7239 0.109309 -0.597574 80 -4.72241 0.161242 -0.597574 80 -4.71453 0.316902 -0.597573 79 -4.89315 0.921374 -0.59722 88 -4.94827 -0.456134 -0.595756 50 -4.8727 0.901556 -0.593689 86 -4.87162 0.885516 -0.593101 89 -4.92997 -0.438934 -0.592813 76 -4.8738 0.862194 -0.592807 88 -4.92409 -0.415075 -0.591636 84 -4.86285 0.844439 -0.590747 92 -4.85963 0.828128 -0.589864 93 -4.91156 -0.398557 -0.589576 88 -4.91279 -0.383124 -0.589576 108 -4.85373 0.803553 -0.588393 92 -4.89678 -0.358763 -0.586928 90 -4.84648 0.786664 -0.586922 102 -4.84112 0.77015 -0.585745 82 -4.88406 -0.342482 -0.584867 87 -4.88556 -0.288652 -0.584573 87 -4.88117 -0.326893 -0.584279 87 -4.88051 -0.273003 -0.58369 90 -4.82789 0.752417 -0.583391 84 -4.8317 0.714176 -0.583097 83 -4.87278 -0.303326 -0.582807 90 -4.82805 0.698113 -0.582214 87 -4.82356 0.728434 -0.582214 86 -4.86949 -0.257108 -0.581924 94 -4.85879 -0.23365 -0.580159 95 -4.81584 0.642266 -0.579272 92 -4.81379 0.657391 -0.579271 86 -4.85226 -0.20283 -0.578981 95 -4.85316 -0.179961 -0.578981 93 -4.80975 0.672227 -0.578977 87 -4.81489 0.619038 -0.578683 91 -4.84171 -0.217681 -0.57751 94 -4.8359 -0.164206 -0.576333 89 -4.80744 0.549031 -0.576329 92 -4.80112 0.601857 -0.576329 92 -5.16778 -0.513731 -0.576213 62 -4.83576 -0.0957985 -0.576038 96 -4.80373 0.563889 -0.576035 90 -4.8049 0.518146 -0.575447 93 -4.82913 -0.126056 -0.575156 99 -4.79317 0.585519 -0.574858 92 -4.82453 -0.148711 -0.574567 91 -4.82555 -0.110815 -0.574567 92 -4.82615 -0.0804931 -0.574567 95 -4.82648 -0.0577499 -0.574567 99 -4.79942 0.494644 -0.57427 91 -4.79899 0.479357 -0.573976 91 -4.80063 0.441461 -0.573682 95 -4.81872 -0.0425595 -0.57339 95 -4.78949 0.531636 -0.573387 92 -4.79935 0.304751 -0.571917 92 -4.79337 0.387629 -0.571916 98 -4.79149 0.410212 -0.571916 92 -4.8068 0.0480892 -0.571624 106 -4.79374 0.357345 -0.571622 97 -4.78472 0.462669 -0.571622 93 -4.80327 0.131069 -0.571329 100 -4.78624 0.424891 -0.571327 87 -4.80308 -0.0047836 -0.571035 94 -4.79726 0.236549 -0.571034 84 -4.79089 0.341981 -0.571034 91 -4.80103 -0.0274154 -0.570741 92 -4.80109 0.0102921 -0.570741 99 -4.79048 0.319258 -0.570739 96 -4.79906 0.0253529 -0.570447 98 -4.79822 0.0931922 -0.570446 102 -4.79617 0.168549 -0.570446 94 -4.79501 0.198681 -0.570446 91 -4.79042 0.289024 -0.570445 92 -4.78471 0.371747 -0.570445 92 -4.79673 0.0630078 -0.570152 102 -4.79651 0.0780758 -0.570152 97 -4.79364 0.183528 -0.570152 95 -4.78975 0.266325 -0.570151 92 -4.79295 0.145804 -0.569858 99 -4.78982 0.115569 -0.569269 96 -4.78415 0.220765 -0.568974 83 -4.78069 0.250706 -0.56868 87 -5.01423 1.00533 -0.565235 76 -4.98623 0.983598 -0.560846 89 -5.04398 -0.476792 -0.558659 72 -4.97328 0.956811 -0.558378 97 -4.94899 0.936168 -0.554538 96 -4.94995 0.920265 -0.554264 105 -4.93946 0.878328 -0.551795 91 -4.93472 0.893499 -0.551521 90 -4.99024 -0.455613 -0.550979 82 -4.93243 0.861153 -0.550424 92 -4.92338 0.843706 -0.548778 94 -4.96998 -0.414308 -0.547687 90 -4.96403 -0.437356 -0.547139 84 -4.91166 0.817976 -0.546584 104 -4.96139 -0.39785 -0.546316 106 -4.90833 0.801613 -0.545762 100 -4.95669 -0.381774 -0.545493 83 -4.95646 -0.358258 -0.545219 89 -4.90468 0.761571 -0.54439 83 -4.90104 0.784675 -0.54439 95 -4.89564 0.72877 -0.542471 89 -4.93583 -0.341069 -0.542201 96 -4.92997 -0.309511 -0.541104 101 -4.88157 0.742421 -0.540825 90 -4.92502 -0.324718 -0.540556 100 -4.92347 -0.285776 -0.540007 103 -4.92121 -0.254609 -0.539458 103 -4.87979 0.671778 -0.539179 89 -4.87765 0.687106 -0.539179 88 -4.87547 0.702425 -0.539179 89 -4.91445 -0.269711 -0.538635 104 -4.87402 0.65543 -0.538082 89 -4.90986 -0.199847 -0.537538 88 -4.90257 -0.230382 -0.536715 107 -4.90129 -0.214881 -0.536441 90 -4.85936 0.630255 -0.535614 92 -4.85541 0.614273 -0.534791 88 -4.85535 0.598783 -0.534517 93 -4.88699 -0.175728 -0.534246 84 -4.8638 0.506966 -0.534243 86 -4.8796 -0.16007 -0.533149 103 -4.85179 0.544309 -0.533146 101 -4.85006 0.559549 -0.533146 102 -4.8781 -0.144672 -0.532875 101 -4.84631 0.574561 -0.532871 118 -4.87655 -0.129284 -0.532601 108 -4.87711 -0.106302 -0.5326 90 -4.87543 -0.0909315 -0.532326 89 -4.85157 0.490363 -0.532323 90 -4.84559 0.528247 -0.532049 102 -4.86624 -0.0371914 -0.530954 107 -4.86635 0.0163168 -0.530954 93 -4.8454 0.451378 -0.530952 89 -4.84322 0.474206 -0.530952 91 -4.86429 0.0316038 -0.53068 97 -4.86219 0.0468758 -0.530405 97 -4.84612 0.397771 -0.530404 88 -4.85985 -0.075284 -0.530132 90 -4.85261 0.275761 -0.53013 97 -4.84655 0.367176 -0.53013 92 -4.85771 0.0850132 -0.529857 96 -4.8473 0.328977 -0.529855 94 -4.83827 0.420122 -0.529581 91 -4.85156 0.168815 -0.529308 93 -4.85251 0.00110082 -0.529034 91 -4.84743 0.22207 -0.529033 93 -4.83298 0.434985 -0.529032 88 -4.85025 -0.0522223 -0.52876 86 -4.85048 -0.0217462 -0.52876 93 -4.84949 0.100153 -0.528759 99 -4.84805 0.0696637 -0.528485 98 -4.83843 0.313161 -0.528484 97 -4.84501 0.122925 -0.528211 98 -4.8446 0.138145 -0.528211 96 -4.84279 0.191405 -0.52821 92 -4.84216 0.206617 -0.52821 92 -4.8396 0.259846 -0.52821 92 -4.83439 0.343424 -0.52821 92 -4.83841 0.244551 -0.527936 92 -4.83345 0.297625 -0.527661 92 -4.8382 0.153207 -0.527388 93 -4.82561 0.380948 -0.527387 96 -5.39104 1.06029 -0.525143 55 -5.45622 -0.493097 -0.52301 40 -5.29972 -0.462928 -0.501612 40 -5.17854 1.00055 -0.495454 40 -5.23727 -0.399831 -0.492518 40 -5.15053 0.978204 -0.491174 40 -5.15119 0.953181 -0.490639 40 -5.21556 -0.423002 -0.489843 40 -5.14442 0.935174 -0.489302 40 -5.20235 -0.438447 -0.488239 40 -5.20488 -0.381084 -0.487971 40 -5.19023 -0.363699 -0.485831 40 -5.11614 0.913277 -0.485023 40 -5.11144 0.871012 -0.483418 40 -5.1122 0.854613 -0.483151 40 -5.10283 0.886019 -0.482615 40 -5.10311 0.811865 -0.481011 40 -5.15232 -0.336852 -0.480481 40 -5.09336 0.834913 -0.480208 40 -5.14581 -0.279692 -0.479144 40 -5.09605 0.753309 -0.478871 40 -5.08998 0.793309 -0.478871 40 -5.09643 0.737002 -0.478604 40 -5.09049 0.777006 -0.478604 40 -5.13752 -0.319758 -0.478341 40 -5.12663 -0.302975 -0.476736 40 -5.08107 0.718401 -0.476197 40 -5.12093 -0.262335 -0.475667 40 -5.28699 1.00516 -0.475645 40 -5.49379 1.04847 -0.474799 156 -5.10985 -0.245736 -0.474062 40 -5.07085 0.676297 -0.474057 40 -5.07794 0.6043 -0.47379 40 -5.06674 0.691945 -0.47379 40 -5.07208 0.635936 -0.473522 40 -5.07208 0.619749 -0.473255 40 -5.10069 -0.229289 -0.472724 40 -5.10233 -0.18922 -0.472724 40 -5.1029 -0.173191 -0.472724 40 -5.0592 0.658502 -0.472185 40 -5.06604 0.586678 -0.471918 40 -5.09181 -0.204901 -0.471387 40 -5.08979 -0.148807 -0.470851 40 -5.09023 -0.132817 -0.470851 40 -5.06233 0.529857 -0.470581 40 -5.06437 0.489881 -0.470313 40 -5.05689 0.505169 -0.469511 40 -5.05103 0.56074 -0.46951 40 -5.06289 0.417548 -0.469244 40 -5.05799 0.473191 -0.469243 40 -5.0508 0.544646 -0.469243 40 -5.07675 -0.116577 -0.468979 40 -5.07725 -0.0926514 -0.468979 40 -5.0779 -0.0447967 -0.468978 40 -5.07157 -0.0766419 -0.468176 40 -5.06782 -0.0606827 -0.467641 40 -5.04971 0.432375 -0.467639 40 -5.05035 0.400473 -0.467371 40 -5.0641 0.0348008 -0.467106 40 -5.06274 0.122293 -0.467105 40 -5.05954 0.217696 -0.467105 40 -5.04438 0.447868 -0.467104 40 -5.06143 0.0904347 -0.466838 40 -5.05398 0.289075 -0.466837 40 -5.05914 0.106285 -0.46657 40 -5.05766 0.161904 -0.46657 40 -5.05823 -0.0208876 -0.466304 40 -5.04811 0.320553 -0.466302 40 -5.05441 0.137939 -0.466035 40 -5.05317 0.177633 -0.466035 40 -5.05091 0.233182 -0.466035 40 -5.05015 0.249051 -0.466035 40 -5.04892 0.272846 -0.466035 40 -5.0423 0.375882 -0.466034 40 -5.0543 0.0108658 -0.465769 40 -5.05406 0.0505613 -0.465768 40 -5.05061 0.193421 -0.465768 40 -5.04259 0.344049 -0.465767 40 -5.214 0.974703 -0.465705 40 -5.05232 -0.00502115 -0.465501 40 -5.04793 0.066329 -0.464966 40 -5.0392 0.304045 -0.464965 40 -5.21268 0.949085 -0.46494 40 -5.02962 0.35898 -0.464162 40 -5.25861 -0.458213 -0.462398 61 -5.16287 0.923535 -0.458058 40 -5.15792 0.905977 -0.457039 40 -5.21856 -0.413236 -0.45679 40 -5.42375 -0.469981 -0.456432 41 -5.21588 -0.39652 -0.45628 40 -5.19155 -0.427386 -0.453477 40 -5.19337 -0.378285 -0.453221 40 -5.12963 0.859713 -0.452451 40 -5.18124 -0.352794 -0.451437 40 -5.11908 0.874526 -0.451431 40 -5.18034 -0.336376 -0.451182 40 -5.17148 -0.31944 -0.449908 40 -5.11141 0.823796 -0.449393 40 -5.1088 0.83985 -0.449393 40 -5.16789 -0.278464 -0.449143 40 -5.11328 0.799404 -0.449138 40 -5.16105 -0.294328 -0.448378 40 -5.15883 -0.261675 -0.447868 40 -5.16001 -0.237361 -0.447868 40 -5.10595 0.781885 -0.447863 40 -5.15492 -0.1641 -0.446848 40 -5.15149 -0.204494 -0.446594 40 -5.09268 0.763565 -0.445824 40 -5.14022 -0.187813 -0.445064 40 -5.13695 -0.220011 -0.44481 40 -5.32824 -0.445309 -0.444428 40 -5.51919 1.02895 -0.44435 20 -5.08897 0.705949 -0.444295 40 -5.08279 0.721395 -0.443786 40 -5.12766 -0.146968 -0.44328 40 -5.07657 0.73681 -0.443276 40 -5.12568 -0.0341319 -0.44277 40 -5.12214 -0.130676 -0.442515 40 -5.1227 -0.106539 -0.442515 40 -5.12301 -0.0904434 -0.442515 40 -5.08264 0.648264 -0.442512 40 -5.23977 0.981702 -0.442462 59 -5.08268 0.632059 -0.442257 40 -5.31375 -0.402186 -0.442223 40 -5.24238 0.956633 -0.442217 40 -5.11984 -0.00189549 -0.442005 40 -5.07467 0.663486 -0.441747 40 -5.11585 -0.0179448 -0.441495 40 -5.11375 0.0383021 -0.44124 40 -5.0796 0.591243 -0.441237 40 -5.06755 0.68688 -0.441237 40 -5.10939 -0.0740777 -0.440731 40 -5.2317 0.937642 -0.440502 56 -5.0779 0.534566 -0.440218 40 -5.07354 0.574431 -0.440218 40 -5.06984 0.606296 -0.440218 40 -5.10373 -0.0499113 -0.439966 40 -5.10194 0.0222452 -0.439711 40 -5.10139 0.0783415 -0.43971 40 -5.09683 0.110327 -0.4392 40 -5.09517 0.0942868 -0.438946 40 -5.07009 0.493575 -0.438689 40 -5.21899 0.918373 -0.438543 60 -5.09178 0.0542463 -0.438436 40 -5.05646 0.548477 -0.437669 40 -5.06724 0.389096 -0.43716 40 -5.07746 0.165871 -0.436906 40 -5.06272 0.420773 -0.436905 40 -5.05389 0.516122 -0.436905 40 -5.05672 0.444298 -0.436395 40 -5.0553 0.460182 -0.436395 40 -5.05383 0.476062 -0.436395 40 -5.26495 -0.415365 -0.436344 40 -5.07097 0.181637 -0.436141 40 -5.20371 0.890325 -0.436093 60 -5.06466 0.277087 -0.435886 40 -5.06282 0.308904 -0.435886 40 -5.20453 0.873634 -0.435848 62 -5.06353 0.261082 -0.435631 40 -5.0665 0.133712 -0.435377 40 -5.06344 0.221229 -0.435377 40 -5.05318 0.364155 -0.435121 40 -5.20402 0.814772 -0.434623 65 -5.05034 0.348025 -0.434611 40 -5.05188 0.292369 -0.434357 40 -5.04423 0.403386 -0.434356 40 -5.05218 0.149288 -0.433593 40 -5.05023 0.204831 -0.433593 40 -5.04884 0.236557 -0.433592 40 -5.24369 -0.380669 -0.433404 40 -5.04151 0.331558 -0.433337 40 -5.18181 0.852963 -0.432663 59 -5.18381 0.828212 -0.432418 62 -5.22958 -0.354959 -0.431444 40 -5.21878 -0.337817 -0.429974 62 -5.21929 -0.296717 -0.429729 64 -5.16343 0.791587 -0.429234 62 -5.16752 0.750716 -0.428989 61 -5.20991 -0.32086 -0.428749 65 -5.15608 0.77384 -0.428009 61 -5.20434 -0.279545 -0.427769 64 -5.16035 0.716536 -0.427519 64 -5.15807 0.732743 -0.427519 63 -5.1558 0.691117 -0.426539 64 -5.19409 -0.246337 -0.426299 63 -5.1649 0.585229 -0.42605 41 -5.15205 0.674114 -0.425804 66 -5.18855 -0.188961 -0.425318 63 -5.15021 0.657402 -0.425315 64 -5.18338 -0.262201 -0.425074 66 -5.18528 -0.221483 -0.425074 62 -5.14924 0.599776 -0.424335 40 -5.14733 0.61595 -0.424335 64 -5.14143 0.631613 -0.423845 65 -5.17351 -0.164085 -0.423359 64 -5.1459 0.55842 -0.423355 81 -5.14976 0.501604 -0.42311 65 -5.14734 0.525864 -0.42311 62 -5.40566 -0.464403 -0.422193 67 -5.16214 -0.204369 -0.422134 64 -5.16565 -0.0745796 -0.422133 67 -5.16253 -0.131333 -0.421888 65 -5.16011 -0.147505 -0.421644 66 -5.16142 -0.0907591 -0.421643 68 -5.15912 -0.106942 -0.421398 68 -5.13185 0.540509 -0.421395 66 -5.15417 -0.0339885 -0.420663 66 -5.13305 0.467337 -0.420661 64 -5.15229 -0.00161369 -0.420418 102 -5.15224 0.0226655 -0.420418 40 -5.14998 -0.0582525 -0.420173 66 -5.15028 -0.0178034 -0.420173 71 -5.12856 0.450658 -0.419926 64 -5.12563 0.482873 -0.419926 61 -5.13123 0.394078 -0.419681 64 -5.12997 0.410197 -0.419681 65 -5.31511 0.974623 -0.41962 20 -5.13481 0.313301 -0.419436 61 -5.12907 0.369589 -0.419191 64 -5.1247 0.425961 -0.419191 62 -5.13271 0.280796 -0.418947 61 -5.12823 0.353327 -0.418946 64 -5.13719 0.11131 -0.418702 65 -5.31182 0.948207 -0.418687 20 -5.13418 0.151585 -0.418457 66 -5.1322 0.208028 -0.418457 63 -5.13169 0.167639 -0.418212 66 -5.1323 0.038602 -0.417968 65 -5.13215 0.0547243 -0.417968 67 -5.12997 0.070811 -0.417723 65 -5.12407 0.25606 -0.417722 64 -5.1269 0.127153 -0.417477 66 -5.12359 0.223763 -0.417477 65 -5.11992 0.296172 -0.417477 60 -5.11743 0.336374 -0.417477 63 -5.12321 0.183435 -0.417232 66 -5.1189 0.239653 -0.416987 61 -5.11569 0.0946566 -0.416008 66 -5.29127 0.927513 -0.415888 20 -5.28938 0.867406 -0.414488 20 -5.26085 0.90532 -0.411922 20 -5.25526 0.878929 -0.410755 20 -5.30951 -0.422075 -0.410528 20 -5.2476 0.826965 -0.408889 20 -5.29101 -0.403785 -0.408195 20 -5.29286 -0.378847 -0.408195 20 -5.23712 0.842223 -0.407956 20 -5.24261 0.76727 -0.407256 20 -5.28411 -0.36149 -0.407028 20 -5.23572 0.799904 -0.407023 20 -5.23624 0.783168 -0.40679 20 -5.23239 0.740676 -0.405623 20 -5.27135 -0.343914 -0.405395 20 -5.27389 -0.302504 -0.405395 20 -5.22709 0.706504 -0.404457 20 -5.22051 0.680628 -0.403291 20 -5.2531 -0.317773 -0.403062 20 -5.22472 0.631168 -0.403058 20 -5.21303 0.721346 -0.403057 20 -5.25102 -0.284526 -0.402595 20 -5.21973 0.605665 -0.402124 20 -5.21284 0.646405 -0.401891 20 -5.21079 0.662779 -0.401891 20 -5.21949 0.572443 -0.401658 20 -5.87522 -0.504877 -0.401349 65 -5.24119 -0.242667 -0.401195 20 -5.21371 0.58841 -0.401191 20 -5.24156 -0.184943 -0.400962 20 -5.23644 -0.258915 -0.400729 20 -5.23865 -0.209552 -0.400728 20 -5.21394 0.530476 -0.400492 20 -5.23269 -0.151669 -0.399795 20 -5.20805 0.48863 -0.399325 20 -5.20236 0.545866 -0.399325 20 -5.22624 -0.167887 -0.399095 20 -5.22541 -0.126777 -0.398862 20 -5.20173 0.512797 -0.398859 20 -5.21812 -0.225053 -0.398395 20 -5.21281 0.209432 -0.397693 20 -5.211 0.250366 -0.397693 20 -5.20184 0.397584 -0.397693 20 -5.21387 -0.11005 -0.397462 20 -5.21419 -0.0936703 -0.397462 20 -5.20392 0.340244 -0.39746 20 -5.20282 0.356592 -0.39746 20 -5.19174 0.470741 -0.397226 20 -5.21048 -0.0772089 -0.396995 20 -5.21092 0.0373838 -0.396994 20 -5.21047 0.0783085 -0.396994 20 -5.20617 0.225579 -0.396994 20 -5.19514 0.380698 -0.39676 20 -5.19265 0.413332 -0.396759 20 -5.18924 0.454102 -0.396759 20 -5.20696 -0.0362379 -0.396528 20 -5.20487 0.151864 -0.396527 20 -5.18866 0.43764 -0.396526 20 -5.20509 0.00466617 -0.396295 20 -5.20307 0.0210205 -0.396061 20 -5.20274 0.061884 -0.396061 20 -5.20135 0.135428 -0.396061 20 -5.19756 0.192546 -0.395827 20 -5.19108 0.3231 -0.395827 20 -5.19887 -0.0524747 -0.395595 20 -5.1991 -0.0198081 -0.395595 20 -5.19233 0.265911 -0.395594 20 -5.19147 0.282221 -0.395593 20 -5.1943 0.094468 -0.395128 20 -5.18848 0.167779 -0.394661 20 -5.18215 0.306253 -0.39466 20 -5.18207 0.11059 -0.393728 20 -8.80421 0.48233 -0.387231 54 -8.79103 0.384764 -0.386012 87 -8.78978 0.41238 -0.386012 57 -8.79021 0.357068 -0.385877 86 -8.78176 0.453502 -0.385606 88 -8.7874 0.191174 -0.385335 80 -8.78381 0.31538 -0.385335 85 -8.77842 0.232395 -0.384793 77 -8.77479 0.287483 -0.384658 83 -8.77166 0.259811 -0.384387 70 -6.01094 -0.500204 -0.383013 79 -6.83969 -0.331147 -0.382572 63 -6.81673 -0.351587 -0.380667 74 -6.7914 -0.296927 -0.378241 163 -6.77102 -0.200275 -0.376162 83 -6.76883 -0.125753 -0.375815 109 -6.76219 -0.157534 -0.375295 119 -6.76322 -0.104419 -0.375295 106 -6.76196 -0.0300479 -0.375121 82 -6.75984 -0.0512839 -0.374948 82 -6.7517 -0.17855 -0.374429 110 -6.75156 -0.0830704 -0.374255 97 -6.73655 -0.273542 -0.37339 90 -6.73849 -0.220624 -0.37339 122 -6.74209 0.0123262 -0.373389 80 -6.73612 -0.00887171 -0.372869 70 -6.17361 1.14327 -0.372716 40 -6.72941 -0.252108 -0.372697 113 -6.73399 0.0440141 -0.372696 60 -5.53316 0.997637 -0.372692 40 -5.5582 0.778305 -0.371655 40 -5.52033 0.870614 -0.369163 56 -5.53419 0.748501 -0.368748 40 -5.49706 0.973496 -0.36854 40 -5.52169 0.808747 -0.368333 40 -5.50926 0.851205 -0.36771 82 -5.49177 0.945937 -0.367502 43 -5.56471 -0.257242 -0.367299 40 -5.51238 0.789759 -0.367087 40 -5.50601 0.833028 -0.367087 76 -5.55456 -0.335496 -0.366677 41 -5.55608 -0.309316 -0.366677 43 -5.5606 -0.213275 -0.366676 40 -5.55791 -0.23065 -0.366469 40 -5.55528 -0.195565 -0.366053 40 -5.55614 -0.169386 -0.366053 40 -5.55766 -0.108284 -0.366053 40 -5.55465 -0.151866 -0.365846 40 -5.5072 0.709794 -0.365427 40 -5.50494 0.72709 -0.365426 40 -5.47509 0.925457 -0.365426 94 -5.55002 -0.0906551 -0.365223 40 -5.54317 -0.134071 -0.3646 40 -5.53607 -0.273221 -0.364393 40 -5.53319 -0.290497 -0.364185 40 -5.52655 -0.368547 -0.363978 40 -5.53636 -0.072971 -0.363769 40 -5.4645 0.879664 -0.363557 69 -5.51754 -0.411468 -0.363356 40 -5.5188 -0.394134 -0.363356 40 -5.49073 0.681477 -0.363351 40 -5.52604 0.231139 -0.363145 40 -5.51923 0.326475 -0.362937 40 -5.52688 -0.0120239 -0.362731 40 -5.51911 0.20484 -0.362315 40 -5.51653 0.265511 -0.362314 40 -5.44851 0.903509 -0.362312 72 -5.51575 0.187384 -0.361899 40 -5.51124 0.291312 -0.361899 40 -5.50036 -0.427494 -0.361695 40 -5.51433 0.170002 -0.361692 40 -5.51488 -0.0292677 -0.361485 40 -5.51495 0.00538278 -0.361485 40 -5.51487 0.0313722 -0.361485 40 -5.50633 0.308423 -0.361484 40 -5.51269 -0.0552271 -0.361278 40 -7.0225 0.254068 -0.361202 81 -5.50661 0.0659636 -0.360654 40 -5.50555 0.126505 -0.360654 40 -5.50143 0.24754 -0.360654 40 -5.5048 0.0486554 -0.360447 40 -5.48692 0.445938 -0.360445 65 -5.50114 0.143717 -0.360239 40 -5.47772 0.505895 -0.36003 40 -5.47611 0.523103 -0.360029 40 -7.00573 0.275559 -0.3599 53 -7.00335 0.330575 -0.3599 40 -5.4843 0.402424 -0.359822 40 -7.00037 0.30841 -0.359574 40 -5.49398 0.109029 -0.359409 40 -5.48442 0.341868 -0.359407 40 -5.47334 0.488183 -0.359407 40 -6.99736 0.231245 -0.359086 50 -6.99232 0.35211 -0.359086 40 -5.48005 -0.347933 -0.358996 60 -5.4776 0.384672 -0.358992 40 -5.48833 0.0916988 -0.358786 40 -5.47481 0.367215 -0.358577 40 -5.47044 0.42739 -0.358577 65 -5.46765 0.461753 -0.358576 60 -5.45859 0.538814 -0.358369 40 -5.44351 0.641158 -0.357953 56 -6.9259 0.908523 -0.357782 67 -5.45005 0.563946 -0.357746 40 -5.44825 0.581064 -0.357746 40 -5.4464 0.598178 -0.357745 76 -5.44155 0.623619 -0.357538 75 -5.42764 0.656648 -0.3565 40 -5.63918 0.929445 -0.3517 40 -5.62548 1.00907 -0.3517 40 -6.89388 -0.324397 -0.350952 40 -5.62779 0.900276 -0.350125 40 -5.6294 0.864275 -0.349731 40 -5.62076 0.881005 -0.349141 40 -6.4549 0.0613917 -0.348441 41 -6.8558 0.367336 -0.34802 40 -5.61045 0.843233 -0.347566 40 -5.59207 0.957616 -0.347565 40 -5.58749 0.983956 -0.347565 40 -5.61348 0.780643 -0.346975 40 -5.58524 0.93835 -0.346581 40 -5.60059 0.814715 -0.346187 40 -5.64691 -0.346695 -0.345996 40 -5.64182 -0.364194 -0.345602 40 -6.81152 -0.373857 -0.344443 40 -5.5854 0.794513 -0.344415 40 -5.59182 0.732784 -0.344219 40 -6.80862 -0.127309 -0.343465 84 -6.8062 -0.148649 -0.343303 87 -5.57964 0.748978 -0.343234 40 -5.58226 0.713645 -0.343037 40 -6.80317 -0.0951181 -0.342977 84 -6.80343 -0.0737446 -0.342977 84 -6.79818 -0.223257 -0.342815 86 -6.80181 -0.0202955 -0.342814 86 -5.60769 -0.424093 -0.342649 40 -6.79566 -0.0522786 -0.342326 83 -5.58487 0.624952 -0.34225 40 -6.78735 -0.297611 -0.342164 74 -6.79383 0.0224463 -0.342163 80 -6.78668 -0.265538 -0.342001 86 -6.79173 0.043783 -0.342 82 -5.57584 0.668305 -0.341856 40 -5.57372 0.685817 -0.341856 40 -6.78549 -0.244136 -0.341838 82 -6.78689 -0.201496 -0.341838 83 -6.78988 0.00111719 -0.341837 85 -6.78378 -0.169397 -0.341513 87 -6.7852 0.0970621 -0.341512 78 -6.78149 0.0757158 -0.341186 78 -5.59496 -0.379035 -0.341073 40 -5.56408 0.649106 -0.340478 40 -5.5812 -0.404588 -0.339892 40 -6.73854 0.393345 -0.338581 55 -5.54912 0.585489 -0.338312 40 -5.57149 0.165624 -0.337723 40 -5.55871 0.384085 -0.337525 40 -5.54694 0.506033 -0.337328 40 -5.80269 1.05734 -0.337215 40 -5.55393 0.366199 -0.336935 40 -5.56195 0.0254494 -0.336543 40 -5.56104 0.104075 -0.336542 40 -5.54133 0.479167 -0.33654 40 -5.52917 0.565722 -0.336146 40 -5.55244 0.1999 -0.335951 40 -5.52979 0.539459 -0.33595 40 -5.55232 0.138778 -0.335754 40 -5.54871 0.243404 -0.335754 40 -5.54368 0.339238 -0.335754 40 -5.53488 0.461057 -0.335753 40 -5.55189 0.0428009 -0.335558 40 -5.54593 0.260733 -0.335557 40 -5.54273 0.321696 -0.335557 40 -5.53432 0.443499 -0.335556 40 -5.5275 0.521691 -0.335556 40 -5.54874 0.121228 -0.335361 40 -5.53974 0.304046 -0.335163 40 -5.54576 0.0601485 -0.334967 40 -5.53913 0.277827 -0.334966 40 -6.65113 0.841672 -0.334837 40 -5.53752 0.22543 -0.334573 40 -5.53713 0.181857 -0.334376 40 -8.74474 0.524706 -0.334344 68 -5.52176 0.398797 -0.333981 40 -5.52048 0.416144 -0.333981 40 -5.53415 -0.000886916 -0.333786 40 -8.73802 0.427901 -0.333598 79 -8.7304 0.496279 -0.333349 80 -5.7664 1.02286 -0.333312 40 -8.73721 0.304107 -0.333226 59 -8.73621 0.331555 -0.333226 44 -8.73114 0.358823 -0.332977 81 -8.72736 0.399866 -0.332853 81 -8.72467 0.454694 -0.332852 81 -8.72935 0.235178 -0.332605 81 -8.72805 0.207702 -0.33248 47 -8.72258 0.262402 -0.332232 79 -5.80071 -0.568769 -0.330717 40 -6.62981 0.408318 -0.329794 79 -5.78266 -0.548572 -0.328858 40 -6.60263 0.42757 -0.327678 113 -6.59259 0.458157 -0.327027 112 -5.76255 -0.528306 -0.326813 43 -5.7622 -0.510017 -0.326627 40 -5.73478 -0.480229 -0.323839 40 -5.63464 0.854744 -0.318629 40 -5.63138 0.836188 -0.318071 40 -5.62185 0.898056 -0.318071 40 -5.62011 0.870666 -0.317514 40 -5.62609 0.817383 -0.317328 40 -5.60917 0.914157 -0.317142 40 -5.60029 0.786842 -0.31454 40 -7.73417 -0.387844 -0.314341 68 -5.63772 -0.329201 -0.313801 40 -5.61695 0.565419 -0.313612 40 -5.61039 0.627145 -0.313611 40 -5.59286 0.767937 -0.313611 40 -5.61316 0.582866 -0.313426 40 -5.55951 0.969117 -0.313424 57 -5.92523 1.22592 -0.313266 61 -5.61076 0.547035 -0.312868 40 -5.55663 0.950667 -0.312867 40 -5.62075 0.405728 -0.312683 40 -5.55712 0.923837 -0.312495 40 -5.6085 0.48466 -0.312125 40 -5.57945 0.748316 -0.312124 40 -5.6139 -0.389699 -0.311943 40 -5.58093 0.721771 -0.311938 40 -5.59253 0.607457 -0.311753 40 -5.58662 0.642365 -0.311567 40 -5.62133 0.0342764 -0.311384 40 -5.59901 0.501603 -0.311381 40 -5.59741 0.519189 -0.311381 40 -5.6022 0.439863 -0.311196 40 -5.90939 1.18387 -0.311188 86 -5.90369 1.20202 -0.311014 82 -5.59881 0.457307 -0.31101 40 -5.59876 -0.432801 -0.310828 40 -5.5976 0.42184 -0.310638 40 -5.56934 0.702554 -0.310637 40 -5.61141 -0.0274394 -0.310454 40 -5.56968 0.667091 -0.310266 40 -5.60732 -0.0450178 -0.310083 40 -5.59478 0.377489 -0.310081 40 -5.60548 0.0166414 -0.309897 40 -5.59294 -0.344017 -0.309713 40 -5.60317 -0.0625707 -0.309711 40 -5.60051 -0.106528 -0.309525 40 -5.57753 -0.448698 -0.308969 40 -5.58088 -0.404879 -0.308969 40 -5.58704 -0.308395 -0.308969 40 -5.58958 -0.000891005 -0.30841 40 -5.54778 0.682247 -0.308407 40 -5.88169 1.14937 -0.308242 94 -5.87941 1.12973 -0.307723 80 -5.56742 -0.36868 -0.307482 40 -5.57208 -0.289938 -0.307482 40 -5.57095 -0.0883214 -0.306737 40 -5.93667 -0.675726 -0.30669 73 -5.86532 1.10785 -0.306164 85 -5.54823 0.357065 -0.30562 40 -7.03271 0.22157 -0.305578 40 -5.86265 1.07872 -0.305471 76 -5.55151 -0.26254 -0.305437 40 -7.0254 0.199221 -0.304992 40 -5.54137 0.339183 -0.304877 40 -5.54615 0.199759 -0.304692 67 -5.85425 1.05812 -0.304431 140 -5.91103 -0.654125 -0.304265 125 -5.53838 -0.244418 -0.304136 40 -5.9081 -0.625659 -0.303745 66 -5.53645 -0.122413 -0.303578 40 -5.53117 -0.226654 -0.303392 40 -5.53018 -0.200507 -0.303206 40 -5.52686 0.27742 -0.303204 40 -5.52198 0.294587 -0.302832 40 -5.52482 -0.182905 -0.302649 40 -5.89615 -0.605731 -0.302532 73 -5.52471 0.112247 -0.302461 104 -5.52154 0.0601497 -0.30209 173 -5.52133 0.0774947 -0.30209 120 -5.51916 0.17288 -0.302089 81 -5.51815 0.13816 -0.301904 84 -5.90819 -0.326807 -0.301665 40 -5.51508 0.0947671 -0.301532 110 -5.5102 0.250643 -0.301531 40 -5.50512 0.311111 -0.301345 40 -5.50745 -0.164927 -0.300976 40 -5.88017 -0.585508 -0.300973 93 -5.49977 0.155073 -0.300231 123 -5.80854 1.0308 -0.3001 105 -5.49623 -0.138615 -0.299861 40 -5.49305 0.232656 -0.299859 40 -5.86016 -0.565023 -0.299067 81 -5.85482 -0.53671 -0.298374 82 -5.84417 -0.498787 -0.297161 66 -5.83662 -0.516645 -0.296641 123 -5.8405 -0.47079 -0.296641 44 -5.79404 0.831958 -0.296116 40 -6.82927 0.917291 -0.294868 40 -5.76204 0.910586 -0.294383 40 -5.79947 0.307915 -0.292133 40 -5.73811 0.869754 -0.291784 40 -5.78748 0.343712 -0.291267 40 -5.76677 0.597843 -0.291266 40 -5.75774 0.679306 -0.291265 40 -5.78262 0.389013 -0.291093 40 -6.8272 0.397055 -0.291055 40 -5.77305 0.48869 -0.29092 40 -5.72355 0.885893 -0.290745 40 -5.77342 0.433942 -0.290573 40 -5.72836 0.840616 -0.290572 40 -5.74996 0.660034 -0.290399 40 -5.77387 0.370162 -0.290227 40 -5.75475 0.578266 -0.290053 40 -5.73779 0.695155 -0.289706 40 -5.70462 0.928844 -0.289705 40 -5.75317 0.532475 -0.289533 40 -5.76467 0.324079 -0.289188 40 -5.71381 0.801749 -0.288839 40 -5.73123 0.630435 -0.288493 40 -5.74957 0.404794 -0.288321 40 -5.7312 0.612207 -0.28832 40 -5.71038 0.782956 -0.28832 40 -6.79424 -0.299346 -0.288271 40 -5.74279 0.467819 -0.288148 40 -5.7356 0.548955 -0.288147 40 -5.73696 0.51272 -0.287974 40 -6.79218 0.0956696 -0.287683 40 -5.70414 0.754688 -0.287454 40 -6.78243 -0.245525 -0.287244 40 -5.66923 0.959547 -0.287106 44 -6.7822 -0.0962815 -0.28695 40 -6.78247 -0.0749754 -0.28695 40 -6.77988 0.116756 -0.286803 40 -5.73918 0.277321 -0.286762 40 -6.77387 -0.202645 -0.28651 40 -6.77669 -0.0536444 -0.28651 40 -6.77483 -0.0323508 -0.286363 40 -6.7745 0.0740656 -0.286363 40 -5.72239 0.447965 -0.286242 40 -8.80948 0.557379 -0.286232 79 -6.76023 0.414222 -0.286215 40 -6.77079 0.0421027 -0.286069 40 -5.9805 1.2324 -0.286016 40 -6.76522 -0.22369 -0.285924 40 -6.76889 0.0208158 -0.285923 40 -6.7673 0.148395 -0.285922 40 -5.69098 0.716513 -0.285894 40 -8.79983 0.612322 -0.285894 74 -6.76372 -0.127971 -0.28563 40 -6.76079 -0.170422 -0.285484 40 -6.75529 -0.276523 -0.285337 40 -6.7593 -0.149147 -0.285337 40 -8.8066 0.210716 -0.285221 87 -8.79564 0.487231 -0.28522 84 -8.78975 0.583912 -0.28522 77 -5.65061 0.938045 -0.285201 110 -5.64307 0.982396 -0.285201 77 -6.75895 -0.000485616 -0.285189 40 -8.79207 0.514752 -0.285108 83 -8.79766 0.36269 -0.284996 84 -8.79448 0.390244 -0.284883 84 -8.8 0.141436 -0.284772 90 -8.79751 0.169052 -0.284659 90 -8.78715 0.459106 -0.284658 84 -8.78656 0.431406 -0.284546 82 -8.79025 0.293279 -0.284434 83 -8.78478 0.33456 -0.284209 87 -8.78842 0.113672 -0.284097 49 -8.78194 0.237802 -0.283872 82 -8.78115 0.265392 -0.283872 84 -5.66303 0.730954 -0.283642 40 -5.95691 1.19843 -0.283575 40 -5.94694 1.17706 -0.282436 40 -5.67869 -0.359869 -0.281914 66 -5.67433 -0.395413 -0.281741 42 -5.66509 -0.43953 -0.281222 57 -5.68131 0.0955495 -0.281219 180 -5.92515 1.15353 -0.28032 40 -8.69162 -0.365383 -0.279041 40 -5.64373 -0.375612 -0.278969 40 -5.64597 -0.340147 -0.278969 40 -8.68873 -0.337906 -0.278816 40 -5.63663 -0.419649 -0.278623 40 -5.65182 0.0682793 -0.278621 113 -5.97754 -0.665446 -0.278537 40 -8.68046 -0.392204 -0.278479 40 -6.61732 0.814006 -0.278439 40 -5.90524 1.13052 -0.278368 40 -5.637 0.192079 -0.277581 139 -6.60797 0.791745 -0.277559 40 -5.89768 1.06207 -0.27674 128 -6.62955 0.426624 -0.27668 40 -5.62443 0.209286 -0.276541 132 -5.95188 -0.624625 -0.276096 40 -5.96011 -0.540424 -0.276096 40 -5.61885 0.129535 -0.275848 150 -5.61619 0.155947 -0.275675 153 -5.61368 0.17352 -0.275502 165 -5.61326 0.111736 -0.275329 138 -6.60629 0.445887 -0.275066 40 -5.93602 -0.641759 -0.274957 40 -6.57463 0.547517 -0.273305 61 -6.57515 0.516367 -0.273159 111 -5.91709 -0.592632 -0.273004 40 -6.5723 0.474589 -0.272719 97 -6.57077 0.495235 -0.272719 95 -5.90702 -0.572832 -0.272028 40 -5.8949 -0.552908 -0.270888 40 -5.78956 0.912228 -0.266001 40 -5.85404 0.105704 -0.265515 45 -7.58207 0.944242 -0.264623 40 -5.75615 0.944192 -0.263722 40 -5.81752 -0.333836 -0.263239 40 -5.72803 0.967428 -0.261769 40 -6.91386 0.406145 -0.258787 145 -6.88383 -0.288151 -0.256351 61 -6.82053 0.822191 -0.254992 61 -6.80594 0.874746 -0.25445 40 -5.69495 -0.407124 -0.253638 40 -6.81825 0.433132 -0.252419 73 -6.81891 -0.263729 -0.25188 73 -6.77748 0.795583 -0.251876 104 -6.81797 -0.167191 -0.251609 81 -6.82 -0.0172288 -0.251608 82 -6.8174 -0.0921814 -0.251473 84 -6.81379 0.0577328 -0.251201 88 -6.81357 0.0791372 -0.251201 93 -6.81313 0.111246 -0.251201 105 -6.75566 0.890048 -0.251198 40 -6.80774 -0.241833 -0.251067 87 -6.80681 -0.209681 -0.250931 85 -6.8071 -0.113394 -0.250796 97 -6.80472 -0.134732 -0.25066 100 -6.80379 -0.0598785 -0.250524 89 -6.80206 0.00425296 -0.250389 95 -6.79747 -0.187983 -0.250254 84 -6.79121 -0.305301 -0.250119 59 -6.79597 -0.0384259 -0.249982 87 -6.79598 0.0362989 -0.249982 92 -5.65325 0.16516 -0.249242 44 -6.71682 0.938782 -0.24903 40 -5.64976 0.147313 -0.248916 56 -6.76508 0.451297 -0.248896 86 -6.69104 0.978156 -0.247675 40 -5.62428 0.12909 -0.246801 52 -6.69664 0.765096 -0.246186 95 -6.71982 0.469655 -0.245916 94 -6.64615 0.590823 -0.24158 83 -6.63072 0.726197 -0.241443 77 -6.64267 0.48553 -0.240767 121 -6.63865 0.537687 -0.240767 101 -6.63633 0.516534 -0.240496 101 -6.62499 0.557583 -0.239954 90 -8.87177 0.322589 -0.239395 40 -6.59855 0.607669 -0.238463 98 -6.57967 0.658141 -0.237515 95 -6.57872 0.626765 -0.237244 103 -6.56764 0.677821 -0.236837 56 -8.77707 0.734114 -0.235853 40 -6.5496 0.696827 -0.235753 117 -8.7527 0.662806 -0.234336 67 -8.76316 0.470067 -0.234235 81 -8.75746 0.566392 -0.234235 76 -7.89346 -0.379139 -0.234193 40 -8.75886 0.511236 -0.234134 83 -8.75076 0.635005 -0.234133 65 -8.75521 0.538622 -0.234032 81 -8.76622 0.249515 -0.233932 77 -8.76687 0.125527 -0.233831 84 -8.75796 0.414597 -0.23383 83 -8.75723 0.386987 -0.233729 82 -8.75263 0.441896 -0.233628 81 -8.75763 0.194179 -0.233426 89 -8.75233 -0.245986 -0.233226 63 -8.75298 0.221576 -0.233224 86 -8.73478 0.606214 -0.233223 110 -8.74908 -0.287167 -0.233124 126 -8.75328 -0.094711 -0.233124 79 -8.75246 0.152786 -0.233123 88 -8.74951 0.0702451 -0.232921 73 -8.74507 -0.218315 -0.232821 78 -8.74525 0.097676 -0.232719 77 -6.53161 -0.344068 -0.232641 40 -8.74354 -0.0671662 -0.232618 77 -8.7438 0.00150661 -0.232618 54 -8.74177 -0.025961 -0.232517 127 -8.73301 0.344615 -0.232414 76 -8.71166 0.700888 -0.232413 47 -8.73216 -0.314125 -0.232315 126 -8.73453 -0.149454 -0.232214 124 -8.73177 0.028901 -0.232011 133 -8.72175 -0.190386 -0.231607 72 -6.51456 -0.363631 -0.231557 40 -7.80382 0.892055 -0.231491 90 -8.66326 -0.339104 -0.228876 57 -7.71329 0.943414 -0.22677 40 -7.69443 0.965706 -0.22587 40 -6.90264 0.43046 -0.219512 63 -6.83863 0.903705 -0.218392 40 -6.87308 -0.263164 -0.217153 40 -6.79722 0.800433 -0.215036 104 -6.7775 0.8629 -0.21429 40 -6.80434 0.520642 -0.213794 94 -6.80349 0.477586 -0.213546 91 -6.80196 0.498956 -0.213546 96 -6.80168 0.445243 -0.213298 73 -6.80027 0.00650221 -0.212305 87 -6.79574 -0.1857 -0.212182 105 -6.79677 -0.142999 -0.212181 89 -6.79768 -0.0896134 -0.212181 82 -6.79537 -0.110942 -0.212057 90 -6.79612 -0.0468942 -0.212057 73 -6.79601 0.0598584 -0.212056 94 -6.79194 -0.0682216 -0.211808 79 -6.78631 -0.164148 -0.21156 93 -6.78628 -0.0148846 -0.211435 101 -6.78624 0.0277554 -0.211435 90 -6.7801 -0.238629 -0.211312 80 -6.77954 0.102256 -0.211062 96 -6.77284 -0.217104 -0.210815 73 -6.77583 0.0808953 -0.210814 94 -6.76101 -0.355061 -0.210442 40 -6.73816 -0.332728 -0.208951 40 -6.66286 0.922455 -0.207704 40 -6.65344 0.974459 -0.207579 40 -6.65054 0.952681 -0.207206 40 -6.6944 0.543561 -0.207083 79 -6.61483 0.989901 -0.205342 40 -6.65488 0.561256 -0.204722 131 -6.64911 0.581795 -0.204473 90 -5.96568 1.21281 -0.201879 40 -6.58283 0.742913 -0.201366 54 -5.94205 1.1887 -0.199982 40 -6.56577 0.594975 -0.199378 61 -5.9319 1.15769 -0.198898 40 -5.93513 1.11968 -0.198627 40 -5.92178 1.13648 -0.19795 40 -7.2515 -0.243487 -0.197774 40 -6.51522 0.621172 -0.196395 84 -5.96443 -0.613701 -0.195654 40 -5.89658 1.06472 -0.195376 44 -5.94759 -0.640247 -0.194705 40 -6.48544 0.638786 -0.194655 109 -6.4834 0.659159 -0.194655 117 -6.47802 0.710057 -0.194655 89 -5.87946 1.08078 -0.194427 40 -5.94053 -0.592276 -0.193892 40 -5.94038 -0.573408 -0.193757 40 -6.46435 0.687949 -0.193661 110 -5.93308 -0.544455 -0.193079 40 -5.92483 -0.524889 -0.192402 40 -6.42099 -0.277869 -0.189067 40 -7.81902 0.936659 -0.188608 58 -5.79716 0.897524 -0.18684 41 -8.80846 0.564653 -0.186697 69 -5.79037 0.915126 -0.186569 40 -5.78205 0.941778 -0.186298 40 -8.8124 0.0520048 -0.18607 31 -8.80468 -0.321595 -0.185982 31 -8.79588 0.508421 -0.185979 75 -6.35942 -0.385613 -0.185587 40 -8.78962 0.438855 -0.185531 63 -8.77628 0.535011 -0.185171 106 -8.77822 0.465964 -0.185082 61 -5.76133 0.957074 -0.185079 43 -8.78169 -0.293064 -0.184905 131 -8.78533 0.148535 -0.184903 79 -8.76079 0.589374 -0.184633 93 -8.7759 0.217355 -0.184544 79 -8.7741 0.0932401 -0.184365 78 -8.77083 0.175893 -0.184275 109 -8.76977 0.120761 -0.184185 110 -8.76718 0.244725 -0.184185 116 -6.9468 0.543715 -0.181585 40 -7.67534 0.943443 -0.181425 59 -6.89851 0.92359 -0.181135 40 -8.6873 -0.357967 -0.180776 30 -8.68414 -0.385161 -0.180686 30 -5.75792 -0.409206 -0.180478 80 -6.94518 -0.112011 -0.180351 67 -6.92787 -0.0572434 -0.179339 53 -7.63074 0.962162 -0.1793 43 -6.92438 -0.155125 -0.179227 72 -6.92409 0.0189369 -0.179114 67 -6.91958 -0.187628 -0.179003 40 -6.90266 0.518619 -0.179 40 -6.91811 -0.013659 -0.178777 72 -6.18424 0.953584 -0.178498 40 -8.62701 -0.409622 -0.178173 54 -6.90487 -0.132909 -0.178103 93 -6.89971 -0.0785858 -0.177766 93 -6.90006 -0.0352319 -0.177766 58 -6.90003 0.0406389 -0.177765 73 -6.83344 0.882381 -0.177201 40 -6.87591 0.0621899 -0.176417 41 -6.86366 -0.380341 -0.176306 40 -6.83087 0.589072 -0.175291 40 -6.7689 0.928374 -0.173941 40 -6.73627 0.945585 -0.172255 40 -6.68382 0.959837 -0.169445 40 -6.67527 0.99075 -0.16922 40 -6.62527 -0.387111 -0.16293 40 -6.60417 0.591289 -0.162589 131 -6.57443 0.609563 -0.161016 72 -6.5578 0.732944 -0.16079 70 -6.5592 0.701827 -0.160678 106 -8.1713 0.939696 -0.159679 28 -6.54862 0.628019 -0.159667 106 -6.5415 0.679235 -0.159554 94 -6.54161 0.658489 -0.159442 104 -5.80982 0.931688 -0.155258 40 -5.80233 0.97729 -0.155258 40 -8.05763 0.965465 -0.154742 28 -5.79356 0.957052 -0.154513 40 -5.78119 0.908335 -0.15327 40 -5.76059 -0.397173 -0.148429 41 -5.75044 -0.369311 -0.147683 40 -5.73802 -0.269139 -0.146564 40 -6.2787 -0.395202 -0.143485 40 -6.92539 -0.102123 -0.140557 80 -7.71334 0.949912 -0.139304 27 -6.80456 0.88776 -0.137316 164 -6.74633 0.901513 -0.134484 51 -6.00049 0.912521 -0.131003 40 -6.66393 0.943539 -0.130639 127 -8.78046 0.256425 -0.129238 32 -8.77418 0.325218 -0.129084 32 -8.76127 0.476426 -0.128853 32 -8.76123 0.131878 -0.128391 32 -8.75515 0.352006 -0.128391 32 -8.74496 0.51684 -0.128313 32 -8.75593 0.20058 -0.128237 32 -8.75525 0.228087 -0.128237 32 -8.7508 -0.308296 -0.128162 32 -8.75478 0.159273 -0.12816 32 -8.74077 0.447708 -0.128005 32 -8.73078 0.612378 -0.128005 87 -8.74961 0.104177 -0.127929 32 -8.73133 0.54353 -0.127851 32 -8.73722 0.296254 -0.127621 32 -8.73391 0.0764988 -0.127313 32 -8.70964 0.569595 -0.12708 120 -6.57098 0.972188 -0.126188 64 -8.68979 -0.278999 -0.125774 54 -5.89689 0.91617 -0.12527 40 -5.89251 0.943948 -0.12527 40 -6.56844 0.563605 -0.12366 46 -5.83035 0.953052 -0.121898 40 -6.52991 0.591169 -0.121839 63 -6.5161 0.610515 -0.121232 112 -6.50483 0.702348 -0.12113 84 -6.50259 0.722779 -0.12113 112 -6.5062 0.630181 -0.120827 154 -6.49112 0.680179 -0.120321 107 -5.8631 -0.385818 -0.120105 40 -6.48829 0.648965 -0.120017 136 -7.04996 0.892953 -0.109415 24 -8.11183 0.978772 -0.105586 30 -6.84096 0.889093 -0.10008 23 -6.86106 0.54305 -0.0993627 128 -6.87572 -0.104924 -0.0990957 67 -6.87293 -0.148073 -0.0990061 80 -6.85476 0.520919 -0.0990037 76 -6.84639 0.498692 -0.0985551 102 -6.85845 -0.169266 -0.098378 82 -6.84817 -0.0721213 -0.097839 55 -6.84359 -0.201119 -0.0977497 58 -6.84655 0.00318609 -0.097749 102 -6.84237 -0.0505413 -0.0975697 50 -6.8365 -0.028995 -0.0973003 92 -6.83141 -0.125551 -0.0971212 110 -5.9606 0.94656 -0.0954329 40 -6.7308 0.928982 -0.0954121 23 -7.81725 0.917362 -0.0940306 28 -5.93881 0.904759 -0.0940168 40 -5.88667 0.953475 -0.0917909 40 -6.61845 0.966916 -0.0906548 22 -5.91646 0.187853 -0.0895681 40 -5.83732 0.907633 -0.0889584 40 -5.87112 -0.349119 -0.0876483 97 -5.84488 -0.384534 -0.0864345 133 -5.84477 -0.320044 -0.0862319 167 -6.54971 0.71675 -0.0861677 74 -6.55808 0.592827 -0.0859885 22 -5.83669 -0.282874 -0.0857259 109 -5.83377 -0.301114 -0.0856248 95 -6.54597 0.57106 -0.0853603 34 -6.52717 0.683276 -0.0850009 91 -6.52139 0.641312 -0.0845523 100 -6.51736 0.661603 -0.0844625 107 -6.5124 0.609503 -0.0840138 126 -8.7335 -0.306427 -0.072925 96 -8.72797 -0.347406 -0.0727961 81 -8.56138 0.941099 -0.0688596 71 -5.95414 0.910724 -0.0607653 19 -5.93793 0.936956 -0.0602268 19 -5.99128 0.222576 -0.0595113 19 -5.97658 0.240893 -0.0588829 77 -5.95982 0.259044 -0.0581647 85 -5.93857 0.286251 -0.0572671 78 -5.92581 -0.338559 -0.056821 19 -5.92485 -0.319823 -0.0567311 19 -5.88785 -0.401235 -0.0552954 40 -6.84768 0.496303 -0.0552825 56 -5.88639 -0.289759 -0.0549359 80 -6.80415 0.589813 -0.0538954 24 -6.79801 0.56774 -0.0535874 24 -6.80728 -0.0744285 -0.0530506 24 -6.80205 -0.1492 -0.0528969 24 -6.80301 -0.0957715 -0.0528967 24 -6.79966 -0.0209687 -0.0527423 24 -6.79769 0.000385663 -0.0526652 24 -6.77436 0.512114 -0.0525091 41 -6.77188 0.544031 -0.052509 37 -6.79166 0.0216993 -0.0524339 24 -6.78749 -0.0529613 -0.0522802 24 -6.78356 -0.170185 -0.0522036 24 -6.77451 -0.12741 -0.0518183 24 -6.71222 0.880383 -0.0515833 24 -6.74903 -0.190665 -0.0508941 31 -7.98613 0.905017 -0.0502928 65 -6.67094 0.917499 -0.0501965 23 -7.8462 0.914582 -0.0458444 74 -6.53083 0.637517 -0.0435724 23 -6.50295 0.655324 -0.0425708 23 -6.46782 0.703017 -0.0414151 63 -6.46205 0.681825 -0.041107 45 -7.682 0.957179 -0.0407513 40 -7.6348 0.914959 -0.0390752 40 -8.74124 -0.257699 -0.0284441 62 -8.72194 -0.298329 -0.0279566 75 -8.53692 0.945234 -0.0242145 57 -8.50611 0.968796 -0.0234559 48 -5.9227 -0.300942 -0.0192328 20 -5.91763 -0.282073 -0.0190016 20 -5.89727 -0.327623 -0.0183085 20 -5.90051 -0.262761 -0.0183082 20 -6.87317 -0.192379 -0.0128407 40 -6.83901 0.583554 -0.0124509 83 -6.83715 0.605035 -0.0124508 96 -6.80217 0.872253 -0.0122565 40 -6.81175 0.721656 -0.0119991 76 -6.81331 0.62459 -0.0117416 55 -6.81777 0.549484 -0.0116774 74 -6.80006 0.698875 -0.0115479 40 -6.81251 -0.136909 -0.0108419 80 -6.74586 0.88679 -0.0105158 40 -6.78807 -0.157663 -0.0100684 70 -6.71783 0.91542 -0.00974209 40 -6.64303 0.662265 -0.00639059 40 -7.71952 0.913669 -0.00210942 40 -7.68487 0.93395 -0.00124249 40 -7.65413 0.95453 -0.000483893 40 -6.23278 0.891123 0.00585927 40 -6.03461 0.892644 0.0121772 40 -5.99815 0.906663 0.0132732 40 -5.99527 0.925503 0.0132733 40 -6.03092 -0.336473 0.0141061 40 -6.00416 -0.382201 0.0148795 40 -5.98299 -0.399643 0.0155241 41 -5.98594 -0.35264 0.0155243 40 -5.96409 -0.313661 0.0162981 92 -5.96106 -0.294706 0.0164272 91 -5.9484 -0.265927 0.0168785 90 -6.78577 0.919175 0.0229757 40 -6.75099 0.892729 0.024005 40 -6.78776 0.00737184 0.0245978 61 -6.7818 -0.163127 0.0247055 58 -6.78319 -0.0885472 0.0247058 57 -6.78343 -0.0672366 0.0247059 69 -6.77526 -0.18429 0.0248679 49 -6.77629 -0.141716 0.0248681 69 -6.77288 -0.109733 0.0249766 122 -6.77376 -0.013976 0.024977 49 -6.76768 -0.0352499 0.0251394 126 -6.74967 0.0389921 0.0256273 43 -5.32998 0.267132 0.0368016 56 -5.31845 0.0492125 0.0373808 56 -6.25024 0.894631 0.0374416 40 -5.16555 0.308512 0.0420238 236 -6.03559 0.911462 0.0431305 40 -6.03191 0.881819 0.0433471 40 -6.08355 -0.321254 0.0434505 40 -6.02085 0.92854 0.0434556 40 -6.02008 -0.346624 0.04513 40 -6.01696 -0.365421 0.0451841 40 -5.98267 -0.297518 0.0462138 97 -5.97387 -0.381825 0.0463217 43 -5.96959 -0.278132 0.0465931 101 -5.95885 -0.249548 0.0469183 84 -5.83436 0.917751 0.0484943 40 -4.81311 0.365167 0.0532415 47 -4.80785 0.326855 0.0534992 58 -4.80281 0.341696 0.0536282 52 -4.8102 0.0847782 0.0537558 44 -4.80718 0.19053 0.0537564 49 -4.80656 0.205633 0.0537565 46 -4.80087 0.311275 0.053757 54 -4.80602 0.167817 0.0538207 46 -4.80158 0.114852 0.0540139 54 -4.79518 0.273148 0.0540147 40 -4.79893 0.0167933 0.0541423 53 -4.78403 0.378231 0.0541441 40 -4.79696 -0.00580881 0.0542066 40 -4.79454 0.152402 0.0542075 52 -4.7946 -0.0585175 0.0542708 49 -4.79446 0.069522 0.0542715 51 -4.78803 0.257697 0.0542725 59 -4.79083 -0.0358704 0.0543998 51 -4.78892 -0.0207997 0.0544644 40 -4.78886 0.0318563 0.0544647 40 -4.781 0.137013 0.0546586 49 -4.77794 0.0993973 0.0547874 55 -4.76642 -0.0729977 0.0551733 40 -4.72999 0.217656 0.0562063 40 -5.18562 0.391296 0.0676176 58 -6.71801 0.899901 0.0698293 30 -6.77192 -0.0343003 0.0699483 30 -6.67257 0.862022 0.0708487 30 -6.72602 -0.00219571 0.0708864 30 -6.63582 -0.053937 0.0727213 30 -6.58763 -0.0740551 0.0736999 30 -6.49117 0.891159 0.0744375 47 -6.38529 -0.10108 0.0778187 30 -4.75158 0.446609 0.0792123 52 -4.74618 0.461126 0.0793207 81 -4.74746 0.378545 0.0794828 52 -4.74625 0.393456 0.0794829 55 -4.73799 0.482846 0.0794833 51 -6.29998 -0.228134 0.0794901 67 -4.743 0.408184 0.0795372 42 -4.73903 0.430337 0.0795914 52 -4.73248 0.497289 0.0795918 44 -6.28099 -0.118742 0.0799391 57 -6.27659 -0.138368 0.0800206 71 -6.16342 0.867212 0.0811256 30 -6.17153 0.759885 0.0812475 94 -6.14758 0.934053 0.0812482 30 -6.19618 -0.155742 0.0816517 74 -6.18298 -0.252597 0.0818552 30 -6.18277 -0.203954 0.0818962 71 -6.12165 0.890933 0.0819005 30 -6.1109 0.909017 0.0820637 30 -6.16681 -0.339271 0.0820995 30 -4.65813 0.150624 0.0822448 40 -4.64965 0.31878 0.0822457 40 -4.65002 0.28212 0.0822997 40 -6.1634 -0.18385 0.0823041 77 -4.6497 0.252779 0.0823537 40 -4.64464 0.333077 0.0823541 40 -4.64885 0.230754 0.0824078 40 -4.64066 0.303463 0.0825165 40 -4.64833 0.0479687 0.0825694 40 -4.64718 0.113676 0.0825697 40 -4.64581 0.084427 0.0826237 40 -4.6446 0.135504 0.082624 40 -6.1399 -0.318326 0.0826705 30 -4.63957 0.215629 0.0826786 40 -4.63883 0.186382 0.0827326 40 -4.63952 0.0988606 0.0827864 40 -4.63816 0.0623802 0.0828404 40 -4.63423 0.200758 0.0828411 40 -4.62494 0.265873 0.083004 40 -4.62767 0.164028 0.0830576 40 -6.09786 -0.354408 0.083486 30 -6.0954 -0.28703 0.0836086 30 -6.08229 -0.267205 0.0838942 30 -6.07278 -0.371992 0.0839752 37 -6.07413 0.0196186 0.0841809 30 -5.26727 0.493395 0.100169 30 -4.83486 0.478018 0.108978 54 -4.80331 0.581918 0.109386 35 -4.77791 0.540963 0.109997 30 -6.11815 0.89927 0.110434 40 -4.75969 0.486087 0.110487 45 -4.74638 0.552662 0.110609 33 -6.1118 0.85909 0.110622 40 -6.10512 0.877701 0.110685 40 -6.09408 0.925007 0.110748 40 -4.73981 0.52179 0.110813 30 -6.08873 0.836239 0.111031 40 -6.0827 0.806183 0.111189 40 -6.07971 0.766914 0.111314 40 -6.07929 0.737757 0.111377 40 -4.72415 0.392883 0.111383 30 -4.72823 0.311081 0.111424 30 -4.72336 0.377892 0.111424 30 -4.72025 0.414977 0.111424 30 -6.07562 0.717925 0.111471 40 -6.09975 -0.38495 0.111561 40 -6.05943 0.783625 0.111597 40 -6.09962 -0.317667 0.111625 40 -4.72217 0.243749 0.111627 30 -4.72055 0.273414 0.111627 30 -6.09063 0.458888 0.111628 40 -4.71567 0.347526 0.111628 30 -4.72194 0.206577 0.111668 30 -6.0946 -0.298235 0.111719 40 -6.08318 0.477525 0.111722 60 -6.06196 0.69694 0.111723 40 -4.71993 0.154537 0.111749 30 -4.71322 0.295313 0.11175 30 -4.69646 0.494881 0.111751 30 -6.08861 -0.336319 0.111782 40 -6.09276 -0.250214 0.111782 40 -6.07184 0.563087 0.111785 56 -4.70658 0.361771 0.111791 30 -4.699 0.4281 0.111832 30 -6.05723 0.667455 0.111849 40 -4.71258 0.191391 0.111872 30 -4.71128 0.220998 0.111872 30 -6.08594 -0.269113 0.111876 40 -6.0701 0.51485 0.11188 60 -6.05733 0.628954 0.111912 69 -6.08352 -0.230734 0.11194 40 -6.07713 0.36189 0.111942 40 -6.07278 0.428687 0.111942 40 -6.0677 0.495435 0.111943 94 -6.05334 0.647759 0.111943 64 -6.07624 0.342675 0.111973 40 -6.07336 0.390387 0.111974 40 -6.0581 0.580962 0.111974 75 -4.70716 0.176394 0.111994 30 -4.70341 0.257697 0.111994 30 -6.07298 -0.36423 0.112002 40 -6.07011 0.409322 0.112005 40 -4.6973 0.324035 0.112035 30 -6.07564 0.275647 0.112036 40 -6.07712 -0.0967899 0.112097 40 -6.0693 0.323126 0.112099 40 -6.07255 -0.201717 0.112128 40 -6.07049 0.25628 0.11213 40 -6.04535 0.60846 0.112132 77 -6.07169 -0.163512 0.11216 40 -6.0734 -0.0776634 0.11216 40 -6.04969 0.541765 0.112163 87 -6.06894 0.189375 0.112193 40 -6.06818 -0.14436 0.112223 40 -6.06943 0.07492 0.112224 60 -6.06679 -0.115732 0.112255 40 -6.06364 0.227336 0.112256 40 -6.06077 0.293994 0.112256 40 -6.06351 0.170114 0.112287 40 -6.05233 0.207823 0.112445 40 -6.04764 0.0555537 0.11257 85 -6.04116 -0.181814 0.112632 40 -6.0437 -0.048929 0.112633 41 -6.04389 0.00803349 0.112633 79 -6.04102 0.102921 0.112665 81 -6.03789 -0.0109706 0.112727 80 -6.03583 -0.0299365 0.112758 75 -6.03579 0.0364314 0.112759 84 -6.03226 0.140655 0.112791 40 -6.01868 0.121361 0.113011 59 -6.17745 0.910206 0.150365 49 -6.15468 0.857645 0.150638 73 -6.14661 0.886085 0.150675 79 -6.1872 -0.368275 0.150779 25 -6.14408 0.816916 0.150784 61 -6.18433 -0.348592 0.150816 25 -6.13554 0.83543 0.150839 79 -6.14038 0.767437 0.150875 64 -6.12603 0.785249 0.150984 96 -6.13231 0.71762 0.151002 72 -6.12687 0.746277 0.151021 102 -6.12874 0.678228 0.151075 68 -6.14784 -0.278594 0.151181 66 -6.11995 0.628703 0.151202 60 -6.14147 -0.32664 0.151217 40 -6.10471 0.695083 0.151275 99 -6.09503 0.655275 0.151403 96 -6.12097 -0.296537 0.151417 51 -6.12272 -0.258073 0.151418 106 -6.12119 -0.190596 0.151454 69 -6.09402 0.606816 0.151457 90 -6.11787 -0.228968 0.151472 66 -6.08992 0.587119 0.151512 43 -6.10927 -0.103745 0.151582 64 -6.08803 0.519476 0.151585 38 -6.10769 -0.0749231 0.1516 68 -6.08438 0.538432 0.151603 39 -6.10257 -0.209131 0.151618 102 -6.10177 -0.170719 0.151637 105 -6.07867 0.557196 0.151639 39 -6.1005 -0.141908 0.151655 68 -6.08279 0.432559 0.151694 37 -6.07996 0.47077 0.151694 39 -6.09605 -0.0364228 0.15171 61 -6.09092 -0.1225 0.151746 109 -6.07247 0.489411 0.151748 42 -6.07802 0.384303 0.151766 39 -6.08795 0.0497264 0.151783 72 -6.07776 0.231171 0.151839 39 -6.07121 0.36476 0.151839 39 -6.06545 0.45055 0.151839 39 -6.07376 0.278814 0.151857 38 -6.07504 0.116484 0.151893 42 -6.06281 0.402527 0.151894 39 -6.07408 0.030591 0.151911 77 -6.06486 0.297536 0.15193 37 -6.06965 0.0782606 0.151947 70 -6.06739 0.183119 0.151948 38 -6.0619 0.316493 0.151948 37 -6.06815 0.0115227 0.151965 75 -6.06446 0.211647 0.151966 39 -6.05888 0.335434 0.151967 38 -6.06615 -0.00753009 0.151983 89 -6.06442 0.144916 0.151984 40 -6.06194 0.16392 0.152002 40 -6.06191 -0.0551191 0.15202 94 -6.06138 0.0972348 0.15202 39 -6.04703 0.249156 0.152112 38 -6.26918 0.86294 0.189493 40 -6.27239 -0.314932 0.189619 40 -6.17298 0.211453 0.226344 40 -6.17735 0.124199 0.22635 40 -6.18571 0.104895 0.226376 40 -6.18418 0.172903 0.226376 40 -6.19252 -0.0312042 0.226395 40 -6.19249 0.0368851 0.226395 40 -6.19434 0.0563492 0.226402 40 -6.1936 0.192598 0.226409 40 -6.19227 0.23151 0.226409 40 -6.20259 0.0076728 0.226428 40 -6.20092 0.144062 0.226428 40 -6.20439 -0.0508087 0.226434 40 -6.20459 -0.0118241 0.226434 40 -6.20613 0.0759042 0.226441 40 -6.21745 -0.119352 0.226479 40 -6.22208 -0.0803528 0.226492 40 -6.21983 0.330307 0.226513 40 -6.23081 -0.149041 0.226524 40 -6.23179 -0.100102 0.226524 40 -6.22908 0.262126 0.226532 40 -6.23023 0.281776 0.226539 40 -6.22562 0.369822 0.226539 40 -6.23131 0.301436 0.226545 40 -6.23075 0.350471 0.226552 40 -6.24231 -0.168992 0.226563 40 -6.23051 0.419211 0.226565 40 -6.22775 0.458347 0.226565 40 -6.24374 -0.188669 0.226569 40 -6.23151 0.488135 0.226585 40 -6.23978 0.400112 0.226591 40 -6.25206 -0.238124 0.226601 40 -6.24513 0.439839 0.226617 40 -6.24191 0.508634 0.226624 40 -6.24227 0.528402 0.22663 40 -6.26477 -0.218949 0.22664 40 -6.26727 -0.258489 0.226653 40 -6.24768 0.558491 0.226656 40 -6.25401 0.598647 0.226689 40 -6.25984 0.579347 0.226702 40 -6.29239 -0.279436 0.226737 50 -6.26902 0.649725 0.226754 40 -6.27899 0.630795 0.22678 40 -6.28485 0.671256 0.226812 40 -6.2847 0.691206 0.226819 40 -6.2933 0.722134 0.226858 40 -6.32887 -0.350985 0.226866 75 -6.29895 0.742805 0.226884 40 -6.29437 0.812515 0.226897 40 -6.30254 0.763287 0.226903 40 -6.3519 -0.332341 0.226937 127 -6.35691 -0.312597 0.22695 57 -6.31873 0.795395 0.226968 40 -6.39301 -0.385042 0.227079 40 -6.35328 0.840163 0.227097 58 -6.34847 0.890306 0.227104 74 -6.33351 0.281183 0.26403 18 -6.35674 0.252297 0.264231 18 -6.3602 0.212426 0.264249 18 -6.37167 0.162764 0.264341 19 -6.36854 0.302935 0.26436 19 -6.36756 0.322942 0.26436 19 -6.38153 0.0527485 0.264414 19 -6.37912 0.183041 0.264414 19 -6.37748 0.233137 0.264414 19 -6.38214 0.143012 0.264432 19 -6.38774 0.0026556 0.264468 19 -6.38907 0.0929929 0.264487 19 -6.39133 0.0729529 0.264505 19 -6.39056 0.123146 0.264506 19 -6.37832 0.414026 0.264507 19 -6.3957 0.0227845 0.264542 19 -6.38593 0.354133 0.264543 19 -6.38479 0.374192 0.264543 19 -6.38029 0.444374 0.264544 19 -6.38883 0.465181 0.264635 19 -6.39755 0.39517 0.264672 19 -6.41772 -0.017372 0.264743 19 -6.39893 0.516527 0.264764 19 -6.41978 -0.158572 0.264779 34 -6.42338 -0.067816 0.264798 19 -6.40528 0.486687 0.2648 19 -6.40325 0.537153 0.264819 19 -6.43025 -0.138578 0.264871 19 -6.43083 -0.108273 0.264871 19 -6.43156 -0.0476612 0.264872 19 -6.43314 -0.0880905 0.26489 19 -6.42344 0.559262 0.26502 19 -6.44924 -0.179452 0.265054 37 -6.42563 0.579817 0.265057 19 -6.44273 0.612061 0.265241 19 -6.44277 0.632501 0.265259 19 -6.47231 -0.210526 0.265274 40 -6.44274 0.652949 0.265277 19 -6.48961 -0.231427 0.265439 39 -6.49485 -0.252022 0.265494 41 -6.46742 0.686367 0.265534 19 -6.49866 -0.30328 0.265548 19 -6.47295 0.779703 0.265681 41 -6.48312 0.708709 0.265699 19 -6.48682 0.729768 0.265754 19 -6.52301 0.765144 0.266121 19 -6.52204 0.806621 0.266158 47 -6.58751 -0.286338 0.266355 19 -6.63646 -0.350952 0.266831 20 -6.6039 0.89094 0.267001 20 -6.57339 -0.309762 0.30961 54 -6.59126 0.352504 0.309929 100 -6.60004 0.186802 0.30996 94 -6.60632 0.332444 0.310151 103 -6.62058 0.166492 0.310277 100 -6.61757 0.260069 0.310277 81 -6.63929 0.135589 0.310562 101 -6.63578 0.302474 0.310594 95 -6.64539 0.208802 0.310688 117 -6.64471 0.229677 0.310688 98 -6.6427 0.281857 0.310689 116 -6.59625 0.833259 0.310691 127 -6.65464 0.0208445 0.310783 99 -6.64803 0.376259 0.310847 125 -6.66238 0.0627007 0.310909 113 -6.66768 0.115103 0.311005 106 -6.67266 -0.0106148 0.311067 99 -6.65602 0.471138 0.311069 89 -6.678 0.0942586 0.311163 110 -6.66679 0.398259 0.311164 103 -6.69054 0.0418359 0.311352 110 -6.67881 0.430517 0.311386 107 -6.67566 0.504068 0.311417 131 -6.68541 0.452004 0.311512 107 -6.68402 0.525783 0.311576 114 -6.72659 -0.0320421 0.311922 112 -6.73746 -0.127402 0.312111 107 -6.74245 -0.053361 0.312175 114 -6.75824 -0.0747832 0.312428 114 -6.73816 0.551129 0.312462 110 -6.74944 0.584028 0.312684 112 -6.78181 -0.1071 0.312808 114 -6.75958 0.627666 0.312906 93 -6.76351 0.606598 0.312937 114 -6.75956 0.649081 0.312937 130 -6.793 -0.15002 0.312998 91 -6.83419 -0.183314 0.313662 130 -6.83406 0.688451 0.314172 127 -6.88355 -0.206471 0.314453 116 -6.92083 -0.229497 0.315055 120 -6.89752 0.71649 0.315216 97 -6.97362 -0.264354 0.315909 102 -6.94895 0.7437 0.316071 124 -7.01271 -0.288052 0.316542 147 -7.00103 0.782453 0.316957 126 -7.10166 -0.314389 0.317966 113 -7.11494 -0.371046 0.318219 166 -7.084 0.813946 0.318318 88 -7.10923 0.839379 0.318762 87 -6.9059 -0.291503 0.349812 40 -6.86401 0.84681 0.3499 40 -6.93212 0.833363 0.351281 40 -7.07495 0.358172 0.353415 124 -7.09477 0.214108 0.353708 84 -7.1 0.33717 0.353917 78 -7.11569 0.181257 0.354126 84 -7.12299 0.315918 0.354378 108 -7.12907 0.394808 0.354588 77 -7.14421 0.159627 0.354712 80 -7.14992 0.294703 0.354922 79 -7.15323 0.261088 0.354964 80 -7.16001 0.238835 0.355089 83 -7.16466 0.498615 0.355467 78 -7.18866 0.138188 0.355633 86 -7.18767 0.420926 0.355844 85 -7.20174 0.0592795 0.355884 87 -7.20122 0.104528 0.355884 84 -7.18499 0.522797 0.355928 119 -7.20551 0.0819626 0.355968 88 -7.19229 0.443894 0.355969 86 -7.19212 0.477923 0.356011 84 -7.21588 0.0367759 0.356177 88 -7.22997 0.00282779 0.35647 90 -7.27213 0.563925 0.357812 79 -7.31193 -0.0198168 0.358187 87 -7.33383 -0.0428368 0.358647 86 -7.32013 0.590968 0.358859 90 -7.35126 -0.100617 0.359024 87 -7.3292 0.649726 0.359152 85 -7.33816 0.615703 0.359277 89 -7.36953 -0.0776496 0.359401 91 -7.35101 0.675027 0.359654 73 -7.41489 -0.124564 0.360363 93 -7.42845 -0.148086 0.360656 89 -7.46626 0.709688 0.362125 127 -7.54562 -0.185584 0.363126 88 -7.54954 0.741843 0.363925 79 -7.60897 -0.210844 0.364466 90 -7.63145 0.786513 0.365725 84 -7.67623 -0.236611 0.36589 91 -7.74098 -0.274901 0.367271 77 -7.7482 0.823564 0.368238 92 -7.7734 0.85104 0.368824 54 -7.89395 -0.30465 0.370495 40 -7.20982 0.827149 0.393174 40 -7.29886 -0.301658 0.394416 40 -7.31984 -0.32564 0.394987 40 -7.29984 0.813931 0.395458 40 -7.537 0.815571 0.401584 40 -7.75967 -0.285718 0.406357 44 -7.77551 0.803515 0.40771 40 -7.86855 0.192121 0.40911 84 -7.87737 0.155169 0.409318 135 -7.91835 0.367509 0.410564 57 -7.99192 0.332953 0.412433 84 -8.00491 0.308267 0.412744 147 -8.03272 0.0441424 0.413315 55 -8.029 0.397559 0.413472 80 -8.02971 0.422878 0.413524 48 -8.04774 0.132674 0.41373 58 -8.05812 0.107492 0.41399 53 -8.04411 0.48696 0.413991 68 -8.06041 0.0821897 0.414042 76 -8.10279 0.0188446 0.415132 40 -8.06257 0.806632 0.415134 40 -8.11481 -0.00665976 0.415443 40 -8.20368 0.289472 0.417884 76 -8.21529 0.470875 0.418404 79 -8.22768 0.225566 0.418455 76 -8.25092 0.252068 0.419078 119 -8.22033 0.795837 0.419184 40 -8.33794 -0.282721 0.421361 40 +unknow 0.951847 1 0 231 -11.3812 24.3426 -1.6132 133 -11.444 24.2779 -1.61103 133 -11.5004 24.2004 -1.60791 137 -12.0618 26.4332 -1.59794 205 -12.6882 26.0517 -1.59308 146 -12.7533 25.9777 -1.59072 146 -11.8871 26.3787 -1.59036 101 -12.8614 25.8887 -1.58873 149 -12.9266 25.816 -1.5865 146 -12.9915 25.7432 -1.58426 146 -13.0524 25.6631 -1.58152 140 -13.1531 25.5622 -1.57879 140 -13.2224 25.4995 -1.5773 142 -13.2784 25.4118 -1.57407 140 -13.3906 25.3348 -1.57307 149 -13.4467 25.2486 -1.56996 142 -13.5043 25.1657 -1.5671 139 -13.6046 25.0685 -1.56474 133 -13.6556 24.9748 -1.56114 119 -13.7775 24.8256 -1.55666 114 -13.6927 24.8566 -1.55579 167 -13.8699 24.7169 -1.55355 138 -13.9249 24.6332 -1.5507 130 -13.9914 24.5702 -1.54933 89 -14.104 24.4989 -1.54895 66 -11.8071 24.4336 -1.4785 129 -11.6858 24.4764 -1.47763 169 -11.5884 24.4696 -1.47464 134 -13.7761 26.51 -1.47112 174 -11.4869 24.4535 -1.47104 125 -14.0611 26.3464 -1.47045 207 -11.287 24.5266 -1.46992 106 -13.6698 26.5088 -1.46831 177 -11.3514 24.4639 -1.46806 148 -14.3935 26.0751 -1.46595 127 -13.5193 26.5231 -1.46517 175 -14.2922 26.0852 -1.4637 165 -13.4043 26.5031 -1.46123 165 -14.172 26.0598 -1.45921 153 -14.0339 26.0982 -1.45741 144 -14.1519 24.5354 -1.38378 127 -13.9351 24.6041 -1.38108 127 -13.9895 24.5203 -1.37849 143 -12.3164 25.0353 -1.35996 126 -12.3407 24.8874 -1.3531 135 -12.0428 24.6757 -1.335 189 -11.8694 24.5158 -1.32264 154 -11.7416 24.5462 -1.32106 179 -11.4584 24.6467 -1.31938 134 -11.649 24.5505 -1.31904 139 -11.5531 24.5473 -1.31657 189 -14.1351 24.4603 -1.22066 160 -13.993 24.4798 -1.21793 237 -13.788 24.4767 -1.21267 123 -13.6356 24.475 -1.20883 118 -13.521 24.4495 -1.20488 148 -13.4336 24.4726 -1.20377 122 -13.2877 24.4794 -1.20053 159 -13.1833 24.47 -1.1976 109 -13.0819 24.4655 -1.19497 135 -12.9835 24.4659 -1.19264 109 -12.8412 24.4755 -1.18971 84 -12.755 24.498 -1.1887 69 -12.6423 24.4687 -1.18475 142 -12.5151 24.5049 -1.18344 106 -12.4074 24.4834 -1.18 123 -12.2999 24.4616 -1.17656 123 -12.1659 24.4817 -1.17443 120 -12.0695 24.4804 -1.17221 105 -11.9786 24.4895 -1.17059 107 -11.8833 24.4892 -1.16847 119 -11.6812 24.5619 -1.16735 120 -11.7531 24.5143 -1.16675 193 -11.5555 24.4955 -1.16159 112 -11.4256 24.5189 -1.15987 167 -11.2605 24.5666 -1.15855 98 -11.3142 24.4803 -1.15572 133 -11.0896 24.4974 -1.15178 110 -10.9995 24.5029 -1.15016 74 -14.242 24.5602 -1.06567 143 -14.0544 24.5023 -1.0592 178 -13.9517 24.5012 -1.05687 148 -13.8648 24.5275 -1.05597 255 -13.7051 24.5141 -1.05193 255 -13.6057 24.5169 -1.04987 255 -13.5035 24.5141 -1.04754 255 -13.362 24.5301 -1.04511 255 -13.2553 24.5175 -1.04233 255 -13.1489 24.5044 -1.03955 255 -13.0474 24.4998 -1.03722 255 -12.9066 24.5133 -1.03479 255 -12.8082 24.513 -1.03273 255 -12.7099 24.5124 -1.03066 255 -12.5687 24.5222 -1.02815 255 -12.4699 24.5189 -1.026 255 -12.3738 24.5205 -1.02411 255 -11.893 24.7152 -1.02241 144 -12.2304 24.5231 -1.02133 255 -12.1312 24.5167 -1.01909 255 -12.0329 24.5116 -1.01693 255 -11.9059 24.5447 -1.01577 191 -11.7023 24.5163 -1.01065 149 -11.6038 24.5078 -1.00841 162 -11.4712 24.5261 -1.00661 165 -13.9141 24.5625 -0.878849 156 -13.7401 24.4335 -0.871223 166 -13.6399 24.4347 -0.869374 182 -13.5015 24.4567 -0.867526 199 -13.3958 24.4464 -0.865215 201 -13.2903 24.4356 -0.862904 211 -13.1561 24.4628 -0.861364 213 -13.0567 24.4616 -0.859515 192 -12.9546 24.4548 -0.857436 234 -12.8554 24.4529 -0.855587 219 -12.7161 24.4671 -0.853585 222 -12.62 24.4696 -0.851967 237 -12.5194 24.4629 -0.849964 235 -12.3824 24.4788 -0.848116 236 -12.2857 24.4782 -0.846421 238 -12.1874 24.4738 -0.844573 236 -12.0508 24.4879 -0.842725 240 -11.952 24.4807 -0.840799 235 -11.8506 24.4677 -0.838642 230 -11.7128 24.4764 -0.83664 255 -11.6136 24.4661 -0.834637 240 -11.5163 24.4591 -0.832788 235 -11.4251 24.4643 -0.831479 244 -11.2896 24.4743 -0.829631 239 -11.2085 24.5006 -0.829246 251 -11.1282 24.5284 -0.828938 245 -11.0019 24.5568 -0.827937 210 -10.9223 24.5858 -0.827707 161 -14.1401 24.4642 -0.702436 231 -14.0333 24.4566 -0.700503 230 -13.9001 24.4911 -0.699343 233 -13.7926 24.4807 -0.697345 230 -13.6912 24.4803 -0.695733 235 -13.5524 24.5026 -0.694186 230 -13.4436 24.4873 -0.692059 237 -13.3417 24.4838 -0.690383 235 -13.2043 24.5059 -0.688901 240 -13.0951 24.4874 -0.686709 236 -13.0003 24.4949 -0.685485 234 -12.8596 24.5081 -0.683745 234 -12.7539 24.4934 -0.681746 242 -12.6548 24.4908 -0.6802 240 -12.5595 24.4949 -0.67891 245 -12.4213 24.5092 -0.677299 244 -12.3245 24.5089 -0.675881 240 -12.2251 24.5028 -0.67427 240 -12.0873 24.5153 -0.672659 239 -11.9927 24.5173 -0.67137 241 -11.8963 24.5153 -0.669952 241 -11.7573 24.5224 -0.668212 243 -11.6613 24.5195 -0.666794 245 -11.568 24.5217 -0.665569 245 -11.4688 24.5109 -0.663893 244 -11.3389 24.5338 -0.662798 195 -14.2002 24.4955 -0.558796 160 -14.0489 24.4996 -0.556846 190 -13.9402 24.488 -0.555113 197 -13.8348 24.4812 -0.553542 217 -13.7324 24.4792 -0.552134 217 -13.5946 24.5034 -0.550888 220 -13.4896 24.4952 -0.549317 221 -13.3858 24.4883 -0.5478 223 -13.2475 24.5088 -0.546501 231 -13.1497 24.5116 -0.545309 232 -13.0445 24.4998 -0.543684 237 -12.9028 24.5114 -0.542167 241 -12.8017 24.5057 -0.540759 242 -12.7054 24.5086 -0.539622 247 -12.6092 24.511 -0.538484 248 -12.4691 24.522 -0.537022 248 -12.3695 24.5164 -0.535668 248 -12.2674 24.5051 -0.534151 252 -12.1341 24.5267 -0.533068 252 -12.035 24.5199 -0.531714 255 -11.9335 24.5072 -0.530197 255 -11.7988 24.5235 -0.529006 255 -11.702 24.5189 -0.52776 255 -11.6078 24.5194 -0.526676 255 -11.4761 24.5394 -0.525648 255 -11.3788 24.5318 -0.524348 255 -11.29 24.542 -0.52359 252 -11.2012 24.5519 -0.522831 158 -11.0797 24.5916 -0.522453 169 -13.648 26.062 -0.391993 167 -13.5213 25.6248 -0.382898 100 -12.5791 26.0803 -0.382536 141 -13.8355 24.6066 -0.367721 205 -13.6776 24.5964 -0.365968 178 -13.5257 24.5045 -0.362828 255 -13.4255 24.5048 -0.36185 255 -12.1728 24.9394 -0.357982 96 -12.5242 24.7648 -0.35798 96 -12.6704 24.6679 -0.357571 96 -12.4346 24.7808 -0.35745 96 -12.5673 24.6577 -0.356429 96 -11.8209 24.7097 -0.350641 243 -11.7123 24.6817 -0.349173 255 -11.5789 24.7004 -0.348358 255 -11.4852 24.7023 -0.347584 255 -13.5545 25.9954 -0.253606 87 -13.816 25.8007 -0.252817 94 -13.4081 26.0127 -0.252788 132 -12.5093 25.8427 -0.244075 86 -13.54 24.6286 -0.234532 222 -12.524 24.8675 -0.230414 83 -12.5379 24.7013 -0.22818 83 -11.8638 24.7042 -0.223525 82 -11.7716 24.7106 -0.222991 82 -11.6227 24.697 -0.221796 82 -11.5324 24.7062 -0.221324 82 -11.328 24.7742 -0.220948 255 -11.4405 24.7115 -0.22079 82 -11.2221 24.7477 -0.219878 178 -13.2419 24.7335 -0.0484127 149 -13.0952 24.7391 -0.0478302 255 -12.6813 24.7989 -0.0465746 106 -12.7591 24.759 -0.0465742 116 -12.5706 24.7745 -0.0459189 106 -12.4448 24.8156 -0.0457374 106 -12.3364 24.7937 -0.0451181 106 -12.231 24.7768 -0.0445536 105 -12.0281 24.8559 -0.0443907 254 -12.1354 24.7792 -0.0441895 105 -11.9023 24.7944 -0.0433887 235 -11.8088 24.7992 -0.0430611 229 -11.6782 24.8256 -0.0427702 229 -11.5883 24.8368 -0.0425154 229 +unknow 0.965769 1 0 395 -11.2692 -1.04417 -1.31099 90 -11.2605 -1.11476 -1.31072 102 -11.2639 -1.07938 -1.31072 103 -11.2531 -1.16762 -1.31045 107 -11.6559 -1.38065 -1.2923 165 -11.6543 -1.34333 -1.29153 88 -11.6466 -1.30536 -1.29 121 -11.6467 -1.24981 -1.28924 126 -11.6544 -1.17661 -1.28924 121 -11.6486 -1.21301 -1.28899 123 -11.6499 -1.12071 -1.28797 117 -12.0493 -1.35616 -1.28104 69 -12.0595 -1.2232 -1.28055 97 -12.0516 -1.27981 -1.2803 97 -12.0456 -1.31745 -1.28006 80 -12.0593 -1.18493 -1.28006 98 -12.0584 -1.0893 -1.27883 84 -12.0472 -1.14557 -1.2781 94 -12.4793 -1.44308 -1.26043 249 -12.4741 -1.38292 -1.25903 203 -12.459 -1.48037 -1.25857 255 -12.4301 -1.61571 -1.25717 137 -12.4424 -1.51804 -1.25717 245 -12.4317 -1.55636 -1.25647 136 -12.4567 -1.34134 -1.25647 91 -12.4667 -1.2039 -1.256 136 -12.4451 -1.24125 -1.2539 123 -12.4332 -1.29925 -1.2532 130 -13.1951 -1.5151 -1.24825 227 -13.2112 -1.18147 -1.24628 116 -13.1626 -1.55334 -1.24519 125 -13.1498 -1.59374 -1.24431 176 -13.1987 -1.11773 -1.24431 95 -13.1876 -1.22118 -1.24409 167 -13.7261 -1.60671 -1.22826 118 -13.7582 -1.2609 -1.22784 144 -12.5167 -1.20004 -1.17031 132 -12.3545 -1.22401 -1.15279 96 -12.3287 -1.31934 -1.15104 99 -12.3249 -1.2798 -1.15017 157 -12.7661 -1.20856 -1.12424 83 -12.3064 -1.39864 -1.07857 100 -12.3229 -1.22432 -1.07836 130 -12.2993 -1.26096 -1.07629 90 -12.2913 -1.29917 -1.07587 103 -12.2811 -1.35662 -1.07546 107 -12.285 -1.3846 -1.00936 132 -12.2675 -1.34366 -1.00719 106 -12.2578 -1.30367 -1.00581 109 -12.2282 -1.24235 -1.00227 98 -12.0181 -1.18333 -0.981001 99 -11.8909 -1.13339 -0.968006 104 -11.8528 -1.09228 -0.963871 117 -11.8241 -1.03354 -0.960523 111 -11.7936 -0.993624 -0.957176 67 -12.2042 -1.41949 -0.933488 66 -12.2028 -1.36107 -0.932745 119 -12.1278 -1.31398 -0.92531 109 -11.8785 -1.24867 -0.901518 67 -11.8184 -1.00372 -0.755832 183 -11.6774 -0.919217 -0.649568 64 -11.8517 -0.98228 -0.596025 154 -11.7793 -1.03205 -0.591419 40 -11.7314 -0.934943 -0.587625 66 -12.1787 -1.38924 -0.552082 71 -11.9985 -1.31184 -0.5404 110 -11.9272 -1.2663 -0.535677 176 -11.9053 -1.22622 -0.534062 67 -11.8553 -1.16476 -0.530582 95 -11.835 -1.12529 -0.52909 133 -11.8126 -1.08579 -0.527475 117 -11.7898 -1.02774 -0.525735 117 -11.7512 -0.91298 -0.522752 255 -11.7353 -0.985983 -0.52213 87 -11.7135 -0.854637 -0.520142 113 -11.7025 -0.946297 -0.519893 215 -12.1694 -1.23325 -0.477881 255 -12.1369 -1.13365 -0.475521 186 -12.0641 -1.29901 -0.472374 40 -12.0463 -1.25877 -0.471137 244 -12.0459 -1.16314 -0.470575 255 -11.861 -1.01336 -0.459447 134 -11.8174 -0.934774 -0.456637 160 -11.7985 -0.970547 -0.455738 214 -12.1766 -1.35105 -0.410269 72 -11.9901 -1.29264 -0.400557 178 -11.9623 -1.25171 -0.398938 223 -11.9482 -1.19338 -0.397926 92 -11.9001 -1.15096 -0.395296 128 -11.8639 -1.10993 -0.393272 136 -11.8471 -1.05211 -0.392159 112 -11.8026 -1.01091 -0.389731 102 -11.7739 -0.971268 -0.388113 226 -11.7749 -0.934118 -0.388011 193 -11.7672 -0.877755 -0.387404 214 -12.1696 -1.33908 -0.340188 80 -12.0407 -1.28633 -0.334174 92 -12.0504 -1.19173 -0.334174 116 -12.0228 -1.24618 -0.333187 230 -11.9786 -1.14646 -0.330763 160 -11.9582 -1.10657 -0.329686 201 -11.8857 -1.04322 -0.326185 83 -11.8333 -0.926191 -0.323402 101 -11.8232 -1.00017 -0.323223 128 -11.8164 -0.962194 -0.322774 166 -12.027 -1.2876 -0.256892 46 -11.9853 -1.24516 -0.25512 83 -11.985 -1.18809 -0.254889 87 -11.9489 -1.14669 -0.253348 94 -11.9047 -1.10482 -0.251499 132 -11.8703 -1.06411 -0.250035 104 -11.8313 -1.00454 -0.24834 99 -11.7986 -0.964512 -0.246954 164 -11.7876 -0.926373 -0.246414 100 -11.7858 -0.87039 -0.246183 115 -11.7865 -0.833222 -0.246106 113 -12.241 -1.32957 -0.188196 95 -12.1219 -1.27785 -0.184199 109 -12.0742 -1.23437 -0.182523 76 -12.0261 -1.17211 -0.180782 113 -11.988 -1.13029 -0.179428 101 -11.9636 -1.09002 -0.178525 98 -11.9491 -1.05082 -0.177945 95 -11.926 -0.992119 -0.177042 102 -11.9091 -0.953006 -0.176397 108 -11.9041 -0.91496 -0.176139 107 -11.8843 -0.857074 -0.175366 57 -12.3563 -1.34847 -0.128298 101 -12.1537 -1.28817 -0.122664 95 -12.1278 -1.22772 -0.121797 115 -12.0758 -1.18427 -0.12028 104 -12.0457 -1.14319 -0.119358 107 -12.0233 -1.10302 -0.118654 108 -12.0025 -1.04416 -0.117949 108 -12.0391 0.127751 -0.11773 40 -11.9798 -1.00433 -0.117245 117 -11.955 -0.964499 -0.116486 105 -11.9494 -0.907421 -0.116215 101 -11.9449 -0.831649 -0.115944 98 -11.9403 -0.869031 -0.11589 105 -12.7678 -1.55963 -0.0542727 44 -12.731 -1.51447 -0.0534162 44 -12.684 -1.46838 -0.0523557 44 -12.6451 -1.40343 -0.0514176 63 -12.5501 -1.35277 -0.0493785 91 -12.3137 -1.28767 -0.0444439 115 -12.2679 -1.22436 -0.0433835 116 -12.2418 -1.18286 -0.0427716 119 -12.1957 -1.13964 -0.041752 122 -12.2454 0.186261 -0.0417077 42 -12.1793 -1.09949 -0.041344 121 -12.214 0.147469 -0.0410553 42 -12.1625 -1.04016 -0.0408953 117 -12.2064 0.109045 -0.0408923 42 -12.1548 -0.962584 -0.0406096 125 -12.1848 0.0514775 -0.0404438 42 -12.1398 -0.999752 -0.0403651 125 -12.1333 -0.903308 -0.0400794 123 -12.1201 -0.864017 -0.039753 103 -12.6967 -1.51711 0.00653398 40 -12.6899 -1.55675 0.00656529 40 -12.668 -1.45323 0.00710044 40 -12.5078 -1.35564 0.00977513 40 -12.3847 -1.28355 0.0118204 40 -12.2952 -1.23544 0.0132993 120 -12.291 -1.19605 0.0134253 92 -12.237 -1.15212 0.0143379 136 -12.2243 -1.09288 0.0146211 83 -12.2197 -1.0538 0.0147471 90 -12.1778 -0.953995 0.015534 83 -12.1787 -0.915584 0.0155656 94 -12.1652 -1.01072 0.0156597 132 -12.1616 -0.875927 0.0158803 90 -12.1501 -0.779268 0.0161637 64 -12.1377 -0.816788 0.0163209 122 -12.7975 -1.53986 0.0898118 97 -12.7371 -1.57308 0.0903218 49 -12.6944 -1.38579 0.0909054 48 -12.6015 -1.27537 0.0918531 48 -12.5874 -1.33387 0.0919259 48 -12.5218 -1.2274 0.0926185 85 -12.4838 -1.18401 0.0930013 77 -12.4736 -1.14348 0.0931289 96 -12.4609 -1.08309 0.093293 76 -12.4582 -1.04342 0.0933478 95 -12.4336 -1.00197 0.0936031 128 -12.4302 -0.942745 0.093676 84 -12.4111 -0.902052 0.0938766 143 -12.4079 -0.862625 0.0939314 92 -13.8376 -1.275 0.168801 50 -12.764 -1.36029 0.171698 46 -12.7241 -1.59916 0.17173 46 -12.6978 -1.53517 0.171823 46 -12.6648 -1.26952 0.171994 46 -12.6349 -1.30667 0.172064 46 -12.6808 -1.19028 0.247567 40 -12.7089 -1.25342 0.247677 40 -12.7128 -1.29417 0.247702 40 -12.7445 -1.33793 0.247819 40 -13.3379 -0.873709 0.249606 40 -13.3371 -0.915751 0.249613 40 -13.4922 -0.990612 0.25013 55 -13.5336 -1.07927 0.250285 40 -13.5389 -1.03691 0.250292 40 -13.57 -1.12516 0.250415 40 -13.8236 -1.25609 0.251269 41 -12.7897 -1.25829 0.323698 42 -12.8015 -1.32036 0.323863 42 -12.9644 -1.37799 0.325402 43 -13.0782 -1.20319 0.326282 43 -13.4607 -0.939699 0.329582 45 -13.4655 -0.897532 0.329601 45 -13.5534 -0.988781 0.330462 53 -13.5674 -0.839939 0.330499 45 -13.7101 -1.06488 0.331946 62 -13.922 -1.12494 0.333925 46 -14.8146 -0.821362 0.341898 49 -14.8279 -0.868807 0.342045 49 -12.7529 -1.04802 0.407983 35 -12.7714 -1.09 0.408331 35 -12.8239 -1.15549 0.409249 35 -12.8582 -1.30135 0.410008 35 -12.8681 -1.24114 0.410071 35 -12.876 -1.20108 0.410135 35 -12.9534 -1.35232 0.41159 35 -13.4447 -0.915115 0.418745 36 -13.4557 -0.95837 0.418967 37 -13.4635 -0.873942 0.418998 37 -14.8186 -0.894418 0.440427 40 -14.8493 -0.84951 0.44087 40 -12.9635 -1.28157 0.477841 43 -13.0967 -1.33602 0.48073 44 -13.4996 -0.885206 0.488351 45 -13.5023 -0.842788 0.488351 45 -14.8268 -0.759369 0.515942 50 -14.8332 -0.712973 0.516026 50 -14.8404 -0.806789 0.516277 50 -12.8175 -0.811935 0.538224 51 -12.8554 -0.875263 0.539314 52 -12.8676 -0.95739 0.539781 52 -12.8905 -0.918421 0.540301 52 -12.8849 -1.0198 0.540352 52 -12.9075 -1.06245 0.541027 52 -12.9181 -1.10422 0.54139 52 -12.9484 -1.14787 0.542273 52 -12.9549 -1.25109 0.542688 52 -12.9806 -1.21248 0.543259 52 -13.0145 -1.29826 0.544349 52 -14.6723 -0.35579 0.585833 59 -14.7785 -0.730527 0.588947 80 -14.8062 -0.848574 0.58983 60 -14.8101 -0.778792 0.58983 60 -14.8321 -0.26671 0.589935 60 -14.8372 -0.313446 0.590091 60 -12.9212 -0.538013 0.62045 41 -12.9446 -0.213334 0.620901 41 -12.9396 -0.477673 0.620965 41 -12.941 -0.437023 0.620965 41 -12.9325 -0.680964 0.621028 41 -12.9443 -0.396422 0.621029 41 -12.949 -0.294788 0.621094 41 -12.9559 -0.254215 0.621287 41 -12.9582 -0.0710322 0.621287 41 -12.9474 -0.579797 0.62135 41 -12.958 -0.335703 0.621415 41 -12.9519 -0.763571 0.6218 41 -12.9595 -0.621114 0.6218 41 -12.9735 -0.152606 0.621802 41 -12.9759 -0.111864 0.621866 41 -12.9764 -0.00994925 0.621866 41 -12.9534 -0.804494 0.621929 41 -12.9863 0.0308615 0.622188 41 -12.9892 0.173713 0.622317 41 -12.9742 -0.723948 0.622443 41 -12.9694 -0.866819 0.622572 41 -13.0077 0.133122 0.622896 41 -12.9806 -0.908508 0.623022 41 -13.0241 0.0719451 0.623411 41 -13.0155 -0.951979 0.624244 41 -13.0249 -1.01436 0.624694 41 -13.0356 -1.05638 0.625144 41 -13.0309 -1.15907 0.625273 71 -13.055 -1.20252 0.626173 103 -13.1237 0.258261 0.626692 41 -13.0691 -1.24519 0.626752 162 -13.1333 0.361683 0.627078 41 -13.1723 0.321422 0.6283 41 -13.1328 -1.29277 0.628939 41 -13.222 0.405874 0.629973 78 -13.1922 -1.36128 0.631062 42 -13.0312 -0.666359 0.709063 103 -13.0435 -0.420694 0.709141 90 -13.0382 -0.605138 0.709218 100 -13.0441 -0.461744 0.709218 93 -13.0421 -0.564267 0.709295 105 -13.0507 -0.3799 0.709373 93 -13.0544 -0.31845 0.709451 92 -13.0553 -0.277433 0.709451 95 -13.0581 -0.23646 0.709528 93 -13.0588 -0.195438 0.709529 94 -13.0538 -0.523708 0.709682 90 -13.0679 -0.0929397 0.709838 99 -13.0716 -0.134043 0.709993 98 -13.063 -0.709208 0.710378 104 -13.0603 -0.79139 0.710456 97 -13.0627 -0.750359 0.710456 101 -13.0901 -0.052019 0.71069 93 -13.1002 0.0096571 0.711077 99 -13.0744 -0.854137 0.711152 99 -13.1021 0.0508137 0.711154 94 -13.0856 -0.896191 0.711693 97 -13.1199 0.092066 0.711851 94 -13.0927 -0.938027 0.71208 99 -13.1313 0.15401 0.712315 96 -13.114 -1.00175 0.713086 100 -13.1527 0.195543 0.713167 95 -13.1187 -1.04359 0.713396 97 -13.1234 -1.08547 0.713705 96 -13.172 0.23718 0.713941 108 -13.1972 0.279062 0.714947 94 -13.1519 -1.15033 0.71502 90 -13.1622 -1.19293 0.715562 86 -13.2177 0.341773 0.715798 99 -13.1683 -1.23523 0.715949 76 -13.2695 -1.35016 0.720282 40 -13.2857 -1.2886 0.720669 40 -13.0604 -0.432668 0.77038 152 -13.0623 -0.371115 0.770381 152 -13.0654 -0.330126 0.770467 152 -13.0709 -0.474107 0.7709 151 -13.0763 -0.289282 0.770901 159 -13.0688 -0.576834 0.770987 150 -13.0792 -0.248231 0.770988 157 -13.0734 -0.515315 0.771074 155 -13.0729 -0.618157 0.771247 148 -13.0729 -0.659321 0.771333 153 -13.0882 -0.186693 0.771335 158 -13.0887 -0.145574 0.771335 157 -13.0796 -0.721451 0.771767 165 -13.1071 -0.104561 0.772115 161 -13.1074 -0.042798 0.772115 162 -13.0873 -0.763097 0.7722 158 -13.0942 -0.846061 0.77272 160 -13.1235 -0.00158624 0.772809 164 -13.1028 -0.805273 0.77298 163 -13.1294 0.0396697 0.773069 162 -13.112 -0.909233 0.773673 162 -13.123 -0.951405 0.77428 156 -13.1591 0.10183 0.774369 162 -13.1667 0.143277 0.774716 162 -13.1379 -0.99395 0.77506 160 -13.141 -1.05647 0.775407 156 -13.1841 0.184925 0.775496 161 -13.1955 0.22657 0.776017 159 -13.1675 -1.10019 0.776707 158 -13.2282 0.289562 0.77749 158 -13.1839 -1.14323 0.777573 154 -13.2352 0.331335 0.777837 148 -13.2023 -1.20749 0.778614 149 -13.2342 -1.25228 0.780174 173 -13.28 -1.29861 0.782341 78 -13.2018 -0.442705 0.863536 114 -13.2058 -0.29752 0.863536 119 -13.2043 -0.484335 0.863735 113 -13.2188 -0.339396 0.864235 118 -13.2201 -0.58895 0.864734 114 -13.221 -0.693086 0.865033 111 -13.2261 -0.630876 0.865133 112 -13.237 -0.402329 0.865234 116 -13.2358 -0.548021 0.865433 118 -13.2447 -0.256844 0.865434 120 -13.2454 -0.215236 0.865434 123 -13.2463 -0.152814 0.865434 126 -13.2327 -0.735425 0.865732 111 -13.253 -0.0696252 0.865734 123 -13.2567 -0.111302 0.865934 125 -13.2363 -0.777353 0.866032 109 -13.2711 -0.00721737 0.866633 126 -13.2577 -0.820457 0.86723 111 -13.2569 -0.924989 0.86753 126 -13.2909 0.0762436 0.867632 120 -13.2637 -0.883609 0.86773 107 -13.297 0.0344889 0.867932 124 -13.2678 -0.967673 0.868229 119 -13.3103 0.139043 0.868631 120 -13.287 -1.03209 0.869428 117 -13.3056 -1.07564 0.870526 114 -13.3498 0.18132 0.870629 125 -13.3631 0.223469 0.871328 120 -13.3201 -1.11897 0.871425 111 -13.3829 0.328912 0.872427 94 -13.3863 0.265876 0.872527 118 -13.3445 -1.18444 0.872923 112 -13.3745 -1.22953 0.874621 116 -13.476 -1.28176 0.879915 36 +unknow 0.965117 1 0 255 -19.6605 25.3037 -1.41276 109 -19.9571 24.7094 -1.3985 121 -19.0821 25.2888 -1.39435 109 -19.9768 24.5752 -1.39384 159 -20.0374 24.4923 -1.39253 124 -18.9618 25.2942 -1.39091 113 -20.1145 24.3513 -1.38949 159 -20.1654 24.2573 -1.38747 124 -20.1826 24.1233 -1.38281 156 -20.2767 24.005 -1.3813 127 -20.2952 23.8742 -1.37684 156 -20.3377 23.7723 -1.37431 124 -19.2684 24.0868 -1.35206 116 -19.0597 23.9798 -1.34124 116 -18.845 24.0956 -1.33911 101 -18.946 23.9909 -1.3381 118 -21.743 25.1661 -1.2843 172 -21.613 25.1752 -1.2808 194 -21.4923 25.1943 -1.27793 147 -21.6826 24.0092 -1.24355 165 -21.7618 23.8698 -1.2413 159 -21.4775 23.933 -1.23484 157 -19.1642 25.3082 -1.21636 164 -19.0834 25.3667 -1.21627 164 -19.1988 25.1891 -1.21304 153 -18.8597 25.317 -1.20846 162 -18.767 25.3585 -1.20747 207 -19.2155 24.0943 -1.17471 255 -19.2723 24.0104 -1.17336 180 -19.0466 24.0372 -1.16797 196 -18.8849 24.0654 -1.16447 173 -21.8049 23.8845 -1.03729 123 -21.7257 23.9484 -1.03706 122 -21.5233 23.8754 -1.02974 187 -21.3481 23.9065 -1.02612 149 -21.2172 23.9106 -1.02289 175 -21.0944 23.9231 -1.02011 173 -20.9105 23.941 -1.01596 168 -20.7816 23.9446 -1.0128 143 -20.6358 23.928 -1.00864 195 -20.4697 23.9626 -1.00548 156 -20.309 23.9262 -1.0004 191 -18.2756 25.4 -0.996861 119 -20.1707 23.9149 -0.996621 153 -19.6111 24.3169 -0.994851 176 -19.9963 23.9361 -0.992923 144 -19.8573 23.9218 -0.989072 181 -18.2601 25.1276 -0.988001 118 -19.7299 23.9208 -0.985913 180 -18.2883 25.0007 -0.984688 118 -18.3312 24.8948 -0.982376 118 -19.5927 23.9069 -0.982139 180 -19.427 23.9337 -0.978904 180 -18.3364 24.6573 -0.975134 128 -19.1926 23.9508 -0.973743 171 -19.0435 23.9955 -0.971509 234 -18.8431 24.0517 -0.968428 146 -18.628 24.0091 -0.962035 116 -18.2008 24.3146 -0.96142 160 -18.274 24.0165 -0.953947 211 -21.9406 23.9823 -0.839411 59 -21.8584 24.0437 -0.839089 104 -21.5374 23.9164 -0.829097 86 -21.4461 23.9661 -0.828324 76 -21.3056 23.9602 -0.825165 106 -21.0924 23.8713 -0.81846 95 -20.9296 23.9134 -0.816011 113 -20.7861 23.9006 -0.812659 160 -20.6743 23.9235 -0.810854 108 -20.4898 23.9372 -0.807309 131 -20.3393 23.9132 -0.80357 116 -20.2175 23.922 -0.801249 122 -18.2902 25.3669 -0.799712 156 -20.0352 23.9343 -0.797768 120 -19.9049 23.9311 -0.794996 123 -19.7774 23.9304 -0.792353 121 -18.274 25.0947 -0.792297 94 -19.6399 23.9168 -0.789195 123 -19.2307 24.1832 -0.787585 172 -18.2534 24.9018 -0.786881 137 -19.4701 23.9393 -0.786294 119 -19.3584 23.9553 -0.784425 130 -19.2429 23.9662 -0.782362 130 -18.2353 24.7142 -0.781658 104 -18.9995 24.0476 -0.779526 109 -18.2583 24.503 -0.776629 136 -18.7954 23.9437 -0.772822 119 -18.2451 24.3257 -0.771793 97 -18.6467 23.9863 -0.770953 133 -18.2595 24.0292 -0.764442 141 -21.9008 23.8884 -0.669734 69 -21.7543 23.8787 -0.666863 69 -21.5452 23.874 -0.662963 141 -21.4194 23.885 -0.660904 125 -21.2712 23.87 -0.657925 165 -21.1418 23.8753 -0.655703 112 -20.9685 23.9055 -0.653212 124 -20.8185 23.8852 -0.650124 173 -20.7002 23.9006 -0.648336 124 -20.5301 23.9311 -0.645953 134 -20.3719 23.898 -0.642485 116 -18.2722 25.4508 -0.640546 67 -20.2063 23.855 -0.638693 177 -20.0501 23.8979 -0.636851 114 -18.2233 25.2149 -0.634585 82 -19.9161 23.8901 -0.634359 121 -19.7848 23.8847 -0.631976 133 -19.629 23.9251 -0.630134 138 -19.4982 23.9184 -0.627751 134 -19.3677 23.9112 -0.625367 139 -19.2461 23.9142 -0.623363 140 -19.0809 23.9389 -0.621087 130 -18.1979 24.6045 -0.620821 255 -18.9536 23.9329 -0.618812 135 -18.8326 23.9341 -0.616808 131 -18.2228 24.3966 -0.616703 255 -18.6631 23.95 -0.614316 135 -18.1733 24.1714 -0.611013 255 -18.2022 24.052 -0.6089 163 -18.2607 23.9724 -0.608141 118 -21.5126 23.9307 -0.448241 166 -21.3493 23.8998 -0.44555 154 -21.1728 23.9283 -0.443593 197 -21.046 23.9362 -0.442003 161 -20.9127 23.936 -0.440209 204 -20.7679 23.9216 -0.438048 177 -20.6001 23.9555 -0.436335 156 -20.4715 23.9578 -0.434664 174 -20.2924 23.9002 -0.431401 177 -18.2879 25.4101 -0.430474 188 -20.1319 23.939 -0.429893 178 -20.0027 23.9377 -0.42818 182 -19.8763 23.9389 -0.426549 181 -18.2419 25.1794 -0.42611 170 -19.6933 23.9474 -0.424307 176 -19.5825 23.9659 -0.423165 170 -18.2516 24.9448 -0.422357 173 -19.4529 23.9606 -0.421412 172 -19.326 23.9578 -0.41974 239 -18.242 24.7682 -0.419338 152 -19.1679 23.9924 -0.418273 183 -19.0215 23.9633 -0.415948 186 -18.2113 24.5647 -0.415626 177 -18.9027 23.968 -0.414521 211 -18.7415 23.9954 -0.412931 189 -18.2046 24.3953 -0.412771 147 -18.6317 24.0099 -0.41179 163 -18.2903 24.1131 -0.409222 199 -18.2109 24.1656 -0.4091 137 -21.6972 23.9256 -0.300488 96 -21.543 23.9059 -0.298632 95 -21.3745 23.8691 -0.296429 119 -21.2008 23.9007 -0.294983 150 -21.0556 23.8876 -0.293315 150 -20.9252 23.8904 -0.291994 151 -20.7831 23.879 -0.29039 157 -20.609 23.9055 -0.288911 167 -20.4948 23.9245 -0.287968 147 -20.3005 23.8486 -0.285073 155 -20.1402 23.8874 -0.283909 168 -18.2754 25.3252 -0.283699 93 -20.0201 23.8968 -0.282808 133 -19.8734 23.8735 -0.281047 166 -18.2187 25.0799 -0.280049 92 -19.72 23.9175 -0.28004 135 -19.5701 23.888 -0.278184 167 -19.4684 23.9167 -0.277524 138 -18.2316 24.8502 -0.277247 92 -19.2753 23.9085 -0.275511 173 -19.1726 23.9346 -0.274819 135 -18.217 24.6672 -0.274792 91 -19.0264 23.9055 -0.273025 170 -18.9264 23.9337 -0.272396 138 -18.1704 24.4429 -0.271519 102 -18.7358 23.9234 -0.270415 170 -18.1789 24.2944 -0.269725 114 -18.6275 23.9395 -0.269565 134 -18.2458 23.9884 -0.266515 171 -21.3721 24.7849 -0.090955 123 -21.4302 24.695 -0.0906812 123 -21.3155 24.3306 -0.0874913 122 -21.3786 24.2486 -0.0873086 145 -21.4322 23.9281 -0.0854487 161 -21.3139 24.0228 -0.0853765 176 -20.5557 23.9914 -0.0806223 119 -18.3179 25.5489 -0.0792131 119 -20.3608 23.9158 -0.0789461 187 -20.1666 23.9153 -0.0777986 198 -18.2692 25.3129 -0.0772078 118 -20.0386 23.9157 -0.0770518 166 -19.9109 23.9156 -0.0763051 201 -19.7508 23.9521 -0.0756314 164 -18.2109 25.0662 -0.0750751 132 -19.6171 23.9429 -0.0747935 199 -19.4963 23.9486 -0.0741379 163 -18.1867 24.8685 -0.073489 134 -19.3192 23.9609 -0.0732091 187 -19.2037 23.9715 -0.0726263 158 -18.2157 24.6636 -0.0721397 134 -19.0598 23.9457 -0.0716244 180 -18.941 23.9506 -0.0709869 178 -18.1951 24.4747 -0.0706448 164 -18.7822 23.9814 -0.0703133 170 -18.6515 23.9693 -0.0694936 164 -18.2081 24.095 -0.0679464 186 -18.2704 24.0202 -0.0677455 197 -20.4416 25.3669 0.11771 117 -20.5086 25.287 0.117765 117 -21.2545 23.97 0.119198 144 -20.5448 23.9916 0.120426 114 -20.2609 23.8867 0.121148 134 -18.315 25.3897 0.121182 113 -20.1665 23.9272 0.121229 119 -18.281 24.7633 0.122622 111 -18.2617 24.0181 0.124286 215 -18.3006 24.0315 0.304064 210 -18.2618 24.7778 0.305918 91 -18.3617 25.4105 0.30776 93 -20.2779 24.0194 0.308041 241 -20.3947 24.0043 0.308249 147 -20.6002 24.0156 0.308709 160 -20.7383 24.0234 0.309019 154 -20.8715 24.0245 0.309304 151 -20.4881 25.2163 0.311454 96 -20.4415 25.321 0.311622 96 -20.7913 25.1826 0.311992 96 -18.2726 24.1235 0.483218 159 -18.282 24.2943 0.484519 130 -18.2845 24.4574 0.485728 120 -18.8216 24.0542 0.485786 101 -18.944 24.0547 0.486482 101 -19.0543 24.039 0.486996 101 -18.263 24.6704 0.487175 123 -19.192 24.0572 0.487912 101 -18.286 24.8647 0.488732 152 -19.3628 24.0382 0.488756 102 -19.491 24.0425 0.489526 102 -19.6094 24.0339 0.490149 102 -18.3126 25.0658 0.490362 121 -19.7911 24.0247 0.491139 102 -19.869 23.9654 0.491176 109 -18.3277 25.2528 0.491828 124 -20.2548 24.0444 0.493999 103 -20.3432 23.9959 0.494183 103 -20.504 24.0323 0.495393 104 -20.6979 24.0295 0.496529 104 -19.3339 24.5277 0.699744 83 -19.437 24.4997 0.70041 83 -19.5264 24.4542 0.700726 83 -19.649 24.3712 0.700917 83 -19.7456 24.3342 0.701424 83 -19.8777 24.3401 0.702817 84 -20.0176 24.277 0.70345 84 -20.1296 24.2571 0.704337 84 -20.2339 24.2275 0.705033 84 +unknow 0.969676 1 0 210 -20.7688 -21.4381 -0.940611 171 -21.0571 -21.1296 -0.939916 182 -20.8123 -21.3485 -0.939302 193 -21.1437 -21.0175 -0.939222 168 -20.675 -21.4759 -0.939149 182 -21.1968 -20.9384 -0.938529 164 -20.5798 -21.5119 -0.937609 176 -20.9484 -21.1531 -0.937607 141 -21.2382 -20.8479 -0.937219 133 -21.3305 -20.742 -0.936911 133 -20.8608 -21.1975 -0.936452 149 -21.3754 -20.6555 -0.935832 131 -20.4135 -21.5405 -0.933991 193 -20.2854 -21.5406 -0.930603 183 -21.7344 -20.0334 -0.930096 113 -21.8256 -19.928 -0.929941 113 -21.8599 -19.8339 -0.928477 113 -21.9073 -19.7517 -0.927706 113 -21.2786 -20.4333 -0.927207 123 -20.1493 -21.5313 -0.926754 186 -21.9484 -19.6642 -0.926627 113 -22.0199 -19.542 -0.925549 112 -22.0706 -19.4634 -0.925009 112 -19.9769 -21.5499 -0.92275 197 -20.9108 -19.7677 -0.899253 110 -20.7682 -19.8191 -0.896636 110 -24.5553 -21.221 -0.837835 59 -24.4855 -21.2954 -0.837706 74 -24.3834 -21.4092 -0.837642 75 -24.3085 -21.4791 -0.83732 104 -24.2036 -21.5221 -0.835709 117 -24.8033 -20.6974 -0.832998 58 -23.5299 -21.2556 -0.81379 57 -23.3669 -21.2419 -0.809599 57 -23.6138 -19.8295 -0.785612 56 -23.4492 -19.817 -0.781293 56 -23.2568 -19.8429 -0.777103 56 -23.1867 -19.9093 -0.776781 56 -21.7347 -20.1968 -0.748031 61 -20.2225 -20.9116 -0.728692 53 -21.1474 -19.7744 -0.724886 86 -20.1948 -20.7519 -0.724374 53 -20.961 -19.7859 -0.72076 76 -20.2112 -20.5737 -0.720636 123 -20.8263 -19.7828 -0.717537 72 -20.6861 -19.7734 -0.714056 89 -20.587 -19.8651 -0.713799 121 -20.46 -19.867 -0.710898 96 -20.2375 -20.0879 -0.71077 128 -20.292 -19.9531 -0.708964 136 -20.3532 -19.8878 -0.708899 111 -23.5619 -19.8315 -0.626095 66 -23.3682 -19.7944 -0.621436 66 -23.1864 -19.829 -0.618293 66 -23.074 -19.8588 -0.616506 76 -22.9404 -19.8697 -0.61396 65 -22.7798 -19.8563 -0.610438 65 -22.5598 -19.8526 -0.605887 65 -22.2151 -19.7986 -0.597923 96 -22.0412 -19.831 -0.594998 105 -21.8868 -19.817 -0.591639 122 -21.7357 -19.8049 -0.588389 134 -21.5582 -19.8301 -0.585301 135 -20.1183 -21.1848 -0.583249 93 -20.1696 -21.1057 -0.582652 111 -21.4048 -19.8136 -0.581942 154 -21.2663 -19.8099 -0.579125 63 -21.0901 -19.7701 -0.574899 63 -19.9972 -20.7945 -0.573333 255 -20.8862 -19.7649 -0.570781 78 -19.996 -20.5983 -0.569485 255 -20.0103 -20.484 -0.567534 255 -20.6229 -19.7631 -0.565581 111 -20.1043 -20.2595 -0.564987 123 -20.0072 -20.3526 -0.564933 255 -20.485 -19.817 -0.563901 148 -20.1014 -20.1298 -0.56244 146 -20.3682 -19.8283 -0.561843 161 -20.139 -20.0412 -0.561465 129 -20.2715 -19.8587 -0.560543 142 -20.1449 -19.9217 -0.559297 188 -24.2628 -19.889 -0.431831 157 -24.0784 -19.8645 -0.428609 191 -23.8914 -19.8365 -0.425306 212 -23.7961 -19.9476 -0.425266 107 -23.5149 -19.8377 -0.419434 119 -23.358 -19.8311 -0.416906 155 -23.0109 -19.8492 -0.411768 205 -22.8624 -19.8466 -0.409444 105 -22.7007 -19.8314 -0.406753 104 -22.2977 -19.7899 -0.400024 124 -22.1623 -19.7945 -0.398026 138 -21.9887 -19.8264 -0.395824 170 -21.8331 -19.8106 -0.393255 186 -21.6955 -19.8103 -0.391176 186 -20.2246 -21.2077 -0.389674 102 -21.5255 -19.8417 -0.389055 185 -21.1776 -20.0821 -0.387222 133 -21.3737 -19.8262 -0.386568 172 -21.2371 -19.9492 -0.386242 142 -20.1556 -21.0025 -0.385677 174 -21.2062 -19.795 -0.383632 142 -20.1779 -20.8283 -0.383433 171 -20.1749 -20.6945 -0.381434 130 -20.1572 -20.5468 -0.379028 114 -20.7502 -19.8003 -0.376944 179 -20.1779 -20.3748 -0.376825 99 -20.6605 -19.8391 -0.37617 186 -20.1868 -20.256 -0.375234 154 -20.239 -20.1812 -0.374908 130 -20.3926 -20.0174 -0.374784 99 -20.2938 -20.109 -0.374662 99 -20.5065 -19.8777 -0.374457 184 -20.3896 -19.8889 -0.372908 171 -24.1371 -19.837 -0.283896 157 -23.9606 -19.8185 -0.281568 171 -23.7998 -19.8119 -0.279554 158 -23.6373 -19.993 -0.279429 143 -23.5729 -19.812 -0.276817 160 -23.2209 -19.7668 -0.27213 167 -23.0455 -19.8057 -0.270431 169 -22.8712 -19.7813 -0.268103 164 -22.7153 -19.7717 -0.266152 166 -22.5582 -19.76 -0.26417 164 -22.3704 -19.7827 -0.262188 162 -22.2095 -19.7653 -0.260112 159 -22.0608 -19.7576 -0.258287 160 -21.8784 -19.781 -0.256399 157 -21.7303 -19.7716 -0.254575 159 -21.5854 -19.7643 -0.252813 157 -20.2078 -21.1154 -0.252191 87 -21.4156 -19.7952 -0.251177 169 -20.1944 -20.9036 -0.249641 149 -21.2756 -19.7903 -0.24951 149 -21.1286 -19.7779 -0.247685 151 -20.1693 -20.7469 -0.247596 153 -21.0052 -19.7866 -0.246364 154 -20.1546 -20.602 -0.245802 156 -20.8377 -19.8152 -0.24476 158 -20.1741 -20.4286 -0.244071 152 -20.7132 -19.8211 -0.243407 161 -20.1775 -20.3042 -0.242717 148 -20.586 -19.8237 -0.241991 165 -20.1888 -20.1884 -0.241553 148 -20.4378 -19.8676 -0.240796 167 -20.2067 -20.0799 -0.240545 151 -20.3438 -19.901 -0.240104 180 -20.2669 -19.9508 -0.23979 153 -24.2009 -19.8923 -0.0782145 191 -24.0166 -19.8674 -0.0767752 200 -23.8296 -19.839 -0.0752996 201 -23.6273 -19.8596 -0.0740061 201 -23.4457 -19.8329 -0.0725851 215 -23.2753 -19.8143 -0.0712917 206 -23.0741 -19.8311 -0.0699982 196 -22.924 -19.8276 -0.0689417 208 -22.7651 -19.8154 -0.0677758 208 -22.5844 -19.8458 -0.0667192 204 -22.4246 -19.8305 -0.0655351 204 -22.2741 -19.8223 -0.0644603 186 -22.1314 -19.82 -0.0634767 194 -20.9244 -21.0537 -0.0632459 113 -21.9518 -19.8462 -0.0624201 196 -20.8887 -20.8859 -0.0619334 112 -21.811 -19.8437 -0.0614546 201 -20.8649 -20.7313 -0.0607849 112 -21.6778 -19.8473 -0.0605803 186 -20.9054 -20.5766 -0.0600556 112 -20.93 -20.4716 -0.059545 111 -21.4769 -19.85 -0.0592504 174 -20.9426 -20.3555 -0.0588886 111 -21.3471 -19.8547 -0.0584125 183 -20.9994 -20.2191 -0.0583961 111 -21.0369 -20.1282 -0.0580677 111 -21.071 -20.0344 -0.0577029 111 -21.1652 -19.9349 -0.0577025 111 -21.2204 -19.8614 -0.057611 152 -24.1426 -19.9616 0.121104 153 -23.9413 -19.9223 0.121596 188 -23.7681 -19.905 0.121989 159 -23.5907 -19.883 0.122399 157 -23.4815 -19.981 0.122453 112 -23.3449 -20.119 0.122491 112 -23.1801 -20.2965 0.122512 121 -23.2 -20.1856 0.122671 111 -23.2955 -19.9494 0.122896 111 -22.3852 -21.1438 0.123237 112 -22.4254 -20.9169 0.12358 111 -22.4831 -19.938 0.124589 109 -22.3322 -19.9931 0.124797 109 -21.528 -19.9553 0.127145 107 -21.775 -19.9592 0.301874 88 -21.7166 -20.0316 0.301893 88 -22.3294 -20.0206 0.303337 89 -22.4101 -19.9663 0.303415 89 -23.3574 -20.0344 0.305869 91 -23.4597 -19.9946 0.306037 120 -23.2887 -21.0146 0.307794 93 -22.3035 -20.211 0.481691 99 -22.2547 -20.2945 0.481874 99 -22.1691 -20.4086 0.482002 99 -22.4011 -20.1716 0.482113 99 -22.1548 -20.5243 0.482625 100 -22.5195 -20.1505 0.482791 100 -22.1532 -20.6524 0.483412 100 -22.7071 -20.1263 0.483928 100 -22.1139 -20.8113 0.484145 100 -22.0731 -20.9041 0.484456 100 -22.8573 -20.1314 0.484991 100 -23.0259 -20.1516 0.486274 101 +unknow 0.87517 1 0 43 -46.5972 25.9299 -0.631305 146 -46.5122 25.6914 -0.628315 146 -46.4034 25.4413 -0.624917 145 -46.3804 25.145 -0.622368 145 -46.3113 24.9195 -0.619724 145 -46.2659 24.7079 -0.617521 144 -46.2002 24.4865 -0.614972 144 -46.1433 24.1784 -0.61192 144 -46.0115 23.9253 -0.608238 143 -49.7957 24.2763 -0.29747 192 -47.7198 24.2945 -0.280617 194 -49.9723 24.2285 0.0549931 184 -49.4972 24.1902 0.0562066 183 -47.9015 24.2545 0.0600322 235 -47.4611 24.3129 0.0610322 244 -46.7575 24.3243 0.0627265 177 -46.0282 25.4345 0.0630468 231 -46.0079 25.2349 0.0633587 252 -46.384 24.4082 0.0635241 243 -45.9904 25.0376 0.0636596 254 -45.9844 24.8473 0.0639223 255 -46.1251 24.4572 0.064087 255 -46.0428 24.5992 0.0641032 255 -46.1448 24.5657 0.375507 244 -46.0391 24.7885 0.375546 246 -46.0155 24.9626 0.375746 239 -46.3013 24.4626 0.375799 190 -46.0229 25.154 0.376063 231 -46.0417 25.3524 0.376425 227 -46.6154 24.4413 0.376666 220 -46.0529 25.642 0.37691 221 -46.1326 25.8765 0.377505 183 -46.9787 24.3501 0.377572 217 -47.3325 24.345 0.378582 229 -47.6867 24.3379 0.379592 208 -48.1152 24.2712 0.380731 190 -49.8618 24.2734 0.385799 150 -46.8606 24.8626 0.692049 168 -47.1098 24.6168 0.693021 162 -46.8803 25.1569 0.693478 162 -46.9172 25.3669 0.694688 162 -47.0181 25.6128 0.696575 163 -47.3493 25.9867 0.700881 164 +unknow 0.964774 1 0 129 -22.9804 25.0459 -1.31724 160 -23.0142 24.9252 -1.31428 191 -23.0529 24.8104 -1.31167 190 -23.1121 24.6403 -1.3079 183 -23.1592 24.5356 -1.30593 189 -23.188 24.4121 -1.30278 185 -23.2626 24.2608 -1.30018 182 -23.2777 24.1243 -1.29623 180 -23.3143 24.011 -1.29372 180 -26.7148 25.6472 -1.21817 156 -26.5549 25.7352 -1.21609 155 -26.4296 25.7752 -1.2137 154 -26.8571 25.0637 -1.20669 157 -26.8918 24.9384 -1.20438 157 -26.6322 24.542 -1.18666 170 -24.1266 25.6921 -1.14923 153 -23.8182 25.5236 -1.13636 153 -23.7121 25.5705 -1.1349 145 -23.4941 25.5759 -1.12935 131 -24.0225 24.0967 -1.10223 128 -23.8595 24.1598 -1.09954 128 -23.572 24.1704 -1.09206 127 -23.638 24.0862 -1.09152 127 -26.2597 24.2925 -0.944811 74 -26.0763 24.2755 -0.940105 64 -25.8334 24.2777 -0.934432 64 -25.6334 24.2421 -0.928952 63 -25.4325 24.2041 -0.923408 63 -25.2437 24.1761 -0.91838 63 -25.0346 24.2032 -0.914125 63 -24.8451 24.1717 -0.909033 62 -24.6719 24.1546 -0.904649 62 -24.4553 24.1695 -0.900008 62 -24.297 24.1645 -0.896269 62 -24.0767 24.0966 -0.889693 92 -23.8616 24.1076 -0.885052 89 -23.6581 24.0528 -0.879185 81 -22.8438 24.8112 -0.878802 61 -23.5181 24.0613 -0.87622 100 -22.9046 24.6433 -0.876159 61 -22.8918 24.4749 -0.871903 73 -22.9096 24.3403 -0.86913 100 -23.1689 24.0797 -0.868807 76 -22.9978 24.2046 -0.867905 96 -23.0585 24.1163 -0.867195 89 -26.2773 24.2649 -0.760749 108 -26.0605 24.2166 -0.755548 85 -25.8616 24.2597 -0.752406 75 -25.6574 24.22 -0.747639 75 -25.4624 24.1875 -0.743196 75 -25.2823 24.1678 -0.739295 74 -25.0445 24.1672 -0.734636 74 -24.8452 24.1259 -0.729977 74 -24.6778 24.1143 -0.72651 73 -24.4515 24.1194 -0.72223 73 -24.2656 24.2386 -0.720931 73 -24.2977 24.1185 -0.719251 73 -23.8655 24.0643 -0.709932 85 -23.759 24.1078 -0.708741 72 -22.8358 24.7532 -0.704139 72 -23.5643 24.0608 -0.704136 72 -22.8814 24.5692 -0.701321 72 -23.3324 24.0495 -0.699531 79 -23.2332 24.0982 -0.69861 72 -22.8752 24.4082 -0.698016 87 -23.0924 24.1032 -0.696064 71 -22.8983 24.2794 -0.695902 88 -23.0001 24.1582 -0.695414 71 -26.2144 24.293 -0.520865 122 -25.9594 24.2852 -0.51695 121 -25.7562 24.2475 -0.513403 121 -25.5652 24.2197 -0.510181 120 -25.3423 24.2363 -0.507123 120 -25.168 24.2216 -0.50435 119 -24.9768 24.1894 -0.501088 119 -24.7903 24.1603 -0.497948 118 -24.5721 24.1746 -0.494972 118 -24.4064 24.1631 -0.492403 117 -24.2127 24.1226 -0.489018 117 -24.0169 24.1543 -0.486653 117 -22.9456 25.1228 -0.485884 238 -23.8551 24.1429 -0.484166 116 -22.9269 24.9447 -0.482947 255 -23.6824 24.1193 -0.481352 116 -23.5001 24.1605 -0.479354 115 -22.8652 24.7214 -0.478746 255 -22.9582 24.5886 -0.478052 163 -23.3434 24.1509 -0.476989 115 -23.027 24.3538 -0.475522 168 -23.1249 24.2277 -0.475032 219 -23.1981 24.152 -0.47495 115 -26.2667 24.2898 -0.355197 111 -26.0511 24.3191 -0.353026 104 -25.8493 24.283 -0.35032 104 -25.6466 24.2445 -0.347583 104 -25.4121 24.2504 -0.344972 103 -25.2363 24.2345 -0.342801 103 -25.035 24.1926 -0.340064 102 -24.8529 24.1679 -0.337736 102 -24.6389 24.1866 -0.335534 102 -24.4562 24.1584 -0.333174 101 -24.298 24.1533 -0.33135 101 -24.1021 24.1853 -0.329525 101 -23.9289 24.1628 -0.327355 100 -22.9308 25.0497 -0.326636 100 -23.7786 24.1623 -0.325687 100 -23.6143 24.2225 -0.324555 100 -22.9133 24.873 -0.324401 100 -22.9261 24.7305 -0.322891 99 -23.438 24.193 -0.32229 99 -22.9782 24.5535 -0.321411 99 -23.3092 24.2118 -0.321095 99 -23.1507 24.275 -0.320088 99 -22.984 24.4054 -0.319774 99 -23.0249 24.2953 -0.318956 99 -24.8857 24.726 -0.112394 131 -24.9063 24.5915 -0.111664 131 -23.6948 25.5485 -0.110249 131 -23.6521 25.263 -0.10808 130 -23.6051 25.0547 -0.106403 129 -23.9046 24.2804 -0.103211 128 -23.7703 24.3727 -0.102956 128 -24.2115 25.2387 0.111168 125 -24.1995 24.9892 0.111683 125 -24.2235 24.8572 0.111896 124 -24.2693 24.7481 0.112023 124 -24.4918 24.4317 0.11221 124 -24.398 24.4915 0.112275 124 -24.29 24.5367 0.112395 124 +unknow 0.919894 1 0 77 -27.6951 -21.2979 -0.7383 130 -27.5065 -21.4988 -0.737596 111 -27.738 -21.1926 -0.737487 123 -27.7997 -21.1018 -0.737324 93 -27.5644 -21.4049 -0.737271 131 -27.854 -20.9369 -0.735806 91 -28.0794 -20.4916 -0.733529 74 -28.1145 -20.3822 -0.732553 74 -28.1589 -20.2798 -0.731903 74 -28.2443 -20.1399 -0.731577 74 -28.2618 -20.0188 -0.73006 74 -28.318 -19.9253 -0.729842 74 -28.3526 -19.8168 -0.728921 74 -28.4193 -19.6648 -0.728054 74 -28.5208 -19.4712 -0.727348 74 -28.4496 -19.5539 -0.727024 74 -26.6008 -21.5422 -0.719123 145 -26.2022 -21.5626 -0.711105 137 -26.0233 -21.5531 -0.707204 95 -26.8054 -19.7575 -0.693923 71 -26.5938 -19.731 -0.688884 71 -26.4804 -19.7762 -0.687151 81 -29.4272 -19.8102 -0.515466 121 -29.1762 -19.7745 -0.510817 120 -29.0085 -19.8609 -0.508982 134 -28.8983 -19.919 -0.5078 120 -28.6533 -19.883 -0.503273 119 -28.3105 -19.8431 -0.497075 118 -28.0913 -19.8212 -0.49316 118 -27.8871 -19.8085 -0.489612 117 -27.6508 -19.7714 -0.485249 126 -27.3969 -19.7855 -0.481212 133 -27.194 -19.7691 -0.477664 149 -26.9931 -19.7527 -0.474157 143 -25.9969 -20.9734 -0.473225 129 -26.7631 -19.7786 -0.470691 132 -26.5629 -19.7598 -0.467184 133 -25.9293 -20.4521 -0.465516 255 -25.9903 -20.368 -0.465434 165 -26.2491 -19.8483 -0.463148 193 -26.1001 -19.9946 -0.462537 182 -26.0261 -20.0679 -0.462252 255 -26.9138 -19.7426 -0.317496 98 -26.687 -19.7705 -0.314884 98 -26.4708 -19.7396 -0.311864 105 -25.8908 -20.3394 -0.310357 142 -25.9754 -20.078 -0.308877 97 -26.0755 -19.895 -0.308373 204 -26.005 -19.9707 -0.308216 225 -29.3518 -19.8163 -0.115451 132 -29.0546 -19.7486 -0.112864 131 -28.8179 -19.7867 -0.111279 131 -28.5928 -19.7645 -0.109475 130 -28.3813 -19.7501 -0.107817 130 -28.1603 -19.7939 -0.106397 129 -27.9381 -19.7689 -0.104611 128 -27.731 -19.7532 -0.10299 128 -27.5258 -19.7375 -0.101387 127 -27.3046 -19.7743 -0.0999474 127 -27.0873 -19.7467 -0.0981984 126 -26.8994 -19.7393 -0.0967775 126 -26.4146 -20.1603 -0.0955404 159 -26.6407 -19.7431 -0.094901 125 -26.3727 -19.9973 -0.0943373 143 -26.5145 -19.7788 -0.0941725 125 -26.2084 -20.1334 -0.0939008 124 -26.007 -20.3053 -0.0934096 133 -26.0913 -20.174 -0.0932816 124 -26.3483 -19.7839 -0.0929884 130 -28.0645 -19.7757 0.112892 123 -27.2721 -19.709 0.31518 99 -27.1326 -19.9345 0.315244 99 -28.5779 -19.9113 0.319006 102 -28.7882 -19.8571 0.319465 102 -28.9956 -19.8662 0.320035 103 -29.2165 -19.8831 0.320657 103 -29.4458 -19.837 0.321187 104 +unknow 0.916493 1 0 30 -38.2164 24.3115 -0.715701 149 -37.9647 24.3193 -0.71146 149 -37.7187 24.4133 -0.708279 148 -37.5245 24.4553 -0.705425 148 -37.2468 24.4415 -0.700532 147 -36.8878 24.4556 -0.694578 146 -36.5612 24.405 -0.688461 216 -36.2735 24.3782 -0.683282 182 -38.2592 24.2984 -0.50539 128 -37.9755 24.2858 -0.50152 170 -37.6121 24.3037 -0.496864 184 -37.3245 24.2842 -0.4929 204 -37.054 24.2741 -0.48925 166 -36.7275 24.3082 -0.485255 194 -36.4663 24.3002 -0.481763 186 -36.2006 24.2875 -0.478176 182 -35.9087 24.3377 -0.47481 171 -38.2811 24.5345 -0.207014 164 -38.273 24.2757 -0.205683 185 -37.671 24.3111 -0.201238 202 -37.3897 24.2965 -0.199015 176 -37.1558 24.311 -0.197303 161 -36.859 24.3658 -0.195317 160 -36.5591 24.3331 -0.192876 159 -36.2763 24.3099 -0.190617 159 -35.9924 24.3663 -0.188759 158 -37.0073 24.3361 0.0857173 162 -36.759 24.3385 0.0862802 153 -36.4877 24.3239 0.0869196 152 -36.192 24.3737 0.087515 152 +unknow 0.919387 1 0 51 -41.4026 26.1535 -0.790698 159 -41.4049 25.9734 -0.788781 159 -43.2774 24.3482 -0.573568 138 -43.0024 24.3715 -0.569981 138 -41.8396 24.9433 -0.558688 160 -40.4691 25.5256 -0.545098 157 -40.4441 25.3324 -0.543147 179 -40.5409 25.1279 -0.542737 164 -40.7824 24.4863 -0.540722 149 -40.4647 24.9049 -0.539874 154 -40.5496 24.52 -0.537859 151 -40.2716 24.6117 -0.534871 151 -41.0517 24.6121 -0.22884 171 -40.6796 24.5633 -0.225706 170 -40.3466 24.6225 -0.223392 169 -40.1173 24.656 -0.221771 169 -39.8292 24.9121 -0.22077 169 -39.9138 24.7041 -0.220423 169 -43.1298 24.2752 0.071509 181 -42.8377 24.2882 0.0721867 167 -42.4834 24.3524 0.0729406 167 -42.2041 24.3686 0.07358 166 -41.9061 24.3723 0.0742796 165 -41.577 24.4437 0.074957 165 -41.3074 24.4599 0.075569 164 -40.9951 24.4491 0.0763178 163 -40.6884 24.4396 0.0770501 163 -40.407 24.5303 0.0775799 162 -39.9078 25.181 0.0778025 255 -39.7803 25.3634 0.0778293 255 -40.2137 24.5862 0.0779514 162 -39.8921 24.8219 0.0783607 209 -40.0035 24.6305 0.0783776 161 -40.9541 24.522 0.360807 134 -41.2064 24.4973 0.361468 134 -41.5105 24.5018 0.362322 135 -41.7824 24.4855 0.363053 135 -42.1413 24.4296 0.363966 136 -42.4398 24.4247 0.364795 136 -42.7196 24.4072 0.365552 137 -40.2595 24.8895 0.639666 147 -40.2066 25.0317 0.639941 148 -40.4429 24.7402 0.640382 148 -40.2209 25.2164 0.640948 148 -40.7767 24.7689 0.643131 148 -40.3364 25.5545 0.643495 149 -40.3335 25.7306 0.644338 149 -40.3769 25.9373 0.645694 149 -41.671 24.6895 0.649784 150 -42.4524 24.5262 0.65521 152 -42.616 25.7045 0.661989 154 +unknow 0.896171 1 0 33 -43.5685 -21.0205 -0.233512 173 -43.6383 -20.7171 -0.232891 172 -43.6576 -20.4747 -0.232107 172 -43.7072 -20.3307 -0.231961 172 -43.7618 -20.189 -0.231869 172 -47.4058 -20.1285 0.0659753 174 -44.3877 -20.5171 0.0730842 167 -44.4319 -20.3684 0.0731449 166 -44.492 -20.2271 0.0731563 166 -44.3853 -20.2544 0.364181 227 -44.3233 -20.3946 0.364187 185 -44.2899 -20.5481 0.364296 243 -44.2885 -20.8017 0.364639 178 -44.2915 -20.9733 0.364884 206 -44.3229 -21.1589 0.365233 137 -44.3991 -21.4529 0.365866 137 -45.6503 -20.0575 0.367657 178 -46.113 -20.0023 0.368958 154 -46.6348 -20.0551 0.370576 140 -47.0876 -20.075 0.371949 141 -47.6793 -20.0625 0.373696 142 -44.6823 -20.4696 0.656274 152 -44.6251 -20.6133 0.656347 152 -44.5728 -20.7593 0.656475 152 -44.5504 -21.0049 0.657244 152 -45.9937 -20.0298 0.665605 166 -46.4623 -20.0602 0.669655 156 -46.9535 -20.0972 0.673926 157 -47.4808 -20.0584 0.678233 158 -47.2708 -20.471 1.02076 127 -47.3473 -20.6811 1.02319 138 -46.6241 -20.3316 1.27006 157 -46.3849 -21.0126 1.27128 157 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_5.pose b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_5.pose new file mode 100644 index 00000000000..1de3b81eaa8 --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_5.pose @@ -0,0 +1 @@ +11992 588.719204 33.330361 45.010357 40.747331 -0.002134 -0.010937 -0.639935 0.768348 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_5.seg b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_5.seg new file mode 100644 index 00000000000..56d8100b690 --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_5.seg @@ -0,0 +1,30 @@ +unknow 0.761756 1 0 29 55.7929 -22.6044 -1.73082 142 55.8117 -22.4082 -1.72902 162 55.9488 -21.9545 -1.72774 231 55.9055 -22.2219 -1.42006 134 55.737 -22.5615 -1.41924 204 55.802 -22.384 -1.41908 164 55.8883 -21.7082 -1.41455 159 55.6543 -23.6294 -1.02331 255 55.7134 -23.3453 -1.02217 255 55.731 -23.1472 -1.02095 255 55.7572 -22.9529 -1.01994 255 55.824 -22.6734 -1.01904 255 55.8616 -22.4845 -1.01831 255 55.8948 -22.2941 -1.0175 255 55.9441 -22.1103 -1.01706 255 56.0439 -21.845 -1.01698 255 56.8727 -24.5392 -0.76504 163 56.9313 -23.406 -0.758995 163 56.0246 -23.2388 -0.744826 191 55.9242 -22.4795 -0.738868 160 55.8131 -24.9642 -0.347991 207 55.6785 -25.2195 -0.347824 240 56.4365 -23.1442 -0.346713 206 55.7194 -24.7126 -0.346286 206 55.7364 -24.5109 -0.34569 206 55.7964 -23.8087 -0.343666 213 56.029 -23.1831 -0.343422 205 55.8804 -23.5339 -0.343397 232 55.9448 -23.3544 -0.34331 205 +unknow 0.772409 1 0 14 55.9609 -11.5956 -1.63277 126 55.9187 -11.4038 -1.6302 94 55.7857 -11.1943 -1.62466 94 55.7719 -10.555 -1.6203 94 55.7517 -10.3699 -1.61856 94 55.5362 -10.963 -1.61533 94 55.9087 -11.3808 -1.33618 111 55.7716 -11.1705 -1.33142 111 55.694 -10.3382 -1.32511 111 55.6475 -10.5105 -1.32472 111 55.5769 -10.6781 -1.32369 156 56.045 -10.4747 -0.953315 179 55.7054 -10.5926 -0.946957 178 55.6012 -10.7539 -0.945487 226 +unknow 0.501531 1 0 22 53.7542 5.15211 -1.87119 189 53.6866 4.97551 -1.86795 189 53.5745 4.79547 -1.86301 188 55.4519 5.23475 -1.58637 92 55.271 5.04245 -1.57998 140 55.4651 5.25732 -1.30022 109 54.7089 5.01264 -1.27921 255 54.4037 4.81254 -1.27049 152 56.5278 5.46648 -0.94911 179 55.9935 5.44434 -0.676356 152 55.7256 5.24172 -0.671857 226 54.8854 4.98919 -0.658338 220 54.6752 4.71054 -0.654655 177 56.3219 5.52242 -0.307266 195 55.5406 5.26935 -0.299968 193 54.9196 5.03606 -0.294144 255 55.054 5.08183 0.0566957 183 54.7927 4.88425 0.0574552 255 54.8969 4.97859 0.385751 249 54.7019 4.86257 0.710227 201 54.0323 5.03773 1.06541 160 54.5439 4.876 1.35275 166 +unknow 0.842553 1 0 44 53.0494 -25.8919 -1.69314 122 52.8191 -25.5745 -1.682 150 52.8326 -25.2745 -1.67821 127 52.8323 -25.0707 -1.67537 136 52.8547 -24.8783 -1.67338 151 52.8843 -24.5885 -1.67029 155 53.9173 -22.0428 -1.66802 118 52.8814 -24.3854 -1.66746 151 52.8778 -24.1826 -1.66463 154 52.9146 -23.8987 -1.66193 158 52.911 -23.6972 -1.65916 158 52.934 -23.5082 -1.65736 135 52.9198 -23.3031 -1.65427 128 52.9905 -23.0368 -1.65292 121 53.3381 -22.1002 -1.65146 95 53.0075 -22.8465 -1.65099 171 53.1836 -22.2322 -1.64849 95 53.0416 -22.3689 -1.64598 176 52.9756 -25.5259 -1.3833 114 52.8044 -25.7507 -1.38178 114 52.8044 -25.0357 -1.3734 171 52.7923 -24.8271 -1.3707 193 52.8417 -24.5468 -1.3687 157 52.8223 -24.3363 -1.36583 154 52.8258 -24.137 -1.36367 202 52.8861 -23.8639 -1.3621 169 52.8769 -23.6601 -1.35962 177 52.887 -23.4654 -1.35773 177 52.9019 -23.2734 -1.356 177 52.945 -22.9951 -1.35405 143 53.1467 -22.3914 -1.35265 112 52.9634 -22.6086 -1.35038 174 52.9483 -25.6938 -0.990477 183 52.9678 -25.3956 -0.9882 183 52.9606 -25.1879 -0.986248 183 52.9707 -24.989 -0.984703 183 52.9783 -24.7895 -0.983118 183 53.0328 -24.511 -0.981737 182 53.0638 -24.122 -0.979014 182 53.1263 -23.1506 -0.972144 181 52.9635 -23.3773 -0.97096 181 52.8295 -23.5168 -0.969613 181 53.065 -25.4105 -0.716226 157 53.1465 -23.6262 -0.705666 156 +unknow 0.939705 1 0 35 49.8972 -28.9899 -1.65045 103 50.002 -28.7365 -1.64929 95 50.0076 -28.3234 -1.64285 143 50.0144 -28.1201 -1.63983 156 50.066 -27.8395 -1.63687 152 50.0709 -27.6367 -1.63384 143 51.2305 -25.4049 -1.63362 94 50.1302 -26.4494 -1.61737 199 50.6241 -25.4024 -1.6161 94 50.1564 -26.2622 -1.61531 148 50.1198 -26.0428 -1.611 145 50.3532 -25.4649 -1.6092 130 50.2212 -25.5966 -1.60733 241 49.9865 -29.229 -1.35888 161 49.9277 -28.9844 -1.35418 159 49.9281 -28.4625 -1.34714 168 49.9355 -28.2592 -1.3446 212 49.9879 -27.9786 -1.34212 206 49.9794 -27.768 -1.33914 207 51.198 -25.366 -1.33815 111 49.9877 -27.5674 -1.33671 175 50.7205 -25.4276 -1.32732 111 50.1394 -26.4309 -1.32574 111 50.371 -25.4505 -1.31915 181 50.0931 -25.8059 -1.31681 197 50.2053 -25.5651 -1.31655 236 50.0993 -27.7091 -0.957814 237 50.1387 -27.5256 -0.956717 211 50.7971 -25.9454 -0.953522 179 50.4344 -26.0606 -0.948021 178 50.259 -26.3714 -0.947771 250 50.3061 -26.195 -0.946959 178 51.1385 -28.777 -0.713724 157 50.1645 -28.9594 -0.701844 156 50.191 -28.6601 -0.699868 155 +unknow 0.90013 1 0 49 47.9281 30.1869 -2.33438 246 47.9644 29.478 -2.31893 199 48.0447 29.2163 -2.31587 186 47.9858 28.9743 -2.30797 207 47.8727 28.701 -2.29728 213 48.0605 28.3028 -2.29539 224 47.937 28.4333 -2.2936 255 46.3224 30.0977 -2.27149 184 46.2173 28.6036 -2.23152 181 45.9543 28.6408 -2.22237 209 45.6048 28.9226 -2.21583 203 48.9878 28.4356 -1.97358 196 48.2587 28.5217 -1.95102 194 47.8734 28.4975 -1.93778 193 47.5522 28.5092 -1.92738 193 47.2519 28.5314 -1.91791 192 46.8712 28.604 -1.90683 191 45.8369 28.6697 -1.87426 189 45.5985 28.9207 -1.87165 189 45.6637 28.7614 -1.87049 189 49.2138 28.4748 -1.62434 149 48.7511 28.4117 -1.61042 155 48.3997 28.4108 -1.60063 166 48.004 28.4833 -1.59084 165 47.6741 28.4903 -1.58182 181 47.3276 28.4852 -1.57215 179 47.0054 28.4927 -1.56339 173 46.615 28.5572 -1.55373 160 45.6713 29.5826 -1.54564 135 46.287 28.5564 -1.54471 158 45.6498 29.3653 -1.54125 126 46.0867 28.6331 -1.54052 239 45.7067 29.0983 -1.53815 137 45.8497 28.7861 -1.53666 122 45.7286 28.9108 -1.53551 176 49.049 28.4033 -1.32698 160 48.7609 28.4415 -1.32075 156 48.404 28.4377 -1.31236 190 48.0597 28.541 -1.30576 110 47.7158 28.5401 -1.29775 109 46.6643 28.6129 -1.27442 108 46.7901 28.3875 -1.27414 108 48.5704 28.6598 -0.941656 178 47.3233 29.8625 -0.932769 177 47.2414 29.5004 -0.927422 199 47.2047 29.2716 -0.924319 238 47.4536 28.7083 -0.922633 248 47.213 29.0718 -0.922317 235 47.2846 28.8094 -0.920762 239 +unknow 0.900977 1 0 41 41.7775 18.8912 -2.11147 108 41.7947 18.7411 -2.10914 108 41.6982 18.5408 -2.10054 108 41.6283 18.3534 -2.09346 107 41.5934 18.1045 -2.08678 107 41.5308 17.9224 -2.0802 107 41.4988 17.7541 -2.07534 107 44.4836 20.0665 -1.98195 167 42.1286 18.8435 -1.86295 159 42.0196 18.6364 -1.85469 159 42.1798 18.1551 -1.85261 159 42.1042 18.2796 -1.85172 159 42.0411 18.4093 -1.85145 159 44.4805 20.1564 -1.67252 174 42.057 18.8215 -1.56623 166 41.9058 18.5961 -1.55737 211 41.8908 18.4322 -1.55429 255 42.0831 17.7332 -1.55042 255 41.9751 17.9211 -1.54942 255 41.8911 18.0411 -1.54827 255 44.4716 20.2379 -1.36634 83 42.2186 18.9715 -1.28332 80 42.1612 18.7866 -1.27919 228 41.9988 18.5562 -1.27139 143 42.0607 18.1901 -1.26848 123 42.1158 18.057 -1.26841 143 43.3894 19.5266 -1.08035 128 42.5411 18.9849 -1.05337 95 42.381 18.7542 -1.04687 164 42.4085 18.5279 -1.04508 133 42.4169 18.3732 -1.04361 159 42.6035 17.9003 -1.04322 129 42.4542 18.2312 -1.04301 162 42.5397 18.0309 -1.043 162 44.4591 19.9334 -0.785092 158 43.7859 19.5022 -0.545902 134 43.7418 19.2361 -0.54357 134 43.7525 19.077 -0.542717 134 43.7645 18.9189 -0.541895 134 43.9044 18.5715 -0.54176 134 43.8016 18.7719 -0.541514 134 +unknow 0.865155 1 0 45 33.7487 -9.79495 -1.76647 134 33.7689 -9.51392 -1.76322 136 33.7417 -8.71034 -1.74997 135 33.7183 -8.47875 -1.74548 168 33.3335 -9.50474 -1.73951 219 33.4226 -9.13397 -1.73873 250 33.3682 -9.00661 -1.7339 126 33.7068 -8.85411 -1.55388 85 33.7269 -8.57676 -1.55136 85 33.6553 -8.67118 -1.54903 85 33.6588 -8.44687 -1.54641 85 33.4273 -9.11815 -1.54367 133 33.3454 -9.26485 -1.54164 137 33.2008 -9.33703 -1.53557 160 33.1713 -9.44129 -1.53557 181 33.7315 -9.82032 -1.36745 156 33.672 -9.6884 -1.36323 171 33.7038 -9.52582 -1.36261 163 33.7636 -9.02936 -1.3593 174 33.6856 -8.89527 -1.35437 166 33.7157 -8.62056 -1.35258 125 33.6884 -8.72644 -1.35257 181 33.7155 -8.50777 -1.35132 125 33.2871 -9.18298 -1.34045 255 33.1638 -9.26125 -1.33606 206 33.6196 -8.85756 -1.12984 131 33.5875 -8.67998 -1.12691 130 33.572 -8.56352 -1.12522 130 33.2909 -9.1634 -1.12067 130 33.1176 -9.2276 -1.11489 232 33.64 -8.82109 -0.911726 62 33.553 -9.02399 -0.910691 62 33.2756 -9.06179 -0.902378 250 33.1996 -9.32178 -0.902245 159 33.1767 -9.20304 -0.900508 238 33.7965 -8.94173 -0.737868 74 33.8205 -8.83449 -0.737762 74 33.7489 -9.04267 -0.737324 245 33.1681 -9.27873 -0.723838 233 33.2226 -9.01322 -0.723356 219 33.1278 -9.15526 -0.721892 236 33.2966 -9.15476 -0.495236 166 33.2137 -9.24434 -0.494093 255 33.3338 -9.12531 -0.335061 102 33.2857 -9.22464 -0.334745 168 +unknow 0.903364 1 0 52 28.9794 -20.4231 -1.78383 131 29.516 -19.5096 -1.77979 123 28.8548 -20.4713 -1.77967 126 28.7611 -20.541 -1.77764 127 28.586 -20.7569 -1.77674 164 28.6381 -20.6576 -1.77585 164 28.5077 -20.8372 -1.77584 165 28.4044 -20.9677 -1.7755 168 28.3095 -21.0354 -1.77348 176 28.2433 -21.1243 -1.77348 140 32.1627 -19.8186 -1.70195 92 31.9561 -19.8299 -1.69335 91 31.7735 -19.855 -1.68617 100 29.2755 -21.5205 -1.62881 141 29.0183 -21.5426 -1.619 167 29.2762 -21.0987 -1.61628 88 28.9108 -20.9734 -1.59757 97 29.795 -19.6753 -1.59698 135 28.9219 -20.6365 -1.58807 87 29.4794 -19.6668 -1.58343 127 28.7781 -20.3975 -1.57513 95 32.4305 -19.8958 -1.49817 135 32.1637 -19.8717 -1.48741 135 31.9314 -19.8672 -1.47844 134 30.1363 -19.6838 -1.40604 129 29.8906 -19.6578 -1.39617 128 29.6061 -19.6714 -1.38585 168 28.6376 -20.5568 -1.37265 255 28.6608 -20.3696 -1.36862 255 28.7686 -20.1754 -1.36754 255 28.6593 -20.2334 -1.36503 255 32.2961 -19.9337 -1.25238 141 30.9479 -19.7101 -1.2038 137 30.6858 -19.6787 -1.19464 136 28.914 -21.0081 -1.16714 134 29.793 -19.7055 -1.16638 134 29.6616 -19.8201 -1.16461 134 28.8243 -20.8048 -1.15975 133 28.8749 -20.635 -1.15752 133 28.7653 -20.4203 -1.14928 132 29.085 -20.9398 -0.94574 64 29.0531 -20.7098 -0.940588 64 29.0462 -20.5677 -0.937755 64 31.5966 -19.8915 -0.802053 79 31.3922 -19.9006 -0.797506 78 29.77 -21.0404 -0.778164 89 29.8854 -19.8789 -0.762967 76 31.1898 -20.149 -0.375285 123 31.0308 -20.1847 -0.373494 108 30.7072 -20.458 -0.371605 125 30.8619 -20.2129 -0.371514 126 30.7613 -20.3548 -0.371418 125 +unknow 0.869436 1 0 70 27.8965 26.4769 -2.18334 129 25.0275 24.7586 -2.17884 103 25.071 24.6462 -2.17559 96 25.1383 24.5576 -2.17464 135 27.6574 26.4991 -2.17353 171 25.2223 24.4083 -2.17165 135 25.3348 24.2107 -2.16785 109 27.4763 26.4917 -2.16508 135 27.294 26.482 -2.15651 145 26.8632 26.4771 -2.13713 181 26.191 24.5497 -2.02376 115 25.9641 24.4909 -2.01097 118 27.3453 24.7411 -1.865 127 27.0766 24.7308 -1.85343 128 26.8475 24.6765 -1.84185 147 26.6072 24.6101 -1.82938 171 26.4115 24.5833 -1.82028 165 26.1368 24.5583 -1.80803 129 25.3712 25.2268 -1.80322 255 25.3922 25.0894 -1.79861 217 25.6277 24.7712 -1.79556 153 25.6378 24.6255 -1.79028 255 27.4825 24.7277 -1.66205 90 27.258 24.6813 -1.65204 90 26.9953 24.6762 -1.64203 89 26.7367 24.5947 -1.62959 102 26.472 24.6601 -1.62201 88 26.5156 24.5457 -1.61968 105 26.1007 24.5453 -1.60431 88 25.4121 24.9734 -1.59421 101 25.8594 24.4722 -1.59288 101 25.508 24.8325 -1.59269 87 25.5413 24.7092 -1.58955 87 25.5915 24.6026 -1.58762 87 25.7057 24.4803 -1.58752 107 27.1784 24.7044 -1.44003 131 26.9175 24.6997 -1.43124 131 26.7136 24.6675 -1.42352 130 26.4955 24.6206 -1.41491 129 26.2591 24.5549 -1.40513 144 25.5344 25.1883 -1.40138 155 25.6057 25.0216 -1.39841 145 25.6326 24.8909 -1.39518 145 25.9033 24.6061 -1.39508 217 25.8028 24.6653 -1.39365 192 25.6834 24.7838 -1.39347 153 27.8091 24.8269 -1.22747 139 27.6239 24.8181 -1.22193 139 27.3841 24.7587 -1.21353 138 26.122 25.6324 -1.20124 144 26.1665 25.4352 -1.19716 136 26.1556 25.2655 -1.1923 136 26.7793 24.5975 -1.19213 136 26.7005 24.6801 -1.19205 136 26.1974 25.1472 -1.1903 136 26.4874 24.7158 -1.18697 136 26.2417 24.9533 -1.18636 136 26.3935 24.7838 -1.18613 136 26.3141 24.8653 -1.18605 136 26.6664 25.986 -0.991801 66 26.804 24.8372 -0.969475 65 26.9791 26.0059 -0.806823 79 26.9871 25.7695 -0.802539 79 27.69 24.9829 -0.801972 79 26.9837 25.6048 -0.799394 79 26.984 25.4446 -0.796411 78 27.0054 25.305 -0.794242 78 27.2289 24.958 -0.792282 78 27.0554 25.1136 -0.791691 78 27.0974 24.9946 -0.790334 78 +unknow 0.96908 1 0 191 24.7672 -19.5579 -1.75264 158 24.8238 -19.4763 -1.75227 116 24.656 -19.6595 -1.75115 117 24.5181 -19.8027 -1.75003 118 24.3618 -19.9947 -1.75003 119 24.5739 -19.7206 -1.74954 151 24.4465 -19.8721 -1.74929 151 24.1989 -20.1167 -1.74705 119 24.2589 -20.038 -1.7468 155 23.6603 -20.5653 -1.73959 117 23.7188 -20.4856 -1.73909 106 23.5551 -20.604 -1.73623 147 23.4443 -20.7029 -1.73512 115 23.3657 -20.7645 -1.734 148 23.2825 -20.8218 -1.73251 115 23.0976 -20.9852 -1.73077 116 23.1545 -20.9045 -1.73002 146 23.0021 -21.0307 -1.72828 146 22.9154 -21.0839 -1.72654 116 22.701 -21.2182 -1.72244 118 22.5935 -21.2511 -1.71896 160 23.4025 -19.6409 -1.69003 123 23.1405 -19.7956 -1.68382 109 23.1685 -19.5686 -1.67599 149 23.0598 -19.6012 -1.67214 117 26.1097 -19.6591 -1.62799 132 25.923 -19.7107 -1.62137 137 25.691 -19.7904 -1.61372 111 25.7102 -19.6769 -1.61069 139 25.5407 -19.8672 -1.60968 96 25.2673 -19.7825 -1.59462 192 24.0231 -21.1706 -1.59068 126 25.1014 -19.7803 -1.58721 142 24.903 -19.7512 -1.57743 164 24.6973 -19.7786 -1.56934 181 23.3289 -21.2867 -1.56596 147 23.3779 -21.1972 -1.56461 144 23.4014 -21.085 -1.56135 209 24.4966 -19.7447 -1.55934 179 24.2886 -19.7034 -1.54878 181 23.5114 -20.5246 -1.54507 119 24.0826 -19.7254 -1.54058 179 23.9018 -19.7032 -1.53193 180 23.7198 -19.6789 -1.52317 180 23.4966 -19.6815 -1.51362 145 23.3186 -19.6575 -1.50508 160 22.9376 -19.7721 -1.49294 224 22.991 -19.6301 -1.49002 114 26.3246 -19.6685 -1.45299 156 26.1542 -19.6694 -1.44611 218 25.9022 -19.6715 -1.436 113 25.7008 -19.6459 -1.4271 111 25.563 -19.668 -1.42224 228 25.3108 -19.6644 -1.41203 143 25.1278 -19.649 -1.40425 162 24.9436 -19.6314 -1.39636 165 24.7645 -19.6165 -1.38877 161 24.5501 -19.6356 -1.38089 163 24.3966 -19.6386 -1.37492 164 24.2216 -19.6233 -1.36754 164 24.0145 -19.6435 -1.36006 164 23.8432 -19.6287 -1.35288 161 23.6677 -19.6091 -1.34539 149 22.3282 -20.9324 -1.33881 76 23.3389 -19.6475 -1.33387 162 22.2674 -20.6138 -1.32557 75 22.2775 -20.4289 -1.3196 75 22.9887 -19.6005 -1.3188 75 22.8537 -19.6721 -1.31597 223 22.6983 -19.6626 -1.3097 157 22.315 -20.0158 -1.30697 75 22.5732 -19.6787 -1.30545 183 22.3197 -19.8938 -1.30302 81 26.3794 -19.6375 -1.26644 229 26.0028 -19.6766 -1.25397 165 25.7595 -19.6204 -1.24375 132 25.6216 -19.6429 -1.23944 117 25.4039 -19.6669 -1.23235 224 25.219 -19.6509 -1.22536 204 25.0313 -19.6315 -1.21818 202 24.8596 -19.6235 -1.2119 208 24.6387 -19.6384 -1.20454 201 24.4739 -19.6333 -1.19862 209 24.3079 -19.6261 -1.19261 204 24.1067 -19.6521 -1.18633 213 23.9459 -19.6467 -1.18059 212 23.7638 -19.6228 -1.17359 207 22.3759 -21.0404 -1.16891 183 23.5959 -19.6093 -1.1674 176 22.3221 -20.8582 -1.16156 224 22.3069 -20.7133 -1.15663 196 23.2304 -19.6163 -1.15502 147 22.2822 -20.5605 -1.15116 197 23.1001 -19.631 -1.15099 158 22.311 -20.3933 -1.14703 213 22.9041 -19.6513 -1.14489 245 22.3142 -20.2681 -1.14335 207 22.7863 -19.6749 -1.14157 205 22.3199 -20.1458 -1.13986 212 22.664 -19.694 -1.13798 201 22.3639 -19.9951 -1.13681 213 22.5198 -19.7558 -1.13493 215 22.3878 -19.8903 -1.13448 214 22.4292 -19.8014 -1.13322 224 26.3705 -19.7331 -1.05913 125 26.0371 -19.6112 -1.04604 240 25.8268 -19.6441 -1.04035 237 25.6714 -19.6534 -1.0358 210 25.475 -19.6301 -1.02926 201 25.2514 -19.648 -1.02287 229 25.0716 -19.6347 -1.0171 205 24.8859 -19.6155 -1.01101 234 24.6822 -19.6441 -1.00555 204 24.491 -19.6178 -0.999156 236 24.3313 -19.6155 -0.994306 207 24.1579 -19.6011 -0.988763 211 23.9726 -19.6386 -0.984143 206 23.7936 -19.6171 -0.978292 209 22.4294 -21.0585 -0.975507 182 23.6458 -19.6203 -0.97398 208 22.3815 -20.8815 -0.969503 208 23.4429 -19.639 -0.968437 197 22.3694 -20.739 -0.965424 193 23.262 -19.6119 -0.962432 227 22.3698 -20.544 -0.960344 224 23.1241 -19.6202 -0.958582 208 22.3738 -20.4184 -0.957189 198 22.9571 -19.6652 -0.954809 209 22.3742 -20.2902 -0.95388 205 22.8256 -19.6771 -0.951268 216 22.3755 -20.1636 -0.950647 247 22.4316 -20.0233 -0.948647 191 22.6973 -19.6911 -0.94788 220 22.4451 -19.9089 -0.946107 218 22.5812 -19.7149 -0.945108 239 22.485 -19.8184 -0.944953 231 25.9383 -19.8142 -0.842674 59 25.6761 -19.7422 -0.834558 140 25.3043 -19.7748 -0.825731 86 25.3284 -19.6658 -0.824187 106 25.1069 -19.7481 -0.820191 81 24.8945 -19.7718 -0.815295 58 24.651 -19.7052 -0.807823 191 24.4752 -19.6912 -0.80312 184 24.3137 -19.6876 -0.798997 143 24.0984 -19.7021 -0.793908 179 23.9344 -19.6939 -0.789656 151 23.7569 -19.6735 -0.784824 148 22.4964 -20.9481 -0.781398 173 23.5687 -19.7058 -0.78083 153 23.4042 -19.6936 -0.776514 149 22.4343 -20.7593 -0.775795 255 23.246 -19.6858 -0.772455 149 22.3977 -20.5306 -0.769935 255 23.1018 -19.6887 -0.768976 149 22.3896 -20.3942 -0.766779 255 22.7648 -19.8379 -0.763885 103 22.4821 -20.1578 -0.763882 152 22.3438 -20.2246 -0.762014 255 22.5379 -19.9539 -0.760857 119 22.4736 -20.0233 -0.760792 143 22.5569 -19.8447 -0.75899 118 25.4245 -19.8252 -0.664063 69 24.4473 -20.0705 -0.64755 68 24.2101 -20.1316 -0.643652 82 24.2764 -19.8026 -0.639379 67 23.613 -19.8234 -0.6259 66 22.4906 -20.8949 -0.622317 111 22.4358 -20.7128 -0.61788 136 23.2262 -19.7484 -0.616589 114 22.4683 -20.5475 -0.615499 134 22.5925 -20.4019 -0.615339 114 22.6601 -20.2698 -0.614311 140 22.5002 -20.4472 -0.61431 171 23.0601 -19.7951 -0.613991 222 22.6923 -20.1706 -0.613175 91 22.7256 -20.0727 -0.612094 87 22.9328 -19.8112 -0.611663 164 24.9915 -19.8841 -0.442184 110 24.9071 -19.945 -0.441613 110 23.479 -21.1535 -0.435369 109 23.3649 -20.8524 -0.429547 108 23.4004 -20.7524 -0.428733 108 23.3739 -20.5982 -0.42625 107 23.7875 -19.9235 -0.42369 107 23.3211 -20.4221 -0.423075 107 23.3717 -20.2727 -0.421854 107 23.6085 -19.9003 -0.420595 203 23.3837 -20.1548 -0.42047 107 23.5047 -19.9395 -0.419494 138 24.1328 -20.4198 -0.288567 94 +unknow 0.854793 1 0 49 19.673 22.8258 -2.00419 200 19.5583 22.8375 -1.99935 232 19.4606 22.8685 -1.99642 165 19.2368 22.8228 -1.98322 175 19.0266 22.8636 -1.97559 195 19.0957 22.8006 -1.9753 181 18.8335 22.8499 -1.96577 194 18.7541 22.8997 -1.96489 183 19.7261 22.9124 -1.84139 60 19.5232 22.821 -1.82771 60 19.3855 22.8046 -1.8208 60 19.1597 22.7552 -1.80834 72 19.0383 22.7555 -1.80306 77 18.9106 22.7476 -1.7971 76 18.7251 22.8877 -1.79643 87 18.7652 22.7903 -1.79304 106 18.5902 22.869 -1.78965 94 19.5352 22.7643 -1.65648 109 19.3936 22.7436 -1.64977 112 19.1861 22.8616 -1.64704 106 18.991 22.9203 -1.64208 117 18.9695 22.7487 -1.633 182 18.6914 22.7767 -1.62331 87 19.7428 22.8309 -1.48832 113 19.2831 22.8009 -1.47023 244 18.9652 22.9315 -1.46439 174 18.9657 22.7858 -1.4581 180 18.69 22.8166 -1.44956 145 18.5427 22.7822 -1.44282 236 19.2755 22.6803 -1.29725 152 18.9326 22.9259 -1.29564 122 19.1668 22.6965 -1.29432 185 19.0083 22.7254 -1.29027 192 18.9202 22.765 -1.28896 147 18.5262 22.7966 -1.27754 115 19.3927 22.7467 -1.13298 160 19.2979 22.78 -1.13136 255 19.2159 22.8283 -1.13065 226 18.9431 22.8661 -1.1241 108 18.8521 22.9023 -1.12275 122 18.9535 22.7328 -1.11979 108 19.2541 23.1315 -0.950715 255 19.179 22.8949 -0.941853 246 19.2173 22.7948 -0.939848 199 19.2804 22.6523 -0.937226 253 19.3369 22.7608 -0.75424 221 19.2191 22.8394 -0.753727 54 19.2442 22.8515 -0.601019 64 19.2809 22.7498 -0.599554 90 +unknow 0.833489 1 0 85 17.8306 -17.594 -1.62944 157 17.5284 -17.7917 -1.62401 153 17.069 -17.5991 -1.59029 136 16.688 -17.5888 -1.57035 135 18.2378 -17.5974 -1.50846 209 17.9864 -17.6298 -1.49776 103 18.0259 -17.5579 -1.49627 112 17.8413 -17.5981 -1.48923 91 17.584 -17.6191 -1.47785 98 17.4189 -17.5639 -1.46728 137 17.2851 -17.539 -1.4597 84 17.1687 -17.586 -1.45645 144 17.0369 -17.5612 -1.449 129 16.8171 -17.6094 -1.44101 151 16.8693 -17.4984 -1.43803 97 16.6736 -17.5696 -1.43234 79 17.9118 -17.5988 -1.3514 95 17.9613 -17.5369 -1.3509 207 17.4344 -17.5101 -1.32643 206 17.3583 -17.5435 -1.32457 171 17.1917 -17.5394 -1.31711 119 17.4481 -17.2504 -1.31562 125 17.3553 -17.3211 -1.31463 91 17.0516 -17.5061 -1.30954 153 16.9397 -17.5007 -1.30444 162 16.6599 -17.5945 -1.29662 122 16.6724 -17.4972 -1.29277 137 18.096 -17.482 -1.20477 102 17.9648 -17.5197 -1.20095 108 17.5314 -17.6985 -1.19073 210 17.7756 -17.4448 -1.19039 181 17.604 -17.3856 -1.18118 183 17.4582 -17.405 -1.17613 244 17.263 -17.593 -1.1759 180 17.3964 -17.4527 -1.17556 191 17.1211 -17.5586 -1.16893 131 16.988 -17.5321 -1.16264 148 16.8662 -17.5164 -1.15725 196 16.7614 -17.5726 -1.15545 121 18.0765 -17.4267 -1.06056 102 17.9456 -17.4643 -1.05713 114 17.4683 -17.5972 -1.04469 206 17.7067 -17.3401 -1.04408 138 17.4586 -17.4772 -1.04004 111 17.5385 -17.2834 -1.03599 230 17.437 -17.3461 -1.03458 206 17.1873 -17.588 -1.03437 149 17.2658 -17.5025 -1.03407 255 16.6813 -17.5596 -1.01557 161 16.6923 -17.4608 -1.01233 84 17.5975 -17.2991 -0.897848 244 17.6389 -17.2311 -0.897041 176 17.1752 -17.6432 -0.895423 197 17.4661 -17.3326 -0.894708 233 17.3734 -17.3493 -0.892285 245 17.155 -17.5122 -0.89058 224 17.2863 -17.3713 -0.890222 233 17.2106 -17.4042 -0.888876 237 17.6668 -17.601 -0.751037 192 17.6799 -17.4487 -0.747266 144 17.8061 -17.1907 -0.743803 135 17.6763 -17.227 -0.741186 231 17.5551 -17.2166 -0.737567 189 17.0905 -17.625 -0.736102 139 17.2914 -17.3349 -0.733563 216 17.0955 -17.5197 -0.733331 179 17.1127 -17.4274 -0.731253 195 17.1919 -17.3437 -0.731099 225 17.7791 -17.3079 -0.590424 57 17.4833 -17.2356 -0.581986 45 17.329 -17.354 -0.581147 163 17.1316 -17.5378 -0.580888 173 17.3664 -17.2826 -0.580375 223 17.2336 -17.3673 -0.579279 174 17.1515 -17.4483 -0.579279 183 17.1503 -17.6124 -0.45676 149 17.1315 -17.4827 -0.453892 182 17.2626 -17.342 -0.453677 243 17.3114 -17.282 -0.453461 53 17.187 -17.3748 -0.452865 204 17.251 -17.5798 -0.293368 171 17.3858 -17.441 -0.293288 86 17.2872 -17.4515 -0.292025 255 17.3251 -17.4298 -0.178044 74 17.5541 -17.5626 -0.0180709 95 +unknow 0.702956 1 0 816 14.0449 -1.11195 -1.33673 124 14.0082 -1.16455 -1.25255 233 13.9871 -1.05231 -1.24944 255 13.9582 -1.11635 -1.24695 255 13.909 -1.00265 -1.24093 255 14.1196 -1.23913 -1.18812 119 13.996 -1.19272 -1.09738 233 13.8231 0.127244 -1.0766 88 14.0468 -1.20437 -1.01261 160 14.0147 -1.15721 -1.0095 255 13.9803 -1.08799 -1.00603 255 13.9697 -1.043 -1.00482 255 13.9392 -0.996631 -1.00188 255 13.8881 -0.927114 -0.997029 241 14.1048 -1.21808 -0.942877 105 14.0503 -1.10239 -0.937674 255 14.0271 -1.16713 -0.936208 255 14.0192 -1.01143 -0.934585 255 14.0218 -0.945228 -0.934424 255 14.006 -1.05474 -0.93377 214 14.0009 -0.899682 -0.932473 255 13.9579 -0.852981 -0.928732 230 14.0711 -1.11266 -0.825774 152 14.0596 -1.15619 -0.825186 121 14.046 -1.22173 -0.824598 155 13.962 -0.993539 -0.817124 203 13.9572 -1.05932 -0.817123 215 13.96 -0.905255 -0.81654 200 13.9532 -0.94884 -0.816245 236 13.9343 -0.837613 -0.814341 236 14.0696 -1.13271 -0.74655 93 14.0461 -1.17528 -0.745194 124 13.9856 -1.0819 -0.740591 127 13.9917 -0.97188 -0.740458 255 13.9865 -1.0157 -0.740321 255 13.9867 -0.927409 -0.739917 255 13.9881 -0.773141 -0.739379 255 13.9789 -0.860778 -0.739106 255 13.9437 -0.81472 -0.736534 246 13.9366 -0.72649 -0.735723 229 14.0458 -1.23593 -0.666374 65 13.9895 1.19239 -0.662706 164 13.9755 -1.11906 -0.661407 122 13.9365 -1.02776 -0.658551 255 13.9312 -1.07138 -0.658426 181 13.9372 -0.961793 -0.658304 255 13.9394 -0.764106 -0.657688 255 13.9182 -0.91652 -0.656939 255 13.9151 -0.872404 -0.656567 255 13.9051 -0.805987 -0.655699 247 13.854 -0.715615 -0.652223 201 14.1129 1.25529 -0.586553 78 14.0827 -1.18687 -0.58447 80 14.077 1.20746 -0.584305 191 14.0833 -1.05337 -0.583912 255 14.0486 -1.13963 -0.582336 150 14.0582 -0.984953 -0.582228 255 14.0553 -0.940394 -0.581892 255 14.0401 -1.09458 -0.581663 126 14.0546 -0.67457 -0.580999 255 13.9949 1.13385 -0.579359 255 14.0044 -0.892903 -0.578859 255 14.0004 -0.826443 -0.578411 245 13.995 -0.782024 -0.577963 245 13.9914 -0.737749 -0.577627 142 13.9549 -0.626038 -0.57527 210 14.0645 -1.21446 -0.504338 158 14.05 1.24279 -0.503792 191 14.0199 -1.09964 -0.50161 157 13.984 1.17071 -0.50015 96 13.9794 -1.05221 -0.499386 255 13.9726 -1.14003 -0.499384 92 13.9438 1.12331 -0.497924 191 13.9625 0.860296 -0.497917 255 13.9484 -0.98373 -0.497567 255 13.9474 -0.939629 -0.497366 255 13.9354 1.0786 -0.497316 215 13.9423 -0.89528 -0.496963 255 13.9303 1.01222 -0.496808 255 13.9583 -0.434765 -0.496671 255 13.9414 0.617492 -0.496191 255 13.9271 -0.850345 -0.496054 255 13.9175 0.967369 -0.495998 102 13.929 -0.78459 -0.495954 255 13.9471 0.00391975 -0.495771 255 13.9153 0.813608 -0.495387 239 13.9285 -0.543319 -0.495353 255 13.9137 -0.696021 -0.494945 255 13.9202 -0.499182 -0.494849 237 13.9049 -0.629882 -0.49434 255 13.9117 -0.38948 -0.494245 255 13.9028 -0.58602 -0.494139 255 13.9014 0.572036 -0.494066 255 13.8979 0.506314 -0.493761 255 13.8875 -0.738411 -0.49373 255 13.9017 0.309751 -0.493655 255 13.8934 0.462462 -0.493457 255 13.8823 0.156671 -0.492539 255 14.0905 1.24148 -0.425276 52 14.0863 -1.22122 -0.424945 188 14.066 -1.15276 -0.42378 124 14.0536 -1.10733 -0.423064 255 13.9821 -0.991419 -0.419478 255 13.9832 -0.947357 -0.419389 255 13.9753 -1.05715 -0.419387 244 13.9821 -0.903172 -0.419211 255 13.9829 -0.859123 -0.419122 255 13.9852 -0.749069 -0.418945 255 13.9808 -0.792892 -0.418855 255 13.9627 -0.637982 -0.417692 239 13.9556 -0.703579 -0.417511 255 14.0582 1.23309 -0.334269 54 14.0132 -1.2203 -0.332438 167 14.0068 -1.15325 -0.331978 129 13.9822 1.16021 -0.33111 104 13.9865 -1.10731 -0.331055 146 13.9779 -0.952055 -0.330289 255 13.9768 -0.907874 -0.330136 255 13.9656 -0.797014 -0.329445 255 13.9301 -1.0587 -0.328746 232 13.9234 -1.01419 -0.328362 255 13.9324 -0.707247 -0.327984 255 13.9115 0.956698 -0.327794 242 13.9158 -0.859892 -0.327673 255 13.9104 0.912724 -0.327639 199 13.9086 0.846813 -0.327406 175 13.9096 0.759202 -0.32725 250 13.9101 -0.749911 -0.327213 255 13.9052 0.802782 -0.327174 104 13.9093 -0.44338 -0.326682 229 13.894 0.714605 -0.326556 183 13.903 -0.508764 -0.326526 255 13.8972 0.605378 -0.326476 190 13.895 0.561557 -0.326321 162 13.8872 0.648673 -0.32617 189 13.8958 -0.355537 -0.326068 212 13.8926 -0.399126 -0.32599 217 13.8922 -0.246272 -0.325839 208 13.8834 -0.551695 -0.325832 92 13.885 0.451987 -0.32578 155 13.8815 0.495536 -0.325704 165 13.8833 -0.28973 -0.32553 208 13.8829 -0.202465 -0.325456 208 13.8764 0.408092 -0.325393 108 13.8744 -0.00616166 -0.325075 128 14.0274 1.21584 -0.244831 212 14.0094 -1.16815 -0.244064 239 13.9792 1.14521 -0.24309 241 13.9746 -1.07695 -0.242713 233 13.9672 -1.12054 -0.242583 247 13.9469 1.0984 -0.241929 101 13.9537 -0.921182 -0.241686 255 13.9508 -0.965015 -0.241685 255 13.9477 -1.00884 -0.241684 255 13.9462 0.94415 -0.241539 255 13.9411 0.987811 -0.241475 255 13.9486 -0.810888 -0.241302 255 13.9477 0.790278 -0.241277 255 13.9494 -0.723026 -0.241175 255 13.9406 -0.876367 -0.241172 255 13.9244 1.05257 -0.24109 243 13.9506 -0.613285 -0.241049 255 13.9331 0.899275 -0.241022 255 13.9466 -0.657016 -0.240984 255 13.9312 0.833229 -0.240827 255 13.9384 0.701902 -0.240824 255 13.9416 0.636208 -0.240822 255 13.9442 -0.52526 -0.240729 255 13.9425 -0.569062 -0.240728 255 13.9311 -0.765995 -0.240659 255 13.9375 0.592137 -0.240628 255 13.9452 -0.371803 -0.240604 255 13.9439 -0.415615 -0.240603 255 13.9405 -0.459354 -0.240537 255 13.9378 0.482508 -0.240496 255 13.9333 0.548103 -0.240433 255 13.9368 -0.305887 -0.240283 255 13.9317 -0.108787 -0.24003 255 13.9284 -0.218168 -0.239963 255 13.9257 -0.261901 -0.239898 255 13.9042 0.743917 -0.239794 255 13.8813 -0.152097 -0.238419 255 13.8601 -0.0212727 -0.237713 255 13.854 -0.0648028 -0.237519 255 13.8481 0.0439773 -0.237328 255 14.0404 -1.19293 -0.172905 255 14.0243 1.19337 -0.172531 199 13.9861 -1.12185 -0.171282 255 13.9756 -1.0768 -0.170905 255 13.9523 1.14324 -0.170472 255 13.943 -1.03017 -0.169931 255 13.9409 1.03219 -0.169928 255 13.9458 -0.964314 -0.169878 255 13.9339 1.09772 -0.169875 255 13.9407 -0.919956 -0.169663 255 13.9416 -0.876026 -0.16961 255 13.9321 0.987562 -0.169602 255 13.9403 -0.831977 -0.169503 255 13.934 0.899759 -0.169491 255 13.942 -0.766163 -0.16945 255 13.9291 0.943396 -0.169438 255 13.9384 -0.722037 -0.169289 255 13.9301 0.833615 -0.169273 255 13.9331 0.745975 -0.169217 255 13.9396 -0.612361 -0.169183 255 13.9366 -0.678043 -0.169182 255 13.9287 0.789631 -0.169164 255 13.9395 -0.458844 -0.169024 255 13.9372 -0.524527 -0.169023 255 13.9285 0.679931 -0.168999 255 13.9335 -0.568225 -0.168968 255 13.9265 0.635997 -0.168889 255 13.9245 0.592076 -0.16878 255 13.9269 -0.414607 -0.168647 255 13.9261 -0.370795 -0.168594 255 13.9191 0.526169 -0.168562 255 13.9147 0.482237 -0.168398 255 13.9192 -0.32684 -0.168378 255 13.9186 -0.261202 -0.168325 255 13.916 -0.173681 -0.168219 255 13.9114 -0.217326 -0.16811 255 13.9009 -0.0642834 -0.167789 255 13.8967 -0.107913 -0.167679 255 13.8911 -0.0205744 -0.167519 255 13.8682 0.437101 -0.167098 255 13.8711 0.0230674 -0.166979 255 14.0607 -1.20686 -0.0793412 180 14.0344 1.13756 -0.0787474 255 14.0359 -1.09382 -0.0786512 255 14.019 1.24721 -0.078628 76 14.0204 -1.13696 -0.0784057 233 14.0128 1.1801 -0.0783819 237 14.0181 -0.981777 -0.0781242 255 14.0033 -1.0471 -0.077919 255 13.993 1.02356 -0.077726 255 13.998 -0.892075 -0.0775968 255 13.9741 1.08838 -0.0774424 255 13.9742 0.978019 -0.0772766 255 13.9806 -0.780814 -0.0771105 255 13.9701 0.889548 -0.0770706 255 13.9653 0.933293 -0.0770309 255 13.979 -0.736686 -0.0770301 255 13.9722 0.823588 -0.0770282 255 13.9672 -0.93423 -0.0770253 255 13.9793 -0.69267 -0.0769905 255 13.9708 -0.846336 -0.0769868 255 13.9707 0.779448 -0.0769456 255 13.9731 0.735557 -0.0769444 255 13.9724 0.669507 -0.0768614 255 13.9804 -0.472751 -0.0768327 255 13.9781 -0.538627 -0.0768312 255 13.9811 -0.384849 -0.0767943 255 13.9743 -0.582459 -0.0767894 255 13.9724 -0.626357 -0.0767883 255 13.9704 0.625418 -0.0767787 255 13.9749 0.515675 -0.076776 255 13.9817 -0.274995 -0.0767561 255 13.9783 -0.340834 -0.0767139 255 13.9725 0.471629 -0.0766933 255 13.9739 -0.428598 -0.0766709 255 13.9772 -0.187071 -0.0766362 255 13.9759 -0.121189 -0.0765969 255 13.9745 -0.230951 -0.0765943 255 13.9584 0.58092 -0.0764923 255 13.9702 -0.0772596 -0.0764758 255 13.9464 -0.0333577 -0.0759881 255 13.9324 0.032305 -0.0757044 255 13.9282 0.0760456 -0.075624 255 14.0195 -1.2012 -0.0132451 160 13.9966 -1.08851 -0.0127449 255 13.9917 -0.933457 -0.0124972 255 13.9872 -0.999381 -0.0124958 255 13.978 1.06898 -0.0124848 255 13.9886 -0.889104 -0.0124041 255 13.9674 -1.15244 -0.0123664 207 13.9612 1.17807 -0.0123618 90 13.9745 0.980452 -0.0123253 255 13.9853 -0.84478 -0.0123109 255 13.9852 -0.778637 -0.0122496 255 13.9715 0.936158 -0.0122298 255 13.9718 0.870071 -0.0121653 255 13.9776 -0.734154 -0.0120936 255 13.9664 0.825718 -0.0120384 255 13.9758 -0.690034 -0.0120319 255 13.963 0.781505 -0.011943 255 13.9699 -0.64574 -0.0119073 255 13.9708 -0.579815 -0.0118773 255 13.929 1.13136 -0.0117949 255 13.9361 -1.03966 -0.0117405 251 13.9642 -0.491652 -0.0117225 255 13.9626 -0.535519 -0.0117214 255 13.9505 0.714908 -0.01169 255 13.9603 -0.425648 -0.0116297 255 13.9235 1.02093 -0.0115721 255 13.9427 0.670616 -0.0115317 255 13.9467 0.582998 -0.0115293 255 13.9453 0.517129 -0.0114649 255 13.9508 -0.337611 -0.0114434 255 13.9496 -0.381437 -0.0114423 255 13.9388 0.47306 -0.011338 255 13.9397 -0.293507 -0.011256 255 13.9281 0.363232 -0.0111153 255 13.9242 0.428804 -0.0110855 255 13.9148 0.625519 -0.0110591 255 13.9281 -0.140049 -0.0110399 255 13.9276 -0.183805 -0.0110387 255 13.925 -0.227523 -0.0110061 255 13.9246 -0.0743841 -0.0109785 255 13.9228 -0.0306299 -0.0109482 255 13.9032 0.318926 -0.0107056 160 13.8908 0.0131397 -0.0104466 255 13.8043 0.121641 -0.00909792 255 13.7886 0.0782123 -0.00884539 255 14.0798 -1.23408 0.0789032 99 14.0796 -1.18951 0.0789385 255 14.0365 1.20102 0.0792602 242 14.0113 -1.11741 0.0796096 255 13.9883 1.15255 0.0797342 255 13.972 1.10698 0.0799172 255 13.9821 -1.02678 0.0799346 255 13.9788 -1.0707 0.0799357 255 13.9828 -0.960612 0.0799695 255 13.9654 1.0623 0.0800094 255 13.9762 0.908686 0.0800133 255 13.9826 -0.872374 0.0800218 255 13.9797 -0.916297 0.0800229 255 13.9683 0.996337 0.0800292 255 13.9845 -0.806362 0.0800384 255 13.985 -0.762319 0.0800555 255 13.9673 0.952169 0.0800667 255 13.977 0.798536 0.0800707 255 13.9833 -0.718182 0.0800907 255 13.9704 0.842194 0.0801059 255 13.9835 -0.674156 0.0801078 255 13.9734 0.754287 0.0801264 255 13.9728 0.688226 0.0801644 255 13.9709 0.644134 0.0802019 255 13.9709 0.600151 0.0802213 255 13.9761 -0.519867 0.0802313 255 13.9746 0.446432 0.0802434 255 13.9724 -0.563694 0.0802506 255 13.9724 -0.453817 0.0802843 255 13.9671 0.490111 0.0802968 255 13.9627 0.555841 0.0803134 255 13.9625 -0.607254 0.0803244 255 13.969 -0.365871 0.0803366 255 13.9617 -0.409589 0.0803923 255 13.9587 -0.168216 0.0804589 255 13.9554 -0.255885 0.0804794 255 13.9541 -0.212014 0.0804964 255 13.9534 -0.102402 0.0805119 255 13.9485 -0.299608 0.0805351 255 13.9436 -0.0585426 0.0806017 255 13.9417 -0.0147386 0.0806187 255 13.8797 0.0506183 0.0811808 255 13.8474 0.0939451 0.0814706 255 14.0486 -1.22849 0.16865 116 14.0148 1.22434 0.168682 157 14.0004 -1.15772 0.168795 255 13.994 -1.11293 0.168821 255 13.9586 1.1533 0.168852 255 13.9622 1.10944 0.168854 255 13.9589 1.02098 0.168883 255 13.9536 1.06468 0.168887 255 13.9744 -1.00093 0.168894 255 13.9675 -1.06661 0.168901 255 13.9735 -0.956746 0.168904 255 13.9536 0.954525 0.168912 255 13.9706 -0.84634 0.168929 255 13.9505 0.9103 0.168929 255 13.9533 0.866471 0.16893 255 13.9716 -0.758325 0.168937 255 13.9552 0.800601 0.168937 255 13.9692 -0.802212 0.168938 255 13.9537 0.756549 0.168949 255 13.954 0.712599 0.168956 255 13.9552 0.646749 0.168963 255 13.962 -0.713789 0.168969 255 13.9631 -0.603931 0.168977 255 13.9612 -0.647798 0.168978 255 13.9629 -0.450162 0.16899 255 13.9425 -0.910553 0.168995 255 13.9583 -0.406111 0.169005 255 13.9412 0.602247 0.169007 255 13.943 0.558449 0.169009 255 13.958 -0.340268 0.169009 255 13.9387 0.514428 0.169026 255 13.939 0.448675 0.169033 255 13.949 -0.296187 0.169035 255 13.9446 -0.208442 0.169049 255 13.9439 -0.252246 0.16905 255 13.935 -0.558806 0.169057 255 13.9361 -0.05504 0.169072 255 13.9275 -0.492758 0.169083 255 13.9198 -0.098682 0.169117 255 13.9063 0.403961 0.169126 192 13.8722 0.010706 0.169245 255 13.8401 0.0542189 0.16933 255 13.7724 0.0362383 0.251296 255 13.8925 -0.00686133 0.251688 255 13.9158 0.430501 0.251774 176 13.9202 0.0806367 0.251777 255 13.9283 -0.0724507 0.251806 255 13.9336 -0.160022 0.251828 255 13.936 -0.116257 0.251834 255 13.9386 -0.225763 0.251849 255 13.94 0.540919 0.251863 255 13.9416 0.497125 0.251864 255 13.9462 0.585058 0.251888 255 13.9483 0.629054 0.2519 255 13.9467 -0.467008 0.251901 255 13.9447 0.848568 0.25192 255 13.9532 0.695199 0.251924 255 13.9561 -0.423408 0.251926 255 13.9529 0.739137 0.25193 255 13.9551 -0.511166 0.251934 255 13.9525 0.783081 0.251935 255 13.9545 -0.576997 0.251942 255 13.9519 0.893034 0.251952 255 13.953 0.937134 0.251964 255 13.9505 1.00303 0.251969 255 13.9607 -0.621179 0.251969 255 13.9606 -0.665123 0.251977 255 13.9532 1.04731 0.251987 255 13.9653 -0.73131 0.252005 255 13.9578 1.09178 0.252012 255 13.965 -0.775284 0.252012 255 13.9685 -0.819497 0.252033 255 13.9698 -0.863613 0.252047 255 13.9656 -0.929431 0.252048 255 13.9686 -0.973704 0.252069 255 13.9654 -1.01759 0.25207 255 13.9783 1.13761 0.252089 255 13.9725 -1.0843 0.252111 255 14.0166 1.20732 0.25223 230 14.0148 -1.13181 0.252261 255 14.0112 -1.17583 0.252262 249 13.9073 0.0509041 0.333756 255 13.907 -0.102012 0.33376 255 13.9023 0.444114 0.333765 255 13.9152 -0.0583726 0.333832 255 13.9106 0.641304 0.333907 255 13.9278 0.204102 0.333955 255 13.9283 0.291642 0.333971 255 13.9311 0.247918 0.33399 255 13.9347 0.138519 0.334011 255 13.9333 0.335535 0.334025 255 13.937 0.0947403 0.334031 255 13.9393 -0.0147223 0.334052 255 13.9397 -0.211813 0.334075 255 13.9376 0.401348 0.334078 255 13.9363 0.554729 0.334111 255 13.9463 -0.168105 0.334129 255 13.9428 0.489179 0.334149 255 13.947 -0.255771 0.334149 255 13.9446 -0.365295 0.334152 255 13.9433 -0.409099 0.334153 255 13.9306 0.795767 0.33416 255 13.9331 0.752001 0.334161 255 13.9354 0.708228 0.334162 255 13.9405 0.598752 0.334165 255 13.9481 -0.29963 0.334169 255 13.948 -0.453116 0.334209 255 13.944 -0.562648 0.334212 255 13.9477 -0.518917 0.334229 255 13.9319 0.905657 0.334231 255 13.936 0.839991 0.334232 255 13.945 -0.716359 0.334289 255 13.9561 -0.607086 0.334342 255 13.9582 -0.651122 0.334379 255 13.947 0.950609 0.334395 255 13.9459 0.994562 0.334412 255 13.9566 -0.760954 0.334419 255 13.957 1.06146 0.334557 255 13.9721 -0.805866 0.334585 255 13.9762 -0.872212 0.33466 255 13.9833 -0.916788 0.334753 255 13.974 1.15105 0.334775 255 13.9815 1.10746 0.334813 255 13.9916 -1.02779 0.334903 255 13.9983 -0.961981 0.334919 255 13.9909 -1.11617 0.33496 255 14.0083 -1.0733 0.335087 255 14.0232 -1.16316 0.335292 231 14.072 1.20345 0.335711 216 13.9214 -0.08091 0.426189 255 13.9239 0.225306 0.426245 255 13.9245 0.181564 0.426246 255 13.9336 0.0284775 0.426377 255 13.9355 0.0722737 0.426407 255 13.9313 0.422509 0.42643 255 13.9372 0.116071 0.426438 255 13.9371 -0.124759 0.426444 255 13.9319 0.466348 0.426461 255 13.9396 -0.0371884 0.426473 255 13.9365 0.378859 0.426495 255 13.9382 0.313178 0.426496 255 13.9411 0.269433 0.426529 255 13.9417 -0.234306 0.426541 255 13.9447 -0.168625 0.426572 255 13.946 -0.322026 0.426639 255 13.9379 0.620066 0.426647 255 13.9398 0.576265 0.426648 255 13.9489 -0.278248 0.426669 255 13.9435 0.532552 0.426681 255 13.9456 -0.475477 0.426706 255 13.9388 0.68594 0.426709 255 13.9503 -0.387897 0.426735 255 13.951 -0.43178 0.426768 255 13.9377 0.81764 0.4268 255 13.9426 0.730049 0.426803 255 13.9422 0.77396 0.426833 255 13.9512 -0.541484 0.426834 255 13.9368 0.92749 0.426893 255 13.9397 0.883697 0.426894 255 13.9534 -0.585471 0.426899 255 13.9575 -0.629563 0.426995 255 13.9554 -0.673409 0.426996 255 13.9418 0.971838 0.427018 255 13.9541 -0.739267 0.427029 255 13.9512 -0.827043 0.427063 255 13.9411 1.03783 0.42708 255 13.9491 -0.892901 0.427096 255 13.9308 1.19124 0.427108 186 13.9398 1.08178 0.427111 255 13.9577 -0.783427 0.427125 255 13.9622 -0.937762 0.427351 255 13.9542 1.12705 0.427395 255 13.9732 -0.982577 0.427574 255 13.9803 -1.04929 0.427765 255 13.9848 1.24022 0.428025 47 14.0049 -1.09534 0.42821 255 14.0512 -1.14329 0.429004 255 14.0535 -1.18792 0.4291 178 13.9124 0.0359963 0.496774 232 13.9141 0.254585 0.496853 241 13.9192 0.298414 0.496977 241 13.9221 0.101611 0.496982 243 13.9171 0.451504 0.497015 233 13.9202 0.342186 0.497018 237 13.9231 0.189107 0.497022 243 13.9257 0.145382 0.497065 245 13.9255 -0.160871 0.497072 237 13.9249 -0.204619 0.497074 233 13.9224 0.407889 0.4971 228 13.9284 -0.00774975 0.497111 232 13.9249 -0.314027 0.497118 232 13.9303 -0.0515184 0.497154 223 13.9301 -0.0952817 0.497155 237 13.9258 -0.357826 0.497161 231 13.9302 -0.248482 0.4972 234 13.9256 0.495561 0.497224 230 13.926 0.539381 0.497264 230 13.9306 -0.401758 0.497288 230 13.9253 0.605083 0.497305 235 13.929 -0.511233 0.497333 230 13.9326 -0.467542 0.497373 231 13.9314 -0.555157 0.497418 226 13.9238 0.758477 0.497427 225 13.9313 0.649193 0.497471 233 13.9332 0.693145 0.497554 227 13.9395 -0.599369 0.497628 224 13.9366 -0.665051 0.49763 231 13.9333 0.802881 0.497677 232 13.9367 0.847007 0.497801 227 13.936 0.890908 0.497842 233 13.9484 -0.709568 0.497924 224 13.9356 0.956838 0.497924 231 13.9444 -0.819217 0.497969 225 13.9501 -0.753608 0.498009 228 13.9477 -0.863402 0.498095 219 13.9465 1.00159 0.498216 233 13.9529 -0.90775 0.498264 219 13.954 -0.95186 0.498349 222 13.9513 1.04598 0.498383 226 13.9502 1.11202 0.498465 242 13.9613 -1.0185 0.498602 222 13.97 -1.06329 0.498855 226 13.9805 -1.1083 0.499149 218 14.007 -1.17691 0.499821 196 14.0303 1.16262 0.500224 95 14.0829 -1.228 0.501499 116 13.8523 0.116698 0.564825 133 13.8548 0.00790406 0.56488 135 13.8576 0.378064 0.565079 103 13.863 0.225707 0.565134 142 13.8702 -0.122785 0.565299 137 13.8719 0.160485 0.565344 102 13.8726 0.0733221 0.565346 100 13.8715 -0.188169 0.565353 96 13.8721 -0.275358 0.565407 128 13.8749 -0.231806 0.565458 124 13.8755 -0.384455 0.565565 131 13.8813 0.313295 0.565652 101 13.8926 -0.0792938 0.565869 110 13.8848 -0.472014 0.565879 165 13.8947 -0.0356499 0.56592 118 13.8963 0.422889 0.566117 107 13.9002 0.270067 0.56612 110 13.8982 -0.428739 0.56619 110 13.9014 0.510502 0.566322 181 13.9069 0.466968 0.566427 117 13.9026 -0.581929 0.566453 181 13.9126 -0.341678 0.566499 98 13.9148 0.576697 0.566736 255 13.9184 -0.538765 0.566816 119 13.9167 -0.626292 0.56687 222 13.9196 -0.692152 0.567028 249 13.9213 -0.736082 0.567133 255 13.9449 0.621894 0.567566 255 13.9449 0.6658 0.567617 255 13.9476 0.731831 0.567771 255 13.9467 0.819694 0.567873 255 13.9478 0.929752 0.568078 255 13.9507 0.885929 0.568079 255 13.9572 0.776334 0.568082 255 13.9468 0.973709 0.568129 255 13.9392 1.12734 0.568228 255 13.9649 -0.7823 0.568329 255 13.961 -0.848099 0.56833 255 13.9537 1.01827 0.568387 255 13.9567 1.08464 0.568593 255 13.9723 -0.892822 0.568695 255 13.9694 -0.936713 0.568696 255 13.9664 -0.980594 0.568697 255 13.9656 -1.04669 0.568803 255 13.9802 -1.09193 0.569271 255 14.0034 1.17694 0.569994 57 14.0365 -1.14059 0.570831 255 14.0389 -1.20739 0.571041 222 13.8851 0.13961 0.651508 136 13.8855 0.0959835 0.651509 94 13.8876 0.248722 0.651634 99 13.8931 -0.144034 0.651773 122 13.8957 -0.0567558 0.651835 93 13.8998 -0.0131146 0.651962 139 13.8975 -0.253272 0.651968 112 13.8986 -0.296975 0.652034 110 13.9007 0.292616 0.652084 132 13.9035 -0.10048 0.652093 92 13.893 0.642028 0.652204 105 13.9031 -0.362638 0.652228 109 13.9019 -0.406312 0.652229 104 13.8983 -0.515484 0.652232 89 13.9083 0.205352 0.652279 97 13.9025 -0.450056 0.652295 102 13.9047 0.445688 0.652337 88 13.9097 0.336506 0.652404 88 13.9029 0.598711 0.652462 109 13.9072 0.489499 0.652465 117 13.91 0.402114 0.652467 113 13.9018 0.708081 0.652588 109 13.9087 0.555178 0.652592 106 13.9202 -0.209986 0.652675 84 13.9087 -0.603433 0.652685 60 13.9237 0.0524351 0.652733 96 13.9165 -0.559989 0.652877 63 13.9092 -0.756781 0.652946 59 13.911 0.796189 0.653037 101 13.9135 0.752485 0.653038 105 13.9063 0.90554 0.653098 79 13.9207 -0.647799 0.653136 60 13.9195 -0.713494 0.653202 60 13.9164 0.840353 0.653293 68 13.9092 -1.06401 0.653597 92 13.931 -0.955721 0.654045 92 13.9343 0.995264 0.65419 114 13.9403 -1.02241 0.654497 61 13.9647 -0.803912 0.654814 44 13.9494 1.06239 0.654832 255 13.9496 -1.11128 0.655014 255 13.9707 -0.870345 0.655137 44 13.9559 1.10698 0.655153 255 13.9779 -0.914907 0.65546 44 13.9643 1.15179 0.655538 252 14.0476 -1.1637 0.658298 250 14.142 1.23322 0.661458 45 13.9236 0.231895 0.74341 91 13.925 0.122533 0.743412 84 13.9248 0.275677 0.743486 87 13.9235 0.472646 0.743636 76 13.9309 -0.27133 0.743732 80 13.9302 0.385276 0.743793 80 13.9355 0.0350794 0.743802 93 13.9373 0.0788781 0.743878 87 13.9366 -0.161941 0.743884 86 13.9397 -0.227668 0.74404 79 13.9369 0.429296 0.744102 76 13.9423 0.188431 0.744108 60 13.9433 -0.074398 0.744114 93 13.9315 0.626371 0.744174 70 13.9413 0.341777 0.744181 84 13.9423 -0.381083 0.744277 80 13.9397 -0.468679 0.744279 68 13.9535 -0.0305925 0.7445 63 13.9453 -0.534657 0.74459 40 13.9453 0.58312 0.74464 72 13.9471 0.539309 0.744641 73 13.954 -0.315589 0.744662 87 13.9455 -0.578542 0.744668 40 13.9372 0.824222 0.744789 64 13.9421 0.736642 0.744791 40 13.9417 0.780551 0.744867 40 13.963 -0.118332 0.74489 59 13.9483 0.693046 0.744947 43 13.9516 -0.622696 0.744979 40 13.961 -0.425458 0.745052 74 13.9471 0.890818 0.745329 41 13.9616 -0.667071 0.745445 40 13.9474 -1.08431 0.745919 40 13.9622 0.935863 0.746025 46 13.9922 -0.73457 0.746763 40 13.9904 -0.932953 0.747154 91 14.0018 -0.779166 0.747228 40 13.9863 1.04793 0.747261 86 14.0053 -0.823499 0.747462 40 13.9914 1.13679 0.747723 227 13.9949 1.09283 0.747724 248 14.0092 -0.88998 0.747773 40 14.0142 -1.02297 0.748318 40 14.0216 -1.13426 0.74894 227 14.0655 1.20971 0.750818 40 14.1176 -1.18649 0.752812 149 13.8948 0.327519 0.806814 171 13.9016 0.174758 0.806991 170 13.9002 -0.261994 0.807002 164 13.8998 0.436868 0.807158 159 13.9083 -0.109197 0.807259 170 13.9107 -0.0218118 0.807343 131 13.9127 0.0218869 0.807429 179 13.9126 0.240447 0.80751 136 13.9144 0.0874602 0.807514 136 13.8755 -1.07008 0.807629 82 13.9205 -0.0655832 0.807778 133 13.9221 0.131231 0.80786 129 13.9044 0.787126 0.808017 142 13.9068 0.743443 0.808018 156 13.9162 0.590564 0.808108 126 13.927 -0.218772 0.808128 132 13.9251 0.393833 0.8082 131 13.9257 -0.371957 0.808219 169 13.9231 -0.459447 0.808221 155 13.9079 0.831149 0.808276 140 13.9182 0.634459 0.808281 161 13.9228 0.525126 0.808283 165 13.9221 0.678459 0.80854 131 13.9358 0.284596 0.80855 126 13.9376 -0.175165 0.808561 127 13.9196 -0.766066 0.808662 97 13.9138 0.897312 0.808708 140 13.9363 0.481772 0.808805 129 13.9384 -0.416148 0.808827 124 13.9352 -0.613334 0.809005 148 13.943 -0.569808 0.809264 147 13.9528 -0.328867 0.809345 131 13.9421 -0.6795 0.80944 153 13.9527 -0.526318 0.80961 125 13.9459 -0.723619 0.809702 114 13.9368 0.942722 0.809834 110 13.9382 -0.920967 0.80988 165 13.9477 -0.833619 0.810051 82 13.938 1.14092 0.810523 255 13.959 -0.878337 0.810659 82 13.9525 1.03185 0.810785 221 13.9497 -1.12004 0.811012 255 13.9654 1.09896 0.811564 255 13.9824 -1.03434 0.812137 82 14.0518 1.19447 0.815638 83 14.0996 -1.19926 0.817778 221 13.9487 0.20604 0.900973 143 13.9434 0.798216 0.901757 92 13.9659 0.250224 0.901871 92 13.9698 -0.100841 0.901979 95 13.9663 0.403884 0.902067 145 13.9721 -0.0569573 0.902078 96 13.9695 0.360063 0.902168 80 13.9741 0.0527914 0.902175 103 13.9632 0.601463 0.902262 130 13.9578 0.755067 0.902358 133 13.9802 0.00890514 0.902476 98 13.9791 0.294416 0.902569 97 13.9815 0.140687 0.902573 92 13.9546 0.908897 0.902654 89 13.9574 0.865056 0.902655 88 13.9692 0.645715 0.90266 93 13.973 0.55793 0.902662 82 13.9775 0.492148 0.902764 97 13.9814 -0.36452 0.902785 85 13.97 0.711743 0.902858 84 13.9858 -0.254733 0.902883 90 13.9886 -0.21082 0.902981 106 13.9596 0.953289 0.903052 67 13.989 -0.298747 0.903084 139 13.9848 -0.452543 0.903087 116 13.9938 0.0968676 0.903174 97 13.9828 -0.562442 0.90319 118 13.971 -0.803953 0.903196 79 13.989 0.448575 0.903265 93 13.9954 -0.144949 0.90328 102 13.9731 -0.870143 0.903497 62 13.9962 -0.40888 0.903586 84 13.9993 -0.497013 0.903888 91 13.9673 -1.06818 0.903902 37 13.997 -0.607031 0.90399 82 13.9938 -0.717042 0.904093 73 14.003 -0.651357 0.904391 126 13.9842 -1.00319 0.9045 51 14.0034 -0.76163 0.904694 89 13.9962 -0.915684 0.904797 119 13.9878 -1.11392 0.905102 245 13.9975 1.06647 0.905347 255 14.0172 -0.961245 0.905997 65 14.008 1.11158 0.906046 255 14.0065 1.15575 0.906144 185 14.1157 -1.16849 0.911698 225 14.2138 1.24071 0.916834 38 +unknow 0.980579 1 0 262 13.0465 25.1877 -2.10335 85 12.8546 25.2034 -2.09734 85 12.7735 25.2401 -2.09701 85 12.9255 25.147 -2.09587 85 12.6473 25.2858 -2.09571 85 12.5537 25.2968 -2.09311 84 12.004 25.3793 -2.07961 159 11.9132 25.3934 -2.0775 124 11.1795 25.6945 -2.07523 152 10.9719 25.7686 -2.0741 159 11.0457 25.7175 -2.07263 154 10.88 25.7772 -2.07182 160 10.7921 25.7947 -2.07036 148 10.5854 25.8695 -2.06955 164 10.6598 25.8195 -2.06808 150 10.4929 25.8749 -2.06711 162 10.3649 25.9092 -2.06581 161 10.2798 25.9324 -2.065 161 10.1808 25.92 -2.06109 151 9.57754 26.0534 -2.05378 164 9.48885 26.0646 -2.05215 161 12.2465 24.8727 -2.05096 97 9.19641 26.1523 -2.05086 153 9.3545 26.0771 -2.04939 145 9.2712 26.1026 -2.04907 153 9.06394 26.169 -2.04858 155 8.98105 26.1955 -2.04842 153 8.8936 26.2084 -2.04712 153 8.7681 26.2444 -2.04663 159 8.58696 26.2497 -2.0424 155 11.9139 24.8836 -2.0399 110 12.0282 24.7221 -2.03208 103 11.9314 24.7203 -2.02851 100 9.56154 24.681 -1.94847 117 9.47327 24.6829 -1.94603 153 9.38438 24.6828 -1.94343 219 9.18815 24.7501 -1.94295 112 9.28156 24.6449 -1.93757 164 12.5964 25.0306 -1.84898 195 12.2076 24.7408 -1.81715 255 12.1025 24.7235 -1.8126 250 11.9676 24.7426 -1.80952 249 11.8777 24.7549 -1.80747 216 11.681 24.7425 -1.80043 188 11.7578 24.7039 -1.80028 184 11.5296 24.7232 -1.79442 255 8.47318 25.8294 -1.78743 189 10.8713 24.7171 -1.77404 229 10.7856 24.7328 -1.77257 246 8.48442 25.5926 -1.77115 210 10.6873 24.719 -1.76876 245 10.551 24.7232 -1.7651 244 10.4531 24.7085 -1.76128 255 10.3638 24.7137 -1.75908 230 8.55066 25.3917 -1.75867 186 10.26 24.6835 -1.7541 255 10.136 24.7131 -1.75263 233 10.0395 24.6987 -1.74897 240 9.94466 24.6876 -1.74559 246 9.80383 24.673 -1.74075 255 8.55114 25.1325 -1.74063 163 9.50469 24.7086 -1.73518 196 9.62028 24.6617 -1.73504 255 9.40422 24.6787 -1.73049 255 8.57673 24.9509 -1.7286 171 9.30758 24.6578 -1.72653 205 8.83916 24.8232 -1.7261 255 9.22026 24.6607 -1.72448 218 8.67311 24.85 -1.7239 215 8.74515 24.8057 -1.72258 197 9.01395 24.6987 -1.72184 235 8.92748 24.7025 -1.71994 255 12.9536 24.8833 -1.69343 163 12.8415 24.8583 -1.68842 255 12.6753 24.8225 -1.6811 185 12.5522 24.7731 -1.67433 208 12.4475 24.7589 -1.67027 243 12.1317 24.8064 -1.66363 185 12.2042 24.7575 -1.66282 157 11.8839 24.7911 -1.65537 186 11.9592 24.7483 -1.65496 129 11.6557 24.7119 -1.64386 214 11.5215 24.7285 -1.64101 227 10.8548 24.7017 -1.6207 198 10.7636 24.7046 -1.6184 231 8.4958 25.5207 -1.61505 222 10.663 24.6852 -1.61447 229 10.5706 24.6837 -1.6119 233 10.4347 24.6872 -1.60851 235 10.3418 24.6831 -1.6058 234 10.2504 24.6823 -1.60336 232 8.51504 25.3123 -1.60204 255 10.1189 24.6933 -1.60066 235 9.75714 24.8042 -1.59849 94 10.0195 24.6714 -1.59673 232 9.92787 24.6675 -1.59415 247 9.79975 24.6844 -1.59199 221 9.43779 24.7887 -1.58969 128 8.52728 25.087 -1.58781 175 9.61339 24.6655 -1.58616 98 9.49348 24.7012 -1.58549 124 9.32755 24.7323 -1.58346 208 8.57374 24.9657 -1.58103 225 9.11033 24.743 -1.57899 92 8.6736 24.8741 -1.57737 233 9.20524 24.6418 -1.57479 97 8.73781 24.8072 -1.57452 236 9.00733 24.7021 -1.57398 255 8.81037 24.7646 -1.57344 247 8.9209 24.7059 -1.57222 255 12.8672 24.8224 -1.52972 194 12.7398 24.7669 -1.52301 221 12.5867 24.7556 -1.51804 225 12.2906 24.846 -1.51482 154 12.4746 24.7273 -1.51332 248 12.3575 24.6878 -1.50786 253 12.1359 24.7286 -1.50401 130 12.0222 24.6931 -1.49891 137 11.8763 24.6883 -1.49469 124 11.6807 24.6777 -1.48885 238 11.5878 24.6817 -1.48662 255 8.53497 25.7933 -1.48058 120 10.9159 24.646 -1.46724 172 10.786 24.6661 -1.46513 250 8.52454 25.4939 -1.46268 130 10.6917 24.6614 -1.46252 244 10.5968 24.6545 -1.45978 245 10.5005 24.6437 -1.4568 251 10.3649 24.6469 -1.4537 251 8.55718 25.3271 -1.45348 126 9.65236 24.9003 -1.45172 211 10.2712 24.6406 -1.45109 250 10.183 24.647 -1.44935 255 9.54324 24.8504 -1.44638 132 9.34707 24.9227 -1.44626 120 10.0479 24.6485 -1.44625 252 9.95545 24.6429 -1.44376 249 9.86457 24.6408 -1.44152 248 9.72998 24.6406 -1.43842 255 8.54874 25.0432 -1.43658 131 9.6394 24.6376 -1.43618 233 9.3339 24.6525 -1.43022 96 8.62799 24.8914 -1.42924 181 8.68828 24.8133 -1.42588 211 9.14885 24.6302 -1.42488 254 8.75884 24.7652 -1.42451 203 9.02718 24.6581 -1.42389 255 8.86938 24.7068 -1.42339 252 8.94695 24.6788 -1.42339 255 12.8701 24.8766 -1.36605 180 12.7554 24.8458 -1.36155 200 12.6085 24.8469 -1.35785 216 12.4936 24.8132 -1.35324 220 12.3826 24.7862 -1.34908 219 12.2366 24.7852 -1.34538 216 12.1306 24.7661 -1.34178 235 12.0257 24.7484 -1.3383 235 11.9323 24.7536 -1.33627 237 11.795 24.7663 -1.33358 240 11.6984 24.7635 -1.33111 245 11.6019 24.7603 -1.32864 245 10.937 24.7427 -1.31223 222 10.8012 24.75 -1.30954 247 10.7068 24.7453 -1.30718 248 10.6117 24.7385 -1.30471 247 8.59225 25.4913 -1.30373 161 10.5168 24.7312 -1.30224 244 10.3847 24.7437 -1.29999 245 10.2908 24.7374 -1.29763 250 10.1964 24.729 -1.29516 248 10.064 24.7379 -1.2928 246 8.64715 25.2596 -1.29238 181 9.97502 24.7417 -1.29112 243 9.87951 24.7283 -1.28842 244 9.74827 24.7375 -1.28617 246 9.65674 24.7326 -1.28404 238 8.67569 25.0851 -1.28361 179 9.56534 24.7274 -1.2819 237 9.47406 24.7219 -1.27977 232 8.73082 24.9898 -1.27956 220 9.34691 24.7382 -1.27808 229 8.79934 24.934 -1.27787 140 9.26076 24.745 -1.27674 232 9.06409 24.8114 -1.2764 128 9.1719 24.744 -1.27494 255 8.9651 24.7815 -1.27292 107 12.8091 24.8096 -1.204 166 12.6965 24.7822 -1.20016 213 12.5533 24.7901 -1.19723 212 12.4439 24.767 -1.19369 216 12.3411 24.7559 -1.19086 214 12.1995 24.7637 -1.18803 211 12.0944 24.7463 -1.18489 223 11.9948 24.7392 -1.18236 219 8.95977 25.9823 -1.18192 125 11.8953 24.7318 -1.17984 224 11.7572 24.7425 -1.17731 222 11.6487 24.7143 -1.17367 255 8.9267 25.6259 -1.16431 133 10.8939 24.7051 -1.15739 215 10.8002 24.7026 -1.15537 213 8.94268 25.415 -1.15449 130 10.6678 24.7166 -1.15335 219 10.5696 24.7022 -1.15072 214 10.4794 24.7059 -1.1491 214 9.02462 25.2673 -1.14882 150 10.3513 24.7274 -1.14758 219 10.2528 24.71 -1.14485 216 9.07269 25.1524 -1.14417 133 10.1615 24.7088 -1.14303 213 10.0344 24.7306 -1.14162 213 9.94093 24.7231 -1.1395 218 9.11809 25.0318 -1.13921 134 9.85061 24.7226 -1.13778 208 9.72667 24.7502 -1.13677 207 9.6387 24.7546 -1.13535 201 9.55367 24.7661 -1.13434 196 9.46725 24.7736 -1.13313 197 9.19289 24.8725 -1.13293 183 9.34121 24.7937 -1.13182 192 9.26188 24.8192 -1.13162 229 12.8301 24.9405 -1.05026 115 9.83345 26.2134 -1.04808 165 12.7172 24.913 -1.04685 135 12.5628 24.8995 -1.04318 143 12.456 24.8817 -1.0403 156 12.3449 24.8544 -1.03698 174 12.2066 24.8693 -1.03483 174 12.1022 24.8536 -1.03214 196 12.018 24.8789 -1.03151 149 11.8967 24.8264 -1.02703 122 11.7702 24.8623 -1.02604 126 9.76386 25.4171 -1.01351 123 10.9086 24.8337 -1.00882 100 9.79827 25.2689 -1.00785 99 9.86546 25.0903 -1.00148 99 9.90674 24.9645 -0.996898 99 10.0477 24.8628 -0.99501 255 9.94437 24.8312 -0.991959 98 10.197 24.6723 -0.98962 231 10.1141 24.6913 -0.988993 236 10.1058 26.1361 -0.870921 176 12.2027 24.9209 -0.860324 144 12.0963 24.9016 -0.85786 255 11.9719 24.9439 -0.857246 106 10.0393 25.4885 -0.846724 105 10.0932 25.2758 -0.839865 104 10.1081 25.0846 -0.833237 104 10.1484 24.9583 -0.829306 103 10.2146 24.8967 -0.828072 103 10.3272 24.8372 -0.827607 154 10.3622 25.7717 -0.687042 111 11.7975 25.0322 -0.683661 125 10.3502 25.5093 -0.679045 135 10.405 25.3012 -0.673497 123 11.0311 25.0171 -0.67297 196 10.8948 25.0266 -0.671489 193 10.7972 25.0166 -0.669942 195 10.4371 25.1538 -0.669498 128 10.7028 25.0137 -0.668654 200 10.4976 25.0766 -0.667949 143 10.56 25.0049 -0.666593 213 +unknow 0.954933 1 0 1727 9.65983 -0.912054 -1.72995 75 8.14074 -0.845913 -1.72259 134 9.18005 -0.91538 -1.72196 146 8.13417 -0.871081 -1.7217 140 8.13882 -0.806983 -1.72126 136 8.12945 -0.896423 -1.72125 141 8.12127 -0.934289 -1.72036 140 8.13549 -0.780869 -1.71992 138 7.40059 -0.912808 -1.71883 116 8.15544 -0.434939 -1.71859 143 8.15665 -0.370791 -1.71815 122 8.1506 -0.486062 -1.71815 114 7.42486 -0.644577 -1.71786 107 7.41501 -0.749475 -1.71786 111 8.79316 -0.855474 -1.71774 136 8.56454 1.16604 -1.71744 117 7.40174 -0.854009 -1.71737 142 8.14879 0.449472 -1.71728 119 8.15634 -0.280961 -1.71726 122 8.14819 -0.460246 -1.71725 146 8.14306 0.513329 -1.71684 124 8.156 -0.229659 -1.71681 121 7.40311 -0.807079 -1.7164 145 8.14766 -0.39606 -1.71636 143 8.12141 0.742966 -1.71595 120 8.1237 0.717448 -1.71595 141 8.13578 0.564201 -1.71595 124 8.14739 0.35957 -1.71594 118 7.39324 -0.876593 -1.71591 111 8.7793 -0.895934 -1.71567 112 8.07546 1.12444 -1.71552 119 8.14609 -0.344707 -1.71547 128 7.42002 -0.585513 -1.71544 139 8.55847 1.13788 -1.71533 115 8.12915 0.602233 -1.71505 169 8.1508 -0.101449 -1.71504 122 7.41621 -0.608669 -1.71495 111 7.4112 -0.666897 -1.71495 107 7.40574 -0.725083 -1.71495 107 8.77255 -0.923111 -1.71484 114 8.12009 0.691409 -1.71461 143 7.39282 -0.829494 -1.71446 115 8.07464 1.07262 -1.71373 116 8.12779 0.537964 -1.71372 160 8.13874 0.333542 -1.71371 135 8.13983 -0.306047 -1.71369 157 7.41981 -0.480086 -1.71349 112 7.40328 -0.689657 -1.71349 106 7.39525 -0.771017 -1.71349 103 8.10618 0.780071 -1.71328 148 8.12907 0.486762 -1.71327 153 7.3705 0.964838 -1.71305 115 7.3834 0.860549 -1.71304 111 7.41215 -0.561501 -1.713 103 8.13069 0.422795 -1.71282 148 8.13198 0.39725 -1.71282 125 8.13586 0.307811 -1.71282 131 8.10683 -0.752523 -1.71279 162 7.39861 0.697795 -1.71255 115 8.13805 -0.165262 -1.71236 123 7.38221 0.8369 -1.71207 110 7.41023 0.534791 -1.71206 123 7.41754 -0.421487 -1.71204 115 7.38663 0.778681 -1.71158 119 7.4 0.639318 -1.71158 115 7.40387 0.592809 -1.71158 111 7.42735 0.0567462 -1.71156 130 10.0173 1.28647 -1.71152 92 8.06158 1.09664 -1.7115 146 8.10966 0.651999 -1.71149 110 8.1329 0.21816 -1.71148 125 8.13185 -0.254623 -1.71147 152 7.40376 0.569392 -1.71109 119 7.40957 0.487948 -1.71109 123 7.41179 0.453028 -1.71109 119 7.41617 -0.37469 -1.71107 119 8.13379 0.0392542 -1.71103 125 9.51901 1.27937 -1.71102 111 7.11244 -0.808328 -1.71077 91 7.36822 0.905704 -1.71061 107 8.05067 1.14671 -1.71061 151 7.38029 0.80145 -1.71061 118 7.38866 0.720253 -1.71061 110 7.39304 0.673814 -1.71061 115 8.10778 0.626206 -1.7106 128 7.42043 0.219927 -1.7106 118 7.42361 0.0333811 -1.71059 115 8.13192 -0.0118562 -1.71058 131 8.13177 -0.0501767 -1.71058 137 8.12969 -0.19067 -1.71058 153 7.4042 -0.537543 -1.71057 111 7.70867 -0.755724 -1.7102 107 7.69722 -0.864624 -1.7102 109 7.39617 0.615561 -1.71012 111 7.40413 0.510942 -1.71012 119 7.41245 0.371295 -1.71011 103 7.41562 0.30142 -1.71011 123 7.40773 -0.455986 -1.71009 115 9.50284 1.35324 -1.70988 114 7.71243 -0.694977 -1.70974 96 7.68826 -0.924812 -1.70973 94 8.12768 -0.0756992 -1.70969 149 7.33408 1.12458 -1.70965 115 7.41502 0.266397 -1.70962 119 7.41937 0.0799688 -1.70962 119 7.41402 -0.292915 -1.70961 131 7.41307 -0.316205 -1.70961 122 7.40914 -0.397696 -1.70961 108 7.40278 -0.502397 -1.7096 115 7.70239 -0.779534 -1.70927 89 8.08623 0.803742 -1.70927 124 7.6906 -0.888342 -1.70927 94 7.12272 -0.651184 -1.70926 93 7.35205 0.985874 -1.70916 111 7.3581 0.939659 -1.70916 107 7.37939 0.754453 -1.70915 111 7.41611 0.161494 -1.70913 119 7.41786 -0.00162126 -1.70913 103 7.41629 -0.153086 -1.70913 123 8.11925 0.281586 -1.70881 131 7.6941 -0.839786 -1.7088 100 8.12387 0.0646981 -1.7088 117 7.12568 -0.595054 -1.70876 94 7.11088 -0.7516 -1.70876 92 9.49271 1.38223 -1.70874 121 9.50327 1.30763 -1.70874 114 7.40882 0.324439 -1.70865 123 7.41464 0.138152 -1.70865 99 7.41354 -0.187991 -1.70864 126 7.40762 -0.350965 -1.70863 131 9.98693 1.3944 -1.70863 118 9.9955 1.33162 -1.70863 103 8.12099 -0.139449 -1.70835 150 7.71747 -0.561175 -1.70834 94 7.71283 -0.62177 -1.70834 103 7.71084 -0.645998 -1.70834 106 7.70327 -0.730742 -1.70834 99 7.69477 -0.815399 -1.70833 104 7.11353 -0.706708 -1.70825 92 7.41352 -0.0831536 -1.70816 119 8.11659 0.243193 -1.70791 130 8.12022 0.013634 -1.70791 125 7.70683 -0.670044 -1.70787 104 7.34156 1.01969 -1.7077 111 7.40389 0.347519 -1.70768 148 7.40806 0.24282 -1.70768 119 7.41189 -0.0482115 -1.70767 123 7.40715 -0.269367 -1.70766 119 9.98541 1.36224 -1.70754 109 7.71179 -0.58511 -1.70741 89 7.08687 -0.907025 -1.70724 91 7.39769 0.428786 -1.7072 119 7.399 0.405545 -1.7072 119 7.40934 -0.106401 -1.70718 120 7.4064 -0.234404 -1.70718 127 7.12407 -0.516081 -1.70675 104 7.31902 1.14577 -1.70673 106 7.32779 1.08825 -1.70673 111 7.35563 0.880654 -1.70672 111 7.71687 -0.451539 -1.70648 96 7.31347 1.16844 -1.70625 119 7.40393 0.184461 -1.70622 123 8.11016 0.19198 -1.70613 127 7.71347 -0.475654 -1.70601 93 7.33065 1.04163 -1.70576 119 7.09694 -0.772637 -1.70574 132 7.08393 -0.884016 -1.70573 117 7.07823 -0.928508 -1.70573 126 7.40424 -0.0249272 -1.70573 148 7.12138 -0.470905 -1.70524 101 7.10522 -0.672043 -1.70524 116 8.10513 0.15363 -1.70479 123 7.08818 0.81598 -1.70477 94 7.3974 -0.210892 -1.70475 127 7.11794 -0.493134 -1.70474 97 7.10738 -0.627209 -1.70473 129 7.0978 -0.727622 -1.70473 123 7.08681 -0.827889 -1.70473 125 7.68593 0.7484 -1.70464 98 7.68825 0.724246 -1.70464 100 7.70368 -0.535796 -1.70461 94 8.10362 0.12813 -1.70434 119 7.32158 1.06379 -1.7043 115 7.07686 0.893635 -1.70427 90 7.39733 -0.129515 -1.70427 127 7.11192 -0.548867 -1.70423 91 7.08225 -0.849911 -1.70422 91 7.71189 0.36119 -1.70416 102 7.71047 -0.390393 -1.70414 97 7.08173 0.837802 -1.70377 96 7.12098 0.380297 -1.70375 104 7.12646 -0.257956 -1.70374 98 7.66084 0.940847 -1.70371 96 7.70877 0.385326 -1.7037 104 7.71428 0.252076 -1.70369 89 7.71602 0.191481 -1.70369 99 7.70971 -0.366069 -1.70368 98 7.3937 0.114452 -1.7033 145 7.08859 0.759687 -1.70326 100 7.09094 0.737415 -1.70326 91 7.65591 0.964675 -1.70325 92 7.66878 0.856349 -1.70324 112 7.68576 0.687508 -1.70324 98 7.1184 -0.39212 -1.70323 102 7.11713 -0.414481 -1.70323 100 7.65989 0.916328 -1.70278 85 7.6695 0.832047 -1.70278 93 7.6758 0.771789 -1.70277 99 7.68799 0.639049 -1.70277 99 7.70715 0.336726 -1.70276 99 7.7134 0.130821 -1.70276 101 7.71407 0.0823543 -1.70276 105 7.11588 0.402461 -1.70275 99 7.70338 -0.414281 -1.70274 94 7.12577 0.145174 -1.70274 101 7.11317 -0.447887 -1.70272 100 7.10437 -0.570721 -1.70272 124 7.63596 1.08428 -1.70232 95 7.64424 1.02427 -1.70231 94 7.66219 0.880005 -1.70231 103 7.68802 0.614744 -1.7023 100 7.69083 0.578509 -1.7023 95 7.70671 0.300334 -1.70229 100 7.71253 0.0217672 -1.70229 102 7.71231 -0.0630364 -1.70228 104 7.71176 -0.111493 -1.70228 99 7.69642 -0.498825 -1.70227 98 7.10909 0.480557 -1.70225 99 7.66821 0.807555 -1.70184 94 7.69479 0.493792 -1.70183 97 7.70761 0.21553 -1.70183 116 7.70988 0.106548 -1.70182 102 7.7104 0.0581032 -1.70182 105 7.7087 -0.172007 -1.70181 103 7.07002 0.870248 -1.70175 121 7.10317 0.536238 -1.70175 105 7.11004 0.435771 -1.70174 100 7.11601 0.324034 -1.70174 101 7.12114 0.178666 -1.70174 97 8.09229 0.102485 -1.70167 123 7.62867 1.10771 -1.70138 96 7.69436 0.469504 -1.70137 102 7.70863 -0.0266658 -1.70135 104 7.05201 0.992014 -1.70125 95 7.05958 0.936594 -1.70125 95 7.06249 0.914413 -1.70125 126 7.08881 0.680985 -1.70125 103 7.09773 0.580707 -1.70124 96 7.1067 0.457987 -1.70124 96 7.12144 -0.0115268 -1.70123 102 7.1189 -0.190486 -1.70122 107 7.11827 -0.21285 -1.70122 111 6.87836 -0.633985 -1.701 107 7.64163 0.999512 -1.70091 92 7.6885 0.529793 -1.7009 98 7.69386 0.445223 -1.7009 100 7.70179 0.275932 -1.70089 98 7.70492 0.167026 -1.70089 103 7.70161 -0.280811 -1.70088 103 7.69917 -0.34129 -1.70088 101 7.07531 0.792039 -1.70075 128 7.11312 0.301528 -1.70073 101 7.11403 0.279178 -1.70073 103 7.11845 0.122676 -1.70073 96 7.1188 0.100313 -1.70073 99 7.11261 -0.313366 -1.70072 109 7.10993 -0.369218 -1.70071 100 7.67626 0.662395 -1.70044 97 7.68485 0.553811 -1.70043 94 7.70359 -0.135556 -1.70042 98 7.70229 -0.196056 -1.70041 105 7.03345 1.09103 -1.70025 102 7.09982 0.502369 -1.70023 120 7.11334 0.245593 -1.70023 94 7.1175 -0.0338655 -1.70022 100 7.11669 -0.112122 -1.70022 103 7.10966 -0.335611 -1.70021 103 7.61938 1.13084 -1.69998 96 7.63135 1.04699 -1.69998 93 6.88106 -0.558016 -1.69997 110 7.70235 -0.0871222 -1.69995 100 7.69857 -0.256472 -1.69995 103 7.03825 1.04653 -1.69975 95 7.07974 0.713826 -1.69974 99 7.10667 0.357205 -1.69973 99 7.11533 0.0667457 -1.69972 95 7.11561 0.0220369 -1.69972 105 7.11391 -0.156788 -1.69971 104 7.1097 -0.290847 -1.69971 103 7.69004 0.408672 -1.6995 99 6.88486 -0.482196 -1.69945 93 7.04742 0.968823 -1.69924 124 7.0918 0.557825 -1.69923 97 7.11327 -0.0785291 -1.69921 108 7.10983 -0.234928 -1.69921 107 8.66638 1.16736 -1.69879 119 7.03927 1.01282 -1.69874 120 7.08127 0.657853 -1.69873 96 7.08331 0.635605 -1.69873 88 7.08527 0.61335 -1.69873 87 7.10827 0.223082 -1.69872 137 7.10893 0.200751 -1.69872 101 7.61001 1.15391 -1.69858 90 7.69386 -0.220004 -1.69855 103 7.69098 -0.304587 -1.69854 103 6.87165 -0.60076 -1.69841 115 6.86672 -0.654711 -1.69841 114 7.10961 -0.0561383 -1.69821 100 7.10857 -0.134303 -1.6982 102 7.69506 -0.00239814 -1.69808 100 6.83812 0.890975 -1.69793 87 7.10776 0.0443698 -1.69771 143 6.84032 0.858493 -1.69742 123 6.88889 0.265065 -1.6974 119 6.86078 -0.675915 -1.69737 109 6.84107 0.836758 -1.6969 89 6.85563 0.707667 -1.69689 87 6.8767 -0.459957 -1.69686 127 6.87367 -0.503156 -1.69686 114 6.87754 0.416236 -1.69637 95 6.8817 0.340588 -1.69636 94 6.88274 0.318965 -1.69636 117 6.88114 -0.351794 -1.69635 128 6.87817 -0.405827 -1.69634 126 6.85478 -0.697089 -1.69634 107 6.85815 0.642646 -1.69586 91 6.8648 0.5672 -1.69585 85 6.87062 0.491683 -1.69585 123 6.87867 0.362096 -1.69585 122 6.88224 0.286442 -1.69585 96 6.88814 -0.0272528 -1.69584 87 6.87493 -0.42732 -1.69583 90 6.86387 -0.57839 -1.69582 106 6.86712 0.513119 -1.69533 103 6.88533 0.113361 -1.69532 93 6.87835 -0.330005 -1.69531 96 6.836 0.81432 -1.69482 111 6.83976 0.7821 -1.69482 117 6.88397 0.0700693 -1.6948 97 6.88423 0.0376273 -1.6948 91 6.87362 -0.383914 -1.69479 96 6.86435 -0.524187 -1.69479 113 6.84026 0.760382 -1.69431 87 6.85721 0.588246 -1.6943 120 6.87981 0.188939 -1.69429 122 6.88107 -0.135355 -1.69428 98 6.87917 -0.211006 -1.69428 95 6.8777 -0.254225 -1.69428 96 6.81708 0.931773 -1.69379 111 6.8407 0.738676 -1.69379 117 6.86917 0.394036 -1.69378 114 6.87893 0.145663 -1.69377 124 6.87868 -0.156934 -1.69376 96 6.87494 -0.27576 -1.69376 127 6.84437 0.68473 -1.69327 113 6.86323 0.458622 -1.69326 90 6.86463 0.437059 -1.69326 121 6.87793 0.0915953 -1.69325 119 6.87777 -0.102883 -1.69325 99 6.87622 -0.178502 -1.69324 128 6.87461 -0.232502 -1.69324 126 6.84956 0.609252 -1.69275 115 6.85584 0.533903 -1.69274 114 6.87659 0.0159538 -1.69273 122 6.8697 -0.307993 -1.69272 99 6.87039 0.242668 -1.69222 94 6.87145 0.210285 -1.69222 113 6.87264 0.167109 -1.69222 91 6.87467 -0.00565419 -1.69221 98 6.87248 -0.059641 -1.69169 116 6.87226 -0.08123 -1.69169 131 6.83687 0.662255 -1.69068 117 6.80658 0.90851 -1.69017 117 8.01279 -0.503547 -1.68694 134 8.58062 1.11439 -1.67937 81 7.91723 1.01324 -1.67629 100 7.89753 0.809448 -1.66648 175 7.86052 -0.70556 -1.65574 113 7.87219 -0.532415 -1.6553 113 7.8503 -0.617769 -1.65173 116 7.83461 -0.666129 -1.64905 119 7.79853 0.972758 -1.64821 97 7.79962 0.948012 -1.64776 107 7.81355 0.825383 -1.64776 117 7.83741 -0.554913 -1.64772 97 7.83083 -0.641054 -1.64772 112 7.80013 0.910782 -1.64687 116 7.80295 0.886272 -1.64687 108 7.79601 0.860652 -1.64464 118 7.81423 -0.578021 -1.64281 122 8.02639 1.03031 -1.59848 74 7.78734 -0.719514 -1.53979 79 7.7517 -0.679265 -1.53136 79 7.69774 0.964632 -1.52634 86 7.85844 -0.742407 -1.51902 55 7.63666 0.932839 -1.51242 99 7.50361 0.89313 -1.48289 93 7.60407 0.960287 -1.47073 85 7.63071 -0.697476 -1.47028 71 7.42857 -0.626346 -1.46091 115 7.34504 -0.514522 -1.44109 80 7.33364 -0.536845 -1.43898 83 7.28816 0.833441 -1.43521 80 7.42651 0.913548 -1.43231 154 7.30008 -0.453614 -1.43054 255 7.29099 -0.55661 -1.43012 83 7.26965 0.750539 -1.42931 109 7.28439 -0.590637 -1.42927 85 7.27552 0.670389 -1.42888 255 7.28001 -0.429337 -1.4259 255 7.23632 0.804687 -1.4234 72 7.23687 0.781748 -1.42298 50 7.68135 0.995794 -1.42221 59 7.38913 -0.652828 -1.41864 163 7.23936 -0.483891 -1.41788 245 7.20776 0.721502 -1.41539 208 7.22091 -0.323261 -1.41198 138 7.20431 -0.29978 -1.40819 40 7.17822 0.593628 -1.40652 142 7.30446 0.86317 -1.40546 107 7.33405 -0.532238 -1.40501 227 7.32592 -0.508553 -1.40294 224 7.30272 0.735208 -1.40215 171 7.14514 0.613611 -1.39977 255 7.27702 0.755637 -1.39719 149 7.29048 -0.563768 -1.39633 103 7.28679 -0.609565 -1.39633 82 7.13981 -0.341819 -1.39469 250 7.13154 0.454819 -1.39429 39 7.27501 -0.585621 -1.39344 88 7.24948 0.8103 -1.39265 127 7.10293 0.688867 -1.39218 255 7.11642 0.476359 -1.39133 39 7.12309 -0.363393 -1.39131 255 7.11342 0.431298 -1.39007 39 7.12244 -0.240048 -1.39005 45 7.1181 0.252276 -1.38922 46 7.09059 0.631563 -1.38838 255 7.10044 0.508958 -1.38838 44 7.10498 0.408424 -1.38796 46 7.11488 -0.161463 -1.38794 45 7.11339 -0.217338 -1.38794 45 7.11188 -0.262025 -1.38794 44 7.11397 -0.105542 -1.38752 46 7.10847 -0.183643 -1.38667 45 7.50935 0.950116 -1.38647 160 7.10863 -0.0607694 -1.38626 46 7.10683 -0.0384202 -1.38584 65 7.09774 0.273954 -1.385 46 7.09202 -0.395218 -1.38498 255 7.10058 -0.0829803 -1.38457 45 7.09813 0.117764 -1.38415 45 7.09911 -0.00489763 -1.38415 47 7.09776 -0.138703 -1.38415 45 7.20726 0.782504 -1.38314 208 7.09261 0.0954046 -1.38289 45 7.20026 0.827543 -1.38273 71 7.08512 0.29581 -1.38247 46 7.07949 0.373595 -1.38205 47 7.07974 0.329025 -1.38163 45 7.08468 0.195525 -1.38162 46 7.08727 0.0396887 -1.38162 45 7.07477 0.351084 -1.38078 46 7.08013 0.217674 -1.38078 46 7.08186 0.150934 -1.38078 45 7.07954 0.017434 -1.37993 45 7.07549 0.173062 -1.37951 45 7.07528 0.0730063 -1.37909 45 7.2064 -0.477937 -1.37733 204 7.49308 -0.682962 -1.3773 116 7.1398 0.582476 -1.36496 255 7.11738 0.659447 -1.36166 255 7.13816 -0.372413 -1.36163 255 7.13568 -0.417256 -1.36163 255 7.13433 -0.439671 -1.36163 255 7.39111 0.900218 -1.36146 166 7.11747 0.636897 -1.36125 255 7.135 -0.394737 -1.36122 255 7.11553 0.614184 -1.36042 255 7.10064 0.556683 -1.35629 84 7.3683 -0.647814 -1.35149 125 7.07829 -0.313795 -1.34841 82 7.07338 -0.291338 -1.34717 74 7.05131 0.508062 -1.34513 71 7.05903 -0.257488 -1.34387 71 7.05268 -0.212925 -1.34222 77 7.05218 -0.157487 -1.34181 61 7.04599 -0.334663 -1.3418 209 7.03556 0.451341 -1.341 63 7.03499 0.429111 -1.34058 64 7.0422 -0.234789 -1.34015 86 7.04211 -0.0356008 -1.33933 63 7.03804 -0.0577085 -1.3385 54 6.99932 0.681366 -1.33728 255 7.01654 0.472197 -1.33728 82 7.27511 0.863326 -1.33723 162 7.02169 0.350787 -1.33686 27 7.02916 -0.134968 -1.33685 68 7.02817 -0.179129 -1.33685 72 7.01545 0.394668 -1.33604 59 7.02455 0.0195942 -1.33561 62 7.02263 -0.00247948 -1.3352 65 7.00688 0.372073 -1.33397 52 7.01585 -0.112717 -1.33396 56 7.58842 0.990306 -1.33357 120 7.01043 -0.0796082 -1.33272 54 7.0062 0.195621 -1.33231 61 7.00078 0.294557 -1.3319 28 7.00489 0.0414726 -1.33148 63 6.99968 0.217425 -1.33108 61 7.00091 0.17344 -1.33107 61 7.00277 0.0634526 -1.33107 65 6.99662 0.250332 -1.33066 30 6.992 0.316166 -1.33025 27 6.99814 0.118373 -1.33025 62 6.99848 0.096388 -1.33025 64 7.26486 -0.615353 -1.33005 216 6.99578 0.140309 -1.32983 62 6.98212 0.27173 -1.32777 28 7.22714 0.834793 -1.32691 223 7.25205 -0.579805 -1.32687 228 7.2076 0.798224 -1.32214 232 7.22649 -0.554821 -1.32131 234 7.54541 -0.682283 -1.31872 153 7.19253 0.773754 -1.31857 235 7.21256 -0.530908 -1.31814 237 7.20716 -0.496347 -1.31655 239 7.18322 0.749976 -1.31619 236 7.48395 0.940444 -1.31231 144 7.16408 0.725309 -1.31182 238 7.15376 0.690271 -1.30904 239 7.13647 0.64345 -1.30467 239 7.14415 -0.469228 -1.30345 241 7.14687 -0.311741 -1.30226 239 7.12763 0.586309 -1.30189 238 7.12615 0.529893 -1.30069 239 7.11966 0.563178 -1.2999 239 7.1341 -0.288678 -1.29948 239 7.11995 0.506976 -1.2991 239 7.12408 -0.445358 -1.29908 242 7.13293 -0.210094 -1.29869 239 7.09927 0.662718 -1.29752 240 7.11953 -0.388936 -1.29749 241 7.11321 0.461634 -1.29712 239 7.11631 -0.411181 -1.29709 241 7.11466 0.405645 -1.29672 238 7.12431 -0.165009 -1.2967 237 7.11984 -0.187271 -1.29591 239 7.10748 0.427665 -1.29553 239 7.11559 -0.108864 -1.29472 239 7.10588 0.34922 -1.29433 239 7.11325 -0.131173 -1.29432 239 7.11197 -0.086445 -1.29393 239 7.08277 0.605183 -1.29315 240 7.09135 -0.364949 -1.29154 241 7.08855 -0.342466 -1.29074 242 7.07261 0.481458 -1.28918 240 7.08405 -0.26418 -1.28916 241 7.08326 -0.230725 -1.28876 240 7.05913 0.380442 -1.2852 240 7.06741 -0.00802178 -1.2848 240 7.36945 -0.643653 -1.28417 178 7.05407 0.324657 -1.28361 240 7.05505 0.302496 -1.28361 242 7.06147 -0.0301834 -1.2836 240 7.06134 -0.0523662 -1.2836 240 7.05754 0.169423 -1.28321 244 7.05745 0.0474523 -1.28281 241 7.05757 0.0252817 -1.28281 240 7.04617 0.279978 -1.28163 244 7.04815 0.224626 -1.28162 247 7.04918 0.0917221 -1.28122 241 7.04943 0.0695739 -1.28122 241 7.04154 0.246582 -1.28043 247 7.04099 0.202288 -1.28004 247 7.32127 0.896068 -1.28003 187 7.03648 0.146881 -1.27884 245 7.0271 0.124635 -1.27686 248 7.29902 -0.614659 -1.27012 221 7.25973 0.865168 -1.2675 223 7.27638 -0.578324 -1.26518 234 7.24486 0.840259 -1.26408 236 7.2527 -0.55361 -1.26025 237 7.22533 0.80342 -1.25952 239 7.23089 -0.529187 -1.25569 240 7.54172 0.950951 -1.25213 146 7.15171 0.772219 -1.24471 242 7.17178 -0.502433 -1.24392 242 7.51665 -0.712135 -1.24268 95 7.15251 -0.467301 -1.23974 244 7.12677 0.746784 -1.2394 244 7.11068 0.711165 -1.2356 245 7.13238 -0.443566 -1.23557 244 7.11217 -0.419963 -1.23139 245 7.08748 0.686271 -1.23066 245 7.10348 -0.363532 -1.22912 246 7.10231 -0.385847 -1.22911 244 7.07983 0.663052 -1.22876 255 7.0987 -0.340953 -1.22798 245 7.07601 0.640255 -1.22762 246 7.07895 0.606898 -1.22762 247 7.07691 0.58432 -1.22686 246 7.09528 -0.284975 -1.22684 246 7.09435 -0.307264 -1.22684 246 7.0748 0.561761 -1.2261 246 7.09025 -0.262487 -1.2257 245 7.07149 0.527954 -1.22496 245 7.08711 -0.240092 -1.22494 245 7.06724 0.505295 -1.22382 245 7.06488 0.482806 -1.22306 246 7.07835 -0.206442 -1.22304 244 7.07558 -0.161888 -1.22229 245 7.07504 -0.184116 -1.22229 245 7.0612 0.449114 -1.22192 245 7.0743 -0.128515 -1.22191 244 7.06062 0.426801 -1.22154 243 7.06192 0.404619 -1.22154 243 7.3767 0.907194 -1.22103 110 7.05924 0.382205 -1.22078 243 7.06878 -0.106223 -1.22077 244 7.06712 -0.0839987 -1.22039 243 7.05713 0.304286 -1.21964 242 7.06351 -0.050681 -1.21963 243 7.05418 0.326356 -1.21926 243 7.06167 -0.0284894 -1.21925 244 7.05974 0.0158692 -1.21887 242 7.04919 0.348312 -1.2185 242 7.05718 0.0934625 -1.2185 241 7.05763 0.0491164 -1.21849 241 7.05779 -0.00631523 -1.21849 241 7.05319 0.193155 -1.21812 241 7.05376 0.170997 -1.21812 242 7.0523 0.148786 -1.21774 243 7.04671 0.270533 -1.21736 242 7.04827 0.226251 -1.21736 242 7.05155 0.0712113 -1.21736 242 7.04557 0.248315 -1.21698 242 7.04881 0.126546 -1.21698 242 7.35436 -0.672884 -1.2123 103 7.27206 0.871524 -1.20113 188 7.28105 -0.631321 -1.1982 184 7.2233 0.831363 -1.19136 207 7.23008 -0.603834 -1.18843 211 7.18285 0.804002 -1.1834 219 7.1947 -0.57799 -1.18156 220 7.15991 0.778761 -1.1787 223 7.57928 -0.709675 -1.17848 105 7.17578 -0.542371 -1.17758 223 7.54373 0.959774 -1.17715 149 7.14002 0.742657 -1.17436 225 7.15783 -0.518333 -1.17396 224 7.13057 0.719078 -1.17219 227 7.14961 -0.495128 -1.17216 227 7.13936 -0.471844 -1.16999 226 7.11517 0.695018 -1.16893 229 7.12777 -0.437302 -1.16745 228 7.10269 0.66008 -1.16604 228 7.10081 0.637427 -1.16531 228 7.11732 -0.414178 -1.16529 227 7.0969 0.614626 -1.16423 229 7.11074 -0.391356 -1.16384 229 7.10464 -0.357419 -1.16239 227 7.08507 0.591234 -1.1617 226 7.07404 0.556812 -1.15916 225 7.08805 -0.334198 -1.15914 221 7.0871 -0.311835 -1.15878 226 7.06955 0.511811 -1.15771 226 7.06398 0.533741 -1.15699 223 7.0795 -0.255773 -1.15697 227 7.07867 -0.278013 -1.15697 227 7.06207 0.477863 -1.15591 227 7.07438 -0.233314 -1.15589 227 7.06157 0.455555 -1.15554 228 7.07311 -0.211022 -1.15552 228 7.0584 0.410856 -1.15446 229 7.05315 0.432802 -1.15373 228 7.06472 -0.155212 -1.15372 228 7.06223 -0.177349 -1.15336 229 7.0524 0.377198 -1.15301 230 7.05927 -0.132884 -1.15263 229 7.04962 0.354857 -1.15228 230 7.05785 -0.0995815 -1.15227 229 7.05113 0.277252 -1.15192 230 7.04826 0.299326 -1.15156 230 7.05419 -0.0773505 -1.15155 229 7.04481 0.332452 -1.1512 230 7.05257 -0.0330098 -1.15119 230 7.05243 -0.055166 -1.15119 229 7.04607 0.254907 -1.15084 229 7.05065 0.0223828 -1.15083 229 7.05068 0.000232296 -1.15083 230 7.04648 0.177375 -1.15047 229 7.4205 -0.671852 -1.15039 160 7.04504 0.155201 -1.15011 229 7.04569 0.122 -1.15011 229 7.04632 0.0777284 -1.15011 228 7.04661 0.0445226 -1.15011 228 7.0413 0.221537 -1.14975 229 7.04196 0.199415 -1.14975 230 7.04211 0.0998236 -1.14938 228 7.38057 0.91488 -1.14803 189 7.33128 -0.629283 -1.13428 226 7.30265 0.870009 -1.13364 225 7.30965 -0.604383 -1.13017 241 7.26818 0.842619 -1.12713 240 7.28794 -0.579625 -1.12606 248 7.25513 0.81796 -1.12439 248 7.21308 -0.551147 -1.1127 251 7.20773 -0.516615 -1.11133 253 7.1813 0.786521 -1.11103 250 7.17318 0.751398 -1.10897 252 7.16766 0.728034 -1.1076 253 7.19874 -0.289167 -1.10757 231 7.18769 -0.492565 -1.10756 253 7.20141 0.129432 -1.10724 247 7.19805 -0.255178 -1.10723 231 7.19897 -0.15336 -1.10689 233 7.19846 -0.175976 -1.10689 233 7.19386 -0.311625 -1.10688 229 7.18339 0.468252 -1.10656 222 7.18482 0.445683 -1.10656 218 7.19745 -0.130714 -1.10655 232 7.19488 -0.23245 -1.10654 231 7.19088 -0.334139 -1.10654 244 7.18732 0.366548 -1.10622 227 7.19587 0.106699 -1.10621 234 7.18967 -0.209695 -1.10552 230 7.18407 0.309812 -1.10519 231 7.17205 0.49011 -1.10485 223 7.1677 0.523751 -1.10451 227 7.18643 -0.074103 -1.10449 229 7.1715 -0.468889 -1.10448 255 7.16406 0.54611 -1.10417 234 7.17911 0.286984 -1.10416 231 7.18114 0.23059 -1.10416 231 7.18245 0.185466 -1.10416 230 7.18403 -0.107945 -1.10415 229 7.17237 0.388331 -1.10382 219 7.18238 0.0838804 -1.10381 231 7.18287 0.00490205 -1.10381 231 7.18269 -0.0515117 -1.10381 229 7.17323 0.331889 -1.10348 227 7.17789 0.207901 -1.10347 231 7.1793 0.15152 -1.10347 231 7.18073 0.0500124 -1.10347 231 7.17407 0.264189 -1.10313 230 7.17887 -0.0289449 -1.10312 231 7.16521 0.410502 -1.10279 214 7.17691 0.0274238 -1.10278 229 7.1638 -0.434528 -1.10277 255 7.13659 0.702112 -1.10177 255 7.15135 -0.411278 -1.10037 255 7.12413 0.666947 -1.09903 255 7.12227 0.644193 -1.09835 255 7.1408 -0.38821 -1.09832 255 7.13018 -0.365213 -1.09626 255 7.10267 0.619852 -1.09458 255 7.08785 0.584851 -1.09149 255 7.08965 0.562581 -1.09149 255 7.59758 0.965023 -1.08999 111 7.56813 -0.710037 -1.08072 95 7.71921 -0.734165 -1.07261 62 7.42806 0.920383 -1.06199 127 7.41804 -0.660179 -1.0559 104 7.52885 0.946156 -1.04662 119 7.53648 -0.693527 -1.04347 88 7.31325 0.883254 -1.04289 180 7.32174 -0.628087 -1.03999 155 7.27417 0.843927 -1.03589 183 7.29417 -0.60254 -1.03522 200 7.24145 0.817212 -1.03016 214 7.26061 -0.576679 -1.02949 217 7.22238 0.792169 -1.02666 226 7.23962 -0.540611 -1.02567 228 7.2275 -0.516827 -1.02344 230 7.1993 0.766849 -1.02252 233 7.21727 -0.49327 -1.02154 233 7.37104 0.902253 -1.02119 144 7.19301 0.731946 -1.02093 233 7.20769 -0.458458 -1.01963 235 7.18544 0.708413 -1.01934 234 7.21033 -0.379066 -1.01931 241 7.18687 0.606127 -1.01806 240 7.37821 -0.644474 -1.01805 131 7.2036 -0.355995 -1.01804 242 7.18283 0.583089 -1.01711 241 7.19136 -0.434677 -1.01676 236 7.19072 -0.411964 -1.01645 228 7.16797 0.684032 -1.01616 234 7.19088 -0.332675 -1.01581 241 7.17565 0.548516 -1.01552 240 7.18991 -0.309992 -1.01549 241 7.16325 0.649564 -1.01488 234 7.18735 -0.275939 -1.01486 242 7.17143 0.52556 -1.01456 240 7.18423 -0.253206 -1.01422 240 7.1714 0.46898 -1.01392 239 7.16714 0.502636 -1.01361 240 7.15542 0.626229 -1.01329 229 7.18008 -0.196587 -1.01327 239 7.17907 -0.230421 -1.01327 239 7.16495 0.44598 -1.01265 239 7.16632 0.42347 -1.01265 238 7.17722 -0.151374 -1.01263 240 7.17474 -0.173865 -1.01232 238 7.16232 0.389397 -1.01169 238 7.17174 -0.128699 -1.01168 239 7.15956 0.366707 -1.01106 240 7.28755 0.868499 -1.00755 201 7.30536 -0.615251 -1.00627 217 7.67634 -0.709471 -1.00302 116 7.27771 -0.590009 -1.00162 224 7.63946 0.956944 -1.0016 147 7.24054 0.82813 -0.999491 225 7.2607 -0.554276 -0.998523 229 7.25649 -0.531053 -0.997594 231 7.07586 0.340442 -0.997373 255 7.22741 0.803571 -0.99701 229 7.224 0.780205 -0.996079 232 7.23644 -0.50681 -0.994184 235 7.05431 0.239601 -0.993233 255 7.0473 0.316987 -0.992599 255 7.20402 0.743637 -0.992358 233 7.22616 -0.483327 -0.992325 235 7.04477 0.283631 -0.991962 255 7.04168 0.261364 -0.991325 255 7.1965 0.719984 -0.990807 235 7.03562 0.205853 -0.99005 255 7.03802 -0.0926343 -0.990042 255 7.21707 -0.369013 -0.989848 241 7.21258 -0.448344 -0.989845 238 7.21328 -0.402913 -0.989537 234 7.21198 -0.425574 -0.989536 239 7.03228 0.183661 -0.989413 255 7.0327 0.00688324 -0.98909 255 7.19415 0.617116 -0.988944 241 7.03023 0.0841959 -0.988774 255 7.18496 0.695986 -0.988636 238 7.0269 0.161448 -0.988458 255 7.02759 0.128335 -0.988457 255 7.20938 -0.323248 -0.988299 243 7.024 0.106213 -0.98782 255 7.1909 0.559956 -0.987702 241 7.02256 0.0620667 -0.987501 255 7.02282 -0.0151549 -0.987499 255 7.02267 -0.048247 -0.987498 255 7.2049 -0.289057 -0.987369 243 7.0208 0.0289707 -0.987182 255 7.20043 -0.345551 -0.987058 242 7.20182 -0.26629 -0.98675 244 7.20065 -0.243605 -0.98644 243 7.01458 -0.0701996 -0.986224 255 7.17834 0.592986 -0.986153 242 7.1994 -0.220927 -0.986131 243 7.18627 0.457448 -0.985839 244 7.19839 -0.186956 -0.985822 243 7.16745 0.671494 -0.985535 238 7.17054 0.637713 -0.985534 232 7.17883 0.536284 -0.985531 243 7.18085 0.479743 -0.98522 243 7.18506 0.412045 -0.985218 243 7.17457 0.513278 -0.984601 243 7.19104 -0.164187 -0.984583 243 7.17706 0.377626 -0.983667 243 7.1719 0.433859 -0.983359 244 7.46366 0.911727 -0.974823 141 7.12632 -0.140548 -0.974352 245 7.10718 0.351306 -0.972506 250 7.42245 -0.661625 -0.964777 187 7.05578 -0.106155 -0.963193 255 7.36763 0.865129 -0.959816 92 6.99379 0.323258 -0.954524 255 6.99326 0.29021 -0.954213 255 6.99773 0.147356 -0.954209 255 6.99878 -0.0835187 -0.954202 255 6.99216 0.268157 -0.953902 255 6.99297 0.24619 -0.953901 255 6.9967 0.0923546 -0.953897 255 6.99695 0.0703747 -0.953896 255 6.9973 -0.00656267 -0.953894 255 6.99208 0.213162 -0.953591 255 6.99523 0.0373823 -0.953586 255 6.99527 -0.0285433 -0.953584 255 6.99506 -0.0615122 -0.953583 255 6.99074 0.191134 -0.95328 255 6.99131 0.169172 -0.953279 255 6.99242 0.114258 -0.953278 255 6.99334 0.0153955 -0.953275 255 7.3309 -0.618325 -0.950655 68 7.26868 0.807612 -0.94422 76 7.27352 -0.567266 -0.941535 72 7.26579 -0.589612 -0.940652 57 7.26625 -0.532226 -0.940065 83 7.22517 0.768499 -0.937158 85 7.24618 -0.507797 -0.936829 76 7.22361 0.745406 -0.936569 106 7.23936 -0.461593 -0.935359 65 7.2359 -0.484195 -0.935064 56 7.23553 -0.427102 -0.934477 147 7.22696 -0.403782 -0.933007 206 7.20032 0.720242 -0.932743 116 7.20781 0.641026 -0.932741 138 7.19773 0.685757 -0.93186 140 7.1959 0.662794 -0.931271 165 7.19598 0.617247 -0.930681 204 7.71398 -0.691024 -0.929197 117 7.6694 0.958093 -0.927048 173 7.18542 0.140934 -0.925372 255 7.17753 0.276201 -0.924787 255 7.1822 0.0957412 -0.924782 255 7.17677 0.242317 -0.924492 255 7.1775 0.219767 -0.924491 255 7.17874 0.174668 -0.92449 255 7.18076 -0.0396305 -0.924484 255 7.18037 -0.0847483 -0.924483 255 7.15512 -0.37696 -0.922121 246 7.12189 0.577374 -0.919205 248 7.1173 -0.341199 -0.916238 254 7.11439 -0.318646 -0.91565 255 7.09605 0.552944 -0.915085 254 7.11225 -0.217837 -0.91477 255 7.11153 -0.240179 -0.914769 255 7.10942 -0.296025 -0.914768 255 7.10876 -0.26244 -0.914474 255 7.09183 0.530229 -0.914202 255 7.09723 0.45222 -0.9142 255 7.09862 0.429923 -0.914199 255 7.11026 -0.139525 -0.914183 255 7.10894 -0.195369 -0.914182 255 7.09228 0.496671 -0.913907 255 7.09183 0.474264 -0.913612 255 7.10385 -0.161709 -0.9133 255 7.08711 0.351117 -0.911843 255 7.07807 0.372992 -0.910667 255 7.06501 0.394607 -0.908902 255 7.03748 -0.115715 -0.903298 255 7.51772 -0.638421 -0.9015 69 7.00172 0.314136 -0.898896 255 7.00186 0.115989 -0.898008 255 7.00272 0.0389953 -0.898006 255 6.99687 0.0170043 -0.897123 255 6.99687 -0.0159693 -0.897122 255 7.45755 0.895217 -0.896879 89 6.99466 -0.0599079 -0.896826 255 6.98685 0.291538 -0.896542 255 6.9883 0.19269 -0.896245 255 6.99069 0.0609375 -0.896241 255 7.34785 -0.601348 -0.877642 126 7.32844 0.727755 -0.876581 160 7.29511 0.851899 -0.873842 160 7.32185 -0.553035 -0.873529 229 7.3181 -0.575886 -0.873255 194 7.30856 -0.517462 -0.871336 226 7.27217 0.82598 -0.870276 189 7.27843 0.768836 -0.870275 158 7.30026 -0.493865 -0.869966 193 7.27687 0.74555 -0.869725 136 7.25898 0.801336 -0.868082 158 7.20955 0.681217 -0.859577 181 7.22466 -0.46623 -0.859271 107 7.22612 -0.409369 -0.858998 178 7.21688 -0.431623 -0.857901 196 7.20956 -0.385776 -0.856531 221 7.18799 0.656319 -0.856285 185 7.18804 0.633551 -0.85601 205 7.2048 -0.362847 -0.855709 225 7.17911 0.598642 -0.854364 222 7.19455 -0.328392 -0.854064 228 7.17306 0.575421 -0.853266 228 7.18763 -0.30548 -0.852968 220 7.16693 0.552247 -0.852169 224 7.16468 0.529424 -0.851619 151 7.16269 0.47272 -0.850795 240 7.16678 -0.28212 -0.849952 180 7.16605 -0.248283 -0.849678 225 7.14338 0.493931 -0.848328 221 7.84364 -0.69855 -0.846099 40 7.13216 0.189831 -0.844754 213 7.11792 0.312563 -0.843386 251 7.12279 0.0104778 -0.843104 251 7.12248 -0.0678408 -0.843102 251 7.12208 -0.101404 -0.843101 251 7.1213 -0.146151 -0.843099 252 7.11974 -0.123751 -0.842826 252 7.11097 0.334621 -0.842564 253 7.11869 -0.0454537 -0.842554 252 7.11684 -0.168444 -0.84255 253 7.1153 -0.224334 -0.842549 250 7.10733 0.368019 -0.842291 253 7.11095 0.289846 -0.842289 252 7.11182 0.267506 -0.842288 251 7.11301 0.233992 -0.842287 251 7.10416 0.390228 -0.842017 253 7.11484 -0.0230909 -0.842006 251 7.10093 0.412425 -0.841744 253 7.11119 0.155663 -0.841736 250 7.11268 0.0551184 -0.841734 254 7.11282 0.0327729 -0.841733 251 7.10777 0.211447 -0.841464 252 7.10805 -0.201783 -0.841452 253 7.10609 0.110865 -0.840912 255 7.091 0.445355 -0.840647 254 7.10372 0.133144 -0.840639 255 7.09847 0.088412 -0.839815 255 7.72046 0.907389 -0.832502 75 7.44945 0.81721 -0.794792 164 7.44354 0.852088 -0.794525 59 7.44796 -0.603058 -0.791811 92 10.0998 1.06264 -0.790708 40 8.08161 0.969586 -0.788867 60 8.10725 -0.701978 -0.788576 187 10.0588 1.09038 -0.786968 41 7.40833 -0.576283 -0.786196 235 10.0393 1.00863 -0.78421 40 7.35931 0.784258 -0.782221 237 9.99595 1.11551 -0.781063 61 10.0267 -0.793064 -0.781013 40 9.97278 1.16057 -0.779292 80 7.33807 0.758769 -0.779011 236 7.35478 -0.548683 -0.778708 243 7.34461 -0.524685 -0.777104 243 7.32578 0.722682 -0.776871 239 7.97812 0.932099 -0.775638 144 7.33118 -0.488957 -0.774966 244 7.31222 0.698214 -0.774731 243 7.31438 0.67524 -0.77473 243 7.31884 -0.464995 -0.773094 246 7.31831 -0.407264 -0.772561 232 7.31631 -0.441746 -0.77256 246 7.29181 0.638602 -0.771252 245 7.2681 -0.381387 -0.765608 193 7.26682 -0.278352 -0.764809 248 7.24439 0.6117 -0.764566 231 7.24035 0.588479 -0.763763 229 7.25541 -0.357818 -0.763737 217 7.24909 -0.323243 -0.762668 217 7.23288 0.530768 -0.762156 193 7.24587 -0.254678 -0.761868 251 7.22635 0.564553 -0.761622 229 7.24215 -0.300111 -0.761599 203 7.24171 -0.197573 -0.761067 251 7.24105 -0.220327 -0.761066 251 7.22462 0.507381 -0.760819 225 7.22977 0.427914 -0.760816 250 7.23107 0.4052 -0.760816 249 7.24146 -0.117901 -0.760801 250 7.2242 0.484558 -0.76055 205 7.23206 0.348304 -0.760547 247 7.23626 0.246034 -0.760544 248 7.23833 -0.174713 -0.760533 250 7.22835 0.382287 -0.76028 249 7.23347 0.268698 -0.760277 249 7.23598 0.189148 -0.760275 250 7.23809 -0.072345 -0.760268 251 7.23783 -0.0950825 -0.760267 251 7.22915 0.325419 -0.760011 248 7.23014 0.302708 -0.760011 248 7.23303 0.223189 -0.760008 249 7.23456 0.166374 -0.760007 247 7.23511 -0.140512 -0.759999 251 7.22047 0.450159 -0.759747 231 7.23449 0.00725759 -0.759735 248 7.23448 -0.0154724 -0.759734 248 7.23439 -0.0381988 -0.759734 249 7.23239 0.041343 -0.759469 245 7.53729 0.87147 -0.758841 65 7.21168 0.120606 -0.756796 220 7.21019 0.0866055 -0.756528 141 7.20844 0.0639375 -0.75626 222 7.19938 0.143067 -0.755192 206 7.52393 -0.624624 -0.753959 74 7.36264 0.827232 -0.735904 173 7.38542 -0.590256 -0.735866 107 7.63678 -0.635556 -0.730037 64 7.32986 -0.56285 -0.728476 191 7.29424 0.796099 -0.726729 160 7.2904 0.737749 -0.725453 246 7.30833 -0.503583 -0.725164 251 7.57395 0.850057 -0.724933 65 7.29997 -0.480005 -0.723891 254 7.27887 0.71344 -0.723668 253 9.98326 1.02934 -0.723172 40 7.2782 0.678747 -0.723158 255 7.29423 -0.445144 -0.722872 255 7.28494 -0.525049 -0.72236 243 9.96612 1.05919 -0.721872 40 9.98737 -0.811203 -0.721637 40 7.25847 0.757457 -0.721631 225 7.26845 0.65477 -0.721628 255 7.28569 -0.421688 -0.721599 255 7.28104 -0.398493 -0.720835 255 7.25466 0.630503 -0.719589 255 7.27292 -0.363718 -0.719561 255 7.25266 0.607364 -0.719078 255 9.92223 1.1649 -0.718901 170 7.2661 -0.340524 -0.718543 255 9.95453 -0.745707 -0.718108 40 7.26119 -0.317457 -0.717779 255 7.23567 0.571543 -0.716529 255 7.23743 0.548809 -0.716528 255 9.92036 -0.774579 -0.715134 40 7.24035 -0.293837 -0.714976 255 7.22767 0.490959 -0.714743 255 7.23967 -0.25965 -0.714722 255 7.2345 -0.236731 -0.713958 255 7.21538 0.524261 -0.713469 255 7.21477 0.444503 -0.712703 255 7.21136 0.467034 -0.712448 255 7.22331 -0.213693 -0.71243 255 7.22225 -0.17961 -0.712176 255 7.2121 0.387485 -0.711936 255 7.20689 0.409903 -0.711427 255 7.48736 -0.587087 -0.711177 75 7.45419 0.813335 -0.709746 141 7.20295 -0.15656 -0.709628 255 7.19149 0.363646 -0.709132 255 7.18864 0.34085 -0.708622 255 7.19016 0.306973 -0.708621 255 7.19195 0.261786 -0.70862 255 7.1931 0.227893 -0.708619 255 7.19379 0.205292 -0.708618 255 7.1963 -0.0772943 -0.708611 255 7.19602 -0.0999019 -0.70861 255 7.19547 -0.133811 -0.708609 255 7.18911 0.284292 -0.708366 255 7.19362 0.126141 -0.708361 255 7.19427 0.0809387 -0.70836 255 7.19458 0.0470376 -0.708359 255 7.19473 0.00182896 -0.708358 255 7.19452 -0.0546781 -0.708356 255 7.19043 0.182578 -0.708108 255 7.19121 0.14869 -0.708107 255 7.19271 0.0244223 -0.708104 255 7.19268 -0.0320738 -0.708102 255 7.19002 0.103467 -0.707851 255 7.81824 -0.621581 -0.705828 85 7.39747 0.783843 -0.702397 79 7.38627 -0.55546 -0.698441 125 9.20219 0.331202 -0.696981 40 9.18737 0.402975 -0.695802 40 7.35631 -0.52986 -0.694523 95 7.68498 0.866313 -0.693039 85 9.15536 0.358451 -0.692454 63 7.31416 0.740487 -0.691618 114 7.31715 -0.492243 -0.68938 147 7.30425 -0.445235 -0.687421 237 7.27693 0.713769 -0.686718 156 7.28976 -0.421314 -0.685462 240 7.26727 0.689822 -0.685248 195 7.27247 0.632727 -0.685247 238 7.28499 -0.466974 -0.685216 220 7.25556 0.665769 -0.683533 225 7.2659 -0.385498 -0.682279 245 7.61214 -0.58183 -0.681337 80 7.24276 0.607331 -0.681327 242 7.24463 0.584575 -0.681326 243 7.25122 -0.361821 -0.68032 246 7.22751 0.548999 -0.678876 245 7.2325 -0.338041 -0.677872 248 7.22211 -0.303412 -0.676403 247 7.20903 0.502137 -0.67618 247 7.20544 0.524644 -0.675936 247 7.20934 0.468037 -0.675934 246 7.21906 -0.280553 -0.675913 248 7.21015 0.42262 -0.675688 247 7.21793 -0.257794 -0.675669 248 7.20681 0.445156 -0.675443 245 7.21688 -0.15563 -0.675182 247 7.21473 -0.234973 -0.67518 250 7.53697 0.813163 -0.675077 115 7.2055 0.399659 -0.674952 246 7.21555 -0.121579 -0.674938 247 7.21437 -0.178246 -0.674936 249 7.21378 -0.20091 -0.674936 248 7.20532 0.365609 -0.674706 245 7.20643 0.342972 -0.674706 246 7.20351 0.320164 -0.674215 247 7.21022 -0.0761558 -0.674204 248 7.20382 0.263513 -0.673969 247 7.20796 -0.0987727 -0.673959 248 7.20097 0.286072 -0.673725 246 7.20484 0.16161 -0.673721 245 7.20231 0.184201 -0.673477 246 7.20466 0.00314701 -0.673472 246 7.20454 -0.0421212 -0.67347 248 7.19938 0.218086 -0.673233 246 7.20263 0.0257812 -0.673227 249 7.19935 0.138882 -0.672985 246 7.19993 0.104954 -0.672985 246 7.19469 0.240584 -0.672743 245 7.19824 0.0823185 -0.672739 248 7.19648 0.0596947 -0.672493 246 7.1967 -0.0194371 -0.672491 247 7.49787 -0.537969 -0.667575 105 7.44272 0.77901 -0.663646 163 7.40957 0.751892 -0.659447 90 7.41429 -0.508861 -0.657546 131 7.39751 -0.4611 -0.655215 109 7.39405 -0.484214 -0.654981 129 7.3719 0.666102 -0.654079 94 7.3877 -0.425591 -0.653816 95 7.35989 0.688301 -0.652914 97 7.35374 0.711021 -0.652448 94 7.36718 -0.401268 -0.651251 100 7.34824 0.640607 -0.651046 106 7.36047 -0.377742 -0.650319 101 7.35329 -0.319526 -0.649154 110 7.35026 -0.34254 -0.64892 101 7.32941 0.604102 -0.64848 120 7.34036 -0.295912 -0.647522 110 7.31742 0.579927 -0.646846 100 7.31976 0.522286 -0.646611 107 7.31326 0.556458 -0.646146 96 7.3075 0.498292 -0.644978 101 7.3085 0.452238 -0.644743 102 7.31664 -0.237506 -0.644491 117 7.31586 -0.260491 -0.64449 119 7.30308 0.474925 -0.644277 97 7.31537 -0.214468 -0.644258 110 7.30262 0.417311 -0.643809 105 7.30608 -0.19126 -0.643092 115 7.30537 -0.133843 -0.642861 108 7.29122 0.370664 -0.642175 110 7.29895 -0.156687 -0.64216 110 7.28208 0.393112 -0.641242 107 7.29249 -0.0534574 -0.64123 110 7.28296 0.335808 -0.641008 110 7.74762 -0.577204 -0.640845 70 7.28788 -0.110684 -0.640762 112 7.27605 0.312557 -0.640074 114 7.27501 0.289611 -0.63984 103 7.2806 0.0495166 -0.639833 108 7.28037 -0.076285 -0.63983 106 7.27872 -0.0305384 -0.639598 120 7.27034 0.255094 -0.639139 103 7.2711 0.232253 -0.639139 100 7.27481 -0.00768144 -0.639132 111 7.26981 0.209344 -0.638905 99 7.73564 -0.490789 -0.638877 40 7.26845 0.186446 -0.638671 100 7.26969 0.129355 -0.638669 103 7.26807 0.106479 -0.638435 106 7.26849 0.072228 -0.638434 105 7.26483 0.0265287 -0.637967 110 7.2613 0.151998 -0.637737 106 7.67241 0.794316 -0.634752 61 7.6582 -0.54605 -0.630776 89 8.0706 0.626621 -0.630502 71 7.64482 -0.508844 -0.629026 118 7.64254 -0.376155 -0.627935 40 7.60483 0.75136 -0.62687 77 7.60121 0.726919 -0.626213 114 7.5995 0.70268 -0.625775 105 8.02691 0.59772 -0.625727 115 8.02478 0.572202 -0.625311 67 8.02144 0.533966 -0.624687 75 7.61445 -0.338712 -0.624652 40 7.60819 -0.458273 -0.624649 40 7.60775 0.0681652 -0.623131 40 7.59808 0.175552 -0.622258 40 7.59557 0.091964 -0.621818 40 7.98735 0.506383 -0.62095 118 7.57652 -0.42043 -0.620929 40 7.96647 0.655993 -0.619916 103 7.57364 0.198875 -0.619632 40 7.97718 0.442815 -0.619496 73 7.56193 -0.395741 -0.619178 40 7.96905 0.480029 -0.618874 68 7.56126 0.127305 -0.618097 53 7.56233 0.00851785 -0.618094 54 7.55288 0.150926 -0.617222 55 7.55028 0.0441272 -0.616782 84 7.79119 0.801505 -0.603107 76 7.8126 -0.463694 -0.602451 155 7.7971 -0.548908 -0.601411 76 7.77067 -0.35121 -0.597472 40 7.74756 -0.484481 -0.595808 221 7.74321 -0.520858 -0.595599 145 7.71255 0.768666 -0.594596 177 7.72066 0.659382 -0.594385 45 7.74424 -0.264829 -0.594361 40 7.72931 -0.15502 -0.592495 40 7.68721 0.741658 -0.591689 190 7.71322 -0.239615 -0.59104 40 7.70368 0.378198 -0.590641 40 7.67874 0.704297 -0.590443 175 7.69963 -0.287669 -0.589793 40 7.69621 -0.323874 -0.589585 40 7.69299 -0.178598 -0.588758 40 7.69239 -0.202764 -0.588758 40 7.68061 0.401182 -0.588359 45 7.67087 -0.0696893 -0.58627 40 7.66631 -0.117835 -0.585854 40 7.65312 -0.430643 -0.585638 64 7.65925 -0.00946631 -0.585026 40 7.65868 -0.0936809 -0.585024 40 7.6569 0.0747269 -0.584821 40 7.64633 -0.370079 -0.584602 54 7.64917 -0.0455321 -0.583988 40 7.64532 0.0145244 -0.583574 40 7.63122 -0.393428 -0.583148 95 7.63273 0.266361 -0.582751 40 7.63674 0.0984559 -0.582746 40 7.62536 0.350076 -0.582338 40 7.6333 0.0384407 -0.582329 40 7.61783 0.158003 -0.580879 40 7.61332 0.181824 -0.580465 40 7.61253 0.121982 -0.580256 40 7.60675 0.205558 -0.579843 40 7.59315 0.31263 -0.578808 40 7.59409 0.288772 -0.578807 40 7.5663 0.228118 -0.575692 40 7.93872 0.464255 -0.572765 88 7.93617 0.439107 -0.57237 83 7.89456 0.773695 -0.570805 40 7.91338 0.4878 -0.570403 83 7.86879 -0.529769 -0.566242 67 7.83551 0.520329 -0.562923 83 7.81994 0.54402 -0.561546 46 7.8124 0.592853 -0.561153 44 7.80356 0.629203 -0.560564 41 7.80429 0.567619 -0.560168 45 7.8029 -0.50049 -0.559549 172 7.80245 -0.475846 -0.559353 40 7.80996 -0.279541 -0.559161 40 7.80506 -0.303907 -0.558767 40 7.80716 -0.168956 -0.558574 40 7.80323 -0.24246 -0.558375 40 7.80062 -0.193315 -0.557982 40 7.76019 0.736374 -0.55722 163 7.79202 -0.217572 -0.557194 40 7.78816 -0.327704 -0.557191 40 7.7585 0.711642 -0.556825 131 7.77212 -0.449387 -0.556204 40 7.76665 -0.363404 -0.555222 40 7.76608 -0.131318 -0.55444 40 7.76048 -0.106812 -0.55385 40 7.74884 -0.0822661 -0.55267 40 7.7372 -0.0456412 -0.55149 40 7.73332 -0.0213108 -0.551096 40 7.72738 0.0030043 -0.550507 40 7.70262 -0.40872 -0.549118 42 7.70897 0.0878248 -0.548737 40 7.70523 0.0635878 -0.548343 40 7.69871 0.111934 -0.547754 40 7.69202 0.23274 -0.547363 40 7.68963 0.172241 -0.546968 40 7.68706 0.196359 -0.546771 40 7.68952 0.0272729 -0.546767 40 7.68001 -0.383248 -0.546756 42 7.68615 0.14802 -0.546573 40 8.0802 0.0889613 -0.540661 40 7.90008 0.459243 -0.525062 96 7.90154 -0.248773 -0.524299 40 7.88506 -0.508994 -0.523921 87 7.85889 0.779791 -0.523584 133 7.85411 0.493572 -0.520974 86 7.84887 0.542764 -0.52079 80 7.85494 -0.272161 -0.520024 40 7.84487 -0.481795 -0.520019 215 7.83124 0.56622 -0.519304 78 7.83465 0.517003 -0.519302 84 7.8206 0.627211 -0.518748 47 7.80699 0.737316 -0.518379 214 7.81856 0.602318 -0.518376 99 7.82992 0.430245 -0.518371 47 7.8326 -0.222203 -0.517796 40 7.81933 -0.19729 -0.516496 40 7.80737 0.40433 -0.51614 40 7.77755 0.709786 -0.515405 210 7.80951 -0.0743701 -0.515384 40 7.8031 -0.111106 -0.514826 40 7.78676 -0.41707 -0.51426 40 7.79378 -0.0497867 -0.513898 40 7.7879 -0.306806 -0.513891 40 7.78143 -0.441319 -0.513888 40 7.7919 -0.0253017 -0.513713 40 7.7903 -0.159926 -0.513709 40 7.778 0.0113502 -0.512413 40 7.75891 -0.135004 -0.510737 40 7.74753 0.36443 -0.510379 40 7.74768 0.315655 -0.510191 40 7.74312 -0.329555 -0.509802 73 7.73923 0.120588 -0.508885 40 7.73117 0.278434 -0.508518 40 7.72477 0.338958 -0.508148 40 7.72488 0.144598 -0.507585 40 7.72007 0.253713 -0.507402 40 7.72083 0.229457 -0.507401 40 7.71554 0.205022 -0.506843 40 7.71642 0.168663 -0.506842 40 7.70449 -0.388673 -0.506456 55 7.69827 -0.352025 -0.505713 92 7.70225 0.0351843 -0.505352 44 8.06949 -0.298962 -0.489012 40 8.03789 0.752492 -0.488867 166 8.05148 -0.501135 -0.488314 68 8.02732 -0.43628 -0.485891 66 7.97711 0.595607 -0.482454 40 7.98341 -0.471501 -0.482252 194 7.95598 0.707299 -0.481418 148 7.96498 -0.407593 -0.480348 50 7.95087 0.543532 -0.479855 64 7.96287 -0.269618 -0.479659 40 7.96007 -0.231962 -0.479314 40 7.93036 0.680006 -0.478992 60 7.94443 0.45543 -0.478813 66 7.93898 0.480163 -0.478467 66 7.9508 -0.206662 -0.478448 40 7.93123 0.567285 -0.478296 90 7.9255 0.50438 -0.477429 109 7.91559 0.616219 -0.477258 43 7.92553 -0.0315752 -0.476028 40 7.91954 -0.18085 -0.475678 40 7.91707 -0.0937003 -0.475334 40 7.91533 -0.0688037 -0.475161 40 7.90876 -0.118427 -0.47464 40 7.90812 -0.155695 -0.474639 40 7.89402 0.390539 -0.474134 40 7.89278 0.278713 -0.473612 40 7.88733 0.0802092 -0.47274 40 7.88773 -0.00652004 -0.472738 40 7.87967 0.253513 -0.472398 40 7.87584 -0.353133 -0.472382 68 7.87132 0.36471 -0.472055 40 7.87043 0.3399 -0.471881 40 7.87758 0.0553928 -0.471873 40 7.87144 -0.315755 -0.471864 67 7.87281 0.216186 -0.471705 40 7.87401 0.166715 -0.471703 40 7.87376 0.0182738 -0.471526 40 7.86747 0.191326 -0.471184 40 7.85516 0.104668 -0.469969 40 7.84805 0.301967 -0.469802 40 7.84101 0.412785 -0.469632 40 7.8508 0.129293 -0.469624 40 7.84086 -0.376139 -0.469437 75 8.23015 -0.422874 -0.460018 40 8.13779 0.760256 -0.454519 57 8.11387 -0.468392 -0.450743 59 8.10535 -0.442388 -0.44993 149 8.08813 0.640223 -0.449634 40 8.05678 0.726891 -0.447685 141 8.06508 0.574607 -0.447355 40 8.05632 0.612134 -0.446868 40 8.07013 -0.389746 -0.446841 40 8.06808 -0.237358 -0.446194 40 8.06729 -0.262704 -0.446193 40 8.06159 -0.00919356 -0.445387 40 8.03869 0.521888 -0.444913 40 8.05375 -0.173692 -0.444894 40 8.03105 0.546714 -0.444426 40 8.04827 -0.148299 -0.444407 40 8.02913 0.483244 -0.443936 40 8.03603 -0.350266 -0.443913 40 8.03092 -0.211137 -0.443103 40 8.02965 0.0285791 -0.442784 40 8.02963 -0.0344862 -0.442783 40 8.02948 -0.059712 -0.442782 40 8.02242 0.23023 -0.442465 40 8.01401 0.166975 -0.441649 40 8.01317 -0.0974073 -0.44148 40 7.99877 0.456098 -0.441332 40 8.00243 0.342884 -0.441166 40 8.00883 -0.122533 -0.441153 40 7.99514 0.103705 -0.440021 40 7.99543 0.0785871 -0.44002 40 7.98729 -0.323165 -0.439847 44 7.98966 0.0534087 -0.439531 40 7.97663 0.141005 -0.438557 40 7.96961 0.190958 -0.438071 40 7.96038 -0.297121 -0.43757 43 8.71202 -0.486472 -0.429533 194 8.23884 -0.406717 -0.394485 97 8.23155 -0.432268 -0.394045 104 8.21875 -0.366843 -0.392873 85 8.21588 -0.340841 -0.392581 43 8.18401 0.664901 -0.391727 64 8.17592 0.690123 -0.391288 64 8.16418 0.637545 -0.390113 75 8.16416 0.611749 -0.389966 95 8.1488 0.546338 -0.388497 102 8.14108 0.571538 -0.388058 145 8.14451 0.520374 -0.388057 118 8.15807 -0.222779 -0.388037 121 8.15899 0.0464012 -0.387898 126 8.15114 -0.3123 -0.387742 43 8.14089 0.481656 -0.387616 122 8.14376 0.430491 -0.387614 115 8.15205 -0.132906 -0.387453 118 8.14561 -0.158379 -0.387012 116 8.13573 0.391664 -0.38688 112 8.14308 -0.183916 -0.386865 116 8.13604 0.340464 -0.386732 107 8.13294 0.365938 -0.386586 108 8.13906 -0.0431459 -0.386429 105 8.13659 0.097469 -0.386286 110 8.13689 -0.0686906 -0.386281 122 8.13648 -0.107036 -0.386281 110 8.13132 0.250762 -0.386143 113 8.13206 0.225213 -0.386142 113 8.13287 0.0718855 -0.385992 114 8.1265 0.276182 -0.385851 116 8.13118 -0.0175309 -0.385843 110 8.11647 0.454712 -0.385709 112 8.11913 0.314263 -0.385412 106 8.12306 0.186694 -0.385408 107 8.12518 0.020792 -0.385404 107 8.12208 0.135628 -0.38526 108 8.11364 0.161009 -0.384674 103 8.11067 -0.272344 -0.384663 50 8.46217 -0.411372 -0.363507 71 8.43565 0.718261 -0.36313 100 8.45345 -0.384364 -0.36283 110 8.41815 -0.26369 -0.360124 152 8.38923 0.674353 -0.359743 109 8.40278 -0.355768 -0.359309 110 8.3754 0.646717 -0.358658 100 8.38841 -0.315618 -0.358227 103 8.37739 -0.28889 -0.357415 112 8.34953 0.618254 -0.356761 117 8.33821 0.551551 -0.355676 98 8.33353 0.590692 -0.355541 126 8.31761 0.497644 -0.354049 99 8.32278 -0.169434 -0.35349 94 8.32128 -0.143256 -0.353355 97 8.30207 0.522854 -0.353101 129 8.30732 0.431539 -0.353099 92 8.31816 -0.0778713 -0.353086 94 8.31388 -0.103968 -0.352814 96 8.29795 0.457169 -0.352558 126 8.29468 0.404715 -0.35215 113 8.30019 0.0787034 -0.351871 102 8.30055 0.0135079 -0.351869 91 8.29242 -0.0516599 -0.351325 101 8.28255 0.364959 -0.351201 113 8.28365 0.338938 -0.3512 113 8.28562 0.22174 -0.351062 129 8.28858 -0.0125871 -0.351056 101 8.28069 0.312751 -0.350929 118 8.2789 0.247573 -0.350656 99 8.28029 0.19555 -0.350655 97 8.27365 0.286435 -0.350386 128 8.27396 0.104369 -0.35011 170 8.2696 0.130285 -0.34984 49 8.26655 0.0393152 -0.349567 130 8.26317 0.15613 -0.349435 112 8.21981 -0.219328 -0.34658 55 8.60711 0.689223 -0.326254 69 8.61965 -0.394685 -0.325852 71 8.59633 0.6205 -0.325258 167 8.59404 -0.339332 -0.324114 117 8.54951 0.657768 -0.322526 69 8.56301 -0.364963 -0.32225 56 8.55317 -0.310682 -0.321506 120 8.54656 -0.270096 -0.32101 95 8.51657 0.588099 -0.320163 89 8.50946 -0.242046 -0.31865 128 8.49049 0.559589 -0.318423 124 8.5022 -0.215087 -0.318154 133 8.48107 0.518876 -0.317677 124 8.4707 0.491574 -0.31693 115 8.47363 0.438344 -0.316929 117 8.47021 0.464858 -0.316805 114 8.47569 -0.147736 -0.316416 67 8.46085 0.371125 -0.315933 116 8.45765 0.397614 -0.31581 115 8.44877 0.0651767 -0.314683 102 8.44003 0.343718 -0.314566 115 8.44247 0.27742 -0.314564 91 8.4404 0.211017 -0.314314 102 8.43896 0.0386203 -0.314061 97 8.42959 0.303545 -0.313819 126 8.43104 0.18431 -0.313692 124 8.43203 0.131335 -0.31369 106 8.43056 0.0915857 -0.313565 104 8.42534 0.250415 -0.313445 126 8.41961 0.157636 -0.312946 115 8.41709 -0.00107482 -0.312693 73 8.39109 -0.0273554 -0.311077 54 8.38697 -0.0536773 -0.310828 59 8.34638 -0.118854 -0.308342 55 8.33873 -0.0925202 -0.307845 90 8.30156 -0.170256 -0.305607 64 9.08098 0.597478 -0.301358 174 9.08834 -0.388192 -0.301107 74 8.8457 0.55341 -0.287985 83 8.79395 0.480703 -0.284837 164 8.77548 0.451989 -0.283713 123 8.7609 0.4236 -0.282813 121 8.76724 -0.18241 -0.282685 198 8.74485 0.381477 -0.281801 125 8.74652 0.285227 -0.281686 115 8.74415 0.230148 -0.281459 131 8.74369 0.161422 -0.281345 147 8.74267 -0.209449 -0.281335 162 8.7371 0.326117 -0.281237 119 8.73939 0.257486 -0.281235 129 8.74245 -0.113287 -0.281226 147 8.74076 -0.0858079 -0.281114 162 8.72064 0.503969 -0.280793 62 8.73116 0.188594 -0.280672 145 8.73101 -0.0583104 -0.280553 162 8.72912 0.0376847 -0.280443 164 8.72915 -0.0308797 -0.280441 162 8.72007 0.352868 -0.280339 145 8.72321 0.010231 -0.280105 165 8.71963 -0.250082 -0.280098 145 8.707 0.064877 -0.279208 173 8.70283 -0.277013 -0.279199 88 8.67183 0.637837 -0.278549 53 8.67275 0.59682 -0.278435 74 8.67045 -0.344258 -0.277512 57 8.61874 0.104574 -0.274265 64 9.34605 0.45195 -0.263391 255 9.33022 -0.120686 -0.262061 228 9.2661 0.623529 -0.259856 59 8.95095 -0.213184 -0.242945 255 8.70153 -0.0697918 -0.230207 249 8.63961 0.460566 -0.227693 255 8.60377 0.0529204 -0.225255 255 8.58818 0.174303 -0.22455 56 8.58559 0.079837 -0.224345 255 8.56672 0.147011 -0.223437 98 8.55293 -0.135343 -0.222722 57 8.5344 0.482161 -0.222435 255 8.54048 -0.161949 -0.222114 228 8.51387 0.266691 -0.220912 255 8.4947 0.239441 -0.2199 255 8.32229 -0.0133243 -0.210994 91 8.31421 -0.0394068 -0.210589 96 8.968 0.738082 -0.194146 85 8.95036 0.708272 -0.193248 219 8.91071 0.676845 -0.191363 255 8.92908 -0.361169 -0.191336 255 8.92765 -0.290911 -0.191158 158 8.92669 -0.318957 -0.191157 255 8.81816 0.627755 -0.187056 80 8.68948 0.440074 -0.18077 158 8.6936 -0.133672 -0.180486 218 8.69114 -0.160952 -0.180395 219 8.68961 -0.229206 -0.180393 142 8.6721 0.466465 -0.180053 161 8.66445 0.561655 -0.179966 129 8.66618 0.534432 -0.179965 103 8.6806 -0.188069 -0.179946 172 8.65468 0.588306 -0.179608 147 8.67087 -0.256028 -0.179585 110 8.65464 0.49275 -0.179336 147 8.54448 0.270938 -0.173947 255 8.51414 0.336846 -0.172693 255 8.48991 0.389262 -0.171707 95 8.4797 0.295358 -0.171077 255 8.48211 0.215427 -0.171074 255 8.47754 0.148679 -0.170803 255 8.47504 0.175264 -0.170714 255 8.47445 0.082041 -0.170622 255 8.47267 0.055398 -0.170532 255 8.4372 0.360121 -0.169284 255 8.43745 0.240684 -0.169101 255 8.43002 0.121208 -0.168649 255 8.36871 -0.0639133 -0.165863 237 8.35293 0.0280047 -0.165148 69 8.3409 -0.0375829 -0.164608 90 8.33498 -0.0113895 -0.164339 144 9.51723 -0.0857603 -0.157215 183 9.29033 -0.419051 -0.148813 222 8.9889 0.698354 -0.137908 181 8.92823 -0.3736 -0.134801 92 8.89501 0.719444 -0.134367 97 8.91978 0.201506 -0.134277 255 8.90575 0.0752998 -0.133657 255 8.89513 0.228979 -0.133353 249 8.89148 0.103159 -0.133119 140 8.87641 0.172758 -0.132582 231 8.87796 0.0472558 -0.132579 74 8.86492 0.144712 -0.132119 154 8.32648 -0.0194617 -0.111325 67 8.32638 -0.0456186 -0.111324 74 9.28641 0.0501011 -0.0902978 255 8.89663 0.270598 -0.0778685 126 8.79249 0.0736758 -0.0743841 243 8.58774 0.233297 -0.0678808 68 8.47986 0.136745 -0.0643346 90 8.47825 0.110074 -0.0642694 96 8.47253 0.203183 -0.064143 125 8.45541 0.162848 -0.0635622 162 8.88109 0.261344 -0.0319569 255 8.87623 0.219362 -0.0317935 255 8.84689 0.190909 -0.0309805 255 8.83745 0.162962 -0.030709 255 8.83846 0.0935479 -0.0307073 255 8.81213 0.121037 -0.0300042 255 8.77073 0.0654761 -0.0288657 255 8.97556 0.265426 0.0252088 255 8.95643 0.138111 0.0256603 251 8.93499 0.0956043 0.0261095 255 8.90325 0.0671987 0.0267622 255 8.89741 0.19296 0.0268403 255 8.89198 0.16488 0.0269633 255 8.88641 0.234591 0.027043 255 8.94953 0.186428 0.0671699 108 8.93672 0.115992 0.0673917 81 8.87832 0.143301 0.0683022 253 9.02331 0.108857 0.125325 116 9.01269 0.151181 0.125415 190 8.9956 0.0801787 0.125581 102 8.96651 0.248922 0.125812 89 8.9316 0.205731 0.126141 161 8.9302 0.177625 0.12616 254 9.00792 0.072662 0.182447 121 8.90708 0.142108 0.182717 139 8.90001 0.197951 0.182732 136 8.8906 0.16983 0.18276 239 7.19197 -0.0610181 0.187381 53 7.2775 0.880123 0.230308 40 7.29057 0.905008 0.230359 40 7.29761 0.929211 0.230391 40 7.74285 -0.161307 0.231684 255 7.75168 -0.210188 0.231718 255 7.80029 -0.186825 0.231873 255 8.87893 0.167563 0.235372 255 8.88204 0.20951 0.235384 174 8.91141 0.140267 0.235477 181 8.92532 0.238716 0.235526 82 8.9798 0.113326 0.235699 76 9.0161 0.0855621 0.235817 199 +unknow 0.975088 1 0 542 -1.4433 -20.1636 -1.43725 152 -2.03421 -20.0104 -1.42897 121 -2.09501 -19.9841 -1.42735 126 -2.15694 -19.9695 -1.4267 139 -2.25079 -19.9571 -1.42654 137 -2.64633 -19.8201 -1.41939 151 -2.30122 -19.843 -1.41775 130 -2.73565 -19.7778 -1.41695 140 -2.7961 -19.7572 -1.41598 138 -2.85731 -19.7424 -1.41549 135 -2.95002 -19.7268 -1.41533 142 -3.00541 -19.674 -1.41175 138 -3.0669 -19.6625 -1.41159 138 -3.12586 -19.6351 -1.41013 139 -3.21643 -19.6083 -1.40916 139 -3.27508 -19.5804 -1.40769 141 -3.42569 -19.5364 -1.40623 139 -3.33359 -19.5524 -1.40623 146 -2.56263 -19.6622 -1.40572 136 -3.48322 -19.504 -1.40445 137 -3.54235 -19.4812 -1.40347 135 -3.59849 -19.4425 -1.4012 138 -3.68933 -19.4214 -1.40087 136 -2.33859 -19.6239 -1.40035 130 -2.49214 -19.601 -1.40003 129 -3.80594 -19.3704 -1.3986 138 -3.74507 -19.3823 -1.3986 137 -2.39759 -19.5947 -1.39856 122 -3.89405 -19.3367 -1.3973 142 -4.01265 -19.2981 -1.39617 140 -3.9516 -19.3087 -1.396 139 -4.09571 -19.242 -1.39308 142 -4.15572 -19.2271 -1.39292 139 -3.67046 -21.2989 -1.37703 192 -3.73632 -21.2814 -1.37659 194 -3.83371 -21.2478 -1.37542 191 -3.89971 -21.2317 -1.37513 194 -3.96271 -21.1998 -1.37367 191 -4.02741 -21.1774 -1.37294 191 -4.12448 -21.1445 -1.37191 196 -4.18971 -21.1256 -1.37147 192 -4.2521 -21.0928 -1.37001 188 -4.35023 -21.0666 -1.36957 187 -4.41597 -21.0509 -1.36943 188 -4.47623 -21.0096 -1.36738 188 -4.5722 -20.9747 -1.36635 186 -4.63287 -20.9368 -1.3646 180 -4.69511 -20.9066 -1.36342 179 -4.75809 -20.8801 -1.36255 178 -4.85507 -20.8516 -1.36211 181 -4.98132 -20.8013 -1.36065 181 -4.91548 -20.8149 -1.3605 181 -5.07072 -20.7427 -1.35801 179 -5.12959 -20.7016 -1.35611 176 -5.67469 -20.4119 -1.34571 176 -5.77026 -20.383 -1.34557 174 -5.60151 -20.3969 -1.34322 166 -5.88205 -20.2908 -1.34132 166 -5.81772 -20.3072 -1.34117 217 -5.939 -20.2492 -1.33956 178 -6.03264 -20.2153 -1.33912 174 -6.08396 -20.1562 -1.33605 212 -5.30504 -19.5619 -1.27824 195 -5.1436 -19.574 -1.27604 198 -5.20249 -19.5481 -1.27531 170 -5.07604 -19.5669 -1.27428 182 -5.00658 -19.5519 -1.27193 170 -4.91244 -19.5675 -1.27134 238 -5.15246 -21.0627 -1.26036 85 -2.82256 -19.7043 -1.25148 139 -2.88299 -19.6855 -1.25075 145 -2.43602 -19.6372 -1.24282 255 -2.70979 -19.5752 -1.24092 151 -2.36972 -19.6072 -1.24003 177 -2.58464 -19.576 -1.23974 216 -2.30764 -19.6106 -1.23974 204 -1.99769 -19.6285 -1.23855 232 -2.14848 -19.5825 -1.23636 147 -2.20841 -19.5618 -1.23533 202 -1.50513 -20.4472 -1.18007 93 -5.32316 -19.6051 -1.16745 121 -5.38367 -19.5845 -1.16718 119 -5.10128 -19.6393 -1.16582 93 -5.22406 -19.6049 -1.16569 161 -5.15638 -19.5981 -1.16406 186 -4.99446 -19.607 -1.16189 248 -4.71123 -19.6524 -1.16025 136 -4.92268 -19.582 -1.15904 128 -4.86066 -19.5954 -1.1589 149 -4.64262 -19.6379 -1.15822 163 -4.57685 -19.6349 -1.157 190 -4.47898 -19.6329 -1.15537 201 -4.41249 -19.6255 -1.15388 205 -4.34609 -19.6178 -1.15238 204 -4.27936 -19.608 -1.15076 204 -4.18195 -19.6045 -1.14913 202 -4.11708 -19.6019 -1.14804 206 -4.05347 -19.605 -1.14736 204 -2.12797 -19.9062 -1.14731 115 -3.95555 -19.5965 -1.14547 212 -3.67776 -19.6485 -1.14532 255 -3.89242 -19.601 -1.14492 229 -3.61351 -19.6462 -1.14437 255 -3.54966 -19.6457 -1.14356 255 -3.82627 -19.5896 -1.14329 248 -3.72761 -19.5741 -1.14099 255 -2.73534 -19.707 -1.13893 88 -3.44366 -19.5855 -1.13827 255 -3.38212 -19.5962 -1.13827 248 -3.32021 -19.6048 -1.13813 235 -3.2265 -19.6123 -1.13759 230 -3.16235 -19.6066 -1.1365 231 -3.09919 -19.6066 -1.13582 245 -3.00497 -19.6091 -1.13501 246 -2.94217 -19.6106 -1.13447 249 -2.81862 -19.6267 -1.13433 228 -2.87768 -19.6 -1.13311 255 -2.65801 -19.6008 -1.13107 119 -2.44185 -19.6249 -1.1308 209 -2.59487 -19.5972 -1.13026 251 -2.50174 -19.6032 -1.12985 255 -2.37828 -19.6166 -1.12971 116 -2.31526 -19.6121 -1.1289 220 -2.00632 -19.6401 -1.12848 255 -1.94228 -19.6224 -1.12685 255 -2.15597 -19.582 -1.12564 94 -2.21726 -19.5732 -1.12551 248 -5.64156 -19.621 -1.05953 152 -5.51112 -19.6311 -1.05791 181 -5.56126 -19.5733 -1.0553 215 -1.50716 -20.2761 -1.05419 107 -5.27202 -19.6057 -1.05244 167 -4.96096 -19.6764 -1.05181 147 -5.39031 -19.5548 -1.05132 110 -5.32832 -19.5698 -1.0512 174 -4.82767 -19.6684 -1.04932 101 -5.16524 -19.5763 -1.04896 253 -5.09613 -19.5634 -1.04709 236 -5.03315 -19.5736 -1.04672 154 -4.86134 -19.5408 -1.04211 152 -4.73186 -19.5438 -1.04037 255 -4.63508 -19.5465 -1.03913 255 -4.57273 -19.5571 -1.03887 255 -4.50676 -19.5519 -1.03763 255 -4.40972 -19.5515 -1.03626 255 -4.19195 -19.5871 -1.03551 255 -4.34435 -19.5477 -1.03514 255 -4.12916 -19.5943 -1.03513 255 -4.06595 -19.5994 -1.03464 255 -4.00073 -19.5945 -1.03352 255 -4.27562 -19.5282 -1.03303 255 -3.90521 -19.5974 -1.03252 255 -3.84131 -19.5979 -1.03177 255 -3.7763 -19.5922 -1.03065 255 -2.13401 -19.8384 -1.03061 116 -3.67985 -19.5882 -1.02928 255 -2.78376 -19.7335 -1.02913 171 -3.61355 -19.5742 -1.02767 255 -3.54988 -19.5736 -1.02692 255 -3.48837 -19.5847 -1.02692 255 -3.39467 -19.593 -1.02642 255 -3.33277 -19.6016 -1.02629 255 -3.27018 -19.6061 -1.02592 255 -3.17711 -19.6174 -1.02567 255 -2.95701 -19.6235 -1.02392 255 -3.04822 -19.6014 -1.02343 255 -2.89388 -19.6228 -1.0233 255 -2.82934 -19.612 -1.02205 255 -3.1041 -19.5563 -1.02119 255 -2.54376 -19.5887 -1.01819 132 -2.38813 -19.5942 -1.01732 161 -2.44917 -19.5827 -1.01707 144 -2.6638 -19.5506 -1.01683 86 -1.95548 -19.6301 -1.01656 255 -2.60157 -19.5529 -1.01646 170 -2.04775 -19.6187 -1.01644 255 -2.32323 -19.5739 -1.01558 158 -2.16542 -19.5558 -1.01334 111 -2.22319 -19.5172 -1.01135 254 -5.91662 -19.7659 -0.950288 115 -1.46067 -20.5566 -0.948809 251 -5.83362 -19.7135 -0.946128 218 -5.72511 -19.6871 -0.942978 239 -5.6517 -19.6646 -0.940616 236 -5.48694 -19.6719 -0.938476 197 -5.57849 -19.6419 -0.938255 243 -5.41666 -19.6582 -0.936676 143 -5.34392 -19.6346 -0.934315 126 -5.18904 -19.6741 -0.934197 187 -5.28118 -19.6475 -0.934088 201 -4.84786 -19.7589 -0.934074 150 -5.1252 -19.6825 -0.933746 148 -5.06235 -19.6947 -0.933519 155 -1.50011 -20.2074 -0.929373 132 -4.94861 -19.635 -0.928684 163 -4.88642 -19.6485 -0.92857 122 -4.74979 -19.6245 -0.925419 255 -4.65359 -19.6311 -0.924518 255 -4.58647 -19.6223 -0.923167 255 -4.52213 -19.6249 -0.922491 255 -4.42654 -19.6324 -0.921702 255 -4.36312 -19.6384 -0.92125 255 -4.29716 -19.6325 -0.920125 248 -2.21036 -19.9693 -0.919728 125 -4.20294 -19.6447 -0.919672 251 -2.71122 -19.9055 -0.919629 158 -4.13547 -19.6305 -0.918097 255 -4.07096 -19.6297 -0.917309 255 -4.00411 -19.6169 -0.915847 255 -3.90969 -19.6258 -0.915282 255 -3.84611 -19.6281 -0.914718 255 -3.78292 -19.6323 -0.914267 255 -3.68671 -19.6303 -0.91314 255 -3.62322 -19.6319 -0.912577 255 -3.5587 -19.6275 -0.911676 255 -3.46513 -19.6381 -0.911336 255 -3.40207 -19.6411 -0.910885 255 -3.33703 -19.632 -0.90976 255 -3.27501 -19.6404 -0.909645 255 -3.17894 -19.6339 -0.908407 255 -3.11569 -19.6339 -0.907843 255 -3.05217 -19.6318 -0.907167 255 -2.95873 -19.64 -0.906828 255 -2.89413 -19.6295 -0.905702 255 -2.83104 -19.6286 -0.905139 255 -2.05824 -19.7246 -0.905118 255 -2.76798 -19.6275 -0.904575 255 -2.6114 -19.6308 -0.90356 125 -2.54844 -19.629 -0.902996 98 -2.45493 -19.6329 -0.902544 172 -2.39133 -19.6246 -0.901643 142 -2.11366 -19.6565 -0.901636 255 -1.95824 -19.6625 -0.90107 255 -2.23578 -19.6309 -0.900965 106 -2.32804 -19.6182 -0.900855 116 -5.94225 -19.7333 -0.833081 112 -5.85333 -19.662 -0.828325 235 -5.40843 -19.7455 -0.826187 187 -5.77624 -19.6285 -0.825592 252 -5.66919 -19.6057 -0.82296 249 -5.59709 -19.5869 -0.821036 255 -5.52626 -19.5717 -0.819315 255 -5.43129 -19.5879 -0.818806 238 -4.92465 -19.6679 -0.81616 99 -5.29291 -19.5658 -0.815869 153 -5.22728 -19.5669 -0.815058 150 -1.53029 -20.1771 -0.81404 147 -5.1289 -19.5681 -0.813841 144 -5.06288 -19.5667 -0.812929 126 -4.99592 -19.5612 -0.811814 167 -4.84117 -19.596 -0.811607 255 -4.77435 -19.5898 -0.810493 255 -4.68012 -19.6043 -0.810085 255 -4.61713 -19.6131 -0.80978 255 -4.55322 -19.6177 -0.809272 255 -4.48709 -19.6125 -0.808259 255 -4.39286 -19.6256 -0.807852 255 -4.32642 -19.6179 -0.806737 255 -2.55315 -19.9123 -0.805978 220 -4.25709 -19.5962 -0.804915 255 -4.15886 -19.5887 -0.803496 255 -4.09565 -19.5939 -0.80309 255 -4.03205 -19.5969 -0.802583 255 -2.38801 -19.8603 -0.802333 131 -3.96887 -19.6016 -0.802176 255 -3.8749 -19.6123 -0.801769 255 -2.32114 -19.83 -0.80041 160 -3.80789 -19.5969 -0.800351 255 -3.74593 -19.6068 -0.800248 255 -3.64945 -19.6026 -0.799133 255 -2.44173 -19.7833 -0.798795 127 -2.59493 -19.7477 -0.797991 117 -3.58061 -19.5747 -0.797108 255 -3.51767 -19.578 -0.796702 255 -3.42364 -19.5845 -0.796194 255 -3.36107 -19.5893 -0.795889 255 -3.29885 -19.5958 -0.795685 255 -3.23563 -19.5962 -0.795177 255 -3.1423 -19.6053 -0.794871 255 -3.0785 -19.6013 -0.794161 255 -3.01537 -19.601 -0.793654 255 -2.92178 -19.6071 -0.793247 255 -2.85872 -19.6063 -0.79274 255 -2.79597 -19.6073 -0.792333 255 -2.70244 -19.6123 -0.791926 255 -2.01825 -19.6463 -0.789481 255 -2.6314 -19.5514 -0.788385 255 -2.13902 -19.6094 -0.78827 255 -2.0774 -19.616 -0.788269 255 -2.20016 -19.5986 -0.78807 255 -5.9451 -19.8014 -0.718497 115 -5.29666 -19.8895 -0.714349 170 -5.20186 -19.9104 -0.714166 179 -5.85004 -19.7088 -0.71329 213 -5.12092 -19.855 -0.710844 167 -5.76681 -19.6542 -0.709879 242 -5.66255 -19.6409 -0.707991 241 -5.31459 -19.7068 -0.706634 193 -1.52732 -20.3476 -0.706254 133 -5.58992 -19.6201 -0.706194 253 -5.51909 -19.6049 -0.704667 255 -5.41764 -19.5979 -0.703138 255 -5.35028 -19.5936 -0.702149 255 -4.90273 -19.6445 -0.699264 255 -4.83386 -19.6307 -0.697916 255 -4.98691 -19.5882 -0.697742 255 -4.77123 -19.6419 -0.697735 255 -4.67264 -19.6389 -0.696565 255 -4.59549 -19.5873 -0.693513 255 -4.31727 -19.6464 -0.693325 255 -4.53169 -19.5919 -0.693062 255 -4.25091 -19.6384 -0.692336 255 -4.46394 -19.5788 -0.691804 255 -4.15586 -19.6465 -0.691795 255 -4.3673 -19.5801 -0.690904 255 -4.08966 -19.6379 -0.690806 255 -4.02197 -19.6213 -0.689458 255 -3.92596 -19.6224 -0.688648 255 -3.86161 -19.6209 -0.688018 255 -3.79769 -19.6212 -0.687478 255 -3.73529 -19.6291 -0.687296 255 -3.64093 -19.6366 -0.686845 255 -3.57745 -19.6381 -0.686394 255 -1.93184 -19.8656 -0.686259 117 -3.51329 -19.6355 -0.685765 255 -3.41936 -19.644 -0.685403 255 -3.35529 -19.6408 -0.684773 255 -3.29161 -19.6394 -0.684233 255 -3.13352 -19.641 -0.683152 255 -3.22539 -19.6221 -0.682975 255 -3.06874 -19.631 -0.682253 255 -3.00495 -19.6267 -0.681623 255 -2.91185 -19.6367 -0.681441 255 -2.84929 -19.6398 -0.68117 255 -1.98222 -19.7382 -0.680787 255 -2.7809 -19.6012 -0.679015 255 -2.68716 -19.6042 -0.678564 255 -2.62425 -19.6026 -0.678113 255 -2.56239 -19.6088 -0.678022 255 -2.06881 -19.667 -0.678009 240 -2.12889 -19.6445 -0.677292 255 -2.49853 -19.5989 -0.677213 255 -2.40614 -19.6105 -0.67721 255 -2.34452 -19.6179 -0.677209 255 -2.28197 -19.6173 -0.676848 255 -2.18906 -19.6238 -0.676666 255 -5.88753 -19.7235 -0.5836 130 -5.79713 -19.6461 -0.579748 180 -5.6894 -19.6214 -0.577665 199 -5.61446 -19.5931 -0.575815 223 -5.54248 -19.5741 -0.57435 224 -5.44265 -19.573 -0.573269 221 -5.37209 -19.5573 -0.571958 228 -5.30274 -19.5451 -0.570801 237 -5.23767 -19.5482 -0.57026 235 -5.13835 -19.5456 -0.569179 237 -5.07137 -19.5404 -0.56833 245 -5.00697 -19.5446 -0.567866 250 -4.91138 -19.5544 -0.567324 253 -4.84461 -19.5484 -0.566475 253 -4.78126 -19.5558 -0.566165 252 -4.71415 -19.5474 -0.565239 252 -4.61783 -19.5519 -0.564543 255 -4.55319 -19.5527 -0.564002 255 -4.48815 -19.5513 -0.563384 252 -4.392 -19.5547 -0.562689 255 -4.3262 -19.5489 -0.561917 246 -4.26048 -19.5429 -0.561145 248 -4.16625 -19.553 -0.560757 244 -4.10108 -19.5483 -0.560062 245 -4.0368 -19.5474 -0.559521 242 -3.97257 -19.5463 -0.558981 249 -3.87728 -19.5491 -0.558362 234 -3.81277 -19.5455 -0.557744 219 -3.74756 -19.5378 -0.556972 229 -3.53036 -19.566 -0.556504 253 -3.59108 -19.5509 -0.556352 242 -3.64953 -19.5238 -0.555737 255 -3.43429 -19.5608 -0.555654 255 -3.37179 -19.5656 -0.555422 255 -3.30829 -19.5643 -0.554958 255 -3.24517 -19.5647 -0.554571 255 -3.15133 -19.5699 -0.554184 255 -3.08858 -19.5718 -0.553874 255 -2.03857 -19.7008 -0.553538 211 -3.02462 -19.5656 -0.553256 255 -2.93029 -19.5658 -0.552715 242 -2.15988 -19.6658 -0.552694 180 -2.86852 -19.573 -0.552636 222 -2.80701 -19.5819 -0.552634 203 -2.09788 -19.6705 -0.552616 215 -2.7438 -19.5787 -0.552171 210 -2.22006 -19.645 -0.552157 205 -2.5281 -19.6057 -0.552088 195 -2.65097 -19.5875 -0.552014 204 -2.3738 -19.623 -0.552007 204 -2.31214 -19.6304 -0.552005 211 -2.43519 -19.6135 -0.551931 192 -2.58862 -19.5898 -0.551781 200 -2.13814 -20.6824 -0.461088 74 -5.91374 -19.8213 -0.45772 110 -5.84018 -19.8014 -0.456429 111 -2.18782 -20.5304 -0.456386 128 -5.70691 -19.6904 -0.451786 85 -2.23076 -20.3247 -0.449945 136 -5.55652 -19.6316 -0.448625 152 -5.45543 -19.6268 -0.447591 248 -5.38584 -19.6149 -0.446622 249 -2.27885 -20.1766 -0.445372 118 -5.31273 -19.5892 -0.445203 251 -5.2455 -19.5846 -0.444492 248 -5.14911 -19.5936 -0.443973 237 -5.08254 -19.5903 -0.443327 226 -5.01603 -19.5868 -0.442681 232 -4.91932 -19.5928 -0.442098 244 -4.85726 -19.6062 -0.442031 245 -2.36142 -20.0584 -0.441895 114 -4.78856 -19.5922 -0.441063 242 -4.69526 -19.6107 -0.440931 241 -4.62906 -19.6059 -0.440285 246 -4.56293 -19.6009 -0.439639 250 -4.49822 -19.6015 -0.439186 252 -2.41398 -19.9635 -0.439062 116 -4.40145 -19.6029 -0.438539 251 -4.33341 -19.5874 -0.43757 252 -4.27058 -19.595 -0.437375 250 -4.17488 -19.5993 -0.436857 248 -4.11165 -19.6045 -0.436597 240 -4.04723 -19.6036 -0.436144 239 -3.98286 -19.6025 -0.435692 237 -3.33353 -19.7192 -0.435544 185 -3.88774 -19.6073 -0.435238 219 -3.82498 -19.6135 -0.435043 228 -3.76185 -19.6176 -0.434783 224 -3.6679 -19.6273 -0.434523 221 -2.45841 -19.8071 -0.434231 109 -3.60371 -19.6249 -0.43407 219 -3.54028 -19.6263 -0.433746 199 -3.44741 -19.6408 -0.433679 180 -3.38199 -19.6299 -0.432968 173 -3.25209 -19.6113 -0.431676 71 -2.54135 -19.714 -0.431592 158 -2.6641 -19.6897 -0.431338 225 -2.72486 -19.6733 -0.431082 238 -2.60094 -19.688 -0.431014 215 -3.07974 -19.5197 -0.42787 223 -3.00599 -19.4483 -0.425227 40 -3.83956 -21.1425 -0.373231 47 -3.89169 -21.0537 -0.371122 47 -5.87541 -19.8347 -0.351587 81 -5.77527 -19.7246 -0.347957 206 -5.66338 -19.6863 -0.346113 231 -5.58778 -19.6559 -0.344757 240 -5.51622 -19.6388 -0.34378 235 -5.41668 -19.6395 -0.343073 232 -5.34809 -19.6313 -0.342367 233 -5.28012 -19.6249 -0.341715 230 -5.21329 -19.6221 -0.341172 229 -5.11468 -19.6232 -0.340519 231 -5.0495 -19.6256 -0.340138 230 -4.98387 -19.6259 -0.339703 230 -4.8855 -19.6259 -0.33905 224 -4.82046 -19.6276 -0.338669 221 -4.75405 -19.6232 -0.338126 222 -4.6592 -19.6356 -0.337852 211 -2.66395 -19.9962 -0.337578 55 -4.59337 -19.6327 -0.337363 192 -4.5258 -19.6217 -0.336657 202 -4.45967 -19.6163 -0.336114 147 -4.30547 -19.6507 -0.336109 44 -4.24244 -19.6583 -0.335945 44 -4.36108 -19.6098 -0.335353 77 -4.08301 -19.6675 -0.335291 44 -2.71339 -19.8907 -0.334927 44 -4.14187 -19.6409 -0.334913 44 -3.85838 -19.67 -0.334147 44 -3.91386 -19.6265 -0.333283 76 -2.79157 -19.7688 -0.331951 44 -2.90218 -19.6599 -0.329464 131 -2.83492 -19.6313 -0.328434 92 -3.19532 -19.5192 -0.326928 234 -3.0413 -19.5397 -0.326816 211 -3.09888 -19.5064 -0.326167 250 -6.00589 -20.9053 -0.23505 224 -3.99519 -21.1041 -0.229447 75 -3.89462 -21.1168 -0.229322 75 -5.86351 -20.6527 -0.229302 99 -4.96771 -20.5326 -0.222267 74 -2.88046 -20.4371 -0.212306 104 -4.96989 -19.9885 -0.211513 72 -5.39046 -19.8088 -0.210141 186 -5.3189 -19.7909 -0.209406 244 -5.03321 -19.8428 -0.208949 72 -5.21747 -19.7848 -0.208751 255 -5.14576 -19.7643 -0.207974 255 -5.07968 -19.7649 -0.207646 255 -2.90789 -20.1706 -0.207011 96 -4.68606 -19.7714 -0.205842 71 -4.03331 -19.7639 -0.202807 71 -2.9409 -19.9536 -0.202735 85 -3.93392 -19.7513 -0.202153 71 -3.86918 -19.7498 -0.201866 71 -3.02087 -19.8466 -0.200823 70 -3.06829 -19.7402 -0.198828 218 -4.92611 -20.9794 -0.130817 65 -4.00658 -21.0358 -0.128652 65 -3.93344 -21.011 -0.128053 65 -5.17174 -19.7833 -0.113513 114 -4.88722 -19.8369 -0.113221 62 -5.10404 -19.7781 -0.113165 171 -3.08841 -20.1589 -0.112602 98 -5.03096 -19.7514 -0.112472 203 -4.95713 -19.7206 -0.111716 242 -4.72031 -19.6923 -0.110389 68 -3.1187 -19.9397 -0.109272 72 -4.05372 -19.7667 -0.109237 61 -3.98484 -19.7461 -0.108701 61 -3.8898 -19.7548 -0.108541 61 -3.16067 -19.8015 -0.107231 61 -3.25264 -19.7785 -0.107108 209 -3.38157 -20.4579 0.0188853 116 -3.41118 -20.2401 0.0207929 141 -4.85595 -19.9099 0.0210396 133 -4.77756 -19.8589 0.0216599 181 -4.67434 -19.8403 0.022045 219 -4.60659 -19.8316 0.0222652 228 -4.54338 -19.842 0.0223035 216 -3.44552 -20.0578 0.0223732 151 -4.442 -19.8281 0.0226339 221 -4.37583 -19.8244 0.0227995 192 -4.31142 -19.8282 0.0228923 170 -4.2466 -19.8299 0.0230033 146 -4.14741 -19.8223 0.0232609 139 -4.02041 -19.8362 0.0233737 143 -3.92651 -19.853 0.0233949 172 -3.51824 -19.9172 0.023516 181 -4.0783 -19.8019 0.0235719 141 -3.79684 -19.8517 0.023635 222 -3.85843 -19.8358 0.0236695 192 -3.70034 -19.8537 0.0237834 237 -3.63509 -19.8494 0.0239307 226 -3.5706 -19.8489 0.0240416 234 +unknow 0.975518 1 0 376 -6.01441 26.0947 -1.75779 210 -6.09365 26.064 -1.75691 207 -6.1645 25.9981 -1.75339 198 -6.23826 25.9457 -1.7509 247 -5.21095 26.151 -1.74943 224 -6.35431 25.8908 -1.74899 199 -6.42841 25.8416 -1.74679 194 -6.49839 25.7768 -1.74342 242 -6.61633 25.7324 -1.74239 201 -6.69062 25.6864 -1.74049 197 -6.75861 25.617 -1.73682 237 -6.87616 25.5733 -1.73594 200 -6.94706 25.5169 -1.7333 191 -5.24973 25.9194 -1.73329 191 -7.01188 25.4392 -1.72904 239 -7.12739 25.3905 -1.72787 197 -7.19951 25.3411 -1.72582 194 -7.34694 25.2552 -1.72274 196 -7.26426 25.2666 -1.72185 235 -7.45062 25.1686 -1.71877 191 -7.51769 25.1049 -1.71569 233 -7.58729 25.0506 -1.71335 195 -7.69297 24.9746 -1.71027 192 -7.75483 24.8969 -1.70616 248 -8.24852 24.5653 -1.69413 229 -8.31862 24.5185 -1.69252 193 -7.77686 24.6936 -1.69237 209 -8.11457 24.5489 -1.68987 187 -8.38206 24.4526 -1.68943 185 -8.47301 24.3431 -1.68401 232 -8.5488 24.3145 -1.68386 193 -8.61382 24.2555 -1.68137 193 -8.70577 24.1527 -1.67652 231 -7.93418 24.2576 -1.66537 207 -7.84692 24.2482 -1.66273 205 -7.76584 24.2576 -1.66156 206 -7.99547 25.9284 -1.6312 202 -5.4999 24.379 -1.62634 186 -5.34321 24.3974 -1.62516 194 -5.41767 24.3708 -1.62443 255 -7.83718 25.8474 -1.62279 123 -7.74905 25.849 -1.62117 115 -5.13833 24.3762 -1.62047 177 -5.0577 24.3727 -1.619 185 -5.18668 25.9881 -1.58823 155 -5.09265 25.9416 -1.58389 121 -8.15426 24.2652 -1.52699 85 -8.03732 24.2958 -1.52644 147 -7.86847 24.2965 -1.52292 146 -7.58892 24.3435 -1.52021 108 -7.66236 24.31 -1.51953 101 -5.47651 24.6137 -1.50096 96 -5.73173 24.4879 -1.49649 97 -5.52113 24.4524 -1.49093 218 -5.59256 24.4116 -1.4893 99 -5.35021 24.4086 -1.48551 167 -5.23009 24.4102 -1.48388 144 -5.07213 24.4211 -1.48239 134 -4.95182 24.4193 -1.48063 124 -8.02452 24.358 -1.3859 140 -8.21431 24.2904 -1.38565 179 -8.28607 24.2512 -1.38478 82 -8.07649 24.2587 -1.38105 135 -7.91096 24.2691 -1.37844 255 -7.79043 24.2871 -1.3772 235 -7.70867 24.2944 -1.37608 215 -7.54761 24.3156 -1.37434 100 -7.62099 24.2823 -1.37371 105 -7.41204 24.2822 -1.36986 99 -7.32479 24.269 -1.3675 126 -7.13173 24.3181 -1.367 100 -7.24283 24.2728 -1.36626 132 -7.03535 24.2714 -1.36253 120 -6.95798 24.2895 -1.36228 122 -4.52417 24.8581 -1.36226 59 -6.83913 24.3067 -1.36128 120 -6.75155 24.2876 -1.35867 108 -6.66941 24.2875 -1.3573 75 -6.55024 24.3013 -1.35618 78 -6.47385 24.3218 -1.35618 83 -6.38731 24.3034 -1.3537 120 -5.65923 24.4832 -1.35369 165 -6.30593 24.304 -1.35245 148 -6.18937 24.3257 -1.35196 103 -6.11292 24.345 -1.35196 111 -5.91544 24.3671 -1.35034 108 -6.02637 24.3234 -1.34935 140 -4.9507 24.5629 -1.34922 89 -5.82635 24.3331 -1.34698 130 -5.74852 24.3455 -1.34661 99 -4.59129 24.5676 -1.34524 67 -5.4722 24.3702 -1.34425 204 -5.54609 24.3412 -1.3435 131 -5.27391 24.3812 -1.34226 185 -5.12022 24.4119 -1.34213 255 -5.19605 24.3918 -1.34188 143 -4.99356 24.379 -1.33853 102 -4.64731 24.4413 -1.33815 106 -4.72294 24.4207 -1.33778 105 -4.83527 24.3845 -1.33691 134 -8.61248 24.5235 -1.25274 217 -8.05124 24.6462 -1.24915 160 -8.42612 24.3601 -1.2406 168 -8.33397 24.3411 -1.2379 226 -8.1191 24.3357 -1.23374 130 -8.03381 24.3346 -1.23217 159 -7.82957 24.357 -1.22981 203 -7.56128 24.4417 -1.22981 123 -7.74269 24.3492 -1.2279 126 -7.65654 24.3429 -1.2261 126 -7.4616 24.3908 -1.22542 225 -7.37624 24.3855 -1.22373 255 -7.29212 24.3837 -1.22227 255 -7.17318 24.4044 -1.22148 255 -7.08866 24.4 -1.21991 255 -7.00367 24.3933 -1.21822 255 -6.88266 24.4049 -1.21699 255 -6.80111 24.4091 -1.21597 255 -6.71961 24.413 -1.21496 255 -6.59717 24.4175 -1.21339 255 -6.51733 24.4265 -1.21271 255 -5.62943 24.6401 -1.21237 141 -6.43442 24.4237 -1.21136 255 -6.35161 24.4206 -1.21001 252 -6.23299 24.4367 -1.20923 248 -4.53051 24.8088 -1.20922 216 -6.15374 24.4465 -1.20866 248 -6.07015 24.4386 -1.20709 250 -5.95065 24.4494 -1.20608 251 -5.87054 24.4544 -1.20529 248 -5.78953 24.4553 -1.20428 246 -5.50177 24.4357 -1.19955 133 -4.61444 24.6125 -1.19921 138 -5.03658 24.5174 -1.19854 125 -5.38182 24.4399 -1.19832 149 -5.30415 24.4527 -1.19809 192 -5.22269 24.4478 -1.19685 137 -4.68308 24.5528 -1.19663 255 -4.75409 24.5066 -1.19483 255 -5.13801 24.427 -1.19472 128 -4.86873 24.48 -1.1946 255 -4.93885 24.4314 -1.19269 203 -8.60243 24.5416 -1.10721 104 -8.51353 24.5345 -1.10539 213 -8.10574 24.4704 -1.09567 121 -8.34196 24.2853 -1.09061 254 -8.256 24.283 -1.08909 183 -7.71225 24.4339 -1.08778 121 -7.95687 24.2754 -1.08393 125 -7.83262 24.2822 -1.08231 123 -7.75629 24.3067 -1.08231 136 -7.54153 24.2906 -1.07826 142 -4.51313 25.0125 -1.07734 148 -7.38009 24.3088 -1.07675 255 -7.45175 24.2702 -1.07594 232 -7.29853 24.3146 -1.07583 255 -7.17767 24.3277 -1.07472 255 -7.09508 24.329 -1.07361 255 -7.01201 24.3281 -1.07239 255 -6.89349 24.3475 -1.07168 255 -6.80785 24.3363 -1.06996 255 -6.72872 24.3479 -1.06946 255 -5.30014 24.684 -1.06874 143 -5.37555 24.6575 -1.06824 136 -6.60712 24.3543 -1.06814 255 -6.5244 24.3518 -1.06693 255 -6.44532 24.3625 -1.06642 255 -5.44482 24.6034 -1.06631 122 -5.21228 24.6517 -1.06621 156 -6.32496 24.3713 -1.06531 255 -6.24243 24.3678 -1.06409 255 -6.16291 24.3757 -1.06348 255 -6.08101 24.3736 -1.06237 255 -4.53714 24.6995 -1.06196 171 -5.96372 24.3923 -1.06186 255 -5.88334 24.3954 -1.06105 255 -5.80069 24.3885 -1.05974 255 -5.67443 24.3669 -1.05721 255 -5.59649 24.3788 -1.0569 242 -4.62918 24.5483 -1.05528 249 -4.70143 24.5081 -1.05396 255 -4.77232 24.4618 -1.05235 255 -4.95953 24.4001 -1.05113 255 -4.88246 24.4136 -1.05103 255 -5.03255 24.3668 -1.05022 135 -8.56721 24.5831 -0.960014 156 -4.56383 25.561 -0.956942 172 -8.44419 24.4777 -0.953729 255 -8.30768 24.3302 -0.945469 255 -8.17122 24.3047 -0.942415 255 -8.08344 24.2962 -0.940799 252 -7.71857 24.3433 -0.937745 255 -7.78338 24.2828 -0.936039 123 -7.58585 24.3222 -0.935051 255 -7.42587 24.3464 -0.933973 255 -7.50173 24.3211 -0.933883 255 -7.30185 24.3505 -0.932536 255 -7.21961 24.3542 -0.931638 255 -7.13742 24.3576 -0.930739 255 -7.05473 24.3588 -0.929752 255 -6.93438 24.3726 -0.928853 255 -6.85072 24.3692 -0.927685 255 -4.52445 24.892 -0.927044 169 -6.76823 24.3695 -0.926697 255 -6.64858 24.3837 -0.925889 255 -6.56514 24.3794 -0.924721 255 -6.48285 24.3787 -0.923733 255 -6.36538 24.3993 -0.923284 255 -6.28219 24.394 -0.922116 255 -6.20008 24.3924 -0.921128 255 -6.12097 24.402 -0.920679 255 -6.00257 24.417 -0.92005 255 -5.92251 24.4222 -0.919421 255 -5.8397 24.4154 -0.918253 255 -5.72275 24.4349 -0.917893 255 -4.56498 24.6754 -0.917797 208 -5.63919 24.4235 -0.916546 255 -5.55574 24.4119 -0.915199 255 -5.43628 24.4183 -0.914301 255 -4.66624 24.5751 -0.914206 255 -5.35654 24.4216 -0.913672 255 -5.27555 24.4188 -0.912773 255 -4.73732 24.5289 -0.91277 255 -4.81358 24.51 -0.912591 255 -5.15876 24.4356 -0.912413 255 -4.92743 24.4792 -0.912233 255 -5.08032 24.4439 -0.912054 255 -5.0015 24.4499 -0.911605 255 -8.19083 24.4016 -0.783099 99 -8.24314 24.3038 -0.780171 106 -8.04512 24.3469 -0.779323 255 -7.94754 24.3074 -0.776702 236 -7.86072 24.2999 -0.775392 228 -7.73706 24.3081 -0.774236 235 -7.65527 24.3151 -0.773542 238 -7.57055 24.3124 -0.772463 244 -4.50133 25.0526 -0.772064 153 -7.44949 24.3267 -0.771615 246 -7.36609 24.3271 -0.77069 243 -7.28106 24.3214 -0.769534 245 -7.19784 24.3211 -0.768609 241 -7.07759 24.3356 -0.767837 246 -6.99559 24.3385 -0.767067 248 -6.91094 24.3315 -0.76591 253 -6.79245 24.3503 -0.76537 252 -6.71169 24.3561 -0.764754 253 -6.62992 24.3578 -0.763983 246 -6.50941 24.3675 -0.763135 243 -6.42927 24.3743 -0.762595 253 -4.5728 24.7775 -0.762124 169 -6.34665 24.3712 -0.76167 249 -6.22681 24.3814 -0.760899 248 -6.14628 24.3854 -0.760282 248 -6.06244 24.3754 -0.759126 248 -5.98393 24.3866 -0.758817 244 -5.8643 24.3951 -0.758046 239 -5.78349 24.3959 -0.757352 244 -5.70547 24.4081 -0.757121 248 -5.58462 24.4094 -0.756118 211 -4.62201 24.6098 -0.756113 183 -5.50703 24.4229 -0.755964 209 -5.4251 24.4167 -0.755038 255 -5.30744 24.4302 -0.754575 247 -5.22901 24.439 -0.754267 245 -4.6896 24.5441 -0.75411 169 -5.14769 24.4338 -0.753419 248 -5.0317 24.4538 -0.753264 247 -4.87523 24.4713 -0.752724 255 -4.95168 24.4539 -0.752647 255 -4.79641 24.4766 -0.752338 217 -8.11395 24.7624 -0.631768 89 -7.99469 24.6604 -0.627446 142 -7.84426 24.5912 -0.623834 129 -7.73198 24.5051 -0.620093 131 -7.62747 24.4416 -0.617126 146 -4.53643 25.1584 -0.615822 111 -7.49397 24.418 -0.615127 82 -7.32138 24.4015 -0.612998 77 -7.11659 24.4141 -0.611514 170 -7.18872 24.3763 -0.610998 87 -7.03264 24.4113 -0.610675 141 -6.95096 24.416 -0.610094 185 -6.83259 24.437 -0.609707 162 -6.7483 24.4313 -0.608804 173 -6.6673 24.437 -0.608287 195 -6.54688 24.4488 -0.607642 207 -6.46388 24.4461 -0.606868 217 -4.60407 24.8635 -0.606858 128 -6.38148 24.445 -0.606158 230 -6.25874 24.4458 -0.60519 223 -6.17995 24.4576 -0.604932 227 -6.09822 24.4575 -0.604286 237 -5.97814 24.4665 -0.603641 234 -5.89701 24.4677 -0.60306 237 -5.81594 24.4686 -0.602479 244 -5.73537 24.4712 -0.601963 242 -4.65276 24.6938 -0.601764 191 -5.61595 24.4804 -0.601382 243 -5.53681 24.4882 -0.601059 245 -5.45591 24.4879 -0.600478 245 -5.33747 24.4997 -0.600026 247 -5.25667 24.4987 -0.599445 242 -5.17844 24.5093 -0.599252 245 -4.71442 24.5966 -0.599056 98 -5.06044 24.5217 -0.598864 244 -4.98219 24.5316 -0.59867 100 -4.82408 24.5428 -0.598024 118 -4.89958 24.5196 -0.597767 184 -7.47732 25.8153 -0.5201 87 -7.25061 25.7885 -0.517714 126 -7.26834 25.5424 -0.511427 58 -6.07595 25.0463 -0.490174 56 -4.70764 25.2131 -0.486806 120 -6.06616 24.6659 -0.480092 55 -7.14089 24.3619 -0.479717 112 -6.17458 24.606 -0.479225 55 -6.51516 24.4911 -0.478522 55 -6.43464 24.4979 -0.478142 55 -4.72151 24.8524 -0.477266 97 -6.30969 24.4912 -0.477112 55 -6.22633 24.4857 -0.476407 55 -5.67341 24.5602 -0.474832 55 -5.78863 24.5312 -0.474779 55 -5.59269 24.5623 -0.474398 55 -5.51289 24.568 -0.474073 55 -5.2416 24.6232 -0.473963 103 -5.85779 24.4799 -0.473858 63 -5.39492 24.584 -0.473801 55 -5.3122 24.5754 -0.473096 55 -5.10767 24.5615 -0.471577 255 -4.9509 24.5814 -0.471251 255 -4.83501 24.6044 -0.47125 255 -5.0277 24.5637 -0.471197 255 -6.97468 25.8059 -0.337434 145 -7.0472 25.5954 -0.33368 95 -6.20157 25.1301 -0.320129 90 -4.87789 25.1371 -0.31445 199 -6.93168 24.5752 -0.312991 119 -6.85336 24.593 -0.312909 123 -6.02286 24.7415 -0.311559 89 -6.20426 24.6431 -0.310499 89 -6.35696 24.5959 -0.310336 89 -6.2742 24.5944 -0.309887 89 -4.90936 24.8824 -0.309472 125 -5.79665 24.6538 -0.308742 88 -5.44667 24.7294 -0.308659 88 -5.91089 24.6184 -0.30858 88 -5.71327 24.6466 -0.308211 88 -5.63044 24.641 -0.307721 88 -5.55124 24.6508 -0.307558 88 -5.35533 24.6839 -0.307353 255 -5.15474 24.6938 -0.306699 255 -5.27062 24.6673 -0.306659 255 -5.07631 24.706 -0.306617 255 -4.93637 25.2188 -0.196887 117 -4.99227 25.0855 -0.194998 144 -6.77546 24.6056 -0.194125 145 -6.68819 24.5901 -0.193527 223 -6.6109 24.611 -0.193526 172 -5.08538 24.9382 -0.193014 124 -6.52385 24.5949 -0.192928 173 -6.40436 24.6118 -0.192706 191 -6.32354 24.6183 -0.192486 204 -6.24226 24.6225 -0.192233 220 -6.12088 24.6303 -0.191886 231 -6.03919 24.6319 -0.191603 231 -5.95569 24.6255 -0.191193 236 -5.83821 24.6474 -0.191098 223 -5.75713 24.6501 -0.190845 222 -5.13424 24.7791 -0.190716 116 -5.67608 24.6525 -0.190593 212 -5.5964 24.6604 -0.190435 211 -5.47798 24.6767 -0.190277 213 -5.20632 24.7355 -0.190276 165 -5.39744 24.6802 -0.190056 202 -5.31989 24.697 -0.190056 187 +unknow 0.973628 1 0 4075 -4.35367 0.840886 -1.52282 80 -4.36081 0.792619 -1.52211 86 -4.59645 1.0191 -1.52161 100 -4.38475 0.634309 -1.5214 86 -4.37963 0.668727 -1.5214 91 -4.43028 0.0310433 -1.5214 94 -4.42966 -0.0802994 -1.5214 90 -4.34551 0.853445 -1.52069 106 -4.38679 0.606479 -1.52069 89 -4.37986 0.654677 -1.52069 129 -4.40922 0.413015 -1.52069 86 -4.52588 1.28333 -1.52027 107 -4.67003 0.566861 -1.52027 97 -4.33684 0.887162 -1.51999 111 -4.33403 0.900782 -1.51999 110 -4.34895 0.825764 -1.51999 118 -4.40108 0.475093 -1.51998 90 -4.22815 0.841839 -1.51998 76 -4.58281 1.05387 -1.5196 100 -4.62997 0.822284 -1.5196 101 -4.65868 0.639878 -1.5196 107 -4.32791 0.920797 -1.51928 114 -4.33777 0.873153 -1.51928 113 -4.35835 0.763869 -1.51928 78 -4.4183 0.239367 -1.51928 90 -4.42004 0.204659 -1.51928 86 -4.42475 -0.0176818 -1.51928 97 -4.42064 -0.191383 -1.51927 91 -4.50368 1.34608 -1.51893 111 -4.60892 0.923514 -1.51893 94 -4.65249 -0.670382 -1.51892 121 -4.35408 0.777217 -1.51857 132 -4.36796 0.695012 -1.51857 107 -4.42192 0.093468 -1.51857 93 -4.42105 0.128193 -1.51857 94 -4.42291 -0.00379125 -1.51857 87 -4.41713 -0.226011 -1.51857 94 -4.41935 -0.177431 -1.51857 113 -4.55123 1.16775 -1.51826 108 -4.5638 1.11764 -1.51826 102 -4.59357 0.98817 -1.51826 105 -4.60119 0.952063 -1.51826 95 -4.62101 0.850656 -1.51826 91 -4.67037 0.514829 -1.51826 101 -4.68799 0.316347 -1.51826 110 -4.69781 -0.0893413 -1.51825 104 -4.6485 -0.68473 -1.51825 88 -4.34601 0.811037 -1.51786 114 -4.36052 0.728977 -1.51786 113 -4.38836 0.536549 -1.51786 113 -4.40305 0.398441 -1.51786 118 -4.41298 0.266876 -1.51786 86 -4.41829 0.155892 -1.51786 90 -4.41974 0.107302 -1.51786 125 -4.42073 -0.0524104 -1.51786 91 -4.41955 -0.114899 -1.51786 86 -4.41916 -0.128783 -1.51786 98 -4.5363 1.21722 -1.51759 99 -4.65797 0.602514 -1.51758 100 -4.68846 0.279396 -1.51758 116 -4.67223 -0.479502 -1.51758 100 -4.65186 -0.64795 -1.51758 121 -4.31952 0.933171 -1.51715 111 -4.35637 0.742347 -1.51715 124 -4.36095 0.714961 -1.51715 111 -4.38216 0.570744 -1.51715 111 -4.37562 0.618894 -1.51715 125 -4.40638 0.336005 -1.51715 111 -4.40888 0.301387 -1.51715 107 -4.41408 -0.211976 -1.51715 122 -4.50247 1.33029 -1.51691 111 -4.55483 1.1382 -1.51691 103 -4.56707 1.08805 -1.51691 97 -4.57876 1.03777 -1.51691 141 -4.60769 0.90067 -1.51691 124 -4.61996 0.835442 -1.51691 124 -4.65418 0.616886 -1.51691 123 -4.67126 0.470391 -1.51691 102 -4.67615 0.419001 -1.51691 101 -4.6793 0.382261 -1.51691 103 -4.68322 0.330788 -1.51691 108 -4.68854 -0.244055 -1.51691 104 -4.68462 -0.310311 -1.51691 118 -4.65869 -0.581901 -1.51691 103 -4.66312 -0.545294 -1.51691 129 -4.64259 -0.69879 -1.51691 129 -4.65398 -0.618472 -1.51691 120 -4.36458 0.68039 -1.51644 99 -4.37849 0.584251 -1.51644 132 -4.40232 0.363519 -1.51644 93 -4.41006 0.252773 -1.51644 122 -4.41615 -0.100951 -1.51644 122 -4.7543 -0.693791 -1.51628 116 -4.54941 1.15203 -1.51624 102 -4.58493 1.00136 -1.51624 102 -4.59113 0.972532 -1.51624 133 -4.62701 0.784269 -1.51624 98 -4.63184 0.755183 -1.51624 93 -4.63763 0.71878 -1.51624 133 -4.64526 0.667745 -1.51624 120 -4.6762 0.39679 -1.51624 106 -4.68028 0.345349 -1.51624 104 -4.693 0.00656195 -1.51624 103 -4.69295 -0.0229254 -1.51624 108 -4.69241 -0.0745248 -1.51624 105 -4.66617 -0.501131 -1.51624 110 -4.65014 -0.632847 -1.51624 119 -4.38446 0.522063 -1.51573 107 -4.38608 0.508286 -1.51573 114 -4.38022 0.556482 -1.51573 111 -4.3914 0.460029 -1.51573 118 -4.40607 0.287269 -1.51573 114 -4.39929 0.377177 -1.51573 96 -4.41133 0.190314 -1.51573 121 -4.4119 0.176455 -1.51573 114 -4.41472 0.0793959 -1.51573 128 -4.41532 -0.0315708 -1.51573 122 -4.4154 0.0169792 -1.51573 122 -4.41313 -0.142518 -1.51573 125 -4.61884 1.31637 -1.51563 107 -4.76225 0.622529 -1.51563 121 -4.79582 -0.258256 -1.51563 109 -4.76466 -0.603809 -1.51563 117 -4.48829 1.3645 -1.51557 109 -4.50713 1.30091 -1.51557 110 -4.51721 1.26547 -1.51557 141 -4.59678 0.936059 -1.51557 138 -4.6068 0.885459 -1.51557 92 -4.62141 0.805731 -1.51557 128 -4.63349 0.733041 -1.51557 106 -4.62759 0.76941 -1.51557 130 -4.66041 0.535928 -1.51557 130 -4.6587 0.550567 -1.51557 103 -4.69111 -0.00818892 -1.51557 111 -4.68718 -0.192355 -1.51557 109 -4.68655 -0.207079 -1.51557 116 -4.40232 0.314803 -1.51502 113 -4.41333 0.0446908 -1.51502 121 -4.41306 -0.0662302 -1.51502 129 -4.72309 0.86069 -1.51497 121 -4.77042 0.539954 -1.51497 121 -4.75378 -0.670832 -1.51497 121 -4.45347 0.828585 -1.51491 159 -4.48218 1.37803 -1.5149 108 -4.50121 1.31453 -1.5149 113 -4.51935 1.25076 -1.5149 98 -4.53844 1.17962 -1.5149 98 -4.67485 0.367085 -1.5149 105 -4.68594 0.175908 -1.5149 101 -4.68695 0.146463 -1.5149 105 -4.68909 -0.0376583 -1.5149 110 -4.68211 -0.258504 -1.5149 120 -4.67529 -0.361397 -1.5149 98 -4.65919 -0.530034 -1.5149 93 -4.60046 1.36602 -1.51432 102 -4.65055 1.18435 -1.51432 97 -4.70714 0.934413 -1.51432 120 -4.74923 0.689267 -1.51432 117 -4.38394 0.494065 -1.51431 113 -4.3891 0.445832 -1.51431 110 -4.39116 0.425143 -1.51431 114 -4.39785 0.34921 -1.51431 89 -4.40631 0.217819 -1.51431 125 -4.78892 -0.310707 -1.51431 110 -4.47603 1.39153 -1.51423 115 -4.52338 1.22895 -1.51423 137 -4.53101 1.2005 -1.51423 134 -4.64174 0.652329 -1.51423 101 -4.63755 0.681482 -1.51423 131 -4.6505 0.586646 -1.51423 132 -4.66073 0.498887 -1.51423 104 -4.66227 0.484244 -1.51423 104 -4.68458 0.161111 -1.51423 112 -4.68697 -0.0597419 -1.51423 109 -4.68524 -0.140715 -1.51423 115 -4.67559 -0.331892 -1.51423 116 -4.65301 -0.566395 -1.51423 101 -4.47568 -0.686493 -1.51422 143 -4.68523 1.02994 -1.51366 119 -4.69932 0.963601 -1.51366 121 -4.71247 0.897072 -1.51366 120 -4.73106 0.793231 -1.51366 113 -4.79169 -0.227818 -1.51366 105 -4.76274 -0.573153 -1.51366 120 -4.40755 0.141585 -1.5136 118 -4.40943 0.058485 -1.5136 94 -4.55448 1.10013 -1.51356 127 -4.63242 0.703036 -1.51356 100 -4.67803 0.263966 -1.51356 102 -4.68478 0.0801038 -1.51355 104 -4.68511 0.0580278 -1.51355 105 -4.68538 0.028589 -1.51355 114 -4.66855 -0.397806 -1.51355 142 -4.66246 -0.463763 -1.51355 125 -4.66728 -0.412471 -1.51355 100 -4.4669 0.729872 -1.51353 163 -4.47164 -0.700248 -1.51353 130 -4.4811 -0.636965 -1.51353 157 -4.73763 0.740882 -1.513 122 -4.75278 0.636526 -1.513 125 -4.56115 1.06388 -1.51289 138 -4.60216 0.869541 -1.51288 137 -4.66218 0.44723 -1.51288 107 -4.67393 0.300568 -1.51288 108 -4.67695 0.249158 -1.51288 106 -4.68263 0.0947738 -1.51288 108 -4.68231 0.109483 -1.51288 106 -4.68174 0.131547 -1.51288 110 -4.68227 -0.111205 -1.51288 104 -4.67799 -0.228835 -1.51288 111 -4.67429 -0.294944 -1.51288 116 -4.67519 -0.280256 -1.51288 113 -4.67076 -0.346321 -1.51288 144 -4.66202 -0.448944 -1.51288 102 -4.66408 -0.42697 -1.51288 103 -4.65521 -0.514805 -1.51288 131 -4.45178 0.806619 -1.51284 146 -4.4453 0.841557 -1.51284 158 -4.45676 0.778631 -1.51284 154 -4.45918 0.764626 -1.51284 175 -4.50911 0.369926 -1.51283 168 -4.47722 -0.650759 -1.51283 152 -4.61385 1.29934 -1.51235 131 -4.68791 0.99971 -1.51234 121 -4.69257 0.97761 -1.51234 118 -4.75942 0.569059 -1.51234 127 -4.78095 0.344228 -1.51234 138 -4.79322 -0.0319412 -1.51234 104 -4.74838 -0.654821 -1.51234 122 -4.67619 0.227013 -1.51221 103 -4.6815 0.0432517 -1.51221 110 -4.68001 -0.125873 -1.51221 111 -4.66662 -0.375519 -1.51221 107 -4.64375 -0.594931 -1.51221 130 -4.43112 0.90395 -1.51214 163 -4.47094 0.68017 -1.51214 159 -4.51202 0.306028 -1.51214 162 -4.48411 -0.587148 -1.51214 168 -4.58235 1.39994 -1.51169 111 -4.6829 1.01404 -1.51169 129 -4.71647 0.844234 -1.51169 119 -4.73035 0.762617 -1.51169 121 -4.78429 0.26148 -1.51169 107 -4.79112 -0.0544963 -1.51168 136 -4.78367 -0.272614 -1.51168 112 -4.75529 -0.587387 -1.51168 119 -4.67699 -0.16257 -1.51154 107 -4.40119 -0.162963 -1.51148 114 -4.43895 0.854829 -1.51145 131 -4.51826 0.142804 -1.51145 163 -4.48585 -0.558719 -1.51145 140 -4.48407 -0.572808 -1.51145 151 -4.47944 -0.608007 -1.51145 150 -4.59565 1.34895 -1.51103 131 -4.66111 1.10171 -1.51103 119 -4.66625 1.07973 -1.51103 124 -4.69491 0.947379 -1.51103 120 -4.76163 0.516306 -1.51103 121 -4.7832 0.246361 -1.51103 136 -4.787 0.156161 -1.51103 106 -4.78954 -0.00180291 -1.51103 124 -4.7888 -0.0845542 -1.51103 106 -4.78578 -0.189838 -1.51103 95 -4.7702 -0.430055 -1.51103 96 -4.75788 -0.549794 -1.51103 126 -4.74668 -0.639376 -1.51103 119 -4.67376 0.197448 -1.51087 134 -4.43303 0.875385 -1.51076 140 -4.46508 0.693658 -1.51076 158 -4.47831 0.602342 -1.51076 146 -4.47243 0.644521 -1.51076 153 -4.47444 0.630468 -1.51076 164 -4.48722 0.531924 -1.51076 170 -4.51215 0.242033 -1.51076 176 -4.51817 0.0647006 -1.51076 171 -4.51756 -0.0985397 -1.51076 179 -4.50421 -0.360783 -1.51076 169 -4.61645 1.26886 -1.51037 103 -4.63012 1.21802 -1.51037 124 -4.64869 1.14514 -1.51037 129 -4.7242 0.776882 -1.51037 120 -4.71923 0.806549 -1.51037 120 -4.74918 0.605735 -1.51037 125 -4.75555 0.55348 -1.51037 126 -4.76658 0.448775 -1.51037 128 -4.77635 0.328848 -1.51037 128 -4.7633 -0.482279 -1.51037 123 -4.74777 -0.616746 -1.51037 115 -4.65606 0.431844 -1.5102 130 -4.67124 0.212034 -1.5102 102 -4.67269 -0.177141 -1.5102 115 -4.42842 0.888949 -1.51007 159 -4.44689 0.791355 -1.51007 150 -4.4828 0.552845 -1.51006 174 -4.47924 0.581 -1.51006 161 -4.49859 0.404699 -1.51006 183 -4.50949 0.256112 -1.51006 163 -4.51403 0.15689 -1.51006 156 -4.51663 -0.0346409 -1.51006 166 -4.49474 -0.44542 -1.51006 152 -4.47379 -0.621539 -1.51006 152 -4.48471 -0.537105 -1.51006 162 -4.6414 1.16659 -1.50972 131 -4.65042 1.1301 -1.50972 121 -4.66925 1.04958 -1.50972 125 -4.73059 0.724616 -1.50971 121 -4.77173 0.366216 -1.50971 108 -4.78572 0.0207723 -1.50971 139 -4.78335 -0.152104 -1.50971 121 -4.76904 -0.399739 -1.50971 123 -4.76292 -0.467118 -1.50971 125 -4.45805 0.71412 -1.50937 152 -4.51016 0.206438 -1.50937 168 -4.51479 0.0292106 -1.50937 173 -4.48613 -0.508695 -1.50937 148 -4.48451 -0.522785 -1.50937 153 -4.48771 -0.494597 -1.50937 164 -4.46483 -0.670403 -1.50937 146 -4.57948 1.38339 -1.50906 131 -4.63215 1.19526 -1.50906 117 -4.70226 0.879902 -1.50906 120 -4.71165 0.828146 -1.50906 117 -4.7364 0.672302 -1.50906 126 -4.74731 0.590366 -1.50906 120 -4.76138 0.463401 -1.50906 128 -4.76868 0.381065 -1.50906 129 -4.78082 0.171028 -1.50906 126 -4.78385 -0.016798 -1.50906 127 -4.78337 -0.0693973 -1.50906 125 -4.76588 -0.414545 -1.50905 117 -4.76318 -0.444482 -1.50905 133 -4.45162 0.741817 -1.50868 147 -4.47081 0.615671 -1.50868 158 -4.47731 0.566475 -1.50868 162 -4.4961 0.39026 -1.50868 182 -4.49903 0.354936 -1.50868 165 -4.5036 0.2913 -1.50868 149 -4.50726 0.227606 -1.50868 180 -4.51156 0.114266 -1.50868 167 -4.51274 -0.0487671 -1.50868 178 -4.50983 -0.169242 -1.50868 173 -4.50868 -0.197575 -1.50868 184 -4.50699 -0.23298 -1.50868 177 -4.49306 -0.423861 -1.50868 165 -4.48959 -0.459136 -1.50868 156 -4.60698 1.28186 -1.5084 129 -4.75726 0.485652 -1.5084 128 -4.76557 0.395899 -1.5084 128 -4.77676 0.223505 -1.5084 126 -4.77744 0.208498 -1.5084 101 -4.77807 0.19349 -1.5084 132 -4.78117 0.0883744 -1.5084 99 -4.77761 -0.204507 -1.5084 141 -4.75613 -0.496622 -1.5084 129 -4.41578 0.922582 -1.50799 157 -4.48533 0.481796 -1.50799 176 -4.48141 0.517008 -1.50799 154 -4.49825 0.340671 -1.50799 165 -4.50261 0.277047 -1.50799 167 -4.4998 0.31947 -1.50799 173 -4.50137 -0.296536 -1.50799 165 -4.61896 1.23065 -1.50774 123 -4.64843 1.11419 -1.50774 123 -4.69293 0.908732 -1.50774 122 -4.72724 0.708939 -1.50774 118 -4.75383 0.500407 -1.50774 121 -4.76043 0.433153 -1.50774 120 -4.76177 0.418196 -1.50774 125 -4.77213 0.275915 -1.50774 129 -4.77954 0.0733357 -1.50774 134 -4.77983 0.0508111 -1.50774 130 -4.77907 -0.099352 -1.50774 134 -4.77398 -0.241918 -1.50774 146 -4.75021 -0.53374 -1.50774 127 -4.48114 0.502728 -1.50729 165 -4.50553 -0.183236 -1.50729 181 -4.49855 -0.310535 -1.50729 173 -4.4844 -0.472823 -1.50729 151 -4.90785 -0.677151 -1.50718 86 -4.61325 1.24468 -1.50709 134 -4.65856 1.0626 -1.50709 125 -4.73287 0.656669 -1.50708 119 -4.77675 0.118341 -1.50708 103 -4.77808 0.0357905 -1.50708 109 -4.77503 -0.174326 -1.50708 118 -4.76914 -0.294268 -1.50708 138 -4.76562 -0.346689 -1.50708 108 -4.76451 -0.361658 -1.50708 131 -4.48795 0.418013 -1.5066 163 -4.50555 0.128311 -1.5066 173 -4.50669 0.0787629 -1.5066 172 -4.50733 -0.0203547 -1.5066 171 -4.50737 -0.00619532 -1.5066 167 -4.50242 -0.211442 -1.5066 183 -4.49982 -0.260935 -1.5066 178 -4.50062 -0.246797 -1.5066 180 -4.4941 -0.345702 -1.5066 166 -4.76604 0.313159 -1.50643 129 -4.77477 -0.121754 -1.50643 129 -4.74811 -0.518382 -1.50642 124 -4.48407 0.438985 -1.50591 162 -4.50199 0.177779 -1.50591 172 -4.50454 0.092893 -1.50591 167 -4.50529 0.0433592 -1.50591 168 -4.50352 -0.133551 -1.50591 177 -4.50392 -0.119403 -1.50591 159 -4.49667 -0.282008 -1.50591 175 -4.4869 -0.40902 -1.50591 164 -4.48816 -0.39492 -1.50591 164 -4.48997 -0.373766 -1.50591 173 -4.4933 -0.331434 -1.50591 185 -4.58533 1.33038 -1.50577 130 -4.77236 0.140758 -1.50577 134 -4.77332 0.103274 -1.50577 132 -5.89113 1.28469 -1.50541 34 -4.83664 1.04695 -1.50528 95 -4.8713 0.871566 -1.50528 87 -4.45449 0.663463 -1.50522 153 -4.4808 0.452893 -1.50522 172 -4.47935 0.466967 -1.50522 170 -4.49954 0.191854 -1.50522 170 -4.5036 0.0150551 -1.50522 167 -4.50308 -0.0698335 -1.50522 172 -4.50121 -0.147627 -1.50522 155 -4.89818 -0.691547 -1.50464 79 -4.50097 -0.0839344 -1.50452 176 -4.7687 -0.13656 -1.50445 128 -4.75966 -0.323673 -1.50445 137 -4.80512 1.16725 -1.504 92 -4.91774 0.517198 -1.504 87 -4.90361 -0.637413 -1.504 82 -4.90558 -0.622003 -1.504 92 -4.75804 0.290174 -1.50314 128 -4.78253 1.24161 -1.50273 98 -4.82087 1.0832 -1.50273 92 -4.81745 1.09834 -1.50273 92 -4.81397 1.11347 -1.50273 86 -4.86921 0.839613 -1.50273 90 -4.87815 0.786023 -1.50273 90 -4.88417 0.747686 -1.50273 92 -4.90336 0.609311 -1.50273 87 -4.93999 -0.103176 -1.50273 100 -4.93856 -0.157487 -1.50273 101 -4.75017 -0.375512 -1.50248 121 -4.89237 0.678296 -1.50209 90 -4.88275 0.731758 -1.50146 85 -4.90423 0.570324 -1.50146 103 -4.92994 0.269004 -1.50146 97 -4.9326 0.214782 -1.50146 98 -4.93714 0.0364731 -1.50146 95 -4.93425 -0.172887 -1.50146 103 -4.91053 -0.513234 -1.50146 90 -4.90889 -0.52866 -1.50146 89 -4.95666 1.15244 -1.50115 101 -4.79037 1.18755 -1.50082 95 -4.83014 1.01374 -1.50082 82 -4.83796 0.975778 -1.50082 87 -4.84839 0.922525 -1.50082 87 -4.87005 0.800394 -1.50082 95 -4.89073 0.662394 -1.50082 89 -4.93455 0.0907119 -1.50082 78 -4.93396 -0.118589 -1.50082 98 -4.92822 -0.265768 -1.50082 100 -4.8981 -0.605476 -1.50082 84 -4.81686 1.06637 -1.50019 89 -4.86564 0.815365 -1.50019 92 -4.90803 0.500531 -1.50019 92 -4.92775 0.23782 -1.50018 95 -4.93337 -0.0333191 -1.50018 97 -4.92208 -0.335293 -1.50018 100 -4.91488 -0.428004 -1.50018 90 -4.9121 -0.458877 -1.50018 71 -4.76147 1.28411 -1.49955 97 -4.77915 1.21667 -1.49955 94 -4.8794 0.715559 -1.49955 99 -4.88272 0.692557 -1.49955 84 -4.91135 0.446355 -1.49955 92 -4.90992 0.461782 -1.49955 95 -4.92989 0.129345 -1.49955 94 -4.93123 0.0596404 -1.49955 81 -4.91495 -0.404695 -1.49955 86 -4.75354 1.30602 -1.49891 97 -4.76761 1.25368 -1.49891 98 -4.85535 0.852878 -1.49891 90 -4.87057 0.761212 -1.49891 92 -4.91528 0.376726 -1.49891 94 -4.92319 0.253085 -1.49891 97 -4.8988 -0.550977 -1.49891 90 -4.89705 -0.566365 -1.49891 75 -4.91066 1.30565 -1.49868 119 -5.0436 -0.617545 -1.49867 126 -5.04552 -0.601698 -1.49867 89 -5.04738 -0.585842 -1.49867 122 -5.03651 -0.672964 -1.49867 128 -4.73278 1.37255 -1.49828 100 -4.74342 1.33534 -1.49828 98 -4.79577 1.13302 -1.49828 100 -4.81953 1.02729 -1.49828 95 -4.89658 0.553799 -1.49828 84 -4.90392 0.484521 -1.49828 90 -4.90895 0.430572 -1.49828 90 -4.91455 0.361133 -1.49828 101 -4.91218 0.392004 -1.49828 94 -4.91619 0.337969 -1.49828 98 -4.91723 0.322524 -1.49828 92 -4.91961 0.283894 -1.49828 92 -4.91888 -0.296311 -1.49828 98 -4.90268 -0.4969 -1.49828 84 -4.99609 0.916003 -1.49806 101 -5.00585 0.861015 -1.49806 96 -5.0587 0.45766 -1.49806 109 -5.06012 0.441766 -1.49806 108 -4.72663 1.38687 -1.49764 100 -4.74577 1.31991 -1.49764 100 -4.82559 0.989021 -1.49764 100 -4.84478 0.890282 -1.49764 97 -4.92378 0.144634 -1.49764 92 -4.92537 -0.0719934 -1.49764 95 -4.92386 -0.141616 -1.49764 92 -4.91956 -0.249854 -1.49764 103 -4.90596 -0.442802 -1.49764 97 -4.90308 -0.473618 -1.49764 102 -4.91553 -0.319375 -1.49764 102 -4.88277 -0.650409 -1.49764 96 -4.95441 1.11104 -1.49744 101 -5.0318 0.679395 -1.49744 134 -5.0769 0.0752872 -1.49744 106 -4.75816 1.26716 -1.49701 98 -4.82985 0.958302 -1.49701 74 -4.88924 0.584083 -1.497 90 -4.924 0.00536655 -1.497 89 -4.92323 -0.0874443 -1.497 96 -4.916 -0.280661 -1.497 92 -4.92011 -0.195681 -1.497 105 -4.90921 1.28879 -1.49682 108 -4.92693 1.21927 -1.49682 107 -4.98649 0.946686 -1.49682 102 -5.01377 0.78959 -1.49682 100 -5.01743 0.765956 -1.49682 130 -5.04363 0.568382 -1.49682 108 -5.07544 0.0354078 -1.49682 119 -5.04785 -0.529684 -1.49682 95 -5.04616 -0.54554 -1.49682 126 -5.03294 -0.656371 -1.49682 96 -4.73161 1.35608 -1.49637 95 -4.90526 0.406935 -1.49637 95 -4.9181 0.198591 -1.49637 98 -4.91951 0.15996 -1.49637 92 -4.91689 -0.226513 -1.49637 98 -4.91758 -0.211066 -1.49637 98 -4.90965 -0.350004 -1.49637 87 -4.88771 -0.580891 -1.49637 99 -4.97391 1.00109 -1.4962 121 -4.9801 0.969821 -1.4962 123 -4.9975 0.875781 -1.4962 128 -5.02587 0.694698 -1.4962 105 -5.02026 0.73415 -1.4962 129 -5.03993 0.584014 -1.4962 97 -5.04927 0.496848 -1.4962 138 -5.06185 0.345953 -1.4962 107 -5.06179 -0.34687 -1.4962 103 -5.48656 -0.654042 -1.49597 89 -4.88074 0.621965 -1.49573 104 -4.9168 0.18306 -1.49573 100 -4.92017 0.0208011 -1.49573 103 -4.92018 -0.0178433 -1.49573 90 -4.87602 1.3954 -1.49558 110 -4.89107 1.34171 -1.49558 114 -4.93634 1.16416 -1.49558 136 -4.94533 1.12536 -1.49558 138 -4.9574 1.07091 -1.49558 98 -4.97517 0.985101 -1.49558 96 -5.02825 0.662868 -1.49558 102 -5.04161 0.552138 -1.49558 128 -5.06517 0.258355 -1.49558 108 -5.06096 -0.330831 -1.49558 113 -4.83451 0.904063 -1.4951 81 -4.87688 0.63704 -1.4951 71 -4.88887 0.537327 -1.4951 97 -4.91718 0.105756 -1.4951 83 -4.91807 -0.0487487 -1.4951 94 -4.90297 -0.388274 -1.49509 105 -4.89342 1.32585 -1.49496 109 -4.96217 1.03937 -1.49496 98 -5.01417 0.749374 -1.49496 100 -5.05911 0.329822 -1.49496 110 -5.0694 -0.0681284 -1.49496 104 -5.0677 -0.147748 -1.49496 108 -5.03875 -0.560731 -1.49496 122 -5.02198 -0.695066 -1.49496 93 -4.78114 1.14538 -1.49446 82 -4.88316 1.35607 -1.49435 115 -4.91569 1.23292 -1.49434 101 -4.92334 1.20201 -1.49434 111 -4.98195 0.92966 -1.49434 124 -4.9891 0.890504 -1.49434 106 -4.99727 0.843443 -1.49434 106 -5.04513 0.480471 -1.49434 101 -5.06583 0.146823 -1.49434 98 -5.06769 -0.0521736 -1.49434 106 -5.06477 -0.179508 -1.49434 106 -5.06531 -0.163595 -1.49434 108 -5.0668 -0.107892 -1.49434 111 -5.06418 -0.195418 -1.49434 110 -5.06249 -0.235185 -1.49434 97 -5.04936 -0.433756 -1.49434 97 -4.76642 1.1974 -1.49382 100 -4.90498 0.306176 -1.49382 92 -4.91395 0.0747811 -1.49382 106 -4.90401 1.27103 -1.49373 108 -4.9271 1.17837 -1.49373 107 -5.04011 0.511977 -1.49372 106 -5.04821 0.424819 -1.49372 142 -5.06523 0.0910887 -1.49372 108 -5.06604 -0.0123566 -1.49372 133 -5.0577 -0.290716 -1.49372 102 -5.05676 -0.306605 -1.49372 113 -5.0488 -0.417725 -1.49372 131 -5.05009 -0.401863 -1.49372 112 -5.04003 -0.512813 -1.49372 126 -5.35612 1.32566 -1.49369 108 -5.36435 1.29198 -1.49369 105 -5.482 -0.609916 -1.49312 90 -4.87305 1.37805 -1.49311 116 -4.94487 1.09266 -1.49311 130 -4.95982 1.02265 -1.49311 135 -5.01424 0.7092 -1.49311 101 -5.02377 0.638245 -1.49311 135 -5.03659 0.527622 -1.49311 101 -5.04949 0.385023 -1.49311 105 -5.05674 0.273895 -1.49311 104 -5.05836 0.242117 -1.49311 108 -5.06154 0.162636 -1.49311 133 -5.06264 -0.123696 -1.4931 106 -5.06332 -0.0918833 -1.4931 107 -5.05669 -0.274713 -1.4931 143 -5.02367 -0.639058 -1.4931 119 -5.21032 1.12666 -1.49304 105 -4.8213 0.93294 -1.49255 102 -5.3745 1.23205 -1.49255 99 -5.3706 1.24893 -1.49255 101 -5.38772 1.17288 -1.49255 104 -4.90626 1.24698 -1.49249 138 -4.99811 0.803292 -1.49249 116 -5.04636 0.400744 -1.49249 101 -5.05349 0.297619 -1.49249 102 -5.06056 0.13079 -1.49249 103 -5.05751 -0.219005 -1.49249 138 -5.04158 -0.457003 -1.49249 125 -5.03949 1.18202 -1.49194 86 -5.0239 0.60623 -1.49187 136 -5.04688 0.368901 -1.49187 106 -5.05564 0.218134 -1.49187 127 -5.06031 0.0194821 -1.49187 107 -5.18826 1.20751 -1.49186 115 -5.33381 1.38252 -1.49141 114 -5.38027 1.18895 -1.4914 96 -5.13008 -0.675377 -1.49134 78 -5.1502 1.35323 -1.49127 124 -5.20823 1.10912 -1.49127 111 -5.26636 0.788175 -1.49126 105 -5.28258 -0.670916 -1.49126 95 -5.0544 0.202183 -1.49125 100 -5.05714 0.114824 -1.49125 105 -5.04434 -0.377453 -1.49125 105 -5.03482 -0.488283 -1.49125 98 -5.35907 1.27287 -1.49083 109 -5.47626 -0.591903 -1.49083 125 -5.47243 -0.626298 -1.49083 123 -5.14523 -0.52989 -1.49073 80 -5.2528 0.862247 -1.49067 107 -5.27281 0.72997 -1.49067 102 -5.28052 0.671949 -1.49067 104 -5.27855 -0.687254 -1.49067 103 -4.94585 1.05225 -1.49063 132 -4.98992 0.818097 -1.49063 125 -5.0562 0.0591984 -1.49063 109 -5.05641 -0.0361112 -1.49063 98 -5.05034 -0.250466 -1.49063 106 -5.04361 -0.361458 -1.49063 107 -5.33442 1.36478 -1.49026 114 -5.3491 1.30605 -1.49026 102 -5.46544 -0.669035 -1.49026 119 -5.46332 -0.686202 -1.49026 112 -5.21303 1.06743 -1.49008 93 -5.27649 0.688298 -1.49008 111 -5.28774 -0.595725 -1.49008 99 -5.0163 0.621338 -1.49001 98 -5.04494 0.313062 -1.49001 137 -5.05464 0.0036096 -1.49001 108 -4.88903 -0.371799 -1.49001 78 -5.32168 1.40614 -1.48969 109 -5.33682 1.34754 -1.48969 115 -5.09213 0.885955 -1.48952 77 -5.16324 1.27893 -1.4895 125 -5.17313 1.23834 -1.4895 111 -5.25171 0.84515 -1.48949 100 -5.25434 0.828648 -1.48949 101 -5.282 -0.628703 -1.48949 108 -5.07723 0.957489 -1.48891 77 -5.13202 1.39167 -1.48891 127 -5.19188 1.14837 -1.4889 101 -5.18825 1.16468 -1.4889 106 -5.2126 1.05031 -1.4889 107 -5.26481 0.745754 -1.4889 108 -5.2694 0.712661 -1.4889 101 -5.27894 0.638097 -1.4889 108 -5.2781 -0.645053 -1.4889 142 -5.02876 -0.471715 -1.48877 120 -5.36527 1.21214 -1.48855 101 -5.15549 1.29424 -1.48831 119 -5.17327 1.22122 -1.48831 106 -5.28479 -0.57016 -1.48831 103 -5.28015 -0.611647 -1.48831 114 -5.05642 1.05262 -1.48831 78 -5.05308 1.0685 -1.48831 82 -5.06132 1.02878 -1.48831 80 -5.13151 -0.585605 -1.4883 76 -5.1174 -0.698301 -1.4883 72 -5.04551 0.186002 -1.48816 106 -5.3764 1.15266 -1.48797 149 -5.14954 1.30996 -1.48772 120 -5.25251 0.803039 -1.48772 112 -5.1629 -0.0108592 -1.4877 83 -5.14146 1.33375 -1.48713 120 -5.17897 1.17973 -1.48713 114 -5.19858 1.09007 -1.48713 151 -5.23875 0.876906 -1.48713 105 -5.25556 0.769754 -1.48713 110 -5.28276 -0.553136 -1.48713 107 -5.02093 1.19424 -1.4871 82 -5.92573 -0.65743 -1.48686 77 -5.92363 -0.676045 -1.48686 77 -5.12024 1.4058 -1.48654 130 -5.20837 1.03248 -1.48654 102 -5.00565 1.24891 -1.48649 85 -5.14875 -0.326703 -1.48649 87 -5.12397 -0.601085 -1.48649 79 -5.54077 1.24743 -1.48637 118 -5.15806 1.25194 -1.48595 118 -5.26743 0.65355 -1.48595 114 -4.98977 1.30338 -1.48588 85 -4.99986 1.26415 -1.48588 83 -5.09029 0.828018 -1.48588 75 -5.15589 -0.116178 -1.48588 83 -5.12743 1.36458 -1.48536 125 -4.97965 1.3342 -1.48528 85 -4.99402 1.27937 -1.48528 83 -5.06898 0.939393 -1.48528 78 -5.11294 0.659433 -1.48528 75 -5.15331 0.142961 -1.48528 80 -5.15432 -0.099953 -1.48528 86 -5.15088 -0.213268 -1.48528 90 -5.14944 -0.245627 -1.48528 82 -5.11326 -0.656922 -1.48527 75 -5.63304 -0.693846 -1.48526 106 -5.22702 0.900322 -1.48477 101 -5.91382 -0.693785 -1.48474 72 -5.5272 1.28094 -1.48471 118 -5.53119 1.26357 -1.48471 114 -5.54475 1.20268 -1.48471 118 -5.63641 -0.649354 -1.4847 105 -5.14828 -0.229373 -1.48467 81 -5.14452 -0.302131 -1.48467 85 -5.14089 -0.358678 -1.48467 90 -5.11121 0.642871 -1.48407 69 -5.14441 -0.269711 -1.48406 87 -5.13601 -0.398904 -1.48406 81 -5.12835 -0.487584 -1.48406 82 -5.126 -0.511746 -1.48406 81 -5.11448 -0.616307 -1.48406 68 -5.51736 1.3061 -1.4836 122 -5.51323 1.32343 -1.4836 122 -5.6346 -0.631198 -1.48359 141 -4.95918 1.38731 -1.48346 88 -5.03481 1.08109 -1.48346 79 -5.04959 1.00981 -1.48346 79 -5.13515 0.3851 -1.48346 78 -5.14506 0.21553 -1.48346 82 -5.14766 -0.140303 -1.48346 84 -5.14581 -0.196894 -1.48346 83 -5.13818 -0.342291 -1.48346 82 -5.1315 -0.431017 -1.48346 83 -5.53339 1.22757 -1.48305 114 -5.02076 1.13596 -1.48285 70 -5.02953 1.09649 -1.48285 75 -5.06585 0.914104 -1.48285 72 -5.07424 0.866319 -1.48285 69 -5.08346 0.810473 -1.48285 67 -5.14746 0.0456972 -1.48285 89 -5.13973 -0.285678 -1.48285 89 -5.13403 -0.37444 -1.48285 82 -5.78528 1.37596 -1.48263 76 -5.49461 1.38305 -1.48249 125 -4.97462 1.31607 -1.48225 87 -5.01531 1.15129 -1.48225 81 -5.09595 0.714241 -1.48225 75 -5.12416 -0.470977 -1.48224 81 -5.12903 -0.414606 -1.48224 82 -5.11699 -0.543368 -1.48224 68 -5.80227 1.29361 -1.4821 72 -5.91149 -0.627743 -1.48209 76 -5.48837 1.39984 -1.48194 129 -5.50343 1.33941 -1.48194 125 -4.99476 1.22946 -1.48164 82 -5.0005 1.20591 -1.48164 77 -5.04713 0.992808 -1.48164 68 -5.1104 0.585728 -1.48164 69 -5.1375 0.255617 -1.48164 79 -5.14338 0.0698822 -1.48164 95 -5.14351 -0.0593929 -1.48164 82 -5.14096 -0.172482 -1.48164 86 -5.78582 1.35688 -1.48157 90 -5.6229 -0.665651 -1.48138 134 -4.96045 1.35408 -1.48104 89 -5.08402 0.769639 -1.48103 76 -5.08641 0.753664 -1.48103 74 -5.09439 0.697692 -1.48103 69 -5.14093 0.102149 -1.48103 81 -5.14186 0.0294639 -1.48103 86 -5.12182 -0.454557 -1.48103 86 -5.19282 1.01255 -1.48064 125 -5.7884 1.32872 -1.48051 77 -4.95434 1.36914 -1.48043 87 -5.07076 0.841112 -1.48043 82 -5.13057 0.311841 -1.48043 79 -5.12851 0.344071 -1.48043 85 -5.13849 0.126318 -1.48043 83 -5.13997 -0.0270731 -1.48043 83 -5.49146 1.36396 -1.48027 122 -5.2534 0.610048 -1.48005 101 -5.13008 0.287544 -1.47982 79 -5.13096 0.271425 -1.47982 80 -5.13576 -0.156185 -1.47982 85 -5.09827 -0.638809 -1.47982 82 -5.09808 0.62488 -1.47922 85 -5.10097 0.600848 -1.47922 76 -5.10726 0.544726 -1.47922 75 -5.12577 0.327695 -1.47922 82 -5.13238 0.19878 -1.47922 76 -5.13103 0.231024 -1.47922 88 -5.13379 0.158464 -1.47922 72 -5.13551 0.0858744 -1.47922 79 -5.13555 -0.0835448 -1.47922 83 -5.78691 1.30923 -1.47892 88 -5.11872 0.399964 -1.47861 81 -5.13431 0.0132528 -1.47861 89 -5.24959 0.592926 -1.47828 103 -5.52593 1.18054 -1.47806 168 -5.04054 0.966801 -1.47801 83 -5.11554 0.415881 -1.478 78 -5.1198 0.359607 -1.478 79 -5.18626 0.98598 -1.4771 114 -5.76033 1.38906 -1.4768 90 -5.10137 0.527855 -1.47679 69 -5.12843 -0.0431825 -1.47679 86 -5.0963 -0.557463 -1.47618 81 -5.07294 0.727167 -1.47558 84 -5.07957 0.679325 -1.47558 84 -5.10079 0.495404 -1.47558 75 -5.10307 0.471362 -1.47558 68 -5.18369 0.968657 -1.47533 115 -5.60887 -0.601433 -1.47528 90 -5.10403 0.439116 -1.47497 73 -4.99829 1.11424 -1.47437 85 -5.08949 0.567021 -1.47437 89 -5.04058 0.893054 -1.47376 82 -5.09883 0.454791 -1.47376 82 -5.09163 0.510627 -1.47316 85 -5.25275 -0.341971 -1.47238 124 -5.05335 0.781098 -1.47194 82 -5.18272 0.909676 -1.47179 81 -6.00993 -0.69366 -1.47131 91 -5.1066 0.173551 -1.47073 84 -6.31953 1.36535 -1.47069 112 -5.17608 0.9253 -1.47061 97 -5.16601 0.948675 -1.46884 115 -5.99777 -0.663564 -1.46717 128 -6.18048 -0.695238 -1.46695 90 -6.41139 -0.703055 -1.46679 51 -5.21152 0.572248 -1.46589 104 -5.88385 1.3041 -1.4651 115 -6.17804 -0.645901 -1.46494 94 -5.86107 1.38627 -1.46407 113 -5.86539 1.36785 -1.46407 112 -5.87177 1.3402 -1.46407 109 -6.17108 -0.674602 -1.46393 125 -5.8703 1.3205 -1.46251 112 -5.84916 1.40291 -1.46199 117 -6.04068 1.39694 -1.46193 115 -5.97871 -0.642358 -1.46147 78 -6.27348 1.37622 -1.45999 173 -6.0375 1.3762 -1.45991 124 -6.04812 1.32874 -1.45991 8 -6.25935 1.4041 -1.45805 142 -5.8577 1.27915 -1.45681 163 -6.0267 1.35377 -1.45589 168 -5.85799 1.25034 -1.45526 74 -5.33785 -0.552181 -1.44851 74 -5.11633 -0.348564 -1.43047 116 -5.09825 -0.51671 -1.42929 72 -5.08162 -0.490745 -1.42339 88 -5.09031 -0.306501 -1.42162 57 -5.06775 0.533039 -1.42044 105 -5.07901 -0.36187 -1.41926 110 -5.06938 -0.457356 -1.41867 97 -5.07344 -0.385491 -1.41808 75 -5.06839 -0.401107 -1.4169 118 -5.06222 -0.472716 -1.4169 91 -5.06128 -0.440549 -1.41572 90 -5.05949 -0.416362 -1.41454 88 -5.1213 1.07147 -1.40848 101 -5.07914 1.02913 -1.39362 79 -5.07401 1.04468 -1.39304 92 -4.95718 0.506245 -1.38562 103 -4.97841 -0.212917 -1.38562 89 -4.93852 0.418403 -1.37735 134 -5.02227 1.00087 -1.37532 125 -4.93281 0.394556 -1.37499 73 -4.91865 0.447954 -1.37204 121 -4.90547 0.485679 -1.36909 137 -5.04766 -0.507567 -1.36102 87 -4.87344 0.459511 -1.35847 139 -4.85338 0.426993 -1.35139 116 -5.00725 -0.487836 -1.34843 71 -4.81013 0.370193 -1.33663 132 -4.78649 0.353386 -1.32896 174 -4.77479 -0.188115 -1.32246 197 -4.77371 -0.165536 -1.32187 189 -4.76892 -0.270466 -1.32187 81 -4.76331 0.329247 -1.32129 195 -4.7697 -0.217916 -1.32128 75 -4.83523 0.93892 -1.31699 118 -4.74715 0.313244 -1.31597 211 -4.74 -0.238792 -1.31243 85 -4.73476 0.297561 -1.31184 224 -4.73984 -0.149267 -1.31125 206 -4.73574 -0.0821162 -1.30948 228 -4.72591 -0.0967445 -1.30653 226 -4.725 -0.133859 -1.30653 214 -4.72558 -0.111591 -1.30653 219 -4.71915 0.192634 -1.30535 226 -4.71443 -0.252217 -1.30476 76 -4.71878 -0.0668982 -1.30417 232 -4.71279 0.207239 -1.30358 234 -4.70887 0.0886395 -1.30122 237 -4.70474 0.103369 -1.30004 237 -4.69649 0.228785 -1.29886 238 -4.99941 -0.517351 -1.29788 96 -4.69821 -0.0148277 -1.29768 240 -4.69803 -0.0443474 -1.29768 239 -4.69814 -0.0295866 -1.29768 238 -4.68701 0.125175 -1.29473 121 -4.68868 0.00734991 -1.29473 241 -4.6881 0.0736319 -1.29473 240 -4.68831 0.0589044 -1.29473 240 -4.67886 0.272235 -1.29414 242 -4.68481 0.0220832 -1.29355 240 -4.75541 0.907473 -1.29182 95 -4.67658 0.15436 -1.29177 91 -4.67131 0.139527 -1.29 96 -4.66943 0.0367657 -1.28882 242 -4.65757 0.24177 -1.28705 243 -4.66052 0.175903 -1.28705 117 -4.79566 -0.445532 -1.28439 68 -4.72248 0.885625 -1.28096 75 -4.63579 0.255363 -1.28056 255 -4.72552 0.847809 -1.27981 84 -4.72095 0.862296 -1.27924 96 -4.72062 0.831589 -1.27753 88 -4.84258 1.02195 -1.2757 84 -4.76648 -0.427888 -1.27524 84 -4.76716 -0.397782 -1.27466 104 -4.71128 0.806997 -1.27352 67 -4.75634 -0.411983 -1.27181 91 -4.69736 0.774159 -1.2678 63 -4.74414 -0.373494 -1.26723 75 -4.73764 -0.358051 -1.26494 79 -4.6798 0.786291 -1.26323 68 -4.72918 -0.342527 -1.26208 75 -4.67681 0.732944 -1.2598 57 -4.67565 0.702658 -1.25808 63 -4.68309 0.651206 -1.25808 174 -4.66575 0.753711 -1.25751 57 -4.67701 0.680331 -1.25751 95 -5.01165 1.07243 -1.2569 28 -4.66965 0.664233 -1.25465 186 -4.66017 0.715236 -1.25408 67 -4.67092 0.627007 -1.25351 166 -4.70205 -0.318453 -1.25351 69 -4.6992 -0.303454 -1.25236 76 -4.76633 0.982861 -1.25187 68 -5.07857 -0.526854 -1.2516 47 -4.6963 -0.288475 -1.25122 81 -4.68995 -0.265949 -1.24893 85 -4.65198 0.609475 -1.24722 104 -4.75243 0.964533 -1.24688 91 -4.68119 -0.250755 -1.24607 93 -4.64628 0.593844 -1.24493 125 -4.64242 0.578501 -1.24321 161 -4.67047 -0.235532 -1.24264 90 -4.66835 -0.198702 -1.2415 89 -4.73468 0.945571 -1.24078 84 -4.66642 -0.147261 -1.24035 81 -4.66512 -0.183906 -1.24035 80 -4.66353 -0.22054 -1.24035 101 -4.63368 0.555186 -1.23978 115 -4.62947 0.525156 -1.2375 82 -4.63189 0.503333 -1.2375 79 -4.62589 0.539464 -1.23692 98 -4.63306 0.474015 -1.23692 73 -4.63154 0.488568 -1.23692 79 -4.72587 0.920747 -1.2369 85 -4.78463 -0.463623 -1.23468 74 -4.72211 0.889309 -1.23413 100 -4.71929 0.90414 -1.23413 82 -4.62571 0.451193 -1.23406 67 -4.64387 -0.132075 -1.23349 61 -4.64268 -0.168542 -1.23349 51 -4.62329 0.436278 -1.23292 66 -4.64312 -0.0809831 -1.23292 71 -4.63952 -0.0663624 -1.23178 77 -4.63709 -0.0954835 -1.2312 63 -4.63396 -0.0517544 -1.23006 63 -4.76596 -0.476836 -1.22969 52 -4.61449 0.406148 -1.22949 72 -4.99957 -0.503202 -1.22934 27 -4.63039 -0.0153671 -1.22892 59 -4.62893 -0.117183 -1.22892 72 -4.61253 0.384058 -1.22835 77 -4.60937 0.420272 -1.22835 65 -4.62845 0.0209805 -1.22834 80 -4.91321 1.03469 -1.22828 27 -4.70407 0.870736 -1.22803 85 -4.62644 0.0354947 -1.22777 102 -4.62648 -0.0299118 -1.22777 73 -4.6099 0.369238 -1.2272 90 -4.61368 0.318529 -1.2272 75 -4.61604 0.282284 -1.2272 88 -4.61957 0.217 -1.2272 85 -4.62466 -0.000852386 -1.2272 72 -4.61499 0.267659 -1.22663 94 -4.61658 0.238656 -1.22663 90 -4.60883 0.332723 -1.22606 86 -4.6053 0.354281 -1.22549 88 -4.6151 0.187704 -1.22549 81 -4.61864 0.0499031 -1.22549 102 -4.6159 0.100631 -1.22491 88 -4.6126 0.151304 -1.22434 101 -4.60319 0.303212 -1.22377 82 -4.60874 0.201919 -1.22377 95 -4.90104 1.00794 -1.22351 27 -4.61069 0.0715061 -1.2232 91 -4.60636 0.165557 -1.22263 105 -4.6073 0.136611 -1.22263 97 -4.60853 0.0859432 -1.22263 87 -4.59859 0.252118 -1.22148 90 -4.7503 0.317881 -1.22137 109 -4.60215 0.114722 -1.22091 94 -4.74342 0.384857 -1.22082 84 -4.73895 -0.436403 -1.22082 85 -4.74382 0.354914 -1.22026 99 -4.75701 0.0264588 -1.22026 108 -4.75163 0.18327 -1.21971 87 -4.67784 0.84327 -1.21916 67 -4.73969 0.332183 -1.2186 82 -4.74719 0.198057 -1.2186 107 -4.74908 0.145847 -1.2186 95 -4.74462 0.212895 -1.21805 80 -4.74847 0.0935944 -1.21805 88 -4.74476 0.160658 -1.21749 101 -4.7255 0.435827 -1.21694 81 -4.73119 0.368982 -1.21694 87 -4.72691 -0.420249 -1.21694 64 -4.67099 0.826948 -1.21639 78 -4.67357 0.812268 -1.21639 71 -4.72494 0.3984 -1.21583 84 -4.7417 0.0115596 -1.21583 86 -4.73048 0.264469 -1.21472 95 -4.73663 0.10831 -1.21472 89 -4.73721 0.0785481 -1.21472 92 -4.72055 -0.404697 -1.21472 61 -4.72937 0.249516 -1.21417 96 -4.89069 0.878145 -1.21398 26 -4.67625 0.737315 -1.21361 62 -4.73369 0.0561995 -1.21361 89 -4.66842 0.773715 -1.21306 68 -4.72473 0.226982 -1.2125 89 -4.72616 0.0413028 -1.21139 81 -4.72632 -0.0106657 -1.21139 91 -4.70305 0.448779 -1.21084 93 -4.65459 0.786519 -1.20973 74 -4.85321 0.981944 -1.20921 26 -4.71044 0.278302 -1.20918 75 -4.70524 0.300273 -1.20807 86 -4.68941 0.46985 -1.20751 92 -4.70141 -0.328622 -1.20751 90 -4.69237 0.4181 -1.20696 91 -4.69667 -0.313435 -1.20585 81 -4.69294 -0.365058 -1.20585 67 -4.68026 0.483832 -1.2053 97 -4.68986 -0.379634 -1.20529 68 -4.6928 -0.283539 -1.20419 73 -4.65401 0.651801 -1.20363 86 -4.66276 0.585944 -1.20363 87 -4.68641 -0.349698 -1.20363 85 -4.90777 -0.471104 -1.20338 26 -4.63666 0.753683 -1.20308 69 -4.66356 0.563744 -1.20308 87 -4.83359 0.962055 -1.20285 26 -4.64276 0.70238 -1.20253 64 -4.65327 0.614506 -1.20197 91 -4.66319 0.534015 -1.20197 85 -4.66724 0.497375 -1.20197 93 -4.64433 0.665371 -1.20142 114 -4.64842 0.636178 -1.20142 90 -4.65327 0.599649 -1.20142 93 -4.68996 0.129612 -1.20142 79 -4.6823 -0.297618 -1.20141 77 -4.65767 0.548235 -1.20086 85 -4.66102 0.518959 -1.20086 87 -4.63293 0.71583 -1.20031 71 -4.8977 -0.454676 -1.2002 26 -4.8422 0.853465 -1.19967 26 -4.68207 -0.0250311 -1.19864 96 -4.83155 0.89075 -1.19861 124 -4.62972 0.685623 -1.19809 69 -4.67405 -0.0616588 -1.19643 91 -4.88181 -0.437827 -1.19543 26 -4.66972 -0.0909295 -1.19532 107 -4.66503 -0.127476 -1.19421 83 -4.66468 -0.0394987 -1.19365 90 -4.65651 -0.244445 -1.1931 60 -4.66038 -0.0760492 -1.19254 90 -4.65772 -0.112591 -1.19199 102 -4.65253 -0.207576 -1.19144 52 -4.87824 -0.0150134 -1.18907 26 -4.8661 -0.344224 -1.18907 26 -4.86331 -0.328696 -1.18801 26 -4.63462 -0.257782 -1.187 65 -4.63772 -0.141162 -1.18645 67 -4.80125 0.807162 -1.18642 26 -4.78139 0.896783 -1.18536 100 -4.63263 -0.177413 -1.18534 65 -4.63039 -0.22834 -1.18534 66 -4.62821 -0.191785 -1.18423 29 -4.84402 -0.381022 -1.18377 26 -4.81277 0.654333 -1.18324 26 -4.80147 0.70663 -1.18218 26 -4.7653 0.909199 -1.18165 63 -4.78961 0.758758 -1.18112 25 -4.80094 0.683432 -1.18112 25 -4.61805 -0.154977 -1.1809 100 -4.80115 0.668071 -1.18059 25 -4.8474 0.00776083 -1.18059 40 -4.83126 -0.395356 -1.18059 25 -4.78742 0.73527 -1.17953 25 -4.77959 0.772529 -1.179 25 -4.82423 -0.410073 -1.179 25 -4.79861 0.629298 -1.17847 25 -4.80685 0.546066 -1.17794 96 -4.77144 0.786569 -1.17741 25 -4.78208 0.719037 -1.17741 25 -4.83257 -0.113813 -1.17688 25 -4.82018 -0.36405 -1.17688 25 -4.78711 0.581857 -1.17371 85 -4.78597 0.558823 -1.17265 65 -4.81583 -0.0832399 -1.17211 25 -4.80605 -0.287245 -1.17158 66 -4.80692 -0.13601 -1.16999 25 -4.76996 0.594902 -1.16947 53 -4.80591 -0.0982231 -1.16947 25 -4.80653 -0.060475 -1.16947 25 -4.80489 -0.0302727 -1.16894 25 -4.80477 -0.0453678 -1.16894 25 -4.79928 -0.233967 -1.16894 25 -4.79309 -0.309208 -1.16841 43 -4.79682 -0.150859 -1.16735 25 -4.7944 -0.165873 -1.16682 25 -4.78381 -0.270963 -1.16523 51 -4.75873 0.525191 -1.16417 60 -4.74512 0.606822 -1.16311 29 -4.77986 0.0223062 -1.16205 60 -4.77043 -0.187679 -1.16046 25 -4.76723 -0.217572 -1.15993 25 -4.76211 -0.202381 -1.15834 25 -4.75662 0.0370172 -1.15569 95 -4.76064 1.00548 -1.1538 52 -4.73456 -0.253527 -1.15145 27 -4.69982 0.495946 -1.14721 76 -4.7278 0.983241 -1.14396 112 -4.7436 0.893608 -1.14344 119 -4.74448 0.878359 -1.14292 158 -4.7377 0.861774 -1.14033 166 -4.66492 0.477247 -1.13714 99 -4.69827 0.954216 -1.13463 83 -4.77115 -0.469447 -1.13463 45 -4.65711 0.395187 -1.1329 89 -4.64816 0.409097 -1.13078 114 -4.65123 0.372578 -1.13078 103 -4.66191 0.0577343 -1.12972 105 -4.63974 0.437717 -1.12919 109 -4.63763 0.459577 -1.12919 105 -4.64194 0.34243 -1.12761 116 -4.63342 0.422397 -1.12708 105 -4.69221 0.830949 -1.12686 105 -4.63508 0.356534 -1.12602 114 -4.66901 0.93319 -1.12583 58 -4.63581 0.319977 -1.12549 112 -4.64435 0.152321 -1.12549 107 -4.64239 0.203377 -1.12549 140 -4.64521 0.123137 -1.12549 129 -4.63487 0.305274 -1.12496 112 -4.63581 0.290712 -1.12496 116 -4.6368 0.239612 -1.12443 130 -4.63972 0.174038 -1.12443 123 -4.6356 0.22494 -1.1239 110 -4.6405 0.0719314 -1.1239 155 -4.66433 0.917068 -1.12375 84 -4.63217 0.253945 -1.12337 130 -4.63709 0.137458 -1.12337 119 -4.63338 0.188347 -1.12284 130 -4.62943 0.268375 -1.12284 126 -4.63208 0.108152 -1.12178 129 -4.6229 0.0860901 -1.11913 148 -4.75944 1.02427 -1.11563 11 -4.67704 0.655258 -1.11547 104 -4.70095 -0.432335 -1.11495 60 -4.69765 -0.446907 -1.11443 66 -4.74939 1.00644 -1.1121 42 -4.66567 0.638801 -1.11184 161 -4.69074 -0.416474 -1.11184 98 -4.63193 0.805627 -1.10977 53 -4.64306 0.687883 -1.1077 82 -4.64088 0.702466 -1.1077 81 -4.81179 -0.478306 -1.10707 36 -4.64137 0.672759 -1.10666 55 -4.67079 -0.325955 -1.10459 86 -4.72379 0.977605 -1.10405 55 -4.61522 0.765558 -1.10355 67 -4.6561 -0.391091 -1.102 77 -4.60997 0.749857 -1.10148 76 -4.60204 0.785726 -1.10096 74 -4.6119 0.713059 -1.10045 57 -4.65638 -0.310167 -1.10044 88 -4.6496 -0.375795 -1.09993 61 -4.70789 0.958795 -1.09902 52 -4.64499 -0.360706 -1.09837 79 -4.64664 -0.338813 -1.09837 79 -4.59512 0.732728 -1.09682 65 -4.61208 0.617022 -1.09682 86 -4.6443 -0.28731 -1.09682 90 -4.59769 0.593154 -1.09216 89 -4.62882 -0.169611 -1.09112 102 -4.59365 0.563357 -1.09009 77 -4.59433 0.541487 -1.08957 70 -4.62354 -0.154843 -1.08957 102 -4.58802 0.577324 -1.08905 88 -4.60456 0.425694 -1.08905 255 -4.60522 0.396599 -1.08853 255 -4.62211 -0.0385492 -1.08853 101 -4.59866 0.447035 -1.08801 255 -4.61724 -0.103778 -1.08749 91 -4.61689 -0.118284 -1.08749 91 -4.61628 -0.140037 -1.08749 87 -4.61048 -0.270487 -1.08749 53 -4.61178 0.208012 -1.08698 255 -4.61617 -0.0529719 -1.08698 95 -4.58612 0.511391 -1.08646 85 -4.66404 0.911485 -1.08543 62 -4.58065 0.525378 -1.08542 89 -4.60674 -0.190424 -1.08542 65 -4.73109 -0.44823 -1.08542 16 -4.6578 0.933063 -1.08492 60 -4.60789 -0.0890312 -1.0849 93 -4.60244 -0.240955 -1.0849 75 -4.60423 0.0774223 -1.08387 255 -4.60488 -0.0021402 -1.08387 102 -4.60482 -0.023841 -1.08387 102 -4.60428 -0.0744703 -1.08387 94 -4.60287 0.026792 -1.08335 102 -4.60293 0.0123324 -1.08335 100 -4.59841 -0.20451 -1.08335 89 -4.68893 0.711413 -1.08291 92 -4.59202 -0.254822 -1.08232 66 -4.65637 0.879574 -1.0819 48 -4.71838 -0.417215 -1.0814 64 -4.80069 1.02782 -1.08073 44 -4.58231 -0.218132 -1.07921 76 -4.66756 0.723071 -1.07787 72 -4.79059 1.01 -1.07732 46 -4.6346 0.890443 -1.07687 55 -4.66819 0.69314 -1.07687 100 -4.69969 -0.430543 -1.07687 62 -4.57765 0.0411702 -1.07662 172 -4.6384 0.838364 -1.07536 49 -4.69651 -0.400544 -1.07536 78 -4.69641 -0.378264 -1.07485 44 -4.66183 0.669705 -1.07435 92 -4.64234 0.733977 -1.07183 70 -4.61919 0.857304 -1.07133 56 -4.62834 0.806462 -1.07133 51 -4.6505 0.653098 -1.07083 88 -4.6574 0.601924 -1.07083 78 -4.6312 0.754558 -1.06982 60 -4.65165 0.616024 -1.06982 73 -4.64678 0.637662 -1.06932 85 -4.60865 0.817859 -1.0668 52 -4.64392 0.585268 -1.0668 77 -4.65007 0.534171 -1.0668 52 -4.61302 0.781304 -1.0663 43 -4.64278 0.562891 -1.06579 80 -4.65028 0.497201 -1.06579 255 -4.66201 -0.346228 -1.06529 58 -4.64754 0.46736 -1.06428 255 -4.74394 0.977127 -1.0642 59 -4.63492 0.547114 -1.06328 78 -4.64391 0.444867 -1.06277 255 -4.73747 0.960343 -1.06176 60 -4.63258 0.480484 -1.06076 255 -4.63698 0.414764 -1.06026 255 -4.65291 -0.155056 -1.06026 71 -4.65337 -0.140437 -1.06026 84 -4.72713 0.94287 -1.05836 71 -4.63354 0.363106 -1.05824 255 -4.63625 0.326704 -1.05824 255 -4.63387 -0.35893 -1.05824 59 -4.64411 -0.12561 -1.05774 91 -4.58111 0.760907 -1.05724 84 -4.63268 -0.293053 -1.05673 70 -4.62467 0.376989 -1.05623 255 -4.63184 0.275205 -1.05623 255 -4.6359 0.195135 -1.05623 255 -4.63097 -0.256467 -1.05573 65 -4.62778 -0.278181 -1.05522 63 -4.62495 -0.321784 -1.05522 70 -4.63353 0.0784413 -1.05472 255 -4.62753 0.209305 -1.05422 255 -4.62381 0.245529 -1.05371 255 -4.629 -0.110737 -1.05371 96 -4.62015 -0.3069 -1.05371 56 -4.62089 -0.226861 -1.05271 67 -4.62272 0.12906 -1.0522 255 -4.62117 -0.175976 -1.0522 79 -4.61242 -0.241016 -1.05069 63 -4.61224 -0.204708 -1.05019 65 -4.76336 -0.477773 -1.05009 44 -4.61215 0.157717 -1.04969 255 -4.61092 -0.19015 -1.04969 62 -4.61198 0.0924521 -1.04918 255 -4.60152 0.295007 -1.04868 255 -4.61038 -0.0741755 -1.04868 86 -4.60818 -0.0886318 -1.04818 82 -4.69149 0.913019 -1.04815 62 -4.68861 0.897213 -1.04669 58 -4.73975 -0.460231 -1.04377 54 -4.58952 -0.0379086 -1.04314 102 -4.42628 0.480415 -1.04295 255 -4.58769 -0.0234909 -1.04264 115 -4.58736 -0.0595213 -1.04264 95 -4.67641 0.85697 -1.04183 75 -4.58369 0.0413086 -1.04163 130 -4.6685 0.8783 -1.04086 60 -4.57999 0.012476 -1.04063 111 -4.57992 0.0268645 -1.04063 133 -4.7297 -0.421712 -1.04037 76 -4.57612 -0.00912188 -1.03962 104 -4.6657 0.839941 -1.03842 83 -4.41069 0.443814 -1.03777 255 -4.66449 0.824625 -1.03745 74 -4.40735 0.45748 -1.03725 255 -4.41183 0.318306 -1.03518 255 -4.70712 -0.43449 -1.03502 64 -4.40375 0.394325 -1.03466 255 -4.40782 0.345879 -1.03466 255 -4.70782 -0.404729 -1.03453 87 -4.40503 0.331764 -1.03363 255 -4.65176 0.807397 -1.03356 85 -4.40093 0.359289 -1.03311 255 -4.40778 0.186092 -1.03207 255 -4.40263 0.282971 -1.03207 255 -4.40471 0.248384 -1.03207 255 -4.40835 0.172244 -1.03207 255 -4.40547 0.234545 -1.03207 255 -4.40956 0.137616 -1.03207 255 -4.69808 -0.381533 -1.03162 86 -4.40156 0.269032 -1.03155 255 -4.39979 0.296681 -1.03155 255 -4.40841 0.10987 -1.03155 255 -4.64838 0.769307 -1.03113 95 -4.64594 0.783905 -1.03113 91 -4.80081 1.04918 -1.03071 13 -4.4004 0.220449 -1.03052 255 -4.40307 0.158219 -1.03052 255 -4.40501 0.0890395 -1.03052 255 -4.40418 0.123632 -1.03052 255 -4.40355 0.0613446 -1.03 255 -4.67749 0.497221 -1.02919 255 -4.63701 0.730155 -1.02675 95 -4.68105 -0.350451 -1.02675 96 -4.67992 -0.365156 -1.02675 95 -4.51967 0.0545711 -1.02502 255 -4.62394 0.750498 -1.02432 92 -4.62969 0.714158 -1.02432 99 -4.67304 0.326699 -1.02432 255 -4.66665 -0.334549 -1.02286 101 -4.48063 0.499488 -1.022 255 -4.62231 0.698214 -1.02189 86 -4.62555 0.676425 -1.02189 95 -4.66237 -0.312132 -1.0214 95 -4.62381 0.661363 -1.02092 101 -4.64576 0.464541 -1.02043 255 -4.65059 0.413431 -1.02043 255 -4.65369 0.376893 -1.02043 255 -4.66037 -0.282576 -1.02043 103 -4.75851 1.02403 -1.01951 42 -4.6507 0.339941 -1.01897 255 -4.65365 -0.296813 -1.01897 94 -4.61433 0.645284 -1.018 109 -4.61922 0.594272 -1.01752 112 -4.63894 0.390449 -1.01703 255 -4.61056 0.63003 -1.01654 108 -4.61348 0.608296 -1.01654 113 -4.64401 0.295533 -1.01654 255 -4.61796 0.55731 -1.01606 98 -4.64551 0.193202 -1.01557 255 -4.64637 0.17131 -1.01557 255 -4.64486 -0.208361 -1.01557 106 -4.64228 -0.259421 -1.01557 108 -4.63954 0.273335 -1.01508 255 -4.64038 0.258758 -1.01508 255 -4.64227 0.222305 -1.01508 255 -4.64584 0.127469 -1.01508 255 -4.6139 0.542154 -1.0146 102 -4.61558 0.527656 -1.0146 114 -4.6095 0.578374 -1.0146 89 -4.63532 0.309647 -1.0146 255 -4.641 0.207645 -1.0146 255 -4.64348 0.142015 -1.0146 255 -4.64476 0.0909498 -1.0146 255 -4.63729 0.243997 -1.01411 255 -4.63727 -0.244496 -1.01411 108 -4.63913 0.156494 -1.01363 255 -4.6103 0.505098 -1.01265 155 -4.63498 -0.164098 -1.01265 93 -4.63225 -0.127562 -1.01168 99 -4.62805 -0.192943 -1.01119 112 -4.62475 -0.178232 -1.01022 116 -4.62058 -0.228965 -1.00973 101 -4.62341 -0.0909328 -1.00925 100 -4.62025 -0.0400345 -1.00828 109 -4.6198 -0.0763214 -1.00828 105 -4.61807 -0.0617704 -1.00779 108 -4.61632 -0.141552 -1.00779 131 -4.61653 -0.0109736 -1.0073 113 -4.71196 0.990514 -1.0069 58 -4.61454 -0.0254554 -1.00682 119 -4.42953 0.409079 -1.0064 255 -4.78514 -0.498612 -1.00596 31 -4.60936 -0.112311 -1.00584 103 -4.60484 0.0252863 -1.00439 123 -4.4249 0.373581 -1.00439 255 -4.60103 0.00360431 -1.00341 121 -4.59892 0.0397344 -1.00293 126 -4.69602 0.971663 -1.00223 50 -4.41857 0.33108 -1.00187 255 -4.41332 0.295804 -0.999856 255 -4.68573 0.954115 -0.998962 66 -4.41218 0.170576 -0.997842 255 -4.40664 0.246662 -0.997339 255 -4.40844 0.212045 -0.997339 255 -4.75065 -0.472601 -0.997092 16 -4.40371 0.135562 -0.995325 255 -4.40464 0.100971 -0.995325 255 -4.66921 0.927741 -0.993826 59 -4.6721 0.913068 -0.993826 70 -4.6616 0.895743 -0.990558 72 -4.71725 -0.454507 -0.988688 17 -4.65431 0.871556 -0.987756 69 -4.65129 0.855841 -0.986356 77 -4.6444 0.839444 -0.984021 80 -4.69347 -0.437479 -0.982618 20 -4.63936 0.823447 -0.982153 86 -4.68901 -0.399985 -0.98075 65 -4.63553 0.80021 -0.980285 79 -5.21666 1.13995 -0.980147 33 -4.48402 0.463503 -0.980075 255 -4.68385 -0.414393 -0.979816 62 -4.82489 1.02484 -0.97938 67 -4.47593 0.427232 -0.977158 255 -4.62461 0.783295 -0.977017 84 -4.62487 0.745988 -0.975616 98 -4.67067 -0.361611 -0.975614 64 -4.66596 -0.346537 -0.974213 77 -4.6631 -0.383173 -0.974213 82 -4.61172 0.766129 -0.973282 87 -4.80134 1.00423 -0.973139 67 -4.60992 0.728626 -0.971414 111 -4.6155 0.692398 -0.971414 103 -4.65538 -0.331114 -0.971412 89 -4.45405 0.411164 -0.971323 255 -4.60642 0.713217 -0.970013 89 -4.61206 0.662236 -0.969546 105 -4.64864 -0.316004 -0.969544 109 -4.60611 0.676137 -0.968613 103 -4.64406 -0.264471 -0.967677 103 -4.64231 -0.293646 -0.967677 122 -4.64405 -0.227906 -0.96721 120 -4.64127 -0.278955 -0.96721 125 -4.85117 -0.51029 -0.966894 50 -4.64137 -0.242404 -0.966743 109 -4.45327 0.0532916 -0.96646 255 -4.60065 0.645777 -0.966278 117 -4.60364 0.62409 -0.966278 120 -4.43814 0.346619 -0.965974 255 -4.60173 0.609092 -0.965344 129 -4.60169 0.594372 -0.964877 145 -4.76814 0.981862 -0.964669 58 -4.44466 0.10212 -0.964515 255 -4.44521 0.0741911 -0.964515 255 -4.6292 -0.212688 -0.963475 134 -4.5985 0.557233 -0.963009 153 -4.59673 0.571677 -0.963009 145 -4.62878 -0.176261 -0.963008 150 -4.62626 -0.190733 -0.962541 141 -4.59887 0.520642 -0.962075 179 -4.62543 -0.161604 -0.962074 155 -4.62202 -0.14697 -0.96114 170 -4.59058 0.54159 -0.960675 164 -4.58889 0.504849 -0.959274 190 -4.61526 -0.110522 -0.959273 176 -4.61294 -0.124981 -0.958806 163 -4.61169 -0.0959644 -0.958339 186 -4.59742 0.323711 -0.957406 232 -4.73869 0.960468 -0.95709 111 -4.60626 -0.0741695 -0.956938 195 -4.58063 0.452946 -0.956005 226 -4.57844 0.474527 -0.956005 230 -4.58777 0.373735 -0.956005 228 -4.60258 -0.0596706 -0.956004 202 -4.575 0.488691 -0.955539 236 -4.57952 0.40201 -0.954605 224 -4.58475 0.337232 -0.954604 230 -4.58678 0.308418 -0.954604 232 -4.57429 0.437769 -0.954138 222 -4.57564 0.423397 -0.954138 223 -4.58624 0.286667 -0.954137 234 -4.59497 -0.0451783 -0.954137 207 -4.57979 0.351313 -0.953671 230 -4.59324 -0.0090956 -0.95367 216 -4.57495 0.387097 -0.953204 222 -4.59076 0.070227 -0.953203 234 -4.5913 0.00532143 -0.953203 218 -4.5813 0.271879 -0.952737 231 -4.58929 -0.0235268 -0.952736 215 -4.72401 0.934448 -0.952632 96 -4.72693 0.919601 -0.952632 89 -4.58722 0.0413237 -0.952269 223 -4.72788 0.904391 -0.952187 98 -4.57825 0.257245 -0.951803 236 -4.58513 0.0556991 -0.951802 230 -4.58348 0.019668 -0.951335 220 -4.57552 0.235445 -0.950869 235 -4.58066 0.0916087 -0.950869 236 -4.5743 0.220966 -0.950402 238 -4.77985 -0.47963 -0.949955 29 -4.71674 0.879326 -0.94862 97 -4.56869 0.105664 -0.948067 238 -4.76581 -0.463018 -0.946388 64 -4.71064 0.847664 -0.945946 114 -4.55258 0.183958 -0.944799 240 -4.55473 0.11958 -0.944799 239 -4.7022 0.861435 -0.944608 106 -4.54778 0.205211 -0.943865 239 -4.70305 0.823501 -0.943271 117 -4.70044 0.79268 -0.941488 104 -4.74396 -0.445728 -0.941039 87 -4.69408 0.806804 -0.940596 126 -4.74407 -0.423184 -0.940593 91 -4.70116 0.73978 -0.939704 114 -4.53079 0.140187 -0.939196 242 -4.73567 -0.407389 -0.938364 113 -4.6911 0.75335 -0.937921 105 -4.68365 0.774832 -0.93703 135 -4.7311 -0.391994 -0.937027 111 -4.68996 0.723 -0.936584 121 -4.73318 -0.3398 -0.936581 107 -4.51673 0.15388 -0.935928 244 -4.51622 0.168068 -0.935928 255 -4.72648 -0.376633 -0.93569 130 -4.68752 0.70006 -0.935246 121 -4.72645 -0.324353 -0.934798 116 -4.72237 -0.353888 -0.934352 127 -4.68198 0.684245 -0.933463 134 -4.67948 0.646428 -0.93168 164 -4.70939 -0.285933 -0.930341 128 -4.70955 -0.248823 -0.929895 138 -4.70653 -0.300591 -0.929895 121 -4.66672 0.667144 -0.929451 143 -4.66988 0.630222 -0.929005 168 -4.67814 0.549227 -0.928559 79 -4.70054 -0.270523 -0.928112 135 -4.66604 0.614817 -0.927668 172 -4.70057 -0.233489 -0.927666 130 -4.86574 1.05108 -0.926668 24 -4.68765 -0.218011 -0.924546 140 -4.65935 0.524892 -0.923656 127 -4.68637 -0.151574 -0.923654 166 -4.68533 -0.181016 -0.923654 151 -4.68442 -0.203093 -0.923654 146 -4.65136 0.575863 -0.92321 140 -4.68392 -0.166217 -0.923208 153 -4.64666 0.597537 -0.922764 196 -4.6571 0.509849 -0.922764 104 -4.64927 0.560802 -0.922318 94 -4.84963 1.02359 -0.922027 24 -4.6809 -0.0336581 -0.921871 102 -4.67924 -0.129231 -0.921871 160 -4.66574 0.326119 -0.92098 79 -4.67661 0.0692433 -0.92098 84 -4.65746 0.406526 -0.920535 102 -4.67377 -0.114353 -0.920534 155 -4.65677 0.39174 -0.920089 94 -4.66426 0.289245 -0.920089 81 -4.64509 0.493849 -0.919644 127 -4.65776 0.355016 -0.919643 88 -4.6632 0.274488 -0.919643 86 -4.67126 -0.0115215 -0.919642 98 -4.64543 0.471767 -0.919198 134 -4.6483 0.44257 -0.919198 109 -4.65944 0.303666 -0.919197 85 -4.66399 0.223115 -0.919197 86 -4.66868 -0.0775136 -0.919197 202 -4.64495 0.456992 -0.918752 102 -4.65215 0.376668 -0.918752 88 -4.66132 0.237677 -0.918751 80 -4.66713 -0.0481468 -0.918751 131 -4.64578 0.42763 -0.918306 96 -4.65302 0.339988 -0.918306 84 -4.66423 0.105771 -0.918305 82 -4.66387 0.120425 -0.918305 84 -4.66032 0.171636 -0.91786 89 -4.66083 0.156995 -0.91786 85 -4.66305 -0.0627337 -0.917859 108 -4.66121 0.0544556 -0.917414 87 -4.66047 -0.0993035 -0.917413 171 -4.65493 0.208081 -0.916968 92 -4.9057 -0.499449 -0.916541 24 -4.65041 0.259153 -0.916523 82 -4.65567 0.134893 -0.916522 86 -4.65759 0.0178521 -0.916522 85 -4.65001 0.185941 -0.915631 93 -4.65178 0.00324929 -0.915185 86 -4.64894 0.0909003 -0.914739 85 -4.81649 1.0006 -0.914011 24 -4.8177 0.985065 -0.913589 24 -4.63991 0.039749 -0.91251 81 -4.87026 -0.480584 -0.908525 24 -4.84912 0.631012 -0.907682 69 -4.86396 -0.46458 -0.906837 24 -4.83072 0.605366 -0.903041 39 -4.77058 0.951749 -0.902198 29 -4.76496 0.919472 -0.899667 31 -4.76013 0.934049 -0.899245 29 -4.82449 -0.445738 -0.897977 23 -4.81184 0.549197 -0.897557 96 -4.81867 0.465777 -0.897135 81 -4.81132 0.518513 -0.896713 81 -4.80966 0.533626 -0.896713 109 -4.81485 -0.422038 -0.895446 23 -4.81038 0.449675 -0.895025 77 -4.74428 0.892175 -0.894182 55 -4.75642 0.825018 -0.894182 23 -4.79187 0.584993 -0.894181 30 -4.81295 0.373739 -0.894181 98 -4.75766 0.794451 -0.893338 23 -4.76135 0.772023 -0.893338 23 -4.74403 0.86127 -0.892916 59 -4.80241 0.357681 -0.89165 107 -4.73362 0.874707 -0.891229 57 -4.79751 0.395217 -0.891228 77 -4.80309 0.2895 -0.890806 119 -4.80628 1.02868 -0.890487 20 -4.74639 0.754206 -0.889541 23 -4.73589 0.80601 -0.889119 23 -4.72749 0.842827 -0.888697 32 -4.80162 0.0627412 -0.888696 91 -4.79045 0.303781 -0.888274 89 -4.79303 0.220866 -0.887852 98 -4.79177 0.152941 -0.887009 96 -4.79397 0.0475361 -0.887008 75 -4.78789 -0.246052 -0.887008 23 -4.78251 0.273065 -0.886165 105 -4.77327 -0.403519 -0.886164 31 -4.78462 0.130104 -0.885321 87 -4.78628 0.0323807 -0.885321 89 -4.77062 -0.388225 -0.885321 67 -4.7608 0.474979 -0.8849 56 -4.78305 0.115013 -0.884899 95 -4.75656 0.497195 -0.884478 37 -4.7741 -0.283018 -0.884477 23 -4.77567 -0.215423 -0.884055 53 -4.75989 0.422054 -0.883634 105 -4.77106 -0.267821 -0.883633 23 -4.96874 1.08449 -0.883582 41 -4.7348 0.63066 -0.883212 49 -4.76052 -0.312305 -0.881945 47 -4.7529 -0.364352 -0.881102 68 -4.70435 0.732133 -0.879837 27 -4.75751 0.181597 -0.879836 111 -4.70581 0.709655 -0.879415 29 -4.75883 -0.0427079 -0.879414 59 -4.74309 0.337955 -0.878571 92 -4.74937 0.233576 -0.878571 60 -4.74958 -0.229338 -0.87857 36 -4.74231 -0.348624 -0.87857 67 -4.73394 0.404618 -0.877727 77 -4.75017 0.0991123 -0.877727 92 -4.75006 1.00138 -0.877678 45 -4.73558 -0.333216 -0.876883 57 -4.73438 0.322335 -0.876462 54 -4.74334 -0.0203011 -0.876039 35 -4.73415 -0.295791 -0.876039 28 -4.69295 0.662434 -0.875196 81 -4.73912 -0.057527 -0.875195 70 -4.7356 -0.191481 -0.875195 29 -4.815 -0.498826 -0.874784 46 -4.7369 0.0764298 -0.874774 120 -4.68483 0.691315 -0.874352 29 -4.69215 0.639761 -0.874352 31 -4.73555 0.00944418 -0.874352 85 -4.72876 0.165462 -0.873508 191 -4.73515 0.967322 -0.873133 67 -4.68118 0.675725 -0.873087 56 -4.72633 0.98103 -0.871894 55 -4.71859 -0.176045 -0.871398 29 -4.71348 0.246464 -0.870977 89 -4.71992 -0.00550001 -0.870977 65 -4.71741 -0.0722058 -0.870554 60 -4.70935 -0.160941 -0.869289 30 -4.72337 0.926439 -0.869001 80 -4.7081 -0.138699 -0.868867 33 -4.78615 -0.472882 -0.868173 21 -4.70497 -0.109047 -0.868023 84 -4.70891 0.93904 -0.866522 69 -4.88789 1.05031 -0.866108 22 -4.68311 -0.123379 -0.863382 79 -4.68379 -0.0939518 -0.863382 60 -4.70163 0.884046 -0.862804 100 -4.68972 0.904752 -0.861151 80 -4.69475 0.867547 -0.860738 81 -4.75062 -0.454105 -0.860323 23 -4.69745 0.784431 -0.858258 129 -4.68396 0.850419 -0.857845 58 -4.68792 0.828338 -0.857845 73 -4.74635 -0.281076 -0.856604 79 -4.84136 1.02414 -0.855782 44 -4.71107 0.612796 -0.855779 124 -4.67699 0.811339 -0.854953 58 -4.72928 -0.384533 -0.854538 71 -4.7261 -0.399212 -0.854125 89 -4.72983 -0.294927 -0.853299 97 -4.71892 -0.435937 -0.853299 72 -4.71897 -0.413512 -0.852886 73 -4.72909 0.195921 -0.85206 91 -4.72151 -0.331622 -0.852059 56 -4.69447 0.588261 -0.851647 139 -4.72375 -0.227508 -0.851233 166 -4.66865 0.742175 -0.850821 51 -4.68388 0.624369 -0.850408 76 -4.72427 0.0991963 -0.850407 109 -4.71153 -0.360641 -0.850407 56 -4.72198 0.114001 -0.849994 101 -4.71277 -0.316078 -0.849993 69 -4.66049 0.75593 -0.849582 70 -4.70834 0.350974 -0.849581 79 -4.72078 0.0768896 -0.849581 135 -4.71401 -0.264121 -0.84958 66 -4.70526 0.365623 -0.849168 98 -4.71769 0.128749 -0.849168 112 -4.88934 -0.503344 -0.849028 47 -4.71458 0.165739 -0.848754 139 -4.6722 0.637811 -0.848342 70 -4.70739 -0.24146 -0.847928 103 -4.65547 0.72518 -0.847516 73 -4.69704 -0.344605 -0.847101 62 -4.69178 0.386892 -0.846689 92 -4.70357 0.14323 -0.846275 103 -4.79663 0.998686 -0.845854 55 -5.01176 1.07446 -0.845093 68 -4.81774 0.869541 -0.845059 145 -4.80973 0.891499 -0.844265 164 -4.80499 0.906232 -0.843868 56 -4.64141 0.700702 -0.843797 60 -4.68861 0.179716 -0.843383 135 -4.68825 -0.1887 -0.843383 65 -4.8108 0.852639 -0.843073 83 -4.65353 0.568526 -0.842557 105 -4.66342 0.480714 -0.842557 75 -4.78402 0.972464 -0.842279 71 -4.65335 0.553683 -0.842144 68 -4.65756 0.517121 -0.842144 104 -4.6339 0.684739 -0.841731 68 -4.65721 0.502286 -0.841731 98 -4.65007 0.531115 -0.840905 95 -4.65856 0.450693 -0.840904 83 -4.65712 0.465325 -0.840904 78 -4.66195 0.41409 -0.840904 80 -4.68007 0.0470415 -0.840904 120 -4.77937 0.955851 -0.840691 20 -4.63022 0.669371 -0.840491 94 -4.65605 0.435713 -0.840078 96 -4.85427 -0.392318 -0.839894 105 -4.67352 -0.0924852 -0.839664 86 -4.84406 -0.483559 -0.839497 45 -4.66927 -0.173137 -0.839251 75 -4.67012 0.0616708 -0.838838 94 -4.67051 0.0103173 -0.838838 86 -4.67046 0.0249902 -0.838838 90 -4.65153 0.398506 -0.838425 73 -4.66853 -0.01901 -0.838425 92 -4.84322 -0.429778 -0.838306 44 -4.61974 0.645723 -0.837599 120 -4.66217 -0.0702189 -0.837185 100 -4.66236 -0.0555728 -0.837185 95 -4.76314 0.936946 -0.83672 43 -4.83984 -0.375934 -0.836717 78 -4.64693 0.332067 -0.836359 124 -4.65878 -0.00427952 -0.836359 76 -4.65469 -0.0408116 -0.835533 99 -4.82387 0.468561 -0.83513 114 -4.8209 -0.45845 -0.834334 55 -4.77352 0.791744 -0.833542 10 -4.81841 -0.442965 -0.83354 62 -4.64012 0.214627 -0.833467 117 -4.64242 -0.157386 -0.833467 98 -4.81784 -0.4048 -0.832746 23 -4.63996 -0.106221 -0.83264 77 -4.77018 0.77577 -0.832351 10 -4.75944 0.827827 -0.831954 63 -4.62891 0.243319 -0.831401 136 -4.63311 -0.142446 -0.831401 127 -4.61524 0.308135 -0.829335 176 -4.61423 0.293522 -0.828922 82 -4.61599 0.264524 -0.828922 87 -4.61792 0.228261 -0.828922 194 -4.622 -0.120239 -0.828921 140 -4.79119 0.480416 -0.828776 117 -4.79281 -0.319581 -0.826392 95 -4.79071 -0.349689 -0.826392 43 -4.60146 0.278274 -0.82603 126 -4.72534 0.806405 -0.824408 19 -4.784 -0.303954 -0.824406 40 -4.90933 1.03693 -0.824206 85 -4.98752 -0.530663 -0.823823 52 -4.77809 -0.333755 -0.823612 62 -4.77058 -0.265585 -0.821229 67 -4.75798 -0.279945 -0.818847 67 -4.74479 0.407816 -0.818053 85 -4.75955 0.161427 -0.818053 138 -4.7549 -0.227363 -0.817655 72 -4.8795 1.00683 -0.81737 81 -4.75694 0.116445 -0.817259 97 -4.74986 -0.249583 -0.816861 73 -4.69871 0.725887 -0.816465 57 -4.7085 0.65939 -0.816465 89 -4.74307 0.183162 -0.814876 93 -4.70085 0.643212 -0.81448 87 -4.86723 0.988446 -0.814332 64 -4.87031 0.973151 -0.814332 115 -4.7398 0.0935814 -0.813684 90 -4.68547 0.70869 -0.813288 59 -4.73404 -0.211579 -0.813287 58 -4.73304 0.130611 -0.812493 85 -4.73223 0.0785182 -0.812096 138 -4.68314 0.670716 -0.8117 85 -4.92279 -0.507791 -0.810911 74 -4.70002 0.485703 -0.810508 62 -4.67218 0.691586 -0.810111 88 -4.68149 0.625469 -0.810111 108 -4.70565 0.381898 -0.809713 93 -4.67661 0.602356 -0.808523 89 -4.71118 -0.195859 -0.808521 45 -4.67459 0.58715 -0.807728 89 -4.70554 0.233361 -0.807728 57 -4.8367 0.950842 -0.807116 79 -4.86036 0.821361 -0.807116 194 -4.70733 0.0261982 -0.806933 84 -4.70393 -0.180798 -0.806933 69 -4.67493 0.535016 -0.806537 81 -4.67659 0.520326 -0.806537 62 -4.89898 -0.489651 -0.805974 80 -4.68166 0.431706 -0.805742 80 -4.69955 0.0113482 -0.805345 100 -4.66544 0.54874 -0.804948 56 -4.66086 0.570472 -0.804551 67 -4.69305 -0.0771691 -0.804153 96 -4.68959 0.0407357 -0.803359 77 -4.68959 -0.040296 -0.803359 83 -4.68659 -0.106554 -0.802962 59 -4.65951 0.4961 -0.802565 48 -4.68583 -0.0108432 -0.802565 82 -4.68356 -0.0549924 -0.802167 85 -4.68169 -0.143261 -0.802167 104 -4.67048 0.327176 -0.801771 81 -4.68102 -0.0917485 -0.80177 71 -4.67926 -0.157913 -0.80177 80 -4.66153 0.414965 -0.801374 68 -4.67624 -0.128423 -0.800976 130 -4.67562 0.0625742 -0.800579 71 -4.87192 -0.463613 -0.800278 48 -4.66071 0.297012 -0.799388 63 -4.66162 0.282369 -0.799388 148 -4.66813 -0.0255649 -0.79899 77 -4.64823 0.362216 -0.7978 103 -4.79573 0.903989 -0.797622 42 -4.86551 -0.37823 -0.797619 148 -4.64544 0.347298 -0.797005 86 -4.65621 0.14271 -0.797005 63 -4.79881 0.86562 -0.796862 67 -4.78515 0.917612 -0.796103 47 -4.85884 -0.362316 -0.7961 110 -4.63825 0.310094 -0.79502 83 -4.64457 0.193437 -0.795019 80 -4.64003 0.207829 -0.794225 175 -4.6355 0.258715 -0.793828 92 -4.79172 0.779224 -0.792684 179 -4.76763 0.883361 -0.791546 71 -4.6226 0.243353 -0.791048 81 -4.77055 0.845224 -0.790786 43 -4.7693 0.829581 -0.790026 56 -4.81343 -0.389126 -0.787745 85 -4.7621 0.789922 -0.787368 255 -4.80495 -0.441646 -0.786986 45 -4.80436 -0.426365 -0.786606 49 -4.80763 -0.33544 -0.785847 68 -4.80588 0.269462 -0.784708 99 -4.74562 0.7567 -0.78319 62 -4.76219 0.629473 -0.78281 114 -4.79128 0.28382 -0.78205 100 -4.92171 1.05988 -0.780312 25 -5.00639 -0.51269 -0.779946 67 -4.77732 -0.318079 -0.779771 53 -4.77048 -0.408065 -0.77977 64 -4.77818 -0.235274 -0.779011 255 -4.76263 -0.301988 -0.776732 130 -4.71223 0.728826 -0.775975 77 -4.72906 0.610177 -0.775974 142 -4.72218 0.647044 -0.775595 111 -4.72706 0.594849 -0.775215 118 -4.91397 0.929481 -0.774161 71 -4.72378 0.556827 -0.773696 125 -4.74982 -0.211284 -0.773315 64 -4.90523 0.943768 -0.773076 67 -4.88627 1.02796 -0.772715 11 -4.74214 -0.248242 -0.772175 255 -4.70066 0.659255 -0.771797 69 -4.90476 0.903748 -0.771629 170 -4.70745 0.577482 -0.771037 111 -4.71184 0.540494 -0.771037 118 -4.73545 -0.26278 -0.771036 255 -4.6873 0.71005 -0.770658 84 -4.71923 0.45141 -0.770657 91 -4.72132 0.406756 -0.770278 108 -4.73706 -0.128675 -0.770277 97 -4.73068 -0.277405 -0.770276 219 -4.72241 0.369519 -0.769898 126 -4.68173 0.694212 -0.769139 92 -4.68495 0.672142 -0.769139 123 -4.70375 0.524652 -0.769139 106 -4.70617 0.502482 -0.769138 98 -4.71415 0.421094 -0.769138 99 -4.70382 0.48731 -0.768379 108 -4.7134 0.383759 -0.768379 112 -4.70337 0.472346 -0.767999 111 -4.94649 -0.436337 -0.767646 147 -4.70498 0.435221 -0.767619 101 -4.72412 0.0944163 -0.767619 97 -4.93943 -0.490515 -0.767285 56 -4.72243 0.0795521 -0.767239 102 -4.72309 -0.00947258 -0.767239 96 -4.7227 -0.0614031 -0.767239 102 -4.72222 -0.0910757 -0.767239 97 -4.72052 -0.0761984 -0.766859 124 -4.8656 0.951807 -0.766203 77 -4.71495 0.146153 -0.7661 104 -4.71677 0.0646684 -0.7661 105 -4.71719 0.0128007 -0.7661 129 -4.71603 -0.105746 -0.766099 130 -4.71517 0.0276197 -0.76572 92 -4.71519 -0.024226 -0.76572 119 -4.71312 -0.0390133 -0.76534 96 -4.70927 -0.194434 -0.76534 87 -4.71113 0.0424192 -0.76496 133 -4.93721 -0.326388 -0.764391 99 -4.93019 -0.419389 -0.764391 57 -4.70557 0.131121 -0.764201 108 -4.70328 -0.142361 -0.763821 104 -4.84758 0.971946 -0.76367 87 -4.70072 0.160573 -0.763441 107 -4.69795 0.182656 -0.763062 103 -4.70024 0.108841 -0.763061 127 -4.85344 0.878242 -0.761499 70 -4.6801 0.329496 -0.761163 219 -4.67458 0.351275 -0.760404 176 -4.67523 0.31443 -0.760024 140 -4.68122 -0.156295 -0.759643 151 -4.90814 -0.347848 -0.759326 185 -4.67651 -0.178182 -0.758884 116 -4.9031 -0.362995 -0.758602 189 -4.89414 -0.447488 -0.758241 54 -4.89801 -0.378116 -0.757879 190 -4.66744 0.247747 -0.757745 131 -4.66792 0.19634 -0.757365 159 -4.65267 0.298363 -0.755467 140 -4.79328 0.992161 -0.754626 14 -4.81747 0.855904 -0.754264 78 -4.86651 -0.468233 -0.753538 90 -4.64269 0.231951 -0.752808 126 -4.87341 -0.307137 -0.752453 130 -4.63196 0.209604 -0.750529 96 -5.11826 -0.528691 -0.749798 78 -4.83342 -0.396383 -0.746302 171 -4.77948 0.81024 -0.745943 255 -4.77304 0.82456 -0.74522 255 -5.00209 1.0154 -0.742606 139 -4.75733 0.775616 -0.740879 80 -4.74905 0.789558 -0.739793 198 -4.80456 -0.235049 -0.739067 97 -4.80168 -0.287863 -0.739067 74 -4.97245 1.04208 -0.738494 53 -4.7853 -0.264351 -0.735812 82 -4.97119 0.968744 -0.735753 179 -4.78365 -0.219082 -0.735088 94 -4.96425 0.98361 -0.735067 54 -4.9733 0.93678 -0.735067 86 -4.78022 -0.249042 -0.734726 137 -4.94672 1.02063 -0.733354 173 -4.71822 0.746197 -0.73292 79 -4.95678 0.949874 -0.732669 142 -4.95051 0.908495 -0.73027 151 -5.01085 -0.429651 -0.729581 122 -4.99644 -0.499619 -0.72821 152 -4.69561 0.712257 -0.727855 100 -4.69892 0.690122 -0.727855 95 -4.99574 -0.444098 -0.727183 169 -4.68947 0.726382 -0.727131 75 -4.70813 0.593519 -0.727131 92 -4.74138 -0.194995 -0.727129 61 -4.69538 0.659448 -0.726408 94 -4.70041 0.62255 -0.726407 104 -4.69454 0.636765 -0.725684 85 -4.92616 0.888185 -0.725473 151 -4.68744 0.673324 -0.725322 88 -4.70112 0.570087 -0.725322 99 -4.70093 0.555075 -0.72496 115 -4.6926 0.606467 -0.724599 79 -4.72682 -0.0904476 -0.723874 84 -4.70273 0.465553 -0.723513 115 -4.71402 0.332418 -0.723513 62 -4.72533 -0.0607316 -0.723512 86 -4.69094 0.538893 -0.72279 89 -4.69307 0.501813 -0.722428 107 -4.69462 0.487067 -0.722428 102 -4.69774 0.435226 -0.722066 86 -4.70101 0.398317 -0.722066 81 -4.70727 0.250228 -0.721342 93 -4.71391 -0.00881416 -0.721341 100 -4.7122 -0.127273 -0.721341 94 -4.71052 -0.179078 -0.721341 78 -4.9583 -0.464145 -0.721015 150 -4.71187 0.0281861 -0.72098 89 -4.71135 -0.0754321 -0.72098 94 -4.71061 -0.112432 -0.72098 93 -4.70909 -0.164219 -0.720979 109 -4.67975 0.515198 -0.720257 79 -4.68929 0.419536 -0.720257 99 -4.70251 0.227725 -0.720257 109 -4.70526 0.161224 -0.720256 81 -4.69048 0.382522 -0.719895 86 -4.70378 0.14637 -0.719895 118 -4.7057 0.0576852 -0.719895 100 -4.94898 -0.478919 -0.719644 160 -4.70313 0.0945911 -0.719533 81 -4.70408 0.00592742 -0.719533 76 -4.68942 0.345361 -0.719172 86 -4.69883 0.175753 -0.719171 99 -4.7019 -0.0457867 -0.719171 93 -4.70009 -0.0236316 -0.718809 76 -4.69751 0.0796835 -0.718448 84 -4.69408 -0.14164 -0.718085 126 -4.69012 0.042671 -0.717 94 -4.68223 0.197144 -0.716277 74 -4.66308 0.446611 -0.715916 72 -4.67702 0.263195 -0.715915 90 -4.68119 0.108744 -0.715553 87 -4.92777 -0.406496 -0.714847 87 -4.66795 0.314175 -0.71483 117 -4.66226 0.365317 -0.714469 111 -4.66902 0.123073 -0.713383 95 -4.85902 0.860699 -0.713137 95 -4.66391 0.210955 -0.713021 91 -4.6478 0.290703 -0.710851 177 -4.90444 -0.35018 -0.71005 90 -4.6428 0.275717 -0.709765 106 -4.88054 -0.379195 -0.706281 109 -4.87582 -0.363389 -0.705253 244 -4.80729 0.812966 -0.702857 54 -4.80082 0.827415 -0.702172 61 -4.80204 0.796609 -0.701486 58 -4.8569 -0.323528 -0.701484 68 -4.796 0.772458 -0.699773 94 -4.8402 -0.30705 -0.6984 63 -4.78162 0.724093 -0.696003 94 -4.82541 -0.29081 -0.695658 65 -4.77308 0.753528 -0.695318 96 -4.77153 0.737949 -0.694633 100 -4.81844 -0.275157 -0.694288 128 -4.76352 0.698523 -0.692234 120 -4.76586 0.668317 -0.691891 100 -4.767 0.645597 -0.691549 117 -4.75983 0.682747 -0.691206 139 -4.80346 -0.221249 -0.691204 96 -4.80274 -0.236338 -0.691204 117 -4.80001 -0.251312 -0.690861 154 -4.75728 0.613942 -0.68915 142 -4.75142 0.628388 -0.688465 122 -4.78477 -0.19769 -0.687777 129 -4.75033 0.590354 -0.687437 158 -5.12544 -0.512843 -0.686062 69 -4.74589 0.544489 -0.685723 176 -4.73455 0.573392 -0.684353 158 -4.73437 0.558294 -0.68401 169 -4.76499 -0.144293 -0.684008 133 -4.76371 -0.181714 -0.684008 107 -4.7363 0.505808 -0.683325 190 -4.73469 0.520685 -0.683325 184 -4.76032 -0.166588 -0.683323 125 -4.75989 -0.114178 -0.68298 153 -4.75951 -0.129131 -0.68298 144 -4.7362 0.468228 -0.682639 200 -4.75867 -0.0767483 -0.682638 163 -4.73198 0.490349 -0.682296 198 -4.73513 0.438118 -0.681954 209 -4.75495 -0.0617264 -0.681953 166 -4.74943 -0.00939493 -0.680925 184 -4.74841 -0.0989127 -0.680925 156 -4.72928 0.415155 -0.680583 209 -4.72195 0.45193 -0.679898 204 -4.74155 0.00555894 -0.679554 188 -4.7415 -0.0242334 -0.679554 187 -4.74133 -0.0465755 -0.679554 171 -4.73951 0.0279018 -0.679212 195 -4.73509 0.0725306 -0.678526 202 -4.71681 0.399206 -0.678184 212 -4.73348 0.0427716 -0.678183 197 -4.71608 0.384238 -0.677842 213 -4.71726 0.36942 -0.677842 213 -4.72339 0.280441 -0.677841 212 -4.72753 0.198789 -0.677841 211 -4.73076 0.0947857 -0.677841 208 -4.71699 0.347052 -0.677499 212 -4.72644 0.176446 -0.677499 212 -4.72938 0.0576147 -0.677498 200 -4.71609 0.332104 -0.677156 212 -4.72151 0.243154 -0.677156 211 -4.71514 0.317166 -0.676814 213 -4.71658 0.294942 -0.676813 209 -4.72028 0.228237 -0.676813 213 -4.72097 0.213405 -0.676813 210 -4.72304 0.161483 -0.676813 210 -4.72022 0.124302 -0.676128 210 -4.71244 0.265002 -0.675785 212 -4.71664 0.109404 -0.675442 208 -4.71367 0.146394 -0.6751 206 -4.94436 1.01944 -0.669515 27 -4.92955 1.03249 -0.667605 33 -4.89223 0.968384 -0.659648 61 -4.8853 0.98295 -0.659012 32 -4.94416 -0.479954 -0.656464 58 -4.86233 0.946423 -0.654238 84 -4.92201 -0.368922 -0.651372 84 -5.03864 -0.496295 -0.650613 65 -4.83235 0.92466 -0.648828 36 -4.89844 -0.460234 -0.648826 34 -4.9396 1.02705 -0.647825 72 -4.88679 -0.435991 -0.646598 36 -4.81532 0.897784 -0.645327 58 -4.80648 0.880455 -0.643417 60 -4.80339 0.864271 -0.642462 61 -4.86255 -0.418571 -0.64246 66 -4.90949 0.996863 -0.642243 58 -4.84415 -0.401766 -0.639278 63 -4.78604 0.837768 -0.638961 62 -4.84433 -0.348217 -0.638641 62 -4.78537 0.806664 -0.638006 34 -4.77893 0.821003 -0.63737 62 -4.83161 -0.385521 -0.63705 64 -4.89006 0.921313 -0.636972 106 -4.87769 0.974647 -0.636662 94 -4.88073 0.959319 -0.636662 70 -4.77549 0.781797 -0.635778 33 -5.20137 -0.511079 -0.634028 66 -4.76624 0.764851 -0.633869 33 -4.86383 0.932329 -0.633251 70 -4.81191 -0.330874 -0.633231 66 -4.76082 0.748605 -0.632596 32 -4.91632 -0.468014 -0.631078 63 -4.79567 -0.307154 -0.630367 66 -4.79464 -0.291978 -0.630048 63 -4.79356 -0.276812 -0.62973 62 -4.74365 0.730535 -0.629413 33 -4.8471 0.881984 -0.62922 88 -4.84236 0.896857 -0.62891 88 -4.75755 0.603099 -0.628776 26 -4.75942 0.588148 -0.628776 26 -4.78495 -0.253749 -0.628139 60 -4.78573 -0.238716 -0.628139 63 -4.73338 0.706058 -0.627185 32 -4.72972 0.690297 -0.62623 32 -4.73187 0.675434 -0.62623 32 -4.77462 -0.223192 -0.626229 60 -4.88572 -0.433965 -0.625807 78 -4.88237 -0.449122 -0.625497 56 -4.76937 -0.207964 -0.625275 58 -4.73118 0.622292 -0.624957 31 -4.72522 0.651727 -0.624639 31 -4.82466 0.838965 -0.624569 87 -4.87839 -0.379238 -0.623947 107 -4.72971 0.554145 -0.623366 30 -4.75704 -0.170081 -0.623047 32 -4.71356 0.63496 -0.622411 31 -4.75057 -0.184828 -0.622092 55 -4.80642 0.851443 -0.622088 89 -4.8641 -0.408827 -0.622087 81 -4.80972 0.820906 -0.621778 82 -4.71619 0.567522 -0.621456 30 -4.74779 -0.0653378 -0.621137 31 -4.74571 -0.154815 -0.621137 32 -4.85355 -0.392524 -0.620226 84 -4.71266 0.529538 -0.620183 31 -4.7143 0.514731 -0.620183 31 -4.73966 -0.0801619 -0.619864 31 -4.79988 0.796041 -0.619608 81 -4.71923 0.425406 -0.619547 31 -4.73823 -0.0354864 -0.619546 31 -4.73691 -0.117346 -0.619546 31 -4.80041 0.780652 -0.619298 78 -4.71 0.499261 -0.619228 31 -4.73455 -0.132184 -0.619228 31 -4.7344 -0.0131675 -0.61891 31 -4.72893 0.120559 -0.618273 32 -4.73031 0.0388357 -0.618273 32 -4.72936 -0.102338 -0.618273 31 -4.70735 0.446654 -0.617955 31 -4.72849 0.00167049 -0.617955 31 -4.71512 0.328068 -0.617637 31 -4.69856 0.475593 -0.617001 31 -4.70729 0.379554 -0.617 31 -4.72139 0.105482 -0.617 31 -4.70285 0.408942 -0.616682 31 -4.70816 0.342417 -0.616682 32 -4.71689 0.186953 -0.616682 31 -4.78526 0.76286 -0.616507 68 -4.6961 0.460422 -0.616364 31 -4.71399 0.209081 -0.616364 31 -4.71859 0.0164381 -0.616363 31 -4.71835 -0.0502693 -0.616363 31 -4.70312 0.356887 -0.616046 31 -4.71472 0.134944 -0.616045 32 -4.70573 0.290232 -0.615727 31 -4.71418 0.0682409 -0.615727 31 -4.82802 -0.336912 -0.615575 82 -4.69624 0.393462 -0.615409 31 -4.70465 0.275321 -0.615409 31 -4.70589 0.253149 -0.615409 31 -4.71183 0.0904049 -0.615409 32 -4.82708 -0.321601 -0.615265 82 -4.70811 0.156928 -0.615091 32 -4.71042 0.0533627 -0.615091 32 -4.69889 0.304598 -0.614772 31 -4.70272 0.238141 -0.614772 31 -4.70562 0.171637 -0.614772 31 -4.69753 0.223053 -0.613818 31 -4.77351 0.722688 -0.613716 68 -4.8196 -0.283048 -0.613715 84 -4.81512 -0.351153 -0.613715 78 -4.81277 -0.297789 -0.612784 83 -4.77137 0.668839 -0.612166 71 -4.8106 -0.267304 -0.612164 82 -4.81058 -0.229409 -0.611854 84 -4.75753 0.735641 -0.611546 78 -4.76206 0.705734 -0.611546 64 -4.79747 -0.213606 -0.609684 78 -4.76079 0.614157 -0.609375 69 -4.74469 0.688041 -0.608445 78 -5.03228 -0.471395 -0.608426 76 -4.7838 -0.250593 -0.607823 84 -4.74407 0.649982 -0.607515 61 -4.75093 0.59778 -0.607515 62 -4.75351 0.560228 -0.607204 69 -4.77728 -0.175005 -0.606273 80 -4.77583 -0.15992 -0.605963 77 -4.93421 1.00993 -0.605781 62 -4.74543 0.54422 -0.605654 72 -4.74679 0.514192 -0.605344 76 -4.77048 -0.197238 -0.605343 75 -4.76644 -0.144561 -0.604413 75 -4.74129 0.491046 -0.604104 77 -4.73533 0.52806 -0.603794 71 -4.76348 -0.107012 -0.603793 75 -4.76312 -0.121977 -0.603793 77 -4.76239 -0.0545973 -0.603483 73 -4.72335 0.579405 -0.602863 78 -4.75813 -0.076952 -0.602862 75 -4.73445 0.460343 -0.602553 73 -4.91218 0.989211 -0.601955 84 -4.71081 0.63055 -0.601933 75 -4.74602 0.214184 -0.601623 76 -4.7499 0.094849 -0.601622 80 -4.75077 0.0276913 -0.601622 88 -4.72511 0.474468 -0.601313 76 -4.72869 0.437343 -0.601313 76 -4.73664 0.340697 -0.601313 79 -4.72938 0.407464 -0.601003 76 -4.74673 -0.0394164 -0.601002 73 -4.7261 0.422156 -0.600693 75 -4.72927 0.385025 -0.600693 76 -4.73827 0.251171 -0.600692 77 -4.74448 0.0649537 -0.600692 82 -4.74404 -0.0915573 -0.600692 73 -4.74293 0.0127891 -0.600382 79 -4.74275 0.0425898 -0.600382 83 -4.72766 0.355028 -0.600072 80 -4.72455 0.369734 -0.599762 81 -4.73482 0.198841 -0.599762 79 -4.73311 0.236022 -0.599762 74 -4.73755 0.117003 -0.599762 81 -4.73832 0.0797915 -0.599762 83 -4.90127 0.96292 -0.599601 80 -4.90722 0.932106 -0.599601 100 -4.72636 0.317642 -0.599452 81 -4.72956 0.265655 -0.599452 77 -4.73695 -0.0243998 -0.599452 74 -4.73504 -0.00206467 -0.599142 75 -4.72339 0.302562 -0.598832 78 -4.72752 0.183702 -0.598522 77 -4.72808 0.168849 -0.598522 77 -4.72882 0.146567 -0.598522 84 -4.72531 0.13162 -0.597902 87 -4.71642 0.287284 -0.597592 76 -4.87905 0.942509 -0.595775 83 -4.94898 -0.448351 -0.595772 65 -4.87516 0.909968 -0.594304 93 -4.87632 0.870577 -0.593421 90 -4.87162 0.885528 -0.593126 92 -4.93065 -0.431181 -0.59283 89 -4.87124 0.853847 -0.592243 92 -4.92015 -0.414754 -0.591064 98 -4.86805 0.81388 -0.590772 93 -4.86352 0.828826 -0.590478 92 -4.91141 -0.375257 -0.589298 117 -4.90232 -0.3901 -0.588121 90 -4.85108 0.795278 -0.587829 87 -4.9027 -0.359156 -0.587827 86 -4.83721 0.769519 -0.585181 83 -4.88365 -0.319334 -0.58459 87 -4.88065 -0.33455 -0.584296 87 -4.82983 0.752744 -0.583709 83 -4.83218 0.737567 -0.583709 87 -4.87765 -0.288218 -0.583413 92 -4.83056 0.721776 -0.583121 83 -4.87278 -0.303317 -0.582824 87 -4.86791 -0.249358 -0.581647 98 -4.8671 -0.26465 -0.581647 90 -4.82217 0.697244 -0.581355 85 -4.81846 0.68123 -0.580472 89 -4.81471 0.665244 -0.579589 84 -4.85484 -0.233472 -0.579588 92 -4.80995 0.641461 -0.578412 90 -4.84797 -0.210292 -0.578411 92 -4.80802 0.625814 -0.577823 89 -4.808 0.610447 -0.577529 88 -4.80494 0.587032 -0.576646 91 -4.83741 -0.111014 -0.576351 93 -4.83615 -0.1566 -0.576351 89 -4.83662 -0.141405 -0.576351 91 -4.83536 -0.179387 -0.576351 94 -4.83477 -0.194579 -0.576351 92 -4.80087 0.571202 -0.575763 89 -4.79871 0.55564 -0.575175 87 -4.82997 -0.0881147 -0.575174 101 -4.80412 0.487537 -0.57488 92 -4.82715 -0.126005 -0.574879 95 -4.7965 0.540099 -0.574586 92 -4.79703 0.517266 -0.574292 95 -4.80382 0.380944 -0.573409 93 -4.81878 -0.034981 -0.573408 95 -4.81835 -0.0728261 -0.573408 97 -4.81689 0.0179874 -0.573114 100 -4.81692 -0.00471266 -0.573114 97 -4.81688 -0.0198445 -0.573114 96 -4.7888 0.501111 -0.572821 91 -4.79402 0.448427 -0.57282 90 -4.8091 0.237208 -0.57282 76 -4.79147 0.432985 -0.572232 90 -5.13902 -0.50256 -0.572117 109 -4.79275 0.395168 -0.571938 96 -4.8089 0.0330231 -0.571937 102 -4.80867 -0.0576231 -0.571937 99 -4.78472 0.46268 -0.571643 90 -4.79317 0.364885 -0.571643 92 -4.79831 0.289554 -0.571643 97 -4.79722 0.274353 -0.571349 96 -4.79294 0.311882 -0.571055 96 -4.79864 0.206414 -0.571054 85 -4.79599 0.221386 -0.57076 84 -4.79814 0.168639 -0.57076 97 -4.78163 0.409326 -0.570466 94 -4.78799 0.326647 -0.570466 98 -4.79531 0.191159 -0.570466 96 -4.79806 0.100741 -0.570466 96 -4.79871 0.0630544 -0.570466 93 -4.78497 0.341536 -0.570172 94 -4.79317 0.138285 -0.569877 97 -4.79271 0.153342 -0.569877 97 -4.79377 0.115696 -0.569877 95 -4.7944 0.0855735 -0.569877 95 -4.78423 0.25846 -0.569289 105 -4.78899 0.0478247 -0.568994 99 -5.02235 1.01513 -0.566635 46 -5.66711 1.12522 -0.563424 155 -4.98622 0.983611 -0.560874 86 -4.96787 0.9639 -0.557857 91 -4.96503 0.947205 -0.557034 99 -5.03018 -0.475406 -0.556757 61 -4.94604 0.919574 -0.553743 95 -4.93526 0.901608 -0.551823 90 -4.93806 0.8861 -0.551822 91 -4.99489 -0.448139 -0.551545 82 -4.98175 -0.391701 -0.549077 126 -4.91934 0.866912 -0.548805 91 -4.92337 0.843719 -0.548805 81 -4.92466 0.812146 -0.548257 98 -4.96998 -0.414298 -0.547705 91 -4.91427 0.826339 -0.547159 104 -4.96274 -0.429368 -0.546882 89 -4.94939 -0.373339 -0.544414 78 -4.89955 0.768693 -0.543868 86 -4.94461 -0.357329 -0.543591 94 -4.88536 0.782264 -0.542222 98 -4.93145 -0.317382 -0.541397 103 -4.9299 -0.340618 -0.541397 100 -4.88235 0.750391 -0.541125 91 -4.92056 -0.3011 -0.539751 99 -4.87014 0.725124 -0.53893 104 -4.91764 -0.24665 -0.538928 90 -4.87043 0.709546 -0.538656 101 -4.91358 -0.285139 -0.538654 107 -4.87087 0.678404 -0.538107 88 -4.86675 0.693433 -0.537833 86 -4.87016 0.623841 -0.53701 95 -4.90257 -0.230372 -0.536734 92 -4.90102 -0.261171 -0.536734 89 -4.86222 0.65392 -0.536462 89 -4.85835 0.637899 -0.535639 91 -4.89172 -0.206701 -0.535088 89 -4.89095 -0.175881 -0.534814 98 -4.85338 0.598563 -0.534267 90 -4.86299 0.514619 -0.534267 88 -4.8531 0.567618 -0.533718 88 -4.88356 -0.160211 -0.533717 102 -4.88245 -0.190893 -0.533717 87 -4.84933 0.582636 -0.533444 99 -4.88151 -0.0833963 -0.533168 88 -4.8803 -0.137065 -0.533168 104 -4.84981 0.544111 -0.532896 89 -4.87512 -0.106237 -0.532346 88 -4.84559 0.528259 -0.532073 89 -4.85399 0.444458 -0.532072 88 -4.87382 -0.0679073 -0.532071 90 -4.87278 -0.121492 -0.532071 88 -4.87232 0.0010098 -0.531797 97 -4.84487 0.497419 -0.531524 89 -4.85338 0.406013 -0.531524 92 -4.86609 -0.0524674 -0.530974 88 -4.84271 0.458825 -0.530701 90 -4.83927 0.473853 -0.530427 96 -4.86191 0.0697993 -0.530426 97 -4.86232 -0.0294899 -0.530426 94 -4.86239 -0.0142153 -0.530426 94 -4.86027 0.039244 -0.530152 94 -4.85842 0.0163432 -0.529877 92 -4.84583 0.321254 -0.529603 98 -4.83629 0.419973 -0.529329 88 -4.83883 0.389577 -0.529329 91 -4.85329 0.107847 -0.529329 94 -4.83864 0.366631 -0.529055 93 -4.85162 0.0925724 -0.529054 95 -4.84833 0.145863 -0.52878 101 -4.85022 0.0544538 -0.52878 94 -4.83581 0.351163 -0.528506 92 -4.84116 0.267558 -0.528506 92 -4.8374 0.297859 -0.528232 94 -4.83831 0.28266 -0.528232 95 -4.84183 0.214233 -0.528232 94 -4.83294 0.335715 -0.527958 89 -4.84191 0.160929 -0.527957 92 -4.84302 0.122896 -0.527957 97 -4.83643 0.244473 -0.527683 91 -4.8394 0.176078 -0.527683 96 -4.83519 0.229195 -0.527409 90 -4.83684 0.191213 -0.527409 92 -5.38513 -0.487001 -0.5134 41 -5.77645 1.11321 -0.510602 156 -5.20805 1.01491 -0.499762 40 -5.26092 -0.451399 -0.496281 53 -5.18082 0.967258 -0.494947 40 -5.42579 1.0397 -0.494027 40 -5.16025 0.980114 -0.492539 40 -5.22738 -0.399115 -0.491199 40 -5.21622 -0.414799 -0.489861 40 -5.21094 -0.430878 -0.489326 40 -5.13904 0.942532 -0.488794 40 -5.14043 0.901085 -0.487992 40 -5.12588 0.915081 -0.486387 40 -5.11396 0.879744 -0.483979 40 -5.10829 0.853953 -0.482642 40 -5.10769 0.820868 -0.481839 40 -5.10117 0.836248 -0.481305 40 -5.15519 -0.353277 -0.481035 40 -5.15405 -0.369472 -0.481034 40 -5.0985 0.802907 -0.480234 40 -5.09244 0.777327 -0.478897 40 -5.1301 -0.311237 -0.47729 40 -5.1266 -0.33529 -0.477022 40 -5.07919 0.758904 -0.476757 40 -5.07959 0.742645 -0.47649 40 -5.12602 -0.278706 -0.476487 40 -5.0833 0.702446 -0.476222 40 -5.12291 -0.262416 -0.475952 40 -5.12116 -0.2946 -0.475952 40 -5.07518 0.717552 -0.47542 40 -5.12012 -0.23811 -0.475417 40 -5.07567 0.685099 -0.474884 40 -5.11491 -0.221796 -0.474615 40 -5.0691 0.643656 -0.473279 40 -5.06509 0.659312 -0.473012 40 -5.10369 -0.205308 -0.47301 40 -5.10262 -0.181195 -0.472743 40 -5.33293 -0.473492 -0.472102 44 -5.06127 0.62646 -0.471942 40 -5.09722 -0.165003 -0.47194 40 -5.09706 -0.0929009 -0.471673 40 -5.54487 -0.497428 -0.471643 53 -5.06824 0.530519 -0.471407 40 -5.05731 0.609816 -0.471139 40 -5.09278 -0.108849 -0.471138 40 -5.09043 -0.12481 -0.47087 40 -5.0562 0.5855 -0.470605 40 -5.05801 0.569612 -0.470604 40 -5.08971 -0.0528244 -0.470603 40 -5.06161 0.497643 -0.470069 40 -5.08186 -0.148605 -0.4698 40 -5.0519 0.552818 -0.469534 40 -5.05799 0.473203 -0.469267 40 -5.05296 0.440684 -0.468197 40 -5.04426 0.511862 -0.467929 40 -5.04958 0.456368 -0.467929 40 -5.05429 0.400818 -0.467929 40 -5.05946 0.329326 -0.467929 40 -5.06848 0.130439 -0.467929 40 -5.07013 0.0189559 -0.467928 40 -5.06958 -0.0766116 -0.467928 40 -5.06805 -0.036789 -0.467661 40 -5.05079 0.368589 -0.467127 40 -5.22375 0.976492 -0.467008 40 -5.04763 0.384295 -0.466859 40 -5.05756 0.217612 -0.466859 40 -5.04851 0.344495 -0.466592 40 -5.06013 0.0347641 -0.466591 40 -5.06021 -0.0208749 -0.466591 40 -5.05616 0.145959 -0.466324 40 -5.05746 0.0903545 -0.466324 40 -5.05827 0.00295929 -0.466323 40 -5.04804 0.288716 -0.466057 40 -5.04892 0.272857 -0.466056 40 -5.05227 0.201454 -0.466056 40 -5.05574 0.0744273 -0.466056 40 -5.04658 0.24092 -0.465522 40 -5.04776 0.161547 -0.465254 40 -5.05 0.0584442 -0.465254 40 -5.04184 0.25655 -0.464987 40 -5.02866 0.422517 -0.464719 40 -5.03673 0.311839 -0.464719 40 -5.04527 0.105933 -0.464719 40 -5.041 0.185083 -0.464451 40 -5.20532 0.956239 -0.464204 40 -5.24352 -0.44851 -0.460377 54 -5.23239 -0.41439 -0.458593 40 -5.14577 0.928915 -0.456047 40 -5.14618 0.90399 -0.455537 40 -5.20463 -0.387374 -0.45477 40 -5.19509 -0.353796 -0.45324 40 -5.19197 -0.369964 -0.452985 40 -5.12747 0.884218 -0.452733 40 -5.18364 -0.426685 -0.452476 40 -5.38887 -0.458588 -0.452043 86 -5.12314 0.850409 -0.451459 40 -5.11925 0.825033 -0.450439 40 -5.11065 0.864892 -0.450184 40 -5.17395 -0.311435 -0.450182 40 -5.16899 -0.327416 -0.449672 40 -5.11397 0.807747 -0.44942 40 -5.29239 0.991844 -0.449107 40 -5.11256 0.791092 -0.44891 40 -5.16238 -0.269994 -0.448398 40 -5.15709 -0.294072 -0.447888 40 -5.10052 0.764716 -0.446871 40 -5.15082 -0.220664 -0.446613 40 -5.1501 -0.236844 -0.446613 40 -5.14933 -0.253023 -0.446613 40 -5.0954 0.731295 -0.445596 40 -5.09879 0.707275 -0.445596 40 -5.1405 -0.179728 -0.445084 40 -5.13708 -0.163431 -0.444574 40 -5.13199 -0.195533 -0.444065 40 -5.07933 0.745352 -0.443812 40 -5.08132 0.688689 -0.443047 40 -5.08346 0.672723 -0.443047 40 -5.12193 -0.138711 -0.442535 40 -5.0757 0.655528 -0.441772 40 -5.08063 0.599456 -0.441517 40 -5.07945 0.575083 -0.441007 40 -5.081 0.542955 -0.440753 40 -5.07084 0.614502 -0.440498 40 -5.29662 -0.417696 -0.440284 40 -5.06692 0.630193 -0.440243 40 -5.22241 0.944422 -0.439552 57 -5.21551 0.960086 -0.439062 40 -5.07786 0.429995 -0.438968 40 -5.28467 -0.391772 -0.438569 40 -5.06573 0.517283 -0.438458 40 -5.08863 -0.121641 -0.438202 40 -5.05559 0.556431 -0.437694 40 -5.08569 -0.0656111 -0.437692 40 -5.21117 0.916973 -0.437592 59 -5.05943 0.500625 -0.437439 40 -5.06097 0.484728 -0.437439 40 -5.08402 -0.033632 -0.437438 40 -5.08304 -0.105502 -0.437437 40 -5.06265 0.444801 -0.437184 40 -5.06723 0.389108 -0.437184 40 -5.06336 0.412833 -0.436929 40 -5.07224 0.245528 -0.436673 40 -5.07299 0.229592 -0.436673 40 -5.05457 0.468136 -0.436419 40 -5.07397 -0.0494577 -0.436163 40 -5.05968 0.356615 -0.435909 40 -5.06926 0.173626 -0.435909 40 -5.20035 0.898165 -0.435877 59 -5.06804 0.149687 -0.435654 40 -5.0696 -0.0812525 -0.435653 40 -5.05836 0.31664 -0.435399 40 -5.06154 0.261002 -0.435399 40 -5.0526 0.372104 -0.435144 40 -5.06212 0.205264 -0.435144 40 -5.05338 0.33229 -0.434889 40 -5.06409 0.0461483 -0.434889 40 -5.06055 0.133597 -0.434634 40 -5.06193 0.0620435 -0.434634 40 -5.05141 0.300317 -0.434379 40 -5.06028 0.0222871 -0.434379 40 -5.06033 0.00639068 -0.434379 40 -5.05035 0.284344 -0.434125 40 -5.05481 0.189102 -0.434124 40 -5.05698 0.117626 -0.434124 40 -5.05775 0.0779052 -0.434124 40 -5.05834 -0.00949433 -0.434124 40 -5.19159 0.854639 -0.433917 65 -5.19685 0.822002 -0.433917 62 -5.18555 0.878751 -0.433672 59 -5.05336 0.10168 -0.433614 40 -5.18446 0.836693 -0.432692 61 -5.23438 -0.371767 -0.432199 40 -5.23516 -0.33053 -0.431954 40 -5.22958 -0.354948 -0.431464 40 -5.18399 0.76153 -0.431222 62 -5.17001 0.800967 -0.430242 63 -5.21533 -0.2965 -0.429259 65 -5.21437 -0.312882 -0.429259 63 -5.16392 0.775072 -0.429017 62 -5.16869 0.742613 -0.429017 62 -5.17436 0.701994 -0.429017 66 -5.16278 0.683842 -0.427302 66 -5.15641 0.715984 -0.427057 64 -5.19839 -0.279244 -0.427054 61 -5.19249 -0.238083 -0.426075 65 -5.19171 -0.254396 -0.426075 66 -5.15413 0.657938 -0.425832 64 -5.19123 -0.221696 -0.42583 61 -5.36594 0.983709 -0.425718 20 -5.15423 0.625043 -0.425342 65 -5.14436 0.640214 -0.424362 64 -5.17946 -0.164232 -0.424115 66 -5.17833 -0.196773 -0.424115 61 -5.14435 0.607393 -0.423872 63 -5.17693 -0.180444 -0.42387 62 -5.17662 -0.123473 -0.423625 68 -5.14501 0.566515 -0.423382 69 -5.13888 0.549466 -0.422402 68 -5.14106 0.508883 -0.422156 61 -5.1643 -0.139473 -0.422155 65 -5.13138 0.581276 -0.421912 62 -5.13746 0.524819 -0.421912 65 -5.16309 -0.106992 -0.42191 65 -5.1621 -0.0339886 -0.421665 66 -5.13897 0.467921 -0.421421 64 -5.13473 0.491933 -0.421177 63 -5.13588 0.435091 -0.420686 65 -5.15348 -0.0906475 -0.420685 66 -5.12856 0.450671 -0.419951 64 -5.13129 0.418438 -0.419951 64 -5.14832 0.00646618 -0.41995 93 -5.14808 -0.0501419 -0.41995 67 -5.13628 0.321513 -0.419706 63 -5.14392 -0.0662827 -0.41946 64 -5.38192 -0.462237 -0.419415 50 -5.13129 0.337369 -0.419216 61 -5.14236 -0.00972682 -0.419215 73 -5.12529 0.393605 -0.418971 65 -5.13356 0.264683 -0.418971 64 -5.1395 0.0952307 -0.418971 68 -5.12452 0.377347 -0.418726 62 -5.1334 0.175791 -0.418481 65 -5.13417 0.151597 -0.418481 68 -5.13603 0.0628675 -0.418481 66 -5.12918 0.232124 -0.418236 65 -5.12886 0.191747 -0.417991 64 -5.13223 0.0466755 -0.41799 40 -5.13239 0.0224902 -0.41799 42 -5.12625 0.207769 -0.417746 61 -5.12867 0.135281 -0.417746 69 -5.12907 0.119167 -0.417746 65 -5.11579 0.360497 -0.417501 62 -5.12082 0.280098 -0.417501 64 -5.12786 0.0788404 -0.417501 65 -5.11746 0.304098 -0.417256 65 -5.29662 0.954166 -0.417086 20 -5.11455 0.247494 -0.416521 65 -5.28044 0.908609 -0.414286 20 -5.27414 0.933147 -0.414053 20 -5.27738 0.891053 -0.413586 20 -5.25466 0.870373 -0.410553 20 -5.30819 -0.413559 -0.410316 20 -5.23971 0.851082 -0.408453 20 -5.24366 0.826381 -0.408453 20 -5.24034 0.809023 -0.407753 20 -5.28864 -0.353462 -0.407516 20 -5.28493 -0.378229 -0.407283 20 -5.23277 0.765895 -0.406119 20 -5.23318 0.74918 -0.405886 20 -5.2749 -0.319188 -0.40565 20 -5.2173 0.788821 -0.40472 20 -5.26931 -0.277293 -0.404717 20 -5.26194 -0.393094 -0.404716 20 -5.22314 0.706006 -0.404019 20 -5.25801 -0.33467 -0.403783 20 -5.21959 0.672198 -0.403086 20 -5.20795 0.729017 -0.40262 20 -5.21351 0.688091 -0.402619 20 -5.2523 -0.259766 -0.402617 20 -5.21182 0.654608 -0.401919 20 -5.24462 -0.2924 -0.401917 20 -5.23296 -0.432156 -0.401683 23 -5.24119 -0.242655 -0.401217 20 -5.2089 0.612766 -0.400986 20 -5.24095 -0.201397 -0.400984 20 -5.21158 0.57163 -0.400753 20 -5.23957 -0.18485 -0.400751 20 -5.23888 -0.14363 -0.400517 20 -5.19906 0.628212 -0.400053 20 -5.20093 0.595319 -0.399819 20 -5.21276 0.480808 -0.399819 20 -5.23443 -0.0694465 -0.399818 20 -5.22839 -0.217306 -0.399584 20 -5.20727 0.496826 -0.399353 20 -5.22793 -0.102188 -0.399118 20 -5.19754 0.55365 -0.398886 20 -5.19925 0.537318 -0.398886 20 -5.20173 0.512812 -0.398886 20 -5.20783 0.422709 -0.398652 20 -5.22091 -0.0281908 -0.398185 20 -5.21899 0.00462212 -0.397951 20 -5.19855 0.438439 -0.397719 20 -5.21349 -0.126416 -0.397484 20 -5.19247 0.4626 -0.397253 20 -5.21202 0.102903 -0.397252 20 -5.21267 0.0619656 -0.397252 20 -5.21284 0.045589 -0.397252 20 -5.21303 -0.0117297 -0.397251 20 -5.21234 -0.0854239 -0.397251 20 -5.20862 -0.159031 -0.397018 20 -5.2088 -0.0526119 -0.396785 20 -5.20437 0.0864377 -0.396318 20 -5.20501 0.0292083 -0.396318 20 -5.19405 0.306911 -0.396086 20 -5.20065 0.15995 -0.396085 20 -5.18838 0.363874 -0.395853 20 -5.19659 0.217049 -0.395852 20 -5.1814 0.404322 -0.395386 20 -5.19579 0.118993 -0.395385 20 -5.18126 0.379765 -0.395153 20 -5.18794 0.233058 -0.394919 20 -5.17958 0.346958 -0.394686 20 -5.18397 0.2737 -0.394686 20 -5.18763 0.192242 -0.394685 20 -5.17917 0.322432 -0.394453 20 -5.18744 0.135148 -0.394452 20 -5.17912 0.289784 -0.394219 20 -5.79675 -0.488599 -0.393064 55 -5.17131 0.248671 -0.393052 20 -5.17232 0.175483 -0.392819 20 -6.94266 -0.346652 -0.391613 43 -8.80108 0.426754 -0.386869 56 -8.79372 0.454109 -0.386462 86 -8.79437 0.232794 -0.385919 81 -8.78244 0.398257 -0.385514 88 -8.78562 0.260207 -0.385377 51 -8.77624 0.356567 -0.384971 85 -8.77533 0.328924 -0.384836 83 -8.77632 0.301356 -0.384836 44 -8.76913 0.204636 -0.384158 44 -6.8203 -0.319528 -0.380871 63 -6.79768 -0.372071 -0.379138 40 -6.77333 -0.0938776 -0.376194 104 -6.7716 -0.0725841 -0.376021 90 -6.75445 -0.146751 -0.374634 120 -6.75396 -0.167969 -0.374634 115 -6.75403 -0.0194159 -0.374462 75 -6.7509 -0.12547 -0.374288 114 -5.54529 1.00877 -0.374174 40 -6.74988 -0.051228 -0.374115 90 -6.74513 -0.19959 -0.373941 106 -6.74447 -0.220779 -0.373941 120 -6.73812 0.00173726 -0.373076 66 -6.73378 -0.241647 -0.373075 119 -6.73409 0.022877 -0.372729 76 -6.72901 -0.26266 -0.372728 114 -6.71774 -0.29397 -0.371862 119 -5.55819 0.778319 -0.371682 40 -5.88471 -0.480933 -0.370434 40 -6.7061 0.0437428 -0.370303 58 -5.53733 0.740074 -0.368983 40 -5.51501 0.878691 -0.368776 51 -5.52434 0.817998 -0.368776 40 -5.49705 0.97351 -0.368569 57 -5.52492 0.800364 -0.368568 40 -5.4942 0.95524 -0.367946 65 -5.52511 0.756165 -0.367945 40 -5.50797 0.83333 -0.367322 75 -5.56188 -0.230822 -0.366904 40 -5.49611 0.858087 -0.366492 81 -5.55716 -0.248098 -0.366489 40 -5.55211 -0.309065 -0.366281 64 -5.54714 -0.326255 -0.365866 40 -5.5516 -0.186675 -0.365659 40 -5.55099 -0.204117 -0.365659 40 -5.54934 -0.125513 -0.365244 40 -5.54892 -0.142947 -0.365244 40 -5.54159 -0.282237 -0.365036 54 -5.46773 0.933094 -0.364831 80 -5.4993 0.708827 -0.364623 40 -5.54023 -0.168815 -0.364413 40 -5.53976 -0.10784 -0.364206 40 -5.4936 0.690592 -0.363792 40 -5.52854 -0.264096 -0.363582 40 -5.45832 0.905105 -0.363378 76 -5.53248 -0.0641982 -0.363375 40 -5.51619 -0.402636 -0.363167 40 -5.52814 -0.0901834 -0.36296 40 -5.51663 -0.367827 -0.362959 40 -5.52007 0.274368 -0.362753 40 -5.52669 -0.0467383 -0.362752 40 -5.5172 0.291612 -0.362546 40 -5.5208 0.152827 -0.362338 40 -5.52283 -0.0293354 -0.362337 40 -5.44935 0.886092 -0.362132 73 -5.5209 0.0140443 -0.36213 40 -5.50751 -0.384566 -0.362129 40 -5.5103 0.308639 -0.361923 40 -5.51893 -0.00328858 -0.361922 40 -5.51432 0.170015 -0.361715 40 -5.51147 0.195937 -0.361507 40 -5.51387 0.109342 -0.361507 40 -7.02009 0.265051 -0.361077 74 -5.50822 0.0919491 -0.360884 40 -5.5089 0.0313785 -0.360884 40 -7.01728 0.231851 -0.360752 89 -5.5067 0.0573265 -0.360676 40 -5.48324 0.489033 -0.36047 55 -5.48621 0.454572 -0.36047 40 -5.49488 0.333822 -0.36047 40 -5.48846 -0.426502 -0.360468 40 -7.00833 0.308753 -0.360264 47 -7.00926 0.286736 -0.360264 70 -5.4797 0.506082 -0.360262 40 -5.4925 -0.340107 -0.36026 40 -7.00533 0.330683 -0.360101 40 -5.48564 0.41119 -0.360054 40 -6.03663 1.12831 -0.359927 163 -5.48492 0.393821 -0.359847 40 -5.47131 0.531351 -0.35964 40 -6.99772 0.363402 -0.359613 40 -5.48387 0.350497 -0.359431 60 -5.49257 0.0745033 -0.359223 40 -5.4503 0.667979 -0.359017 40 -5.46367 0.547968 -0.359017 40 -5.47877 0.367475 -0.359016 40 -5.48943 0.134852 -0.359016 40 -5.47043 0.427403 -0.358601 40 -5.46294 0.470032 -0.358186 63 -5.44249 0.649721 -0.357979 51 -5.47634 0.229307 -0.357978 40 -5.45005 0.56396 -0.357771 40 -5.44154 0.623633 -0.357564 76 -5.47122 0.254946 -0.357563 40 -5.47306 0.211968 -0.357562 40 -5.44337 0.589225 -0.357356 76 -6.97045 -0.350223 -0.357332 47 -5.43161 0.605269 -0.356318 80 -6.90433 -0.31404 -0.351798 40 -5.6401 0.911415 -0.351534 40 -5.64097 0.893371 -0.351337 40 -5.6274 0.927465 -0.35055 40 -6.83097 0.896454 -0.350014 46 -6.8178 0.949274 -0.349526 40 -5.60511 0.98716 -0.349368 40 -5.60336 0.950556 -0.34858 40 -5.58866 1.01138 -0.348187 40 -5.61367 0.861803 -0.348186 40 -5.59055 0.966414 -0.347596 40 -5.61045 0.843248 -0.347596 40 -5.60913 0.825022 -0.347202 40 -5.59989 0.80564 -0.34602 40 -5.60362 0.779243 -0.34602 40 -6.82603 -0.363935 -0.345614 41 -5.59816 0.760528 -0.345232 40 -6.8134 0.375978 -0.344641 40 -5.6299 -0.363467 -0.344442 40 -5.59434 0.697394 -0.344051 40 -5.59453 0.679568 -0.343854 40 -5.58817 0.714445 -0.343657 40 -6.80769 -0.170067 -0.343499 82 -6.80574 0.0331497 -0.343174 81 -5.57883 0.739956 -0.343066 40 -5.58976 0.652238 -0.343066 40 -5.59178 0.634674 -0.343066 40 -6.80243 -0.137843 -0.343011 88 -6.80171 -0.0416445 -0.342849 89 -6.80084 -0.116428 -0.342848 84 -6.79983 0.0117825 -0.342686 80 -6.79981 -0.0202622 -0.342686 88 -5.61167 -0.335838 -0.342473 40 -6.78506 -0.382978 -0.342359 40 -6.79357 -0.0629068 -0.342197 87 -6.78867 -0.265604 -0.342197 89 -6.79165 0.0544722 -0.342035 82 -5.60169 -0.397124 -0.341882 40 -6.78921 -0.0948503 -0.341872 86 -6.78457 -0.212069 -0.341709 86 -6.78183 -0.286655 -0.341708 74 -5.59842 -0.414582 -0.341685 40 -5.59893 -0.379274 -0.341488 40 -6.78122 -0.190626 -0.341383 85 -6.77989 -0.23323 -0.341383 82 -6.77906 0.107667 -0.341059 78 -6.77351 0.0756772 -0.340571 86 -5.54873 0.550214 -0.337946 40 -5.5509 0.506428 -0.337749 40 -5.54651 0.488436 -0.337158 40 -5.80072 1.05701 -0.337063 40 -5.55855 0.287662 -0.336961 40 -6.67353 0.855088 -0.336831 40 -5.53855 0.531584 -0.336764 40 -5.54406 0.470652 -0.336764 40 -5.54996 0.365933 -0.336567 40 -5.55808 0.208887 -0.336567 40 -5.55955 0.165227 -0.336566 40 -5.56158 0.0691447 -0.336566 40 -5.54225 0.444187 -0.33637 40 -5.54909 0.348361 -0.33637 40 -5.55797 0.0254257 -0.336172 40 -5.54222 0.330415 -0.335582 40 -5.53501 0.408575 -0.335386 40 -5.53626 0.391184 -0.335386 40 -5.54854 0.129957 -0.335385 40 -5.54479 0.190881 -0.335188 40 -5.54807 0.00790494 -0.335188 40 -5.53955 0.26914 -0.334991 40 -5.54512 0.103716 -0.334991 40 -5.53877 0.242935 -0.334794 40 -5.54214 0.147201 -0.334794 40 -5.53752 0.225444 -0.334597 40 -5.54143 0.0862151 -0.334597 40 -5.51135 0.56383 -0.334401 40 -5.53995 0.042666 -0.3344 40 -5.77459 1.03365 -0.334275 40 -5.52782 0.303349 -0.334007 40 -8.7433 0.400669 -0.333892 81 -8.74809 0.277029 -0.333891 73 -8.73932 0.441762 -0.333768 81 -8.74166 0.345556 -0.333643 81 -8.74462 0.18068 -0.333518 56 -8.73654 0.372835 -0.333395 81 -8.7284 0.496185 -0.333271 82 -8.73894 0.249228 -0.33327 78 -8.72593 0.468536 -0.333022 79 -8.72524 0.30368 -0.332524 80 -6.66091 0.389134 -0.332272 112 -5.81458 -0.570179 -0.332039 53 -5.49799 0.423046 -0.331841 40 -8.71408 0.207352 -0.331654 85 -6.63115 0.418869 -0.329993 89 -6.24162 0.0683265 -0.329933 42 -5.77869 -0.548166 -0.328508 40 -6.59855 0.458569 -0.327552 113 -5.76932 -0.519804 -0.327393 77 -5.76101 -0.50077 -0.326463 54 -6.58404 0.436843 -0.32625 97 -6.11786 0.88976 -0.324738 40 -8.58255 -0.376135 -0.323821 44 -7.84835 -0.381576 -0.322096 40 -5.70304 -0.477414 -0.320887 41 -5.64975 0.820727 -0.319589 40 -5.62578 0.898683 -0.318475 40 -5.62857 0.881006 -0.318474 40 -5.62343 0.862146 -0.317731 40 -5.6202 0.843617 -0.317173 40 -5.60575 0.922668 -0.316988 40 -5.61876 0.798365 -0.316429 40 -5.58349 0.982235 -0.315872 58 -5.64858 -0.347685 -0.314939 40 -5.63228 0.531198 -0.314756 40 -5.59953 0.777796 -0.314385 40 -5.62199 0.574836 -0.314198 40 -5.93303 1.23732 -0.314171 54 -5.60543 0.635541 -0.313269 40 -5.61472 0.547418 -0.313269 40 -5.92519 1.21622 -0.313131 75 -5.60441 0.608708 -0.312897 40 -5.58141 0.748588 -0.31234 40 -5.5468 0.94905 -0.311969 40 -5.59638 0.590101 -0.311968 40 -5.60944 0.449276 -0.311967 40 -5.58008 0.712775 -0.311782 40 -5.62536 0.0254604 -0.31178 40 -5.60254 0.484188 -0.311596 40 -5.60404 0.466585 -0.311595 40 -5.57759 0.668017 -0.311038 40 -5.90548 1.18309 -0.310878 85 -5.56793 0.729055 -0.310853 40 -5.61534 -0.0362851 -0.310851 40 -5.5757 0.65005 -0.310667 40 -5.61312 -0.0627145 -0.310665 40 -5.53403 0.929054 -0.310482 57 -5.58829 0.509554 -0.31048 40 -5.59492 0.403999 -0.310294 40 -5.59598 -0.326558 -0.30992 40 -5.56162 0.6839 -0.309737 40 -5.60351 -0.000944368 -0.309735 40 -5.5995 -0.0185169 -0.309363 40 -5.58424 0.385652 -0.309179 40 -5.57905 0.429355 -0.308993 40 -5.58343 0.367986 -0.308993 40 -5.59497 -0.0800077 -0.308992 40 -5.88768 1.1602 -0.308972 93 -5.5927 -0.097542 -0.308806 40 -5.57396 -0.360334 -0.308061 40 -5.87957 1.13937 -0.307932 80 -5.87901 1.11052 -0.307413 84 -5.56963 -0.298561 -0.307318 40 -7.5792 0.946994 -0.307196 40 -5.55691 -0.376692 -0.306574 40 -5.55044 -0.437604 -0.306388 47 -5.86485 1.08869 -0.305853 84 -5.55471 0.278701 -0.305833 40 -5.55463 -0.280186 -0.305831 40 -5.5535 -0.262631 -0.305645 40 -5.92592 -0.646276 -0.305501 79 -5.5476 0.260912 -0.305089 40 -5.5372 -0.401494 -0.304901 40 -5.53591 -0.418889 -0.304901 40 -7.02308 0.210206 -0.304875 40 -5.85649 1.06806 -0.304814 123 -5.92877 -0.514995 -0.304635 165 -5.91395 -0.663822 -0.304635 46 -5.54411 -0.201064 -0.30453 40 -5.54345 -0.218479 -0.30453 40 -5.53742 0.304073 -0.304346 40 -5.54075 -0.2358 -0.304344 40 -5.54361 0.0428831 -0.304159 40 -5.91206 -0.626047 -0.304115 82 -7.01042 0.231829 -0.303995 40 -5.54043 -0.122507 -0.303973 40 -5.52849 0.321045 -0.303602 40 -5.52546 0.338299 -0.303416 40 -5.5305 0.121041 -0.303044 97 -5.5273 0.0775641 -0.302672 108 -5.52751 0.0602003 -0.302672 183 -5.52509 -0.174214 -0.302671 40 -5.52488 0.103583 -0.302486 110 -5.52087 0.181619 -0.302301 72 -5.89299 -0.577368 -0.302036 90 -5.8902 -0.605133 -0.302036 87 -5.8265 1.04354 -0.301868 104 -5.51146 0.164025 -0.301371 121 -5.50969 -0.156328 -0.301184 40 -5.87493 -0.55706 -0.300303 95 -5.49824 0.137769 -0.30007 110 -5.49267 0.241299 -0.299884 40 -5.49423 -0.138542 -0.299697 40 -5.84688 -0.536003 -0.297704 75 -5.84844 -0.471381 -0.297358 42 -5.80584 0.399861 -0.293202 40 -5.73503 0.915455 -0.292165 40 -5.74204 0.870386 -0.292164 40 -5.73394 0.8968 -0.291818 40 -5.75052 0.705945 -0.290951 40 -5.75271 0.687876 -0.290951 40 -6.77874 0.888649 -0.290941 40 -5.72309 0.849027 -0.290258 40 -5.72634 0.812764 -0.290085 40 -5.74402 0.659342 -0.289911 40 -5.74403 0.604526 -0.289391 40 -5.76764 0.306099 -0.28939 40 -6.8033 0.395591 -0.289326 40 -5.76108 0.351127 -0.289044 40 -6.80917 0.14949 -0.289031 40 -5.69283 0.926887 -0.288699 47 -5.73221 0.639686 -0.288698 40 -6.80414 -0.0964934 -0.288591 40 -5.74893 0.413843 -0.288351 40 -5.73295 0.575993 -0.288178 40 -6.73442 0.904206 -0.287861 40 -6.79482 -0.0216813 -0.287857 40 -5.73655 0.494532 -0.287831 40 -5.74824 0.332157 -0.287831 40 -6.78984 -0.117682 -0.287564 40 -5.67163 0.969158 -0.287487 60 -5.70051 0.781575 -0.287486 40 -5.731 0.512177 -0.287485 40 -5.73568 0.430951 -0.287311 40 -6.78647 0.0742583 -0.287271 40 -6.78687 -0.000364542 -0.287271 40 -5.73808 0.367723 -0.287138 40 -6.78345 -0.138912 -0.287123 40 -6.77018 0.414887 -0.286979 40 -6.78275 -0.042998 -0.286977 40 -6.78073 -0.170833 -0.286977 40 -6.78016 -0.192137 -0.286977 40 -6.77844 -0.245381 -0.286976 40 -5.72085 0.556567 -0.286965 40 -5.99026 1.23439 -0.286869 40 -5.71241 0.619212 -0.286792 40 -5.72616 0.475464 -0.286792 40 -6.77859 -0.0642843 -0.286684 40 -5.71663 0.538005 -0.286446 40 -5.73276 0.286026 -0.286271 40 -6.77284 0.0314973 -0.286244 40 -6.7668 -0.28758 -0.286243 40 -6.76773 0.127152 -0.285951 40 -6.00761 1.0814 -0.285892 64 -5.64895 0.983465 -0.285754 70 -5.71643 0.447488 -0.285752 40 -6.76473 0.0526837 -0.285657 40 -8.79287 0.625763 -0.285606 76 -8.79752 0.556685 -0.285606 80 -5.65305 0.947614 -0.285581 46 -5.68123 0.760657 -0.28558 40 -6.7577 -0.265966 -0.285509 40 -8.80306 0.376773 -0.28538 83 -8.80667 0.279959 -0.285379 40 -8.79286 0.500967 -0.285156 84 -6.7536 -0.212718 -0.285069 40 -5.6811 0.71524 -0.28506 40 -8.78483 0.597486 -0.285044 79 -8.78726 0.52836 -0.284931 86 -8.7904 0.473137 -0.284931 82 -8.79385 0.404084 -0.28493 83 -6.75413 0.105617 -0.284924 40 -8.79577 0.307304 -0.284818 86 -5.67372 0.74147 -0.284714 40 -8.79524 0.18286 -0.284592 90 -8.78456 0.431341 -0.284481 83 -8.79262 0.210449 -0.28448 83 -8.78992 0.238021 -0.284368 55 -5.71545 0.0783352 -0.284192 60 -8.78278 0.334517 -0.284143 86 -8.78841 0.113698 -0.284142 52 -5.96087 1.20897 -0.284102 40 -8.78179 0.155024 -0.283805 89 -5.96073 1.18948 -0.283776 40 -8.78074 0.0860326 -0.283692 46 -5.69516 -0.351846 -0.283324 50 -5.94669 1.15765 -0.282149 40 -8.73714 -0.326164 -0.281554 40 -5.64848 -0.393717 -0.279512 46 -8.69817 -0.351963 -0.279418 40 -5.64192 -0.428914 -0.279165 57 -8.68843 -0.392565 -0.278969 40 -5.63927 -0.410916 -0.278819 43 -5.64465 0.201269 -0.278301 141 -5.63577 -0.375106 -0.278299 40 -5.91865 1.0466 -0.278242 40 -6.60811 0.823403 -0.277885 40 -5.63058 -0.330401 -0.277606 40 -5.88955 1.1276 -0.277103 40 -6.60004 0.790782 -0.277004 40 -5.95774 -0.663141 -0.276934 40 -5.95365 -0.681618 -0.276771 40 -6.6229 0.436639 -0.276269 40 -5.95089 -0.633958 -0.276121 40 -5.62063 0.138434 -0.276048 150 -5.61413 0.217705 -0.275702 112 -5.6134 0.182353 -0.275529 158 -5.61506 0.120621 -0.275529 140 -5.61221 0.155833 -0.275355 161 -5.60561 0.0939448 -0.274662 166 -5.93105 -0.61291 -0.27433 40 -6.58423 0.475515 -0.273629 93 -6.5783 0.527045 -0.273482 68 -5.91709 -0.592617 -0.273029 40 -6.57197 0.505732 -0.272896 109 -6.56977 0.453665 -0.272455 59 -5.89909 -0.572013 -0.271401 40 -5.89775 -0.543826 -0.271076 40 -6.53488 0.544067 -0.270402 49 -5.87561 -0.523067 -0.269123 54 -5.76271 1.00108 -0.265059 40 -5.76787 0.908929 -0.264245 40 -5.75556 0.971971 -0.264083 40 -7.56671 0.954377 -0.263795 40 -5.75465 0.95325 -0.263757 40 -5.74974 0.933925 -0.263106 40 -6.88374 0.895454 -0.259906 40 -6.90723 0.416686 -0.258413 61 -5.73733 -0.401271 -0.25708 40 -5.72472 0.175935 -0.255129 41 -6.81028 0.432674 -0.251909 84 -6.82153 -0.0815183 -0.251772 76 -6.81791 -0.0386176 -0.251501 84 -6.8141 -0.23135 -0.251501 83 -6.81576 -0.0600133 -0.251366 88 -6.81469 -0.134952 -0.251365 83 -6.76432 0.804877 -0.251098 95 -6.80091 0.389238 -0.251096 55 -6.81126 -0.10276 -0.251095 103 -6.81024 -0.156252 -0.251094 85 -6.80881 -0.209734 -0.251094 99 -6.81002 0.0149421 -0.250959 94 -5.67449 0.112191 -0.250897 58 -6.80795 0.0363336 -0.250824 97 -6.80571 0.068402 -0.250689 94 -6.80315 0.111138 -0.250553 95 -6.74237 0.899141 -0.250421 76 -6.79656 -0.273457 -0.250416 106 -6.79748 0.0897063 -0.250147 98 -6.79607 -0.00638606 -0.250011 88 -6.78941 -0.251777 -0.249874 85 -6.78722 -0.305091 -0.249874 78 -6.71911 0.992946 -0.249744 40 -6.78977 -0.177051 -0.249739 100 -5.65151 0.156249 -0.249107 53 -6.72837 0.768617 -0.248388 83 -6.69704 0.936115 -0.247711 40 -8.11881 -0.390685 -0.246931 40 -5.62029 0.129032 -0.246503 110 -6.66094 0.963214 -0.245543 40 -6.70334 0.447434 -0.244728 93 -6.67926 0.477535 -0.243237 100 -6.62758 0.736417 -0.241341 97 -6.64399 0.569633 -0.241341 93 -6.63779 0.548131 -0.240799 103 -6.63035 0.51611 -0.240121 117 -6.63194 0.495279 -0.240121 111 -6.61831 0.588476 -0.239715 74 -6.59742 0.680795 -0.238902 65 -8.85243 -0.304147 -0.238429 169 -6.58567 0.637853 -0.237818 94 -7.13672 0.97852 -0.237446 40 -6.57569 0.657777 -0.237276 79 -6.5777 0.61627 -0.23714 122 -6.56238 0.708576 -0.236734 106 -7.8749 0.937569 -0.235808 40 -8.76652 0.580866 -0.234791 75 -8.75562 0.676904 -0.234589 61 -8.76084 0.511387 -0.234285 83 -8.76388 0.45633 -0.234285 81 -8.77465 0.139477 -0.234283 86 -8.7716 0.194558 -0.234182 86 -8.74775 0.648624 -0.234083 66 -8.75842 0.483629 -0.234083 82 -8.75929 0.428487 -0.233981 83 -8.73611 0.744419 -0.233882 82 -8.76618 0.166868 -0.233879 86 -8.7626 0.235649 -0.233778 86 -8.73554 0.702911 -0.233679 82 -8.75523 0.386921 -0.233677 76 -8.76376 0.0153613 -0.233675 79 -8.74075 0.606675 -0.233577 110 -8.75583 0.262982 -0.233474 70 -8.75707 0.111627 -0.233372 85 -8.7495 0.331578 -0.233272 128 -8.75151 -0.273456 -0.233269 72 -8.73642 0.551216 -0.233172 79 -8.74443 0.358886 -0.23307 66 -8.74942 -0.0809108 -0.232967 63 -8.74769 0.0427682 -0.232866 87 -8.74763 -0.0534188 -0.232866 77 -8.7454 -0.204549 -0.232865 63 -8.74434 -0.24576 -0.232865 66 -8.74201 -0.177006 -0.232663 71 -8.74152 0.070184 -0.232563 89 -7.82026 0.906346 -0.232548 50 -8.733 0.289692 -0.232361 87 -8.73577 -0.0259346 -0.232259 99 -8.73054 -0.149371 -0.232056 121 -7.74104 0.94674 -0.228389 40 -8.62334 -0.337636 -0.226895 80 -7.67705 0.975854 -0.225016 40 -6.9139 0.44213 -0.220292 63 -6.32499 -0.392167 -0.218844 40 -6.88419 -0.285189 -0.217927 40 -6.78602 0.87488 -0.214949 40 -6.79325 0.799971 -0.214824 85 -6.80097 0.455945 -0.213332 79 -6.79356 0.530533 -0.213208 91 -6.7932 0.509031 -0.213083 97 -6.78955 0.476573 -0.21271 97 -6.79438 0.401889 -0.21271 59 -6.72491 0.996029 -0.212215 62 -6.75212 0.77346 -0.21209 66 -6.79569 -0.0895775 -0.212087 78 -6.79134 0.113169 -0.211839 82 -6.79027 -0.0148607 -0.211714 103 -6.78714 -0.206821 -0.211713 85 -6.78539 -0.1108 -0.211465 90 -6.78368 0.0916942 -0.211342 96 -6.78428 0.0170994 -0.211341 88 -6.78221 -0.0361812 -0.211217 63 -6.78206 -0.0574866 -0.211217 94 -6.78057 -0.153357 -0.211216 87 -6.77847 -0.227903 -0.211216 90 -6.7802 0.0383751 -0.211093 89 -6.77533 -0.259774 -0.211092 90 -6.77805 0.059649 -0.210969 94 -6.77378 -0.185167 -0.210843 91 -6.77104 -0.131898 -0.210595 89 -6.71006 0.886243 -0.21035 40 -6.66733 0.933793 -0.208113 40 -6.68126 -0.351164 -0.205498 40 -6.61894 0.94805 -0.205255 59 -6.64802 0.571191 -0.204383 110 -6.63228 0.590779 -0.203513 81 -6.6228 0.537487 -0.202643 98 -5.95594 1.22063 -0.20137 40 -5.95771 1.19178 -0.201099 40 -5.96142 1.17306 -0.201099 40 -7.22721 0.966371 -0.199835 40 -5.93567 1.14876 -0.199066 40 -6.53502 0.602439 -0.197547 103 -6.51919 0.621585 -0.196677 74 -5.88214 1.10994 -0.195001 40 -5.8856 1.09145 -0.195001 48 -6.47888 0.72048 -0.194813 85 -5.95055 -0.612199 -0.194725 40 -6.48235 0.66936 -0.194689 112 -6.47427 0.689063 -0.194316 101 -6.4745 0.647957 -0.194067 110 -5.93868 -0.629797 -0.194047 40 -5.93947 -0.582729 -0.193777 40 -5.93333 -0.563276 -0.193235 40 -5.93308 -0.544443 -0.193099 40 -6.48078 -0.361822 -0.19307 40 -5.88392 -0.511756 -0.189576 40 -8.85859 -0.323696 -0.188451 31 -5.81349 0.909342 -0.18809 40 -5.7781 0.94117 -0.186057 40 -8.78762 0.577267 -0.185852 69 -6.36201 -0.375717 -0.185737 40 -8.80007 0.0934673 -0.18558 79 -8.7839 0.507794 -0.185493 75 -8.78293 0.452399 -0.185313 75 -5.76723 0.920872 -0.185109 40 -7.02764 -0.179899 -0.185104 40 -8.77229 0.534809 -0.185044 102 -8.76583 0.603558 -0.184955 88 -8.76949 0.479373 -0.184775 106 -8.77909 0.162269 -0.184683 82 -8.77278 0.258683 -0.184504 104 -8.77451 0.0381388 -0.184413 85 -8.77016 -0.278827 -0.184412 75 -8.77054 0.1897 -0.184324 109 -8.77035 0.0656847 -0.184234 117 -5.74406 0.963569 -0.184025 40 -8.75792 0.216992 -0.183786 79 -8.75958 0.134443 -0.183785 113 -7.68771 0.957298 -0.18218 40 -8.70183 -0.344891 -0.181449 30 -7.66486 0.97885 -0.181168 40 -5.76575 -0.38248 -0.180904 40 -6.92823 0.575203 -0.180723 49 -8.68274 -0.371403 -0.180641 30 -5.74931 -0.417624 -0.179956 47 -6.91859 0.519776 -0.179936 67 -6.91408 0.552223 -0.179823 43 -6.93501 -0.122687 -0.179821 61 -6.93435 -0.155368 -0.179821 60 -6.92526 -0.198674 -0.179371 40 -6.92409 0.0189557 -0.179147 65 -5.73865 -0.398675 -0.179143 40 -5.7407 -0.335429 -0.179008 40 -5.73973 -0.317271 -0.178872 40 -6.91812 -0.00277083 -0.17881 69 -6.90828 -0.230713 -0.178471 40 -6.9079 -0.056985 -0.178247 85 -6.90569 -0.0786583 -0.178135 60 -6.90142 -0.100278 -0.17791 95 -6.90011 -0.0243755 -0.177798 115 -8.60706 -0.408588 -0.177319 42 -6.13867 1.03549 -0.176544 40 -6.874 0.0513995 -0.176337 65 -6.79638 0.888613 -0.175216 40 -6.76295 0.927604 -0.173642 40 -6.79647 -0.365635 -0.172513 40 -6.71499 0.953454 -0.171169 62 -6.68032 0.970076 -0.169371 52 -6.71369 -0.413782 -0.168016 40 -6.6828 0.608619 -0.167121 166 -6.67365 0.576135 -0.166446 40 -6.68593 -0.338198 -0.166218 40 -6.5834 0.620806 -0.161613 55 -6.56177 0.733392 -0.161051 62 -6.56205 0.712564 -0.160938 100 -6.55433 0.690939 -0.160376 94 -6.55558 0.639069 -0.160151 87 -6.54757 0.659085 -0.159814 121 -5.78275 0.936569 -0.153674 40 -5.77384 0.916466 -0.152928 40 -5.73845 0.947715 -0.151064 40 -7.95937 0.928696 -0.150215 72 -5.73929 -0.386735 -0.147083 40 -7.80536 0.886396 -0.143123 64 -7.7778 0.932873 -0.142135 33 -6.9174 -0.102016 -0.140185 107 -7.71778 0.962777 -0.139622 27 -6.7776 0.938382 -0.136345 64 -6.76496 0.882463 -0.135333 113 -8.80801 0.271184 -0.130358 32 -6.62385 0.969609 -0.128858 105 -8.7581 0.421087 -0.128664 32 -8.76487 0.242168 -0.128663 32 -8.75253 0.489741 -0.128587 32 -8.75768 0.338361 -0.128509 32 -8.75003 0.462021 -0.128433 32 -8.75718 0.297014 -0.128432 32 -8.76051 0.173186 -0.128432 32 -8.7556 0.104289 -0.1282 32 -8.73277 0.612548 -0.128125 92 -8.75193 0.2005 -0.128123 32 -8.73499 0.516245 -0.127971 32 -8.74328 -0.294281 -0.12789 32 -8.7187 0.583996 -0.127509 110 -8.7379 0.0765687 -0.127507 32 -8.71451 0.556203 -0.127278 59 -8.72504 0.144958 -0.127045 32 -8.69222 -0.265383 -0.125887 75 -5.90227 0.907514 -0.125528 40 -5.88405 0.971091 -0.125079 40 -5.88856 0.943351 -0.125079 40 -6.58957 0.596829 -0.12491 185 -5.86781 0.921234 -0.12373 40 -6.52356 0.714839 -0.122179 81 -6.52404 0.611312 -0.121672 96 -6.50541 0.733476 -0.121369 105 -6.51781 0.569401 -0.121166 121 -6.49509 0.680631 -0.12056 113 -6.49725 0.639606 -0.120458 158 -6.49123 0.659595 -0.120256 146 -5.85788 -0.40393 -0.119903 59 -5.85374 -0.37591 -0.119566 40 -8.45921 0.96793 -0.118881 41 -7.99978 0.939418 -0.10116 29 -6.85623 0.880098 -0.10075 23 -6.86816 0.554461 -0.099761 81 -6.86588 0.532589 -0.0995814 65 -6.87515 -0.137305 -0.0991296 68 -6.84838 0.498851 -0.0986835 118 -6.86556 -0.115499 -0.0986809 73 -6.86453 0.00314645 -0.0985916 66 -6.84244 -0.0397739 -0.0976039 49 -6.84047 -0.168735 -0.0976034 122 -6.83991 -0.190224 -0.0976033 73 -6.84053 -0.0182626 -0.0975143 92 -6.84018 -0.0719869 -0.0975141 58 -6.83592 -0.0934061 -0.0973344 85 -6.7099 0.904744 -0.0943762 66 -6.68775 0.933933 -0.0935684 29 -5.87565 0.894877 -0.0908135 40 -6.67639 -0.405775 -0.0906901 22 -6.6046 0.964971 -0.0900674 22 -5.90956 -0.341906 -0.0895953 61 -5.84574 0.918414 -0.0894983 63 -5.84085 0.93645 -0.0893972 55 -6.58781 0.941467 -0.0891696 22 -7.62836 0.979765 -0.0871375 27 -5.85162 -0.403393 -0.0868633 42 -6.57094 0.58356 -0.0865646 22 -5.85173 -0.301946 -0.08656 90 -6.55567 0.7174 -0.0864754 69 -5.84876 -0.32023 -0.0864588 121 -5.84488 -0.38452 -0.0864586 115 -6.55713 0.603148 -0.086026 22 -5.83114 -0.273437 -0.0854472 89 -6.52211 0.693142 -0.0848594 90 -6.52537 0.641709 -0.0847694 93 -6.5163 0.67186 -0.0845002 105 -6.50944 0.619574 -0.0839614 134 -8.75747 -0.307317 -0.0737368 47 -8.7305 -0.333756 -0.0728984 46 -8.59914 0.945162 -0.0701319 40 -6.10311 0.226263 -0.0645691 20 -5.94188 0.937581 -0.0604422 19 -5.93689 0.917723 -0.060083 19 -5.96421 0.249849 -0.0583749 81 -5.9594 0.268424 -0.0581954 80 -5.94655 0.286618 -0.0576569 93 -5.92634 -0.39466 -0.0570262 19 -5.92434 -0.329113 -0.0567571 19 -5.91831 -0.291456 -0.0563981 43 -5.88346 -0.308122 -0.054872 48 -6.8219 0.569845 -0.0545444 24 -6.81369 0.54757 -0.054159 24 -6.8114 0.52584 -0.0540049 24 -6.76173 0.88709 -0.053544 24 -6.80301 -0.0957553 -0.052924 24 -6.80168 0.0111026 -0.0528473 24 -6.79668 -0.117047 -0.0526928 24 -6.79566 -0.0209552 -0.0526161 24 -6.79361 0.0324022 -0.0525392 24 -6.79356 -0.0422982 -0.052539 24 -6.78829 -0.138267 -0.0523846 24 -6.7874 -0.0636093 -0.0523078 24 -6.76784 -0.159199 -0.051614 24 -6.68334 0.929977 -0.0507704 23 -6.74304 -0.190503 -0.0506894 34 -7.79597 0.896514 -0.0442105 132 -6.50993 0.64574 -0.0428333 23 -6.49794 0.665132 -0.0424481 23 -6.48457 0.715239 -0.0421401 59 -6.468 0.682496 -0.0413695 46 -7.67107 0.931424 -0.0403419 40 -7.65818 0.954317 -0.0400196 40 -8.73439 -0.284958 -0.028322 50 -8.51556 0.956378 -0.0237219 80 -5.91272 -0.300466 -0.0188687 20 -5.91175 -0.319039 -0.0188686 20 -5.91207 -0.272515 -0.0187917 20 -5.9089 -0.253788 -0.0186376 20 -6.84081 0.562085 -0.0124848 79 -6.83515 0.604886 -0.0124205 77 -6.83303 0.583086 -0.0122914 98 -6.80067 0.731343 -0.0117117 40 -6.77906 0.707575 -0.0109378 40 -6.81152 -0.179694 -0.0108701 65 -6.77847 0.632283 -0.0106796 40 -6.80252 -0.136653 -0.0105478 61 -6.78807 -0.157646 -0.0100964 126 -6.73137 0.874211 -0.0100357 40 -6.72661 0.8951 -0.00997134 40 -6.78295 -0.200159 -0.00996731 42 -6.67819 0.910193 -0.00848835 66 -6.56886 0.927257 -0.00507094 40 -6.60328 0.637539 -0.00506984 41 -6.59129 0.65733 -0.0047475 40 -7.71157 0.912727 -0.00193654 40 -7.67347 0.94479 -0.00101541 40 -7.64072 0.965032 -0.000202629 40 -6.08291 0.88009 0.0106626 40 -6.00265 0.916982 0.0130483 40 -6.00294 0.888116 0.0131773 40 -5.97009 0.93134 0.0140154 40 -6.00949 -0.325701 0.014793 40 -5.99991 -0.35351 0.015051 40 -5.97164 -0.389398 0.0158893 49 -5.97056 -0.304609 0.0160825 98 -5.96486 -0.370107 0.0161471 40 -5.9675 -0.285642 0.0162114 92 -5.9484 -0.265913 0.0168561 72 -6.84522 -0.185907 0.0229419 40 -6.78487 -0.109864 0.0246216 75 -6.78367 -0.0352537 0.0246755 76 -6.78332 -0.0778748 0.0246756 74 -6.7805 -0.131117 0.02473 73 -6.77753 -0.0565367 0.0248381 75 -6.77577 -0.00331161 0.0248921 68 -6.71392 0.898442 0.0249428 40 -6.77006 -0.15223 0.0250011 60 -6.75575 0.0178456 0.025434 94 -6.64772 0.910604 0.0266769 40 -6.55973 0.919218 0.0290071 40 -5.30202 0.26588 0.0376817 56 -6.11436 0.884438 0.0410922 40 -5.16306 0.316528 0.0420663 255 -6.03756 0.911788 0.043043 40 -6.01272 0.888606 0.0438018 40 -6.06957 -0.320561 0.0438057 40 -5.99912 0.925114 0.0440184 40 -6.02261 -0.337255 0.0450521 40 -6.00156 -0.35508 0.0455941 40 -5.99184 -0.38288 0.0458109 40 -5.97914 -0.287931 0.0462984 102 -5.96603 -0.268579 0.0466777 101 -5.95286 -0.249308 0.0470569 72 -4.81717 0.190883 0.053415 41 -4.80314 0.364476 0.0535437 48 -4.81222 0.213426 0.0535439 46 -4.80027 0.349117 0.0536726 52 -4.80287 0.311405 0.0536727 51 -4.80775 0.175439 0.0537374 50 -4.79736 0.333778 0.0538016 58 -4.80201 0.258385 0.0538018 50 -4.80498 0.137581 0.0538664 48 -4.80645 0.0696415 0.0538665 50 -4.80692 0.0167885 0.0538666 40 -4.80693 -0.0134148 0.0538666 45 -4.80376 0.107355 0.0539309 60 -4.80221 0.0846913 0.0539955 42 -4.78144 0.385609 0.0541884 40 -4.78676 0.280267 0.0542531 40 -4.7914 0.122204 0.0543178 46 -4.7928 0.039401 0.0543179 44 -4.79296 0.00175651 0.054318 47 -4.79083 -0.03586 0.0543825 50 -4.78851 -0.0659228 0.054447 46 -4.78669 -0.0508467 0.0545115 48 -4.7823 0.159608 0.0545757 57 -4.78466 0.0544105 0.0545758 41 -4.73763 0.225433 0.0559296 40 -5.17228 0.382062 0.0679731 40 -6.77039 0.885105 0.0687708 30 -6.79196 -0.0237913 0.0695087 30 -6.68429 0.895538 0.0704841 41 -6.71987 -0.0443752 0.0709774 30 -6.61604 -0.00171624 0.0730985 30 -6.60363 -0.07428 0.0733435 30 -6.48741 -0.0928989 0.0757095 30 -6.36314 -0.11062 0.0782387 33 -4.76425 0.417685 0.0789198 59 -4.74545 0.468592 0.079299 64 -4.7469 0.453683 0.0792991 48 -4.73998 0.483071 0.0794074 51 -4.73505 0.429966 0.0796785 47 -4.73949 0.377877 0.0796786 64 -4.73567 0.400027 0.0797327 44 -6.28459 -0.138561 0.0798298 61 -4.73468 0.362495 0.0798412 73 -6.2044 0.862894 0.0802749 34 -4.70758 0.256261 0.0807626 40 -6.18542 0.761556 0.080928 63 -6.17978 0.79045 0.0809687 30 -6.20534 -0.243824 0.0813802 30 -6.20018 -0.155843 0.0815431 68 -6.13431 0.873083 0.0816619 30 -6.18766 -0.17493 0.0817879 86 -6.18708 -0.194369 0.081788 77 -6.12164 0.890953 0.0818658 30 -6.11144 0.918924 0.0819881 30 -6.17411 -0.22304 0.0820328 98 -4.64516 0.325792 0.082334 40 -6.15337 -0.32876 0.0823595 30 -4.64558 0.289164 0.0823883 40 -4.64938 0.172245 0.0824427 40 -4.65059 0.135724 0.0824427 40 -6.14638 -0.308992 0.0825226 30 -4.63867 0.303333 0.0825509 40 -4.64321 0.223142 0.082551 40 -4.63848 0.274052 0.0826051 40 -4.64283 0.186576 0.0826052 40 -4.64022 0.201062 0.0826594 40 -4.64225 0.0551756 0.0827138 40 -4.63736 0.106102 0.0828221 40 -4.63051 0.237046 0.0828761 40 -4.63392 0.157007 0.0828762 40 -4.63406 0.0695957 0.0829305 40 -4.63101 0.12048 0.0829847 40 -4.63181 0.0841053 0.0829847 40 -6.11383 -0.355388 0.0831346 30 -6.11067 -0.25894 0.0832975 30 -6.09939 -0.28722 0.0835016 30 -6.09472 -0.373415 0.0835018 30 -6.50505 0.989184 0.104164 40 -4.9003 0.561955 0.107445 30 -4.7955 0.527626 0.109648 30 -4.75564 0.576416 0.110341 30 -6.10289 0.906783 0.110618 40 -6.1057 0.887607 0.110618 40 -4.73557 0.559014 0.11079 33 -6.10061 0.837942 0.110807 40 -4.74128 0.469284 0.110872 30 -6.09065 0.865812 0.110901 40 -6.0933 0.817402 0.110964 40 -4.72551 0.505297 0.111117 30 -6.08593 0.796916 0.111122 40 -4.71912 0.489666 0.11128 30 -4.73959 0.214722 0.11128 30 -6.08242 0.728472 0.111311 40 -6.11433 -0.376153 0.111315 40 -4.72552 0.400474 0.111321 30 -6.07812 0.747325 0.111342 40 -4.73016 0.244129 0.111443 30 -4.73114 0.177172 0.111484 30 -6.06384 0.764864 0.111531 40 -4.72297 0.266111 0.111566 30 -6.10059 -0.336913 0.111566 40 -6.07218 0.65953 0.111594 61 -6.08915 0.478039 0.111595 62 -4.71398 0.369758 0.111606 30 -4.72291 0.228924 0.111607 30 -4.70829 0.414004 0.111647 30 -6.07725 0.525125 0.111721 58 -6.08952 -0.355536 0.111724 40 -4.7023 0.435839 0.111729 30 -4.70968 0.347131 0.111729 30 -4.71075 0.332333 0.111729 30 -4.71321 0.295325 0.111729 30 -6.05816 0.677221 0.111783 40 -6.08907 -0.288387 0.111787 40 -4.69693 0.450249 0.11181 30 -4.70282 0.383806 0.11181 30 -4.70778 0.317286 0.11181 30 -6.08414 -0.30733 0.11185 40 -4.71227 0.198805 0.111851 30 -4.71368 0.161789 0.111852 30 -6.08515 -0.240343 0.111881 40 -6.08195 -0.268937 0.111912 40 -6.05037 0.637834 0.111972 68 -4.70214 0.279871 0.111974 30 -6.0421 0.69459 0.112004 40 -6.07788 -0.220969 0.112007 40 -6.04922 0.589686 0.112067 80 -6.05367 0.542158 0.112067 85 -6.04535 0.608479 0.112098 75 -6.04706 0.570287 0.11213 79 -6.05297 0.503763 0.11213 93 -6.05474 0.456049 0.112162 48 -6.05615 0.437027 0.112162 40 -6.0704 -0.134847 0.112164 40 -6.06879 -0.115745 0.112195 40 -6.06594 -0.153832 0.112227 40 -6.05151 0.417559 0.112256 40 -6.0546 0.370019 0.112257 40 -6.06501 0.103451 0.112257 49 -6.06527 -0.0871066 0.112258 40 -6.06115 -0.182313 0.11229 40 -6.05955 0.0652507 0.112352 58 -6.04929 0.236273 0.112446 40 -6.03944 0.38808 0.112477 40 -6.04334 0.321652 0.112477 40 -6.04233 0.302554 0.112509 40 -6.04325 0.283571 0.112509 40 -6.04731 0.0840703 0.112541 90 -6.03577 0.349752 0.112571 40 -6.0459 -0.00143574 0.112573 79 -6.04256 -0.200832 0.112573 40 -4.67819 0.146057 0.112586 30 -6.03653 0.254719 0.112635 40 -6.04187 0.0175294 0.112635 84 -6.04186 -0.0204334 0.112636 81 -6.0397 -0.0488968 0.112667 74 -6.03267 0.197594 0.112729 40 -6.03403 0.150206 0.112729 40 -6.03179 0.0364072 0.112793 86 -6.02752 -0.0677879 0.112856 40 -6.02048 0.130885 0.11295 40 -6.01403 0.21582 0.113013 40 -6.01354 0.168516 0.113044 40 -6.22352 0.926804 0.14989 25 -6.15332 0.867333 0.150601 41 -6.14265 0.885552 0.150674 36 -6.14611 0.846674 0.150692 66 -6.14661 0.79763 0.150747 63 -6.1507 0.749099 0.150766 60 -6.18088 -0.338625 0.150824 25 -6.14137 0.708891 0.150893 64 -6.13122 0.776131 0.150911 97 -6.12226 0.814129 0.150948 86 -6.16325 -0.366731 0.15097 25 -6.12719 0.726817 0.151003 108 -6.11691 0.657554 0.151167 66 -6.10182 0.685084 0.151276 104 -6.126 -0.316084 0.151335 45 -6.12586 -0.229284 0.151371 68 -6.09308 0.635746 0.151404 92 -6.12031 -0.267578 0.151408 68 -6.12148 -0.180962 0.151425 69 -6.09106 0.616217 0.151441 86 -6.1185 -0.142386 0.151462 74 -6.11313 -0.247991 0.15148 99 -6.11099 -0.295993 0.151481 90 -6.08394 0.586588 0.151532 46 -6.1081 -0.0269337 0.151571 62 -6.10489 -0.199602 0.151571 105 -6.1057 -0.0748722 0.151589 69 -6.07579 0.566586 0.151623 40 -6.10143 -0.0939736 0.151626 63 -6.09283 0.298808 0.151643 37 -6.08279 0.432579 0.15166 38 -6.06957 0.546811 0.151696 39 -6.09311 -0.112961 0.151699 113 -6.09203 -0.16081 0.151699 102 -6.07009 0.518042 0.151715 38 -6.07169 0.498971 0.151715 40 -6.07937 0.326923 0.151752 39 -6.06672 0.46024 0.151788 40 -6.07015 0.412577 0.151788 39 -6.07432 0.34581 0.151788 39 -6.06325 0.479147 0.151806 40 -6.06942 0.393385 0.151806 39 -6.08198 -0.0458146 0.151808 91 -6.07767 0.173849 0.151825 64 -6.07139 0.240523 0.151862 39 -6.07587 0.0592427 0.151862 72 -6.06577 0.2785 0.151898 39 -6.07212 0.0210701 0.151899 73 -6.06642 0.144973 0.151935 43 -6.06685 0.125913 0.151935 41 -6.06722 0.106853 0.151935 41 -6.05324 0.363776 0.151971 41 -6.06402 0.0401263 0.151972 77 -6.06415 -0.00750116 0.151972 81 -6.05662 0.259059 0.151989 37 -6.05847 0.211482 0.151989 40 -6.06165 0.0782099 0.15199 70 -6.04911 0.192174 0.152081 39 -6.28365 0.875076 0.189418 40 -6.28838 -0.315654 0.189553 40 -6.17912 0.260249 0.226343 40 -6.18371 0.104885 0.226344 40 -6.1886 -0.00199089 0.226357 40 -6.1811 0.377123 0.226369 40 -6.18388 0.328564 0.226369 40 -6.18582 0.289704 0.226369 40 -6.1899 0.241182 0.226376 40 -6.19314 0.134198 0.226376 40 -6.1936 0.192614 0.226382 40 -6.19624 0.0661071 0.226383 40 -6.19657 0.0174404 0.226383 40 -6.19025 0.358131 0.226395 40 -6.19287 0.309502 0.226395 40 -6.19662 0.221926 0.226395 40 -6.20018 0.173299 0.226402 40 -6.20249 0.0369182 0.226402 40 -6.19187 0.397257 0.226407 40 -6.20601 0.0856678 0.226415 40 -6.20652 -0.0313183 0.226415 40 -6.19111 0.465599 0.22642 40 -6.20869 0.153984 0.226428 40 -6.20995 -0.0898865 0.226428 40 -6.2162 -0.0704698 0.226448 40 -6.21839 -0.0509667 0.226454 40 -6.20452 0.446958 0.226459 40 -6.20358 0.486081 0.226465 40 -6.20555 0.535279 0.226484 40 -6.2092 0.515938 0.226491 40 -6.21853 0.418472 0.226498 40 -6.23345 -0.119711 0.226506 40 -6.23504 -0.139345 0.226512 40 -6.21112 0.584898 0.226517 40 -6.2158 0.555791 0.226523 40 -6.23857 -0.159053 0.226525 40 -6.24974 -0.18886 0.226564 40 -6.22524 0.625636 0.226575 40 -6.22717 0.606076 0.226575 40 -6.25312 -0.208644 0.226577 40 -6.25443 -0.228369 0.226584 40 -6.22809 0.675339 0.2266 40 -6.23389 0.695755 0.226626 40 -6.24513 0.647367 0.226646 40 -6.28565 -0.249418 0.226687 40 -6.26002 0.748361 0.226729 40 -6.26348 0.718855 0.226729 40 -6.30638 -0.2801 0.226758 48 -6.27505 0.790096 0.226794 40 -6.27949 0.770614 0.2268 40 -6.33087 -0.351089 0.226849 67 -6.30896 0.824427 0.226916 45 -6.35841 -0.322676 0.226933 143 -6.33339 0.868004 0.227013 47 -6.39959 -0.375361 0.227075 40 -6.36187 0.851447 0.227097 111 -6.37027 0.893292 0.227142 55 -6.34635 0.261846 0.26411 18 -6.35807 0.312427 0.264238 18 -6.36147 0.282558 0.264256 19 -6.36105 0.332624 0.264275 19 -6.3714 0.172789 0.264312 19 -6.37573 0.0126331 0.264331 19 -6.37656 0.122837 0.264349 19 -6.37814 0.142923 0.264367 19 -6.37882 0.193081 0.264385 19 -6.36968 0.4235 0.264402 19 -6.38111 0.243341 0.264421 19 -6.38618 0.213418 0.264458 19 -6.38952 0.0528644 0.264459 19 -6.37896 0.404026 0.264476 19 -6.39166 0.0328105 0.264477 19 -6.39691 0.103209 0.264532 19 -6.38878 0.374461 0.264549 19 -6.3992 0.0831454 0.26455 19 -6.39192 0.354508 0.264567 19 -6.40772 -0.0173684 0.264624 19 -6.40963 -0.0375026 0.264642 19 -6.39255 0.495789 0.264659 19 -6.40404 0.476486 0.26475 19 -6.40821 0.446452 0.264769 19 -6.42314 -0.0879771 0.26477 19 -6.40491 0.517053 0.264787 19 -6.42602 -0.148585 0.264807 32 -6.40662 0.567894 0.264841 19 -6.43148 -0.0577462 0.264844 19 -6.41435 0.548299 0.264896 19 -6.44325 -0.179293 0.264972 38 -6.44665 -0.199643 0.265009 37 -6.45683 -0.108589 0.265082 19 -6.43268 0.590691 0.265098 19 -6.43278 0.611095 0.265116 19 -6.42977 0.661811 0.265134 19 -6.46445 -0.129001 0.265155 19 -6.45972 -0.321938 0.265174 19 -6.43561 0.682882 0.265207 19 -6.47198 -0.220675 0.265247 38 -6.45171 0.643671 0.265317 19 -6.49885 -0.252145 0.265504 39 -6.48169 0.739506 0.265683 19 -6.48994 0.719826 0.265738 19 -6.54309 -0.294862 0.265925 19 -6.51507 0.764201 0.266013 19 -6.51536 0.795395 0.266049 44 -6.55998 -0.274911 0.266071 19 -6.51947 0.858378 0.266159 19 -6.53465 0.81868 0.266251 91 -6.62847 -0.350544 0.266731 20 -6.68326 -0.374279 0.267244 20 -6.4477 0.25408 0.307555 50 -6.57738 -0.309949 0.309646 51 -6.59869 0.363285 0.310023 100 -6.60632 0.332463 0.310118 117 -6.61659 0.166426 0.310182 118 -6.62307 0.145747 0.310277 93 -6.62603 0.187455 0.31034 103 -6.6333 0.31283 0.310529 92 -6.64306 0.219201 0.310625 108 -6.65064 0.0208664 0.310689 102 -6.65224 0.29271 0.310814 136 -6.60684 0.845116 0.310843 102 -6.65633 0.240519 0.310846 101 -6.66149 0.125508 0.310878 108 -6.65542 0.387155 0.31094 109 -6.66601 0.0941551 0.310941 106 -6.65527 0.481613 0.311035 95 -6.67427 0.0732692 0.311068 107 -6.66883 0.429933 0.311193 104 -6.68267 -0.000151204 0.311195 109 -6.66769 0.503517 0.311256 96 -6.67414 0.409209 0.311257 106 -6.68646 0.052348 0.311258 111 -6.67471 0.461873 0.31132 111 -6.71663 -0.0213871 0.311733 113 -6.70911 0.538282 0.311952 113 -6.73245 -0.0532245 0.311986 112 -6.7313 0.561257 0.312332 110 -6.75625 -0.0747345 0.312366 115 -6.75409 -0.340249 0.312462 165 -6.73667 0.636319 0.312521 97 -6.77197 -0.0962469 0.312619 113 -6.77164 -0.117522 0.312619 109 -6.75143 0.584214 0.31268 114 -6.76255 0.617243 0.312901 116 -6.791 -0.14995 0.312936 123 -6.77048 0.66084 0.313091 104 -6.81049 -0.171863 0.313252 92 -6.86987 -0.195189 0.314201 126 -6.86192 0.691174 0.314577 127 -6.92083 -0.229478 0.315024 92 -6.90832 0.728559 0.315368 99 -6.96004 -0.252821 0.315657 125 -6.94777 0.754637 0.316033 128 -7.00517 -0.276669 0.316385 101 -7.01893 0.784409 0.317203 97 -7.11165 -0.314848 0.318093 165 -7.07413 0.846653 0.318184 70 -7.13041 0.830475 0.319038 112 -6.85275 0.856339 0.34965 40 -6.9019 -0.291329 0.349697 40 -6.95889 -0.315419 0.350911 40 -6.91691 0.842529 0.350948 40 -7.08149 0.347397 0.353503 75 -7.10541 0.192149 0.35388 80 -7.10033 0.370758 0.353921 79 -7.1145 0.326734 0.354173 122 -7.11997 0.170209 0.354173 80 -7.12275 0.215078 0.354257 83 -7.14881 0.272179 0.354843 81 -7.15392 0.294905 0.354968 77 -7.15302 0.396245 0.355051 133 -7.15962 0.250106 0.355052 81 -7.1639 0.0363455 0.355053 80 -7.16704 0.430966 0.355386 68 -7.17383 0.510638 0.355637 78 -7.19665 0.138393 0.355764 87 -7.19997 0.0140392 0.355806 83 -7.20338 0.093271 0.35589 85 -7.19212 0.477947 0.355972 81 -7.20905 0.116019 0.356015 87 -7.21163 0.0707475 0.356057 88 -7.20356 0.456015 0.356181 74 -7.21406 0.536439 0.356516 123 -7.28996 -0.00836286 0.35769 87 -7.28209 0.564758 0.35798 79 -7.33183 -0.0428099 0.358569 87 -7.31521 0.602147 0.358734 88 -7.31726 0.648649 0.358859 77 -7.35491 -0.123744 0.359072 89 -7.35965 -0.0659975 0.359155 90 -7.34515 0.627965 0.359403 87 -7.3774 -0.0892711 0.359532 88 -7.37647 -0.14721 0.359532 89 -7.35698 0.675621 0.359738 113 -7.51992 -0.173201 0.362546 91 -7.49896 0.724827 0.362793 75 -7.5873 -0.198367 0.363969 90 -7.57819 0.756808 0.364509 85 -7.65224 -0.23593 0.36535 90 -7.66923 0.790562 0.366476 85 -7.73141 -0.262414 0.367025 78 -7.76081 0.837308 0.368484 96 -7.93039 -0.29344 0.37121 40 -7.31236 -0.313749 0.394744 54 -7.30253 0.825861 0.395517 40 -7.34926 -0.292334 0.395678 63 -7.46144 0.807684 0.399566 40 -7.76429 0.814745 0.407403 40 -7.89752 -0.291231 0.4099 43 -7.90653 0.192949 0.410053 75 -7.95247 0.318953 0.41135 62 -7.97906 0.169402 0.411922 72 -7.95982 0.809339 0.412437 40 -8.00537 0.346094 0.412751 78 -8.0084 0.409242 0.412907 77 -8.02478 0.0315462 0.413064 60 -8.04153 0.145253 0.413531 68 -8.05394 0.12013 0.413842 53 -8.06441 0.0822442 0.414102 50 -8.05808 0.487789 0.414308 66 -8.07778 0.285456 0.414568 110 -8.09262 0.0570156 0.414829 58 -8.08494 0.438372 0.414931 51 -8.10682 -0.00660113 0.415192 40 -8.14269 0.788598 0.417109 40 -8.18335 0.469174 0.417526 79 -8.18701 0.624354 0.417888 40 -8.22132 0.238361 0.418253 114 -8.25451 0.265171 0.419136 80 +unknow 0.955169 1 0 229 -11.3486 24.3732 -1.6144 130 -11.4081 24.3013 -1.61169 136 -11.5045 24.2095 -1.60884 134 -12.6496 26.0771 -1.59374 144 -12.7522 25.976 -1.59088 147 -12.8178 25.9036 -1.58864 148 -12.8902 25.8453 -1.5874 149 -12.9912 25.7433 -1.58454 141 -13.054 25.6667 -1.58206 140 -13.1182 25.5936 -1.57982 142 -13.183 25.5221 -1.57771 140 -13.2828 25.4208 -1.57497 138 -13.3431 25.3418 -1.57236 151 -13.4077 25.2715 -1.57037 144 -13.5116 25.1799 -1.56838 142 -13.5622 25.0846 -1.56465 131 -13.6123 24.9893 -1.56092 122 -13.7203 24.9074 -1.55968 154 -13.7772 24.8257 -1.55695 113 -13.8347 24.7457 -1.55434 141 -13.886 24.6551 -1.55098 127 -13.9951 24.5773 -1.55011 89 -14.0504 24.4951 -1.54737 88 -14.0964 24.3972 -1.54352 100 -11.7685 24.4522 -1.47876 140 -11.6796 24.4638 -1.47702 177 -11.5599 24.5096 -1.4764 119 -11.259 24.568 -1.4718 102 -13.725 26.514 -1.4703 176 -11.4373 24.4481 -1.46968 126 -13.6215 26.5179 -1.46783 178 -11.3428 24.4458 -1.46707 133 -14.4 26.0874 -1.46704 148 -13.5109 26.5072 -1.46445 167 -14.252 26.1094 -1.46412 180 -13.3597 26.5189 -1.46119 176 -14.1289 26.0786 -1.45928 147 -14.0298 26.0912 -1.45726 137 -14.2002 24.5305 -1.38519 126 -13.8962 24.626 -1.38137 141 -14.0892 24.5161 -1.38137 133 -13.9843 24.5118 -1.37822 141 -12.3276 25.0587 -1.36169 124 -12.3538 24.9143 -1.35506 148 -12.0012 24.6892 -1.33494 177 -11.8271 24.5273 -1.32246 194 -11.7397 24.5427 -1.32111 147 -11.4598 24.6504 -1.31987 138 -11.6051 24.5581 -1.31863 154 -11.5066 24.5492 -1.31582 174 -14.0815 24.4566 -1.21944 193 -13.9868 24.4695 -1.21762 186 -13.7386 24.4792 -1.21185 125 -13.6334 24.4716 -1.20892 120 -13.4843 24.4743 -1.20537 144 -13.3872 24.4798 -1.20325 122 -13.2846 24.4743 -1.20052 152 -13.1944 24.4913 -1.1991 118 -13.0395 24.4791 -1.19485 127 -12.9299 24.4581 -1.19131 104 -12.8326 24.4597 -1.18908 87 -12.6933 24.4737 -1.18645 95 -12.599 24.4797 -1.18453 136 -12.4931 24.4622 -1.18129 128 -12.3669 24.4994 -1.18007 123 -11.994 24.6197 -1.17714 117 -12.2559 24.4703 -1.17623 121 -12.1745 24.4997 -1.17572 121 -12.0578 24.4572 -1.17117 107 -11.7537 24.5162 -1.16712 178 -11.8289 24.4755 -1.16692 114 -11.6031 24.4973 -1.16297 134 -11.5125 24.5046 -1.16135 124 -11.4195 24.5063 -1.15943 190 -11.22 24.5807 -1.15862 97 -11.2714 24.489 -1.15548 111 -11.0877 24.4938 -1.15184 104 -14.1531 24.4961 -1.06148 163 -14.0462 24.4885 -1.05879 171 -13.9178 24.5319 -1.05762 145 -13.7838 24.4746 -1.05241 251 -13.7 24.5055 -1.05178 255 -13.5621 24.5296 -1.04972 255 -13.4551 24.5178 -1.04693 255 -13.3483 24.5056 -1.04415 255 -13.2456 24.5 -1.04173 255 -13.1083 24.5217 -1.03966 255 -13.0049 24.5133 -1.03715 255 -12.897 24.4957 -1.03418 255 -12.7611 24.5173 -1.03221 255 -12.6638 24.5182 -1.03023 255 -12.563 24.5117 -1.0279 255 -12.422 24.5207 -1.02539 255 -12.3207 24.5114 -1.02296 255 -12.2257 24.5143 -1.02117 255 -12.1283 24.5114 -1.0191 255 -11.9345 24.6041 -1.01901 145 -11.8493 24.6253 -1.0182 155 -11.9871 24.5162 -1.0165 254 -11.6584 24.5239 -1.01039 158 -11.5599 24.5153 -1.00815 167 -11.4616 24.5062 -1.0059 167 -13.9505 24.4475 -0.875964 144 -13.848 24.446 -0.87396 232 -13.6995 24.4517 -0.87134 167 -13.5935 24.4422 -0.869029 189 -13.4935 24.4427 -0.867179 209 -13.3553 24.4639 -0.86533 201 -13.2451 24.4442 -0.862633 218 -13.1503 24.4523 -0.861168 212 -13.049 24.4476 -0.859165 231 -12.9169 24.477 -0.857778 207 -12.8158 24.4714 -0.855774 215 -12.715 24.4654 -0.853771 228 -12.574 24.4753 -0.851613 235 -12.4762 24.4737 -0.84984 233 -12.3786 24.4717 -0.848068 241 -12.2426 24.4886 -0.846295 237 -12.1434 24.4822 -0.844369 237 -12.048 24.4826 -0.842751 237 -11.9037 24.4797 -0.840207 233 -11.8077 24.4774 -0.838512 232 -11.7057 24.462 -0.836277 255 -11.6049 24.4481 -0.83412 240 -11.4743 24.4699 -0.832732 237 -11.3805 24.4696 -0.831191 239 -11.2894 24.4744 -0.829881 244 -11.1682 24.5146 -0.829341 250 -11.0812 24.5277 -0.828416 238 -11.0009 24.5551 -0.828108 202 -14.2419 24.463 -0.70433 206 -14.0925 24.4709 -0.702137 229 -13.9897 24.47 -0.70046 236 -13.889 24.4721 -0.698913 237 -13.7461 24.4885 -0.697107 233 -13.6418 24.4827 -0.695301 238 -13.5416 24.4835 -0.693753 234 -13.3991 24.498 -0.691947 235 -13.2953 24.4908 -0.690142 234 -13.1984 24.4955 -0.688787 236 -13.0508 24.4974 -0.686594 236 -12.9541 24.5012 -0.68524 237 -12.8557 24.5011 -0.683757 242 -12.7454 24.4776 -0.681435 235 -12.6143 24.5072 -0.680338 246 -12.519 24.5111 -0.679049 240 -12.4166 24.5004 -0.677243 244 -12.2786 24.514 -0.67563 240 -12.1828 24.5149 -0.674276 241 -12.0818 24.5046 -0.672535 238 -11.946 24.52 -0.671051 239 -11.8506 24.5196 -0.669697 240 -11.7476 24.5027 -0.667762 243 -11.6611 24.5196 -0.667052 241 -11.5266 24.5345 -0.665633 243 -11.4267 24.5217 -0.663892 244 -11.3429 24.543 -0.663376 110 -14.1455 24.4901 -0.558217 210 -14.0387 24.4824 -0.556591 182 -13.9301 24.4707 -0.554856 201 -13.7892 24.4908 -0.553447 217 -13.6888 24.4921 -0.552146 217 -13.5837 24.4842 -0.550574 230 -13.4452 24.5059 -0.549273 228 -13.3471 24.5094 -0.548081 231 -13.2454 24.5054 -0.546671 233 -13.1006 24.5129 -0.544991 239 -13.0029 24.515 -0.543798 240 -12.8943 24.4956 -0.541955 241 -12.8006 24.5041 -0.54098 245 -12.6594 24.5143 -0.539462 242 -12.5595 24.5095 -0.538107 249 -12.4608 24.506 -0.536806 250 -12.3263 24.5269 -0.535667 244 -12.2243 24.5154 -0.53415 248 -12.1304 24.5197 -0.53312 255 -11.9902 24.5262 -0.531602 255 -11.8895 24.5152 -0.530138 255 -11.796 24.5182 -0.529108 255 -11.6564 24.5229 -0.52759 255 -11.5648 24.5286 -0.526669 255 -11.4674 24.5214 -0.525368 255 -11.3786 24.5319 -0.524609 249 -11.2479 24.5525 -0.523633 232 -11.1624 24.5695 -0.523091 174 -11.077 24.5862 -0.522549 150 -13.751 26.0597 -0.393232 102 -13.6095 26.0888 -0.392415 157 -13.6514 25.6758 -0.385356 113 -13.7976 24.6301 -0.368053 255 -13.6316 24.5144 -0.364339 188 -13.4812 24.5153 -0.36287 231 -13.3907 24.533 -0.362299 255 -12.1465 24.9856 -0.358871 97 -12.4859 24.7864 -0.3583 96 -12.6647 24.6573 -0.357606 96 -12.5735 24.6703 -0.356994 96 -12.3793 24.7683 -0.356994 96 -12.0954 24.6835 -0.352872 96 -11.8835 24.6419 -0.350219 128 -11.7534 24.6688 -0.349566 243 -11.6682 24.6893 -0.349199 255 -11.5736 24.6897 -0.348383 255 -11.4824 24.6969 -0.34773 255 -13.5116 26.0132 -0.253847 87 -13.3978 25.9933 -0.252744 121 -12.5803 25.9904 -0.24695 86 -13.4973 24.6429 -0.2347 224 -12.4686 24.855 -0.230133 83 -12.5178 24.7586 -0.229125 83 -11.7308 24.7255 -0.223204 82 -11.5305 24.7027 -0.221535 82 -11.3245 24.767 -0.221094 255 -11.3897 24.704 -0.220622 82 -11.2203 24.7441 -0.220086 131 -13.1925 24.735 -0.0485089 201 -13.0941 24.7374 -0.0481075 255 -12.7598 24.7609 -0.0468847 117 -12.6683 24.7741 -0.0466109 106 -12.5261 24.7836 -0.0460997 106 -12.4347 24.796 -0.045826 106 -12.3505 24.8224 -0.0456982 106 -12.134 24.8755 -0.04526 106 -12.1874 24.7871 -0.044749 105 -11.9913 24.7804 -0.0439095 255 -11.8579 24.8024 -0.0435625 234 -11.7696 24.8178 -0.0433435 231 -11.672 24.8131 -0.0429237 226 -11.5431 24.8424 -0.042668 218 +unknow 0.967764 1 0 406 -11.6679 -1.36349 -1.29362 112 -11.6465 -1.32385 -1.29031 101 -11.6637 -1.12204 -1.2898 96 -11.6507 -1.25022 -1.2898 120 -11.6483 -1.15747 -1.28827 120 -11.6349 -1.28548 -1.28827 123 -11.6367 -1.19324 -1.28725 126 -12.0663 -1.53099 -1.28575 201 -12.0666 -1.39644 -1.28379 168 -12.0543 -1.43342 -1.28281 191 -12.0512 -1.35634 -1.28134 61 -12.0356 -1.48877 -1.28134 193 -12.0221 -1.56386 -1.28085 89 -12.0171 -1.60162 -1.28085 90 -12.0516 -1.29891 -1.2806 81 -12.0555 -1.22277 -1.28012 95 -12.0608 -1.12769 -1.27963 97 -12.0457 -1.26004 -1.27938 99 -12.0493 -1.16483 -1.27865 94 -12.0485 -1.0884 -1.27767 63 -12.482 -1.38378 -1.26003 128 -12.4731 -1.46217 -1.26003 255 -12.4512 -1.63836 -1.26003 119 -12.4717 -1.4223 -1.25933 250 -12.4503 -1.51898 -1.25816 249 -12.4455 -1.55808 -1.25816 138 -12.4326 -1.59615 -1.25723 134 -12.4765 -1.18505 -1.257 134 -12.4509 -1.32088 -1.2556 107 -12.457 -1.24242 -1.25536 131 -12.4392 -1.2801 -1.25373 127 -13.167 -1.53286 -1.24546 135 -13.1577 -1.59466 -1.24524 173 -13.1467 -1.63526 -1.24458 127 -13.1915 -1.20061 -1.24436 166 -13.1892 -1.15865 -1.24371 116 -13.7261 -1.60668 -1.22831 117 -13.7562 -1.23888 -1.22749 157 -12.8438 -1.455 -1.20911 119 -12.6769 -1.19495 -1.18788 103 -13.1958 -1.25008 -1.16935 72 -12.3482 -1.3606 -1.15372 111 -12.3466 -1.22322 -1.15197 156 -12.3407 -1.2618 -1.15175 108 -12.3229 -1.29913 -1.15021 153 -12.41 -1.21343 -1.08734 115 -12.2868 -1.37679 -1.07634 82 -12.2873 -1.29871 -1.07551 106 -12.2893 -1.24039 -1.07509 89 -12.2792 -1.33687 -1.07509 99 -12.2711 -1.38304 -1.00803 107 -12.2597 -1.32331 -1.00626 108 -12.2539 -1.28378 -1.00527 104 -12.1608 -1.23562 -0.995626 80 -11.9624 -1.15898 -0.975344 98 -11.8749 -1.11304 -0.966286 109 -11.8485 -1.0731 -0.963333 117 -11.8142 -1.03266 -0.959592 113 -12.2163 -1.40145 -0.934472 102 -12.1949 -1.36014 -0.932056 146 -12.0269 -1.28368 -0.915699 72 -11.8963 -1.23165 -0.90306 68 -11.7696 -1.03668 -0.75215 119 -11.7723 -0.98104 -0.751988 153 -12.2849 -1.39406 -0.697436 96 -11.7356 -0.942187 -0.654016 64 -11.6868 -0.901439 -0.650202 64 -11.8684 -1.02123 -0.597429 40 -11.7324 -0.972101 -0.587945 131 -12.1233 -1.36373 -0.548529 88 -11.9688 -1.2516 -0.538214 196 -11.943 -1.30586 -0.536971 100 -11.9032 -1.20709 -0.533864 66 -11.8354 -1.16282 -0.52939 98 -11.8209 -1.10522 -0.528147 134 -11.8124 -1.06703 -0.527402 118 -11.7838 -1.02721 -0.525414 124 -11.7526 -0.89449 -0.522804 255 -11.7189 -0.966082 -0.521064 89 -11.696 -0.927268 -0.519448 215 -12.4048 -1.41532 -0.492212 67 -12.1713 -1.2141 -0.477937 255 -12.1387 -1.11455 -0.475576 129 -12.0919 -1.24441 -0.473665 244 -12.0677 -1.16527 -0.471866 255 -12.0262 -1.33306 -0.470517 52 -12.0046 -1.29243 -0.469055 40 -11.8391 -1.01141 -0.458265 87 -11.8323 -0.973372 -0.457703 203 -11.8148 -0.915861 -0.456467 73 -12.0179 -1.27646 -0.401929 189 -12.0078 -1.33265 -0.401726 103 -11.9563 -1.23209 -0.39859 167 -11.9362 -1.19219 -0.397376 90 -11.89 -1.13112 -0.394746 129 -11.8557 -1.09037 -0.392824 135 -11.8332 -1.05087 -0.391509 112 -11.7807 -1.00905 -0.388676 93 -11.7794 -0.953047 -0.388373 228 -11.7743 -0.915437 -0.387968 209 -11.7672 -0.877721 -0.387462 178 -12.0685 -1.27015 -0.335401 192 -12.0506 -1.22995 -0.334413 149 -12.0504 -1.19169 -0.334234 109 -12.0247 -1.32278 -0.333695 82 -11.9644 -1.12608 -0.330105 218 -11.958 -1.08756 -0.329656 192 -11.8718 -1.04193 -0.325617 81 -11.8272 -1.00048 -0.323463 158 -11.8139 -0.943269 -0.322655 147 -12.1083 -1.33458 -0.260252 72 -12.025 -1.26826 -0.256785 46 -12.0091 -1.22849 -0.256015 120 -11.9651 -1.18613 -0.254166 92 -11.9149 -1.12459 -0.252009 144 -11.9004 -1.08556 -0.251316 78 -11.8341 -1.04219 -0.248619 144 -11.8134 -1.00302 -0.247695 101 -11.812 -0.946882 -0.247464 123 -11.803 -0.908871 -0.247002 127 -11.7978 -0.815346 -0.24654 103 -11.7918 -0.870789 -0.246463 115 -12.1238 -1.31656 -0.184442 52 -12.1199 -1.25836 -0.18412 120 -12.0542 -1.21312 -0.181864 85 -12.0261 -1.17208 -0.180832 114 -11.9897 -1.11142 -0.179478 98 -11.9693 -1.07156 -0.178705 98 -11.9308 -1.03025 -0.177351 98 -11.92 -0.991578 -0.1769 107 -11.9046 -0.933786 -0.176255 107 -11.8956 -0.895458 -0.175869 111 -12.2948 -1.32231 -0.126618 40 -12.1477 -1.26823 -0.1225 116 -12.0979 -1.22473 -0.121037 102 -12.0777 -1.16527 -0.120333 109 -12.0455 -1.12406 -0.119358 110 -12.021 -1.08376 -0.118599 111 -12.0311 0.127686 -0.117577 40 -11.9786 -1.0421 -0.117353 106 -11.9744 -0.947067 -0.117029 118 -11.9714 -0.984685 -0.117028 114 -11.9434 -0.906946 -0.116108 98 -11.9336 -0.849688 -0.115728 103 -11.9263 -0.811536 -0.115458 93 -12.7559 -1.55812 -0.0540851 44 -12.7232 -1.59464 -0.0535138 55 -12.7214 -1.49301 -0.0532288 44 -12.6863 -1.44842 -0.0524132 44 -12.5776 -1.39575 -0.0500884 80 -12.3693 -1.31322 -0.0456832 82 -12.3057 -1.26725 -0.0442966 133 -12.248 -1.2223 -0.0430323 117 -12.2299 -1.18165 -0.0425838 119 -12.2154 -1.12213 -0.0421762 120 -12.2284 0.109234 -0.0414084 42 -12.1751 -1.07977 -0.041279 120 -12.2091 0.205007 -0.0410418 42 -12.21 0.147469 -0.0410415 42 -12.1625 -1.04012 -0.0409529 120 -12.1807 0.0706407 -0.0404291 42 -12.1788 0.032375 -0.040388 42 -12.1393 -0.980483 -0.0403821 124 -12.1404 -0.942184 -0.0403415 123 -12.1273 -0.902815 -0.0400154 126 -12.1234 -0.845083 -0.0398525 73 -12.7028 -1.59878 0.00622246 40 -12.6983 -1.53749 0.00641098 40 -12.6812 -1.49506 0.00675697 40 -12.6739 -1.45386 0.00694555 40 -12.6488 -1.39069 0.00744885 40 -12.4662 -1.33137 0.0104072 40 -12.331 -1.27806 0.0126102 112 -12.3091 -1.23678 0.0130192 87 -12.2547 -1.1343 0.0140258 87 -12.2491 -1.1726 0.0140575 132 -12.2363 -1.09388 0.0143718 90 -12.1855 -1.0316 0.0152528 130 -12.1827 -0.992841 0.015347 82 -12.1638 -0.952894 0.015693 91 -12.165 -0.856919 0.0157869 77 -12.1423 -0.893708 0.0161019 134 -12.1437 -0.81714 0.0161643 87 -12.1302 -0.777993 0.0164159 60 -12.7519 -1.6156 0.0900772 49 -12.7212 -1.57105 0.0904051 48 -12.6927 -1.50677 0.090733 158 -12.6886 -1.36494 0.0909144 48 -12.5756 -1.27265 0.0920261 48 -12.5477 -1.30961 0.0922451 63 -12.5119 -1.22636 0.0926458 128 -12.5096 -1.16663 0.0927184 80 -12.4753 -1.12384 0.0930645 67 -12.4748 -1.08429 0.0931007 78 -12.4539 -1.02331 0.0933374 92 -12.4511 -0.983691 0.0933919 115 -12.4322 -0.94286 0.0935922 116 -12.4245 -0.883386 0.0937013 99 -12.3893 -0.841697 0.0940474 122 -13.7798 -1.24793 0.16891 50 -12.7236 -1.53821 0.171705 46 -12.7088 -1.57696 0.171732 46 -12.6784 -1.35132 0.171884 46 -12.6349 -1.2866 0.172021 46 -12.615 -1.24459 0.172086 46 -12.6489 -1.18719 0.247411 40 -12.677 -1.23007 0.247514 40 -12.7188 -1.27458 0.247663 40 -12.7186 -1.33513 0.247683 40 -13.3273 -0.851933 0.249509 40 -13.5456 -0.973205 0.250239 40 -13.5545 -1.01668 0.250278 40 -13.5425 -1.16565 0.250279 40 -13.5532 -1.05941 0.250285 40 -13.548 -1.12327 0.250285 40 -13.5745 -0.93248 0.250323 40 -12.7417 -1.19305 0.323147 42 -12.7797 -1.2573 0.323551 42 -12.7976 -1.29963 0.323752 42 -12.887 -1.34942 0.324613 43 -13.4709 -0.876594 0.329574 45 -13.4881 -0.920236 0.329758 45 -13.5921 -1.03442 0.330784 85 -13.6154 -0.842774 0.330874 45 -13.9238 -1.10303 0.333861 46 -14.8273 -0.845358 0.341955 49 -12.7788 -1.05016 0.408334 35 -12.7834 -1.091 0.408461 35 -12.8018 -1.13314 0.408809 35 -12.8542 -1.23973 0.409791 35 -12.8621 -1.32214 0.410044 35 -12.8858 -1.18156 0.410202 35 -12.8901 -1.28415 0.410424 35 -13.4421 -0.893682 0.418616 36 -13.4469 -0.851581 0.418648 36 -13.4796 -0.96008 0.419281 37 -13.4965 -1.00395 0.419598 60 -14.8107 -0.823844 0.440162 105 -14.8466 -0.896107 0.440796 40 -12.9595 -1.26059 0.477653 43 -13.0728 -1.33359 0.480165 44 -13.4489 -0.924367 0.487278 45 -13.4796 -0.883893 0.487863 45 -14.8264 -0.806005 0.515906 50 -14.8238 -0.852577 0.515906 50 -14.8403 -0.689893 0.516072 50 -14.8388 -0.759913 0.516115 50 -12.8568 -0.855027 0.539246 52 -12.8596 -0.956738 0.539506 52 -12.866 -0.896272 0.539558 52 -12.8964 -1.0003 0.540545 52 -12.9061 -1.10313 0.541013 52 -12.9132 -1.04247 0.541064 52 -12.9344 -1.14656 0.541843 52 -12.9907 -1.29579 0.543661 52 -12.9986 -1.23475 0.543712 52 -13.0064 -1.19428 0.543816 52 -13.1874 -1.35767 0.548904 53 -14.6668 -0.332545 0.585593 59 -14.7861 -0.77744 0.589125 80 -14.8005 -0.7316 0.589436 79 -14.8096 -0.825381 0.5898 60 -14.8505 -0.243687 0.590315 60 -14.8368 -0.873715 0.590579 60 -14.8637 -0.290638 0.590679 60 -12.9141 -0.334616 0.619941 40 -12.9263 -0.558519 0.620585 41 -12.9275 -0.619612 0.620714 41 -12.9415 -0.274259 0.620777 41 -12.934 -0.518137 0.620778 41 -12.9449 -0.376053 0.62097 41 -12.9521 -0.0913237 0.621033 41 -12.9457 -0.416777 0.621035 41 -12.9544 -0.00993852 0.621097 41 -12.9563 -0.0506371 0.621161 41 -12.9563 -0.233824 0.621227 41 -12.9629 -0.193197 0.621419 41 -12.9655 -0.15249 0.621484 41 -12.9635 -0.478474 0.621678 41 -12.9595 -0.661885 0.621808 41 -12.9593 -0.7027 0.621872 41 -12.9803 0.0512645 0.621933 41 -12.961 -0.743628 0.622001 41 -12.9714 -0.805539 0.622452 41 -13.014 0.0923526 0.623026 41 -12.9867 -0.847418 0.623031 41 -12.9817 -0.949533 0.623096 41 -13.0197 0.133308 0.623218 41 -12.994 -0.888879 0.623353 41 -13.0372 0.17449 0.623797 41 -13.0023 -1.09483 0.624126 69 -13.0125 -0.992827 0.624189 41 -13.0392 -1.03602 0.625154 41 -13.031 -1.17968 0.625284 92 -13.1027 0.381419 0.626047 105 -13.1173 0.278778 0.626433 41 -13.083 -1.22572 0.627085 116 -13.1029 -1.28986 0.627922 189 -13.1663 0.321304 0.628041 41 -13.1923 -1.34033 0.630945 42 -13.0333 -0.358828 0.708614 90 -13.0366 -0.502437 0.708925 108 -13.0461 -0.40023 0.709156 91 -13.0441 -0.461706 0.709157 95 -13.0513 -0.277301 0.709233 98 -13.0545 -0.215836 0.70931 93 -13.0584 -0.318516 0.709543 93 -13.0463 -0.646573 0.709544 105 -13.0529 -0.544179 0.709621 104 -13.0671 -0.175007 0.709774 92 -13.0696 -0.133979 0.709851 98 -13.0541 -0.688102 0.709932 103 -13.0781 -0.0724491 0.71016 96 -13.0642 -0.606356 0.710163 103 -13.0619 -0.729687 0.710319 98 -13.0583 -0.791228 0.710319 100 -13.0962 -0.0314443 0.710856 98 -13.1042 0.00969257 0.711166 100 -13.0877 -0.834349 0.711557 103 -13.087 -0.875596 0.711635 97 -13.124 0.0715132 0.711939 95 -13.0907 -0.937843 0.711945 100 -13.1257 0.112757 0.712016 95 -13.1016 -0.980039 0.712487 100 -13.1413 0.154149 0.712635 98 -13.1124 -1.02231 0.713028 100 -13.1114 -1.08443 0.713184 98 -13.1627 0.195713 0.713486 98 -13.1797 0.258058 0.714182 107 -13.1418 -1.12858 0.714499 94 -13.2028 0.299957 0.71511 92 -13.1561 -1.17149 0.715196 88 -13.2177 0.341815 0.715729 81 -13.1782 -1.21525 0.716202 78 -13.2718 -1.28718 0.720071 66 -13.2677 -1.32887 0.720071 40 -13.0631 -0.412168 0.770402 153 -13.0688 -0.268547 0.770487 155 -13.0674 -0.330131 0.770488 157 -13.0703 -0.371285 0.770661 155 -13.0674 -0.51505 0.770749 152 -13.0657 -0.556104 0.770749 151 -13.0719 -0.597495 0.771096 149 -13.0797 -0.453793 0.771182 156 -13.0882 -0.186651 0.771267 155 -13.0896 -0.227799 0.771354 159 -13.0949 -0.125018 0.771527 158 -13.0789 -0.659571 0.77153 152 -13.0828 -0.700965 0.77179 167 -13.0845 -0.742282 0.771964 162 -13.1172 -0.0839752 0.77248 160 -13.1194 -0.0427708 0.772566 165 -13.0988 -0.804996 0.772744 162 -13.1295 0.0190902 0.772999 159 -13.1314 0.0603513 0.773086 161 -13.1082 -0.846896 0.773264 146 -13.1154 -0.888726 0.773698 166 -13.1491 0.101777 0.773865 164 -13.1205 -0.930475 0.774045 162 -13.1647 0.143294 0.774559 162 -13.1359 -0.993764 0.774912 160 -13.1407 -1.03564 0.775259 160 -13.1918 0.205817 0.775772 161 -13.1593 -1.07867 0.776213 156 -13.2091 0.247636 0.776551 161 -13.1799 -1.14286 0.77734 155 -13.2362 0.289797 0.777764 157 -13.2407 0.352339 0.778024 132 -13.1922 -1.18566 0.778033 155 -13.2143 -1.22945 0.77916 155 -13.3138 -1.28071 0.783668 78 -13.2023 -0.484215 0.863567 112 -13.2168 -0.339297 0.864065 115 -13.2157 -0.380814 0.864066 117 -13.2107 -0.526103 0.864066 116 -13.2204 -0.422535 0.864365 115 -13.217 -0.567963 0.864466 115 -13.2278 -0.298014 0.864564 117 -13.2161 -0.630338 0.864566 111 -13.2377 -0.194248 0.864963 122 -13.2391 -0.235878 0.865063 120 -13.2423 -0.152716 0.865163 124 -13.2359 -0.714702 0.865765 116 -13.24 -0.673225 0.865865 113 -13.2608 -0.09047 0.866061 124 -13.2403 -0.777553 0.866165 114 -13.267 -0.0488427 0.866361 120 -13.2392 -0.860994 0.866366 108 -13.2577 -0.820415 0.867164 107 -13.2891 -0.00721714 0.867459 125 -13.299 0.0554307 0.867958 119 -13.3007 0.0972186 0.868058 116 -13.2678 -0.967632 0.868164 121 -13.2742 -0.905239 0.868263 126 -13.3223 0.139191 0.869156 122 -13.2906 -1.01133 0.869463 120 -13.3458 0.18132 0.870354 122 -13.3153 -1.05534 0.870861 114 -13.3201 -1.11893 0.871361 113 -13.3688 0.244603 0.871552 119 -13.3384 -1.16273 0.87246 113 -13.3959 0.287143 0.87295 124 -13.3546 -1.20646 0.873459 102 -13.4329 0.330089 0.874848 76 -13.4222 -1.31908 0.877355 36 -13.4481 -1.27902 0.878453 36 +unknow 0.967902 1 0 254 -19.9081 24.7284 -1.39804 155 -19.963 24.6378 -1.39622 124 -18.9637 25.3801 -1.3948 109 -20.0309 24.4847 -1.39237 160 -19.0121 25.2789 -1.39217 134 -20.0887 24.3985 -1.39085 126 -20.1283 24.2906 -1.38792 154 -20.2042 24.1495 -1.38488 124 -20.2311 24.0278 -1.38103 158 -20.2846 23.9382 -1.37931 123 -20.3349 23.7694 -1.37446 155 -19.1846 23.9823 -1.34562 119 -19.0484 23.9658 -1.34066 180 -18.8362 24.0847 -1.33874 108 -18.8933 24.0019 -1.33722 111 -21.7401 25.1632 -1.2845 158 -21.601 25.1617 -1.28037 191 -21.4447 25.2191 -1.27776 144 -21.6717 23.9974 -1.24319 255 -21.7133 23.8923 -1.24095 161 -19.1375 25.3559 -1.2177 165 -19.2119 25.2067 -1.21438 153 -19.0061 25.3472 -1.21384 164 -18.8798 25.3444 -1.21034 150 -18.7364 25.4009 -1.20854 153 -19.2696 24.0075 -1.17352 232 -19.1251 24.0589 -1.17128 236 -19.0011 24.0578 -1.16778 217 -18.7721 24.0775 -1.16212 143 -21.7872 23.8654 -1.03662 122 -21.6062 23.8922 -1.03269 251 -21.4656 23.887 -1.02892 194 -21.1715 23.9351 -1.02275 177 -21.0474 23.9459 -1.0199 169 -20.9038 23.9335 -1.01589 139 -19.8491 24.6923 -1.0122 188 -20.7242 23.9546 -1.01196 149 -20.5967 23.959 -1.00888 162 -20.4513 23.9414 -1.00472 184 -20.2467 23.9292 -0.99925 181 -20.1072 23.9161 -0.995398 177 -19.9795 23.9162 -0.992239 182 -18.2321 25.1725 -0.989086 132 -19.8431 23.905 -0.98854 182 -18.2629 25.0489 -0.985926 118 -19.6769 23.9334 -0.985304 180 -18.3464 24.9158 -0.983691 118 -19.5347 23.913 -0.98122 181 -19.4167 23.9214 -0.9786 176 -18.3307 24.7311 -0.977603 128 -19.1385 23.9607 -0.973053 182 -19.0383 23.9894 -0.971512 222 -18.2018 24.3961 -0.96427 134 -18.7289 23.9837 -0.96396 135 -18.6033 23.9776 -0.960801 140 -18.3163 23.9942 -0.95456 153 -18.2336 24.0421 -0.954098 166 -21.9041 24.0184 -0.839815 59 -21.5273 24.057 -0.832593 86 -21.501 23.8765 -0.827691 100 -21.1947 23.9116 -0.821952 175 -21.06 23.9106 -0.81905 94 -20.9149 23.897 -0.815633 116 -20.7379 23.9213 -0.812473 118 -20.6156 23.9318 -0.810151 120 -20.4688 23.913 -0.806605 127 -20.2898 23.9315 -0.803316 122 -18.311 25.3962 -0.801195 180 -20.1591 23.9294 -0.800543 124 -20.0248 23.9222 -0.797577 123 -18.2732 25.1769 -0.794746 95 -19.8932 23.9174 -0.79474 125 -19.7167 23.9338 -0.791515 123 -19.5945 23.9384 -0.789129 124 -18.2294 24.9516 -0.788038 132 -19.2205 24.1708 -0.78739 158 -19.4649 23.9332 -0.786357 126 -19.2363 24.0355 -0.784294 138 -19.303 23.964 -0.783842 128 -18.26 24.748 -0.78333 107 -18.2422 24.5622 -0.77817 137 -18.9108 24.0132 -0.7772 107 -18.2271 24.3816 -0.773203 94 -18.7489 23.9623 -0.772686 118 -18.6318 23.9675 -0.770493 130 -18.2545 24.023 -0.764496 162 -21.824 23.8801 -0.668508 69 -21.6924 23.8863 -0.666232 69 -21.533 23.8608 -0.662818 144 -21.4139 23.8791 -0.661029 127 -21.2269 23.896 -0.657994 117 -21.0777 23.8786 -0.654959 154 -20.9525 23.8875 -0.6529 125 -20.7663 23.9014 -0.649865 172 -20.6272 23.8924 -0.647209 125 -20.513 23.9115 -0.645584 131 -20.307 23.8981 -0.641681 115 -18.2331 25.4812 -0.64093 67 -20.1622 23.8792 -0.638755 176 -20.0358 23.8812 -0.636587 112 -18.25 25.2523 -0.63616 81 -19.9005 23.8718 -0.63404 119 -19.742 23.9097 -0.632089 135 -19.625 23.9206 -0.6303 137 -19.4879 23.9061 -0.627645 138 -19.3161 23.9246 -0.625097 138 -19.1896 23.9211 -0.622875 138 -18.2107 24.6223 -0.62174 255 -19.0708 23.9266 -0.620978 131 -18.9108 23.9565 -0.618919 136 -18.1998 24.4462 -0.617729 255 -18.78 23.9449 -0.61648 129 -18.6507 23.9344 -0.614095 135 -18.1292 24.192 -0.611061 255 -18.2128 24.0664 -0.609706 117 -18.2678 23.982 -0.608784 145 -21.6372 23.9179 -0.450102 143 -21.4803 23.8951 -0.447613 204 -21.3062 23.9275 -0.445736 151 -21.1699 23.9254 -0.44386 160 -21.0286 23.9168 -0.44182 200 -20.8578 23.9493 -0.440025 158 -20.7301 23.9543 -0.438393 189 -20.6012 23.9572 -0.43672 155 -20.4128 23.9658 -0.434354 161 -18.2664 25.4649 -0.431464 203 -20.2353 23.9093 -0.43113 235 -20.1047 23.907 -0.429376 151 -19.9444 23.9447 -0.427866 169 -18.2699 25.2184 -0.427424 167 -19.8078 23.9333 -0.425908 175 -19.6868 23.9399 -0.424439 177 -18.2511 25.0268 -0.424036 145 -19.5583 23.9366 -0.422726 173 -19.3936 23.9648 -0.421053 179 -18.2242 24.826 -0.420404 189 -19.2718 23.968 -0.419544 222 -19.1502 23.9707 -0.418034 176 -18.248 24.6146 -0.417221 148 -18.9774 23.9854 -0.416076 180 -18.8562 23.9868 -0.414566 240 -18.2091 24.4018 -0.413262 180 -18.7265 23.9766 -0.412771 175 -18.2865 24.1084 -0.409426 168 -18.3367 24.0175 -0.408569 163 -21.6661 23.8916 -0.300124 95 -21.4852 23.9175 -0.298518 95 -21.3115 23.8744 -0.296188 117 -21.1754 23.8724 -0.29474 119 -21.0343 23.8637 -0.293166 149 -20.869 23.9023 -0.291907 152 -20.7375 23.9027 -0.290553 158 -20.6036 23.8996 -0.289136 167 -20.4402 23.937 -0.287908 155 -20.2628 23.8806 -0.285421 135 -18.2576 25.3849 -0.284641 93 -20.1181 23.8615 -0.283721 164 -19.967 23.91 -0.282777 134 -18.2561 25.1318 -0.281397 92 -19.8191 23.8848 -0.280982 166 -19.7046 23.8991 -0.280006 135 -19.5648 23.8819 -0.278401 172 -18.2123 24.9064 -0.278122 92 -19.4118 23.9241 -0.277393 140 -18.2076 24.7362 -0.275917 91 -19.2688 23.9009 -0.275693 169 -19.1562 23.9144 -0.274749 138 -18.9725 23.9151 -0.272954 170 -18.2036 24.488 -0.272736 101 -18.8565 23.9227 -0.271915 135 -18.7307 23.9172 -0.270624 164 -18.5774 23.953 -0.269585 132 -18.2007 24.0076 -0.266657 219 -21.4857 24.9167 -0.0929149 124 -21.4221 24.686 -0.0909436 123 -21.2955 24.3853 -0.0881147 122 -21.3956 24.2682 -0.0879136 129 -21.4585 24.1859 -0.0877307 122 -20.5048 24.0086 -0.0807984 119 -20.2932 23.9129 -0.0788827 158 -18.2007 25.4704 -0.0783608 129 -18.2561 25.379 -0.0779773 118 -20.1522 23.8986 -0.0779525 201 -19.9855 23.9289 -0.0771863 166 -19.8526 23.9223 -0.0763656 202 -18.2448 25.1132 -0.0759515 134 -19.743 23.943 -0.0758733 167 -19.5628 23.9537 -0.0749063 199 -18.2173 24.9106 -0.0743088 133 -19.4408 23.9576 -0.0742316 161 -19.3076 23.947 -0.0733925 190 -19.191 23.9561 -0.0727907 157 -18.1945 24.7164 -0.0727573 132 -19.0157 23.9679 -0.0718785 176 -18.1815 24.5371 -0.0713701 161 -18.8945 23.9695 -0.0712036 181 -18.7759 23.9737 -0.0705652 167 -18.6013 23.9829 -0.069653 164 -18.1881 24.1477 -0.0685593 168 -18.224 24.0379 -0.0679568 255 -21.4716 24.9963 0.116357 119 -20.5172 25.298 0.117397 117 -21.2305 23.9432 0.118973 142 -20.4953 24.0103 0.120157 114 -20.2943 23.9265 0.120689 113 -18.2632 25.4023 0.120923 113 -18.2262 24.0501 0.123973 185 -18.2615 24.0588 0.303747 237 -18.2712 24.7908 0.305654 91 -18.3168 25.2653 0.306975 92 -18.297 25.4054 0.307304 93 -20.3324 23.9313 0.307614 142 -20.2438 24.0559 0.307736 141 -20.5466 24.0299 0.308304 159 -20.6795 24.0318 0.308588 158 -20.8568 24.008 0.308905 148 -21.0073 24.0282 0.309272 124 -20.5031 25.2351 0.311196 96 -20.4464 25.3274 0.311311 96 -20.6127 25.2077 0.311351 96 -20.749 25.2123 0.311641 96 -20.883 25.1326 0.311719 123 -18.2857 24.1412 0.483102 133 -18.3663 24.09 0.483176 137 -18.2748 24.3648 0.484676 126 -18.7725 24.0697 0.4853 101 -18.2769 24.528 0.485884 120 -18.895 24.0704 0.485996 101 -19.0491 24.0328 0.4866 101 -18.2854 24.7011 0.487201 130 -19.1793 24.0417 0.487405 101 -19.2923 24.0281 0.487955 101 -19.4645 24.01 0.488815 102 -18.313 24.9019 0.488829 132 -19.6156 24.0418 0.489914 102 -19.7151 24.0094 0.490262 102 -18.2966 25.127 0.490403 121 -19.8579 24.0291 0.491232 103 -19.9952 23.9645 0.49158 110 -18.3065 25.3076 0.491794 118 -20.1603 24.0089 0.492862 103 -20.2859 24.005 0.493576 103 -20.4792 24.0036 0.494711 104 -20.6314 24.0287 0.495791 104 -20.7564 24.0213 0.496487 112 -19.2569 24.5095 0.698428 83 -19.4182 24.4764 0.699598 83 -19.4962 24.4168 0.69963 83 -19.5979 24.3866 0.700263 83 -19.6984 24.3544 0.700865 83 -19.8686 24.3295 0.702256 84 -19.9806 24.3101 0.703142 84 -20.0785 24.2734 0.70368 84 -20.2145 24.2046 0.704218 84 +unknow 0.971664 1 0 210 -20.7638 -21.4319 -0.940839 168 -20.6908 -21.4912 -0.940527 178 -21.0823 -21.0876 -0.940011 176 -21.1385 -21.0114 -0.939476 168 -20.831 -21.2995 -0.938996 191 -20.963 -21.1668 -0.938927 140 -21.1817 -20.9224 -0.938247 163 -20.572 -21.5028 -0.937673 177 -21.2614 -20.8042 -0.937251 131 -20.8585 -21.1941 -0.936842 147 -21.3167 -20.7276 -0.936715 132 -21.363 -20.6424 -0.935718 131 -20.4506 -21.5108 -0.934664 190 -21.6519 -20.2104 -0.932407 113 -21.7323 -20.0946 -0.931637 113 -20.2832 -21.5372 -0.93096 186 -21.7791 -20.0114 -0.930789 113 -21.8153 -19.9186 -0.929403 113 -21.9029 -19.8102 -0.929094 113 -21.9472 -19.7253 -0.92817 113 -20.1485 -21.5294 -0.927181 174 -22.0318 -19.5526 -0.926167 112 -21.9628 -19.615 -0.925782 112 -20.0153 -21.5224 -0.923479 202 -21.081 -19.8026 -0.905597 111 -24.5021 -21.3098 -0.838423 59 -24.4245 -21.3775 -0.837972 75 -24.5902 -21.1837 -0.837907 59 -24.3558 -21.4528 -0.837907 103 -24.2081 -21.5261 -0.835909 115 -24.7953 -20.7569 -0.834039 59 -24.8419 -20.6635 -0.833266 58 -23.8111 -21.4422 -0.824562 58 -23.38 -21.5238 -0.816051 78 -23.3788 -21.2527 -0.81012 57 -23.2279 -21.249 -0.806445 69 -23.4904 -19.8519 -0.783042 56 -23.3244 -19.8374 -0.778658 56 -23.2119 -19.8677 -0.776531 56 -20.2583 -21.0798 -0.733917 86 -21.1984 -19.8222 -0.727145 63 -21.0197 -19.779 -0.721988 73 -20.8777 -19.7693 -0.718442 70 -20.2101 -20.4428 -0.718249 129 -20.2052 -20.3097 -0.715089 124 -20.7078 -19.7942 -0.715025 68 -20.634 -19.848 -0.714509 97 -20.237 -20.1508 -0.712188 124 -20.5141 -19.8571 -0.71193 99 -20.2463 -20.0336 -0.709738 137 -20.4016 -19.8726 -0.709674 108 -20.2863 -19.9475 -0.708707 125 -23.6037 -19.8034 -0.626488 66 -23.4201 -19.8383 -0.623291 66 -23.2587 -19.8275 -0.619769 66 -23.1021 -19.8199 -0.616409 74 -22.9928 -19.8519 -0.61473 65 -22.7979 -19.8721 -0.611099 65 -22.6241 -19.8461 -0.60709 65 -22.4911 -19.855 -0.604543 65 -22.245 -19.8252 -0.599016 74 -22.0962 -19.8177 -0.595874 97 -21.9447 -19.8067 -0.592623 115 -21.7609 -19.8278 -0.589318 129 -21.6026 -19.8083 -0.585796 136 -21.4579 -19.8003 -0.582761 140 -21.3883 -19.8608 -0.582491 63 -20.1295 -21.1301 -0.582382 156 -20.1016 -20.9687 -0.578698 139 -21.1032 -19.7824 -0.575393 63 -20.9813 -19.7924 -0.573171 62 -19.9729 -20.7042 -0.571112 250 -19.9848 -20.5868 -0.569053 255 -19.9948 -20.404 -0.565694 255 -20.0419 -20.324 -0.565044 255 -20.1015 -20.2567 -0.564881 105 -20.5291 -19.7973 -0.564393 157 -20.4136 -19.8102 -0.562389 154 -20.1932 -20.0321 -0.562335 114 -20.1231 -20.0884 -0.562064 204 -20.2858 -19.8727 -0.561088 138 -20.1734 -19.8872 -0.559192 196 -24.159 -19.8673 -0.429934 184 -23.9344 -19.8723 -0.426467 198 -23.8121 -19.8973 -0.424876 107 -23.6011 -19.8471 -0.42092 121 -23.3885 -19.857 -0.417739 154 -23.0663 -19.8339 -0.412436 199 -22.9797 -19.8853 -0.411784 105 -22.7293 -19.8565 -0.407542 104 -22.3557 -19.7787 -0.400772 109 -22.21 -19.8372 -0.399344 135 -22.0481 -19.8172 -0.396611 165 -21.8849 -19.7951 -0.393838 184 -21.7206 -19.8332 -0.39188 187 -21.567 -19.8174 -0.389352 186 -20.2303 -21.147 -0.388862 101 -21.4312 -19.8171 -0.387312 171 -21.366 -19.8816 -0.387231 149 -21.2048 -20.0447 -0.387108 130 -20.1511 -20.9319 -0.38458 151 -21.1439 -19.8615 -0.383642 138 -20.1403 -20.7894 -0.382336 177 -20.1976 -20.6528 -0.381154 124 -20.1951 -20.5208 -0.379196 113 -20.8247 -19.8091 -0.378177 154 -20.2243 -20.4217 -0.378176 100 -20.6663 -19.8446 -0.376341 171 -20.5125 -19.9462 -0.375526 247 -20.5564 -19.8635 -0.374995 161 -20.2566 -20.1352 -0.374506 107 -20.3126 -20.0645 -0.374302 99 -20.3171 -19.9431 -0.37263 99 -24.2116 -19.8345 -0.284801 144 -24.0318 -19.8139 -0.282409 160 -23.8244 -19.8323 -0.280081 141 -23.6595 -19.9481 -0.279262 144 -23.627 -19.7942 -0.277311 202 -23.3199 -19.8509 -0.274196 133 -23.104 -19.7928 -0.271017 179 -22.931 -19.7701 -0.26872 169 -22.741 -19.794 -0.266706 166 -22.5869 -19.785 -0.264786 162 -22.4315 -19.774 -0.262835 163 -22.266 -19.7529 -0.260664 159 -22.0847 -19.7789 -0.258807 158 -21.9332 -19.768 -0.256919 159 -21.7776 -19.7522 -0.254936 156 -21.6046 -19.7818 -0.253237 158 -21.4673 -19.7805 -0.251632 170 -20.2049 -21.0462 -0.25138 87 -21.3302 -19.7786 -0.250027 159 -20.1555 -20.8633 -0.248768 144 -21.1772 -19.761 -0.248076 150 -20.1767 -20.6894 -0.247037 156 -21.0256 -19.8058 -0.246817 156 -20.8936 -19.8058 -0.245307 159 -20.1645 -20.5475 -0.245306 154 -20.7617 -19.8051 -0.243796 162 -20.1502 -20.4044 -0.243544 151 -20.6148 -19.8514 -0.242632 162 -20.1854 -20.2484 -0.242191 144 -20.2064 -20.1426 -0.241247 148 -20.4862 -19.8521 -0.241184 164 -20.2212 -20.0312 -0.240177 147 -20.3765 -19.8704 -0.240146 180 -20.2626 -19.9466 -0.239705 154 -24.2414 -19.8618 -0.0783521 166 -24.0833 -19.8589 -0.077222 213 -23.8635 -19.8672 -0.0757273 211 -23.6876 -19.8469 -0.0743785 210 -23.5059 -19.8205 -0.0729567 210 -23.3057 -19.8403 -0.0716808 209 -23.1522 -19.8352 -0.0705871 190 -22.9733 -19.8072 -0.0691836 206 -22.7877 -19.8351 -0.0680717 206 -22.6411 -19.8327 -0.067051 204 -22.4813 -19.8177 -0.0658663 204 -22.3382 -19.8165 -0.064882 185 -22.1522 -19.8387 -0.0637519 185 -20.9391 -21.0023 -0.0630215 113 -22.0052 -19.8318 -0.0627129 197 -21.8525 -19.8188 -0.0616011 204 -20.8946 -20.8262 -0.0616 112 -21.6881 -19.8567 -0.0607262 193 -20.8904 -20.6915 -0.060707 112 -20.8855 -20.5569 -0.0598141 111 -21.5433 -19.8488 -0.0597055 167 -20.945 -20.4219 -0.0593403 111 -21.4003 -19.8415 -0.0587031 184 -20.9545 -20.3031 -0.0586478 111 -20.9894 -20.2094 -0.0582834 111 -21.0699 -20.0965 -0.0581013 111 -21.235 -19.8751 -0.0578099 233 -21.1608 -19.9307 -0.057664 111 -21.0967 -19.9957 -0.0576457 111 -23.2517 -21.2127 0.120694 114 -24.1955 -19.9414 0.121022 141 -24.0018 -19.9089 0.121487 188 -23.8562 -19.9151 0.121783 156 -23.2655 -20.4357 0.122084 119 -23.6228 -19.9101 0.12228 154 -23.3646 -20.136 0.122417 112 -23.2346 -20.2798 0.122428 112 -22.377 -21.135 0.122652 111 -23.4426 -19.8847 0.122702 149 -23.1984 -20.1203 0.122789 111 -23.3283 -19.9141 0.122888 111 -22.4226 -20.3289 0.123998 110 -22.4363 -20.1496 0.124299 109 -22.4097 -19.873 0.124857 147 -22.3352 -19.9327 0.124901 109 -21.7671 -20.0151 0.301975 88 -22.3787 -20.0015 0.303411 89 -23.1884 -20.0161 0.30541 91 -23.3432 -19.9586 0.305668 131 -23.2352 -20.3129 0.306154 91 -23.3024 -21.1604 0.308139 93 -22.359 -20.1974 0.481977 99 -22.2635 -20.3025 0.481977 99 -22.2188 -20.39 0.482216 99 -22.4581 -20.1591 0.482417 100 -22.1723 -20.4759 0.482435 100 -22.587 -20.147 0.483223 100 -22.1488 -20.6483 0.483352 100 -22.1393 -20.7697 0.484048 100 -22.7386 -20.1541 0.484304 100 -22.0957 -20.8598 0.484323 100 -22.9205 -20.1232 0.485367 101 -23.0847 -20.1391 0.486594 101 +unknow 0.956868 1 0 128 -22.9557 25.0984 -1.31861 195 -23.0072 24.918 -1.31421 190 -23.0527 24.8105 -1.31206 191 -23.0814 24.6855 -1.30882 187 -23.1218 24.5736 -1.3064 187 -23.2043 24.4296 -1.30424 188 -23.2257 24.2989 -1.30065 186 -23.2298 24.151 -1.29598 189 -23.3155 24.0126 -1.29419 181 -23.3349 23.8821 -1.29059 180 -23.365 23.7631 -1.28772 177 -26.68 25.6948 -1.21886 157 -26.7072 25.5597 -1.21601 156 -26.5332 25.7145 -1.21531 155 -26.4089 25.8365 -1.21516 153 -23.9432 25.4969 -1.13926 155 -23.7643 25.5465 -1.13595 152 -23.6026 25.5329 -1.13133 143 -23.5142 25.5981 -1.13086 131 -24.0615 24.0605 -1.10265 138 -23.9323 24.0821 -1.09973 128 -23.7457 24.0447 -1.09364 139 -23.6379 24.0864 -1.09187 127 -23.5004 24.1731 -1.09056 127 -26.4417 24.3073 -0.949825 91 -26.1714 24.2876 -0.942989 74 -25.9824 24.2648 -0.938024 64 -25.8099 24.256 -0.933768 64 -25.6042 24.2148 -0.928029 63 -25.2084 24.2187 -0.918872 63 -24.9927 24.1631 -0.912617 62 -24.7883 24.1927 -0.908555 62 -24.6052 24.1655 -0.903719 62 -24.4167 24.1317 -0.898624 62 -24.2305 24.1746 -0.895336 62 -24.0486 24.1444 -0.8905 61 -23.8234 24.0694 -0.883664 95 -23.6453 24.0401 -0.878957 80 -22.8793 24.694 -0.877155 61 -23.4689 24.0869 -0.876055 90 -23.3347 24.1003 -0.873347 85 -22.8613 24.5197 -0.87264 73 -22.9258 24.3579 -0.870253 98 -22.9912 24.2742 -0.869737 87 -23.1673 24.0785 -0.869091 77 -23.0177 24.1498 -0.867414 96 -26.1848 24.256 -0.759124 87 -26.0164 24.2522 -0.75571 75 -25.806 24.2079 -0.750724 75 -25.6223 24.1872 -0.746713 75 -25.4039 24.2083 -0.742811 75 -25.2052 24.1703 -0.738205 74 -25.0242 24.1479 -0.734248 74 -24.8099 24.1678 -0.730455 74 -24.6041 24.1182 -0.725523 73 -24.4215 24.09 -0.721458 73 -24.1808 24.2301 -0.719508 73 -24.2497 24.1469 -0.719236 73 -23.8752 24.0744 -0.710673 72 -23.6705 24.0938 -0.707151 72 -22.8505 24.7696 -0.705096 72 -23.5221 24.0936 -0.704332 72 -22.8576 24.6214 -0.702277 72 -23.3545 24.0726 -0.700756 72 -22.8598 24.4691 -0.699295 87 -23.2067 24.071 -0.697938 71 -22.905 24.2868 -0.69653 88 -23.0461 24.1309 -0.696095 71 -22.9454 24.177 -0.69512 90 -26.3229 24.317 -0.523212 130 -26.1365 24.2975 -0.520153 122 -25.9271 24.2553 -0.51644 121 -25.7121 24.2826 -0.513625 121 -25.4907 24.2256 -0.509545 120 -25.3103 24.2061 -0.506608 119 -25.1447 24.1996 -0.504078 119 -24.9027 24.1939 -0.500447 119 -24.7264 24.1743 -0.497591 118 -24.5433 24.1467 -0.494532 118 -24.3569 24.1903 -0.492451 117 -24.1647 24.1509 -0.489105 117 -23.9928 24.1303 -0.486331 116 -22.9078 25.0029 -0.483929 255 -23.7917 24.1549 -0.483802 116 -23.6359 24.1481 -0.481476 116 -22.8813 24.7392 -0.479604 255 -23.4734 24.1334 -0.478947 115 -22.9153 24.6204 -0.478297 163 -22.9775 24.5322 -0.477848 141 -23.2181 24.2492 -0.47703 115 -23.3321 24.1395 -0.47703 115 -23.0309 24.3583 -0.476011 157 -23.1018 24.2801 -0.475847 198 -26.2122 24.3163 -0.355249 105 -26.0203 24.2906 -0.352762 104 -25.7863 24.3004 -0.350181 104 -25.5865 24.2642 -0.347505 103 -25.3801 24.2202 -0.344671 103 -25.1986 24.1986 -0.342373 103 -24.9868 24.2223 -0.340232 102 -24.789 24.1819 -0.337556 102 -24.6202 24.1686 -0.33551 101 -24.3996 24.1787 -0.333149 101 -24.24 24.1718 -0.331292 101 -24.0793 24.1628 -0.329403 100 -22.9115 25.108 -0.327488 100 -23.8697 24.1792 -0.327262 100 -22.9024 24.9401 -0.325441 100 -23.7083 24.1669 -0.325342 100 -23.5764 24.1839 -0.324083 100 -22.9436 24.7497 -0.323677 99 -23.4239 24.1788 -0.322351 99 -22.9531 24.6043 -0.322102 99 -23.2419 24.2182 -0.320809 99 -22.9633 24.4606 -0.320558 99 -23.1119 24.2346 -0.319581 99 -23.0302 24.3013 -0.319456 99 -24.8688 24.6322 -0.112082 131 -23.63 25.3192 -0.108712 130 -23.6053 25.1342 -0.107325 129 -23.8634 24.3152 -0.103563 128 -24.2224 25.2504 0.11077 125 -24.21 25.0792 0.111133 125 -24.201 24.9126 0.111479 124 -24.2425 24.7211 0.111776 124 -24.292 24.6163 0.111887 124 -24.4577 24.3979 0.111992 124 -24.3354 24.5058 0.112019 124 +unknow 0.897976 1 0 79 -27.6265 -21.3836 -0.738268 132 -27.7872 -21.1611 -0.738052 125 -27.6792 -21.2858 -0.737781 127 -27.545 -21.4592 -0.73778 112 -27.8153 -21.0448 -0.736752 122 -27.4058 -21.5592 -0.73648 104 -27.7901 -20.8889 -0.733663 82 -28.0778 -20.4904 -0.733502 74 -28.1513 -20.3415 -0.732744 74 -28.246 -20.1411 -0.73166 74 -28.181 -20.2285 -0.731606 74 -28.3063 -19.9835 -0.730523 74 -28.3558 -19.8853 -0.73009 74 -28.3902 -19.7767 -0.729169 74 -28.4144 -19.6613 -0.727923 74 -28.477 -19.5069 -0.726948 74 -26.4648 -21.5701 -0.716756 112 -26.27 -21.5493 -0.712313 142 -26.0573 -21.5811 -0.708412 96 -25.9079 -21.5951 -0.70554 72 -26.859 -19.7319 -0.694707 71 -26.673 -19.7248 -0.690534 71 -26.4836 -19.7786 -0.687283 71 -29.2557 -19.8284 -0.512815 120 -28.9938 -19.9177 -0.509429 140 -29.0348 -19.8119 -0.508899 134 -28.7141 -19.9252 -0.50482 119 -28.4039 -19.8422 -0.498661 118 -28.1584 -19.8023 -0.494093 118 -27.9655 -19.7982 -0.49083 117 -27.7061 -19.811 -0.486669 117 -27.5107 -19.802 -0.483325 116 -27.2817 -19.7674 -0.479124 130 -27.0383 -19.7858 -0.47533 136 -26.8183 -19.7543 -0.471333 136 -26.6437 -19.755 -0.468478 131 -26.4447 -19.8012 -0.465786 137 -25.9027 -20.431 -0.464846 255 -26.2609 -19.9222 -0.464276 142 -26.2707 -19.7998 -0.462931 192 -26.1204 -19.945 -0.462278 154 -26.0197 -20.063 -0.462114 161 -26.9719 -19.7851 -0.318664 99 -26.7647 -19.763 -0.315832 98 -26.5499 -19.7337 -0.312842 98 -26.0545 -20.139 -0.310481 97 -26.2886 -19.7327 -0.309538 120 -25.898 -20.1484 -0.308624 112 -26.1163 -19.8612 -0.308593 148 -26.0427 -19.9347 -0.308373 245 -29.4492 -19.8149 -0.116232 133 -29.1406 -19.8071 -0.113863 132 -28.905 -19.7798 -0.111949 131 -28.6897 -19.7649 -0.110253 131 -28.4125 -19.7718 -0.108211 130 -28.2176 -19.7679 -0.106735 129 -27.9887 -19.7388 -0.104875 129 -27.7946 -19.7327 -0.103399 128 -27.5665 -19.7667 -0.101886 127 -27.3665 -19.7536 -0.100336 127 -26.1324 -21.1407 -0.0990744 140 -27.1781 -19.7477 -0.0989144 126 -26.9349 -19.7654 -0.0972191 126 -26.4987 -20.1587 -0.0961788 125 -26.7344 -19.7476 -0.0956515 125 -26.5568 -19.7455 -0.0943389 125 -26.2242 -20.08 -0.0937546 124 -26.0866 -20.1703 -0.0932622 124 -26.0073 -20.2398 -0.0930796 131 -26.3467 -19.7827 -0.0930081 133 -28.0891 -19.7929 0.112793 123 -27.151 -19.8824 0.315174 99 -27.3144 -19.6744 0.315205 99 -28.6436 -19.8904 0.319117 102 -28.8162 -19.8765 0.31955 103 -29.0697 -19.85 0.320177 103 -29.2659 -19.8496 0.320701 103 -29.5022 -19.875 0.32138 104 -29.151 -19.9863 0.52974 115 +unknow 0.914108 1 0 29 -38.173 24.3685 -0.716051 149 -37.8825 24.3511 -0.71087 148 -37.7504 24.4341 -0.709524 148 -37.439 24.4838 -0.704752 148 -37.1631 24.4706 -0.699897 147 -36.8059 24.4017 -0.693043 175 -36.4811 24.4348 -0.687903 183 -36.167 24.3896 -0.682069 206 -38.4231 24.2338 -0.507511 165 -38.1534 24.3156 -0.504615 159 -37.8984 24.3208 -0.501279 168 -37.5532 24.2659 -0.496242 198 -37.2627 24.3277 -0.492937 169 -36.9572 24.2941 -0.488625 194 -36.6807 24.2775 -0.484847 189 -36.3731 24.321 -0.481196 184 -36.1092 24.3088 -0.477639 181 -38.2506 24.5153 -0.207184 189 -38.2481 24.3446 -0.206326 202 -37.6069 24.2702 -0.201037 204 -37.3162 24.3326 -0.199123 175 -37.069 24.3378 -0.197263 161 -36.8071 24.3318 -0.195239 160 -36.4757 24.3608 -0.192868 159 -36.2064 24.3459 -0.190753 159 -36.9471 24.2967 0.0854908 162 -36.6523 24.3509 0.0860823 153 -36.3895 24.3413 0.0866958 152 -36.1338 24.3348 0.0872874 151 +unknow 0.908245 1 0 50 -41.4007 26.1527 -0.791168 159 -41.4132 25.9789 -0.789494 159 -41.3911 25.7843 -0.787004 158 -43.6913 25.8631 -0.591665 172 -43.4617 24.2729 -0.576038 138 -43.218 24.3151 -0.573017 138 -43.0004 24.4601 -0.57116 138 -41.8188 24.9312 -0.558826 147 -40.5165 25.2013 -0.54353 202 -40.4016 25.3061 -0.54287 192 -40.5087 25.0202 -0.541923 134 -40.7352 24.5454 -0.541069 133 -40.4545 24.5497 -0.537323 148 -40.3123 24.637 -0.536128 133 -40.9323 24.6283 -0.228502 171 -40.6083 24.6077 -0.225876 170 -40.2696 24.5759 -0.223086 169 -40.0375 24.6941 -0.221847 169 -39.8612 24.7586 -0.22079 168 -43.5251 24.3185 0.0700481 224 -42.9783 24.2792 0.0714073 204 -42.6951 24.2962 0.0720589 180 -42.4295 24.3217 0.0726556 167 -42.112 24.404 0.0732961 166 -41.8003 24.3989 0.074041 165 -41.5252 24.4134 0.0746707 165 -41.2229 24.4102 0.0753882 164 -40.8724 24.4633 0.0761386 163 -40.6001 24.4738 0.0767628 162 -40.3812 24.515 0.077217 162 -40.1255 24.6192 0.0776656 161 -39.9646 24.6935 0.0779333 161 -39.875 24.8116 0.0779705 255 -40.8777 24.5639 0.360204 134 -41.1007 24.5223 0.360753 134 -41.4047 24.5275 0.361606 135 -41.7391 24.4604 0.362426 135 -42.0319 24.4548 0.363234 136 -42.3441 24.4586 0.364113 136 -42.6604 24.3737 0.364862 137 -43.0447 24.4141 0.366005 160 -40.239 24.8771 0.638973 147 -40.3834 24.7914 0.639688 148 -40.201 25.1163 0.639832 148 -40.1947 25.2883 0.640618 148 -40.6813 24.7988 0.64205 148 -40.313 25.8071 0.644075 149 -40.441 25.6212 0.644149 149 -41.6612 24.7725 0.649614 150 -42.7135 25.581 0.661677 154 +unknow 0.870798 1 0 35 -43.5799 -20.9415 -0.233417 173 -43.6112 -20.7881 -0.233072 173 -43.6275 -20.6279 -0.23258 172 -43.6468 -20.4695 -0.232125 172 -43.7355 -20.2602 -0.232054 172 -47.5332 -20.0944 0.0655947 174 -47.1993 -20.1284 0.0663999 173 -44.3768 -20.512 0.0730376 166 -44.4457 -20.2902 0.0731188 166 -44.3753 -20.3341 0.364168 173 -44.3552 -20.5783 0.36444 255 -44.312 -20.7278 0.364519 179 -44.2955 -20.8899 0.364694 207 -44.2706 -21.1338 0.36496 164 -44.413 -21.3735 0.365711 137 -45.7917 -20.0338 0.367947 155 -46.2378 -20.0564 0.369297 155 -46.7987 -20.0385 0.370939 141 -47.2608 -20.0611 0.372341 142 -47.7788 -20.1044 0.373937 143 -44.6447 -20.5372 0.656119 152 -44.7272 -20.4052 0.656301 152 -44.571 -20.7583 0.656358 152 -44.5581 -20.9229 0.65689 152 -45.6925 -20.0697 0.663113 183 -46.1515 -20.0983 0.66707 155 -46.6151 -20.0391 0.670752 156 -47.1139 -20.0782 0.675093 157 -47.6043 -20.1104 0.679342 158 -46.543 -21.2944 1.01541 126 -46.4813 -21.4431 1.01551 126 -47.5196 -20.4902 1.02436 128 -46.4704 -20.4385 1.26788 186 -46.3485 -20.996 1.27031 163 -46.7111 -20.2821 1.27119 157 +unknow 0.835046 1 0 39 -46.4891 25.7744 -0.629185 146 -46.4295 25.456 -0.62594 145 -46.3582 25.2277 -0.623231 145 -46.2825 24.9982 -0.620459 145 -46.271 24.711 -0.618159 144 -46.2301 24.5027 -0.616048 144 -46.1476 24.2735 -0.613213 144 -47.9736 24.3292 -0.283387 209 -50.2103 24.1497 0.0540055 184 -49.8244 24.2538 0.0548321 184 -48.1394 24.2804 0.0589345 219 -47.7581 24.2764 0.059871 237 -47.3737 24.2684 0.0608186 241 -46.6659 24.3701 0.0624119 177 -45.9996 25.3247 0.0627763 252 -46.0254 25.0569 0.0630686 254 -46.3272 24.3786 0.0632224 246 -46.0142 24.8637 0.0633497 255 -46.0163 24.6783 0.063587 255 -46.0812 24.5271 0.0636268 255 -46.1113 24.6412 0.375034 255 -46.0566 24.7982 0.375116 252 -46.2256 24.5159 0.375171 199 -46.0329 24.9724 0.375315 237 -45.9937 25.2322 0.375604 224 -46.5585 24.4119 0.375966 213 -46.0315 25.4414 0.376035 231 -46.0877 25.6617 0.376536 216 -46.8693 24.3872 0.376819 221 -47.2247 24.3838 0.377833 231 -47.6135 24.3009 0.378829 222 -47.993 24.3046 0.379927 206 -49.7229 24.3028 0.384927 150 -46.8231 24.9373 0.691553 169 -47.076 24.5994 0.69216 162 -46.8996 25.1676 0.693163 162 -47.2862 24.5205 0.693535 162 -46.9175 25.4628 0.694589 162 -47.0233 25.7119 0.696528 163 +unknow 0.845528 1 0 34 -52.4879 -21.509 0.0515898 187 -52.4941 -21.3192 0.0517695 187 -52.5571 -21.1527 0.0517795 187 -52.5948 -20.8805 0.051959 187 -52.2204 -21.5914 0.0521817 186 -52.683 -20.2479 0.052361 186 -52.6398 -20.0417 0.0526719 186 -52.5191 -19.8072 0.0532072 185 -51.7288 -21.6743 0.0533373 185 -50.6199 -19.9136 0.0579554 181 -49.8398 -20.5135 0.380595 255 -49.8065 -20.683 0.380706 147 -50.0011 -20.2135 0.38071 255 -49.9707 -20.384 0.380827 193 -50.7771 -19.8807 0.38264 185 -51.9383 -19.8669 0.386123 167 -52.5708 -19.9201 0.388094 166 -53.2204 -19.8802 0.390013 153 -50.069 -20.3211 0.700939 164 -50.0753 -20.5071 0.701636 164 -50.0439 -20.678 0.701967 164 -50.2905 -20.1355 0.702184 181 -50.0433 -20.8621 0.702609 164 -50.4112 -20.0002 0.702751 180 -50.591 -19.8878 0.703904 173 -51.2213 -19.8571 0.709179 166 -51.7391 -19.8708 0.713648 167 -52.3135 -19.9028 0.718667 168 -52.948 -19.8588 0.72396 170 -51.3731 -19.7997 1.0767 134 -51.3001 -21.4566 1.08541 135 -52.9941 -19.9486 1.1015 137 -53.5923 -19.9821 1.11055 138 -51.6736 -20.0618 1.36553 168 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_6.pose b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_6.pose new file mode 100644 index 00000000000..dc96baaf52a --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_6.pose @@ -0,0 +1 @@ +11993 588.819255 33.330328 45.010420 40.747546 -0.002154 -0.010940 -0.639938 0.768346 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_6.seg b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_6.seg new file mode 100644 index 00000000000..ba7e0673c89 --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_6.seg @@ -0,0 +1,30 @@ +unknow 0.770309 1 0 31 55.7948 -22.6052 -1.73072 143 55.8135 -22.409 -1.72892 166 55.9525 -21.9561 -1.72771 246 55.924 -22.2294 -1.42043 163 55.7407 -22.5631 -1.41918 209 55.8039 -22.3849 -1.41897 164 55.8291 -21.8875 -1.41465 143 55.8808 -21.7054 -1.41417 159 55.6524 -23.6288 -1.02308 255 55.7023 -23.3408 -1.02174 255 55.7384 -23.1503 -1.02094 255 55.759 -22.9538 -1.0198 255 55.8258 -22.6743 -1.01891 255 55.8671 -22.4868 -1.01827 255 55.9003 -22.2964 -1.01746 255 56.0514 -21.848 -1.01698 255 55.9385 -22.1082 -1.01677 255 56.8672 -24.5369 -0.764751 163 56.9294 -23.4053 -0.758781 163 56.0227 -23.2381 -0.744613 189 55.9242 -22.4796 -0.738695 160 55.8277 -24.9708 -0.347933 250 56.4457 -23.1481 -0.346623 206 55.712 -24.7094 -0.346013 206 55.7455 -24.515 -0.345583 206 55.7943 -24.2234 -0.344936 206 55.8095 -24.0219 -0.344342 206 55.7835 -23.8033 -0.343349 215 56.0345 -23.1855 -0.343294 206 55.8729 -23.5309 -0.343138 233 55.9337 -23.3499 -0.343016 205 +unknow 0.621942 1 0 15 55.8462 -11.3892 -1.62777 101 55.8422 -11.0234 -1.62533 94 55.8053 -11.1984 -1.62526 141 55.5814 -10.7002 -1.61509 94 55.6681 -10.0834 -1.61421 94 55.605 -9.8917 -1.61112 93 55.5256 -10.3281 -1.61111 127 55.436 -10.4917 -1.60924 100 55.893 -11.3777 -1.3357 111 55.5867 -10.6801 -1.32392 111 55.6359 -10.0565 -1.32215 111 55.5963 -9.86901 -1.32021 118 55.4896 -10.3002 -1.31944 159 55.8928 -10.2648 -0.94945 179 55.416 -10.3576 -0.940239 255 +unknow 0.849046 1 0 43 52.8245 -25.5773 -1.68199 156 52.8344 -25.2755 -1.67807 128 52.834 -25.0717 -1.67524 138 52.8275 -24.8656 -1.67221 151 52.8752 -24.5844 -1.66977 158 53.8974 -22.1337 -1.66836 117 52.8814 -24.3856 -1.66727 153 52.8668 -24.1778 -1.66405 154 52.9146 -23.8988 -1.66174 159 52.9201 -23.7014 -1.6593 161 52.9449 -23.5132 -1.65756 139 52.9179 -23.3025 -1.65402 129 53.0033 -23.0425 -1.65319 122 53.3307 -22.0973 -1.65103 95 53.0001 -22.8434 -1.65056 172 53.1835 -22.2324 -1.64832 95 53.0342 -22.366 -1.64555 178 52.9899 -25.533 -1.38352 114 52.7756 -25.7368 -1.3807 114 52.8061 -25.0366 -1.37325 171 52.7959 -24.8289 -1.3706 191 52.8398 -24.5461 -1.36845 158 52.8477 -24.3482 -1.36639 155 52.8257 -24.1371 -1.36348 204 52.8842 -23.8632 -1.36186 168 52.8805 -23.6618 -1.35954 177 52.8943 -23.4688 -1.35776 177 52.8964 -23.2711 -1.35565 180 52.9413 -22.9936 -1.35376 144 53.1448 -22.3907 -1.35243 112 52.9579 -22.6063 -1.35004 170 52.9626 -25.7009 -0.99059 183 52.993 -25.4078 -0.988561 183 52.9714 -25.1932 -0.986286 183 52.9544 -24.9815 -0.984132 183 52.9891 -24.7947 -0.98316 183 53.0074 -24.4994 -0.980968 182 53.0801 -24.1295 -0.979186 182 53.1501 -23.1611 -0.97249 181 52.9598 -23.3758 -0.970692 181 52.8149 -23.5104 -0.969099 181 53.0469 -25.402 -0.715701 157 53.1501 -23.6279 -0.705538 156 +unknow 0.934005 1 0 34 49.8988 -28.991 -1.65026 104 50.0193 -28.7466 -1.64969 95 50.0093 -28.3245 -1.64267 147 50.0214 -28.1241 -1.63985 156 50.0467 -27.8289 -1.63592 151 51.2394 -25.4094 -1.63373 94 50.0464 -27.6233 -1.63271 147 50.1337 -26.4514 -1.61728 201 50.6277 -25.4043 -1.61602 94 50.1705 -26.2697 -1.61561 146 50.1286 -26.0475 -1.6111 145 50.3335 -25.4551 -1.60828 125 50.2283 -25.6004 -1.60738 241 49.9796 -29.225 -1.35841 161 49.9328 -28.9875 -1.35408 157 49.9124 -28.4537 -1.34641 167 49.9302 -28.2564 -1.3442 212 49.9843 -27.9768 -1.34177 206 49.9794 -27.7681 -1.3389 206 51.18 -25.3572 -1.3374 111 49.9929 -27.5704 -1.33663 177 50.7133 -25.4241 -1.32689 111 50.1412 -26.4319 -1.32557 111 50.3691 -25.4497 -1.31888 179 50.0895 -25.8042 -1.31649 197 50.1963 -25.5606 -1.31606 231 50.0852 -27.7014 -0.957247 239 50.0931 -27.5007 -0.95542 209 50.8148 -25.9546 -0.95371 179 50.461 -26.0745 -0.948411 179 50.2749 -26.3799 -0.947913 248 50.3043 -26.1941 -0.946696 178 51.1384 -28.7771 -0.71347 157 50.1644 -28.9595 -0.701587 156 +unknow 0.847732 1 0 46 47.8499 30.3479 -2.33558 255 47.9738 30.1104 -2.33459 221 47.9695 29.481 -2.31949 220 48.0328 29.2089 -2.31554 207 47.9944 28.9794 -2.30871 208 47.8625 28.6948 -2.29704 213 47.956 28.4444 -2.29487 233 46.3275 30.1009 -2.27205 184 46.2173 28.6035 -2.23181 181 45.9306 28.6259 -2.2214 192 48.9843 28.4335 -1.9737 196 48.3259 28.459 -1.9523 194 47.8872 28.5056 -1.93867 193 47.5831 28.5276 -1.92904 193 47.2553 28.5334 -1.91834 192 45.8963 28.7067 -1.87723 189 45.5816 28.91 -1.87115 189 45.6553 28.756 -1.87038 200 49.2276 28.4827 -1.62514 149 48.7546 28.4136 -1.61083 169 48.4187 28.4218 -1.60162 178 48.078 28.4251 -1.59221 163 47.6845 28.4964 -1.58248 184 47.3362 28.4903 -1.57275 178 46.9986 28.4885 -1.56341 176 46.6219 28.5613 -1.55427 158 45.663 29.577 -1.5456 138 46.3006 28.5648 -1.5455 167 45.6824 29.2849 -1.54102 125 46.029 28.5971 -1.53861 209 45.7067 29.0983 -1.53843 142 45.7236 28.9075 -1.53559 220 49.0698 28.4152 -1.32791 156 48.7713 28.4474 -1.32136 156 48.4041 28.4376 -1.31265 186 48.12 28.4746 -1.30653 110 47.7313 28.5492 -1.29852 109 46.8072 28.3978 -1.27496 108 46.6712 28.617 -1.27492 108 48.5894 28.6709 -0.942393 178 47.303 29.8496 -0.932575 176 47.2736 29.5204 -0.928489 176 47.198 29.2673 -0.924447 201 47.2267 29.0801 -0.922933 237 47.4485 28.7052 -0.922797 241 47.283 28.8083 -0.921008 239 +unknow 0.953689 1 0 42 41.7921 18.8977 -2.11249 108 41.7547 18.7231 -2.10713 108 41.7238 18.5521 -2.10216 108 41.6576 18.3662 -2.09528 108 41.6117 18.1124 -2.08799 107 41.5199 17.9175 -2.07979 107 41.5061 17.7572 -2.07594 107 41.5139 17.5296 -2.07179 107 44.0048 19.85 -1.95857 165 41.5488 18.5837 -1.83462 172 41.4682 18.3914 -1.82779 157 41.5032 18.1733 -1.82527 157 41.5583 18.0421 -1.82518 157 41.6129 17.9106 -1.82509 157 43.8779 19.8836 -1.64724 173 41.5662 18.6021 -1.54571 165 41.4563 18.3969 -1.53862 217 41.3657 18.2015 -1.53238 255 41.5452 17.5068 -1.52812 255 41.442 17.6938 -1.52728 255 41.3623 17.8137 -1.52628 255 44.0483 19.9615 -1.35043 83 41.7173 18.7458 -1.26579 79 41.5862 18.53 -1.25909 227 41.5034 18.3369 -1.25412 142 41.5508 17.9691 -1.25076 115 41.596 17.8338 -1.25036 141 42.9772 19.3413 -1.06832 121 42.0864 18.7822 -1.04009 94 41.9202 18.5506 -1.03342 160 41.9064 18.3088 -1.03044 160 41.9307 18.1628 -1.02946 160 41.9563 18.0176 -1.02853 160 42.0407 17.8197 -1.02852 160 42.0947 17.6867 -1.02846 125 44.0505 19.7499 -0.776177 157 43.256 19.2664 -0.536996 133 43.2328 19.0125 -0.535039 133 43.2208 18.8455 -0.533808 133 43.3996 18.3582 -0.533351 132 43.2449 18.6945 -0.533205 132 43.3123 18.4819 -0.532852 132 +unknow 0.785095 1 0 44 33.7907 -9.63479 -1.76619 149 33.9448 -8.76268 -1.76172 103 33.7844 -8.60831 -1.75083 103 33.7377 -8.48368 -1.74656 113 33.7365 -8.3146 -1.74421 147 33.387 -9.18073 -1.73744 150 33.3547 -9.00306 -1.73306 123 33.2133 -9.35792 -1.73069 219 33.7019 -9.76476 -1.56584 112 33.7681 -9.09758 -1.56 86 33.6566 -8.84095 -1.55121 85 33.6746 -8.56351 -1.54858 85 33.6963 -8.28776 -1.54627 85 33.4234 -9.11717 -1.54341 85 33.1681 -9.32789 -1.5338 162 33.1722 -9.21667 -1.53248 185 33.6796 -9.69068 -1.36353 208 33.7038 -9.5259 -1.36255 176 33.6815 -9.40549 -1.36013 161 33.7725 -8.91823 -1.35835 125 33.7116 -8.50687 -1.3511 125 33.6827 -8.61225 -1.351 185 33.3204 -9.02349 -1.33995 255 33.1465 -9.14438 -1.33385 199 33.601 -8.68355 -1.12741 131 33.6316 -8.46639 -1.12649 130 33.5739 -8.56408 -1.12525 130 33.3453 -9.00962 -1.12108 130 33.2081 -9.1406 -1.1173 255 33.7212 -8.84239 -0.914382 63 33.3947 -8.98161 -0.905357 110 33.1786 -9.20364 -0.900518 218 33.2158 -9.04562 -0.900329 252 33.81 -8.94538 -0.738195 255 33.8263 -8.83608 -0.737874 74 33.5153 -8.97995 -0.730722 162 33.1989 -9.28743 -0.724649 131 33.1701 -9.16707 -0.723028 248 33.1589 -8.99596 -0.721517 229 33.4745 -9.03418 -0.498037 255 33.2792 -9.26259 -0.495423 177 33.2406 -9.13949 -0.494001 255 33.4459 -8.98693 -0.336142 102 33.2817 -9.11108 -0.334159 238 +unknow 0.883072 1 0 49 29.03 -20.4588 -1.78712 132 28.8923 -20.4979 -1.78206 127 29.5426 -19.5273 -1.78141 124 28.818 -20.5817 -1.78138 159 28.6883 -20.6939 -1.77913 162 28.5545 -20.8714 -1.77891 165 28.4397 -20.9939 -1.77778 170 28.5956 -20.764 -1.77722 163 32.1865 -19.8334 -1.70318 92 31.9493 -19.8258 -1.69277 91 31.7819 -19.8604 -1.6865 101 29.4752 -21.5252 -1.6369 89 29.2723 -21.5182 -1.62841 140 29.0295 -21.5511 -1.61951 160 29.26 -21.0871 -1.61507 88 29.8067 -19.6831 -1.59751 135 28.9043 -20.9688 -1.59697 87 28.8796 -20.6064 -1.58525 87 29.4628 -19.6558 -1.58224 130 28.7439 -20.3733 -1.57282 94 32.4338 -19.8979 -1.49817 135 32.162 -19.8707 -1.48714 135 31.9314 -19.8673 -1.47825 134 30.1429 -19.6882 -1.40622 129 29.8872 -19.6556 -1.39581 128 29.6078 -19.6726 -1.38576 168 28.6375 -20.5569 -1.37246 255 28.6575 -20.3674 -1.36825 255 28.7767 -20.1812 -1.3678 255 28.656 -20.2312 -1.36466 255 32.2893 -19.9296 -1.2519 141 30.9411 -19.7059 -1.20332 137 28.9188 -21.0117 -1.16718 134 29.7863 -19.7011 -1.1659 134 28.8275 -20.8072 -1.15971 133 28.8863 -20.6432 -1.15787 133 28.78 -20.4307 -1.14979 133 29.0964 -20.9481 -0.945997 64 29.058 -20.7134 -0.940591 64 29.0625 -20.5793 -0.93821 64 31.583 -19.883 -0.801443 79 31.3752 -19.89 -0.796787 78 29.7635 -21.0358 -0.777753 89 29.8621 -19.8634 -0.762029 76 31.1981 -20.1545 -0.375258 149 31.0123 -20.1727 -0.372963 128 30.8903 -20.2316 -0.371862 127 30.7271 -20.4714 -0.371793 126 30.7663 -20.3582 -0.371324 125 +unknow 0.885209 1 0 69 27.882 26.4632 -2.18233 125 25.0162 24.7473 -2.17797 103 25.0639 24.6392 -2.17512 98 27.656 26.4976 -2.17363 172 27.4763 26.4916 -2.16531 139 27.2983 26.4862 -2.15711 147 27.1149 26.4742 -2.14841 136 26.1925 24.551 -2.0241 115 25.9612 24.4881 -2.01093 118 27.3409 24.737 -1.86488 127 27.1229 24.6949 -1.85421 128 26.8519 24.6805 -1.84241 148 26.6058 24.6087 -1.82948 168 26.4232 24.5941 -1.82139 161 26.1397 24.561 -1.80847 132 25.367 25.2225 -1.8031 255 25.4021 25.0992 -1.79961 204 25.6177 24.7614 -1.79499 153 25.6508 24.6379 -1.79151 255 27.4766 24.7223 -1.66187 90 27.2669 24.6893 -1.65287 90 27.0444 24.6431 -1.64296 89 26.7618 24.6176 -1.63153 102 26.4793 24.6669 -1.62273 88 26.5127 24.5429 -1.6197 104 26.1124 24.5562 -1.60534 88 25.4584 24.9404 -1.59493 101 25.858 24.4707 -1.593 101 25.5023 24.8269 -1.5925 87 25.5356 24.7036 -1.58936 87 25.7072 24.4817 -1.58784 106 25.5886 24.5998 -1.58764 87 27.168 24.6949 -1.43963 131 26.9577 24.6587 -1.43155 131 26.6975 24.6525 -1.42276 130 26.5014 24.626 -1.41549 129 26.2606 24.5562 -1.40544 143 25.5683 25.1425 -1.40124 153 25.58 24.9964 -1.39702 145 25.6355 24.8936 -1.39558 144 25.9004 24.6033 -1.39512 218 25.6935 24.7935 -1.39432 153 25.7956 24.6583 -1.39342 193 27.8524 24.8654 -1.22992 139 27.6358 24.8287 -1.22276 139 27.3841 24.7587 -1.21375 138 27.1076 24.7421 -1.20543 144 26.1091 25.6197 -1.20077 145 26.1751 25.4435 -1.19784 137 26.1542 25.2641 -1.19244 136 26.7794 24.5974 -1.19234 136 26.699 24.6787 -1.19219 136 26.1786 25.1292 -1.18951 136 26.2547 24.9657 -1.18727 136 26.5203 24.6687 -1.18687 136 26.3185 24.8693 -1.1865 136 26.3732 24.7647 -1.18526 135 27.5359 25.1963 -0.994896 67 26.6664 25.986 -0.992025 66 26.8026 24.8358 -0.969627 65 26.959 25.9865 -0.806292 79 26.9799 25.7626 -0.802494 79 27.6974 24.9895 -0.802466 79 26.9664 25.5883 -0.798968 78 26.9884 25.4486 -0.796798 78 27.0217 25.2407 -0.793596 78 27.229 24.9579 -0.792503 78 27.0672 25.1244 -0.792346 78 27.1019 24.9987 -0.790718 78 +unknow 0.97461 1 0 196 24.8787 -19.5196 -1.75644 121 24.8 -19.584 -1.75507 161 24.5584 -19.8354 -1.75307 117 24.6794 -19.6782 -1.75283 112 24.391 -20.0188 -1.7522 121 24.6035 -19.7444 -1.75171 153 24.4712 -19.8923 -1.75108 154 24.2234 -20.1372 -1.74884 120 24.285 -20.0597 -1.74872 153 23.6769 -20.5798 -1.74076 117 23.7399 -20.504 -1.74063 106 23.5745 -20.6212 -1.73765 144 23.4696 -20.7254 -1.73703 115 23.3181 -20.8538 -1.73528 114 23.3686 -20.7672 -1.73404 144 23.1885 -20.9354 -1.73267 152 23.1138 -21 -1.73193 115 23.0168 -21.0442 -1.72932 146 22.9271 -21.0948 -1.72733 118 22.8055 -21.1822 -1.72546 155 22.7184 -21.2347 -1.72372 118 23.3902 -19.6307 -1.68885 126 23.1269 -19.784 -1.68251 109 23.173 -19.5725 -1.67618 147 23.0688 -19.609 -1.6727 119 26.1065 -19.6568 -1.62758 135 25.9245 -19.712 -1.62129 136 24.2958 -21.5466 -1.61597 138 25.6878 -19.788 -1.61331 112 25.7228 -19.6866 -1.6114 140 25.5564 -19.8795 -1.61061 144 25.2924 -19.8023 -1.59623 148 23.9149 -21.3438 -1.59237 119 25.1014 -19.7804 -1.58702 155 23.9466 -21.1034 -1.58474 128 24.9092 -19.7563 -1.57769 172 24.6926 -19.7749 -1.56882 183 23.3186 -21.2774 -1.56496 146 23.3631 -21.1839 -1.56328 143 23.4314 -21.0456 -1.56092 207 24.4872 -19.7372 -1.55848 179 23.1029 -21.2142 -1.55361 135 22.9749 -21.2971 -1.55148 129 24.3025 -19.7148 -1.5496 184 23.5324 -20.543 -1.54644 123 24.081 -19.7242 -1.54028 180 23.9095 -19.7096 -1.5323 184 23.7244 -19.6827 -1.52331 183 23.4828 -19.6701 -1.51241 151 23.314 -19.6538 -1.50455 155 23.1805 -19.6662 -1.49927 115 22.9254 -19.7617 -1.49185 238 22.9772 -19.6185 -1.48882 115 26.3166 -19.6626 -1.45229 154 26.1637 -19.6767 -1.44653 220 25.7277 -19.6666 -1.42863 112 25.5629 -19.6681 -1.42206 128 25.3092 -19.6632 -1.41174 164 25.1183 -19.6416 -1.40345 161 24.9498 -19.6364 -1.39657 158 24.7675 -19.6191 -1.38879 160 24.5657 -19.6481 -1.38171 167 24.4012 -19.6425 -1.37503 165 24.2184 -19.6208 -1.36715 161 24.0222 -19.6499 -1.36037 162 23.854 -19.6376 -1.35339 162 23.6692 -19.6104 -1.3453 147 23.3435 -19.6515 -1.33398 161 22.9932 -19.6045 -1.31891 75 22.2671 -20.4195 -1.31869 75 22.2973 -20.3185 -1.31637 75 22.8537 -19.6722 -1.31577 223 22.7088 -19.6719 -1.31021 157 22.3299 -20.0292 -1.30778 75 22.5822 -19.6866 -1.30586 189 22.3271 -19.9005 -1.30333 81 26.3842 -19.6411 -1.26653 232 25.9884 -19.6659 -1.25298 159 25.7706 -19.6289 -1.24419 131 25.6232 -19.6442 -1.23934 117 25.4284 -19.6222 -1.23181 227 25.2237 -19.6547 -1.22543 208 25.0344 -19.6341 -1.21817 202 24.858 -19.6223 -1.21162 209 24.6621 -19.6571 -1.2057 206 24.4754 -19.6346 -1.19852 205 24.3079 -19.6261 -1.19242 209 24.1128 -19.6572 -1.1865 213 23.9397 -19.6417 -1.18004 210 23.7684 -19.6266 -1.17367 210 22.37 -21.0349 -1.16834 199 23.599 -19.6119 -1.16739 181 22.322 -20.8583 -1.16135 195 22.2981 -20.7052 -1.15588 198 23.241 -19.6254 -1.15546 147 22.2895 -20.5673 -1.1514 199 23.097 -19.6285 -1.15061 158 22.3124 -20.3947 -1.14692 207 22.9026 -19.65 -1.1446 249 22.3216 -20.2749 -1.1436 207 22.7938 -19.6814 -1.14182 203 22.3199 -20.1458 -1.13965 213 22.6594 -19.6901 -1.13751 205 22.3609 -19.9925 -1.13643 210 22.5568 -19.7257 -1.13509 215 22.3892 -19.8917 -1.13437 213 22.4306 -19.8027 -1.13311 217 26.372 -19.7343 -1.05903 125 26.0435 -19.6161 -1.04617 255 25.8283 -19.6453 -1.04024 232 25.6634 -19.6473 -1.03524 207 25.4734 -19.629 -1.029 230 25.2655 -19.6591 -1.02338 205 25.0669 -19.6311 -1.01668 231 24.8984 -19.6255 -1.01145 202 24.6806 -19.6429 -1.00529 238 24.505 -19.6291 -0.999665 202 24.3266 -19.6118 -0.99389 238 24.1532 -19.5974 -0.988347 208 23.9725 -19.6387 -0.983957 208 23.7998 -19.6223 -0.978414 209 22.4235 -21.0531 -0.974992 180 23.6443 -19.619 -0.973717 207 22.3859 -20.8856 -0.96953 209 23.4352 -19.6326 -0.967865 200 22.3533 -20.7241 -0.964375 217 23.2635 -19.6133 -0.962322 232 22.3727 -20.5468 -0.960298 221 23.1286 -19.6241 -0.958626 207 22.3723 -20.4171 -0.956913 200 22.994 -19.6343 -0.954929 211 22.3816 -20.297 -0.954067 206 22.8286 -19.6798 -0.951233 218 22.374 -20.1623 -0.950375 251 22.4226 -20.0153 -0.947991 187 22.6897 -19.6846 -0.947306 220 22.4435 -19.9076 -0.945838 217 22.5826 -19.7163 -0.944995 237 22.485 -19.8185 -0.944762 239 25.9382 -19.8143 -0.842489 59 25.6824 -19.7472 -0.83463 135 25.2933 -19.7663 -0.825094 86 25.3363 -19.672 -0.824324 111 25.1116 -19.7518 -0.820198 81 24.8816 -19.698 -0.813305 58 24.6588 -19.7115 -0.807958 176 24.4767 -19.6925 -0.802997 182 24.309 -19.6839 -0.798616 147 24.0968 -19.7009 -0.793655 145 23.9313 -19.6915 -0.789339 147 23.7645 -19.6799 -0.784958 149 22.4832 -20.9359 -0.780612 171 23.5641 -19.702 -0.780448 151 23.3995 -19.6898 -0.776131 153 22.4343 -20.7594 -0.775591 255 23.2444 -19.6845 -0.772201 145 22.3932 -20.5266 -0.76954 255 23.1033 -19.6901 -0.768851 154 22.3925 -20.397 -0.766708 255 22.9511 -19.748 -0.766337 92 22.7648 -19.838 -0.763693 203 22.482 -20.1578 -0.763686 150 22.3468 -20.2273 -0.761945 255 22.5334 -19.95 -0.760469 104 22.4706 -20.0207 -0.760468 128 22.5614 -19.8487 -0.75899 110 25.4244 -19.8252 -0.663875 69 25.188 -19.8965 -0.660029 93 24.4657 -20.0858 -0.648006 68 24.2192 -20.1393 -0.643782 82 24.2748 -19.8014 -0.639135 67 23.6206 -19.8299 -0.625978 66 22.5008 -20.9045 -0.622488 109 22.468 -20.7428 -0.618865 136 23.2308 -19.7524 -0.61656 114 22.4859 -20.5637 -0.615945 125 22.6028 -20.4113 -0.615516 111 22.5223 -20.4674 -0.614919 165 22.66 -20.2699 -0.614111 137 23.054 -19.7899 -0.613582 220 22.6997 -20.1773 -0.613248 89 22.736 -20.0821 -0.612276 86 22.9388 -19.8165 -0.611686 163 25.0056 -19.8953 -0.442359 110 24.9133 -19.9501 -0.441584 110 23.4775 -21.1522 -0.435118 109 23.3888 -20.8738 -0.429991 108 23.4033 -20.7551 -0.428609 108 23.3633 -20.589 -0.425761 107 23.9258 -19.8483 -0.424679 107 23.789 -19.9249 -0.423537 107 23.3651 -20.396 -0.423199 107 23.3641 -20.2662 -0.421451 107 23.6054 -19.8978 -0.420319 203 23.3837 -20.1548 -0.420272 107 23.5138 -19.9473 -0.419544 141 +unknow 0.800541 1 0 34 19.1009 22.8067 -1.97607 210 18.9768 22.8038 -1.97006 201 18.8475 22.8668 -1.96757 183 18.6896 22.821 -1.95759 200 19.2561 22.8697 -1.81869 157 19.1304 22.8657 -1.813 95 18.9897 22.8428 -1.80568 95 18.769 22.7948 -1.79363 93 18.633 22.7749 -1.78672 89 18.4934 22.7496 -1.7794 101 18.9849 22.767 -1.63468 157 18.8534 22.7543 -1.62884 119 18.7155 22.8059 -1.62586 130 18.4347 22.7541 -1.61232 123 19.2677 22.7826 -1.46907 89 18.7949 22.7251 -1.44952 189 18.7094 22.7671 -1.44829 136 18.8384 22.6667 -1.28268 135 18.7238 22.6735 -1.27924 181 18.6195 22.6921 -1.27661 195 18.4771 22.7362 -1.27378 135 17.9914 22.9374 -1.26641 139 18.8591 22.7644 -1.11837 208 18.7456 22.7726 -1.11541 250 18.6234 22.7695 -1.11182 185 18.3451 22.6457 -1.09961 158 18.7056 22.9824 -0.933033 250 18.6928 22.8201 -0.927869 231 18.8484 22.6449 -0.926476 183 18.7593 22.6825 -0.9254 201 18.9145 22.7658 -0.745794 97 18.7035 22.8749 -0.744188 185 18.8047 22.7788 -0.743862 198 18.7411 22.7579 -0.59054 150 +unknow 0.760579 1 0 69 17.4186 -17.5692 -1.60654 165 17.1395 -17.5612 -1.59173 143 18.6568 -17.6092 -1.52941 200 18.2335 -17.5933 -1.50788 82 17.8822 -17.528 -1.4877 173 17.7972 -17.5547 -1.48485 170 17.6682 -17.5375 -1.47781 106 17.5064 -17.5416 -1.47022 163 17.3766 -17.5215 -1.46305 128 17.1799 -17.5975 -1.45736 132 17.2584 -17.5121 -1.45695 94 18.5981 -17.4868 -1.37719 125 17.7838 -17.4728 -1.34005 183 17.7047 -17.5047 -1.33793 195 17.5698 -17.5357 -1.33334 132 17.8301 -17.2451 -1.33222 118 17.7287 -17.3094 -1.33048 103 17.4217 -17.4974 -1.32514 131 17.2642 -17.6137 -1.32339 115 17.3386 -17.5236 -1.32265 176 17.0395 -17.6041 -1.31321 108 17.053 -17.5075 -1.30948 107 17.8885 -17.666 -1.20347 233 17.981 -17.3712 -1.19561 203 17.7926 -17.4616 -1.19157 158 17.836 -17.3944 -1.19067 241 17.6366 -17.5825 -1.1901 174 17.3724 -17.5385 -1.17786 131 17.2527 -17.5275 -1.17269 209 17.1671 -17.6058 -1.17246 113 18.5341 -17.4794 -1.07899 64 17.9177 -17.5472 -1.05887 107 17.8255 -17.5669 -1.05624 232 17.6278 -17.647 -1.05199 194 17.9127 -17.2686 -1.04886 197 17.8211 -17.343 -1.04815 182 17.4331 -17.5618 -1.04198 125 17.1761 -17.5766 -1.03339 210 17.0707 -17.5788 -1.02974 121 17.9726 -17.283 -0.909244 226 17.5685 -17.6543 -0.90798 178 17.8537 -17.3314 -0.906911 228 17.7562 -17.3456 -0.904219 236 17.5446 -17.52 -0.902959 205 17.6645 -17.3649 -0.901886 229 17.5943 -17.4048 -0.900898 234 18.068 -17.6096 -0.762104 196 18.1019 -17.477 -0.759489 159 18.1499 -17.1956 -0.753336 169 17.493 -17.5375 -0.744397 180 17.6662 -17.3259 -0.743401 229 17.5847 -17.3546 -0.741937 202 17.4985 -17.433 -0.741704 200 17.8936 -17.2558 -0.591735 212 17.7232 -17.3623 -0.590186 164 17.527 -17.5519 -0.589989 162 17.759 -17.2884 -0.589351 175 17.5395 -17.4545 -0.588059 182 17.6144 -17.3646 -0.587738 174 17.5444 -17.6257 -0.464323 115 17.5361 -17.5069 -0.461889 190 17.6488 -17.3447 -0.460973 246 17.5499 -17.4108 -0.460322 205 17.6847 -17.271 -0.460271 54 17.6573 -17.6021 -0.29934 153 17.7622 -17.4307 -0.298407 87 17.6746 -17.4541 -0.297469 255 17.7207 -17.4405 -0.18239 75 17.9479 -17.5656 -0.0204526 96 +unknow 0.598796 1 0 317 14.1123 -1.11744 -1.34418 124 14.0478 -1.16781 -1.25671 211 14.0209 -1.05482 -1.25298 255 14.0058 -1.12011 -1.25194 255 13.9566 -1.00603 -1.24592 255 14.0694 -1.19888 -1.10426 223 14.0944 -1.20857 -1.01678 127 14.0564 -1.16077 -1.01314 255 14.0214 -1.04699 -1.00933 255 14.018 -1.09104 -1.00933 255 13.9948 -1.00075 -1.00674 255 13.9258 -0.929741 -1.00033 241 14.1664 -1.22332 -0.947927 87 14.0802 -1.10471 -0.940122 255 14.0668 -1.1704 -0.939469 255 14.0755 -0.948784 -0.938825 255 14.0709 -1.0151 -0.938823 255 14.0526 -0.902945 -0.936712 255 14.0339 -1.05682 -0.936056 190 14.0156 -0.856435 -0.93346 230 14.1017 -1.2267 -0.82871 142 14.1009 -1.1151 -0.827981 161 14.0636 -1.15655 -0.825486 112 14.0109 -1.06353 -0.821089 170 14.0098 -0.997059 -0.820652 221 13.9969 -0.951931 -0.81948 239 13.9919 -0.907412 -0.818895 212 13.9721 -0.83999 -0.817137 247 14.1134 -1.13619 -0.749536 102 14.07 -1.17727 -0.746826 119 14.0184 -1.01798 -0.742496 255 14.0134 -1.08403 -0.742494 138 14.0175 -0.973662 -0.742227 255 14.0165 -0.929366 -0.741958 255 14.0239 -0.775088 -0.741827 255 14.0188 -0.863189 -0.741824 255 13.9756 -0.816554 -0.73871 245 13.9605 -0.727724 -0.737359 236 14.0614 -1.1706 -0.667003 69 14.0073 -1.1217 -0.663401 156 14.0002 -1.03261 -0.662535 255 13.9829 -1.07549 -0.661664 182 13.9889 -0.965494 -0.661543 255 13.9912 -0.767075 -0.660928 255 13.9828 -0.876808 -0.660801 255 13.98 -0.920732 -0.660799 255 13.9489 -0.808641 -0.658442 246 13.8839 -0.717247 -0.654097 201 14.1464 -1.19215 -0.588072 84 14.1192 -1.05602 -0.585942 255 14.108 -0.988382 -0.585045 255 14.1071 -0.943796 -0.584822 255 14.0899 -1.0984 -0.58448 110 14.0864 -1.14266 -0.584478 159 14.0423 -0.828867 -0.580781 244 14.0382 -0.895031 -0.580778 255 14.0389 -0.784425 -0.580445 250 14.0273 -0.739606 -0.57966 149 14.0266 -0.673312 -0.579437 255 13.9848 -0.627355 -0.576967 210 14.1023 -1.21782 -0.506265 168 14.0776 -1.10431 -0.50455 141 14.0183 -1.14388 -0.501717 86 14.0233 -1.05562 -0.501619 255 13.9902 -0.986789 -0.499699 255 13.9893 -0.942556 -0.499499 255 13.9882 -0.89834 -0.499298 255 13.983 -0.853888 -0.498895 255 13.9807 -0.633489 -0.498194 255 13.9804 -0.54547 -0.497995 255 13.9735 -0.699157 -0.49799 255 13.9669 -0.786825 -0.497886 255 13.9673 -0.742833 -0.497786 255 13.9706 -0.589036 -0.497589 255 13.9461 -0.500191 -0.496177 242 14.144 -1.22615 -0.427553 163 14.1218 -1.15725 -0.426299 109 14.0695 -1.10859 -0.423789 255 14.0439 -0.995715 -0.422267 255 14.035 -0.950802 -0.421731 255 14.0271 -1.061 -0.421727 190 14.0211 -0.750956 -0.420571 255 14.0128 -0.860935 -0.420478 255 14.01 -0.904953 -0.420476 255 14.0166 -0.640374 -0.420126 239 13.9948 -0.793688 -0.419493 255 13.9895 -0.705256 -0.419047 255 14.0709 -1.22547 -0.334677 142 14.0327 -1.15546 -0.332985 94 14.0323 -1.11105 -0.332833 169 14.027 -1.02196 -0.332374 255 14.0087 -0.910033 -0.331376 255 14.0015 -0.799159 -0.330841 255 13.976 -1.0623 -0.330524 184 13.9803 -0.709796 -0.329843 255 13.9639 -0.951106 -0.329758 255 13.9537 -0.862333 -0.329145 255 13.95 -0.752165 -0.328764 255 13.943 -0.510327 -0.328079 255 13.9373 -0.553966 -0.327923 94 14.0573 -1.17207 -0.245617 237 14.013 -1.12416 -0.244072 248 14.0194 -1.01392 -0.244011 255 14.0065 -1.07938 -0.243751 242 13.9966 -0.968129 -0.243175 255 13.9976 -0.924025 -0.243112 255 13.9945 -0.813498 -0.242794 255 13.9973 -0.725447 -0.242732 255 13.9665 -0.877976 -0.242018 255 13.9726 -0.658218 -0.241832 255 13.9726 -0.614237 -0.241769 255 13.9722 -0.526288 -0.241644 255 13.9705 -0.570178 -0.241642 255 13.961 -0.767613 -0.241636 255 14.0663 -1.19521 -0.173615 254 14.0359 -1.12596 -0.172643 255 14.0254 -1.08076 -0.172265 255 13.9769 -1.03277 -0.170859 255 13.9697 -0.96604 -0.170537 255 13.9615 -0.877344 -0.170161 255 13.9587 -0.921201 -0.170159 255 13.964 -0.767437 -0.170056 255 13.9602 -0.833232 -0.170054 255 13.9623 -0.72335 -0.169949 255 13.9656 -0.613577 -0.169899 255 13.9625 -0.679381 -0.169897 255 13.9654 -0.569614 -0.169846 255 13.9632 -0.52558 -0.169739 255 14.1145 -1.21141 -0.0804474 156 14.0797 -1.09718 -0.0795548 255 14.0583 -1.13998 -0.0791866 204 14.068 -0.985204 -0.0791511 255 14.0632 -1.05149 -0.0791489 255 14.0539 -0.895558 -0.0787468 255 14.0467 -0.850816 -0.0785446 255 14.0371 -0.938797 -0.07846 255 14.0449 -0.740062 -0.0783853 255 14.0405 -0.784074 -0.078343 255 14.0332 -0.695268 -0.0781017 255 14.0124 -0.473799 -0.0774979 255 14.0064 -0.627843 -0.0774926 255 13.9901 -0.539093 -0.0770883 255 13.9863 -0.582962 -0.0770461 255 14.0533 -1.20419 -0.0137856 141 14.0231 -1.00204 -0.0130697 255 14.0112 -1.15617 -0.0130645 189 14.0236 -0.935672 -0.013009 255 14.0225 -0.891349 -0.0129477 255 14.0211 -0.78073 -0.0128257 255 14.0173 -0.846794 -0.0128235 255 14.0195 -0.73646 -0.0127644 255 14.0099 -0.647687 -0.0125475 255 14.0078 -0.691697 -0.012546 255 14.0108 -0.581573 -0.0125182 255 13.984 -1.04334 -0.0125025 221 14.0085 -0.537393 -0.0124569 255 14.0081 -0.493307 -0.0124271 255 13.9706 -1.08648 -0.0123439 255 14.1055 -1.19168 0.0786956 255 14.0651 -1.12162 0.0791115 255 14.0287 -1.07445 0.0794736 255 14.0307 -0.963838 0.0795244 255 14.022 -1.02966 0.0795629 255 14.0077 -0.918102 0.0797592 255 14.0005 -0.873487 0.0798485 255 14.005 -0.763395 0.079863 255 14.0025 -0.80739 0.0798645 255 14.0035 -0.675107 0.0799144 255 13.9993 -0.718998 0.0799341 255 14.0044 -0.56495 0.079947 255 14.0001 -0.520739 0.08 255 13.9965 -0.608693 0.0800031 255 14.1043 -1.2335 0.168492 98 14.0518 -1.11765 0.168657 255 14.0482 -1.16179 0.168658 253 14.0293 -1.07147 0.168726 255 14.0302 -1.00506 0.168734 255 14.0263 -0.916206 0.168758 255 14.0114 -0.959435 0.168793 255 13.9996 -0.759918 0.168851 255 13.9951 -0.803774 0.168858 255 13.9905 -0.84761 0.168865 255 13.9859 -0.715082 0.168893 255 13.9871 -0.649074 0.168896 255 13.9894 -0.495088 0.168902 255 13.9831 -0.604855 0.168911 255 13.9829 -0.560841 0.168915 255 13.9831 -0.512161 0.252013 255 13.9865 -0.578282 0.252034 255 13.9846 -0.666243 0.252044 255 13.9886 -0.622393 0.252049 255 13.9833 -0.73224 0.252053 255 13.9849 -0.776378 0.252067 255 13.9844 -0.820427 0.252075 255 14.0055 -0.932035 0.25217 255 14.0157 -0.866389 0.252187 255 14.0105 -0.976569 0.252197 255 14.0273 -1.022 0.252264 255 14.0403 -1.08945 0.252325 255 14.063 -1.1801 0.252425 237 14.0687 -1.13607 0.25243 255 13.982 -0.564273 0.334549 255 13.9977 -0.520891 0.334676 255 13.9893 -0.917213 0.334799 255 14.0081 -0.653566 0.334827 255 14.0141 -0.609736 0.334862 255 14.0089 -0.719783 0.334866 255 14.0165 -0.764353 0.334959 255 14.016 -0.808502 0.334979 255 14.0161 -0.874799 0.335018 255 14.0083 -1.07332 0.33508 255 14.0322 -0.964396 0.335223 255 14.0375 -1.03126 0.335317 255 14.0308 -1.11944 0.33532 255 14.069 -1.16706 0.335707 224 13.9696 -0.476271 0.427073 255 13.9734 -0.586293 0.427203 255 13.9771 -0.542465 0.427234 255 13.9854 -0.630794 0.427427 255 13.9841 -0.740819 0.427494 255 13.9894 -0.675005 0.427523 255 13.9976 -0.785615 0.427749 255 14.0031 -0.830044 0.427877 255 14.007 -0.896519 0.428006 255 14.0221 -0.941692 0.428293 255 14.033 -0.986695 0.428516 255 14.0362 -1.0534 0.428645 255 14.0508 -1.09886 0.428932 255 14.0751 -1.14521 0.429377 255 14.0914 -1.19107 0.429696 154 13.967 -0.512718 0.498116 227 13.9725 -0.468978 0.498198 230 13.9773 -0.557094 0.498369 229 13.9835 -0.601361 0.498538 225 13.9805 -0.66725 0.49854 225 13.9823 -0.711379 0.498625 224 13.984 -0.755525 0.498711 226 13.9863 -0.821778 0.498839 220 13.9936 -0.866349 0.49905 219 13.9928 -0.910441 0.499093 214 13.9939 -0.954676 0.499179 224 13.9992 -1.02136 0.49939 221 14.0139 -1.06673 0.499769 223 14.0244 -1.11188 0.500064 218 14.0449 -1.18018 0.500611 197 14.1088 -1.23033 0.502037 101 13.9223 -0.538931 0.566907 170 13.9466 -0.583706 0.567584 127 13.9547 -0.474281 0.567684 111 13.9506 -0.627776 0.567742 198 13.9595 -0.694084 0.568055 206 13.9653 -0.738342 0.568265 255 13.987 -0.849647 0.568996 255 13.9968 -0.78405 0.56915 255 13.9942 -0.894203 0.569257 255 13.9993 -0.938684 0.569467 255 14.0182 -0.984159 0.57004 255 14.0245 -1.13966 0.570513 255 14.0394 -1.0521 0.570717 255 14.038 -1.09635 0.570771 255 14.0767 -1.2106 0.572021 205 13.9462 -0.51737 0.653764 92 13.9485 -0.561353 0.653895 63 13.9527 -0.605439 0.654089 61 13.9475 -0.714997 0.654093 60 13.9587 -0.649654 0.654348 60 13.9611 -0.75972 0.654609 59 13.949 -1.06715 0.654877 92 13.9809 -0.959252 0.655646 95 13.9782 -1.02528 0.655712 89 13.9986 -0.805946 0.655898 44 13.9854 -1.11422 0.656166 255 14.0066 -0.872668 0.656286 44 14.0257 -0.918147 0.656996 44 14.0874 -1.16709 0.659579 246 13.9936 -0.470409 0.746356 65 13.9932 -0.536423 0.746436 40 13.9875 -0.66828 0.74644 40 13.9935 -0.580458 0.746515 40 13.9956 -0.624592 0.746671 40 13.9873 -1.08735 0.747461 40 14.0084 -0.934134 0.747843 49 14.0341 -0.73671 0.748378 40 14.0312 -0.824994 0.748458 40 14.0377 -0.781115 0.748612 40 14.0531 -0.892704 0.749467 40 14.0455 -1.13617 0.749862 227 14.064 -1.02653 0.750246 40 14.1734 -1.19109 0.754974 131 13.9153 -1.07324 0.809356 82 13.9515 -0.767899 0.810039 117 13.9537 -0.834004 0.810302 96 13.9711 -0.615 0.810555 151 13.9809 -0.571446 0.8109 149 13.9927 -0.527916 0.811332 128 13.9721 -0.923287 0.811345 109 13.9692 -0.967177 0.811347 120 13.9858 -0.725781 0.811425 143 13.994 -0.682143 0.811684 125 13.9963 -1.03541 0.812737 97 14.0109 -0.881713 0.812905 82 13.9955 -1.12382 0.813 255 14.1354 -1.20239 0.819333 196 13.991 -0.80508 0.904185 74 14.0228 -0.56399 0.905176 116 14.0229 -0.652264 0.905379 126 14.0012 -1.07073 0.905593 37 14.0254 -0.762799 0.905782 102 14.0297 -0.718831 0.905881 74 14.0452 -0.498574 0.906173 90 14.0241 -0.917474 0.906187 115 14.0289 -0.873532 0.906286 63 14.024 -1.00599 0.90649 51 14.0528 -0.609366 0.906776 84 14.0416 -1.11812 0.907793 245 14.065 -0.964453 0.908387 65 14.1614 -1.17221 0.91399 199 +unknow 0.565887 1 0 495 13.8729 0.127761 -1.08126 93 14.0372 1.19634 -0.665716 164 14.1606 1.2596 -0.58928 71 14.1445 1.19097 -0.588041 175 14.0566 1.13893 -0.582871 255 14.0878 1.24604 -0.505743 186 14.0199 1.17361 -0.501999 99 13.9961 1.01685 -0.500173 255 13.9832 1.08218 -0.499771 218 13.9964 0.862292 -0.499662 255 13.9737 1.12563 -0.499469 196 13.9753 0.971249 -0.498958 110 13.9913 0.619579 -0.498743 255 13.9942 -0.435981 -0.498505 255 13.9712 0.816739 -0.498245 234 13.9698 0.508768 -0.497425 255 13.9736 -0.391359 -0.497394 255 13.9693 0.464815 -0.497322 255 13.9572 0.574201 -0.496921 255 13.9456 0.310618 -0.495901 255 13.9331 0.00391206 -0.495081 255 13.9062 0.156867 -0.493772 255 14.1323 1.24521 -0.42719 52 14.096 1.214 -0.335683 54 14.0081 1.16228 -0.332139 143 13.9483 0.915113 -0.329127 202 13.9575 0.761699 -0.329122 255 13.9465 0.849024 -0.328894 183 13.9354 0.958272 -0.328744 242 13.9339 0.716557 -0.32812 188 13.9452 -0.444621 -0.328081 236 13.9331 0.650705 -0.327964 194 13.9331 0.606849 -0.327885 194 13.9191 0.803536 -0.327738 104 13.9309 0.562916 -0.32773 172 13.9378 -0.356716 -0.327699 217 13.9346 -0.400438 -0.32762 221 13.9353 -0.290939 -0.327547 213 13.9235 0.496928 -0.327342 174 13.9243 0.409385 -0.327262 106 13.9288 -0.203249 -0.327242 221 13.9241 -0.246926 -0.327086 217 13.917 0.452941 -0.327033 169 13.9123 -0.00627686 -0.326555 132 14.0274 1.21581 -0.24486 74 13.9972 1.14669 -0.243698 243 13.9947 1.10223 -0.243503 111 13.9801 0.946482 -0.24266 255 13.9651 0.989525 -0.242275 255 13.9757 0.791887 -0.242204 255 13.9483 1.05439 -0.24189 239 13.957 0.900838 -0.241821 255 13.9572 0.834802 -0.24169 255 13.9644 0.703231 -0.241685 255 13.9656 0.63732 -0.241618 255 13.9675 0.593439 -0.241617 255 13.9739 -0.416479 -0.241583 255 13.9705 -0.460313 -0.241517 255 13.9653 0.549393 -0.241487 255 13.9677 0.483575 -0.241484 255 13.9704 -0.218774 -0.241332 255 13.9671 -0.372375 -0.241327 255 13.9697 -0.109039 -0.241271 255 13.9636 -0.262571 -0.241137 255 13.9627 -0.306435 -0.241135 255 13.9442 0.746101 -0.241107 255 13.9233 -0.152505 -0.239787 255 13.912 -0.0649917 -0.239404 255 13.9081 -0.0212829 -0.239277 255 13.8961 0.0441932 -0.238892 255 14.0821 1.19816 -0.17413 199 14.0161 1.14832 -0.172233 255 13.9888 1.03561 -0.171255 255 13.9817 1.10137 -0.171203 255 13.952 0.988912 -0.17017 255 13.9531 0.944947 -0.170114 255 13.9574 0.879188 -0.170112 255 13.9586 0.791247 -0.170001 255 13.9541 0.834977 -0.169948 255 13.9551 0.747084 -0.169837 255 13.9584 0.681311 -0.169835 255 13.9605 0.637458 -0.169833 255 13.9635 -0.459704 -0.169687 255 13.9564 0.593349 -0.169669 255 13.9591 0.527579 -0.169667 255 13.9601 -0.371789 -0.169528 255 13.9589 -0.415645 -0.169526 255 13.9527 0.483456 -0.169449 255 13.9586 -0.262054 -0.169423 255 13.9572 -0.327829 -0.169421 255 13.958 -0.17431 -0.169372 255 13.9554 -0.218122 -0.169317 255 13.9529 -0.0646473 -0.169214 255 13.9506 -0.10846 -0.169158 255 13.9451 -0.0207816 -0.168998 255 13.9342 0.43903 -0.168906 255 13.941 0.0230265 -0.168892 255 14.0643 1.14002 -0.0793869 255 14.0507 1.18334 -0.0791848 217 14.0529 1.02803 -0.0789757 255 14.0439 1.09392 -0.0788964 255 14.05 0.983439 -0.0788519 255 14.0341 0.827325 -0.0783168 255 14.02 0.892792 -0.0781152 255 14.013 0.737708 -0.0777839 255 13.9972 0.93546 -0.0777093 255 13.9967 0.780919 -0.0775003 255 14.0051 -0.385491 -0.0772973 255 13.9844 0.670078 -0.0771298 255 13.9909 0.51627 -0.0771245 255 13.9925 0.472316 -0.0771229 255 13.9979 -0.121364 -0.0770617 255 13.9957 -0.27527 -0.0770565 255 13.9824 0.625951 -0.0770467 255 13.9952 -0.187304 -0.0770188 255 13.9923 -0.341175 -0.0770136 255 13.9899 -0.429084 -0.0770105 255 13.9823 0.581937 -0.0770044 255 13.9942 -0.0773733 -0.0769818 255 13.9905 -0.231211 -0.0769358 255 13.9864 -0.0334045 -0.0768204 255 13.9742 0.0763569 -0.0765796 255 13.9744 0.0324551 -0.0765781 255 14.013 1.18232 -0.013208 190 14.0119 1.07149 -0.013047 255 14.0084 0.982744 -0.0128867 255 14.0114 0.938733 -0.0128851 255 14.0077 0.872217 -0.0127572 255 14.0089 0.783965 -0.0126911 255 14.0044 0.827865 -0.0126613 255 14.0045 0.717546 -0.0125632 255 13.9688 1.1345 -0.012452 255 13.9967 0.673084 -0.0124045 255 13.9986 0.585048 -0.0123699 255 13.9992 0.519004 -0.0123363 255 14.0043 -0.427096 -0.0123349 255 14.0016 -0.382981 -0.0122736 255 13.9968 0.474894 -0.0122719 255 13.9987 -0.338887 -0.0122123 255 13.9574 1.02333 -0.0121339 255 13.9901 0.364707 -0.012111 255 13.9862 0.430572 -0.0120817 255 13.9916 -0.184794 -0.0120605 255 13.9897 -0.294678 -0.0120568 255 13.985 -0.22864 -0.0119646 255 13.9761 -0.140647 -0.0118106 255 13.9606 -0.0746689 -0.0115614 255 13.9328 0.626269 -0.0113657 255 13.9388 -0.0307201 -0.0112172 255 13.9332 0.319532 -0.0111979 152 13.9308 0.0130776 -0.0110931 255 13.8203 0.121727 -0.00936826 255 13.8126 0.0782783 -0.00924101 255 14.0683 1.20378 0.0789397 102 13.9899 1.10841 0.0797251 255 13.9824 1.15202 0.0797599 255 13.9853 1.06383 0.0797994 255 13.9882 0.997772 0.0798198 255 13.9942 0.909862 0.079823 255 13.9893 0.953682 0.0798396 255 13.9923 0.843534 0.0798798 255 13.9949 0.799571 0.0798814 255 13.9974 0.755601 0.079883 255 13.9968 0.689427 0.0799215 255 13.9989 0.645452 0.0799231 255 13.9968 0.60129 0.0799611 255 14.0037 -0.410767 0.0799963 255 13.9986 0.447218 0.0800028 255 14.0004 -0.454698 0.080016 255 13.9927 0.557065 0.0800172 255 14.0009 -0.366674 0.0800311 255 13.9911 0.490973 0.0800558 255 13.9974 -0.256601 0.0800819 255 13.9956 -0.0586885 0.0801114 255 13.9927 -0.168587 0.0801333 255 13.9905 -0.300456 0.080138 255 13.9914 -0.102635 0.0801493 255 13.9877 -0.014726 0.0801825 255 13.8954 0.0943365 0.0810153 255 13.8897 0.0506491 0.0810714 255 14.0786 1.22977 0.16848 182 14.03 1.11468 0.168642 255 13.9766 1.15473 0.168776 255 13.9816 1.06674 0.168785 255 13.9784 1.00028 0.168808 255 13.9775 0.956096 0.168821 255 13.9785 0.912049 0.168828 255 13.9773 0.867891 0.16884 255 13.9812 0.802019 0.168842 255 13.9797 0.757886 0.168855 255 13.982 0.713953 0.168856 255 13.9832 0.647971 0.168864 255 13.9812 0.603876 0.168876 255 13.979 0.5598 0.168889 255 13.9787 0.515807 0.168896 255 13.9895 -0.363104 0.168908 255 13.9769 0.449804 0.168909 255 13.9883 -0.407062 0.16891 255 13.9869 -0.451003 0.168912 255 13.9839 -0.253067 0.168927 255 13.983 -0.296995 0.168928 255 13.9806 -0.209069 0.168936 255 13.9761 -0.0552952 0.168947 253 13.9578 -0.0990449 0.168998 248 13.9423 0.404916 0.169008 184 13.9022 0.0106505 0.169146 255 13.8861 0.0542903 0.169188 255 13.8124 0.0363974 0.251409 255 13.9438 0.431397 0.251844 166 13.9585 -0.0067923 0.251885 255 13.9642 0.0809519 0.251902 255 13.9763 -0.0726327 0.251946 255 13.974 0.542279 0.251951 255 13.9776 -0.160467 0.251955 255 13.9766 -0.226329 0.251958 255 13.9776 0.498454 0.251959 255 13.98 -0.116564 0.25196 255 13.9743 0.630252 0.251961 255 13.9782 0.586437 0.251969 255 13.9771 0.696416 0.251979 255 13.9706 0.850174 0.25198 255 13.9765 0.784449 0.251989 255 13.9789 0.74054 0.25199 255 13.9719 0.894327 0.251991 255 13.971 0.938352 0.251996 255 13.984 -0.424228 0.252003 255 13.9846 -0.468232 0.252011 255 13.9764 1.00492 0.252027 255 13.9851 1.04974 0.252064 255 13.9957 1.09479 0.252108 255 14.0361 1.1424 0.25225 255 14.0564 1.21081 0.252332 210 13.9272 -0.0584667 0.333926 255 13.9552 0.0509688 0.334179 255 13.9543 0.292117 0.334189 255 13.9551 0.248279 0.334191 255 13.9593 -0.0148021 0.334218 255 13.9598 0.20449 0.334229 255 13.961 0.0948373 0.334233 255 13.9627 0.138724 0.334249 255 13.9623 -0.168349 0.33426 255 13.9613 0.336136 0.334261 255 13.9616 0.401973 0.334277 255 13.9677 -0.212312 0.334316 255 13.967 -0.256196 0.334318 255 13.9585 0.643404 0.334324 255 13.971 -0.102623 0.334331 255 13.9707 0.490088 0.334384 255 13.9685 0.59988 0.334399 255 13.9723 0.556072 0.334419 255 13.9782 0.446378 0.334441 255 13.9785 -0.366271 0.33445 255 13.9841 -0.300491 0.334485 255 13.9824 0.688494 0.334561 255 13.9933 -0.41068 0.334599 255 13.989 0.754894 0.334651 255 14 -0.454922 0.334674 255 13.9905 0.799056 0.334686 255 13.9858 0.909038 0.334701 255 13.99 0.843118 0.334703 255 13.9869 0.953233 0.334736 255 14.0078 0.998837 0.334955 255 14.0089 1.06528 0.335007 255 14.0099 1.15392 0.335078 255 14.0154 1.11006 0.335098 255 14.1178 1.20726 0.336104 208 13.9354 -0.0809859 0.426394 255 13.9578 0.225899 0.426764 255 13.9595 0.0724223 0.426769 255 13.9625 0.18211 0.426829 255 13.9636 0.0285742 0.426834 255 13.9651 -0.124978 0.426871 255 13.9651 0.269921 0.426889 255 13.9661 0.313839 0.426919 255 13.9692 0.116376 0.426926 255 13.9696 -0.0372331 0.426931 255 13.9685 0.379768 0.42698 255 13.9717 -0.234774 0.427001 255 13.9637 0.577281 0.427005 255 13.9678 0.467599 0.427009 255 13.9692 0.423711 0.427011 255 13.9747 -0.168952 0.427031 255 13.9608 0.687042 0.427033 255 13.9639 0.62125 0.427035 255 13.9719 -0.322599 0.427036 255 13.9695 0.533572 0.42707 255 13.9769 -0.278775 0.427098 255 13.9743 -0.38854 0.427102 255 13.973 -0.43244 0.427103 255 13.9597 0.818949 0.427124 255 13.9645 0.73122 0.427127 255 13.9662 0.775314 0.427189 255 13.9608 0.929108 0.427247 255 13.9636 0.88524 0.427248 255 13.9502 1.1267 0.427303 255 13.9817 0.974673 0.427625 255 13.985 1.04116 0.42775 255 13.9845 1.17378 0.427904 86 13.9976 1.08636 0.428002 255 13.9524 0.036005 0.497594 233 13.9561 0.255255 0.497712 239 13.9577 0.145636 0.497716 244 13.9562 0.342983 0.497751 237 13.96 0.101797 0.49776 247 13.9595 -0.161347 0.497769 231 13.9592 0.299176 0.497795 241 13.9624 -0.00785224 0.497805 218 13.9609 -0.205235 0.497812 238 13.954 0.540392 0.497828 231 13.9643 -0.0517277 0.497849 205 13.9651 0.189579 0.497882 243 13.9642 -0.249172 0.497897 238 13.9611 0.452828 0.497915 233 13.9681 -0.0956326 0.497934 221 13.9649 -0.315023 0.497941 231 13.9644 0.409021 0.497959 229 13.9658 -0.358949 0.497985 227 13.9666 -0.402883 0.498028 234 13.9612 0.606558 0.498035 232 13.9696 0.497023 0.498123 234 13.9673 0.650781 0.498201 237 13.9711 0.694942 0.498326 226 13.9672 0.804754 0.498364 230 13.9737 0.761083 0.498449 231 13.9746 0.849221 0.498572 227 13.9739 0.893241 0.498612 230 13.9784 1.0038 0.49886 231 13.9815 0.959884 0.498861 233 13.9911 1.04888 0.499193 229 14.0419 1.11914 0.500364 235 14.0522 1.16438 0.500656 47 13.8866 0.0734029 0.565691 134 13.8942 0.26992 0.565944 139 13.8955 -0.188469 0.56596 124 13.9052 0.313862 0.566254 101 13.9107 -0.0356805 0.566318 156 13.9106 -0.341652 0.566433 127 13.9158 0.161056 0.566467 132 13.9122 -0.429164 0.56654 138 13.9208 -0.232508 0.566637 119 13.9196 0.379851 0.566668 103 13.9248 0.00805578 0.56668 104 13.922 -0.276276 0.56669 121 13.9249 0.226813 0.566725 105 13.9285 -0.0794514 0.566787 102 13.9229 0.467516 0.56682 122 13.9323 0.117502 0.566884 102 13.9303 0.423967 0.566978 104 13.9402 -0.123293 0.567101 99 13.9434 -0.38623 0.567317 98 13.9414 0.512025 0.567338 133 13.9548 0.578408 0.567752 227 13.9768 0.667365 0.568424 255 13.9789 0.623452 0.568425 255 13.9775 0.733439 0.568526 255 13.9791 0.777577 0.568628 255 13.9786 0.821611 0.568678 255 13.9727 0.975548 0.568777 255 13.9786 0.887736 0.56878 255 13.9736 1.01974 0.568879 255 13.9797 0.93192 0.568882 255 13.9751 1.13029 0.569135 255 13.9965 1.0878 0.569604 255 14.0731 1.18291 0.571783 57 13.9212 0.489948 0.652894 119 13.9308 -0.166398 0.65298 119 13.9363 0.205695 0.653161 101 13.9357 0.337068 0.653221 94 13.9367 0.293288 0.653222 135 13.9376 0.249506 0.653224 98 13.9382 -0.210309 0.653239 84 13.9395 -0.254134 0.653305 110 13.9431 0.140066 0.653356 138 13.9435 0.0962577 0.653358 92 13.9438 -0.0132563 0.653361 138 13.9378 -0.407448 0.653375 102 13.9406 0.446756 0.653475 88 13.9517 0.0524702 0.653617 96 13.9517 -0.0571072 0.65362 92 13.9514 -0.100935 0.653622 91 13.9486 -0.298154 0.653628 113 13.948 0.403122 0.653669 120 13.9485 -0.451648 0.653762 101 13.9449 0.644313 0.653854 107 13.9437 0.71012 0.653916 113 13.9549 0.600832 0.654113 115 13.947 0.79816 0.654171 102 13.9647 0.557288 0.654372 83 13.971 -0.364555 0.654403 80 13.9594 0.754864 0.654494 108 13.9683 0.843371 0.654942 69 13.9702 0.90956 0.655132 78 13.9813 1.06475 0.655835 255 13.9941 0.999408 0.656095 105 13.9978 1.11021 0.656477 255 14.0122 1.15563 0.657055 232 14.1818 1.21416 0.662653 45 13.9583 0.188659 0.744708 90 13.9638 0.320407 0.745013 84 13.9668 0.276569 0.745092 89 13.963 -0.425533 0.745116 73 13.9709 -0.272051 0.745266 79 13.9689 0.430323 0.745319 79 13.9753 0.0791465 0.745331 84 13.9755 0.0352373 0.745333 93 13.9773 -0.0745332 0.745414 94 13.9766 -0.162348 0.745417 85 13.9762 0.386615 0.745553 83 13.9796 0.232914 0.745558 59 13.9714 0.628223 0.7457 72 13.9751 0.540425 0.745703 73 13.9795 0.474632 0.745782 76 13.9856 -0.22835 0.745806 80 13.9895 -0.0306216 0.745877 62 13.9859 -0.31627 0.745886 87 13.9843 -0.382169 0.745889 81 13.9793 0.584585 0.745933 73 13.9763 0.694469 0.746007 42 13.995 -0.11856 0.746112 58 13.999 0.123304 0.746259 56 13.9856 0.783074 0.746546 40 13.988 0.739135 0.746548 40 13.9851 0.827126 0.746622 63 13.987 0.893423 0.746852 43 14.004 0.93873 0.747625 45 14.0208 1.09488 0.748703 248 14.0193 1.13909 0.748779 227 14.0361 1.05174 0.749169 99 14.1113 1.21371 0.75257 40 13.9348 0.328369 0.808528 177 13.9396 0.175148 0.80862 175 13.9484 0.0875935 0.80897 135 13.9482 -0.109602 0.808977 176 13.9458 0.438209 0.809131 160 13.9502 -0.263046 0.809155 169 13.9537 0.284913 0.80931 126 13.9586 0.0218565 0.809405 184 13.9586 -0.0219934 0.809407 134 13.9605 -0.065863 0.809495 138 13.9403 0.789076 0.809553 140 13.9615 -0.175528 0.809586 124 13.9547 0.526255 0.809648 167 13.9411 0.877023 0.80981 139 13.9669 -0.219492 0.809847 132 13.961 -0.460787 0.809856 157 13.9562 0.6361 0.809905 165 13.9644 -0.416988 0.809941 120 13.9643 0.482669 0.809997 131 13.9671 0.394925 0.81 133 13.9498 0.833557 0.810072 137 13.9726 0.241354 0.810092 136 13.974 0.131607 0.810096 129 13.9567 0.746 0.810161 166 13.9717 -0.373287 0.810199 173 13.9508 0.943623 0.810415 109 13.9661 0.6805 0.810424 130 13.9787 -0.329544 0.810458 134 13.9761 0.592977 0.810687 127 13.9798 1.14425 0.812316 255 13.9944 1.03485 0.81258 230 13.9973 1.1014 0.812924 255 14.1056 1.19893 0.81795 83 13.9946 0.206788 0.903251 143 13.9943 0.404728 0.903444 142 13.9792 0.800322 0.90353 93 13.9955 0.492798 0.903641 91 14.0015 0.36093 0.903745 86 14.0039 0.250959 0.903749 93 14.0101 0.00896383 0.903957 98 13.9816 0.954811 0.904125 67 13.9873 0.866949 0.904128 89 14.0138 -0.101093 0.904161 96 14.018 -0.0570752 0.904359 97 14.0158 -0.255239 0.904366 91 14.02 0.0530344 0.904455 101 14.0205 -0.211258 0.904564 105 14.0234 0.141171 0.904652 91 13.9964 0.911686 0.904726 88 14.0056 0.75773 0.904731 130 14.0099 0.713834 0.904832 87 14.0189 0.559832 0.904938 136 14.029 0.295544 0.905047 101 14.0333 -0.145288 0.905162 99 14.0268 -0.453839 0.905172 119 14.0211 0.648193 0.905234 96 14.0231 0.604137 0.905236 92 14.0309 0.449982 0.905341 93 14.0349 -0.299659 0.905367 139 14.0417 0.0972724 0.905553 96 14.0381 -0.410043 0.90567 83 14.0473 -0.366132 0.906068 84 14.0314 1.0691 0.907018 253 14.0423 1.15875 0.907915 186 14.0459 1.11463 0.907916 255 14.2615 1.24495 0.919203 38 +unknow 0.975446 1 0 262 13.0677 25.1317 -2.10029 85 12.7637 25.2205 -2.09542 85 12.8428 25.1803 -2.09541 85 12.9155 25.1274 -2.09427 85 12.6349 25.2608 -2.09363 84 12.536 25.261 -2.09005 84 12.0465 25.3658 -2.08029 129 11.9192 25.406 -2.07883 126 10.9665 25.7557 -2.07315 158 11.1668 25.6652 -2.07282 158 11.0775 25.68 -2.07103 153 10.8747 25.7643 -2.07088 162 10.7891 25.7874 -2.0699 158 10.6545 25.8066 -2.06714 148 10.4854 25.8564 -2.06567 164 10.5659 25.8215 -2.06551 151 10.3583 25.8925 -2.06454 155 10.2696 25.9064 -2.06291 158 10.1765 25.9089 -2.06031 153 12.2659 24.912 -2.05473 97 9.57208 26.0384 -2.05267 151 9.48343 26.0496 -2.05104 164 9.35453 26.0771 -2.04958 147 9.18853 26.1297 -2.04909 155 9.26724 26.0913 -2.04828 148 8.97785 26.186 -2.0478 153 9.05942 26.1558 -2.04763 154 8.80303 26.2116 -2.04519 157 8.88341 26.1782 -2.0447 153 8.67379 26.2358 -2.04373 159 8.58576 26.2459 -2.04227 159 8.49286 26.2405 -2.0395 154 11.8933 24.8404 -2.03618 132 12.023 24.7113 -2.0313 102 11.9323 24.722 -2.02886 101 9.59743 24.6584 -1.948 115 9.47543 24.6885 -1.9467 150 9.38582 24.6865 -1.94394 220 9.19094 24.7576 -1.94378 112 9.28229 24.6468 -1.93792 166 12.5929 25.0235 -1.84857 189 12.2032 24.7318 -1.81659 255 12.1078 24.7342 -1.81366 248 12.0056 24.7219 -1.80955 250 11.8812 24.7621 -1.80824 210 11.769 24.7273 -1.80237 193 11.5339 24.7322 -1.79533 255 8.46448 25.8029 -1.78555 192 10.8689 24.7116 -1.77377 217 10.7785 24.7163 -1.77143 246 8.51768 25.5584 -1.7697 210 10.6873 24.719 -1.76893 245 10.5907 24.7084 -1.76541 246 10.4515 24.7048 -1.76116 255 10.3607 24.7063 -1.75867 233 8.54494 25.3747 -1.75752 188 10.2677 24.7019 -1.75574 236 10.1337 24.7076 -1.75236 236 10.0395 24.6986 -1.74914 235 9.95216 24.706 -1.74723 244 9.81862 24.71 -1.74386 255 8.54214 25.1061 -1.73874 163 9.5536 24.7196 -1.73741 194 9.62321 24.6691 -1.73579 255 9.40353 24.6768 -1.73051 255 9.31608 24.6801 -1.72846 209 8.61332 24.9299 -1.72818 171 9.22728 24.6794 -1.72611 230 8.83583 24.8138 -1.72553 255 8.67314 24.85 -1.72407 218 8.74584 24.8076 -1.72289 196 9.01534 24.7024 -1.7223 224 8.92342 24.6912 -1.71922 255 12.9527 24.8815 -1.69348 107 12.8415 24.8582 -1.6886 255 12.678 24.8278 -1.68169 185 12.555 24.7785 -1.67492 201 12.4484 24.7607 -1.67058 243 12.1326 24.8082 -1.66395 175 12.2016 24.7521 -1.66259 189 11.8891 24.8019 -1.65636 186 11.9989 24.7312 -1.65528 124 11.6558 24.7118 -1.64403 205 11.5249 24.7357 -1.64173 233 10.8976 24.6938 -1.62155 187 10.7644 24.7064 -1.61871 226 10.6647 24.6888 -1.61491 229 8.49331 25.5132 -1.61468 222 10.5729 24.6891 -1.61248 232 10.4379 24.6946 -1.60923 234 10.3433 24.6867 -1.60625 231 10.2497 24.6804 -1.6034 236 8.51189 25.3028 -1.60153 255 10.1174 24.6896 -1.60056 233 10.0233 24.6806 -1.59758 238 9.74915 24.7837 -1.59718 106 9.92939 24.6712 -1.5946 247 9.43427 24.7794 -1.58919 128 9.77701 24.6268 -1.58796 201 8.52474 25.0794 -1.58744 179 9.61559 24.671 -1.58674 95 9.53659 24.6974 -1.58647 129 9.32688 24.7305 -1.5835 210 8.61167 24.9484 -1.58093 226 8.67494 24.8779 -1.57781 232 9.21084 24.6568 -1.57604 106 9.0094 24.7077 -1.57456 255 8.7352 24.7997 -1.57415 235 8.92228 24.7096 -1.57266 255 8.80505 24.7495 -1.57253 250 12.8599 24.8082 -1.52891 191 12.7398 24.7669 -1.5232 215 12.5876 24.7573 -1.51835 226 12.4755 24.729 -1.51363 245 12.2747 24.8137 -1.51276 158 12.3575 24.6878 -1.50804 253 12.1429 24.7429 -1.50518 130 12.0223 24.693 -1.49909 140 11.9185 24.6768 -1.49537 120 11.6781 24.6723 -1.48866 241 11.5861 24.6781 -1.48655 255 8.53122 25.7819 -1.48001 120 10.8288 24.6582 -1.46592 254 10.6933 24.665 -1.46294 245 8.52203 25.4863 -1.46236 131 10.5976 24.6563 -1.46009 253 10.5029 24.6491 -1.45735 253 10.3688 24.656 -1.4545 249 8.55464 25.3195 -1.45316 122 10.2782 24.6572 -1.45238 248 9.65455 24.9058 -1.45227 209 10.1785 24.6359 -1.44878 253 9.54398 24.8522 -1.44668 146 10.0464 24.6448 -1.44617 251 9.33725 24.8965 -1.44469 107 9.95547 24.6429 -1.44394 251 9.86311 24.637 -1.44145 251 9.77017 24.6289 -1.43884 255 8.58875 25.0316 -1.43687 133 9.63578 24.6282 -1.43574 235 9.33747 24.6618 -1.43102 102 8.7108 24.8774 -1.43028 231 8.63129 24.9008 -1.43003 157 9.15236 24.6395 -1.42568 247 8.75753 24.7615 -1.42444 221 8.94902 24.6844 -1.42394 255 9.02652 24.6562 -1.42394 255 8.8694 24.7068 -1.42357 250 12.8783 24.8926 -1.36725 173 12.7573 24.8494 -1.36197 201 12.6049 24.8397 -1.35758 216 12.4945 24.815 -1.35354 218 12.3871 24.7951 -1.34983 218 12.2702 24.7552 -1.34489 220 12.1306 24.7661 -1.34196 228 12.031 24.7591 -1.33916 239 11.9323 24.7536 -1.33646 238 11.7976 24.7717 -1.3341 238 11.701 24.7689 -1.33163 249 11.602 24.7603 -1.32882 247 10.9371 24.7427 -1.31242 219 10.8393 24.7312 -1.30961 244 10.7044 24.7398 -1.30702 254 8.59482 25.4988 -1.30436 157 10.607 24.7274 -1.30421 242 10.5168 24.7312 -1.30242 242 10.3816 24.7363 -1.29972 250 10.287 24.7282 -1.29725 243 10.1987 24.7345 -1.29567 251 8.6504 25.2691 -1.29312 195 10.0633 24.7361 -1.29287 242 9.97281 24.7361 -1.29096 250 9.88101 24.732 -1.28882 235 9.79081 24.7314 -1.28691 247 9.65894 24.7382 -1.28455 239 8.67702 25.0889 -1.28401 184 9.56537 24.7274 -1.28208 239 8.73216 24.9936 -1.27996 215 9.46981 24.7107 -1.27927 227 8.83985 24.9239 -1.27827 129 9.3413 24.7233 -1.27736 230 9.26148 24.7469 -1.27703 235 9.06343 24.8095 -1.27647 128 9.17332 24.7478 -1.27534 255 8.957 24.7589 -1.27175 128 12.8138 24.8185 -1.2047 152 12.7011 24.7911 -1.20085 213 12.5579 24.799 -1.19792 215 12.4467 24.7723 -1.19418 214 12.3429 24.7595 -1.19125 216 12.2411 24.7498 -1.18852 216 12.0953 24.748 -1.18518 224 11.9957 24.741 -1.18265 222 11.8979 24.7372 -1.18033 220 8.94805 25.9483 -1.18028 136 11.7529 24.7335 -1.17699 220 11.6521 24.7215 -1.17426 255 8.91619 25.5957 -1.16287 133 10.8971 24.7124 -1.15798 213 10.8002 24.7026 -1.15555 215 8.97661 25.384 -1.15376 130 10.667 24.7147 -1.15343 213 10.5712 24.7059 -1.1511 217 10.481 24.7096 -1.14948 218 9.01791 25.2484 -1.14799 147 10.3474 24.7182 -1.14726 217 10.2536 24.7118 -1.14514 215 10.1653 24.7181 -1.14372 212 9.06796 25.1392 -1.14364 132 10.0344 24.7305 -1.1418 218 9.94544 24.7341 -1.14028 210 9.11538 25.0243 -1.13898 134 9.84768 24.7152 -1.13755 205 9.7619 24.7256 -1.13644 208 9.64018 24.7583 -1.13574 200 9.54793 24.7512 -1.13371 195 9.46513 24.768 -1.13301 194 9.34618 24.8067 -1.1327 193 9.18806 24.8593 -1.1324 198 9.25911 24.8116 -1.13139 235 12.8228 24.9263 -1.04974 132 9.82928 26.2022 -1.04773 165 12.7045 24.8881 -1.04579 165 12.5727 24.9191 -1.04435 148 12.456 24.8816 -1.0405 164 12.3503 24.8651 -1.03771 171 12.2439 24.8464 -1.03484 177 12.0353 24.9149 -1.0335 249 12.1039 24.8572 -1.03251 173 11.8984 24.83 -1.0274 125 11.7591 24.8388 -1.02506 127 9.76461 25.4189 -1.01379 109 10.9095 24.8355 -1.0091 100 9.79974 25.2726 -1.00822 99 9.86476 25.0884 -1.00157 99 9.90236 24.9533 -0.996543 99 10.0733 24.8136 -0.993577 255 9.94365 24.8293 -0.992053 98 10.2008 24.6815 -0.990252 231 10.1149 24.6931 -0.989266 239 10.0979 26.1156 -0.870254 179 12.2018 24.9191 -0.860427 143 12.0972 24.9034 -0.858116 255 11.9719 24.9439 -0.857425 106 10.0349 25.4773 -0.846438 105 10.0962 25.2832 -0.840348 105 10.9915 24.8764 -0.839253 104 10.1111 25.092 -0.83372 104 10.1386 24.9342 -0.828478 103 10.3318 24.8483 -0.828243 138 10.253 24.8788 -0.828168 103 10.3526 25.7476 -0.686385 112 11.7924 25.0214 -0.683456 138 10.3457 25.4981 -0.678838 134 10.4005 25.29 -0.673289 126 11.0255 25.0042 -0.672697 189 10.8916 25.0192 -0.671409 193 10.7964 25.0148 -0.670056 196 10.434 25.1464 -0.669418 131 10.7044 25.0173 -0.668961 198 10.4845 25.0453 -0.66703 143 10.6008 24.9919 -0.666899 219 +unknow 0.956189 1 0 1739 8.66953 -0.859006 -1.73216 109 8.66058 -0.926855 -1.73173 128 9.65982 -0.91209 -1.72995 74 8.64206 -0.897355 -1.72709 122 9.19564 -0.917014 -1.72514 147 8.63523 -0.828106 -1.72414 68 7.41985 -0.915148 -1.72369 114 8.15102 -0.782345 -1.72349 142 8.14462 -0.846338 -1.72349 134 8.13804 -0.871518 -1.7226 142 8.13095 -0.935407 -1.72259 140 8.1696 -0.461422 -1.72216 113 7.41637 -0.879286 -1.72175 108 8.14076 -0.807203 -1.72171 137 8.13139 -0.896665 -1.7217 138 8.16227 -0.486755 -1.72083 143 8.16129 -0.396713 -1.71949 113 8.13341 0.718304 -1.7182 141 8.15405 0.424052 -1.71819 122 8.79511 -0.855691 -1.71815 137 7.42066 -0.691248 -1.71787 102 7.41501 -0.749508 -1.71787 111 8.15518 0.359905 -1.71774 117 8.15541 -0.306617 -1.71727 129 8.15388 -0.345045 -1.71727 124 7.40246 -0.830574 -1.71689 111 8.14141 0.538876 -1.71685 122 8.56066 1.1655 -1.71662 116 8.07932 1.12496 -1.71643 118 8.12335 0.743117 -1.71641 119 8.13773 0.564309 -1.71641 126 8.14074 0.487466 -1.71596 124 7.41507 -0.667263 -1.71592 110 7.40117 -0.806907 -1.71592 110 8.77929 -0.895968 -1.71567 109 8.12397 0.691719 -1.71552 148 8.141 0.448985 -1.71551 145 8.15217 -0.139919 -1.71549 119 8.1418 -0.434289 -1.71548 145 7.41814 -0.608853 -1.71544 99 7.39403 -0.853179 -1.71543 139 8.14919 -0.191098 -1.71504 121 8.14302 -0.370248 -1.71504 152 8.13977 0.397622 -1.71462 150 8.14465 -0.280629 -1.71459 148 8.55459 1.13734 -1.71451 113 7.42214 -0.503675 -1.71447 115 7.41615 -0.585253 -1.71447 110 8.11006 0.780425 -1.71419 149 9.53457 1.28147 -1.71408 109 8.07464 1.07259 -1.71375 117 8.11937 0.652778 -1.71374 92 8.12138 0.627267 -1.71374 130 8.14235 -0.229352 -1.7137 151 8.11071 -0.752905 -1.71369 161 8.7667 -0.922547 -1.71361 113 7.41981 -0.480118 -1.7135 115 8.12137 0.6016 -1.71329 166 8.12749 0.512265 -1.71329 155 7.40777 0.616537 -1.71305 111 7.43144 -0.00160796 -1.71254 104 7.42565 -0.293365 -1.71253 128 7.41021 -0.561393 -1.71252 106 7.39138 -0.77066 -1.71252 107 8.1329 0.33325 -1.71239 130 7.39668 0.697575 -1.71208 118 7.40193 0.639461 -1.71208 111 7.41344 0.488186 -1.71208 123 7.42943 0.0333964 -1.71206 119 7.39415 -0.724022 -1.71203 141 9.51255 1.35462 -1.7118 110 7.37762 0.859825 -1.7116 115 7.41826 0.371576 -1.71159 103 7.4181 -0.374813 -1.71156 122 7.39973 -0.642515 -1.71155 138 8.05453 1.14724 -1.71153 146 8.09593 0.804705 -1.71151 123 8.13001 0.307538 -1.7115 133 7.69833 -0.889294 -1.71114 91 7.69405 -0.925562 -1.71113 94 7.36281 0.963773 -1.71112 118 7.40193 0.592617 -1.71111 111 7.40376 0.569361 -1.71111 123 7.42541 0.0566933 -1.71109 127 7.41367 -0.421312 -1.71107 115 8.1322 -0.165195 -1.71103 148 8.1299 -0.254602 -1.71103 123 7.69915 -0.864881 -1.71067 112 8.05771 1.09607 -1.71063 148 7.38866 0.720223 -1.71063 112 7.42239 0.138292 -1.71061 103 8.1313 -0.101302 -1.71059 147 7.41694 -0.316389 -1.71059 122 7.41537 -0.351337 -1.71059 123 7.4042 -0.537575 -1.71058 107 7.34122 1.09026 -1.71015 111 7.39111 0.673601 -1.71014 119 7.41464 0.324683 -1.71013 123 7.41696 0.266442 -1.71012 119 7.42159 -0.0482719 -1.71011 119 7.41108 -0.397824 -1.7101 107 7.40772 -0.456018 -1.7101 114 7.70907 -0.731346 -1.70974 101 10.0013 1.33235 -1.70974 105 10.0075 1.28521 -1.70974 89 8.12511 0.217893 -1.70971 126 8.12701 0.128541 -1.70971 116 8.12787 -0.0501985 -1.7097 135 7.33408 1.12455 -1.70967 115 7.34925 1.02075 -1.70967 107 7.36003 0.939881 -1.70966 107 7.40056 0.534028 -1.70965 126 7.4022 0.51077 -1.70965 119 7.40598 0.452622 -1.70964 118 7.41582 0.243071 -1.70964 116 7.41655 0.219768 -1.70964 119 7.7167 -0.622129 -1.70928 105 7.70239 -0.779567 -1.70927 90 7.69863 -0.815855 -1.70927 89 7.11512 -0.729493 -1.70926 96 7.10667 -0.807682 -1.70926 91 7.37451 0.800771 -1.70917 120 7.37699 0.7776 -1.70917 118 7.4097 0.347781 -1.70915 151 7.41556 0.18476 -1.70915 123 7.4171 -0.106517 -1.70914 119 7.41296 -0.269589 -1.70913 123 7.7107 -0.670427 -1.70881 106 7.4098 0.301132 -1.70867 123 9.98693 1.39436 -1.70866 102 8.11854 0.243224 -1.70837 122 7.71567 -0.585451 -1.70835 88 7.10895 -0.751421 -1.70826 91 7.32113 1.16966 -1.70821 115 7.41223 0.161365 -1.70817 122 7.41355 0.0798545 -1.70817 123 9.48883 1.38162 -1.70801 121 9.98736 1.36246 -1.70793 108 7.70469 -0.694285 -1.70787 86 7.699 -0.754776 -1.70787 107 7.69023 -0.839384 -1.70787 102 9.0759 1.20078 -1.70774 118 7.34629 0.98505 -1.70772 112 7.35668 0.904213 -1.70772 107 7.35948 0.881098 -1.70772 115 7.36617 0.823273 -1.70771 111 7.40904 -0.211215 -1.70768 123 8.11827 -0.0119133 -1.70747 132 7.70696 -0.645693 -1.70741 104 7.12349 -0.549834 -1.70726 89 7.11501 -0.650482 -1.70725 96 7.33309 1.06548 -1.70724 115 7.33641 1.04244 -1.70724 119 7.399 0.405514 -1.70721 115 7.41006 -0.0249576 -1.7072 118 7.40853 -0.152985 -1.70719 123 8.11632 0.0135817 -1.70703 127 7.71582 -0.500181 -1.70695 97 9.49355 1.30623 -1.70687 142 7.11797 -0.594413 -1.70675 95 7.08495 -0.906803 -1.70674 90 7.4077 -0.08314 -1.70671 123 7.40446 -0.234381 -1.7067 130 8.10951 0.281184 -1.70659 127 8.11403 -0.0756492 -1.70658 144 7.09257 -0.828615 -1.70624 127 7.08015 -0.928798 -1.70624 123 7.70777 -0.56047 -1.70601 107 9.04832 1.32757 -1.70576 130 9.06237 1.228 -1.70576 121 7.39188 0.428398 -1.70575 115 8.10821 0.191895 -1.7057 120 7.70756 -0.536111 -1.70555 89 9.0505 1.29887 -1.70536 97 9.05454 1.27043 -1.70536 120 7.40146 0.114568 -1.70526 148 7.11828 -0.515672 -1.70525 99 7.1093 -0.627417 -1.70524 127 7.10198 -0.705549 -1.70524 123 7.09501 -0.772452 -1.70524 130 7.08609 -0.850418 -1.70523 95 7.07594 0.916074 -1.70479 99 7.39927 -0.129574 -1.70476 127 7.39802 -0.187683 -1.70476 130 7.1033 -0.671885 -1.70474 86 7.68354 0.77251 -1.70466 98 8.10318 0.153554 -1.70436 117 8.10438 0.0644472 -1.70435 115 7.30944 1.14421 -1.70432 111 7.3601 0.752382 -1.70431 107 7.11896 -0.448304 -1.70424 102 7.11752 -0.470666 -1.70424 98 7.07817 -0.883307 -1.70423 118 7.65196 1.02524 -1.7042 93 7.65514 1.0012 -1.7042 93 7.69859 0.579034 -1.70419 94 7.70571 -0.475181 -1.70415 94 8.10259 0.0389706 -1.70391 139 7.07494 0.89337 -1.70379 92 7.09052 0.759857 -1.70378 99 7.12828 0.201196 -1.70376 96 7.70407 0.470032 -1.70372 103 9.03033 1.36847 -1.70338 106 7.07981 0.837553 -1.70328 97 7.11904 0.380171 -1.70326 102 7.68788 0.663327 -1.70326 99 7.68993 0.639172 -1.70326 99 7.70061 0.494114 -1.70325 98 7.708 0.36099 -1.70324 103 7.71344 0.215641 -1.70324 119 7.71572 0.106577 -1.70324 105 7.1063 -0.570914 -1.70323 125 7.70532 -0.414425 -1.70322 98 7.70328 -0.450731 -1.70322 91 7.62733 1.15645 -1.70281 92 7.65697 0.940355 -1.7028 94 7.65989 0.916297 -1.7028 90 7.66412 0.880189 -1.7028 90 7.66685 0.856108 -1.7028 98 7.67208 0.807918 -1.70279 94 7.68382 0.68731 -1.70279 99 7.68996 0.614861 -1.70279 95 7.70489 0.385113 -1.70278 102 7.08048 0.815093 -1.70278 91 7.70865 0.300371 -1.70278 99 7.7134 0.130789 -1.70277 101 7.1125 0.458309 -1.70276 95 7.71446 -0.0267379 -1.70276 105 7.7137 -0.11156 -1.70276 99 7.71023 -0.256932 -1.70276 104 7.70694 -0.341693 -1.70275 100 7.12682 -0.0787586 -1.70274 112 7.12637 -0.11234 -1.70274 104 7.11932 -0.336133 -1.70274 100 7.11647 -0.392037 -1.70273 103 7.67856 0.723335 -1.70232 95 7.70169 0.40922 -1.70231 98 7.7027 -0.390006 -1.70228 94 7.11265 0.424681 -1.70226 139 7.11794 0.324085 -1.70226 100 7.11984 0.279354 -1.70225 102 7.12066 -0.257756 -1.70223 98 7.11327 -0.414273 -1.70223 101 7.10828 -0.492461 -1.70223 98 7.65012 0.963934 -1.70187 93 7.70824 0.191282 -1.70184 98 7.70881 0.167065 -1.70184 103 7.12232 0.122698 -1.70175 98 7.12337 -0.0115673 -1.70174 99 7.63713 1.04774 -1.7014 90 7.68873 0.554046 -1.70138 94 7.69044 0.529889 -1.70138 94 7.70373 0.275963 -1.70137 95 7.70823 0.0822796 -1.70137 104 7.70618 -0.1962 -1.70136 103 7.7 -0.365607 -1.70135 92 7.03382 1.11368 -1.70128 96 7.04886 1.01413 -1.70127 91 7.08324 0.736613 -1.70126 89 7.11505 0.301573 -1.70125 102 7.1172 0.245682 -1.70125 90 7.1192 0.178595 -1.70124 101 7.12074 0.100303 -1.70124 98 7.12113 0.0667487 -1.70124 91 7.12122 -0.0563028 -1.70124 105 6.88127 -0.601595 -1.70101 113 7.66177 0.831203 -1.70093 91 7.67044 0.746913 -1.70092 97 7.7067 0.0217382 -1.7009 100 7.70481 -0.17194 -1.70089 105 7.70358 -0.220347 -1.70089 102 8.08839 0.10239 -1.70079 122 7.0958 0.580527 -1.70076 95 7.10815 0.402022 -1.70075 102 7.11948 0.0220044 -1.70073 105 7.11778 -0.156918 -1.70073 104 7.11356 -0.29105 -1.70072 108 7.11261 -0.313396 -1.70072 107 9.01242 1.39477 -1.7006 133 6.88871 -0.482481 -1.70049 90 6.87643 -0.633845 -1.70049 107 7.6213 1.13108 -1.70047 92 7.69191 0.445086 -1.70045 100 7.69744 0.336302 -1.70044 99 7.70456 0.0580468 -1.70043 103 7.70478 -0.00246619 -1.70043 99 7.70429 -0.0871831 -1.70043 99 7.69967 -0.280766 -1.70042 103 7.03685 1.06889 -1.70027 102 7.06425 0.86953 -1.70026 121 7.08706 0.658339 -1.70026 95 7.09566 0.558085 -1.70025 96 7.09737 0.535792 -1.70025 103 7.10136 0.480033 -1.70025 97 7.1161 0.144982 -1.70024 101 7.108 -0.369141 -1.70022 103 7.62633 1.08291 -1.7 94 7.69873 0.251589 -1.69997 89 6.87927 -0.57966 -1.69997 110 6.87039 -0.676856 -1.69997 108 7.69681 -0.30487 -1.69995 100 7.03825 1.0465 -1.69977 97 7.05382 0.935822 -1.69976 124 7.07146 0.791593 -1.69976 124 7.08303 0.680422 -1.69975 99 7.08913 0.61364 -1.69975 89 7.11214 0.223159 -1.69974 131 7.11309 -0.19034 -1.69972 108 7.11176 -0.235029 -1.69972 105 7.62096 1.10659 -1.69954 95 7.70064 -0.0629339 -1.69949 105 6.86631 -0.698249 -1.69945 110 7.04742 0.968794 -1.69926 92 7.09596 0.50208 -1.69924 123 7.11356 0.0443545 -1.69923 140 7.11362 -0.0338633 -1.69922 102 7.11243 -0.134421 -1.69922 98 6.87721 -0.557748 -1.69894 112 8.66638 1.16733 -1.69881 105 7.04242 0.990672 -1.69876 123 7.07589 0.713422 -1.69875 102 7.69581 -0.135426 -1.69856 94 6.87945 -0.503587 -1.69842 110 6.86671 -0.654741 -1.69841 113 7.10087 0.356904 -1.69823 100 7.10666 -0.212491 -1.69821 111 6.85947 0.70805 -1.69795 90 7.07945 0.635243 -1.69774 93 6.84299 0.836972 -1.69743 88 6.89167 -0.178875 -1.6974 98 6.88202 -0.40607 -1.69739 124 6.88071 -0.427688 -1.69739 89 6.83841 0.858216 -1.69691 118 6.84743 0.782978 -1.69691 89 6.89112 0.113449 -1.69689 95 6.82954 0.911635 -1.6964 120 6.83376 0.879444 -1.6964 87 6.86107 0.632029 -1.69639 116 6.87881 0.394597 -1.69638 89 6.88503 0.264873 -1.69638 122 6.89002 -0.0381048 -1.69636 87 6.87013 -0.524637 -1.69635 107 6.84838 0.739506 -1.69587 118 6.87977 0.340456 -1.69586 96 6.87284 -0.459744 -1.69583 126 6.82282 0.932551 -1.69536 87 6.83791 0.814528 -1.69536 117 6.85918 0.610115 -1.69535 120 6.88616 0.0376158 -1.69533 121 6.88303 -0.211139 -1.69532 93 6.84218 0.760574 -1.69484 112 6.87176 0.415836 -1.69483 99 6.88356 -0.102977 -1.69481 100 6.86326 0.512788 -1.69431 109 6.87288 0.36174 -1.69431 120 6.88204 0.070013 -1.6943 95 6.87169 -0.383843 -1.69428 95 6.84629 0.684901 -1.6938 110 6.87725 0.210455 -1.69378 114 6.87986 0.091599 -1.69378 117 6.88045 0.0159479 -1.69378 95 6.87999 -0.0813216 -1.69377 127 6.87914 -0.135354 -1.69377 94 6.87654 -0.23259 -1.69377 124 6.87577 -0.254191 -1.69377 96 6.85518 0.56634 -1.69328 113 6.87116 0.318356 -1.69327 117 6.87594 0.188789 -1.69327 120 6.87675 -0.156927 -1.69325 129 6.87301 -0.275719 -1.69325 124 6.86956 -0.351276 -1.69325 97 6.8613 0.458457 -1.69276 92 6.87066 0.285887 -1.69275 91 6.8697 -0.308023 -1.69273 96 6.85714 0.490638 -1.69224 119 6.87039 0.242639 -1.69223 95 6.86677 -0.329523 -1.69221 132 6.84072 0.662613 -1.69173 114 6.85885 0.43664 -1.69172 119 6.87071 0.167025 -1.69171 88 6.8712 0.145441 -1.69171 124 6.84814 0.533245 -1.69069 110 6.86887 -0.00570073 -1.69067 124 6.84182 0.586838 -1.69017 89 6.85896 -0.0596042 -1.68808 115 8.00111 -0.502885 -1.68428 134 7.89983 1.01093 -1.6723 105 7.90335 0.810032 -1.66783 175 7.87023 -0.706432 -1.65797 116 7.8644 -0.531948 -1.65352 113 7.84821 -0.667273 -1.65218 121 7.82711 0.826831 -1.6509 119 7.83562 -0.579565 -1.64772 122 7.82694 -0.640782 -1.64683 111 7.7908 0.971736 -1.64644 99 7.79381 0.947256 -1.64644 108 7.80376 0.861502 -1.64644 113 7.79714 0.885561 -1.64555 113 7.82768 -0.554289 -1.6455 98 7.82308 -0.61575 -1.64549 118 7.79238 0.90982 -1.6451 115 7.96819 1.023 -1.58584 81 8.12089 1.05325 -1.58148 57 7.76593 -0.717494 -1.53516 80 7.74781 -0.67894 -1.53052 78 7.70162 0.965077 -1.5272 55 7.68714 0.938804 -1.5234 90 7.86233 -0.742792 -1.51985 54 7.45506 0.887494 -1.47236 102 7.63461 -0.697848 -1.47111 72 7.60407 0.960259 -1.47075 80 7.42467 -0.626032 -1.46007 116 7.38598 -0.517564 -1.44995 81 7.30565 0.835352 -1.43903 71 7.3122 -0.535227 -1.43434 84 7.3018 -0.569042 -1.43265 83 7.41874 0.912538 -1.43068 155 7.29618 -0.453386 -1.4297 255 7.2805 -0.590335 -1.42843 84 7.26382 0.749931 -1.42806 111 7.28913 -0.406953 -1.4276 255 7.25187 0.806333 -1.42679 73 7.28196 -0.429487 -1.42633 255 7.68719 0.996503 -1.42342 58 7.23687 0.781721 -1.423 83 7.25106 -0.484742 -1.42042 246 7.39108 -0.653022 -1.41905 160 7.22091 -0.323288 -1.41199 138 7.20814 -0.345367 -1.40946 255 7.17662 0.718472 -1.40865 208 7.20431 -0.299807 -1.40819 40 7.18017 0.593755 -1.40696 142 7.32787 -0.508709 -1.40336 225 7.29087 0.861488 -1.40258 107 7.32233 -0.531457 -1.40253 224 7.30077 0.734979 -1.40175 168 7.15099 0.614065 -1.40105 255 7.30023 -0.564515 -1.3984 98 7.27897 0.75582 -1.39762 152 7.29069 -0.609905 -1.39716 84 7.14365 -0.184707 -1.39428 39 7.27696 -0.585799 -1.39385 87 7.12903 0.432161 -1.39345 39 7.14163 -0.0836369 -1.39344 39 7.12569 0.454441 -1.39303 39 7.10488 0.689023 -1.39262 255 7.13337 -0.262922 -1.39259 44 7.12699 -0.363633 -1.39216 255 7.24365 0.809601 -1.39143 110 7.13156 -0.105894 -1.39133 39 7.1283 -0.240293 -1.39132 45 7.11447 0.476209 -1.39093 39 7.12592 0.252499 -1.39092 46 7.12903 -0.139455 -1.3909 39 7.12707 -0.217832 -1.3909 45 7.1266 -0.161798 -1.39048 39 7.09448 0.63187 -1.38924 255 7.10434 0.509198 -1.38924 43 7.11727 0.27461 -1.38923 46 7.12036 -0.060939 -1.3888 39 7.5074 0.949849 -1.3861 162 7.2221 0.772662 -1.38605 208 7.07494 0.652601 -1.38545 255 7.09194 0.396524 -1.38502 46 7.09315 0.37424 -1.38502 47 7.09967 0.218177 -1.38501 46 7.09146 0.3295 -1.38417 45 7.09873 0.0731359 -1.38416 45 7.09911 -0.00492398 -1.38416 47 7.09098 0.296007 -1.38375 46 7.09705 -0.038358 -1.38374 44 7.20415 0.827978 -1.38358 74 7.08648 0.351597 -1.38333 45 7.08674 0.095321 -1.38163 45 7.08273 0.195452 -1.38121 45 7.08405 0.139816 -1.38121 45 7.08541 0.0174006 -1.38121 45 7.08336 0.0396549 -1.38079 45 7.07745 0.173076 -1.37995 45 7.07859 0.117485 -1.37994 45 7.50478 -0.684098 -1.37968 116 7.20835 -0.478087 -1.37775 199 7.14011 -0.372535 -1.36205 255 7.11738 0.659421 -1.36167 255 7.13568 -0.417283 -1.36164 255 7.135 -0.394764 -1.36122 255 7.13238 -0.439584 -1.36122 255 7.11357 0.636508 -1.36043 255 7.11553 0.614158 -1.36043 255 7.38332 0.89927 -1.35989 165 7.09673 0.556337 -1.35547 85 7.37416 -0.648377 -1.35268 128 7.08611 -0.31414 -1.35007 70 7.07272 -0.257963 -1.34677 77 7.04819 0.496671 -1.34432 70 7.05773 -0.290777 -1.34388 81 7.04727 0.452111 -1.34349 67 7.05784 -0.235279 -1.34346 81 7.05464 -0.213003 -1.34264 79 7.04085 0.429464 -1.34184 67 7.05218 -0.157513 -1.34182 62 7.04 -0.0577435 -1.33893 56 7.03571 -0.190377 -1.33851 74 7.28095 0.863972 -1.33844 164 7.03436 -0.0024663 -1.33769 64 7.02644 -0.333833 -1.33768 189 7.01654 0.472171 -1.33729 82 7.03232 -0.0356136 -1.33728 62 6.99543 0.680947 -1.33647 255 7.0174 0.39476 -1.33646 60 7.01583 0.350447 -1.33564 27 7.01274 0.37238 -1.33522 52 7.02217 -0.0797241 -1.33521 57 7.02054 0.0415973 -1.3348 65 7.01937 -0.134843 -1.33479 69 7.00959 0.317001 -1.33398 27 7.01585 -0.112743 -1.33397 56 7.0075 0.217671 -1.33274 61 7.01086 0.0194792 -1.33273 64 7.00273 0.294621 -1.33233 28 7.00668 0.0634767 -1.33191 65 7.00228 0.195471 -1.3315 60 7.57674 0.988715 -1.33132 158 6.99858 0.250383 -1.33109 30 6.997 0.173303 -1.33026 64 6.99578 0.140284 -1.32985 63 6.98798 0.271954 -1.32902 28 7.259 -0.614863 -1.32886 214 6.98836 0.118145 -1.32819 63 6.9887 0.0961909 -1.32819 64 7.22519 0.834549 -1.32653 224 7.2501 -0.579669 -1.32648 228 7.21735 0.799241 -1.32415 231 6.94092 0.565499 -1.32284 255 7.23235 -0.555319 -1.32251 233 7.54736 -0.682481 -1.3191 153 7.19253 0.773728 -1.31859 234 7.21451 -0.531086 -1.31854 236 7.19934 -0.495807 -1.31497 239 7.17152 0.748771 -1.31382 237 7.17384 0.726235 -1.31382 238 7.47226 0.938908 -1.31005 141 7.15393 -0.469933 -1.30544 240 7.13842 0.643593 -1.30508 239 7.12058 0.687165 -1.3023 240 7.12958 0.586437 -1.3023 239 7.13777 -0.446291 -1.30186 241 7.118 0.506818 -1.29872 239 7.10318 0.663042 -1.29833 240 7.11713 0.461847 -1.29793 239 7.11827 -0.411328 -1.2975 242 7.11531 0.428081 -1.29713 238 7.10977 0.483825 -1.29674 238 7.12313 -0.209796 -1.29671 238 7.12305 -0.131416 -1.29632 239 7.11647 -0.164825 -1.29512 239 7.10778 -0.388279 -1.29512 241 7.08277 0.605157 -1.29317 241 7.09204 -0.309177 -1.29115 240 7.09051 -0.342594 -1.29115 242 7.0747 0.559761 -1.29078 240 7.07726 0.526411 -1.29078 241 7.08744 -0.36476 -1.29075 243 7.0871 -0.286632 -1.28996 240 7.08522 -0.230822 -1.28917 241 7.08405 -0.264206 -1.28916 242 7.07673 -0.186006 -1.28718 240 7.06386 0.325046 -1.28561 240 7.06289 0.302777 -1.28521 240 7.37336 -0.644009 -1.28493 177 7.05717 0.380318 -1.28482 240 7.05889 0.347057 -1.28482 240 7.06689 -0.0857586 -1.2848 240 7.06659 -0.107962 -1.2848 240 7.05398 0.402382 -1.28442 240 7.06345 0.025255 -1.28401 240 7.06349 -0.00802903 -1.28401 240 7.06343 -0.0302251 -1.28401 240 7.0633 -0.0524141 -1.28401 240 7.05898 0.0917875 -1.28322 241 7.05727 0.0695964 -1.28282 241 7.05745 0.0474262 -1.28282 241 7.05052 0.26902 -1.28243 243 7.05362 0.169317 -1.28243 245 7.05412 0.147158 -1.28243 243 7.32127 0.896042 -1.28005 191 7.04032 0.22438 -1.28005 248 7.03707 0.202164 -1.27925 247 7.02978 0.246188 -1.27806 248 7.03102 0.124664 -1.27766 247 7.2951 -0.61437 -1.26936 220 7.25388 0.864424 -1.26638 224 7.27246 -0.578054 -1.26443 233 7.24096 0.839767 -1.26334 237 7.25857 -0.554065 -1.26139 239 7.21948 0.802722 -1.2584 239 7.23089 -0.529214 -1.2557 240 7.53977 0.950685 -1.25179 149 7.53622 -0.714086 -1.24631 75 7.15366 0.772411 -1.24511 241 7.17178 -0.50246 -1.24393 242 7.15447 -0.467449 -1.24013 244 7.12873 0.74697 -1.23979 244 7.11654 0.711747 -1.23676 245 7.1363 -0.443822 -1.23633 244 7.11217 -0.419989 -1.2314 245 7.10623 -0.386072 -1.22988 245 7.08162 0.685656 -1.22954 255 7.08178 0.663217 -1.22916 255 7.08288 0.629658 -1.22878 246 7.09956 -0.363372 -1.22836 246 7.0987 -0.340979 -1.22798 245 7.09827 -0.307446 -1.22761 246 7.077 0.606698 -1.22726 246 7.09527 -0.285001 -1.22685 246 7.07495 0.584126 -1.2265 246 7.0748 0.561735 -1.22612 246 7.09025 -0.262513 -1.22571 246 7.07345 0.528082 -1.22536 245 7.08907 -0.240177 -1.22533 246 7.07076 0.483204 -1.22422 246 7.08289 -0.184317 -1.22381 246 7.06529 0.505122 -1.22346 246 7.06708 0.449484 -1.22308 245 7.07835 -0.206468 -1.22305 246 7.07663 -0.106338 -1.2223 244 7.07558 -0.161914 -1.22229 244 7.06257 0.426901 -1.22194 244 7.06192 0.404593 -1.22156 245 7.07234 -0.128512 -1.22154 244 7.06515 -0.0840085 -1.22002 244 7.05713 0.30426 -1.21965 242 7.0593 0.248825 -1.21965 242 7.0635 -0.0507069 -1.21964 245 7.36889 0.906235 -1.2196 111 7.05312 0.348495 -1.21928 242 7.06172 -0.00633009 -1.21926 242 7.04944 0.381613 -1.2189 243 7.05222 0.326232 -1.21889 243 7.05064 0.270673 -1.21813 242 7.0522 0.226366 -1.21813 242 7.05376 0.170972 -1.21813 242 7.05469 0.126647 -1.21813 242 7.05521 0.0934036 -1.21813 242 7.05581 0.0158201 -1.21812 242 7.05577 -0.0285131 -1.21812 242 7.0523 0.14876 -1.21775 242 7.04926 0.193008 -1.21737 242 7.04977 0.049007 -1.21699 242 7.04565 0.0711044 -1.21623 242 7.3524 -0.672725 -1.21194 104 7.2662 0.870817 -1.20006 186 7.28104 -0.631348 -1.1982 178 7.2233 0.831338 -1.19138 209 7.23008 -0.603861 -1.18844 213 7.18285 0.803977 -1.18342 220 7.19862 -0.578346 -1.18229 219 7.58516 -0.710233 -1.17951 109 7.18166 -0.542863 -1.17867 224 7.15013 0.777707 -1.17691 223 7.54178 0.959492 -1.17683 147 7.14197 0.742828 -1.17474 226 7.15783 -0.51836 -1.17397 226 7.14373 -0.494726 -1.17108 227 7.12274 0.718292 -1.17076 226 7.1374 -0.471733 -1.16963 227 7.11713 0.695177 -1.16931 228 7.12776 -0.437328 -1.16746 227 7.10269 0.660055 -1.16606 227 7.11929 -0.414326 -1.16565 228 7.09689 0.637065 -1.16461 229 7.09101 0.614113 -1.16316 227 7.10681 -0.391151 -1.16312 229 7.10268 -0.357339 -1.16204 227 7.08114 0.590896 -1.16099 227 7.08805 -0.334224 -1.15915 222 7.07012 0.556492 -1.15846 225 7.06791 0.533997 -1.15773 223 7.07924 -0.311486 -1.15734 226 7.0795 -0.255799 -1.15698 227 7.07867 -0.278038 -1.15698 227 7.0617 0.511247 -1.15628 227 7.07634 -0.233412 -1.15626 228 7.06354 0.455649 -1.15592 229 7.06011 0.477712 -1.15556 228 7.05904 0.433117 -1.15483 228 7.0584 0.410831 -1.15447 229 7.06865 -0.155339 -1.15445 229 7.06419 -0.177432 -1.15373 229 7.06328 -0.210719 -1.15372 229 7.0524 0.377173 -1.15302 229 7.06123 -0.132954 -1.153 228 7.04962 0.354832 -1.1523 230 7.05785 -0.0996072 -1.15228 230 7.04677 0.332512 -1.15157 230 7.05454 -0.0330518 -1.15156 229 7.0544 -0.0552142 -1.15156 229 7.0463 0.299225 -1.15121 230 7.04804 0.254946 -1.15121 230 7.05223 -0.0773473 -1.1512 229 7.04524 0.277017 -1.15085 230 7.05025 0.0777319 -1.15084 228 7.04857 0.0445023 -1.15048 229 7.04392 0.199438 -1.15012 230 7.04504 0.155176 -1.15012 229 7.04475 0.0223603 -1.14975 229 7.04478 0.000228349 -1.14975 230 7.03933 0.221457 -1.1494 229 7.04058 0.177223 -1.1494 230 7.04176 0.121921 -1.1494 228 7.04014 0.0997776 -1.14903 228 7.38057 0.914855 -1.14805 189 7.40479 -0.670513 -1.14765 161 7.33521 -0.629633 -1.13497 227 7.29874 0.869504 -1.13297 224 7.30965 -0.60441 -1.13018 242 7.27013 0.842828 -1.12749 239 7.22899 -0.575175 -1.11579 251 7.20033 0.811558 -1.11481 250 7.21701 -0.55146 -1.11339 253 7.19109 0.787604 -1.11276 251 7.2038 -0.516374 -1.11065 253 7.17122 0.75116 -1.10865 252 7.20739 -0.210173 -1.10861 233 7.18966 -0.492719 -1.10791 253 7.20002 -0.255266 -1.10758 231 7.19874 -0.289193 -1.10758 231 7.19649 -0.175961 -1.10655 233 7.19488 -0.232476 -1.10655 230 7.19189 -0.311573 -1.10655 230 7.19088 -0.334165 -1.10655 244 7.1833 -0.469643 -1.10654 255 7.18286 0.445528 -1.10624 217 7.1955 0.129279 -1.10622 244 7.18291 0.411555 -1.10589 215 7.15591 0.726772 -1.10556 255 7.18339 0.366308 -1.10555 226 7.19109 -0.153247 -1.10553 230 7.18915 0.151738 -1.1052 233 7.19057 -0.0515654 -1.10519 231 7.18994 -0.108038 -1.10519 230 7.16798 0.546399 -1.10487 233 7.17356 0.467551 -1.10487 219 7.17827 0.388646 -1.10486 220 7.1811 0.332257 -1.10486 228 7.1884 -0.0741419 -1.10485 231 7.1677 0.523726 -1.10453 227 7.17009 0.489944 -1.10452 225 7.18014 0.309603 -1.10452 230 7.18442 0.185498 -1.10451 232 7.18632 0.0839151 -1.10451 235 7.18676 0.0274716 -1.10451 231 7.17997 0.264403 -1.10417 232 7.18484 0.00488494 -1.10416 230 7.18366 -0.130539 -1.10416 228 7.17714 0.286872 -1.10383 230 7.17917 0.230495 -1.10383 231 7.17789 0.207875 -1.10349 230 7.18011 0.106382 -1.10348 231 7.18073 0.0499868 -1.10348 232 7.18084 -0.0289713 -1.10348 230 7.16773 -0.434778 -1.10346 255 7.13855 0.702287 -1.10213 255 7.15332 -0.41141 -1.10072 255 7.12806 0.667304 -1.09973 255 7.14277 -0.388336 -1.09867 255 7.11835 0.643799 -1.09768 255 7.12624 -0.365051 -1.09558 255 7.1066 0.620184 -1.09528 255 7.10143 0.563535 -1.09356 255 7.09177 0.585165 -1.09219 255 7.58582 0.963546 -1.0881 109 7.56027 -0.709297 -1.07945 95 7.73298 -0.735454 -1.07479 58 7.42218 0.919652 -1.06105 139 7.42 -0.660386 -1.05622 101 7.53277 0.946639 -1.04726 118 7.54435 -0.69425 -1.04472 88 7.31325 0.883231 -1.04291 182 7.32567 -0.628462 -1.04063 153 7.27417 0.843904 -1.03591 186 7.29023 -0.602225 -1.03458 198 7.24537 0.817618 -1.03082 214 7.26257 -0.576866 -1.02981 219 7.22631 0.792563 -1.02731 226 7.24355 -0.540943 -1.02631 228 7.20323 0.767231 -1.02318 231 7.22159 -0.516407 -1.02249 231 7.21727 -0.493293 -1.02154 233 7.19105 0.731731 -1.02063 235 7.35928 0.900748 -1.01935 147 7.20972 -0.390414 -1.01932 240 7.38411 -0.644993 -1.01899 133 7.18151 0.708017 -1.01872 234 7.20178 -0.458084 -1.01868 235 7.20557 -0.356123 -1.01836 242 7.18687 0.606105 -1.01808 240 7.19333 -0.434827 -1.01709 236 7.19679 -0.332994 -1.01677 242 7.19583 -0.310292 -1.01646 240 7.16601 0.683829 -1.01585 233 7.17586 0.571185 -1.01585 242 7.18678 -0.411747 -1.01582 227 7.18932 -0.276046 -1.01518 241 7.16525 0.627032 -1.0149 231 7.16975 0.548063 -1.01458 240 7.17305 0.503006 -1.01458 240 7.15931 0.649199 -1.01426 234 7.18499 -0.230656 -1.01423 239 7.18423 -0.25323 -1.01423 241 7.16749 0.525263 -1.01394 240 7.16943 0.468836 -1.01362 239 7.18066 -0.174054 -1.01328 240 7.1781 -0.196549 -1.01296 240 7.16495 0.445958 -1.01266 239 7.17722 -0.151398 -1.01264 240 7.16435 0.423338 -1.01234 239 7.16626 0.389574 -1.01234 239 7.16548 0.366966 -1.01202 240 7.17372 -0.128765 -1.01201 240 7.31126 -0.615752 -1.00721 218 7.28363 0.867995 -1.00695 204 7.64535 0.957639 -1.0025 149 7.66649 -0.708553 -1.00156 116 7.27573 -0.589881 -1.00132 225 7.23858 0.827876 -0.999198 225 7.26464 -0.554587 -0.999149 229 7.22937 0.803773 -0.997337 229 7.07388 0.340332 -0.997068 255 7.25255 -0.530802 -0.996979 231 7.22204 0.779963 -0.995786 231 7.24235 -0.507227 -0.99512 235 7.20796 0.744034 -0.992995 234 7.22419 -0.483226 -0.992021 235 7.04384 0.305738 -0.991975 255 7.04477 0.283609 -0.991974 255 7.04444 0.239279 -0.991654 255 7.20043 0.720368 -0.991444 236 7.22497 -0.369411 -0.991095 241 7.0397 0.261276 -0.991019 255 7.2185 -0.448714 -0.990782 237 7.03759 0.205881 -0.99038 255 7.21723 -0.403143 -0.990163 234 7.03605 -0.0926238 -0.989733 255 7.03468 0.00685517 -0.989419 255 7.19612 0.61727 -0.98927 241 7.2153 -0.323516 -0.989236 242 7.02833 0.18355 -0.988788 255 7.2103 -0.346012 -0.988615 242 7.02758 0.128312 -0.988468 255 7.02795 0.106235 -0.988468 255 7.183 0.695766 -0.988343 237 7.02628 0.0841406 -0.988149 255 7.19287 0.560094 -0.988028 241 7.02295 0.16135 -0.987833 255 7.20014 -0.424942 -0.987682 240 7.02058 0.0620339 -0.987193 255 7.02084 -0.0151661 -0.98719 255 7.02069 -0.0482489 -0.987189 255 7.2038 -0.266379 -0.987068 244 7.20292 -0.289008 -0.987067 243 7.01882 0.0289473 -0.986874 255 7.01853 -0.0702765 -0.98687 255 7.17243 0.66059 -0.986171 238 7.18824 0.457558 -0.986164 243 7.17637 0.592793 -0.985859 242 7.1808 0.536416 -0.985857 243 7.19894 -0.164362 -0.985831 244 7.19743 -0.220897 -0.98583 243 7.1967 -0.243509 -0.985829 244 7.18703 0.412142 -0.985542 243 7.19641 -0.186935 -0.985521 243 7.18085 0.47972 -0.985235 243 7.16463 0.637144 -0.98462 230 7.1726 0.513108 -0.984306 243 7.181 0.377825 -0.984301 244 7.17584 0.434089 -0.983993 244 7.47152 0.912636 -0.976019 141 7.13225 -0.140666 -0.975292 245 7.10718 0.351284 -0.972519 250 7.42442 -0.661832 -0.965075 187 7.05183 -0.106133 -0.962582 255 7.37353 0.865778 -0.960717 85 6.99326 0.290188 -0.954225 255 6.99723 0.169315 -0.954221 255 6.99773 0.147333 -0.95422 255 6.99867 0.0923655 -0.954218 255 6.99918 0.0373955 -0.954216 255 6.99928 -0.00657978 -0.954215 255 6.99901 -0.0615549 -0.954213 255 6.98787 0.32294 -0.953606 255 6.991 0.246091 -0.953604 255 6.99272 0.191173 -0.953602 255 6.9944 0.114275 -0.953599 255 6.99498 0.0703249 -0.953597 255 6.99522 -0.0395534 -0.953593 255 6.99483 -0.0835088 -0.953592 255 6.99334 0.0153729 -0.953285 255 6.98624 0.267885 -0.952984 255 6.98813 0.213004 -0.952982 255 7.33681 -0.618869 -0.951542 68 7.28732 -0.568415 -0.9436 72 7.26776 -0.589803 -0.940951 56 7.24507 0.805051 -0.940708 72 7.25836 -0.531644 -0.938894 85 7.2521 -0.508257 -0.937718 79 7.24331 -0.461883 -0.935954 67 7.21574 0.7446 -0.935409 83 7.20943 0.766859 -0.934822 89 7.23553 -0.427126 -0.934484 138 7.20229 0.72041 -0.933055 114 7.22104 -0.403453 -0.932131 197 7.20189 0.640499 -0.931875 125 7.21419 -0.482688 -0.931834 55 7.19576 0.685554 -0.931582 134 7.19795 0.617386 -0.930991 196 7.19196 0.662423 -0.930699 161 7.72187 -0.691729 -0.930298 116 7.65957 0.956809 -0.925696 171 7.18148 0.276316 -0.925389 255 7.18653 0.0618936 -0.925381 255 7.18418 0.0957375 -0.925088 255 7.18432 -0.0848324 -0.925081 255 7.17948 0.219797 -0.924798 255 7.18146 0.140848 -0.924795 255 7.17677 0.242294 -0.924505 255 7.17874 0.174645 -0.924502 255 7.18076 -0.0396535 -0.924494 255 7.17092 -0.377873 -0.924482 244 7.13372 0.578267 -0.920986 247 7.12718 -0.341732 -0.917716 253 7.12031 -0.318956 -0.91654 254 7.1114 -0.296138 -0.91507 255 7.11074 -0.262543 -0.914777 255 7.0921 0.552629 -0.914512 255 7.11224 -0.139594 -0.914487 255 7.11027 -0.217792 -0.914484 255 7.09183 0.530206 -0.914217 255 7.09425 0.49678 -0.914216 255 7.09723 0.452198 -0.914214 255 7.10757 -0.240054 -0.914189 255 7.09731 0.418641 -0.913919 255 7.09183 0.474242 -0.913627 255 7.10583 -0.161785 -0.913603 255 7.10499 -0.195268 -0.913602 255 7.08908 0.351186 -0.912151 255 7.08399 0.37326 -0.911563 255 7.06106 0.394378 -0.908328 255 7.03748 -0.115737 -0.903307 255 7.51376 -0.638123 -0.900956 65 7.00172 0.314114 -0.898909 255 7.00272 0.0389729 -0.898017 255 6.99819 0.192903 -0.897728 255 6.99989 0.115942 -0.897725 255 6.99861 -0.059979 -0.897425 255 6.99687 0.0169819 -0.897133 255 6.99687 -0.0159917 -0.897132 255 6.98685 0.291516 -0.896555 255 7.44969 0.894223 -0.895802 88 7.33239 0.728138 -0.877147 155 7.33995 -0.600753 -0.87655 129 7.29314 0.85164 -0.873586 167 7.32007 -0.576058 -0.873534 193 7.31394 -0.552489 -0.872438 229 7.28828 0.769889 -0.871664 152 7.30817 -0.494396 -0.871069 195 7.30658 -0.517352 -0.871068 226 7.28475 0.746363 -0.87084 129 7.27217 0.825958 -0.870295 191 7.2622 0.790132 -0.868374 152 7.24443 -0.467458 -0.86202 106 7.22216 -0.409182 -0.858457 181 7.19772 0.680034 -0.857948 176 7.21945 -0.386293 -0.857909 221 7.19391 0.656858 -0.857125 183 7.21095 -0.431313 -0.857085 191 7.18804 0.633528 -0.856027 204 7.20282 -0.362778 -0.855442 226 7.19257 -0.328332 -0.853797 228 7.17121 0.597933 -0.853283 222 7.18961 -0.30558 -0.85325 220 7.17108 0.575233 -0.853008 227 7.17257 0.473386 -0.852181 242 7.16298 0.551906 -0.851636 224 7.16876 -0.282214 -0.850234 168 7.15283 0.528483 -0.849989 146 7.16803 -0.248367 -0.849961 220 7.14338 0.493909 -0.848343 217 7.84562 -0.698756 -0.846371 40 7.13018 0.189749 -0.844492 217 7.12446 -0.0678749 -0.843386 251 7.12406 -0.101447 -0.843385 251 7.11327 0.368326 -0.843127 253 7.11594 0.312447 -0.843125 251 7.12279 0.0104555 -0.843114 250 7.12276 -0.0231101 -0.843113 250 7.12172 -0.123801 -0.843109 252 7.1213 -0.146174 -0.843109 252 7.11926 -0.224467 -0.843106 249 7.10812 0.390438 -0.84258 253 7.11097 0.334599 -0.842578 252 7.11499 0.234042 -0.842574 251 7.11876 0.0327997 -0.842567 251 7.11869 -0.0454761 -0.842564 251 7.11684 -0.168466 -0.842559 253 7.10699 0.289648 -0.841753 252 7.10787 0.267321 -0.841753 252 7.11003 -0.201855 -0.841735 253 7.09895 0.41228 -0.841484 253 7.10579 0.211359 -0.841202 252 7.10872 0.0550509 -0.841196 253 7.09297 0.445464 -0.840936 254 7.10327 0.155439 -0.840652 250 7.10212 0.110766 -0.840376 254 7.09976 0.133033 -0.840102 255 7.10046 0.0884217 -0.8401 255 7.6988 0.904894 -0.82958 76 10.4055 -0.873413 -0.819012 40 7.46574 -0.604582 -0.794223 89 7.43762 0.815933 -0.793205 167 7.42581 0.8501 -0.792136 63 10.0879 1.0614 -0.78955 40 8.08358 0.969793 -0.789132 63 8.09934 -0.701291 -0.787602 188 7.41031 -0.576467 -0.786469 233 10.0429 1.08868 -0.785416 41 7.37903 0.786268 -0.784913 238 10.0353 1.00822 -0.783839 40 10.0366 -0.793901 -0.782004 40 9.98606 1.11441 -0.780102 59 9.97476 1.16077 -0.779513 78 7.33807 0.758748 -0.779029 239 7.35675 -0.548859 -0.778981 244 7.32775 0.722848 -0.777155 239 7.34461 -0.524707 -0.77711 242 7.3142 0.698374 -0.775015 243 7.9722 0.931405 -0.774924 123 7.32525 -0.488563 -0.77417 245 7.30451 0.674343 -0.773409 244 7.30563 0.61663 -0.772872 232 7.32028 -0.407403 -0.772835 233 7.31686 -0.464884 -0.772833 246 7.30839 -0.441262 -0.771497 247 7.28786 0.638249 -0.770734 245 7.26216 -0.381076 -0.764813 193 7.2589 -0.278042 -0.763747 248 7.25503 -0.32355 -0.763478 218 7.23881 0.53116 -0.762974 197 7.24947 -0.357526 -0.762942 221 7.23244 0.587844 -0.762709 230 7.24809 -0.3004 -0.762409 194 7.2303 0.564826 -0.762173 227 7.23254 0.507887 -0.761904 221 7.24389 -0.254623 -0.761608 250 7.23305 0.405283 -0.761097 249 7.24171 -0.197595 -0.761076 252 7.22977 0.427893 -0.760831 251 7.23404 0.348371 -0.760828 249 7.24031 -0.17479 -0.760809 252 7.23907 -0.220281 -0.760807 252 7.22421 0.484537 -0.760565 205 7.23093 0.371007 -0.760561 248 7.23113 0.32548 -0.760292 250 7.23212 0.302762 -0.760291 249 7.23835 -0.0382555 -0.760279 250 7.23709 -0.140579 -0.760275 251 7.23149 0.26861 -0.760023 248 7.23229 0.245892 -0.760022 248 7.23303 0.223168 -0.760021 250 7.23636 0.04133 -0.760014 246 7.23552 -0.117805 -0.760009 249 7.23413 -0.0723126 -0.759743 252 7.23387 -0.0950377 -0.759742 250 7.23004 0.188993 -0.759485 247 7.2306 0.166276 -0.759484 250 7.23251 0.00724132 -0.759478 248 7.23249 -0.0154825 -0.759477 249 7.21652 0.449905 -0.759227 230 7.53729 0.871449 -0.75886 66 7.55359 -0.627006 -0.757787 58 7.20532 0.143142 -0.756006 211 7.20622 0.0865509 -0.756005 145 7.20646 0.0639058 -0.756004 221 7.20177 0.120454 -0.755471 211 10.305 -0.8362 -0.751376 75 7.38542 -0.590278 -0.735871 108 7.36067 0.826983 -0.735668 175 7.64272 -0.636093 -0.730777 62 7.29424 0.796078 -0.726747 159 7.31404 -0.561712 -0.726443 181 7.31624 -0.504122 -0.72619 252 7.29238 0.737935 -0.725725 246 7.30393 -0.480273 -0.724407 253 7.28084 0.713619 -0.72394 253 9.99118 1.03015 -0.723938 40 7.29819 -0.445393 -0.723388 255 7.2782 0.678726 -0.723175 255 7.26833 0.758501 -0.722923 229 7.55421 0.847889 -0.722503 63 7.29163 -0.422032 -0.72237 255 7.28494 -0.525071 -0.722366 240 7.27042 0.654934 -0.721899 255 7.28302 -0.398616 -0.721097 255 7.26257 0.631197 -0.720624 255 9.95226 1.05765 -0.720594 40 9.97836 -0.747456 -0.720345 40 7.27094 -0.363647 -0.719314 255 9.92421 1.16512 -0.719111 164 7.2536 0.595951 -0.719094 255 7.2661 -0.340546 -0.71855 255 7.24556 0.572338 -0.717819 255 7.24138 0.549103 -0.717054 255 7.2493 -0.317001 -0.716257 255 9.92831 -0.775204 -0.715884 40 7.24629 -0.294078 -0.715749 255 7.24363 -0.259799 -0.71524 255 7.24243 -0.236984 -0.714986 255 7.21736 0.524391 -0.71374 255 7.21975 0.490373 -0.713738 255 7.21334 0.467149 -0.712718 255 7.21085 0.410122 -0.711951 255 7.21934 -0.213611 -0.711929 255 7.20487 0.443837 -0.711443 255 7.20814 0.387237 -0.711441 255 7.46011 0.81394 -0.710499 139 7.2014 0.364162 -0.710421 255 7.20837 -0.179335 -0.710401 255 7.47747 -0.586299 -0.709958 98 7.19944 -0.133892 -0.709128 255 7.19898 -0.156509 -0.709127 255 7.18864 0.34083 -0.708636 255 7.842 -0.623414 -0.708633 95 7.1963 -0.0773154 -0.708621 255 7.19602 -0.099923 -0.70862 255 7.18818 0.30686 -0.70838 255 7.19241 0.182614 -0.708375 255 7.19466 -0.0320965 -0.708367 255 7.19452 -0.0546991 -0.708367 255 7.18713 0.284185 -0.708124 255 7.18799 0.261606 -0.708123 255 7.18982 0.205144 -0.708121 255 7.19121 0.148669 -0.708119 255 7.192 0.103482 -0.708117 255 7.19259 0.0469965 -0.708115 255 7.19275 0.00180027 -0.708114 255 7.18716 0.227663 -0.707867 255 7.18966 0.126036 -0.707864 255 7.19031 0.0808588 -0.707862 255 7.19072 0.0243874 -0.70786 255 7.3876 0.782811 -0.70119 78 7.39419 -0.556105 -0.699426 89 9.21214 0.331508 -0.697981 40 9.18538 0.40287 -0.695622 40 7.32996 0.74201 -0.693595 111 7.34839 -0.529283 -0.693549 98 9.1653 0.358789 -0.693455 62 7.68695 0.866521 -0.693292 84 7.31121 -0.491843 -0.688651 140 7.29076 0.715055 -0.68845 151 7.31217 -0.445768 -0.688408 236 7.29093 -0.467398 -0.685957 215 7.26925 0.689982 -0.68551 191 7.28778 -0.421214 -0.685224 241 7.26851 0.632377 -0.684773 239 7.27779 -0.386192 -0.683756 243 7.24766 0.665051 -0.68257 228 7.24474 0.607469 -0.681588 243 7.25915 -0.362266 -0.681307 245 7.24068 0.584249 -0.680852 243 7.60619 -0.581418 -0.680643 85 7.24637 -0.338761 -0.679594 246 7.23798 -0.304157 -0.67837 247 7.21761 0.548262 -0.677667 245 7.21138 0.525034 -0.676686 246 7.22303 -0.280743 -0.676411 247 7.20903 0.502116 -0.676195 247 7.21132 0.468137 -0.676194 247 7.2187 -0.235138 -0.675678 249 7.21793 -0.257815 -0.675677 249 7.20681 0.445136 -0.675458 246 7.20946 0.399844 -0.675457 246 7.20619 0.422381 -0.675213 245 7.21688 -0.155651 -0.675191 247 7.21636 -0.178323 -0.67519 249 7.21576 -0.200993 -0.67519 248 7.20841 0.343038 -0.674965 245 7.20532 0.365588 -0.674721 246 7.20747 0.320305 -0.674719 247 7.21357 -0.12156 -0.674703 247 7.20382 0.263492 -0.673982 246 7.20796 -0.0987937 -0.673969 247 7.20097 0.286051 -0.673738 245 7.20334 0.218171 -0.673735 247 7.20429 0.184224 -0.673734 247 7.20588 0.104998 -0.673731 247 7.2066 0.0257602 -0.673728 249 7.20665 0.00311978 -0.673728 246 7.20653 -0.042161 -0.673726 246 7.20064 0.240741 -0.673491 247 7.20285 0.161552 -0.673488 245 7.20134 0.138892 -0.673243 247 7.20228 -0.0760643 -0.673235 246 7.5192 0.811163 -0.672996 120 7.20067 -0.0194831 -0.672992 247 7.19824 0.0822976 -0.672751 248 7.19846 0.0596832 -0.67275 247 7.49589 -0.537856 -0.667348 104 7.44469 0.779203 -0.663898 166 7.42024 -0.50927 -0.658252 131 7.39377 0.750212 -0.657599 89 7.38377 0.667195 -0.655496 94 7.39751 -0.461121 -0.655221 100 7.3881 -0.483867 -0.654287 111 7.38374 -0.425398 -0.653357 99 7.35989 0.68828 -0.652931 100 7.35571 0.711199 -0.652699 94 7.3771 -0.401795 -0.652424 102 7.37011 -0.343416 -0.65126 103 7.36642 -0.378048 -0.651026 100 7.34626 0.640407 -0.65083 107 7.36321 -0.319943 -0.650328 106 7.33127 0.581054 -0.648495 101 7.32545 0.603741 -0.64803 122 7.33242 -0.295641 -0.646597 111 7.31326 0.556438 -0.646162 96 7.31741 0.498982 -0.64616 99 7.31184 0.521672 -0.645694 110 7.32132 -0.214642 -0.644967 108 7.30308 0.474904 -0.644292 100 7.31388 -0.260448 -0.644265 115 7.30262 0.417291 -0.643824 105 7.29859 0.451569 -0.643592 97 7.31005 -0.191371 -0.643568 113 7.30888 -0.156885 -0.643336 115 7.29795 0.394004 -0.643123 104 7.30473 -0.237183 -0.6431 118 7.29717 0.370967 -0.642889 110 7.29589 0.313459 -0.64242 115 7.29742 -0.133747 -0.641937 105 7.75554 -0.577842 -0.641726 67 7.29088 0.290279 -0.64172 105 7.29448 -0.0534859 -0.641474 107 7.28633 -0.0763471 -0.64054 103 7.28589 -0.110682 -0.640539 108 7.27701 0.335492 -0.640322 109 7.28468 -0.030563 -0.640308 116 7.27962 0.129546 -0.639848 103 7.28077 -0.0076873 -0.639843 115 7.27507 0.232373 -0.639618 104 7.27719 0.152366 -0.639615 106 7.27378 0.209452 -0.639384 100 7.27034 0.255074 -0.639153 106 7.27079 0.0265509 -0.638678 106 7.73366 -0.490678 -0.638665 40 7.26646 0.186368 -0.63845 97 7.26254 0.0721267 -0.637746 104 7.26074 0.0492898 -0.637512 110 7.25814 0.106277 -0.637281 104 7.68033 0.795088 -0.635646 62 8.08051 0.627402 -0.631557 71 7.6582 -0.546071 -0.630782 88 8.04873 0.599395 -0.628027 117 7.61076 0.751906 -0.627545 138 7.63094 -0.507893 -0.6275 118 7.62666 -0.37534 -0.626191 40 7.59923 0.726716 -0.626011 113 8.02677 0.572329 -0.625535 67 7.59356 0.702132 -0.625135 99 8.02541 0.534222 -0.625119 74 7.61597 0.175883 -0.62424 40 7.60849 -0.338447 -0.624003 40 7.60775 0.0681449 -0.623142 40 7.60551 0.09203 -0.622924 40 7.59033 -0.457157 -0.622685 40 7.58843 -0.421152 -0.622249 40 7.98933 0.506495 -0.621174 121 7.97638 0.656821 -0.620971 101 7.58358 0.199082 -0.620739 40 7.97718 0.442794 -0.619511 70 7.56391 -0.395872 -0.619404 40 7.96706 0.479882 -0.618682 69 7.56618 0.0441452 -0.618544 86 7.55486 0.150939 -0.617453 56 7.55132 0.127152 -0.617015 52 7.55239 0.00852061 -0.61701 55 7.81894 -0.550393 -0.6037 76 7.78526 0.800855 -0.602503 78 7.80068 -0.463048 -0.601212 166 7.76869 -0.351147 -0.597272 40 7.74246 0.661297 -0.596686 46 7.74718 -0.521133 -0.596021 146 7.74756 -0.484501 -0.595814 221 7.71848 0.769257 -0.595236 178 7.7343 -0.264543 -0.593331 40 7.73329 -0.155107 -0.59292 40 7.68523 0.741441 -0.591499 193 7.70766 0.378387 -0.591071 40 7.6827 0.704654 -0.590875 174 7.7056 -0.287892 -0.590424 40 7.70416 -0.324202 -0.590423 40 7.70432 -0.203059 -0.590012 40 7.69253 0.401824 -0.589619 43 7.68936 -0.238974 -0.588558 40 7.68901 -0.178539 -0.588353 40 7.67062 -0.0938067 -0.58628 40 7.66721 -0.00946938 -0.585868 40 7.65297 -0.0696076 -0.584412 40 7.6412 -0.430033 -0.5844 64 7.64841 -0.117641 -0.583996 40 7.63917 -0.393831 -0.583986 93 7.64718 -0.0455472 -0.583791 40 7.6353 0.350546 -0.58339 40 7.63475 0.0984033 -0.58255 40 7.63 0.146287 -0.582137 40 7.62905 0.0743404 -0.581927 40 7.6294 0.0144199 -0.581925 40 7.62049 -0.368937 -0.581911 52 7.62279 0.26596 -0.581726 40 7.62067 0.205962 -0.581309 40 7.61929 0.181967 -0.5811 40 7.61341 0.0382527 -0.580265 40 7.60855 0.121884 -0.579853 40 7.59911 0.312876 -0.579444 40 7.59409 0.288752 -0.578821 40 7.59612 0.229099 -0.578819 40 7.93673 0.464125 -0.572583 88 7.93617 0.439086 -0.572385 83 7.89654 0.773862 -0.57102 40 7.90742 0.487432 -0.569828 85 7.85887 -0.529089 -0.565264 66 7.84029 0.508246 -0.563332 81 7.82018 0.568701 -0.56176 45 7.81994 0.544 -0.561562 46 7.8124 0.592833 -0.56117 44 7.80555 0.629336 -0.560777 42 7.82113 -0.243097 -0.560155 40 7.80444 -0.475995 -0.559556 40 7.80092 -0.500377 -0.559359 168 7.80858 -0.193559 -0.558779 40 7.79997 -0.217841 -0.557991 40 7.79721 -0.168728 -0.557599 40 7.76218 0.736535 -0.557435 159 7.78716 -0.303171 -0.557003 40 7.7585 0.711622 -0.556843 130 7.77808 -0.449773 -0.556801 40 7.78399 -0.131701 -0.556222 40 7.78012 -0.278394 -0.556217 40 7.77822 -0.327273 -0.556215 40 7.76716 -0.0215382 -0.554454 40 7.7587 -0.363026 -0.554442 40 7.74655 -0.106594 -0.552482 40 7.74317 -0.0457168 -0.552091 40 7.71743 0.0030137 -0.549533 40 7.71401 0.148443 -0.549342 40 7.69268 -0.408179 -0.548141 42 7.7007 0.111936 -0.547962 40 7.69759 0.172372 -0.547768 40 7.69305 0.087677 -0.547174 40 7.68706 0.196339 -0.546784 40 7.68008 0.232399 -0.546195 40 7.68334 0.0634609 -0.546189 40 7.67405 -0.382951 -0.546173 42 7.68156 0.0272515 -0.545991 40 8.09812 0.0891955 -0.542346 40 7.89213 0.458734 -0.524334 92 7.88903 -0.509258 -0.524299 85 7.89955 -0.248737 -0.524123 40 7.86407 0.767826 -0.523974 133 7.87166 0.432658 -0.522289 46 7.85494 -0.272181 -0.520033 40 7.83521 0.5665 -0.519692 77 7.8402 0.492631 -0.519689 85 7.82854 0.627854 -0.519508 47 7.83692 -0.481353 -0.519283 216 7.82471 0.516294 -0.518389 77 7.80501 0.737102 -0.518212 215 7.81062 0.60166 -0.517649 102 7.82862 -0.222124 -0.517433 40 7.81114 0.540009 -0.517275 122 7.82146 -0.0744644 -0.51651 40 7.81933 -0.19731 -0.516505 40 7.8142 -0.160357 -0.515949 40 7.78151 0.710142 -0.515795 212 7.80908 -0.111191 -0.515393 40 7.79471 -0.41749 -0.515011 40 7.79785 -0.307185 -0.514829 40 7.79987 -0.0253211 -0.514467 40 7.78143 -0.441339 -0.513895 40 7.78979 -0.0497947 -0.513537 40 7.77754 0.402667 -0.513368 40 7.77683 -0.135276 -0.512419 40 7.76146 0.365111 -0.511694 40 7.75307 -0.329965 -0.51074 73 7.75211 0.0112058 -0.510009 40 7.7437 0.315459 -0.509834 40 7.72879 0.2297 -0.508158 40 7.72215 -0.353057 -0.507951 97 7.72405 0.253838 -0.507787 40 7.72123 0.278023 -0.507602 40 7.72239 0.168794 -0.507413 40 7.71952 0.205122 -0.507228 40 7.7189 0.144446 -0.50704 40 7.71085 0.33828 -0.506861 40 7.70538 0.119927 -0.505738 40 7.69653 -0.388319 -0.50572 52 7.69429 0.0351012 -0.50462 45 8.04781 0.753369 -0.489752 166 8.05954 -0.298582 -0.488155 40 8.03159 -0.499854 -0.486589 68 8.02334 -0.436072 -0.485552 66 7.98307 0.596013 -0.482991 40 7.98341 -0.471521 -0.482259 195 7.95598 0.707279 -0.481436 146 7.98278 -0.270378 -0.481401 40 7.97401 -0.232434 -0.480536 40 7.95087 0.543512 -0.479871 64 7.94713 0.568351 -0.479699 87 7.93433 0.680314 -0.479357 56 7.94495 0.480484 -0.479003 65 7.94045 0.455195 -0.478482 63 7.93146 0.50472 -0.477964 110 7.94283 -0.206449 -0.477765 40 7.92718 -0.405556 -0.477065 50 7.90764 0.615607 -0.476583 44 7.91989 0.391714 -0.476401 40 7.92669 -0.118774 -0.476209 40 7.91732 -0.0688478 -0.475345 40 7.90958 -0.18061 -0.474822 40 7.90413 -0.155623 -0.474303 40 7.90312 -0.0935096 -0.474132 40 7.90168 -0.00659767 -0.473962 40 7.89568 0.0182322 -0.473443 40 7.88579 -0.353632 -0.473256 67 7.88966 -0.0313348 -0.472922 40 7.88339 -0.316294 -0.472911 66 7.88268 0.129693 -0.472408 40 7.87601 0.166731 -0.47189 40 7.87707 0.104868 -0.471887 40 7.87537 0.080107 -0.471713 40 7.86888 0.277928 -0.471547 40 7.86336 0.364347 -0.471377 40 7.86598 0.302577 -0.471375 40 7.86947 0.191348 -0.471371 40 7.86048 0.339483 -0.47103 40 7.85295 0.413354 -0.470686 40 7.85776 0.252861 -0.470507 40 7.85887 0.215829 -0.470506 40 7.85765 0.0552984 -0.470153 40 7.84683 -0.376465 -0.469964 73 8.22815 -0.422798 -0.459863 40 8.14572 -0.470149 -0.453354 58 8.09612 0.75621 -0.451121 57 8.11195 -0.391652 -0.450265 40 8.10336 -0.442306 -0.449775 149 8.08813 0.640203 -0.449652 40 8.07068 0.72817 -0.448842 137 8.06485 0.549105 -0.447208 40 8.05632 0.612114 -0.446885 40 8.07605 -0.237587 -0.446854 40 8.07754 -0.00918061 -0.4467 40 8.05116 0.573551 -0.446233 40 8.05595 -0.35109 -0.445549 40 8.05534 -0.262373 -0.445226 40 8.03709 0.483728 -0.444603 40 8.04577 -0.173566 -0.444253 40 8.02875 0.52119 -0.444116 40 8.03841 0.142278 -0.443614 40 8.03509 -0.0976229 -0.44328 40 8.03291 -0.211204 -0.443276 40 8.03233 -0.148077 -0.443115 40 8.01568 -0.0344917 -0.441655 40 8.01171 0.028437 -0.441332 40 8.00123 -0.323704 -0.440994 43 7.99081 0.455598 -0.440697 40 7.99807 0.166571 -0.440361 40 7.99515 0.103685 -0.440033 40 7.99488 -0.122385 -0.440025 40 7.9936 -0.0595815 -0.439865 40 7.99145 0.0785149 -0.439707 40 7.97783 0.253874 -0.4389 40 7.97858 0.22881 -0.438899 40 7.97571 0.05325 -0.438405 40 7.96961 0.190938 -0.438084 40 7.9544 -0.296938 -0.43709 43 8.70803 -0.486258 -0.429247 194 8.23685 -0.406632 -0.394346 99 8.22159 -0.431733 -0.393319 106 8.21875 -0.366862 -0.392881 84 8.1958 0.691719 -0.392772 65 8.19197 0.665503 -0.392331 89 8.19994 -0.340148 -0.391416 43 8.1602 0.637229 -0.389837 74 8.16312 0.598766 -0.389835 95 8.16908 -0.313064 -0.38907 43 8.14681 0.546192 -0.388367 105 8.16206 -0.22292 -0.38834 115 8.14252 0.520234 -0.387926 121 8.14376 0.430472 -0.38763 116 8.155 0.0463724 -0.387616 126 8.13691 0.481414 -0.387338 122 8.13639 0.455745 -0.387191 113 8.14704 -0.0432326 -0.387026 108 8.14478 -0.196779 -0.387021 114 8.12515 0.570453 -0.386901 141 8.14407 -0.13277 -0.386876 119 8.14162 -0.158308 -0.386729 116 8.14088 -0.0687559 -0.386585 112 8.13605 0.225292 -0.386449 114 8.13915 -0.0175925 -0.386441 111 8.12577 0.391198 -0.386162 111 8.13006 0.135717 -0.385859 111 8.1276 0.161223 -0.385714 104 8.12888 0.0718442 -0.385711 117 8.1285 -0.106924 -0.385704 111 8.11899 0.365336 -0.385574 108 8.12334 0.250523 -0.38557 113 8.12718 0.0207719 -0.385562 110 8.12052 0.275979 -0.385424 104 8.11514 0.314103 -0.385132 121 8.11908 0.186596 -0.385128 109 8.12064 0.0973101 -0.385125 112 8.11013 0.339444 -0.38484 106 8.08874 -0.271556 -0.383059 50 8.47214 -0.411845 -0.364192 69 8.45345 -0.384383 -0.362838 110 8.4277 0.717541 -0.362606 106 8.39719 0.674998 -0.360302 103 8.41815 -0.263709 -0.360134 164 8.41076 -0.3561 -0.359859 109 8.38534 0.647497 -0.359353 103 8.38043 -0.315362 -0.357693 103 8.36147 0.619157 -0.357591 119 8.36941 -0.288659 -0.356882 112 8.33353 0.590674 -0.355558 123 8.32826 0.550843 -0.355015 96 8.30965 0.497124 -0.353523 101 8.30592 0.457615 -0.353115 124 8.31729 -0.143218 -0.353094 100 8.3168 -0.16935 -0.353093 95 8.31587 -0.104006 -0.35296 96 8.29809 0.522572 -0.352847 131 8.29935 0.431081 -0.352573 97 8.30219 -0.0777908 -0.352013 94 8.3004 -0.0517036 -0.351878 100 8.28853 0.365223 -0.351622 109 8.29426 0.195905 -0.351616 99 8.28761 0.286944 -0.351348 125 8.29257 0.013451 -0.351339 92 8.29257 -0.0125995 -0.351338 97 8.28833 0.0655151 -0.35107 98 8.2885 0.0394698 -0.351069 129 8.27966 0.338744 -0.350944 118 8.28593 0.104538 -0.350936 171 8.27964 0.221542 -0.350669 125 8.27077 0.403455 -0.35054 118 8.27491 0.247423 -0.350399 95 8.27072 0.312324 -0.350266 119 8.27514 0.156375 -0.35026 109 8.23569 0.129625 -0.34755 49 8.22779 -0.219535 -0.347131 56 8.60314 0.688897 -0.326023 70 8.61965 -0.394705 -0.32586 72 8.60231 0.620894 -0.325648 167 8.608 -0.339945 -0.324993 123 8.59293 -0.366349 -0.324122 59 8.55748 0.658338 -0.32304 65 8.57511 -0.311565 -0.322882 90 8.52255 0.588475 -0.320553 89 8.52063 -0.269217 -0.319404 131 8.49846 0.560071 -0.318937 119 8.50148 -0.241814 -0.318163 125 8.5002 -0.215049 -0.31804 132 8.48506 0.519089 -0.317942 124 8.4743 0.425015 -0.316944 121 8.46473 0.491226 -0.316574 112 8.46684 0.37135 -0.316321 116 8.45825 0.46422 -0.316076 115 8.45566 0.397508 -0.315701 115 8.44602 0.343924 -0.314953 117 8.44846 0.277579 -0.314951 120 8.45293 0.0386222 -0.314943 99 8.45077 0.0651669 -0.314819 99 8.44853 0.0917065 -0.314696 104 8.44156 0.303921 -0.314579 124 8.43333 0.250608 -0.313956 130 8.43503 0.184366 -0.313954 120 8.43242 0.210823 -0.313831 100 8.43158 0.157804 -0.313704 114 8.43004 0.131292 -0.313579 107 8.40312 -0.00104882 -0.311835 70 8.39908 -0.0274251 -0.311586 51 8.37191 -0.145627 -0.309966 145 8.36901 -0.0535256 -0.309721 57 8.35436 -0.119011 -0.308849 55 8.34072 -0.0925675 -0.30798 92 8.31154 -0.170511 -0.306238 59 9.09891 0.598689 -0.302387 74 9.07038 -0.387497 -0.300105 74 8.8457 0.553391 -0.288002 92 8.78997 0.480454 -0.284629 167 8.76551 0.451427 -0.283167 128 8.75692 0.423377 -0.282604 124 8.75398 0.354323 -0.282265 114 8.75926 -0.182287 -0.282246 213 8.74684 0.381551 -0.281929 134 8.73909 0.326178 -0.281365 125 8.73455 0.284782 -0.281026 123 8.73616 0.229894 -0.281024 134 8.73646 -0.113247 -0.2809 163 8.73141 0.257208 -0.280801 137 8.73316 0.188624 -0.280798 155 8.73477 -0.0857862 -0.280788 167 8.73319 0.0102532 -0.280679 169 8.73314 -0.0309012 -0.280678 171 8.73069 -0.209217 -0.280671 174 8.72562 -0.250255 -0.280445 151 8.72713 0.0376508 -0.280343 173 8.71068 0.503344 -0.280248 70 8.72502 -0.0583076 -0.280227 177 8.72173 0.160932 -0.280123 156 8.7168 -0.277436 -0.279995 89 8.70039 -0.345376 -0.279206 58 8.703 0.0648161 -0.278996 173 8.66279 0.596086 -0.277891 75 8.64197 0.635532 -0.276881 53 8.5888 0.104101 -0.272592 63 9.35203 0.452203 -0.263711 255 9.32623 -0.120644 -0.26187 219 9.26411 0.623381 -0.259773 59 8.95294 -0.213257 -0.243057 255 8.68156 -0.0695909 -0.229207 255 8.63961 0.460548 -0.227709 255 8.60577 0.0529079 -0.225369 255 8.57021 0.173974 -0.223654 58 8.56691 -0.135626 -0.22344 58 8.56472 0.146965 -0.223349 98 8.56162 0.0796681 -0.223145 255 8.5324 0.482036 -0.22235 255 8.54447 -0.162055 -0.222327 228 8.51587 0.266729 -0.221028 255 8.49869 0.239523 -0.220116 255 8.32628 -0.0133614 -0.211208 93 8.31621 -0.0394407 -0.210701 94 8.96402 0.737724 -0.193987 90 8.94638 0.707926 -0.193088 219 8.91071 0.676826 -0.191382 255 8.92708 -0.361113 -0.191255 255 8.92765 -0.29093 -0.191168 157 8.92669 -0.318976 -0.191167 255 8.82215 0.628032 -0.187253 85 8.69459 -0.188348 -0.180584 173 8.6835 0.439735 -0.180517 155 8.6936 -0.13369 -0.180497 218 8.66863 0.589278 -0.180254 147 8.68561 -0.229132 -0.180224 142 8.66817 0.534542 -0.180072 100 8.66445 0.561637 -0.179984 126 8.67011 0.466333 -0.17998 161 8.68115 -0.160815 -0.179957 218 8.66262 0.49321 -0.179712 147 8.66887 -0.255993 -0.179505 109 8.55047 0.271128 -0.174231 255 8.50217 0.336318 -0.17217 255 8.48569 0.295567 -0.171361 255 8.47195 0.388365 -0.170915 95 8.47811 0.215295 -0.170909 255 8.47754 0.148661 -0.170817 255 8.47504 0.175245 -0.170728 255 8.47645 0.0820483 -0.170725 255 8.47067 0.0553607 -0.170455 255 8.43545 0.240603 -0.169026 255 8.43801 0.121329 -0.169022 255 8.42722 0.359647 -0.168851 255 8.36871 -0.0639313 -0.165875 237 8.36292 0.0280514 -0.165609 68 8.35489 -0.0376203 -0.165247 94 8.319 -0.0114353 -0.163633 145 9.39518 -0.0991048 -0.152529 183 9.29831 -0.419452 -0.14913 222 9.00086 0.69923 -0.138389 181 8.90696 0.720358 -0.134848 66 8.92025 -0.373261 -0.134501 90 8.92378 0.201567 -0.134444 255 8.91993 0.0473385 -0.134208 73 8.90975 0.0753043 -0.133824 255 8.88149 0.103055 -0.132747 151 8.87641 0.17274 -0.132595 227 8.87115 0.228414 -0.132443 241 8.86891 0.144748 -0.132286 165 8.33837 -0.0457384 -0.111797 74 9.28441 0.0500667 -0.0902464 255 8.89064 0.270381 -0.0776899 131 8.79249 0.0736587 -0.0743969 243 8.61172 0.234005 -0.068668 68 8.49224 0.110282 -0.0647332 95 8.46987 0.136537 -0.0640255 91 8.46085 0.189553 -0.0637697 123 8.45141 0.162742 -0.0634465 168 8.88309 0.26138 -0.0320257 255 8.87823 0.219388 -0.0318619 255 8.84689 0.190892 -0.0309946 255 8.84544 0.163069 -0.0309394 255 8.84245 0.0935615 -0.0308287 255 8.82013 0.121106 -0.0302341 255 8.77273 0.0654683 -0.0289326 255 9.01241 0.13912 0.0245056 252 8.96557 0.265085 0.0253975 255 8.909 0.0952339 0.0266258 255 8.90325 0.0671821 0.0267491 255 8.89741 0.192944 0.0268261 255 8.89398 0.164907 0.0269086 255 8.89041 0.234692 0.0269469 255 8.95471 0.116157 0.0670951 81 8.94953 0.186412 0.0671555 110 8.88832 0.143417 0.0681312 253 9.02469 0.151401 0.125292 183 9.01931 0.108781 0.125348 128 8.99561 0.0801626 0.125567 80 8.95452 0.248538 0.125906 90 8.9382 0.177792 0.126073 244 8.9236 0.205508 0.126199 166 9.00192 0.0726162 0.182451 123 8.95165 0.100479 0.182586 70 8.90402 0.198014 0.182707 144 8.89709 0.141963 0.182731 100 8.8946 0.16988 0.182735 252 7.18797 -0.0609817 0.187382 55 7.28661 0.904489 0.230328 40 7.29537 0.882336 0.230348 40 7.29365 0.92868 0.23036 40 7.74085 -0.161285 0.231668 255 7.75967 -0.210391 0.231735 255 7.80029 -0.186838 0.231864 255 8.87893 0.167549 0.235358 255 8.89604 0.209867 0.235416 185 8.90541 0.14014 0.235444 117 8.90733 0.238168 0.235454 82 8.9858 0.113405 0.235705 73 9.01623 0.0713859 0.235804 196 +unknow 0.970541 1 0 540 -1.44489 -20.1855 -1.43877 135 -2.03664 -20.0343 -1.43065 123 -2.09896 -20.0218 -1.43016 129 -2.15741 -19.9735 -1.42675 140 -2.21927 -19.9587 -1.4261 140 -2.64716 -19.826 -1.4196 155 -2.30353 -19.8629 -1.4191 131 -2.7384 -19.7975 -1.4183 142 -2.7967 -19.7612 -1.41603 138 -2.85849 -19.7503 -1.41586 137 -2.91734 -19.7196 -1.41408 135 -3.00874 -19.6957 -1.41327 138 -3.06664 -19.6606 -1.41115 139 -3.12528 -19.6312 -1.40953 142 -3.21744 -19.6142 -1.40937 141 -3.33928 -19.5858 -1.40872 146 -3.27578 -19.5844 -1.40774 139 -3.42403 -19.5266 -1.40514 138 -2.56115 -19.6504 -1.40447 137 -3.48326 -19.504 -1.40417 136 -3.53992 -19.4675 -1.40206 135 -2.49542 -19.6267 -1.40187 124 -3.69123 -19.4312 -1.40141 136 -3.59926 -19.4464 -1.40125 138 -3.74775 -19.396 -1.39946 135 -2.33723 -19.612 -1.3991 126 -3.80752 -19.3783 -1.39897 136 -2.39763 -19.5947 -1.39829 122 -4.01592 -19.3138 -1.39719 136 -3.8941 -19.3367 -1.39703 137 -3.95364 -19.3185 -1.39654 138 -4.0688 -19.264 -1.3941 136 -4.15828 -19.2388 -1.39362 138 -3.67051 -21.2989 -1.37674 185 -3.73532 -21.2755 -1.37586 186 -3.90121 -21.2396 -1.37543 186 -3.83411 -21.2498 -1.37528 185 -3.96276 -21.1998 -1.37338 182 -4.1276 -21.1602 -1.37279 193 -4.02634 -21.1716 -1.37221 189 -4.19093 -21.1315 -1.37162 190 -4.25413 -21.1026 -1.37045 187 -4.35068 -21.0686 -1.36943 189 -4.41355 -21.0392 -1.36826 187 -4.47754 -21.0155 -1.36753 186 -4.53972 -20.9838 -1.36621 186 -4.63509 -20.9466 -1.36504 182 -4.69955 -20.9261 -1.3646 182 -4.75992 -20.8879 -1.36284 183 -4.85557 -20.8536 -1.36197 180 -4.9183 -20.8266 -1.36109 181 -4.9781 -20.7878 -1.35933 180 -5.07077 -20.7428 -1.35772 177 -5.13205 -20.7112 -1.35655 180 -5.67259 -20.4042 -1.34484 217 -5.83211 -20.3571 -1.3447 176 -5.76485 -20.3638 -1.34381 166 -5.88433 -20.2985 -1.34162 174 -6.03096 -20.2096 -1.3384 165 -5.93115 -20.2225 -1.33722 221 -5.56442 -20.2623 -1.33266 138 -5.30561 -19.5638 -1.27811 191 -2.86969 -20.0301 -1.27541 255 -5.20305 -19.5501 -1.27518 172 -5.14058 -19.5625 -1.27488 198 -5.07709 -19.5708 -1.2743 194 -4.92225 -19.6062 -1.274 191 -4.9769 -19.5636 -1.27195 187 -5.14732 -21.0414 -1.25857 86 -2.11352 -19.8351 -1.25428 148 -2.28641 -19.6954 -1.24548 255 -2.71094 -19.5831 -1.24124 155 -2.4311 -19.5977 -1.23962 255 -2.58442 -19.574 -1.23933 213 -2.3688 -19.5993 -1.23918 170 -1.99875 -19.6385 -1.23902 234 -2.21185 -19.5915 -1.23727 162 -2.14633 -19.5627 -1.23463 143 -1.50503 -20.4452 -1.17966 91 -5.318 -19.5859 -1.16582 117 -5.37898 -19.5672 -1.16568 119 -5.22308 -19.6011 -1.16514 162 -5.09783 -19.6258 -1.16459 91 -5.15592 -19.5962 -1.16365 190 -4.99598 -19.6128 -1.16202 246 -4.70943 -19.6446 -1.15943 141 -4.86309 -19.6051 -1.1593 149 -4.92272 -19.582 -1.15876 131 -4.64449 -19.6457 -1.15848 171 -4.57645 -19.633 -1.15659 193 -4.47946 -19.6349 -1.15523 202 -4.4134 -19.6294 -1.15387 201 -4.34657 -19.6198 -1.15225 207 -4.24902 -19.6166 -1.15062 206 -4.18448 -19.6162 -1.14967 205 -4.11753 -19.6039 -1.14791 204 -4.05191 -19.5972 -1.14655 206 -2.12571 -19.8844 -1.14555 124 -3.95599 -19.5984 -1.14533 218 -3.61427 -19.6501 -1.14437 255 -3.67562 -19.6367 -1.14424 255 -3.89054 -19.5912 -1.14397 232 -3.82631 -19.5896 -1.14302 251 -3.51605 -19.6355 -1.1422 255 -3.72839 -19.578 -1.14099 255 -3.38283 -19.6002 -1.13827 247 -3.44405 -19.5875 -1.13814 255 -3.31926 -19.5989 -1.13746 234 -3.22622 -19.6104 -1.13718 231 -3.16271 -19.6086 -1.13637 237 -3.09831 -19.6007 -1.13515 244 -2.82063 -19.6406 -1.13501 228 -3.00531 -19.6111 -1.13488 243 -2.94222 -19.6106 -1.1342 247 -2.87715 -19.5961 -1.13257 255 -2.65992 -19.6146 -1.13175 130 -2.59517 -19.5992 -1.13013 252 -2.44116 -19.6189 -1.13012 210 -2.3788 -19.6206 -1.12971 123 -2.50153 -19.6013 -1.12945 255 -2.00636 -19.6401 -1.12822 255 -2.28335 -19.6058 -1.12795 233 -1.94193 -19.6185 -1.12632 255 -2.21841 -19.5831 -1.12592 248 -2.15623 -19.584 -1.12551 92 -5.63772 -19.6075 -1.05838 162 -5.47871 -19.6339 -1.05726 179 -5.5624 -19.5772 -1.05527 215 -1.50736 -20.2781 -1.05405 105 -4.96101 -19.6764 -1.05153 154 -5.32942 -19.5736 -1.05117 159 -5.26582 -19.5826 -1.05067 182 -5.38662 -19.5414 -1.05018 113 -4.82915 -19.6742 -1.04941 102 -5.16529 -19.5763 -1.04868 251 -5.03619 -19.5852 -1.04718 148 -5.09567 -19.5615 -1.04669 233 -4.86042 -19.537 -1.04159 154 -4.70214 -19.5551 -1.04034 255 -4.36008 -19.6179 -1.03934 255 -4.63512 -19.5465 -1.03885 255 -4.57232 -19.5551 -1.03848 255 -4.29069 -19.5964 -1.0371 255 -4.50545 -19.5461 -1.03698 255 -4.4102 -19.5535 -1.03611 255 -4.192 -19.5871 -1.03523 255 -4.12879 -19.5924 -1.03474 255 -4.06558 -19.5974 -1.03424 255 -4.00158 -19.5984 -1.03349 255 -3.90722 -19.6072 -1.03287 255 -3.84097 -19.5959 -1.03137 255 -2.13535 -19.8503 -1.03108 124 -2.75698 -19.7675 -1.03072 163 -3.77406 -19.5805 -1.02963 255 -3.67915 -19.5843 -1.02876 255 -3.61359 -19.5742 -1.02739 255 -3.54957 -19.5717 -1.02652 255 -3.4566 -19.5842 -1.02627 255 -3.39437 -19.5911 -1.02602 255 -3.33281 -19.6016 -1.02602 255 -3.26989 -19.6041 -1.02552 255 -3.17715 -19.6174 -1.02539 255 -2.95796 -19.6294 -1.02402 255 -2.89392 -19.6228 -1.02303 255 -3.04764 -19.5975 -1.02291 255 -3.10383 -19.5543 -1.0208 255 -2.54511 -19.5986 -1.01855 135 -2.81961 -19.5449 -1.01756 255 -2.66602 -19.5664 -1.01756 86 -2.38866 -19.5982 -1.0173 168 -2.60321 -19.5648 -1.01693 143 -2.44947 -19.5847 -1.01693 134 -1.95553 -19.6301 -1.0163 255 -2.04759 -19.6167 -1.01605 255 -2.32375 -19.5779 -1.01556 153 -2.16458 -19.5479 -1.01258 110 -2.22324 -19.5172 -1.01109 254 -5.91837 -19.7716 -0.95034 123 -1.46238 -20.5805 -0.949879 251 -5.83253 -19.7097 -0.945619 217 -5.72738 -19.6947 -0.943144 236 -5.65175 -19.6646 -0.940334 242 -5.48965 -19.6815 -0.938756 194 -5.57908 -19.6439 -0.938085 240 -5.41829 -19.664 -0.936732 148 -5.34709 -19.6462 -0.934708 126 -5.28277 -19.6533 -0.934144 205 -5.18807 -19.6702 -0.933691 181 -5.12224 -19.671 -0.932791 148 -5.05844 -19.6792 -0.93234 161 -4.84175 -19.7336 -0.932333 158 -1.50015 -20.2074 -0.929099 132 -4.94963 -19.6389 -0.928629 154 -4.88695 -19.6505 -0.928403 122 -4.71947 -19.6339 -0.925252 255 -4.65318 -19.6292 -0.924127 255 -4.58833 -19.6301 -0.923339 255 -4.52218 -19.6249 -0.922214 255 -4.42615 -19.6304 -0.921312 255 -4.36144 -19.6306 -0.920524 255 -4.29848 -19.6383 -0.920185 248 -2.21149 -19.9793 -0.920016 128 -2.71207 -19.9114 -0.919692 174 -4.20174 -19.6389 -0.919059 252 -4.13593 -19.6324 -0.917933 255 -4.07101 -19.6297 -0.917033 255 -3.97334 -19.6232 -0.91557 255 -3.91129 -19.6336 -0.915456 255 -3.84577 -19.6262 -0.914331 255 -3.78109 -19.6225 -0.91343 255 -3.68602 -19.6263 -0.912641 255 -3.62362 -19.6339 -0.912415 255 -3.55909 -19.6295 -0.911514 255 -3.46483 -19.6362 -0.91095 255 -3.40279 -19.645 -0.910836 255 -3.33773 -19.6359 -0.909711 255 -3.27473 -19.6384 -0.90926 255 -3.1793 -19.6359 -0.908246 255 -3.1176 -19.6458 -0.908245 255 -3.05282 -19.6357 -0.90712 255 -2.9576 -19.6321 -0.906106 255 -2.89418 -19.6295 -0.905431 255 -2.83221 -19.6365 -0.905317 255 -2.0273 -19.7278 -0.904847 255 -2.73828 -19.6397 -0.904752 255 -2.60961 -19.617 -0.902503 124 -2.54772 -19.6231 -0.902389 101 -2.45473 -19.6309 -0.902162 184 -2.39233 -19.6326 -0.901823 136 -2.23717 -19.6428 -0.90137 107 -1.95868 -19.6665 -0.901027 255 -2.11286 -19.6485 -0.900918 255 -2.32645 -19.6043 -0.8998 117 -5.94056 -19.7276 -0.832491 117 -5.8528 -19.66 -0.827939 235 -5.41059 -19.7532 -0.826307 186 -5.77628 -19.6285 -0.825308 250 -5.66868 -19.6037 -0.822575 251 -5.59383 -19.5754 -0.820146 255 -5.52685 -19.5736 -0.819133 255 -5.43241 -19.5918 -0.818725 235 -4.93104 -19.693 -0.817193 99 -5.29401 -19.5696 -0.815789 172 -1.53049 -20.1791 -0.813866 144 -5.19194 -19.5577 -0.813865 147 -5.12539 -19.5546 -0.812852 145 -5.06041 -19.5571 -0.812143 129 -4.99497 -19.5574 -0.811332 170 -4.83881 -19.5863 -0.810821 255 -4.7744 -19.5898 -0.810213 255 -4.68063 -19.6062 -0.809906 255 -4.61671 -19.6111 -0.809399 255 -4.55372 -19.6197 -0.809094 255 -4.48534 -19.6047 -0.807576 255 -4.39159 -19.6198 -0.807269 255 -2.55345 -19.9143 -0.805803 199 -4.32344 -19.6042 -0.805751 255 -4.25628 -19.5923 -0.804435 255 -4.16182 -19.6024 -0.803926 255 -4.09611 -19.5958 -0.802914 255 -4.03331 -19.6028 -0.802609 255 -2.38805 -19.8603 -0.802059 134 -3.93851 -19.6098 -0.801999 255 -3.87533 -19.6142 -0.801593 255 -3.80794 -19.5969 -0.800075 255 -3.74522 -19.6029 -0.79977 255 -3.65023 -19.6066 -0.799059 255 -2.44178 -19.7834 -0.798522 128 -2.31649 -19.7904 -0.798114 170 -3.58427 -19.5944 -0.797844 255 -2.59287 -19.7319 -0.796908 116 -3.51736 -19.5761 -0.796326 255 -3.42264 -19.5786 -0.795616 255 -3.36044 -19.5854 -0.795412 255 -3.29822 -19.5919 -0.795208 255 -3.20456 -19.5993 -0.794801 255 -3.14202 -19.6034 -0.794496 255 -3.07979 -19.6092 -0.794292 255 -3.01603 -19.605 -0.793583 255 -2.92183 -19.6071 -0.792974 255 -2.79772 -19.6192 -0.792667 255 -2.85876 -19.6063 -0.792467 255 -2.70166 -19.6064 -0.791351 255 -1.98784 -19.6534 -0.789412 255 -2.63171 -19.5534 -0.788215 255 -2.07766 -19.618 -0.7881 255 -2.13906 -19.6094 -0.788 255 -2.20043 -19.6006 -0.787901 255 -5.94057 -19.7861 -0.71749 117 -5.26647 -19.9017 -0.714239 171 -5.2009 -19.9065 -0.713699 178 -5.85008 -19.7088 -0.713003 215 -5.11848 -19.8454 -0.710109 169 -5.76797 -19.6581 -0.709771 241 -5.6626 -19.6409 -0.707705 247 -5.31308 -19.701 -0.706079 190 -5.58996 -19.6201 -0.705909 251 -1.52619 -20.3317 -0.705257 130 -5.5186 -19.6029 -0.704292 255 -5.42033 -19.6075 -0.703302 255 -5.35085 -19.5956 -0.701955 255 -4.90133 -19.6387 -0.698712 255 -4.83486 -19.6346 -0.697813 255 -4.98696 -19.5882 -0.697459 255 -4.77034 -19.638 -0.697273 255 -4.67453 -19.6467 -0.696642 255 -4.5969 -19.5931 -0.693501 255 -4.52995 -19.5841 -0.692423 255 -4.25096 -19.6384 -0.692055 255 -4.43366 -19.5877 -0.691612 255 -4.15467 -19.6406 -0.691245 255 -4.36821 -19.584 -0.690803 255 -4.0889 -19.634 -0.690347 255 -4.30112 -19.5722 -0.689635 255 -4.02122 -19.6174 -0.688999 255 -3.926 -19.6224 -0.688369 255 -3.79735 -19.6192 -0.687109 255 -3.73459 -19.6251 -0.686839 255 -3.6417 -19.6406 -0.686746 255 -1.93341 -19.8815 -0.686702 120 -3.57749 -19.6381 -0.686117 255 -3.51369 -19.6375 -0.685577 255 -3.85207 -19.5719 -0.685497 255 -3.42009 -19.6479 -0.685305 255 -3.35601 -19.6448 -0.684675 255 -3.29198 -19.6414 -0.684046 255 -3.19779 -19.6468 -0.683595 255 -3.132 -19.6311 -0.682427 255 -3.06909 -19.633 -0.682067 255 -3.0056 -19.6307 -0.681527 255 -2.91131 -19.6328 -0.680986 255 -2.84962 -19.6418 -0.680985 255 -1.98207 -19.7362 -0.680425 255 -2.7815 -19.6052 -0.67892 255 -2.68747 -19.6062 -0.67838 255 -2.62508 -19.6086 -0.678109 255 -2.06824 -19.661 -0.677467 236 -2.56116 -19.5989 -0.6773 255 -2.46803 -19.6048 -0.677029 255 -2.12872 -19.6425 -0.676931 255 -2.40571 -19.6065 -0.676758 255 -2.18976 -19.6298 -0.676663 255 -2.28201 -19.6173 -0.676576 255 -2.34269 -19.6021 -0.676218 255 -5.88643 -19.7196 -0.583167 134 -5.79547 -19.6403 -0.579239 182 -5.69056 -19.6252 -0.577542 202 -5.61229 -19.5854 -0.57523 217 -5.54198 -19.5721 -0.573997 225 -5.4427 -19.573 -0.572993 227 -5.37214 -19.5573 -0.571682 231 -5.30594 -19.5567 -0.570988 231 -5.23668 -19.5443 -0.569831 234 -5.13788 -19.5437 -0.568827 243 -5.07242 -19.5442 -0.56821 243 -5.00701 -19.5446 -0.567592 247 -4.91143 -19.5544 -0.56705 250 -4.8461 -19.5542 -0.566433 250 -4.78083 -19.5538 -0.565815 251 -4.68302 -19.5528 -0.564888 250 -4.61741 -19.5499 -0.564194 254 -4.55232 -19.5488 -0.563576 255 -4.48684 -19.5455 -0.562882 255 -4.3916 -19.5528 -0.56234 253 -4.32581 -19.5469 -0.561568 251 -4.25967 -19.539 -0.56072 245 -4.16461 -19.5451 -0.560178 247 -4.10278 -19.5562 -0.5601 248 -4.03644 -19.5455 -0.559174 242 -3.94071 -19.5467 -0.558479 241 -3.87811 -19.5531 -0.558246 237 -3.81243 -19.5436 -0.557398 216 -3.74722 -19.5358 -0.556626 230 -3.53005 -19.5641 -0.556159 255 -3.59076 -19.5489 -0.556006 240 -3.43607 -19.5706 -0.555771 255 -3.65068 -19.5297 -0.5557 255 -3.37218 -19.5676 -0.555231 255 -3.30934 -19.5702 -0.554921 255 -3.24521 -19.5647 -0.554304 255 -3.1501 -19.562 -0.553609 255 -3.02558 -19.5716 -0.553221 255 -2.00725 -19.7 -0.553119 206 -3.08643 -19.558 -0.553068 255 -2.16037 -19.6698 -0.552583 187 -2.93034 -19.5658 -0.552448 242 -2.80706 -19.5819 -0.552368 207 -2.31384 -19.6443 -0.552279 214 -2.86798 -19.569 -0.552216 222 -2.09749 -19.6665 -0.552197 213 -2.22056 -19.649 -0.552046 206 -2.71281 -19.581 -0.551827 206 -2.37409 -19.625 -0.551819 209 -2.65101 -19.5875 -0.551749 204 -2.58946 -19.5957 -0.551747 201 -2.52659 -19.5938 -0.551361 197 -2.43424 -19.6055 -0.551358 195 -5.91663 -19.8309 -0.457759 118 -2.19101 -20.5603 -0.457074 125 -5.83966 -19.7995 -0.456083 105 -5.70973 -19.7 -0.451828 83 -2.23339 -20.3486 -0.450442 132 -5.55494 -19.6258 -0.448153 149 -5.45281 -19.6171 -0.44699 249 -5.38272 -19.6033 -0.445958 250 -2.28045 -20.1905 -0.445549 137 -5.31486 -19.597 -0.445183 251 -5.21529 -19.5947 -0.444278 247 -5.14966 -19.5955 -0.443761 238 -5.08408 -19.5961 -0.443244 224 -5.01756 -19.5926 -0.442598 232 -2.36447 -20.0842 -0.44246 115 -4.91984 -19.5947 -0.441886 245 -4.85731 -19.6062 -0.441756 244 -4.78861 -19.5922 -0.440788 245 -4.6953 -19.6107 -0.440656 241 -4.6291 -19.6059 -0.44001 247 -4.56433 -19.6067 -0.439557 252 -4.49782 -19.5995 -0.438847 252 -2.41236 -19.9497 -0.43834 105 -4.40062 -19.599 -0.438136 253 -4.33431 -19.5913 -0.437425 252 -4.27062 -19.595 -0.437102 251 -4.11455 -19.6182 -0.436775 240 -4.17534 -19.6012 -0.436648 246 -4.04808 -19.6075 -0.436001 237 -3.33555 -19.7311 -0.435659 170 -3.95328 -19.6146 -0.435611 237 -3.88971 -19.6171 -0.435288 219 -2.46138 -19.8309 -0.434735 109 -3.82464 -19.6116 -0.434706 228 -3.76114 -19.6137 -0.434383 225 -3.66868 -19.6312 -0.43438 218 -3.60447 -19.6289 -0.433927 212 -3.54174 -19.6342 -0.433733 201 -3.44849 -19.6467 -0.433601 174 -3.38203 -19.6299 -0.432698 165 -3.22519 -19.64 -0.432178 66 -2.54266 -19.7239 -0.431646 150 -2.60228 -19.698 -0.431068 212 -2.66362 -19.6857 -0.43094 225 -2.72436 -19.6693 -0.430684 236 -3.07793 -19.5078 -0.427216 226 -3.00634 -19.4502 -0.425025 40 -3.83925 -21.1406 -0.372883 47 -3.89613 -21.0773 -0.371478 47 -3.99391 -21.0509 -0.371264 47 -5.87318 -19.8271 -0.351086 82 -5.77362 -19.7188 -0.347512 207 -5.66231 -19.6825 -0.345722 231 -5.58892 -19.6598 -0.344584 231 -5.5179 -19.6445 -0.343662 232 -5.41672 -19.6395 -0.342793 232 -5.3476 -19.6294 -0.342033 235 -5.28017 -19.6249 -0.341436 230 -5.18148 -19.6264 -0.340783 231 -5.11675 -19.6309 -0.340457 231 -5.04805 -19.6198 -0.339697 231 -4.98193 -19.6181 -0.339208 227 -4.88749 -19.6336 -0.338989 219 -4.82195 -19.6334 -0.338554 219 -4.45103 -19.7208 -0.338543 178 -2.66905 -20.0338 -0.338331 72 -4.75646 -19.6329 -0.338119 223 -4.65878 -19.6337 -0.337521 209 -4.5925 -19.6288 -0.336978 183 -4.52674 -19.6256 -0.336489 173 -4.30853 -19.6644 -0.336212 44 -4.36854 -19.643 -0.335997 44 -2.71943 -19.9342 -0.335844 44 -4.23994 -19.6466 -0.335344 44 -4.14565 -19.6585 -0.335125 44 -3.86036 -19.6798 -0.334143 44 -4.07447 -19.6264 -0.333878 50 -4.01239 -19.6372 -0.333823 68 -3.91193 -19.6167 -0.332738 75 -2.79162 -19.7688 -0.331679 44 -2.9034 -19.6678 -0.32941 152 -2.83497 -19.6313 -0.328164 92 -3.16502 -19.5261 -0.326711 237 -3.09987 -19.5123 -0.32606 249 -3.03825 -19.52 -0.326005 231 -5.99604 -20.8707 -0.234016 224 -3.96465 -21.1241 -0.229435 75 -3.89467 -21.1168 -0.229026 75 -4.96775 -20.5326 -0.221974 74 -2.883 -20.4549 -0.21239 106 -4.9661 -19.973 -0.210902 72 -5.39155 -19.8127 -0.209938 188 -5.3174 -19.7851 -0.209 237 -5.03473 -19.8486 -0.208787 72 -5.21751 -19.7848 -0.208467 255 -5.1443 -19.7585 -0.20757 255 -2.91076 -20.1904 -0.207139 97 -5.07626 -19.7513 -0.207079 255 -4.68427 -19.7637 -0.205398 71 -2.94412 -19.9754 -0.202906 84 -4.03256 -19.7599 -0.202448 71 -3.93785 -19.7709 -0.202282 71 -3.86846 -19.7459 -0.201506 71 -3.02211 -19.8546 -0.20071 70 -3.06864 -19.7422 -0.198594 218 -4.92524 -20.9755 -0.130453 65 -3.90047 -21.0171 -0.127755 65 -3.99759 -20.9887 -0.127601 65 -5.17382 -19.791 -0.113354 115 -4.88871 -19.8428 -0.113031 62 -5.10207 -19.7704 -0.112755 166 -3.08754 -20.153 -0.112226 99 -5.03101 -19.7514 -0.112188 203 -4.92862 -19.7381 -0.111588 243 -4.73113 -19.737 -0.110829 68 -3.12093 -19.9535 -0.109213 72 -4.05094 -19.753 -0.108737 61 -3.98647 -19.7539 -0.108547 61 -3.88751 -19.743 -0.108073 61 -3.1658 -19.8331 -0.107456 61 -3.25203 -19.7745 -0.106768 109 -3.31148 -19.7484 -0.106518 103 -3.41288 -20.25 0.0209882 143 -4.85505 -19.906 0.021363 134 -4.77528 -19.8492 0.0220368 182 -4.67348 -19.8364 0.0223668 220 -3.44791 -20.0716 0.0225298 147 -4.60663 -19.8315 0.0225503 231 -4.54342 -19.842 0.0225884 216 -4.44031 -19.8203 0.022991 227 -4.37673 -19.8283 0.0230473 197 -4.31104 -19.8263 0.0231943 180 -4.21467 -19.8327 0.0233244 154 -4.14786 -19.8243 0.0235259 145 -4.02125 -19.8401 0.0236203 150 -3.52105 -19.933 0.0236527 180 -4.08275 -19.8235 0.0236548 147 -3.92578 -19.8491 0.023714 177 -3.79651 -19.8497 0.0239353 227 -3.7022 -19.8635 0.0239745 235 -3.85771 -19.8318 0.0239881 207 -3.6362 -19.8553 0.0241578 222 -3.57064 -19.8489 0.0243229 227 +unknow 0.982463 1 0 381 -5.96409 26.0632 -1.75484 208 -6.08414 26.0232 -1.75396 198 -5.2183 26.1882 -1.75235 234 -6.15715 25.9671 -1.75118 250 -6.23685 25.9398 -1.75059 204 -6.35144 25.8791 -1.74824 194 -6.4212 25.8126 -1.74472 239 -6.49837 25.7768 -1.74355 200 -6.61483 25.7266 -1.74208 193 -6.68108 25.6497 -1.73782 242 -6.75605 25.6074 -1.73621 198 -5.25601 25.9507 -1.73577 194 -6.82621 25.5475 -1.73328 192 -6.93555 25.4746 -1.7302 241 -7.0145 25.4488 -1.7299 198 -7.08373 25.3882 -1.72697 190 -7.18809 25.3008 -1.72286 235 -7.26094 25.2551 -1.7211 197 -7.32693 25.1862 -1.71758 190 -7.43706 25.1227 -1.71538 239 -7.5074 25.0705 -1.71317 195 -7.57402 25.0067 -1.71009 233 -7.64264 24.9504 -1.7076 194 -7.75363 24.8931 -1.70598 203 -7.78879 24.7316 -1.69542 221 -8.24154 24.5445 -1.69263 193 -8.29432 24.4467 -1.68706 230 -8.36721 24.4092 -1.68618 193 -8.09395 24.4864 -1.68515 218 -8.46973 24.3337 -1.68339 231 -8.5435 24.2994 -1.6828 195 -8.59916 24.2142 -1.67825 187 -8.65974 24.1438 -1.67488 232 -7.93602 24.2633 -1.66593 179 -7.84812 24.252 -1.66314 204 -7.73073 24.2793 -1.66241 203 -7.95295 25.9352 -1.63092 202 -5.49769 24.3692 -1.62573 185 -5.41808 24.3727 -1.6247 255 -5.22568 24.4106 -1.62441 171 -5.30149 24.3902 -1.62411 189 -7.83832 25.8512 -1.62319 121 -7.74615 25.8394 -1.62062 115 -5.0605 24.3863 -1.62015 185 -5.13586 24.3645 -1.61971 227 -5.49238 26.0252 -1.595 86 -5.18391 25.9744 -1.58741 156 -5.09263 25.9416 -1.58402 121 -8.16253 24.2898 -1.52887 89 -8.03981 24.3034 -1.5271 151 -7.86968 24.3003 -1.52331 132 -7.75143 24.3257 -1.5225 81 -7.66294 24.3119 -1.51979 109 -7.58473 24.3301 -1.51938 103 -5.47474 24.6059 -1.50054 95 -5.72943 24.4782 -1.49593 98 -5.52199 24.4563 -1.49133 218 -5.5903 24.4018 -1.48875 103 -5.31056 24.4112 -1.48523 177 -5.23175 24.418 -1.48455 118 -4.95538 24.4369 -1.48197 118 -5.06966 24.4093 -1.4817 124 -5.18177 25.7157 -1.42257 96 -8.2854 24.2494 -1.38477 87 -8.01765 24.3371 -1.38465 160 -8.20664 24.2677 -1.38428 173 -8.07647 24.2587 -1.38117 130 -7.90663 24.2558 -1.37769 255 -7.79162 24.2909 -1.37757 229 -7.52054 24.3637 -1.37682 96 -7.70323 24.2772 -1.37508 216 -7.62097 24.2823 -1.37384 102 -7.41086 24.2783 -1.36973 100 -7.32764 24.2786 -1.36824 131 -7.20863 24.2975 -1.36725 104 -7.12443 24.2932 -1.36551 128 -4.52947 24.8876 -1.36426 59 -7.04087 24.2905 -1.36389 122 -6.96015 24.2972 -1.3629 121 -6.83911 24.3066 -1.36141 120 -6.75259 24.2915 -1.35904 109 -6.67203 24.2972 -1.35805 76 -6.55177 24.3071 -1.35668 78 -6.4723 24.316 -1.35594 83 -5.66458 24.5065 -1.35531 169 -6.38982 24.313 -1.35444 121 -6.19327 24.3412 -1.35308 107 -6.26872 24.3178 -1.35283 142 -6.10661 24.3199 -1.35047 147 -6.02587 24.3215 -1.34935 102 -5.9112 24.3496 -1.34935 110 -5.82494 24.3273 -1.34674 131 -5.74849 24.3455 -1.34674 100 -4.59492 24.5873 -1.34661 67 -5.47088 24.3643 -1.344 198 -5.54563 24.3392 -1.3435 121 -5.08143 24.4179 -1.34214 255 -5.27053 24.3656 -1.34139 191 -5.19355 24.3801 -1.34127 155 -4.99434 24.3829 -1.3389 101 -4.64766 24.4433 -1.33841 102 -4.8368 24.3923 -1.33754 135 -4.72028 24.407 -1.33704 102 -8.59374 24.5935 -1.25624 227 -8.05557 24.6595 -1.25006 164 -8.25627 24.4898 -1.24455 113 -8.42937 24.3695 -1.24129 168 -8.33525 24.3449 -1.23825 158 -8.03567 24.3403 -1.23263 157 -8.11211 24.3149 -1.23263 131 -7.57073 24.4722 -1.23173 125 -7.83016 24.3589 -1.23004 192 -7.7451 24.3568 -1.22847 120 -7.6511 24.3258 -1.22521 125 -7.45864 24.3813 -1.22498 225 -7.37274 24.374 -1.22318 255 -7.25607 24.4028 -1.22285 255 -7.1709 24.3967 -1.22116 255 -7.08808 24.398 -1.21992 255 -7.00475 24.3972 -1.21857 255 -6.88482 24.4126 -1.21756 255 -6.80163 24.411 -1.21621 255 -6.71693 24.4034 -1.21453 255 -6.5961 24.4136 -1.21329 255 -5.63031 24.644 -1.21273 141 -6.51627 24.4226 -1.21262 255 -6.43338 24.4198 -1.21127 254 -6.31323 24.4305 -1.21014 241 -6.23247 24.4348 -1.20924 235 -4.53013 24.8068 -1.20924 222 -6.15372 24.4465 -1.20879 245 -6.03365 24.4558 -1.20767 243 -5.95347 24.4611 -1.20688 246 -5.87051 24.4544 -1.20542 245 -5.78627 24.4417 -1.20362 239 -5.0418 24.5428 -1.20013 120 -4.61441 24.6125 -1.19935 119 -5.38309 24.4457 -1.19878 156 -5.49778 24.4181 -1.19867 131 -5.30286 24.4469 -1.19788 172 -5.22434 24.4556 -1.19743 139 -4.68419 24.5587 -1.1971 255 -4.75675 24.5203 -1.19575 255 -5.10085 24.4409 -1.19519 128 -4.86832 24.4781 -1.19462 255 -4.93923 24.4333 -1.19294 204 -8.59846 24.5303 -1.10673 118 -8.48805 24.4609 -1.10156 165 -8.08568 24.4097 -1.09256 121 -8.35229 24.3155 -1.09236 255 -7.71823 24.4529 -1.08892 120 -8.214 24.2846 -1.08861 165 -7.95375 24.266 -1.08355 124 -7.83443 24.2879 -1.08274 123 -7.75082 24.2896 -1.08153 138 -4.51593 25.0282 -1.07829 141 -7.53561 24.2715 -1.07738 145 -7.37833 24.3031 -1.07657 255 -7.45231 24.2721 -1.07616 232 -7.2569 24.3146 -1.07535 255 -7.17878 24.3315 -1.07505 254 -7.09618 24.3328 -1.07394 255 -6.9743 24.3411 -1.07262 255 -6.89292 24.3455 -1.07171 255 -6.80891 24.3401 -1.07029 255 -6.72711 24.3421 -1.06928 255 -5.29886 24.6781 -1.06857 146 -6.60658 24.3524 -1.06817 255 -5.37468 24.6535 -1.06817 139 -5.44995 24.6268 -1.06766 126 -6.52696 24.3614 -1.06756 255 -6.44378 24.3567 -1.06625 255 -5.17149 24.65 -1.06584 157 -6.32544 24.3732 -1.06554 255 -6.24142 24.364 -1.06402 255 -6.1624 24.3738 -1.06351 255 -6.04222 24.3812 -1.0624 255 -4.53676 24.6975 -1.06199 159 -5.96134 24.3826 -1.06149 255 -5.88052 24.3837 -1.06058 255 -5.80067 24.3885 -1.05987 255 -5.67847 24.3844 -1.05825 255 -5.59736 24.3827 -1.05724 219 -4.62843 24.5443 -1.05521 244 -4.69917 24.4963 -1.05349 255 -4.77381 24.4697 -1.05288 255 -4.84563 24.4291 -1.05157 255 -4.95871 24.3962 -1.05106 251 -5.03172 24.3629 -1.05015 134 -8.5606 24.5642 -0.959243 172 -4.56875 25.5885 -0.958343 179 -8.43829 24.4607 -0.953048 255 -8.26879 24.3413 -0.945505 255 -8.17503 24.3161 -0.94308 255 -8.08595 24.3037 -0.941284 229 -7.71613 24.3357 -0.937514 255 -7.77908 24.2694 -0.935538 123 -7.58583 24.3222 -0.935179 255 -7.50584 24.3344 -0.93464 255 -7.42293 24.3369 -0.933652 255 -7.30126 24.3486 -0.932575 255 -7.2213 24.36 -0.932036 255 -7.13684 24.3557 -0.930779 255 -7.01811 24.3756 -0.93015 255 -6.93545 24.3764 -0.929162 255 -4.53018 24.9235 -0.928621 164 -6.85233 24.375 -0.928085 255 -6.76714 24.3656 -0.926648 255 -6.64856 24.3837 -0.92602 255 -6.56616 24.3833 -0.925032 255 -6.48335 24.3806 -0.923954 255 -6.36181 24.3858 -0.922787 255 -6.28417 24.4018 -0.922607 255 -6.20056 24.3943 -0.92135 255 -6.08213 24.4097 -0.920721 255 -6.00303 24.419 -0.920272 255 -5.92249 24.4222 -0.919554 255 -4.56825 24.693 -0.918743 207 -5.80225 24.4284 -0.918566 255 -5.7209 24.4271 -0.917668 255 -5.64098 24.4313 -0.917039 255 -5.55393 24.4041 -0.914974 255 -5.43495 24.4125 -0.914166 255 -4.66471 24.5672 -0.913985 255 -5.35264 24.4041 -0.912998 255 -5.27511 24.4169 -0.912818 255 -4.73691 24.527 -0.912817 255 -4.81355 24.51 -0.912728 255 -4.88817 24.483 -0.912189 255 -5.00309 24.4577 -0.9121 255 -5.15625 24.4239 -0.91201 255 -5.07949 24.4399 -0.91201 255 -8.26232 24.3606 -0.782599 99 -8.13922 24.3746 -0.781597 99 -8.04885 24.3583 -0.779902 255 -7.94567 24.3017 -0.776588 231 -7.82251 24.3122 -0.775509 231 -7.73824 24.3119 -0.774507 238 -7.65286 24.3075 -0.773351 242 -4.50622 25.0801 -0.773273 141 -7.56934 24.3085 -0.772427 242 -7.4483 24.3229 -0.771579 246 -7.36261 24.3156 -0.770346 242 -7.28105 24.3214 -0.769652 240 -7.15848 24.3285 -0.768573 245 -7.07534 24.3279 -0.767649 249 -6.99337 24.3308 -0.766878 249 -6.87594 24.3538 -0.766493 249 -6.7935 24.3541 -0.765645 253 -6.71168 24.3561 -0.764874 249 -6.62729 24.3481 -0.763718 252 -6.50939 24.3675 -0.763256 243 -4.5753 24.7913 -0.762792 176 -6.42824 24.3704 -0.762562 250 -6.34463 24.3634 -0.761483 253 -6.22629 24.3795 -0.760943 246 -6.14529 24.3815 -0.76025 246 -6.06338 24.3793 -0.759402 241 -5.94418 24.3901 -0.758708 242 -5.86567 24.4009 -0.7584 245 -5.78347 24.3959 -0.757475 250 -5.66396 24.4034 -0.756704 253 -4.62272 24.6137 -0.756395 182 -5.50745 24.4249 -0.756165 206 -5.58416 24.4074 -0.756165 221 -5.42465 24.4147 -0.755086 255 -4.69181 24.5559 -0.7547 171 -5.30616 24.4244 -0.754469 247 -5.22732 24.4312 -0.754084 235 -5.14767 24.4338 -0.753544 249 -5.03047 24.448 -0.753159 244 -4.76059 24.4979 -0.753004 214 -4.95245 24.4578 -0.752927 252 -4.87365 24.4634 -0.752542 254 -8.10581 24.7377 -0.63105 101 -7.95162 24.6596 -0.627116 147 -7.83023 24.5474 -0.622472 128 -7.72592 24.4861 -0.619569 133 -4.54319 25.1957 -0.617181 111 -7.62267 24.4263 -0.616731 166 -7.49218 24.4123 -0.615054 85 -7.31906 24.3938 -0.612861 84 -7.19891 24.4108 -0.61228 93 -7.11937 24.4237 -0.611958 151 -6.91477 24.4346 -0.610474 180 -7.02929 24.3998 -0.61041 163 -6.82933 24.4254 -0.609443 168 -6.75096 24.441 -0.609249 191 -6.62626 24.4378 -0.608088 205 -6.54686 24.4488 -0.607765 217 -4.56825 24.8884 -0.60757 123 -6.46078 24.4345 -0.606605 227 -6.38044 24.4412 -0.606153 229 -6.25822 24.4438 -0.60525 226 -6.18091 24.4614 -0.605185 228 -6.0982 24.4575 -0.604411 234 -5.97621 24.4588 -0.603508 239 -5.81731 24.4744 -0.602799 244 -5.89416 24.456 -0.602799 239 -5.69736 24.4821 -0.602153 245 -4.65311 24.6958 -0.601959 200 -5.61728 24.4863 -0.601702 247 -5.5359 24.4843 -0.601057 249 -5.45676 24.4918 -0.600734 244 -5.33659 24.4958 -0.600024 247 -5.2596 24.5124 -0.600024 244 -5.17842 24.5093 -0.599379 246 -4.71515 24.6006 -0.599314 89 -5.05921 24.5158 -0.598799 241 -4.98097 24.5257 -0.598605 91 -4.78435 24.5444 -0.59796 108 -4.89956 24.5196 -0.597895 186 -7.47508 25.8076 -0.520015 89 -7.24951 25.7846 -0.517738 118 -7.26614 25.5347 -0.51134 58 -4.67091 25.2362 -0.487375 122 -7.14424 24.3734 -0.480166 107 -7.21624 24.3355 -0.479732 89 -6.5177 24.5008 -0.478919 55 -6.05331 24.6135 -0.478756 55 -6.16536 24.5691 -0.478323 55 -6.43411 24.496 -0.478215 55 -5.97079 24.611 -0.47816 55 -6.31315 24.5047 -0.477618 55 -4.72297 24.8602 -0.477617 96 -6.23122 24.5051 -0.477076 55 -5.87398 24.5479 -0.475883 55 -5.75189 24.5481 -0.475124 55 -5.594 24.5681 -0.47469 55 -5.66667 24.531 -0.474148 55 -5.24199 24.6252 -0.474148 103 -5.4695 24.5552 -0.473606 55 -5.39148 24.5683 -0.473497 55 -5.31092 24.5695 -0.473063 55 -5.10603 24.5537 -0.471491 255 -5.02887 24.5696 -0.471491 255 -4.95048 24.5794 -0.471328 255 -4.83423 24.6005 -0.471274 255 -6.97361 25.802 -0.337487 141 -7.00485 25.5987 -0.33365 92 -6.18231 25.0525 -0.318629 90 -4.88093 25.1528 -0.314913 202 -6.85334 24.593 -0.313037 116 -6.92785 24.5617 -0.312833 121 -6.02712 24.759 -0.312057 89 -6.36497 24.6268 -0.311119 89 -6.20963 24.6644 -0.311078 89 -6.27865 24.6118 -0.310384 89 -4.90778 24.8746 -0.309444 125 -5.91837 24.6495 -0.309364 88 -5.44449 24.7196 -0.308587 88 -5.79158 24.6324 -0.308424 88 -5.7128 24.6446 -0.308302 88 -5.63489 24.6605 -0.308261 88 -5.51556 24.6731 -0.307975 88 -5.35488 24.6819 -0.307444 255 -5.15554 24.6978 -0.306913 255 -5.0775 24.7119 -0.306873 255 -5.2706 24.6673 -0.306791 255 -4.93138 25.1933 -0.196617 123 -4.98953 25.0718 -0.194915 146 -6.7728 24.596 -0.194098 139 -6.68712 24.5863 -0.193594 196 -6.60726 24.5975 -0.193437 184 -6.48722 24.6129 -0.193184 166 -6.40584 24.6176 -0.192933 178 -5.08098 24.9167 -0.192805 126 -6.32253 24.6144 -0.192555 196 -6.24028 24.6148 -0.19224 212 -6.11942 24.6245 -0.191924 226 -6.03774 24.6261 -0.191641 227 -5.95895 24.6391 -0.191546 231 -5.83819 24.6474 -0.191231 229 -5.75802 24.654 -0.191042 219 -5.67606 24.6525 -0.190727 211 -5.55807 24.6711 -0.190601 213 -5.13059 24.7615 -0.190569 113 -5.47666 24.6709 -0.190317 214 -5.39827 24.6841 -0.190254 205 -5.20343 24.7218 -0.190191 169 -5.28065 24.7034 -0.190159 194 +unknow 0.971711 1 0 4075 -4.37184 0.794687 -1.52637 87 -4.36939 0.765869 -1.52353 79 -4.38148 0.669018 -1.52211 90 -4.41294 0.413383 -1.52211 87 -4.42752 0.205046 -1.52211 86 -4.42997 0.142435 -1.52211 86 -4.38475 0.634306 -1.5214 91 -4.38865 0.606743 -1.5214 87 -4.66038 0.655052 -1.52094 97 -4.68161 -0.480414 -1.52094 100 -4.34816 0.839787 -1.5207 78 -4.36441 0.750827 -1.5207 122 -4.3932 0.558206 -1.52069 81 -4.42829 0.0449281 -1.52069 89 -4.42852 0.00319264 -1.52069 82 -4.41817 -0.302649 -1.52069 85 -4.42517 0.11442 -1.51998 91 -4.55488 1.1687 -1.5196 104 -4.55852 1.15439 -1.5196 104 -4.63873 0.771323 -1.5196 103 -4.6757 0.500572 -1.5196 103 -4.34711 0.825402 -1.51928 119 -4.36871 0.702177 -1.51928 110 -4.37616 0.654099 -1.51928 129 -4.39694 0.495605 -1.51928 82 -4.4183 0.239365 -1.51928 89 -4.42124 0.176881 -1.51928 86 -4.42467 0.0309687 -1.51927 97 -4.42002 -0.205272 -1.51927 90 -4.41749 -0.253858 -1.51927 89 -4.57596 1.07501 -1.51893 105 -4.61604 0.887285 -1.51893 92 -4.68307 0.404822 -1.51893 108 -4.69868 0.132114 -1.51893 113 -4.32608 0.920394 -1.51857 114 -4.35408 0.777215 -1.51857 132 -4.36464 0.715585 -1.51857 111 -4.37932 0.619437 -1.51857 129 -4.3935 0.509189 -1.51857 118 -4.40164 0.433202 -1.51857 114 -4.41442 0.273931 -1.51857 87 -4.4228 -0.0315825 -1.51857 125 -4.42268 -0.0454772 -1.51857 89 -4.42142 -0.114939 -1.51857 86 -4.41006 -0.336945 -1.51857 94 -4.52045 1.28175 -1.51826 108 -4.61967 0.85791 -1.51826 92 -4.65495 0.639342 -1.51826 108 -4.69607 -0.155747 -1.51825 110 -4.64632 -0.699332 -1.51825 131 -4.33135 0.886003 -1.51786 114 -4.33411 0.872391 -1.51786 107 -4.34601 0.811034 -1.51786 114 -4.39002 0.522757 -1.51786 81 -4.39551 0.474455 -1.51786 125 -4.40604 0.363847 -1.51786 105 -4.42031 -0.080187 -1.51786 89 -4.40299 -0.399097 -1.51786 114 -4.39834 -0.447485 -1.51786 107 -4.39691 -0.4613 -1.51786 111 -4.5689 1.08849 -1.51759 97 -4.59173 0.987761 -1.51759 104 -4.69677 -0.00816995 -1.51758 116 -4.69117 -0.229409 -1.51758 113 -4.68963 -0.25888 -1.51758 122 -4.65871 -0.596765 -1.51758 126 -4.66056 -0.582127 -1.51758 103 -4.64663 -0.684468 -1.51758 91 -4.3253 0.906009 -1.51715 110 -4.335 0.858396 -1.51715 113 -4.35868 0.728655 -1.51715 114 -4.39654 0.446629 -1.51715 111 -4.40119 0.398259 -1.51715 122 -4.4053 0.349844 -1.51715 86 -4.41817 -0.0940458 -1.51715 121 -4.4134 -0.225844 -1.51715 97 -4.22083 0.840425 -1.51708 81 -4.49189 1.36561 -1.51692 112 -4.49616 1.35149 -1.51692 112 -4.52479 1.2523 -1.51692 99 -4.56014 1.11672 -1.51692 98 -4.5975 0.951276 -1.51692 97 -4.60339 0.92237 -1.51692 91 -4.63605 0.740931 -1.51691 100 -4.66976 0.485061 -1.51691 102 -4.68161 0.35285 -1.51691 100 -4.68743 0.264546 -1.51691 103 -4.69443 0.0655678 -1.51691 106 -4.6948 0.0286962 -1.51691 117 -4.68692 -0.273511 -1.51691 109 -4.65494 -0.611163 -1.51691 119 -4.65 -0.647703 -1.51691 95 -4.37757 0.591125 -1.51644 125 -4.41006 0.252771 -1.51644 122 -4.41659 0.0794382 -1.51644 94 -4.4168 -0.0662666 -1.51644 128 -4.415 -0.142569 -1.51644 94 -4.4108 -0.239618 -1.51644 128 -4.47923 1.40028 -1.51625 113 -4.53267 1.21622 -1.51625 101 -4.5618 1.10193 -1.51625 128 -4.57364 1.05171 -1.51625 106 -4.57692 1.03734 -1.51624 109 -4.58493 1.00136 -1.51624 99 -4.63184 0.75518 -1.51624 128 -4.65423 0.602007 -1.51624 99 -4.66394 0.521502 -1.51624 100 -4.69023 0.161334 -1.51624 115 -4.69071 0.146599 -1.51624 104 -4.69232 0.0802719 -1.51624 106 -4.69298 0.0139308 -1.51624 110 -4.68964 -0.177692 -1.51624 109 -4.68666 -0.24397 -1.51624 106 -4.67905 -0.361669 -1.51624 100 -4.66695 -0.493803 -1.51624 103 -4.65951 -0.559728 -1.51624 99 -4.31587 0.932357 -1.51573 113 -4.37845 0.570237 -1.51573 114 -4.38195 0.542716 -1.51573 117 -4.3914 0.460026 -1.51573 114 -4.39869 0.384084 -1.51573 114 -4.40418 0.314945 -1.51573 114 -4.40607 0.287267 -1.51573 113 -4.41268 0.155659 -1.51573 121 -4.41187 -0.177177 -1.51573 89 -4.75352 -0.686045 -1.51563 120 -4.46416 0.779878 -1.51561 149 -4.49887 1.3292 -1.51558 112 -4.50713 1.30091 -1.51558 114 -4.57832 1.02253 -1.51557 139 -4.59678 0.936056 -1.51557 139 -4.61885 0.820243 -1.51557 97 -4.63801 0.703912 -1.51557 100 -4.64339 0.667464 -1.51557 120 -4.65423 0.587136 -1.51557 103 -4.66752 0.46999 -1.51557 105 -4.67555 0.381931 -1.51557 109 -4.67672 0.36724 -1.51557 145 -4.67946 0.330499 -1.51557 110 -4.68048 0.315795 -1.51557 109 -4.68629 0.212799 -1.51557 108 -4.68901 -0.140809 -1.51557 114 -4.68655 -0.207081 -1.51557 113 -4.67159 -0.427618 -1.51557 105 -4.36089 0.679789 -1.51502 93 -4.40329 0.300969 -1.51502 111 -4.40946 0.19022 -1.51502 121 -4.41352 -0.0177052 -1.51502 97 -4.40227 -0.315546 -1.51502 121 -4.39426 -0.412273 -1.51502 106 -4.72578 0.845844 -1.51498 116 -4.78148 -0.431136 -1.51497 95 -4.76738 -0.566139 -1.51497 120 -4.48218 1.37802 -1.5149 114 -4.50121 1.31452 -1.5149 115 -4.52325 1.23656 -1.5149 133 -4.53658 1.18675 -1.5149 100 -4.63833 0.689049 -1.5149 124 -4.6826 0.249487 -1.5149 104 -4.68529 -0.19229 -1.5149 109 -4.64641 -0.632361 -1.51489 118 -4.69346 1.00086 -1.51432 117 -4.73782 0.763777 -1.51432 121 -4.74814 0.696724 -1.51432 124 -4.39892 0.335389 -1.51431 107 -4.40596 0.224739 -1.51431 129 -4.40984 0.1278 -1.51431 129 -4.4112 0.0654473 -1.51431 132 -4.41166 0.0169405 -1.51431 122 -4.79121 -0.273087 -1.51431 112 -4.40756 -0.190895 -1.51431 118 -4.39779 -0.349974 -1.51431 122 -4.39041 -0.432802 -1.51431 113 -4.51359 1.26444 -1.51423 145 -4.53101 1.2005 -1.51423 135 -4.59888 0.906406 -1.51423 128 -4.60586 0.870258 -1.51423 129 -4.61255 0.834057 -1.51423 123 -4.6177 0.80506 -1.51423 126 -4.62144 0.783291 -1.51423 95 -4.65496 0.550101 -1.51423 100 -4.66731 0.432948 -1.51423 97 -4.66865 0.418284 -1.51423 102 -4.68639 0.0948684 -1.51423 106 -4.66434 -0.463942 -1.51422 120 -4.65731 -0.529834 -1.51422 99 -4.65563 -0.544463 -1.51422 124 -4.61131 1.32209 -1.51366 106 -4.78186 0.382044 -1.51366 131 -4.75713 -0.618016 -1.51365 122 -4.40884 0.0931121 -1.5136 124 -4.66406 0.447418 -1.51356 135 -4.68189 0.183098 -1.51355 98 -4.68527 0.043305 -1.51355 113 -4.68532 -0.0376514 -1.51355 105 -4.67617 -0.295054 -1.51355 117 -4.63861 -0.661032 -1.51355 122 -4.48596 -0.601753 -1.51352 152 -4.4811 -0.636967 -1.51352 155 -4.47164 -0.70025 -1.51352 140 -4.73763 0.740879 -1.513 120 -4.74763 0.673831 -1.513 122 -4.79355 0.126196 -1.513 101 -4.74817 -0.670012 -1.513 118 -4.40518 -0.156163 -1.5129 118 -4.40608 -0.128481 -1.5129 129 -4.39856 -0.287546 -1.51289 111 -4.39294 -0.363501 -1.51289 114 -4.39117 -0.384198 -1.51289 111 -4.58192 0.970526 -1.51289 139 -4.64299 0.615336 -1.51289 128 -4.64858 0.571551 -1.51289 131 -4.6753 0.278536 -1.51288 114 -4.67771 0.234462 -1.51288 107 -4.68353 -0.022934 -1.51288 107 -4.68274 -0.0891406 -1.51288 105 -4.68189 -0.125916 -1.51288 113 -4.67334 -0.309628 -1.51288 114 -4.6654 -0.412318 -1.51288 99 -4.50477 0.419479 -1.51284 161 -4.52282 0.114483 -1.51283 168 -4.49545 -0.509807 -1.51283 146 -4.48597 -0.587404 -1.51283 170 -4.49045 -0.552152 -1.51283 138 -4.4741 -0.671851 -1.51283 143 -4.47197 -0.685905 -1.51283 144 -4.7143 0.866779 -1.51235 120 -4.76854 0.486739 -1.51234 126 -4.78998 0.178835 -1.51234 96 -4.79258 -0.084644 -1.51234 103 -4.75717 -0.587631 -1.51234 120 -4.74838 -0.654823 -1.51234 120 -4.54205 1.13493 -1.51222 133 -4.62647 0.716984 -1.51221 136 -4.67205 0.300434 -1.51221 112 -4.68042 0.109426 -1.51221 109 -4.68111 -0.0744104 -1.51221 106 -4.67047 -0.324189 -1.51221 120 -4.66889 -0.346194 -1.51221 145 -4.39758 -0.273622 -1.51219 125 -4.43112 0.903947 -1.51215 159 -4.45733 0.764317 -1.51214 171 -4.48011 0.616894 -1.51214 155 -4.5042 0.405169 -1.51214 182 -4.51941 0.164149 -1.51214 156 -4.49892 -0.460146 -1.51214 153 -4.58673 1.38554 -1.51169 103 -4.61203 1.29884 -1.51169 135 -4.6469 1.16793 -1.51169 100 -4.65947 1.11677 -1.51169 128 -4.69376 0.96249 -1.51169 119 -4.69676 0.947739 -1.51169 122 -4.70969 0.881248 -1.51169 123 -4.72793 0.777472 -1.51169 124 -4.75293 0.60619 -1.51169 127 -4.78935 0.141164 -1.51168 127 -4.75343 -0.602326 -1.51168 118 -4.66292 -0.39736 -1.51154 144 -4.45059 0.791989 -1.51145 146 -4.45903 0.743005 -1.51145 153 -4.46584 0.700948 -1.51145 157 -4.47629 0.630716 -1.51145 166 -4.48296 0.581458 -1.51145 162 -4.51546 0.213753 -1.51145 169 -4.47751 -0.622079 -1.51145 153 -4.64872 1.15289 -1.51103 131 -4.67622 1.0357 -1.51103 124 -4.78449 -0.219906 -1.51103 107 -4.76364 -0.49745 -1.51102 124 -4.74668 -0.639378 -1.51102 117 -4.67755 -0.0596766 -1.51087 112 -4.66286 -0.37524 -1.51087 106 -4.64959 -0.514217 -1.51087 129 -4.43576 0.861452 -1.51076 135 -4.43977 0.840538 -1.51076 155 -4.49203 0.489608 -1.51076 168 -4.50171 0.390712 -1.51076 181 -4.50464 0.355344 -1.51076 167 -4.47165 -0.64992 -1.51075 152 -4.59384 1.34843 -1.51038 102 -4.62238 1.24709 -1.51038 135 -4.6711 1.04998 -1.51038 120 -4.6792 1.01326 -1.51038 128 -4.68548 0.983841 -1.51037 120 -4.70319 0.895353 -1.51037 121 -4.71537 0.828777 -1.51037 118 -4.71796 0.813958 -1.51037 119 -4.77475 0.351351 -1.51037 138 -4.77635 0.328845 -1.51037 127 -4.78052 0.261292 -1.51037 106 -4.78152 -0.242343 -1.51037 138 -4.64544 0.53412 -1.5102 133 -4.6749 -0.103727 -1.5102 108 -4.4213 0.923699 -1.51007 156 -4.42842 0.888946 -1.51007 162 -4.44054 0.826254 -1.51007 156 -4.44311 0.8123 -1.51007 148 -4.46538 0.679353 -1.51007 158 -4.50105 0.376423 -1.51006 173 -4.51101 0.227771 -1.51006 182 -4.5145 0.142705 -1.51006 167 -4.51663 -0.0346433 -1.51006 167 -4.51569 -0.0984903 -1.51006 175 -4.57692 1.39831 -1.50972 134 -4.65743 1.10085 -1.50972 121 -4.66257 1.07889 -1.50972 126 -4.7424 0.64277 -1.50972 122 -4.75706 0.523389 -1.50971 120 -4.76469 0.448605 -1.50971 123 -4.78122 0.20864 -1.50971 99 -4.7855 0.050838 -1.50971 104 -4.78566 -0.0318524 -1.50971 102 -4.78201 -0.18967 -1.50971 92 -4.77885 -0.257252 -1.50971 108 -4.42934 0.874676 -1.50937 141 -4.47459 0.60186 -1.50937 148 -4.48674 0.503321 -1.50937 168 -4.49341 0.439843 -1.50937 160 -4.50453 0.305561 -1.50937 155 -4.51305 0.128479 -1.50937 171 -4.51442 0.064666 -1.50937 173 -4.48451 -0.522787 -1.50937 154 -4.62647 1.21708 -1.50906 118 -4.63027 1.20254 -1.50906 116 -4.6923 0.931548 -1.50906 116 -4.69664 0.909427 -1.50906 125 -4.71801 0.791112 -1.50906 112 -4.72872 0.724337 -1.50906 120 -4.74731 0.590363 -1.50906 121 -4.75759 0.500779 -1.50906 120 -4.76985 0.366079 -1.50906 108 -4.77996 0.193553 -1.50906 131 -4.78374 0.0357995 -1.50905 112 -4.78338 -0.0693999 -1.50905 124 -4.75955 -0.48188 -1.50905 120 -4.65146 -0.44062 -1.50885 130 -4.45393 0.727826 -1.50868 165 -4.46584 0.650762 -1.50868 149 -4.47731 0.566473 -1.50868 163 -4.47907 0.552405 -1.50868 173 -4.49013 0.45378 -1.50868 169 -4.51009 -0.16216 -1.50868 173 -4.50868 -0.197577 -1.50868 190 -4.50544 -0.261295 -1.50868 173 -4.49306 -0.423863 -1.50868 167 -4.48099 -0.536639 -1.50868 163 -4.61098 1.26738 -1.5084 105 -4.74163 0.619944 -1.5084 118 -4.74816 0.567772 -1.5084 129 -4.75164 0.537928 -1.5084 125 -4.74992 0.552852 -1.5084 120 -4.7717 0.313497 -1.5084 128 -4.77566 0.246011 -1.5084 132 -4.78143 0.0733519 -1.5084 125 -4.77762 -0.204509 -1.5084 142 -4.76992 -0.339494 -1.5084 107 -4.76131 -0.444299 -1.5084 133 -4.75916 -0.466731 -1.5084 128 -4.66624 0.197086 -1.50818 133 -4.45434 0.713545 -1.50799 155 -4.46192 0.664523 -1.50799 160 -4.48141 0.517005 -1.50799 156 -4.48682 0.467699 -1.50799 173 -4.4993 0.326534 -1.50799 179 -4.50704 0.192128 -1.50799 167 -4.50915 -0.133753 -1.50799 171 -4.4925 -0.409565 -1.50798 166 -4.48475 -0.487123 -1.50798 160 -4.47478 -0.571567 -1.50798 151 -4.59079 1.33192 -1.50775 133 -4.60515 1.28136 -1.50775 127 -4.72724 0.708937 -1.50774 120 -4.77078 0.298398 -1.50774 101 -4.77769 -0.151896 -1.50774 126 -4.76908 -0.324368 -1.50774 135 -4.76639 -0.361813 -1.50774 134 -4.76212 -0.4142 -1.50774 115 -4.502 0.255727 -1.50729 167 -4.50278 0.241582 -1.50729 173 -4.50574 0.177903 -1.50729 171 -4.50857 0.0787824 -1.50729 176 -4.50916 0.0292043 -1.50729 170 -4.50897 0.0504536 -1.50729 169 -4.50923 0.0150391 -1.50729 167 -4.50899 -0.0487073 -1.50729 173 -4.49855 -0.310537 -1.50729 168 -4.49486 -0.359982 -1.50729 167 -4.48797 -0.437591 -1.50729 149 -4.61714 1.23017 -1.50709 126 -4.755 0.470349 -1.50708 129 -4.75855 0.432989 -1.50708 121 -4.77817 0.020778 -1.50708 136 -4.76819 -0.309252 -1.50708 109 -4.76214 -0.391589 -1.50708 128 -4.47519 0.537692 -1.5066 168 -4.4945 0.340406 -1.5066 162 -4.49798 0.290967 -1.5066 149 -4.49887 0.276835 -1.5066 165 -4.50642 0.0929184 -1.5066 172 -4.50659 -0.0840741 -1.5066 172 -4.50062 -0.246799 -1.5066 182 -4.49898 -0.275073 -1.5066 183 -4.57656 1.36688 -1.50643 133 -4.62855 1.17888 -1.50643 130 -4.65671 1.06219 -1.50643 120 -4.77551 0.0882979 -1.50643 127 -4.74892 -0.510926 -1.50642 120 -4.50546 -0.0203378 -1.50591 175 -4.50178 -0.183064 -1.50591 176 -4.49986 -0.225482 -1.50591 176 -4.49223 -0.34555 -1.50591 170 -4.48878 -0.387872 -1.50591 164 -4.48067 -0.47241 -1.50591 145 -4.63939 1.12748 -1.50577 125 -4.75612 0.417729 -1.50577 126 -4.75804 0.395312 -1.50577 129 -4.76647 0.275616 -1.50577 132 -4.76921 0.22319 -1.50577 123 -4.77421 -0.0467145 -1.50577 135 -4.7734 -0.0992059 -1.50577 134 -4.77152 -0.166675 -1.50577 115 -4.74458 -0.533079 -1.50577 124 -4.74288 -0.547981 -1.50577 128 -4.50363 0.000904045 -1.50522 173 -4.50223 -0.112273 -1.50522 161 -4.50121 -0.14763 -1.50522 158 -4.49389 -0.296002 -1.50521 173 -4.77254 0.00579175 -1.50511 126 -4.76349 -0.293891 -1.50511 140 -4.78409 1.2581 -1.50464 100 -4.78802 1.24307 -1.50464 95 -4.89212 0.73321 -1.50464 92 -4.91996 -0.514172 -1.50464 87 -4.50121 -0.0697959 -1.50452 173 -4.4968 -0.211148 -1.50452 178 -4.49007 -0.324086 -1.50452 185 -4.48624 -0.373436 -1.50452 170 -4.76954 0.10321 -1.50445 131 -4.77063 -0.0166823 -1.50445 126 -4.76623 0.155594 -1.5038 140 -4.76722 -0.121523 -1.5038 129 -4.76681 -0.136498 -1.5038 123 -4.75394 -0.375832 -1.50379 124 -4.79397 1.20448 -1.50337 95 -4.83108 1.04571 -1.50337 100 -4.72164 0.65517 -1.50314 121 -5.8797 1.29183 -1.50276 34 -4.87182 0.824309 -1.50273 90 -4.88059 0.770693 -1.50273 89 -4.90836 -0.567614 -1.50273 84 -4.89575 -0.667718 -1.50273 87 -4.85782 0.892747 -1.5021 79 -4.90147 0.609065 -1.50209 90 -4.9096 0.539713 -1.50209 86 -4.9189 0.447079 -1.50209 94 -4.92028 0.431623 -1.50209 90 -4.93904 0.0364953 -1.50209 95 -4.93321 -0.242711 -1.50209 103 -4.82879 1.02932 -1.50146 92 -4.83981 0.97616 -1.50146 90 -4.88042 0.747091 -1.50146 95 -4.92768 0.307711 -1.50146 98 -4.93723 0.0209617 -1.50146 95 -4.92925 -0.281349 -1.50146 97 -4.88879 -0.690272 -1.50145 76 -4.79408 1.17249 -1.50082 90 -4.81191 1.09705 -1.50082 95 -4.8333 0.998564 -1.50082 90 -4.84839 0.922523 -1.50082 87 -4.85127 0.907286 -1.50082 90 -4.87254 0.785087 -1.50082 90 -4.88315 0.716127 -1.50082 81 -4.92322 0.346262 -1.50082 98 -4.93396 -0.11859 -1.50082 100 -4.9154 -0.443606 -1.50082 94 -4.9009 -0.582389 -1.50082 76 -4.73824 1.37416 -1.50019 100 -4.78854 1.18708 -1.50019 95 -4.84213 0.944987 -1.50019 100 -4.86174 0.838283 -1.50019 92 -4.86818 0.800074 -1.50019 92 -4.91108 0.469682 -1.50019 98 -4.91594 0.415656 -1.50019 98 -4.91785 0.392484 -1.50019 98 -4.93271 -0.0875643 -1.50018 98 -4.92456 -0.296625 -1.50018 98 -4.91987 -0.366212 -1.50018 84 -4.89232 -0.636007 -1.50018 82 -4.75945 1.29159 -1.49955 97 -4.77915 1.21667 -1.49955 98 -4.88697 0.661863 -1.49955 90 -4.88903 0.646507 -1.49955 94 -4.89202 0.623461 -1.49955 94 -4.91832 0.361429 -1.49955 102 -4.92508 0.25319 -1.49955 96 -4.92908 -0.157236 -1.49955 100 -4.92856 -0.17272 -1.49955 106 -4.90155 -0.543482 -1.49955 97 -4.89241 -0.620404 -1.49955 87 -4.94377 1.18226 -1.4993 108 -4.75354 1.30602 -1.49892 97 -4.92105 0.291741 -1.49891 98 -4.92683 0.167983 -1.49891 95 -4.92968 -0.010085 -1.49891 90 -4.92945 -0.048803 -1.49891 97 -4.91932 -0.319602 -1.49891 98 -5.005 0.877054 -1.49868 99 -4.74132 1.34279 -1.49828 98 -4.83357 0.959058 -1.49828 82 -4.92438 0.18338 -1.49828 98 -5.02358 0.750729 -1.49806 105 -5.05337 0.513253 -1.49806 110 -5.07058 0.298536 -1.49806 101 -5.49724 -0.611541 -1.49769 93 -4.73525 1.35714 -1.49764 97 -4.79393 1.13258 -1.49764 103 -4.80609 1.0798 -1.49764 92 -4.82088 1.01175 -1.49764 94 -4.8902 0.591998 -1.49764 83 -4.90203 0.484323 -1.49764 92 -4.90049 0.49972 -1.49764 92 -4.9115 0.376414 -1.49764 95 -4.92421 0.129164 -1.49764 92 -4.90928 -0.404259 -1.49764 85 -4.96962 1.04088 -1.49744 100 -4.98687 0.954863 -1.49744 100 -5.04974 -0.529894 -1.49743 98 -4.79562 1.11707 -1.49701 87 -4.84976 0.851863 -1.49701 86 -4.84706 0.867095 -1.49701 97 -4.89619 0.522597 -1.497 90 -4.91345 0.322254 -1.497 92 -4.91669 0.268209 -1.497 95 -4.91999 0.198676 -1.497 100 -4.924 0.00536482 -1.497 90 -4.92389 -0.0333067 -1.497 92 -4.92359 -0.064244 -1.497 92 -4.9061 -0.419528 -1.497 92 -4.95944 1.07949 -1.49682 94 -5.01377 0.789588 -1.49682 132 -5.01622 0.773834 -1.49682 96 -5.02776 0.694947 -1.49682 105 -5.07363 -0.139975 -1.49682 107 -5.03294 -0.656372 -1.49682 97 -5.02872 -0.687981 -1.49682 98 -4.80576 1.06385 -1.49637 90 -4.88917 0.56849 -1.49637 78 -4.91745 0.21404 -1.49637 94 -4.91999 0.144501 -1.49637 90 -4.92175 0.059474 -1.49637 84 -4.92007 -0.141529 -1.49637 98 -4.91072 -0.334581 -1.49637 98 -4.8938 -0.527117 -1.49637 81 -4.88221 1.38058 -1.4962 116 -4.90124 1.31143 -1.4962 120 -4.9626 1.05572 -1.4962 137 -4.99332 0.899319 -1.4962 138 -5.00683 0.820777 -1.4962 129 -5.0658 0.282316 -1.4962 104 -5.04996 -0.489831 -1.4962 93 -5.04427 -0.545328 -1.4962 126 -4.7545 1.26616 -1.49574 98 -4.87037 0.698551 -1.49573 97 -4.9189 0.113532 -1.49573 84 -4.91938 0.0903514 -1.49573 80 -4.91663 -0.18783 -1.49573 106 -4.8959 -0.488486 -1.49573 96 -4.88398 -0.596025 -1.49573 94 -4.88683 1.35706 -1.49559 114 -4.92704 1.20289 -1.49558 116 -4.9523 1.09426 -1.49558 135 -5.0075 0.804751 -1.49558 92 -5.0594 0.353778 -1.49558 103 -5.06596 0.24244 -1.49558 137 -5.06771 0.202645 -1.49558 106 -5.05989 -0.346732 -1.49558 102 -5.03608 -0.600525 -1.49558 91 -4.71937 1.38469 -1.4951 95 -4.88716 0.552681 -1.4951 104 -4.91379 -0.210925 -1.49509 98 -4.9131 -0.22636 -1.49509 99 -4.87525 -0.649449 -1.49509 99 -4.87419 1.39489 -1.49497 113 -4.9417 1.13271 -1.49497 136 -4.98383 0.929997 -1.49496 127 -4.98672 0.914334 -1.49496 99 -5.02637 0.662627 -1.49496 97 -5.04143 0.536104 -1.49496 99 -5.03972 0.551939 -1.49496 133 -5.0485 0.464782 -1.49496 107 -5.05912 0.32982 -1.49496 109 -5.06889 0.0990988 -1.49496 109 -5.06982 0.0194681 -1.49496 107 -5.06281 -0.267101 -1.49496 109 -5.05259 -0.41806 -1.49496 102 -5.05388 -0.402186 -1.49496 148 -5.48067 -0.670828 -1.49483 93 -4.73665 1.31732 -1.49446 100 -4.86985 0.675051 -1.49446 87 -4.91071 0.236905 -1.49446 94 -4.91535 -0.102793 -1.49446 94 -4.8951 -0.457381 -1.49446 90 -4.90983 1.25607 -1.49435 138 -4.91954 1.21747 -1.49435 105 -4.93626 1.1478 -1.49435 96 -4.94512 1.109 -1.49435 99 -4.99727 0.843441 -1.49435 100 -5.01461 0.733351 -1.49434 132 -5.03146 0.607101 -1.49434 132 -5.03334 0.591291 -1.49434 97 -5.0675 -0.0680948 -1.49434 106 -5.03686 -0.560512 -1.49434 122 -5.02844 -0.63166 -1.49434 118 -5.02332 -0.671134 -1.49434 129 -4.88974 1.32487 -1.49373 107 -4.96168 1.02302 -1.49373 135 -4.96956 0.984019 -1.49373 125 -4.96645 0.999627 -1.49373 94 -4.97263 0.968403 -1.49373 120 -5.02049 0.677924 -1.49373 127 -5.05947 0.258092 -1.49372 109 -5.06228 -0.195336 -1.49372 111 -5.06287 -0.179433 -1.49372 101 -5.0577 -0.290718 -1.49372 104 -5.03228 -0.584012 -1.49372 122 -5.02851 -0.61562 -1.49372 124 -5.47996 -0.644565 -1.49369 114 -4.90549 -0.264664 -1.49319 100 -4.90019 -0.349381 -1.49319 85 -5.37636 1.23248 -1.49312 106 -4.89815 1.28595 -1.49311 106 -4.90217 1.27056 -1.49311 107 -4.912 1.23202 -1.49311 101 -5.05068 0.369157 -1.49311 102 -5.06396 0.0433389 -1.4931 122 -5.0638 0.0592465 -1.4931 108 -5.06388 -0.0521167 -1.4931 107 -5.06151 -0.163455 -1.4931 141 -5.05003 -0.37791 -1.4931 104 -5.04557 -0.433413 -1.4931 103 -5.03894 -0.504699 -1.4931 129 -5.3706 1.24892 -1.49255 99 -5.38213 1.19825 -1.49255 95 -4.92707 1.16203 -1.49249 129 -5.03944 0.479957 -1.49249 100 -5.04572 0.408668 -1.49249 102 -5.05719 0.226148 -1.49249 102 -5.06056 0.130788 -1.49249 101 -5.06212 -0.0361831 -1.49249 95 -5.0611 -0.107743 -1.49249 113 -5.36279 1.27377 -1.49198 104 -5.481 -0.58369 -1.49197 123 -4.77377 1.14357 -1.49192 71 -4.88608 -0.472068 -1.49191 79 -4.88004 1.33874 -1.49187 112 -5.00935 0.716555 -1.49187 98 -5.02197 0.622009 -1.49187 100 -5.03602 0.49561 -1.49187 134 -5.04116 0.440207 -1.49187 107 -5.05063 0.313384 -1.49187 135 -5.05008 -0.322098 -1.49187 144 -5.0404 -0.448906 -1.49187 127 -5.03822 -0.472653 -1.49187 117 -5.28758 -0.64626 -1.49185 110 -5.28447 -0.671168 -1.49185 98 -5.33813 1.36575 -1.49141 112 -5.34239 1.34897 -1.49141 114 -5.35282 1.30697 -1.49141 100 -5.38398 1.17204 -1.49141 104 -5.46712 -0.686664 -1.4914 117 -4.89162 -0.387437 -1.49128 105 -5.27698 0.713646 -1.49127 102 -4.98522 0.857572 -1.49125 126 -5.02662 0.56655 -1.49125 107 -5.04062 0.424218 -1.49125 143 -5.05632 0.146594 -1.49125 130 -5.05557 0.170421 -1.49125 105 -5.05714 0.114822 -1.49125 106 -5.053 -0.234697 -1.49125 94 -5.0455 -0.361605 -1.49125 107 -5.38576 1.15471 -1.49084 149 -5.47243 -0.6263 -1.49083 123 -5.24868 0.886986 -1.49068 111 -5.0419 0.384481 -1.49063 136 -5.05654 0.00359938 -1.49063 110 -5.05653 -0.0122864 -1.49063 136 -5.05503 -0.123472 -1.49063 103 -5.04728 -0.305983 -1.49063 108 -5.1465 1.35227 -1.49009 122 -5.20448 1.10834 -1.49009 109 -5.25623 0.828934 -1.49009 103 -5.26258 0.787626 -1.49009 109 -5.26503 0.77109 -1.49009 104 -5.01433 0.637093 -1.49001 128 -5.05408 0.0750638 -1.49001 110 -5.04844 -0.250363 -1.49001 107 -4.90258 0.074546 -1.49001 105 -5.32168 1.40614 -1.48969 111 -5.04475 1.12484 -1.48952 80 -5.19011 1.16509 -1.4895 111 -5.25819 0.803875 -1.4895 113 -5.27881 0.654903 -1.48949 116 -5.64747 -0.686684 -1.48913 106 -5.32422 1.38892 -1.48912 112 -5.33917 1.33029 -1.48912 110 -5.36713 1.21257 -1.48912 140 -5.12963 -0.618056 -1.48891 75 -5.16138 1.27848 -1.48891 124 -5.17513 1.22165 -1.48891 105 -5.24714 0.861343 -1.48891 105 -5.26364 0.754023 -1.4889 107 -5.04741 0.18606 -1.48877 103 -5.05014 -0.083643 -1.48877 110 -5.1694 1.23747 -1.48832 114 -5.26971 0.695859 -1.48831 113 -5.28479 -0.570162 -1.48831 135 -5.28298 -0.58676 -1.48831 92 -5.16482 -0.00274316 -1.48831 86 -5.12833 1.39069 -1.48773 126 -5.20885 1.04957 -1.48773 107 -5.27825 -0.61142 -1.48772 108 -5.27631 -0.627999 -1.48772 103 -5.26908 -0.685976 -1.48772 98 -5.02278 1.19469 -1.48771 80 -5.09593 0.828963 -1.4877 68 -5.13232 -0.56122 -1.4877 75 -5.04231 -0.21827 -1.48754 143 -5.53454 1.29176 -1.48748 122 -5.34387 1.28695 -1.48741 103 -5.1598 1.26093 -1.48714 114 -5.17335 1.20412 -1.48714 116 -5.18628 1.14716 -1.48714 103 -5.18986 1.13086 -1.48714 101 -5.20198 1.07373 -1.48714 93 -5.09142 0.844645 -1.4871 77 -5.13385 -0.528777 -1.48709 70 -5.13113 1.36554 -1.48655 126 -5.14992 1.29286 -1.48655 119 -5.1771 1.17931 -1.48655 111 -5.19671 1.08968 -1.48655 159 -5.26724 0.670323 -1.48654 104 -5.02281 1.17802 -1.48649 83 -5.07565 0.924163 -1.48649 70 -5.15023 -0.30244 -1.48649 87 -5.13962 -0.447917 -1.48649 81 -5.13745 -0.472133 -1.48649 82 -5.12583 -0.584987 -1.48649 69 -5.12009 -0.63327 -1.48649 67 -5.11496 -0.673464 -1.48649 75 -5.13775 1.3328 -1.48596 122 -5.14192 1.31665 -1.48596 122 -5.24038 0.843381 -1.48595 98 -5.25766 0.727945 -1.48595 105 -5.26945 0.636995 -1.48595 107 -5.10727 0.715883 -1.48588 76 -5.15685 -0.0594814 -1.48588 81 -5.1391 -0.431618 -1.48588 82 -5.11655 1.4048 -1.48537 128 -5.0116 1.20864 -1.48528 78 -5.06898 0.93939 -1.48528 79 -5.64033 -0.631868 -1.48525 145 -5.20274 1.03139 -1.48477 101 -5.91382 -0.693786 -1.48474 74 -5.63641 -0.649356 -1.4847 106 -4.96284 1.38835 -1.48468 92 -5.1532 -0.0432674 -1.48467 86 -5.14089 -0.35868 -1.48467 89 -5.13025 -0.487757 -1.48467 83 -5.12869 -0.503872 -1.48467 78 -5.91405 -0.674995 -1.48421 77 -5.51923 1.30653 -1.48416 122 -5.52932 1.26315 -1.48416 114 -5.63243 -0.666826 -1.48415 133 -4.99432 1.26272 -1.48407 82 -5.04005 1.06567 -1.48407 79 -5.04337 1.04983 -1.48407 68 -5.05461 0.994314 -1.48407 68 -5.13387 0.425583 -1.48406 80 -5.14589 0.239867 -1.48406 88 -5.15141 -0.0270774 -1.48406 83 -5.10526 -0.688548 -1.48406 71 -5.50266 1.36669 -1.4836 126 -5.2648 0.611312 -1.48359 106 -4.9678 1.35612 -1.48346 89 -4.98241 1.30141 -1.48346 87 -5.01721 1.16004 -1.48346 77 -5.02262 1.13638 -1.48346 77 -5.08787 0.794802 -1.48346 75 -5.09395 0.754818 -1.48346 72 -5.10727 0.65867 -1.48346 73 -5.14759 0.142771 -1.48346 82 -5.1491 0.0699868 -1.48346 94 -5.14516 -0.213062 -1.48346 89 -5.80603 1.29446 -1.48316 72 -5.52951 1.24494 -1.48305 118 -5.53911 1.20148 -1.48305 121 -4.97645 1.31656 -1.48286 84 -5.05397 0.977688 -1.48286 82 -5.05852 0.95386 -1.48286 73 -5.08967 0.770521 -1.48285 77 -5.14711 -0.0755903 -1.48285 83 -5.1467 -0.0998455 -1.48285 85 -5.13784 -0.317968 -1.48285 85 -5.13403 -0.374442 -1.48285 86 -5.80006 1.31226 -1.48263 94 -5.49461 1.38305 -1.48249 126 -5.50948 1.32255 -1.48249 126 -5.21948 0.899059 -1.48241 103 -4.95984 1.37069 -1.48225 87 -5.04586 1.00904 -1.48225 76 -5.09817 0.698226 -1.48225 68 -5.12681 0.44119 -1.48225 74 -5.14574 0.0133383 -1.48224 91 -5.14568 0.0295031 -1.48224 83 -5.13991 -0.245223 -1.48224 83 -5.13912 -0.261369 -1.48224 87 -5.13438 -0.342059 -1.48224 83 -5.48837 1.39983 -1.48194 133 -5.02408 1.10355 -1.48164 79 -5.06774 0.881583 -1.48164 73 -5.10365 0.64188 -1.48164 77 -5.11975 0.497341 -1.48164 77 -5.14357 0.0537213 -1.48164 89 -5.13875 -0.228999 -1.48164 81 -5.12713 -0.414464 -1.48164 85 -5.10192 -0.655523 -1.48164 82 -5.78153 1.37505 -1.48157 78 -5.1947 1.0129 -1.48123 127 -4.99291 1.22899 -1.48104 80 -5.06861 0.865326 -1.48104 79 -5.10375 0.625602 -1.48104 70 -5.14077 0.110224 -1.48103 83 -5.49758 1.34715 -1.48083 130 -5.52588 1.22593 -1.48083 113 -5.19753 0.988063 -1.48064 89 -5.77344 1.39228 -1.48051 90 -5.90374 -0.645708 -1.4805 75 -5.10661 0.585272 -1.48043 73 -5.13932 0.0859554 -1.48043 80 -5.13835 -0.132023 -1.48043 85 -5.13715 -0.172375 -1.48043 83 -5.13659 -0.188512 -1.48043 83 -5.13212 -0.285295 -1.48043 87 -5.12461 -0.398077 -1.48043 81 -5.1113 -0.542795 -1.48043 80 -5.19873 0.971389 -1.48005 117 -5.25996 -0.550638 -1.48005 109 -5.90382 -0.626963 -1.47997 74 -4.96101 1.33747 -1.47983 84 -5.0352 1.02333 -1.47983 81 -5.09279 0.681158 -1.47982 87 -5.13008 0.287541 -1.47982 80 -5.13569 0.158531 -1.47982 75 -5.13659 0.12626 -1.47982 85 -5.53157 1.18171 -1.47972 171 -4.97357 1.28236 -1.47922 83 -5.10895 0.528676 -1.47922 79 -5.11445 0.472469 -1.47922 70 -5.12185 0.384032 -1.47922 77 -5.12677 0.311589 -1.47922 82 -5.12906 0.271313 -1.47922 77 -5.13493 -0.115813 -1.47921 81 -5.25149 0.593129 -1.47887 105 -5.05557 0.895788 -1.47861 83 -5.10451 0.552531 -1.47861 77 -5.11872 0.399962 -1.47861 81 -5.12281 0.343657 -1.47861 85 -5.13195 -0.15609 -1.47861 86 -5.09934 -0.598324 -1.47861 82 -5.78089 1.32696 -1.47839 72 -5.01806 1.0774 -1.47801 79 -5.10085 0.568342 -1.47801 87 -5.12196 0.32743 -1.478 84 -5.12792 0.214723 -1.478 83 -5.77269 1.35374 -1.47786 91 -5.12418 0.254885 -1.4774 79 -4.9761 1.24138 -1.4768 81 -5.07556 0.735698 -1.47679 86 -5.103 0.511824 -1.47679 78 -5.06089 0.806756 -1.47558 79 -5.11163 0.367063 -1.47558 79 -5.11905 0.198194 -1.47497 75 -5.11584 0.181957 -1.47376 84 -5.09694 0.45461 -1.47316 84 -5.23433 0.574635 -1.47297 107 -5.07921 0.606267 -1.47255 84 -5.24946 -0.333461 -1.47119 118 -5.17462 0.933426 -1.47061 97 -5.17707 0.90871 -1.47002 80 -5.16789 0.949008 -1.46943 115 -6.00545 -0.664448 -1.46924 98 -5.5764 -0.597802 -1.46585 80 -6.30055 1.36133 -1.46583 32 -5.98799 -0.6815 -1.46509 122 -6.17804 -0.645903 -1.46494 90 -5.87819 1.30287 -1.46355 109 -6.16828 -0.664511 -1.46293 127 -5.87029 1.3205 -1.46251 114 -6.16316 -0.693364 -1.46242 87 -5.85786 1.36613 -1.462 110 -6.05567 1.33043 -1.46193 26 -5.85166 1.38409 -1.46148 107 -5.86024 1.3473 -1.46148 108 -6.0388 1.39649 -1.46143 119 -6.26314 1.40493 -1.45902 146 -6.03372 1.37533 -1.45891 114 -6.03802 1.35636 -1.45891 157 -5.86525 1.28076 -1.45889 158 -5.86744 1.25232 -1.45785 110 -6.26183 1.38402 -1.45757 176 -5.14111 -0.35038 -1.43814 91 -5.11063 0.545439 -1.43401 101 -5.08955 -0.507705 -1.42634 69 -5.2444 -0.542973 -1.42049 73 -5.08282 -0.362163 -1.42044 119 -5.06938 -0.457358 -1.41867 117 -5.06641 -0.489199 -1.41867 82 -5.07404 -0.377523 -1.41808 92 -5.06031 -0.472531 -1.4163 102 -5.06458 -0.400788 -1.41571 110 -5.06197 -0.4326 -1.41571 97 -5.05569 -0.416031 -1.41335 88 -5.0598 -0.304509 -1.41217 57 -5.13085 1.08193 -1.41192 102 -5.00283 0.510664 -1.39978 92 -5.08477 1.03029 -1.39533 79 -5.07964 1.04587 -1.39476 92 -5.00513 -0.214202 -1.39388 113 -4.96255 0.491025 -1.3868 117 -5.03729 1.00394 -1.37989 118 -4.93769 0.449585 -1.37795 118 -4.91078 0.470608 -1.37027 124 -4.90994 0.416131 -1.3685 144 -4.90804 0.392703 -1.36732 85 -5.04194 -0.507023 -1.3593 86 -4.87623 0.428879 -1.35847 115 -4.86731 0.374282 -1.35434 106 -4.99846 -0.479105 -1.34557 82 -4.80977 -0.219968 -1.33368 71 -4.79602 0.354036 -1.33191 169 -4.77804 0.337722 -1.32601 190 -4.78326 -0.165921 -1.32482 187 -4.8559 0.943045 -1.32328 100 -4.75938 -0.269875 -1.31892 93 -4.75478 0.313703 -1.31833 209 -4.75408 -0.179708 -1.31597 217 -4.73476 0.29756 -1.31184 224 -4.73464 -0.231038 -1.31066 83 -4.7335 -0.253345 -1.31066 75 -4.73411 -0.149057 -1.30948 207 -4.73061 0.193037 -1.30889 227 -4.73383 -0.0820743 -1.30889 228 -4.72973 -0.0968455 -1.30771 228 -4.72367 -0.111537 -1.30594 220 -4.7233 -0.126376 -1.30594 214 -4.70887 0.0886376 -1.30122 236 -4.70324 0.20687 -1.30063 234 -4.70267 0.110723 -1.29945 235 -4.7036 -0.0592111 -1.29945 234 -4.91976 1.03781 -1.29844 86 -4.69803 -0.0443492 -1.29768 239 -4.69076 0.228536 -1.29709 239 -4.69575 0.0737078 -1.29709 239 -4.99559 -0.516938 -1.29677 87 -4.68415 0.279892 -1.29591 240 -4.6925 0.00733292 -1.29591 240 -4.6925 -0.00740921 -1.29591 240 -4.68859 -0.0294753 -1.29472 239 -4.76481 0.909318 -1.29468 100 -4.67824 0.161759 -1.29236 94 -4.67908 0.0220862 -1.29177 240 -4.67685 0.0588221 -1.29118 240 -4.67364 0.12489 -1.29059 121 -4.67134 0.0367684 -1.28941 241 -4.66749 0.139432 -1.28882 103 -4.66434 0.176024 -1.28823 128 -4.65375 0.241592 -1.28587 243 -4.64915 0.256022 -1.28469 255 -4.73377 0.887803 -1.28439 89 -5.10207 1.09225 -1.28233 28 -4.78802 -0.444866 -1.2821 70 -5.31254 -0.567871 -1.28173 54 -4.71959 0.869708 -1.27924 93 -4.72176 0.847109 -1.27867 84 -4.76457 -0.427729 -1.27466 82 -4.70742 0.829188 -1.27352 92 -4.75634 -0.411984 -1.2718 95 -4.75823 -0.389565 -1.2718 104 -4.69491 0.811699 -1.26895 67 -4.73267 -0.372656 -1.2638 70 -4.68036 0.771259 -1.26266 61 -4.67414 0.785305 -1.26152 69 -4.67898 0.755921 -1.26152 68 -4.72043 -0.356847 -1.25979 76 -4.6772 0.717944 -1.25923 74 -4.67594 0.687675 -1.25751 84 -4.66736 0.731406 -1.25694 61 -4.67344 0.664791 -1.2558 178 -4.70676 -0.3336 -1.25522 79 -4.70779 -0.318812 -1.25522 69 -4.70685 -0.303907 -1.25465 75 -4.66239 0.70059 -1.25408 80 -4.67183 0.63461 -1.25408 170 -4.66792 0.649008 -1.25351 182 -4.69822 -0.288584 -1.25179 83 -4.76101 0.989583 -1.25076 68 -4.65577 0.595109 -1.24779 115 -5.06322 -0.525341 -1.24736 49 -4.68421 -0.265657 -1.24721 85 -4.68502 -0.250941 -1.24721 92 -4.65008 0.609213 -1.24665 119 -4.65192 0.579737 -1.24607 161 -4.74677 0.963415 -1.24522 94 -4.6743 -0.235705 -1.24378 88 -4.64509 0.556615 -1.24321 124 -4.67344 -0.213599 -1.24321 104 -4.73845 0.946301 -1.24189 86 -4.63731 0.540857 -1.24036 92 -4.66402 -0.161865 -1.23978 56 -4.66069 -0.19842 -1.23921 91 -4.63137 0.52538 -1.23807 88 -4.65875 -0.147064 -1.23806 77 -4.65746 -0.183648 -1.23806 74 -4.79462 -0.479863 -1.238 55 -4.63496 0.474218 -1.2375 71 -4.65817 -0.0958011 -1.23749 63 -4.65728 -0.132383 -1.23749 63 -4.63154 0.488566 -1.23692 82 -4.62729 0.510165 -1.23635 78 -4.6288 0.458856 -1.23521 73 -4.62901 0.436849 -1.23464 68 -4.71309 0.926005 -1.23357 82 -4.64361 -0.0445158 -1.23292 66 -4.62273 0.421564 -1.23235 64 -4.64043 -0.117411 -1.23235 72 -4.63952 -0.0663641 -1.23177 75 -4.71266 0.88758 -1.23136 100 -4.77389 -0.454951 -1.23135 75 -4.63737 -0.0809168 -1.2312 75 -4.6183 0.406504 -1.23063 72 -4.63614 -0.0153556 -1.23063 66 -4.92075 1.03631 -1.2304 27 -4.71164 0.872091 -1.23025 90 -4.63415 -0.0299201 -1.23006 66 -4.62722 0.217401 -1.22949 89 -4.70229 0.900976 -1.22914 76 -4.61941 0.318955 -1.22892 74 -4.61253 0.384056 -1.22835 79 -4.62849 0.00643664 -1.22834 73 -4.62439 0.0499957 -1.2272 103 -4.62453 0.0354674 -1.2272 104 -4.62461 0.0209398 -1.2272 81 -4.61581 0.253158 -1.22663 90 -4.60721 0.354437 -1.22606 87 -4.60831 0.339962 -1.22606 87 -4.61834 0.151523 -1.22606 101 -4.60417 0.368745 -1.22549 87 -4.60985 0.28914 -1.22549 88 -4.60892 0.303621 -1.22549 83 -4.61566 0.173203 -1.22549 102 -4.60925 0.267292 -1.22491 93 -4.61257 0.202106 -1.22491 92 -4.61644 0.0716259 -1.22491 88 -4.69677 0.846573 -1.2247 68 -4.60893 0.238216 -1.22434 94 -4.61127 0.187524 -1.22434 97 -4.61428 0.086081 -1.22434 88 -4.6073 0.136609 -1.22263 101 -4.60771 0.122134 -1.22263 93 -4.69252 0.815452 -1.22193 69 -4.6044 0.100314 -1.22148 87 -4.89191 1.01403 -1.2214 27 -4.74533 0.385 -1.22137 95 -4.74766 0.355177 -1.22137 96 -4.74838 0.317761 -1.22082 105 -4.73895 -0.436405 -1.22082 81 -4.75451 0.0787381 -1.21971 91 -4.74911 0.198124 -1.21916 110 -4.73694 0.369397 -1.2186 95 -4.73969 0.332181 -1.2186 82 -4.75114 0.0413818 -1.2186 89 -4.75124 0.0264564 -1.2186 103 -4.74897 0.0637549 -1.21805 89 -4.74746 0.0115402 -1.21749 102 -4.72814 0.406127 -1.21694 98 -4.74202 0.18295 -1.21694 87 -4.74283 0.160601 -1.21694 99 -4.95427 -0.491024 -1.21662 28 -4.73886 0.212666 -1.21638 77 -4.74139 0.145652 -1.21638 96 -4.74222 0.11586 -1.21638 87 -4.73887 0.0934558 -1.21527 86 -4.72118 -0.397284 -1.21472 65 -4.66342 0.825647 -1.21417 79 -4.71734 -0.419348 -1.21416 63 -4.8702 0.985474 -1.21398 26 -4.72664 0.264274 -1.21361 95 -4.72553 0.249333 -1.21306 99 -4.66462 0.773106 -1.21195 68 -4.66939 0.743782 -1.21195 63 -4.65714 0.794453 -1.21084 76 -4.70234 0.456165 -1.21084 93 -4.70444 0.434 -1.21084 81 -4.69897 0.470753 -1.21029 93 -4.71669 0.234062 -1.21029 89 -4.70635 -0.366176 -1.20973 65 -4.87224 0.882641 -1.20921 26 -4.70907 0.300495 -1.20918 86 -4.7148 -0.010578 -1.20807 89 -4.68599 0.484391 -1.20696 94 -4.69764 -0.29868 -1.20585 77 -4.67465 0.535261 -1.2053 85 -4.69656 0.284958 -1.2053 75 -4.7034 0.129908 -1.2053 79 -4.83926 0.963213 -1.20444 26 -4.64847 0.703209 -1.20419 67 -4.67489 0.498145 -1.20419 90 -4.63855 0.753979 -1.20364 69 -4.6609 0.600587 -1.20363 91 -4.66458 0.571289 -1.20363 88 -4.65004 0.666155 -1.20308 120 -4.65611 0.6223 -1.20308 91 -4.66531 0.549089 -1.20308 79 -4.6822 -0.378973 -1.20308 66 -4.68517 -0.312605 -1.20252 82 -4.85168 0.855188 -1.20232 26 -4.6483 0.651031 -1.20197 87 -4.68225 -0.327178 -1.20197 90 -4.67322 0.416498 -1.20142 87 -4.67874 -0.349085 -1.20141 86 -4.90155 -0.455013 -1.20126 26 -4.65322 0.584797 -1.20086 87 -4.63103 0.715545 -1.19975 72 -4.64079 0.635175 -1.1992 89 -4.63163 0.685892 -1.19865 59 -4.67214 -0.274811 -1.19809 72 -4.67798 -0.054385 -1.19753 106 -4.82397 0.889309 -1.19649 157 -4.64574 0.517341 -1.19643 85 -4.67044 -0.0395814 -1.19532 107 -4.67054 -0.0249072 -1.19532 94 -4.66999 -0.0762613 -1.19532 105 -4.6678 -0.0908831 -1.19476 104 -4.66557 -0.105493 -1.19421 99 -4.89562 -0.00728496 -1.19384 26 -4.87413 -0.43718 -1.19331 26 -4.64869 -0.207385 -1.19033 52 -4.64692 -0.243889 -1.19033 61 -4.81327 0.817032 -1.19013 26 -4.64421 -0.258371 -1.18977 64 -4.64582 -0.126846 -1.18866 89 -4.64414 -0.17792 -1.18866 66 -4.63772 -0.141163 -1.18645 60 -4.85456 -0.34347 -1.18589 26 -4.80483 0.761252 -1.18536 26 -4.8473 -0.411911 -1.18536 26 -4.63013 -0.191877 -1.18478 29 -4.62883 -0.220966 -1.18478 65 -4.8091 0.707792 -1.1843 26 -4.84984 -0.327859 -1.1843 26 -4.81069 0.669449 -1.18324 26 -4.76909 0.909941 -1.18272 58 -4.80704 0.653521 -1.18165 26 -4.83632 -0.380459 -1.18165 26 -4.83126 -0.395357 -1.18059 25 -4.61613 -0.154904 -1.18035 101 -4.79161 0.720521 -1.18007 25 -4.79223 0.68983 -1.17901 25 -4.79952 0.637097 -1.179 25 -4.75488 0.891663 -1.17795 92 -4.7817 0.734359 -1.17795 25 -4.80302 0.545608 -1.17689 94 -4.82075 -0.356479 -1.17688 25 -4.77008 0.770938 -1.17636 25 -4.76383 0.785272 -1.1753 25 -4.81969 -0.083287 -1.17317 25 -4.81803 -0.151412 -1.17317 25 -4.81182 -0.28756 -1.17317 63 -4.77952 0.596145 -1.17212 50 -4.78137 0.581127 -1.17212 83 -4.81462 0.00753124 -1.17158 79 -4.81424 -0.0605315 -1.17158 25 -4.77934 0.56563 -1.17106 81 -4.80976 -0.0982822 -1.17052 25 -4.80557 -0.113323 -1.16946 25 -4.80327 -0.128378 -1.16893 25 -4.80296 -0.0302722 -1.16841 25 -4.79357 -0.30168 -1.1684 43 -4.80091 -0.0453534 -1.16788 25 -4.7549 0.524745 -1.16311 67 -4.78036 -0.180499 -1.16311 25 -4.7809 -0.165481 -1.16311 25 -4.78179 0.0223245 -1.16258 72 -4.77616 -0.232966 -1.16258 25 -4.76841 -0.270175 -1.16099 57 -4.76916 -0.21765 -1.16046 25 -4.7241 0.604016 -1.15728 29 -4.75656 0.0444872 -1.15569 95 -4.74284 -0.201668 -1.15304 25 -4.75307 1.00392 -1.15173 60 -4.69903 0.503326 -1.14721 81 -4.73538 0.984772 -1.14603 102 -4.71337 -0.25251 -1.14562 27 -4.75208 0.879723 -1.14499 157 -4.73219 0.891522 -1.14033 88 -4.7377 0.861772 -1.14033 173 -4.66684 0.477453 -1.13767 95 -4.67439 0.396749 -1.13767 90 -4.65873 0.461786 -1.13502 104 -4.69487 0.961216 -1.13412 85 -4.65392 0.409635 -1.13237 113 -4.64864 0.445977 -1.13184 101 -4.75962 -0.46825 -1.13152 48 -4.68797 0.936871 -1.13101 56 -4.64872 0.379714 -1.13025 102 -4.64963 0.343039 -1.12973 111 -4.70173 0.83258 -1.12945 105 -4.64109 0.423138 -1.1292 104 -4.65999 0.0576985 -1.12919 109 -4.64469 0.357326 -1.12867 113 -4.64716 0.225564 -1.12708 105 -4.64796 0.159769 -1.12655 106 -4.63531 0.327257 -1.12549 112 -4.64358 0.174203 -1.12549 123 -4.63602 0.254176 -1.12443 127 -4.64095 0.137593 -1.12443 117 -4.63103 0.304998 -1.1239 112 -4.63723 0.188524 -1.1239 130 -4.63943 0.12295 -1.1239 125 -4.6405 0.0719302 -1.1239 155 -4.66718 0.902409 -1.12376 59 -4.63093 0.27577 -1.12337 123 -4.63787 0.108318 -1.12337 126 -4.6291 0.23917 -1.12231 130 -4.63447 0.0863694 -1.12231 152 -4.62427 0.289922 -1.12178 120 -4.62858 0.209981 -1.12178 140 -4.77645 1.02803 -1.12016 30 -4.64725 0.913806 -1.11909 72 -4.67908 0.64056 -1.11547 166 -4.69765 -0.446908 -1.11443 68 -4.66747 0.653969 -1.11288 81 -4.69524 -0.409464 -1.11287 93 -4.69133 -0.431399 -1.11236 60 -4.65477 0.674624 -1.11029 71 -4.73804 1.00397 -1.10908 43 -4.64689 0.688426 -1.10873 80 -4.62621 0.804664 -1.10822 56 -4.67726 -0.392989 -1.10769 66 -4.63323 0.701351 -1.10563 79 -4.67079 -0.325956 -1.10459 85 -4.66782 -0.340478 -1.10407 79 -4.66987 -0.311142 -1.10407 98 -4.71846 0.984211 -1.10304 43 -4.6102 0.772187 -1.10252 69 -4.60394 0.786039 -1.10148 71 -4.61077 0.720301 -1.10045 55 -4.78288 -0.47559 -1.09951 37 -4.60043 0.748358 -1.09889 74 -4.65201 -0.287831 -1.09889 87 -4.64383 -0.375297 -1.09837 67 -4.63977 -0.352938 -1.09682 74 -4.6995 0.941654 -1.096 51 -4.58939 0.731846 -1.09527 65 -4.60634 0.616284 -1.09527 85 -4.69084 0.955224 -1.09449 67 -4.59675 0.600374 -1.09216 89 -4.60537 0.47686 -1.0906 255 -4.59186 0.577783 -1.09009 91 -4.60774 0.433265 -1.09009 255 -4.62496 -0.169449 -1.09008 107 -4.62161 -0.154768 -1.08905 90 -4.58789 0.562682 -1.08853 77 -4.58964 0.548266 -1.08853 80 -4.62196 -0.0530723 -1.08853 97 -4.61433 -0.270736 -1.08853 57 -4.61984 -0.0675523 -1.08801 93 -4.61821 -0.140108 -1.08801 91 -4.61323 -0.25612 -1.08801 66 -4.67209 0.920731 -1.08794 64 -4.61689 -0.118285 -1.08749 91 -4.58804 0.511593 -1.08698 84 -4.6056 0.316607 -1.08698 255 -4.613 0.179031 -1.08698 255 -4.61531 -0.103725 -1.08698 90 -4.61259 0.0123025 -1.08594 85 -4.61258 -0.0166798 -1.08594 86 -4.61175 -0.0891288 -1.08594 93 -4.60474 -0.233834 -1.08542 75 -4.60832 0.0629869 -1.0849 255 -4.60681 -0.00215323 -1.08439 85 -4.7253 -0.447715 -1.08391 16 -4.60472 -0.0383076 -1.08387 104 -4.66207 0.880682 -1.08341 49 -4.60287 0.0267907 -1.08335 87 -4.59932 -0.182839 -1.08335 66 -4.56912 0.524121 -1.08232 82 -4.59388 -0.21875 -1.08231 77 -4.80638 1.02901 -1.08219 41 -4.68128 0.710208 -1.0809 90 -4.64219 0.891944 -1.07888 57 -4.57911 -0.203544 -1.07817 90 -4.70354 -0.430876 -1.07787 65 -4.66565 0.722762 -1.07737 71 -4.66819 0.693138 -1.07687 97 -4.6714 0.671132 -1.07687 93 -4.70101 -0.415777 -1.07686 63 -4.70099 -0.393469 -1.07636 78 -4.6403 0.838717 -1.07586 48 -4.78109 1.00805 -1.07489 50 -4.64882 0.74253 -1.07385 63 -4.66211 0.639851 -1.07335 86 -4.56213 0.0482836 -1.07247 193 -4.62299 0.85803 -1.07234 58 -4.65625 0.653936 -1.07234 90 -4.63693 0.755521 -1.07133 59 -4.6829 -0.377252 -1.07133 41 -4.62453 0.805775 -1.07033 52 -4.64493 0.622525 -1.06831 89 -4.64781 0.600628 -1.06831 77 -4.61751 0.789559 -1.06781 41 -4.65199 0.534401 -1.0673 52 -4.64189 0.570181 -1.06579 71 -4.65028 0.497199 -1.06579 255 -4.63816 0.584509 -1.06529 95 -4.74584 0.977507 -1.06468 60 -4.64604 0.481956 -1.06428 255 -4.65868 -0.338646 -1.06428 56 -4.59722 0.815764 -1.06378 52 -4.63685 0.54735 -1.06378 77 -4.64176 0.466745 -1.06277 255 -4.74127 0.961092 -1.06274 58 -4.65871 -0.155218 -1.06177 99 -4.63358 0.451168 -1.06026 255 -4.63698 0.414762 -1.06026 255 -4.65337 -0.140438 -1.06026 83 -4.72903 0.943238 -1.05885 72 -4.58684 0.761889 -1.05875 82 -4.63547 0.363267 -1.05875 255 -4.63818 0.326849 -1.05875 255 -4.64174 -0.271629 -1.05875 62 -4.63238 0.37766 -1.05824 255 -5.14998 1.11746 -1.0565 121 -4.6314 0.282479 -1.05623 255 -4.62615 -0.358377 -1.05623 17 -4.63444 -0.125404 -1.05522 90 -4.63112 -0.169017 -1.05472 73 -4.62495 -0.292609 -1.05472 73 -4.62575 0.245641 -1.05422 255 -4.62833 -0.19077 -1.05422 64 -4.62109 -0.321538 -1.05421 71 -4.62208 -0.307019 -1.05421 55 -4.6256 0.209205 -1.05371 255 -4.62724 -0.103435 -1.05321 97 -4.62124 -0.219603 -1.05271 66 -4.62386 0.0782219 -1.0522 255 -4.62173 -0.0888172 -1.0517 87 -4.61436 -0.241107 -1.05119 57 -4.61343 0.114241 -1.04969 255 -4.61231 -0.074197 -1.04918 88 -4.60837 -0.20456 -1.04918 64 -4.60584 -0.255218 -1.04918 74 -4.60152 0.295005 -1.04868 255 -4.69433 0.898274 -1.04815 57 -4.75179 -0.476549 -1.04717 17 -4.59906 -0.0523838 -1.04566 91 -4.68568 0.881432 -1.04523 59 -4.43397 0.481202 -1.04502 255 -4.7424 -0.452982 -1.04426 20 -4.67099 0.916754 -1.04329 66 -4.5896 0.026975 -1.04314 95 -4.58759 -0.0379048 -1.04264 102 -4.58579 0.0125235 -1.04214 112 -4.58581 -0.00188231 -1.04214 104 -4.58369 0.0413073 -1.04163 132 -4.58381 -0.0234942 -1.04163 109 -4.66742 0.862944 -1.03988 76 -4.41206 0.429954 -1.03777 255 -4.40876 0.443631 -1.03725 255 -4.66067 0.823969 -1.03648 73 -4.71425 -0.420251 -1.03648 74 -4.65615 0.838273 -1.036 80 -4.71098 -0.434869 -1.03599 67 -4.40567 0.394485 -1.03518 255 -4.40689 0.380641 -1.03518 255 -4.40589 0.345738 -1.03414 255 -4.65367 0.807717 -1.03405 84 -4.70652 -0.397161 -1.03405 90 -4.40036 0.3662 -1.03311 255 -4.4031 0.331629 -1.03311 255 -4.40412 0.317794 -1.03311 255 -4.40686 0.206859 -1.03207 255 -4.40934 0.14454 -1.03207 255 -4.4007 0.282857 -1.03155 255 -4.40239 0.255201 -1.03155 255 -4.40354 0.234453 -1.03155 255 -4.40585 0.186021 -1.03155 255 -4.40841 0.109869 -1.03155 255 -4.39963 0.268924 -1.03104 255 -4.40611 0.123674 -1.03104 255 -4.64402 0.783592 -1.03065 88 -4.4004 0.220448 -1.03052 255 -4.40307 0.158218 -1.03052 255 -4.64694 0.754099 -1.03016 95 -4.40334 0.0751774 -1.03 255 -4.39907 0.0958652 -1.02896 255 -4.6388 0.767774 -1.0287 86 -4.79132 1.04705 -1.02838 13 -4.68455 -0.38036 -1.02821 75 -4.63969 0.738024 -1.02773 98 -4.6412 0.715867 -1.02724 93 -4.68105 -0.350452 -1.02675 91 -4.67799 -0.364995 -1.02627 84 -4.63767 0.700445 -1.02578 86 -4.49409 0.501065 -1.02553 255 -4.67297 -0.327659 -1.02432 102 -4.51571 0.0615938 -1.02402 255 -4.66917 0.326448 -1.02335 255 -4.62832 0.684234 -1.02287 95 -4.62957 0.662153 -1.02238 99 -4.62971 0.647346 -1.02189 105 -4.64962 0.464904 -1.02141 255 -4.65756 0.377183 -1.02141 255 -4.63077 0.595692 -1.02043 89 -4.65059 0.41343 -1.02043 255 -4.65946 -0.297217 -1.02043 93 -4.65693 -0.275006 -1.01946 103 -4.6527 -0.311431 -1.01897 94 -4.62118 0.609266 -1.01849 110 -4.64026 0.397889 -1.01752 255 -4.61248 0.63028 -1.01703 111 -4.64809 -0.259779 -1.01703 108 -4.74712 1.02151 -1.01671 40 -4.61901 0.564788 -1.01654 92 -4.64306 0.310119 -1.01654 255 -4.64682 0.207871 -1.01606 255 -4.64745 0.19327 -1.01606 255 -4.64148 0.273437 -1.01557 255 -4.6489 0.0763981 -1.01557 255 -4.64912 0.0617937 -1.01557 255 -4.64308 -0.244836 -1.01557 104 -4.63468 0.346175 -1.01508 255 -4.64038 0.258757 -1.01508 255 -4.64541 0.142062 -1.01508 255 -4.64584 0.127468 -1.01508 255 -4.64476 0.0909486 -1.0146 255 -4.61198 0.541937 -1.01411 106 -4.61366 0.527445 -1.01411 114 -4.63535 0.243905 -1.01363 255 -4.63062 -0.222226 -1.01216 103 -4.60564 0.51193 -1.01168 153 -4.63225 -0.127563 -1.01168 99 -4.62998 -0.193036 -1.01168 115 -4.59409 0.576527 -1.01071 123 -4.62601 -0.141905 -1.01022 124 -4.62341 -0.090934 -1.00925 105 -4.61967 -0.207091 -1.00925 108 -4.62117 -0.105403 -1.00876 99 -4.61894 -0.177976 -1.00876 118 -4.62001 -0.0618085 -1.00828 106 -4.71576 0.991333 -1.00784 62 -4.61585 -0.156055 -1.00779 91 -4.71695 0.97611 -1.00737 52 -4.61204 -0.0761507 -1.00633 101 -4.61056 -0.0398971 -1.00584 108 -4.60878 -0.0109127 -1.00536 111 -4.42183 0.40832 -1.00439 255 -4.60484 0.025285 -1.00439 123 -4.42238 0.380352 -1.00388 255 -4.77237 -0.48978 -1.00269 31 -4.4205 0.331235 -1.00237 255 -4.42902 0.185264 -1.00237 255 -4.5952 0.0108502 -1.00195 116 -4.59514 -0.0252403 -1.00195 116 -4.42927 0.122569 -1.00187 255 -4.59116 0.03971 -1.00098 128 -4.41332 0.295803 -0.999856 255 -4.4163 0.247259 -0.999856 255 -4.6887 0.939389 -0.998964 59 -4.68002 0.952919 -0.997564 64 -4.40811 0.218969 -0.997339 255 -4.41025 0.170488 -0.997339 255 -4.411 0.149703 -0.997339 255 -4.41268 0.0873316 -0.997339 255 -4.74678 -0.472238 -0.996157 16 -4.67782 0.914217 -0.995229 72 -4.39984 0.135419 -0.994319 255 -4.67113 0.897628 -0.992894 71 -4.73081 -0.455739 -0.991954 17 -4.51342 0.480696 -0.987856 255 -4.64938 0.855477 -0.98589 75 -4.63957 0.876264 -0.98449 68 -4.69609 -0.430274 -0.983083 20 -5.22814 1.1424 -0.982628 33 -4.63675 0.838016 -0.982155 79 -4.69289 -0.400295 -0.981683 69 -4.63362 0.822394 -0.980754 85 -4.68773 -0.414715 -0.980749 63 -4.829 1.03361 -0.98072 64 -4.48595 0.46369 -0.980562 255 -4.6883 -0.385104 -0.980282 81 -4.68231 -0.362449 -0.978414 84 -4.48111 0.413502 -0.978131 255 -4.62596 0.798501 -0.977953 77 -4.47593 0.42723 -0.977159 255 -4.61887 0.782287 -0.975618 82 -4.62177 0.752927 -0.975151 95 -4.6679 -0.346672 -0.974679 90 -4.61759 0.729882 -0.973283 106 -4.66121 -0.331497 -0.972812 90 -4.6141 0.714448 -0.971882 92 -4.60405 0.76481 -0.971416 82 -4.6144 0.699646 -0.971415 98 -4.61765 0.677894 -0.971415 103 -4.45555 0.347876 -0.970351 255 -4.65107 -0.30882 -0.97001 109 -4.78605 1.00111 -0.969575 69 -4.61206 0.662235 -0.969548 110 -4.60835 0.6469 -0.968147 115 -4.64641 -0.257274 -0.968143 105 -4.64425 -0.293759 -0.968142 124 -4.60942 0.624904 -0.96768 118 -4.64321 -0.279062 -0.967676 128 -4.64211 -0.227822 -0.966742 125 -4.45026 0.172174 -0.96646 255 -4.60558 0.609622 -0.966279 124 -4.63749 -0.242224 -0.965808 108 -4.84615 -0.502037 -0.965555 49 -4.43872 0.283619 -0.965002 255 -4.44228 0.22084 -0.965002 255 -4.44521 0.151038 -0.965001 255 -4.4466 0.102152 -0.965001 255 -4.59968 0.579404 -0.963944 148 -4.76432 0.981094 -0.96378 66 -4.60043 0.557477 -0.963477 151 -4.60216 0.543021 -0.963477 162 -4.6292 -0.212689 -0.963474 136 -4.59398 0.593331 -0.96301 135 -4.62626 -0.190734 -0.96254 142 -4.6249 -0.176136 -0.962073 152 -4.62543 -0.161605 -0.962073 156 -4.59033 0.526933 -0.960209 172 -4.61878 -0.125107 -0.960206 166 -4.59083 0.505071 -0.959742 183 -4.6172 -0.110559 -0.959739 177 -4.61447 -0.13952 -0.959272 166 -4.58811 0.475583 -0.958341 234 -4.74251 0.96122 -0.957984 96 -4.60821 -0.074191 -0.957404 191 -4.60795 -0.0886691 -0.957404 186 -4.73933 0.937391 -0.956201 101 -4.57869 0.452742 -0.955539 226 -4.60064 -0.0596576 -0.955537 203 -4.58772 0.322972 -0.955072 232 -4.57758 0.423586 -0.954605 225 -4.57889 0.409202 -0.954605 224 -4.58818 0.286798 -0.954605 233 -4.57429 0.437768 -0.954138 224 -4.58117 0.358668 -0.954138 229 -4.58712 0.272256 -0.954138 233 -4.57808 0.372889 -0.953671 226 -4.5829 0.308134 -0.953671 231 -4.57893 0.33677 -0.953204 231 -4.59065 0.0774364 -0.953203 233 -4.59111 0.0413796 -0.953203 227 -4.79342 -0.481067 -0.953073 29 -4.58902 0.0557672 -0.952736 228 -4.5893 -0.023528 -0.952736 215 -4.58935 -0.00911111 -0.952736 218 -4.58913 -0.0451551 -0.952735 211 -4.72693 0.9196 -0.952635 86 -4.57108 0.386745 -0.95227 220 -4.58649 0.0917572 -0.952269 235 -4.58546 0.00528043 -0.951802 219 -4.57709 0.242747 -0.951336 235 -4.5815 0.0268436 -0.950868 221 -4.72021 0.902966 -0.950406 95 -4.72302 0.888133 -0.950406 92 -4.55374 0.486297 -0.950403 239 -4.57242 0.256884 -0.950402 236 -4.57041 0.220755 -0.949468 237 -4.5648 0.105551 -0.947133 238 -4.76775 -0.463218 -0.946833 69 -4.55861 0.119703 -0.945732 239 -4.70604 0.862115 -0.945502 102 -4.55361 0.205506 -0.945266 239 -4.70488 0.846658 -0.94461 114 -4.70752 0.831872 -0.94461 116 -4.71139 0.80968 -0.94461 94 -4.75754 -0.44708 -0.944158 82 -4.54063 0.190551 -0.941998 240 -4.74795 -0.423553 -0.941483 107 -4.93064 1.06546 -0.941015 25 -4.69466 0.791737 -0.940152 107 -4.53468 0.140328 -0.94013 242 -4.73955 -0.407746 -0.939254 113 -4.68918 0.75305 -0.937477 106 -4.69382 0.723572 -0.937477 120 -4.68173 0.774523 -0.936586 135 -4.68766 0.737731 -0.936585 110 -4.72916 -0.391824 -0.93658 117 -4.68835 0.707702 -0.935694 124 -4.51428 0.167983 -0.935461 255 -4.72695 -0.31693 -0.934797 115 -4.50895 0.153569 -0.93406 255 -4.68198 0.684244 -0.933465 131 -4.71735 -0.368397 -0.93346 127 -4.71265 -0.353107 -0.932122 131 -4.7118 -0.338148 -0.931677 111 -4.67652 0.653517 -0.931235 157 -4.71328 -0.286192 -0.931231 128 -4.67251 0.667939 -0.93079 144 -4.70955 -0.248824 -0.929894 136 -4.66988 0.630221 -0.929006 163 -4.70443 -0.27077 -0.929002 127 -4.66988 0.600391 -0.928115 182 -4.69934 -0.218621 -0.927219 142 -4.69486 -0.299782 -0.927219 122 -4.66217 0.614327 -0.926777 177 -4.67455 0.511661 -0.926777 111 -4.87064 1.02814 -0.92667 24 -4.69084 -0.232953 -0.925436 137 -4.65702 0.561692 -0.924102 110 -4.66046 0.532419 -0.924102 93 -4.68473 -0.195736 -0.923653 145 -4.64942 0.575633 -0.922765 156 -4.67683 0.275212 -0.922764 83 -4.68076 -0.144001 -0.922316 159 -4.68003 -0.166058 -0.922316 153 -4.67948 -0.180759 -0.922316 150 -4.64907 0.545976 -0.921873 96 -4.66455 0.392349 -0.921873 96 -4.66664 0.340905 -0.921427 82 -4.67373 0.223525 -0.921426 84 -4.67767 -0.114471 -0.921424 157 -4.67729 -0.129167 -0.921424 155 -4.65271 0.457711 -0.920536 113 -4.65993 0.377253 -0.920535 91 -4.67453 -0.0776444 -0.920533 201 -4.64703 0.494043 -0.92009 132 -4.66599 0.259932 -0.920089 82 -4.67006 0.17194 -0.920088 91 -4.67321 -0.0115383 -0.920088 94 -4.66715 0.142496 -0.919197 85 -4.6689 -0.0628461 -0.919196 101 -4.64274 0.478873 -0.918753 132 -4.64636 0.442395 -0.918752 114 -4.64773 0.427796 -0.918752 101 -4.65331 0.362051 -0.918752 86 -4.66335 0.193734 -0.918751 95 -4.6673 -0.0261544 -0.91875 94 -4.66632 -0.0994618 -0.91875 176 -4.65406 0.325367 -0.918306 84 -4.64581 0.405573 -0.917861 99 -4.65312 0.310626 -0.91786 85 -4.65453 0.288695 -0.91786 81 -4.66192 0.120384 -0.917859 83 -4.66296 0.069116 -0.917859 86 -4.65548 0.23741 -0.917414 81 -4.65687 0.208156 -0.917414 91 -4.66063 0.0910624 -0.917413 87 -4.65693 0.156884 -0.916968 95 -4.65933 -0.048024 -0.916967 157 -4.65448 0.105603 -0.916076 87 -4.65561 0.0251691 -0.916076 84 -4.65373 0.00323861 -0.91563 90 -4.65146 0.054395 -0.915184 87 -4.64966 0.0397768 -0.914738 82 -4.81458 1.00019 -0.913591 24 -4.88624 -0.497572 -0.912321 24 -4.81004 0.983457 -0.911903 24 -4.8472 0.615261 -0.906839 39 -4.86201 -0.464405 -0.906414 24 -4.85274 -0.478949 -0.904727 24 -4.82871 0.589691 -0.902198 24 -4.82006 0.627072 -0.901355 64 -4.84077 -0.439491 -0.901352 24 -4.76333 0.958053 -0.900934 29 -4.81874 0.557694 -0.899245 84 -4.7563 0.933275 -0.898403 29 -4.82256 0.466173 -0.897979 84 -4.81355 0.534077 -0.897557 107 -4.81132 0.518512 -0.896713 81 -4.82069 -0.422519 -0.896711 23 -4.81622 0.450252 -0.896291 74 -4.7477 0.916044 -0.895871 30 -4.76729 0.796112 -0.895449 23 -4.81995 0.359082 -0.895447 90 -4.75835 0.825361 -0.894605 23 -4.74514 0.8769 -0.893761 56 -4.76568 0.757378 -0.893761 23 -4.81041 0.381133 -0.89376 101 -4.81806 1.03905 -0.893381 20 -4.74595 0.861629 -0.89334 59 -4.81337 0.312953 -0.893337 81 -4.7582 0.779173 -0.892917 23 -4.73328 0.897752 -0.892074 31 -4.74744 0.808039 -0.891652 23 -4.80504 0.289627 -0.891228 122 -4.79666 -0.405369 -0.891226 32 -4.80547 -0.246861 -0.890804 23 -4.73518 0.844241 -0.890386 32 -4.80766 0.0477452 -0.889961 78 -4.78972 0.394532 -0.889541 68 -4.79889 0.221167 -0.889118 101 -4.80358 0.0627767 -0.889118 96 -4.78063 0.431578 -0.888275 105 -4.78487 -0.381746 -0.888273 65 -4.78905 -0.261191 -0.887429 23 -4.73716 0.737422 -0.88701 27 -4.76822 0.498477 -0.88701 37 -4.78641 0.273308 -0.887009 102 -4.7941 0.0324753 -0.887008 89 -4.79027 0.137819 -0.886587 104 -4.76394 0.482871 -0.885744 53 -4.7685 -0.365463 -0.884476 70 -4.76928 -0.297793 -0.883632 23 -4.77019 -0.282808 -0.883632 23 -4.77524 0.114782 -0.883211 86 -4.76377 -0.350084 -0.88321 61 -4.75868 0.339151 -0.881946 98 -4.76833 0.152065 -0.881946 105 -4.75934 -0.229757 -0.880679 76 -4.71931 0.62851 -0.879838 54 -4.75751 0.181596 -0.879836 112 -4.70469 0.717045 -0.879416 29 -4.75389 1.00217 -0.878506 46 -4.74928 -0.19196 -0.878148 29 -4.75017 0.0991115 -0.877727 72 -4.75045 0.0841878 -0.877727 125 -4.741 -0.311132 -0.877726 28 -4.73199 0.40444 -0.877306 80 -4.74084 -0.206583 -0.87646 50 -4.69888 0.648243 -0.876041 32 -4.73168 -0.332964 -0.876038 56 -4.69278 0.677463 -0.875619 51 -4.74138 -0.0203041 -0.875617 35 -4.7413 -0.0351986 -0.875617 57 -4.72853 0.321904 -0.875196 53 -4.73912 -0.0575277 -0.875195 75 -4.7318 0.232615 -0.874774 55 -4.73556 -0.00543279 -0.874351 69 -4.7336 0.00942883 -0.873929 84 -4.73515 0.967321 -0.873135 67 -4.67903 0.690426 -0.873088 48 -4.72285 0.254446 -0.873086 91 -4.72825 0.981417 -0.872309 53 -4.71859 -0.176046 -0.871398 29 -4.79827 -0.489381 -0.871064 20 -4.67167 0.659311 -0.870556 84 -4.71508 0.164908 -0.870555 194 -4.71155 -0.0721491 -0.869288 61 -4.70544 -0.16083 -0.868444 29 -4.7166 0.940528 -0.868177 69 -4.7042 -0.138607 -0.868023 33 -4.89555 1.052 -0.867698 22 -4.71568 0.924973 -0.86735 78 -4.7007 -0.123746 -0.867179 68 -4.70703 0.907993 -0.864871 83 -4.70216 0.891783 -0.863218 101 -4.7628 -0.470448 -0.863214 21 -4.67956 -0.108599 -0.862538 97 -4.69282 0.867201 -0.860326 84 -4.6924 0.836699 -0.859086 69 -4.69552 0.784118 -0.857846 118 -4.73894 -0.452925 -0.857843 23 -4.84903 1.0258 -0.857373 46 -4.6724 0.848384 -0.855368 69 -4.67892 0.811662 -0.855368 60 -4.71002 0.590122 -0.854953 152 -4.7458 0.099529 -0.854952 88 -4.70524 0.612069 -0.85454 124 -4.73659 -0.280445 -0.854538 70 -4.7359 -0.258005 -0.854124 65 -4.72349 -0.4289 -0.854124 72 -4.73083 -0.309923 -0.853711 65 -4.72092 -0.413694 -0.853298 75 -4.72025 -0.398686 -0.852885 89 -4.72592 -0.294663 -0.852472 90 -4.7224 -0.346607 -0.852471 57 -4.71953 -0.383687 -0.852471 69 -4.67252 0.742767 -0.851649 52 -4.7142 0.351378 -0.850821 78 -4.66436 0.756534 -0.850409 75 -4.72095 0.203055 -0.850407 86 -4.7224 0.165971 -0.850407 139 -4.71984 -0.227299 -0.850406 159 -4.7216 0.128834 -0.849994 109 -4.66515 0.726631 -0.849583 79 -4.88934 -0.503345 -0.849027 44 -4.71611 0.113891 -0.848754 103 -4.71674 0.0842564 -0.848754 137 -4.71129 -0.241683 -0.848753 125 -4.67224 0.622881 -0.847929 66 -4.702 -0.330145 -0.847926 62 -4.69983 -0.359681 -0.847926 60 -4.82792 0.879275 -0.847444 142 -4.69178 0.386891 -0.846689 83 -4.82816 0.85581 -0.846649 85 -4.6625 0.636541 -0.846277 74 -4.69102 0.372005 -0.846276 92 -4.79855 0.999094 -0.846253 68 -4.64611 0.708844 -0.845038 66 -4.6652 0.569885 -0.845037 114 -4.66869 0.540561 -0.845037 94 -4.81166 0.891866 -0.844664 174 -4.69551 0.150409 -0.844622 105 -4.79169 0.974066 -0.84387 58 -4.69056 0.17978 -0.843796 136 -5.00407 1.07285 -0.843576 62 -4.67494 0.40038 -0.843384 82 -4.79089 0.958218 -0.843076 21 -4.65724 0.554123 -0.842971 70 -4.6691 0.422075 -0.842557 95 -4.68802 0.0323492 -0.842556 90 -4.66072 0.487845 -0.842144 87 -4.6658 0.436569 -0.842144 97 -4.68594 0.0470672 -0.842143 121 -4.68577 0.0617896 -0.842143 94 -4.65561 0.516915 -0.841731 107 -4.65721 0.502285 -0.841731 102 -4.67848 -0.188253 -0.841316 63 -4.62809 0.683913 -0.840492 75 -4.65322 0.464957 -0.840078 77 -4.67562 -0.0851917 -0.840077 87 -4.85427 -0.392318 -0.839893 91 -4.65271 0.450159 -0.839665 81 -4.84481 -0.47595 -0.839496 46 -4.67215 -0.0557447 -0.83925 98 -4.62454 0.653768 -0.83884 147 -4.67049 -0.0190295 -0.838838 91 -4.66999 -0.0703811 -0.838837 97 -4.61859 0.667755 -0.838013 88 -4.6666 0.0103297 -0.838011 88 -4.66343 -0.10689 -0.837598 80 -4.76698 0.937723 -0.837516 17 -4.83794 -0.444656 -0.83751 55 -4.66056 -0.0408966 -0.836771 97 -4.65682 -0.00426752 -0.835945 76 -4.65363 -0.172471 -0.835945 74 -4.82582 0.46876 -0.835528 116 -4.83152 -0.405876 -0.835525 72 -4.82676 -0.458976 -0.835525 57 -4.77101 0.829903 -0.834338 64 -4.8242 -0.374804 -0.833539 77 -4.63327 0.331166 -0.833467 121 -4.63724 -0.135304 -0.832226 130 -4.63655 -0.157155 -0.832226 106 -4.81809 -0.351539 -0.831951 43 -4.6323 0.214309 -0.831814 132 -4.62965 0.228774 -0.831401 171 -4.63178 -0.120549 -0.830987 146 -4.80677 -0.419136 -0.830759 48 -4.62071 0.25021 -0.829748 125 -4.61033 0.293295 -0.828096 81 -4.74271 0.809466 -0.827984 19 -4.60694 0.314893 -0.827683 181 -4.79868 -0.319941 -0.827582 92 -4.60732 0.278595 -0.827269 120 -4.60817 0.264119 -0.827269 87 -4.78144 0.479384 -0.826791 103 -4.92086 1.03931 -0.826487 81 -4.78396 -0.334133 -0.824802 66 -4.72715 0.783796 -0.824012 17 -4.97777 -0.529574 -0.821922 54 -4.77374 -0.243191 -0.821626 68 -4.71219 0.766017 -0.820438 17 -4.76282 0.11662 -0.81845 92 -4.75929 0.168902 -0.818053 137 -4.75685 -0.227446 -0.818051 84 -4.75492 -0.264799 -0.818051 58 -4.75121 -0.294559 -0.817654 40 -4.71443 0.645146 -0.81726 87 -4.75167 -0.21227 -0.81686 54 -4.74819 -0.279424 -0.81686 72 -4.69524 0.748019 -0.816467 35 -4.69756 0.733266 -0.816467 61 -4.70462 0.658824 -0.815672 83 -4.73113 0.406565 -0.815274 84 -4.73238 0.391701 -0.815274 98 -4.86252 1.01137 -0.814334 95 -4.74161 0.10108 -0.814081 91 -4.71163 0.52442 -0.813686 64 -4.74007 0.0786907 -0.813684 141 -4.8576 0.986541 -0.812435 56 -4.72741 0.18247 -0.811699 91 -4.67385 0.706867 -0.810907 68 -4.67605 0.692181 -0.810907 78 -4.68827 0.603921 -0.810906 95 -4.71491 0.337983 -0.810905 91 -4.85104 0.969403 -0.810536 100 -4.67627 0.677195 -0.810509 82 -4.68225 0.573209 -0.80892 76 -4.69727 0.433232 -0.80892 77 -4.67178 0.624117 -0.808126 109 -4.90522 -0.505886 -0.807492 78 -4.70758 0.129768 -0.80733 76 -4.70334 -0.195577 -0.806932 47 -4.66876 0.586385 -0.806538 93 -4.70543 0.0113942 -0.806535 98 -4.83284 0.950104 -0.806358 85 -4.67858 0.483368 -0.80614 70 -4.70341 0.026154 -0.806138 86 -4.70296 -0.0698898 -0.806138 94 -4.66847 0.556552 -0.805743 65 -4.67236 0.504967 -0.805346 54 -4.6938 0.232713 -0.805345 60 -4.89583 -0.48155 -0.805213 64 -4.6652 0.533847 -0.804552 80 -4.6954 0.0481938 -0.80455 78 -4.84551 0.826753 -0.804459 182 -4.69172 -0.00345567 -0.803756 91 -4.68886 -0.0918593 -0.803358 71 -4.66933 0.415703 -0.802963 68 -4.68773 -0.0255638 -0.802961 77 -4.68763 -0.0402908 -0.802961 83 -4.68318 -0.158024 -0.802564 83 -4.6807 -0.172673 -0.802166 70 -4.6816 -0.0549809 -0.80177 83 -4.67581 -0.143114 -0.800975 106 -4.67366 0.0625363 -0.800182 71 -4.66162 0.282369 -0.799388 130 -4.66468 -0.120839 -0.798593 143 -4.79959 0.904695 -0.798383 44 -4.66209 0.142923 -0.798196 68 -4.8602 -0.462435 -0.797998 46 -4.64628 0.362052 -0.797403 104 -4.6524 0.193806 -0.796608 113 -4.85964 -0.377742 -0.796479 158 -4.78515 0.917611 -0.796105 19 -4.63371 0.346355 -0.794623 74 -4.63629 0.309952 -0.794623 97 -4.63942 0.258955 -0.794622 84 -4.78796 0.848213 -0.794205 48 -4.84962 -0.353918 -0.7942 76 -4.63629 0.24415 -0.793828 90 -4.77729 0.885098 -0.793446 60 -4.62746 0.294707 -0.792637 77 -4.63186 0.214709 -0.792637 185 -4.77231 0.868718 -0.791927 73 -4.7859 0.778309 -0.791547 179 -4.7718 0.791476 -0.789268 255 -4.81148 -0.388957 -0.787364 95 -4.80104 -0.441266 -0.786225 19 -4.81176 0.269759 -0.785848 96 -4.9486 1.06582 -0.785379 81 -4.77288 0.638451 -0.78509 112 -4.75144 0.757595 -0.784331 61 -4.79588 -0.334557 -0.783567 67 -4.78481 -0.424525 -0.782807 51 -4.77111 -0.400572 -0.779769 63 -4.77711 0.290585 -0.779392 136 -4.7427 0.611861 -0.778634 136 -4.76753 -0.317374 -0.777871 54 -4.7707 -0.227353 -0.777491 255 -4.76701 -0.294771 -0.777491 133 -4.98485 -0.510598 -0.775965 67 -4.8981 1.03856 -0.775249 11 -4.72706 0.594849 -0.775216 117 -4.91488 0.945676 -0.774887 69 -4.75374 -0.211481 -0.774073 56 -4.75194 -0.24881 -0.774073 255 -4.70058 0.727088 -0.773697 77 -4.70855 0.645252 -0.772937 94 -4.7172 0.578623 -0.772937 114 -4.71792 0.556169 -0.772557 154 -4.70261 0.659517 -0.772178 88 -4.90527 0.911819 -0.771993 167 -4.90045 0.926851 -0.771631 66 -4.70989 0.54028 -0.770658 117 -4.68562 0.694766 -0.7699 89 -4.71461 0.458463 -0.769898 91 -4.95825 -0.437313 -0.769816 137 -4.70968 0.487884 -0.769519 111 -4.73472 -0.0393118 -0.769517 93 -4.67953 0.708915 -0.76914 78 -4.72565 -0.262183 -0.769136 255 -4.7248 -0.277028 -0.769136 239 -4.73034 -0.0764116 -0.768757 98 -4.72977 -0.106131 -0.768757 96 -4.70889 0.435561 -0.768379 103 -4.72868 -0.0540855 -0.768377 102 -4.94335 -0.490884 -0.768007 60 -4.69952 0.50927 -0.768 103 -4.70958 0.405808 -0.767999 109 -4.71144 0.38361 -0.767999 109 -4.71262 0.368806 -0.767999 122 -4.72701 0.0127726 -0.767998 97 -4.69594 0.523824 -0.76762 106 -4.72104 -0.194985 -0.767617 92 -4.86684 0.975914 -0.76729 72 -4.87139 0.952969 -0.76729 81 -4.67416 0.678145 -0.767241 145 -4.70437 0.420273 -0.76724 106 -4.7231 -0.00205467 -0.767238 104 -4.72156 -0.120744 -0.767238 128 -4.6975 0.471789 -0.76686 109 -4.72095 0.0424527 -0.766859 98 -4.71873 0.0646839 -0.766479 107 -4.7183 -0.090979 -0.766478 131 -4.71342 0.131296 -0.76572 148 -4.93333 -0.450863 -0.765474 75 -4.71028 0.168252 -0.76534 107 -4.71261 0.0794401 -0.76534 103 -4.71322 -0.0242057 -0.765339 122 -4.71038 0.0942166 -0.76496 103 -4.71124 0.0276177 -0.76496 124 -4.70596 0.116337 -0.764201 92 -4.70317 0.145852 -0.763821 104 -4.70328 -0.142361 -0.76382 85 -4.69133 0.337627 -0.763442 228 -4.93132 -0.32603 -0.763304 100 -4.68045 0.351684 -0.761543 132 -4.68706 0.248678 -0.761543 137 -4.6901 0.182393 -0.761542 100 -4.68659 -0.17125 -0.760782 117 -4.91058 -0.417825 -0.760772 62 -4.84763 0.87716 -0.760416 65 -4.82525 0.983141 -0.760055 34 -4.90978 -0.378963 -0.760048 177 -4.68318 -0.156372 -0.760022 156 -4.84456 0.860864 -0.759331 70 -4.90868 -0.340139 -0.759325 184 -4.66739 0.313946 -0.758505 144 -4.81059 0.995841 -0.757884 14 -4.89918 -0.362726 -0.757878 201 -4.664 0.196196 -0.756606 168 -4.65659 0.298591 -0.756226 147 -4.65747 0.210614 -0.755466 100 -4.6525 0.232385 -0.754707 96 -4.87312 -0.461112 -0.754622 76 -4.8577 -0.306232 -0.749557 116 -5.11434 -0.528267 -0.749111 76 -4.83992 -0.389233 -0.747387 181 -4.77755 0.8331 -0.746307 255 -4.76398 0.807526 -0.743051 255 -5.00402 1.01578 -0.742951 138 -4.76702 0.77725 -0.742689 81 -4.81543 -0.288613 -0.741599 65 -4.74129 0.788225 -0.738348 198 -4.79277 -0.234537 -0.736896 92 -4.79004 -0.249501 -0.736534 122 -4.97506 0.969477 -0.73644 153 -4.96464 0.991781 -0.735412 53 -4.95251 1.02179 -0.734384 173 -4.96943 0.93607 -0.734384 87 -4.77155 -0.263667 -0.733278 88 -4.95871 0.950234 -0.733013 193 -4.96214 0.910568 -0.732328 141 -4.70852 0.744607 -0.731112 67 -4.75647 -0.210501 -0.730022 125 -4.70755 0.699 -0.729665 96 -5.00751 -0.445206 -0.729237 179 -4.75121 -0.195346 -0.728937 46 -4.99448 -0.499414 -0.727866 156 -4.69141 0.726693 -0.727494 66 -4.69173 0.711646 -0.727132 109 -4.69717 0.674775 -0.727132 90 -4.70874 0.55604 -0.726408 120 -4.69148 0.658878 -0.725685 95 -4.69456 0.621742 -0.725323 101 -4.68963 0.643581 -0.724962 88 -4.69454 0.606729 -0.724961 76 -4.98142 -0.426974 -0.72444 113 -4.69526 0.569344 -0.724238 96 -4.97667 -0.458073 -0.724097 117 -4.72682 -0.0904482 -0.723873 97 -4.70049 0.487708 -0.723514 106 -4.91452 0.886147 -0.723419 167 -4.69698 0.502253 -0.723152 110 -4.68473 0.590437 -0.722791 89 -4.72045 -0.112613 -0.722787 83 -4.71838 -0.179334 -0.722787 73 -4.70104 0.420652 -0.722428 103 -4.70456 0.353995 -0.722066 91 -4.71746 -0.0606744 -0.722064 87 -4.69222 0.4719 -0.721705 112 -4.71588 -0.00880758 -0.721703 88 -4.69382 0.434841 -0.721343 80 -4.71332 -0.0754533 -0.721341 94 -4.69513 0.397786 -0.720981 80 -4.70838 0.18357 -0.72098 99 -4.67893 0.522548 -0.720258 65 -4.69244 0.382692 -0.720257 78 -4.708 0.0133484 -0.720256 76 -4.6944 0.330926 -0.719895 78 -4.70054 0.227618 -0.719895 107 -4.7057 0.0576846 -0.719894 105 -4.70599 -0.0236292 -0.719894 82 -4.70344 -0.156659 -0.719893 108 -4.67336 0.536775 -0.719535 80 -4.69549 0.249536 -0.719171 89 -4.69984 0.146225 -0.719171 117 -4.70204 0.0280724 -0.719171 89 -4.7004 -0.12702 -0.71917 94 -4.6992 0.0944896 -0.718809 95 -4.67678 0.447999 -0.718449 89 -4.69605 -0.141689 -0.718446 123 -4.69347 0.160754 -0.718086 77 -4.93918 -0.477919 -0.717929 163 -4.69358 0.0795944 -0.717724 79 -4.69409 -0.0383813 -0.717723 87 -4.67794 0.366633 -0.717363 115 -4.68169 0.315175 -0.717363 96 -4.68905 0.108969 -0.717 79 -4.67028 0.277503 -0.71483 88 -4.67177 0.211354 -0.714468 92 -4.8629 0.861365 -0.713824 99 -4.66524 0.262466 -0.713745 109 -4.66652 0.196394 -0.713383 74 -4.67045 0.0423824 -0.713382 91 -4.66293 0.130208 -0.712297 93 -4.64537 0.297866 -0.710489 182 -4.89307 -0.39571 -0.708678 85 -4.88054 -0.379195 -0.706279 111 -4.8789 -0.348221 -0.705594 85 -4.87582 -0.36339 -0.705251 244 -4.81896 0.814874 -0.704914 56 -4.81312 0.837246 -0.704572 61 -4.86869 -0.324377 -0.703538 69 -4.81176 0.798169 -0.703201 52 -4.85396 -0.307998 -0.700797 58 -4.79478 0.77999 -0.699774 101 -4.84836 -0.269386 -0.699427 114 -4.78672 0.755605 -0.697718 94 -4.82934 -0.291068 -0.696343 71 -4.77577 0.723239 -0.694977 94 -4.77153 0.737948 -0.694634 100 -4.77327 0.6999 -0.693949 116 -4.81258 -0.236876 -0.692916 111 -4.76781 0.66858 -0.692235 101 -4.80394 -0.25154 -0.691545 142 -4.76403 0.652826 -0.691207 111 -4.75593 0.682208 -0.690522 146 -4.75923 0.629378 -0.689836 124 -4.79593 -0.213312 -0.689832 98 -4.75532 0.613699 -0.688808 138 -4.75136 0.59805 -0.68778 148 -4.74825 0.574975 -0.686752 165 -4.77946 -0.182401 -0.686749 106 -4.77689 -0.197322 -0.686406 129 -4.74416 0.559394 -0.685724 166 -4.74253 0.521504 -0.684696 180 -4.76819 -0.166907 -0.684693 125 -4.7361 0.543418 -0.684011 178 -4.7658 -0.114353 -0.684008 151 -4.76345 -0.12926 -0.683665 146 -4.7363 0.505808 -0.683325 189 -4.73787 0.490925 -0.683325 197 -4.76105 -0.144153 -0.683322 135 -4.7335 0.475481 -0.682297 202 -4.73569 0.453169 -0.682297 203 -4.75447 -0.091601 -0.681952 158 -4.73316 0.437947 -0.681612 207 -4.75135 -0.0243383 -0.681267 188 -4.75101 -0.0616542 -0.681267 171 -4.75079 -0.0765787 -0.681267 168 -4.72862 0.422582 -0.680584 210 -4.74352 -0.00935138 -0.679896 183 -4.72467 0.399827 -0.679555 212 -4.72394 0.384834 -0.679213 213 -4.7394 0.042792 -0.679211 199 -4.73958 0.00556692 -0.679211 188 -4.73943 -0.0391017 -0.679211 171 -5.0822 -0.508736 -0.679059 69 -4.73754 0.0279005 -0.678868 194 -4.72119 0.369705 -0.678527 212 -4.7353 0.0576537 -0.678526 198 -4.71895 0.347185 -0.677842 212 -4.72002 0.332359 -0.677842 213 -4.73103 0.0799224 -0.677841 204 -4.72005 0.30258 -0.677499 210 -4.72142 0.280335 -0.677499 213 -4.72644 0.176445 -0.677498 212 -4.72225 0.228321 -0.677156 214 -4.72549 0.146695 -0.677156 207 -4.72682 0.0947279 -0.677155 209 -4.71901 0.213326 -0.676471 208 -4.71121 0.316923 -0.676129 215 -4.71441 0.265101 -0.676128 213 -4.72058 0.109473 -0.676128 211 -4.71713 0.161313 -0.675785 210 -4.71128 0.250101 -0.675443 211 -4.71374 0.198285 -0.675443 211 -4.71608 0.131629 -0.675442 210 -4.94436 1.01944 -0.669517 27 -4.93148 1.0329 -0.667925 33 -4.90384 0.970744 -0.66156 60 -4.89341 0.992634 -0.660605 32 -4.94023 -0.479593 -0.655826 58 -4.87008 0.947973 -0.655513 82 -4.84978 0.928092 -0.651693 36 -4.90828 -0.461106 -0.650416 34 -4.94347 1.02783 -0.648447 70 -4.82696 0.900017 -0.647238 58 -4.88458 -0.366315 -0.645324 76 -4.87892 -0.435331 -0.645324 36 -5.00326 -0.492627 -0.64503 71 -4.81424 0.881919 -0.644692 60 -4.81698 0.86679 -0.644691 61 -4.91761 1.0065 -0.643796 62 -4.86451 -0.41873 -0.642778 64 -4.85584 -0.379652 -0.640868 66 -4.79443 0.847053 -0.640554 62 -4.89708 0.978417 -0.639765 96 -4.9056 0.924158 -0.639454 118 -4.78537 0.806663 -0.638008 34 -4.83234 -0.40085 -0.637367 62 -4.77698 0.820658 -0.637053 61 -4.8266 -0.347038 -0.635776 60 -4.87102 0.957464 -0.635113 64 -4.76842 0.7883 -0.634825 33 -4.76819 0.765174 -0.634188 33 -5.19743 -0.510712 -0.633438 94 -4.81242 -0.323316 -0.63323 36 -4.75887 0.748287 -0.632279 32 -4.92025 -0.46841 -0.631697 74 -4.7573 0.732712 -0.631642 33 -4.84876 0.937414 -0.631082 62 -4.7529 0.709077 -0.630369 32 -4.79464 -0.291979 -0.630048 62 -4.7937 -0.307039 -0.630047 65 -4.79159 -0.276709 -0.629411 62 -4.84236 0.896856 -0.628912 75 -4.78495 -0.25375 -0.628138 62 -4.73948 0.691775 -0.627823 32 -4.78178 -0.238541 -0.627502 62 -4.73773 0.676303 -0.627186 32 -4.83348 0.879579 -0.627051 93 -4.77659 -0.223274 -0.626547 58 -4.88434 -0.449314 -0.625806 62 -4.73311 0.607426 -0.624958 32 -4.76635 -0.185356 -0.624637 33 -4.76691 -0.17038 -0.624637 31 -4.76377 -0.200256 -0.624319 32 -4.82005 0.853783 -0.62426 87 -4.73005 0.584356 -0.624003 31 -4.71833 0.658297 -0.623685 31 -4.72138 0.636056 -0.623685 31 -4.72336 0.621219 -0.623685 31 -4.75977 -0.147713 -0.623364 32 -4.81491 0.837323 -0.62302 86 -4.72383 0.553423 -0.622412 31 -4.75305 -0.10272 -0.622091 31 -4.86519 -0.370451 -0.621775 98 -4.85492 -0.423377 -0.620845 84 -4.74481 -0.117499 -0.620818 31 -4.80192 0.819617 -0.620539 86 -4.71031 0.566781 -0.620502 31 -4.72249 0.4332 -0.620184 31 -4.74186 -0.065289 -0.620182 31 -4.80058 0.803895 -0.619919 79 -4.70986 0.536707 -0.619866 31 -4.71233 0.514505 -0.619866 31 -4.84835 -0.40742 -0.619605 73 -4.73652 -0.132229 -0.619545 31 -4.71155 0.484461 -0.619229 31 -4.71 0.499261 -0.619229 31 -4.72106 0.380741 -0.619229 31 -4.71661 0.410215 -0.61891 31 -4.73374 -0.0800945 -0.618909 31 -4.79455 0.779731 -0.618369 80 -4.84174 -0.391505 -0.618365 82 -4.70789 0.461643 -0.618274 31 -4.72007 0.313537 -0.618274 31 -4.72316 0.224412 -0.617955 31 -4.72849 0.00167022 -0.617954 31 -4.72621 0.0536285 -0.617636 32 -4.70342 0.446259 -0.617319 31 -4.71043 0.364927 -0.617319 31 -4.71013 0.342571 -0.617001 31 -4.78721 0.763161 -0.616818 67 -4.71164 0.290629 -0.616682 31 -4.72053 0.02387 -0.616681 32 -4.72058 -0.0132053 -0.616681 31 -4.72051 -0.0280355 -0.616681 31 -4.72033 -0.0502797 -0.616681 31 -4.83496 -0.322169 -0.616504 84 -4.83393 -0.337356 -0.616504 82 -4.71258 0.238694 -0.616364 31 -4.71462 0.19427 -0.616364 32 -4.716 0.157235 -0.616363 32 -4.71709 0.120192 -0.616363 32 -4.70018 0.393814 -0.616046 31 -4.70859 0.275573 -0.616046 31 -4.71201 0.208982 -0.616045 31 -4.70746 0.26066 -0.615727 31 -4.82693 -0.352079 -0.615574 74 -4.70134 0.327033 -0.615409 31 -4.71152 0.105207 -0.615409 31 -4.70759 0.171719 -0.615091 31 -4.70858 0.142137 -0.61509 32 -4.70788 0.0903071 -0.614772 32 -4.70826 0.0681222 -0.614772 31 -4.70859 0.0385377 -0.614772 32 -4.82157 -0.283174 -0.614024 83 -4.81672 -0.298054 -0.613404 81 -4.76614 0.744585 -0.613097 78 -4.76764 0.721832 -0.612787 67 -4.76758 0.653073 -0.611236 58 -4.75815 0.705176 -0.610927 64 -4.76354 0.667784 -0.610926 69 -4.80338 -0.213902 -0.610613 76 -4.80195 -0.244077 -0.610613 83 -4.7968 -0.266462 -0.609993 83 -4.75056 0.688859 -0.609376 77 -4.75982 0.621634 -0.609376 69 -4.79282 -0.228466 -0.609063 83 -4.94776 1.01277 -0.607843 61 -4.74897 0.597544 -0.607205 66 -4.75662 0.515202 -0.606895 74 -5.02046 -0.470349 -0.606659 58 -4.77868 -0.190102 -0.606582 77 -4.74936 0.544649 -0.606275 73 -4.77728 -0.175006 -0.606272 79 -4.77039 -0.144703 -0.605032 77 -4.72845 0.632812 -0.604725 74 -4.74523 0.491431 -0.604724 77 -4.76743 -0.107123 -0.604412 74 -4.76596 -0.159536 -0.604412 75 -4.76509 -0.122039 -0.604102 77 -4.74035 0.460884 -0.603484 73 -4.72531 0.579635 -0.603174 76 -4.72943 0.527435 -0.602864 76 -4.73784 0.445641 -0.602864 75 -4.91799 0.990412 -0.60284 82 -4.72318 0.564339 -0.602554 70 -4.75429 -0.0693993 -0.602242 73 -4.72904 0.474841 -0.601934 75 -4.75282 -0.00217032 -0.601932 79 -4.75251 -0.0544304 -0.601932 73 -4.74645 0.0649697 -0.601002 83 -4.74682 0.0276896 -0.601002 85 -4.74688 0.0127778 -0.601002 81 -4.73046 0.370164 -0.600693 80 -4.7316 0.355302 -0.600693 81 -4.72669 0.3923 -0.600383 77 -4.74206 -0.0915086 -0.600381 73 -4.73432 0.250983 -0.600072 75 -4.7215 0.406828 -0.599763 75 -4.72782 0.325192 -0.599763 81 -4.73311 0.236022 -0.599762 75 -4.73873 0.0500189 -0.599762 79 -4.73896 -0.0169765 -0.599761 75 -4.73883 -0.0393078 -0.599761 73 -4.90722 0.932105 -0.599602 110 -4.72914 0.273084 -0.599452 77 -4.73285 0.198769 -0.599452 78 -4.71626 0.421331 -0.599143 75 -4.72284 0.33978 -0.599142 77 -4.72536 0.302677 -0.599142 79 -4.72628 0.28783 -0.599142 80 -4.72988 0.220987 -0.599142 76 -4.7336 0.116927 -0.599142 85 -4.73437 0.0797464 -0.599142 81 -4.72752 0.183702 -0.598522 77 -4.7261 0.168789 -0.598212 78 -4.72661 0.15394 -0.598212 81 -4.72801 0.10196 -0.598211 81 -4.89006 0.968645 -0.598131 79 -4.72531 0.13162 -0.597901 90 -4.89263 0.945206 -0.597837 76 -4.87127 0.909222 -0.593717 87 -4.87356 0.885891 -0.593422 90 -4.93124 -0.446838 -0.593123 64 -4.87048 0.869502 -0.592539 90 -4.9267 -0.430857 -0.59224 89 -4.8693 0.853495 -0.591951 92 -4.9272 -0.37638 -0.591651 125 -4.92276 -0.407178 -0.591357 96 -4.85053 0.834392 -0.588714 91 -4.85441 0.811524 -0.588714 92 -4.90626 -0.390394 -0.588709 92 -4.85108 0.795278 -0.587831 102 -4.89446 -0.335424 -0.586355 87 -4.88944 -0.350537 -0.585766 75 -4.83209 0.776467 -0.584593 98 -4.83569 0.753688 -0.584593 94 -4.88463 -0.303991 -0.584589 91 -4.88205 -0.280763 -0.584001 89 -4.83218 0.737567 -0.58371 97 -4.83251 0.722079 -0.583416 82 -4.87575 -0.31886 -0.583412 85 -4.87303 -0.264941 -0.582529 94 -4.82608 0.697831 -0.581945 85 -4.86791 -0.249358 -0.581647 96 -4.82042 0.681517 -0.580767 86 -4.82265 0.650941 -0.580473 87 -4.81666 0.665525 -0.579885 86 -4.8552 -0.225847 -0.579587 94 -4.85454 -0.195268 -0.579293 96 -4.81586 0.626877 -0.579001 90 -4.85145 -0.172269 -0.578704 92 -4.84995 -0.210367 -0.578704 93 -4.81388 0.611226 -0.578413 87 -4.8099 0.595339 -0.57753 92 -4.80829 0.54149 -0.576353 92 -4.83615 -0.1566 -0.57635 91 -4.80068 0.555878 -0.57547 87 -4.83111 -0.126087 -0.575467 92 -4.79694 0.570713 -0.575176 87 -4.82871 -0.141217 -0.575173 94 -4.82799 -0.0880894 -0.574879 96 -4.799 0.517489 -0.574587 96 -4.79863 0.502193 -0.574293 91 -4.80169 0.472032 -0.574292 94 -4.82033 -0.0728455 -0.573702 98 -4.81978 -0.103131 -0.573702 93 -4.79429 0.486485 -0.57341 94 -4.80377 0.297489 -0.572526 95 -4.79008 0.448037 -0.572232 93 -4.81086 -0.0349664 -0.57223 92 -4.79397 0.380109 -0.571938 97 -4.80898 0.017915 -0.571936 99 -4.78886 0.417566 -0.571644 92 -4.79317 0.364885 -0.571644 95 -4.80677 -0.0500604 -0.571642 96 -4.78556 0.432419 -0.571349 95 -4.78881 0.394821 -0.571349 96 -4.80429 0.0858034 -0.571348 96 -4.80502 -0.0198599 -0.571348 92 -5.13311 -0.501952 -0.571293 116 -4.79294 0.311882 -0.571055 95 -4.79797 0.221488 -0.571054 83 -4.78892 0.341839 -0.570761 95 -4.7949 0.243984 -0.57076 78 -4.79713 0.13842 -0.570465 97 -4.79754 0.123348 -0.570465 97 -4.7986 0.0705914 -0.570465 97 -4.78602 0.326502 -0.570172 102 -4.78932 0.273858 -0.570172 91 -4.79334 0.19107 -0.570171 95 -4.79418 0.168479 -0.570171 98 -4.79469 0.153416 -0.570171 95 -4.79703 0.0328772 -0.570171 102 -4.79517 0.00272502 -0.569876 95 -4.78423 0.258459 -0.569289 107 -4.78679 0.205839 -0.569289 91 -4.79097 0.047855 -0.569288 100 -4.7862 0.100427 -0.5687 98 -5.6574 1.12325 -0.562089 155 -4.97883 0.990313 -0.560054 84 -4.96787 0.9639 -0.557859 92 -4.95529 0.945398 -0.555665 99 -4.95434 0.929117 -0.555116 95 -5.01909 -0.466344 -0.55511 62 -4.93135 0.900916 -0.551276 88 -4.93026 0.884741 -0.550727 92 -4.97714 -0.446454 -0.549075 79 -4.92142 0.843395 -0.548532 83 -4.91544 0.866244 -0.548258 89 -4.97385 -0.391039 -0.547978 124 -4.97062 -0.406491 -0.547704 89 -4.96865 -0.429911 -0.547704 97 -4.91622 0.826657 -0.547435 105 -4.90706 0.809336 -0.545789 100 -4.89955 0.768693 -0.543869 88 -4.94066 -0.357022 -0.543041 98 -4.93951 -0.372542 -0.543041 77 -4.88804 0.790549 -0.542772 86 -4.89018 0.751553 -0.542223 95 -4.89252 0.736186 -0.542223 105 -4.93241 -0.333018 -0.54167 98 -4.93045 -0.301758 -0.541121 99 -4.88637 0.696124 -0.540577 86 -4.88265 0.679981 -0.539754 88 -4.91959 -0.316556 -0.53975 101 -4.87435 0.710096 -0.539206 104 -4.91289 -0.261866 -0.538379 91 -4.90809 -0.277055 -0.53783 104 -4.90775 -0.246101 -0.537556 89 -4.8682 0.623599 -0.536737 98 -4.87013 0.608303 -0.536737 92 -4.86222 0.65392 -0.536463 92 -4.89766 -0.206984 -0.53591 88 -4.85835 0.637899 -0.53564 91 -4.86114 0.583991 -0.535091 116 -4.88907 -0.221967 -0.534813 92 -4.88641 -0.191068 -0.534265 87 -4.88501 -0.175636 -0.53399 98 -4.85289 0.552155 -0.533445 103 -4.8803 -0.137065 -0.533168 104 -4.8472 0.566959 -0.532896 102 -4.87786 -0.152323 -0.532893 103 -4.87674 -0.121612 -0.532619 92 -4.84756 0.528463 -0.532348 104 -4.84919 0.513233 -0.532348 86 -4.87528 -0.0985801 -0.532345 89 -4.84684 0.497611 -0.531799 90 -4.84913 0.474766 -0.531799 94 -4.87201 0.0545815 -0.531797 97 -4.86986 -0.0678311 -0.531522 88 -4.84468 0.459001 -0.530976 89 -4.84747 0.428552 -0.530976 88 -4.86567 -0.0830413 -0.530973 88 -4.84991 0.375084 -0.530701 91 -4.86433 0.0239729 -0.5307 91 -4.8643 -0.0295126 -0.530699 97 -4.86225 0.0392493 -0.530425 96 -4.86213 -0.0524036 -0.530425 91 -4.86043 0.00107067 -0.530151 93 -4.84153 0.405085 -0.529878 88 -4.84385 0.321134 -0.529329 98 -4.84709 0.267854 -0.529329 91 -4.85128 0.176446 -0.529329 92 -4.85329 0.107847 -0.529328 99 -4.83976 0.351428 -0.529055 93 -4.85031 0.145912 -0.529054 98 -4.83031 0.442417 -0.528781 89 -4.83488 0.38928 -0.528781 95 -4.8505 -0.0141171 -0.528779 92 -4.83938 0.29797 -0.528506 95 -4.84389 0.160984 -0.528232 89 -4.83096 0.335588 -0.527684 94 -4.83604 0.252069 -0.527683 93 -4.83717 0.229278 -0.527683 92 -4.83787 0.214079 -0.527683 99 -4.83654 0.19881 -0.527409 94 -4.83906 0.122817 -0.527409 96 -4.83974 0.0924092 -0.527408 97 -4.84 0.0772052 -0.527408 97 -4.8304 0.28224 -0.527135 92 -5.36933 -0.485649 -0.511259 40 -5.20611 1.01453 -0.499496 40 -5.45114 1.04443 -0.497343 40 -5.255 -0.45092 -0.495477 40 -5.15831 0.979735 -0.492274 40 -5.15552 0.962405 -0.491471 40 -5.22215 -0.415241 -0.490662 40 -5.21884 -0.431492 -0.490395 40 -5.21614 -0.390076 -0.489593 40 -5.1293 0.940696 -0.487459 40 -5.13223 0.924578 -0.487459 40 -5.13263 0.899678 -0.486924 40 -5.11982 0.880782 -0.484784 40 -5.11865 0.864014 -0.484248 40 -5.16394 -0.37013 -0.482371 40 -5.09986 0.819571 -0.480771 40 -5.15123 -0.353025 -0.480498 40 -5.09654 0.802589 -0.479968 40 -5.08945 0.834265 -0.479701 40 -5.14791 -0.312227 -0.479696 40 -5.14493 -0.328282 -0.479429 40 -5.08777 0.727556 -0.477293 40 -5.07678 0.774856 -0.476758 40 -5.07919 0.758904 -0.476758 40 -5.12799 -0.278803 -0.476754 40 -5.12709 -0.294911 -0.476754 40 -5.07371 0.741755 -0.475688 40 -5.12283 -0.222099 -0.475684 40 -5.12012 -0.23811 -0.475417 40 -5.11935 -0.254193 -0.475416 40 -5.06957 0.700478 -0.474351 40 -5.07387 0.668612 -0.474351 40 -5.34478 -0.474602 -0.47363 46 -5.06585 0.683724 -0.473548 40 -5.07107 0.643916 -0.473548 40 -5.10856 -0.181376 -0.473544 40 -5.10203 -0.197225 -0.472742 40 -5.0652 0.626967 -0.472478 40 -5.0992 -0.165057 -0.472207 40 -5.06125 0.61031 -0.471675 40 -5.06556 0.498052 -0.470605 40 -5.08804 -0.140757 -0.470602 40 -5.45708 1.0502 -0.470424 40 -5.0578 0.553495 -0.470338 40 -5.06315 0.481741 -0.47007 40 -5.0521 0.568917 -0.469803 40 -5.08357 -0.0687653 -0.4698 40 -5.08251 -0.124656 -0.4698 40 -5.04832 0.584548 -0.469535 40 -5.05608 0.513124 -0.469535 40 -5.08089 -0.108656 -0.469532 40 -5.04967 0.536504 -0.469 40 -5.07805 0.0190263 -0.468998 40 -5.07724 -0.0926407 -0.468997 40 -5.06066 0.369362 -0.468464 40 -5.07385 -0.0527408 -0.468463 40 -5.23197 0.986486 -0.468284 40 -5.05432 0.424807 -0.468197 40 -5.07201 -0.0367973 -0.468195 40 -5.04958 0.456368 -0.46793 40 -5.06998 0.0428491 -0.467928 40 -5.04704 0.440137 -0.467395 40 -5.0662 0.00300479 -0.467393 40 -5.06211 0.146161 -0.467126 40 -5.04639 0.400151 -0.46686 40 -5.05882 0.18583 -0.466859 40 -5.04957 0.328632 -0.466592 40 -5.0486 0.312635 -0.466324 40 -5.0566 0.130073 -0.466323 40 -5.05772 0.0744667 -0.466323 40 -5.0417 0.383813 -0.466057 40 -5.04401 0.352129 -0.466057 40 -5.05054 0.24113 -0.466056 40 -5.0535 0.0902635 -0.465788 40 -5.05429 -0.0129421 -0.465788 40 -5.04579 0.256772 -0.465522 40 -5.05104 0.114022 -0.465521 40 -5.05199 0.0584774 -0.465521 40 -5.04299 0.272506 -0.465254 40 -5.04633 0.201187 -0.465254 40 -5.03769 0.296014 -0.464719 40 -5.04172 0.216849 -0.464719 40 -5.04156 0.169246 -0.464451 40 -5.48235 -0.483438 -0.463801 90 -5.23561 -0.447794 -0.459356 40 -5.1565 0.947519 -0.457833 40 -5.22119 -0.429964 -0.457317 40 -5.14382 0.928573 -0.455794 40 -5.21129 -0.404374 -0.455788 40 -5.1428 0.911735 -0.455284 40 -5.40469 -0.459858 -0.454002 49 -5.1361 0.869068 -0.4535 40 -5.19197 -0.369964 -0.452984 40 -5.12747 0.884218 -0.452735 40 -5.18683 -0.38596 -0.452474 40 -5.18574 -0.344928 -0.451965 40 -5.12118 0.850094 -0.451206 40 -5.12512 0.82595 -0.451205 40 -5.17691 -0.327958 -0.45069 40 -5.17338 -0.286929 -0.449926 40 -5.16832 -0.270334 -0.449161 40 -5.29239 0.991844 -0.449109 40 -5.11005 0.807148 -0.448911 40 -5.1601 -0.310531 -0.448396 40 -5.10471 0.789918 -0.447892 40 -5.15726 -0.253452 -0.447632 40 -5.09539 0.772154 -0.446362 40 -5.08719 0.746465 -0.444833 40 -5.09178 0.714486 -0.444832 40 -5.13425 -0.236035 -0.444573 40 -5.08558 0.729935 -0.444323 40 -5.13581 -0.139158 -0.444319 40 -5.08936 0.673474 -0.443813 40 -5.13059 -0.179331 -0.443809 40 -5.1294 -0.155082 -0.443554 40 -5.12802 -0.195361 -0.443554 40 -5.12683 -0.098575 -0.443044 40 -5.12342 -0.211289 -0.443044 40 -5.07935 0.688432 -0.442793 40 -5.12513 -0.0824272 -0.44279 40 -5.08161 0.65626 -0.442538 40 -5.1214 -0.0662541 -0.44228 40 -5.24087 0.964883 -0.442249 55 -5.11639 -0.122447 -0.44177 40 -5.11563 -0.0500769 -0.441515 40 -5.23607 0.946962 -0.441269 58 -5.11388 -0.00988387 -0.44126 40 -5.07282 0.630898 -0.441009 40 -5.10787 -0.0258881 -0.440496 40 -5.07077 0.598344 -0.440244 40 -5.07066 0.582196 -0.439989 40 -5.06493 0.613816 -0.439734 40 -5.07083 0.525823 -0.439224 40 -5.22144 0.927299 -0.439064 59 -5.06521 0.54135 -0.438714 40 -5.06733 0.501366 -0.438459 40 -5.21989 0.90164 -0.438329 58 -5.06798 0.429209 -0.437694 40 -5.27352 -0.432655 -0.437587 44 -5.08168 0.158009 -0.437438 40 -5.0786 0.18987 -0.437183 40 -5.04967 0.55581 -0.43693 40 -5.05702 0.48437 -0.436929 40 -5.05457 0.468136 -0.43642 40 -5.05672 0.444311 -0.436419 40 -5.06166 0.356745 -0.436164 40 -5.06903 0.229433 -0.436164 40 -5.06078 0.340719 -0.435909 40 -5.06926 0.173627 -0.435908 40 -5.07223 0.00634474 -0.435908 40 -5.26164 -0.406797 -0.435873 40 -5.05458 0.37224 -0.4354 40 -5.06154 0.261002 -0.435399 40 -5.0669 0.117806 -0.435398 40 -5.06788 0.062086 -0.435398 40 -5.04952 0.411775 -0.435145 40 -5.19728 0.880799 -0.435144 61 -5.20208 0.839627 -0.434899 63 -5.06253 0.133639 -0.434889 40 -5.05431 0.284547 -0.434634 40 -5.05639 0.244842 -0.434634 40 -5.05783 0.213068 -0.434634 40 -5.05973 0.0779257 -0.434379 40 -5.05732 0.101739 -0.434124 40 -5.05814 0.0461248 -0.434124 40 -5.0409 0.395184 -0.43387 40 -5.18828 0.862457 -0.433674 65 -5.05429 0.0302305 -0.433614 40 -5.23913 -0.38862 -0.432933 40 -5.03856 0.315502 -0.43285 40 -5.03953 0.299671 -0.43285 40 -5.18118 0.819444 -0.431959 62 -5.23042 -0.371505 -0.431708 40 -5.23013 -0.346731 -0.431463 40 -5.17393 0.801594 -0.430734 63 -5.17373 0.776594 -0.430243 61 -5.2193 -0.329608 -0.429993 40 -5.21635 -0.312991 -0.429503 64 -5.20873 -0.271545 -0.428278 65 -5.16083 0.741445 -0.428038 64 -5.15652 0.757355 -0.427793 63 -5.20343 -0.295883 -0.427788 65 -5.16602 0.643019 -0.427058 65 -5.37417 0.993896 -0.426887 20 -5.15332 0.723797 -0.426813 62 -5.15491 0.68276 -0.426323 69 -5.14881 0.698398 -0.425833 63 -5.18775 -0.254222 -0.425583 65 -5.17967 -0.213112 -0.424359 60 -5.1786 -0.237516 -0.424359 62 -5.13932 0.664183 -0.424118 64 -5.18164 -0.0665778 -0.424114 65 -5.14874 0.550571 -0.423627 69 -5.17436 -0.196642 -0.423624 62 -5.13257 0.622306 -0.422648 65 -5.13449 0.60618 -0.422648 64 -5.13729 0.581976 -0.422648 62 -5.13515 0.56538 -0.422157 68 -5.16359 -0.163808 -0.422154 67 -5.16232 -0.139429 -0.421909 67 -5.16106 -0.17997 -0.421909 64 -5.13711 0.508473 -0.421667 65 -5.16075 -0.123174 -0.421664 66 -5.13268 0.532461 -0.421422 65 -5.13671 0.492132 -0.421422 64 -5.15758 -0.0825949 -0.421174 68 -5.13251 0.451039 -0.420442 64 -5.13837 0.378438 -0.420442 61 -5.12835 0.475027 -0.420197 61 -5.1503 -0.00970144 -0.420195 75 -5.15006 -0.050151 -0.420195 65 -5.1492 -0.106774 -0.420194 70 -5.13129 0.418439 -0.419952 66 -5.13558 0.361993 -0.419951 59 -5.14832 0.00646644 -0.41995 85 -5.12797 0.434381 -0.419707 63 -5.14529 0.103453 -0.419705 66 -5.14629 0.0226218 -0.419705 40 -5.1423 -0.0258807 -0.419215 66 -5.14 0.0629364 -0.41897 67 -5.12331 0.393444 -0.418727 64 -5.13818 0.04676 -0.418725 40 -5.12283 0.344855 -0.418236 63 -5.12762 0.264346 -0.418236 64 -5.12644 0.24813 -0.417991 63 -5.12044 0.320441 -0.417746 62 -5.12142 0.304354 -0.417746 64 -5.12235 0.288263 -0.417746 63 -5.12907 0.119167 -0.417745 65 -5.12426 0.207679 -0.417501 62 -5.12786 0.0788407 -0.4175 62 -5.12125 0.231725 -0.417256 64 -5.12348 0.175401 -0.417256 66 -5.12203 0.159231 -0.417011 66 -5.11894 0.191327 -0.416766 67 -5.12074 0.135032 -0.416765 66 -5.35621 -0.459903 -0.41638 47 -5.28488 0.95211 -0.415688 20 -5.28588 0.935167 -0.415454 20 -5.2782 0.874153 -0.413354 20 -5.26758 0.889448 -0.412421 20 -5.26138 0.913929 -0.412188 20 -5.31808 -0.414378 -0.411481 20 -5.24955 0.82728 -0.409154 20 -5.29499 -0.429211 -0.408914 20 -5.28948 -0.370224 -0.407748 20 -5.28768 -0.395144 -0.407748 20 -5.22794 0.849229 -0.407054 20 -5.23942 0.775239 -0.407054 20 -5.22855 0.807263 -0.406354 20 -5.28084 -0.319577 -0.406348 20 -5.2232 0.789683 -0.405421 20 -5.26882 -0.35204 -0.405182 20 -5.22369 0.731142 -0.404487 20 -5.23142 0.673663 -0.404487 20 -5.22203 0.71421 -0.404021 20 -5.21547 0.746734 -0.403787 20 -5.25741 -0.276608 -0.403316 20 -5.25405 -0.334398 -0.403315 20 -5.2495 -0.234815 -0.402149 20 -5.24889 -0.201742 -0.401916 20 -5.24635 -0.259442 -0.401916 20 -5.20563 0.687091 -0.401687 20 -5.24264 -0.292279 -0.401682 20 -5.20787 0.654133 -0.401454 20 -5.20892 0.629355 -0.40122 20 -5.24086 -0.143694 -0.40075 20 -5.23787 -0.176543 -0.400516 20 -5.23632 -0.217675 -0.400516 20 -5.20488 0.595752 -0.400287 20 -5.20277 0.578976 -0.39982 20 -5.21078 0.480636 -0.399586 20 -5.22938 -0.126881 -0.39935 20 -5.19951 0.553851 -0.39912 20 -5.22594 -0.102139 -0.398884 20 -5.20133 0.49629 -0.398653 20 -5.22053 -0.159453 -0.398417 20 -5.22052 -0.0691927 -0.398184 20 -5.18324 0.609876 -0.397954 20 -5.20444 0.389566 -0.397953 20 -5.19643 0.462933 -0.39772 20 -5.21629 0.0865764 -0.397718 20 -5.21681 0.0456043 -0.397718 20 -5.21682 -0.0445374 -0.397717 20 -5.21631 -0.0855085 -0.397717 20 -5.18739 0.536152 -0.397487 20 -5.21304 0.14388 -0.397485 20 -5.19396 0.421653 -0.39702 20 -5.18312 0.519288 -0.396787 20 -5.18865 0.437654 -0.396553 20 -5.1913 0.405046 -0.396553 20 -5.20572 0.119171 -0.396551 20 -5.207 0.0292099 -0.396551 20 -5.20707 -0.0116862 -0.396551 20 -5.19346 0.347818 -0.396319 20 -5.20502 -0.0280255 -0.396317 20 -5.19923 0.20079 -0.396085 20 -5.19206 0.306804 -0.395852 20 -5.19389 0.274175 -0.395852 20 -5.19866 0.159899 -0.395852 20 -5.20075 0.0618837 -0.395851 20 -5.1939 0.233296 -0.395619 20 -5.19615 0.176172 -0.395618 20 -5.19115 0.249526 -0.395386 20 -5.18045 0.363358 -0.394919 20 -5.18308 0.289987 -0.394686 20 -5.18919 0.0128952 -0.394451 20 -5.17674 0.21632 -0.393519 20 -5.18024 0.102435 -0.393518 20 -5.16875 0.329984 -0.393286 20 -6.94067 -0.34656 -0.391438 58 -5.7492 -0.484376 -0.38808 56 -8.80097 0.468327 -0.387004 57 -5.97415 1.08297 -0.386981 40 -8.78643 0.398428 -0.385784 86 -8.7833 0.329201 -0.385377 81 -8.77317 0.425485 -0.384971 87 -8.77831 0.30142 -0.384971 44 -8.77922 0.273838 -0.38497 58 -8.7811 0.204881 -0.38497 83 -8.77169 0.370196 -0.3847 86 -8.77642 0.232373 -0.384699 84 -6.83009 -0.362964 -0.381909 40 -6.80437 -0.318842 -0.379483 63 -6.21834 1.1312 -0.376659 40 -6.7716 -0.0725832 -0.37602 90 -6.76935 -0.0938368 -0.375846 100 -6.75844 -0.146822 -0.37498 118 -6.75794 -0.168052 -0.37498 118 -6.75406 0.00180384 -0.374461 64 -6.75308 -0.114892 -0.37446 110 -6.75141 -0.189138 -0.37446 100 -6.74845 -0.220893 -0.374286 119 -5.54529 1.00877 -0.374176 40 -6.74805 -0.0194208 -0.373941 69 -6.74589 -0.0512121 -0.373767 87 -6.74096 -0.263079 -0.373766 89 -6.74406 0.0229503 -0.373595 71 -6.72582 -0.241391 -0.37238 115 -6.71973 -0.294049 -0.372033 121 -5.55696 0.787049 -0.371683 40 -5.54089 0.75825 -0.369607 40 -5.51387 0.834196 -0.367947 72 -5.48767 0.98078 -0.36774 59 -5.56908 -0.248686 -0.367734 40 -5.48831 0.954245 -0.367324 65 -5.51056 0.816023 -0.367324 40 -5.48343 0.935698 -0.366494 74 -5.51365 0.737022 -0.366493 40 -5.56085 -0.14331 -0.366489 40 -5.55894 -0.204446 -0.366488 40 -5.5531 -0.326633 -0.366488 76 -5.48946 0.874741 -0.366078 48 -5.50128 0.797052 -0.366078 40 -5.55557 -0.186827 -0.366073 40 -5.48825 0.856897 -0.365663 84 -5.55332 -0.125622 -0.365658 40 -5.54615 -0.308705 -0.365657 65 -5.53602 -0.404177 -0.365242 40 -5.53473 -0.421568 -0.365242 40 -5.50545 0.692025 -0.365039 40 -5.54772 -0.108032 -0.365035 40 -5.54038 -0.22111 -0.36462 40 -5.53847 -0.264617 -0.36462 40 -5.5422 -0.0817705 -0.364413 40 -5.53364 -0.281794 -0.364204 54 -5.53651 -0.159978 -0.363997 40 -5.45886 0.913997 -0.363587 77 -5.4631 0.888263 -0.363587 40 -5.48831 0.716224 -0.363586 40 -5.52467 0.335491 -0.363584 40 -5.52886 0.0140275 -0.36296 40 -5.52884 -0.0207106 -0.362959 40 -5.51919 0.291708 -0.362753 40 -5.51522 -0.359023 -0.362751 40 -5.52453 -0.064068 -0.362544 40 -5.51378 0.317504 -0.362338 40 -5.52291 -0.00330923 -0.362337 40 -5.50949 -0.384714 -0.362335 40 -5.51744 0.196121 -0.36213 40 -5.52078 0.0400621 -0.362129 40 -7.03391 0.210224 -0.362053 69 -5.51483 0.15269 -0.361715 40 -5.51675 -0.0466069 -0.361714 40 -5.51329 0.135326 -0.361507 40 -5.51369 0.118003 -0.361507 40 -5.50616 0.273743 -0.3613 40 -5.49424 0.42915 -0.361093 40 -5.50044 -0.340636 -0.36109 40 -5.4832 0.532449 -0.360886 40 -5.50869 0.0573383 -0.360884 40 -7.01524 0.286959 -0.360752 49 -5.48819 0.454727 -0.360678 40 -7.01411 0.264849 -0.360589 60 -5.50212 0.178346 -0.360469 40 -5.50225 0.0918781 -0.360261 40 -5.47928 0.488699 -0.360055 52 -5.47881 0.471321 -0.359847 68 -5.48167 0.410912 -0.359639 40 -5.48586 0.350615 -0.359639 40 -5.47097 0.513983 -0.359432 40 -5.48095 0.393555 -0.359432 40 -5.45238 0.650854 -0.359018 40 -5.46367 0.547969 -0.359017 40 -5.48697 0.212441 -0.359016 40 -5.49058 0.0744862 -0.359015 40 -6.98887 0.340969 -0.358799 40 -6.99337 0.23115 -0.358798 135 -5.44438 0.667282 -0.358395 40 -6.9818 0.362636 -0.358311 40 -5.76168 -0.471423 -0.358224 40 -5.45311 0.572917 -0.358187 40 -6.98044 0.307629 -0.357985 40 -5.4455 0.624067 -0.35798 80 -5.47597 0.237912 -0.357978 40 -5.43952 0.606113 -0.357149 79 -5.44139 0.589021 -0.357149 79 -5.46032 0.374939 -0.357148 40 -5.46725 0.25478 -0.357147 40 -6.95308 -0.338334 -0.355865 40 -6.93151 -0.36996 -0.354238 40 -5.6401 0.911416 -0.351536 40 -5.63901 0.893052 -0.351142 40 -6.48487 0.0516295 -0.35107 41 -6.83549 0.90795 -0.350503 43 -5.63393 0.874075 -0.350354 40 -6.88442 -0.313058 -0.350169 40 -5.62005 0.935299 -0.34996 40 -5.60315 0.986806 -0.349173 40 -5.59251 0.966762 -0.347795 40 -5.61045 0.843249 -0.347597 40 -6.78422 0.944729 -0.34676 40 -5.58179 0.946796 -0.346416 40 -5.60185 0.805933 -0.346218 40 -5.59733 0.823231 -0.346021 40 -5.63841 -0.355087 -0.345228 40 -5.59618 0.760251 -0.345037 40 -5.59657 0.742394 -0.34484 40 -5.58983 0.777261 -0.344643 40 -5.62092 -0.433896 -0.344046 40 -6.80344 0.375468 -0.343827 40 -6.80977 -0.234372 -0.343823 83 -6.80297 -0.384056 -0.343822 40 -6.81081 -0.116636 -0.343661 86 -6.80313 -0.191325 -0.343172 88 -5.61482 -0.380276 -0.343062 40 -6.79798 -0.159102 -0.342684 84 -6.79756 -0.0629579 -0.342522 86 -5.57521 0.721634 -0.342476 40 -5.57855 0.695353 -0.342476 40 -5.60764 -0.397518 -0.342471 40 -6.79585 0.0117919 -0.34236 83 -5.58388 0.63374 -0.342279 40 -5.60969 -0.335727 -0.342274 40 -6.79383 -0.0202205 -0.342197 85 -6.79055 -0.212278 -0.342195 87 -6.79135 -0.0842177 -0.342034 82 -6.78767 0.0544566 -0.341709 80 -6.7827 -0.265347 -0.341707 84 -6.78534 0.0864238 -0.341546 82 -6.78576 -0.0414848 -0.341546 86 -6.7845 -0.13741 -0.341545 84 -6.78105 0.107692 -0.341221 75 -6.77586 -0.286379 -0.341219 71 -5.56688 0.676081 -0.341098 40 -5.567 0.658346 -0.340901 40 -6.77784 0.0331215 -0.340895 80 -5.5885 -0.413893 -0.340699 40 -5.54811 0.514954 -0.337552 40 -5.54103 0.567009 -0.337356 40 -5.54449 0.532183 -0.337356 40 -5.54651 0.488437 -0.337158 40 -5.55591 0.366354 -0.337158 40 -5.56141 0.270306 -0.337157 40 -5.56337 0.226618 -0.337157 40 -5.53883 0.549187 -0.336962 40 -5.54406 0.470653 -0.336765 40 -5.56203 0.147823 -0.336763 40 -5.55627 0.252533 -0.336567 40 -5.56048 0.130293 -0.336566 40 -5.56086 0.112823 -0.336566 40 -5.54909 0.348362 -0.33637 40 -5.5561 0.208803 -0.336369 40 -5.54294 0.409199 -0.336174 40 -5.54817 0.330799 -0.336173 40 -5.55735 0.0865381 -0.336172 40 -5.53825 0.391335 -0.335583 40 -5.55163 0.068975 -0.335581 40 -5.55182 0.0515348 -0.335581 40 -6.65572 0.852877 -0.335367 40 -5.54067 0.286653 -0.335188 40 -5.54608 0.00789333 -0.33499 40 -5.52568 0.451521 -0.334795 40 -5.54404 0.0252973 -0.334793 40 -5.77851 1.03433 -0.334649 40 -8.75449 0.373656 -0.334513 81 -8.75859 0.181012 -0.334387 55 -5.52733 0.312032 -0.334007 40 -5.5337 0.164339 -0.334006 40 -8.74166 0.345558 -0.333643 85 -5.51584 0.424505 -0.333614 40 -8.73732 0.400379 -0.333519 78 -8.74071 0.318014 -0.333518 46 -8.73191 0.468876 -0.333395 83 -8.74011 0.276755 -0.333394 67 -5.5249 0.190103 -0.333219 40 -8.72641 0.496068 -0.333147 79 -8.73695 0.249167 -0.333145 79 -8.72537 0.441017 -0.332898 79 -8.72971 0.221493 -0.332648 85 -5.81062 -0.569772 -0.331666 55 -6.64636 0.398818 -0.331133 133 -6.62518 0.418517 -0.329505 83 -6.58119 0.822623 -0.32902 40 -5.78121 -0.520929 -0.328506 71 -5.77558 -0.5387 -0.328134 40 -6.58661 0.457788 -0.326576 108 -6.58603 0.436968 -0.326413 98 -5.75506 -0.500225 -0.325904 57 -6.12377 0.890647 -0.32526 40 -7.83839 -0.381057 -0.321417 40 -5.68395 -0.466735 -0.319027 40 -5.63328 0.863611 -0.318662 40 -5.62436 0.907519 -0.318476 40 -5.62414 0.844191 -0.317546 40 -5.62214 0.816845 -0.316988 40 -5.60182 0.92204 -0.316617 40 -5.60692 0.877718 -0.316431 40 -5.61876 0.798365 -0.316431 40 -5.58741 0.982908 -0.316246 40 -5.61532 0.779916 -0.315873 40 -5.62025 0.610356 -0.314385 40 -5.62575 0.55736 -0.314385 40 -5.62832 0.530842 -0.314384 40 -6.06232 0.0656175 -0.314339 47 -5.93303 1.23732 -0.314173 47 -5.62001 0.574643 -0.314013 40 -5.60741 0.635757 -0.313456 40 -5.62004 0.512301 -0.313455 40 -5.6307 -0.346501 -0.313265 40 -5.58813 0.758391 -0.313085 40 -5.60827 0.5913 -0.313084 40 -5.55513 0.959411 -0.3129 40 -5.63139 -0.00107777 -0.312337 40 -5.91544 1.21418 -0.312267 75 -5.58403 0.713262 -0.312155 40 -5.60574 0.493319 -0.311968 40 -5.6253 -0.0363949 -0.311779 40 -5.60883 0.404939 -0.311596 40 -5.62317 -0.0540389 -0.311593 40 -5.5419 0.930337 -0.311227 57 -5.56793 0.729056 -0.310854 40 -5.59891 0.430792 -0.310852 40 -5.59411 0.465805 -0.310666 40 -5.89971 1.19156 -0.310534 85 -5.56449 0.693109 -0.31011 40 -5.5677 0.66688 -0.31011 40 -5.60547 -0.0185637 -0.30992 40 -5.56581 0.648943 -0.309738 40 -5.5902 0.386036 -0.309737 40 -5.60345 0.0254632 -0.309735 40 -5.60294 -0.0801579 -0.309734 40 -5.5894 0.368351 -0.309551 40 -5.89159 1.16099 -0.309321 90 -5.57966 0.44703 -0.309179 40 -5.5786 -0.316668 -0.308246 40 -5.57614 0.288456 -0.307877 40 -5.58076 -0.0972775 -0.30769 40 -5.57162 -0.298676 -0.307503 40 -5.568 -0.35992 -0.307502 40 -5.87726 1.11975 -0.307415 84 -5.87175 1.13782 -0.307242 80 -7.5792 0.946995 -0.307197 48 -7.04899 0.211078 -0.306782 40 -5.56071 0.349056 -0.306762 40 -5.56251 -0.114356 -0.306017 40 -5.54449 -0.437106 -0.305829 49 -5.55539 -0.219005 -0.305644 40 -5.54698 -0.375971 -0.305644 40 -5.55437 -0.192744 -0.305459 40 -5.54187 -0.419367 -0.305458 40 -5.85898 1.08758 -0.305335 88 -5.92188 -0.664676 -0.305326 103 -5.86041 1.0688 -0.305162 100 -5.91997 -0.645654 -0.304979 73 -5.53782 -0.392795 -0.3049 40 -5.91999 -0.626851 -0.304806 84 -5.54473 -0.235987 -0.304715 40 -5.53799 -0.253105 -0.304157 40 -5.54162 0.0428777 -0.303973 40 -7.00843 0.231757 -0.303848 40 -5.53282 0.181957 -0.303416 64 -5.53249 0.121076 -0.303229 93 -5.52679 -0.278651 -0.303228 40 -5.83826 1.0457 -0.302909 122 -5.51576 0.259565 -0.302115 40 -5.51743 0.164175 -0.301928 126 -5.51891 0.1035 -0.301928 116 -5.5086 0.319985 -0.301743 40 -5.51515 -0.173853 -0.301741 40 -5.51394 0.146754 -0.301557 109 -5.51522 0.0861174 -0.301556 112 -5.51557 0.060127 -0.301556 181 -5.51367 -0.156459 -0.301555 40 -5.88123 -0.594921 -0.301168 89 -5.88109 -0.576254 -0.300994 92 -5.50219 -0.13878 -0.30044 40 -5.49367 0.301877 -0.300256 40 -5.85906 -0.555624 -0.298915 85 -5.47676 0.240675 -0.298397 40 -5.84338 -0.507953 -0.297183 145 -5.84322 -0.461746 -0.296837 47 -5.83779 -0.525968 -0.296836 77 -5.74879 0.917716 -0.293379 40 -5.75165 0.899651 -0.293379 40 -5.75248 0.881268 -0.293206 40 -5.79488 0.353341 -0.291989 40 -5.75864 0.688613 -0.291472 40 -5.77802 0.397821 -0.290777 40 -5.76069 0.578908 -0.290605 40 -5.78005 0.334141 -0.290603 40 -5.78051 0.288627 -0.29043 40 -5.72831 0.813053 -0.29026 40 -5.74261 0.704939 -0.290259 40 -5.75002 0.641756 -0.290259 40 -5.72112 0.848727 -0.290087 40 -6.82312 0.149851 -0.290058 40 -6.7649 0.886782 -0.289915 40 -5.70315 0.937823 -0.289741 45 -5.741 0.668125 -0.289739 40 -5.76591 0.369633 -0.289564 40 -5.74211 0.622568 -0.289392 40 -5.76715 0.315158 -0.28939 40 -5.75197 0.477725 -0.289045 40 -5.71629 0.783813 -0.288873 40 -5.74606 0.522697 -0.288872 40 -5.74958 0.43206 -0.288525 40 -5.67837 0.988725 -0.288355 69 -5.73215 0.603222 -0.288352 40 -6.78539 0.394482 -0.288005 40 -5.73853 0.494712 -0.288005 40 -5.74495 0.41354 -0.288005 40 -5.73076 0.557577 -0.287832 40 -5.73756 0.458311 -0.287659 40 -6.72904 0.914233 -0.287568 40 -5.67163 0.969159 -0.287488 62 -6.78883 -0.0216841 -0.287416 40 -5.72654 0.538984 -0.287312 40 -6.78498 -0.160261 -0.287269 40 -6.78419 -0.0962859 -0.287123 40 -6.78152 -0.213489 -0.287122 40 -6.77876 -0.288042 -0.287122 40 -6.02136 1.08381 -0.287033 40 -6.78281 0.0315829 -0.286977 40 -6.78258 -0.0643058 -0.286976 40 -6.78186 -0.117573 -0.286976 40 -6.77637 0.0847572 -0.286537 40 -6.77284 -0.234548 -0.286535 40 -5.98246 1.24261 -0.286383 40 -8.80482 0.62658 -0.286281 73 -8.80859 0.571245 -0.28628 77 -5.68912 0.761751 -0.286274 40 -6.77277 -0.0429721 -0.286243 40 -6.7662 -0.191794 -0.285949 40 -6.76573 0.127107 -0.285803 40 -6.76169 -0.266107 -0.285802 40 -8.79679 0.598265 -0.285718 80 -8.80436 0.473849 -0.285717 83 -6.76492 0.0101792 -0.285656 40 -5.65305 0.947614 -0.285582 84 -5.68359 0.742807 -0.285581 40 -5.97847 1.21247 -0.285569 40 -6.76273 0.0526614 -0.28551 40 -8.80382 0.404515 -0.285492 85 -8.79523 0.528818 -0.285381 81 -8.79486 0.501076 -0.285268 82 -8.79852 0.431987 -0.285268 80 -8.80722 0.183075 -0.285266 92 -6.75812 0.105696 -0.285217 40 -8.79907 0.376616 -0.285155 84 -8.80021 0.348972 -0.285155 84 -6.75553 -0.138446 -0.285069 40 -8.80176 0.15532 -0.284928 90 -8.79699 -0.328576 -0.284925 40 -5.71307 -0.352869 -0.284882 42 -5.67602 0.723641 -0.284715 40 -6.73768 0.423397 -0.284631 40 -8.79462 0.210492 -0.284591 84 -8.78978 0.307114 -0.28448 88 -8.78355 0.251677 -0.28403 59 -8.77872 0.279155 -0.283805 49 -8.78242 0.11364 -0.283804 52 -8.76876 0.0859525 -0.283017 47 -5.69027 -0.333627 -0.282803 40 -5.95269 1.16849 -0.282802 40 -5.93725 1.1849 -0.281826 40 -5.67234 -0.395269 -0.28159 50 -5.6776 0.0776449 -0.280899 60 -5.64987 -0.429481 -0.279857 40 -8.69218 -0.351701 -0.279079 40 -5.98452 -0.656716 -0.279048 40 -8.68106 -0.378544 -0.278517 40 -6.61786 0.792988 -0.278325 40 -5.6333 -0.410509 -0.278298 41 -5.64067 0.201109 -0.277954 148 -5.63237 -0.366012 -0.277951 63 -5.89739 1.12907 -0.277757 40 -6.60416 0.822895 -0.277592 40 -5.95958 -0.682323 -0.277258 40 -5.89508 1.04254 -0.276291 40 -5.62011 0.217965 -0.276222 91 -5.62136 0.18265 -0.276222 154 -5.61665 0.138318 -0.275701 146 -6.61295 0.435945 -0.275536 40 -5.6142 0.155898 -0.275528 160 -5.93702 -0.632419 -0.274979 40 -5.937 -0.61355 -0.274817 40 -5.60511 0.120361 -0.274662 140 -5.59749 0.102567 -0.273969 169 -6.58029 0.527213 -0.27363 68 -6.56955 0.484775 -0.272602 88 -6.56601 0.505251 -0.272456 116 -6.56778 0.453521 -0.272309 99 -5.90519 -0.591372 -0.27205 40 -5.90593 -0.563339 -0.271888 40 -6.53799 0.554687 -0.270696 48 -5.88188 -0.542291 -0.269772 40 -5.85775 -0.521397 -0.267656 66 -5.7704 0.955787 -0.265061 40 -7.56473 0.954122 -0.263672 40 -5.75659 0.916466 -0.263433 40 -5.74974 0.933926 -0.263108 40 -5.7324 0.977422 -0.262294 40 -6.9152 0.417138 -0.258955 149 -6.858 0.892205 -0.258145 61 -5.74338 -0.338289 -0.257242 40 -5.71944 -0.399938 -0.255614 40 -5.67973 -0.423895 -0.252522 40 -6.77205 0.902985 -0.252454 50 -6.74874 0.99721 -0.251777 60 -6.80629 0.432437 -0.251638 80 -6.81525 -0.102834 -0.251365 97 -6.81377 -0.059987 -0.251229 90 -6.80091 0.389239 -0.251096 79 -6.81094 0.121937 -0.251095 84 -6.8109 -0.124157 -0.251093 98 -6.80811 -0.231123 -0.251093 84 -6.8097 0.0684279 -0.250959 89 -6.80825 -0.156197 -0.250958 80 -6.80573 -0.177528 -0.250822 85 -6.80599 -0.027813 -0.250687 82 -6.80404 0.0149529 -0.250552 95 -6.8019 0.0470094 -0.250417 97 -6.80157 -0.0812028 -0.250416 91 -6.79916 -0.198709 -0.250416 84 -6.79656 -0.273456 -0.250415 103 -6.79947 0.0897261 -0.250282 102 -6.79807 -0.0063945 -0.250146 88 -6.7914 -0.251858 -0.250009 91 -6.78523 -0.304993 -0.249738 74 -6.73855 0.801911 -0.249337 85 -5.64998 0.138456 -0.248944 70 -5.6426 0.111707 -0.248293 94 -6.71327 0.777631 -0.24744 78 -5.62959 0.155745 -0.247317 91 -6.67477 0.965161 -0.246493 40 -6.66987 0.943101 -0.245951 40 -6.69466 0.45745 -0.244186 91 -6.67129 0.476998 -0.242696 116 -8.03704 -0.386487 -0.24232 40 -6.62956 0.73663 -0.241478 110 -6.64399 0.569634 -0.241341 95 -6.63183 0.547663 -0.240393 108 -6.63152 0.526675 -0.240257 109 -6.62 0.494436 -0.239308 95 -6.59039 0.690559 -0.238496 79 -6.60042 0.586956 -0.238496 70 -8.84844 -0.30402 -0.238225 169 -7.14858 0.980192 -0.238193 40 -6.57231 0.709609 -0.237412 111 -6.57768 0.657969 -0.237412 74 -6.5777 0.616272 -0.237141 127 -6.56978 0.636378 -0.236734 97 -7.89077 0.939408 -0.236708 40 -8.76852 0.581006 -0.234893 78 -8.77 0.525776 -0.234791 79 -8.76631 0.553194 -0.23469 79 -8.76927 0.429006 -0.234487 82 -8.7644 0.483979 -0.234386 82 -8.76588 0.456442 -0.234386 80 -8.74766 0.676267 -0.234185 53 -8.76321 0.387299 -0.234082 81 -8.74151 0.703411 -0.233983 50 -8.76382 0.263247 -0.233878 65 -8.74377 0.6207 -0.23378 109 -8.73978 0.648011 -0.233679 65 -8.75749 0.331906 -0.233676 83 -8.75931 0.208017 -0.233574 87 -8.76067 0.139216 -0.233574 87 -8.72815 0.743719 -0.233477 53 -8.75819 0.166694 -0.233473 86 -8.75907 0.111661 -0.233473 85 -8.75762 -0.0534481 -0.23337 81 -8.75262 0.235353 -0.233271 84 -8.75233 -0.245958 -0.233268 72 -8.74443 0.358888 -0.23307 85 -8.75178 -0.0121862 -0.233067 58 -8.74969 0.0427858 -0.232966 72 -8.74551 0.07023 -0.232764 77 -8.73941 -0.204424 -0.23256 59 -8.73943 -0.0808462 -0.232459 79 -8.73254 0.303411 -0.232361 99 -8.73653 -0.149454 -0.232358 68 -8.7358 0.0152313 -0.232258 134 -8.73202 -0.176831 -0.232155 119 -8.62785 -0.324227 -0.227095 74 -7.71527 0.943676 -0.226928 40 -7.63147 0.970217 -0.222432 40 -6.37568 -0.345262 -0.222095 40 -6.93529 -0.38537 -0.221406 40 -6.30309 -0.390718 -0.217353 40 -6.79325 0.799972 -0.214825 85 -6.78009 0.874093 -0.214577 40 -6.80713 0.51013 -0.213953 95 -6.80237 0.434579 -0.213332 97 -6.79676 0.48784 -0.213208 97 -6.76798 0.77534 -0.213085 70 -6.795 0.455523 -0.212959 92 -6.79573 0.412692 -0.212834 94 -6.77963 0.529394 -0.212338 87 -6.79226 0.0171513 -0.211838 87 -6.79228 -0.00418756 -0.211838 101 -6.79183 -0.0788712 -0.211837 80 -6.791 -0.132209 -0.211837 85 -6.78845 -0.228199 -0.211836 91 -6.78735 0.113089 -0.21159 79 -6.78818 0.0384522 -0.211589 89 -6.78805 -0.0575132 -0.211589 80 -6.78739 -0.110824 -0.211588 85 -6.78371 -0.249393 -0.211588 90 -6.7225 0.898687 -0.211222 40 -6.78057 -0.153356 -0.211215 87 -6.77994 0.070328 -0.211092 93 -6.77822 -0.036174 -0.210967 65 -6.77517 -0.206501 -0.210966 90 -6.7032 0.99273 -0.210849 62 -6.7757 0.0915569 -0.210844 91 -6.77008 -0.174439 -0.210594 90 -6.75453 -0.280306 -0.209847 54 -7.36978 0.984919 -0.20793 40 -6.70519 -0.352327 -0.206988 40 -6.63769 0.929527 -0.20625 51 -5.99507 1.22847 -0.204082 40 -6.64468 0.53935 -0.204011 116 -6.62814 0.569406 -0.203141 92 -6.6271 -0.390286 -0.202265 40 -5.95379 1.19101 -0.20083 40 -6.58458 0.586344 -0.200531 59 -5.93987 1.16891 -0.19961 40 -5.92782 1.14728 -0.198526 40 -6.53303 0.602249 -0.197424 114 -6.51424 0.631425 -0.196429 81 -5.90327 1.09465 -0.196222 48 -5.89412 1.12173 -0.195951 40 -5.96142 -0.6039 -0.195401 40 -6.48681 0.721395 -0.195311 85 -6.47913 0.699899 -0.19469 100 -5.94661 -0.630672 -0.194588 40 -6.47838 0.668936 -0.194441 112 -6.47648 0.648165 -0.194192 110 -5.92737 -0.562683 -0.192827 40 -5.91366 -0.580082 -0.192013 40 -5.91605 -0.53343 -0.191878 40 -5.91174 -0.514298 -0.191472 40 -8.85709 -0.309704 -0.188359 31 -5.78892 0.924237 -0.186601 40 -8.79587 0.508453 -0.186031 78 -8.77964 0.576769 -0.185493 94 -8.79607 0.0934389 -0.1854 82 -5.76825 0.939611 -0.185381 40 -8.76782 0.603692 -0.185045 74 -8.76546 0.548233 -0.184775 99 -8.77877 0.258844 -0.184773 92 -8.77954 0.231263 -0.184772 80 -8.76896 0.451723 -0.184684 70 -8.77709 0.162241 -0.184592 79 -8.77634 0.065714 -0.184502 113 -8.77651 0.0381437 -0.184502 71 -8.76793 0.286124 -0.184324 59 -8.75752 0.478756 -0.184236 110 -8.76855 0.189665 -0.184234 106 -8.75758 0.13442 -0.183694 110 -5.73224 0.961642 -0.183213 40 -5.74247 0.898556 -0.183213 40 -7.70051 0.983527 -0.182991 40 -7.69762 0.958567 -0.182687 40 -8.68785 -0.344293 -0.180818 30 -8.68473 -0.371492 -0.180728 30 -8.67155 -0.398189 -0.18019 30 -5.75258 -0.399706 -0.18009 58 -6.91629 0.574258 -0.180049 40 -6.92925 -0.198802 -0.179594 40 -6.92859 -0.22057 -0.179594 40 -6.90781 0.529918 -0.179374 40 -6.92804 0.0298349 -0.179371 61 -5.73848 -0.37149 -0.179006 40 -6.89815 0.551013 -0.178924 40 -6.92012 -0.00277776 -0.178921 70 -6.91263 -0.143931 -0.178583 58 -6.9114 -0.10046 -0.178471 61 -5.72875 -0.334675 -0.178193 40 -6.9037 -0.0786266 -0.178021 87 -6.9 -0.04605 -0.177797 86 -6.89908 -0.121915 -0.177796 93 -6.89811 -0.0243595 -0.177684 115 -6.89391 -0.175979 -0.177571 55 -6.89197 0.0514673 -0.177348 60 -6.795 0.986279 -0.175892 40 -6.79836 0.888866 -0.175329 40 -6.76544 0.938761 -0.173868 40 -6.77056 -0.36414 -0.17105 40 -6.71369 -0.413781 -0.168015 40 -6.6836 0.576956 -0.167009 40 -6.63704 0.604632 -0.164536 40 -6.56855 0.744567 -0.161501 61 -6.56801 0.713189 -0.161276 98 -6.56551 0.619191 -0.160601 76 -6.55631 0.691142 -0.160489 93 -6.55558 0.63907 -0.160152 108 -6.5505 0.66976 -0.16004 103 -5.79748 0.920327 -0.154421 40 -5.79063 0.937882 -0.154173 40 -5.75223 0.950055 -0.151936 40 -5.74925 -0.38736 -0.147703 40 -7.90378 0.922395 -0.147702 55 -7.76961 0.882459 -0.141508 125 -6.93353 -0.0912981 -0.140994 74 -7.72373 0.963501 -0.139892 27 -5.48812 0.931831 -0.135529 40 -6.74398 0.933599 -0.134626 40 -6.74971 0.891206 -0.134626 83 -5.50825 -0.268061 -0.132292 40 -6.62977 0.970501 -0.129163 115 -8.76567 0.338695 -0.128817 32 -8.76559 0.214633 -0.128662 32 -8.75252 0.489743 -0.128587 32 -8.74613 0.530729 -0.128433 32 -8.75807 0.269501 -0.128431 32 -8.75851 0.173142 -0.128354 32 -6.6109 0.988898 -0.128354 42 -8.73578 0.626568 -0.12828 91 -8.74404 0.461689 -0.128202 32 -8.74545 0.434214 -0.128201 32 -8.7459 0.0766644 -0.127814 32 -8.74128 -0.294218 -0.127812 32 -8.73873 0.310079 -0.127738 32 -8.74303 0.145312 -0.127737 32 -8.72069 0.584138 -0.127586 114 -8.7369 0.241314 -0.127584 32 -8.73944 0.117781 -0.127583 32 -8.7185 0.556471 -0.127432 60 -8.72234 -0.321071 -0.127118 32 -8.72218 -0.266207 -0.127041 58 -5.91165 0.975524 -0.126654 40 -5.89742 0.925751 -0.125417 40 -5.89053 0.94366 -0.125193 40 -6.56968 0.594951 -0.123899 189 -6.51364 0.713714 -0.121674 76 -6.52308 0.62156 -0.121673 106 -6.50343 0.733245 -0.121269 113 -6.51582 0.569221 -0.121066 55 -5.87245 -0.395729 -0.120689 40 -6.50122 0.640014 -0.120661 120 -6.48805 0.69018 -0.120257 112 -6.48925 0.659387 -0.120156 147 -8.45722 0.967699 -0.118805 38 -6.88795 0.884051 -0.102188 23 -6.87812 0.555229 -0.10021 81 -6.87784 0.533473 -0.10012 67 -6.87188 -0.0940326 -0.0989492 60 -6.86716 -0.137113 -0.0987694 78 -6.84161 0.50919 -0.0984145 62 -6.85046 -0.169017 -0.098051 72 -6.84853 0.0139583 -0.0978726 94 -6.84843 -0.0398299 -0.0978722 48 -6.84758 -0.115127 -0.0978718 109 -6.83853 -0.0182481 -0.0974235 92 -6.83828 -0.0612159 -0.0974233 65 -6.83392 -0.190033 -0.0973327 112 -7.89065 0.926248 -0.0969234 29 -6.71838 0.916596 -0.0948265 48 -6.68676 0.955216 -0.0936597 22 -6.67191 0.931785 -0.0928516 47 -6.68436 -0.406289 -0.0910475 22 -5.87368 0.894569 -0.0907139 61 -5.83785 0.917141 -0.0890951 40 -5.89958 -0.341372 -0.089088 61 -5.83297 0.935151 -0.0889941 110 -7.62638 0.979505 -0.0870616 27 -6.56447 0.728761 -0.0869252 72 -5.85818 -0.293026 -0.0868623 92 -5.85162 -0.403392 -0.0868618 43 -5.84876 -0.320228 -0.0864575 121 -6.56099 0.582717 -0.0861162 22 -5.83751 -0.374858 -0.0860525 104 -6.55315 0.602799 -0.0858471 22 -5.82116 -0.273013 -0.08494 76 -6.52211 0.693143 -0.0848602 82 -6.52435 0.651959 -0.0847702 98 -6.51829 0.672059 -0.0845907 86 -6.50546 0.619213 -0.0837824 133 -6.42904 0.950332 -0.0821689 21 -8.74197 -0.292974 -0.0732194 43 -8.72052 -0.333343 -0.0725743 46 -8.59119 0.944315 -0.0698748 40 -6.09675 0.235644 -0.0642995 20 -5.95862 0.920988 -0.0610721 19 -5.9478 0.938492 -0.0607132 19 -5.9614 0.268506 -0.0582851 78 -5.95622 0.24955 -0.0580157 83 -5.95254 0.286882 -0.0579261 106 -5.88648 -0.391829 -0.0552293 28 -5.88745 -0.308347 -0.0550502 93 -5.88645 -0.32684 -0.0550501 44 -6.81502 0.58003 -0.0543137 24 -6.80772 0.547069 -0.0539282 24 -6.8094 0.525681 -0.0539281 24 -6.81115 -0.0851377 -0.0532314 24 -6.74251 0.895276 -0.0528517 24 -6.79956 -0.0423112 -0.0527693 24 -6.79939 -0.0636743 -0.0527692 24 -6.79368 0.0110605 -0.0525384 24 -6.78982 -0.159631 -0.0524605 24 -6.78869 -0.116939 -0.0523837 24 -6.78769 -0.0102967 -0.0523072 24 -6.78629 -0.138233 -0.0523065 24 -6.77763 0.0322662 -0.0519222 24 -6.76501 -0.191038 -0.0515358 36 -6.69323 0.931394 -0.0511568 23 -7.8655 0.904279 -0.0464683 162 -6.49992 0.665345 -0.0425258 23 -6.49204 0.643895 -0.0421405 22 -6.4806 0.714787 -0.0419868 59 -6.46999 0.682715 -0.0414472 46 -7.65271 0.965859 -0.0398918 40 -8.73039 -0.284837 -0.028212 50 -8.51556 0.956381 -0.0237228 40 -5.92516 -0.291713 -0.0193299 20 -5.91207 -0.272514 -0.0187906 20 -5.90576 -0.318741 -0.0186363 20 -6.84081 0.562087 -0.0124851 81 -6.82859 0.539545 -0.0120336 65 -6.82025 0.614422 -0.0119696 70 -6.82307 0.582276 -0.0119694 97 -6.82071 -0.126368 -0.0111272 59 -6.80952 -0.179632 -0.0108045 67 -6.79407 -0.157807 -0.0102888 123 -6.73534 0.874713 -0.0101658 40 -6.73058 0.895614 -0.0101015 40 -6.77895 -0.200025 -0.00983722 45 -6.70647 0.924665 -0.00945685 41 -6.72337 0.701978 -0.00913304 40 -6.55104 0.924814 -0.00449186 40 -6.56439 0.665166 -0.00390991 40 -6.56347 0.633855 -0.00378078 40 -7.66157 0.943286 -0.000691363 40 -7.65658 0.967092 -0.000637351 40 -6.08291 0.880091 0.0106613 40 -6.00462 0.917277 0.0129824 40 -5.99701 0.887266 0.0133695 40 -5.97997 0.93284 0.0136916 40 -6.01348 -0.325934 0.0146652 40 -5.99991 -0.353509 0.0150522 40 -5.97882 -0.371033 0.0156971 40 -5.96766 -0.38912 0.0160195 55 -5.96857 -0.304498 0.0161481 95 -5.9675 -0.285641 0.0162126 91 -5.95281 -0.256758 0.0167283 57 -6.8475 -0.175197 0.0228889 40 -6.79553 -0.0566161 0.0243514 77 -6.79376 -0.00324964 0.0244053 66 -6.78932 -0.077919 0.024514 75 -6.78649 -0.131208 0.0245685 74 -6.78504 -0.099205 0.0246225 75 -6.78405 -0.152489 0.0246228 56 -6.72382 0.899808 0.0246706 40 -6.78172 -0.024594 0.0247305 75 -6.76975 0.0179382 0.0250554 90 -6.62198 0.906979 0.0273802 40 -6.59733 0.924639 0.0279762 40 -5.27407 0.264617 0.0385844 176 -6.08865 0.88061 0.0417954 40 -5.15109 0.315855 0.042453 255 -6.03756 0.911789 0.0430416 40 -6.02261 0.890112 0.0435295 40 -6.06607 -0.310839 0.0439153 40 -5.99174 0.933589 0.0441795 40 -6.04457 -0.338389 0.0444573 40 -6.0355 -0.356939 0.0446742 40 -5.98113 -0.288018 0.0462454 102 -5.97247 -0.37231 0.0463542 40 -5.96403 -0.268496 0.046733 100 -5.96323 -0.240315 0.0467871 63 -4.81311 0.36518 0.053221 45 -4.81158 0.266427 0.0534792 50 -4.80334 0.334163 0.053608 54 -4.80027 0.349118 0.0536724 52 -4.80273 0.281116 0.0537371 46 -4.80539 0.122486 0.0538667 49 -4.80276 0.14508 0.0539311 48 -4.79976 0.175192 0.0539954 52 -4.80265 0.0545184 0.0539959 43 -4.7904 0.318219 0.0540594 53 -4.79624 0.212805 0.0540598 46 -4.79896 0.00172723 0.054125 48 -4.7968 0.0394132 0.0541893 45 -4.79229 0.159888 0.0542534 53 -4.79376 0.107187 0.0542536 59 -4.78889 0.197451 0.0543177 46 -4.78846 0.0694792 0.0544472 50 -4.78851 -0.0659218 0.0544476 45 -4.7869 0.0243467 0.0545118 40 -4.78288 -0.0282433 0.0546409 45 -4.78008 0.0919318 0.054705 43 -4.78095 -0.0132007 0.0547053 47 -4.7767 -0.0506852 0.0548344 45 -4.74162 0.225602 0.0558007 40 -6.77039 0.885107 0.0687696 30 -5.13441 0.379075 0.0690024 40 -6.77797 -0.0236868 0.0697952 30 -6.70865 0.909434 0.0699524 52 -6.71588 -0.0443315 0.0710599 30 -6.64772 -0.0645046 0.0724469 30 -6.58137 -0.0946194 0.0737933 30 -6.38513 -0.11109 0.077791 31 -4.7519 0.484354 0.0790816 48 -6.31522 -0.248601 0.0791379 30 -4.75429 0.416759 0.0791903 67 -4.74491 0.453483 0.0793527 48 -4.74147 0.468179 0.0794069 59 -4.74686 0.386014 0.0794614 73 -4.74034 0.437989 0.0795154 43 -4.73965 0.400387 0.0796239 50 -4.73866 0.362824 0.0797324 65 -6.2728 -0.128393 0.0800755 62 -6.22354 0.746259 0.0801928 73 -6.19449 0.86156 0.0804776 37 -6.19169 0.791925 0.0807228 30 -6.18223 0.771034 0.0809677 51 -4.69919 0.263165 0.0809793 40 -6.20417 -0.155959 0.0814626 59 -6.19366 -0.175123 0.0816666 87 -6.18644 -0.213802 0.0817892 94 -6.18109 -0.194154 0.0819115 87 -6.11372 0.889836 0.0820276 30 -6.11054 0.869804 0.0821501 30 -6.16135 -0.329218 0.0821977 30 -4.64846 0.274699 0.082334 40 -4.65281 0.187035 0.0823343 40 -4.64558 0.289166 0.0823881 40 -4.64589 0.208655 0.0824968 40 -4.64738 0.172161 0.082497 40 -4.63867 0.303334 0.0825507 40 -4.64249 0.237728 0.0825509 40 -6.08374 0.91488 0.0825577 30 -4.6446 0.135516 0.0826055 40 -4.6332 0.324888 0.082659 40 -4.64336 0.106274 0.0826598 40 -4.64367 0.0916854 0.0826598 40 -4.63722 0.222822 0.0827135 40 -4.641 0.120798 0.0827139 40 -4.64225 0.0551768 0.0827141 40 -4.63805 0.0696794 0.0828225 40 -4.63392 0.157008 0.0828763 40 -6.12665 -0.259684 0.0829724 30 -6.11268 -0.374591 0.0831361 30 -6.11582 -0.278433 0.0831765 30 -6.10839 -0.345419 0.0832584 30 -6.10046 -0.306488 0.0834621 30 -6.07357 -0.391189 0.0839113 49 -4.94222 0.582268 0.106547 36 -6.31781 0.970117 0.107122 40 -4.90626 0.562608 0.107322 30 -6.12548 0.890569 0.110302 40 -6.12627 0.871031 0.110333 40 -6.09498 0.905576 0.110742 40 -4.75342 0.402686 0.110749 30 -6.09269 0.836822 0.110931 40 -4.73457 0.476165 0.110994 30 -4.73952 0.424077 0.110994 30 -6.08736 0.816581 0.111057 40 -4.73277 0.453488 0.111075 30 -6.08791 0.797186 0.111089 40 -4.7239 0.520141 0.111116 30 -4.72509 0.490253 0.111157 30 -4.72153 0.504895 0.111198 30 -6.08667 0.709602 0.111278 40 -4.72874 0.385779 0.11128 30 -4.71824 0.437229 0.111402 30 -4.7329 0.229355 0.111403 30 -6.07415 0.746822 0.111404 40 -6.1091 -0.327724 0.111442 40 -4.72574 0.318399 0.111443 30 -4.73367 0.162366 0.111444 30 -6.1055 -0.356398 0.111474 40 -6.06263 0.77439 0.11153 40 -6.09403 0.439926 0.111564 40 -4.71597 0.369905 0.111565 30 -6.06456 0.726258 0.111593 40 -4.71567 0.34754 0.111606 30 -4.72426 0.199246 0.111607 30 -6.0864 0.487437 0.111626 62 -6.0914 0.420485 0.111627 40 -6.09436 -0.375008 0.111631 40 -4.71811 0.280734 0.111647 30 -6.09412 -0.30779 0.111694 40 -4.71274 0.302729 0.111729 30 -4.71498 0.265706 0.111729 30 -6.06224 0.65841 0.111751 65 -6.07094 0.572645 0.111752 53 -6.08333 0.391091 0.111784 40 -6.05419 0.676762 0.111845 40 -6.08606 0.266603 0.111848 40 -6.07855 0.371588 0.111879 40 -6.05434 0.638272 0.111909 73 -6.0653 0.524043 0.111909 61 -6.05529 0.609525 0.11194 77 -6.07569 0.352239 0.111942 40 -6.07677 0.333151 0.111942 40 -6.08115 -0.2402 0.111945 40 -4.70563 0.213371 0.111974 30 -6.07428 0.304293 0.112005 40 -6.0752 0.28521 0.112005 40 -6.06272 0.456686 0.112036 49 -6.07588 -0.220903 0.112039 40 -4.69479 0.331296 0.112055 30 -4.70461 0.131946 0.112056 30 -6.05281 0.55167 0.112066 85 -6.07463 0.199151 0.112069 40 -6.04723 0.589485 0.112098 74 -6.05496 0.50394 0.112098 97 -6.06596 -0.268296 0.112166 40 -6.06309 -0.287266 0.112197 40 -6.06727 -0.087125 0.112228 40 -6.06497 -0.106158 0.112259 40 -6.06343 -0.172838 0.112259 40 -6.05927 0.236708 0.112289 40 -6.06202 0.151025 0.112289 40 -4.69218 0.146417 0.1123 30 -6.05855 -0.201293 0.112323 40 -6.05955 0.0652525 0.112353 59 -6.0584 -0.134631 0.112354 40 -6.052 0.217349 0.112415 40 -6.05352 0.169811 0.112415 40 -6.05395 -0.153578 0.112417 40 -6.05172 0.0461215 0.112479 85 -6.04885 0.112613 0.11251 48 -6.0477 -0.0489254 0.112542 77 -6.04331 0.0839994 0.112604 87 -6.04352 -0.0678971 0.112605 40 -6.04187 0.0175312 0.112636 81 -6.02787 -0.0204446 0.112857 77 -6.0259 -0.00151521 0.112888 80 -6.02048 0.130887 0.11295 40 -6.15057 0.886663 0.150599 34 -6.1454 0.866252 0.150673 42 -6.15455 0.798629 0.150673 65 -6.14412 0.846412 0.150709 61 -6.1289 0.824781 0.150873 86 -6.13562 0.757105 0.150892 59 -6.15493 -0.337092 0.151063 36 -6.15209 -0.385421 0.151063 52 -6.11336 0.773948 0.151074 99 -6.11726 0.725683 0.151093 108 -6.11691 0.657556 0.151166 64 -6.10957 0.705358 0.151184 64 -6.11497 0.637939 0.151203 94 -6.10182 0.685086 0.151275 102 -6.12989 -0.354938 0.151282 36 -6.13229 -0.268151 0.1513 67 -6.10102 0.617183 0.151349 84 -6.12001 -0.315748 0.151391 46 -6.12002 -0.161667 0.151445 71 -6.09098 0.596892 0.151458 44 -6.11344 -0.286495 0.151464 93 -6.09518 0.529719 0.151477 38 -6.11387 -0.228782 0.151482 73 -6.11313 -0.247989 0.151482 99 -6.11348 -0.18069 0.1515 62 -6.08575 0.567474 0.151532 40 -6.10472 -0.13241 0.15159 115 -6.10289 -0.199526 0.151591 110 -6.10398 -0.0460724 0.151608 59 -6.10343 -0.094011 0.151609 72 -6.07754 0.547497 0.151623 39 -6.08678 0.432847 0.151624 37 -6.07966 0.499594 0.151641 39 -6.0903 0.346653 0.151642 39 -6.09911 -0.113096 0.151645 64 -6.08966 0.174143 0.151716 46 -6.08781 -0.0650109 0.151754 99 -6.06724 0.479447 0.151769 40 -6.07462 0.374548 0.15177 39 -6.08612 0.0210607 0.151772 71 -6.08615 -0.00762073 0.151772 77 -6.07939 0.240808 0.151789 38 -6.06473 0.460099 0.151806 39 -6.0821 -0.0267065 0.151809 88 -6.06416 0.412198 0.151843 38 -6.06543 0.393146 0.151843 38 -6.06838 0.307268 0.151861 38 -6.07552 0.0878754 0.151863 65 -6.06339 0.326134 0.151898 40 -6.06577 0.278502 0.151898 37 -6.07202 0.0401469 0.1519 75 -6.06446 0.211668 0.151935 39 -6.05862 0.259138 0.151971 37 -6.06085 0.125816 0.15199 39 -6.05722 0.106722 0.152027 39 -6.05787 0.0591462 0.152027 71 -6.04619 0.15408 0.152118 48 -6.04311 0.192012 0.152136 38 -6.25198 0.870534 0.189505 40 -6.23443 -0.313168 0.189702 40 -6.1673 0.201604 0.226299 40 -6.18354 0.1146 0.226344 40 -6.18669 0.153532 0.226357 40 -6.18382 0.289621 0.226363 40 -6.1847 0.270192 0.226363 40 -6.18914 0.13413 0.226363 40 -6.18863 0.221675 0.226369 40 -6.19018 0.173063 0.22637 40 -6.19257 0.0174478 0.22637 40 -6.19401 0.0855542 0.226377 40 -6.19456 -0.0214759 0.226377 40 -6.1919 0.241254 0.226382 40 -6.19824 0.0661219 0.22639 40 -6.19839 -0.0507174 0.22639 40 -6.20042 0.0466556 0.226396 40 -6.2086 -0.00207953 0.226422 40 -6.2142 -0.070437 0.226442 40 -6.22163 -0.109655 0.226468 40 -6.21982 0.398934 0.226498 40 -6.2233 0.340299 0.226498 40 -6.23194 -0.0902952 0.2265 40 -6.23404 -0.178517 0.226514 40 -6.22819 0.360169 0.226517 40 -6.23704 -0.139397 0.22652 40 -6.23657 -0.158992 0.22652 40 -6.22585 0.428757 0.226523 40 -6.23482 0.311425 0.226531 40 -6.23101 0.468434 0.226549 40 -6.23701 0.380301 0.22655 40 -6.23645 0.449125 0.226562 40 -6.25112 -0.208567 0.226572 40 -6.25443 -0.228367 0.226585 40 -6.24509 0.518771 0.226607 40 -6.24542 0.538552 0.226613 40 -6.25865 0.500055 0.226646 40 -6.27566 -0.248978 0.226656 65 -6.25765 0.559359 0.226658 40 -6.27841 -0.278741 0.226669 71 -6.26291 0.589559 0.226684 40 -6.26899 0.609973 0.22671 40 -6.27103 0.630048 0.226723 40 -6.27185 0.679902 0.226742 40 -6.27794 0.660598 0.226755 40 -6.28559 0.70131 0.226793 40 -6.29216 0.732038 0.226825 40 -6.32941 -0.341028 0.226844 65 -6.29538 0.7725 0.226851 40 -6.30175 0.753176 0.226864 40 -6.32086 0.825936 0.226954 49 -6.33064 0.796866 0.226973 40 -6.33934 0.868797 0.227031 75 -6.3976 -0.375234 0.22707 40 -6.36187 0.851449 0.227096 65 -6.37678 0.90439 0.227167 42 -6.46026 -0.32826 0.227264 65 -6.34834 0.261939 0.264128 18 -6.35026 0.382062 0.264201 18 -6.36083 0.192465 0.26422 18 -6.36112 0.242499 0.264238 18 -6.36566 0.0325733 0.26424 18 -6.36147 0.28256 0.264257 19 -6.36406 0.312748 0.264293 19 -6.37256 0.122745 0.264312 19 -6.3754 0.172916 0.264349 19 -6.37892 0.102847 0.264367 19 -6.37984 0.223216 0.264403 19 -6.36815 0.473672 0.26442 19 -6.37168 0.423643 0.264421 19 -6.38521 0.0829087 0.264422 19 -6.37697 0.403894 0.264457 19 -6.39173 0.0127321 0.264478 19 -6.39543 0.062989 0.264514 19 -6.3979 0.153504 0.26455 19 -6.40527 -0.0777408 0.264607 19 -6.39991 0.354986 0.264641 19 -6.39454 0.495954 0.264677 19 -6.41374 -0.00728419 0.264679 19 -6.41563 -0.0375113 0.264698 19 -6.40152 0.456068 0.264713 19 -6.40898 0.335328 0.264714 19 -6.39893 0.516548 0.264731 19 -6.42003 -0.148468 0.264753 32 -6.43246 -0.128489 0.264863 19 -6.41236 0.548123 0.264878 19 -6.43683 -0.108331 0.2649 19 -6.41658 0.56882 0.264933 19 -6.44148 -0.0577935 0.264936 19 -6.42272 0.589739 0.265006 19 -6.44952 -0.169303 0.265028 37 -6.43453 0.692992 0.265207 19 -6.43772 0.662664 0.265207 19 -6.44375 0.622402 0.265225 19 -6.47264 -0.200341 0.265248 37 -6.47198 -0.220673 0.265248 38 -6.44574 0.643054 0.265262 19 -6.4822 -0.312761 0.265377 19 -6.49924 -0.241935 0.265505 39 -6.48001 0.718686 0.265646 19 -6.48963 0.740447 0.265756 19 -6.54509 -0.294942 0.265945 19 -6.50544 0.794147 0.265957 43 -6.52103 0.764926 0.266067 19 -6.56397 -0.27506 0.266109 19 -6.52473 0.8174 0.266158 84 -6.53396 0.870795 0.266304 19 -6.62847 -0.350542 0.266732 20 -6.68126 -0.374173 0.267227 20 -6.50724 0.266424 0.308505 60 -6.60859 0.166259 0.310056 109 -6.61308 0.145569 0.310119 88 -6.61067 0.363899 0.310213 97 -6.61932 -0.312089 0.310311 50 -6.6203 0.333114 0.310339 115 -6.62331 0.312401 0.310371 89 -6.63172 0.198021 0.310435 118 -6.58692 0.811136 0.310463 53 -6.6426 0.0313085 0.310563 97 -6.64434 0.240135 0.310656 93 -6.5989 0.844134 0.310716 90 -6.65024 0.292632 0.310783 152 -6.64743 0.386725 0.310814 104 -6.65749 0.125451 0.310815 104 -6.65026 -0.334616 0.310818 124 -6.65905 0.219669 0.310878 104 -6.64729 0.481069 0.310908 90 -6.66401 0.094137 0.31091 108 -6.66827 0.073229 0.310974 110 -6.67867 -0.000133226 0.311132 113 -6.67014 0.440533 0.311225 107 -6.67414 0.409211 0.311256 104 -6.66888 0.514138 0.311287 115 -6.69246 0.052374 0.311354 109 -6.6787 0.462136 0.311383 103 -6.70263 -0.0212861 0.311512 111 -6.70113 0.537676 0.311825 112 -6.73453 -0.0426678 0.312019 113 -6.72472 0.63524 0.312331 99 -6.73728 0.561735 0.312426 109 -6.76025 -0.0747918 0.31243 112 -6.75998 -0.096028 0.31243 109 -6.76324 -0.138596 0.312494 118 -6.77564 -0.117604 0.312683 108 -6.75541 0.584546 0.312742 112 -6.7825 -0.171048 0.31281 119 -6.75455 0.65935 0.312837 107 -6.76852 0.617768 0.312995 111 -6.87787 -0.195444 0.314329 122 -6.85884 0.701758 0.314545 131 -6.8972 -0.217757 0.314646 123 -6.91031 0.728764 0.315399 91 -6.95804 -0.252738 0.315627 123 -6.94777 0.754639 0.316032 129 -7.00317 -0.276581 0.316355 102 -7.01967 0.795653 0.317234 97 -7.02645 0.841126 0.317423 60 -7.13011 -0.304509 0.31838 166 -7.1463 -0.384033 0.318696 46 -7.11848 0.829133 0.318847 105 -6.8349 0.854044 0.349272 40 -6.91434 -0.280928 0.349949 40 -6.9529 -0.315167 0.350787 40 -6.93477 0.844775 0.351323 40 -7.06152 0.346347 0.353085 71 -7.09141 0.191722 0.353588 82 -7.10198 0.169716 0.353797 80 -7.09833 0.37065 0.35388 80 -7.10851 0.32644 0.354047 122 -7.1284 0.22648 0.354383 85 -7.13794 0.294191 0.354634 78 -7.14881 0.272182 0.354843 80 -7.15563 0.249954 0.354969 82 -7.14791 0.508701 0.355092 120 -7.16444 0.148918 0.355095 84 -7.1679 0.0363831 0.355137 80 -7.16437 0.408209 0.355302 87 -7.18706 0.115589 0.355556 86 -7.17702 0.431605 0.355595 86 -7.19397 0.0140085 0.355682 81 -7.20138 0.0932407 0.355849 83 -7.18936 0.489103 0.35593 78 -7.19358 0.45535 0.355972 86 -7.21163 0.0707502 0.356058 87 -7.2021 0.535509 0.356264 72 -7.28196 -0.00837946 0.357524 87 -7.28807 0.565246 0.358106 89 -7.31389 -0.031278 0.358193 88 -7.3172 0.602321 0.358775 87 -7.34509 -0.11207 0.358864 87 -7.3292 0.649754 0.35911 77 -7.35965 -0.0659948 0.359156 89 -7.33718 0.627259 0.359235 87 -7.3734 -0.089234 0.359449 89 -7.37248 -0.147141 0.35945 87 -7.36984 0.68853 0.36003 115 -7.50992 -0.173002 0.362338 89 -7.49498 0.724432 0.362708 79 -7.57331 -0.198046 0.363677 92 -7.57223 0.756195 0.364382 86 -7.65024 -0.235872 0.36531 93 -7.67593 0.803473 0.366642 87 -7.72342 -0.262166 0.366859 81 -7.75882 0.83709 0.368442 90 -7.90641 -0.292629 0.37071 40 -7.29438 -0.312911 0.394278 58 -7.28265 0.823687 0.394997 40 -7.38859 0.811795 0.397696 40 -7.73246 0.811516 0.406572 40 -7.88751 0.341385 0.409689 132 -7.92421 0.205779 0.410521 67 -7.95447 0.31903 0.411402 62 -7.93196 0.806602 0.41171 40 -8.00479 0.0315357 0.412546 120 -8.01024 0.371502 0.412907 60 -8.02354 0.144989 0.413065 137 -8.01838 0.409723 0.413166 82 -8.03304 0.170375 0.413324 77 -8.03782 -0.284221 0.413535 40 -8.03136 0.498921 0.413633 64 -8.05594 0.120157 0.413895 55 -8.05358 0.46215 0.414152 140 -8.06134 0.297609 0.414153 121 -8.06641 0.0822614 0.414155 51 -8.07083 0.00622378 0.414259 40 -8.12288 0.440311 0.415917 92 -8.14274 -0.0323222 0.416128 40 -8.17106 0.623192 0.417473 54 -8.16334 0.803475 0.417679 40 -8.20933 0.238055 0.417943 116 -8.24251 0.264827 0.418825 79 +unknow 0.950335 1 0 233 -11.3334 24.3407 -1.61207 130 -11.3911 24.2652 -1.60909 131 -11.4865 24.1716 -1.60611 132 -12.6322 26.0412 -1.59137 141 -12.6973 25.9673 -1.58901 151 -12.8098 25.8875 -1.58764 148 -12.8715 25.8078 -1.58491 144 -12.9418 25.7458 -1.58342 144 -13.0422 25.6436 -1.58056 143 -13.1045 25.567 -1.57807 139 -13.1656 25.4884 -1.57546 137 -13.2708 25.3978 -1.57347 142 -13.3236 25.3047 -1.56986 145 -13.3946 25.2468 -1.56874 146 -13.4908 25.1412 -1.56576 139 -13.5574 25.0758 -1.56414 133 -13.6123 24.9893 -1.56103 121 -13.6601 24.8904 -1.55706 155 -13.7608 24.796 -1.55494 118 -13.8269 24.7318 -1.55345 136 -13.8693 24.6256 -1.54897 130 -13.9823 24.5547 -1.5486 91 -14.0465 24.4882 -1.54698 88 -14.0944 24.3938 -1.54338 100 -14.7112 26.4537 -1.49369 133 -14.1274 26.5712 -1.4838 238 -11.7633 24.4414 -1.47812 140 -13.9906 26.5148 -1.47739 178 -11.677 24.4584 -1.47676 178 -11.5506 24.4897 -1.47514 115 -13.885 26.5162 -1.47469 174 -11.264 24.5789 -1.47266 96 -11.4423 24.4589 -1.47054 134 -13.7222 26.5087 -1.47008 177 -11.3462 24.4531 -1.46768 131 -13.616 26.5073 -1.46727 172 -14.3493 26.0925 -1.46603 147 -14.2519 26.1094 -1.46423 180 -14.1336 26.0874 -1.45996 142 -13.9964 26.1273 -1.45828 135 -14.1144 25.0119 -1.40644 234 -14.1872 24.508 -1.38384 127 -14.0892 24.5161 -1.38148 136 -13.9853 24.5135 -1.37844 139 -12.29 25.0816 -1.36203 119 -12.3538 24.9143 -1.35518 142 -11.9994 24.6857 -1.33483 173 -11.8271 24.5273 -1.32257 201 -11.7388 24.5409 -1.32111 133 -11.4547 24.6395 -1.31931 130 -11.6067 24.5617 -1.31897 161 -11.5024 24.5402 -1.31538 180 -14.0855 24.4635 -1.21995 188 -13.9907 24.4764 -1.21813 174 -13.7444 24.4897 -1.21257 134 -13.6383 24.4804 -1.20953 124 -13.4795 24.4656 -1.20498 150 -13.3901 24.485 -1.20366 128 -13.2874 24.4795 -1.20093 119 -13.1417 24.4855 -1.19769 152 -13.0469 24.4932 -1.19577 103 -12.8539 24.5004 -1.19152 69 -12.9243 24.4475 -1.19081 82 -12.6951 24.4773 -1.18677 95 -12.5935 24.4691 -1.18403 133 -12.5003 24.4765 -1.18221 130 -12.357 24.4798 -1.17908 122 -11.9992 24.6305 -1.17786 117 -12.2577 24.4738 -1.17655 124 -12.1577 24.4657 -1.17392 119 -12.0176 24.4725 -1.17108 108 -11.722 24.5491 -1.16805 179 -11.8333 24.4845 -1.16754 115 -11.6005 24.4918 -1.16279 134 -11.5159 24.5119 -1.16187 134 -11.411 24.4882 -1.15854 185 -11.2125 24.5643 -1.15783 99 -11.268 24.4818 -1.1552 111 -11.0844 24.4865 -1.15155 104 -14.1591 24.5065 -1.06213 164 -14.0472 24.4903 -1.05899 166 -13.9218 24.5388 -1.05809 149 -13.7828 24.4728 -1.05244 251 -13.7019 24.509 -1.05208 255 -13.5582 24.5226 -1.04947 255 -13.4512 24.5108 -1.04669 255 -13.356 24.5197 -1.04498 253 -13.2099 24.5261 -1.04211 255 -13.1045 24.5146 -1.03942 255 -13.003 24.5098 -1.03708 255 -12.865 24.5283 -1.03493 255 -12.762 24.519 -1.03242 255 -12.6602 24.5111 -1.02999 255 -12.5612 24.5081 -1.02784 255 -12.4202 24.5171 -1.02532 255 -12.3269 24.5239 -1.02371 255 -12.2239 24.5107 -1.0211 255 -11.9476 24.6311 -1.02048 139 -12.0879 24.5268 -1.01904 255 -11.9862 24.5145 -1.01652 252 -11.789 24.5988 -1.01608 149 -11.6566 24.5203 -1.01033 160 -11.5684 24.5333 -1.00916 168 -11.4608 24.5044 -1.00593 169 -13.9465 24.4406 -0.875759 150 -13.8382 24.4286 -0.873293 175 -13.6995 24.4517 -0.871444 187 -13.6032 24.4597 -0.869903 202 -13.4877 24.4322 -0.866821 196 -13.3543 24.4622 -0.865357 209 -13.246 24.446 -0.862814 200 -13.1493 24.4505 -0.861197 211 -13.0105 24.4681 -0.85927 234 -12.9075 24.4593 -0.857113 211 -12.8103 24.4608 -0.855418 214 -12.6719 24.4765 -0.853491 226 -12.5713 24.4699 -0.851488 235 -12.4735 24.4683 -0.849716 235 -12.3794 24.4735 -0.848252 238 -12.2435 24.4904 -0.84648 238 -12.1408 24.4768 -0.844245 236 -12.0462 24.479 -0.842704 235 -11.9037 24.4797 -0.840315 226 -11.8033 24.4684 -0.838235 236 -11.7066 24.4638 -0.836463 255 -11.5716 24.4772 -0.834691 244 -11.4734 24.4681 -0.832764 242 -11.383 24.4751 -0.831531 243 -11.2919 24.4798 -0.830222 250 -11.1673 24.5128 -0.829374 247 -11.0845 24.535 -0.828835 236 -11.0017 24.5569 -0.828296 205 -14.2034 24.4853 -0.704435 210 -14.0904 24.4675 -0.702113 235 -13.9896 24.47 -0.700566 232 -13.8505 24.4939 -0.699018 234 -13.7431 24.4833 -0.697019 230 -13.6437 24.4862 -0.695536 233 -13.5435 24.487 -0.693989 235 -13.3981 24.4962 -0.69199 239 -13.2877 24.4767 -0.689733 239 -13.1955 24.4902 -0.688701 240 -13.047 24.4904 -0.686444 234 -12.9513 24.4959 -0.685154 238 -12.8547 24.4993 -0.6838 240 -12.706 24.4958 -0.681479 236 -12.6088 24.4965 -0.68006 243 -12.5126 24.4986 -0.678706 244 -12.4102 24.4879 -0.676901 239 -12.2777 24.5122 -0.675675 240 -12.181 24.5113 -0.674257 243 -12.08 24.5011 -0.672516 241 -11.9469 24.5218 -0.671226 238 -11.8489 24.516 -0.669678 244 -11.7475 24.5027 -0.667873 243 -11.6148 24.5216 -0.666583 239 -11.5241 24.5291 -0.665551 247 -11.4233 24.5144 -0.663746 242 -11.3009 24.5535 -0.66323 93 -14.1455 24.4901 -0.558324 215 -14.0377 24.4806 -0.556644 187 -13.8936 24.4961 -0.555072 205 -13.7823 24.4786 -0.553175 218 -13.683 24.4816 -0.551929 219 -13.5828 24.4825 -0.550628 231 -13.4442 24.5041 -0.549328 231 -13.3414 24.4988 -0.547865 226 -13.2406 24.4966 -0.54651 228 -13.0978 24.5076 -0.544938 236 -12.9973 24.5044 -0.543583 234 -12.898 24.5027 -0.542282 240 -12.7584 24.517 -0.540873 239 -12.6575 24.5108 -0.539464 241 -12.5604 24.5113 -0.538272 246 -12.4195 24.5202 -0.536754 248 -12.3209 24.5162 -0.535454 247 -12.2243 24.5154 -0.534261 248 -12.1259 24.5107 -0.532961 255 -11.9866 24.5191 -0.531497 255 -11.8904 24.517 -0.530305 254 -11.7943 24.5146 -0.529113 255 -11.6555 24.5211 -0.527649 255 -11.5614 24.5214 -0.526565 255 -11.4682 24.5232 -0.525536 255 -11.3392 24.5479 -0.524668 250 -11.2479 24.5525 -0.523747 233 -11.16 24.564 -0.523043 189 -11.0737 24.5789 -0.522447 148 -13.7594 26.0757 -0.393718 102 -13.6095 26.0888 -0.392535 144 -13.5686 25.5205 -0.381881 104 -13.7937 24.6232 -0.368001 255 -13.5833 24.5183 -0.364042 201 -13.4783 24.5101 -0.362859 239 -13.3926 24.5365 -0.362492 255 -12.1448 24.982 -0.358906 97 -12.6665 24.6609 -0.357801 96 -12.5465 24.7132 -0.357638 96 -12.4679 24.7507 -0.357598 96 -12.3713 24.7522 -0.356741 96 -12.2258 24.6548 -0.35364 96 -12.1015 24.696 -0.353273 96 -11.7732 24.7103 -0.350621 255 -11.8843 24.6437 -0.350376 146 -11.6699 24.693 -0.349397 255 -11.5727 24.6879 -0.348458 255 -11.4394 24.7059 -0.347642 255 -13.5042 25.999 -0.253716 87 -13.3969 25.9915 -0.252835 115 -12.576 25.9814 -0.246916 86 -13.4906 24.6306 -0.234593 230 -12.4614 24.8407 -0.229998 83 -12.5187 24.7604 -0.229274 83 -11.7222 24.7075 -0.223008 82 -11.7998 24.6705 -0.223007 82 -11.4849 24.7062 -0.221402 82 -11.3228 24.7634 -0.221151 255 -11.3855 24.695 -0.220583 82 -11.1822 24.7636 -0.220237 125 -13.1924 24.735 -0.0486261 224 -13.0884 24.7268 -0.0481153 221 -12.7598 24.7609 -0.047003 116 -12.6229 24.7815 -0.0466016 106 -12.5179 24.7675 -0.0460543 106 -12.4302 24.7871 -0.0458539 106 -12.1375 24.8827 -0.0454535 106 -12.283 24.7845 -0.0452335 106 -12.1971 24.8068 -0.0450696 106 -11.9877 24.7732 -0.0439567 255 -11.8588 24.8042 -0.0437014 236 -11.7688 24.816 -0.0434462 229 -11.6728 24.8149 -0.0430632 229 -11.5389 24.8333 -0.0426983 220 +unknow 0.964202 1 0 411 -11.2643 -1.40169 -1.31558 208 -11.2688 -1.34835 -1.31531 75 -11.2572 -1.31115 -1.31317 89 -11.2715 -1.0622 -1.31157 104 -11.2592 -1.18607 -1.31157 108 -11.2514 -1.22102 -1.31103 105 -11.2649 -1.02591 -1.31023 57 -11.253 -1.14971 -1.31023 107 -11.2563 -1.09648 -1.30996 102 -11.6659 -1.36325 -1.29337 100 -11.6714 -1.10429 -1.29056 79 -11.6487 -1.28703 -1.29005 125 -11.6347 -1.32248 -1.28878 105 -11.6408 -1.23064 -1.28827 124 -11.6426 -1.19386 -1.28801 126 -11.6443 -1.15707 -1.28776 122 -12.0726 -1.39711 -1.28452 159 -12.0407 -1.5278 -1.28256 206 -12.0752 -1.20557 -1.28232 98 -12.0593 -1.33806 -1.28207 57 -12.0484 -1.43273 -1.28207 193 -12.0399 -1.4701 -1.28158 203 -12.028 -1.56461 -1.28158 88 -12.0171 -1.60162 -1.28084 90 -12.01 -1.6391 -1.2806 93 -12.0632 -1.16613 -1.28036 94 -12.0496 -1.2987 -1.28036 87 -12.0497 -1.26044 -1.27987 100 -12.0549 -1.12715 -1.27889 95 -12.0505 -1.08857 -1.27791 55 -12.4901 -1.36483 -1.26072 112 -12.4835 -1.42367 -1.26072 248 -12.4691 -1.4617 -1.25956 255 -12.4315 -1.63572 -1.25769 131 -12.4448 -1.49845 -1.25722 254 -12.4267 -1.59537 -1.25652 138 -12.4706 -1.18447 -1.25629 131 -12.4668 -1.22364 -1.25629 131 -12.4258 -1.55557 -1.25582 142 -12.443 -1.32003 -1.25466 114 -12.4352 -1.27968 -1.25326 130 -13.172 -1.57538 -1.24655 130 -13.1585 -1.63671 -1.24589 134 -13.167 -1.53286 -1.24545 166 -13.1912 -1.15882 -1.24392 118 -13.1835 -1.1999 -1.24349 169 -13.7621 -1.23943 -1.2281 154 -13.7088 -1.5828 -1.22623 110 -12.8491 -1.21083 -1.20692 100 -13.4334 -1.27306 -1.19426 65 -12.5059 -1.41741 -1.17167 117 -12.3464 -1.34079 -1.15328 114 -12.3466 -1.22322 -1.15196 102 -12.3249 -1.26021 -1.14999 101 -12.309 -1.2977 -1.14868 144 -12.4614 -1.21857 -1.09274 101 -12.2967 -1.37792 -1.07737 84 -12.2973 -1.2412 -1.07592 95 -12.2913 -1.27962 -1.07571 113 -12.2792 -1.33686 -1.07509 103 -12.2713 -1.36355 -1.00783 102 -12.2676 -1.32415 -1.00704 115 -12.2638 -1.28479 -1.00625 121 -12.1391 -1.23345 -0.993456 78 -11.9208 -1.15503 -0.971205 141 -11.8669 -1.11232 -0.965495 100 -11.8446 -1.07275 -0.962936 116 -11.8118 -1.01377 -0.959195 113 -12.2123 -1.40098 -0.934096 119 -12.201 -1.34142 -0.932424 132 -11.9874 -1.27937 -0.911978 66 -11.8547 -1.22726 -0.899152 65 -11.8605 -1.02612 -0.75947 183 -12.2889 -1.3945 -0.697726 94 -11.8331 -0.949792 -0.661201 65 -11.7465 -0.905907 -0.6546 238 -11.8644 -1.02088 -0.597155 40 -11.7205 -0.971084 -0.587129 159 -12.1075 -1.36198 -0.547531 91 -11.9649 -1.25119 -0.537962 188 -11.941 -1.28667 -0.536719 106 -11.8933 -1.20611 -0.533239 67 -11.8511 -1.14554 -0.530257 100 -11.8169 -1.10485 -0.527895 113 -11.8024 -1.06615 -0.526777 125 -11.7798 -1.02687 -0.525162 121 -11.695 -0.964165 -0.519569 88 -11.6969 -0.890369 -0.519321 248 -11.6761 -0.925732 -0.518202 235 -12.4028 -1.41508 -0.492095 73 -12.1277 -1.24816 -0.475684 255 -12.1137 -1.20823 -0.474673 240 -12.1188 -1.11268 -0.474449 109 -12.1013 -1.1494 -0.473661 238 -12.0262 -1.33305 -0.470513 83 -12.0046 -1.27336 -0.468939 84 -11.9472 -1.05871 -0.464557 84 -11.8378 -0.955114 -0.457925 203 -11.8292 -1.01054 -0.4577 83 -12.4522 -1.4206 -0.424587 61 -12.002 -1.27481 -0.401115 198 -11.984 -1.31101 -0.400406 63 -11.9483 -1.23128 -0.398181 126 -11.9262 -1.17229 -0.396765 91 -11.89 -1.13112 -0.394742 135 -11.8517 -1.09001 -0.392617 137 -11.8491 -1.05225 -0.392314 93 -11.8013 -0.954768 -0.389482 231 -11.7823 -0.990538 -0.388672 111 -11.7763 -0.915585 -0.388066 212 -11.7685 -0.859234 -0.387459 168 -12.0725 -1.27058 -0.335576 212 -12.0526 -1.23016 -0.334499 138 -12.0324 -1.17078 -0.333332 111 -11.999 -1.30081 -0.332434 124 -11.9903 -1.12857 -0.331268 251 -11.96 -1.08774 -0.329742 197 -11.8598 -1.04086 -0.325074 83 -11.8129 -0.980544 -0.322741 163 -11.8059 -0.942613 -0.322292 150 -12.0906 -1.31344 -0.259478 78 -12.0071 -1.26641 -0.256088 83 -11.9852 -1.2261 -0.255087 110 -11.9612 -1.18574 -0.254008 94 -11.9189 -1.12496 -0.25216 151 -11.8984 -1.08538 -0.251235 77 -11.8301 -1.04184 -0.248462 141 -11.815 -0.984466 -0.247692 104 -11.8021 -0.946103 -0.247076 120 -11.797 -0.908422 -0.246768 130 -11.7952 -0.852401 -0.246537 117 -11.7838 -0.81441 -0.245998 90 -12.1457 -1.29968 -0.185083 40 -12.1179 -1.25815 -0.184052 127 -12.0323 -1.21087 -0.181151 79 -12.0182 -1.17128 -0.180571 100 -11.9957 -1.11199 -0.179668 103 -11.9554 -1.07028 -0.17825 99 -11.9368 -1.03078 -0.177541 101 -11.9236 -0.973015 -0.176961 108 -11.9046 -0.933784 -0.176252 111 -11.8916 -0.895146 -0.175737 96 -12.2689 -1.31959 -0.12591 40 -12.1477 -1.26823 -0.122496 114 -12.1158 -1.2265 -0.121521 101 -12.0717 -1.16471 -0.120167 106 -12.0474 -1.12423 -0.119408 109 -12.0151 -1.08323 -0.118433 108 -11.9902 -1.02411 -0.117621 108 -12.0309 0.146587 -0.117575 40 -11.9714 -0.984682 -0.117025 115 -11.9545 -0.945531 -0.116483 103 -11.9568 -0.889043 -0.11643 99 -11.9502 -0.81311 -0.116105 88 -11.9456 -0.850511 -0.11605 103 -12.7762 -1.54026 -0.0544478 44 -12.751 -1.59818 -0.0540803 56 -12.7214 -1.49301 -0.0532243 44 -12.6982 -1.4498 -0.0526536 44 -12.544 -1.372 -0.0493499 88 -12.3494 -1.31106 -0.0452712 82 -12.3018 -1.26682 -0.0442109 135 -12.2659 -1.22412 -0.0433954 119 -12.2238 -1.16166 -0.0424168 120 -12.1995 -1.12063 -0.041846 120 -12.2357 0.166953 -0.0415703 42 -12.2251 0.205246 -0.0413667 42 -12.1691 -1.07923 -0.0411528 118 -12.1621 -1.02084 -0.0409085 119 -12.1827 0.0706516 -0.0404681 42 -12.1808 0.0323796 -0.040427 42 -12.1784 0.108898 -0.0403869 42 -12.1424 -0.94234 -0.0403788 123 -12.1373 -0.980314 -0.0403377 122 -12.1207 -0.883163 -0.0398489 123 -12.7152 -1.58004 0.00606983 40 -12.7 -1.4366 0.0065724 40 -12.6844 -1.53583 0.00663607 40 -12.6832 -1.49528 0.00673018 40 -12.6269 -1.38833 0.00779959 40 -12.4423 -1.32887 0.0107893 40 -12.3231 -1.27725 0.0127404 111 -12.3011 -1.21647 0.0131807 87 -12.2491 -1.1726 0.0140617 133 -12.2348 -1.13249 0.0143446 83 -12.2101 -1.07227 0.0148163 92 -12.1847 -0.992996 0.0153193 83 -12.1775 -1.03094 0.0153826 131 -12.1773 -0.934671 0.0155078 90 -12.1496 -0.817527 0.0160734 86 -12.141 -0.855281 0.0161681 78 -12.1343 -0.893134 0.0162314 135 -12.7559 -1.61611 0.0900458 49 -12.7395 -1.55303 0.0902642 49 -12.7185 -1.50988 0.0905009 104 -12.6747 -1.36341 0.0910468 48 -12.5378 -1.30855 0.0923409 92 -12.5219 -1.2671 0.0925229 78 -12.5258 -1.20788 0.0925407 89 -12.4877 -1.16454 0.0929232 101 -12.4718 -1.02481 0.0931774 91 -12.4614 -1.12255 0.0931964 101 -12.4566 -1.06295 0.0932871 127 -12.4381 -0.943322 0.0935414 120 -12.4291 -0.981909 0.0935964 111 -12.4105 -0.88236 0.0938327 97 -12.3813 -0.841134 0.0941241 111 -12.7207 -1.57841 0.171703 46 -12.6998 -1.53537 0.171774 46 -12.6726 -1.33059 0.17191 46 -12.6528 -1.28838 0.171975 46 -12.6429 -1.24728 0.172013 46 -12.6651 -1.22889 0.247479 40 -12.7028 -1.31326 0.247628 40 -12.7208 -1.27478 0.247673 40 -13.3425 -0.895034 0.24957 40 -13.5277 -0.971877 0.250185 40 -13.5488 -0.866522 0.250229 40 -13.5352 -1.05797 0.25023 40 -13.5321 -1.12191 0.250237 40 -13.5445 -1.01591 0.25025 40 -13.5763 -1.16862 0.250393 40 -12.7935 -1.19779 0.323627 42 -12.7996 -1.23892 0.323719 42 -12.7976 -1.29962 0.323756 42 -12.8631 -1.34697 0.324398 43 -13.449 -0.875203 0.329376 44 -13.4661 -0.918777 0.32956 45 -13.5907 -0.819864 0.33064 45 -13.5881 -1.03412 0.330751 85 -13.9158 -1.10241 0.333792 46 -14.8373 -0.845906 0.34205 49 -12.7814 -1.09083 0.408433 35 -12.8038 -1.13332 0.408845 35 -12.8582 -1.28091 0.409922 35 -12.8561 -1.32151 0.409954 35 -12.9039 -1.22416 0.410554 35 -12.9296 -1.18567 0.410902 35 -13.0507 -1.38336 0.413118 35 -13.4481 -0.894087 0.418715 36 -13.4768 -0.85353 0.419126 37 -13.4771 -0.938616 0.419221 37 -13.4945 -1.00379 0.41957 58 -14.842 -0.872419 0.440704 40 -12.9177 -1.25661 0.476778 43 -13.0052 -1.30619 0.478704 44 -13.477 -0.86246 0.487783 45 -13.5187 -0.929027 0.488746 45 -14.8158 -0.852126 0.515742 50 -14.8264 -0.806 0.515909 50 -14.834 -0.736312 0.515993 50 -14.8442 -0.690066 0.51616 50 -12.8568 -0.855022 0.53925 52 -12.8671 -0.936981 0.539666 52 -12.8879 -0.897839 0.540133 52 -12.8925 -0.999981 0.540445 52 -12.8859 -1.08097 0.540446 52 -12.9052 -1.0418 0.540861 52 -12.9165 -1.14493 0.541381 52 -12.9827 -1.2332 0.543302 52 -12.9965 -1.19335 0.543561 52 -12.9927 -1.27538 0.543665 52 -13.1555 -1.35433 0.548078 53 -14.6708 -0.332637 0.5857 59 -14.7701 -0.776566 0.588714 81 -14.7916 -0.707847 0.589181 78 -14.8305 -0.243318 0.589799 60 -14.8195 -0.825948 0.590064 60 -14.8437 -0.290207 0.590163 60 -14.8328 -0.873467 0.59048 60 -12.9435 -0.274293 0.620843 41 -12.9397 -0.416592 0.620844 41 -12.9315 -0.660509 0.62091 41 -12.95 -0.335471 0.621101 41 -12.9489 -0.376157 0.621101 41 -12.9503 -0.457641 0.62123 41 -12.9445 -0.600007 0.621231 41 -12.9617 -0.132088 0.621357 41 -12.952 -0.518817 0.621359 41 -12.9523 -0.559584 0.621424 41 -12.968 -0.0913998 0.621549 41 -12.9663 -0.23398 0.62155 41 -12.9824 0.0104952 0.621999 41 -12.9653 -0.703008 0.622068 41 -12.965 -0.743845 0.622133 41 -12.9883 -0.0506933 0.622192 41 -12.9634 -0.805055 0.622198 41 -12.9648 -0.846026 0.622326 41 -12.998 0.0922118 0.622513 41 -12.9982 0.0513763 0.622513 41 -13.0017 0.133092 0.622641 41 -13.0129 -0.193836 0.623029 41 -12.9931 -0.929828 0.62342 41 -12.9985 -0.991786 0.623742 41 -13.0079 -0.889802 0.623806 41 -13.014 -1.07521 0.624451 53 -13.0649 0.195446 0.624699 41 -13.0392 -1.03602 0.625158 41 -13.0489 -1.18126 0.625866 82 -13.1027 0.381423 0.626048 112 -13.0611 -1.22371 0.626381 108 -13.1353 0.279201 0.627014 41 -13.089 -1.28851 0.627475 189 -13.1598 0.341821 0.627849 41 -13.1824 -1.33933 0.630627 42 -13.0445 -0.215646 0.708925 93 -13.0458 -0.256666 0.709003 97 -13.0473 -0.359236 0.709158 93 -13.0461 -0.400225 0.709159 91 -13.0426 -0.502675 0.709159 93 -13.0551 -0.174818 0.709312 94 -13.0488 -0.441352 0.709314 91 -13.0544 -0.318406 0.70939 93 -13.0489 -0.544 0.709469 105 -13.0658 -0.113402 0.709698 102 -13.0531 -0.58527 0.709702 105 -13.0502 -0.646774 0.709702 103 -13.0521 -0.687988 0.709857 102 -13.0721 -0.072399 0.70993 93 -13.0559 -0.729336 0.71009 101 -13.0543 -0.790974 0.710167 96 -13.0822 -0.0313779 0.710317 98 -13.0882 0.0302752 0.710548 99 -13.0677 -0.833034 0.710787 96 -13.108 0.0714628 0.711322 93 -13.083 -0.875317 0.711483 97 -13.0822 -0.916558 0.711561 97 -13.1277 0.112775 0.712095 96 -13.1076 -0.980494 0.712722 100 -13.1044 -1.02167 0.712722 98 -13.1513 0.154251 0.713023 99 -13.1151 -1.06399 0.713264 99 -13.1624 0.216393 0.713487 100 -13.1259 -1.12718 0.713884 94 -13.1777 0.258028 0.714106 103 -13.1601 -1.17185 0.715354 90 -13.2147 0.300211 0.715575 94 -13.1623 -1.21375 0.715587 86 -13.2152 0.36253 0.715652 74 -13.2101 -1.28108 0.717676 97 -13.2597 -1.32805 0.719766 40 -13.0659 -0.309557 0.770404 154 -13.0622 -0.494305 0.770492 152 -13.0703 -0.37128 0.770664 156 -13.0756 -0.227578 0.77075 155 -13.0697 -0.453462 0.770751 153 -13.0768 -0.26869 0.770837 158 -13.073 -0.412458 0.770838 151 -13.0677 -0.55618 0.770839 148 -13.0719 -0.59749 0.771099 155 -13.0759 -0.638835 0.771359 151 -13.0945 -0.166152 0.771529 156 -13.1033 -0.083908 0.771875 158 -13.1049 -0.125088 0.771962 161 -13.0887 -0.701269 0.772053 152 -13.1115 -0.0221548 0.772221 162 -13.0905 -0.742604 0.772227 168 -13.0881 -0.783723 0.772227 165 -13.1215 0.0190681 0.772654 163 -13.0962 -0.846142 0.772748 159 -13.0975 -0.887541 0.772921 161 -13.1473 0.0604618 0.773781 158 -13.1511 0.101801 0.773954 163 -13.1325 -0.931295 0.774569 159 -13.1684 0.164035 0.774733 164 -13.1355 -0.972978 0.774829 159 -13.1467 -1.03609 0.775523 156 -13.1918 0.205823 0.775773 158 -13.1533 -1.07819 0.775956 159 -13.2171 0.247807 0.7769 161 -13.1777 -1.12182 0.77717 158 -13.1783 -1.18443 0.777431 156 -13.2457 0.310847 0.778199 158 -13.2063 -1.22873 0.778818 143 -13.2747 0.353314 0.779499 129 -13.2999 -1.27939 0.783065 78 -13.2097 -0.380624 0.863769 114 -13.2067 -0.525931 0.86387 116 -13.207 -0.567509 0.86397 111 -13.2208 -0.339401 0.864268 120 -13.217 -0.463984 0.864269 116 -13.2131 -0.609381 0.86437 116 -13.2283 -0.277231 0.864567 122 -13.2317 -0.194142 0.864666 125 -13.2311 -0.235714 0.864666 120 -13.2284 -0.4228 0.864768 114 -13.2239 -0.714027 0.86517 115 -13.2465 -0.131958 0.865365 124 -13.2321 -0.672798 0.865469 109 -13.2276 -0.755925 0.86547 112 -13.2528 -0.090394 0.865664 125 -13.259 -0.0487918 0.865963 123 -13.2458 -0.819646 0.866569 111 -13.2791 -0.00718629 0.866962 125 -13.2523 -0.903695 0.867168 126 -13.2571 -0.86219 0.867268 107 -13.2947 0.0971924 0.86776 122 -13.299 0.0554367 0.86796 122 -13.2773 -0.94737 0.868567 120 -13.3183 0.139163 0.868958 126 -13.2807 -1.01055 0.868967 120 -13.2953 -1.05372 0.869866 122 -13.3455 0.202291 0.870356 120 -13.3668 0.244576 0.871454 119 -13.3238 -1.09817 0.871465 120 -13.3324 -1.16219 0.872164 112 -13.3959 0.287149 0.872952 121 -13.3585 -1.20682 0.873663 99 -13.4363 0.35129 0.875049 69 -13.4341 -1.32027 0.877958 36 -13.4442 -1.25732 0.878158 36 +unknow 0.968949 1 0 257 -19.0317 25.4714 -1.40068 110 -19.2046 25.2861 -1.39845 109 -19.888 24.7035 -1.39652 157 -19.9404 24.6098 -1.39449 126 -19.0109 25.2773 -1.39218 129 -20.0132 24.463 -1.39105 163 -20.0773 24.3846 -1.39004 125 -20.1041 24.2614 -1.38609 160 -20.1432 24.1536 -1.38316 125 -20.2118 24.0049 -1.37961 159 -20.2458 23.8924 -1.37637 124 -20.2755 23.7755 -1.37283 155 -19.1809 23.9776 -1.34541 122 -18.8583 24.1131 -1.34066 102 -19.002 23.9847 -1.34005 175 -18.8883 23.9956 -1.33692 109 -21.731 25.1526 -1.28397 158 -21.555 25.188 -1.28002 186 -21.4369 25.21 -1.27733 160 -21.6312 24.0285 -1.24311 255 -21.7173 23.8967 -1.24131 165 -19.1314 25.348 -1.21736 161 -19.1843 25.2527 -1.21538 153 -18.9989 25.3376 -1.21341 162 -18.8642 25.3235 -1.20928 149 -18.7411 25.4073 -1.20901 151 -19.2683 24.0059 -1.17354 247 -19.1301 24.0652 -1.17174 231 -18.99 24.0437 -1.16707 221 -18.7343 24.107 -1.16222 145 -21.751 23.9011 -1.03678 122 -21.6061 23.8922 -1.03278 248 -21.4549 23.8751 -1.02838 200 -21.1569 23.9186 -1.02199 178 -21.0382 23.9354 -1.01945 176 -20.8972 23.926 -1.0156 168 -19.8816 24.7328 -1.0143 184 -20.7163 23.9456 -1.01159 149 -20.5993 23.962 -1.00912 162 -20.4384 23.9262 -1.00404 190 -20.2519 23.9353 -0.999647 153 -20.1072 23.9161 -0.995486 143 -19.968 23.9024 -0.991634 184 -18.238 25.1806 -0.989569 153 -19.7978 23.9269 -0.988167 179 -18.2664 25.0537 -0.986255 118 -19.6718 23.9272 -0.985085 183 -18.3488 24.919 -0.983942 118 -19.5385 23.9176 -0.981541 180 -18.3473 24.7536 -0.978777 128 -19.3778 23.9504 -0.978613 180 -19.1348 23.956 -0.972912 189 -19.0396 23.9909 -0.97168 173 -18.856 23.9908 -0.967288 147 -18.751 24.0121 -0.965439 116 -18.2077 24.4042 -0.96475 134 -18.2088 24.2461 -0.959894 140 -18.2432 24.0549 -0.954807 155 -18.3187 23.9974 -0.954806 175 -21.9149 24.0302 -0.840419 59 -21.4615 24.0595 -0.831327 88 -21.5024 23.878 -0.827844 99 -21.1894 23.9056 -0.821783 120 -21.0547 23.9046 -0.818881 108 -20.8642 23.9147 -0.815077 154 -20.7365 23.9198 -0.812498 108 -20.6104 23.9258 -0.809983 121 -20.4635 23.907 -0.806437 123 -18.3742 25.4837 -0.80478 105 -20.2847 23.9254 -0.803148 120 -20.1475 23.9157 -0.800053 123 -20.0106 23.9053 -0.796958 123 -18.2767 25.1817 -0.79504 93 -19.8467 23.9379 -0.794379 124 -19.723 23.9415 -0.791929 123 -18.2435 24.9709 -0.788911 128 -19.5869 23.9292 -0.788834 122 -19.2068 24.1536 -0.786774 159 -19.4247 23.9607 -0.78632 125 -19.2626 24.0682 -0.785741 145 -18.2672 24.7577 -0.783815 109 -19.2967 23.9562 -0.783611 129 -18.2494 24.5719 -0.778654 135 -18.8947 23.9928 -0.776455 105 -18.233 24.3896 -0.773622 98 -18.7514 23.9655 -0.772908 120 -18.6305 23.9659 -0.770522 114 -18.2557 24.0246 -0.764655 163 -21.828 23.8845 -0.66876 69 -21.6897 23.8834 -0.666214 69 -21.5316 23.8593 -0.662854 145 -21.3537 23.8874 -0.660198 128 -21.2388 23.9095 -0.658573 116 -21.0671 23.8666 -0.654616 157 -20.9176 23.9234 -0.6531 116 -20.7755 23.912 -0.650336 130 -20.6389 23.906 -0.647789 136 -20.5065 23.9039 -0.645405 132 -20.2953 23.8844 -0.641286 117 -20.1558 23.8716 -0.638576 179 -18.2477 25.2491 -0.636155 81 -20.0216 23.8643 -0.636083 113 -19.8579 23.8969 -0.633916 118 -19.7446 23.9128 -0.63229 134 -19.6149 23.9082 -0.62996 138 -19.444 23.929 -0.627467 135 -19.3199 23.9292 -0.625354 142 -19.1896 23.9212 -0.62297 136 -18.1744 24.6541 -0.621949 255 -19.0695 23.925 -0.621019 132 -18.9009 23.9439 -0.61858 133 -18.2021 24.4494 -0.617936 255 -18.7837 23.9497 -0.616738 131 -18.6506 23.9344 -0.614191 131 -18.1495 24.2192 -0.612081 253 -18.2593 23.9709 -0.608501 159 -21.621 23.9002 -0.449704 145 -21.428 23.9125 -0.447256 200 -21.3022 23.923 -0.445706 148 -21.1593 23.9135 -0.443626 201 -20.987 23.9453 -0.44179 159 -20.871 23.9644 -0.440526 165 -20.7196 23.9422 -0.43816 230 -20.5908 23.9451 -0.436488 149 -20.3856 23.9338 -0.433591 154 -18.2757 25.4779 -0.431897 201 -20.2353 23.9093 -0.431225 236 -20.1188 23.9238 -0.42992 153 -19.9431 23.9431 -0.427921 169 -18.2758 25.2265 -0.427733 166 -19.8167 23.9441 -0.426289 179 -19.6868 23.9399 -0.424535 175 -18.2499 25.0252 -0.4241 145 -19.5282 23.9766 -0.423067 175 -19.3974 23.9695 -0.421272 182 -18.229 24.8324 -0.42067 187 -19.2655 23.9602 -0.419436 220 -19.1063 23.9929 -0.417927 179 -18.2165 24.6529 -0.417568 149 -18.9749 23.9823 -0.416091 174 -18.8451 23.9727 -0.414296 244 -18.2235 24.4211 -0.413853 178 -18.7315 23.9829 -0.413032 157 -18.245 24.1323 -0.409402 163 -18.3451 24.0286 -0.408953 160 -21.6648 23.8901 -0.300186 95 -21.4799 23.9116 -0.298486 95 -21.3168 23.8804 -0.296408 117 -21.1767 23.8739 -0.294866 119 -21.0086 23.9103 -0.293544 149 -20.8743 23.9083 -0.292128 153 -20.7336 23.8982 -0.290554 159 -20.5595 23.9243 -0.289075 166 -20.4389 23.9355 -0.287973 152 -20.2563 23.873 -0.28536 138 -18.2716 25.4044 -0.285127 93 -20.1194 23.863 -0.283849 164 -19.9606 23.9023 -0.282716 132 -18.2388 25.1913 -0.282102 92 -19.8191 23.8848 -0.281079 164 -19.702 23.896 -0.280041 135 -18.2159 24.9112 -0.278322 92 -19.5197 23.9033 -0.278309 170 -19.4055 23.9164 -0.277334 139 -18.2218 24.7556 -0.2764 91 -19.2676 23.8993 -0.27576 173 -19.1161 23.9414 -0.274784 137 -18.9775 23.9214 -0.273179 168 -18.1615 24.5117 -0.272745 102 -18.8614 23.929 -0.27214 135 -18.7258 23.9109 -0.270597 165 -18.5774 23.953 -0.269685 133 -18.1995 24.006 -0.266727 214 -21.4622 24.9686 -0.0932358 124 -21.4313 24.6966 -0.091172 123 -21.2955 24.3853 -0.0882138 122 -21.485 24.2158 -0.0881935 122 -21.3152 24.2537 -0.0874279 129 -20.4982 24.001 -0.0808055 119 -20.2919 23.9114 -0.0789627 158 -20.1535 23.9001 -0.0780691 199 -18.2338 25.3482 -0.0777405 146 -19.9803 23.9228 -0.0772121 166 -19.8475 23.9162 -0.0763916 205 -18.2042 25.1403 -0.076042 135 -19.7264 23.9229 -0.0757353 166 -19.5616 23.9522 -0.0749878 196 -18.2208 24.9154 -0.0744711 134 -19.4446 23.9623 -0.0743863 164 -19.2976 23.9346 -0.0733466 192 -18.2028 24.7277 -0.0729916 134 -19.1571 23.9909 -0.0729459 160 -19.012 23.9633 -0.0719245 180 -18.191 24.55 -0.0716216 166 -18.8907 23.9648 -0.0712499 182 -18.7271 23.989 -0.0705023 173 -18.5988 23.9798 -0.0697181 164 -18.1857 24.1445 -0.0686261 164 -18.2191 24.0315 -0.0679864 255 -21.4715 24.9963 0.116266 119 -20.5184 25.2996 0.117297 117 -21.1915 23.975 0.118892 140 -20.4836 23.9966 0.120118 114 -20.2866 23.9173 0.120634 113 -18.2877 25.4364 0.120708 113 -18.3125 25.3027 0.120967 113 -18.3331 24.0341 0.123738 148 -18.2225 24.0453 0.123897 163 -18.2663 24.0652 0.303679 208 -18.3588 24.0299 0.30377 126 -18.2712 24.7908 0.305556 91 -19.3121 24.0016 0.305599 91 -18.3145 25.2621 0.306862 92 -18.2947 25.4022 0.30719 93 -20.1588 23.955 0.307221 191 -20.2766 23.9419 0.307434 146 -20.5401 24.0223 0.308182 161 -20.6821 24.0349 0.308512 155 -20.806 24.0257 0.308751 151 -20.9835 24.0011 0.309068 124 -20.5069 25.2398 0.311119 96 -20.7579 25.2231 0.311591 96 -20.8893 25.1403 0.311656 105 -18.3529 24.0725 0.482879 142 -18.3049 24.1667 0.483299 132 -18.2784 24.3696 0.484633 124 -18.7553 24.0476 0.484949 101 -18.8814 24.0531 0.485699 101 -18.2781 24.5296 0.485803 119 -19.0076 24.058 0.48645 101 -19.1781 24.0402 0.487293 101 -18.3008 24.722 0.487339 131 -19.2973 24.0344 0.487934 102 -18.262 24.9145 0.488546 131 -19.4254 24.039 0.488703 102 -19.5852 24.0046 0.489381 102 -19.7214 24.0172 0.49026 102 -18.3118 25.1481 0.490539 120 -19.8579 24.0292 0.491139 103 -20.0144 23.9876 0.491762 103 -18.3206 25.3271 0.49191 115 -20.1436 23.9889 0.492531 103 -20.2808 23.9989 0.493411 103 -20.435 24.0281 0.494528 104 -20.6235 24.0196 0.49559 104 -20.7498 24.0137 0.496304 113 -18.444 24.569 0.691242 89 -19.0948 24.4612 0.696147 83 -19.2395 24.4875 0.697887 83 -19.3449 24.463 0.698615 83 -19.4812 24.3981 0.699153 83 -19.5866 24.3726 0.699881 83 -19.687 24.3405 0.700483 83 -19.8281 24.2799 0.701148 83 -19.9538 24.2777 0.702382 84 -20.0823 24.2781 0.703679 84 -20.2299 24.223 0.704502 84 +unknow 0.970027 1 0 209 -20.7611 -21.429 -0.940332 172 -21.0909 -21.096 -0.940124 178 -21.1514 -21.024 -0.93982 167 -20.6798 -21.4797 -0.939557 175 -20.8436 -21.3123 -0.939338 160 -21.2045 -20.9448 -0.939132 162 -20.9617 -21.1653 -0.938499 179 -20.5693 -21.4998 -0.937165 180 -20.8502 -21.1856 -0.93603 174 -20.421 -21.5472 -0.934539 192 -21.6749 -20.1682 -0.931944 113 -21.7278 -20.0905 -0.931404 113 -20.2929 -21.5473 -0.931146 180 -21.7761 -20.0087 -0.930634 113 -21.8108 -19.9146 -0.92917 113 -21.8851 -19.7942 -0.928168 113 -20.1567 -21.5381 -0.927291 186 -21.9294 -19.7093 -0.927243 113 -21.9599 -19.6124 -0.925626 112 -22.049 -19.506 -0.925471 112 -20.0181 -21.5253 -0.923281 199 -20.9197 -20.0885 -0.908679 118 -21.1218 -19.8409 -0.907754 111 -20.9213 -19.7768 -0.900435 110 -20.8026 -19.7888 -0.897431 110 -24.3528 -21.4501 -0.837774 104 -24.42 -21.3735 -0.837774 75 -24.5039 -21.2438 -0.837064 74 -24.5629 -21.1602 -0.836742 59 -24.2464 -21.492 -0.836098 114 -24.7937 -20.7556 -0.833969 59 -24.822 -20.6469 -0.832422 58 -23.8913 -21.5145 -0.828039 58 -23.3638 -21.5089 -0.815339 100 -23.4284 -21.2307 -0.810825 57 -23.2264 -21.2477 -0.806377 70 -23.5307 -19.8227 -0.783424 56 -23.3305 -19.8426 -0.778911 56 -23.1952 -19.8533 -0.775816 56 -21.3435 -19.8953 -0.732171 53 -20.1771 -20.8637 -0.72721 71 -20.1971 -20.6882 -0.723599 89 -21.0561 -19.8133 -0.723597 53 -20.9241 -19.8133 -0.720502 53 -20.1892 -20.5505 -0.720247 109 -20.1947 -20.4272 -0.717539 126 -20.7793 -19.8003 -0.716828 52 -20.2343 -20.2751 -0.714959 122 -20.6368 -19.8508 -0.714636 83 -20.5313 -19.8738 -0.712702 95 -20.2271 -20.1409 -0.711736 124 -20.4202 -19.8907 -0.71051 105 -20.2378 -20.0252 -0.70935 139 -20.2806 -19.9419 -0.708447 124 -23.6099 -19.8086 -0.626697 66 -23.4527 -19.8027 -0.623338 66 -23.2739 -19.8405 -0.620303 66 -23.096 -19.8147 -0.616186 75 -22.9837 -19.8441 -0.614398 86 -22.8518 -19.8559 -0.611905 65 -22.6421 -19.8619 -0.607733 65 -22.4701 -19.8365 -0.603778 65 -22.2865 -19.7995 -0.59939 73 -22.1051 -19.8257 -0.596193 94 -21.967 -19.8268 -0.59343 115 -21.8024 -19.803 -0.589691 129 -21.6188 -19.8232 -0.586386 138 -21.4741 -19.8152 -0.583352 139 -21.3927 -19.8649 -0.582648 63 -20.1226 -21.1228 -0.58211 177 -20.0864 -20.9528 -0.5781 133 -21.1431 -19.7574 -0.575713 63 -20.9522 -19.765 -0.572083 76 -19.9715 -20.7027 -0.571056 250 -20.8421 -19.7853 -0.570295 88 -20.013 -20.5511 -0.568888 255 -20.0827 -20.3652 -0.566612 255 -19.9822 -20.3912 -0.565204 255 -20.5449 -19.8125 -0.564986 154 -20.4237 -19.82 -0.562764 155 -20.1202 -20.0855 -0.561952 218 -20.1747 -20.0138 -0.561627 120 -20.3141 -19.838 -0.560976 138 -20.1705 -19.8844 -0.55908 178 -24.1775 -19.8826 -0.430413 184 -23.9872 -19.8525 -0.427028 183 -23.8151 -19.8999 -0.424948 155 -23.6225 -19.8651 -0.421481 126 -23.4212 -19.8215 -0.41777 154 -23.0648 -19.8326 -0.412387 203 -22.9888 -19.8932 -0.41202 105 -22.771 -19.8299 -0.407819 104 -22.2471 -19.8076 -0.399499 129 -22.0599 -19.8279 -0.39693 161 -21.9057 -19.8139 -0.394401 178 -21.7591 -19.8058 -0.392077 187 -21.5802 -19.8296 -0.389711 185 -20.2095 -21.1253 -0.388246 101 -21.4444 -19.8293 -0.387672 168 -21.3718 -19.887 -0.387387 149 -21.2033 -20.0433 -0.387061 135 -20.1387 -20.9189 -0.384208 157 -21.1488 -19.8036 -0.382901 118 -20.1757 -20.7606 -0.382414 139 -20.1431 -20.597 -0.379559 141 -20.8725 -19.8546 -0.379516 140 -20.1839 -20.5094 -0.378865 114 -20.2451 -20.3785 -0.377845 100 -20.7147 -19.8287 -0.376824 171 -20.514 -19.9476 -0.37556 247 -20.5737 -19.8802 -0.375479 159 -20.297 -20.049 -0.373848 99 -20.224 -20.1028 -0.373563 108 -20.337 -19.8999 -0.372298 126 -24.2286 -19.8484 -0.285135 136 -24.0457 -19.8253 -0.282681 162 -23.874 -19.8102 -0.280446 143 -23.6504 -19.9404 -0.279062 141 -23.6577 -19.8198 -0.277929 200 -23.4732 -19.9177 -0.276702 130 -23.1131 -19.8006 -0.271195 184 -22.9613 -19.7962 -0.269338 167 -22.7841 -19.7687 -0.266947 163 -22.5974 -19.7942 -0.264996 163 -22.445 -19.7859 -0.263108 162 -22.2854 -19.7701 -0.261063 161 -22.1247 -19.7522 -0.258986 161 -21.9407 -19.7747 -0.257066 158 -21.8058 -19.7777 -0.255525 156 -21.6534 -19.764 -0.253605 157 -20.2645 -21.1081 -0.252726 87 -21.4776 -19.79 -0.251843 168 -21.339 -19.7867 -0.250207 163 -20.1785 -20.8216 -0.248541 146 -21.1963 -19.7787 -0.248476 148 -21.064 -19.7795 -0.246966 152 -20.1642 -20.6766 -0.246747 154 -20.9008 -19.8126 -0.245456 160 -20.1505 -20.5332 -0.244985 156 -20.7748 -19.8175 -0.244071 160 -20.1837 -20.3742 -0.243569 151 -20.6489 -19.8218 -0.242687 161 -20.1896 -20.2527 -0.242278 149 -20.492 -19.8577 -0.241302 163 -20.1993 -20.1355 -0.241083 148 -20.3808 -19.8746 -0.240233 180 -20.2212 -20.0312 -0.24017 150 -20.2982 -19.9189 -0.239792 155 -24.094 -19.8678 -0.0773355 199 -23.9023 -19.836 -0.0758047 196 -23.6983 -19.8559 -0.0744924 196 -23.5227 -19.8347 -0.0731438 196 -23.3567 -19.8205 -0.0719046 214 -23.1583 -19.8404 -0.070647 192 -22.9914 -19.8229 -0.0693895 208 -22.8249 -19.8045 -0.0681321 209 -22.6486 -19.8393 -0.0671297 207 -22.5037 -19.8375 -0.0661274 202 -22.3471 -19.8244 -0.0649793 189 -20.9462 -21.1419 -0.0639599 113 -22.1968 -19.8159 -0.0639041 187 -20.9208 -20.9839 -0.0627752 113 -22.0082 -19.8345 -0.0627377 196 -21.8791 -19.843 -0.0619177 202 -20.8819 -20.8135 -0.0614265 112 -21.7281 -19.8307 -0.0608243 190 -20.8804 -20.6816 -0.0605699 112 -21.5565 -19.861 -0.0598584 173 -20.9149 -20.5213 -0.059768 111 -20.912 -20.3898 -0.0589113 111 -21.4149 -19.8551 -0.0588744 172 -20.9487 -20.2975 -0.058565 111 -21.0211 -20.1764 -0.0582734 111 -21.0583 -20.0854 -0.0579452 111 -21.2765 -19.8513 -0.0579268 238 -21.1609 -19.9307 -0.0576534 111 -21.0967 -19.9957 -0.0576353 111 -23.2443 -21.206 0.120723 114 -24.0218 -19.9255 0.121419 186 -23.8516 -19.9112 0.121802 158 -23.2941 -20.4608 0.121982 112 -23.6633 -19.8807 0.12225 153 -23.2089 -20.2574 0.122523 112 -23.4579 -19.8976 0.12265 201 -23.212 -20.1321 0.122742 111 -23.3359 -19.9206 0.122863 111 -22.4243 -20.9151 0.12291 111 -22.4575 -20.2964 0.123988 110 -22.408 -20.1243 0.124404 109 -22.3412 -19.938 0.12488 109 -21.5773 -19.9373 0.126427 107 -21.7745 -20.0218 0.30201 88 -22.4472 -20.0629 0.303712 89 -23.2259 -19.9848 0.30544 91 -23.3478 -19.9625 0.305692 198 -23.2518 -20.3274 0.306229 91 -23.2941 -21.0861 0.307961 93 -22.1893 -20.3629 0.481854 99 -22.2895 -20.2622 0.481909 99 -22.356 -20.1947 0.481946 99 -22.1708 -20.4746 0.482422 100 -22.4581 -20.1591 0.482422 100 -22.165 -20.5985 0.483154 100 -22.59 -20.1496 0.483265 100 -22.1203 -20.752 0.483814 100 -22.7687 -20.117 0.484291 100 -22.1001 -20.8639 0.484382 100 -22.9461 -20.1456 0.485684 101 -23.0907 -20.1443 0.486674 101 +unknow 0.966655 1 0 129 -22.9192 25.0586 -1.31629 194 -22.9585 24.9439 -1.31368 191 -23.0364 24.793 -1.31108 190 -23.0663 24.6695 -1.30793 183 -23.0875 24.5372 -1.30425 186 -23.1685 24.392 -1.302 186 -23.2063 24.2787 -1.29949 188 -23.1924 24.1121 -1.29365 190 -23.2946 23.9911 -1.29293 180 -26.4446 25.8714 -1.21718 138 -26.6441 25.6602 -1.21702 157 -26.487 25.7506 -1.21509 154 -26.6683 25.5224 -1.21401 156 -26.6991 25.3916 -1.21139 158 -23.9569 25.5115 -1.14012 159 -23.7711 25.5538 -1.13643 151 -23.5985 25.5285 -1.13119 144 -23.5169 25.6011 -1.13111 131 -24.0672 24.0662 -1.10305 140 -23.952 24.1019 -1.10089 128 -23.6126 24.1363 -1.09265 127 -23.7246 24.0234 -1.09257 139 -23.4935 24.1659 -1.09026 127 -26.4211 24.2884 -0.949005 106 -26.1524 24.27 -0.942234 74 -25.997 24.2784 -0.938753 64 -25.7836 24.2314 -0.932691 63 -25.5429 24.233 -0.927081 63 -25.1911 24.2021 -0.918183 63 -24.9432 24.1912 -0.912186 62 -24.7754 24.1801 -0.908059 62 -24.588 24.1487 -0.90303 62 -24.4338 24.1486 -0.899483 62 -24.2064 24.1506 -0.894325 62 -24.0302 24.126 -0.889747 61 -23.8122 24.058 -0.883233 75 -23.6285 24.0987 -0.88001 61 -22.8807 24.6955 -0.87731 61 -23.4884 24.107 -0.877044 61 -22.8872 24.5475 -0.873955 61 -23.3013 24.0658 -0.871885 74 -23.1088 24.2452 -0.871758 60 -22.934 24.3667 -0.870729 75 -23.1447 24.1307 -0.869887 60 -22.972 24.2539 -0.868922 90 -26.1672 24.2397 -0.758559 87 -26.0135 24.2495 -0.755687 75 -25.8133 24.2147 -0.75108 75 -25.5669 24.2109 -0.746149 75 -25.3793 24.1848 -0.741976 75 -25.1893 24.155 -0.737694 74 -24.9618 24.1635 -0.733413 74 -24.7885 24.1469 -0.729728 74 -24.6083 24.1224 -0.725772 73 -24.4229 24.0914 -0.721599 73 -24.2638 24.1611 -0.719866 73 -24.1525 24.2018 -0.718512 73 -23.871 24.0701 -0.710598 72 -23.6691 24.0924 -0.707184 72 -22.8559 24.7755 -0.705405 72 -23.5026 24.0736 -0.703662 72 -22.8562 24.62 -0.702314 72 -23.3503 24.0683 -0.700681 72 -22.8639 24.4735 -0.699548 87 -23.1702 24.1089 -0.69808 71 -22.8764 24.333 -0.696999 88 -23.035 24.1193 -0.69575 71 -22.955 24.1872 -0.695589 88 -26.3038 24.2994 -0.522769 130 -26.1321 24.2935 -0.520118 121 -25.9154 24.2444 -0.516201 121 -25.7063 24.2771 -0.51355 121 -25.5008 24.2352 -0.509919 120 -25.3161 24.2116 -0.506859 120 -25.1038 24.2363 -0.504085 119 -24.8969 24.1884 -0.500373 119 -24.7149 24.1631 -0.497354 118 -24.4926 24.1726 -0.494253 118 -24.3256 24.1593 -0.491642 117 -24.1633 24.1495 -0.489154 117 -23.9815 24.119 -0.486094 116 -22.9118 25.0073 -0.484148 255 -23.7903 24.1535 -0.483851 116 -23.6177 24.1295 -0.481036 116 -22.8921 24.7509 -0.480024 255 -23.4706 24.1306 -0.478956 115 -22.918 24.6233 -0.478473 163 -22.9747 24.5293 -0.477859 157 -23.2167 24.2478 -0.477081 115 -23.2886 24.1704 -0.476957 115 -23.1101 24.2887 -0.476184 200 -22.9789 24.3799 -0.475695 148 -26.2151 24.319 -0.355401 105 -26.0042 24.2756 -0.352505 104 -25.763 24.2785 -0.349766 104 -25.5749 24.2532 -0.347342 103 -25.3613 24.2022 -0.344352 103 -25.1577 24.2354 -0.3424 103 -24.9738 24.2098 -0.340039 102 -24.7918 24.1847 -0.33771 102 -24.5651 24.1904 -0.335223 101 -24.391 24.1702 -0.333051 101 -24.2414 24.1733 -0.331414 101 -24.0567 24.1401 -0.32899 100 -22.9209 25.1183 -0.327807 100 -23.8599 24.1692 -0.327133 100 -22.9051 24.943 -0.325601 100 -23.7027 24.1612 -0.325308 100 -22.9626 24.7702 -0.324214 100 -23.5555 24.1624 -0.323703 99 -23.3803 24.2098 -0.322318 99 -22.9517 24.6029 -0.322166 99 -22.9769 24.4752 -0.320968 99 -23.2308 24.2066 -0.32065 99 -23.0002 24.3462 -0.319739 99 -23.0981 24.2201 -0.31936 99 -24.9015 24.6645 -0.112597 131 -24.9275 24.5357 -0.111938 131 -23.6422 25.3324 -0.108977 130 -23.5943 25.1225 -0.107278 129 -23.8578 24.3095 -0.103584 128 -23.7548 24.3572 -0.103239 128 -24.2515 25.2808 0.110567 125 -24.2031 25.072 0.111073 125 -24.1842 24.8953 0.111459 124 -24.2467 24.7254 0.111674 124 -24.2765 24.6006 0.111862 124 -24.3537 24.5243 0.111864 124 -24.4236 24.4405 0.111892 124 +unknow 0.906642 1 0 81 -27.7095 -21.2398 -0.737662 129 -27.6059 -21.3677 -0.737553 133 -27.7649 -21.1442 -0.737283 124 -27.5276 -21.4457 -0.737174 137 -27.8089 -21.04 -0.736524 93 -27.427 -21.5062 -0.736036 110 -28.097 -20.4369 -0.733057 74 -28.1562 -20.345 -0.732894 74 -28.1842 -20.2309 -0.731703 74 -28.2694 -20.0909 -0.731378 74 -28.3046 -19.9824 -0.730457 74 -28.3345 -19.8704 -0.729373 74 -28.3558 -19.7528 -0.728019 74 -28.4271 -19.6042 -0.727314 74 -28.4655 -19.499 -0.726556 73 -26.6891 -21.5443 -0.721028 144 -26.4834 -21.5853 -0.717398 113 -26.2886 -21.5645 -0.712955 143 -26.1096 -21.5554 -0.709054 97 -25.914 -21.6002 -0.705749 72 -26.8703 -19.7402 -0.695075 71 -26.6939 -19.7402 -0.691228 71 -26.4325 -19.8701 -0.687652 78 -26.5146 -19.7369 -0.687273 71 -29.3348 -19.8149 -0.513982 121 -28.9971 -19.92 -0.509496 139 -29.0463 -19.8198 -0.50917 135 -28.7716 -19.8982 -0.505458 119 -28.4433 -19.8697 -0.499625 118 -28.1894 -19.8242 -0.494854 118 -27.9818 -19.8097 -0.491224 117 -27.7486 -19.7756 -0.486941 117 -27.4896 -19.7868 -0.482781 131 -27.2979 -19.7791 -0.479518 132 -27.0887 -19.7575 -0.475807 135 -26.8778 -19.7982 -0.472829 114 -26.6549 -19.7634 -0.468751 130 -26.4646 -19.7512 -0.465488 161 -25.9348 -20.3902 -0.464835 255 -26.2386 -19.9052 -0.463693 150 -26.2803 -19.807 -0.463163 181 -25.9803 -20.1631 -0.462714 146 -26.0528 -20.0233 -0.462143 255 -27.0255 -19.7592 -0.31909 99 -26.7792 -19.7736 -0.3161 98 -26.5692 -19.748 -0.313205 98 -25.8982 -20.4109 -0.311159 144 -26.0639 -20.081 -0.310026 142 -26.3228 -19.6938 -0.309586 118 -25.9074 -20.1558 -0.308799 138 -26.1084 -19.8552 -0.308422 140 -26.0379 -19.931 -0.308264 236 -29.4774 -19.8339 -0.116523 133 -29.2114 -19.7883 -0.114281 132 -28.9051 -19.7798 -0.11193 131 -28.6831 -19.7604 -0.110161 130 -28.4862 -19.7568 -0.108667 130 -28.2372 -19.7817 -0.106935 129 -28.0132 -19.7561 -0.105131 129 -27.806 -19.7409 -0.103509 128 -27.5762 -19.7737 -0.101977 127 -27.3713 -19.7571 -0.100373 127 -26.1858 -21.1159 -0.0992959 126 -27.1846 -19.7524 -0.09897 126 -26.9869 -19.7384 -0.097439 126 -26.5035 -20.1623 -0.096217 125 -26.7489 -19.7583 -0.0957985 125 -26.5872 -19.7682 -0.0946685 125 -26.2131 -20.0715 -0.0936108 124 -26.1071 -20.1862 -0.0934831 124 -26.4018 -19.7592 -0.0932651 133 -25.9821 -20.2201 -0.0927722 131 -27.3177 -19.6767 0.315227 99 -27.2622 -19.7671 0.315253 99 -27.2123 -19.9273 0.315428 99 -28.6403 -19.8881 0.319114 102 -28.8606 -19.8402 0.319612 103 -29.0647 -19.8466 0.320168 103 -29.2907 -19.8664 0.320808 104 -29.5337 -19.8962 0.321513 104 -29.151 -19.9863 0.529752 115 +unknow 0.917787 1 0 29 -38.1511 24.3545 -0.715594 149 -37.8371 24.3219 -0.709842 148 -37.6868 24.4771 -0.708987 148 -37.4223 24.4729 -0.704419 148 -37.133 24.4508 -0.699238 147 -36.8076 24.4029 -0.69316 174 -36.4695 24.4271 -0.687693 185 -36.1504 24.3784 -0.681737 205 -38.3866 24.2952 -0.507618 147 -38.1297 24.3006 -0.50425 159 -37.8665 24.3003 -0.500757 164 -37.5033 24.3173 -0.496098 204 -37.2443 24.3157 -0.492667 170 -36.9372 24.2809 -0.488323 192 -36.6757 24.2742 -0.48483 186 -36.3615 24.3132 -0.481053 182 -36.0992 24.3022 -0.477527 179 -38.2186 24.4948 -0.206916 185 -38.265 24.3553 -0.206586 209 -37.5805 24.3369 -0.201243 178 -37.296 24.3195 -0.198982 175 -37.0522 24.3269 -0.197159 161 -36.7454 24.3742 -0.195062 160 -36.4723 24.3586 -0.192911 159 -36.2097 24.3481 -0.190869 159 -36.9022 24.3504 0.0854438 162 -36.6756 24.3665 0.0859362 153 -36.3895 24.3413 0.0866264 152 -36.0673 24.3725 0.0873108 151 +unknow 0.906059 1 0 49 -41.2869 26.1717 -0.789493 159 -41.3471 25.9375 -0.787981 159 -43.6173 25.8193 -0.590388 173 -43.4774 24.2817 -0.576392 138 -43.1796 24.2935 -0.572395 138 -42.9951 24.4571 -0.571138 138 -41.7041 24.9517 -0.557516 145 -40.4625 25.3444 -0.544081 183 -40.542 25.2171 -0.544079 174 -40.5291 25.0329 -0.542377 134 -40.7215 24.5372 -0.540891 133 -40.4083 24.5217 -0.536547 147 -40.3157 24.6391 -0.536266 133 -40.6032 24.6046 -0.225898 170 -40.2661 24.5738 -0.223126 169 -40.0154 24.6805 -0.221687 169 -39.9359 24.805 -0.221671 169 -39.8103 24.9007 -0.221162 255 -43.4851 24.3859 0.06999 223 -42.9661 24.2723 0.0713822 205 -42.6916 24.2943 0.072006 180 -42.4121 24.3118 0.0726463 166 -42.0739 24.3819 0.0733522 166 -41.7709 24.3818 0.0740694 165 -41.4907 24.3932 0.0747153 164 -41.1897 24.478 0.075306 164 -40.8673 24.4602 0.0760891 163 -40.583 24.4635 0.0767515 162 -40.3375 24.5753 0.0771666 162 -40.1323 24.6234 0.0775765 161 -39.7948 25.0227 0.0777795 194 -39.9629 24.6925 0.0778712 161 -39.8699 24.8084 0.0779188 245 -41.1316 24.5408 0.360801 134 -41.3806 24.5133 0.361448 134 -41.7235 24.4514 0.362301 135 -41.9869 24.4287 0.363 136 -42.3164 24.4426 0.363943 136 -42.636 24.3599 0.364706 137 -43.0134 24.3964 0.365824 159 -40.2406 24.9656 0.63934 148 -40.3646 24.7799 0.639415 148 -40.1891 25.1089 0.639631 148 -40.2082 25.2968 0.64069 148 -40.3248 25.8147 0.644127 149 -40.4984 25.6576 0.644697 149 -41.7196 24.8073 0.650167 151 -42.4345 25.8688 0.660776 153 -42.6723 25.5564 0.661165 154 +unknow 0.942842 1 0 27 -47.5756 -20.1122 0.065489 174 -44.4639 -20.2985 0.0730825 166 -44.3944 -20.4356 0.0730995 166 -44.3717 -20.3324 0.364176 179 -44.382 -20.5061 0.364441 255 -44.3139 -20.7286 0.364546 178 -44.2883 -20.8865 0.364688 209 -44.3019 -21.0634 0.364974 165 -44.3932 -21.3639 0.36566 137 -45.8356 -20.0531 0.368123 155 -46.3096 -20.0012 0.369461 155 -46.8465 -20.059 0.371129 141 -47.3344 -20.0924 0.372622 142 -48.1294 -20.1632 0.375078 143 -44.7235 -20.4035 0.656288 152 -44.6611 -20.5447 0.656307 152 -44.5999 -20.6866 0.656344 152 -44.5635 -20.9254 0.656968 152 -45.7401 -20.0905 0.663613 165 -46.2252 -20.044 0.667515 155 -46.6665 -20.0612 0.671289 156 -47.1507 -20.0939 0.675484 157 -47.6985 -20.062 0.67999 158 -46.5103 -21.2794 1.01487 126 -46.4523 -21.4296 1.01503 126 -47.4939 -20.4791 1.02395 127 -46.7313 -20.2908 1.27168 157 +unknow 0.835147 1 0 41 -46.4454 25.7502 -0.628473 146 -46.3387 25.5009 -0.625101 145 -46.2933 25.1923 -0.622139 145 -46.2314 24.9707 -0.619618 144 -46.1599 24.7449 -0.616939 144 -46.17 24.4709 -0.615047 144 -46.1051 24.2512 -0.612526 144 -45.9719 23.9969 -0.608808 143 -47.9718 24.3283 -0.283438 209 -46.2199 24.4536 -0.269783 194 -50.2048 24.1472 0.0539639 184 -49.81 24.2468 0.0548174 184 -48.1215 24.2714 0.0589295 219 -47.7224 24.2583 0.0599207 235 -47.3142 24.3319 0.0608237 238 -46.6517 24.3627 0.0623946 177 -46.0031 25.3267 0.0627 250 -45.986 25.1292 0.0630039 250 -46.3131 24.3712 0.0632048 248 -46.023 24.8685 0.0632587 255 -46.0286 24.685 0.0634858 252 -46.0812 24.5271 0.0635646 255 -46.1025 24.6365 0.374937 248 -46.0654 24.803 0.375084 252 -46.2238 24.5149 0.375101 201 -46.0024 25.0494 0.375281 235 -46.0165 25.2448 0.375621 217 -46.5373 24.4008 0.375825 209 -46.0507 25.452 0.376038 245 -46.0595 25.7409 0.376513 216 -46.8479 24.3762 0.376679 220 -47.198 24.3701 0.377674 218 -47.5628 24.3693 0.378721 225 -47.9609 24.2884 0.379749 205 -49.6905 24.2871 0.38475 150 -46.8337 24.943 0.691596 169 -47.0831 24.6031 0.692168 162 -46.8784 25.1563 0.692875 162 -47.2383 24.4957 0.692976 162 -46.9175 25.4628 0.69452 162 -47.032 25.7167 0.69655 163 +unknow 0.85264 1 0 37 -52.4564 -21.4961 0.0517051 187 -52.4477 -21.3004 0.0519286 187 -52.5123 -21.0389 0.0520314 187 -52.2426 -21.6005 0.0521381 186 -52.5409 -20.8591 0.05214 186 -52.6382 -20.2306 0.0525147 186 -52.6604 -20.0495 0.0526342 186 -52.5241 -20.3764 0.0526633 186 -51.8588 -21.633 0.0530744 186 -52.3779 -19.6601 0.0537328 185 -50.5976 -19.9049 0.0580426 181 -49.8638 -20.5234 0.380703 255 -50.0383 -20.1371 0.380752 255 -49.8231 -20.6899 0.380788 255 -50.1162 -19.9858 0.380803 181 -50.8604 -19.8213 0.382845 184 -51.9887 -19.8862 0.386322 168 -52.66 -19.8594 0.388319 167 -53.2991 -19.9096 0.390309 153 -50.0916 -20.2387 0.700873 164 -50.066 -20.5033 0.70157 164 -50.0402 -20.6765 0.701956 164 -50.3314 -20.1518 0.702613 206 -50.0415 -20.8613 0.702617 164 -50.3981 -19.995 0.702648 177 -50.7302 -19.8505 0.704992 165 -51.2512 -19.8686 0.709499 166 -51.7914 -19.8908 0.714188 167 -52.3752 -19.9262 0.719299 168 -53.0135 -19.8833 0.724629 170 -51.2622 -19.9421 1.0759 134 -51.3694 -19.7983 1.07666 134 -51.2743 -21.4458 1.08499 135 -53.0502 -19.9698 1.10248 137 -53.6803 -20.015 1.11207 138 -51.6699 -20.0603 1.36548 168 -51.6655 -21.0928 1.37339 174 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_7.pose b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_7.pose new file mode 100644 index 00000000000..c7b91c4a306 --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_7.pose @@ -0,0 +1 @@ +11994 588.919307 33.330290 45.010480 40.747756 -0.002180 -0.010939 -0.639941 0.768343 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_7.seg b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_7.seg new file mode 100644 index 00000000000..b5028313b6d --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_7.seg @@ -0,0 +1,31 @@ +unknow 0.744482 1 0 32 55.784 -22.5997 -1.73286 205 55.8473 -22.4213 -1.7326 150 55.8579 -21.9178 -1.72693 224 55.7336 -22.559 -1.42151 211 55.8042 -22.3838 -1.42151 164 55.8961 -22.1154 -1.42113 133 55.8718 -21.7007 -1.41641 156 55.6898 -23.5402 -1.0257 255 55.6953 -23.3366 -1.02418 255 55.7332 -23.147 -1.02341 255 55.7954 -22.8651 -1.02239 255 55.8206 -22.6709 -1.02137 255 55.8563 -22.4813 -1.02059 255 55.897 -22.2939 -1.01994 255 55.9865 -22.0244 -1.01961 255 56.0498 -21.8462 -1.01949 255 56.9814 -24.585 -0.769414 164 56.998 -23.3276 -0.761979 163 55.9664 -23.4199 -0.747527 192 56.012 -23.2324 -0.747054 188 55.906 -22.4711 -0.740974 160 55.7907 -22.6285 -0.740219 166 55.8282 -24.9698 -0.350656 207 55.6856 -25.1163 -0.350018 254 56.5324 -23.0787 -0.349775 207 55.7143 -24.7092 -0.34874 206 55.8027 -24.4343 -0.348465 206 55.7934 -24.0137 -0.346859 206 56.0441 -23.1882 -0.346035 206 55.8194 -23.7138 -0.346 215 55.89 -23.5368 -0.345963 236 55.9341 -23.3488 -0.345671 205 +unknow 0.596232 1 0 33 53.7282 4.98019 -1.87101 189 53.6381 4.80196 -1.86693 188 55.8303 5.53707 -1.60096 133 55.5493 5.24485 -1.59103 126 55.4301 5.05791 -1.58665 122 55.9211 5.56718 -1.31486 110 55.1704 5.23038 -1.29372 174 54.6928 5.01203 -1.28028 176 54.1925 4.79481 -1.26625 179 56.9941 5.96489 -0.961153 238 56.7301 5.75703 -0.955361 211 55.7277 5.3896 -0.934269 191 54.95 5.13983 -0.917991 175 54.3147 4.90803 -0.90465 243 56.5687 5.50088 -0.687015 197 56.1721 5.7298 -0.681157 199 55.3791 5.21015 -0.667937 255 55.0586 5.00571 -0.662618 186 56.3687 5.79623 -0.309521 224 55.7558 5.55597 -0.30374 223 55.5783 5.27381 -0.301881 236 54.4694 4.99542 -0.291576 255 55.4315 5.38084 0.0541106 252 54.7511 5.14156 0.0560292 217 54.2249 4.8347 0.0575415 229 54.2635 4.92164 0.382207 209 55.4342 5.29187 0.38608 225 53.8831 4.79096 0.701198 238 54.3548 5.06875 1.06904 165 54.5477 4.91403 1.07185 155 54.6599 4.62761 1.35319 202 54.7231 4.89274 1.35499 196 55.0639 5.09745 1.36248 167 +unknow 0.575052 1 0 14 55.7811 -10.9193 -1.62479 155 55.6914 -10.7202 -1.62073 118 55.715 -10.5434 -1.62041 94 55.5473 -9.7005 -1.61021 93 55.489 -9.87007 -1.60931 165 55.3925 -10.2124 -1.60822 93 55.5057 -9.42395 -1.60737 93 55.7243 -10.7055 -1.32975 111 55.378 -10.1885 -1.31793 110 55.4311 -9.83856 -1.31766 152 55.4335 -9.56974 -1.31647 192 55.8851 -9.80935 -0.949703 178 55.4446 -9.91186 -0.941217 255 55.3266 -10.0703 -0.939423 230 +unknow 0.82688 1 0 40 52.8542 -25.488 -1.68418 154 52.8294 -25.2719 -1.68044 126 52.8381 -25.0724 -1.67792 128 52.876 -24.7858 -1.67509 149 52.8611 -24.5766 -1.6718 155 52.8563 -24.3728 -1.66889 155 52.9142 -24.0978 -1.66689 155 52.9131 -23.8969 -1.66418 160 52.9076 -23.6947 -1.66135 161 52.9398 -23.5097 -1.65986 139 52.9566 -23.2191 -1.65657 180 52.9633 -23.0239 -1.65425 156 53.3199 -22.0916 -1.65309 120 52.9766 -22.8321 -1.65218 139 53.2097 -22.2421 -1.65167 95 53.0419 -22.368 -1.64825 223 52.9327 -25.5041 -1.38439 114 52.802 -25.6458 -1.38287 114 52.7975 -25.0313 -1.37556 173 52.819 -24.7373 -1.37268 191 52.8293 -24.54 -1.37068 157 52.8208 -24.3346 -1.36813 155 52.8531 -24.0481 -1.36569 205 52.8737 -23.8572 -1.36406 169 52.8772 -23.6591 -1.36195 176 52.8837 -23.4629 -1.35994 177 52.9369 -23.1885 -1.35826 177 52.9563 -22.999 -1.35669 142 53.1452 -22.3897 -1.3549 112 52.9863 -22.5189 -1.3523 178 52.9601 -25.5957 -0.992243 183 52.9501 -25.3861 -0.990202 183 52.9628 -25.1878 -0.988692 183 52.9747 -24.9898 -0.987181 183 53.0321 -24.712 -0.985834 183 53.1166 -24.0442 -0.981711 182 53.1376 -23.1545 -0.974731 181 53.0152 -23.2996 -0.97363 181 52.8336 -23.5175 -0.972039 181 53.0366 -25.3958 -0.718155 157 +unknow 0.945427 1 0 34 49.9465 -28.9126 -1.65297 107 50.0094 -28.7396 -1.65194 95 50.0028 -28.3195 -1.64504 147 50.038 -28.0289 -1.64143 156 50.0507 -27.8298 -1.63866 150 51.2703 -25.4235 -1.63736 94 50.0556 -27.6271 -1.63562 142 50.7037 -25.3416 -1.61982 94 50.1324 -26.4495 -1.61976 173 50.1462 -26.2557 -1.61724 160 50.1255 -26.0446 -1.6135 150 50.3821 -25.4784 -1.61253 128 50.2163 -25.593 -1.60944 141 49.999 -29.2351 -1.36169 161 49.9269 -28.878 -1.35513 162 49.9163 -28.4547 -1.34917 182 49.9715 -28.1749 -1.34673 215 49.9639 -27.9641 -1.34375 208 51.2521 -25.3917 -1.34211 112 49.9729 -27.7632 -1.34131 206 49.9828 -27.5636 -1.33892 163 50.7733 -25.3532 -1.33003 111 50.1787 -26.4505 -1.32927 111 50.3838 -25.456 -1.32184 186 50.2235 -25.5732 -1.3194 223 50.1251 -25.7218 -1.31886 204 50.0839 -27.6995 -0.959849 238 50.1181 -27.5132 -0.958625 206 50.8331 -25.9626 -0.956703 179 50.5432 -26.0152 -0.95193 179 50.2559 -26.3687 -0.950053 249 50.3048 -26.1931 -0.949278 178 51.2155 -28.7134 -0.716778 157 50.1896 -28.8677 -0.703931 156 +unknow 0.870968 1 0 46 47.9259 30.1865 -2.33499 224 47.8993 29.4389 -2.31624 198 47.9847 29.2841 -2.31588 186 47.9871 28.976 -2.30879 208 47.85 28.6884 -2.29685 213 47.8799 28.5021 -2.29371 255 46.3069 30.0886 -2.27134 184 46.1964 28.5916 -2.23113 181 45.9742 28.6541 -2.22413 204 48.9528 28.4162 -1.97277 196 48.248 28.5163 -1.95127 194 47.8507 28.4849 -1.93748 193 47.55 28.5088 -1.928 193 47.169 28.5835 -1.9169 192 46.8657 28.6015 -1.90727 191 45.8162 28.6576 -1.87398 197 45.6718 28.7673 -1.87151 189 45.571 28.9043 -1.87105 189 49.1926 28.4635 -1.62431 152 48.73 28.4003 -1.61039 170 48.3769 28.3983 -1.60052 178 47.9882 28.4748 -1.59097 161 47.6549 28.4797 -1.58182 180 47.3066 28.4735 -1.57208 179 46.9346 28.5516 -1.56311 177 46.601 28.5495 -1.55389 158 45.6726 29.5843 -1.54634 135 46.2764 28.5508 -1.54499 169 45.6359 29.3573 -1.54137 124 45.7097 29.1011 -1.53892 148 45.9751 28.6648 -1.53867 205 45.7147 28.9029 -1.53564 220 49.0642 28.413 -1.32822 149 48.7294 28.424 -1.32053 185 48.3743 28.4211 -1.31218 155 48.0352 28.5274 -1.30573 110 47.7068 28.5356 -1.29819 109 46.6588 28.6104 -1.27494 108 46.7382 28.4575 -1.27462 108 48.5579 28.6533 -0.942115 178 47.328 29.8664 -0.933575 177 47.203 29.5805 -0.928315 199 47.2111 29.2765 -0.925176 236 47.2092 29.0703 -0.922933 239 47.4258 28.6924 -0.922692 255 47.2355 28.8822 -0.921385 237 +unknow 0.893465 1 0 40 41.7111 18.941 -2.11023 108 41.5987 18.3412 -2.09263 107 41.4189 18.5736 -2.08909 107 41.5748 18.0972 -2.08656 107 41.3364 18.381 -2.0813 107 41.4829 17.9024 -2.07837 107 41.4581 17.7375 -2.07392 107 41.4731 17.59 -2.07169 107 43.5438 19.6427 -1.93647 164 41.0744 18.372 -1.81186 156 40.9475 18.1609 -1.8028 155 41.0247 17.8109 -1.79966 155 41.0677 17.6764 -1.79903 155 40.9239 17.9968 -1.79885 155 43.5644 19.7426 -1.63457 172 41.0641 18.3785 -1.52508 163 41.0212 18.2049 -1.52084 255 40.8476 17.9746 -1.51114 255 41.1423 17.1861 -1.5096 255 40.9688 17.3409 -1.50575 255 40.9031 17.4648 -1.50528 255 40.8278 17.5846 -1.50444 255 41.2212 18.5233 -1.24882 78 40.9963 18.2675 -1.23882 78 41.0407 18.1329 -1.23837 167 41.0442 17.7505 -1.23354 110 40.9455 17.9373 -1.23302 110 41.0649 17.6065 -1.23232 104 41.6551 18.5909 -1.02788 93 41.4463 18.3419 -1.01997 121 41.3993 18.1659 -1.01688 158 41.4276 17.946 -1.0152 161 41.5911 17.4763 -1.01428 132 41.4452 17.7992 -1.01406 159 41.4972 17.6674 -1.01396 161 42.6774 18.8495 -0.526618 131 42.7181 18.6274 -0.525802 131 42.7195 18.4686 -0.524827 131 42.7534 18.324 -0.524419 131 42.8319 18.1193 -0.524295 131 +unknow 0.822309 1 0 46 33.7466 -9.62154 -1.765 198 33.7555 -9.50954 -1.76377 139 33.7361 -8.59534 -1.74937 131 33.7056 -8.3063 -1.74375 191 33.3683 -9.00602 -1.73521 108 33.1799 -9.06723 -1.72588 149 33.7077 -9.70835 -1.56675 86 33.6623 -9.46655 -1.56118 126 33.6545 -9.06616 -1.55541 107 33.7018 -8.68257 -1.55278 85 33.6747 -8.56283 -1.54995 85 33.7128 -8.40356 -1.54984 85 33.464 -9.24065 -1.54843 129 33.6265 -8.26985 -1.54397 85 33.2347 -9.06485 -1.53487 233 33.7007 -9.63872 -1.36522 154 33.6904 -9.52142 -1.36334 182 33.6875 -9.40642 -1.36181 161 33.6953 -8.89721 -1.35615 217 33.6924 -8.72684 -1.35409 201 33.7117 -8.50619 -1.35247 125 33.6577 -8.60515 -1.35121 163 33.7068 -8.33624 -1.3504 125 33.4471 -8.94434 -1.34592 154 33.3363 -9.13957 -1.3434 186 33.251 -9.00407 -1.33811 255 33.6321 -8.69094 -1.12996 131 33.5624 -8.56047 -1.12611 130 33.5636 -8.39249 -1.12457 130 33.2567 -8.98494 -1.11887 130 33.1531 -9.06875 -1.11586 223 33.7568 -8.68125 -0.915532 63 33.5658 -8.91387 -0.91147 110 33.304 -8.95664 -0.903667 245 33.2115 -9.21207 -0.902958 187 33.1947 -9.03922 -0.900958 232 33.8306 -8.77977 -0.738961 242 33.827 -8.66549 -0.738093 74 33.7406 -8.92628 -0.737607 208 33.1866 -9.11485 -0.724437 241 33.2277 -8.90201 -0.724002 215 33.1494 -8.9927 -0.722594 234 33.3703 -9.00549 -0.497203 255 33.2531 -9.08611 -0.495327 255 33.3495 -8.96028 -0.335947 102 33.2903 -9.05658 -0.335443 150 +unknow 0.930857 1 0 48 28.9921 -20.3632 -1.78403 132 29.5379 -19.5233 -1.78279 124 28.7923 -20.5625 -1.78133 127 28.8568 -20.4719 -1.78133 126 29.4199 -19.5785 -1.77897 119 28.6821 -20.6202 -1.77818 169 28.4376 -20.9225 -1.77706 170 31.9937 -19.8525 -1.69721 92 31.7602 -19.8459 -1.68699 101 29.295 -21.0416 -1.61697 88 28.8853 -20.954 -1.59754 87 29.717 -19.6229 -1.59379 127 28.8751 -20.6022 -1.58671 87 29.5073 -19.6177 -1.58479 134 28.7703 -20.3912 -1.57619 95 32.2066 -19.8973 -1.4913 135 31.9606 -19.8845 -1.48161 134 29.9126 -19.6714 -1.39892 128 29.7623 -19.7069 -1.39416 128 28.6539 -20.4996 -1.37333 255 28.6513 -20.3621 -1.36965 255 28.771 -20.109 -1.36749 184 28.6319 -20.2133 -1.36507 255 32.2862 -19.9268 -1.25352 141 31.9452 -19.8549 -1.24088 164 30.9667 -19.7214 -1.2062 137 30.7096 -19.6933 -1.19726 136 29.7363 -19.8017 -1.16813 134 28.8997 -20.997 -1.16798 134 29.7783 -19.695 -1.16721 134 28.833 -20.7414 -1.16012 133 28.846 -20.6135 -1.15766 148 28.846 -20.3408 -1.15157 157 28.7086 -20.3792 -1.1481 149 29.1345 -20.9052 -0.947937 64 29.0534 -20.7093 -0.942132 64 28.991 -20.5279 -0.937102 71 31.6569 -19.8593 -0.804577 79 31.3806 -19.8925 -0.798723 78 31.2119 -19.9232 -0.795308 78 29.7524 -21.0271 -0.779156 88 30.0375 -19.7758 -0.766418 76 29.9586 -19.859 -0.765876 76 31.2436 -20.1135 -0.37732 145 31.0278 -20.1819 -0.375053 129 30.7242 -20.4686 -0.373542 125 30.8773 -20.2222 -0.373415 127 30.7919 -20.3048 -0.373006 126 +unknow 0.87545 1 0 77 27.883 26.465 -2.18246 131 24.996 24.728 -2.17605 105 27.6556 26.4981 -2.17363 172 25.038 24.6144 -2.17267 97 25.1095 24.53 -2.17213 138 25.2076 24.3947 -2.1705 107 25.2525 24.285 -2.16752 140 25.3128 24.1904 -2.16603 108 27.4687 26.4851 -2.16468 144 27.2778 26.4672 -2.15536 145 27.0529 26.4977 -2.14666 136 26.8643 26.4789 -2.13746 178 26.1732 24.5337 -2.0225 114 25.955 24.483 -2.01045 116 27.3405 24.7374 -1.86492 127 27.0601 24.7164 -1.85244 128 26.8442 24.6742 -1.84187 146 26.6083 24.6118 -1.82973 174 26.3696 24.6224 -1.82029 161 26.1219 24.545 -1.80713 127 25.3794 25.2356 -1.80409 227 25.4018 25.0996 -1.7996 175 25.5781 24.8798 -1.79802 131 25.6432 24.7868 -1.79701 153 25.6317 24.6203 -1.79004 255 27.6714 24.7414 -1.66991 90 27.4777 24.7241 -1.66201 90 27.2384 24.6643 -1.65098 90 26.9788 24.6618 -1.64117 89 26.7393 24.5977 -1.63004 102 26.527 24.5569 -1.62073 108 26.3935 24.6653 -1.61951 88 26.08 24.5265 -1.60312 88 25.4074 24.9696 -1.59411 100 25.846 24.4602 -1.5922 101 25.4976 24.8231 -1.59219 87 25.5396 24.7082 -1.58966 87 25.5854 24.5974 -1.58744 87 25.6952 24.4711 -1.58703 106 27.1588 24.6873 -1.43912 131 26.8965 24.6812 -1.43023 130 26.6883 24.6448 -1.42224 130 26.4835 24.6101 -1.41443 129 26.2085 24.5855 -1.40465 143 25.5298 25.1844 -1.40132 156 25.5911 25.0079 -1.39773 145 25.8986 24.6024 -1.39504 221 25.6223 24.8815 -1.39477 145 25.6974 24.7981 -1.39459 152 25.7536 24.6965 -1.39324 192 27.8028 24.822 -1.22742 139 27.6057 24.8024 -1.22126 138 27.3389 24.7967 -1.21348 138 27.0659 24.7048 -1.20331 144 26.1131 25.6243 -1.20098 145 26.1262 25.4766 -1.19736 136 26.1524 25.2631 -1.19236 136 26.7687 24.5884 -1.19183 136 26.6781 24.6602 -1.19113 136 26.1725 25.1241 -1.1892 136 26.2224 25.0141 -1.18766 136 26.4651 24.6957 -1.18604 135 26.2963 24.8491 -1.18535 135 26.3728 24.765 -1.18527 135 27.5797 25.2372 -0.996859 67 27.6288 25.0438 -0.99383 66 26.6352 26.038 -0.992465 66 26.8008 24.8349 -0.969583 65 26.9831 26.0105 -0.807208 79 26.9477 25.8136 -0.80282 79 27.6852 24.9792 -0.80207 79 26.9674 25.5901 -0.799028 78 26.9793 25.4408 -0.796482 78 27.0124 25.3122 -0.794749 78 27.0683 25.1262 -0.79242 78 27.208 24.9394 -0.791772 78 27.0927 24.9909 -0.790416 78 +unknow 0.970855 1 0 182 24.8508 -19.4968 -1.75578 116 24.7847 -19.571 -1.75541 162 24.7012 -19.6314 -1.75367 112 24.5416 -19.821 -1.75329 117 24.4151 -19.9736 -1.75317 119 24.5898 -19.7326 -1.75217 155 24.4545 -19.8779 -1.7513 152 24.2776 -20.0528 -1.74969 156 24.2084 -20.1238 -1.74919 120 23.7618 -20.457 -1.74136 105 23.6636 -20.5674 -1.74123 121 23.5674 -20.614 -1.73862 148 23.498 -20.684 -1.73825 118 23.2947 -20.832 -1.73489 114 23.357 -20.756 -1.73465 150 23.1008 -20.9874 -1.73241 118 23.1965 -20.8756 -1.73216 148 23.0009 -21.0289 -1.72955 146 23.6294 -19.7677 -1.7073 108 23.1992 -19.5939 -1.67983 103 23.0302 -19.7003 -1.6761 114 23.06 -19.6007 -1.67349 122 26.1116 -19.6598 -1.62955 180 25.9844 -19.6923 -1.62494 148 25.6723 -19.7753 -1.61381 114 25.599 -19.8473 -1.61303 144 25.7089 -19.6751 -1.61202 133 24.1677 -21.2298 -1.60043 128 25.3085 -19.814 -1.59897 156 25.1347 -19.8057 -1.59099 149 24.9127 -19.7582 -1.57952 211 24.7411 -19.7492 -1.57165 154 23.3219 -21.2795 -1.56682 144 23.4071 -21.156 -1.56569 144 24.514 -19.7579 -1.56198 179 23.4214 -21.0357 -1.56176 212 24.3168 -19.7255 -1.5522 185 23.5177 -20.5293 -1.54692 122 24.1262 -19.6971 -1.54287 178 23.9144 -19.7129 -1.53421 181 23.7278 -19.6847 -1.52511 189 23.514 -19.6326 -1.51398 133 23.3296 -19.6661 -1.50723 145 23.1762 -19.6618 -1.50049 131 22.9704 -19.7369 -1.49441 238 22.9867 -19.6257 -1.49104 115 26.3169 -19.662 -1.45394 178 26.1577 -19.6713 -1.44777 224 25.7058 -19.6491 -1.42885 110 25.5727 -19.6748 -1.42429 228 25.3703 -19.6461 -1.41529 147 25.1375 -19.6559 -1.40628 161 24.9596 -19.6432 -1.39879 160 24.782 -19.6297 -1.39131 159 24.6109 -19.6202 -1.38422 164 24.4187 -19.6557 -1.37775 165 24.2343 -19.6329 -1.36975 161 24.0626 -19.6192 -1.36257 158 23.8713 -19.651 -1.35609 160 23.6849 -19.6226 -1.34789 151 23.3899 -19.6271 -1.33656 148 23.0178 -19.6247 -1.32209 75 22.8849 -19.6357 -1.31733 123 22.7091 -19.6713 -1.31177 184 22.3213 -20.0207 -1.30873 75 22.5976 -19.6992 -1.30843 159 22.326 -19.8986 -1.30479 81 22.3749 -19.8164 -1.30387 106 26.4022 -19.6536 -1.26918 147 26.2683 -19.6826 -1.26514 157 26.0483 -19.6461 -1.25625 134 25.8139 -19.661 -1.24826 128 25.6489 -19.663 -1.24242 117 25.4525 -19.6399 -1.23479 229 25.2675 -19.6243 -1.22779 206 25.0394 -19.6372 -1.22007 206 24.8693 -19.6304 -1.21387 206 24.698 -19.6215 -1.20759 205 24.4914 -19.6465 -1.20103 209 24.3175 -19.6331 -1.19457 210 24.144 -19.6188 -1.1881 213 23.9524 -19.6513 -1.18236 212 23.7888 -19.6426 -1.17643 208 23.5978 -19.6101 -1.16889 190 22.2838 -20.6911 -1.15659 196 23.1308 -19.6564 -1.15416 110 22.303 -20.5142 -1.15183 202 22.3024 -20.3848 -1.14788 208 22.9383 -19.6174 -1.14644 255 22.3086 -20.2623 -1.14438 205 22.7926 -19.6796 -1.1433 203 22.3414 -20.1009 -1.14061 207 22.6748 -19.7027 -1.13998 201 22.3702 -20 -1.13854 209 22.5586 -19.7265 -1.13674 215 22.3881 -19.8898 -1.13585 214 22.4635 -19.7683 -1.13477 216 26.3004 -19.6798 -1.05717 124 26.1236 -19.6757 -1.05162 172 25.8722 -19.6139 -1.04245 236 25.6764 -19.6565 -1.03744 206 25.488 -19.6394 -1.03127 231 25.3125 -19.6311 -1.02573 202 25.0892 -19.6478 -1.01933 235 24.9113 -19.6349 -1.01363 205 24.7118 -19.6036 -1.00685 233 24.524 -19.6436 -1.00214 203 24.344 -19.6251 -0.996288 238 24.183 -19.6208 -0.991356 210 24.013 -19.6081 -0.985962 210 23.8186 -19.637 -0.980875 215 23.6507 -19.6236 -0.975558 208 23.4955 -19.6196 -0.970857 203 23.2837 -19.6295 -0.964846 230 22.3643 -20.5382 -0.961377 197 23.1381 -19.6314 -0.960608 209 22.3697 -20.4139 -0.958295 202 23.0065 -19.6442 -0.957063 213 22.3686 -20.2844 -0.954904 208 22.8704 -19.6525 -0.953287 211 22.406 -20.1266 -0.951899 253 22.42 -20.0122 -0.949356 187 22.6961 -19.6893 -0.949125 219 22.4454 -19.9085 -0.94743 218 22.5905 -19.7223 -0.946891 238 22.5134 -19.78 -0.94612 241 25.9815 -19.8464 -0.845844 59 25.6843 -19.7478 -0.836298 179 25.3707 -19.6341 -0.826044 116 24.907 -19.7173 -0.815918 58 24.6995 -19.6797 -0.809921 188 24.4911 -19.7032 -0.805148 183 24.3296 -19.6997 -0.80102 149 24.1435 -19.6751 -0.795861 146 23.9424 -19.6998 -0.791346 144 22.5476 -21.1275 -0.787926 115 23.7757 -19.6883 -0.78696 150 23.6123 -19.6786 -0.782704 147 23.4259 -19.7112 -0.77877 145 22.4114 -20.6722 -0.774705 255 23.2631 -19.6995 -0.774513 152 22.3833 -20.5167 -0.770642 255 23.1037 -19.6896 -0.770385 150 22.9931 -19.7205 -0.768321 106 22.3826 -20.3871 -0.767804 255 22.4973 -20.1706 -0.76587 121 22.7787 -19.8493 -0.765806 203 22.3804 -20.1931 -0.763548 243 22.4665 -20.0162 -0.761807 149 22.5172 -19.9349 -0.761291 98 22.5793 -19.8009 -0.759937 122 25.4264 -19.8259 -0.665543 69 25.1978 -19.9034 -0.661966 90 24.4553 -20.0764 -0.649227 68 24.1919 -20.1158 -0.644403 83 24.3093 -19.7652 -0.640825 67 23.5893 -19.7396 -0.625323 66 22.4851 -20.889 -0.623478 113 22.4642 -20.6731 -0.619088 134 23.2266 -19.748 -0.61795 66 22.4686 -20.547 -0.616865 131 22.6278 -20.3686 -0.616811 111 22.505 -20.4508 -0.615835 166 22.6589 -20.268 -0.615619 136 23.0976 -19.7636 -0.615565 238 22.6911 -20.1688 -0.614481 125 22.7289 -20.0749 -0.613559 118 22.9407 -19.8173 -0.613289 169 22.8286 -19.8459 -0.6115 101 24.9136 -19.9495 -0.443202 110 23.5111 -21.1148 -0.436754 109 24.4739 -19.8515 -0.434959 130 23.3728 -20.8586 -0.431163 108 23.3783 -20.7321 -0.429531 108 23.4051 -20.5597 -0.427613 107 23.8345 -19.8985 -0.425492 107 23.3625 -20.3928 -0.424716 107 23.3705 -20.2709 -0.423206 107 23.6058 -19.8973 -0.421901 209 23.3644 -20.1374 -0.421329 113 23.502 -19.9365 -0.420799 143 24.0735 -20.4989 -0.290092 94 +unknow 0.777763 1 0 66 19.1963 -17.7316 -1.71023 202 18.8443 -17.5713 -1.68323 231 18.7338 -17.5785 -1.67766 182 17.7982 -17.5613 -1.62718 171 17.541 -17.5261 -1.61193 152 19.0755 -17.6108 -1.55161 200 18.5975 -17.5527 -1.52518 80 18.1806 -17.5416 -1.50417 151 18.0752 -17.55 -1.49943 151 17.8839 -17.529 -1.48913 146 17.7449 -17.5025 -1.48114 181 17.6572 -17.5259 -1.47802 87 17.5723 -17.5517 -1.47517 122 17.4031 -17.6579 -1.47219 91 19.0258 -17.4986 -1.39853 100 18.9122 -17.504 -1.39356 119 18.764 -17.5316 -1.38796 208 18.7088 -17.5904 -1.38796 130 18.087 -17.4933 -1.35577 195 17.9791 -17.4985 -1.35117 130 17.7532 -17.5521 -1.34346 189 17.6909 -17.6007 -1.34284 101 17.7969 -17.485 -1.34247 138 17.4147 -17.5999 -1.33066 108 17.4263 -17.5012 -1.32681 120 18.7975 -17.5406 -1.23684 110 18.2544 -17.6341 -1.21829 230 18.3891 -17.3775 -1.21379 185 18.378 -17.2582 -1.20873 136 18.047 -17.5439 -1.20637 183 17.6701 -17.5599 -1.19187 123 17.5632 -17.619 -1.18996 118 18.8693 -17.407 -1.09026 65 18.7213 -17.4344 -1.0857 158 18.633 -17.4617 -1.08337 149 18.139 -17.7636 -1.07589 166 18.2521 -17.5956 -1.07406 165 18.2906 -17.2485 -1.06334 238 18.2305 -17.3003 -1.06293 116 17.7437 -17.7625 -1.06162 231 17.8287 -17.5693 -1.05777 153 17.4728 -17.6011 -1.04613 98 18.4008 -17.3082 -0.925301 255 18.4171 -17.2149 -0.922966 132 17.9629 -17.6569 -0.921977 181 18.2766 -17.3001 -0.920991 156 17.9396 -17.5236 -0.91704 204 17.9875 -17.4056 -0.914885 232 18.0378 -17.3449 -0.914616 255 18.4777 -17.451 -0.770572 153 18.5687 -17.1545 -0.765332 155 18.4453 -17.2022 -0.763097 219 18.33 -17.2026 -0.75986 193 17.876 -17.5314 -0.756006 185 17.9198 -17.4093 -0.753926 205 17.9687 -17.3474 -0.753618 240 18.2907 -17.2536 -0.602249 214 17.9065 -17.5408 -0.599733 170 17.9501 -17.4186 -0.597992 191 17.9918 -17.3497 -0.597411 227 17.9298 -17.6207 -0.47295 123 17.9122 -17.493 -0.470186 187 17.9643 -17.3791 -0.469047 210 18.0364 -17.5877 -0.305966 156 18.1393 -17.4123 -0.304987 221 18.0802 -17.4651 -0.304864 206 +unknow 0.608751 1 0 21 18.6235 22.7411 -1.94986 194 18.5355 22.7794 -1.94795 209 17.7752 22.8543 -1.91743 200 17.5983 22.7743 -1.90482 230 17.447 22.8 -1.89954 216 17.3234 22.7865 -1.89323 214 18.6869 22.8416 -1.79244 110 18.556 22.8274 -1.78607 99 17.7475 22.8405 -1.7526 88 17.5965 22.7934 -1.74379 110 17.4501 22.8253 -1.73945 104 17.7762 22.8084 -1.58933 115 17.6421 22.7837 -1.58299 116 18.7074 22.8385 -1.45121 200 17.83 22.9181 -1.42389 123 17.5057 23.019 -1.41726 235 17.5737 22.7353 -1.40692 223 17.4986 22.7857 -1.40658 190 17.9415 22.9486 -1.26516 208 17.8015 23.1411 -1.10183 134 17.8411 23.0423 -1.0994 202 +unknow 0.882187 1 0 812 14.6385 -1.37241 -1.76792 179 14.1935 -1.12372 -1.35364 125 14.1013 -1.17186 -1.2628 214 14.0506 -1.05671 -1.25657 255 14.0375 -1.12229 -1.25574 255 14.0241 -1.01047 -1.25345 245 14.6053 -1.28238 -1.23686 95 14.111 -1.17972 -1.10847 222 13.9167 0.128539 -1.08579 81 14.1361 -1.21192 -1.02091 133 14.1218 -1.14365 -1.01918 255 14.0432 -1.04836 -1.01173 255 14.0359 -1.09216 -1.01138 255 14.0321 -0.981032 -1.01034 255 13.9695 -0.932443 -1.00463 255 14.1704 -1.22335 -0.948761 94 14.1203 -1.15212 -0.944203 255 14.1063 -0.995018 -0.942087 255 14.096 -1.10563 -0.941924 255 14.1074 -0.950567 -0.941924 255 14.1023 -0.905747 -0.941272 255 14.0756 -1.05958 -0.939971 193 14.0427 -0.83561 -0.936064 250 14.1566 -1.11932 -0.832566 158 14.1413 -1.20755 -0.83198 157 14.0503 -1.04411 -0.82435 184 14.0535 -0.999971 -0.82435 218 14.0506 -0.955401 -0.82391 244 14.0536 -0.911244 -0.823909 207 13.998 -0.841312 -0.819508 226 14.1592 -1.1395 -0.753136 110 14.1237 -1.18138 -0.750968 124 14.0569 -1.06482 -0.745818 130 14.0474 -0.975397 -0.744734 255 14.0423 -1.01939 -0.744599 255 14.0479 -0.908943 -0.744462 255 14.0486 -0.86469 -0.744327 255 14.0498 -0.776189 -0.744055 255 14.0434 -0.709485 -0.743377 215 14.0214 -0.818864 -0.742294 248 14.0932 -1.17303 -0.669479 71 14.087 1.22305 -0.669343 157 14.0471 -1.12467 -0.666372 147 14.0217 -1.01181 -0.664258 255 14.0248 -0.967751 -0.664258 255 14.0148 -1.07771 -0.664134 178 14.0198 -0.923147 -0.663761 255 14.022 -0.856945 -0.663636 255 14.0211 -0.768487 -0.663263 255 13.9967 -0.81122 -0.661896 250 13.9557 -0.720807 -0.659036 201 14.2001 -1.1963 -0.591603 95 14.1346 1.21276 -0.587993 121 14.1427 -1.03511 -0.587668 255 14.1379 -0.990135 -0.587218 255 14.141 -0.945714 -0.587218 255 14.1222 -1.14521 -0.586994 206 14.1257 -1.10084 -0.586993 120 14.0825 1.14135 -0.584733 211 14.0895 -0.8757 -0.584069 255 14.0901 -0.831319 -0.583957 235 14.0807 -0.786403 -0.583282 243 14.0771 -0.741859 -0.582944 149 14.0665 -0.67487 -0.582157 255 14.0087 -0.628103 -0.578784 190 14.15 -1.19935 -0.509092 175 14.1435 1.25114 -0.508978 109 14.1154 -1.10706 -0.506967 142 14.0761 -1.14841 -0.505146 89 14.077 -1.05949 -0.504842 255 14.0656 1.17763 -0.504729 166 14.0582 1.04372 -0.503819 255 14.0568 0.888347 -0.503213 255 14.0289 1.08592 -0.502503 218 14.0195 1.12951 -0.502199 199 14.0141 -0.988236 -0.501401 255 14.0172 -0.944205 -0.501401 255 14.0161 -0.8999 -0.501198 255 14.0111 0.973948 -0.501188 95 14.0182 -0.833719 -0.501097 255 14.0187 -0.78956 -0.500995 255 14.0165 -0.679032 -0.50059 255 14.0223 -0.546902 -0.500589 255 14.0166 -0.634901 -0.500489 255 14.0222 -0.436623 -0.500386 255 14.0052 -0.744637 -0.500186 255 14.0125 -0.5906 -0.500185 255 14.0131 0.576672 -0.500179 255 14.0155 -0.392331 -0.499982 255 14.0189 0.0260754 -0.499878 255 14.0112 0.466408 -0.499876 255 14.0089 0.532429 -0.499875 255 13.9951 0.818367 -0.499874 255 14.0118 0.180151 -0.499574 255 14.0008 -0.479952 -0.499375 240 13.9844 0.267737 -0.498258 178 14.2417 1.25533 -0.432535 53 14.1871 -1.11735 -0.429585 255 14.1678 -1.20547 -0.429047 172 14.1297 -1.1576 -0.427161 110 14.0997 -0.999284 -0.425275 255 14.0909 -0.954195 -0.424736 255 14.0878 -0.909548 -0.424466 255 14.0666 -1.04142 -0.423928 216 14.08 -0.842457 -0.423927 255 14.081 -0.753767 -0.423747 255 14.0666 -0.797344 -0.423209 255 14.0705 -0.642454 -0.423029 230 14.0105 -0.683936 -0.420425 255 14.1654 1.17531 -0.338615 55 14.1107 -1.2064 -0.336624 152 14.0785 -1.15905 -0.335237 105 14.0722 -1.11401 -0.334851 151 14.0805 -1.00344 -0.334851 255 14.0716 -0.95837 -0.334388 255 14.0515 1.12163 -0.334069 139 14.0626 -0.913362 -0.333926 255 14.0414 -0.801242 -0.332846 255 14.0218 -1.0656 -0.332771 200 14.0049 -0.843243 -0.331537 255 14.0122 -0.711209 -0.331536 255 14.0094 0.764695 -0.331528 255 13.9972 0.962666 -0.331527 242 13.999 0.874451 -0.331374 169 14.0216 -0.138414 -0.331225 222 13.9922 0.918169 -0.331219 217 13.9919 -0.754235 -0.330843 255 13.985 0.807474 -0.330681 119 13.9872 -0.555777 -0.330302 125 13.983 0.653203 -0.330296 187 13.9857 -0.489708 -0.330148 255 13.9758 0.718894 -0.330142 178 13.9809 0.565101 -0.330066 167 13.979 0.609024 -0.330065 188 13.9832 -0.445636 -0.329994 216 13.9785 -0.401517 -0.329762 211 13.9782 -0.335586 -0.329685 204 13.9726 0.520825 -0.32968 165 13.9732 -0.291537 -0.329453 200 13.9741 -0.24764 -0.329453 206 13.9728 -0.203708 -0.329376 204 13.9662 0.410801 -0.329296 127 13.9629 0.454611 -0.329218 165 13.9643 0.0157997 -0.32899 119 14.1031 -1.17554 -0.247585 239 14.0931 1.22189 -0.247379 40 14.0649 -1.12795 -0.24623 247 14.0524 -1.08256 -0.245714 235 14.0595 -0.927723 -0.245585 255 14.0465 1.10666 -0.245574 113 14.0514 -1.0159 -0.245521 255 14.0525 -0.971619 -0.245456 255 14.0399 0.950903 -0.244995 255 14.025 1.14928 -0.244993 234 14.0463 -0.81615 -0.244939 255 14.0313 1.01675 -0.244865 255 14.026 1.06067 -0.2448 211 14.0415 0.796001 -0.244737 255 14.0445 -0.661203 -0.244616 255 14.0403 -0.705222 -0.244552 255 14.0325 -0.616492 -0.244164 255 14.0169 0.905072 -0.244156 255 14.0178 -0.858733 -0.244101 255 14.0338 -0.417888 -0.24397 255 14.0224 0.662357 -0.2439 255 14.0149 -0.770208 -0.243843 255 14.0244 -0.572012 -0.243842 255 14.0234 0.59618 -0.243836 255 14.0183 0.706306 -0.243835 255 14.0229 -0.505778 -0.243712 255 14.0209 0.507827 -0.243643 255 14.0037 0.860012 -0.243641 255 14.0185 -0.461537 -0.243519 255 14.0072 0.551383 -0.243256 255 14.0117 -0.351192 -0.243196 255 14.0016 -0.26295 -0.242808 255 13.9947 -0.306813 -0.242615 255 13.9977 -0.108942 -0.242614 255 13.9944 -0.21884 -0.24255 255 13.9761 0.748129 -0.242545 255 13.9693 -0.152659 -0.241712 255 13.9599 -0.0648631 -0.241389 255 13.9581 0.000920904 -0.241324 255 13.942 0.0446877 -0.240808 255 14.128 -1.17793 -0.175732 255 14.0921 1.22155 -0.174852 174 14.0718 -1.12864 -0.174106 255 14.0659 1.15257 -0.173985 255 14.0653 -1.08364 -0.173834 255 14.0529 1.0627 -0.173444 255 14.0455 1.10654 -0.173335 255 14.0447 -1.03763 -0.173184 255 14.0415 -0.97087 -0.172967 255 14.0285 -0.92567 -0.172533 255 14.0254 -0.881206 -0.17237 255 14.0259 -0.770685 -0.172207 255 14.0119 0.993301 -0.172198 255 14.0114 -0.814027 -0.171882 255 14.0029 0.948491 -0.171873 255 14.0122 -0.725761 -0.171773 255 13.9999 0.904122 -0.17171 255 14.0075 -0.659331 -0.171556 255 13.998 0.837783 -0.171548 255 13.993 0.749304 -0.171278 255 13.9955 -0.614682 -0.171176 255 13.9914 -0.570455 -0.171014 255 13.9885 0.638944 -0.171007 255 13.9911 -0.526418 -0.170959 255 13.9813 0.704664 -0.170899 255 13.9706 0.792163 -0.170735 255 13.9835 -0.460134 -0.170688 255 13.9841 -0.372207 -0.170633 255 13.9764 0.594422 -0.170628 255 13.9809 -0.416075 -0.170579 255 13.9837 -0.306258 -0.170579 255 13.9786 0.484569 -0.170575 255 13.9762 0.550439 -0.170574 255 13.9833 -0.218347 -0.170524 255 13.9842 -0.152454 -0.170524 255 13.9849 -0.0645912 -0.170523 255 13.9806 -0.262243 -0.17047 255 13.9806 -0.108485 -0.170415 255 13.981 -0.0206387 -0.170415 255 13.977 0.0452425 -0.170306 255 13.9701 0.440358 -0.170304 255 14.1523 -1.19192 -0.0816788 162 14.1324 1.213 -0.081299 237 14.1021 -1.14319 -0.0805769 213 14.0997 -1.09843 -0.0804543 255 14.0922 1.14259 -0.0803609 255 14.0987 -1.03154 -0.0803316 255 14.0999 -0.98711 -0.0802905 255 14.0931 1.05356 -0.0802391 255 14.0877 1.09767 -0.080198 255 14.0958 -0.897882 -0.0800861 255 14.0939 -0.831105 -0.0799634 255 14.0965 -0.786824 -0.0799632 255 14.0839 0.986135 -0.0799538 255 14.083 -0.941512 -0.0798823 255 14.0949 -0.742332 -0.0798813 255 14.0879 0.830863 -0.0798323 255 14.0902 -0.675535 -0.0797178 255 14.0739 0.896583 -0.0796279 255 14.069 0.940654 -0.0795869 255 14.0823 -0.630837 -0.0795136 255 14.0769 0.741451 -0.0795064 255 14.0725 0.785553 -0.0794654 255 14.0742 -0.586195 -0.0793094 255 14.072 -0.54183 -0.0792275 255 14.0704 -0.475384 -0.0791456 255 14.0612 0.696303 -0.0791394 255 14.0698 -0.431121 -0.0791046 255 14.0711 -0.386918 -0.0791043 255 14.0604 0.474998 -0.0789366 255 14.0628 -0.320396 -0.0789 255 14.054 0.541092 -0.0788547 255 14.0503 0.629379 -0.0788542 255 14.0517 -0.276001 -0.078655 255 14.0474 -0.165572 -0.078532 255 14.0439 -0.121413 -0.0784502 255 14.0405 -0.231679 -0.0784099 255 14.0243 0.584022 -0.0782832 255 14.0142 -0.0771829 -0.0778379 255 14.0044 -0.0331505 -0.0776337 255 14.0004 0.032827 -0.0775518 255 14.0002 0.0768102 -0.0775515 255 14.1091 -1.2088 -0.015167 140 14.0903 -1.09573 -0.0147257 255 14.0569 -1.13752 -0.0142537 190 14.0676 -0.938413 -0.0141897 255 14.0585 -0.982173 -0.0140955 255 14.0389 1.18472 -0.014021 90 14.0363 0.984911 -0.0137388 255 14.0246 1.13919 -0.0137379 255 14.0278 -1.04643 -0.0136865 237 14.0403 0.830184 -0.0136452 255 14.0362 0.896334 -0.0136448 255 14.0457 -0.693373 -0.0136218 255 14.0488 -0.627177 -0.0136215 255 14.0415 -0.737387 -0.0135905 255 14.0447 -0.582778 -0.0135268 255 14.0373 0.741534 -0.0135198 255 14.0329 0.785522 -0.013488 255 14.0425 -0.538492 -0.0134636 255 14.0366 0.675193 -0.0134572 255 14.0386 0.586906 -0.0134262 255 14.0389 -0.4721 -0.0133688 255 14.0403 -0.427993 -0.0133686 255 14.0407 -0.339716 -0.0133366 255 14.0352 0.520533 -0.0133321 255 14.0376 -0.383766 -0.0133054 255 14.0347 0.476374 -0.0133008 255 14.0052 1.02701 -0.0132977 249 14.0382 -0.273461 -0.0132733 255 14.0342 0.432222 -0.0132696 255 14.037 -0.229321 -0.0132416 255 14.0315 0.388027 -0.0132069 255 13.9942 1.09254 -0.0132029 255 14.0046 -0.889906 -0.0131505 255 14.0296 -0.185102 -0.0131154 255 14.0303 -0.118987 -0.0131151 255 13.9993 -0.845408 -0.0130243 255 14.0246 -0.0748657 -0.0130204 255 13.9992 -0.779199 -0.012961 255 14.0067 0.629715 -0.0129537 255 13.9875 0.937432 -0.0129204 255 13.9968 -0.0306922 -0.0125794 255 13.9852 0.32089 -0.0124516 198 13.9508 0.0133219 -0.011855 255 13.9003 0.122543 -0.0110673 255 13.8666 0.0787439 -0.0105323 255 14.1819 1.23642 0.0774739 222 14.1731 -1.17458 0.0775887 255 14.103 -1.1243 0.0782639 255 14.0959 1.16185 0.0783126 255 14.0845 -1.07835 0.0784648 255 14.0796 1.11595 0.0784947 255 14.0855 -1.01169 0.0785016 255 14.0846 -0.96717 0.0785383 255 14.0716 -0.9219 0.0786845 255 14.0698 -0.855227 0.0787395 255 14.0531 1.06938 0.0787681 255 14.0669 -0.766387 0.078813 255 14.058 0.914393 0.0788219 255 14.0652 -0.721993 0.0788497 255 14.0584 -0.810242 0.0788675 255 14.0548 0.869842 0.0788764 255 14.042 1.00197 0.0789136 255 14.0331 0.957015 0.0790228 255 14.0485 -0.65481 0.0790324 255 14.0408 0.80254 0.0790402 255 14.0396 0.713988 0.0790944 255 14.0313 0.757757 0.0791494 255 14.0383 -0.565991 0.0791606 255 14.0308 0.647245 0.0792035 255 14.0265 -0.609675 0.0792516 255 14.0268 0.602894 0.079258 255 14.0237 -0.411051 0.0793438 255 14.0169 -0.499021 0.0793798 255 14.0209 -0.366895 0.0793805 255 14.0171 0.492194 0.0793851 255 14.0164 -0.454923 0.0793983 255 14.023 -0.146601 0.0793999 255 14.0166 0.448088 0.0794031 255 14.0126 0.558159 0.0794037 255 14.0194 -0.256699 0.0794175 255 14.0181 -0.212628 0.079436 255 14.0194 -0.102524 0.0794366 255 14.0196 -0.0584809 0.0794368 255 14.0197 0.00758554 0.0794372 255 14.0145 -0.300662 0.0794538 255 13.9597 0.0512976 0.0799846 255 13.9394 0.0949792 0.0801673 255 14.1342 -1.21353 0.167933 100 14.1001 -1.16592 0.168037 255 14.0985 1.23172 0.168038 86 14.0809 -1.053 0.168114 255 14.0821 -1.00862 0.16812 255 14.0752 -0.963672 0.168148 255 14.0659 1.11771 0.168153 255 14.0538 -1.11756 0.168174 255 14.0485 1.18299 0.168186 219 14.0622 -0.918366 0.168192 255 14.0644 -0.851969 0.168198 255 14.065 -0.807665 0.168203 255 14.0493 1.07203 0.168207 255 14.0487 1.0276 0.168218 255 14.0595 -0.763029 0.168225 255 14.0569 -0.696456 0.168242 255 14.0383 0.916088 0.168267 255 14.0354 0.96019 0.168267 255 14.0498 -0.541284 0.168281 255 14.0312 0.871382 0.168294 255 14.0371 -0.607038 0.168308 255 14.0258 0.826844 0.168316 255 14.0291 -0.650848 0.168325 255 14.0279 0.716458 0.168326 255 14.0256 0.760535 0.168326 255 14.0261 0.672203 0.168337 255 14.0294 -0.496327 0.168342 255 14.0209 -0.451912 0.16837 255 14.0261 -0.0333067 0.168377 243 14.0123 -0.407555 0.168397 255 14.014 -0.34151 0.168398 255 14.0086 0.517103 0.168402 255 14.005 0.561037 0.168408 255 14.011 -0.297392 0.168409 255 14.0109 -0.187318 0.168415 255 13.9991 0.604864 0.168419 255 14.0079 -0.253297 0.16842 255 14.0029 0.450838 0.168424 255 14.0038 -0.0992088 0.168437 236 13.9943 0.406575 0.168451 244 13.9622 0.0108313 0.168553 255 13.9221 0.0546099 0.168663 255 13.8604 0.0368592 0.251135 255 13.9802 0.0813211 0.251522 255 13.9885 -0.0065038 0.251547 255 13.9911 0.455193 0.251582 247 14.0004 -0.0504681 0.251586 255 14.003 -0.204459 0.251598 255 14.004 -0.116471 0.251599 255 14.0056 -0.160489 0.251605 255 13.9976 0.499449 0.251608 255 13.9962 0.58747 0.251615 255 14.008 -0.424661 0.251629 255 14.0059 0.543825 0.251641 255 14.0012 0.653802 0.251641 255 14.0211 -0.513231 0.25168 255 14.0226 -0.469183 0.251681 255 14.0234 -0.557426 0.251693 255 14.0266 -0.667913 0.251718 255 14.0251 0.699138 0.251725 255 14.0326 -0.624017 0.251731 255 14.0268 0.743412 0.251738 255 14.0231 0.809499 0.251739 255 14.0225 0.853673 0.251746 255 14.0297 0.898383 0.251778 255 14.0464 -0.713047 0.251789 255 14.0328 0.942865 0.251798 255 14.0489 -0.779555 0.251808 255 14.0543 -0.824145 0.251834 255 14.0482 1.01046 0.251863 255 14.0469 1.05474 0.251869 255 14.0676 -0.869248 0.251885 255 14.0688 -0.913688 0.251898 255 14.0704 -0.980377 0.251917 255 14.0712 -1.02487 0.25193 255 14.0635 1.10046 0.251934 255 14.0859 -1.0704 0.251987 255 14.0821 1.16875 0.252012 255 14.0906 -1.13755 0.252019 255 14.1069 -1.18345 0.252084 240 14.1481 1.21912 0.252238 210 13.9672 -0.0584622 0.333852 255 13.9713 0.0512441 0.333889 255 13.9958 0.205197 0.334128 255 14.0053 0.0073092 0.3342 255 14.0031 0.24929 0.334201 255 14.0043 0.293316 0.33422 255 14.0127 0.139374 0.334274 255 14.0107 0.359499 0.334293 255 14.023 0.0953903 0.334365 255 14.025 -0.102871 0.334382 255 14.0337 -0.213189 0.334473 255 14.0295 0.404049 0.334476 255 14.0386 -0.147102 0.33451 255 14.0282 0.55844 0.334514 255 14.0353 -0.41174 0.334527 255 14.039 -0.257402 0.334528 255 14.0342 0.448307 0.334532 255 14.0319 0.514439 0.334532 255 14.0411 -0.345706 0.334564 255 14.024 -0.808727 0.33458 255 14.0441 -0.301642 0.334583 255 14.0234 -0.852905 0.334598 255 14.0344 0.647007 0.334606 255 14.0399 -0.566468 0.334618 255 14.0332 0.713243 0.334625 255 14.0404 0.603081 0.334642 255 14.0305 0.801507 0.334643 255 14.0484 -0.500526 0.334673 255 14.0499 -0.456389 0.334673 255 14.0189 1.06626 0.3347 255 14.0409 0.757844 0.334716 255 14.0352 -0.920056 0.334744 255 14.0385 0.868329 0.334754 255 14.0343 -0.964285 0.334762 255 14.0521 -0.655447 0.334764 255 14.0377 0.912558 0.334772 255 14.0508 -0.721765 0.334782 255 14.0561 -0.611389 0.334782 255 14.0505 -0.766016 0.3348 255 14.0381 1.02335 0.334846 255 14.0468 0.957446 0.334882 255 14.0354 1.11184 0.334883 255 14.0517 1.15753 0.335066 255 14.0651 -1.01087 0.335073 255 14.0681 -1.07776 0.335146 255 14.0686 -1.12228 0.335183 255 14.1049 -1.16985 0.335549 227 14.1298 1.23087 0.335836 172 13.9675 -0.0808657 0.426455 255 13.9845 0.182683 0.426741 255 13.9871 -0.124887 0.426771 255 13.9877 0.0289142 0.426772 255 13.9878 0.226686 0.426805 255 13.9915 0.072894 0.426835 255 13.999 0.138917 0.426962 255 13.9976 0.336855 0.426995 255 14.0017 -0.234975 0.427024 255 14.0037 -0.0150168 0.427025 255 14.0011 0.270929 0.427026 255 14.0045 0.381058 0.427122 255 14.0031 0.49111 0.427154 255 14.0092 0.425243 0.427217 255 14.0167 -0.169134 0.427245 255 14.0189 -0.279287 0.427308 255 14.0114 0.535497 0.427312 255 14.0155 -0.477504 0.427339 255 14.0219 -0.323412 0.427371 255 14.0229 -0.36751 0.427402 255 14.0138 0.623809 0.427408 255 14.027 -0.433761 0.427497 255 14.0257 0.580201 0.427566 255 14.03 -0.522098 0.427592 255 14.0227 0.690448 0.427598 255 14.0353 -0.588527 0.427718 255 14.0261 0.778994 0.427725 255 14.0354 -0.632703 0.427749 255 14.0324 0.735145 0.427788 255 14.0282 0.845456 0.42782 255 14.0335 0.890041 0.427947 255 14.016 1.13238 0.427948 255 14.0513 -0.677628 0.428034 255 14.052 -0.744039 0.428097 255 14.0446 0.935084 0.428169 255 14.057 -0.832888 0.428254 255 14.0596 -0.788723 0.428254 255 14.048 1.00184 0.428295 255 14.0488 1.04627 0.428359 255 14.0623 -0.877529 0.428381 255 14.0514 1.09088 0.428454 255 14.07 -0.944568 0.42857 255 14.0709 -0.989038 0.428633 255 14.0563 1.20243 0.428676 86 14.0777 -1.03395 0.428791 255 14.0807 -1.10089 0.428917 255 14.127 -1.14908 0.429708 255 14.1353 -1.19445 0.429897 156 13.9917 0.146174 0.497986 244 13.9968 0.212186 0.498112 241 14.0003 0.0582776 0.498153 222 13.9981 0.25619 0.498154 239 13.9992 0.300204 0.498197 236 14.0041 -0.0956988 0.498236 211 14.0063 -0.0517145 0.498278 189 14.0064 -0.00771213 0.498279 209 14.006 0.102293 0.498279 242 14.0042 0.344318 0.498322 234 14.0024 0.410307 0.498323 232 14.0058 -0.359802 0.49836 234 14.0093 -0.293843 0.498403 227 14.007 0.454479 0.498448 227 14.0142 -0.249909 0.498487 235 14.0149 -0.205881 0.498487 234 14.0175 -0.161878 0.498529 227 14.0146 -0.404108 0.498569 228 14.009 0.564705 0.498575 228 14.0052 0.652723 0.498575 227 14.0153 -0.448201 0.498611 223 14.0135 0.49875 0.498616 228 14.015 -0.514318 0.498653 225 14.0173 -0.558512 0.498736 221 14.0152 0.609045 0.498742 230 14.01 0.719105 0.498743 225 14.0175 -0.602635 0.498778 224 14.0195 -0.646861 0.498861 222 14.0136 0.763427 0.498869 232 14.0212 0.808002 0.499078 222 14.0283 -0.713551 0.499112 217 14.0255 -0.801796 0.499153 219 14.0184 0.918359 0.499162 227 14.0245 0.852404 0.499204 230 14.032 -0.757953 0.499237 223 14.0296 -0.868389 0.49932 223 14.0274 0.963191 0.499414 232 14.0263 1.00739 0.499456 231 14.0407 -0.913394 0.499613 216 14.0418 -0.95778 0.499697 222 14.0413 1.07497 0.499875 227 14.0471 -1.02468 0.499905 227 14.0438 1.11954 0.500001 242 14.0518 -1.06943 0.500073 226 14.0663 -1.11503 0.500449 223 14.0886 -1.16139 0.500993 198 14.1527 -1.23398 0.502457 104 14.1579 1.17318 0.50247 96 13.9348 -0.232469 0.566541 120 13.9356 0.18346 0.566543 132 13.9451 -0.320272 0.566852 124 13.9526 0.0741206 0.566958 132 13.9558 -0.167002 0.567061 122 13.9567 -0.0354666 0.567061 159 13.9541 0.271442 0.567063 135 13.9609 0.227711 0.567218 107 13.9616 0.381319 0.567323 99 13.9634 -0.386499 0.567371 127 13.9682 -0.123242 0.567372 100 13.9765 -0.0793891 0.56758 101 13.9763 0.118201 0.567581 98 13.976 -0.276999 0.567631 121 13.9827 0.0304081 0.567736 102 13.9767 -0.474739 0.567786 140 13.9783 0.42576 0.56779 105 13.9789 0.469743 0.567842 116 13.9821 -0.430943 0.56789 102 13.9852 0.316061 0.567893 102 13.9805 -0.584815 0.567993 132 13.9845 0.535932 0.56805 125 13.9867 0.580036 0.568154 207 13.9903 -0.541185 0.5682 116 13.9926 -0.629336 0.568356 179 14.0006 -0.673754 0.568615 211 14.0115 0.735527 0.568986 255 14.0132 -0.740537 0.56903 250 14.0217 0.691914 0.569193 255 14.0348 0.626295 0.569452 255 14.0305 0.825001 0.569609 255 14.011 1.1335 0.569662 255 14.0325 0.8915 0.569765 255 14.041 0.781378 0.569816 255 14.0376 0.936127 0.569973 255 14.0365 0.980365 0.570025 255 14.0522 -0.831085 0.570171 255 14.0627 -0.787367 0.570379 255 14.0497 1.04787 0.570492 255 14.0641 -0.898285 0.570586 255 14.0681 -0.987315 0.570845 255 14.0603 1.09311 0.570856 255 14.0732 -0.943244 0.570897 255 14.0709 -1.03193 0.571 255 14.0779 -1.09914 0.571311 255 14.1043 -1.14574 0.572089 255 14.1245 -1.19201 0.572712 212 14.1688 1.2138 0.573918 57 13.9748 0.162511 0.653959 142 13.9778 0.00883634 0.654023 136 13.9747 0.294249 0.654024 142 13.9794 -0.100956 0.654086 90 13.983 -0.144919 0.654215 117 13.9855 0.0967022 0.65428 92 13.9835 0.250475 0.654281 97 13.9897 -0.0570997 0.654408 90 13.9859 0.404381 0.654475 123 13.9878 -0.408766 0.654535 103 13.9906 -0.298895 0.654536 110 13.987 -0.496722 0.654599 94 13.9957 0.0527871 0.654602 97 13.9963 0.206701 0.654667 100 13.9883 0.514415 0.654668 120 13.9975 -0.255064 0.654729 110 13.9951 0.360621 0.654732 94 13.9945 -0.452986 0.654792 98 13.9996 -0.343107 0.654857 108 14.0022 -0.211159 0.654858 84 13.9908 0.602544 0.654862 116 13.9946 -0.607101 0.654984 61 13.9928 0.646668 0.654991 85 14.0024 -0.563387 0.655177 63 13.9933 0.756866 0.655184 110 13.975 -1.06895 0.655239 92 14.0026 -0.651543 0.655306 60 14.0106 0.449098 0.655311 90 13.9949 0.801042 0.655313 101 13.9909 0.866978 0.655313 103 14.0086 0.559192 0.655376 86 14.0036 0.713289 0.655441 117 13.9961 0.91143 0.655571 74 14.0114 -0.718154 0.655691 60 14.011 -0.762291 0.655755 59 13.9978 1.11043 0.656086 252 14.0062 1.15537 0.656473 44 14.0228 -0.961966 0.656526 97 14.0405 -0.808199 0.656784 44 14.0297 -1.00675 0.656847 83 14.0364 1.02474 0.657115 136 14.0333 -1.11788 0.657233 255 14.0411 1.06942 0.657372 255 14.0579 -0.85355 0.657427 44 14.0696 -0.920863 0.657941 44 14.1353 -1.1709 0.660641 250 14.1918 1.23768 0.662647 45 14.0053 0.343678 0.746215 80 14.0108 0.145678 0.746291 86 14.0096 0.233701 0.746291 92 14.0135 0.0356367 0.746368 91 14.003 0.541789 0.74637 71 14.0173 0.0796951 0.746523 84 14.0108 0.431924 0.746524 74 14.015 -0.426784 0.746675 71 14.0233 -0.0744593 0.746754 92 14.0207 0.27797 0.746756 88 14.0228 -0.272731 0.74683 79 14.0166 0.498239 0.746834 75 14.0236 -0.471126 0.747061 69 14.0288 -0.361019 0.747139 81 14.0325 -0.16266 0.74714 87 14.0322 0.190029 0.747142 61 14.0183 0.652717 0.747145 70 14.035 -0.118591 0.747218 59 14.0301 0.388439 0.74722 82 14.0232 0.586735 0.747222 70 14.0235 -0.669694 0.74737 40 14.0359 -0.317071 0.747372 87 14.0376 -0.228868 0.747372 78 14.0222 0.697066 0.747377 42 14.0314 -0.581726 0.747525 40 14.0435 -0.00834769 0.747528 62 14.0239 0.74133 0.747532 40 14.042 -0.515874 0.747835 40 14.0335 0.786074 0.747996 40 14.0152 -1.08923 0.748064 40 14.0435 -0.626405 0.748066 40 14.0316 0.852317 0.748074 64 14.0329 0.896667 0.748229 72 14.0752 -0.716387 0.749459 40 14.0785 -0.871829 0.749922 40 14.0762 -0.938292 0.749999 51 14.0611 1.14279 0.75001 227 14.0911 -0.828164 0.750309 40 14.1016 -0.784313 0.750619 40 14.0879 1.05595 0.750783 183 14.0925 1.10084 0.751093 248 14.0999 -1.02884 0.751159 40 14.1054 -1.14065 0.7517 227 14.2029 1.22199 0.755735 40 14.2093 -1.1938 0.755878 130 13.9886 0.241833 0.810354 129 13.9838 0.549524 0.810529 164 13.9982 -0.109854 0.810699 177 13.9986 0.0440721 0.8107 141 13.9957 0.285923 0.810701 180 13.9632 -1.07678 0.810954 82 14.0044 0.0880735 0.81096 129 13.9822 0.791599 0.810964 137 14.006 0.132081 0.811047 180 14.0017 0.440093 0.811135 164 13.987 -0.813765 0.811215 96 14.0081 -0.264012 0.811218 171 14.0109 -0.22003 0.811305 136 14.0125 -0.0659711 0.811306 136 13.9877 0.83598 0.81131 134 14.0146 -0.0219522 0.811393 140 14.0132 0.198182 0.811394 136 14.0158 -0.154058 0.811478 129 14.0082 0.484337 0.811482 134 14.004 0.594342 0.811482 129 14.0021 0.638338 0.811483 165 14.0147 0.330335 0.811568 136 14.015 0.396423 0.811655 140 13.9906 0.946475 0.811744 109 14.0184 -0.418464 0.811824 156 14.0069 0.704703 0.81183 132 14.0046 0.748701 0.81183 165 13.9955 0.902645 0.811831 136 14.0216 -0.374479 0.811911 136 14.0074 -0.770841 0.811996 119 14.0252 -0.308447 0.811998 131 14.021 -0.617053 0.812256 154 14.0237 -0.727583 0.812602 143 14.0326 -0.529261 0.812603 161 14.0449 -0.463476 0.813037 126 14.0449 -0.57394 0.81321 124 14.032 -0.927113 0.813468 112 14.0282 -1.03759 0.813641 97 14.0428 -0.883542 0.813815 82 14.0609 -0.663152 0.814076 129 14.0449 -0.972325 0.814161 107 14.0354 -1.12686 0.814247 255 14.0426 1.06072 0.814345 255 14.0396 1.14926 0.814519 255 14.0491 1.1056 0.814779 255 14.1831 -1.18385 0.820833 202 14.2192 1.2311 0.822579 84 14.0306 0.207618 0.904612 101 14.042 0.053391 0.90511 146 14.0518 0.252139 0.905711 88 14.0557 -0.101084 0.905809 95 14.0292 0.869851 0.905814 90 14.0581 0.00931666 0.905909 84 14.0545 0.318447 0.905911 143 14.0534 0.362596 0.905911 93 14.0549 0.451026 0.906111 130 14.049 0.605534 0.906112 127 14.0323 0.914318 0.906114 91 14.0409 -0.80762 0.906205 78 14.0638 -0.255788 0.906307 93 14.0657 0.0977157 0.906309 93 14.068 -0.0569523 0.906408 87 14.0642 0.407111 0.90651 92 14.0606 0.517563 0.906511 93 14.0661 -0.410573 0.906606 83 14.0667 -0.454821 0.906706 118 14.0728 -0.189605 0.906707 102 14.058 0.672329 0.906712 92 14.051 0.804796 0.906712 94 14.0647 -0.565362 0.906805 122 14.0555 0.76075 0.906812 126 14.0749 -0.300203 0.906906 137 14.0688 0.562148 0.907011 85 14.0359 1.11405 0.907014 245 14.0813 -0.145461 0.907107 99 14.0811 0.164213 0.907108 97 14.0638 0.716908 0.907111 86 14.0689 -0.654078 0.907204 130 14.0728 -0.609959 0.907304 84 14.0622 -0.853134 0.907403 64 14.0707 -0.698464 0.907403 83 14.0838 -0.344645 0.907405 84 14.0587 -1.05257 0.907901 38 14.0653 0.960912 0.907911 69 14.0792 -0.765391 0.908002 86 14.071 -0.964615 0.908201 64 14.076 -0.920531 0.908301 119 14.0972 -0.500085 0.908303 88 14.0854 -1.12128 0.909499 246 14.0891 1.07384 0.90951 255 14.0998 -1.01104 0.909799 51 14.0902 1.18532 0.91001 38 14.2073 -1.17568 0.91579 207 14.2496 1.24412 0.918199 38 +unknow 0.978793 1 0 265 13.0196 25.1365 -2.09855 85 12.7111 25.2158 -2.09285 84 12.9051 25.1081 -2.0922 84 12.8235 25.1432 -2.09171 84 12.6221 25.236 -2.09106 84 12.5277 25.2452 -2.08829 84 11.9892 25.3488 -2.07674 127 11.9036 25.3737 -2.0756 126 11.2366 25.6064 -2.07038 144 11.1561 25.6416 -2.07038 153 10.949 25.7156 -2.06924 160 11.025 25.6701 -2.06827 156 10.8627 25.737 -2.0681 157 10.7321 25.7658 -2.06615 157 10.5678 25.8272 -2.06566 164 10.6428 25.7791 -2.06436 145 10.4281 25.8323 -2.06175 156 10.2648 25.8955 -2.06159 157 10.3439 25.8576 -2.0611 156 10.1652 25.8812 -2.05752 149 9.5635 26.0161 -2.05036 149 9.4374 26.0515 -2.04954 150 12.2277 24.8353 -2.04745 98 9.26423 26.084 -2.04726 151 9.18092 26.1092 -2.04694 151 9.34209 26.0435 -2.04629 148 9.04866 26.1258 -2.04466 151 11.9333 24.9251 -2.04354 132 8.75645 26.2105 -2.04352 157 8.95816 26.1296 -2.04254 151 8.87284 26.1482 -2.04173 153 8.66595 26.2132 -2.0414 158 8.57367 26.21 -2.0388 154 8.4452 26.2349 -2.03749 156 12.0226 24.7116 -2.03101 103 11.9328 24.7241 -2.02873 98 9.5641 24.6885 -1.94898 118 9.47439 24.6868 -1.94621 149 9.38266 24.6792 -1.94295 206 9.183 24.7372 -1.94165 111 9.24112 24.6559 -1.93709 162 12.6024 25.0433 -1.84992 195 12.2055 24.7374 -1.81677 255 12.1022 24.7237 -1.81251 244 11.9639 24.7356 -1.80884 245 11.8835 24.7676 -1.8084 216 11.7695 24.7292 -1.80224 181 11.6452 24.7682 -1.80092 192 11.5336 24.7324 -1.79505 255 8.47227 25.8277 -1.78711 214 10.8678 24.7099 -1.77334 236 10.7774 24.7147 -1.77099 249 8.47784 25.5738 -1.76951 218 10.6783 24.699 -1.76703 249 10.5508 24.7234 -1.76497 249 8.56506 25.4353 -1.76188 172 10.4481 24.6977 -1.76028 255 10.3627 24.712 -1.75881 234 10.2278 24.7163 -1.75529 236 10.1349 24.7114 -1.75236 235 10.0392 24.6988 -1.74884 236 9.9384 24.6729 -1.74429 247 8.55537 25.1459 -1.74149 163 9.80207 24.6694 -1.74033 255 9.51445 24.7348 -1.7371 198 9.62 24.6618 -1.7349 255 9.40821 24.69 -1.73123 255 8.58035 24.9624 -1.72932 173 9.31365 24.6747 -1.72771 204 8.67679 24.8614 -1.72462 215 9.17914 24.6697 -1.72389 217 8.74686 24.8115 -1.72286 196 9.0123 24.6951 -1.7214 245 8.92652 24.7007 -1.71964 255 8.80935 24.7407 -1.71949 255 12.9533 24.8835 -1.69335 225 12.8076 24.8892 -1.68915 255 12.6732 24.8191 -1.68075 184 12.551 24.7715 -1.67411 211 12.4472 24.7591 -1.67018 243 12.2031 24.7558 -1.66259 156 12.1244 24.7923 -1.66246 168 11.9597 24.7503 -1.655 113 11.8707 24.7643 -1.65324 199 11.6141 24.7249 -1.64335 219 11.522 24.7305 -1.64104 215 10.8561 24.7056 -1.62085 205 10.7586 24.6938 -1.61747 230 8.45792 25.5418 -1.61542 222 10.6612 24.6816 -1.61408 232 10.5315 24.7004 -1.61177 234 10.4345 24.6874 -1.60839 235 10.3384 24.6759 -1.60513 230 10.2501 24.6824 -1.60324 232 8.51412 25.3105 -1.60174 255 10.1148 24.6843 -1.59985 235 9.75904 24.8099 -1.59876 96 10.0193 24.6715 -1.5966 239 9.92685 24.6658 -1.59389 247 9.79947 24.6845 -1.59185 221 9.44034 24.7963 -1.59009 126 9.50747 24.7386 -1.58806 121 8.52764 25.089 -1.58778 170 9.61672 24.6749 -1.5867 101 9.32376 24.7231 -1.58264 206 8.57217 24.962 -1.5806 224 9.10523 24.73 -1.57789 98 8.67397 24.8761 -1.57735 231 9.16624 24.6564 -1.57464 97 8.73819 24.8092 -1.5745 234 8.9213 24.7079 -1.5722 255 8.80408 24.7478 -1.57207 245 8.98728 24.6479 -1.5699 255 12.8595 24.8084 -1.52865 200 12.6978 24.7818 -1.52256 222 12.5836 24.7504 -1.51759 221 12.2992 24.864 -1.51597 146 12.4698 24.7185 -1.51262 243 12.3554 24.6844 -1.50752 253 12.1197 24.6965 -1.50168 131 12.0202 24.6896 -1.49857 140 11.8803 24.6975 -1.49521 122 11.6812 24.6797 -1.48887 238 11.5445 24.691 -1.48589 255 8.49478 25.8087 -1.48053 124 10.918 24.6516 -1.46749 187 10.7913 24.679 -1.46588 249 8.53187 25.5167 -1.464 100 10.6906 24.6597 -1.46227 243 10.5989 24.6602 -1.46003 254 9.68751 24.9916 -1.45767 214 10.4615 24.6603 -1.45668 252 10.3646 24.647 -1.45357 250 8.55753 25.3291 -1.45344 127 10.2763 24.6537 -1.45183 248 10.1805 24.6416 -1.44885 254 10.0476 24.6486 -1.44611 252 9.33975 24.9042 -1.44487 114 9.95591 24.6449 -1.44375 253 9.4789 24.8002 -1.44188 124 9.8628 24.6372 -1.44114 247 9.72822 24.637 -1.43803 254 8.55363 25.0585 -1.4374 131 9.63912 24.6377 -1.43604 211 8.63295 24.9066 -1.43007 155 8.7085 24.8719 -1.42958 235 9.32936 24.6414 -1.42933 103 9.14787 24.6285 -1.42461 252 8.75656 24.7597 -1.42398 231 9.02621 24.6563 -1.42361 255 8.94462 24.6733 -1.42287 255 8.86639 24.6994 -1.42274 247 12.867 24.8715 -1.36563 185 12.7134 24.8607 -1.36113 198 12.6 24.831 -1.35675 213 12.496 24.8187 -1.35349 214 12.3805 24.7828 -1.34877 219 12.231 24.7746 -1.34461 225 12.1303 24.7663 -1.34168 235 12.0263 24.7503 -1.33831 244 11.8923 24.7707 -1.33606 243 11.793 24.7629 -1.33325 245 11.6981 24.7637 -1.331 241 11.5602 24.7733 -1.32819 238 10.9343 24.7374 -1.31178 230 10.7985 24.7447 -1.30908 246 10.7049 24.7418 -1.30683 245 8.59832 25.5103 -1.30468 149 10.6098 24.7349 -1.30436 252 10.4769 24.746 -1.302 243 10.3821 24.7383 -1.29952 248 10.2898 24.7358 -1.29739 247 10.1946 24.7255 -1.2948 247 8.61038 25.2828 -1.29277 193 10.0622 24.7344 -1.29244 245 9.97399 24.7399 -1.29087 248 9.87849 24.7266 -1.28817 243 9.74653 24.7339 -1.28581 247 9.65645 24.7327 -1.2839 243 8.67671 25.089 -1.28366 183 9.5629 24.722 -1.28142 234 8.73053 24.99 -1.27939 215 9.4321 24.7294 -1.27917 230 8.79972 24.936 -1.27782 123 9.3431 24.729 -1.27737 230 9.07064 24.8303 -1.27737 228 9.25908 24.7414 -1.27636 235 9.17162 24.7442 -1.27479 255 8.9594 24.7666 -1.27186 132 12.8033 24.7991 -1.20331 181 12.6989 24.7877 -1.20038 212 12.5512 24.7867 -1.19694 214 12.4418 24.7636 -1.1934 214 12.3434 24.7615 -1.19107 218 12.2028 24.771 -1.18834 214 12.0941 24.7464 -1.18479 222 11.9945 24.7394 -1.18226 225 8.95229 25.9616 -1.18063 127 11.8536 24.7452 -1.17943 215 11.7594 24.7481 -1.17751 219 11.6501 24.7181 -1.17376 255 8.9218 25.6128 -1.16343 133 10.8968 24.7126 -1.15767 213 10.7547 24.7051 -1.15444 217 8.93774 25.4019 -1.15362 127 10.6643 24.7094 -1.15282 214 10.5693 24.7024 -1.15059 211 10.438 24.717 -1.14867 215 9.02163 25.2599 -1.14825 147 10.3471 24.7183 -1.14695 213 10.2533 24.712 -1.14482 215 9.0656 25.1337 -1.14299 129 10.1589 24.7034 -1.1426 207 10.0333 24.7289 -1.14138 218 9.94363 24.7306 -1.13976 218 9.1178 25.032 -1.13905 148 9.85033 24.7228 -1.13764 208 9.72346 24.7429 -1.13622 205 9.63406 24.7436 -1.1346 200 9.55122 24.7607 -1.13389 198 9.42519 24.7811 -1.13258 189 9.19122 24.8689 -1.13257 201 9.2637 24.8249 -1.13177 227 9.34022 24.7919 -1.13156 186 12.8216 24.9247 -1.04937 137 9.83525 26.2192 -1.04818 172 12.7205 24.9203 -1.04712 142 12.5643 24.9033 -1.04326 148 12.4521 24.8747 -1.03985 156 12.3544 24.8743 -1.03788 174 12.2028 24.8623 -1.03438 177 12.0307 24.906 -1.03276 249 12.1045 24.8591 -1.03231 178 11.8574 24.8452 -1.02692 127 11.763 24.848 -1.02522 131 9.77358 25.4433 -1.01461 123 10.914 24.8467 -1.00933 100 9.79293 25.2559 -1.00707 99 9.82065 25.0929 -1.0007 99 9.8991 24.946 -0.995855 99 10.0414 24.8481 -0.99415 255 9.94408 24.8313 -0.991816 98 10.1914 24.6595 -0.988856 242 10.1108 24.684 -0.988496 245 10.0918 26.1009 -0.869308 159 12.2006 24.9174 -0.860077 156 11.9855 24.9729 -0.858381 106 12.0917 24.8928 -0.85738 255 10.0243 25.4514 -0.845042 112 10.0391 25.2564 -0.838263 104 10.1161 25.1051 -0.83395 104 10.1383 24.9344 -0.828172 103 10.2128 24.8932 -0.827787 103 10.3269 24.8374 -0.82748 152 10.3545 25.7533 -0.686256 108 11.7913 25.0197 -0.683106 148 10.3484 25.5057 -0.678778 137 10.359 25.3028 -0.672847 129 11.0236 25.0007 -0.672271 193 10.8905 25.0176 -0.671045 190 10.7961 25.0149 -0.669755 193 10.4307 25.1392 -0.66885 130 10.7025 25.0138 -0.66853 204 10.4888 25.0565 -0.66711 144 10.5582 25.0013 -0.666337 221 +unknow 0.941229 1 0 1755 8.67648 -0.887036 -1.73458 121 8.14686 -0.898094 -1.72559 115 9.18781 -0.915976 -1.72389 142 8.1459 -0.833312 -1.72381 136 8.138 -0.871287 -1.72292 146 8.16566 -0.460985 -1.72158 117 8.12462 -0.921548 -1.72114 138 8.13684 -0.8066 -1.72114 138 8.1335 -0.780493 -1.7198 138 7.4039 -0.901228 -1.71961 115 7.40477 -0.877742 -1.71913 107 7.41204 -0.79607 -1.71864 108 7.43158 -0.586209 -1.71864 112 8.551 1.28775 -1.71854 122 8.14884 0.513905 -1.71846 126 7.41497 -0.749295 -1.71816 111 8.12551 0.782188 -1.71801 119 7.42288 -0.644236 -1.71767 110 8.78419 -0.924111 -1.71765 118 8.13382 0.667076 -1.71756 98 8.78923 -0.854912 -1.71724 138 7.41676 -0.690689 -1.71718 107 7.4239 -0.609097 -1.71718 104 8.15065 0.372747 -1.71712 115 8.12974 0.692455 -1.71712 150 7.40049 -0.830152 -1.7167 107 8.14412 0.462228 -1.71667 148 8.55866 1.16545 -1.71643 115 8.15044 -0.280584 -1.71623 121 8.13887 -0.485208 -1.71579 139 8.14243 -0.421271 -1.71579 149 8.14371 -0.395689 -1.71579 142 8.14492 -0.370102 -1.71579 124 8.15045 -0.216517 -1.71578 123 8.14231 0.423629 -1.71578 122 8.13873 0.487566 -1.71578 124 8.13288 0.577025 -1.71578 123 8.07 1.16266 -1.71578 119 7.39399 -0.852966 -1.71572 143 8.14562 -0.306054 -1.71534 157 8.08037 1.0736 -1.71533 118 8.14268 -0.33157 -1.71489 127 8.13162 0.538423 -1.71489 157 8.11552 0.742602 -1.71489 140 8.55453 1.13755 -1.71474 117 8.54533 1.2047 -1.71474 118 8.5415 1.23154 -1.71474 121 8.52324 1.35216 -1.71474 123 8.11587 0.716925 -1.71444 144 8.77286 -0.88119 -1.71435 112 7.40296 -0.712911 -1.71426 106 7.41598 -0.561601 -1.71426 106 7.41977 -0.479907 -1.71378 111 8.13674 0.333646 -1.71355 133 7.40343 -0.666049 -1.71329 107 7.41467 -0.526387 -1.71329 107 7.40961 0.593466 -1.71329 114 8.13192 0.397439 -1.71311 147 8.51123 1.37771 -1.71305 129 7.39134 -0.770448 -1.71281 106 7.42561 -0.293156 -1.7128 127 8.13905 -0.101149 -1.71266 119 8.06188 1.1227 -1.71266 143 8.51778 1.32391 -1.71263 125 7.41017 0.534964 -1.71232 123 7.3885 0.779062 -1.71231 118 7.37948 0.860257 -1.71231 111 7.36659 0.96449 -1.71231 115 8.13375 -0.254485 -1.71222 152 8.11548 0.60137 -1.71221 163 8.52598 1.25669 -1.71221 117 7.70022 -0.889303 -1.71191 91 7.41556 -0.421205 -1.71183 115 7.38409 0.802052 -1.71183 119 8.13354 -0.190556 -1.71177 153 8.1341 -0.165002 -1.71177 118 8.13285 0.218351 -1.71177 125 7.42381 0.161865 -1.71134 123 7.40951 0.488121 -1.71134 127 8.13284 -0.126645 -1.71133 146 8.12801 0.307682 -1.71132 134 8.05764 1.09629 -1.71087 149 7.40661 -0.502468 -1.71086 115 7.42037 0.220102 -1.71086 119 7.39506 0.650758 -1.71086 118 7.39298 0.673986 -1.71086 123 7.38746 0.732032 -1.71086 111 9.51505 1.27903 -1.71055 111 7.41496 -0.316103 -1.71037 118 7.41798 -0.234554 -1.71037 119 7.41056 0.406396 -1.71037 119 7.40714 0.464586 -1.71037 120 7.38889 0.697021 -1.71037 120 7.36904 0.882485 -1.71037 111 7.3648 0.917199 -1.71037 107 7.32312 1.20563 -1.71037 114 7.69792 -0.840033 -1.71004 105 7.7067 -0.755341 -1.71004 106 7.71017 -0.719016 -1.71004 100 8.1257 0.19259 -1.70999 131 7.41031 -0.374239 -1.70989 119 7.41968 0.0335256 -1.70989 118 7.41846 0.138412 -1.70989 103 7.41363 0.301508 -1.70989 123 7.41158 0.348084 -1.70989 115 7.40986 0.383008 -1.70988 107 7.32495 1.18231 -1.70988 119 9.49653 1.383 -1.70979 123 7.68629 -0.924386 -1.70958 90 8.09125 -0.750936 -1.70955 154 8.12238 0.243577 -1.70954 128 7.12267 -0.651011 -1.70954 92 7.40451 -0.443953 -1.7094 115 7.41333 -0.257736 -1.7094 123 7.41759 0.0568135 -1.7094 126 7.4126 0.278138 -1.7094 122 7.4002 0.510833 -1.7094 123 7.37933 0.754624 -1.7094 107 7.34726 1.02068 -1.7094 110 7.69138 -0.863766 -1.70911 109 7.70042 -0.779144 -1.70911 88 8.12399 -0.0372003 -1.7091 141 8.11919 0.281776 -1.7091 129 8.09995 0.625768 -1.70909 110 7.40522 -0.397323 -1.70892 111 7.40811 -0.339151 -1.70892 127 7.39403 0.568786 -1.70891 119 7.39031 0.61523 -1.70891 114 7.34851 0.997322 -1.70891 114 7.33018 1.12414 -1.70891 119 7.71375 -0.609468 -1.70864 102 7.71743 -0.560989 -1.70864 93 7.4128 -0.129556 -1.70843 127 7.41393 0.0101874 -1.70843 107 7.35419 0.939323 -1.70842 107 7.34018 1.0432 -1.70842 115 9.49725 1.3222 -1.70827 114 7.69406 -0.802915 -1.70817 100 7.0983 -0.829105 -1.70803 131 7.12178 -0.594546 -1.70803 92 7.30973 1.227 -1.70794 119 8.11788 -0.0754477 -1.70776 148 8.11822 -0.0116883 -1.70776 135 8.11813 0.0393203 -1.70776 123 7.11074 -0.69497 -1.70753 91 9.48916 1.35146 -1.70751 113 7.40971 -0.0713086 -1.70746 122 7.40745 0.196381 -1.70745 126 7.40295 0.324337 -1.70745 123 7.39763 0.428959 -1.70745 119 8.11457 0.166784 -1.70731 120 7.70498 -0.645305 -1.70724 103 7.70981 -0.58477 -1.70724 85 7.08491 -0.906598 -1.70702 93 7.09828 -0.795201 -1.70702 91 7.11096 -0.672438 -1.70702 120 8.11432 0.0137969 -1.70687 129 8.11331 0.128506 -1.70687 118 7.69884 -0.693523 -1.70677 89 7.08719 -0.872957 -1.70652 120 7.11409 -0.616394 -1.70652 124 7.11959 -0.549319 -1.70652 92 7.40317 -0.210861 -1.70648 122 7.4038 -0.187602 -1.70648 123 7.40541 -0.106183 -1.70648 124 7.40602 -0.0480183 -1.70648 119 7.40613 -0.0247513 -1.70648 115 7.40574 0.0799498 -1.70648 130 7.40528 0.114848 -1.70648 144 7.40219 0.242783 -1.70648 115 7.35903 0.834367 -1.70648 115 8.07259 0.802535 -1.70642 126 9.05836 1.27118 -1.70641 119 7.69904 -0.669158 -1.70631 106 7.69623 0.700777 -1.7063 101 7.09929 -0.750164 -1.70602 91 9.06612 1.19975 -1.70601 118 9.06036 1.24245 -1.70601 121 7.32217 1.09933 -1.70599 111 7.09969 -0.727653 -1.70551 123 7.11824 -0.515469 -1.70551 102 7.12348 -0.437169 -1.70551 104 7.40072 -0.152644 -1.70551 122 7.29629 1.24828 -1.7055 123 7.67911 0.833241 -1.70537 90 7.28842 1.28231 -1.70502 119 7.08413 -0.849975 -1.70501 90 7.09305 -0.772031 -1.70501 133 7.11789 -0.492963 -1.70501 96 7.70789 0.470467 -1.7049 103 7.67452 0.857154 -1.7049 95 7.32152 1.06396 -1.70453 118 7.28244 1.30486 -1.70453 119 7.27831 1.32773 -1.70453 127 7.11748 -0.470464 -1.70451 97 7.70253 -0.52337 -1.70444 91 7.70413 -0.499169 -1.70444 96 9.04461 1.29827 -1.70442 125 7.30746 1.1441 -1.70405 110 7.08167 0.837966 -1.704 99 7.70372 -0.474837 -1.70397 93 7.71653 0.167422 -1.70397 101 7.70008 0.530736 -1.70397 96 7.0686 -0.927041 -1.7035 125 7.69465 0.578967 -1.7035 94 7.6646 0.892656 -1.7035 90 8.09836 0.0773268 -1.7033 117 7.70333 -0.414096 -1.70304 97 7.70578 -0.365686 -1.70304 94 7.71446 -0.002287 -1.70304 101 7.70157 0.445826 -1.70303 102 7.69449 0.554657 -1.70303 95 7.67452 0.784022 -1.70303 99 7.11642 -0.391836 -1.703 99 7.11385 0.43616 -1.70299 100 7.06819 0.9153 -1.70299 103 7.70647 -0.305071 -1.70257 105 7.70739 -0.280859 -1.70257 109 7.71229 0.0582938 -1.70257 108 7.71118 0.14309 -1.70257 101 7.71013 0.191538 -1.70257 95 7.70915 0.227869 -1.70257 117 7.70666 0.300515 -1.70257 99 7.70756 0.276302 -1.70257 99 7.68599 0.639073 -1.70257 99 7.6785 0.723545 -1.70257 99 7.67008 0.80793 -1.70257 95 7.65789 0.91628 -1.70256 91 7.65498 0.940332 -1.70256 95 7.63245 1.10843 -1.70256 96 7.1024 -0.570387 -1.70249 123 7.11322 -0.414071 -1.70249 98 7.11837 -0.313472 -1.70249 107 7.11512 0.380175 -1.70249 104 7.11389 0.402525 -1.70249 98 7.11051 0.458388 -1.70249 96 7.08102 0.792828 -1.70249 128 7.0785 0.815072 -1.70249 94 9.0287 1.33947 -1.70244 129 7.69811 -0.438061 -1.7021 94 7.70976 -0.111275 -1.7021 99 7.70212 0.360949 -1.7021 99 7.67425 0.747486 -1.7021 94 7.63899 1.0482 -1.7021 94 7.11432 -0.358087 -1.70199 97 7.1233 0.0222014 -1.70199 104 7.12319 0.0445785 -1.70199 108 7.11785 0.279483 -1.70199 101 7.11543 0.335381 -1.70199 97 7.10311 0.536403 -1.70199 103 7.06719 0.89262 -1.70198 87 7.04585 1.04781 -1.70198 97 9.02057 1.36724 -1.70164 102 9.01623 1.39558 -1.70164 130 7.70858 -0.0264829 -1.70164 102 7.70127 0.336672 -1.70163 101 7.699 0.385053 -1.70163 103 7.68408 0.614626 -1.70163 99 8.09028 0.102644 -1.70152 124 7.08767 0.692283 -1.70148 103 7.08318 0.736807 -1.70148 93 7.05503 0.970011 -1.70148 95 7.04061 1.06965 -1.70148 100 7.7028 -0.244331 -1.70117 102 7.70418 -0.195928 -1.70117 101 7.70651 -0.0506807 -1.70117 101 7.70624 0.0824797 -1.70117 105 7.70594 0.106689 -1.70117 102 7.69006 0.505816 -1.70117 97 7.67813 0.662734 -1.70117 97 7.63839 1.02369 -1.70116 93 7.61774 1.16748 -1.70116 88 7.11773 -0.156718 -1.70098 104 7.11307 0.301695 -1.70098 107 7.09482 0.591866 -1.70098 96 6.85176 0.860136 -1.70074 91 7.69771 -0.328922 -1.7007 100 7.70159 -0.220068 -1.7007 104 7.64274 0.975438 -1.7007 108 7.63964 0.999442 -1.7007 89 7.11287 -0.257247 -1.70048 101 7.11435 -0.21255 -1.70048 107 7.11527 -0.179022 -1.70048 104 7.11709 -0.0784166 -1.70048 109 7.11752 -0.00015455 -1.70048 103 7.1171 0.0781042 -1.70048 97 7.11646 0.122818 -1.70048 94 7.11604 0.14518 -1.70048 100 7.11469 0.201061 -1.70048 94 7.087 0.658533 -1.70048 97 7.03339 1.09119 -1.70047 100 7.7016 -0.135332 -1.70024 98 7.7023 -0.0869391 -1.70023 100 7.69867 0.251802 -1.70023 85 6.87035 -0.67666 -1.70023 108 7.10768 -0.335342 -1.69998 98 7.11171 -0.234829 -1.69998 107 7.11537 -0.0560362 -1.69997 98 7.11335 0.178668 -1.69997 129 7.10661 0.357371 -1.69997 106 7.08907 0.613835 -1.69997 92 7.07386 0.769568 -1.69997 98 7.05228 0.947092 -1.69997 124 8.6702 1.16808 -1.69987 105 7.691 -0.389159 -1.69977 96 7.68933 0.420931 -1.69977 99 7.62434 1.08285 -1.69976 97 7.61738 1.13073 -1.69976 109 6.88969 -0.406301 -1.69971 97 7.11239 -0.134221 -1.69947 101 7.11357 -0.033664 -1.69947 101 7.11015 0.223303 -1.69947 140 7.10902 0.256807 -1.69947 92 7.0951 0.51342 -1.69947 111 7.09174 0.55799 -1.69947 101 7.08517 0.635935 -1.69947 89 7.07775 0.713803 -1.69947 106 7.03953 1.02431 -1.69947 91 8.65088 1.29023 -1.69946 105 7.60635 1.19023 -1.6993 97 7.59676 1.24994 -1.69929 98 6.8686 -0.65472 -1.69919 115 6.88712 0.417017 -1.69919 97 7.10578 -0.290504 -1.69897 104 7.11101 -0.100671 -1.69897 102 7.05843 0.869034 -1.69896 125 7.04236 0.990863 -1.69896 123 7.69504 -0.171474 -1.69883 105 7.69688 0.0340484 -1.69883 99 7.60065 1.21382 -1.69883 95 6.87779 -0.525 -1.69868 114 6.87611 -0.546604 -1.69868 115 8.66067 1.19449 -1.69864 107 8.65688 1.22169 -1.69864 105 7.10907 0.100381 -1.69846 131 7.58492 1.297 -1.69836 96 6.87903 -0.481647 -1.69816 92 6.88796 -0.330267 -1.69816 100 9.03094 1.16635 -1.69807 65 7.09165 0.479611 -1.69796 124 8.63905 1.3162 -1.69781 111 6.85858 -0.697299 -1.69764 111 6.86583 -0.621844 -1.69764 110 6.86961 -0.578689 -1.69764 113 6.88551 0.340954 -1.69764 93 6.87363 -0.502991 -1.69712 115 6.87544 -0.448868 -1.6966 126 6.88538 -0.254317 -1.6966 101 6.84169 0.815185 -1.6966 110 7.57314 1.31951 -1.69649 98 8.62073 1.38275 -1.69615 120 6.87489 -0.427155 -1.69609 87 6.88702 -0.124463 -1.69608 101 6.86005 -0.599628 -1.69557 113 6.8839 -0.17851 -1.69557 128 6.8833 -0.200134 -1.69557 94 6.88545 -0.102806 -1.69557 98 6.88619 0.0161752 -1.69557 98 6.88604 0.0486236 -1.69557 121 6.85617 0.642617 -1.69556 87 6.82565 0.911294 -1.69556 111 8.63554 1.26017 -1.69533 105 7.57553 1.27096 -1.69509 97 6.87876 -0.275736 -1.69505 96 6.88392 0.0702314 -1.69505 96 6.83846 0.792999 -1.69505 111 8.61923 1.35473 -1.69492 112 6.88174 0.0918233 -1.69453 118 6.88123 0.124253 -1.69453 94 6.87975 0.1891 -1.69453 124 6.87726 0.264736 -1.69453 120 6.87497 0.318739 -1.69453 124 6.85527 0.609946 -1.69453 120 6.87031 -0.372757 -1.69401 123 6.87838 0.167433 -1.69401 94 6.87685 0.221447 -1.69401 83 6.86286 0.491262 -1.69401 123 6.85704 0.566694 -1.69401 113 6.83828 0.760319 -1.69401 115 6.82951 0.835464 -1.69401 115 6.82274 0.889077 -1.69401 117 7.55535 1.35317 -1.69369 103 7.5467 1.40061 -1.69369 109 6.87207 0.296959 -1.69349 92 6.86897 0.361712 -1.69349 119 6.86458 0.437219 -1.69349 118 6.85331 0.588059 -1.69349 93 6.84431 0.684888 -1.69349 110 6.841 0.717132 -1.69349 86 6.83872 0.738618 -1.69349 118 6.81511 0.93166 -1.69349 112 7.54915 1.37655 -1.69322 108 6.86759 -0.35099 -1.69298 96 6.87263 -0.232281 -1.69298 125 6.87477 -0.156697 -1.69298 93 6.8765 -0.0270881 -1.69298 117 6.87655 -0.00548606 -1.69298 92 6.86526 0.39396 -1.69298 86 6.87033 0.242829 -1.69246 97 6.85551 0.512371 -1.69246 102 6.84258 0.662993 -1.69246 118 6.87243 -0.0594784 -1.69194 88 6.85109 0.544509 -1.69194 116 6.87028 -0.0810517 -1.69142 125 6.86922 0.145583 -1.69142 125 6.85473 0.469004 -1.69142 92 8.03026 -0.504398 -1.69127 135 6.86001 -0.307433 -1.69039 125 8.62711 1.12076 -1.68955 79 7.93456 1.01571 -1.68056 108 7.89359 0.809221 -1.66585 175 7.87214 -0.532226 -1.6556 116 7.85769 -0.692691 -1.65516 109 7.84428 -0.666733 -1.65159 119 7.81993 0.838694 -1.6498 113 7.80234 0.973433 -1.64936 98 7.80342 0.948675 -1.64891 106 7.83273 -0.641017 -1.64847 114 8.25162 1.07184 -1.64808 77 7.79669 0.922977 -1.64668 111 7.82764 -0.554067 -1.6458 92 7.82011 -0.602952 -1.64491 103 7.79401 0.860612 -1.64445 116 7.81224 -0.577695 -1.64268 114 7.78158 0.883961 -1.64222 110 7.77675 -0.706006 -1.53755 80 7.71857 -0.676081 -1.52447 79 7.68798 0.963611 -1.52447 86 7.65408 0.935075 -1.51645 96 7.76096 -0.733352 -1.49866 59 7.49385 0.892167 -1.48101 92 7.62148 0.962715 -1.47469 69 7.59754 -0.694389 -1.46354 77 7.40516 -0.624128 -1.45612 112 7.3684 -0.51608 -1.44642 80 7.33556 -0.536831 -1.43967 87 7.3056 0.835534 -1.43924 84 7.43422 0.914689 -1.4342 144 7.28901 -0.556291 -1.42996 78 7.28436 -0.590474 -1.42954 82 7.27441 0.681975 -1.42912 255 7.28193 -0.429297 -1.42659 255 7.25091 0.760342 -1.42574 107 7.24404 0.805678 -1.42532 71 7.23682 0.781902 -1.42321 50 7.26153 -0.473834 -1.42279 255 7.37841 -0.640077 -1.41644 165 7.23064 -0.323573 -1.41435 58 7.18436 0.719403 -1.41055 194 7.18792 0.594553 -1.40886 166 7.18911 -0.287623 -1.40507 40 7.32816 -0.531669 -1.40404 228 7.29334 0.8736 -1.40362 110 7.32589 -0.508388 -1.40321 224 7.29683 0.734757 -1.40114 161 7.30498 -0.553138 -1.3995 113 7.28086 0.756212 -1.39825 131 7.13535 0.612963 -1.3979 255 7.27139 0.789861 -1.39701 201 7.28864 -0.586507 -1.3966 73 7.14563 -0.341962 -1.39621 246 7.12954 0.454855 -1.3941 39 7.11067 0.689746 -1.3941 255 7.26725 -0.607839 -1.39247 74 7.12695 -0.363447 -1.39241 255 7.11952 0.487943 -1.39241 39 7.53069 0.952911 -1.39108 153 7.23971 0.809334 -1.39081 129 7.1224 -0.23989 -1.3903 45 7.1082 0.509642 -1.3903 43 7.09638 0.632214 -1.38988 255 7.11484 -0.161306 -1.38819 45 7.10361 0.430896 -1.38819 39 7.11054 -0.0606365 -1.38693 45 7.10633 0.252059 -1.38693 46 7.10403 -0.261551 -1.38651 44 7.10587 -0.205752 -1.38651 45 7.10807 -0.105277 -1.38651 46 7.09923 0.330015 -1.38608 45 7.09517 0.408053 -1.38608 46 7.10489 -0.0270863 -1.38566 67 7.10123 0.229565 -1.38566 46 7.10163 -0.138637 -1.38524 46 7.1025 -0.0828536 -1.38524 45 7.09311 0.37442 -1.38524 47 7.09064 -0.383807 -1.38482 255 7.08546 -0.439356 -1.3844 255 7.09671 -0.18314 -1.3844 45 7.2041 0.828159 -1.38379 66 7.08644 0.351776 -1.38355 46 7.0916 0.151262 -1.38313 45 7.08792 0.273767 -1.38313 45 7.08928 0.0175781 -1.38229 45 7.08464 0.19568 -1.38186 46 7.08069 0.306937 -1.38186 46 7.08539 -0.00468214 -1.38144 47 7.08305 0.0732137 -1.38102 45 7.08279 0.0954642 -1.38102 45 7.08129 0.0509557 -1.3806 45 7.0805 0.117692 -1.3806 45 7.0774 0.173257 -1.38018 45 7.48329 -0.681869 -1.3756 124 7.19074 -0.476795 -1.37429 209 7.39936 0.913152 -1.36368 187 7.14652 -0.361407 -1.36355 255 7.11823 0.67097 -1.3623 255 7.1343 -0.43951 -1.3619 255 7.12323 0.592491 -1.36189 255 7.13369 -0.416989 -1.36148 255 7.11742 0.637051 -1.36148 255 7.13301 -0.394476 -1.36107 255 7.11743 0.614514 -1.36106 255 7.09669 0.556517 -1.35569 98 7.08897 -0.336387 -1.35115 209 7.3468 -0.645682 -1.3474 130 7.07268 -0.257778 -1.34702 71 7.06457 -0.31308 -1.34578 80 7.06401 -0.279714 -1.34537 74 7.04346 0.507625 -1.34371 71 7.04471 0.429897 -1.34289 67 7.05264 -0.212767 -1.34247 77 7.03942 0.45176 -1.34206 66 7.01485 0.683093 -1.34082 255 7.28674 0.864828 -1.33985 151 7.03629 -0.234457 -1.33917 87 7.03233 -0.0243853 -1.33752 64 7.02813 -0.178971 -1.3371 71 7.03041 -0.00229699 -1.3371 64 7.02716 -0.134781 -1.33669 31 7.00868 0.471795 -1.33586 81 7.02084 -0.156746 -1.33545 66 7.01383 0.350521 -1.33545 27 7.59615 0.991513 -1.33534 89 7.00891 0.40548 -1.33503 59 7.01844 -0.057464 -1.33462 54 7.00879 0.372338 -1.33462 54 7.00855 0.29507 -1.3338 28 7.01207 -0.101498 -1.33338 28 7.01235 -0.0794668 -1.33338 28 7.01116 0.151849 -1.33338 61 7.01007 0.195899 -1.33338 61 7.00553 0.272884 -1.33297 28 7.6136 -0.712156 -1.33268 74 7.00886 0.0196482 -1.33256 62 7.00485 0.0416281 -1.33173 65 7.00282 0.173651 -1.33173 63 6.99536 0.327499 -1.33132 27 7.00066 0.0745791 -1.3309 66 6.99768 0.217511 -1.3309 60 6.99658 0.250486 -1.3309 30 7.26774 -0.603944 -1.33072 218 6.99844 0.096543 -1.33049 64 6.99223 0.118406 -1.32925 62 7.22903 0.835168 -1.32754 222 7.24616 -0.579151 -1.32596 230 7.22841 -0.554813 -1.32199 234 7.20434 0.809488 -1.32198 230 7.19833 0.774518 -1.32 234 7.2114 -0.519266 -1.31801 238 7.53364 -0.68109 -1.31673 141 7.20322 -0.495899 -1.31603 239 7.18122 0.749936 -1.31602 235 7.4863 0.952869 -1.31331 186 7.16013 0.725084 -1.31126 238 7.15566 0.690609 -1.30967 239 7.14423 0.644282 -1.30649 239 7.14216 -0.46893 -1.30332 241 7.13149 0.586773 -1.30292 239 7.11961 0.563334 -1.30014 239 7.126 -0.445326 -1.29975 241 7.11991 0.507133 -1.29935 239 7.11824 -0.41114 -1.29776 241 7.11853 0.406011 -1.29776 239 7.11317 0.46179 -1.29736 238 7.12372 -0.187228 -1.29696 238 7.12452 -0.153655 -1.29696 238 7.12301 -0.131229 -1.29657 238 7.09337 0.662348 -1.29656 241 7.10803 0.383057 -1.29537 239 7.10579 -0.387977 -1.29498 242 7.11555 -0.108704 -1.29498 239 7.10284 0.438757 -1.29498 239 7.08372 0.616625 -1.29378 240 7.10618 -0.0750309 -1.29299 239 7.10651 -0.0303828 -1.29299 239 7.08741 -0.364572 -1.29101 242 7.09005 -0.308897 -1.29101 241 7.08709 -0.331071 -1.29061 242 7.07247 0.537426 -1.29021 241 7.08518 -0.230636 -1.28942 240 7.0812 -0.286186 -1.28902 241 7.08247 -0.252815 -1.28902 241 7.07061 0.481488 -1.28902 240 7.08 -0.208183 -1.28823 241 7.0622 0.35851 -1.28584 240 7.06541 -0.00785407 -1.28465 240 7.05893 0.302806 -1.28465 241 7.05938 0.0476161 -1.28346 241 7.05206 0.32473 -1.28346 240 7.05738 -0.0521643 -1.28306 240 7.36159 -0.642829 -1.28293 187 7.05527 0.0697679 -1.28267 240 7.05408 0.147341 -1.28267 243 7.3329 0.8977 -1.28255 180 7.04809 0.280205 -1.28227 244 7.05165 0.0254401 -1.28187 241 7.05094 0.102973 -1.28187 241 7.04743 0.180454 -1.28148 245 7.04615 0.224728 -1.28147 246 7.04149 0.246739 -1.28068 247 7.03311 0.202248 -1.2787 247 7.01139 0.124571 -1.27393 255 7.29603 -0.602716 -1.26964 222 7.25383 0.864608 -1.2666 223 7.24871 0.840883 -1.26508 236 7.26851 -0.577564 -1.26395 234 7.25267 -0.553444 -1.26053 238 7.22401 0.814926 -1.25976 238 7.2289 -0.528885 -1.25559 240 7.55143 0.952312 -1.25419 131 7.15752 0.773029 -1.24609 241 7.17253 -0.491003 -1.2442 242 7.5127 -0.711578 -1.24226 75 7.12868 0.747152 -1.24001 243 7.14856 -0.466896 -1.23926 244 7.11341 0.7229 -1.2366 244 7.13039 -0.443289 -1.23546 244 7.09134 0.686819 -1.23166 255 7.10495 -0.408206 -1.23015 244 7.10031 -0.385585 -1.22901 246 7.10149 -0.363277 -1.22901 246 7.07978 0.663207 -1.229 255 7.07988 0.640779 -1.22862 246 7.07891 0.607054 -1.22786 247 7.09475 -0.340618 -1.22749 246 7.09431 -0.307103 -1.22711 245 7.07491 0.584307 -1.22672 246 7.07475 0.561917 -1.22634 246 7.40205 0.910388 -1.22597 102 7.08936 -0.284599 -1.22597 246 7.07061 0.53922 -1.2252 246 7.08433 -0.262129 -1.22483 245 7.07112 0.505745 -1.22482 246 7.08156 -0.22863 -1.22407 244 7.06679 0.483103 -1.22369 246 7.07893 -0.184043 -1.22331 246 7.07635 -0.206232 -1.22293 244 7.06436 0.460631 -1.22293 245 7.07383 -0.150579 -1.22217 243 7.07427 -0.128355 -1.22217 244 7.07267 -0.106108 -1.22179 244 7.06057 0.426957 -1.22179 244 7.05992 0.404656 -1.22141 244 7.0674 -0.0505355 -1.22065 245 7.05527 0.382135 -1.22027 243 7.06315 -0.0838072 -1.21989 244 7.0636 0.0271468 -1.21989 242 7.0561 0.32661 -1.21989 242 7.05504 0.348782 -1.21989 241 7.05967 -0.0283297 -1.21913 243 7.05534 0.248855 -1.21913 243 7.05316 0.304259 -1.21913 241 7.05412 0.226619 -1.21875 242 7.05543 0.0714238 -1.21837 242 7.05502 0.104669 -1.21837 242 7.05366 0.049233 -1.21799 242 7.05087 0.20433 -1.21799 241 7.0482 0.281844 -1.21799 243 7.05187 -0.00617303 -1.21761 242 7.05073 0.126746 -1.21761 242 7.04979 0.171045 -1.21761 243 7.0503 0.148895 -1.21761 242 7.34754 -0.660429 -1.21115 115 7.27787 0.872365 -1.20246 179 7.27906 -0.630977 -1.19812 191 7.22912 0.832176 -1.19269 203 7.22026 -0.602814 -1.18691 214 7.18867 0.804796 -1.18473 219 7.19361 -0.566361 -1.18148 221 7.5554 0.96147 -1.17946 140 7.16182 0.779124 -1.1793 222 7.17575 -0.542206 -1.17786 224 7.14075 0.754228 -1.17496 225 7.55374 -0.7072 -1.17433 108 7.1578 -0.518169 -1.17424 225 7.13248 0.719426 -1.17279 226 7.14566 -0.494678 -1.17171 227 7.12295 0.695912 -1.17062 228 7.14006 -0.460465 -1.17026 227 7.12774 -0.437138 -1.16773 229 7.10943 0.672108 -1.16773 228 7.12122 -0.414258 -1.16629 229 7.10272 0.637753 -1.16592 228 7.10935 -0.37991 -1.16375 227 7.09293 0.614458 -1.16375 227 7.10461 -0.357256 -1.16267 228 7.08698 0.591548 -1.1623 228 7.08096 0.56868 -1.16085 226 7.08998 -0.334136 -1.15977 222 7.08314 -0.311486 -1.15833 226 7.06951 0.511968 -1.15796 226 7.0806 -0.277935 -1.1576 226 7.06394 0.533898 -1.15724 223 7.07751 -0.255533 -1.15688 226 7.07434 -0.233153 -1.15616 227 7.06349 0.455832 -1.15615 227 7.06127 0.489113 -1.15615 227 7.059 0.433299 -1.15507 229 7.06553 -0.1995 -1.15435 229 7.06665 -0.155102 -1.15435 229 7.06613 -0.177302 -1.15435 229 7.05744 0.355381 -1.15398 229 7.05629 0.377551 -1.15398 229 7.05247 0.410692 -1.15362 229 7.05978 -0.0994562 -1.1529 229 7.05747 -0.121594 -1.15254 229 7.05066 0.332866 -1.15254 230 7.04971 0.310634 -1.15217 230 7.0524 -0.0550061 -1.15145 229 7.05065 0.000391886 -1.15109 230 7.05022 0.0779165 -1.15109 228 7.04959 0.122213 -1.15109 229 7.0452 0.2772 -1.15109 230 7.04603 0.255065 -1.15109 229 7.04826 -0.0771041 -1.15073 228 7.04846 0.0557589 -1.15073 228 7.04483 0.23287 -1.15073 229 7.04668 -0.0217318 -1.15037 229 7.045 0.15536 -1.15037 229 7.04448 0.177491 -1.15037 229 7.04389 0.199621 -1.15037 229 7.04471 0.0225451 -1.15 229 7.04404 0.100003 -1.15 228 7.39029 0.916288 -1.14999 177 7.40281 -0.670144 -1.1476 173 7.31296 0.883098 -1.13594 223 7.32537 -0.628629 -1.13355 229 7.2998 -0.603438 -1.12875 242 7.27009 0.843013 -1.12772 237 7.25313 0.817891 -1.12429 246 7.23804 0.793106 -1.12121 248 7.22504 -0.574683 -1.11539 251 7.21391 -0.53965 -1.11299 255 7.20771 -0.516449 -1.11162 252 7.17117 0.751344 -1.10887 252 7.20309 -0.277832 -1.10853 231 7.20393 -0.255202 -1.10853 232 7.20728 0.129722 -1.10853 245 7.18963 -0.492527 -1.10819 253 7.20091 -0.153231 -1.10751 232 7.16566 0.727986 -1.1075 253 7.1838 0.491119 -1.10716 228 7.19186 -0.311382 -1.10682 229 7.18888 -0.33389 -1.10648 241 7.19288 -0.232229 -1.10648 231 7.19193 -0.198284 -1.10614 231 7.19251 -0.175689 -1.10613 231 7.19387 0.106824 -1.10613 235 7.19029 0.185859 -1.10579 233 7.17745 0.468006 -1.10579 219 7.18953 -0.130436 -1.10545 229 7.18019 0.388946 -1.10545 219 7.17692 0.445326 -1.10545 214 7.17417 -0.457577 -1.10511 254 7.18869 0.0276743 -1.10511 233 7.18207 0.309881 -1.10511 231 7.18053 0.343722 -1.10511 228 7.18659 -0.0513628 -1.10476 230 7.17745 0.366171 -1.10476 224 7.18416 -0.0964972 -1.10442 228 7.18443 -0.0739268 -1.10442 229 7.18481 0.00507312 -1.10442 232 7.18463 0.0502164 -1.10442 233 7.17993 0.264589 -1.10442 231 7.16569 0.52376 -1.10442 228 7.16967 -0.434699 -1.10408 255 7.17876 0.241958 -1.10408 230 7.17041 0.422285 -1.10408 213 7.16205 0.546112 -1.10408 234 7.18084 -0.0175033 -1.10374 229 7.17785 0.208062 -1.10373 230 7.17705 0.162906 -1.10339 232 7.17316 0.286887 -1.10339 228 7.17643 0.0839519 -1.10305 233 7.13851 0.70247 -1.10236 255 7.14739 -0.410902 -1.09997 255 7.12499 0.678488 -1.09962 255 7.12026 0.644167 -1.09825 255 7.13093 -0.387547 -1.09688 255 7.12874 -0.353758 -1.0962 255 7.10459 0.620188 -1.09517 255 7.60972 0.978828 -1.09245 105 7.08961 0.562739 -1.09174 255 7.08491 0.595969 -1.0914 255 7.55042 -0.708155 -1.07814 98 7.70935 -0.733098 -1.07136 74 7.44174 0.922185 -1.06445 139 7.38852 -0.657293 -1.0514 104 7.55428 0.9496 -1.05089 90 7.32301 0.884552 -1.04471 173 7.50998 -0.67913 -1.03942 89 7.30795 -0.626701 -1.03804 164 7.28824 -0.601876 -1.03453 205 7.26298 0.854384 -1.03453 208 7.25122 0.818432 -1.03198 213 7.26148 -0.565119 -1.02976 219 7.25141 -0.541381 -1.02785 227 7.22627 0.792733 -1.02753 224 7.23535 -0.517264 -1.02499 233 7.20908 0.768007 -1.02434 231 7.21801 -0.481776 -1.0218 233 7.1969 0.732479 -1.0218 235 7.37296 0.90265 -1.02174 135 7.20176 -0.457907 -1.01894 234 7.20636 -0.378691 -1.01894 242 7.17558 0.707626 -1.01798 234 7.19963 -0.355633 -1.01766 243 7.18093 0.605798 -1.01734 236 7.37031 -0.643655 -1.01709 139 7.17187 0.68454 -1.01702 235 7.18937 -0.434398 -1.01671 235 7.1907 -0.411811 -1.01671 219 7.17886 0.582931 -1.01671 242 7.19282 -0.332621 -1.01639 241 7.19431 -0.298724 -1.01639 241 7.19324 -0.276036 -1.01607 242 7.17759 0.548807 -1.01607 241 7.17498 0.503308 -1.01512 242 7.17337 0.525845 -1.01512 241 7.16218 0.660961 -1.01512 235 7.18223 -0.252978 -1.01416 240 7.17062 0.480391 -1.01416 239 7.18137 -0.219061 -1.01385 238 7.18202 -0.196496 -1.01385 241 7.16886 0.446359 -1.01352 241 7.15538 0.626376 -1.01352 231 7.16825 0.423727 -1.01321 238 7.17783 -0.117402 -1.01289 243 7.17471 -0.173714 -1.01257 239 7.17127 -0.151077 -1.01194 239 7.1615 0.366949 -1.01162 240 7.15969 0.400691 -1.01162 238 7.29143 0.86913 -1.0084 190 7.3073 -0.615253 -1.00686 220 7.6669 0.960451 -1.00596 114 7.26875 -0.577673 -1.00035 226 7.24115 0.839885 -1.00003 223 7.08766 0.341115 -0.999521 255 7.23522 0.804621 -0.998483 228 7.25477 -0.55369 -0.997867 229 7.63693 -0.705532 -0.997435 123 7.24858 -0.530348 -0.996627 232 7.21807 0.779696 -0.995382 231 7.23641 -0.506655 -0.994457 235 7.21067 0.755952 -0.993832 234 7.04924 0.317215 -0.993156 255 7.22886 -0.471939 -0.992906 236 7.04835 0.239568 -0.99252 255 7.04315 0.217264 -0.991565 255 7.04079 0.283634 -0.991565 255 7.03967 0.261445 -0.991246 255 7.19646 0.720132 -0.991041 236 7.21783 -0.391628 -0.990425 237 7.21256 -0.448189 -0.990115 237 7.21705 -0.368858 -0.990115 241 7.19805 0.617617 -0.989801 241 7.03267 0.00703107 -0.989338 255 7.03028 0.183764 -0.989337 255 7.03009 -0.0923528 -0.98902 255 7.02884 0.161633 -0.989019 255 7.21133 -0.323175 -0.988874 241 7.18493 0.696134 -0.988871 237 7.02822 0.0843269 -0.988701 255 7.2083 -0.345747 -0.988564 242 7.19011 0.594153 -0.988251 240 7.18314 0.673174 -0.988251 237 7.0245 0.0622243 -0.988064 255 7.02397 0.10636 -0.988064 255 7.02339 0.139456 -0.988064 255 7.188 0.571236 -0.987631 242 7.02048 -0.0701328 -0.987428 255 7.02081 -0.0149956 -0.987428 255 7.19617 -0.424546 -0.987324 239 7.01876 -0.0370331 -0.98711 255 7.01879 0.0291173 -0.98711 255 7.20092 -0.288759 -0.987014 243 7.2018 -0.266137 -0.987014 243 7.2026 -0.243511 -0.987014 244 7.19018 0.457863 -0.986701 243 7.19774 -0.209415 -0.986083 244 7.19639 -0.186759 -0.985773 243 7.18699 0.412315 -0.985771 244 7.1788 0.536433 -0.98577 243 7.1705 0.637861 -0.98577 235 7.18005 0.491171 -0.985461 243 7.19368 -0.130172 -0.985153 244 7.19101 -0.164034 -0.984843 243 7.1706 0.513131 -0.98422 243 7.17702 0.377775 -0.983911 244 7.17383 0.434135 -0.98391 244 7.47933 0.913746 -0.977417 133 7.11109 0.351664 -0.973368 249 7.37742 0.8664 -0.961526 123 7.01229 -0.105512 -0.956625 255 7.36633 -0.644602 -0.956529 116 6.99864 0.092536 -0.954454 255 6.99491 0.246414 -0.954454 255 6.99178 0.323306 -0.954453 255 6.99678 -0.0833535 -0.954145 255 6.99727 -0.00641416 -0.954144 255 6.99726 0.0155672 -0.954144 255 6.99711 0.0485389 -0.954144 255 6.99079 0.301248 -0.954143 255 6.99503 -0.0613635 -0.953835 255 6.99495 0.0704955 -0.953834 255 6.99375 0.147405 -0.953834 255 6.99325 0.169375 -0.953834 255 6.99327 -0.028394 -0.953524 255 6.9922 0.125388 -0.953524 255 6.99071 0.191281 -0.953524 255 6.98973 0.22422 -0.953524 255 6.98424 0.267971 -0.952903 255 7.32497 -0.617647 -0.950055 62 7.29336 -0.591793 -0.945052 54 7.29321 -0.568716 -0.944758 81 7.27412 -0.532675 -0.94152 83 7.24307 0.805012 -0.940632 68 7.22392 0.779997 -0.937396 82 7.24419 -0.507495 -0.936812 77 7.21964 0.745164 -0.936219 103 7.23785 -0.484177 -0.935635 57 7.23216 -0.449545 -0.934457 70 7.23353 -0.426822 -0.934457 159 7.20816 0.721151 -0.934159 114 7.21171 0.641513 -0.93357 143 7.19857 0.697395 -0.932393 135 7.70473 0.96279 -0.932233 175 7.19981 0.663293 -0.932099 166 7.21509 -0.402921 -0.931514 213 7.19989 0.617721 -0.931511 193 7.18252 0.299127 -0.92592 255 7.18675 0.0169134 -0.925627 255 7.68238 -0.688136 -0.925108 142 7.18232 -0.0846253 -0.925039 255 7.18255 -0.0620623 -0.925039 255 7.18217 0.0958937 -0.925038 255 7.18073 -0.0394773 -0.924745 255 7.17673 0.174779 -0.92445 255 7.17549 0.219865 -0.924449 255 7.17438 0.253678 -0.924449 255 7.15568 -0.365565 -0.922391 248 7.1308 0.589487 -0.920916 245 7.12518 -0.341453 -0.917683 254 7.11239 -0.318397 -0.915623 255 7.09799 0.553239 -0.915619 254 7.11072 -0.262367 -0.915034 255 7.10953 -0.239952 -0.91474 255 7.11025 -0.217616 -0.91474 255 7.09377 0.530518 -0.914737 255 7.10545 -0.295693 -0.914446 255 7.0972 0.452369 -0.914443 255 7.09574 0.474663 -0.914443 255 7.09145 0.507959 -0.914148 255 7.10526 -0.183932 -0.913857 255 7.10628 -0.139281 -0.913856 255 7.09463 0.429847 -0.913854 255 7.10383 -0.161557 -0.913562 255 7.09498 0.35163 -0.913266 255 7.0867 0.395889 -0.912383 255 7.07211 0.37285 -0.910029 255 7.01983 -0.104179 -0.900908 255 7.00513 0.325454 -0.899729 255 7.47182 0.909052 -0.899317 108 7.00279 -0.00485229 -0.898259 255 7.00269 0.0391449 -0.898259 255 6.99649 0.0721061 -0.897376 255 6.99392 0.116037 -0.897081 255 6.98957 0.13795 -0.896493 255 6.98827 0.192838 -0.896493 255 6.97782 0.269388 -0.895315 255 7.35178 -0.601497 -0.878477 152 7.33629 0.728718 -0.877923 156 7.299 0.852523 -0.874631 136 7.31808 -0.575727 -0.873539 197 7.31676 -0.540957 -0.87299 228 7.28787 0.827976 -0.872711 185 7.2843 0.769632 -0.871339 152 7.30063 -0.516772 -0.870522 225 7.30024 -0.493707 -0.870247 185 7.26698 0.744656 -0.868597 128 7.255 0.801038 -0.867773 171 7.23005 -0.409422 -0.859824 191 7.2228 -0.431801 -0.859001 226 7.20373 0.657967 -0.858722 195 7.21745 -0.454255 -0.858452 102 7.2135 -0.385818 -0.857355 221 7.18998 0.633882 -0.856528 201 7.19742 -0.351016 -0.854886 226 7.17812 0.610068 -0.854608 220 7.16901 0.688763 -0.854333 147 7.17499 0.575737 -0.853785 227 7.18661 -0.327904 -0.85324 228 7.18563 -0.305248 -0.852966 213 7.17084 0.552716 -0.852962 225 7.1822 0.168919 -0.851867 244 7.16267 0.529421 -0.851591 141 7.16068 0.472733 -0.850768 232 7.16719 -0.270708 -0.850223 195 7.16404 -0.248067 -0.849674 213 7.14137 0.493937 -0.8483 221 7.13609 0.190103 -0.845558 212 7.12128 -0.145998 -0.843365 252 7.12022 -0.0900459 -0.84309 251 7.12047 -0.0676766 -0.84309 251 7.12078 -0.0117508 -0.84309 250 7.12078 0.0106198 -0.84309 251 7.11774 -0.123571 -0.842816 253 7.11867 -0.0453012 -0.842816 251 7.1129 0.290085 -0.842814 252 7.1104 0.345943 -0.842814 253 7.10809 0.39061 -0.842814 251 7.1133 -0.224125 -0.842542 252 7.11484 -0.168251 -0.842542 253 7.11675 0.0329576 -0.842541 251 7.1126 0.245315 -0.84254 251 7.10997 0.312337 -0.84254 251 7.1073 0.368169 -0.84254 253 7.81205 -0.695469 -0.842118 45 7.11265 0.0552702 -0.841992 253 7.10972 0.211664 -0.841992 252 7.10803 -0.20163 -0.841719 253 7.10586 0.267412 -0.841717 252 7.09233 0.423226 -0.840894 253 7.10241 0.0886273 -0.840621 255 7.10171 0.133251 -0.840621 255 7.08899 0.445373 -0.840619 253 7.10011 0.110902 -0.840346 254 7.76965 0.913163 -0.839437 78 7.50425 -0.643275 -0.800121 44 7.44941 0.852894 -0.795568 55 7.42425 -0.6009 -0.788887 91 10.0568 1.09036 -0.787082 41 8.08944 -0.70021 -0.786684 190 7.38043 0.810033 -0.785671 147 10.0476 1.02557 -0.785507 40 7.39251 -0.574843 -0.784339 238 8.03724 0.938979 -0.783248 175 9.9803 1.12986 -0.779993 62 9.97076 1.16054 -0.779402 82 7.33804 0.758917 -0.779252 237 7.35279 -0.548374 -0.778722 244 7.32773 0.781156 -0.778182 228 7.32855 0.734717 -0.777647 238 7.34541 -0.512993 -0.777384 243 7.33314 -0.488942 -0.775512 242 7.31632 0.675563 -0.77524 241 7.31416 0.698543 -0.775239 242 7.31487 -0.464575 -0.772837 246 7.31302 -0.429853 -0.772301 245 7.31433 -0.406876 -0.772301 239 7.29274 0.650371 -0.771762 244 7.29367 0.592771 -0.771228 233 7.27956 0.488221 -0.768286 235 7.27799 0.511087 -0.768285 238 7.60225 0.879364 -0.767498 65 7.26214 -0.380902 -0.765079 184 7.25935 -0.357876 -0.764544 168 7.26086 -0.277952 -0.764276 248 7.2404 0.611527 -0.764273 231 7.24907 -0.323091 -0.762939 209 7.24625 -0.243144 -0.762136 249 7.24213 -0.299959 -0.761869 205 7.24499 -0.220311 -0.761868 250 7.22631 0.564699 -0.761865 228 7.22608 0.541851 -0.761598 205 7.24169 -0.197422 -0.761333 251 7.23401 0.34854 -0.761064 249 7.23105 0.405348 -0.761064 249 7.22974 0.428062 -0.761063 250 7.23857 -0.163193 -0.760798 250 7.23946 -0.117711 -0.760798 250 7.2303 0.382533 -0.760796 248 7.23707 -0.140407 -0.760531 250 7.23781 -0.0949321 -0.760531 249 7.23425 0.246122 -0.760529 248 7.23635 -0.0380663 -0.760263 249 7.23643 -0.0153339 -0.760263 249 7.23367 0.200615 -0.760262 249 7.23103 0.280142 -0.760262 248 7.22912 0.325567 -0.760261 249 7.23421 -0.0607747 -0.759995 251 7.23444 0.0187706 -0.759995 249 7.23435 0.0414968 -0.759995 255 7.23255 0.166485 -0.759994 249 7.23102 0.223284 -0.759994 249 7.22813 0.30278 -0.759994 247 7.21577 0.461408 -0.759458 228 7.21214 0.0867711 -0.757052 144 7.20842 0.0640866 -0.756517 223 7.20175 0.120624 -0.755715 226 7.20133 0.143247 -0.755715 214 7.49623 -0.622264 -0.75068 61 7.36655 0.827837 -0.736655 183 7.36958 -0.588892 -0.734111 113 7.30998 0.798024 -0.729008 149 7.59624 0.864722 -0.728123 49 7.61403 -0.62138 -0.727394 68 7.31885 -0.55033 -0.727229 199 7.30831 -0.503429 -0.725444 251 7.28642 0.737483 -0.725185 245 7.30268 -0.468504 -0.724425 254 7.28081 0.713787 -0.724165 253 7.2771 0.690325 -0.723401 255 9.97796 1.06067 -0.723299 62 7.29422 -0.44499 -0.72315 255 7.27632 0.655657 -0.722891 255 7.26512 0.769868 -0.72289 227 7.28492 -0.524895 -0.722641 242 9.97134 1.02827 -0.72237 55 7.28696 -0.398644 -0.721875 255 7.28369 -0.421428 -0.721621 255 7.26056 0.631186 -0.720597 255 9.93767 1.1353 -0.720325 66 7.27291 -0.363565 -0.719836 255 7.25658 0.607857 -0.719832 255 7.26807 -0.340458 -0.719071 255 7.26712 -0.317543 -0.718816 255 9.91627 1.16438 -0.718652 182 7.23762 0.571853 -0.717029 255 7.24836 -0.236984 -0.716012 255 7.22751 0.548171 -0.715499 255 7.24078 -0.282312 -0.715248 255 7.22488 0.502317 -0.714735 255 7.23172 -0.259243 -0.713973 255 7.21733 0.524559 -0.71397 255 7.22362 -0.202196 -0.712698 255 7.21078 0.444393 -0.712441 255 7.20935 0.467046 -0.712441 255 7.21827 -0.179374 -0.711933 255 7.46797 0.814946 -0.711708 137 7.2062 0.42137 -0.711676 255 7.20533 0.364545 -0.711167 255 7.19821 0.386837 -0.710402 255 7.19698 -0.156302 -0.709129 255 7.19743 -0.133691 -0.709129 255 7.19798 -0.0997723 -0.709129 255 7.19059 0.341099 -0.709127 255 7.19429 -0.0771305 -0.708619 255 7.1945 -0.0545285 -0.708619 255 7.19471 0.00197826 -0.708619 255 7.19239 0.182783 -0.708618 255 7.18815 0.307029 -0.708618 255 7.1927 -0.0206261 -0.708364 255 7.19249 0.0584638 -0.708364 255 7.19198 0.103652 -0.708364 255 7.19094 0.160137 -0.708363 255 7.18796 0.261775 -0.708363 255 7.1871 0.284354 -0.708363 255 7.1907 0.0245575 -0.708109 255 7.19029 0.0810286 -0.708109 255 7.18781 0.205249 -0.708108 255 7.18677 0.23912 -0.708108 255 7.18765 0.126163 -0.707854 255 7.44185 -0.583203 -0.705833 103 7.39744 0.783993 -0.702643 78 7.78851 -0.619154 -0.702633 95 9.24195 0.332698 -0.701228 40 7.37834 -0.554681 -0.697748 96 7.70468 0.86876 -0.695627 78 9.17541 0.402662 -0.694927 40 7.32283 0.753104 -0.693088 112 9.15476 0.373007 -0.692761 43 7.32463 -0.527311 -0.690888 100 7.2848 0.714664 -0.687943 143 7.30129 -0.490966 -0.687703 158 7.30423 -0.445081 -0.687703 236 7.28842 -0.40959 -0.685497 240 7.27244 0.632876 -0.685493 235 7.26724 0.68997 -0.685493 185 7.27705 -0.466284 -0.684518 221 7.24565 0.665045 -0.682553 225 7.24669 0.607796 -0.682064 242 7.2446 0.584723 -0.681574 242 7.25598 -0.384783 -0.681332 245 7.25517 -0.36188 -0.681087 245 7.22463 0.560352 -0.678879 246 7.23697 -0.32672 -0.678637 247 7.58331 -0.567589 -0.678134 94 7.2221 -0.30326 -0.676677 248 7.21054 0.479636 -0.676429 246 7.209 0.502285 -0.676429 247 7.20739 0.524929 -0.676429 246 7.21905 -0.280401 -0.676187 249 7.21989 -0.25772 -0.676187 248 7.21012 0.422768 -0.675939 247 7.21773 -0.200883 -0.675697 248 7.21508 -0.223488 -0.675452 249 7.2171 -0.144142 -0.675451 247 7.2048 0.445189 -0.675449 246 7.21435 -0.178094 -0.675207 248 7.53367 0.82493 -0.675095 103 7.21355 -0.121387 -0.674961 247 7.20471 0.377074 -0.674959 246 7.21218 -0.076033 -0.674716 249 7.20442 0.343033 -0.674715 245 7.20151 0.399602 -0.674714 248 7.20992 -0.0986561 -0.674471 248 7.20625 0.184437 -0.674225 244 7.20379 0.263662 -0.674225 245 7.2066 -0.0193493 -0.673981 248 7.20048 0.297531 -0.67398 247 7.19951 0.320151 -0.67398 245 7.20452 -0.0419707 -0.673736 249 7.20439 0.059882 -0.673736 250 7.20417 0.082515 -0.673736 246 7.20283 0.161723 -0.673735 246 7.20134 0.218288 -0.673735 246 7.20256 0.0372453 -0.673491 247 7.20172 0.116438 -0.67349 246 7.20132 0.139062 -0.67349 247 7.20067 0.00330984 -0.673246 247 7.19665 0.240792 -0.673245 246 7.47606 -0.536323 -0.665301 104 7.44861 0.779802 -0.664596 166 7.40559 0.751627 -0.65923 92 7.41824 -0.508962 -0.658301 127 7.39403 -0.484058 -0.655268 121 7.36381 0.688834 -0.65363 98 7.38174 -0.425113 -0.653401 97 7.37838 -0.448188 -0.653168 94 7.36199 0.665323 -0.653164 95 7.35456 0.722926 -0.65293 98 7.37803 -0.343581 -0.652468 101 7.37114 -0.401314 -0.652001 102 7.34426 0.640398 -0.650831 107 7.36104 -0.366024 -0.650601 101 7.35922 -0.319608 -0.650135 107 7.33322 0.581389 -0.648964 105 7.32644 0.61559 -0.648498 121 7.33836 -0.295685 -0.647568 100 7.32089 0.534085 -0.647098 92 7.31719 0.556923 -0.646864 97 7.33052 -0.237754 -0.646401 115 7.3218 -0.260528 -0.645468 124 7.30747 0.498442 -0.645232 98 7.3118 0.394974 -0.644999 104 7.31053 0.417943 -0.644999 102 7.31535 -0.214314 -0.644534 109 7.30306 0.475075 -0.644532 103 7.31032 -0.179714 -0.643834 119 7.30688 -0.156676 -0.643368 110 7.29262 0.451351 -0.643132 101 7.29939 -0.133603 -0.642434 108 7.28722 0.370598 -0.641966 110 7.29426 -0.0762285 -0.641734 105 7.29446 -0.0533125 -0.641734 113 7.2824 0.347398 -0.641266 110 7.28405 -0.0990441 -0.640568 110 7.28466 -0.03039 -0.640567 118 7.278 0.312799 -0.640566 116 7.27697 0.289847 -0.640333 104 7.2807 0.0267954 -0.640101 110 7.73373 -0.575969 -0.639601 71 7.27232 0.0838566 -0.639167 101 7.27202 0.106703 -0.639167 105 7.27065 0.0495651 -0.638934 106 7.26768 0.129463 -0.6387 103 7.26644 0.186539 -0.6387 97 7.26512 0.232192 -0.6387 101 7.26395 0.266425 -0.6387 108 7.26684 0.00386512 -0.638467 115 7.26383 0.209302 -0.638467 100 7.26327 0.152197 -0.638233 101 7.68821 0.796048 -0.636749 59 7.65827 -0.485468 -0.630623 40 8.06264 0.626135 -0.629935 75 7.64119 -0.532559 -0.62909 92 7.64282 -0.508552 -0.62909 122 8.03878 0.5988 -0.627236 116 7.59767 0.762875 -0.626458 76 7.59722 0.7267 -0.62602 111 8.02475 0.572356 -0.625575 68 8.02254 0.546861 -0.62516 77 8.01908 0.508655 -0.624537 77 7.58363 0.701416 -0.624269 113 7.60095 -0.445678 -0.624054 40 7.60282 -0.373914 -0.623835 40 7.60534 0.104146 -0.623176 40 7.5906 -0.337419 -0.622302 40 7.58176 -0.396696 -0.621645 40 7.58812 0.175505 -0.621424 40 7.98689 0.481317 -0.621007 77 7.57453 -0.420161 -0.620988 40 7.58323 0.211162 -0.620986 40 7.56616 0.0443145 -0.618797 82 7.96453 0.454779 -0.618516 74 7.94464 0.654279 -0.617892 51 7.55484 0.151107 -0.617702 54 7.55235 0.0205524 -0.617265 56 7.55207 0.0680054 -0.617264 62 7.54733 0.127267 -0.616826 53 7.79781 0.814744 -0.604188 62 7.79709 -0.548752 -0.601702 80 7.79053 -0.351886 -0.599832 40 7.72439 0.770038 -0.596091 172 7.744 -0.508539 -0.595888 162 7.72968 -0.483268 -0.594227 213 7.73627 -0.26443 -0.593811 40 7.73147 -0.227813 -0.593188 40 7.71558 0.378974 -0.592147 40 7.69146 0.717846 -0.592146 195 7.68916 0.742004 -0.592146 191 7.71038 0.402989 -0.591732 45 7.71537 -0.154635 -0.591319 40 7.70464 -0.311923 -0.590697 40 7.70888 -0.178761 -0.590696 40 7.68945 -0.456642 -0.589867 127 7.69763 -0.287448 -0.589866 40 7.69436 -0.202657 -0.589243 40 7.67856 -0.0937048 -0.587374 40 7.65377 -0.418468 -0.585921 64 7.66513 -0.0333816 -0.58592 40 7.66091 -0.0694812 -0.585505 40 7.64631 -0.369926 -0.584883 54 7.65237 -0.117516 -0.584675 40 7.62723 -0.393084 -0.583015 95 7.63337 -0.00937145 -0.582598 40 7.62137 0.350029 -0.582181 40 7.62677 0.0984438 -0.581975 40 7.62078 0.266053 -0.581766 40 7.61991 0.289992 -0.581766 40 7.61845 0.325898 -0.581766 40 7.61929 0.0504447 -0.581144 40 7.61582 0.158104 -0.580936 40 7.61511 0.0743273 -0.580729 40 7.6133 0.181973 -0.580728 40 7.61052 0.122092 -0.580314 40 7.6075 0.0144742 -0.579899 40 7.5679 0.24022 -0.57616 40 7.56497 0.204436 -0.575745 40 7.91633 0.775911 -0.573228 40 7.94012 0.439468 -0.573032 86 7.9387 0.464409 -0.573032 88 7.90938 0.487722 -0.570275 85 7.84893 -0.528209 -0.564569 71 7.8335 0.520356 -0.562989 83 7.81941 0.630581 -0.562398 42 7.81395 0.543778 -0.561217 47 7.80944 0.605128 -0.561216 44 7.81022 0.568184 -0.56102 44 7.80443 -0.475817 -0.559842 40 7.80091 -0.500199 -0.559645 172 7.81101 -0.304003 -0.559645 40 7.81316 -0.242647 -0.559644 40 7.8074 -0.156537 -0.558856 40 7.80199 -0.279074 -0.55866 40 7.80195 -0.217727 -0.558463 40 7.76215 0.736705 -0.557671 157 7.79265 -0.192936 -0.557478 40 7.75847 0.711792 -0.557081 127 7.7802 -0.327187 -0.556691 40 7.77515 -0.351434 -0.556297 40 7.76685 -0.436667 -0.555904 40 7.778 -0.131405 -0.555902 40 7.73519 -0.0454693 -0.55157 40 7.73062 -0.106148 -0.551176 40 7.72734 -0.0211211 -0.550782 40 7.71909 -0.0695713 -0.549995 40 7.70459 -0.408677 -0.549602 42 7.70348 0.00322802 -0.548419 40 7.69996 0.233105 -0.548418 40 7.70099 0.0879131 -0.548222 40 7.6985 0.124178 -0.548025 40 7.69741 0.0395208 -0.547828 40 7.69558 0.172506 -0.547828 40 7.6921 0.148267 -0.547434 40 7.68903 0.196555 -0.547237 40 7.68929 0.0636623 -0.54704 40 7.68128 0.256755 -0.546646 40 7.67205 -0.38267 -0.546254 45 8.08003 0.101813 -0.540947 40 7.90949 -0.24884 -0.525333 40 7.87273 0.781365 -0.525143 112 7.88614 0.458542 -0.524029 92 7.87511 -0.508227 -0.52329 97 7.85608 0.493856 -0.521427 88 7.86488 -0.272315 -0.521244 40 7.85176 0.431673 -0.520683 62 7.84257 0.517706 -0.520311 82 7.83248 0.628358 -0.520125 84 7.83429 0.578979 -0.519939 78 7.82083 0.738824 -0.519939 202 7.84254 -0.222296 -0.519013 40 7.82771 -0.468302 -0.518642 216 7.82303 0.541045 -0.518638 80 7.8106 0.601831 -0.517894 100 7.80351 0.687678 -0.517894 60 7.82972 -0.025143 -0.517525 40 7.81918 -0.0988416 -0.516596 40 7.80664 -0.417912 -0.516411 51 7.80337 0.404264 -0.516036 47 7.7795 0.710125 -0.515849 211 7.8095 -0.0742149 -0.515666 40 7.80423 -0.16001 -0.515295 40 7.79137 -0.441693 -0.51511 40 7.7997 -0.184447 -0.514923 40 7.79385 -0.306865 -0.514738 40 7.79774 -0.049644 -0.514551 40 7.76603 0.0114468 -0.511577 40 7.76288 -0.134905 -0.511391 40 7.75587 0.255164 -0.511018 40 7.74693 0.37675 -0.510646 40 7.74766 0.315807 -0.51046 40 7.73669 0.339674 -0.50953 40 7.72918 -0.328853 -0.508789 61 7.72608 0.181203 -0.508044 40 7.72547 0.205473 -0.508044 40 7.71502 -0.376868 -0.507674 62 7.72287 0.144707 -0.507672 40 7.71484 0.229411 -0.507114 40 7.71532 0.120288 -0.506929 40 7.70224 -0.352039 -0.506373 50 7.70285 0.289592 -0.506185 40 7.66042 0.0350042 -0.501724 45 8.07953 0.756414 -0.492773 166 8.04107 -0.474933 -0.48758 204 8.03755 -0.500062 -0.487407 81 8.04123 -0.436921 -0.487407 40 7.97907 0.595904 -0.482897 40 7.94821 0.681634 -0.480818 75 7.95482 0.543946 -0.480472 66 7.95686 0.481343 -0.480299 68 7.93697 0.718391 -0.480125 192 7.96327 -0.25695 -0.479955 40 7.96404 -0.231932 -0.479955 40 7.95236 0.456016 -0.479779 68 7.95303 -0.406784 -0.479609 49 7.94313 0.568254 -0.479605 87 7.95003 -0.293993 -0.478916 40 7.93263 0.517476 -0.478393 113 7.93286 -0.205979 -0.477183 40 7.92338 -0.0562955 -0.476143 40 7.91432 -0.143242 -0.47545 40 7.91473 -0.118378 -0.47545 40 7.90395 0.391154 -0.475274 40 7.90758 -0.18038 -0.47493 40 7.90758 -0.0312877 -0.474756 40 7.89912 -0.0932719 -0.474063 40 7.89768 -0.00640423 -0.47389 40 7.89276 0.278868 -0.473889 40 7.89192 0.167192 -0.473543 40 7.88901 0.105164 -0.473196 40 7.8857 0.0184186 -0.47285 40 7.87528 0.365036 -0.472675 40 7.87541 -0.31577 -0.472505 71 7.87941 0.191733 -0.472503 40 7.87443 0.228759 -0.472156 40 7.87535 0.0802831 -0.471983 40 7.86842 0.339975 -0.471982 40 7.86473 -0.377205 -0.471812 61 7.86244 -0.339954 -0.471465 99 7.86959 0.0555191 -0.471464 40 7.85974 0.253093 -0.470943 40 7.85655 0.141869 -0.470424 40 7.84803 0.302122 -0.470077 40 7.83237 0.42485 -0.46921 44 8.19293 -0.446723 -0.4574 171 8.13855 -0.418294 -0.452843 40 8.12382 -0.468771 -0.451866 60 8.11255 -0.378726 -0.450564 40 8.07065 0.728346 -0.449094 149 8.06824 0.638744 -0.448281 40 8.05629 0.612291 -0.447142 40 8.05688 0.548715 -0.446817 40 8.05511 0.574024 -0.446817 40 8.06927 -0.262601 -0.446657 40 8.06806 -0.237197 -0.446495 40 8.06678 -0.211803 -0.446332 40 8.04862 0.522723 -0.446003 40 8.06171 -0.173677 -0.445843 40 8.05025 -0.148168 -0.444867 40 8.03232 0.496271 -0.444538 40 8.04519 -0.084894 -0.444378 40 8.03766 0.00354169 -0.443727 40 8.03545 -0.0595772 -0.443564 40 8.02263 0.457694 -0.443562 40 8.01411 -0.349221 -0.442426 40 8.00484 -0.122325 -0.441123 40 8.00538 0.0788761 -0.441122 40 8.00373 0.0285618 -0.44096 40 7.99525 -0.323301 -0.440798 41 8.00094 0.116529 -0.440797 40 7.99917 0.204495 -0.440796 40 7.99606 0.166702 -0.440471 40 7.99374 0.254611 -0.440471 40 7.99071 -0.285427 -0.44031 40 7.99573 -0.0342914 -0.440309 40 7.98566 0.0535275 -0.439495 40 7.9806 0.141246 -0.439169 40 7.97857 0.228987 -0.439169 40 7.969 0.278809 -0.438517 40 7.94171 0.315246 -0.436401 40 8.29785 -0.46195 -0.39933 91 8.23349 -0.393316 -0.394341 86 8.22384 -0.341041 -0.393461 43 8.21362 -0.431115 -0.393021 69 8.21476 -0.366497 -0.392874 82 8.19599 0.640079 -0.392723 84 8.18474 0.703936 -0.392283 64 8.17802 0.664585 -0.39155 73 8.15499 0.572621 -0.389349 93 8.15643 0.521249 -0.389203 119 8.15475 0.546869 -0.389203 116 8.14026 0.610185 -0.388469 131 8.15806 -0.222625 -0.388326 123 8.15682 -0.0687698 -0.388032 112 8.14011 0.494592 -0.387883 125 8.14905 -0.183917 -0.387592 116 8.14838 0.110525 -0.387444 112 8.13776 0.430344 -0.387443 113 8.14361 -0.158181 -0.387152 116 8.14503 -0.0430442 -0.387151 108 8.14044 0.276762 -0.38715 118 8.14207 -0.132559 -0.387005 118 8.14302 0.0465134 -0.387004 118 8.13705 0.315051 -0.387003 120 8.14061 -0.0941617 -0.386858 113 8.13403 0.340538 -0.386856 118 8.13685 0.0720598 -0.386564 117 8.13514 0.0209377 -0.386418 125 8.13205 0.225364 -0.386417 110 8.12513 0.404129 -0.386416 112 8.12243 0.455177 -0.386416 111 8.13204 0.135914 -0.38627 108 8.12495 0.365755 -0.386269 105 8.12571 -0.298304 -0.386125 42 8.12759 0.161393 -0.385977 106 8.12674 0.199689 -0.385977 109 8.12532 0.250747 -0.385977 112 8.1252 -0.00458455 -0.385684 110 8.10549 -0.246509 -0.384511 70 8.08475 -0.271238 -0.383044 64 8.45551 0.72017 -0.364756 87 8.43825 -0.410123 -0.362186 74 8.43351 -0.38336 -0.361779 106 8.38218 0.687175 -0.359607 124 8.40418 -0.263138 -0.359475 146 8.38134 0.64735 -0.359336 100 8.39734 -0.342185 -0.359205 106 8.37045 -0.314841 -0.357307 103 8.34753 0.618254 -0.356897 113 8.36342 -0.288294 -0.356765 111 8.35974 0.105876 -0.356222 169 8.33152 0.590698 -0.355677 120 8.31629 0.550187 -0.354458 131 8.31201 0.523664 -0.354052 102 8.31162 0.497421 -0.353916 126 8.30717 0.470951 -0.35351 97 8.3135 -0.129929 -0.353106 115 8.3108 -0.169071 -0.35297 101 8.31216 -0.0776784 -0.35297 96 8.30264 0.405283 -0.352968 91 8.30589 -0.103738 -0.352564 93 8.29335 0.430923 -0.352426 127 8.29846 -0.0384848 -0.352021 98 8.28593 0.378315 -0.351749 117 8.29025 0.195971 -0.351614 98 8.29056 0.0136152 -0.351479 93 8.28857 -0.0124321 -0.351344 100 8.28162 0.221774 -0.351072 129 8.28048 0.260799 -0.351072 97 8.28222 0.0786313 -0.350937 101 8.27851 0.0395643 -0.350666 131 8.2727 0.312578 -0.350665 121 8.27167 0.338564 -0.350665 118 8.26965 0.286438 -0.350394 123 8.2629 0.169263 -0.349717 117 8.20983 -0.218939 -0.346195 58 8.63316 0.636836 -0.327901 172 8.62899 0.691068 -0.3279 87 8.5997 -0.39355 -0.324922 64 8.60001 -0.339424 -0.324797 119 8.58494 -0.365803 -0.323927 57 8.56162 -0.297387 -0.322311 119 8.54153 0.657337 -0.322307 61 8.55054 -0.270074 -0.321565 101 8.52652 0.588913 -0.321065 91 8.51344 -0.242011 -0.319204 152 8.49246 0.559871 -0.318827 115 8.48422 0.532591 -0.318206 132 8.48464 0.492497 -0.318082 86 8.4776 0.438695 -0.317461 124 8.48057 -0.200984 -0.31709 111 8.46422 0.464705 -0.316715 114 8.46162 0.397946 -0.316342 119 8.45685 0.371118 -0.315969 118 8.45099 0.184842 -0.315224 96 8.446 0.3441 -0.315224 116 8.44645 0.277695 -0.3151 120 8.44094 0.0387811 -0.314479 96 8.44078 0.0652973 -0.314479 101 8.43402 0.131518 -0.314106 107 8.42932 0.250678 -0.313981 124 8.43055 0.0917431 -0.313857 106 8.4251 0.316808 -0.313857 124 8.42558 0.157887 -0.313609 114 8.42408 0.224056 -0.313608 129 8.41307 0.01231 -0.312739 86 8.38986 -0.145819 -0.311372 135 8.39108 -0.0271981 -0.311372 60 8.38497 -0.053501 -0.310999 60 8.35834 -0.118904 -0.309384 55 8.34484 -0.0793373 -0.308513 92 8.29756 -0.170005 -0.305655 68 8.84966 0.553833 -0.288503 105 8.79792 0.481094 -0.285355 167 8.77347 0.452042 -0.283894 124 8.75425 0.575205 -0.283219 91 8.76125 -0.182139 -0.28266 199 8.75291 0.423352 -0.282658 121 8.75281 0.38201 -0.282545 126 8.74405 0.299052 -0.281871 118 8.74107 0.326439 -0.281759 114 8.72979 0.518448 -0.281645 82 8.74067 -0.209243 -0.281536 170 8.73601 0.353723 -0.281534 138 8.74044 -0.113104 -0.281423 156 8.73538 0.257518 -0.281309 129 8.73676 -0.0856171 -0.281198 166 8.73483 0.202578 -0.281197 133 8.73216 0.229959 -0.281085 131 8.7317 0.161327 -0.280972 150 8.72799 -0.236413 -0.280862 147 8.731 -0.0581473 -0.280861 164 8.73118 0.010427 -0.280861 161 8.72478 -0.277483 -0.280749 125 8.72918 -0.0170049 -0.280748 161 8.72512 0.0378181 -0.280523 164 9.6707 0.436481 -0.280097 255 8.69892 -0.331455 -0.279401 54 8.67579 0.638301 -0.279059 55 8.69489 0.0785712 -0.278837 173 8.65983 0.609728 -0.278047 69 8.66334 -0.371093 -0.27749 80 8.55884 0.103826 -0.271192 54 9.34331 0.466707 -0.263603 255 9.33221 -0.120544 -0.262493 225 9.28402 0.624856 -0.261073 60 9.00296 0.209929 -0.245897 255 8.92531 -0.198304 -0.241952 255 8.69353 -0.0695406 -0.230113 249 8.63361 0.460425 -0.227682 255 8.61554 0.0801862 -0.226166 255 8.58824 0.485198 -0.225456 255 8.55473 0.147002 -0.22313 113 8.55383 0.0529245 -0.223029 255 8.54846 -0.161963 -0.222828 208 8.51386 0.26685 -0.221207 255 8.49468 0.2396 -0.220195 255 8.32627 -0.0131862 -0.211494 87 8.32419 -0.0393282 -0.211393 105 8.9822 0.711051 -0.194982 200 8.97875 0.753368 -0.194982 70 8.92663 0.678266 -0.192379 255 8.92908 -0.361001 -0.191665 255 8.92669 -0.318788 -0.191485 255 8.90368 -0.290032 -0.190408 120 8.855 0.644635 -0.189057 88 8.6918 -0.11983 -0.180711 218 8.68149 0.439807 -0.180708 145 8.68914 -0.160757 -0.180621 220 8.67408 0.466739 -0.180439 150 8.66662 0.589315 -0.180438 122 8.6826 -0.187942 -0.180352 180 8.67997 -0.215175 -0.180262 149 8.66444 0.561815 -0.180259 120 8.67087 -0.255864 -0.179903 117 8.65619 0.533947 -0.17981 103 8.65662 0.49303 -0.179721 140 8.54607 0.338367 -0.174424 255 8.54647 0.271167 -0.174335 255 8.50207 0.216154 -0.17227 255 8.49518 0.309467 -0.17209 255 8.48065 0.0556343 -0.171193 255 8.47131 0.401848 -0.171192 88 8.47753 0.148838 -0.171103 255 8.47303 0.175375 -0.170924 255 8.47031 0.0954545 -0.170744 255 8.45941 0.241537 -0.170385 255 8.43918 0.36037 -0.169666 255 8.39668 -0.0638813 -0.167423 237 8.38289 0.0283565 -0.166794 65 8.3581 0.120109 -0.165717 255 8.32691 -0.0374061 -0.164281 90 8.325 0.0018272 -0.164191 139 9.3063 -0.419649 -0.149758 222 8.957 0.696125 -0.136962 220 8.93622 -0.373797 -0.135425 73 8.89275 0.243059 -0.133573 244 8.88595 0.0474329 -0.133189 133 8.8784 0.172948 -0.132957 244 8.87581 0.200798 -0.13288 254 8.86932 0.117057 -0.132572 132 8.8318 0.0750474 -0.131108 255 8.78298 0.14377 -0.129258 75 8.35245 -0.0194534 -0.112615 65 8.33437 -0.0455374 -0.111921 72 9.2944 0.050331 -0.090872 255 8.90262 0.270956 -0.0783603 90 8.80635 0.0878277 -0.0751367 243 8.66566 0.235804 -0.0706864 70 8.49024 0.110418 -0.0649474 99 8.46986 0.136705 -0.0643024 98 8.46853 0.203226 -0.0643022 102 8.45341 0.162954 -0.0637864 139 8.92105 0.262562 -0.0333423 255 8.88022 0.219607 -0.0322043 255 8.85288 0.191179 -0.0314456 255 8.83645 0.0936904 -0.0309582 255 8.83391 0.135307 -0.0309039 255 8.82745 0.162964 -0.0307411 255 8.78072 0.0656783 -0.0294408 255 9.00754 0.266624 0.0242494 255 9.00241 0.139114 0.024412 255 8.9988 0.110771 0.0244935 255 8.8971 0.207094 0.026534 255 8.8964 0.235042 0.0265341 255 8.89398 0.165082 0.0266154 255 8.88126 0.0671271 0.0269006 255 8.95352 0.18666 0.0667954 93 8.94072 0.116193 0.0670155 91 8.86209 0.15717 0.0682436 253 9.03312 0.123358 0.124916 168 9.0007 0.151106 0.125208 128 8.99361 0.0803162 0.12528 91 8.96451 0.24902 0.125518 87 8.9402 0.178013 0.125755 236 8.92726 0.219811 0.125865 157 8.99993 0.0727729 0.182165 139 8.91259 0.170336 0.182402 239 8.89969 0.21208 0.182435 133 8.89909 0.142155 0.18244 154 7.17398 -0.0606739 0.187174 52 7.28543 0.881236 0.230101 40 7.2882 0.939745 0.230134 40 7.30842 0.907412 0.230185 40 7.73885 -0.161102 0.231394 255 7.77368 -0.210575 0.23151 255 7.7983 -0.186648 0.231587 255 8.88466 0.181799 0.235092 255 8.90204 0.21019 0.23515 179 8.91133 0.238451 0.235182 78 8.91741 0.140529 0.235195 193 8.9978 0.113758 0.235453 82 9.02411 0.0858139 0.235536 224 +unknow 0.973663 1 0 544 -1.44392 -20.1775 -1.43903 150 -1.50584 -20.153 -1.4374 133 -2.00476 -20.0374 -1.43154 105 -2.09752 -20.0118 -1.43023 130 -2.1589 -19.9913 -1.42909 140 -2.21951 -19.9646 -1.42747 137 -2.2764 -19.906 -1.42323 137 -2.70608 -19.7958 -1.41867 136 -2.64336 -19.8003 -1.41835 147 -2.76662 -19.7754 -1.41769 137 -2.85638 -19.7384 -1.41574 137 -2.91722 -19.7215 -1.41509 134 -2.9771 -19.6984 -1.41395 140 -3.06776 -19.6704 -1.41281 140 -3.12612 -19.639 -1.41102 139 -3.18622 -19.6192 -1.4102 137 -3.27765 -19.5981 -1.40971 137 -3.33788 -19.5799 -1.40906 140 -3.397 -19.5555 -1.40792 139 -3.54659 -19.5067 -1.40613 137 -3.45325 -19.5153 -1.40548 139 -2.55921 -19.6385 -1.40435 134 -3.6021 -19.4641 -1.40352 139 -3.65956 -19.433 -1.40189 139 -3.74847 -19.4019 -1.40075 139 -2.46099 -19.6048 -1.40061 117 -2.33683 -19.612 -1.39996 128 -2.39843 -19.6045 -1.39996 127 -3.80673 -19.3763 -1.39961 133 -3.86526 -19.3525 -1.39864 140 -3.95641 -19.3341 -1.39864 143 -4.01431 -19.3079 -1.3975 136 -4.07044 -19.2737 -1.3957 139 -4.12599 -19.2375 -1.39375 138 -3.80383 -21.2754 -1.3776 192 -3.50138 -21.3192 -1.37702 195 -3.66769 -21.2851 -1.37658 185 -3.73454 -21.2735 -1.37658 183 -3.86633 -21.2398 -1.37584 194 -3.96306 -21.2037 -1.37452 192 -4.02815 -21.1833 -1.37393 192 -4.09354 -21.1647 -1.37349 192 -4.1905 -21.1315 -1.37246 188 -4.32158 -21.0969 -1.37187 188 -4.25488 -21.1084 -1.37173 188 -4.41477 -21.047 -1.36967 188 -4.54268 -20.9994 -1.3682 184 -4.47585 -21.0097 -1.36791 185 -4.60476 -20.9675 -1.36688 186 -4.70088 -20.9339 -1.366 181 -4.75949 -20.8879 -1.36365 181 -4.82328 -20.8651 -1.36306 180 -4.91971 -20.8344 -1.36247 181 -4.98094 -20.8013 -1.36115 182 -5.04154 -20.7662 -1.35969 181 -5.10196 -20.7309 -1.35822 178 -5.74166 -20.4055 -1.34706 168 -5.67055 -20.3985 -1.34515 220 -5.79258 -20.3413 -1.34354 176 -5.88725 -20.31 -1.34324 175 -6.00563 -20.242 -1.34089 166 -6.09343 -20.1887 -1.33898 176 -5.93355 -20.2321 -1.33869 220 -5.46532 -19.9047 -1.30613 155 -5.27238 -19.5645 -1.27826 175 -5.2078 -19.5694 -1.27738 178 -5.14476 -19.5798 -1.27694 208 -2.8381 -20.0365 -1.27639 161 -4.92087 -19.6023 -1.27445 173 -5.04244 -19.5653 -1.27401 177 -4.97946 -19.5752 -1.27357 195 -2.84825 -19.6663 -1.24954 146 -2.06848 -19.7114 -1.24574 164 -2.49887 -19.6413 -1.24426 161 -2.71358 -19.6048 -1.24367 146 -2.55587 -19.5978 -1.24162 209 -2.0004 -19.6583 -1.24134 202 -2.43095 -19.5996 -1.2406 255 -2.33809 -19.6069 -1.2403 204 -2.27532 -19.6042 -1.23957 227 -2.20738 -19.5558 -1.23547 179 -1.51339 -20.5666 -1.18883 84 -5.45013 -19.5867 -1.16899 78 -5.2894 -19.6039 -1.16723 117 -4.79321 -19.7228 -1.1667 85 -5.22421 -19.6069 -1.16629 147 -5.37488 -19.5537 -1.16547 118 -5.06212 -19.6164 -1.16412 105 -5.15248 -19.5846 -1.16358 179 -4.99508 -19.6109 -1.16263 231 -4.83236 -19.6147 -1.16019 129 -4.70809 -19.6408 -1.15992 142 -4.64408 -19.6457 -1.15925 172 -4.91844 -19.5665 -1.15843 122 -4.54429 -19.6363 -1.15708 194 -1.54165 -20.0802 -1.15604 149 -4.47596 -19.6213 -1.15505 205 -4.41212 -19.6255 -1.15437 207 -4.31406 -19.6207 -1.15261 205 -4.24861 -19.6166 -1.15139 200 -4.18117 -19.6026 -1.1495 205 -4.08673 -19.6123 -1.14882 203 -4.01952 -19.5976 -1.14693 206 -3.74059 -19.6447 -1.14639 255 -3.95597 -19.6004 -1.14625 219 -3.67667 -19.6445 -1.14558 255 -3.8909 -19.5951 -1.14503 237 -3.58228 -19.6518 -1.1449 255 -3.79249 -19.5819 -1.14286 254 -2.79743 -19.7022 -1.13976 211 -3.44536 -19.5973 -1.13962 253 -3.50691 -19.5864 -1.13962 255 -2.08251 -19.7765 -1.13882 147 -3.38175 -19.5962 -1.1388 244 -3.28774 -19.6021 -1.13813 227 -3.2255 -19.6084 -1.13786 231 -3.1601 -19.5948 -1.13623 236 -3.0052 -19.6131 -1.13583 246 -3.0668 -19.6035 -1.13583 244 -2.94093 -19.6047 -1.13461 251 -2.84539 -19.5966 -1.13312 251 -2.44222 -19.6308 -1.13177 156 -2.65765 -19.6008 -1.13163 169 -2.50313 -19.6171 -1.13136 231 -2.56295 -19.5953 -1.13041 254 -2.3471 -19.6203 -1.13028 133 -2.00656 -19.646 -1.12947 255 -2.22178 -19.6168 -1.12906 235 -2.28272 -19.6038 -1.12866 253 -1.9427 -19.6303 -1.12798 229 -2.12613 -19.5973 -1.12703 83 -5.6362 -19.6038 -1.05886 169 -5.48152 -19.6455 -1.05874 169 -1.50724 -20.2821 -1.05519 106 -5.5274 -19.5725 -1.05514 220 -5.30715 -19.6147 -1.05402 118 -5.3862 -19.5414 -1.05091 138 -5.231 -19.5773 -1.05054 211 -4.7983 -19.6838 -1.0503 119 -5.16538 -19.5782 -1.04955 236 -5.00898 -19.6085 -1.04893 133 -4.9444 -19.6126 -1.04819 153 -5.09576 -19.5635 -1.04756 220 -4.86 -19.537 -1.04235 150 -4.6989 -19.5435 -1.04036 255 -4.63471 -19.5465 -1.03961 255 -4.57053 -19.5493 -1.03887 255 -4.47164 -19.5415 -1.03701 255 -4.25437 -19.5797 -1.03639 255 -4.192 -19.5891 -1.03614 255 -4.40714 -19.5418 -1.03614 255 -4.12713 -19.5865 -1.03515 255 -4.03357 -19.5999 -1.03478 255 -4.34093 -19.5341 -1.03477 255 -3.96918 -19.5988 -1.03391 255 -3.90524 -19.5994 -1.03316 255 -2.75879 -19.7833 -1.03256 169 -1.54195 -19.9091 -1.0322 210 -3.84055 -19.5959 -1.03217 255 -3.74402 -19.5922 -1.0308 255 -3.67836 -19.5823 -1.02944 255 -3.615 -19.584 -1.02882 255 -2.09715 -19.792 -1.02809 152 -3.51841 -19.5772 -1.02732 255 -3.45654 -19.5862 -1.0272 255 -3.3943 -19.593 -1.02695 255 -3.30127 -19.6049 -1.02671 255 -3.23868 -19.6092 -1.02633 255 -3.17641 -19.6154 -1.02609 255 -3.11414 -19.6213 -1.02584 255 -2.95634 -19.6215 -1.02435 255 -3.01766 -19.6101 -1.02422 255 -2.89263 -19.6169 -1.02348 255 -2.45056 -19.5965 -1.01851 132 -2.78792 -19.5453 -1.01814 255 -2.60333 -19.5687 -1.01802 131 -2.38727 -19.5902 -1.01765 163 -2.5098 -19.5709 -1.0174 216 -2.01657 -19.6218 -1.01703 255 -2.66153 -19.5367 -1.01652 94 -2.29047 -19.5636 -1.01529 167 -2.16395 -19.5459 -1.0133 96 -2.22511 -19.537 -1.01317 255 -1.43845 -20.7123 -0.958107 251 -5.90882 -19.7411 -0.949275 151 -5.79833 -19.7093 -0.945791 222 -5.72417 -19.6852 -0.943319 241 -5.50204 -19.7277 -0.942199 197 -5.64912 -19.657 -0.940623 241 -5.54563 -19.645 -0.938376 245 -5.13533 -19.7232 -0.936583 114 -5.31683 -19.6585 -0.935681 142 -5.40783 -19.6274 -0.935342 140 -5.24838 -19.65 -0.934221 187 -1.50452 -20.2731 -0.933711 193 -5.18207 -19.649 -0.93321 193 -5.01726 -19.6485 -0.930852 232 -4.88891 -19.6602 -0.929729 115 -4.94677 -19.6293 -0.928829 144 -4.79198 -19.6656 -0.928719 216 -4.71625 -19.6223 -0.925348 255 -4.65321 -19.6311 -0.925011 255 -4.55481 -19.6276 -0.923551 255 -4.49047 -19.6301 -0.922878 255 -4.42485 -19.6266 -0.921867 255 -4.36188 -19.6345 -0.921531 255 -2.21215 -19.9891 -0.921448 147 -1.55063 -20.0373 -0.92067 139 -4.26551 -19.6373 -0.92052 247 -4.20006 -19.633 -0.919509 253 -2.70657 -19.8738 -0.918406 155 -4.13387 -19.6246 -0.918274 255 -4.03814 -19.6282 -0.917376 255 -3.9741 -19.6291 -0.916702 255 -3.90931 -19.6258 -0.915804 255 -3.84611 -19.6301 -0.915355 255 -3.74984 -19.6284 -0.914232 255 -3.68669 -19.6322 -0.913783 255 -3.62284 -19.6319 -0.91311 255 -3.52783 -19.635 -0.912324 255 -3.46441 -19.6362 -0.911763 255 -3.40068 -19.6352 -0.911089 255 -3.30712 -19.6451 -0.910753 255 -3.24281 -19.6396 -0.909855 255 -3.17856 -19.6339 -0.908957 255 -3.11531 -19.6339 -0.908395 255 -3.02004 -19.6306 -0.907385 255 -2.95777 -19.6361 -0.907161 255 -2.74114 -19.6634 -0.906939 248 -2.89318 -19.6255 -0.906037 255 -2.08926 -19.7253 -0.905936 255 -2.02708 -19.7298 -0.905824 255 -2.79955 -19.631 -0.905589 255 -2.58044 -19.6368 -0.904243 119 -2.51748 -19.6349 -0.903682 100 -2.45357 -19.6249 -0.902671 193 -1.95884 -19.6724 -0.902228 255 -2.23653 -19.6408 -0.902112 107 -2.39024 -19.6187 -0.901885 134 -2.29546 -19.6099 -0.900762 118 -5.93434 -19.7085 -0.832215 147 -5.8192 -19.6616 -0.82827 244 -5.74106 -19.6242 -0.825337 250 -5.39955 -19.7147 -0.825039 168 -5.66935 -19.6076 -0.823517 249 -4.95303 -19.7822 -0.822617 113 -5.5945 -19.5793 -0.82109 255 -5.4368 -19.6091 -0.820384 203 -5.49241 -19.5708 -0.81927 255 -1.53497 -20.2428 -0.81801 131 -5.2623 -19.576 -0.81644 147 -5.19511 -19.5712 -0.815328 133 -5.12648 -19.5604 -0.813913 129 -5.06299 -19.5687 -0.813509 107 -4.96529 -19.571 -0.812397 164 -4.83645 -19.5786 -0.811185 255 -4.74083 -19.5876 -0.810478 255 -4.67787 -19.5966 -0.810176 255 -4.61536 -19.6073 -0.809974 255 -4.51975 -19.6152 -0.809267 255 -4.45677 -19.6234 -0.808965 255 -4.39072 -19.6179 -0.807954 255 -4.32301 -19.6042 -0.806538 255 -2.39413 -19.9139 -0.805655 153 -4.22592 -19.6029 -0.805427 255 -2.51844 -19.8925 -0.80535 183 -4.15847 -19.5888 -0.804011 255 -4.09485 -19.592 -0.803506 255 -3.93769 -19.6079 -0.802699 255 -2.57313 -19.825 -0.802313 101 -3.87412 -19.6103 -0.802194 255 -3.99083 -19.5543 -0.800573 255 -3.71325 -19.6048 -0.800375 255 -3.77482 -19.5931 -0.800374 255 -2.44308 -19.7972 -0.800089 105 -3.64685 -19.5909 -0.799061 255 -3.5795 -19.5708 -0.797442 255 -3.48476 -19.5737 -0.796736 255 -3.42256 -19.5806 -0.796534 255 -3.36001 -19.5854 -0.796231 255 -3.26669 -19.5951 -0.795929 255 -3.20414 -19.5993 -0.795626 255 -3.14127 -19.6014 -0.795223 255 -3.07874 -19.6053 -0.79492 255 -2.98268 -19.5959 -0.793707 255 -2.92051 -19.6012 -0.793506 255 -2.85804 -19.6043 -0.793203 255 -2.27153 -19.6789 -0.79311 216 -2.76535 -19.6156 -0.793103 255 -2.70151 -19.6084 -0.792294 255 -1.9868 -19.6474 -0.789977 255 -2.04663 -19.6232 -0.789065 255 -2.20023 -19.6026 -0.788861 255 -2.63021 -19.5455 -0.788653 255 -2.13798 -19.6034 -0.788558 255 -5.93497 -19.7689 -0.717425 139 -5.265 -19.8979 -0.714832 173 -5.19794 -19.8969 -0.714025 184 -5.81641 -19.7104 -0.713387 217 -5.30381 -19.7924 -0.710701 174 -5.73163 -19.6499 -0.709707 242 -5.07846 -19.8205 -0.709358 172 -1.53074 -20.3994 -0.709229 117 -5.65995 -19.6332 -0.708092 244 -5.5868 -19.6106 -0.706208 255 -5.48521 -19.6039 -0.704684 255 -5.41777 -19.5999 -0.703697 255 -5.34884 -19.5898 -0.702441 255 -4.89848 -19.629 -0.699037 255 -4.83442 -19.6346 -0.698589 255 -4.73905 -19.6455 -0.698051 255 -4.95184 -19.5806 -0.69751 255 -4.67178 -19.637 -0.696975 255 -4.59464 -19.5854 -0.693924 255 -4.31645 -19.6445 -0.693749 255 -4.49963 -19.5951 -0.693387 255 -4.21966 -19.6451 -0.692852 255 -4.43322 -19.5877 -0.6924 255 -4.153 -19.6348 -0.691776 255 -4.36734 -19.5821 -0.691503 255 -4.08886 -19.636 -0.691238 255 -3.99035 -19.6256 -0.689893 255 -3.92284 -19.6087 -0.688547 255 -3.86007 -19.615 -0.688279 255 -3.76721 -19.631 -0.68819 255 -3.70295 -19.629 -0.687563 255 -3.64054 -19.6366 -0.687384 255 -3.57705 -19.6381 -0.686936 255 -3.48101 -19.6351 -0.68604 255 -3.41795 -19.6381 -0.685682 255 -3.3539 -19.6349 -0.685054 255 -3.26036 -19.6446 -0.684786 255 -3.13281 -19.639 -0.683621 255 -3.19417 -19.6271 -0.68353 255 -2.97283 -19.6255 -0.681917 255 -3.03448 -19.6161 -0.681917 255 -2.91087 -19.6328 -0.681829 255 -2.84861 -19.6379 -0.68165 255 -1.97809 -19.7004 -0.679687 153 -2.74917 -19.6016 -0.679407 255 -2.68623 -19.6002 -0.678959 255 -2.03794 -19.6742 -0.678788 255 -2.62333 -19.5987 -0.678511 255 -2.53044 -19.6068 -0.678333 255 -2.12829 -19.6425 -0.677799 255 -2.25098 -19.6228 -0.677528 255 -2.46661 -19.5969 -0.677525 255 -2.18911 -19.6278 -0.677439 255 -2.40455 -19.6005 -0.677347 255 -2.34273 -19.606 -0.677258 255 -5.88082 -19.7025 -0.583193 145 -5.76418 -19.6495 -0.579959 185 -5.68621 -19.6118 -0.577726 199 -5.61019 -19.5797 -0.575723 224 -5.50971 -19.577 -0.574569 225 -5.44172 -19.5712 -0.573645 229 -5.37224 -19.5593 -0.572491 229 -5.27321 -19.5593 -0.57149 232 -5.20192 -19.5391 -0.570027 237 -5.13745 -19.5437 -0.569566 238 -5.07199 -19.5443 -0.568951 249 -4.97587 -19.5525 -0.568336 251 -4.91001 -19.5506 -0.567643 241 -4.84374 -19.5465 -0.566873 252 -4.74778 -19.5536 -0.566258 255 -4.68259 -19.5529 -0.565643 253 -4.61652 -19.548 -0.564873 249 -4.52118 -19.556 -0.564335 250 -4.45392 -19.5447 -0.563335 254 -4.38941 -19.545 -0.562796 253 -4.32408 -19.5411 -0.562104 252 -4.22897 -19.5476 -0.561566 246 -4.16418 -19.5452 -0.56095 249 -4.10152 -19.5523 -0.56072 243 -4.00692 -19.5597 -0.560259 242 -3.94108 -19.5506 -0.559412 240 -3.87651 -19.5472 -0.558797 222 -3.66098 -19.5867 -0.558723 255 -3.81084 -19.5377 -0.55795 211 -3.71573 -19.5398 -0.557335 234 -3.59142 -19.5549 -0.557029 246 -3.49782 -19.5637 -0.556722 255 -3.43356 -19.5588 -0.556106 255 -3.37107 -19.5636 -0.555876 255 -3.27717 -19.5694 -0.555492 255 -3.21176 -19.556 -0.554568 255 -3.14967 -19.562 -0.554415 255 -3.08757 -19.5679 -0.554262 255 -2.00744 -19.706 -0.554199 199 -2.99288 -19.5664 -0.553646 255 -2.16016 -19.6717 -0.553503 181 -2.06659 -19.6737 -0.553197 208 -2.92961 -19.5639 -0.553185 234 -2.7753 -19.5823 -0.553033 215 -2.65194 -19.5974 -0.552958 207 -2.28185 -19.6419 -0.552885 216 -2.71321 -19.587 -0.55288 202 -2.86697 -19.5651 -0.552878 219 -2.49717 -19.6117 -0.552729 197 -2.55851 -19.6017 -0.552651 200 -2.21923 -19.641 -0.552578 205 -2.37342 -19.623 -0.552576 216 -2.43431 -19.6095 -0.552344 195 -5.89917 -19.8881 -0.4601 186 -2.16114 -20.5915 -0.458863 119 -5.80754 -19.8068 -0.456748 94 -2.23682 -20.3844 -0.452478 132 -5.70319 -19.679 -0.451849 88 -5.52097 -19.625 -0.448563 175 -5.45183 -19.6153 -0.447661 248 -2.28156 -20.2044 -0.446868 137 -5.37964 -19.5937 -0.446373 251 -5.28259 -19.6015 -0.445794 251 -5.2128 -19.5871 -0.444763 246 -5.15023 -19.5995 -0.444635 238 -5.08214 -19.5904 -0.443798 225 -2.33384 -20.0998 -0.443707 117 -4.98584 -19.5986 -0.443283 232 -4.91989 -19.5967 -0.442704 241 -4.85591 -19.6024 -0.442382 241 -4.75692 -19.5978 -0.441481 248 -4.69393 -19.6069 -0.441289 236 -4.6282 -19.604 -0.440709 247 -4.53174 -19.6081 -0.44013 251 -2.41453 -19.9715 -0.439902 107 -4.46526 -19.6007 -0.439422 252 -4.40105 -19.603 -0.439036 255 -4.33344 -19.5894 -0.438134 253 -4.23856 -19.5978 -0.437748 250 -4.17241 -19.5895 -0.43704 244 -4.11044 -19.6006 -0.436976 241 -4.01684 -19.6139 -0.436784 235 -3.95402 -19.6205 -0.436592 236 -3.30379 -19.7343 -0.436407 85 -2.4624 -19.8428 -0.435968 111 -3.88811 -19.6113 -0.435883 221 -3.79415 -19.6215 -0.435627 230 -3.72989 -19.6196 -0.435176 221 -3.66569 -19.6175 -0.434726 219 -3.60368 -19.6269 -0.434662 208 -3.50975 -19.6358 -0.434406 196 -3.44668 -19.6389 -0.434148 168 -3.38294 -19.6378 -0.433762 169 -2.51199 -19.7338 -0.432678 136 -2.5709 -19.702 -0.431903 199 -2.66345 -19.6877 -0.431838 216 -2.72529 -19.6792 -0.431837 243 -2.98344 -19.5083 -0.427577 40 -3.07163 -19.4703 -0.426802 235 -3.84057 -21.1504 -0.374017 47 -3.89785 -21.0891 -0.372661 47 -3.95813 -21.0454 -0.371793 47 -5.83249 -19.8057 -0.350954 108 -5.7377 -19.7126 -0.347812 213 -5.65742 -19.6672 -0.346025 228 -5.58517 -19.6483 -0.344996 235 -5.48496 -19.6475 -0.344239 231 -5.4152 -19.6357 -0.343427 234 -5.34557 -19.6237 -0.342615 235 -5.24889 -19.6332 -0.342183 230 -5.17949 -19.6206 -0.341371 230 -5.11377 -19.6213 -0.340939 233 -5.01528 -19.622 -0.34029 225 -4.95115 -19.6279 -0.34002 229 -4.8851 -19.6259 -0.339533 224 -4.8191 -19.6237 -0.339046 220 -4.72328 -19.6326 -0.338668 222 -4.65833 -19.6337 -0.33829 207 -4.59388 -19.6366 -0.337966 176 -4.49367 -19.6249 -0.337046 153 -4.36897 -19.6469 -0.336885 44 -2.7198 -19.9402 -0.336854 44 -4.21031 -19.6611 -0.336345 44 -4.42624 -19.6136 -0.336342 171 -4.3012 -19.6332 -0.336127 44 -4.13939 -19.6312 -0.335154 44 -3.85991 -19.6799 -0.334941 44 -3.92054 -19.6618 -0.334778 44 -3.97909 -19.6337 -0.334343 74 -2.76513 -19.8088 -0.333493 44 -2.90855 -19.7054 -0.331269 229 -2.83539 -19.6373 -0.329157 44 -3.01113 -19.5504 -0.327528 225 -3.16426 -19.5242 -0.327472 243 -3.09974 -19.5143 -0.326931 249 -5.92941 -20.8876 -0.234757 224 -3.98175 -21.2185 -0.232256 76 -3.8985 -21.1404 -0.230381 75 -5.91199 -20.5785 -0.228597 104 -4.9378 -20.5521 -0.223022 74 -4.96611 -19.975 -0.211721 72 -5.38847 -19.8031 -0.21049 210 -5.28328 -19.7838 -0.209554 245 -5.21603 -19.781 -0.209147 255 -2.91313 -20.2102 -0.208405 97 -5.14434 -19.7605 -0.208373 255 -4.98266 -19.7751 -0.207845 71 -5.04476 -19.7593 -0.207844 239 -4.68564 -19.7715 -0.20634 71 -2.94915 -20.013 -0.204528 84 -3.93467 -19.7572 -0.202801 71 -3.99672 -19.7447 -0.2028 71 -3.87144 -19.7636 -0.20268 71 -2.99489 -19.889 -0.202162 70 -3.13392 -19.7562 -0.199916 163 -3.03837 -19.7549 -0.199591 118 -4.92567 -20.9794 -0.131346 65 -3.90549 -21.0466 -0.129094 65 -3.96599 -21.0048 -0.128621 65 -3.04594 -20.5273 -0.118812 93 -5.17233 -19.7872 -0.114059 134 -5.09909 -19.7608 -0.113367 176 -5 -19.7613 -0.112991 212 -4.9267 -19.7323 -0.112268 227 -4.86324 -19.7419 -0.112174 62 -3.13324 -20.0346 -0.111349 61 -4.69453 -19.7231 -0.111264 69 -4.05047 -19.7531 -0.109542 61 -3.17424 -19.8884 -0.109177 61 -3.95221 -19.7465 -0.109134 61 -3.88782 -19.747 -0.108946 61 -3.22083 -19.7816 -0.107634 109 -3.31135 -19.7504 -0.10738 132 -3.41866 -20.2875 0.0197873 131 -4.82002 -19.9001 0.0207014 140 -4.74454 -19.8607 0.0212109 186 -3.45348 -20.1071 0.0213562 146 -4.67619 -19.8501 0.021447 222 -4.60526 -19.8277 0.0217925 231 -4.51001 -19.8414 0.021864 211 -4.4407 -19.8242 0.0221548 221 -4.37411 -19.8185 0.0223362 191 -4.27983 -19.835 0.0223713 185 -4.21378 -19.8308 0.0225345 153 -3.49165 -19.9523 0.0226881 167 -4.14495 -19.8126 0.0228252 147 -3.98843 -19.8406 0.0228595 154 -3.92377 -19.8413 0.0229679 174 -4.07947 -19.8098 0.0229702 154 -3.85952 -19.8437 0.0230582 208 -3.70209 -19.8655 0.0231289 240 -3.76337 -19.8479 0.0231845 230 -3.63752 -19.8652 0.0232374 223 -3.54073 -19.8644 0.0234001 229 +unknow 0.975541 1 0 378 -6.00617 26.0577 -1.75464 204 -6.08439 26.0232 -1.75347 198 -5.21778 26.1842 -1.75156 231 -6.15282 25.9476 -1.74922 248 -6.23013 25.9107 -1.7479 204 -6.3408 25.8346 -1.74438 193 -6.41569 25.7894 -1.74247 240 -6.49619 25.7671 -1.74232 202 -6.60517 25.6879 -1.73865 192 -6.67331 25.6188 -1.73499 238 -6.75224 25.5919 -1.73455 199 -5.25351 25.937 -1.73426 188 -6.86451 25.529 -1.7322 193 -6.93058 25.4553 -1.72824 237 -7.00629 25.418 -1.72707 197 -7.11741 25.354 -1.72472 190 -7.18235 25.2797 -1.72076 238 -7.25898 25.2474 -1.72002 198 -7.32439 25.1766 -1.71636 232 -7.43448 25.1131 -1.71416 197 -7.50821 25.0724 -1.71284 190 -7.57195 24.9991 -1.70902 235 -7.68031 24.9326 -1.70668 198 -7.74677 24.8702 -1.70374 204 -7.77409 24.684 -1.69127 215 -8.23291 24.518 -1.6901 231 -8.30286 24.4712 -1.68849 195 -8.10292 24.5129 -1.68673 189 -8.36873 24.4129 -1.68599 189 -8.46472 24.3186 -1.68174 232 -8.53251 24.2674 -1.67983 194 -8.60138 24.2198 -1.67822 188 -7.93377 24.2557 -1.66487 209 -7.84835 24.252 -1.66267 205 -7.76726 24.2614 -1.6615 204 -7.99452 25.9246 -1.63054 202 -5.42091 24.3844 -1.62512 206 -5.34131 24.3877 -1.62409 216 -5.49181 24.342 -1.62321 216 -5.22342 24.3989 -1.62307 168 -7.83741 25.8474 -1.62241 123 -5.13978 24.382 -1.62057 176 -5.06114 24.3883 -1.61984 186 -7.74525 25.8356 -1.61984 111 -5.18574 25.9822 -1.58746 160 -5.09598 25.9573 -1.58461 120 -8.15766 24.2747 -1.5273 92 -8.04067 24.3053 -1.52676 162 -7.87176 24.306 -1.52323 163 -7.66437 24.3157 -1.51958 111 -7.58615 24.3339 -1.51917 107 -5.47368 24.6001 -1.49966 99 -5.51826 24.4387 -1.48964 224 -5.62886 24.393 -1.48828 90 -5.35129 24.4125 -1.48544 172 -5.23073 24.4121 -1.48368 143 -5.07194 24.4191 -1.48191 131 -4.95323 24.4251 -1.4807 122 -5.11533 25.383 -1.40094 91 -8.21961 24.3055 -1.38627 179 -8.02411 24.356 -1.3854 137 -8.2837 24.2437 -1.38391 114 -8.07858 24.2644 -1.38105 137 -7.79246 24.2928 -1.3772 207 -7.90686 24.2558 -1.3772 255 -7.70587 24.2848 -1.37509 228 -7.55018 24.3232 -1.37447 102 -7.62358 24.2898 -1.37384 106 -7.41573 24.2936 -1.37024 98 -7.32558 24.2709 -1.36726 128 -7.24531 24.2804 -1.36639 131 -7.12466 24.2932 -1.36502 99 -7.04 24.2867 -1.36316 124 -4.56487 24.8588 -1.36242 59 -6.95929 24.2933 -1.36216 123 -6.83557 24.2932 -1.36005 122 -6.75176 24.2876 -1.35831 112 -6.66752 24.2798 -1.35645 106 -6.47356 24.3198 -1.3557 83 -6.58653 24.2833 -1.35533 77 -6.39106 24.3169 -1.35421 121 -6.19694 24.3547 -1.35347 105 -5.6979 24.4742 -1.35334 165 -6.30814 24.3117 -1.3526 139 -6.10975 24.3315 -1.35073 144 -6.03089 24.3408 -1.35011 102 -5.90956 24.3418 -1.34837 145 -5.8312 24.3525 -1.34787 99 -5.74554 24.3318 -1.34539 126 -4.59225 24.5716 -1.34514 67 -5.47155 24.3663 -1.34365 209 -5.54675 24.3431 -1.34328 131 -5.12085 24.4138 -1.34191 255 -5.27161 24.3695 -1.34116 189 -5.19462 24.384 -1.34104 144 -4.64642 24.4354 -1.33744 107 -4.99099 24.3653 -1.33731 101 -4.83666 24.3903 -1.33694 135 -4.71977 24.4031 -1.33632 106 -8.61269 24.5235 -1.25236 212 -8.04586 24.6291 -1.24775 150 -8.42568 24.3582 -1.24011 166 -8.33483 24.343 -1.23763 229 -8.03904 24.3497 -1.23269 156 -8.11551 24.3244 -1.23269 128 -7.60404 24.4431 -1.23022 121 -7.83039 24.3589 -1.22954 193 -7.74655 24.3606 -1.22819 122 -7.46239 24.3927 -1.22516 225 -7.65134 24.3257 -1.22471 124 -7.37529 24.3817 -1.22314 255 -7.29463 24.3913 -1.22235 255 -7.17001 24.3929 -1.22044 255 -7.09055 24.4057 -1.21988 255 -7.00499 24.3971 -1.21808 254 -6.88451 24.4107 -1.21696 255 -6.80401 24.4187 -1.21617 252 -6.71929 24.4111 -1.21448 255 -6.63783 24.4147 -1.21347 255 -5.63055 24.644 -1.21224 140 -6.51496 24.4168 -1.21179 252 -6.43515 24.4256 -1.21111 248 -6.35284 24.4244 -1.20987 239 -4.53002 24.8049 -1.20864 182 -6.23172 24.4309 -1.20853 237 -6.15347 24.4445 -1.20819 239 -6.07037 24.4386 -1.20673 243 -5.95182 24.4533 -1.20594 243 -5.86935 24.4486 -1.20459 237 -5.78698 24.4436 -1.20324 241 -5.50243 24.4376 -1.19931 144 -5.42303 24.4431 -1.19864 154 -5.3048 24.4547 -1.19785 195 -4.61059 24.591 -1.19763 142 -5.03438 24.5057 -1.19751 126 -5.22626 24.4634 -1.1974 146 -4.68368 24.5548 -1.19639 255 -4.75585 24.5145 -1.19493 255 -4.87013 24.4859 -1.19459 255 -5.137 24.4211 -1.19403 130 -4.93828 24.4274 -1.19212 199 -8.64317 24.5337 -1.10712 143 -8.49742 24.4873 -1.10247 192 -8.09531 24.4381 -1.09356 117 -8.34346 24.289 -1.09043 255 -8.25044 24.2659 -1.0878 182 -7.70947 24.4243 -1.08689 104 -7.95771 24.2773 -1.08365 125 -7.83344 24.2841 -1.08203 121 -7.59413 24.3244 -1.08031 107 -7.74621 24.2743 -1.08021 180 -4.51125 25.0007 -1.07637 135 -7.45489 24.2797 -1.07606 212 -7.37741 24.2992 -1.07586 255 -7.29761 24.3108 -1.07525 255 -7.17845 24.3296 -1.07445 255 -7.0953 24.329 -1.07323 255 -7.01443 24.3358 -1.07242 255 -6.89262 24.3436 -1.07111 255 -6.80914 24.3401 -1.06979 255 -6.72947 24.3498 -1.06919 255 -6.60734 24.3543 -1.06777 255 -5.29702 24.6683 -1.06757 140 -5.21661 24.6712 -1.06686 180 -5.37111 24.636 -1.06676 141 -6.5241 24.3498 -1.06645 255 -5.44676 24.6112 -1.06636 127 -6.44402 24.3567 -1.06575 255 -6.36395 24.3633 -1.06504 255 -6.24364 24.3717 -1.06393 255 -6.16216 24.3718 -1.06291 255 -6.08268 24.3794 -1.06231 255 -5.96252 24.3865 -1.0612 255 -4.53486 24.6857 -1.06089 168 -5.88216 24.3895 -1.06039 255 -5.80091 24.3885 -1.05937 255 -5.67645 24.3747 -1.05725 255 -5.59271 24.3612 -1.05563 238 -4.62904 24.5463 -1.05482 245 -4.70016 24.5002 -1.05321 255 -4.77216 24.4599 -1.05189 255 -4.95936 24.3981 -1.05068 251 -4.88035 24.4018 -1.05007 255 -5.03237 24.3648 -1.04977 131 -8.56347 24.5717 -0.959076 154 -4.56231 25.5511 -0.956121 177 -8.44244 24.472 -0.953063 255 -8.30789 24.3302 -0.945075 255 -8.17398 24.3123 -0.942382 255 -8.08555 24.3018 -0.940677 239 -7.71334 24.3261 -0.936549 242 -7.78176 24.277 -0.935382 122 -7.58666 24.324 -0.934754 255 -7.50431 24.3287 -0.933856 255 -7.42726 24.3502 -0.933767 255 -7.34089 24.3409 -0.932241 255 -7.21926 24.3523 -0.931164 255 -7.13764 24.3576 -0.930356 255 -7.05607 24.3626 -0.929549 255 -6.93295 24.3668 -0.928202 255 -6.8504 24.3673 -0.927215 255 -6.76791 24.3675 -0.926228 255 -4.52253 24.8802 -0.926143 168 -6.64774 24.3799 -0.925331 255 -6.56484 24.3775 -0.924254 255 -6.48307 24.3787 -0.923356 255 -6.3661 24.4012 -0.922998 255 -6.28341 24.3979 -0.921921 255 -6.2003 24.3923 -0.920754 255 -6.12071 24.4001 -0.920216 255 -6.00183 24.4131 -0.919498 255 -5.92274 24.4222 -0.919049 255 -5.83852 24.4096 -0.917613 255 -4.56557 24.6773 -0.917526 215 -5.72115 24.4271 -0.917165 255 -5.64122 24.4313 -0.916537 255 -5.55685 24.4158 -0.915011 255 -5.43869 24.4281 -0.914383 255 -4.66459 24.5653 -0.913397 255 -5.35504 24.4138 -0.912947 255 -5.27578 24.4188 -0.912408 255 -4.73716 24.5269 -0.91232 255 -4.8138 24.51 -0.91223 255 -4.92726 24.4772 -0.911781 255 -5.19485 24.4157 -0.911511 255 -5.00173 24.4499 -0.911242 255 -5.07728 24.4282 -0.910973 255 -8.18595 24.3864 -0.78212 99 -8.24589 24.3113 -0.780117 106 -8.04906 24.3582 -0.779424 255 -7.94526 24.2998 -0.776035 229 -7.86153 24.3018 -0.77511 225 -7.73967 24.3157 -0.774186 232 -7.65487 24.3132 -0.773108 241 -7.57074 24.3123 -0.772106 248 -4.49908 25.0388 -0.771187 145 -7.44793 24.321 -0.771028 239 -7.36629 24.327 -0.770335 240 -7.28069 24.3194 -0.769102 244 -7.2003 24.3287 -0.768563 239 -7.08057 24.3451 -0.76787 240 -6.99579 24.3384 -0.766715 251 -6.91168 24.3334 -0.765636 252 -6.79372 24.3541 -0.765174 255 -6.70872 24.3445 -0.763942 252 -6.62751 24.3481 -0.763249 248 -6.51166 24.3752 -0.763095 238 -6.42897 24.3723 -0.76217 252 -4.57445 24.7854 -0.762096 176 -6.34585 24.3673 -0.761169 254 -6.22602 24.3775 -0.760399 247 -6.14745 24.3892 -0.760091 251 -6.06504 24.3851 -0.759167 242 -5.98366 24.3846 -0.758396 240 -5.86404 24.3931 -0.757626 241 -5.78324 24.3939 -0.756933 247 -5.70477 24.4042 -0.756625 250 -5.58527 24.4113 -0.755855 228 -4.62185 24.6078 -0.755702 190 -5.50723 24.4229 -0.755624 210 -5.42401 24.4108 -0.754469 255 -5.30807 24.4322 -0.754315 248 -4.68869 24.5382 -0.753546 177 -5.22713 24.4292 -0.753545 243 -5.0699 24.4439 -0.752851 251 -5.14625 24.4259 -0.752774 248 -4.95386 24.4636 -0.752698 255 -4.8766 24.4771 -0.752621 253 -4.79891 24.4884 -0.752467 230 -8.10666 24.7395 -0.630621 103 -7.99304 24.6546 -0.626882 142 -7.83288 24.5549 -0.622241 128 -7.72855 24.4937 -0.61934 133 -7.62289 24.4263 -0.616246 166 -7.50181 24.4428 -0.615601 95 -4.53665 25.1583 -0.615477 112 -7.4116 24.4223 -0.614119 75 -7.32101 24.3995 -0.612572 143 -7.19686 24.4031 -0.61154 104 -7.11791 24.4179 -0.611282 162 -7.03506 24.419 -0.610573 172 -6.95226 24.4198 -0.609864 153 -6.83279 24.4369 -0.609349 174 -6.74904 24.4332 -0.608511 191 -6.66486 24.4273 -0.607608 201 -6.54605 24.4449 -0.607157 216 -6.46408 24.4461 -0.606513 222 -4.60355 24.8596 -0.606387 128 -6.38269 24.4489 -0.605933 231 -6.25994 24.4496 -0.604966 233 -6.17966 24.4556 -0.604515 234 -6.09939 24.4613 -0.604064 238 -6.01581 24.4532 -0.603161 241 -5.89815 24.4716 -0.602839 239 -5.81661 24.4705 -0.602195 243 -5.73649 24.4751 -0.601744 242 -5.61795 24.4882 -0.601293 244 -4.65111 24.684 -0.601101 200 -5.53701 24.4882 -0.600712 248 -5.45655 24.4898 -0.600197 245 -5.33639 24.4938 -0.599488 249 -5.25899 24.5085 -0.599424 243 -5.17989 24.5151 -0.599101 246 -4.715 24.5986 -0.59878 85 -4.9836 24.5374 -0.598522 91 -5.09916 24.5137 -0.598521 244 -4.82467 24.5447 -0.597748 112 -4.90057 24.5235 -0.597555 186 -7.47365 25.8018 -0.519332 89 -7.38872 25.8117 -0.518953 58 -7.25136 25.7904 -0.517382 87 -4.70275 25.1855 -0.485693 116 -5.9851 24.6693 -0.479299 55 -7.13829 24.3523 -0.47908 117 -6.71488 24.4662 -0.478918 55 -6.51383 24.4853 -0.477997 55 -6.43231 24.4882 -0.47751 55 -6.08405 24.5709 -0.477348 55 -6.15977 24.5458 -0.477185 55 -6.31337 24.5047 -0.477131 55 -6.23194 24.507 -0.476643 55 -4.71652 24.8249 -0.476158 97 -5.25217 24.6721 -0.474966 98 -5.79341 24.5507 -0.474965 55 -5.8668 24.5168 -0.474531 63 -5.67227 24.5543 -0.474315 55 -5.58892 24.5447 -0.473556 55 -5.51136 24.5602 -0.473502 55 -5.38916 24.5566 -0.47269 55 -5.31031 24.5656 -0.472473 55 -5.10909 24.5674 -0.47139 255 -5.0287 24.5676 -0.470957 255 -4.87386 24.5968 -0.470903 255 -4.95072 24.5794 -0.470849 255 -6.97542 25.8078 -0.337084 143 -7.04315 25.58 -0.332966 92 -4.85336 25.4351 -0.319961 117 -6.17918 25.0388 -0.317839 90 -4.87504 25.1214 -0.313763 193 -6.85249 24.5891 -0.312455 116 -6.92807 24.5617 -0.312332 121 -6.02972 24.7687 -0.311763 89 -6.20937 24.6624 -0.310539 89 -6.28632 24.6409 -0.310498 89 -6.36118 24.6113 -0.310294 89 -5.92563 24.6787 -0.309479 89 -5.44948 24.7411 -0.308542 88 -5.83558 24.6446 -0.308379 88 -5.64139 24.6878 -0.308338 88 -5.71393 24.6485 -0.30789 88 -5.55586 24.6703 -0.307604 88 -5.35682 24.6897 -0.307115 255 -5.00008 24.7277 -0.306382 126 -5.27168 24.6712 -0.306381 255 -5.15454 24.6919 -0.3063 255 -5.07531 24.7001 -0.306137 255 -4.93239 25.1972 -0.196172 129 -6.81378 24.593 -0.193715 125 -4.98006 25.0227 -0.193624 148 -6.68944 24.5939 -0.193212 194 -6.60542 24.5897 -0.192803 171 -6.52456 24.5968 -0.192583 186 -6.40356 24.6079 -0.192268 168 -6.32226 24.6124 -0.192017 183 -5.07446 24.8833 -0.191767 123 -6.24051 24.6147 -0.191734 206 -6.12061 24.6283 -0.191482 224 -6.03703 24.6222 -0.191073 232 -5.95871 24.6371 -0.191011 233 -5.83659 24.6396 -0.190602 228 -5.75644 24.6462 -0.190413 221 -5.67496 24.6466 -0.19013 213 -5.59705 24.6623 -0.190099 212 -5.4769 24.6709 -0.189816 216 -5.32136 24.7028 -0.189785 197 -5.12679 24.7419 -0.189754 119 -5.39808 24.6821 -0.189722 210 -5.20203 24.7139 -0.189565 168 +unknow 0.971561 1 0 4088 -4.37676 0.767205 -1.52634 79 -4.38518 0.669606 -1.52351 90 -4.3645 0.793308 -1.5235 84 -4.40623 0.496708 -1.5228 83 -4.33414 0.936415 -1.52279 86 -4.65783 -0.686053 -1.5216 90 -4.42852 -0.129002 -1.52139 97 -4.38866 0.606745 -1.52138 87 -4.42205 0.23959 -1.52067 90 -4.40923 0.413013 -1.52067 86 -4.3656 0.743971 -1.52067 122 -4.34417 0.860268 -1.52067 107 -4.69878 0.228232 -1.52025 105 -4.66056 0.640142 -1.52024 109 -4.58795 1.0399 -1.52024 107 -4.5259 1.28332 -1.52024 108 -4.51568 1.31883 -1.52024 113 -4.42517 -0.115013 -1.51997 89 -4.42594 0.0796625 -1.51997 94 -4.38106 0.63375 -1.51996 90 -4.35153 0.812097 -1.51996 111 -4.65747 -0.648701 -1.51958 119 -4.42475 -0.017683 -1.51926 98 -4.42468 0.0309698 -1.51926 95 -4.42251 0.142152 -1.51926 87 -4.42125 0.176882 -1.51926 85 -4.37618 0.654101 -1.51925 129 -4.37198 0.681584 -1.51925 96 -4.36422 0.729614 -1.51925 114 -4.33779 0.873152 -1.51925 110 -4.76178 -0.694925 -1.5189 117 -4.58099 1.05344 -1.5189 103 -4.41714 -0.226013 -1.51855 94 -4.42219 -0.0802089 -1.51855 90 -4.42292 -0.00379249 -1.51855 86 -4.38765 0.557468 -1.51854 110 -4.36465 0.715587 -1.51854 111 -4.3541 0.777216 -1.51854 129 -4.34268 0.838692 -1.51854 80 -4.33039 0.899999 -1.51854 110 -4.63743 0.75612 -1.51823 97 -4.52447 1.26755 -1.51822 112 -4.51438 1.30304 -1.51822 109 -4.5061 1.33138 -1.51822 114 -4.39834 -0.447484 -1.51784 110 -4.42074 -0.0524116 -1.51784 91 -4.40718 0.350004 -1.51784 88 -4.39841 0.44683 -1.51784 82 -4.38753 0.54344 -1.51784 114 -4.38221 0.584767 -1.51784 125 -4.64981 -0.662565 -1.51757 121 -4.67071 -0.494179 -1.51757 105 -4.66851 0.51461 -1.51756 102 -4.65798 0.602511 -1.51756 98 -4.64361 0.704792 -1.51756 97 -4.61236 0.886554 -1.51755 96 -4.58862 1.00218 -1.51755 102 -4.48939 1.38028 -1.51755 110 -4.39787 -0.433491 -1.51713 111 -4.40633 -0.336681 -1.51713 93 -4.41504 -0.191174 -1.51713 90 -4.41616 -0.16343 -1.51713 87 -4.41895 0.0447794 -1.51713 89 -4.41788 0.107245 -1.51713 94 -4.40982 0.287533 -1.51713 113 -4.40792 0.315235 -1.51713 114 -4.39513 0.460439 -1.51713 114 -4.39366 0.474245 -1.51713 122 -4.36319 0.701256 -1.51713 107 -4.34162 0.824325 -1.51712 118 -4.65202 -0.633092 -1.5169 117 -4.66312 -0.545296 -1.51689 97 -4.67037 -0.479322 -1.51689 97 -4.6932 -0.126157 -1.51689 110 -4.68425 0.31607 -1.51689 109 -4.67617 0.418998 -1.51689 104 -4.67128 0.470388 -1.51689 103 -4.66823 0.499728 -1.51689 104 -4.66416 0.536377 -1.51689 101 -4.6607 0.565672 -1.51689 98 -4.64921 0.653417 -1.51689 96 -4.63723 0.733648 -1.51688 105 -4.62888 0.784592 -1.51688 99 -4.61733 0.849951 -1.51688 91 -4.59752 0.951276 -1.51688 97 -4.58201 1.02337 -1.51688 106 -4.56709 1.08805 -1.51688 99 -4.56365 1.10239 -1.51688 124 -4.55125 1.1525 -1.51688 102 -4.54761 1.16679 -1.51688 107 -4.5383 1.20247 -1.51688 101 -4.53066 1.23096 -1.51688 99 -4.40698 -0.301946 -1.51643 85 -4.41632 0.0933152 -1.51642 122 -4.41546 0.127997 -1.51642 129 -4.41258 0.204268 -1.51642 89 -4.40926 0.266627 -1.51642 89 -4.40703 0.301247 -1.51642 107 -4.39675 0.425715 -1.51642 117 -4.38633 0.522294 -1.51642 111 -4.37378 0.61862 -1.51642 124 -4.3277 0.885233 -1.51642 111 -4.32062 0.919196 -1.51642 119 -4.21902 0.840074 -1.51633 78 -4.64074 -0.698522 -1.51622 132 -4.65683 -0.58168 -1.51622 100 -4.66458 -0.515791 -1.51622 102 -4.67141 -0.449797 -1.51622 102 -4.68588 -0.258693 -1.51622 122 -4.68741 -0.229245 -1.51622 114 -4.69282 0.0434166 -1.51622 110 -4.68556 0.264429 -1.51622 106 -4.68471 0.279148 -1.51622 113 -4.61142 0.871338 -1.51621 132 -4.49438 1.35094 -1.51621 111 -4.39133 -0.460746 -1.51572 111 -4.39864 -0.384805 -1.51572 111 -4.4004 -0.364073 -1.51572 111 -4.41444 -0.0939872 -1.51571 118 -4.41494 -0.0662485 -1.51571 132 -4.41533 -0.0315721 -1.51571 122 -4.38609 0.508285 -1.51571 114 -4.37846 0.570238 -1.51571 114 -4.75978 -0.641214 -1.51561 120 -4.71087 0.935125 -1.5156 121 -4.69718 1.00163 -1.5156 121 -4.47939 -0.687084 -1.51559 141 -4.47808 0.695598 -1.51558 157 -4.65024 -0.617998 -1.51555 120 -4.68777 -0.177631 -1.51555 109 -4.69075 -0.0597714 -1.51555 107 -4.69098 -0.0376653 -1.51555 109 -4.69077 0.0581267 -1.51555 104 -4.67787 0.352546 -1.51554 99 -4.61887 0.820243 -1.51554 96 -4.5968 0.936057 -1.51554 134 -4.54028 1.18011 -1.51554 103 -4.48831 1.3645 -1.51554 112 -4.47965 1.39267 -1.51554 116 -4.39427 -0.412272 -1.51501 107 -4.40177 -0.32246 -1.51501 122 -4.40417 -0.287878 -1.51501 114 -4.40505 -0.274041 -1.51501 125 -4.40707 -0.239436 -1.51501 129 -4.41127 -0.142469 -1.51501 125 -4.40784 0.224846 -1.515 129 -4.39561 0.397722 -1.515 122 -4.75379 -0.670834 -1.51495 118 -4.79985 -0.0998996 -1.51495 104 -4.76039 0.622291 -1.51494 118 -4.43419 0.926312 -1.51489 159 -4.65489 -0.566614 -1.51488 128 -4.67799 -0.324669 -1.51488 117 -4.68468 -0.207009 -1.51488 113 -4.68667 -0.155486 -1.51488 109 -4.68713 -0.140763 -1.51488 114 -4.68829 0.0949171 -1.51488 106 -4.68696 0.146461 -1.51487 101 -4.68442 0.212703 -1.51487 102 -4.67368 0.381767 -1.51487 104 -4.6486 0.61611 -1.51487 122 -4.63835 0.68905 -1.51487 128 -4.60216 0.899553 -1.51487 124 -4.56667 1.0652 -1.51487 105 -4.52905 1.21523 -1.51487 130 -4.39368 -0.398307 -1.5143 114 -4.39779 -0.349973 -1.5143 122 -4.40443 -0.253183 -1.5143 86 -4.40694 -0.20474 -1.5143 124 -4.40814 -0.177048 -1.5143 118 -4.40896 0.155506 -1.51429 118 -4.40447 0.252418 -1.51429 122 -4.39674 0.363023 -1.51429 89 -4.76233 0.592146 -1.51429 122 -4.64936 -0.59562 -1.51421 129 -4.66785 -0.427295 -1.51421 104 -4.66917 -0.412628 -1.51421 95 -4.67711 -0.309856 -1.51421 114 -4.48296 -0.637241 -1.51421 156 -4.68651 -0.0891913 -1.51421 101 -4.49589 -0.538509 -1.5142 160 -4.68734 0.0138828 -1.5142 108 -4.68552 0.131671 -1.5142 112 -4.68319 0.197896 -1.5142 135 -4.66229 0.484241 -1.5142 105 -4.6239 0.768769 -1.5142 132 -4.59603 0.920849 -1.5142 95 -4.58255 0.98573 -1.5142 103 -4.51756 1.25025 -1.51419 126 -4.78823 0.291847 -1.51363 100 -4.73597 0.763486 -1.51363 118 -4.64873 1.1839 -1.51362 100 -4.40934 0.0654096 -1.51359 128 -4.40573 0.190037 -1.51359 122 -4.66856 -0.397808 -1.51354 141 -4.67038 -0.375803 -1.51354 107 -4.67154 -0.361129 -1.51354 101 -4.67914 -0.24362 -1.51354 108 -4.68154 -0.192156 -1.51353 110 -4.68547 -0.00821274 -1.51353 114 -4.68539 0.0285866 -1.51353 120 -4.67582 0.300697 -1.51353 106 -4.66871 0.396109 -1.51353 107 -4.66545 0.432764 -1.51353 99 -4.64864 0.586397 -1.51353 132 -4.63021 0.717582 -1.51353 131 -4.55102 1.11443 -1.51352 97 -4.54572 1.13586 -1.51352 137 -4.46919 0.715835 -1.5135 158 -4.44979 0.827918 -1.5135 162 -4.75526 -0.617762 -1.51298 123 -4.75718 -0.602821 -1.51298 117 -4.79314 0.141255 -1.51298 101 -4.79216 0.171368 -1.51297 97 -4.72921 0.792926 -1.51297 110 -4.71753 0.859701 -1.51297 119 -4.40793 0.0169051 -1.51288 122 -4.39126 0.383391 -1.51288 96 -4.68228 -0.111207 -1.51286 110 -4.67196 0.329927 -1.51286 112 -4.65124 0.549638 -1.51286 127 -4.61401 0.804393 -1.51286 129 -4.60886 0.833367 -1.51285 125 -4.58194 0.970527 -1.51285 137 -4.47411 -0.67185 -1.51282 145 -4.4592 0.764624 -1.51281 175 -4.45179 0.806617 -1.51281 148 -4.74839 -0.654824 -1.51232 119 -4.75989 -0.565208 -1.51232 116 -4.78557 -0.272734 -1.51232 111 -4.74363 0.68848 -1.51231 121 -4.72098 0.829727 -1.51231 114 -4.71835 0.844553 -1.51231 114 -4.68156 1.02914 -1.51231 122 -4.59931 1.34999 -1.51231 103 -4.65872 -0.463413 -1.51219 125 -4.67242 -0.294838 -1.51219 116 -4.67332 -0.280156 -1.51219 114 -4.68166 -0.0229351 -1.51219 105 -4.68103 0.080016 -1.51219 103 -4.67814 0.18293 -1.51219 97 -4.67509 0.249045 -1.51219 110 -4.66032 0.447037 -1.51219 136 -4.63409 0.666072 -1.51218 117 -4.39334 0.334931 -1.51217 107 -4.5024 -0.424797 -1.51213 169 -4.50371 -0.410651 -1.51213 168 -4.52095 0.114447 -1.51212 169 -4.51942 0.16415 -1.51212 160 -4.47096 0.680168 -1.51212 158 -4.44348 0.841216 -1.51212 156 -4.44081 0.855172 -1.51212 137 -4.7553 -0.58739 -1.51167 119 -4.77209 -0.430238 -1.51166 98 -4.78139 -0.31018 -1.51166 108 -4.79134 -0.0319212 -1.51166 100 -4.78752 0.193817 -1.51166 134 -4.69378 0.96249 -1.51165 117 -4.68292 1.01404 -1.51165 129 -4.66811 1.08014 -1.51165 120 -4.64983 -0.529024 -1.51152 126 -4.66701 -0.346065 -1.51152 146 -4.67707 0.160808 -1.51152 151 -4.47352 -0.650199 -1.51144 151 -4.47751 -0.622078 -1.51144 153 -4.52006 0.0647149 -1.51143 174 -4.5158 0.206661 -1.51143 168 -4.50539 0.369639 -1.51143 169 -4.48654 0.553282 -1.51143 176 -4.47827 0.61665 -1.51143 158 -4.47631 0.630717 -1.51143 166 -4.43489 0.875736 -1.51142 140 -4.4293 0.903584 -1.51142 161 -4.77693 -0.347575 -1.51101 107 -4.7845 -0.219906 -1.51101 109 -4.78933 -0.0469449 -1.511 136 -4.77719 0.343974 -1.511 138 -4.77552 0.366482 -1.511 109 -4.7366 0.710286 -1.511 118 -4.70506 0.895696 -1.511 120 -4.66113 1.1017 -1.511 121 -4.64874 1.15289 -1.511 129 -4.63766 1.19665 -1.51099 118 -4.58057 1.3994 -1.51099 136 -4.67667 0.109317 -1.51085 109 -4.6636 0.366135 -1.51084 140 -4.46424 -0.699046 -1.51074 138 -4.51262 -0.233305 -1.51074 178 -4.45719 0.742708 -1.51073 151 -4.44876 0.791672 -1.51073 149 -4.7857 -0.137142 -1.51035 129 -4.78312 0.208712 -1.51035 97 -4.78053 0.261291 -1.51034 106 -4.77246 0.381343 -1.51034 129 -4.76292 0.486194 -1.51034 127 -4.75977 0.51611 -1.51034 121 -4.75729 0.538535 -1.51034 122 -4.75381 0.568414 -1.51034 125 -4.7453 0.63556 -1.51034 120 -4.73018 0.739752 -1.51034 121 -4.72422 0.776879 -1.51034 120 -4.70599 0.880574 -1.51034 122 -4.67112 1.04998 -1.51034 125 -4.47668 -0.600452 -1.51005 152 -4.48036 -0.572312 -1.51005 152 -4.488 -0.508918 -1.51005 142 -4.48105 0.566923 -1.51004 162 -4.47925 0.580998 -1.51004 167 -4.47646 0.6021 -1.51004 145 -4.46957 0.651283 -1.51004 151 -4.44937 0.77738 -1.51004 151 -4.75585 -0.534406 -1.50969 123 -4.7599 -0.497037 -1.50969 124 -4.76143 -0.482081 -1.50969 121 -4.76507 -0.44467 -1.50969 134 -4.77886 -0.257252 -1.50969 109 -4.78202 -0.18967 -1.50969 95 -4.78336 -0.152107 -1.50969 125 -4.78496 0.0884208 -1.50969 99 -4.7778 0.276209 -1.50969 132 -4.69122 0.946648 -1.50968 120 -4.68518 0.976106 -1.50968 117 -4.65397 1.11548 -1.50968 123 -4.62447 1.23208 -1.50968 126 -4.60042 1.31903 -1.50968 103 -4.59626 1.33347 -1.50968 133 -4.48028 -0.557992 -1.50936 138 -4.49 -0.473447 -1.50936 150 -4.51116 -0.183499 -1.50935 179 -4.51198 -0.162238 -1.50935 173 -4.51487 0.0150261 -1.50935 166 -4.50841 0.241852 -1.50935 175 -4.50637 0.277254 -1.50935 168 -4.50548 0.291409 -1.50935 151 -4.50454 0.305562 -1.50935 156 -4.48831 0.489224 -1.50935 178 -4.48675 0.503322 -1.50935 167 -4.4835 0.531502 -1.50935 169 -4.4558 0.728119 -1.50935 171 -4.42659 0.888588 -1.50935 164 -4.76589 -0.414548 -1.50904 114 -4.77016 -0.36212 -1.50903 135 -4.77776 -0.242132 -1.50903 140 -4.78362 0.0508278 -1.50903 128 -4.77259 0.328606 -1.50903 129 -4.74545 0.605275 -1.50903 129 -4.72874 0.724337 -1.50903 120 -4.71425 0.813335 -1.50903 118 -4.6486 1.12966 -1.50902 129 -4.63959 1.16613 -1.50902 132 -4.60882 1.28236 -1.50902 129 -4.6717 -0.0743128 -1.50883 142 -4.49861 -0.360302 -1.50866 167 -4.50576 0.255919 -1.50866 167 -4.49487 0.404383 -1.50866 183 -4.75375 -0.51903 -1.50838 120 -4.77882 -0.174487 -1.50838 114 -4.7815 -0.0693625 -1.50838 125 -4.78187 0.0357954 -1.50837 108 -4.73455 0.672044 -1.50837 125 -4.6948 0.909078 -1.50837 124 -4.61692 1.24564 -1.50836 135 -4.47297 -0.585623 -1.50797 166 -4.48773 -0.458935 -1.50797 156 -4.50357 -0.261175 -1.50797 175 -4.51105 0.0292063 -1.50797 168 -4.50889 0.14256 -1.50797 165 -4.50705 0.192129 -1.50797 171 -4.5054 0.22752 -1.50797 180 -4.49931 0.326535 -1.50796 178 -4.49826 0.340669 -1.50796 162 -4.4917 0.418338 -1.50796 160 -4.48142 0.517006 -1.50796 153 -4.46193 0.664524 -1.50796 155 -4.8746 0.89592 -1.50779 87 -4.77378 0.245924 -1.50772 132 -4.76179 0.418193 -1.50771 128 -4.75906 0.448104 -1.50771 128 -4.74806 0.552644 -1.50771 125 -4.60918 1.26689 -1.50771 106 -4.47893 -0.522102 -1.50728 151 -4.4829 -0.486909 -1.50728 160 -4.49756 -0.324669 -1.50728 185 -4.49856 -0.310537 -1.50728 173 -4.50042 -0.282266 -1.50728 183 -4.5025 -0.246912 -1.50728 176 -4.50494 -0.19739 -1.50728 184 -4.50728 -0.133685 -1.50728 173 -4.50831 0.092947 -1.50727 171 -4.48781 0.439327 -1.50727 162 -4.48641 0.453425 -1.50727 173 -4.48497 0.467517 -1.50727 170 -4.74664 -0.548435 -1.50706 123 -4.75541 -0.466342 -1.50706 125 -4.76915 -0.294271 -1.50706 133 -4.77667 -0.121816 -1.50706 133 -4.77819 -0.0167502 -1.50706 125 -4.77766 0.0733141 -1.50706 132 -4.77657 0.125841 -1.50706 135 -4.773 0.223346 -1.50706 129 -4.49185 -0.373934 -1.50659 169 -4.49764 -0.296269 -1.50658 171 -4.50632 -0.0982311 -1.50658 174 -4.5066 -0.0840735 -1.50658 170 -4.50734 -0.0203564 -1.50658 169 -4.4905 0.389804 -1.50658 183 -4.76027 -0.391425 -1.50641 120 -4.77559 -0.0842519 -1.5064 129 -4.77629 0.0207798 -1.5064 138 -4.77522 0.103301 -1.5064 129 -4.75668 0.432828 -1.5064 121 -4.61917 1.21519 -1.50639 116 -4.57872 1.35968 -1.50639 136 -4.48425 -0.437204 -1.50589 151 -4.48817 -0.394922 -1.50589 164 -4.50055 -0.211345 -1.50589 180 -4.50551 0.000894303 -1.50589 171 -4.50369 0.128267 -1.50589 174 -4.502 0.177777 -1.50589 172 -4.49155 0.354388 -1.50589 170 -4.77445 -0.00171805 -1.50575 121 -4.76417 0.313043 -1.50574 129 -4.75126 0.469997 -1.50574 129 -4.72914 0.656168 -1.50574 117 -4.59566 1.29432 -1.50574 135 -4.57045 1.38071 -1.50573 103 -4.94213 0.254156 -1.50525 97 -4.80326 1.19081 -1.50525 95 -4.50337 -0.0486133 -1.5052 172 -4.50343 0.0433503 -1.5052 171 -4.76819 -0.204054 -1.50509 138 -4.74633 0.499654 -1.50508 118 -4.65305 1.06137 -1.50508 121 -5.88927 1.28426 -1.50485 34 -4.87482 0.840606 -1.50461 95 -4.83806 1.03134 -1.50461 92 -4.81062 1.1526 -1.50461 72 -4.78411 1.2581 -1.50461 100 -4.50163 -0.0344411 -1.50451 171 -4.50107 0.0786953 -1.5045 173 -4.76813 0.155645 -1.50443 137 -4.90559 -0.622005 -1.50399 84 -4.94482 0.0210331 -1.50398 95 -4.89025 0.732919 -1.50398 79 -4.88435 0.771303 -1.50398 90 -4.83295 1.04613 -1.50398 98 -4.4983 -0.119223 -1.50381 161 -4.75779 -0.323537 -1.50378 135 -4.7524 0.394873 -1.50377 128 -4.89657 -0.675657 -1.50335 86 -4.92968 0.362322 -1.50335 103 -4.92052 0.470634 -1.50334 95 -4.81408 1.12147 -1.50334 87 -4.48476 -0.34493 -1.50312 170 -4.49747 -0.0697154 -1.50312 170 -4.93068 -0.32028 -1.50271 100 -4.86656 0.854903 -1.50271 89 -4.84958 0.946478 -1.5027 92 -4.82427 1.06805 -1.5027 92 -4.49372 -0.14734 -1.50243 158 -4.89239 0.678294 -1.50207 90 -4.88044 0.74709 -1.50143 92 -4.83983 0.97616 -1.50143 87 -4.73755 1.39013 -1.50143 101 -4.74642 -0.375196 -1.50115 126 -5.00546 0.917667 -1.50112 100 -4.92737 -0.281251 -1.50081 95 -4.93539 0.00543656 -1.5008 90 -4.91975 0.392645 -1.5008 100 -4.89074 0.662391 -1.5008 92 -4.86752 0.815686 -1.5008 85 -4.84101 0.960573 -1.5008 92 -4.7549 1.3225 -1.50079 102 -4.92827 -0.226979 -1.50017 98 -4.9296 -0.19601 -1.50017 103 -4.9318 0.129402 -1.50017 92 -4.90804 0.500528 -1.50016 94 -4.89585 0.608333 -1.50016 89 -4.79409 1.1645 -1.50016 90 -4.73826 1.37416 -1.50016 102 -4.89044 -0.635773 -1.49954 78 -4.90646 -0.497264 -1.49953 87 -4.92563 -0.242378 -1.49953 100 -4.92909 -0.157237 -1.49953 100 -4.92956 -0.141752 -1.49953 100 -4.93017 -0.11852 -1.49953 98 -4.93082 -0.0875413 -1.49953 95 -4.93124 0.0596379 -1.49953 79 -4.9077 0.484911 -1.49953 89 -4.89203 0.62346 -1.49953 95 -4.89005 0.638826 -1.49953 92 -4.88273 0.692554 -1.49953 86 -4.85453 0.868469 -1.49952 90 -4.84468 0.921794 -1.49952 76 -4.82645 1.01294 -1.49952 85 -4.77916 1.21667 -1.49952 92 -5.06715 -0.403311 -1.49928 114 -4.88128 -0.689252 -1.4989 81 -4.90299 -0.512488 -1.4989 89 -4.91178 -0.419983 -1.4989 92 -4.9183 -0.335057 -1.4989 103 -4.92517 -0.211353 -1.4989 98 -4.92959 -0.0333159 -1.4989 92 -4.92839 0.1138 -1.49889 87 -4.92757 0.144763 -1.49889 89 -4.92568 0.198935 -1.49889 100 -4.92012 0.307198 -1.49889 98 -4.91809 0.338106 -1.49889 100 -4.91529 0.376723 -1.49889 92 -4.89671 0.569405 -1.49889 81 -4.87754 0.715272 -1.49889 99 -4.80638 1.09575 -1.49889 90 -4.77154 1.23869 -1.49889 98 -4.75764 1.29108 -1.49889 97 -4.73891 1.35821 -1.49888 95 -4.96503 1.08067 -1.49865 95 -4.88466 -0.650652 -1.49826 99 -4.90644 -0.45838 -1.49826 82 -4.90785 -0.442965 -1.49826 94 -4.91889 -0.296314 -1.49826 97 -4.92767 0.0363507 -1.49826 97 -4.92208 0.237513 -1.49826 92 -4.91724 0.322521 -1.49826 92 -4.90079 0.515322 -1.49826 90 -5.03249 -0.688517 -1.49804 98 -5.04172 -0.617306 -1.49804 126 -5.05163 -0.530103 -1.49804 98 -4.88963 -0.596685 -1.49763 94 -4.89329 -0.565951 -1.49763 87 -4.89504 -0.550575 -1.49763 97 -4.90929 -0.40426 -1.49763 84 -4.91173 -0.373406 -1.49763 81 -4.91876 -0.265309 -1.49762 95 -4.9225 0.183299 -1.49762 100 -4.92125 0.214225 -1.49762 98 -4.9186 0.268321 -1.49762 97 -4.8632 0.783528 -1.49762 87 -4.76001 1.26765 -1.49761 98 -4.74991 1.305 -1.49761 95 -5.03274 -0.672443 -1.49742 131 -5.03483 -0.656629 -1.49742 96 -5.05883 -0.434621 -1.49742 101 -5.05461 0.481321 -1.49741 98 -5.05148 0.513069 -1.49741 108 -5.01315 0.805626 -1.49741 93 -5.00126 0.876415 -1.49741 129 -4.91509 1.27383 -1.49741 107 -4.8896 -0.581107 -1.49699 82 -4.92141 0.160029 -1.49699 94 -4.90381 0.445626 -1.49698 92 -4.88833 0.591759 -1.49698 82 -4.85884 0.798487 -1.49698 100 -4.82375 0.988628 -1.49698 100 -4.80426 1.07937 -1.49698 92 -5.07553 0.0194595 -1.4968 106 -5.02444 0.71863 -1.49679 100 -5.01744 0.765952 -1.49679 100 -5.00479 0.844667 -1.49679 104 -4.9865 0.946683 -1.49679 101 -4.97892 0.985817 -1.49679 96 -4.89931 -0.473275 -1.49635 100 -4.92104 -0.102882 -1.49635 97 -4.9217 -0.06423 -1.49635 92 -4.9033 0.430042 -1.49635 89 -4.83825 0.904777 -1.49634 99 -4.77378 1.19929 -1.49634 98 -5.0653 -0.291194 -1.49618 105 -5.07174 -0.139914 -1.49618 106 -5.02589 0.694695 -1.49617 105 -5.02027 0.734146 -1.49617 131 -5.01794 0.749913 -1.49617 104 -4.96915 1.02452 -1.49617 102 -4.96262 1.05572 -1.49617 104 -4.92891 1.20333 -1.49617 111 -5.48759 -0.645428 -1.49595 86 -4.90776 -0.349881 -1.49572 87 -4.9172 -0.172382 -1.49572 103 -4.9116 0.29113 -1.49571 94 -4.90273 0.414467 -1.49571 98 -4.73615 1.33324 -1.4957 95 -5.04959 -0.473778 -1.49556 119 -5.07062 -0.107995 -1.49556 112 -5.07158 0.0433637 -1.49556 116 -5.03133 0.639162 -1.49556 133 -5.02826 0.662865 -1.49556 101 -4.95232 1.09426 -1.49555 136 -4.93267 1.17966 -1.49555 106 -4.89108 1.3417 -1.49555 113 -4.91808 -0.0487511 -1.49508 95 -4.88889 0.537324 -1.49507 87 -4.88717 0.552681 -1.49507 103 -4.78657 1.13079 -1.49507 102 -5.02933 -0.639809 -1.49495 121 -5.03606 -0.584471 -1.49495 120 -5.03876 -0.560733 -1.49495 120 -5.06609 -0.195504 -1.49494 111 -5.06903 -0.0920191 -1.49494 107 -5.06941 -0.0681313 -1.49494 109 -5.06407 0.242358 -1.49494 138 -5.06014 0.313923 -1.49494 137 -5.05201 0.425115 -1.49494 108 -5.03616 0.583592 -1.49494 99 -5.02427 0.678412 -1.49494 131 -4.98958 0.898663 -1.49494 108 -4.89963 1.30277 -1.49493 121 -4.87856 1.37957 -1.49493 112 -4.88815 -0.526538 -1.49445 78 -5.05768 -0.322623 -1.49433 109 -5.0625 -0.235188 -1.49433 93 -5.06645 -0.123811 -1.49432 107 -5.06769 -0.0521766 -1.49432 108 -5.05723 0.329704 -1.49432 106 -5.05562 0.353531 -1.49432 107 -5.0436 0.496315 -1.49432 138 -5.03147 0.6071 -1.49432 135 -5.00626 0.788442 -1.49432 130 -4.97451 0.968756 -1.49432 126 -4.96833 0.999991 -1.49432 125 -4.93628 1.1478 -1.49431 98 -4.91571 1.23292 -1.49431 99 -4.88317 1.35606 -1.49431 114 -5.47664 -0.687816 -1.49424 115 -4.9145 -0.0178551 -1.49381 92 -4.91396 0.0747786 -1.49381 105 -5.03671 -0.544472 -1.49371 128 -5.0424 -0.489059 -1.49371 96 -5.05421 -0.346314 -1.49371 105 -5.06288 -0.179434 -1.49371 100 -5.06342 -0.163527 -1.49371 138 -5.06524 0.0910856 -1.4937 107 -5.05016 0.401022 -1.4937 103 -5.04545 0.456525 -1.4937 134 -5.03766 0.53572 -1.4937 102 -5.03419 0.567362 -1.4937 105 -4.94328 1.10859 -1.4937 99 -4.93977 1.12412 -1.4937 143 -4.91771 1.21703 -1.4937 107 -4.908 1.25561 -1.4937 136 -5.34124 1.38447 -1.49365 115 -4.8973 -0.387857 -1.49317 105 -5.48006 -0.627138 -1.49309 117 -5.48201 -0.609921 -1.49309 92 -5.05487 -0.306483 -1.49309 112 -5.06203 0.146729 -1.49308 102 -5.05758 0.258003 -1.49308 109 -5.0554 0.297718 -1.49308 102 -5.05069 0.369155 -1.49308 102 -5.02576 0.622456 -1.49308 101 -5.37638 1.23248 -1.49308 101 -5.35842 1.30836 -1.49308 104 -4.99086 0.858509 -1.49308 94 -4.97823 0.928978 -1.49308 128 -4.92894 1.16245 -1.49308 130 -4.89817 1.28595 -1.49308 113 -4.88792 1.32438 -1.49308 105 -5.28613 -0.688282 -1.49301 104 -5.03705 -0.504501 -1.49247 127 -5.0493 -0.361898 -1.49247 137 -5.05604 -0.250781 -1.49247 108 -5.28622 0.67264 -1.49241 106 -5.15392 1.35418 -1.49241 125 -5.34848 1.33265 -1.49194 108 -4.90802 0.0900817 -1.4919 77 -5.0529 -0.27449 -1.49185 109 -5.0598 0.0751179 -1.49185 106 -5.0553 0.226071 -1.49185 99 -5.04571 0.38475 -1.49185 140 -5.03027 0.550951 -1.49184 131 -5.28259 -0.67092 -1.49124 95 -5.27699 0.713643 -1.49123 100 -5.04123 -0.417062 -1.49123 131 -5.04435 -0.377456 -1.49123 102 -5.05372 -0.218823 -1.49123 138 -5.20824 1.10911 -1.49123 109 -5.05844 -0.012302 -1.49123 138 -5.05845 0.00358974 -1.49123 111 -5.18641 1.20708 -1.49123 116 -5.05715 0.114821 -1.49123 102 -5.05676 0.130708 -1.49123 133 -4.99181 0.818391 -1.49122 127 -5.37842 1.18853 -1.49079 94 -5.05251 0.202114 -1.49061 105 -5.04915 0.27352 -1.49061 104 -5.03738 0.439895 -1.49061 102 -4.94914 1.0367 -1.4906 130 -5.36316 1.24715 -1.49022 103 -5.3387 1.34801 -1.49022 114 -5.28868 -0.587423 -1.49006 99 -5.27541 0.69658 -1.49005 109 -5.26504 0.771087 -1.49005 106 -5.21304 1.06743 -1.49005 95 -5.192 1.16549 -1.49005 108 -5.15074 1.3361 -1.49005 121 -5.03401 -0.456279 -1.49 125 -5.05122 0.18618 -1.48999 104 -4.85955 1.39078 -1.48998 114 -5.47246 -0.591513 -1.48966 125 -5.35134 1.28877 -1.48965 101 -5.33258 1.36429 -1.48965 111 -5.12856 -0.64245 -1.4895 69 -5.13801 -0.561815 -1.4895 78 -5.05344 1.08518 -1.48949 78 -5.0149 1.25126 -1.48949 82 -5.2582 0.803873 -1.48946 114 -5.25435 0.828643 -1.48946 105 -5.25172 0.845145 -1.48946 100 -5.24904 0.861641 -1.48946 103 -5.2145 1.05067 -1.48946 104 -5.19912 1.12429 -1.48946 100 -5.01721 -0.598177 -1.48938 94 -5.04988 0.170257 -1.48937 137 -5.37651 1.17037 -1.48908 98 -5.36715 1.21256 -1.48908 136 -5.3535 1.2715 -1.48908 106 -5.12038 -0.690511 -1.4889 70 -5.13342 -0.585815 -1.48889 70 -5.26714 0.729207 -1.48887 104 -5.26483 0.745749 -1.48887 107 -5.1919 1.14837 -1.48887 104 -5.18458 1.18097 -1.48887 115 -5.0505 0.0591579 -1.48875 110 -5.45974 -0.668368 -1.48852 118 -5.37829 1.15307 -1.48851 150 -5.2848 -0.570163 -1.48829 102 -5.13596 -0.545288 -1.48829 76 -5.24115 0.885747 -1.48828 104 -5.16942 1.23747 -1.48828 108 -5.16353 1.26181 -1.48828 120 -5.15141 1.31042 -1.48828 120 -5.04881 -0.0360207 -1.48814 99 -5.26691 -0.702527 -1.4877 132 -5.25503 0.786529 -1.48769 105 -5.11875 -0.673944 -1.48768 76 -5.12585 -0.617621 -1.48768 73 -5.04269 1.10773 -1.48767 78 -5.03563 1.13939 -1.48767 80 -5.92868 -0.648328 -1.48737 76 -5.27636 -0.611192 -1.48711 107 -5.15179 1.29332 -1.4871 118 -5.1265 1.39019 -1.4871 127 -5.15214 -0.302543 -1.48707 85 -4.98518 1.33571 -1.48706 83 -5.92149 -0.694655 -1.48684 75 -5.27052 -0.644092 -1.48652 144 -5.15397 1.27668 -1.48651 121 -5.13115 1.36554 -1.48651 123 -5.14101 -0.431769 -1.48647 83 -5.14362 -0.399459 -1.48647 79 -5.15741 -0.132418 -1.48647 84 -5.09853 0.788311 -1.48646 76 -5.05574 1.02761 -1.48646 75 -5.0191 1.19379 -1.48646 80 -4.99772 1.28033 -1.48646 83 -5.27063 -0.627296 -1.48593 107 -5.26947 0.636992 -1.48592 106 -5.19485 1.0893 -1.48592 149 -5.16584 1.2195 -1.48592 105 -5.11842 1.4053 -1.48592 131 -5.15652 -0.0837832 -1.48586 86 -5.06023 0.995445 -1.48585 67 -5.63495 -0.694095 -1.48579 110 -5.26554 0.653319 -1.48533 115 -5.20785 1.0154 -1.48533 98 -5.13512 -0.455673 -1.48526 83 -5.15399 -0.116148 -1.48526 82 -5.15496 -0.0594707 -1.48526 83 -5.15512 -0.0432755 -1.48525 85 -5.10762 0.699565 -1.48525 76 -5.09962 0.755682 -1.48525 81 -5.09722 0.771699 -1.48525 78 -5.06602 0.955309 -1.48525 74 -4.98795 1.30289 -1.48524 86 -5.63832 -0.649588 -1.48523 106 -5.53309 1.26398 -1.48522 118 -5.22704 0.900318 -1.48474 102 -5.91597 -0.675208 -1.48472 77 -5.52112 1.30696 -1.48467 118 -5.13664 -0.415185 -1.48465 87 -5.15242 -0.0999292 -1.48465 85 -5.15338 0.0133949 -1.48465 87 -5.10008 0.739375 -1.48464 72 -5.07714 0.883262 -1.48464 74 -5.04192 1.06607 -1.48464 69 -5.12987 -0.471475 -1.48405 83 -5.14009 -0.342411 -1.48404 83 -5.14708 -0.213133 -1.48404 89 -5.10601 0.682992 -1.48404 73 -5.0209 1.15259 -1.48403 79 -4.99434 1.26272 -1.48403 85 -4.96536 1.37223 -1.48403 88 -5.54101 1.20187 -1.48356 118 -5.14252 -0.269624 -1.48344 88 -5.14938 0.0457201 -1.48344 88 -5.14911 0.0699851 -1.48344 92 -5.13635 0.368961 -1.48343 78 -5.06338 0.938319 -1.48343 78 -5.02618 1.1206 -1.48343 81 -5.00032 1.23085 -1.48343 82 -5.62863 -0.66636 -1.48302 133 -5.19713 1.0303 -1.48297 100 -5.12456 -0.487246 -1.48283 81 -5.14478 -0.172594 -1.48283 85 -5.1476 -0.0270783 -1.48283 80 -5.14317 0.215436 -1.48283 83 -5.13613 0.344616 -1.48283 85 -5.04774 1.00942 -1.48282 79 -5.51972 1.27923 -1.48245 122 -5.5095 1.32254 -1.48245 122 -5.50532 1.33984 -1.48245 126 -5.12111 -0.503166 -1.48223 72 -5.14067 -0.229075 -1.48223 79 -5.14339 -0.156381 -1.48223 86 -5.14577 -0.00283066 -1.48222 83 -5.14191 0.199193 -1.48222 74 -5.10754 0.626084 -1.48222 78 -5.10351 0.658162 -1.48222 80 -5.78771 1.35732 -1.48206 92 -5.77907 1.39366 -1.48206 89 -5.52965 1.22675 -1.48189 110 -5.25911 0.610676 -1.48179 105 -5.13404 -0.317753 -1.48162 87 -5.14378 0.0294808 -1.48162 85 -5.14141 0.158734 -1.48162 73 -5.13866 0.231401 -1.48162 91 -5.008 1.17446 -1.48161 87 -5.00052 1.2059 -1.48161 78 -4.97279 1.31557 -1.48161 85 -4.96231 1.35458 -1.48161 85 -4.9537 1.38574 -1.48161 90 -5.79632 1.31139 -1.48153 95 -5.62698 -0.630313 -1.48135 145 -5.53724 1.18289 -1.48134 170 -5.48653 1.39936 -1.48134 130 -5.11489 -0.526921 -1.48102 82 -5.12948 -0.357943 -1.48101 89 -5.13403 -0.285393 -1.48101 87 -5.13611 -0.245062 -1.48101 84 -5.1385 -0.188574 -1.48101 83 -5.13998 0.14252 -1.48101 79 -5.12756 0.384487 -1.48101 78 -5.12633 0.400593 -1.48101 81 -5.07265 0.84143 -1.48101 78 -5.06863 0.865324 -1.48101 77 -5.79853 1.29275 -1.481 74 -5.52202 1.24328 -1.48079 145 -5.49335 1.36441 -1.48078 122 -5.48903 1.38166 -1.48078 125 -5.26187 -0.550849 -1.48062 105 -5.25721 0.593742 -1.48061 105 -5.90574 -0.627162 -1.48049 73 -5.09814 -0.655058 -1.48041 82 -5.10503 -0.598963 -1.48041 82 -5.13933 0.0859538 -1.48041 82 -5.09988 0.641383 -1.4804 75 -5.05693 0.920652 -1.4804 69 -5.12453 -0.373798 -1.4798 83 -5.12768 0.327822 -1.4798 81 -5.10831 0.552958 -1.4798 76 -5.10287 0.601077 -1.4798 77 -5.04616 0.967902 -1.47979 82 -5.13523 0.102003 -1.47919 79 -5.13469 0.126202 -1.47919 83 -5.1299 0.255196 -1.47919 80 -5.07219 0.808612 -1.47919 78 -5.06963 0.824544 -1.47919 68 -5.78278 1.32739 -1.47888 70 -5.77218 1.37277 -1.47888 78 -5.19499 0.970703 -1.47884 115 -5.11029 0.496369 -1.47858 75 -5.05559 0.895786 -1.47858 85 -5.12298 0.311337 -1.47798 75 -5.11555 0.415877 -1.47798 79 -5.02474 1.04585 -1.47797 83 -5.09716 0.584138 -1.47737 66 -5.08087 0.712044 -1.47737 82 -5.18439 0.985627 -1.47648 118 -5.10644 0.455503 -1.47616 85 -5.10594 0.439285 -1.47555 73 -5.11575 0.270539 -1.47495 75 -5.10119 0.471173 -1.47495 67 -5.0957 0.527234 -1.47495 71 -5.11297 0.286493 -1.47434 84 -5.60506 -0.601011 -1.47415 89 -5.1855 0.92693 -1.47353 98 -5.25466 -0.342108 -1.47295 92 -6.01505 -0.665556 -1.47181 96 -5.17544 0.950349 -1.47176 116 -5.08596 0.510024 -1.47131 86 -5.18086 0.90935 -1.47117 80 -5.10633 0.181568 -1.47071 84 -5.07815 0.565693 -1.47071 89 -6.31195 1.36373 -1.4687 112 -5.21723 0.57284 -1.46763 102 -5.88576 1.3045 -1.46558 114 -5.87533 1.35069 -1.46558 110 -6.17613 -0.645714 -1.46441 91 -5.86108 1.38627 -1.46403 111 -5.8567 1.40467 -1.46403 117 -5.98116 -0.690219 -1.46352 120 -6.16701 -0.693785 -1.46341 118 -5.8722 1.32091 -1.46299 111 -5.86164 1.36699 -1.46299 111 -6.16724 -0.674204 -1.46291 100 -6.04814 1.32873 -1.45987 8 -6.03374 1.37532 -1.45886 117 -6.02939 1.39427 -1.45886 122 -6.26126 1.40451 -1.45849 144 -5.86338 1.28035 -1.45833 162 -6.26375 1.38442 -1.458 175 -6.0286 1.3542 -1.45635 168 -5.10769 0.537029 -1.43281 104 -5.28446 -0.546922 -1.43248 72 -5.11824 -0.348708 -1.43104 120 -5.75589 1.229 -1.42725 27 -5.08306 -0.515095 -1.42455 72 -5.0751 -0.457904 -1.42042 114 -5.08092 -0.362019 -1.41983 113 -5.0703 -0.401271 -1.41747 114 -5.06222 -0.47272 -1.41688 107 -5.05881 -0.488428 -1.41629 82 -5.06331 -0.416698 -1.4157 88 -5.06007 -0.43243 -1.41511 96 -5.06452 -0.376767 -1.41511 97 -5.05599 -0.304262 -1.41098 71 -5.11382 1.06985 -1.40616 100 -5.07778 1.04547 -1.39415 89 -5.07728 1.02873 -1.39301 78 -4.97431 0.507899 -1.3909 96 -4.99369 -0.213654 -1.39032 95 -4.93402 0.488349 -1.37792 126 -5.02792 1.00202 -1.377 118 -4.93281 0.417945 -1.37556 134 -4.92438 0.44844 -1.37379 120 -4.91948 0.393556 -1.37084 82 -5.05912 -0.508663 -1.36443 82 -4.88986 0.468711 -1.36375 129 -4.86863 0.428248 -1.35608 113 -4.99962 -0.487136 -1.34613 82 -4.8292 0.371553 -1.34251 124 -4.79984 0.354295 -1.33307 171 -4.79261 -0.219091 -1.32835 75 -4.77945 -0.165769 -1.32363 192 -4.77671 -0.188204 -1.32304 197 -4.76713 0.329487 -1.32244 190 -4.85216 0.942292 -1.3221 101 -5.45845 -0.584188 -1.32108 50 -4.75939 -0.269876 -1.31891 85 -4.74335 0.31301 -1.31477 211 -4.73985 -0.14927 -1.31123 206 -4.73286 0.297449 -1.31123 225 -4.73957 -0.0822066 -1.31064 228 -4.73274 -0.230935 -1.31005 85 -4.73738 -0.0970454 -1.31005 227 -4.72779 -0.253009 -1.30887 75 -4.7268 0.192901 -1.30769 227 -4.72501 -0.133863 -1.30651 215 -4.72559 -0.111594 -1.30651 221 -4.71316 -0.0593856 -1.30238 232 -4.70898 0.207089 -1.30238 233 -4.70913 0.0738422 -1.3012 238 -4.7065 0.11079 -1.30061 236 -4.70314 0.0885599 -1.29943 238 -4.69815 -0.0295898 -1.29766 238 -4.69268 0.228617 -1.29766 239 -4.69442 0.0073239 -1.29648 240 -4.77047 0.910424 -1.29637 102 -4.68416 0.279891 -1.29588 241 -4.69039 -0.0442361 -1.2953 240 -4.68867 -0.0147479 -1.29471 240 -4.98795 -0.516109 -1.29453 95 -4.68673 0.0220784 -1.29412 240 -4.6845 0.0588744 -1.29353 240 -4.6832 0.125091 -1.29352 124 -4.67705 0.139663 -1.29175 100 -4.67708 0.0367802 -1.29116 241 -4.66895 0.154147 -1.28939 94 -4.66626 0.176084 -1.2888 124 -4.73567 0.888164 -1.28493 90 -4.64994 0.241413 -1.28467 243 -4.78421 -0.444534 -1.28094 69 -4.85954 1.02543 -1.28066 85 -5.09455 1.0906 -1.28018 28 -4.63008 0.255076 -1.27877 255 -4.71989 0.846759 -1.27807 87 -4.7172 0.861583 -1.27807 93 -4.71875 0.831242 -1.27692 88 -4.76649 -0.427891 -1.27522 83 -4.71002 0.814392 -1.27349 67 -4.75561 -0.374338 -1.27064 72 -4.7487 -0.411366 -1.2695 90 -4.75059 -0.388983 -1.2695 102 -4.69549 0.773833 -1.2672 62 -4.73956 -0.358189 -1.2655 76 -4.73684 -0.343042 -1.26435 80 -4.68277 0.756551 -1.26263 70 -4.67604 0.785631 -1.26206 69 -4.67911 0.718243 -1.25977 74 -4.67683 0.73294 -1.25977 68 -4.67702 0.680327 -1.25748 88 -4.71353 -0.319171 -1.25692 72 -4.70686 -0.303909 -1.25463 66 -4.67473 0.627534 -1.25462 174 -4.6643 0.700883 -1.25462 84 -4.66793 0.649006 -1.25348 177 -4.66397 0.663388 -1.25291 182 -4.69187 -0.26605 -1.24948 85 -4.75692 0.980966 -1.24906 67 -4.7581 0.965645 -1.24851 96 -4.68674 -0.287944 -1.24834 83 -4.68312 -0.25085 -1.24662 92 -4.6501 0.609211 -1.24662 111 -4.65009 0.594347 -1.24605 119 -4.67622 -0.235793 -1.24434 86 -5.05171 -0.524208 -1.24416 47 -4.64493 0.541786 -1.24262 100 -4.66962 -0.213447 -1.24205 105 -4.73847 0.946299 -1.24185 85 -4.63673 0.577755 -1.24147 168 -4.66452 -0.198563 -1.24033 89 -4.66513 -0.183909 -1.24033 78 -4.66687 -0.132604 -1.24033 60 -4.6356 0.55542 -1.24033 115 -4.66451 -0.147215 -1.23976 79 -4.63952 0.5042 -1.23976 77 -4.63709 0.526058 -1.23976 83 -4.65993 -0.169075 -1.23862 56 -4.65846 -0.0811682 -1.23747 73 -4.63474 0.437419 -1.23633 67 -4.72254 0.927804 -1.23631 83 -4.62691 0.458654 -1.23461 68 -4.62545 0.473188 -1.23461 71 -4.62394 0.487717 -1.23461 79 -4.72023 0.888959 -1.23354 102 -4.77743 -0.47805 -1.233 54 -4.64362 -0.0445176 -1.2329 67 -4.62465 0.421747 -1.2329 63 -4.63987 0.0356694 -1.23175 102 -4.70986 0.902378 -1.23132 82 -4.63761 -0.0663492 -1.23118 75 -4.62022 0.40668 -1.23118 72 -5.00534 -0.503755 -1.23092 27 -4.63469 -0.1173 -1.23061 74 -4.63327 -0.0954296 -1.23004 60 -4.63416 -0.0299219 -1.23004 70 -4.63425 -0.000803848 -1.23004 70 -4.63421 0.0210353 -1.23004 81 -4.63231 -0.0153662 -1.22947 69 -4.70598 0.87107 -1.22855 87 -4.61373 0.369561 -1.22832 90 -4.61254 0.384054 -1.22832 80 -4.62578 0.0863584 -1.22775 88 -4.6222 0.0717456 -1.22661 88 -4.60914 0.354593 -1.22661 86 -4.60987 0.31824 -1.22603 72 -4.60885 0.33272 -1.22603 86 -4.61865 0.0498995 -1.22546 101 -4.61644 0.151448 -1.22546 101 -4.75286 -0.452834 -1.22523 74 -4.61192 0.216593 -1.22489 89 -4.90002 1.03183 -1.22455 27 -4.61067 0.20201 -1.22432 94 -4.60735 0.267168 -1.22432 97 -4.69489 0.84624 -1.22412 68 -4.60702 0.238104 -1.22375 92 -4.60625 0.252578 -1.22375 86 -4.89947 1.01563 -1.22349 27 -4.60964 0.122193 -1.22318 93 -4.6003 0.288484 -1.2226 86 -4.75415 0.318112 -1.22246 108 -4.6054 0.136539 -1.22203 101 -4.59746 0.302798 -1.22203 79 -4.60441 0.100312 -1.22146 87 -4.74534 0.384997 -1.22135 96 -4.60062 0.165314 -1.22089 98 -4.59979 0.186991 -1.22089 99 -4.74461 0.36995 -1.22079 96 -4.75644 0.0787569 -1.22024 90 -4.74192 0.354776 -1.21968 97 -4.75125 0.026454 -1.21858 107 -4.7472 0.198052 -1.21858 110 -4.7294 -0.435473 -1.21803 82 -4.74358 0.235245 -1.21802 87 -4.73778 0.332054 -1.21802 82 -4.73262 0.398999 -1.21802 98 -4.67927 0.813219 -1.21802 68 -4.74747 0.0115378 -1.21747 100 -4.74706 0.0637372 -1.21747 91 -4.74624 0.108473 -1.21747 87 -4.74525 0.145746 -1.21747 98 -4.74079 0.212739 -1.21691 77 -4.72359 0.435657 -1.21636 78 -4.74154 0.0413483 -1.21581 90 -4.72118 -0.419711 -1.21526 61 -4.72247 -0.404876 -1.21526 64 -4.73241 0.264562 -1.21525 95 -4.73435 0.182693 -1.2147 87 -4.73311 0.0933713 -1.21359 89 -4.86832 0.985078 -1.21342 26 -4.7294 0.160217 -1.21303 88 -4.72362 0.24924 -1.21248 97 -4.70881 0.449291 -1.21248 93 -4.65775 0.824671 -1.21247 80 -4.88312 0.876738 -1.21183 26 -4.70827 -0.366338 -1.21027 65 -4.65705 0.771888 -1.2097 65 -4.71865 -0.0106102 -1.20915 90 -4.69516 0.470389 -1.20915 92 -4.6527 0.786204 -1.20915 73 -4.87446 0.859323 -1.20865 26 -4.8525 0.965915 -1.20812 26 -4.70525 0.300269 -1.20804 85 -4.65537 0.734133 -1.20748 62 -4.70051 -0.313716 -1.20694 79 -4.70277 0.277886 -1.20693 75 -4.69239 0.418096 -1.20693 90 -4.68601 0.484389 -1.20693 94 -4.64426 0.75487 -1.20527 69 -4.69024 -0.350009 -1.20472 87 -4.69184 -0.327903 -1.20472 91 -4.68604 -0.379306 -1.20417 67 -4.69573 0.129735 -1.20305 83 -4.66868 0.519763 -1.20305 85 -4.64468 0.702653 -1.20305 63 -4.68614 -0.297887 -1.2025 76 -4.66077 0.570841 -1.2025 85 -4.65705 0.585253 -1.20194 91 -4.66534 0.497178 -1.20139 91 -4.64641 0.650773 -1.20139 90 -4.64434 0.665367 -1.20139 117 -4.65938 0.533594 -1.20083 85 -4.63484 0.716108 -1.20083 71 -4.64947 0.599174 -1.20028 93 -4.64566 0.613537 -1.19972 89 -4.64271 0.635423 -1.19972 92 -4.684 -0.0250561 -1.19918 111 -4.63164 0.68589 -1.19862 69 -4.83156 0.890745 -1.19858 124 -4.89002 -0.454006 -1.19806 26 -4.67023 -0.274689 -1.19751 79 -4.64432 0.546732 -1.19695 81 -4.67045 -0.0395836 -1.1953 89 -4.66637 -0.0615186 -1.19419 90 -4.87221 -0.437019 -1.19277 26 -4.65535 -0.229714 -1.19252 62 -4.65982 -0.105333 -1.19252 101 -4.66013 -0.0906929 -1.19252 109 -4.66039 -0.0760532 -1.19252 90 -4.65735 -0.127227 -1.19197 86 -4.8671 -0.382716 -1.19012 26 -4.88212 -0.00733892 -1.19011 26 -4.81328 0.817029 -1.19011 26 -4.64422 -0.258373 -1.18975 54 -4.86803 -0.344353 -1.18959 26 -4.64117 -0.243557 -1.18864 67 -4.64349 -0.141373 -1.18809 66 -4.64031 -0.177754 -1.18754 65 -4.82615 0.656219 -1.18693 26 -4.84857 -0.396682 -1.18535 26 -4.81621 0.685684 -1.18534 26 -4.62951 -0.206424 -1.18476 59 -4.84153 -0.411454 -1.18376 26 -4.62574 -0.155282 -1.1831 101 -4.84192 -0.357932 -1.1827 26 -4.8088 0.669171 -1.18269 26 -4.80149 0.706625 -1.18216 26 -4.79343 0.759378 -1.18216 26 -4.79102 0.774432 -1.18216 26 -4.61862 -0.191338 -1.18144 66 -4.79543 0.721112 -1.1811 25 -4.84548 0.00774384 -1.18005 40 -4.80335 0.637623 -1.18004 25 -4.77905 0.78786 -1.17951 25 -4.75585 0.907337 -1.17898 60 -4.82867 -0.326544 -1.17846 35 -4.753 0.891295 -1.17739 95 -4.80303 0.545606 -1.17686 96 -4.776 0.733447 -1.17633 25 -4.79746 0.560223 -1.1758 69 -4.82101 -0.113606 -1.17369 25 -4.82225 -0.0302916 -1.17369 25 -4.80657 -0.310007 -1.1721 123 -4.81078 -0.136102 -1.17104 25 -4.77755 0.580638 -1.17103 83 -4.8084 -0.151164 -1.17051 25 -4.80977 -0.0982844 -1.17051 25 -4.81005 -0.0831746 -1.17051 25 -4.80654 -0.0604784 -1.16945 25 -4.80212 -0.166102 -1.16892 25 -4.7945 -0.28662 -1.16839 60 -4.7896 -0.271261 -1.1668 53 -4.79513 -0.0453323 -1.16627 25 -4.78179 0.0223222 -1.16256 60 -4.75108 0.524299 -1.16203 59 -4.74319 0.591411 -1.16203 53 -4.77039 -0.232718 -1.16097 25 -4.77109 -0.21773 -1.16097 25 -4.73366 0.605288 -1.15991 29 -4.76495 -0.180003 -1.15885 25 -4.76019 -0.202313 -1.15779 25 -4.75663 0.0370138 -1.15567 95 -4.75876 1.00509 -1.15325 58 -4.71723 -0.252697 -1.14667 27 -4.73728 0.985152 -1.14652 91 -4.69024 0.494878 -1.14454 70 -4.74913 0.863782 -1.14341 174 -4.74171 0.893256 -1.14289 101 -4.74069 0.877672 -1.14186 160 -4.6611 0.47683 -1.13606 101 -4.69639 0.953837 -1.13409 86 -4.65441 0.44656 -1.13341 105 -4.65106 0.46098 -1.13288 106 -4.65327 0.394836 -1.13182 98 -4.6474 0.372245 -1.12971 102 -4.69983 0.832251 -1.12891 105 -4.65221 0.240491 -1.12865 99 -4.63918 0.42295 -1.12865 105 -4.68428 0.905613 -1.12839 43 -4.65614 0.0576271 -1.12812 109 -4.64989 0.159844 -1.12706 105 -4.63473 0.407835 -1.12706 114 -4.64744 0.174367 -1.12653 125 -4.64625 0.203564 -1.12653 110 -4.64373 0.254639 -1.12653 126 -4.64065 0.305683 -1.12653 112 -4.63811 0.342121 -1.12653 120 -4.67092 0.933553 -1.12632 59 -4.63531 0.327255 -1.12547 112 -4.63317 0.356372 -1.12547 112 -4.63946 0.225145 -1.12494 137 -4.73465 -0.465658 -1.12477 45 -4.63916 0.188611 -1.12441 134 -4.63389 0.290577 -1.12441 112 -4.64051 0.0719282 -1.12388 154 -4.6398 0.108372 -1.12388 125 -4.63903 0.137523 -1.12388 114 -4.63286 0.275893 -1.12388 130 -4.63751 0.122886 -1.12335 125 -4.66054 0.916339 -1.12269 73 -4.63062 0.0862739 -1.12123 151 -4.77457 1.02761 -1.11962 11 -4.70726 -0.447878 -1.11701 66 -4.7048 -0.432713 -1.11597 57 -4.67909 0.640557 -1.11544 164 -4.69332 -0.409288 -1.11234 96 -4.66173 0.653194 -1.1113 91 -4.65455 0.689514 -1.11078 79 -4.74373 1.0052 -1.11056 40 -4.64521 0.673288 -1.10767 73 -4.64089 0.702462 -1.10767 82 -4.62051 0.8037 -1.10664 53 -4.6638 -0.391784 -1.10406 70 -4.66205 -0.340026 -1.1025 80 -4.66409 -0.310727 -1.1025 88 -4.65346 -0.376131 -1.10095 67 -4.65731 -0.324942 -1.10095 89 -4.65269 -0.36135 -1.10043 75 -4.61078 0.720298 -1.10042 56 -4.60014 0.785408 -1.10042 73 -4.7098 0.959186 -1.09949 55 -4.60044 0.748356 -1.09887 75 -4.77903 -0.475231 -1.09849 36 -4.70297 0.973173 -1.09848 55 -4.65008 -0.287703 -1.09836 88 -4.59704 0.733018 -1.09731 65 -4.61209 0.617017 -1.0968 86 -4.59044 0.761582 -1.0968 69 -4.60133 0.56425 -1.09214 79 -4.59194 0.592441 -1.09058 85 -4.60636 0.447736 -1.09006 255 -4.59348 0.5487 -1.08955 71 -4.61918 -0.169206 -1.08852 106 -4.61968 -0.154695 -1.08852 87 -4.60523 0.396595 -1.08851 255 -4.61883 -0.118347 -1.088 88 -4.61629 -0.140041 -1.08748 87 -4.61195 0.244314 -1.08748 255 -4.60855 -0.270366 -1.08696 54 -4.61562 -0.0892275 -1.08696 92 -4.61405 -0.0674372 -1.08644 96 -4.58613 0.511387 -1.08644 87 -4.57844 0.576168 -1.08644 75 -4.61145 -0.103619 -1.08592 93 -4.61246 -0.0384178 -1.08592 100 -4.61255 -0.0239281 -1.08592 102 -4.6126 0.0123002 -1.08592 99 -4.58258 0.525583 -1.08592 84 -4.66451 0.91919 -1.0859 59 -4.60475 -0.233836 -1.08541 72 -4.61025 0.063 -1.08541 255 -4.60167 -0.255415 -1.08489 65 -4.60482 -0.190337 -1.08489 65 -4.60845 -0.0528432 -1.08489 96 -4.65591 0.932668 -1.08439 61 -4.60682 -0.0021555 -1.08437 100 -4.72531 -0.447718 -1.0839 16 -4.66209 0.880679 -1.08338 48 -4.60288 0.0267884 -1.08333 100 -4.59069 -0.204126 -1.08126 89 -4.67938 0.709904 -1.08037 88 -4.58424 -0.218238 -1.07971 77 -4.70874 -0.41642 -1.07886 69 -4.67139 0.72368 -1.07886 68 -4.64221 0.891941 -1.07885 57 -4.7912 1.02584 -1.07826 43 -4.70355 -0.430879 -1.07786 62 -4.70293 -0.393623 -1.07685 78 -4.67141 0.671129 -1.07684 91 -4.65456 0.743474 -1.07533 63 -4.57179 0.0483285 -1.07505 181 -4.65863 0.691661 -1.07433 98 -4.63461 0.83765 -1.07432 48 -4.7754 1.00688 -1.0734 51 -4.65829 0.639301 -1.07231 82 -4.65626 0.653933 -1.07231 85 -4.623 0.858027 -1.07231 58 -4.68484 -0.377399 -1.07182 42 -4.76868 0.982077 -1.07049 52 -4.63312 0.754875 -1.0703 58 -4.62454 0.805772 -1.0703 53 -4.64782 0.600625 -1.06829 92 -4.61875 0.7823 -1.06778 41 -4.64585 0.585517 -1.06728 93 -4.64208 0.614696 -1.06728 89 -4.65029 0.497196 -1.06577 255 -4.64624 0.533704 -1.06577 51 -4.63806 0.569685 -1.06476 75 -4.60104 0.816459 -1.06476 53 -4.6497 0.445449 -1.06426 255 -4.65622 -0.345834 -1.06376 59 -4.63836 0.481111 -1.06225 255 -4.62533 0.545922 -1.06074 80 -4.65291 -0.15506 -1.06024 70 -4.65338 -0.140441 -1.06024 82 -4.63699 0.414759 -1.06023 255 -4.72606 0.958086 -1.05882 52 -4.6358 -0.359073 -1.05873 60 -4.63819 0.326846 -1.05872 255 -4.63355 0.363102 -1.05822 255 -4.63402 -0.271222 -1.05672 67 -4.63378 0.275326 -1.05671 255 -4.6266 0.377153 -1.05671 255 -4.57922 0.760575 -1.05671 84 -4.63832 -0.125489 -1.05621 90 -4.62788 -0.307374 -1.05571 56 -4.62882 -0.292834 -1.05571 67 -4.62303 -0.321664 -1.0547 72 -4.62518 -0.256183 -1.0542 67 -4.62754 0.209301 -1.0542 255 -4.62575 0.245638 -1.0542 255 -4.7081 0.939173 -1.05347 79 -4.62531 -0.103405 -1.05269 94 -4.6258 0.0782627 -1.05269 255 -4.61823 -0.24129 -1.05219 63 -4.6206 -0.190498 -1.05219 62 -4.61611 -0.204862 -1.05118 64 -4.61731 -0.175854 -1.05118 79 -4.70294 0.915175 -1.05104 58 -4.60964 -0.21912 -1.04967 65 -4.61216 0.157713 -1.04967 255 -4.61206 -0.0886883 -1.04917 82 -4.60346 0.295137 -1.04916 255 -4.74986 -0.476348 -1.04667 17 -4.59898 -0.0596101 -1.04564 95 -4.6829 0.896145 -1.0452 62 -4.59683 -0.0740378 -1.04514 91 -4.43398 0.4812 -1.045 255 -4.68378 0.88108 -1.04472 67 -4.59534 -0.0379276 -1.04463 102 -4.74241 -0.452985 -1.04424 20 -4.68406 0.858322 -1.04374 72 -4.59156 -0.0234927 -1.04363 111 -4.58176 0.0412762 -1.04111 134 -4.73164 -0.421899 -1.04084 75 -4.58 -0.00911151 -1.04061 103 -4.57999 0.0124721 -1.04061 114 -4.578 0.0268383 -1.0401 99 -4.66571 0.839935 -1.0384 86 -4.4112 0.457853 -1.03827 255 -4.41019 0.408822 -1.03671 255 -4.71098 -0.434872 -1.03597 66 -4.40761 0.394644 -1.03568 255 -4.40783 0.345876 -1.03464 255 -4.39916 0.442718 -1.03464 255 -4.70589 -0.404556 -1.03403 86 -4.65112 0.822329 -1.03402 84 -4.41415 0.172432 -1.03361 255 -4.40606 0.31792 -1.03361 255 -4.40504 0.33176 -1.03361 255 -4.4023 0.366347 -1.03361 255 -4.40456 0.28308 -1.03257 255 -4.64603 0.806428 -1.03208 77 -4.40957 0.137612 -1.03205 255 -4.40686 0.206857 -1.03205 255 -4.40472 0.248381 -1.03205 255 -4.40172 0.296796 -1.03205 255 -4.80462 1.05002 -1.03161 13 -4.40157 0.269028 -1.03154 255 -4.69615 -0.38137 -1.03111 88 -4.64595 0.7839 -1.0311 91 -4.40528 0.075197 -1.0305 255 -4.40455 0.109793 -1.0305 255 -4.40419 0.123629 -1.0305 255 -4.402 0.185879 -1.0305 255 -4.39654 0.220275 -1.02946 255 -4.64311 0.753495 -1.02916 92 -4.39908 0.0958632 -1.02895 255 -4.39536 0.157984 -1.02843 255 -4.64086 0.730732 -1.0277 100 -4.68186 -0.365321 -1.02722 97 -4.68195 0.364224 -1.02722 255 -4.63306 0.766852 -1.02721 91 -4.63929 0.715578 -1.02673 99 -4.67718 -0.350144 -1.02576 95 -4.63986 0.685869 -1.02576 94 -4.67491 -0.327808 -1.02479 104 -4.63384 0.699884 -1.02478 86 -4.49025 0.500611 -1.0245 255 -4.77751 1.02821 -1.02414 42 -4.51571 0.0615912 -1.024 255 -4.67111 0.326569 -1.02381 255 -4.66413 0.414553 -1.02381 255 -4.67114 0.297102 -1.02333 255 -4.66818 -0.312557 -1.02285 92 -4.63151 0.662414 -1.02284 99 -4.6595 0.377326 -1.02187 255 -4.65156 0.465083 -1.02187 255 -4.62395 0.646569 -1.02041 108 -4.65753 -0.297085 -1.01993 91 -4.6565 -0.282324 -1.01944 106 -4.65275 0.310708 -1.01895 255 -4.62311 0.609505 -1.01895 110 -4.65192 0.178794 -1.01701 255 -4.65134 0.193407 -1.01701 255 -4.63895 0.390444 -1.01701 255 -4.64502 -0.244952 -1.01604 105 -4.61345 0.593557 -1.01603 85 -4.60865 0.629773 -1.01603 107 -4.64779 0.127507 -1.01555 255 -4.64689 0.156707 -1.01555 255 -4.64149 0.273434 -1.01555 255 -4.61604 0.557084 -1.01555 94 -4.64039 0.258753 -1.01506 255 -4.64099 -0.20817 -1.01458 110 -4.64476 0.0909453 -1.01458 255 -4.63924 0.244084 -1.01458 255 -4.63275 0.346038 -1.01458 255 -4.61559 0.527651 -1.01457 114 -4.64154 0.141962 -1.01409 255 -4.63454 -0.258949 -1.01361 108 -4.61006 0.541718 -1.0136 99 -4.61144 0.512537 -1.01311 159 -4.60181 0.577446 -1.01263 118 -4.63193 -0.19313 -1.01215 115 -4.62446 -0.229183 -1.01069 100 -4.62796 -0.141979 -1.01069 97 -4.44159 0.445486 -1.0104 255 -4.72837 0.978531 -1.01014 54 -4.6239 -0.0618854 -1.00923 104 -4.621 -0.112665 -1.00874 99 -4.61701 -0.177894 -1.00826 115 -4.61481 -0.126988 -1.00729 99 -4.61566 -0.0907409 -1.00729 104 -4.61399 -0.0761968 -1.0068 106 -4.78786 -0.491288 -1.00641 30 -4.71007 0.990097 -1.0064 61 -4.42954 0.409075 -1.00638 255 -4.61004 -0.155828 -1.00631 120 -4.60684 -0.0109003 -1.00485 111 -4.60668 0.0397531 -1.00485 122 -4.78164 -0.475518 -1.00454 10 -4.6049 0.010815 -1.00437 117 -4.43677 0.185631 -1.00437 255 -4.60086 -0.0397616 -1.00339 110 -4.60097 -0.0253083 -1.00339 116 -4.42046 0.380172 -1.00336 255 -4.59708 0.0252831 -1.00242 123 -4.42051 0.331233 -1.00235 255 -4.41824 0.247376 -1.00034 255 -4.42154 0.122307 -0.999837 255 -4.7618 -0.458557 -0.999409 10 -4.68764 0.954508 -0.999398 66 -4.41462 0.0873789 -0.997824 255 -4.41432 0.101246 -0.997824 255 -4.4056 0.295237 -0.997822 255 -4.41025 0.170486 -0.99732 255 -4.68546 0.915746 -0.997063 70 -4.88868 1.0621 -0.995392 44 -4.40038 0.218537 -0.995306 255 -4.40179 0.135487 -0.994804 255 -4.67304 0.928514 -0.994729 58 -4.66542 0.896492 -0.991461 70 -4.70898 -0.438842 -0.986335 20 -4.64748 0.855111 -0.985391 77 -4.63904 0.868603 -0.983991 72 -4.49606 0.478943 -0.983456 255 -4.63485 0.837656 -0.981656 80 -4.63555 0.82274 -0.98119 89 -4.48789 0.463875 -0.981025 255 -4.68773 -0.414719 -0.980733 62 -5.21093 1.13872 -0.978876 33 -4.68126 -0.399371 -0.978865 68 -4.68055 -0.384514 -0.978398 78 -4.68231 -0.362452 -0.978398 82 -4.48112 0.413499 -0.978108 255 -4.4798 0.427573 -0.978108 255 -4.81917 1.02365 -0.978008 65 -4.62271 0.782954 -0.976521 83 -4.62023 0.797473 -0.976521 78 -4.62104 0.745342 -0.974654 94 -4.66597 -0.346542 -0.974195 91 -4.6221 0.70085 -0.973253 99 -4.61173 0.766123 -0.973253 85 -4.61795 0.715061 -0.972786 89 -4.79753 1.00344 -0.972213 71 -4.65539 -0.331119 -0.971394 92 -4.6569 -0.309177 -0.971394 109 -4.60801 0.728307 -0.970918 110 -4.61015 0.661943 -0.969051 107 -4.60805 0.676424 -0.969051 103 -4.6471 -0.279277 -0.968592 125 -4.61028 0.647176 -0.968585 114 -4.64426 -0.293762 -0.968125 126 -4.64601 -0.264576 -0.968125 103 -4.85312 -0.51051 -0.967321 51 -4.64406 -0.22791 -0.967191 121 -4.63943 -0.242318 -0.966257 112 -4.60365 0.624084 -0.96625 116 -4.60366 0.609352 -0.965784 126 -4.4494 0.0532638 -0.965469 255 -4.44522 0.199978 -0.965468 255 -4.63698 -0.213006 -0.965323 134 -4.60363 0.594626 -0.965317 138 -4.4466 0.102149 -0.964982 255 -4.44263 0.213859 -0.964981 255 -4.44522 0.074187 -0.964496 255 -4.60252 0.572424 -0.964383 147 -4.6321 -0.190945 -0.963922 146 -4.60237 0.557717 -0.963916 154 -4.63073 -0.176329 -0.963455 154 -4.63127 -0.16178 -0.963455 157 -4.59831 0.542539 -0.962516 161 -4.7586 0.97994 -0.962406 65 -4.6242 -0.139763 -0.961587 170 -4.59695 0.520407 -0.961582 176 -4.75592 0.963854 -0.961069 106 -4.62073 -0.125152 -0.960654 167 -4.61721 -0.110563 -0.95972 176 -4.61364 -0.0959988 -0.958786 185 -4.58697 0.50462 -0.958781 187 -4.74892 0.939225 -0.958394 94 -4.58812 0.475579 -0.958314 232 -4.60627 -0.0741744 -0.956918 195 -4.58257 0.453143 -0.956447 227 -4.60259 -0.0596755 -0.955984 199 -4.58967 0.323115 -0.955514 233 -4.58146 0.423962 -0.955513 224 -4.58873 0.308554 -0.955047 232 -4.58147 0.402186 -0.955047 225 -4.58907 0.272378 -0.954581 232 -4.58819 0.286794 -0.954581 234 -4.58312 0.358826 -0.95458 230 -4.58197 0.373223 -0.95458 227 -4.59514 -0.0235286 -0.954116 213 -4.58282 0.337073 -0.954113 231 -4.5743 0.437764 -0.954113 223 -4.56921 0.488033 -0.954112 238 -4.59303 -0.045175 -0.953649 209 -4.59324 -0.00910052 -0.953649 218 -4.57496 0.387091 -0.953179 221 -4.58918 0.0413473 -0.952715 226 -4.58902 0.0557634 -0.952715 229 -4.72789 0.904385 -0.952154 99 -4.58547 0.0052767 -0.951782 218 -4.58539 0.0268847 -0.951781 222 -4.58494 0.0700997 -0.951781 233 -4.58456 0.0917035 -0.951781 236 -4.57825 0.25724 -0.951779 236 -4.57747 0.235551 -0.951313 234 -4.71928 0.918146 -0.950816 90 -4.78179 -0.47984 -0.950382 29 -4.57042 0.220751 -0.949445 238 -4.71675 0.879319 -0.948588 94 -4.56481 0.105547 -0.947112 238 -4.76776 -0.463223 -0.946815 67 -4.5575 0.2057 -0.946177 240 -4.76531 -0.447856 -0.945924 82 -4.55862 0.1197 -0.945711 240 -4.55229 0.191103 -0.944777 240 -4.70489 0.846653 -0.944576 116 -4.69645 0.860406 -0.943239 104 -4.7037 0.808396 -0.942793 99 -4.69792 0.830222 -0.942348 119 -4.74796 -0.423557 -0.941466 104 -4.70099 0.777595 -0.941011 103 -4.69852 0.79236 -0.941011 131 -4.70117 0.739773 -0.939674 114 -4.52886 0.140111 -0.938707 241 -4.69576 0.723853 -0.937891 121 -4.69112 0.753343 -0.93789 110 -4.72985 -0.406861 -0.937008 114 -4.51623 0.168063 -0.935906 255 -4.68754 0.700053 -0.935216 128 -4.90393 1.05953 -0.935079 25 -4.51285 0.15372 -0.934972 255 -4.71751 -0.390798 -0.933888 117 -4.71849 -0.35358 -0.933442 129 -4.68411 0.669526 -0.933433 145 -4.68199 0.684239 -0.933433 131 -4.71867 -0.323782 -0.932996 151 -4.71347 -0.368076 -0.93255 131 -4.71569 -0.338453 -0.93255 105 -4.68335 0.646934 -0.932542 159 -4.71042 -0.300866 -0.930767 124 -4.70745 -0.28581 -0.929875 134 -4.70638 -0.270897 -0.929429 134 -4.66992 0.615299 -0.92853 180 -4.66796 0.629965 -0.92853 167 -4.66989 0.600387 -0.928085 181 -4.69788 -0.248147 -0.9272 133 -4.69934 -0.218625 -0.9272 142 -4.69474 -0.233172 -0.926308 135 -4.67099 0.526131 -0.926302 95 -4.68669 -0.195833 -0.924079 144 -4.85728 1.02524 -0.923688 24 -4.68533 -0.181022 -0.923633 149 -4.68638 -0.151579 -0.923633 163 -4.65683 0.546838 -0.923628 97 -4.68393 -0.166222 -0.923187 155 -4.67248 0.341294 -0.922738 82 -4.65711 0.509843 -0.922736 138 -4.6633 0.406996 -0.921845 100 -4.6548 0.49482 -0.921845 126 -4.64734 0.560573 -0.921844 110 -4.6773 -0.129172 -0.921404 159 -4.66723 0.304124 -0.920955 84 -4.67378 -0.114359 -0.920512 155 -4.67493 -0.0482763 -0.920512 124 -4.67517 -0.0115585 -0.920512 91 -4.66622 0.289349 -0.920509 81 -4.65873 0.391886 -0.920508 94 -4.67217 -0.0996235 -0.920067 175 -4.67259 -0.0776056 -0.920066 201 -4.66516 0.274585 -0.920064 82 -4.65972 0.355148 -0.920063 90 -4.63588 0.574026 -0.919615 147 -4.66926 -0.0261806 -0.919175 94 -4.66778 0.120498 -0.919173 82 -4.64968 0.42796 -0.919171 99 -4.64831 0.442564 -0.919171 113 -4.64469 0.479057 -0.91917 137 -4.66366 0.186405 -0.918727 95 -4.65216 0.376662 -0.918725 90 -4.66454 0.0911123 -0.918282 86 -4.66227 0.171691 -0.918281 90 -4.64302 0.456806 -0.918279 109 -4.66316 0.0544618 -0.917836 85 -4.66297 0.0691114 -0.917836 83 -4.66131 0.142345 -0.917836 83 -4.65889 0.156934 -0.91739 87 -4.65431 0.259342 -0.917389 85 -4.65916 -0.062665 -0.916946 106 -4.65426 0.222697 -0.916944 83 -4.65354 0.237317 -0.916943 81 -4.8311 0.987872 -0.916516 24 -4.65763 0.00321506 -0.9165 85 -4.65644 0.105632 -0.916499 83 -4.65299 0.207999 -0.916498 89 -4.64629 0.324862 -0.916497 82 -4.90181 -0.499077 -0.915684 24 -4.64966 0.0397723 -0.914716 81 -4.81459 1.00019 -0.913563 24 -4.64395 0.0178704 -0.913379 85 -4.8508 -0.478771 -0.904293 24 -4.85228 -0.46353 -0.904293 24 -4.83266 0.605615 -0.903441 39 -4.77442 0.952529 -0.903016 29 -4.82007 0.627068 -0.901331 64 -4.83103 -0.438662 -0.89923 23 -4.76014 0.934043 -0.89922 29 -4.81938 0.534751 -0.898801 107 -4.81292 0.556984 -0.897957 89 -4.82206 0.450825 -0.897536 77 -4.80351 0.586472 -0.896691 30 -4.74864 0.900745 -0.895423 31 -4.74387 0.915279 -0.895001 53 -4.80701 0.464581 -0.894582 78 -4.76569 0.757373 -0.893736 23 -4.79384 0.516529 -0.892894 84 -4.80458 0.380634 -0.892474 99 -4.75382 0.793781 -0.89247 23 -4.74873 0.823635 -0.89247 23 -4.79926 -0.42076 -0.892058 23 -4.81133 -0.247134 -0.892056 23 -4.75558 0.771047 -0.892049 23 -4.73747 0.875433 -0.892048 56 -4.807 0.289751 -0.891631 119 -4.80606 0.30485 -0.891631 82 -4.80242 0.357676 -0.89163 91 -4.73828 0.860186 -0.891626 60 -4.79557 0.395041 -0.890786 74 -4.7436 0.807358 -0.890783 23 -4.80962 0.0477714 -0.890367 85 -4.80358 0.0627728 -0.889101 96 -4.79701 1.03461 -0.888806 19 -4.80192 0.0325669 -0.888679 87 -4.79694 0.221063 -0.888678 101 -4.79371 0.205803 -0.887834 67 -4.79032 0.273548 -0.887834 102 -4.77675 0.431202 -0.887411 105 -4.77523 -0.403677 -0.886573 31 -4.7647 0.475384 -0.885723 53 -4.7624 0.497831 -0.885723 37 -4.71211 0.839994 -0.885298 32 -4.77734 -0.260619 -0.884885 23 -4.76672 -0.387933 -0.884464 65 -4.7811 0.114951 -0.88446 86 -4.78072 0.129972 -0.88446 96 -4.78005 0.152499 -0.884459 109 -4.97086 1.09314 -0.884344 37 -4.77215 -0.282917 -0.884041 23 -4.75674 0.338998 -0.881505 98 -4.75662 -0.312074 -0.881088 47 -4.75757 -0.297129 -0.881088 28 -4.75095 -0.364218 -0.880667 68 -4.71049 0.717956 -0.880658 29 -4.75544 -0.229593 -0.879822 73 -4.74368 0.405499 -0.879817 80 -4.75883 -0.0427122 -0.879398 57 -4.75774 1.00295 -0.879304 46 -4.74427 -0.34876 -0.878979 68 -4.74938 0.233571 -0.878552 57 -4.74218 0.322904 -0.87813 53 -4.74733 -0.191895 -0.877712 29 -4.75017 0.0991078 -0.87771 78 -4.74775 0.181166 -0.877709 109 -4.7077 0.626894 -0.877284 54 -4.74729 0.00952761 -0.876867 82 -4.74051 -0.214033 -0.876447 50 -4.74334 -0.0203054 -0.876023 35 -4.74069 0.0839574 -0.8756 124 -4.69279 0.677459 -0.875596 58 -4.69063 0.692198 -0.875596 30 -4.68505 0.729016 -0.875596 27 -4.73913 -0.0575313 -0.87518 74 -4.69603 0.640306 -0.875174 31 -4.73752 -0.00542792 -0.874757 65 -4.69102 0.662145 -0.874752 79 -4.81383 -0.491057 -0.874357 20 -4.73018 0.981799 -0.872693 53 -4.72446 -0.176235 -0.872649 29 -4.71413 -0.331828 -0.872229 57 -4.71895 0.25421 -0.872224 89 -4.73006 0.943129 -0.871041 69 -4.72556 0.96541 -0.871041 67 -4.71937 -0.0722292 -0.870961 59 -4.71118 0.164746 -0.869694 194 -4.71762 0.925335 -0.867736 78 -4.70153 -0.0868266 -0.867164 60 -4.89173 1.05115 -0.866871 22 -4.69834 -0.13847 -0.866743 32 -4.69568 -0.160553 -0.866321 29 -4.71281 0.909069 -0.866083 84 -4.69093 -0.123546 -0.865055 77 -4.69129 -0.108809 -0.865055 81 -4.76864 -0.47106 -0.864441 21 -4.69669 0.867886 -0.861125 84 -4.69394 0.882636 -0.861125 100 -4.69361 0.852109 -0.859886 60 -4.69241 0.836694 -0.85906 73 -4.74284 -0.453322 -0.858657 23 -4.69359 0.783802 -0.857408 117 -4.84712 1.02538 -0.856944 45 -4.71302 0.613032 -0.856169 120 -4.7339 -0.399918 -0.855764 87 -4.688 0.745135 -0.854929 51 -4.677 0.811334 -0.854928 58 -4.72677 -0.414242 -0.854525 73 -4.7355 -0.265448 -0.85411 69 -4.70614 0.589652 -0.854104 148 -4.7263 -0.346919 -0.853285 58 -4.71698 -0.43575 -0.852872 72 -4.72148 -0.38386 -0.852872 69 -4.72303 -0.309373 -0.852045 63 -4.72397 -0.294534 -0.852045 90 -4.72292 -0.279564 -0.851631 66 -4.71811 0.351643 -0.851627 80 -4.72748 0.128957 -0.851215 111 -4.72624 0.0992218 -0.850802 105 -4.719 0.202977 -0.849975 88 -4.66709 0.726917 -0.849971 81 -4.72003 0.11396 -0.849563 98 -4.68001 0.623868 -0.849559 72 -4.71399 -0.226988 -0.849152 176 -4.65857 0.755622 -0.849144 72 -4.70934 -0.241575 -0.848326 115 -4.702 -0.330148 -0.847913 60 -4.71295 0.0768004 -0.84791 133 -4.80897 0.977666 -0.847413 61 -4.69593 -0.359364 -0.847087 59 -4.87959 -0.502397 -0.847027 46 -4.7048 0.165445 -0.84667 138 -4.66444 0.63679 -0.846666 64 -4.81937 0.89333 -0.846222 168 -4.68593 0.386437 -0.845429 86 -4.82045 0.854395 -0.845031 83 -4.68575 0.36421 -0.845016 95 -5.00985 1.07405 -0.84468 68 -4.81445 0.876739 -0.844634 144 -4.79089 0.99745 -0.844633 68 -4.66326 0.569654 -0.844601 113 -4.69356 0.150353 -0.844191 102 -4.64336 0.700978 -0.844187 66 -4.69021 -0.188794 -0.843781 63 -4.63972 0.68556 -0.842947 73 -4.65786 0.531955 -0.842535 90 -4.65531 0.553899 -0.842535 69 -4.66581 0.436565 -0.842123 95 -4.66297 0.465871 -0.842123 75 -4.68079 0.179455 -0.841712 143 -4.66586 0.41441 -0.84171 97 -4.63604 0.670174 -0.841708 87 -4.68203 0.0470457 -0.8413 121 -4.65527 0.502081 -0.841296 102 -4.85262 -0.476679 -0.84107 45 -4.65173 0.5165 -0.840883 104 -4.77938 0.955844 -0.840662 20 -4.67629 0.0323294 -0.84006 92 -4.67599 0.0617109 -0.84006 98 -4.67411 -0.0557827 -0.839648 95 -4.67157 -0.0924401 -0.839235 89 -4.65077 0.449978 -0.839231 86 -4.64709 0.48649 -0.83923 87 -4.62649 0.654027 -0.839229 120 -4.77467 0.939272 -0.839074 17 -4.65349 0.398657 -0.838818 80 -4.66839 -0.0410128 -0.838408 97 -4.66853 -0.0190145 -0.838408 92 -4.66857 -0.00434768 -0.838408 75 -4.66341 -0.172892 -0.837996 78 -4.8445 -0.391585 -0.837893 92 -4.66465 0.0103324 -0.837582 85 -4.66217 -0.0702234 -0.837169 97 -4.82369 -0.428155 -0.834319 47 -4.82811 -0.375091 -0.834318 78 -4.77102 0.829898 -0.834309 64 -4.82037 -0.443139 -0.833922 55 -4.63327 0.331162 -0.833447 124 -4.8198 -0.404959 -0.833127 71 -4.8131 -0.457754 -0.832731 56 -4.81218 0.467355 -0.832724 116 -4.63851 -0.157236 -0.832625 102 -4.63605 -0.106114 -0.831798 81 -4.63231 0.214305 -0.831796 127 -4.63374 -0.120615 -0.831385 144 -4.81418 -0.351279 -0.831141 43 -4.63138 -0.135104 -0.830972 126 -4.62184 0.228427 -0.82973 183 -4.6211 0.242947 -0.82973 130 -4.80259 -0.320185 -0.828361 91 -4.78924 0.480204 -0.828355 110 -4.60695 0.314889 -0.827663 182 -4.60643 0.293064 -0.82725 83 -4.60231 0.263812 -0.826011 83 -4.73307 0.807759 -0.82597 19 -4.91318 1.03772 -0.824933 86 -4.59365 0.277841 -0.824358 122 -4.72767 0.768612 -0.823587 16 -4.7233 0.783129 -0.82319 17 -4.77418 -0.333508 -0.822802 64 -4.97777 -0.529579 -0.821907 55 -4.76295 -0.295227 -0.820022 40 -4.76552 -0.250326 -0.820021 66 -4.7619 -0.280159 -0.819624 69 -4.76276 -0.265196 -0.819624 60 -4.71072 0.750565 -0.819616 35 -4.76479 0.116674 -0.818827 95 -4.7593 0.168897 -0.818032 141 -4.70452 0.72681 -0.817631 64 -4.73699 0.407096 -0.816442 83 -4.74511 -0.226953 -0.815653 84 -4.86989 1.00489 -0.81544 88 -4.74504 0.183243 -0.815252 97 -4.70473 0.643759 -0.815249 84 -4.87225 0.973518 -0.814681 116 -4.69687 0.657689 -0.814057 83 -4.74008 0.078686 -0.813665 132 -4.86339 0.987677 -0.813541 60 -4.68355 0.70838 -0.812866 68 -4.73013 -0.21143 -0.812476 43 -4.73393 0.0934277 -0.812473 89 -4.71152 0.3824 -0.810883 95 -4.69606 0.522595 -0.810484 62 -4.67627 0.67719 -0.810483 80 -4.6815 0.625463 -0.810086 106 -4.71706 -0.196076 -0.809696 40 -4.71738 0.130087 -0.809296 81 -4.69418 0.485061 -0.809293 62 -4.91304 -0.506738 -0.808996 77 -4.67856 0.602611 -0.808895 91 -4.66444 0.69039 -0.808498 97 -4.70813 -0.173537 -0.80771 24 -4.70555 0.233355 -0.807707 55 -4.67266 0.58689 -0.807307 92 -4.70538 0.0261712 -0.806517 100 -4.69342 0.336318 -0.806515 84 -4.67821 0.505626 -0.806513 48 -4.66865 0.571461 -0.806116 67 -4.83093 0.949729 -0.805947 81 -4.70153 -0.00341309 -0.805723 89 -4.70151 0.0113585 -0.805723 98 -4.6691 0.534309 -0.805322 81 -4.69697 -0.0772169 -0.804929 95 -4.66545 0.548734 -0.804924 57 -4.67582 0.431128 -0.804528 77 -4.69279 -0.0919187 -0.804135 70 -4.69352 -0.0403132 -0.804135 83 -4.69141 -0.0550461 -0.803738 83 -4.67129 0.415882 -0.803337 68 -4.68318 -0.158028 -0.802547 80 -4.68567 0.0406747 -0.802546 84 -4.87945 -0.487601 -0.80216 67 -4.83389 0.824827 -0.80215 188 -4.68382 -0.0255686 -0.802149 77 -4.67778 -0.143167 -0.801356 104 -4.66554 0.282623 -0.800161 147 -4.67056 -0.120963 -0.799767 136 -4.80154 0.905042 -0.798732 45 -4.66406 0.142989 -0.798574 63 -4.65485 0.2966 -0.798176 61 -4.66191 0.062309 -0.79778 61 -4.64628 0.362047 -0.797381 100 -4.85434 -0.461851 -0.796843 45 -4.85769 -0.377585 -0.796083 156 -4.64591 0.20812 -0.795396 177 -4.85354 -0.354229 -0.794944 80 -4.78503 0.886481 -0.794934 57 -4.7755 0.915807 -0.794174 19 -4.63871 0.193154 -0.793808 101 -4.78142 0.862568 -0.793415 74 -4.78481 0.832183 -0.793036 49 -4.63239 0.243918 -0.793013 84 -4.62848 0.30938 -0.793013 93 -4.6259 0.345722 -0.793013 77 -4.62769 0.258229 -0.792219 77 -4.78785 0.778607 -0.791897 179 -4.7718 0.79147 -0.789239 255 -4.81735 -0.389469 -0.788488 90 -4.80496 -0.441651 -0.78697 19 -4.78068 0.639444 -0.786581 108 -4.80046 -0.426003 -0.78583 21 -4.80763 -0.335446 -0.78583 72 -4.75145 0.757589 -0.784302 61 -4.79608 0.268959 -0.782787 103 -4.93132 1.06199 -0.782087 25 -4.78496 0.291014 -0.780888 103 -4.78317 -0.212955 -0.779753 58 -4.76721 -0.400227 -0.778995 64 -4.76655 -0.302263 -0.777475 133 -4.73687 0.611133 -0.777468 140 -4.76362 -0.317096 -0.777095 55 -4.76679 -0.227149 -0.776715 255 -4.98877 -0.510984 -0.776672 65 -4.92556 0.931727 -0.7763 65 -4.73096 0.595312 -0.775949 117 -4.90166 1.03128 -0.775575 11 -4.70642 0.72795 -0.774808 78 -4.72379 0.556821 -0.77367 117 -4.72111 0.579075 -0.77367 113 -4.71245 0.645758 -0.77367 103 -4.70507 0.697534 -0.773669 88 -4.74802 -0.248588 -0.773297 255 -4.70456 0.659773 -0.77253 69 -4.69702 0.71146 -0.77253 82 -4.71575 0.540913 -0.771772 119 -4.90477 0.90374 -0.771597 172 -4.89367 0.94147 -0.770873 82 -4.73154 -0.262547 -0.770259 255 -4.71868 0.436406 -0.770254 102 -4.72046 0.36937 -0.769495 125 -4.71266 0.458278 -0.769494 91 -4.72481 -0.277033 -0.76912 239 -4.70924 0.472896 -0.769114 110 -4.68496 0.672135 -0.769113 125 -4.7135 0.406118 -0.768735 110 -4.70578 0.487495 -0.768734 107 -4.72781 -0.106081 -0.768359 104 -4.69985 0.524232 -0.768354 105 -4.94845 -0.436506 -0.76799 143 -4.72223 -0.0910814 -0.76722 96 -4.70753 0.383307 -0.767216 106 -4.70437 0.420268 -0.767216 104 -4.69641 0.501487 -0.767215 98 -4.93748 -0.490338 -0.766905 57 -4.7194 -0.128103 -0.76684 128 -4.72098 -0.0391273 -0.76684 94 -4.86754 0.952186 -0.766532 95 -4.71516 -0.194715 -0.766461 90 -4.7191 0.0276152 -0.766459 95 -4.71691 -0.053891 -0.76608 105 -4.7172 0.0127949 -0.76608 129 -4.71655 0.0794795 -0.766079 100 -4.71495 0.146147 -0.766079 104 -4.71464 -0.0760766 -0.765701 124 -4.71431 0.0942683 -0.765699 99 -4.71381 0.116483 -0.765699 96 -4.71251 0.160904 -0.765699 107 -4.85722 0.973923 -0.765447 78 -4.71132 -0.00938985 -0.764941 96 -4.7093 -0.0241689 -0.764561 120 -4.70917 0.0424065 -0.76456 131 -4.92746 -0.450363 -0.764372 63 -4.70557 0.131116 -0.76418 142 -4.93329 -0.326155 -0.763648 99 -4.70107 0.0645339 -0.763041 107 -4.69403 0.182519 -0.762281 103 -4.69347 -0.142015 -0.761904 92 -4.68207 0.329617 -0.76152 220 -4.9145 -0.418143 -0.761478 60 -4.68828 -0.178701 -0.761144 114 -4.91403 -0.348241 -0.760392 182 -4.68319 -0.156377 -0.760005 152 -4.90899 -0.363406 -0.759669 192 -4.67726 0.248207 -0.759622 120 -4.67328 0.314303 -0.759622 140 -4.84457 0.860857 -0.759298 78 -4.84184 0.876071 -0.759297 71 -4.66871 0.35086 -0.759242 144 -4.89998 -0.378263 -0.758222 182 -4.80868 0.995425 -0.757488 14 -4.66793 0.196334 -0.757344 164 -4.65268 0.298357 -0.755444 140 -4.87631 -0.469129 -0.755329 85 -4.65355 0.210454 -0.754686 96 -4.64074 0.231858 -0.752407 123 -4.84985 -0.305784 -0.748092 118 -5.10651 -0.527424 -0.747722 77 -4.836 -0.388944 -0.746646 181 -4.77949 0.810233 -0.745913 255 -4.77562 0.832745 -0.745913 255 -4.99824 1.01463 -0.741885 147 -4.81151 -0.288404 -0.740857 73 -4.75346 0.774955 -0.740125 78 -4.74324 0.788551 -0.738678 198 -4.80063 -0.234884 -0.738325 95 -4.96087 1.0397 -0.736403 55 -4.78334 -0.264259 -0.735431 83 -4.96927 0.968368 -0.735375 169 -4.96465 0.991773 -0.735375 57 -4.78022 -0.249048 -0.734707 136 -4.95873 0.950226 -0.732977 162 -4.9448 1.02023 -0.732976 169 -4.77024 -0.21104 -0.732536 122 -4.95781 0.933933 -0.732292 88 -4.71435 0.745554 -0.732167 79 -4.94858 0.90814 -0.729893 145 -5.00948 -0.445397 -0.729561 178 -5.00036 -0.500039 -0.728876 156 -4.69913 0.675059 -0.727465 88 -4.69368 0.711945 -0.727464 102 -4.99516 -0.42823 -0.72682 117 -4.68754 0.726063 -0.726741 78 -4.69115 0.688929 -0.726379 98 -4.93005 0.888855 -0.726124 162 -4.70503 0.570575 -0.726019 95 -4.69149 0.658872 -0.725656 95 -4.6926 0.636483 -0.725295 83 -4.69263 0.621467 -0.724933 101 -4.69899 0.554826 -0.724572 115 -4.72927 -0.0607669 -0.724215 89 -4.71598 0.33256 -0.72385 59 -4.7009 0.502686 -0.723849 109 -4.69059 0.591201 -0.723848 91 -4.70557 0.435988 -0.723487 86 -4.70201 0.472932 -0.723487 112 -4.72119 -0.0755416 -0.722768 92 -4.96883 -0.457317 -0.722708 129 -4.71887 0.0949879 -0.722405 82 -4.71614 -0.127364 -0.722045 96 -4.69267 0.486846 -0.72204 102 -4.69906 0.398133 -0.721679 83 -4.69713 0.420274 -0.721679 86 -4.71106 -0.164283 -0.721322 109 -4.71384 0.0282023 -0.72132 89 -4.67506 0.604094 -0.721316 76 -4.71062 -0.112438 -0.720959 88 -4.71109 -0.0902394 -0.720959 84 -4.7116 0.0577836 -0.720958 106 -4.70866 0.176169 -0.720957 86 -4.70462 -0.178892 -0.720236 85 -4.70802 0.00594771 -0.720235 77 -4.70139 0.249876 -0.720233 91 -4.67975 0.515191 -0.720231 64 -4.70605 -0.00884922 -0.719873 98 -4.70055 0.227612 -0.719872 108 -4.67532 0.537004 -0.719869 77 -4.70403 -0.0236359 -0.719512 77 -4.70341 0.0798097 -0.719511 85 -4.70182 0.146292 -0.71951 119 -4.68747 0.345199 -0.718785 88 -4.9431 -0.478326 -0.718597 165 -4.69605 -0.141695 -0.718427 123 -4.69692 0.10919 -0.718425 71 -4.67678 0.447993 -0.718423 77 -4.69151 0.16067 -0.717702 83 -4.67677 0.38132 -0.717338 82 -4.69017 -0.0383766 -0.71698 88 -4.67581 0.31474 -0.716253 105 -4.6701 0.365969 -0.715891 117 -4.6731 0.262946 -0.715168 101 -4.67833 0.0424918 -0.714809 94 -4.67178 0.211348 -0.714445 90 -4.67045 0.196575 -0.714084 76 -4.6708 0.130466 -0.713723 95 -4.85514 0.860023 -0.712419 98 -4.65654 0.276604 -0.712274 104 -4.90618 -0.404607 -0.711058 88 -4.64538 0.29786 -0.710465 180 -4.90051 -0.349885 -0.709344 84 -4.88054 -0.379202 -0.706261 109 -4.87582 -0.363396 -0.705233 244 -4.80083 0.827406 -0.70214 60 -4.85397 -0.308004 -0.700778 60 -4.79426 0.795353 -0.700084 56 -4.84511 -0.322686 -0.699408 67 -4.78785 0.809775 -0.699399 54 -4.79212 0.771844 -0.699056 104 -4.84115 -0.291849 -0.698379 74 -4.78283 0.755004 -0.697001 92 -4.82673 -0.268075 -0.695638 132 -4.77968 0.7238 -0.69563 94 -4.77544 0.738522 -0.695288 102 -4.76938 0.699341 -0.693232 122 -4.7696 0.684085 -0.69289 112 -4.81062 -0.236774 -0.692554 114 -4.76701 0.645589 -0.691519 119 -4.79608 -0.251092 -0.690156 157 -4.7522 0.666468 -0.689463 105 -4.79166 -0.220648 -0.689127 97 -4.75533 0.628875 -0.689121 125 -4.75337 0.613451 -0.688436 139 -4.74941 0.597807 -0.687408 154 -4.7463 0.574742 -0.68638 161 -4.74786 0.544695 -0.686038 176 -4.77099 -0.197052 -0.685358 130 -4.76962 -0.181978 -0.685015 110 -4.77133 -0.129523 -0.685015 140 -4.74025 0.558946 -0.68501 168 -4.74415 0.506595 -0.684667 194 -4.74253 0.521496 -0.684667 179 -4.76696 -0.144371 -0.68433 130 -4.76581 -0.114359 -0.683987 154 -5.10579 -0.510982 -0.682865 70 -4.73395 0.490533 -0.682612 197 -4.75442 -0.166356 -0.682274 121 -4.73425 0.468037 -0.682269 202 -4.75447 -0.0916074 -0.681931 158 -4.75496 -0.0617334 -0.681931 167 -4.75277 -0.0766277 -0.681588 169 -4.74542 0.0278971 -0.680217 194 -4.74155 -0.00934323 -0.679532 183 -4.7234 0.414663 -0.679528 209 -4.72139 0.436915 -0.679528 209 -4.72 0.451746 -0.679528 202 -4.73936 -0.0465523 -0.67919 172 -4.73756 -0.0241987 -0.678847 190 -4.73727 0.0576603 -0.678846 201 -4.73498 0.0799607 -0.678503 204 -4.7212 0.369698 -0.678501 213 -4.73368 0.00558588 -0.678161 185 -4.71682 0.399199 -0.678158 212 -4.72943 0.146789 -0.677817 208 -4.72753 0.198782 -0.677817 210 -4.71896 0.347178 -0.677816 213 -4.71609 0.38423 -0.677815 215 -4.72879 0.0947499 -0.677475 209 -4.7231 0.250656 -0.677474 211 -4.72143 0.280328 -0.677474 212 -4.72052 0.295159 -0.677474 212 -4.71806 0.332224 -0.677473 211 -4.72758 0.0427436 -0.677133 199 -4.72416 0.124377 -0.67679 212 -4.72251 0.176313 -0.676789 212 -4.72098 0.213398 -0.676789 210 -4.71835 0.265294 -0.676789 215 -4.72107 0.16142 -0.676447 209 -4.71862 0.109431 -0.675762 210 -4.70925 0.316795 -0.67576 213 -4.71044 0.227808 -0.675076 214 -4.94693 1.03621 -0.670442 34 -4.91925 1.01412 -0.66535 34 -4.8845 0.966803 -0.658349 57 -4.87216 0.988199 -0.657076 52 -4.94417 -0.479959 -0.65645 58 -4.85847 0.945641 -0.653575 88 -4.90435 -0.460762 -0.649767 34 -4.83236 0.924653 -0.648801 70 -5.02685 -0.495078 -0.648737 74 -4.90231 -0.367555 -0.648175 79 -4.89466 -0.436656 -0.647857 36 -4.9338 1.02586 -0.646865 70 -4.81727 0.898149 -0.645619 59 -4.80454 0.880082 -0.643073 60 -4.91144 0.997238 -0.642525 62 -4.80146 0.863904 -0.642119 62 -4.85271 -0.417782 -0.640855 64 -4.79771 0.839866 -0.640846 61 -4.85387 -0.379514 -0.640537 64 -4.79254 0.823409 -0.639573 62 -4.89127 0.977278 -0.638804 95 -4.83825 -0.401313 -0.638309 62 -4.78733 0.806995 -0.6383 34 -4.89784 0.922728 -0.638185 114 -4.88656 0.960424 -0.637564 64 -4.82858 -0.347174 -0.636081 62 -4.77427 0.789291 -0.635754 33 -4.77014 0.765491 -0.634481 33 -4.81388 -0.331004 -0.633535 66 -4.76668 0.74955 -0.633527 32 -4.92615 -0.469008 -0.632614 75 -4.85654 0.938866 -0.632293 60 -5.18364 -0.509433 -0.631362 80 -4.75341 0.732083 -0.630981 32 -4.8521 0.898597 -0.630433 87 -4.79662 -0.292093 -0.630352 63 -4.7937 -0.307044 -0.630034 65 -4.79482 -0.254224 -0.629715 62 -4.76517 0.573681 -0.629391 26 -4.7566 0.610564 -0.628754 26 -4.78573 -0.238721 -0.628124 63 -4.75551 0.587636 -0.628118 26 -4.78173 -0.276198 -0.627806 62 -4.89614 -0.450468 -0.627653 61 -4.73534 0.706354 -0.62748 32 -4.83544 0.879916 -0.627333 86 -4.73363 0.690882 -0.626844 32 -4.77759 -0.200766 -0.626532 34 -4.83635 0.840926 -0.626403 86 -4.73703 0.638245 -0.626208 32 -4.735 0.653122 -0.626208 32 -4.72992 0.675138 -0.625889 31 -4.76438 -0.185295 -0.624305 32 -4.72728 0.62175 -0.624298 31 -4.75884 -0.222545 -0.623668 56 -4.87248 -0.378753 -0.623001 101 -4.81227 0.852439 -0.622992 86 -4.8693 -0.393888 -0.622692 87 -4.81558 0.821865 -0.622682 84 -4.86476 -0.424293 -0.622382 83 -4.81355 0.798223 -0.621752 82 -4.74718 -0.169787 -0.62144 32 -4.74769 -0.154874 -0.62144 32 -4.74876 -0.11758 -0.62144 31 -4.74639 -0.132455 -0.621122 31 -4.72019 0.5154 -0.621117 31 -4.71855 0.530225 -0.621117 31 -4.85623 -0.408129 -0.620831 76 -4.74361 -0.0802124 -0.620485 31 -4.71207 0.551975 -0.62048 30 -4.74121 -0.102534 -0.620167 31 -4.7159 0.499911 -0.620162 31 -4.74032 -0.0131569 -0.619848 31 -4.71521 0.447437 -0.619208 31 -4.71231 0.477054 -0.619208 31 -4.73397 -0.0652286 -0.618893 31 -4.73415 -0.050356 -0.618893 31 -4.73434 -0.0280466 -0.618893 31 -4.70593 0.461434 -0.617935 31 -4.71001 0.394686 -0.617617 31 -4.70875 0.409481 -0.617617 31 -4.7887 0.778804 -0.617412 76 -4.72405 0.0684326 -0.617301 31 -4.72337 0.105531 -0.617301 32 -4.70926 0.379718 -0.617299 32 -4.83679 -0.352856 -0.61711 75 -4.83694 -0.322317 -0.6168 82 -4.71596 0.209173 -0.616664 31 -4.71164 0.290623 -0.616663 31 -4.71022 0.312823 -0.616663 31 -4.70922 0.327619 -0.616663 32 -4.78527 0.762853 -0.616482 65 -4.71862 0.00160727 -0.616347 31 -4.71647 0.142414 -0.616346 32 -4.716 0.157229 -0.616346 32 -4.71258 0.238689 -0.616345 31 -4.71141 0.260894 -0.616345 31 -4.69891 0.4309 -0.616344 31 -4.83196 -0.337213 -0.61618 82 -4.71649 0.0386408 -0.616028 33 -4.71635 0.053457 -0.616028 31 -4.71578 0.0904968 -0.616028 32 -4.71465 0.0163971 -0.61571 31 -4.71315 0.120064 -0.615709 32 -4.70662 0.275441 -0.615708 31 -4.70542 0.223465 -0.615072 31 -4.70365 0.171548 -0.614436 31 -4.70309 0.186323 -0.614436 31 -4.69439 0.341332 -0.614435 31 -4.77742 0.723251 -0.614311 67 -4.82157 -0.28318 -0.614009 84 -4.68542 0.355439 -0.613162 32 -4.81475 -0.297927 -0.613079 81 -4.76989 0.706843 -0.612761 64 -4.76747 0.668305 -0.611521 69 -4.75638 0.743106 -0.611521 77 -4.80272 -0.266828 -0.610908 83 -4.79209 -0.243528 -0.609048 82 -4.74861 0.68858 -0.609041 78 -4.79155 -0.213316 -0.608737 78 -4.78888 -0.228262 -0.608428 83 -4.78825 -0.198075 -0.608117 77 -5.02834 -0.471052 -0.607821 69 -4.74603 0.650233 -0.607801 58 -4.74903 0.612697 -0.607491 70 -4.94197 1.01154 -0.606927 61 -4.74674 0.567017 -0.606251 69 -4.77584 -0.159926 -0.605947 75 -4.74113 0.596593 -0.605941 63 -4.74712 0.529303 -0.605631 73 -4.74347 0.543999 -0.605321 71 -4.73042 0.633057 -0.60501 74 -4.76741 -0.174596 -0.604706 80 -4.74823 0.4616 -0.604702 71 -4.73316 0.580547 -0.604391 77 -4.76447 -0.144496 -0.604086 76 -4.76545 -0.107073 -0.604086 75 -4.76615 -0.0696427 -0.604086 73 -4.76437 -0.0546366 -0.603775 73 -4.76115 -0.121921 -0.603466 76 -4.73737 0.490653 -0.603461 76 -4.735 0.512973 -0.603461 77 -4.74426 0.371161 -0.602842 81 -4.73655 0.393056 -0.601912 75 -4.73263 0.437679 -0.601911 74 -4.90831 0.988401 -0.601336 84 -4.7469 -0.00214084 -0.600985 78 -4.74682 0.0276839 -0.600984 87 -4.7372 0.303364 -0.600982 79 -4.72315 0.474275 -0.600981 75 -4.74476 -0.0393951 -0.600675 75 -4.74348 0.117111 -0.600673 82 -4.73746 0.266049 -0.600672 77 -4.73073 0.340298 -0.600362 79 -4.7374 0.184025 -0.600053 79 -4.73898 0.0127942 -0.599744 80 -4.73873 0.0500132 -0.599744 85 -4.73855 0.0648991 -0.599744 81 -4.7379 0.102113 -0.599743 82 -4.73383 0.221144 -0.599743 77 -4.73614 -0.0913672 -0.599435 73 -4.72826 0.287933 -0.599432 78 -4.72372 0.354747 -0.599431 77 -4.73498 -0.0243846 -0.599124 74 -4.73088 0.198691 -0.599123 77 -4.72917 0.235841 -0.599122 75 -4.7324 0.0797182 -0.598813 81 -4.7143 0.421159 -0.598811 74 -4.72926 0.131703 -0.598503 89 -4.72446 0.250508 -0.598502 76 -4.89201 0.969031 -0.598393 79 -4.71847 0.317149 -0.598191 78 -4.70969 0.405869 -0.597881 77 -4.7229 0.14641 -0.597573 81 -4.89364 0.929442 -0.597511 106 -4.8907 0.944813 -0.597511 84 -4.71426 0.168425 -0.596332 79 -4.88294 0.911453 -0.595451 87 -4.93716 -0.447348 -0.59399 66 -4.87551 0.886248 -0.593686 92 -4.86855 0.869137 -0.592215 87 -4.92276 -0.43054 -0.591636 90 -4.91882 -0.406879 -0.590753 84 -4.86152 0.85208 -0.590743 89 -4.91021 -0.390693 -0.589282 90 -4.85831 0.812189 -0.589272 98 -4.90944 -0.375123 -0.588987 120 -4.85379 0.827104 -0.588978 90 -4.9027 -0.359163 -0.58781 89 -4.89447 -0.33543 -0.586339 86 -4.83743 0.792958 -0.585741 89 -4.88562 -0.319459 -0.584867 85 -4.88601 -0.280975 -0.584573 92 -4.8321 0.77646 -0.584565 101 -4.82828 0.736942 -0.583094 96 -4.87278 -0.303323 -0.582807 88 -4.82398 0.75179 -0.582799 99 -4.8247 0.72086 -0.582211 82 -4.82413 0.697529 -0.581622 84 -4.86594 -0.249274 -0.581335 100 -4.82367 0.643357 -0.580446 91 -4.85723 -0.264172 -0.580159 95 -4.85718 -0.225934 -0.579864 92 -4.81456 0.680647 -0.579857 87 -4.85589 -0.210599 -0.57957 94 -4.81471 0.665236 -0.579563 87 -4.81781 0.611738 -0.578975 88 -4.81587 0.62687 -0.578975 90 -4.85244 -0.14179 -0.578686 92 -4.84723 -0.17977 -0.578098 92 -4.84071 -0.194792 -0.577215 94 -4.80402 0.594571 -0.576621 89 -4.79695 0.570705 -0.57515 89 -4.828 -0.0880959 -0.57486 100 -4.79848 0.540323 -0.574856 88 -4.82429 -0.156286 -0.574567 87 -4.82518 -0.125971 -0.574567 90 -4.82627 -0.0729096 -0.574566 95 -4.80216 0.487319 -0.574562 96 -4.799 0.517481 -0.574562 95 -4.79479 0.555156 -0.574561 94 -4.79864 0.502186 -0.574267 93 -4.82274 -0.0349951 -0.573977 95 -4.80132 0.433921 -0.573679 92 -4.81887 -0.0198487 -0.573389 101 -4.79797 0.448809 -0.573385 95 -4.79653 0.463879 -0.573385 96 -4.81583 -0.103074 -0.573095 94 -4.81658 -0.0576819 -0.573095 99 -4.8169 0.0179806 -0.573094 96 -5.14493 -0.503176 -0.572922 113 -4.81113 0.191868 -0.572799 94 -4.81273 0.0481837 -0.572505 102 -4.79589 0.327222 -0.57162 96 -4.79317 0.364878 -0.57162 94 -4.804 0.100891 -0.571328 98 -4.80297 0.0329435 -0.571034 101 -4.79797 0.221481 -0.571033 86 -4.79436 0.289287 -0.571032 96 -4.78806 0.3796 -0.571031 97 -4.80059 0.0706246 -0.57074 99 -4.79814 0.168632 -0.570739 99 -4.79327 0.274098 -0.570738 94 -4.78892 0.341832 -0.570737 97 -4.78487 0.394468 -0.570737 96 -4.79667 0.153483 -0.570445 97 -4.78099 0.416828 -0.570443 97 -4.79638 0.0856127 -0.570151 97 -4.78703 0.311457 -0.570149 96 -4.78898 0.243643 -0.569856 77 -4.78621 0.25857 -0.569561 106 -4.78922 0.138142 -0.569268 96 -4.78923 -0.00484177 -0.568975 99 -4.78784 0.115514 -0.568974 96 -4.78481 0.205737 -0.568973 92 -4.98428 0.983228 -0.560568 86 -5.63993 1.11968 -0.559643 155 -5.0467 -0.469059 -0.558933 60 -4.96204 0.962789 -0.557002 90 -4.9592 0.946112 -0.55618 99 -4.94995 0.920269 -0.55426 96 -4.94307 0.902982 -0.552889 92 -4.99687 -0.448333 -0.551802 79 -4.92441 0.883712 -0.549872 90 -4.97655 -0.430642 -0.548785 96 -4.97788 -0.415004 -0.548784 89 -4.97978 -0.391543 -0.548784 127 -4.91947 0.843061 -0.548226 92 -4.91349 0.865902 -0.547952 94 -4.91819 0.826967 -0.547678 104 -4.95729 -0.373984 -0.545493 80 -4.89924 0.808079 -0.544661 101 -4.95054 -0.357795 -0.544396 99 -4.89908 0.784376 -0.544113 98 -4.94426 -0.333889 -0.543298 101 -4.89019 0.751544 -0.542193 101 -4.88781 0.766904 -0.542193 103 -4.92847 -0.301633 -0.54083 103 -4.88272 0.734755 -0.540822 102 -4.9196 -0.316563 -0.539733 100 -4.87632 0.710363 -0.53945 85 -4.91289 -0.261873 -0.538361 105 -4.87284 0.678658 -0.538354 88 -4.86479 0.693155 -0.537531 89 -4.9038 -0.245889 -0.536989 94 -4.89974 -0.28427 -0.536715 104 -4.90027 -0.191691 -0.536166 99 -4.86427 0.623108 -0.53616 97 -4.86033 0.638138 -0.535885 88 -4.85633 0.653151 -0.535611 88 -4.89268 -0.229862 -0.535343 90 -4.89371 -0.206803 -0.535343 87 -4.86114 0.583982 -0.535063 100 -4.85929 0.59925 -0.535063 90 -4.85545 0.529272 -0.533418 88 -4.85511 0.513819 -0.533143 88 -4.87709 -0.175316 -0.532875 99 -4.8585 0.460227 -0.53287 106 -4.87634 -0.13694 -0.5326 104 -4.87391 -0.152186 -0.532326 102 -4.85308 0.475122 -0.532321 101 -4.85079 0.497986 -0.532321 91 -4.84502 0.551293 -0.53232 90 -4.8413 0.566291 -0.532046 88 -4.87081 -0.121439 -0.531777 104 -4.87006 -0.0525388 -0.531502 88 -4.85339 0.406004 -0.531499 91 -4.86765 -0.083093 -0.531228 88 -4.86789 -0.0678002 -0.531228 88 -4.86629 -0.0295426 -0.530954 93 -4.86636 -0.0142556 -0.530953 92 -4.86126 -0.105869 -0.530405 107 -4.85974 0.161418 -0.530403 92 -4.84794 0.374934 -0.530402 93 -4.84419 0.420608 -0.530401 85 -4.84018 0.443259 -0.530127 99 -4.85641 0.0239688 -0.529582 94 -4.85361 0.0925919 -0.529307 97 -4.84623 0.283072 -0.529305 92 -4.84175 0.351553 -0.529305 91 -4.83884 0.389569 -0.529305 92 -4.85235 0.0392149 -0.529033 96 -4.8522 0.0544578 -0.529033 92 -4.84188 0.321005 -0.529031 101 -4.84897 0.123007 -0.528758 97 -4.84805 0.0696668 -0.528484 93 -4.84636 0.145807 -0.528484 97 -4.84381 0.214303 -0.528483 95 -4.84311 0.22952 -0.528483 90 -4.84657 0.00113442 -0.52821 94 -4.8372 0.267353 -0.527934 92 -4.83852 0.198873 -0.52766 92 -4.83643 0.244465 -0.52766 92 -4.83943 0.107606 -0.527387 95 -4.83147 0.297517 -0.527385 95 -4.83544 0.175947 -0.527112 95 -4.82306 0.335074 -0.526562 92 -5.79399 1.11666 -0.512767 156 -5.37525 -0.486164 -0.512044 40 -5.20806 1.0149 -0.499729 40 -5.2708 -0.452205 -0.4976 50 -5.4414 1.0426 -0.496031 40 -5.25569 -0.392844 -0.494925 40 -5.16026 0.980105 -0.492508 40 -5.14969 0.961275 -0.490635 40 -5.21622 -0.414807 -0.489843 40 -5.20501 -0.430425 -0.488506 40 -5.12931 0.940686 -0.487426 40 -5.12979 0.915787 -0.486891 40 -5.12093 0.897556 -0.485286 40 -5.11476 0.863325 -0.483682 40 -5.10616 0.878352 -0.482879 40 -5.10574 0.820534 -0.481542 40 -5.15603 -0.369611 -0.481284 40 -5.15321 -0.353158 -0.480749 40 -5.1543 -0.336968 -0.480749 40 -5.09727 0.835578 -0.48074 40 -5.09264 0.801943 -0.479403 40 -5.0944 0.777627 -0.479135 40 -5.14 -0.311795 -0.478609 40 -5.14095 -0.295645 -0.478608 40 -5.09094 0.760711 -0.478333 40 -5.12727 -0.254554 -0.476468 40 -5.08527 0.702718 -0.476461 40 -5.08107 0.718405 -0.476194 40 -5.07567 0.742043 -0.475926 40 -5.12013 -0.238118 -0.475398 40 -5.11612 -0.278225 -0.475131 40 -5.07697 0.644686 -0.474322 40 -5.07387 0.668603 -0.474322 40 -5.11095 -0.221652 -0.474061 40 -5.06782 0.683989 -0.473787 40 -5.10857 -0.181384 -0.473526 40 -5.10515 -0.165227 -0.472991 40 -5.06914 0.627465 -0.472985 40 -5.09609 -0.197033 -0.471921 40 -5.06589 0.570531 -0.471648 40 -5.06407 0.586443 -0.471648 40 -5.32899 -0.47313 -0.471574 44 -5.09044 -0.124817 -0.470851 40 -5.05142 0.609065 -0.47031 40 -5.08385 -0.14866 -0.470048 40 -5.08288 -0.108696 -0.46978 40 -5.08206 0.00308748 -0.469512 40 -5.06739 0.385892 -0.469509 40 -5.06284 0.441587 -0.469509 40 -5.05445 0.528995 -0.469508 40 -5.0557 0.497022 -0.469241 40 -5.04993 0.552583 -0.469241 40 -5.07806 0.0190182 -0.468977 40 -5.05215 0.512694 -0.468973 40 -5.07584 -0.0527592 -0.46871 40 -5.07328 -0.0925965 -0.468443 40 -5.07168 -0.0686732 -0.468175 40 -5.23157 0.977902 -0.467995 40 -5.07012 -0.0208728 -0.467907 40 -5.04959 0.456359 -0.467904 40 -5.04738 0.480149 -0.467904 40 -5.06416 0.201981 -0.467638 40 -5.06044 0.241645 -0.467371 40 -5.05445 0.344922 -0.46737 40 -5.05277 0.368735 -0.46737 40 -5.06409 -0.0367884 -0.467105 40 -5.05954 0.217699 -0.467103 40 -5.0555 0.297144 -0.467103 40 -5.06212 0.0347799 -0.466837 40 -5.06056 0.130187 -0.466837 40 -5.0464 0.400142 -0.466834 40 -5.05992 0.0586019 -0.46657 40 -5.04248 0.423742 -0.466567 40 -5.0486 0.312627 -0.4663 40 -5.22095 0.959019 -0.466211 40 -5.05549 0.0903009 -0.466034 40 -5.05419 0.145884 -0.466034 40 -5.0509 0.18549 -0.465766 40 -5.04364 0.328207 -0.465765 40 -5.49817 -0.484767 -0.465742 87 -5.0498 0.0743011 -0.465232 40 -5.04382 0.256653 -0.465231 40 -5.04299 0.272497 -0.465231 40 -5.04182 0.161318 -0.464429 40 -5.04113 0.11374 -0.464162 40 -5.23166 -0.447445 -0.458829 52 -5.15359 0.930276 -0.457035 40 -5.21723 -0.404872 -0.456535 40 -5.20661 -0.387539 -0.455006 40 -5.13499 0.910379 -0.454231 40 -5.4047 -0.459868 -0.453983 51 -5.19593 -0.370274 -0.453476 40 -5.13335 0.88519 -0.453467 40 -5.18364 -0.426692 -0.452457 40 -5.12632 0.867452 -0.452193 40 -5.12706 0.851029 -0.451938 40 -5.18179 -0.344653 -0.451437 40 -5.18285 -0.328372 -0.451437 40 -5.12121 0.825329 -0.450664 40 -5.16897 -0.294817 -0.449397 40 -5.16604 -0.310927 -0.449143 40 -5.29239 0.991832 -0.449072 40 -5.15644 -0.269661 -0.447613 40 -5.15909 -0.212949 -0.447613 40 -5.10249 0.76499 -0.447096 40 -5.09633 0.805041 -0.447095 40 -5.15132 -0.253138 -0.446848 40 -5.15209 -0.236953 -0.446848 40 -5.1013 0.7321 -0.446331 40 -5.08902 0.78756 -0.445821 40 -5.08719 0.746455 -0.444802 40 -5.13199 -0.195541 -0.444044 40 -5.13226 -0.122915 -0.443789 40 -5.12465 -0.179101 -0.443025 40 -5.1232 -0.162927 -0.44277 40 -5.1227 -0.106536 -0.442514 40 -5.08465 0.632297 -0.442509 40 -5.11995 -0.138656 -0.44226 40 -5.07965 0.656006 -0.442254 40 -5.07756 0.671962 -0.442254 40 -5.07212 0.711819 -0.442253 40 -5.08458 0.599892 -0.441999 40 -5.11761 -0.050115 -0.441749 40 -5.23697 0.964133 -0.441723 40 -5.11545 -0.0661554 -0.441494 40 -5.11581 -0.0259773 -0.441494 40 -5.07676 0.615178 -0.441234 40 -5.06755 0.686884 -0.441234 40 -5.11125 -0.082142 -0.440985 40 -5.23217 0.946225 -0.440743 57 -5.07749 0.57486 -0.440725 40 -5.07138 0.558077 -0.439706 40 -5.07113 0.541942 -0.439451 40 -5.22485 0.919437 -0.439274 60 -5.06888 0.485435 -0.438432 40 -5.21794 0.901281 -0.438049 59 -5.06141 0.500801 -0.437667 40 -5.05899 0.524646 -0.437667 40 -5.06958 0.357253 -0.437158 40 -5.06403 0.428885 -0.437158 40 -5.06068 0.444628 -0.436903 40 -5.05655 0.468299 -0.436648 40 -5.0756 0.0780799 -0.436396 40 -5.07421 -0.00961403 -0.436141 40 -5.07319 0.101968 -0.436141 40 -5.06749 0.261269 -0.436139 40 -5.05744 0.41237 -0.436138 40 -5.07047 0.133799 -0.435886 40 -5.26099 -0.41507 -0.435854 40 -5.06432 0.245176 -0.43563 40 -5.06822 0.0222729 -0.435377 40 -5.06789 0.0620774 -0.435376 40 -5.05682 0.340464 -0.435374 40 -5.25571 -0.431291 -0.435364 43 -5.0611 0.229106 -0.43512 40 -5.05639 0.316517 -0.435119 40 -5.20404 0.839942 -0.435109 63 -5.06293 0.117725 -0.434866 40 -5.19746 0.855624 -0.434619 64 -5.05987 0.157434 -0.434611 40 -5.04865 0.371824 -0.434609 40 -5.04745 0.387682 -0.434609 40 -5.19142 0.879764 -0.434374 61 -5.06012 0.0461241 -0.434357 40 -5.0568 0.189158 -0.434356 40 -5.05618 0.205044 -0.434356 40 -5.05835 0.00639001 -0.434102 40 -5.04944 0.3002 -0.4341 40 -5.24507 -0.38904 -0.433649 40 -5.04547 0.172925 -0.432827 40 -5.23636 -0.371906 -0.432424 40 -5.17923 0.819113 -0.43168 62 -5.03054 0.283322 -0.431551 40 -5.17982 0.802524 -0.431435 66 -5.22723 -0.330077 -0.430954 40 -5.22428 -0.313436 -0.430463 65 -5.2177 -0.354209 -0.429974 40 -5.21731 -0.296612 -0.429483 66 -5.16437 0.758537 -0.428741 62 -5.16 0.774452 -0.428495 63 -5.1628 0.741726 -0.428251 63 -5.16257 0.700324 -0.427516 64 -5.15688 0.68302 -0.426536 64 -5.19287 -0.270806 -0.426298 62 -5.15052 0.715125 -0.426291 63 -5.18973 -0.254318 -0.425808 64 -5.18924 -0.22163 -0.425563 61 -5.364 0.983348 -0.425449 20 -5.15423 0.625033 -0.425312 64 -5.15225 0.641223 -0.425312 65 -5.1472 0.66523 -0.425067 67 -5.14829 0.607868 -0.424332 65 -5.17464 -0.237363 -0.423848 62 -5.14896 0.566959 -0.423842 70 -5.14716 0.583133 -0.423842 61 -5.17436 -0.196651 -0.423603 62 -5.17153 -0.164029 -0.423113 66 -5.14283 0.549898 -0.422863 71 -5.16503 -0.180098 -0.422378 62 -5.16806 -0.034007 -0.422377 67 -5.16472 -0.123258 -0.422133 68 -5.14264 0.49272 -0.422128 62 -5.13747 0.524809 -0.421883 64 -5.33576 0.961008 -0.421716 20 -5.16034 -0.139395 -0.421643 69 -5.16111 -0.10697 -0.421643 68 -5.15957 -0.082626 -0.421397 65 -5.13317 0.508052 -0.421148 66 -5.13231 0.475403 -0.420658 63 -5.15125 0.103593 -0.420416 65 -5.13391 0.434903 -0.420414 62 -5.1503 -0.00971084 -0.420172 74 -5.15026 0.0226498 -0.420172 42 -5.14808 -0.050151 -0.419927 67 -5.14473 0.192412 -0.419925 65 -5.14591 -0.0663073 -0.419682 62 -5.14633 0.0064445 -0.419682 90 -5.1441 0.151931 -0.419681 66 -5.13123 0.394082 -0.419679 66 -5.14397 0.0629956 -0.419437 67 -5.13162 0.361684 -0.419434 61 -5.13635 0.24865 -0.41919 64 -5.12263 0.45011 -0.419189 67 -5.12338 0.417743 -0.418944 64 -5.12837 0.320967 -0.4187 62 -5.12255 0.377182 -0.418454 64 -5.12944 0.175625 -0.417966 67 -5.12823 0.20785 -0.417966 61 -5.12908 0.119157 -0.417721 66 -5.12826 0.04661 -0.417477 40 -5.12669 0.135209 -0.417476 64 -5.12125 0.231715 -0.41723 66 -5.11746 0.304089 -0.41723 62 -5.11347 0.336097 -0.416985 62 -5.11573 0.263663 -0.41674 61 -5.11443 0.287767 -0.41674 61 -5.11795 0.0786283 -0.416252 65 -5.3483 -0.459194 -0.415428 49 -5.27705 0.91656 -0.414018 20 -5.26632 0.931789 -0.413084 20 -5.26563 0.889115 -0.412151 20 -5.26448 0.871936 -0.411685 20 -5.30423 -0.41324 -0.409828 20 -5.25349 0.827868 -0.409586 20 -5.29895 -0.429561 -0.409362 24 -5.25017 0.810479 -0.408886 20 -5.23972 0.85107 -0.408419 20 -5.24286 0.792544 -0.407719 20 -5.28691 -0.378389 -0.407495 20 -5.23671 0.766439 -0.406553 20 -5.2758 -0.394207 -0.406328 20 -5.27981 -0.336175 -0.406328 20 -5.27477 -0.352476 -0.405861 20 -5.22531 0.748081 -0.40492 20 -5.23125 0.690332 -0.404687 20 -5.26499 -0.318548 -0.404461 20 -5.26643 -0.293733 -0.404461 20 -5.21921 0.705482 -0.403521 20 -5.21189 0.729537 -0.403054 20 -5.2266 0.598117 -0.402822 20 -5.24948 -0.276161 -0.402361 20 -5.21577 0.655073 -0.402355 20 -5.24834 -0.259559 -0.402128 20 -5.24554 -0.234628 -0.401661 20 -5.20777 0.670723 -0.401655 20 -5.21285 0.613199 -0.401422 20 -5.2109 0.629572 -0.401422 20 -5.24436 -0.160309 -0.401194 20 -5.21112 0.538473 -0.400256 20 -5.20742 0.554642 -0.400022 20 -5.2238 0.308509 -0.399558 20 -5.22895 -0.143319 -0.399328 20 -5.23021 -0.0858156 -0.399327 20 -5.21242 0.439528 -0.399323 20 -5.22508 -0.200718 -0.399095 20 -5.22793 -0.102198 -0.399094 20 -5.22244 -0.217039 -0.398862 20 -5.2237 -0.184221 -0.398861 20 -5.2245 -0.0692752 -0.398627 20 -5.20783 0.422698 -0.398623 20 -5.19894 0.520782 -0.398623 20 -5.22196 0.10304 -0.398393 20 -5.20089 0.479762 -0.39839 20 -5.19183 0.569551 -0.398389 20 -5.21945 -0.1266 -0.398161 20 -5.20703 0.381513 -0.398157 20 -5.21446 0.217696 -0.397925 20 -5.19841 0.463089 -0.397923 20 -5.1954 0.495742 -0.397923 20 -5.21682 -0.0445475 -0.397694 20 -5.21694 -0.0281593 -0.397694 20 -5.217 -0.0117682 -0.397694 20 -5.21176 0.233998 -0.397692 20 -5.19725 0.405469 -0.397224 20 -5.2051 0.14369 -0.396526 20 -5.20153 0.192677 -0.396292 20 -5.20104 0.0291961 -0.395827 20 -5.19913 0.00469371 -0.395594 20 -5.19842 0.0863586 -0.395593 20 -5.19777 0.119018 -0.395593 20 -5.18992 0.273975 -0.395358 20 -5.18904 0.290279 -0.395358 20 -5.1866 0.331023 -0.395358 20 -5.18355 0.347193 -0.395125 20 -5.19082 0.061805 -0.39466 20 -5.18874 0.159633 -0.394659 20 -5.18821 0.175932 -0.394659 20 -5.1852 0.249259 -0.394659 20 -5.18901 0.0454896 -0.394427 20 -5.17649 0.363089 -0.394425 20 -5.80468 -0.489312 -0.393874 53 -6.93072 -0.346116 -0.390542 55 -8.80308 0.426825 -0.386958 61 -8.79042 0.398576 -0.38601 88 -8.78774 0.453798 -0.38601 85 -5.9585 1.08005 -0.385366 40 -8.7844 0.23254 -0.385198 80 -8.77824 0.356622 -0.385062 86 -8.77732 0.328974 -0.384926 83 -8.7791 0.204819 -0.384792 44 -8.76635 0.301024 -0.384114 44 -8.76127 0.273311 -0.383707 56 -6.82355 -0.373402 -0.38136 40 -6.81632 -0.319371 -0.380493 63 -6.78235 -0.147265 -0.377027 95 -6.76392 -0.168193 -0.375468 122 -6.76363 -0.0725442 -0.375294 89 -5.55509 1.01049 -0.375179 40 -6.76183 -0.0512876 -0.37512 91 -6.75489 -0.125544 -0.374601 112 -6.7554 -0.0937127 -0.374601 100 -6.75402 0.0230066 -0.374427 74 -6.74845 -0.220908 -0.374255 120 -6.75207 0.00177968 -0.374254 64 -6.74743 -0.189057 -0.374082 99 -6.74805 -0.0194367 -0.373908 72 -6.73378 -0.241662 -0.373043 117 -6.72105 -0.262394 -0.372003 113 -6.71376 -0.293826 -0.371484 116 -5.55623 0.778041 -0.371444 40 -6.70403 0.0542373 -0.370096 56 -5.5409 0.758238 -0.369576 40 -5.50912 0.877768 -0.368121 51 -5.49118 0.972486 -0.367913 40 -5.56302 -0.327273 -0.367507 40 -5.5675 -0.187294 -0.367298 40 -5.56312 -0.248401 -0.367091 40 -5.50601 0.833031 -0.367084 74 -5.50202 0.858969 -0.367083 84 -5.50916 0.798144 -0.366876 40 -5.50466 0.815165 -0.366669 40 -5.48244 0.953239 -0.366668 62 -5.48344 0.935686 -0.36646 75 -5.54953 -0.282688 -0.365846 56 -5.55298 -0.204208 -0.365845 40 -5.55032 -0.221563 -0.365638 40 -5.50379 0.735739 -0.365423 40 -5.54218 -0.308475 -0.365223 65 -5.54934 -0.125523 -0.365222 40 -5.54693 -0.142895 -0.365014 40 -5.54421 -0.168964 -0.364807 40 -5.5422 -0.0817802 -0.364391 40 -5.52413 -0.403262 -0.363978 40 -5.49226 0.716709 -0.36397 40 -5.53579 -0.107753 -0.363769 40 -5.53481 -0.0207709 -0.36356 40 -5.48965 0.690103 -0.363348 40 -5.53067 -0.0468 -0.363145 40 -5.52258 -0.263792 -0.362939 40 -5.52475 0.213714 -0.362936 40 -5.51974 0.317809 -0.362935 40 -5.52689 -0.00334022 -0.36273 40 -5.52427 0.170265 -0.362729 40 -5.52008 0.274358 -0.362728 40 -5.51673 0.335036 -0.362727 40 -5.52279 0.152863 -0.362521 40 -5.51893 0.256932 -0.36252 40 -5.44905 0.912389 -0.362516 78 -5.80335 -0.474654 -0.362339 40 -5.52254 -0.0640453 -0.362315 40 -5.50869 -0.367269 -0.36211 40 -5.51323 0.291411 -0.362105 40 -5.50208 0.455801 -0.362104 40 -5.44936 0.886081 -0.362101 70 -6.05818 1.13223 -0.361931 163 -7.03192 0.210154 -0.361851 68 -7.02919 0.287459 -0.361851 50 -5.50355 -0.384279 -0.361694 40 -5.51693 0.0140435 -0.361692 40 -5.50441 -0.340909 -0.361486 40 -5.5122 0.0919872 -0.361276 40 -5.50815 0.230478 -0.361275 40 -7.02209 0.265102 -0.3612 59 -5.4892 0.489525 -0.361065 54 -5.50551 0.195743 -0.36086 40 -5.49111 -0.418048 -0.360657 40 -5.5067 0.0573171 -0.360653 40 -5.50492 0.0313652 -0.360446 40 -5.50375 0.117827 -0.360445 40 -5.4789 0.514679 -0.360235 40 -5.50053 0.0745641 -0.36003 40 -5.48564 0.41118 -0.360028 40 -5.48079 0.471472 -0.360027 67 -5.48785 0.350722 -0.359821 40 -5.4716 0.548715 -0.359819 40 -5.4954 0.134961 -0.359615 40 -5.46514 0.591466 -0.359611 69 -5.46933 0.531158 -0.359404 40 -6.99638 0.308254 -0.359247 40 -6.99485 0.34122 -0.359247 40 -5.45736 0.625359 -0.359196 79 -6.99736 0.231249 -0.359085 136 -5.47699 0.393279 -0.35899 40 -5.46193 0.565121 -0.358989 40 -5.47242 0.427538 -0.358782 40 -6.9818 0.362617 -0.35827 40 -5.47084 0.36697 -0.35816 40 -5.44546 0.606735 -0.357743 77 -5.43253 0.665875 -0.35712 40 -5.43262 0.648578 -0.356912 52 -6.93463 -0.348305 -0.354369 40 -5.63226 0.910097 -0.350712 40 -5.64259 0.830087 -0.350516 40 -6.88443 -0.313074 -0.350138 40 -5.62348 0.926788 -0.350121 40 -6.86981 -0.366452 -0.349162 40 -5.62422 0.84537 -0.34894 40 -5.61741 0.889516 -0.34894 40 -5.59533 0.985377 -0.348349 40 -6.80003 0.946849 -0.348014 40 -5.59447 0.967097 -0.347955 40 -5.60838 0.869979 -0.347759 40 -5.59552 0.949176 -0.347758 40 -5.61545 0.78093 -0.347169 40 -5.61393 0.762732 -0.346775 40 -5.59989 0.805628 -0.345987 40 -6.81539 0.376064 -0.344763 40 -5.60026 0.698149 -0.34461 40 -5.63155 -0.336944 -0.34442 40 -5.59264 0.74184 -0.344412 40 -5.62649 -0.354401 -0.344026 40 -5.59015 0.714694 -0.343822 40 -6.81168 -0.0417594 -0.343627 86 -6.80596 -0.159335 -0.343302 82 -5.6136 -0.397923 -0.343042 40 -6.80051 -0.212643 -0.342977 86 -5.61284 -0.380161 -0.342845 40 -6.80084 -0.116443 -0.342813 88 -6.79982 -0.020278 -0.34265 82 -5.58268 0.678062 -0.342641 40 -6.78705 -0.383113 -0.34249 40 -6.79777 0.0331254 -0.342487 81 -6.79318 -0.191023 -0.342326 87 -6.79447 -0.137666 -0.342325 84 -6.7878 -0.286946 -0.342164 74 -6.78985 -0.233626 -0.342163 82 -6.7932 -0.0949369 -0.342162 82 -6.79365 0.0544646 -0.342161 80 -6.79186 0.0117834 -0.341999 82 -6.7876 -0.0628442 -0.341674 88 -5.59641 -0.44097 -0.341664 40 -6.77473 -0.265021 -0.341024 86 -5.59048 -0.414041 -0.340876 40 -5.56701 0.658333 -0.340869 40 -6.77737 0.0863358 -0.340859 83 -6.77707 0.107627 -0.340859 79 -5.56412 0.631392 -0.340278 40 -5.56498 0.349422 -0.337917 40 -5.80661 1.05804 -0.337583 40 -5.54694 0.506037 -0.337326 40 -5.54279 0.549586 -0.337325 40 -5.54652 0.488425 -0.337129 40 -5.54251 0.531972 -0.337129 40 -5.56556 0.0692024 -0.336935 40 -5.54406 0.470641 -0.336735 40 -5.56048 0.130282 -0.336541 40 -5.54996 0.365922 -0.336539 40 -5.55905 0.104031 -0.336344 40 -5.5561 0.208792 -0.336343 40 -5.55558 0.16508 -0.336147 40 -5.55474 0.191259 -0.336146 40 -5.55148 0.269765 -0.336146 40 -5.55598 0.025397 -0.335951 40 -5.54222 0.391622 -0.335948 40 -5.79029 1.03637 -0.335724 40 -5.54634 0.252024 -0.335555 40 -5.54222 0.330404 -0.335555 40 -5.52323 0.56509 -0.335553 40 -5.54983 0.0514962 -0.33536 40 -5.54349 0.225704 -0.335162 40 -5.54067 0.286642 -0.335161 40 -6.65375 0.852613 -0.335159 40 -5.54413 0.147253 -0.334965 40 -5.52568 0.451509 -0.334766 40 -5.52707 0.407941 -0.33457 40 -5.53613 0.0078218 -0.333982 40 -8.74036 0.496879 -0.333968 82 -8.74366 0.34562 -0.333721 81 -8.7379 0.469192 -0.33372 79 -8.74493 0.249396 -0.333597 79 -8.74411 0.27687 -0.333597 69 -8.73932 0.400454 -0.333596 79 -5.53149 0.0860033 -0.333588 40 -5.52385 0.303102 -0.333586 40 -8.74463 0.18066 -0.333473 59 -5.51386 0.424331 -0.333388 40 -8.7392 0.304187 -0.333348 45 -8.72936 0.441207 -0.333099 79 -8.72657 0.372359 -0.332726 80 -8.72572 0.221358 -0.332354 83 -5.8027 -0.56897 -0.330903 52 -6.643 0.388141 -0.330768 131 -6.62518 0.418499 -0.329466 80 -5.78153 -0.539292 -0.328672 40 -5.77725 -0.520565 -0.328114 76 -6.59399 0.437448 -0.327025 95 -6.59259 0.458161 -0.327025 111 -5.74911 -0.499692 -0.325326 58 -6.18385 0.0674399 -0.324877 43 -6.08436 0.88473 -0.321753 40 -7.84237 -0.381281 -0.321657 40 -5.69585 -0.467778 -0.320122 42 -5.63991 0.84647 -0.318997 40 -5.63252 0.881591 -0.318811 40 -5.63132 0.863304 -0.31844 40 -5.5992 0.98491 -0.317323 62 -5.61059 0.905348 -0.317138 40 -5.60772 0.92297 -0.317138 40 -5.64196 0.594681 -0.316211 40 -5.61285 0.797539 -0.315838 40 -5.60637 0.814613 -0.315466 40 -5.62596 0.575211 -0.314538 40 -5.62663 0.548511 -0.314353 40 -5.59954 0.777783 -0.314351 40 -5.93109 1.23689 -0.313954 53 -5.60837 0.609108 -0.313237 40 -5.5586 0.950997 -0.313049 40 -5.62274 0.405866 -0.312867 40 -5.58537 0.749086 -0.312678 40 -5.62275 -0.345986 -0.3125 40 -5.91545 1.21416 -0.312222 75 -5.60615 0.511087 -0.312123 40 -5.59356 0.634238 -0.312122 40 -5.6253 -0.0364063 -0.311755 40 -5.60548 0.448965 -0.311565 40 -5.5856 0.651145 -0.311564 40 -5.62108 -0.0628511 -0.311383 40 -5.6214 -0.0187019 -0.311383 40 -5.60205 0.466417 -0.311379 40 -5.57834 0.694755 -0.311378 40 -5.5419 0.930324 -0.31119 56 -5.6009 0.430923 -0.311008 40 -5.56794 0.729043 -0.31082 40 -5.58865 0.527273 -0.310635 40 -5.56822 0.711304 -0.310634 40 -5.60047 -0.318022 -0.31027 40 -5.6075 -0.000974375 -0.310082 40 -5.5859 0.491653 -0.310078 40 -5.5677 0.666867 -0.310077 40 -5.89573 1.18107 -0.30997 85 -5.58822 0.385896 -0.309521 40 -5.88965 1.16058 -0.309104 90 -5.59299 -0.0799806 -0.308781 40 -5.5935 0.0254526 -0.30878 40 -5.57549 0.367487 -0.30822 40 -5.88154 1.13974 -0.308065 83 -5.5683 -0.439105 -0.30804 47 -7.58911 0.948179 -0.307829 51 -5.56684 -0.377421 -0.307482 40 -5.57645 -0.114719 -0.307294 40 -5.56204 -0.359517 -0.306924 40 -5.56565 -0.298339 -0.306924 40 -5.86749 1.11783 -0.306505 84 -5.94664 -0.51648 -0.30617 161 -5.54911 -0.402423 -0.305995 40 -5.92988 -0.646702 -0.305825 66 -5.56085 -0.0968488 -0.305807 40 -5.5535 -0.262641 -0.305623 40 -5.86237 1.06915 -0.305293 125 -5.85899 1.08756 -0.305293 76 -5.53988 -0.419218 -0.305252 40 -5.9199 -0.664474 -0.305132 102 -5.54871 -0.236186 -0.305065 40 -5.54336 0.339298 -0.305061 40 -7.02308 0.210192 -0.304843 40 -5.91999 -0.626863 -0.304785 81 -5.54212 -0.200993 -0.304321 40 -5.53475 -0.2791 -0.30395 40 -5.53748 -0.218226 -0.303949 40 -5.53367 0.260311 -0.30376 40 -7.00644 0.231668 -0.30367 40 -5.53764 0.0428541 -0.303576 40 -5.52841 0.286197 -0.303388 40 -5.53249 0.121064 -0.303204 96 -5.52549 0.303463 -0.303202 40 -5.52739 0.164412 -0.302832 124 -5.52752 0.0601895 -0.302646 181 -5.83435 1.04497 -0.302521 116 -5.52488 0.103572 -0.30246 114 -5.89313 -0.596083 -0.302186 88 -5.51059 0.320079 -0.301901 40 -5.51417 0.138082 -0.301531 110 -5.88704 -0.576822 -0.301493 91 -5.51169 -0.156404 -0.301347 40 -5.51215 -0.139089 -0.301347 40 -5.51323 0.0860843 -0.301345 113 -5.50495 0.181159 -0.300787 70 -5.49724 -0.173214 -0.300046 40 -5.85906 -0.555636 -0.298894 81 -5.47477 0.240586 -0.298184 40 -5.84886 -0.536188 -0.297854 75 -5.85043 -0.471544 -0.297507 42 -5.7488 0.917702 -0.29334 40 -5.76656 0.68958 -0.292129 40 -5.73789 0.89742 -0.292127 40 -5.73418 0.869142 -0.291434 40 -5.76466 0.57931 -0.290917 40 -5.75485 0.669786 -0.290916 40 -5.7662 0.542884 -0.290744 40 -5.74657 0.705428 -0.290569 40 -5.77206 0.397369 -0.290225 40 -5.72831 0.813039 -0.290222 40 -5.72112 0.848712 -0.290048 40 -6.76491 0.886766 -0.289877 40 -5.74602 0.60473 -0.28953 40 -5.75441 0.496139 -0.289358 40 -5.76566 0.305971 -0.289186 40 -5.76194 0.369347 -0.289185 40 -6.80132 0.395454 -0.289146 40 -5.76017 0.332888 -0.288839 40 -6.80518 0.149374 -0.288708 40 -5.74947 0.459303 -0.288665 40 -5.73221 0.621436 -0.288491 40 -5.73023 0.639442 -0.288491 40 -5.75313 0.350594 -0.288319 40 -5.7476 0.431888 -0.288319 40 -5.6889 0.926215 -0.288315 48 -5.74297 0.413374 -0.287799 40 -6.79285 0.0103148 -0.287682 40 -5.74868 0.28688 -0.287627 40 -6.79073 -0.0430308 -0.287536 40 -6.78614 -0.192295 -0.28739 40 -5.69854 0.781282 -0.287277 40 -5.66968 0.968799 -0.287275 62 -5.6666 0.986607 -0.287275 67 -6.78152 -0.213502 -0.287097 40 -6.78467 0.0529027 -0.287095 40 -6.78405 0.106187 -0.287095 40 -6.78186 -0.117587 -0.286949 40 -6.78169 0.127454 -0.286948 40 -5.72505 0.511605 -0.286932 40 -6.78048 0.0741569 -0.286801 40 -6.77674 -0.17076 -0.286656 40 -6.7766 -0.0642856 -0.286509 40 -6.77683 0.0315183 -0.286508 40 -6.71522 0.912285 -0.286503 40 -5.71491 0.555948 -0.286412 40 -6.77348 -0.138758 -0.286363 40 -6.77023 -0.0961547 -0.286069 40 -5.68952 0.743594 -0.286064 40 -5.65895 0.948615 -0.286063 91 -6.76282 -0.287438 -0.285924 40 -6.76369 -0.266191 -0.285923 40 -8.81465 0.280167 -0.285781 40 -6.76689 -0.0217118 -0.285775 40 -5.68901 0.716258 -0.285718 40 -8.80284 0.501483 -0.285667 84 -6.76088 -0.234192 -0.28563 40 -8.81259 0.210846 -0.285556 83 -8.79288 0.62574 -0.285554 76 -5.71228 0.474234 -0.285547 40 -5.97464 1.23122 -0.285522 40 -6.74763 0.424046 -0.285332 40 -8.79265 0.570234 -0.285329 78 -8.79324 0.52868 -0.285217 84 -8.80522 0.183016 -0.285107 92 -8.79585 0.404148 -0.284993 84 -8.79041 0.473115 -0.28488 82 -8.78284 0.597334 -0.28488 77 -5.97066 1.2109 -0.284872 40 -5.67334 0.75955 -0.284851 40 -8.78855 0.431503 -0.284656 82 -8.79077 0.334775 -0.284544 86 -8.78978 0.30709 -0.284432 50 -8.78779 0.155091 -0.284095 90 -8.78111 0.375876 -0.284094 86 -8.78355 0.251653 -0.283983 56 -8.78474 0.0860386 -0.283871 47 -8.78243 0.113617 -0.283758 53 -5.97817 1.07621 -0.283408 40 -5.69317 -0.351743 -0.283127 44 -8.75709 -0.326989 -0.282637 40 -5.67831 -0.395669 -0.282088 51 -5.69154 0.0778867 -0.282084 60 -5.94474 1.15726 -0.281943 40 -5.92356 1.18221 -0.280641 40 -5.65385 -0.429777 -0.280182 60 -5.65226 -0.367224 -0.279662 66 -8.70216 -0.352156 -0.279602 40 -6.61999 0.824914 -0.278729 40 -5.64252 -0.331057 -0.278622 40 -8.68306 -0.378658 -0.278591 40 -5.63131 -0.410384 -0.278103 41 -5.8974 1.12905 -0.277712 40 -5.63669 0.200936 -0.277579 153 -5.96156 -0.682571 -0.277399 40 -5.95774 -0.663152 -0.276911 40 -5.95882 -0.634849 -0.276748 40 -5.62608 0.218211 -0.276713 103 -6.59015 0.789543 -0.276235 40 -5.6134 0.182341 -0.2755 158 -5.8833 1.04049 -0.275271 40 -5.61108 0.120505 -0.275154 140 -5.61068 0.138131 -0.275154 153 -5.61022 0.155757 -0.275154 161 -6.60698 0.435513 -0.275064 40 -5.937 -0.613563 -0.274795 40 -5.60561 0.093933 -0.274634 166 -5.87082 1.01935 -0.27397 40 -6.57632 0.526864 -0.273303 69 -6.57428 0.474744 -0.272863 91 -6.56999 0.505558 -0.272716 119 -6.56779 0.453506 -0.272277 60 -6.55873 0.546133 -0.272129 72 -5.89925 -0.590763 -0.27154 40 -5.89577 -0.543646 -0.270889 40 -5.89006 -0.561768 -0.270563 40 -5.86172 -0.52178 -0.267959 44 -5.78614 0.921019 -0.265834 40 -5.75466 0.953236 -0.263718 40 -7.56276 0.953845 -0.2635 40 -5.74573 0.970341 -0.26323 40 -5.74581 0.933289 -0.262742 40 -6.87781 0.894688 -0.25946 61 -6.91719 0.417235 -0.259056 148 -5.73534 -0.401135 -0.256893 40 -5.7215 -0.336914 -0.255428 40 -5.68371 -0.424222 -0.252825 40 -6.76612 0.9022 -0.252008 52 -6.81576 -0.0600267 -0.251336 91 -6.80852 -0.273997 -0.251202 100 -6.81224 -0.156318 -0.251201 79 -6.74084 0.996056 -0.251194 60 -6.80812 -0.231137 -0.251066 86 -6.8097 0.0684131 -0.250929 90 -6.79892 0.389117 -0.250927 67 -6.79634 0.431827 -0.250927 76 -6.80671 -0.134776 -0.250795 96 -6.80727 -0.102698 -0.250795 104 -6.80315 -0.198854 -0.25066 86 -6.80604 0.014935 -0.250658 90 -6.80357 -0.0812486 -0.250523 75 -6.80206 -0.0064281 -0.250387 88 -6.79576 -0.177244 -0.250118 87 -6.79801 -0.0277644 -0.250117 82 -6.79548 0.0896738 -0.24998 96 -6.79392 0.04697 -0.249845 99 -6.78324 -0.304909 -0.249576 73 -5.65749 0.156374 -0.249566 55 -6.78719 0.110924 -0.249438 95 -5.65655 0.111906 -0.249403 61 -6.78144 -0.251464 -0.249305 88 -6.73062 0.800982 -0.248756 87 -5.63026 0.129202 -0.247288 114 -6.70656 0.766194 -0.24686 89 -6.67185 0.943356 -0.246046 40 -6.6649 0.963754 -0.245775 40 -6.68471 0.456793 -0.243475 97 -6.66532 0.476579 -0.242255 118 -6.64798 0.569944 -0.241577 94 -6.63155 0.736827 -0.241576 106 -6.64377 0.548586 -0.241171 113 -8.0171 -0.385482 -0.241161 40 -6.63434 0.51639 -0.240358 110 -6.63195 0.495265 -0.240087 98 -6.61036 0.587785 -0.239138 70 -8.85243 -0.304169 -0.238385 169 -6.5884 0.690343 -0.238325 85 -7.14068 0.979059 -0.23765 40 -6.57628 0.710006 -0.237647 101 -6.57773 0.637101 -0.237241 96 -6.57371 0.657571 -0.237105 76 -6.57373 0.615899 -0.236835 126 -7.863 0.936171 -0.235084 40 -8.76852 0.58098 -0.234839 73 -8.7616 0.67736 -0.234838 58 -8.7684 0.484185 -0.234536 83 -8.75346 0.704381 -0.234535 88 -8.76034 0.552773 -0.234333 79 -8.74606 0.745272 -0.234332 78 -8.76838 0.359917 -0.234233 85 -8.77066 0.139379 -0.234032 87 -8.7599 0.456087 -0.23403 82 -8.75605 0.524872 -0.23403 79 -8.76348 0.332126 -0.23393 82 -8.76382 0.263222 -0.233829 65 -8.7573 0.42836 -0.233828 83 -8.75723 0.386992 -0.233727 81 -8.76131 0.208045 -0.233627 87 -8.76061 0.235567 -0.233627 87 -8.75632 -0.246082 -0.233427 65 -8.75741 -0.0809829 -0.233325 75 -8.73381 0.647525 -0.233321 66 -8.75451 -0.149732 -0.233224 71 -8.73477 0.606219 -0.23322 113 -8.75308 0.111542 -0.233122 86 -8.7474 -0.204611 -0.232921 61 -8.74222 0.166318 -0.232615 87 -8.74152 0.0701617 -0.232515 77 -8.73801 -0.176958 -0.232415 115 -6.52651 -0.364344 -0.23237 40 -8.73777 -0.0259567 -0.232313 57 -8.73301 0.289669 -0.232311 95 -8.73155 -0.272913 -0.232213 59 -8.73365 -0.0533969 -0.232111 127 -8.72772 0.0425889 -0.231807 70 -8.72381 0.0151506 -0.231605 129 -8.6433 -0.338379 -0.227864 75 -7.72519 0.944833 -0.22744 40 -7.6612 0.973872 -0.224068 40 -6.3668 -0.394943 -0.221666 40 -6.90594 0.441575 -0.219758 146 -6.87748 -0.382389 -0.217775 40 -6.79326 0.799955 -0.214784 84 -6.80297 0.45607 -0.21342 71 -6.8015 0.477442 -0.213419 84 -6.80371 0.41319 -0.213296 72 -6.76031 0.871447 -0.213293 40 -6.7952 0.509172 -0.213171 95 -6.7897 -0.249606 -0.211933 90 -6.79113 -0.206941 -0.211933 85 -6.79175 -0.185603 -0.211932 89 -6.79299 -0.132256 -0.211932 87 -6.79027 -0.0148751 -0.211683 104 -6.79003 0.0597858 -0.211682 93 -6.76969 0.528562 -0.211679 89 -6.78739 -0.110839 -0.211559 87 -6.78805 -0.0575286 -0.211559 80 -6.78827 0.0171103 -0.211558 90 -6.7442 0.772505 -0.211553 69 -6.78421 -0.0361985 -0.21131 63 -6.78368 0.0916796 -0.211309 90 -6.77847 -0.227917 -0.211187 90 -6.78057 -0.153371 -0.211187 87 -6.70913 0.993612 -0.211179 62 -6.77985 -0.0787933 -0.211062 82 -6.77737 0.112868 -0.210936 79 -6.77022 0.0382659 -0.21044 89 -6.76251 -0.280622 -0.210317 52 -6.70471 0.89622 -0.210061 40 -6.69697 0.938044 -0.209937 40 -6.7012 -0.352147 -0.206714 40 -6.62882 0.949487 -0.205835 40 -6.6407 0.538995 -0.203725 119 -6.62815 0.569389 -0.203104 92 -5.97551 1.22453 -0.202687 40 -7.2688 0.971761 -0.20215 40 -6.60049 0.587806 -0.201488 59 -5.9538 1.191 -0.20079 40 -5.94771 1.17041 -0.200113 40 -5.94352 1.15023 -0.199571 40 -6.5202 0.63201 -0.196765 92 -6.51913 0.600895 -0.196517 108 -5.89196 1.11173 -0.195642 40 -5.8915 1.0925 -0.195371 47 -6.48641 0.649182 -0.194777 86 -6.47888 0.720464 -0.194776 89 -6.48236 0.669345 -0.194652 110 -6.48022 0.689705 -0.194652 120 -5.93669 -0.629587 -0.193893 40 -5.93761 -0.601394 -0.193757 40 -5.93153 -0.581924 -0.193215 40 -5.92116 -0.543307 -0.192266 40 -5.91347 -0.561313 -0.19186 40 -5.9177 -0.514853 -0.19186 40 -8.8546 -0.323561 -0.188225 31 -5.78796 0.942717 -0.186701 40 -8.79189 0.508207 -0.185797 76 -6.35803 -0.37551 -0.185463 40 -8.78346 0.48007 -0.185349 111 -8.78293 0.452374 -0.185259 68 -8.77366 0.576366 -0.185168 93 -8.78753 0.231424 -0.185081 79 -8.76982 0.603796 -0.185078 85 -8.77144 0.548562 -0.184989 96 -8.7865 0.0381319 -0.184902 65 -8.78209 0.0933058 -0.184722 79 -8.77615 -0.279058 -0.184635 65 -5.75934 0.919635 -0.184533 40 -8.77156 0.134567 -0.184273 111 -8.7671 0.16206 -0.184094 79 -8.76655 0.189602 -0.184094 109 -8.76479 0.258447 -0.184093 99 -8.76036 0.065616 -0.183735 64 -8.75195 0.285624 -0.183554 62 -5.80642 -0.339577 -0.183458 40 -5.73619 0.962271 -0.183449 40 -5.76523 -0.418862 -0.18102 40 -8.68673 -0.371607 -0.180776 30 -7.65998 0.953728 -0.180713 40 -8.67388 -0.343721 -0.180147 30 -6.92059 0.519902 -0.180009 67 -7.63714 0.975193 -0.179701 53 -6.93365 -0.0790973 -0.179676 59 -6.9341 -0.00285282 -0.179675 70 -5.74462 -0.399127 -0.179529 40 -6.92902 -0.122574 -0.179451 62 -6.90634 0.57345 -0.179447 40 -6.90413 0.551449 -0.179222 40 -6.92038 -0.155017 -0.179002 61 -6.91427 -0.23095 -0.178778 40 -6.91328 -0.1983 -0.178665 40 -6.9161 0.0189482 -0.178664 61 -6.9114 -0.100476 -0.17844 97 -5.72852 -0.370811 -0.17831 40 -6.9 -0.0460667 -0.177765 85 -6.89597 0.0514651 -0.177539 64 -6.89412 -0.0243471 -0.177427 114 -8.60969 -0.395186 -0.177365 42 -6.88992 -0.175879 -0.177316 56 -6.80035 0.889098 -0.175398 40 -6.77721 0.983746 -0.174836 40 -6.76941 0.939276 -0.174049 40 -6.78252 -0.364845 -0.171697 40 -6.03479 1.02726 -0.170043 40 -6.73535 0.581203 -0.169893 40 -6.71568 -0.413927 -0.168101 40 -6.05666 -0.292171 -0.166448 40 -6.63506 0.604441 -0.164385 40 -6.57 0.713379 -0.161349 82 -6.56574 0.733803 -0.161237 85 -6.57148 0.619712 -0.1609 79 -6.56154 0.639611 -0.16045 105 -6.54455 0.669157 -0.159664 123 -6.54241 0.689714 -0.159663 100 -5.78173 0.917739 -0.15339 40 -5.77882 0.9359 -0.15339 40 -5.7483 0.949372 -0.15165 40 -7.92959 0.925296 -0.148814 48 -5.73929 -0.386745 -0.147061 84 -7.79146 0.884842 -0.142442 56 -6.91955 -0.0911841 -0.140253 90 -7.73415 0.927761 -0.140108 34 -7.71382 0.962273 -0.13939 27 -6.77562 0.938082 -0.136199 64 -6.73784 0.889572 -0.133974 88 -6.66336 0.97553 -0.130837 74 -6.63262 0.992213 -0.129421 44 -8.77447 0.491014 -0.129389 32 -8.76767 0.338756 -0.128851 32 -8.75743 0.434822 -0.128619 32 -8.75888 0.241965 -0.128389 32 -8.75807 0.269479 -0.128389 32 -8.75452 0.17303 -0.128159 32 -8.74405 0.461667 -0.128157 32 -8.74097 0.516596 -0.128157 32 -8.73277 0.612527 -0.128079 92 -8.74902 0.145408 -0.127928 32 -8.74321 0.296478 -0.12785 32 -8.73928 -0.294177 -0.127699 32 -8.7439 0.0766195 -0.127697 32 -8.74162 0.213953 -0.127696 32 -8.73145 0.117628 -0.127234 32 -8.71451 0.556182 -0.127232 60 -8.70674 0.583138 -0.127001 115 -8.70221 -0.265677 -0.126235 74 -8.69186 -0.33373 -0.125927 32 -5.89391 0.972659 -0.125604 40 -6.58162 0.59606 -0.124466 183 -5.87673 0.941493 -0.124367 40 -5.87768 0.922725 -0.124255 40 -5.86475 0.901897 -0.123356 40 -6.51732 0.734848 -0.121936 137 -6.51364 0.713695 -0.121633 80 -6.5191 0.621147 -0.121431 116 -6.51513 0.641421 -0.12133 116 -6.51781 0.569384 -0.121128 91 -6.50117 0.660627 -0.120723 147 -6.49906 0.681047 -0.120722 116 -5.85054 -0.394167 -0.119431 40 -6.86019 0.880573 -0.100884 23 -6.87414 0.554903 -0.0999882 79 -6.86389 0.532424 -0.0994498 65 -7.95613 0.93413 -0.0994195 29 -6.86955 -0.115598 -0.0988257 75 -6.8444 0.498558 -0.0984627 118 -6.85517 -0.136847 -0.0981976 69 -6.84989 -0.190556 -0.0980184 73 -6.84852 -0.0183313 -0.0978377 91 -6.84447 -0.168865 -0.0977489 122 -6.84643 -0.0398292 -0.0977481 49 -6.84391 -0.0935624 -0.0976587 87 -6.83828 -0.0612343 -0.0973893 64 -6.83656 0.00322256 -0.097299 95 -6.71981 0.906022 -0.0947799 75 -6.64521 0.949421 -0.0917279 22 -6.67439 -0.405662 -0.0905699 22 -5.85395 0.891459 -0.0896628 40 -5.90756 -0.341812 -0.089469 61 -5.83889 0.936109 -0.0892578 118 -5.82208 0.914574 -0.0882463 40 -6.5512 0.957361 -0.0875989 22 -5.85561 -0.403662 -0.0870415 42 -7.62638 0.979485 -0.0870163 27 -5.84621 -0.292494 -0.0862314 118 -6.56298 0.582866 -0.0861653 22 -5.8389 -0.384165 -0.0861309 110 -6.55913 0.603305 -0.0860754 22 -5.84078 -0.319841 -0.0860293 119 -5.84111 -0.273873 -0.0859278 84 -6.53183 0.714867 -0.0853566 69 -6.52212 0.693124 -0.0848182 88 -6.51233 0.671448 -0.0842798 102 -6.50645 0.650223 -0.0839209 88 -6.50348 0.619012 -0.0836518 130 -8.74149 -0.306728 -0.0731822 43 -8.72052 -0.333364 -0.0725377 47 -8.59318 0.944502 -0.0698873 40 -6.09912 0.226117 -0.0643565 20 -5.94282 0.918597 -0.0603126 19 -5.91621 0.933628 -0.0592354 19 -5.97138 0.268896 -0.0587015 77 -5.94428 -0.395946 -0.0578085 19 -5.95023 0.249309 -0.0577142 83 -5.94855 0.286691 -0.057714 102 -5.92035 -0.328887 -0.0565514 19 -5.89143 -0.308588 -0.0552049 48 -5.88639 -0.289757 -0.0549355 43 -6.82764 0.548729 -0.0546635 24 -6.81701 0.58019 -0.0543552 24 -6.81738 0.526309 -0.0542014 24 -6.81315 -0.0851703 -0.0532809 24 -6.81138 -0.0637561 -0.0532037 24 -6.8038 -0.159921 -0.0529732 24 -6.80355 -0.0423361 -0.0528954 24 -6.80168 0.0110886 -0.052818 24 -6.79961 0.0324396 -0.0527409 24 -6.74193 0.884399 -0.0527355 24 -6.79166 -0.0209722 -0.052433 24 -6.78829 -0.138281 -0.0523567 24 -6.7767 -0.116793 -0.0518944 24 -6.75702 -0.190858 -0.0512015 35 -6.6774 0.929111 -0.0505011 23 -7.77809 0.894498 -0.0435845 139 -6.48999 0.664271 -0.0421058 22 -6.48409 0.643058 -0.0417978 22 -6.4667 0.713181 -0.0414121 63 -6.468 0.682481 -0.0413352 46 -7.67255 0.968273 -0.0404896 40 -8.73439 -0.284979 -0.028281 49 -8.50762 0.955438 -0.0234521 42 -5.92206 -0.272943 -0.0191551 20 -5.91374 -0.319148 -0.0189243 20 -5.91318 -0.291188 -0.0188471 20 -5.90092 -0.253491 -0.0183076 20 -6.83702 0.583395 -0.0123838 100 -6.83483 0.5616 -0.012255 79 -6.82822 0.615091 -0.0121902 74 -6.77681 0.728852 -0.0109001 40 -6.80552 -0.179527 -0.010648 63 -6.80273 -0.125982 -0.0105187 60 -6.74129 0.875443 -0.0103189 40 -6.79007 -0.157715 -0.0101321 123 -6.78495 -0.20024 -0.0100035 44 -6.75458 0.63013 -0.00986924 40 -6.72463 0.894827 -0.00986753 40 -6.66036 0.907816 -0.00786889 61 -6.67365 0.696962 -0.00748349 40 -6.57085 0.927513 -0.00509666 40 -6.56145 0.654456 -0.00374456 40 -6.53959 0.631626 -0.00297109 40 -7.72402 0.926531 -0.00226817 40 -7.68537 0.946274 -0.0012928 40 -7.65064 0.966297 -0.00042579 40 -6.06509 0.877574 0.0112781 40 -6.00858 0.917848 0.01289 40 -6.00492 0.888385 0.0131477 40 -6.02584 -0.355162 0.0142353 40 -5.95033 0.92833 0.0146952 40 -6.01148 -0.32583 0.0147512 40 -5.97364 -0.389549 0.0158467 51 -5.9655 -0.285549 0.0162987 91 -5.95888 -0.369721 0.0163626 40 -5.95859 -0.303958 0.016492 97 -5.95081 -0.256676 0.0168146 64 -6.8535 -0.175345 0.0227557 40 -6.78976 -0.00328047 0.0245447 67 -6.72977 0.900607 0.0245505 40 -6.78605 -0.152544 0.0245979 58 -6.78487 -0.109879 0.0246524 73 -6.78532 -0.0779056 0.0246526 73 -6.78553 -0.0565883 0.0246527 76 -6.7825 -0.131163 0.0247064 77 -6.77368 -0.0352557 0.024978 74 -6.76775 0.0179078 0.0251408 92 -6.6497 0.910865 0.0266636 40 -6.61317 0.926902 0.0275847 40 -5.30802 0.26614 0.0375124 156 -6.09854 0.882065 0.0415627 40 -5.16706 0.316741 0.0419611 255 -6.03756 0.911772 0.04308 40 -6.07206 -0.311134 0.043776 40 -6.00877 0.887989 0.0439467 40 -5.99964 0.934836 0.0440012 40 -6.03858 -0.338093 0.0446427 40 -6.00954 -0.35553 0.0454011 40 -5.97514 -0.287769 0.0464309 101 -5.96648 -0.371976 0.0465387 40 -5.96603 -0.268591 0.046702 100 -5.95885 -0.249546 0.0469188 69 -4.8213 0.388596 0.0529212 40 -4.8171 0.36545 0.0531145 45 -4.81158 0.266416 0.0535005 51 -4.81339 0.122636 0.0536284 49 -4.81295 0.00164626 0.0536919 49 -4.80287 0.311395 0.0536943 54 -4.80027 0.349107 0.0536946 54 -4.80718 0.190532 0.0537578 44 -4.80623 0.213183 0.053758 46 -4.80628 0.160269 0.053822 51 -4.80074 0.280999 0.053823 40 -4.80376 0.175305 0.0538866 52 -4.80465 0.05452 0.0539502 42 -4.79337 0.333512 0.0539523 59 -4.79845 0.0695596 0.0541437 48 -4.79776 0.107244 0.054144 57 -4.79699 0.137386 0.0541442 48 -4.7965 -0.0660852 0.0542071 46 -4.79408 0.0921144 0.0542728 43 -4.7888 0.0393806 0.0544658 45 -4.78495 -0.0132436 0.0545943 43 -4.7827 -0.0507914 0.0546585 47 -4.77888 -0.028208 0.0547876 47 -4.77894 0.0168331 0.054788 40 -4.73763 0.225424 0.05595 40 -5.17028 0.381893 0.068053 40 -6.76642 0.884583 0.068895 30 -6.79196 -0.0238078 0.0695416 30 -6.68231 0.895262 0.0705671 73 -6.70388 -0.0442239 0.0713358 30 -6.64761 -0.0749638 0.0724775 30 -6.52539 -0.0936106 0.0749649 30 -6.32715 -0.109862 0.079002 32 -4.74545 0.468582 0.079323 63 -4.74961 0.401271 0.0793766 49 -4.74197 0.483274 0.0793773 48 -4.75062 0.363793 0.0794305 69 -4.74093 0.453069 0.0794854 47 -4.74235 0.415635 0.0795393 64 -4.74102 0.43053 0.0795394 48 -6.29279 -0.128901 0.0796952 67 -4.7369 0.385138 0.0797557 66 -6.20765 0.744402 0.0805574 76 -6.19252 0.861274 0.0805582 61 -6.18574 0.79117 0.080884 30 -6.18621 0.771493 0.0809246 56 -4.6956 0.255533 0.0811093 40 -6.1454 0.894292 0.0814149 30 -6.19336 -0.243317 0.0816519 30 -6.18566 -0.17488 0.0818562 77 -6.18309 -0.194241 0.0818968 83 -6.17811 -0.223215 0.0819783 99 -6.18019 -0.155271 0.0819787 63 -6.16334 -0.329349 0.0821814 30 -4.64957 0.289425 0.0823015 40 -6.09561 0.916595 0.082353 30 -4.65138 0.17232 0.0824089 40 -4.64317 0.325631 0.0824101 40 -6.0947 0.867598 0.0825158 30 -4.64066 0.303465 0.0825183 40 -4.6478 0.0844759 0.0825707 40 -4.64389 0.208544 0.0825717 40 -4.64122 0.223025 0.082626 40 -4.64049 0.237604 0.0826261 40 -4.64083 0.186475 0.0826799 40 -4.63901 0.120724 0.0827877 40 -4.6386 0.135297 0.0827879 40 -4.6325 0.273655 0.0827889 40 -4.63825 0.0550963 0.0828414 40 -4.63406 0.0695863 0.0829499 40 -6.12436 -0.346405 0.0829561 30 -4.62992 0.15684 0.0830047 40 -4.62737 0.105808 0.0831127 40 -6.11268 -0.374606 0.0831598 30 -6.10867 -0.258861 0.0833645 30 -6.10246 -0.306612 0.0834458 30 -6.08342 -0.286413 0.0838537 30 -6.06958 -0.39093 0.0840161 49 -4.88638 0.560421 0.107757 30 -6.264 0.951536 0.108047 40 -6.10289 0.906765 0.110658 40 -4.73954 0.55945 0.110734 33 -6.09779 0.886405 0.110784 40 -6.10321 0.818756 0.110846 40 -6.09461 0.866375 0.110878 40 -4.73106 0.490827 0.11106 30 -4.73871 0.386525 0.1111 30 -4.73078 0.453295 0.111141 30 -4.72934 0.468157 0.111141 30 -6.08594 0.796899 0.11116 40 -6.08081 0.83512 0.111161 40 -4.74766 0.162758 0.11118 30 -4.7315 0.400937 0.111222 30 -6.08407 0.748065 0.111286 40 -4.74113 0.177481 0.111302 30 -4.73608 0.281692 0.111303 30 -4.72557 0.422894 0.111304 30 -4.71756 0.504479 0.111305 30 -6.07971 0.766916 0.111318 40 -4.72794 0.370765 0.111344 30 -4.73225 0.199527 0.111465 30 -4.71625 0.437043 0.111467 30 -6.07674 0.708383 0.111474 40 -6.08687 0.574196 0.111537 52 -6.0892 0.526193 0.111568 60 -4.71873 0.332841 0.111589 30 -6.10011 -0.308084 0.111625 40 -4.72097 0.265999 0.111629 30 -6.07008 0.678588 0.111632 40 -4.71521 0.295428 0.111711 30 -6.09037 -0.374795 0.111719 40 -6.09714 -0.240779 0.11172 40 -6.06622 0.65884 0.111726 64 -4.71492 0.228571 0.111792 30 -4.69208 0.516801 0.111794 30 -6.08661 -0.336215 0.111814 40 -4.70778 0.317275 0.111833 30 -4.70569 0.346848 0.111834 30 -6.08353 -0.355226 0.111845 40 -6.08707 -0.288315 0.111845 40 -6.07445 0.486409 0.111851 63 -6.05067 0.724515 0.111852 40 -4.71481 0.124754 0.111873 30 -6.05832 0.638689 0.111883 72 -6.06492 0.504793 0.111977 93 -6.05331 0.609297 0.112009 73 -4.70363 0.21328 0.112036 30 -6.07679 -0.115878 0.112098 40 -6.07255 -0.201715 0.112129 40 -6.07394 -0.154015 0.112129 40 -6.05168 0.541954 0.112134 86 -6.07327 -0.0872021 0.112161 40 -6.05814 0.437163 0.112165 40 -6.05674 0.456192 0.112165 49 -6.04524 0.589264 0.112166 77 -6.06788 -0.220663 0.112192 40 -6.06943 -0.173 0.112192 40 -4.68982 0.249643 0.112281 30 -6.05797 -0.267993 0.112317 40 -6.06354 0.0652956 0.11232 59 -6.0584 -0.134647 0.112381 40 -6.05502 0.103222 0.112446 48 -6.04575 0.350357 0.112447 40 -6.03954 0.416665 0.112479 40 -6.03944 0.388064 0.112511 40 -6.0459 -0.00145076 0.112602 77 -6.04587 0.0175432 0.112602 81 -6.03926 0.283351 0.112604 40 -6.03736 0.321291 0.112605 40 -6.03465 0.368698 0.112605 40 -6.0417 -0.0489193 0.112665 78 -6.03434 0.302104 0.112667 40 -6.03952 -0.0678859 0.112696 40 -6.03372 0.0458901 0.112791 85 -6.03002 0.216448 0.112793 40 -6.02931 0.235391 0.112793 40 -6.03132 0.083764 0.112823 89 -6.02803 0.150016 0.112855 40 -6.02553 0.168888 0.112887 40 -6.02214 0.263512 0.112887 40 -6.02587 -0.0204631 0.112917 83 -6.02267 0.197208 0.112918 40 -6.01648 0.130766 0.113044 40 -6.20175 0.923635 0.150132 25 -6.16125 0.868398 0.150569 41 -6.16646 0.800102 0.150605 65 -6.15453 0.887196 0.150606 35 -6.14611 0.846656 0.150733 63 -6.17779 -0.357932 0.150871 25 -6.13416 0.815642 0.150879 87 -6.13718 0.776841 0.150897 100 -6.17289 -0.338169 0.150925 25 -6.16993 -0.318553 0.150962 25 -6.13084 0.746746 0.150988 63 -6.13681 0.659589 0.151023 67 -6.12521 0.726571 0.15106 104 -6.11752 0.706221 0.151151 64 -6.10579 0.685496 0.151279 102 -6.13229 -0.268168 0.151327 67 -6.10301 0.617356 0.151369 86 -6.0997 0.568695 0.151442 40 -6.09946 0.549358 0.15146 38 -6.0891 0.635331 0.151479 91 -6.11587 -0.228883 0.151491 69 -6.09191 0.587305 0.151497 44 -6.11099 -0.296009 0.151509 91 -6.11488 -0.199987 0.151509 109 -6.11548 -0.180775 0.15151 64 -6.10713 -0.247737 0.151564 101 -6.11002 -0.161378 0.151564 69 -6.10998 -0.046161 0.151583 61 -6.10543 -0.0940679 0.151619 72 -6.1011 -0.113159 0.151656 68 -6.09872 -0.132272 0.151674 113 -6.08479 0.432695 0.151678 38 -6.07724 0.528217 0.151678 37 -6.07368 0.499109 0.151733 38 -6.07142 0.393489 0.151823 38 -6.08202 0.0401523 0.151839 75 -6.07232 0.345688 0.151841 38 -6.06473 0.46008 0.151842 39 -6.08015 -0.00760535 0.151857 78 -6.0777 -0.0744253 0.151875 95 -6.07446 0.211955 0.151877 40 -6.07038 0.307342 0.151877 37 -6.07612 0.021051 0.151893 72 -6.06522 0.364428 0.151896 40 -6.05727 0.478683 0.151897 39 -6.07285 0.125995 0.151912 39 -6.07167 0.173687 0.151913 65 -6.0711 0.192762 0.151913 37 -6.0721 -0.0266375 0.15193 88 -6.05818 0.411798 0.151933 40 -6.0614 0.326016 0.15195 39 -6.06787 0.059183 0.151967 73 -6.06752 0.087776 0.151967 70 -6.06262 0.259274 0.151968 37 -6.06442 0.144918 0.151985 44 -6.05578 0.278068 0.152023 38 -6.05541 0.239942 0.152041 38 -6.05722 0.106704 0.152058 40 -6.2599 0.871653 0.189518 40 -6.25241 -0.314011 0.189675 40 -6.18024 0.0659896 0.226358 40 -6.17915 0.13394 0.226358 40 -6.18842 0.0465999 0.226384 40 -6.18971 0.104948 0.226391 40 -6.19018 0.173047 0.226397 40 -6.1986 -0.00204991 0.226416 40 -6.19801 0.0855768 0.226416 40 -6.19669 0.153722 0.226417 40 -6.18909 0.377562 0.226425 40 -6.20257 0.0174183 0.226429 40 -6.20994 -0.0899001 0.226454 40 -6.21239 -0.0509061 0.226461 40 -6.21256 -0.0216294 0.226461 40 -6.2162 -0.0704835 0.226473 40 -6.22345 -0.119491 0.226499 40 -6.22128 0.203124 0.226501 40 -6.22404 -0.178204 0.226505 40 -6.22261 0.222733 0.226508 40 -6.23104 -0.139253 0.226525 40 -6.22683 0.311042 0.226534 40 -6.23108 0.262204 0.22654 40 -6.22381 0.399157 0.226541 40 -6.23387 0.242696 0.226547 40 -6.23857 -0.159066 0.226551 40 -6.22585 0.42874 0.226554 40 -6.23577 0.291819 0.22656 40 -6.23219 0.360366 0.22656 40 -6.23781 0.331188 0.226573 40 -6.24512 -0.208357 0.226576 40 -6.25243 -0.228301 0.226602 40 -6.24443 0.44965 0.226619 40 -6.24547 0.489172 0.226633 40 -6.25096 0.469833 0.226645 40 -6.25107 0.519226 0.226659 40 -6.27766 -0.249081 0.226686 65 -6.25964 0.559511 0.226698 40 -6.28041 -0.278853 0.226699 70 -6.26336 0.540007 0.226704 40 -6.2649 0.589721 0.226724 40 -6.26904 0.629838 0.22675 40 -6.27696 0.610697 0.226769 40 -6.28391 0.661183 0.226808 40 -6.2818 0.680921 0.226808 40 -6.31689 -0.35027 0.226828 67 -6.28932 0.721697 0.226848 40 -6.28299 0.791047 0.226855 40 -6.29951 0.702787 0.226873 40 -6.30175 0.753158 0.2269 40 -6.35042 -0.322251 0.226931 139 -6.31127 0.774365 0.226939 40 -6.32086 0.825917 0.226991 46 -6.38562 -0.374497 0.227054 40 -6.33736 0.868515 0.227062 71 -6.36981 0.85246 0.227159 69 -6.36886 0.903279 0.227179 47 -6.31638 0.260471 0.263867 18 -6.36656 0.122588 0.264287 19 -6.35798 0.352471 0.264289 19 -6.36547 0.282735 0.264325 19 -6.36024 0.382685 0.264325 19 -6.37391 0.152813 0.264361 19 -6.37283 0.192859 0.264361 19 -6.37311 0.242987 0.26438 19 -6.37006 0.313049 0.26438 19 -6.37966 0.0326847 0.264396 19 -6.3814 0.173085 0.264434 19 -6.37168 0.423624 0.264454 19 -6.38618 0.213402 0.264489 19 -6.37697 0.403875 0.264491 19 -6.39291 0.103112 0.264525 19 -6.38502 0.333959 0.264527 19 -6.39552 0.0529229 0.264543 19 -6.3992 0.0831298 0.26458 19 -6.40972 -0.0173811 0.264671 19 -6.41173 0.0128358 0.26469 19 -6.41203 -0.148333 0.264707 31 -6.39607 0.475844 0.264711 19 -6.40023 0.445847 0.264729 19 -6.41763 -0.0375323 0.264744 19 -6.39853 0.496261 0.264748 19 -6.39693 0.51636 0.264748 19 -6.39642 0.546677 0.264766 19 -6.42527 -0.0779196 0.264817 19 -6.42948 -0.0577516 0.264854 19 -6.41658 0.5688 0.264968 19 -6.41476 0.588956 0.264968 19 -6.44524 -0.179355 0.265018 37 -6.44683 -0.108476 0.265019 19 -6.45645 -0.128889 0.26511 19 -6.43778 0.621781 0.265207 19 -6.43375 0.662219 0.265207 19 -6.46621 -0.312071 0.265256 19 -6.44177 0.642621 0.265262 19 -6.47264 -0.200358 0.265275 38 -6.47597 -0.220811 0.265311 38 -6.44953 0.684398 0.265372 19 -6.50923 -0.242284 0.265623 40 -6.47802 0.718438 0.265666 19 -6.49361 0.740896 0.265831 19 -6.54998 -0.274547 0.266007 19 -6.51537 0.795377 0.266088 43 -6.55908 -0.295534 0.266099 19 -6.51415 0.868055 0.266161 19 -6.52897 0.765869 0.266179 19 -6.52275 0.817123 0.266179 82 -6.60649 -0.349484 0.266557 19 -6.68126 -0.37419 0.267253 20 -6.46968 0.25484 0.307937 57 -6.55741 -0.308945 0.309357 51 -6.61308 0.145549 0.310152 92 -6.61666 0.364185 0.310343 96 -6.62572 0.197846 0.310373 104 -6.6203 0.333094 0.310374 117 -6.62331 0.31238 0.310406 90 -6.63258 0.166749 0.310468 116 -6.63864 0.0208587 0.310531 98 -6.63434 0.239793 0.310532 98 -6.59288 0.811824 0.310599 51 -6.58898 0.842883 0.310599 96 -6.64949 0.125312 0.310721 106 -6.64624 0.292452 0.310754 136 -6.65105 0.219416 0.310785 102 -6.63731 0.480365 0.310787 95 -6.66627 0.0731953 0.310974 107 -6.67201 0.0941991 0.311069 109 -6.66541 0.387679 0.311134 107 -6.67867 -0.000152615 0.311163 108 -6.66615 0.408732 0.311166 103 -6.68246 0.052315 0.311227 110 -6.66569 0.503356 0.311262 115 -6.67413 0.44076 0.311325 104 -6.6842 -0.336475 0.311383 125 -6.68469 0.462506 0.311515 105 -6.71463 -0.0213901 0.311733 112 -6.70711 0.538111 0.311958 113 -6.73053 -0.0426465 0.311986 108 -6.72333 0.560605 0.312243 108 -6.73668 0.6363 0.31256 100 -6.76797 -0.0961918 0.312587 112 -6.74545 0.583701 0.312623 112 -6.77424 -0.07502 0.312682 118 -6.7845 -0.171125 0.312872 120 -6.785 -0.149811 0.312872 126 -6.78963 -0.11792 0.312935 86 -6.76053 0.659888 0.312972 101 -6.76653 0.617573 0.313003 114 -6.87387 -0.195335 0.314296 118 -6.85287 0.701147 0.314491 129 -6.90884 -0.229053 0.314865 118 -6.95804 -0.252758 0.315657 123 -6.92623 0.73036 0.315694 93 -6.95374 0.755242 0.316169 124 -7.00117 -0.276514 0.316353 98 -7.00501 0.782885 0.317024 122 -7.03241 0.841794 0.317563 66 -7.09415 -0.302862 0.31784 165 -7.16226 -0.384969 0.318979 36 -7.13239 0.830678 0.319113 107 -6.82697 0.852998 0.34915 40 -6.90989 -0.291655 0.349896 40 -6.95289 -0.315188 0.350817 40 -6.93675 0.845 0.351411 40 -7.08349 0.347482 0.353585 70 -7.09434 0.370403 0.353836 80 -7.1054 0.192129 0.353919 82 -7.11197 0.169969 0.354044 82 -7.12049 0.32701 0.354338 123 -7.12675 0.215193 0.354379 84 -7.14282 0.271909 0.354757 83 -7.14593 0.294526 0.35484 79 -7.15163 0.249777 0.354924 82 -7.1639 0.0363257 0.35509 82 -7.16437 0.408185 0.355343 86 -7.16785 0.510169 0.355553 78 -7.18643 0.149432 0.355593 86 -7.19197 0.0139748 0.355676 84 -7.185 0.43209 0.355804 84 -7.19938 0.0931847 0.355844 84 -7.19905 0.115802 0.355844 86 -7.1981 0.478345 0.356139 80 -7.19811 0.535174 0.356224 124 -7.20755 0.456261 0.356307 88 -7.22963 0.0709687 0.356472 88 -7.29595 -0.0083685 0.357853 89 -7.27412 0.564089 0.357857 77 -7.33183 -0.0428301 0.358606 89 -7.31521 0.602125 0.358778 91 -7.35109 -0.112163 0.359025 89 -7.35965 -0.0660177 0.359192 90 -7.33717 0.650463 0.359322 80 -7.37247 -0.147164 0.359485 93 -7.34714 0.62812 0.35949 88 -7.3834 -0.0893427 0.359695 89 -7.36587 0.688119 0.359992 113 -7.51791 -0.173182 0.362541 91 -7.49896 0.724804 0.36284 78 -7.57131 -0.198024 0.363671 89 -7.58018 0.75699 0.364598 84 -7.64824 -0.235841 0.365304 89 -7.64935 0.788421 0.366106 86 -7.73141 -0.262434 0.367062 80 -7.76479 0.837726 0.368618 92 -7.9184 -0.293058 0.370998 40 -7.31635 -0.313955 0.394883 55 -7.30054 0.825619 0.395514 40 -7.35525 -0.292614 0.39587 61 -7.39582 0.800787 0.397902 40 -7.73843 0.812094 0.406779 40 -7.91621 0.20557 0.410358 77 -7.9225 0.317825 0.410618 60 -7.95944 -0.293741 0.411549 42 -7.99338 0.34559 0.412487 78 -7.96578 0.809901 0.412646 40 -8.01304 0.169988 0.41285 77 -8.01678 0.0315169 0.412901 63 -8.01639 0.409599 0.413163 81 -8.01938 0.498187 0.413371 65 -8.03753 0.145169 0.413472 132 -8.04863 0.056823 0.413732 59 -8.06193 0.1202 0.414095 53 -8.0638 0.284982 0.414252 116 -8.07041 0.0822619 0.414303 51 -8.08282 -0.00652855 0.414614 40 -8.07155 0.463094 0.414668 139 -8.09293 0.438755 0.415187 85 -8.16673 -0.0325215 0.416794 40 -8.1713 0.804202 0.417941 40 -8.21532 0.238181 0.418146 117 -8.20496 0.625639 0.418407 40 -8.2625 0.265377 0.419392 78 +unknow 0.956381 1 0 230 -11.3243 24.3207 -1.61008 132 -11.3905 24.2633 -1.60845 133 -11.4824 24.1626 -1.60493 130 -12.6281 26.0321 -1.5902 146 -12.7313 25.9329 -1.58747 146 -12.7977 25.8623 -1.58535 146 -12.8602 25.7845 -1.58275 143 -12.9717 25.704 -1.58138 143 -13.0289 25.6168 -1.57815 142 -13.092 25.542 -1.57579 140 -13.1631 25.483 -1.57454 137 -13.2572 25.3711 -1.57106 140 -13.3247 25.3064 -1.56945 152 -13.3883 25.2344 -1.56734 141 -13.475 25.1112 -1.56311 136 -13.5396 25.0424 -1.56125 122 -13.5992 24.9647 -1.55876 169 -13.6936 24.8583 -1.55578 120 -13.7465 24.7698 -1.55255 147 -13.8155 24.7108 -1.55143 134 -13.9121 24.6106 -1.54894 126 -13.9736 24.539 -1.54695 89 -14.0229 24.4465 -1.54348 87 -11.7661 24.4468 -1.47798 137 -11.6729 24.4494 -1.47562 177 -11.5516 24.4914 -1.47475 116 -11.2945 24.543 -1.4709 102 -13.7316 26.5263 -1.47063 175 -11.44 24.4534 -1.46966 129 -13.6226 26.5196 -1.46749 177 -11.3405 24.4404 -1.4663 135 -14.3925 26.0733 -1.46569 137 -13.5093 26.5036 -1.46378 175 -14.2474 26.1006 -1.4631 167 -13.4043 26.5032 -1.46108 168 -14.1272 26.075 -1.45861 145 -14.0348 26.0999 -1.45737 136 -14.1954 24.5218 -1.3842 128 -14.0934 24.523 -1.38139 138 -13.8984 24.6294 -1.38117 140 -13.9796 24.503 -1.37723 142 -12.3499 25.1034 -1.36408 117 -12.3558 24.9178 -1.35486 135 -11.9997 24.6856 -1.3343 175 -11.8256 24.5236 -1.32182 187 -11.7381 24.539 -1.32047 148 -11.4609 24.6521 -1.31957 140 -11.6044 24.5562 -1.31811 171 -11.5017 24.5383 -1.31474 175 -14.0837 24.46 -1.21921 180 -13.982 24.4607 -1.21668 201 -13.7446 24.4896 -1.21202 128 -13.6365 24.4768 -1.20879 122 -13.52 24.4478 -1.20464 150 -13.3884 24.4814 -1.20292 124 -13.2819 24.4689 -1.19978 152 -13.188 24.4789 -1.19796 116 -13.0322 24.4649 -1.19361 130 -12.9319 24.4615 -1.19108 106 -12.8337 24.4614 -1.18876 87 -12.6944 24.4754 -1.18613 93 -12.591 24.4637 -1.18319 133 -12.5014 24.4782 -1.18178 129 -12.3617 24.4887 -1.17904 121 -11.9985 24.6286 -1.17722 112 -12.265 24.4881 -1.17682 124 -12.1685 24.4871 -1.17459 121 -12.058 24.4571 -1.17075 107 -11.7557 24.5197 -1.1669 175 -11.8326 24.4827 -1.1669 116 -11.6084 24.508 -1.16316 132 -11.5161 24.5118 -1.16134 126 -11.4171 24.5008 -1.15871 196 -11.2128 24.5643 -1.15729 100 -11.2666 24.4781 -1.15446 114 -11.0838 24.4847 -1.15092 104 -14.1704 24.5255 -1.06256 163 -14.0454 24.4867 -1.05825 172 -13.921 24.537 -1.05744 147 -13.784 24.4745 -1.05197 251 -13.6943 24.495 -1.0508 255 -13.5623 24.5296 -1.04928 255 -13.4582 24.523 -1.04676 255 -13.3562 24.5196 -1.04443 255 -13.2458 24.4999 -1.04129 255 -13.1018 24.5093 -1.0386 255 -13.0013 24.5062 -1.03635 255 -12.8973 24.4957 -1.03375 255 -12.7641 24.5225 -1.03204 255 -12.6613 24.5128 -1.02953 255 -12.5605 24.5063 -1.0272 255 -12.4222 24.5206 -1.02495 255 -12.3245 24.5185 -1.02289 255 -12.2259 24.5142 -1.02073 255 -12.1311 24.5167 -1.01894 255 -11.9268 24.5879 -1.01777 141 -11.8417 24.609 -1.01697 156 -11.9917 24.5252 -1.01652 247 -11.6603 24.5275 -1.01014 159 -11.5627 24.5206 -1.00799 167 -11.4652 24.5134 -1.00584 167 -13.8944 24.5277 -0.877177 156 -13.9625 24.4683 -0.876484 144 -13.6939 24.4411 -0.870475 163 -13.5947 24.4439 -0.868703 191 -13.4908 24.4374 -0.866546 206 -13.3574 24.4674 -0.865083 207 -13.2538 24.46 -0.862926 207 -13.1514 24.454 -0.860846 210 -13.0454 24.4405 -0.858458 226 -12.9133 24.4699 -0.857071 206 -12.8132 24.466 -0.855145 221 -12.7133 24.4618 -0.853219 229 -12.5788 24.4841 -0.851602 236 -12.4791 24.4789 -0.849676 237 -12.3841 24.4824 -0.848135 236 -12.2455 24.4939 -0.846133 236 -12.1445 24.4839 -0.844053 235 -12.0446 24.4753 -0.84205 240 -11.9449 24.4663 -0.840047 230 -11.8035 24.4683 -0.837736 233 -11.7076 24.4656 -0.836041 255 -11.6102 24.4589 -0.834193 242 -11.4728 24.4663 -0.83219 238 -11.379 24.4659 -0.830649 241 -11.2921 24.4798 -0.829725 244 -11.1675 24.5127 -0.828877 245 -11.088 24.5422 -0.828646 241 -11.0059 24.566 -0.828184 206 -14.242 24.4629 -0.703915 204 -14.0936 24.4726 -0.701787 229 -13.9928 24.4751 -0.70024 230 -13.8902 24.4738 -0.698564 238 -13.7443 24.485 -0.696566 230 -13.642 24.4826 -0.694889 236 -13.5437 24.4869 -0.693471 237 -13.4003 24.4996 -0.691602 236 -13.2965 24.4925 -0.689797 234 -13.1967 24.4919 -0.68825 239 -13.0885 24.4751 -0.686122 238 -12.9515 24.4959 -0.68464 235 -12.854 24.4975 -0.683221 239 -12.7492 24.4846 -0.681288 240 -12.6099 24.4982 -0.679612 242 -12.5156 24.5039 -0.678387 244 -12.415 24.4968 -0.676711 241 -12.2788 24.5139 -0.675228 239 -12.183 24.5148 -0.673874 245 -12.0864 24.5135 -0.672456 241 -11.9462 24.5199 -0.670651 237 -11.8473 24.5123 -0.669039 241 -11.746 24.499 -0.667234 240 -11.6561 24.5087 -0.666267 243 -11.5234 24.5272 -0.664978 243 -11.4302 24.5289 -0.663753 242 -11.3405 24.5375 -0.662786 111 -14.1437 24.4866 -0.557685 211 -14.0449 24.4927 -0.556493 187 -13.9293 24.4689 -0.55438 205 -13.7914 24.4942 -0.553134 217 -13.6832 24.4815 -0.551401 218 -13.5868 24.4894 -0.550317 227 -13.4463 24.5076 -0.548909 231 -13.3435 24.5023 -0.547446 230 -13.2427 24.5001 -0.546091 235 -13.1008 24.5128 -0.544575 240 -13.0003 24.5097 -0.54322 239 -12.9028 24.5114 -0.542028 244 -12.7999 24.5022 -0.540511 243 -12.6605 24.5161 -0.539103 247 -12.5606 24.5112 -0.537749 244 -12.4618 24.5078 -0.536448 247 -12.3229 24.5197 -0.53504 247 -12.2271 24.5207 -0.533902 250 -12.1297 24.5178 -0.532656 255 -11.9895 24.5244 -0.531139 254 -11.8923 24.5205 -0.529893 255 -11.7954 24.5163 -0.528647 255 -11.6959 24.5063 -0.527239 255 -11.565 24.5286 -0.526264 255 -11.4676 24.5213 -0.524963 255 -11.3771 24.5282 -0.524097 250 -11.2456 24.547 -0.523067 242 -11.1618 24.5676 -0.522634 185 -11.0772 24.5861 -0.522146 167 -13.7381 26.0349 -0.392209 102 -13.6535 26.0726 -0.392087 157 -13.6168 25.6104 -0.383402 111 -13.7998 24.6335 -0.367703 255 -13.6269 24.5056 -0.363707 189 -13.4814 24.5152 -0.362443 246 -13.3976 24.5452 -0.362158 255 -12.1432 24.9783 -0.358284 97 -12.4735 24.7613 -0.357305 96 -12.663 24.6537 -0.357101 96 -12.581 24.6844 -0.356897 96 -12.3751 24.7592 -0.356367 96 -12.2438 24.6906 -0.353921 96 -12.1106 24.7139 -0.353146 96 -11.7804 24.7247 -0.350414 255 -11.8889 24.6527 -0.350047 140 -11.6718 24.6965 -0.348946 255 -11.5729 24.6878 -0.347927 255 -11.4851 24.7023 -0.347437 255 -13.51 26.0096 -0.253326 87 -13.3925 25.9825 -0.252099 117 -12.5788 25.9867 -0.246437 86 -13.4927 24.634 -0.234105 217 -12.4822 24.8818 -0.230172 83 -12.5009 24.7246 -0.228096 83 -11.825 24.7228 -0.223377 82 -11.7302 24.7237 -0.222748 82 -11.5231 24.6863 -0.220829 82 -11.3214 24.7596 -0.220546 255 -11.3849 24.6931 -0.220011 82 -11.2238 24.7514 -0.219791 140 -13.1936 24.7366 -0.0480827 194 -13.0914 24.732 -0.047609 219 -12.7682 24.7768 -0.0466071 117 -12.6694 24.7758 -0.0461882 106 -12.5308 24.7924 -0.045751 106 -12.4402 24.8067 -0.045496 106 -12.3408 24.8027 -0.0450588 106 -12.1929 24.7978 -0.0444213 105 -12.0255 24.8505 -0.0441845 254 -12.0921 24.7892 -0.0439477 105 -11.8624 24.8113 -0.0432192 233 -11.7655 24.8087 -0.0428184 231 -11.6765 24.822 -0.0425816 225 -11.5425 24.8405 -0.0422174 226 +unknow 0.959514 1 0 403 -11.2766 -1.1521 -1.3134 107 -11.2703 -1.11571 -1.31206 104 -11.2676 -1.06186 -1.31099 104 -11.2689 -1.02629 -1.31072 64 -11.662 -1.3628 -1.29281 108 -11.6637 -1.12206 -1.28975 89 -11.6406 -1.32319 -1.2895 103 -11.6525 -1.19491 -1.28924 121 -11.6408 -1.28617 -1.28899 121 -11.6467 -1.2313 -1.28899 127 -12.0987 -1.34237 -1.28692 59 -11.6325 -1.15589 -1.28618 120 -12.0706 -1.39691 -1.28423 165 -12.0466 -1.52856 -1.28325 211 -12.0543 -1.43344 -1.28276 189 -12.0309 -1.60345 -1.28251 93 -12.036 -1.46965 -1.28104 187 -12.0536 -1.29915 -1.28079 83 -12.0556 -1.26107 -1.28055 100 -12.0181 -1.56338 -1.28031 90 -12.0575 -1.22299 -1.2803 97 -12.0572 -1.1656 -1.27957 98 -12.0608 -1.12772 -1.27957 94 -12.0485 -1.08842 -1.27761 58 -12.4816 -1.42347 -1.26043 252 -12.4692 -1.46173 -1.2595 255 -12.4702 -1.38246 -1.25857 119 -12.4425 -1.59746 -1.25834 134 -12.4474 -1.55836 -1.25834 136 -12.4335 -1.63601 -1.25787 135 -12.4428 -1.49824 -1.25694 254 -12.4765 -1.18508 -1.25693 132 -12.4489 -1.32069 -1.2553 109 -12.453 -1.24205 -1.25484 135 -12.4333 -1.2795 -1.25297 127 -13.17 -1.57517 -1.24628 129 -13.1585 -1.63673 -1.24585 130 -13.1709 -1.53333 -1.24585 154 -13.2011 -1.1597 -1.24497 119 -13.1875 -1.20028 -1.24387 168 -13.7207 -1.58421 -1.22743 117 -13.7522 -1.23855 -1.22701 156 -12.766 -1.20319 -1.19768 100 -12.6699 -1.43568 -1.1898 115 -13.3344 -1.26351 -1.18383 69 -12.3463 -1.36041 -1.15345 114 -12.3467 -1.26241 -1.15236 106 -12.3506 -1.22362 -1.15236 156 -12.3169 -1.29854 -1.14951 151 -12.4436 -1.21682 -1.09082 105 -12.2829 -1.37636 -1.07587 79 -12.2953 -1.24102 -1.07567 91 -12.2834 -1.29831 -1.07504 105 -12.2753 -1.33645 -1.07463 105 -12.2652 -1.38241 -1.00739 104 -12.2637 -1.32376 -1.0066 106 -12.2618 -1.28462 -1.00601 102 -12.1529 -1.23486 -0.994786 88 -11.9248 -1.15543 -0.971551 143 -11.8689 -1.11252 -0.965644 100 -11.8446 -1.07278 -0.962887 117 -11.8098 -1.01363 -0.958949 114 -12.2222 -1.40216 -0.934977 111 -12.1929 -1.35994 -0.931817 151 -11.9973 -1.28047 -0.912858 69 -11.8626 -1.22812 -0.899847 66 -11.7735 -1.03707 -0.752416 152 -11.7604 -0.980049 -0.750951 104 -12.2869 -1.3943 -0.697538 95 -11.7336 -0.942054 -0.653822 64 -11.6928 -0.901909 -0.650595 112 -11.8605 -1.02055 -0.596839 40 -11.7284 -0.971786 -0.587625 144 -12.1213 -1.36354 -0.548355 90 -11.9708 -1.25182 -0.538288 189 -11.947 -1.28733 -0.537046 101 -11.8674 -1.20357 -0.531577 65 -11.8433 -1.16361 -0.529837 103 -11.8288 -1.10597 -0.528594 113 -11.7865 -1.06478 -0.525735 124 -11.7779 -1.02672 -0.52499 131 -11.7526 -0.894516 -0.522752 251 -11.7169 -0.965948 -0.520888 82 -11.6741 -0.925606 -0.51803 235 -12.4088 -1.41581 -0.492383 71 -12.1237 -1.24777 -0.47541 248 -12.1256 -1.20947 -0.475297 251 -12.1288 -1.11364 -0.47496 125 -12.0777 -1.16628 -0.472374 247 -12.0163 -1.33196 -0.469903 52 -12.0006 -1.27296 -0.468666 84 -11.8358 -0.954978 -0.457761 203 -11.8292 -1.01057 -0.457649 88 -12.0159 -1.27628 -0.401772 191 -11.992 -1.3119 -0.400761 105 -11.9583 -1.23232 -0.398636 142 -11.9382 -1.19241 -0.397422 88 -11.886 -1.13078 -0.394488 136 -11.8716 -1.09182 -0.393577 136 -11.8213 -1.04987 -0.390845 116 -11.7843 -0.990732 -0.38872 100 -11.7754 -0.952762 -0.388113 227 -11.7723 -0.915315 -0.38781 212 -11.7692 -0.877894 -0.387506 171 -12.0526 -1.26848 -0.334625 192 -12.0546 -1.2304 -0.334535 142 -12.0425 -1.19092 -0.333816 109 -12.0187 -1.32214 -0.333368 85 -11.9619 -1.08796 -0.329777 198 -11.9565 -1.12534 -0.329687 236 -11.8618 -1.04107 -0.325109 79 -11.8268 -0.981764 -0.323314 160 -11.8159 -0.943463 -0.322685 148 -12.039 -1.26972 -0.257278 46 -11.9892 -1.22652 -0.255198 108 -11.983 -1.18789 -0.254813 91 -11.9268 -1.12572 -0.252424 151 -11.9044 -1.08594 -0.251423 78 -11.8261 -1.04153 -0.248264 144 -11.806 -0.946441 -0.247185 121 -11.801 -0.983362 -0.247108 102 -11.7898 -0.870671 -0.246337 121 -11.785 -0.907554 -0.24626 127 -11.7898 -0.814837 -0.246183 96 -12.1317 -1.31747 -0.184651 53 -12.108 -1.25712 -0.183684 125 -12.0502 -1.21274 -0.181686 77 -12.0102 -1.17052 -0.180267 103 -11.9838 -1.11088 -0.179235 98 -11.9514 -1.06995 -0.178075 102 -11.9268 -1.02993 -0.177172 100 -11.9196 -0.97271 -0.176785 104 -11.9146 -0.934616 -0.176527 105 -11.8896 -0.895021 -0.175624 110 -12.2431 -1.31689 -0.125157 58 -12.1437 -1.26785 -0.12234 111 -12.0979 -1.22476 -0.120985 102 -12.0777 -1.1653 -0.120281 106 -12.0355 -1.12318 -0.119034 114 -12.0191 -1.08361 -0.118492 111 -12.0409 0.146695 -0.117782 40 -11.9822 -1.02348 -0.117354 103 -11.9674 -0.984394 -0.116866 114 -11.9684 -0.946636 -0.116812 120 -11.9556 -0.851231 -0.11627 101 -11.9454 -0.907122 -0.116107 99 -11.9462 -0.812879 -0.115945 90 -12.7782 -1.54054 -0.0544376 44 -12.7532 -1.49684 -0.0538256 44 -12.7291 -1.59543 -0.0535814 56 -12.6883 -1.44868 -0.0523981 44 -12.5497 -1.39264 -0.0494616 83 -12.3494 -1.3111 -0.0452202 82 -12.2898 -1.2656 -0.043915 132 -12.2639 -1.22395 -0.0433031 118 -12.2337 -1.16266 -0.0425688 119 -12.2015 -1.12085 -0.0418345 123 -12.2337 0.166892 -0.0414611 42 -12.179 -1.08016 -0.0413042 118 -12.1641 -1.02105 -0.0408961 125 -12.2031 0.204885 -0.0408492 42 -12.1563 -0.943487 -0.0406102 125 -12.1887 0.0706361 -0.0405236 42 -12.1864 0.108914 -0.0404826 42 -12.1788 0.0323413 -0.0403199 42 -12.1373 -0.980348 -0.0402842 125 -12.1353 -0.903456 -0.0401206 125 -12.6934 -1.5774 0.00646876 40 -12.6903 -1.53657 0.00659485 40 -12.6792 -1.49486 0.00684678 40 -12.6799 -1.45457 0.00690992 40 -12.6448 -1.3903 0.0075709 40 -12.4642 -1.3312 0.0104973 40 -12.337 -1.2787 0.0125741 67 -12.2931 -1.21574 0.0133609 89 -12.2571 -1.17338 0.0139904 130 -12.2408 -1.13307 0.0143053 85 -12.2263 -1.09304 0.0145887 90 -12.1835 -1.03147 0.0153441 128 -12.1867 -0.99319 0.0153443 81 -12.1758 -0.953838 0.0155647 91 -12.161 -0.85668 0.0159113 78 -12.1556 -0.817953 0.0160373 85 -12.1443 -0.893883 0.0161313 136 -12.74 -1.61411 0.0902466 49 -12.745 -1.57407 0.0902468 49 -12.6887 -1.50632 0.0908301 152 -12.6727 -1.36323 0.0911223 48 -12.5299 -1.26796 0.0925076 76 -12.5218 -1.3069 0.0925438 64 -12.5076 -1.16648 0.0927996 79 -12.5019 -1.20557 0.0928176 128 -12.4738 -1.02502 0.0932193 93 -12.4629 -1.08326 0.0932737 78 -12.4534 -1.12185 0.0933282 68 -12.4351 -0.982433 0.0936022 111 -12.4302 -0.94274 0.0936753 119 -12.4026 -0.881815 0.093967 100 -12.3933 -0.842011 0.0940766 119 -12.7068 -1.57675 0.171784 46 -12.7077 -1.53635 0.171795 46 -12.7044 -1.33389 0.171867 46 -12.6568 -1.28881 0.172009 46 -12.6429 -1.24731 0.172058 46 -12.6869 -1.23109 0.247598 40 -12.7208 -1.27481 0.247721 40 -12.7227 -1.31539 0.24774 40 -13.3405 -0.894932 0.249619 40 -13.5201 -1.12093 0.250252 40 -13.5396 -0.972796 0.250279 40 -13.5365 -1.16515 0.250317 40 -13.5452 -1.0588 0.250317 40 -13.5505 -1.0164 0.250324 40 -13.5608 -0.867348 0.250325 40 -12.7576 -1.19454 0.323349 42 -12.7917 -1.25848 0.323715 42 -12.8135 -1.30124 0.323953 42 -12.8749 -1.1645 0.324394 43 -12.8929 -1.35007 0.324723 43 -13.4721 -0.919212 0.329673 45 -13.4829 -0.877384 0.329747 45 -13.5674 -0.839935 0.330499 45 -13.5881 -1.03416 0.330809 85 -13.9218 -1.10291 0.333906 46 -14.8413 -0.84617 0.342155 49 -12.7714 -1.08999 0.40833 35 -12.8158 -1.13444 0.40909 35 -12.8601 -1.32196 0.41007 35 -12.8778 -1.18085 0.410134 35 -12.89 -1.24329 0.410418 35 -12.8881 -1.28398 0.41045 35 -13.4182 -0.89208 0.418302 52 -13.4628 -0.85266 0.418966 37 -13.4632 -0.937658 0.419061 37 -14.8526 -0.89652 0.440965 40 -12.9436 -1.25911 0.477379 43 -13.045 -1.33084 0.47964 44 -13.4469 -0.924273 0.487304 45 -13.4776 -0.883804 0.48789 45 -14.8098 -0.851841 0.515691 50 -14.8224 -0.805839 0.5159 50 -14.8303 -0.68949 0.515943 50 -14.834 -0.736361 0.516068 50 -12.8508 -0.854655 0.539158 52 -12.856 -0.895595 0.539366 52 -12.8825 -0.999231 0.540248 52 -12.8912 -1.04069 0.540559 52 -12.8995 -0.959823 0.540611 52 -12.9098 -1.08306 0.54113 52 -12.9364 -1.14678 0.54196 52 -12.9586 -1.18984 0.542635 52 -12.9747 -1.23248 0.543154 52 -12.9887 -1.29563 0.543673 52 -13.1794 -1.35687 0.54876 53 -14.6748 -0.332787 0.585886 59 -14.7856 -0.707602 0.589103 78 -14.7841 -0.777377 0.589155 80 -14.8095 -0.825426 0.589881 60 -14.8485 -0.243698 0.590351 60 -14.8497 -0.290388 0.590403 60 -14.8588 -0.875091 0.591231 60 -12.926 -0.517866 0.620579 41 -12.9395 -0.274254 0.620773 41 -12.9437 -0.41675 0.62103 41 -12.9469 -0.37614 0.621094 41 -12.952 -0.335557 0.621223 41 -12.9569 -0.193153 0.621288 41 -12.9413 -0.701794 0.62135 41 -12.9505 -0.600309 0.621479 41 -12.9623 -0.560032 0.621801 41 -12.9655 -0.478576 0.621801 41 -12.9737 -0.132225 0.621803 41 -12.9742 -0.234147 0.621867 41 -12.976 -0.0914789 0.621868 41 -12.9783 -0.0507133 0.621932 41 -12.9635 -0.662113 0.621994 41 -12.9843 -0.0099359 0.622125 41 -12.9634 -0.805091 0.62225 41 -12.967 -0.743991 0.62225 41 -12.9922 0.0513012 0.622383 41 -12.9688 -0.846314 0.622507 41 -12.978 -0.887851 0.622893 41 -13.0149 0.194559 0.623156 41 -12.9836 -0.949707 0.623214 41 -13.02 0.0923721 0.623284 41 -13.0237 0.133322 0.623413 41 -12.9901 -1.07331 0.623729 70 -13.0025 -0.992118 0.623922 41 -13.0307 -1.13843 0.625208 69 -13.039 -1.18042 0.625594 86 -13.0552 -1.03729 0.625723 41 -13.1087 0.381569 0.626309 107 -13.0631 -1.22393 0.626494 113 -13.1233 0.278881 0.626694 41 -13.091 -1.28874 0.627587 189 -13.1518 0.341557 0.627659 41 -13.1923 -1.34036 0.630996 42 -13.0386 -0.502553 0.709064 94 -13.0389 -0.543604 0.709141 90 -13.0505 -0.215798 0.70922 93 -13.0461 -0.461816 0.709296 91 -13.0493 -0.359336 0.709297 93 -13.0551 -0.174859 0.709375 94 -13.0557 -0.256923 0.709452 97 -13.0443 -0.646505 0.709527 105 -13.0564 -0.318499 0.709529 94 -13.0561 -0.400591 0.709606 93 -13.0658 -0.113444 0.709762 99 -13.0661 -0.0723953 0.709762 93 -13.0591 -0.58559 0.709992 89 -13.0539 -0.72926 0.710069 102 -13.0581 -0.688355 0.710146 105 -13.0623 -0.791512 0.710533 101 -13.0677 -0.833072 0.710842 99 -13.0942 -0.0314722 0.710846 99 -13.0942 0.00966811 0.710846 102 -13.0707 -0.936409 0.711229 99 -13.081 -0.875218 0.711461 98 -13.112 0.0714345 0.711543 96 -13.1257 0.11272 0.712085 94 -13.1373 0.154072 0.712549 98 -13.1036 -0.980226 0.712621 98 -13.1144 -1.0225 0.713163 97 -13.1171 -1.06419 0.713395 99 -13.1624 0.21635 0.713556 97 -13.1737 0.257915 0.71402 103 -13.1438 -1.12879 0.714633 90 -13.1988 0.299836 0.715026 90 -13.1703 -1.21454 0.715948 67 -13.176 -1.17334 0.716026 89 -13.2377 0.342254 0.716574 78 -13.1982 -1.27993 0.717263 144 -13.2617 -1.32829 0.719894 40 -13.0688 -0.268585 0.770555 153 -13.071 -0.412442 0.770815 152 -13.0759 -0.309817 0.770902 151 -13.0714 -0.515237 0.770988 152 -13.0763 -0.371481 0.770988 156 -13.0802 -0.186591 0.770989 158 -13.0719 -0.597532 0.77116 151 -13.0737 -0.556465 0.771161 151 -13.0777 -0.453765 0.771161 156 -13.0856 -0.227776 0.771249 156 -13.0685 -0.741444 0.771333 148 -13.0728 -0.700487 0.77142 147 -13.0819 -0.639157 0.77168 166 -13.1009 -0.125102 0.771856 161 -13.1033 -0.0839521 0.771943 160 -13.1074 -0.0427944 0.772117 162 -13.098 -0.784342 0.77272 165 -13.0962 -0.846183 0.772806 162 -13.1275 0.0190442 0.772984 162 -13.1314 0.060312 0.773157 159 -13.1054 -0.888106 0.773326 164 -13.1165 -0.930236 0.773933 162 -13.1571 0.101815 0.774284 163 -13.124 -0.992919 0.774453 159 -13.1664 0.163961 0.774718 162 -13.1487 -1.03628 0.775666 160 -13.1493 -1.07791 0.775839 159 -13.1938 0.205813 0.775932 160 -13.2091 0.247596 0.776626 161 -13.2202 0.289375 0.777146 155 -13.1837 -1.12236 0.777486 156 -13.2042 -1.18674 0.778613 154 -13.2567 0.352754 0.778793 133 -13.2222 -1.23021 0.779566 154 -13.3019 -1.27962 0.783206 78 -13.2108 -0.339171 0.863836 120 -13.2042 -0.629783 0.864035 111 -13.2103 -0.484563 0.864035 116 -13.2171 -0.235484 0.864037 121 -13.2244 -0.42271 0.864635 112 -13.223 -0.568271 0.864834 113 -13.2297 -0.381285 0.864835 116 -13.2323 -0.277369 0.864835 120 -13.2337 -0.194222 0.864836 121 -13.2287 -0.526894 0.865034 115 -13.2219 -0.71396 0.865133 116 -13.234 -0.672948 0.865633 111 -13.2315 -0.756205 0.865732 111 -13.2582 -0.152972 0.866035 122 -13.2608 -0.0905112 0.866135 123 -13.2398 -0.819308 0.866331 126 -13.275 -0.0489291 0.866834 124 -13.2551 -0.862101 0.86723 121 -13.285 0.055358 0.867334 125 -13.2871 -0.00725373 0.867434 123 -13.2683 -0.904857 0.868029 123 -13.2818 -0.968714 0.868928 104 -13.3163 0.139098 0.868933 125 -13.3187 0.0972728 0.869033 120 -13.3295 0.202032 0.869632 119 -13.3026 -1.0123 0.870126 123 -13.3073 -1.05473 0.870525 120 -13.3528 0.244299 0.870831 120 -13.3304 -1.16205 0.872123 115 -13.3417 -1.09973 0.872423 116 -13.3919 0.287022 0.872829 121 -13.3585 -1.20686 0.873721 99 -13.4289 0.329955 0.874727 71 -13.4541 -1.25831 0.878715 36 -13.45 -1.3219 0.878815 36 +unknow 0.968409 1 0 254 -18.9985 25.4265 -1.39725 112 -19.8857 24.7003 -1.39574 125 -19.9218 24.5864 -1.3924 162 -19.0135 25.2804 -1.39179 130 -20.0071 24.4552 -1.38997 125 -20.0521 24.3536 -1.38744 160 -20.1005 24.2566 -1.38522 122 -20.1672 24.1049 -1.38147 158 -20.1992 23.9895 -1.37803 124 -20.2305 23.874 -1.37459 158 -20.3221 23.7541 -1.37298 124 -19.1724 23.9666 -1.34414 146 -19.0548 23.9735 -1.3407 131 -18.829 24.0752 -1.33767 107 -18.8811 23.9861 -1.33575 141 -21.7259 25.1464 -1.283 180 -21.6091 25.1706 -1.2804 188 -21.4487 25.2235 -1.27752 160 -21.6705 23.9958 -1.24261 255 -21.731 23.9114 -1.24162 157 -19.1413 25.3606 -1.21748 160 -19.2206 25.2177 -1.21451 154 -18.8114 25.502 -1.21371 163 -19.0063 25.3471 -1.21335 164 -18.868 25.3282 -1.20895 151 -19.2798 24.0198 -1.17377 234 -19.1241 24.0573 -1.17072 244 -18.9939 24.0483 -1.16677 221 -18.7748 24.0805 -1.16183 142 -21.7793 23.8564 -1.03572 122 -21.609 23.895 -1.0324 250 -21.4684 23.8899 -1.02863 194 -21.1769 23.9409 -1.02262 180 -21.045 23.9428 -1.01931 172 -20.8974 23.9259 -1.01507 169 -20.7282 23.9591 -1.01176 149 -19.848 24.6906 -1.01168 187 -20.5956 23.9573 -1.00837 163 -20.445 23.9337 -1.0039 182 -20.2379 23.9184 -0.998276 180 -20.1125 23.9221 -0.995272 177 -19.9758 23.9115 -0.991574 183 -19.8432 23.9049 -0.988108 180 -18.2194 25.1546 -0.987797 156 -18.2631 25.0488 -0.985486 118 -19.6758 23.9317 -0.984795 180 -18.3371 24.9028 -0.982636 118 -19.5488 23.9299 -0.981637 180 -19.4131 23.9167 -0.977939 179 -18.3237 24.7214 -0.976705 129 -19.1374 23.959 -0.972546 182 -19.0348 23.9846 -0.970852 225 -18.2032 24.3976 -0.963918 133 -18.7328 23.9883 -0.963764 159 -18.5961 23.9681 -0.959913 139 -18.3237 24.0037 -0.954597 153 -18.2386 24.0484 -0.953981 161 -21.9083 24.0227 -0.839553 59 -21.5155 24.0435 -0.831558 85 -21.4998 23.8749 -0.827175 100 -21.1922 23.9085 -0.821373 173 -21.0734 23.9255 -0.819246 93 -20.919 23.9014 -0.815378 116 -20.738 23.9212 -0.812025 117 -20.6184 23.9348 -0.809834 119 -20.4728 23.9175 -0.806352 123 -20.2874 23.9284 -0.802742 121 -18.3171 25.4042 -0.801063 179 -20.1619 23.9324 -0.800228 121 -20.016 23.9114 -0.796682 123 -18.2733 25.1768 -0.794295 97 -19.8831 23.905 -0.793781 122 -19.7232 23.9414 -0.791396 123 -19.5883 23.9306 -0.788366 124 -18.2343 24.9579 -0.787848 130 -19.2219 24.1723 -0.787012 161 -19.4638 23.9316 -0.785852 122 -19.2552 24.0588 -0.78482 141 -19.3056 23.967 -0.783531 129 -18.2697 24.7608 -0.7834 108 -18.24 24.5589 -0.777599 137 -18.906 24.0068 -0.776504 107 -18.2284 24.3831 -0.772829 100 -18.7491 23.9622 -0.772249 119 -18.6393 23.9768 -0.770444 125 -18.2571 24.0261 -0.764191 157 -21.8282 23.8844 -0.668207 69 -21.6966 23.8906 -0.665932 69 -21.5398 23.8681 -0.662627 147 -21.3994 23.8626 -0.659972 124 -21.2177 23.8854 -0.657155 155 -21.0871 23.889 -0.65488 120 -20.9316 23.8634 -0.651575 164 -20.773 23.9089 -0.649679 118 -20.6391 23.9059 -0.647241 132 -20.5106 23.9083 -0.645019 133 -20.3084 23.8995 -0.641281 116 -18.2356 25.4844 -0.640574 67 -20.1598 23.8761 -0.638193 179 -20.0372 23.8826 -0.636188 117 -18.2561 25.2603 -0.635969 81 -19.8956 23.8655 -0.633371 120 -19.746 23.9143 -0.6318 135 -19.6024 23.8927 -0.628874 138 -19.483 23.8998 -0.626978 138 -19.3188 23.9276 -0.624757 140 -19.1948 23.9273 -0.622644 138 -18.2109 24.6222 -0.621288 255 -19.0734 23.9296 -0.620639 131 -18.9073 23.9517 -0.618309 138 -18.1987 24.4445 -0.617225 255 -18.774 23.937 -0.615763 128 -18.6545 23.939 -0.613813 135 -18.1305 24.1935 -0.61067 255 -18.2082 24.06 -0.609045 116 -18.2679 23.9819 -0.608341 142 -21.6333 23.9134 -0.449506 144 -21.4778 23.8921 -0.447059 203 -21.3077 23.9288 -0.445306 150 -21.1688 23.9238 -0.443348 199 -21.0274 23.9152 -0.441309 156 -20.8593 23.9507 -0.439597 165 -20.7198 23.9421 -0.437598 236 -20.5857 23.9389 -0.435763 143 -20.3974 23.9474 -0.433398 153 -18.2759 25.4778 -0.431316 201 -20.2549 23.9321 -0.431278 185 -20.1113 23.9145 -0.429116 180 -19.9535 23.9553 -0.427689 180 -18.2607 25.2053 -0.426626 165 -19.8118 23.9378 -0.425568 175 -19.6831 23.9351 -0.423856 178 -18.2478 25.0219 -0.423446 145 -19.5622 23.9411 -0.422388 175 -19.4064 23.9802 -0.421001 178 -18.2102 24.8066 -0.41945 189 -19.2745 23.971 -0.419166 220 -19.1479 23.9674 -0.417494 178 -18.2434 24.6081 -0.416596 146 -18.9714 23.9775 -0.415414 173 -18.8539 23.9835 -0.414028 243 -18.2165 24.4113 -0.413048 178 -18.7279 23.9781 -0.412356 158 -18.2903 24.1131 -0.409093 167 -18.3441 24.0269 -0.40836 162 -21.6757 23.9019 -0.29986 96 -21.4814 23.9129 -0.297941 95 -21.313 23.8758 -0.295739 117 -21.1862 23.8842 -0.294512 153 -21.0437 23.8741 -0.292907 151 -20.8666 23.8992 -0.291365 153 -20.7325 23.8966 -0.289949 160 -20.6025 23.8979 -0.288628 168 -20.4442 23.9415 -0.287527 153 -20.2565 23.8728 -0.28479 135 -18.2648 25.3946 -0.284347 93 -20.1208 23.8644 -0.283311 164 -19.9569 23.8976 -0.282053 134 -18.2574 25.1334 -0.280949 92 -19.8244 23.8908 -0.280637 167 -19.7047 23.899 -0.279535 138 -19.5599 23.8756 -0.277805 168 -18.2149 24.9095 -0.277709 92 -19.4132 23.9256 -0.276956 138 -18.2113 24.741 -0.275538 91 -19.264 23.8945 -0.275099 170 -19.1588 23.9174 -0.274344 135 -18.9776 23.9212 -0.272614 169 -18.2002 24.483 -0.272172 102 -18.8702 23.9399 -0.271796 138 -18.7247 23.9092 -0.270002 167 -18.5788 23.9545 -0.269153 136 -18.1984 24.0043 -0.266133 216 -21.4754 24.9044 -0.0922609 124 -21.4407 24.7071 -0.0906945 123 -21.2641 24.3491 -0.087179 122 -21.3627 24.2306 -0.0869605 129 -21.436 24.1604 -0.0869243 144 -21.3505 23.9125 -0.0847203 145 -20.5036 24.0069 -0.0802929 119 -20.2908 23.9097 -0.0783618 159 -18.1997 25.4687 -0.0778491 128 -20.1485 23.8939 -0.0774144 198 -18.234 25.3481 -0.0771388 140 -20.0036 23.9502 -0.0769589 166 -19.8579 23.9284 -0.0759569 203 -18.2415 25.1083 -0.0754083 134 -19.7419 23.9413 -0.0753738 166 -19.563 23.9536 -0.0744265 204 -19.4397 23.9559 -0.0737341 162 -18.2115 24.9024 -0.0737325 134 -19.3103 23.95 -0.0729507 195 -19.1974 23.9637 -0.072404 162 -18.1971 24.7195 -0.0723118 133 -19.0121 23.9631 -0.0713475 181 -18.2214 24.51 -0.0709092 147 -18.8996 23.9757 -0.0708008 184 -18.7661 23.961 -0.0699446 175 -18.6052 23.9875 -0.069234 168 -18.1859 24.1444 -0.0680496 171 -18.223 24.0362 -0.0674668 255 -21.4652 24.9886 0.116838 119 -20.5148 25.2948 0.117861 117 -21.2452 23.9595 0.11935 140 -20.4928 24.0071 0.120601 114 -20.2945 23.9264 0.12112 113 -18.2762 25.4201 0.121304 113 -18.2239 24.0468 0.124405 182 -18.2628 24.0603 0.304186 237 -18.2618 24.7778 0.306045 91 -19.3474 23.968 0.306114 91 -18.3205 25.27 0.307444 92 -18.2995 25.4086 0.307768 93 -20.3338 23.9327 0.308062 125 -20.2388 24.0497 0.308153 141 -20.5377 24.0191 0.308703 163 -20.6757 24.0272 0.309014 155 -20.8517 24.0019 0.309325 150 -21.0166 24.0386 0.309765 122 -20.5096 25.2427 0.31169 96 -20.8716 25.1187 0.312123 121 -20.7543 25.2183 0.31213 96 -18.3039 24.165 0.48382 141 -18.7739 24.0711 0.485763 101 -18.8754 24.0451 0.486148 101 -18.295 24.5519 0.486607 101 -19.0542 24.039 0.487119 101 -19.172 24.0322 0.487742 101 -18.3105 24.7348 0.488037 101 -19.3025 24.0405 0.488549 102 -18.3037 24.8889 0.489137 150 -19.4822 24.0317 0.48952 102 -19.598 24.02 0.490107 102 -18.2979 25.1285 0.490878 121 -19.7279 24.0248 0.490895 102 -19.8618 24.0337 0.491738 103 -19.9915 23.9598 0.491976 110 -18.3172 25.3221 0.492418 118 -20.1476 23.9934 0.493131 103 -20.2822 24.0003 0.493974 103 -20.482 24.0065 0.495202 104 -20.6224 24.0179 0.496118 104 -20.763 24.0287 0.497034 113 -18.4526 24.5801 0.692023 90 -19.106 24.4752 0.696992 83 -19.2372 24.4842 0.698385 83 -19.3847 24.434 0.699208 83 -19.4764 24.3917 0.699588 83 -19.5805 24.3647 0.700284 83 -19.6859 24.3388 0.701012 83 -19.8346 24.2875 0.701867 83 -19.9502 24.273 0.702848 84 -20.0787 24.2733 0.704146 84 -20.2223 24.2137 0.704874 84 +unknow 0.96479 1 0 214 -20.8417 -21.3784 -0.941306 162 -20.7675 -21.4366 -0.940922 173 -20.6793 -21.4801 -0.939768 188 -20.9569 -21.1615 -0.938452 177 -20.5474 -21.5456 -0.938076 177 -21.24 -20.8488 -0.937954 132 -21.328 -20.7388 -0.937414 134 -21.3772 -20.6564 -0.936567 131 -20.8553 -21.1917 -0.936528 165 -20.415 -21.5419 -0.934457 186 -21.6998 -20.1913 -0.933253 113 -21.7323 -20.0946 -0.931635 113 -21.7761 -20.0087 -0.930634 113 -20.2786 -21.5332 -0.930607 183 -21.83 -19.9321 -0.930171 113 -21.8985 -19.8062 -0.928861 113 -21.9532 -19.7306 -0.928476 113 -20.1114 -21.5585 -0.926912 184 -21.9822 -19.6323 -0.926781 113 -22.052 -19.5087 -0.925625 112 -19.9702 -21.5425 -0.922754 194 -21.0294 -20.1936 -0.914533 117 -21.1116 -19.8313 -0.907214 111 -20.9213 -19.7768 -0.900435 110 -20.7895 -19.7764 -0.896737 110 -24.5202 -21.3256 -0.839192 59 -24.3618 -21.4581 -0.838161 101 -24.429 -21.3814 -0.83816 74 -24.5735 -21.1693 -0.837193 59 -24.2568 -21.5013 -0.836549 114 -24.8106 -20.7697 -0.834678 59 -23.8705 -21.4957 -0.827136 58 -23.3682 -21.513 -0.815532 102 -23.4299 -21.232 -0.81089 57 -23.219 -21.2409 -0.806055 70 -23.5307 -19.8227 -0.783423 56 -23.3259 -19.8387 -0.778717 56 -23.2013 -19.8586 -0.776074 56 -20.2457 -21.0669 -0.733463 85 -21.2728 -19.8919 -0.730431 62 -20.1868 -20.8738 -0.727661 72 -20.1971 -20.6882 -0.723599 91 -21.0211 -19.7804 -0.72205 72 -20.2004 -20.5619 -0.720762 112 -20.8907 -19.7817 -0.71902 71 -20.1933 -20.4258 -0.717474 130 -20.7475 -19.7699 -0.71541 68 -20.2202 -20.261 -0.714315 122 -20.6196 -19.8342 -0.713862 89 -20.2398 -20.1536 -0.712316 126 -20.5199 -19.8627 -0.712186 101 -20.2576 -20.0449 -0.710253 138 -20.403 -19.874 -0.709737 108 -20.2906 -19.9517 -0.708899 131 -23.6114 -19.8099 -0.62675 66 -23.4558 -19.8053 -0.623445 66 -23.2647 -19.8327 -0.619978 66 -23.0839 -19.8043 -0.615752 74 -22.9791 -19.8401 -0.614235 86 -22.8085 -19.8813 -0.611472 65 -22.6331 -19.8541 -0.607409 65 -22.4971 -19.8603 -0.604754 65 -22.288 -19.8009 -0.599444 73 -22.1051 -19.8257 -0.596194 98 -21.9462 -19.808 -0.592672 117 -21.8009 -19.8017 -0.589638 131 -21.6174 -19.8218 -0.586333 135 -21.4668 -19.8084 -0.583082 139 -21.3912 -19.8635 -0.582595 63 -20.1267 -21.1272 -0.582273 170 -20.0864 -20.9528 -0.578101 128 -21.1207 -19.7988 -0.576039 63 -20.9551 -19.7677 -0.572192 76 -19.9715 -20.7027 -0.571057 250 -20.8247 -19.7688 -0.569646 88 -20.0158 -20.554 -0.568998 255 -20.0616 -20.3439 -0.565801 255 -20.1141 -20.2695 -0.565367 102 -19.985 -20.394 -0.565313 255 -20.5406 -19.8084 -0.564824 158 -20.4251 -19.8214 -0.562819 155 -20.1202 -20.0855 -0.561953 207 -20.1761 -20.0152 -0.561682 115 -20.3069 -19.831 -0.560707 137 -20.1762 -19.89 -0.559298 196 -24.1636 -19.8712 -0.430045 168 -23.9452 -19.8812 -0.426742 185 -23.8136 -19.8986 -0.424906 155 -23.6332 -19.8741 -0.421766 124 -23.4273 -19.8267 -0.417933 154 -23.0709 -19.8379 -0.41255 204 -22.9842 -19.8893 -0.411898 105 -22.7428 -19.8683 -0.407901 104 -22.3706 -19.792 -0.401172 109 -22.2456 -19.8063 -0.399459 134 -22.051 -19.8199 -0.396686 165 -21.9042 -19.8125 -0.394362 182 -21.7606 -19.8072 -0.392119 184 -21.5758 -19.8255 -0.389591 173 -20.2192 -21.1354 -0.388534 101 -21.3762 -19.8912 -0.387511 149 -21.4268 -19.813 -0.387185 175 -21.1932 -20.0337 -0.386777 132 -20.1373 -20.9175 -0.384169 158 -21.1351 -19.8533 -0.383392 143 -20.1646 -20.7492 -0.382089 169 -20.1696 -20.6242 -0.380335 124 -20.1881 -20.5137 -0.378989 112 -20.8421 -19.8256 -0.378661 145 -20.2173 -20.4146 -0.37797 100 -20.7061 -19.8204 -0.376582 171 -20.5111 -19.9448 -0.375481 247 -20.565 -19.8719 -0.375236 160 -20.2466 -20.1254 -0.374217 106 -20.3083 -20.0602 -0.374176 99 -20.3341 -19.8971 -0.372218 125 -24.2255 -19.8459 -0.285071 144 -24.0365 -19.8177 -0.282491 160 -23.8351 -19.8413 -0.280288 144 -23.6503 -19.9404 -0.279061 143 -23.6408 -19.8057 -0.277582 201 -23.4289 -19.8802 -0.275789 131 -23.1146 -19.8019 -0.271227 182 -22.9446 -19.7818 -0.268993 169 -22.7856 -19.77 -0.266979 165 -22.5883 -19.7864 -0.264808 165 -22.43 -19.7727 -0.262794 165 -22.2794 -19.7648 -0.260938 158 -22.0892 -19.783 -0.258893 158 -21.9407 -19.7747 -0.257068 162 -21.7895 -19.763 -0.25518 158 -21.6519 -19.7626 -0.253576 157 -21.4746 -19.7873 -0.251782 157 -20.1938 -21.0346 -0.251125 87 -21.3273 -19.7759 -0.249957 152 -20.1855 -20.8288 -0.248702 144 -21.186 -19.7692 -0.248258 152 -20.1725 -20.6851 -0.246939 150 -21.0241 -19.8044 -0.24678 151 -20.9037 -19.8154 -0.245521 159 -20.1687 -20.5518 -0.245397 153 -20.7704 -19.8134 -0.243979 162 -20.153 -20.4073 -0.243603 148 -20.6488 -19.8218 -0.242689 162 -20.1868 -20.2499 -0.242219 147 -20.492 -19.8577 -0.241305 167 -20.2049 -20.1412 -0.241212 146 -20.3808 -19.8746 -0.240235 178 -20.2226 -20.0326 -0.240204 147 -20.2997 -19.9203 -0.239827 154 -24.2599 -19.8771 -0.0785549 157 -24.0909 -19.8653 -0.0772977 192 -23.8665 -19.8697 -0.075749 198 -23.6967 -19.8546 -0.0744736 195 -23.5151 -19.8283 -0.0730524 215 -23.3506 -19.8153 -0.0718316 209 -23.1613 -19.8431 -0.0706838 179 -22.9869 -19.819 -0.0693354 193 -22.8294 -19.8085 -0.0681875 214 -22.6411 -19.8327 -0.0670397 208 -22.4842 -19.8204 -0.0658918 205 -22.3396 -19.8178 -0.0648897 190 -22.1641 -19.8494 -0.0638876 189 -20.9335 -20.9967 -0.0629434 113 -22.0156 -19.8412 -0.0628309 197 -21.8658 -19.8309 -0.0617559 202 -20.8847 -20.8163 -0.0614671 112 -21.7222 -19.8253 -0.0607538 191 -20.8918 -20.6929 -0.0607197 112 -20.9363 -20.5423 -0.0600452 112 -21.5565 -19.861 -0.059861 173 -20.9435 -20.4205 -0.059316 111 -21.4061 -19.847 -0.0587678 185 -20.9602 -20.3087 -0.0587144 111 -20.9865 -20.2066 -0.0582404 111 -21.0655 -20.0923 -0.0580397 111 -21.275 -19.8499 -0.0579115 233 -21.1739 -19.9431 -0.0578206 111 -21.1083 -20.0068 -0.0577844 111 -23.2443 -21.206 0.120723 114 -24.1909 -19.9376 0.121043 137 -24.0172 -19.9217 0.121436 185 -23.8516 -19.9112 0.121803 157 -23.2986 -20.4648 0.121965 112 -23.6198 -19.9075 0.122295 155 -23.2316 -20.2772 0.122441 112 -22.3856 -21.1434 0.12256 112 -23.4457 -19.8873 0.122694 203 -23.218 -20.1373 0.122721 111 -22.4389 -20.9287 0.122855 111 -23.3283 -19.9141 0.122891 111 -22.4634 -20.3017 0.123967 110 -22.4184 -20.1336 0.124366 109 -22.4351 -19.8956 0.124766 130 -22.3367 -19.934 0.124897 109 -21.5641 -19.9251 0.126476 107 -21.7583 -20.0069 0.301939 88 -22.4472 -20.0629 0.303712 89 -23.2259 -19.9849 0.30544 91 -23.3508 -19.9651 0.305705 193 -23.2487 -20.3248 0.306216 91 -23.2743 -21.1348 0.308019 93 -22.2621 -20.3012 0.481963 99 -22.1996 -20.3724 0.481981 99 -22.3664 -20.2041 0.482073 99 -22.4476 -20.1498 0.482293 100 -22.1796 -20.4827 0.482531 100 -22.1665 -20.5999 0.483172 100 -22.6034 -20.1616 0.48343 100 -22.1524 -20.782 0.484216 100 -22.7702 -20.1184 0.484309 100 -22.0986 -20.8625 0.484363 100 -22.928 -20.1298 0.485464 101 -23.0801 -20.1351 0.486545 101 +unknow 0.879581 1 0 38 -52.4583 -21.4969 0.0517703 187 -52.4903 -21.3178 0.0518748 187 -52.5512 -21.0546 0.0519902 187 -52.578 -20.8739 0.0521056 187 -52.2722 -21.6128 0.0521198 187 -52.6625 -20.24 0.0525228 186 -52.5725 -20.3953 0.0525988 186 -52.6641 -20.051 0.0527038 186 -51.8137 -21.7099 0.0531746 186 -52.3993 -19.7621 0.0536613 185 -50.5957 -19.9042 0.0581213 181 -49.8583 -20.5212 0.380757 255 -50.0253 -20.132 0.380783 254 -49.9447 -20.3735 0.380835 183 -50.1273 -19.9903 0.38092 181 -49.8545 -20.7031 0.380969 255 -50.8031 -19.891 0.382836 185 -51.97 -19.8792 0.386344 168 -52.6007 -19.9315 0.388311 166 -53.2653 -19.8971 0.390285 153 -50.1083 -20.2455 0.701121 164 -50.0549 -20.4989 0.701542 164 -50.0457 -20.6789 0.702091 164 -50.3165 -20.1459 0.702551 181 -50.4111 -20.0003 0.702863 178 -50.0654 -20.8714 0.702933 164 -50.7023 -19.8397 0.704806 165 -51.2399 -19.8644 0.709479 166 -51.782 -19.8874 0.714189 167 -52.3452 -19.915 0.719101 168 -53.0004 -19.8785 0.724599 170 -51.2752 -19.9473 1.07622 134 -51.3563 -19.7933 1.07654 134 -51.2945 -21.4544 1.08543 135 -53.0371 -19.965 1.10237 137 -53.6372 -19.999 1.11145 138 -51.6549 -20.0547 1.36525 168 -51.6025 -21.0672 1.37207 174 +unknow 0.939027 1 0 135 -22.9181 25.057 -1.31558 193 -22.9789 24.8871 -1.31181 190 -23.0243 24.7797 -1.30966 190 -23.0542 24.6562 -1.30652 184 -23.0836 24.5327 -1.30337 186 -23.1659 24.389 -1.30122 187 -23.1899 24.2612 -1.29781 185 -23.1953 24.1149 -1.29323 186 -23.292 23.9881 -1.29216 182 -23.3086 23.8548 -1.28839 179 -23.3427 23.7402 -1.28578 178 -26.4576 26.2115 -1.22614 159 -26.6442 25.66 -1.21644 156 -26.4276 25.8545 -1.21567 138 -26.5262 25.7074 -1.21443 154 -26.6728 25.5264 -1.21366 156 -26.7678 25.2174 -1.20812 156 -26.7842 25.0744 -1.20481 156 -26.8233 24.9534 -1.20273 157 -26.8114 24.7074 -1.19595 154 -23.9543 25.5085 -1.1394 155 -23.7822 25.5654 -1.13647 152 -23.5278 25.6127 -1.13116 131 -23.6041 25.5343 -1.13093 144 -24.0574 24.0561 -1.10197 138 -23.9395 24.0891 -1.09965 128 -23.7388 24.0375 -1.0928 139 -23.6324 24.0805 -1.0911 127 -23.5173 24.1902 -1.09103 127 -26.433 24.2991 -0.948953 90 -26.1745 24.2902 -0.942635 74 -25.9972 24.2783 -0.938187 64 -25.7809 24.2285 -0.931998 63 -25.6087 24.2188 -0.927743 63 -25.1725 24.1839 -0.916784 63 -24.9914 24.1615 -0.912078 62 -24.7785 24.1828 -0.90763 62 -24.6039 24.1639 -0.903181 62 -24.4212 24.1358 -0.898346 62 -24.2293 24.173 -0.894801 62 -24.0431 24.1386 -0.889772 61 -23.8278 24.0735 -0.88339 97 -23.6581 24.0528 -0.879071 80 -22.8808 24.6953 -0.876749 61 -23.4677 24.0854 -0.875525 89 -23.3181 24.0829 -0.872108 97 -22.8492 24.5065 -0.871592 73 -22.9287 24.3607 -0.869916 99 -23.1578 24.0683 -0.868176 77 -22.9611 24.2421 -0.867853 87 -23.0234 24.1554 -0.867209 95 -26.1879 24.2586 -0.758738 87 -26.0224 24.2575 -0.755433 76 -25.8062 24.2077 -0.750232 75 -25.6094 24.1747 -0.745735 75 -25.4084 24.2123 -0.742485 75 -25.1967 24.1618 -0.737392 74 -25.0143 24.138 -0.733383 74 -24.7772 24.1356 -0.728724 74 -24.6142 24.1279 -0.725419 73 -24.4359 24.1039 -0.721518 73 -24.2456 24.1426 -0.718592 73 -24.1696 24.2186 -0.718592 73 -23.881 24.0799 -0.710412 72 -23.6791 24.1023 -0.706998 72 -22.8521 24.7709 -0.704667 72 -23.5111 24.082 -0.703423 72 -22.87 24.6345 -0.702284 72 -23.3616 24.0797 -0.700551 72 -22.8791 24.4894 -0.699575 72 -23.211 24.0752 -0.697625 71 -22.9202 24.3027 -0.69665 87 -23.0324 24.1163 -0.695079 71 -22.9497 24.1813 -0.694808 89 -26.2893 24.2857 -0.521767 131 -26.1337 24.2947 -0.519565 121 -25.9418 24.2688 -0.516343 121 -25.6963 24.2673 -0.512673 120 -25.5024 24.2364 -0.50937 120 -25.3206 24.2156 -0.506393 120 -25.1348 24.1898 -0.503294 119 -24.8842 24.1757 -0.49942 118 -24.7251 24.1727 -0.497054 118 -24.5406 24.1438 -0.493955 118 -24.3272 24.1606 -0.491101 117 -24.1578 24.1437 -0.488409 117 -23.9943 24.1316 -0.485881 116 -22.912 25.0072 -0.483554 255 -23.7947 24.1576 -0.483393 116 -23.6319 24.1437 -0.480865 116 -22.8801 24.7376 -0.479069 255 -23.4708 24.1304 -0.478377 115 -22.9168 24.6217 -0.477846 163 -22.9585 24.5117 -0.476786 159 -23.2183 24.2491 -0.476542 115 -23.3281 24.1351 -0.47642 115 -23.027 24.3538 -0.4754 155 -23.0965 24.2741 -0.475196 201 -26.2124 24.3161 -0.35473 105 -26.0219 24.2918 -0.352276 104 -25.7791 24.2934 -0.349507 104 -25.5968 24.2737 -0.347211 103 -25.3918 24.2311 -0.344411 103 -25.1974 24.1971 -0.341831 103 -24.9912 24.2264 -0.339817 102 -24.8063 24.1986 -0.337426 102 -24.6275 24.1754 -0.335161 101 -24.4011 24.1799 -0.332675 101 -24.2373 24.1689 -0.330724 101 -24.0795 24.1627 -0.3289 100 -23.8769 24.1861 -0.326917 100 -22.909 25.1049 -0.326915 100 -23.7112 24.1696 -0.324904 100 -22.8972 24.934 -0.324808 100 -22.9587 24.7657 -0.323518 100 -23.5585 24.1652 -0.323173 99 -22.9573 24.6086 -0.321694 99 -23.4157 24.1701 -0.321663 99 -23.2421 24.2181 -0.32031 99 -22.9689 24.4663 -0.320184 99 -23.0413 24.3128 -0.319209 99 -23.101 24.2229 -0.318831 99 -24.8676 24.6306 -0.111538 131 -24.9648 24.495 -0.111301 131 -23.6015 25.2884 -0.107801 130 -23.5698 25.0961 -0.106326 129 -23.8692 24.3208 -0.103121 128 -23.7633 24.3656 -0.102738 128 -24.2502 25.2792 0.111132 125 -24.1768 25.0445 0.111733 125 -24.1621 24.8722 0.112099 124 -24.2511 24.7295 0.112208 124 -24.2781 24.6019 0.112404 124 -24.4592 24.3992 0.112447 124 -24.3172 24.4872 0.112551 124 +unknow 0.895225 1 0 78 -27.6903 -21.2943 -0.738146 128 -27.6154 -21.3751 -0.737875 131 -27.7792 -21.1551 -0.737766 123 -27.5418 -21.4568 -0.737658 112 -27.8248 -21.0521 -0.737061 93 -27.4128 -21.4952 -0.735546 105 -28.1708 -20.3556 -0.733375 74 -28.1051 -20.4428 -0.733321 74 -28.2021 -20.2437 -0.732291 74 -28.2476 -20.1422 -0.731695 74 -28.321 -19.9939 -0.730991 74 -28.3476 -19.8796 -0.729798 74 -28.3968 -19.7813 -0.729365 74 -28.4419 -19.6144 -0.727793 74 -28.4985 -19.5216 -0.72763 74 -26.4709 -21.5752 -0.716962 114 -26.2886 -21.5645 -0.712953 144 -26.0927 -21.5414 -0.708456 133 -25.9033 -21.5913 -0.705368 72 -26.8783 -19.7461 -0.69534 71 -26.6826 -19.7319 -0.690844 71 -26.4453 -19.8797 -0.688081 78 -26.5066 -19.731 -0.686997 71 -29.2868 -19.7824 -0.512787 134 -28.9987 -19.9211 -0.509525 139 -29.0281 -19.8074 -0.508709 136 -28.765 -19.8937 -0.505284 119 -28.4269 -19.8583 -0.499208 118 -28.1698 -19.8104 -0.494355 118 -27.9688 -19.8005 -0.490889 117 -27.6654 -19.7819 -0.485628 126 -27.4831 -19.7822 -0.48261 132 -27.2865 -19.7709 -0.479225 132 -27.0935 -19.761 -0.475922 134 -26.8424 -19.7721 -0.471926 135 -26.6517 -19.761 -0.468663 130 -26.4726 -19.7572 -0.465686 139 -25.9253 -20.3828 -0.464587 255 -26.2386 -19.9053 -0.463688 147 -26.2819 -19.8083 -0.463199 182 -25.9803 -20.1631 -0.46271 145 -26.0197 -20.063 -0.462099 255 -27.0223 -19.7569 -0.319019 99 -26.7647 -19.763 -0.31581 98 -26.5692 -19.7481 -0.313198 98 -26.0371 -20.1256 -0.310116 97 -26.3436 -19.7094 -0.309989 118 -25.8995 -20.1497 -0.308637 112 -26.1147 -19.86 -0.308542 147 -26.0411 -19.9335 -0.308322 248 -29.4641 -19.825 -0.116361 133 -29.1571 -19.8184 -0.114011 132 -28.8968 -19.7742 -0.111824 131 -28.6699 -19.7513 -0.110002 130 -28.4697 -19.7455 -0.108472 130 -28.2356 -19.7806 -0.106905 129 -27.9952 -19.7434 -0.104919 129 -27.8288 -19.7571 -0.103753 128 -27.5762 -19.7737 -0.101967 127 -27.3681 -19.7548 -0.100328 127 -26.1967 -21.1247 -0.0994207 127 -27.183 -19.7512 -0.0989429 126 -26.9462 -19.7737 -0.0973213 126 -26.4987 -20.1587 -0.0961564 125 -26.736 -19.7488 -0.095645 125 -26.5728 -19.7574 -0.0944972 125 -26.2258 -20.0812 -0.0937512 124 -26.421 -19.7737 -0.093477 134 -26.0897 -20.1728 -0.0932776 124 -25.9994 -20.2337 -0.0929681 132 -27.2949 -19.6603 0.315142 99 -27.1752 -19.9001 0.315283 99 -28.619 -19.8733 0.319037 102 -28.8508 -19.9003 0.319704 103 -29.0565 -19.841 0.320144 103 -29.2609 -19.8462 0.3207 103 -29.5138 -19.8828 0.321445 104 -29.1394 -19.9784 0.529633 115 +unknow 0.888029 1 0 29 -38.1478 24.3521 -0.714861 149 -37.8709 24.3433 -0.710008 148 -37.7472 24.4318 -0.708866 148 -37.4274 24.476 -0.70389 148 -37.1632 24.4704 -0.699323 147 -36.8227 24.4126 -0.69288 175 -36.4846 24.4369 -0.687415 184 -36.1672 24.3894 -0.681502 207 -38.3766 24.2886 -0.506761 166 -38.1417 24.3079 -0.503803 159 -37.8868 24.313 -0.500468 167 -37.5517 24.2647 -0.495622 197 -37.2545 24.3221 -0.492193 170 -36.9507 24.2895 -0.487914 195 -36.6925 24.285 -0.484484 161 -36.3666 24.3164 -0.480489 184 -36.1159 24.3131 -0.477185 181 -38.2423 24.5097 -0.206482 188 -38.2618 24.3529 -0.205863 189 -37.6205 24.2787 -0.20058 203 -37.3046 24.3247 -0.198393 175 -37.0574 24.3299 -0.196535 161 -36.7705 24.3074 -0.194239 160 -36.4708 24.3572 -0.192216 159 -36.1999 24.3412 -0.190085 159 -36.9656 24.3087 0.085952 162 -36.6874 24.374 0.0864878 153 -36.4063 24.3523 0.0871602 152 -36.1472 24.3435 0.0877615 151 +unknow 0.913347 1 0 50 -41.3265 26.1055 -0.788749 159 -41.3659 25.949 -0.78773 159 -41.3369 25.7503 -0.78508 158 -43.6742 25.8527 -0.5907 172 -43.4618 24.2727 -0.575414 138 -43.2076 24.309 -0.572204 138 -42.9883 24.453 -0.570316 138 -41.8344 24.9403 -0.558484 136 -40.5591 25.2275 -0.543696 174 -40.4119 25.3123 -0.542437 194 -40.5123 25.0221 -0.541368 134 -40.7233 24.538 -0.540237 133 -40.4546 24.5495 -0.536713 147 -40.3227 24.6431 -0.535706 133 -40.9273 24.625 -0.227818 171 -40.5931 24.5982 -0.225085 170 -40.2936 24.5903 -0.222716 169 -40.0291 24.6886 -0.221131 169 -39.863 24.7594 -0.220183 168 -43.5218 24.3164 0.0706132 223 -42.9767 24.278 0.0719631 203 -42.7056 24.302 0.0725755 181 -42.4209 24.3166 0.0732316 167 -42.0948 24.3937 0.0738986 166 -41.8004 24.3987 0.0745874 165 -41.5064 24.4021 0.0752763 164 -41.1864 24.4757 0.0759269 164 -40.864 24.458 0.0767086 163 -40.5797 24.4612 0.0773701 162 -40.3813 24.5148 0.0777585 162 -40.1222 24.6169 0.0782178 161 -39.963 24.6923 0.0784805 161 -39.8768 24.8124 0.0785083 254 -40.8246 24.5318 0.360563 133 -41.118 24.5324 0.361378 134 -41.3911 24.5192 0.362116 134 -41.7029 24.439 0.362854 135 -42.0251 24.4506 0.363773 136 -42.3425 24.4574 0.364672 136 -42.6674 24.3775 0.365455 137 -43.0257 24.403 0.366503 160 -40.2816 24.9032 0.640009 148 -40.3699 24.7828 0.640118 148 -40.1757 25.1002 0.640137 148 -40.1914 25.2859 0.641164 148 -40.6678 24.7903 0.642482 148 -40.3182 25.8102 0.644721 149 -40.4935 25.6542 0.645307 149 -41.7043 24.7979 0.650656 150 -42.6913 25.5674 0.66204 154 +unknow 0.872247 1 0 33 -43.6346 -20.7994 -0.233209 173 -43.6528 -20.64 -0.232735 172 -43.7043 -20.4128 -0.232279 172 -43.7391 -20.262 -0.231987 172 -47.5553 -20.1037 0.0656093 174 -44.4602 -20.2969 0.0731411 166 -44.3604 -20.5045 0.0731515 166 -44.3553 -20.325 0.36417 176 -44.3533 -20.5776 0.364506 255 -44.3156 -20.7295 0.364602 179 -44.2883 -20.8866 0.364738 207 -44.2947 -21.06 0.364996 164 -44.4039 -21.3692 0.365746 137 -45.8173 -20.0451 0.368119 155 -46.2986 -19.9965 0.369484 155 -46.806 -20.0417 0.37105 141 -47.2865 -20.0722 0.372519 142 -48.1198 -20.2481 0.375224 144 -44.6556 -20.5423 0.65631 152 -44.729 -20.4061 0.656402 152 -44.5746 -20.7601 0.656474 152 -44.5816 -20.934 0.657207 152 -44.6132 -21.1201 0.658196 153 -45.7108 -20.0778 0.663385 164 -46.1863 -20.1135 0.667509 155 -46.6334 -20.0471 0.671028 156 -47.1268 -20.0838 0.675317 157 -47.6374 -20.1245 0.67977 158 -46.4649 -21.4356 1.01532 126 -46.5448 -21.2953 1.01554 126 -47.5085 -20.4855 1.02428 128 -46.463 -20.4353 1.26782 186 -46.7404 -20.2949 1.27197 157 +unknow 0.817029 1 0 36 -46.4421 25.748 -0.62767 146 -46.3928 25.4355 -0.624619 145 -46.3233 25.2083 -0.621945 145 -46.2281 24.9685 -0.618831 144 -46.2006 24.6731 -0.616252 144 -46.1737 24.4725 -0.614396 144 -46.0592 24.2267 -0.610999 143 -47.9791 24.3316 -0.282771 212 -48.1413 24.2811 0.0595051 221 -47.7439 24.269 0.0604891 237 -47.3649 24.2637 0.0614184 238 -46.6589 24.3662 0.0630039 177 -45.991 25.3197 0.0633842 255 -45.9756 25.1232 0.0636786 248 -46.3203 24.3747 0.0638131 244 -46.0178 24.8654 0.063913 255 -46.0199 24.68 0.0641474 255 -46.076 24.524 0.0642125 255 -46.0973 24.6334 0.375571 245 -46.2063 24.5053 0.375687 194 -46.0549 24.7971 0.375701 250 -45.992 25.0435 0.375902 235 -45.9955 25.233 0.376207 222 -46.5462 24.4052 0.376509 215 -46.0281 25.4392 0.376622 228 -46.093 25.6644 0.37716 217 -46.8569 24.3806 0.377363 227 -47.2266 24.3845 0.37843 232 -47.6065 24.297 0.379395 222 -47.977 24.2963 0.380462 208 -46.8215 24.9362 0.692149 169 -47.062 24.5918 0.692625 162 -46.8627 25.1475 0.693396 162 -47.2774 24.5157 0.694054 162 -46.9159 25.4616 0.695193 162 -47.0304 25.7155 0.697228 163 +unknow 0.705777 1 0 4 -49.7093 24.2343 -0.296491 192 -50.2212 24.1547 0.0545576 184 -49.8317 24.2571 0.0553942 184 -49.7122 24.2973 0.385491 150 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_8.pose b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_8.pose new file mode 100644 index 00000000000..bfdd8e442df --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_8.pose @@ -0,0 +1 @@ +11995 589.019364 33.330300 45.010551 40.747892 -0.002173 -0.010936 -0.639935 0.768348 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_8.seg b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_8.seg new file mode 100644 index 00000000000..f446fe38005 --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_8.seg @@ -0,0 +1,31 @@ +unknow 0.846769 1 0 36 -52.5527 -21.5354 0.0512732 187 -52.583 -21.3552 0.0513816 187 -52.6369 -21.1847 0.0514189 187 -52.562 -20.963 0.0518341 187 -52.9727 -19.7881 0.0519383 187 -52.724 -20.3586 0.052023 186 -52.1865 -21.6733 0.0520571 186 -52.7408 -20.0801 0.0522524 186 -52.5959 -19.836 0.0528593 186 -51.4613 -21.5623 0.0540077 185 -50.5865 -19.9004 0.0579341 181 -49.8435 -20.515 0.380478 255 -50.0011 -20.2134 0.38058 245 -49.7998 -20.772 0.380666 147 -49.9744 -20.3855 0.38071 255 -50.7585 -19.8734 0.382444 189 -51.8711 -19.8411 0.385757 193 -52.4623 -19.8788 0.387585 166 -53.1086 -19.9335 0.389599 153 -50.0765 -20.3241 0.700871 164 -50.0827 -20.5101 0.701568 164 -50.0439 -20.678 0.701825 164 -50.2458 -20.2092 0.701914 164 -50.0308 -20.9491 0.702668 164 -50.4372 -20.0105 0.702866 183 -50.5631 -19.8768 0.703487 173 -51.1453 -19.9201 0.708597 166 -51.6943 -19.8536 0.713065 167 -52.2462 -19.8772 0.717863 168 -52.8419 -19.9137 0.723082 169 -53.5558 -19.8947 0.729144 171 -51.444 -19.827 1.07774 134 -51.2774 -21.5417 1.08544 135 -52.9141 -20.0134 1.10052 143 -53.5249 -19.9569 1.10925 138 -51.6718 -20.061 1.36532 168 +unknow 0.754203 1 0 34 55.9041 -22.344 -1.73258 166 55.7723 -22.5967 -1.73169 223 55.8607 -22.1235 -1.72863 145 55.8722 -21.9252 -1.72663 174 55.8405 -22.2985 -1.42076 164 55.7237 -22.5569 -1.42045 210 55.8471 -22.0979 -1.41891 134 55.868 -21.6001 -1.41449 149 55.6855 -23.5403 -1.02486 255 55.702 -23.3413 -1.02358 255 55.7763 -23.0641 -1.02279 255 55.7855 -22.863 -1.0214 255 55.82 -22.6726 -1.02057 255 55.8613 -22.4852 -1.01991 255 55.9257 -22.2055 -1.019 255 55.9803 -22.0238 -1.01866 255 56.0418 -21.8449 -1.01849 255 57.0156 -24.6017 -0.769252 164 56.9806 -23.3225 -0.760884 163 56.245 -24.4788 -0.757368 168 56.0718 -23.156 -0.746672 161 55.9528 -23.4161 -0.746529 197 55.961 -22.3931 -0.740501 160 55.8512 -22.655 -0.740453 160 56.5854 -23.1023 -0.349488 207 55.6958 -25.1229 -0.349425 255 55.716 -24.9217 -0.348831 206 55.7542 -24.6241 -0.348032 206 55.7855 -24.4288 -0.347566 206 55.8166 -24.0257 -0.346342 206 56.1242 -23.1201 -0.345672 206 55.8261 -23.7187 -0.345307 215 55.8708 -23.5308 -0.345005 237 55.9445 -23.3551 -0.344995 205 +unknow 0.798419 1 0 37 53.8118 5.24239 -1.87348 189 53.7683 5.06772 -1.87117 189 53.6224 4.79921 -1.86464 188 56.1866 5.74945 -1.61129 133 55.914 5.54398 -1.60189 186 56.18 5.7697 -1.32058 174 55.6169 5.53559 -1.30478 180 55.1444 5.3139 -1.29147 189 54.5994 5.0021 -1.27599 183 54.1907 4.79324 -1.26447 157 57.2031 5.98535 -0.963574 229 55.4049 5.44462 -0.926027 224 54.7988 5.12417 -0.913122 228 54.2173 4.89775 -0.900907 235 56.797 5.79172 -0.68918 198 56.5478 5.94597 -0.685529 188 55.6884 5.5025 -0.671402 255 55.4352 5.03828 -0.666768 199 55.3952 5.21016 -0.666385 195 54.8909 4.81527 -0.657945 212 56.1739 5.77457 -0.305872 255 55.7421 5.55306 -0.30177 255 55.0068 5.305 -0.294905 222 54.4039 4.98789 -0.289189 255 55.5729 5.39305 0.0554618 232 54.5362 5.12005 0.0583258 251 54.0418 4.81704 0.0597272 235 54.4191 5.02057 0.384452 232 54.7216 5.22204 0.385499 190 53.8175 4.7837 0.702301 229 54.322 5.08639 0.707178 209 54.7868 5.19455 1.07779 166 54.9122 4.94552 1.0794 160 54.9901 4.91494 1.36237 228 55.0392 4.74507 1.36308 215 55.2412 5.11223 1.36799 225 55.3758 5.38789 1.37136 231 +unknow 0.467514 1 0 14 55.6468 -10.4415 -1.61639 141 55.6734 -10.2656 -1.61619 94 55.5075 -9.42578 -1.60616 93 55.4619 -9.2389 -1.6037 93 55.3358 -9.57564 -1.60153 114 55.2388 -9.82722 -1.59986 93 55.7515 -10.7123 -1.32926 111 55.6747 -10.2448 -1.32486 111 55.4213 -10.0181 -1.31699 110 55.378 -9.20371 -1.31203 135 55.3033 -9.54874 -1.31161 156 55.3291 -9.37429 -1.3115 200 55.5166 -9.47698 -0.939835 177 55.2777 -9.61512 -0.935522 177 +unknow 0.827803 1 0 39 52.8301 -25.4783 -1.68276 175 52.8594 -25.288 -1.68095 96 52.8767 -24.9909 -1.67732 126 52.859 -24.7797 -1.6739 153 52.8605 -24.5781 -1.67118 157 52.863 -24.3777 -1.66852 155 52.9008 -24.0935 -1.6658 152 52.8924 -23.8894 -1.66283 161 52.9107 -23.6978 -1.66082 133 52.9395 -23.4119 -1.6579 171 52.9743 -23.2286 -1.65654 142 52.9517 -23.0207 -1.65318 167 53.0173 -22.7528 -1.65168 131 53.2202 -22.2482 -1.65133 95 53.0321 -22.3657 -1.64721 239 52.8283 -25.6605 -1.38311 114 52.869 -25.4753 -1.38191 114 52.8325 -24.9482 -1.37484 172 52.8146 -24.7371 -1.37196 189 52.8232 -24.539 -1.36989 159 52.8456 -24.2473 -1.36711 198 52.8506 -24.0488 -1.36499 167 52.8603 -23.853 -1.36303 171 52.8492 -23.6484 -1.36047 166 52.9125 -23.3781 -1.35905 162 53.329 -22.2719 -1.35752 112 52.9924 -23.0164 -1.35708 139 52.8997 -23.174 -1.35649 219 53.152 -22.3943 -1.35439 112 52.9783 -22.5173 -1.35137 196 52.9738 -25.6043 -0.991981 183 52.9404 -25.3833 -0.989401 183 52.953 -25.1851 -0.987882 183 52.9933 -24.8988 -0.986113 183 53.0151 -24.706 -0.984839 183 53.1407 -23.1577 -0.974116 181 52.9466 -23.47 -0.973075 181 53.0314 -25.6004 -0.718883 158 53.0322 -25.3956 -0.717488 157 +unknow 0.736039 1 0 11 52.8881 11.1976 -1.87306 189 52.6004 10.534 -1.85706 188 52.5326 10.7781 -1.85636 188 52.2756 11.1603 -1.51357 90 52.1989 10.9725 -1.5099 89 52.0628 10.7731 -1.5043 255 52.1051 10.5261 -1.50405 255 52.4419 11.2188 -1.24331 112 52.3576 11.0289 -1.24001 106 52.3039 10.8461 -1.23758 106 52.2936 10.5872 -1.23591 106 +unknow 0.917174 1 0 33 49.9786 -28.9331 -1.65385 95 49.967 -28.7172 -1.65004 95 50.0203 -28.2277 -1.6437 149 50.0442 -28.0343 -1.6413 158 51.3394 -25.4596 -1.63934 94 50.0377 -27.8245 -1.63781 163 50.0842 -27.5422 -1.6347 146 50.7191 -25.3511 -1.61988 94 50.1228 -26.4463 -1.61898 142 50.1578 -26.2636 -1.61723 130 50.1621 -25.9655 -1.61289 135 50.4303 -25.4052 -1.61234 116 50.2227 -25.5981 -1.6092 241 49.9491 -29.1026 -1.35837 238 49.9053 -28.8674 -1.35413 167 49.9034 -28.4492 -1.34842 190 49.9638 -28.1725 -1.34613 190 49.9509 -27.9587 -1.34298 193 51.2657 -25.4003 -1.34201 112 49.9598 -27.7579 -1.34053 225 50.7797 -25.3583 -1.32972 111 50.1798 -26.4529 -1.32886 111 50.457 -25.3953 -1.32236 187 50.221 -25.5738 -1.31885 226 50.1208 -25.7214 -1.31826 209 50.0691 -27.6933 -0.959114 242 50.827 -25.9614 -0.956074 190 50.5389 -26.0149 -0.951352 179 50.2233 -26.555 -0.950774 219 50.2569 -26.3711 -0.949622 246 50.3022 -26.1937 -0.948756 178 50.1376 -29.0498 -0.704301 186 50.1818 -28.8652 -0.703441 156 +unknow 0.885092 1 0 48 47.8687 30.3594 -2.33467 255 47.9554 30.2035 -2.33423 225 47.9451 29.987 -2.32867 211 48.0161 29.3018 -2.31522 186 47.9781 29.072 -2.30841 209 46.9625 30.304 -2.29906 185 47.9176 28.7274 -2.2981 245 48.0112 28.3748 -2.29362 226 47.9218 28.5255 -2.29362 255 46.2775 30.0679 -2.26749 183 46.3923 28.5102 -2.2345 182 46.1496 28.5611 -2.22642 181 48.9258 28.3991 -1.96937 196 48.2039 28.4888 -1.94712 194 47.8359 28.4747 -1.93465 193 47.4956 28.5762 -1.92541 193 47.1543 28.5732 -1.91409 192 45.5769 29.007 -1.87128 189 45.6809 28.7717 -1.86982 189 49.1397 28.4313 -1.62012 152 48.7013 28.3821 -1.60711 160 48.3208 28.466 -1.59789 166 47.9648 28.4594 -1.58791 166 47.6144 28.454 -1.57812 169 47.2318 28.5281 -1.56877 180 46.8977 28.5277 -1.55956 176 46.5778 28.5338 -1.55086 151 45.6733 29.5833 -1.54421 128 46.2567 28.5371 -1.5421 185 45.6517 29.366 -1.53984 124 45.6781 29.1805 -1.53733 146 45.964 28.6564 -1.53611 187 45.7256 28.9083 -1.53392 210 45.8145 28.7634 -1.53385 125 49.0216 28.3868 -1.32465 184 48.7197 28.4169 -1.31799 153 48.3114 28.4848 -1.30938 189 48.0205 28.5171 -1.30305 110 46.7594 28.4689 -1.27312 108 46.6441 28.6 -1.2723 108 48.8226 28.6016 -0.943996 178 48.4895 28.7142 -0.939309 177 47.3321 29.8674 -0.93143 177 47.2122 29.5847 -0.926302 198 47.2169 29.2785 -0.92309 201 47.2287 29.0808 -0.921178 239 47.366 28.7565 -0.920124 255 47.2362 28.8811 -0.919186 240 +unknow 0.940291 1 0 41 41.7554 19.1183 -2.1142 108 41.7407 18.9532 -2.11006 108 41.6614 18.3675 -2.0943 108 41.5944 18.1823 -2.08742 107 41.5659 17.937 -2.08116 107 41.4843 17.7475 -2.07358 107 41.5012 17.6008 -2.07146 107 40.9474 18.4387 -2.06275 106 40.7765 18.1312 -2.04849 106 43.064 19.5062 -1.91243 162 40.5881 18.1529 -1.78614 154 40.3893 17.9118 -1.77358 154 40.503 17.4318 -1.76965 153 40.3576 17.7462 -1.76928 153 40.4297 17.551 -1.76875 153 40.5215 18.2113 -1.50168 161 40.4844 17.9659 -1.49653 255 40.3174 17.7406 -1.48714 255 40.34 17.5995 -1.48575 237 40.5608 17.0174 -1.48476 255 40.428 17.1113 -1.48145 255 40.3575 17.2311 -1.48076 255 40.3031 17.3579 -1.48075 255 40.7626 18.3928 -1.2319 78 40.5476 17.9136 -1.21928 183 40.482 18.0368 -1.21896 77 40.4261 17.7082 -1.21304 125 40.4595 17.5716 -1.21226 110 40.5363 17.3783 -1.21208 152 41.2593 18.4133 -1.01438 93 41.0134 18.1495 -1.0054 92 40.9182 17.9539 -1.00091 162 40.9304 17.8062 -0.999615 132 40.9624 17.5911 -0.998105 161 41.0137 17.4607 -0.997999 133 41.0555 17.3263 -0.997623 139 42.1455 18.6137 -0.515654 130 42.1396 18.4531 -0.514558 130 42.171 18.2305 -0.51362 130 42.2152 18.0925 -0.513404 130 42.2497 17.9504 -0.513029 130 +unknow 0.826093 1 0 45 33.7726 -9.51533 -1.76411 140 33.9873 -8.48978 -1.76091 103 33.8868 -8.57795 -1.75665 103 33.6977 -8.30531 -1.74259 112 33.7042 -8.1947 -1.74146 130 33.4186 -9.24615 -1.74084 140 33.3993 -9.128 -1.73802 236 33.2427 -8.97321 -1.72723 255 33.1727 -8.78688 -1.7207 141 33.661 -8.67302 -1.54995 85 33.6874 -8.3982 -1.54781 85 33.4022 -9.22453 -1.54452 139 33.6541 -8.16558 -1.54335 85 33.436 -8.83929 -1.54106 85 33.3636 -9.10109 -1.54097 166 33.1992 -8.94413 -1.53085 132 33.7017 -9.52563 -1.3632 168 33.7077 -9.35605 -1.36139 177 33.7657 -8.74678 -1.35679 173 33.693 -8.33385 -1.34905 125 33.6608 -8.43821 -1.34879 163 33.3766 -9.15159 -1.34461 190 33.3183 -9.02325 -1.34056 216 33.1998 -8.87941 -1.33374 255 33.5777 -8.56536 -1.12604 130 33.6323 -8.29849 -1.12557 130 33.5615 -8.39293 -1.1238 130 33.1895 -9.07972 -1.11667 214 33.2102 -8.97331 -1.11636 130 33.6985 -8.6673 -0.912907 63 33.4965 -8.84021 -0.908019 110 33.2411 -9.16506 -0.902816 111 33.2382 -8.93997 -0.900808 253 33.1829 -9.03702 -0.899911 226 33.8207 -8.77822 -0.737995 255 33.8346 -8.66844 -0.737611 74 33.6982 -8.85945 -0.735346 188 33.2056 -9.12111 -0.724315 178 33.1589 -8.99628 -0.722197 239 33.1638 -8.88583 -0.721542 229 33.4736 -8.92161 -0.498109 255 33.2857 -9.09601 -0.495347 203 33.2736 -8.98049 -0.494486 255 33.2991 -8.94774 -0.334442 242 33.337 -8.78969 -0.334371 138 +unknow 0.896995 1 0 53 29.0292 -20.3904 -1.78655 130 28.8546 -20.4716 -1.78116 125 29.663 -19.2742 -1.78085 129 28.7787 -20.554 -1.78038 126 28.6393 -20.7274 -1.77972 138 29.431 -19.5871 -1.77964 121 28.5026 -20.8339 -1.77703 129 28.6654 -20.6094 -1.77701 182 28.4209 -20.9115 -1.77591 168 32.0549 -19.8221 -1.69884 92 31.7529 -19.8426 -1.6864 103 29.2849 -21.5279 -1.63101 126 29.0823 -21.5199 -1.62251 130 29.2523 -21.0122 -1.61429 88 28.9176 -20.9095 -1.5975 87 29.7331 -19.6349 -1.59468 121 28.868 -20.5985 -1.58625 87 29.5283 -19.633 -1.58598 135 28.7854 -20.3353 -1.57511 95 32.2696 -19.8675 -1.49281 135 31.9838 -19.9002 -1.48268 134 29.9104 -19.6712 -1.3987 128 29.7117 -19.6748 -1.39134 128 28.6844 -20.6593 -1.37858 190 28.6435 -20.4936 -1.37274 255 28.6442 -20.3584 -1.36923 255 28.6238 -20.1416 -1.36285 255 32.3152 -19.876 -1.25325 141 31.9531 -19.8612 -1.24108 185 31.0258 -19.6918 -1.20735 137 30.7494 -19.7201 -1.19896 137 29.7706 -19.8259 -1.16964 134 28.9483 -20.9642 -1.16871 134 29.7461 -19.6749 -1.16562 134 28.8243 -20.7364 -1.15969 133 28.8227 -20.5981 -1.15653 148 28.8904 -20.3055 -1.15212 158 28.7178 -20.387 -1.1485 150 29.1572 -21.0618 -0.951443 64 29.1079 -20.8875 -0.946857 64 29.0545 -20.7113 -0.942143 64 28.9986 -20.5345 -0.937364 71 31.6749 -19.872 -0.804998 79 31.4349 -19.8591 -0.799313 78 31.2635 -19.9575 -0.79683 78 30.8779 -19.8478 -0.78643 78 29.7833 -21.191 -0.782353 77 29.9214 -19.8356 -0.764561 76 31.243 -20.1145 -0.377166 140 31.0656 -20.1385 -0.375032 128 30.8817 -20.2265 -0.373373 127 30.7423 -20.4124 -0.373166 125 30.7913 -20.3058 -0.372876 125 +unknow 0.874899 1 0 72 27.8348 26.5013 -2.18032 133 24.9619 24.771 -2.17509 106 25.0585 24.6335 -2.17319 136 27.6389 26.481 -2.17063 172 25.1072 24.5267 -2.17048 135 25.1569 24.4213 -2.16791 135 27.4535 26.4694 -2.16181 140 27.0379 26.4818 -2.1438 184 26.334 24.5283 -2.02816 123 26.149 24.51 -2.01897 106 25.9512 24.4784 -2.00866 114 27.283 24.7623 -1.86198 128 27.0415 24.6983 -1.84951 127 26.8183 24.6493 -1.83839 146 26.5556 24.6395 -1.82715 175 26.3482 24.6014 -1.81716 128 26.0905 24.5144 -1.80323 125 25.3389 25.2735 -1.80255 227 25.5653 24.9445 -1.79862 132 25.3967 25.0934 -1.79772 190 25.5649 24.7099 -1.78941 141 25.6194 24.6073 -1.78761 255 27.6661 24.7355 -1.668 90 27.4605 24.7075 -1.6593 90 27.2032 24.7091 -1.6497 90 26.972 24.6544 -1.63918 89 26.7296 24.5877 -1.62786 120 26.4978 24.6061 -1.61987 112 26.3444 24.6184 -1.61461 88 26.066 24.5123 -1.60066 88 25.4052 24.9663 -1.59247 122 25.8466 24.4596 -1.59075 101 25.4506 24.8542 -1.59014 101 25.5488 24.716 -1.58883 87 25.5787 24.59 -1.5855 87 25.6544 24.5081 -1.58539 109 27.1058 24.7159 -1.43672 131 26.8809 24.6657 -1.42775 130 26.6874 24.6429 -1.42066 130 26.4293 24.6361 -1.41196 129 26.2003 24.5768 -1.40264 143 25.5375 25.1909 -1.4003 153 25.5538 25.049 -1.39636 145 25.6343 24.8921 -1.39402 145 25.9036 24.6059 -1.39385 220 25.698 24.7975 -1.39313 151 25.7527 24.6945 -1.39169 192 27.8049 24.8227 -1.22605 139 27.5958 24.7925 -1.21928 138 27.3039 24.764 -1.21019 138 27.0369 24.6773 -1.20034 144 26.141 25.49 -1.19672 137 26.7869 24.604 -1.19134 136 26.1501 25.2597 -1.19079 136 26.1846 25.1346 -1.18841 136 26.2302 25.0205 -1.18664 136 26.492 24.7197 -1.18602 136 26.3923 24.7823 -1.18487 136 26.2752 24.9064 -1.18487 136 27.5567 25.215 -0.994358 67 27.5914 25.088 -0.992426 66 26.6301 26.0318 -0.990748 66 26.7564 24.8709 -0.967888 65 26.9851 26.0113 -0.805776 79 26.9555 25.8199 -0.801609 79 27.6798 24.9733 -0.800369 79 26.9307 25.6346 -0.797659 78 26.9886 25.4485 -0.795334 78 27.0173 25.3157 -0.79344 78 27.0279 25.1667 -0.790897 78 27.2218 24.951 -0.79079 78 27.1182 25.0134 -0.78987 78 +unknow 0.977836 1 0 171 24.7701 -19.5606 -1.75432 162 24.538 -19.8193 -1.7531 119 24.6866 -19.621 -1.75258 112 24.614 -19.6897 -1.75172 154 24.3867 -19.9515 -1.75099 120 24.4446 -19.871 -1.75061 150 24.3039 -20.0115 -1.74938 157 24.2017 -20.1195 -1.74877 121 23.7567 -20.4538 -1.74109 107 23.6833 -20.5205 -1.74035 117 23.5064 -20.6926 -1.73912 115 23.5593 -20.6082 -1.73812 145 23.3831 -20.7147 -1.73428 148 23.2822 -20.822 -1.73404 115 23.1243 -20.9437 -1.73181 102 23.8278 -19.9351 -1.72354 100 23.2325 -19.5607 -1.68016 150 23.016 -19.6893 -1.67508 118 23.0671 -19.6079 -1.6742 120 25.8542 -20.0461 -1.63126 145 26.1238 -19.6702 -1.63045 166 25.9823 -19.6919 -1.62483 204 25.6844 -19.7858 -1.61473 142 24.1956 -21.2556 -1.6027 126 25.3233 -19.7627 -1.59787 193 25.1483 -19.8176 -1.59203 139 24.9497 -19.7887 -1.58226 161 24.7546 -19.7612 -1.57271 178 23.3976 -21.1487 -1.56517 129 24.5616 -19.7339 -1.56327 175 23.4163 -21.0324 -1.56157 210 24.338 -19.7438 -1.55383 180 23.4855 -20.5025 -1.54468 119 24.1427 -19.7117 -1.54417 190 23.9649 -19.6925 -1.53574 182 23.7426 -19.6982 -1.52631 187 23.5365 -19.6525 -1.51574 128 23.3859 -19.6519 -1.50923 131 23.1909 -19.6754 -1.5017 140 22.9668 -19.735 -1.49429 238 22.9892 -19.629 -1.49136 116 26.3584 -19.6298 -1.45464 172 26.1444 -19.6625 -1.44695 200 25.7694 -19.6349 -1.43098 110 25.5769 -19.6793 -1.42461 128 25.3714 -19.6481 -1.41541 165 25.1851 -19.6306 -1.40742 162 24.9731 -19.6551 -1.39974 161 24.7892 -19.6366 -1.39185 161 24.6228 -19.6309 -1.38507 163 24.4474 -19.6168 -1.37769 162 24.2539 -19.65 -1.37112 163 24.0713 -19.6275 -1.36323 162 23.9154 -19.6257 -1.35707 158 23.6982 -19.6348 -1.34888 145 23.3848 -19.624 -1.33634 139 23.1961 -19.6525 -1.32997 122 22.9915 -19.6034 -1.32046 95 22.8873 -19.639 -1.31764 123 22.7394 -19.6363 -1.31187 186 22.5955 -19.6986 -1.30844 158 22.291 -19.9947 -1.30684 75 22.4039 -19.7806 -1.3039 108 22.306 -19.882 -1.3036 81 26.4517 -19.6272 -1.27024 166 26.2629 -19.6799 -1.26486 145 26.0542 -19.6517 -1.2566 158 25.8601 -19.6333 -1.24916 129 25.6753 -19.6845 -1.24396 117 25.4693 -19.6541 -1.23579 231 25.2858 -19.6397 -1.22888 209 25.0625 -19.6564 -1.22144 205 24.8876 -19.646 -1.21498 209 24.7052 -19.6285 -1.20807 208 24.5357 -19.62 -1.20188 208 24.3325 -19.6464 -1.19552 210 24.1621 -19.6346 -1.18924 212 23.9919 -19.622 -1.18296 209 23.7913 -19.6459 -1.17668 206 23.6141 -19.6249 -1.16995 196 23.1607 -19.683 -1.15605 111 22.9894 -19.6622 -1.14959 255 22.8426 -19.6614 -1.14457 205 22.325 -20.2145 -1.14363 173 22.6833 -19.7113 -1.14063 202 22.3349 -20.0962 -1.14039 206 22.3577 -19.99 -1.13796 209 22.5731 -19.7404 -1.13776 209 22.383 -19.8866 -1.13571 220 22.472 -19.7769 -1.13543 219 26.3286 -19.7022 -1.05854 124 26.1342 -19.6849 -1.05215 124 25.886 -19.6255 -1.04314 254 25.7012 -19.6768 -1.03868 212 25.5191 -19.6646 -1.03283 202 25.3183 -19.6368 -1.02605 235 25.1352 -19.6214 -1.02012 203 24.9154 -19.6393 -1.01389 235 24.741 -19.628 -1.00835 205 24.5512 -19.6033 -1.00203 233 24.3637 -19.6421 -0.997338 208 24.1949 -19.6316 -0.992026 207 24.0232 -19.6177 -0.98656 211 23.8566 -19.6067 -0.981324 212 23.6625 -19.6346 -0.976246 210 23.4888 -19.6152 -0.970625 203 23.3261 -19.6039 -0.965544 198 23.1376 -19.6321 -0.960696 234 23.0135 -19.6514 -0.957542 214 22.8744 -19.6572 -0.953616 217 22.3935 -20.1166 -0.951418 249 22.7136 -19.7057 -0.950156 217 22.4179 -20.0115 -0.949409 193 22.4701 -19.8686 -0.947243 230 22.5929 -19.7257 -0.947155 239 22.5159 -19.7834 -0.94639 237 25.9802 -19.7822 -0.844557 59 25.7028 -19.7632 -0.837084 201 25.3717 -19.6361 -0.826125 120 24.9158 -19.7255 -0.81634 58 24.738 -19.7116 -0.811573 205 24.4937 -19.7065 -0.805325 151 24.3337 -19.7042 -0.801267 147 24.1631 -19.6922 -0.796757 143 23.9836 -19.6718 -0.791861 180 23.7859 -19.698 -0.787483 146 23.6148 -19.6819 -0.782908 153 23.4624 -19.6802 -0.779108 145 23.2671 -19.7041 -0.774795 148 23.1214 -19.7059 -0.771252 150 22.488 -20.4197 -0.771177 255 22.3797 -20.5147 -0.770669 255 22.9804 -19.7108 -0.767903 121 22.4714 -20.1487 -0.764909 115 22.3798 -20.1938 -0.763689 223 22.7057 -19.787 -0.762821 136 22.4629 -20.0142 -0.761807 138 22.5449 -19.8976 -0.761284 89 22.5953 -19.8161 -0.760762 168 25.4742 -19.8003 -0.66616 69 25.1894 -19.898 -0.661729 90 24.4707 -20.0261 -0.648749 68 24.2082 -20.1306 -0.645077 89 24.3165 -19.7723 -0.641154 67 23.493 -19.786 -0.624215 66 23.555 -19.7121 -0.62421 81 22.4909 -20.8299 -0.622671 119 23.2808 -19.7954 -0.619994 214 22.4459 -20.6575 -0.618599 137 22.4518 -20.5329 -0.616425 134 23.1152 -19.7799 -0.616313 188 22.6049 -20.3492 -0.61614 115 22.5305 -20.4107 -0.615766 168 22.6419 -20.2541 -0.615158 136 22.689 -20.1682 -0.614557 124 22.9924 -19.8002 -0.61415 172 22.7568 -20.0373 -0.613573 120 22.8431 -19.8598 -0.612152 111 24.9569 -19.9212 -0.443572 110 24.4702 -19.8498 -0.434934 130 23.433 -21.0462 -0.434779 109 23.3617 -20.8501 -0.431018 108 23.3806 -20.7355 -0.429747 108 23.3714 -20.5315 -0.426841 107 23.8646 -19.9249 -0.426388 107 23.3378 -20.3726 -0.424182 107 23.3503 -20.2546 -0.422789 107 23.6533 -19.8751 -0.422434 212 23.3832 -20.091 -0.421107 113 23.5014 -19.9372 -0.420892 152 24.099 -20.3917 -0.2894 100 +unknow 0.756885 1 0 69 19.6856 -17.3984 -1.7206 248 19.5707 -17.4617 -1.71737 198 19.117 -17.9398 -1.71653 202 19.0547 -17.9943 -1.71595 199 19.1955 -17.8441 -1.71594 199 19.25 -17.7823 -1.71579 202 19.4905 -17.5004 -1.71488 197 19.4059 -17.5348 -1.71195 223 19.2666 -17.5191 -1.7036 184 19.1119 -17.5435 -1.69641 204 17.9416 -17.5378 -1.63366 156 19.481 -17.593 -1.57123 201 19.0061 -17.5478 -1.54536 81 18.5723 -17.53 -1.52302 174 18.1327 -17.4965 -1.49986 162 17.9538 -17.5432 -1.49336 144 17.8055 -17.6738 -1.49242 112 19.4019 -17.456 -1.41418 138 19.0987 -17.5669 -1.40487 165 19.1524 -17.5054 -1.40474 109 18.8027 -17.5135 -1.38909 220 18.5746 -17.4651 -1.37667 108 18.4777 -17.4835 -1.37307 213 18.1481 -17.5536 -1.36127 151 18.0843 -17.6022 -1.36053 101 17.8165 -17.6158 -1.34923 101 17.8134 -17.5024 -1.34413 115 19.2072 -17.5324 -1.2536 132 18.7811 -17.3617 -1.22944 157 18.5557 -17.5356 -1.22687 182 18.684 -17.3812 -1.22618 251 18.7679 -17.2405 -1.22426 153 18.5524 -17.4226 -1.22237 124 18.0694 -17.5668 -1.20833 124 17.9642 -17.5746 -1.2044 124 19.3538 -17.4657 -1.11051 65 19.1393 -17.3812 -1.09958 186 19.0557 -17.4698 -1.09949 146 18.6385 -17.5783 -1.08777 221 18.6907 -17.5169 -1.08756 112 18.7045 -17.2557 -1.07905 194 18.6195 -17.2858 -1.07693 192 17.9993 -17.5723 -1.06421 111 17.8452 -17.5867 -1.05916 123 18.7793 -17.2798 -0.937011 255 18.34 -17.636 -0.933631 165 18.6515 -17.2709 -0.932526 245 18.5349 -17.3259 -0.930377 225 18.4527 -17.358 -0.928676 227 18.3719 -17.3912 -0.927064 171 18.8681 -17.543 -0.784114 198 18.8615 -17.4266 -0.780872 156 18.972 -17.1457 -0.776694 150 18.8408 -17.1891 -0.77408 227 18.7279 -17.194 -0.771002 170 18.4707 -17.3359 -0.767472 200 18.3538 -17.3348 -0.764162 235 18.2949 -17.3883 -0.763935 143 18.2909 -17.6386 -0.610984 79 18.6699 -17.2281 -0.610759 144 18.5136 -17.355 -0.609867 161 18.5629 -17.2377 -0.608441 168 18.408 -17.3652 -0.607614 181 18.4963 -17.2868 -0.47791 223 18.351 -17.3683 -0.476564 204 18.3953 -17.3009 -0.47618 224 18.6006 -17.4668 -0.312719 240 18.4598 -17.4442 -0.310315 192 18.4982 -17.4229 -0.192489 76 +unknow 0.822537 1 0 44 17.6788 22.7296 -1.90476 158 17.5045 22.7258 -1.89669 167 17.2007 22.8469 -1.89024 233 17.3021 22.7576 -1.88951 182 17.3614 22.6873 -1.88804 173 17.0331 22.7731 -1.87852 184 16.9246 22.7769 -1.87397 175 16.7993 22.8323 -1.87177 190 17.4967 22.7368 -1.73551 192 17.3622 22.7091 -1.72847 105 17.2679 22.7334 -1.7259 57 17.0602 22.8299 -1.72265 122 16.9361 22.8128 -1.71669 99 17.7657 22.7939 -1.5871 117 17.4146 22.8577 -1.57691 162 17.4134 22.7079 -1.56946 215 17.2487 22.7882 -1.56723 215 17.0812 22.7895 -1.56102 131 17.7203 22.7758 -1.41265 254 17.7893 22.7169 -1.41242 148 17.3988 22.8771 -1.40613 191 17.4281 22.7668 -1.4022 195 17.0002 23.0211 -1.39917 234 17.2005 22.7642 -1.39434 155 16.9486 22.8008 -1.38749 152 17.0118 22.7362 -1.3867 255 17.7277 22.6746 -1.24642 161 17.3787 22.888 -1.2442 185 17.6208 22.6845 -1.24349 197 17.5103 22.6892 -1.24025 177 17.3838 22.7461 -1.23864 126 17.3258 23.041 -1.08416 169 17.698 22.7083 -1.08245 179 17.2777 22.8271 -1.07519 186 17.3384 22.7583 -1.07438 138 17.4443 22.6748 -1.07429 235 17.5154 22.6199 -1.07429 216 17.6395 23.045 -0.908245 111 17.6593 22.9215 -0.904934 111 17.702 22.7545 -0.900855 255 17.7475 22.6657 -0.899238 241 17.7891 22.7589 -0.721624 207 17.6869 22.7752 -0.720014 53 17.7516 22.7695 -0.572779 62 +unknow 0.92432 1 0 810 14.5774 -1.36693 -1.75921 165 14.5299 -1.61615 -1.75628 97 14.1489 -1.1761 -1.26738 209 14.1047 -1.10561 -1.26218 255 14.0764 -1.05897 -1.25886 255 14.0618 -1.01349 -1.25699 234 14.6271 -1.26157 -1.23841 195 14.1289 -1.18156 -1.10973 215 13.9623 0.150608 -1.08961 86 14.1935 -1.19489 -1.02535 134 14.1635 -1.1475 -1.0224 255 14.1213 -1.09935 -1.01842 255 14.1204 -1.03235 -1.01789 255 14.0679 -0.983988 -1.01304 255 14.0391 -0.937605 -1.01027 255 14.2338 -1.2066 -0.953383 94 14.1938 -1.00143 -0.948819 255 14.17 -1.15648 -0.947849 255 14.1736 -1.11196 -0.947847 255 14.1491 -0.953702 -0.944912 255 14.123 -1.04116 -0.943289 203 14.1262 -0.907632 -0.942795 255 14.1243 -0.84071 -0.942304 230 14.214 -1.10188 -0.836268 154 14.185 -1.21175 -0.834806 153 14.1 -1.04828 -0.827613 186 14.0973 -1.00355 -0.827171 209 14.0964 -0.95898 -0.826876 230 14.0908 -0.891883 -0.82614 196 14.0677 -0.84601 -0.824232 226 14.2067 -1.12118 -0.755844 164 14.1933 -1.18746 -0.755305 95 14.1325 -0.95924 -0.750013 255 14.137 -0.825786 -0.749737 251 14.1166 -1.06963 -0.749476 114 14.1179 -1.02513 -0.749338 255 14.1327 -0.758742 -0.749193 255 14.1156 -0.913588 -0.748657 255 14.1144 -0.869002 -0.748384 255 14.0673 -0.711035 -0.744585 201 14.1549 -1.17867 -0.672923 73 14.1427 1.2274 -0.672338 168 14.1187 1.18069 -0.6706 71 14.0949 -1.12898 -0.668946 158 14.0854 -1.01692 -0.667823 255 14.0722 -1.06039 -0.667203 164 14.0606 -0.970685 -0.666082 255 14.0471 -0.90323 -0.664961 255 14.0419 -0.858593 -0.664462 255 14.0445 -0.814474 -0.66446 252 14.0391 -0.769896 -0.663962 255 14.0066 -0.701865 -0.661723 201 14.2779 1.22493 -0.595594 179 14.2678 -1.20228 -0.59501 126 14.2244 -1.04135 -0.591857 255 14.1859 -1.15066 -0.590176 192 14.1937 -0.994343 -0.589945 255 14.1812 -1.08306 -0.589612 134 14.1783 -0.926181 -0.588819 255 14.1384 1.16795 -0.587506 255 14.1683 -0.679965 -0.587461 255 14.1413 -0.879228 -0.58657 255 14.138 -0.834456 -0.586231 245 14.1366 -0.78982 -0.586004 246 14.1282 -0.722605 -0.585327 168 14.0626 -0.630818 -0.581391 190 14.2077 -1.20476 -0.511609 146 14.1972 1.21046 -0.511013 188 14.1672 -1.11163 -0.509178 147 14.1305 -1.0417 -0.507052 255 14.1059 -1.15131 -0.506247 91 14.1115 0.846797 -0.505362 255 14.0867 1.08989 -0.504949 183 14.0753 1.13351 -0.504543 168 14.0838 -0.993692 -0.504521 255 14.0809 -0.949028 -0.504216 255 14.101 -0.52834 -0.504098 255 14.0642 1.04375 -0.503636 255 14.0673 -0.881505 -0.503303 255 14.086 -0.439137 -0.503185 255 14.064 -0.83694 -0.502998 255 14.0535 0.998602 -0.50293 101 14.0569 0.887951 -0.502731 246 14.0566 -0.792171 -0.502491 255 14.0362 -0.724642 -0.501274 255 14.0365 -0.680442 -0.501172 255 14.0385 -0.636342 -0.50117 255 14.0385 -0.592147 -0.501067 255 14.0427 -0.481871 -0.501063 248 14.0368 0.533042 -0.500822 255 14.0351 0.577138 -0.500821 255 14.04 -0.371397 -0.500755 255 14.0364 0.488875 -0.500723 255 14.0409 0.0256743 -0.500538 255 14.0398 0.180059 -0.500532 255 14.0364 0.268235 -0.500428 220 14.2458 1.25528 -0.432212 53 14.2256 -1.2107 -0.431229 187 14.1875 -1.16265 -0.429343 103 14.1751 -1.11685 -0.428623 255 14.1276 -1.00163 -0.426106 255 14.1224 -1.04586 -0.426018 223 14.1287 -0.957107 -0.426014 255 14.1271 -0.890151 -0.425742 255 14.1258 -0.845533 -0.425561 255 14.1261 -0.734263 -0.425287 255 14.1145 -0.800385 -0.424931 255 14.0745 -0.643042 -0.422772 167 14.0205 -0.684817 -0.420441 255 14.1604 -1.21115 -0.338148 151 14.1596 1.19684 -0.337984 55 14.1482 -1.16532 -0.33753 109 14.1259 -1.11877 -0.336527 141 14.1223 -1.00691 -0.336061 255 14.1113 1.1259 -0.335908 170 14.1214 -0.96226 -0.335905 255 14.1138 -0.89492 -0.335441 255 14.1052 -0.805405 -0.334898 255 14.0693 -1.04747 -0.334137 195 14.0955 -0.139678 -0.333641 222 14.0692 -0.692452 -0.333277 255 14.0475 0.987813 -0.333063 242 14.0509 0.877206 -0.332913 164 14.048 0.921341 -0.332911 236 14.0507 -0.846491 -0.332898 255 14.0436 0.832489 -0.332529 142 14.0458 -0.75764 -0.332509 255 14.0334 0.765569 -0.331993 208 14.0359 0.677279 -0.331918 187 14.0277 0.721078 -0.331686 183 14.032 -0.535963 -0.331577 178 14.0351 -0.447785 -0.331574 204 14.0316 -0.4918 -0.331498 255 14.0342 0.412281 -0.331466 144 14.0268 0.566482 -0.331383 166 14.025 0.61055 -0.331382 196 14.0311 -0.381465 -0.33134 215 14.0302 -0.337327 -0.331261 204 14.032 -0.249171 -0.331258 213 14.0261 0.478214 -0.331232 161 14.0245 0.522273 -0.331231 165 14.0292 -0.293205 -0.331183 207 14.0271 -0.182959 -0.331025 211 14.0223 0.0153633 -0.330787 127 14.2186 1.2326 -0.250958 40 14.1549 -1.18017 -0.248855 237 14.1198 -1.06573 -0.247433 233 14.1067 -1.13164 -0.247178 244 14.091 1.1767 -0.246707 234 14.0944 1.11012 -0.246645 115 14.1008 -0.908543 -0.24646 255 14.0943 -0.974847 -0.246398 255 14.0892 -1.01898 -0.246335 255 14.0858 1.06491 -0.24626 156 14.0922 -0.819141 -0.246006 255 14.0843 0.975823 -0.246005 255 14.0811 1.02006 -0.246003 255 14.0856 -0.863172 -0.245878 255 14.0922 -0.708142 -0.245808 255 14.0842 0.820298 -0.245688 255 14.0904 -0.663688 -0.245677 255 14.0747 0.908518 -0.245556 255 14.0823 0.6649 -0.245371 255 14.076 -0.751687 -0.245358 255 14.0824 -0.619 -0.245353 255 14.0695 0.863781 -0.2453 255 14.0849 -0.508303 -0.245285 255 14.0864 -0.397613 -0.245216 255 14.0793 0.598262 -0.24518 255 14.0824 -0.46393 -0.245154 255 14.0722 0.708725 -0.245112 255 14.0772 -0.55233 -0.245093 255 14.0752 0.553783 -0.244988 255 14.0748 0.509482 -0.244926 255 14.0716 -0.352988 -0.244699 255 14.0676 -0.26447 -0.244502 255 14.0667 -0.198141 -0.244436 255 14.0607 -0.30854 -0.244311 255 14.0596 -0.109712 -0.244175 255 14.04 0.75127 -0.244144 255 14.0172 -0.153497 -0.242823 255 14.008 -0.0433955 -0.242497 255 13.9981 0.000597439 -0.242173 255 13.984 0.0445007 -0.241721 255 14.1917 -1.18378 -0.177054 255 14.1619 1.22706 -0.176262 133 14.1077 -1.132 -0.17467 255 14.0952 -1.08641 -0.174235 255 14.0902 -1.01924 -0.173962 255 14.0798 1.15329 -0.173882 239 14.0814 1.1089 -0.173829 255 14.0853 -0.974401 -0.173743 255 14.0808 1.06436 -0.173723 255 14.0823 -0.92974 -0.173579 255 14.0846 -0.863242 -0.173522 255 14.0761 1.01955 -0.173507 255 14.0748 0.952819 -0.173347 255 14.0817 -0.774275 -0.173302 255 14.0772 -0.818391 -0.17325 255 14.0745 0.864001 -0.173188 255 14.0792 -0.707595 -0.173137 255 14.0814 -0.66336 -0.173136 255 14.0669 0.752719 -0.172813 255 14.0578 0.907349 -0.172807 255 14.0694 -0.618479 -0.172755 255 14.0739 -0.507959 -0.17275 255 14.0673 0.664136 -0.172707 255 14.0693 -0.57419 -0.172699 255 14.0734 -0.463672 -0.172695 255 14.0632 0.708234 -0.172652 255 14.0623 0.597511 -0.172493 255 14.0525 0.796249 -0.172487 255 14.0601 0.553182 -0.172387 255 14.0628 -0.419077 -0.172368 255 14.0606 -0.352696 -0.172257 255 14.0538 0.508729 -0.172172 255 14.0576 -0.308426 -0.172147 255 14.0536 -0.197906 -0.171981 255 14.0465 -0.264013 -0.171821 255 14.0442 -0.153629 -0.171708 255 14.0386 -0.109451 -0.171544 255 14.0309 -0.0652977 -0.171326 255 14.023 0.000839137 -0.171107 255 14.017 0.04489 -0.170943 255 13.9941 0.440665 -0.170496 255 14.2061 -1.19678 -0.0823651 167 14.1863 1.21731 -0.0819085 217 14.186 1.17239 -0.0818284 255 14.1749 1.05942 -0.0814249 255 14.1692 -1.08175 -0.0814233 255 14.1559 -1.14788 -0.0812631 228 14.1366 -1.03467 -0.080688 255 14.1236 1.10012 -0.0804457 255 14.1158 -0.988623 -0.0801972 255 14.1192 -0.877487 -0.0801112 255 14.1109 -0.943753 -0.0800325 255 14.1083 1.00975 -0.0800005 255 14.1159 -0.832783 -0.0799873 255 14.1184 -0.788433 -0.0799855 255 14.122 -0.721892 -0.0799828 255 14.1222 -0.677431 -0.0799403 255 14.1118 0.898657 -0.0799229 255 14.1189 0.743325 -0.0798876 255 14.1126 0.854197 -0.0798836 255 14.1069 0.942847 -0.0798807 255 14.1125 0.787444 -0.0798046 255 14.1208 -0.52183 -0.0797713 255 14.1142 -0.632632 -0.0797349 255 14.1162 -0.588287 -0.0797332 255 14.1203 -0.477401 -0.0797289 255 14.1131 0.698558 -0.0797262 255 14.1217 -0.366438 -0.0796838 255 14.1176 0.498824 -0.0796517 255 14.1178 -0.432923 -0.0796457 255 14.1167 -0.321946 -0.0795599 255 14.1177 -0.277595 -0.0795582 255 14.11 0.542935 -0.079528 255 14.1062 0.587171 -0.0794857 255 14.1033 0.653641 -0.0794832 255 14.1139 -0.122307 -0.0794301 255 14.1114 -0.166627 -0.079391 255 14.1088 -0.210933 -0.0793519 255 14.1022 -0.0779222 -0.079184 255 14.0904 -0.0114785 -0.078937 255 14.0584 0.0326546 -0.0782834 255 14.0502 0.0767618 -0.0781189 255 14.1648 -1.1917 -0.0155987 143 14.1546 1.21625 -0.0153822 191 14.1401 -1.10013 -0.0150922 255 14.1283 -0.987612 -0.0147732 255 14.1314 -0.943221 -0.0147715 255 14.1087 -1.14224 -0.0146539 196 14.1263 -0.898299 -0.014644 255 14.1224 -0.831236 -0.0145155 255 14.1132 0.945206 -0.0144174 255 14.1102 0.989537 -0.0144159 255 14.1149 -0.78629 -0.0143566 255 14.1133 -0.741725 -0.014292 255 14.0885 1.14384 -0.0142534 255 14.1087 -0.630392 -0.0141304 255 14.1047 -0.674614 -0.0141006 255 14.0793 -1.02856 -0.014052 241 14.0921 0.899381 -0.0140418 255 14.0929 0.85499 -0.0140119 255 14.0928 0.788346 -0.0139515 255 14.0987 -0.585545 -0.0139401 255 14.0873 -0.518559 -0.0137173 255 14.0888 -0.4743 -0.0137156 255 14.0772 0.743152 -0.0136702 255 14.0555 1.05238 -0.0136279 242 14.0501 1.09638 -0.013595 255 14.0763 0.543704 -0.0135202 255 14.0695 0.698446 -0.0135146 255 14.0743 -0.429519 -0.0134625 255 14.0716 -0.385184 -0.013398 255 14.0707 0.477108 -0.013397 255 14.0646 0.587525 -0.0133615 255 14.0701 -0.274569 -0.0133308 255 14.0586 0.631535 -0.0132972 255 14.0642 0.43267 -0.0132729 255 14.0669 -0.230292 -0.0132663 255 14.0683 -0.119804 -0.013262 255 14.0635 0.388432 -0.013243 255 14.0659 -0.163973 -0.0132322 255 14.0646 -0.0755771 -0.0131975 255 14.0588 -0.0313666 -0.0131016 255 14.0366 0.343615 -0.0128046 228 14.0232 -0.317644 -0.0126095 255 14.0188 0.0348591 -0.0124704 255 13.9563 0.122512 -0.011493 255 13.9366 0.0785908 -0.0111803 255 14.2309 -1.17971 0.0774838 255 14.172 1.23511 0.0780666 148 14.1389 -1.12754 0.0783588 255 14.1261 -1.05959 0.0785253 255 14.1284 -0.970543 0.0785653 255 14.1213 -1.01464 0.0785999 255 14.1141 1.18528 0.0786286 255 14.1276 -0.859077 0.0786426 255 14.1194 -0.925389 0.0786762 255 14.1135 1.11827 0.0786807 255 14.1243 -0.814355 0.078699 255 14.1268 -0.769978 0.0787007 255 14.113 1.07362 0.0787156 255 14.1223 -0.703016 0.0787762 255 14.1139 0.917706 0.078801 255 14.1063 1.02853 0.078805 255 14.1134 0.828644 0.0788525 255 14.1088 0.872852 0.0788722 255 14.101 0.961343 0.0788934 255 14.1104 -0.658019 0.0789053 255 14.1151 -0.547176 0.0789098 255 14.1072 0.761569 0.0789409 255 14.1035 0.716931 0.0789939 255 14.1024 -0.61327 0.078998 255 14.1067 0.60605 0.079008 255 14.1043 -0.458049 0.0790405 255 14.1008 -0.502289 0.079057 255 14.0977 0.672223 0.0790651 255 14.0983 0.516941 0.079114 255 14.0966 0.56123 0.0791155 255 14.0995 -0.347078 0.0791177 255 14.0897 -0.413297 0.0791877 255 14.0886 0.450094 0.0792205 255 14.0845 -0.302467 0.0792649 255 14.0804 -0.191768 0.0793238 255 14.081 -0.147532 0.0793254 255 14.0814 -0.103295 0.0793271 255 14.0797 -0.0369348 0.0793479 255 14.0357 0.00719412 0.0797496 255 14.0234 0.0952794 0.079862 255 14.0157 0.0511788 0.0799331 255 14.1939 -1.21919 0.16817 100 14.1479 -1.17039 0.168307 255 14.1353 -1.10227 0.168359 255 14.1167 -1.05618 0.168421 255 14.112 -1.01124 0.168444 255 14.1111 -0.966619 0.168457 255 14.1165 1.23285 0.168464 73 14.1049 -0.810452 0.168506 255 14.1003 -0.854633 0.16851 255 14.106 1.14271 0.16851 255 14.1006 1.03089 0.168544 255 14.0952 1.07504 0.168551 255 14.0864 1.18571 0.168555 199 14.0796 -0.897745 0.168557 255 14.093 -0.654351 0.168566 255 14.1013 -0.499424 0.168567 255 14.0959 -0.587929 0.168569 255 14.0917 0.985771 0.168576 255 14.0902 0.918971 0.16859 255 14.0786 -0.742344 0.16859 255 14.0877 -0.543235 0.168598 255 14.0909 -0.454714 0.168601 255 14.0898 0.830085 0.168603 255 14.094 -0.344024 0.168605 255 14.0729 -0.697696 0.168614 255 14.0888 -0.388193 0.168614 255 14.0831 0.874102 0.168615 255 14.0839 0.718803 0.168632 255 14.0783 0.785065 0.16864 255 14.079 -0.299378 0.16865 255 14.0781 0.674188 0.168652 255 14.0781 0.629874 0.168656 255 14.0789 0.563453 0.168659 255 14.0802 0.474909 0.168662 255 14.0763 -0.232959 0.168664 255 14.0769 -0.188738 0.168665 255 14.0726 0.518935 0.168679 255 14.0598 -0.100123 0.168717 217 14.0423 0.40747 0.168768 255 14.0241 -0.0337108 0.168817 255 14.0222 0.010354 0.168824 255 14.0221 0.0544036 0.168826 255 13.9024 0.036634 0.251708 255 14.0165 -0.00688383 0.252077 255 14.0321 0.103342 0.252133 255 14.0311 0.456152 0.252165 255 14.0604 -0.0509936 0.252219 255 14.065 -0.205671 0.252232 255 14.0682 -0.0952091 0.252243 255 14.0735 -0.161563 0.25226 255 14.0803 -0.250116 0.252283 255 14.0679 0.545929 0.252298 255 14.0866 -0.405179 0.25231 255 14.0755 0.501958 0.252316 255 14.0906 -0.471755 0.252327 255 14.0751 0.612665 0.252333 255 14.093 -0.516156 0.252338 255 14.0933 -0.560502 0.252343 255 14.0945 -0.671448 0.252358 255 14.0831 0.657363 0.252367 255 14.1015 -0.605183 0.252374 255 14.085 0.701821 0.252382 255 14.081 0.812534 0.252392 255 14.1043 -0.716308 0.252395 255 14.0855 0.768409 0.252397 255 14.1002 -0.82718 0.252398 255 14.108 -0.76093 0.252413 255 14.0904 0.857516 0.252433 255 14.1095 -0.872189 0.252435 255 14.1107 -0.916761 0.252446 255 14.0872 0.968437 0.252449 255 14.0936 0.902177 0.252454 255 14.1071 -1.02785 0.252455 255 14.1118 -0.961349 0.252458 255 14.1078 -1.07246 0.252466 255 14.0921 1.01328 0.252477 255 14.0928 1.05786 0.252491 255 14.0996 1.12523 0.252533 255 14.096 1.16952 0.252534 255 14.1502 -1.12032 0.252614 255 14.1527 -1.18764 0.252637 242 14.1421 1.21818 0.252698 164 14.0273 -0.0372129 0.334844 255 14.0512 0.0509614 0.335068 255 14.0334 0.668629 0.335071 255 14.0531 -0.346454 0.335108 255 14.059 -0.103612 0.335135 255 14.0593 0.00680939 0.335139 255 14.0499 0.514642 0.335158 255 14.0579 -0.390777 0.335161 255 14.0604 0.161421 0.335163 255 14.0591 0.249757 0.335167 255 14.0619 -0.457232 0.335214 255 14.0678 0.205692 0.335238 255 14.0678 0.316208 0.335261 255 14.073 0.0952104 0.335271 255 14.073 -0.258518 0.335276 255 14.0766 -0.147999 0.335299 255 14.0659 -0.700848 0.335333 255 14.0735 0.404809 0.335337 255 14.082 -0.192319 0.335352 255 14.07 -0.656752 0.335353 255 14.0767 0.360644 0.335354 255 14.0684 0.603807 0.335363 255 14.0775 0.471318 0.335395 255 14.0762 0.559837 0.335416 255 14.0881 -0.303099 0.335422 255 14.0847 -0.546633 0.335449 255 14.0884 -0.502456 0.335469 255 14.0729 0.759087 0.335478 255 14.0691 0.825392 0.335481 255 14.086 -0.613181 0.335483 255 14.0772 0.714972 0.335495 255 14.0705 0.869824 0.335519 255 14.0785 -0.901202 0.335546 255 14.0717 0.91428 0.335557 255 14.0707 0.958613 0.335577 255 14.0944 -0.768926 0.335624 255 14.0619 1.18016 0.335658 195 14.0979 -0.813558 0.335678 255 14.0887 1.07102 0.33582 255 14.1152 -0.859096 0.335859 255 14.102 1.02746 0.33591 255 14.1052 1.11682 0.336005 255 14.132 -0.97162 0.336075 255 14.1244 -1.12727 0.336106 255 14.1348 -1.01645 0.336129 255 14.1515 -1.06239 0.33631 255 14.1746 -1.17621 0.3366 221 14.1677 1.23367 0.33667 87 13.9935 -0.0594208 0.427312 255 14.0611 -0.125846 0.428387 255 14.0656 0.0287852 0.428456 255 14.0645 0.183443 0.428461 255 14.0638 0.227625 0.428463 255 14.0696 0.338288 0.428594 255 14.0773 0.0951781 0.428648 255 14.078 -0.214433 0.428668 255 14.079 0.139424 0.428682 255 14.0725 0.448982 0.428693 255 14.0765 0.382717 0.428722 255 14.0837 -0.0153901 0.428739 255 14.0826 0.294354 0.428782 255 14.0816 -0.41365 0.428788 255 14.079 0.493483 0.428821 255 14.0794 0.537788 0.428854 255 14.0888 -0.369555 0.428884 255 14.0909 -0.281025 0.428888 255 14.0767 0.648453 0.42889 255 14.0926 -0.170347 0.428892 255 14.0875 -0.480261 0.428912 255 14.0919 -0.325334 0.428918 255 14.0816 0.582188 0.428919 255 14.0766 0.692773 0.428923 255 14.0942 -0.569151 0.429067 255 14.0959 -0.52487 0.429069 255 14.0864 0.73764 0.429115 255 14.0821 0.848375 0.429151 255 14.0973 -0.635822 0.429159 255 14.0867 0.804244 0.429181 255 14.0951 -0.724484 0.429188 255 14.0834 0.892869 0.429215 255 14.0993 -0.680292 0.429221 255 14.0995 -0.791331 0.429312 255 14.0962 -0.880027 0.42934 255 14.087 0.959787 0.429345 255 14.0859 1.00419 0.429378 255 14.0974 -0.924561 0.429401 255 14.1029 -0.835967 0.429405 255 14.0867 1.04874 0.429443 255 14.0988 -0.991394 0.429494 255 14.0873 1.0933 0.429507 255 14.1136 -1.03697 0.429777 255 14.1238 1.16319 0.430175 255 14.1462 -1.08399 0.430346 255 14.15 1.21018 0.430652 187 14.1848 -1.15412 0.43104 255 14.199 -1.20016 0.431323 158 14.0494 0.1683 0.499659 246 14.0523 -0.052412 0.499692 167 14.0523 0.0579559 0.499696 209 14.052 0.102103 0.499698 240 14.0568 0.212543 0.499828 241 14.0561 0.256703 0.499829 241 14.0597 -0.140799 0.499857 225 14.0621 -0.0966458 0.4999 191 14.0624 0.0138002 0.499904 194 14.0592 0.300939 0.499915 238 14.0613 -0.295475 0.499934 233 14.0642 -0.251337 0.499978 234 14.0604 0.411459 0.500003 233 14.0643 -0.339752 0.500017 232 14.0669 -0.207185 0.500022 234 14.061 0.455691 0.500046 228 14.0632 -0.45027 0.500054 231 14.0541 0.676596 0.500096 229 14.0676 0.36743 0.500127 236 14.0685 -0.406209 0.50014 233 14.063 0.566342 0.500176 226 14.0611 0.610519 0.500178 231 14.0687 0.522299 0.500258 229 14.0737 -0.494893 0.500304 225 14.0714 -0.649801 0.500382 231 14.0734 -0.605591 0.500383 224 14.0792 -0.561541 0.500469 225 14.0699 0.721632 0.500475 227 14.0691 0.810239 0.500562 228 14.0793 -0.694516 0.500589 226 14.0736 0.766143 0.500602 233 14.0691 0.876773 0.500648 232 14.0834 -0.805662 0.500794 227 14.0762 0.921607 0.500859 233 14.0868 -0.850275 0.500918 225 14.0918 -0.761748 0.500922 228 14.0866 -0.916915 0.500999 214 14.0813 0.966355 0.501028 233 14.0785 1.03285 0.501072 229 14.0976 -0.962144 0.501291 223 14.1005 -1.00687 0.501415 225 14.0992 1.07885 0.501577 223 14.1075 -1.07424 0.501663 223 14.1017 1.12361 0.501704 234 14.122 -1.12001 0.502039 219 14.1404 -1.16621 0.502498 193 14.2063 -1.21673 0.503962 106 14.2615 1.18114 0.505142 96 13.9927 0.337792 0.568567 131 13.9969 0.22792 0.568615 142 14.0001 0.139994 0.568664 131 14.0062 -0.123954 0.56881 137 14.0067 0.0300578 0.568816 144 14.006 -0.277987 0.568856 125 14.0035 0.3821 0.568881 95 14.0097 -0.167996 0.568912 94 14.009 -0.322072 0.568958 126 14.0111 -0.212035 0.568962 121 14.0145 -0.0799823 0.569019 110 14.0161 -0.432378 0.569213 132 14.0151 -0.520506 0.569262 146 14.0265 0.0742041 0.569337 102 14.0255 0.184366 0.569341 104 14.0261 0.27253 0.569396 104 14.028 -0.366566 0.569476 98 14.0262 0.426866 0.569506 101 14.0241 0.492958 0.569508 111 14.0347 -0.0139221 0.569541 106 14.0364 -0.587504 0.569883 111 14.0426 -0.477308 0.569939 104 14.0365 -0.675871 0.569983 213 14.0405 -0.631857 0.570037 156 14.0484 0.538057 0.570185 114 14.0467 0.582189 0.570187 181 14.0438 0.648376 0.570189 255 14.0702 -0.721742 0.570916 228 14.0687 -0.788146 0.570966 255 14.0793 0.738772 0.571231 255 14.0896 0.694945 0.571438 255 14.0849 0.783459 0.571441 255 14.0911 0.850445 0.571703 255 14.0923 0.894971 0.571808 255 14.0954 0.939649 0.571966 255 14.108 -0.834744 0.572055 255 14.0948 1.00635 0.572072 255 14.0829 1.16128 0.572078 225 14.0956 1.05093 0.572178 255 14.1113 -0.879424 0.572209 255 14.113 -0.946303 0.572362 255 14.1002 1.09585 0.572387 255 14.1108 -1.03524 0.572462 255 14.114 -0.990908 0.572464 255 14.1157 -1.10249 0.572719 255 14.164 -1.15094 0.574068 255 14.1862 -1.19757 0.574741 205 14.1967 1.21579 0.575145 57 14.0297 0.00833972 0.656132 134 14.0288 0.162606 0.656138 140 14.0314 0.0965026 0.6562 92 14.0325 -0.300305 0.656314 110 14.035 -0.145988 0.65632 121 14.0357 -0.0357603 0.656324 89 14.0289 -0.498726 0.656371 95 14.0377 0.0524348 0.656391 98 14.0331 0.361099 0.656402 132 14.0266 0.559447 0.656409 115 14.0384 -0.388706 0.656569 105 14.0415 -0.344649 0.656635 108 14.0442 0.206889 0.656654 98 14.0378 0.471563 0.656664 124 14.0442 0.31722 0.656723 104 14.0296 0.714136 0.656736 113 14.0474 -0.256502 0.656766 111 14.0494 -0.102025 0.656772 91 14.0444 -0.455132 0.656823 98 14.0423 0.515869 0.656858 88 14.0515 0.251135 0.656913 108 14.0564 -0.190429 0.657026 88 14.0465 -0.609888 0.657075 60 14.0392 0.758837 0.657124 107 14.0599 0.40595 0.657305 92 14.0497 0.670878 0.657314 115 14.0525 -0.654397 0.657331 60 14.0304 -1.05157 0.65738 44 14.0408 0.86955 0.657385 102 14.0592 -0.544097 0.657399 89 14.0567 0.604831 0.657441 84 14.0624 -0.699157 0.657715 60 14.0555 0.826119 0.65777 101 14.0609 -0.765538 0.657777 58 14.062 0.915168 0.658159 71 14.0516 1.11418 0.658294 252 14.0786 -0.966341 0.658735 95 14.0775 -1.01071 0.658798 60 14.0904 -0.811604 0.658805 45 14.0763 1.02715 0.658871 182 14.0831 -1.12239 0.659244 253 14.0909 1.0727 0.659452 255 14.1157 -0.857612 0.659705 45 14.096 1.18448 0.659906 45 14.1209 -0.902476 0.65996 45 14.183 -1.1754 0.662588 248 14.0591 0.101654 0.748593 83 14.0627 0.145875 0.748749 87 14.0693 -0.0529612 0.748974 91 14.0675 0.234336 0.748985 88 14.0652 0.344821 0.748989 79 14.0725 -0.163492 0.749125 86 14.0728 -0.274054 0.749198 80 14.0722 0.300761 0.749219 88 14.0774 0.0354767 0.749287 90 14.0778 -0.318386 0.749429 84 14.0819 -0.207828 0.749511 81 14.0781 0.389417 0.749532 81 14.0761 0.45575 0.749535 73 14.0795 -0.473346 0.749655 40 14.0874 -0.0087344 0.749673 63 14.0861 0.190419 0.74968 61 14.0836 -0.407044 0.749735 69 14.0848 -0.3628 0.749737 81 14.0889 -0.11939 0.749746 60 14.0742 0.654987 0.749774 74 14.0819 -0.517713 0.749809 40 14.0809 0.544509 0.749847 71 14.0865 0.500415 0.750001 77 14.0721 0.810052 0.750011 40 14.0871 0.589089 0.750158 71 14.0818 0.744061 0.750241 40 14.0894 -0.628815 0.750269 40 14.0922 -0.562411 0.750271 40 14.086 0.699923 0.750317 42 14.0894 -0.673165 0.750345 40 14.0815 0.855004 0.750477 40 14.0786 -1.07225 0.750871 40 14.1131 -0.718696 0.751349 40 14.1186 0.90187 0.752027 68 14.1347 -0.764278 0.752277 40 14.1374 -0.920414 0.752735 52 14.119 1.1695 0.752811 187 14.1423 -0.876115 0.752814 40 14.1449 -0.831681 0.752816 40 14.1337 1.05904 0.753039 225 14.1398 -1.03213 0.753118 40 14.1443 1.10455 0.753583 245 14.1651 -1.14583 0.754429 227 14.2749 -1.19966 0.75884 133 14.3183 1.2317 0.76071 40 14.0472 0.198153 0.81332 181 14.0089 -1.08085 0.813357 82 14.0301 0.793779 0.813514 136 14.0545 0.0436966 0.813574 187 14.0561 -0.265455 0.813736 172 14.0581 -0.110884 0.813742 179 14.053 0.396981 0.81376 182 14.0585 0.242465 0.813842 134 14.0334 0.904578 0.813951 137 14.0637 -0.155124 0.814 133 14.0646 -0.000480263 0.814006 131 14.0382 0.860594 0.814037 133 14.0636 0.286739 0.814103 141 14.0621 0.353019 0.814106 128 14.051 0.662148 0.814117 169 14.0465 0.750421 0.81412 167 14.0684 -0.0667872 0.814177 138 14.0577 0.551846 0.814199 170 14.0643 -0.420372 0.81425 160 14.0691 -0.309946 0.814341 133 14.0717 0.154243 0.814359 132 14.0656 0.441538 0.814369 129 14.0568 0.706678 0.814465 131 14.0425 0.949445 0.814473 110 14.0552 -0.774019 0.814497 121 14.0763 0.0879444 0.81453 135 14.0649 -0.61952 0.81459 155 14.0791 -0.199559 0.814693 139 14.0781 -0.354414 0.814773 136 14.0734 0.508155 0.814805 128 14.0607 -0.818651 0.814842 97 14.0753 -0.509263 0.814854 164 14.0819 0.597058 0.815328 131 14.0807 -0.708922 0.815454 145 14.0928 -0.465599 0.81555 127 14.0927 -0.57644 0.815719 123 14.0948 -0.66527 0.815975 127 14.0818 -0.930955 0.816052 114 14.0848 -0.975615 0.81631 108 14.0836 -1.02001 0.816395 98 14.0891 -1.13173 0.816998 255 14.1079 -0.865972 0.817008 83 14.0944 1.0641 0.817079 255 14.1129 1.11006 0.818034 255 14.1193 1.15519 0.818469 255 14.2408 -1.18924 0.823759 198 14.3247 1.23959 0.827665 84 14.0697 0.827626 0.908188 97 14.0957 -0.101755 0.908254 140 14.075 0.872329 0.908589 95 14.1013 0.274821 0.908668 133 14.1045 0.208393 0.908765 96 14.1044 0.319216 0.908869 95 14.1033 0.363523 0.908871 98 14.0874 0.762086 0.908885 115 14.1099 0.0533183 0.908959 99 14.1095 0.119809 0.908962 98 14.0802 0.917075 0.90899 93 14.1066 -0.389966 0.909043 86 14.0959 0.67376 0.909082 136 14.1086 -0.45656 0.90924 118 14.116 0.00900495 0.909258 100 14.1065 0.518885 0.909276 143 14.1192 -0.146241 0.909452 94 14.1199 -0.0353448 0.909456 95 14.12 -0.234982 0.909548 92 14.1037 0.718565 0.909583 95 14.1135 -0.545492 0.909636 132 14.1227 -0.190644 0.90965 104 14.118 0.474916 0.909774 86 14.1221 0.40844 0.909872 100 14.0936 0.984698 0.909892 73 14.1268 -0.301675 0.909945 135 14.106 -0.856178 0.910024 66 14.1297 -0.346145 0.910143 85 14.0965 -1.0558 0.910215 38 14.1163 -0.745567 0.910228 96 14.1207 -0.656857 0.910231 98 14.135 0.164485 0.910263 98 14.1307 0.564281 0.910577 94 14.1279 0.630867 0.910579 85 14.0959 1.14076 0.910597 246 14.1305 -0.701788 0.910829 100 14.1367 -0.613072 0.910932 82 14.1232 -0.901726 0.911021 118 14.143 -0.502091 0.911037 91 14.1346 -0.813303 0.911324 64 14.1288 -0.968935 0.911518 66 14.129 -1.10281 0.912012 246 14.1356 -1.01401 0.912016 51 14.1389 1.07727 0.912493 255 14.1838 1.19291 0.915195 38 14.259 -1.18034 0.918804 201 +unknow 0.976245 1 0 265 13.012 25.1204 -2.09602 85 12.7971 25.188 -2.09293 85 12.8866 25.0707 -2.08772 84 12.6785 25.1497 -2.08577 98 12.5932 25.1769 -2.08464 100 12.5079 25.2039 -2.0835 103 11.9991 25.3684 -2.07749 129 11.9126 25.3916 -2.07619 125 11.2396 25.6117 -2.06985 148 11.118 25.6626 -2.06969 153 10.8274 25.7649 -2.06807 158 10.9472 25.7099 -2.06774 160 11.0271 25.6735 -2.06758 154 10.7365 25.7748 -2.06595 158 10.6433 25.7789 -2.06335 156 10.5615 25.8104 -2.06319 161 10.3496 25.8703 -2.06124 160 10.4294 25.834 -2.06092 158 10.2603 25.8823 -2.05945 158 10.1179 25.8784 -2.0549 142 11.9315 25.021 -2.04951 135 9.56404 26.016 -2.04938 161 9.43524 26.0439 -2.04792 159 9.14174 26.1272 -2.0463 153 9.26344 26.0801 -2.04597 152 9.3433 26.0452 -2.04548 146 12.1787 24.8328 -2.04446 99 8.96902 26.1596 -2.04418 151 9.04985 26.1276 -2.04386 150 8.83293 26.1638 -2.04093 153 8.75006 26.1895 -2.04077 153 8.66462 26.2074 -2.03996 156 8.57853 26.2232 -2.03899 157 8.44147 26.2215 -2.03541 156 8.34819 26.2137 -2.03248 157 8.26401 26.2341 -2.032 156 12.0284 24.7221 -2.03096 103 11.9394 24.7364 -2.02885 120 9.55313 24.6586 -1.94543 120 9.20219 24.7875 -1.94511 112 9.47419 24.6848 -1.9451 162 9.34369 24.6919 -1.94185 191 9.23815 24.6464 -1.93535 112 12.5546 25.045 -1.84747 202 12.2025 24.73 -1.81522 255 12.0718 24.7586 -1.81287 234 11.9565 24.7192 -1.80657 215 11.8632 24.7243 -1.80393 255 11.6245 24.7229 -1.79631 222 11.5358 24.7358 -1.7944 231 8.47713 25.8408 -1.78727 201 10.8731 24.7207 -1.7733 241 10.7747 24.7072 -1.76949 247 8.47832 25.5737 -1.76864 218 10.6423 24.7211 -1.76655 249 10.4494 24.6993 -1.75952 255 8.51605 25.4202 -1.75882 191 10.3609 24.7063 -1.75747 231 10.2222 24.7014 -1.75322 255 10.1354 24.7113 -1.75146 234 10.0359 24.6894 -1.74721 235 9.90384 24.6976 -1.74413 246 8.56873 25.1835 -1.74357 162 9.80107 24.6656 -1.73915 255 9.51206 24.7272 -1.73563 192 9.57811 24.6674 -1.73328 255 8.59123 24.9924 -1.73081 146 9.40299 24.675 -1.72918 255 9.27818 24.6966 -1.72742 204 8.63689 24.8711 -1.72347 214 9.17682 24.6621 -1.72244 208 8.74268 24.7982 -1.72098 230 8.8152 24.7555 -1.71981 199 9.00934 24.6856 -1.7198 255 8.88074 24.694 -1.71717 255 12.9501 24.8762 -1.69181 255 12.8227 24.9174 -1.69032 255 12.6683 24.8082 -1.67895 182 12.5452 24.7589 -1.67218 210 12.4115 24.7838 -1.6696 232 12.2053 24.7592 -1.66189 155 12.0737 24.7859 -1.65959 188 11.9611 24.7519 -1.65417 112 11.8609 24.7425 -1.65065 200 11.6095 24.7138 -1.64158 236 11.5167 24.7176 -1.63914 188 10.8558 24.7035 -1.61979 225 8.48217 25.6136 -1.61969 222 10.7583 24.6918 -1.6164 228 10.6253 24.7037 -1.61356 230 10.5304 24.6965 -1.61058 239 10.4326 24.6817 -1.60706 234 10.3412 24.6812 -1.60462 235 8.49189 25.3749 -1.60452 255 10.2095 24.6928 -1.60192 238 10.1176 24.6896 -1.59935 236 9.76389 24.8209 -1.59867 99 10.0182 24.6677 -1.59542 235 9.89077 24.6868 -1.59339 246 9.45286 24.8279 -1.5915 124 9.80289 24.6918 -1.59149 221 9.53009 24.7962 -1.59136 123 8.53516 25.1097 -1.5884 168 9.5698 24.6675 -1.58418 109 8.57717 24.9751 -1.58068 220 9.30879 24.6819 -1.57877 191 8.63994 24.9028 -1.57743 225 9.0954 24.7018 -1.57498 118 8.73867 24.8091 -1.57363 230 9.16603 24.6544 -1.57363 87 8.80856 24.7589 -1.57201 246 8.88497 24.7274 -1.57174 255 8.98162 24.6309 -1.56781 255 12.8564 24.8011 -1.52714 203 12.6965 24.778 -1.52131 223 12.3201 24.9049 -1.51783 146 12.5778 24.7377 -1.51572 227 12.4685 24.7148 -1.51137 242 12.3144 24.6982 -1.50616 253 12.1202 24.6963 -1.50069 132 11.9732 24.6903 -1.49635 141 11.8808 24.6973 -1.49424 108 11.792 24.7111 -1.49262 109 11.6792 24.674 -1.48753 244 11.5458 24.6926 -1.48505 255 8.49966 25.8218 -1.4805 126 10.8846 24.6795 -1.46729 210 8.54315 25.5487 -1.46522 100 10.7886 24.6715 -1.46444 252 10.6919 24.6614 -1.46146 244 10.5559 24.6656 -1.45835 252 9.65018 25.0103 -1.457 213 10.4581 24.6509 -1.45513 254 8.5702 25.3649 -1.45491 130 10.3635 24.6432 -1.45239 248 10.2745 24.648 -1.45053 250 10.1392 24.65 -1.44743 255 9.34727 24.9227 -1.44521 125 10.0474 24.6466 -1.44507 247 9.95565 24.6429 -1.44271 252 9.82161 24.6451 -1.43973 247 9.45795 24.7442 -1.43725 109 8.55606 25.064 -1.4369 129 9.7265 24.6313 -1.43675 255 9.64762 24.658 -1.4365 189 9.33764 24.6618 -1.4298 96 8.59038 24.9087 -1.42845 177 8.69112 24.8209 -1.42534 235 8.76305 24.7765 -1.42422 218 9.10896 24.6408 -1.42359 255 8.94783 24.6806 -1.42248 255 9.02532 24.6524 -1.42248 255 8.83006 24.7188 -1.42223 247 12.8639 24.8641 -1.36416 191 12.7039 24.8409 -1.35888 202 12.5996 24.829 -1.35562 221 12.4938 24.8132 -1.35214 220 12.3421 24.802 -1.34776 218 12.2323 24.7762 -1.34372 222 12.1211 24.7463 -1.33945 238 11.9801 24.7528 -1.33631 239 11.8859 24.7561 -1.33417 238 11.7909 24.7572 -1.33193 244 11.6943 24.7544 -1.32946 253 11.5649 24.7821 -1.32777 231 10.8936 24.7488 -1.31048 239 10.7982 24.7427 -1.30801 241 10.7022 24.7343 -1.30543 244 8.60645 25.5329 -1.30513 144 10.6056 24.7237 -1.30273 247 10.4789 24.7495 -1.30128 244 10.3803 24.7326 -1.29824 246 10.2849 24.7227 -1.29566 249 10.1539 24.7357 -1.29353 244 8.61986 25.3091 -1.29344 190 10.0627 24.7342 -1.29151 244 9.97373 24.7379 -1.28982 247 9.83939 24.7401 -1.28713 247 9.74628 24.7318 -1.28477 243 8.64555 25.1251 -1.28411 181 9.65115 24.7177 -1.28208 237 9.52312 24.7331 -1.28028 237 8.73299 24.9955 -1.27883 211 9.43046 24.7237 -1.27792 230 8.80286 24.9434 -1.27737 129 9.34289 24.727 -1.27635 230 9.14495 24.7902 -1.27579 255 9.25817 24.7375 -1.27523 238 9.03764 24.7382 -1.27096 199 8.9565 24.757 -1.2704 131 12.8029 24.7971 -1.20218 197 12.6577 24.8021 -1.19904 212 12.5472 24.7776 -1.19541 213 12.4388 24.7562 -1.19197 217 12.2997 24.7699 -1.18944 218 12.198 24.76 -1.18672 213 12.092 24.7408 -1.18348 223 11.9526 24.7508 -1.18085 220 8.91851 25.9944 -1.1807 127 11.8515 24.7396 -1.17813 209 11.7548 24.737 -1.1759 215 11.6531 24.7233 -1.17307 220 8.92625 25.624 -1.1631 134 10.8544 24.7203 -1.1562 217 10.7615 24.7195 -1.15428 216 8.94489 25.4206 -1.1537 136 10.664 24.7074 -1.15175 217 10.5706 24.704 -1.14973 213 10.4392 24.7186 -1.14781 213 8.97775 25.2607 -1.14662 135 10.3461 24.7144 -1.14579 209 10.2515 24.7063 -1.14357 214 9.07289 25.1524 -1.14308 130 10.1213 24.721 -1.14175 208 10.0315 24.7231 -1.14013 213 9.12241 25.0431 -1.13873 145 9.94113 24.723 -1.13842 213 9.80755 24.7269 -1.13609 212 9.72468 24.7446 -1.13539 207 9.636 24.7471 -1.13387 200 9.54307 24.7381 -1.13175 198 9.15264 24.8831 -1.13165 202 9.42497 24.7791 -1.13155 188 9.34142 24.7936 -1.13074 188 9.25719 24.806 -1.12983 227 12.8184 24.9173 -1.04796 144 9.83927 26.2283 -1.04764 184 12.671 24.9187 -1.045 140 12.5594 24.8923 -1.04168 152 12.4553 24.8798 -1.03908 160 12.3008 24.863 -1.03532 176 12.2033 24.862 -1.03335 174 11.9972 24.9355 -1.03227 249 12.105 24.8589 -1.03129 175 11.8605 24.8504 -1.02618 126 10.8666 24.8435 -1.00735 99 9.8028 25.28 -1.00728 99 9.82842 25.1113 -1.00064 99 9.86919 24.9837 -0.995974 99 10.0434 24.8516 -0.99337 255 9.94458 24.8311 -0.99086 98 10.1957 24.6685 -0.988345 235 10.0748 24.7052 -0.987808 240 10.0599 26.1389 -0.869299 160 12.2011 24.9172 -0.859107 166 12.0033 25.0087 -0.858955 106 12.053 24.9115 -0.856414 255 10.0461 25.5051 -0.846358 105 10.0463 25.273 -0.838044 104 10.1076 25.0827 -0.832115 104 10.1546 24.973 -0.828881 104 10.2118 24.8893 -0.826724 103 10.2853 24.846 -0.826261 180 10.3729 25.7976 -0.686856 102 11.7558 25.0452 -0.682391 133 10.3601 25.5333 -0.678804 134 11.1261 25.0187 -0.673189 152 10.3693 25.3267 -0.672749 126 10.9872 25.0233 -0.671516 189 10.8855 25.0045 -0.669649 194 10.7926 25.0055 -0.668491 195 10.3947 25.1627 -0.668175 135 10.6575 25.0156 -0.667076 194 10.4893 25.0563 -0.666177 140 10.5563 24.9956 -0.66521 213 +unknow 0.941868 1 0 1733 9.65446 -0.926887 -1.72925 110 8.16811 -0.487058 -1.7222 115 7.40538 -0.936998 -1.72084 108 8.16696 -0.358382 -1.72041 123 7.41979 -0.797051 -1.72035 139 7.4048 -0.877921 -1.71889 114 8.14834 0.552242 -1.71859 123 7.39815 -0.900724 -1.71792 111 7.40761 -0.819325 -1.71792 115 8.1337 0.692603 -1.7177 123 7.41424 -0.73764 -1.71743 107 8.08669 1.10013 -1.71724 116 8.145 -0.447252 -1.7164 148 8.11977 0.781415 -1.71636 119 7.41293 -0.690521 -1.71597 103 7.42007 -0.608971 -1.71597 103 8.14682 0.37236 -1.71592 115 8.14075 0.487492 -1.71592 124 8.13917 0.513064 -1.71592 155 8.12024 0.755715 -1.71591 139 8.54348 1.25902 -1.71569 123 8.14662 -0.331918 -1.7155 133 7.40296 -0.771793 -1.71549 103 7.40879 -0.713627 -1.71548 137 7.41313 -0.667062 -1.71548 107 8.54928 1.20504 -1.71527 120 8.14181 -0.395802 -1.71506 142 8.14659 -0.280664 -1.71506 120 8.13976 0.436112 -1.71503 118 7.3921 -0.852929 -1.715 142 7.41426 -0.631963 -1.71499 140 7.42443 -0.46866 -1.7145 111 8.51685 1.39213 -1.71442 128 8.14177 -0.306121 -1.71417 158 8.14016 0.346407 -1.71414 133 7.41421 -0.585074 -1.71402 111 8.54721 1.1774 -1.71401 118 8.53964 1.23108 -1.714 118 8.52139 1.35167 -1.714 123 8.13468 -0.421095 -1.71372 143 8.14198 -0.242116 -1.71372 125 8.13251 0.461331 -1.71369 149 8.12332 0.601776 -1.71369 161 8.114 0.716553 -1.71368 147 7.42199 -0.445114 -1.71353 115 8.12323 0.576108 -1.71324 155 8.06044 1.16105 -1.71322 143 7.41302 -0.549856 -1.71305 107 8.13199 0.397242 -1.7128 152 8.54685 1.13635 -1.71274 117 7.42155 0.383477 -1.71253 111 7.41132 0.54658 -1.71252 119 8.52198 1.29696 -1.71232 122 7.42239 0.325081 -1.71204 127 7.38482 0.8137 -1.71203 118 8.1349 -0.216353 -1.71193 149 8.13554 -0.190795 -1.71193 121 8.13196 0.307644 -1.71191 131 8.11058 0.664895 -1.7119 122 9.52089 1.29484 -1.71171 113 7.42554 0.173404 -1.71156 123 7.401 0.627691 -1.71155 115 8.13484 -0.126869 -1.71148 143 8.1352 -0.101313 -1.71148 144 8.065 1.0713 -1.71144 146 7.40858 -0.502769 -1.7111 120 7.38471 0.778473 -1.71106 123 7.36581 0.940671 -1.71105 107 8.51206 1.32284 -1.71105 125 7.69914 -0.86485 -1.71073 108 7.41173 -0.421175 -1.71061 118 7.41301 -0.397889 -1.71061 111 8.1305 -0.152365 -1.71059 149 7.41756 0.301506 -1.71059 123 7.41497 0.359754 -1.71058 116 7.40914 0.464542 -1.71058 127 8.05247 1.13406 -1.71055 154 7.09979 -0.897385 -1.71033 92 7.41965 -0.176462 -1.71012 127 7.42159 -0.0482395 -1.71011 123 7.41914 0.196557 -1.7101 127 7.40571 0.487681 -1.71009 119 7.3999 0.569082 -1.71009 119 7.38786 0.708456 -1.71009 115 7.3856 0.731665 -1.71008 111 7.37185 0.859163 -1.71008 115 7.35897 0.963288 -1.71008 115 7.10337 -0.85252 -1.70982 89 7.10985 -0.796704 -1.70982 89 7.68969 -0.912737 -1.7098 90 7.69252 -0.888574 -1.7098 91 8.12768 -0.0757067 -1.7097 137 7.41973 0.0333512 -1.70962 122 7.41959 0.0566608 -1.70962 119 7.36295 0.916785 -1.70959 111 7.34926 1.02079 -1.70959 114 7.34602 1.04387 -1.70959 118 7.33409 1.12458 -1.70959 115 7.39922 -0.525519 -1.70916 107 7.41338 -0.257912 -1.70915 126 7.41461 0.219735 -1.70913 119 7.41349 0.254677 -1.70913 119 7.41266 0.277965 -1.70913 123 7.39421 0.592002 -1.70912 115 7.38933 0.650057 -1.70912 111 7.38725 0.673267 -1.70911 118 7.3794 0.754454 -1.70911 107 7.37066 0.83555 -1.70911 119 7.36387 0.893409 -1.70911 108 7.70404 -0.743037 -1.70886 106 8.12186 0.192287 -1.7088 125 7.40705 -0.362599 -1.70866 119 7.41532 -0.0948156 -1.70865 123 7.41592 0.0100223 -1.70865 107 7.70662 -0.694436 -1.70839 100 7.70876 -0.670222 -1.70839 88 7.71183 -0.633887 -1.70839 91 9.49078 1.38191 -1.70829 122 7.40865 -0.281067 -1.70817 130 7.40288 0.405772 -1.70815 112 7.33526 1.0776 -1.70813 115 7.33184 1.10064 -1.70813 115 7.31929 1.18119 -1.70813 123 9.49734 1.32198 -1.70791 113 9.49314 1.35181 -1.70791 116 8.1162 0.255934 -1.7079 128 7.10702 -0.751175 -1.7078 92 7.11794 -0.639449 -1.7078 95 7.40531 -0.3159 -1.70769 119 7.40904 -0.211182 -1.70769 123 7.41148 0.0915011 -1.70767 119 7.70053 -0.71827 -1.70746 100 7.10855 -0.717474 -1.7073 127 7.11077 -0.695138 -1.7073 89 7.40234 -0.339081 -1.7072 130 7.40976 -0.0714835 -1.70719 126 8.11632 -0.0118908 -1.70702 130 7.68767 -0.826844 -1.70699 103 7.69023 -0.802688 -1.70699 100 7.71252 -0.548621 -1.70698 92 7.71421 -0.524389 -1.70698 93 9.06627 1.24303 -1.70686 124 7.40659 -0.152919 -1.70671 122 7.40815 -0.0132889 -1.70671 115 7.39507 0.440288 -1.70669 123 7.39059 0.50996 -1.70669 123 7.31722 1.15727 -1.70667 110 7.30981 1.20322 -1.70667 114 8.10951 0.28121 -1.70657 129 7.69078 -0.778322 -1.70652 82 7.70604 -0.609018 -1.70652 92 7.11603 -0.594209 -1.70629 93 7.40252 -0.234294 -1.70623 126 7.33898 0.995816 -1.70619 115 7.30408 1.22585 -1.70618 119 8.08736 0.637339 -1.70611 105 7.70597 -0.584652 -1.70605 90 7.71194 -0.499887 -1.70605 99 7.10714 -0.672228 -1.70579 123 7.11594 -0.571689 -1.70578 125 7.08811 0.849823 -1.70574 95 7.4034 0.114637 -1.70573 140 7.08338 -0.872639 -1.70529 118 7.11662 -0.537996 -1.70528 95 9.06236 1.21352 -1.70527 120 7.40106 0.137852 -1.70524 103 8.10845 -0.0373779 -1.70524 130 9.04653 1.31282 -1.70487 125 8.10536 0.140891 -1.70479 119 7.09308 -0.772199 -1.70478 128 7.10835 -0.61604 -1.70478 124 7.39927 -0.129541 -1.70477 123 7.09318 0.771432 -1.70473 97 7.2885 1.28215 -1.70472 115 7.70765 -0.475278 -1.70465 91 7.7094 0.446067 -1.70461 99 7.70721 0.482392 -1.70461 103 7.69773 0.615484 -1.70461 99 7.69575 0.639664 -1.70461 99 7.69265 0.675923 -1.7046 98 7.64561 1.08561 -1.70459 94 9.05067 1.26991 -1.70448 120 8.10173 0.217217 -1.70434 119 7.08617 -0.816523 -1.70428 129 7.12099 -0.414716 -1.70427 98 7.12104 0.413957 -1.70424 99 7.29058 1.25891 -1.70424 123 7.09364 0.748949 -1.70423 94 7.70786 -0.438834 -1.70418 95 7.7092 -0.414617 -1.70418 96 7.71046 -0.390396 -1.70417 100 7.71718 -0.220752 -1.70417 100 7.65826 0.977177 -1.70413 94 9.03848 1.34067 -1.70408 100 7.11249 -0.515196 -1.70377 131 7.13091 0.0556379 -1.70375 106 7.27439 1.33864 -1.70375 127 7.08687 0.793294 -1.70372 101 9.0602 1.16982 -1.70369 82 7.71504 0.227837 -1.70369 112 7.71428 0.252074 -1.70368 86 7.68662 0.699747 -1.70367 95 7.67846 0.784224 -1.70367 99 7.66376 0.916775 -1.70366 91 7.06863 -0.927209 -1.70328 123 7.11214 -0.492708 -1.70326 93 7.12695 0.178795 -1.70324 99 7.71041 -0.305425 -1.70324 103 7.12231 0.313094 -1.70324 106 7.11905 0.380205 -1.70323 101 7.71554 0.118726 -1.70322 104 7.07302 0.893168 -1.70322 91 7.70801 0.361019 -1.70321 100 7.67895 0.759914 -1.7032 94 7.67402 0.808145 -1.7032 93 7.66744 0.868391 -1.7032 95 7.64811 1.02477 -1.70319 91 7.6432 1.0608 -1.70319 92 8.09708 0.166169 -1.703 117 8.05909 0.800949 -1.70298 153 7.26634 1.36075 -1.70277 123 7.71201 -0.196339 -1.70277 103 7.11245 -0.459055 -1.70276 97 7.71319 0.142935 -1.70275 105 7.7127 0.167166 -1.70275 101 7.71183 0.203509 -1.70275 98 7.69626 0.530299 -1.70274 97 7.69186 0.590729 -1.70274 90 7.12178 0.279457 -1.70273 96 7.66274 0.892258 -1.70273 90 7.06682 0.926243 -1.70271 96 7.06387 0.948438 -1.70271 100 7.05621 1.00389 -1.70271 87 7.71213 0.0823372 -1.70229 103 7.70762 0.276118 -1.70228 94 7.67857 0.723364 -1.70227 97 7.66758 0.831841 -1.70226 93 7.11193 -0.436583 -1.70226 98 7.11514 -0.380713 -1.70225 102 7.1163 -0.358358 -1.70225 100 7.11841 -0.313638 -1.70225 110 7.12532 -0.000347983 -1.70224 98 7.12528 0.0220356 -1.70224 108 7.12068 0.257021 -1.70223 93 7.11743 0.335302 -1.70223 100 7.11634 0.357659 -1.70223 102 7.11057 0.458226 -1.70222 95 7.10675 0.514054 -1.70222 107 7.09373 0.670204 -1.70222 94 9.02453 1.36762 -1.70209 132 6.8812 -0.645128 -1.70208 116 7.70896 -0.159901 -1.70183 108 7.71025 -0.0751283 -1.70183 98 7.70429 0.312364 -1.70182 95 7.65164 0.951946 -1.70179 93 7.11004 0.435775 -1.70172 131 9.01825 1.39566 -1.70169 105 6.87616 -0.677366 -1.70156 106 7.70056 -0.353482 -1.70137 96 7.27108 1.3026 -1.70132 115 7.11679 -0.257567 -1.70124 98 8.09062 0.0770292 -1.70123 113 7.10124 0.536103 -1.70122 107 7.09682 0.591859 -1.70121 97 7.08774 0.692123 -1.70121 100 7.04069 1.06949 -1.7012 99 6.87934 -0.623173 -1.70104 107 6.88127 -0.601558 -1.70104 113 7.70656 -0.0508666 -1.70089 103 7.70672 0.00966171 -1.70089 101 7.70651 0.0580841 -1.70089 99 7.69651 0.39687 -1.70088 102 7.6868 0.553942 -1.70087 94 7.64165 0.99951 -1.70086 90 7.11725 -0.179244 -1.70074 107 7.11778 -0.156883 -1.70074 101 7.11879 -0.100974 -1.70073 104 7.11908 -0.0786103 -1.70073 108 7.11929 -0.056246 -1.70073 103 7.11909 0.0779539 -1.70073 97 7.11881 0.100317 -1.70073 99 7.11668 0.200945 -1.70072 98 7.09759 0.558263 -1.70071 97 7.09299 0.613994 -1.70071 97 7.0728 0.81427 -1.7007 124 6.8821 -0.568969 -1.70052 108 7.69775 -0.329109 -1.70044 100 7.7001 -0.268641 -1.70044 103 7.7009 -0.244449 -1.70043 107 7.10966 -0.335607 -1.70024 104 7.11207 -0.279758 -1.70024 102 7.11472 -0.201541 -1.70023 110 7.11651 -0.123296 -1.70023 98 7.11754 -0.022682 -1.70023 102 7.11652 0.122654 -1.70022 96 7.11586 0.156193 -1.70022 97 7.10061 0.49122 -1.70021 119 7.08168 0.714018 -1.7002 105 7.70204 -0.111322 -1.69996 99 7.70277 0.0338691 -1.69996 99 7.6955 0.336253 -1.69995 97 7.61398 1.16673 -1.69992 90 8.08449 0.102354 -1.69989 121 7.03827 1.04654 -1.69969 92 8.67027 1.16789 -1.69955 105 8.66656 1.19512 -1.69955 126 7.6997 -0.135478 -1.6995 96 6.89037 -0.395634 -1.69948 93 7.6894 0.420748 -1.69948 99 7.68431 0.50527 -1.69947 93 7.62098 1.10662 -1.69946 93 7.10982 -0.234924 -1.69923 102 7.08524 0.635775 -1.6992 89 7.04743 0.968827 -1.69919 124 7.0396 1.02415 -1.69919 123 8.6589 1.23566 -1.69914 120 8.65498 1.26286 -1.69914 103 7.61375 1.14224 -1.69899 92 6.89508 -0.254795 -1.69896 93 8.63863 1.35764 -1.69872 114 7.0585 0.868876 -1.69869 120 7.69696 -0.026589 -1.69856 101 7.10598 0.234194 -1.69821 132 6.86585 0.643402 -1.69789 91 6.85836 0.718858 -1.69789 88 6.84491 0.837249 -1.69789 90 8.63706 1.32958 -1.69748 112 6.87398 -0.52488 -1.69742 114 6.87789 -0.470876 -1.69741 90 6.89167 -0.178839 -1.6974 101 6.89382 0.0485511 -1.6974 93 6.89287 0.12435 -1.69739 97 6.88388 0.373242 -1.69738 123 6.84812 0.793997 -1.69737 115 8.05755 -0.506222 -1.69724 141 6.85669 -0.697271 -1.6969 112 6.88364 0.340697 -1.69687 97 6.83706 0.868995 -1.69685 124 6.82955 0.91167 -1.69633 112 8.65839 1.13855 -1.69625 94 8.63742 1.28798 -1.69624 111 8.62274 1.38288 -1.69624 117 6.86652 -0.546034 -1.69586 109 6.88176 -0.297653 -1.69585 99 6.88266 -0.276034 -1.69585 128 6.88462 -0.221972 -1.69585 99 6.83984 0.814799 -1.69582 110 6.86788 -0.502748 -1.69534 115 6.87835 -0.329999 -1.69534 97 6.88549 -0.102963 -1.69533 98 6.88626 -0.00561359 -1.69533 89 6.88621 0.0268352 -1.69532 128 6.88565 0.0917337 -1.69532 90 6.88075 0.275553 -1.69532 94 6.86288 0.56704 -1.69531 86 6.86969 -0.448671 -1.69482 126 6.82664 0.889441 -1.69478 113 6.87949 -0.200194 -1.6943 97 6.8795 0.199751 -1.69428 119 6.86983 0.415747 -1.69428 93 6.8678 0.448114 -1.69428 121 6.86485 0.491254 -1.69427 121 6.84713 0.695891 -1.69427 113 6.86721 -0.426863 -1.69379 112 6.87892 -0.146123 -1.69378 128 6.88011 0.0700216 -1.69377 131 6.87893 0.145669 -1.69377 126 6.87406 0.296895 -1.69376 122 6.8731 0.318488 -1.69376 96 6.85245 0.620379 -1.69375 116 6.84071 0.738682 -1.69375 117 6.87498 0.221223 -1.69325 84 6.8625 0.469408 -1.69324 94 6.83643 0.759947 -1.69323 113 6.85668 0.52314 -1.69272 104 6.87264 0.167115 -1.69221 94 6.86339 0.393689 -1.69221 115 6.84952 0.587562 -1.6922 121 6.86264 -0.372526 -1.69171 125 6.86377 -0.350966 -1.69171 92 6.87226 -0.0812238 -1.6917 124 6.87269 -0.0272438 -1.6917 126 6.84073 0.662648 -1.69168 117 6.86653 0.242523 -1.69117 133 6.8473 0.544036 -1.69065 114 6.86582 -0.124316 -1.69015 96 6.86677 -0.0488208 -1.69015 89 7.96589 1.03235 -1.68782 95 8.41461 1.09229 -1.68321 71 7.98179 0.0129504 -1.67627 67 7.87494 0.819555 -1.66153 165 7.89636 -0.521522 -1.66069 118 7.85598 -0.667883 -1.65401 121 7.84801 -0.692065 -1.65267 111 7.85126 -0.630257 -1.65222 116 7.81317 0.949696 -1.65083 97 7.84129 -0.555183 -1.64865 94 7.80048 0.972999 -1.6486 88 7.81419 0.837863 -1.64816 110 7.85297 0.0493286 -1.64685 67 7.79962 0.898291 -1.64637 111 7.79989 0.861086 -1.64548 120 7.82209 -0.603292 -1.64509 104 7.822 -0.578578 -1.64464 112 7.78515 0.921376 -1.6437 113 7.77288 -0.705826 -1.53647 80 7.71368 0.978866 -1.53008 86 7.71276 -0.675735 -1.52297 87 7.66579 0.936284 -1.5187 94 7.54246 0.897605 -1.49128 95 7.70253 -0.728213 -1.48603 58 7.64872 0.966062 -1.48019 82 7.40043 -0.506931 -1.45293 79 7.53821 -0.67742 -1.45049 89 7.37403 -0.621571 -1.44914 107 7.31405 0.84793 -1.44108 86 7.46729 0.918691 -1.44094 147 7.32584 -0.536261 -1.43733 86 7.29099 -0.556624 -1.43016 80 7.27641 0.681982 -1.42927 255 7.28141 -0.578885 -1.42847 85 7.29033 -0.452988 -1.42846 255 7.26069 0.761159 -1.42758 104 7.25188 0.806346 -1.42674 71 7.28196 -0.429474 -1.42635 255 7.24077 0.78214 -1.42378 49 7.24094 -0.312847 -1.41623 58 7.66647 -0.723691 -1.41309 62 7.36089 -0.6388 -1.41248 161 7.193 0.731474 -1.4124 180 7.2011 -0.469847 -1.40948 255 7.18992 0.594538 -1.40902 202 7.33795 -0.532524 -1.40587 232 7.29728 0.873908 -1.40417 121 7.16714 -0.343242 -1.40062 243 7.30891 -0.553601 -1.40009 157 7.31225 -0.507669 -1.40009 220 7.29299 0.734178 -1.40004 169 7.16571 -0.286774 -1.39977 40 7.27389 0.766842 -1.39674 123 7.28958 -0.575235 -1.39637 71 7.149 -0.263543 -1.39597 39 7.12046 0.690488 -1.39594 255 7.14065 -0.364368 -1.39513 255 7.55021 0.955123 -1.39476 131 7.12177 0.611674 -1.39468 255 7.12692 0.465764 -1.39342 39 7.12709 0.432062 -1.393 39 7.25006 0.787288 -1.39219 183 7.13562 0.095811 -1.39217 39 7.2456 0.809836 -1.39178 122 7.11177 0.487269 -1.39047 39 7.12533 -0.128161 -1.39006 45 7.25167 -0.60677 -1.38893 71 7.11763 -0.206307 -1.3888 45 7.11683 -0.161529 -1.38838 45 7.0896 0.642685 -1.38835 255 7.11671 -0.0049888 -1.38795 39 7.11633 0.0732645 -1.38795 39 7.10303 0.408305 -1.38752 46 7.10913 -0.228385 -1.38711 44 7.0946 0.508546 -1.38709 44 7.11066 0.0508883 -1.38668 39 7.10456 -0.183543 -1.38585 45 7.10165 0.274076 -1.38583 45 7.09458 -0.384205 -1.38543 255 7.1042 -0.105376 -1.38542 45 7.10492 0.0285483 -1.38542 39 7.10128 0.229396 -1.38541 47 7.10052 0.251703 -1.38541 45 7.08866 0.385198 -1.38414 47 7.08844 0.351698 -1.38372 46 7.09503 -0.0494729 -1.38331 45 7.20091 0.839069 -1.3831 59 7.0932 -0.0271695 -1.38289 45 7.09208 0.128813 -1.38288 44 7.0866 0.307001 -1.38288 46 7.09081 -0.082845 -1.38247 45 7.0817 0.329094 -1.38203 45 7.08242 0.206588 -1.38119 46 7.08187 0.150919 -1.38077 45 7.07549 0.173047 -1.37951 45 7.47551 -0.681321 -1.37377 128 7.18174 -0.465082 -1.37199 214 7.39942 0.912973 -1.36339 183 7.12024 0.670991 -1.36245 255 7.13628 -0.439801 -1.36208 255 7.13567 -0.417273 -1.36166 255 7.13561 -0.383547 -1.36125 255 7.12133 0.592151 -1.36121 255 7.11553 0.636699 -1.3608 255 7.11554 0.614168 -1.36039 255 7.10366 0.568145 -1.35708 107 7.10268 -0.337163 -1.35381 168 7.07895 0.532507 -1.3513 55 7.07383 -0.280241 -1.3472 75 7.04411 0.685877 -1.34675 255 7.07076 -0.257889 -1.34637 79 7.05288 0.485893 -1.34511 77 7.05132 0.508046 -1.34511 62 7.33612 -0.633276 -1.34478 144 7.06175 -0.235386 -1.3443 81 7.06279 -0.202107 -1.3443 79 7.05531 -0.301777 -1.34348 80 7.30296 0.878139 -1.34314 133 7.04671 0.429853 -1.34304 67 7.6293 0.995758 -1.3415 62 7.04239 -0.157322 -1.33976 61 7.03609 -0.0577166 -1.3381 56 7.01799 0.450133 -1.33726 77 7.02817 -0.179146 -1.33686 70 7.0274 -0.123917 -1.33645 67 7.02845 -0.0245594 -1.33645 63 7.02654 -0.00248325 -1.33603 65 7.01399 0.306185 -1.33478 28 7.0134 0.273047 -1.33437 28 7.01602 -0.101714 -1.33397 56 7.00909 0.32802 -1.33396 27 7.01435 -0.079655 -1.33356 55 7.01265 0.173758 -1.33355 64 7.01107 0.228829 -1.33355 61 7.00607 0.349931 -1.33354 50 7.0031 0.404949 -1.33354 62 7.01218 0.0966107 -1.33314 62 7.01086 0.0194883 -1.33273 63 7.00729 0.151578 -1.33231 63 7.00482 0.0524583 -1.33149 65 7.00033 0.195419 -1.33107 62 6.99067 0.382149 -1.33065 55 6.99467 0.250238 -1.33024 29 7.60189 -0.711297 -1.33016 109 6.99679 0.0743508 -1.32983 66 6.99599 0.129304 -1.32983 62 7.23104 0.83521 -1.32766 220 7.25214 -0.602776 -1.32731 220 7.24424 -0.579173 -1.32532 229 6.96672 -0.353141 -1.3253 255 7.21025 0.809948 -1.3229 229 7.22539 -0.543335 -1.32096 234 7.19716 0.785648 -1.31972 233 7.21729 -0.519894 -1.31897 237 7.17933 0.749563 -1.31535 236 7.49805 0.954211 -1.3153 188 7.19738 -0.495659 -1.3146 239 7.1758 0.726432 -1.31416 239 7.50628 -0.678906 -1.31117 133 7.14039 0.643768 -1.30543 239 7.13121 0.69946 -1.30463 240 7.1461 -0.469385 -1.30388 241 7.13061 0.597797 -1.30265 239 7.12944 0.563896 -1.30186 239 7.12922 0.541348 -1.30146 239 7.12306 0.518409 -1.29987 239 7.10709 0.663398 -1.29907 241 7.12281 -0.434062 -1.29871 242 7.11464 0.439262 -1.2971 239 7.11174 0.483957 -1.29709 238 7.11435 -0.411082 -1.29673 242 7.12313 -0.20979 -1.29672 239 7.12501 -0.131454 -1.29672 239 7.12208 -0.176164 -1.29632 239 7.11672 -0.153638 -1.29513 239 7.11575 -0.0977047 -1.29473 239 7.08768 0.616776 -1.29431 241 7.1022 0.382584 -1.29392 239 7.09604 -0.387589 -1.29276 242 7.09192 -0.35383 -1.29156 242 7.09104 -0.33145 -1.29117 242 7.08813 -0.308986 -1.29037 241 7.08754 -0.275494 -1.28997 242 7.08914 -0.230959 -1.28997 240 7.0825 -0.252996 -1.28878 240 7.06431 0.458618 -1.28717 240 7.35103 0.911519 -1.28606 174 7.0579 0.402596 -1.28518 240 7.05834 0.358149 -1.28479 240 7.06506 -0.0746251 -1.28441 240 7.06526 -0.0524305 -1.28441 240 7.06541 0.0252602 -1.2844 240 7.06343 -0.0302197 -1.28401 240 7.06275 0.102923 -1.284 240 7.06153 0.00307734 -1.28361 241 7.05976 0.158353 -1.2836 241 7.05506 0.302475 -1.2836 241 7.05355 0.335716 -1.2836 240 7.05746 0.0474316 -1.28281 241 7.05715 0.0806865 -1.28281 241 7.05531 0.180448 -1.28281 242 7.05205 0.28017 -1.28281 241 7.04883 0.202463 -1.28162 243 7.0462 0.224551 -1.28122 244 7.0431 0.257686 -1.28082 243 7.35087 -0.630493 -1.28042 198 7.01143 0.124394 -1.27368 255 7.29018 -0.602444 -1.26826 224 7.25779 0.864905 -1.26707 221 7.26854 -0.577755 -1.26371 235 7.24097 0.839769 -1.26328 235 7.22797 0.815198 -1.26024 239 7.24878 -0.55335 -1.25953 237 7.22975 -0.51772 -1.25535 240 7.57895 -0.742324 -1.25467 52 7.54804 0.963737 -1.25353 123 7.16343 0.773502 -1.24695 241 7.16864 -0.490938 -1.2432 242 7.1385 0.74803 -1.24164 243 7.14663 -0.466964 -1.23864 244 7.11738 0.723131 -1.23708 245 7.48055 -0.696762 -1.23586 75 7.12522 -0.431941 -1.23408 244 7.09422 0.698176 -1.23215 255 7.11282 -0.408816 -1.23142 244 7.10426 -0.385971 -1.22952 245 7.07984 0.663028 -1.22873 255 7.09956 -0.363371 -1.22838 247 7.07798 0.640415 -1.22797 247 7.078 0.617993 -1.22759 247 7.41187 0.911364 -1.22749 99 7.0953 -0.329659 -1.22724 246 7.09631 -0.307367 -1.22724 246 7.07676 0.561899 -1.22645 246 7.07301 0.583958 -1.22607 247 7.08742 -0.284714 -1.22534 246 7.08869 -0.251312 -1.22534 246 7.07232 0.516821 -1.22494 247 7.07066 0.539039 -1.22494 245 7.08552 -0.228928 -1.22458 245 7.0688 0.483064 -1.2238 246 7.08031 -0.206517 -1.22344 245 7.06582 0.438252 -1.22266 245 7.06441 0.46045 -1.22266 244 7.07335 -0.172986 -1.22192 244 7.07386 -0.150764 -1.22192 245 7.0743 -0.12854 -1.22192 244 7.07467 -0.106314 -1.22192 245 7.06389 0.404714 -1.2219 244 7.06724 -0.0729226 -1.2204 243 7.06547 -0.0507129 -1.22002 243 7.06364 0.0269631 -1.21964 241 7.06291 0.104631 -1.21963 242 7.05713 0.304261 -1.21963 243 7.05453 0.359681 -1.21963 242 7.06167 -0.0285144 -1.21926 243 7.05418 0.326331 -1.21925 242 7.05741 0.182167 -1.21887 242 7.04944 0.381614 -1.21887 242 7.05416 0.226437 -1.21849 242 7.05302 0.259678 -1.21849 242 7.05583 0.0047376 -1.21812 242 7.05566 0.0490706 -1.21812 242 7.05535 0.0823226 -1.21812 241 7.0547 0.126648 -1.21811 241 7.04825 0.281662 -1.21773 243 7.04838 0.148663 -1.21697 242 7.04699 0.20402 -1.21697 242 7.32211 -0.658249 -1.2062 122 7.2877 0.873313 -1.20398 171 7.27516 -0.63082 -1.19716 194 7.67902 -0.743041 -1.19635 71 7.23959 0.844669 -1.19457 201 7.22028 -0.60301 -1.18667 216 7.5852 0.977274 -1.18464 119 7.18873 0.804609 -1.18445 218 7.19167 -0.566395 -1.18088 222 7.15992 0.778732 -1.17866 222 7.16989 -0.541935 -1.17654 224 7.14668 0.75464 -1.17577 226 7.15783 -0.518363 -1.174 226 7.12944 0.730253 -1.17215 226 7.14253 -0.483367 -1.17075 227 7.12301 0.695726 -1.17034 228 7.52824 -0.705108 -1.16962 112 7.13616 -0.460391 -1.1693 227 7.10949 0.671922 -1.16745 228 7.12384 -0.437076 -1.16677 227 7.11796 -0.403028 -1.16532 228 7.09981 0.648551 -1.16528 228 7.11134 -0.380215 -1.16387 229 7.09494 0.614435 -1.16384 228 7.08703 0.591362 -1.16203 227 7.10071 -0.357236 -1.1617 227 7.08101 0.568495 -1.16058 226 7.09151 -0.300913 -1.15953 227 7.08608 -0.334128 -1.1588 223 7.08456 -0.278295 -1.15808 227 7.0676 0.511648 -1.15733 227 7.0795 -0.255803 -1.15699 227 7.06315 0.544807 -1.15696 224 7.06328 0.489055 -1.15624 228 7.07473 -0.222231 -1.15591 228 7.06282 0.46674 -1.15588 229 7.07146 -0.199879 -1.15518 229 7.05709 0.433 -1.15444 229 7.06616 -0.177492 -1.1541 228 7.05574 0.388448 -1.15371 229 7.05448 0.410613 -1.15371 229 7.4099 0.918586 -1.15312 171 7.06102 -0.14405 -1.15301 229 7.0516 0.35492 -1.15263 230 7.05813 -0.0774377 -1.15228 230 7.05553 -0.121742 -1.15192 228 7.05588 -0.0995761 -1.15192 230 7.05462 0.000188419 -1.15156 230 7.04678 0.332508 -1.15155 230 7.05251 -0.0441175 -1.1512 230 7.04676 0.288152 -1.15119 230 7.04582 0.310289 -1.15119 230 7.05061 0.0334284 -1.15083 230 7.04898 0.155244 -1.15083 230 7.04868 -0.0219343 -1.15047 229 7.0485 0.0555701 -1.15047 229 7.04746 0.133068 -1.15047 229 7.04557 0.21055 -1.15047 230 7.04632 0.077699 -1.15011 228 7.04215 0.25475 -1.1501 230 7.04059 0.177219 -1.14938 230 7.03898 0.23251 -1.14938 230 7.04014 0.0997736 -1.14902 229 7.38424 -0.657043 -1.14393 186 7.31107 0.882662 -1.13531 217 7.32342 -0.628671 -1.13296 229 7.31161 -0.604573 -1.13056 245 7.27664 0.855187 -1.1288 237 7.26101 0.81861 -1.12537 247 7.22792 -0.563681 -1.11549 251 7.2159 -0.539991 -1.11309 255 7.18719 0.787153 -1.11201 249 7.17592 0.763062 -1.10961 252 7.192 -0.51558 -1.10863 255 7.20509 -0.2781 -1.10862 232 7.19042 -0.481433 -1.10795 253 7.20199 -0.255338 -1.10794 232 7.19828 -0.300509 -1.1076 231 7.20079 -0.232654 -1.10759 231 7.20043 -0.176051 -1.10725 234 7.19146 0.321443 -1.10655 234 7.19196 -0.198483 -1.10588 231 7.19306 -0.15329 -1.10588 231 7.19404 -0.0967918 -1.10588 231 7.17813 -0.458013 -1.10555 254 7.18497 -0.333921 -1.10554 237 7.19261 -0.0402831 -1.10553 230 7.18976 -0.119341 -1.10519 230 7.19075 0.00490153 -1.10519 232 7.17962 0.40003 -1.10517 229 7.15396 0.726557 -1.10516 254 7.18741 0.14039 -1.10484 236 7.18639 0.185547 -1.10484 233 7.17128 0.501342 -1.10483 230 7.16799 0.54639 -1.10483 238 7.18643 -0.0741376 -1.1045 230 7.18676 0.0274627 -1.1045 232 7.18655 0.0613294 -1.1045 233 7.18347 0.219343 -1.10449 232 7.18108 0.287035 -1.10449 232 7.17861 0.343426 -1.10449 233 7.17749 0.365977 -1.10449 231 7.17303 0.444874 -1.10449 227 7.1716 0.467407 -1.10449 228 7.16771 0.523718 -1.10448 229 7.18406 0.106446 -1.10415 238 7.17998 0.264394 -1.10415 233 7.17243 0.422214 -1.10414 226 7.18285 -0.0176981 -1.10382 232 7.18103 0.162814 -1.10381 233 7.1788 0.241763 -1.10381 233 7.17844 0.0837857 -1.10313 234 7.15789 -0.434226 -1.10178 255 7.13268 0.701678 -1.10105 255 7.13289 0.679073 -1.10071 255 7.14545 -0.410995 -1.09938 255 7.12518 0.655722 -1.099 255 7.12877 -0.353957 -1.09595 255 7.12565 -0.376254 -1.09561 255 7.10857 0.620354 -1.09557 255 7.6235 0.980355 -1.09439 100 7.09281 0.596467 -1.09249 255 7.08876 0.573683 -1.09146 255 7.51616 -0.69311 -1.07217 98 7.46582 0.936794 -1.0683 131 7.68886 -0.719243 -1.06771 83 7.57439 0.964093 -1.05401 87 7.37478 -0.656216 -1.04894 109 7.32895 0.885057 -1.04539 166 7.3178 -0.627774 -1.0394 173 7.27873 0.85599 -1.0368 203 7.49031 -0.677621 -1.03608 89 7.28133 -0.589956 -1.03303 208 7.24605 0.829202 -1.03107 212 7.25953 -0.565152 -1.02921 223 7.22828 0.792758 -1.02758 226 7.24158 -0.540803 -1.02603 229 7.39457 0.905177 -1.02487 125 7.21306 0.768228 -1.02471 230 7.22436 -0.505223 -1.02284 233 7.20168 0.744187 -1.02249 233 7.21409 -0.48169 -1.02093 235 7.20835 -0.378993 -1.01902 242 7.18152 0.708003 -1.01867 234 7.19981 -0.457966 -1.01839 234 7.20557 -0.356138 -1.01838 242 7.20121 -0.401291 -1.01807 206 7.18688 0.606091 -1.01803 232 7.18087 0.5829 -1.01676 240 7.17191 0.684357 -1.01676 234 7.36836 -0.64369 -1.01655 151 7.18939 -0.434589 -1.01648 236 7.17206 0.661649 -1.01644 235 7.19433 -0.298914 -1.01615 240 7.19139 -0.321418 -1.01584 240 7.18932 -0.27606 -1.0152 241 7.17282 0.559606 -1.01517 240 7.17341 0.525661 -1.01485 240 7.1897 -0.117828 -1.01456 251 7.18534 -0.219385 -1.01424 239 7.17109 0.502861 -1.01422 240 7.16033 0.637935 -1.01421 231 7.18226 -0.253168 -1.01393 241 7.18008 -0.196625 -1.01329 240 7.1814 -0.14023 -1.01328 240 7.17027 0.423652 -1.01327 239 7.1689 0.446174 -1.01327 240 7.16672 0.479957 -1.01326 238 7.17671 -0.173958 -1.01265 240 7.1649 0.378206 -1.012 239 7.16367 0.400712 -1.01199 237 7.70231 0.964557 -1.01096 110 7.28756 0.86846 -1.00751 198 7.3004 -0.60335 -1.00539 220 7.10348 0.341632 -1.00181 255 7.24905 0.840636 -1.001 223 7.27271 -0.57817 -1.00073 227 7.25675 -0.55403 -0.997943 229 7.22938 0.803758 -0.997278 228 7.22991 0.780824 -0.996969 231 7.2486 -0.530545 -0.996392 232 7.61835 -0.69189 -0.994248 127 7.23525 -0.495356 -0.993911 236 7.2348 -0.4725 -0.9936 237 7.20679 0.755339 -0.99294 233 7.0473 0.31695 -0.992586 255 7.04516 0.217134 -0.991634 255 7.04234 0.294584 -0.991632 255 7.1993 0.731661 -0.99139 235 7.04247 0.239205 -0.991315 255 7.04168 0.261327 -0.991315 255 7.21982 -0.391923 -0.990497 240 7.20203 0.617781 -0.990153 241 7.21707 -0.369053 -0.989876 242 7.20863 -0.448153 -0.989259 239 7.18694 0.696145 -0.988911 238 7.02804 0.194575 -0.988771 255 7.21185 -0.312043 -0.988634 242 7.02815 -0.0925055 -0.988462 255 7.02876 0.00685653 -0.988459 255 7.02825 0.0841422 -0.988456 255 7.02691 0.161411 -0.988454 255 7.20832 -0.345941 -0.988325 242 7.02651 0.0620496 -0.988139 255 7.02581 0.117234 -0.988137 255 7.0254 0.139304 -0.988136 255 7.2008 -0.413646 -0.987707 239 7.20774 -0.266528 -0.987702 244 7.02258 -0.0593151 -0.987506 255 7.02084 -0.0151808 -0.987187 255 7.02075 0.039961 -0.987185 255 7.20292 -0.289025 -0.987083 244 7.18608 0.570884 -0.987055 241 7.18425 0.593456 -0.987054 242 7.01681 -0.0372007 -0.986551 255 7.1864 0.514128 -0.986436 243 7.19974 -0.209659 -0.98615 244 7.18965 0.434958 -0.986129 243 7.19707 -0.232222 -0.985841 243 7.19839 -0.186996 -0.985839 244 7.17996 0.547677 -0.985815 243 7.16943 0.671647 -0.985811 238 7.19721 -0.153036 -0.985528 244 7.18358 0.46856 -0.985507 244 7.18207 0.491124 -0.985507 244 7.16953 0.648936 -0.985502 238 7.18112 0.411765 -0.984579 244 7.18778 -0.130279 -0.983977 244 7.17843 0.388973 -0.98396 244 7.49314 0.91518 -0.979188 128 7.12297 0.352105 -0.974971 246 7.37806 0.878019 -0.961535 140 7.38211 -0.646243 -0.958645 116 7.00837 -0.105656 -0.955764 255 7.00126 -0.00659133 -0.954521 255 6.99478 0.301247 -0.954511 255 6.99912 0.0483721 -0.954209 255 6.99495 0.246228 -0.954202 255 6.99681 -0.0835422 -0.953903 255 6.99726 0.0263699 -0.953899 255 6.99695 0.0703351 -0.953898 255 6.98985 0.323022 -0.95389 255 6.99515 -0.0505645 -0.953592 255 6.99527 -0.028583 -0.953591 255 6.99472 0.0922817 -0.953587 255 6.99329 0.169188 -0.953585 255 6.99241 0.202139 -0.953584 255 6.99174 0.224105 -0.953583 255 6.99224 0.125201 -0.953276 255 6.99181 0.147169 -0.953275 255 6.98779 0.278928 -0.953271 255 7.30527 -0.616119 -0.946875 59 7.28746 -0.591495 -0.943932 55 7.25885 0.806511 -0.942707 68 7.27045 -0.55557 -0.940988 79 7.24758 0.782267 -0.940648 78 7.26624 -0.532271 -0.940104 84 7.21457 0.755912 -0.935353 102 7.7264 0.965358 -0.934949 170 7.23612 -0.450006 -0.934805 77 7.23039 -0.506679 -0.934513 65 7.23073 -0.472465 -0.934218 52 7.23355 -0.427024 -0.934216 149 7.21373 0.641488 -0.933591 144 7.20624 0.720769 -0.933589 106 7.20775 0.59537 -0.932122 240 7.19289 0.673875 -0.930942 163 7.19074 0.696468 -0.930942 142 7.19599 0.617204 -0.93065 174 7.20981 -0.391445 -0.93039 215 7.18999 0.310526 -0.926834 255 7.18828 -0.0849147 -0.925671 255 7.1806 -0.0622357 -0.924493 255 7.18085 0.0167238 -0.924491 255 7.17639 0.253545 -0.924483 255 7.17825 0.0956587 -0.924194 255 7.17677 0.174583 -0.924191 255 7.17685 -0.0283659 -0.923904 255 7.15175 -0.365548 -0.921562 249 7.64793 -0.673278 -0.919922 159 7.11928 -0.341346 -0.916559 254 7.11439 -0.318691 -0.915676 255 7.11074 -0.262564 -0.914791 255 7.11258 -0.206709 -0.914789 255 7.09408 0.552754 -0.914764 254 7.1079 -0.284816 -0.914497 255 7.10955 -0.24015 -0.914496 255 7.09381 0.530326 -0.91447 255 7.09724 0.452177 -0.914178 255 7.09347 0.507901 -0.914176 255 7.10529 -0.184129 -0.913611 255 7.10583 -0.161806 -0.91361 255 7.10651 -0.128315 -0.913609 255 7.09468 0.429655 -0.91359 255 7.09108 0.485359 -0.913589 255 7.09502 0.351437 -0.913005 255 7.08611 0.406828 -0.91212 255 7.05239 0.371689 -0.906825 255 7.4935 0.911556 -0.902042 120 7.0111 0.325516 -0.900354 255 7.01194 -0.104227 -0.899485 255 7.00067 0.0499473 -0.897715 255 6.99791 0.115895 -0.897418 255 6.99729 0.148875 -0.897417 255 6.99652 0.0719131 -0.897125 255 6.99424 0.192788 -0.897121 255 6.98576 0.269473 -0.896236 255 6.987 -0.00497585 -0.895657 255 6.98336 0.225461 -0.895649 255 7.34619 0.729531 -0.879011 220 7.34587 -0.601244 -0.877412 164 7.30754 0.864987 -0.875716 81 7.32072 -0.541444 -0.873296 225 7.31504 -0.56415 -0.872748 204 7.3046 -0.517247 -0.870827 227 7.27611 0.826393 -0.870781 204 7.27885 0.745711 -0.869961 187 7.29905 -0.482324 -0.869729 169 7.25753 0.778037 -0.867491 200 7.25505 0.800839 -0.867491 204 7.24809 0.673461 -0.864752 243 7.23666 -0.432785 -0.860677 242 7.21944 -0.454579 -0.858483 109 7.21622 -0.408894 -0.857659 204 7.21213 -0.374597 -0.856835 222 7.18805 0.633503 -0.855978 214 7.18285 0.689941 -0.855976 144 7.2014 -0.351401 -0.855189 227 7.19455 -0.328442 -0.854091 228 7.17878 0.553155 -0.853786 227 7.17422 0.60952 -0.853785 223 7.17215 0.586639 -0.853237 227 7.18414 -0.294092 -0.852444 202 7.17513 -0.271182 -0.851072 195 7.15876 0.528916 -0.85077 140 7.17198 -0.248517 -0.850523 176 7.17035 0.168396 -0.84996 235 7.14886 0.471709 -0.848853 223 7.83863 0.92082 -0.848501 88 7.13865 0.504809 -0.847754 216 7.14008 0.190022 -0.845845 218 7.12526 -0.146267 -0.843663 251 7.12421 -0.0902836 -0.843387 251 7.12446 -0.0679017 -0.843386 251 7.12477 -0.0119445 -0.843384 250 7.11344 0.401936 -0.84337 252 7.12191 -0.112641 -0.843113 253 7.12279 0.0104287 -0.843109 251 7.11545 0.323597 -0.843098 252 7.12074 -0.034323 -0.842836 251 7.11242 0.345848 -0.842823 252 7.11129 0.36819 -0.842823 252 7.11293 0.289886 -0.842551 252 7.11486 -0.168453 -0.842293 253 7.11678 0.0327566 -0.842285 252 7.11264 0.245115 -0.842278 251 7.11134 -0.224273 -0.84202 253 7.11139 0.222701 -0.842005 253 7.10985 0.267376 -0.842003 251 7.10836 -0.190667 -0.841471 254 7.10862 0.0661906 -0.841187 253 7.09632 0.423279 -0.841175 254 7.10442 0.0884589 -0.840638 255 7.10411 0.110778 -0.840637 255 7.091 0.445307 -0.840626 253 7.09955 0.144159 -0.840088 255 7.79035 -0.693684 -0.838928 59 7.45537 0.853346 -0.796085 59 7.38905 0.822485 -0.786726 138 10.0531 1.10567 -0.786518 41 7.40846 -0.599778 -0.786507 109 10.0595 1.02648 -0.786323 40 8.05702 0.940996 -0.785387 180 8.07868 -0.686691 -0.784954 179 7.38462 -0.574412 -0.783029 239 10.0001 1.13178 -0.781595 66 7.3396 0.782174 -0.779506 225 9.97478 1.16072 -0.779429 87 7.33808 0.758716 -0.778972 238 7.3497 -0.536731 -0.777946 243 7.34344 -0.513058 -0.776875 243 7.32465 0.734134 -0.776833 239 7.67181 0.899651 -0.776379 70 7.31113 0.709645 -0.774694 242 7.32525 -0.488597 -0.7742 245 7.30847 0.674661 -0.773893 243 7.31956 -0.453553 -0.773129 246 7.31897 -0.430433 -0.772861 243 7.31435 -0.407086 -0.772058 239 7.29475 0.650339 -0.771754 245 7.30056 -0.325778 -0.769648 234 7.28594 0.511412 -0.769085 237 7.25784 0.486638 -0.765074 244 7.26018 -0.380998 -0.764568 186 7.26189 -0.346781 -0.764567 158 7.24343 0.623024 -0.764534 229 7.24233 0.588579 -0.764001 226 7.25933 -0.266673 -0.763762 249 7.23821 0.565383 -0.763199 214 7.24626 -0.243351 -0.761889 250 7.22809 0.541792 -0.761595 192 7.24303 -0.22045 -0.761353 250 7.24201 -0.186254 -0.761085 251 7.23621 -0.299898 -0.760821 191 7.23108 0.405146 -0.760797 249 7.22909 0.439216 -0.760796 250 7.2386 -0.163399 -0.760549 251 7.23907 -0.140659 -0.760548 250 7.23312 0.325529 -0.760532 248 7.2375 -0.117877 -0.76028 250 7.2382 -0.0610274 -0.760278 250 7.23836 -0.0382889 -0.760277 248 7.23213 0.302729 -0.760266 248 7.22953 0.359517 -0.760264 249 7.22836 0.382233 -0.760263 250 7.23645 0.018564 -0.760008 248 7.23401 -0.0837087 -0.759744 251 7.23449 -0.00416055 -0.759741 248 7.23231 0.177641 -0.759735 247 7.23105 0.223081 -0.759733 248 7.22992 0.257155 -0.759732 249 7.22908 0.27987 -0.759731 250 7.22974 0.200316 -0.759467 248 7.21581 0.461207 -0.759191 228 7.22645 0.0412757 -0.75867 255 7.20646 0.0638725 -0.755995 228 7.20608 0.0978364 -0.755993 118 7.20574 0.120473 -0.755993 226 7.20334 0.143077 -0.755725 225 7.4824 -0.621381 -0.748653 72 7.37644 0.828774 -0.737645 172 7.35666 -0.576494 -0.732086 120 7.31002 0.79782 -0.728726 136 7.32649 -0.527955 -0.727752 244 7.29436 0.738106 -0.725924 246 7.30897 -0.549835 -0.725714 209 7.31108 -0.492287 -0.725457 250 7.59426 -0.619922 -0.724694 68 7.28085 0.713584 -0.723886 252 7.29675 -0.468356 -0.723417 254 7.29423 -0.445203 -0.722906 255 7.27516 0.689927 -0.722868 254 7.26122 0.769233 -0.722101 214 7.26742 0.666129 -0.721594 255 7.28173 -0.421532 -0.721122 255 7.26653 0.631519 -0.721086 255 9.96149 1.02695 -0.721075 53 7.28165 -0.387115 -0.720865 255 9.94664 1.07278 -0.720144 60 7.26896 -0.363593 -0.719081 255 7.25267 0.607308 -0.719047 255 9.92388 1.13341 -0.718656 66 9.91632 1.1641 -0.718283 176 7.26214 -0.340411 -0.71806 255 7.24663 0.583849 -0.718029 255 7.25573 -0.30588 -0.71704 255 7.23517 0.525712 -0.715992 255 7.24278 -0.282592 -0.715255 255 7.24478 -0.225699 -0.715253 255 7.22755 0.547967 -0.715227 255 7.24165 -0.259773 -0.714999 255 7.21898 0.501679 -0.713699 255 7.48449 0.828368 -0.713621 153 7.20865 0.478165 -0.712171 255 7.21967 -0.202308 -0.711939 255 7.20624 0.421165 -0.711408 255 7.20555 0.398405 -0.711154 255 7.2029 0.443672 -0.711152 255 7.20639 -0.17933 -0.710154 255 7.20757 -0.122726 -0.710152 255 7.20493 -0.156654 -0.709899 255 7.19459 0.341097 -0.709372 255 7.19166 0.318304 -0.708863 255 7.18952 0.363481 -0.708861 255 7.19494 0.160034 -0.708613 255 7.19404 -0.0999396 -0.708367 255 7.19432 -0.0773382 -0.708367 255 7.19241 0.182578 -0.708358 255 7.19076 0.239061 -0.708356 255 7.19262 -0.0434301 -0.708111 255 7.19272 -0.0208334 -0.70811 255 7.19275 0.00176339 -0.708109 255 7.19266 0.035662 -0.708108 255 7.19201 0.103445 -0.708106 255 7.18799 0.26157 -0.7081 255 7.18713 0.284149 -0.7081 255 7.19053 0.0582338 -0.707852 255 7.19031 0.080822 -0.707852 255 7.18946 0.137292 -0.70785 255 7.18553 0.21627 -0.707592 255 7.44977 -0.584072 -0.706567 110 7.40736 0.784795 -0.70358 81 7.758 0.874727 -0.701623 80 7.75287 -0.61667 -0.698177 88 7.37835 -0.5549 -0.697503 94 9.1957 0.345367 -0.696379 40 7.3446 0.755052 -0.695498 108 8.21567 0.874725 -0.695128 74 9.16948 0.40216 -0.694014 40 7.34327 -0.517341 -0.692847 102 9.14485 0.372374 -0.691456 44 7.29161 0.726657 -0.68864 135 7.30692 -0.433948 -0.6877 237 7.3013 -0.491183 -0.687458 159 7.27321 0.690304 -0.685947 175 7.27543 0.644426 -0.685703 236 7.28645 -0.409687 -0.685005 241 7.27508 -0.466366 -0.684027 224 7.27581 -0.386121 -0.683535 243 7.25557 0.665709 -0.683498 221 7.25266 0.608065 -0.68252 240 7.25058 0.584973 -0.682031 242 7.25574 -0.350698 -0.680839 245 7.57935 -0.567532 -0.677415 84 7.21279 0.559267 -0.677133 244 7.22311 -0.326258 -0.676674 246 7.22211 -0.303473 -0.676428 247 7.22105 -0.280699 -0.676182 247 7.20659 0.536045 -0.676154 247 7.2086 0.479303 -0.675911 245 7.20706 0.501946 -0.67591 245 7.21906 -0.223839 -0.67569 249 7.20809 0.456534 -0.675667 247 7.21634 -0.246442 -0.675446 248 7.2191 -0.144402 -0.675442 246 7.53767 0.82516 -0.675266 92 7.20749 0.399702 -0.675179 247 7.2062 0.422342 -0.675178 246 7.21378 -0.200971 -0.674955 248 7.20787 0.354321 -0.674935 246 7.21357 -0.1216 -0.674707 245 7.20276 0.376769 -0.674445 246 7.20994 -0.0988681 -0.674216 248 7.20881 0.161625 -0.674207 245 7.20671 -0.166762 -0.673974 248 7.20834 -0.0648659 -0.67397 247 7.20461 0.24082 -0.673959 246 7.2034 0.274768 -0.673958 247 7.2025 0.297397 -0.673957 247 7.20153 0.320023 -0.673957 244 7.20465 0.0144033 -0.673477 246 7.20457 0.0370374 -0.673476 248 7.20406 0.0936207 -0.673474 247 7.20373 0.116253 -0.673474 244 7.20201 0.195454 -0.673471 244 7.20256 -0.0421634 -0.673234 248 7.20134 0.138852 -0.673228 245 7.19938 0.218026 -0.673225 245 7.19868 -0.0195105 -0.672744 247 7.19449 0.0596248 -0.672251 247 7.45729 0.792374 -0.665471 170 7.47012 -0.536141 -0.664351 107 7.41551 0.752451 -0.660107 94 7.41032 -0.508669 -0.657119 126 7.87257 -0.611887 -0.654899 61 7.39029 -0.449091 -0.654317 92 7.37389 0.666224 -0.654278 110 7.38091 -0.471827 -0.653385 120 7.36276 0.700187 -0.653344 96 7.35657 0.722914 -0.652877 101 7.37778 -0.42512 -0.652683 101 7.36899 -0.366612 -0.651282 101 7.36383 -0.389565 -0.650816 105 7.33836 0.639647 -0.649847 110 7.35621 -0.342861 -0.649648 103 7.33836 0.616417 -0.649614 121 7.35328 -0.319591 -0.649181 106 7.33486 -0.284237 -0.646846 99 7.31452 0.59119 -0.646583 103 7.31696 0.533568 -0.646351 106 7.31129 0.556237 -0.645884 94 7.31498 0.475677 -0.645654 98 7.32182 -0.260747 -0.645213 124 7.31863 -0.237628 -0.644745 117 7.32146 -0.122642 -0.644741 111 7.30653 0.452045 -0.644488 101 7.29879 0.509126 -0.64402 101 7.31233 -0.179974 -0.64381 119 7.30227 0.348201 -0.643325 105 7.30577 -0.202801 -0.643111 110 7.29796 0.393961 -0.64309 104 7.30094 -0.156787 -0.64241 113 7.29486 0.290408 -0.642161 102 7.28809 0.427854 -0.642156 104 7.29364 0.210052 -0.641697 102 7.28329 0.370169 -0.641225 107 7.29003 -0.0993211 -0.641008 101 7.28463 0.244125 -0.640763 101 7.2815 0.324208 -0.64076 114 7.28455 -0.053492 -0.640307 99 7.28472 -0.0191637 -0.640305 123 7.28236 -0.0763633 -0.640074 106 7.28198 0.106669 -0.640068 106 7.27962 0.129503 -0.639834 102 7.27639 0.186615 -0.639599 101 7.27655 0.0608414 -0.63937 108 7.73067 -0.563741 -0.638916 68 7.71001 0.798014 -0.638871 88 7.26885 0.0036573 -0.638439 111 7.26837 0.0835812 -0.638436 105 7.26682 0.0264788 -0.638205 106 7.26304 0.163392 -0.637966 101 7.72216 -0.514323 -0.637601 187 7.25405 0.265812 -0.637263 103 8.07556 0.639717 -0.631094 71 7.64911 -0.473008 -0.629281 40 7.63921 -0.532635 -0.628627 82 7.61948 0.764774 -0.628583 75 8.04675 0.599191 -0.627774 114 7.60601 0.739349 -0.626833 111 8.02677 0.572279 -0.625491 66 7.6175 -0.398908 -0.625338 40 8.02655 0.546919 -0.625284 77 7.58366 0.701205 -0.623988 119 8.01433 0.520754 -0.623832 73 7.595 -0.445528 -0.623151 40 7.59746 -0.361887 -0.622929 40 7.605 0.127825 -0.622912 40 7.59657 -0.337923 -0.622709 40 7.5986 0.151616 -0.622254 40 7.58786 0.187209 -0.621158 40 7.57929 0.210851 -0.620282 40 7.56858 -0.420029 -0.620085 40 7.57424 0.020321 -0.619413 60 7.56817 0.0441041 -0.618755 57 7.96258 0.454435 -0.618022 66 7.55964 0.103461 -0.617878 56 7.95913 0.479328 -0.617814 117 7.55806 0.0678236 -0.61766 59 7.91495 0.651512 -0.614487 51 7.78009 -0.535561 -0.599582 87 7.73112 0.782781 -0.596632 127 7.73408 -0.508147 -0.5946 174 7.73073 -0.252324 -0.59293 40 7.69118 0.741986 -0.592067 175 7.71486 -0.179102 -0.591059 40 7.6999 -0.481732 -0.590862 166 7.70369 0.378129 -0.590625 40 7.70767 -0.142619 -0.590227 40 7.67368 0.715906 -0.589992 203 7.69472 -0.311778 -0.589403 40 7.69569 -0.227102 -0.589193 40 7.68774 -0.335713 -0.588781 40 7.6877 -0.287334 -0.588572 40 7.67812 -0.37158 -0.587952 83 7.66832 -0.443599 -0.587332 84 7.67847 -0.202514 -0.587324 40 7.66173 -0.4191 -0.586501 63 7.66899 -0.0577023 -0.586073 40 7.66316 -0.033601 -0.58545 40 7.64841 -0.11769 -0.583999 40 7.64931 -0.00955757 -0.583996 40 7.64675 -0.0936454 -0.583791 40 7.64216 0.134496 -0.583368 40 7.63573 0.158366 -0.582745 40 7.63323 0.0503644 -0.582333 40 7.62338 0.349909 -0.582115 40 7.61731 -0.392829 -0.581726 90 7.62279 0.265911 -0.581703 40 7.62192 0.289856 -0.581702 40 7.62309 0.0742126 -0.581294 40 7.6173 0.181863 -0.580876 40 7.61564 0.24168 -0.580874 40 7.61238 0.217628 -0.580459 40 7.61346 0.0262447 -0.580258 40 7.60656 0.32513 -0.580248 40 7.60492 0.0978679 -0.579425 40 7.96268 0.792697 -0.577654 72 7.94071 0.464291 -0.57294 86 7.93418 0.43893 -0.572154 89 7.89076 0.498846 -0.568214 85 7.85489 -0.528863 -0.564904 78 7.82341 0.630664 -0.562501 41 7.82956 0.519881 -0.562308 82 7.81597 0.543685 -0.561126 47 8.25906 0.820749 -0.56108 169 7.80948 0.604904 -0.560927 44 7.82731 -0.157233 -0.560559 40 7.80737 0.580086 -0.560534 45 7.80914 -0.464039 -0.559979 40 7.81699 -0.304486 -0.559974 40 7.79893 -0.500297 -0.559193 176 7.79845 -0.266899 -0.558003 40 7.76813 0.737028 -0.55797 146 7.79892 -0.181083 -0.557804 40 7.79015 -0.327869 -0.557415 40 7.78406 -0.217397 -0.556427 40 7.77936 -0.241714 -0.556034 40 7.77119 -0.351472 -0.555644 40 7.74662 0.710519 -0.555608 160 7.76608 -0.131392 -0.554455 40 7.76289 -0.0703414 -0.554059 40 7.72911 -0.434648 -0.551907 40 7.73322 -0.045678 -0.551105 40 7.72537 -0.0213357 -0.550317 40 7.71056 -0.409243 -0.549937 68 7.72084 -0.0940779 -0.549926 40 7.72131 0.0393364 -0.549921 40 7.71319 0.0635534 -0.549133 40 7.71004 0.148326 -0.548933 40 7.70747 0.0150963 -0.548544 40 7.70266 0.208738 -0.54834 40 7.7025 0.124004 -0.548146 40 7.69921 0.257069 -0.548142 40 7.68366 0.172054 -0.546373 40 7.67066 -0.370744 -0.545802 46 7.66703 0.099463 -0.544604 40 8.10793 0.102015 -0.543264 40 7.90751 -0.24902 -0.524879 40 7.87366 0.432717 -0.52244 76 7.87153 0.469821 -0.522438 90 7.86887 -0.272676 -0.521349 40 7.85404 -0.494788 -0.520986 106 7.8625 -0.334313 -0.52098 68 7.84617 0.49297 -0.520208 88 7.84459 0.517615 -0.520207 87 7.83631 0.578904 -0.519833 79 7.81961 0.639419 -0.518716 82 7.80781 0.749699 -0.518527 195 7.82021 0.552957 -0.518162 80 7.81659 0.602082 -0.51816 100 7.83215 -0.29616 -0.518005 40 7.81977 -0.468089 -0.51764 218 7.79759 0.686907 -0.517042 66 7.821 -0.209697 -0.516701 40 7.82162 -0.185125 -0.5167 40 7.79143 0.711024 -0.51667 201 7.81982 -0.0130931 -0.516322 40 7.79734 -0.442246 -0.515409 40 7.80951 -0.0744475 -0.515395 40 7.80971 -0.0499127 -0.515395 40 7.80526 -0.0989444 -0.515025 40 7.78939 -0.405013 -0.514478 50 7.78352 0.402939 -0.513892 48 7.78035 -0.159833 -0.512797 40 7.77281 0.377866 -0.512778 40 7.76004 0.352767 -0.511478 40 7.75712 -0.122869 -0.510566 40 7.7457 0.315491 -0.509993 40 7.73606 0.181241 -0.508697 40 7.73272 0.290586 -0.508693 40 7.72613 -0.353282 -0.508344 54 7.73326 0.120399 -0.508327 40 7.72664 0.156702 -0.507768 40 7.7255 0.205244 -0.507766 40 7.71884 0.229315 -0.507208 40 7.70972 0.265387 -0.506464 40 7.69116 -0.376014 -0.505186 67 7.69031 0.035013 -0.504242 46 7.6864 0.0108337 -0.503871 45 8.08102 -0.439457 -0.490602 66 8.02364 -0.499397 -0.485928 92 7.99424 0.748466 -0.485018 121 7.99008 0.609071 -0.483637 40 7.97817 -0.458681 -0.481769 203 7.96082 0.544098 -0.480694 61 7.97239 -0.282594 -0.48055 40 7.97324 -0.257546 -0.480549 40 7.94097 0.718503 -0.480169 198 7.95612 0.493604 -0.480003 68 7.93128 0.692552 -0.47913 85 7.94443 0.455349 -0.478792 70 7.94061 0.517733 -0.47879 108 7.9372 0.567612 -0.478788 47 7.94812 -0.231657 -0.478296 40 7.94662 -0.1192 -0.477946 40 7.93487 -0.206278 -0.477083 40 7.93376 -0.168835 -0.476908 40 7.91632 -0.143525 -0.475348 40 7.91563 -0.00671687 -0.47517 40 7.90724 -0.081211 -0.47448 40 7.90361 -0.0314978 -0.474132 40 7.89949 -0.0562862 -0.473786 40 7.89362 0.253835 -0.473602 40 7.89079 0.278568 -0.473428 40 7.89166 0.0305709 -0.47309 40 7.88235 -0.341121 -0.472931 56 7.88646 0.142072 -0.47274 40 7.88334 0.0801004 -0.472396 40 7.87744 0.315311 -0.472388 40 7.87999 0.166741 -0.472219 40 7.87021 0.42654 -0.472211 52 7.87491 0.117157 -0.471701 40 7.86336 0.364286 -0.471347 40 7.86348 -0.315492 -0.471198 107 7.86318 0.203513 -0.470832 40 7.84962 0.400768 -0.470306 40 7.85566 0.0552297 -0.469972 40 7.85056 0.227907 -0.469792 40 7.84655 0.338867 -0.469789 40 7.83149 -0.363409 -0.468601 110 8.14317 -0.444418 -0.453058 40 8.14119 -0.405854 -0.452731 40 8.12382 -0.469022 -0.451594 89 8.07069 0.728105 -0.448786 144 8.06827 0.638502 -0.447975 40 8.06616 0.587342 -0.447489 40 8.06229 0.612522 -0.447325 40 8.07327 -0.262966 -0.446705 40 8.05691 0.548473 -0.446514 40 8.07007 -0.237497 -0.446379 40 8.0616 0.00338345 -0.445394 40 8.05773 -0.173852 -0.445238 40 8.04285 -0.375944 -0.444595 40 8.0412 -0.198822 -0.443937 40 8.0403 -0.148264 -0.443773 40 8.02604 0.43236 -0.443427 40 8.02081 0.520584 -0.443424 40 8.01643 0.494995 -0.442936 40 8.02487 0.11671 -0.442461 40 8.01198 0.469439 -0.442449 40 8.02368 0.0284526 -0.442302 40 8.01952 -0.0597561 -0.44198 40 8.0153 -0.0849207 -0.441655 40 8.01572 -0.0219662 -0.441653 40 8.01324 0.0913234 -0.441486 40 8.00902 -0.110039 -0.441168 40 8.00267 -0.286062 -0.441012 40 8.00577 0.179274 -0.440995 40 7.99619 -0.348745 -0.440689 41 8.00055 0.14142 -0.440508 40 7.99177 -0.310847 -0.440199 41 7.99166 0.053343 -0.439698 40 7.97728 0.203621 -0.438716 40 7.95767 0.315689 -0.437411 40 7.95867 0.228109 -0.437251 40 8.28192 -0.461259 -0.397892 98 8.23349 -0.39356 -0.394077 76 8.20596 0.640589 -0.393162 73 8.21827 -0.418672 -0.393051 71 8.19074 0.704196 -0.392427 62 8.2068 -0.366359 -0.392023 85 8.20046 -0.327336 -0.391434 43 8.16206 0.585741 -0.389644 101 8.14718 0.67482 -0.389055 73 8.15607 0.495274 -0.388767 120 8.1688 -0.0691488 -0.388639 116 8.14626 0.610379 -0.388617 77 8.16439 -0.210225 -0.388497 118 8.14085 0.545745 -0.387886 112 8.1571 0.020685 -0.387756 125 8.14165 0.468783 -0.387595 124 8.13655 0.519806 -0.387446 118 8.14561 -0.158466 -0.387029 118 8.14627 -0.120081 -0.387028 118 8.14308 -0.184003 -0.386883 115 8.13767 -0.299023 -0.386741 42 8.14005 0.225322 -0.386723 114 8.13181 0.429812 -0.386716 112 8.14104 0.04627 -0.386582 120 8.13406 0.340302 -0.386572 120 8.13341 -0.247688 -0.386299 82 8.13718 -0.00486831 -0.38629 109 8.13264 -0.0942832 -0.386 112 8.12711 0.314461 -0.385986 115 8.13006 0.135649 -0.385846 109 8.12606 0.28886 -0.385841 116 8.12117 0.403709 -0.385837 110 8.12876 0.0845448 -0.385701 114 8.12534 0.250511 -0.385695 112 8.11642 0.377935 -0.385398 104 8.1231 -0.0430968 -0.385265 107 8.12136 0.173812 -0.385258 104 8.11848 0.109977 -0.384967 112 8.11479 0.199197 -0.384817 110 8.44759 0.719224 -0.363908 72 8.44024 -0.410466 -0.362049 83 8.44208 -0.370686 -0.362048 103 8.38618 0.68727 -0.359574 125 8.39336 -0.342286 -0.358661 107 8.36444 0.658968 -0.357949 89 8.37844 -0.315367 -0.357576 102 8.36742 -0.288669 -0.356762 131 8.34159 0.61755 -0.35619 133 8.35976 0.105629 -0.355936 169 8.33553 0.59075 -0.355649 123 8.33535 0.564417 -0.355514 95 8.31801 0.523817 -0.354161 128 8.31762 0.497555 -0.354026 101 8.3195 -0.130252 -0.353235 100 8.31506 -0.156328 -0.352965 102 8.30321 0.47047 -0.352944 132 8.29867 0.444045 -0.352538 93 8.29792 -0.10391 -0.351744 100 8.29632 -0.0647948 -0.351607 97 8.28672 0.404212 -0.351591 115 8.29449 -0.0387252 -0.351471 98 8.29457 0.0133884 -0.351469 97 8.2871 0.352041 -0.351457 113 8.29257 -0.0126717 -0.351334 103 8.28762 0.221709 -0.351191 100 8.28562 0.286797 -0.351189 122 8.28822 0.0784616 -0.35106 100 8.28269 0.312743 -0.351052 122 8.27998 0.377781 -0.35105 115 8.28643 0.0523977 -0.350926 130 8.27494 -0.24673 -0.350394 136 8.27631 0.195353 -0.350379 128 8.27433 -0.194694 -0.350257 52 8.27289 0.169254 -0.350109 93 8.27053 0.260211 -0.350106 127 8.22779 -0.219607 -0.347142 54 8.62504 0.690508 -0.327338 81 8.60133 0.634329 -0.3256 167 8.60652 -0.32642 -0.324888 122 8.6009 -0.366792 -0.324641 65 8.59572 -0.393616 -0.324393 66 8.56545 0.65885 -0.323487 57 8.55963 -0.29757 -0.321905 122 8.53252 0.589056 -0.321129 98 8.54257 -0.270056 -0.320786 105 8.49448 0.559745 -0.318645 114 8.50783 -0.228717 -0.318548 167 8.49221 0.532816 -0.318398 132 8.47591 0.505121 -0.31728 84 8.47164 0.438152 -0.316786 123 8.46699 0.411257 -0.316414 117 8.4686 -0.20092 -0.316062 106 8.45687 0.370867 -0.31567 117 8.44829 0.463627 -0.315418 110 8.45201 0.344073 -0.315298 118 8.45493 0.0385482 -0.31506 101 8.44331 0.250798 -0.314555 124 8.44108 0.317107 -0.314553 120 8.44279 0.0650531 -0.314313 100 8.43873 0.197619 -0.314185 99 8.43403 0.131265 -0.313814 110 8.43009 0.223944 -0.313687 132 8.42759 0.157665 -0.313441 118 8.42642 0.104695 -0.313318 106 8.42009 0.289897 -0.313187 124 8.41708 0.0120501 -0.3127 77 8.39712 -0.0142959 -0.311458 54 8.38987 -0.146073 -0.311091 121 8.37051 -0.106218 -0.309847 58 8.35903 -0.0535074 -0.309099 57 8.35483 -0.0797159 -0.308852 94 8.30955 -0.17054 -0.306122 73 8.83574 0.552656 -0.287398 103 8.78921 0.494178 -0.28459 146 8.78346 0.452322 -0.284142 123 8.76369 0.520299 -0.283241 103 8.76091 0.423499 -0.282795 126 8.75998 0.354501 -0.282573 143 8.73942 0.587714 -0.282115 89 8.74425 0.395111 -0.281785 126 8.74927 -0.182192 -0.281692 201 8.74267 -0.209552 -0.281356 167 8.7371 0.326015 -0.281225 110 8.74045 -0.11337 -0.281128 168 8.74077 -0.0859104 -0.281127 169 8.73617 0.229812 -0.281004 144 8.73708 -0.0447109 -0.280901 176 8.73318 -0.0172662 -0.280675 168 8.73319 0.0101702 -0.280674 166 8.72611 0.298122 -0.280552 162 8.726 -0.236632 -0.280458 158 8.72906 0.0512934 -0.280448 177 8.72687 0.202106 -0.280443 141 8.72501 0.27064 -0.28044 136 8.71888 -0.332424 -0.280237 54 8.71947 0.174502 -0.279994 156 9.67401 0.451556 -0.279957 255 8.71324 -0.263718 -0.279785 135 8.68692 0.0782116 -0.278087 173 8.65588 0.609177 -0.277508 67 8.64994 0.63606 -0.277282 60 8.64197 -0.35691 -0.275968 80 8.56085 0.103596 -0.271007 51 9.3304 -0.106142 -0.262077 202 9.3154 0.465109 -0.261854 255 9.25814 0.622906 -0.259422 59 8.63163 0.460061 -0.227268 255 8.6372 0.215765 -0.227074 255 8.63762 -0.069194 -0.226983 249 8.62968 0.269861 -0.226769 255 8.62379 -0.190994 -0.22638 255 8.6234 0.0935156 -0.226269 255 8.60821 0.486002 -0.226154 255 8.57272 0.146991 -0.223739 122 8.56644 -0.162626 -0.223447 208 8.52588 0.0525722 -0.221315 255 8.49271 0.239287 -0.219792 255 8.3203 -0.000348132 -0.210901 86 8.31621 -0.0395254 -0.2107 111 9.08627 0.762421 -0.199492 32 8.99378 -0.392013 -0.194329 70 8.96916 0.723884 -0.19411 80 8.92564 -0.347112 -0.191187 255 8.90276 0.676107 -0.190971 255 8.90085 0.647833 -0.190792 170 8.90672 -0.318414 -0.190289 255 8.87972 -0.289601 -0.189031 109 8.71378 -0.120342 -0.181399 239 8.68996 -0.215667 -0.180415 159 8.67168 0.603094 -0.180386 94 8.68939 -0.147382 -0.180323 210 8.6846 -0.188254 -0.180145 184 8.67552 0.439217 -0.180123 145 8.66845 0.561817 -0.180119 125 8.67925 -0.242717 -0.179968 122 8.66812 0.46613 -0.179853 165 8.65622 0.533679 -0.179491 99 8.65386 0.506237 -0.179313 126 8.52605 0.21657 -0.173042 255 8.5161 0.283236 -0.172681 255 8.50233 -0.0913396 -0.171887 112 8.4932 0.309122 -0.171693 255 8.4833 0.402188 -0.171421 90 8.48753 0.148777 -0.17125 255 8.48656 0.0687553 -0.171163 255 8.47622 0.335123 -0.170975 237 8.47276 0.188418 -0.170621 255 8.46633 0.0951305 -0.170265 255 8.46342 0.241398 -0.17026 255 8.43064 0.372984 -0.168999 255 8.41067 -0.064211 -0.167759 185 8.35411 0.119775 -0.16524 255 8.34299 0.00162295 -0.164706 146 8.33096 -0.0245896 -0.164169 89 9.33225 -0.421175 -0.150464 223 8.92314 0.693326 -0.135334 245 8.87678 0.242402 -0.132654 241 8.87797 0.0471454 -0.132583 252 8.87641 0.172648 -0.132579 252 8.8755 0.214473 -0.132578 249 8.85734 0.116667 -0.131811 86 8.8478 0.074869 -0.131428 220 8.55118 0.140403 -0.120029 77 8.34249 -0.00655104 -0.111949 63 8.34037 -0.0458446 -0.111873 72 8.98449 0.0616237 -0.0805733 255 8.89221 0.284319 -0.0777306 59 8.79837 0.087454 -0.0745802 225 8.74359 0.237891 -0.0728998 85 8.48625 0.110091 -0.0645279 76 8.47387 0.13652 -0.0641405 130 8.47254 0.203073 -0.0641382 100 8.45715 0.176066 -0.0636236 120 8.89309 0.261544 -0.0322738 177 8.87787 0.233232 -0.0318416 255 8.86288 0.19109 -0.03141 255 8.85791 0.135328 -0.0312494 255 8.8363 0.107298 -0.0306548 255 8.82946 0.16272 -0.0304905 255 8.79473 0.0654665 -0.0295193 255 9.31732 0.276396 0.0182499 255 8.97843 0.13839 0.0252125 255 8.93283 0.109485 0.0261486 229 8.8971 0.206813 0.0268447 255 8.89441 0.234703 0.0268864 255 8.89371 0.17877 0.0269253 255 8.86115 0.0805554 0.0276145 255 8.94353 0.186194 0.0672675 85 8.93253 0.129856 0.0674541 95 8.85809 0.156825 0.0686178 253 9.04712 0.123294 0.125106 245 8.9967 0.150734 0.125562 109 8.98947 0.0940958 0.125632 98 8.97051 0.248912 0.125783 78 8.93391 0.191618 0.126127 229 8.92927 0.219574 0.126164 169 9.0038 0.0866536 0.182455 149 8.92232 0.184233 0.182676 226 8.91309 0.142058 0.182701 200 8.8917 0.211635 0.182758 122 7.15998 -0.0607409 0.187458 57 7.26362 0.878282 0.230308 40 7.28265 0.903883 0.23038 40 7.28228 0.938722 0.230395 40 7.78967 -0.211212 0.231822 255 7.79229 -0.186782 0.231829 255 8.89466 0.18175 0.235427 255 8.89919 0.153888 0.235439 242 8.90004 0.209854 0.235447 167 8.92933 0.238701 0.235546 78 9.0078 0.113627 0.235789 81 9.04611 0.0857984 0.235912 229 +unknow 0.978222 1 0 550 -1.57015 -20.1521 -1.43887 112 -1.44266 -20.1496 -1.43789 152 -1.5045 -20.1251 -1.43626 140 -2.0035 -20.0174 -1.43106 104 -2.06456 -19.9932 -1.4296 132 -2.15769 -19.9733 -1.42879 141 -2.21803 -19.9447 -1.427 145 -2.27732 -19.9079 -1.42456 137 -2.64249 -19.7883 -1.41854 150 -2.7025 -19.7641 -1.41724 138 -2.85538 -19.7265 -1.41594 134 -2.7602 -19.7239 -1.41464 143 -2.91271 -19.6859 -1.41334 136 -2.97307 -19.6668 -1.41253 142 -3.03242 -19.6416 -1.41122 138 -3.12402 -19.6211 -1.41074 140 -3.18279 -19.5935 -1.40927 142 -3.24239 -19.5716 -1.4083 140 -3.39329 -19.5298 -1.407 138 -3.33059 -19.5325 -1.40635 141 -2.52804 -19.6344 -1.40486 132 -3.44912 -19.4877 -1.4044 139 -3.54056 -19.4692 -1.40424 136 -2.30855 -19.6313 -1.40241 126 -3.59702 -19.4325 -1.40212 137 -2.46143 -19.6027 -1.4016 118 -3.65549 -19.4074 -1.40098 140 -2.39888 -19.6024 -1.40095 128 -3.7157 -19.3919 -1.40066 140 -3.80437 -19.3605 -1.39952 139 -3.86129 -19.3289 -1.39789 139 -3.9216 -19.3147 -1.39773 138 -4.00935 -19.2804 -1.39643 135 -4.06212 -19.2306 -1.39334 141 -3.5704 -21.3158 -1.37887 188 -3.73389 -21.2655 -1.37725 192 -3.49984 -21.3053 -1.37725 204 -3.63262 -21.277 -1.37681 182 -3.79608 -21.2281 -1.37535 191 -3.86239 -21.2141 -1.3752 194 -3.95937 -21.18 -1.37403 193 -4.02514 -21.1636 -1.37374 192 -4.0897 -21.141 -1.37301 190 -4.153 -21.1124 -1.37183 188 -4.24927 -21.077 -1.37066 189 -4.31265 -21.0498 -1.36964 188 -4.37589 -21.0225 -1.36861 189 -4.47324 -20.9939 -1.36802 183 -4.53663 -20.968 -1.36715 186 -4.59903 -20.9381 -1.36597 183 -4.65999 -20.9021 -1.36436 183 -4.75576 -20.8683 -1.36348 182 -4.8204 -20.8493 -1.36319 181 -4.8813 -20.8147 -1.36172 180 -4.97559 -20.7759 -1.36055 179 -5.03327 -20.7292 -1.3582 177 -5.09502 -20.6997 -1.35717 180 -5.72936 -20.3592 -1.34486 168 -5.66537 -20.3771 -1.34485 218 -5.79219 -20.3373 -1.34456 175 -5.87179 -20.2542 -1.34031 215 -6.05896 -20.1865 -1.33943 174 -5.99495 -20.2035 -1.33928 177 -5.92975 -20.2165 -1.33884 168 -5.39834 -19.7803 -1.29728 166 -5.2715 -19.5585 -1.27907 174 -5.1152 -19.5896 -1.27833 187 -5.20436 -19.5537 -1.27746 179 -4.92351 -19.6099 -1.27627 161 -5.04462 -19.5708 -1.27569 157 -4.97125 -19.5402 -1.27216 241 -2.28157 -19.6517 -1.2442 255 -2.06367 -19.6597 -1.24302 202 -2.40279 -19.6192 -1.24288 191 -2.49471 -19.6037 -1.24259 208 -2.55576 -19.5918 -1.2423 196 -2.70873 -19.5652 -1.24186 143 -2.00026 -19.6502 -1.24184 195 -2.61597 -19.5738 -1.24157 155 -2.33733 -19.5949 -1.24053 231 -2.21031 -19.5755 -1.23803 152 -1.49785 -20.7958 -1.20542 76 -5.44496 -19.5654 -1.16877 91 -5.22541 -19.6086 -1.16768 132 -5.34799 -19.5735 -1.16755 120 -5.28492 -19.5844 -1.16714 119 -5.06281 -19.6162 -1.16537 109 -4.785 -19.6858 -1.16537 83 -5.1214 -19.5886 -1.16456 181 -4.99528 -19.6088 -1.16374 231 -4.83875 -19.6377 -1.16306 119 -4.71017 -19.6464 -1.16157 132 -4.61209 -19.6451 -1.15994 157 -4.91913 -19.5663 -1.15967 115 -1.54445 -20.108 -1.15904 128 -4.54499 -19.6361 -1.15831 186 -4.47798 -19.6269 -1.15668 196 -4.37982 -19.6225 -1.15491 200 -4.31432 -19.6186 -1.15369 199 -4.2493 -19.6165 -1.1526 198 -4.18352 -19.6102 -1.15125 199 -4.08702 -19.6102 -1.14989 206 -4.02141 -19.6034 -1.14853 205 -3.95548 -19.5944 -1.14704 210 -3.64541 -19.6443 -1.14635 255 -3.8608 -19.601 -1.14622 229 -3.5819 -19.6458 -1.14567 255 -3.51842 -19.6471 -1.14499 255 -3.7943 -19.5876 -1.14446 248 -3.72978 -19.5837 -1.14337 255 -2.80006 -19.716 -1.14185 203 -3.44364 -19.5834 -1.13984 255 -3.35065 -19.5955 -1.13956 249 -3.28744 -19.5961 -1.13888 236 -3.13312 -19.6193 -1.13874 234 -3.2249 -19.6004 -1.13847 230 -3.06749 -19.6034 -1.13698 241 -3.00589 -19.613 -1.13698 245 -2.94103 -19.6006 -1.13548 246 -2.84749 -19.6063 -1.13494 253 -2.07535 -19.701 -1.13478 200 -2.41182 -19.6325 -1.13276 152 -2.62728 -19.6028 -1.13263 193 -2.50356 -19.615 -1.13235 189 -2.56465 -19.6031 -1.13208 255 -2.34567 -19.6024 -1.13018 132 -2.00664 -19.64 -1.13017 255 -2.28317 -19.6017 -1.12963 236 -1.9133 -19.6412 -1.12962 198 -2.12894 -19.617 -1.12949 80 -2.21869 -19.583 -1.12787 214 -5.486 -19.6587 -1.0609 130 -5.6061 -19.6124 -1.06015 172 -1.51126 -20.3258 -1.05905 98 -5.31938 -19.6569 -1.05803 108 -5.5232 -19.555 -1.0553 248 -5.01812 -19.6412 -1.0523 126 -5.23326 -19.5829 -1.05218 194 -5.0793 -19.6234 -1.05218 234 -5.38317 -19.5278 -1.05132 169 -5.16609 -19.5781 -1.05081 225 -4.7933 -19.6603 -1.05006 144 -4.93432 -19.5698 -1.0467 147 -4.83482 -19.5638 -1.04483 125 -4.70101 -19.5492 -1.04197 255 -4.63726 -19.5541 -1.04135 255 -4.5387 -19.5485 -1.0396 255 -4.47458 -19.551 -1.03885 255 -4.25635 -19.5854 -1.03798 255 -4.40783 -19.5416 -1.03736 255 -4.1927 -19.5889 -1.03735 255 -4.12865 -19.5903 -1.03661 255 -4.31224 -19.5466 -1.03636 255 -4.03467 -19.6017 -1.03611 255 -3.97028 -19.6006 -1.03523 255 -1.54469 -19.9349 -1.03492 188 -3.90554 -19.5973 -1.03424 255 -3.80969 -19.5979 -1.03312 255 -2.75642 -19.7614 -1.03234 161 -3.74283 -19.5823 -1.03137 255 -3.67832 -19.5783 -1.03037 255 -3.58312 -19.5797 -1.02938 255 -3.5191 -19.5771 -1.0285 255 -3.45688 -19.5841 -1.02825 255 -3.39465 -19.5909 -1.028 255 -3.30196 -19.6048 -1.02788 255 -3.23904 -19.6072 -1.02738 255 -3.17711 -19.6153 -1.02725 255 -3.08307 -19.6202 -1.02663 255 -2.09274 -19.7443 -1.02622 175 -2.95824 -19.6293 -1.026 255 -3.01928 -19.6159 -1.02575 255 -2.86338 -19.6272 -1.025 255 -2.58089 -19.6301 -1.02276 100 -2.7889 -19.5472 -1.0194 255 -2.35839 -19.6038 -1.01939 136 -2.45 -19.5865 -1.01902 137 -2.51075 -19.5728 -1.01865 195 -2.01664 -19.6158 -1.01776 255 -2.66058 -19.5248 -1.01691 103 -2.29139 -19.5655 -1.01653 181 -2.22534 -19.533 -1.01404 255 -2.16374 -19.5379 -1.01391 96 -1.437 -20.6803 -0.957452 133 -5.87909 -19.752 -0.950705 160 -5.79849 -19.7072 -0.94699 222 -5.51131 -19.7583 -0.945296 188 -5.72211 -19.6754 -0.944063 239 -5.61623 -19.6561 -0.94136 239 -5.54526 -19.6409 -0.939445 248 -5.10307 -19.7233 -0.93741 108 -1.50785 -20.3089 -0.936861 250 -5.40749 -19.6234 -0.936404 133 -5.25269 -19.6633 -0.936288 216 -5.31081 -19.6332 -0.935502 141 -5.18025 -19.6392 -0.933923 172 -5.02584 -19.6792 -0.93392 248 -4.85922 -19.6696 -0.931103 111 -4.78988 -19.6537 -0.929301 235 -4.94117 -19.6039 -0.928629 137 -4.71743 -19.624 -0.926711 255 -4.65163 -19.6213 -0.925696 255 -4.55642 -19.6313 -0.925019 255 -4.48986 -19.6241 -0.92378 255 -1.55285 -20.0572 -0.922909 149 -4.42469 -19.6225 -0.922878 255 -4.33132 -19.6392 -0.922651 255 -2.1806 -19.9846 -0.922141 149 -4.26665 -19.6391 -0.921861 249 -4.20036 -19.6309 -0.920622 251 -4.10537 -19.6388 -0.919944 255 -4.03965 -19.632 -0.918817 255 -3.97362 -19.623 -0.917578 255 -3.91041 -19.6276 -0.917126 255 -2.70114 -19.8282 -0.91698 141 -3.81598 -19.636 -0.916561 255 -3.75129 -19.6322 -0.915659 255 -3.68667 -19.6282 -0.914757 255 -3.59235 -19.6355 -0.914192 255 -3.52819 -19.6329 -0.913402 255 -3.46512 -19.6361 -0.91295 255 -3.40172 -19.637 -0.912386 255 -3.30717 -19.641 -0.911708 255 -3.2448 -19.6474 -0.911482 255 -3.17926 -19.6338 -0.910129 255 -3.08578 -19.6426 -0.90979 255 -2.74539 -19.6891 -0.909554 236 -3.02105 -19.6325 -0.908662 255 -2.95906 -19.6399 -0.908548 255 -2.02819 -19.7337 -0.90717 255 -2.86276 -19.628 -0.907082 255 -2.08955 -19.7212 -0.906834 255 -2.79913 -19.623 -0.906293 255 -2.57934 -19.6229 -0.904598 119 -2.45501 -19.6308 -0.904144 214 -1.96032 -19.6803 -0.903792 255 -2.36035 -19.6243 -0.903129 139 -2.29639 -19.6118 -0.902002 122 -5.93507 -19.7083 -0.833541 168 -5.81822 -19.6557 -0.829285 249 -5.74066 -19.6202 -0.826446 253 -4.96449 -19.8246 -0.826126 121 -5.66952 -19.6055 -0.824723 248 -5.35982 -19.6883 -0.824514 164 -5.44289 -19.6282 -0.822692 186 -5.56501 -19.5898 -0.822492 255 -1.53938 -20.2906 -0.821574 130 -5.49043 -19.561 -0.82006 255 -5.26042 -19.5662 -0.817218 138 -5.1912 -19.5537 -0.815697 135 -5.12618 -19.5564 -0.814987 129 -5.03047 -19.5668 -0.814276 107 -4.96403 -19.5631 -0.813261 162 -4.80641 -19.586 -0.812447 255 -4.74296 -19.5932 -0.81204 255 -4.67906 -19.5983 -0.811532 255 -4.61608 -19.6071 -0.811227 255 -4.52047 -19.615 -0.810516 255 -4.45571 -19.6155 -0.809805 255 -4.39012 -19.6119 -0.808892 255 -4.29421 -19.6167 -0.808079 255 -2.36475 -19.9274 -0.807317 166 -2.58138 -19.8824 -0.806412 101 -4.22452 -19.593 -0.806153 255 -1.57786 -19.9711 -0.80557 160 -2.51662 -19.8726 -0.805498 203 -4.15835 -19.5847 -0.805037 255 -4.06438 -19.5963 -0.804629 255 -3.93761 -19.6038 -0.803714 255 -3.87406 -19.6063 -0.803206 255 -3.77744 -19.6027 -0.802089 255 -3.99194 -19.5561 -0.801892 255 -3.71433 -19.6067 -0.801683 255 -2.4433 -19.7932 -0.801039 100 -3.64978 -19.6025 -0.80087 255 -3.5509 -19.5841 -0.799045 255 -3.48583 -19.5755 -0.79803 255 -3.42327 -19.5805 -0.797724 255 -3.33029 -19.5925 -0.797519 255 -3.26773 -19.5969 -0.797214 255 -3.2042 -19.5953 -0.796604 255 -3.04865 -19.61 -0.796093 255 -3.14071 -19.5934 -0.795994 255 -2.98521 -19.6076 -0.795484 255 -2.92241 -19.609 -0.795077 255 -2.82796 -19.6087 -0.794365 255 -2.76409 -19.6017 -0.793553 255 -2.26946 -19.655 -0.793032 232 -2.69836 -19.5806 -0.792031 255 -1.98893 -19.6613 -0.791807 255 -2.63253 -19.5573 -0.790409 255 -2.10854 -19.6127 -0.789988 255 -2.04671 -19.6172 -0.789885 255 -2.20049 -19.5985 -0.789788 255 -5.92999 -19.7496 -0.717864 154 -5.26727 -19.9035 -0.716412 174 -5.19969 -19.9006 -0.715512 188 -5.31897 -19.8463 -0.714525 172 -5.81434 -19.7006 -0.714266 228 -5.08365 -19.8377 -0.711464 176 -1.5331 -20.4213 -0.711365 110 -5.73292 -19.6516 -0.711118 243 -5.66123 -19.635 -0.709499 248 -5.55455 -19.6114 -0.707159 255 -5.48648 -19.6057 -0.706079 255 -5.41797 -19.5978 -0.704909 255 -5.31931 -19.5999 -0.703829 255 -4.89874 -19.6269 -0.700223 255 -4.8043 -19.642 -0.699862 255 -4.73931 -19.6434 -0.699231 255 -4.9516 -19.5765 -0.698606 255 -4.67205 -19.6349 -0.698151 255 -4.56415 -19.5905 -0.695092 255 -4.28463 -19.6433 -0.694636 255 -4.49902 -19.5891 -0.694371 255 -4.22123 -19.6488 -0.694274 255 -4.43307 -19.5837 -0.69347 255 -4.15413 -19.6366 -0.693104 255 -4.3672 -19.578 -0.69257 255 -4.05714 -19.6344 -0.692113 255 -3.99068 -19.6236 -0.691033 255 -3.92551 -19.6184 -0.690222 255 -3.86041 -19.6129 -0.689411 255 -3.76644 -19.6231 -0.689049 255 -3.70478 -19.6348 -0.689048 255 -3.6409 -19.6346 -0.688506 255 -3.54622 -19.6397 -0.687965 255 -3.48347 -19.6448 -0.687693 255 -3.41833 -19.636 -0.686793 255 -3.32378 -19.6401 -0.686251 255 -3.25849 -19.6287 -0.68526 255 -3.13322 -19.637 -0.684717 255 -3.19394 -19.6211 -0.684449 255 -3.03823 -19.6357 -0.683996 255 -2.97445 -19.6313 -0.683365 255 -2.9113 -19.6307 -0.682913 255 -2.81849 -19.6422 -0.682821 255 -2.75016 -19.6035 -0.680661 255 -2.03987 -19.686 -0.68046 241 -2.68776 -19.6061 -0.68039 255 -2.59326 -19.6027 -0.679668 255 -1.97624 -19.6745 -0.679649 123 -2.53116 -19.6068 -0.679486 255 -2.46807 -19.6027 -0.678945 255 -2.40647 -19.6104 -0.678943 255 -2.19026 -19.6317 -0.678757 255 -2.09772 -19.6418 -0.678754 255 -2.25125 -19.6188 -0.678489 255 -2.31264 -19.6096 -0.678401 255 -5.84773 -19.7019 -0.5841 157 -5.75868 -19.6282 -0.580394 187 -5.68357 -19.6001 -0.578541 206 -5.57905 -19.5844 -0.576841 222 -5.50879 -19.5711 -0.575605 225 -5.43975 -19.5614 -0.574523 231 -5.37136 -19.5533 -0.573519 227 -5.27131 -19.5495 -0.572359 236 -5.20367 -19.5428 -0.571432 236 -5.13918 -19.5474 -0.570967 245 -5.04099 -19.5482 -0.570039 245 -4.97609 -19.5504 -0.569498 249 -4.90877 -19.5427 -0.56857 242 -4.8123 -19.5481 -0.567874 255 -4.74612 -19.5437 -0.5671 255 -4.68236 -19.5488 -0.566713 253 -4.61769 -19.5498 -0.566171 252 -4.52099 -19.5519 -0.565398 253 -4.45463 -19.5446 -0.564547 255 -4.39056 -19.5468 -0.564082 251 -4.29495 -19.5517 -0.563463 251 -4.22925 -19.5455 -0.56269 253 -4.16489 -19.545 -0.562148 246 -4.06987 -19.5508 -0.561606 242 -4.00561 -19.5498 -0.561064 238 -3.94099 -19.5466 -0.560445 248 -3.87878 -19.5549 -0.560289 231 -3.78162 -19.5475 -0.559283 211 -3.71681 -19.5416 -0.558587 237 -3.56249 -19.5663 -0.558429 251 -3.6517 -19.5336 -0.557814 255 -3.49781 -19.5597 -0.557733 255 -3.4353 -19.5647 -0.557499 255 -3.37177 -19.5635 -0.557035 255 -3.27688 -19.5634 -0.556415 255 -3.21377 -19.5638 -0.556027 255 -3.15069 -19.5639 -0.55564 255 -3.0566 -19.5667 -0.555174 255 -2.00732 -19.698 -0.554989 163 -2.99359 -19.5663 -0.554787 255 -2.12931 -19.6691 -0.554376 182 -2.93031 -19.5638 -0.554322 246 -2.83722 -19.5714 -0.554088 223 -2.06666 -19.6677 -0.554065 206 -2.34353 -19.6286 -0.553765 213 -2.7743 -19.5704 -0.5537 210 -2.28162 -19.6339 -0.553686 209 -2.21993 -19.641 -0.553684 197 -2.71253 -19.577 -0.553621 210 -2.65101 -19.5854 -0.55362 211 -2.55817 -19.5937 -0.553463 199 -2.4966 -19.6017 -0.553461 194 -2.43501 -19.6094 -0.553459 196 -2.10518 -20.6777 -0.462608 71 -5.88916 -19.8515 -0.460185 186 -2.16044 -20.5775 -0.459574 124 -5.79876 -19.774 -0.456953 86 -5.71001 -19.6999 -0.453851 78 -2.20489 -20.3818 -0.453439 133 -5.5866 -19.6189 -0.450231 76 -5.52224 -19.6267 -0.449906 207 -5.45096 -19.6093 -0.448742 248 -5.34906 -19.6 -0.447577 251 -2.27918 -20.1765 -0.44711 135 -5.2828 -19.5994 -0.446995 251 -5.21404 -19.5888 -0.446089 247 -5.14691 -19.5838 -0.445376 238 -5.05258 -19.6001 -0.445116 226 -4.98559 -19.5946 -0.444404 228 -2.33297 -20.0859 -0.444399 128 -4.92255 -19.6043 -0.444209 244 -4.82203 -19.5943 -0.443109 240 -4.7567 -19.5938 -0.44259 248 -4.69419 -19.6048 -0.442459 236 -4.62756 -19.598 -0.441747 248 -4.53202 -19.606 -0.441293 250 -2.38411 -19.9772 -0.441106 121 -4.46687 -19.6045 -0.440775 255 -4.40177 -19.6028 -0.440256 252 -4.30381 -19.598 -0.439414 252 -4.23886 -19.5958 -0.438896 252 -4.17355 -19.5914 -0.438313 246 -4.08077 -19.6089 -0.438246 244 -4.01756 -19.6138 -0.437986 238 -3.30385 -19.7303 -0.437451 185 -3.95239 -19.6087 -0.437403 237 -3.88806 -19.6072 -0.436949 223 -3.79487 -19.6214 -0.436818 230 -2.46166 -19.8308 -0.436716 112 -3.7321 -19.6274 -0.436622 225 -3.6675 -19.6233 -0.436104 222 -3.57392 -19.6344 -0.435908 216 -3.51187 -19.6436 -0.435841 203 -3.44739 -19.6388 -0.435323 177 -3.35014 -19.6272 -0.434416 164 -3.22514 -19.638 -0.434089 69 -2.51145 -19.7238 -0.433488 147 -2.726 -19.6792 -0.432977 241 -2.57059 -19.694 -0.432779 205 -2.6631 -19.6797 -0.432717 215 -2.99044 -19.5497 -0.430078 40 -3.04236 -19.479 -0.428077 235 -3.81133 -21.1741 -0.37579 47 -3.89461 -21.0674 -0.373348 47 -3.9604 -21.0531 -0.373296 47 -5.83324 -19.8055 -0.352268 125 -5.73732 -19.7086 -0.349007 215 -5.66094 -19.6766 -0.347593 228 -5.55504 -19.6569 -0.346288 237 -5.48462 -19.6435 -0.345417 235 -5.41701 -19.6394 -0.344818 236 -5.31548 -19.6319 -0.343893 234 -5.24807 -19.6273 -0.343294 229 -5.18074 -19.6224 -0.342695 231 -5.11298 -19.6154 -0.342042 237 -5.0185 -19.6315 -0.341823 223 -4.9509 -19.6239 -0.341169 226 -4.8868 -19.6297 -0.340896 225 -4.78996 -19.635 -0.340405 221 -4.72402 -19.6325 -0.339915 222 -4.6586 -19.6317 -0.339479 209 -4.56149 -19.6339 -0.338934 192 -4.49485 -19.6267 -0.338335 196 -4.43051 -19.6291 -0.338007 149 -4.21357 -19.6727 -0.337893 44 -4.27493 -19.6574 -0.337841 44 -2.71917 -19.9302 -0.337745 44 -4.14552 -19.6565 -0.337077 44 -4.36009 -19.6039 -0.336919 77 -3.92166 -19.6636 -0.33604 44 -4.04392 -19.6327 -0.33588 50 -3.98022 -19.6355 -0.335607 77 -3.85483 -19.6504 -0.335332 44 -2.76447 -19.7988 -0.334379 44 -2.90839 -19.6994 -0.332265 234 -2.80583 -19.6456 -0.330416 44 -3.01461 -19.5681 -0.329173 223 -3.16337 -19.5142 -0.328362 244 -3.09888 -19.5043 -0.327817 248 -3.98182 -21.2145 -0.233479 76 -6.0202 -20.7076 -0.233118 224 -3.90002 -21.1443 -0.231759 75 -5.83033 -20.658 -0.231068 223 -5.91002 -20.5687 -0.22976 123 -4.93394 -20.5325 -0.22393 74 -5.64562 -20.2446 -0.2219 112 -4.96111 -19.9516 -0.212516 72 -5.35604 -19.8036 -0.211625 223 -5.28198 -19.7759 -0.210682 251 -5.21526 -19.775 -0.210312 255 -2.88437 -20.2306 -0.209926 100 -5.14509 -19.7603 -0.209656 255 -4.82936 -19.8193 -0.20924 77 -4.98292 -19.773 -0.20908 71 -5.04305 -19.7495 -0.208917 219 -4.68777 -19.7772 -0.207723 71 -2.9499 -20.013 -0.205714 85 -4.06108 -19.7398 -0.204189 71 -3.99786 -19.7466 -0.204065 71 -3.9327 -19.7434 -0.203736 71 -2.99504 -19.8849 -0.20326 70 -3.13528 -19.7601 -0.201178 181 -3.03881 -19.7529 -0.200725 118 -4.92601 -20.9774 -0.132662 65 -3.96866 -21.0145 -0.130079 65 -3.90225 -21.0249 -0.130046 65 -3.06796 -20.2348 -0.115521 86 -5.17157 -19.7813 -0.115259 147 -5.06781 -19.7648 -0.114593 185 -5.00372 -19.7728 -0.114465 251 -4.93671 -19.7691 -0.114147 62 -4.86255 -19.7359 -0.113356 62 -4.69995 -19.7424 -0.112847 61 -3.09388 -19.9841 -0.111668 73 -4.01859 -19.7515 -0.11065 61 -3.17308 -19.8765 -0.110185 61 -3.94901 -19.7268 -0.110048 61 -3.22126 -19.7796 -0.108796 109 -3.28041 -19.7516 -0.108514 139 -3.35843 -20.5165 0.0165669 111 -3.38463 -20.275 0.0187132 135 -4.81283 -19.8669 0.0197229 157 -4.74207 -19.8469 0.020055 197 -4.67651 -19.8481 0.0201851 231 -3.4509 -20.0873 0.0203082 145 -4.57443 -19.8329 0.0205361 224 -4.50946 -19.8354 0.0206479 200 -4.43755 -19.8066 0.0210535 212 -4.34204 -19.8175 0.0211474 173 -4.27892 -19.8271 0.0211857 157 -4.21165 -19.817 0.0214077 132 -3.49242 -19.9522 0.0214632 170 -4.14449 -19.8066 0.0216297 131 -3.92453 -19.8412 0.0217271 162 -4.04872 -19.8142 0.0217421 136 -3.98488 -19.8189 0.0218172 156 -3.82911 -19.8496 0.0218211 194 -3.76488 -19.8517 0.0219147 226 -3.69922 -19.8458 0.0220817 237 -3.54045 -19.8584 0.0222326 235 -3.63292 -19.8356 0.0222854 225 +unknow 0.979703 1 0 377 -6.0022 26.0423 -1.75299 199 -6.08038 26.0077 -1.75182 247 -6.19226 25.9342 -1.74845 203 -6.26903 25.8952 -1.74698 196 -5.19992 26.0963 -1.74446 179 -6.33852 25.8269 -1.74332 238 -6.45918 25.7929 -1.74303 200 -6.52894 25.728 -1.73966 194 -6.59836 25.6629 -1.73629 239 -6.71871 25.6296 -1.73614 201 -5.29465 25.9327 -1.73405 182 -6.78849 25.5679 -1.73306 188 -6.93646 25.4785 -1.72955 199 -6.85639 25.5002 -1.72955 238 -7.04584 25.4071 -1.72662 190 -7.11112 25.333 -1.72266 237 -7.18144 25.2779 -1.72017 202 -7.29275 25.2169 -1.71812 189 -7.36132 25.1575 -1.71534 234 -7.42847 25.0941 -1.71226 202 -7.54091 25.0397 -1.7108 231 -7.61316 24.9949 -1.70918 196 -7.74463 24.8646 -1.70288 245 -7.66531 24.885 -1.70259 194 -8.23699 24.5313 -1.69073 187 -8.15863 24.5533 -1.69043 192 -8.3313 24.4299 -1.68589 235 -8.40413 24.3923 -1.68501 191 -8.46503 24.3206 -1.68149 189 -7.77229 24.5444 -1.68103 200 -8.5643 24.2371 -1.67812 230 -8.63238 24.1876 -1.67637 196 -7.97896 24.2661 -1.66623 209 -7.848 24.2521 -1.66227 207 -7.76873 24.2672 -1.66153 203 -5.53847 24.3723 -1.62569 185 -7.9729 25.8561 -1.62522 152 -5.34306 24.3975 -1.62437 218 -5.4158 24.3631 -1.62305 243 -7.87821 25.8371 -1.6221 153 -7.7889 25.835 -1.6202 119 -5.13818 24.3763 -1.61967 180 -5.05553 24.363 -1.61747 178 -5.19083 26.0097 -1.58884 154 -5.09442 25.9515 -1.5837 124 -8.00087 24.3142 -1.52608 94 -8.07595 24.2852 -1.52581 124 -7.87572 24.3194 -1.52377 159 -7.79073 24.3174 -1.52187 106 -7.7028 24.3056 -1.5193 99 -7.58043 24.3169 -1.51753 117 -5.47635 24.6138 -1.50014 98 -5.51744 24.4369 -1.48903 222 -5.62984 24.3989 -1.48822 82 -5.16275 24.4714 -1.48618 88 -5.27377 24.4273 -1.48483 155 -5.34963 24.4068 -1.48456 154 -5.06953 24.4094 -1.48076 115 -4.99041 24.4135 -1.47995 126 -8.26325 24.4361 -1.39443 109 -8.07576 24.3852 -1.38772 132 -8.32077 24.2288 -1.38338 92 -8.11001 24.2329 -1.3794 141 -7.91575 24.2844 -1.37865 255 -7.83147 24.2845 -1.37703 163 -7.74244 24.269 -1.37442 231 -7.61965 24.2785 -1.37268 114 -7.54274 24.3004 -1.37255 103 -7.44768 24.2629 -1.36857 100 -7.32291 24.2634 -1.36633 129 -7.24324 24.2748 -1.36558 128 -7.16639 24.2955 -1.36546 127 -7.04129 24.2925 -1.36309 125 -6.95783 24.2896 -1.36148 121 -6.8777 24.2979 -1.36061 122 -4.55802 24.8235 -1.35967 59 -6.75566 24.3031 -1.35886 114 -6.67084 24.2934 -1.35687 106 -6.58616 24.2834 -1.35488 77 -6.46807 24.3006 -1.35401 83 -6.3912 24.3189 -1.35388 119 -4.96152 24.6178 -1.35186 89 -6.30627 24.306 -1.35177 138 -5.69347 24.4568 -1.35175 152 -6.2289 24.3218 -1.35152 107 -6.03338 24.3526 -1.3504 107 -6.10502 24.3141 -1.34916 142 -5.8299 24.3487 -1.34716 99 -5.94411 24.319 -1.34704 144 -5.74562 24.3339 -1.34505 126 -4.59004 24.5618 -1.34402 82 -5.47292 24.3742 -1.34367 210 -5.54726 24.3471 -1.34305 127 -5.31162 24.371 -1.34131 176 -5.19672 24.3958 -1.3413 133 -5.12006 24.412 -1.3413 254 -5.03289 24.3771 -1.33807 103 -4.76151 24.4153 -1.33707 107 -4.6453 24.4316 -1.33669 116 -4.83241 24.3708 -1.33521 133 -8.61365 24.5274 -1.25217 179 -8.0231 24.5609 -1.24328 140 -8.4708 24.3658 -1.24093 154 -8.35198 24.3941 -1.24025 255 -8.15653 24.3212 -1.23283 130 -8.03428 24.3366 -1.23148 161 -7.87383 24.3638 -1.23013 214 -7.59237 24.407 -1.22765 124 -7.74375 24.3531 -1.22732 123 -7.46496 24.4024 -1.22529 225 -7.65398 24.3354 -1.22484 121 -7.38246 24.4066 -1.22416 255 -7.29484 24.3933 -1.22202 255 -7.21192 24.3951 -1.22078 255 -7.09018 24.4058 -1.21943 255 -7.00351 24.3934 -1.21741 255 -6.92466 24.4076 -1.21696 255 -6.80418 24.4207 -1.21583 255 -6.71945 24.4131 -1.21414 255 -6.63746 24.4148 -1.21302 255 -5.63151 24.6499 -1.21209 125 -6.51562 24.4208 -1.21155 253 -6.43478 24.4257 -1.21065 250 -6.35246 24.4245 -1.20941 236 -6.2742 24.4386 -1.20907 236 -4.57004 24.8057 -1.20858 149 -6.15359 24.4466 -1.20783 239 -6.07241 24.4483 -1.20682 242 -5.99175 24.4518 -1.20592 243 -5.87131 24.4584 -1.20468 239 -5.78567 24.4398 -1.20254 234 -5.70018 24.4209 -1.20041 112 -5.50117 24.4338 -1.1986 134 -5.42047 24.4334 -1.19759 150 -5.22714 24.4694 -1.19725 139 -4.61057 24.593 -1.19723 173 -5.30314 24.4489 -1.19702 197 -4.95301 24.5019 -1.19589 143 -4.68292 24.5529 -1.19577 255 -5.06516 24.4626 -1.195 122 -5.14033 24.4388 -1.19455 120 -4.79357 24.5051 -1.19431 255 -4.86544 24.4644 -1.19286 243 -8.51664 24.5441 -1.10508 213 -8.11185 24.4894 -1.09586 119 -4.49881 25.3925 -1.09526 103 -8.34633 24.2986 -1.09051 196 -8.25585 24.283 -1.08828 208 -7.62046 24.4104 -1.08442 147 -7.95858 24.2812 -1.08342 128 -7.68813 24.3577 -1.08291 115 -7.87059 24.27 -1.0815 123 -7.7525 24.2954 -1.08089 129 -7.45744 24.2894 -1.07613 232 -7.37877 24.305 -1.07572 255 -7.29552 24.3051 -1.07451 255 -7.21855 24.326 -1.0744 255 -4.50203 24.9516 -1.07331 131 -7.09549 24.331 -1.07288 255 -7.01295 24.3321 -1.07177 255 -6.93483 24.3482 -1.07146 255 -6.80716 24.3344 -1.06903 255 -6.72909 24.3499 -1.06873 255 -6.64625 24.3478 -1.06751 255 -5.37411 24.6517 -1.06707 139 -5.29538 24.6626 -1.06676 139 -5.21787 24.6791 -1.06676 180 -6.52579 24.3576 -1.06639 255 -5.48416 24.5988 -1.06566 122 -6.44517 24.3626 -1.06558 255 -6.36307 24.3614 -1.06447 255 -6.24375 24.3737 -1.06356 255 -6.16324 24.3777 -1.06274 255 -6.08182 24.3776 -1.06173 255 -5.99998 24.3752 -1.06062 255 -5.88177 24.3896 -1.0599 255 -4.57034 24.6629 -1.05956 168 -5.80145 24.3924 -1.05909 255 -5.71753 24.3794 -1.05747 255 -5.59411 24.3691 -1.05555 253 -4.62828 24.5444 -1.05421 249 -4.70015 24.5023 -1.05279 255 -4.81018 24.4524 -1.05138 255 -4.96055 24.406 -1.05058 251 -5.07511 24.3804 -1.05048 125 -4.8823 24.4137 -1.05017 255 -8.57035 24.5926 -0.959632 135 -4.55659 25.5217 -0.954224 176 -8.44011 24.4664 -0.952362 243 -8.31011 24.3378 -0.945003 255 -8.21436 24.3071 -0.942309 255 -8.08581 24.3038 -0.940331 255 -7.71296 24.3262 -0.936104 242 -7.78384 24.2847 -0.935299 120 -7.62688 24.3198 -0.934666 255 -7.50511 24.3326 -0.933587 255 -7.42513 24.3446 -0.933046 255 -7.34167 24.3448 -0.931967 255 -7.22287 24.3658 -0.931336 255 -7.13783 24.3596 -0.929988 255 -7.05234 24.3512 -0.92855 255 -6.9725 24.3617 -0.928009 255 -6.85056 24.3693 -0.92684 255 -6.76753 24.3676 -0.925761 255 -6.68671 24.3733 -0.925041 255 -4.51817 24.8587 -0.924621 175 -6.56759 24.3891 -0.92432 255 -6.48527 24.3884 -0.923331 255 -6.40149 24.3816 -0.922072 255 -6.28353 24.3999 -0.921531 255 -6.20239 24.4021 -0.920721 255 -6.12032 24.4002 -0.919732 255 -6.0393 24.4018 -0.918922 255 -5.92093 24.4164 -0.918291 255 -5.8428 24.4291 -0.91802 255 -5.7605 24.424 -0.916941 255 -5.64083 24.4314 -0.916041 255 -4.59951 24.6466 -0.915921 218 -5.55423 24.4061 -0.914065 255 -5.47578 24.4157 -0.913703 255 -4.66382 24.5634 -0.912784 255 -5.35422 24.4119 -0.912355 255 -4.73715 24.529 -0.911889 255 -5.27454 24.415 -0.911724 255 -5.19655 24.4256 -0.911453 255 -4.85073 24.4966 -0.911443 255 -4.92687 24.4773 -0.911266 255 -5.00335 24.4598 -0.911178 255 -5.07771 24.4322 -0.910642 255 -8.16976 24.3391 -0.779794 99 -8.06688 24.2849 -0.776558 99 -7.94244 24.2923 -0.775323 255 -7.86303 24.3076 -0.774935 234 -7.77751 24.3036 -0.773778 234 -7.6909 24.2955 -0.772467 240 -7.57454 24.3258 -0.772233 242 -7.48754 24.3151 -0.770844 244 -7.40358 24.3136 -0.769841 237 -4.53236 25.0003 -0.769455 165 -7.28263 24.3272 -0.768991 244 -7.19883 24.325 -0.767988 243 -7.11733 24.3302 -0.767293 246 -6.99544 24.3385 -0.766289 244 -6.91351 24.3411 -0.765517 255 -6.83271 24.3473 -0.764898 249 -6.74979 24.3456 -0.763972 249 -6.62977 24.3578 -0.763199 251 -6.54856 24.3612 -0.762504 252 -6.46689 24.3623 -0.761732 246 -6.34751 24.3751 -0.761036 250 -4.57048 24.7658 -0.760834 168 -6.26693 24.3794 -0.760418 253 -6.18297 24.3699 -0.75926 246 -6.06709 24.3949 -0.759104 246 -5.9852 24.3925 -0.758254 238 -5.90386 24.3917 -0.757482 247 -5.78564 24.4057 -0.75694 240 -5.7026 24.3965 -0.75586 248 -5.62459 24.4084 -0.755627 228 -5.50775 24.4269 -0.755316 214 -4.61965 24.5981 -0.75483 195 -5.42279 24.407 -0.753851 255 -5.34397 24.4141 -0.753464 249 -5.22677 24.4293 -0.753076 245 -4.72648 24.5289 -0.752985 181 -5.14794 24.4358 -0.752689 245 -5.06873 24.4401 -0.752225 248 -4.79893 24.4904 -0.752063 241 -4.95192 24.4559 -0.751914 249 -4.87313 24.4615 -0.751527 253 -8.11005 24.751 -0.630589 89 -7.9964 24.6661 -0.62685 143 -7.8809 24.5731 -0.622853 128 -7.76909 24.4892 -0.619178 127 -7.62852 24.4454 -0.616468 160 -7.53807 24.4254 -0.614984 112 -4.56859 25.1119 -0.613679 112 -7.32411 24.4111 -0.612531 120 -7.23769 24.4014 -0.611433 106 -7.15874 24.4163 -0.611173 146 -7.03804 24.4306 -0.610526 187 -6.95575 24.4334 -0.609879 147 -6.86701 24.4128 -0.608459 166 -6.75189 24.4449 -0.608456 190 -6.66503 24.4293 -0.60723 203 -6.58408 24.4347 -0.606712 210 -6.46219 24.4404 -0.605872 222 -6.38132 24.4451 -0.605354 230 -4.59989 24.842 -0.605305 131 -6.29999 24.4476 -0.604772 232 -6.17832 24.4518 -0.603931 231 -6.09952 24.4633 -0.603671 237 -6.01497 24.4513 -0.602638 236 -5.89779 24.4716 -0.602378 235 -5.81857 24.4803 -0.602053 243 -5.7375 24.481 -0.601471 241 -5.65514 24.4755 -0.600696 244 -5.53665 24.4882 -0.600242 251 -4.64776 24.6683 -0.600089 198 -5.45532 24.486 -0.599595 243 -5.37622 24.4933 -0.599271 247 -5.25862 24.5086 -0.598946 244 -5.1787 24.5113 -0.598493 244 -5.10125 24.5255 -0.598426 243 -4.75136 24.5814 -0.597966 85 -4.98243 24.5336 -0.597908 106 -4.90139 24.5295 -0.597261 174 -4.82353 24.5408 -0.59713 115 -7.48159 25.8307 -0.51968 88 -7.39492 25.8348 -0.519136 58 -7.25152 25.7924 -0.516967 90 -4.65695 25.3851 -0.490264 110 -4.69288 25.1345 -0.48377 110 -6.00539 24.7548 -0.481208 56 -7.13738 24.3504 -0.478588 100 -6.51552 24.4931 -0.477758 55 -6.43398 24.496 -0.477269 55 -6.16231 24.5576 -0.477045 55 -6.08273 24.5671 -0.476772 55 -6.35149 24.4948 -0.476671 55 -6.23158 24.5071 -0.476181 55 -4.71392 24.8131 -0.475327 96 -5.79167 24.5449 -0.474328 55 -5.71002 24.5435 -0.473784 55 -5.59386 24.5682 -0.473727 55 -5.8567 24.476 -0.472922 76 -5.50925 24.5525 -0.472805 55 -5.31162 24.5735 -0.472204 55 -5.42692 24.5462 -0.472153 55 -4.95034 24.5795 -0.470354 255 -5.2199 24.5216 -0.470307 80 -4.87272 24.5929 -0.470297 255 -5.02674 24.5599 -0.470247 255 -5.14078 24.5281 -0.470034 203 -7.10723 25.8132 -0.337418 93 -7.00871 25.7718 -0.336071 181 -6.25443 25.1747 -0.32041 90 -4.85598 25.4509 -0.319761 133 -4.87044 25.0999 -0.312797 148 -6.85212 24.5892 -0.311997 102 -6.20655 24.6528 -0.30986 89 -6.0113 24.695 -0.309733 89 -6.27851 24.6119 -0.309415 89 -6.3934 24.5782 -0.309336 89 -5.91635 24.6418 -0.308223 88 -5.71946 24.6739 -0.307933 88 -5.83382 24.6389 -0.307773 88 -5.63922 24.68 -0.307686 88 -5.55152 24.6528 -0.306747 88 -5.1946 24.6916 -0.305963 255 -5.4649 24.6291 -0.305889 88 -5.3475 24.6487 -0.305764 236 -5.07615 24.706 -0.305756 255 -5.26962 24.6635 -0.305721 255 -4.99493 24.7042 -0.305387 149 -4.92932 25.1835 -0.195425 133 -6.81447 24.5969 -0.19331 120 -5.02132 25.0267 -0.193291 157 -6.68907 24.594 -0.192742 196 -6.6066 24.5956 -0.192425 176 -6.52317 24.593 -0.192046 181 -6.44084 24.594 -0.191729 203 -6.31941 24.6028 -0.19138 191 -6.24063 24.6167 -0.191284 207 -5.0705 24.8657 -0.190968 120 -6.15746 24.6129 -0.190904 221 -6.04045 24.6378 -0.190839 226 -5.95834 24.6372 -0.190522 234 -5.87491 24.6305 -0.190111 226 -5.75652 24.6482 -0.189951 221 -5.67681 24.6564 -0.189792 213 -5.59755 24.6663 -0.189664 214 -5.13004 24.7596 -0.189525 124 -5.517 24.6701 -0.189441 219 -5.40025 24.6939 -0.189407 208 -5.32098 24.7029 -0.189279 199 -5.24087 24.7077 -0.189088 173 +unknow 0.971818 1 0 4095 -4.36816 0.794032 -1.52493 86 -4.66391 -0.656999 -1.52229 89 -4.35574 0.820036 -1.5221 83 -4.35183 0.840554 -1.5221 104 -4.41108 0.41323 -1.52139 89 -4.40328 0.489383 -1.52139 82 -4.38067 0.661877 -1.52139 91 -4.36506 0.758048 -1.52139 83 -4.51953 1.31231 -1.52092 115 -4.42664 -0.128931 -1.52069 97 -4.42311 0.218778 -1.52069 95 -4.66804 -0.582989 -1.52027 104 -4.65954 0.647501 -1.52026 100 -4.64059 0.771682 -1.52025 97 -4.63311 0.815383 -1.52025 97 -4.42615 -0.0663228 -1.51998 89 -4.42654 0.0310226 -1.51998 91 -4.41634 0.30197 -1.51998 82 -4.38589 0.599355 -1.51997 86 -4.35279 0.805295 -1.51997 118 -4.34367 0.853107 -1.51997 100 -4.32682 0.934827 -1.51997 81 -4.50548 1.34667 -1.51957 112 -4.4904 1.39613 -1.51957 116 -4.41536 -0.288518 -1.51928 86 -4.42379 0.0935465 -1.51927 98 -4.41671 0.267153 -1.51927 86 -4.40977 0.364209 -1.51927 90 -4.3859 0.585316 -1.51926 132 -4.37718 0.647259 -1.51926 129 -4.36189 0.743354 -1.51926 122 -4.3322 0.900425 -1.51926 107 -4.22095 0.868056 -1.51924 102 -4.68044 0.434277 -1.51892 99 -4.63443 0.785607 -1.51891 118 -4.59228 1.00305 -1.51891 104 -4.58588 1.03188 -1.51891 106 -4.50788 1.33197 -1.5189 108 -4.41713 -0.225986 -1.51857 94 -4.41847 -0.198227 -1.51857 91 -4.42205 -0.087129 -1.51857 125 -4.42288 -0.0176582 -1.51856 97 -4.42252 0.0587635 -1.51856 94 -4.42161 0.107387 -1.51856 93 -4.42063 0.14211 -1.51856 89 -4.39188 0.523022 -1.51856 111 -4.37932 0.619472 -1.51856 125 -4.37735 0.633226 -1.51856 86 -4.36575 0.708764 -1.51855 110 -4.35408 0.77725 -1.51855 121 -4.3373 0.865995 -1.51855 114 -4.33318 0.886424 -1.51855 111 -4.2258 0.834528 -1.51852 79 -4.6485 -0.684703 -1.51826 88 -4.69844 -0.0450311 -1.51825 107 -4.69829 0.0582965 -1.51825 105 -4.64655 0.697825 -1.51824 93 -4.55123 1.16779 -1.51823 104 -4.41335 -0.26057 -1.51786 87 -4.41955 -0.114873 -1.51786 89 -4.42073 -0.0523835 -1.51786 114 -4.42104 -0.00377344 -1.51786 89 -4.42103 0.010117 -1.51786 118 -4.41722 0.183679 -1.51785 89 -4.40978 0.31541 -1.51785 111 -4.40367 0.391555 -1.51785 117 -4.39697 0.460677 -1.51785 114 -4.3955 0.474488 -1.51785 125 -4.38836 0.53658 -1.51785 111 -4.38665 0.550364 -1.51785 107 -4.32569 0.913235 -1.51784 124 -4.22 0.854073 -1.51779 81 -4.44584 0.906901 -1.51767 165 -4.66992 -0.501484 -1.51759 108 -4.6851 0.330966 -1.51758 110 -4.67387 0.463283 -1.51757 106 -4.61916 0.850342 -1.51757 95 -4.60667 0.915557 -1.51757 93 -4.59327 0.980589 -1.51756 106 -4.53629 1.21726 -1.51756 96 -4.39432 -0.467994 -1.51715 114 -4.39647 -0.447281 -1.51715 111 -4.40469 -0.357416 -1.51715 90 -4.41408 -0.21195 -1.51715 124 -4.69446 1.03196 -1.51692 100 -4.6426 -0.698763 -1.51692 127 -4.6605 -0.567236 -1.51692 97 -4.67808 0.396994 -1.5169 110 -4.66662 0.514431 -1.5169 106 -4.66068 0.56571 -1.5169 99 -4.6561 0.602297 -1.5169 102 -4.56362 1.10243 -1.51689 99 -4.55661 1.13108 -1.51689 104 -4.52674 1.24523 -1.51689 97 -4.4055 -0.322685 -1.51644 89 -4.4112 0.232019 -1.51643 89 -4.40503 0.328962 -1.51643 110 -4.40115 0.377378 -1.51643 96 -4.38872 0.501651 -1.51643 114 -4.36458 0.680422 -1.51643 107 -4.65014 -0.632819 -1.51625 120 -4.65403 -0.603589 -1.51625 132 -4.66293 -0.530411 -1.51624 97 -4.66997 -0.464439 -1.51624 100 -4.693 -0.00814999 -1.51624 109 -4.6928 0.0434511 -1.51624 116 -4.69023 0.161369 -1.51624 112 -4.67917 0.360086 -1.51623 101 -4.66864 0.47756 -1.51623 105 -4.63535 0.733383 -1.51623 99 -4.63302 0.747942 -1.51623 123 -4.59265 0.965358 -1.51622 126 -4.58175 1.0158 -1.51622 107 -4.57364 1.05175 -1.51622 101 -4.56694 1.08047 -1.51622 102 -4.4026 -0.336392 -1.51573 115 -4.41428 -0.100893 -1.51573 111 -4.4152 0.0447483 -1.51573 117 -4.41071 0.2042 -1.51573 118 -4.39488 0.425555 -1.51572 114 -4.37845 0.570271 -1.51572 111 -4.36058 0.693825 -1.51572 103 -4.48023 0.681561 -1.51559 170 -4.43746 0.919752 -1.51559 156 -4.68272 -0.280636 -1.51557 114 -4.68829 -0.16287 -1.51557 110 -4.69016 0.0950005 -1.51557 111 -4.67305 0.411337 -1.51556 104 -4.65515 0.579863 -1.51556 132 -4.65045 0.616406 -1.51556 98 -4.64849 0.631012 -1.51556 136 -4.61625 0.834789 -1.51555 123 -4.61091 0.863777 -1.51555 134 -4.53652 1.1944 -1.51555 132 -4.5172 1.26551 -1.51554 142 -4.51321 1.2797 -1.51554 112 -4.50916 1.29387 -1.51554 111 -4.49042 1.35749 -1.51554 109 -4.48397 1.37863 -1.51554 111 -4.39227 -0.432948 -1.51503 110 -4.40668 -0.246331 -1.51502 122 -4.41001 -0.177085 -1.51502 114 -4.41103 -0.149372 -1.51502 125 -4.41339 -0.0384737 -1.51502 121 -4.4119 0.120966 -1.51502 132 -4.41082 0.155613 -1.51502 114 -4.41031 0.169468 -1.51502 122 -4.40465 0.280248 -1.51502 122 -4.39166 0.439164 -1.51501 113 -4.71619 0.897798 -1.51495 122 -4.47753 -0.686764 -1.51492 147 -4.6413 -0.668805 -1.5149 122 -4.64837 -0.617731 -1.5149 119 -4.66904 -0.43476 -1.5149 102 -4.67354 -0.383396 -1.5149 108 -4.67747 -0.331985 -1.5149 113 -4.67993 -0.295239 -1.5149 116 -4.68434 -0.214334 -1.5149 117 -4.68759 0.124407 -1.51489 112 -4.67367 0.381804 -1.51489 135 -4.6678 0.447836 -1.51489 135 -4.64153 0.667225 -1.51488 118 -4.59197 0.950141 -1.51488 98 -4.55466 1.11539 -1.51488 126 -4.54756 1.14398 -1.51488 103 -4.47343 1.4062 -1.51487 118 -4.7487 -0.692914 -1.51432 114 -4.39304 -0.405183 -1.51432 103 -4.40089 -0.308484 -1.51432 122 -4.79899 -0.00182401 -1.51431 100 -4.40446 0.252448 -1.51431 121 -4.35131 0.727413 -1.5143 114 -4.70117 0.964011 -1.5143 119 -4.66577 -0.449256 -1.51423 129 -4.66916 -0.412597 -1.51423 92 -4.67661 -0.317171 -1.51423 119 -4.68636 -0.0965199 -1.51422 105 -4.68697 -0.0597106 -1.51422 108 -4.68725 -0.0302598 -1.51422 102 -4.51356 -0.361559 -1.51422 170 -4.67815 0.293516 -1.51422 105 -4.52782 -0.0418751 -1.51422 161 -4.63755 0.681518 -1.51421 129 -4.60029 0.899221 -1.51421 126 -4.56481 1.0648 -1.51421 137 -4.45547 0.807301 -1.5142 151 -4.75615 -0.625458 -1.51366 112 -4.78361 0.359545 -1.51365 108 -4.78186 0.382083 -1.51365 126 -4.77306 0.479645 -1.51365 98 -4.75262 0.651738 -1.51364 116 -4.74736 0.689044 -1.51364 121 -4.73714 0.756088 -1.51364 124 -4.68844 1.01525 -1.51364 134 -4.64871 1.18394 -1.51363 100 -4.62356 1.27862 -1.51363 129 -4.59433 1.37998 -1.51363 107 -4.40131 -0.273805 -1.51361 121 -4.40923 0.0723642 -1.5136 122 -4.39652 0.342174 -1.5136 93 -4.67913 -0.243588 -1.51356 108 -4.68313 -0.147994 -1.51355 111 -4.68415 -0.111208 -1.51355 104 -4.6849 0.0727775 -1.51355 102 -4.6816 0.190488 -1.51355 99 -4.67996 0.22725 -1.51355 104 -4.67533 0.308077 -1.51355 108 -4.67277 0.344787 -1.51355 107 -4.63019 0.717621 -1.51354 139 -4.59125 0.934939 -1.51354 138 -4.53479 1.1787 -1.51353 99 -4.48009 -0.643979 -1.51353 161 -4.52156 1.22848 -1.51353 138 -4.50664 0.419677 -1.51352 171 -4.4725 0.694801 -1.51351 159 -4.46223 0.757958 -1.51351 169 -4.45982 0.771973 -1.51351 165 -4.75026 -0.65506 -1.51301 120 -4.72019 0.844918 -1.51298 120 -4.70489 0.926348 -1.51298 123 -4.66836 1.09569 -1.51298 119 -4.38802 -0.418648 -1.5129 111 -4.39118 -0.384172 -1.5129 111 -4.40493 -0.163054 -1.5129 114 -4.68023 -0.177354 -1.51288 110 -4.68189 -0.125882 -1.51288 110 -4.68299 -0.0743962 -1.51288 102 -4.68358 0.00652841 -1.51288 112 -4.6823 0.109516 -1.51288 107 -4.68152 0.138933 -1.51288 108 -4.67734 0.241845 -1.51288 105 -4.65376 0.527752 -1.51287 101 -4.47619 -0.657766 -1.51284 157 -4.47801 0.645325 -1.51282 160 -4.46844 0.708564 -1.51282 151 -4.75042 -0.639871 -1.51235 119 -4.78598 -0.265183 -1.51234 110 -4.78718 -0.242627 -1.51234 146 -4.79185 0.118667 -1.51234 102 -4.77222 0.449312 -1.51233 124 -4.73576 0.740638 -1.51233 123 -4.71565 0.859415 -1.51233 125 -4.59502 1.36448 -1.51232 137 -4.64915 -0.551111 -1.51222 135 -4.65333 -0.514581 -1.51222 129 -4.66889 -0.346162 -1.51221 105 -4.67417 -0.265442 -1.51221 118 -4.67746 -0.199338 -1.51221 108 -4.68165 0.0212236 -1.51221 114 -4.67841 0.175617 -1.51221 102 -4.67427 0.263766 -1.51221 101 -4.61339 0.796853 -1.5122 127 -4.47225 -0.671535 -1.51215 143 -4.51921 -0.16962 -1.51214 169 -4.48662 0.567632 -1.51213 153 -4.44737 0.820304 -1.51213 157 -4.43808 0.869156 -1.51213 133 -4.42535 0.931809 -1.51212 160 -4.74338 -0.676884 -1.51169 116 -4.75247 -0.60976 -1.51169 122 -4.75889 -0.557467 -1.51169 123 -4.76473 -0.505108 -1.51169 124 -4.79024 -0.10714 -1.51168 101 -4.69824 0.940404 -1.51167 121 -4.69071 0.977274 -1.51167 118 -4.68762 0.992005 -1.51167 115 -4.60377 1.32784 -1.51166 125 -4.66292 -0.397328 -1.51154 140 -4.67153 0.278327 -1.51153 153 -4.64748 0.549213 -1.51153 127 -4.38863 -0.370082 -1.51148 117 -4.48408 -0.572783 -1.51145 157 -4.47224 0.658865 -1.51144 155 -4.45903 0.743042 -1.51144 148 -4.75524 -0.572181 -1.51103 122 -4.78414 -0.227386 -1.51103 105 -4.78688 -0.159731 -1.51103 120 -4.77717 0.344013 -1.51102 140 -4.75386 0.583606 -1.51102 120 -4.7236 0.792061 -1.51101 112 -4.72109 0.806896 -1.51101 116 -4.67458 1.04309 -1.51101 124 -4.65052 1.14563 -1.51101 130 -4.65273 -0.484962 -1.51087 102 -4.67312 0.212164 -1.51086 137 -4.65137 0.497868 -1.51086 102 -4.47758 -0.60772 -1.51076 149 -4.48986 -0.509114 -1.51076 153 -4.51215 0.242064 -1.51075 170 -4.48552 0.546052 -1.51075 170 -4.4811 0.581263 -1.51075 158 -4.45949 0.728739 -1.51074 163 -4.43026 0.889343 -1.51074 157 -4.77762 -0.309881 -1.51037 138 -4.77857 -0.294869 -1.51037 106 -4.78715 -0.0694395 -1.51037 101 -4.78752 0.0358437 -1.51037 105 -4.78092 0.253819 -1.51036 105 -4.75811 0.531101 -1.51036 120 -4.75379 0.568455 -1.51036 125 -4.66157 -0.367747 -1.5102 102 -4.59201 0.88257 -1.51018 90 -4.47379 -0.621515 -1.51007 157 -4.47761 -0.593394 -1.51007 162 -4.49111 -0.480682 -1.51007 150 -4.51477 -0.133922 -1.51006 175 -4.47549 0.609166 -1.51005 158 -4.43792 0.840238 -1.51005 153 -4.43526 0.854176 -1.51005 129 -4.76576 -0.437152 -1.50972 102 -4.76777 -0.414688 -1.50972 117 -4.77315 -0.347247 -1.50971 132 -4.78546 -0.0543678 -1.50971 134 -4.7855 0.0508745 -1.50971 131 -4.78322 0.156093 -1.50971 104 -4.77446 0.328764 -1.50971 127 -4.75368 0.553309 -1.5097 124 -4.74825 0.598086 -1.5097 128 -4.7148 0.821097 -1.5097 117 -4.70549 0.872888 -1.5097 121 -4.66256 1.07894 -1.50969 119 -5.90619 1.28807 -1.50963 34 -4.66858 -0.228397 -1.50953 112 -4.48027 -0.557966 -1.50938 134 -4.49624 -0.409899 -1.50937 165 -4.50367 -0.318005 -1.50937 173 -4.51488 -0.00621996 -1.50937 175 -4.51488 0.00796532 -1.50937 170 -4.51479 0.0292398 -1.50937 170 -4.51467 0.0434247 -1.50937 170 -4.50679 0.270207 -1.50937 175 -4.49976 0.369244 -1.50936 165 -4.49672 0.404574 -1.50936 180 -4.49055 0.468102 -1.50936 164 -4.48906 0.482207 -1.50936 182 -4.48349 0.531536 -1.50936 172 -4.47552 0.594866 -1.50936 147 -4.47071 0.629999 -1.50936 166 -4.44504 0.791072 -1.50936 152 -4.75562 -0.519213 -1.50906 121 -4.78192 -0.136978 -1.50905 124 -4.78372 -0.0393075 -1.50905 99 -4.77792 0.23863 -1.50905 131 -4.75759 0.500819 -1.50905 121 -4.7435 0.62022 -1.50904 128 -4.74153 0.63512 -1.50904 121 -4.72168 0.768912 -1.50904 120 -4.69663 0.90947 -1.50904 122 -4.62837 1.20985 -1.50903 116 -4.62261 1.23165 -1.50903 120 -4.61478 1.26067 -1.50903 109 -4.48585 -0.494356 -1.50868 156 -4.49239 -0.430892 -1.50868 169 -4.50868 -0.197547 -1.50868 183 -4.51266 -0.0558288 -1.50868 175 -4.50977 0.170979 -1.50867 167 -4.50829 0.206393 -1.50867 168 -4.50761 0.220556 -1.50867 174 -4.50266 0.305479 -1.50867 160 -4.49222 0.43265 -1.50867 163 -4.75916 -0.466698 -1.5084 118 -4.7606 -0.451744 -1.5084 136 -4.77823 -0.189465 -1.5084 102 -4.76299 0.42587 -1.50839 120 -4.73453 0.672085 -1.50839 124 -4.73021 0.701819 -1.50838 116 -4.64674 1.12927 -1.50838 125 -4.60292 1.29637 -1.50837 136 -4.58839 1.3469 -1.50837 129 -4.47828 -0.543414 -1.50799 162 -4.50137 -0.296509 -1.50799 163 -4.5074 -0.183295 -1.50799 175 -4.50841 0.156757 -1.50798 160 -4.49878 0.333636 -1.50798 163 -4.48897 0.446584 -1.50798 166 -4.48379 0.495917 -1.50798 159 -4.88546 0.834626 -1.50781 87 -4.76639 -0.36178 -1.50774 126 -4.77193 -0.279373 -1.50774 140 -4.77922 -0.0918123 -1.50774 136 -4.77965 0.0658613 -1.50774 102 -4.77824 0.133424 -1.50774 131 -4.77704 0.170948 -1.50774 129 -4.77488 0.223462 -1.50774 124 -4.77213 0.275951 -1.50773 130 -4.7703 0.30593 -1.50773 126 -4.76369 0.395789 -1.50773 130 -4.75224 0.515376 -1.50773 126 -4.63772 1.15799 -1.50772 135 -4.47893 -0.522076 -1.5073 152 -4.50395 -0.218588 -1.50729 178 -4.50767 -0.119496 -1.50729 162 -4.50847 -0.0840893 -1.50729 182 -4.50857 0.0788143 -1.50729 175 -4.49793 0.319379 -1.50729 160 -4.47954 0.516836 -1.50728 154 -4.76275 -0.384076 -1.50709 123 -4.77352 -0.211791 -1.50708 138 -4.77503 -0.174293 -1.50708 118 -4.77818 -0.0167139 -1.50708 133 -4.77819 0.0133091 -1.50708 135 -4.76935 0.290838 -1.50708 127 -4.75574 0.462919 -1.50707 134 -4.61324 1.24472 -1.50706 136 -4.59519 1.30981 -1.50706 101 -4.484 -0.458505 -1.5066 161 -4.49003 -0.39507 -1.5066 173 -4.4941 -0.345676 -1.5066 161 -4.49517 -0.331556 -1.5066 188 -4.49854 -0.28211 -1.5066 177 -4.50615 -0.105279 -1.5066 168 -4.50733 -0.0203259 -1.5066 161 -4.50701 0.0575544 -1.5066 168 -4.50642 0.0929504 -1.5066 166 -4.49341 0.354557 -1.50659 168 -4.74031 -0.585424 -1.50643 120 -4.74646 -0.533268 -1.50643 122 -4.75204 -0.481046 -1.50643 127 -4.7648 -0.331543 -1.50643 101 -4.77178 0.208317 -1.50642 103 -4.75866 0.410448 -1.50642 126 -4.72124 0.723275 -1.50641 119 -4.64649 1.10607 -1.5064 125 -4.62482 1.19346 -1.5064 120 -4.92533 -0.499054 -1.50591 87 -4.48938 -0.380793 -1.50591 171 -4.49753 -0.267853 -1.50591 177 -4.49874 -0.246656 -1.50591 177 -4.50284 -0.154745 -1.50591 166 -4.50423 0.107074 -1.50591 167 -4.50141 0.191953 -1.5059 175 -4.49825 0.255569 -1.5059 157 -4.48922 0.382635 -1.5059 178 -4.75776 -0.3987 -1.50577 118 -4.77082 0.185764 -1.50576 132 -4.56606 1.39511 -1.50574 137 -4.85095 0.978501 -1.50526 87 -4.8399 1.03178 -1.50526 95 -4.78789 1.25111 -1.50525 98 -4.50308 -0.0698051 -1.50522 168 -4.49468 0.28372 -1.50521 152 -4.77186 0.0807902 -1.50511 126 -4.90549 -0.637628 -1.50464 79 -4.91996 -0.51415 -1.50464 92 -4.94062 0.246315 -1.50463 94 -4.88499 0.779315 -1.50463 87 -4.49575 -0.232307 -1.50452 184 -4.50012 0.121144 -1.50452 177 -4.4995 0.142349 -1.50452 165 -4.76954 0.103247 -1.50445 132 -4.92313 0.463121 -1.50399 94 -4.88554 0.763662 -1.50399 90 -4.87685 0.817334 -1.50399 71 -4.82962 1.06134 -1.50399 89 -4.47795 -0.443633 -1.50383 150 -4.76722 -0.121488 -1.5038 132 -4.64934 1.06059 -1.50378 123 -4.93906 -0.196312 -1.50337 106 -4.9285 0.377836 -1.50336 92 -4.85583 0.924012 -1.50335 87 -4.83108 1.04575 -1.50335 100 -4.80327 1.16682 -1.50335 92 -4.79959 1.18191 -1.50335 94 -4.90182 -0.621526 -1.50273 92 -4.93776 -0.180735 -1.50273 102 -4.93639 0.214992 -1.50273 95 -4.92834 0.35446 -1.50272 103 -4.9254 0.393156 -1.50272 95 -4.81397 1.1135 -1.50271 89 -4.79213 1.20404 -1.50271 100 -5.05195 -0.642781 -1.50239 93 -4.89281 -0.675138 -1.5021 84 -4.92188 -0.412988 -1.50209 84 -4.93603 0.176136 -1.50209 97 -4.92858 0.323354 -1.50209 92 -4.92226 0.408462 -1.50209 102 -4.90186 -0.590282 -1.50146 100 -4.90806 -0.53635 -1.50146 90 -4.93566 -0.126354 -1.50146 101 -4.90422 0.570351 -1.50145 100 -4.86011 0.869532 -1.50144 79 -4.78465 1.21813 -1.50144 95 -4.88691 -0.689997 -1.50082 73 -4.93388 0.121739 -1.50082 92 -4.90667 0.531601 -1.50081 90 -4.89866 0.600911 -1.50081 90 -4.88862 0.677784 -1.50081 86 -4.84547 0.937781 -1.50081 104 -4.8425 0.953 -1.50081 71 -4.92895 -0.211471 -1.50018 98 -4.93224 -0.110783 -1.50018 95 -4.93234 0.106186 -1.50018 85 -4.92186 0.338415 -1.50018 100 -4.90803 0.500558 -1.50018 92 -4.8939 0.623741 -1.50018 96 -4.81006 1.09665 -1.50017 95 -4.77713 1.23219 -1.50017 95 -4.7633 1.28465 -1.50017 100 -4.89433 -0.605011 -1.49955 84 -4.92019 -0.335152 -1.49955 98 -4.92339 0.284158 -1.49954 92 -4.92248 0.299623 -1.49954 100 -4.90844 0.477232 -1.49954 92 -4.90454 0.515768 -1.49954 90 -4.8748 0.746231 -1.49954 92 -4.85722 0.853245 -1.49954 97 -4.82802 1.00539 -1.49953 74 -4.81332 1.07355 -1.49953 90 -4.80123 1.12641 -1.49953 92 -4.74284 1.35133 -1.49953 98 -4.73642 1.37366 -1.49953 100 -5.03733 -0.681117 -1.4993 100 -4.9529 1.14343 -1.49927 95 -4.88551 -0.658547 -1.49892 99 -4.92168 -0.280933 -1.49891 94 -4.92719 -0.157162 -1.49891 100 -4.92966 -0.017804 -1.49891 87 -4.92757 0.14479 -1.49891 90 -4.89846 0.554049 -1.4989 90 -4.89488 0.584815 -1.4989 94 -4.87525 0.730623 -1.4989 92 -4.8471 0.898631 -1.4989 90 -4.73026 1.38799 -1.49889 100 -5.05183 -0.546161 -1.49868 129 -5.02064 0.782594 -1.49866 105 -4.90785 -0.442942 -1.49828 92 -4.92221 -0.234454 -1.49828 98 -4.92747 -0.056509 -1.49827 92 -4.84803 0.883048 -1.49826 90 -4.79218 1.14812 -1.49826 90 -5.00312 0.876769 -1.49804 99 -4.89504 -0.550553 -1.49764 90 -4.90454 -0.458191 -1.49764 74 -4.91875 -0.265285 -1.49764 100 -4.92579 -0.0332845 -1.49764 97 -4.92577 0.036353 -1.49764 100 -4.92189 0.198789 -1.49764 100 -4.90568 0.445837 -1.49763 96 -4.8844 0.63809 -1.49763 98 -4.87709 0.691757 -1.49763 99 -4.74576 1.31994 -1.49762 98 -5.06766 -0.315291 -1.49744 111 -5.01314 0.80566 -1.49742 91 -4.99847 0.892158 -1.49742 136 -4.96633 1.05653 -1.49742 135 -5.48829 -0.671693 -1.49712 91 -4.90984 -0.373249 -1.49701 81 -4.91669 0.268236 -1.497 94 -4.88049 0.653171 -1.49699 90 -4.87301 0.706795 -1.49699 79 -4.75816 1.26719 -1.49698 98 -4.73977 1.33433 -1.49698 97 -5.05108 -0.497935 -1.49682 93 -5.03306 0.655469 -1.49681 102 -4.99377 0.907525 -1.4968 101 -4.98349 0.962379 -1.4968 93 -4.90355 -0.427056 -1.49637 92 -4.90909 -0.357694 -1.49637 88 -4.91175 -0.319127 -1.49637 100 -4.91577 -0.24966 -1.49637 103 -4.92007 -0.141505 -1.49637 97 -4.92133 -0.0873976 -1.49637 95 -4.92158 -0.0719349 -1.49637 92 -4.92206 0.0208428 -1.49637 88 -4.85696 0.798201 -1.49636 102 -5.02575 -0.695586 -1.4962 126 -5.03983 -0.584905 -1.4962 121 -5.04596 -0.529454 -1.4962 94 -5.05891 -0.38659 -1.4962 98 -5.06894 0.218666 -1.49619 101 -5.06623 0.274388 -1.49619 101 -5.05645 0.417505 -1.49619 138 -5.04436 0.544442 -1.49619 108 -5.02587 0.694728 -1.49619 101 -5.02141 0.726294 -1.49619 105 -5.00422 0.836536 -1.49619 101 -4.98757 0.930709 -1.49618 127 -4.98462 0.946373 -1.49618 103 -4.97074 1.01675 -1.49618 104 -4.91486 0.229415 -1.49573 94 -5.06701 -0.219441 -1.49558 137 -5.05584 0.401476 -1.49557 102 -5.03804 0.583834 -1.49557 132 -4.99969 0.851942 -1.49557 131 -4.94532 1.12539 -1.49556 108 -4.89106 1.34174 -1.49556 113 -4.88682 1.3571 -1.49556 114 -5.48668 -0.636562 -1.49541 90 -5.49151 -0.593449 -1.49541 92 -4.89478 -0.480597 -1.4951 102 -4.90894 -0.303482 -1.4951 95 -4.91804 0.0517068 -1.49509 79 -4.90018 0.422024 -1.49509 92 -4.74462 1.29553 -1.49508 97 -4.71499 1.39955 -1.49507 98 -5.03131 -0.623982 -1.49496 121 -5.05906 -0.330674 -1.49496 111 -5.06959 -0.0521778 -1.49496 103 -5.06973 0.0354231 -1.49496 119 -5.06904 0.0911638 -1.49496 109 -5.05911 0.329849 -1.49496 102 -5.05064 0.441016 -1.49495 105 -5.04548 0.496524 -1.49495 103 -5.03796 0.567802 -1.49495 102 -4.96379 1.0316 -1.49495 98 -4.95215 1.08612 -1.49494 100 -4.92329 1.21022 -1.49494 109 -4.87637 1.38727 -1.49494 110 -5.38195 1.23384 -1.49481 101 -5.06133 -0.259016 -1.49434 106 -5.06448 -0.187439 -1.49434 102 -5.0658 -0.147658 -1.49434 113 -5.06738 -0.0760285 -1.49434 103 -5.06137 0.258208 -1.49434 112 -5.05328 0.385321 -1.49434 107 -5.04733 0.456719 -1.49434 102 -5.04587 0.472575 -1.49434 129 -5.04037 0.528028 -1.49433 129 -5.02952 0.622937 -1.49433 97 -5.01228 0.749133 -1.49433 102 -5.0099 0.764877 -1.49433 128 -4.92895 1.17883 -1.49432 100 -4.90784 1.26382 -1.49432 110 -4.91452 -0.00238945 -1.49382 97 -4.91369 0.0902428 -1.49382 77 -4.91193 0.159698 -1.49382 90 -4.81445 0.986708 -1.49381 102 -5.02352 -0.655071 -1.49373 126 -5.05009 -0.40184 -1.49373 105 -5.06605 -0.00437381 -1.49372 104 -5.06601 0.0195005 -1.49372 105 -5.06392 0.146804 -1.49372 100 -5.05775 0.289906 -1.49372 134 -5.01613 0.709487 -1.49371 124 -4.96956 0.984053 -1.49371 120 -4.96644 0.999661 -1.49371 132 -4.89593 1.30185 -1.4937 109 -5.47894 -0.653141 -1.49369 120 -5.03814 -0.512589 -1.49311 130 -5.04201 -0.473004 -1.49311 118 -5.04488 -0.441314 -1.49311 98 -5.05669 -0.27469 -1.49311 106 -5.06007 -0.203178 -1.49311 111 -5.06402 -0.0361794 -1.4931 102 -5.06389 0.0513205 -1.4931 108 -5.05443 0.31363 -1.4931 106 -5.05125 0.361251 -1.4931 104 -5.02862 0.598798 -1.4931 105 -5.37246 1.24941 -1.4931 102 -5.02377 0.638274 -1.4931 134 -5.36851 1.26628 -1.4931 111 -5.01966 0.669828 -1.49309 133 -4.99743 0.81932 -1.49309 131 -4.92892 1.16249 -1.49309 133 -4.89815 1.28599 -1.49309 109 -4.88997 1.31674 -1.49308 112 -4.8752 1.37042 -1.49308 115 -5.27569 0.76418 -1.49302 110 -5.47093 -0.687093 -1.49255 121 -5.38771 1.17292 -1.49252 94 -5.02664 -0.599327 -1.49249 114 -5.04158 -0.45698 -1.49249 128 -5.04501 -0.41737 -1.49249 130 -5.05391 -0.290455 -1.49249 104 -5.0568 -0.234867 -1.49249 96 -5.0611 -0.107716 -1.49249 111 -5.0582 0.202343 -1.49248 106 -5.05046 0.345261 -1.49248 137 -4.93955 1.10781 -1.49247 129 -5.33129 1.3998 -1.49195 107 -5.02842 -0.567509 -1.49187 122 -5.05922 0.106936 -1.49186 102 -5.03443 0.511459 -1.49186 100 -4.91782 1.19256 -1.49185 137 -4.9083 1.23114 -1.49185 101 -5.19758 1.16676 -1.49183 104 -5.47628 -0.609278 -1.49141 125 -5.3765 1.20589 -1.49138 103 -5.35282 1.30702 -1.49138 103 -5.13423 -0.643106 -1.49134 77 -4.89162 -0.387415 -1.49128 105 -5.28964 -0.612767 -1.49127 112 -5.04493 -0.369507 -1.49125 142 -5.0584 -0.0202188 -1.49125 134 -5.0553 0.17839 -1.49124 103 -5.21339 1.0846 -1.49124 115 -5.18449 1.21527 -1.49124 102 -5.12496 -0.699271 -1.49073 71 -5.28069 -0.67064 -1.49068 98 -5.29149 -0.579302 -1.49068 101 -4.87255 -0.563642 -1.49065 76 -4.90459 0.0669072 -1.49064 104 -5.04472 -0.345589 -1.49063 105 -5.05483 -0.131386 -1.49063 104 -5.05571 -0.0916813 -1.49063 105 -5.05113 0.233886 -1.49063 138 -4.94251 1.06781 -1.49061 103 -5.37652 1.18815 -1.49024 130 -5.06691 1.02998 -1.49011 71 -4.99853 1.32256 -1.4901 94 -5.27092 0.729752 -1.49007 103 -5.26257 0.787663 -1.49007 107 -5.26007 0.804192 -1.49007 111 -5.25752 0.820714 -1.49007 110 -5.16105 1.29564 -1.49006 117 -5.15281 1.32805 -1.49006 121 -5.05408 0.0750916 -1.49001 107 -5.05295 0.130659 -1.49001 137 -5.05203 0.162406 -1.49001 129 -4.89887 1.24518 -1.48999 135 -5.33893 1.3392 -1.48966 112 -5.32825 1.38109 -1.48966 115 -5.281 -0.636974 -1.4895 104 -5.28584 -0.595476 -1.4895 101 -5.2724 0.704662 -1.48948 112 -5.2667 0.746048 -1.48948 109 -5.1991 1.12433 -1.48947 105 -5.34125 1.32195 -1.48909 108 -5.20928 1.06672 -1.48888 99 -5.20074 1.1076 -1.48888 111 -5.18082 1.19729 -1.48888 116 -5.16735 1.25418 -1.48888 112 -5.04821 -0.162931 -1.48877 142 -5.32885 1.36337 -1.48852 117 -5.28656 -0.553526 -1.48831 111 -5.27603 0.646199 -1.4883 115 -5.24925 0.836352 -1.4883 99 -5.24252 0.877554 -1.4883 108 -5.21073 1.04998 -1.48829 103 -5.13235 1.38316 -1.48829 123 -5.26908 -0.685949 -1.48773 141 -5.24336 0.86078 -1.48771 103 -5.23785 0.893708 -1.48771 103 -5.14125 -0.472436 -1.4877 82 -5.18994 1.13945 -1.4877 102 -5.15967 1.26952 -1.4877 128 -5.07794 0.932879 -1.48769 75 -5.05289 1.06019 -1.48768 79 -5.64067 -0.69479 -1.48748 109 -5.26914 0.670592 -1.48712 104 -5.17896 1.17976 -1.48711 112 -5.16568 1.23664 -1.48711 109 -5.14768 1.30954 -1.48711 119 -5.12429 1.39829 -1.48711 131 -5.11578 -0.681714 -1.4871 77 -5.14552 -0.399568 -1.4871 84 -5.04598 1.08358 -1.48708 77 -5.64404 -0.650238 -1.48693 102 -5.34402 1.27814 -1.4868 103 -5.2695 -0.65234 -1.48655 109 -5.13539 1.34945 -1.48652 122 -5.13195 -0.528565 -1.48649 76 -5.13891 -0.455962 -1.48649 85 -5.10097 0.772325 -1.48648 75 -5.92381 -0.657203 -1.48634 77 -5.37258 1.14303 -1.48624 140 -5.12394 -0.584755 -1.48589 75 -5.01345 1.20913 -1.48586 79 -4.98148 1.33474 -1.48586 83 -5.64224 -0.632058 -1.48582 141 -5.6442 -0.61433 -1.48582 105 -5.54084 1.23835 -1.48579 114 -5.26855 0.628536 -1.48535 118 -5.26132 0.686428 -1.48535 103 -5.12742 1.36461 -1.48534 129 -5.12018 -0.600636 -1.48528 70 -5.14822 -0.269865 -1.48528 87 -5.92201 -0.638195 -1.48528 77 -5.63519 -0.676114 -1.48526 134 -5.03697 1.09818 -1.48526 77 -5.54282 1.22054 -1.48524 114 -5.52501 1.29877 -1.48524 122 -5.5104 1.35944 -1.48523 122 -5.45903 -0.572757 -1.48511 106 -5.53119 1.26361 -1.48468 114 -5.11137 -0.656665 -1.48467 78 -5.13462 -0.439358 -1.48467 85 -5.14032 -0.366728 -1.48467 87 -5.13001 0.490286 -1.48466 75 -5.11105 0.659211 -1.48466 73 -5.0989 0.747422 -1.48466 72 -5.04687 1.04234 -1.48465 79 -4.99217 1.27893 -1.48465 85 -4.95845 1.40397 -1.48465 93 -5.9119 -0.693546 -1.48422 74 -5.14114 -0.326232 -1.48406 86 -5.14354 -0.285844 -1.48406 89 -5.08849 0.803134 -1.48405 64 -5.08465 0.827105 -1.48405 72 -5.02977 1.11316 -1.48405 81 -4.99432 1.26276 -1.48404 83 -5.54099 1.20192 -1.48357 152 -5.49833 1.38401 -1.48357 126 -5.12568 -0.49544 -1.48346 74 -5.1464 -0.180701 -1.48346 83 -5.14939 -0.0432251 -1.48346 85 -5.14956 -0.0108704 -1.48346 81 -5.14957 0.00530656 -1.48346 89 -5.1492 0.0619294 -1.48345 91 -5.11229 0.618572 -1.48345 79 -5.10303 0.690782 -1.48345 69 -5.02262 1.13642 -1.48344 76 -5.01538 1.16796 -1.48344 77 -5.00982 1.19158 -1.48344 83 -4.99836 1.23874 -1.48344 81 -4.96992 1.34835 -1.48344 83 -5.7828 1.39462 -1.48313 76 -5.52157 1.27971 -1.48302 118 -5.19872 1.02218 -1.48298 101 -5.11803 -0.551575 -1.48285 72 -5.14256 -0.229121 -1.48285 79 -5.1439 -0.196804 -1.48285 79 -5.14576 -0.140234 -1.48285 81 -5.14617 -0.124067 -1.48285 81 -5.14746 0.0457255 -1.48285 89 -5.14695 0.086152 -1.48285 85 -5.14569 0.14274 -1.48285 79 -5.10742 0.642409 -1.48284 79 -5.07287 0.874322 -1.48284 75 -5.05242 0.985662 -1.48284 75 -5.00038 1.22257 -1.48283 81 -4.9826 1.29314 -1.48283 83 -4.95734 1.38682 -1.48283 91 -5.50948 1.32259 -1.48246 121 -5.13438 -0.342031 -1.48225 79 -5.14569 -0.0270465 -1.48224 81 -5.14474 0.102273 -1.48224 79 -5.90638 -0.67413 -1.4821 76 -5.78556 1.36645 -1.48207 91 -5.48837 1.39988 -1.48191 130 -5.11248 -0.567251 -1.48164 82 -5.12713 -0.414437 -1.48164 83 -5.13945 -0.212826 -1.48164 89 -5.14289 -0.0997616 -1.48164 83 -5.14317 -0.0836028 -1.48164 85 -5.1414 0.158767 -1.48164 72 -5.13579 0.287922 -1.48163 83 -5.12693 0.416896 -1.48163 77 -5.1256 0.432999 -1.48163 73 -5.09406 0.713999 -1.48163 76 -5.50156 1.339 -1.48135 126 -5.2572 0.610504 -1.48122 107 -5.11651 -0.510823 -1.48104 86 -5.13262 -0.309555 -1.48103 85 -5.13571 -0.2531 -1.48103 84 -5.14186 0.029492 -1.48103 86 -5.13599 0.247476 -1.48103 81 -5.13198 0.320058 -1.48103 84 -5.12815 0.376467 -1.48103 79 -5.11294 0.545393 -1.48102 79 -5.1112 0.561452 -1.48102 77 -5.07263 0.841467 -1.48102 83 -5.06023 0.913094 -1.48102 71 -5.04988 0.968677 -1.48102 69 -5.78607 1.34738 -1.48102 68 -5.79254 1.31056 -1.48049 79 -5.13767 -0.156206 -1.48043 83 -5.1396 -0.0674148 -1.48043 81 -5.11825 0.472872 -1.48042 69 -5.11274 0.529121 -1.48042 67 -5.10475 0.601345 -1.48042 79 -5.06809 0.857072 -1.48041 68 -5.12393 -0.381818 -1.47982 83 -5.13678 0.118222 -1.47982 83 -5.12661 0.343964 -1.47982 83 -4.9525 1.36866 -1.4798 89 -5.78464 1.32787 -1.47943 95 -5.09836 -0.622544 -1.47922 79 -5.12062 0.400153 -1.47921 81 -5.12983 0.214844 -1.4786 81 -5.18689 1.00301 -1.47826 128 -5.09904 0.5844 -1.47799 77 -5.04355 0.950995 -1.47799 83 -5.78924 1.28113 -1.47784 86 -5.52405 1.18018 -1.47748 163 -5.08629 0.672154 -1.47739 83 -5.0786 0.728039 -1.47739 87 -5.03092 1.00601 -1.47738 87 -5.12507 0.190425 -1.47679 73 -5.12342 0.230671 -1.47679 87 -5.12145 0.270903 -1.47679 79 -5.11965 0.303076 -1.47679 81 -5.116 0.359351 -1.47678 79 -5.10642 0.455537 -1.47618 84 -5.1825 0.98532 -1.4759 112 -4.9949 1.14653 -1.47556 86 -5.06087 0.782333 -1.47435 84 -5.04245 0.893429 -1.47435 83 -5.09432 0.502856 -1.47375 84 -5.23439 0.591319 -1.47355 103 -5.18461 0.910032 -1.47236 89 -5.17429 0.966984 -1.47236 109 -5.1066 0.17358 -1.47073 80 -6.00632 -0.67408 -1.46976 99 -6.00943 -0.645769 -1.46976 91 -5.24321 -0.341275 -1.46943 126 -5.16561 0.940259 -1.46823 107 -6.1824 -0.695419 -1.46746 89 -6.18665 -0.65656 -1.46746 94 -5.16478 0.923373 -1.46705 97 -5.87695 1.36081 -1.46663 113 -5.98883 -0.691108 -1.46562 119 -5.88161 1.32303 -1.4656 118 -6.40561 -0.702368 -1.46534 77 -5.88804 1.27599 -1.46456 107 -5.87177 1.34024 -1.46404 106 -6.16916 -0.674373 -1.46344 119 -5.87834 1.29326 -1.46301 148 -5.85292 1.40383 -1.463 112 -6.05756 1.3309 -1.46241 26 -5.85353 1.38456 -1.46197 113 -6.04342 1.36763 -1.46089 123 -6.03314 1.3952 -1.45989 121 -6.26533 1.39514 -1.45899 147 -6.26638 1.35414 -1.45705 97 -6.2621 1.37381 -1.45705 175 -6.03259 1.3452 -1.45687 166 -5.182 0.560955 -1.45643 108 -6.61767 -0.700532 -1.4486 47 -5.09635 -0.516482 -1.4287 77 -5.1127 -0.316001 -1.4287 58 -5.10299 -0.347561 -1.42634 106 -5.07324 -0.497916 -1.42103 89 -5.07462 -0.369524 -1.41808 99 -5.06222 -0.472691 -1.4169 87 -5.06177 -0.456604 -1.41631 102 -5.06454 -0.424791 -1.41631 105 -5.05748 -0.440172 -1.41454 102 -5.05697 -0.400118 -1.41336 132 -5.0563 -0.384074 -1.41277 97 -5.09318 1.06548 -1.39988 98 -4.99929 0.526223 -1.39918 100 -4.98045 0.398145 -1.38974 65 -5.06761 1.01847 -1.38959 77 -5.06088 1.04195 -1.38902 87 -4.95932 -0.211975 -1.37971 79 -4.92964 0.409933 -1.3744 131 -5.00317 0.988827 -1.36901 127 -4.89631 0.500381 -1.36672 121 -5.0572 -0.50845 -1.36388 96 -4.87388 0.475025 -1.35905 151 -4.87486 0.444228 -1.35846 126 -5.03015 -0.489921 -1.3553 75 -4.86547 0.420325 -1.35492 113 -4.84679 0.457171 -1.3502 154 -4.78345 0.368313 -1.32836 163 -4.77941 0.345386 -1.32659 183 -4.783 -0.173407 -1.32483 183 -4.77479 -0.18809 -1.32247 197 -4.76129 -0.269967 -1.31951 76 -4.74805 0.328305 -1.31656 203 -4.73952 0.31281 -1.31361 212 -4.73732 -0.253544 -1.31184 86 -4.73882 -0.223775 -1.31184 77 -4.73522 0.290152 -1.31184 228 -5.29353 -0.548028 -1.31095 46 -4.73956 -0.0821777 -1.31066 227 -4.73602 -0.1491 -1.31007 204 -4.73546 -0.096967 -1.30948 224 -4.73407 -0.0671733 -1.30889 227 -4.72664 -0.238021 -1.3083 85 -4.80516 0.93295 -1.30782 96 -4.725 -0.133834 -1.30653 214 -4.7254 -0.118988 -1.30653 219 -4.70897 0.207119 -1.30239 233 -5.01005 -0.52644 -1.30121 102 -4.70505 0.0886151 -1.30003 236 -4.70203 -0.0148351 -1.29885 239 -4.7001 0.0220964 -1.29826 239 -4.69519 0.103238 -1.29708 237 -4.69111 0.221197 -1.29708 237 -4.69413 -0.0516377 -1.29649 240 -4.69441 -2.05028e-05 -1.29649 240 -4.69203 0.0663274 -1.2959 240 -4.68859 -0.0294479 -1.29472 239 -4.68458 0.0515435 -1.29354 240 -4.67956 0.11769 -1.29236 122 -4.67898 0.0368138 -1.29177 241 -4.66741 0.27166 -1.29059 243 -4.74976 0.906399 -1.29009 96 -4.66367 0.234737 -1.28882 242 -4.80259 -0.453719 -1.28668 70 -4.65985 0.139275 -1.28646 89 -4.65888 0.168551 -1.28646 99 -4.65613 0.190436 -1.28587 217 -4.65557 0.15381 -1.28528 105 -4.73516 0.880401 -1.28437 75 -4.63388 0.255296 -1.27997 255 -4.72552 0.847842 -1.2798 94 -4.70777 0.859847 -1.27522 102 -4.76266 -0.427541 -1.2741 84 -4.70683 0.821487 -1.27293 85 -4.7487 -0.411338 -1.26952 84 -4.75119 -0.381492 -1.26952 79 -4.6924 0.803691 -1.26779 65 -4.74232 -0.39582 -1.26723 110 -4.69101 0.765536 -1.2655 62 -5.0286 1.07617 -1.26165 28 -4.72617 -0.357222 -1.26151 77 -4.72641 -0.327398 -1.26094 79 -4.72344 -0.342118 -1.26037 72 -4.68053 0.69593 -1.25921 64 -4.66658 0.784027 -1.25921 70 -4.78769 1.00286 -1.25905 76 -4.67341 0.717376 -1.25807 69 -4.66881 0.746725 -1.25807 59 -4.71642 -0.304445 -1.25751 76 -4.66168 0.730519 -1.25521 57 -4.67272 0.642251 -1.25464 168 -4.66753 0.678931 -1.25464 119 -4.66523 0.626242 -1.25178 154 -4.66016 0.662862 -1.25178 188 -4.69527 -0.273594 -1.25065 87 -4.69247 -0.288236 -1.25008 77 -4.6624 0.588579 -1.24949 132 -4.65768 0.610284 -1.24892 101 -4.75502 0.980628 -1.24852 74 -4.67888 -0.257987 -1.2455 77 -4.67622 -0.235764 -1.24436 86 -4.64712 0.571727 -1.24435 146 -4.67119 -0.220833 -1.24264 106 -4.64491 0.54182 -1.24263 92 -4.73616 0.938168 -1.24076 81 -4.73169 0.960474 -1.24076 95 -4.64107 0.489656 -1.23977 76 -4.66037 -0.205713 -1.23921 91 -4.66235 -0.154459 -1.23921 91 -4.63178 0.554977 -1.2392 101 -4.63219 0.518135 -1.23806 81 -4.65554 -0.183556 -1.23749 89 -5.02837 -0.505931 -1.23729 27 -4.65418 -0.168869 -1.23692 47 -4.72587 0.920781 -1.23688 89 -4.62808 0.502928 -1.23634 79 -4.65153 -0.132224 -1.23578 52 -4.65192 -0.11761 -1.23578 64 -4.62808 0.466158 -1.2352 72 -4.7174 0.903823 -1.23355 83 -4.64527 -0.0663859 -1.23349 77 -4.62519 0.436499 -1.23348 69 -4.7789 -0.46301 -1.23302 72 -4.64299 -0.0882507 -1.23292 65 -4.62189 0.450829 -1.23291 66 -4.64188 -0.0153139 -1.23235 66 -4.63779 -0.0517492 -1.2312 69 -4.63794 0.0356746 -1.2312 104 -4.61384 0.413425 -1.22948 69 -4.70648 0.878843 -1.22912 80 -4.63026 -0.0371613 -1.22891 69 -4.62687 0.180996 -1.22891 80 -4.62847 0.0137363 -1.22834 82 -4.61253 0.384087 -1.22834 80 -4.6113 0.398576 -1.22834 76 -4.61159 0.34754 -1.22719 85 -4.61695 0.231433 -1.22662 88 -4.61177 0.318415 -1.22662 79 -4.60799 0.369103 -1.22662 92 -4.61969 -0.102455 -1.22606 72 -4.61574 0.216826 -1.22605 83 -4.61429 0.245823 -1.22605 90 -4.61221 0.282057 -1.22605 92 -4.60883 0.332752 -1.22605 75 -4.61891 -0.000856978 -1.22548 69 -4.61593 0.165982 -1.22548 89 -4.60939 0.296412 -1.22548 85 -4.6159 0.100659 -1.22491 93 -4.61556 0.11516 -1.22491 97 -4.61481 0.049867 -1.22434 96 -4.61463 0.0643649 -1.22434 85 -4.61249 0.0788187 -1.22377 86 -4.61068 0.151258 -1.22377 105 -4.74591 -0.444579 -1.22304 93 -4.68841 0.860351 -1.22302 90 -4.60751 0.129401 -1.22262 99 -4.603 0.201662 -1.22205 90 -4.59969 0.266713 -1.22205 93 -4.76281 0.0190048 -1.22192 116 -4.89031 1.02174 -1.22138 27 -4.7503 0.317911 -1.22137 104 -4.74533 0.385033 -1.22136 84 -4.68351 0.844295 -1.2208 74 -4.74544 0.332585 -1.22026 86 -4.88783 1.00518 -1.21979 27 -4.75191 0.175835 -1.2197 85 -4.73835 0.399487 -1.2197 86 -4.74054 0.347232 -1.21915 84 -4.74585 0.22791 -1.2186 84 -4.73751 0.361987 -1.21859 87 -4.74365 0.190496 -1.21749 104 -4.74537 0.0413935 -1.21693 79 -4.74431 0.108473 -1.21693 87 -4.67673 0.805275 -1.21692 68 -4.7433 0.0562894 -1.21638 88 -4.74091 0.160578 -1.21638 99 -4.98437 1.06787 -1.21594 39 -4.72308 -0.419862 -1.21583 56 -4.72438 -0.405021 -1.21583 65 -4.74118 0.0711725 -1.21583 91 -4.74079 0.0935138 -1.21583 89 -4.73432 0.264693 -1.21582 96 -4.73979 0.00414893 -1.21527 86 -4.73755 0.145586 -1.21527 97 -4.73502 0.212546 -1.21527 90 -4.73167 0.242205 -1.21471 101 -4.66531 0.826007 -1.2147 73 -4.71262 0.44967 -1.2136 83 -4.71409 0.412486 -1.21305 92 -4.71721 0.293563 -1.21139 84 -4.66272 0.772837 -1.21138 67 -4.88394 0.861077 -1.21131 26 -4.86076 0.98354 -1.21131 26 -4.71018 -0.366468 -1.21084 67 -4.70444 0.434032 -1.21083 87 -4.70162 0.463583 -1.21083 93 -4.87931 0.876067 -1.21078 26 -4.65648 0.786861 -1.21027 74 -4.9554 0.000750765 -1.21026 26 -4.72056 -0.0105929 -1.20973 97 -4.92652 -0.457179 -1.20815 26 -4.65535 0.73417 -1.2075 65 -4.68408 0.484237 -1.20639 97 -4.91471 -0.479502 -1.2055 26 -4.69323 -0.33539 -1.2053 91 -4.6647 0.615983 -1.20528 92 -4.68734 -0.386805 -1.20474 67 -4.66084 0.630388 -1.20473 93 -4.65363 0.681598 -1.20473 81 -4.69784 0.122432 -1.20363 80 -4.66975 0.527336 -1.20362 87 -4.67106 0.497792 -1.20307 95 -4.68468 -0.319937 -1.20253 81 -4.68705 -0.283133 -1.20253 74 -4.68741 0.277098 -1.20252 78 -4.66757 0.512264 -1.20251 89 -4.65708 0.60015 -1.20251 91 -4.65974 0.563335 -1.20196 87 -4.6823 -0.297592 -1.20142 77 -4.65958 0.54848 -1.2014 85 -4.63815 0.694296 -1.20085 65 -4.67491 -0.348751 -1.20031 81 -4.62834 0.744958 -1.20029 68 -4.64841 0.576841 -1.19919 88 -4.63877 0.649785 -1.19919 91 -4.6348 0.664093 -1.19863 108 -4.83105 0.882829 -1.19807 124 -4.62342 0.714447 -1.19752 73 -4.88758 -0.438295 -1.19702 26 -4.67439 -0.0249197 -1.19642 113 -4.67191 -0.0762743 -1.19587 92 -4.6723 -0.0469179 -1.19587 105 -4.66573 -0.0981347 -1.19421 109 -4.65964 -0.112621 -1.19254 109 -4.65147 -0.266119 -1.19199 66 -4.65868 -0.0613432 -1.19199 89 -4.65076 -0.244084 -1.19144 60 -4.65542 -0.127133 -1.19144 80 -4.64644 -0.21456 -1.18977 50 -4.64325 -0.148636 -1.18811 68 -4.85433 -0.397102 -1.18695 26 -4.85946 -0.328438 -1.18695 26 -4.80058 0.822604 -1.18694 26 -4.7784 0.942982 -1.18694 28 -4.85594 -0.351204 -1.18642 26 -4.63231 -0.228419 -1.18589 68 -4.63454 -0.177471 -1.18589 62 -4.81402 0.70084 -1.18535 26 -4.84472 -0.41935 -1.18483 26 -4.84209 -0.380863 -1.18324 26 -4.81069 0.669475 -1.18323 26 -4.77382 0.895347 -1.18323 163 -4.79923 0.721735 -1.18217 26 -4.61861 -0.191307 -1.18146 29 -4.80093 0.683456 -1.18111 25 -4.61588 -0.162127 -1.18035 99 -4.80434 0.630105 -1.18005 25 -4.80233 0.645195 -1.18005 25 -4.78742 0.735294 -1.17952 25 -4.78508 0.75033 -1.17952 25 -4.77654 0.802899 -1.17952 25 -4.82788 -0.364571 -1.179 25 -4.76938 0.763156 -1.17581 25 -4.8281 -0.0151059 -1.17529 25 -4.76383 0.785298 -1.17528 25 -4.82189 -0.151492 -1.17423 25 -4.82417 -0.0302694 -1.17423 25 -4.79344 0.544493 -1.17423 95 -4.78979 0.559315 -1.1737 78 -4.7861 0.574121 -1.17317 92 -4.81748 -0.098377 -1.17264 25 -4.81626 -0.0529592 -1.17211 25 -4.90716 -0.506928 -1.17193 40 -4.81029 -0.0680405 -1.17052 25 -4.80692 -0.135991 -1.16999 25 -4.80732 -0.120888 -1.16999 25 -4.77187 0.595174 -1.16999 57 -4.79789 -0.294345 -1.16947 84 -4.79501 -0.309303 -1.16894 43 -4.80041 -0.0830366 -1.16787 25 -4.79313 -0.241226 -1.16735 25 -4.78574 -0.271042 -1.16576 52 -4.78038 -0.225605 -1.16364 25 -4.78064 -0.172969 -1.16311 25 -4.77622 -0.187856 -1.16205 25 -4.73748 0.605826 -1.16098 29 -4.77205 0.0372421 -1.15993 95 -4.77022 0.0222291 -1.1594 61 -4.76404 -0.202433 -1.15887 25 -4.73847 0.51533 -1.15833 63 -4.73841 -0.253693 -1.15251 27 -4.74361 1.00201 -1.14912 51 -4.73881 0.977741 -1.14653 115 -4.74929 0.894676 -1.14498 141 -4.74965 0.871609 -1.14394 158 -4.68448 0.494265 -1.14296 80 -4.72953 0.852694 -1.13772 146 -4.65917 0.476649 -1.13555 105 -4.65369 0.453896 -1.13343 107 -4.65772 0.387892 -1.1329 90 -4.69069 0.952746 -1.13254 70 -4.64934 0.438699 -1.13184 111 -4.70934 0.833913 -1.13151 105 -4.64877 0.423905 -1.13131 107 -4.64816 0.409119 -1.13078 113 -4.64853 0.357667 -1.12972 112 -4.64739 0.37227 -1.12972 108 -4.74736 -0.47449 -1.12842 38 -4.65621 0.0503359 -1.12813 97 -4.64011 0.283708 -1.12601 97 -4.63671 0.334711 -1.12601 116 -4.64384 0.166931 -1.12548 102 -4.64301 0.188814 -1.12548 134 -4.64239 0.203398 -1.12548 117 -4.64173 0.217982 -1.12548 113 -4.66711 0.932847 -1.12529 59 -4.64381 0.101213 -1.12495 130 -4.64154 0.115742 -1.12442 122 -4.63004 0.319568 -1.12389 116 -4.63217 0.253966 -1.12336 130 -4.63665 0.07187 -1.12283 154 -4.62943 0.268396 -1.12283 134 -4.66196 0.909048 -1.1227 88 -4.6291 0.239192 -1.1223 109 -4.63254 0.0863439 -1.12177 148 -4.63131 0.137275 -1.12177 125 -4.63086 0.151824 -1.12177 118 -4.62333 0.304471 -1.12177 116 -4.72192 -0.456823 -1.12117 64 -4.68853 0.656827 -1.11856 129 -4.70864 -0.433067 -1.11702 64 -4.76321 1.02514 -1.11661 33 -4.75664 1.00023 -1.11359 42 -4.65179 0.681691 -1.10976 80 -4.65034 0.636813 -1.10769 144 -4.67344 -0.414823 -1.10718 88 -4.63483 0.716498 -1.10665 60 -4.63323 0.701377 -1.10561 83 -4.67372 -0.3114 -1.10511 98 -4.6651 -0.399263 -1.10459 65 -4.63477 0.664439 -1.10458 59 -4.61097 0.802127 -1.10406 55 -4.66694 -0.325645 -1.10355 83 -4.79252 -0.476474 -1.10204 36 -4.60517 0.778832 -1.10147 73 -4.65573 -0.346864 -1.10096 76 -4.60187 0.763444 -1.09991 62 -4.64576 -0.375444 -1.09889 57 -4.64499 -0.360687 -1.09837 75 -4.69917 0.972401 -1.09749 58 -4.64577 -0.294721 -1.09734 89 -4.59089 0.746887 -1.09629 86 -4.60538 0.608831 -1.09474 86 -4.58863 0.724372 -1.09473 60 -4.68894 0.954857 -1.09396 53 -4.60604 0.557493 -1.09318 79 -4.5996 0.593414 -1.09267 91 -4.62933 -0.155049 -1.09112 102 -4.62786 -0.140434 -1.0906 91 -4.60685 0.462414 -1.0906 255 -4.60841 0.426051 -1.09008 255 -4.60705 0.440527 -1.09008 255 -4.58994 0.577578 -1.08956 77 -4.62211 -0.038529 -1.08853 98 -4.61697 -0.176355 -1.08801 98 -4.58857 0.540865 -1.088 73 -4.6178 -0.0747453 -1.08749 93 -4.60812 -0.277583 -1.08698 53 -4.66684 0.927324 -1.08692 48 -4.60745 -0.255747 -1.08646 64 -4.61284 -0.125389 -1.08646 91 -4.61128 -0.11084 -1.08594 95 -4.61222 -0.0601303 -1.08594 101 -4.60982 -0.0890596 -1.08542 94 -4.61062 -0.0238835 -1.08542 103 -4.61049 0.0412996 -1.08542 132 -4.60599 0.207805 -1.08542 255 -4.58307 0.50381 -1.08541 90 -4.66498 0.896481 -1.0849 49 -4.72652 -0.45529 -1.08442 15 -4.59859 -0.240712 -1.08387 73 -4.60487 -0.00935392 -1.08387 100 -4.60487 0.012347 -1.08387 100 -4.6048 0.0268127 -1.08387 100 -4.59841 -0.204491 -1.08335 92 -4.59517 -0.189861 -1.08232 64 -4.56336 0.523517 -1.08075 90 -4.7125 -0.439088 -1.08039 59 -4.71452 -0.416875 -1.08039 64 -4.6752 0.724324 -1.07987 71 -4.58389 -0.225416 -1.07973 74 -4.64126 0.906933 -1.07937 68 -4.67283 0.701391 -1.07836 88 -4.64715 0.855124 -1.07836 48 -4.70616 -0.401293 -1.07788 74 -4.66927 0.685832 -1.07685 95 -4.66566 0.670302 -1.07535 90 -4.77949 1.01559 -1.07487 48 -4.6538 0.73588 -1.07484 72 -4.63114 0.867152 -1.07484 57 -4.66391 0.655083 -1.07434 82 -4.77696 0.99941 -1.07341 46 -4.68231 -0.384586 -1.07133 52 -4.62578 0.821024 -1.07132 47 -4.65353 0.631201 -1.07082 86 -4.63429 0.747627 -1.07031 53 -4.64973 0.615785 -1.06931 88 -4.62064 0.782665 -1.0683 56 -4.61176 0.833424 -1.0683 55 -4.64589 0.600397 -1.0678 92 -4.62117 0.767818 -1.06779 68 -4.64854 0.563647 -1.06729 77 -4.6509 0.526892 -1.06679 51 -4.65815 -0.345943 -1.06428 57 -4.63523 0.57675 -1.06427 76 -4.64634 0.459882 -1.06377 255 -4.64258 0.496359 -1.06377 255 -4.633 0.546901 -1.06276 82 -4.5972 0.793441 -1.06276 59 -4.73632 0.975631 -1.06223 61 -4.64006 0.444501 -1.06176 255 -4.63642 0.48093 -1.06176 255 -4.65724 -0.140511 -1.06126 81 -4.65459 -0.162401 -1.06076 67 -4.63762 0.407504 -1.06025 255 -4.63565 0.429354 -1.06025 255 -4.63773 -0.359188 -1.05925 57 -4.7305 0.935839 -1.05883 76 -4.72604 0.95812 -1.05883 62 -4.63625 0.326727 -1.05824 255 -4.63411 0.35585 -1.05824 255 -4.6356 -0.30782 -1.05774 58 -4.63745 -0.278687 -1.05774 68 -4.62638 -0.329156 -1.05573 69 -4.62882 -0.29281 -1.05573 69 -4.6299 0.275103 -1.05572 255 -4.63444 -0.125381 -1.05522 90 -4.62753 0.209328 -1.05421 255 -4.7788 -0.479385 -1.05399 41 -4.62762 0.158356 -1.05371 255 -4.62653 0.18743 -1.05371 255 -4.62419 0.238289 -1.05371 255 -4.62352 -0.2124 -1.05321 59 -4.61897 -0.263125 -1.05271 64 -4.62016 -0.241356 -1.05271 62 -4.6232 -0.110609 -1.0522 101 -4.62398 0.0709825 -1.0522 255 -4.62098 0.121759 -1.0517 255 -4.61936 0.17256 -1.0517 255 -4.61673 -0.190335 -1.0512 62 -4.6115 -0.175641 -1.04969 77 -4.61231 -0.0741745 -1.04918 91 -4.61198 0.0924743 -1.04918 255 -4.69814 0.899012 -1.0491 61 -4.60198 0.287802 -1.04867 255 -4.6061 -0.0958216 -1.04767 83 -4.7494 -0.461201 -1.04621 20 -4.68386 0.911606 -1.04619 62 -4.59188 -0.22558 -1.04516 74 -4.59704 -0.0595708 -1.04515 98 -4.59543 -0.0234652 -1.04465 93 -4.68596 0.858694 -1.04424 77 -4.59333 -0.0451121 -1.04415 105 -4.73743 -0.422423 -1.04232 75 -4.67369 0.871684 -1.04181 64 -4.58369 0.0413303 -1.04163 122 -4.42126 0.472899 -1.04139 255 -4.5816 0.055697 -1.04113 231 -4.57999 -0.00908619 -1.04062 104 -4.57806 0.00529046 -1.04012 108 -4.57412 0.0268191 -1.03911 133 -4.71801 -0.443014 -1.03794 62 -4.66769 0.817648 -1.03792 74 -4.40542 0.457314 -1.03673 255 -4.40748 0.373741 -1.03517 255 -4.40567 0.394508 -1.03517 255 -4.65232 0.837635 -1.035 83 -4.70782 -0.404708 -1.03454 82 -4.40847 0.311148 -1.03414 255 -4.65493 0.800434 -1.03403 82 -4.41577 0.123909 -1.03362 255 -4.4149 0.151652 -1.03362 255 -4.40503 0.331785 -1.03362 255 -4.40204 0.345481 -1.0331 255 -4.40093 0.35931 -1.0331 255 -4.70134 -0.389234 -1.03259 88 -4.41137 0.0544972 -1.03207 255 -4.40547 0.234566 -1.03207 255 -4.40471 0.248405 -1.03207 255 -4.40262 0.282992 -1.03207 255 -4.40641 0.1722 -1.03155 255 -4.39979 0.296702 -1.03155 255 -4.40664 0.102932 -1.03103 255 -4.40377 0.137489 -1.03051 255 -4.40074 0.213555 -1.03051 255 -4.39812 0.261931 -1.03051 255 -4.6421 0.783308 -1.03014 88 -4.40006 0.185832 -1.03 255 -4.40141 0.0751766 -1.02948 255 -4.6466 0.731637 -1.02917 101 -4.68766 -0.365781 -1.0287 94 -4.68074 0.445612 -1.02869 255 -4.39729 0.0889486 -1.02844 255 -4.63688 0.767496 -1.0282 95 -4.6717 0.496664 -1.02772 255 -4.63661 0.745042 -1.02723 94 -4.68212 -0.335723 -1.02676 103 -4.67525 -0.349964 -1.0253 95 -4.63352 0.714755 -1.02528 87 -4.77967 1.0366 -1.02509 28 -4.66863 0.407572 -1.0248 255 -4.66961 -0.32001 -1.02335 89 -4.62916 0.691808 -1.02334 88 -4.62747 0.676721 -1.02237 96 -4.62573 0.661653 -1.02139 101 -4.62495 0.639337 -1.02042 108 -4.6565 -0.282298 -1.01946 101 -4.65365 -0.296792 -1.01898 96 -4.64474 0.390929 -1.01848 255 -4.62114 0.594535 -1.01799 94 -4.63296 0.456014 -1.01702 255 -4.62181 0.557779 -1.01702 93 -4.6154 0.608564 -1.01702 109 -4.64574 -0.266935 -1.01654 110 -4.65076 0.156844 -1.01654 255 -4.64619 0.259073 -1.01654 255 -4.46026 0.490024 -1.01646 255 -4.74681 1.01367 -1.01622 53 -4.64253 0.288152 -1.01605 255 -4.64348 0.237 -1.01556 255 -4.60769 0.622314 -1.01556 110 -4.64114 -0.244701 -1.01508 99 -4.6467 0.0909999 -1.01508 255 -4.64603 0.120195 -1.01508 255 -4.64387 0.185862 -1.01508 255 -4.63954 0.273359 -1.01508 255 -4.63773 0.302505 -1.01508 255 -4.63413 0.353481 -1.01508 255 -4.63801 -0.229906 -1.01411 102 -4.64175 0.134698 -1.01411 255 -4.64055 0.171151 -1.01411 255 -4.61197 0.541963 -1.0141 104 -4.60655 0.570703 -1.01361 129 -4.63096 -0.21493 -1.01217 104 -4.63225 -0.12754 -1.01168 97 -4.60644 0.504722 -1.01167 186 -4.60097 0.518778 -1.0107 117 -4.62578 -0.149149 -1.01022 132 -4.62223 -0.192646 -1.00974 114 -4.62293 -0.112697 -1.00925 102 -4.7983 -0.484666 -1.00877 10 -4.62174 -0.0763424 -1.00876 104 -4.61754 -0.163361 -1.00828 86 -4.61939 -0.0980687 -1.00828 100 -4.62019 -0.0472716 -1.00827 111 -4.61506 -0.177783 -1.00779 117 -4.61807 -0.0617484 -1.00779 106 -4.61847 -0.0109669 -1.00779 115 -4.61461 0.00356052 -1.00682 116 -4.70435 0.988902 -1.00501 52 -4.60673 -0.0325826 -1.00487 116 -4.4249 0.373603 -1.00438 255 -4.60099 0.0180824 -1.00341 124 -4.59698 0.039751 -1.00244 138 -4.41716 0.324009 -1.00136 255 -4.41448 0.358691 -1.00136 255 -4.76567 -0.458882 -1.00036 10 -4.68651 0.969671 -0.999876 47 -4.68341 0.945993 -0.998009 71 -4.41338 0.135938 -0.997838 255 -4.40664 0.246684 -0.997333 255 -4.40366 0.295122 -0.997333 255 -4.40651 0.211963 -0.996831 255 -4.89605 1.05566 -0.996743 46 -4.40464 0.100992 -0.995322 255 -4.6654 0.926991 -0.992873 57 -4.66447 0.911563 -0.99194 70 -4.66194 0.873058 -0.989606 71 -4.65918 0.887699 -0.989606 74 -4.65129 0.85587 -0.986338 75 -4.69929 -0.437966 -0.984022 19 -4.64571 0.832175 -0.984004 81 -4.70064 -0.40089 -0.983555 64 -4.69676 -0.422873 -0.983088 62 -4.4886 0.456852 -0.981039 255 -4.62534 0.813407 -0.978401 84 -4.62596 0.798531 -0.977935 80 -5.20504 1.12894 -0.977236 33 -4.62078 0.782652 -0.976067 77 -4.66698 -0.383448 -0.97515 82 -4.66816 -0.368785 -0.97515 63 -4.66735 -0.35398 -0.974683 78 -4.62103 0.745375 -0.974667 75 -4.80388 1.02052 -0.974454 72 -4.48431 0.0535036 -0.974237 255 -4.46875 0.327684 -0.973261 255 -4.66121 -0.331474 -0.972815 87 -4.61375 0.729282 -0.972333 119 -4.60716 0.757931 -0.971865 90 -4.61549 0.692425 -0.9714 101 -4.79369 1.0027 -0.971334 67 -4.46008 0.313021 -0.97083 255 -4.6138 0.677336 -0.970466 104 -4.60946 0.706312 -0.970466 87 -4.45443 0.361895 -0.970343 255 -4.45019 0.410853 -0.970342 255 -4.86474 -0.511768 -0.97002 50 -4.65058 -0.316103 -0.970014 104 -4.64515 -0.279145 -0.968145 125 -4.60732 0.654165 -0.968132 108 -4.60743 0.639409 -0.967665 116 -4.60943 0.610182 -0.967199 135 -4.60749 0.62466 -0.967198 122 -4.63796 -0.300685 -0.966745 117 -4.63824 -0.26415 -0.966278 108 -4.63628 -0.227546 -0.965343 122 -4.44726 0.0672485 -0.964998 255 -4.44327 0.199929 -0.964997 255 -4.44263 0.213886 -0.964996 255 -4.63568 -0.198338 -0.964876 140 -4.44466 0.102142 -0.964512 255 -4.63127 -0.249204 -0.96441 107 -4.60069 0.586913 -0.964398 140 -4.60236 0.557749 -0.963931 157 -4.6292 -0.212666 -0.963476 127 -4.603 0.535819 -0.963465 162 -4.59865 0.571954 -0.963464 146 -4.60273 0.521127 -0.962998 180 -4.62737 -0.161639 -0.962541 155 -4.62461 -0.183377 -0.962074 145 -4.62052 -0.132382 -0.960673 165 -4.74784 0.954549 -0.958853 122 -4.6123 -0.146693 -0.958806 158 -4.61331 -0.110464 -0.958805 175 -4.58929 0.48303 -0.958796 233 -4.61169 -0.0959417 -0.958338 190 -4.74507 0.938525 -0.957516 89 -4.73908 0.96832 -0.957515 60 -4.60808 -0.0814061 -0.957404 195 -4.58203 0.438579 -0.955996 222 -4.60064 -0.0596335 -0.955536 202 -4.58339 0.402398 -0.955529 224 -4.57869 0.452769 -0.955529 224 -4.57725 0.467151 -0.955528 227 -4.59886 -0.0451716 -0.955069 206 -4.59012 0.286956 -0.955064 232 -4.57151 0.502863 -0.955061 203 -4.58906 0.272408 -0.954598 234 -4.57824 0.41642 -0.954595 222 -4.58173 0.351498 -0.95413 230 -4.59314 -0.0307174 -0.953668 214 -4.58241 0.315358 -0.953663 231 -4.58087 0.336949 -0.953663 229 -4.57672 0.365559 -0.953195 227 -4.57495 0.387122 -0.953195 222 -4.58902 0.0557918 -0.952733 228 -4.58252 0.250312 -0.95273 235 -4.57949 0.300683 -0.95273 231 -4.98048 1.08472 -0.952386 25 -4.58728 0.0341418 -0.952266 224 -4.78878 -0.488155 -0.952188 29 -4.58544 -0.0163036 -0.9518 218 -4.58542 0.0197106 -0.9518 222 -4.58493 0.0701282 -0.951799 234 -4.72737 0.896639 -0.951722 87 -4.58157 0.00527816 -0.950866 218 -4.5808 0.0844372 -0.950865 235 -4.71734 0.91782 -0.950384 88 -4.57452 0.105855 -0.949464 237 -4.77357 -0.463792 -0.948176 63 -4.56387 0.234804 -0.948061 237 -4.72227 0.826787 -0.947711 97 -4.5607 0.220256 -0.947128 238 -4.70906 0.877967 -0.946818 98 -4.70795 0.862487 -0.945927 103 -4.55392 0.198379 -0.945261 239 -4.55473 0.119604 -0.944795 239 -5.2595 1.14954 -0.943925 110 -4.75638 -0.416794 -0.943272 112 -4.69852 0.83797 -0.942807 114 -4.74591 -0.445899 -0.941489 85 -4.74728 -0.430986 -0.941489 89 -4.70167 0.785324 -0.941471 106 -4.53878 0.133367 -0.941059 241 -4.53121 0.182996 -0.939658 241 -4.69449 0.769026 -0.939242 109 -4.69303 0.753677 -0.938351 109 -4.68253 0.804913 -0.937904 130 -4.69152 0.738345 -0.93746 111 -4.69331 0.70092 -0.936569 126 -4.72527 -0.391457 -0.935693 110 -4.51502 0.146732 -0.935456 255 -4.72454 -0.376445 -0.935247 124 -4.6853 0.71481 -0.935231 120 -4.72645 -0.32433 -0.934801 112 -4.50845 0.167757 -0.934055 255 -4.72301 -0.286813 -0.933463 127 -4.68128 0.661677 -0.932557 149 -4.67618 0.683459 -0.932111 129 -4.67947 0.646455 -0.931666 163 -4.70821 -0.360166 -0.931235 126 -4.70791 -0.337824 -0.930789 140 -4.70605 -0.307962 -0.929897 120 -4.70915 -0.256198 -0.929896 130 -4.67181 0.630499 -0.929437 167 -4.66893 0.607754 -0.9281 181 -4.6947 -0.270132 -0.926776 132 -4.86739 1.04346 -0.926651 24 -4.67098 0.526164 -0.926319 106 -4.69241 -0.240407 -0.925884 135 -4.65727 0.59144 -0.92498 187 -4.68832 -0.20326 -0.924546 145 -4.66155 0.539982 -0.924535 105 -4.68571 -0.217887 -0.924101 145 -4.68698 -0.188441 -0.9241 150 -4.68637 -0.15155 -0.923654 163 -4.68392 -0.166194 -0.923209 155 -4.65903 0.510077 -0.923198 131 -4.68098 -0.136625 -0.922317 162 -4.66943 0.355866 -0.922309 84 -4.67111 0.304387 -0.921864 83 -4.67882 -0.0483089 -0.921424 122 -4.67223 0.252912 -0.921419 84 -4.64167 0.574746 -0.920968 133 -4.67377 -0.11433 -0.920533 149 -4.66051 0.36996 -0.920526 92 -4.84198 1.02196 -0.920323 24 -4.66889 0.201304 -0.920083 91 -4.64931 0.472166 -0.920079 123 -4.6478 0.48677 -0.920078 119 -4.67075 -0.070197 -0.919641 116 -4.67115 -0.0335101 -0.919641 105 -4.67095 0.0545394 -0.919639 85 -4.66755 0.186569 -0.919637 93 -4.66232 0.289161 -0.919636 80 -4.66041 0.318449 -0.919635 84 -4.65483 0.391613 -0.919634 92 -4.65228 0.420852 -0.919634 104 -4.63765 0.559492 -0.919631 87 -4.66737 0.135191 -0.919192 84 -4.66692 0.149853 -0.919192 88 -4.65163 0.406076 -0.919188 95 -4.64899 0.435294 -0.919188 106 -4.66734 0.0178591 -0.918748 83 -4.66726 0.0325232 -0.918748 90 -4.66421 0.171783 -0.918746 96 -4.66204 0.223058 -0.918745 85 -4.66132 0.237702 -0.918745 79 -4.65496 0.340145 -0.918743 82 -4.66242 -0.0993325 -0.917858 164 -4.66344 -0.0187599 -0.917857 90 -4.65389 0.266683 -0.917407 81 -4.83178 1.00389 -0.91737 24 -4.65881 -0.0845918 -0.916966 205 -4.65854 0.0983781 -0.916964 89 -4.63718 0.456298 -0.916958 112 -4.65711 0.0690873 -0.916519 86 -4.65607 0.120291 -0.916518 84 -4.89907 -0.506566 -0.915278 24 -4.64788 0.00329217 -0.914291 82 -4.64713 0.0835971 -0.91429 85 -4.87917 0.627308 -0.914001 85 -4.81732 0.97712 -0.913152 24 -4.86442 -0.480024 -0.907262 24 -4.86396 -0.464565 -0.90684 24 -4.82684 0.60488 -0.902188 38 -4.82737 0.551073 -0.900923 126 -4.76483 0.950592 -0.900917 29 -4.83423 -0.44657 -0.90009 24 -4.76204 0.934457 -0.899651 30 -4.82977 -0.430892 -0.898824 23 -4.8152 0.518973 -0.897548 96 -4.77624 0.789962 -0.897122 23 -4.81672 0.465598 -0.896705 86 -4.80966 0.533646 -0.896704 99 -4.75196 0.893683 -0.895855 56 -4.76219 0.826072 -0.895434 23 -4.7509 0.878019 -0.895011 58 -4.74529 0.907853 -0.895011 30 -4.80914 0.441949 -0.894596 81 -4.81674 0.290415 -0.893754 86 -4.76135 0.772043 -0.893326 23 -4.81191 0.305276 -0.89291 84 -4.80241 0.3577 -0.891644 101 -4.74744 0.808061 -0.891637 23 -4.80964 0.199026 -0.891223 60 -4.79737 0.372463 -0.890799 108 -4.73576 0.852056 -0.890793 59 -4.79423 0.387363 -0.890377 82 -4.80773 0.0402116 -0.88996 87 -4.80118 0.213744 -0.889536 84 -4.73265 0.836121 -0.889527 31 -4.79966 0.0627223 -0.888272 91 -4.79591 0.145571 -0.887849 96 -4.7961 0.0249814 -0.887428 83 -4.77717 -0.403813 -0.88701 31 -4.73481 0.752323 -0.886997 23 -4.78903 1.02511 -0.886751 41 -4.78167 0.318286 -0.886581 56 -4.78082 -0.268301 -0.885744 23 -4.78164 -0.253279 -0.885743 23 -4.76573 0.422623 -0.884892 104 -4.76962 -0.350466 -0.884479 61 -4.75885 0.474794 -0.88447 64 -4.75734 0.489741 -0.88447 76 -4.77485 0.129803 -0.883208 84 -4.75817 -0.372228 -0.882369 70 -4.76434 -0.282477 -0.882369 23 -4.77133 0.114685 -0.882365 92 -4.76923 0.182126 -0.882364 133 -4.76342 0.264381 -0.881941 106 -4.72705 0.629605 -0.881514 49 -4.75113 -0.386731 -0.881104 64 -4.73175 0.577344 -0.881093 47 -4.70935 0.725379 -0.880669 28 -4.75718 0.23402 -0.880254 66 -4.75544 -0.229574 -0.879837 36 -4.74976 -0.296665 -0.879416 27 -4.70581 0.709675 -0.879404 29 -4.75687 -0.0426846 -0.878991 61 -4.70438 0.679224 -0.878139 57 -4.73199 0.404459 -0.877298 73 -4.73558 -0.333201 -0.876884 57 -4.74525 -0.0277357 -0.87646 70 -4.73334 0.337225 -0.876456 82 -4.74276 0.0765736 -0.876037 107 -4.74047 0.999437 -0.875595 47 -4.73529 -0.198905 -0.875196 50 -4.73618 -0.176588 -0.875195 29 -4.81305 -0.498598 -0.874374 45 -4.7249 -0.317601 -0.874353 48 -4.73555 0.00946078 -0.87435 89 -4.73468 0.0912808 -0.874349 95 -4.73858 0.960283 -0.87353 69 -4.72876 0.16548 -0.873504 191 -4.68827 0.639231 -0.873498 31 -4.68096 0.690742 -0.873497 30 -4.72488 -0.213393 -0.873086 50 -4.72324 0.247046 -0.873081 71 -4.72739 -0.0574327 -0.872663 34 -4.68237 0.653397 -0.872654 76 -4.72578 -0.00545806 -0.87224 65 -4.72786 0.973628 -0.871877 58 -4.72108 -0.161261 -0.87182 29 -4.72316 -0.0796659 -0.871819 55 -4.70788 -0.146079 -0.868867 33 -4.78735 -0.48059 -0.86859 21 -4.71376 0.92463 -0.86692 81 -4.70699 0.93869 -0.866093 72 -4.6952 -0.108858 -0.865913 78 -4.69552 -0.094106 -0.865913 75 -4.68877 -0.130851 -0.864648 73 -4.70075 0.899192 -0.863201 85 -4.70457 0.846443 -0.861963 58 -4.86492 1.04528 -0.861323 56 -4.73727 0.608517 -0.86114 171 -4.69475 0.867568 -0.860723 74 -4.692 0.882312 -0.860723 98 -4.69242 0.813952 -0.858245 51 -4.69674 0.776764 -0.857832 136 -4.7331 -0.452319 -0.856607 22 -4.73585 -0.42257 -0.856607 81 -4.74721 -0.266149 -0.856605 67 -4.9225 -0.506564 -0.855783 42 -4.73061 -0.437065 -0.855781 69 -4.67827 0.82671 -0.855765 72 -4.73912 -0.303018 -0.855366 85 -4.73854 -0.280555 -0.854953 82 -4.74134 -0.228435 -0.854952 158 -4.7261 -0.399197 -0.854128 89 -4.73495 0.19615 -0.853295 97 -4.68025 0.743975 -0.853288 49 -4.82955 1.01367 -0.852984 49 -4.72346 -0.331754 -0.852474 54 -4.73372 0.114238 -0.85247 81 -4.71876 -0.368678 -0.852061 57 -4.72747 0.12898 -0.85123 119 -4.67403 0.720474 -0.851222 89 -4.71173 -0.382994 -0.850822 71 -4.72068 -0.249636 -0.850821 85 -4.71419 0.351397 -0.850814 77 -4.7207 0.158517 -0.84999 145 -4.68292 0.616787 -0.849984 92 -4.70721 0.365783 -0.849574 100 -4.70429 -0.352596 -0.848756 64 -4.7166 0.0916834 -0.848751 121 -4.65663 0.755346 -0.848742 25 -4.70496 -0.315495 -0.848342 74 -4.7149 0.0768439 -0.848338 134 -4.71335 0.143491 -0.848338 103 -4.67698 0.586187 -0.847918 144 -4.83122 0.872073 -0.847823 148 -4.82038 0.909243 -0.847028 87 -4.69043 0.379394 -0.846269 93 -4.81883 0.885424 -0.845837 160 -4.79628 0.990766 -0.845438 52 -4.65667 0.6358 -0.845025 72 -4.64746 0.686687 -0.844612 59 -4.69309 -0.0929645 -0.843795 68 -4.68795 -0.196049 -0.843383 63 -4.67025 0.451778 -0.843376 76 -4.65742 0.568999 -0.843374 98 -4.63947 0.700441 -0.843372 57 -4.8108 0.852662 -0.843058 74 -4.78593 0.972888 -0.842659 68 -4.68797 0.0397308 -0.842554 118 -4.68469 0.179606 -0.842552 169 -4.67103 0.400087 -0.84255 72 -4.66491 0.46608 -0.842549 78 -4.85772 -0.484832 -0.842281 18 -4.78513 0.957058 -0.841865 20 -4.65561 0.516935 -0.841722 100 -4.65227 0.546176 -0.841721 66 -4.66258 0.428923 -0.84131 86 -4.66195 0.414109 -0.840897 87 -4.6541 0.494597 -0.840896 80 -4.63526 0.647824 -0.840894 97 -4.78382 0.933343 -0.840674 37 -4.67828 0.0250058 -0.840488 89 -4.85622 -0.392448 -0.840294 103 -4.67403 0.061718 -0.839662 99 -4.64979 0.479405 -0.839656 78 -4.98292 1.06845 -0.839376 78 -4.67045 -0.0263478 -0.838836 95 -4.6384 0.529867 -0.838416 113 -4.62157 0.660787 -0.838414 140 -4.6666 0.0103475 -0.83801 88 -4.8358 -0.46743 -0.837515 53 -4.65922 -0.180023 -0.837185 76 -4.66205 -0.0775261 -0.837184 86 -4.83346 -0.428947 -0.836323 46 -4.6565 -0.0554534 -0.835944 99 -4.65219 -0.157756 -0.835532 97 -4.83202 -0.375351 -0.835131 85 -4.65273 -0.0407668 -0.835118 98 -4.6529 -0.0115338 -0.835118 83 -4.64828 0.207662 -0.835115 112 -4.82232 -0.443286 -0.834338 64 -4.82501 -0.412978 -0.834337 60 -4.76845 0.821743 -0.833527 63 -4.63183 0.32378 -0.833048 145 -4.8129 0.459823 -0.832739 109 -4.63996 -0.106204 -0.83264 109 -4.63116 -0.142359 -0.830987 120 -4.62696 0.243246 -0.830983 140 -4.80971 -0.358548 -0.830366 48 -4.79778 0.473519 -0.829958 131 -4.62571 -0.127613 -0.829748 141 -4.61423 0.29354 -0.828916 81 -4.61249 0.257094 -0.82809 87 -4.60938 0.307795 -0.82809 154 -4.6101 0.227936 -0.827264 190 -4.79672 -0.319803 -0.827188 91 -4.73432 0.800353 -0.825982 18 -4.73345 0.769616 -0.824791 16 -4.59559 0.277971 -0.824785 126 -4.78233 -0.266157 -0.823613 65 -4.72328 0.783157 -0.823202 17 -4.76778 -0.340598 -0.821629 55 -4.89748 1.0265 -0.821528 102 -4.76496 0.109215 -0.818844 97 -4.75362 -0.287186 -0.818054 64 -4.75573 -0.249842 -0.818053 71 -4.75649 -0.2349 -0.818053 70 -4.75559 -0.212406 -0.817656 69 -4.74152 0.400032 -0.817251 91 -4.70027 0.741298 -0.817246 38 -4.90687 0.828992 -0.816215 218 -4.88147 0.967381 -0.816212 126 -4.70656 0.659129 -0.816056 89 -4.94427 -0.510103 -0.815092 74 -4.74192 0.160752 -0.814475 132 -4.74139 0.175648 -0.814474 97 -4.74176 0.0936498 -0.814078 110 -4.73892 0.130825 -0.813681 96 -4.68516 0.72374 -0.813672 55 -4.86338 0.987708 -0.813553 78 -4.85832 1.0026 -0.813173 63 -4.71171 0.486997 -0.812882 62 -4.6902 0.634209 -0.812085 82 -4.68632 0.603682 -0.810497 97 -4.67732 0.669872 -0.810496 87 -4.71901 -0.196124 -0.81011 40 -4.72244 0.0783205 -0.810107 123 -4.93145 -0.274716 -0.809014 255 -4.66417 0.70537 -0.808907 54 -4.68466 0.536205 -0.808513 82 -4.71321 0.0262818 -0.808122 100 -4.67275 0.616799 -0.808114 105 -4.66357 0.682795 -0.808113 115 -4.70936 0.00404516 -0.807328 98 -4.69198 0.380732 -0.806926 97 -4.6869 0.417385 -0.806529 61 -4.66876 0.586406 -0.806526 88 -4.70331 0.0409494 -0.806136 81 -4.67545 0.512776 -0.80613 58 -4.66953 0.564153 -0.806129 78 -4.89312 -0.489017 -0.804839 89 -4.69501 -0.0771726 -0.804549 86 -4.69022 -0.180329 -0.804153 22 -4.69076 -0.165595 -0.804153 88 -4.69278 -0.0918958 -0.804152 61 -4.6673 0.496994 -0.804145 50 -4.67191 0.430772 -0.803748 80 -4.68969 -0.0255448 -0.803357 83 -4.68739 -0.0623624 -0.80296 85 -4.68763 -0.0402721 -0.80296 86 -4.65571 0.547562 -0.802952 54 -4.88487 -0.472645 -0.80294 47 -4.81118 0.938148 -0.801781 64 -4.67973 -0.143194 -0.80177 111 -4.67067 0.224102 -0.800574 59 -4.67232 -0.12832 -0.800181 117 -4.6727 -0.11364 -0.800181 69 -4.67407 -0.0108632 -0.80018 80 -4.66266 0.326605 -0.800176 80 -4.67179 0.0551804 -0.799782 74 -4.87646 -0.363706 -0.799521 141 -4.80539 0.90578 -0.799503 44 -4.66601 0.143084 -0.798987 54 -4.65575 0.340791 -0.798984 83 -4.65619 0.274685 -0.798191 141 -4.6524 0.193826 -0.796603 62 -4.64999 0.244969 -0.796603 65 -4.64237 0.361746 -0.796601 103 -4.78707 0.917995 -0.796465 48 -4.85573 -0.377399 -0.795723 146 -4.6402 0.310255 -0.79541 61 -4.63942 0.258975 -0.794617 85 -4.78721 0.863613 -0.794567 67 -4.63379 0.287856 -0.793822 87 -4.79681 0.772323 -0.793429 179 -4.63611 0.207651 -0.793426 159 -4.77674 0.87727 -0.793048 72 -4.77828 0.846576 -0.792289 43 -4.77641 0.823081 -0.79115 65 -4.77567 0.792121 -0.790011 255 -4.81277 -0.44239 -0.788508 45 -4.81297 -0.343424 -0.786988 59 -4.80695 -0.396153 -0.786609 75 -4.81812 -0.222266 -0.786607 77 -4.79068 -0.425059 -0.783951 50 -5.0232 -0.522275 -0.783207 63 -4.79411 0.268886 -0.782424 102 -4.93297 1.05428 -0.782099 11 -4.79128 0.283841 -0.782044 100 -4.77635 -0.408582 -0.780913 62 -4.74465 0.627274 -0.77938 121 -4.76557 -0.317214 -0.777494 55 -4.71768 0.744831 -0.77748 51 -4.76459 -0.302105 -0.777114 128 -4.73188 0.587906 -0.775963 117 -4.75858 -0.234184 -0.775214 255 -4.72124 0.639395 -0.775203 142 -4.72126 0.609236 -0.774444 142 -4.71428 0.661112 -0.774443 70 -4.74788 -0.285977 -0.773696 219 -4.722 0.571686 -0.773685 107 -4.91155 0.92104 -0.773419 75 -4.74802 -0.248564 -0.773316 255 -4.69864 0.726821 -0.773303 64 -4.69507 0.711206 -0.772163 70 -4.9009 0.903039 -0.770887 180 -4.89365 0.941503 -0.770887 72 -4.70988 0.540302 -0.770647 107 -4.70816 0.555095 -0.770647 152 -4.69078 0.672968 -0.770265 84 -4.73314 -0.128528 -0.769517 96 -4.71927 0.384225 -0.76951 119 -4.71141 0.450726 -0.769129 95 -4.68281 0.68688 -0.769126 146 -4.86704 1.02384 -0.769076 11 -4.72692 -0.195242 -0.768758 71 -4.73073 -0.046669 -0.768756 99 -4.71085 0.435752 -0.76875 98 -4.72811 -0.0912033 -0.768377 97 -4.72838 -0.07635 -0.768377 133 -4.70382 0.487331 -0.768369 112 -4.70066 0.516877 -0.768369 107 -4.72697 -0.0243327 -0.767996 92 -4.71021 0.398431 -0.767991 104 -4.7041 0.464978 -0.76799 116 -4.70031 0.50191 -0.767989 100 -4.87331 0.953382 -0.76763 78 -4.72467 -0.0614209 -0.767617 104 -4.72472 0.0573286 -0.767616 104 -4.71066 0.368685 -0.767612 117 -4.70698 0.413066 -0.767611 112 -4.7231 0.00538452 -0.767237 98 -4.72059 0.0721345 -0.766856 100 -4.71782 -0.113193 -0.766479 132 -4.93865 -0.435668 -0.766203 150 -4.71495 0.146172 -0.766096 99 -4.71524 -0.00939487 -0.765718 124 -4.7143 0.0942933 -0.765716 99 -4.92964 -0.489576 -0.76548 59 -4.71124 0.0276372 -0.764958 95 -4.70916 0.0424312 -0.764578 133 -4.70809 0.108999 -0.764577 103 -4.70773 0.12379 -0.764577 111 -4.70608 0.175545 -0.764576 96 -4.70465 0.160704 -0.764197 111 -4.70328 -0.142343 -0.763821 112 -4.92626 -0.419057 -0.763671 61 -4.9194 -0.47302 -0.763309 122 -4.8631 0.880068 -0.763291 62 -4.84524 0.963568 -0.762927 134 -4.92688 -0.33351 -0.762584 96 -4.90715 -0.456359 -0.760777 48 -4.68436 -0.178507 -0.760403 113 -4.68293 -0.16371 -0.760023 141 -4.67327 0.314329 -0.759637 132 -4.66834 0.328754 -0.758878 212 -4.84203 0.852575 -0.758588 112 -4.90114 -0.362841 -0.758244 159 -4.66337 0.343152 -0.758118 200 -4.65902 0.291409 -0.756599 120 -4.8876 -0.38507 -0.756073 207 -4.89048 -0.346671 -0.756073 206 -4.65418 0.195858 -0.754702 174 -4.65213 0.239713 -0.754701 124 -5.14484 -0.539729 -0.7546 73 -4.64894 0.22493 -0.753942 130 -4.64374 0.21009 -0.752803 91 -4.87341 -0.307118 -0.752455 179 -4.79498 0.812977 -0.748821 255 -4.791 0.789052 -0.747374 198 -4.83734 -0.396666 -0.747029 173 -4.76336 0.822857 -0.743394 255 -4.82329 -0.289022 -0.743049 98 -4.7663 0.769461 -0.74231 81 -4.99788 1.00643 -0.741557 148 -4.98789 1.04526 -0.741213 64 -4.81045 -0.235286 -0.740154 103 -4.79667 -0.272456 -0.737984 56 -4.98087 0.970604 -0.737446 211 -4.96796 1.02492 -0.737102 183 -4.78571 -0.256815 -0.735813 134 -4.77972 -0.218905 -0.734366 91 -4.9612 0.926531 -0.732649 95 -4.95632 0.941754 -0.732306 105 -4.7124 0.745266 -0.731819 70 -4.94103 0.979159 -0.730935 59 -5.00936 -0.508912 -0.730614 117 -5.01269 -0.453614 -0.730271 175 -4.9505 0.90852 -0.730251 191 -5.00889 -0.429453 -0.729242 136 -4.70475 0.691034 -0.728926 95 -4.69723 0.727652 -0.728564 82 -4.70301 0.67567 -0.728203 90 -4.69089 0.703996 -0.726755 84 -4.70515 0.585637 -0.726395 95 -4.69648 0.637062 -0.726033 89 -4.69251 0.651531 -0.725671 95 -4.70093 0.555097 -0.724949 121 -4.69916 0.569862 -0.724949 104 -4.69549 0.599376 -0.724948 75 -4.69067 0.621228 -0.724586 101 -4.72338 -0.201765 -0.723874 84 -4.72428 -0.179506 -0.723874 73 -4.72696 -0.0830038 -0.723873 81 -4.71598 0.332588 -0.723867 64 -4.7032 0.480557 -0.723865 99 -4.70089 0.502715 -0.723864 107 -4.70561 0.413655 -0.723142 101 -4.72078 -0.0977631 -0.722788 88 -4.7214 -0.0606834 -0.722787 89 -4.7181 -0.127381 -0.722426 79 -4.71981 -0.00877314 -0.722425 97 -4.71499 -0.164374 -0.722065 107 -4.69491 0.464756 -0.722056 110 -4.68951 0.51635 -0.722055 92 -4.96026 -0.46432 -0.721362 176 -4.68201 0.530383 -0.72097 78 -4.70373 0.24263 -0.720612 100 -4.6944 0.382885 -0.72061 104 -4.9529 -0.4793 -0.720334 152 -4.70471 -0.112305 -0.719894 114 -4.70601 0.020745 -0.719892 89 -4.70478 0.109443 -0.719891 82 -4.70054 0.22764 -0.719889 108 -4.68667 0.426733 -0.719886 96 -4.70408 0.00594691 -0.71953 92 -4.69138 0.345537 -0.719526 85 -4.6873 0.3971 -0.719525 78 -4.69975 -0.149149 -0.719171 123 -4.70131 0.0871763 -0.719168 82 -4.70007 0.138864 -0.719167 116 -4.69883 0.175774 -0.719166 88 -4.69959 0.0723648 -0.718806 102 -4.88734 0.881419 -0.718601 139 -4.69117 0.256695 -0.718442 77 -4.69236 0.190262 -0.718081 79 -4.69403 -0.0457344 -0.717722 84 -4.6915 0.160697 -0.717719 84 -4.69021 -0.0309842 -0.716999 80 -4.67655 0.359145 -0.716993 104 -4.68816 0.0426617 -0.716636 92 -4.67825 0.307563 -0.716632 160 -4.68603 0.057355 -0.716274 94 -4.66112 0.446434 -0.715545 70 -4.67134 0.292329 -0.715185 108 -4.67373 0.211474 -0.714825 92 -4.92581 -0.406304 -0.714508 93 -4.92605 -0.351818 -0.713822 116 -4.66313 0.122904 -0.712294 79 -4.65457 0.276503 -0.71193 152 -4.83899 0.849456 -0.70935 79 -4.87778 -0.363527 -0.705598 228 -4.87405 -0.386343 -0.705256 111 -4.87407 -0.332438 -0.70457 60 -4.79693 0.82679 -0.701469 61 -4.79367 0.810762 -0.700441 51 -4.84168 -0.314773 -0.698745 69 -4.79016 0.771573 -0.698729 114 -4.77798 0.785072 -0.697015 59 -4.78087 0.754739 -0.696673 92 -4.77885 0.716042 -0.695303 93 -4.81755 -0.290274 -0.69429 63 -5.16983 -0.525243 -0.693385 62 -4.81254 -0.274769 -0.693262 121 -4.8133 -0.221736 -0.692918 100 -4.76742 0.699097 -0.692905 125 -4.76293 0.729037 -0.692904 104 -4.77081 0.661373 -0.692563 110 -4.76764 0.683847 -0.692562 107 -4.80354 -0.259066 -0.691548 154 -4.80274 -0.236318 -0.691205 117 -4.75919 0.644604 -0.690164 121 -4.75628 0.606252 -0.688794 148 -4.75141 0.62841 -0.688451 132 -4.78733 -0.182724 -0.688121 106 -4.78248 -0.205092 -0.687436 127 -4.74446 0.589679 -0.686396 156 -4.74042 0.574093 -0.685368 166 -4.74111 0.551531 -0.685026 170 -4.76819 -0.166887 -0.684694 119 -4.74086 0.536422 -0.684684 180 -4.76279 -0.151686 -0.683666 129 -4.76324 -0.136722 -0.683666 142 -4.7363 0.50583 -0.683314 192 -4.75792 -0.1141 -0.682637 147 -4.75826 -0.0991522 -0.682637 156 -4.75855 -0.084203 -0.682637 165 -4.73471 0.483127 -0.682628 200 -4.73077 0.520298 -0.682628 186 -4.75495 -0.0617066 -0.681951 169 -4.75315 -0.0467367 -0.681608 175 -4.75327 -0.0318049 -0.681608 181 -4.73188 0.430367 -0.681259 206 -4.72784 0.452483 -0.680916 205 -4.7286 0.40016 -0.680231 212 -4.72247 0.466968 -0.68023 201 -4.74352 -0.00933099 -0.679895 186 -4.74155 0.00557889 -0.679552 184 -4.74143 0.03537 -0.679551 196 -4.72339 0.414692 -0.679546 209 -4.73954 0.0204774 -0.679209 189 -4.73924 0.0577008 -0.679208 200 -4.72257 0.377289 -0.678861 212 -4.72815 0.228595 -0.678178 211 -4.73115 0.072512 -0.677837 202 -4.7309 0.0873752 -0.677837 207 -4.73043 0.109668 -0.677837 207 -4.72841 0.176529 -0.677836 212 -4.72339 0.280462 -0.677834 211 -4.72248 0.2953 -0.677834 210 -4.71895 0.347207 -0.677833 212 -4.71391 0.36175 -0.677148 211 -4.72374 0.139247 -0.676809 207 -4.71875 0.257911 -0.676807 210 -4.71563 0.309779 -0.676806 212 -4.71412 0.331998 -0.676806 213 -4.72106 0.161447 -0.676466 210 -4.72022 0.124322 -0.676124 211 -4.71736 0.20586 -0.676122 209 -4.7156 0.242904 -0.676122 212 -4.71602 0.19097 -0.67578 211 -4.92954 1.03251 -0.667588 34 -4.89957 1.00196 -0.66186 33 -4.97169 -0.482467 -0.660923 35 -4.88142 0.982169 -0.658359 52 -4.88255 0.966435 -0.658041 62 -5.0634 -0.506883 -0.654647 67 -4.85413 0.93688 -0.652631 91 -4.91221 -0.461441 -0.651056 34 -4.91354 -0.376078 -0.650101 88 -4.83185 0.916709 -0.648494 67 -4.89593 -0.444494 -0.648192 36 -4.93152 1.01736 -0.646257 59 -4.81144 0.897058 -0.644675 60 -4.86648 -0.418875 -0.6431 69 -4.80668 0.8571 -0.642766 60 -4.80259 0.879741 -0.642766 61 -4.8599 -0.402974 -0.641826 60 -4.7977 0.839891 -0.640857 60 -4.89592 0.994201 -0.640056 62 -4.84736 -0.38668 -0.639598 63 -4.78476 0.822055 -0.638311 34 -4.8404 -0.347942 -0.638007 56 -4.78468 0.798828 -0.637675 34 -4.87834 0.950936 -0.636025 70 -4.77792 0.766809 -0.635766 33 -4.86993 0.973158 -0.635405 93 -4.76576 0.780167 -0.634174 33 -4.92934 -0.477128 -0.633252 63 -4.86382 0.932349 -0.633235 78 -4.80994 -0.330736 -0.632914 67 -4.80898 -0.315505 -0.632596 67 -4.75809 0.740515 -0.631947 32 -4.85312 0.914574 -0.631065 98 -4.80056 -0.292293 -0.631005 62 -4.84765 0.889962 -0.629515 88 -4.79159 -0.276695 -0.629413 60 -4.84459 0.873706 -0.628585 90 -4.78652 -0.261348 -0.628458 59 -4.73894 0.722174 -0.628446 32 -4.73948 0.691793 -0.62781 32 -4.73533 0.706377 -0.627492 32 -4.89414 -0.380533 -0.62643 105 -4.8863 -0.449491 -0.62612 56 -4.77154 -0.245585 -0.625912 61 -4.77067 -0.223016 -0.625594 58 -4.73984 0.585637 -0.625584 30 -4.76543 -0.2078 -0.624638 60 -4.72315 0.666585 -0.624628 31 -4.82199 0.854136 -0.624554 89 -4.72819 0.599231 -0.623993 31 -4.72628 0.614082 -0.623992 31 -4.72138 0.636074 -0.623674 31 -4.87195 -0.432655 -0.62364 74 -4.81881 0.837999 -0.623624 86 -4.87132 -0.417169 -0.623329 82 -4.71154 0.64978 -0.622401 31 -4.75027 -0.192276 -0.622092 56 -4.72011 0.568031 -0.622083 30 -4.73102 0.42655 -0.621449 31 -4.8071 0.81273 -0.621144 81 -4.74678 -0.117523 -0.621137 31 -4.74177 -0.154694 -0.620501 31 -4.74318 -0.102547 -0.6205 31 -4.80378 0.796685 -0.620214 80 -4.73928 -0.169529 -0.620183 31 -4.71771 0.462677 -0.619857 31 -4.71623 0.477496 -0.619857 31 -4.73756 -0.0875691 -0.619545 31 -4.70873 0.529091 -0.619538 31 -4.73433 -0.139607 -0.619228 31 -4.73583 -0.0726644 -0.619227 31 -4.73639 0.00173091 -0.619226 31 -4.84567 -0.391831 -0.618988 84 -4.73437 -0.0205898 -0.618908 31 -4.70313 0.543408 -0.618901 31 -4.7965 0.780057 -0.618664 79 -4.71464 0.410049 -0.618585 31 -4.71197 0.439662 -0.618584 30 -4.72281 0.269054 -0.618268 31 -4.70489 0.491231 -0.618265 31 -4.72836 -0.0354526 -0.617953 31 -4.70056 0.513171 -0.617947 31 -4.83819 -0.360591 -0.617438 76 -4.71849 0.239042 -0.617314 31 -4.7223 -0.0502757 -0.616999 31 -4.72247 0.0313231 -0.616998 32 -4.71825 0.201881 -0.616996 31 -4.71575 0.253749 -0.616995 31 -4.70591 0.372008 -0.616676 32 -4.70411 0.394181 -0.616675 31 -4.83393 -0.337342 -0.616507 80 -4.71492 0.186878 -0.61636 31 -4.70775 0.320098 -0.616358 31 -4.71662 0.0164345 -0.616043 31 -4.71634 0.0534768 -0.616043 31 -4.71591 0.0831097 -0.616043 32 -4.83102 -0.321871 -0.615887 82 -4.71274 0.134891 -0.615724 32 -4.7122 0.0682158 -0.615406 31 -4.71032 0.149621 -0.615405 32 -4.70028 0.341816 -0.615403 32 -4.69919 0.356582 -0.615403 31 -4.70919 0.119962 -0.615087 31 -4.70179 0.289982 -0.615085 31 -4.70576 0.0976645 -0.614451 32 -4.70365 0.171569 -0.61445 32 -4.69692 0.304475 -0.614449 31 -4.69359 0.222859 -0.613177 31 -4.76496 0.752089 -0.613083 64 -4.8123 -0.305336 -0.612786 82 -4.81126 -0.290085 -0.612476 83 -4.81258 -0.26741 -0.612476 85 -4.75949 0.735951 -0.611843 77 -4.76316 0.69827 -0.611534 61 -4.75786 0.720424 -0.611223 67 -4.8043 -0.236627 -0.610925 82 -5.04533 -0.480525 -0.61049 125 -4.80141 -0.213788 -0.610305 79 -4.7617 0.652318 -0.610294 58 -4.75767 0.667011 -0.609984 67 -4.79367 -0.25115 -0.609375 85 -4.74772 0.680875 -0.608743 75 -4.78965 -0.160444 -0.608134 75 -4.78627 -0.197963 -0.607824 77 -4.75099 0.612964 -0.607814 68 -4.75328 0.545095 -0.606885 74 -4.74504 0.597089 -0.606574 65 -4.7412 0.626892 -0.606573 76 -4.777 -0.182496 -0.606273 76 -4.74566 0.559363 -0.605954 69 -4.93227 1.00954 -0.605468 65 -4.77039 -0.144688 -0.605033 75 -4.76923 -0.114656 -0.604722 76 -4.74522 0.491448 -0.604715 77 -4.74366 0.506352 -0.604715 76 -4.76687 -0.129573 -0.604412 76 -4.73691 0.475605 -0.603165 71 -4.72621 0.572229 -0.603163 78 -4.75813 -0.0769374 -0.602862 73 -4.73025 0.520023 -0.602854 75 -4.75589 -0.0918364 -0.602552 72 -4.73516 0.452923 -0.602545 74 -4.74308 0.333657 -0.602237 79 -4.91372 0.981514 -0.601937 87 -4.75242 -0.0618803 -0.601931 75 -4.75281 -0.00962159 -0.601931 77 -4.73592 0.400519 -0.601926 75 -4.73066 0.437531 -0.601615 74 -4.74871 -0.039429 -0.601311 72 -4.74881 -0.0245112 -0.601311 75 -4.74885 0.0127875 -0.60131 79 -4.74879 0.0277055 -0.60131 85 -4.74264 0.146935 -0.600689 81 -4.7261 0.422172 -0.600685 73 -4.74275 0.0426048 -0.60038 81 -4.73325 0.303155 -0.600376 77 -4.7403 0.0798291 -0.600069 83 -4.74002 0.094721 -0.600069 84 -4.73615 0.213808 -0.600068 76 -4.73545 0.228685 -0.600067 74 -4.72766 0.355044 -0.600066 79 -4.72652 0.369894 -0.600066 83 -4.73542 0.183981 -0.599758 77 -4.73153 0.265771 -0.599757 81 -4.73667 0.0574641 -0.599449 82 -4.7287 0.280529 -0.599447 78 -4.73321 0.131812 -0.599138 89 -4.7284 0.250718 -0.599137 77 -4.71942 0.384293 -0.599135 75 -4.7318 0.109473 -0.598829 81 -4.89263 0.945227 -0.597817 88 -4.72044 0.16121 -0.597278 79 -4.71902 0.19828 -0.597277 79 -4.71255 0.316806 -0.597276 79 -4.8912 0.921031 -0.596935 90 -4.88824 0.904549 -0.596052 87 -4.94827 -0.45611 -0.595776 56 -4.87218 0.957069 -0.595169 82 -4.8755 0.886276 -0.593699 92 -4.93395 -0.41583 -0.593127 96 -4.86853 0.869165 -0.592227 92 -4.91945 -0.399131 -0.590773 85 -4.9129 -0.429709 -0.590184 73 -4.85962 0.82816 -0.589874 92 -4.90944 -0.375102 -0.589007 107 -4.85116 0.842378 -0.588991 90 -4.84855 0.810534 -0.587814 110 -4.89283 -0.358471 -0.586358 86 -4.89196 -0.34297 -0.586064 88 -4.8372 0.769538 -0.585166 81 -4.83281 0.784404 -0.584872 98 -4.83919 0.730911 -0.584578 86 -4.88167 -0.319201 -0.584298 87 -4.88265 -0.303864 -0.584298 90 -4.87854 -0.272879 -0.583414 92 -4.82788 0.752447 -0.583401 83 -4.8737 -0.287991 -0.582826 91 -4.82582 0.713308 -0.582225 83 -4.82217 0.697263 -0.581342 86 -4.85408 -0.248708 -0.579589 96 -4.85357 -0.218125 -0.579294 88 -4.81782 0.627162 -0.579283 92 -4.81583 0.642296 -0.579283 93 -4.84891 -0.233204 -0.578706 96 -4.85059 -0.195115 -0.578705 94 -4.80791 0.656586 -0.5784 87 -4.80476 0.679237 -0.5784 86 -4.81279 0.588053 -0.577812 86 -4.84327 -0.179623 -0.577528 95 -4.84453 -0.141579 -0.577528 93 -4.81265 0.572685 -0.577518 90 -4.80547 0.548825 -0.576047 92 -4.79522 0.601117 -0.575458 91 -4.82601 -0.163899 -0.574879 87 -4.82715 -0.12599 -0.574879 96 -4.82785 -0.0956591 -0.574879 96 -5.15676 -0.504369 -0.57459 84 -4.82627 -0.0728872 -0.574584 97 -4.82663 -0.0425611 -0.574584 83 -4.79863 0.502211 -0.574282 94 -4.79145 0.531894 -0.573693 89 -4.81763 -0.110651 -0.573407 94 -4.81856 -0.0576725 -0.573407 110 -4.79113 0.516616 -0.573399 95 -4.79599 0.448639 -0.573106 96 -4.81293 -0.0198337 -0.572524 95 -4.79411 0.425661 -0.572518 94 -4.79062 0.463301 -0.572517 92 -4.79653 0.372758 -0.572224 93 -4.79472 0.395358 -0.572224 96 -4.79345 0.41042 -0.572224 92 -4.7957 0.357531 -0.57193 98 -4.78521 0.477935 -0.571929 93 -4.80703 -0.00474049 -0.571641 96 -4.80679 0.0481152 -0.57164 102 -4.80662 0.0632173 -0.57164 101 -4.80597 0.100966 -0.571639 99 -4.80407 0.168896 -0.571638 97 -4.80505 0.0103477 -0.571346 96 -4.80442 0.0782736 -0.571345 101 -4.80154 0.1839 -0.571344 93 -4.80062 0.153655 -0.57105 102 -4.79436 0.289311 -0.571048 96 -4.79901 0.0329177 -0.570463 98 -4.79772 0.115829 -0.570462 98 -4.79129 0.273999 -0.57046 92 -4.79204 0.221199 -0.570166 83 -4.78497 0.341554 -0.570165 92 -4.79338 0.130772 -0.569873 98 -4.79105 0.198522 -0.569872 87 -4.78858 0.25119 -0.569872 108 -4.78553 0.303826 -0.569871 96 -4.78405 0.326374 -0.569871 97 -4.78737 0.236036 -0.569578 81 -5.67858 1.1183 -0.564741 55 -5.00449 1.00347 -0.563872 64 -4.99205 0.984752 -0.561678 88 -5.03609 -0.47598 -0.557584 70 -4.96203 0.962819 -0.557016 99 -4.96067 0.938351 -0.556193 99 -4.94994 0.920298 -0.554273 99 -4.9372 0.901974 -0.552079 89 -4.98827 -0.455397 -0.550726 81 -4.92773 0.876341 -0.55016 88 -4.98049 -0.430982 -0.549354 95 -4.98182 -0.415332 -0.549354 88 -4.9831 -0.39968 -0.549354 120 -4.92265 0.859533 -0.549063 90 -4.91555 0.842441 -0.547692 82 -4.91622 0.826677 -0.547418 106 -4.95646 -0.358232 -0.545239 95 -4.95334 -0.373642 -0.544965 79 -4.90049 0.800409 -0.544675 99 -4.89907 0.784405 -0.544127 87 -4.89171 0.767526 -0.542756 88 -4.8894 0.743603 -0.541933 107 -4.93242 -0.301873 -0.541399 103 -4.92793 -0.340456 -0.541125 95 -4.88809 0.712042 -0.541111 101 -4.927 -0.324833 -0.54085 103 -4.88386 0.727113 -0.540836 104 -4.9216 -0.246853 -0.539478 90 -4.91643 -0.269805 -0.53893 91 -4.87389 0.67103 -0.538369 92 -4.90962 -0.284873 -0.538107 104 -4.86783 0.685807 -0.53782 87 -4.87211 0.639651 -0.537546 90 -4.8672 0.615733 -0.536449 89 -4.86222 0.653939 -0.536449 91 -4.89465 -0.229943 -0.535638 92 -4.89337 -0.214466 -0.535363 84 -4.89235 -0.191316 -0.535089 103 -4.86577 0.507191 -0.534531 90 -4.8572 0.583558 -0.53453 115 -4.88699 -0.175702 -0.534266 101 -4.888 -0.144992 -0.534265 104 -4.88554 -0.160271 -0.533991 101 -4.85141 0.598349 -0.533981 92 -4.85399 0.560013 -0.533707 87 -4.86244 0.460606 -0.533435 89 -4.85178 0.54434 -0.533159 88 -4.87939 -0.091 -0.532893 103 -4.87674 -0.121596 -0.532619 104 -4.87203 -0.0525471 -0.531796 102 -4.87229 0.0163321 -0.531795 92 -4.84761 0.490016 -0.531788 91 -4.86522 -0.105953 -0.530973 102 -4.86623 -0.0371647 -0.530973 110 -4.85129 0.382866 -0.530967 92 -4.84321 0.474236 -0.530966 94 -4.8377 0.527461 -0.530965 88 -4.86392 -0.0677004 -0.530699 101 -4.86167 0.0850888 -0.530423 94 -4.85998 0.153808 -0.530422 89 -4.84852 0.367344 -0.530419 95 -4.84086 0.435682 -0.530143 88 -4.85814 0.0545168 -0.529874 97 -4.85636 0.0316218 -0.5296 98 -4.85205 0.207014 -0.529598 89 -4.83956 0.404948 -0.529595 88 -4.85252 0.138356 -0.529325 97 -4.84623 0.283097 -0.529323 95 -4.85246 -0.0217389 -0.529052 92 -4.84137 0.328635 -0.529048 93 -4.85052 0.00113784 -0.528778 96 -4.8404 0.313307 -0.528774 98 -4.84804 0.0696909 -0.528503 99 -4.84311 0.229545 -0.528501 96 -4.83581 0.35118 -0.528499 93 -4.84537 0.10773 -0.528228 98 -4.84038 0.244669 -0.528226 94 -4.84302 0.122913 -0.527953 96 -4.84138 0.176156 -0.527953 92 -4.8408 0.191365 -0.527952 92 -4.83542 0.297765 -0.527951 93 -4.82641 0.419186 -0.527949 90 -4.8297 0.259396 -0.526854 93 -5.41673 -0.489691 -0.517683 45 -5.27996 -0.461276 -0.498959 53 -5.18825 1.00251 -0.496801 40 -5.23529 -0.399665 -0.492272 40 -5.15636 0.979375 -0.491986 40 -5.22017 -0.41508 -0.490399 40 -5.14578 0.960557 -0.490114 40 -5.21026 -0.439049 -0.48933 40 -5.19782 -0.339572 -0.486654 40 -5.19104 -0.380115 -0.486119 40 -5.11908 0.930471 -0.485835 40 -5.18882 -0.355397 -0.485584 40 -5.12092 0.897584 -0.485301 40 -5.11808 0.913667 -0.4853 40 -5.12315 0.8731 -0.485034 40 -5.12 0.855991 -0.484231 40 -5.17658 -0.297492 -0.483444 40 -5.17314 -0.32177 -0.483176 40 -5.10703 0.837258 -0.482092 40 -5.09136 0.809969 -0.479417 40 -5.09193 0.793655 -0.47915 40 -5.09048 0.777036 -0.478615 40 -5.30453 1.00844 -0.47795 40 -5.08858 0.735858 -0.477546 40 -5.08114 0.759224 -0.477011 40 -5.12291 -0.262402 -0.475954 40 -5.1237 -0.246308 -0.475954 40 -5.50157 1.05003 -0.475792 56 -5.1181 -0.278301 -0.475419 40 -5.07545 0.701339 -0.475139 40 -5.07322 0.717282 -0.475139 40 -5.11689 -0.221857 -0.474883 40 -5.11026 -0.189449 -0.473813 40 -5.56069 -0.498757 -0.473607 46 -5.06902 0.659861 -0.473535 40 -5.06692 0.675783 -0.473535 40 -5.07376 0.571484 -0.472734 40 -5.09973 -0.205154 -0.472476 40 -5.0992 -0.165042 -0.472208 40 -5.06613 0.602864 -0.472198 40 -5.09675 -0.108899 -0.471672 40 -5.09375 -0.148877 -0.471405 40 -5.06654 0.546456 -0.471397 40 -5.05534 0.641856 -0.471395 40 -5.05635 0.617776 -0.471128 40 -5.05816 0.585755 -0.470861 40 -5.08627 -0.132709 -0.470335 40 -5.08565 -0.0607792 -0.470067 40 -5.06002 0.513561 -0.47006 40 -5.06738 0.385917 -0.469526 40 -5.05996 0.473414 -0.469525 40 -5.05444 0.529021 -0.469524 40 -5.05647 0.489106 -0.469258 40 -5.06539 0.329759 -0.468725 40 -5.07156 -0.0766166 -0.468195 40 -5.04958 0.456384 -0.467921 40 -5.06734 -0.092496 -0.46766 40 -5.06805 -0.0367741 -0.467659 40 -5.0662 -0.00493777 -0.467391 40 -5.05333 0.360823 -0.467387 40 -5.04773 0.432224 -0.467386 40 -5.05807 0.249509 -0.467121 40 -5.05595 0.289226 -0.46712 40 -5.04709 0.416192 -0.467119 40 -5.06219 -0.020858 -0.466857 40 -5.0622 0.0189007 -0.466856 40 -5.05821 0.201738 -0.466854 40 -5.04639 0.400167 -0.466851 40 -5.06 0.0506774 -0.466588 40 -5.0597 0.0745212 -0.466588 40 -5.05913 0.106311 -0.466588 40 -5.05766 0.161931 -0.466587 40 -5.05713 0.177819 -0.466587 40 -5.2179 0.975447 -0.466225 40 -5.05418 0.145907 -0.466052 40 -5.05419 0.0347078 -0.465786 40 -5.04963 0.217246 -0.465784 40 -5.04258 0.344076 -0.465782 40 -5.04315 0.304332 -0.465515 40 -5.04298 0.272522 -0.465248 40 -5.04755 0.0901418 -0.464983 40 -5.04689 0.121855 -0.464983 40 -5.04299 0.232803 -0.464981 40 -5.19945 0.955212 -0.463422 40 -5.25735 -0.449747 -0.462165 59 -5.17263 0.925266 -0.459344 40 -5.21588 -0.396495 -0.456302 40 -5.21065 -0.412545 -0.455792 40 -5.14422 0.903675 -0.455266 40 -5.40792 -0.468658 -0.454497 90 -5.19352 -0.427533 -0.453753 40 -5.13334 0.885219 -0.453482 40 -5.18802 -0.369648 -0.452478 40 -5.12962 0.859745 -0.452462 40 -5.18124 -0.352769 -0.451459 40 -5.12316 0.825663 -0.450934 40 -5.17045 -0.335659 -0.449929 40 -5.11271 0.840506 -0.449914 40 -5.16987 -0.278555 -0.449419 40 -5.16604 -0.310904 -0.449164 40 -5.16105 -0.294303 -0.448399 40 -5.1022 0.805968 -0.447875 40 -5.10641 0.765586 -0.447621 40 -5.10398 0.781626 -0.447621 40 -5.15605 -0.237133 -0.447379 40 -5.1533 -0.253223 -0.447124 40 -5.27289 0.988113 -0.446638 40 -5.1044 0.724383 -0.446602 40 -5.14488 -0.220365 -0.445849 40 -5.14253 -0.107026 -0.445084 40 -5.13564 -0.203758 -0.444575 40 -5.07933 0.74537 -0.443798 40 -5.13027 -0.122835 -0.443554 40 -5.12717 -0.163051 -0.4433 40 -5.08328 0.688963 -0.443289 40 -5.08109 0.704929 -0.443289 40 -5.12465 -0.179078 -0.443045 40 -5.12567 -0.146875 -0.443045 40 -5.12499 -0.0904623 -0.442789 40 -5.1238 0.00616005 -0.442533 40 -5.08066 0.648054 -0.44227 40 -5.0786 0.664011 -0.44227 40 -5.11743 -0.0661677 -0.44177 40 -5.30716 -0.435234 -0.441757 40 -5.08142 0.575313 -0.441251 40 -5.11179 -0.0339425 -0.441004 40 -5.11187 -0.0178842 -0.441004 40 -5.07282 0.630915 -0.440996 40 -5.22916 0.962688 -0.440759 40 -5.10978 0.0383194 -0.440749 40 -5.08184 0.534991 -0.440742 40 -5.10617 0.134582 -0.440493 40 -5.22973 0.937317 -0.440269 40 -5.10571 -0.0499146 -0.44024 40 -5.10476 0.110486 -0.440238 40 -5.06493 0.613833 -0.439721 40 -5.0994 0.0783482 -0.439474 40 -5.0694 0.557897 -0.439467 40 -5.09764 0.0623131 -0.439219 40 -5.22289 0.919114 -0.439044 56 -5.09516 0.0943139 -0.438964 40 -5.06185 0.589299 -0.438957 40 -5.094 0.0222777 -0.43871 40 -5.07119 0.389408 -0.437685 40 -5.0598 0.516726 -0.437684 40 -5.21402 0.900616 -0.437575 61 -5.0535 0.500086 -0.436664 40 -5.0553 0.460211 -0.43641 40 -5.05611 0.428281 -0.436156 40 -5.05185 0.475915 -0.436155 40 -5.26425 -0.398656 -0.436122 40 -5.06953 0.165679 -0.435904 40 -5.05412 0.404154 -0.435646 40 -5.25703 -0.414753 -0.435387 40 -5.05638 0.316542 -0.435137 40 -5.05429 0.348305 -0.435137 40 -5.05758 0.260834 -0.434883 40 -5.05338 0.332306 -0.434882 40 -5.05062 0.371985 -0.434882 40 -5.04485 0.443346 -0.434881 40 -5.06011 0.149509 -0.43463 40 -5.19278 0.871639 -0.43439 60 -5.05277 0.276525 -0.434373 40 -5.05188 0.292397 -0.434373 40 -5.05352 0.220875 -0.434119 40 -5.05243 0.244686 -0.434119 40 -5.05283 0.189054 -0.433865 40 -5.18767 0.853993 -0.433411 64 -5.19478 0.796589 -0.433167 65 -5.18834 0.812272 -0.432676 62 -5.04031 0.204507 -0.432335 40 -5.23354 -0.355182 -0.431957 40 -5.2225 -0.370967 -0.430732 56 -5.16879 0.834105 -0.430716 61 -5.22076 -0.337909 -0.430242 61 -5.16588 0.775395 -0.429247 63 -5.16633 0.758865 -0.429002 65 -5.2104 -0.312649 -0.428771 66 -5.16395 0.733643 -0.428268 65 -5.1606 0.700076 -0.427288 69 -5.15641 0.716003 -0.427043 62 -5.19352 -0.295354 -0.426566 64 -5.19442 -0.279035 -0.426566 63 -5.16489 0.585261 -0.426065 40 -5.18852 -0.237906 -0.425586 61 -5.15007 0.673878 -0.425574 62 -5.18338 -0.262174 -0.425096 62 -5.14823 0.657173 -0.425084 65 -5.18487 -0.180665 -0.42485 63 -5.18131 -0.221307 -0.424606 60 -5.14633 0.640487 -0.424594 65 -5.17603 -0.204822 -0.42387 61 -5.17748 -0.164164 -0.42387 64 -5.14304 0.566306 -0.423125 78 -5.13741 0.59837 -0.42288 40 -5.1355 0.614507 -0.42288 63 -5.16805 -0.147665 -0.422645 68 -5.16848 -0.131427 -0.422645 66 -5.14171 0.541629 -0.422636 68 -5.14106 0.508901 -0.422146 64 -5.16409 -0.0339758 -0.421909 67 -5.15912 -0.106914 -0.421419 67 -5.15943 -0.0907066 -0.421419 66 -5.15998 -0.050182 -0.421419 67 -5.13897 0.467938 -0.421412 65 -5.13351 0.524414 -0.421411 64 -5.13844 0.451607 -0.421167 64 -5.39577 -0.463478 -0.421052 60 -5.15427 0.00651967 -0.420683 102 -5.15214 0.0388802 -0.420438 66 -5.15027 -0.0177754 -0.420193 72 -5.12562 0.482904 -0.419942 61 -5.1458 -0.0743652 -0.419704 66 -5.14629 0.0226375 -0.419703 40 -5.14406 0.05494 -0.419457 68 -5.14374 0.0791811 -0.419457 65 -5.1343 0.321396 -0.419454 61 -5.13554 0.264812 -0.41921 63 -5.13129 0.337386 -0.419209 60 -5.12469 0.425991 -0.419207 66 -5.1395 0.0952469 -0.418967 67 -5.13481 0.192017 -0.418721 66 -5.13417 0.151614 -0.418476 67 -5.12874 0.280589 -0.418475 61 -5.12426 0.353064 -0.418474 64 -5.30337 0.972565 -0.418233 20 -5.13322 0.111233 -0.418232 66 -5.11809 0.409218 -0.418228 66 -5.12755 0.223986 -0.417985 69 -5.11858 0.376897 -0.417983 64 -5.12867 0.135297 -0.417742 67 -5.12772 0.167518 -0.417741 65 -5.11991 0.296202 -0.417494 62 -5.11342 0.39265 -0.417493 63 -5.1203 0.207514 -0.417006 64 -5.11691 0.239579 -0.41676 61 -5.2927 0.9535 -0.4166 20 -5.28631 0.909611 -0.414967 20 -5.26972 0.92388 -0.413334 20 -5.26758 0.889467 -0.412401 20 -5.26387 0.863385 -0.411469 20 -5.30946 -0.396864 -0.410319 20 -5.25281 0.844703 -0.409836 20 -5.2917 -0.420544 -0.408453 20 -5.24623 0.809922 -0.408436 20 -5.24366 0.8264 -0.408436 20 -5.24456 0.767582 -0.407504 20 -5.23819 0.783486 -0.407037 20 -5.27899 -0.377759 -0.406586 20 -5.2389 0.708076 -0.405872 20 -5.27291 -0.319043 -0.405419 20 -5.26887 -0.285553 -0.404718 20 -5.26198 -0.334927 -0.404252 20 -5.2273 0.689861 -0.404239 20 -5.22287 0.722692 -0.404238 20 -5.25836 -0.359574 -0.404019 20 -5.22261 0.664257 -0.403306 20 -5.22469 0.614562 -0.40284 20 -5.25309 -0.243249 -0.402618 20 -5.23172 0.532229 -0.402608 20 -5.20366 0.745121 -0.402371 20 -5.24019 -0.300377 -0.401452 20 -5.20892 0.629373 -0.401207 20 -5.23842 -0.258995 -0.400985 20 -5.2096 0.571441 -0.400508 20 -5.19903 0.644795 -0.400273 20 -5.23362 -0.184595 -0.400051 20 -5.23292 -0.143422 -0.399817 20 -5.19988 0.586952 -0.399574 20 -5.22606 -0.225407 -0.399352 20 -5.22508 -0.200693 -0.399118 20 -5.22425 -0.167785 -0.398884 20 -5.22541 -0.126749 -0.398884 20 -5.20559 0.47196 -0.398876 20 -5.19754 0.553668 -0.398875 20 -5.22379 -0.11028 -0.39865 20 -5.22469 -0.0528356 -0.39865 20 -5.19777 0.512459 -0.398409 20 -5.22039 0.0784379 -0.398181 20 -5.20382 0.397757 -0.397944 20 -5.21688 -0.0363276 -0.397716 20 -5.20793 0.307679 -0.397712 20 -5.19715 0.454787 -0.39771 20 -5.19342 0.495592 -0.397709 20 -5.19657 0.4383 -0.397477 20 -5.21059 -0.068996 -0.397017 20 -5.19711 0.380864 -0.397011 20 -5.20902 0.021044 -0.396782 20 -5.82768 -0.500554 -0.39639 56 -5.20227 -0.0933683 -0.396084 20 -5.20291 0.045568 -0.396082 20 -5.20026 0.0945762 -0.395848 20 -5.19755 0.192577 -0.395847 20 -5.19431 0.266033 -0.395846 20 -5.19913 0.00471966 -0.395616 20 -5.19777 0.119045 -0.395614 20 -5.19737 0.135374 -0.395614 20 -5.19115 0.249542 -0.395379 20 -5.19479 0.0618586 -0.395149 20 -5.19218 0.176073 -0.395147 20 -5.18993 0.233154 -0.395146 20 -5.1875 0.282055 -0.395146 20 -5.18243 0.363504 -0.395144 20 -5.19316 -0.0115698 -0.394916 20 -5.18501 0.208484 -0.394447 20 -5.17218 0.420011 -0.394444 20 -5.17322 0.322109 -0.393745 20 -5.1702 0.33824 -0.393512 20 -5.17508 0.151173 -0.393048 20 -8.79701 0.385055 -0.386455 59 -8.78627 0.481449 -0.386047 75 -8.7853 0.329292 -0.385507 83 -8.78422 0.35689 -0.385506 87 -8.78562 0.260229 -0.385372 59 -8.78276 0.287768 -0.385236 43 -8.77516 0.425598 -0.385099 85 -8.77179 0.453065 -0.384963 85 -8.77243 0.2323 -0.384423 80 -8.76514 0.204577 -0.383882 43 -6.85255 -0.353261 -0.383819 61 -5.9621 -0.4869 -0.378117 40 -6.77481 -0.125803 -0.376366 87 -6.76704 -0.200135 -0.375847 85 -6.7698 -0.0512827 -0.375846 83 -6.20495 1.14898 -0.375706 40 -6.7672 -0.104427 -0.375673 105 -6.76562 -0.0725233 -0.3755 96 -6.76242 -0.146874 -0.375327 122 -6.74971 -0.178468 -0.374288 118 -6.75203 0.0230271 -0.374286 86 -6.75 -0.0300023 -0.374113 81 -6.75007 -0.00879762 -0.374113 76 -5.5449 0.999733 -0.373949 40 -6.73868 -0.315997 -0.373769 143 -6.74053 -0.273652 -0.373769 85 -6.7365 -0.220529 -0.373249 127 -6.72941 -0.252071 -0.372729 115 -6.72801 0.0439907 -0.372206 66 -6.71177 -0.293713 -0.371343 125 -5.54636 0.776735 -0.370423 40 -5.53497 0.757484 -0.36897 40 -5.52434 0.818015 -0.368761 40 -5.51639 0.870044 -0.368761 54 -5.49117 0.972514 -0.367929 40 -5.57053 -0.213677 -0.367736 40 -5.50925 0.851236 -0.367723 83 -5.56511 -0.248477 -0.367321 40 -5.51237 0.78979 -0.367101 40 -5.506 0.833059 -0.3671 40 -5.56154 -0.187042 -0.366697 40 -5.5626 -0.152095 -0.366697 40 -5.48243 0.953267 -0.366683 42 -5.56011 -0.169501 -0.366489 40 -5.55394 -0.230441 -0.366075 40 -5.54814 -0.308812 -0.365868 44 -5.54516 -0.326116 -0.36566 81 -5.50494 0.727121 -0.365441 40 -5.54934 -0.1255 -0.365243 40 -5.55002 -0.0906292 -0.365243 40 -5.47115 0.924844 -0.365023 88 -5.49535 0.708354 -0.364195 40 -5.53777 -0.107778 -0.363997 40 -5.52519 0.326828 -0.363577 40 -5.46028 0.905438 -0.36357 73 -5.52525 -0.290018 -0.363376 40 -5.51423 -0.428615 -0.36317 40 -5.53039 -0.0728384 -0.363167 40 -5.53085 -0.012025 -0.363166 40 -5.48767 0.689892 -0.363157 40 -5.51545 -0.385145 -0.362962 40 -5.52216 -0.272445 -0.362961 40 -5.52868 -0.0467504 -0.362959 40 -5.52117 0.291818 -0.362955 40 -5.51159 -0.410973 -0.362754 40 -5.51266 -0.367531 -0.362546 40 -5.52482 -0.0293413 -0.362543 40 -5.45328 0.886729 -0.362532 73 -5.51884 0.0314025 -0.36192 40 -7.02763 0.276383 -0.361722 51 -5.51014 0.273936 -0.361709 40 -5.51284 0.152659 -0.361503 40 -5.51177 0.187295 -0.361503 40 -5.51035 0.169926 -0.361295 40 -5.51096 0.01408 -0.361089 40 -5.49287 0.446422 -0.361084 66 -5.50591 0.109237 -0.360673 40 -5.50424 0.0919159 -0.360466 40 -7.01253 0.253788 -0.36042 72 -5.50157 0.12646 -0.360258 40 -7.00833 0.308775 -0.360257 40 -5.4944 0.307839 -0.360256 40 -5.48997 -0.348587 -0.360055 63 -5.50081 0.0486655 -0.360051 40 -5.48983 0.350865 -0.360047 40 -5.4761 0.523132 -0.360045 40 -7.00334 0.330618 -0.359931 40 -5.49294 0.212658 -0.359634 40 -5.48355 0.385091 -0.359632 40 -5.48035 0.428146 -0.359631 62 -7.00134 0.231405 -0.359444 115 -5.47969 0.410787 -0.359424 40 -5.47177 0.505403 -0.359423 40 -6.9943 0.352247 -0.35928 40 -5.48628 0.229691 -0.359011 40 -5.47161 0.462098 -0.359008 60 -5.48354 0.246847 -0.358803 40 -5.48461 0.0744473 -0.35839 40 -5.47282 0.367119 -0.358386 40 -5.46144 0.487207 -0.358177 40 -5.45401 0.564366 -0.358176 40 -5.44747 0.6243 -0.358175 77 -5.43949 0.658055 -0.35776 40 -5.43955 0.640741 -0.357552 53 -5.44783 0.546471 -0.357346 40 -5.44231 0.580489 -0.357138 40 -5.43754 0.605917 -0.35693 77 -5.63721 1.01127 -0.352894 40 -5.63328 0.928481 -0.351123 40 -6.89189 -0.324257 -0.350824 40 -5.63225 0.910127 -0.35073 40 -5.62272 0.881356 -0.349352 40 -5.59727 0.985761 -0.348563 40 -5.61366 0.861821 -0.348171 40 -5.61438 0.843875 -0.347974 40 -5.5925 0.96678 -0.347775 40 -5.61042 0.816226 -0.347187 40 -5.58523 0.938384 -0.346594 40 -5.60756 0.779826 -0.3464 40 -5.64778 -0.364525 -0.346216 40 -5.6021 0.761099 -0.345612 40 -6.82534 0.376613 -0.345608 40 -6.77363 0.889171 -0.345276 133 -5.5997 0.733887 -0.345022 40 -6.81807 -0.363461 -0.344966 40 -5.63499 -0.345991 -0.344838 40 -5.58933 0.795124 -0.344824 40 -6.81576 -0.0203505 -0.343986 88 -5.59014 0.714723 -0.343841 40 -6.8062 -0.14861 -0.343336 91 -6.80715 -0.0951497 -0.343335 86 -6.80742 -0.0737635 -0.343335 88 -5.59376 0.634924 -0.343251 40 -6.80379 0.0224813 -0.343009 82 -6.79817 -0.223219 -0.342849 84 -5.58581 0.651775 -0.34266 40 -6.79573 -0.169703 -0.342523 88 -6.79772 -0.0415848 -0.342521 83 -5.60764 -0.397505 -0.342475 40 -6.79287 -0.116241 -0.342196 86 -6.79365 0.0545009 -0.342195 84 -6.79344 0.0758438 -0.342194 82 -5.60489 -0.379636 -0.342081 40 -6.78668 -0.2655 -0.342035 84 -6.78748 -0.244177 -0.342035 82 -5.57583 0.668337 -0.341872 40 -5.57262 0.694603 -0.341872 40 -6.78988 0.00115707 -0.34187 82 -5.59578 -0.423222 -0.341491 40 -6.78122 -0.190606 -0.341384 86 -6.77922 0.0970398 -0.341055 78 -6.77187 -0.286177 -0.340896 71 -5.55109 0.585738 -0.338526 40 -5.55093 0.568084 -0.338329 40 -5.55642 0.489372 -0.338133 40 -5.57496 0.104429 -0.337941 40 -6.33336 0.0597822 -0.3379 40 -5.5473 0.523685 -0.337542 40 -5.56765 0.0605168 -0.337154 40 -5.54875 0.462309 -0.337149 40 -5.56596 -0.0181996 -0.336958 40 -5.55505 0.348779 -0.336954 40 -5.56399 0.00801706 -0.336761 40 -5.56383 0.0429769 -0.33676 40 -5.55587 0.261277 -0.336561 40 -5.54996 0.365949 -0.33656 40 -5.55996 0.0254589 -0.336367 40 -5.55805 0.147714 -0.336365 40 -5.55467 0.243723 -0.336364 40 -5.53289 0.548586 -0.33636 40 -5.54026 0.444034 -0.336165 40 -5.53505 0.504924 -0.336164 40 -5.55144 0.226092 -0.335971 40 -5.78895 1.05494 -0.335928 40 -5.55073 0.121309 -0.335578 40 -5.54647 0.199686 -0.33538 40 -5.54074 0.321601 -0.335379 40 -5.53564 0.399896 -0.335378 40 -6.65176 0.852407 -0.335023 40 -5.54364 0.164695 -0.334987 40 -5.5431 0.182109 -0.334986 40 -5.53775 0.303957 -0.334985 40 -5.53092 0.382065 -0.334787 40 -5.5347 0.286332 -0.334591 40 -5.77458 1.03367 -0.334256 40 -8.74651 0.373314 -0.334008 81 -5.51981 0.424844 -0.333999 40 -8.7433 0.400693 -0.333884 80 -8.73862 0.455512 -0.333759 80 -8.74219 0.331848 -0.333636 82 -8.74263 0.180656 -0.333389 51 -8.72442 0.495971 -0.333013 81 -8.72615 0.276292 -0.332518 78 -6.6629 0.389263 -0.332426 108 -8.71808 0.426915 -0.332392 80 -8.72007 0.207536 -0.332021 85 -8.71937 0.234928 -0.332021 84 -8.71726 0.303402 -0.332021 75 -6.63378 0.408589 -0.330147 97 -5.78435 -0.530377 -0.328884 43 -5.78481 -0.502932 -0.328698 40 -5.77275 -0.547561 -0.327955 40 -6.59598 0.437609 -0.327217 99 -6.59457 0.458329 -0.327217 113 -8.59791 -0.39027 -0.324818 40 -7.86629 -0.38249 -0.323318 40 -5.7209 -0.478977 -0.322564 40 -5.64152 0.901142 -0.319945 40 -5.6266 0.880725 -0.318272 40 -5.6294 0.835938 -0.317901 40 -5.61702 0.915437 -0.3179 40 -5.62478 0.85333 -0.317715 40 -6.48204 -0.37491 -0.317624 40 -5.62214 0.816862 -0.316972 40 -5.61284 0.797569 -0.315857 40 -5.62421 0.610784 -0.314744 40 -5.62226 0.62845 -0.314744 40 -5.62016 0.592514 -0.314187 40 -5.62067 0.547987 -0.313816 40 -5.61694 0.565451 -0.31363 40 -5.59088 0.767708 -0.313441 40 -5.91939 1.23443 -0.312933 55 -5.55361 0.968152 -0.31288 54 -5.55369 0.932278 -0.312323 56 -5.55073 0.949721 -0.312323 40 -5.58176 0.730818 -0.31214 40 -5.57746 0.748094 -0.311954 40 -5.60298 0.501972 -0.311772 40 -5.59856 0.52819 -0.311585 40 -5.60554 0.422433 -0.311401 40 -5.90563 1.20247 -0.311201 81 -5.90743 1.18351 -0.311028 86 -5.57328 0.703066 -0.311025 40 -5.61312 -0.0626996 -0.310663 40 -5.57151 0.685086 -0.310654 40 -5.59425 0.439308 -0.310471 40 -5.59996 -0.326794 -0.310294 40 -5.60946 0.0166636 -0.310291 40 -5.58865 0.483069 -0.310285 40 -5.59493 -0.344121 -0.309923 40 -5.60532 -0.044964 -0.30992 40 -5.59219 0.38618 -0.309914 40 -5.56682 0.640214 -0.309725 40 -5.60149 -0.0185177 -0.309547 40 -5.60152 -0.000919762 -0.309547 40 -5.60142 0.0342761 -0.309547 40 -5.56176 0.666213 -0.309539 40 -5.59896 -0.0800683 -0.309362 40 -5.58498 0.403344 -0.309356 40 -5.89159 1.161 -0.309296 94 -5.59254 -0.106312 -0.308805 40 -5.57227 0.464104 -0.308612 40 -5.57396 -0.36032 -0.308064 40 -5.56562 -0.447659 -0.307879 47 -5.56822 -0.386289 -0.307692 40 -5.87744 1.12938 -0.307564 94 -5.57114 -0.307416 -0.307506 40 -5.87705 1.11016 -0.307218 83 -5.54981 -0.419992 -0.306206 40 -5.5511 -0.402553 -0.306206 40 -5.86876 1.08946 -0.306178 75 -5.5535 -0.262617 -0.305647 40 -5.55605 -0.201539 -0.305646 40 -5.5561 0.200101 -0.305641 50 -5.92281 -0.674181 -0.305507 86 -5.55635 -0.122919 -0.305459 40 -5.54733 0.33955 -0.305454 40 -5.92394 -0.646054 -0.305334 76 -5.54833 -0.244877 -0.305089 40 -5.55041 0.121398 -0.304899 106 -5.53828 0.356502 -0.30471 40 -5.54078 0.278083 -0.304525 40 -5.85424 1.05816 -0.304446 137 -5.54273 -0.183555 -0.304345 40 -5.53789 0.295391 -0.304339 40 -5.91404 -0.626233 -0.304294 84 -7.01441 0.231992 -0.304284 40 -7.01144 0.198808 -0.303991 40 -5.53475 -0.279076 -0.303974 40 -5.5277 0.260085 -0.303224 40 -5.52555 -0.217676 -0.302858 40 -5.52565 0.15571 -0.302668 128 -5.89417 -0.605508 -0.302388 87 -5.52331 0.0775419 -0.302297 112 -5.52304 0.0948951 -0.302297 108 -5.51964 -0.156643 -0.302114 40 -5.52154 0.0601782 -0.302111 169 -5.51815 0.138189 -0.301925 86 -5.51689 0.181522 -0.301924 81 -5.89009 -0.586423 -0.301868 93 -5.91018 -0.326878 -0.301865 40 -5.81637 1.03227 -0.300808 102 -5.49866 0.319469 -0.300807 40 -5.50419 -0.138826 -0.300627 40 -5.87427 -0.473333 -0.299614 42 -5.86501 -0.556148 -0.299442 83 -5.83148 0.837541 -0.299425 40 -5.8568 -0.536854 -0.298575 80 -5.47514 0.232011 -0.298206 40 -5.84655 -0.51745 -0.297536 156 -5.75779 0.872864 -0.293533 40 -5.74879 0.917734 -0.293359 40 -6.78579 0.911322 -0.29166 40 -5.75971 0.679584 -0.291457 40 -5.78335 0.407359 -0.291288 40 -5.78494 0.352706 -0.291115 40 -5.78062 0.388903 -0.290942 40 -5.75793 0.642692 -0.290938 40 -5.74854 0.705711 -0.290764 40 -5.77386 0.370195 -0.290249 40 -5.74797 0.659832 -0.290245 40 -5.72111 0.848744 -0.290069 40 -5.7137 0.884361 -0.289895 40 -5.75058 0.559613 -0.289553 40 -5.72169 0.802928 -0.289549 40 -6.80131 0.395484 -0.289172 40 -5.76267 0.323991 -0.289036 40 -5.73903 0.594876 -0.288859 40 -5.74675 0.468194 -0.288515 40 -5.7476 0.431918 -0.288342 40 -5.73119 0.612242 -0.288339 40 -5.71037 0.782991 -0.288337 40 -6.79816 0.0958087 -0.288148 40 -5.75173 0.305199 -0.287997 40 -5.74224 0.449644 -0.287995 40 -6.79086 -0.000333956 -0.287562 40 -5.72502 0.575178 -0.287474 40 -6.78228 -0.298835 -0.287418 40 -5.73059 0.494008 -0.287301 40 -5.70096 0.763408 -0.287298 40 -5.72539 0.529813 -0.287128 40 -6.78216 -0.192171 -0.287123 40 -6.78484 -0.0216722 -0.287122 40 -6.78484 0.0209575 -0.287122 40 -5.6677 0.968487 -0.287121 44 -6.78123 -0.149516 -0.286976 40 -6.7822 -0.0962509 -0.286976 40 -6.77719 -0.22401 -0.28683 40 -6.77874 -0.170776 -0.28683 40 -6.78068 0.0528849 -0.286828 40 -5.73873 0.286368 -0.286785 40 -6.77246 -0.245173 -0.286537 40 -6.77669 -0.0536136 -0.286535 40 -6.76421 0.414515 -0.286531 40 -5.7191 0.511077 -0.286435 40 -6.77449 -0.0748872 -0.286389 40 -6.77371 0.127303 -0.286387 40 -5.69493 0.717063 -0.286259 40 -5.65286 0.984185 -0.286081 77 -6.76368 -0.266164 -0.28595 40 -6.76729 0.148427 -0.285947 40 -8.79885 0.626195 -0.285931 76 -5.65941 0.921311 -0.285736 73 -6.76391 -0.117317 -0.285656 40 -8.79751 0.55671 -0.285595 80 -8.80251 0.432193 -0.285484 80 -8.79523 0.528841 -0.28537 84 -5.6506 0.938081 -0.285216 102 -6.75854 0.0738614 -0.285214 40 -8.79364 0.487177 -0.285146 86 -5.96877 1.23008 -0.285053 40 -5.67882 0.733101 -0.285046 40 -8.79976 0.307455 -0.285035 86 -8.79861 0.210598 -0.284812 86 -8.79871 0.0861785 -0.2847 46 -8.77978 0.583332 -0.284695 79 -8.796 0.141433 -0.284587 87 -8.78786 0.403851 -0.284585 86 -8.79192 0.238092 -0.284474 73 -8.79152 0.169003 -0.284362 90 -8.78714 0.265605 -0.284249 49 -8.78368 0.362206 -0.284248 85 -8.77717 0.458666 -0.284135 86 -8.76881 0.33405 -0.283349 86 -5.95672 1.179 -0.283264 40 -5.94718 1.20628 -0.282938 40 -8.76445 0.113482 -0.282789 51 -5.94668 1.15767 -0.282125 40 -5.66041 -0.394479 -0.280555 44 -5.65963 -0.376569 -0.280381 40 -5.6588 -0.358671 -0.280208 60 -8.70921 -0.325017 -0.279982 40 -5.6472 -0.438197 -0.279689 53 -8.69561 -0.365517 -0.279308 40 -5.64125 -0.411038 -0.278996 40 -5.9947 -0.534182 -0.278893 40 -5.63854 -0.330817 -0.278302 40 -5.97146 -0.683721 -0.278243 40 -8.67447 -0.391871 -0.278184 40 -5.63974 0.0769688 -0.277604 127 -5.96566 -0.664042 -0.277592 40 -6.60148 0.812031 -0.277284 40 -5.90355 1.06314 -0.277244 137 -6.60004 0.790799 -0.276991 40 -5.62704 0.191725 -0.276736 147 -5.6221 0.218067 -0.27639 128 -5.62262 0.138508 -0.276217 150 -5.87779 1.12543 -0.276104 40 -5.61818 0.156042 -0.275871 159 -6.61164 0.425434 -0.275382 40 -5.6097 0.173409 -0.275177 164 -5.938 -0.641952 -0.27515 40 -5.60529 0.111571 -0.274658 143 -5.93105 -0.612896 -0.274336 40 -5.60163 0.0938751 -0.274312 174 -6.58426 0.527563 -0.273914 70 -5.92304 -0.593224 -0.273523 40 -6.58025 0.475228 -0.273327 91 -6.57574 0.454117 -0.272887 60 -5.90901 -0.573003 -0.27222 40 -6.56281 0.494636 -0.272153 112 -6.54482 0.54495 -0.271126 79 -5.89094 -0.552489 -0.270593 40 -5.78197 0.995008 -0.266504 40 -5.78954 0.912265 -0.266017 40 -7.57612 0.943526 -0.264276 40 -5.74678 0.952001 -0.263087 40 -5.72802 0.967465 -0.261785 40 -6.91918 0.41738 -0.259219 146 -5.7347 -0.410119 -0.256921 40 -5.73827 0.113176 -0.256101 50 -6.82573 0.877252 -0.255826 40 -6.7994 0.830596 -0.253658 44 -6.7893 0.894388 -0.253522 60 -6.8043 0.432334 -0.251495 79 -6.80808 -0.284663 -0.251231 119 -6.8107 -0.134842 -0.251094 97 -6.81109 -0.113445 -0.251094 100 -6.81179 0.0577561 -0.251092 79 -6.80794 -0.0385075 -0.250822 87 -6.80803 0.0149611 -0.250822 97 -6.80745 0.0898158 -0.250821 94 -6.80345 -0.18814 -0.250688 84 -6.79719 -0.305562 -0.250553 54 -6.80014 -0.230807 -0.250553 86 -6.80083 -0.209443 -0.250553 87 -6.80379 -0.0598467 -0.250551 93 -6.80315 0.111154 -0.25055 99 -6.79958 -0.081157 -0.25028 90 -6.79997 0.0363373 -0.250279 100 -6.791 -0.262512 -0.250011 89 -6.79605 -0.017045 -0.250009 84 -6.79229 -0.155756 -0.249875 79 -5.65772 0.147516 -0.249591 56 -5.65298 0.174073 -0.249265 40 -6.73385 0.790667 -0.248916 89 -6.70495 0.937207 -0.248237 40 -6.68948 0.988702 -0.247694 40 -5.61431 0.128938 -0.246011 52 -6.70134 0.447325 -0.244584 90 -6.67085 0.762287 -0.244445 92 -6.68796 0.467586 -0.243771 107 -6.66252 0.539561 -0.242415 85 -6.63155 0.736859 -0.2416 81 -6.64399 0.56965 -0.241331 95 -8.0171 -0.385445 -0.2412 40 -6.63632 0.516568 -0.240518 122 -6.62597 0.494873 -0.239706 117 -6.61632 0.588324 -0.239569 81 -8.87191 -0.318688 -0.239443 154 -6.60139 0.681206 -0.239161 70 -6.58363 0.658557 -0.237807 86 -6.58269 0.627162 -0.237536 99 -6.57866 0.605952 -0.23713 117 -6.56547 0.698488 -0.236858 124 -7.12242 0.965128 -0.236434 47 -8.77236 0.36014 -0.234479 65 -8.7644 0.484001 -0.234376 82 -8.74947 0.704098 -0.234374 48 -7.84713 0.934378 -0.234217 61 -8.76394 0.414951 -0.234174 85 -8.74766 0.67629 -0.234172 103 -8.76321 0.387321 -0.234073 81 -8.75486 0.511044 -0.233971 82 -8.74676 0.634757 -0.23397 72 -8.76496 0.221966 -0.233873 86 -8.76323 0.0979805 -0.233672 86 -8.76219 0.166803 -0.233671 87 -8.75982 0.263137 -0.23367 77 -8.75262 0.441949 -0.233668 81 -8.74723 0.538161 -0.233667 77 -8.73329 0.730376 -0.233665 52 -8.75962 0.19428 -0.23357 87 -8.74074 0.6067 -0.233565 65 -8.74062 0.579097 -0.233464 115 -8.75568 0.0428541 -0.233268 89 -8.75163 -0.0534084 -0.233066 77 -8.7489 0.125267 -0.232963 87 -8.74403 0.317621 -0.232961 63 -7.82763 0.894744 -0.232869 55 -8.74779 0.0015688 -0.232863 63 -6.53249 -0.364675 -0.232803 40 -8.74153 -0.273151 -0.232765 85 -8.74307 -0.218223 -0.232764 75 -8.74099 0.290004 -0.232759 65 -8.74329 -0.0945836 -0.232662 70 -8.74352 0.0702292 -0.23266 89 -8.73972 -0.190677 -0.232561 88 -8.73777 -0.0259117 -0.232358 118 -8.73453 -0.149405 -0.232258 121 -8.73036 -0.245386 -0.232157 65 -8.65727 -0.338841 -0.228617 57 -7.72121 0.944404 -0.227247 40 -7.71028 0.967688 -0.226797 40 -6.90462 0.430629 -0.219662 63 -6.89104 -0.263751 -0.218302 148 -6.30246 -0.400605 -0.217357 40 -6.77187 0.992312 -0.215056 40 -6.78929 0.799507 -0.214562 86 -6.80991 0.499607 -0.214068 102 -6.77019 0.872796 -0.213939 40 -6.80349 0.477622 -0.213571 89 -6.79753 0.530877 -0.213446 94 -6.75555 0.892447 -0.213193 40 -6.79842 -0.281944 -0.212584 40 -6.78902 0.455115 -0.212577 77 -6.79574 -0.185667 -0.212211 91 -6.79569 -0.0895617 -0.212086 87 -6.79626 -0.0148348 -0.212085 102 -6.79008 -0.23891 -0.211963 71 -6.79417 0.0385239 -0.21196 91 -6.791 -0.132195 -0.211837 91 -6.78714 -0.206805 -0.211714 61 -6.79002 0.0598166 -0.211711 96 -6.78631 -0.164115 -0.211589 94 -6.78595 -0.0681513 -0.211464 78 -6.7843 0.00645937 -0.211339 88 -6.78336 0.113022 -0.211338 86 -6.76848 0.400275 -0.211086 44 -6.77821 -0.0361593 -0.210966 81 -6.77342 -0.110635 -0.210719 89 -6.77384 0.0808977 -0.210717 92 -6.7331 -0.353671 -0.208732 40 -6.6772 0.935234 -0.208718 40 -6.64658 0.952138 -0.206978 40 -6.70427 -0.331154 -0.206868 40 -6.64911 0.581831 -0.204497 86 -6.63897 0.559887 -0.203751 99 -6.63274 0.53835 -0.203254 105 -5.97937 1.21557 -0.202839 40 -5.96945 1.19409 -0.201891 40 -5.96534 1.17383 -0.201349 40 -7.31137 -0.245675 -0.20118 40 -6.57173 0.752115 -0.200766 63 -5.93942 1.13982 -0.199182 40 -6.53701 0.602647 -0.197661 67 -6.52515 0.622194 -0.197039 133 -5.90961 1.11501 -0.196879 40 -6.48992 0.711445 -0.195422 89 -6.49139 0.639432 -0.19505 69 -5.8856 1.09146 -0.194982 50 -5.94463 -0.630443 -0.194459 40 -6.47441 0.668525 -0.19418 110 -6.4703 0.688641 -0.194055 125 -5.93269 -0.610272 -0.19351 40 -5.94072 -0.526343 -0.19351 40 -5.93259 -0.591426 -0.193375 40 -5.93308 -0.544432 -0.193103 40 -5.91943 -0.561884 -0.19229 40 -7.81703 0.936463 -0.188536 49 -8.85459 -0.323516 -0.188273 31 -5.85666 -0.453662 -0.187412 40 -6.99949 0.936767 -0.18689 40 -5.7932 0.896962 -0.186584 41 -8.80558 0.439659 -0.186291 71 -8.81231 0.0658981 -0.186115 31 -5.7781 0.941185 -0.186041 40 -8.80188 0.287153 -0.185844 55 -5.77708 0.922416 -0.18577 40 -8.78453 0.563244 -0.185661 70 -8.78191 0.507709 -0.185392 76 -6.35544 -0.385359 -0.185366 40 -8.77223 0.465718 -0.184854 109 -8.7683 0.534602 -0.184853 105 -8.78209 0.093353 -0.184768 80 -8.78133 0.148531 -0.184768 78 -8.7759 0.217407 -0.184588 79 -8.75586 0.602926 -0.184494 96 -8.76572 -0.292435 -0.184233 94 -8.76976 0.120813 -0.184229 111 -5.74753 0.954877 -0.184144 41 -8.76318 0.244678 -0.184049 115 -8.76255 0.189575 -0.183959 111 -6.95078 0.54405 -0.181836 40 -8.69783 -0.344698 -0.181271 30 -7.66938 0.94274 -0.18115 62 -6.93221 0.575536 -0.180937 42 -8.67616 -0.384735 -0.180374 30 -7.64901 0.976794 -0.18034 53 -6.94135 -0.100993 -0.180157 65 -6.92058 0.519936 -0.180038 46 -6.93807 0.0189581 -0.179931 65 -6.92837 -0.155195 -0.179483 66 -6.90052 0.594851 -0.17925 40 -5.73865 -0.398664 -0.179146 40 -6.92411 -0.00277924 -0.179144 73 -6.91589 -0.0570647 -0.178695 51 -6.90886 -0.132967 -0.178359 88 -8.62302 -0.409373 -0.17804 58 -6.90099 -0.208721 -0.178022 56 -6.9037 -0.0786118 -0.178021 89 -6.89607 -0.0351617 -0.177571 59 -6.83541 0.882669 -0.177336 40 -6.88593 -0.175731 -0.177123 52 -6.88406 0.0406402 -0.176896 67 -6.81383 -0.377358 -0.173527 40 -6.75107 0.926039 -0.172951 40 -6.72439 0.944004 -0.171601 40 -6.69416 0.972049 -0.17014 40 -6.63574 0.985078 -0.166992 40 -6.68579 -0.41194 -0.166446 40 -6.68992 -0.338401 -0.166445 40 -6.64992 0.595242 -0.165198 40 -6.57794 0.714243 -0.161824 76 -6.58238 0.610305 -0.161488 93 -6.55978 0.733195 -0.160925 104 -6.54757 0.659102 -0.159802 124 -6.54762 0.638342 -0.15969 89 -6.53553 0.678677 -0.159239 99 -8.12613 0.947629 -0.157737 41 -5.81019 0.978683 -0.155769 40 -5.79209 0.928797 -0.154154 40 -5.77781 0.954412 -0.153533 40 -5.78316 0.908685 -0.153409 40 -8.01594 0.960658 -0.152889 28 -5.74328 -0.386974 -0.147334 71 -6.92139 -0.102043 -0.140387 99 -7.71333 0.949961 -0.139334 27 -6.75308 0.880886 -0.134709 104 -6.73445 0.899921 -0.133899 61 -6.69454 0.926579 -0.132078 54 -6.65404 0.942141 -0.130155 100 -5.9748 0.908762 -0.129558 40 -8.77191 0.201037 -0.128889 32 -8.75526 0.545136 -0.128809 32 -8.75651 0.489996 -0.128733 32 -8.75094 0.517256 -0.128578 32 -8.76007 0.269585 -0.128503 32 -8.75074 0.448292 -0.128425 32 -8.75525 0.22813 -0.128273 32 -8.73476 0.612714 -0.128192 84 -8.75052 0.172978 -0.128042 32 -8.7448 -0.308063 -0.127969 32 -8.74616 -0.266851 -0.127968 32 -8.7452 0.296591 -0.127964 32 -8.74324 0.131596 -0.127734 32 -8.73624 0.323742 -0.127655 32 -6.58918 0.985579 -0.12722 40 -8.72962 0.103921 -0.127195 32 -8.71072 0.583458 -0.127191 64 -8.72191 0.0763995 -0.126887 32 -5.87965 0.923056 -0.124387 40 -5.87176 0.959667 -0.124274 40 -5.8708 0.940601 -0.12405 40 -6.56047 0.562928 -0.12328 44 -6.52404 0.611329 -0.12166 163 -6.50938 0.733956 -0.121558 155 -5.88377 -0.405818 -0.121368 45 -6.51613 0.631221 -0.121357 102 -6.50482 0.702386 -0.121153 91 -6.50303 0.681513 -0.120951 119 -6.51002 0.589326 -0.120851 63 -6.49719 0.660241 -0.120547 138 -5.85713 -0.385372 -0.119794 40 -8.0781 0.974638 -0.104303 29 -8.06525 0.94734 -0.103687 29 -6.90519 0.875197 -0.102887 23 -6.87269 0.522254 -0.0998397 73 -6.8582 0.553713 -0.0993007 130 -6.86843 -0.169515 -0.0988602 80 -6.85038 0.499007 -0.0987627 110 -6.85789 -0.0937736 -0.0983208 67 -6.85853 0.00318296 -0.0983197 66 -6.84989 -0.190524 -0.0980525 65 -6.84939 -0.125914 -0.097962 65 -6.84496 -0.147329 -0.0977827 120 -6.84037 -0.0504825 -0.0975124 50 -6.78208 0.892537 -0.0975006 69 -6.83853 -0.0182333 -0.0974223 99 -6.83651 0.024734 -0.097332 48 -6.83418 -0.0718847 -0.0972433 58 -5.97439 0.948848 -0.096158 55 -6.70109 0.925039 -0.0940887 22 -5.90525 0.899534 -0.0923139 40 -6.62042 0.967238 -0.0907665 22 -5.92751 -0.342853 -0.0905082 161 -6.65844 -0.4046 -0.0898854 22 -5.8452 0.908929 -0.0893795 53 -6.57126 0.739949 -0.0872686 52 -7.62637 0.979521 -0.0870443 27 -5.84688 -0.38463 -0.0865627 129 -5.84677 -0.320117 -0.0863597 126 -5.84575 -0.301652 -0.0862583 89 -5.84267 -0.283111 -0.0860558 111 -6.54176 0.71595 -0.0858326 75 -5.82571 -0.40171 -0.0855511 41 -6.53003 0.569772 -0.0846676 54 -6.52139 0.64135 -0.0845769 96 -6.52224 0.589768 -0.084398 43 -6.51536 0.661447 -0.084397 107 -6.51018 0.691939 -0.0843068 87 -6.50546 0.619228 -0.0837692 121 -8.7375 -0.306539 -0.0730934 53 -8.7325 -0.333821 -0.0729646 88 -8.58522 0.943695 -0.0696644 40 -5.93792 0.936991 -0.0602441 19 -5.90725 0.913288 -0.0587183 19 -5.95461 0.240135 -0.0579199 73 -5.95142 0.268113 -0.0578298 83 -5.94735 0.221166 -0.0575611 56 -5.94056 0.28637 -0.0573807 80 -5.92382 -0.338408 -0.0567595 19 -5.88786 -0.401208 -0.0553238 28 -5.87299 -0.316768 -0.0544252 46 -6.81778 0.494055 -0.0541501 55 -5.86045 -0.28834 -0.0537966 71 -6.80542 0.52537 -0.0537646 24 -6.80198 0.56812 -0.0537641 24 -6.79179 0.545741 -0.0533021 24 -6.81168 0.000469505 -0.0532305 24 -6.75381 0.886035 -0.053221 24 -6.80927 -0.0744136 -0.0531541 24 -6.79955 -0.170496 -0.0528467 24 -6.80155 -0.0423045 -0.0528456 24 -6.77628 0.587323 -0.0528393 24 -6.79269 -0.116981 -0.0525381 24 -6.79102 -0.0956196 -0.0524609 24 -6.78606 -0.148882 -0.0523072 24 -6.77963 0.032295 -0.0519974 24 -6.77168 -0.0209602 -0.0516897 24 -6.76501 -0.191027 -0.0515371 24 -6.6774 0.929142 -0.0505237 23 -7.83511 0.88844 -0.0454204 48 -7.79653 0.909001 -0.0442595 40 -6.52088 0.636538 -0.0432077 23 -6.49197 0.664512 -0.0422057 22 -6.47351 0.724287 -0.0417427 30 -6.4698 0.703272 -0.0415118 68 -6.468 0.682509 -0.0413579 48 -7.66215 0.954815 -0.0401322 40 -7.6532 0.929333 -0.0397456 40 -8.7224 -0.284584 -0.0279981 46 -8.51507 0.942796 -0.0236508 82 -5.91973 -0.319425 -0.0191785 20 -5.91871 -0.300734 -0.0191013 20 -5.89167 -0.280927 -0.0180225 38 -5.83901 -0.251084 -0.015942 28 -6.84567 0.55166 -0.0126038 74 -6.83117 0.604563 -0.0122808 79 -6.83104 0.582938 -0.0122165 98 -6.80265 0.731564 -0.0117634 40 -6.77638 0.86908 -0.0114393 40 -6.81205 -0.158282 -0.01087 66 -6.80852 -0.136783 -0.0107409 80 -6.76153 0.620075 -0.0100883 40 -6.78554 -0.178897 -0.010032 101 -6.72264 0.894602 -0.00982693 40 -6.77264 -0.210454 -0.00964536 64 -6.70593 0.91388 -0.0093753 40 -6.62699 0.681786 -0.00596076 40 -6.56833 0.916683 -0.00499055 40 -6.58532 0.656772 -0.0045425 40 -6.57939 0.635341 -0.00428483 42 -7.73538 0.915645 -0.00257046 40 -7.667 0.931762 -0.000781905 40 -7.64667 0.965822 -0.000347931 40 -6.10864 0.883715 0.00983968 40 -6.01199 0.908725 0.0128062 40 -6.01283 0.889549 0.0128704 40 -5.96561 0.921085 0.014225 40 -6.02493 -0.336089 0.0142752 40 -6.01188 -0.354257 0.0146619 40 -5.9888 -0.371687 0.015371 40 -5.97103 -0.398769 0.0158866 40 -5.97149 -0.285841 0.016081 89 -5.96609 -0.313751 0.0162097 100 -5.95639 -0.266295 0.016597 85 -6.79223 0.930986 0.0227376 40 -6.84921 -0.185987 0.0228334 40 -6.79353 -0.0565957 0.0244061 72 -6.79167 -0.0352515 0.0244605 77 -6.78975 -0.0139163 0.0245149 69 -6.78719 -0.0885531 0.0245684 76 -6.7818 -0.163097 0.0246761 56 -6.7825 -0.131135 0.0246763 74 -6.78288 -0.109826 0.0246766 75 -6.72325 0.888989 0.0247421 40 -6.74975 0.0178198 0.025599 92 -5.31201 0.266341 0.0373649 40 -5.28439 0.0573868 0.0384586 156 -6.17705 0.88388 0.0394283 40 -5.16306 0.316537 0.0420726 236 -6.03361 0.911186 0.043168 40 -6.02676 0.929511 0.0432766 40 -6.02597 0.880957 0.0434927 40 -6.07157 -0.320648 0.0437496 40 -6.03659 -0.337967 0.0446707 40 -6.01497 -0.365284 0.0452123 40 -5.97868 -0.297312 0.0462968 102 -5.96789 -0.381444 0.0464586 41 -5.97002 -0.268731 0.046568 104 -5.94686 -0.249073 0.0472184 78 -4.81792 0.380745 0.0530351 40 -4.8151 0.365327 0.0531638 52 -4.81423 0.350064 0.0532281 58 -4.81798 0.259165 0.0532914 53 -4.80486 0.311531 0.0536145 50 -4.80386 0.326625 0.0536147 59 -4.81139 0.122613 0.0536765 56 -4.81095 0.00167286 0.0537396 45 -4.80056 0.205427 0.0539355 40 -4.80282 -0.0360076 0.0539971 53 -4.79893 0.0168112 0.0541267 49 -4.79885 0.0318865 0.0541268 41 -4.79376 0.175012 0.054193 46 -4.79319 0.19007 0.0541932 43 -4.79392 0.0996611 0.0542566 57 -4.79254 0.152367 0.0542572 56 -4.7852 0.272653 0.0543232 40 -4.7884 -0.0734369 0.054448 40 -4.78846 0.0694856 0.0544497 54 -4.78692 -0.0207625 0.0545131 41 -4.785 0.137125 0.054515 50 -4.7807 -0.0507432 0.0547062 51 -4.76223 0.0842101 0.0552881 43 -4.70367 0.224012 0.0570308 40 -5.17088 0.373791 0.0680348 40 -6.73071 0.880087 0.0696031 30 -6.72197 0.900453 0.0697258 30 -6.74597 -0.0234413 0.070449 30 -6.65803 -0.0018795 0.0722441 30 -6.58983 -0.0533525 0.0736305 30 -6.47967 -0.0723856 0.0758739 30 -6.33458 0.870329 0.0776395 30 -6.36545 -0.0906522 0.0781989 30 -4.75588 0.484788 0.0789832 52 -4.75158 0.446629 0.0791994 51 -4.74942 0.469015 0.0791997 71 -4.74241 0.498408 0.0793086 42 -4.74746 0.378565 0.0794694 59 -4.74425 0.3933 0.0795238 46 -4.74235 0.415653 0.0795241 53 -4.74065 0.362994 0.0796859 79 -6.28699 -0.118853 0.0797895 58 -4.72908 0.429399 0.0798495 47 -6.20329 0.763694 0.0805752 52 -6.183 0.780998 0.0809426 49 -4.69361 0.255431 0.0811476 40 -6.21862 -0.136822 0.0811763 71 -6.13966 0.932917 0.0813936 30 -6.1462 0.874737 0.0814335 30 -6.19935 -0.243553 0.0815016 30 -6.18877 -0.20415 0.0817467 76 -6.11768 0.890406 0.0819641 30 -6.17767 -0.174595 0.0819918 77 -6.16482 -0.339126 0.0821126 30 -6.17219 -0.155012 0.0821143 73 -4.65364 0.319095 0.082124 40 -6.16212 -0.222546 0.0822768 141 -4.6502 0.201558 0.0823933 40 -4.64689 0.267277 0.0823942 40 -6.09308 0.906476 0.082413 30 -4.64265 0.303624 0.0824489 40 -4.64682 0.186766 0.0825015 40 -4.643 0.120867 0.0826632 40 -4.64215 0.150036 0.0826636 40 -4.64233 0.047891 0.0827165 40 -4.64205 0.0697678 0.0827167 40 -4.64181 0.0843499 0.0827169 40 -4.63557 0.21544 0.0827729 40 -4.63251 0.237167 0.0828273 40 -4.62962 0.288089 0.082828 40 -4.63353 0.0987172 0.0829339 40 -4.63167 0.164211 0.0829347 40 -6.11982 -0.355752 0.0830098 30 -4.62861 0.134966 0.0830427 40 -6.11643 -0.30735 0.0831327 30 -6.10626 -0.268335 0.0833778 30 -6.09939 -0.287209 0.0835 30 -6.06679 -0.371574 0.0840703 33 -6.03614 0.0196857 0.0849309 30 -5.18468 0.626068 0.101542 33 -6.50307 0.98889 0.104215 40 -4.82786 0.561722 0.108925 37 -4.81767 0.545268 0.109169 30 -4.76169 0.524099 0.110352 30 -6.11104 0.878613 0.110572 40 -6.10288 0.906796 0.110635 40 -6.09596 0.85683 0.110855 40 -4.73978 0.484184 0.110882 30 -6.08674 0.835991 0.111044 40 -6.08538 0.816317 0.111106 40 -6.12656 -0.338226 0.111155 40 -4.73021 0.415818 0.111207 30 -6.08976 0.700288 0.111262 40 -4.72934 0.378357 0.111288 30 -4.72137 0.467431 0.111289 30 -6.08208 0.747842 0.111294 40 -6.07528 0.785776 0.111326 40 -4.73593 0.207131 0.111367 30 -4.71357 0.504094 0.111371 30 -4.72671 0.333378 0.11141 30 -6.07177 0.765911 0.11142 40 -4.72253 0.362929 0.111451 30 -6.10761 -0.318022 0.11147 40 -4.72165 0.347954 0.111491 30 -4.71754 0.39985 0.111492 30 -6.09118 0.526402 0.111511 55 -4.7241 0.281064 0.111531 30 -4.71294 0.429313 0.111533 30 -6.06966 0.717228 0.111545 40 -6.09272 0.430211 0.111604 40 -4.72568 0.162142 0.111611 30 -4.72217 0.243768 0.111612 30 -4.70688 0.451156 0.111615 30 -6.09551 -0.35585 0.111627 40 -6.08863 0.45876 0.111636 40 -6.08517 0.477721 0.111668 61 -6.0661 0.678156 0.111671 40 -4.71521 0.295446 0.111695 30 -6.09306 -0.288548 0.111722 40 -6.09194 -0.269325 0.111754 40 -6.08653 0.37212 0.111761 40 -6.06327 0.648897 0.111765 61 -4.71027 0.310018 0.111776 30 -6.08422 0.34319 0.111824 40 -6.08008 0.410068 0.111824 40 -6.0613 0.629415 0.111827 70 -4.7074 0.257913 0.111898 30 -6.07728 0.323616 0.111949 40 -6.06571 0.495295 0.111952 92 -4.70716 0.176413 0.111979 30 -6.0815 0.170725 0.111979 40 -6.07136 0.39028 0.111982 40 -6.06781 -0.383044 0.112036 40 -6.07715 -0.182715 0.112038 40 -6.05566 0.542357 0.112047 83 -6.04933 0.608908 0.112048 76 -4.70258 0.19106 0.11206 30 -6.07353 -0.23037 0.112069 40 -6.04922 0.589698 0.112079 76 -6.07512 -0.0967387 0.112102 40 -6.07551 -0.0681097 0.112102 40 -6.04994 0.560994 0.11211 81 -6.07279 -0.115793 0.112133 40 -6.06926 0.23715 0.112137 40 -6.06629 0.303869 0.112138 40 -6.06678 -0.249231 0.112163 40 -6.06694 0.189334 0.112199 40 -6.06449 0.256031 0.1122 40 -6.06432 0.208316 0.112231 40 -6.06255 -0.2014 0.112258 40 -6.0644 -0.134729 0.112259 40 -6.06102 0.103377 0.112324 52 -6.05567 0.274685 0.112326 40 -6.0497 -0.162987 0.112479 40 -6.05187 0.0176125 0.112481 80 -6.04582 -0.029915 0.112575 74 -6.04379 0.0365424 0.112607 82 -6.04331 0.0840087 0.112607 86 -6.0357 -0.0488708 0.112732 40 -6.03565 0.0554203 0.112733 82 -6.03389 -0.0109525 0.112764 78 -6.02667 0.121586 0.11286 40 -6.02204 0.149867 0.112923 40 -6.18734 0.911656 0.150254 32 -6.16323 0.8687 0.150527 75 -6.20629 -0.349894 0.150585 25 -6.15057 0.886673 0.150619 69 -6.15399 0.818226 0.150672 62 -6.14346 0.836509 0.150746 73 -6.14037 0.767471 0.150854 64 -6.17323 -0.367357 0.150876 25 -6.12478 0.794903 0.150964 98 -6.1347 0.678896 0.150999 70 -6.12686 0.74631 0.151 101 -6.12521 0.726602 0.151036 71 -6.11895 0.638347 0.15118 64 -6.11067 0.695769 0.151199 103 -6.13096 -0.297035 0.151296 50 -6.13186 -0.277774 0.151297 65 -6.10099 0.655923 0.151326 102 -6.10397 0.607796 0.151344 94 -6.12201 -0.315851 0.151369 41 -6.12518 -0.190709 0.151389 74 -6.11387 -0.228774 0.151479 67 -6.11113 -0.247891 0.151497 106 -6.10857 -0.209334 0.151534 102 -6.08836 0.538799 0.151544 38 -6.08575 0.567484 0.151544 41 -6.10943 -0.0941201 0.151554 67 -6.10403 -0.161168 0.15159 98 -6.1005 -0.14188 0.151626 67 -6.1021 -0.0268709 0.151628 65 -6.08165 0.499759 0.151634 40 -6.09892 -0.122667 0.151645 112 -6.07199 0.585499 0.151654 44 -6.0937 -0.0746632 0.1517 68 -6.0788 0.432324 0.151706 39 -6.07802 0.384334 0.151742 39 -6.06809 0.517892 0.151744 39 -6.07414 0.412843 0.151761 40 -6.08614 0.0115087 0.151774 79 -6.08608 0.0306291 0.151774 78 -6.0839 -0.0553849 0.151791 99 -6.06599 0.46978 0.151798 40 -6.07485 0.298014 0.151814 38 -6.08015 -0.00757871 0.151828 88 -6.075 0.250218 0.151831 39 -6.06345 0.450441 0.151834 40 -6.07485 0.126055 0.151866 42 -6.06633 0.345401 0.151869 39 -6.0711 0.19279 0.151885 40 -6.06976 0.230931 0.151886 38 -6.06776 0.278595 0.151887 38 -6.06589 0.316715 0.151887 38 -6.06122 0.364233 0.151906 40 -6.06794 0.164086 0.151922 39 -6.06646 0.211738 0.151922 39 -6.06787 0.0592098 0.151939 75 -6.06765 0.0782725 0.151939 68 -6.06642 0.144984 0.15194 40 -6.04938 0.0971229 0.152103 40 -6.28106 0.864654 0.189443 40 -6.2704 -0.314818 0.189601 40 -6.18257 0.0174682 0.22634 40 -6.18361 0.192354 0.226355 40 -6.18027 0.279751 0.226355 40 -6.18771 0.104945 0.22636 40 -6.18188 0.328475 0.226369 40 -6.19201 0.0855417 0.226373 40 -6.18897 0.211958 0.226374 40 -6.1919 0.24126 0.226387 40 -6.19311 0.260788 0.226394 40 -6.18709 0.377472 0.226395 40 -6.19935 0.124573 0.226399 40 -6.19869 0.153787 0.226399 40 -6.19287 0.309511 0.226401 40 -6.2042 -0.0702753 0.22641 40 -6.20449 0.0369302 0.226411 40 -6.19187 0.397266 0.226415 40 -6.20659 -0.0118125 0.226417 40 -6.20634 0.0564322 0.226418 40 -6.19679 0.348729 0.226421 40 -6.21252 -0.0313653 0.226436 40 -6.21417 0.17364 0.226451 40 -6.21839 -0.0509583 0.226455 40 -6.22104 -0.138966 0.226468 40 -6.22945 -0.119609 0.226494 40 -6.22979 -0.100038 0.226494 40 -6.23431 -0.168719 0.226512 40 -6.23775 -0.18844 0.226525 40 -6.22851 0.419111 0.226538 40 -6.22716 0.438675 0.226538 40 -6.235 0.468725 0.226571 40 -6.25312 -0.208635 0.226577 40 -6.23991 0.508506 0.226597 40 -6.23944 0.538069 0.226604 40 -6.26127 -0.258194 0.226609 40 -6.27005 -0.238861 0.226635 40 -6.25344 0.489788 0.226636 40 -6.24405 0.597762 0.226637 40 -6.27042 -0.278347 0.226641 48 -6.24988 0.578493 0.22665 40 -6.25565 0.559197 0.226662 40 -6.26503 0.649356 0.226721 40 -6.26149 0.718645 0.226735 40 -6.2749 0.670262 0.226761 40 -6.28098 0.631014 0.226766 40 -6.27311 0.739894 0.226781 40 -6.27154 0.769682 0.226788 40 -6.27902 0.790589 0.22682 40 -6.29156 0.701959 0.226825 40 -6.33686 -0.351438 0.226866 71 -6.29635 0.812791 0.226885 41 -6.34941 -0.302176 0.226899 52 -6.3559 -0.332544 0.226925 139 -6.3976 -0.375227 0.227066 40 -6.3632 0.841462 0.227111 125 -6.36828 0.893032 0.227151 68 -6.32037 0.260677 0.263878 18 -6.36767 0.162672 0.26428 19 -6.36347 0.282664 0.264281 19 -6.37882 0.19309 0.26439 19 -6.37355 0.323298 0.264391 19 -6.38018 0.213202 0.264408 19 -6.38414 0.143091 0.264426 19 -6.38148 0.233327 0.264427 19 -6.38691 0.103016 0.264444 19 -6.38656 0.123079 0.264444 19 -6.38966 0.032801 0.264461 19 -6.38652 0.303891 0.264501 19 -6.39733 0.0730721 0.264535 19 -6.38793 0.35428 0.264538 19 -6.39952 0.0529968 0.264553 19 -6.40374 0.00275339 0.264589 19 -6.40772 -0.0173595 0.264626 19 -6.39676 0.374971 0.26463 19 -6.39824 0.445726 0.264686 19 -6.41563 -0.0375045 0.264699 19 -6.3988 0.465976 0.264704 19 -6.40359 0.425903 0.264722 19 -6.41778 -0.158505 0.264734 32 -6.40753 0.395855 0.26474 19 -6.40251 0.496613 0.26476 19 -6.40126 0.537007 0.264778 19 -6.41288 0.517739 0.26487 19 -6.43538 -0.0678683 0.264882 19 -6.41348 0.558384 0.264907 19 -6.44083 -0.108376 0.264936 19 -6.44246 -0.128642 0.264954 19 -6.44314 -0.0881612 0.264955 19 -6.44325 -0.179284 0.264972 37 -6.41885 0.609725 0.264999 19 -6.43068 0.59051 0.26509 19 -6.43481 0.631716 0.265164 19 -6.4417 0.663098 0.265256 19 -6.44157 0.683549 0.265275 19 -6.48162 -0.231148 0.265338 38 -6.4797 -0.322844 0.265355 19 -6.48464 -0.200657 0.265357 38 -6.51484 -0.252692 0.265649 40 -6.4789 0.780475 0.265715 42 -6.49702 0.710316 0.265806 19 -6.4936 0.740924 0.265806 19 -6.54862 -0.305386 0.265978 19 -6.56597 -0.275129 0.266125 19 -6.52698 0.765656 0.266136 19 -6.52601 0.807159 0.266174 86 -6.63246 -0.350731 0.266766 20 -6.70922 -0.375623 0.26748 20 -6.5776 0.258684 0.309618 67 -6.58937 -0.310552 0.309834 56 -6.61403 0.187172 0.310155 96 -6.60724 0.353325 0.310157 94 -6.61231 0.332751 0.31022 94 -6.62058 0.166521 0.31025 104 -6.64529 0.135717 0.310629 95 -6.64768 0.114864 0.31066 108 -6.64129 0.313185 0.310663 97 -6.59823 0.833533 0.310701 119 -6.64869 0.282117 0.310757 116 -6.65664 0.0208711 0.310786 101 -6.66338 0.209326 0.310946 104 -6.66232 0.240722 0.310947 102 -6.66016 0.408416 0.311043 109 -6.66401 0.37713 0.311075 125 -6.67827 0.0733069 0.311135 107 -6.66125 0.482032 0.311139 92 -6.66883 0.429943 0.311202 106 -6.68467 -0.000149711 0.311229 104 -6.684 0.0943486 0.31123 107 -6.66569 0.503384 0.311234 125 -6.67542 0.451398 0.311329 110 -6.69654 0.0418786 0.311419 113 -6.70196 0.527156 0.311836 116 -6.73059 -0.0320483 0.311956 111 -6.73845 -0.0532857 0.312082 112 -6.74411 -0.339699 0.312301 165 -6.75945 -0.127875 0.31243 109 -6.73928 0.561902 0.312469 111 -6.77024 -0.0749338 0.312589 114 -6.74744 0.583895 0.312627 109 -6.74961 0.626811 0.312723 98 -6.78397 -0.0964541 0.31281 117 -6.799 -0.150148 0.313062 91 -6.77546 0.607656 0.313102 119 -6.77446 0.661224 0.313166 103 -6.83647 -0.172609 0.313663 128 -6.844 0.689449 0.314306 130 -6.89554 -0.206847 0.314612 119 -6.91284 -0.229173 0.314897 121 -6.90349 0.717121 0.315287 94 -6.94578 0.754439 0.316015 127 -6.98402 -0.253772 0.316036 97 -7.00872 -0.287845 0.316447 130 -7.01495 0.783991 0.317154 95 -7.09598 0.849199 0.318547 82 -7.1496 -0.316658 0.318693 157 -7.11779 0.817739 0.318832 112 -6.9019 -0.29132 0.349695 40 -6.86266 0.857627 0.349876 40 -6.93211 0.833397 0.351257 40 -6.98486 -0.316489 0.351453 40 -7.08436 0.369877 0.353595 74 -7.09002 0.336693 0.353678 120 -7.12622 0.159192 0.354304 80 -7.12675 0.215223 0.354346 84 -7.13139 0.192957 0.35443 84 -7.14881 0.27219 0.354849 81 -7.15391 0.294916 0.354975 80 -7.16001 0.238869 0.355058 81 -7.16094 0.317773 0.355143 76 -7.18866 0.138221 0.355601 86 -7.18097 0.397906 0.355646 87 -7.17662 0.499527 0.355689 80 -7.19789 0.0366519 0.355767 83 -7.18966 0.421085 0.355855 85 -7.20705 0.11599 0.355978 89 -7.21773 0.0595018 0.356186 86 -7.20755 0.456293 0.356274 87 -7.20608 0.478936 0.356275 83 -7.22551 0.0822952 0.356354 86 -7.22796 0.0142055 0.356395 84 -7.21406 0.53645 0.356526 80 -7.28408 0.564931 0.358034 87 -7.30993 -0.0197854 0.358111 89 -7.32183 -0.0427762 0.358362 87 -7.32212 0.591172 0.358871 88 -7.33517 0.650314 0.359248 83 -7.36526 -0.100726 0.359282 91 -7.34613 0.616436 0.359415 87 -7.38764 -0.0661388 0.359743 91 -7.36892 0.676773 0.360002 75 -7.40089 -0.124345 0.360035 91 -7.41646 -0.147856 0.36037 91 -7.48019 0.711099 0.362388 130 -7.53563 -0.185339 0.362881 89 -7.55035 0.753944 0.363937 70 -7.61497 -0.210956 0.364555 87 -7.68422 -0.236796 0.366019 92 -7.65133 0.788669 0.366114 76 -7.75739 -0.263197 0.367568 77 -7.76211 0.82513 0.3685 97 -7.90194 -0.304897 0.370623 40 -7.19261 0.836718 0.392731 40 -7.3173 -0.29094 0.394846 40 -7.32384 -0.3258 0.395053 42 -7.31972 0.816114 0.395949 40 -7.48132 0.809779 0.400101 40 -7.79564 -0.287127 0.407251 44 -7.77423 0.815768 0.407679 40 -7.86056 0.19199 0.408865 120 -7.88687 0.50286 0.409906 53 -7.9091 0.168157 0.41011 80 -7.9603 0.369358 0.411618 56 -7.97295 0.307179 0.411876 115 -7.99538 0.345708 0.4125 99 -8.031 0.397692 0.413487 48 -8.05064 0.0568672 0.413742 49 -8.05641 0.082201 0.413898 47 -8.05574 0.13282 0.413899 60 -8.01878 0.802437 0.413959 40 -8.06411 0.107592 0.414106 50 -8.0788 0.0189047 0.414469 40 -8.06765 0.424794 0.414473 47 -8.06606 0.48826 0.414526 71 -8.10681 -0.00658857 0.415195 40 -8.18569 0.288935 0.417378 73 -8.20131 0.47016 0.418003 40 -8.1825 0.79234 0.418162 40 -8.25167 0.226189 0.419038 70 -8.27449 0.265764 0.419662 117 +unknow 0.958933 1 0 228 -11.3597 24.2976 -1.60933 137 -11.424 24.2366 -1.60744 130 -11.476 24.1501 -1.60365 133 -12.0589 26.428 -1.59703 198 -11.8916 26.3898 -1.59057 104 -12.6651 26.0053 -1.58935 147 -12.7292 25.9295 -1.58686 147 -12.7965 25.8607 -1.58488 143 -12.9039 25.7716 -1.58289 146 -12.9704 25.7024 -1.58091 143 -13.0322 25.6241 -1.5783 143 -13.1364 25.5305 -1.57607 140 -13.1981 25.4536 -1.57359 137 -13.2568 25.3713 -1.57073 140 -13.3623 25.2821 -1.56887 150 -13.422 25.203 -1.56626 143 -13.4879 25.136 -1.56453 137 -13.5805 25.0248 -1.56118 130 -13.6333 24.9347 -1.55782 119 -13.6769 24.8288 -1.55335 171 -13.751 24.7787 -1.55286 114 -13.8461 24.6753 -1.55013 139 -13.9089 24.6056 -1.54827 91 -13.9674 24.5288 -1.54591 88 -14.0818 24.461 -1.54579 66 -11.8085 24.4374 -1.47827 125 -11.6838 24.4729 -1.4769 185 -11.5872 24.468 -1.47404 135 -14.0767 26.3765 -1.47186 208 -11.4899 24.4609 -1.47105 121 -11.29 24.5341 -1.46993 105 -11.3452 24.4514 -1.4667 133 -14.394 26.077 -1.46558 134 -14.2909 26.0836 -1.4631 165 -14.1383 26.0963 -1.45962 148 -14.0354 26.1019 -1.45714 141 -14.1485 24.5304 -1.383 124 -13.9298 24.5956 -1.38007 120 -13.9713 24.4893 -1.37603 187 -12.3231 25.0498 -1.36036 121 -12.343 24.893 -1.35295 133 -12.0442 24.6794 -1.33474 185 -11.8725 24.5231 -1.3226 151 -11.7421 24.5482 -1.32068 181 -11.6426 24.5381 -1.31776 138 -11.442 24.6125 -1.31674 143 -11.5459 24.533 -1.31517 185 -14.1347 24.4605 -1.22021 173 -13.9916 24.4782 -1.21738 233 -13.7886 24.4786 -1.21232 125 -13.6343 24.4735 -1.20827 122 -13.5264 24.4602 -1.20503 148 -13.4303 24.4676 -1.203 123 -13.2854 24.4761 -1.19986 163 -13.1867 24.4773 -1.19753 111 -13.0975 24.4957 -1.19622 109 -12.9775 24.4555 -1.19156 108 -12.8362 24.4668 -1.18873 85 -12.7528 24.4946 -1.18802 69 -12.6483 24.4813 -1.18498 136 -12.5038 24.4837 -1.18174 131 -12.407 24.4836 -1.17951 122 -12.3067 24.4761 -1.17688 126 -12.1708 24.4926 -1.17455 119 -12.0736 24.4895 -1.17222 106 -11.972 24.4771 -1.16939 108 -11.6953 24.5928 -1.16857 123 -11.8401 24.499 -1.16746 124 -11.7544 24.5181 -1.16645 201 -11.5593 24.5047 -1.16159 114 -11.4218 24.5118 -1.15896 159 -11.2502 24.5449 -1.15683 100 -11.3239 24.5022 -1.15643 123 -11.0851 24.4885 -1.15076 109 -10.9811 24.463 -1.14742 74 -14.2396 24.5569 -1.06503 147 -14.0521 24.499 -1.05856 178 -13.9523 24.5031 -1.0565 149 -13.8614 24.5225 -1.05524 255 -13.7008 24.5074 -1.05111 255 -13.6014 24.5101 -1.04904 255 -13.5031 24.5143 -1.04706 255 -13.3616 24.5303 -1.04464 255 -13.2521 24.5124 -1.04158 255 -13.1447 24.4976 -1.03871 255 -13.0085 24.5205 -1.03673 255 -12.9062 24.5135 -1.03431 255 -12.8078 24.5132 -1.03224 255 -12.7096 24.5126 -1.03018 255 -12.5638 24.5135 -1.02721 255 -12.4677 24.5155 -1.02532 255 -12.3725 24.5189 -1.02353 255 -12.231 24.5251 -1.02092 255 -11.8743 24.6776 -1.02001 157 -12.1343 24.524 -1.01894 255 -12.0343 24.5154 -1.01661 253 -11.909 24.5521 -1.01562 185 -11.6976 24.5075 -1.00969 150 -11.6017 24.5044 -1.00772 161 -11.47 24.5244 -1.00601 168 -14.0591 24.5489 -0.880738 132 -13.9079 24.5522 -0.877963 156 -13.7427 24.4389 -0.871029 168 -13.6435 24.4418 -0.869255 191 -13.4982 24.4516 -0.866865 198 -13.3926 24.4413 -0.864552 207 -13.2929 24.4411 -0.862701 198 -13.1539 24.4594 -0.860773 213 -13.062 24.4724 -0.859538 196 -12.9542 24.455 -0.856994 201 -12.8175 24.475 -0.85522 216 -12.7194 24.4744 -0.853446 228 -12.6178 24.4662 -0.851365 235 -12.5191 24.463 -0.849514 242 -12.3847 24.4843 -0.847894 236 -12.2845 24.4766 -0.845889 236 -12.188 24.4757 -0.844192 234 -12.0487 24.4844 -0.84211 239 -11.9534 24.4844 -0.84049 234 -11.8503 24.4679 -0.838178 229 -11.7108 24.4729 -0.836018 255 -11.6141 24.4681 -0.834245 238 -11.516 24.4592 -0.832317 236 -11.423 24.4609 -0.830851 242 -11.2918 24.4799 -0.829385 241 -11.209 24.5025 -0.828844 245 -11.1246 24.5212 -0.828148 241 -11.004 24.5625 -0.827683 213 -10.9195 24.5805 -0.826988 158 -14.1348 24.4558 -0.701688 231 -13.9985 24.4857 -0.700332 230 -13.8978 24.4879 -0.698783 233 -13.7893 24.4757 -0.696718 231 -13.6889 24.477 -0.695169 232 -13.5443 24.4888 -0.693232 236 -13.4413 24.484 -0.69149 238 -13.3394 24.4805 -0.689812 231 -13.2011 24.5008 -0.688262 239 -13.0938 24.4858 -0.686197 238 -12.9971 24.4898 -0.684841 237 -12.8583 24.5065 -0.683227 243 -12.7526 24.4918 -0.681227 241 -12.6591 24.4998 -0.680065 244 -12.5592 24.495 -0.678451 245 -12.4201 24.5076 -0.676772 243 -12.3223 24.5055 -0.675288 238 -12.2283 24.5101 -0.674061 239 -12.0887 24.519 -0.672318 241 -11.9879 24.5084 -0.670576 238 -11.8934 24.51 -0.669284 243 -11.7509 24.51 -0.667283 246 -11.6575 24.5125 -0.666057 242 -11.5667 24.5201 -0.665023 243 -11.4282 24.5254 -0.66328 243 -11.3393 24.5358 -0.662376 183 -14.1988 24.4939 -0.558308 161 -14.0505 24.5033 -0.556517 188 -13.9409 24.4899 -0.554728 199 -13.8354 24.4831 -0.553155 213 -13.7291 24.4741 -0.551528 219 -13.5894 24.4948 -0.550171 223 -13.4883 24.4936 -0.548814 232 -13.3816 24.4814 -0.547133 228 -13.2481 24.5108 -0.546101 228 -13.1427 24.4994 -0.544474 239 -13.0422 24.4964 -0.543117 241 -12.9016 24.5098 -0.541652 243 -12.7995 24.5024 -0.540187 242 -12.7041 24.5069 -0.539102 242 -12.5648 24.5203 -0.537691 249 -12.466 24.5168 -0.536388 249 -12.3674 24.513 -0.535086 247 -12.268 24.507 -0.53373 249 -12.132 24.5233 -0.532481 255 -12.0338 24.5182 -0.531179 255 -11.9358 24.5127 -0.529877 255 -11.7985 24.5237 -0.52852 255 -11.7025 24.5209 -0.527326 255 -11.6058 24.5159 -0.526078 255 -11.4757 24.5396 -0.525155 255 -11.3784 24.5319 -0.523853 251 -11.2905 24.544 -0.523146 252 -11.1967 24.5429 -0.522061 159 -11.076 24.5845 -0.521733 193 -13.6541 26.0746 -0.391779 167 -13.7948 25.6535 -0.385552 128 -13.5181 25.6197 -0.382286 100 -13.7985 24.632 -0.367348 225 -13.6645 24.5739 -0.364982 162 -13.5186 24.4925 -0.362086 255 -13.4261 24.5068 -0.361431 255 -12.1944 24.9845 -0.358502 97 -12.5211 24.7597 -0.357371 96 -12.428 24.7685 -0.356676 96 -12.6526 24.6343 -0.356317 96 -12.5733 24.6703 -0.356233 96 -12.142 24.6806 -0.352473 96 -11.8999 24.6762 -0.350226 128 -11.7946 24.6558 -0.348919 143 -11.7051 24.6674 -0.348346 255 -11.5734 24.6897 -0.347609 255 -11.4831 24.6988 -0.346995 255 -13.5578 26.0027 -0.253222 87 -13.4013 26.0005 -0.252055 131 -13.8033 25.7779 -0.25191 94 -13.5387 24.627 -0.234031 227 -12.4854 24.8891 -0.229947 83 -12.5384 24.7033 -0.227718 83 -11.854 24.6845 -0.222672 82 -11.7721 24.7126 -0.222512 82 -11.5396 24.7227 -0.221092 82 -11.3244 24.7671 -0.2203 255 -11.4376 24.7062 -0.220177 82 -11.2226 24.7497 -0.219386 179 -13.2397 24.7302 -0.0478892 160 -13.0958 24.741 -0.0473581 255 -12.7606 24.7627 -0.0461123 116 -12.6754 24.7884 -0.0459642 106 -12.5657 24.7657 -0.0453249 106 -12.4408 24.8086 -0.0451577 106 -12.3351 24.7921 -0.0445912 106 -12.251 24.8182 -0.0444613 106 -12.0234 24.847 -0.0437822 153 -12.1342 24.7775 -0.0436583 105 -11.8984 24.7874 -0.0427973 255 -11.8085 24.7994 -0.0425401 235 -11.6846 24.8403 -0.0423911 228 -11.5828 24.8261 -0.0418792 225 +unknow 0.970441 1 0 400 -11.2668 -1.15106 -1.31212 108 -11.2703 -1.11565 -1.31212 100 -11.2787 -1.0271 -1.31212 82 -11.2679 -1.07969 -1.31131 106 -11.6638 -1.38153 -1.29338 142 -11.6641 -1.34442 -1.29287 86 -11.6756 -1.12317 -1.29134 111 -11.6526 -1.28744 -1.29058 121 -11.6526 -1.25039 -1.29007 126 -11.6601 -1.15864 -1.28981 121 -11.6447 -1.21252 -1.28854 126 -12.0666 -1.3964 -1.2838 185 -12.0532 -1.35652 -1.2816 63 -12.0635 -1.22351 -1.28111 97 -12.0495 -1.3178 -1.28062 81 -12.0556 -1.26101 -1.28062 99 -12.0593 -1.18485 -1.28013 97 -12.0589 -1.12747 -1.27939 97 -12.0623 -1.08958 -1.27939 73 -12.4895 -1.42431 -1.26144 249 -12.4787 -1.48268 -1.26098 255 -12.482 -1.38373 -1.26004 167 -12.4405 -1.59713 -1.25818 137 -12.4845 -1.20558 -1.25818 139 -12.4483 -1.51869 -1.25794 247 -12.4415 -1.55754 -1.25771 134 -12.4567 -1.34126 -1.25654 87 -12.453 -1.24198 -1.25491 125 -12.4333 -1.27943 -1.25304 127 -13.1853 -1.59792 -1.24832 131 -13.1744 -1.55465 -1.24657 137 -13.213 -1.16065 -1.24635 116 -13.1605 -1.63691 -1.24613 129 -13.1896 -1.22129 -1.24438 167 -13.1362 -1.4875 -1.24153 210 -13.7582 -1.26083 -1.22791 161 -13.7083 -1.60452 -1.22646 118 -12.582 -1.2061 -1.17759 137 -12.3486 -1.22337 -1.1522 106 -12.3307 -1.31949 -1.15132 113 -12.3209 -1.25978 -1.14957 158 -12.8711 -1.21864 -1.13531 76 -12.3565 -1.20806 -1.08175 132 -12.3143 -1.39949 -1.07946 93 -12.297 -1.33881 -1.07697 108 -12.2933 -1.26028 -1.07573 90 -12.2577 -1.29548 -1.0724 98 -12.2692 -1.38279 -1.00785 107 -12.2675 -1.3436 -1.00726 109 -12.2559 -1.28395 -1.00548 107 -12.1985 -1.23933 -0.999379 88 -11.9487 -1.17658 -0.974174 100 -11.8771 -1.13203 -0.966691 106 -11.8486 -1.07307 -0.963343 117 -11.8162 -1.0328 -0.959798 114 -12.2163 -1.40141 -0.934486 77 -12.1969 -1.36033 -0.932256 137 -12.0883 -1.30954 -0.92166 85 -11.9161 -1.23371 -0.904931 66 -11.8641 -1.00762 -0.759647 188 -11.7696 -1.03665 -0.752161 77 -11.6814 -0.919466 -0.649916 64 -11.8644 -1.02085 -0.597167 40 -11.7463 -0.973256 -0.588902 103 -12.1452 -1.36611 -0.549909 75 -11.9787 -1.30966 -0.53922 100 -11.9708 -1.27078 -0.538475 190 -11.8972 -1.20647 -0.533503 66 -11.8652 -1.16565 -0.531265 96 -11.833 -1.12505 -0.529028 136 -11.8064 -1.06647 -0.527039 115 -11.7858 -1.02735 -0.525547 119 -11.7486 -0.894166 -0.522564 255 -11.7353 -0.985923 -0.522191 80 -11.7076 -0.854153 -0.519829 81 -11.6985 -0.945924 -0.519705 215 -12.1693 -1.21387 -0.477836 255 -12.1349 -1.1334 -0.475475 163 -12.1178 -1.26633 -0.475251 242 -12.0719 -1.33818 -0.473115 73 -12.0601 -1.29851 -0.472216 84 -12.0538 -1.16386 -0.471091 255 -11.857 -1.01295 -0.459287 94 -11.8343 -0.97351 -0.457825 203 -11.8194 -0.934873 -0.456813 118 -12.0832 -1.34083 -0.405585 71 -11.9801 -1.29153 -0.400121 178 -11.9603 -1.23246 -0.398805 211 -11.9402 -1.19254 -0.397591 90 -11.8982 -1.15071 -0.395263 128 -11.8537 -1.09016 -0.392733 137 -11.8531 -1.05257 -0.392531 90 -11.8126 -1.01167 -0.390305 91 -11.7759 -0.971363 -0.388281 227 -11.7752 -0.878267 -0.387876 195 -11.7684 -0.914955 -0.387673 203 -12.0604 -1.32676 -0.335325 76 -12.0526 -1.28756 -0.334786 92 -12.0544 -1.19206 -0.334426 116 -12.0307 -1.22785 -0.333529 211 -11.9726 -1.14581 -0.330566 166 -11.95 -1.08679 -0.329309 207 -11.8897 -1.04351 -0.326436 84 -11.8113 -0.999069 -0.322755 144 -11.8044 -0.961127 -0.322306 153 -12.0151 -1.28629 -0.256488 46 -11.9773 -1.22528 -0.254793 147 -11.9532 -1.18495 -0.253714 88 -11.939 -1.14571 -0.25302 99 -11.8947 -1.10387 -0.251171 116 -11.858 -1.04422 -0.249553 103 -11.8273 -1.00415 -0.248243 99 -11.799 -0.908549 -0.246855 103 -11.7926 -0.963984 -0.246779 164 -11.7918 -0.870765 -0.24647 114 -11.7766 -0.832486 -0.245776 108 -12.5069 -1.39874 -0.197028 54 -12.1655 -1.32116 -0.185808 50 -12.1179 -1.27737 -0.184132 112 -12.0741 -1.21514 -0.182519 81 -12.0301 -1.17245 -0.180972 114 -11.984 -1.12985 -0.179359 100 -11.9656 -1.09015 -0.17865 95 -11.9407 -1.03111 -0.177683 94 -11.924 -0.991893 -0.177038 101 -11.9071 -0.952786 -0.176393 104 -11.9015 -0.895896 -0.17607 105 -12.3026 -1.34266 -0.126902 58 -12.1676 -1.27024 -0.123054 109 -12.1158 -1.22648 -0.121537 102 -12.0739 -1.18403 -0.12029 104 -12.0497 -1.14351 -0.119531 108 -12.0191 -1.08355 -0.118555 111 -11.9965 -1.04359 -0.117851 105 -12.0351 0.127766 -0.11768 40 -11.9738 -1.00379 -0.117146 116 -11.9665 -0.946428 -0.11682 100 -11.9542 -0.869957 -0.116332 102 -11.9435 -0.90692 -0.116116 103 -11.9422 -0.812561 -0.115898 98 -12.7579 -1.55834 -0.0541417 44 -12.7409 -1.51561 -0.0536928 44 -12.7192 -1.59411 -0.0534484 71 -12.6883 -1.44862 -0.0524686 44 -12.6252 -1.40112 -0.0510815 85 -12.399 -1.33612 -0.0463492 83 -12.3137 -1.26806 -0.0444724 132 -12.2798 -1.22551 -0.0436971 119 -12.2398 -1.1826 -0.0427995 118 -12.2097 -1.14091 -0.0421058 120 -12.238 0.147777 -0.0416074 42 -12.1691 -1.0792 -0.0411672 122 -12.2134 0.185912 -0.0411176 42 -12.1684 -1.04062 -0.0410854 123 -12.1944 0.109032 -0.0407103 42 -12.1477 -1.00036 -0.0405957 124 -12.1503 -0.942953 -0.0405545 124 -12.1808 0.0515374 -0.0404252 42 -12.1353 -0.903399 -0.0401872 128 -12.1301 -0.864687 -0.0400238 88 -12.7078 -1.55884 0.00620563 40 -12.6832 -1.49526 0.00670961 40 -12.656 -1.45182 0.00721346 40 -12.5159 -1.33655 0.00960628 40 -12.337 -1.27864 0.0125024 67 -12.3171 -1.23753 0.0128803 87 -12.2612 -1.19315 0.0138249 130 -12.2368 -1.13265 0.0142974 88 -12.2303 -1.09333 0.014455 90 -12.2086 -0.994871 0.0149278 84 -12.1899 -1.05122 0.0151477 129 -12.1778 -0.953931 0.0154631 90 -12.1656 -0.818543 0.0158102 90 -12.159 -0.856484 0.0158729 82 -12.1488 -0.913334 0.0159669 133 -12.1222 -0.777471 0.0165344 76 -12.8095 -1.54125 0.0896221 97 -12.7519 -1.61558 0.0900593 49 -12.745 -1.57401 0.0901689 49 -12.6726 -1.38329 0.091027 48 -12.5934 -1.31446 0.0918114 48 -12.5935 -1.27448 0.0918481 48 -12.5199 -1.22713 0.0925595 84 -12.4978 -1.18529 0.0927968 77 -12.4753 -1.12381 0.0930525 98 -12.4569 -1.08266 0.0932533 119 -12.4523 -1.04284 0.0933265 94 -12.4381 -0.943299 0.0935277 83 -12.4311 -0.982047 0.093564 119 -12.4131 -0.902133 0.0937833 142 -12.4079 -0.862556 0.0938564 94 -13.8237 -1.27368 0.168773 50 -12.7346 -1.58009 0.171647 46 -12.7137 -1.53701 0.171719 46 -12.7282 -1.3565 0.171736 46 -12.6488 -1.30803 0.171966 46 -12.6548 -1.24842 0.171966 46 -12.6689 -1.18908 0.247465 40 -12.7049 -1.23281 0.247594 40 -12.7089 -1.2937 0.247626 40 -12.7226 -1.33554 0.247684 40 -13.3183 -1.06163 0.24952 40 -13.4977 -0.96965 0.250076 55 -13.513 -1.03481 0.25014 58 -13.5375 -0.88711 0.250186 40 -13.5461 -1.12308 0.250269 40 -13.5666 -0.931892 0.250289 40 -13.7977 -1.25363 0.251115 41 -12.7638 -1.25575 0.323392 42 -12.7836 -1.21713 0.323539 42 -12.7996 -1.2998 0.323758 42 -12.9246 -1.37379 0.324967 43 -13.104 -1.1847 0.326433 43 -13.4689 -0.876444 0.329548 45 -13.4706 -0.940314 0.329603 45 -13.5235 -0.986593 0.330115 52 -13.5814 -0.840714 0.330556 45 -13.648 -1.03854 0.331287 84 -13.92 -1.12472 0.333833 46 -14.8439 -0.869644 0.342113 49 -12.7808 -1.05031 0.408356 35 -12.7974 -1.0922 0.408672 35 -12.7958 -1.13258 0.408703 35 -12.8602 -1.2403 0.409873 35 -12.87 -1.20046 0.409968 35 -12.8741 -1.28251 0.410158 35 -12.8958 -1.34613 0.410601 35 -13.4088 -0.912537 0.418102 51 -13.4469 -0.851557 0.41864 36 -13.4776 -0.959911 0.41924 37 -13.4885 -1.00331 0.419462 59 -14.8326 -0.895213 0.440566 40 -14.8473 -0.849319 0.440756 40 -12.9356 -1.27881 0.477179 43 -13.0927 -1.33556 0.480569 44 -13.4668 -0.925543 0.487645 45 -13.4697 -0.883234 0.487645 45 -13.4923 -0.842116 0.488064 45 -14.8252 -0.712527 0.515773 50 -14.8289 -0.759391 0.515898 50 -14.8344 -0.806398 0.516066 50 -14.8398 -0.85344 0.516233 50 -12.8594 -0.814609 0.539238 52 -12.8686 -0.916749 0.539653 52 -12.8927 -0.857465 0.540172 52 -12.8944 -1.00012 0.540483 52 -12.8995 -0.959763 0.540535 52 -12.9035 -1.06205 0.540846 52 -12.9141 -1.1038 0.541209 52 -12.9185 -1.14509 0.541416 52 -12.9668 -1.25221 0.542921 52 -12.9845 -1.19221 0.543232 52 -12.9946 -1.29618 0.543751 52 -14.6443 -0.354982 0.58502 59 -14.7905 -0.731062 0.58917 80 -14.8082 -0.848614 0.589792 60 -14.828 -0.779691 0.590208 60 -14.8525 -0.243694 0.590367 60 -14.8552 -0.313777 0.590471 60 -12.9439 -0.253948 0.62084 41 -12.9495 -0.152315 0.62097 41 -12.95 -0.335457 0.621097 41 -12.9395 -0.660887 0.62116 41 -12.946 -0.518575 0.621161 41 -12.953 -0.437349 0.62129 41 -12.9515 -0.620694 0.621482 41 -12.9534 -0.579999 0.621482 41 -12.9575 -0.478246 0.621482 41 -12.967 -0.295106 0.621612 41 -12.9494 -0.804202 0.621738 41 -12.9519 -0.763519 0.621738 41 -12.9562 -0.722929 0.621803 41 -12.9759 -0.111807 0.621806 41 -12.9824 -0.00988456 0.622 41 -12.9789 -0.376953 0.622062 41 -12.9863 0.030919 0.622129 41 -12.9608 -0.84576 0.622188 41 -12.9909 -0.193539 0.62232 41 -12.9943 -0.0506902 0.622385 41 -12.9726 -0.907914 0.622702 41 -13.0117 0.13323 0.622965 41 -13.024 0.092463 0.623351 41 -13.0352 0.174479 0.623738 41 -13.0096 -0.951502 0.623988 41 -13.0245 -0.993698 0.624567 41 -13.0347 -1.13872 0.625274 73 -13.0311 -1.20031 0.625338 103 -13.0515 -1.05759 0.625596 41 -13.0973 0.360681 0.625861 112 -13.0572 -1.24403 0.626302 122 -13.1373 0.279262 0.627083 41 -13.1663 0.321324 0.628048 41 -13.1188 -1.29138 0.628425 189 -13.2253 0.426839 0.630042 66 -13.1963 -1.34071 0.631062 42 -13.0381 -0.461463 0.708922 92 -13.0413 -0.359046 0.708922 92 -13.0426 -0.502662 0.709153 90 -13.0475 -0.420774 0.709231 90 -13.0541 -0.236322 0.70931 94 -13.0423 -0.646349 0.709385 105 -13.0573 -0.277422 0.709464 96 -13.0591 -0.174865 0.709465 96 -13.0501 -0.564572 0.70954 91 -13.0624 -0.318603 0.709696 93 -13.0679 -0.0928807 0.709775 94 -13.0562 -0.605952 0.709849 89 -13.0736 -0.134009 0.710007 99 -13.0762 -0.0313374 0.710085 97 -13.065 -0.709264 0.71039 103 -13.0623 -0.79146 0.710467 97 -13.0647 -0.750422 0.710467 99 -13.0757 -0.833545 0.711086 102 -13.1022 0.00971436 0.711091 96 -13.0756 -0.895434 0.71124 98 -13.1061 0.0508813 0.711246 98 -13.1177 0.112724 0.711711 94 -13.0927 -0.937973 0.712014 98 -13.1433 0.154188 0.712717 98 -13.1096 -0.980634 0.712788 99 -13.1527 0.195604 0.713104 98 -13.1188 -1.04353 0.713329 97 -13.1274 -1.08576 0.713793 98 -13.18 0.23737 0.714188 106 -13.1478 -1.12909 0.714721 92 -13.2127 0.300184 0.715504 95 -13.1682 -1.19343 0.715727 88 -13.1703 -1.23537 0.715959 77 -13.2317 0.34217 0.716278 90 -13.2678 -1.28677 0.719905 40 -13.2756 -1.32966 0.720369 40 -13.063 -0.473774 0.770486 154 -13.0674 -0.330112 0.770487 153 -13.0683 -0.371214 0.770573 155 -13.0756 -0.227565 0.770747 158 -13.0714 -0.515181 0.770919 151 -13.0689 -0.617918 0.771005 151 -13.0803 -0.289302 0.771007 155 -13.0842 -0.186583 0.771094 161 -13.0757 -0.556491 0.771178 152 -13.081 -0.412681 0.771179 151 -13.0947 -0.145567 0.771528 159 -13.0849 -0.659842 0.771785 148 -13.0868 -0.701153 0.771958 164 -13.1132 -0.0839382 0.772308 161 -13.0908 -0.804504 0.77239 165 -13.0953 -0.763489 0.772477 162 -13.1174 -0.0427489 0.772482 164 -13.1235 -0.00152406 0.772742 165 -13.1334 0.060384 0.773176 163 -13.1082 -0.846878 0.773257 163 -13.1154 -0.888708 0.77369 159 -13.121 -0.951208 0.774123 159 -13.1651 0.101952 0.774563 163 -13.1359 -0.993746 0.774903 160 -13.1387 -1.03547 0.775163 157 -13.1787 0.143494 0.77517 158 -13.1861 0.185021 0.775517 162 -13.2051 0.247573 0.776384 162 -13.1636 -1.09981 0.776462 157 -13.1899 -1.14368 0.777762 156 -13.2382 0.289865 0.777858 155 -13.2432 0.331615 0.778119 142 -13.1962 -1.18599 0.778195 153 -13.2263 -1.25148 0.779755 157 -13.3396 -1.30427 0.784869 78 -13.2128 -0.339168 0.863864 119 -13.2118 -0.442998 0.863963 113 -13.2183 -0.484814 0.864362 120 -13.2258 -0.19403 0.864365 121 -13.2142 -0.630221 0.864461 110 -13.2277 -0.381165 0.864663 116 -13.2267 -0.526752 0.864862 114 -13.228 -0.589261 0.865061 116 -13.2387 -0.256653 0.865063 120 -13.2403 -0.15267 0.865064 123 -13.2398 -0.298289 0.865163 120 -13.2267 -0.73502 0.86536 111 -13.238 -0.673102 0.865759 113 -13.2423 -0.777656 0.866258 111 -13.2647 -0.111321 0.866263 126 -13.279 -0.0488911 0.866962 125 -13.2791 -0.00717288 0.866963 122 -13.2509 -0.9245 0.867156 126 -13.2577 -0.820397 0.867157 111 -13.2571 -0.862178 0.867257 108 -13.2911 0.0345499 0.867562 124 -13.3069 0.0763692 0.868362 119 -13.2798 -0.968509 0.868754 117 -13.3163 0.13916 0.868861 125 -13.2986 -1.01194 0.869852 120 -13.3076 -1.07574 0.870551 120 -13.3558 0.181456 0.870859 126 -13.3691 0.223624 0.871559 120 -13.328 -1.1196 0.871749 116 -13.3779 0.286813 0.872059 125 -13.3364 -1.16253 0.872348 113 -13.3745 -1.22947 0.874545 101 -13.4309 0.330064 0.874756 85 -13.4541 -1.27958 0.87874 36 +unknow 0.964971 1 0 254 -19.6197 25.2519 -1.40906 109 -19.9305 24.677 -1.39603 124 -19.0697 25.2731 -1.39297 110 -19.9601 24.5554 -1.39219 161 -18.9758 25.3137 -1.39175 110 -20.0144 24.4647 -1.39037 126 -20.0913 24.3239 -1.38734 157 -20.1396 24.2268 -1.38512 125 -20.1631 24.1006 -1.38097 159 -20.204 23.9958 -1.37824 122 -20.2664 23.841 -1.3743 158 -20.3049 23.7346 -1.37147 122 -19.2743 24.0948 -1.35223 118 -19.052 23.9706 -1.34029 115 -18.9358 23.9786 -1.33695 115 -18.8189 24.0628 -1.33664 117 -21.7478 25.1724 -1.28432 170 -21.6113 25.1739 -1.28037 149 -21.4997 25.2037 -1.27813 147 -21.6796 24.0065 -1.24306 165 -21.7159 23.8954 -1.24046 161 -21.4571 23.911 -1.23319 152 -19.1795 25.3291 -1.21714 163 -19.0734 25.3542 -1.21517 162 -19.2093 25.2036 -1.21347 153 -18.8665 25.3269 -1.20861 161 -18.7726 25.3668 -1.20753 209 -19.2127 24.0914 -1.17418 255 -19.2645 24.0014 -1.17248 184 -19.0437 24.0343 -1.16744 207 -18.8994 24.0845 -1.1652 155 -21.7965 23.8759 -1.03656 122 -21.72 23.9428 -1.03648 122 -21.4762 23.8991 -1.02893 187 -21.2196 23.9139 -1.02276 143 -21.0539 23.9535 -1.01968 143 -20.9142 23.9457 -1.0159 141 -20.7617 23.9222 -1.01135 146 -20.6355 23.9282 -1.00835 193 -20.4746 23.9689 -1.00549 155 -20.2958 23.9112 -0.999331 147 -19.676 24.3981 -0.998541 173 -18.2694 25.3921 -0.996111 119 -20.1575 23.8999 -0.995554 153 -19.9896 23.9286 -0.992239 144 -19.8557 23.9205 -0.988693 181 -18.2739 25.1472 -0.988566 118 -19.722 23.9118 -0.985148 182 -18.2891 25.0025 -0.98441 118 -18.3356 24.9014 -0.982333 118 -19.5523 23.9348 -0.981678 180 -19.4191 23.9247 -0.978133 181 -18.3396 24.6623 -0.97502 128 -19.1848 23.9416 -0.972968 175 -19.0419 23.9942 -0.971116 238 -18.8206 24.0236 -0.966721 148 -18.2172 24.3372 -0.96216 156 -18.6008 23.9746 -0.960017 145 -18.2371 24.047 -0.953693 200 -21.943 23.9855 -0.839263 59 -21.8635 24.0499 -0.839067 96 -21.4485 23.9693 -0.828169 78 -21.5089 23.8855 -0.827462 102 -21.3039 23.959 -0.824814 106 -21.0678 23.9197 -0.818817 93 -20.9267 23.9106 -0.815591 113 -20.7845 23.8994 -0.812302 160 -20.6609 23.9086 -0.809914 109 -20.479 23.9253 -0.806495 133 -20.3416 23.9165 -0.803398 115 -20.2134 23.9177 -0.800753 120 -18.3004 25.3817 -0.799919 179 -20.0234 23.9208 -0.796883 123 -19.911 23.939 -0.795011 125 -18.2819 25.1062 -0.792382 94 -19.7809 23.9352 -0.792237 122 -19.6071 23.954 -0.78914 121 -19.2403 24.196 -0.787775 177 -19.4799 23.9519 -0.786495 127 -18.2495 24.8972 -0.786327 136 -19.353 23.9493 -0.78385 130 -18.2516 24.7369 -0.782204 105 -19.2376 23.9602 -0.781785 130 -19.0029 24.0525 -0.779394 101 -18.2218 24.5351 -0.776407 132 -18.8 23.9502 -0.772753 117 -18.2388 24.3179 -0.771125 92 -18.6427 23.9818 -0.770429 133 -18.2641 24.0358 -0.764363 143 -21.8843 23.871 -0.668803 69 -21.746 23.8701 -0.666255 69 -21.5503 23.8802 -0.662893 142 -21.4098 23.8748 -0.660236 125 -21.2789 23.8792 -0.657959 161 -21.0934 23.8967 -0.654976 110 -20.9655 23.9027 -0.652807 122 -20.8208 23.8885 -0.649934 170 -20.6868 23.8857 -0.647494 122 -20.5194 23.9192 -0.645215 133 -20.3664 23.8922 -0.641963 116 -18.259 25.4331 -0.639567 67 -20.2086 23.8583 -0.638494 175 -20.0433 23.8905 -0.63627 114 -18.2289 25.2232 -0.634479 81 -19.9183 23.8934 -0.634155 119 -19.7909 23.8927 -0.631931 131 -19.63 23.9269 -0.62987 141 -19.4929 23.9125 -0.627213 136 -19.3674 23.9114 -0.625044 139 -19.202 23.9369 -0.622766 140 -19.0844 23.9439 -0.620922 134 -18.1999 24.6079 -0.620568 255 -18.9495 23.9284 -0.618319 135 -18.8298 23.9312 -0.616367 131 -18.1829 24.4239 -0.616292 255 -18.6604 23.9471 -0.613872 133 -18.1658 24.162 -0.610338 255 -18.2007 24.0506 -0.608499 152 -18.264 23.9774 -0.60796 117 -21.5069 23.925 -0.447784 164 -21.365 23.9179 -0.445743 154 -21.1844 23.942 -0.44366 199 -21.047 23.9379 -0.441741 155 -20.9216 23.9467 -0.44019 163 -20.7287 23.9529 -0.437699 235 -20.5959 23.9512 -0.435903 146 -20.4633 23.949 -0.434107 162 -20.3038 23.9141 -0.431454 176 -18.2828 25.4039 -0.429922 192 -20.1187 23.9239 -0.429168 180 -20.0101 23.9471 -0.428105 178 -19.8747 23.9376 -0.426187 179 -18.2404 25.178 -0.425685 171 -19.7019 23.9585 -0.424267 179 -19.5822 23.9661 -0.422838 173 -18.256 24.9515 -0.422142 175 -19.45 23.9577 -0.421001 173 -19.2868 23.9868 -0.419367 237 -18.25 24.7797 -0.419251 153 -19.1626 23.9864 -0.417774 181 -19.0224 23.9651 -0.415652 185 -18.2157 24.5714 -0.415422 180 -18.9024 23.9682 -0.414182 209 -18.7412 23.9956 -0.412589 183 -18.2054 24.3971 -0.412449 149 -18.6228 23.9991 -0.411159 160 -18.2876 24.1101 -0.408786 205 -21.6929 23.9214 -0.300096 96 -21.5414 23.9047 -0.2983 95 -21.3769 23.8723 -0.29619 119 -21.1899 23.889 -0.294426 152 -21.0566 23.8894 -0.293039 151 -20.913 23.8771 -0.291401 151 -20.7479 23.9149 -0.29014 156 -20.6139 23.9118 -0.288722 168 -20.4971 23.9278 -0.287713 145 -20.2975 23.8458 -0.284691 157 -18.2809 25.3336 -0.283462 93 -20.1334 23.88 -0.283429 169 -20.0134 23.8894 -0.282326 136 -19.8705 23.8707 -0.280657 166 -18.2336 25.1012 -0.280068 92 -19.7235 23.9223 -0.279804 136 -19.5748 23.8944 -0.277978 168 -18.1992 24.8887 -0.277052 92 -19.4618 23.9092 -0.277031 138 -19.2775 23.9119 -0.275235 168 -19.1698 23.9317 -0.274415 135 -18.2131 24.6626 -0.27432 91 -19.0236 23.9026 -0.27262 172 -18.2047 24.4897 -0.272059 91 -18.9174 23.923 -0.271831 137 -18.7429 23.9331 -0.270255 169 -18.6272 23.9397 -0.269215 136 -18.2455 23.9886 -0.266156 169 -21.3326 24.7397 -0.0900764 123 -21.3932 24.653 -0.0898425 123 -21.3637 24.2323 -0.0867904 146 -21.2875 24.2993 -0.0867877 122 -21.3335 24.0455 -0.0853367 174 -21.4198 23.9149 -0.0849763 160 -20.5566 23.9931 -0.0803156 119 -20.3449 23.8978 -0.0784013 185 -18.2487 25.4533 -0.0777308 158 -20.1637 23.9125 -0.0774328 199 -20.0435 23.9221 -0.076793 167 -18.2512 25.2888 -0.0765323 134 -19.9093 23.9143 -0.0759529 202 -19.7429 23.9431 -0.0751846 165 -18.2223 25.0826 -0.0748606 134 -19.6079 23.9323 -0.0743264 202 -19.4935 23.9457 -0.0737594 162 -18.1876 24.8703 -0.073116 135 -19.3201 23.9627 -0.0728819 192 -19.2072 23.9764 -0.0723332 164 -18.213 24.6606 -0.0717182 162 -19.0607 23.9475 -0.0712929 184 -18.8956 23.9712 -0.0705247 182 -18.2008 24.4829 -0.0703558 171 -18.7782 23.9769 -0.0699032 179 -18.6499 23.968 -0.0691178 168 -18.2054 24.0921 -0.0675408 189 -18.2786 24.0316 -0.067507 199 -21.5276 24.9824 0.116919 119 -20.4362 25.3609 0.118057 117 -20.5007 25.2779 0.11812 117 -21.2516 23.9672 0.119487 145 -20.5003 24.0164 0.120744 114 -20.2503 23.8747 0.121483 139 -18.3217 25.3996 0.121511 113 -18.2264 24.7713 0.12304 111 -18.2735 24.0343 0.12456 231 -18.2979 24.0286 0.304386 209 -18.258 24.7732 0.306253 91 -18.3309 25.4525 0.308183 93 -20.2776 24.0196 0.308343 241 -20.3893 23.9984 0.308522 144 -20.5569 24.0421 0.30898 159 -20.7328 24.0176 0.309288 155 -20.8685 24.0217 0.309584 151 -20.4891 25.2181 0.311789 96 -20.45 25.3321 0.311999 96 -20.7834 25.1736 0.312276 96 -18.2795 24.1333 0.483673 150 -18.2745 24.285 0.484758 126 -18.7724 24.0697 0.485955 101 -18.2878 24.4624 0.486137 118 -18.9264 24.0329 0.486557 101 -19.0688 24.058 0.487545 101 -18.2769 24.6899 0.487754 122 -19.1917 24.0574 0.48824 101 -19.3525 24.0259 0.488933 102 -18.2797 24.8568 0.489005 121 -19.4807 24.0303 0.489701 102 -19.6142 24.0403 0.490542 102 -18.3265 25.0854 0.490952 120 -19.7679 23.9971 0.491126 102 -19.8725 23.9703 0.491545 109 -18.2947 25.2915 0.492313 125 -20.2468 24.0354 0.494199 103 -20.3364 23.9885 0.494398 103 -20.5025 24.031 0.495679 104 -20.6495 24.05 0.496685 104 -18.4536 24.5017 0.691271 89 -19.1267 24.5022 0.697749 83 -19.2766 24.4557 0.698632 83 -19.4006 24.4546 0.699833 83 -19.4786 24.395 0.699862 83 -19.6248 24.3419 0.70065 83 -19.7264 24.3111 0.701281 83 -19.8546 24.3125 0.702577 83 -19.9969 24.2526 0.70327 84 -20.128 24.2558 0.704629 84 -20.2131 24.2032 0.704848 84 +unknow 0.967359 1 0 214 -20.7503 -21.4171 -0.942082 173 -20.638 -21.5031 -0.941467 182 -21.1337 -21.0728 -0.941114 172 -21.0645 -21.1363 -0.940959 182 -21.2185 -20.959 -0.940345 164 -21.2543 -20.8628 -0.938728 132 -20.5193 -21.5144 -0.938613 174 -21.3011 -20.7778 -0.937728 133 -21.3973 -20.6758 -0.937652 133 -20.4021 -21.5266 -0.935836 187 -21.6812 -20.2376 -0.933959 113 -21.7329 -20.1586 -0.933344 113 -21.3713 -20.5214 -0.932799 124 -20.2767 -21.5295 -0.932595 180 -21.7968 -20.0276 -0.931727 113 -21.8404 -19.9415 -0.930726 113 -21.8896 -19.8607 -0.930034 113 -21.9651 -19.7413 -0.92911 113 -20.1014 -21.546 -0.92843 183 -21.9897 -19.639 -0.927185 113 -22.0468 -19.5658 -0.926955 113 -22.0812 -19.4727 -0.92557 112 -19.9683 -21.5387 -0.924726 199 -21.0475 -19.7712 -0.903835 110 -20.8815 -19.8014 -0.899982 110 -20.7657 -19.8159 -0.897131 110 -24.5127 -21.319 -0.838909 74 -24.3415 -21.5082 -0.838778 104 -24.4411 -21.392 -0.838715 76 -24.5599 -21.2249 -0.838072 59 -24.2216 -21.5381 -0.83652 117 -24.8045 -20.7646 -0.834466 59 -23.6835 -21.327 -0.819046 58 -23.3888 -21.5319 -0.816464 82 -23.3802 -21.254 -0.810212 57 -23.2235 -21.245 -0.806278 85 -23.4767 -19.8402 -0.782499 56 -23.297 -19.8141 -0.777533 56 -23.1952 -19.8533 -0.775856 56 -21.7829 -20.2418 -0.750185 54 -20.2368 -20.9256 -0.729989 53 -20.2161 -20.773 -0.725993 53 -21.159 -19.7853 -0.725426 64 -21.043 -19.801 -0.72304 53 -20.1904 -20.6165 -0.721803 114 -20.864 -19.8186 -0.719235 53 -20.2143 -20.4471 -0.718452 131 -20.2066 -20.3112 -0.715165 125 -20.6933 -19.7803 -0.714398 67 -20.6268 -19.8411 -0.714204 88 -20.2223 -20.1995 -0.712974 126 -20.5041 -19.8474 -0.711495 102 -20.2534 -20.0406 -0.710073 139 -20.3732 -19.9074 -0.709818 117 -20.2892 -19.9503 -0.70885 135 -23.5741 -19.8417 -0.62659 66 -23.3956 -19.8176 -0.622471 66 -23.245 -19.8159 -0.619328 66 -23.1006 -19.8186 -0.616401 74 -22.9495 -19.8775 -0.614341 65 -22.7798 -19.8563 -0.610492 65 -22.6211 -19.8435 -0.607024 65 -22.4315 -19.8651 -0.603555 65 -22.2256 -19.8079 -0.598352 95 -22.0887 -19.811 -0.595642 106 -21.9239 -19.7879 -0.591902 120 -21.7565 -19.8238 -0.589192 134 -21.5953 -19.8016 -0.58556 138 -20.1128 -21.179 -0.583048 139 -21.4477 -19.7908 -0.582417 141 -21.3468 -19.8848 -0.582145 63 -20.1196 -20.9874 -0.579419 145 -21.1032 -19.7824 -0.575425 63 -20.9653 -19.7773 -0.572606 62 -19.9756 -20.707 -0.571239 250 -19.9862 -20.5883 -0.569126 255 -19.9851 -20.4582 -0.566581 255 -20.1085 -20.2638 -0.565174 116 -20.0405 -20.3226 -0.565011 255 -20.532 -19.8001 -0.56453 155 -20.4136 -19.8102 -0.562416 158 -20.0929 -20.1213 -0.562141 196 -20.1818 -20.0208 -0.561925 122 -20.2729 -19.8601 -0.560627 141 -20.1748 -19.8886 -0.559271 177 -24.3312 -19.8812 -0.432893 141 -24.1108 -19.8912 -0.429548 189 -23.9175 -19.8582 -0.42608 200 -23.8106 -19.896 -0.424896 107 -23.5302 -19.8505 -0.419919 119 -23.3626 -19.835 -0.417103 125 -23.0557 -19.8248 -0.412207 200 -22.8776 -19.8597 -0.409922 105 -22.7022 -19.8327 -0.406862 104 -22.3037 -19.7952 -0.400252 126 -22.1862 -19.8158 -0.398742 139 -22.051 -19.8199 -0.396743 172 -21.8568 -19.8321 -0.393968 184 -21.7044 -19.8183 -0.391479 188 -21.5684 -19.8187 -0.389439 169 -20.2413 -21.1585 -0.389217 101 -21.3245 -19.9056 -0.38699 149 -21.4166 -19.8035 -0.38695 175 -21.1859 -20.0268 -0.386621 132 -21.2036 -19.9176 -0.385357 134 -20.1525 -20.9333 -0.38465 141 -20.1528 -20.8024 -0.382734 184 -20.2371 -20.5636 -0.380452 100 -20.7834 -19.8321 -0.377932 170 -20.1723 -20.3691 -0.3767 99 -20.6692 -19.8474 -0.376463 183 -20.292 -20.1705 -0.37556 99 -20.3339 -20.0856 -0.37495 99 -20.5507 -19.858 -0.374871 187 -20.4438 -19.8792 -0.373606 194 -20.32 -19.9459 -0.372748 99 -24.1869 -19.8142 -0.284372 156 -23.9868 -19.8401 -0.2822 158 -23.8229 -19.831 -0.280121 139 -23.6282 -19.9853 -0.279333 147 -23.6009 -19.7723 -0.276847 205 -23.259 -19.7991 -0.273006 150 -23.0933 -19.7837 -0.270865 172 -22.925 -19.7649 -0.268661 166 -22.7334 -19.7874 -0.266614 164 -22.5748 -19.7745 -0.264599 165 -22.427 -19.77 -0.262804 163 -22.226 -19.7798 -0.260537 164 -22.0773 -19.7723 -0.258711 158 -21.9229 -19.7586 -0.256759 156 -21.7466 -19.7864 -0.254995 158 -21.6091 -19.7858 -0.253389 167 -20.216 -21.0577 -0.251672 87 -21.4555 -19.7697 -0.251437 165 -21.317 -19.7663 -0.2498 149 -20.1736 -20.882 -0.249219 148 -21.1403 -19.7888 -0.248005 151 -20.1512 -20.7283 -0.247237 151 -21.0125 -19.7934 -0.246588 154 -20.1772 -20.5603 -0.245633 152 -20.8878 -19.8002 -0.245234 159 -20.1657 -20.4201 -0.243935 148 -20.7291 -19.8363 -0.243816 160 -20.1747 -20.3014 -0.242708 148 -20.6004 -19.8376 -0.242368 160 -20.2078 -20.144 -0.241324 145 -20.4819 -19.848 -0.24114 165 -20.244 -20.0537 -0.240728 147 -20.3424 -19.8996 -0.240131 179 -20.2598 -19.9438 -0.23969 151 -24.2337 -19.8555 -0.0783463 185 -24.0336 -19.8814 -0.0770876 215 -23.8497 -19.8556 -0.0756464 210 -23.6799 -19.8404 -0.0743693 212 -23.4656 -19.8497 -0.0729283 211 -23.3073 -19.8415 -0.0717788 220 -23.1371 -19.8222 -0.0704836 184 -22.9687 -19.8033 -0.0692065 206 -22.7772 -19.8259 -0.0680207 205 -22.6261 -19.8195 -0.0669442 208 -22.4648 -19.8031 -0.0657401 204 -22.2966 -19.8422 -0.0648277 204 -22.1374 -19.8253 -0.0636418 184 -20.9484 -21.0778 -0.0636265 113 -21.9963 -19.8238 -0.0626747 197 -20.9173 -20.8488 -0.0619504 112 -21.8139 -19.8464 -0.0615801 200 -20.923 -20.7238 -0.0611858 112 -21.6807 -19.8499 -0.0607041 190 -20.9154 -20.5864 -0.0602571 112 -21.5345 -19.8406 -0.0596641 181 -20.92 -20.4618 -0.0594925 111 -21.3313 -19.9654 -0.0590789 159 -20.9746 -20.3226 -0.0589648 111 -21.3929 -19.8347 -0.0586787 179 -21.011 -20.2302 -0.0586194 111 -21.0455 -20.1364 -0.0582558 111 -21.1783 -19.9472 -0.0579477 111 -21.1141 -20.0122 -0.0579286 111 -23.2828 -21.241 0.120568 114 -24.2002 -19.9452 0.12098 145 -23.9957 -19.9038 0.121485 186 -23.7927 -19.9256 0.121874 157 -23.2784 -20.5119 0.121903 119 -23.6335 -19.9191 0.12222 154 -23.3737 -20.1438 0.122365 112 -23.5296 -19.9583 0.122369 112 -23.212 -20.2601 0.122493 112 -22.3581 -21.184 0.122532 112 -23.2135 -20.1334 0.122716 111 -22.4477 -20.9369 0.122815 111 -23.2818 -19.9377 0.122922 111 -22.4493 -20.3531 0.123888 110 -22.418 -20.1969 0.124237 109 -22.4142 -19.877 0.124826 131 -22.3292 -19.9274 0.124909 109 -21.613 -19.9075 0.126401 107 -21.5327 -19.959 0.126468 107 -21.7313 -20.0451 0.301936 88 -22.3697 -19.9935 0.303348 89 -23.1672 -19.9978 0.305289 91 -23.3892 -20.0617 0.305967 91 -22.2798 -20.3174 0.482145 99 -22.345 -20.2486 0.482162 99 -22.4417 -20.1444 0.48218 99 -22.2365 -20.4062 0.482403 100 -22.1754 -20.5433 0.482843 100 -22.581 -20.1416 0.483113 100 -22.1576 -20.6565 0.483431 100 -22.7221 -20.1395 0.484065 100 -22.1597 -20.7889 0.484275 100 -22.1307 -20.8927 0.484734 100 -22.9145 -20.1179 0.485255 101 -23.0771 -20.1325 0.486463 101 +unknow 0.819543 1 0 39 -46.47 25.6687 -0.627533 146 -46.3944 25.4369 -0.624736 145 -46.3213 25.2078 -0.622002 145 -46.2635 24.8944 -0.61886 144 -46.2233 24.6858 -0.616755 144 -46.177 24.4748 -0.614556 144 -46.1218 24.1677 -0.61154 143 -45.9829 23.911 -0.607736 143 -49.8026 24.2803 -0.297574 192 -49.9361 24.2115 0.0550735 184 -47.8186 24.3075 0.0601589 235 -47.4377 24.3015 0.0610967 242 -46.6871 24.3814 0.0628258 177 -46.0142 25.5217 0.0629903 221 -46.0165 25.2401 0.0633524 253 -46.3767 24.4049 0.0635503 245 -45.9972 25.0418 0.0636557 253 -45.9894 24.8505 0.0639208 255 -46.1337 24.4623 0.064067 255 -46.039 24.5977 0.0641245 255 -46.1534 24.5708 0.375549 245 -46.0477 24.7937 0.375592 245 -46.2887 24.4565 0.375759 192 -46.017 24.9639 0.375769 240 -46.0332 25.1601 0.376122 227 -46.0121 25.4309 0.376488 231 -46.5939 24.4306 0.376591 225 -46.0561 25.6443 0.376951 221 -46.9348 24.4215 0.377552 222 -46.1707 25.8984 0.377678 178 -47.3198 24.339 0.378532 231 -47.6775 24.3337 0.379551 210 -48.0482 24.3328 0.380616 199 -49.8328 24.2599 0.385667 150 -47.0936 24.6088 0.692858 162 -46.8554 25.1441 0.693234 162 -46.9152 25.3664 0.694685 162 -47.0424 25.6267 0.696851 163 -47.2153 26.0103 0.699934 164 +unknow 0.958529 1 0 134 -22.9503 25.0139 -1.31495 160 -22.9867 24.8962 -1.31217 192 -23.009 24.7639 -1.3085 190 -23.079 24.6057 -1.30545 180 -23.1177 24.4924 -1.30294 183 -23.1601 24.3834 -1.3007 187 -23.2249 24.2222 -1.29747 186 -23.2357 24.0815 -1.29326 183 -23.2834 23.9798 -1.29146 180 -26.4644 26.2188 -1.22639 158 -26.6368 25.6534 -1.21593 157 -26.5388 25.7202 -1.215 155 -26.4307 25.7769 -1.21353 154 -26.701 25.4737 -1.21293 157 -26.7559 25.2067 -1.20739 156 -26.8174 25.0271 -1.20439 156 -26.8637 24.9128 -1.20269 156 -26.6774 24.5843 -1.18883 172 -24.0497 25.6108 -1.14464 156 -23.8588 25.5678 -1.13839 131 -23.6969 25.5546 -1.13377 145 -23.4897 25.5717 -1.12884 131 -24.0208 24.0956 -1.10191 128 -23.8312 24.1317 -1.09775 128 -23.5787 24.1778 -1.0922 127 -23.6322 24.0808 -1.09097 127 -26.2462 24.2806 -0.944008 74 -26.0599 24.2608 -0.939171 64 -25.8462 24.2903 -0.934784 64 -25.6201 24.23 -0.928142 63 -25.438 24.2099 -0.923434 63 -25.1737 24.1856 -0.916727 63 -25.0386 24.2076 -0.914082 63 -24.8448 24.172 -0.908794 62 -24.6702 24.1535 -0.904343 62 -24.4593 24.174 -0.899957 62 -24.2996 24.1676 -0.896151 62 -24.0708 24.0912 -0.889187 90 -23.8768 24.1235 -0.88551 89 -22.8516 24.8203 -0.878906 61 -23.6522 24.0474 -0.878674 81 -22.9016 24.6406 -0.875751 61 -23.508 24.0516 -0.875513 99 -22.8928 24.4766 -0.871693 73 -22.9189 24.3508 -0.869311 76 -23.1811 24.093 -0.869126 76 -22.9636 24.2453 -0.867831 96 -23.061 24.1195 -0.867061 90 -26.258 24.2476 -0.759819 88 -26.0895 24.2441 -0.756403 76 -25.8409 24.2409 -0.751416 75 -25.6498 24.2134 -0.747134 75 -25.4563 24.1823 -0.742743 75 -25.2296 24.1939 -0.738515 74 -25.0528 24.1758 -0.73472 74 -24.8506 24.1317 -0.729951 74 -24.6097 24.1239 -0.725126 73 -24.4555 24.1239 -0.722144 73 -24.2526 24.2261 -0.720189 73 -24.2775 24.0991 -0.718241 73 -23.8681 24.0674 -0.709785 85 -23.7489 24.0981 -0.708103 72 -22.8409 24.7594 -0.704068 72 -23.5542 24.0511 -0.703496 72 -22.892 24.5812 -0.701471 72 -23.3558 24.0742 -0.700188 78 -23.2343 24.0999 -0.698398 72 -22.8831 24.4172 -0.698062 86 -22.9103 24.2928 -0.696114 88 -23.099 24.1107 -0.696066 71 -22.9673 24.2004 -0.695359 71 -26.1892 24.2702 -0.519939 122 -25.9693 24.295 -0.516999 121 -25.7472 24.2395 -0.512919 121 -25.5518 24.2076 -0.509574 120 -25.355 24.249 -0.507246 120 -25.1663 24.2205 -0.504063 119 -24.9736 24.1869 -0.500758 119 -24.7592 24.2065 -0.4979 118 -24.5832 24.1861 -0.495044 118 -24.3976 24.1549 -0.491902 117 -24.228 24.1384 -0.489208 117 -24.0237 24.1616 -0.486595 117 -22.9399 25.1172 -0.485418 204 -23.8436 24.1318 -0.483576 116 -22.9293 24.9479 -0.48273 255 -23.6933 24.131 -0.481412 116 -22.8662 24.7232 -0.478493 255 -23.4789 24.1393 -0.478473 115 -22.9552 24.5859 -0.477681 163 -23.3501 24.1583 -0.476921 115 -22.9884 24.4671 -0.47638 141 -23.0336 24.3613 -0.475445 177 -23.2089 24.1638 -0.475003 115 -23.0921 24.27 -0.474917 214 -26.2737 24.2969 -0.355116 112 -26.0377 24.3071 -0.352502 104 -25.8388 24.2737 -0.349857 104 -25.655 24.253 -0.347526 104 -25.4103 24.2493 -0.344692 103 -25.2201 24.2195 -0.342204 103 -25.0333 24.1915 -0.33978 102 -24.8203 24.2128 -0.337605 102 -24.6529 24.2009 -0.33559 102 -24.4601 24.1629 -0.333008 101 -24.2991 24.155 -0.331118 101 -24.1032 24.187 -0.32929 101 -23.9272 24.1617 -0.327054 100 -22.9346 25.0544 -0.326423 100 -23.7671 24.1511 -0.325164 100 -22.9265 24.888 -0.324413 100 -23.5805 24.1883 -0.323525 100 -22.9353 24.741 -0.322812 99 -23.4377 24.1933 -0.322013 99 -22.938 24.5883 -0.321085 99 -23.2839 24.1861 -0.320249 99 -22.9974 24.4202 -0.319799 99 -23.1173 24.2405 -0.31905 99 -23.0287 24.2999 -0.318764 99 -24.8607 24.7794 -0.1123 131 -24.9159 24.6016 -0.111521 131 -23.6768 25.5297 -0.109698 130 -23.5834 25.2697 -0.107388 130 -23.6034 25.0535 -0.106081 129 -23.5718 24.8632 -0.104628 129 -23.7896 24.393 -0.102929 128 -23.9015 24.2778 -0.102896 128 -24.2195 25.2477 0.1114 125 -24.195 24.9852 0.111958 125 -24.1869 24.8202 0.112294 124 -24.2536 24.7326 0.112335 124 -24.4774 24.4178 0.112506 124 -24.3024 24.5498 0.112593 124 -24.3427 24.4364 0.112733 124 +unknow 0.897254 1 0 76 -27.7173 -21.315 -0.739148 131 -27.7682 -21.2157 -0.738607 127 -27.6328 -21.3885 -0.73855 135 -27.5238 -21.5123 -0.738278 112 -27.8472 -21.0689 -0.737903 123 -27.8748 -20.9525 -0.736604 86 -27.3822 -21.5406 -0.735731 107 -28.1295 -20.5281 -0.735308 74 -28.1615 -20.4162 -0.734225 74 -28.2411 -20.2716 -0.733684 74 -28.2688 -20.1573 -0.732493 74 -28.3984 -19.9151 -0.731573 74 -28.3042 -20.0487 -0.731573 74 -28.4214 -19.7984 -0.730274 74 -28.5381 -19.5486 -0.72903 74 -28.4457 -19.6829 -0.729029 74 -26.4446 -21.5537 -0.71611 142 -26.2315 -21.5867 -0.712207 138 -26.0403 -21.5671 -0.707871 130 -25.8679 -21.5618 -0.704186 97 -26.8445 -19.7213 -0.694287 71 -26.6441 -19.7034 -0.689626 71 -26.49 -19.7833 -0.687566 71 -29.4439 -19.8213 -0.516007 121 -29.2276 -19.8092 -0.512212 120 -28.9543 -19.9575 -0.509314 120 -29.0315 -19.8096 -0.508907 134 -28.6698 -19.8943 -0.503806 119 -28.3614 -19.8124 -0.497687 118 -28.1584 -19.8023 -0.494178 118 -27.8937 -19.8131 -0.489894 117 -27.6541 -19.7737 -0.485447 127 -27.4588 -19.7646 -0.482102 133 -27.2361 -19.7996 -0.478837 150 -27.006 -19.7621 -0.474594 139 -26.8247 -19.759 -0.471575 135 -26.6245 -19.7407 -0.468066 132 -25.9106 -20.4371 -0.465122 255 -26.2755 -19.8034 -0.463129 215 -26.0969 -19.9921 -0.462556 174 -26.015 -20.0593 -0.462065 161 -26.9364 -19.7591 -0.318062 99 -26.739 -19.7439 -0.315418 98 -26.5125 -19.7706 -0.312804 98 -26.0609 -20.1439 -0.310691 97 -25.9059 -20.1545 -0.308865 111 -26.1084 -19.8551 -0.308521 182 -25.9987 -19.9658 -0.308206 231 -29.4032 -19.851 -0.116182 133 -29.1026 -19.7812 -0.113555 132 -28.8721 -19.7572 -0.111695 131 -28.6224 -19.7849 -0.109962 130 -28.3944 -19.7592 -0.108119 130 -28.1898 -19.7484 -0.106532 129 -27.9692 -19.7249 -0.104763 128 -27.7522 -19.7682 -0.103377 128 -27.5665 -19.7666 -0.10199 127 -27.3324 -19.7289 -0.100057 127 -26.1122 -21.1243 -0.0989306 142 -27.1213 -19.7714 -0.0987249 126 -26.8946 -19.7357 -0.0968644 126 -26.7264 -19.7416 -0.0956601 125 -26.416 -20.0956 -0.0953284 164 -26.5273 -19.7883 -0.0944561 125 -26.2037 -20.1297 -0.0939784 124 -26.0914 -20.1739 -0.0934123 124 -26.0168 -20.2472 -0.0932838 132 -26.3404 -19.7778 -0.0930331 131 -28.0744 -19.7826 0.112794 123 -27.2754 -19.7114 0.315118 99 -27.201 -19.919 0.31532 99 -28.6124 -19.8687 0.318933 102 -28.8195 -19.8787 0.319501 103 -28.9956 -19.8662 0.319946 103 -29.2295 -19.8248 0.320494 103 -29.4807 -19.8604 0.32123 104 +unknow 0.907707 1 0 29 -38.1993 24.3011 -0.715207 149 -37.9026 24.3642 -0.710799 149 -37.7352 24.4245 -0.708594 148 -37.4924 24.435 -0.704554 148 -37.1964 24.4927 -0.700146 147 -36.8892 24.4571 -0.694515 146 -36.5476 24.3965 -0.688029 216 -36.2716 24.3775 -0.683133 181 -38.2471 24.2913 -0.505083 128 -37.9202 24.335 -0.501114 168 -37.5951 24.2933 -0.496455 187 -37.3108 24.2759 -0.492551 205 -37.0156 24.3327 -0.489149 167 -36.7223 24.3053 -0.485056 189 -36.4428 24.2851 -0.481215 186 -36.192 24.2824 -0.477908 181 -38.2657 24.5252 -0.206756 164 -38.2423 24.2568 -0.205266 188 -37.6606 24.305 -0.201032 204 -37.4046 24.3067 -0.19908 176 -37.1341 24.3807 -0.197381 161 -36.8303 24.3474 -0.194901 160 -36.5488 24.3268 -0.192657 159 -36.3309 24.347 -0.191105 159 -35.9971 24.3701 -0.188696 158 -37.0088 24.3376 0.0858032 162 -36.7604 24.3399 0.0863687 153 -36.436 24.3726 0.087061 152 -36.1669 24.3573 0.0876974 152 +unknow 0.898637 1 0 51 -41.382 26.1411 -0.790121 159 -41.3606 25.9462 -0.787636 159 -43.5052 24.2975 -0.576274 139 -43.2649 24.3418 -0.573313 138 -43.0125 24.3779 -0.570132 138 -41.8325 24.9396 -0.558501 146 -40.4269 25.3222 -0.542749 176 -40.5406 25.1283 -0.542659 165 -40.7839 24.4877 -0.54069 133 -40.5104 24.9336 -0.540648 133 -40.5279 24.5945 -0.538106 133 -40.2918 24.6247 -0.535177 133 -41.0669 24.6217 -0.228939 171 -40.6339 24.6234 -0.225564 170 -40.3087 24.6 -0.222919 169 -40.0898 24.6397 -0.221404 169 -39.8289 24.9125 -0.220686 169 -39.8999 24.6961 -0.220198 168 -43.0843 24.2501 0.0716823 181 -42.7923 24.3518 0.0722438 167 -42.4779 24.3498 0.0729955 167 -42.1709 24.35 0.0737252 166 -41.8799 24.3575 0.0744057 165 -41.551 24.4288 0.0750874 165 -41.2882 24.4491 0.0756805 164 -40.9725 24.4361 0.0764429 163 -40.6377 24.4967 0.0771465 163 -39.8566 25.5892 0.0774061 255 -40.3982 24.5255 0.0776684 162 -39.7817 25.3649 0.077906 255 -39.8602 25.1515 0.0780332 255 -40.1879 24.5709 0.0780974 162 -39.8902 24.8212 0.0784375 209 -39.9645 24.6937 0.0784457 161 -40.9119 24.5846 0.360853 134 -41.1992 24.4936 0.361496 134 -41.4741 24.4809 0.362237 135 -41.7959 24.4939 0.363154 135 -42.1099 24.4119 0.363894 136 -42.4084 24.4071 0.36472 136 -42.7384 24.4185 0.365662 137 -40.2576 24.8888 0.639721 147 -40.2081 25.0331 0.640035 148 -40.3918 24.7968 0.640323 148 -40.2088 25.2093 0.6409 148 -40.7662 24.7631 0.643086 148 -40.353 25.5656 0.643763 149 -40.3282 25.7278 0.644371 149 -40.3935 25.9485 0.645968 149 -41.6553 24.6807 0.649674 150 -42.4867 24.5466 0.655621 152 +unknow 0.824472 1 0 38 -43.6354 -21.2219 -0.235149 173 -43.6605 -21.0647 -0.23473 173 -43.6907 -20.826 -0.234038 173 -43.7287 -20.6758 -0.233765 173 -43.7464 -20.5162 -0.233292 173 -43.7762 -20.3626 -0.232947 172 -43.8662 -20.1536 -0.232892 172 -43.8766 -19.9916 -0.232364 172 -47.5019 -20.0811 0.0655744 174 -47.096 -20.1718 0.0665006 173 -44.3641 -20.5061 0.07297 166 -44.412 -20.3592 0.0730182 166 -44.4172 -20.1846 0.363973 221 -44.3488 -20.4062 0.36407 178 -44.2917 -20.5488 0.364097 219 -44.3121 -20.7277 0.364402 209 -44.2898 -20.9723 0.364674 198 -44.2923 -21.1441 0.364921 162 -44.422 -21.3778 0.365626 137 -45.7349 -20.0089 0.367626 156 -46.2048 -20.042 0.369059 155 -46.69 -20.0787 0.370544 141 -47.1964 -20.0337 0.371991 142 -47.742 -20.0888 0.373683 143 -44.6178 -20.6098 0.656045 152 -44.7218 -20.4026 0.656117 152 -44.5819 -20.7634 0.656339 152 -44.5816 -20.9339 0.656999 152 -44.6234 -21.2106 0.658428 153 -46.124 -20.0863 0.666663 155 -46.5395 -20.0933 0.670178 156 -47.0348 -20.0445 0.674171 157 -47.5564 -20.0902 0.67873 158 -47.3822 -20.6962 1.02352 136 -47.4874 -20.5647 1.02422 128 -46.4979 -20.4505 1.26835 183 -46.3649 -21.0034 1.27053 164 -46.6755 -20.3538 1.27095 157 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_9.pose b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_9.pose new file mode 100644 index 00000000000..e06bc61ef7d --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_9.pose @@ -0,0 +1 @@ +11996 589.119415 33.330241 45.010605 40.748109 -0.002156 -0.010970 -0.639944 0.768340 diff --git a/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_9.seg b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_9.seg new file mode 100644 index 00000000000..6eb4047ab5d --- /dev/null +++ b/modules/perception/data/hm_tracker_test/QN68P2_12_1476265365_1476265665_9.seg @@ -0,0 +1,32 @@ +unknow 0.556688 1 0 31 55.973 -22.371 -1.73643 131 55.882 -22.5385 -1.73572 146 55.8441 -22.1164 -1.72953 156 55.8974 -21.8333 -1.72779 164 55.8778 -22.3128 -1.42332 164 55.7518 -22.4658 -1.42169 210 55.7971 -22.0775 -1.41893 136 55.6765 -23.5359 -1.02607 255 55.7296 -23.2494 -1.0248 255 55.745 -23.0506 -1.02354 255 55.7802 -22.8602 -1.02273 255 55.8465 -22.5806 -1.02184 255 55.8781 -22.3894 -1.02098 255 55.9203 -22.2027 -1.02037 255 55.9749 -22.0211 -1.02005 255 56.0669 -21.7527 -1.01981 233 57.0874 -24.5258 -0.77125 164 56.9827 -23.3227 -0.762413 190 56.4377 -24.4567 -0.761416 163 56.9904 -22.5973 -0.758265 162 56.0646 -23.1524 -0.74801 161 55.9824 -23.3246 -0.74785 184 55.8888 -22.5675 -0.741968 160 55.6614 -25.1067 -0.350425 255 55.7261 -24.8205 -0.349901 206 55.7288 -24.6123 -0.349155 206 55.7344 -24.4058 -0.348446 206 56.1651 -23.1363 -0.347555 206 55.8098 -23.711 -0.346576 214 55.8637 -23.5271 -0.346378 238 55.9647 -23.2597 -0.346291 205 +unknow 0.746087 1 0 16 55.5869 -10.2492 -1.61541 114 55.5594 -9.79362 -1.61193 93 55.4988 -9.96284 -1.61096 113 55.3687 -8.95502 -1.60136 93 55.3166 -9.12503 -1.60058 127 55.2334 -9.5575 -1.60026 93 55.3373 -8.77167 -1.59942 93 55.2138 -9.37559 -1.59864 102 55.6551 -10.2406 -1.3264 111 55.5487 -9.77057 -1.3213 110 55.193 -9.52916 -1.31068 124 55.2648 -8.91693 -1.30987 154 55.2326 -9.08985 -1.30976 199 55.6051 -9.04272 -0.942298 177 55.1977 -9.15472 -0.934457 177 55.1342 -9.41137 -0.934046 228 +unknow 0.760807 1 0 40 53.808 5.07185 -1.87534 189 53.6485 4.8869 -1.86856 188 53.5355 4.6224 -1.86331 188 56.2788 5.84872 -1.61737 205 56.0245 5.37777 -1.60769 120 56.2343 5.865 -1.32513 168 55.5849 5.53289 -1.30669 177 55.0806 5.30824 -1.29248 179 54.7347 5.10159 -1.28261 181 54.7412 4.66885 -1.28174 135 53.9655 4.77388 -1.26102 179 55.7415 5.65526 -0.936083 224 55.2735 5.43213 -0.92612 255 54.7309 5.205 -0.914645 244 54.1696 4.97969 -0.902803 237 56.0349 5.71487 -0.68 242 55.8038 5.51435 -0.67606 204 55.6019 5.31813 -0.672593 209 55.5045 4.8693 -0.670417 189 55.3216 5.11613 -0.667897 179 56.0505 5.76236 -0.307628 255 55.748 5.55418 -0.304685 224 54.8415 5.2895 -0.296205 228 54.3561 5.0701 -0.2916 243 53.9112 4.77225 -0.287304 236 54.9737 5.33569 0.0544189 224 54.5979 5.12632 0.0555061 240 54.0381 4.90278 0.057101 243 53.5252 4.68702 0.0585635 231 54.1961 5.00041 0.381067 209 54.7435 5.22467 0.382883 209 53.354 4.57433 0.695261 197 53.774 4.86554 0.699317 227 54.2881 5.08379 0.704177 213 55.1909 5.23364 1.08147 163 55.231 5.06244 1.08184 187 55.3367 4.94635 1.36688 225 55.3878 4.77557 1.36764 229 55.3924 5.21451 1.36855 204 55.5589 5.40622 1.3724 236 +unknow 0.829658 1 0 40 52.9729 -25.7519 -1.69191 135 52.8285 -25.4769 -1.68385 150 52.8667 -25.189 -1.68095 123 52.8751 -24.9895 -1.67844 131 52.8465 -24.7733 -1.67463 149 52.8774 -24.4845 -1.67161 155 52.8814 -24.285 -1.66903 154 52.8846 -24.0856 -1.66645 156 52.9264 -23.8042 -1.66394 159 52.937 -23.6093 -1.66168 134 52.9213 -23.4033 -1.65853 168 52.9488 -23.2169 -1.65692 131 52.9916 -22.9386 -1.6546 185 53.0009 -22.7452 -1.65241 136 53.174 -22.1304 -1.64984 95 53.0968 -22.2942 -1.64958 143 52.8896 -25.6897 -1.3861 114 52.7701 -25.427 -1.38009 127 52.7983 -24.9315 -1.375 213 52.8112 -24.7349 -1.37305 158 52.8492 -24.4496 -1.37072 154 52.8476 -24.2476 -1.3684 201 52.8508 -24.0483 -1.36623 165 52.8906 -23.7662 -1.36407 173 52.8956 -23.5689 -1.36201 174 53.4361 -22.2176 -1.361 113 53.0726 -22.9518 -1.35969 133 52.8889 -23.3671 -1.35962 171 52.8943 -23.1711 -1.35762 150 53.108 -22.277 -1.35341 112 52.9675 -22.5122 -1.35237 205 52.9506 -25.5925 -0.992619 183 52.9768 -25.2979 -0.990501 183 52.9656 -25.0886 -0.988463 183 52.9826 -24.8932 -0.987078 183 52.9536 -24.6768 -0.984673 182 53.0532 -23.3175 -0.975101 181 52.9431 -23.4679 -0.974281 181 53.046 -25.6068 -0.720316 158 53.0597 -25.3057 -0.718463 157 +unknow 0.793795 1 0 15 51.0766 11.0671 -1.8065 224 50.9017 10.6115 -1.79624 225 50.8491 10.8508 -1.79617 211 50.9132 10.4471 -1.7954 255 50.887 10.2753 -1.79308 224 50.6991 11.0735 -1.46606 97 50.6965 10.9061 -1.46483 87 50.6906 10.4889 -1.46187 255 50.6554 10.6477 -1.4618 235 50.7154 10.328 -1.46161 148 50.8643 10.9661 -1.20288 118 50.8528 10.7131 -1.20115 104 50.8314 10.542 -1.19963 104 50.8486 10.379 -1.1992 104 50.8911 10.1381 -1.19903 104 +unknow 0.948418 1 0 38 49.9408 -28.9106 -1.65325 95 50.007 -28.6353 -1.65068 95 50.0255 -28.4375 -1.64804 124 50.024 -28.2292 -1.64469 148 51.4261 -25.4014 -1.6421 95 50.02 -28.0202 -1.64127 157 50.0693 -27.7386 -1.63824 160 50.0598 -27.5283 -1.6347 129 50.9714 -25.4765 -1.63003 108 50.0877 -26.4272 -1.61865 138 50.1425 -26.1548 -1.61614 156 50.4965 -25.438 -1.61577 93 50.1321 -25.9494 -1.61279 133 50.1387 -25.7535 -1.61009 141 50.2577 -25.516 -1.61003 218 49.9076 -29.2883 -1.36075 163 49.977 -29.1183 -1.36005 214 49.8986 -28.863 -1.35474 176 49.9361 -28.3634 -1.34889 209 49.9466 -28.1622 -1.34646 209 51.3254 -25.329 -1.3437 112 49.9441 -27.9543 -1.34364 206 49.9914 -27.6722 -1.34104 204 50.7674 -25.3516 -1.33041 111 50.1931 -26.3587 -1.32897 111 50.0437 -26.5818 -1.32821 207 50.5768 -25.4552 -1.32704 159 50.2666 -25.4971 -1.32004 198 50.1228 -25.7219 -1.31933 232 50.1006 -27.6073 -0.959739 240 50.8842 -25.99 -0.958425 179 50.5872 -26.0391 -0.953483 179 50.1952 -26.5396 -0.951103 241 50.2896 -26.287 -0.950414 242 50.3524 -26.1188 -0.949968 178 51.1122 -28.8683 -0.717062 157 50.105 -29.0302 -0.704541 205 50.1786 -28.8627 -0.70423 156 +unknow 0.898716 1 0 51 47.9872 30.2241 -2.33933 227 47.8324 30.4424 -2.3387 255 48.0175 30.0329 -2.33592 222 48.0584 29.3281 -2.32084 206 48.041 29.1107 -2.31509 207 47.9764 28.8658 -2.30692 210 47.9832 28.5627 -2.30019 254 48.0332 28.3884 -2.29812 233 47.9498 28.1361 -2.28914 233 46.4872 29.9975 -2.277 184 46.1797 30.1081 -2.2681 183 45.8581 29.3874 -2.23838 182 46.3573 28.5896 -2.2383 182 46.0331 28.5896 -2.2259 194 48.9344 28.5074 -1.97498 196 48.1744 28.4719 -1.949 194 47.7616 28.5327 -1.93651 193 47.4045 28.522 -1.92448 192 47.0907 28.5352 -1.91438 192 45.7976 28.9461 -1.8803 189 45.5766 29.0073 -1.87436 189 49.0307 28.4716 -1.621 151 48.6047 28.4285 -1.60841 163 48.2758 28.4399 -1.59944 182 47.9267 28.4373 -1.5897 180 47.5248 28.5023 -1.57963 177 47.1955 28.5067 -1.5706 177 46.8616 28.5062 -1.56137 174 46.4952 28.5842 -1.55259 140 45.6633 29.6793 -1.54877 121 45.7203 29.4107 -1.54561 91 46.1792 28.5901 -1.54401 204 45.6812 29.1829 -1.54058 176 45.9552 28.6514 -1.53891 159 45.7068 28.9975 -1.53807 148 45.8328 28.7754 -1.53768 158 49.004 28.3772 -1.3274 202 48.6091 28.4554 -1.31921 152 48.268 28.4598 -1.31129 143 47.972 28.4889 -1.30478 109 46.7523 28.4651 -1.27609 108 46.6176 28.6851 -1.27609 108 46.8021 28.2943 -1.27484 118 48.7412 28.6574 -0.946464 178 48.4548 28.6941 -0.941808 177 47.3504 29.8795 -0.935176 177 47.2865 29.6318 -0.931381 176 47.2096 29.3773 -0.9273 200 47.203 29.1679 -0.924934 237 47.3589 28.7527 -0.923224 255 47.2581 28.895 -0.922977 239 +unknow 0.921576 1 0 38 41.8053 18.8247 -2.11305 108 41.7526 18.4081 -2.10202 108 41.6784 18.2193 -2.09473 107 41.6107 18.0343 -2.08785 107 41.546 17.8515 -2.08117 107 41.5653 17.6283 -2.07763 107 40.1895 17.9466 -2.02013 105 40.06 17.9924 -1.76416 153 39.8051 17.5032 -1.74477 152 39.8361 17.3677 -1.7436 152 39.9272 17.0355 -1.74145 161 39.8208 17.2123 -1.74019 168 39.9852 17.971 -1.48152 160 39.9703 17.8136 -1.47852 207 39.781 17.5799 -1.46819 255 39.7956 17.3627 -1.46534 255 39.8408 17.2336 -1.46495 255 39.9726 16.7714 -1.46264 255 39.8866 16.8828 -1.46126 255 39.7955 17.0659 -1.46079 255 40.0424 17.7657 -1.20497 255 39.939 17.8701 -1.20329 76 39.906 17.4804 -1.19722 139 39.9332 17.343 -1.19626 122 39.9765 17.2127 -1.19587 134 41.033 18.3902 -1.01113 92 40.5351 18.0147 -0.994641 91 40.4602 17.7537 -0.989924 160 40.4534 17.5994 -0.988081 160 40.4663 17.454 -0.986835 133 40.5763 17.1248 -0.986078 123 40.5186 17.2507 -0.985969 165 41.7759 18.6498 -0.726145 150 41.6494 18.3953 -0.509818 129 41.6411 18.2356 -0.508684 129 41.6358 18.0776 -0.507614 128 41.6874 17.867 -0.507048 128 41.7083 17.7212 -0.50645 128 +unknow 0.862313 1 0 45 33.7721 -9.45772 -1.76435 152 33.7102 -8.42053 -1.74603 123 33.6821 -8.13309 -1.74064 167 33.3609 -9.22997 -1.7386 173 33.33 -9.10885 -1.73512 150 33.2113 -8.79683 -1.7241 168 33.1306 -8.66424 -1.7178 101 33.1439 -8.5011 -1.71623 132 33.6895 -9.53209 -1.56388 148 33.5585 -8.98443 -1.55012 120 33.6647 -8.50471 -1.54922 106 33.6041 -8.3771 -1.54467 85 33.3599 -9.21253 -1.54344 139 33.6358 -8.10494 -1.54295 85 33.3701 -9.04632 -1.54172 215 33.2217 -8.7822 -1.531 84 33.7186 -9.47294 -1.36444 162 33.7097 -9.35631 -1.36265 164 33.7677 -8.747 -1.35808 173 33.6903 -8.55786 -1.3526 160 33.6794 -8.33022 -1.34964 125 33.6434 -8.43357 -1.34919 205 33.4498 -9.17133 -1.34918 177 33.3499 -8.97528 -1.34254 197 33.2099 -8.82595 -1.33472 255 33.6299 -8.52217 -1.12874 130 33.5605 -8.28045 -1.12388 130 33.5246 -8.38341 -1.1235 130 33.1954 -9.08103 -1.11801 177 33.2541 -8.81695 -1.11755 130 33.1548 -8.90215 -1.1147 255 33.6498 -8.48569 -0.911106 62 33.336 -8.7977 -0.903811 62 33.2252 -8.88025 -0.901036 248 33.181 -9.0362 -0.900969 221 33.7724 -8.76532 -0.737814 255 33.815 -8.49345 -0.737113 74 33.7688 -8.5947 -0.736569 74 33.4315 -8.78879 -0.729028 160 33.1846 -8.94701 -0.723657 245 33.1295 -8.82053 -0.721326 255 33.3697 -8.83756 -0.496781 255 33.2433 -8.91601 -0.494697 255 33.3777 -8.8001 -0.336206 149 33.3054 -8.89302 -0.33548 153 +unknow 0.90511 1 0 54 28.9705 -20.3489 -1.78281 131 29.5298 -19.4523 -1.78047 123 28.8624 -20.4088 -1.77977 125 29.4228 -19.5813 -1.77945 123 28.599 -20.698 -1.77717 138 28.759 -20.4716 -1.77707 127 28.6493 -20.5976 -1.77616 178 28.3985 -20.8948 -1.77458 171 28.487 -20.7537 -1.77391 130 32.0873 -19.8418 -1.70126 92 31.7841 -19.7924 -1.68688 106 29.3269 -21.5585 -1.63389 89 29.0937 -21.528 -1.62346 133 29.2538 -21.293 -1.62296 88 29.1746 -20.9559 -1.60971 88 28.9743 -20.9503 -1.60131 87 29.8158 -19.622 -1.59821 110 28.9102 -20.5598 -1.58715 87 29.5301 -19.6338 -1.58646 147 28.7888 -20.3374 -1.57561 111 32.3071 -19.8903 -1.49529 135 32.0355 -19.8623 -1.48425 134 29.9581 -19.6349 -1.39999 128 29.7252 -19.6833 -1.39245 128 28.7251 -20.6882 -1.3811 255 28.6177 -20.4747 -1.37159 255 28.6698 -20.3085 -1.36917 255 28.655 -20.1632 -1.36486 255 32.3001 -19.8663 -1.25304 141 32.0592 -19.857 -1.24495 140 31.0546 -19.7098 -1.2091 137 30.799 -19.6833 -1.20023 137 29.7541 -19.8146 -1.16924 134 28.9436 -20.9604 -1.16874 134 29.7246 -19.6603 -1.165 134 28.8228 -20.735 -1.15988 133 28.8242 -20.5305 -1.15534 147 28.8824 -20.2995 -1.15203 158 28.7353 -20.3312 -1.1481 150 29.1623 -21.0651 -0.951904 64 29.0642 -20.8558 -0.945391 64 29.0708 -20.6538 -0.941783 64 29.013 -20.476 -0.936948 71 31.6819 -19.8759 -0.805681 79 31.0657 -20.7359 -0.804303 79 31.4503 -19.8684 -0.800257 79 31.2849 -19.9016 -0.796947 78 30.8932 -19.8573 -0.787346 78 29.7662 -21.108 -0.780966 85 31.2448 -20.1152 -0.377636 136 31.096 -20.1577 -0.376026 108 30.932 -20.1897 -0.374134 108 30.7782 -20.2966 -0.373027 125 30.7109 -20.391 -0.372962 124 +unknow 0.884512 1 0 76 25.0211 24.8302 -2.18278 99 27.8013 26.4698 -2.17967 171 25.0578 24.7108 -2.17885 134 25.1526 24.5715 -2.17682 135 25.211 24.4743 -2.17506 140 25.2806 24.388 -2.17439 111 27.6286 26.4714 -2.17196 134 25.342 24.2176 -2.16937 141 27.4087 26.5098 -2.16376 144 27.1979 26.472 -2.15269 136 27.0247 26.4694 -2.14486 175 26.3425 24.5366 -2.03099 82 26.0913 24.5334 -2.01943 82 27.2517 24.7342 -1.86178 127 27.0162 24.6755 -1.84975 127 26.7705 24.6834 -1.83985 142 26.5583 24.6423 -1.8295 148 26.3013 24.5579 -1.81567 137 25.3358 25.2708 -1.80441 255 26.0343 24.539 -1.80397 153 25.5978 24.9768 -1.80329 135 25.3796 25.1559 -1.8016 255 25.5587 24.7822 -1.79407 175 25.7425 24.571 -1.79329 141 25.6349 24.6227 -1.79092 255 27.6539 24.725 -1.66939 90 27.3843 24.7173 -1.65896 90 27.1511 24.6623 -1.64833 89 26.9171 24.6048 -1.6376 102 26.6672 24.6082 -1.62839 121 26.5385 24.6443 -1.62485 88 26.2784 24.5572 -1.61219 88 25.9879 24.5164 -1.60005 87 25.4747 24.8781 -1.59397 87 25.7992 24.4921 -1.59225 102 25.5154 24.7618 -1.59134 87 25.6715 24.5248 -1.58871 87 25.5542 24.6441 -1.5886 87 27.2867 24.7247 -1.44521 131 27.0849 24.6972 -1.43766 131 26.8557 24.6429 -1.42841 130 26.6382 24.6754 -1.42221 130 26.4057 24.6145 -1.41269 129 26.1914 24.5687 -1.40425 143 25.5649 25.0603 -1.39921 144 25.9782 24.5997 -1.39823 168 25.6021 24.9394 -1.39661 145 25.8661 24.6481 -1.39607 177 25.6934 24.7935 -1.39499 147 25.7553 24.6974 -1.39401 157 27.7403 24.8439 -1.22686 139 27.5165 24.7999 -1.21931 138 27.3052 24.7655 -1.21237 138 26.1344 25.7252 -1.20495 158 26.1537 25.5027 -1.19948 137 26.1475 25.3371 -1.19486 136 26.7451 24.6435 -1.19325 136 26.1578 25.1883 -1.19116 136 26.2473 25.0372 -1.18962 136 26.5942 24.6596 -1.18939 136 26.3648 24.8348 -1.18754 136 26.2866 24.9175 -1.18754 136 26.4669 24.6967 -1.18677 136 27.6296 25.1231 -0.99625 67 26.657 26.0586 -0.994103 66 26.8768 24.8263 -0.971861 65 26.7943 24.9065 -0.971666 65 26.9527 26.0621 -0.808271 79 26.9798 25.8436 -0.804695 79 27.6255 25.0035 -0.801998 79 26.9739 25.6761 -0.801443 79 26.9731 25.5143 -0.798408 78 27.0419 25.3391 -0.796512 78 27.0467 25.1846 -0.793749 78 27.0816 25.0588 -0.792124 78 27.195 24.9269 -0.791963 78 +unknow 0.983816 1 0 142 24.7727 -19.4993 -1.75222 155 24.6665 -19.6046 -1.7511 120 24.5288 -19.7479 -1.74998 119 24.5829 -19.6645 -1.74936 154 24.3606 -19.9298 -1.74898 122 24.4511 -19.8123 -1.74873 149 24.2871 -19.9974 -1.7481 157 24.2165 -20.0672 -1.74748 119 24.0528 -20.1234 -1.74188 143 23.7402 -20.4393 -1.73976 105 23.6548 -20.4954 -1.73801 121 23.5752 -20.5565 -1.73677 146 23.4676 -20.6581 -1.73589 104 23.2723 -19.594 -1.68345 115 23.0328 -19.7035 -1.67649 101 23.098 -19.5714 -1.67425 158 26.0812 -19.7664 -1.632 145 25.8559 -20.0471 -1.63154 145 26.1564 -19.6301 -1.63076 145 25.706 -19.7379 -1.61423 140 25.3848 -19.8104 -1.60241 138 25.1669 -19.768 -1.59128 166 24.978 -19.8108 -1.58442 153 24.7829 -19.7834 -1.57486 166 24.6022 -19.7662 -1.56631 183 24.3971 -19.728 -1.55596 173 24.1785 -19.7405 -1.54685 181 23.9913 -19.7138 -1.53774 194 23.806 -19.6874 -1.52875 181 23.4013 -19.6646 -1.51041 156 23.2341 -19.6491 -1.50265 195 23.0658 -19.6315 -1.49478 124 22.8972 -19.675 -1.48915 214 22.8081 -19.7233 -1.48713 120 26.3746 -19.6416 -1.45587 147 26.1849 -19.6284 -1.44777 172 25.976 -19.6634 -1.44038 123 25.7918 -19.6516 -1.43258 110 25.6349 -19.6596 -1.42651 128 25.3826 -19.6565 -1.41628 170 25.2026 -19.644 -1.40869 159 25.0324 -19.6379 -1.4017 161 24.8437 -19.6161 -1.39351 161 24.6355 -19.6407 -1.38601 158 24.4678 -19.6329 -1.37913 161 24.3019 -19.6255 -1.37235 162 24.0978 -19.6488 -1.36506 162 23.9326 -19.6394 -1.35827 164 23.7553 -19.619 -1.35068 149 23.3925 -19.6302 -1.33691 115 23.2591 -19.643 -1.33215 106 23.0452 -19.5864 -1.32203 105 22.9026 -19.6519 -1.31869 123 22.7441 -19.6401 -1.31221 190 22.6401 -19.6747 -1.30937 156 26.4013 -19.7184 -1.27109 163 25.908 -19.6693 -1.25205 155 25.7333 -19.6645 -1.24567 165 25.4774 -19.66 -1.23642 215 25.3002 -19.6505 -1.22986 207 25.1281 -19.6439 -1.22357 207 24.9359 -19.6203 -1.21611 206 24.7273 -19.6457 -1.20947 208 24.5515 -19.6323 -1.20291 208 24.3775 -19.6192 -1.19644 207 24.1762 -19.6458 -1.19015 210 24.0106 -19.637 -1.18413 209 23.8485 -19.6299 -1.17829 212 23.6604 -19.6003 -1.17093 196 23.1613 -19.6206 -1.15431 110 22.9819 -19.6555 -1.14919 158 22.8443 -19.6625 -1.14469 233 22.7205 -19.6806 -1.14101 202 22.5642 -19.7323 -1.13724 213 22.4691 -19.7741 -1.13526 211 26.1567 -19.7016 -1.05343 124 25.8973 -19.6338 -1.04387 249 25.7434 -19.6446 -1.0394 214 25.5722 -19.6413 -1.03408 203 25.3358 -19.65 -1.02706 230 25.1574 -19.6384 -1.02135 203 24.9621 -19.6123 -1.0148 236 24.7646 -19.6464 -1.00963 207 24.5779 -19.6243 -1.00347 205 24.4009 -19.6086 -0.99776 242 24.2382 -19.6034 -0.992748 211 24.0435 -19.6339 -0.987658 212 23.8783 -19.6243 -0.982492 209 23.715 -19.615 -0.977403 203 23.5104 -19.6329 -0.971774 239 23.3416 -19.6166 -0.966376 196 23.1838 -19.6085 -0.961519 235 23.0288 -19.6642 -0.958355 212 22.8836 -19.6648 -0.954114 215 22.7538 -19.6777 -0.950644 217 22.6316 -19.6965 -0.947559 234 22.51 -19.7779 -0.946091 240 26.0154 -19.8086 -0.846162 59 25.7832 -19.7602 -0.839258 207 25.3956 -19.6542 -0.827257 103 24.9364 -19.7414 -0.817315 58 24.7695 -19.7362 -0.812991 205 24.5482 -19.6865 -0.806409 153 24.3912 -19.687 -0.802472 143 24.1741 -19.7008 -0.797309 177 24.0085 -19.6918 -0.792985 141 23.8339 -19.6744 -0.788274 187 23.6242 -19.6893 -0.783368 151 23.4902 -19.7031 -0.780334 150 23.3211 -19.6866 -0.775817 151 23.1616 -19.6771 -0.771686 149 22.9927 -19.721 -0.768458 138 22.7279 -19.7433 -0.762454 138 22.5005 -19.984 -0.762059 116 22.594 -19.8146 -0.760709 174 25.5233 -19.8381 -0.668001 69 25.2972 -19.7899 -0.662361 99 24.3998 -19.9675 -0.646351 68 24.2192 -20.1394 -0.645531 68 24.2934 -19.7532 -0.640444 67 23.5711 -19.8515 -0.62704 66 23.2876 -19.7379 -0.619177 224 23.1321 -19.794 -0.616951 178 22.5962 -20.341 -0.615793 112 22.51 -20.3917 -0.614977 172 22.662 -20.2076 -0.614712 137 22.9941 -19.8013 -0.614238 174 22.7089 -20.1217 -0.614118 91 22.745 -20.0265 -0.613145 99 22.882 -19.8302 -0.612446 129 24.9633 -19.9259 -0.443864 110 23.3811 -20.9992 -0.433328 108 23.3856 -20.8052 -0.43076 108 23.4029 -20.6892 -0.429457 108 23.328 -20.493 -0.425664 107 23.8079 -19.8773 -0.424949 107 23.344 -20.3776 -0.42436 107 23.6703 -19.889 -0.422947 246 23.3656 -20.2033 -0.422364 107 23.539 -19.9052 -0.421108 166 24.1633 -20.3806 -0.290117 94 24.0578 -20.4865 -0.289924 94 +unknow 0.852147 1 0 77 19.8849 -17.2982 -1.72678 221 19.7957 -17.3851 -1.72604 198 19.6842 -17.3969 -1.72046 245 19.5952 -17.4282 -1.71709 204 19.2544 -17.7863 -1.71619 203 19.3307 -17.6886 -1.71546 204 19.1883 -17.8372 -1.71516 200 19.1234 -17.8892 -1.71428 202 19.5062 -17.459 -1.71371 207 19.3582 -17.6023 -1.71268 210 19.4074 -17.536 -1.71209 193 18.6071 -17.5153 -1.66777 194 18.5201 -17.5987 -1.66733 207 19.7931 -17.4831 -1.58207 143 19.5831 -17.5181 -1.57299 92 19.407 -17.526 -1.56445 83 18.929 -17.587 -1.5433 100 18.7497 -17.5307 -1.53178 120 18.565 -17.4679 -1.51971 165 18.2138 -17.6852 -1.51266 86 19.7073 -17.4527 -1.42823 77 19.5162 -17.5588 -1.42375 187 19.5764 -17.4467 -1.42189 110 19.2198 -17.5115 -1.40808 241 18.9163 -17.5085 -1.39403 227 18.7765 -17.4889 -1.38682 139 18.5905 -17.4248 -1.37563 153 18.4995 -17.504 -1.37488 142 19.6665 -17.503 -1.27169 126 19.3652 -17.3996 -1.25516 127 19.143 -17.3091 -1.24246 118 18.8759 -17.559 -1.24087 226 18.9236 -17.4929 -1.24031 141 19.0427 -17.3276 -1.23897 241 18.6459 -17.6204 -1.23378 107 19.675 -17.3668 -1.11931 99 19.6189 -17.4272 -1.11921 114 19.4852 -17.4181 -1.11384 169 19.007 -17.7577 -1.10756 138 19.0508 -17.5755 -1.1029 194 18.8157 -17.7455 -1.10006 111 18.9355 -17.5795 -1.09875 117 19.1169 -17.2511 -1.09431 142 18.9846 -17.3493 -1.09269 132 19.0021 -17.256 -1.09016 236 19.1615 -17.2456 -0.948665 143 18.7514 -17.5828 -0.945329 175 19.0495 -17.2535 -0.945161 255 18.973 -17.2931 -0.943812 217 18.748 -17.4694 -0.941739 196 18.856 -17.3499 -0.941654 214 18.7867 -17.3955 -0.940754 209 19.2505 -17.5079 -0.794025 189 19.2017 -17.3535 -0.788632 153 19.3525 -17.1068 -0.786636 147 19.2733 -17.1449 -0.785324 248 18.9922 -17.3819 -0.783388 194 19.1135 -17.1647 -0.781236 185 18.6689 -17.6328 -0.780834 140 18.6643 -17.4626 -0.776213 197 18.6942 -17.3807 -0.774905 212 18.7473 -17.3205 -0.77483 255 18.6833 -17.6239 -0.619753 95 18.9445 -17.3162 -0.619183 135 19.047 -17.1914 -0.618929 47 18.9588 -17.2203 -0.617444 220 18.7003 -17.4743 -0.616854 179 18.7936 -17.3416 -0.616149 175 18.7317 -17.3938 -0.615824 184 18.6836 -17.5722 -0.486866 173 18.9277 -17.2496 -0.485792 241 18.7048 -17.4267 -0.484592 203 18.7375 -17.3475 -0.483781 212 18.7904 -17.2871 -0.483729 213 18.8265 -17.512 -0.316674 196 18.914 -17.3731 -0.316066 147 18.8329 -17.4081 -0.315329 239 +unknow 0.861426 1 0 70 15.9445 23.1273 -2.08133 152 16.12 22.9932 -2.08052 120 16.0069 23.0623 -2.07986 153 16.1806 22.9261 -2.07889 146 16.2445 22.8638 -2.07775 148 16.9027 22.3466 -2.07549 148 16.9705 22.2902 -2.07516 141 16.3335 22.761 -2.07515 142 16.8277 22.3932 -2.07483 152 16.7006 22.4434 -2.0719 128 16.3781 22.6724 -2.07141 150 16.6205 22.483 -2.0706 160 16.5427 22.5254 -2.06962 152 16.4352 22.6015 -2.06946 152 17.5834 22.8285 -1.9078 202 17.6526 22.77 -1.9075 210 17.4255 22.7713 -1.89738 158 17.2118 22.7133 -1.88446 168 16.9528 22.6662 -1.87023 216 16.6813 22.8223 -1.86758 216 16.7423 22.7553 -1.86626 183 16.8053 22.6914 -1.86524 197 16.4846 22.7779 -1.85643 155 16.3826 22.7875 -1.85261 168 16.2994 22.8226 -1.85114 182 17.6862 22.8349 -1.75024 103 17.5317 22.7827 -1.74103 100 17.3887 22.7441 -1.73303 180 17.2308 22.7589 -1.72734 92 16.961 22.6972 -1.71297 195 16.8277 22.7416 -1.70998 57 16.5195 22.8459 -1.70334 183 17.5833 22.7811 -1.58113 67 17.4217 22.7191 -1.57193 67 17.197 22.7947 -1.5672 117 16.8516 22.8555 -1.55738 188 16.8983 22.6943 -1.55104 225 16.6415 22.7201 -1.54283 111 16.424 22.7967 -1.53872 144 16.516 22.6981 -1.53711 150 17.6708 22.7864 -1.41304 96 17.2573 22.691 -1.3946 186 16.8668 22.9159 -1.39156 172 17.1153 22.7258 -1.39134 245 17.0415 22.7763 -1.39111 142 16.9151 22.756 -1.38594 177 16.4055 22.9618 -1.37839 167 16.6429 22.7607 -1.37705 191 16.535 22.7627 -1.37356 255 16.4194 22.829 -1.37277 157 17.2949 22.6304 -1.23289 150 17.2044 22.6592 -1.23126 205 16.8357 22.9121 -1.23035 180 17.0674 22.7001 -1.22873 202 16.8648 22.7267 -1.22367 128 16.9301 22.6657 -1.22316 154 17.3032 22.7123 -1.07343 227 16.7972 23.0841 -1.07324 172 17.1149 22.6119 -1.06472 185 16.7447 22.8602 -1.06372 223 16.9531 22.6187 -1.06059 197 16.882 22.6719 -1.06059 251 17.1907 22.9786 -0.897342 255 17.1689 22.8001 -0.891331 234 17.1994 22.6919 -0.888712 205 17.3037 22.6074 -0.88856 202 17.3679 22.7307 -0.714194 94 17.2365 22.7804 -0.712902 217 17.1565 22.8232 -0.712449 52 17.2059 22.8 -0.566047 62 +unknow 0.92631 1 0 801 14.5854 -1.34453 -1.76068 123 14.5299 -1.61609 -1.75693 99 14.2043 -1.15806 -1.27363 218 14.1701 -1.11054 -1.26969 255 14.1359 -1.06326 -1.26574 255 14.1229 -0.995404 -1.26387 171 14.1665 -1.18456 -1.11393 212 14.0224 0.107397 -1.0959 63 14.2431 -1.19906 -1.03035 152 14.219 -1.15201 -1.02793 255 14.1746 -1.08111 -1.02359 255 14.166 -1.03568 -1.02255 255 14.1658 -0.923856 -1.02186 255 14.1613 -0.9906 -1.02186 255 14.2835 -1.21061 -0.958131 102 14.2375 -1.00433 -0.953086 255 14.2269 -1.09347 -0.95276 255 14.2216 -1.1605 -0.952759 255 14.2282 -0.93634 -0.951947 255 14.2251 -0.891273 -0.951459 255 14.2079 -0.845431 -0.949832 236 14.1746 -1.04477 -0.948202 216 14.2677 -1.10604 -0.84088 152 14.2426 -1.21668 -0.839705 167 14.1597 -1.05273 -0.832663 221 14.1605 -0.98571 -0.83237 179 14.1496 -0.94027 -0.831343 218 14.1405 -0.895024 -0.830463 200 14.1015 -0.848007 -0.827382 126 14.2663 -1.12567 -0.760565 176 14.2409 -1.16873 -0.759074 102 14.1783 -1.07408 -0.75433 97 14.1783 -0.962158 -0.753789 255 14.1732 -1.00657 -0.753653 255 14.1733 -0.917112 -0.753247 255 14.1721 -0.872346 -0.752976 255 14.1282 -0.802926 -0.749724 250 14.0988 -0.75688 -0.747555 236 14.2103 1.23325 -0.677321 64 14.2066 -1.18296 -0.676812 76 14.1664 1.1847 -0.674337 144 14.1543 -1.11136 -0.673207 143 14.1471 -1.02137 -0.672337 255 14.1535 -0.865509 -0.67209 255 14.1477 -0.954421 -0.672089 255 14.1427 -0.909443 -0.671592 255 14.1279 -1.06459 -0.671343 157 14.1016 -0.795552 -0.668609 249 14.1 -0.751027 -0.668361 255 14.0903 -0.706105 -0.667615 221 14.3693 1.23306 -0.601536 191 14.3174 -1.18361 -0.598375 128 14.2662 -1.04421 -0.59489 255 14.267 -0.976708 -0.594666 255 14.262 -0.931376 -0.594216 255 14.2454 -1.13275 -0.594102 200 14.233 -1.0868 -0.593203 164 14.208 1.17395 -0.592202 234 14.2341 -0.682886 -0.591856 255 14.203 -0.882839 -0.59073 255 14.2031 -0.815677 -0.590506 240 14.1956 -0.77053 -0.589944 249 14.182 -0.725142 -0.589045 194 14.1374 -0.611669 -0.586234 191 14.2594 -1.20912 -0.514911 151 14.2151 1.21207 -0.512696 199 14.2167 -1.09301 -0.51228 162 14.1654 -1.13376 -0.50985 97 14.1567 1.11766 -0.509355 126 14.1543 -1.04338 -0.50894 255 14.1352 1.16068 -0.508444 155 14.1476 -0.998185 -0.508434 255 14.1481 -0.931235 -0.508232 255 14.1473 0.849004 -0.507937 255 14.143 -0.886269 -0.507827 255 14.1279 1.04849 -0.507634 245 14.1398 -0.841466 -0.507524 255 14.1396 -0.774598 -0.507322 255 14.1192 1.00327 -0.507027 115 14.1466 -0.418771 -0.506919 255 14.1339 0.603375 -0.506621 255 14.1428 0.0257931 -0.506416 255 14.1107 0.891371 -0.506217 236 14.1286 0.536479 -0.506215 255 14.1337 0.18121 -0.506012 255 14.1182 -0.684436 -0.506007 255 14.116 -0.728787 -0.506007 255 14.1173 -0.617716 -0.505805 255 14.1183 0.491694 -0.505608 255 14.1092 -0.572938 -0.505299 255 14.1089 -0.528532 -0.505198 255 14.0966 -0.483699 -0.50449 253 14.0879 -0.372631 -0.503883 255 14.0879 0.291381 -0.503785 247 14.2833 -1.21538 -0.434509 190 14.257 -1.14555 -0.433073 108 14.2406 -1.09925 -0.432175 255 14.2094 -1.00714 -0.430469 255 14.2 -0.939272 -0.429841 255 14.1922 -1.05077 -0.42984 255 14.1837 -0.84876 -0.428854 255 14.1749 -0.89295 -0.428584 255 14.1496 -0.779892 -0.427148 255 14.15 -0.735336 -0.427058 255 14.1083 -0.688816 -0.425083 220 14.2221 -1.21641 -0.341183 156 14.2054 1.20075 -0.340501 55 14.196 -1.16921 -0.340027 151 14.1861 -1.01145 -0.33918 255 14.1735 -1.10009 -0.338949 131 14.1573 1.152 -0.338496 147 14.1668 -0.942951 -0.338256 255 14.1537 -0.897395 -0.337639 255 14.137 -1.05251 -0.337407 234 14.1483 -0.785525 -0.337178 255 14.1554 -0.140256 -0.336641 209 14.129 -0.695382 -0.336253 255 14.1126 -0.850203 -0.335944 255 14.1044 0.947306 -0.335875 255 14.1068 -0.738695 -0.335482 255 14.0894 0.990803 -0.335412 242 14.096 0.7912 -0.33518 147 14.0874 0.835134 -0.334949 175 14.0938 0.680089 -0.334872 201 14.0958 0.635811 -0.334872 196 14.0978 0.591527 -0.334872 170 14.0999 -0.538555 -0.334866 247 14.0896 0.724268 -0.334795 209 14.0975 -0.494105 -0.334712 255 14.0844 0.524518 -0.334255 170 14.0922 0.0154359 -0.334175 144 14.0896 -0.272312 -0.334174 216 14.0881 -0.338701 -0.334174 220 14.087 -0.183725 -0.33402 216 14.0863 -0.227978 -0.33402 208 14.083 -0.382847 -0.334019 219 14.078 0.480013 -0.333946 166 14.0775 0.435727 -0.333869 164 14.2704 1.23731 -0.253389 40 14.2105 -1.1621 -0.251249 239 14.1722 -1.11424 -0.249895 236 14.1737 -1.06956 -0.24983 221 14.1766 -0.913153 -0.249573 255 14.167 -1.02433 -0.249508 255 14.1523 1.1373 -0.249324 199 14.1517 -0.956244 -0.248863 255 14.1339 1.09111 -0.248615 127 14.1369 1.02434 -0.24855 255 14.1401 0.979924 -0.24855 255 14.1434 -0.799603 -0.248284 255 14.1295 -0.865647 -0.247961 255 14.1343 -0.665542 -0.247768 255 14.1302 -0.709844 -0.247704 255 14.0969 1.17734 -0.247647 40 14.1152 0.933601 -0.247646 255 14.1181 0.822466 -0.247517 255 14.1134 0.866687 -0.247453 255 14.1253 -0.598447 -0.247382 255 14.1251 -0.553989 -0.247317 255 14.1161 0.711148 -0.247259 255 14.1163 0.666695 -0.247194 255 14.1264 -0.398534 -0.247189 255 14.1228 -0.50947 -0.247189 255 14.1119 -0.753406 -0.247187 255 14.1163 0.622255 -0.247129 255 14.1188 0.511285 -0.247064 255 14.1203 0.466929 -0.247064 255 14.1142 0.577729 -0.247 255 14.1216 -0.354016 -0.246996 255 14.1026 0.777088 -0.246936 255 14.1171 -0.44268 -0.246931 255 14.1186 -0.198645 -0.246803 255 14.1159 -0.242979 -0.246738 255 14.1131 -0.287285 -0.246674 255 14.1137 -0.0877326 -0.24661 255 14.0952 -0.154074 -0.246029 255 14.078 -0.0433507 -0.245449 255 14.076 0.000877082 -0.245385 255 14.0359 0.0669469 -0.244095 255 14.2216 -1.18619 -0.178528 255 14.1951 -1.11659 -0.177661 255 14.1866 -1.07107 -0.177336 255 14.1474 1.13647 -0.176424 255 14.1218 1.17912 -0.175828 179 14.1312 -0.97752 -0.175655 255 14.1281 -1.02191 -0.175655 255 14.1087 1.06655 -0.175231 255 14.1137 -0.909463 -0.175059 255 14.1072 0.977346 -0.175014 255 14.102 1.02152 -0.17496 255 14.1124 0.866394 -0.174959 255 14.1125 -0.864866 -0.174951 255 14.1132 -0.820407 -0.174897 255 14.1056 0.910486 -0.174851 255 14.1172 -0.709433 -0.174844 255 14.1149 -0.75378 -0.174843 255 14.1173 -0.664982 -0.17479 255 14.1096 0.777286 -0.174742 255 14.1131 0.710791 -0.174742 255 14.1133 0.666355 -0.174687 255 14.1181 -0.55392 -0.174682 255 14.1163 -0.598271 -0.174682 255 14.1133 0.621932 -0.174633 255 14.1178 -0.509488 -0.174628 255 14.1011 0.821269 -0.17458 255 14.1173 -0.465064 -0.174574 255 14.1121 0.555265 -0.174524 255 14.1174 -0.398472 -0.17452 255 14.1117 0.510855 -0.17447 255 14.1166 -0.354065 -0.174466 255 14.1176 -0.198788 -0.174413 255 14.1156 -0.309667 -0.174412 255 14.1142 -0.154386 -0.174304 255 14.1109 -0.243035 -0.17425 255 14.1086 -0.109989 -0.174142 255 14.1069 -0.0434972 -0.174088 255 14.105 0.00082906 -0.174034 255 14.0733 0.465275 -0.173385 255 14.3097 1.22828 -0.0852069 203 14.2579 -1.2009 -0.0840927 190 14.2318 1.17641 -0.0835327 255 14.223 -1.08562 -0.0831952 255 14.2227 1.06322 -0.0831648 255 14.2155 1.13007 -0.0831242 255 14.2155 -1.12999 -0.0831133 241 14.2231 -0.973346 -0.0830327 255 14.2164 -1.04022 -0.0829914 255 14.208 1.01721 -0.0827972 255 14.211 -0.882877 -0.0826658 255 14.2035 -0.770505 -0.0823807 255 14.1997 -0.837429 -0.0823802 255 14.1892 0.971032 -0.082348 255 14.1999 -0.725584 -0.0822585 255 14.1882 -0.926252 -0.0822572 255 14.1981 -0.680786 -0.082177 255 14.1895 0.769672 -0.0821024 255 14.1784 0.858447 -0.08198 255 14.1697 0.902591 -0.0818577 255 14.1752 -0.612797 -0.0816467 255 14.1631 0.812825 -0.0816124 255 14.179 0.456648 -0.0816112 255 14.1647 -0.523229 -0.0813613 255 14.1676 -0.367402 -0.0813214 255 14.1531 0.70075 -0.0812853 255 14.1603 -0.478534 -0.081239 255 14.151 -0.567267 -0.0811161 255 14.1372 0.610909 -0.0808768 255 14.1444 -0.41131 -0.080872 255 14.1396 0.499783 -0.0808355 255 14.148 -0.100172 -0.0808329 255 14.1312 0.655131 -0.0807952 255 14.1454 -0.166822 -0.0807916 255 14.1448 -0.21126 -0.0807914 255 14.1441 -0.255697 -0.0807912 255 14.1427 -0.322346 -0.0807908 255 14.1339 0.544044 -0.0807539 255 14.1423 -0.0557111 -0.0807106 255 14.14 0.0997747 -0.0806705 255 14.1364 -0.0112876 -0.0805883 255 14.1264 0.0330816 -0.0803842 255 14.2126 -1.19565 -0.0170259 159 14.2025 1.22042 -0.0169117 167 14.1797 -1.08073 -0.0163649 255 14.1664 1.17256 -0.0162813 253 14.1782 -0.991038 -0.0162394 255 14.1665 -1.14687 -0.0162382 209 14.1664 1.01589 -0.0160917 255 14.1736 -0.878889 -0.0160511 255 14.1671 0.948861 -0.0160284 255 14.1703 -0.833993 -0.0159568 255 14.1708 -0.789356 -0.0159256 255 14.162 0.903857 -0.0159023 255 14.1628 0.859246 -0.0158706 255 14.1704 -0.722358 -0.0158631 255 14.1634 0.814626 -0.015839 255 14.1706 -0.677738 -0.0158318 255 14.1707 -0.633123 -0.0158005 255 14.1631 0.747674 -0.0157757 255 14.1692 -0.521576 -0.0157067 255 14.1675 -0.566088 -0.0157065 255 14.1371 -1.03274 -0.0156403 249 14.1554 0.702698 -0.015618 255 14.1649 -0.41003 -0.0155813 255 14.1608 -0.476705 -0.0155494 255 14.1601 -0.365362 -0.015487 255 14.1179 1.10169 -0.01543 255 14.1455 0.657689 -0.0154287 255 14.1503 0.546571 -0.0154283 255 14.1519 0.502113 -0.0154281 255 14.1561 -0.276256 -0.0153929 255 14.1173 1.05704 -0.0153669 246 14.1532 -0.320679 -0.0153612 255 14.1474 0.457468 -0.0153334 255 14.1506 0.346341 -0.0153329 255 14.1229 -0.920204 -0.0152944 255 14.1473 -0.209377 -0.0152357 255 14.1459 -0.164904 -0.0152044 255 14.1325 0.590384 -0.0151763 255 14.1374 0.390486 -0.015144 255 14.1383 -0.12038 -0.0150786 255 14.1107 -0.0535957 -0.0146377 255 14.0908 -0.00921517 -0.0143227 255 14.0748 0.0350424 -0.0140708 255 14.0381 0.145278 -0.013504 255 13.9646 0.0788432 -0.0123375 255 14.277 -1.22845 0.0763475 96 14.2549 -1.18149 0.0765847 255 14.2244 -1.11156 0.0769131 255 14.1775 1.14603 0.0773039 255 14.1839 -1.06366 0.0773148 255 14.1832 -1.01882 0.0773511 255 14.1838 -0.951707 0.0773871 255 14.1559 1.18902 0.0774683 202 14.1429 1.0761 0.0776696 255 14.1548 -0.905159 0.0776792 255 14.1516 -0.860333 0.0777338 255 14.1362 1.03092 0.0777611 255 14.1539 -0.748956 0.0777695 255 14.1374 0.986358 0.0777795 255 14.1404 0.941939 0.0777796 255 14.1483 -0.815536 0.0777883 255 14.1427 0.875166 0.0777981 255 14.1454 0.830731 0.0777982 255 14.1524 -0.659742 0.0778238 255 14.1502 -0.7042 0.0778241 255 14.1439 0.786059 0.0778349 255 14.1475 0.719398 0.0778352 255 14.1548 -0.503956 0.0778594 255 14.1531 -0.548422 0.0778596 255 14.1457 0.674751 0.0778719 255 14.1477 0.630308 0.077872 255 14.1493 -0.592803 0.0778781 255 14.1502 0.519096 0.0778908 255 14.1543 -0.392666 0.0778952 255 14.153 -0.437131 0.0778954 255 14.1465 0.563465 0.0779089 255 14.1478 0.474498 0.0779275 255 14.1515 -0.348106 0.0779315 255 14.1485 -0.303567 0.0779679 255 14.1478 -0.236861 0.0779857 255 14.1475 -0.0812786 0.0780031 255 14.1464 -0.19239 0.0780037 255 14.145 -0.147929 0.0780218 255 14.1417 -0.0368278 0.0780577 255 14.1212 0.118463 0.0782397 255 14.1177 0.00754293 0.0782769 255 14.0416 0.0735324 0.0789709 255 14.2318 -1.22236 0.16742 106 14.2051 -1.10768 0.167519 255 14.1916 -1.15148 0.167547 255 14.1877 1.14933 0.167547 255 14.1945 -1.06198 0.167557 255 14.1781 1.1934 0.167564 200 14.1914 -0.99451 0.167579 255 14.1805 -0.948964 0.167617 255 14.1734 -0.903744 0.167644 255 14.1514 1.10172 0.167658 255 14.1642 -0.858467 0.167677 255 14.1464 1.03431 0.167686 255 14.1521 -0.790793 0.167721 255 14.1356 0.98891 0.167724 255 14.1525 -0.746222 0.167726 255 14.1307 0.94398 0.167746 255 14.1296 0.899332 0.167758 255 14.1337 0.832741 0.167758 255 14.1408 -0.701034 0.167765 255 14.1322 0.788122 0.167769 255 14.1457 -0.545423 0.167769 255 14.1439 -0.589864 0.167769 255 14.1306 0.743507 0.16778 255 14.134 0.676914 0.16778 255 14.138 -0.634107 0.167781 255 14.1421 -0.478547 0.167785 255 14.1428 -0.389627 0.16779 255 14.132 0.632338 0.167792 255 14.132 0.587861 0.167797 255 14.1375 -0.433923 0.167802 255 14.1326 0.521186 0.167803 255 14.1356 0.432377 0.167803 255 14.138 -0.345026 0.167807 255 14.1375 -0.278359 0.167812 255 14.1349 -0.18947 0.167823 255 14.1262 0.476526 0.167825 255 14.1323 -0.233836 0.167828 255 14.126 -0.0783687 0.16785 186 14.0982 -0.0338737 0.167927 255 14.086 0.07681 0.167959 182 14.0862 0.0104344 0.16796 255 13.9944 0.0591862 0.251313 255 14.0425 0.0153654 0.251467 255 14.0821 0.10396 0.251595 163 14.1264 -0.0509527 0.251737 255 14.1262 -0.095336 0.251737 255 14.127 -0.206304 0.251744 255 14.1318 -0.13976 0.251756 255 14.1275 0.504063 0.251767 255 14.1343 -0.250816 0.25177 255 14.127 0.570713 0.251773 255 14.1251 0.659555 0.251779 255 14.1271 0.615179 0.251779 255 14.137 0.459949 0.251792 255 14.1386 -0.406419 0.251796 255 14.1373 -0.450845 0.251797 255 14.1378 -0.49532 0.251803 255 14.1353 -0.561934 0.251804 255 14.1275 0.77093 0.251804 255 14.1298 0.726546 0.251804 255 14.123 0.88199 0.25181 255 14.127 0.815425 0.251811 255 14.1221 0.926487 0.251817 255 14.1375 -0.6065 0.251817 255 14.1355 -0.650916 0.251817 255 14.1343 -0.717614 0.251824 255 14.1251 0.971268 0.251836 255 14.1359 -0.762227 0.251837 255 14.1375 -0.806857 0.25185 255 14.136 1.01667 0.251881 255 14.1319 1.17272 0.251906 190 14.1535 -0.874662 0.251915 255 14.145 1.08437 0.251925 255 14.1666 -0.920128 0.251966 255 14.1717 -0.965155 0.251992 255 14.1634 1.13059 0.251996 255 14.1765 -1.01024 0.252018 255 14.2035 -1.07939 0.252122 255 14.2104 -1.16974 0.252167 244 14.216 -1.12524 0.252173 255 14.2218 1.24786 0.252214 82 14.0831 -0.0815494 0.334656 255 14.0892 0.0733226 0.33471 255 14.1027 0.272772 0.334855 255 14.1038 0.206315 0.334856 255 14.1053 0.00691053 0.334857 255 14.1047 0.361472 0.334892 255 14.1104 0.162066 0.334911 255 14.1109 0.117725 0.334911 255 14.1113 -0.0374272 0.334912 255 14.1118 0.317279 0.334947 255 14.1229 0.428508 0.335074 255 14.1254 0.472998 0.335111 255 14.132 -0.192929 0.335113 255 14.1233 0.584002 0.335128 255 14.1346 -0.148552 0.335132 255 14.1374 -0.237441 0.335169 255 14.1421 -0.304195 0.335224 255 14.1399 -0.393041 0.335224 255 14.1379 0.517863 0.335238 255 14.1114 1.13976 0.335328 255 14.1391 0.718165 0.335329 255 14.1413 0.673731 0.335329 255 14.153 -0.348938 0.335334 255 14.1526 -0.43793 0.335352 255 14.1507 -0.549148 0.335371 255 14.1493 0.62956 0.335384 255 14.1436 0.785211 0.335402 255 14.1563 -0.504839 0.335408 255 14.143 0.829751 0.33542 255 14.1404 -0.90511 0.335447 255 14.1463 0.874535 0.335475 255 14.1629 -0.594213 0.335499 255 14.148 0.941579 0.335529 255 14.1475 -0.950217 0.335538 255 14.1659 -0.661238 0.335555 255 14.1638 -0.705739 0.335555 255 14.1468 -1.01717 0.335575 255 14.1416 1.18687 0.335638 95 14.1755 -0.750999 0.335683 255 14.179 -0.795876 0.335738 255 14.1771 -0.862809 0.335757 255 14.1678 1.0323 0.335767 255 14.171 0.987786 0.335767 255 14.1655 -1.06329 0.335777 255 14.1705 1.07725 0.335821 255 14.176 -1.10891 0.335905 255 14.2205 -1.17992 0.336362 229 14.0873 -0.103732 0.428093 255 14.1075 -0.0595221 0.428409 255 14.1174 0.250943 0.428597 255 14.1185 0.184417 0.428598 255 14.1213 0.0957272 0.42863 255 14.1236 0.0513632 0.428662 255 14.1198 0.406342 0.428692 255 14.1216 0.339803 0.428692 255 14.119 0.495126 0.428723 255 14.1205 0.45077 0.428723 255 14.1246 0.295479 0.428724 255 14.127 0.140158 0.428724 255 14.1277 -0.0151862 0.428725 255 14.1266 -0.170525 0.428726 255 14.126 -0.214904 0.428726 255 14.1253 -0.259281 0.428726 255 14.1185 0.561734 0.428754 255 14.1284 -0.303735 0.42879 255 14.1268 -0.37031 0.42879 255 14.1256 -0.414689 0.42879 255 14.1107 0.805824 0.428817 255 14.1166 0.694981 0.428817 255 14.1187 0.650632 0.428817 255 14.1262 -0.459125 0.428822 255 14.1227 0.606352 0.428849 255 14.1279 -0.525829 0.428886 255 14.1262 -0.570211 0.428886 255 14.1211 0.761938 0.428943 255 14.1181 0.850773 0.428974 255 14.1323 -0.61492 0.429013 255 14.1292 -0.68151 0.429013 255 14.1239 0.917963 0.429132 255 14.1249 0.962607 0.429195 255 14.145 -0.726786 0.429298 255 14.1437 1.00859 0.429543 255 14.1666 -0.772483 0.429677 255 14.1661 -0.817096 0.429709 255 14.1608 1.07693 0.42989 255 14.1741 -0.884569 0.429899 255 14.1792 -0.929602 0.430026 255 14.1782 -0.974277 0.430058 255 14.1832 1.12351 0.430301 255 14.1954 -1.04265 0.430406 255 14.2015 1.16991 0.430648 255 14.208 -1.08843 0.430659 255 14.2305 -1.13508 0.43107 255 14.2408 -1.18092 0.431292 172 14.2616 1.2201 0.431659 187 14.1064 -0.0303787 0.500108 153 14.1114 0.169103 0.500233 247 14.1124 0.0139329 0.500233 186 14.1116 0.279964 0.500274 242 14.1143 0.0582728 0.500275 210 14.1168 0.213515 0.500358 240 14.1181 -0.0969576 0.500359 176 14.1199 0.124826 0.5004 241 14.1212 -0.185722 0.500443 232 14.1163 0.47975 0.500482 229 14.1225 -0.23012 0.500485 238 14.1204 0.413278 0.500524 227 14.1216 0.368915 0.500524 236 14.1247 0.324591 0.500566 237 14.1277 -0.141429 0.500569 214 14.1253 -0.29676 0.500569 234 14.1227 0.524377 0.500649 233 14.1283 -0.341238 0.500653 235 14.123 0.568819 0.500691 228 14.12 0.679822 0.500732 229 14.1221 0.635448 0.500732 231 14.1311 -0.385738 0.500737 233 14.126 -0.541093 0.500738 224 14.1332 -0.452461 0.500821 231 14.1317 -0.49686 0.500821 229 14.1238 0.724471 0.500858 224 14.1343 -0.585901 0.500947 228 14.1275 0.769152 0.500983 228 14.1353 -0.652692 0.501032 227 14.1372 -0.697301 0.501115 228 14.1317 0.836171 0.50115 225 14.133 0.880809 0.501233 228 14.1341 0.925462 0.501317 230 14.1449 -0.742253 0.501325 221 14.1453 -0.809137 0.501409 223 14.1396 0.992736 0.501526 230 14.1479 -0.89852 0.501577 220 14.1424 1.03758 0.501651 230 14.1546 -0.854317 0.50166 221 14.1535 -0.965879 0.501786 220 14.1544 -1.01063 0.50187 222 14.153 1.08305 0.501944 228 14.1631 -1.05601 0.502121 222 14.1836 -1.1024 0.502623 226 14.2061 -1.17158 0.503209 195 14.2374 1.15685 0.503825 216 14.2357 1.20173 0.503867 134 14.2482 -1.22021 0.504171 111 14.0467 0.0303985 0.569132 141 14.0561 0.140838 0.569391 131 14.0595 0.185056 0.569495 105 14.0626 -0.0578963 0.569548 150 14.0615 0.383968 0.569649 94 14.0651 -0.21257 0.569652 119 14.0665 0.251466 0.569702 142 14.065 -0.323072 0.569705 125 14.064 -0.367258 0.569705 127 14.0684 -0.256822 0.569756 122 14.0736 0.295839 0.569909 101 14.0735 0.450701 0.570012 102 14.0766 0.340155 0.570013 131 14.0804 0.0968885 0.570014 102 14.0726 -0.478089 0.570017 128 14.076 0.49506 0.570116 111 14.0837 -0.168564 0.570119 97 14.0753 -0.56673 0.570173 153 14.0804 0.53952 0.570271 113 14.0847 -0.412042 0.570276 101 14.0927 -0.0136908 0.570325 109 14.0924 -0.102237 0.570326 98 14.095 -0.523142 0.570639 107 14.1017 0.606942 0.570893 170 14.1075 -0.612358 0.571055 123 14.1104 -0.679108 0.571211 187 14.1177 0.652104 0.57136 255 14.1182 -0.723927 0.57147 233 14.1278 -0.768908 0.571782 255 14.1355 0.697475 0.571878 255 14.1341 0.764191 0.57193 255 14.133 0.853231 0.572033 255 14.1376 0.808945 0.572085 255 14.1298 0.964484 0.572137 255 14.1342 0.897888 0.572137 255 14.1287 1.00902 0.572188 255 14.1267 1.16515 0.572447 57 14.1303 1.12076 0.572447 255 14.1375 1.05431 0.572499 255 14.158 -0.83742 0.572664 255 14.1553 -0.881894 0.572664 255 14.1644 -0.927121 0.572976 255 14.1647 -1.03891 0.573184 255 14.1738 -0.994813 0.573339 255 14.1872 -1.08534 0.573859 255 14.2276 -1.13332 0.575 255 14.2361 -1.2015 0.575363 216 14.0851 0.362516 0.657368 128 14.0937 -0.0358368 0.657499 136 14.0952 0.119149 0.657562 137 14.0957 0.00843517 0.657563 96 14.0995 0.0748761 0.657691 89 14.0995 -0.0801558 0.657692 86 14.0998 -0.235222 0.657757 83 14.1031 0.274297 0.657883 148 14.099 -0.434648 0.657886 99 14.1023 -0.390415 0.65795 105 14.0988 -0.501161 0.657951 92 14.1084 -0.19105 0.658014 118 14.0996 0.584589 0.658074 115 14.1058 0.473897 0.658139 122 14.1122 0.207942 0.65814 96 14.1128 0.163602 0.65814 102 14.1095 -0.346263 0.658143 110 14.1121 0.318807 0.658204 99 14.1052 -0.545779 0.658208 63 14.1112 0.429697 0.658268 92 14.117 -0.279903 0.658335 113 14.1035 0.717935 0.658395 111 14.123 -0.146887 0.658463 89 14.1084 -0.656924 0.658466 61 14.1162 0.518625 0.658525 87 14.1059 0.784713 0.658588 110 14.1116 0.673895 0.658588 118 14.1234 -0.590959 0.658851 62 14.1127 0.874042 0.658974 102 14.1154 0.829704 0.658974 110 14.1277 0.630159 0.659039 87 14.124 -0.746656 0.659109 59 14.1062 -1.0572 0.659176 45 14.124 -0.947068 0.659496 94 14.1264 0.941696 0.659552 75 14.1402 -0.70299 0.659559 61 14.1316 1.14289 0.660194 253 14.1461 1.03229 0.660387 252 14.1473 -1.01567 0.660397 58 14.145 1.09924 0.660515 255 14.1446 -1.10486 0.660526 253 14.1695 -0.793793 0.660652 45 14.1696 -0.860802 0.660781 45 14.1668 -0.90531 0.660781 45 14.1817 1.19169 0.661929 45 14.2388 -1.17994 0.66374 249 14.1171 0.257619 0.75021 86 14.1232 0.346533 0.750519 82 14.1258 0.213406 0.750519 91 14.1254 0.413203 0.750673 79 14.1313 -0.0528943 0.750675 90 14.1265 0.502091 0.750828 43 14.1353 0.0581242 0.750829 90 14.1295 -0.408101 0.750832 69 14.1342 0.302383 0.750906 86 14.1365 -0.163931 0.750908 88 14.128 0.568826 0.750982 69 14.132 0.457848 0.750982 76 14.1411 -0.0973368 0.751062 61 14.1399 -0.20839 0.751063 80 14.1342 -0.452673 0.751064 40 14.1431 0.102601 0.751139 86 14.1412 -0.252854 0.75114 78 14.1403 -0.297276 0.751141 83 14.1342 -0.56382 0.751219 40 14.1447 -0.364046 0.751373 83 14.1381 0.613754 0.751446 73 14.1325 0.76928 0.751523 40 14.1566 0.147208 0.75168 60 14.136 0.814028 0.751755 40 14.1439 0.70309 0.751832 41 14.1614 -0.00845795 0.751835 63 14.1519 -0.519967 0.751838 40 14.1481 0.658744 0.75191 41 14.1523 -0.609047 0.751993 40 14.1493 -0.675728 0.751993 40 14.1433 0.859055 0.752141 40 14.1365 -1.07636 0.75246 40 14.1501 0.971099 0.752682 46 14.1591 0.927046 0.752914 65 14.1585 1.12825 0.753455 227 14.1628 1.17339 0.753764 40 14.1927 -0.767112 0.75385 40 14.1834 -0.923127 0.753851 99 14.199 -0.72272 0.754004 40 14.1902 -0.878803 0.754005 40 14.1779 1.08501 0.754074 255 14.2061 -0.812591 0.754469 40 14.2056 -1.03662 0.755012 40 14.1988 -1.12586 0.755012 227 14.3247 -1.1809 0.760039 137 14.0901 0.353858 0.814599 128 14.0972 0.198955 0.814773 186 14.1065 0.0439524 0.81512 186 14.1065 -0.000368733 0.81512 133 14.108 0.265584 0.815292 139 14.1097 -0.155524 0.815294 134 14.1121 -0.111219 0.815381 183 14.0881 0.863746 0.815463 141 14.1111 0.309982 0.815465 142 14.0764 -1.06375 0.815559 83 14.0987 0.819934 0.81581 137 14.1117 0.554052 0.815811 173 14.1217 0.154888 0.815812 133 14.1153 0.50978 0.815898 128 14.1189 0.39891 0.815898 186 14.1052 0.775852 0.815983 165 14.1271 -0.200136 0.816074 141 14.1228 -0.466452 0.816162 159 14.1304 -0.244604 0.816247 135 14.1052 0.90926 0.816329 135 14.1341 0.110591 0.816332 135 14.1218 -0.599711 0.816336 155 14.1229 0.621137 0.816417 132 14.1048 0.975984 0.816502 114 14.1384 -0.04485 0.816506 139 14.1248 0.66568 0.81659 169 14.1328 0.465933 0.816591 131 14.136 -0.355787 0.816595 128 14.1166 -0.821812 0.816597 97 14.1368 -0.400256 0.816681 125 14.1223 -0.75539 0.816683 124 14.0992 1.13148 0.816762 255 14.1431 -0.311519 0.816854 179 14.1306 -0.711332 0.816943 147 14.1327 0.710539 0.817023 134 14.1492 -0.51188 0.817375 125 14.1496 -0.556411 0.817462 152 14.1371 -0.912213 0.817724 120 14.1607 -0.668306 0.818156 127 14.1482 1.06825 0.818668 255 14.1473 1.17999 0.819014 83 14.1594 -1.02544 0.819024 97 14.1527 -1.11438 0.819025 255 14.1718 -0.869813 0.81911 83 14.2886 -1.19312 0.825176 209 14.3247 1.23978 0.826898 84 14.1481 0.231541 0.91024 144 14.1401 0.787504 0.910837 108 14.1524 0.520855 0.910838 139 14.1603 0.320782 0.910938 102 14.1455 0.832418 0.911236 61 14.1698 0.0761109 0.911239 102 14.1717 -0.0797033 0.911339 97 14.1714 -0.124225 0.911339 100 14.172 -0.235552 0.91144 93 14.1634 -0.547129 0.911442 136 14.1712 0.365594 0.911537 97 14.175 0.165221 0.911538 89 14.1508 0.877359 0.911635 60 14.1618 0.677224 0.911636 133 14.1699 0.476954 0.911636 90 14.178 0.00935659 0.911638 102 14.1732 -0.436047 0.911741 126 14.1578 -0.792086 0.911743 70 14.1539 -0.858794 0.911743 64 14.1793 0.27668 0.911837 95 14.1717 0.588488 0.911935 94 14.1773 0.432625 0.911936 96 14.1785 -0.391622 0.91194 88 14.1894 0.120833 0.912237 100 14.1899 -0.0351926 0.912238 96 14.1926 -0.19126 0.912438 104 14.1932 -0.280467 0.912538 132 14.1836 -0.592499 0.91254 86 14.1937 -0.347393 0.912639 85 14.1824 0.74525 0.912833 89 14.1878 0.633847 0.912834 87 14.1876 -0.637313 0.91284 99 14.1845 -0.704163 0.91284 101 14.1744 0.945943 0.913032 71 14.197 -0.503706 0.913039 91 14.1811 -0.90511 0.913241 117 14.1751 -0.994193 0.913242 51 14.1722 -1.06113 0.913342 38 14.1781 1.03573 0.913531 99 14.2001 -0.749637 0.913739 98 14.1941 -0.950695 0.91404 66 14.1835 1.14821 0.91423 246 14.1927 -1.10747 0.91454 246 14.199 1.1046 0.914829 255 14.3087 -1.16153 0.920531 216 14.3171 1.20457 0.921118 38 +unknow 0.985918 1 0 267 13.03 25.1558 -2.1008 85 12.8086 25.2111 -2.09656 85 12.8814 25.1583 -2.09542 85 12.7186 25.2299 -2.09461 99 12.5738 25.2378 -2.08988 100 12.476 25.2396 -2.08646 103 12.0134 25.3991 -2.08174 129 11.8784 25.4229 -2.0788 120 10.9337 25.7913 -2.07488 162 11.2118 25.6586 -2.07391 152 11.1312 25.6937 -2.07391 153 11.0449 25.7157 -2.07276 154 10.8418 25.7998 -2.0726 158 10.7538 25.8172 -2.07113 146 10.62 25.8381 -2.06853 149 10.5365 25.8657 -2.06803 155 10.4462 25.8765 -2.06608 140 12.0066 25.1794 -2.0653 141 10.3583 25.8926 -2.06461 133 10.2325 25.9318 -2.0638 209 10.1097 25.858 -2.05452 114 9.53726 26.0703 -2.05418 164 9.4438 26.0682 -2.05141 159 9.23679 26.136 -2.05092 153 9.15332 26.1611 -2.05059 151 9.06652 26.1765 -2.04945 153 8.93922 26.2076 -2.04847 155 9.30749 26.0749 -2.04816 143 8.8524 26.2224 -2.04733 156 8.76682 26.2406 -2.04652 156 9.5826 25.941 -2.04556 116 8.63188 26.2475 -2.04359 159 12.125 24.7236 -2.036 99 12.0221 24.7096 -2.03128 104 11.8857 24.7246 -2.02754 119 9.56008 24.6772 -1.94839 126 9.43092 24.6885 -1.94546 187 9.33782 24.677 -1.94188 174 9.23513 24.6389 -1.93602 153 12.5472 25.0307 -1.8477 220 12.287 24.7059 -1.81777 189 12.1651 24.7528 -1.81688 255 12.0549 24.7246 -1.81145 233 11.958 24.7228 -1.80822 223 11.8138 24.7213 -1.80353 236 8.48285 25.9962 -1.7995 178 11.6166 24.7067 -1.79633 255 11.4933 24.7467 -1.79516 206 8.49888 25.6361 -1.77471 221 10.8681 24.7097 -1.77373 249 10.734 24.7205 -1.7705 249 10.6381 24.7119 -1.76712 245 10.5463 24.7122 -1.76448 241 8.53426 25.4751 -1.76429 174 10.4057 24.7047 -1.75993 255 10.3196 24.717 -1.75831 233 10.2174 24.6904 -1.75362 236 10.0911 24.7142 -1.75171 238 9.99616 24.7033 -1.74833 237 8.53408 25.212 -1.74596 162 9.82523 24.7267 -1.74525 255 9.89469 24.6754 -1.74364 255 9.58369 24.6823 -1.73571 252 9.48959 24.6695 -1.73233 206 8.58972 24.9886 -1.73173 146 9.36259 24.686 -1.73013 255 9.27304 24.6835 -1.72763 208 8.63996 24.8805 -1.72542 214 9.16964 24.6434 -1.7222 204 8.70285 24.81 -1.72205 226 8.96898 24.6959 -1.72073 255 8.81163 24.7462 -1.72029 197 8.88188 24.6977 -1.71868 255 12.8823 24.8416 -1.68904 255 12.7796 24.834 -1.68538 178 12.62 24.8103 -1.67901 184 12.5007 24.7679 -1.67277 211 12.3872 24.7356 -1.66735 196 12.2882 24.7315 -1.66409 91 12.1557 24.7569 -1.66165 154 12.0648 24.768 -1.65962 213 11.9869 24.8058 -1.65962 124 11.8132 24.7431 -1.65067 180 11.6127 24.7211 -1.64348 247 8.4976 25.661 -1.62432 222 10.8516 24.6944 -1.62043 233 10.7153 24.6995 -1.61704 230 10.6187 24.689 -1.61379 236 10.524 24.6819 -1.61081 232 10.3921 24.6944 -1.6081 239 8.49862 25.3957 -1.60725 255 10.2953 24.6809 -1.60471 232 10.2048 24.6817 -1.6024 238 10.0733 24.6926 -1.59969 237 9.7196 24.8232 -1.599 94 9.5563 24.8652 -1.59765 118 9.98376 24.6945 -1.59752 237 9.88612 24.6757 -1.59386 242 9.41646 24.8502 -1.59331 168 9.80048 24.6862 -1.59237 221 8.50379 25.1476 -1.59139 165 9.57103 24.6712 -1.58572 129 8.58084 24.9864 -1.58272 211 8.64103 24.9066 -1.57893 230 9.26141 24.6741 -1.5784 163 8.70475 24.8379 -1.57595 230 9.05022 24.6992 -1.57501 174 8.81169 24.7684 -1.57392 239 8.88073 24.7161 -1.57216 255 8.94204 24.6431 -1.56891 255 12.9246 24.8376 -1.53256 105 12.8108 24.8089 -1.52771 211 12.689 24.7638 -1.52175 224 12.3323 24.93 -1.52099 146 12.5333 24.7468 -1.5164 231 12.4196 24.7147 -1.51143 243 12.316 24.7019 -1.50782 253 12.0715 24.6957 -1.50073 136 11.9756 24.6957 -1.49812 122 11.7323 24.6863 -1.49103 151 11.6342 24.6797 -1.48804 250 11.5439 24.6891 -1.48618 223 8.51823 25.8787 -1.4855 110 8.51291 25.5924 -1.46847 131 10.8804 24.6704 -1.46802 235 10.7828 24.6588 -1.46491 250 10.6435 24.6562 -1.4613 247 10.5549 24.6638 -1.45956 252 9.64924 25.0085 -1.45817 214 8.53588 25.3953 -1.45728 128 10.4555 24.6454 -1.45608 251 10.3238 24.6576 -1.45359 249 10.2317 24.6549 -1.45123 249 10.1398 24.6519 -1.44886 253 10.0434 24.6374 -1.44575 255 9.91296 24.6493 -1.44339 248 8.5759 25.1225 -1.442 122 9.27991 24.8626 -1.44151 147 9.8177 24.6358 -1.4404 246 9.62174 24.7066 -1.44003 159 9.72409 24.6257 -1.43767 255 9.44345 24.7069 -1.43605 111 9.31492 24.7194 -1.43393 99 8.60845 24.9615 -1.43317 140 8.68155 24.9193 -1.43218 214 8.75883 24.7652 -1.42472 196 8.98912 24.6741 -1.42423 255 9.10459 24.6296 -1.42411 255 8.82918 24.7169 -1.42336 242 8.90613 24.6872 -1.42323 255 12.8191 24.8737 -1.36495 201 12.7019 24.8374 -1.36011 204 12.5931 24.8166 -1.35628 216 12.4421 24.8078 -1.35201 215 12.3339 24.786 -1.34819 221 12.2207 24.7529 -1.34369 224 12.082 24.7653 -1.34087 238 11.979 24.751 -1.33761 241 11.8831 24.7507 -1.33525 246 11.7501 24.7722 -1.33311 246 11.6527 24.7674 -1.33052 248 11.5537 24.7586 -1.32771 184 10.8893 24.7397 -1.31129 238 8.58131 25.5919 -1.3091 133 10.7948 24.7354 -1.30892 246 10.6616 24.7474 -1.30656 248 10.5673 24.7422 -1.3042 243 10.4725 24.7348 -1.30172 242 10.3404 24.747 -1.29947 247 10.2459 24.7388 -1.297 247 8.628 25.3337 -1.29618 188 10.156 24.7413 -1.2952 246 10.0602 24.7287 -1.2925 245 9.92947 24.7406 -1.29036 246 9.83624 24.7327 -1.28799 241 8.65895 25.1648 -1.28775 175 9.74462 24.7281 -1.28586 247 9.61066 24.7291 -1.28316 236 9.52076 24.7275 -1.28124 239 8.69548 25.0148 -1.28044 230 9.43025 24.7237 -1.27922 232 8.80398 24.9472 -1.27887 153 9.30453 24.7435 -1.27775 229 9.22049 24.7558 -1.27674 247 8.86358 24.8667 -1.27572 120 9.12889 24.7472 -1.27449 227 8.92412 24.7899 -1.2728 107 9.03265 24.7251 -1.27145 130 12.7619 24.8137 -1.20345 199 12.6466 24.7808 -1.1993 210 12.5398 24.7634 -1.19606 209 12.3961 24.7686 -1.19302 218 12.295 24.761 -1.19039 216 12.1924 24.7493 -1.18755 216 8.94105 26.0605 -1.18557 123 12.052 24.758 -1.18482 219 11.9498 24.7454 -1.18199 214 11.8478 24.7324 -1.17915 204 11.7089 24.7411 -1.17652 225 11.6098 24.7325 -1.17399 220 8.9153 25.7229 -1.16897 134 10.944 24.7135 -1.1591 189 8.96463 25.4771 -1.15805 130 10.8502 24.7112 -1.15707 220 10.7509 24.6957 -1.15434 221 10.6242 24.7223 -1.15302 211 8.99565 25.3115 -1.15066 145 10.5261 24.7078 -1.15039 211 10.4359 24.7113 -1.14877 212 10.3032 24.7215 -1.14664 213 9.04806 25.208 -1.14662 145 10.2071 24.7094 -1.14421 208 10.1188 24.7155 -1.14279 215 10.0306 24.7213 -1.14137 209 9.13112 25.0675 -1.14136 143 9.90208 24.7386 -1.13975 212 9.80734 24.7269 -1.13742 214 9.72008 24.7335 -1.13611 206 9.17249 24.9375 -1.13589 161 9.59908 24.7678 -1.1355 198 9.23893 24.8767 -1.13417 238 9.51117 24.7718 -1.13408 200 9.42405 24.7772 -1.13276 189 9.30086 24.8046 -1.13185 203 12.7845 24.9482 -1.05 144 12.6726 24.9223 -1.04667 142 12.5493 24.8727 -1.04218 151 12.408 24.8833 -1.03976 162 12.2988 24.8594 -1.03661 171 12.0014 24.9445 -1.03418 149 12.1934 24.8423 -1.03383 183 12.057 24.86 -1.03185 200 11.8731 24.8775 -1.02897 119 9.75597 25.5164 -1.0178 125 9.78441 25.3513 -1.01134 100 10.9661 24.8586 -1.01118 100 10.8624 24.8343 -1.00831 99 9.84201 25.1467 -1.00371 99 9.87704 25.0041 -0.998321 99 9.93341 24.9173 -0.995629 98 10.044 24.8535 -0.994823 255 10.2883 24.6733 -0.991507 155 10.0791 24.7164 -0.989707 218 10.156 24.6827 -0.989619 234 10.0765 25.9396 -0.863688 107 12.16 24.9328 -0.860337 180 12.0799 24.9673 -0.860182 255 11.9485 24.8953 -0.855479 139 10.0322 25.5879 -0.850435 105 10.0742 25.3435 -0.842268 105 10.9483 24.8845 -0.838971 104 10.0784 25.1245 -0.834486 104 10.134 25.0353 -0.832098 104 10.2138 24.8949 -0.828247 103 10.2897 24.8571 -0.828018 239 10.3425 25.8399 -0.689103 85 11.7522 25.038 -0.68352 132 10.3407 25.6015 -0.681945 129 10.3864 25.3693 -0.675562 135 11.0825 25.0271 -0.674222 186 10.987 25.0233 -0.672866 186 10.8861 25.0064 -0.671058 192 10.4082 25.1961 -0.670662 127 10.75 25.0152 -0.669572 196 10.462 25.1023 -0.668535 134 10.6573 25.0157 -0.66841 194 10.5639 25.014 -0.667183 199 +unknow 0.957866 1 0 1724 9.64266 -0.925781 -1.72745 108 9.19309 -0.902152 -1.72486 107 8.1497 -0.795123 -1.72397 144 8.14392 -0.833327 -1.72353 137 9.18046 -0.930014 -1.72287 116 8.13738 -0.858511 -1.72263 138 8.14244 -0.768631 -1.72174 148 8.12651 -0.921969 -1.72174 143 8.16295 -0.47391 -1.7213 114 7.40484 -0.925141 -1.72073 114 8.12301 -0.882845 -1.71996 139 8.14825 0.552239 -1.71908 125 8.1552 -0.357909 -1.71818 121 8.14882 -0.447457 -1.71773 149 7.40621 -0.795658 -1.71733 103 7.39422 -0.900279 -1.71733 111 8.12403 0.756086 -1.71729 143 8.1387 0.577258 -1.71729 152 8.14022 0.525978 -1.71685 124 7.39509 -0.876823 -1.71684 124 8.07193 1.16275 -1.7164 120 8.07907 1.11201 -1.7164 119 8.11774 0.781219 -1.7164 120 8.14624 -0.383186 -1.7164 143 8.55854 1.15156 -1.71618 116 7.41612 -0.632131 -1.71587 111 7.41409 -0.655427 -1.71587 107 7.412 -0.678716 -1.71587 111 8.08036 1.0734 -1.71551 143 8.12086 0.704327 -1.71551 143 8.14459 -0.331848 -1.71551 162 7.39335 -0.841327 -1.71538 139 8.13405 0.499899 -1.71506 152 8.13772 0.435998 -1.71506 141 7.39403 -0.817889 -1.7149 141 8.13437 0.461445 -1.71462 119 8.14217 -0.293335 -1.71461 123 8.13655 -0.421192 -1.71461 143 7.40292 -0.713099 -1.71441 107 8.1419 -0.242118 -1.71417 118 7.39871 -0.736168 -1.71392 108 8.1089 0.728933 -1.71328 143 8.11438 0.665223 -1.71328 120 8.13127 0.410013 -1.71328 143 9.50988 1.40003 -1.71303 120 7.38004 0.871903 -1.71296 115 7.42373 0.336825 -1.71296 123 7.42248 -0.363313 -1.71295 119 7.4127 -0.526443 -1.71295 107 7.40924 -0.573009 -1.71295 141 7.3925 -0.759025 -1.71295 114 8.13525 -0.267523 -1.71283 149 8.11451 0.613919 -1.71239 155 8.13482 -0.216356 -1.71239 147 9.5208 1.29485 -1.71227 114 7.41876 0.359946 -1.71199 111 7.42546 0.173395 -1.71198 119 7.41618 -0.409743 -1.71198 115 7.40259 -0.607614 -1.71198 111 8.05624 1.13461 -1.71194 150 7.42033 0.278273 -1.7115 127 7.42541 0.0450523 -1.7115 123 7.42546 -0.0365965 -1.7115 122 7.42494 -0.094915 -1.7115 122 8.12532 0.371309 -1.7115 137 7.41079 -0.467861 -1.71149 107 8.13185 -0.177946 -1.71149 143 9.50451 1.36873 -1.71113 114 7.70306 -0.828566 -1.71113 107 7.39504 0.650578 -1.71101 115 7.39898 0.6041 -1.71101 111 7.41183 0.41797 -1.71101 115 7.40735 -0.49102 -1.71101 119 9.51704 1.26388 -1.71075 97 9.08559 1.21659 -1.71057 120 7.40485 0.499303 -1.71053 118 7.40712 0.464405 -1.71053 127 9.99917 1.34808 -1.71023 107 7.13557 -0.51697 -1.71018 98 7.3725 0.835766 -1.71004 118 7.37509 0.812594 -1.71004 115 7.39963 0.545674 -1.71004 119 7.41821 0.149882 -1.71004 107 7.41972 0.0100318 -1.71004 111 7.39939 -0.548908 -1.71003 99 9.50502 1.32309 -1.70999 112 7.68769 -0.912508 -1.70973 93 7.68479 -0.936656 -1.70973 94 7.37568 0.789209 -1.70956 123 7.39938 0.522276 -1.70956 124 7.41418 0.231371 -1.70955 122 7.41245 -0.28121 -1.70955 130 7.41153 -0.304496 -1.70955 119 10.0015 1.30045 -1.70951 107 7.70956 -0.682514 -1.70926 103 7.69789 -0.803528 -1.70926 101 7.68859 -0.888122 -1.70926 93 9.98904 1.3787 -1.70915 114 7.35902 0.916282 -1.70907 111 7.37972 0.731061 -1.70907 115 7.38417 0.684678 -1.70907 118 7.38932 0.626658 -1.70907 111 7.40597 0.382612 -1.70907 111 7.41496 0.114849 -1.70907 108 7.41375 -0.176354 -1.70907 127 7.41136 -0.257861 -1.70906 126 7.4058 -0.385877 -1.70906 116 7.40254 -0.44403 -1.70906 119 8.5309 1.10704 -1.70901 97 7.69966 -0.767044 -1.70879 100 7.34967 0.973794 -1.70858 115 7.40954 0.254521 -1.70858 119 7.41131 0.196315 -1.70858 126 7.41356 -0.0715167 -1.70858 118 8.11281 0.345157 -1.70838 128 8.11916 -0.126679 -1.70837 134 7.70779 -0.657947 -1.70833 106 7.70239 -0.718464 -1.70833 100 7.68882 -0.851439 -1.70833 96 9.06002 1.31476 -1.70818 100 9.07771 1.18655 -1.70818 106 7.10812 -0.740022 -1.70817 92 7.34149 1.01968 -1.7081 110 7.34466 0.99661 -1.7081 115 7.37234 0.765413 -1.7081 108 7.37812 0.707487 -1.7081 115 7.40585 0.300983 -1.7081 124 7.41039 -0.152995 -1.70809 123 7.40862 -0.222829 -1.70809 118 8.11678 -0.152155 -1.70793 142 7.69816 -0.742465 -1.70786 105 7.1139 -0.661634 -1.70767 95 7.10016 -0.795604 -1.70766 92 7.0882 -0.895899 -1.70766 87 7.35609 0.892438 -1.70761 106 7.38821 0.56814 -1.70761 118 8.11577 -0.0883866 -1.70748 131 7.7079 -0.609184 -1.70739 104 7.11881 -0.583208 -1.70716 127 7.11599 -0.616748 -1.70716 95 7.10877 -0.694955 -1.70716 114 7.10655 -0.717285 -1.70716 127 7.34693 0.94993 -1.70712 111 7.40777 0.0681581 -1.70712 119 7.40033 -0.339009 -1.70712 126 7.7105 -0.548483 -1.70693 95 7.11868 -0.560681 -1.70666 88 7.31522 1.15695 -1.70664 111 7.32408 1.09945 -1.70664 115 7.3275 1.07644 -1.70664 114 7.39305 0.440157 -1.70664 119 7.40613 -0.0133016 -1.70663 112 7.70207 -0.633065 -1.70646 101 9.06036 1.24225 -1.7062 122 7.11848 -0.538161 -1.70616 98 7.0796 -0.917396 -1.70615 121 7.32893 1.05313 -1.70615 116 7.40327 -0.117976 -1.70615 123 8.10412 0.319253 -1.70615 125 7.31499 1.13335 -1.70567 119 7.39958 -0.199326 -1.70566 127 7.07633 0.927454 -1.70566 98 7.13461 0.178949 -1.70566 98 7.09614 -0.761283 -1.70565 131 7.08734 -0.839262 -1.70565 91 7.0833 -0.872651 -1.70565 118 7.67509 0.869234 -1.70553 111 7.70637 -0.523842 -1.70553 94 7.70293 -0.572252 -1.70553 85 8.08145 0.636858 -1.70526 96 7.39976 0.0913072 -1.70518 118 7.1201 -0.459594 -1.70515 95 7.69465 0.651746 -1.70507 94 9.04858 1.28413 -1.70501 118 8.08861 -0.508081 -1.7048 143 7.06955 0.949178 -1.70465 96 7.07537 0.904742 -1.70465 88 7.12096 0.413946 -1.70465 109 7.70116 0.542772 -1.7046 99 7.70487 -0.487262 -1.70459 97 6.88676 -0.667473 -1.70451 82 9.03645 1.34039 -1.70421 131 7.12029 0.391474 -1.70415 106 7.12149 0.369104 -1.70415 110 7.12315 0.335543 -1.70415 102 7.10245 -0.63802 -1.70414 126 7.08417 -0.816306 -1.70414 128 7.64833 1.03703 -1.70413 92 7.67837 0.784218 -1.70413 109 7.70584 -0.438723 -1.70413 93 8.09579 0.28069 -1.70392 119 9.0281 1.38267 -1.70382 126 7.64962 1.01275 -1.70367 90 7.67886 0.759908 -1.70367 99 7.68676 0.675425 -1.70367 101 7.69975 0.506233 -1.70367 92 7.7013 0.48204 -1.70367 110 7.71004 0.312575 -1.70366 97 7.71369 0.203548 -1.70366 102 7.70248 -0.462807 -1.70366 92 7.07841 0.848694 -1.70365 94 7.09202 0.726269 -1.70365 77 7.12318 0.290707 -1.70365 98 7.1274 0.156394 -1.70364 100 7.12903 0.0332195 -1.70364 107 7.11893 -0.380946 -1.70364 106 7.11572 -0.436846 -1.70364 103 7.11283 -0.481547 -1.70364 131 8.09468 0.255187 -1.70347 116 7.65238 0.976451 -1.7032 89 7.65837 0.928349 -1.7032 89 7.66811 0.844083 -1.7032 94 7.68266 0.699401 -1.7032 99 7.69178 0.590722 -1.7032 94 7.71107 0.227729 -1.7032 100 7.70516 -0.377984 -1.70319 95 7.11383 0.435986 -1.70314 98 7.12718 -0.000366759 -1.70314 94 7.12611 -0.12351 -1.70314 97 7.67007 0.807744 -1.70273 88 7.70096 0.42134 -1.70273 99 7.70225 0.397144 -1.70273 100 7.70346 0.372945 -1.70273 99 7.71191 0.0944451 -1.70273 101 7.71212 -0.0751601 -1.70273 99 7.70437 -0.35368 -1.70273 93 7.07976 0.803782 -1.70264 99 7.08347 0.770409 -1.70264 94 7.1206 0.257009 -1.70264 101 7.12208 0.212263 -1.70264 99 7.12298 -0.179423 -1.70264 104 7.65879 0.891815 -1.70227 101 7.69695 0.457517 -1.70226 100 7.70319 0.33656 -1.70226 103 7.70515 0.288153 -1.70226 99 7.70497 -0.293079 -1.70226 108 7.69941 -0.414068 -1.70226 95 7.1178 -0.280019 -1.70213 107 7.1159 -0.324736 -1.70213 106 7.1119 -0.402959 -1.70213 96 7.62329 1.14364 -1.7018 108 7.6354 1.05975 -1.7018 91 7.67347 0.735058 -1.7018 95 7.70727 0.14284 -1.7018 104 7.70768 0.118626 -1.7018 104 7.70859 0.00965133 -1.70179 100 7.06803 0.870012 -1.70163 120 7.082 0.74776 -1.70163 126 7.08766 0.692112 -1.70163 99 7.1059 0.469141 -1.70163 96 7.11751 0.234522 -1.70163 99 7.12094 0.0779565 -1.70163 96 7.12115 0.0555861 -1.70163 99 7.12123 -0.0450946 -1.70163 106 7.11785 -0.224039 -1.70163 109 6.8857 -0.547506 -1.7014 108 7.62492 1.11941 -1.70133 91 7.63011 1.08347 -1.70133 94 7.64769 0.951472 -1.70133 109 7.68213 0.61429 -1.70133 102 7.70499 -0.159813 -1.70133 103 7.03357 1.10236 -1.70113 104 7.0948 0.591694 -1.70113 92 7.11256 0.312693 -1.70113 106 7.11302 -0.3022 -1.70112 107 6.87535 -0.644623 -1.70088 117 8.6777 1.14116 -1.70088 106 7.61581 1.16701 -1.70087 89 7.6839 0.565873 -1.70086 94 7.70019 0.263764 -1.70086 90 7.70262 0.179081 -1.70086 100 7.70463 0.0338648 -1.70086 105 7.70002 -0.268648 -1.70086 103 7.0695 0.825149 -1.70063 125 7.08801 0.647229 -1.70063 92 7.09098 0.613822 -1.70063 92 7.10053 0.491209 -1.70063 116 7.11678 -0.100951 -1.70062 105 7.11601 -0.14567 -1.70062 100 7.10849 -0.357952 -1.70062 104 7.69995 -0.208104 -1.70039 107 7.69573 -0.329026 -1.70039 100 7.03317 1.07968 -1.70012 94 7.09277 0.569107 -1.70012 98 7.09452 0.54682 -1.70012 105 7.09702 0.51338 -1.70012 106 7.11469 0.111441 -1.70012 99 7.11091 -0.257348 -1.70012 103 7.7005 0.0701498 -1.69993 99 7.7008 -0.0145254 -1.69993 103 7.70065 -0.0508147 -1.69993 103 7.11237 0.133761 -1.69962 97 7.11359 -0.0226671 -1.69962 136 7.11319 -0.0785367 -1.69962 108 7.11077 -0.201429 -1.69962 109 7.69668 -0.183807 -1.69946 100 7.695 -0.244251 -1.69946 100 8.66631 1.16735 -1.69923 124 7.0376 1.02387 -1.69912 94 8.07896 -0.0627212 -1.69901 126 7.69574 -0.135403 -1.69899 99 6.89346 -0.243917 -1.69881 98 6.88016 -0.492758 -1.69881 116 6.87432 -0.568375 -1.69881 109 6.86239 -0.697849 -1.69881 112 7.04198 0.979365 -1.69861 125 6.87058 -0.589816 -1.69829 110 7.0763 0.668617 -1.69811 94 7.6924 -0.0990722 -1.69806 99 6.83613 0.890712 -1.69778 90 6.87781 -0.47089 -1.69777 92 6.8739 -0.524894 -1.69777 115 6.8658 -0.622018 -1.69777 106 8.00639 1.03774 -1.69768 126 7.03503 1.00096 -1.69761 113 6.89137 -0.0922169 -1.69726 97 6.88185 -0.373513 -1.69726 96 6.8442 0.793524 -1.69675 115 6.88648 0.221626 -1.69674 95 6.88988 0.048496 -1.69674 95 6.87744 -0.416638 -1.69674 91 6.8754 -0.449041 -1.69674 124 6.83315 0.86848 -1.69623 124 6.85282 0.696486 -1.69623 88 8.06232 0.228709 -1.69589 111 6.8242 0.921852 -1.69571 117 6.84867 0.717802 -1.69571 118 6.85615 0.642452 -1.69571 120 6.85814 0.62091 -1.69571 90 6.87488 0.394383 -1.69571 91 6.88414 -0.167865 -1.6957 97 6.83201 0.846517 -1.69519 88 6.85998 0.577637 -1.69519 86 6.86965 0.448234 -1.69519 115 6.87874 0.275455 -1.69519 89 6.87873 -0.275907 -1.69519 97 6.87582 -0.340728 -1.69519 98 8.02089 0.809764 -1.695 149 6.83899 0.771118 -1.69467 117 6.86909 0.426524 -1.69467 122 6.88121 0.124084 -1.69467 124 6.88227 -0.0272587 -1.69467 125 6.86045 0.523435 -1.69415 108 6.86206 0.501874 -1.69415 120 6.86435 0.469534 -1.69415 94 6.87749 0.199675 -1.69415 112 6.87885 0.145656 -1.69415 94 6.87963 0.102431 -1.69415 93 6.88034 0.0267775 -1.69415 122 6.87884 -0.146137 -1.69415 100 8.0244 -0.732447 -1.6941 140 6.84536 0.673969 -1.69364 116 6.85236 0.598661 -1.69364 121 6.85685 0.544824 -1.69364 113 6.87378 0.253609 -1.69364 132 6.87489 -0.221711 -1.69363 125 6.87203 -0.297286 -1.69363 96 6.86714 -0.394406 -1.69363 117 6.86758 0.350649 -1.69312 126 6.87012 0.2967 -1.69312 122 6.87617 -0.0704676 -1.69312 126 6.82634 0.813135 -1.6926 114 6.86672 0.328974 -1.6926 94 6.8746 0.00513691 -1.6926 93 6.87169 -0.200012 -1.6926 96 6.83178 0.748542 -1.69208 91 6.86259 0.371998 -1.69208 116 6.87219 0.080695 -1.69208 119 6.87154 -0.124412 -1.69208 97 6.86528 -0.318632 -1.69208 131 6.86843 0.177782 -1.69156 121 6.86863 -0.0488404 -1.69104 86 7.96604 -0.0371811 -1.67315 71 7.90796 -0.522257 -1.66379 122 7.92322 -0.0122294 -1.66335 76 7.90645 0.136794 -1.65978 74 7.89819 0.161448 -1.658 73 7.85353 0.817263 -1.65711 151 7.82399 0.988508 -1.65488 88 7.88389 0.0743947 -1.65443 76 7.81545 0.962455 -1.6522 99 7.84723 -0.654766 -1.6522 115 7.81797 0.925379 -1.65176 112 7.84211 -0.691573 -1.65175 113 7.84792 -0.543252 -1.65041 96 7.83952 -0.629361 -1.64997 117 7.79954 0.898289 -1.64685 112 7.80635 0.837003 -1.64685 97 7.82477 -0.566427 -1.64551 111 7.82007 -0.603151 -1.64506 104 7.7907 0.872441 -1.64418 125 7.79452 0.0242784 -1.63392 71 7.7882 0.19556 -1.63303 72 7.74567 0.0482979 -1.62278 72 7.7236 0.108757 -1.61787 74 8.00211 -0.752778 -1.58706 55 7.77282 -0.705822 -1.53685 80 7.73107 0.981025 -1.53433 82 7.67977 0.950195 -1.52251 92 7.59094 0.903218 -1.50226 91 7.61639 -0.654911 -1.50225 93 7.68801 -0.714712 -1.4831 59 7.651 0.97859 -1.48146 73 7.38477 -0.505803 -1.44993 84 7.34507 0.851427 -1.44825 89 7.35156 -0.607967 -1.44445 100 7.47935 0.932166 -1.44427 125 7.50695 -0.674719 -1.44426 115 7.33246 -0.525189 -1.43896 96 7.32226 -0.58228 -1.4377 79 7.30067 -0.557399 -1.43263 86 7.27424 0.762541 -1.43095 100 7.29487 -0.441782 -1.42968 255 7.27439 0.68181 -1.42926 255 7.29037 -0.418503 -1.42842 255 7.25248 0.817952 -1.42758 70 7.26871 0.658274 -1.42758 255 7.22974 0.792486 -1.42209 49 7.22796 0.734912 -1.4204 145 7.25064 -0.313299 -1.41871 40 7.32246 0.877028 -1.40997 145 7.61282 0.97499 -1.40832 93 7.18401 0.59408 -1.40817 238 7.34457 -0.521386 -1.40749 232 7.33353 -0.636521 -1.40707 148 7.62544 -0.719675 -1.40513 79 7.31666 -0.554158 -1.40212 168 7.29566 0.74605 -1.4013 182 7.1676 -0.286854 -1.40057 40 7.16566 -0.331881 -1.40057 230 7.28744 0.768333 -1.40006 203 7.30517 -0.495675 -1.39881 204 7.14643 -0.466082 -1.39804 255 7.11489 0.622375 -1.39382 255 7.12829 0.443375 -1.39382 39 7.13278 -0.363936 -1.39382 255 7.12341 0.488033 -1.3934 39 7.12491 0.465649 -1.3934 39 7.25193 0.787513 -1.39303 111 7.13447 -0.229289 -1.39297 45 7.27 -0.573759 -1.39261 70 7.12444 0.409465 -1.39256 39 7.09789 0.699644 -1.39171 247 7.13148 0.106983 -1.39171 39 7.13178 0.0845756 -1.39171 39 7.1321 0.0509687 -1.39171 39 7.24037 0.820767 -1.39138 129 7.11983 0.386786 -1.39129 39 7.11764 0.263447 -1.3896 45 7.24263 0.705957 -1.38931 182 7.1205 0.0285591 -1.38918 39 7.09958 0.520101 -1.38876 43 7.11782 -0.105624 -1.38876 45 7.10818 -0.38499 -1.38875 255 7.11452 -0.0496756 -1.38791 45 7.11171 -0.20611 -1.38791 45 7.11027 -0.250788 -1.38791 44 7.24476 -0.59476 -1.38765 71 7.11064 -0.172539 -1.38749 45 7.10961 0.129074 -1.38707 39 7.10877 -0.0272815 -1.38665 45 7.10846 -0.0719444 -1.38665 45 7.10114 0.285235 -1.38623 45 7.09926 0.229345 -1.38538 46 7.10181 -0.127649 -1.38538 45 7.10138 -0.149958 -1.38538 45 7.09172 0.363022 -1.38496 46 7.101 0.00623802 -1.38496 39 7.08654 0.307006 -1.38327 46 7.08883 0.184472 -1.38285 45 7.08163 0.329099 -1.38243 45 7.08376 0.150959 -1.38158 44 7.07063 0.206295 -1.37905 45 7.1641 -0.464 -1.36865 222 7.42271 0.915781 -1.3686 177 7.44919 -0.667025 -1.3686 137 7.11822 0.670807 -1.36245 255 7.11835 0.64825 -1.36204 255 7.1375 -0.383638 -1.36203 255 7.13626 -0.406058 -1.36203 255 7.12127 0.592157 -1.36163 255 7.13232 -0.439567 -1.36162 255 7.11645 0.625529 -1.36121 255 7.09827 -0.303451 -1.35294 71 7.08946 -0.325418 -1.35129 99 7.05874 0.5644 -1.34799 255 7.07572 -0.280304 -1.34799 79 7.32431 0.880647 -1.34795 133 7.05936 -0.246409 -1.34427 76 7.06166 -0.0245454 -1.34385 61 7.05294 -0.201857 -1.34261 76 7.32239 -0.632038 -1.34238 161 7.03369 0.506723 -1.34179 60 7.0362 0.44028 -1.34138 73 7.03553 0.38478 -1.34055 55 7.03858 -0.223628 -1.33972 87 7.02112 0.461437 -1.33849 66 7.03607 0.0528162 -1.33848 63 7.03626 -0.00244336 -1.33848 68 7.03475 -0.146119 -1.33848 67 7.03398 -0.179266 -1.33848 75 7.03415 -0.0466487 -1.33807 62 7.01573 0.483207 -1.33766 82 7.02734 -0.12391 -1.33683 70 7.02092 0.151932 -1.33559 63 7.0089 0.405317 -1.33518 70 7.01131 0.361266 -1.33518 28 7.01098 0.328125 -1.33477 28 7.01783 0.107744 -1.33476 61 7.014 -0.101686 -1.33394 59 7.01272 0.0305232 -1.33352 66 7.00508 0.283724 -1.33311 55 7.00767 0.129572 -1.3327 67 7.00853 -0.0685946 -1.3327 59 7.00318 0.228552 -1.33229 64 6.99852 0.2504 -1.33146 60 7.60379 -0.71146 -1.33093 145 6.99869 0.074386 -1.33063 69 6.99047 0.305081 -1.33022 29 6.99409 0.206226 -1.33022 64 6.99274 0.184195 -1.32981 67 7.23355 0.847018 -1.32889 214 7.25404 -0.602935 -1.32808 223 7.24508 -0.567783 -1.3257 230 7.21798 0.810804 -1.32491 230 6.95298 -0.352492 -1.32278 229 7.53108 0.958552 -1.32221 201 7.20684 0.786686 -1.32213 234 7.21947 -0.542863 -1.32014 235 7.19563 0.762645 -1.31935 236 7.21137 -0.51944 -1.31816 237 7.20005 -0.484481 -1.31538 239 7.16988 0.72587 -1.3134 238 7.15846 0.702049 -1.31062 239 7.13446 0.59812 -1.30386 239 7.46619 -0.663592 -1.30359 137 7.13895 -0.457619 -1.30267 241 7.12329 0.540934 -1.30069 239 7.123 0.518419 -1.30029 239 7.12275 -0.434052 -1.29909 241 7.10012 0.674036 -1.2983 241 7.11511 0.461743 -1.29791 239 7.11592 0.41692 -1.29751 239 7.11262 0.439159 -1.29711 239 7.12319 -0.120212 -1.29671 239 7.11234 -0.410951 -1.29671 242 7.1181 -0.176042 -1.29592 239 7.08853 0.650524 -1.29552 240 7.11765 -0.0977284 -1.29552 239 7.10722 0.360463 -1.29513 239 7.10637 -0.376986 -1.29512 243 7.10349 0.393851 -1.29473 239 7.10049 0.33779 -1.29354 239 7.07394 0.615646 -1.29195 240 7.07571 0.571039 -1.29155 240 7.09246 -0.298022 -1.29155 242 7.0899 -0.353715 -1.29155 242 7.08902 -0.331341 -1.29115 242 7.08357 -0.275317 -1.28956 241 7.06983 0.492427 -1.28917 240 7.08421 -0.197356 -1.28916 241 7.0832 -0.230735 -1.28916 240 7.08244 -0.252986 -1.28916 240 7.36459 0.913271 -1.28916 156 7.07943 -0.152688 -1.28797 241 7.06145 0.236094 -1.2848 240 7.06309 0.18063 -1.2848 240 7.0654 0.00307501 -1.2848 240 7.05647 0.313646 -1.2844 240 7.06297 0.0807424 -1.2844 240 7.06341 -0.0191147 -1.2844 240 7.06304 -0.0745868 -1.2844 240 7.05676 0.258147 -1.284 240 7.06123 0.0585451 -1.284 240 7.05395 0.280251 -1.28361 240 7.05628 0.213754 -1.28361 241 7.05578 0.15829 -1.28321 241 7.05751 0.0252713 -1.28321 241 7.05744 -0.0412479 -1.28321 240 7.05485 0.102848 -1.28281 241 7.33712 -0.629353 -1.27814 207 7.01312 0.135451 -1.27447 255 7.26805 0.877771 -1.26979 219 7.29012 -0.60243 -1.26865 226 7.24676 0.840482 -1.26486 232 7.26351 -0.565886 -1.26295 235 7.22791 0.815211 -1.26068 237 7.2535 -0.542228 -1.26067 238 7.56749 0.966179 -1.25761 99 7.21092 0.790292 -1.25688 240 7.58984 -0.731377 -1.25688 72 7.1866 -0.514775 -1.24738 241 7.1725 -0.491178 -1.24434 242 7.1431 0.7599 -1.24321 243 7.11927 0.72335 -1.23789 245 7.14142 -0.45537 -1.23788 245 7.12713 -0.432039 -1.23485 244 7.09806 0.698588 -1.23333 245 7.45896 -0.694663 -1.23228 79 7.10688 -0.408485 -1.23067 245 7.42208 0.92444 -1.23011 110 7.08263 0.674547 -1.22991 255 7.08182 0.640797 -1.22915 246 7.10203 -0.352295 -1.22915 245 7.10088 -0.374605 -1.22915 244 7.07989 0.618184 -1.22839 247 7.09525 -0.329645 -1.22763 245 7.07593 0.595424 -1.22725 247 7.07581 0.573027 -1.22687 246 7.09233 -0.307197 -1.22687 245 7.07647 0.539522 -1.22649 246 7.09173 -0.273703 -1.22649 245 7.08939 -0.229026 -1.22573 245 7.08471 -0.251173 -1.22497 245 7.06993 0.494327 -1.2246 245 7.06639 0.516384 -1.22422 245 7.06631 0.460599 -1.22346 246 7.07861 -0.195334 -1.22345 244 7.07526 -0.173013 -1.22269 245 7.06318 0.415822 -1.22232 244 7.07381 -0.15075 -1.22231 245 7.07247 -0.117388 -1.22193 243 7.05792 0.437751 -1.22156 245 7.06114 0.382308 -1.22156 245 7.06341 0.33793 -1.22156 245 7.06888 -0.0951298 -1.22117 243 7.06557 -0.017403 -1.22042 242 7.06522 -0.0728955 -1.22041 244 7.05447 0.359695 -1.22004 243 7.05659 0.315359 -1.22004 243 7.05885 0.25993 -1.22004 243 7.06358 0.0269771 -1.22004 243 7.05767 0.237677 -1.21966 241 7.06149 -0.0506851 -1.21966 243 7.05211 0.281847 -1.2189 242 7.05697 0.104536 -1.2189 243 7.05748 0.0601896 -1.2189 241 7.05282 0.204226 -1.21852 242 7.05396 0.159903 -1.21852 242 7.0553 0.0823365 -1.21852 242 7.05578 0.00475163 -1.21852 242 7.05146 0.182008 -1.21814 243 7.05071 0.126577 -1.21776 242 7.32597 -0.658597 -1.20731 135 7.30131 0.874919 -1.20696 170 7.25321 0.846233 -1.19755 193 7.6762 -0.730596 -1.19607 75 7.25258 -0.617288 -1.1932 201 7.61248 0.980913 -1.18991 108 7.20108 0.81742 -1.18742 217 7.21921 -0.591483 -1.18669 217 7.16841 0.791038 -1.18091 221 7.1877 -0.566054 -1.18054 221 7.15249 0.755256 -1.17729 224 7.16788 -0.541762 -1.17656 224 7.15466 -0.506809 -1.17367 226 7.13329 0.730656 -1.17331 228 7.14836 -0.483769 -1.17222 227 7.12381 0.707117 -1.17114 227 7.13807 -0.460507 -1.17005 227 7.11139 0.672117 -1.16825 227 7.10954 0.649427 -1.16752 228 7.12446 -0.425868 -1.16715 227 7.11791 -0.40301 -1.16571 227 7.11521 -0.380422 -1.16498 228 7.09587 0.625761 -1.16463 228 7.09286 0.591848 -1.16354 227 7.48807 -0.689607 -1.16283 115 7.08684 0.568963 -1.16209 228 7.10121 -0.346064 -1.16209 226 7.44942 0.935541 -1.16078 152 7.09342 -0.300986 -1.16028 227 7.08262 -0.322786 -1.15847 224 7.06701 0.545112 -1.15811 226 7.06869 0.522902 -1.15811 226 7.08254 -0.278193 -1.15811 227 7.07984 -0.244664 -1.15739 227 7.06322 0.489073 -1.15667 227 7.07665 -0.222282 -1.15666 227 7.06276 0.466758 -1.1563 228 7.07141 -0.199861 -1.15558 229 7.0583 0.444218 -1.15522 228 7.07031 -0.166481 -1.15522 228 7.06883 -0.144221 -1.15485 229 7.05764 0.388567 -1.1545 228 7.05442 0.41063 -1.15413 229 7.05687 0.366298 -1.15413 229 7.06188 -0.0885703 -1.15341 229 7.05209 0.34386 -1.15305 229 7.05745 -0.121766 -1.15268 228 7.0497 0.310465 -1.15232 229 7.0565 -0.0219699 -1.15232 228 7.04867 0.288243 -1.15196 230 7.05425 -0.0662812 -1.15196 229 7.05246 -0.0440996 -1.1516 229 7.04561 0.265963 -1.15124 229 7.04748 0.210619 -1.15124 229 7.04892 0.155262 -1.15124 229 7.05007 0.0888202 -1.15124 227 7.05062 0.011296 -1.15124 229 7.04614 0.188432 -1.15088 229 7.04741 0.133086 -1.15088 229 7.04858 0.0334442 -1.15088 229 7.04648 0.0555798 -1.15051 228 7.04089 0.232585 -1.15015 229 7.04386 0.110897 -1.15015 226 7.38222 -0.656853 -1.14398 201 7.33056 0.885113 -1.13919 211 7.31945 -0.628326 -1.13267 232 7.30857 -0.592761 -1.13027 247 7.27658 0.855208 -1.12925 233 7.26161 0.830266 -1.12617 245 7.22394 -0.563366 -1.11519 252 7.19496 0.78806 -1.11383 251 7.21585 -0.539969 -1.11348 252 7.20848 -0.505305 -1.11177 254 7.17782 0.763298 -1.1104 252 7.21095 -0.278285 -1.11005 234 7.1743 0.740117 -1.10937 253 7.20413 -0.300712 -1.10903 231 7.18891 0.502664 -1.10835 233 7.20233 -0.244003 -1.10834 232 7.20109 -0.221321 -1.108 233 7.1884 -0.481286 -1.108 254 7.20037 -0.176029 -1.10766 233 7.19978 -0.198649 -1.10766 234 7.19331 -0.322937 -1.10731 233 7.18406 0.456956 -1.10697 233 7.18865 0.377936 -1.10697 236 7.19036 0.344056 -1.10697 237 7.19659 -0.01766 -1.10663 236 7.19521 -0.142001 -1.10663 232 7.17866 0.479246 -1.10629 232 7.18746 0.321274 -1.10629 234 7.18934 0.276108 -1.10629 234 7.19194 0.197041 -1.10629 236 7.19327 0.140549 -1.10629 234 7.19437 -0.0628674 -1.10629 233 7.18004 -0.458109 -1.10628 254 7.17354 0.524191 -1.10595 230 7.1917 0.11791 -1.10594 239 7.19256 -0.040261 -1.10594 233 7.19202 -0.0967503 -1.10594 232 7.17956 0.400051 -1.1056 234 7.1845 0.298515 -1.1056 233 7.18662 0.242078 -1.1056 233 7.18735 0.2195 -1.1056 234 7.18885 0.163043 -1.1056 233 7.1763 0.422482 -1.10526 232 7.18847 0.0613754 -1.10526 233 7.1651 0.557511 -1.10492 239 7.18666 0.0387737 -1.10492 233 7.18577 -0.119268 -1.10492 230 7.14719 0.714528 -1.10423 255 7.18233 0.083868 -1.10423 234 7.1828 0.0161726 -1.10423 232 7.16048 -0.423069 -1.10251 255 7.13479 0.679288 -1.10149 255 7.14997 -0.399954 -1.10046 255 7.12905 0.656119 -1.10012 255 7.65479 0.984303 -1.09993 81 7.14447 -0.354659 -1.09909 255 7.13348 -0.376619 -1.09737 255 7.11341 0.632085 -1.09704 255 7.66324 -0.731462 -1.09674 77 7.09276 0.596489 -1.09292 255 7.09067 0.573871 -1.09224 255 7.5128 0.942556 -1.07638 137 7.4886 -0.69045 -1.06809 101 7.6652 -0.717086 -1.06437 93 7.60568 0.968218 -1.05942 89 7.35299 0.899619 -1.04996 157 7.36883 -0.655645 -1.04836 119 7.31677 -0.616081 -1.03945 183 7.28063 0.856238 -1.03754 191 7.28522 -0.590263 -1.03404 212 7.25778 0.830531 -1.03341 206 7.26145 -0.565287 -1.0299 227 7.44696 -0.673826 -1.02964 95 7.23679 0.805191 -1.02959 219 7.41465 0.919567 -1.02872 118 7.21694 0.768656 -1.02577 231 7.23647 -0.528946 -1.02544 229 7.22629 -0.505342 -1.02353 233 7.20163 0.744211 -1.0229 233 7.79527 -0.733242 -1.02142 66 7.21011 -0.481387 -1.02067 237 7.18821 0.720066 -1.02036 233 7.20905 -0.401734 -1.01971 190 7.20639 -0.447019 -1.01971 234 7.20831 -0.378967 -1.0194 243 7.17864 0.69638 -1.01845 235 7.2041 -0.344692 -1.01844 242 7.74588 0.982257 -1.01819 104 7.1839 0.617241 -1.01813 222 7.18279 0.583077 -1.01749 241 7.19726 -0.321678 -1.01717 242 7.19199 -0.423393 -1.01717 236 7.19164 0.356898 -1.01654 255 7.16808 0.661325 -1.01622 235 7.17474 0.559778 -1.0159 240 7.17646 0.537233 -1.0159 241 7.19167 -0.264822 -1.0159 241 7.18837 -0.298621 -1.01558 242 7.17498 0.503148 -1.01526 241 7.18852 -0.242078 -1.01526 241 7.16225 0.638128 -1.01494 234 7.35356 -0.630793 -1.01444 171 7.18398 -0.196722 -1.0143 241 7.18333 -0.219292 -1.0143 241 7.16667 0.479982 -1.01367 238 7.16954 0.434939 -1.01367 238 7.16814 0.457459 -1.01367 242 7.17151 0.40115 -1.01367 239 7.18088 -0.162764 -1.01367 240 7.17938 -0.140159 -1.01335 239 7.16682 0.378328 -1.01272 239 7.29927 0.869931 -1.0098 188 7.29445 -0.602854 -1.00483 222 7.25685 0.841601 -1.00267 222 7.1028 -0.116065 -1.00094 255 7.24376 0.816966 -1.00019 228 7.26676 -0.577693 -1.00018 227 7.25474 -0.553859 -0.998008 230 7.25136 -0.519265 -0.997078 232 7.22469 0.791761 -0.996774 229 7.23521 -0.495329 -0.994287 235 7.23278 -0.47235 -0.993667 236 7.20907 0.732722 -0.993363 235 7.04528 0.316893 -0.992662 255 7.20084 0.754726 -0.992432 234 7.04709 0.217213 -0.992344 255 7.22373 -0.392095 -0.991497 241 7.03638 0.294383 -0.991071 255 7.0353 0.272208 -0.990753 255 7.19365 0.708262 -0.990572 238 7.21957 -0.35778 -0.990567 241 7.21126 -0.436915 -0.989946 239 7.1951 0.628586 -0.989641 238 7.21576 -0.312171 -0.989636 242 7.02822 0.249851 -0.989479 255 7.21079 -0.334676 -0.989016 243 7.19194 0.571402 -0.988401 241 7.02207 0.194458 -0.988206 255 7.20811 -0.255179 -0.988086 243 7.20683 -0.289142 -0.988086 244 7.02252 0.0620546 -0.987887 255 7.02279 -0.00413286 -0.987886 255 7.19878 -0.413512 -0.987775 236 7.01984 0.117182 -0.987569 255 7.56907 -0.687218 -0.987281 123 7.01673 0.172267 -0.987251 255 7.01746 0.139202 -0.987251 255 7.0182 0.0951095 -0.98725 255 7.01882 0.0179334 -0.98725 255 7.17528 0.672248 -0.98716 238 7.18582 0.548176 -0.98716 243 7.0164 -0.0812597 -0.986931 255 7.17932 0.60442 -0.98685 242 7.18944 0.468994 -0.986849 243 7.20309 -0.153113 -0.986846 243 7.01478 0.0399745 -0.986613 255 7.01464 -0.0591938 -0.986613 255 7.18596 0.491435 -0.98654 243 7.19093 0.412393 -0.986539 243 7.2006 -0.175699 -0.986536 243 7.1997 -0.209631 -0.986536 243 7.199 -0.232251 -0.986536 244 7.01282 -0.0371398 -0.986295 255 7.17145 0.649148 -0.98623 238 7.17766 0.524837 -0.985609 243 7.19564 -0.130366 -0.985606 244 7.17905 0.445629 -0.984989 244 7.18233 0.389228 -0.984989 244 7.52844 0.919406 -0.984935 165 7.12236 0.36332 -0.975375 245 7.39766 0.880318 -0.964921 173 7.39783 -0.647647 -0.961382 116 7.00207 0.125442 -0.955217 255 7.00255 -0.0945629 -0.955216 255 7.00105 0.0484203 -0.954906 255 7.00121 0.00443288 -0.954906 255 6.99276 0.301182 -0.954597 255 6.98929 0.334031 -0.954287 255 6.99169 0.279127 -0.954287 255 6.99254 0.257161 -0.954287 255 6.99494 0.180258 -0.954287 255 6.99571 0.147294 -0.954286 255 6.99679 0.0813523 -0.954286 255 6.99721 0.0263971 -0.954286 255 6.99708 -0.0505442 -0.954285 255 6.99689 -0.0725249 -0.954285 255 6.99452 0.103299 -0.953976 255 6.99523 -0.0285557 -0.953975 255 6.98972 0.224061 -0.953667 255 6.99039 0.202102 -0.953667 255 7.29043 -0.60325 -0.9449 57 7.26539 0.818803 -0.944319 66 7.2844 -0.579688 -0.943723 54 7.27238 -0.555696 -0.941663 80 7.24556 0.782092 -0.940787 70 7.76018 0.982122 -0.940355 151 7.25437 -0.53133 -0.93872 83 7.20665 0.755146 -0.934607 93 7.23022 -0.415388 -0.934012 109 7.22819 -0.449455 -0.934012 92 7.20308 0.731924 -0.933724 84 7.22557 -0.392328 -0.933129 197 7.22082 -0.471753 -0.933129 52 7.20281 0.651991 -0.932546 123 7.21536 -0.494151 -0.93254 66 7.1966 0.697049 -0.932252 110 7.19594 0.617234 -0.931074 105 7.18693 0.673373 -0.930486 148 7.18996 0.593998 -0.929897 219 7.1939 0.310713 -0.927836 255 7.19088 0.287969 -0.927247 255 7.18262 -0.0509472 -0.925185 255 7.17634 0.253576 -0.924892 255 7.18003 0.106987 -0.924892 255 7.18077 -0.0283648 -0.924891 255 7.17879 0.0280332 -0.924597 255 7.17884 -0.00579458 -0.924597 255 7.15171 -0.365517 -0.921946 249 7.11486 0.565575 -0.918419 252 7.12569 -0.330427 -0.917825 254 7.6163 -0.670569 -0.915931 166 7.11286 -0.307391 -0.915765 255 7.11181 -0.284957 -0.915471 255 7.11254 -0.206678 -0.915177 255 7.1107 -0.262533 -0.915177 255 7.09292 0.541498 -0.914887 255 7.11197 -0.150762 -0.914883 255 7.10988 -0.228951 -0.914883 255 7.09145 0.507797 -0.914298 255 7.09301 0.485517 -0.914298 255 7.0945 0.463233 -0.914298 255 7.09463 0.429685 -0.914003 255 7.10647 -0.128284 -0.914001 255 7.09397 0.407283 -0.913709 255 7.09639 0.362704 -0.913709 255 7.10327 -0.184039 -0.913706 255 7.5249 0.915527 -0.906886 133 7.04465 0.326981 -0.905762 255 7.02409 0.381397 -0.903114 255 7.00992 -0.10416 -0.899579 255 6.99981 0.203955 -0.898404 255 6.99716 0.225887 -0.89811 255 6.99922 0.148941 -0.898109 255 6.99768 0.126917 -0.897815 255 6.99835 -0.0819548 -0.897814 255 6.99648 0.0719438 -0.89752 255 6.98876 0.0499373 -0.896343 255 6.9829 0.1706 -0.895755 255 7.3509 0.741721 -0.880275 245 7.3448 -0.589516 -0.877525 174 7.31674 -0.54113 -0.873136 210 7.31105 -0.563823 -0.872587 207 7.30734 -0.505866 -0.87149 218 7.26886 0.837154 -0.8704 193 7.27762 0.757177 -0.870399 219 7.26733 0.779163 -0.869302 190 7.26091 0.801547 -0.868754 217 7.28121 -0.481176 -0.86765 151 7.26103 -0.422678 -0.864358 244 7.21632 0.693316 -0.861072 131 7.21803 -0.374848 -0.858049 223 7.21682 -0.397522 -0.858049 217 7.21347 -0.454191 -0.858048 101 7.19095 0.645198 -0.856957 217 7.18996 0.610953 -0.856408 223 7.18 0.587348 -0.854762 227 7.19344 -0.351007 -0.854483 227 7.17786 0.564465 -0.854213 225 7.19106 -0.316945 -0.853934 227 7.87059 0.937045 -0.853512 79 7.17254 0.530023 -0.853116 138 7.1841 -0.294056 -0.852837 151 7.17431 -0.237273 -0.851192 197 7.17113 -0.271011 -0.850917 172 7.14214 0.482549 -0.848452 177 7.13268 0.504403 -0.847355 171 7.14765 0.201523 -0.847353 229 7.1307 0.167357 -0.844884 227 7.12813 -0.090284 -0.844334 249 7.11339 0.401971 -0.843788 251 7.11738 0.323729 -0.843788 250 7.12471 0.0216657 -0.843786 249 7.12466 -0.0342923 -0.843786 250 7.12452 -0.0566752 -0.843786 250 7.12346 -0.135009 -0.843785 251 7.11264 0.379506 -0.843514 251 7.11435 0.345986 -0.843513 251 7.12275 -0.0119131 -0.843512 249 7.12187 -0.112605 -0.843511 251 7.12077 -0.168537 -0.843511 251 7.11441 0.301184 -0.843239 250 7.11575 0.267656 -0.843239 250 7.11655 0.245301 -0.843239 249 7.11426 -0.190769 -0.842687 252 7.11135 0.222736 -0.842416 251 7.1147 0.0439513 -0.842415 250 7.11164 -0.213066 -0.842413 253 7.10023 0.423564 -0.842142 252 7.1066 0.0662 -0.841317 253 7.09025 0.456478 -0.841045 253 7.10346 0.144289 -0.841043 253 7.09992 0.121889 -0.840495 254 7.10042 0.0884302 -0.840494 255 7.06859 0.656174 -0.840223 255 7.72428 -0.67531 -0.830229 43 7.47306 0.855353 -0.798937 57 7.48351 -0.629756 -0.797324 71 10.1258 1.08137 -0.793982 40 8.08112 0.956647 -0.789055 196 7.75842 0.910151 -0.788055 80 7.39294 0.822949 -0.787701 123 10.0535 1.02595 -0.786301 40 7.38275 -0.597568 -0.783413 159 8.05887 -0.684898 -0.782921 150 7.3677 -0.561353 -0.781005 240 9.98974 1.09894 -0.780786 60 7.34227 0.794153 -0.780477 219 7.34078 0.770684 -0.779942 237 9.97635 1.12922 -0.779802 61 9.96894 1.17599 -0.779605 82 7.35362 -0.536993 -0.778865 243 7.33052 0.734746 -0.77807 239 7.34143 -0.512872 -0.776993 243 7.31701 0.710238 -0.775929 241 7.3319 -0.477456 -0.775388 244 7.31328 0.686713 -0.775127 243 7.3308 -0.431132 -0.774853 234 7.30064 0.650886 -0.772986 245 7.31692 -0.395669 -0.772713 240 7.31359 -0.453124 -0.772713 247 7.30845 -0.326119 -0.771109 232 7.29497 0.523573 -0.770846 235 7.28699 0.465542 -0.76924 233 7.26098 0.498334 -0.76603 246 7.26667 -0.369876 -0.765758 222 7.24536 0.623227 -0.765228 214 7.25988 -0.346639 -0.764688 140 7.24136 0.599993 -0.764425 177 7.25929 -0.266633 -0.764154 251 7.23596 0.542396 -0.763088 228 7.23224 0.56498 -0.76282 190 7.24654 -0.288921 -0.762548 180 7.24794 0.0755163 -0.762015 234 7.24029 -0.243089 -0.761478 251 7.2304 0.416544 -0.761214 249 7.23999 -0.186155 -0.761211 251 7.23937 -0.208905 -0.761211 250 7.22707 0.439142 -0.760947 251 7.23147 0.359648 -0.760947 250 7.23256 0.33693 -0.760947 249 7.23498 0.280118 -0.760946 249 7.23763 0.200547 -0.760946 249 7.22832 0.382273 -0.760679 248 7.2316 0.314128 -0.760679 249 7.23385 0.257322 -0.760679 249 7.23706 -0.140572 -0.760677 249 7.23658 -0.163307 -0.760676 249 7.23264 0.234539 -0.760411 251 7.23426 0.177723 -0.760411 249 7.23644 -0.00412848 -0.76041 249 7.23639 -0.0268647 -0.76041 251 7.23566 -0.106433 -0.760409 251 7.23443 0.0186063 -0.760142 248 7.2342 -0.0609394 -0.760142 251 7.23081 0.154926 -0.759876 244 7.23199 -0.0836383 -0.759874 252 7.22436 0.0526592 -0.758805 255 7.20372 0.120487 -0.75613 211 7.20208 0.097837 -0.755862 169 7.45762 -0.607577 -0.745728 84 7.40464 0.843874 -0.741912 124 7.34872 -0.575858 -0.731452 130 7.31589 0.798529 -0.72993 158 7.32135 -0.516004 -0.727373 246 7.30894 -0.549791 -0.726098 216 7.28757 0.725875 -0.725341 251 7.30511 -0.491865 -0.725079 251 7.27301 0.770571 -0.724066 202 7.2987 -0.468432 -0.72406 255 7.27907 0.690358 -0.723811 255 7.2733 0.666735 -0.722791 254 7.29093 -0.433479 -0.722785 255 7.28829 -0.410363 -0.722275 255 7.26746 0.643156 -0.721771 255 9.95586 1.04223 -0.721272 48 7.28162 -0.387071 -0.721256 255 7.5606 -0.617015 -0.720928 72 9.93222 1.18191 -0.720529 152 7.24581 0.744572 -0.720242 242 7.25855 0.607868 -0.720241 255 7.27091 -0.363641 -0.719726 255 9.91809 1.14859 -0.718855 69 7.26461 -0.329043 -0.718707 255 9.92483 1.07044 -0.718669 63 7.24659 0.583891 -0.718457 255 7.25966 -0.305989 -0.717942 255 7.50222 0.830317 -0.71628 130 7.2306 0.559681 -0.716162 255 7.22836 0.536656 -0.715652 255 7.244 -0.248415 -0.715648 255 7.24077 -0.282478 -0.715393 255 7.22685 0.5023 -0.715142 255 7.24078 -0.225546 -0.715139 255 7.22246 0.479176 -0.714378 255 7.22393 0.456485 -0.714377 255 7.22204 0.422191 -0.713867 255 7.22955 -0.202507 -0.713609 255 7.21059 -0.168045 -0.71106 255 7.20247 0.341543 -0.710808 255 7.20153 0.318821 -0.710553 255 7.19484 0.375147 -0.710043 255 7.20194 -0.0999779 -0.709786 255 7.18967 0.397514 -0.709533 255 7.1972 -0.145162 -0.709276 255 7.81575 0.893927 -0.709095 79 7.19061 0.295657 -0.709023 255 7.19342 0.21658 -0.709023 255 7.19645 0.0583465 -0.709022 255 7.19659 0.0357391 -0.709022 255 7.19667 0.0131244 -0.709022 255 7.19655 -0.0433966 -0.709021 255 7.19638 -0.0660052 -0.709021 255 7.19564 -0.122523 -0.709021 255 7.18952 0.272985 -0.708768 255 7.19072 0.239104 -0.708768 255 7.19208 0.193917 -0.708768 255 7.19378 0.114823 -0.708767 255 7.19467 -0.0207889 -0.708766 255 7.19093 0.159974 -0.708512 255 7.1914 0.13738 -0.708512 255 7.19028 0.0808649 -0.708257 255 7.4368 -0.571209 -0.705246 113 7.412 0.797093 -0.704763 103 9.21555 0.34612 -0.698851 40 7.38116 -0.543415 -0.69814 90 7.35049 0.755685 -0.696677 106 9.1826 0.373867 -0.6957 40 9.15687 0.41612 -0.693337 40 7.70626 -0.600895 -0.692986 90 7.30343 0.72784 -0.690551 118 7.31751 -0.51539 -0.690054 98 7.30127 -0.491136 -0.687849 162 7.30293 -0.433652 -0.687604 236 7.2833 0.645143 -0.68712 233 7.2701 0.701588 -0.68614 147 7.29038 -0.409878 -0.685889 239 7.28766 -0.455677 -0.685889 223 7.26155 0.62031 -0.68418 238 7.25553 0.665754 -0.683935 210 7.25555 0.596873 -0.683199 240 7.26448 -0.37399 -0.682459 242 7.24641 0.561799 -0.681729 242 7.25373 -0.350549 -0.680989 245 7.24092 -0.327082 -0.679274 245 7.58329 -0.567765 -0.678285 93 7.55342 0.826991 -0.677592 75 7.21649 0.479846 -0.677318 245 7.22541 -0.269472 -0.677069 247 7.22453 -0.29217 -0.677069 246 7.20853 0.536229 -0.676828 246 7.2082 0.513444 -0.676583 246 7.22226 -0.246621 -0.676579 246 7.22101 -0.223862 -0.676334 248 7.20805 0.456579 -0.676093 246 7.21141 0.399953 -0.676093 246 7.20747 0.433817 -0.675848 246 7.21858 -0.167035 -0.675844 248 7.20867 0.377103 -0.675602 246 7.21709 -0.144309 -0.6756 246 7.21604 -0.189653 -0.675599 247 7.2157 -0.11026 -0.675355 247 7.20585 0.354275 -0.675112 245 7.20495 0.331546 -0.674867 245 7.20617 0.252244 -0.674622 246 7.20851 0.172993 -0.674621 244 7.21049 0.0370921 -0.674621 246 7.2103 -0.0648452 -0.67462 246 7.21006 -0.0874969 -0.67462 246 7.20138 0.274745 -0.674132 246 7.20331 0.218177 -0.674132 245 7.20397 0.195546 -0.674131 245 7.2066 0.0144456 -0.67413 244 7.20369 0.116298 -0.673886 246 7.20451 -0.0421366 -0.673885 247 7.19651 0.297218 -0.673642 244 7.20108 0.150209 -0.673641 244 7.20204 0.0936474 -0.673641 247 7.20066 -0.00816663 -0.673395 245 7.19436 0.0709712 -0.672661 246 7.4691 0.793722 -0.667325 153 7.45622 -0.535144 -0.663117 110 7.41823 0.764566 -0.661024 119 7.41703 -0.497356 -0.658217 144 7.3763 0.724974 -0.655657 107 7.3982 -0.449495 -0.655651 96 7.39825 -0.414523 -0.655418 99 7.39477 -0.472616 -0.655417 113 7.37082 0.677664 -0.65449 101 7.36602 0.642207 -0.653556 97 7.3845 -0.332409 -0.653318 106 7.35679 0.69965 -0.65309 81 7.3769 -0.366929 -0.652618 102 7.83584 -0.596478 -0.651136 67 7.3597 -0.308219 -0.650285 109 7.35587 -0.389124 -0.650284 105 7.33436 0.616118 -0.649589 99 7.33428 0.592908 -0.649356 101 7.34674 -0.284607 -0.648651 113 7.32423 0.568893 -0.647956 97 7.32089 0.533919 -0.647256 94 7.32055 0.510772 -0.647022 101 7.32691 -0.2263 -0.646085 115 7.32576 -0.260825 -0.646085 120 7.31221 0.487076 -0.645855 101 7.31902 -0.145562 -0.644919 112 7.30253 0.451834 -0.644455 100 7.30391 0.42889 -0.644455 105 7.30522 0.405941 -0.644455 105 7.30646 0.382989 -0.644455 108 7.31368 -0.202945 -0.644451 110 7.30832 -0.179841 -0.643752 114 7.74628 0.813995 -0.643478 57 7.30554 -0.122384 -0.643285 107 7.29139 0.324733 -0.642354 114 7.29595 -0.0993323 -0.642119 108 7.29128 0.221489 -0.641887 100 7.29237 -0.0649284 -0.641652 105 7.28658 0.244247 -0.641421 104 7.27843 0.347029 -0.640954 110 7.2843 0.186895 -0.640953 100 7.28533 0.141122 -0.640953 107 7.28644 0.0610083 -0.640953 108 7.28461 0.0380993 -0.640719 110 7.27784 0.266818 -0.640487 105 7.27451 0.301022 -0.640254 103 7.28026 0.0838093 -0.640253 105 7.28071 -0.0191189 -0.640252 124 7.27691 0.163802 -0.64002 99 7.2778 0.118077 -0.64002 105 7.27665 -0.0419833 -0.639786 96 7.27081 0.00371385 -0.639086 113 7.71896 -0.501871 -0.637559 40 7.69298 -0.560816 -0.635149 73 7.63527 0.766358 -0.630776 71 7.65702 -0.473475 -0.630551 40 8.06363 0.63879 -0.630307 69 7.63919 -0.532583 -0.629018 94 8.0418 0.611569 -0.627815 115 7.60597 0.739398 -0.627272 118 8.03376 0.585548 -0.626777 69 7.60034 0.71478 -0.626396 123 8.02453 0.546831 -0.625531 74 7.62152 0.0802013 -0.62508 40 7.61015 -0.386461 -0.624858 40 7.59895 -0.445723 -0.623982 40 7.60403 0.0203491 -0.623108 66 7.59545 -0.361735 -0.623106 40 7.59379 0.187385 -0.622233 40 7.5886 -0.337492 -0.62223 40 7.99247 0.519318 -0.622001 116 7.98215 0.493433 -0.620755 71 7.58198 0.0560968 -0.6207 107 7.57248 0.163133 -0.619824 60 7.56521 0.127342 -0.618948 57 7.9546 0.454009 -0.617639 76 7.54341 -0.40661 -0.617631 40 7.55237 -0.00333787 -0.617414 48 7.54547 0.210076 -0.616978 40 7.5457 0.103369 -0.616758 52 7.83168 0.644437 -0.606219 50 7.81381 -0.365334 -0.602476 40 7.75087 0.784903 -0.599159 90 7.76418 -0.534467 -0.598321 96 7.73484 0.391999 -0.594381 40 7.7414 -0.228243 -0.594378 40 7.72413 -0.507474 -0.593961 214 7.69591 0.75472 -0.593136 197 7.72673 -0.252154 -0.592924 40 7.71993 -0.276236 -0.592301 40 7.68354 0.716915 -0.591475 194 7.70264 -0.31202 -0.590639 40 7.69069 -0.469012 -0.590223 66 7.6992 -0.16664 -0.58981 40 7.69168 -0.335819 -0.589601 40 7.69267 -0.190698 -0.589187 40 7.69173 -0.142325 -0.588979 40 7.66829 -0.443545 -0.587731 47 7.67103 0.352313 -0.587528 40 7.6623 -0.117804 -0.585864 40 7.6478 -0.418333 -0.585447 93 7.65702 -0.0575997 -0.585242 40 7.65482 -0.0816389 -0.585034 40 7.63914 -0.393827 -0.584409 61 7.64167 0.158563 -0.583789 40 7.64331 0.00249188 -0.583789 40 7.6309 0.194282 -0.582751 40 7.6333 -0.0335183 -0.58275 40 7.62631 0.278095 -0.582544 40 7.63121 0.0503976 -0.582543 40 7.62492 0.0862684 -0.58192 40 7.62139 0.0263524 -0.581504 40 7.61249 0.325458 -0.581298 40 7.61561 0.241733 -0.581298 40 7.61429 0.133964 -0.580882 40 7.9884 0.795233 -0.580681 40 7.61268 0.110008 -0.580674 40 7.60354 0.301114 -0.58026 40 7.57259 0.216408 -0.576729 40 7.93796 0.476706 -0.573196 86 7.93544 0.451554 -0.572802 87 7.88857 -0.468967 -0.568267 40 7.87483 0.49795 -0.56709 84 7.83549 0.520312 -0.563348 81 8.27685 0.822637 -0.563238 69 7.82906 -0.526982 -0.562751 83 7.82501 0.55669 -0.56256 46 7.81643 0.642538 -0.562364 67 7.81739 0.605548 -0.562167 43 7.81131 0.580423 -0.561379 45 7.81831 -0.267589 -0.56039 40 7.78278 0.750759 -0.560001 148 7.79571 -0.487727 -0.559207 180 7.79755 -0.29134 -0.55842 40 7.79659 -0.315836 -0.55842 40 7.79545 -0.156431 -0.55783 40 7.78707 -0.352187 -0.557632 40 7.76046 0.7118 -0.55744 159 7.78834 -0.205231 -0.557239 40 7.78729 -0.24193 -0.557239 40 7.75671 0.686907 -0.556849 67 7.779 -0.180498 -0.556254 40 7.77481 -0.0704329 -0.555664 40 7.74669 -0.0944234 -0.552907 40 7.74237 -0.118692 -0.552513 40 7.73916 -0.0456768 -0.552119 40 7.72463 0.270034 -0.551136 40 7.72138 -0.0091269 -0.550347 40 7.70921 -0.433407 -0.550344 40 7.7072 -0.396855 -0.54995 66 7.71258 0.20903 -0.549757 40 7.71341 0.0151442 -0.549559 40 7.7038 0.160388 -0.548772 40 7.69927 0.184507 -0.548378 40 7.70049 0.124035 -0.548378 40 7.70084 0.0998434 -0.548378 40 7.69541 0.0393478 -0.547787 40 7.68654 -0.371509 -0.547784 76 7.68718 0.0755578 -0.546999 40 7.88884 0.446095 -0.524379 86 7.89194 -0.236114 -0.523818 40 7.87349 0.470006 -0.523078 88 7.85799 -0.494965 -0.521771 125 7.86499 -0.321977 -0.521586 40 7.85965 -0.43313 -0.521585 40 7.85012 0.493291 -0.521033 84 7.84223 0.579422 -0.520847 74 7.84572 0.530136 -0.520847 78 7.83546 0.640828 -0.520661 53 7.8569 -0.272241 -0.520657 40 7.83545 0.616048 -0.520475 51 7.81571 0.750545 -0.519732 163 7.82416 0.553309 -0.518988 121 7.83412 -0.296168 -0.518611 40 7.81378 -0.467691 -0.517495 219 7.82377 -0.0130269 -0.517126 40 7.82159 -0.185065 -0.517125 40 7.79053 0.698658 -0.516943 91 7.78631 0.722938 -0.516757 190 7.81955 -0.0621666 -0.516754 40 7.80903 -0.209356 -0.516009 40 7.79727 -0.0988104 -0.514708 40 7.7867 0.378648 -0.514525 40 7.79251 -0.147738 -0.514336 40 7.77942 -0.404469 -0.513963 50 7.78785 -0.037553 -0.513779 40 7.77303 -0.123008 -0.512477 40 7.75802 0.352728 -0.511736 40 7.75135 0.206078 -0.51062 40 7.74034 0.242256 -0.50969 40 7.74001 0.181406 -0.509504 40 7.73124 0.327079 -0.509133 40 7.73071 0.290564 -0.508947 40 7.73258 0.156902 -0.50876 40 7.73358 0.0961621 -0.50876 40 7.71711 0.132276 -0.507273 40 7.70476 -0.340194 -0.506712 57 7.70307 -0.376498 -0.506712 70 7.70372 0.26522 -0.506344 40 7.70031 0.0109596 -0.505599 40 7.69003 0.0713113 -0.504669 44 8.01286 0.762909 -0.487226 77 8.01041 0.724623 -0.486706 186 8.02638 -0.486855 -0.486526 113 8.00997 -0.460549 -0.484966 201 7.99546 -0.434466 -0.48358 40 7.9662 0.607393 -0.482026 40 7.96476 0.54442 -0.481506 60 7.96405 0.494134 -0.481159 74 7.97436 -0.282607 -0.481155 40 7.96724 -0.25727 -0.480462 40 7.94422 0.580696 -0.479946 47 7.9604 -0.219476 -0.479769 40 7.92926 0.692448 -0.479427 97 7.9366 0.517549 -0.478906 106 7.94512 -0.194026 -0.478383 40 7.94279 -0.106587 -0.478037 40 7.92577 0.466892 -0.477693 103 7.93351 -0.0191895 -0.477171 40 7.92338 -0.0564716 -0.476304 40 7.90998 0.428628 -0.476133 42 7.91382 -0.168282 -0.47561 40 7.91231 -0.143376 -0.475437 40 7.90323 -0.0810935 -0.474571 40 7.90166 0.00581601 -0.474398 40 7.89748 0.0554488 -0.474051 40 7.89236 0.229046 -0.473879 40 7.8892 0.266175 -0.473706 40 7.88266 0.377588 -0.473533 40 7.88966 0.179375 -0.473532 40 7.88037 0.340279 -0.473186 40 7.8814 0.31552 -0.473186 40 7.88444 0.142106 -0.473012 40 7.87788 -0.303659 -0.472836 53 7.87636 -0.340779 -0.472836 59 7.88167 0.0306282 -0.472665 40 7.8771 0.20389 -0.472493 40 7.86729 -0.365127 -0.472142 83 7.87289 0.117197 -0.471972 40 7.86443 0.290156 -0.471626 40 7.84931 0.0922606 -0.469892 40 7.82969 0.39988 -0.469027 40 8.14185 -0.431459 -0.453331 40 8.12325 -0.404949 -0.451703 40 8.10589 -0.467977 -0.450563 105 8.07149 0.741034 -0.44943 101 8.07617 0.61369 -0.448941 40 8.06326 0.650907 -0.448127 40 8.06794 0.562064 -0.447964 40 8.0835 0.00353059 -0.447636 40 8.07763 -0.250327 -0.447471 40 8.04381 0.534912 -0.445848 40 8.05572 -0.173748 -0.445518 40 8.05557 -0.0218789 -0.445357 40 8.02145 0.672775 -0.444871 50 8.0465 -0.224164 -0.444867 40 8.04449 -0.135621 -0.444542 40 8.03752 -0.0471392 -0.443891 40 8.01445 0.583477 -0.443732 40 8.02038 0.495319 -0.443731 40 8.02334 0.444916 -0.443731 40 8.02958 0.0411731 -0.443241 40 8.02325 -0.19837 -0.442914 40 8.01659 -0.286448 -0.442587 40 8.01688 0.116635 -0.442264 40 8.00201 0.468889 -0.442103 40 8.00927 0.267575 -0.44194 40 8.00808 0.242345 -0.441777 40 8.00913 0.204605 -0.441777 40 8.00724 0.0913024 -0.44145 40 8.00376 0.179289 -0.441288 40 7.99349 0.317295 -0.4408 40 7.99553 0.0660087 -0.440474 40 7.99504 -0.109825 -0.440472 40 7.99336 -0.0846928 -0.44031 40 7.98777 -0.310638 -0.440308 40 7.98277 -0.335576 -0.439983 47 7.9805 0.291626 -0.439661 40 7.96044 0.153157 -0.437707 40 8.29656 -0.448979 -0.39934 77 8.21655 0.706401 -0.394797 80 8.22153 -0.392882 -0.393618 83 8.21532 -0.353764 -0.393031 87 8.21029 -0.418172 -0.392884 75 8.2124 -0.327783 -0.392738 43 8.18702 0.652175 -0.392302 81 8.16704 0.676469 -0.390981 68 8.16602 0.58608 -0.390394 96 8.15817 0.611302 -0.389954 76 8.16637 -0.210214 -0.38907 117 8.163 -0.184449 -0.388776 113 8.13598 0.558341 -0.388046 149 8.1357 0.532651 -0.387899 91 8.14106 0.443161 -0.387899 110 8.14429 0.379212 -0.387899 109 8.14762 -0.299352 -0.387895 42 8.14982 -0.145688 -0.387749 115 8.13414 0.49408 -0.387606 107 8.14893 -0.0560492 -0.387603 112 8.13366 0.468417 -0.387459 111 8.13708 0.404517 -0.387459 108 8.14508 -0.0304182 -0.38731 111 8.14426 -0.119977 -0.387309 120 8.1424 0.110292 -0.387164 115 8.13307 0.31474 -0.386871 110 8.13913 0.0207642 -0.38687 113 8.13861 -0.0943038 -0.386869 112 8.13695 0.0591085 -0.386723 121 8.13377 -0.234844 -0.386722 93 8.12803 0.288992 -0.386431 107 8.1289 0.263457 -0.386431 105 8.13317 -0.00478558 -0.38643 111 8.12352 0.352744 -0.386285 110 8.12371 0.237763 -0.385991 114 8.12474 0.199476 -0.38599 113 8.12475 0.0845834 -0.385843 116 8.12134 0.17388 -0.385697 108 8.11386 0.148246 -0.38511 109 8.54253 -0.441951 -0.36953 55 8.45602 -0.371183 -0.363432 98 8.44286 -0.397223 -0.362618 90 8.40207 0.688694 -0.361132 161 8.39822 0.661808 -0.360726 66 8.39287 -0.302594 -0.358959 107 8.39135 -0.342138 -0.358959 106 8.3565 0.631975 -0.357744 135 8.37153 0.119039 -0.357199 166 8.36785 -0.275454 -0.357197 147 8.33948 0.591115 -0.356388 117 8.33135 0.564205 -0.35571 127 8.32111 0.471613 -0.354626 98 8.30919 0.536413 -0.354084 100 8.32547 -0.130255 -0.354081 97 8.32502 -0.156412 -0.354081 105 8.30685 0.51005 -0.353813 130 8.29267 0.443777 -0.352592 127 8.29004 0.417511 -0.352321 90 8.29306 0.352384 -0.352321 116 8.29881 0.169938 -0.35232 100 8.30029 -0.0647418 -0.352319 96 8.30005 -0.0908162 -0.352319 97 8.29618 0.0786335 -0.352049 107 8.2924 0.0525257 -0.351777 100 8.29247 -0.0386505 -0.351777 95 8.28195 0.377949 -0.351643 112 8.28724 0.234801 -0.351643 97 8.29057 0.000418597 -0.351642 82 8.28161 0.286717 -0.351372 120 8.28653 0.0264376 -0.351371 123 8.27818 0.325653 -0.351237 119 8.27849 0.260558 -0.351101 127 8.27597 0.208423 -0.350829 125 8.2766 -0.181663 -0.350827 56 8.25298 -0.246073 -0.349336 119 8.23376 -0.219676 -0.347981 55 8.65377 0.706476 -0.329693 79 8.6252 0.636094 -0.327579 167 8.59946 -0.353115 -0.324963 87 8.58773 -0.393149 -0.324341 65 8.58258 -0.325363 -0.323844 118 8.55747 0.658337 -0.323476 49 8.57159 -0.297946 -0.323099 94 8.53753 0.60294 -0.321984 127 8.54895 -0.25676 -0.321607 108 8.50353 0.573803 -0.319746 88 8.5178 -0.228939 -0.319618 174 8.49781 0.506435 -0.319124 86 8.48422 0.532415 -0.318378 132 8.48757 0.439003 -0.318254 119 8.47495 0.411695 -0.317383 116 8.46747 0.478035 -0.317135 112 8.47022 0.384816 -0.31701 115 8.4634 0.357893 -0.316513 121 8.46196 0.131689 -0.316014 109 8.46083 0.0519223 -0.31589 100 8.44869 0.197897 -0.315269 96 8.44106 0.317182 -0.315021 121 8.44528 0.171287 -0.31502 116 8.44665 0.0784144 -0.315019 99 8.43603 0.290472 -0.314647 124 8.4369 0.26397 -0.314647 122 8.43805 0.224207 -0.314647 129 8.43638 0.104863 -0.314398 106 8.42705 0.0121092 -0.313776 82 8.41706 -0.014316 -0.313154 59 8.40872 -0.19924 -0.31278 125 8.39606 -0.132932 -0.31191 106 8.37506 -0.0404291 -0.310543 58 8.35681 -0.0796658 -0.309424 98 8.35452 -0.10589 -0.309299 57 8.35343 -0.171503 -0.309299 69 8.80695 0.564747 -0.286321 130 8.80115 0.592131 -0.286097 73 8.78161 0.521497 -0.284747 112 8.77125 0.493196 -0.284072 129 8.77076 0.465527 -0.28396 129 8.76018 0.395959 -0.283172 108 8.7569 0.423375 -0.28306 133 8.75952 -0.168529 -0.282719 199 8.74991 0.147781 -0.282159 96 8.73856 0.339902 -0.281822 128 8.73408 0.298499 -0.281485 143 8.73497 0.27106 -0.281485 156 8.73683 0.202447 -0.281484 158 8.73888 -0.0720887 -0.281483 183 8.73844 -0.113269 -0.281483 190 8.73699 -0.195621 -0.281482 165 8.72947 0.366993 -0.281373 152 8.73397 -0.236743 -0.281369 158 8.73343 0.174904 -0.281259 169 8.73117 -0.0171873 -0.281033 178 9.69388 -0.111198 -0.280997 255 8.7258 0.243306 -0.280922 158 8.72908 -0.0446129 -0.280921 194 8.7252 -0.263963 -0.280919 166 9.67998 0.451909 -0.280798 255 8.72505 0.0513387 -0.280696 185 8.72516 0.0239211 -0.280696 178 8.71885 0.0786756 -0.280359 193 8.68095 -0.33101 -0.278557 54 8.65488 0.650192 -0.278112 62 8.65785 0.609402 -0.278112 69 8.66191 -0.357593 -0.277545 80 9.25912 0.637665 -0.260048 60 9.1837 0.458988 -0.255695 255 8.68513 0.285167 -0.230085 255 8.66525 0.502787 -0.22958 248 8.65358 -0.069286 -0.228262 249 8.59571 0.458337 -0.225936 255 8.60342 0.0934425 -0.225732 197 8.59184 -0.190106 -0.225224 255 8.57266 -0.149208 -0.224212 208 8.56247 0.160384 -0.223708 123 8.51978 0.0660193 -0.221481 255 8.51537 0.21317 -0.22138 255 8.49868 0.23952 -0.220571 255 8.34026 -0.000329544 -0.21237 81 8.31425 -0.0263679 -0.211054 124 8.99038 -0.377638 -0.194625 105 8.96516 0.723639 -0.194451 175 8.96658 0.652898 -0.194271 255 8.95687 0.75128 -0.194181 31 8.90963 0.690816 -0.191846 255 8.92963 -0.347166 -0.191841 255 8.91869 -0.318718 -0.191302 255 8.72038 -0.271073 -0.182321 89 8.67765 0.603614 -0.181158 82 8.68279 0.453371 -0.180978 147 8.69379 -0.120038 -0.180975 216 8.68995 -0.215579 -0.180884 161 8.68723 -0.242829 -0.180794 135 8.66953 0.575657 -0.180709 148 8.68687 -0.174558 -0.180705 190 8.67016 0.534667 -0.180619 100 8.67334 0.480181 -0.180619 178 8.68338 -0.14721 -0.180526 223 8.64188 0.505586 -0.179271 92 8.50525 0.162593 -0.172534 255 8.49918 0.309444 -0.172445 255 8.49127 0.402676 -0.172266 137 8.49646 -0.0778609 -0.172084 217 8.48765 0.349051 -0.171996 235 8.47453 0.375148 -0.171457 255 8.4801 0.215348 -0.171456 248 8.47415 0.281799 -0.171277 255 8.473 0.255109 -0.171187 255 8.47474 0.188554 -0.171187 255 8.47656 0.0687295 -0.171186 255 8.46831 0.0952448 -0.170827 255 8.43877 0.0417941 -0.16948 138 8.41783 0.134199 -0.168582 255 8.37679 -0.050813 -0.166695 91 8.34897 0.00172791 -0.165438 82 8.34094 -0.0245028 -0.165078 108 9.31827 -0.420413 -0.150394 222 9.26979 -0.27226 -0.148314 77 9.23526 0.585569 -0.147547 78 8.95989 0.710319 -0.137294 223 8.90785 0.061297 -0.134208 255 8.88876 0.242782 -0.133593 227 8.88348 0.21473 -0.133361 251 8.88211 0.186786 -0.133284 249 8.85965 0.0889434 -0.132358 220 8.5192 0.140061 -0.119254 205 8.33043 -0.0325895 -0.111929 74 8.86907 0.255713 -0.0774389 122 8.84457 0.06035 -0.0765346 243 8.68443 0.0860746 -0.0713731 107 8.49451 0.203756 -0.0653087 80 8.47407 0.123298 -0.0645987 82 8.46764 0.149793 -0.0644052 149 8.46314 0.176298 -0.0642763 114 9.23872 0.0385356 -0.0420331 255 8.93187 0.136336 -0.0337361 255 8.90307 0.261903 -0.0330317 57 8.88386 0.233467 -0.0324893 255 8.87256 0.205307 -0.0321637 255 8.8383 0.107411 -0.0311871 255 8.83318 0.176751 -0.031079 255 8.83059 0.0795932 -0.03097 255 8.92883 0.109524 0.0257439 156 8.90422 0.151119 0.0262336 255 8.89841 0.234919 0.0263149 255 8.89771 0.178961 0.026356 255 8.88911 0.206702 0.0265192 255 8.86515 0.0807025 0.0270507 255 8.94523 0.200383 0.0667407 71 8.94253 0.130075 0.0668041 112 8.88009 0.157252 0.0677811 233 9.03113 0.123138 0.124751 255 9.00347 0.0943905 0.125007 91 8.97246 0.164464 0.125281 99 8.93591 0.191774 0.12561 211 8.92927 0.219681 0.125664 156 8.99981 0.0867321 0.181992 121 8.94632 0.184763 0.182135 208 8.91686 0.15622 0.182218 255 8.9077 0.212073 0.18224 108 7.19807 -0.0498054 0.186965 59 7.26025 0.88953 0.22987 40 7.29312 0.91695 0.229986 40 7.78059 -0.174215 0.231376 255 7.79767 -0.211304 0.231435 255 8.88067 0.181531 0.234905 253 8.89171 0.223717 0.234943 143 8.90119 0.154036 0.234969 255 8.93494 0.253026 0.235084 72 8.98362 0.127474 0.235233 70 9.02611 0.0856606 0.235368 233 +unknow 0.972964 1 0 548 -1.41302 -20.1838 -1.43895 149 -1.50505 -20.1351 -1.43553 139 -1.56739 -20.1184 -1.43455 128 -2.00371 -20.0215 -1.42981 103 -2.06499 -19.9993 -1.42851 129 -2.12489 -19.9649 -1.42623 138 -2.27984 -19.9318 -1.42492 137 -2.18502 -19.9344 -1.42427 140 -2.70446 -19.78 -1.41693 138 -2.61019 -19.7847 -1.41628 147 -2.76331 -19.7477 -1.41498 141 -2.82337 -19.7252 -1.41384 137 -2.88533 -19.7162 -1.41383 139 -2.97407 -19.6748 -1.41155 137 -3.03466 -19.6575 -1.4109 140 -3.09609 -19.6458 -1.41073 137 -3.1842 -19.6035 -1.40845 139 -3.2448 -19.5875 -1.40796 139 -3.30237 -19.5536 -1.40601 142 -3.39346 -19.5319 -1.40552 136 -3.45308 -19.5114 -1.4047 138 -3.5112 -19.4828 -1.40323 135 -3.56775 -19.4461 -1.40112 140 -2.52409 -19.6049 -1.40083 130 -2.30814 -19.6295 -1.40068 125 -3.65825 -19.4232 -1.40062 139 -2.46101 -19.6009 -1.39986 119 -3.71739 -19.4019 -1.39981 136 -2.36838 -19.6103 -1.3997 128 -3.77378 -19.3666 -1.39785 136 -3.86228 -19.3349 -1.39671 139 -3.92222 -19.3188 -1.39638 142 -3.98169 -19.3005 -1.39589 139 -4.0358 -19.2567 -1.39329 141 -4.12359 -19.2238 -1.39215 139 -3.63547 -21.2948 -1.37639 186 -3.70235 -21.2833 -1.37639 185 -3.46714 -21.3168 -1.37596 222 -3.80084 -21.2558 -1.37565 184 -3.86436 -21.2261 -1.37433 192 -3.92773 -21.1962 -1.37301 191 -3.99244 -21.1739 -1.37227 190 -4.09103 -21.149 -1.37183 190 -4.15319 -21.1145 -1.37021 189 -4.21911 -21.0994 -1.37006 188 -4.31608 -21.0676 -1.36918 190 -4.3806 -21.0461 -1.36859 188 -4.44131 -21.0069 -1.36668 189 -4.50602 -20.987 -1.36624 182 -4.60013 -20.9441 -1.36462 182 -4.72854 -20.9011 -1.36359 181 -4.66242 -20.914 -1.36345 183 -4.88523 -20.8323 -1.36124 181 -4.8184 -20.8417 -1.3608 181 -4.94369 -20.7878 -1.35904 179 -5.03734 -20.7468 -1.35771 177 -5.09531 -20.7018 -1.35551 179 -5.73623 -20.3843 -1.34493 173 -5.63903 -20.4073 -1.34464 177 -5.85088 -20.3019 -1.3414 167 -5.78378 -20.3087 -1.34053 218 -5.91014 -20.2681 -1.34023 171 -6.0559 -20.1771 -1.33685 164 -5.9902 -20.1884 -1.33627 217 -4.9226 -19.7377 -1.28365 148 -5.34698 -19.5939 -1.28129 190 -5.17654 -19.5736 -1.2766 189 -5.26819 -19.5471 -1.27645 171 -4.95904 -19.6216 -1.27602 161 -5.10793 -19.5628 -1.27455 192 -5.04094 -19.5575 -1.27294 155 -2.98188 -19.7111 -1.2538 136 -2.84961 -19.6722 -1.24956 149 -2.40727 -19.6569 -1.24415 154 -2.24846 -19.6375 -1.24137 255 -2.55637 -19.5978 -1.24121 167 -2.61739 -19.5857 -1.24091 187 -1.96961 -19.6574 -1.24064 184 -2.67809 -19.5715 -1.24047 142 -2.06138 -19.64 -1.24005 225 -2.33882 -19.6089 -1.24004 255 -2.46198 -19.5938 -1.24004 255 -2.17916 -19.5771 -1.23638 150 -5.41562 -19.5798 -1.16741 112 -5.1995 -19.6362 -1.16729 122 -5.35147 -19.5871 -1.16674 137 -5.28525 -19.5865 -1.16552 136 -1.52032 -20.214 -1.16458 99 -5.06511 -19.626 -1.16431 115 -4.84616 -19.6689 -1.16351 95 -5.12171 -19.5907 -1.16295 157 -4.96526 -19.6206 -1.16228 227 -4.77168 -19.6316 -1.15985 104 -4.6759 -19.6403 -1.15891 138 -4.611 -19.6413 -1.15796 169 -4.88724 -19.5703 -1.15768 124 -4.5439 -19.6324 -1.15634 192 -4.44477 -19.6244 -1.15431 194 -4.3805 -19.6265 -1.1535 199 -4.31328 -19.6149 -1.15174 201 -4.21705 -19.6174 -1.15053 201 -4.15047 -19.6071 -1.1489 197 -4.08359 -19.5947 -1.14714 207 -4.01883 -19.5917 -1.14606 207 -2.81099 -19.7951 -1.1457 177 -3.92179 -19.587 -1.14444 217 -3.64378 -19.6365 -1.14418 255 -3.8587 -19.5914 -1.1439 238 -3.581 -19.642 -1.14378 255 -3.48632 -19.6469 -1.14297 255 -3.79261 -19.5799 -1.14228 253 -3.69736 -19.5818 -1.1412 255 -3.3518 -19.6035 -1.1385 244 -3.41269 -19.5889 -1.13823 255 -3.28824 -19.6021 -1.13769 234 -3.19487 -19.6115 -1.13729 231 -3.13137 -19.6096 -1.13648 238 -3.06852 -19.6114 -1.13594 240 -2.97341 -19.6079 -1.13472 243 -2.91034 -19.6073 -1.13405 248 -2.84702 -19.6045 -1.13324 254 -2.62657 -19.599 -1.13081 217 -2.47206 -19.615 -1.13054 184 -2.40971 -19.6168 -1.13014 148 -2.56344 -19.5953 -1.13 255 -2.3476 -19.6203 -1.12987 142 -2.06938 -19.6456 -1.12947 255 -1.97599 -19.6471 -1.12893 255 -2.12917 -19.6211 -1.12825 77 -2.25219 -19.6054 -1.12811 252 -1.91292 -19.6394 -1.12799 145 -2.18643 -19.5746 -1.12554 156 -5.68086 -19.6408 -1.06134 94 -5.33542 -19.7168 -1.06011 112 -1.4809 -20.3521 -1.05901 87 -5.45223 -19.6579 -1.05849 122 -5.6037 -19.6048 -1.05786 176 -5.52192 -19.5513 -1.05327 242 -5.02339 -19.6626 -1.05192 111 -5.35389 -19.5421 -1.04992 210 -5.22892 -19.5676 -1.04943 219 -5.13513 -19.5863 -1.04906 214 -5.06352 -19.5637 -1.04658 230 -4.78122 -19.612 -1.04522 187 -4.89948 -19.5622 -1.04397 160 -4.83751 -19.5755 -1.04385 127 -1.52562 -20.0986 -1.04348 140 -4.66824 -19.5489 -1.03976 255 -4.60174 -19.5421 -1.03839 255 -4.53851 -19.5487 -1.0379 255 -4.25914 -19.5992 -1.03716 255 -4.47349 -19.5473 -1.03691 255 -4.37606 -19.5448 -1.03542 255 -4.09768 -19.5969 -1.03493 255 -4.03326 -19.596 -1.03407 255 -4.30988 -19.537 -1.03406 255 -3.97008 -19.6007 -1.03357 255 -3.87456 -19.6035 -1.03258 255 -4.15005 -19.5409 -1.0322 255 -3.81065 -19.6039 -1.03184 255 -3.74263 -19.5824 -1.02973 255 -3.64737 -19.5841 -1.02874 255 -3.58293 -19.5798 -1.02775 255 -3.51891 -19.5772 -1.02688 255 -3.42627 -19.5916 -1.02676 255 -2.7161 -19.7006 -1.02666 141 -3.30177 -19.6049 -1.02627 255 -2.59121 -19.7093 -1.02617 84 -3.363 -19.5924 -1.02614 255 -3.23918 -19.6092 -1.0259 255 -3.08038 -19.6045 -1.02404 255 -3.01847 -19.6121 -1.02392 255 -2.86347 -19.6293 -1.02355 255 -2.92483 -19.6182 -1.02342 255 -3.13622 -19.5592 -1.0218 255 -2.08317 -19.6571 -1.01923 225 -2.36061 -19.6237 -1.01909 125 -2.79126 -19.5651 -1.01895 255 -2.51209 -19.5848 -1.01785 211 -2.4178 -19.5805 -1.01686 194 -2.01706 -19.6218 -1.01662 255 -2.63214 -19.5468 -1.01647 116 -2.29308 -19.5815 -1.01599 198 -2.13571 -19.5671 -1.01401 93 -2.19627 -19.5524 -1.01351 206 -5.87208 -19.7292 -0.947522 178 -5.48589 -19.7882 -0.944727 184 -5.79548 -19.6977 -0.944603 226 -5.68768 -19.673 -0.941573 244 -5.61547 -19.6543 -0.93944 242 -5.551 -19.6622 -0.938881 255 -5.27146 -19.7348 -0.938667 132 -5.10187 -19.7196 -0.935414 108 -1.47574 -20.3113 -0.935326 250 -5.37435 -19.6243 -0.934168 112 -5.30904 -19.6276 -0.933384 172 -5.14868 -19.6455 -0.932041 195 -5.02465 -19.6755 -0.931933 250 -4.86187 -19.6814 -0.930029 101 -4.91162 -19.6176 -0.927218 137 -4.78261 -19.6248 -0.925874 255 -4.68731 -19.6354 -0.925203 255 -4.62242 -19.6364 -0.924419 255 -4.55487 -19.6256 -0.922961 255 -4.48921 -19.6222 -0.921952 255 -1.52158 -20.0656 -0.921726 151 -4.39409 -19.6315 -0.921281 255 -4.3294 -19.6315 -0.920497 255 -4.2656 -19.6353 -0.919937 249 -4.16684 -19.6259 -0.918255 254 -4.10313 -19.6291 -0.917696 255 -4.03825 -19.6262 -0.916799 255 -2.17269 -19.9132 -0.916532 163 -3.94298 -19.6313 -0.916016 255 -3.87975 -19.6358 -0.915569 255 -3.81502 -19.6322 -0.914673 255 -3.74997 -19.6264 -0.913664 255 -3.6549 -19.6301 -0.91288 255 -3.59214 -19.6356 -0.912546 255 -3.52729 -19.6291 -0.911537 255 -3.43304 -19.6357 -0.910978 255 -3.37033 -19.6405 -0.910644 255 -2.71939 -19.731 -0.910106 210 -2.65712 -19.7375 -0.909996 125 -3.30565 -19.6332 -0.909635 255 -3.24234 -19.6337 -0.909075 255 -3.14884 -19.6428 -0.908741 255 -3.08496 -19.6388 -0.907957 255 -3.02145 -19.6365 -0.907286 255 -2.92713 -19.6387 -0.906615 255 -2.86342 -19.634 -0.905831 255 -1.99678 -19.7349 -0.905526 255 -2.08955 -19.7233 -0.90541 255 -2.79893 -19.6231 -0.904709 255 -2.42397 -19.6347 -0.902588 199 -2.51597 -19.6191 -0.90236 111 -2.57759 -19.6111 -0.902358 106 -1.92901 -19.6815 -0.902157 255 -2.36133 -19.6343 -0.902141 127 -2.29757 -19.6238 -0.901132 122 -5.89929 -19.7024 -0.830885 195 -5.81345 -19.6405 -0.826641 247 -4.93652 -19.8461 -0.825055 144 -5.74045 -19.6203 -0.824621 254 -1.51106 -20.3428 -0.822556 128 -5.41823 -19.6599 -0.822104 209 -5.63352 -19.5973 -0.821995 254 -5.56096 -19.5764 -0.819975 255 -5.34432 -19.6325 -0.819781 156 -5.49075 -19.5631 -0.818359 255 -5.25812 -19.5586 -0.81503 156 -5.16078 -19.5639 -0.814022 144 -5.09423 -19.5607 -0.813013 144 -4.96876 -19.5826 -0.812513 131 -5.02876 -19.5611 -0.812207 127 -4.80715 -19.59 -0.8109 255 -4.74228 -19.5914 -0.810195 255 -4.64897 -19.6097 -0.809996 255 -4.58598 -19.6183 -0.809695 255 -4.51936 -19.6112 -0.808585 255 -4.45416 -19.6098 -0.807778 255 -4.35953 -19.6208 -0.807276 255 -2.36644 -19.9434 -0.806543 169 -2.5848 -19.9102 -0.806231 143 -4.29228 -19.609 -0.805964 255 -1.5794 -19.993 -0.805157 165 -4.2243 -19.5931 -0.804449 255 -4.12654 -19.5874 -0.803138 255 -4.06417 -19.5964 -0.802938 255 -4.00058 -19.5993 -0.802435 255 -3.90739 -19.614 -0.802236 255 -2.51109 -19.8311 -0.801784 146 -3.84304 -19.6124 -0.801531 255 -3.7757 -19.595 -0.800016 255 -2.41321 -19.807 -0.799967 107 -3.71225 -19.597 -0.799513 255 -3.61621 -19.5946 -0.798505 255 -3.54854 -19.5724 -0.796788 255 -3.48526 -19.5737 -0.796285 255 -3.3923 -19.5859 -0.796086 255 -3.32974 -19.5906 -0.795785 255 -3.26719 -19.5951 -0.795484 255 -3.17352 -19.6023 -0.795083 255 -3.11035 -19.6024 -0.79458 255 -3.04782 -19.6061 -0.794279 255 -2.98379 -19.5998 -0.793472 255 -2.88933 -19.5998 -0.792767 255 -2.82746 -19.6068 -0.792669 255 -2.76388 -19.6018 -0.791963 255 -2.66984 -19.6027 -0.79136 255 -1.95723 -19.6585 -0.789971 255 -2.26531 -19.6214 -0.789757 255 -2.60107 -19.5575 -0.788632 255 -2.04691 -19.6213 -0.788552 255 -2.10811 -19.6108 -0.788347 255 -2.16927 -19.6001 -0.788142 255 -5.8959 -19.7494 -0.715554 172 -5.23679 -19.9157 -0.714772 170 -5.1652 -19.8972 -0.713159 179 -5.31977 -19.8503 -0.712884 170 -5.80961 -19.6854 -0.711699 229 -5.73325 -19.6537 -0.709369 244 -5.62797 -19.6363 -0.707309 250 -5.06417 -19.7623 -0.706164 188 -5.55379 -19.6096 -0.705248 255 -5.48572 -19.6039 -0.704174 255 -5.38485 -19.5987 -0.702742 255 -5.31804 -19.5962 -0.701847 255 -4.86959 -19.6424 -0.698813 255 -4.80266 -19.6363 -0.697828 255 -4.73722 -19.6357 -0.697113 255 -4.94943 -19.5689 -0.696477 255 -4.64098 -19.6423 -0.696399 255 -4.2861 -19.6512 -0.693272 255 -4.56347 -19.5886 -0.693261 255 -4.49746 -19.5834 -0.692366 255 -4.21975 -19.6431 -0.692287 255 -4.40252 -19.5927 -0.691831 255 -4.12347 -19.6451 -0.691483 255 -4.33579 -19.583 -0.690757 255 -4.05691 -19.6345 -0.690409 255 -3.98967 -19.6197 -0.689155 255 -3.89215 -19.6128 -0.687992 255 -3.82937 -19.6191 -0.687725 255 -3.76585 -19.6212 -0.687279 255 -3.61055 -19.6443 -0.687016 255 -3.70308 -19.627 -0.687012 255 -3.54636 -19.6417 -0.68639 255 -3.48221 -19.639 -0.685765 255 -3.38794 -19.6454 -0.685319 255 -3.32323 -19.6382 -0.684514 255 -3.25924 -19.6347 -0.683889 255 -3.16416 -19.6341 -0.683174 255 -3.09968 -19.6262 -0.682369 255 -3.03649 -19.6259 -0.681923 255 -2.97393 -19.6294 -0.681656 255 -2.88053 -19.6373 -0.681391 255 -2.81798 -19.6403 -0.681124 255 -1.95132 -19.7412 -0.680977 103 -2.75022 -19.6055 -0.679152 255 -2.65674 -19.6104 -0.678797 255 -2.03864 -19.6762 -0.678462 241 -2.53119 -19.6088 -0.677994 255 -2.592 -19.5948 -0.677723 255 -2.43729 -19.6086 -0.677459 255 -2.25148 -19.6228 -0.677107 255 -2.09709 -19.6379 -0.677024 255 -2.15856 -19.6292 -0.676932 255 -2.31266 -19.6117 -0.676926 255 -2.37425 -19.6043 -0.676923 255 -5.83951 -19.6752 -0.581224 168 -5.76128 -19.6379 -0.578993 191 -5.65478 -19.6168 -0.577072 208 -5.57827 -19.5826 -0.574995 229 -5.50694 -19.5654 -0.573612 229 -5.40772 -19.5661 -0.572614 231 -5.34147 -19.5657 -0.571924 232 -5.26848 -19.5399 -0.570232 230 -5.20448 -19.5467 -0.569849 235 -5.10622 -19.5478 -0.568929 237 -5.04027 -19.5464 -0.568238 242 -4.97487 -19.5466 -0.567624 250 -4.87687 -19.5466 -0.566704 242 -4.81352 -19.554 -0.566398 249 -4.74638 -19.5458 -0.565476 255 -4.65096 -19.5543 -0.564941 249 -4.58537 -19.5513 -0.56425 255 -4.51895 -19.5442 -0.563406 253 -4.45574 -19.5505 -0.5631 255 -4.35788 -19.546 -0.562102 250 -4.29343 -19.5459 -0.561566 246 -4.22945 -19.5476 -0.561106 244 -4.13313 -19.5477 -0.560339 241 -4.07047 -19.5548 -0.560111 244 -4.00538 -19.5498 -0.55942 245 -3.91006 -19.5528 -0.558807 237 -3.84589 -19.5513 -0.558271 223 -3.77834 -19.5319 -0.557041 208 -3.56191 -19.5644 -0.556741 255 -3.62225 -19.5472 -0.556508 255 -3.71433 -19.5299 -0.556504 240 -3.49688 -19.5558 -0.555973 255 -3.40435 -19.5701 -0.5559 255 -3.34082 -19.5689 -0.55544 255 -3.27633 -19.5615 -0.554749 255 -3.2142 -19.5678 -0.554598 255 -1.97777 -19.7171 -0.554104 138 -3.11878 -19.563 -0.553831 255 -3.05669 -19.5687 -0.553679 255 -2.99276 -19.5624 -0.553065 255 -2.12952 -19.6731 -0.553021 184 -2.90024 -19.5744 -0.552992 236 -2.83816 -19.5794 -0.55284 212 -2.06665 -19.6698 -0.552638 201 -2.77578 -19.5823 -0.552612 206 -2.18975 -19.6524 -0.552479 192 -2.28233 -19.6419 -0.552476 214 -2.49791 -19.6136 -0.552391 191 -2.34355 -19.6307 -0.55232 208 -2.40521 -19.6232 -0.552317 204 -2.62003 -19.5896 -0.552078 203 -2.68128 -19.5793 -0.551999 208 -2.55795 -19.5938 -0.551926 202 -2.07404 -20.697 -0.461532 65 -2.16309 -20.6054 -0.458886 106 -5.88552 -19.8401 -0.457974 186 -5.79684 -19.7683 -0.454949 88 -2.20742 -20.4077 -0.452698 130 -5.66891 -19.6744 -0.450893 82 -5.58636 -19.619 -0.448448 87 -5.52093 -19.623 -0.447999 227 -5.4178 -19.6102 -0.446714 250 -2.25096 -20.2139 -0.446639 139 -5.34831 -19.5982 -0.44575 252 -5.2805 -19.5917 -0.444979 251 -5.18201 -19.5932 -0.444209 246 -2.3357 -20.1117 -0.443671 112 -5.11591 -19.592 -0.443632 236 -5.05036 -19.5925 -0.443119 227 -4.98829 -19.6063 -0.443057 224 -4.88911 -19.6024 -0.442158 247 -4.82132 -19.5924 -0.441323 238 -4.75647 -19.5939 -0.440874 249 -2.38786 -20.011 -0.44064 127 -4.66178 -19.6064 -0.440555 239 -4.59653 -19.6053 -0.440042 248 -4.52821 -19.5905 -0.439078 250 -4.46531 -19.5987 -0.438887 252 -4.36988 -19.6059 -0.438439 251 -4.30315 -19.5961 -0.437669 253 -4.23904 -19.5978 -0.437284 250 -4.14336 -19.6019 -0.436772 245 -4.07973 -19.605 -0.436453 240 -2.43484 -19.8724 -0.436385 112 -4.01573 -19.606 -0.436068 239 -3.30362 -19.7304 -0.435837 85 -3.92018 -19.609 -0.435556 234 -3.85702 -19.6134 -0.435301 234 -3.792 -19.6077 -0.434723 222 -3.73001 -19.6176 -0.434661 222 -3.63607 -19.6271 -0.434407 218 -3.57333 -19.6325 -0.434216 211 -3.41699 -19.6482 -0.433835 169 -3.50919 -19.6299 -0.433767 199 -3.34991 -19.6273 -0.432806 168 -2.51347 -19.7417 -0.432516 128 -2.63405 -19.6998 -0.431673 216 -2.78813 -19.6745 -0.431539 99 -2.57113 -19.7 -0.431418 205 -2.69431 -19.6795 -0.431284 237 -2.98602 -19.5221 -0.4276 40 -3.04152 -19.4751 -0.426374 204 -3.8075 -21.1544 -0.373476 47 -3.86415 -21.0893 -0.372012 47 -3.95866 -21.0453 -0.371304 47 -5.81938 -19.7596 -0.34914 148 -5.73202 -19.6914 -0.346706 225 -5.62702 -19.6759 -0.345518 232 -5.55207 -19.6474 -0.344222 237 -5.4833 -19.6397 -0.34352 229 -5.38378 -19.6402 -0.34282 236 -5.31628 -19.6358 -0.342227 236 -5.24678 -19.6235 -0.341417 228 -5.15017 -19.6325 -0.340987 229 -5.08444 -19.6331 -0.340556 236 -5.01627 -19.6238 -0.339855 217 -4.95017 -19.6221 -0.33937 226 -4.85427 -19.6316 -0.338995 226 -4.78876 -19.6312 -0.338564 222 -4.7233 -19.6306 -0.338133 220 -4.62706 -19.6371 -0.337703 206 -4.56125 -19.634 -0.337218 179 -2.69086 -19.9583 -0.336801 44 -4.49461 -19.6268 -0.336625 153 -4.33815 -19.6517 -0.33636 44 -4.21207 -19.6669 -0.33604 44 -4.27212 -19.6457 -0.335821 44 -4.11481 -19.665 -0.335448 44 -4.39196 -19.6029 -0.335383 173 -3.82756 -19.6761 -0.334213 44 -3.88936 -19.6639 -0.334211 44 -3.98078 -19.6395 -0.334045 88 -2.7659 -19.8108 -0.333116 44 -2.81472 -19.709 -0.330569 44 -2.8705 -19.6585 -0.329429 244 -3.01959 -19.6018 -0.328503 212 -3.22902 -19.5319 -0.327521 86 -3.13247 -19.5192 -0.326766 241 -3.06894 -19.5152 -0.326389 248 -5.98954 -20.9724 -0.236209 224 -3.87117 -21.176 -0.230501 75 -3.93078 -21.1264 -0.229724 75 -5.64857 -20.2562 -0.220286 107 -4.84862 -20.1767 -0.214651 73 -5.47158 -19.9836 -0.213975 113 -4.88514 -20.0506 -0.212326 72 -5.3563 -19.8056 -0.209863 230 -4.90661 -19.8662 -0.20878 72 -5.28019 -19.7702 -0.208766 255 -5.18494 -19.7871 -0.208606 255 -5.1108 -19.7568 -0.207631 255 -4.98559 -19.7847 -0.207554 72 -5.04476 -19.7573 -0.207307 219 -4.65052 -19.7593 -0.205447 71 -2.92221 -20.0453 -0.204657 86 -3.90566 -19.7711 -0.2025 71 -3.0007 -19.9245 -0.202453 71 -3.99721 -19.7447 -0.202334 71 -4.05282 -19.7007 -0.20168 77 -3.11229 -19.8183 -0.200655 253 -3.03916 -19.7569 -0.199191 70 -4.89141 -20.9793 -0.130701 65 -3.87477 -21.0625 -0.128759 65 -3.96465 -20.9949 -0.127969 65 -5.14073 -19.7914 -0.113494 156 -4.91893 -19.8312 -0.113251 62 -5.06754 -19.7648 -0.112805 192 -5.00296 -19.7709 -0.11265 252 -4.71691 -19.8144 -0.112253 62 -4.82985 -19.7378 -0.111494 61 -3.09948 -20.0216 -0.110616 73 -4.01632 -19.7417 -0.108789 61 -3.95191 -19.7425 -0.108603 61 -3.14191 -19.8834 -0.108571 61 -3.22229 -19.7875 -0.107279 61 -3.27949 -19.7477 -0.106805 210 -3.39252 -20.3243 0.0199626 134 -4.8944 -19.9314 0.0207659 115 -4.81209 -19.865 0.021527 155 -3.42406 -20.1223 0.0217289 142 -4.73949 -19.8372 0.0219245 203 -4.64369 -19.8496 0.022012 226 -4.57505 -19.8368 0.0222641 221 -4.50874 -19.8335 0.0224253 197 -4.40703 -19.8174 0.0227672 213 -4.18681 -19.8549 0.0228498 140 -4.34262 -19.8214 0.0228557 183 -4.27781 -19.8232 0.0229624 160 -3.49557 -19.972 0.0229689 158 -4.11472 -19.821 0.0232838 137 -3.98657 -19.8288 0.0234426 155 -4.04765 -19.8103 0.0234995 148 -3.89156 -19.8395 0.0235118 175 -3.82846 -19.8477 0.0235457 204 -3.76461 -19.8518 0.0236161 237 -3.66921 -19.8594 0.0237035 233 -3.54018 -19.8585 0.0239168 219 -3.60255 -19.8472 0.0239193 211 +unknow 0.97672 1 0 374 -6.00951 26.0733 -1.75598 206 -6.12504 26.0136 -1.75363 198 -6.19659 25.9515 -1.7504 249 -6.27574 25.9223 -1.74967 201 -6.34721 25.8617 -1.74659 193 -6.46032 25.7967 -1.74395 238 -6.53986 25.7705 -1.7435 202 -5.22974 26.0313 -1.74088 147 -6.61189 25.715 -1.74086 194 -6.71887 25.6295 -1.73675 241 -6.79529 25.5929 -1.73558 196 -6.86946 25.5483 -1.73382 193 -7.0529 25.432 -1.72912 196 -6.97245 25.4521 -1.72897 237 -7.12579 25.3848 -1.72721 189 -7.22512 25.2799 -1.72178 243 -7.30451 25.2571 -1.72178 195 -7.37209 25.1938 -1.7187 232 -7.43822 25.1265 -1.71532 199 -7.55196 25.0759 -1.71415 231 -7.61795 25.0101 -1.71092 197 -7.67367 24.9117 -1.7052 191 -7.78562 24.8581 -1.70388 184 -8.2441 24.5521 -1.69287 191 -8.16505 24.5722 -1.69243 232 -8.34558 24.4714 -1.68964 188 -8.40493 24.3941 -1.68568 232 -8.47629 24.3525 -1.6845 192 -8.56446 24.237 -1.67863 185 -8.6332 24.1894 -1.67702 232 -8.70309 24.1452 -1.6757 192 -7.74303 24.4512 -1.67439 191 -7.98781 24.2925 -1.66881 178 -7.88685 24.2416 -1.66294 207 -7.76767 24.2633 -1.66177 206 -7.75997 26.1831 -1.64288 105 -5.19807 24.4696 -1.62792 255 -5.53951 24.3761 -1.6266 177 -5.34152 24.3897 -1.6244 232 -7.96599 25.8331 -1.62418 142 -5.45467 24.3564 -1.62381 232 -7.88188 25.8485 -1.6235 154 -7.78676 25.8273 -1.62025 121 -5.23819 26.0328 -1.5917 132 -5.09498 25.9534 -1.58452 138 -8.00729 24.3331 -1.52797 98 -8.07737 24.2889 -1.52662 124 -7.91344 24.305 -1.52418 147 -7.78905 24.3116 -1.52201 130 -7.70658 24.317 -1.52066 96 -7.61938 24.3068 -1.51822 118 -5.50947 24.5798 -1.49901 90 -5.35494 24.4301 -1.48682 126 -5.54487 24.3795 -1.48627 184 -5.27267 24.4214 -1.48506 202 -5.193 24.4242 -1.48411 95 -5.0701 24.4113 -1.48154 86 -4.99178 24.4193 -1.481 142 -8.26213 24.4323 -1.39473 109 -8.08217 24.4041 -1.38951 129 -8.3248 24.2401 -1.38466 94 -4.54183 25.1815 -1.38211 60 -8.119 24.2593 -1.38168 137 -7.9159 24.2843 -1.3792 248 -7.82918 24.2768 -1.37709 168 -7.74744 24.2841 -1.37597 227 -7.47469 24.3507 -1.37485 95 -7.66092 24.276 -1.37386 131 -7.53582 24.2775 -1.37162 101 -7.36696 24.2709 -1.36814 130 -7.24966 24.2957 -1.36752 98 -7.16317 24.2839 -1.36529 129 -7.07681 24.2718 -1.36305 124 -6.96127 24.301 -1.36281 120 -6.88164 24.3113 -1.36206 121 -6.79505 24.2962 -1.3597 116 -6.7134 24.2982 -1.35846 106 -4.54815 24.7685 -1.35688 59 -6.58736 24.2872 -1.35573 75 -6.4331 24.3223 -1.35536 120 -6.50948 24.302 -1.35535 83 -6.30893 24.3156 -1.353 140 -6.23152 24.3315 -1.35275 107 -6.1497 24.3296 -1.35138 147 -6.03402 24.3544 -1.35114 101 -5.9504 24.3442 -1.34927 110 -5.67741 24.3868 -1.34791 135 -5.59766 24.3908 -1.34704 140 -5.86505 24.3259 -1.34691 134 -5.74989 24.3513 -1.34679 101 -5.5096 24.3577 -1.34381 201 -5.23853 24.4031 -1.34294 141 -5.31305 24.3768 -1.34232 146 -5.11329 24.3787 -1.33984 247 -5.03466 24.3849 -1.33922 152 -4.68532 24.432 -1.33786 129 -4.76129 24.4133 -1.33761 115 -4.83219 24.3688 -1.33574 122 -8.63105 24.5763 -1.25564 119 -8.53013 24.5354 -1.25159 226 -8.3898 24.379 -1.24069 255 -7.9822 24.4356 -1.23642 135 -7.90047 24.4454 -1.23552 196 -8.1605 24.3324 -1.23406 130 -8.07581 24.3333 -1.2326 157 -7.78337 24.3446 -1.22811 143 -7.58479 24.3821 -1.22676 132 -7.6996 24.3461 -1.22676 133 -7.41511 24.3758 -1.22362 255 -7.29556 24.3952 -1.22272 255 -7.48164 24.32 -1.2217 174 -7.21264 24.3969 -1.22148 255 -7.13147 24.4041 -1.22058 255 -7.00809 24.4087 -1.2189 255 -6.92317 24.4018 -1.21722 255 -6.84324 24.4119 -1.21654 255 -6.7212 24.4188 -1.21508 255 -4.50835 24.9082 -1.21433 134 -6.63972 24.4225 -1.21407 255 -6.55621 24.4182 -1.21261 255 -6.47432 24.4193 -1.21149 253 -6.35262 24.4245 -1.21003 243 -6.27435 24.4385 -1.20969 244 -4.56911 24.7997 -1.20893 142 -6.19263 24.4387 -1.20857 243 -6.07257 24.4483 -1.20745 244 -5.99143 24.4498 -1.20644 250 -5.91082 24.453 -1.20554 244 -5.78999 24.4572 -1.20419 235 -5.55789 24.5049 -1.20386 130 -5.70809 24.4539 -1.20296 174 -5.01289 24.5977 -1.20252 133 -5.42237 24.4411 -1.19869 144 -4.61184 24.5988 -1.19825 229 -5.34213 24.4424 -1.19779 191 -5.26404 24.4533 -1.19746 155 -4.72012 24.5376 -1.196 255 -5.0641 24.4567 -1.19532 129 -5.14091 24.4407 -1.19532 121 -4.79065 24.4893 -1.19409 255 -4.86482 24.4605 -1.1933 223 -8.56845 24.5683 -1.10766 222 -8.16115 24.5088 -1.09815 124 -7.68113 24.6049 -1.09533 129 -8.38724 24.2929 -1.09147 147 -8.26433 24.3076 -1.09016 255 -4.50845 25.2142 -1.08718 125 -7.95687 24.2755 -1.08369 131 -7.87443 24.2813 -1.08268 122 -7.67809 24.3253 -1.08177 122 -7.7896 24.2793 -1.08126 127 -7.50983 24.3234 -1.07914 232 -7.41593 24.2895 -1.07611 255 -7.29853 24.3146 -1.0756 255 -7.21814 24.3241 -1.0749 255 -7.13609 24.3274 -1.07389 255 -7.01366 24.3339 -1.07247 255 -6.93117 24.3347 -1.07136 255 -6.84768 24.3313 -1.07004 255 -6.73084 24.3556 -1.06964 255 -4.52537 24.856 -1.06947 127 -6.64693 24.3497 -1.06823 255 -5.22091 24.6927 -1.06815 181 -5.33427 24.6542 -1.06744 139 -5.41171 24.6373 -1.06744 139 -6.56471 24.3492 -1.06711 255 -6.48563 24.3601 -1.06661 255 -6.36373 24.3633 -1.0652 255 -6.28119 24.36 -1.06398 255 -6.20021 24.3621 -1.06307 255 -6.08438 24.3872 -1.06287 255 -6.00251 24.3849 -1.06176 255 -5.46355 24.5051 -1.06147 115 -5.92305 24.392 -1.06116 255 -5.8016 24.3924 -1.05974 255 -4.56471 24.6315 -1.05865 182 -5.71768 24.3794 -1.05812 255 -5.63298 24.3622 -1.0563 255 -4.62587 24.5306 -1.05419 255 -5.00982 24.451 -1.05399 234 -4.7369 24.485 -1.05298 255 -4.80919 24.4465 -1.05176 255 -5.07688 24.3882 -1.05156 116 -4.88012 24.4019 -1.05024 255 -8.50559 24.5305 -0.956609 251 -8.31868 24.3624 -0.946737 255 -4.52251 25.3309 -0.946259 155 -8.21515 24.3089 -0.942968 255 -8.1273 24.3005 -0.941354 255 -7.72947 24.3776 -0.939116 242 -7.82151 24.2705 -0.935792 119 -7.62584 24.316 -0.935077 255 -7.54644 24.3303 -0.93463 255 -7.4641 24.3347 -0.933733 255 -7.3424 24.3467 -0.932658 255 -7.26186 24.3562 -0.932031 255 -7.1768 24.3502 -0.930685 255 -7.05752 24.3684 -0.929969 255 -6.97431 24.3674 -0.928893 255 -6.89226 24.37 -0.927997 255 -6.77144 24.381 -0.927011 255 -6.68739 24.3752 -0.925756 255 -6.60657 24.3807 -0.925039 255 -6.48491 24.3864 -0.923874 255 -6.40674 24.4009 -0.923606 255 -4.54977 24.8102 -0.923456 179 -6.322 24.39 -0.922171 255 -6.24136 24.3942 -0.921454 255 -6.12194 24.4059 -0.920648 255 -6.04042 24.4057 -0.919751 255 -5.96182 24.4167 -0.919393 255 -5.84156 24.4232 -0.918408 255 -5.76112 24.4259 -0.917691 255 -5.68163 24.4322 -0.917153 255 -4.59709 24.6328 -0.916004 223 -5.55974 24.4295 -0.915809 255 -5.47682 24.4195 -0.914553 255 -5.31773 24.4281 -0.913389 255 -5.39401 24.4093 -0.913298 255 -4.66248 24.5555 -0.91313 255 -4.77698 24.5273 -0.912859 255 -4.85206 24.5024 -0.912409 255 -5.19713 24.4275 -0.912224 255 -4.92703 24.4773 -0.911959 255 -5.11788 24.4319 -0.911686 255 -5.03948 24.4401 -0.911329 255 -8.17117 24.3428 -0.780476 99 -8.07016 24.2944 -0.777472 99 -7.98383 24.2892 -0.776241 255 -7.86194 24.3037 -0.775318 233 -7.77764 24.3036 -0.774317 232 -7.69645 24.3126 -0.773702 241 -7.57409 24.3238 -0.772702 244 -7.48885 24.3188 -0.771548 243 -7.40371 24.3136 -0.770393 239 -7.31982 24.3118 -0.769393 243 -7.19783 24.3211 -0.768393 244 -7.11691 24.3283 -0.767778 241 -4.52151 24.9393 -0.767739 179 -7.03215 24.3217 -0.766623 246 -6.91637 24.3507 -0.766471 255 -6.83123 24.3415 -0.765239 249 -6.75046 24.3475 -0.764624 255 -6.62939 24.3558 -0.763701 253 -6.5487 24.3611 -0.763086 255 -6.46856 24.368 -0.762548 249 -6.34564 24.3673 -0.761317 249 -6.26657 24.3774 -0.760933 247 -6.18653 24.3834 -0.760394 246 -6.10264 24.3737 -0.75924 242 -4.5598 24.7068 -0.759186 160 -5.98724 24.4002 -0.759165 248 -5.90541 24.3975 -0.758318 244 -5.82411 24.3965 -0.757549 244 -5.70455 24.4042 -0.75678 249 -5.54758 24.424 -0.756166 209 -5.62429 24.4064 -0.756165 233 -5.42682 24.4245 -0.755166 252 -4.65621 24.579 -0.755024 185 -5.34709 24.4277 -0.754628 244 -5.2657 24.4229 -0.753782 248 -4.727 24.5308 -0.753713 182 -5.0713 24.4518 -0.753322 246 -5.18606 24.4257 -0.753244 244 -4.79869 24.4884 -0.752633 249 -4.99047 24.448 -0.752553 253 -4.91286 24.4597 -0.7524 253 -8.1522 24.7477 -0.631463 79 -8.00643 24.6965 -0.628434 139 -4.54605 25.4389 -0.624618 78 -7.88716 24.5921 -0.624051 128 -7.77832 24.5177 -0.6207 129 -7.63164 24.4549 -0.617349 142 -7.54235 24.4387 -0.615996 120 -7.32598 24.4168 -0.613291 105 -4.55686 25.047 -0.612237 122 -7.16 24.4201 -0.611875 128 -7.2344 24.3899 -0.611616 129 -7.07319 24.408 -0.610716 161 -6.9515 24.418 -0.609944 163 -6.87204 24.4301 -0.609622 157 -6.79043 24.4342 -0.609043 178 -6.66675 24.4351 -0.608013 193 -6.58578 24.4405 -0.607499 205 -6.5038 24.4417 -0.606855 216 -6.38349 24.4528 -0.606212 223 -6.30113 24.4514 -0.605504 227 -4.59527 24.8164 -0.605143 129 -6.22131 24.4595 -0.605118 229 -6.13809 24.4537 -0.604281 233 -6.01703 24.4591 -0.603509 240 -5.934 24.4526 -0.602672 238 -5.85668 24.4692 -0.602609 242 -5.73856 24.4848 -0.602224 241 -5.65528 24.4755 -0.601323 246 -5.57614 24.4834 -0.601001 248 -5.4572 24.4938 -0.600487 245 -4.68477 24.6511 -0.600435 191 -5.29854 24.5061 -0.59978 245 -5.3755 24.4893 -0.599779 247 -5.17967 24.5151 -0.599266 245 -5.02271 24.5335 -0.598817 161 -5.09894 24.5137 -0.598687 242 -4.94045 24.5237 -0.59798 134 -4.74654 24.5558 -0.59779 89 -4.82212 24.533 -0.597531 111 -7.39945 25.8502 -0.52019 58 -7.51618 25.7977 -0.519701 82 -7.29325 25.7848 -0.517699 142 -4.65602 25.3792 -0.490805 122 -6.08361 24.9066 -0.486339 56 -4.68171 25.0735 -0.482784 103 -6.7289 24.5183 -0.480531 55 -6.09818 24.6292 -0.479131 55 -6.44019 24.5192 -0.47853 55 -6.16633 24.573 -0.4781 55 -6.35713 24.5161 -0.477881 55 -7.16223 24.2931 -0.477868 108 -6.26972 24.4953 -0.476744 55 -4.7463 24.7703 -0.475033 88 -5.63525 24.571 -0.474694 55 -5.78953 24.5351 -0.474692 55 -5.71016 24.5435 -0.474422 55 -5.51287 24.568 -0.473883 55 -5.42964 24.5579 -0.473126 55 -5.35162 24.5709 -0.473019 55 -5.2246 24.5431 -0.471558 71 -5.06786 24.5637 -0.471235 255 -4.98948 24.5736 -0.471073 255 -4.87325 24.5949 -0.471021 255 -5.14173 24.532 -0.4708 103 -4.79291 24.5943 -0.470589 97 -7.09991 25.7862 -0.337488 140 -7.01096 25.7795 -0.336877 128 -4.88812 25.4019 -0.319613 152 -6.21052 24.9981 -0.317348 90 -6.88654 24.563 -0.312279 111 -4.89727 25.0274 -0.312147 136 -6.06647 24.7515 -0.311762 89 -6.31829 24.6058 -0.310126 89 -6.20032 24.6276 -0.309965 89 -5.95235 24.6208 -0.308622 88 -5.67902 24.675 -0.308422 88 -5.83165 24.6291 -0.308216 88 -5.75104 24.6337 -0.307932 88 -5.47592 24.6779 -0.307569 88 -5.55298 24.6586 -0.307527 88 -5.27396 24.683 -0.306797 255 -5.19474 24.6916 -0.306635 255 -5.11549 24.7 -0.306473 255 -5.38635 24.6403 -0.306428 88 -4.99785 24.7179 -0.306353 205 -4.96786 25.1698 -0.196039 136 -6.82472 24.6335 -0.19453 111 -5.0199 25.0188 -0.193866 145 -6.72835 24.5854 -0.193398 217 -6.65056 24.6045 -0.193368 160 -6.52484 24.5988 -0.192772 200 -6.44552 24.6114 -0.192647 177 -6.36168 24.6064 -0.192239 193 -6.24517 24.6341 -0.19221 210 -6.16243 24.6323 -0.191865 220 -5.07064 24.8657 -0.191662 118 -6.0788 24.6263 -0.191457 234 -5.95848 24.6372 -0.191176 230 -5.87828 24.6441 -0.190988 226 -5.7981 24.6508 -0.1908 223 -5.71792 24.6572 -0.190613 213 -5.59813 24.6682 -0.190363 213 -5.51757 24.672 -0.190144 216 -5.43661 24.6736 -0.189893 208 -5.31986 24.697 -0.189864 193 -5.24101 24.7077 -0.189771 177 -5.16215 24.7182 -0.189677 135 +unknow 0.971588 1 0 4075 -4.37612 0.760004 -1.52562 87 -4.38808 0.66301 -1.52421 91 -4.66343 -0.68684 -1.5236 88 -4.3576 0.820364 -1.52279 82 -4.61962 0.918166 -1.52224 93 -4.33378 0.929209 -1.52208 78 -4.63684 0.816025 -1.52157 97 -4.39765 0.537742 -1.52137 78 -4.36744 0.744301 -1.52137 124 -4.42853 -0.00375953 -1.52067 89 -4.35715 0.791932 -1.52066 114 -4.34552 0.853449 -1.52066 103 -4.34282 0.867097 -1.52066 111 -4.34008 0.880736 -1.52066 114 -4.62658 0.851715 -1.52023 99 -4.4246 0.135278 -1.51996 86 -4.42055 0.23254 -1.51996 91 -4.39048 0.564863 -1.51995 107 -4.359 0.771055 -1.51995 114 -4.65769 0.6472 -1.51956 97 -4.57612 1.08265 -1.51956 99 -4.41496 0.294872 -1.51925 82 -4.41251 0.329538 -1.51925 87 -4.39924 0.474885 -1.51925 91 -4.38406 0.599063 -1.51924 89 -4.37922 0.633477 -1.51924 89 -4.35097 0.804915 -1.51924 118 -4.32937 0.914 -1.51924 118 -4.69038 0.309122 -1.51889 108 -4.67616 0.478338 -1.51889 105 -4.64843 0.698083 -1.51889 122 -4.61744 0.880041 -1.51889 93 -4.58913 1.01744 -1.51889 104 -4.58591 1.03185 -1.51889 107 -4.48863 1.39552 -1.51889 117 -4.4121 -0.309224 -1.51854 90 -4.41524 -0.260692 -1.51854 89 -4.42243 -0.066312 -1.51854 94 -4.42276 -0.0385236 -1.51854 89 -4.42162 0.107362 -1.51854 93 -4.41819 0.204565 -1.51854 82 -4.40555 0.391706 -1.51854 111 -4.66773 -0.538377 -1.51822 94 -4.64095 0.734265 -1.51822 95 -4.58081 1.04582 -1.51822 101 -4.5304 1.24622 -1.51821 98 -4.52047 1.28176 -1.51821 115 -4.5061 1.33139 -1.51821 112 -4.49335 1.3738 -1.51821 111 -4.41528 -0.225923 -1.51783 93 -4.41661 -0.198177 -1.51783 90 -4.41956 -0.114896 -1.51783 89 -4.42099 0.0239814 -1.51783 90 -4.42046 0.0725903 -1.51783 91 -4.41299 0.26688 -1.51783 86 -4.40047 0.426103 -1.51783 85 -4.39771 0.453744 -1.51783 118 -4.38221 0.584772 -1.51783 129 -4.37845 0.612294 -1.51783 125 -4.37351 0.646663 -1.51783 125 -4.36613 0.694712 -1.51783 100 -4.36393 0.708425 -1.51783 107 -4.34085 0.838332 -1.51783 111 -4.32856 0.899613 -1.51783 107 -4.22399 0.834151 -1.51778 73 -4.685 -0.332503 -1.51755 115 -4.68295 0.360366 -1.51755 104 -4.68179 0.375076 -1.51755 103 -4.58862 1.00219 -1.51754 107 -4.40237 -0.385105 -1.51712 113 -4.40581 -0.343597 -1.51712 86 -4.4188 0.0586678 -1.51712 97 -4.41233 0.245965 -1.51712 124 -4.40793 0.31524 -1.51712 117 -4.40419 0.363688 -1.51712 85 -4.40057 0.40518 -1.51712 122 -4.39215 0.488051 -1.51712 114 -4.3906 0.501847 -1.51712 113 -4.38819 0.522531 -1.51712 117 -4.36645 0.680693 -1.51712 107 -4.75618 -0.69407 -1.51691 118 -4.80629 0.050953 -1.51691 105 -4.65778 -0.589214 -1.51688 105 -4.66962 -0.486651 -1.51688 102 -4.68736 -0.266143 -1.51688 120 -4.6893 -0.229321 -1.51688 109 -4.69301 -0.133522 -1.51688 106 -4.68938 0.22773 -1.51688 105 -4.68324 0.330793 -1.51688 106 -4.67683 0.411658 -1.51688 102 -4.66332 0.54371 -1.51688 96 -4.6589 0.580319 -1.51687 101 -4.56537 1.09523 -1.51687 129 -4.5128 1.2949 -1.51687 107 -4.49405 1.35856 -1.51687 108 -4.41523 -0.135629 -1.51641 97 -4.41725 -0.0246305 -1.51641 131 -4.41566 0.121066 -1.51641 132 -4.41406 0.169609 -1.51641 91 -4.4135 0.183477 -1.51641 118 -4.4084 0.280482 -1.51641 118 -4.69068 -0.148217 -1.51621 115 -4.69292 -0.0302924 -1.51621 101 -4.68381 0.293871 -1.5162 109 -4.67014 0.46286 -1.5162 108 -4.63304 0.74791 -1.5162 122 -4.61813 0.835102 -1.5162 127 -4.59568 0.950892 -1.5162 98 -4.50691 1.30853 -1.5162 115 -4.39549 -0.419336 -1.51571 114 -4.41291 -0.149447 -1.51571 97 -4.41543 0.0100474 -1.5157 121 -4.40213 0.342617 -1.5157 96 -4.39931 0.377181 -1.5157 108 -4.39353 0.439334 -1.5157 111 -4.38111 0.549606 -1.5157 110 -4.35615 0.721183 -1.5157 113 -4.69079 1.03113 -1.51559 96 -4.64829 -0.632599 -1.51554 119 -4.67093 -0.434949 -1.51554 101 -4.67543 -0.383565 -1.51554 110 -4.68688 -0.199714 -1.51554 109 -4.68982 -0.111338 -1.51554 108 -4.69109 0.0212908 -1.51554 114 -4.69032 0.0876043 -1.51553 109 -4.68986 0.109706 -1.51553 108 -4.68784 0.175994 -1.51553 103 -4.67842 0.345205 -1.51553 109 -4.6629 0.513967 -1.51553 136 -4.65047 0.616375 -1.51553 96 -4.59827 0.928841 -1.51553 131 -4.58778 0.979345 -1.51553 104 -4.3902 -0.453663 -1.515 111 -4.39229 -0.432969 -1.515 107 -4.39797 -0.370834 -1.515 114 -4.39911 -0.357017 -1.515 128 -4.40372 -0.294792 -1.515 113 -4.40669 -0.246354 -1.515 128 -4.41242 -0.100884 -1.515 110 -4.41335 0.0446944 -1.515 118 -4.6023 1.36655 -1.51493 104 -4.64131 -0.668828 -1.51487 118 -4.64339 -0.654245 -1.51487 120 -4.65489 -0.566608 -1.51487 97 -4.68435 -0.21436 -1.51487 118 -4.68589 -0.177563 -1.51487 109 -4.6876 0.124378 -1.51486 114 -4.683 0.242139 -1.51486 102 -4.67247 0.396455 -1.51486 113 -4.6551 0.564967 -1.51486 128 -4.63943 0.681771 -1.51486 101 -4.62332 0.783624 -1.51486 120 -4.60909 0.863388 -1.51486 131 -4.55468 1.11535 -1.51486 96 -4.54214 1.16536 -1.51486 104 -4.53846 1.17963 -1.51486 97 -4.53096 1.20812 -1.51486 98 -4.5174 1.25787 -1.51486 139 -4.38689 -0.467266 -1.51429 111 -4.39305 -0.405204 -1.51429 103 -4.41139 -0.0523511 -1.51429 118 -4.41072 0.0931686 -1.51429 132 -4.40896 0.155511 -1.51429 117 -4.79832 0.0810642 -1.51428 99 -4.78662 0.344609 -1.51428 140 -4.75852 0.622064 -1.51427 125 -4.73043 0.808403 -1.51427 118 -4.64843 -0.602917 -1.5142 129 -4.65897 -0.515195 -1.5142 129 -4.68638 -0.096547 -1.51419 108 -4.68666 -0.0818236 -1.51419 104 -4.6846 0.161115 -1.51419 121 -4.67907 0.278788 -1.51419 146 -4.66801 0.425624 -1.51419 96 -4.66075 0.498892 -1.51419 100 -4.64959 0.593955 -1.51419 131 -4.63969 0.666915 -1.51419 122 -4.6251 0.761512 -1.51419 98 -4.56484 1.06477 -1.51419 137 -4.54933 1.12919 -1.51419 130 -4.54576 1.14348 -1.51419 105 -4.4338 0.918981 -1.51418 150 -4.7511 -0.662817 -1.51363 121 -4.77308 0.479613 -1.51362 98 -4.74738 0.689011 -1.51362 121 -4.61341 1.31485 -1.51361 104 -4.40132 -0.273827 -1.51358 118 -4.40475 -0.211579 -1.51358 125 -4.40681 -0.163134 -1.51358 118 -4.40446 0.21772 -1.51358 124 -4.65869 -0.500364 -1.51352 106 -4.66391 -0.449111 -1.51352 137 -4.67572 -0.302393 -1.51352 112 -4.68527 -0.0450051 -1.51352 109 -4.68513 0.058032 -1.51352 109 -4.67845 0.256622 -1.51352 101 -4.65565 0.527944 -1.51352 107 -4.64291 0.63019 -1.51352 135 -4.63133 0.710316 -1.51352 105 -4.61712 0.797483 -1.51352 129 -4.48928 1.34169 -1.51351 113 -4.47252 0.694772 -1.51349 151 -4.45616 0.79295 -1.51349 157 -4.75623 -0.610286 -1.51297 120 -4.79376 0.118674 -1.51296 129 -4.79099 0.201483 -1.51296 101 -4.78174 0.359383 -1.51296 110 -4.7329 0.77064 -1.51296 120 -4.71204 0.889334 -1.51296 123 -4.67684 1.05895 -1.51296 98 -4.65243 1.16154 -1.51296 108 -4.64875 1.17615 -1.51296 125 -4.58819 1.39383 -1.51296 107 -4.39618 -0.322079 -1.51287 118 -4.40413 -0.183833 -1.51287 114 -4.64278 -0.617042 -1.51285 120 -4.66669 -0.397653 -1.51285 112 -4.67078 -0.346317 -1.51285 137 -4.67286 -0.316962 -1.51285 124 -4.67688 -0.250873 -1.51285 108 -4.68078 -0.162676 -1.51285 104 -4.68322 -0.0597107 -1.51285 107 -4.6836 0.00650081 -1.51285 113 -4.58346 0.963336 -1.51284 126 -4.52927 1.19241 -1.51284 136 -4.51977 1.22795 -1.51284 135 -4.4762 -0.657788 -1.51281 157 -4.5211 -0.169725 -1.51281 173 -4.48939 0.560778 -1.5128 159 -4.4518 0.806623 -1.5128 155 -4.43298 0.904319 -1.5128 168 -4.74526 -0.677186 -1.51231 120 -4.76251 -0.542765 -1.51231 121 -4.78793 -0.227614 -1.51231 100 -4.76376 0.531667 -1.5123 115 -4.69564 0.962868 -1.5123 117 -4.68635 1.00708 -1.5123 133 -4.64916 -0.551135 -1.51218 129 -4.67333 -0.28015 -1.51218 113 -4.68158 0.0359027 -1.51218 110 -4.67785 0.190285 -1.51218 101 -4.40524 -0.0869194 -1.51216 122 -4.4936 -0.50958 -1.51212 150 -4.50292 0.419323 -1.51211 170 -4.46435 0.722282 -1.51211 163 -4.44739 0.820274 -1.51211 149 -4.44479 0.834242 -1.51211 158 -4.42538 0.931778 -1.51211 160 -4.74856 -0.639634 -1.51165 124 -4.75891 -0.557493 -1.51165 127 -4.78531 -0.242548 -1.51165 113 -4.79145 -0.00180938 -1.51165 99 -4.74703 0.650965 -1.51164 116 -4.66124 1.10946 -1.51164 122 -4.65685 -0.463231 -1.51151 101 -4.66101 -0.419322 -1.51151 125 -4.67983 -0.00822765 -1.51151 142 -4.67778 0.138772 -1.51151 105 -4.67535 0.204887 -1.51151 131 -4.65845 0.446854 -1.5115 131 -4.4672 -0.692327 -1.51143 144 -4.47041 -0.671267 -1.51143 141 -4.47454 -0.643168 -1.51142 160 -4.49332 -0.495243 -1.51142 151 -4.49485 -0.481125 -1.51142 152 -4.47924 0.609621 -1.51142 167 -4.47017 0.672882 -1.51142 174 -4.45669 0.757017 -1.51142 168 -4.43351 0.882707 -1.51141 160 -4.74868 -0.624457 -1.511 119 -4.76953 -0.437544 -1.51099 96 -4.78836 -0.107116 -1.51099 104 -4.7894 -0.0394138 -1.51099 102 -4.75202 0.598505 -1.51099 120 -4.72362 0.792027 -1.51099 111 -4.70923 0.873523 -1.51099 121 -4.67461 1.04305 -1.51099 132 -4.62423 1.24758 -1.51099 137 -4.47948 -0.593672 -1.51073 158 -4.48132 -0.579596 -1.51073 158 -4.48401 -0.558473 -1.51073 139 -4.48111 0.581235 -1.51072 156 -4.47245 0.644525 -1.51072 159 -4.76481 -0.467308 -1.51034 121 -4.77336 -0.369918 -1.51034 130 -4.78717 -0.0694683 -1.51033 102 -4.78461 0.171147 -1.51033 101 -4.76866 0.426312 -1.51033 124 -4.75644 0.546014 -1.51033 122 -4.7453 0.635568 -1.51033 120 -4.73584 0.702587 -1.51033 118 -4.70037 0.910134 -1.51033 121 -4.66443 1.07932 -1.51033 118 -4.64871 1.14515 -1.51033 132 -4.60841 1.29784 -1.51033 134 -4.66158 -0.367772 -1.51017 101 -4.6755 0.072551 -1.51016 102 -4.58924 0.896958 -1.51016 123 -4.47574 -0.607478 -1.51004 150 -4.49334 -0.459536 -1.51004 158 -4.51554 -0.105577 -1.51004 172 -4.51205 0.206517 -1.51003 163 -4.50781 0.284445 -1.51003 153 -4.48368 0.545808 -1.51003 166 -4.47741 0.595073 -1.51003 146 -4.47259 0.630221 -1.51003 156 -4.45534 0.742417 -1.51003 149 -4.43257 0.868075 -1.51003 133 -4.74969 -0.586658 -1.50968 123 -4.75151 -0.571734 -1.50968 121 -4.75751 -0.519454 -1.50968 125 -4.75912 -0.504506 -1.50968 125 -4.76936 0.396196 -1.50967 125 -4.75789 0.515924 -1.50967 123 -4.75013 0.583134 -1.50967 124 -4.75193 0.568208 -1.50967 123 -4.73174 0.717188 -1.50967 120 -4.72596 0.754329 -1.50967 121 -4.72831 0.739478 -1.50967 124 -4.71222 0.83587 -1.50967 119 -4.69271 0.939287 -1.50967 118 -4.65917 1.09354 -1.50967 121 -4.61265 1.27562 -1.50967 130 -4.47195 -0.621267 -1.50935 148 -4.50691 -0.268488 -1.50934 177 -4.50888 -0.233084 -1.50934 180 -4.44874 0.770087 -1.50934 167 -4.7625 -0.451959 -1.50902 137 -4.77481 -0.294644 -1.50902 110 -4.77657 -0.264637 -1.50902 114 -4.77919 -0.212101 -1.50902 133 -4.78124 -0.15954 -1.50902 117 -4.78301 -0.091934 -1.50902 135 -4.77794 0.2386 -1.50902 128 -4.77503 0.291121 -1.50902 126 -4.77311 0.321117 -1.50902 124 -4.7614 0.463406 -1.50902 133 -4.69378 0.924185 -1.50901 120 -4.68333 0.975739 -1.50901 120 -4.62457 1.22435 -1.50901 121 -4.59653 1.32575 -1.50901 128 -4.48015 -0.543673 -1.50865 158 -4.49565 -0.395618 -1.50865 174 -4.49804 -0.367364 -1.50865 173 -4.51266 0.0575683 -1.50865 170 -4.50923 0.185121 -1.50865 171 -4.49791 0.369074 -1.50865 170 -4.49224 0.432622 -1.50865 164 -4.49086 0.446732 -1.50865 164 -4.48568 0.496084 -1.50865 159 -4.48164 0.531298 -1.50865 168 -4.77047 -0.331994 -1.50836 106 -4.77678 0.22351 -1.50836 125 -4.77403 0.276019 -1.50836 107 -4.7674 0.373441 -1.50836 125 -4.76095 0.448279 -1.50836 129 -4.75651 0.493129 -1.50836 120 -4.63034 1.19481 -1.50836 127 -4.61299 1.26015 -1.50836 104 -5.90056 1.28679 -1.50801 34 -4.47998 -0.529364 -1.50796 155 -4.49054 -0.430724 -1.50796 168 -4.49786 -0.346008 -1.50796 158 -4.50139 -0.296533 -1.50796 163 -4.50956 -0.119581 -1.50796 157 -4.51095 -0.041647 -1.50796 160 -4.50987 0.107149 -1.50796 167 -4.50576 0.220448 -1.50796 172 -4.50306 0.269977 -1.50796 173 -4.5008 0.305335 -1.50795 154 -4.49879 0.333609 -1.50795 165 -4.49363 0.397173 -1.50795 183 -4.48684 0.467706 -1.50795 161 -4.48534 0.4818 -1.50795 181 -4.48223 0.509973 -1.50795 154 -4.45547 0.706553 -1.50795 154 -4.42975 0.853113 -1.50795 132 -4.75505 -0.488943 -1.50771 125 -4.76752 -0.346832 -1.50771 133 -4.78006 -0.0242678 -1.5077 131 -4.78004 0.0282909 -1.5077 136 -4.77967 0.0658318 -1.5077 131 -4.77826 0.133394 -1.5077 130 -4.7734 0.253429 -1.5077 138 -4.73373 0.664361 -1.5077 125 -4.70924 0.820121 -1.5077 114 -4.67655 0.989684 -1.5077 115 -4.57805 1.37514 -1.5077 136 -4.49 -0.416431 -1.50727 161 -4.49807 -0.317599 -1.50727 172 -4.50463 -0.204462 -1.50727 181 -4.50764 0.121276 -1.50726 172 -4.50201 0.255733 -1.50726 152 -4.49298 0.382905 -1.50726 173 -4.89249 0.780524 -1.50715 90 -4.76026 -0.414019 -1.50705 122 -4.77605 -0.144316 -1.50705 127 -4.77792 -0.0542697 -1.50705 136 -4.77593 0.148357 -1.50705 138 -4.64309 1.12836 -1.50704 125 -4.6229 1.20841 -1.50704 116 -4.49518 -0.331579 -1.50657 192 -4.50209 -0.21851 -1.50657 179 -4.50367 -0.183145 -1.50657 178 -4.50685 -0.0699096 -1.50657 164 -4.50705 -0.0557515 -1.50657 175 -4.50735 -0.020351 -1.50657 161 -4.50739 0.00797008 -1.50657 175 -4.50734 0.0221295 -1.50657 164 -4.50644 0.0929247 -1.50657 166 -4.50514 0.142469 -1.50657 168 -4.50467 0.156622 -1.50657 156 -4.45926 0.656996 -1.50657 154 -4.84843 1.00973 -1.50651 92 -4.75965 -0.398895 -1.50639 116 -4.77479 -0.12175 -1.50639 133 -4.77632 0.0132849 -1.50639 130 -4.75868 0.410416 -1.50639 127 -4.69893 0.856424 -1.50639 119 -4.49837 -0.253746 -1.50588 176 -4.5046 -0.0910978 -1.50588 181 -4.50551 -0.00617814 -1.50588 180 -4.50531 0.043363 -1.50588 170 -4.50495 0.0716689 -1.50588 179 -4.50228 0.170712 -1.50588 173 -4.7704 -0.196646 -1.50573 101 -4.77333 0.103278 -1.50573 130 -4.89515 0.725818 -1.50524 94 -4.83665 1.04695 -1.50524 97 -4.48752 -0.380647 -1.50519 172 -4.49481 -0.281877 -1.50519 173 -4.50098 -0.154694 -1.50519 162 -4.49755 0.234255 -1.50519 175 -4.49233 0.318985 -1.50518 156 -4.49024 0.347204 -1.50518 166 -4.76939 -0.174084 -1.50508 112 -4.76895 0.185671 -1.50507 131 -4.47983 -0.443851 -1.5045 155 -4.49979 -0.133414 -1.5045 177 -4.76018 -0.316193 -1.50442 142 -4.76252 -0.278797 -1.50442 139 -4.57963 1.33654 -1.50441 137 -4.9056 -0.622001 -1.50398 90 -4.93874 0.246189 -1.50397 94 -4.92794 0.40894 -1.50397 97 -4.92014 0.494021 -1.50397 90 -4.87427 0.832626 -1.50397 92 -4.75901 0.305235 -1.50376 125 -4.89658 -0.675653 -1.50334 87 -4.90564 -0.606364 -1.50334 79 -4.87499 0.816985 -1.50333 95 -4.80874 1.14415 -1.50333 90 -4.75147 -0.38313 -1.50311 125 -4.89146 -0.698462 -1.50271 76 -4.93472 -0.250541 -1.5027 100 -4.93549 -0.235035 -1.5027 100 -4.93654 -0.211776 -1.5027 100 -4.91064 0.54765 -1.5027 82 -4.8679 0.847265 -1.5027 90 -4.85399 0.923622 -1.5027 87 -4.81746 1.09835 -1.5027 92 -4.88231 0.747394 -1.50206 92 -4.90807 -0.536367 -1.50143 100 -4.93579 0.121775 -1.50143 92 -4.91907 0.423727 -1.50143 95 -4.87193 0.800715 -1.50142 92 -4.77692 1.24815 -1.50142 98 -4.92235 -0.358607 -1.5008 88 -4.92345 -0.343142 -1.5008 100 -4.93378 -0.126335 -1.50079 100 -4.85826 0.869163 -1.50079 92 -4.8527 0.899672 -1.50079 89 -4.83488 0.990978 -1.50079 96 -4.80845 1.11216 -1.50079 90 -4.80493 1.12726 -1.50079 90 -4.89132 -0.643687 -1.50016 76 -4.90083 -0.566778 -1.50016 79 -4.90259 -0.551379 -1.50016 87 -4.93074 -0.165027 -1.50016 101 -4.93272 -0.0875595 -1.50016 92 -4.93347 -0.0178181 -1.50016 87 -4.91182 0.461973 -1.50015 95 -4.90048 0.56987 -1.50015 95 -4.89193 0.639088 -1.50015 78 -4.82671 1.02093 -1.50015 92 -4.76332 1.28462 -1.50015 98 -4.913 -0.427847 -1.49952 92 -4.92899 0.160321 -1.49952 94 -4.91597 0.392329 -1.49952 98 -4.89678 0.585026 -1.49952 92 -4.89492 0.600406 -1.49952 87 -4.85178 0.883721 -1.49952 90 -4.78484 1.19414 -1.49951 100 -4.73859 1.36619 -1.49951 102 -5.00411 0.893105 -1.49926 102 -4.9984 0.924529 -1.49926 106 -4.89434 -0.589432 -1.49889 99 -4.91432 -0.389109 -1.49889 103 -4.92767 -0.141702 -1.49889 97 -4.92957 0.0363803 -1.49889 98 -4.926 0.191203 -1.49888 98 -4.91588 0.369007 -1.49888 92 -4.83393 0.967037 -1.49888 81 -4.81149 1.0731 -1.49888 90 -4.79041 1.16359 -1.49888 92 -4.77348 1.2312 -1.49888 97 -4.77733 1.2162 -1.49888 94 -4.7556 1.29856 -1.49888 95 -5.03545 -0.680871 -1.49865 128 -4.90655 1.32107 -1.49864 117 -4.90237 1.33648 -1.49864 113 -4.92392 -0.195809 -1.49825 100 -4.92657 -0.110705 -1.49825 95 -4.92698 0.0905357 -1.49825 80 -4.91962 0.283898 -1.49825 96 -4.86871 0.760913 -1.49824 94 -4.81299 1.05756 -1.49824 92 -4.76184 1.26815 -1.49824 100 -4.73922 1.35024 -1.49824 95 -5.03141 -0.696415 -1.49803 96 -5.04732 -0.569758 -1.49803 125 -5.04909 -0.553898 -1.49803 100 -5.06004 -0.442738 -1.49803 100 -5.05174 0.529133 -1.49802 99 -5.04185 0.616337 -1.49802 101 -4.99753 0.908159 -1.49802 131 -4.89841 -0.519803 -1.49762 79 -4.9008 -0.496716 -1.49762 90 -4.90383 -0.465913 -1.49762 90 -4.91555 -0.319372 -1.49762 102 -4.92559 -0.0565174 -1.49761 95 -4.92564 0.0518059 -1.49761 79 -4.92278 0.175572 -1.49761 94 -4.92056 0.229689 -1.49761 94 -4.91682 0.299225 -1.49761 100 -4.91585 0.314672 -1.49761 90 -4.91431 0.337832 -1.49761 98 -4.9057 0.445814 -1.49761 92 -4.8771 0.691732 -1.49761 102 -4.83322 0.951095 -1.49761 77 -5.05892 0.433669 -1.4974 100 -4.97449 1.01746 -1.4974 106 -4.95617 1.10326 -1.4974 98 -4.94735 1.14215 -1.4974 95 -4.90408 -0.442639 -1.49698 92 -4.90676 -0.411817 -1.49698 84 -4.92349 -0.0719727 -1.49698 95 -4.92384 -0.0410359 -1.49698 94 -4.92288 0.105911 -1.49698 88 -4.88051 0.653147 -1.49697 81 -4.87843 0.668476 -1.49697 87 -4.78122 1.17725 -1.49697 92 -4.72045 1.40117 -1.49697 102 -5.07544 -0.0363414 -1.49679 102 -5.07554 0.019466 -1.49679 107 -5.05836 0.417627 -1.49678 104 -5.01502 0.781718 -1.49678 103 -4.91274 -0.303715 -1.49634 98 -4.91367 -0.288279 -1.49634 90 -4.91497 -0.26512 -1.49634 98 -4.91882 -0.180161 -1.49634 103 -4.91746 0.214046 -1.49634 98 -4.89514 0.514703 -1.49634 87 -5.03509 -0.624488 -1.49617 126 -5.03703 -0.608668 -1.49617 89 -5.04761 -0.513619 -1.49617 103 -5.06749 0.250487 -1.49617 105 -4.98464 0.946346 -1.49616 104 -4.96754 1.03233 -1.49616 96 -4.89668 -0.48079 -1.49571 94 -4.74238 1.31092 -1.4957 98 -4.7212 1.38524 -1.4957 98 -5.04408 -0.529265 -1.49555 124 -5.05114 0.457017 -1.49555 131 -5.04249 0.544223 -1.49555 132 -5.0293 0.654971 -1.49555 103 -5.01723 0.741769 -1.49555 98 -4.95403 1.08649 -1.49554 132 -5.39893 1.16649 -1.49536 100 -4.90417 -0.372866 -1.49507 78 -4.89526 0.475855 -1.49507 90 -4.82875 0.934424 -1.49506 104 -4.73432 1.33273 -1.49506 97 -5.03607 -0.584466 -1.49494 121 -5.06771 -0.147744 -1.49493 110 -5.06903 -0.0920128 -1.49493 108 -5.06942 0.0672544 -1.49493 107 -5.06874 0.107066 -1.49493 102 -5.03798 0.567776 -1.49493 107 -5.03617 0.5836 -1.49493 97 -5.01766 0.725742 -1.49493 134 -4.99784 0.851605 -1.49493 97 -4.9589 1.05495 -1.49493 136 -4.95556 1.07053 -1.49493 101 -4.94349 1.12495 -1.49492 141 -4.93082 1.17924 -1.49492 102 -4.92331 1.21019 -1.49492 105 -4.90971 1.26426 -1.49492 111 -4.90571 1.27967 -1.49492 106 -4.91641 0.0130447 -1.49443 85 -4.90914 0.267761 -1.49443 92 -4.90378 0.35254 -1.49443 100 -4.877 0.62147 -1.49443 104 -5.02541 -0.655345 -1.49432 96 -5.05004 -0.425822 -1.49432 130 -5.05442 -0.37027 -1.49432 106 -5.06213 -0.243134 -1.49431 98 -5.0645 -0.18746 -1.49431 107 -5.06625 -0.131762 -1.49431 109 -5.05206 0.40117 -1.49431 107 -5.04589 0.47255 -1.49431 100 -5.03242 0.599203 -1.49431 124 -5.02756 0.638709 -1.49431 129 -5.00502 0.796313 -1.49431 95 -4.99189 0.87483 -1.49431 125 -4.88317 1.35607 -1.49431 114 -5.48289 -0.636163 -1.49422 88 -5.04391 -0.473211 -1.4937 113 -5.0501 -0.40186 -1.4937 109 -5.05629 -0.314544 -1.4937 109 -5.06132 -0.219185 -1.4937 137 -5.06602 -0.0203104 -1.49369 136 -5.06525 0.0910922 -1.49369 107 -5.0514 0.385162 -1.49369 104 -5.04249 0.488225 -1.49369 130 -5.01614 0.70946 -1.49369 100 -4.99673 0.835293 -1.49369 104 -4.97416 0.960597 -1.49369 93 -4.96646 0.999633 -1.49369 132 -5.36639 1.28356 -1.49364 103 -4.91074 0.136464 -1.49316 92 -5.1347 -0.684157 -1.49313 81 -5.02368 -0.639055 -1.49308 121 -5.47498 -0.670151 -1.49308 92 -5.48201 -0.609912 -1.49308 122 -5.03974 -0.496777 -1.49308 92 -5.04348 -0.457181 -1.49308 123 -5.04944 -0.385837 -1.49308 106 -5.05232 -0.346168 -1.49308 103 -5.05338 -0.330293 -1.49308 111 -5.06359 -0.0759737 -1.49308 105 -5.05126 0.361226 -1.49307 105 -5.03824 0.511799 -1.49307 107 -5.38589 1.19023 -1.49307 92 -4.92154 1.19341 -1.49307 140 -4.89411 1.30134 -1.49307 109 -4.87089 1.3857 -1.49307 113 -4.86671 -0.65613 -1.49253 99 -5.37062 1.24893 -1.4925 94 -5.05481 -0.274597 -1.49246 140 -5.05911 0.178481 -1.49246 100 -5.05822 0.20232 -1.49246 140 -5.01458 0.693198 -1.49245 134 -5.00428 0.764018 -1.49245 133 -4.96738 0.975505 -1.49245 121 -4.92891 1.15429 -1.49245 134 -4.91017 1.23157 -1.49245 102 -4.87339 1.36989 -1.49245 114 -5.28316 -0.696318 -1.49241 105 -5.20847 1.12627 -1.4924 105 -5.3547 1.30744 -1.49193 110 -5.34638 1.34106 -1.49193 112 -5.33131 1.39977 -1.49192 111 -4.90885 -0.00243718 -1.49189 97 -4.88031 0.528579 -1.49188 99 -4.85803 0.704513 -1.49188 71 -5.05375 -0.258609 -1.49184 109 -5.05772 -0.163308 -1.49184 108 -5.05823 0.146645 -1.49184 102 -5.04964 0.329255 -1.49184 104 -5.0159 0.669318 -1.49183 100 -4.99369 0.818697 -1.49183 127 -5.47134 -0.652294 -1.49136 119 -5.47818 -0.592095 -1.49136 91 -5.37271 1.22274 -1.49135 103 -5.33383 1.38252 -1.49135 110 -5.28259 -0.670913 -1.49123 92 -5.04966 -0.298169 -1.49122 101 -5.2724 0.746794 -1.49122 110 -5.26761 0.779907 -1.49122 106 -5.05438 -0.20294 -1.49122 106 -5.05305 0.233941 -1.49122 135 -5.05017 0.289486 -1.49122 137 -4.90258 1.24607 -1.49121 139 -5.46415 -0.695013 -1.49079 118 -5.12926 -0.667076 -1.4907 76 -5.21154 1.08419 -1.49063 110 -4.9046 0.0668864 -1.49062 103 -5.33658 1.35641 -1.49021 114 -5.12308 -0.699043 -1.4901 69 -5.29139 -0.562486 -1.49005 105 -5.28175 0.646839 -1.49004 120 -5.25754 0.820683 -1.49004 113 -5.20624 1.10017 -1.49004 107 -5.05333 -0.115474 -1.48998 113 -5.0543 -0.0599038 -1.48998 103 -5.05465 -0.00432747 -1.48998 106 -5.05453 0.0353725 -1.48998 118 -5.05439 0.0512506 -1.48998 105 -5.05316 0.122698 -1.48998 136 -5.05205 0.162383 -1.48998 130 -5.04995 0.217921 -1.48998 100 -5.04543 0.30514 -1.48998 104 -5.04288 0.344757 -1.48998 104 -5.35735 1.26355 -1.48964 141 -5.34313 1.32238 -1.48964 102 -5.06507 1.02956 -1.48948 80 -5.2582 0.803882 -1.48945 113 -5.24905 0.861651 -1.48945 102 -5.13607 1.3841 -1.48945 124 -5.36905 1.20414 -1.48907 134 -5.1306 -0.609992 -1.48888 77 -5.1634 1.27038 -1.48886 124 -5.04345 0.273247 -1.48874 102 -5.2752 -0.653095 -1.48828 143 -5.28016 -0.611644 -1.48828 109 -5.27295 0.671026 -1.48827 108 -5.23976 0.893989 -1.48827 103 -5.20742 1.06631 -1.48827 102 -5.18272 1.18056 -1.48827 112 -5.1752 1.2131 -1.48827 102 -5.06613 1.00492 -1.48827 78 -5.04281 1.11608 -1.48827 74 -5.28201 -0.578239 -1.48769 101 -5.26673 0.7039 -1.48768 106 -5.25868 0.761767 -1.48768 108 -5.18996 1.13942 -1.48768 103 -5.16756 1.23704 -1.48768 109 -5.15567 1.28569 -1.48768 119 -5.14123 1.3423 -1.48768 118 -5.17526 1.196 -1.48709 113 -5.16179 1.25283 -1.48709 116 -5.1477 1.30951 -1.48709 125 -5.14357 1.32567 -1.48709 119 -5.12431 1.39825 -1.48709 129 -5.64303 -0.659129 -1.48688 102 -5.92778 -0.638809 -1.48683 77 -5.27154 -0.635805 -1.48651 106 -5.27637 -0.594383 -1.48651 102 -5.24361 0.835448 -1.4865 102 -5.21001 1.0243 -1.4865 102 -5.18262 1.15491 -1.4865 111 -5.14169 -0.423687 -1.48646 80 -5.05249 1.04349 -1.48645 79 -5.63687 -0.694329 -1.48633 105 -5.92382 -0.657223 -1.4863 77 -5.27046 0.628724 -1.48591 122 -5.13007 -0.528401 -1.48585 76 -5.14686 -0.326588 -1.48585 86 -5.15695 -0.0513759 -1.48585 81 -5.1389 0.434163 -1.48585 78 -5.10268 0.747966 -1.48584 81 -5.06179 0.987504 -1.48584 80 -5.53096 1.2818 -1.48576 117 -5.26134 0.686399 -1.48532 104 -5.23311 0.875992 -1.48532 102 -5.20137 1.04811 -1.48532 100 -5.13139 -0.495983 -1.48525 69 -5.13653 -0.439533 -1.48525 83 -5.14596 -0.310313 -1.48524 81 -5.14823 -0.269888 -1.48524 85 -5.15213 -0.180896 -1.48524 85 -5.91789 -0.675411 -1.48524 74 -5.04041 1.08233 -1.48524 76 -5.02096 1.16925 -1.48524 86 -5.01726 1.18502 -1.48524 81 -4.99403 1.27938 -1.48524 88 -5.6423 -0.61414 -1.48522 106 -5.50613 1.37671 -1.48521 130 -5.25502 0.719194 -1.48473 102 -5.1256 1.3641 -1.48473 124 -5.53121 1.26358 -1.48465 114 -5.12197 -0.568275 -1.48464 67 -5.12373 -0.55218 -1.48464 77 -5.14899 -0.213195 -1.48464 89 -5.15303 0.0619699 -1.48464 89 -5.08392 0.843367 -1.48463 73 -5.07149 0.915152 -1.48463 70 -5.04359 1.05816 -1.48463 79 -5.02813 1.12935 -1.48463 77 -5.00977 1.20819 -1.48463 79 -4.98815 1.29457 -1.48463 85 -5.45713 -0.572591 -1.4845 121 -5.63139 -0.675666 -1.48411 134 -5.12912 -0.479525 -1.48403 85 -5.14773 -0.196954 -1.48403 83 -5.14958 -0.140342 -1.48403 86 -5.10708 0.674978 -1.48403 71 -5.07665 0.874959 -1.48403 73 -5.0041 1.22346 -1.48402 79 -5.36511 1.14137 -1.48392 138 -5.9089 -0.702632 -1.48365 72 -5.54101 1.20188 -1.48354 152 -5.53335 1.23668 -1.48354 118 -5.12943 -0.45519 -1.48343 80 -5.14809 -0.124127 -1.48343 84 -5.14914 -0.0675154 -1.48342 79 -5.14938 0.0457276 -1.48342 84 -5.06485 0.930373 -1.48342 75 -4.9592 1.38731 -1.48342 89 -5.80808 1.28535 -1.48311 87 -5.53533 1.21888 -1.48299 114 -5.20193 1.00581 -1.48296 128 -5.10973 -0.623893 -1.48282 65 -5.10116 0.690489 -1.48281 74 -5.09089 0.762533 -1.48281 79 -5.08724 0.786515 -1.48281 79 -5.07561 0.858352 -1.48281 79 -4.97231 1.3322 -1.48281 85 -4.97853 1.30875 -1.48281 89 -4.95298 1.40236 -1.48281 93 -5.6308 -0.630749 -1.48245 138 -5.50532 1.33986 -1.48243 126 -5.26102 0.610897 -1.48237 104 -5.13032 -0.398486 -1.48222 81 -5.13272 -0.366246 -1.48221 85 -5.14509 -0.0836478 -1.48221 86 -5.14518 0.0780044 -1.48221 86 -5.13901 0.263799 -1.48221 77 -5.13076 0.392859 -1.48221 79 -5.11322 0.577928 -1.48221 76 -5.05364 0.969385 -1.48221 71 -4.99469 1.23777 -1.48221 82 -5.14149 -0.156326 -1.48161 85 -5.14274 -0.107863 -1.48161 88 -5.14251 0.118358 -1.48161 84 -5.11898 0.505388 -1.4816 79 -5.11486 0.545577 -1.4816 83 -5.08098 0.801879 -1.4816 71 -5.01348 1.15086 -1.4816 79 -4.98696 1.26082 -1.4816 81 -5.51193 1.29572 -1.48133 122 -5.50783 1.31303 -1.48133 121 -5.49735 1.35624 -1.48133 118 -5.48653 1.39938 -1.48133 130 -5.10879 -0.583123 -1.481 81 -5.12774 -0.382104 -1.481 83 -5.1365 -0.236987 -1.481 82 -5.14195 -0.0109169 -1.481 85 -5.13601 0.24745 -1.481 79 -5.13199 0.320032 -1.481 82 -5.11865 0.489114 -1.481 77 -5.08993 0.729691 -1.481 71 -5.79461 1.30143 -1.48046 78 -5.78841 1.32872 -1.48046 93 -5.77995 1.36507 -1.48046 90 -5.12869 -0.341702 -1.4804 81 -5.13382 -0.253039 -1.4804 86 -5.14005 0.00522441 -1.48039 85 -5.132 0.287664 -1.48039 83 -5.02211 1.09483 -1.48039 80 -4.9565 1.36136 -1.48039 89 -4.96075 1.34578 -1.48039 85 -5.12978 -0.293251 -1.47979 88 -5.13714 0.102058 -1.47979 78 -5.13639 0.134334 -1.47979 78 -5.13365 0.214997 -1.47979 84 -5.13295 0.231123 -1.47979 87 -5.12917 0.303662 -1.47979 80 -5.10287 0.601085 -1.47978 85 -5.10096 0.617114 -1.47978 75 -5.19379 0.987375 -1.47942 113 -5.76971 1.39137 -1.4794 74 -5.09639 -0.638579 -1.47919 81 -5.13616 0.029406 -1.47918 87 -5.12362 0.359897 -1.47918 79 -5.11447 0.472476 -1.47918 79 -5.10896 0.528683 -1.47918 78 -5.10554 0.560772 -1.47918 77 -5.09711 0.632891 -1.47918 75 -5.10893 -0.510125 -1.47858 86 -5.04692 0.943403 -1.47857 83 -5.20489 0.905038 -1.47824 90 -5.06716 0.815962 -1.47797 79 -5.11676 0.375546 -1.47736 77 -5.12855 -0.027067 -1.47676 81 -5.12509 0.1904 -1.47676 72 -5.11176 0.415557 -1.47676 79 -5.08651 0.65589 -1.47675 82 -5.07899 0.711779 -1.47675 80 -5.77108 1.34378 -1.47675 71 -5.12428 0.158126 -1.47615 71 -5.10715 0.44749 -1.47615 81 -5.24293 0.583875 -1.47588 101 -5.1871 0.960858 -1.47588 106 -5.11332 0.342977 -1.47554 86 -5.04247 0.8934 -1.47433 82 -5.51463 1.16913 -1.47412 161 -5.17692 0.942226 -1.47174 113 -5.10852 0.173629 -1.4713 80 -5.24323 -0.341299 -1.46939 136 -5.17233 0.924651 -1.46938 101 -6.00458 -0.654792 -1.46869 98 -5.99674 -0.672982 -1.46713 99 -5.89562 1.27757 -1.4666 107 -5.98884 -0.691129 -1.46558 118 -5.86234 1.40601 -1.46557 123 -5.21053 0.56387 -1.46525 105 -5.87597 1.32175 -1.46401 117 -5.86325 1.37707 -1.46401 116 -6.16917 -0.674396 -1.46339 128 -6.39598 -0.701297 -1.46286 84 -6.16741 -0.654621 -1.46239 96 -5.86425 1.33852 -1.46194 106 -5.86001 1.35693 -1.46194 111 -5.87269 1.29201 -1.46142 149 -6.04344 1.36759 -1.46086 123 -6.03128 1.39472 -1.45935 119 -6.26591 1.3746 -1.45799 176 -6.25967 1.39386 -1.4575 147 -6.03449 1.3456 -1.45734 168 -6.60027 -0.698785 -1.44434 55 -5.14131 -0.317938 -1.43752 63 -5.10396 -0.517313 -1.43103 79 -5.10055 -0.355456 -1.42572 104 -5.07669 -0.482188 -1.42159 94 -5.06016 0.532283 -1.41804 100 -5.06185 -0.49676 -1.41746 86 -5.06559 -0.456989 -1.41746 100 -5.0651 -0.440896 -1.41687 101 -5.06646 -0.424983 -1.41687 108 -5.06702 -0.368952 -1.41568 95 -5.06079 -0.400461 -1.41451 106 -5.06202 -0.38456 -1.4145 99 -5.09695 1.06625 -1.401 94 -5.02042 -0.214929 -1.39857 87 -4.98271 0.500819 -1.39325 103 -5.07326 1.0196 -1.39128 79 -5.06465 1.04271 -1.39014 89 -4.96522 0.39698 -1.38499 68 -4.93669 0.480782 -1.3785 120 -4.93771 0.449591 -1.37791 107 -4.93347 0.410204 -1.37555 140 -5.0107 0.990321 -1.37127 131 -4.91692 0.424466 -1.37083 105 -4.90201 0.462054 -1.36728 126 -5.06595 -0.517341 -1.3667 77 -5.46243 -0.564697 -1.35754 46 -5.03589 -0.490472 -1.35698 75 -4.82137 0.348163 -1.33955 177 -4.80882 0.362508 -1.33601 166 -4.80974 -0.174543 -1.33306 166 -4.79329 -0.279535 -1.32952 74 -4.7576 0.328887 -1.31948 197 -4.76335 -0.187598 -1.31889 197 -4.75068 -0.254353 -1.31594 87 -4.82961 0.937799 -1.31523 119 -4.74477 0.29066 -1.31476 229 -4.74916 -0.157076 -1.31417 197 -4.74193 0.305454 -1.31417 212 -4.7434 -0.0822872 -1.31181 229 -4.7331 -0.223495 -1.31004 79 -4.73532 -0.104428 -1.30945 227 -4.72856 -0.238149 -1.30886 89 -4.72999 0.207903 -1.30886 231 -4.73075 -0.13405 -1.30827 212 -5.02917 -0.52857 -1.30671 103 -4.72644 -0.0670451 -1.3065 227 -4.72351 -0.118951 -1.30591 216 -4.70667 0.103404 -1.3006 236 -4.70124 0.0885414 -1.29883 237 -4.69845 0.184517 -1.29883 207 -4.69797 -0.0517231 -1.29765 239 -4.69823 -0.0148243 -1.29765 239 -4.69823 0.014696 -1.29765 239 -4.69304 0.221253 -1.29764 237 -4.69295 0.117929 -1.29646 155 -4.69242 -0.0295153 -1.29588 239 -4.83314 -0.45646 -1.29579 71 -4.69014 0.0662882 -1.29528 240 -4.68678 -5.11072e-07 -1.29411 240 -4.68373 0.169288 -1.2941 96 -4.68459 0.0515209 -1.29351 240 -4.68109 0.13241 -1.29292 114 -4.68041 0.154468 -1.29292 104 -4.679 0.0367913 -1.29174 241 -4.66742 0.271636 -1.29056 242 -4.74744 0.898175 -1.28892 91 -4.66368 0.234713 -1.28879 242 -4.63771 0.255461 -1.28112 255 -4.73064 0.841081 -1.28092 95 -4.71824 0.877128 -1.2792 79 -4.76772 -0.435536 -1.27578 84 -4.7144 0.822818 -1.2752 86 -4.70779 0.859819 -1.2752 99 -4.69997 0.804998 -1.27005 64 -4.74871 -0.411359 -1.26949 84 -4.74425 -0.395991 -1.26777 104 -4.73782 -0.380513 -1.26548 77 -4.73684 -0.343035 -1.26434 73 -4.73383 -0.35778 -1.26377 80 -4.6778 0.763275 -1.26147 65 -4.67829 0.748263 -1.2609 61 -4.67038 0.784655 -1.26033 67 -4.67455 0.710006 -1.25804 69 -4.67513 0.680049 -1.2569 127 -5.01146 1.06415 -1.25633 28 -4.66548 0.731106 -1.25633 59 -4.70921 -0.326323 -1.25576 72 -4.77641 1.00052 -1.2557 76 -4.66729 0.693857 -1.25518 63 -4.66691 0.656347 -1.25347 182 -4.70206 -0.288793 -1.2529 73 -4.66705 0.64141 -1.2529 174 -4.69873 -0.310831 -1.25233 67 -4.66524 0.626215 -1.25175 159 -4.69528 -0.273617 -1.25062 83 -4.66052 0.588302 -1.2489 128 -4.65769 0.610257 -1.24889 104 -4.74939 0.979464 -1.24683 76 -4.68389 -0.23613 -1.24661 86 -4.67507 -0.257819 -1.24433 86 -4.67503 -0.221015 -1.24375 96 -4.64333 0.571212 -1.24318 159 -4.81183 -0.481672 -1.24296 52 -4.74075 0.954488 -1.24295 95 -4.67187 -0.206178 -1.24261 89 -4.64578 0.534497 -1.2426 100 -4.74184 0.939228 -1.2424 81 -5.04566 -0.507596 -1.24203 27 -4.66675 -0.191297 -1.24089 92 -4.6356 0.555428 -1.24032 107 -4.66236 -0.154481 -1.23918 93 -4.65994 -0.169068 -1.23861 50 -4.63411 0.518333 -1.2386 81 -4.6596 -0.117783 -1.23803 65 -4.63381 0.503555 -1.23803 79 -4.63042 0.481088 -1.23632 76 -4.72498 0.905199 -1.23575 85 -4.72022 0.91968 -1.23519 75 -4.65067 -0.0883763 -1.23517 73 -4.65145 -0.0226211 -1.23517 65 -4.64367 -0.139365 -1.23346 57 -4.64561 -0.0372213 -1.23346 68 -4.6427 -0.102859 -1.23289 69 -4.6233 0.436282 -1.23288 68 -4.62191 0.450804 -1.23288 66 -4.61856 0.465119 -1.23231 73 -4.62149 0.414127 -1.23174 76 -4.63762 -0.0663421 -1.23117 80 -4.63807 0.0137953 -1.23117 73 -4.63589 -0.0517615 -1.2306 69 -4.76696 -0.446687 -1.2291 89 -4.63034 0.0282765 -1.22888 92 -4.61622 0.362483 -1.22888 96 -4.61446 0.384232 -1.22888 68 -4.61323 0.398727 -1.22888 69 -4.62632 0.0500327 -1.22774 92 -4.61458 0.333173 -1.22774 86 -4.91107 1.02616 -1.22719 27 -4.61514 0.296788 -1.22717 84 -4.69894 0.877444 -1.22688 73 -4.61414 0.28216 -1.22659 87 -4.61228 0.311146 -1.22659 74 -4.70246 0.847572 -1.22632 71 -4.61309 0.267541 -1.22602 94 -4.60778 0.347206 -1.22602 89 -4.75406 -0.460488 -1.22578 61 -4.61711 0.1297 -1.22545 93 -4.61594 0.165959 -1.22545 105 -4.90672 1.00914 -1.22507 27 -4.61442 0.0788388 -1.22431 92 -4.61284 0.144063 -1.22431 104 -4.61098 0.194774 -1.22431 85 -4.60856 0.24546 -1.22431 96 -4.61318 -0.000911307 -1.22374 66 -4.61081 0.0642665 -1.22317 102 -4.60774 0.180116 -1.22316 86 -4.60548 0.230768 -1.22316 90 -4.60825 0.100425 -1.22259 88 -4.60791 0.114902 -1.22259 88 -4.60236 0.216097 -1.22202 91 -4.68464 0.859649 -1.22189 90 -4.7609 0.018983 -1.22134 113 -4.74889 0.310309 -1.22078 104 -4.68812 0.80714 -1.22022 68 -4.74354 0.332435 -1.21967 85 -4.75 0.175749 -1.21912 96 -4.73768 0.384426 -1.21912 82 -4.73199 -0.428221 -1.21857 70 -4.74751 0.190604 -1.21856 107 -4.95889 -0.483593 -1.21766 26 -4.74272 0.212823 -1.21746 94 -4.7307 0.398857 -1.21745 97 -4.74286 0.0860668 -1.21635 88 -4.73818 0.227558 -1.21635 87 -4.73666 0.257324 -1.21635 95 -4.74049 0.108381 -1.21579 89 -4.73553 0.242354 -1.21579 102 -4.7377 0.041344 -1.21468 79 -4.73735 0.0711111 -1.21468 90 -4.73516 0.160389 -1.21468 97 -4.72522 0.346166 -1.21468 84 -4.71865 -0.404519 -1.21413 71 -4.73596 0.00414225 -1.21413 87 -4.73563 0.0562156 -1.21413 94 -4.71602 0.412617 -1.21357 104 -4.96699 0.000794856 -1.21342 26 -4.7301 0.137937 -1.21302 96 -4.71836 0.360602 -1.21302 84 -4.66094 0.817682 -1.21302 76 -4.88691 0.877447 -1.21288 26 -4.71224 -0.38902 -1.21192 63 -4.70498 0.448955 -1.21136 80 -4.66205 0.765182 -1.2108 67 -4.7225 -0.010632 -1.21025 102 -4.6565 0.786833 -1.21025 72 -4.85699 0.982732 -1.21023 26 -4.70955 0.293102 -1.20914 83 -4.69938 0.426127 -1.20914 86 -4.87581 0.851673 -1.20864 26 -4.71514 0.122762 -1.20859 81 -4.69398 0.462844 -1.20858 91 -4.65157 0.733564 -1.20637 63 -4.69408 -0.350309 -1.20582 71 -4.67911 0.476299 -1.2047 95 -4.91236 -0.463734 -1.20441 26 -4.6749 0.498151 -1.20415 91 -4.66091 0.615474 -1.20415 93 -4.65695 0.644747 -1.20415 89 -4.67141 0.512636 -1.20359 89 -4.66369 0.578623 -1.20359 89 -4.63975 0.746699 -1.20359 67 -4.68934 0.277176 -1.20304 80 -4.65005 0.666161 -1.20304 107 -4.67897 -0.371286 -1.20194 73 -4.65613 0.592575 -1.20193 89 -4.68231 -0.297614 -1.20138 69 -4.65785 0.563088 -1.20138 86 -4.90296 -0.439607 -1.20123 26 -4.67894 -0.319535 -1.20083 74 -4.84054 0.88459 -1.2007 44 -4.676 -0.334084 -1.20027 97 -4.65578 0.548025 -1.20027 82 -4.6564 0.525873 -1.19971 87 -4.64371 0.628138 -1.19971 93 -4.63246 0.693447 -1.19916 58 -4.62914 0.715269 -1.19916 72 -4.63271 0.678623 -1.1986 84 -4.6698 -0.282017 -1.1975 72 -4.67628 -0.0323107 -1.19695 113 -4.67406 -0.061655 -1.19639 105 -4.67231 -0.0469417 -1.19584 104 -4.66312 -0.127409 -1.19362 79 -4.66383 -0.098107 -1.19362 106 -4.66219 -0.0834105 -1.19307 103 -4.65965 -0.112644 -1.19251 105 -4.81959 0.825941 -1.19222 26 -4.65038 -0.251411 -1.1914 60 -4.64837 -0.214682 -1.19029 52 -4.64 -0.228863 -1.18808 66 -4.78219 0.943727 -1.18798 28 -4.63614 -0.265178 -1.18752 66 -4.8614 -0.328574 -1.18746 26 -4.82003 0.686255 -1.18639 26 -4.85172 -0.381583 -1.18587 26 -4.63456 -0.177494 -1.18586 62 -4.63558 -0.14837 -1.18586 69 -4.84473 -0.419365 -1.18481 26 -4.78091 0.888913 -1.1848 181 -4.8452 -0.365801 -1.18375 26 -4.79426 0.790459 -1.18374 26 -4.62599 -0.198958 -1.18364 29 -4.84026 -0.403693 -1.18322 26 -4.80498 0.668626 -1.18162 26 -4.79878 0.698514 -1.18109 25 -4.80426 0.645441 -1.18056 25 -4.84547 -0.0150844 -1.18004 25 -4.78933 0.735576 -1.18003 25 -4.61397 -0.162072 -1.17976 97 -4.79084 0.712705 -1.1795 25 -4.77656 0.802877 -1.1795 25 -4.82901 -0.349416 -1.17898 25 -4.8316 -0.31148 -1.17898 91 -4.83584 -0.13667 -1.17792 25 -4.77938 0.749381 -1.17791 25 -4.77701 0.764394 -1.17791 25 -4.8058 0.538293 -1.17738 95 -4.79289 0.628518 -1.17685 25 -4.8289 -0.106154 -1.1758 25 -4.79568 0.575301 -1.17579 94 -4.78789 0.55906 -1.17314 75 -4.78428 0.589133 -1.17314 59 -4.81587 -0.158923 -1.17262 25 -4.8103 -0.0680578 -1.1705 25 -4.81068 -0.030275 -1.1705 25 -4.79982 -0.294469 -1.16997 89 -4.8054 -0.120867 -1.16944 25 -4.80277 -0.052901 -1.16838 25 -4.78917 -0.278778 -1.16679 53 -4.79656 -0.083008 -1.16679 25 -4.78231 -0.225702 -1.16414 25 -4.79529 1.02834 -1.16412 39 -5.12009 1.11125 -1.16334 109 -4.78375 0.0148343 -1.16308 60 -4.77195 -0.240291 -1.16149 25 -4.77237 -0.187742 -1.16096 25 -4.77294 -0.172749 -1.16096 25 -4.76983 -0.202664 -1.16043 25 -4.77399 0.03725 -1.16043 91 -4.74232 0.515748 -1.15937 63 -4.72028 0.60351 -1.15619 29 -4.76223 0.998007 -1.15376 53 -4.73457 -0.253524 -1.15143 28 -4.74777 0.871248 -1.1434 159 -4.73981 0.892917 -1.14237 149 -4.72178 0.974296 -1.14185 114 -4.66533 0.492117 -1.13764 81 -4.72574 0.852006 -1.13667 131 -4.71229 0.903209 -1.13563 43 -4.77234 -0.47714 -1.13512 37 -4.65946 0.45447 -1.13499 109 -4.65726 0.476423 -1.13499 100 -4.65965 0.388044 -1.13341 86 -4.71316 0.834544 -1.13253 105 -4.65457 0.402327 -1.13235 107 -4.6507 0.424072 -1.13182 106 -4.68691 0.951974 -1.13149 65 -4.66779 0.0505083 -1.13129 92 -4.64551 0.438296 -1.13076 108 -4.64163 0.371757 -1.12811 109 -4.64159 0.320411 -1.12705 111 -4.64057 0.334992 -1.12705 113 -4.64625 0.203571 -1.12652 137 -4.63757 0.349412 -1.12652 112 -4.64386 0.166913 -1.12546 120 -4.64331 0.181503 -1.12546 129 -4.67147 0.910823 -1.12527 76 -4.64348 0.115783 -1.12493 125 -4.63796 0.254297 -1.12493 124 -4.63714 0.268867 -1.12493 127 -4.6419 0.101143 -1.1244 122 -4.63718 0.232331 -1.1244 129 -4.63858 0.152102 -1.12387 107 -4.63596 0.21766 -1.12387 110 -4.63869 0.0646075 -1.12334 144 -4.6371 0.137461 -1.12334 118 -4.6591 0.923667 -1.12268 61 -4.62527 0.30459 -1.12228 111 -4.63255 0.0863266 -1.12175 138 -4.62088 0.282405 -1.12069 112 -4.71424 -0.456053 -1.11907 63 -4.70673 -0.432895 -1.11648 65 -4.68088 0.655776 -1.11647 179 -4.76105 1.0168 -1.11559 34 -4.70037 -0.417379 -1.11441 93 -4.65901 0.630481 -1.10974 135 -4.64989 0.6814 -1.10922 82 -4.63707 0.701912 -1.10663 83 -4.66511 -0.399279 -1.10456 71 -4.7226 0.992852 -1.10451 46 -4.61224 0.794862 -1.10404 58 -4.7238 0.977609 -1.10401 59 -4.66795 -0.310999 -1.10353 88 -4.63095 0.663891 -1.10352 57 -4.61955 0.714201 -1.10248 65 -4.60951 0.764645 -1.10197 60 -4.65381 -0.346726 -1.10042 58 -4.59946 0.777876 -1.09989 74 -4.64709 -0.382926 -1.09938 63 -4.65349 -0.295269 -1.09938 92 -4.5997 0.74084 -1.09834 91 -4.64525 -0.331363 -1.09783 72 -4.59819 0.725804 -1.0973 61 -4.63152 -0.359581 -1.09472 80 -4.59964 0.608083 -1.09316 74 -4.62548 -0.278742 -1.09161 58 -4.63107 -0.089607 -1.09109 92 -4.62663 -0.176795 -1.09058 91 -4.59454 0.556144 -1.09005 81 -4.58811 0.591975 -1.08954 78 -4.62137 -0.162023 -1.08902 100 -4.59242 0.541275 -1.08902 72 -4.61864 -0.125596 -1.08799 91 -4.62034 -0.00949011 -1.08799 100 -4.66771 0.942744 -1.0879 60 -4.61629 -0.140035 -1.08747 88 -4.58126 0.56921 -1.08695 81 -4.61322 -0.110914 -1.08643 90 -4.60553 -0.255645 -1.08592 66 -4.61202 -0.0746361 -1.08592 91 -4.61239 -0.0456563 -1.08591 96 -4.61068 0.00506916 -1.0854 96 -4.60946 0.106454 -1.0854 255 -4.6091 0.120934 -1.0854 255 -4.60801 0.157129 -1.0854 255 -4.66117 0.926137 -1.08539 58 -4.72846 -0.455483 -1.08489 15 -4.58116 0.503589 -1.08488 133 -4.60643 -0.0600394 -1.08436 94 -4.60675 0.0267954 -1.08436 101 -4.57682 0.524962 -1.08436 70 -4.5986 -0.240728 -1.08384 72 -4.6029 -0.0238173 -1.08332 97 -4.6574 0.894955 -1.08287 46 -4.59711 -0.189968 -1.08281 63 -4.59423 -0.21153 -1.08229 91 -4.59891 0.0412435 -1.08229 115 -4.58776 -0.225644 -1.08074 73 -4.71453 -0.416893 -1.08036 64 -4.70865 -0.438768 -1.07936 58 -4.6714 0.723688 -1.07885 75 -4.63938 0.906528 -1.07884 63 -4.61644 1.0079 -1.07834 24 -4.64527 0.85474 -1.07784 49 -4.66902 0.700772 -1.07734 108 -4.70038 -0.400849 -1.07634 74 -4.69968 -0.385933 -1.07583 56 -4.65764 0.736483 -1.07583 74 -4.62925 0.866762 -1.07431 56 -4.77381 1.01439 -1.07339 50 -4.65801 0.669137 -1.07331 91 -4.66111 0.647179 -1.07331 86 -4.65589 0.683767 -1.07331 94 -4.77127 0.998223 -1.07193 46 -4.64003 0.748561 -1.0718 53 -4.65742 0.616822 -1.0713 77 -4.62517 0.813389 -1.07079 51 -4.65162 0.630908 -1.07029 85 -4.62447 0.78331 -1.06928 56 -4.6506 0.578726 -1.06828 78 -4.60416 0.831982 -1.06626 53 -4.63917 0.592054 -1.06576 77 -4.61285 0.758912 -1.06526 63 -4.65174 0.423542 -1.06425 255 -4.64828 0.460062 -1.06425 255 -4.64131 0.525727 -1.06425 54 -4.63704 0.562163 -1.06425 77 -4.6426 0.496338 -1.06375 255 -4.59912 0.793758 -1.06324 58 -4.64853 0.393783 -1.06274 255 -4.63302 0.54688 -1.06274 79 -4.64875 -0.367339 -1.06224 55 -4.65043 -0.34543 -1.06224 58 -4.64534 0.408204 -1.06224 255 -4.64199 0.444675 -1.06224 255 -4.65654 -0.162475 -1.06123 91 -4.73063 0.974463 -1.06075 59 -4.65316 -0.147744 -1.06023 80 -4.63798 0.356148 -1.05922 255 -4.648 -0.12569 -1.05872 87 -4.72671 0.935082 -1.05783 76 -4.72185 0.949553 -1.05735 63 -4.63378 0.275334 -1.0567 255 -4.63047 0.326266 -1.0567 255 -4.62638 -0.329173 -1.0557 69 -4.62546 -0.314517 -1.0552 58 -4.62864 -0.263639 -1.0552 66 -4.63482 -0.11084 -1.05519 96 -4.62496 -0.292605 -1.05469 67 -4.63086 -0.176287 -1.05469 69 -4.6315 0.158491 -1.05469 255 -4.62948 0.209406 -1.05469 255 -4.62393 -0.277967 -1.05419 68 -4.77495 -0.478994 -1.05298 40 -4.6209 -0.226858 -1.05268 65 -4.62224 -0.19782 -1.05268 63 -4.62399 0.0709634 -1.05217 255 -4.6236 0.0927534 -1.05217 255 -4.62293 0.121802 -1.05217 255 -4.62252 0.136325 -1.05217 255 -4.62131 0.172624 -1.05217 255 -4.62074 0.187143 -1.05217 255 -4.61841 0.237938 -1.05217 255 -4.6163 -0.241193 -1.05167 65 -4.61579 -0.212105 -1.05117 68 -4.61966 -0.0960452 -1.05117 80 -4.61232 -0.0741928 -1.04915 82 -4.60393 0.287914 -1.04915 255 -4.7552 -0.461812 -1.04763 20 -4.69384 0.890554 -1.04762 62 -4.68769 0.912303 -1.04714 58 -4.59705 -0.0595891 -1.04513 92 -4.68325 0.873387 -1.04422 69 -4.58765 -0.0306938 -1.04261 109 -4.58581 -0.00908322 -1.04211 101 -4.58582 0.00532482 -1.04211 105 -4.67642 0.856974 -1.04179 73 -4.58366 -0.0450902 -1.0416 102 -4.58191 0.019692 -1.0411 122 -4.73098 -0.429324 -1.04083 74 -4.41743 0.472492 -1.04033 255 -4.57596 0.0411979 -1.03959 120 -4.72188 -0.443416 -1.03888 62 -4.67153 0.818273 -1.03887 76 -4.41331 0.437068 -1.03826 255 -4.66189 0.839278 -1.03741 83 -4.4152 0.37433 -1.03722 255 -4.56613 0.0554022 -1.03707 215 -4.40889 0.422681 -1.03671 255 -4.40544 0.457295 -1.03671 255 -4.71556 -0.405433 -1.03645 79 -4.40442 0.408327 -1.03515 255 -4.41041 0.311254 -1.03463 255 -4.40376 0.394328 -1.03463 255 -4.41358 0.186305 -1.0336 255 -4.40886 0.276387 -1.0336 255 -4.40555 0.324846 -1.0336 255 -4.40287 0.359438 -1.0336 255 -4.40205 0.345463 -1.03308 255 -4.6492 0.799456 -1.03255 82 -4.69942 -0.389081 -1.03207 87 -4.40719 0.199941 -1.03205 255 -4.40472 0.248387 -1.03205 255 -4.40199 0.262121 -1.03153 255 -4.69675 -0.373986 -1.0311 95 -4.40476 0.165199 -1.03101 255 -4.68559 0.475732 -1.03061 255 -4.64403 0.783597 -1.03061 94 -4.40502 0.0890422 -1.03049 255 -4.40378 0.137472 -1.03049 255 -4.40075 0.213538 -1.03049 255 -4.39969 0.234274 -1.03049 255 -4.39594 0.296447 -1.03049 255 -4.40142 0.0751597 -1.02946 255 -4.68269 0.445764 -1.02915 255 -4.64429 0.746208 -1.02915 95 -4.63809 0.760189 -1.02818 89 -4.67171 0.496642 -1.02769 255 -4.63894 0.73045 -1.0272 93 -4.63849 0.708017 -1.02623 86 -4.67827 -0.335442 -1.02575 104 -4.67525 -0.349982 -1.02527 93 -4.67349 -0.320314 -1.02429 86 -4.63132 0.677239 -1.02331 97 -4.62725 0.691509 -1.02283 90 -4.37661 0.0542559 -1.02272 234 -4.65898 0.406761 -1.02234 255 -4.62574 0.66163 -1.02137 103 -4.65188 0.420904 -1.02088 255 -4.64263 0.456888 -1.01943 255 -4.65366 -0.29681 -1.01894 94 -4.61919 0.638549 -1.01894 107 -4.6507 -0.281932 -1.01797 105 -4.61733 0.623537 -1.01797 107 -4.62016 0.58702 -1.01748 89 -4.61734 0.608785 -1.01748 111 -4.64854 0.251849 -1.017 255 -4.64642 0.28835 -1.017 255 -4.63994 0.35387 -1.01651 255 -4.64382 -0.266831 -1.01603 108 -4.64577 -0.230352 -1.01603 100 -4.62055 0.535547 -1.01602 104 -4.6427 -0.252125 -1.01554 98 -4.64902 0.0691004 -1.01554 255 -4.64834 0.105611 -1.01554 255 -4.6469 0.156715 -1.01554 255 -4.64422 0.22239 -1.01554 255 -4.64149 0.273442 -1.01554 255 -4.63968 0.3026 -1.01554 255 -4.63315 0.389997 -1.01554 255 -4.61427 0.571592 -1.01554 102 -4.64684 0.0836815 -1.01505 255 -4.64604 0.120175 -1.01505 255 -4.64388 0.185842 -1.01505 255 -4.61412 0.55687 -1.01505 100 -4.4545 0.489336 -1.01492 255 -4.6437 0.134724 -1.01457 255 -4.63962 0.236803 -1.01457 255 -4.63872 -0.215351 -1.01408 105 -4.64056 0.171131 -1.01408 255 -4.61256 0.519996 -1.01359 120 -4.63693 -0.164175 -1.01311 90 -4.61224 0.505302 -1.0131 215 -4.63356 -0.200494 -1.01262 112 -4.6307 -0.112948 -1.01116 98 -4.72593 1.00906 -1.01106 58 -4.62476 -0.178229 -1.01019 122 -4.62644 -0.127366 -1.01019 100 -4.6255 -0.0837125 -1.00971 101 -4.62601 -0.0473829 -1.0097 108 -4.79831 -0.484685 -1.00873 10 -4.61998 -0.148947 -1.00873 131 -4.6194 -0.0980874 -1.00825 104 -4.43126 0.451432 -1.00788 255 -4.61808 -0.0617674 -1.00776 113 -4.71197 0.990518 -1.00686 53 -4.70897 0.966696 -1.00499 47 -4.60685 -0.0108929 -1.00484 122 -4.60682 0.0180532 -1.00484 121 -4.60492 0.00358852 -1.00436 112 -4.6048 0.0325222 -1.00436 129 -4.60286 -0.0325523 -1.00387 114 -4.42103 0.324296 -1.00234 255 -4.41642 0.35884 -1.00184 255 -4.76956 -0.459253 -1.00126 10 -4.4109 0.239977 -0.998317 255 -4.41433 0.101253 -0.997815 255 -4.41039 0.212153 -0.997814 255 -4.40606 0.288324 -0.997813 255 -4.68152 0.945572 -0.99752 69 -4.68256 0.930471 -0.997053 61 -4.67164 0.905351 -0.993318 71 -4.66683 0.889172 -0.991451 74 -4.87317 1.05082 -0.991369 47 -4.70898 -0.438834 -0.986323 19 -4.64939 0.855483 -0.985848 76 -4.64477 0.869718 -0.985381 70 -4.70195 -0.40845 -0.983988 64 -4.6419 0.831444 -0.983047 80 -4.68708 -0.422073 -0.98072 61 -4.50372 0.0536038 -0.979073 255 -4.61961 0.812341 -0.976977 86 -4.6728 -0.383912 -0.976518 81 -4.62251 0.760519 -0.975577 93 -4.6693 -0.354135 -0.975117 78 -4.61448 0.796458 -0.97511 81 -4.80581 1.02089 -0.974876 75 -4.66704 -0.331874 -0.974183 84 -4.61244 0.773707 -0.973709 77 -4.61875 0.722634 -0.973243 112 -4.61529 0.744391 -0.973243 99 -4.65847 -0.368092 -0.972783 63 -4.61523 0.707204 -0.971842 93 -4.61551 0.692402 -0.971375 103 -4.65253 -0.316243 -0.970448 102 -4.45501 0.354878 -0.970319 255 -4.61503 0.655279 -0.969975 111 -4.78607 1.00112 -0.969527 67 -4.45428 0.312627 -0.969347 255 -4.45328 0.326619 -0.969347 255 -4.64768 -0.301279 -0.969047 111 -4.6113 0.639943 -0.968574 120 -4.6042 0.675847 -0.968107 100 -4.64407 -0.264468 -0.967646 107 -4.60943 0.624909 -0.967641 121 -4.64083 -0.286242 -0.967179 118 -4.84731 -0.509859 -0.96597 49 -4.60462 0.602129 -0.965773 126 -4.63517 -0.24941 -0.965312 111 -4.44359 0.19293 -0.964971 255 -4.63399 -0.234759 -0.964845 122 -4.6331 -0.212841 -0.964378 129 -4.6007 0.58689 -0.964372 141 -4.6006 0.572183 -0.963906 152 -4.62791 -0.198068 -0.962977 132 -4.62657 -0.183463 -0.96251 150 -4.76013 0.972475 -0.962395 63 -4.59529 0.534854 -0.961571 161 -4.62155 -0.161487 -0.961109 153 -4.62204 -0.146967 -0.961109 159 -4.59166 0.549046 -0.961104 156 -4.59116 0.519727 -0.960171 185 -4.6147 -0.132268 -0.959241 162 -4.61509 -0.117768 -0.959241 174 -4.6117 -0.0959613 -0.958307 187 -4.74212 0.953402 -0.957492 122 -4.60809 -0.0814258 -0.957373 192 -4.585 0.467963 -0.95737 234 -4.58257 0.453151 -0.956436 227 -4.60249 -0.0668966 -0.955972 199 -4.60081 -0.0451994 -0.955506 204 -4.59855 0.0703933 -0.955038 233 -4.57885 0.430973 -0.955036 225 -4.7336 0.936292 -0.954818 90 -4.58819 0.286803 -0.95457 233 -4.58368 0.351636 -0.954569 231 -4.79848 -0.489215 -0.95438 28 -4.57944 0.380257 -0.954102 224 -4.57631 0.416211 -0.954102 223 -4.58561 0.264932 -0.953636 233 -4.58242 0.315337 -0.953636 231 -4.57868 0.365703 -0.953635 228 -4.57566 0.401652 -0.953635 223 -4.59121 -0.0307351 -0.953171 214 -4.58145 0.3008 -0.953169 231 -4.56379 0.501946 -0.953168 219 -4.58934 -0.0163152 -0.952704 216 -4.58254 0.250292 -0.952702 234 -4.577 0.336621 -0.952702 230 -4.58742 0.00529813 -0.952237 218 -4.58716 0.0485321 -0.952237 228 -4.56224 0.480006 -0.952234 237 -4.5847 0.0845107 -0.95177 234 -4.58349 0.0196713 -0.951303 220 -4.72263 0.911102 -0.951252 90 -4.58146 0.0340453 -0.950836 221 -4.57469 0.0986489 -0.949435 237 -4.56971 0.235116 -0.949434 236 -4.72276 0.857431 -0.949023 107 -4.77479 -0.471511 -0.948585 64 -4.71291 0.878636 -0.947686 99 -4.56106 0.213071 -0.9471 238 -4.55862 0.119708 -0.9457 239 -4.69862 0.89132 -0.945011 89 -4.7043 0.838941 -0.94412 116 -4.94233 1.07618 -0.94393 25 -4.54422 0.19788 -0.942898 239 -4.54288 0.183513 -0.942431 241 -4.74785 -0.446111 -0.941899 82 -4.69986 0.807767 -0.941891 102 -4.74535 -0.430819 -0.941007 87 -4.74668 -0.415909 -0.941007 108 -4.69345 0.821875 -0.941 121 -4.53685 0.133278 -0.940564 241 -4.69591 0.784368 -0.940108 108 -4.69882 0.754548 -0.939663 108 -4.7004 0.732107 -0.939217 114 -4.69258 0.768697 -0.938771 110 -4.69303 0.71592 -0.936988 119 -4.51892 0.14686 -0.936362 255 -4.72334 -0.391305 -0.935212 110 -4.72682 -0.346771 -0.935212 104 -4.51235 0.167904 -0.934961 255 -4.7226 -0.376298 -0.934766 128 -4.68561 0.699786 -0.934759 123 -4.68692 0.67743 -0.934314 133 -4.71793 -0.360983 -0.933429 127 -4.71673 -0.293855 -0.932091 124 -4.67743 0.661129 -0.931639 145 -4.70896 -0.323053 -0.930754 141 -4.67176 0.645407 -0.929856 161 -4.70217 -0.307705 -0.928971 123 -4.70527 -0.255984 -0.92897 140 -4.70713 -0.219022 -0.92897 138 -4.7041 -0.24109 -0.928525 134 -4.67088 0.607972 -0.928519 179 -4.70055 -0.27052 -0.928079 134 -4.70196 -0.203947 -0.927633 142 -4.66409 0.629475 -0.927628 171 -4.86167 1.04218 -0.925367 24 -4.6613 0.525104 -0.924062 103 -4.65963 0.539745 -0.924062 104 -4.65341 0.590947 -0.924062 192 -4.93605 -0.510205 -0.923268 24 -4.68248 -0.151423 -0.922729 160 -4.68294 -0.136712 -0.922729 165 -4.6792 -0.188105 -0.922283 148 -4.68286 -0.0336796 -0.922282 116 -4.67532 0.267769 -0.92228 87 -4.65596 0.502339 -0.922279 136 -4.67782 -0.173321 -0.921838 153 -4.67945 -0.121877 -0.921837 159 -4.66323 0.384876 -0.921388 92 -4.64628 0.553063 -0.921387 91 -4.84581 1.02277 -0.921149 24 -4.66329 0.333324 -0.920497 83 -4.65748 0.40653 -0.920497 96 -4.65423 0.420994 -0.920051 108 -4.65078 0.457536 -0.920051 120 -4.63782 0.574265 -0.92005 130 -4.67104 -0.0482054 -0.919608 117 -4.66523 0.237857 -0.919606 83 -4.64588 0.486555 -0.919605 123 -4.66827 -0.0995098 -0.919163 161 -4.66435 0.215792 -0.919161 76 -4.66056 0.252323 -0.918715 82 -4.64706 0.435101 -0.918713 104 -4.66491 -0.0700968 -0.918271 132 -4.66254 0.164378 -0.918269 98 -4.65649 0.288809 -0.918269 82 -4.65458 0.318061 -0.918268 84 -4.65194 0.354608 -0.918268 86 -4.6508 0.369221 -0.918268 90 -4.65998 0.120349 -0.917378 84 -4.65782 0.186213 -0.917378 88 -4.65721 0.200844 -0.917377 99 -4.63768 0.471026 -0.917376 121 -4.65935 0.0471288 -0.916933 77 -4.65687 -0.0845657 -0.916488 200 -4.65713 0.0690665 -0.916487 85 -4.6566 0.0983269 -0.916487 86 -4.64777 0.302974 -0.916485 83 -4.65494 0.0836729 -0.916041 87 -4.65373 0.134851 -0.916041 83 -4.6537 -0.0186868 -0.915596 76 -4.65374 -0.00406652 -0.915596 77 -4.65175 0.0178657 -0.91515 77 -4.82189 0.99385 -0.91482 24 -4.64388 0.0324699 -0.913367 84 -4.63964 0.149108 -0.91292 88 -4.88313 -0.489525 -0.911455 24 -4.86562 0.625474 -0.911026 91 -4.80202 0.973911 -0.909758 24 -4.86786 -0.464928 -0.907658 24 -4.86429 1.05675 -0.903671 21 -4.82879 0.605116 -0.902588 37 -4.7731 0.928876 -0.901743 30 -4.76292 0.950181 -0.900477 29 -4.82839 -0.446074 -0.898799 23 -4.75681 0.910101 -0.897524 30 -4.81161 0.533855 -0.897104 101 -4.81746 0.458015 -0.896683 78 -4.80603 0.548503 -0.89626 128 -4.77293 0.773965 -0.895837 23 -4.8063 0.510307 -0.895417 93 -4.81224 -0.429435 -0.895002 23 -4.81109 0.442122 -0.894995 74 -4.76469 0.787968 -0.894571 23 -4.8172 0.282833 -0.893731 86 -4.74237 0.891806 -0.893727 55 -4.75066 0.823987 -0.892884 23 -4.80996 0.305126 -0.892465 90 -4.7599 0.75643 -0.892462 23 -4.80057 -0.405675 -0.892048 23 -4.80242 0.357684 -0.891621 114 -4.80008 0.387851 -0.891621 79 -4.74679 0.80025 -0.891196 23 -4.74035 0.837505 -0.891196 31 -4.80969 0.0402239 -0.890357 85 -4.72979 0.873979 -0.890352 59 -4.79348 0.372123 -0.889933 102 -4.73001 0.850968 -0.889508 61 -4.80054 1.02749 -0.889211 19 -4.79558 -0.284172 -0.889094 23 -4.79924 0.213632 -0.889091 83 -4.78025 0.477029 -0.889089 71 -4.79967 0.0627076 -0.888248 93 -4.79255 -0.231175 -0.887828 23 -4.79403 0.19828 -0.887825 65 -4.78555 -0.253477 -0.886563 23 -4.77453 -0.388519 -0.886142 64 -4.79024 0.0249045 -0.886139 91 -4.7891 0.107667 -0.886138 99 -4.78463 0.130107 -0.885294 84 -4.7842 0.145137 -0.885294 101 -4.77671 0.235072 -0.88445 73 -4.75152 0.489092 -0.883182 72 -4.76733 0.264604 -0.882762 107 -4.73952 0.578317 -0.88276 47 -4.71901 0.726903 -0.882759 23 -4.75406 0.421507 -0.882339 103 -4.75935 -0.267226 -0.881078 23 -4.76157 1.00374 -0.880121 45 -4.74647 -0.37139 -0.879814 68 -4.74368 0.405506 -0.879808 69 -4.75895 -0.0277548 -0.879389 57 -4.74853 0.315883 -0.879387 56 -4.75361 0.181429 -0.878966 129 -4.70389 0.709356 -0.878962 28 -4.75028 -0.214414 -0.878547 53 -4.73754 -0.333341 -0.877282 60 -4.73954 -0.303568 -0.877282 28 -4.73661 -0.318336 -0.87686 50 -4.73202 -0.355391 -0.876438 68 -4.82279 -0.499672 -0.876413 47 -4.93049 1.07593 -0.875598 68 -4.74055 0.0914114 -0.875591 107 -4.73903 -0.0649684 -0.87517 62 -4.73886 0.0764745 -0.875169 104 -4.72802 0.329334 -0.875168 80 -4.69603 0.640314 -0.875166 31 -4.68677 0.691614 -0.874744 54 -4.732 -0.18391 -0.874328 29 -4.73556 0.00944655 -0.874326 65 -4.73293 0.158189 -0.874325 191 -4.73747 0.97553 -0.873924 64 -4.68819 0.654222 -0.8739 70 -4.68611 0.668947 -0.8739 59 -4.73667 0.959885 -0.873098 69 -4.72969 -0.0128852 -0.873061 36 -4.72163 -0.198419 -0.872218 29 -4.7256 -0.0425889 -0.872217 73 -4.71935 0.246805 -0.872215 68 -4.70741 -0.160883 -0.868843 29 -4.71276 0.939788 -0.867314 73 -4.70007 -0.145893 -0.867155 31 -4.70107 -0.108975 -0.867155 80 -4.70139 -0.0942047 -0.867155 69 -4.69775 -0.0793909 -0.866311 62 -4.77568 -0.479367 -0.866084 48 -4.7567 0.610887 -0.86525 182 -4.7056 0.91539 -0.864835 81 -4.70653 0.900245 -0.864422 85 -4.68096 -0.13069 -0.862937 73 -4.69201 0.882294 -0.860704 88 -4.8611 1.04441 -0.860508 56 -4.75063 -0.454103 -0.8603 54 -4.70641 0.778289 -0.859878 132 -4.69109 0.844072 -0.859051 66 -4.73586 -0.422584 -0.856581 79 -4.68214 0.827352 -0.856572 70 -4.92641 -0.506959 -0.856547 41 -4.73256 -0.437269 -0.856168 68 -4.74303 -0.303303 -0.856167 88 -4.74527 -0.266042 -0.856166 67 -4.7476 0.10702 -0.855337 97 -4.67107 0.855728 -0.855333 80 -4.72937 -0.406989 -0.854928 91 -4.7381 -0.288011 -0.854927 93 -4.73317 -0.235466 -0.853274 156 -4.73105 0.195994 -0.852444 91 -4.71759 -0.383515 -0.852036 78 -4.66349 0.809075 -0.852028 54 -4.72459 -0.249878 -0.851622 83 -4.67369 0.735431 -0.851615 51 -4.71762 -0.331324 -0.851209 54 -4.71292 -0.368202 -0.850796 59 -4.81807 1.01118 -0.85058 50 -4.72357 0.128879 -0.850379 108 -4.68487 0.617014 -0.850376 86 -4.71856 0.0916955 -0.84914 112 -4.7043 -0.35261 -0.84873 62 -4.70692 -0.315651 -0.84873 66 -4.70332 0.365485 -0.848725 96 -4.71491 0.0768288 -0.848314 121 -4.80971 0.993593 -0.848198 52 -4.82566 0.902392 -0.847801 104 -4.70897 0.158172 -0.847487 130 -4.65084 0.75442 -0.847483 64 -4.69663 0.350169 -0.847072 75 -4.82738 0.871336 -0.847007 145 -4.67116 0.585473 -0.846658 142 -4.70162 0.143183 -0.845834 96 -4.66056 0.63629 -0.845831 73 -4.81692 0.88504 -0.845419 141 -4.64694 0.716432 -0.845417 75 -4.65048 0.679641 -0.845004 60 -4.69448 0.179911 -0.844594 138 -4.68263 0.37879 -0.844593 91 -4.86749 -0.485768 -0.844236 18 -4.66395 0.547463 -0.844179 67 -4.64336 0.700987 -0.844178 59 -4.65832 0.561666 -0.843353 93 -4.78595 0.972868 -0.842638 65 -4.67167 0.392733 -0.842527 78 -4.6619 0.495365 -0.842527 83 -4.80503 0.851586 -0.841845 71 -4.67957 0.20887 -0.841702 103 -4.65954 0.480338 -0.8417 80 -4.65397 0.531541 -0.8417 104 -4.67818 -0.1956 -0.841292 61 -4.63527 0.647807 -0.840873 87 -4.66001 0.413931 -0.840461 95 -4.77703 0.947563 -0.839859 20 -4.98653 1.061 -0.839733 80 -4.65479 0.428233 -0.839635 98 -4.67157 -0.0924333 -0.839225 66 -4.67247 -0.0117062 -0.839225 84 -4.67217 0.0543497 -0.839224 96 -4.65147 0.442679 -0.839222 86 -4.64395 0.515687 -0.839221 104 -4.84361 -0.468157 -0.839074 19 -4.67046 0.0249927 -0.838811 86 -4.84962 -0.376638 -0.838676 77 -4.64544 0.464226 -0.838395 78 -4.62158 0.66077 -0.838394 148 -4.66314 -0.180209 -0.837987 74 -4.66619 -0.0629681 -0.837986 98 -4.66645 0.0396529 -0.837985 108 -4.66402 -0.0775839 -0.837573 102 -4.66269 0.010346 -0.837159 82 -4.83997 -0.398886 -0.837087 91 -4.6548 -0.0261868 -0.835507 94 -4.65274 -0.0407812 -0.835093 99 -4.8237 -0.428147 -0.834308 50 -4.64634 -0.157538 -0.834268 94 -4.81382 -0.450187 -0.83272 64 -4.81144 0.474922 -0.832713 127 -4.63899 -0.142657 -0.832615 121 -4.63979 -0.113506 -0.832615 132 -4.81096 0.459608 -0.832316 118 -4.76267 0.820694 -0.832314 22 -4.63087 0.243414 -0.831786 157 -4.62598 0.323387 -0.831786 149 -4.62306 0.308615 -0.830959 157 -4.81238 -0.320777 -0.830336 92 -4.80157 -0.411112 -0.829543 52 -4.8058 -0.358292 -0.829542 52 -4.61828 0.22101 -0.828894 183 -4.6164 0.257275 -0.828894 85 -4.61033 0.293298 -0.828067 79 -4.61594 -0.127302 -0.827657 139 -4.7324 0.799996 -0.825563 17 -4.59603 0.270736 -0.824762 119 -4.77952 -0.341387 -0.823982 46 -4.73317 0.74665 -0.823975 43 -4.73954 0.663912 -0.822784 92 -4.725 0.76055 -0.822784 16 -4.72136 0.782807 -0.822784 18 -4.89749 1.02648 -0.821506 105 -4.76821 -0.272974 -0.820805 68 -4.76944 -0.250502 -0.820805 66 -4.75715 0.401418 -0.820403 87 -4.92045 0.831191 -0.818848 222 -4.75363 -0.287201 -0.818025 59 -4.75062 -0.234657 -0.816834 79 -4.75517 0.10892 -0.816831 95 -4.87566 1.00606 -0.816569 52 -4.75284 0.123796 -0.816434 88 -4.74728 0.175881 -0.815639 112 -4.87302 0.989591 -0.81543 87 -4.7435 -0.219412 -0.815245 67 -4.87185 0.965502 -0.814291 126 -4.73802 0.160582 -0.813654 119 -4.69798 0.635284 -0.813651 86 -4.93566 -0.517024 -0.813541 74 -4.71367 0.487192 -0.813255 62 -4.73393 0.0934358 -0.812463 129 -4.67743 0.722481 -0.812062 56 -4.68636 0.618651 -0.810871 109 -4.67714 0.684839 -0.810871 127 -4.68704 0.566348 -0.80968 77 -4.66916 0.698626 -0.809679 53 -4.7151 -0.195998 -0.809288 41 -4.66764 0.668411 -0.808488 86 -4.70982 -0.180989 -0.808097 22 -4.67552 0.57981 -0.807694 90 -4.70884 0.0706054 -0.807301 100 -4.67967 0.528137 -0.807298 79 -4.70734 0.0262008 -0.806904 98 -4.67935 0.513207 -0.806901 58 -4.66691 0.601053 -0.806503 89 -4.70349 0.00399198 -0.80611 95 -4.67129 0.549463 -0.806106 62 -4.68365 0.409643 -0.80571 67 -4.68223 0.379869 -0.804916 97 -4.69541 -0.0476876 -0.804522 82 -4.69547 0.040822 -0.804521 95 -4.69077 -0.16561 -0.804125 78 -4.68954 -0.143454 -0.803728 112 -4.69132 -0.0624082 -0.803728 83 -4.67192 0.430755 -0.803724 74 -4.68872 -0.0992207 -0.803331 63 -4.66341 0.49654 -0.803327 48 -4.68718 -0.0771024 -0.802933 77 -4.68748 0.0554371 -0.802933 71 -4.88336 -0.488004 -0.802908 100 -4.83951 0.778942 -0.80176 179 -4.68186 -0.025561 -0.801742 83 -4.68192 -0.0108533 -0.801742 77 -4.80733 0.937397 -0.801 60 -4.87843 -0.363878 -0.799869 143 -4.67075 -0.113618 -0.799757 78 -4.66993 0.14321 -0.799755 67 -4.86729 -0.470865 -0.79949 44 -4.66612 0.194458 -0.799358 58 -4.66408 0.238425 -0.799357 54 -4.80295 0.89751 -0.798722 45 -4.66253 -0.12812 -0.798169 113 -4.65185 0.340466 -0.798165 80 -4.65698 0.223352 -0.797769 88 -4.65424 0.274542 -0.797769 133 -4.65335 0.289164 -0.797769 87 -4.78902 0.918335 -0.796823 50 -4.64312 0.325109 -0.79618 85 -4.63708 0.353957 -0.795385 101 -4.79773 0.826615 -0.795304 69 -4.63825 0.310097 -0.794989 57 -4.78915 0.863932 -0.794924 67 -4.63612 0.207635 -0.793401 151 -4.84203 -0.376276 -0.793033 137 -4.6316 0.258478 -0.793003 92 -4.77288 0.876562 -0.792266 72 -4.8238 -0.451125 -0.790756 45 -4.77956 0.792724 -0.790748 255 -4.82472 -0.344341 -0.789236 60 -5.04669 -0.524611 -0.787512 66 -4.7946 -0.425442 -0.78468 48 -4.80832 -0.221776 -0.784678 98 -4.79131 -0.394793 -0.78354 69 -4.79412 0.268869 -0.782396 98 -4.79325 0.283929 -0.782396 101 -4.7544 0.628489 -0.781255 110 -4.75241 0.643423 -0.781255 128 -4.73517 0.747473 -0.780874 51 -4.9253 1.05258 -0.780629 11 -4.77049 -0.408063 -0.779743 59 -4.76703 -0.324859 -0.777843 54 -4.76851 -0.30239 -0.777843 122 -4.76748 -0.28728 -0.777463 219 -4.76447 -0.234521 -0.776324 255 -4.71224 0.728829 -0.775938 65 -4.92315 0.923254 -0.775565 78 -4.72994 0.587656 -0.775559 117 -4.72322 0.609458 -0.774799 142 -4.72201 0.571668 -0.77366 107 -4.7017 0.651874 -0.771761 68 -4.899 0.934551 -0.771586 78 -4.73822 -0.248013 -0.771387 255 -4.6923 0.70325 -0.771381 74 -4.73674 -0.195717 -0.770627 56 -4.70879 0.532674 -0.770243 106 -4.70622 0.554857 -0.770243 152 -4.89704 0.902285 -0.770139 180 -4.72916 -0.269849 -0.769868 255 -4.68885 0.672681 -0.769862 80 -4.86898 1.02423 -0.769415 11 -4.72922 -0.128416 -0.768728 97 -4.9465 -0.499019 -0.768701 58 -4.72845 0.0721949 -0.768347 100 -4.71516 0.361547 -0.768345 110 -4.87718 0.954137 -0.76833 78 -4.72642 -0.0763233 -0.767968 100 -4.71145 0.383613 -0.767965 114 -4.71022 0.398413 -0.767965 108 -4.70263 0.479736 -0.767964 109 -4.69872 0.516655 -0.767964 105 -4.72467 -0.0614368 -0.767588 102 -4.70499 0.435224 -0.767585 97 -4.94384 -0.443939 -0.767253 149 -4.70164 0.449827 -0.767205 120 -4.7002 0.464596 -0.767205 88 -4.6731 0.685489 -0.767204 153 -4.7202 0.0943622 -0.766828 101 -4.70307 0.412726 -0.766826 111 -4.71755 0.123978 -0.766448 111 -4.6925 0.501101 -0.766445 101 -4.71619 -0.098336 -0.76607 100 -4.71716 -0.0242442 -0.766069 124 -4.71503 -0.0464436 -0.765689 92 -4.71506 0.0424356 -0.765689 133 -4.87609 0.874552 -0.765436 63 -4.71328 -0.00939613 -0.765309 92 -4.71329 0.0054113 -0.765309 130 -4.71055 0.160856 -0.765308 104 -4.70929 0.138609 -0.764929 100 -4.70806 0.175591 -0.764928 100 -4.70801 -0.112919 -0.764551 133 -4.70932 0.0202235 -0.76455 96 -4.70902 0.0572082 -0.764549 104 -4.70614 0.108948 -0.764169 108 -4.91745 -0.472858 -0.762913 128 -4.69614 -0.179036 -0.762652 110 -4.84333 0.963153 -0.762542 132 -4.69324 -0.149379 -0.761893 124 -4.921 -0.333159 -0.761465 83 -4.6849 -0.163804 -0.760374 134 -4.85506 0.823471 -0.760011 226 -4.90078 -0.417039 -0.758933 59 -4.8954 -0.455344 -0.758572 43 -4.89938 -0.38595 -0.758209 224 -4.90115 -0.362857 -0.758209 147 -4.66593 0.3065 -0.758092 116 -4.83624 0.8515 -0.757478 172 -4.66295 0.291616 -0.757333 112 -4.6575 0.342736 -0.756953 204 -4.66234 0.188805 -0.756194 132 -4.65463 0.327848 -0.756193 203 -4.8906 -0.315836 -0.755676 177 -4.88263 -0.346172 -0.754592 206 -4.65018 0.239606 -0.754295 127 -4.64895 0.224913 -0.753915 131 -5.13897 -0.539099 -0.753532 69 -4.64571 0.210151 -0.753156 92 -4.83342 -0.396381 -0.746272 162 -4.78326 0.787711 -0.745903 198 -4.82133 -0.288931 -0.742654 131 -4.75756 0.821802 -0.742285 255 -4.99595 1.00603 -0.741188 135 -4.81439 -0.235474 -0.740845 141 -4.75467 0.767497 -0.740115 80 -4.98018 1.04366 -0.739818 72 -4.80257 -0.272775 -0.739036 53 -4.98863 0.97205 -0.73879 217 -4.97345 1.01787 -0.737762 208 -4.97587 0.985852 -0.737077 65 -4.78169 -0.219 -0.734695 91 -4.9709 0.928268 -0.734336 103 -4.96409 0.943164 -0.733651 111 -4.77393 -0.256263 -0.73361 128 -5.01133 -0.509138 -0.730918 96 -4.7027 0.743657 -0.729986 84 -5.00821 -0.437337 -0.729205 143 -4.99701 -0.452129 -0.727491 162 -4.935 0.905733 -0.727483 191 -4.69285 0.704279 -0.727092 79 -4.68867 0.718709 -0.726731 95 -4.69115 0.68894 -0.726369 97 -4.70503 0.570585 -0.726008 100 -4.70321 0.585364 -0.726008 93 -4.69649 0.637043 -0.726007 89 -4.73125 -0.202074 -0.725289 93 -4.73258 -0.0979588 -0.724927 88 -4.6955 0.599357 -0.724922 76 -4.72597 -0.187009 -0.724204 62 -4.70364 0.495529 -0.724199 108 -4.70125 0.517688 -0.724199 82 -4.6979 0.547217 -0.724199 120 -4.68072 0.664815 -0.723837 91 -4.68084 0.649825 -0.723475 93 -4.68288 0.620133 -0.723114 100 -4.72107 -0.0829491 -0.722756 80 -4.69735 0.479906 -0.722753 101 -4.71696 -0.164447 -0.722395 86 -4.70866 0.324578 -0.722392 62 -4.71747 -0.060671 -0.722033 90 -4.69906 0.398143 -0.721668 82 -4.69296 0.464533 -0.721668 107 -4.95682 -0.479716 -0.720982 130 -4.71004 -0.134626 -0.720948 77 -4.7114 0.0725949 -0.720946 100 -4.69255 0.427282 -0.720944 98 -4.70997 -0.0162236 -0.720585 98 -4.70918 0.0873487 -0.720584 80 -4.69191 0.412355 -0.720582 85 -4.68853 0.449193 -0.720582 67 -4.70798 0.0207478 -0.720223 76 -4.69531 0.34583 -0.720221 85 -4.70355 0.153761 -0.719861 86 -4.70055 0.227622 -0.71986 109 -4.89456 0.874727 -0.719603 133 -4.70409 0.00593028 -0.7195 82 -4.70081 0.175841 -0.719499 90 -4.70086 0.109312 -0.719137 101 -4.67225 0.529204 -0.719135 76 -4.69809 -0.031009 -0.718415 81 -4.69196 0.24194 -0.718413 94 -4.696 -0.0457591 -0.718053 83 -4.69292 -0.112105 -0.717692 116 -4.68509 0.293247 -0.717689 83 -4.68993 -0.148907 -0.717331 114 -4.69194 0.0574432 -0.717329 94 -4.69025 0.138502 -0.717329 110 -4.68332 0.256205 -0.716966 79 -4.67264 0.358804 -0.716242 100 -4.67149 0.373481 -0.716242 107 -4.93085 -0.461428 -0.716185 192 -4.68233 0.0352041 -0.71552 95 -4.93588 -0.352588 -0.715499 143 -4.67469 0.18943 -0.714796 83 -4.92582 -0.406321 -0.714471 91 -4.6721 0.204018 -0.714434 80 -4.67297 0.123201 -0.714073 81 -4.65079 0.305586 -0.71154 193 -4.64869 0.276103 -0.710816 154 -4.82346 0.846792 -0.706583 75 -4.87995 -0.386857 -0.706248 112 -4.82608 0.808253 -0.705898 50 -4.87525 -0.371045 -0.70522 228 -4.85836 -0.331298 -0.701793 63 -4.80524 0.789379 -0.701786 65 -4.85151 -0.315481 -0.700422 73 -4.78917 0.825472 -0.700073 61 -4.79212 0.771856 -0.699045 112 -4.78673 0.755609 -0.697675 93 -4.82542 -0.290807 -0.695625 59 -4.82238 -0.2754 -0.69494 106 -4.77464 0.730743 -0.694934 103 -5.17573 -0.525824 -0.694311 59 -4.76743 0.699078 -0.692878 124 -4.76872 0.676338 -0.692536 105 -4.76326 0.71377 -0.692535 100 -4.80543 -0.221348 -0.691513 102 -4.80237 -0.243878 -0.691171 118 -4.79765 -0.258732 -0.690486 157 -4.75632 0.621417 -0.689109 125 -4.75629 0.606232 -0.688767 147 -4.75138 0.643569 -0.688767 119 -4.74738 0.658233 -0.688424 104 -4.78249 -0.205108 -0.687401 99 -4.77917 -0.189904 -0.686716 137 -4.74896 0.55238 -0.686369 171 -4.74447 0.58966 -0.686369 158 -4.77703 -0.13721 -0.68603 140 -4.74871 0.537246 -0.686026 180 -4.74043 0.574074 -0.685341 157 -4.7682 -0.166903 -0.68466 123 -4.76673 -0.151849 -0.684317 131 -4.74298 0.498957 -0.684313 194 -4.73666 0.520893 -0.683628 184 -4.73472 0.483108 -0.6826 201 -4.75202 -0.113943 -0.681576 149 -4.75288 -0.0691525 -0.681576 174 -4.75039 -0.0989616 -0.681233 152 -4.7264 0.467315 -0.680887 204 -4.74674 -0.083946 -0.680548 165 -4.72266 0.444516 -0.679859 205 -4.74134 -0.0465726 -0.67952 169 -4.74154 -0.0167819 -0.679519 187 -4.7234 0.414674 -0.679517 210 -4.73949 -0.031654 -0.679177 180 -4.73955 0.0204604 -0.679177 191 -4.73904 0.0725723 -0.679176 204 -4.72011 0.429342 -0.679174 208 -4.73727 0.0576704 -0.678834 203 -4.72075 0.39952 -0.678832 213 -4.73565 0.00558737 -0.678491 184 -4.72061 0.377124 -0.678489 211 -4.73288 0.0873835 -0.678148 208 -4.73158 0.0353335 -0.677806 199 -4.72249 0.295282 -0.677804 210 -4.72154 0.310116 -0.677804 212 -4.71785 0.362012 -0.677804 212 -4.72587 0.191297 -0.677462 212 -4.72614 0.124428 -0.67712 212 -4.71661 0.3247 -0.677119 213 -4.7247 0.102125 -0.676778 207 -4.72329 0.154068 -0.676777 210 -4.72251 0.176324 -0.676777 212 -4.71306 0.346787 -0.676776 213 -4.71934 0.205918 -0.676434 209 -4.71679 0.257796 -0.676434 211 -4.71596 0.272613 -0.676434 212 -4.71981 0.139135 -0.676092 208 -4.71438 0.227987 -0.675749 213 -4.71167 0.242705 -0.675406 213 -4.934 1.04965 -0.668841 29 -4.92151 1.02269 -0.665977 33 -4.91118 1.00438 -0.66375 33 -4.98273 -0.491389 -0.662805 34 -4.8903 0.967993 -0.659294 64 -4.8795 0.981754 -0.658021 52 -5.0693 -0.507516 -0.655547 67 -4.86188 0.938402 -0.653884 90 -4.91615 -0.461801 -0.651666 34 -4.89976 -0.375107 -0.647847 86 -4.82799 0.915937 -0.647838 67 -4.93927 1.0189 -0.647476 59 -4.89003 -0.444001 -0.647211 35 -4.88747 -0.405122 -0.646256 56 -4.81921 0.898531 -0.645929 61 -4.87173 -0.427017 -0.644028 72 -4.80398 0.872181 -0.642746 62 -4.80475 0.856728 -0.642428 62 -4.90175 0.995333 -0.640965 63 -4.79577 0.816232 -0.639882 61 -4.84539 -0.386544 -0.639254 35 -4.78799 0.838121 -0.639246 61 -4.77497 0.797135 -0.636064 34 -4.87641 0.950551 -0.635695 68 -4.87146 0.965491 -0.635384 92 -4.77161 0.781141 -0.635109 33 -4.8207 -0.346643 -0.634798 57 -4.7698 0.742385 -0.633836 32 -4.76624 0.764854 -0.633836 32 -4.85801 0.931247 -0.632284 89 -4.85702 0.915269 -0.631664 90 -5.10128 1.06175 -0.631634 180 -4.80009 -0.330123 -0.631297 67 -4.91362 -0.475534 -0.630743 59 -4.79519 -0.314686 -0.630343 66 -4.79221 -0.299394 -0.629706 64 -4.74675 0.723391 -0.629699 32 -4.7916 -0.276707 -0.629388 62 -4.79244 -0.261651 -0.629387 61 -4.78338 -0.246141 -0.627796 64 -4.73729 0.706665 -0.62779 32 -4.73862 0.684041 -0.627472 32 -4.83681 0.872329 -0.627324 88 -4.78054 -0.223434 -0.627159 59 -4.88631 -0.449503 -0.626092 53 -4.77332 -0.208112 -0.625886 33 -4.73097 0.667717 -0.62588 31 -4.82987 0.832038 -0.625153 84 -4.81849 0.884748 -0.624843 89 -4.87852 -0.402392 -0.624231 82 -4.72132 0.651168 -0.623971 31 -4.87839 -0.379236 -0.623921 102 -4.7308 0.561819 -0.623653 31 -4.72624 0.598958 -0.623653 31 -4.72139 0.636059 -0.623653 31 -4.75817 -0.192564 -0.62334 32 -4.75875 -0.177613 -0.62334 32 -4.72614 0.583854 -0.623335 31 -4.81421 0.852783 -0.623293 89 -4.72042 0.613272 -0.623017 32 -4.75605 -0.140139 -0.622703 31 -4.86606 -0.432111 -0.622681 80 -4.75449 -0.125156 -0.622385 31 -4.72688 0.50866 -0.622062 32 -4.74967 -0.15492 -0.621749 32 -4.74911 -0.102654 -0.62143 31 -4.71882 0.545294 -0.621426 31 -4.80711 0.812714 -0.621123 83 -4.71266 0.52954 -0.620153 31 -4.79989 0.796044 -0.619573 82 -4.71275 0.492081 -0.619517 31 -4.84575 -0.414853 -0.619271 72 -4.80163 0.773114 -0.619263 76 -4.71858 0.410399 -0.619199 31 -4.71379 0.462256 -0.619199 31 -4.73429 -0.0354763 -0.618884 31 -4.71395 0.439843 -0.61888 31 -4.71035 0.476853 -0.61888 31 -4.73218 -0.0503383 -0.618566 31 -4.72992 -0.0726178 -0.618248 31 -4.72085 0.268918 -0.617927 32 -4.72571 -0.0874269 -0.617611 31 -4.70744 0.42428 -0.617608 31 -4.79232 0.756239 -0.617402 73 -4.72452 0.0164935 -0.617292 31 -4.71772 0.253853 -0.61729 31 -4.72253 -0.0206153 -0.616974 31 -4.72104 0.120317 -0.616973 32 -4.7205 0.031287 -0.616656 32 -4.72038 0.0461169 -0.616655 32 -4.72011 0.0683614 -0.616655 32 -4.71987 0.0831888 -0.616655 32 -4.71071 0.305432 -0.616654 31 -4.7087 0.335024 -0.616653 31 -4.70473 0.386777 -0.616653 31 -4.83497 -0.322167 -0.616479 82 -4.71431 0.201677 -0.616336 31 -4.70395 0.371828 -0.616335 32 -4.70771 0.290367 -0.616017 31 -4.70313 0.356889 -0.616017 31 -4.71275 0.134878 -0.6157 32 -4.70185 0.319651 -0.615381 31 -4.82552 -0.344342 -0.615239 80 -4.82807 -0.306434 -0.615239 82 -4.71072 -0.00583048 -0.615065 31 -4.70971 0.097756 -0.615064 32 -4.70835 0.149535 -0.615063 32 -4.82244 -0.359343 -0.614929 78 -4.70589 0.164248 -0.614745 31 -4.7038 0.21598 -0.614745 31 -4.82507 -0.291004 -0.614619 82 -4.70076 0.238032 -0.614426 31 -4.70112 0.186242 -0.614108 31 -5.06503 -0.482313 -0.6134 138 -4.76731 0.737101 -0.613062 72 -4.81061 -0.267301 -0.612138 83 -4.76926 0.683828 -0.612132 68 -4.76178 0.720979 -0.611822 59 -4.79959 -0.251504 -0.610278 84 -4.79838 -0.236315 -0.609968 82 -4.75376 0.666468 -0.609342 59 -4.74948 0.696323 -0.609341 77 -4.78924 -0.220732 -0.608417 81 -4.75775 0.591019 -0.608412 63 -4.78825 -0.198068 -0.608107 75 -4.78885 -0.183025 -0.608107 77 -4.74903 0.612707 -0.607482 71 -4.74512 0.627374 -0.607171 68 -4.77755 -0.167499 -0.606247 75 -4.73333 0.641006 -0.605621 74 -4.74347 0.544008 -0.605312 71 -4.74174 0.558907 -0.605312 70 -4.77039 -0.1447 -0.605006 75 -4.74563 0.506537 -0.605002 77 -4.74402 0.521445 -0.605002 72 -4.92999 1.00097 -0.604857 68 -4.76923 -0.114668 -0.604696 77 -4.74523 0.491434 -0.604692 69 -4.76604 -0.0771208 -0.604076 78 -4.74641 0.438886 -0.604072 74 -4.73211 0.572895 -0.604071 79 -4.74108 0.453441 -0.603452 70 -4.75503 -0.129198 -0.602526 77 -4.75638 -0.0619658 -0.602525 75 -4.75194 -0.0917509 -0.601905 71 -4.7526 -0.0469609 -0.601905 76 -4.74004 0.348407 -0.601902 76 -4.75084 -0.00961939 -0.601595 77 -4.73396 0.400349 -0.601592 74 -4.74684 -0.0245027 -0.600975 75 -4.72808 0.422323 -0.600972 75 -4.74485 0.0276914 -0.600664 85 -4.74265 0.146922 -0.600663 87 -4.73228 0.318009 -0.600352 81 -4.9021 0.979112 -0.600149 79 -4.74097 0.00534911 -0.600044 79 -4.74063 0.0574776 -0.600044 82 -4.73971 0.109599 -0.600044 83 -4.73934 0.124488 -0.600043 87 -4.73805 0.0946795 -0.599734 81 -4.73571 0.176528 -0.599733 79 -4.73154 0.265758 -0.599732 78 -4.72455 0.369736 -0.599732 84 -4.73683 0.0425713 -0.599424 84 -4.71943 0.384279 -0.599111 79 -4.71209 0.465763 -0.599111 80 -4.73032 0.16148 -0.598803 81 -4.72643 0.25061 -0.598802 75 -4.7214 0.332236 -0.598802 77 -4.89546 0.961749 -0.598678 84 -4.72693 0.198555 -0.598493 79 -4.72559 0.22825 -0.598492 75 -4.72189 0.295033 -0.598492 80 -4.89652 0.94598 -0.598384 88 -4.72082 0.28009 -0.598182 82 -4.72036 0.213169 -0.597562 80 -4.72252 0.0796144 -0.597253 85 -4.87761 0.91838 -0.594853 87 -4.93854 -0.431827 -0.593979 74 -4.8727 0.901572 -0.593676 90 -4.93054 -0.454581 -0.593096 50 -4.87162 0.885531 -0.593087 92 -4.8699 0.8615 -0.592205 89 -4.86674 0.845151 -0.591322 92 -4.92015 -0.414752 -0.591036 96 -4.91354 -0.398695 -0.589859 87 -4.84989 0.82643 -0.58838 91 -4.90096 -0.382252 -0.587799 105 -4.89678 -0.358752 -0.586916 88 -4.89789 -0.343366 -0.586916 84 -4.84398 0.801901 -0.586908 90 -4.83672 0.785042 -0.585437 105 -4.88512 -0.327125 -0.584856 89 -4.8357 0.753692 -0.584555 83 -4.83136 0.768559 -0.58426 82 -4.87766 -0.288216 -0.583384 85 -4.87476 -0.303427 -0.58309 90 -4.82974 0.713891 -0.582789 85 -4.82747 0.72906 -0.582789 85 -4.87261 -0.272592 -0.582501 92 -4.86792 -0.249355 -0.581618 93 -4.81826 0.69666 -0.580729 85 -4.85357 -0.218138 -0.579264 89 -4.85226 -0.202818 -0.57897 93 -4.81685 0.619315 -0.578964 88 -4.81192 0.641736 -0.57867 92 -4.80988 0.656849 -0.57867 86 -4.80779 0.671957 -0.57867 85 -4.84694 -0.233132 -0.578381 99 -4.84921 -0.179824 -0.578381 92 -4.81672 0.588538 -0.578376 87 -4.81726 0.55022 -0.577788 89 -4.80308 0.602128 -0.57661 90 -5.16662 -0.505396 -0.575926 69 -4.83195 -0.164081 -0.575733 89 -4.82913 -0.126044 -0.575144 97 -4.82651 -0.14875 -0.57485 92 -4.82357 -0.110769 -0.574261 92 -4.8239 -0.0956153 -0.574261 99 -4.82466 -0.0425677 -0.57426 96 -4.80095 0.479577 -0.574257 91 -4.79106 0.569983 -0.574257 87 -4.81856 -0.0576858 -0.573378 97 -4.78949 0.53165 -0.573374 91 -4.79669 0.441091 -0.57308 92 -4.78917 0.516378 -0.57308 95 -4.79867 0.39569 -0.572786 101 -4.8129 -0.0274068 -0.572495 96 -4.79851 0.372908 -0.572492 94 -4.81099 -0.00473646 -0.5722 93 -4.81099 0.0103791 -0.5722 93 -4.80847 -0.0727276 -0.571907 95 -4.80318 0.236886 -0.571905 83 -4.78369 0.492951 -0.571903 91 -4.8068 0.0481016 -0.571612 100 -4.80564 0.116049 -0.571611 97 -4.805 0.0254287 -0.571317 97 -4.78755 0.409867 -0.571315 93 -4.79436 0.289297 -0.571021 96 -4.79245 0.319414 -0.571021 98 -4.78427 0.424719 -0.571021 89 -4.796 0.221389 -0.570728 86 -4.79617 0.168561 -0.570434 93 -4.79674 0.0630201 -0.57014 104 -4.79651 0.0780882 -0.57014 95 -4.79609 0.100691 -0.57014 100 -4.79537 0.130823 -0.57014 96 -4.79304 0.198601 -0.570139 85 -4.79056 0.25129 -0.570139 91 -4.78388 0.35657 -0.570138 98 -4.78778 0.266217 -0.569845 94 -4.78554 0.303812 -0.569844 96 -4.783 0.341388 -0.569844 92 -4.78505 0.145533 -0.568668 99 -4.78376 0.183109 -0.568668 91 -4.76504 0.460672 -0.568666 95 -4.99283 1.00117 -0.562203 72 -4.97845 0.98212 -0.559734 87 -5.03216 -0.4756 -0.557001 70 -4.9577 0.953913 -0.556169 98 -4.95483 0.937259 -0.555346 97 -4.9558 0.921337 -0.555072 103 -4.93916 0.902303 -0.552329 93 -4.9863 -0.45522 -0.550418 80 -4.92579 0.875987 -0.549861 92 -4.97981 -0.438817 -0.549321 93 -4.9207 0.859186 -0.548764 91 -4.97393 -0.414645 -0.548224 105 -4.91948 0.819253 -0.547667 103 -4.96732 -0.398343 -0.547126 112 -4.91165 0.841776 -0.547119 94 -4.95867 -0.381924 -0.545755 81 -4.95054 -0.357786 -0.544383 95 -4.89854 0.800083 -0.544376 99 -4.89096 0.759531 -0.542456 92 -4.93836 -0.302281 -0.542189 99 -4.89136 0.743874 -0.542182 108 -4.88341 0.781964 -0.541908 84 -4.88583 0.727378 -0.541085 104 -4.92398 -0.340175 -0.540543 97 -4.92305 -0.324564 -0.540269 102 -4.92545 -0.285888 -0.540269 104 -4.88764 0.672833 -0.540263 92 -4.88221 0.7112 -0.540262 101 -4.87598 0.655699 -0.538343 105 -4.8698 0.686057 -0.538068 85 -4.90654 -0.269223 -0.537526 107 -4.90986 -0.199834 -0.537525 92 -4.90143 -0.253469 -0.536703 90 -4.90129 -0.214868 -0.536428 88 -4.89664 -0.230059 -0.53588 94 -4.86131 0.615002 -0.5356 89 -4.85535 0.598798 -0.534503 92 -4.88699 -0.175715 -0.534234 85 -4.88206 -0.144797 -0.533411 104 -4.85203 0.559781 -0.533406 90 -4.84363 0.628315 -0.533406 87 -4.8796 -0.160058 -0.533137 101 -4.87675 -0.121609 -0.532588 92 -4.87812 -0.0373327 -0.532587 95 -4.84954 0.52867 -0.532584 91 -4.84434 0.574353 -0.532584 100 -4.87346 -0.0908711 -0.532039 90 -4.85797 0.398695 -0.532036 89 -4.84606 0.505226 -0.531761 89 -4.84935 0.451739 -0.531487 92 -4.86778 -0.0754362 -0.531216 91 -4.86826 0.0316217 -0.531215 96 -4.838 0.542851 -0.531212 88 -4.86523 -0.105966 -0.530942 89 -4.86638 0.00104281 -0.530942 94 -4.86412 -0.052433 -0.530668 89 -4.86239 0.0163379 -0.530393 92 -4.85543 0.260625 -0.530391 93 -4.83927 0.473856 -0.53039 90 -4.83579 0.488868 -0.530116 91 -4.84457 0.367051 -0.529842 90 -4.85327 0.17651 -0.529569 92 -4.84865 0.275572 -0.529568 91 -4.84372 0.351697 -0.529568 93 -4.84142 0.382124 -0.529568 91 -4.83827 0.420136 -0.529567 88 -4.85444 -0.0217721 -0.529296 97 -4.83495 0.435166 -0.529293 89 -4.85201 0.0697126 -0.529021 97 -4.85031 0.046838 -0.528747 98 -4.8495 0.100166 -0.528747 96 -4.84897 0.123017 -0.528746 95 -4.84612 0.153429 -0.528472 94 -4.84414 0.206705 -0.528472 91 -4.83939 0.297972 -0.528471 95 -4.83742 0.328373 -0.528471 92 -4.84583 0.0848822 -0.528198 97 -4.8446 0.138159 -0.528198 101 -4.83951 0.221763 -0.527923 97 -4.83447 0.31294 -0.527922 95 -4.83289 0.19108 -0.526826 92 -4.82852 0.244118 -0.526552 89 -5.37744 1.05757 -0.523255 55 -5.42858 -0.490717 -0.519253 42 -5.31157 -0.463893 -0.503204 40 -5.18243 1.00134 -0.495974 40 -5.23727 -0.399818 -0.492505 40 -5.22611 -0.415534 -0.491168 40 -5.14664 0.977461 -0.490625 40 -5.1473 0.952457 -0.49009 40 -5.21026 -0.439061 -0.489296 40 -5.2128 -0.381611 -0.489028 40 -5.13662 0.933733 -0.488218 40 -5.13758 0.917232 -0.48795 40 -5.1998 -0.339704 -0.486888 40 -5.18628 -0.36343 -0.485283 40 -5.11843 0.888827 -0.484741 40 -5.1122 0.854629 -0.483136 40 -5.10754 0.870343 -0.482869 40 -5.09922 0.835921 -0.480997 40 -5.09919 0.811238 -0.480462 40 -5.10223 0.778875 -0.480194 40 -5.09389 0.793955 -0.479392 40 -5.14444 -0.303925 -0.479131 40 -5.13752 -0.319746 -0.478329 40 -5.09213 0.752725 -0.478322 40 -5.29479 1.00662 -0.476649 40 -5.12404 -0.278606 -0.476189 40 -5.07487 0.733788 -0.475648 40 -5.11895 -0.262231 -0.475386 40 -5.12085 -0.222021 -0.475386 40 -5.07323 0.717267 -0.475113 40 -5.07263 0.692795 -0.474578 40 -5.07492 0.660644 -0.474311 40 -5.07304 0.644178 -0.473776 40 -5.10391 -0.245468 -0.473247 40 -5.10432 -0.189271 -0.472979 40 -5.07465 0.5635 -0.472706 40 -5.55279 -0.498098 -0.472587 40 -5.10092 -0.173121 -0.472444 40 -5.06614 0.60285 -0.472171 40 -5.05711 0.674408 -0.472171 40 -5.09577 -0.205027 -0.471909 40 -5.0621 0.586217 -0.471369 40 -5.46652 1.04315 -0.471353 155 -5.09178 -0.148842 -0.471106 40 -5.09222 -0.132846 -0.471106 40 -5.09261 -0.116847 -0.471106 40 -5.05439 0.617511 -0.470834 40 -5.05473 0.545106 -0.469764 40 -5.0795 -0.0767081 -0.469233 40 -5.07725 -0.0926384 -0.468966 40 -5.06206 0.377471 -0.468696 40 -5.05551 0.456936 -0.468695 40 -5.05405 0.472816 -0.468695 40 -5.04854 0.528358 -0.468695 40 -5.07301 0.106661 -0.46843 40 -5.04703 0.504148 -0.46816 40 -5.0698 -0.0606833 -0.467896 40 -5.07016 -0.00493392 -0.467896 40 -5.06278 0.27368 -0.467894 40 -5.06619 0.0109658 -0.467361 40 -5.05035 0.400487 -0.467358 40 -5.04907 0.416351 -0.467358 40 -5.06378 0.0666324 -0.467093 40 -5.05136 0.360658 -0.467091 40 -5.0622 -0.0208705 -0.466826 40 -5.04379 0.431852 -0.466823 40 -5.04852 0.344498 -0.466556 40 -5.03676 0.487083 -0.466555 40 -5.05515 0.177727 -0.46629 40 -5.2179 0.975431 -0.466199 40 -5.05482 0.122074 -0.466022 40 -5.05162 0.217328 -0.466022 40 -5.04613 0.320431 -0.466021 40 -5.05418 -0.0367571 -0.465756 40 -5.05419 0.0346951 -0.465756 40 -5.05406 0.0505745 -0.465755 40 -5.0535 0.0902658 -0.465755 40 -5.04974 0.161623 -0.465487 40 -5.04825 0.145692 -0.46522 40 -5.04497 0.232892 -0.465219 40 -5.03722 0.30393 -0.464684 40 -5.03828 0.248418 -0.464417 40 -5.0342 0.287855 -0.464149 40 -5.03477 0.192747 -0.463615 40 -5.26256 -0.458563 -0.462894 59 -5.16384 0.940459 -0.458553 40 -5.22647 -0.413888 -0.457797 40 -5.2139 -0.396347 -0.456012 40 -5.14527 0.920495 -0.455749 40 -5.1955 -0.427718 -0.453974 40 -5.19989 -0.370566 -0.453973 40 -5.1325 0.901658 -0.45371 40 -5.40001 -0.468024 -0.453478 41 -5.13335 0.885203 -0.453456 40 -5.12571 0.859093 -0.451926 40 -5.18322 -0.352926 -0.451679 40 -5.12447 0.842362 -0.451417 40 -5.17346 -0.319559 -0.45015 40 -5.16897 -0.294807 -0.449385 40 -5.11524 0.799717 -0.449378 40 -5.10945 0.823507 -0.449123 40 -5.16591 -0.278334 -0.448875 40 -5.16056 -0.334979 -0.44862 40 -5.16478 -0.261993 -0.44862 40 -5.15605 -0.237145 -0.447345 40 -5.10053 0.764719 -0.446829 40 -5.14488 -0.220377 -0.445816 40 -5.09025 0.779578 -0.44581 40 -5.26315 0.986221 -0.445386 59 -5.1396 -0.203948 -0.445051 40 -5.13708 -0.163429 -0.444541 40 -5.08672 0.721949 -0.444281 40 -5.09238 0.665727 -0.444026 40 -5.51332 1.0279 -0.443632 20 -5.12964 -0.147021 -0.443522 40 -5.07657 0.736826 -0.443261 40 -5.12698 -0.09052 -0.443012 40 -5.08658 0.648762 -0.443007 40 -5.07913 0.704652 -0.443007 40 -5.07936 0.688435 -0.442752 40 -5.24628 0.957383 -0.442691 59 -5.12129 -0.0742971 -0.442247 40 -5.11672 -0.178773 -0.441993 40 -5.11973 -0.0340483 -0.441992 40 -5.11676 -0.106371 -0.441737 40 -5.2395 0.939099 -0.441466 58 -5.11365 -0.0500452 -0.441227 40 -5.11375 0.038316 -0.441226 40 -5.11188 -0.0178969 -0.440972 40 -5.11191 0.00619329 -0.440972 40 -5.29925 -0.434636 -0.44074 40 -5.30187 -0.401331 -0.440739 40 -5.10827 -0.130238 -0.440718 40 -5.10789 0.0222547 -0.440462 40 -5.10675 0.110506 -0.440461 40 -5.06889 0.630431 -0.440458 40 -5.07157 0.574233 -0.439949 40 -5.10139 0.0783555 -0.439697 40 -5.07395 0.534186 -0.439694 40 -5.07225 0.550123 -0.439694 40 -5.06589 0.605861 -0.439694 40 -5.0658 0.589723 -0.439439 40 -5.09774 0.0542933 -0.439187 40 -5.09715 0.0943274 -0.439187 40 -5.0903 0.134232 -0.438422 40 -5.07063 0.421404 -0.437911 40 -5.06338 0.500998 -0.43791 40 -5.06518 0.461046 -0.437656 40 -5.06371 0.476957 -0.437655 40 -5.21118 0.916976 -0.437547 59 -5.05783 0.51652 -0.4374 40 -5.06265 0.444804 -0.437146 40 -5.06704 0.365097 -0.436891 40 -5.21235 0.875005 -0.436812 64 -5.06328 0.388827 -0.436637 40 -5.20567 0.890687 -0.436322 61 -5.07201 0.149786 -0.436128 40 -5.07097 0.181652 -0.436128 40 -5.07006 0.205547 -0.436128 40 -5.05808 0.404436 -0.436127 40 -5.261 -0.415059 -0.43584 40 -5.06542 0.22132 -0.435618 40 -5.06353 0.261097 -0.435618 40 -5.05872 0.276807 -0.435108 40 -5.05537 0.332412 -0.435108 40 -5.05441 0.316415 -0.434853 40 -5.1955 0.855306 -0.434362 63 -5.05188 0.292383 -0.434343 40 -5.04836 0.347913 -0.434343 40 -5.05367 0.165229 -0.433834 40 -5.05083 0.236654 -0.433834 40 -5.23949 -0.355568 -0.432655 40 -5.23379 -0.379986 -0.432165 40 -5.18443 0.811623 -0.432158 61 -5.18499 0.795021 -0.431913 62 -5.17859 0.835719 -0.431913 63 -5.2168 -0.337685 -0.429715 40 -5.20991 -0.320846 -0.428735 62 -5.16789 0.734205 -0.428729 65 -5.16556 0.750438 -0.428728 62 -5.16196 0.77477 -0.428728 62 -5.20938 -0.296189 -0.42849 66 -5.16563 0.692501 -0.427749 68 -5.20236 -0.279434 -0.42751 64 -5.15445 0.715704 -0.426769 62 -5.19528 -0.262729 -0.42653 65 -5.19646 -0.238243 -0.42653 64 -5.15807 0.658464 -0.426279 66 -5.15598 0.674665 -0.426279 66 -5.16293 0.585013 -0.42579 40 -5.18925 -0.221619 -0.42555 62 -5.18542 -0.164388 -0.424815 65 -5.18198 -0.205041 -0.42457 61 -5.1424 0.639962 -0.424075 65 -5.1459 0.558436 -0.42334 78 -5.1707 -0.188386 -0.4231 64 -5.13939 0.598595 -0.423095 40 -5.16805 -0.147678 -0.42261 66 -5.1665 -0.131399 -0.422364 66 -5.13974 0.541397 -0.42236 68 -5.40567 -0.464388 -0.422178 68 -5.16565 -0.0745649 -0.422119 66 -5.1296 0.613755 -0.422115 64 -5.1602 -0.0177728 -0.421384 67 -5.13898 0.467923 -0.421381 65 -5.15714 -0.106896 -0.42114 68 -5.15395 -0.0582627 -0.420649 66 -5.13155 0.483477 -0.420646 64 -5.13001 0.499596 -0.420646 66 -5.1276 0.523764 -0.420646 65 -5.15218 -0.0339707 -0.420404 68 -5.15229 -0.00159889 -0.420404 103 -5.31902 0.97534 -0.42007 20 -5.14753 -0.0905703 -0.419914 65 -5.13063 0.4265 -0.419911 66 -5.1407 0.2408 -0.419667 64 -5.13303 0.36991 -0.419667 63 -5.13667 0.281049 -0.419422 62 -5.12799 0.410044 -0.419421 64 -5.12461 0.450306 -0.419421 64 -5.13378 0.29706 -0.419177 65 -5.13764 0.167879 -0.418933 64 -5.13811 0.0548328 -0.418689 68 -5.12886 0.312924 -0.418687 62 -5.13484 0.127406 -0.418443 67 -5.13418 0.1516 -0.418443 67 -5.13438 0.0225115 -0.418199 40 -5.12337 0.33681 -0.418197 62 -5.11738 0.39296 -0.417952 66 -5.12625 0.207772 -0.417708 64 -5.11833 0.35261 -0.417707 62 -5.12727 0.11106 -0.417463 67 -5.12161 0.223682 -0.417218 66 -5.11969 0.2639 -0.417217 63 -5.12436 0.0385168 -0.416974 66 -5.12363 0.0948588 -0.416974 66 -5.11726 0.183207 -0.416483 66 -5.11795 0.0786401 -0.416239 64 -5.28637 0.943811 -0.415638 20 -5.28735 0.926865 -0.415405 20 -5.26759 0.889451 -0.412372 20 -5.25497 0.904357 -0.411206 20 -5.31347 -0.422395 -0.41098 20 -5.25479 0.844993 -0.410039 20 -5.2534 0.802535 -0.409106 20 -5.24426 0.86025 -0.409106 20 -5.28966 -0.395299 -0.407947 20 -5.29315 -0.345429 -0.407947 20 -5.24457 0.767566 -0.407474 20 -5.23581 0.825186 -0.407473 20 -5.2382 0.78347 -0.407007 20 -5.28016 -0.361185 -0.406547 20 -5.26711 -0.376862 -0.405148 20 -5.22681 0.723201 -0.404674 20 -5.22451 0.739619 -0.404674 20 -5.26499 -0.318537 -0.404447 20 -5.22512 0.706266 -0.404208 20 -5.21746 0.688595 -0.403041 20 -5.25209 -0.301131 -0.402814 20 -5.25103 -0.284511 -0.402581 20 -5.22077 0.630728 -0.402575 20 -5.21087 0.646188 -0.401642 20 -5.24239 -0.259224 -0.401414 20 -5.20684 0.662315 -0.401409 20 -5.87325 -0.504683 -0.401127 68 -5.24156 -0.184928 -0.400947 20 -5.20976 0.588002 -0.400709 20 -5.23524 -0.242347 -0.400481 20 -5.23815 -0.168313 -0.40048 20 -5.20591 0.604148 -0.400476 20 -5.23468 -0.151722 -0.400014 20 -5.22606 -0.22542 -0.399314 20 -5.19775 0.570185 -0.399076 20 -5.22277 -0.208824 -0.398848 20 -5.22437 0.078464 -0.398612 20 -5.19812 0.528963 -0.39861 20 -5.19445 0.545093 -0.398376 20 -5.20112 0.455099 -0.398144 20 -5.21854 -0.0691542 -0.397914 20 -5.21628 0.168555 -0.397912 20 -5.21299 0.250468 -0.397911 20 -5.20679 0.35686 -0.397911 20 -5.19768 0.471267 -0.39791 20 -5.21585 -0.110086 -0.39768 20 -5.20933 0.283118 -0.397678 20 -5.19342 0.495577 -0.397677 20 -5.21503 0.00464104 -0.397446 20 -5.20108 0.38112 -0.397444 20 -5.20953 -0.126298 -0.396981 20 -5.21079 -0.0526392 -0.39698 20 -5.20969 0.119244 -0.396979 20 -5.19064 0.437814 -0.396744 20 -5.20624 -0.0934727 -0.396514 20 -5.19599 0.339782 -0.396511 20 -5.20497 -0.0361987 -0.39628 20 -5.20473 0.0619134 -0.39628 20 -5.20288 0.151832 -0.396279 20 -5.20307 0.0210361 -0.396047 20 -5.18472 0.412758 -0.395811 20 -5.19738 0.13536 -0.395579 20 -5.17206 0.510039 -0.395344 20 -5.18836 0.265744 -0.395112 20 -5.19304 0.0373603 -0.39488 20 -5.18962 0.192308 -0.394879 20 -5.18899 0.20861 -0.394879 20 -5.18315 0.322662 -0.394878 20 -5.18215 0.30627 -0.394645 20 -5.18718 -0.0196877 -0.394181 20 -5.17212 0.395478 -0.394178 20 -5.18438 0.0943529 -0.393946 20 -5.18037 0.224606 -0.393946 20 -8.80421 0.482359 -0.387205 55 -8.7922 0.357172 -0.385987 84 -8.78904 0.384711 -0.385851 85 -8.78929 0.329411 -0.385716 86 -8.77977 0.453434 -0.385444 88 -8.77982 0.41197 -0.385309 86 -8.78163 0.260104 -0.385039 66 -8.77279 0.287452 -0.384497 43 -8.76146 0.190714 -0.383549 79 -8.76046 0.232 -0.383549 77 -6.83066 -0.352231 -0.381859 77 -5.9911 -0.498623 -0.381029 77 -6.81979 -0.330237 -0.38082 74 -6.80933 -0.29762 -0.37978 163 -6.78278 -0.125936 -0.377007 84 -6.76919 -0.104467 -0.375794 104 -6.76949 -0.0831999 -0.375794 93 -6.76981 -0.051299 -0.375794 79 -6.76219 -0.157512 -0.375275 124 -6.75997 -0.0300246 -0.374928 76 -6.76003 -0.00878867 -0.374927 68 -6.7485 -0.27396 -0.374409 89 -6.75111 -0.199741 -0.374409 110 -6.7517 -0.178529 -0.374409 115 -6.74447 -0.220775 -0.373889 117 -6.74794 0.0441815 -0.373888 56 -5.54295 0.999375 -0.373714 40 -6.74207 0.0229383 -0.373368 77 -6.7334 -0.25222 -0.373023 112 -5.54637 0.776721 -0.370394 40 -5.52229 0.870932 -0.369355 56 -5.57306 -0.24888 -0.368116 40 -5.51191 0.83391 -0.367694 71 -5.52235 0.746974 -0.367487 40 -5.50729 0.850928 -0.367487 82 -5.56052 -0.33587 -0.367286 83 -5.56005 -0.309542 -0.367079 43 -5.56658 -0.152234 -0.367077 40 -5.5079 0.80681 -0.366864 40 -5.48392 0.94464 -0.366656 43 -5.55925 -0.19571 -0.366455 40 -5.47745 0.970136 -0.366448 40 -5.5045 0.788684 -0.366241 40 -5.55464 -0.213004 -0.36604 40 -5.47901 0.926119 -0.365826 90 -6.1011 1.13018 -0.365819 40 -5.5517 -0.108126 -0.365416 40 -5.54599 -0.230086 -0.36521 40 -5.50297 0.726856 -0.365204 40 -5.49755 0.691072 -0.364166 40 -5.53626 -0.168673 -0.363964 40 -5.53017 0.309661 -0.36396 40 -5.52812 -0.272778 -0.363549 40 -5.53323 -0.133769 -0.363548 40 -5.53411 -0.0903065 -0.363548 40 -5.5206 -0.368108 -0.363342 40 -5.52525 -0.290029 -0.363342 40 -5.53266 -0.0468144 -0.36334 40 -5.52321 0.326707 -0.363338 40 -5.51556 -0.411298 -0.363135 40 -5.45918 0.887645 -0.363127 70 -5.52249 0.265785 -0.362923 40 -5.51285 -0.393668 -0.36272 40 -5.52641 -0.072779 -0.362717 40 -5.52688 -0.0120095 -0.362717 40 -5.48154 0.706625 -0.362713 40 -5.51932 0.248275 -0.362508 40 -5.52291 0.00536752 -0.362302 40 -5.44851 0.903526 -0.362296 72 -5.52085 -0.0293131 -0.362094 40 -5.50036 -0.427481 -0.361682 40 -5.51686 0.0313887 -0.361679 40 -5.51673 0.0487191 -0.361679 40 -5.51315 0.204662 -0.361677 40 -7.02648 0.254222 -0.361504 81 -5.5135 0.126665 -0.36147 40 -7.01928 0.331293 -0.361179 40 -5.49791 -0.349139 -0.360851 63 -5.50688 0.15251 -0.360847 40 -5.50581 0.187108 -0.360847 40 -5.50131 0.290849 -0.360847 40 -5.50218 0.230269 -0.360639 40 -5.48747 0.463349 -0.360638 59 -7.01369 0.275868 -0.360528 55 -5.5024 0.169706 -0.360432 40 -5.48494 0.445802 -0.360223 66 -5.4797 0.506084 -0.360222 40 -7.00426 0.352693 -0.360039 40 -5.49995 0.109134 -0.360017 40 -5.4773 0.488533 -0.359807 40 -5.47412 0.522939 -0.359807 40 -5.49666 0.065906 -0.359602 40 -5.47835 0.402031 -0.359185 40 -6.99439 0.308195 -0.359063 40 -5.46453 0.539389 -0.358977 40 -6.99536 0.231211 -0.358901 51 -5.47792 0.350147 -0.35877 40 -5.47561 0.384558 -0.35877 40 -5.48634 0.0916896 -0.358564 40 -5.44746 0.641621 -0.358353 60 -5.47084 0.366983 -0.358147 40 -5.46647 0.427114 -0.358147 64 -5.44748 0.624287 -0.358146 79 -5.43949 0.658042 -0.35773 40 -5.44609 0.563572 -0.357316 40 -5.44244 0.597778 -0.357315 72 -5.43638 0.579871 -0.356485 40 -6.91578 -0.325488 -0.352721 40 -5.6431 0.930129 -0.352077 40 -5.62975 0.900618 -0.350305 40 -5.62469 0.881658 -0.349518 40 -5.60394 1.00513 -0.349517 40 -5.62547 0.863672 -0.349321 40 -5.63011 0.819167 -0.349124 40 -5.60316 0.986809 -0.349124 40 -5.59504 0.940063 -0.347549 40 -5.59206 0.957634 -0.347549 40 -6.84186 0.366667 -0.346859 40 -6.7855 0.890664 -0.346205 141 -5.60115 0.796846 -0.345974 40 -5.59472 0.840812 -0.345974 40 -5.63785 -0.363941 -0.345194 40 -5.59574 0.778113 -0.345187 40 -5.60001 0.716017 -0.344793 40 -5.59343 0.750914 -0.344596 40 -6.81351 -0.373952 -0.344585 40 -5.62307 -0.345326 -0.343618 40 -5.58196 0.731463 -0.343218 40 -5.58556 0.687348 -0.343021 40 -6.80171 -0.169891 -0.342956 90 -6.80265 -0.127151 -0.342956 86 -5.58779 0.652001 -0.342825 40 -5.58571 0.669553 -0.342824 40 -6.79719 -0.0949888 -0.342468 85 -6.79764 0.0545008 -0.342467 86 -5.60571 -0.423938 -0.342438 40 -6.79318 -0.191004 -0.342305 86 -6.79367 -0.0522326 -0.342142 84 -6.79185 -0.0202045 -0.341979 87 -6.78549 -0.244114 -0.341818 84 -6.78623 -0.222796 -0.341817 82 -6.78826 -0.148166 -0.341817 89 -6.78988 0.00114041 -0.341816 83 -6.78785 0.0224728 -0.341653 80 -6.78071 -0.265259 -0.341492 86 -6.7855 -0.0734587 -0.341491 83 -6.78547 0.0757685 -0.34149 82 -6.77922 0.097023 -0.341002 76 -6.76943 -0.296734 -0.340679 72 -5.56609 0.63164 -0.340462 40 -5.58517 -0.404843 -0.340272 40 -5.58305 -0.378269 -0.339878 40 -5.57379 0.367618 -0.338888 40 -5.54928 0.523867 -0.337706 40 -5.55124 0.480088 -0.337509 40 -5.54365 0.540893 -0.337312 40 -5.53906 0.566799 -0.337115 40 -5.53329 0.583762 -0.336721 40 -5.53703 0.5051 -0.336328 40 -5.55343 0.226169 -0.336133 40 -5.55244 0.199916 -0.335936 40 -5.54283 0.38293 -0.335935 40 -5.55232 0.138794 -0.335739 40 -5.54472 0.321837 -0.335738 40 -5.5519 0.0428165 -0.335543 40 -5.54509 0.27817 -0.335542 40 -5.54372 0.304299 -0.335542 40 -5.54169 0.339124 -0.335541 40 -5.5329 0.460899 -0.335541 40 -5.78112 1.05353 -0.335153 40 -5.54808 -0.000808223 -0.33515 40 -5.54676 0.121191 -0.335149 40 -5.54512 0.103718 -0.334952 40 -5.52639 0.442843 -0.334753 40 -6.69077 0.390765 -0.334654 53 -5.54205 0.0252808 -0.334559 40 -5.53967 0.164546 -0.334558 40 -5.53912 0.181947 -0.334558 40 -5.53679 0.242841 -0.334557 40 -5.536 0.260236 -0.334557 40 -8.75197 0.428656 -0.334441 77 -5.53979 0.0600714 -0.334362 40 -5.77621 1.02458 -0.334224 40 -5.5218 0.424993 -0.334163 40 -8.7451 0.359468 -0.33382 79 -8.73677 0.524234 -0.333819 65 -6.28356 0.0590924 -0.333522 40 -8.73264 0.455163 -0.333322 78 -8.73613 0.276619 -0.333075 75 -8.73134 0.40009 -0.333074 77 -5.51183 0.39805 -0.332981 40 -8.73023 0.331339 -0.332826 44 -5.82251 -0.570989 -0.332746 40 -6.6254 0.838544 -0.332699 40 -8.72935 0.235208 -0.332578 79 -8.71845 0.495594 -0.332577 79 -8.71726 0.303383 -0.331956 63 -8.71608 0.20741 -0.331708 45 -6.63777 0.408801 -0.330423 98 -5.78464 -0.548754 -0.329029 40 -6.6086 0.427957 -0.328145 103 -5.77444 -0.529435 -0.327913 42 -6.59457 0.458312 -0.327168 112 -5.75506 -0.500223 -0.325869 57 -5.73677 -0.480389 -0.32401 40 -5.64055 0.855633 -0.31917 40 -5.62185 0.898076 -0.318054 40 -5.62744 0.83564 -0.317683 40 -5.61506 0.91511 -0.317682 40 -5.61283 0.878617 -0.316939 40 -5.61623 0.816016 -0.316382 40 -5.61212 0.788469 -0.315638 40 -5.63059 0.548894 -0.314711 40 -5.62505 0.584063 -0.314524 40 -7.72819 -0.387502 -0.313914 43 -5.61431 0.60974 -0.313781 40 -5.56891 0.925761 -0.313593 40 -5.56449 0.951993 -0.313593 40 -5.55754 0.968803 -0.313221 58 -5.92328 1.22553 -0.313074 57 -5.62977 -0.328684 -0.313043 40 -5.61489 0.50297 -0.312852 40 -5.60049 0.626103 -0.312666 40 -5.58299 0.766646 -0.312665 40 -5.63336 0.0166113 -0.312483 40 -5.91929 1.20529 -0.312381 81 -5.62922 -0.045279 -0.312112 40 -5.61465 0.378755 -0.311923 40 -5.57747 0.748079 -0.311922 40 -5.62532 0.0342988 -0.31174 40 -5.60602 0.466744 -0.311737 40 -5.59542 0.519033 -0.311179 40 -5.57957 0.668248 -0.311179 40 -5.58068 0.641728 -0.310993 40 -5.57547 0.68554 -0.310993 40 -5.61546 -0.000999242 -0.310811 40 -5.57131 0.702812 -0.310807 40 -5.56907 0.720312 -0.310806 40 -5.59625 0.439441 -0.310622 40 -5.59479 -0.432461 -0.310442 40 -5.58325 0.562201 -0.310436 40 -5.89963 1.18189 -0.310302 88 -5.58865 0.483055 -0.31025 40 -5.59164 0.421436 -0.310065 40 -5.60146 -0.0273284 -0.30951 40 -5.58697 0.403464 -0.309507 40 -5.58897 -0.343739 -0.309326 40 -5.58705 -0.30838 -0.308954 40 -5.8895 1.15095 -0.308916 93 -5.58724 -0.0623029 -0.308209 40 -5.56761 -0.447839 -0.308026 40 -5.58303 -0.0797788 -0.307838 40 -5.87745 1.12937 -0.30753 81 -5.56743 -0.368665 -0.307468 40 -5.87705 1.11014 -0.307184 88 -5.57264 -0.105853 -0.306908 40 -5.56259 -0.280622 -0.306538 40 -5.55035 -0.384977 -0.305981 40 -5.55022 0.3572 -0.30579 40 -5.55611 0.200088 -0.305605 65 -7.03138 0.199433 -0.305413 40 -5.92083 -0.673976 -0.305289 74 -5.86404 1.05996 -0.305278 143 -5.85702 1.08721 -0.305105 75 -5.53919 -0.401645 -0.305052 40 -5.54554 -0.262215 -0.304865 40 -5.54435 -0.244694 -0.304679 40 -5.53938 0.339088 -0.304675 40 -5.91801 -0.626648 -0.304595 66 -5.54441 -0.122611 -0.304306 40 -5.90905 -0.653898 -0.304076 125 -7.00843 0.231758 -0.303799 40 -5.90805 -0.606884 -0.303556 74 -5.53218 -0.200573 -0.303378 40 -5.52918 -0.226548 -0.303192 40 -5.52288 0.277256 -0.302817 40 -5.52198 0.294604 -0.302817 40 -5.86894 0.843073 -0.302681 40 -5.52482 -0.182889 -0.302634 40 -5.5273 0.0775666 -0.302632 120 -5.52174 0.25982 -0.302631 40 -5.52504 0.0949075 -0.302446 112 -5.51815 0.138176 -0.301888 83 -5.51756 0.0601412 -0.301703 175 -5.51675 0.112139 -0.301703 101 -5.51518 0.172791 -0.301702 102 -5.5091 0.311334 -0.301702 40 -5.51371 0.155417 -0.301517 119 -5.88414 -0.585869 -0.301303 91 -5.50817 -0.138957 -0.300961 40 -5.50499 0.233121 -0.300959 40 -5.81246 1.03154 -0.300428 102 -5.86898 -0.556519 -0.299744 82 -5.48755 -0.164222 -0.299103 40 -5.85482 -0.536693 -0.298358 78 -5.84655 -0.517463 -0.297492 134 -5.84418 -0.498771 -0.297145 55 -5.84646 -0.471227 -0.297145 40 -5.76793 0.911566 -0.294885 40 -6.82136 0.916221 -0.294261 40 -5.74992 0.871619 -0.292806 40 -5.73885 0.85144 -0.291593 40 -5.79052 0.325668 -0.291423 40 -5.74965 0.696666 -0.290728 40 -5.72354 0.885914 -0.290727 40 -5.77466 0.388461 -0.290383 40 -5.74996 0.660054 -0.290381 40 -5.74804 0.641528 -0.290035 40 -5.76989 0.369908 -0.289863 40 -5.70658 0.929194 -0.28986 40 -5.74696 0.595719 -0.289515 40 -5.74308 0.61355 -0.289342 40 -5.73599 0.676661 -0.289342 40 -5.72221 0.784654 -0.289341 40 -5.76163 0.342079 -0.288997 40 -5.75553 0.40526 -0.288824 40 -5.74353 0.54977 -0.288823 40 -5.74088 0.576829 -0.288823 40 -5.74959 0.432062 -0.288477 40 -5.75372 0.3053 -0.288131 40 -6.78539 0.394483 -0.287957 40 -5.70395 0.800341 -0.287955 40 -6.78827 -0.299088 -0.287814 40 -5.73333 0.530569 -0.287783 40 -5.67511 0.960591 -0.287608 42 -5.73485 0.467155 -0.287437 40 -6.78866 -0.0536749 -0.287373 40 -6.78846 0.0742905 -0.287372 40 -5.7343 0.448971 -0.287264 40 -6.78273 -0.170873 -0.28708 40 -6.78247 -0.0749573 -0.286933 40 -6.78125 0.148774 -0.286931 40 -6.77786 -0.202731 -0.286787 40 -6.77968 -0.128194 -0.286786 40 -6.78089 -0.000384375 -0.286786 40 -6.77821 -0.0962221 -0.286639 40 -5.72108 0.511249 -0.286571 40 -6.77246 -0.245185 -0.286494 40 -6.77623 0.0954026 -0.286492 40 -6.7759 0.116691 -0.286491 40 -6.76421 0.414501 -0.28649 40 -6.77121 -0.223848 -0.286347 40 -6.77326 -0.149383 -0.286346 40 -5.98245 1.23282 -0.286158 40 -8.80748 0.557291 -0.286091 80 -6.77088 -0.0216938 -0.286052 40 -5.69296 0.71679 -0.28605 40 -8.8037 0.58483 -0.285978 79 -6.7669 0.0208205 -0.285759 40 -5.71351 0.4834 -0.285705 40 -5.68673 0.734142 -0.285703 40 -5.64895 0.983468 -0.285702 78 -5.7315 0.0696265 -0.285534 60 -8.79962 0.487471 -0.285417 84 -8.79185 0.611823 -0.285416 74 -5.68044 0.751465 -0.285357 40 -6.76081 0.0420209 -0.285318 40 -8.8066 0.210746 -0.285193 87 -8.79965 0.362797 -0.28508 84 -8.79125 0.528593 -0.285079 86 -5.71928 0.276288 -0.285013 40 -5.64864 0.93773 -0.28501 108 -8.79254 0.431713 -0.284855 82 -8.79114 0.459334 -0.284855 84 -8.79248 0.390193 -0.284743 85 -8.79751 0.169082 -0.284631 91 -8.79512 0.265804 -0.284631 82 -8.79392 0.238121 -0.284519 81 -8.79077 0.334802 -0.284518 88 -8.79025 0.29331 -0.284406 87 -8.78602 0.141283 -0.283957 91 -6.73379 -0.265114 -0.283707 40 -8.77843 0.113602 -0.283508 50 -5.95103 1.1973 -0.283067 40 -5.95085 1.17784 -0.282741 40 -5.66708 -0.439659 -0.281379 53 -5.67339 -0.314836 -0.281205 40 -5.93494 1.15542 -0.281114 40 -5.66875 -0.359268 -0.281032 63 -8.7112 -0.325115 -0.280026 40 -5.65566 -0.376335 -0.279993 69 -5.64657 -0.420327 -0.279474 40 -5.98744 -0.666575 -0.279334 40 -5.65048 -0.331474 -0.2793 40 -5.64053 -0.393197 -0.278781 65 -8.68564 -0.365085 -0.278678 40 -8.6665 -0.391504 -0.277666 40 -5.637 0.192097 -0.277564 138 -5.97485 -0.53234 -0.277218 40 -5.88955 1.12761 -0.277046 40 -5.62409 0.21814 -0.276524 135 -5.95385 -0.643748 -0.276405 40 -6.59213 0.789805 -0.276366 40 -6.62358 0.426236 -0.276222 40 -6.58764 0.810258 -0.27622 40 -5.88982 1.06071 -0.27607 131 -6.60695 0.519011 -0.275488 72 -5.61487 0.129443 -0.275485 147 -5.61022 0.155771 -0.275139 151 -5.60928 0.111656 -0.274966 137 -5.60771 0.173325 -0.274966 165 -5.93801 -0.623091 -0.27494 40 -5.59366 0.0936917 -0.27358 177 -5.92106 -0.593029 -0.273313 40 -5.91099 -0.573216 -0.272337 40 -6.56481 0.494781 -0.272261 111 -6.56434 0.474003 -0.272114 88 -6.56182 0.453087 -0.271821 59 -6.54681 0.54511 -0.271234 77 -5.88697 -0.552112 -0.270221 40 -5.79152 0.912551 -0.266144 40 -5.84936 -0.335787 -0.265826 40 -7.59197 0.945536 -0.26522 40 -5.75811 0.944528 -0.263866 40 -5.73 0.967773 -0.261913 40 -6.89579 -0.288678 -0.257146 161 -6.83564 0.878472 -0.256462 40 -5.74043 0.104176 -0.256222 47 -5.70887 -0.408166 -0.254761 40 -6.78683 0.818281 -0.252669 56 -6.81797 -0.167172 -0.251591 81 -6.80431 0.43232 -0.251452 71 -6.80812 -0.231121 -0.251049 85 -6.80317 -0.305866 -0.250914 48 -6.8078 0.0577244 -0.250776 91 -6.80472 -0.134713 -0.250642 97 -6.80579 -0.0598846 -0.250642 92 -6.80604 0.0149515 -0.250641 92 -6.80311 -0.113294 -0.250507 98 -6.8036 0.079079 -0.250505 91 -6.80144 -0.0918857 -0.250371 91 -6.79747 -0.187964 -0.250236 84 -6.79996 -0.0384446 -0.250235 87 -6.79716 0.111066 -0.250099 107 -6.73982 0.888045 -0.250094 40 -6.79286 -0.209179 -0.249965 86 -6.78702 -0.262355 -0.249695 75 -6.79007 -0.0170198 -0.249558 84 -6.72275 0.93961 -0.249417 40 -5.65374 0.147418 -0.249225 57 -6.78401 0.0363001 -0.249151 98 -6.7724 0.398389 -0.249149 142 -5.64927 0.165081 -0.248899 43 -6.68313 0.977054 -0.247113 40 -5.62229 0.129072 -0.246621 53 -6.70015 0.786826 -0.246572 91 -6.66689 0.761835 -0.244134 93 -6.69896 -0.353533 -0.244005 40 -6.6894 0.446561 -0.243729 96 -6.67602 0.466784 -0.242916 107 -6.64488 0.5592 -0.24129 95 -6.62476 0.72559 -0.241018 78 -6.6419 0.495986 -0.240748 123 -6.63865 0.537708 -0.240748 101 -6.62837 0.515966 -0.239935 116 -6.6203 0.588648 -0.239799 84 -6.61132 0.682177 -0.239799 69 -8.86777 0.322464 -0.239163 40 -7.9339 0.931769 -0.238996 49 -6.57867 0.605938 -0.23709 112 -6.57371 0.657589 -0.237089 85 -6.57474 0.626423 -0.236954 97 -7.94132 -0.381571 -0.236867 40 -6.55753 0.69766 -0.236276 131 -8.77707 0.734148 -0.235823 40 -8.77315 0.539812 -0.234913 82 -8.7664 0.484098 -0.234408 82 -8.75673 0.635489 -0.234407 65 -8.75945 0.56656 -0.234306 77 -8.76521 0.387396 -0.234105 82 -8.76395 0.414931 -0.234105 83 -8.75885 0.511269 -0.234104 79 -8.76494 0.346002 -0.234004 75 -8.74672 0.66237 -0.234002 69 -8.76887 0.125593 -0.233904 87 -8.76422 0.249484 -0.233802 81 -8.75462 0.442035 -0.2337 84 -8.76097 0.221834 -0.2336 87 -8.75706 -0.218548 -0.2334 75 -8.75363 0.19411 -0.233196 88 -8.74908 -0.287138 -0.233097 106 -8.75328 -0.0946805 -0.233096 68 -8.75179 0.00156264 -0.232994 54 -8.75125 0.097792 -0.232994 88 -8.7236 0.701918 -0.232991 51 -8.74954 -0.0671638 -0.232893 78 -8.74821 0.166477 -0.232892 90 -8.7288 0.605815 -0.23289 110 -8.74552 0.0702323 -0.23269 90 -8.74176 0.0289947 -0.232488 87 -8.73853 -0.14948 -0.232388 123 -6.52651 -0.364329 -0.232354 40 -8.73436 -0.245504 -0.232288 65 -8.72617 -0.313898 -0.231984 135 -8.72774 -0.190469 -0.231883 75 -8.72379 -0.0259305 -0.231578 128 -7.79191 0.890762 -0.230791 84 -8.66526 -0.339147 -0.22895 59 -7.71329 0.943443 -0.226745 40 -7.6865 0.964766 -0.225396 40 -6.90463 0.430615 -0.219616 63 -6.84456 0.904536 -0.218743 40 -6.89503 -0.263901 -0.218501 63 -6.80118 0.800938 -0.215264 102 -6.78801 0.875146 -0.215015 40 -6.8139 0.4999 -0.214272 102 -6.81793 -0.336339 -0.213904 40 -6.79438 0.519865 -0.213153 88 -6.79571 0.444851 -0.212905 74 -6.79155 0.476724 -0.21278 91 -6.79044 -0.281656 -0.212039 40 -6.79008 -0.238922 -0.211915 70 -6.78831 -0.164169 -0.211666 92 -6.78828 -0.014861 -0.211541 103 -6.7834 -0.110772 -0.211293 87 -6.78404 0.0597277 -0.211292 94 -6.77977 -0.185305 -0.211169 89 -6.77972 -0.0894252 -0.211044 83 -6.78025 0.0277284 -0.211043 93 -6.77681 -0.142635 -0.21092 90 -6.77555 0.102201 -0.210794 92 -6.77398 -0.0680898 -0.210671 80 -6.77423 -0.0361663 -0.210671 76 -6.77432 0.00639854 -0.210671 87 -6.77184 0.080853 -0.210546 98 -6.75703 -0.354848 -0.210176 40 -6.75488 -0.216578 -0.209678 63 -6.65738 0.975076 -0.207807 40 -6.65251 0.952995 -0.20731 40 -6.64705 0.920227 -0.206689 40 -6.64096 0.560049 -0.203833 109 -6.63321 0.580363 -0.20346 106 -6.61683 0.536982 -0.202217 105 -5.97337 1.19485 -0.202132 40 -5.95589 1.21088 -0.201184 40 -6.563 0.740619 -0.200103 58 -5.93582 1.15846 -0.199152 40 -6.54496 0.603398 -0.198116 63 -5.92178 1.1365 -0.197932 40 -7.23753 -0.242945 -0.196967 40 -6.52118 0.621786 -0.196749 135 -5.90569 1.11428 -0.196578 40 -6.53481 -0.395511 -0.196506 40 -6.49411 0.691258 -0.195506 118 -6.49537 0.639825 -0.195257 69 -6.48794 0.711206 -0.195257 85 -6.48538 0.65939 -0.19476 109 -5.87552 1.08009 -0.194139 40 -5.94063 -0.611133 -0.194014 40 -5.93259 -0.591435 -0.193336 40 -5.92479 -0.628261 -0.193066 40 -5.92648 -0.571991 -0.192794 40 -5.92086 -0.524505 -0.192117 40 -5.90925 -0.542149 -0.191439 40 -8.90251 -0.325426 -0.190351 31 -7.83884 0.93913 -0.189593 54 -5.85865 -0.453834 -0.18751 40 -5.80702 0.899025 -0.187501 41 -8.79587 0.508455 -0.185949 76 -5.77416 0.940548 -0.18574 40 -8.78652 0.563346 -0.185679 69 -8.80241 0.0520079 -0.185592 31 -8.77674 0.590434 -0.18532 91 -8.78363 0.438608 -0.185231 63 -8.78609 0.0933645 -0.184874 77 -5.76472 0.911209 -0.184792 40 -8.78189 0.217519 -0.184784 78 -8.7683 0.534582 -0.184782 104 -8.7777 -0.292888 -0.184697 114 -8.78133 0.148512 -0.184694 77 -8.77024 0.465598 -0.184693 61 -8.77317 0.244908 -0.184425 113 -5.75148 0.955502 -0.184385 43 -8.77254 0.189742 -0.184335 108 -8.76977 0.120794 -0.184156 107 -6.97615 0.60107 -0.183474 40 -6.91831 0.92619 -0.182237 40 -7.68524 0.944725 -0.181905 59 -6.95078 0.544035 -0.181789 40 -6.95117 -0.112109 -0.180669 64 -8.68531 -0.357848 -0.180658 30 -8.67416 -0.384658 -0.18021 30 -6.93835 -0.155469 -0.179994 70 -5.74861 -0.39941 -0.179787 40 -6.91262 0.519353 -0.179541 40 -6.93008 0.0189526 -0.179431 69 -7.62723 0.97392 -0.179173 46 -6.92188 -0.0571499 -0.178982 54 -6.91758 -0.187545 -0.178871 40 -6.91613 -0.00275948 -0.178645 70 -6.91368 -0.0787763 -0.178533 96 -6.90886 -0.13298 -0.178308 90 -6.90605 -0.0352636 -0.178083 58 -8.60706 -0.408584 -0.177248 40 -6.89005 0.0406394 -0.177183 71 -6.83343 0.882406 -0.177179 40 -6.87591 0.0622117 -0.176396 43 -6.74514 0.925233 -0.172571 40 -6.73231 0.945069 -0.172008 40 -6.78393 -0.3756 -0.171791 40 -6.70755 0.963176 -0.170772 40 -6.66737 0.989632 -0.168749 40 -6.70165 0.599655 -0.168076 66 -6.56971 0.734251 -0.161444 103 -6.57642 0.609762 -0.161108 91 -6.58751 -0.415903 -0.160889 40 -6.56751 0.640188 -0.160771 85 -6.56118 0.702055 -0.16077 76 -6.54956 0.65928 -0.159871 119 -6.53951 0.679059 -0.159422 97 -8.14349 0.936621 -0.158394 40 -5.81179 0.932032 -0.155365 40 -5.80429 0.97765 -0.155365 40 -8.04572 0.96411 -0.154176 28 -5.79498 0.910585 -0.154123 40 -5.76797 0.952729 -0.15288 40 -5.80383 -0.271912 -0.15065 40 -5.7327 -0.395362 -0.146674 43 -5.71458 -0.367155 -0.145432 40 -6.9154 -0.101991 -0.14003 81 -7.71135 0.949705 -0.139187 27 -6.7511 0.880605 -0.134563 139 -6.73643 0.900178 -0.133956 60 -5.99061 0.911083 -0.130423 40 -6.65997 0.942989 -0.130415 57 -8.7992 0.22939 -0.129907 32 -8.76124 0.54551 -0.128981 32 -8.75652 0.48998 -0.128673 32 -8.76591 0.200866 -0.128597 32 -8.75914 0.352206 -0.128519 32 -8.75918 0.297091 -0.128443 32 -8.75723 0.131833 -0.128213 32 -8.75651 0.173099 -0.128212 32 -8.75222 0.324366 -0.128212 32 -8.73676 0.612844 -0.12821 86 -8.74476 0.447952 -0.128134 32 -8.74281 -0.308013 -0.12783 32 -8.731 0.516002 -0.127748 32 -8.73851 0.255103 -0.127596 32 -8.7236 0.570578 -0.127594 118 -8.73175 -0.280196 -0.127368 32 -8.73163 0.103936 -0.127211 32 -8.71992 0.0763611 -0.126749 32 -6.5532 0.969512 -0.125256 66 -5.88856 0.943354 -0.125028 40 -5.88899 0.914999 -0.124803 40 -5.85796 0.957461 -0.123454 40 -6.54058 0.561128 -0.122223 41 -6.52405 0.611315 -0.121616 164 -6.51251 0.723945 -0.121615 151 -6.51216 0.630806 -0.12111 104 -6.50483 0.702372 -0.121109 97 -6.51201 0.5895 -0.120908 63 -6.5022 0.650435 -0.120705 139 -5.87306 -0.386502 -0.120652 40 -6.4931 0.680418 -0.120401 123 -8.11182 0.9788 -0.105561 30 -6.94882 0.880545 -0.104813 23 -6.89505 0.906952 -0.10257 23 -6.88232 -0.0509649 -0.0993434 23 -6.86105 0.543076 -0.0993402 131 -6.86073 0.521376 -0.0992506 77 -6.85636 0.499405 -0.0989814 105 -6.85894 -0.147696 -0.0983568 81 -6.85445 -0.16913 -0.0981775 86 -6.8539 -0.0937171 -0.0980873 101 -6.84739 -0.125883 -0.0978181 71 -6.84849 -0.0290682 -0.0978175 90 -6.8436 -0.201097 -0.0977289 65 -6.84056 0.00322939 -0.0974584 97 -7.87081 0.923855 -0.0960871 28 -5.97243 0.948513 -0.0960209 56 -6.74069 0.930337 -0.0958382 23 -5.93485 0.904162 -0.0937956 65 -5.96685 -0.35437 -0.0924877 148 -6.61449 0.96638 -0.090453 22 -5.82153 0.90513 -0.0881307 53 -6.57523 0.740367 -0.0874025 56 -5.8389 -0.384151 -0.086115 134 -5.84277 -0.319926 -0.0861146 130 -6.55807 0.592851 -0.0859672 22 -5.83976 -0.301379 -0.0859121 88 -6.57072 -0.398937 -0.0858833 22 -6.53779 0.715517 -0.0856077 76 -5.82871 -0.282506 -0.085305 112 -6.54198 0.570753 -0.0851596 52 -6.52537 0.641712 -0.0847105 101 -6.52332 0.662209 -0.0847104 109 -6.51922 0.682499 -0.0846205 89 -6.50745 0.619396 -0.0838131 59 -8.74549 -0.306857 -0.0732873 90 -8.73196 -0.347551 -0.0729007 83 -8.59317 0.944529 -0.0698641 40 -5.95809 0.911334 -0.0609255 19 -5.9399 0.937282 -0.0602972 19 -5.99727 0.222793 -0.0597623 19 -5.9606 0.240339 -0.0581466 75 -5.93578 -0.339155 -0.0572528 19 -5.93985 0.258284 -0.057249 128 -5.93084 -0.320154 -0.0569834 19 -5.92659 0.285746 -0.0567104 63 -5.90778 -0.402664 -0.0561763 40 -5.90036 -0.29049 -0.0555473 51 -6.83572 0.495412 -0.0548012 58 -6.798 0.567761 -0.0535683 24 -6.80701 -0.0957938 -0.0530331 24 -6.78382 0.545058 -0.0529523 37 -6.78432 0.512926 -0.0528753 41 -6.77429 0.587131 -0.0527209 24 -6.79728 -0.0743387 -0.0526478 24 -6.79769 0.000404661 -0.0526473 24 -6.73995 0.88415 -0.0526424 24 -6.78606 -0.148892 -0.0522631 24 -6.78357 -0.170167 -0.0521863 24 -6.78549 -0.0529346 -0.0521854 24 -6.78566 0.0216762 -0.052185 24 -6.78367 -0.0209616 -0.0521083 24 -6.78069 -0.11683 -0.0520319 24 -6.74903 -0.190647 -0.0508769 31 -6.67489 0.918081 -0.0503312 23 -7.91062 0.896735 -0.0478186 40 -7.84619 0.914609 -0.0458202 74 -6.49138 0.726347 -0.0423981 49 -6.49702 0.634103 -0.0422446 22 -6.49301 0.654303 -0.0421674 22 -6.47595 0.683369 -0.0416281 47 -6.46384 0.70259 -0.0412428 73 -7.67803 0.956725 -0.0405987 40 -8.74324 -0.257724 -0.0284726 58 -8.73193 -0.298613 -0.0282019 76 -8.54288 0.945944 -0.0243491 57 -8.48869 0.980306 -0.0229948 45 -5.90673 -0.300186 -0.0186023 20 -5.89977 -0.318443 -0.0183714 20 -5.87256 -0.261625 -0.0172155 30 -5.86971 -0.279985 -0.0171386 38 -6.85364 0.55226 -0.0128179 69 -6.86717 -0.192169 -0.012629 40 -6.81209 0.873509 -0.0125585 40 -6.82918 0.604383 -0.0121731 91 -6.82706 0.582602 -0.0120443 87 -6.79982 0.72046 -0.0115923 40 -6.81451 -0.136937 -0.0108882 82 -6.81005 -0.158239 -0.0107595 74 -6.74982 0.887319 -0.0106245 40 -6.70989 0.914393 -0.00946417 40 -6.57936 0.656189 -0.00430857 40 -6.57328 0.676461 -0.00417952 40 -6.55052 0.622277 -0.00327732 40 -7.71157 0.91273 -0.00186805 40 -7.67097 0.932243 -0.000838667 40 -7.65413 0.954558 -0.000459333 40 -6.2308 0.890869 0.00594199 40 -6.00803 0.908135 0.0129683 40 -6.00317 0.926709 0.0130329 40 -6.00492 0.888403 0.0131616 40 -6.02493 -0.336097 0.0143145 40 -6.01188 -0.354265 0.0147012 40 -5.97701 -0.399203 0.0157322 42 -5.9695 -0.285744 0.0161842 92 -5.9621 -0.313532 0.0163775 90 -5.95231 -0.37866 0.0165704 40 -5.9484 -0.265911 0.0168934 90 -6.78973 0.919751 0.0228885 40 -6.749 0.892483 0.0240802 40 -6.78543 -0.0672281 0.0246708 69 -6.78319 -0.0885267 0.0247248 75 -6.78376 0.00737308 0.0247255 58 -6.7805 -0.131114 0.0247787 71 -6.78088 -0.109812 0.0247789 76 -6.78175 -0.013941 0.0247795 53 -6.77565 0.0392632 0.0249423 40 -6.76927 -0.18413 0.0250493 50 -6.76981 -0.162864 0.0250494 57 -6.77168 -0.0352347 0.0250502 123 -5.31046 0.0491917 0.037652 56 -5.30202 0.265882 0.0377178 56 -6.23244 0.89203 0.0379481 40 -5.16306 0.31653 0.0421015 236 -6.03163 0.910869 0.0432571 40 -6.02795 0.881244 0.0434737 40 -6.08155 -0.321141 0.0435208 40 -6.01887 0.928248 0.043528 40 -6.02894 -0.36608 0.0448747 40 -6.01662 -0.336944 0.0452541 40 -5.97388 -0.381809 0.0463372 42 -5.97559 -0.278369 0.0464463 103 -5.9647 -0.296686 0.046717 98 -5.95685 -0.249456 0.0469882 84 -4.81877 0.342758 0.0531246 57 -4.81455 0.205944 0.0535104 44 -4.80785 0.326868 0.0535112 57 -4.806 0.258579 0.0537042 58 -4.80317 0.273573 0.0537687 40 -4.79716 0.364057 0.0537693 52 -4.80498 0.137583 0.0538967 48 -4.80453 0.152677 0.0538969 56 -4.80445 0.0696249 0.0539607 51 -4.80282 -0.0360134 0.0540244 49 -4.79289 0.310814 0.0540268 56 -4.78802 0.378538 0.0540272 40 -4.79893 0.0168053 0.0541537 51 -4.79603 0.167535 0.0541548 44 -4.7954 0.122286 0.0542189 54 -4.79421 0.0845951 0.0542831 43 -4.78896 -0.00574386 0.0544759 40 -4.78886 0.0318683 0.0544762 40 -4.7852 0.189791 0.0544772 47 -4.78593 0.0995323 0.0545411 52 -4.7807 -0.0507489 0.0547334 47 -4.77641 -0.0731936 0.0548622 44 -4.77293 -0.0206316 0.0549915 41 -4.75395 0.218639 0.0554444 40 -5.16308 0.397657 0.0682276 158 -6.72593 0.900957 0.0696876 30 -6.76592 -0.0342254 0.0700904 30 -6.70034 0.865525 0.0702991 30 -6.72002 -0.00214918 0.0710283 30 -6.66781 -0.0543014 0.0720881 30 -6.64761 -0.0749454 0.0724957 30 -6.51339 -0.0933728 0.0752273 30 -6.45351 0.886165 0.0752328 30 -6.36295 -0.120612 0.0782852 33 -4.74817 0.461344 0.0792791 78 -4.7444 0.498621 0.0792793 47 -6.30598 -0.228357 0.0793853 67 -4.74698 0.408562 0.0794413 49 -4.74362 0.445831 0.0794415 52 -4.73799 0.48286 0.0794959 50 -4.74148 0.378049 0.0796578 60 -4.73828 0.392766 0.0797121 58 -4.7251 0.429009 0.0799831 53 -6.27659 -0.138349 0.0800383 66 -6.18741 0.761795 0.0809404 89 -6.15549 0.866153 0.0813079 30 -6.14559 0.933783 0.0813082 30 -6.17879 -0.339962 0.0818717 30 -4.66766 0.253869 0.081878 40 -6.18277 -0.203936 0.0819134 71 -6.11881 0.910183 0.0819196 30 -6.17898 -0.252398 0.0819539 30 -6.18019 -0.155255 0.0819952 70 -6.17339 -0.184172 0.0821174 77 -6.10382 0.888438 0.0822865 30 -4.64766 0.318645 0.0823118 40 -4.64664 0.303901 0.0823659 40 -4.64689 0.267271 0.0824198 40 -4.65204 0.0699683 0.0824727 40 -4.64821 0.201455 0.0824736 40 -4.64403 0.281737 0.0824741 40 -4.63866 0.332627 0.0825286 40 -4.64615 0.150182 0.0825816 40 -4.6446 0.135517 0.0826356 40 -4.64283 0.186578 0.082636 40 -4.63886 0.230216 0.0826905 40 -4.63966 0.164533 0.0827442 40 -4.63757 0.215538 0.0827445 40 -4.63981 0.0842968 0.0827978 40 -4.63752 0.0988192 0.0828521 40 -4.63519 0.113328 0.0829064 40 -6.11044 -0.307031 0.0832989 30 -4.61434 0.04744 0.0835018 40 -6.09939 -0.287218 0.0835437 30 -6.06879 -0.371713 0.0840732 36 -6.07031 -0.26661 0.0841555 30 -6.06394 -0.352273 0.0841956 30 -6.07013 0.0196415 0.0842796 30 -5.2374 0.490761 0.100796 30 -4.89543 0.569212 0.107564 35 -4.79934 0.581473 0.109481 35 -4.78189 0.541406 0.109929 30 -6.09803 0.925647 0.110705 40 -6.10313 0.877431 0.110736 40 -6.09695 0.905879 0.110768 40 -4.74327 0.469472 0.110866 48 -6.08805 0.855673 0.111019 40 -4.75213 0.245144 0.111028 30 -4.74131 0.379243 0.11107 30 -6.09062 0.80729 0.111082 40 -4.72829 0.498073 0.111111 30 -4.73961 0.349172 0.111151 30 -4.73649 0.363918 0.111192 30 -4.72386 0.482639 0.111233 30 -4.71794 0.519517 0.111274 30 -6.07288 0.834018 0.111302 40 -4.73992 0.207278 0.111313 30 -4.73222 0.311336 0.111355 30 -6.06735 0.784706 0.111491 40 -6.06582 0.765125 0.111554 40 -6.06738 0.736283 0.111585 40 -4.7212 0.295783 0.111599 30 -6.08378 0.564268 0.111616 55 -4.72592 0.154713 0.111639 30 -4.71028 0.41417 0.111641 30 -4.71855 0.273323 0.111681 30 -6.09005 0.410774 0.111709 40 -4.72115 0.176854 0.111721 30 -6.09261 -0.336504 0.111736 40 -6.06526 0.649109 0.111773 70 -6.08578 -0.384109 0.111799 40 -6.08752 -0.355426 0.111799 40 -6.08964 -0.317171 0.111799 40 -6.09194 -0.269333 0.111799 40 -4.70099 0.428284 0.111804 30 -6.07919 0.477216 0.111804 64 -6.07209 0.515049 0.111867 62 -6.05617 0.676993 0.111868 57 -6.05401 0.696014 0.111868 40 -4.7094 0.258005 0.111884 30 -6.07477 0.428858 0.11193 40 -6.07728 0.323607 0.111992 40 -6.07513 0.361784 0.111992 40 -4.69362 0.397949 0.112008 30 -6.07674 0.294858 0.112023 40 -6.07424 0.342575 0.112023 40 -6.05611 0.580784 0.112025 79 -6.0533 0.609316 0.112025 76 -6.04187 0.713815 0.112025 40 -4.70458 0.191124 0.112047 30 -6.04937 0.628116 0.112056 75 -6.07365 0.275569 0.112086 40 -6.06737 0.389997 0.112087 40 -6.05774 0.4946 0.112119 99 -6.07479 -0.115831 0.112147 40 -6.05167 0.541973 0.11215 88 -6.07112 -0.0967008 0.11221 40 -6.07101 0.103581 0.112211 52 -4.68931 0.323542 0.112211 30 -6.06478 -0.249166 0.11224 40 -6.06818 -0.144341 0.112241 40 -6.06064 -0.296699 0.112271 40 -6.06551 0.170199 0.112274 40 -6.06494 0.189254 0.112274 40 -6.06153 -0.229975 0.112303 40 -6.0605 0.255836 0.112306 40 -6.04876 0.455576 0.112307 47 -6.06115 -0.182311 0.112335 40 -6.06032 0.208152 0.112337 40 -6.05927 0.236708 0.112337 40 -6.0577 -0.163176 0.112398 40 -6.05964 0.0557352 0.112399 57 -6.04456 -0.200888 0.112586 40 -6.04789 -0.0109262 0.112588 76 -6.0454 -0.077406 0.112619 40 -6.0397 -0.0488946 0.112713 79 -6.03783 -0.0299185 0.112745 75 -6.03779 0.0364716 0.112745 90 -6.03267 0.121724 0.112809 59 -6.03187 0.0174597 0.112839 82 -6.03144 0.074308 0.11284 91 -6.01827 0.140289 0.113029 40 -6.15963 0.90768 0.15055 51 -6.16459 0.859007 0.150568 73 -6.15255 0.88694 0.150641 79 -6.20317 -0.369273 0.150652 25 -6.19032 -0.348935 0.150779 25 -6.14673 0.748634 0.150858 59 -6.13157 0.83493 0.150895 77 -6.12622 0.814642 0.150968 88 -6.1385 0.698809 0.150986 62 -6.12801 0.785518 0.150986 63 -6.11059 0.763865 0.151168 100 -6.1113 0.725002 0.151204 110 -6.14347 -0.326735 0.151217 42 -6.11293 0.657146 0.151259 65 -6.13386 -0.229615 0.151345 66 -6.10198 0.607597 0.151404 48 -6.12297 -0.296623 0.151417 51 -6.12649 -0.142604 0.151436 71 -6.09606 0.626374 0.151441 91 -6.08896 0.674019 0.151459 101 -6.11473 -0.257683 0.151508 106 -6.11719 -0.190435 0.151509 70 -6.09191 0.587325 0.151513 42 -6.09062 0.558263 0.15155 39 -6.10789 -0.276595 0.151563 68 -6.09035 0.538958 0.151568 37 -6.10927 -0.103725 0.151601 70 -6.10457 -0.209188 0.151618 101 -6.09803 -0.160992 0.151691 100 -6.0979 -0.0555807 0.15171 63 -6.07208 0.518206 0.15175 37 -6.07169 0.498973 0.151768 40 -6.08892 -0.122431 0.151782 107 -6.09008 0.0306235 0.151783 73 -6.07478 0.403293 0.151804 39 -6.07143 0.450991 0.151804 39 -6.07402 0.384089 0.151822 39 -6.08365 0.0784017 0.151838 69 -6.07576 0.278919 0.151858 38 -6.06483 0.431381 0.151877 37 -6.062 0.469479 0.151877 38 -6.07101 0.250062 0.151912 39 -6.06522 0.364447 0.151913 38 -6.0737 -0.0743413 0.151928 102 -6.07215 -0.00754304 0.151947 85 -6.06287 0.335659 0.151949 37 -6.06286 0.297468 0.151967 38 -6.0619 0.316514 0.151967 37 -6.06605 -0.0360955 0.152002 86 -6.06587 0.0591903 0.152002 74 -6.06504 0.116356 0.152003 41 -6.06194 0.163941 0.152021 39 -6.06214 0.0115573 0.152038 73 -6.06138 0.0972554 0.152039 37 -6.06042 0.144858 0.152039 40 -6.05247 0.211301 0.152094 40 -6.04978 0.230247 0.152112 39 -6.0494 0.182674 0.15213 38 -6.26918 0.86296 0.189511 40 -6.27039 -0.314824 0.18964 40 -6.18418 0.172921 0.226393 40 -6.1819 0.240906 0.226393 40 -6.18857 0.0174534 0.226398 40 -6.18692 0.143813 0.226399 40 -6.1876 0.192454 0.226406 40 -6.19213 0.0758092 0.226412 40 -6.19458 -0.0117459 0.226418 40 -6.19434 0.0563667 0.226418 40 -6.19371 0.105015 0.226418 40 -6.19097 0.212011 0.226419 40 -6.19849 0.0369131 0.226431 40 -6.20208 -0.0799939 0.226443 40 -6.20334 0.12463 0.226451 40 -6.20852 -0.0313348 0.226463 40 -6.21239 -0.0508905 0.226476 40 -6.20585 0.329641 0.226485 40 -6.21024 0.280974 0.226491 40 -6.22179 -0.0998827 0.226508 40 -6.21709 0.26169 0.22651 40 -6.22345 -0.119476 0.226514 40 -6.21876 0.349866 0.22653 40 -6.22881 -0.148968 0.226533 40 -6.22163 0.36962 0.226543 40 -6.22181 0.399054 0.22655 40 -6.22931 0.301367 0.226556 40 -6.23775 -0.188446 0.226565 40 -6.23831 -0.16885 0.226566 40 -6.2345 0.419482 0.226595 40 -6.22951 0.488006 0.226596 40 -6.25112 -0.208567 0.226611 40 -6.23393 0.508037 0.226615 40 -6.22996 0.576725 0.226622 40 -6.24227 0.528421 0.226648 40 -6.25111 0.440255 0.226654 40 -6.26405 -0.238614 0.226656 40 -6.25296 0.469992 0.226667 40 -6.24569 0.55834 0.226667 40 -6.27726 -0.258926 0.226701 40 -6.26505 0.629473 0.226752 40 -6.271 0.649943 0.226778 40 -6.27888 0.670663 0.22681 40 -6.28786 0.601766 0.226817 40 -6.31636 -0.280583 0.22683 49 -6.28867 0.691647 0.226849 40 -6.32088 -0.350493 0.226856 70 -6.29926 0.722814 0.226895 40 -6.34093 -0.311729 0.226915 57 -6.31683 0.74486 0.22696 40 -6.31843 0.765166 0.226973 40 -6.35989 -0.332775 0.226979 130 -6.32468 0.796141 0.227005 40 -6.32612 0.816502 0.227018 40 -6.397 -0.385282 0.227108 40 -6.3445 0.889788 0.22711 76 -6.35725 0.840692 0.227129 58 -6.35474 0.252229 0.264231 18 -6.36415 0.142555 0.264285 18 -6.36147 0.28256 0.264304 19 -6.36966 0.162724 0.26434 19 -6.37307 0.0927144 0.264358 19 -6.37083 0.192808 0.264359 19 -6.3777 0.0226664 0.264395 19 -6.36682 0.373087 0.264397 19 -6.37254 0.303161 0.264415 19 -6.38152 0.0527677 0.264431 19 -6.38256 0.122979 0.26445 19 -6.37555 0.3234 0.264451 19 -6.38148 0.23332 0.264469 19 -6.37794 0.353678 0.264488 19 -6.37759 0.393877 0.264507 19 -6.37632 0.413909 0.264507 19 -6.39374 0.00270166 0.264541 19 -6.40017 0.213945 0.264634 19 -6.40938 -0.0677059 0.264687 19 -6.39481 0.465662 0.264709 19 -6.40023 0.445866 0.264745 19 -6.41763 -0.0375149 0.264761 19 -6.41732 0.0733748 0.264762 19 -6.42172 -0.0173475 0.264798 19 -6.40126 0.536999 0.264819 19 -6.40727 0.486867 0.264837 19 -6.42578 -0.158677 0.264852 34 -6.40889 0.517393 0.264874 19 -6.43624 -0.138664 0.264944 19 -6.43683 -0.108331 0.264944 19 -6.43725 -0.179148 0.264962 37 -6.44313 -0.088168 0.264999 19 -6.42344 0.559284 0.265039 19 -6.42073 0.589548 0.265039 19 -6.42084 0.609914 0.265058 19 -6.42486 0.630692 0.265113 19 -6.43362 0.682665 0.265242 19 -6.46832 -0.210394 0.265255 63 -6.44074 0.652762 0.265278 19 -6.47362 -0.230902 0.26531 71 -6.49485 -0.252003 0.265511 71 -6.49568 -0.323583 0.265547 19 -6.47914 0.70828 0.265682 19 -6.52863 -0.30454 0.265841 19 -6.50469 0.731873 0.265939 19 -6.50073 0.783185 0.265957 42 -6.50514 0.762999 0.265975 19 -6.57197 -0.275364 0.266226 19 -6.52997 0.807657 0.266251 85 -6.64644 -0.351422 0.266941 20 -6.59795 0.890138 0.266966 20 -6.58138 -0.310151 0.309755 54 -6.58634 0.331539 0.309854 88 -6.59803 0.186775 0.309948 94 -6.60757 0.259737 0.310138 76 -6.60324 0.35312 0.310139 105 -6.62258 0.166556 0.310328 117 -6.63264 0.0208825 0.310454 96 -6.63529 0.135544 0.310518 95 -6.59228 0.832797 0.310648 122 -6.6407 0.281802 0.310677 116 -6.63978 0.302663 0.310677 102 -6.64939 0.208934 0.310771 122 -6.6547 0.230005 0.310866 98 -6.65003 0.376386 0.310899 129 -6.66368 0.115071 0.310961 109 -6.65003 0.470761 0.310994 90 -6.67 0.0941983 0.311055 107 -6.67267 -0.000109863 0.311087 107 -6.67254 0.0418145 0.311087 111 -6.67237 0.062777 0.311087 113 -6.66016 0.408409 0.311089 108 -6.65771 0.502805 0.311153 130 -6.66744 0.450882 0.311247 109 -6.67481 0.430298 0.311342 107 -6.69199 0.526403 0.311723 118 -6.71459 -0.0319174 0.311751 114 -6.74445 -0.0533634 0.312226 112 -6.72619 0.55022 0.312293 108 -6.74945 -0.127655 0.312321 108 -6.76424 -0.0748515 0.312542 115 -6.73567 0.625562 0.312546 97 -6.74146 0.583393 0.312578 113 -6.77381 -0.106922 0.312701 117 -6.75057 0.658976 0.312831 108 -6.793 -0.149999 0.313017 88 -6.76749 0.606964 0.313021 113 -6.83219 -0.183231 0.31365 129 -6.83405 0.688476 0.314193 130 -6.87955 -0.206315 0.31441 122 -6.92083 -0.229476 0.315074 120 -6.89553 0.716316 0.315206 95 -6.92507 0.741261 0.315713 127 -6.97403 -0.253379 0.315929 98 -7.01271 -0.288031 0.316562 146 -6.99705 0.782049 0.316916 96 -7.079 -0.369019 0.317669 166 -7.11364 -0.314942 0.318176 121 -7.08599 0.814193 0.318373 117 -7.11319 0.83986 0.318848 87 -6.88192 -0.290559 0.34933 40 -6.88844 0.860939 0.350467 40 -6.91822 0.831666 0.351011 40 -7.07004 0.335663 0.353312 117 -7.09877 0.214268 0.353814 84 -7.10033 0.370761 0.353982 72 -7.11169 0.181165 0.354065 87 -7.14021 0.159548 0.354651 80 -7.13993 0.294281 0.354735 82 -7.14523 0.260792 0.354819 81 -7.14104 0.395541 0.354861 86 -7.15401 0.238639 0.354986 82 -7.15095 0.317286 0.354987 72 -7.16866 0.137756 0.355237 82 -7.15668 0.498057 0.355323 75 -7.18774 0.0591384 0.355613 86 -7.17968 0.420456 0.355699 86 -7.17501 0.522062 0.355742 120 -7.19705 0.115785 0.355823 84 -7.20351 0.0819575 0.355949 84 -7.20588 0.0367135 0.35599 88 -7.19628 0.444181 0.356076 88 -7.20009 0.478509 0.356202 84 -7.21997 0.00281251 0.356283 86 -7.26216 0.563144 0.357626 78 -7.29793 -0.0198038 0.357916 91 -7.32782 -0.0427982 0.358544 87 -7.30419 0.589651 0.358547 91 -7.31327 0.648285 0.358841 83 -7.33019 0.615033 0.359134 88 -7.35725 -0.100653 0.359172 89 -7.35953 -0.0775546 0.359214 89 -7.33906 0.673915 0.359427 75 -7.40089 -0.124353 0.360093 93 -7.41446 -0.147831 0.360386 88 -7.45034 0.708148 0.361814 129 -7.52763 -0.185178 0.362773 89 -7.5356 0.740455 0.363657 80 -7.60097 -0.210625 0.364322 91 -7.67023 -0.23642 0.365787 92 -7.64537 0.788024 0.366044 86 -7.74298 -0.27494 0.367337 79 -7.72236 0.820761 0.367719 93 -7.77935 0.851743 0.368976 54 -7.89195 -0.304554 0.370477 40 -7.20385 0.826515 0.393042 40 -7.28887 -0.301185 0.394179 40 -7.29987 -0.324656 0.39449 40 -7.31375 0.815462 0.395846 40 -7.49722 0.811436 0.400571 40 -7.78365 -0.286654 0.407004 44 -7.77948 0.803944 0.407841 40 -7.87854 0.192361 0.409395 93 -7.8871 0.167752 0.409603 92 -7.88439 0.366074 0.409708 58 -7.97793 0.332446 0.412096 83 -7.98493 0.307592 0.412252 143 -8.00473 0.0441084 0.412614 57 -7.99904 0.396203 0.41272 85 -8.00974 0.421922 0.413031 81 -8.04042 0.0820799 0.413549 79 -8.03612 0.486534 0.413811 75 -8.05212 0.107461 0.413861 55 -8.06173 0.13289 0.41412 107 -8.0788 0.0188952 0.414535 40 -8.04465 0.804931 0.414695 40 -8.11081 -0.00661417 0.415366 40 -8.13144 0.466366 0.416251 145 -8.18569 0.288925 0.417444 69 -8.20769 0.225112 0.417963 74 -8.19246 0.793261 0.418485 40 -8.22893 0.251497 0.418535 120 -8.33794 -0.282691 0.421387 40 +unknow 0.95962 1 0 226 -11.2994 24.3675 -1.61234 90 -11.3632 24.3048 -1.61031 132 -11.4275 24.2437 -1.60841 133 -11.4788 24.1554 -1.60448 137 -12.064 26.4388 -1.59826 202 -11.9464 26.4001 -1.59304 111 -12.674 26.0231 -1.59105 149 -12.7373 25.9455 -1.58844 147 -12.8487 25.8638 -1.58694 147 -12.9112 25.7858 -1.58433 147 -12.9769 25.7148 -1.58222 146 -13.078 25.6142 -1.57948 141 -13.1474 25.5517 -1.57799 137 -13.2121 25.4801 -1.57588 139 -13.2644 25.3854 -1.57215 146 -13.3727 25.3014 -1.57065 151 -13.423 25.2046 -1.5668 143 -13.4946 25.1482 -1.5658 138 -13.5883 25.0387 -1.56257 128 -13.6401 24.9469 -1.55909 126 -13.8046 24.7831 -1.55511 140 -13.6828 24.8392 -1.55449 130 -13.859 24.6978 -1.55213 131 -13.9188 24.6229 -1.54989 93 -13.9793 24.5495 -1.54778 87 -14.0859 24.4678 -1.54666 66 -11.8095 24.4391 -1.47882 123 -11.6805 24.4656 -1.47684 181 -11.5882 24.4697 -1.4746 138 -11.4876 24.4554 -1.47112 114 -14.0542 26.3342 -1.4696 196 -11.2826 24.5177 -1.46926 105 -11.3838 24.4334 -1.46715 136 -14.4009 26.0892 -1.46678 127 -14.2949 26.0905 -1.46398 161 -14.1804 26.0757 -1.46015 151 -14.0346 26.1 -1.45746 141 -14.1607 24.5511 -1.38472 124 -13.926 24.5886 -1.38001 122 -13.9695 24.4858 -1.37618 187 -12.3179 25.039 -1.36013 124 -12.3769 24.8627 -1.35271 136 -12.04 24.6704 -1.33462 185 -11.8691 24.5159 -1.32259 148 -11.7422 24.5481 -1.32113 196 -11.6556 24.5651 -1.3199 125 -11.4446 24.6178 -1.31754 144 -11.5494 24.5401 -1.31607 185 -14.1359 24.4621 -1.2207 149 -13.9888 24.4729 -1.21746 237 -13.7956 24.4907 -1.21342 122 -13.6758 24.4572 -1.20897 117 -13.5246 24.4566 -1.20523 153 -13.4391 24.4832 -1.20432 121 -13.3306 24.4674 -1.20098 160 -13.1972 24.4965 -1.19906 112 -13.0958 24.4921 -1.19643 111 -12.9795 24.4589 -1.19218 111 -12.8354 24.465 -1.18905 83 -12.7539 24.4963 -1.18854 69 -12.6439 24.4724 -1.1849 138 -12.5139 24.5032 -1.18328 108 -12.4053 24.48 -1.17974 124 -12.3042 24.4706 -1.17701 125 -12.2086 24.4716 -1.17489 119 -12.0631 24.4679 -1.17145 106 -11.9757 24.4842 -1.17024 104 -11.698 24.5981 -1.16933 121 -11.8857 24.4947 -1.16872 120 -11.7511 24.5108 -1.1665 192 -11.5654 24.5173 -1.16276 120 -11.4279 24.5244 -1.16013 153 -11.247 24.5376 -1.15689 102 -11.3215 24.4967 -1.15659 142 -11.127 24.4782 -1.15163 112 -10.9992 24.503 -1.15012 74 -14.0572 24.5076 -1.05941 183 -13.9544 24.5065 -1.05707 148 -13.8655 24.5294 -1.056 255 -13.7068 24.5178 -1.05205 255 -13.6035 24.5135 -1.04963 255 -13.5003 24.5089 -1.04721 255 -13.4012 24.5109 -1.04514 255 -13.2541 24.5158 -1.04218 255 -13.1534 24.5134 -1.03994 255 -13.0481 24.5017 -1.03725 255 -12.9082 24.517 -1.03492 255 -12.807 24.5114 -1.03258 255 -12.7106 24.5143 -1.0307 255 -12.5676 24.5206 -1.02801 255 -12.4678 24.5154 -1.02577 255 -12.3745 24.5224 -1.02415 255 -11.9014 24.7333 -1.02326 146 -12.2705 24.5076 -1.02146 255 -12.1371 24.5293 -1.01967 255 -12.0379 24.5225 -1.01742 250 -11.9451 24.5279 -1.01581 201 -11.6986 24.5092 -1.01025 149 -11.6027 24.5061 -1.00827 161 -11.4761 24.537 -1.00711 170 -11.393 24.5603 -1.00648 123 -13.7428 24.4389 -0.871396 172 -13.6504 24.454 -0.870165 198 -13.4984 24.4515 -0.867239 188 -13.3975 24.45 -0.865314 193 -13.2958 24.4463 -0.863312 215 -13.1943 24.4422 -0.86131 209 -13.0565 24.4617 -0.859463 230 -12.9581 24.462 -0.857692 207 -12.8589 24.4601 -0.855844 213 -12.7214 24.4778 -0.853996 219 -12.6207 24.4715 -0.851994 233 -12.5183 24.4612 -0.849838 232 -12.3858 24.486 -0.848376 235 -12.2873 24.4819 -0.846528 235 -12.189 24.4774 -0.84468 240 -12.0559 24.4987 -0.843141 236 -11.9482 24.4736 -0.840446 233 -11.8522 24.4714 -0.838752 226 -11.7519 24.4599 -0.836673 255 -11.616 24.4716 -0.834826 237 -11.5195 24.4664 -0.833055 237 -11.4282 24.4717 -0.831746 242 -11.2902 24.4762 -0.829668 240 -11.2075 24.4988 -0.829129 245 -11.1255 24.523 -0.828668 241 -11.0009 24.5551 -0.827822 214 -10.9229 24.5877 -0.827746 175 -14.1429 24.4695 -0.702569 233 -14.038 24.4653 -0.700765 232 -13.8979 24.4878 -0.699154 237 -13.7953 24.4861 -0.697479 236 -13.69 24.4787 -0.695611 234 -13.5522 24.5027 -0.694129 235 -13.4424 24.4856 -0.691938 235 -13.3424 24.4857 -0.690392 235 -13.2041 24.506 -0.688846 239 -13.0959 24.4893 -0.68672 237 -12.9973 24.4897 -0.685238 234 -12.9025 24.4968 -0.684014 236 -12.7537 24.4935 -0.681695 242 -12.6583 24.498 -0.680407 242 -12.5602 24.4968 -0.678925 243 -12.4229 24.5129 -0.677379 241 -12.3243 24.509 -0.675833 236 -12.2284 24.51 -0.67448 242 -12.088 24.5172 -0.672676 241 -11.988 24.5084 -0.671001 238 -11.897 24.5172 -0.669971 239 -11.7964 24.5058 -0.668231 243 -11.6628 24.5232 -0.666879 246 -11.5677 24.5218 -0.665526 243 -11.4677 24.5091 -0.663786 244 -11.3403 24.5375 -0.662885 217 -14.198 24.4921 -0.558625 153 -14.0871 24.4776 -0.556784 186 -13.941 24.4899 -0.555106 199 -13.8335 24.4796 -0.553428 215 -13.7322 24.4793 -0.552074 211 -13.5915 24.4982 -0.550667 226 -13.4933 24.5023 -0.549476 230 -13.3923 24.5007 -0.548123 223 -13.2529 24.5195 -0.54677 232 -13.1532 24.5187 -0.54547 238 -13.0461 24.5034 -0.543738 236 -12.9448 24.4983 -0.54233 242 -12.8061 24.5147 -0.540977 243 -12.7098 24.5175 -0.53984 242 -12.608 24.5093 -0.538378 247 -12.4671 24.5185 -0.536863 251 -12.3666 24.5111 -0.535455 247 -12.269 24.5087 -0.53421 246 -12.133 24.525 -0.532966 252 -12.0313 24.5128 -0.53145 255 -11.9341 24.5091 -0.530205 255 -11.8415 24.514 -0.52923 255 -11.7026 24.5208 -0.527769 255 -11.6093 24.5231 -0.526741 255 -11.5118 24.516 -0.525441 255 -11.3819 24.5391 -0.524522 251 -11.2889 24.5403 -0.523494 252 -11.2035 24.5574 -0.522953 154 -11.0778 24.588 -0.522304 187 -13.6551 26.0763 -0.392261 166 -13.8082 25.6781 -0.386548 129 -13.5557 25.593 -0.382594 100 -13.8382 24.6119 -0.367782 202 -13.6802 24.6018 -0.36603 200 -13.5226 24.4994 -0.362647 255 -13.4311 24.5155 -0.362036 255 -12.5284 24.7739 -0.358132 96 -12.7079 24.6463 -0.357477 96 -12.4254 24.7631 -0.356991 96 -12.568 24.6596 -0.356418 96 -12.0416 24.6719 -0.351856 95 -11.819 24.7062 -0.350513 243 -11.8887 24.6528 -0.350145 131 -11.7129 24.6836 -0.349169 255 -11.6149 24.6769 -0.348191 255 -11.4866 24.706 -0.347622 255 -13.557 26.0008 -0.253641 87 -13.8025 25.7761 -0.252315 95 -13.4349 25.9651 -0.252258 168 -13.5388 24.6269 -0.23444 215 -12.5184 24.8569 -0.230173 83 -12.5322 24.6907 -0.227938 83 -11.8567 24.6898 -0.223226 82 -11.7748 24.7179 -0.22307 82 -11.5372 24.7172 -0.221468 82 -11.4436 24.7188 -0.220871 82 -11.3634 24.7492 -0.220778 255 -11.2227 24.7496 -0.219867 191 -13.1343 24.8134 -0.0485376 255 -13.2294 24.7107 -0.0481168 152 -12.8078 24.7585 -0.0467187 116 -12.6819 24.8008 -0.0465382 106 -12.479 24.7872 -0.0455929 106 -12.3478 24.8171 -0.0453031 106 -12.2484 24.8127 -0.0448668 106 -12.0253 24.8506 -0.0442865 253 -12.1308 24.7703 -0.0440479 105 -11.9038 24.7981 -0.0433766 234 -11.8086 24.7993 -0.0430132 224 -11.6762 24.8221 -0.042687 228 -11.5812 24.8224 -0.0423236 227 -11.4931 24.8369 -0.0421061 143 +unknow 0.963616 1 0 398 -11.2791 -1.04503 -1.31229 87 -11.263 -1.16858 -1.31176 108 -11.2679 -1.07972 -1.31122 102 -11.2605 -1.11473 -1.31069 100 -11.6618 -1.38133 -1.29303 157 -11.6366 -1.34121 -1.28921 85 -11.6448 -1.24956 -1.28895 122 -11.6388 -1.28592 -1.2887 121 -11.6467 -1.21277 -1.2887 124 -11.6484 -1.17596 -1.28844 121 -11.6302 -1.11873 -1.28538 117 -12.0528 -1.39486 -1.28198 182 -12.0493 -1.35612 -1.281 67 -12.0575 -1.22296 -1.28027 100 -12.0497 -1.27956 -1.28002 100 -12.0436 -1.3172 -1.27978 80 -12.0534 -1.18432 -1.27929 97 -12.0531 -1.14608 -1.2788 97 -12.0544 -1.08892 -1.27831 80 -12.4776 -1.42298 -1.25993 249 -12.4649 -1.48105 -1.25923 255 -12.4725 -1.34303 -1.25829 93 -12.4663 -1.38198 -1.25806 195 -12.4405 -1.51775 -1.25689 247 -12.4727 -1.20444 -1.25666 136 -12.4203 -1.61437 -1.25596 136 -12.4277 -1.55582 -1.25596 136 -12.4471 -1.24141 -1.25409 127 -12.4372 -1.29963 -1.25363 130 -13.1856 -1.49302 -1.2469 225 -13.1565 -1.63646 -1.24559 127 -13.1547 -1.55239 -1.24428 126 -13.1816 -1.2206 -1.2434 166 -13.1853 -1.1583 -1.24318 118 -13.1379 -1.5923 -1.24296 172 -13.7063 -1.60432 -1.22614 119 -13.7423 -1.25938 -1.22614 142 -12.5404 -1.20223 -1.1729 135 -12.3446 -1.22302 -1.15167 101 -12.3208 -1.31848 -1.15013 102 -12.3229 -1.27956 -1.14991 159 -12.7721 -1.2091 -1.12483 81 -12.3269 -1.22469 -1.07874 134 -12.3005 -1.39791 -1.07791 103 -12.2791 -1.35637 -1.07522 108 -12.2854 -1.25948 -1.0748 98 -12.2774 -1.29764 -1.07438 97 -12.2771 -1.38369 -1.00853 111 -12.2655 -1.34342 -1.00696 101 -12.2539 -1.30322 -1.00538 109 -12.2262 -1.24211 -1.00203 95 -12.024 -1.18386 -0.981557 99 -11.889 -1.13317 -0.967774 103 -11.8565 -1.0738 -0.964033 117 -11.8201 -1.03317 -0.960095 115 -11.8035 -0.994401 -0.958126 64 -12.2022 -1.41922 -0.933266 69 -12.2028 -1.36103 -0.932708 127 -12.1298 -1.31416 -0.925459 105 -11.9022 -1.25118 -0.903713 70 -11.8184 -1.00368 -0.755793 183 -11.6794 -0.919336 -0.649684 64 -11.7893 -1.03291 -0.592064 40 -11.7662 -0.974971 -0.590167 108 -12.1551 -1.36723 -0.550432 74 -11.9847 -1.31032 -0.539496 111 -11.9113 -1.26461 -0.534649 181 -11.8834 -1.22398 -0.532661 67 -11.8533 -1.16453 -0.530424 93 -11.833 -1.12507 -0.528932 129 -11.8047 -1.08504 -0.526943 122 -11.7818 -1.02703 -0.525203 113 -11.7526 -0.894484 -0.522717 255 -11.7273 -0.985296 -0.521599 87 -11.7116 -0.854459 -0.519983 104 -11.6985 -0.945948 -0.519611 215 -12.1714 -1.23342 -0.477957 255 -12.133 -1.13323 -0.475259 177 -12.1096 -1.34247 -0.475148 75 -12.0959 -1.26403 -0.473911 246 -12.0582 -1.29831 -0.472001 84 -12.0419 -1.16271 -0.470314 255 -11.867 -1.01385 -0.459748 117 -11.8621 -0.975888 -0.459298 210 -11.8273 -0.935545 -0.457163 157 -12.121 -1.34496 -0.407399 70 -11.9821 -1.29176 -0.400115 178 -11.9661 -1.19509 -0.398799 90 -11.9563 -1.25106 -0.398597 220 -11.8823 -1.14923 -0.394348 126 -11.8759 -1.11098 -0.393842 136 -11.8392 -1.05139 -0.391717 116 -11.8086 -1.01136 -0.389997 98 -11.7739 -0.971228 -0.388075 228 -11.7703 -0.91513 -0.38767 197 -11.7692 -0.877859 -0.387468 213 -12.114 -1.3328 -0.337636 78 -12.0586 -1.28824 -0.334943 92 -12.0564 -1.19229 -0.334404 115 -12.0208 -1.24593 -0.333058 228 -11.9806 -1.14662 -0.330814 159 -11.9582 -1.10653 -0.329647 199 -11.8487 -0.908655 -0.323992 85 -11.8272 -1.00048 -0.323364 145 -11.8243 -0.962818 -0.323094 176 -12.0071 -1.28548 -0.25609 46 -11.991 -1.18863 -0.255088 88 -11.9733 -1.24391 -0.254626 140 -11.9449 -1.14629 -0.253162 94 -11.9007 -1.10443 -0.251313 127 -11.862 -1.04458 -0.249618 103 -11.8214 -1.00368 -0.247923 99 -11.7986 -0.964479 -0.246922 167 -11.7956 -0.926948 -0.24669 106 -11.7898 -0.870642 -0.246305 118 -11.7925 -0.833598 -0.246305 113 -12.2013 -1.32514 -0.186873 91 -12.1915 -1.2853 -0.186422 153 -12.0742 -1.23433 -0.182489 61 -12.0242 -1.17187 -0.180684 99 -11.9959 -1.13102 -0.179652 100 -11.9756 -1.0911 -0.178879 101 -11.9348 -1.0306 -0.177396 99 -11.914 -0.991063 -0.176622 104 -11.9091 -0.95297 -0.176364 107 -11.9061 -0.915081 -0.17617 107 -11.8824 -0.856889 -0.175267 49 -12.3344 -1.34609 -0.127667 102 -12.1636 -1.28916 -0.122899 101 -12.1099 -1.22591 -0.121274 115 -12.0739 -1.18405 -0.12019 105 -12.0516 -1.14371 -0.119486 108 -12.031 -1.08463 -0.118781 113 -11.9945 -1.04344 -0.117697 108 -12.0351 0.127743 -0.117582 40 -11.9758 -1.00397 -0.117101 117 -11.9729 -0.965869 -0.116938 102 -11.9514 -0.907529 -0.116234 98 -11.9502 -0.869696 -0.116125 102 -11.9429 -0.831476 -0.115854 102 -12.7857 -1.56181 -0.0546014 44 -12.7588 -1.51779 -0.0539487 44 -12.7053 -1.59236 -0.0530523 66 -12.69 -1.46904 -0.0524397 44 -12.6411 -1.40294 -0.0512978 61 -12.5362 -1.35121 -0.049055 91 -12.3057 -1.28678 -0.0442434 121 -12.2758 -1.22513 -0.0435092 117 -12.2239 -1.18105 -0.0423673 122 -12.2037 -1.14036 -0.0418777 121 -12.183 -1.08049 -0.0413474 120 -12.2274 0.186072 -0.0412996 42 -12.22 0.147574 -0.0411367 42 -12.1684 -1.04064 -0.0409802 122 -12.1984 0.109036 -0.0406885 42 -12.1928 0.0515394 -0.0405663 42 -12.1457 -1.00022 -0.0404498 125 -12.1389 -0.961247 -0.0402457 126 -12.1233 -0.902504 -0.0398377 122 -12.1042 -0.862804 -0.039389 101 -12.6959 -1.55742 0.00651076 40 -12.6918 -1.45587 0.00676297 40 -12.6788 -1.51497 0.00685709 40 -12.5158 -1.35644 0.00968901 40 -12.345 -1.27947 0.0124889 67 -12.3171 -1.23755 0.0129925 88 -12.2612 -1.19317 0.0139364 130 -12.2467 -1.13357 0.0142512 84 -12.2423 -1.0944 0.0143773 90 -12.1958 -1.05174 0.015164 129 -12.1871 -1.01245 0.015353 83 -12.1838 -0.954408 0.0154791 90 -12.1556 -0.875466 0.0160144 81 -12.1468 -0.91321 0.0161085 132 -12.1536 -0.817785 0.016109 84 -12.1302 -0.777987 0.0165182 81 -12.8035 -1.54054 0.089799 97 -12.7371 -1.57304 0.0903633 49 -12.6746 -1.38353 0.0911294 48 -12.5914 -1.33426 0.091931 48 -12.5856 -1.27368 0.0920406 48 -12.5199 -1.22716 0.0926783 84 -12.4719 -1.1828 0.0931521 75 -12.4634 -1.12273 0.0932798 100 -12.4649 -1.08339 0.0932983 119 -12.4682 -1.04423 0.0932986 95 -12.4375 -1.00225 0.0936085 125 -12.4381 -0.943321 0.0936451 83 -12.4139 -0.863007 0.0939189 92 -12.4091 -0.901857 0.0939368 139 -13.8058 -1.27208 0.168926 50 -12.7872 -1.54575 0.17161 47 -12.7202 -1.59864 0.171774 46 -12.748 -1.3586 0.171775 46 -12.6528 -1.24824 0.172065 46 -12.6309 -1.30624 0.172109 46 -12.6768 -1.18986 0.247589 40 -12.7069 -1.25318 0.247705 40 -12.7128 -1.29413 0.247737 40 -12.7107 -1.33428 0.247744 40 -13.3202 -0.956573 0.249605 40 -13.326 -0.87286 0.249606 40 -13.3371 -0.91571 0.249651 40 -13.5356 -1.0794 0.25033 40 -13.5608 -1.03859 0.250402 40 -13.568 -1.12495 0.250446 40 -13.7957 -1.25346 0.251217 41 -12.7997 -1.25921 0.323827 42 -12.7956 -1.31972 0.323845 42 -12.9744 -1.37899 0.325531 43 -13.2156 -1.21552 0.327586 44 -13.4635 -0.897359 0.329623 45 -13.4946 -0.941957 0.329934 45 -13.5474 -0.988312 0.330447 52 -13.5714 -0.840134 0.330576 45 -13.6699 -1.04019 0.331602 61 -13.922 -1.1249 0.333967 46 -14.8359 -0.869212 0.342164 49 -14.8406 -0.822705 0.342182 49 -12.7808 -1.05033 0.408465 35 -12.7914 -1.0917 0.408687 35 -12.804 -1.15361 0.408971 35 -12.868 -1.20028 0.410047 35 -12.8701 -1.24129 0.410142 35 -12.8761 -1.30316 0.410332 35 -12.9336 -1.35016 0.411313 35 -13.4287 -0.913951 0.418534 36 -13.4395 -0.872295 0.418661 36 -13.4737 -0.959637 0.419293 37 -14.8206 -0.89449 0.440506 40 -14.8533 -0.849693 0.440981 40 -12.9496 -1.28017 0.477589 43 -13.1106 -1.33736 0.481064 44 -13.4773 -0.947531 0.488018 45 -13.4976 -0.88503 0.488353 45 -13.5103 -0.843222 0.488563 45 -14.8065 -0.874941 0.515698 50 -14.8312 -0.712825 0.516034 50 -14.8304 -0.806209 0.516117 50 -14.8388 -0.759906 0.516243 50 -12.8295 -0.81267 0.538579 51 -12.8435 -0.874376 0.539046 52 -12.8636 -0.957038 0.539721 52 -12.8686 -0.916766 0.539773 52 -12.8924 -0.999981 0.540551 52 -12.8916 -1.06106 0.540655 52 -12.9121 -1.10365 0.541278 52 -12.9663 -1.14944 0.542783 52 -12.9648 -1.25203 0.54299 52 -12.9707 -1.21148 0.543042 52 -13.0046 -1.29721 0.544132 52 -14.6383 -0.354847 0.585002 59 -14.7725 -0.730163 0.588843 80 -14.8062 -0.848517 0.589881 60 -14.8292 -0.313204 0.589936 60 -14.8141 -0.778952 0.589985 60 -14.8505 -0.24368 0.590455 60 -12.9343 -0.396095 0.620745 41 -12.936 -0.335137 0.620745 41 -12.9459 -0.253997 0.621003 41 -12.9392 -0.538685 0.621066 41 -12.947 -0.437172 0.621195 41 -12.9395 -0.660901 0.621258 41 -12.9495 -0.477981 0.621323 41 -12.9514 -0.579927 0.621516 41 -12.9639 -0.111742 0.621518 41 -12.9642 0.0715371 0.621519 41 -12.9555 -0.620891 0.621709 41 -12.9735 -0.152564 0.62184 41 -12.9539 -0.763646 0.621901 41 -12.9582 -0.72305 0.621965 41 -12.975 -0.295286 0.621968 41 -12.9554 -0.804575 0.622029 41 -12.9803 0.0308781 0.622034 41 -12.9823 -0.00989916 0.622098 41 -12.9862 -0.0710869 0.622226 41 -12.9989 -0.193656 0.622676 41 -12.9866 -0.908876 0.623251 41 -12.9894 -0.868073 0.623251 41 -13.0216 0.133337 0.623385 41 -12.9956 -0.950522 0.623637 41 -12.9884 -1.09368 0.623764 71 -13.0352 0.174464 0.623836 41 -13.0149 -1.01356 0.624408 41 -13.0396 -1.05665 0.625309 41 -13.1093 0.278597 0.626281 41 -13.061 -1.20302 0.626402 93 -13.083 -1.24645 0.627238 137 -13.1393 0.361904 0.627311 41 -13.1703 0.321414 0.628276 41 -13.1268 -1.29216 0.628781 89 -13.206 0.405397 0.629499 76 -13.1922 -1.36124 0.631097 42 -13.0368 -0.379422 0.708871 94 -13.0415 -0.420582 0.709103 91 -13.0513 -0.277296 0.709336 98 -13.0531 -0.174787 0.709336 94 -13.0481 -0.461851 0.709412 93 -13.0423 -0.646363 0.709488 105 -13.0478 -0.523413 0.709489 106 -13.0481 -0.564496 0.709566 104 -13.0581 -0.236416 0.709568 95 -13.0408 -0.749013 0.709643 100 -13.0584 -0.318512 0.709645 93 -13.0679 -0.0928951 0.709879 97 -13.053 -0.708604 0.71003 104 -13.0582 -0.606062 0.71003 87 -13.0736 -0.134023 0.71011 98 -13.0821 -0.0519264 0.710421 98 -13.0941 0.050844 0.710885 97 -13.0743 -0.792222 0.711035 98 -13.1002 0.00970234 0.711117 98 -13.0803 -0.854498 0.711422 102 -13.0816 -0.895868 0.711577 99 -13.1199 0.0921117 0.711892 97 -13.0927 -0.937986 0.712118 99 -13.1 -1.00061 0.712582 100 -13.1393 0.154134 0.712666 99 -13.1447 0.195486 0.712898 99 -13.1088 -1.04273 0.713046 98 -13.166 0.237131 0.71375 108 -13.1274 -1.08577 0.713897 96 -13.1478 -1.1291 0.714826 91 -13.2027 0.299962 0.715221 90 -13.1622 -1.19289 0.715599 86 -13.2317 0.342155 0.716382 94 -13.1862 -1.23691 0.716683 76 -13.2536 -1.34847 0.7197 40 -13.2758 -1.28757 0.72032 40 -13.0583 -0.370964 0.770248 152 -13.0634 -0.330034 0.770422 155 -13.0624 -0.432684 0.770508 150 -13.067 -0.473925 0.770768 152 -13.0674 -0.515046 0.770854 149 -13.0743 -0.289196 0.770856 158 -13.0708 -0.576873 0.771114 152 -13.0822 -0.186572 0.771116 158 -13.0709 -0.618022 0.771201 150 -13.0709 -0.659179 0.771287 149 -13.0856 -0.227733 0.771289 158 -13.0951 -0.104442 0.771637 161 -13.0967 -0.1456 0.771723 160 -13.0847 -0.701064 0.77198 165 -13.0893 -0.763165 0.772327 164 -13.1114 -0.0427557 0.772331 163 -13.0982 -0.846267 0.772933 162 -13.1008 -0.80511 0.772933 162 -13.1275 -0.00153116 0.773025 164 -13.1334 0.0397376 0.773285 162 -13.1111 -0.950519 0.7738 159 -13.116 -0.909458 0.773887 165 -13.1471 0.101762 0.773892 162 -13.1299 -0.993319 0.774753 164 -13.1687 0.143351 0.774846 159 -13.1801 0.18491 0.775366 159 -13.149 -1.05705 0.775793 159 -13.1675 -1.10015 0.776746 157 -13.2111 0.247682 0.776754 164 -13.2202 0.289421 0.777187 156 -13.178 -1.14269 0.777353 153 -13.2372 0.331438 0.777968 149 -13.1962 -1.186 0.778306 156 -13.2263 -1.2515 0.779866 155 -13.3476 -1.30505 0.785328 78 -13.2058 -0.442799 0.863778 114 -13.2148 -0.339237 0.864079 116 -13.2178 -0.297765 0.864179 116 -13.2143 -0.484673 0.864278 115 -13.2171 -0.401635 0.864278 116 -13.2158 -0.547108 0.864477 115 -13.2247 -0.256369 0.864479 120 -13.2283 -0.152522 0.864579 120 -13.2181 -0.630433 0.864776 115 -13.2337 -0.194176 0.864879 121 -13.2221 -0.672272 0.865076 115 -13.234 -0.589553 0.865476 112 -13.2527 -0.111211 0.865778 125 -13.2367 -0.735607 0.865975 112 -13.2383 -0.777428 0.866174 117 -13.2651 -0.00715221 0.866378 124 -13.2689 -0.0696906 0.866578 122 -13.2577 -0.820411 0.867273 109 -13.2851 0.0345317 0.867377 122 -13.2617 -0.883426 0.867672 107 -13.2628 -0.925371 0.867871 128 -13.3049 0.0763472 0.868376 120 -13.2818 -0.968672 0.86897 120 -13.283 -1.03173 0.869269 118 -13.3243 0.139213 0.869376 122 -13.3358 0.181209 0.869975 122 -13.3551 0.223403 0.870974 118 -13.3176 -1.07658 0.871167 118 -13.3763 0.265749 0.872073 120 -13.3324 -1.16219 0.872265 114 -13.336 -1.1203 0.872266 115 -13.3909 0.329145 0.872873 92 -13.3566 -1.2278 0.873764 112 -13.474 -1.28153 0.879857 36 +unknow 0.400169 1 0 31 -13.6047 -25.0849 -0.710505 213 -13.7897 -24.9562 -0.709726 199 -13.6643 -25.0069 -0.709214 120 -13.7479 -24.9555 -0.562652 148 -13.8107 -24.8843 -0.561783 196 -13.6545 -25.1248 -0.374212 207 -13.5736 -25.164 -0.374134 168 -13.8224 -24.9643 -0.372983 193 -13.8998 -24.919 -0.37294 149 -13.7216 -25.0513 -0.240756 183 -13.591 -25.0929 -0.240352 214 -13.7809 -24.9731 -0.240125 140 -13.8291 -24.8755 -0.239149 243 -13.5866 -25.0794 -0.0516938 109 -13.649 -24.9134 -0.0506364 130 -13.7262 -24.8686 -0.0506153 121 -13.5403 -25.0828 0.129779 201 -13.7519 -24.9104 0.129923 157 -13.5664 -24.9436 0.13008 247 -13.5889 -24.7992 0.130396 241 -13.5808 -24.8222 0.298816 255 -13.5513 -24.9544 0.299146 255 -13.7512 -24.9476 0.299445 180 -13.5467 -25.1342 0.299652 187 -13.548 -24.8951 0.466569 255 -13.631 -24.8612 0.466663 251 -13.5192 -25.029 0.467522 255 -13.6887 -24.9836 0.657274 141 -13.6168 -25.0388 0.657493 224 -13.6945 -24.9136 0.801268 149 -13.8067 -24.9316 0.802739 163 +unknow 0.967697 1 0 256 -19.6394 25.277 -1.41094 110 -19.9381 24.6862 -1.39688 127 -19.9665 24.563 -1.39293 164 -19.0614 25.2618 -1.39254 109 -20.0158 24.4661 -1.3907 126 -18.9544 25.2848 -1.39021 112 -20.0914 24.3237 -1.38757 160 -20.1486 24.2375 -1.38605 122 -20.1555 24.0913 -1.38059 159 -20.2482 23.9716 -1.37897 122 -20.2678 23.8424 -1.37461 157 -20.3128 23.7436 -1.37229 123 -19.3591 24.2009 -1.35935 112 -19.0546 23.9736 -1.34073 116 -18.8728 24.0536 -1.33821 103 -18.9445 23.9895 -1.3379 118 -21.6507 25.5421 -1.29433 127 -21.7493 25.1738 -1.28463 166 -21.6219 25.1859 -1.28131 149 -21.492 25.1945 -1.27781 148 -21.6797 24.0064 -1.24325 165 -21.7697 23.8788 -1.24172 141 -21.4933 23.951 -1.2358 159 -19.1748 25.3227 -1.21707 162 -19.0808 25.3636 -1.21599 162 -19.2131 25.2083 -1.21402 154 -18.875 25.338 -1.20953 163 -18.7656 25.357 -1.20729 206 -19.2265 24.1085 -1.17541 255 -19.2734 24.0122 -1.17335 168 -19.0401 24.0295 -1.16743 195 -18.9311 24.0468 -1.165 182 -21.8114 23.892 -1.03757 123 -21.7309 23.9545 -1.03727 123 -21.5205 23.8726 -1.02949 185 -21.3625 23.923 -1.02687 152 -21.2223 23.9167 -1.02309 172 -21.0995 23.9293 -1.02032 173 -20.9182 23.9501 -1.01632 166 -20.7735 23.9357 -1.01224 143 -20.6448 23.9387 -1.00908 192 -20.4734 23.9673 -1.00561 154 -20.3114 23.9294 -1.00045 149 -20.1705 23.9151 -0.996524 152 -18.2649 25.3855 -0.996083 119 -19.5884 24.289 -0.993371 180 -20.0376 23.9094 -0.993058 144 -19.8584 23.9235 -0.989054 184 -18.2552 25.1212 -0.987608 118 -19.731 23.9225 -0.985896 180 -18.2857 24.9976 -0.984449 118 -18.3275 24.8901 -0.98206 118 -19.5925 23.907 -0.982046 183 -19.428 23.9354 -0.978889 181 -18.3302 24.6494 -0.974663 128 -19.1849 23.9415 -0.97319 171 -19.0433 23.9957 -0.971419 237 -18.8331 24.0393 -0.967723 146 -18.2233 24.3451 -0.962799 140 -18.6692 23.9847 -0.962178 116 -18.2738 24.0166 -0.953861 214 -21.8663 24.0528 -0.839368 105 -21.9364 23.9781 -0.83911 59 -21.5761 23.8842 -0.829055 87 -21.4366 23.9558 -0.827767 76 -21.3041 23.9589 -0.824996 106 -21.1041 23.885 -0.818937 94 -20.936 23.921 -0.81623 111 -20.7938 23.9098 -0.812944 158 -20.6558 23.9025 -0.80985 110 -20.4883 23.9358 -0.807144 127 -20.3456 23.9209 -0.803793 114 -20.1967 23.8978 -0.800119 166 -18.2818 25.3557 -0.799173 138 -20.061 23.8892 -0.79709 104 -19.897 23.922 -0.794513 114 -18.2738 25.0948 -0.79221 94 -19.7734 23.9259 -0.792064 120 -19.6486 23.9277 -0.78955 124 -19.2392 24.1943 -0.787943 176 -19.4838 23.9565 -0.786909 122 -18.2461 24.8923 -0.786407 136 -19.3506 23.9461 -0.783944 128 -19.239 23.9616 -0.782076 128 -18.2303 24.7079 -0.781313 100 -19.0167 24.0697 -0.780337 113 -18.2401 24.4791 -0.775574 132 -18.8001 23.9502 -0.772989 117 -18.6465 23.9864 -0.770863 132 -18.2281 24.3034 -0.770803 91 -18.3056 24.0118 -0.764806 143 -21.8965 23.8841 -0.669462 69 -21.7488 23.8729 -0.666537 69 -21.5905 23.8492 -0.663179 143 -21.4246 23.8911 -0.661013 127 -21.287 23.8881 -0.658468 126 -21.1337 23.8664 -0.655272 150 -20.9749 23.9131 -0.653377 123 -20.8235 23.8914 -0.650236 170 -20.6895 23.8887 -0.647799 123 -20.5325 23.9343 -0.645958 134 -20.3808 23.9088 -0.642763 119 -18.2673 25.4444 -0.64024 67 -20.2152 23.8659 -0.638971 173 -20.055 23.9042 -0.636968 124 -19.921 23.8964 -0.634477 131 -18.2161 25.2053 -0.634172 81 -19.7948 23.8972 -0.632311 131 -19.6651 23.8928 -0.629982 137 -19.498 23.9186 -0.627654 136 -19.3725 23.9175 -0.625488 139 -19.2422 23.9097 -0.623105 139 -19.0758 23.9328 -0.620777 131 -18.1941 24.5998 -0.62057 255 -18.9546 23.9346 -0.618773 134 -18.8299 23.9311 -0.616607 131 -18.2178 24.3904 -0.616397 255 -18.674 23.9644 -0.614712 134 -18.1659 24.1619 -0.610599 255 -18.1959 24.0441 -0.60854 170 -18.3042 23.9517 -0.608322 114 -21.4937 23.91 -0.44756 166 -21.3598 23.9119 -0.445767 154 -21.2168 23.9026 -0.443688 198 -21.0471 23.9378 -0.441936 156 -20.9204 23.9451 -0.440346 165 -20.7651 23.9187 -0.43786 233 -20.6077 23.9648 -0.436475 150 -20.4752 23.9626 -0.434681 175 -20.2974 23.9064 -0.431461 176 -20.1304 23.9376 -0.42975 181 -18.2689 25.3843 -0.429731 179 -20.0102 23.9471 -0.428323 178 -19.8633 23.9237 -0.426041 178 -18.2335 25.1682 -0.425734 166 -19.7473 23.9367 -0.424737 175 -19.581 23.9645 -0.423025 177 -18.2526 24.9465 -0.422307 145 -19.4527 23.9607 -0.421314 172 -19.3296 23.9626 -0.419765 236 -18.2252 24.7459 -0.418677 188 -19.1702 23.9957 -0.418258 189 -19.0263 23.9697 -0.416016 177 -18.2146 24.5697 -0.415658 175 -18.9025 23.9681 -0.414426 208 -18.7462 24.0018 -0.413 187 -18.2342 24.3556 -0.412395 149 -18.6229 23.999 -0.411411 163 -18.2841 24.1052 -0.408927 196 -21.697 23.9257 -0.300374 96 -21.5455 23.909 -0.298581 95 -21.3823 23.8782 -0.296506 120 -21.2408 23.8705 -0.294934 152 -21.0633 23.8968 -0.293394 151 -20.9276 23.8936 -0.291947 151 -20.7947 23.8928 -0.290564 156 -20.6206 23.9193 -0.289087 166 -20.4998 23.9308 -0.287987 147 -20.3067 23.8564 -0.285125 152 -20.1361 23.8829 -0.28371 173 -18.2623 25.3075 -0.283261 93 -20.0148 23.8909 -0.282579 135 -19.8719 23.8721 -0.280912 167 -18.2291 25.0946 -0.28024 92 -19.7274 23.9269 -0.280127 135 -19.5787 23.899 -0.278303 170 -19.4645 23.9122 -0.277329 136 -18.2266 24.8439 -0.277029 92 -19.3139 23.8799 -0.275442 171 -19.1774 23.941 -0.274846 137 -18.1978 24.6416 -0.274197 91 -19.0299 23.9103 -0.273022 170 -18.9176 23.9229 -0.272079 137 -18.175 24.4494 -0.271553 102 -18.7467 23.9377 -0.270602 168 -18.642 23.9586 -0.269848 135 -18.2109 24.2579 -0.269475 114 -18.2468 23.9901 -0.266453 157 -21.3236 24.729 -0.0901667 123 -21.4359 24.6238 -0.0901106 123 -21.3903 24.2622 -0.0873582 130 -21.31 24.3248 -0.0873044 122 -21.4426 23.9401 -0.0854797 157 -21.295 24.0021 -0.0850075 170 -20.5568 23.9931 -0.0805311 119 -18.3118 25.5409 -0.0790275 119 -20.3619 23.9175 -0.0788561 188 -20.1806 23.9322 -0.077892 162 -18.2701 25.3147 -0.0771319 118 -20.0371 23.9143 -0.0769275 203 -19.9171 23.9234 -0.0762907 167 -19.7353 23.9337 -0.0753085 195 -18.2213 25.0809 -0.0751451 133 -19.6321 23.9616 -0.0749086 167 -19.4809 23.9302 -0.0738165 196 -19.3767 23.9555 -0.0733984 159 -18.2184 24.8304 -0.0732853 135 -19.1885 23.953 -0.0723068 192 -18.206 24.6509 -0.0718998 135 -19.0745 23.9646 -0.071743 156 -18.9457 23.957 -0.0709606 178 -18.1973 24.4781 -0.0705871 146 -18.7783 23.9768 -0.0701605 174 -18.6549 23.9742 -0.0694509 167 -18.2067 24.0936 -0.0678338 201 -18.2811 24.0347 -0.0678147 188 -20.4501 25.3779 0.117768 117 -20.5455 25.2518 0.117873 117 -21.2411 23.9552 0.119354 146 -20.5498 23.9978 0.120502 114 -20.2568 23.8822 0.12126 133 -18.3124 25.3866 0.121277 113 -20.1495 23.9075 0.121396 119 -18.2651 24.0231 0.124355 217 -18.3029 24.0349 0.304164 188 -18.3113 24.7637 0.306063 91 -18.3557 25.4026 0.307815 93 -20.2751 24.0165 0.308127 241 -20.4049 24.0166 0.3084 147 -20.5961 24.0112 0.308789 158 -20.7368 24.022 0.309114 153 -20.866 24.0186 0.30938 151 -20.5313 25.1889 0.311574 96 -20.4539 25.3367 0.311786 96 -20.7962 25.1889 0.312119 96 -18.2687 24.1189 0.483252 163 -18.2674 24.2753 0.484388 128 -18.8177 24.0496 0.485823 101 -18.2891 24.464 0.48589 119 -18.9315 24.0391 0.486392 101 -18.2919 24.629 0.487117 121 -19.059 24.0454 0.487163 101 -19.2233 24.0194 0.487916 101 -18.2656 24.8374 0.488509 123 -19.3576 24.0321 0.488778 102 -19.4908 24.0427 0.489622 102 -19.6092 24.0341 0.490246 102 -18.3042 25.0547 0.490323 122 -19.7616 23.9893 0.490816 102 -19.8815 23.981 0.491458 110 -18.3298 25.2562 0.491953 125 -20.2508 24.0399 0.494045 103 -20.3481 24.0021 0.494357 103 -20.5077 24.0371 0.495549 104 -20.6899 24.0205 0.496522 104 -18.4513 24.4985 0.69094 88 -19.1578 24.4626 0.697308 83 -19.3003 24.4855 0.698987 83 -19.4107 24.467 0.699842 83 -19.537 24.3893 0.700129 83 -19.6211 24.3371 0.700319 83 -19.7403 24.3281 0.701397 83 -19.8521 24.3093 0.702284 83 -20.0123 24.271 0.703425 84 -20.1204 24.2465 0.704217 84 -20.2157 24.2062 0.704693 84 +unknow 0.964973 1 0 214 -20.8225 -21.358 -0.940496 164 -21.1025 -21.0418 -0.939415 146 -21.0052 -21.0769 -0.93772 183 -21.1659 -20.907 -0.937488 134 -20.9234 -21.1272 -0.936874 179 -20.8124 -21.2141 -0.936258 172 -21.2072 -20.8167 -0.936178 132 -21.271 -20.7485 -0.9361 132 -21.3088 -20.6552 -0.934635 131 -20.3666 -21.5575 -0.932653 183 -21.3612 -20.5117 -0.932246 127 -21.6432 -20.2022 -0.931935 113 -21.6757 -20.1056 -0.930317 113 -21.7241 -20.0239 -0.929546 113 -20.229 -21.5471 -0.92873 181 -21.799 -19.9038 -0.928543 113 -21.8363 -19.8124 -0.927233 113 -21.8761 -19.7237 -0.926077 112 -21.9628 -19.615 -0.925768 112 -20.0902 -21.5346 -0.92473 185 -21.9929 -19.5181 -0.924149 112 -19.9531 -21.523 -0.920807 190 -21.0344 -19.7589 -0.903123 110 -20.867 -19.7877 -0.899195 110 -20.783 -19.8325 -0.89804 110 -24.466 -21.2783 -0.836849 59 -24.2966 -21.4685 -0.836787 104 -24.393 -21.3498 -0.836592 75 -24.5115 -21.183 -0.835946 59 -24.1827 -21.5035 -0.834789 117 -24.7106 -20.7521 -0.831817 58 -24.802 -20.6303 -0.831558 58 -23.5907 -21.3105 -0.816416 58 -23.3743 -21.2486 -0.809906 57 -23.2382 -21.2585 -0.806877 80 -23.4766 -19.8402 -0.782434 56 -23.2849 -19.8037 -0.776955 56 -23.1852 -19.908 -0.776698 56 -20.2535 -20.9428 -0.73075 53 -20.2105 -20.7673 -0.72572 53 -21.1445 -19.7717 -0.724744 65 -20.1918 -20.6179 -0.721851 155 -21.011 -19.7708 -0.721585 74 -20.2045 -20.4371 -0.717982 115 -20.8292 -19.7855 -0.717653 70 -20.2179 -20.3225 -0.715661 120 -20.6962 -19.7831 -0.714495 90 -20.6095 -19.8245 -0.7134 103 -20.2152 -20.1924 -0.71263 121 -20.4686 -19.8754 -0.711273 117 -20.2332 -20.0837 -0.710566 123 -20.3617 -19.8962 -0.709275 109 -20.2963 -19.9573 -0.709147 128 -23.5711 -19.8392 -0.626396 66 -23.3758 -19.8008 -0.621683 66 -23.2297 -19.8029 -0.618704 66 -23.0664 -19.8522 -0.616213 74 -22.951 -19.8788 -0.614317 65 -22.7798 -19.8563 -0.610417 65 -22.6015 -19.8264 -0.606246 65 -22.2539 -19.8332 -0.599312 72 -22.0828 -19.8057 -0.595358 98 -21.8972 -19.8264 -0.592 117 -21.7476 -19.8157 -0.588804 132 -21.5894 -19.7962 -0.585283 138 -20.1059 -21.1718 -0.58275 113 -21.418 -19.8258 -0.582412 150 -20.1557 -21.0912 -0.582099 111 -21.2766 -19.8195 -0.579487 63 -21.0959 -19.7756 -0.575099 63 -20.0132 -20.7458 -0.572671 255 -20.9231 -19.7376 -0.570982 76 -19.9932 -20.5954 -0.569365 255 -20.0005 -20.4739 -0.567143 255 -20.6331 -19.7728 -0.565945 97 -20.0433 -20.3254 -0.565083 255 -20.1029 -20.2581 -0.56492 118 -20.5248 -19.7931 -0.564212 150 -20.0957 -20.1242 -0.56221 155 -20.3768 -19.8367 -0.562153 157 -20.1432 -20.0454 -0.561614 136 -20.2657 -19.8531 -0.560312 135 -20.1762 -19.89 -0.559283 200 -24.2814 -19.9042 -0.432291 148 -24.0938 -19.8772 -0.428988 188 -23.9114 -19.8531 -0.425808 196 -23.8121 -19.8973 -0.42483 107 -23.518 -19.8402 -0.419489 118 -23.3611 -19.8337 -0.416961 152 -23.0155 -19.8531 -0.411865 197 -22.9394 -19.9135 -0.411499 105 -22.6992 -19.8301 -0.406687 104 -22.1862 -19.8158 -0.398655 133 -22.0332 -19.8038 -0.396169 164 -21.8449 -19.8213 -0.393559 181 -21.7044 -19.8184 -0.391399 184 -20.2177 -21.2004 -0.389455 101 -21.5655 -19.816 -0.389279 186 -21.2004 -20.0405 -0.386957 131 -21.3143 -19.896 -0.386629 149 -21.3723 -19.8249 -0.386506 169 -21.2371 -19.9492 -0.386222 136 -20.1816 -20.9636 -0.385458 150 -20.1473 -20.7966 -0.382521 210 -20.1769 -20.5022 -0.378645 142 -20.769 -19.8183 -0.377456 171 -20.6677 -19.846 -0.376355 184 -20.1456 -20.342 -0.375871 135 -20.2362 -20.1783 -0.374809 110 -20.3884 -20.0132 -0.374644 99 -20.5421 -19.8496 -0.374562 184 -20.3027 -20.0546 -0.373993 99 -20.4111 -19.9099 -0.373502 188 -24.1511 -19.8484 -0.284146 152 -23.9776 -19.8325 -0.281881 172 -23.8106 -19.8208 -0.279743 159 -23.6251 -19.9827 -0.279147 144 -23.6024 -19.7736 -0.276754 159 -23.2407 -19.7836 -0.272508 156 -23.0796 -19.772 -0.270464 169 -22.8863 -19.7943 -0.268388 169 -22.7229 -19.7782 -0.266281 165 -22.5598 -19.7613 -0.264174 160 -22.3794 -19.7907 -0.262349 162 -22.226 -19.7799 -0.260431 162 -22.0594 -19.7563 -0.258229 161 -21.9154 -19.7519 -0.256499 158 -21.7377 -19.7783 -0.254707 158 -21.5825 -19.7615 -0.252725 159 -20.2257 -21.0678 -0.251826 87 -21.4511 -19.7656 -0.251247 171 -21.2801 -19.7944 -0.24958 151 -20.1722 -20.8806 -0.249119 153 -21.1418 -19.7901 -0.247945 151 -20.154 -20.7311 -0.247231 158 -21.0183 -19.7989 -0.246624 153 -20.1729 -20.5561 -0.245468 157 -20.8508 -19.8275 -0.24502 157 -20.1727 -20.4272 -0.24402 154 -20.719 -19.8266 -0.24351 162 -20.1634 -20.29 -0.242383 149 -20.5946 -19.832 -0.242158 161 -20.1775 -20.1771 -0.241281 150 -20.479 -19.8452 -0.240995 166 -20.2269 -20.0368 -0.240273 151 -20.3352 -19.8926 -0.239894 182 -20.2655 -19.9494 -0.239738 159 -24.1978 -19.8897 -0.078141 181 -24.0366 -19.884 -0.0769757 197 -23.8389 -19.8467 -0.0753732 198 -23.6273 -19.8596 -0.073971 201 -23.4488 -19.8355 -0.072587 214 -23.2814 -19.8195 -0.0713306 210 -23.1264 -19.8131 -0.07022 196 -22.93 -19.8328 -0.0689818 209 -22.7681 -19.818 -0.06778 207 -22.6231 -19.8169 -0.0667786 206 -22.4351 -19.8397 -0.0656315 222 -22.2876 -19.8342 -0.0645937 182 -22.1344 -19.8227 -0.063483 192 -20.9019 -21.0309 -0.0629306 113 -21.9948 -19.8224 -0.0625363 194 -20.8647 -20.8618 -0.0615996 112 -21.808 -19.841 -0.0613891 204 -20.8819 -20.683 -0.0605602 112 -21.6778 -19.8472 -0.0605517 189 -20.8841 -20.5555 -0.0597577 111 -21.5286 -19.8352 -0.0594774 172 -20.9014 -20.4436 -0.0591556 111 -21.3138 -19.949 -0.0587501 159 -20.9545 -20.3031 -0.0586081 111 -21.3647 -19.871 -0.0586036 183 -20.9836 -20.2038 -0.0581701 111 -21.0369 -20.1281 -0.0580418 111 -21.0696 -20.033 -0.0576584 111 -21.1594 -19.9294 -0.0576029 111 -23.2739 -21.2329 0.120622 114 -24.1832 -19.9312 0.121087 147 -23.9582 -19.9363 0.121551 188 -23.7835 -19.9179 0.121949 157 -23.6029 -19.8933 0.12237 155 -23.2102 -20.3228 0.122415 112 -23.5235 -19.9532 0.122429 112 -22.3828 -21.2074 0.12245 112 -23.3403 -20.1151 0.12252 112 -23.2226 -20.1412 0.122717 111 -22.4623 -20.9505 0.122775 111 -23.2894 -19.9442 0.122931 111 -22.4419 -20.3464 0.123937 110 -22.415 -20.1942 0.124271 109 -22.4426 -19.9022 0.124749 109 -22.2919 -19.9571 0.124956 109 -21.6277 -19.921 0.126364 107 -21.5342 -19.9603 0.126478 107 -21.7195 -20.0343 0.301919 88 -22.419 -19.9112 0.303333 95 -22.3338 -20.0246 0.303372 89 -23.1945 -20.0213 0.305459 91 -23.234 -20.1833 0.305898 91 -23.3771 -20.0513 0.30597 91 -23.3109 -21.0348 0.307906 93 -23.2654 -21.1267 0.307996 93 -22.2221 -20.2649 0.481489 99 -22.299 -20.207 0.481654 99 -22.1775 -20.3521 0.481726 99 -22.3877 -20.1596 0.481966 99 -22.1225 -20.4944 0.482238 99 -22.5571 -20.1204 0.482884 100 -22.1195 -20.6211 0.483007 100 -22.1276 -20.7588 0.483923 100 -22.7071 -20.1263 0.483947 100 -22.0528 -20.8848 0.484215 100 -22.8633 -20.1367 0.485084 100 -23.0635 -20.1207 0.486368 101 +unknow 0.859484 1 0 36 -52.4533 -21.3026 0.052099 187 -52.3357 -21.5427 0.0521467 187 -52.4876 -20.9334 0.0523914 186 -52.4198 -21.0975 0.0523955 186 -52.1163 -21.6442 0.0525934 186 -52.6139 -20.3162 0.0526907 186 -52.7291 -19.6973 0.0530009 186 -52.5261 -20.093 0.0531347 186 -52.4386 -19.7769 0.0536661 185 -51.251 -21.4743 0.0549526 184 -50.8929 -19.8365 0.0575468 182 -50.6032 -19.907 0.0582121 181 -49.8186 -20.5963 0.380849 255 -50.0011 -20.2134 0.380929 246 -49.7998 -20.772 0.381009 147 -50.0207 -20.4045 0.381219 255 -50.7361 -19.8647 0.382727 189 -51.8006 -19.9075 0.385992 193 -52.4174 -19.8619 0.387807 166 -53.0712 -19.9194 0.389854 153 -50.0635 -20.3189 0.701122 164 -50.0642 -20.5026 0.701763 164 -50.2161 -20.1973 0.702004 164 -50.0464 -20.7712 0.702549 164 -50.4483 -20.0149 0.703361 222 -50.537 -19.8666 0.703619 186 -51.1006 -19.9027 0.708552 166 -51.6107 -19.9147 0.712952 167 -52.1995 -19.8594 0.717811 168 -52.7875 -19.8933 0.722963 169 -53.5544 -19.99 0.729857 171 -51.1843 -20.0044 1.07535 134 -51.3792 -19.8948 1.0776 134 -51.2774 -21.5418 1.08585 135 -53.4391 -20.0206 1.10879 137 -51.6252 -20.1364 1.36545 168 +unknow 0.958564 1 0 127 -22.9464 25.0093 -1.31487 193 -22.9814 24.8902 -1.312 191 -23.0589 24.7393 -1.30939 190 -23.09 24.6172 -1.30634 182 -23.1274 24.5024 -1.30374 186 -23.1644 24.3877 -1.30113 185 -23.2195 24.2163 -1.29727 183 -23.2663 24.113 -1.29539 185 -23.2821 23.9782 -1.29153 182 -26.6757 25.61 -1.21596 156 -26.5447 25.7257 -1.21542 156 -26.7156 25.4874 -1.2138 157 -26.4323 25.7782 -1.21373 152 -26.7926 25.1618 -1.20733 156 -26.8307 25.0393 -1.20517 155 -26.8857 24.9331 -1.20394 137 -23.8344 25.5413 -1.13717 154 -23.6929 25.5501 -1.13371 168 -23.4736 25.5539 -1.12808 142 -24.0307 24.1054 -1.10258 128 -23.8692 24.17 -1.09996 128 -23.5844 24.1834 -1.09264 127 -23.6365 24.085 -1.09133 127 -26.2477 24.2818 -0.944164 74 -26.0849 24.2838 -0.940361 64 -25.8434 24.2875 -0.934754 64 -25.6405 24.2492 -0.929147 63 -25.2377 24.1708 -0.917996 63 -25.0401 24.2089 -0.914259 63 -24.8421 24.1691 -0.90878 62 -24.6674 24.1506 -0.904333 62 -24.4495 24.164 -0.899628 62 -24.3011 24.1689 -0.896341 62 -24.0751 24.0953 -0.889509 91 -23.8488 24.095 -0.884353 92 -22.8626 24.8319 -0.879592 61 -23.6537 24.0487 -0.878875 82 -22.9044 24.6434 -0.876045 61 -23.5109 24.0543 -0.875781 101 -22.8875 24.4707 -0.871596 73 -23.1798 24.0914 -0.869208 75 -22.9011 24.3318 -0.86863 99 -23.0832 24.1425 -0.868241 60 -22.9894 24.1961 -0.867404 122 -26.2698 24.2583 -0.760344 109 -26.0618 24.2181 -0.75547 85 -25.8599 24.2586 -0.75222 75 -25.6586 24.2215 -0.747562 75 -25.4694 24.1946 -0.743337 75 -25.2749 24.1611 -0.738896 74 -25.0371 24.1604 -0.734238 74 -24.8665 24.147 -0.730663 74 -24.6891 24.1257 -0.726818 74 -24.4471 24.1153 -0.721944 73 -24.2626 24.2359 -0.720699 73 -24.2791 24.1004 -0.718423 73 -23.8738 24.073 -0.710136 84 -23.756 24.1051 -0.708512 72 -23.5669 24.0638 -0.704124 72 -22.8207 24.7372 -0.703428 72 -22.8826 24.5709 -0.70126 72 -23.3811 24.0245 -0.699846 78 -22.8832 24.4171 -0.698225 87 -23.2261 24.0912 -0.698222 72 -23.0991 24.1106 -0.696218 71 -22.9022 24.284 -0.695949 113 -23.0109 24.17 -0.695731 71 -26.2157 24.2945 -0.520769 122 -25.9753 24.3004 -0.517264 121 -25.7589 24.2504 -0.51335 121 -25.5693 24.224 -0.51017 120 -25.399 24.2146 -0.507521 120 -25.1707 24.2246 -0.504301 119 -24.9723 24.1854 -0.500836 119 -24.8002 24.1703 -0.498104 118 -24.5861 24.1888 -0.495252 118 -24.4019 24.1591 -0.492153 117 -24.2253 24.1355 -0.489259 117 -24.0252 24.1629 -0.486773 117 -22.9413 25.1185 -0.485643 255 -23.8535 24.1416 -0.484001 116 -22.9145 24.9316 -0.482461 255 -23.6991 24.1366 -0.481718 116 -23.5239 24.1094 -0.478824 115 -22.8609 24.7172 -0.478505 255 -22.958 24.5887 -0.477933 163 -23.346 24.1539 -0.47695 115 -23.1772 24.2828 -0.476462 255 -23.2187 24.1738 -0.475442 115 -23.0268 24.354 -0.475403 164 -26.2606 24.2846 -0.354931 111 -26.0626 24.3302 -0.353139 104 -25.8375 24.2722 -0.349931 104 -25.6566 24.2543 -0.347667 104 -25.4572 24.2175 -0.344994 103 -25.2347 24.2333 -0.342636 103 -25.0334 24.1914 -0.3399 102 -24.847 24.1625 -0.337478 102 -24.6629 24.2106 -0.335938 102 -24.4716 24.1741 -0.333391 101 -24.2949 24.1507 -0.331158 101 -24.1061 24.1898 -0.329492 101 -23.9386 24.1729 -0.327448 100 -22.9198 25.038 -0.326263 100 -23.7784 24.1624 -0.325561 100 -22.9348 24.8967 -0.324784 100 -23.6071 24.2155 -0.324273 100 -22.93 24.735 -0.322864 99 -23.435 24.1903 -0.322103 99 -22.9739 24.5493 -0.321195 99 -23.2993 24.2019 -0.320751 99 -23.0003 24.4231 -0.32003 99 -23.1845 24.2344 -0.319871 99 -23.0288 24.2998 -0.318928 99 -24.9039 24.7445 -0.112495 131 -24.9018 24.5875 -0.111474 131 -23.6687 25.5209 -0.109775 130 -23.6076 25.0578 -0.106311 129 -23.5802 24.8718 -0.104908 129 -23.7659 24.3686 -0.102773 128 -24.2072 25.2346 0.111301 125 -24.1924 24.9822 0.111827 125 -24.2038 24.8373 0.11209 124 -24.4874 24.4276 0.112344 124 -24.2089 24.6868 0.112374 124 -24.3992 24.4931 0.112387 124 -24.3095 24.5568 0.112436 124 +unknow 0.903803 1 0 77 -27.5774 -21.3457 -0.736534 131 -27.6412 -21.2565 -0.736425 128 -27.4718 -21.4717 -0.736373 112 -27.7047 -21.1672 -0.736316 123 -27.7471 -21.0619 -0.735502 92 -27.3681 -21.5295 -0.735128 104 -27.8205 -20.9117 -0.734634 89 -28.0406 -20.4634 -0.732193 74 -28.0853 -20.3611 -0.731542 74 -28.1647 -20.2169 -0.730999 74 -28.2053 -20.1121 -0.73024 74 -28.2487 -20.0095 -0.729589 74 -28.282 -19.9 -0.728612 74 -28.3541 -19.7516 -0.727907 74 -28.3766 -19.6352 -0.726606 73 -28.4167 -19.5312 -0.725901 73 -26.6995 -21.4836 -0.720177 95 -26.2176 -21.5753 -0.711619 140 -26.0341 -21.562 -0.707556 94 -25.8864 -21.5772 -0.70474 72 -26.8348 -19.7142 -0.693835 71 -26.6211 -19.7512 -0.689772 71 -26.506 -19.7953 -0.687985 71 -29.4289 -19.8112 -0.51546 121 -29.1647 -19.7666 -0.510486 134 -29.0348 -19.8119 -0.508815 158 -28.9246 -19.9371 -0.508408 143 -28.678 -19.9001 -0.503841 119 -28.3745 -19.8215 -0.497848 118 -28.1011 -19.8281 -0.493363 118 -27.8953 -19.8143 -0.489775 117 -27.6427 -19.7656 -0.485005 126 -27.4083 -19.7937 -0.481458 132 -27.2199 -19.7879 -0.478278 151 -26.9899 -19.7503 -0.474037 140 -26.8006 -19.7412 -0.470817 133 -26.5838 -19.7753 -0.467677 163 -25.9262 -20.4496 -0.465401 255 -26.2659 -19.7962 -0.462745 230 -26.0874 -19.9848 -0.462176 173 -26.0229 -20.0655 -0.462136 161 -26.9203 -19.7473 -0.317579 98 -26.7245 -19.7333 -0.314968 98 -26.4836 -19.7491 -0.312075 98 -26.0514 -20.1366 -0.310349 97 -25.8814 -20.3319 -0.31013 151 -26.074 -19.8937 -0.308302 192 -26.0098 -19.9743 -0.308271 225 -29.3485 -19.814 -0.115359 132 -29.0695 -19.7587 -0.112973 132 -28.8622 -19.7504 -0.111371 131 -28.6043 -19.7724 -0.10955 130 -28.401 -19.7638 -0.107984 130 -28.2094 -19.7622 -0.106546 129 -27.9528 -19.7793 -0.104725 128 -27.7408 -19.7601 -0.103049 128 -27.5405 -19.748 -0.101502 127 -27.2966 -19.7684 -0.0998081 127 -26.1262 -21.1356 -0.0989289 152 -27.0744 -19.7373 -0.0980052 126 -26.9107 -19.7476 -0.0968583 126 -26.3971 -20.1469 -0.0952959 165 -26.6975 -19.7202 -0.0951465 125 -26.3961 -19.9498 -0.0942018 170 -26.5209 -19.7836 -0.0942 125 -26.2085 -20.1333 -0.0938574 124 -26.0117 -20.309 -0.0934219 132 -26.0898 -20.1727 -0.0932206 124 -26.3467 -19.7826 -0.0929255 131 -28.0662 -19.7768 0.112914 123 -27.2721 -19.709 0.31521 99 -27.1552 -19.9511 0.315363 99 -28.5976 -19.8584 0.318993 102 -28.7948 -19.8617 0.319525 102 -28.9972 -19.8673 0.320076 103 -29.2099 -19.8786 0.320665 103 -29.4773 -19.8582 0.321346 104 +unknow 0.93147 1 0 29 -38.218 24.3128 -0.715546 149 -37.9527 24.312 -0.71098 149 -37.732 24.4222 -0.708413 148 -37.521 24.4534 -0.705151 148 -37.2516 24.4451 -0.700463 147 -36.9126 24.4724 -0.695001 146 -36.5644 24.4075 -0.688355 220 -36.2684 24.3751 -0.682974 183 -38.259 24.2986 -0.50519 128 -37.9787 24.2882 -0.501384 168 -37.6069 24.3007 -0.496573 184 -37.3344 24.291 -0.492893 207 -37.0689 24.2843 -0.489339 166 -36.734 24.3129 -0.485188 190 -36.4562 24.2938 -0.481382 187 -36.1954 24.2845 -0.477891 181 -35.9052 24.3357 -0.474558 171 -38.3026 24.4638 -0.206626 164 -37.6708 24.3114 -0.201036 204 -37.4047 24.3066 -0.198978 177 -37.1557 24.3113 -0.197103 161 -36.8321 24.3484 -0.194828 160 -36.5822 24.3488 -0.192934 160 -36.2978 24.3246 -0.190658 159 -36.017 24.3834 -0.188838 158 -37.0055 24.3353 0.0858966 163 -36.7689 24.3453 0.0864203 153 -36.4842 24.3219 0.0871023 152 -36.1918 24.3739 0.0876855 152 +unknow 0.918725 1 0 48 -41.3737 26.1356 -0.789793 159 -41.3115 25.9153 -0.786327 158 -43.4157 25.8845 -0.587347 181 -43.2807 24.3505 -0.573408 138 -43.0074 24.3748 -0.569854 138 -40.5146 25.5547 -0.545736 159 -40.4287 25.3232 -0.542652 178 -40.5458 25.1313 -0.54262 167 -40.7908 24.4917 -0.540667 150 -40.4543 24.8989 -0.539474 153 -40.558 24.5255 -0.537805 152 -40.2577 24.6036 -0.534409 151 -41.0533 24.6134 -0.228639 171 -40.6743 24.5604 -0.225434 170 -40.3549 24.628 -0.223268 170 -40.0916 24.6406 -0.221284 169 -39.9153 24.7054 -0.220228 169 -43.1262 24.2735 0.0717181 181 -42.8201 24.2785 0.0724384 167 -42.4953 24.3596 0.0730981 167 -42.2056 24.3699 0.0737693 166 -41.8852 24.3604 0.0745387 165 -41.5821 24.4469 0.0751329 165 -41.278 24.4428 0.0758532 164 -40.9726 24.436 0.0765789 163 -40.6831 24.4368 0.0772555 163 -40.4068 24.5306 0.0777678 162 -39.9178 25.1877 0.0779566 255 -40.1999 24.5781 0.0781823 162 -39.8953 24.8243 0.0785359 209 -40.0016 24.6297 0.0785696 161 -40.9385 24.513 0.360944 134 -41.201 24.4945 0.361645 134 -41.488 24.4889 0.362435 135 -41.8012 24.4968 0.363323 135 -42.1342 24.4259 0.364141 136 -42.4795 24.4479 0.365145 137 -42.6968 24.3946 0.36567 137 -40.2662 24.8939 0.639938 148 -40.2302 25.0468 0.640396 148 -40.4342 24.7353 0.640489 148 -40.2072 25.2081 0.641 148 -40.7595 24.7588 0.643148 148 -40.2957 25.5291 0.643255 148 -40.3148 25.7191 0.644336 149 -40.3683 25.9321 0.645802 149 -41.6743 24.6918 0.650025 150 -42.4851 24.5455 0.655765 152 +unknow 0.881648 1 0 33 -43.5254 -20.9995 -0.232968 173 -43.51 -20.8237 -0.232147 172 -43.5805 -20.6056 -0.231872 172 -43.6324 -20.4627 -0.231743 172 -43.6747 -20.3154 -0.231524 172 -47.4595 -20.0632 0.0659947 174 -44.3786 -20.5129 0.0731856 166 -44.4356 -20.37 0.0732088 166 -44.3854 -20.2544 0.364263 235 -44.3342 -20.3996 0.364307 178 -44.2826 -20.5446 0.364351 255 -44.3302 -20.7362 0.364751 180 -44.2916 -20.9732 0.364964 208 -44.3211 -21.1579 0.365305 137 -44.413 -21.3735 0.365874 137 -45.7221 -20.0033 0.367887 155 -46.1516 -20.019 0.369183 154 -46.6606 -20.0661 0.370757 140 -47.1281 -20.0922 0.372183 141 -47.7143 -20.0772 0.373913 143 -44.5833 -20.5939 0.656014 152 -44.6696 -20.4637 0.656236 152 -44.5982 -20.771 0.65682 152 -44.5342 -20.9971 0.657167 152 -46.0268 -20.044 0.66603 168 -46.5064 -20.0791 0.670192 156 -46.9646 -20.1019 0.674134 157 -47.4826 -20.0591 0.678351 158 -47.3785 -20.6946 1.02384 137 -47.4488 -20.5481 1.02393 127 -46.4264 -20.4192 1.26712 186 -46.6297 -20.3339 1.2703 157 -46.354 -20.9985 1.27067 157 +unknow 0.867752 1 0 41 -46.5167 25.8854 -0.629617 146 -46.4193 25.6405 -0.626408 146 -46.3664 25.4214 -0.624017 145 -46.3134 25.1091 -0.620934 145 -46.216 24.8686 -0.617788 144 -46.2075 24.6771 -0.616246 144 -46.117 24.4428 -0.613258 144 -46.0475 24.1286 -0.609985 143 -49.8458 24.3011 -0.297721 192 -47.7018 24.2858 -0.280185 194 -49.9542 24.22 0.0552719 184 -49.4988 24.1914 0.0564235 183 -47.8818 24.2448 0.0603088 238 -47.4467 24.3059 0.0612907 242 -46.768 24.3301 0.062906 177 -46.0158 25.428 0.0632965 225 -46.0043 25.2332 0.0635805 255 -46.3821 24.4076 0.0637405 243 -45.9955 25.0407 0.0638537 249 -46.0001 24.8561 0.0640832 255 -46.1373 24.4641 0.0642588 255 -46.0497 24.6032 0.0642914 255 -46.1393 24.5631 0.375704 239 -46.0513 24.7954 0.375807 255 -46.0241 24.9676 0.375995 237 -46.2994 24.4619 0.376009 189 -46.0139 25.1495 0.376247 225 -46.0416 25.3527 0.376642 229 -46.6134 24.4407 0.376878 225 -46.0562 25.6442 0.37714 221 -46.1359 25.8787 0.377736 187 -46.9714 24.3467 0.377766 223 -47.3252 24.3416 0.378777 219 -47.6901 24.34 0.379827 213 -48.1097 24.2688 0.380936 191 -49.8653 24.2755 0.386043 150 -47.1008 24.6124 0.693156 162 -46.8555 25.144 0.693448 162 -46.873 25.3434 0.694456 162 -47.0126 25.6102 0.696748 163 -47.3368 25.9803 0.700983 164 diff --git a/modules/perception/data/min_box_object_builder_test/QB9178_3_1461381834_1461382134_30651.pcd b/modules/perception/data/min_box_object_builder_test/QB9178_3_1461381834_1461382134_30651.pcd new file mode 100644 index 00000000000..9d874ddaa7e --- /dev/null +++ b/modules/perception/data/min_box_object_builder_test/QB9178_3_1461381834_1461382134_30651.pcd @@ -0,0 +1,5 @@ +3 14.1913 -63.8893 1.10654 195 14.1589 -64.0393 0.374468 255 14.215 -64.0288 0.747298 235 +76 16.9306 -61.465 1.0824 213 16.8195 -61.4375 1.08166 230 16.6193 -61.4629 1.0813 209 16.2218 -61.5197 1.08084 214 16.0306 -61.5781 1.08097 222 15.8243 -61.5776 1.08028 255 15.6305 -61.625 1.08028 229 15.4268 -61.633 1.07972 253 15.2285 -61.658 1.07957 255 15.0367 -61.7132 1.07971 228 17.4557 -61.4336 1.41825 255 14.8141 -61.6394 1.07802 255 17.252 -61.4495 1.41751 255 14.6329 -61.7381 1.07879 224 14.5319 -61.7434 1.07856 253 14.3331 -61.7672 1.07828 253 16.7467 -61.4999 1.41595 255 14.1343 -61.7867 1.07811 251 13.9433 -61.8443 1.07832 229 16.3453 -61.5441 1.41497 255 16.145 -61.5679 1.41446 255 15.9466 -61.5988 1.41411 255 15.7497 -61.6349 1.41386 255 15.5469 -61.6471 1.41316 255 15.3479 -61.6706 1.41285 255 15.1509 -61.7048 1.41261 255 17.4532 -61.4412 1.80751 213 14.9525 -61.7325 1.41225 255 17.2452 -61.4416 1.80612 201 14.7298 -61.6584 1.40992 255 17.0394 -61.4491 1.80494 202 14.6566 -61.7807 1.41188 255 16.9362 -61.4507 1.80432 201 14.4512 -61.7776 1.41095 255 16.7411 -61.4958 1.80414 203 14.2537 -61.8033 1.41075 255 14.0539 -61.8223 1.41028 255 16.3475 -61.5688 1.80354 185 16.1475 -61.5945 1.80291 185 15.9446 -61.608 1.80198 185 15.7453 -61.6344 1.8014 185 15.5478 -61.6679 1.80102 185 15.3498 -61.6952 1.80065 185 15.1494 -61.7158 1.79997 185 17.6189 -61.3696 2.22456 215 14.9495 -61.7376 1.79933 185 17.4256 -61.4226 2.22452 230 14.6915 -61.5137 1.79238 184 17.2187 -61.4268 2.2229 255 17.1202 -61.446 2.22267 231 14.4474 -61.7788 1.79749 200 16.9124 -61.4454 2.22092 255 14.2535 -61.82 1.79757 185 16.7193 -61.4945 2.22098 230 14.0558 -61.8487 1.79719 185 16.315 -61.5303 2.2188 255 16.1233 -61.5869 2.21902 231 15.9129 -61.5713 2.21689 255 15.7201 -61.6227 2.21697 231 15.5163 -61.6273 2.2157 255 15.3247 -61.6833 2.21597 231 15.12 -61.6863 2.21454 255 14.9291 -61.745 2.21494 233 14.72 -61.7272 2.21287 255 14.6236 -61.7521 2.21296 228 14.4211 -61.7569 2.21181 255 14.2299 -61.8134 2.21221 230 14.0256 -61.8128 2.21077 255 17.332 -61.4452 0.731885 235 14.7769 -61.7469 0.368853 255 17.1314 -61.4687 0.731805 235 16.932 -61.4988 0.731629 235 16.731 -61.5226 0.731403 235 16.5321 -61.5534 0.731243 235 13.9016 -61.9409 0.368936 255 13.9427 -61.8782 0.729348 235 +4 29.7949 -55.0599 2.18182 207 29.3628 -54.6707 2.16454 182 29.2374 -54.6428 2.16191 201 29.1098 -54.8174 2.16491 206 +7 13.2007 -53.6192 0.347656 255 13.0187 -53.6039 0.347528 255 13.5003 -53.2234 0.658881 235 13.3293 -53.2498 0.658768 235 13.1559 -53.266 0.658572 235 12.9868 -53.299 0.658524 235 12.8205 -53.3396 0.658683 235 +11 15.1235 -53.3189 -0.318568 255 14.7625 -53.3181 -0.317596 255 15.0667 -53.3429 -0.0216523 255 14.8923 -53.3648 -0.0215248 255 14.3726 -53.4369 -0.0210415 255 14.1057 -53.4458 -0.0207527 255 15.0182 -53.372 0.347728 255 14.8459 -53.3978 0.347835 255 14.6635 -53.3899 0.347712 255 14.499 -53.4471 0.347762 255 13.9987 -53.0904 0.658651 235 diff --git a/modules/perception/data/obstacle_common_test/QB9178_3_1461381834_1461382134_30651.pcd b/modules/perception/data/obstacle_common_test/QB9178_3_1461381834_1461382134_30651.pcd new file mode 100644 index 00000000000..9d874ddaa7e --- /dev/null +++ b/modules/perception/data/obstacle_common_test/QB9178_3_1461381834_1461382134_30651.pcd @@ -0,0 +1,5 @@ +3 14.1913 -63.8893 1.10654 195 14.1589 -64.0393 0.374468 255 14.215 -64.0288 0.747298 235 +76 16.9306 -61.465 1.0824 213 16.8195 -61.4375 1.08166 230 16.6193 -61.4629 1.0813 209 16.2218 -61.5197 1.08084 214 16.0306 -61.5781 1.08097 222 15.8243 -61.5776 1.08028 255 15.6305 -61.625 1.08028 229 15.4268 -61.633 1.07972 253 15.2285 -61.658 1.07957 255 15.0367 -61.7132 1.07971 228 17.4557 -61.4336 1.41825 255 14.8141 -61.6394 1.07802 255 17.252 -61.4495 1.41751 255 14.6329 -61.7381 1.07879 224 14.5319 -61.7434 1.07856 253 14.3331 -61.7672 1.07828 253 16.7467 -61.4999 1.41595 255 14.1343 -61.7867 1.07811 251 13.9433 -61.8443 1.07832 229 16.3453 -61.5441 1.41497 255 16.145 -61.5679 1.41446 255 15.9466 -61.5988 1.41411 255 15.7497 -61.6349 1.41386 255 15.5469 -61.6471 1.41316 255 15.3479 -61.6706 1.41285 255 15.1509 -61.7048 1.41261 255 17.4532 -61.4412 1.80751 213 14.9525 -61.7325 1.41225 255 17.2452 -61.4416 1.80612 201 14.7298 -61.6584 1.40992 255 17.0394 -61.4491 1.80494 202 14.6566 -61.7807 1.41188 255 16.9362 -61.4507 1.80432 201 14.4512 -61.7776 1.41095 255 16.7411 -61.4958 1.80414 203 14.2537 -61.8033 1.41075 255 14.0539 -61.8223 1.41028 255 16.3475 -61.5688 1.80354 185 16.1475 -61.5945 1.80291 185 15.9446 -61.608 1.80198 185 15.7453 -61.6344 1.8014 185 15.5478 -61.6679 1.80102 185 15.3498 -61.6952 1.80065 185 15.1494 -61.7158 1.79997 185 17.6189 -61.3696 2.22456 215 14.9495 -61.7376 1.79933 185 17.4256 -61.4226 2.22452 230 14.6915 -61.5137 1.79238 184 17.2187 -61.4268 2.2229 255 17.1202 -61.446 2.22267 231 14.4474 -61.7788 1.79749 200 16.9124 -61.4454 2.22092 255 14.2535 -61.82 1.79757 185 16.7193 -61.4945 2.22098 230 14.0558 -61.8487 1.79719 185 16.315 -61.5303 2.2188 255 16.1233 -61.5869 2.21902 231 15.9129 -61.5713 2.21689 255 15.7201 -61.6227 2.21697 231 15.5163 -61.6273 2.2157 255 15.3247 -61.6833 2.21597 231 15.12 -61.6863 2.21454 255 14.9291 -61.745 2.21494 233 14.72 -61.7272 2.21287 255 14.6236 -61.7521 2.21296 228 14.4211 -61.7569 2.21181 255 14.2299 -61.8134 2.21221 230 14.0256 -61.8128 2.21077 255 17.332 -61.4452 0.731885 235 14.7769 -61.7469 0.368853 255 17.1314 -61.4687 0.731805 235 16.932 -61.4988 0.731629 235 16.731 -61.5226 0.731403 235 16.5321 -61.5534 0.731243 235 13.9016 -61.9409 0.368936 255 13.9427 -61.8782 0.729348 235 +4 29.7949 -55.0599 2.18182 207 29.3628 -54.6707 2.16454 182 29.2374 -54.6428 2.16191 201 29.1098 -54.8174 2.16491 206 +7 13.2007 -53.6192 0.347656 255 13.0187 -53.6039 0.347528 255 13.5003 -53.2234 0.658881 235 13.3293 -53.2498 0.658768 235 13.1559 -53.266 0.658572 235 12.9868 -53.299 0.658524 235 12.8205 -53.3396 0.658683 235 +11 15.1235 -53.3189 -0.318568 255 14.7625 -53.3181 -0.317596 255 15.0667 -53.3429 -0.0216523 255 14.8923 -53.3648 -0.0215248 255 14.3726 -53.4369 -0.0210415 255 14.1057 -53.4458 -0.0207527 255 15.0182 -53.372 0.347728 255 14.8459 -53.3978 0.347835 255 14.6635 -53.3899 0.347712 255 14.499 -53.4471 0.347762 255 13.9987 -53.0904 0.658651 235 diff --git a/modules/perception/lib/base/BUILD b/modules/perception/lib/base/BUILD new file mode 100644 index 00000000000..f7d89a38709 --- /dev/null +++ b/modules/perception/lib/base/BUILD @@ -0,0 +1,43 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "base", + srcs = [ + "file_util.cc", + "registerer.cc", + "timer.cc", + ], + hdrs = [ + "file_util.h", + "registerer.h", + "timer.h", + ], + linkopts = [ + "-lboost_filesystem", + "-lboost_system", + ], + deps = [ + "//modules/common", + "//modules/common:log", + "@gtest//:gtest", + ], +) + +cc_test( + name = "perception_lib_base_test", + size = "small", + srcs = [ + "file_util_test.cc", + "registerer_test.cc", + "timer_test.cc", + ], + data = ["//modules/perception:perception_data"], + deps = [ + ":base", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/perception/lib/base/file_util.cc b/modules/perception/lib/base/file_util.cc new file mode 100644 index 00000000000..efb54d8a73d --- /dev/null +++ b/modules/perception/lib/base/file_util.cc @@ -0,0 +1,297 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/lib/base/file_util.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +using std::count; +using std::istreambuf_iterator; +using std::string; +using std::vector; + +bool FileUtil::GetType(const string& filename, FileType* type) { + struct stat stat_buf; + if (lstat(filename.c_str(), &stat_buf) != 0) { + return false; + } + if (S_ISDIR(stat_buf.st_mode) != 0) { + *type = TYPE_DIR; + } else if (S_ISREG(stat_buf.st_mode) != 0) { + *type = TYPE_FILE; + } else { + AWARN << "failed to get type: " << filename; + return false; + } + return true; +} + +bool FileUtil::DeleteFile(const string& filename) { + if (!Exists(filename)) { + return true; + } + FileType type; + if (!GetType(filename, &type)) { + return false; + } + if (type == TYPE_FILE) { + if (remove(filename.c_str()) != 0) { + AERROR << "failed to remove file: " << filename; + return false; + } + return true; + } + + DIR* dir = opendir(filename.c_str()); + if (dir == NULL) { + AWARN << "failed to opendir: " << filename; + return false; + } + dirent* dir_info = NULL; + while ((dir_info = readdir(dir)) != NULL) { + if (strcmp(dir_info->d_name, ".") == 0 || + strcmp(dir_info->d_name, "..") == 0) { + continue; + } + string temp_file = filename + "/" + string(dir_info->d_name); + FileType temp_type; + if (!GetType(temp_file, &temp_type)) { + AWARN << "failed to get file type: " << temp_file; + closedir(dir); + return false; + } + if (type == TYPE_DIR) { + DeleteFile(temp_file); + } + remove(temp_file.c_str()); + } + closedir(dir); + remove(filename.c_str()); + + return true; +} + +bool FileUtil::Exists(const string& file) { + int ret = access(file.c_str(), F_OK); + if (ret != 0) { + AINFO << "file not exist. file: " << file << " ret: " << strerror(errno); + return false; + } + return true; +} + +bool FileUtil::Exists(const string& path, const string& suffix) { + boost::filesystem::recursive_directory_iterator itr(path); + while (itr != boost::filesystem::recursive_directory_iterator()) { + if (boost::algorithm::ends_with(itr->path().string(), suffix)) { + return true; + } + ++itr; + } + return false; +} + +bool FileUtil::CreateDir(const string& dir) { + int ret = mkdir(dir.c_str(), S_IRWXU | S_IRWXG | S_IRWXO); + if (ret != 0) { + AWARN << "failed to create dir. [dir: " << dir + << "] [err: " << strerror(errno) << "]"; + return false; + } + return true; +} + +bool FileUtil::GetFileContent(const string& path, string* content) { + if (content == NULL) { + return false; + } + + int fd = ::open(path.c_str(), O_RDONLY); + if (fd < 0) { + AWARN << "failed to open file: " << path; + return false; + } + struct stat buf; + if (::fstat(fd, &buf) != 0) { + AWARN << "failed to lstat file: " << path; + ::close(fd); + return false; + } + + size_t fsize = buf.st_size; + content->resize(fsize); + char* data = const_cast(content->data()); + int size = 0; + size_t has_read = 0; + do { + size = ::read(fd, data + has_read, fsize - has_read); + if (size < 0) { + AWARN << "failed to read file: " << path; + ::close(fd); + return false; + } + has_read += size; + } while (size > 0); + ::close(fd); + return true; +} + +bool FileUtil::ReadLines(const string& path, vector* lines) { + std::ifstream fin(path); + if (!fin.good()) { + LOG(ERROR) << "Failed to open path: " << path; + return false; + } + if (lines == nullptr) { + return false; + } + + string line; + while (std::getline(fin, line)) { + lines->push_back(line); + } + return true; +} + +std::string FileUtil::RemoveFileSuffix(std::string filename) { + int first_index = filename.find_last_of("/"); + size_t last_index = filename.find_last_of("."); + if (last_index == std::string::npos) { + last_index = filename.length(); + } + std::string raw_name = + filename.substr(first_index + 1, last_index - first_index - 1); + return raw_name; +} + +void FileUtil::GetFileList(const std::string& path, const std::string& suffix, + std::vector* files) { + if (!Exists(path)) { + AINFO << path << " not exist."; + return; + } + + boost::filesystem::recursive_directory_iterator itr(path); + while (itr != boost::filesystem::recursive_directory_iterator()) { + try { + if (suffix.empty() || + boost::algorithm::ends_with(itr->path().string(), suffix)) { + files->push_back(itr->path().string()); + } + ++itr; + } catch (const std::exception& ex) { + AWARN << "Caught execption: " << ex.what(); + continue; + } + } +} + +void FileUtil::GetFileList(const string& path, vector* files) { + GetFileList(path, "", files); +} + +string FileUtil::GetAbsolutePath(const string& prefix, + const string& relative_path) { + if (relative_path.empty()) { + return prefix; + } + + if (prefix.empty()) { + return relative_path; + } + + string result = prefix; + + if (relative_path[0] == '/') { + return relative_path; + } + + if (prefix[prefix.length() - 1] != '/') { + result.append("/"); + } + return result.append(relative_path); +} + +void FileUtil::GetFileName(const string& file, string* name) { + size_t pos_left = file.find_last_of('/'); + size_t pos_right = file.find_last_of('.'); + if (pos_right == string::npos) { + *name = file.substr(pos_left + 1); + } else { + *name = file.substr(pos_left + 1, pos_right - pos_left - 1); + } +} + +bool FileUtil::CompareFileByDigital(const string& file_left, + const string& file_right) { + return CompareFile(file_left, file_right, FCT_DIGITAL); +} + +bool FileUtil::CompareFileByLexicographical(const string& file_left, + const string& file_right) { + return CompareFile(file_left, file_right, FCT_LEXICOGRAPHICAL); +} + +// private functions + +bool FileUtil::CompareFile(const string& file_left, const string& file_right, + FileCompareType type) { + string name_left; + GetFileName(file_left, &name_left); + string name_right; + GetFileName(file_right, &name_right); + + switch (type) { + case FCT_DIGITAL: + return atoll(name_left.c_str()) < atoll(name_right.c_str()); + case FCT_LEXICOGRAPHICAL: + return std::lexicographical_compare(name_left.begin(), name_left.end(), + name_right.begin(), name_right.end()); + default: + AERROR << "Unknown compare type!"; + } + + return true; +} + +int FileUtil::NumLines(const std::string& filename) { + std::ifstream ifs(filename.c_str()); + return ifs.good() + ? count(istreambuf_iterator(ifs), + istreambuf_iterator(), '\n') + + 1 + : -1; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/lib/base/file_util.h b/modules/perception/lib/base/file_util.h new file mode 100644 index 00000000000..5212f7639cf --- /dev/null +++ b/modules/perception/lib/base/file_util.h @@ -0,0 +1,101 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_LIB_BASE_FILE_UTIL_H_ +#define MODULES_PERCEPTION_LIB_BASE_FILE_UTIL_H_ + +#include +#include +#include +#include +#include + +#include "modules/common/macro.h" + +namespace apollo { +namespace perception { + +enum FileType { TYPE_FILE, TYPE_DIR }; + +// file name compared type +enum FileCompareType { + FCT_DIGITAL = 0, + FCT_LEXICOGRAPHICAL = 1, + FCT_UNKNOWN = 8 +}; + +class FileUtil { + public: + FileUtil() {} + + ~FileUtil() {} + + // check file or directory exists + static bool Exists(const std::string& filename); + + // check whether file exists with [suffix] extension in [path] + static bool Exists(const std::string& path, const std::string& suffix); + + // get file type: file/directory + static bool GetType(const std::string& filename, FileType* type); + + // delete file or directory + static bool DeleteFile(const std::string& filename); + + static bool CreateDir(const std::string& dir); + + static bool GetFileContent(const std::string& path, std::string* content); + static bool ReadLines(const std::string& path, + std::vector* lines); + + static std::string RemoveFileSuffix(std::string filename); + + static void GetFileList(const std::string& path, const std::string& suffix, + std::vector* files); + + static void GetFileList(const std::string& path, + std::vector* files); + + static std::string GetAbsolutePath(const std::string& prefix, + const std::string& relative_path); + + // get file name + // "/home/work/data/1.txt" -> 1 + static void GetFileName(const std::string& file, std::string* name); + + // return -1 when error occurred + static int NumLines(const std::string& filename); + + // compare two file's name by digital value + // "/home/work/data/1.txt" < "/home/user/data/10.txt" + // "1.txt" < "./data/2.txt" + static bool CompareFileByDigital(const std::string& file_left, + const std::string& file_right); + + // compare two file's name by lexicographical order + static bool CompareFileByLexicographical(const std::string& file_left, + const std::string& file_right); + + private: + static bool CompareFile(const std::string& file_left, + const std::string& file_right, FileCompareType type); + + DISALLOW_COPY_AND_ASSIGN(FileUtil); +}; +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_LIB_BASE_FILE_UTIL_H_ diff --git a/modules/perception/lib/base/file_util_test.cc b/modules/perception/lib/base/file_util_test.cc new file mode 100644 index 00000000000..d02a0c32abb --- /dev/null +++ b/modules/perception/lib/base/file_util_test.cc @@ -0,0 +1,137 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/lib/base/file_util.h" + +#include +#include +#include +#include "gtest/gtest.h" + +namespace apollo { +namespace perception { + +using std::string; + +TEST(FileUtilTest, test_GetAbsolutePath) { + EXPECT_EQ(FileUtil::GetAbsolutePath("", "./xx.txt"), "./xx.txt"); + EXPECT_EQ(FileUtil::GetAbsolutePath("/abc", ""), "/abc"); + EXPECT_EQ(FileUtil::GetAbsolutePath("/home/work", "xx.txt"), + "/home/work/xx.txt"); + EXPECT_EQ(FileUtil::GetAbsolutePath("/home/work/", "xx.txt"), + "/home/work/xx.txt"); + EXPECT_EQ(FileUtil::GetAbsolutePath("/home/work", "/xx.txt"), "/xx.txt"); + EXPECT_EQ(FileUtil::GetAbsolutePath("/home/work", "./xx.txt"), + "/home/work/./xx.txt"); +} + +TEST(FileUtilTest, test_GetFileName) { + string name; + FileUtil::GetFileName("/home/work/data/1.txt", &name); + EXPECT_EQ("1", name); + FileUtil::GetFileName("./data/data/11.txt", &name); + EXPECT_EQ("11", name); + FileUtil::GetFileName("111.txt", &name); + EXPECT_EQ("111", name); + FileUtil::GetFileName("111", &name); + EXPECT_EQ("111", name); +} + +TEST(FileUtilTest, test_CompareFileByDigital) { + EXPECT_TRUE( + FileUtil::CompareFileByDigital("./data/1.txt", "/home/data/2.txt")); + EXPECT_TRUE(FileUtil::CompareFileByDigital("1.txt", "/home/data/2.txt")); + EXPECT_TRUE(FileUtil::CompareFileByDigital("01.txt", "/home/data/2.txt")); + EXPECT_FALSE(FileUtil::CompareFileByDigital("10", "/home/data/2.txt")); + EXPECT_FALSE(FileUtil::CompareFileByDigital("010", "/home/data/2.txt")); + EXPECT_FALSE(FileUtil::CompareFileByDigital("100", "001")); +} + +TEST(FileUtilTest, test_CompareFileByLexicographical) { + EXPECT_TRUE(FileUtil::CompareFileByLexicographical( + "./data/QB1234_2222_3333_0001.pcd", "./data/QB1234_2222_3333_1000.pcd")); + EXPECT_TRUE(FileUtil::CompareFileByLexicographical( + "./data/QB1234_2222_3333_0001.pcd", "./data/QB1234_3333_3333_1000.pcd")); +} + +TEST(FileUtilTest, test_exists) { + ASSERT_TRUE(FileUtil::CreateDir("./tmp")); + EXPECT_FALSE(FileUtil::Exists("./tmp", ".txt")); + ASSERT_EQ(std::system("touch ./tmp/a.txt"), 0); + EXPECT_TRUE(FileUtil::Exists("./tmp", ".txt")); + + FileType type; + ASSERT_TRUE(FileUtil::GetType("./tmp", &type)); + ASSERT_TRUE(FileUtil::GetType("./tmp/a.txt", &type)); + std::system("ln -s ./tmp/a.txt ./ln_a.txt"); + ASSERT_FALSE(FileUtil::GetType("./ln_a.txt", &type)); + + ASSERT_TRUE(FileUtil::DeleteFile("/not_exist_path")); + ASSERT_TRUE(FileUtil::DeleteFile("./tmp")); +} + +TEST(FileUtilTest, test_ReadLines) { + std::string data_file = "./1.txt"; + std::system("echo -e '111\n222' > 1.txt"); + + std::vector lines; + EXPECT_FALSE(FileUtil::ReadLines("/not_exist_path", &lines)); + EXPECT_FALSE(FileUtil::ReadLines("./1.txt", nullptr)); + + EXPECT_TRUE(FileUtil::ReadLines(data_file, &lines)); + EXPECT_EQ(lines.size(), 2u); + std::system("rm ./1.txt"); +} + +TEST(FileUtilTest, test_GetFileContent) { + std::string proto_file = + "modules/perception/data/config_manager_test/config_manager.config"; + std::string content; + EXPECT_FALSE(FileUtil::GetFileContent(proto_file, NULL)); + EXPECT_FALSE(FileUtil::GetFileContent("/not_exist_path", &content)); + EXPECT_TRUE(FileUtil::GetFileContent(proto_file, &content)); +} + +TEST(FileUtilTest, test_RemoveFileSuffix) { + std::string proto_file = + "modules/perception/data/config_manager_test/config_manager.config"; + EXPECT_EQ("config_manager", FileUtil::RemoveFileSuffix(proto_file)); + + proto_file = "config_manager"; + EXPECT_EQ("config_manager", FileUtil::RemoveFileSuffix(proto_file)); +} + +TEST(FileUtilTest, test_GetFileList) { + std::vector files; + FileUtil::GetFileList("/not_exist_path", "config", &files); + EXPECT_EQ(0, files.size()); + std::string path = "modules/perception/data/config_manager_test"; + FileUtil::GetFileList(path, "config", &files); + EXPECT_GT(files.size(), 0); + + files.clear(); + FileUtil::GetFileList(path, &files); + EXPECT_GT(files.size(), 0); +} + +TEST(FileUtilTest, test_NumLines) { + std::string proto_file = + "modules/perception/data/config_manager_test/config_manager.config"; + EXPECT_GT(FileUtil::NumLines(proto_file), 0); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/lib/base/registerer.cc b/modules/perception/lib/base/registerer.cc new file mode 100644 index 00000000000..f8e53570594 --- /dev/null +++ b/modules/perception/lib/base/registerer.cc @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/lib/base/registerer.h" +#include +#include + +namespace apollo { +namespace perception { + +BaseClassMap& GlobalFactoryMap() { + static BaseClassMap factory_map; + return factory_map; +} + +bool GetRegisteredClasses( + const std::string& base_class_name, + std::vector* registered_derived_classes_names) { + CHECK_NOTNULL(registered_derived_classes_names); + BaseClassMap& map = GlobalFactoryMap(); + auto iter = map.find(base_class_name); + if (iter == map.end()) { + AERROR << "class not registered:" << base_class_name; + return false; + } + for (auto pair : iter->second) { + registered_derived_classes_names->push_back(pair.first); + } + return true; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/lib/base/registerer.h b/modules/perception/lib/base/registerer.h new file mode 100644 index 00000000000..44d33291750 --- /dev/null +++ b/modules/perception/lib/base/registerer.h @@ -0,0 +1,197 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +// Registerer is a factory register mechanism that make class registration at +// compile time and allow generating an object by giving the name. Example: +// +// class BaseClass { // base class +// ... +// }; +// REGISTER_REGISTERER(BaseClass); +// #define REGISTER_BASECLASS(name) REGISTER_CLASS(BaseClass, name) +// +// class Sub1 : public BaseClass { +// ... +// }; +// REGISTER_BASE(Sub1); +// class Sub2 : public BaseClass { +// ... +// }; +// REGISTER_BASE(Sub2); +// +// Note that REGISTER_BASE(sub1) should be put in cc file instead of h file, +// to avoid multi-declaration error when compile. +// +// Then you could get a new object of the sub class by: +// Base *obj = BaseClassRegisterer::GetInstanceByName("Sub1"); +// +// This is convenient when you need decide the class at runtime or by flag: +// string name = "Sub1"; +// if (...) +// name = "Sub2"; +// Base *obj = BaseClassRegisterer::GetInstanceByName(name); +// +// If there should be only one instance in the program by desgin, +// GetUniqInstance could be used: +// Base *obj = BaseClassRegisterer::GetUniqInstance(); +// If multi sub classes are registered, this method will cause a CHECK fail. +// + +#ifndef MODULES_PERCEPTION_LIB_BASE_REGISTERER_H_ +#define MODULES_PERCEPTION_LIB_BASE_REGISTERER_H_ + +#include +#include +#include + +#include "gtest/gtest_prod.h" + +#include "modules/common/log.h" +#include "modules/common/macro.h" + +namespace apollo { +namespace perception { + +// idea from boost any but make it more simple and don't use type_info. +class Any { + public: + Any() : content_(NULL) {} + + template + Any(const ValueType &value) // NOLINT + : content_(new Holder(value)) {} + + Any(const Any &other) + : content_(other.content_ ? other.content_->clone() : NULL) {} + + ~Any() { + delete content_; + } + + template + ValueType *AnyCast() { + return content_ ? &(static_cast *>(content_)->held_) + : NULL; // NOLINT + } + + private: + class PlaceHolder { + public: + virtual ~PlaceHolder() {} + virtual PlaceHolder *clone() const = 0; + }; + + template + class Holder : public PlaceHolder { + public: + explicit Holder(const ValueType &value) : held_(value) {} + virtual ~Holder() {} + virtual PlaceHolder *clone() const { + return new Holder(held_); + } + + ValueType held_; + }; + + PlaceHolder *content_; + + FRIEND_TEST(ObjectFactoryTest, test_ObjectFactory); +}; + +class ObjectFactory { + public: + ObjectFactory() {} + virtual ~ObjectFactory() {} + virtual Any NewInstance() { + return Any(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(ObjectFactory); +}; + +typedef std::map FactoryMap; +typedef std::map BaseClassMap; +BaseClassMap &GlobalFactoryMap(); + +bool GetRegisteredClasses( + const std::string &base_class_name, + std::vector *registered_derived_classes_names); + +} // namespace perception +} // namespace apollo + +#define REGISTER_REGISTERER(base_class) \ + class base_class##Registerer { \ + typedef perception::Any Any; \ + typedef perception::FactoryMap FactoryMap; \ + \ + public: \ + static base_class *GetInstanceByName(const ::std::string &name) { \ + FactoryMap &map = perception::GlobalFactoryMap()[#base_class]; \ + FactoryMap::iterator iter = map.find(name); \ + if (iter == map.end()) { \ + for (auto c : map) { \ + AERROR << "Instance:" << c.first; \ + } \ + AERROR << "Get instance " << name << " failed."; \ + return NULL; \ + } \ + Any object = iter->second->NewInstance(); \ + return *(object.AnyCast()); \ + } \ + static std::vector GetAllInstances() { \ + std::vector instances; \ + FactoryMap &map = perception::GlobalFactoryMap()[#base_class]; \ + instances.reserve(map.size()); \ + for (auto item : map) { \ + Any object = item.second->NewInstance(); \ + instances.push_back(*(object.AnyCast())); \ + } \ + return instances; \ + } \ + static const ::std::string GetUniqInstanceName() { \ + FactoryMap &map = perception::GlobalFactoryMap()[#base_class]; \ + CHECK_EQ(map.size(), 1) << map.size(); \ + return map.begin()->first; \ + } \ + static base_class *GetUniqInstance() { \ + FactoryMap &map = perception::GlobalFactoryMap()[#base_class]; \ + CHECK_EQ(map.size(), 1) << map.size(); \ + Any object = map.begin()->second->NewInstance(); \ + return *(object.AnyCast()); \ + } \ + static bool IsValid(const ::std::string &name) { \ + FactoryMap &map = perception::GlobalFactoryMap()[#base_class]; \ + return map.find(name) != map.end(); \ + } \ + }; + +#define REGISTER_CLASS(clazz, name) \ + class ObjectFactory##name : public apollo::perception::ObjectFactory { \ + public: \ + virtual ~ObjectFactory##name() {} \ + virtual perception::Any NewInstance() { \ + return perception::Any(new name()); \ + } \ + }; \ + inline void RegisterFactory##name() { \ + perception::FactoryMap &map = \ + perception::GlobalFactoryMap()[#clazz]; \ + if (map.find(#name) == map.end()) map[#name] = new ObjectFactory##name(); \ + } + +#endif // MODULES_PERCEPTION_LIB_BASE_REGISTERER_H_ diff --git a/modules/perception/lib/base/registerer_test.cc b/modules/perception/lib/base/registerer_test.cc new file mode 100644 index 00000000000..6b239673296 --- /dev/null +++ b/modules/perception/lib/base/registerer_test.cc @@ -0,0 +1,91 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "gtest/gtest.h" + +#include "modules/perception/lib/base/registerer.h" + +namespace apollo { +namespace perception { + +class BaseClass { + public: + BaseClass() = default; + ~BaseClass() = default; + virtual std::string name() const = 0; +}; +REGISTER_REGISTERER(BaseClass); +#define REGISTER_TEST(name) REGISTER_CLASS(BaseClass, name) + +class DerivedClass1 : BaseClass { + public: + DerivedClass1() = default; + ~DerivedClass1() = default; + virtual std::string name() const { + return "DerivedClass1"; + } +}; +REGISTER_TEST(DerivedClass1); + +class DerivedClass2 : BaseClass { + public: + DerivedClass2() = default; + ~DerivedClass2() = default; + virtual std::string name() const { + return "DerivedClass2"; + } +}; +REGISTER_TEST(DerivedClass2); + +TEST(RegistererTest, test) { + RegisterFactoryDerivedClass1(); + RegisterFactoryDerivedClass2(); + BaseClass* ptr = nullptr; + ptr = BaseClassRegisterer::GetInstanceByName("DerivedClass1"); + ASSERT_TRUE(ptr != nullptr); + EXPECT_EQ(ptr->name(), "DerivedClass1"); + ptr = BaseClassRegisterer::GetInstanceByName("DerivedClass2"); + ASSERT_TRUE(ptr != nullptr); + EXPECT_EQ(ptr->name(), "DerivedClass2"); + + ptr = BaseClassRegisterer::GetInstanceByName("NotExists"); + ASSERT_TRUE(ptr == nullptr); + + std::vector derived_classes; + EXPECT_TRUE(GetRegisteredClasses("BaseClass", &derived_classes)); + EXPECT_FALSE(GetRegisteredClasses("NotExitstClass", &derived_classes)); + EXPECT_EQ(derived_classes.size(), 2u); + EXPECT_TRUE(derived_classes[0] == "DerivedClass1" || + derived_classes[0] == "DerivedClass2"); + EXPECT_TRUE(derived_classes[1] == "DerivedClass1" || + derived_classes[1] == "DerivedClass2"); +} + +TEST(ObjectFactoryTest, test_ObjectFactory) { + ObjectFactory obj_fac; + Any any = obj_fac.NewInstance(); + EXPECT_TRUE(any.content_ == NULL); + int value = 100; + Any any2(value); + EXPECT_FALSE(any2.content_ == NULL); + EXPECT_EQ(*any2.AnyCast(), value); + Any any3(any2); + EXPECT_FALSE(any3.content_ == NULL); + EXPECT_EQ(*any3.AnyCast(), value); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/lib/base/timer.cc b/modules/perception/lib/base/timer.cc new file mode 100644 index 00000000000..7903e963043 --- /dev/null +++ b/modules/perception/lib/base/timer.cc @@ -0,0 +1,43 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/lib/base/timer.h" + +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +using std::string; +using std::chrono::duration_cast; +using std::chrono::milliseconds; + +void Timer::start() { start_time_ = std::chrono::system_clock::now(); } + +uint64_t Timer::end(const string& msg) { + end_time_ = std::chrono::system_clock::now(); + uint64_t elapsed_time = + duration_cast(end_time_ - start_time_).count(); + + ADEBUG << "TIMER " << msg << " elapsed_time: " << elapsed_time << " ms"; + + // start new timer. + start_time_ = end_time_; + return elapsed_time; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/lib/base/timer.h b/modules/perception/lib/base/timer.h new file mode 100644 index 00000000000..0c71415e23d --- /dev/null +++ b/modules/perception/lib/base/timer.h @@ -0,0 +1,77 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_LIB_BASE_TIMER_H_ +#define MODULES_PERCEPTION_LIB_BASE_TIMER_H_ + +#include +#include +#include + +#include "modules/common/macro.h" + +namespace apollo { +namespace perception { + +using TimePoint = std::chrono::system_clock::time_point; + +class Timer { + public: + Timer() = default; + + // no-thread safe. + void start(); + + // return the elapsed time, + // also output msg and time in glog. + // automatically start a new timer. + // no-thread safe. + uint64_t end(const std::string& msg); + + private: + // in ms. + TimePoint start_time_; + TimePoint end_time_; + + DISALLOW_COPY_AND_ASSIGN(Timer); +}; + +class TimerWrapper { + public: + explicit TimerWrapper(const std::string& msg) : msg_(msg) { timer_.start(); } + + ~TimerWrapper() { timer_.end(msg_); } + + private: + Timer timer_; + std::string msg_; + + DISALLOW_COPY_AND_ASSIGN(TimerWrapper); +}; + +} // namespace perception +} // namespace apollo + +#define PERF_FUNCTION(function_name) \ + apollo::perception::TimerWrapper _timer_wrapper_(function_name) + +#define PERF_BLOCK_START() \ + apollo::perception::Timer _timer_; \ + _timer_.start() + +#define PERF_BLOCK_END(msg) _timer_.end(msg) + +#endif // MODULES_PERCEPTION_LIB_BASE_TIMER_H_ diff --git a/modules/drivers/gnss/tests/utils_test.cpp b/modules/perception/lib/base/timer_test.cc similarity index 52% rename from modules/drivers/gnss/tests/utils_test.cpp rename to modules/perception/lib/base/timer_test.cc index 5a47350f29f..6f18cb15466 100644 --- a/modules/drivers/gnss/tests/utils_test.cpp +++ b/modules/perception/lib/base/timer_test.cc @@ -14,35 +14,43 @@ * limitations under the License. *****************************************************************************/ -#include "gtest/gtest.h" +#include "modules/perception/lib/base/timer.h" + +#include -#include "gnss/utils.h" +#include "gtest/gtest.h" +#include "modules/common/log.h" namespace apollo { -namespace drivers { -namespace gnss { +namespace perception { + +TEST(TimeTest, test_timer) { + Timer timer; + timer.start(); + usleep(100000); + uint64_t elapsed_time = timer.end("TimerTest"); + EXPECT_TRUE(elapsed_time >= 99 && elapsed_time <= 101); +} -TEST(utils, encode_base64) { - std::string str64; +TEST(TimerWrapperTest, test) { + TimerWrapper wrapper("TimerWrapperTest"); + usleep(200000); +} - std::string str("The quick brown fox jumps over the lazy dog.."); - EXPECT_STREQ("VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4u", - encode_base64(str).c_str()); +TEST(PerfFunctionTest, test) { + PERF_FUNCTION("FunctionTest"); + usleep(100000); +} - str.resize(str.size() - 1); - EXPECT_STREQ("VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4=", - encode_base64(str).c_str()); +TEST(PerfBlockTest, test) { + PERF_BLOCK_START(); + // do somethings. + usleep(100000); + PERF_BLOCK_END("BLOCK1"); - str.resize(str.size() - 1); - EXPECT_STREQ("VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZw==", - encode_base64(str).c_str()); + usleep(200000); + PERF_BLOCK_END("BLOCK2"); } -} // namespace gnss -} // namespace drivers +} // namespace perception } // namespace apollo - -int main(int argc, char** argv) { - testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/modules/perception/lib/config_manager/BUILD b/modules/perception/lib/config_manager/BUILD new file mode 100644 index 00000000000..5b795860f19 --- /dev/null +++ b/modules/perception/lib/config_manager/BUILD @@ -0,0 +1,29 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "config_manager", + srcs = ["config_manager.cc"], + hdrs = ["config_manager.h"], + deps = [ + "//modules/common:log", + "//modules/perception/common:perception_common", + "//modules/perception/lib/base", + "//modules/perception/lib/config_manager/proto:config_proto", + ], +) + +cc_test( + name = "config_manager_test", + size = "small", + srcs = ["config_manager_test.cc"], + data = ["//modules/perception:perception_data"], + deps = [ + ":config_manager", + "//modules/perception/common:perception_common", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/perception/lib/config_manager/config_manager.cc b/modules/perception/lib/config_manager/config_manager.cc new file mode 100644 index 00000000000..05b51186c3e --- /dev/null +++ b/modules/perception/lib/config_manager/config_manager.cc @@ -0,0 +1,231 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/lib/config_manager/config_manager.h" + +#include +#include +#include +#include + +#include "google/protobuf/text_format.h" +#include "modules/common/log.h" +#include "modules/perception/common/perception_gflags.h" +#include "modules/perception/lib/base/file_util.h" +#include "modules/perception/lib/config_manager/proto/config_schema.pb.h" + +namespace apollo { +namespace perception { + +using google::protobuf::TextFormat; + +ConfigManager::ConfigManager() { + work_root_ = FLAGS_work_root; +} + +bool ConfigManager::Init() { + std::unique_lock lock(mutex_); + return InitInternal(); +} + +bool ConfigManager::InitInternal() { + if (inited_) { + return true; + } + ModelConfigMapIterator iter = model_config_map_.begin(); + for (; iter != model_config_map_.end(); ++iter) { + delete iter->second; + } + model_config_map_.clear(); + + std::string path = + FileUtil::GetAbsolutePath(work_root_, FLAGS_config_manager_path); + + AINFO << "WORK_ROOT: " << work_root_ << " config_manager_path: " << path; + + std::string content; + if (!FileUtil::GetFileContent(path, &content)) { + AERROR << "failed to get ConfigManager config path: " << path; + return false; + } + + ModelConfigFileListProto file_list_proto; + + if (!TextFormat::ParseFromString(content, &file_list_proto)) { + AERROR << "invalid ModelConfigFileListProto file: " + << FLAGS_config_manager_path; + return false; + } + + for (const std::string& model_config_file : + file_list_proto.model_config_path()) { + std::string abs_path = + FileUtil::GetAbsolutePath(work_root_, model_config_file); + + std::string config_content; + if (!FileUtil::GetFileContent(abs_path, &config_content)) { + AERROR << "failed to get_file_content: " << abs_path; + return false; + } + + MultiModelConfigProto multi_model_config_proto; + + if (!TextFormat::ParseFromString(config_content, + &multi_model_config_proto)) { + AERROR << "invalid MultiModelConfigProto file: " << abs_path; + return false; + } + + for (const ModelConfigProto& model_config_proto : + multi_model_config_proto.model_configs()) { + ModelConfig* model_config = new ModelConfig(); + if (!model_config->Reset(model_config_proto)) { + return false; + } + + AINFO << "load ModelConfig succ. name: " << model_config->name(); + + std::pair result = + model_config_map_.emplace(model_config->name(), model_config); + if (!result.second) { + AWARN << "duplicate ModelConfig, name: " << model_config->name(); + return false; + } + } + } + + AINFO << "finish to load ModelConfigs. num_models: " + << model_config_map_.size(); + + inited_ = true; + + return true; +} + +bool ConfigManager::Reset() { + std::unique_lock lock(mutex_); + inited_ = false; + return InitInternal(); +} + +bool ConfigManager::GetModelConfig(const std::string& model_name, + const ModelConfig** model_config) { + if (!inited_ && !Init()) { + return false; + } + + ModelConfigMapConstIterator citer = model_config_map_.find(model_name); + + if (citer == model_config_map_.end()) { + return false; + } + *model_config = citer->second; + return true; +} + +ConfigManager::~ConfigManager() { + ModelConfigMapIterator iter = model_config_map_.begin(); + for (; iter != model_config_map_.end(); ++iter) { + delete iter->second; + } +} + +bool ModelConfig::Reset(const ModelConfigProto& proto) { + name_ = proto.name(); + version_ = proto.version(); + + integer_param_map_.clear(); + string_param_map_.clear(); + double_param_map_.clear(); + float_param_map_.clear(); + bool_param_map_.clear(); + array_integer_param_map_.clear(); + array_string_param_map_.clear(); + array_double_param_map_.clear(); + array_float_param_map_.clear(); + array_bool_param_map_.clear(); + + for (const KeyValueInt& pair : proto.integer_params()) { + integer_param_map_.emplace(pair.name(), pair.value()); + } + + for (const KeyValueString& pair : proto.string_params()) { + string_param_map_.emplace(pair.name(), pair.value()); + } + + for (const KeyValueDouble& pair : proto.double_params()) { + double_param_map_.emplace(pair.name(), pair.value()); + } + + for (const KeyValueFloat& pair : proto.float_params()) { + float_param_map_.emplace(pair.name(), pair.value()); + } + + for (const KeyValueBool& pair : proto.bool_params()) { + bool_param_map_.emplace(pair.name(), pair.value()); + } + + for (const KeyValueArrayInt& pair : proto.array_integer_params()) { + std::vector values; + RepeatedToVector(pair.values(), &values); + array_integer_param_map_.emplace(pair.name(), values); + } + + for (const KeyValueArrayString& pair : proto.array_string_params()) { + std::vector values; + values.reserve(pair.values_size()); + for (const std::string& value : pair.values()) { + values.push_back(value); + } + array_string_param_map_.emplace(pair.name(), values); + } + + for (const KeyValueArrayDouble& pair : proto.array_double_params()) { + std::vector values; + RepeatedToVector(pair.values(), &values); + array_double_param_map_.emplace(pair.name(), values); + } + + for (const KeyValueArrayFloat& pair : proto.array_float_params()) { + std::vector values; + RepeatedToVector(pair.values(), &values); + array_float_param_map_.emplace(pair.name(), values); + } + + for (const KeyValueArrayBool& pair : proto.array_bool_params()) { + std::vector values; + RepeatedToVector(pair.values(), &values); + array_bool_param_map_.emplace(pair.name(), values); + } + + AINFO << "reset ModelConfig. model_name: " << name_ + << " integer_param_map's size: " << integer_param_map_.size() + << " string_param_map's size: " << string_param_map_.size() + << " double_param_map's size: " << double_param_map_.size() + << " float_param_map's size: " << float_param_map_.size() + << " bool_param_map's size: " << bool_param_map_.size() + << " array_integer_param_map's size: " + << array_integer_param_map_.size() + << " array_string_param_map's size: " << array_string_param_map_.size() + << " array_double_param_map's size: " << array_double_param_map_.size() + << " array_float_param_map's size: " << array_float_param_map_.size() + << " array_bool_param_map's size: " << array_bool_param_map_.size(); + + return true; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/lib/config_manager/config_manager.h b/modules/perception/lib/config_manager/config_manager.h new file mode 100644 index 00000000000..4fcb0e6464b --- /dev/null +++ b/modules/perception/lib/config_manager/config_manager.h @@ -0,0 +1,301 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +// ConfigManager use protobuf text format to manage all your model configs. +// +// CODE SAMPLE: +// you can use such code to access your parameters: +// +// #include "lib/config_manager/config_manager.h" +// +// ConfigManager* config_manager = ConfigManager::instance(); +// +// string model_name = "FrameClassifier"; +// const ModelConfig* model_config = NULL; +// if (!config_manager->GetModelConfig(model_name, &model_config)) { +// XLOG(ERROR) << "not found model: " << model_name; +// return false; +// } +// +// int int_value = 0; +// if (!model_config->GetValue("my_param_name", &int_value)) { +// XLOG(ERROR) << "my_param_name not found." +// return false; +// } +// using int_value.... +// +// +// CONFIG FORMAT +// +// First you should define file: conf/config_manager.config, +// you can set the path by gflags +// --config_manager_path=conf/config_manager.config +// +// file content like as: +// define all model config paths. +// ############################################ +// +// model_config_path: "./conf/frame_classifier.config" +// model_config_path: "./conf/track_classifier.config" +// +// ############################################ +// +// one line identify one model parameter config path. +// ModelConfig config file like as: +// file: ./conf/frame_classifier.config +// ############################################# +// +// model_configs { +// # FrameClassifier model. +// name: "FrameClassifier" +// version: "1.0.0" +// integer_params { +// name: "threshold1" +// value: 1 +// } +// +// integer_params { +// name: "threshold2" +// value: 2 +// } +// +// string_params { +// name: "threshold3" +// value: "str3" +// } +// +// double_params { +// name: "threshold4" +// value: 4.0 +// } +// +// array_integer_params { +// name: "array_p1" +// values: 1 +// values: 2 +// values: 3 +// } +// +// array_string_params { +// name: "array_p2" +// values: "str1" +// values: "str2" +// values: "str3" +// values: "str4" +// } +// +// array_string_params { +// name: "array_p3" +// values: "str1" +// values: "str2" +// values: "str3" +// values: "str4" +// } +// +// array_double_params { +// name: "array_p4" +// values: 1.1 +// values: 1.2 +// values: 1.3 +// values: 1.4 +// } +// } + +#ifndef MODULES_PERCEPTION_LIB_CONFIG_MANAGER_H_ +#define MODULES_PERCEPTION_LIB_CONFIG_MANAGER_H_ + +#include +#include +#include +#include +#include +#include + +#include "google/protobuf/message.h" +#include "modules/common/macro.h" + +namespace apollo { +namespace perception { + +class ModelConfig; +class ModelConfigProto; + +class ConfigManager { + public: + // thread-safe interface. + bool Init(); + + // thread-safe interface. + bool Reset(); + + bool GetModelConfig(const std::string& model_name, + const ModelConfig** model_config); + + size_t NumModels() const { + return model_config_map_.size(); + } + + const std::string& work_root() const { + return work_root_; + } + + void SetWorkRoot(const std::string& work_root) { + work_root_ = work_root; + } + + private: + ~ConfigManager(); + + bool InitInternal(); + + typedef std::map ModelConfigMap; + typedef ModelConfigMap::iterator ModelConfigMapIterator; + typedef ModelConfigMap::const_iterator ModelConfigMapConstIterator; + + // key: model_name + ModelConfigMap model_config_map_; + std::mutex mutex_; // multi-thread init safe. + bool inited_ = false; + std::string work_root_; // ConfigManager work root dir. + + DECLARE_SINGLETON(ConfigManager); +}; + +class ModelConfig { + public: + ModelConfig() {} + ~ModelConfig() {} + + bool Reset(const ModelConfigProto& proto); + + std::string name() const { + return name_; + } + + bool GetValue(const std::string& name, int* value) const { + return GetValueFromMap(name, integer_param_map_, value); + } + + bool GetValue(const std::string& name, std::string* value) const { + return GetValueFromMap(name, string_param_map_, value); + } + + bool GetValue(const std::string& name, double* value) const { + return GetValueFromMap(name, double_param_map_, value); + } + + bool GetValue(const std::string& name, float* value) const { + return GetValueFromMap(name, float_param_map_, value); + } + + bool GetValue(const std::string& name, bool* value) const { + return GetValueFromMap(name, bool_param_map_, value); + } + + bool GetValue(const std::string& name, std::vector* values) const { + return GetValueFromMap>(name, array_integer_param_map_, + values); + } + + bool GetValue(const std::string& name, std::vector* values) const { + return GetValueFromMap>(name, array_double_param_map_, + values); + } + + bool GetValue(const std::string& name, std::vector* values) const { + return GetValueFromMap>(name, array_float_param_map_, + values); + } + + bool GetValue(const std::string& name, + std::vector* values) const { + return GetValueFromMap>( + name, array_string_param_map_, values); + } + + bool GetValue(const std::string& name, std::vector* values) const { + return GetValueFromMap>(name, array_bool_param_map_, + values); + } + + private: + template + bool GetValueFromMap(const std::string& name, + const std::map& container, + T* value) const; + + template + void RepeatedToVector( + const google::protobuf::RepeatedField& repeated_values, + std::vector* vec_values); + + std::string name_; + std::string version_; + + typedef std::map IntegerParamMap; + typedef std::map StringParamMap; + typedef std::map DoubleParamMap; + typedef std::map FloatParamMap; + typedef std::map BoolParamMap; + typedef std::map> ArrayIntegerParamMap; + typedef std::map> ArrayStringParamMap; + typedef std::map> ArrayDoubleParamMap; + typedef std::map> ArrayFloatParamMap; + typedef std::map> ArrayBoolParamMap; + + IntegerParamMap integer_param_map_; + StringParamMap string_param_map_; + DoubleParamMap double_param_map_; + FloatParamMap float_param_map_; + BoolParamMap bool_param_map_; + ArrayIntegerParamMap array_integer_param_map_; + ArrayStringParamMap array_string_param_map_; + ArrayDoubleParamMap array_double_param_map_; + ArrayFloatParamMap array_float_param_map_; + ArrayBoolParamMap array_bool_param_map_; + + DISALLOW_COPY_AND_ASSIGN(ModelConfig); +}; + +template +bool ModelConfig::GetValueFromMap(const std::string& name, + const std::map& container, + T* value) const { + typename std::map::const_iterator citer = + container.find(name); + + if (citer == container.end()) { + return false; + } + + *value = citer->second; + return true; +} + +template +void ModelConfig::RepeatedToVector( + const google::protobuf::RepeatedField& repeated_values, + std::vector* vec_list) { + vec_list->reserve(repeated_values.size()); + for (T value : repeated_values) { + vec_list->push_back(value); + } +} + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_LIB_CONFIG_MANAGER_H_ diff --git a/modules/perception/lib/config_manager/config_manager_test.cc b/modules/perception/lib/config_manager/config_manager_test.cc new file mode 100644 index 00000000000..4fba5931e0e --- /dev/null +++ b/modules/perception/lib/config_manager/config_manager_test.cc @@ -0,0 +1,136 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/lib/config_manager/config_manager.h" + +#include +#include + +#include "gtest/gtest.h" +#include "modules/perception/common/perception_gflags.h" + +namespace apollo { +namespace perception { + +class ConfigManagerTest : public testing::Test { + protected: + ConfigManagerTest() : config_manager_(NULL) {} + virtual ~ConfigManagerTest() {} + virtual void SetUp() { + FLAGS_work_root = "modules/perception/data"; + FLAGS_config_manager_path = "./config_manager_test/config_manager.config"; + config_manager_ = ConfigManager::instance(); + } + + protected: + ConfigManager* config_manager_; +}; + +TEST_F(ConfigManagerTest, test_Init) { + EXPECT_TRUE(config_manager_->Init()); + EXPECT_EQ(config_manager_->NumModels(), 3u); +} + +TEST_F(ConfigManagerTest, test_Reset) { + EXPECT_TRUE(config_manager_->Reset()); + std::string wrong_root = "wrong_root"; + config_manager_->SetWorkRoot(wrong_root); + EXPECT_FALSE(config_manager_->Reset()); + config_manager_->SetWorkRoot(FLAGS_work_root); +} + +TEST_F(ConfigManagerTest, test_GetModelConfig) { + std::string model_name = "ROIFilterTest"; + const ModelConfig* model_config = NULL; + EXPECT_TRUE(config_manager_->GetModelConfig(model_name, &model_config)); + ASSERT_TRUE(model_config != NULL); + EXPECT_EQ(model_config->name(), model_name); + + // not exist model. + model_config = NULL; + EXPECT_FALSE(config_manager_->GetModelConfig("noexist", &model_config)); + EXPECT_TRUE(model_config == NULL); +} + +TEST_F(ConfigManagerTest, test_ModelConfig) { + std::string model_name = "ROIFilterTest"; + ASSERT_TRUE(config_manager_->Init()); + ASSERT_EQ(config_manager_->NumModels(), 3u); + const ModelConfig* model_config = NULL; + ASSERT_TRUE(config_manager_->GetModelConfig(model_name, &model_config)); + ASSERT_EQ(model_config->name(), model_name); + // Check ROIFilterTest param map. + + int int_value = 0; + EXPECT_TRUE(model_config->GetValue("threshold1", &int_value)); + EXPECT_EQ(int_value, 1); + EXPECT_TRUE(model_config->GetValue("threshold2", &int_value)); + EXPECT_EQ(int_value, 2); + + std::string str_value; + EXPECT_TRUE(model_config->GetValue("threshold3", &str_value)); + EXPECT_EQ(str_value, "str3"); + + double double_value; + EXPECT_TRUE(model_config->GetValue("threshold4", &double_value)); + EXPECT_EQ(double_value, 4.0); + + float float_value; + EXPECT_TRUE(model_config->GetValue("threshold5", &float_value)); + EXPECT_EQ(float_value, 5.0); + + bool bool_value = false; + EXPECT_TRUE(model_config->GetValue("bool_value_true", &bool_value)); + EXPECT_EQ(bool_value, true); + EXPECT_TRUE(model_config->GetValue("bool_value_false", &bool_value)); + EXPECT_EQ(bool_value, false); + + std::vector int_list; + EXPECT_TRUE(model_config->GetValue("array_p1", &int_list)); + EXPECT_EQ(int_list.size(), 3u); + EXPECT_EQ(int_list[2], 3); + + std::vector str_list; + EXPECT_TRUE(model_config->GetValue("array_p2", &str_list)); + EXPECT_EQ(str_list.size(), 4u); + EXPECT_EQ(str_list[2], "str3"); + + std::vector double_list; + EXPECT_TRUE(model_config->GetValue("array_p4", &double_list)); + EXPECT_EQ(double_list.size(), 4u); + EXPECT_EQ(double_list[2], 1.3); + + std::vector float_list; + EXPECT_TRUE(model_config->GetValue("array_float", &float_list)); + EXPECT_EQ(float_list.size(), 4u); + EXPECT_FLOAT_EQ(float_list[2], 2.3); + + std::vector bool_list; + EXPECT_TRUE(model_config->GetValue("array_bool", &bool_list)); + EXPECT_EQ(bool_list.size(), 4u); + EXPECT_EQ(bool_list[2], true); + + // not exist + EXPECT_FALSE(model_config->GetValue("array_p3", &double_list)); + EXPECT_FALSE(model_config->GetValue("array_p3", &int_list)); + EXPECT_FALSE(model_config->GetValue("array_p1", &str_list)); + EXPECT_FALSE(model_config->GetValue("array_p3", &double_value)); + EXPECT_FALSE(model_config->GetValue("array_p3", &int_value)); + EXPECT_FALSE(model_config->GetValue("array_p3", &str_value)); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/lib/config_manager/proto/BUILD b/modules/perception/lib/config_manager/proto/BUILD new file mode 100644 index 00000000000..07f79a6c119 --- /dev/null +++ b/modules/perception/lib/config_manager/proto/BUILD @@ -0,0 +1,15 @@ +package(default_visibility = ["//visibility:public"]) + +cc_proto_library( + name = "config_proto", + deps = [ + ":config_proto_lib", + ], +) + +proto_library( + name = "config_proto_lib", + srcs = [ + "config_schema.proto", + ], +) diff --git a/modules/perception/lib/config_manager/proto/config_schema.proto b/modules/perception/lib/config_manager/proto/config_schema.proto new file mode 100644 index 00000000000..4b9e6d2d6fd --- /dev/null +++ b/modules/perception/lib/config_manager/proto/config_schema.proto @@ -0,0 +1,77 @@ +syntax = "proto2"; + +package apollo.perception; + +message KeyValueInt { + required string name = 1; + required int32 value = 2; +} + +message KeyValueString { + required string name = 1; + required bytes value = 2; +} + +message KeyValueDouble { + required string name = 1; + required double value = 2; +} + +message KeyValueFloat { + required string name = 1; + required float value = 2; +} + +message KeyValueBool { + required string name = 1; + required bool value = 2; +} + +message KeyValueArrayInt { + required string name = 1; + repeated int32 values = 2; +} + +message KeyValueArrayString { + required string name = 1; + repeated bytes values = 2; +} + +message KeyValueArrayDouble { + required string name = 1; + repeated double values = 2; +} + +message KeyValueArrayFloat { + required string name = 1; + repeated float values = 2; +} + +message KeyValueArrayBool { + required string name = 1; + repeated bool values = 2; +} + +message ModelConfigProto { + required string name = 1; + optional string version = 2; + + repeated KeyValueInt integer_params = 3; + repeated KeyValueString string_params = 4; + repeated KeyValueDouble double_params = 5; + repeated KeyValueFloat float_params = 6; + repeated KeyValueBool bool_params = 7; + repeated KeyValueArrayInt array_integer_params = 8; + repeated KeyValueArrayString array_string_params = 9; + repeated KeyValueArrayDouble array_double_params = 10; + repeated KeyValueArrayFloat array_float_params = 11; + repeated KeyValueArrayBool array_bool_params = 12; +} + +message MultiModelConfigProto { + repeated ModelConfigProto model_configs = 1; +} + +message ModelConfigFileListProto { + repeated string model_config_path = 1; +} diff --git a/modules/perception/lib/pcl_util/BUILD b/modules/perception/lib/pcl_util/BUILD new file mode 100644 index 00000000000..ec4e25f1e40 --- /dev/null +++ b/modules/perception/lib/pcl_util/BUILD @@ -0,0 +1,14 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "pcl_util", + srcs = [], + hdrs = glob(["*.h"]), + deps = [ + "@pcl//:pcl", + ], +) + +cpplint() diff --git a/modules/perception/lib/pcl_util/pcl_types.h b/modules/perception/lib/pcl_util/pcl_types.h new file mode 100644 index 00000000000..18052e754db --- /dev/null +++ b/modules/perception/lib/pcl_util/pcl_types.h @@ -0,0 +1,186 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_LIB_PCL_UTIL_PCL_TYPES_H_ +#define MODULES_PERCEPTION_LIB_PCL_UTIL_PCL_TYPES_H_ + +#include "pcl/common/time.h" +#include "pcl/common/transforms.h" +#include "pcl/kdtree/kdtree_flann.h" +#include "pcl/point_cloud.h" +#include "pcl/point_types.h" +#include "pcl/search/impl/kdtree.hpp" + +namespace apollo { +namespace perception { +namespace pcl_util { + +typedef pcl::PointIndices PointIndices; +typedef pcl::PointIndices::Ptr PointIndicesPtr; +typedef pcl::PointXY Point2d; +typedef pcl::PointCloud PointCloud2d; +typedef pcl::PointCloud::Ptr PointCloud2dPtr; +typedef pcl::PointCloud::ConstPtr PointCloud2dConstPtr; + +struct PointXYZIH; + +typedef PointXYZIH Point; +typedef pcl::PointCloud PointCloud; +typedef pcl::PointCloud::Ptr PointCloudPtr; +typedef pcl::PointCloud::ConstPtr PointCloudConstPtr; +typedef pcl::PointXYZRGB CPoint; +typedef pcl::PointCloud CPointCloud; +typedef pcl::PointCloud::Ptr CPointCloudPtr; +typedef pcl::PointCloud::ConstPtr CPointCloudConstPtr; +typedef pcl::KdTreeFLANN KdTree; + +struct BoundingCube { + float x; // center of box + float y; // center of box + float z; // center of box + float length; + float width; + float height; + float yaw; + + float trans_x; // center of points + float trans_y; // center of points + float trans_z; // center of points +}; + +// using double type to define x, y, z. +struct PointD { + double x; + double y; + double z; + uint8_t intensity; + EIGEN_MAKE_ALIGNED_OPERATOR_NEW +} EIGEN_ALIGN16; + +typedef ::pcl::PointCloud PointDCloud; +typedef ::pcl::PointCloud::Ptr PointDCloudPtr; +typedef ::pcl::PointCloud::ConstPtr PointDCloudConstPtr; + +struct PointXYZIH { + PCL_ADD_POINT4D; + float intensity; + float h; // height from ground + + PointXYZIH() { + x = 0.0f; + y = 0.0f; + z = 0.0f; + h = 0.0f; + intensity = 0.0f; + data[3] = 1.0f; + } + + explicit PointXYZIH(float _intensity) { + x = 0.0f; + y = 0.0f; + z = 0.0f; + data[3] = 1.0f; + intensity = _intensity; + } + EIGEN_MAKE_ALIGNED_OPERATOR_NEW +} EIGEN_ALIGN16; + +struct PointXYZIRT { + float x; + float y; + float z; + unsigned char intensity; + unsigned char ring; + double timestamp; + + EIGEN_MAKE_ALIGNED_OPERATOR_NEW // make sure our new allocators are aligned +} EIGEN_ALIGN16; // enforce SSE padding for correct memory alignment + +struct PointXYZIT { + float x; + float y; + float z; + unsigned char intensity; + double timestamp; + + EIGEN_MAKE_ALIGNED_OPERATOR_NEW // make sure our new allocators are aligned +} EIGEN_ALIGN16; // enforce SSE padding for correct memory alignment + +struct RawPointXYZIT { + PCL_ADD_POINT4D + uint8_t intensity; + double timestamp; + EIGEN_MAKE_ALIGNED_OPERATOR_NEW // make sure our new allocators are aligned +} EIGEN_ALIGN16; // enforce SSE padding for correct memory alignment + +struct PointXYZIRTd { + double x; + double y; + double z; + unsigned char intensity; + unsigned char ring; + double timestamp; + + EIGEN_MAKE_ALIGNED_OPERATOR_NEW // make sure our new allocators are aligned +} EIGEN_ALIGN16; // enforce SSE padding for correct memory alignment + +struct PointXYZITd { + double x; + double y; + double z; + unsigned char intensity; + double timestamp; + + EIGEN_MAKE_ALIGNED_OPERATOR_NEW // make sure our new allocators are aligned +} EIGEN_ALIGN16; // enforce SSE padding for correct memory alignment + +} // namespace pcl_util +} // namespace perception +} // namespace apollo + +POINT_CLOUD_REGISTER_POINT_STRUCT( + apollo::perception::pcl_util::PointD, + (double, x, x)(double, y, y)(double, z, z)(uint8_t, intensity, intensity)) + +POINT_CLOUD_REGISTER_POINT_STRUCT(apollo::perception::pcl_util::PointXYZIH, + (float, x, x)(float, y, y)(float, z, z)( + float, intensity, intensity)(float, h, h)) + +POINT_CLOUD_REGISTER_POINT_STRUCT(apollo::perception::pcl_util::PointXYZIT, + (float, x, x)(float, y, y)(float, z, z)( + uint8_t, intensity, + intensity)(double, timestamp, timestamp)) +POINT_CLOUD_REGISTER_POINT_STRUCT(apollo::perception::pcl_util::RawPointXYZIT, + (float, x, x)(float, y, y)(float, z, z)( + uint8_t, intensity, + intensity)(double, timestamp, timestamp)) + +POINT_CLOUD_REGISTER_POINT_STRUCT( + apollo::perception::pcl_util::PointXYZIRT, + (float, x, x)(float, y, y)(float, z, z)(uint8_t, intensity, intensity)( + uint8_t, ring, ring)(double, timestamp, timestamp)) + +POINT_CLOUD_REGISTER_POINT_STRUCT(apollo::perception::pcl_util::PointXYZITd, + (double, x, x)(double, y, y)(double, z, z)( + uint8_t, intensity, + intensity)(double, timestamp, timestamp)) + +POINT_CLOUD_REGISTER_POINT_STRUCT( + apollo::perception::pcl_util::PointXYZIRTd, + (double, x, x)(double, y, y)(double, z, z)(uint8_t, intensity, intensity)( + uint8_t, ring, ring)(double, timestamp, timestamp)) + +#endif // MODULES_PERCEPTION_LIB_PCL_UTIL_PCL_TYPES_H_ diff --git a/modules/perception/model/cnn_segmentation.config b/modules/perception/model/cnn_segmentation.config new file mode 100644 index 00000000000..005e55d9267 --- /dev/null +++ b/modules/perception/model/cnn_segmentation.config @@ -0,0 +1,18 @@ +model_configs { + name: "CNNSegmentation" + version: "1.0.0" + string_params { + name: "config_file" + value: "./model/cnn_segmentation/cnnseg.conf" + } + + string_params { + name: "proto_file" + value: "./model/cnn_segmentation/deploy.prototxt" + } + + string_params { + name: "weight_file" + value: "./model/cnn_segmentation/deploy.caffemodel" + } +} \ No newline at end of file diff --git a/modules/perception/model/cnn_segmentation/cnnseg.conf b/modules/perception/model/cnn_segmentation/cnnseg.conf new file mode 100644 index 00000000000..fd3ea995e4c --- /dev/null +++ b/modules/perception/model/cnn_segmentation/cnnseg.conf @@ -0,0 +1,26 @@ + +objectness_thresh: 0.5 +use_all_grids_for_clustering: true +confidence_thresh: 0.1 +height_thresh: 0.5 +min_pts_num: 3 + +use_full_cloud: true + +gpu_id: 0 + +network_param { + instance_pt_blob: "instance_pt" + category_pt_blob: "category_score" + confidence_pt_blob: "confidence_score" + height_pt_blob: "height_pt" + feature_blob: "data" +} + +feature_param { + width: 512 + height: 512 + point_cloud_range: 60 + min_height: -5.0 + max_height: 5.0 +} diff --git a/modules/perception/model/cnn_segmentation/deploy.caffemodel b/modules/perception/model/cnn_segmentation/deploy.caffemodel new file mode 100644 index 00000000000..6cac9f72824 Binary files /dev/null and b/modules/perception/model/cnn_segmentation/deploy.caffemodel differ diff --git a/modules/perception/model/cnn_segmentation/deploy.prototxt b/modules/perception/model/cnn_segmentation/deploy.prototxt new file mode 100644 index 00000000000..ab51c1949ed --- /dev/null +++ b/modules/perception/model/cnn_segmentation/deploy.prototxt @@ -0,0 +1,674 @@ +name: "pcd_parsing" +layer { + name: "input" + type: "Input" + top: "data" + input_param { + shape { + dim: 1 + dim: 8 + dim: 512 + dim: 512 + } + } +} +layer { + name: "slice_[dump, mask]" + type: "Slice" + bottom: "data" + top: "dump_blob" + top: "mask" + slice_param { + slice_point: 7 + axis: 1 + } +} +layer { + name: "Silence_[dump_blob]" + type: "Silence" + bottom: "dump_blob" +} +layer { + name: "conv1_1" + type: "Convolution" + bottom: "data" + top: "conv1_1" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 48 + pad: 1 + kernel_size: 3 + stride: 2 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "relu1_1" + type: "ReLU" + bottom: "conv1_1" + top: "conv1_1" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "conv1_2" + type: "Convolution" + bottom: "conv1_1" + top: "conv1_2" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 48 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "relu1_2" + type: "ReLU" + bottom: "conv1_2" + top: "conv1_2" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "conv2_1" + type: "Convolution" + bottom: "conv1_2" + top: "conv2_1" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + stride: 2 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "conv2_1_relu" + type: "ReLU" + bottom: "conv2_1" + top: "conv2_1" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "conv2_2" + type: "Convolution" + bottom: "conv2_1" + top: "conv2_2" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "conv2_2_relu" + type: "ReLU" + bottom: "conv2_2" + top: "conv2_2" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "conv3_1" + type: "Convolution" + bottom: "conv2_2" + top: "conv3_1" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 96 + pad: 1 + kernel_size: 3 + stride: 2 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "conv3_1_relu" + type: "ReLU" + bottom: "conv3_1" + top: "conv3_1" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "conv4_1" + type: "Convolution" + bottom: "conv3_1" + top: "conv4_1" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + stride: 2 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "conv4_1_relu" + type: "ReLU" + bottom: "conv4_1" + top: "conv4_1" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "conv5_1" + type: "Convolution" + bottom: "conv4_1" + top: "conv5_1" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 192 + pad: 1 + kernel_size: 3 + stride: 2 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "conv5_1_relu" + type: "ReLU" + bottom: "conv5_1" + top: "conv5_1" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "refine5_deconv" + type: "Deconvolution" + bottom: "conv5_1" + top: "refine5_deconv" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 4 + group: 1 + stride: 2 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + } + } +} +layer { + name: "refine5_deconv_relu" + type: "ReLU" + bottom: "refine5_deconv" + top: "refine5_deconv" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "refine4_concat" + type: "Concat" + bottom: "conv4_1" + bottom: "refine5_deconv" + top: "refine4_concat" +} +layer { + name: "refine4_conv_3x3_2" + type: "Convolution" + bottom: "refine4_concat" + top: "refine4_conv_3x3_2" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "refine4_conv_3x3_2_relu" + type: "ReLU" + bottom: "refine4_conv_3x3_2" + top: "refine4_conv_3x3_2" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "refine4_deconv" + type: "Deconvolution" + bottom: "refine4_conv_3x3_2" + top: "refine4_deconv" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 96 + pad: 1 + kernel_size: 4 + group: 1 + stride: 2 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + } + } +} +layer { + name: "refine4_deconv_relu" + type: "ReLU" + bottom: "refine4_deconv" + top: "refine4_deconv" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "refine3_concat" + type: "Concat" + bottom: "conv3_1" + bottom: "refine4_deconv" + top: "refine3_concat" +} +layer { + name: "refine3_conv_3x3_2" + type: "Convolution" + bottom: "refine3_concat" + top: "refine3_conv_3x3_2" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 96 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "refine3_conv_3x3_2_relu" + type: "ReLU" + bottom: "refine3_conv_3x3_2" + top: "refine3_conv_3x3_2" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "refine3_deconv" + type: "Deconvolution" + bottom: "refine3_conv_3x3_2" + top: "refine3_deconv" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 4 + group: 1 + stride: 2 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + } + } +} +layer { + name: "refine3_deconv_relu" + type: "ReLU" + bottom: "refine3_deconv" + top: "refine3_deconv" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "refine2_concat" + type: "Concat" + bottom: "conv2_2" + bottom: "refine3_deconv" + top: "refine2_concat" +} +layer { + name: "refine2_conv_3x3_2" + type: "Convolution" + bottom: "refine2_concat" + top: "refine2_conv_3x3_2" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "refine2_conv_3x3_2_relu" + type: "ReLU" + bottom: "refine2_conv_3x3_2" + top: "refine2_conv_3x3_2" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "refine2_deconv" + type: "Deconvolution" + bottom: "refine2_conv_3x3_2" + top: "refine2_deconv" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 48 + pad: 1 + kernel_size: 4 + group: 1 + stride: 2 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + } + } +} +layer { + name: "refine2_deconv_relu" + type: "ReLU" + bottom: "refine2_deconv" + top: "refine2_deconv" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "refine1_concat" + type: "Concat" + bottom: "conv1_2" + bottom: "refine2_deconv" + top: "refine1_concat" +} +layer { + name: "refine1_conv_3x3_2" + type: "Convolution" + bottom: "refine1_concat" + top: "refine1_conv_3x3_2" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 48 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "refine1_conv_3x3_2_relu" + type: "ReLU" + bottom: "refine1_conv_3x3_2" + top: "refine1_conv_3x3_2" + relu_param { + negative_slope: 0.0 + } +} +layer { + name: "predict" + type: "Deconvolution" + bottom: "refine1_conv_3x3_2" + top: "predict" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + pad: 1 + kernel_size: 4 + group: 1 + stride: 2 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + } + } +} +layer { + name: "Slice_[\'category_pt\', \'instance_pt\', \'confidence_pt\', \'classify_pt\', \'heading_pt\', \'height_pt\']" + type: "Slice" + bottom: "predict" + top: "category_pt" + top: "instance_pt" + top: "confidence_pt" + top: "classify_pt" + top: "heading_pt" + top: "height_pt" + slice_param { + slice_point: 1 + slice_point: 3 + slice_point: 4 + slice_point: 9 + slice_point: 11 + } +} +layer { + name: "all_category_score" + type: "Sigmoid" + bottom: "category_pt" + top: "all_category_score" + propagate_down: false +} +layer { + name: "instance_ignore_layer" + type: "Eltwise" + bottom: "all_category_score" + bottom: "mask" + top: "category_score" + eltwise_param { + operation: PROD + } +} +layer { + name: "confidence_score" + type: "Sigmoid" + bottom: "confidence_pt" + top: "confidence_score" + propagate_down: false +} +layer { + name: "class_score" + type: "Sigmoid" + bottom: "classify_pt" + top: "class_score" + propagate_down: false +} diff --git a/modules/perception/model/hdmap_roi_filter.config b/modules/perception/model/hdmap_roi_filter.config new file mode 100644 index 00000000000..95b582d47c5 --- /dev/null +++ b/modules/perception/model/hdmap_roi_filter.config @@ -0,0 +1,30 @@ +model_configs { + # HdmapROIFilter model. + name: "HdmapROIFilter" + version: "1.0.0" + + # @name: range + # @brief: create a bitmap mask which represents [-range, range]*[-range, range] + # square area around the car. + # @required: range > 0.0 && range - (-range) > cell_size + double_params { + name: "range" + value: 70.0 + } + + # @name: cell_size + # @brief: discretize the area using small cells. + # @required: cell_size > 0.0 + double_params { + name: "cell_size" + value: 0.25 + } + + # @name: extend_dist + # @brief: extend the intervals returned by polygon scans conversion algorithm + # @required: none + double_params { + name: "extend_dist" + value: 0.0 + } +} diff --git a/modules/perception/model/tracker.config b/modules/perception/model/tracker.config new file mode 100644 index 00000000000..039f77a7583 --- /dev/null +++ b/modules/perception/model/tracker.config @@ -0,0 +1,98 @@ +model_configs { + name: "HmObjectTracker" + version: "1.1.0" + + # tracker setup + string_params { + name: "matcher_method_name" + value: "hungarian_matcher" + } + string_params { + name: "filter_method_name" + value: "kalman_filter" + } + integer_params { + name: "track_cached_history_size_maximum" + value: 5 + } + integer_params { + name: "track_consecutive_invisible_maximum" + value: 1 + } + float_params { + name: "track_visible_ratio_minimum" + value: 0.6 + } + integer_params { + name: "collect_age_minimum" + value: 0 + } + integer_params { + name: "collect_consecutive_invisible_maximum" + value: 0 + } + float_params { + name: "acceleration_noise_maximum" + value: 5 + } + float_params { + name: "speed_noise_maximum" + value: 0.4 + } + + # matcher parameters + float_params { + name: "match_distance_maximum" + value: 4.0 + } + float_params { + name: "location_distance_weight" + value: 0.6 + } + float_params { + name: "direction_distance_weight" + value: 0.2 + } + float_params { + name: "bbox_size_distance_weight" + value: 0.1 + } + float_params { + name: "point_num_distance_weight" + value: 0.1 + } + float_params { + name: "histogram_distance_weight" + value: 0.5 + } + integer_params { + name: "histogram_bin_size" + value: 10 + } + + # filter paramters + bool_params { + name: "use_adaptive" + value: true + } + float_params { + name: "measurement_noise" + value: 0.4 + } + float_params { + name: "initial_velocity_noise" + value: 5 + } + float_params { + name: "xy_propagation_noise" + value: 10 + } + float_params { + name: "z_propagation_noise" + value: 10 + } + float_params { + name: "breakdown_threshold_maximum" + value: 10.0 + } +} diff --git a/modules/perception/obstacle/base/BUILD b/modules/perception/obstacle/base/BUILD new file mode 100644 index 00000000000..2005a929753 --- /dev/null +++ b/modules/perception/obstacle/base/BUILD @@ -0,0 +1,39 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "perception_obstacle_base", + srcs = [ + "object.cc", + "types.cc", + ], + hdrs = [ + "hdmap_struct.h", + "object.h", + "types.h", + ], + deps = [ + "//modules/common", + "//modules/common/util:string_util", + "//modules/perception/common:perception_common", + "//modules/perception/lib/pcl_util", + "//modules/perception/proto:perception_proto", + "@eigen//:eigen", + ], +) + +cc_test( + name = "perception_obstacle_base_test", + size = "small", + srcs = [ + "object_test.cc", + "types_test.cc", + ], + deps = [ + ":perception_obstacle_base", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/perception/obstacle/base/hdmap_struct.h b/modules/perception/obstacle/base/hdmap_struct.h new file mode 100644 index 00000000000..c61e47543d4 --- /dev/null +++ b/modules/perception/obstacle/base/hdmap_struct.h @@ -0,0 +1,43 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef MODULES_PERCEPTION_OBSTACLE_BASE_HDMAP_STRUCT_H_ +#define MODULES_PERCEPTION_OBSTACLE_BASE_HDMAP_STRUCT_H_ + +#include +#include + +#include "modules/perception/obstacle/base/types.h" + +namespace apollo { +namespace perception { + +struct alignas(16) RoadBoundary { + PolygonDType left_boundary; + PolygonDType right_boundary; +}; + +struct alignas(16) HdmapStruct { + std::vector road_boundary; + std::vector junction; +}; + +typedef std::shared_ptr HdmapStructPtr; +typedef std::shared_ptr HdmapStructConstPtr; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_BASE_HDMAP_STRUCT_H_ diff --git a/modules/perception/obstacle/base/object.cc b/modules/perception/obstacle/base/object.cc new file mode 100644 index 00000000000..92d3bf8a17f --- /dev/null +++ b/modules/perception/obstacle/base/object.cc @@ -0,0 +1,138 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/base/object.h" + +#include "modules/common/log.h" +#include "modules/common/macro.h" +#include "modules/common/util/string_util.h" +#include "modules/perception/common/perception_gflags.h" + +namespace apollo { +namespace perception { + +using Eigen::Vector3d; + +Object::Object() { + direction = Vector3d(1, 0, 0); + center = Vector3d::Zero(); + velocity = Vector3d::Zero(); + cloud.reset(new pcl_util::PointCloud); + type = UNKNOWN; + type_probs.resize(MAX_OBJECT_TYPE, 0); +} + +void Object::clone(const Object& rhs) { + *this = rhs; + pcl::copyPointCloud(*(rhs.cloud), *cloud); +} + +std::string Object::ToString() const { + // clang-format off + return common::util::StrCat( + "Object[id: ", id, ", " + "track_id: ", track_id, ", " + "cloud_size: ", cloud->size(), ", " + "direction: ", direction.transpose(), ", " + "center: ", center.transpose(), ", " + "velocity: ", velocity.transpose(), ", " + "width: ", width, ", " + "length: ", length, ", " + "height: ", height, ", " + "polygon_size: ", polygon.size(), ", " + "type: ", type, ", " + "is_background: ", is_background, "]"); + // clang-format on + // "tracking_time: ", GLOG_TIMESTAMP(tracking_time) + // "latest_tracked_time: ", GLOG_TIMESTAMP(latest_tracked_time) +} + +bool Object::Serialize(PerceptionObstacle* pb_obj) const { + CHECK(pb_obj != NULL); + pb_obj->set_id(track_id); + pb_obj->set_theta(theta); + + Point* obj_center = pb_obj->mutable_position(); + obj_center->set_x(center(0)); + obj_center->set_y(center(1)); + obj_center->set_z(center(2)); + + Point* obj_velocity = pb_obj->mutable_velocity(); + obj_velocity->set_x(velocity(0)); + obj_velocity->set_y(velocity(1)); + obj_velocity->set_z(velocity(2)); + + pb_obj->set_length(length); + pb_obj->set_width(width); + pb_obj->set_height(height); + + for (auto point : polygon.points) { + Point* p = pb_obj->add_polygon_point(); + p->set_x(point.x); + p->set_y(point.y); + p->set_z(point.z); + } + + if (FLAGS_is_serialize_point_cloud) { + for (auto point : cloud->points) { + pb_obj->add_point_cloud(point.x); + pb_obj->add_point_cloud(point.y); + pb_obj->add_point_cloud(point.z); + } + } + + pb_obj->set_tracking_time(tracking_time); + pb_obj->set_type(static_cast(type)); + pb_obj->set_timestamp(latest_tracked_time); // in seconds. + + return true; +} + +bool Object::Deserialize(const PerceptionObstacle& pb_obs) { + track_id = pb_obs.id(); + theta = pb_obs.theta(); + + center(0) = pb_obs.position().x(); + center(1) = pb_obs.position().y(); + center(2) = pb_obs.position().z(); + + velocity(0) = pb_obs.velocity().x(); + velocity(1) = pb_obs.velocity().y(); + velocity(2) = pb_obs.velocity().z(); + + length = pb_obs.length(); + width = pb_obs.width(); + height = pb_obs.height(); + + polygon.clear(); + for (int idx = 0; idx < pb_obs.polygon_point_size(); ++idx) { + const auto& p = pb_obs.polygon_point(idx); + pcl_util::PointD point; + point.x = p.x(); + point.y = p.y(); + point.z = p.z(); + polygon.push_back(point); + } + + tracking_time = pb_obs.tracking_time(); + latest_tracked_time = pb_obs.timestamp(); + type = static_cast(pb_obs.type()); + + return true; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/base/object.h b/modules/perception/obstacle/base/object.h new file mode 100644 index 00000000000..da581d8f366 --- /dev/null +++ b/modules/perception/obstacle/base/object.h @@ -0,0 +1,92 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_BASE_OBJECT_H_ +#define MODULES_PERCEPTION_OBSTACLE_BASE_OBJECT_H_ + +#include +#include +#include + +#include "Eigen/Core" + +#include "modules/perception/proto/perception_obstacle.pb.h" + +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/base/types.h" + +namespace apollo { +namespace perception { + +struct alignas(16) Object { + Object(); + // deep copy + void clone(const Object& rhs); + std::string ToString() const; + + bool Serialize(PerceptionObstacle* pb_obj) const; + bool Deserialize(const PerceptionObstacle& pb_obs); + + // object id per frame + int id = 0; + // point cloud of the object + pcl_util::PointCloudPtr cloud; + // convex hull of the object + PolygonDType polygon; + + // oriented boundingbox information + // main direction + Eigen::Vector3d direction; + // the yaw angle, theta = 0.0 <=> direction = (1, 0, 0) + double theta = 0.0; + // ground center of the object (cx, cy, z_min) + Eigen::Vector3d center; + // size of the oriented bbox, length is the size in the main direction + double length = 0.0; + double width = 0.0; + double height = 0.0; + // shape feature used for tracking + std::vector shape_features; + + // foreground score/probability + float score = 0.0; + + // Object classification type. + ObjectType type; + // Probability of each type, used for track type. + std::vector type_probs; + + // fg/bg flag + bool is_background = false; + + // tracking information + int track_id = 0; + Eigen::Vector3d velocity; + // age of the tracked object + double tracking_time = 0.0; + double latest_tracked_time = 0.0; + + // stable anchor_point during time, e.g., barycenter + Eigen::Vector3d anchor_point; +}; + +typedef std::shared_ptr ObjectPtr; +typedef std::shared_ptr ObjectConstPtr; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_BASE_OBJECT_H_ diff --git a/modules/perception/obstacle/base/object_test.cc b/modules/perception/obstacle/base/object_test.cc new file mode 100644 index 00000000000..b4e12101bc6 --- /dev/null +++ b/modules/perception/obstacle/base/object_test.cc @@ -0,0 +1,190 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/base/object.h" + +#include + +#include "gtest/gtest.h" +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +using std::vector; + +TEST(ObjectTest, test_Object) { + Object obj; + obj.id = 1; + obj.track_id = 2; + obj.direction << 1.0, 2.0, 3.0; + obj.center << 4.0, 5.0, 6.0; + obj.velocity << 7.0, 8.0, 9.0; + obj.theta = 0.0; + obj.length = 0.1; + obj.width = 0.2; + obj.height = 0.3; + obj.type = BICYCLE; + obj.tracking_time = 10.0; + obj.latest_tracked_time = 123456.7; + Object obj2(obj); + EXPECT_EQ(obj.id, obj2.id); + EXPECT_EQ(obj.track_id, obj2.track_id); + EXPECT_FLOAT_EQ(obj.theta, obj2.theta); + EXPECT_FLOAT_EQ(obj.length, obj2.length); + EXPECT_FLOAT_EQ(obj.width, obj2.width); + EXPECT_FLOAT_EQ(obj.height, obj2.height); + EXPECT_FLOAT_EQ(obj.tracking_time, obj2.tracking_time); + EXPECT_FLOAT_EQ(obj.latest_tracked_time, obj2.latest_tracked_time); +} + +TEST(ObjectTest, test_operator_eq) { + Object obj; + obj.id = 1; + obj.track_id = 2; + obj.direction << 1.0, 2.0, 3.0; + obj.center << 4.0, 5.0, 6.0; + obj.velocity << 7.0, 8.0, 9.0; + obj.theta = 0.0; + obj.length = 0.1; + obj.width = 0.2; + obj.height = 0.3; + obj.type = BICYCLE; + obj.tracking_time = 10.0; + obj.latest_tracked_time = 123456.7; + Object obj2; + obj2 = obj; + EXPECT_EQ(obj.id, obj2.id); + EXPECT_EQ(obj.track_id, obj2.track_id); + EXPECT_FLOAT_EQ(obj.theta, obj2.theta); + EXPECT_FLOAT_EQ(obj.length, obj2.length); + EXPECT_FLOAT_EQ(obj.width, obj2.width); + EXPECT_FLOAT_EQ(obj.height, obj2.height); + EXPECT_FLOAT_EQ(obj.tracking_time, obj2.tracking_time); + EXPECT_FLOAT_EQ(obj.latest_tracked_time, obj2.latest_tracked_time); +} + +TEST(ObjectTest, test_clone) { + Object obj; + obj.id = 1; + obj.track_id = 2; + obj.direction << 1.0, 2.0, 3.0; + obj.center << 4.0, 5.0, 6.0; + obj.velocity << 7.0, 8.0, 9.0; + obj.theta = 0.0; + obj.length = 0.1; + obj.width = 0.2; + obj.height = 0.3; + obj.type = BICYCLE; + obj.tracking_time = 10.0; + obj.latest_tracked_time = 123456.7; + Object obj2; + obj2.clone(obj); + EXPECT_EQ(obj.id, obj2.id); + EXPECT_EQ(obj.track_id, obj2.track_id); + EXPECT_FLOAT_EQ(obj.theta, obj2.theta); + EXPECT_FLOAT_EQ(obj.length, obj2.length); + EXPECT_FLOAT_EQ(obj.width, obj2.width); + EXPECT_FLOAT_EQ(obj.height, obj2.height); + EXPECT_FLOAT_EQ(obj.tracking_time, obj2.tracking_time); + EXPECT_FLOAT_EQ(obj.latest_tracked_time, obj2.latest_tracked_time); +} + +TEST(ObjectTest, test_ToString) { + Object object; + AINFO << object.ToString(); +} + +TEST(ObjectTest, test_Serialize) { + Object obj; + obj.id = 1; + obj.track_id = 2; + obj.direction << 1.0, 2.0, 3.0; + obj.center << 4.0, 5.0, 6.0; + obj.velocity << 7.0, 8.0, 9.0; + obj.theta = 0.0; + obj.length = 0.1; + obj.width = 0.2; + obj.height = 0.3; + obj.type = BICYCLE; + obj.tracking_time = 10.0; + obj.latest_tracked_time = 123456.7; + obj.cloud = pcl_util::PointCloudPtr(new pcl_util::PointCloud); + pcl_util::Point temp; + temp.x = 1; + temp.y = 2; + temp.z = 3; + obj.cloud->push_back(temp); + + PolygonDType polygon; + for (int i = 1; i < 5; ++i) { + pcl_util::PointD p; + p.x = i; + p.y = i; + p.z = i; + polygon.push_back(p); + } + obj.polygon = polygon; + + PerceptionObstacle pb_obj; + EXPECT_TRUE(obj.Serialize(&pb_obj)); + EXPECT_EQ(pb_obj.id(), 2); + EXPECT_EQ(pb_obj.position().x(), 4.0); + AINFO << "org obj:" << obj.ToString(); + AINFO << "pb obj:" << pb_obj.ShortDebugString(); +} + +TEST(ObjectTest, test_Deserialize) { + Object obj; + PerceptionObstacle pb_obj; + pb_obj.set_id(1); + pb_obj.set_theta(0.1); + Point* pos = pb_obj.mutable_position(); + pos->set_x(10.1); + pos->set_y(20.1); + pos->set_z(1.1); + pb_obj.set_length(2.0); + pb_obj.set_width(1.0); + pb_obj.set_height(1.5); + pb_obj.set_tracking_time(20.1); + pb_obj.set_type(PerceptionObstacle::BICYCLE); + pb_obj.set_timestamp(1147012345.678); + + PolygonDType polygon; + for (int i = 1; i < 5; ++i) { + pcl_util::PointD p; + p.x = i; + p.y = i; + p.z = i; + polygon.push_back(p); + } + + EXPECT_TRUE(obj.Deserialize(pb_obj)); + EXPECT_EQ(obj.track_id, 1); + EXPECT_EQ(obj.theta, 0.1); + EXPECT_EQ(obj.center(0), 10.1); + EXPECT_EQ(obj.center(1), 20.1); + EXPECT_EQ(obj.center(2), 1.1); + EXPECT_EQ(obj.length, 2.0); + EXPECT_EQ(obj.width, 1.0); + EXPECT_EQ(obj.height, 1.5); + EXPECT_EQ(obj.type, BICYCLE); + EXPECT_EQ(obj.tracking_time, 20.1); + EXPECT_EQ(obj.latest_tracked_time, 1147012345.678); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/base/types.cc b/modules/perception/obstacle/base/types.cc new file mode 100644 index 00000000000..e14d23d839a --- /dev/null +++ b/modules/perception/obstacle/base/types.cc @@ -0,0 +1,39 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/base/types.h" + +namespace apollo { +namespace perception { + +std::string GetSensorType(SensorType sensor_type) { + switch (sensor_type) { + case VELODYNE_64: + return "velodyne_64"; + case VELODYNE_16: + return "velodyne_16"; + case RADAR: + return "radar"; + case CAMERA: + return "camera"; + case UNKNOWN_SENSOR_TYPE: + return "unknown_sensor_type"; + } + return ""; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/base/types.h b/modules/perception/obstacle/base/types.h new file mode 100644 index 00000000000..9e6cee25a60 --- /dev/null +++ b/modules/perception/obstacle/base/types.h @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_BASE_TYPES_H_ +#define MODULES_PERCEPTION_OBSTACLE_BASE_TYPES_H_ + +#include + +#include "modules/perception/common/define.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" + +namespace apollo { +namespace perception { + +enum ObjectType { + UNKNOWN = 0, + UNKNOWN_MOVABLE = 1, + UNKNOWN_UNMOVABLE = 2, + PEDESTRIAN = 3, + BICYCLE = 4, + VEHICLE = 5, + MAX_OBJECT_TYPE = 6, +}; + +enum SensorType { + VELODYNE_64 = 0, + VELODYNE_16 = 1, + RADAR = 2, + CAMERA = 3, + UNKNOWN_SENSOR_TYPE = 10, +}; + +typedef pcl_util::PointCloud PolygonType; +typedef pcl_util::PointDCloud PolygonDType; + +using SeqId = uint32_t; + +std::string GetSensorType(SensorType sensor_type); + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_BASE_TYPES_H_ diff --git a/modules/perception/obstacle/base/types_test.cc b/modules/perception/obstacle/base/types_test.cc new file mode 100644 index 00000000000..f35a2e50cbb --- /dev/null +++ b/modules/perception/obstacle/base/types_test.cc @@ -0,0 +1,36 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/base/types.h" + +#include "gtest/gtest.h" + +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +TEST(TypesTest, test_GetSensorType) { + EXPECT_EQ(GetSensorType(VELODYNE_64), "velodyne_64"); + EXPECT_EQ(GetSensorType(VELODYNE_16), "velodyne_16"); + EXPECT_EQ(GetSensorType(RADAR), "radar"); + EXPECT_EQ(GetSensorType(CAMERA), "camera"); + EXPECT_EQ(GetSensorType(UNKNOWN_SENSOR_TYPE), "unknown_sensor_type"); + EXPECT_EQ(GetSensorType(SensorType(-1)), ""); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/common/BUILD b/modules/perception/obstacle/common/BUILD new file mode 100644 index 00000000000..1913c35275e --- /dev/null +++ b/modules/perception/obstacle/common/BUILD @@ -0,0 +1,56 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "perception_obstacle_common", + srcs = [ + "file_system_util.cc", + "geometry_util.cc", + "graph_util.cc", + "hungarian_bigraph_matcher.cc", + "pose_util.cc", + ], + hdrs = [ + "convex_hullxy.h", + "disjoint_set.h", + "file_system_util.h", + "geometry_util.h", + "graph_util.h", + "hungarian_bigraph_matcher.h", + "pose_util.h", + ], + linkopts = [ + "-lqhull", + ], + deps = [ + "//modules/common:log", + "//modules/perception/lib/base", + "//modules/perception/lib/pcl_util", + "@eigen//:eigen", + ], +) + +cc_test( + name = "perception_obstacle_common_test", + size = "small", + srcs = [ + "convex_hullxy_test.cc", + "disjoint_set_test.cc", + "file_system_util_test.cc", + "geometry_util_test.cc", + "graph_util_test.cc", + "hungarian_bigraph_matcher_test.cc", + "pose_util_test.cc", + ], + data = [ + "//modules/perception:perception_data", + ], + deps = [ + ":perception_obstacle_common", + "//modules/perception/obstacle/lidar/object_builder/min_box:perception_obstacle_lidar_object_builder_min_box", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/perception/obstacle/common/convex_hullxy.h b/modules/perception/obstacle/common/convex_hullxy.h new file mode 100644 index 00000000000..c6d4f8f9321 --- /dev/null +++ b/modules/perception/obstacle/common/convex_hullxy.h @@ -0,0 +1,238 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/* + * Software License Agreement (BSD License) + * + * Point Cloud Library (PCL) - www.pointclouds.org + * Copyright (c) 2010-2012, Willow Garage, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef MODULES_PERCEPTION_OBSTACLE_COMMON_CONVEX_HULLXY_H_ +#define MODULES_PERCEPTION_OBSTACLE_COMMON_CONVEX_HULLXY_H_ + +#include +#include +#include +#include + +#include "pcl/common/centroid.h" +#include "pcl/surface/convex_hull.h" +#include "pcl/surface/qhull.h" + +namespace apollo { +namespace perception { + +template +class ConvexHull2DXY : public pcl::ConvexHull { + public: + typedef boost::shared_ptr> Ptr; + typedef boost::shared_ptr> ConstPtr; + typedef pcl::PointCloud PointCloud; + typedef typename PointCloud::Ptr PointCloudPtr; + typedef typename PointCloud::ConstPtr PointCloudConstPtr; + + using pcl::ConvexHull::reconstruct; + using pcl::ConvexHull::compute_area_; + using pcl::ConvexHull::total_area_; + using pcl::ConvexHull::total_volume_; + using pcl::ConvexHull::qhull_flags; + + ConvexHull2DXY() = default; + virtual ~ConvexHull2DXY() = default; + + void Reconstruct2dxy(PointCloudPtr hull, + std::vector *polygons) { + hull->header = input_->header; + if (!initCompute() || input_->points.empty() || indices_->empty()) { + hull->points.clear(); + return; + } + + PerformReconstruction2dxy(hull, polygons, true); + + hull->width = static_cast(hull->points.size()); + hull->height = 1; + hull->is_dense = true; + + deinitCompute(); + } + + void PerformReconstruction2dxy(PointCloudPtr hull, + std::vector *polygons, + bool fill_polygon_data = false) { + int dimension = 2; + + // True if qhull should free points in qh_freeqhull() or reallocation + boolT ismalloc = True; + // output from qh_produce_output(), use NULL to skip qh_produce_output() + FILE *outfile = NULL; + +#ifndef HAVE_QHULL_2011 + if (compute_area_) { + outfile = stderr; + } +#endif + + // option flags for qhull, see qh_opt.htm + const char *flags = qhull_flags.c_str(); + // error messages from qhull code + FILE *errfile = stderr; + + // Array of coordinates for each point + coordT *points = reinterpret_cast( + calloc(indices_->size() * dimension, sizeof(coordT))); + if (points == NULL) { + hull->points.resize(0); + hull->width = hull->height = 0; + polygons->resize(0); + return; + } + + // Build input data, using appropriate projection + int j = 0; + for (size_t i = 0; i < indices_->size(); ++i, j += dimension) { + points[j + 0] = static_cast(input_->points[(*indices_)[i]].x); + points[j + 1] = static_cast(input_->points[(*indices_)[i]].y); + } + + // Compute convex hull + int exitcode = + qh_new_qhull(dimension, static_cast(indices_->size()), points, + ismalloc, const_cast(flags), outfile, errfile); +#ifdef HAVE_QHULL_2011 + if (compute_area_) { + qh_prepare_output(); + } +#endif + + // 0 if no error from qhull or it doesn't find any vertices + if (exitcode != 0 || qh num_vertices == 0) { + PCL_ERROR( + "[pcl::%s::performReconstrution2D] " + "ERROR: qhull was unable to compute " + "a convex hull for the given point " + "cloud (%lu)!\n", + getClassName().c_str(), indices_->size()); + + hull->points.resize(0); + hull->width = hull->height = 0; + polygons->resize(0); + + qh_freeqhull(!qh_ALL); + int curlong, totlong; + qh_memfreeshort(&curlong, &totlong); + return; + } + + // Qhull returns the area in volume for 2D + if (compute_area_) { + total_area_ = qh totvol; + total_volume_ = 0.0; + } + + int num_vertices = qh num_vertices; + hull->points.resize(num_vertices); + memset(&hull->points[0], static_cast(hull->points.size()), + sizeof(PointInT)); + + vertexT *vertex; + int i = 0; + + std::vector, + Eigen::aligned_allocator>> + idx_points(num_vertices); + idx_points.resize(hull->points.size()); + memset(&idx_points[0], static_cast(hull->points.size()), + sizeof(std::pair)); + + FORALLvertices { + hull->points[i] = input_->points[(*indices_)[qh_pointid(vertex->point)]]; + idx_points[i].first = qh_pointid(vertex->point); + ++i; + } + + // Sort + Eigen::Vector4f centroid; + pcl::compute3DCentroid(*hull, centroid); + for (size_t j = 0; j < hull->points.size(); j++) { + idx_points[j].second[0] = hull->points[j].x - centroid[0]; + idx_points[j].second[1] = hull->points[j].y - centroid[1]; + } + + std::sort(idx_points.begin(), idx_points.end(), pcl::comparePoints2D); + + polygons->resize(1); + (*polygons)[0].vertices.resize(hull->points.size()); + + for (int j = 0; j < static_cast(hull->points.size()); j++) { + hull->points[j] = input_->points[(*indices_)[idx_points[j].first]]; + (*polygons)[0].vertices[j] = static_cast(j); + } + + qh_freeqhull(!qh_ALL); + int curlong, totlong; + qh_memfreeshort(&curlong, &totlong); + + hull->width = static_cast(hull->points.size()); + hull->height = 1; + hull->is_dense = false; + return; + } + + std::string getClassName() const { return ("ConvexHull2DXY"); } + + protected: + using pcl::PCLBase::input_; + using pcl::PCLBase::indices_; + using pcl::PCLBase::initCompute; + using pcl::PCLBase::deinitCompute; +}; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_COMMON_CONVEX_HULLXY_H diff --git a/modules/perception/obstacle/common/convex_hullxy_test.cc b/modules/perception/obstacle/common/convex_hullxy_test.cc new file mode 100644 index 00000000000..c1aef227ec0 --- /dev/null +++ b/modules/perception/obstacle/common/convex_hullxy_test.cc @@ -0,0 +1,133 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/common/convex_hullxy.h" + +#include + +#include "gtest/gtest.h" +#include "modules/common/log.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" + +namespace apollo { +namespace perception { + +using pcl_util::Point; +using pcl_util::PointCloud; +using pcl_util::PointCloudPtr; +using pcl_util::PointDCloud; + +static bool ConstructPointCloud(std::vector* clouds) { + std::string pcd_data( + "modules/perception/data/obstacle_common_test/" + "QB9178_3_1461381834_1461382134_30651.pcd"); + std::ifstream cluster_ifs(pcd_data.c_str(), std::ifstream::in); + std::string point_buf; + while (cluster_ifs.good()) { + getline(cluster_ifs, point_buf); + std::stringstream ss; + ss << point_buf; + int point_num = 0; + ss >> point_num; + if (point_num <= 0) { + continue; + } + uint64_t intensity; + pcl_util::PointCloudPtr cluster_cloud(new pcl_util::PointCloud); + for (int i = 0; i < point_num; ++i) { + pcl_util::Point p; + ss >> p.x >> p.y >> p.z >> intensity; + p.intensity = static_cast(intensity); + cluster_cloud->points.push_back(p); + } + clouds->push_back(cluster_cloud); + } + return true; +} + +TEST(ConvexHull2DXYTest, Reconstruct2dxy) { + std::vector clouds; + ConstructPointCloud(&clouds); + EXPECT_EQ(5, clouds.size()); + ConvexHull2DXY convex_hull; + EXPECT_EQ(convex_hull.getClassName(), "ConvexHull2DXY"); + std::vector poly_vt; + PointCloudPtr plane_hull(new PointCloud); + // case 0 + pcl_util::PointCloudPtr cloud(new pcl_util::PointCloud); + pcl_util::Point pt; + pt.x = 1.0; + pt.y = 0.0; + pt.z = 0.0; + cloud->push_back(pt); + pt.x = 1.0; + pt.y = 1.0; + pt.z = 0.0; + cloud->push_back(pt); + pt.x = 0.0; + pt.y = 0.0; + pt.z = 0.0; + cloud->push_back(pt); + poly_vt.clear(); + plane_hull->clear(); + convex_hull.setInputCloud(cloud); + convex_hull.setDimension(2); + convex_hull.Reconstruct2dxy(plane_hull, &poly_vt); + EXPECT_EQ(3, poly_vt[0].vertices.size()); + // case 1 + poly_vt.clear(); + plane_hull->clear(); + convex_hull.setInputCloud(clouds[0]); + convex_hull.setDimension(2); + convex_hull.Reconstruct2dxy(plane_hull, &poly_vt); + EXPECT_EQ(1, poly_vt.size()); + EXPECT_EQ(3, poly_vt[0].vertices.size()); + // case 2 + poly_vt.clear(); + plane_hull->clear(); + convex_hull.setInputCloud(clouds[1]); + convex_hull.setDimension(2); + convex_hull.Reconstruct2dxy(plane_hull, &poly_vt); + EXPECT_EQ(1, poly_vt.size()); + EXPECT_EQ(5, poly_vt[0].vertices.size()); + // case 3 + poly_vt.clear(); + plane_hull->clear(); + convex_hull.setInputCloud(clouds[2]); + convex_hull.setDimension(2); + convex_hull.Reconstruct2dxy(plane_hull, &poly_vt); + EXPECT_EQ(1, poly_vt.size()); + EXPECT_EQ(4, poly_vt[0].vertices.size()); + // case 4 + poly_vt.clear(); + plane_hull->clear(); + convex_hull.setInputCloud(clouds[3]); + convex_hull.setDimension(2); + convex_hull.Reconstruct2dxy(plane_hull, &poly_vt); + EXPECT_EQ(1, poly_vt.size()); + EXPECT_EQ(6, poly_vt[0].vertices.size()); + // case 5 + poly_vt.clear(); + plane_hull->clear(); + convex_hull.setInputCloud(clouds[4]); + convex_hull.setDimension(2); + convex_hull.Reconstruct2dxy(plane_hull, &poly_vt); + EXPECT_EQ(1, poly_vt.size()); + EXPECT_EQ(6, poly_vt[0].vertices.size()); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/common/disjoint_set.h b/modules/perception/obstacle/common/disjoint_set.h new file mode 100644 index 00000000000..a01765184a1 --- /dev/null +++ b/modules/perception/obstacle/common/disjoint_set.h @@ -0,0 +1,75 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_COMMON_DISJOINT_SET_H_ +#define MODULES_PERCEPTION_OBSTACLE_COMMON_DISJOINT_SET_H_ + +namespace apollo { +namespace perception { + +template +void DisjointSetMakeSet(T *x) { + x->parent = x; + x->node_rank = 0; +} + +template +T *DisjointSetFindRecursive(T *x) { + if (x->parent != x) { + x->parent = DisjointSetFindRecursive(x->parent); + } + return x->parent; +} + +template +T *DisjointSetFind(T *x) { + T *y = x->parent; + if (y == x || y->parent == y) { + return y; + } + T *root = DisjointSetFindRecursive(y->parent); + x->parent = root; + y->parent = root; + return root; +} + +template +void DisjointSetMerge(T *x, const T *y) {} + +template +void DisjointSetUnion(T *x, T *y) { + x = DisjointSetFind(x); + y = DisjointSetFind(y); + if (x == y) { + return; + } + if (x->node_rank < y->node_rank) { + x->parent = y; + DisjointSetMerge(y, x); + } else if (y->node_rank < x->node_rank) { + y->parent = x; + DisjointSetMerge(x, y); + } else { + y->parent = x; + x->node_rank++; + DisjointSetMerge(x, y); + } +} + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_COMMON_DISJOINT_SET_H_ diff --git a/modules/perception/obstacle/common/disjoint_set_test.cc b/modules/perception/obstacle/common/disjoint_set_test.cc new file mode 100644 index 00000000000..4429c986351 --- /dev/null +++ b/modules/perception/obstacle/common/disjoint_set_test.cc @@ -0,0 +1,102 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/common/disjoint_set.h" + +#include "gtest/gtest.h" +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +class DisjointSetTest : public testing::Test { + protected: + DisjointSetTest() { + _node1 = new Node(); + _node2 = new Node(); + _node3 = new Node(); + } + virtual ~DisjointSetTest() { + if (_node1 != nullptr) { + delete _node1; + _node1 = nullptr; + } + if (_node2 != nullptr) { + delete _node2; + _node2 = nullptr; + } + if (_node3 != nullptr) { + delete _node3; + _node3 = nullptr; + } + } + void SetUp() { + DisjointSetMakeSet(_node1); + _node2->parent = _node1; + _node3->parent = _node2; + } + void TearDown() {} + struct Node { + Node* parent; + char node_rank; + + Node() { + parent = nullptr; + node_rank = 0; + } + }; + Node* _node1; + Node* _node2; + Node* _node3; +}; + +TEST_F(DisjointSetTest, DisjointSetMakeSet) { + Node* node = new Node();; + DisjointSetMakeSet(node); + EXPECT_EQ(node, node->parent); + EXPECT_EQ(0, node->node_rank); + if (node != nullptr) { + delete node; + node = nullptr; + } +} + +TEST_F(DisjointSetTest, DisjointSetFindRecursive) { + Node* root_node2 = DisjointSetFindRecursive(_node2); + EXPECT_EQ(_node1, root_node2); + Node* root_node3 = DisjointSetFindRecursive(_node3); + EXPECT_EQ(_node1, root_node3); +} + +TEST_F(DisjointSetTest, DisjointSetFind) { + Node* root_node2 = DisjointSetFind(_node2); + EXPECT_EQ(_node1, root_node2); + Node* root_node3 = DisjointSetFind(_node3); + EXPECT_EQ(_node1, root_node3); + EXPECT_EQ(_node1, root_node3->parent); +} + +TEST_F(DisjointSetTest, DisjointSetMerge) { + DisjointSetMerge(_node1, _node2); +} + +TEST_F(DisjointSetTest, DisjointSetUnion) { + DisjointSetUnion(_node1, _node2); + EXPECT_EQ(_node1->parent, _node2->parent); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/common/file_system_util.cc b/modules/perception/obstacle/common/file_system_util.cc new file mode 100644 index 00000000000..963bb5d7f45 --- /dev/null +++ b/modules/perception/obstacle/common/file_system_util.cc @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/common/file_system_util.h" + +#include + +#include "boost/filesystem.hpp" + +namespace apollo { +namespace perception { + +void GetFileNamesInFolderById(const std::string& folder, const std::string& ext, + std::vector* ret) { + std::vector ret_id; + ret->clear(); + namespace fs = boost::filesystem; + if (!fs::exists(folder) || !fs::is_directory(folder)) { + return; + } + + fs::directory_iterator it(folder); + fs::directory_iterator endit; + + while (it != endit) { + if (fs::is_regular_file(*it) && it->path().extension() == ext) { + std::string temp_path = it->path().filename().string(); + ret->push_back(temp_path); + std::string temp_id_str = + temp_path.substr(temp_path.rfind('_') + 1, + temp_path.rfind('.') - temp_path.rfind('_') - 1); + int temp_id = std::atoi(temp_id_str.c_str()); + ret_id.push_back(temp_id); + } + ++it; + } + // sort + int ret_size = ret->size(); + for (int i = 0; i < ret_size; ++i) { + for (int j = i; j < ret_size; ++j) { + if (ret_id[i] > ret_id[j]) { + int temp_id = ret_id[i]; + ret_id[i] = ret_id[j]; + ret_id[j] = temp_id; + std::string temp_path = (*ret)[i]; + (*ret)[i] = (*ret)[j]; + (*ret)[j] = temp_path; + } + } + } +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/common/file_system_util.h b/modules/perception/obstacle/common/file_system_util.h new file mode 100644 index 00000000000..89b637739f4 --- /dev/null +++ b/modules/perception/obstacle/common/file_system_util.h @@ -0,0 +1,32 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_COMMON_FILE_SYSTEM_UTIL_H_ +#define MODULES_PERCEPTION_OBSTACLE_COMMON_FILE_SYSTEM_UTIL_H_ + +#include +#include + +namespace apollo { +namespace perception { + +void GetFileNamesInFolderById(const std::string& folder, const std::string& ext, + std::vector* ret); + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_COMMON_FILE_SYSTEM_UTIL_H_ diff --git a/modules/perception/obstacle/common/file_system_util_test.cc b/modules/perception/obstacle/common/file_system_util_test.cc new file mode 100644 index 00000000000..fa06c08cbed --- /dev/null +++ b/modules/perception/obstacle/common/file_system_util_test.cc @@ -0,0 +1,36 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/common/file_system_util.h" + +#include "gtest/gtest.h" +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +TEST(FileSystemUtilTest, GetFileNamesInFolderById) { + std::string data_path = "modules/perception/data/hm_tracker_test/"; + std::vector seg_filenames; + GetFileNamesInFolderById(data_path, ".seg", &seg_filenames); + std::vector pose_filenames; + GetFileNamesInFolderById(data_path, ".pose", &pose_filenames); + EXPECT_EQ(seg_filenames.size(), 8); + EXPECT_EQ(pose_filenames.size(), 8); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/common/geometry_util.cc b/modules/perception/obstacle/common/geometry_util.cc new file mode 100644 index 00000000000..10d18c9fe06 --- /dev/null +++ b/modules/perception/obstacle/common/geometry_util.cc @@ -0,0 +1,138 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/common/geometry_util.h" + +namespace apollo { +namespace perception { + +using pcl_util::Point; +using pcl_util::PointCloud; +using pcl_util::PointCloudPtr; + +/* + * Transform point cloud methods + * */ +void TransformPointCloud(pcl_util::PointCloudPtr cloud, + const std::vector& indices, + pcl_util::PointDCloud* trans_cloud) { + if (trans_cloud->size() != indices.size()) { + trans_cloud->resize(indices.size()); + } + for (size_t i = 0; i < indices.size(); ++i) { + const Point& p = cloud->at(indices[i]); + Eigen::Vector3d v(p.x, p.y, p.z); + pcl_util::PointD& tp = trans_cloud->at(i); + tp.x = v.x(); + tp.y = v.y(); + tp.z = v.z(); + tp.intensity = p.intensity; + } +} + +void TransformPointCloud(pcl_util::PointCloudPtr cloud, + const Eigen::Matrix4d& pose_velodyne, + pcl_util::PointDCloudPtr trans_cloud) { + Eigen::Matrix4d pose = pose_velodyne; + + if (trans_cloud->size() != cloud->size()) { + trans_cloud->resize(cloud->size()); + } + for (size_t i = 0; i < cloud->points.size(); ++i) { + const Point& p = cloud->at(i); + Eigen::Vector4d v(p.x, p.y, p.z, 1); + v = pose * v; + pcl_util::PointD& tp = trans_cloud->at(i); + tp.x = v.x(); + tp.y = v.y(); + tp.z = v.z(); + tp.intensity = p.intensity; + } +} + +/* + * Vector & Matrix related methods + * */ +void TransAffineToMatrix4(const Eigen::Vector3d& translation, + const Eigen::Vector4d& rotation, + Eigen::Matrix4d* trans_matrix) { + const double t_x = translation(0); + const double t_y = translation(1); + const double t_z = translation(2); + + const double qx = rotation(0); + const double qy = rotation(1); + const double qz = rotation(2); + const double qw = rotation(3); + + (*trans_matrix) << 1 - 2 * (qy * qy + qz * qz), 2 * (qx * qy - qz * qw), + 2 * (qx * qz + qy * qw), t_x, 2 * (qx * qy + qz * qw), + 1 - 2 * (qx * qx + qz * qz), 2 * (qy * qz - qx * qw), t_y, + 2 * (qx * qz - qy * qw), 2 * (qy * qz + qx * qw), + 1 - 2 * (qx * qx + qy * qy), t_z, 0, 0, 0, 1; +} + +void ComputeMostConsistentBboxDirection(const Eigen::Vector3f& previous_dir, + Eigen::Vector3f* current_dir) { + float dot_val_00 = + previous_dir(0) * (*current_dir)(0) + previous_dir(1) * (*current_dir)(1); + float dot_val_01 = + previous_dir(0) * (*current_dir)(1) - previous_dir(1) * (*current_dir)(0); + if (fabs(dot_val_00) >= fabs(dot_val_01)) { + if (dot_val_00 < 0) { + (*current_dir) = -(*current_dir); + } + } else { + if (dot_val_01 < 0) { + (*current_dir) = + Eigen::Vector3f((*current_dir)(1), -(*current_dir)(0), 0); + } else { + (*current_dir) = + Eigen::Vector3f(-(*current_dir)(1), (*current_dir)(0), 0); + } + } +} + +double VectorCosTheta2dXy(const Eigen::Vector3f& v1, + const Eigen::Vector3f& v2) { + double v1_len = sqrt((v1.head(2).cwiseProduct(v1.head(2))).sum()); + double v2_len = sqrt((v2.head(2).cwiseProduct(v2.head(2))).sum()); + double cos_theta = + (v1.head(2).cwiseProduct(v2.head(2))).sum() / (v1_len * v2_len); + return cos_theta; +} + +double VectorTheta2dXy(const Eigen::Vector3f& v1, const Eigen::Vector3f& v2) { + double v1_len = sqrt((v1.head(2).cwiseProduct(v1.head(2))).sum()); + double v2_len = sqrt((v2.head(2).cwiseProduct(v2.head(2))).sum()); + double cos_theta = + (v1.head(2).cwiseProduct(v2.head(2))).sum() / (v1_len * v2_len); + double sin_theta = (v1(0) * v2(1) - v1(1) * v2(0)) / (v1_len * v2_len); + if (cos_theta > 1) { + cos_theta = 1; + } + if (cos_theta < -1) { + cos_theta = -1; + } + double theta = acos(cos_theta); + if (sin_theta < 0) { + theta = -theta; + } + return theta; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/common/geometry_util.h b/modules/perception/obstacle/common/geometry_util.h new file mode 100644 index 00000000000..1177422b142 --- /dev/null +++ b/modules/perception/obstacle/common/geometry_util.h @@ -0,0 +1,187 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_COMMON_GEOMETRY_UTIL_H_ +#define MODULES_PERCEPTION_OBSTACLE_COMMON_GEOMETRY_UTIL_H_ + +#include +#include +#include + +#include "Eigen/Core" + +#include "modules/perception/lib/pcl_util/pcl_types.h" + +namespace apollo { +namespace perception { + +template +void TransformPointCloud(const Eigen::Matrix4d& trans_mat, + pcl::PointCloud* cloud_in_out) { + for (int i = 0; i < cloud_in_out->size(); ++i) { + PointT& p = cloud_in_out->at(i); + Eigen::Vector4d v(p.x, p.y, p.z, 1); + v = trans_mat * v; + p.x = v.x(); + p.y = v.y(); + p.z = v.z(); + } +} + +template +void TransformPointCloud(const Eigen::Matrix4d& trans_mat, + typename pcl::PointCloud::Ptr cloud_in_out) { + assert(cloud_in_out.get() != nullptr); + return TransformPointCloud(trans_mat, cloud_in_out.get()); +} + +template +void TransformPoint(const PointType& point_in, PointType* point_out, + const Eigen::Matrix4d& trans_mat) { + Eigen::Vector4d v(point_in.x, point_in.y, point_in.z, 1); + v = trans_mat * v; + *point_out = point_in; + point_out->x = v.x(); + point_out->y = v.y(); + point_out->z = v.z(); +} + +template +void TransformPointCloud(const pcl::PointCloud& cloud_in, + pcl::PointCloud* cloud_out, + const Eigen::Matrix4d& trans_mat) { + if (cloud_out->points.size() < cloud_in.points.size()) { + cloud_out->points.resize(cloud_in.points.size()); + } + for (int i = 0; i < cloud_in.size(); ++i) { + const PointType& p = cloud_in.at(i); + Eigen::Vector4d v(p.x, p.y, p.z, 1); + v = trans_mat * v; + PointType& pd = cloud_out->points[i]; + pd.x = v.x(); + pd.y = v.y(); + pd.z = v.z(); + } +} + +void TransformPointCloud(pcl_util::PointCloudPtr cloud, + const std::vector& indices, + pcl_util::PointDCloud* trans_cloud); + +void TransformPointCloud(pcl_util::PointCloudPtr cloud, + const Eigen::Matrix4d& pose_velodyne, + typename pcl_util::PointDCloudPtr trans_cloud); +/* + * Other point cloud related methods + * */ +template +void GetCloudMinMax3D(typename pcl::PointCloud::Ptr cloud, + Eigen::Vector4f* min_point, Eigen::Vector4f* max_point) { + Eigen::Vector4f& min_pt = *min_point; + Eigen::Vector4f& max_pt = *max_point; + min_pt[0] = min_pt[1] = min_pt[2] = FLT_MAX; + max_pt[0] = max_pt[1] = max_pt[2] = -FLT_MAX; + if (cloud->is_dense) { + for (size_t i = 0; i < cloud->points.size(); ++i) { + min_pt[0] = std::min(min_pt[0], cloud->points[i].x); + max_pt[0] = std::max(max_pt[0], cloud->points[i].x); + min_pt[1] = std::min(min_pt[1], cloud->points[i].y); + max_pt[1] = std::max(max_pt[1], cloud->points[i].y); + min_pt[2] = std::min(min_pt[2], cloud->points[i].z); + max_pt[2] = std::max(max_pt[2], cloud->points[i].z); + } + } else { + for (size_t i = 0; i < cloud->points.size(); ++i) { + if (!pcl_isfinite(cloud->points[i].x) || + !pcl_isfinite(cloud->points[i].y) || + !pcl_isfinite(cloud->points[i].z)) { + continue; + } + min_pt[0] = std::min(min_pt[0], cloud->points[i].x); + max_pt[0] = std::max(max_pt[0], cloud->points[i].x); + min_pt[1] = std::min(min_pt[1], cloud->points[i].y); + max_pt[1] = std::max(max_pt[1], cloud->points[i].y); + min_pt[2] = std::min(min_pt[2], cloud->points[i].z); + max_pt[2] = std::max(max_pt[2], cloud->points[i].z); + } + } +} + +template +void ComputeBboxSizeCenter(typename pcl::PointCloud::Ptr cloud, + const Eigen::Vector3d& direction, + Eigen::Vector3d* size, Eigen::Vector3d* center) { + Eigen::Vector3d dir(direction[0], direction[1], 0); + dir.normalize(); + Eigen::Vector3d ortho_dir(-dir[1], dir[0], 0.0); + + Eigen::Vector3d z_dir(dir.cross(ortho_dir)); + Eigen::Vector3d min_pt(DBL_MAX, DBL_MAX, DBL_MAX); + Eigen::Vector3d max_pt(-DBL_MAX, -DBL_MAX, -DBL_MAX); + + Eigen::Vector3d loc_pt; + for (int i = 0; i < cloud->size(); i++) { + Eigen::Vector3d pt = Eigen::Vector3d(cloud->points[i].x, cloud->points[i].y, + cloud->points[i].z); + loc_pt[0] = pt.dot(dir); + loc_pt[1] = pt.dot(ortho_dir); + loc_pt[2] = pt.dot(z_dir); + for (int j = 0; j < 3; j++) { + min_pt[j] = std::min(min_pt[j], loc_pt[j]); + max_pt[j] = std::max(max_pt[j], loc_pt[j]); + } + } + *size = max_pt - min_pt; + *center = dir * ((max_pt[0] + min_pt[0]) * 0.5) + + ortho_dir * ((max_pt[1] + min_pt[1]) * 0.5) + z_dir * min_pt[2]; +} + +template +Eigen::Vector3d GetCloudBarycenter( + typename pcl::PointCloud::Ptr cloud) { + int point_num = cloud->points.size(); + Eigen::Vector3d barycenter(0, 0, 0); + + for (int i = 0; i < point_num; i++) { + const PointT& pt = cloud->points[i]; + barycenter[0] += pt.x; + barycenter[1] += pt.y; + barycenter[2] += pt.z; + } + + if (point_num > 0) { + barycenter[0] /= point_num; + barycenter[1] /= point_num; + barycenter[2] /= point_num; + } + return barycenter; +} + +void TransAffineToMatrix4(const Eigen::Vector3d& translation, + const Eigen::Vector4d& rotation, + Eigen::Matrix4d* trans_matrix); + +void ComputeMostConsistentBboxDirection(const Eigen::Vector3f& previous_dir, + Eigen::Vector3f* current_dir); + +double VectorCosTheta2dXy(const Eigen::Vector3f& v1, const Eigen::Vector3f& v2); + +double VectorTheta2dXy(const Eigen::Vector3f& v1, const Eigen::Vector3f& v2); + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_COMMON_GEOMETRY_UTIL_H_ diff --git a/modules/perception/obstacle/common/geometry_util_test.cc b/modules/perception/obstacle/common/geometry_util_test.cc new file mode 100644 index 00000000000..1e43299051a --- /dev/null +++ b/modules/perception/obstacle/common/geometry_util_test.cc @@ -0,0 +1,307 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/common/geometry_util.h" + +#include +#include +#include +#include + +#include "gtest/gtest.h" +#include "modules/common/log.h" +#include "modules/perception/obstacle/lidar/object_builder/min_box/min_box.h" + +namespace apollo { +namespace perception { + +using pcl_util::Point; +using pcl_util::PointCloud; +using pcl_util::PointCloudPtr; +using pcl_util::PointDCloud; + +const double EPSILON = 1e-6; + +static bool ConstructPointCloud(std::vector* clouds) { + std::string pcd_data( + "modules/perception/data/obstacle_common_test/" + "QB9178_3_1461381834_1461382134_30651.pcd"); + std::ifstream cluster_ifs(pcd_data.c_str(), std::ifstream::in); + std::string point_buf; + while (cluster_ifs.good()) { + getline(cluster_ifs, point_buf); + std::stringstream ss; + ss << point_buf; + int point_num = 0; + ss >> point_num; + if (point_num <= 0) { + continue; + } + uint64_t intensity; + pcl_util::PointCloudPtr cluster_cloud(new pcl_util::PointCloud); + for (int i = 0; i < point_num; ++i) { + pcl_util::Point p; + ss >> p.x >> p.y >> p.z >> intensity; + p.intensity = static_cast(intensity); + cluster_cloud->points.push_back(p); + } + clouds->push_back(cluster_cloud); + } + return true; +} + +class GeometryUtilTest : public testing::Test { + protected: + GeometryUtilTest() {} + virtual ~GeometryUtilTest() {} + void SetUp() { + ConstructPointCloud(&_clouds); + Eigen::Vector3d translation(-0.0189, 1.0061, 1); + Eigen::Vector4d rotation(0.0099, -0.0029, 0.6989, 0.7151); + TransAffineToMatrix4(translation, rotation, &_trans_matrix); + } + void TearDown() {} + protected: + std::vector _clouds; + Eigen::Matrix4d _trans_matrix; +}; + +TEST_F(GeometryUtilTest, TransformPointCloud1) { + pcl_util::PointCloudPtr in_out_cloud(new pcl_util::PointCloud); + pcl::copyPointCloud(*_clouds[0], *in_out_cloud); + TransformPointCloud(_trans_matrix, in_out_cloud); + EXPECT_NEAR(64.184380, in_out_cloud->at(0).x, EPSILON); + EXPECT_NEAR(13.708398, in_out_cloud->at(0).y, EPSILON); + EXPECT_NEAR(1.715922, in_out_cloud->at(0).z, EPSILON); +} + +TEST_F(GeometryUtilTest, TransformPointCloud2) { + pcl_util::Point point_in, point_out; + point_in.x = 1.0; + point_in.y = 1.0; + point_in.z = 1.0; + TransformPoint(point_in, &point_out, _trans_matrix); + EXPECT_NEAR(-0.985772, point_out.x, EPSILON); + EXPECT_NEAR(2.010278, point_out.y, EPSILON); + EXPECT_NEAR(2.027878, point_out.z, EPSILON); + + pcl_util::PointCloudPtr in_out_cloud(new pcl_util::PointCloud); + pcl::copyPointCloud(*_clouds[0], *in_out_cloud); + TransformPointCloud(_trans_matrix, in_out_cloud); + EXPECT_NEAR(64.184380, in_out_cloud->at(0).x, EPSILON); + EXPECT_NEAR(13.708398, in_out_cloud->at(0).y, EPSILON); + EXPECT_NEAR(1.715922, in_out_cloud->at(0).z, EPSILON); + + pcl_util::PointCloudPtr out_cloud(new pcl_util::PointCloud); + TransformPointCloud(*_clouds[0], out_cloud.get(), _trans_matrix); + EXPECT_NEAR(64.184380, out_cloud->at(0).x, EPSILON); + EXPECT_NEAR(13.708398, out_cloud->at(0).y, EPSILON); + EXPECT_NEAR(1.715922, out_cloud->at(0).z, EPSILON); +} + +TEST_F(GeometryUtilTest, TransformPointCloud3) { + pcl_util::PointCloudPtr in_cloud(new pcl_util::PointCloud); + for (int i = 0; i < 10; ++i) { + Point pt; + pt.x = static_cast(i); + pt.y = static_cast(i); + pt.z = static_cast(i); + pt.intensity = 123.0f; + in_cloud->push_back(pt); + } + + pcl_util::PointDCloud out_cloud; + std::vector indices{0, 2, 5, 9}; + TransformPointCloud(in_cloud, indices, &out_cloud); + + EXPECT_EQ(out_cloud.points.size(), 4); + EXPECT_NEAR(out_cloud.points[0].x, 0.0, 1e-6); + EXPECT_NEAR(out_cloud.points[1].y, 2.0, 1e-6); + EXPECT_NEAR(out_cloud.points[2].z, 5.0, 1e-6); + EXPECT_EQ(out_cloud.points[3].intensity, 123u); +} + +TEST_F(GeometryUtilTest, TransformPointCloud) { + pcl_util::PointDCloudPtr trans_cloud(new pcl_util::PointDCloud); + TransformPointCloud(_clouds[0], _trans_matrix, trans_cloud); + EXPECT_NEAR(64.184377, trans_cloud->at(0).x, EPSILON); + EXPECT_NEAR(13.708398, trans_cloud->at(0).y, EPSILON); + EXPECT_NEAR(1.715922, trans_cloud->at(0).z, EPSILON); +} + + +TEST_F(GeometryUtilTest, GetCloudMinMax3D) { + pcl_util::PointCloudPtr in_cloud(new pcl_util::PointCloud); + in_cloud->is_dense = true; + for (int i = 0; i < 10; ++i) { + Point pt; + pt.x = static_cast(i); + pt.y = static_cast(i); + pt.z = static_cast(i); + pt.intensity = 123.0f; + in_cloud->push_back(pt); + } + Eigen::Vector4f min_point; + Eigen::Vector4f max_point; + GetCloudMinMax3D(in_cloud, &min_point, &max_point); + EXPECT_NEAR(min_point.x(), 0.0, EPSILON); + EXPECT_NEAR(min_point.y(), 0.0, EPSILON); + EXPECT_NEAR(min_point.z(), 0.0, EPSILON); + EXPECT_NEAR(max_point.x(), 9.0, EPSILON); + EXPECT_NEAR(max_point.y(), 9.0, EPSILON); + EXPECT_NEAR(max_point.z(), 9.0, EPSILON); + + in_cloud->is_dense = false; + Point pt; + pt.x = NAN; + pt.y = NAN; + pt.z = NAN; + in_cloud->push_back(pt); + GetCloudMinMax3D(in_cloud, &min_point, &max_point); + EXPECT_NEAR(min_point.x(), 0.0, EPSILON); + EXPECT_NEAR(min_point.y(), 0.0, EPSILON); + EXPECT_NEAR(min_point.z(), 0.0, EPSILON); + EXPECT_NEAR(max_point.x(), 9.0, EPSILON); + EXPECT_NEAR(max_point.y(), 9.0, EPSILON); + EXPECT_NEAR(max_point.z(), 9.0, EPSILON); +} + +TEST_F(GeometryUtilTest, ComputeBboxSizeCenter) { + std::vector objects; + for (size_t i = 0; i < _clouds.size(); ++i) { + ObjectPtr object(new Object); + object->cloud = _clouds[i]; + objects.push_back(object); + } + EXPECT_EQ(5, objects.size()); + ObjectBuilderOptions options; + MinBoxObjectBuilder min_box_object_builder; + EXPECT_TRUE(min_box_object_builder.Build(options, &objects)); + Eigen::Vector3d old_dir = objects[0]->direction; + Eigen::Vector3d old_size = Eigen::Vector3d( + objects[0]->length, + objects[0]->width, + objects[0]->height); + Eigen::Vector3d old_center = objects[0]->center; + Eigen::Vector3d new_size = old_size; + Eigen::Vector3d new_center = old_center; + ComputeBboxSizeCenter(objects[0]->cloud, + old_dir, &new_size, &new_center); + EXPECT_NEAR(0.149998, new_size[0], EPSILON); + EXPECT_NEAR(0.056100, new_size[1], EPSILON); + EXPECT_NEAR(0.732072, new_size[2], EPSILON); + EXPECT_NEAR(14.186950, new_center[0], EPSILON); + EXPECT_NEAR(-63.964300, new_center[1], EPSILON); + EXPECT_NEAR(0.374468, new_center[2], EPSILON); +} + +TEST_F(GeometryUtilTest, GetCloudBarycenter) { + Eigen::Vector3f barycenter; + // case 1 + barycenter = GetCloudBarycenter( + _clouds[0]).cast(); + EXPECT_NEAR(14.188400, barycenter[0], EPSILON); + // case 2 + barycenter = GetCloudBarycenter( + _clouds[1]).cast(); + EXPECT_NEAR(15.661365, barycenter[0], EPSILON); + // case 3 + barycenter = GetCloudBarycenter( + _clouds[2]).cast(); + EXPECT_NEAR(29.376224, barycenter[0], EPSILON); + // case 4 + barycenter = GetCloudBarycenter( + _clouds[3]).cast(); + EXPECT_NEAR(13.144600, barycenter[0], EPSILON); + // case 5 + barycenter = GetCloudBarycenter( + _clouds[4]).cast(); + EXPECT_NEAR(14.668054, barycenter[0], EPSILON); +} + +TEST_F(GeometryUtilTest, TransAffineToMatrix4) { + Eigen::Vector3d translation(-0.0189, 1.0061, 1); + Eigen::Vector4d rotation(0.0099, -0.0029, 0.6989, 0.7151); + Eigen::Matrix4d _trans_matrix; + TransAffineToMatrix4(translation, rotation, &_trans_matrix); + AINFO << "trans_matrix: " << _trans_matrix; +} + +TEST_F(GeometryUtilTest, ComputeMostConsistentBboxDirection) { + Eigen::Vector3f previous_dir(1.0, 0.0, 0.0); + Eigen::Vector3f current_dir(0.0, 1.0, 0.0); + ComputeMostConsistentBboxDirection(previous_dir, ¤t_dir); + EXPECT_NEAR(-1.0, current_dir[0], EPSILON); + EXPECT_NEAR(0.0, current_dir[1], EPSILON); + EXPECT_NEAR(0.0, current_dir[2], EPSILON); +} + +TEST_F(GeometryUtilTest, VectorCosTheta2dXy) { + // case 1 + Eigen::Vector3f track_motion_dir(1.0, 1.0, 0.0); + Eigen::Vector3f anchor_point_shift_dir(1.0, 1.0, 0.0); + track_motion_dir.normalize(); + anchor_point_shift_dir.normalize(); + double cos_theta = VectorCosTheta2dXy(track_motion_dir, + anchor_point_shift_dir); + EXPECT_NEAR(1.0, cos_theta, EPSILON); + // case 2 + track_motion_dir << 2.0, 2.2, 3.1; + anchor_point_shift_dir << 1.1, 2.0, 3.5; + cos_theta = VectorCosTheta2dXy(track_motion_dir, + anchor_point_shift_dir); + track_motion_dir.normalize(); + anchor_point_shift_dir.normalize(); + EXPECT_NEAR(0.972521, cos_theta, EPSILON); + // case 3 + track_motion_dir << 25.0, 72.2, 3.24; + anchor_point_shift_dir << 31.1, 98.0, 24.5; + cos_theta = VectorCosTheta2dXy(track_motion_dir, + anchor_point_shift_dir); + track_motion_dir.normalize(); + anchor_point_shift_dir.normalize(); + EXPECT_NEAR(0.999661, cos_theta, EPSILON); +} + +TEST_F(GeometryUtilTest, VectorTheta2dXy) { + // case 1 + Eigen::Vector3f coord_dir(0, 1.0, 0); + Eigen::Vector3f dir_velo3(1.0, 0.0, 0.0); + double theta = VectorCosTheta2dXy(coord_dir, dir_velo3); + EXPECT_NEAR(0.0, theta, EPSILON); + // case 2 + coord_dir << 1.0, 0.0, 0.0; + dir_velo3 << 1.0, 0.0, 0.0; + theta = VectorCosTheta2dXy(coord_dir, dir_velo3); + EXPECT_NEAR(1.0, theta, EPSILON); + // case 3 + coord_dir << 0.3, 0.4, -3.2; + coord_dir.normalize(); + dir_velo3 << 2.3, -21.4, 4.2; + dir_velo3.normalize(); + theta = VectorCosTheta2dXy(coord_dir, dir_velo3); + EXPECT_NEAR(-0.731302, theta, EPSILON); + // case 4 + coord_dir << 2.0, 3.0, -4.6; + coord_dir.normalize(); + dir_velo3 << -1.0, 2.4, -3.2; + dir_velo3.normalize(); + theta = VectorCosTheta2dXy(coord_dir, dir_velo3); + EXPECT_NEAR(0.554700, theta, EPSILON); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/common/graph_util.cc b/modules/perception/obstacle/common/graph_util.cc new file mode 100644 index 00000000000..56f3e7c8c9a --- /dev/null +++ b/modules/perception/obstacle/common/graph_util.cc @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include +#include "modules/perception/obstacle/common/graph_util.h" + +namespace apollo { +namespace perception { + +void ConnectedComponentAnalysis(const std::vector >& graph, + std::vector >* components) { + int no_item = graph.size(); + std::vector visited; + visited.resize(no_item, 0); + std::queue que; + std::vector component; + components->clear(); + + for (int i = 0; i < no_item; i++) { + if (visited[i]) { + continue; + } + component.push_back(i); + que.push(i); + visited[i] = 1; + while (!que.empty()) { + int id = que.front(); + que.pop(); + for (size_t j = 0; j < graph[id].size(); j++) { + int nb_id = graph[id][j]; + if (visited[nb_id] == 0) { + component.push_back(nb_id); + que.push(nb_id); + visited[nb_id] = 1; + } + } + } + components->push_back(component); + component.clear(); + } +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/common/graph_util.h b/modules/perception/obstacle/common/graph_util.h new file mode 100644 index 00000000000..90829b696a9 --- /dev/null +++ b/modules/perception/obstacle/common/graph_util.h @@ -0,0 +1,32 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_COMMON_GRAPH_UTIL_H_ +#define MODULES_PERCEPTION_OBSTACLE_COMMON_GRAPH_UTIL_H_ + +#include + +namespace apollo { +namespace perception { + +// bfs based component analysis +void ConnectedComponentAnalysis(const std::vector >& graph, + std::vector >* components); + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_COMMON_GRAPH_UTIL_H_ diff --git a/modules/perception/obstacle/common/graph_util_test.cc b/modules/perception/obstacle/common/graph_util_test.cc new file mode 100644 index 00000000000..47207e45963 --- /dev/null +++ b/modules/perception/obstacle/common/graph_util_test.cc @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/common/graph_util.h" + +#include +#include "gtest/gtest.h" + +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +class GraphUtilTest : public testing::Test { + protected: + GraphUtilTest() = default; + virtual ~GraphUtilTest() = default; + void SetUp() {} + void TearDown() {} +}; + +TEST_F(GraphUtilTest, ConnectedComponentAnalysis) { + Eigen::MatrixXf association_mat(3, 4); + association_mat << 0.3, 1.2, 4.0, 3.0, 0.9, 2.0, 3.0, 8.0, 4.0, 3.0, 0.3, 0.1; + const float connected_threshold = 2.1; + // Compute connected components within given threshold + int no_track = association_mat.rows(); + int no_obj = association_mat.cols(); + std::vector > nb_graph; + nb_graph.resize(no_track + no_obj); + for (int i = 0; i < no_track; i++) { + for (int j = 0; j < no_obj; j++) { + if (association_mat(i, j) <= connected_threshold) { + nb_graph[i].push_back(no_track + j); + nb_graph[j + no_track].push_back(i); + } + } + } + + std::vector > components; + ConnectedComponentAnalysis(nb_graph, &components); + EXPECT_EQ(2, components.size()); + EXPECT_EQ(4, components[0].size()); + EXPECT_EQ(0, components[0][0]); + EXPECT_EQ(3, components[0][1]); + EXPECT_EQ(4, components[0][2]); + EXPECT_EQ(1, components[0][3]); + EXPECT_EQ(3, components[1].size()); + EXPECT_EQ(2, components[1][0]); + EXPECT_EQ(5, components[1][1]); + EXPECT_EQ(6, components[1][2]); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/common/hungarian_bigraph_matcher.cc b/modules/perception/obstacle/common/hungarian_bigraph_matcher.cc new file mode 100644 index 00000000000..d6d165d165d --- /dev/null +++ b/modules/perception/obstacle/common/hungarian_bigraph_matcher.cc @@ -0,0 +1,508 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include "modules/perception/obstacle/common/hungarian_bigraph_matcher.h" + +namespace apollo { +namespace perception { + +HungarianOptimizer::HungarianOptimizer( + const std::vector >& costs) + : matrix_size_(0), + costs_(), + max_cost_(0), + rows_covered_(), + cols_covered_(), + marks_(), + stars_in_col_(), + preimage_(), + image_(), + zero_col_(0), + zero_row_(0), + width_(0), + height_(0), + state_(NULL) { + width_ = costs.size(); + + if (width_ > 0) { + height_ = costs[0].size(); + } else { + height_ = 0; + } + + matrix_size_ = std::max(width_, height_); + max_cost_ = 0; + + // Generate the expanded cost matrix by adding extra 0-valued elements in + // order to make a square matrix. At the same time, find the greatest cost + // in the matrix (used later if we want to maximize rather than minimize the + // overall cost.) + costs_.resize(matrix_size_); + for (int row = 0; row < matrix_size_; ++row) { + costs_[row].resize(matrix_size_); + } + + for (int row = 0; row < matrix_size_; ++row) { + for (int col = 0; col < matrix_size_; ++col) { + if ((row >= width_) || (col >= height_)) { + costs_[row][col] = 0; + } else { + costs_[row][col] = costs[row][col]; + max_cost_ = std::max(max_cost_, costs_[row][col]); + } + } + } + + // Initially, none of the cells of the matrix are marked. + marks_.resize(matrix_size_); + for (int row = 0; row < matrix_size_; ++row) { + marks_[row].resize(matrix_size_); + for (int col = 0; col < matrix_size_; ++col) { + marks_[row][col] = NONE; + } + } + + stars_in_col_.resize(matrix_size_); + + rows_covered_.resize(matrix_size_); + cols_covered_.resize(matrix_size_); + + preimage_.resize(matrix_size_ * 2); + image_.resize(matrix_size_ * 2); + + uncov_col_.resize(matrix_size_); + uncov_row_.resize(matrix_size_); +} + +// Find an assignment which maximizes the total cost. +// Return an array of pairs of integers. Each pair (i, j) corresponds to +// assigning agent i to task j. +void HungarianOptimizer::maximize(std::vector* preimage, + std::vector* image) { + // Find a maximal assignment by subtracting each of the + // original costs from max_cost_ and then minimizing. + for (int row = 0; row < width_; ++row) { + for (int col = 0; col < height_; ++col) { + costs_[row][col] = max_cost_ - costs_[row][col]; + } + } + minimize(preimage, image); +} + +// Find an assignment which minimizes the total cost. +// Return an array of pairs of integers. Each pair (i, j) corresponds to +// assigning agent i to task j. +void HungarianOptimizer::minimize(std::vector* preimage, + std::vector* image) { + do_munkres(); + find_assignments(preimage, image); +} + +// Convert the final cost matrix into a set of assignments of agents -> tasks. +// Return an array of pairs of integers, the same as the return values of +// Minimize() and Maximize() +void HungarianOptimizer::find_assignments(std::vector* preimage, + std::vector* image) { + preimage->clear(); + image->clear(); + for (int row = 0; row < width_; ++row) { + for (int col = 0; col < height_; ++col) { + if (is_starred(row, col)) { + preimage->push_back(row); + image->push_back(col); + break; + } + } + } + // TODO(user) + // result_size = std::min(width_, height_); + // CHECK image.size() == result_size + // CHECK preimage.size() == result_size +} + +// Find a column in row 'row' containing a star, or return +// kHungarianOptimizerColNotFound if no such column exists. +int HungarianOptimizer::find_star_in_row(int row) const { + for (int col = 0; col < matrix_size_; ++col) { + if (is_starred(row, col)) { + return col; + } + } + + return kHungarianOptimizerColNotFound; +} + +// Find a row in column 'col' containing a star, or return +// kHungarianOptimizerRowNotFound if no such row exists. +int HungarianOptimizer::find_star_in_col(int col) const { + if (!col_contains_star(col)) { + return kHungarianOptimizerRowNotFound; + } + + for (int row = 0; row < matrix_size_; ++row) { + if (is_starred(row, col)) { + return row; + } + } + + // NOTREACHED + return kHungarianOptimizerRowNotFound; +} + +// Find a column in row containing a prime, or return +// kHungarianOptimizerColNotFound if no such column exists. +int HungarianOptimizer::find_prime_in_row(int row) const { + for (int col = 0; col < matrix_size_; ++col) { + if (is_primed(row, col)) { + return col; + } + } + + return kHungarianOptimizerColNotFound; +} + +// Remove the prime marks from every cell in the matrix. +void HungarianOptimizer::clear_primes() { + for (int row = 0; row < matrix_size_; ++row) { + for (int col = 0; col < matrix_size_; ++col) { + if (is_primed(row, col)) { + marks_[row][col] = NONE; + } + } + } +} + +// Uncovery ever row and column in the matrix. +void HungarianOptimizer::clear_covers() { + for (int x = 0; x < matrix_size_; x++) { + uncover_row(x); + uncover_col(x); + } +} + +// Find the smallest uncovered cell in the matrix. +double HungarianOptimizer::find_smallest_uncovered() { + double minval = std::numeric_limits::max(); + uncov_col_.clear(); + uncov_row_.clear(); + + for (int i = 0; i < matrix_size_; ++i) { + if (!row_covered(i)) { + uncov_row_.push_back(i); + } + if (!col_covered(i)) { + uncov_col_.push_back(i); + } + } + + for (size_t row = 0; row < uncov_row_.size(); ++row) { + for (size_t col = 0; col < uncov_col_.size(); ++col) { + minval = std::min(minval, costs_[uncov_row_[row]][uncov_col_[col]]); + } + } + + return minval; +} + +// Find an uncovered zero and store its co-ordinates in (zeroRow, zeroCol) +// and return true, or return false if no such cell exists. +bool HungarianOptimizer::find_zero(int* zero_row, int* zero_col) { + uncov_col_.clear(); + uncov_row_.clear(); + + for (int i = 0; i < matrix_size_; ++i) { + if (!row_covered(i)) { + uncov_row_.push_back(i); + } + if (!col_covered(i)) { + uncov_col_.push_back(i); + } + } + if (uncov_row_.empty() || uncov_col_.empty()) { + return false; + } + + for (size_t i = 0; i < uncov_row_.size(); ++i) { + for (size_t j = 0; j < uncov_col_.size(); ++j) { + if (costs_[uncov_row_[i]][uncov_col_[j]] == 0) { + *zero_row = uncov_row_[i]; + *zero_col = uncov_col_[j]; + return true; + } + } + } + return false; +} + +// Print the matrix to stdout (for debugging.) +void HungarianOptimizer::print_matrix() { + for (int row = 0; row < matrix_size_; ++row) { + for (int col = 0; col < matrix_size_; ++col) { + printf("%g ", costs_[row][col]); + + if (is_starred(row, col)) { + printf("*"); + } + + if (is_primed(row, col)) { + printf("'"); + } + } + printf("\n"); + } +} + +// Run the Munkres algorithm! +void HungarianOptimizer::do_munkres() { + int max_iter = 1000; + int iter_num = 0; + state_ = &HungarianOptimizer::reduce_rows; + while (state_ != NULL && iter_num < max_iter) { + // while (state_ != NULL) { + (this->*state_)(); + ++iter_num; + } + if (iter_num >= max_iter) { + check_star(); + } +} + +void HungarianOptimizer::check_star() { + for (int row = 0; row < width_; ++row) { + int star_col = -1; + bool is_single = true; + for (int col = 0; col < height_; ++col) { + if (is_starred(row, col)) { + if (star_col == -1) { + star_col = col; + } else { + is_single = false; + break; + } + } + } + if (!is_single) { + for (int col = 0; col < height_; ++col) { + unstar(row, col); + } + } + } +} +// Step 1. +// For each row of the matrix, find the smallest element and subtract it +// from every element in its row. Go to Step 2. +void HungarianOptimizer::reduce_rows() { + for (int row = 0; row < matrix_size_; ++row) { + double min_cost = costs_[row][0]; + for (int col = 1; col < matrix_size_; ++col) { + min_cost = std::min(min_cost, costs_[row][col]); + } + for (int col = 0; col < matrix_size_; ++col) { + costs_[row][col] -= min_cost; + } + } + state_ = &HungarianOptimizer::star_zeroes; +} + +// Step 2. +// Find a zero (Z) in the matrix. If there is no starred zero in its row +// or column, star Z. Repeat for every element in the matrix. Go to step 3. +// of the CPU - the next slowest step takes 0.6%. I can't think of a way +// of speeding it up though. +void HungarianOptimizer::star_zeroes() { + // Since no rows or columns are covered on entry to this step, we use the + // covers as a quick way of marking which rows & columns have stars in them. + for (int row = 0; row < matrix_size_; ++row) { + if (row_covered(row)) { + continue; + } + + for (int col = 0; col < matrix_size_; ++col) { + if (col_covered(col)) { + continue; + } + + if (costs_[row][col] == 0) { + star(row, col); + cover_row(row); + cover_col(col); + break; + } + } + } + + clear_covers(); + state_ = &HungarianOptimizer::cover_starred_zeroes; +} + +// Step 3. +// Cover each column containing a starred zero. If all columns are +// covered, the starred zeros describe a complete set of unique assignments. +// In this case, terminate the algorithm. Otherwise, go to step 4. +void HungarianOptimizer::cover_starred_zeroes() { + int num_covered = 0; + + for (int col = 0; col < matrix_size_; ++col) { + if (col_contains_star(col)) { + cover_col(col); + num_covered++; + } + } + + if (num_covered >= matrix_size_) { + state_ = NULL; + return; + } + state_ = &HungarianOptimizer::prime_zeroes; +} + +// Step 4. +// Find a noncovered zero and prime it. If there is no starred zero in the +// row containing this primed zero, Go to Step 5. Otherwise, cover this row +// and uncover the column containing the starred zero. Continue in this manner +// until there are no uncovered zeros left, then go to Step 6. + +void HungarianOptimizer::prime_zeroes() { + // This loop is guaranteed to terminate in at most matrix_size_ iterations, + // as find_zero() returns a location only if there is at least one uncovered + // zero in the matrix. Each iteration, either one row is covered or the + // loop terminates. Since there are matrix_size_ rows, after that many + // iterations there are no uncovered cells and hence no uncovered zeroes, + // so the loop terminates. + for (;;) { + int zero_row = 0; + int zero_col = 0; + if (!find_zero(&zero_row, &zero_col)) { + // No uncovered zeroes. + state_ = &HungarianOptimizer::augment_path; + return; + } + + prime(zero_row, zero_col); + int star_col = find_star_in_row(zero_row); + + if (star_col != kHungarianOptimizerColNotFound) { + cover_row(zero_row); + uncover_col(star_col); + } else { + preimage_[0] = zero_row; + image_[0] = zero_col; + state_ = &HungarianOptimizer::make_augmenting_path; + return; + } + } +} + +// Step 5. +// Construct a series of alternating primed and starred zeros as follows. +// Let Z0 represent the uncovered primed zero found in Step 4. Let Z1 denote +// the starred zero in the column of Z0 (if any). Let Z2 denote the primed +// zero in the row of Z1 (there will always be one). Continue until the +// series terminates at a primed zero that has no starred zero in its column. +// unstar each starred zero of the series, star each primed zero of the +// series, erase all primes and uncover every line in the matrix. Return to +// Step 3. +void HungarianOptimizer::make_augmenting_path() { + bool done = false; + int count = 0; + + /* Note: this loop is guaranteed to terminate within matrix_size_ iterations + // because: + // 1) on entry to this step, there is at least 1 column with no starred zero + // (otherwise we would have terminated the algorithm already.) + // 2) each row containing a star also contains exactly one primed zero. + // 4) each column contains at most one starred zero. + // + // Since the path_ we construct visits primed and starred zeroes alternately, + // and terminates if we reach a primed zero in a column with no star, our + // path_ must either contain matrix_size_ or fewer stars (in which case the + // loop iterates fewer than matrix_size_ times), or it contains more. In + // that case, because (1) implies that there are fewer than + // matrix_size_ stars, we must have visited at least one star more than once. + // Consider the first such star that we visit more than once; it must have + // been reached immediately after visiting a prime in the same row. By (2), + // this prime is unique and so must have also been visited more than once. + // Therefore, that prime must be in the same column as a star that has been + // visited more than once, contradicting the assumption that we chose the + // first multiply visited star, or it must be in the same column as more + // than one star, contradicting (3). Therefore, we never visit any star + // more than once and the loop terminates within matrix_size_ iterations. + */ + + while (!done) { + // First construct the alternating path... + int row = find_star_in_col(image_[count]); + + if (row != kHungarianOptimizerRowNotFound) { + count++; + preimage_[count] = row; + image_[count] = image_[count - 1]; + } else { + done = true; + } + + if (!done) { + int col = find_prime_in_row(preimage_[count]); + count++; + preimage_[count] = preimage_[count - 1]; + image_[count] = col; + } + } + + // Then modify it. + for (int i = 0; i <= count; ++i) { + int row = preimage_[i]; + int col = image_[i]; + + if (is_starred(row, col)) { + unstar(row, col); + } else { + star(row, col); + } + } + + clear_covers(); + clear_primes(); + state_ = &HungarianOptimizer::cover_starred_zeroes; +} + +// Step 6 +// Add the smallest uncovered value in the matrix to every element of each +// covered row, and subtract it from every element of each uncovered column. +// Return to Step 4 without altering any stars, primes, or covered lines. +void HungarianOptimizer::augment_path() { + double minval = find_smallest_uncovered(); + + for (int row = 0; row < matrix_size_; ++row) { + if (row_covered(row)) { + for (int c = 0; c < matrix_size_; ++c) { + costs_[row][c] += minval; + } + } + } + for (int col = 0; col < matrix_size_; ++col) { + if (!col_covered(col)) { + for (int r = 0; r < matrix_size_; ++r) { + costs_[r][col] -= minval; + } + } + } + state_ = &HungarianOptimizer::prime_zeroes; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/common/hungarian_bigraph_matcher.h b/modules/perception/obstacle/common/hungarian_bigraph_matcher.h new file mode 100644 index 00000000000..9ce2f67cc92 --- /dev/null +++ b/modules/perception/obstacle/common/hungarian_bigraph_matcher.h @@ -0,0 +1,239 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/***************************************************************************** +* Copyright 2010-2012 Google +* +* 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. +* See: //depot/or-tools/java/com/google/wireless/genie/frontend +* /mixer/matching/HungarianOptimizer.java +****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_COMMON_HUNGARIAN_BIGRAPH_MATCHER_H_ +#define MODULES_PERCEPTION_OBSTACLE_COMMON_HUNGARIAN_BIGRAPH_MATCHER_H_ + +#include +#include +#include +#include + +namespace apollo { +namespace perception { + +class HungarianOptimizer { + static const int kHungarianOptimizerRowNotFound = -1; + static const int kHungarianOptimizerColNotFound = -2; + + public: + // Setup the initial conditions for the algorithm. + + // Parameters: costs is a matrix of the cost of assigning each agent to + // each task. costs[i][j] is the cost of assigning agent i to task j. + // All the costs must be non-negative. This matrix does not have to + // be square (i.e. we can have different numbers of agents and tasks), but it + // must be regular (i.e. there must be the same number of entries in each row + // of the matrix). + explicit HungarianOptimizer(const std::vector >& costs); + + // Find an assignment which maximizes the total cost. + // Returns the assignment in the two vectors passed as argument. + // agent[i] is assigned to task[i]. + void maximize(std::vector* agent, std::vector* task); + + // Find an assignment which minimizes the total cost. + // Returns the assignment in the two vectors passed as argument. + // agent[i] is assigned to task[i]. + void minimize(std::vector* agent, std::vector* task); + + private: + typedef void (HungarianOptimizer::*Step)(); + + typedef enum { NONE, PRIME, STAR } Mark; + + // Convert the final cost matrix into a set of assignments of agents -> tasks. + // Returns the assignment in the two vectors passed as argument, the same as + // Minimize and Maximize + void find_assignments(std::vector* agent, std::vector* task); + + // Is the cell (row, col) starred? + bool is_starred(int row, int col) const { return marks_[row][col] == STAR; } + + // Mark cell (row, col) with a star + void star(int row, int col) { + marks_[row][col] = STAR; + stars_in_col_[col]++; + } + + // Remove a star from cell (row, col) + void unstar(int row, int col) { + marks_[row][col] = NONE; + stars_in_col_[col]--; + } + + // Find a column in row 'row' containing a star, or return + // kHungarianOptimizerColNotFound if no such column exists. + int find_star_in_row(int row) const; + + // Find a row in column 'col' containing a star, or return + // kHungarianOptimizerRowNotFound if no such row exists. + int find_star_in_col(int col) const; + + // Is cell (row, col) marked with a prime? + bool is_primed(int row, int col) const { return marks_[row][col] == PRIME; } + + // Mark cell (row, col) with a prime. + void prime(int row, int col) { marks_[row][col] = PRIME; } + + // Find a column in row containing a prime, or return + // kHungarianOptimizerColNotFound if no such column exists. + int find_prime_in_row(int row) const; + + // Remove the prime marks_ from every cell in the matrix. + void clear_primes(); + + // Does column col contain a star? + bool col_contains_star(int col) const { return stars_in_col_[col] > 0; } + + // Is row 'row' covered? + bool row_covered(int row) const { return rows_covered_[row]; } + + // Cover row 'row'. + void cover_row(int row) { rows_covered_[row] = true; } + + // Uncover row 'row'. + void uncover_row(int row) { rows_covered_[row] = false; } + + // Is column col covered? + bool col_covered(int col) const { return cols_covered_[col]; } + + // Cover column col. + void cover_col(int col) { cols_covered_[col] = true; } + + // Uncover column col. + void uncover_col(int col) { cols_covered_[col] = false; } + + // Uncover ever row and column in the matrix. + void clear_covers(); + + // Find the smallest uncovered cell in the matrix. + double find_smallest_uncovered(); + + // Find an uncovered zero and store its coordinates in (zeroRow_, zeroCol_) + // and return true, or return false if no such cell exists. + bool find_zero(int* zero_row, int* zero_col); + + // Print the matrix to stdout (for debugging.) + void print_matrix(); + + // Run the Munkres algorithm! + void do_munkres(); + + void check_star(); + + // Step 1. + // For each row of the matrix, find the smallest element and subtract it + // from every element in its row. Go to Step 2. + void reduce_rows(); + + // Step 2. + // Find a zero (Z) in the matrix. If there is no starred zero in its row + // or column, star Z. Repeat for every element in the matrix. Go to step 3. + // Note: profiling shows this method to use 9.2% of the CPU - the next + // slowest step takes 0.6%. I can't think of a way of speeding it up though. + void star_zeroes(); + + // Step 3. + // Cover each column containing a starred zero. If all columns are + // covered, the starred zeros describe a complete set of unique assignments. + // In this case, terminate the algorithm. Otherwise, go to step 4. + void cover_starred_zeroes(); + + // Step 4. + // Find a noncovered zero and prime it. If there is no starred zero in the + // row containing this primed zero, Go to Step 5. Otherwise, cover this row + // and uncover the column containing the starred zero. Continue in this manner + // until there are no uncovered zeros left, then go to Step 6. + void prime_zeroes(); + + // Step 5. + // Construct a series of alternating primed and starred zeros as follows. + // Let Z0 represent the uncovered primed zero found in Step 4. Let Z1 denote + // the starred zero in the column of Z0 (if any). Let Z2 denote the primed + // zero in the row of Z1 (there will always be one). Continue until the + // series terminates at a primed zero that has no starred zero in its column. + // Unstar each starred zero of the series, star each primed zero of the + // series, erase all primes and uncover every line in the matrix. Return to + // Step 3. + void make_augmenting_path(); + + // Step 6. + // Add the smallest uncovered value in the matrix to every element of each + // covered row, and subtract it from every element of each uncovered column. + // Return to Step 4 without altering any stars, primes, or covered lines. + void augment_path(); + + // The size of the problem, i.e. std::max(#agents, #tasks). + int matrix_size_; + + // The expanded cost matrix. + std::vector > costs_; + + // The greatest cost in the initial cost matrix. + double max_cost_; + + // Which rows and columns are currently covered. + std::vector rows_covered_; + std::vector cols_covered_; + + // The marks_ (star/prime/none) on each element of the cost matrix. + std::vector > marks_; + + // The number of stars in each column - used to speed up coverStarredZeroes. + std::vector stars_in_col_; + + // Representation of a path_ through the matrix - used in step 5. + std::vector preimage_; // i.e. the agents + std::vector image_; // i.e. the tasks + + // The locations of a zero found in step 4. + int zero_col_; + int zero_row_; + + // The width_ and height_ of the initial (non-expanded) cost matrix. + int width_; + int height_; + + // The current state of the algorithm + HungarianOptimizer::Step state_; + + std::vector uncov_col_; + std::vector uncov_row_; +}; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_COMMON_HUNGARIAN_BIGRAPH_MATCHER_H_ diff --git a/modules/perception/obstacle/common/hungarian_bigraph_matcher_test.cc b/modules/perception/obstacle/common/hungarian_bigraph_matcher_test.cc new file mode 100644 index 00000000000..58dac2abd17 --- /dev/null +++ b/modules/perception/obstacle/common/hungarian_bigraph_matcher_test.cc @@ -0,0 +1,132 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/common/hungarian_bigraph_matcher.h" + +#include "Eigen/Core" +#include "gtest/gtest.h" +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +TEST(HungarianOptimizerTest, maximize) { + // case 1 + Eigen::MatrixXf association_mat_1(3, 4); + association_mat_1 << 4.7, 3.8, 1.0, 2.0, + 4.1, 3.0, 2.0, -3.0, + 1.0, 2.0, 4.7, 4.9; + std::vector< std::vector > cost(association_mat_1.rows()); + for (int i = 0; i < association_mat_1.rows(); i++) { + cost[i].resize(association_mat_1.cols()); + for (int j = 0; j < association_mat_1.cols(); j++) { + cost[i][j] = association_mat_1(i, j); + } + } + HungarianOptimizer hungarian_optimizer_1(cost); + std::vector agent; + std::vector task; + hungarian_optimizer_1.maximize(&agent, &task); + EXPECT_EQ(0, agent[0]); + EXPECT_EQ(1, agent[1]); + EXPECT_EQ(2, agent[2]); + EXPECT_EQ(1, task[0]); + EXPECT_EQ(0, task[1]); + EXPECT_EQ(3, task[2]); + + // case 2 + Eigen::MatrixXf association_mat_2(2, 2); + association_mat_2 << 0.0, 0.0, + 0.0, 0.0; + cost.resize(association_mat_2.rows()); + for (int i = 0; i < association_mat_2.rows(); i++) { + cost[i].resize(association_mat_2.cols()); + for (int j = 0; j < association_mat_2.cols(); j++) { + cost[i][j] = association_mat_2(i, j); + } + } + HungarianOptimizer hungarian_optimizer_2(cost); + agent.clear(); + task.clear(); + hungarian_optimizer_2.maximize(&agent, &task); + EXPECT_EQ(0, agent[0]); + EXPECT_EQ(1, agent[1]); + EXPECT_EQ(0, task[0]); + EXPECT_EQ(1, task[1]); + + // case 3 + Eigen::MatrixXf association_mat_3(2, 2); + association_mat_3 << 3.0, 3.0, + 3.0, 3.0; + cost.resize(association_mat_3.rows()); + for (int i = 0; i < association_mat_3.rows(); i++) { + cost[i].resize(association_mat_3.cols()); + for (int j = 0; j < association_mat_3.cols(); j++) { + cost[i][j] = association_mat_3(i, j); + } + } + HungarianOptimizer hungarian_optimizer_3(cost); + agent.clear(); + task.clear(); + hungarian_optimizer_3.maximize(&agent, &task); + EXPECT_EQ(0, agent[0]); + EXPECT_EQ(1, agent[1]); + EXPECT_EQ(0, task[0]); + EXPECT_EQ(1, task[1]); + + // case 4 + for (size_t i = 0; i < cost.size(); ++i) { + cost[i].clear(); + } + cost.clear(); + HungarianOptimizer hungarian_optimizer_4(cost); + agent.clear(); + task.clear(); + hungarian_optimizer_4.maximize(&agent, &task); + EXPECT_EQ(0, agent.size()); + EXPECT_EQ(0, task.size()); +} + +TEST(HungarianOptimizerTest, minimize) { + Eigen::MatrixXf association_mat(3, 4); + association_mat << 0.3, 1.2, 4.0, 3.0, + 0.9, 2.0, 3.0, 8.0, + 4.0, 3.0, 0.3, 0.1; + std::vector< std::vector > cost(association_mat.rows()); + for (int i = 0; i < association_mat.rows(); i++) { + cost[i].resize(association_mat.cols()); + for (int j = 0; j < association_mat.cols(); j++) { + cost[i][j] = association_mat(i, j); + } + } + HungarianOptimizer* hungarian_optimizer = new HungarianOptimizer(cost); + std::vector agent; + std::vector task; + hungarian_optimizer->minimize(&agent, &task); + EXPECT_EQ(0, agent[0]); + EXPECT_EQ(1, agent[1]); + EXPECT_EQ(2, agent[2]); + EXPECT_EQ(1, task[0]); + EXPECT_EQ(0, task[1]); + EXPECT_EQ(3, task[2]); + if (hungarian_optimizer != nullptr) { + delete hungarian_optimizer; + hungarian_optimizer = nullptr; + } +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/common/pose_util.cc b/modules/perception/obstacle/common/pose_util.cc new file mode 100644 index 00000000000..ca7c31b199b --- /dev/null +++ b/modules/perception/obstacle/common/pose_util.cc @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/common/pose_util.h" + +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +bool ReadPoseFile(const std::string &filename, Eigen::Matrix4d *pose, + int *frame_id, double *time_stamp) { + std::ifstream ifs(filename.c_str()); + if (!ifs.is_open()) { + AERROR << "Failed to open file " << filename; + return false; + } + char buffer[1024]; + ifs.getline(buffer, 1024); + int id = 0; + double time_samp = 0; + double quat[4]; + double matrix3x3[9]; + double &pose03 = (*pose)(0, 3); + double &pose13 = (*pose)(1, 3); + double &pose23 = (*pose)(2, 3); + int ret = sscanf(buffer, "%d %lf %lf %lf %lf %lf %lf %lf %lf", &id, + &(time_samp), &pose03, &pose13, &pose23, &(quat[0]), + &(quat[1]), &(quat[2]), &(quat[3])); + if (ret != 9) { + AERROR << "Failed to scan parameters."; + return false; + } + QuaternionToRotationMatrix(quat, matrix3x3); + + for (int i = 0; i < 3; ++i) { + for (int j = 0; j < 3; ++j) { + (*pose)(i, j) = matrix3x3[i * 3 + j]; + } + } + + (*frame_id) = id; + (*time_stamp) = time_samp; + return true; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/common/pose_util.h b/modules/perception/obstacle/common/pose_util.h new file mode 100644 index 00000000000..f86d46ba87e --- /dev/null +++ b/modules/perception/obstacle/common/pose_util.h @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_COMMON_POSE_UTIL_H_ +#define MODULES_PERCEPTION_OBSTACLE_COMMON_POSE_UTIL_H_ + +#include +#include +#include +#include +#include + +#include "Eigen/Core" + +namespace apollo { +namespace perception { + +template +void QuaternionToRotationMatrix(const T* quat, T* R) { + T x2 = quat[0] * quat[0]; + T xy = quat[0] * quat[1]; + T rx = quat[3] * quat[0]; + T y2 = quat[1] * quat[1]; + T yz = quat[1] * quat[2]; + T ry = quat[3] * quat[1]; + T z2 = quat[2] * quat[2]; + T zx = quat[2] * quat[0]; + T rz = quat[3] * quat[2]; + T r2 = quat[3] * quat[3]; + R[0] = r2 + x2 - y2 - z2; // fill diagonal terms + R[4] = r2 - x2 + y2 - z2; + R[8] = r2 - x2 - y2 + z2; + R[3] = 2 * (xy + rz); // fill off diagonal terms + R[6] = 2 * (zx - ry); + R[7] = 2 * (yz + rx); + R[1] = 2 * (xy - rz); + R[2] = 2 * (zx + ry); + R[5] = 2 * (yz - rx); +} + +bool ReadPoseFile(const std::string& filename, Eigen::Matrix4d* pose, + int* frame_id, double* time_stamp); + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_COMMON_POSE_UTIL_H_ diff --git a/modules/perception/obstacle/common/pose_util_test.cc b/modules/perception/obstacle/common/pose_util_test.cc new file mode 100644 index 00000000000..8e2ba1489c1 --- /dev/null +++ b/modules/perception/obstacle/common/pose_util_test.cc @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/common/pose_util.h" + +#include "gtest/gtest.h" +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +class PoseUtilTest : public testing::Test { + protected: + PoseUtilTest() {} + virtual ~PoseUtilTest() {} + void SetUp() {} + void TearDown() {} +}; + +TEST_F(PoseUtilTest, ReadPoseFile) { + std::string data_path = "modules/perception/data/hm_tracker_test/"; + std::string file_name = "QN68P2_12_1476265365_1476265665_2.pose"; + std::string test_file = data_path + file_name; + Eigen::Matrix4d pose; + int frame_id; + double time_stamp; + EXPECT_TRUE(ReadPoseFile(test_file, &pose, &frame_id, &time_stamp)); + EXPECT_EQ(frame_id, 11989); + EXPECT_EQ(time_stamp, 588.419051); + EXPECT_EQ(pose(0, 3), 33.330463); + EXPECT_EQ(pose(1, 3), 45.010161); + EXPECT_EQ(pose(2, 3), 40.746964); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/dummy/BUILD b/modules/perception/obstacle/lidar/dummy/BUILD new file mode 100644 index 00000000000..1871afded5a --- /dev/null +++ b/modules/perception/obstacle/lidar/dummy/BUILD @@ -0,0 +1,22 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "perception_obstacle_lidar_dummy", + srcs = [ + "dummy_algorithms.cc", + ], + hdrs = [ + "dummy_algorithms.h", + ], + deps = [ + "//modules/common:log", + "//modules/perception/obstacle/common:perception_obstacle_common", + "//modules/perception/obstacle/lidar/interface:perception_obstacle_lidar_interface", + "@eigen//:eigen", + "@pcl//:pcl", + ], +) + +cpplint() diff --git a/modules/perception/obstacle/lidar/dummy/dummy_algorithms.cc b/modules/perception/obstacle/lidar/dummy/dummy_algorithms.cc new file mode 100644 index 00000000000..c6e9de7106b --- /dev/null +++ b/modules/perception/obstacle/lidar/dummy/dummy_algorithms.cc @@ -0,0 +1,148 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#include "modules/perception/obstacle/lidar/dummy/dummy_algorithms.h" +#include "modules/perception/obstacle/common/geometry_util.h" + +namespace apollo { +namespace perception { + +using std::vector; +using pcl_util::Point; +using pcl_util::PointD; +using pcl_util::PointCloud; +using pcl_util::PointCloudPtr; +using pcl_util::PointIndices; +using pcl_util::PointIndicesPtr; + +static void extract_pointcloud_indices(const PointCloudPtr &cloud, + PointIndices* out_indices) { + const size_t vec_size = cloud->size(); + auto &indices = out_indices->indices; + indices.resize(vec_size); + + std::iota(indices.begin(), indices.end(), 0); +} + +bool DummyROIFilter::Filter(const pcl_util::PointCloudPtr& cloud, + const ROIFilterOptions &roi_filter_options, + pcl_util::PointIndices* roi_indices) { + extract_pointcloud_indices(cloud, roi_indices); + return true; +} + +bool DummyGroundDetector::Detect(const GroundDetectorOptions &options, + PointCloudPtr cloud, + PointIndicesPtr non_ground_indices) { + extract_pointcloud_indices(cloud, non_ground_indices.get()); + return result_detect_; +} + +bool DummySegmentation::Segment(const PointCloudPtr &cloud, + const PointIndices &non_ground_indices, + const SegmentationOptions &options, + vector *objects) { + return result_segment_; +} + +void DummyObjectBuilder::BuildObject(const ObjectBuilderOptions &options, + ObjectPtr obj) { + Eigen::Vector4f min_pt; + Eigen::Vector4f max_pt; + PointCloudPtr cloud = obj->cloud; + SetDefaultValue(cloud, obj, &min_pt, &max_pt); + if (cloud->points.size() < 4u) { + return; + } + obj->polygon.points.resize(4); + obj->polygon.points[0].x = static_cast(min_pt[0]); + obj->polygon.points[0].y = static_cast(min_pt[1]); + obj->polygon.points[0].z = static_cast(min_pt[2]); + + obj->polygon.points[1].x = static_cast(min_pt[0]); + obj->polygon.points[1].y = static_cast(max_pt[1]); + obj->polygon.points[1].z = static_cast(min_pt[2]); + + obj->polygon.points[2].x = static_cast(max_pt[0]); + obj->polygon.points[2].y = static_cast(max_pt[1]); + obj->polygon.points[2].z = static_cast(min_pt[2]); + + obj->polygon.points[3].x = static_cast(max_pt[0]); + obj->polygon.points[3].y = static_cast(min_pt[1]); + obj->polygon.points[3].z = static_cast(min_pt[2]); + obj->anchor_point = obj->center; +} + +bool DummyObjectBuilder::Build(const ObjectBuilderOptions &options, + vector *objects) { + if (objects == NULL) { + return false; + } + + for (size_t i = 0; i < objects->size(); ++i) { + if ((*objects)[i]) { + (*objects)[i]->id = static_cast(i); + BuildObject(options, (*objects)[i]); + } + } + + return result_build_; +} + +bool DummyObjectFilter::Filter(const ObjectFilterOptions &obj_filter_options, + std::vector *objects) { + return result_object_filter_; +} + +bool DummyTracker::Track(const vector &objects, double timestamp, + const TrackerOptions &options, + vector *tracked_objects) { + if (tracked_objects == nullptr || options.velodyne_trans == nullptr) { + return result_track_; + } + + Eigen::Matrix4d pose = *(options.velodyne_trans); + // transform objects + (*tracked_objects).resize(objects.size()); + for (size_t i = 0; i < objects.size(); i++) { + ObjectPtr obj(new Object()); + obj->clone(*objects[i]); + const Eigen::Vector3d &dir = obj->direction; + obj->direction = + (pose * Eigen::Vector4d(dir[0], dir[1], dir[2], 0)).head(3); + const Eigen::Vector3d ¢er = obj->center; + obj->center = + (pose * Eigen::Vector4d(center[0], center[1], center[2], 1)).head(3); + // obj->anchor_point = obj->center; + + TransformPointCloud(pose, obj->cloud); + TransformPointCloud(pose, obj->polygon.makeShared()); + if (fabs(obj->direction[0]) < DBL_MIN) { + if (obj->direction[1] > 0) { + obj->theta = M_PI / 2; + } else { + obj->theta = -M_PI / 2; + } + } else { + obj->theta = atan(obj->direction[1] / obj->direction[0]); + } + (*tracked_objects)[i] = obj; + } + + return result_track_; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/dummy/dummy_algorithms.h b/modules/perception/obstacle/lidar/dummy/dummy_algorithms.h new file mode 100644 index 00000000000..e393642baf4 --- /dev/null +++ b/modules/perception/obstacle/lidar/dummy/dummy_algorithms.h @@ -0,0 +1,190 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_DUMMY_DUMMY_ALGORITHMS_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_DUMMY_DUMMY_ALGORITHMS_H_ + +#include +#include + +#include "modules/perception/obstacle/lidar/interface/base_ground_detector.h" +#include "modules/perception/obstacle/lidar/interface/base_object_builder.h" +#include "modules/perception/obstacle/lidar/interface/base_object_filter.h" +#include "modules/perception/obstacle/lidar/interface/base_roi_filter.h" +#include "modules/perception/obstacle/lidar/interface/base_segmentation.h" +#include "modules/perception/obstacle/lidar/interface/base_tracker.h" + +namespace apollo { +namespace perception { + +class DummyROIFilter : public BaseROIFilter { + public: + DummyROIFilter() : BaseROIFilter() {} + ~DummyROIFilter() = default; + + bool Init() override { + return result_init_; + } + + bool Filter(const pcl_util::PointCloudPtr& cloud, + const ROIFilterOptions &roi_filter_options, + pcl_util::PointIndices* roi_indices) override; + + std::string name() const override { + return "DummyROIFilter"; + } + + private: + // for ut + bool result_init_ = true; + bool result_filter_ = true; + + DISALLOW_COPY_AND_ASSIGN(DummyROIFilter); +}; + +class DummyGroundDetector : public BaseGroundDetector { + public: + DummyGroundDetector() : BaseGroundDetector() {} + ~DummyGroundDetector() = default; + + bool Init() override { + return result_init_; + } + + bool Detect(const GroundDetectorOptions &options, + pcl_util::PointCloudPtr cloud, + pcl_util::PointIndicesPtr non_ground_indices) override; + + std::string name() const override { + return "DummyGroundDetector"; + } + + private: + // for unit test + bool result_init_ = true; + bool result_detect_ = true; + + DISALLOW_COPY_AND_ASSIGN(DummyGroundDetector); +}; + +class DummySegmentation : public BaseSegmentation { + public: + DummySegmentation() : BaseSegmentation() {} + ~DummySegmentation() = default; + + bool Init() override { + return result_init_; + } + + bool Segment(const pcl_util::PointCloudPtr &cloud, + const pcl_util::PointIndices &non_ground_indices, + const SegmentationOptions &options, + std::vector *objects) override; + + std::string name() const override { + return "DummySegmentation"; + } + + private: + bool result_init_ = true; + bool result_segment_ = true; + + DISALLOW_COPY_AND_ASSIGN(DummySegmentation); +}; + +class DummyObjectBuilder : public BaseObjectBuilder { + public: + DummyObjectBuilder() : BaseObjectBuilder() {} + ~DummyObjectBuilder() = default; + + bool Init() override { + return result_init_; + } + + bool Build(const ObjectBuilderOptions &options, + std::vector *objects) override; + + std::string name() const override { + return "DummyObjectBuilder"; + } + + protected: + void BuildObject(const ObjectBuilderOptions &options, ObjectPtr object); + + private: + bool result_init_ = true; + bool result_build_ = true; + + DISALLOW_COPY_AND_ASSIGN(DummyObjectBuilder); +}; + +class DummyObjectFilter : public BaseObjectFilter { + public: + DummyObjectFilter() : BaseObjectFilter() {} + ~DummyObjectFilter() {} + + bool Init() override { + return result_init_; + } + + bool Filter(const ObjectFilterOptions &obj_filter_options, + std::vector *objects) override; + + std::string name() const override { + return "DummyObjectFilter"; + } + + private: + bool result_init_ = true; + bool result_object_filter_ = true; + + DISALLOW_COPY_AND_ASSIGN(DummyObjectFilter); +}; + +class DummyTracker : public BaseTracker { + public: + DummyTracker() : BaseTracker() {} + ~DummyTracker() = default; + + bool Init() override { + return result_init_; + } + + bool Track(const std::vector &objects, double timestamp, + const TrackerOptions &options, + std::vector *tracked_objects) override; + + std::string name() const override { + return "DummyTracker"; + } + + private: + bool result_init_ = true; + bool result_track_ = true; + + DISALLOW_COPY_AND_ASSIGN(DummyTracker); +}; + +REGISTER_GROUNDDETECTOR(DummyGroundDetector); +REGISTER_ROIFILTER(DummyROIFilter); +REGISTER_SEGMENTATION(DummySegmentation); +REGISTER_OBJECTBUILDER(DummyObjectBuilder); +REGISTER_TRACKER(DummyTracker); +REGISTER_OBJECTFILTER(DummyObjectFilter); + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_DUMMY_DUMMY_ALGORITHMS_H_ diff --git a/modules/perception/obstacle/lidar/interface/BUILD b/modules/perception/obstacle/lidar/interface/BUILD new file mode 100644 index 00000000000..f0951701ce6 --- /dev/null +++ b/modules/perception/obstacle/lidar/interface/BUILD @@ -0,0 +1,18 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "perception_obstacle_lidar_interface", + srcs = [], + hdrs = glob(["*.h"]), + deps = [ + "//modules/perception/lib/base", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/base:perception_obstacle_base", + "//modules/perception/obstacle/onboard:perception_obstacle_hdmapinput", + "@eigen//:eigen", + ], +) + +cpplint() diff --git a/modules/perception/obstacle/lidar/interface/base_ground_detector.h b/modules/perception/obstacle/lidar/interface/base_ground_detector.h new file mode 100644 index 00000000000..61c821cc02f --- /dev/null +++ b/modules/perception/obstacle/lidar/interface/base_ground_detector.h @@ -0,0 +1,107 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef APOLLO_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_GROUND_DETECTOR_H_ +#define APOLLO_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_GROUND_DETECTOR_H_ + +// SAMPLE CODE: +// +// class MyGroundDetector : public BaseGroundDetector { +// public: +// MyGroundDetector() : BaseGroundDetector() {} +// virtual ~MyGroundDetector() {} +// +// virtual bool init() override { +// // Do something. +// return true; +// } +// +// virtual bool detect( +// pcl_util::PointCloudPtr& cloud, +// const GroundDetectorOptions& options, +// pcl_util::PointIndices* non_ground_indices) override { +// +// // Do something. +// return true; +// } +// +// virtual std::string name() const override { +// return "MyGroundDetector"; +// } +// +// }; +// +// // Register plugin. +// REGISTER_GROUNDDETECTOR(MyGroundDetector); +//////////////////////////////////////////////////////// +// USING CODE: +// // BaseGroundDetector* ground_detector = // +// BaseGroundDetectorRegisterer::get_instance_by_name("MyGroundDetector"); +// using ground_detector to do somethings. +// //////////////////////////////////////////////////// + +#include + +#include "modules/common/macro.h" +#include "modules/perception/lib/base/registerer.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" + +namespace apollo { +namespace perception { + +struct GroundDetectorOptions { + GroundDetectorOptions() { + velodyne_position.x = 0.0; + velodyne_position.y = 0.0; + velodyne_position.z = 0.0; + velodyne_ground_position.x = 0.0; + velodyne_ground_position.y = 0.0; + velodyne_ground_position.z = 0.0; + } + + pcl_util::Point velodyne_position; + pcl_util::Point velodyne_ground_position; + Eigen::Matrix4d trans_velodyne_to_world; +}; + +class BaseGroundDetector { + public: + BaseGroundDetector() {} + virtual ~BaseGroundDetector() {} + + virtual bool Init() = 0; + + // @brief: detect ground points from point cloud. + // and will update height field. + // @param [in/out]: input point cloud. + // @param [in]: options + // @param [out]: non ground points index. + virtual bool Detect(const GroundDetectorOptions &options, + pcl_util::PointCloudPtr cloud, + pcl_util::PointIndicesPtr non_ground_indices) = 0; + + virtual std::string name() const = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(BaseGroundDetector); +}; + +REGISTER_REGISTERER(BaseGroundDetector); +#define REGISTER_GROUNDDETECTOR(name) REGISTER_CLASS(BaseGroundDetector, name) + +} // namespace perception +} // namespace apollo + +#endif // APOLLO_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_GROUND_DETECTOR_H_ diff --git a/modules/perception/obstacle/lidar/interface/base_object_builder.h b/modules/perception/obstacle/lidar/interface/base_object_builder.h new file mode 100644 index 00000000000..36ac05c3a38 --- /dev/null +++ b/modules/perception/obstacle/lidar/interface/base_object_builder.h @@ -0,0 +1,152 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_OBJECT_BUILDER_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_OBJECT_BUILDER_H_ + +// SAMPLE CODE: +// +// class MyObjectBuilder : public BaseObjectBuilder { +// public: +// MyObjectBuilder() : BaseObjectBuilder() {} +// virtual ~MyObjectBuilder() {} +// +// virtual bool init() override { +// // Do something. +// return true; +// } +// +// virtual bool build( +// ObjectBuilderOptions options, +// std::vector* objects) override { +// // Do something. +// return true; +// } +// +// virtual std::string name() const override { +// return "MyObjectBuilder"; +// } +// +// }; +// +// // Register plugin. +// REGISTER_OBJECTBUILDER(MyObjectBuilder); +//////////////////////////////////////////////////////// +// USING CODE: +// +// BaseObjectBuilder* object_builder = +// BaseObjectBuilderRegisterer::get_instance_by_name("MyObjectBuilder"); +// using object_builder to do somethings. +// //////////////////////////////////////////////////// + +#include +#include + +#include "modules/common/macro.h" +#include "modules/perception/lib/base/registerer.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/common/geometry_util.h" + +namespace apollo { +namespace perception { + +struct ObjectBuilderOptions { + Eigen::Vector3d ref_center; +}; + +class BaseObjectBuilder { + public: + BaseObjectBuilder() {} + virtual ~BaseObjectBuilder() {} + + virtual bool Init() = 0; + + // @brief: calc object feature, and fill fields. + // @param [in]: options. + // @param [in/out]: object list. + virtual bool Build(const ObjectBuilderOptions &options, + std::vector *objects) = 0; + + virtual std::string name() const = 0; + + protected: + virtual void SetDefaultValue(pcl_util::PointCloudPtr cloud, ObjectPtr obj, + Eigen::Vector4f* min_pt, + Eigen::Vector4f* max_pt) { + GetCloudMinMax3D(cloud, min_pt, max_pt); + Eigen::Vector3f center(((*min_pt)[0] + (*max_pt)[0]) / 2, + ((*min_pt)[1] + (*max_pt)[1]) / 2, + ((*min_pt)[2] + (*max_pt)[2]) / 2); + + // handle degeneration case + float epslin = 1e-3; + for (int i = 0; i < 3; i++) { + if ((*max_pt)[i] - (*min_pt)[i] < epslin) { + (*max_pt)[i] = center[i] + epslin / 2; + (*min_pt)[i] = center[i] - epslin / 2; + } + } + + // length + obj->length = (*max_pt)[0] - (*min_pt)[0]; + // width + obj->width = (*max_pt)[1] - (*min_pt)[1]; + if (obj->length - obj->width < 0) { + float tmp = obj->length; + obj->length = obj->width; + obj->width = tmp; + obj->direction = Eigen::Vector3d(0.0, 1.0, 0.0); + } else { + obj->direction = Eigen::Vector3d(1.0, 0.0, 0.0); + } + // height + obj->height = (*max_pt)[2] - (*min_pt)[2]; + // center + obj->center = Eigen::Vector3d(((*max_pt)[0] + (*min_pt)[0]) / 2, + ((*max_pt)[1] + (*min_pt)[1]) / 2, + ((*max_pt)[2] + (*min_pt)[2]) / 2); + // polygon + if (cloud->size() < 4) { + obj->polygon.points.resize(4); + obj->polygon.points[0].x = static_cast((*min_pt)[0]); + obj->polygon.points[0].y = static_cast((*min_pt)[1]); + obj->polygon.points[0].z = static_cast((*min_pt)[2]); + + obj->polygon.points[1].x = static_cast((*max_pt)[0]); + obj->polygon.points[1].y = static_cast((*min_pt)[1]); + obj->polygon.points[1].z = static_cast((*min_pt)[2]); + + obj->polygon.points[2].x = static_cast((*max_pt)[0]); + obj->polygon.points[2].y = static_cast((*max_pt)[1]); + obj->polygon.points[2].z = static_cast((*min_pt)[2]); + + obj->polygon.points[3].x = static_cast((*min_pt)[0]); + obj->polygon.points[3].y = static_cast((*max_pt)[1]); + obj->polygon.points[3].z = static_cast((*min_pt)[2]); + } + } + + private: + DISALLOW_COPY_AND_ASSIGN(BaseObjectBuilder); +}; + +REGISTER_REGISTERER(BaseObjectBuilder); +#define REGISTER_OBJECTBUILDER(name) REGISTER_CLASS(BaseObjectBuilder, name) + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_OBJECT_BUILDER_H_ diff --git a/modules/perception/obstacle/lidar/interface/base_object_filter.h b/modules/perception/obstacle/lidar/interface/base_object_filter.h new file mode 100644 index 00000000000..505ad7d617a --- /dev/null +++ b/modules/perception/obstacle/lidar/interface/base_object_filter.h @@ -0,0 +1,99 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_OBJECT_FILTER_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_OBJECT_FILTER_H_ + +// SAMPLE CODE: +// +// class MyObjectFilter : public BaseObjectFilter { +// public: +// MyObjectFilter() : BaseObjectFilter() {} +// virtual ~MyObjectFilter() {} +// +// virtual bool init() override { +// // Do something. +// return true; +// } +// +// virtual bool filter( +// const ObjectFilterOptions& obj_filter_options, +// std::vector& objects) override { +// +// // Do something. +// return true; +// } +// +// virtual std::string name() const override { +// return "MyObjectFilter"; +// } +// +// }; +// +// // Register plugin. +// REGISTER_GROUNDDETECTOR(MyObjectFilter); +//////////////////////////////////////////////////////// +// USING CODE: +// +// BaseObjectFilter* roi_filter = +// BaseObjectFilterRegisterer::get_instance_by_name("MyObjectFilter"); +// using roi_filter to do somethings. +// //////////////////////////////////////////////////// + +#include +#include +#include + +#include "modules/common/macro.h" +#include "modules/perception/lib/base/registerer.h" +#include "modules/perception/obstacle/base/hdmap_struct.h" +#include "modules/perception/obstacle/base/object.h" + +namespace apollo { +namespace perception { + +struct ObjectFilterOptions { + ObjectFilterOptions() = default; + explicit ObjectFilterOptions(Eigen::Matrix4d* pose) + : velodyne2world_pose(pose) {} + + std::shared_ptr velodyne2world_pose = nullptr; + + HdmapStructConstPtr hdmap_input = nullptr; +}; + +class BaseObjectFilter { + public: + BaseObjectFilter() {} + virtual ~BaseObjectFilter() {} + + virtual bool Init() = 0; + + virtual bool Filter(const ObjectFilterOptions &obj_filter_options, + std::vector *objects) = 0; + + virtual std::string name() const = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(BaseObjectFilter); +}; + +REGISTER_REGISTERER(BaseObjectFilter); +#define REGISTER_OBJECTFILTER(name) REGISTER_CLASS(BaseObjectFilter, name) + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_OBJECT_FILTER_H_ diff --git a/modules/perception/obstacle/lidar/interface/base_roi_filter.h b/modules/perception/obstacle/lidar/interface/base_roi_filter.h new file mode 100644 index 00000000000..6599f682bc4 --- /dev/null +++ b/modules/perception/obstacle/lidar/interface/base_roi_filter.h @@ -0,0 +1,104 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_ROI_FILTER_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_ROI_FILTER_H_ +// SAMPLE CODE: +// +// class MyROIFilter : public BaseROIFilter { +// public: +// MyROIFilter() : BaseROIFilter() {} +// virtual ~MyROIFilter() {} +// +// virtual bool init() override { +// // Do something. +// return true; +// } +// +// virtual bool filter( +// const pcl_util::PointCloudPtr& cloud, +// const ROIFilterOptions &roi_filter_options, +// pcl_util::PointCloudPtr* roi_cloud) override { +// +// // Do something. +// return true; +// } +// +// virtual std::string name() const override { +// return "MyROIFilter"; +// } +// +// }; +// +// // Register plugin. +// REGISTER_GROUNDDETECTOR(MyROIFilter); +//////////////////////////////////////////////////////// +// USING CODE: +// +// BaseROIFilter* roi_filter = +// BaseROIFilterRegisterer::get_instance_by_name("MyROIFilter"); +// using roi_filter to do somethings. +// //////////////////////////////////////////////////// + +#include +#include +#include + +#include "Eigen/Core" + +#include "modules/common/macro.h" +#include "modules/perception/lib/base/registerer.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/base/hdmap_struct.h" +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/base/types.h" + +namespace apollo { +namespace perception { + +struct ROIFilterOptions { + ROIFilterOptions() { + velodyne_trans = nullptr; + hdmap = nullptr; + } + + HdmapStructConstPtr hdmap; + std::shared_ptr velodyne_trans; +}; + +class BaseROIFilter { + public: + BaseROIFilter() {} + virtual ~BaseROIFilter() {} + + virtual bool Init() = 0; + + virtual bool Filter(const pcl_util::PointCloudPtr &cloud, + const ROIFilterOptions &roi_filter_options, + pcl_util::PointIndices *roi_indices) = 0; + + virtual std::string name() const = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(BaseROIFilter); +}; + +REGISTER_REGISTERER(BaseROIFilter); +#define REGISTER_ROIFILTER(name) REGISTER_CLASS(BaseROIFilter, name) + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_ROI_FILTER_H_ diff --git a/modules/perception/obstacle/lidar/interface/base_segmentation.h b/modules/perception/obstacle/lidar/interface/base_segmentation.h new file mode 100644 index 00000000000..96aaf2f8cc3 --- /dev/null +++ b/modules/perception/obstacle/lidar/interface/base_segmentation.h @@ -0,0 +1,106 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_SEGMENTATION_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_SEGMENTATION_H_ + +// SAMPLE CODE: +// +// class NCutSegmentation : public BaseSegmentation { +// public: +// NCutSegmentation() : BaseSegmentation() {} +// virtual ~NCutSegmentation() {} +// +// virtual bool init() override { +// // Do something. +// return true; +// } +// +// virtual bool segment( +// const pcl_util::PointCloudPtr& cloud, +// const pcl_util::PointIndices& non_ground_indices, +// const SegmentationOptions& options, +// std::vector* objects) override { +// +// // Do something. +// return true; +// } +// +// virtual std::string name() const override { +// return "NCutSegmentation"; +// } +// +// }; +// +// // Register plugin. +// REGISTER_SEGMENTATION(CNNSegmentation); +//////////////////////////////////////////////////////// +// USING CODE: +// +// BaseSegmentation* segmentation = +// BaseSegmentationRegisterer::get_instance_by_name("CNNSegmentation"); +// using segmentation to do somethings. +// //////////////////////////////////////////////////// + +#include +#include + +#include "modules/common/macro.h" +#include "modules/perception/lib/base/registerer.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/base/object.h" + +namespace apollo { +namespace perception { + +struct SegmentationOptions { + // original point cloud without ROI filtering + pcl_util::PointCloudPtr origin_cloud; + // indices of roi-filtered cloud in original cloud if enabled + pcl_util::PointIndicesPtr roi_cloud_indices; + // indices of non-ground points in original clound if enabled + pcl_util::PointIndicesPtr non_ground_indices; +}; + +class BaseSegmentation { + public: + BaseSegmentation() {} + virtual ~BaseSegmentation() {} + + virtual bool Init() = 0; + + // @brief: segment the point cloud. + // @param [in]: input point cloud. + // @param [in]: valid indices of points for segmentation. + // @param [in]: segmentation options + // @param [out]: segmented object. + virtual bool Segment(const pcl_util::PointCloudPtr &cloud, + const pcl_util::PointIndices &valid_indices, + const SegmentationOptions &options, + std::vector *objects) = 0; + + virtual std::string name() const = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(BaseSegmentation); +}; + +REGISTER_REGISTERER(BaseSegmentation); +#define REGISTER_SEGMENTATION(name) REGISTER_CLASS(BaseSegmentation, name) + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_SEGMENTATION_H_ diff --git a/modules/perception/obstacle/lidar/interface/base_tracker.h b/modules/perception/obstacle/lidar/interface/base_tracker.h new file mode 100644 index 00000000000..5cbec6ee10b --- /dev/null +++ b/modules/perception/obstacle/lidar/interface/base_tracker.h @@ -0,0 +1,107 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_TRACKER_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_TRACKER_H_ + +// SAMPLE CODE: +// +// class MyTracker : public BaseTracker { +// public: +// MyTracker() : BaseTracker() {} +// virtual ~MyTracker() {} +// +// virtual bool init() override { +// // Do something. +// return true; +// } +// +// virtual bool track( +// const std::vector& objects, +// double timestamp, +// const TrackerOptions& options, +// std::vector* tracked_objects) override { +// // Do something. +// return true; +// } +// +// virtual std::string name() const override { +// return "MyTracker"; +// } +// +// }; +// +// // Register plugin. +// REGISTER_TRACKER(MyTracker); +//////////////////////////////////////////////////////// +// USING CODE: +// +// BaseTracker* tracker = +// BaseTrackerRegisterer::get_instance_by_name("MyTracker"); +// using tracker to do somethings. +// //////////////////////////////////////////////////// + +#include +#include +#include + +#include "modules/common/macro.h" +#include "modules/perception/lib/base/registerer.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/base/hdmap_struct.h" +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/onboard/hdmap_input.h" + +namespace apollo { +namespace perception { + +struct TrackerOptions { + TrackerOptions() = default; + explicit TrackerOptions(Eigen::Matrix4d *pose) : velodyne_trans(pose) {} + + std::shared_ptr velodyne_trans; + HdmapStructPtr hdmap = nullptr; + HDMapInput* hdmap_input = NULL; +}; + +class BaseTracker { + public: + BaseTracker() {} + virtual ~BaseTracker() {} + + virtual bool Init() = 0; + + // @brief: tracking objects. + // @param [in]: current frame object list. + // @param [in]: timestamp. + // @param [in]: options. + // @param [out]: current tracked objects. + virtual bool Track(const std::vector &objects, double timestamp, + const TrackerOptions &options, + std::vector *tracked_objects) = 0; + + virtual std::string name() const = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(BaseTracker); +}; + +REGISTER_REGISTERER(BaseTracker); +#define REGISTER_TRACKER(name) REGISTER_CLASS(BaseTracker, name) + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_BASE_TRACKER_H_ diff --git a/modules/perception/obstacle/lidar/object_builder/min_box/BUILD b/modules/perception/obstacle/lidar/object_builder/min_box/BUILD new file mode 100644 index 00000000000..86953a39f77 --- /dev/null +++ b/modules/perception/obstacle/lidar/object_builder/min_box/BUILD @@ -0,0 +1,40 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "perception_obstacle_lidar_object_builder_min_box", + srcs = ["min_box.cc"], + hdrs = ["min_box.h"], + deps = [ + "//modules/common", + "//modules/common:log", + "//modules/perception/common:perception_common", + "//modules/perception/lib/base", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/common:perception_obstacle_common", + "//modules/perception/obstacle/lidar/interface:perception_obstacle_lidar_interface", + "@eigen//:eigen", + ], +) + +cc_test( + name = "min_box_test", + size = "small", + srcs = [ + "min_box_test.cc", + ], + data = ["//modules/perception:perception_data"], + linkopts = [ + "-lqhull", + ], + deps = [ + ":perception_obstacle_lidar_object_builder_min_box", + "//modules/perception/common:perception_common", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/common:perception_obstacle_common", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/perception/obstacle/lidar/object_builder/min_box/min_box.cc b/modules/perception/obstacle/lidar/object_builder/min_box/min_box.cc new file mode 100644 index 00000000000..a1d7b99220a --- /dev/null +++ b/modules/perception/obstacle/lidar/object_builder/min_box/min_box.cc @@ -0,0 +1,407 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include +#include "modules/perception/obstacle/lidar/object_builder/min_box/min_box.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/common/convex_hullxy.h" +#include "modules/perception/obstacle/common/geometry_util.h" + +namespace apollo { +namespace perception { + +using pcl_util::Point; +using pcl_util::PointCloud; +using pcl_util::PointCloudPtr; + +const float EPSILON = 1e-6; + +bool MinBoxObjectBuilder::Build( + const ObjectBuilderOptions& options, + std::vector* objects) { + if (objects == NULL) { + return false; + } + + for (size_t i = 0; i < objects->size(); ++i) { + if ((*objects)[i]) { + (*objects)[i]->id = i; + BuildObject(options, (*objects)[i]); + } + } + + return true; +} + +double MinBoxObjectBuilder::ComputeAreaAlongOneEdge( + ObjectPtr obj, + size_t first_in_point, + Eigen::Vector3d* center, + double* lenth, double* width, Eigen::Vector3d* dir) { + std::vector ns; + Eigen::Vector3d v(0.0, 0.0, 0.0); + Eigen::Vector3d vn(0.0, 0.0, 0.0); + Eigen::Vector3d n(0.0, 0.0, 0.0); + double len = 0; + double wid = 0; + size_t index = (first_in_point + 1) % obj->polygon.points.size(); + for (size_t i = 0; i < obj->polygon.points.size(); ++i) { + if (i != first_in_point && i != index) { + // compute v + Eigen::Vector3d o(0.0, 0.0, 0.0); + Eigen::Vector3d a(0.0, 0.0, 0.0); + Eigen::Vector3d b(0.0, 0.0, 0.0); + o[0] = obj->polygon.points[i].x; + o[1] = obj->polygon.points[i].y; + o[2] = 0; + b[0] = obj->polygon.points[first_in_point].x; + b[1] = obj->polygon.points[first_in_point].y; + b[2] = 0; + a[0] = obj->polygon.points[index].x; + a[1] = obj->polygon.points[index].y; + a[2] = 0; + double k = ((a[0] - o[0]) * (b[0] - a[0]) + + (a[1] - o[1]) * (b[1] - a[1])); + k = k / ((b[0] - a[0]) * (b[0] - a[0]) + + (b[1] - a[1]) * (b[1] - a[1])); + k = k * -1; + // n is pedal of src + n[0] = (b[0] - a[0]) * k + a[0]; + n[1] = (b[1] - a[1]) * k + a[1]; + n[2] = 0; + // compute height from src to line + Eigen::Vector3d edge1 = o - b; + Eigen::Vector3d edge2 = a - b; + // cross product + double height = fabs(edge1[0] * edge2[1] - edge2[0] * edge1[1]); + height = height / sqrt(edge2[0] * edge2[0] + edge2[1] * edge2[1]); + if (height > wid) { + wid = height; + v = o; + vn = n; + } + } else { + n[0] = obj->polygon.points[i].x; + n[1] = obj->polygon.points[i].y; + n[2] = 0; + } + ns.push_back(n); + } + size_t point_num1 = 0; + size_t point_num2 = 0; + for (size_t i = 0; i < ns.size() - 1; ++i) { + Eigen::Vector3d p1 = ns[i]; + for (size_t j = i + 1; j < ns.size(); ++j) { + Eigen::Vector3d p2 = ns[j]; + double dist = + sqrt((p1[0] - p2[0]) * (p1[0] - p2[0]) + + (p1[1] - p2[1]) * (p1[1] - p2[1])); + if (dist > len) { + len = dist; + point_num1 = i; + point_num2 = j; + } + } + } + Eigen::Vector3d vp1 = v + ns[point_num1] - vn; + Eigen::Vector3d vp2 = v + ns[point_num2] - vn; + (*center) = (vp1 + vp2 + ns[point_num1] + ns[point_num2]) / 4; + (*center)[2] = obj->polygon.points[0].z; + if (len > wid) { + *dir = ns[point_num2] - ns[point_num1]; + } else { + *dir = vp1 - ns[point_num1]; + } + *lenth = len > wid ? len : wid; + *width = len > wid ? wid : len; + return (*lenth) * (*width); +} + +void MinBoxObjectBuilder::ReconstructPolygon( + const Eigen::Vector3d &ref_ct, + ObjectPtr obj) { + if (obj->polygon.points.size() <= 0) { + return; + } + size_t max_point_index = 0; + size_t min_point_index = 0; + Eigen::Vector3d p; + p[0] = obj->polygon.points[0].x; + p[1] = obj->polygon.points[0].y; + p[2] = obj->polygon.points[0].z; + Eigen::Vector3d max_point = p - ref_ct; + Eigen::Vector3d min_point = p - ref_ct; + for (size_t i = 1; i < obj->polygon.points.size(); ++i) { + Eigen::Vector3d p; + p[0] = obj->polygon.points[i].x; + p[1] = obj->polygon.points[i].y; + p[2] = obj->polygon.points[i].z; + Eigen::Vector3d ray = p - ref_ct; + // clock direction + if (max_point[0] * ray[1] - ray[0] * max_point[1] < EPSILON) { + max_point = ray; + max_point_index = i; + } + // unclock direction + if (min_point[0] * ray[1] - ray[0] * min_point[1] > EPSILON) { + min_point = ray; + min_point_index = i; + } + } + Eigen::Vector3d line = max_point - min_point; + double total_len = 0; + double max_dis = 0; + bool has_out = false; + for (size_t i = min_point_index, count = 0; + count < obj->polygon.points.size(); + i = (i + 1) % obj->polygon.points.size(), ++count) { + Eigen::Vector3d p_x; + p_x[0] = obj->polygon.points[i].x; + p_x[1] = obj->polygon.points[i].y; + p_x[2] = obj->polygon.points[i].z; + size_t j = (i + 1) % obj->polygon.points.size(); + if (j != min_point_index && j != max_point_index) { + Eigen::Vector3d p; + p[0] = obj->polygon.points[j].x; + p[1] = obj->polygon.points[j].y; + p[2] = obj->polygon.points[j].z; + Eigen::Vector3d ray = p - min_point; + if (line[0] * ray[1] - ray[0] * line[1] < EPSILON) { + double dist = sqrt((p[0] - p_x[0]) * (p[0] - p_x[0]) + + (p[1] - p_x[1])* (p[1] - p_x[1])); + total_len += dist; + if (dist - max_dis > EPSILON) { + max_dis = dist; + } + } else { + // outline + has_out = true; + } + } else if ((i == min_point_index && j == max_point_index) + || (i == max_point_index && j == min_point_index)) { + size_t k = (j + 1) % obj->polygon.points.size(); + Eigen::Vector3d p_k; + p_k[0] = obj->polygon.points[k].x; + p_k[1] = obj->polygon.points[k].y; + p_k[2] = obj->polygon.points[k].z; + Eigen::Vector3d p_j; + p_j[0] = obj->polygon.points[j].x; + p_j[1] = obj->polygon.points[j].y; + p_j[2] = obj->polygon.points[j].z; + Eigen::Vector3d ray = p - min_point; + if (line[0] * ray[1] - ray[0] * line[1] < 0) { + } else { + // outline + has_out = true; + } + } else if (j == min_point_index || j == max_point_index) { + Eigen::Vector3d p; + p[0] = obj->polygon.points[j].x; + p[1] = obj->polygon.points[j].y; + p[2] = obj->polygon.points[j].z; + Eigen::Vector3d ray = p_x - min_point; + if (line[0] * ray[1] - ray[0] * line[1] < EPSILON) { + double dist = + sqrt((p[0] - p_x[0]) * (p[0] - p_x[0]) + + (p[1] - p_x[1])* (p[1] - p_x[1])); + total_len += dist; + if (dist > max_dis) { + max_dis = dist; + } + } else { + // outline + has_out = true; + } + } + } + size_t count = 0; + double min_area = std::numeric_limits::max(); + for (size_t i = min_point_index; + count < obj->polygon.points.size(); + i = (i + 1) % obj->polygon.points.size(), ++count) { + Eigen::Vector3d p_x; + p_x[0] = obj->polygon.points[i].x; + p_x[1] = obj->polygon.points[i].y; + p_x[2] = obj->polygon.points[i].z; + size_t j = (i + 1) % obj->polygon.points.size(); + Eigen::Vector3d p_j; + p_j[0] = obj->polygon.points[j].x; + p_j[1] = obj->polygon.points[j].y; + p_j[2] = obj->polygon.points[j].z; + double dist = sqrt((p_x[0] - p_j[0]) * (p_x[0] - p_j[0]) + + (p_x[1] - p_j[1])* (p_x[1] - p_j[1])); + if (dist < max_dis && (dist / total_len) < 0.5) { + continue; + } + if (j != min_point_index && j != max_point_index) { + Eigen::Vector3d p; + p[0] = obj->polygon.points[j].x; + p[1] = obj->polygon.points[j].y; + p[2] = obj->polygon.points[j].z; + Eigen::Vector3d ray = p - min_point; + if (line[0] * ray[1] - ray[0] * line[1] < 0) { + Eigen::Vector3d center; + double length = 0; + double width = 0; + Eigen::Vector3d dir; + double area = + ComputeAreaAlongOneEdge(obj, i, + ¢er, &length, &width, &dir); + if (area < min_area) { + obj->center = center; + obj->length = length; + obj->width = width; + obj->direction = dir; + min_area = area; + } + } else { + // outline + } + } else if ((i == min_point_index && j == max_point_index) + || (i == max_point_index && j == min_point_index)) { + if (!has_out) { + continue; + } + Eigen::Vector3d center; + double length = 0; + double width = 0; + Eigen::Vector3d dir; + double area = + ComputeAreaAlongOneEdge(obj, i, ¢er, &length, &width, &dir); + if (area < min_area) { + obj->center = center; + obj->length = length; + obj->width = width; + obj->direction = dir; + min_area = area; + } + } else if (j == min_point_index || j == max_point_index) { + Eigen::Vector3d p; + p[0] = obj->polygon.points[i].x; + p[1] = obj->polygon.points[i].y; + p[2] = obj->polygon.points[i].z; + Eigen::Vector3d ray = p - min_point; + if (line[0] * ray[1] - ray[0] * line[1] < 0) { + Eigen::Vector3d center; + double length = 0.0; + double width = 0.0; + Eigen::Vector3d dir; + double area = + ComputeAreaAlongOneEdge(obj, i, ¢er, + &length, &width, &dir); + if (area < min_area) { + obj->center = center; + obj->length = length; + obj->width = width; + obj->direction = dir; + min_area = area; + } + } else { + // outline + } + } + } + obj->direction.normalize(); +} + +void MinBoxObjectBuilder::ComputePolygon2dxy(ObjectPtr obj) { + Eigen::Vector4f min_pt; + Eigen::Vector4f max_pt; + pcl_util::PointCloudPtr cloud = obj->cloud; + SetDefaultValue(cloud, obj, &min_pt, &max_pt); + if (cloud->points.size() < 4u) { + return; + } + GetCloudMinMax3D(cloud, &min_pt, &max_pt); + obj->height = static_cast(max_pt[2]) - + static_cast(min_pt[2]); + const double min_eps = 10 * std::numeric_limits::epsilon(); + // double min_eps = 0.1; + // if ((max_pt[0] - min_pt[0]) < min_eps) { + // _cloud->points[0].x += min_eps; + // } + // if ((max_pt[1] - min_pt[1]) < min_eps) { + // _cloud->points[0].y += min_eps; + // } + const double diff_x = cloud->points[1].x - cloud->points[0].x; + const double diff_y = cloud->points[1].y - cloud->points[0].y; + size_t idx = 0; + for (idx = 2; idx < cloud->points.size(); ++idx) { + const double tdiff_x = cloud->points[idx].x - cloud->points[0].x; + const double tdiff_y = cloud->points[idx].y - cloud->points[0].y; + if ((diff_x * tdiff_y - tdiff_x * diff_y) > min_eps) { + break; + } + } + if (idx >= cloud->points.size()) { + cloud->points[0].x += min_eps; + cloud->points[0].y += min_eps; + cloud->points[1].x -= min_eps; + } + + PointCloudPtr pcd_xy(new PointCloud); + for (size_t i = 0; i < cloud->points.size(); ++i) { + Point p = cloud->points[i]; + p.z = min_pt[2]; + pcd_xy->push_back(p); + } + + ConvexHull2DXY hull; + hull.setInputCloud(pcd_xy); + hull.setDimension(2); + std::vector poly_vt; + PointCloudPtr plane_hull(new PointCloud); + hull.Reconstruct2dxy(plane_hull, &poly_vt); + + if (poly_vt.size() == 1u) { + std::vector ind(poly_vt[0].vertices.begin(), + poly_vt[0].vertices.end()); + TransformPointCloud(plane_hull, ind, &obj->polygon); + } else { + obj->polygon.points.resize(4); + obj->polygon.points[0].x = static_cast(min_pt[0]); + obj->polygon.points[0].y = static_cast(min_pt[1]); + obj->polygon.points[0].z = static_cast(min_pt[2]); + + obj->polygon.points[1].x = static_cast(min_pt[0]); + obj->polygon.points[1].y = static_cast(max_pt[1]); + obj->polygon.points[1].z = static_cast(min_pt[2]); + + obj->polygon.points[2].x = static_cast(max_pt[0]); + obj->polygon.points[2].y = static_cast(max_pt[1]); + obj->polygon.points[2].z = static_cast(min_pt[2]); + + obj->polygon.points[3].x = static_cast(max_pt[0]); + obj->polygon.points[3].y = static_cast(min_pt[1]); + obj->polygon.points[3].z = static_cast(min_pt[2]); + } +} + +void MinBoxObjectBuilder::ComputeGeometricFeature(const Eigen::Vector3d &ref_ct, + ObjectPtr obj) { + ComputePolygon2dxy(obj); + ReconstructPolygon(ref_ct, obj); +} + +void MinBoxObjectBuilder::BuildObject( + ObjectBuilderOptions options, + ObjectPtr object) { + ComputeGeometricFeature(options.ref_center, object); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/object_builder/min_box/min_box.h b/modules/perception/obstacle/lidar/object_builder/min_box/min_box.h new file mode 100644 index 00000000000..ddb40f0cde2 --- /dev/null +++ b/modules/perception/obstacle/lidar/object_builder/min_box/min_box.h @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_OBJECT_BUILDER_MIN_BOX_H +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_OBJECT_BUILDER_MIN_BOX_H + +#include +#include +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/lidar/interface/base_object_builder.h" + +namespace apollo { +namespace perception { + +class MinBoxObjectBuilder : public BaseObjectBuilder { + public: + MinBoxObjectBuilder() : BaseObjectBuilder() {} + virtual ~MinBoxObjectBuilder() {} + + bool Init() override { + // Do something. + return true; + } + + bool Build( + const ObjectBuilderOptions& options, + std::vector* objects) override; + + std::string name() const override { + return "MinBoxObjectBuilder"; + } + + protected: + void BuildObject( + ObjectBuilderOptions options, + ObjectPtr object); + + void ComputePolygon2dxy(ObjectPtr obj); + + double ComputeAreaAlongOneEdge( + ObjectPtr obj, + size_t first_in_point, + Eigen::Vector3d* center, + double* lenth, double* width, + Eigen::Vector3d* dir); + + void ReconstructPolygon( + const Eigen::Vector3d &ref_ct, + ObjectPtr obj); + + void ComputeGeometricFeature(const Eigen::Vector3d &ref_ct, ObjectPtr obj); + + private: + DISALLOW_COPY_AND_ASSIGN(MinBoxObjectBuilder); +}; + +// Register plugin. +REGISTER_OBJECTBUILDER(MinBoxObjectBuilder); + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_OBJECT_BUILDER_MIN_BOX_H diff --git a/modules/perception/obstacle/lidar/object_builder/min_box/min_box_test.cc b/modules/perception/obstacle/lidar/object_builder/min_box/min_box_test.cc new file mode 100644 index 00000000000..6eab488b6de --- /dev/null +++ b/modules/perception/obstacle/lidar/object_builder/min_box/min_box_test.cc @@ -0,0 +1,124 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/lidar/object_builder/min_box/min_box.h" + +#include + +#include "gtest/gtest.h" + +namespace apollo { +namespace perception { + +class MinBoxObjectBuilderTest : public testing::Test { + protected: + MinBoxObjectBuilderTest() {} + ~MinBoxObjectBuilderTest() {} + void SetUp() { min_box_object_builder_ = new MinBoxObjectBuilder(); } + void TearDown() { + delete min_box_object_builder_; + min_box_object_builder_ = nullptr; + } + + protected: + MinBoxObjectBuilder* min_box_object_builder_ = nullptr; +}; + +bool ConstructPointCloud(std::vector* objects) { + std::string pcd_data( + "modules/perception/data/min_box_object_builder_test/" + "QB9178_3_1461381834_1461382134_30651.pcd"); + std::ifstream cluster_ifs(pcd_data.c_str(), std::ifstream::in); + std::string point_buf; + while (cluster_ifs.good()) { + getline(cluster_ifs, point_buf); + std::stringstream ss; + ss << point_buf; + int point_num = 0; + ss >> point_num; + if (point_num <= 0) { + continue; + } + uint64_t intensity; + pcl_util::PointCloudPtr cluster_cloud(new pcl_util::PointCloud); + for (int i = 0; i < point_num; ++i) { + pcl_util::Point p; + ss >> p.x >> p.y >> p.z >> intensity; + p.intensity = static_cast(intensity); + cluster_cloud->points.push_back(p); + } + ObjectPtr object(new Object); + object->cloud = cluster_cloud; + objects->push_back(object); + } + return true; +} + +TEST_F(MinBoxObjectBuilderTest, build) { + std::vector objects; + ConstructPointCloud(&objects); + EXPECT_EQ(5, objects.size()); + ObjectBuilderOptions options; + EXPECT_TRUE(min_box_object_builder_->Build(options, &objects)); + const double EPSILON = 1e-6; + // obj 1 + EXPECT_EQ(3, objects[0]->cloud->points.size()); + EXPECT_NEAR(0.1499978, objects[0]->length, EPSILON); + EXPECT_NEAR(0.0560999, objects[0]->width, EPSILON); + EXPECT_NEAR(0.7320720, objects[0]->height, EPSILON); + EXPECT_NEAR(0.0, objects[0]->direction[0], EPSILON); + EXPECT_NEAR(1.0, objects[0]->direction[1], EPSILON); + EXPECT_NEAR(0.0, objects[0]->direction[2], EPSILON); + + // obj 2 + EXPECT_EQ(76, objects[1]->cloud->points.size()); + EXPECT_NEAR(3.740892, objects[1]->length, EPSILON); + EXPECT_NEAR(0.387848, objects[1]->width, EPSILON); + EXPECT_NEAR(1.855707, objects[1]->height, EPSILON); + EXPECT_NEAR(-0.9987907, objects[1]->direction[0], EPSILON); + EXPECT_NEAR(-0.0491651, objects[1]->direction[1], EPSILON); + EXPECT_NEAR(0.0, objects[1]->direction[2], EPSILON); + + // obj 3 + EXPECT_EQ(4, objects[2]->cloud->points.size()); + EXPECT_NEAR(0.693386, objects[2]->length, EPSILON); + EXPECT_NEAR(0.278326, objects[2]->width, EPSILON); + EXPECT_NEAR(0.0199099, objects[2]->height, EPSILON); + EXPECT_NEAR(0.743031, objects[2]->direction[0], EPSILON); + EXPECT_NEAR(-0.669257, objects[2]->direction[1], EPSILON); + EXPECT_NEAR(0.0, objects[2]->direction[2], EPSILON); + + // obj 4 + EXPECT_EQ(7, objects[3]->cloud->points.size()); + EXPECT_NEAR(0.688922, objects[3]->length, EPSILON); + EXPECT_NEAR(0.356031, objects[3]->width, EPSILON); + EXPECT_NEAR(0.311353, objects[3]->height, EPSILON); + EXPECT_NEAR(0.992437, objects[3]->direction[0], EPSILON); + EXPECT_NEAR(0.122754, objects[3]->direction[1], EPSILON); + EXPECT_NEAR(0.0, objects[3]->direction[2], EPSILON); + + // obj 5 + EXPECT_EQ(11, objects[4]->cloud->points.size()); + EXPECT_NEAR(1.147774, objects[4]->length, EPSILON); + EXPECT_NEAR(0.326984, objects[4]->width, EPSILON); + EXPECT_NEAR(0.977219, objects[4]->height, EPSILON); + EXPECT_NEAR(0.979983, objects[4]->direction[0], EPSILON); + EXPECT_NEAR(-0.199081, objects[4]->direction[1], EPSILON); + EXPECT_NEAR(0.0, objects[4]->direction[2], EPSILON); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/BUILD b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/BUILD new file mode 100644 index 00000000000..395cda4407b --- /dev/null +++ b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/BUILD @@ -0,0 +1,51 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "hdmap_roi_filter", + srcs = [ + "bitmap2d.cc", + "hdmap_roi_filter.cc", + "polygon_mask.cc", + "polygon_scan_converter.cc", + ], + hdrs = [ + "bitmap2d.h", + "hdmap_roi_filter.h", + "polygon_mask.h", + "polygon_scan_converter.h", + ], + deps = [ + "//external:gflags", + "//modules/common", + "//modules/perception/lib/config_manager", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/base:perception_obstacle_base", + "//modules/perception/obstacle/lidar/interface:perception_obstacle_lidar_interface", + "//modules/perception/obstacle/onboard:perception_obstacle_hdmapinput", + "@eigen//:eigen", + "@pcl//:pcl", + ], +) + +cc_test( + name = "hdmap_roi_filter_test", + size = "small", + srcs = [ + "hdmap_roi_filter_test.cc", + ], + data = [ + "//modules/perception:perception_data", + ], + deps = [ + "//external:gflags", + "//modules/common:log", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter", + "@gtest//:gtest", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/bitmap2d.cc b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/bitmap2d.cc new file mode 100644 index 00000000000..80ec1d9a57d --- /dev/null +++ b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/bitmap2d.cc @@ -0,0 +1,121 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#include "modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/bitmap2d.h" + +namespace apollo { +namespace perception { + +static const uint64_t all_ones = static_cast(-1); + +void Bitmap2D::Set(const double x, const double min_y, const double max_y) { + size_t x_id = static_cast( + (x - min_p_[dir_major_]) / grid_size_[dir_major_]); + + size_t min_y_id = static_cast( + (min_y - min_p_[op_dir_major_]) / grid_size_[op_dir_major_]); + + size_t max_y_id = static_cast( + (max_y - min_p_[op_dir_major_]) / grid_size_[op_dir_major_]); + + Set(x_id, min_y_id, max_y_id); +} + +void Bitmap2D::Set(const size_t& x_id, + const size_t& min_y_id, + const size_t& max_y_id) { + size_t left_block_id = min_y_id >> 6; // min_y_id / 64 + size_t left_bit_id = min_y_id & 63; // min_y_id % 64 + + size_t right_block_id = max_y_id >> 6; // max_y_id / 64 + size_t right_bit_id = max_y_id & 63; // max_y_id % 64 + + auto &blocks = bitmap_[x_id]; + if (left_block_id == right_block_id) { + SetUint64RangeBits(left_bit_id, right_bit_id, &blocks[left_block_id]); + } else { + SetUint64HeadBits(left_bit_id, &blocks[left_block_id]); + SetUint64TailBits(right_bit_id, &blocks[right_block_id]); + + for (size_t i = left_block_id + 1; i < right_block_id; ++i) { + blocks[i] = all_ones; + } + } +} + +inline void Bitmap2D::SetUint64RangeBits(const size_t& head, + const size_t& tail, + uint64_t* block) { + *block |= (all_ones >> head) & (~(all_ones >> tail)); +} + +inline void Bitmap2D::SetUint64HeadBits(const size_t& head, uint64_t* block) { + *block |= all_ones >> head; +} + +inline void Bitmap2D::SetUint64TailBits(const size_t& tail, uint64_t* block) { + *block |= (~(all_ones >> tail)); +} + +bool Bitmap2D::IsExist(const Eigen::Vector2d& p) const { + if (p.x() < min_p_.x() || p.x() >= max_p_.x()) { + return false; + } + if (p.y() < min_p_.y() || p.y() >= max_p_.y()) { + return false; + } + return true; +} + +bool Bitmap2D::Check(const Eigen::Vector2d& p) const { + Vec2ui grid_pt = ((p - min_p_).array() / grid_size_.array()).cast(); + + Vec2ui major_grid_pt(grid_pt[dir_major_], grid_pt[op_dir_major_]); + + size_t x_id = major_grid_pt.x(); + size_t block_id = major_grid_pt.y() >> 6; // major_grid_pt.y() / 64 + size_t bit_id = major_grid_pt.y() & 63; // major_grid_pt.y() % 64 + + const uint64_t &block = bitmap_[x_id][block_id]; + + const uint64_t first_one = static_cast (1) << 63; + return block & (first_one >> bit_id); +} + +Bitmap2D::Bitmap2D(const Eigen::Vector2d& min_p, + const Eigen::Vector2d& max_p, + const Eigen::Vector2d& grid_size, + DirectionMajor dir_major) { + dir_major_ = dir_major; + op_dir_major_ = opposite_direction(dir_major); + + min_p_ = min_p; + max_p_ = max_p; + grid_size_ = grid_size; +} + +void Bitmap2D::BuildMap() { + Vec2ui dims = + ((max_p_ - min_p_).array() / grid_size_.array()).cast(); + size_t rows = dims[dir_major_]; + size_t cols = (dims[op_dir_major_] >> 6) + 1; + + bitmap_ = + std::vector>(rows, + std::vector(cols, 0)); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/bitmap2d.h b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/bitmap2d.h new file mode 100644 index 00000000000..ade4955e955 --- /dev/null +++ b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/bitmap2d.h @@ -0,0 +1,103 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_ROI_FILTER_HDMAP_ROI_FILTER_BM_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_ROI_FILTER_HDMAP_ROI_FILTER_BM_H_ + +#include +#include +#include "Eigen/Core" + +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +/** + * @class Bitmap2D + * @brief This is Bitmap, which store the ROI information as grids. If the value + * of grid is true, means this grid is in ROI, otherwise means the grid is out + * of ROI. + * + * @Note: In column direction, each bit denotes one grid. To speed up range set + * operation, we use uint64_t to represent 64 grids, which can set 64 gird at + * one time. + */ +class Bitmap2D { + public: + enum DirectionMajor { XMAJOR = 0, YMAJOR = 1 }; + Bitmap2D(const Eigen::Vector2d& min_p, const Eigen::Vector2d& max_p, + const Eigen::Vector2d& grid_size, DirectionMajor dir_major); + + typedef Eigen::Matrix Vec2ui; + + static inline DirectionMajor opposite_direction(DirectionMajor dir_major) { + return static_cast(dir_major ^ 1); + } + + const Eigen::Vector2d& get_min_p() const { + return min_p_; + } + const Eigen::Vector2d& get_max_p() const { + return max_p_; + } + const Eigen::Vector2d& get_grid_size() const { + return grid_size_; + } + const DirectionMajor get_dir_major() const { + return dir_major_; + } + const DirectionMajor get_op_dir_major() const { + return op_dir_major_; + } + + /** + * @brief: Roughly check whether the point is in bitmap. + */ + bool IsExist(const Eigen::Vector2d& p) const; + + /** + * @brief: Cast point to a grid in bitmap, then check whether the value of + * gird is true(in ROI). + */ + bool Check(const Eigen::Vector2d& p) const; + + void Set(double x, double min_y, double max_y); + void Set(const uint64_t& x_id, + const uint64_t& min_y_id, + const uint64_t& max_y_id); + + void BuildMap(); + + private: + Eigen::Vector2d min_p_; + Eigen::Vector2d max_p_; + Eigen::Vector2d grid_size_; + DirectionMajor dir_major_; + DirectionMajor op_dir_major_; + + std::vector> bitmap_; + + inline void SetUint64RangeBits(const size_t& head, + const size_t& tail, + uint64_t* block); + inline void SetUint64HeadBits(const size_t& head, uint64_t* block); + inline void SetUint64TailBits(const size_t& tail, uint64_t* block); +}; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_ROI_FILTER_HDMAP_ROI_FILTER_BM_H_ diff --git a/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/hdmap_roi_filter.cc b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/hdmap_roi_filter.cc new file mode 100644 index 00000000000..7b092f0c7e5 --- /dev/null +++ b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/hdmap_roi_filter.cc @@ -0,0 +1,214 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#include "modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/hdmap_roi_filter.h" + +namespace apollo { +namespace perception { + +bool HdmapROIFilter::Filter(const pcl_util::PointCloudPtr& cloud, + const ROIFilterOptions &roi_filter_options, + pcl_util::PointIndices* roi_indices) { + if (roi_filter_options.hdmap == nullptr + || roi_filter_options.velodyne_trans == nullptr) { + return false; + } + + Eigen::Affine3d temp_trans(*(roi_filter_options.velodyne_trans)); + + std::vector polygons; + MergeHdmapStructToPolygons(roi_filter_options.hdmap, &polygons); + + if (polygons.size() == 0) { + return false; + } + + // 1. Transform polygon and point to local coordinates + pcl_util::PointCloudPtr cloud_local(new pcl_util::PointCloud); + std::vector polygons_local; + TransformFrame(cloud, temp_trans, polygons, &polygons_local, cloud_local); + + return FilterWithPolygonMask(cloud_local, polygons_local, roi_indices); +} + +bool HdmapROIFilter::FilterWithPolygonMask( + const pcl_util::PointCloudPtr &cloud, + const std::vector &map_polygons, + pcl_util::PointIndices* roi_indices) { + + // 2. Get Major Direction as X direction and convert map_polygons to raw + // polygons + std::vector raw_polygons(map_polygons.size()); + MajorDirection major_dir = GetMajorDirection(map_polygons, &raw_polygons); + + // 3. Convert polygons into roi grids in bitmap + Eigen::Vector2d min_p(-range_, -range_); + Eigen::Vector2d max_p(range_, range_); + Eigen::Vector2d grid_size(cell_size_, cell_size_); + Bitmap2D bitmap(min_p, max_p, grid_size, major_dir); + bitmap.BuildMap(); + + DrawPolygonInBitmap(raw_polygons, extend_dist_, &bitmap); + + // 4. Check each point whether is in roi grids in bitmap + return Bitmap2dFilter(cloud, bitmap, roi_indices); +} + +MajorDirection HdmapROIFilter::GetMajorDirection( + const std::vector& map_polygons, + std::vector* polygons) { + double min_x = range_, min_y = range_; + double max_x = -range_, max_y = -range_; + auto &raw_polygons = *polygons; + + // Get available x_range and y_range, then set the direction with small range + // as major direction. + for (size_t i = 0; i < map_polygons.size(); ++i) { + raw_polygons[i].resize(map_polygons[i].size()); + for (size_t j = 0; j < map_polygons[i].size(); ++j) { + double x = map_polygons[i][j].x, y = map_polygons[i][j].y; + raw_polygons[i][j].x() = x; + raw_polygons[i][j].y() = y; + + min_x = std::min(min_x, x); + max_x = std::max(max_x, x); + min_y = std::min(min_y, y); + max_y = std::max(max_y, y); + } + } + + min_x = std::max(min_x, -range_); + max_x = std::min(max_x, range_); + min_y = std::max(min_y, -range_); + max_y = std::min(max_y, range_); + + return (max_x - min_x) < (max_y - min_y) ? + MajorDirection::XMAJOR : MajorDirection::YMAJOR; +} + +bool HdmapROIFilter::Bitmap2dFilter( + const pcl::PointCloud::ConstPtr in_cloud_ptr, + const Bitmap2D &bitmap, + pcl_util::PointIndices* roi_indices_ptr) { + + roi_indices_ptr->indices.reserve(in_cloud_ptr->size()); + for (size_t i = 0; i < in_cloud_ptr->size(); ++i) { + const auto &pt = in_cloud_ptr->points[i]; + Eigen::Vector2d p(pt.x, pt.y); + if (bitmap.IsExist(p) && bitmap.Check(p)) { + roi_indices_ptr->indices.push_back(i); + } + } + return true; +} + +void HdmapROIFilter::MergeRoadBoundariesToPolygons( + const std::vector& road_boundaries, + std::vector* polygons) { + + polygons->resize(road_boundaries.size()); + for (size_t i = 0; i < road_boundaries.size(); ++i) { + // Assume the points of left boundary are [L1, L2, L3, ..., Ln], + // points of right boundary are [R1, R2, R3, ..., Rn]. The polygon should be + // like [L1, L2, L3, ..., Ln, Rn, ..., R3, R2, R1]. + const PolygonDType& left_boundary = road_boundaries[i].left_boundary; + const PolygonDType& right_boundary = road_boundaries[i].right_boundary; + + auto& polygon = (*polygons)[i]; + polygon.reserve(left_boundary.size() + right_boundary.size()); + polygon.insert(polygon.end(), left_boundary.begin(), left_boundary.end()); + + CHECK_GT(right_boundary.size(), 0); + for (int j = static_cast(right_boundary.size()) - 1; j >= 0; --j) { + polygon.push_back(right_boundary[j]); + } + } +} + +void HdmapROIFilter::MergeHdmapStructToPolygons( + const HdmapStructConstPtr& hdmap_struct_ptr, + std::vector* polygons) { + + std::vector road_polygons; + MergeRoadBoundariesToPolygons(hdmap_struct_ptr->road_boundary, + &road_polygons); + + const std::vector& junction_polygons = + hdmap_struct_ptr->junction; + + polygons->reserve(road_polygons.size() + junction_polygons.size()); + polygons->insert(polygons->end(), road_polygons.begin(), + road_polygons.end()); + polygons->insert(polygons->end(), junction_polygons.begin(), + junction_polygons.end()); +} + +bool HdmapROIFilter::Init() { + // load model config + std::string model_name = name(); + const ModelConfig* model_config = nullptr; + if (!ConfigManager::instance()->GetModelConfig(model_name, &model_config)) { + AERROR << "Failed to get model: " << model_name; + return false; + } else { + if (!model_config->GetValue("range", &range_)) { + AERROR << "Can not find range in model: " << model_name; + return false; + } + if (!model_config->GetValue("cell_size", &cell_size_)) { + AERROR << "Can not find cell_size in model: " << model_name; + return false; + } + if (!model_config->GetValue("extend_dist", &extend_dist_)) { + AERROR << "Can not find extend_dist_ in model: " << model_name; + return false; + } + } + return true; +} + +void HdmapROIFilter::TransformFrame( + const pcl_util::PointCloudConstPtr &cloud, + const Eigen::Affine3d &vel_pose, + const std::vector &polygons_world, + std::vector* polygons_local, + pcl_util::PointCloudPtr cloud_local) { + cloud_local->header = cloud->header; + Eigen::Vector3d vel_location = vel_pose.translation(); + Eigen::Matrix3d vel_rot = vel_pose.linear(); + Eigen::Vector3d x_axis = vel_rot.row(0); + Eigen::Vector3d y_axis = vel_rot.row(1); + + polygons_local->resize(polygons_world.size()); + for (size_t i = 0; i < polygons_local->size(); ++i) { + const auto& polygon_world = polygons_world[i]; + auto& polygon_local = polygons_local->at(i); + polygon_local.resize(polygon_world.size()); + for (size_t j = 0; j < polygon_local.size(); ++j) { + polygon_local[j].x = polygon_world[j].x - vel_location.x(); + polygon_local[j].y = polygon_world[j].y - vel_location.y(); + } + } + + cloud_local->resize(cloud->size()); + for (size_t i = 0; i < cloud_local->size(); ++i) { + const auto& pt = cloud->points[i]; + auto& local_pt = cloud_local->points[i]; + Eigen::Vector3d e_pt(pt.x, pt.y, pt.z); + local_pt.x = x_axis.dot(e_pt); + local_pt.y = y_axis.dot(e_pt); + } +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/hdmap_roi_filter.h b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/hdmap_roi_filter.h new file mode 100644 index 00000000000..d571c909e0b --- /dev/null +++ b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/hdmap_roi_filter.h @@ -0,0 +1,135 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_HDMAP_ROI_FILTER_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_HDMAP_ROI_FILTER_H_ + +#include +#include +#include + +#include "Eigen/Core" +#include "gflags/gflags.h" + +#include "modules/common/log.h" +#include "modules/perception/obstacle/lidar/interface/base_roi_filter.h" +#include "modules/perception/common/perception_gflags.h" +#include "modules/perception/lib/config_manager/config_manager.h" +#include "modules/perception/obstacle/base/hdmap_struct.h" +#include "modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/bitmap2d.h" +#include "modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_mask.h" +#include "modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_scan_converter.h" +#include "modules/perception/obstacle/onboard/hdmap_input.h" + +namespace apollo { +namespace perception { + +typedef typename Bitmap2D::DirectionMajor MajorDirection; + +/** + * @class HdmapROIFilter + * @brief This is ROI(Region of Interest) Filter based on HD map, which can + * figure out which point is in the regions what we focus on(Almost in the + * road). + * This is an optional process, the most advantage of ROI filter is to filter + * out some points to reduce calculation in the following process. + */ +class HdmapROIFilter : public BaseROIFilter { + public: + HdmapROIFilter() : BaseROIFilter() {} + ~HdmapROIFilter() {} + + bool Init() override; + std::string name() const { + return "HdmapROIFilter"; + } + + /** + * @params[In] cloud: All the cloud points with local coordinates + * @params[In] roi_filter_options: Type definition in + * "../../interface/base_roi_filter.h". Contains the information + * of ROI and world to local coordinates transformation matrix. + * @params[Out] roi_indices: The indices of points within ROI + * @return true if filter points successfully, otherwise return false + */ + bool Filter(const pcl_util::PointCloudPtr& cloud, + const ROIFilterOptions& roi_filter_options, + pcl_util::PointIndices* roi_indices) override; + + protected: + /** + * @brief: Draw polygons into grids in bitmap and check each point whether + * is in the grids within ROI. + */ + bool FilterWithPolygonMask(const pcl_util::PointCloudPtr& cloud, + const std::vector& map_polygons, + pcl_util::PointIndices* roi_indices); + + /** + * @brief: Transform polygon points and cloud points from world coordinates + * system to local. + */ + void TransformFrame(const pcl_util::PointCloudConstPtr& cloud, + const Eigen::Affine3d& vel_pose, + const std::vector& polygons_world, + std::vector* polygons_local, + pcl_util::PointCloudPtr cloud_local); + + /** + * @brief: Get major direction. Transform polygons type to what we want. + */ + MajorDirection GetMajorDirection( + const std::vector& map_polygons, + std::vector* polygons); + + /** + * @brief: Merge left boundary and right boundary of each road into polygon + * type. + */ + void MergeRoadBoundariesToPolygons( + const std::vector& road_boundaries, + std::vector* polygons); + + /** + * @brief: Merge junction polygons and road boundaries in a vector. + */ + void MergeHdmapStructToPolygons(const HdmapStructConstPtr& hdmap_struct_ptr, + std::vector* polygons); + + /** + * @brief: After drawing polygons into grids in bitmap. We check each point + * whether is in the grids within ROI. + */ + bool Bitmap2dFilter( + const pcl::PointCloud::ConstPtr in_cloud_ptr, + const Bitmap2D& bitmap, pcl_util::PointIndices* roi_indices_ptr); + + // We only filter point with local coordinates x, y in [-range, range] in + // meters + double range_; + + // Hight and width of grid in bitmap + double cell_size_; + + // The distance extended away from the ROI boundary + double extend_dist_; +}; + +REGISTER_ROIFILTER(HdmapROIFilter); + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_INTERFACE_HDMAP_ROI_FILTER_H_ diff --git a/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/hdmap_roi_filter_test.cc b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/hdmap_roi_filter_test.cc new file mode 100644 index 00000000000..c2e86c37b94 --- /dev/null +++ b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/hdmap_roi_filter_test.cc @@ -0,0 +1,141 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/hdmap_roi_filter.h" + +#include +#include +#include +#include + +#include "gflags/gflags.h" +#include "gtest/gtest.h" +#include "pcl/io/pcd_io.h" + +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +const char polygon_file_name[] = + "/apollo/modules/perception/data/hdmap_roi_filter_test/poly_mask_ut.poly"; +const char pcd_file_name[] = + "/apollo/modules/perception/data/hdmap_roi_filter_test/poly_mask_ut.pcd"; + +bool LoadPolygonFile(const std::string& absolute_file_name, + std::vector* polygons_ptr) { + std::ifstream polygon_data(absolute_file_name, std::ifstream::in); + if (!polygon_data) { + AERROR << "Can not open file: " << absolute_file_name; + return false; + } + + size_t polygons_num = 0; + polygon_data >> polygons_num; + + auto& polygons = *polygons_ptr; + polygons = std::vector(polygons_num); + + for (auto& polygon : polygons) { + size_t points_num = 0; + polygon_data >> points_num; + + polygon.resize(points_num); + for (auto& vertex : polygon.points) { + double x = 0, y = 0, z = 0; + polygon_data >> x >> y >> z; + vertex.x = x; + vertex.y = y; + } + } + return true; +} + +class HdmapROIFilterTest : public testing::Test, HdmapROIFilter { + public: + HdmapROIFilterTest() : _pts_cloud_ptr(new pcl_util::PointCloud) {} + + protected: + void SetUp() { + LoadPolygonFile(polygon_file_name, &_polygons); + pcl::io::loadPCDFile(pcd_file_name, *_pts_cloud_ptr); + } + + void TearDown() {} + + protected: + void init(); + void filter(); + + std::unique_ptr _hdmap_roi_filter_ptr; + std::vector _polygons; + pcl_util::PointCloudPtr _pts_cloud_ptr; +}; + +void HdmapROIFilterTest::init() { + FLAGS_work_root = "/apollo/modules/perception/data"; + FLAGS_config_manager_path = "config_manager_test/config_manager.config"; + ASSERT_TRUE(Init()); +} + +void HdmapROIFilterTest::filter() { + pcl_util::PointIndices indices; + + ASSERT_TRUE(FilterWithPolygonMask(_pts_cloud_ptr, _polygons, &indices)); + + size_t points_num = _pts_cloud_ptr->size(); + std::vector is_in_roi(points_num, false); + + for (const auto& id : indices.indices) { + ASSERT_GE(id, 0); + ASSERT_LT(id, points_num); + is_in_roi[id] = true; + } + + size_t true_positive = 0, false_positive = 0; + size_t true_negitive = 0, false_negitive = 0; + + for (size_t i = 0; i < points_num; ++i) { + const auto& pt = _pts_cloud_ptr->points[i]; + + if (pt.z > 0) { + EXPECT_TRUE(is_in_roi[i]); + if (is_in_roi[i]) + ++true_positive; + else + ++false_negitive; + } else { + EXPECT_FALSE(is_in_roi[i]); + if (is_in_roi[i]) + ++false_positive; + else + ++true_negitive; + } + } + + ADEBUG << "True positive: " << true_positive + << ", False positive: " << false_positive + << ", True negitive: " << true_negitive + << ", False negative: " << false_negitive; +} + +TEST_F(HdmapROIFilterTest, test_filter) { + init(); + filter(); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_mask.cc b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_mask.cc new file mode 100644 index 00000000000..b9e0fd6c987 --- /dev/null +++ b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_mask.cc @@ -0,0 +1,112 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#include "modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_mask.h" + +namespace apollo { +namespace perception { + +void GetValidXRange(const typename PolygonScanConverter::Polygon& polygon, + const Bitmap2D& bitmap, + const PolygonScanConverter::DirectionMajor major_dir, + const double major_dir_grid_size, + Interval* valid_x_range) { + Eigen::Vector2d polygon_min_pt, polygon_max_pt; + polygon_min_pt.setConstant(std::numeric_limits::max()); + polygon_max_pt.setConstant(std::numeric_limits::min()); + + for (const auto &point : polygon) { + polygon_min_pt.x() = std::min(polygon_min_pt.x(), point.x()); + polygon_min_pt.y() = std::min(polygon_min_pt.y(), point.y()); + + polygon_max_pt.x() = std::max(polygon_max_pt.x(), point.x()); + polygon_max_pt.y() = std::max(polygon_max_pt.y(), point.y()); + } + + const Eigen::Vector2d& bitmap_min_pt = bitmap.get_min_p(); + const Eigen::Vector2d& bitmap_max_pt = bitmap.get_max_p(); + + valid_x_range->first = std::max(polygon_min_pt[major_dir], + bitmap_min_pt[major_dir]); + valid_x_range->second = std::min(polygon_max_pt[major_dir], + bitmap_max_pt[major_dir]); + + // For numerical stability + valid_x_range->first = ( + static_cast((valid_x_range->first - bitmap_min_pt[major_dir]) + / major_dir_grid_size) + 0.5) + * major_dir_grid_size + bitmap_min_pt[major_dir]; +} + +void DrawPolygonInBitmap(const typename PolygonScanConverter::Polygon& polygon, + const double extend_dist, + Bitmap2D* bitmap) { + PolygonScanConverter::DirectionMajor major_dir = + bitmap->get_dir_major(); + PolygonScanConverter::DirectionMajor op_major_dir = + bitmap->get_op_dir_major(); + double major_dir_grid_size = bitmap->get_grid_size()[major_dir]; + + // 1. Get valid x range + Interval valid_x_range; + GetValidXRange(polygon, *bitmap, major_dir, + major_dir_grid_size, &valid_x_range); + + // 2. Convert polygon to scan intervals(Most important) + std::vector> scans_intervals; + + PolygonScanConverter polygon_scan_converter; + polygon_scan_converter.Init(major_dir, valid_x_range, + polygon, major_dir_grid_size); + polygon_scan_converter.ConvertScans(&scans_intervals); + + // 3. Draw grids in bitmap based on scan intervals + const Eigen::Vector2d& bitmap_min_pt = bitmap->get_min_p(); + const Eigen::Vector2d& bitmap_max_pt = bitmap->get_max_p(); + double x = valid_x_range.first; + for (size_t i = 0; i < scans_intervals.size(); + x += major_dir_grid_size, ++i) { + for (const auto &scan_interval : scans_intervals[i]) { + if (scan_interval.first > scan_interval.second) { + AERROR << "scan interval is not valid: " + << "scan_interval.first = " << scan_interval.first << ", " + << "scan_interval.second = " << scan_interval.second << "."; + } + Interval valid_y_range; + valid_y_range.first = std::max(bitmap_min_pt[op_major_dir], + scan_interval.first - extend_dist); + + valid_y_range.second = std::min(bitmap_max_pt[op_major_dir], + scan_interval.second + extend_dist); + + if (valid_y_range.first > valid_y_range.second) { + continue; + } + bitmap->Set(x, valid_y_range.first, valid_y_range.second); + } + } +} + +void DrawPolygonInBitmap( + const std::vector& polygons, + const double extend_dist, + Bitmap2D* bitmap) { + for (const auto &polygon : polygons) { + DrawPolygonInBitmap(polygon, extend_dist, bitmap); + } +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_mask.h b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_mask.h new file mode 100644 index 00000000000..d17e28b093a --- /dev/null +++ b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_mask.h @@ -0,0 +1,52 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_ROI_FILTER_HDMAP_ROI_FILTER_PM_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_ROI_FILTER_HDMAP_ROI_FILTER_PM_H_ + +#include +#include +#include + +#include "Eigen/StdVector" + +#include "modules/common/log.h" +#include "modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/bitmap2d.h" +#include "modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_scan_converter.h" + +namespace apollo { +namespace perception { + +typedef typename PolygonScanConverter::Interval Interval; + +void DrawPolygonInBitmap(const PolygonScanConverter::Polygon& polygon, + const double extend_dist, Bitmap2D* bitmap); + +void DrawPolygonInBitmap( + const std::vector& polygons, + const double extend_dist, Bitmap2D* bitmap); + +/* + * @brief: Get valid x range(Major direction range) + */ +void GetValidXRange(const PolygonScanConverter::Polygon& polygon, + const Bitmap2D& bitmap, + const PolygonScanConverter::DirectionMajor major_dir, + const double major_dir_grid_size, Interval* valid_x_range); + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_ROI_FILTER_HDMAP_ROI_FILTER_PM_H_ diff --git a/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_scan_converter.cc b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_scan_converter.cc new file mode 100644 index 00000000000..85e4681025b --- /dev/null +++ b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_scan_converter.cc @@ -0,0 +1,227 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#include "modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_scan_converter.h" + +namespace apollo { +namespace perception { + +const double PolygonScanConverter::kEpsilon = + std::numeric_limits::epsilon(); +const double PolygonScanConverter::kInf = + std::numeric_limits::infinity(); + +void PolygonScanConverter::Init(const DirectionMajor major_dir, + const Interval& valid_x_range, + const Polygon& polygon, + const double step) { + major_dir_ = major_dir; + op_major_dir_ = OppositeDirection(major_dir); + + polygon_ = polygon; + min_x_ = valid_x_range.first; + scans_size_ = (valid_x_range.second - valid_x_range.first) / step; + step_ = step; +} + +void PolygonScanConverter::ConvertScans( + std::vector>* scans_intervals) { + scans_intervals->resize(scans_size_); + + DisturbPolygon(); + ConvertPolygonToSegments(); + BuildEdgeTable(); + + for (const auto &edge : edge_table_[0]) { + if (std::isfinite(edge.k)) { + active_edge_table_.push_back(edge); + } else { + (*scans_intervals)[0].push_back(Interval(edge.y, edge.max_y)); + } + } + + std::sort(active_edge_table_.begin(), active_edge_table_.end()); + for (size_t i = 0; i < active_edge_table_.size(); i += 2) { + double min_y = active_edge_table_[i].y; + double max_y = active_edge_table_[i+1].y; + (*scans_intervals)[0].push_back(Interval(min_y, max_y)); + } + + + for (size_t i = 1; i < scans_size_; ++i) { + UpdateActiveEdgeTable(i, &(scans_intervals->at(i)) ); + } +} + +void PolygonScanConverter::UpdateActiveEdgeTable( + const size_t x_id, + std::vector* scan_intervals) { + size_t valid_edges_num = active_edge_table_.size(); + size_t invalid_edges_num = 0; + + // For each edege in active edge table, check whether it is still valid. + for (auto &edge : active_edge_table_) { + if (!edge.MoveUp(step_)) { + --valid_edges_num; + ++invalid_edges_num; + edge.y = kInf; + } + } + + size_t new_edges_num = 0; + for (const auto &edge : edge_table_[x_id]) { + if (std::isfinite(edge.k)) { + ++valid_edges_num; + ++new_edges_num; + active_edge_table_.push_back(edge); + } else { + scan_intervals->emplace_back(edge.y, edge.max_y); + } + } + + if (invalid_edges_num != 0 || new_edges_num != 0) { + std::sort(active_edge_table_.begin(), active_edge_table_.end(), + [](const Edge &a, const Edge &b) {return a.y < b.y;}); + active_edge_table_.erase(next(active_edge_table_.begin(), valid_edges_num), + active_edge_table_.end()); + } + + for (size_t i = 0; i + 1 < active_edge_table_.size(); i += 2) { + double min_y = active_edge_table_[i].y; + double max_y = active_edge_table_[i+1].y; + + scan_intervals->emplace_back(min_y, max_y); + } +} + +void PolygonScanConverter::BuildEdgeTable() { + edge_table_.resize(scans_size_); + + std::vector> edges; + edges.reserve(segments_.size()); + for (size_t i = 0; i < segments_.size(); ++i) { + std::pair out_edge; + if (ConvertSegmentToEdge(i, &out_edge)) { + edges.push_back(out_edge); + } + } + + active_edge_table_.reserve(edges.size()); + + for (size_t i = 0; i < edges.size(); ++i) { + int x_id = edges[i].first; + const Edge &edge = edges[i].second; + + if (x_id >=static_cast(scans_size_)) { + continue; + } + + if (x_id >= 0) { + edge_table_[x_id].push_back(edge); + } else { + Edge active_edge = edge; + if (active_edge.MoveUp(0.0 - active_edge.x)) { + active_edge_table_.push_back(active_edge); + } + } + } +} + +bool PolygonScanConverter::ConvertSegmentToEdge( + const size_t seg_id, std::pair* out_edge) { + const Segment &segment = segments_[seg_id]; + + double min_x = segment.first[major_dir_] - min_x_; + double min_y = segment.first[op_major_dir_]; + + int x_id = std::ceil(min_x / step_); + out_edge->first = x_id; + + Edge &edge = out_edge->second; + edge.x = x_id * step_; + edge.max_x = segment.second[major_dir_] - min_x_; + edge.max_y = segment.second[op_major_dir_]; + edge.k = slope_[seg_id]; + + if (std::isfinite(edge.k)) { + edge.y = min_y + (edge.x - min_x) * edge.k; + } else { + edge.y = min_y; + if (edge.y > edge.max_y) { + std::swap(edge.y, edge.max_y); + } + } + + if (std::isfinite(edge.k) && edge.max_x < edge.x) { + return false; + } + return true; +} + +void PolygonScanConverter::ConvertPolygonToSegments() { + size_t vertices_num = polygon_.size(); + + segments_.reserve(vertices_num); + slope_.reserve(vertices_num); + + for (size_t i = 0; i < vertices_num; ++i) { + const Point &cur_vertex = polygon_[i]; + const Point &next_vertex = polygon_[(i + 1) % vertices_num]; + if (cur_vertex[major_dir_] < next_vertex[major_dir_]) { + segments_.emplace_back(cur_vertex, next_vertex); + } else { + segments_.emplace_back(next_vertex, cur_vertex); + } + + double x_diff = next_vertex[major_dir_] - cur_vertex[major_dir_]; + double y_diff = next_vertex[op_major_dir_] - cur_vertex[op_major_dir_]; + std::abs(cur_vertex[major_dir_] - next_vertex[major_dir_]) < kEpsilon ? + slope_.push_back(kInf) : slope_.push_back(y_diff / x_diff); + } +} + +void PolygonScanConverter::DisturbPolygon() { + for (auto& pt : polygon_) { + // For current point, find the x coordinate of nearest scan line. + // If they are too close, disturb the point in case of the point locating on + // the line. + double& x = pt[major_dir_]; + double d_x = (x - min_x_) / step_; + int int_d_x = std::round(d_x); + double delta_x = d_x - int_d_x; + if (std::abs(delta_x) < kEpsilon) { + if (delta_x > 0) { + x = (int_d_x + kEpsilon) * step_ + min_x_; + } else { + x = (int_d_x - kEpsilon) * step_ + min_x_; + } + } + } +} + +bool PolygonScanConverter::Edge::MoveUp(const double delta_x) { + if (delta_x < 0 || !std::isfinite(k)) { + return false; + } + x += delta_x; + if (x > max_x) { + return false; + } + y += (delta_x * k); + return true; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_scan_converter.h b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_scan_converter.h new file mode 100644 index 00000000000..fc6c916af09 --- /dev/null +++ b/modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/polygon_scan_converter.h @@ -0,0 +1,105 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_ROI_FILTER_HDMAP_ROI_FILTER_PSC_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_ROI_FILTER_HDMAP_ROI_FILTER_PSC_H_ + +#include +#include +#include +#include +#include "Eigen/Core" +#include "Eigen/StdVector" +#include "gflags/gflags.h" + +#include "modules/common/log.h" +#include "modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/bitmap2d.h" + +namespace apollo { +namespace perception { + +/** + * @class PolygonScanConverter + * @brief: This is a converter from polygon to scan lines, by which we can build + * bitmap. Assume major direction as x direction, we scan polygons in x ascending + * order. + */ +class PolygonScanConverter { + public: + typedef Eigen::Matrix Point; + typedef std::vector> Polygon; + typedef std::pair Interval; + typedef std::pair Segment; + struct Edge { + bool operator<(const Edge& other) const { return y < other.y; } + bool MoveUp(const double delta_x); + + double max_x; + double max_y; + + double x; + double y; + double k; + }; + + typedef Bitmap2D::DirectionMajor DirectionMajor; + + void Init(const DirectionMajor major_dir, const Interval& valid_range, + const Polygon& polygon, const double step); + + static inline DirectionMajor OppositeDirection(DirectionMajor dir_major) { + return static_cast(dir_major ^ 1); + } + + void ConvertScans(std::vector>* scans_intervals); + + private: + static const double kEpsilon; + static const double kInf; + Polygon polygon_; + std::vector segments_; + + std::vector slope_; + + std::vector> edge_table_; + + std::vector active_edge_table_; + + double min_x_; + double step_; + size_t scans_size_; + DirectionMajor major_dir_; + DirectionMajor op_major_dir_; + + /** + * @brief: If some point of polygon happens to be around the scan line, + * lightly modify the x coordinate to avoid situation of singular point. + */ + void DisturbPolygon(); + + void BuildEdgeTable(); + + void UpdateActiveEdgeTable(const size_t x_id, + std::vector* scan_intervals); + + void ConvertPolygonToSegments(); + + bool ConvertSegmentToEdge(const size_t seg_id, + std::pair* out_edge); +}; + +} // namespace perception +} // namespace apollo +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_ROI_FILTER_HDMAP_ROI_FILTER_PSC_H_ diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/BUILD b/modules/perception/obstacle/lidar/segmentation/cnnseg/BUILD new file mode 100644 index 00000000000..53b78c097c0 --- /dev/null +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/BUILD @@ -0,0 +1,80 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "perception_obstacle_lidar_segmention_cnnseg", + srcs = ["cnn_segmentation.cc"], + hdrs = ["cnn_segmentation.h"], + deps = [ + "//modules/common:log", + "//modules/common/util", + "//modules/perception/lib/base", + "//modules/perception/lib/config_manager", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/base:perception_obstacle_base", + "//modules/perception/obstacle/lidar/interface:perception_obstacle_lidar_interface", + "//modules/perception/obstacle/lidar/segmentation/cnnseg:cnnseg_cluster2d", + "//modules/perception/obstacle/lidar/segmentation/cnnseg:cnnseg_feature_generator", + "//modules/perception/obstacle/lidar/segmentation/cnnseg:cnnseg_util", + "//modules/perception/obstacle/lidar/segmentation/cnnseg/proto:cnnseg_proto", + "@caffe//:lib", + ], +) + +cc_library( + name = "cnnseg_util", + hdrs = ["util.h"], +) + +cc_library( + name = "cnnseg_feature_generator", + srcs = ["feature_generator.cc"], + hdrs = ["feature_generator.h"], + deps = [ + "//modules/common:log", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/lidar/segmentation/cnnseg:cnnseg_util", + "//modules/perception/obstacle/lidar/segmentation/cnnseg/proto:cnnseg_proto", + "@caffe//:lib", + "@eigen//:eigen", + ], +) + +cc_library( + name = "cnnseg_cluster2d", + hdrs = ["cluster2d.h"], + deps = [ + "//modules/common:log", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/base:perception_obstacle_base", + "//modules/perception/obstacle/common:perception_obstacle_common", + "//modules/perception/obstacle/lidar/segmentation/cnnseg:cnnseg_util", + "@caffe//:lib", + ], +) + +cc_test( + name = "cnn_segmentation_test", + size = "small", + srcs = [ + "cnn_segmentation_test.cc", + ], + data = [ + "//modules/perception:perception_data", + "//modules/perception:perception_model", + "//modules/perception/conf:perception_config", + ], + deps = [ + "perception_obstacle_lidar_segmention_cnnseg", + "//modules/common:log", + "//modules/perception/common:perception_common", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/base:perception_obstacle_base", + "@gtest//:main", + "@opencv2//:core", + "@pcl//:pcl", + ], +) + +cpplint() diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/cluster2d.h b/modules/perception/obstacle/lidar/segmentation/cnnseg/cluster2d.h new file mode 100644 index 00000000000..d144fd99448 --- /dev/null +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/cluster2d.h @@ -0,0 +1,318 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_CLUSTER2D_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_CLUSTER2D_H_ + +#include +#include +#include "caffe/caffe.hpp" +#include "modules/common/log.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/common/disjoint_set.h" +#include "modules/perception/obstacle/lidar/segmentation/cnnseg/util.h" + +namespace apollo { +namespace perception { +namespace cnnseg { + +struct Obstacle { + std::vector grids; + apollo::perception::pcl_util::PointCloudPtr cloud; + float score; + float height; + + Obstacle() { + grids.clear(); + cloud.reset(new apollo::perception::pcl_util::PointCloud); + score = 0.0; + height = -5.0; + } +}; + +class Cluster2D { + public: + Cluster2D() {} + ~Cluster2D() {} + + bool Init(int rows, int cols, float range) { + rows_ = rows; + cols_ = cols; + grids_ = rows_ * cols_; + range_ = range; + scale_ = 0.5 * static_cast(rows_) / range_; + inv_res_x_ = 0.5 * static_cast(cols_) / range_; + inv_res_y_ = 0.5 * static_cast(rows_) / range_; + point2grid_.clear(); + obstacles_.clear(); + id_img_.assign(grids_, -1); + pc_ptr_.reset(); + valid_indices_in_pc_ = nullptr; + return true; + } + + void Cluster(const caffe::Blob& category_pt_blob, + const caffe::Blob& instance_pt_blob, + const apollo::perception::pcl_util::PointCloudPtr& pc_ptr, + const apollo::perception::pcl_util::PointIndices& valid_indices, + float objectness_thresh, + bool use_all_grids_for_clustering) { + const float* category_pt_data = category_pt_blob.cpu_data(); + const float* instance_pt_x_data = instance_pt_blob.cpu_data(); + const float* instance_pt_y_data = + instance_pt_blob.cpu_data() + instance_pt_blob.offset(0, 1); + + pc_ptr_ = pc_ptr; + std::vector> nodes(rows_, + std::vector(cols_, Node())); + + // map points into grids + size_t tot_point_num = pc_ptr_->size(); + valid_indices_in_pc_ = &(valid_indices.indices); + CHECK_LE(valid_indices_in_pc_->size(), tot_point_num); + point2grid_.assign(valid_indices_in_pc_->size(), -1); + + for (size_t i = 0; i < valid_indices_in_pc_->size(); ++i) { + int point_id = valid_indices_in_pc_->at(i); + CHECK_GE(point_id, 0); + CHECK_LT(point_id, static_cast(tot_point_num)); + const auto& point = pc_ptr_->points[point_id]; + // * the coordinates of x and y have been exchanged in feature generation + // step, + // so we swap them back here. + int pos_x = F2I(point.y, range_, inv_res_x_); // col + int pos_y = F2I(point.x, range_, inv_res_y_); // row + if (IsValidRowCol(pos_y, pos_x)) { + // get grid index and count point number for corresponding node + point2grid_[i] = RowCol2Grid(pos_y, pos_x); + nodes[pos_y][pos_x].point_num++; + } + } + + // construct graph with center offset prediction and objectness + for (int row = 0; row < rows_; row++) { + for (int col = 0; col < cols_; col++) { + int grid = RowCol2Grid(row, col); + Node* node = &nodes[row][col]; + apollo::perception::DisjointSetMakeSet(node); + node->is_object = + (use_all_grids_for_clustering || nodes[row][col].point_num > 0) && + (*(category_pt_data + grid) >= objectness_thresh); + int center_row = std::round(row + instance_pt_x_data[grid] * scale_); + int center_col = std::round(col + instance_pt_y_data[grid] * scale_); + center_row = std::min(std::max(center_row, 0), rows_ - 1); + center_col = std::min(std::max(center_col, 0), cols_ - 1); + node->center_node = &nodes[center_row][center_col]; + } + } + + // traverse nodes + for (int row = 0; row < rows_; row++) { + for (int col = 0; col < cols_; col++) { + Node* node = &nodes[row][col]; + if (node->is_object && node->traversed == 0) { + Traverse(node); + } + } + } + for (int row = 0; row < rows_; row++) { + for (int col = 0; col < cols_; col++) { + Node* node = &nodes[row][col]; + if (!node->is_center) { + continue; + } + for (int row2 = row - 1; row2 <= row + 1; row2++) { + for (int col2 = col - 1; col2 <= col + 1; col2++) { + if ((row2 == row || col2 == col) && IsValidRowCol(row2, col2)) { + Node* node2 = &nodes[row2][col2]; + if (node2->is_center) { + apollo::perception::DisjointSetUnion(node, node2); + } + } + } + } + } + } + + int count_obstacles = 0; + obstacles_.clear(); + id_img_.assign(grids_, -1); + for (int row = 0; row < rows_; row++) { + for (int col = 0; col < cols_; col++) { + Node* node = &nodes[row][col]; + if (!node->is_object) { + continue; + } + Node* root = apollo::perception::DisjointSetFind(node); + if (root->obstacle_id < 0) { + root->obstacle_id = count_obstacles++; + CHECK_EQ(static_cast(obstacles_.size()), count_obstacles - 1); + obstacles_.push_back(Obstacle()); + } + int grid = RowCol2Grid(row, col); + CHECK_GE(root->obstacle_id, 0); + id_img_[grid] = root->obstacle_id; + obstacles_[root->obstacle_id].grids.push_back(grid); + } + } + CHECK_EQ(static_cast(count_obstacles), obstacles_.size()); + } + + void Filter(const caffe::Blob& confidence_pt_blob, + const caffe::Blob& height_pt_blob) { + const float* confidence_pt_data = confidence_pt_blob.cpu_data(); + const float* height_pt_data = height_pt_blob.cpu_data(); + for (size_t obstacle_id = 0; obstacle_id < obstacles_.size(); + obstacle_id++) { + Obstacle* obs = &obstacles_[obstacle_id]; + CHECK_GT(obs->grids.size(), 0); + double score = 0.0; + double height = 0.0; + for (int grid : obs->grids) { + score += static_cast(confidence_pt_data[grid]); + height += static_cast(height_pt_data[grid]); + } + obs->score = score / static_cast(obs->grids.size()); + obs->height = height / static_cast(obs->grids.size()); + obs->cloud.reset(new apollo::perception::pcl_util::PointCloud); + } + } + + void GetObjects(const float confidence_thresh, + const float height_thresh, + const int min_pts_num, + std::vector* objects) { + CHECK(valid_indices_in_pc_ != nullptr); + + for (size_t i = 0; i < point2grid_.size(); ++i) { + int grid = point2grid_[i]; + if (grid < 0) { + continue; + } + + CHECK_GE(grid, 0); + CHECK_LT(grid, grids_); + int obstacle_id = id_img_[grid]; + + int point_id = valid_indices_in_pc_->at(i); + CHECK_GE(point_id, 0); + CHECK_LT(point_id, static_cast(pc_ptr_->size())); + + if (obstacle_id >= 0 && + obstacles_[obstacle_id].score >= confidence_thresh) { + if (height_thresh < 0 || + pc_ptr_->points[point_id].z <= + obstacles_[obstacle_id].height + height_thresh) { + obstacles_[obstacle_id].cloud->push_back(pc_ptr_->points[point_id]); + } + } + } + + for (size_t obstacle_id = 0; obstacle_id < obstacles_.size(); + obstacle_id++) { + Obstacle* obs = &obstacles_[obstacle_id]; + if (static_cast(obs->cloud->size()) < min_pts_num) { + continue; + } + apollo::perception::ObjectPtr out_obj(new apollo::perception::Object); + out_obj->cloud = obs->cloud; + out_obj->score = obs->score; + objects->push_back(out_obj); + } + } + + private: + struct Node { + Node* center_node; + Node* parent; + char node_rank; + char traversed; + bool is_center; + bool is_object; + int point_num; + int obstacle_id; + + Node() { + center_node = nullptr; + parent = nullptr; + node_rank = 0; + traversed = 0; + is_center = false; + is_object = false; + point_num = 0; + obstacle_id = -1; + } + }; + + inline bool IsValidRowCol(int row, int col) const { + return IsValidRow(row) && IsValidCol(col); + } + + inline bool IsValidRow(int row) const { + return row >= 0 && row < rows_; + } + + inline bool IsValidCol(int col) const { + return col >= 0 && col < cols_; + } + + inline int RowCol2Grid(int row, int col) const { + return row * cols_ + col; + } + + void Traverse(Node* x) { + std::vector p; + p.clear(); + while (x->traversed == 0) { + p.push_back(x); + x->traversed = 2; + x = x->center_node; + } + if (x->traversed == 2) { + for (int i = static_cast(p.size()) - 1; i >= 0 && p[i] != x; i--) { + p[i]->is_center = true; + } + x->is_center = true; + } + for (size_t i = 0; i < p.size(); i++) { + Node* y = p[i]; + y->traversed = 1; + y->parent = x->parent; + } + } + + int rows_; + int cols_; + int grids_; + float range_; + float scale_; + float inv_res_x_; + float inv_res_y_; + + apollo::perception::pcl_util::PointCloudPtr pc_ptr_; + const std::vector* valid_indices_in_pc_ = nullptr; + + std::vector point2grid_; + std::vector id_img_; + std::vector obstacles_; +}; + +} // namespace cnnseg +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_CLUSTER2D_H_ diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.cc b/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.cc new file mode 100644 index 00000000000..08af1c00206 --- /dev/null +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.cc @@ -0,0 +1,230 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.h" + +#include "modules/common/util/file.h" +#include "modules/perception/lib/base/file_util.h" +#include "modules/perception/lib/config_manager/config_manager.h" + +using std::string; +using std::vector; + +namespace apollo { +namespace perception { + +bool CNNSegmentation::Init() { + string config_file; + string proto_file; + string weight_file; + if (!GetConfigs(&config_file, &proto_file, &weight_file)) { + return false; + } + AINFO << "-- config_file: " << config_file; + AINFO << "-- proto_file: " << proto_file; + AINFO << "-- weight_file: " << weight_file; + + if (!apollo::common::util::GetProtoFromFile(config_file, &cnnseg_param_)) { + AERROR << "Failed to load config file of CNNSegmentation."; + } + + /// set parameters + auto network_param = cnnseg_param_.network_param(); + auto feature_param = cnnseg_param_.feature_param(); + + if (feature_param.has_point_cloud_range()) { + range_ = static_cast(feature_param.point_cloud_range()); + } else { + range_ = 60.0; + } + if (feature_param.has_width()) { + width_ = static_cast(feature_param.width()); + } else { + width_ = 512; + } + if (feature_param.has_height()) { + height_ = static_cast(feature_param.height()); + } else { + height_ = 512; + } + +/// Instantiate Caffe net +#ifndef USE_CAFFE_GPU + caffe::Caffe::set_mode(caffe::Caffe::CPU); +#else + int gpu_id = + cnnseg_param_.has_gpu_id() ? static_cast(cnnseg_param_.gpu_id()) : 0; + CHECK_GE(gpu_id, 0); + caffe::Caffe::SetDevice(gpu_id); + caffe::Caffe::set_mode(caffe::Caffe::GPU); + caffe::Caffe::DeviceQuery(); +#endif + + caffe_net_.reset(new caffe::Net(proto_file, caffe::TEST)); + caffe_net_->CopyTrainedLayersFrom(weight_file); + +#ifndef USE_CAFFE_GPU + AINFO << "using Caffe CPU mode"; +#else + AINFO << "using Caffe GPU mode"; +#endif + + /// set related Caffe blobs + // center offset prediction + string instance_pt_blob_name = network_param.has_instance_pt_blob() + ? network_param.instance_pt_blob() + : "instance_pt"; + instance_pt_blob_ = caffe_net_->blob_by_name(instance_pt_blob_name); + CHECK(instance_pt_blob_ != nullptr) << "`" << instance_pt_blob_name + << "` not exists!"; + // objectness prediction + string category_pt_blob_name = network_param.has_category_pt_blob() + ? network_param.category_pt_blob() + : "category_score"; + category_pt_blob_ = caffe_net_->blob_by_name(category_pt_blob_name); + CHECK(category_pt_blob_ != nullptr) << "`" << category_pt_blob_name + << "` not exists!"; + // positiveness (foreground object probability) prediction + string confidence_pt_blob_name = network_param.has_confidence_pt_blob() + ? network_param.confidence_pt_blob() + : "confidence_score"; + confidence_pt_blob_ = caffe_net_->blob_by_name(confidence_pt_blob_name); + CHECK(confidence_pt_blob_ != nullptr) << "`" << confidence_pt_blob_name + << "` not exists!"; + // object height prediction + string height_pt_blob_name = network_param.has_height_pt_blob() + ? network_param.height_pt_blob() + : "height_pt"; + height_pt_blob_ = caffe_net_->blob_by_name(height_pt_blob_name); + CHECK(height_pt_blob_ != nullptr) << "`" << height_pt_blob_name + << "` not exists!"; + // raw feature data + string feature_blob_name = + network_param.has_feature_blob() ? network_param.feature_blob() : "data"; + feature_blob_ = caffe_net_->blob_by_name(feature_blob_name); + CHECK(feature_blob_ != nullptr) << "`" << feature_blob_name + << "` not exists!"; + + cluster2d_.reset(new cnnseg::Cluster2D()); + if (!cluster2d_->Init(height_, width_, range_)) { + AERROR << "Fail to init cluster2d for CNNSegmentation"; + } + + feature_generator_.reset(new cnnseg::FeatureGenerator()); + if (!feature_generator_->Init(feature_param, feature_blob_.get())) { + AERROR << "Fail to init feature generator for CNNSegmentation"; + return false; + } + + return true; +} + +bool CNNSegmentation::Segment(const pcl_util::PointCloudPtr& pc_ptr, + const pcl_util::PointIndices& valid_indices, + const SegmentationOptions& options, + vector* objects) { + objects->clear(); + int num_pts = static_cast(pc_ptr->points.size()); + if (num_pts == 0) { + AINFO << "None of input points, return directly."; + return true; + } + + use_full_cloud_ = + (cnnseg_param_.has_use_full_cloud() ? cnnseg_param_.use_full_cloud() + : false) && + (options.origin_cloud != nullptr); + PERF_BLOCK_START(); + + // generate raw features + if (use_full_cloud_) { + feature_generator_->Generate(options.origin_cloud); + } else { + feature_generator_->Generate(pc_ptr); + } + PERF_BLOCK_END("[CNNSeg] feature generation"); + +// network forward process +#ifdef USE_CAFFE_GPU + caffe::Caffe::set_mode(caffe::Caffe::GPU); +#endif + caffe_net_->Forward(); + PERF_BLOCK_END("[CNNSeg] CNN forward"); + + // clutser points and construct segments/objects + float objectness_thresh = cnnseg_param_.has_objectness_thresh() + ? cnnseg_param_.objectness_thresh() + : 0.5; + bool use_all_grids_for_clustering = + cnnseg_param_.has_use_all_grids_for_clustering() + ? cnnseg_param_.use_all_grids_for_clustering() + : false; + cluster2d_->Cluster(*category_pt_blob_, *instance_pt_blob_, pc_ptr, + valid_indices, objectness_thresh, + use_all_grids_for_clustering); + PERF_BLOCK_END("[CNNSeg] clustering"); + + cluster2d_->Filter(*confidence_pt_blob_, *height_pt_blob_); + + float confidence_thresh = cnnseg_param_.has_confidence_thresh() + ? cnnseg_param_.confidence_thresh() + : 0.1; + float height_thresh = + cnnseg_param_.has_height_thresh() ? cnnseg_param_.height_thresh() : 0.5; + int min_pts_num = cnnseg_param_.has_min_pts_num() + ? static_cast(cnnseg_param_.min_pts_num()) + : 3; + cluster2d_->GetObjects(confidence_thresh, height_thresh, min_pts_num, + objects); + PERF_BLOCK_END("[CNNSeg] post-processing"); + + return true; +} + +bool CNNSegmentation::GetConfigs(string* config_file, string* proto_file, + string* weight_file) { + ConfigManager* config_manager = ConfigManager::instance(); + + const ModelConfig* model_config = nullptr; + if (!config_manager->GetModelConfig("CNNSegmentation", &model_config)) { + AERROR << "Failed to get model config for CNNSegmentation"; + return false; + } + const string& work_root = config_manager->work_root(); + + if (!model_config->GetValue("config_file", config_file)) { + AERROR << "Failed to get value of config_file."; + return false; + } + config_file->assign(FileUtil::GetAbsolutePath(work_root, *config_file)); + + if (!model_config->GetValue("proto_file", proto_file)) { + AERROR << "Failed to get value of proto_file."; + return false; + } + proto_file->assign(FileUtil::GetAbsolutePath(work_root, *proto_file)); + + if (!model_config->GetValue("weight_file", weight_file)) { + AERROR << "Failed to get value of weight_file."; + return false; + } + weight_file->assign(FileUtil::GetAbsolutePath(work_root, *weight_file)); + + return true; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.h b/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.h new file mode 100644 index 00000000000..b06d71cd4f4 --- /dev/null +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.h @@ -0,0 +1,103 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_CNN_SEGMENTATION_H_ // NOLINT +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_CNN_SEGMENTATION_H_ // NOLINT + +#include +#include +#include + +#include "caffe/caffe.hpp" + +#include "modules/perception/obstacle/lidar/segmentation/cnnseg/proto/cnnseg.pb.h" + +#include "modules/common/log.h" +#include "modules/perception/lib/base/timer.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/lidar/interface/base_segmentation.h" +#include "modules/perception/obstacle/lidar/segmentation/cnnseg/cluster2d.h" +#include "modules/perception/obstacle/lidar/segmentation/cnnseg/feature_generator.h" + +namespace apollo { +namespace perception { + +class CNNSegmentation : public BaseSegmentation { + public: + CNNSegmentation() : BaseSegmentation() {} + ~CNNSegmentation() {} + + bool Init() override; + + bool Segment(const pcl_util::PointCloudPtr& pc_ptr, + const pcl_util::PointIndices& valid_indices, + const SegmentationOptions& options, + std::vector* objects) override; + + std::string name() const override { return "CNNSegmentation"; } + + float range() const { return range_; } + int width() const { return width_; } + int height() const { return height_; } + + private: + bool GetConfigs(std::string* config_file, std::string* proto_file, + std::string* weight_file); + // range of bird-view field (for each side) + float range_ = 0.0; + // number of cells in bird-view width + int width_ = 0; + // number of cells in bird-view height + int height_ = 0; + + // paramters of CNNSegmentation + apollo::perception::cnnseg::CNNSegParam cnnseg_param_; + // Caffe network object + std::shared_ptr> caffe_net_; + + // bird-view raw feature generator + std::shared_ptr> feature_generator_; + + // center offset prediction + boost::shared_ptr> instance_pt_blob_; + // objectness prediction + boost::shared_ptr> category_pt_blob_; + // fg probability prediction + boost::shared_ptr> confidence_pt_blob_; + // object height prediction + boost::shared_ptr> height_pt_blob_; + // raw features to be input into network + boost::shared_ptr> feature_blob_; + + // use all points of cloud to compute features + bool use_full_cloud_ = false; + + // clustering model for post-processing + std::shared_ptr cluster2d_; + + // timer + Timer timer_; + + DISALLOW_COPY_AND_ASSIGN(CNNSegmentation); +}; + +REGISTER_SEGMENTATION(CNNSegmentation); + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_CNN_SEGMENTATION_H_ // NOLINT diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation_test.cc b/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation_test.cc new file mode 100644 index 00000000000..017d55e9b20 --- /dev/null +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation_test.cc @@ -0,0 +1,250 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.h" + +#include +#include +#include +#include +#include + +#include "gtest/gtest.h" +#include "opencv2/opencv.hpp" +#include "pcl/io/pcd_io.h" +#include "pcl/point_cloud.h" +#include "pcl/point_types.h" + +#include "modules/common/log.h" +#include "modules/perception/common/perception_gflags.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" + +#define VISUALIZE + +using apollo::perception::CNNSegmentation; +using std::vector; +using std::string; +using std::unordered_set; +using std::shared_ptr; +using apollo::perception::pcl_util::PointCloudPtr; +using apollo::perception::pcl_util::PointCloud; +using apollo::perception::pcl_util::PointIndices; +using apollo::perception::pcl_util::PointXYZIT; +using apollo::perception::ObjectPtr; + +namespace apollo { +namespace perception { +namespace test { + +DEFINE_string(test_dir, "/apollo/modules/perception/data/cnnseg_test/", + "test data directory"); +DEFINE_string(pcd_name, "uscar_12_1470770225_1470770492_1349", + "poind cloud data name"); + +struct CellStat { + CellStat() : point_num(0), valid_point_num(0) {} + int point_num; + int valid_point_num; +}; + +int F2I(float val, float ori, float scale) { + return static_cast(std::floor((ori - val) * scale)); +} + +class CNNSegmentationTest : public testing::Test { + protected: + CNNSegmentationTest() {} + ~CNNSegmentationTest() {} + void SetUp() { + google::InitGoogleLogging("CNNSegmentationTest"); + cnn_segmentor_.reset(new CNNSegmentation()); + } + void TearDown() {} + + protected: + shared_ptr cnn_segmentor_; +}; + +bool IsValidRowCol(int row, int rows, int col, int cols) { + return row >= 0 && row < rows && col >= 0 && col < cols; +} + +int RowCol2Grid(int row, int col, int cols) { return row * cols + col; } + +bool GetPointCloudFromFile(const string &pcd_file, PointCloudPtr cloud) { + pcl::PointCloud ori_cloud; + if (pcl::io::loadPCDFile(pcd_file, ori_cloud) < 0) { + AERROR << "Failed to load pcd file: " << pcd_file; + return false; + } + + cloud->points.reserve(ori_cloud.points.size()); + for (size_t i = 0; i < ori_cloud.points.size(); ++i) { + apollo::perception::pcl_util::Point point; + point.x = ori_cloud.points[i].x; + point.y = ori_cloud.points[i].y; + point.z = ori_cloud.points[i].z; + point.intensity = ori_cloud.points[i].intensity; + if (isnan(ori_cloud.points[i].x)) { + continue; + } + cloud->push_back(point); + } + + return true; +} + +void DrawDetection(const PointCloudPtr &pc_ptr, const PointIndices &valid_idx, + int rows, int cols, float range, + const vector &objects, + const string &result_file) { + // create a new image for visualization + cv::Mat img(rows, cols, CV_8UC3, cv::Scalar(0.0)); + + // map points into bird-view grids + float inv_res_x = 0.5 * static_cast(cols) / range; + float inv_res_y = 0.5 * static_cast(rows) / range; + int grids = rows * cols; + vector view(grids); + + const std::vector *valid_indices_in_pc = &(valid_idx.indices); + CHECK_LE(valid_indices_in_pc->size(), pc_ptr->size()); + unordered_set unique_indices; + for (size_t i = 0; i < valid_indices_in_pc->size(); ++i) { + int point_id = valid_indices_in_pc->at(i); + CHECK(unique_indices.find(point_id) == unique_indices.end()); + unique_indices.insert(point_id); + } + + for (size_t i = 0; i < pc_ptr->size(); ++i) { + const auto &point = pc_ptr->points[i]; + // * the coordinates of x and y have been exchanged in feature generation + // step, + // so they should be swapped back here. + int col = F2I(point.y, range, inv_res_x); // col + int row = F2I(point.x, range, inv_res_y); // row + if (IsValidRowCol(row, rows, col, cols)) { + // get grid index and count point number for corresponding node + int grid = RowCol2Grid(row, col, cols); + view[grid].point_num++; + if (unique_indices.find(i) != unique_indices.end()) { + view[grid].valid_point_num++; + } + } + } + + // show grids with grey color + for (int row = 0; row < rows; ++row) { + for (int col = 0; col < cols; ++col) { + int grid = RowCol2Grid(row, col, cols); + if (view[grid].valid_point_num > 0) { + img.at(row, col) = cv::Vec3b(127, 127, 127); + } else if (view[grid].point_num > 0) { + img.at(row, col) = cv::Vec3b(63, 63, 63); + } + } + } + + // show segment grids with tight bounding box + const cv::Vec3b segm_color(0, 0, 255); // red + const cv::Vec3b bbox_color(0, 255, 255); // yellow + + for (size_t i = 0; i < objects.size(); ++i) { + const ObjectPtr &obj = objects[i]; + CHECK_GT(obj->cloud->size(), 0); + + int x_min = INT_MAX; + int y_min = INT_MAX; + int x_max = INT_MIN; + int y_max = INT_MIN; + float score = obj->score; + CHECK_GE(score, 0.0); + CHECK_LE(score, 1.0); + for (size_t j = 0; j < obj->cloud->size(); ++j) { + const auto &point = obj->cloud->points[j]; + int col = F2I(point.y, range, inv_res_x); // col + int row = F2I(point.x, range, inv_res_y); // row + CHECK(IsValidRowCol(row, rows, col, cols)); + img.at(row, col) = segm_color * score; + x_min = std::min(col, x_min); + y_min = std::min(row, y_min); + x_max = std::max(col, x_max); + y_max = std::max(row, y_max); + } + + // fillConvexPoly(img, list.data(), list.size(), cv::Scalar(positive_prob * + // segm_color)); + rectangle(img, cv::Point(x_min, y_min), cv::Point(x_max, y_max), + cv::Scalar(bbox_color)); + } + + // write image intensity values into file + FILE *f_res; + f_res = fopen(result_file.c_str(), "w"); + fprintf(f_res, "%d %d\n", rows, cols); + for (int row = 0; row < rows; ++row) { + for (int col = 0; col < cols; ++col) { + fprintf(f_res, "%u %u %u\n", img.at(row, col)[0], + img.at(row, col)[1], img.at(row, col)[2]); + } + } + fclose(f_res); +} + +TEST_F(CNNSegmentationTest, test_cnnseg_det) { + FLAGS_work_root = "modules/perception"; + FLAGS_config_manager_path = "./conf/config_manager.config"; + + // generate input point cloud data + const string in_pcd_file = FLAGS_test_dir + FLAGS_pcd_name + ".pcd"; + AINFO << "pcd file: " << in_pcd_file; + PointCloudPtr in_pc; + in_pc.reset(new PointCloud()); + EXPECT_TRUE(GetPointCloudFromFile(in_pcd_file, in_pc)); + + PointIndices valid_idx; + auto &indices = valid_idx.indices; + indices.resize(in_pc->size()); + std::iota(indices.begin(), indices.end(), 0); + + SegmentationOptions options; + options.origin_cloud = in_pc; + + std::vector out_objects; + + // testing initialization function + EXPECT_TRUE(cnn_segmentor_->Init()); + + // testing segment function + for (int i = 0; i < 10; ++i) { + EXPECT_TRUE( + cnn_segmentor_->Segment(in_pc, valid_idx, options, &out_objects)); + EXPECT_EQ(out_objects.size(), 15); + } + +#ifdef VISUALIZE + // do visualization of segmentation results (output object detections) + string result_file(FLAGS_test_dir); + result_file = result_file + FLAGS_pcd_name + "-detection.txt"; + DrawDetection(in_pc, valid_idx, cnn_segmentor_->height(), + cnn_segmentor_->width(), cnn_segmentor_->range(), out_objects, + result_file); +#endif +} + +} // namespace test +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/feature_generator.cc b/modules/perception/obstacle/lidar/segmentation/cnnseg/feature_generator.cc new file mode 100644 index 00000000000..9cead7b6593 --- /dev/null +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/feature_generator.cc @@ -0,0 +1,173 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/lidar/segmentation/cnnseg/feature_generator.h" + +#include "modules/perception/obstacle/lidar/segmentation/cnnseg/util.h" + +using std::vector; + +namespace apollo { +namespace perception { +namespace cnnseg { + +#define CV_PI 3.1415926535897932384626433832795 +#define EPS 1e-6 + +template +bool FeatureGenerator::Init(const FeatureParam& feature_param, + caffe::Blob* out_blob) { + out_blob_ = out_blob; + + // raw feature parameters + range_ = feature_param.has_point_cloud_range() + ? static_cast(feature_param.point_cloud_range()) + : 60; + width_ = + feature_param.has_width() ? static_cast(feature_param.width()) : 512; + height_ = feature_param.has_height() + ? static_cast(feature_param.height()) + : 512; + min_height_ = + feature_param.has_min_height() ? feature_param.min_height() : -5.0; + max_height_ = + feature_param.has_max_height() ? feature_param.max_height() : 5.0; + CHECK_EQ(width_, height_) + << "Current implementation version requires input_width == input_height."; + + // set output blob and log lookup table + out_blob_->Reshape(1, 8, height_, width_); + + log_table_.resize(256); + for (size_t i = 0; i < log_table_.size(); ++i) { + log_table_[i] = std::log(static_cast(1 + i)); + } + + Dtype* out_blob_data = nullptr; + out_blob_data = out_blob_->mutable_cpu_data(); + + int channel_index = 0; + max_height_data_ = out_blob_data + out_blob_->offset(0, channel_index++); + mean_height_data_ = out_blob_data + out_blob_->offset(0, channel_index++); + count_data_ = out_blob_data + out_blob_->offset(0, channel_index++); + direction_data_ = out_blob_data + out_blob_->offset(0, channel_index++); + top_intensity_data_ = out_blob_data + out_blob_->offset(0, channel_index++); + mean_intensity_data_ = out_blob_data + out_blob_->offset(0, channel_index++); + distance_data_ = out_blob_data + out_blob_->offset(0, channel_index++); + nonempty_data_ = out_blob_data + out_blob_->offset(0, channel_index++); + CHECK_EQ(out_blob_->offset(0, channel_index), out_blob_->count()); + + // compute direction and distance features + int siz = height_ * width_; + vector direction_data(siz); + vector distance_data(siz); + + for (int row = 0; row < height_; ++row) { + for (int col = 0; col < width_; ++col) { + int idx = row * width_ + col; + // * row <-> x, column <-> y + float center_x = Pixel2Pc(row, height_, range_); + float center_y = Pixel2Pc(col, width_, range_); + direction_data[idx] = + static_cast(std::atan2(center_y, center_x) / (2.0 * CV_PI)); + distance_data[idx] = + static_cast(std::hypot(center_x, center_y) / 60.0 - 0.5); + } + } + caffe::caffe_copy(siz, direction_data.data(), direction_data_); + caffe::caffe_copy(siz, distance_data.data(), distance_data_); + + return true; +} + +template +void FeatureGenerator::Generate( + const apollo::perception::pcl_util::PointCloudConstPtr& pc_ptr) { + const auto& points = pc_ptr->points; + + // DO NOT remove this line!!! + // Otherwise, the gpu_data will not be updated for the later frames. + // It marks the head at cpu for blob. + out_blob_->mutable_cpu_data(); + + int siz = height_ * width_; + caffe::caffe_set(siz, Dtype(-5), max_height_data_); + caffe::caffe_set(siz, Dtype(0), mean_height_data_); + caffe::caffe_set(siz, Dtype(0), count_data_); + caffe::caffe_set(siz, Dtype(0), top_intensity_data_); + caffe::caffe_set(siz, Dtype(0), mean_intensity_data_); + caffe::caffe_set(siz, Dtype(0), nonempty_data_); + + map_idx_.resize(points.size()); + float inv_res_x = + 0.5 * static_cast(width_) / static_cast(range_); + float inv_res_y = + 0.5 * static_cast(height_) / static_cast(range_); + + for (size_t i = 0; i < points.size(); ++i) { + if (points[i].z <= min_height_ || points[i].z >= max_height_) { + map_idx_[i] = -1; + continue; + } + // * the coordinates of x and y are exchanged here + // (row <-> x, column <-> y) + int pos_x = F2I(points[i].y, range_, inv_res_x); // col + int pos_y = F2I(points[i].x, range_, inv_res_y); // row + if (pos_x >= width_ || pos_x < 0 || pos_y >= height_ || pos_y < 0) { + map_idx_[i] = -1; + continue; + } + map_idx_[i] = pos_y * width_ + pos_x; + + int idx = map_idx_[i]; + float pz = points[i].z; + float pi = points[i].intensity / 255.0; + if (max_height_data_[idx] < pz) { + max_height_data_[idx] = pz; + top_intensity_data_[idx] = pi; + } + mean_height_data_[idx] += static_cast(pz); + mean_intensity_data_[idx] += static_cast(pi); + count_data_[idx] += Dtype(1); + } + + for (int i = 0; i < siz; ++i) { + if (count_data_[i] < EPS) { + max_height_data_[i] = Dtype(0); + } else { + mean_height_data_[i] /= count_data_[i]; + mean_intensity_data_[i] /= count_data_[i]; + nonempty_data_[i] = Dtype(1); + } + count_data_[i] = LogCount(static_cast(count_data_[i])); + } +} + +template bool FeatureGenerator::Init(const FeatureParam& feature_param, + caffe::Blob* blob); + +template void FeatureGenerator::Generate( + const apollo::perception::pcl_util::PointCloudConstPtr& pc_ptr); + +template bool FeatureGenerator::Init(const FeatureParam& feature_param, + caffe::Blob* blob); + +template void FeatureGenerator::Generate( + const apollo::perception::pcl_util::PointCloudConstPtr& pc_ptr); + +} // namespace cnnseg +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/feature_generator.h b/modules/perception/obstacle/lidar/segmentation/cnnseg/feature_generator.h new file mode 100644 index 00000000000..88771f9a7ca --- /dev/null +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/feature_generator.h @@ -0,0 +1,86 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_FEATURE_GENERATOR_H_ // NOLINT +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_FEATURE_GENERATOR_H_ // NOLINT + +#include +#include +#include +#include "caffe/caffe.hpp" +#include "modules/common/log.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/lidar/segmentation/cnnseg/proto/cnnseg.pb.h" + +namespace apollo { +namespace perception { +namespace cnnseg { + +template +class FeatureGenerator { + public: + FeatureGenerator() {} + + ~FeatureGenerator() {} + + bool Init(const FeatureParam& feature_param, caffe::Blob* out_blob); + + void Generate(const apollo::perception::pcl_util::PointCloudConstPtr& pc_ptr); + + inline std::string name() const { return "FeatureGenerator"; } + + private: + Dtype LogCount(int count) { + if (count < static_cast(log_table_.size())) { + return log_table_[count]; + } + return std::log(static_cast(1 + count)); + } + + std::vector log_table_; + + int width_ = 0; + int height_ = 0; + int range_ = 0; + + float min_height_ = 0.0; + float max_height_ = 0.0; + + // raw feature data + Dtype* max_height_data_ = nullptr; + Dtype* mean_height_data_ = nullptr; + Dtype* count_data_ = nullptr; + Dtype* direction_data_ = nullptr; + Dtype* top_intensity_data_ = nullptr; + Dtype* mean_intensity_data_ = nullptr; + Dtype* distance_data_ = nullptr; + Dtype* nonempty_data_ = nullptr; + + // point index in feature map + std::vector map_idx_; + + // output Caffe blob + caffe::Blob* out_blob_ = nullptr; +}; + +typedef FeatureGenerator FP32FeatureGenerator; +typedef FeatureGenerator FP64FeatureGenerator; + +} // namespace cnnseg +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_FEATURE_GENERATOR_H_ // NOLINT diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/proto/BUILD b/modules/perception/obstacle/lidar/segmentation/cnnseg/proto/BUILD new file mode 100644 index 00000000000..3f6367f35e3 --- /dev/null +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/proto/BUILD @@ -0,0 +1,15 @@ +package(default_visibility = ["//visibility:public"]) + +cc_proto_library( + name = "cnnseg_proto", + deps = [ + ":cnnseg_proto_lib", + ], +) + +proto_library( + name = "cnnseg_proto_lib", + srcs = [ + "cnnseg.proto", + ], +) diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/proto/cnnseg.proto b/modules/perception/obstacle/lidar/segmentation/cnnseg/proto/cnnseg.proto new file mode 100644 index 00000000000..549e457dd7d --- /dev/null +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/proto/cnnseg.proto @@ -0,0 +1,35 @@ +syntax = "proto2"; + +package apollo.perception.cnnseg; + +message CNNSegParam { + required NetworkParam network_param = 1; + required FeatureParam feature_param = 2; + + optional float objectness_thresh = 11 [default = 0.5]; + optional bool use_all_grids_for_clustering = 12 [default = false]; + optional float confidence_thresh = 13 [default = 0.1]; + optional float height_thresh = 14 [default = 0.5]; + optional uint32 min_pts_num = 15 [default = 3]; + + optional bool use_full_cloud = 31 [default = false]; + + optional uint32 gpu_id = 41 [default = 0]; +} + +message NetworkParam { + optional string instance_pt_blob = 1 [default = "instance_pt"]; + optional string category_pt_blob = 2 [default = "category_score"]; + optional string confidence_pt_blob = 3 [default = "confidence_score"]; + optional string height_pt_blob = 4 [default = "height_pt"]; + optional string feature_blob = 5 [default = "data"]; +} + +message FeatureParam { + optional uint32 point_cloud_range = 26 [default = 60]; + optional uint32 width = 27 [default = 512]; + optional uint32 height = 28 [default = 512]; + + optional float min_height = 31 [default = -5.0]; + optional float max_height = 32 [default = 5.0]; +} \ No newline at end of file diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/util.h b/modules/perception/obstacle/lidar/segmentation/cnnseg/util.h new file mode 100644 index 00000000000..0601927bec3 --- /dev/null +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/util.h @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_UTIL_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_UTIL_H_ + +#include + +namespace apollo { +namespace perception { +namespace cnnseg { + +inline int F2I(float val, float ori, float scale) { + return static_cast(std::floor((ori - val) * scale)); +} + +inline int Pc2Pixel(float in_pc, float in_range, float out_size) { + float inv_res = 0.5 * out_size / in_range; + return static_cast(std::floor((in_range - in_pc) * inv_res)); +} + +inline float Pixel2Pc(int in_pixel, float in_size, float out_range) { + float res = 2.0 * out_range / in_size; + return out_range - (static_cast(in_pixel) + 0.5f) * res; +} + +} // namespace cnnseg +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_UTIL_H_ diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/write_img.cc b/modules/perception/obstacle/lidar/segmentation/cnnseg/write_img.cc new file mode 100644 index 00000000000..aeeba86f4f9 --- /dev/null +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/write_img.cc @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include +#include +#include +#include "gflags/gflags.h" + +DEFINE_string(test_dir, "/apollo/modules/perception/data/cnnseg_test/", + "test data directory"); +DEFINE_string(pcd_name, "uscar_12_1470770225_1470770492_1349", + "poind cloud data name"); + +int main(int argc, char** argv) { + google::ParseCommandLineFlags(&argc, &argv, true); + + std::string test_dir(FLAGS_test_dir); + std::string det_res_file = test_dir + FLAGS_pcd_name + "-detection.txt"; + std::ifstream f_res(det_res_file.c_str(), std::ifstream::in); + + std::string line; + + std::getline(f_res, line); + int rows, cols; + std::istringstream iss(line); + iss >> rows >> cols; + std::cout << "#rows = " << rows << ", #cols = " << cols << endl; + + cv::Mat img(rows, cols, CV_8UC3, cv::Scalar(0.0)); + int grid = 0; + while (std::getline(f_res, line)) { + std::istringstream iss(line); + int blue, green, red; + iss >> blue >> green >> red; + img.at(grid / cols, grid % cols) = cv::Vec3b(blue, green, red); + ++grid; + } + if (grid != rows * cols) { + return -2; + } + f_res.close(); + + std::string res_img_file = test_dir + FLAGS_pcd_name + "-detection.png"; + if (!cv::imwrite(res_img_file, img)) { + return -1; + } + + google::ShutDownCommandLineFlags(); + return 0; +} + diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/write_img.sh b/modules/perception/obstacle/lidar/segmentation/cnnseg/write_img.sh new file mode 100644 index 00000000000..1d6c11cea73 --- /dev/null +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/write_img.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +ROOT_DIR="/apollo/modules/perception/obstacle/lidar/segmentation/cnnseg" +DATA_DIR="/apollo/modules/perception/data/cnnseg_test" +DEFAULT_PCD_NAME="uscar_12_1470770225_1470770492_1349" + +# build write_img tool +function build() { + g++ ${ROOT_DIR}/write_img.cc -o ${ROOT_DIR}/write_img -lgflags -lopencv_core -lopencv_highgui -lpthread +} + +# clean write_img exe +function clean() { + rm -f ${ROOT_DIR}/write_img + if [ $# == 0 ] + then + rm -f ${DATA_DIR}/${DEFAULT_PCD_NAME}-detection.png + elif [ $# == 1 ] + then + rm -f ${DATA_DIR}/$1-detection.png + else + echo "[clean] Too many parameters" + fi +} + +# run write_img exe +function run() { + if [ $# == 0 ] + then + ${ROOT_DIR}/write_img + elif [ $# == 1 ] + then + ${ROOT_DIR}/write_img --pcd_name=$1 + else + echo "[run] Too many parameters" + fi +} + +function main() { + case $1 in + clean) + if [ $# == 1 ] + then + clean + elif [ $# == 2 ] + then + clean $2 + else + echo "Too many pcd files specified!" + fi + ;; + build) + build + ;; + run) + if [ $# == 1 ] + then + clean + build + run + elif [ $# == 2 ] + then + clean $2 + build + run $2 + else + echo "Too many pcd files specified!" + fi + ;; + *) + echo "Please input an option: clean|build|run" + ;; + esac +} + +main $@ \ No newline at end of file diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/BUILD b/modules/perception/obstacle/lidar/tracker/hm_tracker/BUILD new file mode 100644 index 00000000000..16cc32418ad --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/BUILD @@ -0,0 +1,64 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "perception_obstacle_lidar_tracker_hm_tracker", + srcs = [ + "feature_descriptor.cc", + "hm_tracker.cc", + "hungarian_matcher.cc", + "kalman_filter.cc", + "object_track.cc", + "track_object_distance.cc", + "tracked_object.cc", + ], + hdrs = [ + "base_filter.h", + "base_matcher.h", + "feature_descriptor.h", + "hm_tracker.h", + "hungarian_matcher.h", + "kalman_filter.h", + "object_track.h", + "track_object_distance.h", + "tracked_object.h", + ], + deps = [ + "//modules/common", + "//modules/common:log", + "//modules/perception/lib/config_manager", + "//modules/perception/obstacle/base:perception_obstacle_base", + "//modules/perception/obstacle/common:perception_obstacle_common", + "//modules/perception/obstacle/lidar/interface:perception_obstacle_lidar_interface", + "//modules/perception/obstacle/onboard:perception_obstacle_hdmapinput", + "@eigen//:eigen", + "@pcl//:pcl", + ], +) + +cc_test( + name = "hm_tracker_test", + size = "small", + srcs = [ + "hm_tracker_test.cc", + ], + data = [ + "//modules/perception:perception_data", + "//modules/perception:perception_model", + "//modules/perception/conf:perception_config", + ], + linkopts = [ + "-lqhull", + ], + deps = [ + ":perception_obstacle_lidar_tracker_hm_tracker", + "//modules/common:log", + "//modules/perception/lib/config_manager", + "//modules/perception/obstacle/lidar/object_builder/min_box:perception_obstacle_lidar_object_builder_min_box", + "@gtest//:main", + "@pcl//:pcl", + ], +) + +cpplint() diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/base_filter.h b/modules/perception/obstacle/lidar/tracker/hm_tracker/base_filter.h new file mode 100644 index 00000000000..8c4f9a50a0e --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/base_filter.h @@ -0,0 +1,103 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_BASE_FILTER_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_BASE_FILTER_H_ + +#include + +#include "Eigen/Core" +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/tracked_object.h" + +namespace apollo { +namespace perception { + +enum FilterType { + KALMAN_FILTER = 0, +}; + +class BaseFilter { + public: + typedef Object ObjectType; + + BaseFilter() { + name_ = "BaseFilter"; + } + virtual ~BaseFilter() {} + + // @brief initialize the state of filter + // @params[IN] anchor_point: initial anchor point for filtering + // @params[IN] velocity: initial velocity for filtering + // @return nothing + virtual void Initialize( + const Eigen::Vector3f& anchor_point, + const Eigen::Vector3f& velocity) = 0; + + // @brief predict the state of filter + // @params[IN] time_diff: time interval for predicting + // @return predicted states of filtering + virtual Eigen::VectorXf Predict( + const double& time_diff) = 0; + + // @brief update filter with object + // @params[IN] new_object: recently detected object for current updating + // @params[IN] old_object: last detected object for last updating + // @params[IN] time_diff: time interval from last updating + // @return nothing + virtual void UpdateWithObject( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object, + const double& time_diff) = 0; + + // @brief update filter without object + // @params[IN] time_diff: time interval from last updating + // @return nothing + virtual void UpdateWithoutObject( + const double& time_diff) = 0; + + // @brief get state of filter + // @params[OUT] anchor_point: anchor point of current state + // @params[OUT] velocity: velocity of current state + // @return nothing + virtual void GetState( + Eigen::Vector3f* anchor_point, + Eigen::Vector3f* velocity) = 0; + + // @brief get state of filter with accelaration + // @params[OUT] anchor_point: anchor point of current state + // @params[OUT] velocity: velocity of current state + // @params[OUT] velocity_accelaration: accelaration of curret state + // @return nothing + virtual void GetState( + Eigen::Vector3f* anchor_point, + Eigen::Vector3f* velocity, + Eigen::Vector3f* velocity_accelaration) = 0; + + // @brief get name of filter + // @return name of filter + std::string Name() { + return name_; + } + + protected: + std::string name_; +}; // class BaseFilter + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_BASE_FILTER_H_ diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/base_matcher.h b/modules/perception/obstacle/lidar/tracker/hm_tracker/base_matcher.h new file mode 100644 index 00000000000..660fe33b924 --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/base_matcher.h @@ -0,0 +1,70 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_BASE_MATCHER_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_BASE_MATCHER_H_ + +#include +#include +#include + +#include "Eigen/Core" +#include "modules/common/macro.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/object_track.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/tracked_object.h" + +namespace apollo { +namespace perception { + +enum MatcherType { + HUNGARIAN_MATCHER = 0, +}; + +class BaseMatcher { + public: + typedef std::pair TrackObjectPair; + + BaseMatcher() {} + virtual ~BaseMatcher() {} + + // @brief match detected objects to maintained tracks + // @params[IN] objects: detected objects + // @params[IN] tracks: maintained tracks + // @params[IN] tracks_predict: predicted states of maintained tracks + // @params[OUT] assignments: matched pair of + // @params[OUT] unassigned_tracks: unmatched tracks + // @params[OUT] unassigned_objects: unmatched objects + // @return nothing + virtual void Match( + std::vector* objects, + const std::vector& tracks, + const std::vector& tracks_predict, + std::vector* assignments, + std::vector* unassigned_tracks, + std::vector* unassigned_objects) = 0; + + // @brief get name of matcher + // @return name of matcher + virtual std::string Name() const = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(BaseMatcher); +}; // class BaseObjectTrackMatcher + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_BASE_MATCHER_H_ diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/feature_descriptor.cc b/modules/perception/obstacle/lidar/tracker/hm_tracker/feature_descriptor.cc new file mode 100644 index 00000000000..5e839f53407 --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/feature_descriptor.cc @@ -0,0 +1,78 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/feature_descriptor.h" + +namespace apollo { +namespace perception { + +void FeatureDescriptor::ComputeHistogram( + const int bin_size, + std::vector* feature) { + GetMinMaxCenter(); + + int xstep = bin_size; + int ystep = bin_size; + int zstep = bin_size; + int stat_len = xstep + ystep + zstep; + std::vector stat_feat(stat_len, 0); + float xsize = (max_pt_.x - min_pt_.x) / xstep + 0.000001; + float ysize = (max_pt_.y - min_pt_.y) / ystep + 0.000001; + float zsize = (max_pt_.z - min_pt_.z) / zstep + 0.000001; + + int pt_num = cloud_->points.size(); + for (int i = 0; i < pt_num; ++i) { + pcl_util::Point& pt = cloud_->points[i]; + stat_feat[static_cast((pt.x - min_pt_.x) / xsize)]++; + stat_feat[static_cast(xstep + (pt.y - min_pt_.y) / ysize)]++; + stat_feat[static_cast(xstep + ystep + (pt.z - min_pt_.z) / zsize)]++; + } + // update feature + (*feature).resize(stat_len); + for (size_t i = 0; i < stat_feat.size(); ++i) { + (*feature)[i] = static_cast(stat_feat[i]) / + static_cast(pt_num); + } +} + +void FeatureDescriptor::GetMinMaxCenter() { + float xsum = 0.0; + float ysum = 0.0; + float zsum = 0.0; + min_pt_.x = min_pt_.y = min_pt_.z = FLT_MAX; + max_pt_.x = max_pt_.y = max_pt_.z = -FLT_MAX; + // min max pt + int pt_num = cloud_->points.size(); + for (int i = 0; i < pt_num; ++i) { + pcl_util::Point& pt = cloud_->points[i]; + xsum += pt.x; + ysum += pt.y; + zsum += pt.z; + min_pt_.x = std::min(min_pt_.x, pt.x); + max_pt_.x = std::max(max_pt_.x, pt.x); + min_pt_.y = std::min(min_pt_.y, pt.y); + max_pt_.y = std::max(max_pt_.y, pt.y); + min_pt_.z = std::min(min_pt_.z, pt.z); + max_pt_.z = std::max(max_pt_.z, pt.z); + } + // center position + center_pt_.x = xsum / pt_num; + center_pt_.y = ysum / pt_num; + center_pt_.z = zsum / pt_num; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/feature_descriptor.h b/modules/perception/obstacle/lidar/tracker/hm_tracker/feature_descriptor.h new file mode 100644 index 00000000000..7280fbcebb6 --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/feature_descriptor.h @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_TRACKER_HM_TRACKER_FEATURE_DESCRIPTOR_H_ +#define MODULES_PERCEPTION_OBSTACLE_TRACKER_HM_TRACKER_FEATURE_DESCRIPTOR_H_ + +#include +#include + +#include "modules/perception/lib/pcl_util/pcl_types.h" + +namespace apollo { +namespace perception { + +class FeatureDescriptor { + public: + // @brief intialize feature descriptor + // @params[IN] cloud: given cloud for feature extraction + // @return nothing + explicit FeatureDescriptor( + apollo::perception::pcl_util::PointCloudPtr cloud) { + cloud_ = cloud; + } + ~FeatureDescriptor() {} + + // @brief compute histogram feature of given cloud + // @params[IN] bin_size: bin size of histogram + // @params[OUT] feature: histogram feature of given cloud + // @return nothing + void ComputeHistogram( + const int bin_size, + std::vector* feature); + + private: + void GetMinMaxCenter(); + apollo::perception::pcl_util::PointCloudPtr cloud_; + pcl_util::Point min_pt_; + pcl_util::Point max_pt_; + pcl_util::Point center_pt_; +}; // class FeatureDescriptor + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_CLASSIFIER_FEATURE_DESCRIPTOR_H_ diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/hm_tracker.cc b/modules/perception/obstacle/lidar/tracker/hm_tracker/hm_tracker.cc new file mode 100644 index 00000000000..e7b0d9aabef --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/hm_tracker.cc @@ -0,0 +1,652 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include + +#include "modules/common/log.h" +#include "modules/perception/lib/config_manager/config_manager.h" +#include "modules/perception/obstacle/common/geometry_util.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/feature_descriptor.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/hm_tracker.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/hungarian_matcher.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/kalman_filter.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/track_object_distance.h" + +namespace apollo { +namespace perception { + +HmObjectTracker::HmObjectTracker(): matcher_method_(HUNGARIAN_MATCHER), + filter_method_(KALMAN_FILTER), + use_histogram_for_match_(false), + histogram_bin_size_(10), + matcher_(nullptr), + time_stamp_(0.0), + valid_(false) { +} + +HmObjectTracker::~HmObjectTracker() { + if (matcher_) { + delete matcher_; + matcher_ = nullptr; + } +} + +bool HmObjectTracker::Init() { + // Initialize tracker's configs + using apollo::perception::ConfigManager; + using apollo::perception::ModelConfig; + + const ModelConfig* model_config = nullptr; + if (!ConfigManager::instance()->GetModelConfig(name(), &model_config)) { + AERROR << "not found model config: " << name(); + return false; + } + + // A. Basic tracker setup + std::string matcher_method_name = "hungarian_matcher"; + std::string filter_method_name = "kalman_filter"; + int track_cached_history_size_maximum = 5; + int track_consecutive_invisible_maximum = 1; + float track_visible_ratio_minimum = 0.6; + int collect_age_minimum = 0; + int collect_consecutive_invisible_maximum = 0; + float acceleration_noise_maximum = 5; + float speed_noise_maximum = 0.4; + // load match method + if (!model_config->GetValue("matcher_method_name", + &matcher_method_name)) { + AERROR << "Failed to get matcher method name! " << name(); + return false; + } + if (!SetMatcherMethod(matcher_method_name)) { + AERROR << "Failed to set matcher method! " << name(); + return false; + } + if (matcher_method_ == HUNGARIAN_MATCHER) { + matcher_ = new HungarianMatcher(); + } else { + matcher_method_ = HUNGARIAN_MATCHER; + matcher_ = new HungarianMatcher(); + AWARN << "invalid matcher method! default HungarianMatcher in use!"; + } + // load filter method + if (!model_config->GetValue("filter_method_name", &filter_method_name)) { + AERROR << "Failed to get filter method name! " << name(); + return false; + } + if (!ObjectTrack::SetFilterMethod(filter_method_name)) { + AERROR << "Failed to set filter method! " << name(); + return false; + } else { + filter_method_ = ObjectTrack::s_filter_method_; + } + // load track cached history size maximum + if (!model_config->GetValue("track_cached_history_size_maximum", + &track_cached_history_size_maximum)) { + AERROR << "Failed to get track cached history size maximum! " << name(); + return false; + } + if (!ObjectTrack::SetTrackCachedHistorySizeMaximum( + track_cached_history_size_maximum)) { + AERROR << "Failed to set track cached history size maximum! " << name(); + return false; + } + // load track consevutive invisible maximum + if (!model_config->GetValue("track_consecutive_invisible_maximum", + &track_consecutive_invisible_maximum)) { + AERROR << "Failed to get track consecutive invisible maximum! " << name(); + return false; + } + if (!ObjectTrackSet::SetTrackConsecutiveInvisibleMaximum( + track_consecutive_invisible_maximum)) { + AERROR << "Failed to set track consecutive invisible maximum! " << name(); + return false; + } + // load track visible ratio minimum + if (!model_config->GetValue("track_visible_ratio_minimum", + &track_visible_ratio_minimum)) { + AERROR << "Failed to get track visible ratio minimum! " << name(); + return false; + } + if (!ObjectTrackSet::SetTrackVisibleRatioMinimum( + track_visible_ratio_minimum)) { + AERROR << "Failed to set track visible ratio minimum! " << name(); + return false; + } + // load collect age minimum + if (!model_config->GetValue("collect_age_minimum", &collect_age_minimum)) { + AERROR << "Failed to get collect age minimum! " << name(); + return false; + } + if (!SetCollectAgeMinimum(collect_age_minimum)) { + AERROR << "Failed to set collect age minimum! " << name(); + return false; + } + // load collect consecutive invisible maximum + if (!model_config->GetValue("collect_consecutive_invisible_maximum", + &collect_consecutive_invisible_maximum)) { + AERROR << "Failed to get collect consecutive invisible maximum! " + << name(); + return false; + } + if (!SetCollectConsecutiveInvisibleMaximum( + collect_consecutive_invisible_maximum)) { + AERROR << "Failed to set collect consecutive invisible maximum! " + << name(); + return false; + } + // load acceleration maximum + if (!model_config->GetValue("acceleration_noise_maximum", + &acceleration_noise_maximum)) { + AERROR << "Failed to get acceleration noise maximum! " << name(); + return false; + } + if (!ObjectTrack::SetAccelerationNoiseMaximum(acceleration_noise_maximum)) { + AERROR << "Failed to set acceleration noise maximum! " << name(); + return false; + } + // load speed noise maximum + if (!model_config->GetValue("speed_noise_maximum", &speed_noise_maximum)) { + AERROR << "Failed to get speed noise maximum! " << name(); + return false; + } + if (!ObjectTrack::SetSpeedNoiseMaximum(speed_noise_maximum)) { + AERROR << "Failed to set speed noise maximum! " << name(); + return false; + } + + // B. Matcher setup + float match_distance_maximum = 4.0; + float location_distance_weight = 0.6; + float direction_distance_weight = 0.2f; + float bbox_size_distance_weight = 0.1f; + float point_num_distance_weight = 0.1f; + float histogram_distance_weight = 0.5f; + int histogram_bin_size = 10; + // load match distance maximum + if (!model_config->GetValue("match_distance_maximum", + &match_distance_maximum)) { + AERROR << "Failed to get match distance maximum! " << name(); + return false; + } + if (matcher_method_ == HUNGARIAN_MATCHER) { + if (!HungarianMatcher::SetMatchDistanceMaximum(match_distance_maximum)) { + AERROR << "Failed to set match distance maximum! " << name(); + return false; + } + } + // load location distance weight + if (!model_config->GetValue("location_distance_weight", + &location_distance_weight)) { + AERROR << "Failed to get location distance weight! " << name(); + return false; + } + if (!TrackObjectDistance::SetLocationDistanceWeight( + location_distance_weight)) { + AERROR << "Failed to set location distance weight! " << name(); + return false; + } + // load direction distance weight + if (!model_config->GetValue("direction_distance_weight", + &direction_distance_weight)) { + AERROR << "Failed to get direction distance weight! " << name(); + return false; + } + if (!TrackObjectDistance::SetDirectionDistanceWeight( + direction_distance_weight)) { + AERROR << "Failed to set direction distance weight! " << name(); + return false; + } + // load bbox size distance weight + if (!model_config->GetValue("bbox_size_distance_weight", + &bbox_size_distance_weight)) { + AERROR << "Failed to get bbox size distance weight! " << name(); + return false; + } + if (!TrackObjectDistance::SetBboxSizeDistanceWeight( + bbox_size_distance_weight)) { + AERROR << "Failed to set bbox size distance weight! " << name(); + return false; + } + // load point num distance weight + if (!model_config->GetValue("point_num_distance_weight", + &point_num_distance_weight)) { + AERROR << "Failed to get point num distance weight! " << name(); + return false; + } + if (!TrackObjectDistance::SetPointNumDistanceWeight( + point_num_distance_weight)) { + AERROR << "Failed to set point num distance weight! " << name(); + return false; + } + // load histogram distance weight + if (!model_config->GetValue("histogram_distance_weight", + &histogram_distance_weight)) { + AERROR << "Failed to get histogram distance weight! " << name(); + return false; + } + if (!TrackObjectDistance::SetHistogramDistanceWeight( + histogram_distance_weight)) { + AERROR << "Failed to set histogram distance weight! " << name(); + return false; + } + use_histogram_for_match_ = + histogram_distance_weight > FLT_EPSILON ? true : false; + if (!model_config->GetValue("histogram_bin_size", &histogram_bin_size)) { + AERROR << "Failed to get histogram bin size! " << name(); + return false; + } + if (!SetHistogramBinSize(histogram_bin_size)) { + AERROR << "Failed to set histogram bin size! " << name(); + return false; + } + + // C. Filter setup + bool use_adaptive = false; + if (!model_config->GetValue("use_adaptive", &use_adaptive)) { + AERROR << "Failed to get use adaptive! " << name(); + return false; + } + + if (filter_method_ == KALMAN_FILTER) { + double association_score_maximum = match_distance_maximum; + float measurement_noise = 0.4f; + float initial_velocity_noise = 5.0f; + float xy_propagation_noise = 10.0f; + float z_propagation_noise = 10.0f; + float breakdown_threshold_maximum = 10.0; + KalmanFilter::SetUseAdaptive(use_adaptive); + if (!KalmanFilter::SetAssociationScoreMaximum( + association_score_maximum)) { + AERROR << "Failed to set association score maximum! " << name(); + return false; + } + if (!model_config->GetValue("measurement_noise", &measurement_noise)) { + AERROR << "Failed to get measurement noise! " << name(); + return false; + } + if (!model_config->GetValue("initial_velocity_noise", + &initial_velocity_noise)) { + AERROR << "Failed to get initial velocity noise! " << name(); + return false; + } + if (!model_config->GetValue("xy_propagation_noise", + &xy_propagation_noise)) { + AERROR << "Failed to get xy propagation noise! " << name(); + return false; + } + if (!model_config->GetValue("z_propagation_noise", + &z_propagation_noise)) { + AERROR << "Failed to get z propagation noise! " << name(); + return false; + } + if (!KalmanFilter::InitParams(measurement_noise, initial_velocity_noise, + xy_propagation_noise, + z_propagation_noise)) { + AERROR << "Failed to set params for kalman filter! " << name(); + return false; + } + if (!model_config->GetValue("breakdown_threshold_maximum", + &breakdown_threshold_maximum)) { + AERROR << "Failed to get breakdown threshold maximum! " << name(); + return false; + } + if (!KalmanFilter::SetBreakdownThresholdMaximum( + breakdown_threshold_maximum)) { + AERROR << "Failed to set breakdown threshold maximum! " << name(); + return false; + } + } + return true; +} + +bool HmObjectTracker::SetMatcherMethod( + const std::string& matcher_method_name) { + if (matcher_method_name == "hungarian_matcher") { + matcher_method_ = HUNGARIAN_MATCHER; + AINFO << "matcher method of " << name() << " is " << matcher_method_name; + return true; + } + AERROR << "invalid matcher method name of " << name(); + return false; +} + +bool HmObjectTracker::SetCollectConsecutiveInvisibleMaximum( + const int& collect_consecutive_invisible_maximum) { + if (collect_consecutive_invisible_maximum >= 0) { + collect_consecutive_invisible_maximum_ = + collect_consecutive_invisible_maximum; + AINFO << "collect consecutive invisible maximum of " << name() << " is " + << collect_consecutive_invisible_maximum_; + return true; + } + AERROR << "invalid collect consecutive invisible maximum of " << name(); + return false; +} + +bool HmObjectTracker::SetCollectAgeMinimum( + const int& collect_age_minimum) { + if (collect_age_minimum >= 0) { + collect_age_minimum_ = collect_age_minimum; + AINFO << "collect age minimum of " << name() << " is " + << collect_age_minimum_; + return true; + } + AERROR << "invalid collect age minimum of " << name(); + return false; +} + +bool HmObjectTracker::SetHistogramBinSize( + const int& histogram_bin_size) { + if (histogram_bin_size > 0) { + histogram_bin_size_ = histogram_bin_size; + AINFO << "histogram bin size of " << name() << " is " + << histogram_bin_size_; + return true; + } + AERROR << "invalid histogram bin size of " << name(); + return false; +} + +const std::vector& HmObjectTracker::GetObjectTracks() const { + return object_tracks_.GetTracks(); +} + +bool HmObjectTracker::Track(const std::vector& objects, + double timestamp, + const TrackerOptions& options, + std::vector* tracked_objects) { + // A. track setup + if (tracked_objects == nullptr) + return false; + if (!valid_) { + valid_ = true; + return Initialize(objects, timestamp, options, tracked_objects); + } + Eigen::Matrix4d velo2world_pose = Eigen::Matrix4d::Identity(); + if (options.velodyne_trans != nullptr) { + velo2world_pose = *(options.velodyne_trans); + } else { + AERROR << "Input velodyne_trans is null"; + return false; + } + double time_diff = timestamp - time_stamp_; + time_stamp_ = timestamp; + + // B. preprocessing + // B.1 transform given pose to local one + TransformPoseGlobal2Local(&velo2world_pose); + ADEBUG << "velo2local_pose\n" << velo2world_pose; + // B.2 construct objects for tracking + std::vector transformed_objects; + ConstructTrackedObjects(objects, &transformed_objects, velo2world_pose, + options); + + // C. prediction + std::vector tracks_predict; + ComputeTracksPredict(&tracks_predict, time_diff); + + // D. match objects to tracks + std::vector assignments; + std::vector unassigned_objects; + std::vector unassigned_tracks; + std::vector& tracks = object_tracks_.GetTracks(); + matcher_->Match(&transformed_objects, tracks, tracks_predict, + &assignments, &unassigned_tracks, &unassigned_objects); + ADEBUG << "multi-object-tracking: " << tracks.size() << " " + << assignments.size() << " " << transformed_objects.size() << " " + << unassigned_objects.size() << " " << time_diff; + + // E. update tracks + // E.1 update tracks with associated objects + UpdateAssignedTracks(&tracks_predict, &transformed_objects, assignments, + time_diff); + // E.2 update tracks without associated objects + UpdateUnassignedTracks(tracks_predict, unassigned_tracks, time_diff); + DeleteLostTracks(); + // E.3 create new tracks for objects without associated tracks + CreateNewTracks(transformed_objects, unassigned_objects); + + // F. collect tracked results + CollectTrackedResults(tracked_objects); + return true; +} + +bool HmObjectTracker::Initialize(const std::vector& objects, + const double& timestamp, + const TrackerOptions& options, + std::vector* tracked_objects) { + // A. track setup + Eigen::Matrix4d velo2world_pose = Eigen::Matrix4d::Identity(); + if (options.velodyne_trans != nullptr) { + velo2world_pose = *(options.velodyne_trans); + } else { + AERROR << "Input velodyne_trans is null"; + return false; + } + global_to_local_offset_ = Eigen::Vector3d(-velo2world_pose(0, 3), + -velo2world_pose(1, 3), + -velo2world_pose(2, 3)); + + // B. preprocessing + // B.1 coordinate transformation + TransformPoseGlobal2Local(&velo2world_pose); + ADEBUG << "velo2local_pose\n" << velo2world_pose; + // B.2 construct tracked objects + std::vector transformed_objects; + ConstructTrackedObjects(objects, &transformed_objects, velo2world_pose, + options); + + // C. create tracks + std::vector unassigned_objects; + unassigned_objects.resize(transformed_objects.size()); + std::iota(unassigned_objects.begin(), unassigned_objects.end(), 0); + CreateNewTracks(transformed_objects, unassigned_objects); + time_stamp_ = timestamp; + + // D. collect tracked results + CollectTrackedResults(tracked_objects); + return true; +} + +void HmObjectTracker::TransformPoseGlobal2Local(Eigen::Matrix4d* pose) { + (*pose)(0, 3) += global_to_local_offset_(0); + (*pose)(1, 3) += global_to_local_offset_(1); + (*pose)(2, 3) += global_to_local_offset_(2); +} + +void HmObjectTracker::ConstructTrackedObjects( + const std::vector& objects, + std::vector* tracked_objects, + const Eigen::Matrix4d& pose, + const TrackerOptions& options) { + int num_objects = objects.size(); + tracked_objects->clear(); + tracked_objects->resize(num_objects); + for (int i = 0; i < num_objects; ++i) { + ObjectPtr obj(new Object()); + obj->clone(*objects[i]); + (*tracked_objects)[i].reset(new TrackedObject(obj)); + // Computing shape featrue + if (use_histogram_for_match_) { + ComputeShapeFeatures(&((*tracked_objects)[i])); + } + // Transforming all tracked objects + TransformTrackedObject(&((*tracked_objects)[i]), pose); + // Setting barycenter as anchor point of tracked objects + Eigen::Vector3f anchor_point = (*tracked_objects)[i]->barycenter; + (*tracked_objects)[i]->anchor_point = anchor_point; + // Getting lane direction of tracked objects + pcl_util::PointD query_pt; + query_pt.x = anchor_point(0) - global_to_local_offset_(0); + query_pt.y = anchor_point(1) - global_to_local_offset_(1); + query_pt.z = anchor_point(2) - global_to_local_offset_(2); + Eigen::Vector3d lane_dir; + if (!options.hdmap_input->GetNearestLaneDirection(query_pt, &lane_dir)) { + AERROR << "Failed to initialize the lane direction of tracked object!"; + // Set lane dir as host dir if query lane direction failed + lane_dir = (pose * Eigen::Vector4d(1, 0, 0, 0)).head(3); + } + (*tracked_objects)[i]->lane_direction = lane_dir.cast(); + } +} + +void HmObjectTracker::ComputeShapeFeatures(TrackedObjectPtr* obj) { + // Compute object's shape feature + ObjectPtr& temp_object = (*obj)->object_ptr; + FeatureDescriptor fd(temp_object->cloud); + fd.ComputeHistogram(histogram_bin_size_, &temp_object->shape_features); +} + +void HmObjectTracker::TransformTrackedObject(TrackedObjectPtr* obj, + const Eigen::Matrix4d& pose) { + // Transform tracked object with given pose + TransformObject(&((*obj)->object_ptr), pose); + // transform direction + Eigen::Vector3f& dir = (*obj)->direction; + dir = (pose * Eigen::Vector4d( + dir(0), dir(1), dir(2), 0)).head(3).cast(); + // transform center + Eigen::Vector3f& center = (*obj)->center; + center = (pose * Eigen::Vector4d( + center(0), center(1), center(2), 1)).head(3).cast(); + // transform barycenter + Eigen::Vector3f& barycenter = (*obj)->barycenter; + barycenter = (pose * Eigen::Vector4d( + barycenter(0), barycenter(1), barycenter(2), 1)).head(3).cast(); +} + +void HmObjectTracker::TransformObject(ObjectPtr* obj, + const Eigen::Matrix4d& pose) { + // Transform object with given pose + Eigen::Vector3d& dir = (*obj)->direction; + dir = (pose * Eigen::Vector4d(dir[0], dir[1], dir[2], 0)).head(3); + // transform center + Eigen::Vector3d& center = (*obj)->center; + center = (pose * Eigen::Vector4d( + center[0], center[1], center[2], 1)).head(3); + // transform cloud & polygon + TransformPointCloud(pose, (*obj)->cloud); + TransformPointCloud(pose, &((*obj)->polygon)); +} + +void HmObjectTracker::ComputeTracksPredict( + std::vector* tracks_predict, + const double& time_diff) { + // Compute tracks' predicted states + int no_track = object_tracks_.Size(); + tracks_predict->resize(no_track); + std::vector& tracks = object_tracks_.GetTracks(); + for (int i = 0; i < no_track; ++i) { + (*tracks_predict)[i] = tracks[i]->Predict(time_diff); + } +} + +void HmObjectTracker::UpdateAssignedTracks( + std::vector* tracks_predict, + std::vector* new_objects, + const std::vector& assignments, + const double& time_diff) { + // Update assigned tracks + std::vector& tracks = object_tracks_.GetTracks(); + for (size_t i = 0; i < assignments.size(); i++) { + int track_id = assignments[i].first; + int obj_id = assignments[i].second; + tracks[track_id]->UpdateWithObject(&(*new_objects)[obj_id], time_diff); + } +} + +void HmObjectTracker::UpdateUnassignedTracks( + const std::vector& tracks_predict, + const std::vector& unassigned_tracks, + const double& time_diff) { + // Update tracks without matched objects + std::vector& tracks = object_tracks_.GetTracks(); + for (size_t i = 0; i < unassigned_tracks.size(); i++) { + int track_id = unassigned_tracks[i]; + tracks[track_id]->UpdateWithoutObject( + tracks_predict[track_id], time_diff); + } +} + +void HmObjectTracker::CreateNewTracks( + const std::vector& new_objects, + const std::vector& unassigned_objects) { + // Create new tracks for objects without matched tracks + for (size_t i = 0; i < unassigned_objects.size(); i++) { + int obj_id = unassigned_objects[i]; + ObjectTrackPtr track(new ObjectTrack(new_objects[obj_id])); + object_tracks_.AddTrack(track); + } +} + +void HmObjectTracker::DeleteLostTracks() { + // Delete lost tracks + object_tracks_.RemoveLostTracks(); +} + +void HmObjectTracker::CollectTrackedResults( + std::vector* tracked_objects) { + // Collect tracked results for reporting include objects may be occluded + // temporaryly + const std::vector& tracks = object_tracks_.GetTracks(); + tracked_objects->resize(tracks.size()); + + int track_number = 0; + for (size_t i = 0; i < tracks.size(); i++) { + if (tracks[i]->consecutive_invisible_count_ > + collect_consecutive_invisible_maximum_) continue; + if (tracks[i]->age_ < collect_age_minimum_) continue; + ObjectPtr obj(new Object); + TrackedObjectPtr result_obj = tracks[i]->current_object_; + obj->clone(*(result_obj->object_ptr)); + // fill tracked information of object + obj->direction = result_obj->direction.cast(); + if (fabs(obj->direction[0]) < DBL_MIN) { + obj->theta = obj->direction(1) > 0 ? M_PI / 2 : -M_PI / 2; + } else { + obj->theta = atan2(obj->direction[1], obj->direction[0]); + } + obj->length = result_obj->size[0]; + obj->width = result_obj->size[1]; + obj->height = result_obj->size[2]; + obj->velocity = result_obj->velocity.cast(); + obj->track_id = tracks[i]->idx_; + obj->tracking_time = tracks[i]->period_; + obj->type = result_obj->type; + obj->center = result_obj->center.cast() - global_to_local_offset_; + obj->anchor_point = result_obj->anchor_point.cast() - + global_to_local_offset_; + // restore original world coordinates + for (size_t j = 0; j < obj->cloud->size(); j++) { + obj->cloud->points[j].x -= global_to_local_offset_[0]; + obj->cloud->points[j].y -= global_to_local_offset_[1]; + obj->cloud->points[j].z -= global_to_local_offset_[2]; + } + for (size_t j = 0; j < obj->polygon.size(); j++) { + obj->polygon.points[j].x -= global_to_local_offset_[0]; + obj->polygon.points[j].y -= global_to_local_offset_[1]; + obj->polygon.points[j].z -= global_to_local_offset_[2]; + } + (*tracked_objects)[track_number] = obj; + track_number++; + } + tracked_objects->resize(track_number); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/hm_tracker.h b/modules/perception/obstacle/lidar/tracker/hm_tracker/hm_tracker.h new file mode 100644 index 00000000000..9bdbb2c7eef --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/hm_tracker.h @@ -0,0 +1,222 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_H_ + +#include +#include +#include + +#include "modules/common/macro.h" +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/lidar/interface/base_tracker.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/base_matcher.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/object_track.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/tracked_object.h" +#include "modules/perception/obstacle/onboard/hdmap_input.h" + +namespace apollo { +namespace perception { + +class HmObjectTracker : public BaseTracker{ + public: + typedef std::pair TrackObjectPair; + + HmObjectTracker(); + virtual ~HmObjectTracker(); + + // @brief initialize tracker's configs + // @return true if initialize successfully, otherwise return false + bool Init(); + + // @brief set matcher method + // @params[IN] matcher_method_name: name of mathcer method + // @return true if set successfully, otherwise return fasle + bool SetMatcherMethod( + const std::string& matcher_method_name); + + // @brief set collect consecutive invisible maximum + // @params[IN] collect_consecutive_invisible_maximum: collect consecutive + // invisible maximum + // @return true if set successfully, otherwise return fasle + bool SetCollectConsecutiveInvisibleMaximum( + const int& collect_consecutive_invisible_maximum); + + // @brief set collect age minimum + // @params[IN] collect_age_minimum: collect age minimum + // @return true if set successfully, otherwise return fasle + bool SetCollectAgeMinimum( + const int& collect_age_minimum); + + // @brief set histogram bin size + // @params[IN] histogram_bin_size: histogram bin size + // @return true if set successfully, otherwise return fasle + bool SetHistogramBinSize( + const int& histogram_bin_size); + + // @brief track detected objects over consecutive frames + // @params[IN] objects: recently detected objects + // @params[IN] timestamp: timestamp of recently detected objects + // @params[IN] options: tracker options with necessary information + // @params[OUT] tracked_objects: tracked objects with tracking information + // @return true if track successfully, otherwise return false + bool Track( + const std::vector& objects, + double timestamp, + const TrackerOptions& options, + std::vector* tracked_objects); + + // @brief get object tracks of tracker + // @return object tracks maintained in tracker + const std::vector& GetObjectTracks() const; + + std::string name() const { + return "HmObjectTracker"; + } + + protected: + // @brief initialize tracker after obtaining detection of first frame + // @params[IN] objects: recently detected objects + // @params[IN] timestamp: timestamp of recently detected objects + // @params[IN] options: tracker options with necessary information + // @params[OUT] tracked_objects: tracked objects with tracking information + // @return true if initialize successfully, otherwise return false + bool Initialize( + const std::vector& objects, + const double& timestamp, + const TrackerOptions& options, + std::vector* tracked_objects); + + // @brief transform v2world pose to v2local pose intend to avoid huge value + // float computing + // @params[OUT] pose: v2world pose + // @return nothing + void TransformPoseGlobal2Local( + Eigen::Matrix4d* pose); + + // @brief construct tracked objects via necessray transformation & feature + // computing + // @params[IN] objects: objects for construction + // @params[OUT] tracked_objects: constructed objects + // @params[IN] pose: pose using for coordinate transformation + // @params[IN] options: tracker options with necessary information + // @return nothing + void ConstructTrackedObjects( + const std::vector& objects, + std::vector* tracked_objects, + const Eigen::Matrix4d& pose, + const TrackerOptions& options); + + // @brief compute objects' shape feature + // @params[OUT] object: object for computing shape feature + // @return nothing + void ComputeShapeFeatures( + TrackedObjectPtr* obj); + + // @brief transform tracked object with given pose + // @params[OUT] obj: tracked object for transfromation + // @params[IN] pose: pose using for coordinate transformation + // @return nothing + void TransformTrackedObject( + TrackedObjectPtr* obj, + const Eigen::Matrix4d& pose); + + // @brief transform object with given pose + // @params[OUT] obj: object for transfromation + // @params[IN] pose: pose using for coordinate transformation + // @return nothing + void TransformObject( + ObjectPtr* obj, + const Eigen::Matrix4d& pose); + + // @brief compute predicted states of maintained tracks + // @params[OUT] tracks_predict: predicted states of maintained tracks + // @params[IN] time_diff: time interval for predicting + // @return nothing + void ComputeTracksPredict( + std::vector* tracks_predict, + const double& time_diff); + + // @brief update assigned tracks + // @params[IN] tracks_predict: predicted states of maintained tracks + // @params[IN] new_objects: recently detected objects + // @params[IN] assignments: assignment pair of + // @params[IN] time_diff: time interval for updating + // @return nothing + void UpdateAssignedTracks( + std::vector* tracks_predict, + std::vector* new_objects, + const std::vector& assignments, + const double& time_diff); + + // @brief update tracks without matched objects + // @params[IN] tracks_predict: predicted states of maintained tracks + // @params[IN] unassigned_tracks: index of unassigned tracks + // @params[IN] time_diff: time interval for updating + // @return nothing + void UpdateUnassignedTracks( + const std::vector& tracks_predict, + const std::vector& unassigned_tracks, + const double& time_diff); + + // @brief create new tracks for objects without matched track + // @params[IN] new_objects: recently detected objects + // @params[IN] unassigned_objects: index of unassigned objects + // @return nothing + void CreateNewTracks( + const std::vector& new_objects, + const std::vector& unassigned_objects); + + // @brief delete lost tracks + // @return nothing + void DeleteLostTracks(); + + // @brief collect tracked results + // @params[OUT] tracked_objects: tracked objects with tracking information + // @return nothing + void CollectTrackedResults( + std::vector* tracked_objects); + + private: + // algorithm setup + MatcherType matcher_method_; + FilterType filter_method_; + int collect_consecutive_invisible_maximum_; + int collect_age_minimum_; + bool use_histogram_for_match_; + int histogram_bin_size_; + + // matcher + BaseMatcher* matcher_; + + // tracks + ObjectTrackSet object_tracks_; + + // set offset to avoid huge value float computing + Eigen::Vector3d global_to_local_offset_; + double time_stamp_; + bool valid_; + + DISALLOW_COPY_AND_ASSIGN(HmObjectTracker); +}; // class HmObjectTracker + +REGISTER_TRACKER(HmObjectTracker); + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_H_ diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/hm_tracker_test.cc b/modules/perception/obstacle/lidar/tracker/hm_tracker/hm_tracker_test.cc new file mode 100644 index 00000000000..21ce3a8e848 --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/hm_tracker_test.cc @@ -0,0 +1,150 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/hm_tracker.h" + +#include +#include +#include +#include + +#include "gtest/gtest.h" + +#include "modules/common/log.h" +#include "modules/perception/common/perception_gflags.h" +#include "modules/perception/lib/config_manager/config_manager.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/common/file_system_util.h" +#include "modules/perception/obstacle/common/pose_util.h" +#include "modules/perception/obstacle/lidar/object_builder/min_box/min_box.h" + +namespace apollo { +namespace perception { + +class HmObjectTrackerTest : public testing::Test { + protected: + HmObjectTrackerTest() {} + virtual ~HmObjectTrackerTest() {} + void SetUp() { + RegisterFactoryHmObjectTracker(); + FLAGS_work_root = "modules/perception"; + FLAGS_config_manager_path = "conf/config_manager.config"; + if (!ConfigManager::instance()->Init()) { + AERROR << "failed to init ConfigManager"; + return; + } + hm_tracker_ = new HmObjectTracker(); + object_builder_ = new MinBoxObjectBuilder(); + object_builder_->Init(); + object_builder_options_.ref_center = + Eigen::Vector3d(0, 0, -1.7); // velodyne height + tracker_options_.velodyne_trans.reset(new Eigen::Matrix4d); + } + void TearDown() { + delete hm_tracker_; + hm_tracker_ = nullptr; + delete object_builder_; + object_builder_ = nullptr; + } + + protected: + HmObjectTracker* hm_tracker_ = nullptr; + MinBoxObjectBuilder* object_builder_ = nullptr; + ObjectBuilderOptions object_builder_options_; + TrackerOptions tracker_options_; +}; + +bool ConstructObjects(const std::string& filename, + std::vector* objects) { + std::ifstream ifs(filename); + if (!ifs.is_open()) { + AERROR << "failed to open file" << filename; + return false; + } + std::string type; + int no_point = 0; + float tmp = 0; + while (ifs >> type) { + ifs >> tmp >> tmp >> tmp >> no_point; + ObjectPtr obj(new Object()); + obj->cloud->resize(no_point); + for (int j = 0; j < no_point; ++j) { + ifs >> obj->cloud->points[j].x >> obj->cloud->points[j].y >> + obj->cloud->points[j].z >> obj->cloud->points[j].intensity; + } + (*objects).push_back(obj); + } + return true; +} + +TEST_F(HmObjectTrackerTest, Track) { + // test initialization of hm tracker + EXPECT_TRUE(hm_tracker_->Init()); + // test tracking via hm tracker + std::string data_path = "modules/perception/data/hm_tracker_test/"; + std::vector seg_filenames; + GetFileNamesInFolderById(data_path, ".seg", &seg_filenames); + std::vector pose_filenames; + GetFileNamesInFolderById(data_path, ".pose", &pose_filenames); + int frame_id = -1; + double time_stamp = 0.0; + EXPECT_GT(seg_filenames.size(), 0); + EXPECT_EQ(seg_filenames.size(), pose_filenames.size()); + Eigen::Vector3d global_offset(0, 0, 0); + for (size_t i = 0; i < seg_filenames.size(); ++i) { + // read pose + Eigen::Matrix4d pose = Eigen::Matrix4d::Identity(); + if (!ReadPoseFile(data_path + pose_filenames[i], &pose, &frame_id, + &time_stamp)) { + AERROR << "failed to read pose"; + return; + } + if (i == 0) { + global_offset(0) = pose(0, 3); + global_offset(1) = pose(1, 3); + global_offset(2) = pose(2, 3); + } + pose(0, 3) -= global_offset(0); + pose(1, 3) -= global_offset(1); + pose(2, 3) -= global_offset(2); + // read segments + std::vector objects; + if (!ConstructObjects(data_path + seg_filenames[i], &objects)) { + AERROR << "failed to read segments"; + return; + } + // build objects + object_builder_->Build(object_builder_options_, &objects); + // test tracking + *(tracker_options_.velodyne_trans) = pose; + std::vector result_objects; + // assert tracking succesfully + EXPECT_TRUE(hm_tracker_->Track(objects, time_stamp, tracker_options_, + &result_objects)); + // assert reports completly + EXPECT_TRUE(result_objects.size() >= objects.size()); + std::map id_pool; + for (size_t j = 0; j < result_objects.size(); ++j) { + int track_id = result_objects[j]->track_id; + // assert no duplicated track id in the same frame + EXPECT_TRUE(id_pool.find(track_id) == id_pool.end()); + id_pool[track_id] = 1; + } + } +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/hungarian_matcher.cc b/modules/perception/obstacle/lidar/tracker/hm_tracker/hungarian_matcher.cc new file mode 100644 index 00000000000..928b9bdc4ab --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/hungarian_matcher.cc @@ -0,0 +1,288 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include + +#include "modules/common/log.h" +#include "modules/perception/obstacle/common/graph_util.h" +#include "modules/perception/obstacle/common/geometry_util.h" +#include "modules/perception/obstacle/common/hungarian_bigraph_matcher.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/hungarian_matcher.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/track_object_distance.h" + +namespace apollo { +namespace perception { + +float HungarianMatcher::s_match_distance_maximum_ = 4.0f; + +bool HungarianMatcher::SetMatchDistanceMaximum( + const float& match_distance_maximum) { + if (match_distance_maximum >= 0) { + s_match_distance_maximum_ = match_distance_maximum; + AINFO << "match distance maximum of HungarianMatcher is " + << s_match_distance_maximum_; + return true; + } + AERROR << "invalid match distance maximum of HungarianMatcher!"; + return false; +} + +void HungarianMatcher::Match(std::vector* objects, + const std::vector& tracks, + const std::vector& tracks_predict, + std::vector* assignments, + std::vector* unassigned_tracks, + std::vector* unassigned_objects) { + // A. computing association matrix + Eigen::MatrixXf association_mat(tracks.size(), objects->size()); + ComputeAssociateMatrix(tracks, tracks_predict, (*objects), &association_mat); + + // B. computing connected components + std::vector > object_components; + std::vector > track_components; + ComputeConnectedComponents(association_mat, s_match_distance_maximum_, + &track_components, &object_components); + ADEBUG << "HungarianMatcher: partition graph into " + << track_components.size() << " sub-graphs."; + + // C. matching each sub-graph + assignments->clear(); + unassigned_tracks->clear(); + unassigned_objects->clear(); + for (size_t i = 0; i < track_components.size(); i++) { + std::vector sub_assignments; + std::vector sub_unassigned_tracks; + std::vector sub_unassigned_objects; + MatchInComponents(association_mat, track_components[i], + object_components[i], &sub_assignments, + &sub_unassigned_tracks, &sub_unassigned_objects); + for (size_t j = 0; j < sub_assignments.size(); ++j) { + int track_id = sub_assignments[j].first; + int object_id = sub_assignments[j].second; + assignments->push_back(sub_assignments[j]); + float association_score = association_mat(track_id, object_id); + (*objects)[object_id]->association_score = association_score; + } + for (size_t j = 0; j < sub_unassigned_tracks.size(); ++j) { + unassigned_tracks->push_back(sub_unassigned_tracks[j]); + } + for (size_t j = 0; j < sub_unassigned_objects.size(); ++j) { + unassigned_objects->push_back(sub_unassigned_objects[j]); + } + } +} + +void HungarianMatcher::MatchInComponents(const Eigen::MatrixXf& association_mat, + const std::vector& track_component, + const std::vector& object_component, + std::vector* sub_assignments, + std::vector* sub_unassigned_tracks, + std::vector* sub_unassigned_objects) { + sub_assignments->clear(); + sub_unassigned_tracks->clear(); + sub_unassigned_objects->clear(); + // A. failted to match if either components is empty + if (track_component.empty()) { + for (size_t i = 0; i < object_component.size(); ++i) { + sub_unassigned_objects->push_back(object_component[i]); + } + } + if (object_component.empty()) { + for (size_t i = 0; i < track_component.size(); ++i) { + sub_unassigned_tracks->push_back(track_component[i]); + } + } + if (track_component.empty() || object_component.empty()) return; + // B. if components perfectly match + if (track_component.size() == 1 && object_component.size() == 1) { + int track_id = track_component[0]; + int object_id = object_component[0]; + if (association_mat(track_id, object_id) <= s_match_distance_maximum_) { + sub_assignments->push_back(std::make_pair(track_id, object_id)); + } else { + sub_unassigned_objects->push_back(object_id); + sub_unassigned_tracks->push_back(track_id); + } + return; + } + // C. multi object track match + std::vector track_local2global; + std::vector object_local2global; + std::vector local_assignments; + std::vector local_unassigned_tracks; + std::vector local_unassigned_objects; + Eigen::MatrixXf local_association_mat(track_component.size(), + object_component.size()); + track_local2global.resize(track_component.size()); + object_local2global.resize(object_component.size()); + for (size_t i = 0; i < track_component.size(); ++i) { + track_local2global[i] = track_component[i]; + } + for (size_t i = 0; i < object_component.size(); ++i) { + object_local2global[i] = object_component[i]; + } + for (size_t i = 0; i < track_component.size(); ++i) { + for (size_t j = 0; j < object_component.size(); ++j) { + int track_id = track_component[i]; + int object_id = object_component[j]; + local_association_mat(i, j) = association_mat(track_id, object_id); + } + } + local_assignments.resize(local_association_mat.cols()); + local_unassigned_tracks.assign(local_association_mat.rows(), -1); + local_unassigned_objects.assign(local_association_mat.cols(), -1); + AssignObjectsToTracks(local_association_mat, + s_match_distance_maximum_, &local_assignments, &local_unassigned_tracks, + &local_unassigned_objects); + for (size_t i = 0; i < local_assignments.size(); ++i) { + int global_track_id = track_local2global[local_assignments[i].first]; + int global_object_id = object_local2global[local_assignments[i].second]; + sub_assignments->push_back(std::make_pair(global_track_id, + global_object_id)); + } + for (size_t i = 0; i < local_unassigned_tracks.size(); ++i) { + int global_track_id = track_local2global[local_unassigned_tracks[i]]; + sub_unassigned_tracks->push_back(global_track_id); + } + for (size_t i = 0; i < local_unassigned_objects.size(); ++i) { + int global_object_id = object_local2global[local_unassigned_objects[i]]; + sub_unassigned_objects->push_back(global_object_id); + } +} + +void HungarianMatcher::ComputeAssociateMatrix( + const std::vector& tracks, + const std::vector& tracks_predict, + const std::vector& new_objects, + Eigen::MatrixXf* association_mat) { + // Compute matrix of association distance + for (size_t i = 0; i < tracks.size(); ++i) { + for (size_t j = 0; j < new_objects.size(); ++j) { + (*association_mat)(i, j) = TrackObjectDistance::ComputeDistance( + tracks[i], tracks_predict[i], new_objects[j]); + } + } +} + +void HungarianMatcher::ComputeConnectedComponents( + const Eigen::MatrixXf& association_mat, + const float& connected_threshold, + std::vector >* track_components, + std::vector >* object_components) { + // Compute connected components within given threshold + int no_track = association_mat.rows(); + int no_object = association_mat.cols(); + std::vector > nb_graph; + nb_graph.resize(no_track + no_object); + for (int i = 0; i < no_track; i++) { + for (int j = 0; j < no_object; j++) { + if (association_mat(i, j) <= connected_threshold) { + nb_graph[i].push_back(no_track + j); + nb_graph[j + no_track].push_back(i); + } + } + } + + std::vector > components; + ConnectedComponentAnalysis(nb_graph, &components); + track_components->clear(); + track_components->resize(components.size()); + object_components->clear(); + object_components->resize(components.size()); + for (size_t i = 0; i < components.size(); i++) { + for (size_t j = 0; j < components[i].size(); j++) { + int id = components[i][j]; + if (id < no_track) { + (*track_components)[i].push_back(id); + } else { + id -= no_track; + (*object_components)[i].push_back(id); + } + } + } +} + +void HungarianMatcher::AssignObjectsToTracks( + const Eigen::MatrixXf& association_mat, + const double& assign_distance_maximum, + std::vector* assignments, + std::vector* unassigned_tracks, + std::vector* unassigned_objects) { + // Assign objects to tracks with null tracks setup + std::vector tracks_idx; + std::vector objects_idx; + int no_track = association_mat.rows(); + int no_object = association_mat.cols(); + // build cost + std::vector< std::vector > cost(no_track + no_object); + for (int i = 0; i < no_track; ++i) { + cost[i].resize(association_mat.cols()); + for (int j = 0; j < association_mat.cols(); ++j) { + cost[i][j] = association_mat(i, j); + } + } + for (int i = 0; i < no_object; ++i) { + cost[i + no_track].resize(no_object); + for (int j = 0; j < no_object; ++j) { + if (j == i) { + cost[i + no_track][j] = assign_distance_maximum * 1.2f; + } else { + cost[i + no_track][j] = 999999.0f; + } + } + } + + HungarianOptimizer hungarian_optimizer(cost); + hungarian_optimizer.minimize(&tracks_idx, &objects_idx); + + int assignments_num = 0; + std::vector tracks_used(no_track + no_object, false); + std::vector objects_used(no_object, false); + for (size_t i = 0; i < tracks_idx.size(); ++i) { + if (tracks_idx[i] < 0 || tracks_idx[i] >= no_track || + objects_idx[i] < 0 || objects_idx[i] >= no_object) { + continue; + } + if (association_mat(tracks_idx[i], objects_idx[i]) < + assign_distance_maximum) { + (*assignments)[assignments_num++] = + std::make_pair(tracks_idx[i], objects_idx[i]); + tracks_used[tracks_idx[i]] = true; + objects_used[objects_idx[i]] = true; + } + } + assignments->resize(assignments_num); + unassigned_tracks->resize(association_mat.rows()); + int unassigned_tracks_num = 0; + for (int i = 0; i < association_mat.rows(); ++i) { + if (tracks_used[i] == false) { + (*unassigned_tracks)[unassigned_tracks_num++] = i; + } + } + unassigned_tracks->resize(unassigned_tracks_num); + unassigned_objects->resize(association_mat.cols()); + int unassigned_objects_num = 0; + for (int i = 0; i < association_mat.cols(); ++i) { + if (objects_used[i] == false) { + (*unassigned_objects)[unassigned_objects_num++] = i; + } + } + unassigned_objects->resize(unassigned_objects_num); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/hungarian_matcher.h b/modules/perception/obstacle/lidar/tracker/hm_tracker/hungarian_matcher.h new file mode 100644 index 00000000000..788df9b8c6e --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/hungarian_matcher.h @@ -0,0 +1,124 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_LIDAR_TRACKER_HM_TRACKER_HUNGARIAN_MATCHER_H_ +#define MODULES_PERCEPTION_LIDAR_TRACKER_HM_TRACKER_HUNGARIAN_MATCHER_H_ + +#include +#include + +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/base_matcher.h" + +namespace apollo { +namespace perception { + +class HungarianMatcher: public BaseMatcher{ + public: + HungarianMatcher() {} + ~HungarianMatcher() {} + + // @brief set match distance maximum for matcher + // @params[IN] match_distance_maximum: match distance maximum + // @return true if set successfuly, otherwise return false + static bool SetMatchDistanceMaximum( + const float& match_distance_maximum); + + // @brief match detected objects to tracks + // @params[IN] objects: new detected objects for matching + // @params[IN] tracks: maintaining tracks for matching + // @params[IN] tracks_predict: predicted state of maintained tracks + // @params[OUT] assignments: assignment pair of object & track + // @params[OUT] unassigned_tracks: tracks without matched object + // @params[OUT] unassigned_objects: objects without matched track + // @return nothing + void Match( + std::vector* objects, + const std::vector& tracks, + const std::vector& tracks_predict, + std::vector* assignments, + std::vector* unassigned_tracks, + std::vector* unassigned_objects); + + // @brief match detected objects to tracks in component level + // @params[IN] association_mat: association matrix of all objects to tracks + // @params[IN] track_component: component of track + // @params[IN] object_component: component of object + // @params[OUT] sub_assignments: component assignment pair of object & track + // @params[OUT] sub_unassigned_tracks: component tracks not matched + // @params[OUT] sub_unasgined_objects: component objects not matched + // @return nothing + void MatchInComponents( + const Eigen::MatrixXf& association_mat, + const std::vector& track_component, + const std::vector& obj_component, + std::vector* sub_assignments, + std::vector* sub_unassigned_tracks, + std::vector* sub_unassigned_objects); + + std::string Name() const { + return "HungarianMatcher"; + } + + protected: + // @brief compute association matrix + // @params[IN] tracks: maintained tracks for matching + // @params[IN] tracks_predict: predicted states of maintained tracks + // @params[IN] new_objects: recently detected objects + // @params[OUT] association_mat: matrix of association distance + // @return nothing + void ComputeAssociateMatrix( + const std::vector& tracks, + const std::vector& tracks_predict, + const std::vector& new_objects, + Eigen::MatrixXf* association_mat); + + // @brief compute connected components within given threshold + // @params[IN] association_mat: matrix of association distance + // @params[IN] connected_threshold: threshold of connected components + // @params[OUT] track_components: connected objects of given tracks + // @params[OUT] obj_components: connected tracks of given objects + // @return nothing + void ComputeConnectedComponents( + const Eigen::MatrixXf& association_mat, + const float& connected_threshold, + std::vector >* track_components, + std::vector >* obj_components); + + // @brief assign objects to tracks using components + // @params[IN] association_mat: matrix of association distance + // @params[IN] assign_distance_maximum: threshold distance of assignment + // @params[OUT] assignments: assignment pair of matched object & track + // @params[OUT] unassigned_tracks: tracks without matched object + // @params[OUT] unassigned_objects: objects without matched track + // @return nothing + void AssignObjectsToTracks( + const Eigen::MatrixXf& association_mat, + const double& assign_distance_maximum, + std::vector* assignments, + std::vector* unassigned_tracks, + std::vector* unassigned_objects); + + private: + // threshold of matching + static float s_match_distance_maximum_; + + DISALLOW_COPY_AND_ASSIGN(HungarianMatcher); +}; // class HmMatcher + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_LIDAR_TRACKER_HM_TRACKER_HUNGARIAN_MATCHER_H_ diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/kalman_filter.cc b/modules/perception/obstacle/lidar/tracker/hm_tracker/kalman_filter.cc new file mode 100644 index 00000000000..47acff19170 --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/kalman_filter.cc @@ -0,0 +1,454 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include + +#include "modules/common/log.h" +#include "modules/perception/obstacle/common/geometry_util.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/kalman_filter.h" + +namespace apollo { +namespace perception { + +bool KalmanFilter::s_use_adaptive_ = true; +double KalmanFilter::s_association_score_maximum_ = 1.0; +Eigen::Matrix3d KalmanFilter::s_propagation_noise_ = 10 * + Eigen::Matrix3d::Identity(); +double KalmanFilter::s_measurement_noise_ = 0.4; +double KalmanFilter::s_initial_velocity_noise_ = 5; +double KalmanFilter::s_breakdown_threshold_maximum_ = 10; + +void KalmanFilter::SetUseAdaptive(const bool& use_adaptive) { + s_use_adaptive_ = use_adaptive; + AINFO << "use adaptive of KalmanFilter is " << s_use_adaptive_; +} + +bool KalmanFilter::SetAssociationScoreMaximum( + const double& association_score_maximum) { + if (association_score_maximum > 0) { + s_association_score_maximum_ = association_score_maximum; + AINFO << "association score maximum of KalmanFilter is " + << s_association_score_maximum_; + return true; + } + AERROR << "invalid association score maximum of KalmanFilter!"; + return false; +} + +bool KalmanFilter::SetBreakdownThresholdMaximum( + const double& breakdown_threshold_maximum) { + if (breakdown_threshold_maximum > 0) { + s_breakdown_threshold_maximum_ = breakdown_threshold_maximum; + AINFO << "breakdown threshold maximum of KalmanFilter is " + << s_breakdown_threshold_maximum_; + return true; + } + AERROR << "invalid breakdown threshold maximum of KalmanFilter!"; + return false; +} + +bool KalmanFilter::InitParams( + const double& measurement_noise, + const double& initial_velocity_noise, + const double& xy_propagation_noise, + const double& z_propagation_noise) { + if (measurement_noise < 0) { + AERROR << "invalid measurement noise of KalmanFilter!"; + return false; + } + if (initial_velocity_noise < 0) { + AERROR << "invalid intial velocity noise of KalmanFilter!"; + return false; + } + if (xy_propagation_noise < 0) { + AERROR << "invalid xy propagation noise of KalmanFilter!"; + return false; + } + if (z_propagation_noise < 0) { + AERROR << "invalid z propagation noise of KalmanFilter!"; + return false; + } + s_measurement_noise_ = measurement_noise; + s_initial_velocity_noise_ = initial_velocity_noise; + s_propagation_noise_(0, 0) = xy_propagation_noise; + s_propagation_noise_(1, 1) = xy_propagation_noise; + s_propagation_noise_(2, 2) = z_propagation_noise; + AINFO << "measurment noise of KalmanFilter is " << s_measurement_noise_; + AINFO << "initial velocity noise of KalmanFilter is " + << s_initial_velocity_noise_; + AINFO << "propagation noise of KalmanFilter is\n" << s_propagation_noise_; + return true; +} + +KalmanFilter::KalmanFilter() { + name_ = "KalmanFilter"; + age_ = 0; + velocity_covariance_ = s_initial_velocity_noise_ * + Eigen::Matrix3d::Identity(); + // states + update_quality_ = 1.0; + breakdown_threshold_ = s_breakdown_threshold_maximum_; + belief_velocity_ = Eigen::Vector3d::Zero(); + belief_velocity_accelaration_ = Eigen::Vector3d::Zero(); +} + +void KalmanFilter::Initialize(const Eigen::Vector3f& anchor_point, + const Eigen::Vector3f& velocity) { + update_quality_ = 1.0; + breakdown_threshold_ = s_breakdown_threshold_maximum_; + belief_anchor_point_ = anchor_point.cast(); + belief_velocity_ = velocity.cast(); + belief_velocity_accelaration_ = Eigen::Vector3d::Zero(); +} + +Eigen::VectorXf KalmanFilter::Predict(const double& time_diff) { + // Compute predict states + Eigen::VectorXf predicted_state; + predicted_state.resize(6); + predicted_state(0) = belief_anchor_point_(0) + + belief_velocity_(0) * time_diff; + predicted_state(1) = belief_anchor_point_(1) + + belief_velocity_(1) * time_diff; + predicted_state(2) = belief_anchor_point_(2) + + belief_velocity_(2) * time_diff; + predicted_state(3) = belief_velocity_(0); + predicted_state(4) = belief_velocity_(1); + predicted_state(5) = belief_velocity_(2); + // Compute predicted covariance + Propagate(time_diff); + return predicted_state; +} + +void KalmanFilter::UpdateWithObject(const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object, + const double& time_diff) { + if (time_diff <= DBL_EPSILON) { + AWARN << "Time diff is too limited to updating KalmanFilter!"; + return; + } + // A. Compute update quality if needed + if (s_use_adaptive_) { + ComputeUpdateQuality(new_object, old_object); + } else { + update_quality_ = 1.0; + } + + // B. Compute measurements + Eigen::Vector3f measured_anchor_point = new_object->anchor_point; + Eigen::Vector3f measured_velocity = ComputeMeasuredVelocity( + new_object, old_object, time_diff); + + // C. Update model + UpdateModel(measured_anchor_point, measured_velocity, time_diff); + age_ += 1; +} + +void KalmanFilter::UpdateWithoutObject(const double& time_diff) { + // Only update belief anchor point + belief_anchor_point_ += belief_velocity_ * time_diff; + age_ += 1; +} + +void KalmanFilter::GetState(Eigen::Vector3f* anchor_point, + Eigen::Vector3f* velocity) { + (*anchor_point) = belief_anchor_point_.cast(); + (*velocity) = belief_velocity_.cast(); +} + +void KalmanFilter::GetState(Eigen::Vector3f* anchor_point, + Eigen::Vector3f* velocity, + Eigen::Vector3f* velocity_accelaration) { + (*anchor_point) = belief_anchor_point_.cast(); + (*velocity) = belief_velocity_.cast(); + (*velocity_accelaration) = belief_velocity_accelaration_.cast(); +} + +void KalmanFilter::Propagate(const double& time_diff) { + // Only propagate tracked motion + if (age_ <= 0) { + return; + } + velocity_covariance_ += s_propagation_noise_ * time_diff * time_diff; +} + +Eigen::VectorXf KalmanFilter::ComputeMeasuredVelocity( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object, + const double& time_diff) { + // Compute 2D velocity measurment for filtering + // Obtain robust measurment via observation redundency + + // Observation I: anchor point velocity measurment + Eigen::Vector3f measured_anchor_point_velocity = + ComputeMeasuredAnchorPointVelocity(new_object, old_object, time_diff); + // Observation II: bbox center velocity measurment + Eigen::Vector3f measured_bbox_center_velocity = + ComputeMeasuredBboxCenterVelocity(new_object, old_object, time_diff); + // Observation III: bbox corner velocity measurment + Eigen::Vector3f measured_bbox_corner_velocity = + ComputeMeasuredBboxCornerVelocity(new_object, old_object, time_diff); + + std::vector measured_candidates; + measured_candidates.push_back(measured_anchor_point_velocity); + measured_candidates.push_back(measured_bbox_center_velocity); + measured_candidates.push_back(measured_bbox_corner_velocity); + Eigen::Vector3f measured_velocity = SelectMeasuredVelocity( + measured_candidates); + return measured_velocity; +} + +Eigen::VectorXf KalmanFilter::ComputeMeasuredAnchorPointVelocity( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object, + const double& time_diff) { + // Compute 2D anchor point velocity measurment + Eigen::Vector3f measured_anchor_point_velocity = new_object->anchor_point - + old_object->anchor_point; + measured_anchor_point_velocity /= time_diff; + measured_anchor_point_velocity(2) = 0.0; + return measured_anchor_point_velocity; +} + +Eigen::VectorXf KalmanFilter::ComputeMeasuredBboxCenterVelocity( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object, + const double& time_diff) { + // Compute 2D bbox center velocity measurment + Eigen::Vector3d old_dir = old_object->direction.cast(); + Eigen::Vector3d old_size = old_object->size.cast(); + Eigen::Vector3d old_center = old_object->center.cast(); + Eigen::Vector3d new_size = old_size; + Eigen::Vector3d new_center = old_center; + ComputeBboxSizeCenter( + new_object->object_ptr->cloud, old_dir, &new_size, &new_center); + Eigen::Vector3f measured_bbox_center_velocity_with_old_dir = + (new_center - old_center).cast(); + measured_bbox_center_velocity_with_old_dir /= time_diff; + measured_bbox_center_velocity_with_old_dir(2) = 0.0; + Eigen::Vector3f measured_bbox_center_velocity = + measured_bbox_center_velocity_with_old_dir; + Eigen::Vector3f project_dir = new_object->anchor_point - + old_object->anchor_point; + if (measured_bbox_center_velocity.dot(project_dir) <= 0) { + measured_bbox_center_velocity = Eigen::Vector3f::Zero(); + } + return measured_bbox_center_velocity; +} + +Eigen::VectorXf KalmanFilter::ComputeMeasuredBboxCornerVelocity( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object, + const double& time_diff) { + // Compute 2D bbox corner velocity measurment + Eigen::Vector3f project_dir = new_object->anchor_point - + old_object->anchor_point; + project_dir.normalize(); + Eigen::Vector3d old_dir = old_object->direction.cast(); + Eigen::Vector3d old_size = old_object->size.cast(); + Eigen::Vector3d old_center = old_object->center.cast(); + Eigen::Vector3d new_size = old_size; + Eigen::Vector3d new_center = old_center; + ComputeBboxSizeCenter( + new_object->object_ptr->cloud, old_dir, &new_size, &new_center); + Eigen::Vector3d ortho_old_dir(-old_dir(1), old_dir(0), 0.0); + + Eigen::Vector3d old_bbox_corner_list[4]; + Eigen::Vector3d new_bbox_corner_list[4]; + Eigen::Vector3d old_bbox_corner = old_center + + old_dir * old_size(0) * 0.5 + ortho_old_dir * old_size(1) * 0.5; + Eigen::Vector3d new_bbox_corner = new_center + + old_dir * new_size(0) * 0.5 + ortho_old_dir * new_size(1) * 0.5; + old_bbox_corner_list[0] = old_bbox_corner; + new_bbox_corner_list[0] = new_bbox_corner; + old_bbox_corner = old_center - + old_dir * old_size(0) * 0.5 + ortho_old_dir * old_size(1) * 0.5; + new_bbox_corner = new_center - + old_dir * new_size(0) * 0.5 + ortho_old_dir * new_size(1) * 0.5; + old_bbox_corner_list[1] = old_bbox_corner; + new_bbox_corner_list[1] = new_bbox_corner; + old_bbox_corner = old_center + + old_dir * old_size(0) * 0.5 - ortho_old_dir * old_size(1) * 0.5; + new_bbox_corner = new_center + + old_dir * new_size(0) * 0.5 - ortho_old_dir * new_size(1) * 0.5; + old_bbox_corner_list[2] = old_bbox_corner; + new_bbox_corner_list[2] = new_bbox_corner; + old_bbox_corner = old_center - + old_dir * old_size(0) * 0.5 - ortho_old_dir * old_size(1) * 0.5; + new_bbox_corner = new_center - + old_dir * new_size(0) * 0.5 - ortho_old_dir * new_size(1) * 0.5; + old_bbox_corner_list[3] = old_bbox_corner; + new_bbox_corner_list[3] = new_bbox_corner; + + Eigen::Vector3f min_bbox_corner_velocity_on_project_dir = + Eigen::Vector3f(100, 100, 0); + float min_bbox_corner_velocity_on_project_dir_gain_norm = + min_bbox_corner_velocity_on_project_dir.norm(); + for (size_t i = 0; i < 4; ++i) { + old_bbox_corner = old_bbox_corner_list[i]; + new_bbox_corner = new_bbox_corner_list[i]; + Eigen::Vector3f bbox_corner_velocity = + ((new_bbox_corner - old_bbox_corner) / time_diff).cast(); + float bbox_corner_velocity_project_dir_inner_product = + bbox_corner_velocity(0) * project_dir(0) + + bbox_corner_velocity(1) * project_dir(1); + float bbox_corner_velocity_project_dir_angle_cos = + bbox_corner_velocity_project_dir_inner_product / + (bbox_corner_velocity.head(2).norm() * project_dir.head(2).norm()); + float bbox_corner_velocity_norm_on_project_dir = + bbox_corner_velocity.head(2).norm() * + bbox_corner_velocity_project_dir_angle_cos; + Eigen::Vector3f bbox_corner_velocity_on_project_dir = project_dir * + bbox_corner_velocity_norm_on_project_dir; + bbox_corner_velocity_on_project_dir(2) = 0.0; + if (bbox_corner_velocity_on_project_dir(0) * project_dir(0) <= 0) { + bbox_corner_velocity_on_project_dir = Eigen::Vector3f::Zero(); + } + Eigen::Vector3f bbox_corner_velocity_on_project_dir_gain = + bbox_corner_velocity_on_project_dir - belief_velocity_.cast(); + if (bbox_corner_velocity_on_project_dir_gain.norm() < + min_bbox_corner_velocity_on_project_dir_gain_norm) { + min_bbox_corner_velocity_on_project_dir = + bbox_corner_velocity_on_project_dir; + min_bbox_corner_velocity_on_project_dir_gain_norm = + bbox_corner_velocity_on_project_dir_gain.norm(); + } + } + return min_bbox_corner_velocity_on_project_dir; +} + +Eigen::Vector3f KalmanFilter::SelectMeasuredVelocity( + const std::vector& candidates) { + // Select measured velocity among candidates + // Strategy I: accoridng motion consistency + return SelectMeasuredVelocityAccordingMotionConsistency(candidates); +} + +Eigen::Vector3f KalmanFilter::SelectMeasuredVelocityAccordingMotionConsistency( + const std::vector& candidates) { + // Select measured velocity among candidates according motion consistency + if (candidates.size() <= 0) + return Eigen::Vector3f::Zero(); + Eigen::Vector3f measured_velocity = candidates[0]; + Eigen::Vector3f measured_velocity_gain = + measured_velocity - belief_velocity_.cast(); + for (size_t i = 1; i < candidates.size(); ++i) { + Eigen::Vector3f candidate_velocity_gain = + candidates[i] - belief_velocity_.cast(); + if (candidate_velocity_gain.norm() < measured_velocity_gain.norm()) { + measured_velocity = candidates[i]; + measured_velocity_gain = candidate_velocity_gain; + } + } + return measured_velocity; +} + +void KalmanFilter::UpdateModel(const Eigen::VectorXf& measured_anchor_point, + const Eigen::VectorXf& measured_velocity, + const double& time_diff) { + // Compute kalman gain + Eigen::Matrix3d mat_c = Eigen::Matrix3d::Identity(); + Eigen::Matrix3d mat_q = s_measurement_noise_ * Eigen::Matrix3d::Identity(); + Eigen::Matrix3d mat_k = velocity_covariance_ * mat_c.transpose() * + (mat_c * velocity_covariance_ * mat_c.transpose() + mat_q).inverse(); + + // Compute posterior belief + Eigen::Vector3d measured_anchor_point_d = + measured_anchor_point.cast(); + Eigen::Vector3d measured_velocity_d = measured_velocity.cast(); + Eigen::Vector3d velocity_gain = mat_k * + (measured_velocity_d - mat_c * belief_velocity_); + + // Breakdown + ComputeBreakdownThreshold(); + if (velocity_gain.norm() > breakdown_threshold_) { + velocity_gain.normalize(); + velocity_gain *= breakdown_threshold_; + } + + belief_anchor_point_ = measured_anchor_point_d; + belief_velocity_ += velocity_gain; + belief_velocity_accelaration_ = velocity_gain / time_diff; + + // Adaptive + if (s_use_adaptive_) { + belief_velocity_ -= belief_velocity_accelaration_ * time_diff; + belief_velocity_accelaration_ *= update_quality_; + belief_velocity_ += belief_velocity_accelaration_ * time_diff; + } + + // Compute posterior covariance + velocity_covariance_ = (Eigen::Matrix3d::Identity() - mat_k * mat_c) * + velocity_covariance_; +} + +void KalmanFilter::ComputeUpdateQuality(const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object) { + // Compute update quality for adaptive filtering + // Strategy A: according to association score + float update_quality_according_association_score = + ComputeUpdateQualityAccordingAssociationScore(new_object); + // Strategy B: according to point number change + float update_quality_according_point_num_change = + ComputeUpdateQualityAccordingPointNumChange(new_object, old_object); + // Pick a smaller one to control possible filter distraction of noises + update_quality_ = update_quality_according_association_score; + if (update_quality_according_association_score > + update_quality_according_point_num_change) { + update_quality_ = update_quality_according_point_num_change; + } +} + +float KalmanFilter::ComputeUpdateQualityAccordingAssociationScore( + const TrackedObjectPtr& new_object) { + // Compute update quality according association score + float association_score = new_object->association_score; + float update_quality = 1; + if (s_association_score_maximum_ == 0) { + return update_quality; + } + update_quality = 1 - (association_score / s_association_score_maximum_); + update_quality = update_quality > 1 ? 1 : update_quality; + update_quality = update_quality < 0 ? 0 : update_quality; + update_quality = update_quality * update_quality; + return update_quality; +} + +float KalmanFilter::ComputeUpdateQualityAccordingPointNumChange( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object) { + // Compute updaet quality according point number change + int new_pt_num = new_object->object_ptr->cloud->size(); + int old_pt_num = old_object->object_ptr->cloud->size(); + if (new_pt_num <= 0 || old_pt_num <= 0) { + return 0; + } + float update_quality = 1 - fabs(new_pt_num - old_pt_num) / + std::max(new_pt_num, old_pt_num); + return update_quality; +} + +void KalmanFilter::ComputeBreakdownThreshold() { + // Set breakdown threshold as 2 times of velocity covariance, and smooth + // it somehow. + breakdown_threshold_ += velocity_covariance_(0, 0) * 2; + breakdown_threshold_ /= 2; + if (breakdown_threshold_ > s_breakdown_threshold_maximum_) { + breakdown_threshold_ = s_breakdown_threshold_maximum_; + } +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/kalman_filter.h b/modules/perception/obstacle/lidar/tracker/hm_tracker/kalman_filter.h new file mode 100644 index 00000000000..476d7d47a5c --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/kalman_filter.h @@ -0,0 +1,235 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_KALMAN_FILTER_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_KALMAN_FILTER_H_ + +#include + +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/base_filter.h" + +namespace apollo { +namespace perception { + +class KalmanFilter : public BaseFilter { + public: + KalmanFilter(); + ~KalmanFilter() {} + + // @brief set use adaptive for all the filter objects + // @params[IN] use_adaptive: flag of whether use adaptive version or not + // @return nothing + static void SetUseAdaptive( + const bool& use_adaptive); + + // @brief set association score maximum for computing update qaulity + // @params[IN] association_score_maximum: association score maximum + // @return true if set successfully, otherwise return false + static bool SetAssociationScoreMaximum( + const double& association_score_maximum); + + // @brief set breakdown threshold maximum for computing breakdown ratio + // @params[IN] breakdown_threshold_maximum: breakdown threshold maximum + // @return true if set successfully, otherwise return false + static bool SetBreakdownThresholdMaximum( + const double& breakdown_threshold_maximum); + + // @brief init initialize parameters for kalman filter + // @params[IN] measurement_noise: noise of measurement + // @params[IN] initial_velocity_noise: initial uncertainty of velocity + // @params[IN] xy_propagation_noise: propagation uncertainty of xy + // @params[IN] z_propagation_noise: propagation uncertainty of z + // @return true if set successfully, otherwise return false + static bool InitParams( + const double& measurement_noise, + const double& initial_velocity_noise, + const double& xy_propagation_noise, + const double& z_propagation_noise); + + // @brief initialize the state of filter + // @params[IN] anchor_point: initial anchor point for filtering + // @params[IN] velocity: initial velocity for filtering + // @return nothing + void Initialize( + const Eigen::Vector3f& anchor_point, + const Eigen::Vector3f& velocity); + + // @brief predict the state of filter + // @params[IN] time_diff: time interval for predicting + // @return predicted states of filtering + Eigen::VectorXf Predict( + const double& time_diff); + + // @brief update filter with object + // @params[IN] new_object: new object for current updating + // @params[IN] old_object: old object for last updating + // @params[IN] time_diff: time interval from last updating + // @return nothing + void UpdateWithObject( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object, + const double& time_diff); + + // @brief update filter without object + // @params[IN] time_diff: time interval from last updating + // @return nothing + void UpdateWithoutObject( + const double& time_diff); + + // @brief get state of filter + // @params[OUT] anchor_point: anchor point of current state + // @params[OUT] velocity: velocity of current state + // @return nothing + void GetState( + Eigen::Vector3f* anchor_point, + Eigen::Vector3f* velocity); + + // @brief get state of filter with accelaration + // @params[OUT] anchor_point: anchor point of current state + // @params[OUT] velocity: velocity of current state + // @params[OUT] velocity_accelaration: accelaration of current state + // @return nothing + void GetState( + Eigen::Vector3f* anchor_point, + Eigen::Vector3f* velocity, + Eigen::Vector3f* velocity_accelaration); + + protected: + // @brief propagate covariance of filter + // @params[IN] time_diff: time interval from last updating + // @return nothing + void Propagate( + const double& time_diff); + + // @brief compute measured velocity + // @params[IN] new_object: new object for current updating + // @params[IN] old_object: old object for last updating + // @params[IN] time_diff: time interval from last updating + // @return measured velocity + Eigen::VectorXf ComputeMeasuredVelocity( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object, + const double& time_diff); + + // @brief compute measured anchor point velocity + // @params[IN] new_object: new object for current updating + // @params[IN] old_object: old object for last updating + // @params[IN] time_diff: time interval from last updating + // @return measured anchor point elocity + Eigen::VectorXf ComputeMeasuredAnchorPointVelocity( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object, + const double& time_diff); + + // @brief compute measured bbox center velocity + // @params[IN] new_object: new object for current updating + // @params[IN] old_object: old object for last updating + // @params[IN] time_diff: time interval from last updating + // @return measured bbox center velocity + Eigen::VectorXf ComputeMeasuredBboxCenterVelocity( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object, + const double& time_diff); + + // @brief compute measured bbox corner velocity + // @params[IN] new_object: new object for current updating + // @params[IN] old_object: old object for last updating + // @params[IN] time_diff: time interval from last updating + // @return measured bbox corner velocity + Eigen::VectorXf ComputeMeasuredBboxCornerVelocity( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object, + const double& time_diff); + + // @brief select measured velocity among candidates + // @params[IN] candidates: candidates of measured velocity + // @return selected measurement of velocity + Eigen::Vector3f SelectMeasuredVelocity( + const std::vector& candidates); + + // @brief select measured velocity among candidates according motion + // consistency + // @params[IN] candidates: candidates of measured velocity + // @return selected measurement of velocity + Eigen::Vector3f SelectMeasuredVelocityAccordingMotionConsistency( + const std::vector& candidates); + + // @brief update filter + // @params[IN] measured_anchor_point: anchor point of given measurement + // @params[IN] measured_velocity: velocity of given measurement + // @params[IN] time_diff: time interval from last updating + // @return nothing + void UpdateModel( + const Eigen::VectorXf& measured_anchor_point, + const Eigen::VectorXf& measured_velocity, + const double& time_diff); + + // @brief compute update quality for adaptive filtering + // @params[IN] new_object: new object for current updating + // @params[IN] old_object: old object for last updating + // @reutrn nothing + void ComputeUpdateQuality( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object); + + // @brief compute update quality by using association score + // @params[IN] new_object: new object for current updating + // @return upate quality according association score + float ComputeUpdateQualityAccordingAssociationScore( + const TrackedObjectPtr& new_object); + + // @brief compute update quality by using association score + // @params[IN] old_object: old object for last updaitng + // @params[IN] new_object: new object for current updating + // @return update quality according point number change + float ComputeUpdateQualityAccordingPointNumChange( + const TrackedObjectPtr& new_object, + const TrackedObjectPtr& old_object); + + // @brief compute breakdown threshold + // @return nothing + void ComputeBreakdownThreshold(); + + protected: + // adaptive + static bool s_use_adaptive_; + static double s_association_score_maximum_; + + // parameters + static Eigen::Matrix3d s_propagation_noise_; + static double s_measurement_noise_; + static double s_initial_velocity_noise_; + static double s_breakdown_threshold_maximum_; + + // filter history + int age_; + + // filter covariances + Eigen::Matrix3d velocity_covariance_; + + // filter states + Eigen::Vector3d belief_anchor_point_; + Eigen::Vector3d belief_velocity_; + Eigen::Vector3d belief_velocity_accelaration_; + double update_quality_; + double breakdown_threshold_; +}; // class KalmanFilter + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_KALMAN_FILTER_H_ diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/object_track.cc b/modules/perception/obstacle/lidar/tracker/hm_tracker/object_track.cc new file mode 100644 index 00000000000..09c796ba2b1 --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/object_track.cc @@ -0,0 +1,449 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include +#include + +#include "modules/common/log.h" +#include "modules/common/util/util.h" +#include "modules/map/hdmap/hdmap.h" +#include "modules/perception/obstacle/common/geometry_util.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/kalman_filter.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/object_track.h" + +namespace apollo { +namespace perception { + +int ObjectTrack::s_track_idx_ = 0; +FilterType ObjectTrack::s_filter_method_ = KALMAN_FILTER; +int ObjectTrackSet::s_track_consecutive_invisible_maximum_ = 1; +float ObjectTrackSet::s_track_visible_ratio_minimum_ = 0.6; +int ObjectTrack::s_track_cached_history_size_maximum_ = 5; +double ObjectTrack::s_acceleration_noise_maximum_ = 5; +double ObjectTrack::s_speed_noise_maximum_ = 0.4; + +bool ObjectTrack::SetFilterMethod(const std::string& filter_method_name) { + if (filter_method_name == "kalman_filter") { + s_filter_method_ = KALMAN_FILTER; + AINFO << "filter method of object track is " << filter_method_name; + return true; + } + AERROR << "invalid filter method name of object track!"; + return false; +} + +bool ObjectTrack::SetTrackCachedHistorySizeMaximum( + const int& track_cached_history_size_maximum) { + if (track_cached_history_size_maximum > 0) { + s_track_cached_history_size_maximum_ = track_cached_history_size_maximum; + AINFO << "track cached history size maximum of object track is " + << s_track_cached_history_size_maximum_; + return true; + } + AERROR << "invalid track cached history size maximum of object track!"; + return false; +} + +bool ObjectTrack::SetSpeedNoiseMaximum(const double& speed_noise_maximum) { + if (speed_noise_maximum > 0) { + s_speed_noise_maximum_ = speed_noise_maximum; + AINFO << "speed noise maximum of object track is " + << s_speed_noise_maximum_; + return true; + } + AERROR << "invalid speed noise maximum of object track!"; + return false; +} + +bool ObjectTrack::SetAccelerationNoiseMaximum( + const double& acceleration_noise_maximum) { + if (acceleration_noise_maximum > 0) { + s_acceleration_noise_maximum_ = acceleration_noise_maximum; + AINFO << "acceleration noise maximum of object track is " + << s_acceleration_noise_maximum_; + return true; + } + AERROR << "invalid acceleration noise maximum of object track!"; + return false; +} + +int ObjectTrack::GetNextTrackId() { + // Get next avaiable track id + int ret_track_id = s_track_idx_; + if (s_track_idx_ == INT_MAX) { + s_track_idx_ = 0; + } else { + s_track_idx_++; + } + return ret_track_id; +} + +ObjectTrack::ObjectTrack(TrackedObjectPtr obj) { + // Initialize filter + Eigen::Vector3f initial_anchor_point = obj->anchor_point; + Eigen::Vector3f initial_velocity = Eigen::Vector3f::Zero(); + if (s_filter_method_ == KALMAN_FILTER) { + filter_ = new KalmanFilter(); + } else { + filter_ = new KalmanFilter(); + AWARN << "invalid filter method! default filter (KalmanFilter) in use!"; + } + filter_->Initialize(initial_anchor_point, initial_velocity); + + // Initialize track info + idx_ = ObjectTrack::GetNextTrackId(); + age_ = 1; + total_visible_count_ = 1; + consecutive_invisible_count_ = 0; + period_ = 0.0; + current_object_ = obj; + + // Initialize track states + is_static_hypothesis_ = false; + belief_anchor_point_ = initial_anchor_point; + belief_velocity_ = initial_velocity; + belief_velocity_accelaration_ = Eigen::Vector3f::Zero(); + // NEED TO NOTICE: All the states would be collected mainly based on states + // of tracked object. Thus, update tracked object when you update the state + // of track !!!!! + obj->velocity = belief_velocity_; + + // Initialize object direction with its lane direction + obj->direction = obj->lane_direction; +} + +ObjectTrack::~ObjectTrack() { + if (filter_) { + delete filter_; + filter_ = nullptr; + } +} + +Eigen::VectorXf ObjectTrack::Predict(const double& time_diff) { + // Get the predict of filter + Eigen::VectorXf filter_predict = filter_->Predict(time_diff); + // Get the predict of track + Eigen::VectorXf track_predict = filter_predict; + track_predict(0) = belief_anchor_point_(0) + belief_velocity_(0) * time_diff; + track_predict(1) = belief_anchor_point_(1) + belief_velocity_(1) * time_diff; + track_predict(2) = belief_anchor_point_(2) + belief_velocity_(2) * time_diff; + track_predict(3) = belief_velocity_(0); + track_predict(4) = belief_velocity_(1); + track_predict(5) = belief_velocity_(2); + return track_predict; +} + +void ObjectTrack::UpdateWithObject(TrackedObjectPtr* new_object, + const double& time_diff) { + // A. update object track + // A.1 update filter + filter_->UpdateWithObject((*new_object), current_object_, time_diff); + filter_->GetState(&belief_anchor_point_, &belief_velocity_); + // NEED TO NOTICE: All the states would be collected mainly based on states + // of tracked object. Thus, update tracked object when you update the state + // of track !!!!! + (*new_object)->anchor_point = belief_anchor_point_; + (*new_object)->velocity = belief_velocity_; + + belief_velocity_accelaration_ = + ((*new_object)->velocity - current_object_->velocity) / time_diff; + // A.2 update track info + age_++; + total_visible_count_++; + consecutive_invisible_count_ = 0; + period_ += time_diff; + // A.3 update history + int history_size = history_objects_.size(); + if (history_size >= s_track_cached_history_size_maximum_) { + history_objects_.pop_front(); + } + history_objects_.push_back(current_object_); + current_object_ = *new_object; + + // B. smooth object track + // B.1 smooth velocity + SmoothTrackVelocity((*new_object), time_diff); + // B.2 smooth orientation + SmoothTrackOrientation(); +} + +void ObjectTrack::UpdateWithoutObject(const double& time_diff) { + // A. update object of track + TrackedObjectPtr new_obj(new TrackedObject()); + new_obj->clone(*current_object_); + Eigen::Vector3f predicted_shift = belief_velocity_ * time_diff; + new_obj->anchor_point = current_object_->anchor_point + predicted_shift; + new_obj->barycenter = current_object_->barycenter + predicted_shift; + new_obj->center = current_object_->center + predicted_shift; + + // B. update cloud & polygon + pcl_util::PointCloudPtr pc = new_obj->object_ptr->cloud; + for (size_t j = 0; j < pc->points.size(); ++j) { + pc->points[j].x += predicted_shift[0]; + pc->points[j].y += predicted_shift[1]; + pc->points[j].z += predicted_shift[2]; + } + PolygonDType& polygon = new_obj->object_ptr->polygon; + for (size_t j = 0; j < polygon.points.size(); ++j) { + polygon.points[j].x += predicted_shift[0]; + polygon.points[j].y += predicted_shift[1]; + polygon.points[j].z += predicted_shift[2]; + } + + // C. update filter + filter_->UpdateWithoutObject(time_diff); + + // D. update states of track + belief_anchor_point_ = new_obj->anchor_point; + // NEED TO NOTICE: All the states would be collected mainly based on states + // of tracked object. Thus, update tracked object when you update the state + // of track !!!! + new_obj->velocity = belief_velocity_; + + // E. update track info + age_++; + consecutive_invisible_count_++; + period_ += time_diff; + + // F. update history + int history_size = history_objects_.size(); + if (history_size >= s_track_cached_history_size_maximum_) { + history_objects_.pop_front(); + } + history_objects_.push_back(current_object_); + current_object_ = new_obj; +} + +void ObjectTrack::UpdateWithoutObject(const Eigen::VectorXf& predict_state, + const double& time_diff) { + // A. update object of track + TrackedObjectPtr new_obj(new TrackedObject()); + new_obj->clone(*current_object_); + Eigen::Vector3f predicted_shift = predict_state.tail(3) * time_diff; + new_obj->anchor_point = current_object_->anchor_point + predicted_shift; + new_obj->barycenter = current_object_->barycenter + predicted_shift; + new_obj->center = current_object_->center + predicted_shift; + + // B. update cloud & polygon + pcl_util::PointCloudPtr pc = new_obj->object_ptr->cloud; + for (size_t j = 0; j < pc->points.size(); ++j) { + pc->points[j].x += predicted_shift[0]; + pc->points[j].y += predicted_shift[1]; + pc->points[j].z += predicted_shift[2]; + } + PolygonDType& polygon = new_obj->object_ptr->polygon; + for (size_t j = 0; j < polygon.points.size(); ++j) { + polygon.points[j].x += predicted_shift[0]; + polygon.points[j].y += predicted_shift[1]; + polygon.points[j].z += predicted_shift[2]; + } + + // C. update filter without object + filter_->UpdateWithoutObject(time_diff); + + // D. update states of track + belief_anchor_point_ = new_obj->anchor_point; + // NEED TO NOTICE: All the states would be collected mainly based on states + // of tracked object. Thus, update tracked object when you update the state + // of track !!!! + new_obj->velocity = belief_velocity_; + + // E. update track info + age_++; + consecutive_invisible_count_++; + period_ += time_diff; + + // F. update history + int history_size = history_objects_.size(); + if (history_size >= s_track_cached_history_size_maximum_) { + history_objects_.pop_front(); + } + history_objects_.push_back(current_object_); + current_object_ = new_obj; +} + +void ObjectTrack::SmoothTrackVelocity(const TrackedObjectPtr& new_object, + const double& time_diff) { + // A. keep motion if accelaration of filter is greater than a threshold + Eigen::Vector3f filter_anchor_point = Eigen::Vector3f::Zero(); + Eigen::Vector3f filter_velocity = Eigen::Vector3f::Zero(); + Eigen::Vector3f filter_velocity_accelaration = Eigen::Vector3f::Zero(); + filter_->GetState(&filter_anchor_point, &filter_velocity, + &filter_velocity_accelaration); + double filter_accelaration = filter_velocity_accelaration.norm(); + bool need_keep_motion = filter_accelaration > s_acceleration_noise_maximum_; + if (need_keep_motion) { + Eigen::Vector3f last_velocity = Eigen::Vector3f::Zero(); + if (history_objects_.size() > 0) { + last_velocity = history_objects_[history_objects_.size() - 1]->velocity; + } + belief_velocity_ = last_velocity; + belief_velocity_accelaration_ = Eigen::Vector3f::Zero(); + // NEED TO NOTICE: All the states would be collected mainly based on states + // of tracked object. Thus, update tracked object when you update the state + // of track !!!! + current_object_->velocity = belief_velocity_; + // keep static hypothesis + return; + } + // B. static hypothesis check & claping noise + is_static_hypothesis_ = + CheckTrackStaticHypothesis(new_object->object_ptr, time_diff); + if (is_static_hypothesis_) { + belief_velocity_ = Eigen::Vector3f::Zero(); + belief_velocity_accelaration_ = Eigen::Vector3f::Zero(); + // NEED TO NOTICE: All the states would be collected mainly based on states + // of tracked object. Thus, update tracked object when you update the state + // of track !!!! + current_object_->velocity = belief_velocity_; + } +} + +void ObjectTrack::SmoothTrackOrientation() { + Eigen::Vector3f current_dir = current_object_->direction; + float current_speed = current_object_->velocity.head(2).norm(); + bool velocity_is_obvious = current_speed > (s_speed_noise_maximum_ * 2); + if (velocity_is_obvious) { + current_dir = current_object_->velocity; + } else { + current_dir = current_object_->lane_direction; + } + current_dir(2) = 0; + current_dir.normalize(); + Eigen::Vector3d new_size; + Eigen::Vector3d new_center; + ComputeBboxSizeCenter(current_object_->object_ptr->cloud, + current_dir.cast(), &new_size, + &new_center); + current_object_->direction = current_dir; + current_object_->center = new_center.cast(); + current_object_->size = new_size.cast(); +} + +bool ObjectTrack::CheckTrackStaticHypothesis(const ObjectPtr& new_object, + const double& time_diff) { + // A. check whether track velocity angle changed obviously + bool is_velocity_angle_change = + CheckTrackStaticHypothesisByVelocityAngleChange(new_object, time_diff); + + // B. evaluate velocity level + double speed = belief_velocity_.head(2).norm(); + bool velocity_is_noise = speed < (s_speed_noise_maximum_ / 2); + bool velocity_is_small = speed < (s_speed_noise_maximum_ / 1); + if (velocity_is_noise) { + return true; + } + // NEED TO NOTICE: claping small velocity may not reasonable when the true + // velocity of target object is really small. e.g. a moving out vehicle in + // a parking lot. Thus, instead of clapping all the small velocity, we clap + // those whose history trajectory or performance is close to a static one. + if (velocity_is_small && is_velocity_angle_change) { + return true; + } + return false; +} + +bool ObjectTrack::CheckTrackStaticHypothesisByVelocityAngleChange( + const ObjectPtr& new_object, const double& time_diff) { + Eigen::Vector3f previous_velocity = + history_objects_[history_objects_.size() - 1]->velocity; + Eigen::Vector3f current_velocity = current_object_->velocity; + double velocity_angle_change = + VectorTheta2dXy(previous_velocity, current_velocity); + if (fabs(velocity_angle_change) > M_PI / 4.0) { + return true; + } + return false; +} + +/*class ObjectTrackSet*/ +ObjectTrackSet::ObjectTrackSet() { tracks_.reserve(1000); } + +ObjectTrackSet::~ObjectTrackSet() { Clear(); } + +bool ObjectTrackSet::SetTrackConsecutiveInvisibleMaximum( + const int& track_consecutive_invisible_maximum) { + if (track_consecutive_invisible_maximum >= 0) { + s_track_consecutive_invisible_maximum_ = + track_consecutive_invisible_maximum; + AINFO << "track consecutive invisible maximum of object track set is " + << s_track_consecutive_invisible_maximum_; + return true; + } + AERROR << "invalid track consecutive invisible maximum of object track! "; + return false; +} + +bool ObjectTrackSet::SetTrackVisibleRatioMinimum( + const float& track_visible_ratio_minimum) { + if (track_visible_ratio_minimum >= 0 && track_visible_ratio_minimum <= 1) { + s_track_visible_ratio_minimum_ = track_visible_ratio_minimum; + AINFO << "track visible ratio minimum of object track set is " + << s_track_visible_ratio_minimum_; + return true; + } + AERROR << "invalid track visible ratio minimum of object track! "; + return false; +} + +void ObjectTrackSet::Clear() { + for (size_t i = 0; i < tracks_.size(); i++) { + if (tracks_[i]) { + delete (tracks_[i]); + tracks_[i] = nullptr; + } + } + tracks_.clear(); +} + +int ObjectTrackSet::RemoveLostTracks() { + size_t track_num = 0; + for (size_t i = 0; i < tracks_.size(); ++i) { + // A. remove tracks invisible ratio less than given minimum + float track_visible_ratio = + tracks_[i]->total_visible_count_ * 1.0f / tracks_[i]->age_; + if (track_visible_ratio < s_track_visible_ratio_minimum_) continue; + // B. remove tracks consecutive invisible count greater than given maximum + int track_consecutive_invisible_count = + tracks_[i]->consecutive_invisible_count_; + if (track_consecutive_invisible_count > + s_track_consecutive_invisible_maximum_) + continue; + // C. update + if (i == track_num) { + track_num++; + } else { + ObjectTrackPtr tmp = tracks_[i]; + tracks_[i] = tracks_[track_num]; + tracks_[track_num] = tmp; + track_num++; + } + } + // remove lost tracks + int no_removed = tracks_.size() - track_num; + for (size_t i = track_num; i < tracks_.size(); ++i) { + if (tracks_[i] != nullptr) { + delete (tracks_[i]); + tracks_[i] = nullptr; + } + } + tracks_.resize(track_num); + return no_removed; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/object_track.h b/modules/perception/obstacle/lidar/tracker/hm_tracker/object_track.h new file mode 100644 index 00000000000..89e0534f0ee --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/object_track.h @@ -0,0 +1,215 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_OBJECT_TRACK_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_OBJECT_TRACK_H_ + +#include +#include +#include +#include + +#include "Eigen/Core" +#include "boost/shared_ptr.hpp" + +#include "modules/common/macro.h" +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/base_filter.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/tracked_object.h" + +namespace apollo { +namespace perception { + +class ObjectTrack { + public: + explicit ObjectTrack(TrackedObjectPtr obj); + ~ObjectTrack(); + + // @brief set filter method for all the object track objects + // @params[IN] filter_method: method name of filtering algorithm + // @return true if set successfully, otherwise return false + static bool SetFilterMethod(const std::string& filter_method_name); + + // @brief set track cached history size maximum + // @params[IN] track_cached_history_size_maximum: track cached history size + // maximum + // @return true if set successfully, otherwise return false + static bool SetTrackCachedHistorySizeMaximum( + const int& track_cached_history_size_maximum); + + // @brief set acceleration noise maximum + // @params[IN] acceleration_noise_maximum: acceleration noise maximum + // @return true if set successfully, otherwise return false + static bool SetAccelerationNoiseMaximum( + const double& acceleration_noise_maximum); + + // @brief set speed noise maximum + // @params[IN] speed noise maximum: speed noise maximum + // @return true if set successfully, otherwise return false + static bool SetSpeedNoiseMaximum(const double& speed_noise_maximum); + + // @brief get next avaiable track id + // @return next avaiable track id + static int GetNextTrackId(); + + // @brief predict the state of track + // @params[IN] time_diff: time interval for predicting + // @return predicted states of track + Eigen::VectorXf Predict(const double& time_diff); + + // @brief update track with object + // @params[IN] new_object: recent detected object for current updating + // @params[IN] time_diff: time interval from last updating + // @return nothing + void UpdateWithObject(TrackedObjectPtr* new_object, const double& time_diff); + + // @brief update track without object + // @params[IN] time_diff: time interval from last updating + // @return nothing + void UpdateWithoutObject(const double& time_diff); + + // @brief update track without object with given predicted state + // @params[IN] predict_state: given predicted state of track + // @params[IN] time_diff: time interval from last updating + // @return nothing + void UpdateWithoutObject(const Eigen::VectorXf& predict_state, + const double& time_diff); + + protected: + // @brief smooth velocity over track history + // @params[IN] new_object: new detected object for updating + // @params[IN] time_diff: time interval from last updating + // @return nothing + void SmoothTrackVelocity(const TrackedObjectPtr& new_object, + const double& time_diff); + + // @brief smooth orientation over track history + // @return nothing + void SmoothTrackOrientation(); + + // @brief check whether track is static or not + // @params[IN] new_object: new detected object just updated + // @params[IN] time_diff: time interval between last two updating + // @return true if track is static, otherwise return false + bool CheckTrackStaticHypothesis(const ObjectPtr& new_object, + const double& time_diff); + + // @brief sub strategy of checking whether track is static or not via + // considering the velocity angle change + // @params[IN] new_object: new detected object just updated + // @params[IN] time_diff: time interval between last two updating + // @return true if track is static, otherwise return false + bool CheckTrackStaticHypothesisByVelocityAngleChange( + const ObjectPtr& new_object, const double& time_diff); + + private: + ObjectTrack(); + + public: + // algorithm setup + static FilterType s_filter_method_; + BaseFilter* filter_; + + // basic info + int idx_; + int age_; + int total_visible_count_; + int consecutive_invisible_count_; + double period_; + + TrackedObjectPtr current_object_; + + // history + std::deque history_objects_; + + // states + // NEED TO NOTICE: All the states would be collected mainly based on states + // of tracked object. Thus, update tracked object when you update the state + // of track !!!!! + bool is_static_hypothesis_; + Eigen::Vector3f belief_anchor_point_; + Eigen::Vector3f belief_velocity_; + Eigen::Vector3f belief_velocity_accelaration_; + + private: + // global setup + static int s_track_idx_; + static int s_track_cached_history_size_maximum_; + static double s_speed_noise_maximum_; + static double s_acceleration_noise_maximum_; + + DISALLOW_COPY_AND_ASSIGN(ObjectTrack); +}; // class ObjectTrack + +typedef ObjectTrack* ObjectTrackPtr; + +class ObjectTrackSet { + public: + ObjectTrackSet(); + ~ObjectTrackSet(); + + // @brief set track consecutive invisible maximum + // @params[IN] track_consecutive_invisible_maximum: track consecutive + // invisible maximum + // @return true if set successfully, otherwise return false + static bool SetTrackConsecutiveInvisibleMaximum( + const int& track_consecutive_invisible_maximum); + + // @brief set track visible ratio minimum + // @params[IN] track_visible_ratio_minimum: track visible ratio minimum + // @return true if set successfully, otherwise return false + static bool SetTrackVisibleRatioMinimum( + const float& track_visible_ratio_minimum); + + // @brief get maintained tracks + // @return maintained tracks + inline std::vector& GetTracks() { return tracks_; } + + // @brief get maintained tracks + // @return maintained tracks + inline const std::vector& GetTracks() const { + return tracks_; + } + + // @brief get size of maintained tracks + // @return size of maintained tracks + inline int Size() const { return tracks_.size(); } + + // @brief add track to current set of maintained tracks + // @params[IN] track: adding track + // @return nothing + void AddTrack(const ObjectTrackPtr& track) { tracks_.push_back(track); } + + // @brief remove lost tracks + // @return number of removed tracks + int RemoveLostTracks(); + + // @brief clear maintained tracks + // @return nothing + void Clear(); + + public: + static int s_track_consecutive_invisible_maximum_; + static float s_track_visible_ratio_minimum_; + + private: + std::vector tracks_; +}; // class ObjectTrackSet + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_OBJECT_TRACK_H_ diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/track_object_distance.cc b/modules/perception/obstacle/lidar/tracker/hm_tracker/track_object_distance.cc new file mode 100644 index 00000000000..aeb2cf05792 --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/track_object_distance.cc @@ -0,0 +1,238 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include + +#include "modules/common/log.h" +#include "modules/perception/obstacle/common/geometry_util.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/track_object_distance.h" + +namespace apollo { +namespace perception { + +double TrackObjectDistance::s_location_distance_weight_ = 0.6; +double TrackObjectDistance::s_direction_distance_weight_ = 0.2; +double TrackObjectDistance::s_bbox_size_distance_weight_ = 0.1; +double TrackObjectDistance::s_point_num_distance_weight_ = 0.1; +double TrackObjectDistance::s_histogram_distance_weight_ = 0.5; + +bool TrackObjectDistance::SetLocationDistanceWeight( + const float& location_distance_weight) { + if (location_distance_weight >= 0) { + s_location_distance_weight_ = location_distance_weight; + AINFO << "location distance weight of TrackObjectDistance is " + << s_location_distance_weight_; + return true; + } + AERROR << "invalid location distance weight of TrackeObjectDistance!"; + return false; +} + +bool TrackObjectDistance::SetDirectionDistanceWeight( + const float& direction_distance_weight) { + if (direction_distance_weight >= 0) { + s_direction_distance_weight_ = direction_distance_weight; + AINFO << "direction distance weight of TrackObjectDistance is " + << s_direction_distance_weight_; + return true; + } + AERROR << "invalid direction distance weight of TrackObjectDistance!"; + return false; +} + +bool TrackObjectDistance::SetBboxSizeDistanceWeight( + const float& bbox_size_distance_weight) { + if (bbox_size_distance_weight >= 0) { + s_bbox_size_distance_weight_ = bbox_size_distance_weight; + AINFO << "bbox size distance weight of TrackObjectDistance is " + << s_bbox_size_distance_weight_; + return true; + } + AERROR << "invalid bbox size distance weight of TrackObjectDistance!"; + return false; +} + +bool TrackObjectDistance::SetPointNumDistanceWeight( + const float& point_num_distance_weight) { + if (point_num_distance_weight >= 0) { + s_point_num_distance_weight_ = point_num_distance_weight; + AINFO << "point num distance weight of TrackObjectDistance is " + << s_point_num_distance_weight_; + return true; + } + AERROR << "invalid point num distance weight of TrackObjectDistance!"; + return false; +} + +bool TrackObjectDistance::SetHistogramDistanceWeight( + const float& histogram_distance_weight) { + if (histogram_distance_weight >= 0) { + s_histogram_distance_weight_ = histogram_distance_weight; + AINFO << "histogram distance weight of TrackObjectDistance is " + << s_histogram_distance_weight_; + return true; + } + AERROR << "invalid histogram distance weight of TrackObjectDistance!"; + return false; +} + +float TrackObjectDistance::ComputeDistance(const ObjectTrackPtr& track, + const Eigen::VectorXf& track_predict, + const TrackedObjectPtr& new_object) { + // Compute distance for given trakc & object + float location_distance = ComputeLocationDistance( + track, track_predict, new_object); + float direction_distance = ComputeDirectionDistance( + track, track_predict, new_object); + float bbox_size_distance = ComputeBboxSizeDistance(track, new_object); + float point_num_distance = ComputePointNumDistance(track, new_object); + float histogram_distance = ComputeHistogramDistance(track, new_object); + + float result_distance = s_location_distance_weight_ * location_distance + + s_direction_distance_weight_ * direction_distance + + s_bbox_size_distance_weight_ * bbox_size_distance + + s_point_num_distance_weight_ * point_num_distance + + s_histogram_distance_weight_ * histogram_distance; + return result_distance; +} + +float TrackObjectDistance::ComputeLocationDistance(const ObjectTrackPtr& track, + const Eigen::VectorXf& track_predict, + const TrackedObjectPtr& new_object) { + // Compute locatin distance for given track & object + // range from 0 to positive infinity + const TrackedObjectPtr& last_object = track->current_object_; + Eigen::Vector2f measured_anchor_point = new_object->anchor_point.head(2); + Eigen::Vector2f predicted_anchor_point = track_predict.head(2); + Eigen::Vector2f measurement_predict_diff = measured_anchor_point - + predicted_anchor_point; + float location_distance = measurement_predict_diff.norm(); + + Eigen::Vector2f track_motion_dir = last_object->velocity.head(2); + float track_speed = track_motion_dir.norm(); + track_motion_dir /= track_speed; + /* Assume location distance is generated from a normal distribution with + * symmetric variance. Modify its variance when track speed greater than + * a threshold. Penalize variance in the orthogonal direction of motion. */ + if (track_speed > 2) { + Eigen::Vector2f track_motion_orthogonal_dir = Eigen::Vector2f( + track_motion_dir(1), -track_motion_dir(0)); + float motion_dir_distance = + track_motion_dir(0) * measurement_predict_diff(0) + + track_motion_dir(1) * measurement_predict_diff(1); + float motion_orthogonal_dir_distance = + track_motion_orthogonal_dir(0) * measurement_predict_diff(0) + + track_motion_orthogonal_dir(1) * measurement_predict_diff(1); + location_distance = sqrt( + motion_dir_distance * motion_dir_distance * 0.25 + + motion_orthogonal_dir_distance * motion_orthogonal_dir_distance * 4); + } + return location_distance; +} + +float TrackObjectDistance::ComputeDirectionDistance(const ObjectTrackPtr& track, + const Eigen::VectorXf& track_predict, + const TrackedObjectPtr& new_object) { + // Compute direction distance for given track & object + // range from 0 to 2 + const TrackedObjectPtr& last_object = track->current_object_; + Eigen::Vector3f old_anchor_point = last_object->anchor_point; + Eigen::Vector3f new_anchor_point = new_object->anchor_point; + Eigen::Vector3f anchor_point_shift = new_anchor_point - old_anchor_point; + anchor_point_shift(2) = 0; + Eigen::Vector3f predicted_track_motion = track_predict.head(6).tail(3); + predicted_track_motion(2) = 0; + + double cos_theta = 0.994; // average cos + if (!anchor_point_shift.head(2).isZero() && + !predicted_track_motion.head(2).isZero()) { + cos_theta = VectorCosTheta2dXy(predicted_track_motion, + anchor_point_shift); + } + float direction_distance = -cos_theta + 1.0; + return direction_distance; +} + +float TrackObjectDistance::ComputeBboxSizeDistance(const ObjectTrackPtr& track, + const TrackedObjectPtr& new_object) { + // Compute bbox size distance for given track & object + // range from 0 to 1 + const TrackedObjectPtr& last_object = track->current_object_; + Eigen::Vector3f old_bbox_dir = last_object->direction; + Eigen::Vector3f new_bbox_dir = new_object->direction; + Eigen::Vector3f old_bbox_size = last_object->size; + Eigen::Vector3f new_bbox_size = new_object->size; + + float size_distance = 0.0; + double dot_val_00 = fabs(old_bbox_dir(0) * new_bbox_dir(0) + + old_bbox_dir(1) * new_bbox_dir(1)); + double dot_val_01 = fabs(old_bbox_dir(0) * new_bbox_dir(1) - + old_bbox_dir(1) * new_bbox_dir(0)); + bool bbox_dir_close = dot_val_00 > dot_val_01; + + if (bbox_dir_close) { + float diff_1 = fabs(old_bbox_size(0) - new_bbox_size(0)) / + std::max(old_bbox_size(0), new_bbox_size(0)); + float diff_2 = fabs(old_bbox_size(1) - new_bbox_size(1)) / + std::max(old_bbox_size(1), new_bbox_size(1)); + size_distance = std::min(diff_1, diff_2); + } else { + float diff_1 = fabs(old_bbox_size(0) - new_bbox_size(1)) / + std::max(old_bbox_size(0), new_bbox_size(1)); + float diff_2 = fabs(old_bbox_size(1) - new_bbox_size(0)) / + std::max(old_bbox_size(1), new_bbox_size(0)); + size_distance = std::min(diff_1, diff_2); + } + return size_distance; +} + +float TrackObjectDistance::ComputePointNumDistance(const ObjectTrackPtr& track, + const TrackedObjectPtr& new_object) { + // Compute point num distance for given track & object + // range from 0 and 1 + const TrackedObjectPtr& last_object = track->current_object_; + int old_point_number = last_object->object_ptr->cloud->size(); + int new_point_number = new_object->object_ptr->cloud->size(); + float point_num_distance = fabs(old_point_number - new_point_number) * 1.0f / + std::max(old_point_number, new_point_number); + return point_num_distance; +} + +float TrackObjectDistance::ComputeHistogramDistance(const ObjectTrackPtr& track, + const TrackedObjectPtr& new_object) { + // Compute histogram distance for given track & object + // range from 0 to 3 + const TrackedObjectPtr& last_object = track->current_object_; + std::vector& old_object_shape_features = + last_object->object_ptr->shape_features; + std::vector& new_object_shape_features = + new_object->object_ptr->shape_features; + if (old_object_shape_features.size() != new_object_shape_features.size()) { + AERROR << "sizes of compared features not matched. TrackObjectDistance"; + return FLT_MAX; + } + + float histogram_distance = 0.0; + for (size_t i = 0; i < old_object_shape_features.size(); ++i) { + histogram_distance += std::fabs(old_object_shape_features[i] - + new_object_shape_features[i]); + } + return histogram_distance; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/track_object_distance.h b/modules/perception/obstacle/lidar/tracker/hm_tracker/track_object_distance.h new file mode 100644 index 00000000000..7a66fd9ba61 --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/track_object_distance.h @@ -0,0 +1,141 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_TRACK_OBJECT_DISTANCE_H_ +#define MODULES_PERCEPTION_OBSTACLE_TRACK_OBJECT_DISTANCE_H_ + +#include + +#include "Eigen/Core" +#include "modules/common/macro.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/object_track.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/tracked_object.h" + +namespace apollo { +namespace perception { + +class TrackObjectDistance { + public: + // @brief set weight of location dist for all the track object distance + // objects + // @params[IN] location_distance_weight: weight of location dist + // @return true if set successfully, otherwise return false + static bool SetLocationDistanceWeight( + const float& location_distance_weight); + + // @brief set weight of direction dist for all the track object distance + // objects + // @params[IN] direction_distance_weight: weight of direction dist + // @return true if set successfully, otherwise return false + static bool SetDirectionDistanceWeight( + const float& direction_distance_weight); + + // @brief set weight of bbox size dist for all the track object distance + // objects + // @params[IN] bbox_size_distance_weight: weight of bbox size dist + // @return true if set successfully, otherwise return false + static bool SetBboxSizeDistanceWeight( + const float& bbox_size_distance_weight); + + // @brief set weight of point num dist for all the track object distance + // objects + // @params[IN] point_num_distance_weight: weight of point num dist + // @return true if set successfully, otherwise return false + static bool SetPointNumDistanceWeight( + const float& point_num_distance_weight); + + // @brief set weight of histogram dist for all the track object distance + // objects + // @params[IN] weight_histogram_dist: weight of histogram dist + // @return true if set successfully, otherwise return false + static bool SetHistogramDistanceWeight( + const float& histogram_distance_weight); + + // @brief compute distance for given track & object + // @params[IN] track: track for distance computing + // @params[IN] track_predict: predicted state of given track + // @params[IN] new_object: recently detected object + // @return computed distance + static float ComputeDistance( + const ObjectTrackPtr& track, + const Eigen::VectorXf& track_predict, + const TrackedObjectPtr& new_object); + + std::string Name() const { + return "TrackObjectDistance"; + } + + private: + // @brief compute location distance for given track & object + // @params[IN] track: track for distance computing + // @params[IN] track_predict: predicted state of given track + // @params[IN] new_object: recently detected object + // @return location distacne of given + static float ComputeLocationDistance( + const ObjectTrackPtr& track, + const Eigen::VectorXf& track_predict, + const TrackedObjectPtr& new_object); + + // @brief compute direction distance for given track & object + // @params[IN] track: track for distance computing + // @params[IN] track_predict: predicted state of given track + // @params[IN] new_object: recently detected object + // @return direction distance of given + static float ComputeDirectionDistance( + const ObjectTrackPtr& track, + const Eigen::VectorXf& track_predict, + const TrackedObjectPtr& new_object); + + // @brief compute bbox size distance for given track & object + // @params[IN] track: track for distance computing + // @params[IN] new_object: recently detected object + // @return bbox size distance of given + static float ComputeBboxSizeDistance( + const ObjectTrackPtr& track, + const TrackedObjectPtr& new_object); + + // @brief compute point num distance for given track & object + // @params[IN] track: track for distance computing + // @params[IN] new_object: recently detected object + // @return point num distance of given + static float ComputePointNumDistance( + const ObjectTrackPtr& track, + const TrackedObjectPtr& new_object); + + // @brief compute histogram distance for given track & object + // @params[IN] track: track for distance computing + // @params[IN] new_object: recently detected object + // @return histogram distance of given + static float ComputeHistogramDistance( + const ObjectTrackPtr& track, + const TrackedObjectPtr& new_object); + + protected: + // distance weights + static double s_location_distance_weight_; + static double s_direction_distance_weight_; + static double s_bbox_size_distance_weight_; + static double s_point_num_distance_weight_; + static double s_histogram_distance_weight_; + + private: + DISALLOW_COPY_AND_ASSIGN(TrackObjectDistance); +}; // class TrackObjectDistance + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_TRACK_OBJECT_DISTANCE_H_ diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/tracked_object.cc b/modules/perception/obstacle/lidar/tracker/hm_tracker/tracked_object.cc new file mode 100644 index 00000000000..ab25805f4bb --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/tracked_object.cc @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/tracked_object.h" + +#include "modules/perception/obstacle/common/geometry_util.h" + +namespace apollo { +namespace perception { + +TrackedObject::TrackedObject(ObjectPtr obj_ptr) : object_ptr(obj_ptr) { + if (object_ptr != nullptr) { + barycenter = GetCloudBarycenter( + object_ptr->cloud) + .cast(); + center = object_ptr->center.cast(); + size = Eigen::Vector3f(object_ptr->length, object_ptr->width, + object_ptr->height); + direction = object_ptr->direction.cast(); + lane_direction = Eigen::Vector3f::Zero(); + anchor_point = barycenter; + velocity = Eigen::Vector3f::Zero(); + acceleration = Eigen::Vector3f::Zero(); + type = object_ptr->type; + } +} + +void TrackedObject::clone(const TrackedObject& rhs) { + *this = rhs; + object_ptr.reset(new Object()); + object_ptr->clone(*rhs.object_ptr); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/tracker/hm_tracker/tracked_object.h b/modules/perception/obstacle/lidar/tracker/hm_tracker/tracked_object.h new file mode 100644 index 00000000000..d47cecc4a9a --- /dev/null +++ b/modules/perception/obstacle/lidar/tracker/hm_tracker/tracked_object.h @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_TRACKED_OBJECT_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_TRACKED_OBJECT_H_ + +#include +#include +#include + +#include "Eigen/Core" +#include "modules/perception/obstacle/base/object.h" + +namespace apollo { +namespace perception { + +struct TrackedObject { + /* NEED TO NOTICE: All the states of track would be collected mainly based on + * the states of tracked object. Thus, update tracked object's state when you + * update the state of track !!! */ + TrackedObject() = default; + explicit TrackedObject(ObjectPtr obj_ptr); + + // deep copy (copy point clonds) + void clone(const TrackedObject& rhs); + + // cloud + // store transformed object before tracking + ObjectPtr object_ptr; + + Eigen::Vector3f barycenter; + + // bbox + Eigen::Vector3f center; + Eigen::Vector3f size; + Eigen::Vector3f direction; + Eigen::Vector3f lane_direction; + + // states + Eigen::Vector3f anchor_point; + Eigen::Vector3f velocity; + Eigen::Vector3f acceleration; + + // class type + ObjectType type; + + // association distance + // range from 0 to association_score_maximum + float association_score = 0.0f; +}; // struct TrackedObject + +typedef std::shared_ptr TrackedObjectPtr; +typedef std::shared_ptr TrackedObjectConstPtr; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_TRACKER_HM_TRACKER_TRACKED_OBJECT_H_ // NOLINT diff --git a/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/BUILD b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/BUILD new file mode 100644 index 00000000000..b84020cd337 --- /dev/null +++ b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/BUILD @@ -0,0 +1,37 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "perception_obstacle_lidar_opengl_visualizer", + srcs = [ + "camera.cc", + "frame_content.cc", + "glfw_viewer.cc", + "opengl_visualizer.cc", + ], + hdrs = [ + "arc_ball.h", + "camera.h", + "frame_content.h", + "glfw_viewer.h", + "opengl_visualizer.h", + ], + copts = [ + "-Wno-deprecated", + ], + deps = [ + "//modules/common:log", + "//modules/perception/lib/base", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/base:perception_obstacle_base", + "//modules/perception/obstacle/common:perception_obstacle_common", + "@eigen//:eigen", + "@glew//:glew", + "@glfw//:glfw", + "@pcl//:pcl", + "@vtk//:vtk", + ], +) + +cpplint() diff --git a/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/arc_ball.h b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/arc_ball.h new file mode 100644 index 00000000000..de128f96eb3 --- /dev/null +++ b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/arc_ball.h @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_ARC_BALL_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_ARC_BALL_H_ + +#include + +namespace apollo { +namespace perception { + +class ArcBall { + public: + ArcBall() = default; + ~ArcBall() = default; + + template + static Eigen::Quaterniond RotateByMouse(T pre_x, T pre_y, T cur_x, T cur_y, + T obj_cen_x, T obj_cen_y, + T screen_width, T screen_height) { + double px = static_cast(pre_x - obj_cen_x) / screen_width; + double py = static_cast(obj_cen_y - pre_y) / screen_height; + double dx = static_cast(cur_x - obj_cen_x) / screen_width; + double dy = static_cast(obj_cen_y - cur_y) / screen_height; + const Eigen::Vector3d p1(px, py, ProjectToBall(px, py)); + const Eigen::Vector3d p2(dx, dy, ProjectToBall(dx, dy)); + Eigen::Vector3d axis = p2.cross(p1); + const double angle = + 2.0 * + asin(sqrt(axis.squaredNorm() / p1.squaredNorm() / p2.squaredNorm())); + axis.normalize(); + Eigen::AngleAxisd angleAxis(angle, axis); + return Eigen::Quaterniond(angleAxis); + } + + static double ProjectToBall(double x, double y) { + const double rad = 1.0; + const double rad2 = rad * rad; + const double limit = rad2 * 0.5; + + const double d = x * x + y * y; + return d < limit ? sqrt(rad2 - d) : limit / sqrt(d); + } +}; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_ARC_BALL_H_ diff --git a/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/camera.cc b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/camera.cc new file mode 100644 index 00000000000..c582fd8f204 --- /dev/null +++ b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/camera.cc @@ -0,0 +1,124 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/camera.h" +#include +#include + +namespace apollo { +namespace perception { + +Camera::Camera() + : rot_c2w_(Eigen::Matrix3d::Identity()), t_c2w_(0, 0, 0), fov_(45.0), + screen_width_(600), screen_height_(600), + view_mat_(Eigen::Matrix4d::Identity()), + proj_mat_(Eigen::Matrix4d::Zero()) {} + +void Camera::SetUpDirection(Eigen::Vector3d world_vec) { + Eigen::Vector3d up_vec_cam_frame = rot_c2w_.inverse() * world_vec; + Eigen::Vector3d up_vec_proj_in_cam_frame(up_vec_cam_frame(0), + up_vec_cam_frame(1), 0); + up_vec_proj_in_cam_frame.normalize(); + Eigen::Vector3d cam_y_axis = Eigen::Vector3d(0, 1, 0); + Eigen::Vector3d align_axis = cam_y_axis.cross(up_vec_proj_in_cam_frame); + align_axis + .normalize(); // the axis for Eigen::AngleAxisd must be a unit vector + double align_ang = acos(cam_y_axis.dot(up_vec_proj_in_cam_frame)); + Eigen::Matrix3d align_rot_mat = + Eigen::AngleAxisd(align_ang, align_axis).toRotationMatrix(); + + rot_c2w_ = rot_c2w_ * align_rot_mat; +} + +void Camera::SetScreenWidthHeight(int width, int height) { + screen_width_ = width; + screen_height_ = height; +} + +Eigen::Vector3d Camera::UpDir() { + Eigen::Vector3d up_dir = rot_c2w_ * Eigen::Vector3d(0, 1, 0); + return up_dir; +} + +void Camera::LookAt(Eigen::Vector3d world_tgt) { + Eigen::Vector3d view_dir = world_tgt - Position(); + view_dir.normalize(); + Eigen::Vector3d right_dir = view_dir.cross(UpDir()); + right_dir.normalize(); + Eigen::Vector3d up_dir = right_dir.cross(view_dir); + up_dir.normalize(); + + rot_c2w_.col(0) = right_dir; + rot_c2w_.col(1) = up_dir; + rot_c2w_.col(2) = -view_dir; // view_dir == minor z axis +} + +Eigen::Matrix4d Camera::GetViewMat() { + Eigen::Matrix4d view_mat = Eigen::Matrix4d::Identity(); + view_mat.topLeftCorner(3, 3) = rot_c2w_; + view_mat.topRightCorner(3, 1) = t_c2w_; + view_mat_ = view_mat.inverse(); + + return view_mat_; +} + +Eigen::Matrix4d Camera::GetProjectionMat() { + double z_near = 1.0; + double z_far = 1000.0; + GLdouble aspect_ratio = static_cast(screen_width_) / + static_cast(screen_height_); + double fov_arc = fov_ * M_PI / 180.0; + double f = 1.0 / tan(fov_arc / 2.0); + proj_mat_(0, 0) = f / aspect_ratio; + proj_mat_(1, 1) = f; + proj_mat_(2, 2) = (z_near + z_far) / (z_near - z_far); + proj_mat_(3, 2) = -1.0; + proj_mat_(2, 3) = 2.0 * z_near * z_far / (z_near - z_far); + + return proj_mat_; +} + +Eigen::Vector3d Camera::PointOnScreen(Eigen::Vector3d point) { + GLdouble x = 0.0; + GLdouble y = 0.0; + GLdouble z = 0.0; + static GLint viewport[4]; + viewport[0] = 0; + viewport[1] = screen_height_; + viewport[2] = screen_width_; + viewport[3] = + -screen_height_; // origin of opengl frame is at left-bottom corner + + GLdouble view_mat[16] = { + view_mat_(0, 0), view_mat_(1, 0), view_mat_(2, 0), view_mat_(3, 0), + view_mat_(0, 1), view_mat_(1, 1), view_mat_(2, 1), view_mat_(3, 1), + view_mat_(0, 2), view_mat_(1, 2), view_mat_(2, 2), view_mat_(3, 2), + view_mat_(0, 3), view_mat_(1, 3), view_mat_(2, 3), view_mat_(3, 3)}; + + GLdouble proj_mat[16] = { + proj_mat_(0, 0), proj_mat_(1, 0), proj_mat_(2, 0), proj_mat_(3, 0), + proj_mat_(0, 1), proj_mat_(1, 1), proj_mat_(2, 1), proj_mat_(3, 1), + proj_mat_(0, 2), proj_mat_(1, 2), proj_mat_(2, 2), proj_mat_(3, 2), + proj_mat_(0, 3), proj_mat_(1, 3), proj_mat_(2, 3), proj_mat_(3, 3)}; + // here the view_mat should be view_mode_mat acutally + gluProject(point(0), point(1), point(2), view_mat, proj_mat, viewport, &x, &y, + &z); + + return Eigen::Vector3d(x, y, z); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/camera.h b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/camera.h new file mode 100644 index 00000000000..921cfc00b04 --- /dev/null +++ b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/camera.h @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_CAMERA_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_CAMERA_H_ + +#include + +namespace apollo { +namespace perception { + +class Camera { + public: + Camera(); + ~Camera() = default; + + void SetPosition(Eigen::Vector3d world_pos) { t_c2w_ = world_pos; } + void SetUpDirection(Eigen::Vector3d world_vec); + void SetFov(double fov_deg) { fov_ = fov_deg; } + void SetScreenWidthHeight(int width, int height); + + Eigen::Vector3d Position() { return t_c2w_; } + Eigen::Vector3d UpDir(); + + void LookAt(Eigen::Vector3d world_tgt); + + Eigen::Matrix4d GetViewMat(); + Eigen::Matrix4d GetProjectionMat(); + + Eigen::Vector3d PointOnScreen(Eigen::Vector3d point); + + private: + Eigen::Matrix3d rot_c2w_; + Eigen::Vector3d t_c2w_; + double fov_; + int screen_width_; + int screen_height_; + Eigen::Matrix4d view_mat_; + Eigen::Matrix4d proj_mat_; +}; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_CAMERA_H_ diff --git a/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/frame_content.cc b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/frame_content.cc new file mode 100644 index 00000000000..bd5a4529869 --- /dev/null +++ b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/frame_content.cc @@ -0,0 +1,108 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/frame_content.h" +#include "modules/common/log.h" + +namespace apollo { +namespace perception { + +FrameContent::FrameContent() + : pose_v2w_(Eigen::Matrix4d::Identity()), cloud_(new pcl_util::PointCloud), + roi_cloud_(new pcl_util::PointCloud), global_offset_initialized_(false) {} + +FrameContent::~FrameContent() {} + +void FrameContent::SetLidarPose(const Eigen::Matrix4d &pose) { + if (!global_offset_initialized_) { + global_offset_[0] = -pose(0, 3); + global_offset_[1] = -pose(1, 3); + global_offset_[2] = -pose(2, 3); + global_offset_initialized_ = true; + AINFO << "initial pose " << pose; + AINFO << "offset = " << global_offset_[0] << " " << global_offset_[1] + << " " << global_offset_[2] << "\n"; + } + pose_v2w_ = pose; + pose_v2w_(0, 3) += global_offset_[0]; + pose_v2w_(1, 3) += global_offset_[1]; + pose_v2w_(2, 3) += global_offset_[2]; +} + +Eigen::Matrix4d FrameContent::GetPoseV2w() { return pose_v2w_; } + +void FrameContent::SetLidarCloud(pcl_util::PointCloudPtr cloud) { + pcl::transformPointCloud(*cloud, *(cloud_), pose_v2w_); +} + +void FrameContent::SetLidarRoiCloud(pcl_util::PointCloudPtr cloud) { + pcl::transformPointCloud(*cloud, *(roi_cloud_), pose_v2w_); +} + +pcl_util::PointCloudPtr FrameContent::GetCloud() { return cloud_; } + +pcl_util::PointCloudPtr FrameContent::GetRoiCloud() { return roi_cloud_; } + +bool FrameContent::HasCloud() { + if ((cloud_ == nullptr || cloud_->size() == 0)) { + return false; + } + return true; +} + +void FrameContent::OffsetPointcloud(pcl_util::PointCloud* cloud, + const Eigen::Vector3d &offset) { + for (size_t i = 0; i < cloud->size(); ++i) { + cloud->points[i].x += offset[0]; + cloud->points[i].y += offset[1]; + cloud->points[i].z += offset[2]; + } +} + +void FrameContent::OffsetPointcloud(pcl_util::PointDCloud* cloud, + const Eigen::Vector3d &offset) { + for (size_t i = 0; i < cloud->size(); ++i) { + cloud->points[i].x += offset[0]; + cloud->points[i].y += offset[1]; + cloud->points[i].z += offset[2]; + } +} + +void FrameContent::OffsetObject(ObjectPtr object, + const Eigen::Vector3d &offset) { + OffsetPointcloud(object->cloud.get(), offset); + OffsetPointcloud(&(object->polygon), offset); + + object->center[0] += offset[0]; + object->center[1] += offset[1]; + object->center[2] += offset[2]; +} + +void FrameContent::SetTrackedObjects(const std::vector &objects) { + tracked_objects_lidar_.resize(objects.size()); + for (size_t i = 0; i < objects.size(); ++i) { + tracked_objects_lidar_[i].reset(new Object); + tracked_objects_lidar_[i]->clone(*objects[i]); + OffsetObject(tracked_objects_lidar_[i], global_offset_); + } +} + +std::vector FrameContent::GetTrackedObjects() { + return tracked_objects_lidar_; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/frame_content.h b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/frame_content.h new file mode 100644 index 00000000000..16659f4306b --- /dev/null +++ b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/frame_content.h @@ -0,0 +1,75 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_FRAME_CONTENT_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_FRAME_CONTENT_H_ + +#include +#include +#include +#include +#include +#include + +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/base/object.h" + +namespace apollo { +namespace perception { + +class FrameContent { + public: + FrameContent(); + ~FrameContent(); + + void SetLidarPose(const Eigen::Matrix4d &pose); + Eigen::Matrix4d GetPoseV2w(); + + void SetLidarCloud(pcl_util::PointCloudPtr cloud); + void SetLidarRoiCloud(pcl_util::PointCloudPtr cloud); + pcl_util::PointCloudPtr GetCloud(); + pcl_util::PointCloudPtr GetRoiCloud(); + + bool HasCloud(); + + void SetTrackedObjects(const std::vector &objects); + + std::vector GetTrackedObjects(); + + protected: + // coordinate transform utilities + void OffsetPointcloud(pcl_util::PointCloud* cloud, + const Eigen::Vector3d &offset); + void OffsetPointcloud(pcl_util::PointDCloud* cloud, + const Eigen::Vector3d &offset); + void OffsetObject(ObjectPtr object, const Eigen::Vector3d &offset); + + private: + // input + // 1.lidar + Eigen::Matrix4d pose_v2w_; + pcl_util::PointCloudPtr cloud_; + pcl_util::PointCloudPtr roi_cloud_; + + Eigen::Vector3d global_offset_; + bool global_offset_initialized_; + std::vector tracked_objects_lidar_; // after tracking +}; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_FRAME_CONTENT_H_ diff --git a/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/glfw_viewer.cc b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/glfw_viewer.cc new file mode 100644 index 00000000000..6e7821c09fb --- /dev/null +++ b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/glfw_viewer.cc @@ -0,0 +1,685 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include +#include +#include + +#include "pcl/io/pcd_io.h" + +#include "modules/common/log.h" +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/arc_ball.h" +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/frame_content.h" +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/glfw_viewer.h" + +namespace apollo { +namespace perception { + +#define BUFFER_OFFSET(offset) (reinterpret_cast(offset)) + +GLFWViewer::GLFWViewer() { + init_ = false; + window_ = NULL; + pers_camera_ = NULL; + forward_dir_ = Eigen::Vector3d::Zero(); + scn_center_ = Eigen::Vector3d::Zero(); + bg_color_ = Eigen::Vector3d::Zero(); + + mode_mat_ = Eigen::Matrix4d::Identity(); + view_mat_ = Eigen::Matrix4d::Identity(); + + win_width_ = 800; + win_height_ = 600; + mouse_prev_x_ = 0; + mouse_prev_y_ = 0; + + show_cloud_ = true; + show_cloud_state_ = 0; + show_velocity_ = true; + show_direction_ = false; + show_polygon_ = false; +} + +GLFWViewer::~GLFWViewer() { + Close(); + if (pers_camera_) delete pers_camera_; +} + +bool GLFWViewer::Initialize() { + AINFO << "GLFWViewer::initialize()" << std::endl; + if (init_) { + AINFO << " GLFWViewer is already initialized !" << std::endl; + return false; + } + + if (!WindowInit()) { + AINFO << " Failed to initialize the window !" << std::endl; + return false; + } + + if (!CameraInit()) { + AINFO << " Failed to initialize the camera !" << std::endl; + return false; + } + + if (!OpenglInit()) { + AINFO << " Failed to initialize opengl !" << std::endl; + return false; + } + + init_ = true; + + show_cloud_ = 1; + show_velocity_ = 1; + show_polygon_ = 0; + return true; +} + +void GLFWViewer::Spin() { + while (!glfwWindowShouldClose(window_)) { + glfwPollEvents(); + Render(); + glfwSwapBuffers(window_); + } + glfwDestroyWindow(window_); +} + +void GLFWViewer::SpinOnce() { + glfwPollEvents(); + Render(); + glfwSwapBuffers(window_); +} + +void GLFWViewer::Close() { glfwTerminate(); } + +void GLFWViewer::SetSize(int w, int h) { + win_width_ = w; + win_height_ = h; +} + +void GLFWViewer::SetCameraPara(Eigen::Vector3d i_position, + Eigen::Vector3d i_scn_center, + Eigen::Vector3d i_up_vector) { + pers_camera_->SetPosition(i_position); + pers_camera_->LookAt(i_scn_center); + pers_camera_->SetUpDirection(i_up_vector); + view_mat_ = pers_camera_->GetViewMat(); + scn_center_ = i_scn_center; +} + +bool GLFWViewer::WindowInit() { + if (!glfwInit()) { + AERROR << "Failed to initialize glfw !\n"; + return false; + } + + window_ = glfwCreateWindow(win_width_, win_height_, "opengl_visualizer", + nullptr, nullptr); + if (window_ == nullptr) { + AERROR << "Failed to create glfw window!\n"; + glfwTerminate(); + return false; + } + + glfwMakeContextCurrent(window_); + glfwSwapInterval(1); + glfwSetWindowUserPointer(window_, this); + + // set callback functions + glfwSetFramebufferSizeCallback(window_, FramebufferSizeCallback); + + glfwSetKeyCallback(window_, KeyCallback); + glfwSetMouseButtonCallback(window_, MouseButtonCallback); + glfwSetCursorPosCallback(window_, MouseCursorPositionCallback); + glfwSetScrollCallback(window_, MouseScrollCallback); + + glfwShowWindow(window_); + return true; +} + +bool GLFWViewer::CameraInit() { + // perspective cameras + pers_camera_ = new Camera; + pers_camera_->SetScreenWidthHeight(win_width_, win_height_); + pers_camera_->SetFov(45.0); + pers_camera_->SetPosition(Eigen::Vector3d(0, 0, -30)); + + return true; +} + +bool GLFWViewer::OpenglInit() { + glClearColor(bg_color_(0), bg_color_(1), bg_color_(2), 0.0); + glClearDepth(1.0f); + glShadeModel(GL_SMOOTH); + glDepthFunc(GL_LEQUAL); + // lighting + GLfloat mat_shininess[] = {20.0}; + GLfloat light_position[] = {1.0, -1.0, 1.0, 0.0}; + GLfloat lmodel_ambient[] = {.5, .5, .5, 1.0}; + glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); + glLightfv(GL_LIGHT0, GL_POSITION, light_position); + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); + glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); + glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); + glEnable(GL_LIGHT0); + glEnable(GL_LIGHTING); + glEnable(GL_DEPTH_TEST); + glEnable(GL_NORMALIZE); + glEnable(GL_COLOR_MATERIAL); + + // glew + if (glewInit() != GLEW_OK) { + AERROR << "Failed to initialize glew !"; + exit(EXIT_FAILURE); + } + + // allocation of vbo + // point cloud + { + GLfloat cloud_colors[kPoint_Num_Per_Cloud_VAO_][3]; + GLuint cloud_indices[kPoint_Num_Per_Cloud_VAO_]; + for (int i = 0; i < kPoint_Num_Per_Cloud_VAO_; i++) { + cloud_colors[i][0] = 0.7; + cloud_colors[i][1] = 0.7; + cloud_colors[i][2] = 0.7; + cloud_indices[i] = GLuint(i); + } + + glGenVertexArrays(kCloud_VAO_Num_, cloud_VAO_buf_ids_); + for (int i = 0; i < kCloud_VAO_Num_; i++) { + glBindVertexArray(cloud_VAO_buf_ids_[i]); + + glGenBuffers(NUM_VBO_TYPE, cloud_VBO_buf_ids_[i]); + glBindBuffer(GL_ARRAY_BUFFER, cloud_VBO_buf_ids_[i][VBO_VERTICES]); + glBufferData(GL_ARRAY_BUFFER, sizeof(cloud_verts_), cloud_verts_, + GL_STREAM_DRAW); + glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0)); + glEnableClientState(GL_VERTEX_ARRAY); + + glBindBuffer(GL_ARRAY_BUFFER, cloud_VBO_buf_ids_[i][VBO_COLORS]); + glBufferData(GL_ARRAY_BUFFER, sizeof(cloud_colors), cloud_colors, + GL_STREAM_DRAW); + glColorPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0)); + glEnableClientState(GL_COLOR_ARRAY); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, + cloud_VBO_buf_ids_[i][VBO_ELEMENTS]); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(cloud_indices), + cloud_indices, GL_STREAM_DRAW); + } + } + // circle + { + GLfloat circle_verts[kPoint_Num_Per_Circle_VAO_][3]; + GLfloat circle_colors[kPoint_Num_Per_Circle_VAO_][3]; + GLuint circle_indices[kPoint_Num_Per_Circle_VAO_]; + + for (int i = 0; i < kPoint_Num_Per_Circle_VAO_; ++i) { + circle_verts[i][2] = -1.0; + circle_colors[i][0] = 0.0; + circle_colors[i][1] = 0.0; + circle_colors[i][2] = 0.9; + circle_indices[i] = GLuint(i); + } + + float ang_interv = + 2 * M_PI / static_cast(kPoint_Num_Per_Circle_VAO_); + glGenVertexArrays(kCircle_VAO_Num_, circle_VAO_buf_ids_); + for (int vao = 0; vao < kCircle_VAO_Num_; ++vao) { + for (int i = 0; i < kPoint_Num_Per_Circle_VAO_; ++i) { + float theta = i * ang_interv; + circle_verts[i][0] = 20 * (vao + 1) * cos(theta); + circle_verts[i][1] = 20 * (vao + 1) * sin(theta); + } + + glBindVertexArray(circle_VAO_buf_ids_[vao]); + + glGenBuffers(NUM_VBO_TYPE, circle_VBO_buf_ids_[vao]); + glBindBuffer(GL_ARRAY_BUFFER, circle_VBO_buf_ids_[vao][VBO_VERTICES]); + glBufferData(GL_ARRAY_BUFFER, sizeof(circle_verts), circle_verts, + GL_STATIC_DRAW); + glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0)); + glEnableClientState(GL_VERTEX_ARRAY); + + glBindBuffer(GL_ARRAY_BUFFER, circle_VBO_buf_ids_[vao][VBO_COLORS]); + glBufferData(GL_ARRAY_BUFFER, sizeof(circle_colors), circle_colors, + GL_STATIC_DRAW); + glColorPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0)); + glEnableClientState(GL_COLOR_ARRAY); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, + circle_VBO_buf_ids_[vao][VBO_ELEMENTS]); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(circle_indices), + circle_indices, GL_STATIC_DRAW); + } + } + + return true; +} + +void GLFWViewer::PreDraw() { + Eigen::Matrix4d e_proj_mat = pers_camera_->GetProjectionMat(); + + // column major + GLdouble proj_mat[16] = { + e_proj_mat(0, 0), e_proj_mat(1, 0), e_proj_mat(2, 0), e_proj_mat(3, 0), + e_proj_mat(0, 1), e_proj_mat(1, 1), e_proj_mat(2, 1), e_proj_mat(3, 1), + e_proj_mat(0, 2), e_proj_mat(1, 2), e_proj_mat(2, 2), e_proj_mat(3, 2), + e_proj_mat(0, 3), e_proj_mat(1, 3), e_proj_mat(2, 3), e_proj_mat(3, 3)}; + GLdouble mode_mat[16] = { + mode_mat_(0, 0), mode_mat_(1, 0), mode_mat_(2, 0), mode_mat_(3, 0), + mode_mat_(0, 1), mode_mat_(1, 1), mode_mat_(2, 1), mode_mat_(3, 1), + mode_mat_(0, 2), mode_mat_(1, 2), mode_mat_(2, 2), mode_mat_(3, 2), + mode_mat_(0, 3), mode_mat_(1, 3), mode_mat_(2, 3), mode_mat_(3, 3)}; + GLdouble view_mat[16] = { + view_mat_(0, 0), view_mat_(1, 0), view_mat_(2, 0), view_mat_(3, 0), + view_mat_(0, 1), view_mat_(1, 1), view_mat_(2, 1), view_mat_(3, 1), + view_mat_(0, 2), view_mat_(1, 2), view_mat_(2, 2), view_mat_(3, 2), + view_mat_(0, 3), view_mat_(1, 3), view_mat_(2, 3), view_mat_(3, 3)}; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glMultMatrixd(proj_mat); + glMatrixMode(GL_MODELVIEW); + glLoadMatrixd(mode_mat); + glMultMatrixd(view_mat); + + GLfloat light_position[] = {1.0, -1.0, 1.0, 0.0}; + glLightfv(GL_LIGHT0, GL_POSITION, light_position); +} + +void GLFWViewer::Render() { + glClear(GL_COLOR_BUFFER_BIT); + PreDraw(); + + if (show_cloud_) DrawCloud(); + DrawObstacles(); + DrawCircle(); + DrawCarForwardDir(); +} + +void GLFWViewer::DrawCloud() { + pcl_util::PointCloudPtr cloud; + pcl_util::PointCloudPtr roi_cloud; + + if (show_cloud_state_ == 0) { // only show original point cloud + cloud = frame_content_.GetCloud(); + } else if (show_cloud_state_ == 1) { // show roi + roi_cloud = frame_content_.GetRoiCloud(); + } else { // show both + cloud = frame_content_.GetCloud(); + roi_cloud = frame_content_.GetRoiCloud(); + } + + // draw original point cloud + if (cloud && !cloud->points.empty()) { + glPointSize(1); + int count = 0; + int p_num = 0; + int vao_num = (cloud->points.size() / kPoint_Num_Per_Cloud_VAO_) + 1; + for (int vao = 0; vao < vao_num; vao++) { + for (p_num = 0; p_num < kPoint_Num_Per_Cloud_VAO_; ++p_num) { + cloud_verts_[p_num][0] = cloud->points[count].x; + cloud_verts_[p_num][1] = cloud->points[count].y; + cloud_verts_[p_num][2] = cloud->points[count].z; + count++; + + if (count >= static_cast(cloud->points.size())) { + break; + } + } + + glBindVertexArray(cloud_VAO_buf_ids_[vao]); + glBindBuffer(GL_ARRAY_BUFFER, cloud_VBO_buf_ids_[vao][VBO_VERTICES]); + glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(cloud_verts_), cloud_verts_); + glDrawElements(GL_POINTS, p_num, GL_UNSIGNED_INT, BUFFER_OFFSET(0)); + glBindVertexArray(0); + + if (count >= static_cast(cloud->points.size())) { + break; + } + } + + if (count < static_cast(cloud->points.size())) { + AINFO << "VAO_num * VBO_num < cloud->points.size()"; + } + } + + // draw roi point cloud + if (roi_cloud && !roi_cloud->points.empty()) { + glPointSize(3); + glColor3f(0, 0.8, 0); + glBegin(GL_POINTS); + for (const auto &point : roi_cloud->points) { + glVertex3f(point.x, point.y, point.z); + } + glEnd(); + } +} + +void GLFWViewer::DrawCircle() { + Eigen::Matrix4d v2w_pose = frame_content_.GetPoseV2w(); + GLdouble mat[16] = { + v2w_pose(0, 0), v2w_pose(1, 0), v2w_pose(2, 0), v2w_pose(3, 0), + v2w_pose(0, 1), v2w_pose(1, 1), v2w_pose(2, 1), v2w_pose(3, 1), + v2w_pose(0, 2), v2w_pose(1, 2), v2w_pose(2, 2), v2w_pose(3, 2), + v2w_pose(0, 3), v2w_pose(1, 3), v2w_pose(2, 3), v2w_pose(3, 3)}; + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glMultMatrixd(mat); + int vao = 0; + for (vao = 0; vao < kCircle_VAO_Num_; vao++) { + glBindVertexArray(circle_VAO_buf_ids_[vao]); + glDrawElements(GL_LINE_LOOP, kPoint_Num_Per_Circle_VAO_, GL_UNSIGNED_INT, + BUFFER_OFFSET(0)); + glBindVertexArray(0); + } + glPopMatrix(); +} + +void GLFWViewer::DrawCarForwardDir() { + glColor3f(1.0, 0.5, 0.17); + glLineWidth(5); + glBegin(GL_LINES); + Eigen::Vector3d forward_vp = scn_center_ + forward_dir_ * 10; + glVertex3f(scn_center_(0), scn_center_(1), scn_center_(2)); + glVertex3f(forward_vp(0), forward_vp(1), forward_vp(2)); + glEnd(); + glLineWidth(1); +} + +void GLFWViewer::DrawObstacle(const ObjectPtr obj, bool show_cloud, + bool show_polygon, bool show_velocity, + bool show_direction) { + float type_color[3] = {0, 0, 0}; + GetClassColor(obj->type, type_color); + if (show_polygon) { + double h = obj->height; + glColor3f(type_color[0], type_color[1], type_color[2]); + glBegin(GL_LINE_LOOP); + for (auto point : obj->polygon.points) { + glVertex3f(point.x, point.y, point.z); + } + glEnd(); + + glBegin(GL_LINE_LOOP); + for (auto point : obj->polygon.points) { + glVertex3f(point.x, point.y, point.z + h); + } + glEnd(); + + glBegin(GL_LINES); + for (auto point : obj->polygon.points) { + glVertex3f(point.x, point.y, point.z); + glVertex3f(point.x, point.y, point.z + h); + } + glEnd(); + } else { + glColor3f(type_color[0], type_color[1], type_color[2]); + Eigen::Vector3d dir(cos(obj->theta), sin(obj->theta), 0); + Eigen::Vector3d odir(-dir[1], dir[0], 0); + Eigen::Vector3d bottom_quad[4]; + double half_l = obj->length / 2; + double half_w = obj->width / 2; + double h = obj->height; + bottom_quad[0] = obj->center - dir * half_l - odir * half_w; + bottom_quad[1] = obj->center + dir * half_l - odir * half_w; + bottom_quad[2] = obj->center + dir * half_l + odir * half_w; + bottom_quad[3] = obj->center - dir * half_l + odir * half_w; + + DrawOffsetVolumn(bottom_quad, h, 4); + } + + if (show_velocity) { + glColor3f(1, 0, 0); + const Eigen::Vector3d ¢er = obj->center; + const Eigen::Vector3d &velocity = obj->velocity; + Eigen::Vector3d dir(cos(obj->theta), sin(obj->theta), 0); + Eigen::Vector3d start_point; + if (dir.dot(velocity) < 0) { + start_point = center - dir * (obj->length / 2); + } else { + start_point = center + dir * (obj->length / 2); + } + Eigen::Vector3d end_point = start_point + velocity; + glBegin(GL_LINES); + glVertex3f(start_point[0], start_point[1], start_point[2]); + glVertex3f(end_point[0], end_point[1], end_point[2]); + glEnd(); + } + + if (show_direction) { + glColor3f(0, 0, 1); + const Eigen::Vector3d ¢er = obj->center; + Eigen::Vector3d dir(cos(obj->theta), sin(obj->theta), 0); + Eigen::Vector3d odir(-dir[1], dir[0], 0); + Eigen::Vector3d start_point = + center + dir * (obj->length / 2) + odir * (obj->width / 2); + Eigen::Vector3d end_point = start_point + dir * 3; + glBegin(GL_LINES); + glVertex3f(start_point[0], start_point[1], start_point[2]); + glVertex3f(end_point[0], end_point[1], end_point[2]); + glEnd(); + } +} + +void GLFWViewer::DrawObstacles() { + std::vector tracked_objects = frame_content_.GetTrackedObjects(); + for (std::size_t i = 0; i < tracked_objects.size(); i++) { + DrawObstacle(tracked_objects[i], true, show_polygon_, show_velocity_, + show_direction_); + } +} + +void GLFWViewer::DrawOffsetVolumn(Eigen::Vector3d *polygon_points, double h, + int polygon_size) { + if (polygon_points == nullptr) { + return; + } + + glBegin(GL_LINE_LOOP); + for (int i = 0; i < polygon_size; i++) { + glVertex3d(polygon_points[i][0], polygon_points[i][1], + polygon_points[i][2]); + } + glEnd(); + + glBegin(GL_LINE_LOOP); + for (int i = 0; i < polygon_size; i++) { + glVertex3d(polygon_points[i][0], polygon_points[i][1], + polygon_points[i][2] + h); + } + glEnd(); + + glBegin(GL_LINES); + for (int i = 0; i < polygon_size; i++) { + glVertex3d(polygon_points[i][0], polygon_points[i][1], + polygon_points[i][2]); + glVertex3d(polygon_points[i][0], polygon_points[i][1], + polygon_points[i][2] + h); + } + glEnd(); +} + +void GLFWViewer::GetClassColor(int cls, float rgb[3]) { + switch (cls) { + case 0: + rgb[0] = 0.5; + rgb[1] = 0; + rgb[2] = 1; // purple + break; + case 1: + rgb[0] = 0; + rgb[1] = 1; + rgb[2] = 1; // cryan + break; + case 2: + rgb[0] = 1; + rgb[1] = 1; + rgb[2] = 0; // yellow + break; + case 3: + rgb[0] = 1; + rgb[1] = 0.5; + rgb[2] = 0.5; // red + break; + case 4: + rgb[0] = 0; + rgb[1] = 0; + rgb[2] = 1; // blue + break; + case 5: + rgb[0] = 0; + rgb[1] = 1; + rgb[2] = 0; // green + break; + case 6: + rgb[0] = 1; + rgb[1] = 0.5; + rgb[2] = 0; // orange + break; + case 7: + rgb[0] = 1; + rgb[1] = 0; + rgb[2] = 0; // red + break; + default: + rgb[0] = 1; + rgb[1] = 1; + rgb[2] = 1; // white + break; + } +} + +/************************callback functions************************/ + +void GLFWViewer::FramebufferSizeCallback(GLFWwindow *window, int width, + int height) { + void *user_data = glfwGetWindowUserPointer(window); + if (user_data == NULL) return; + + GLFWViewer *vis = static_cast(user_data); + vis->ResizeFramebuffer(width, height); +} + +void GLFWViewer::KeyCallback(GLFWwindow *window, int key, int scancode, + int action, int mods) { + void *user_data = glfwGetWindowUserPointer(window); + if (user_data == NULL) return; + if (action == GLFW_PRESS) { + GLFWViewer *vis = static_cast(user_data); + AINFO << "key_value: " << key; + vis->Keyboard(key); + } +} + +void GLFWViewer::MouseButtonCallback(GLFWwindow *window, int button, int action, + int mods) {} + +void GLFWViewer::MouseCursorPositionCallback(GLFWwindow *window, double xpos, + double ypos) { + void *user_data = glfwGetWindowUserPointer(window); + if (user_data == NULL) return; + + GLFWViewer *vis = static_cast(user_data); + vis->MouseMove(xpos, ypos); +} + +void GLFWViewer::MouseScrollCallback(GLFWwindow *window, double xoffset, + double yoffset) { + void *user_data = glfwGetWindowUserPointer(window); + if (user_data == NULL) return; + + GLFWViewer *vis = static_cast(user_data); + vis->MouseWheel(yoffset); +} + +void GLFWViewer::ErrorCallback(int error, const char *description) { + AINFO << "ERROR - " << error << " " << description; +} + +/************************callback assistants************************/ +/*void GLFWViewer::resize_window(int width, int height){ +}*/ + +void GLFWViewer::ResizeFramebuffer(int width, int height) { + glViewport(0, 0, width, height); + win_width_ = width; + win_height_ = height; +} + +void GLFWViewer::MouseMove(double xpos, double ypos) { + int state_left = glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_LEFT); + int state_right = glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_RIGHT); + int x_delta = xpos - mouse_prev_x_; + int y_delta = ypos - mouse_prev_y_; + if (state_left == GLFW_PRESS) { + Eigen::Vector3d obj_cen_screen = pers_camera_->PointOnScreen(scn_center_); + Eigen::Quaterniond rot = ArcBall::RotateByMouse( + static_cast(mouse_prev_x_), static_cast(mouse_prev_y_), + xpos, ypos, obj_cen_screen(0), obj_cen_screen(1), + static_cast(win_width_), static_cast(win_height_)); + + Eigen::Matrix3d rot_mat = rot.inverse().toRotationMatrix(); + Eigen::Vector3d scn_center = scn_center_; + Eigen::Vector4d scn_center_tmp(scn_center(0), scn_center(1), scn_center(2), + 1); + scn_center_tmp = mode_mat_ * view_mat_ * scn_center_tmp; + scn_center = scn_center_tmp.head(3); + Eigen::Vector3d r_multi_scn_center = rot_mat * scn_center; + Eigen::Vector3d t = scn_center - r_multi_scn_center; + Eigen::Matrix4d cur_mat = Eigen::Matrix4d::Identity(); + cur_mat.topLeftCorner(3, 3) = rot_mat; + cur_mat.topRightCorner(3, 1) = t; + mode_mat_ = cur_mat * mode_mat_; + } else if (state_right == GLFW_PRESS) { + mode_mat_(0, 3) += 0.1 * x_delta; + mode_mat_(1, 3) -= 0.1 * y_delta; + } + mouse_prev_x_ = xpos; + mouse_prev_y_ = ypos; +} + +void GLFWViewer::MouseWheel(double delta) { mode_mat_(2, 3) -= delta; } + +void GLFWViewer::Reset() { mode_mat_ = Eigen::Matrix4d::Identity(); } + +void GLFWViewer::Keyboard(int key) { + switch (key) { + case GLFW_KEY_R: // 'R' + Reset(); + break; + case GLFW_KEY_P: // 'P' + show_polygon_ = !show_polygon_; + break; + case GLFW_KEY_V: // 'V' + show_velocity_ = !show_velocity_; + break; + case GLFW_KEY_D: // d + show_direction_ = !show_direction_; + break; + case GLFW_KEY_S: // 'S' + show_cloud_state_ = (show_cloud_state_ + 1) % 3; + break; + } +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/glfw_viewer.h b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/glfw_viewer.h new file mode 100644 index 00000000000..68a3a0eee7d --- /dev/null +++ b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/glfw_viewer.h @@ -0,0 +1,146 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_GLFW_VIEWER_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_GLFW_VIEWER_H_ + +#include +#include + +#include "Eigen/Dense" +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/camera.h" +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/frame_content.h" + +namespace apollo { +namespace perception { +class GLFWViewer { + public: + GLFWViewer(); + virtual ~GLFWViewer(); + + bool Initialize(); + + void SetFrameContent(const FrameContent& frame_content) { + frame_content_ = frame_content; + } + void Spin(); + void SpinOnce(); + void Close(); + + void SetBackgroundColor(Eigen::Vector3d i_bg_color) { + bg_color_ = i_bg_color; + } + void SetSize(int w, int h); + void SetCameraPara(Eigen::Vector3d i_position, Eigen::Vector3d i_scn_center, + Eigen::Vector3d i_up_vector); + void SetForwardDir(Eigen::Vector3d forward) { forward_dir_ = forward; } + + // callback assistants + void ResizeFramebuffer(int width, int height); + void MouseMove(double xpos, double ypos); + void MouseWheel(double delta); + void Reset(); + void Keyboard(int key); + + // callback functions + static void FramebufferSizeCallback(GLFWwindow *window, int width, + int height); + static void KeyCallback(GLFWwindow *window, int key, int scancode, int action, + int mods); + static void MouseButtonCallback(GLFWwindow *window, int button, int action, + int mods); + static void MouseCursorPositionCallback(GLFWwindow *window, double xpos, + double ypos); + static void MouseScrollCallback(GLFWwindow *window, double xoffset, + double yoffset); + static void ErrorCallback(int error, const char *description); + + private: + bool WindowInit(); + bool CameraInit(); + bool OpenglInit(); + void PreDraw(); + void Render(); + + void GetClassColor(int cls, float rgb[3]); + void DrawCloud(); + void DrawCircle(); + void DrawCarForwardDir(); + void DrawObstacles(); + void DrawObstacle(const ObjectPtr obj, bool show_cloud, bool show_polygon, + bool show_velocity, bool show_direction); + void DrawOffsetVolumn(Eigen::Vector3d *polygon_points, double h, + int polygon_size); + + private: + bool init_; + + GLFWwindow *window_; + Camera *pers_camera_; + + FrameContent frame_content_; + Eigen::Vector3d forward_dir_; + Eigen::Vector3d scn_center_; + Eigen::Vector3d bg_color_; + + Eigen::Matrix4d mode_mat_; + Eigen::Matrix4d view_mat_; + + int win_width_; + int win_height_; + int mouse_prev_x_; + int mouse_prev_y_; + + bool show_cloud_; + int show_cloud_state_; + bool show_velocity_; + bool show_direction_; + bool show_polygon_; + + enum OBJ_Type { + CIRCIE = 0, + CUBE = 1, + CLOUD = 2, + POLYGON = 3, + NUM_VAO_TYPE = 4 + }; + + enum VBO_Type { + VBO_VERTICES = 0, + VBO_COLORS = 1, + VBO_ELEMENTS = 2, + NUM_VBO_TYPE = 3 + }; + + // cloud + static const int kCloud_VAO_Num_ = 35; + static const int kPoint_Num_Per_Cloud_VAO_ = 10000; + GLuint cloud_VAO_buf_ids_[kCloud_VAO_Num_]; + GLuint cloud_VBO_buf_ids_[kCloud_VAO_Num_][NUM_VBO_TYPE]; // each VAO has + // NUM_VBO_TYPE VBOs + GLfloat cloud_verts_[kPoint_Num_Per_Cloud_VAO_][3]; + + // circle + static const int kCircle_VAO_Num_ = 3; + static const int kPoint_Num_Per_Circle_VAO_ = 256; + GLuint circle_VAO_buf_ids_[kCircle_VAO_Num_]; + GLuint circle_VBO_buf_ids_[kCircle_VAO_Num_][NUM_VBO_TYPE]; +}; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_GLFW_VIEWER_H_ diff --git a/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/opengl_visualizer.cc b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/opengl_visualizer.cc new file mode 100644 index 00000000000..4f1d000698a --- /dev/null +++ b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/opengl_visualizer.cc @@ -0,0 +1,152 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/opengl_visualizer.h" +#include "modules/common/log.h" +#include "modules/perception/obstacle/common/geometry_util.h" + +namespace apollo { +namespace perception { + +OpenglVisualizer::OpenglVisualizer() : name_("OpenglVisualizer") {} + +bool OpenglVisualizer::Init() { + opengl_vs_ = boost::shared_ptr(new GLFWViewer()); + + if (opengl_vs_ == nullptr) { + AINFO << "Failed to create opengl viewer"; + return false; + } + + if (opengl_vs_->Initialize() == false) { + AINFO << "Failed to initialize opengl viewer"; + return false; + } + + SetSize(2000, 1400); + SetBackgroundColor(0.05, 0.05, 0.05, 0.0f); + SetVelodyneHeight(2.5); + SetMainCarPoints(); + SetCameraPosition(); + AINFO << "Initialize OpenglVisualizer successfully"; + return true; +} + +void OpenglVisualizer::Render(const FrameContent &content) { + Eigen::Vector3d camera_world_pos( + camera_center_world_.x, camera_center_world_.y, camera_center_world_.z); + Eigen::Vector3d camera_scene_center(view_point_world_.x, view_point_world_.y, + view_point_world_.z); + Eigen::Vector3d camera_up_vector(up_world_.x, up_world_.y, up_world_.z); + opengl_vs_->SetCameraPara( + Eigen::Vector3d(camera_center_world_.x, camera_center_world_.y, + camera_center_world_.z), + Eigen::Vector3d(view_point_world_.x, view_point_world_.y, + view_point_world_.z), + Eigen::Vector3d(up_world_.x, up_world_.y, up_world_.z)); + opengl_vs_->SetForwardDir( + Eigen::Vector3d(forward_world_.x, forward_world_.y, forward_world_.z)); + opengl_vs_->SetFrameContent(content); + opengl_vs_->SpinOnce(); + AINFO << "OpenglVisualizer spin_once"; +} + +void OpenglVisualizer::SetSize(int w, int h) { opengl_vs_->SetSize(w, h); } + +void OpenglVisualizer::SetBackgroundColor(float r, float g, float b, float a) { + opengl_vs_->SetBackgroundColor(Eigen::Vector3d(r, g, b)); +} + +void OpenglVisualizer::SetVelodyneHeight(float h) { velodyne_height_ = h; } + +void OpenglVisualizer::SetCameraPosition() { + up_velodyne_.x = 0; + up_velodyne_.y = 1; + up_velodyne_.z = 0; + forward_velodyne_.x = 1; + forward_velodyne_.y = 0; + forward_velodyne_.z = 0; + view_point_velodyne_.x = 0; + view_point_velodyne_.y = 0; + view_point_velodyne_.z = 0; + camera_center_velodyne_.x = 0; + camera_center_velodyne_.y = 0; + camera_center_velodyne_.z = 100; +} + +void OpenglVisualizer::SetMainCarPoints() { + main_car_points_velodyne_.resize(9); + main_car_points_velodyne_.at(0).x = 0; + main_car_points_velodyne_.at(0).y = 0; + main_car_points_velodyne_.at(0).z = 0; + + main_car_points_velodyne_.at(1).x = 0; + main_car_points_velodyne_.at(1).y = 0; + main_car_points_velodyne_.at(1).z = -velodyne_height_; + main_car_points_velodyne_.at(2).x = 3; + main_car_points_velodyne_.at(2).y = 0; + main_car_points_velodyne_.at(2).z = -velodyne_height_; + + main_car_points_velodyne_.at(3).x = 2.5; + main_car_points_velodyne_.at(3).y = 1.0; + main_car_points_velodyne_.at(3).z = -velodyne_height_; + main_car_points_velodyne_.at(4).x = 2.5; + main_car_points_velodyne_.at(4).y = -1.0; + main_car_points_velodyne_.at(4).z = -velodyne_height_; + main_car_points_velodyne_.at(5).x = -2.5; + main_car_points_velodyne_.at(5).y = -1.0; + main_car_points_velodyne_.at(5).z = -velodyne_height_; + main_car_points_velodyne_.at(6).x = -2.5; + main_car_points_velodyne_.at(6).y = 1.0; + main_car_points_velodyne_.at(6).z = -velodyne_height_; + + main_car_points_velodyne_.at(7).x = 0; + main_car_points_velodyne_.at(7).y = 0; + main_car_points_velodyne_.at(7).z = 160; + main_car_points_velodyne_.at(8).x = -40; + main_car_points_velodyne_.at(8).y = 0; + main_car_points_velodyne_.at(8).z = 50; +} + +void OpenglVisualizer::UpdateCameraSystem(FrameContent *content) { + Eigen::Matrix4d pose_v2w = content->GetPoseV2w(); + + TransformPoint(camera_center_velodyne_, + &camera_center_world_, pose_v2w); + + TransformPoint(view_point_velodyne_, + &view_point_world_, pose_v2w); + + TransformPointCloud(main_car_points_velodyne_, + &main_car_points_world_, pose_v2w); + + Eigen::Vector4d up_w(up_velodyne_.x, up_velodyne_.y, up_velodyne_.z, 0); + + up_w = pose_v2w * up_w; + up_world_.x = up_w[0]; + up_world_.y = up_w[1]; + up_world_.z = up_w[2]; + + Eigen::Vector4d fd_w(forward_velodyne_.x, forward_velodyne_.y, + forward_velodyne_.z, 0); + fd_w = pose_v2w * fd_w; + forward_world_.x = fd_w[0]; + forward_world_.y = fd_w[1]; + forward_world_.z = fd_w[2]; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/opengl_visualizer.h b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/opengl_visualizer.h new file mode 100644 index 00000000000..7e9d80b9dfd --- /dev/null +++ b/modules/perception/obstacle/lidar/visualizer/opengl_visualizer/opengl_visualizer.h @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_OPENGL_VISUALIZER_H_ +#define MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_OPENGL_VISUALIZER_H_ + +#include +#include +#include +#include + +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/glfw_viewer.h" + +namespace apollo { +namespace perception { + +class OpenglVisualizer { + public: + OpenglVisualizer(); + virtual ~OpenglVisualizer() = default; + + virtual bool Init(); + + virtual std::string Name() const { return name_; } + + void UpdateCameraSystem(FrameContent *content); + + virtual void Render(const FrameContent &content); + + private: + void SetSize(int w, int h); + void SetBackgroundColor(float r, float g, float b, float a); + void SetVelodyneHeight(float h); + void SetMainCarPoints(); + void SetCameraPosition(); + + float velodyne_height_; + pcl_util::Point camera_center_velodyne_; + pcl_util::Point view_point_velodyne_; + pcl_util::Point up_velodyne_; + pcl_util::Point forward_velodyne_; + pcl_util::PointCloud main_car_points_velodyne_; + + pcl_util::Point camera_center_world_; + pcl_util::Point view_point_world_; + pcl_util::Point up_world_; + pcl_util::Point forward_world_; + pcl_util::PointCloud main_car_points_world_; + + boost::shared_ptr opengl_vs_; + std::string name_; + bool init_ = false; +}; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_OBSTACLE_LIDAR_VISUALIZER_OPENGL_VISUALIZER_H_ diff --git a/modules/perception/obstacle/onboard/BUILD b/modules/perception/obstacle/onboard/BUILD new file mode 100644 index 00000000000..45943d33a22 --- /dev/null +++ b/modules/perception/obstacle/onboard/BUILD @@ -0,0 +1,87 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "perception_obstacle_hdmapinput", + srcs = ["hdmap_input.cc"], + hdrs = ["hdmap_input.h"], + deps = [ + "//modules/common", + "//modules/common:log", + "//modules/common/configs:config_gflags", + "//modules/map/hdmap", + "//modules/map/hdmap:hdmap_util", + "//modules/perception/common:perception_common", + "//modules/perception/lib/base", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/base:perception_obstacle_base", + "@eigen//:eigen", + "@gtest//:gtest", + ], +) + +cc_library( + name = "perception_obstacle_lidar_process", + srcs = ["lidar_process.cc"], + hdrs = ["lidar_process.h"], + deps = [ + ":perception_obstacle_hdmapinput", + "//modules/common", + "//modules/common:log", + "//modules/common/adapters:adapter_manager", + "//modules/perception/common:perception_common", + "//modules/perception/lib/base", + "//modules/perception/lib/config_manager", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/base:perception_obstacle_base", + "//modules/perception/obstacle/lidar/dummy:perception_obstacle_lidar_dummy", + "//modules/perception/obstacle/lidar/interface:perception_obstacle_lidar_interface", + "//modules/perception/obstacle/lidar/object_builder/min_box:perception_obstacle_lidar_object_builder_min_box", + "//modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter", + "//modules/perception/obstacle/lidar/segmentation/cnnseg:perception_obstacle_lidar_segmention_cnnseg", + "//modules/perception/obstacle/lidar/tracker/hm_tracker:perception_obstacle_lidar_tracker_hm_tracker", + "//modules/perception/obstacle/lidar/visualizer/opengl_visualizer:perception_obstacle_lidar_opengl_visualizer", + "@eigen//:eigen", + "@gtest//:gtest", + "@ros//:ros_common", + ], +) + +cc_test( + name = "perception_obstacle_hdmap_input_test", + size = "small", + srcs = [ + "hdmap_input_test.cc", + ], + data = [ + "//modules/map:map_data", + "//modules/perception:perception_data", + ], + deps = [ + ":perception_obstacle_hdmapinput", + "//modules/common/configs:config_gflags", + "//modules/perception/common:perception_common", + "@gtest//:main", + ], +) + +cc_test( + name = "perception_obstacle_lidar_process_test", + size = "small", + srcs = [ + "lidar_process_test.cc", + ], + data = [ + "//modules/map:map_data", + "//modules/perception:perception_data", + ], + deps = [ + ":perception_obstacle_hdmapinput", + ":perception_obstacle_lidar_process", + "//modules/perception/common:perception_common", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/perception/obstacle/onboard/hdmap_input.cc b/modules/perception/obstacle/onboard/hdmap_input.cc new file mode 100644 index 00000000000..3799801d8d6 --- /dev/null +++ b/modules/perception/obstacle/onboard/hdmap_input.cc @@ -0,0 +1,218 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/onboard/hdmap_input.h" + +#include +#include +#include + +#include "Eigen/Core" +#include "modules/common/configs/config_gflags.h" +#include "modules/common/log.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/perception/common/define.h" +#include "modules/perception/common/perception_gflags.h" + +namespace apollo { +namespace perception { + +using apollo::hdmap::LineSegment; +using apollo::hdmap::BoundaryEdge; +using apollo::hdmap::RoadROIBoundaryPtr; +using apollo::hdmap::JunctionInfoConstPtr; +using apollo::hdmap::JunctionBoundaryPtr; +using apollo::hdmap::BoundaryEdge_Type_LEFT_BOUNDARY; +using apollo::hdmap::BoundaryEdge_Type_RIGHT_BOUNDARY; +using apollo::hdmap::HDMapUtil; +using apollo::common::math::Vec2d; +using apollo::common::math::Polygon2d; +using pcl_util::PointD; +using pcl_util::PointDCloud; +using pcl_util::PointDCloudPtr; +using std::string; +using std::vector; + +// HDMapInput +HDMapInput::HDMapInput() {} + +bool HDMapInput::Init() { return HDMapUtil::ReloadBaseMap(); } + +bool HDMapInput::GetROI(const PointD& pointd, HdmapStructPtr* mapptr) { + auto* hdmap = HDMapUtil::BaseMapPtr(); + if (hdmap == nullptr) { + return false; + } + std::unique_lock lock(mutex_); + if (mapptr != NULL && *mapptr == nullptr) { + (*mapptr).reset(new HdmapStruct); + } + common::PointENU point; + point.set_x(pointd.x); + point.set_y(pointd.y); + point.set_z(pointd.z); + std::vector boundary_vec; + std::vector junctions_vec; + + int status = hdmap->GetRoadBoundaries(point, FLAGS_map_radius, &boundary_vec, + &junctions_vec); + if (status != SUCC) { + AERROR << "Failed to get road boundaries for point " << point.DebugString(); + return false; + } + ADEBUG << "Get road boundaries : num_boundary = " << boundary_vec.size() + << " num_junction = " << junctions_vec.size(); + + if (MergeBoundaryJunction(boundary_vec, junctions_vec, mapptr) != SUCC) { + AERROR << "merge boundary and junction to hdmap struct failed."; + return false; + } + return true; +} + +bool HDMapInput::GetNearestLaneDirection(const pcl_util::PointD& pointd, + Eigen::Vector3d* lane_direction) { + auto* hdmap = HDMapUtil::BaseMapPtr(); + if (hdmap == nullptr) { + return false; + } + common::PointENU point; + point.set_x(pointd.x); + point.set_y(pointd.y); + point.set_z(pointd.z); + hdmap::LaneInfoConstPtr nearest_lane; + double nearest_s; + double nearest_l; + + int status = + hdmap->GetNearestLane(point, &nearest_lane, &nearest_s, &nearest_l); + if (status != SUCC) { + AERROR << "Failed to get nearest lane for point " << point.DebugString(); + return false; + } + double lane_heading = nearest_lane->Heading(nearest_s); + (*lane_direction) = Eigen::Vector3d(cos(lane_heading), sin(lane_heading), 0); + return true; +} + +int HDMapInput::MergeBoundaryJunction( + const std::vector& boundaries, + const std::vector& junctions, HdmapStructPtr* mapptr) { + if (*mapptr == nullptr) { + AERROR << "the HdmapStructPtr mapptr is null"; + return FAIL; + } + (*mapptr)->road_boundary.resize(boundaries.size()); + (*mapptr)->junction.resize(junctions.size()); + + for (size_t i = 0; i < boundaries.size(); i++) { + for (const auto& road_boundary : boundaries[i]->road_boundaries()) { + auto& mapped_boundary = (*mapptr)->road_boundary[i]; + for (const BoundaryEdge& edge : road_boundary.outer_polygon().edge()) { + PolygonDType* edge_side = nullptr; + if (edge.type() == BoundaryEdge::LEFT_BOUNDARY) { + edge_side = &mapped_boundary.left_boundary; + } else if (edge.type() == BoundaryEdge::RIGHT_BOUNDARY) { + edge_side = &mapped_boundary.right_boundary; + } else { + continue; + } + for (const auto& segment : edge.curve().segment()) { + if (segment.has_line_segment()) { + DownSampleBoundary(segment.line_segment(), edge_side); + } + } + } + } + } + + for (size_t i = 0; i < junctions.size(); i++) { + const Polygon2d& polygon = junctions[i]->junction_info->polygon(); + const vector& points = polygon.points(); + auto& junction = (*mapptr)->junction[i]; + junction.reserve(points.size()); + for (const auto& point : points) { + PointD pointd; + pointd.x = point.x(); + pointd.y = point.y(); + pointd.z = 0.0; + junction.push_back(pointd); + } + } + + return SUCC; +} + +void HDMapInput::DownSampleBoundary(const hdmap::LineSegment& line, + PolygonDType* out_boundary_line) const { + PointDCloudPtr raw_cloud(new PointDCloud); + for (int i = 0; i < line.point_size(); ++i) { + if (i % FLAGS_map_sample_step == 0) { + PointD pointd; + pointd.x = line.point(i).x(); + pointd.y = line.point(i).y(); + pointd.z = line.point(i).z(); + raw_cloud->push_back(pointd); + } + } + + const double kCumulateThetaError = 5.0; + size_t spt = 0; + double acos_theta = 0.0; + size_t raw_cloud_size = raw_cloud->points.size(); + if (raw_cloud_size <= 3) { + for (const auto& point : raw_cloud->points) { + out_boundary_line->push_back(point); + } + ADEBUG << "Points num < 3, so no need to downsample."; + return; + } + out_boundary_line->points.reserve(out_boundary_line->points.size() + + raw_cloud_size); + // the first point + out_boundary_line->push_back(raw_cloud->points[0]); + for (size_t i = 2; i < raw_cloud_size; ++i) { + const PointD& point_0 = raw_cloud->points[spt]; + const PointD& point_1 = raw_cloud->points[i - 1]; + const PointD& point_2 = raw_cloud->points[i]; + Eigen::Vector2d v1(point_1.x - point_0.x, point_1.y - point_0.y); + Eigen::Vector2d v2(point_2.x - point_1.x, point_2.y - point_1.y); + double vector_dist = + sqrt(v1.cwiseProduct(v1).sum()) * sqrt(v2.cwiseProduct(v2).sum()); + // judge duplicate points + if (vector_dist < DBL_EPSILON) { + continue; + } + double cos_theta = (v1.cwiseProduct(v2)).sum() / vector_dist; + if (cos_theta > 1.0) { + cos_theta = 1.0; + } else if (cos_theta < -1.0) { + cos_theta = -1.0; + } + double angle = (acos(cos_theta) * kRadianToDegree); + acos_theta += angle; + if ((acos_theta - kCumulateThetaError) > DBL_EPSILON) { + out_boundary_line->push_back(point_1); + spt = i - 1; + acos_theta = 0.0; + } + } + // the last point + out_boundary_line->push_back(raw_cloud->points[raw_cloud_size - 1]); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/onboard/hdmap_input.h b/modules/perception/obstacle/onboard/hdmap_input.h new file mode 100644 index 00000000000..1ab19a5f220 --- /dev/null +++ b/modules/perception/obstacle/onboard/hdmap_input.h @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PERCEPTION_ONBOARD_HDMAP_INPUT_H_ +#define MODULES_PERCEPTION_ONBOARD_HDMAP_INPUT_H_ + +#include +#include +#include +#include + +#include "gtest/gtest_prod.h" + +#include "modules/common/macro.h" +#include "modules/map/hdmap/hdmap.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/base/hdmap_struct.h" +#include "modules/perception/obstacle/base/types.h" + +namespace apollo { +namespace perception { + +// Singleton HDMapInput, interfaces are thread-safe. +class HDMapInput { + public: + bool Init(); + + // @brief: get roi polygon + // all points are in the world frame + bool GetROI(const pcl_util::PointD& pointd, HdmapStructPtr* mapptr); + + // @brief: get nearest lane direction + bool GetNearestLaneDirection(const pcl_util::PointD& pointd, + Eigen::Vector3d* lane_direction); + + private: + void DownSampleBoundary(const hdmap::LineSegment& line, + PolygonDType* out_boundary_line) const; + + int MergeBoundaryJunction( + const std::vector& boundaries, + const std::vector& junctions, + HdmapStructPtr* mapptr); + + std::mutex mutex_; // multi-thread init safe. + + FRIEND_TEST(HDMapInputTest, test_Init); + FRIEND_TEST(HDMapInputTest, test_GetROI); + + DECLARE_SINGLETON(HDMapInput); +}; + +typedef typename std::shared_ptr HDMapInputPtr; + +} // namespace perception +} // namespace apollo + +#endif // MODULES_PERCEPTION_ONBOARD_HDMAP_INPUT_H_ diff --git a/modules/perception/obstacle/onboard/hdmap_input_test.cc b/modules/perception/obstacle/onboard/hdmap_input_test.cc new file mode 100644 index 00000000000..834405feee0 --- /dev/null +++ b/modules/perception/obstacle/onboard/hdmap_input_test.cc @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/onboard/hdmap_input.h" + +#include +#include "gtest/gtest.h" + +#include "modules/common/configs/config_gflags.h" +#include "modules/common/log.h" +#include "modules/perception/common/perception_gflags.h" + +namespace apollo { +namespace perception { + +TEST(HDMapInputTest, test_Init) { + auto* hdmap_input = HDMapInput::instance(); + EXPECT_TRUE(hdmap_input->Init()); + + FLAGS_base_map_filename = "not_exit_dir"; + EXPECT_FALSE(hdmap_input->Init()); +} + +TEST(HDMapInputTest, test_GetROI) { + HdmapStructPtr hdmap; + auto* hdmap_input = HDMapInput::instance(); + pcl_util::PointD velodyne_pose_world = {587054.96336391149, + 4141606.3593586856, 0.0}; + EXPECT_FALSE(hdmap_input->GetROI(velodyne_pose_world, &hdmap)); + FLAGS_map_dir = "modules/map/data/sunnyvale_loop"; + FLAGS_base_map_filename = "base_map.xml"; + EXPECT_TRUE(hdmap_input->Init()); + EXPECT_TRUE(hdmap_input->GetROI(velodyne_pose_world, &hdmap)); + EXPECT_TRUE(hdmap != nullptr); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/onboard/lidar_process.cc b/modules/perception/obstacle/onboard/lidar_process.cc new file mode 100644 index 00000000000..6ce8d879e4a --- /dev/null +++ b/modules/perception/obstacle/onboard/lidar_process.cc @@ -0,0 +1,383 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/onboard/lidar_process.h" + +#include + +#include "Eigen/Core" +#include "eigen_conversions/eigen_msg.h" +#include "pcl_conversions/pcl_conversions.h" +#include "ros/include/ros/ros.h" +#include "sensor_msgs/PointCloud2.h" +#include "tf/transform_broadcaster.h" +#include "tf/transform_listener.h" +#include "tf_conversions/tf_eigen.h" + +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/log.h" +#include "modules/perception/common/perception_gflags.h" +#include "modules/perception/lib/base/timer.h" +#include "modules/perception/lib/config_manager/config_manager.h" +#include "modules/perception/obstacle/lidar/dummy/dummy_algorithms.h" +#include "modules/perception/obstacle/lidar/object_builder/min_box/min_box.h" +#include "modules/perception/obstacle/lidar/roi_filter/hdmap_roi_filter/hdmap_roi_filter.h" +#include "modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.h" +#include "modules/perception/obstacle/lidar/tracker/hm_tracker/hm_tracker.h" + +namespace apollo { +namespace perception { + +using apollo::common::adapter::AdapterManager; +using pcl_util::Point; +using pcl_util::PointD; +using pcl_util::PointCloud; +using pcl_util::PointCloudPtr; +using pcl_util::PointIndices; +using pcl_util::PointIndicesPtr; +using Eigen::Matrix4d; +using Eigen::Affine3d; +using std::string; + +bool LidarProcess::Init() { + if (inited_) { + return true; + } + + RegistAllAlgorithm(); + + if (!InitFrameDependence()) { + AERROR << "failed to init frame dependence."; + return false; + } + + if (!InitAlgorithmPlugin()) { + AERROR << "failed to init algorithm plugin."; + return false; + } + + inited_ = true; + return true; +} + +bool LidarProcess::Process(const sensor_msgs::PointCloud2& message) { + PERF_FUNCTION("LidarProcess"); + objects_.clear(); + const double kTimeStamp = message.header.stamp.toSec(); + timestamp_ = kTimeStamp; + + PERF_BLOCK_START(); + /// get velodyne2world transfrom + std::shared_ptr velodyne_trans = std::make_shared(); + if (!GetVelodyneTrans(kTimeStamp, velodyne_trans.get())) { + AERROR << "failed to get trans at timestamp: " << kTimeStamp; + error_code_ = common::PERCEPTION_ERROR_TF; + return false; + } + ADEBUG << "get trans pose succ."; + PERF_BLOCK_END("lidar_get_velodyne2world_transfrom"); + + PointCloudPtr point_cloud(new PointCloud); + TransPointCloudToPCL(message, &point_cloud); + ADEBUG << "transform pointcloud success. points num is: " + << point_cloud->points.size(); + PERF_BLOCK_END("lidar_transform_poindcloud"); + + if (!Process(timestamp_, point_cloud, velodyne_trans)) { + AERROR << "faile to process msg at timestamp: " << kTimeStamp; + return false; + } + error_code_ = common::OK; + return true; +} + +bool LidarProcess::Process(const double timestamp, PointCloudPtr point_cloud, + std::shared_ptr velodyne_trans) { + PERF_BLOCK_START(); + /// call hdmap to get ROI + HdmapStructPtr hdmap = nullptr; + if (hdmap_input_) { + PointD velodyne_pose = {0.0, 0.0, 0.0, 0}; // (0,0,0) + Affine3d temp_trans(*velodyne_trans); + PointD velodyne_pose_world = pcl::transformPoint(velodyne_pose, temp_trans); + hdmap.reset(new HdmapStruct); + hdmap_input_->GetROI(velodyne_pose_world, &hdmap); + PERF_BLOCK_END("lidar_get_roi_from_hdmap"); + } + + /// call roi_filter + PointCloudPtr roi_cloud(new PointCloud); + if (roi_filter_ != nullptr) { + PointIndicesPtr roi_indices(new PointIndices); + ROIFilterOptions roi_filter_options; + roi_filter_options.velodyne_trans = velodyne_trans; + roi_filter_options.hdmap = hdmap; + if (roi_filter_->Filter(point_cloud, roi_filter_options, + roi_indices.get())) { + pcl::copyPointCloud(*point_cloud, *roi_indices, *roi_cloud); + roi_indices_ = roi_indices; + } else { + AERROR << "failed to call roi filter."; + error_code_ = common::PERCEPTION_ERROR_PROCESS; + return false; + } + } + ADEBUG << "call roi_filter succ. The num of roi_cloud is: " + << roi_cloud->points.size(); + PERF_BLOCK_END("lidar_roi_filter"); + + /// call segmentor + std::vector objects; + if (segmentor_ != nullptr) { + SegmentationOptions segmentation_options; + segmentation_options.origin_cloud = point_cloud; + PointIndices non_ground_indices; + non_ground_indices.indices.resize(roi_cloud->points.size()); + // non_ground_indices.indices.resize(point_cloud->points.size()); + + std::iota(non_ground_indices.indices.begin(), + non_ground_indices.indices.end(), 0); + if (!segmentor_->Segment(roi_cloud, non_ground_indices, + segmentation_options, &objects)) { + AERROR << "failed to call segmention."; + error_code_ = common::PERCEPTION_ERROR_PROCESS; + return false; + } + } + ADEBUG << "call segmentation succ. The num of objects is: " << objects.size(); + PERF_BLOCK_END("lidar_segmentation"); + + /// call object builder + if (object_builder_ != nullptr) { + ObjectBuilderOptions object_builder_options; + if (!object_builder_->Build(object_builder_options, &objects)) { + AERROR << "failed to call object builder."; + error_code_ = common::PERCEPTION_ERROR_PROCESS; + return false; + } + } + ADEBUG << "call object_builder succ."; + PERF_BLOCK_END("lidar_object_builder"); + + /// call tracker + if (tracker_ != nullptr) { + TrackerOptions tracker_options; + tracker_options.velodyne_trans = velodyne_trans; + tracker_options.hdmap = hdmap; + tracker_options.hdmap_input = hdmap_input_; + if (!tracker_->Track(objects, timestamp, tracker_options, &objects_)) { + AERROR << "failed to call tracker."; + error_code_ = common::PERCEPTION_ERROR_PROCESS; + return false; + } + } + + PERF_BLOCK_END("lidar_tracker"); + ADEBUG << "lidar process succ, there are " << objects_.size() + << " tracked objects."; + return true; +} + +void LidarProcess::RegistAllAlgorithm() { + RegisterFactoryDummyROIFilter(); + RegisterFactoryDummySegmentation(); + RegisterFactoryDummyObjectBuilder(); + RegisterFactoryDummyTracker(); + + RegisterFactoryHdmapROIFilter(); + RegisterFactoryCNNSegmentation(); + RegisterFactoryMinBoxObjectBuilder(); + RegisterFactoryHmObjectTracker(); +} + +bool LidarProcess::InitFrameDependence() { + /// init config manager + ConfigManager* config_manager = ConfigManager::instance(); + if (!config_manager->Init()) { + AERROR << "failed to init ConfigManager"; + return false; + } + AINFO << "Init config manager successfully, work_root: " + << config_manager->work_root(); + + /// init hdmap + if (FLAGS_enable_hdmap_input) { + hdmap_input_ = HDMapInput::instance(); + if (!hdmap_input_) { + AERROR << "failed to get HDMapInput instance."; + return false; + } + if (!hdmap_input_->Init()) { + AERROR << "failed to init HDMapInput"; + return false; + } + AINFO << "get and init hdmap_input succ."; + } + + return true; +} + +bool LidarProcess::InitAlgorithmPlugin() { + /// init roi filter + roi_filter_.reset( + BaseROIFilterRegisterer::GetInstanceByName(FLAGS_onboard_roi_filter)); + if (!roi_filter_) { + AERROR << "Failed to get instance: " << FLAGS_onboard_roi_filter; + return false; + } + if (!roi_filter_->Init()) { + AERROR << "Failed to init roi filter: " << roi_filter_->name(); + return false; + } + AINFO << "Init algorithm plugin successfully, roi_filter_: " + << roi_filter_->name(); + + /// init segmentation + segmentor_.reset( + BaseSegmentationRegisterer::GetInstanceByName(FLAGS_onboard_segmentor)); + if (!segmentor_) { + AERROR << "Failed to get instance: " << FLAGS_onboard_segmentor; + return false; + } + if (!segmentor_->Init()) { + AERROR << "Failed to init segmentor: " << segmentor_->name(); + return false; + } + AINFO << "Init algorithm plugin successfully, segmentor: " + << segmentor_->name(); + + /// init object build + object_builder_.reset(BaseObjectBuilderRegisterer::GetInstanceByName( + FLAGS_onboard_object_builder)); + if (!object_builder_) { + AERROR << "Failed to get instance: " << FLAGS_onboard_object_builder; + return false; + } + if (!object_builder_->Init()) { + AERROR << "Failed to init object builder: " << object_builder_->name(); + return false; + } + AINFO << "Init algorithm plugin successfully, object builder: " + << object_builder_->name(); + + /// init tracker + tracker_.reset( + BaseTrackerRegisterer::GetInstanceByName(FLAGS_onboard_tracker)); + if (!tracker_) { + AERROR << "Failed to get instance: " << FLAGS_onboard_tracker; + return false; + } + if (!tracker_->Init()) { + AERROR << "Failed to init tracker: " << tracker_->name(); + return false; + } + AINFO << "Init algorithm plugin successfully, tracker: " << tracker_->name(); + + return true; +} + +void LidarProcess::TransPointCloudToPCL(const sensor_msgs::PointCloud2& in_msg, + PointCloudPtr* out_cloud) { + // transform from ros to pcl + pcl::PointCloud in_cloud; + pcl::fromROSMsg(in_msg, in_cloud); + // transform from xyzit to xyzi + PointCloudPtr& cloud = *out_cloud; + cloud->header = in_cloud.header; + cloud->width = in_cloud.width; + cloud->height = in_cloud.height; + cloud->is_dense = in_cloud.is_dense; + cloud->sensor_origin_ = in_cloud.sensor_origin_; + cloud->sensor_orientation_ = in_cloud.sensor_orientation_; + cloud->points.resize(in_cloud.points.size()); + size_t points_num = 0; + for (size_t idx = 0; idx < in_cloud.size(); ++idx) { + pcl_util::PointXYZIT& pt = in_cloud.points[idx]; + if (!isnan(pt.x) && !isnan(pt.y) && !isnan(pt.z) && !isnan(pt.intensity)) { + cloud->points[points_num].x = pt.x; + cloud->points[points_num].y = pt.y; + cloud->points[points_num].z = pt.z; + cloud->points[points_num].intensity = pt.intensity; + points_num++; + } + } + cloud->points.resize(points_num); +} + +bool LidarProcess::GetVelodyneTrans(const double query_time, Matrix4d* trans) { + if (!trans) { + AERROR << "failed to get trans, the trans ptr can not be NULL"; + return false; + } + + ros::Time query_stamp(query_time); + static tf2_ros::Buffer tf2_buffer; + static tf2_ros::TransformListener tf2Listener(tf2_buffer); + + const double kTf2BuffSize = FLAGS_tf2_buff_in_ms / 1000.0; + string err_msg; + if (!tf2_buffer.canTransform(FLAGS_lidar_tf2_frame_id, + FLAGS_lidar_tf2_child_frame_id, query_stamp, + ros::Duration(kTf2BuffSize), &err_msg)) { + AERROR << "Cannot transform frame: " << FLAGS_lidar_tf2_frame_id + << " to frame " << FLAGS_lidar_tf2_child_frame_id + << " , err: " << err_msg + << ". Frames: " << tf2_buffer.allFramesAsString(); + return false; + } + + geometry_msgs::TransformStamped transform_stamped; + try { + transform_stamped = tf2_buffer.lookupTransform( + FLAGS_lidar_tf2_frame_id, FLAGS_lidar_tf2_child_frame_id, query_stamp); + } catch (tf2::TransformException& ex) { + AERROR << "Exception: " << ex.what(); + return false; + } + Affine3d affine_3d; + tf::transformMsgToEigen(transform_stamped.transform, affine_3d); + *trans = affine_3d.matrix(); + + ADEBUG << "get " << FLAGS_lidar_tf2_frame_id << " to " + << FLAGS_lidar_tf2_child_frame_id << " trans: " << *trans; + return true; +} + +bool LidarProcess::GeneratePbMsg(PerceptionObstacles* obstacles) { + AdapterManager::FillPerceptionObstaclesHeader(FLAGS_obstacle_module_name, + obstacles); + common::Header* header = obstacles->mutable_header(); + header->set_lidar_timestamp(timestamp_ * 1e9); // in ns + header->set_camera_timestamp(0); + header->set_radar_timestamp(0); + + obstacles->set_error_code(error_code_); + + for (const auto& obj : objects_) { + PerceptionObstacle* obstacle = obstacles->add_perception_obstacle(); + if (!obj->Serialize(obstacle)) { + AERROR << "Failed gen PerceptionObstacle. Object:" << obj->ToString(); + return false; + } + obstacle->set_timestamp(obstacle->timestamp() * 1000); + } + + ADEBUG << "PerceptionObstacles: " << obstacles->ShortDebugString(); + return true; +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/obstacle/onboard/lidar_process.h b/modules/perception/obstacle/onboard/lidar_process.h new file mode 100644 index 00000000000..892da975367 --- /dev/null +++ b/modules/perception/obstacle/onboard/lidar_process.h @@ -0,0 +1,90 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODEULES_PERCEPTION_OBSTACLE_ONBOARD_LIDAR_PROCESS_H_ +#define MODEULES_PERCEPTION_OBSTACLE_ONBOARD_LIDAR_PROCESS_H_ + +#include +#include + +#include "Eigen/Core" +#include "gtest/gtest_prod.h" +#include "sensor_msgs/PointCloud2.h" + +#include "modules/perception/proto/perception_obstacle.pb.h" + +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/lidar/interface/base_object_builder.h" +#include "modules/perception/obstacle/lidar/interface/base_roi_filter.h" +#include "modules/perception/obstacle/lidar/interface/base_segmentation.h" +#include "modules/perception/obstacle/lidar/interface/base_tracker.h" +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/frame_content.h" +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/opengl_visualizer.h" +#include "modules/perception/obstacle/onboard/hdmap_input.h" + +namespace apollo { +namespace perception { + +class LidarProcess { + public: + LidarProcess() = default; + ~LidarProcess() = default; + + bool Init(); + bool IsInit() { return inited_; } + bool Process(const sensor_msgs::PointCloud2& message); + + bool Process(const double timestamp, pcl_util::PointCloudPtr cloud, + std::shared_ptr velodyne_trans); + + bool GeneratePbMsg(PerceptionObstacles* obstacles); + + std::vector GetObjects() { return objects_; } + + pcl_util::PointIndicesPtr GetROIIndices() { return roi_indices_; } + + private: + void RegistAllAlgorithm(); + bool InitFrameDependence(); + bool InitAlgorithmPlugin(); + + void TransPointCloudToPCL(const sensor_msgs::PointCloud2& in_msg, + pcl_util::PointCloudPtr* out_cloud); + bool GetVelodyneTrans(const double query_time, Eigen::Matrix4d* trans); + + bool inited_ = false; + double timestamp_; + common::ErrorCode error_code_ = common::OK; + std::vector objects_; + HDMapInput* hdmap_input_ = NULL; + std::unique_ptr roi_filter_; + std::unique_ptr segmentor_; + std::unique_ptr object_builder_; + std::unique_ptr tracker_; + pcl_util::PointIndicesPtr roi_indices_; + + std::unique_ptr visualizer_ = nullptr; + + FRIEND_TEST(LidarProcessTest, test_Init); + FRIEND_TEST(LidarProcessTest, test_Process); + FRIEND_TEST(LidarProcessTest, test_GeneratePbMsg); +}; + +} // namespace perception +} // namespace apollo + +#endif // MODEULES_PERCEPTION_OBSTACLE_ONBOARD_LIDAR_PROCESS_H_ diff --git a/modules/perception/obstacle/onboard/lidar_process_test.cc b/modules/perception/obstacle/onboard/lidar_process_test.cc new file mode 100644 index 00000000000..76d73d50abf --- /dev/null +++ b/modules/perception/obstacle/onboard/lidar_process_test.cc @@ -0,0 +1,141 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/perception/obstacle/onboard/lidar_process.h" + +#include +#include + +#include "gtest/gtest.h" +#include "pcl/io/pcd_io.h" + +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/configs/config_gflags.h" +#include "modules/common/log.h" +#include "modules/perception/common/perception_gflags.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/lidar/dummy/dummy_algorithms.h" + +namespace apollo { +namespace perception { + +using std::vector; +using pcl_util::Point; +using pcl_util::PointCloud; +using pcl_util::PointCloudPtr; +using Eigen::Matrix4d; + +class LidarProcessTest : public testing::Test { + protected: + LidarProcessTest() { + common::adapter::AdapterManagerConfig config; + config.set_is_ros(false); + { + auto *sub_config = config.add_config(); + sub_config->set_mode(common::adapter::AdapterConfig::PUBLISH_ONLY); + sub_config->set_type( + common::adapter::AdapterConfig::PERCEPTION_OBSTACLES); + } + + common::adapter::AdapterManager::Init(config); + } + virtual ~LidarProcessTest() {} + + LidarProcess lidar_process_; +}; + +TEST_F(LidarProcessTest, test_Init) { + lidar_process_.inited_ = true; + EXPECT_TRUE(lidar_process_.Init()); + lidar_process_.inited_ = false; + + FLAGS_work_root = "modules/perception/data"; + FLAGS_enable_hdmap_input = false; + EXPECT_FALSE(lidar_process_.InitFrameDependence()); + EXPECT_FALSE(lidar_process_.Init()); + FLAGS_config_manager_path = "./config_manager_test/config_manager.config"; + FLAGS_enable_hdmap_input = false; + EXPECT_TRUE(lidar_process_.InitFrameDependence()); + + FLAGS_onboard_roi_filter = "not_exit_algo"; + FLAGS_onboard_segmentor = "not_exit_algo"; + FLAGS_onboard_object_builder = "not_exit_algo"; + FLAGS_onboard_tracker = "not_exit_algo"; + EXPECT_FALSE(lidar_process_.InitAlgorithmPlugin()); + FLAGS_onboard_roi_filter = "DummyROIFilter"; + EXPECT_FALSE(lidar_process_.InitAlgorithmPlugin()); + + FLAGS_onboard_segmentor = "DummySegmentation"; + EXPECT_FALSE(lidar_process_.InitAlgorithmPlugin()); + + FLAGS_onboard_object_builder = "DummyObjectBuilder"; + EXPECT_FALSE(lidar_process_.InitAlgorithmPlugin()); + EXPECT_FALSE(lidar_process_.Init()); + + FLAGS_onboard_tracker = "DummyTracker"; + EXPECT_TRUE(lidar_process_.InitAlgorithmPlugin()); + + EXPECT_TRUE(lidar_process_.Init()); + EXPECT_TRUE(lidar_process_.inited_); +} + +TEST_F(LidarProcessTest, test_Process) { + std::string pcd_file = + "modules/perception/data/hm_tracker_test/" + "QN68P2_12_1476265365_1476265665_2.pcd"; + PointCloudPtr point_cloud(new PointCloud); + pcl::PointCloud::Ptr org_cloud( + new pcl::PointCloud); + pcl::io::loadPCDFile(pcd_file, *org_cloud); + point_cloud->points.reserve(org_cloud->points.size()); + for (size_t i = 0; i < org_cloud->points.size(); ++i) { + Point pt; + pt.x = org_cloud->points[i].x; + pt.y = org_cloud->points[i].y; + pt.z = org_cloud->points[i].z; + pt.intensity = org_cloud->points[i].intensity; + if (isnan(org_cloud->points[i].x)) continue; + point_cloud->push_back(pt); + } + std::shared_ptr velodyne_trans = std::make_shared(); + (*velodyne_trans) << 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1; + lidar_process_.hdmap_input_ = HDMapInput::instance(); + EXPECT_TRUE(lidar_process_.Process(123.0, point_cloud, velodyne_trans)); +} + +TEST_F(LidarProcessTest, test_GeneratePbMsg) { + double timestamp = 1234.567; + lidar_process_.timestamp_ = timestamp; + vector objs; + ObjectPtr obj1 = std::make_shared(); + obj1->type = VEHICLE; + objs.push_back(obj1); + ObjectPtr obj2 = std::make_shared(); + obj2->type = PEDESTRIAN; + objs.push_back(obj2); + lidar_process_.objects_ = objs; + + PerceptionObstacles obstacles; + EXPECT_TRUE(lidar_process_.GeneratePbMsg(&obstacles)); + EXPECT_EQ(obstacles.perception_obstacle_size(), 2); + EXPECT_EQ(obstacles.perception_obstacle(0).type(), + PerceptionObstacle::VEHICLE); + EXPECT_EQ(obstacles.perception_obstacle(1).type(), + PerceptionObstacle::PEDESTRIAN); +} + +} // namespace perception +} // namespace apollo diff --git a/modules/perception/perception.cc b/modules/perception/perception.cc index bc36c37ce47..cce459e96c9 100644 --- a/modules/perception/perception.cc +++ b/modules/perception/perception.cc @@ -14,46 +14,54 @@ * limitations under the License. *****************************************************************************/ -#include "modules/perception/perception.h" - #include "modules/common/adapters/adapter_manager.h" +#include "modules/common/log.h" #include "modules/perception/common/perception_gflags.h" +#include "modules/perception/obstacle/base/object.h" +#include "modules/perception/obstacle/onboard/lidar_process.h" +#include "modules/perception/perception.h" #include "ros/include/ros/ros.h" +#include "sensor_msgs/PointCloud2.h" namespace apollo { namespace perception { using apollo::common::adapter::AdapterManager; using apollo::common::Status; +using apollo::common::ErrorCode; std::string Perception::Name() const { return "perception"; } Status Perception::Init() { - AdapterManager::Init(); + AdapterManager::Init(FLAGS_adapter_config_filename); + + lidar_process_.reset(new LidarProcess()); + if (lidar_process_ != nullptr && !lidar_process_->Init()) { + AERROR << "failed to init lidar_process."; + return Status(ErrorCode::PERCEPTION_ERROR, "failed to init lidar_process."); + } + + CHECK(AdapterManager::GetPointCloud()) << "PointCloud is not initialized."; + AdapterManager::AddPointCloudCallback(&Perception::OnPointCloud, this); return Status::OK(); } -Status Perception::Start() { - ros::AsyncSpinner spinner(1); - spinner.start(); - ros::waitForShutdown(); - spinner.stop(); - ros::Rate loop_rate(FLAGS_perception_loop_rate); - while (ros::ok()) { - AdapterManager::Observe(); - PerceptionObstacles perceptionObstacles; - AdapterManager::FillPerceptionObstaclesHeader( - Name(), perceptionObstacles.mutable_header()); - AdapterManager::PublishPerceptionObstacles(perceptionObstacles); - - TrafficLightDetection trafficLightDetection; - AdapterManager::FillTrafficLightDetectionHeader( - Name(), trafficLightDetection.mutable_header()); - AdapterManager::PublishTrafficLightDetection(trafficLightDetection); +void Perception::OnPointCloud(const sensor_msgs::PointCloud2& message) { + ADEBUG << "get point cloud callback"; + + if (lidar_process_ != nullptr && lidar_process_->IsInit()) { + lidar_process_->Process(message); + + /// public obstacle message + PerceptionObstacles obstacles; + if (lidar_process_->GeneratePbMsg(&obstacles)) { + AdapterManager::PublishPerceptionObstacles(obstacles); + } } - return Status::OK(); } +Status Perception::Start() { return Status::OK(); } + void Perception::Stop() {} } // namespace perception diff --git a/modules/perception/perception.h b/modules/perception/perception.h index fca3d2b3fb2..0c550dd5538 100644 --- a/modules/perception/perception.h +++ b/modules/perception/perception.h @@ -21,11 +21,14 @@ #ifndef MODEULES_PERCEPTION_PERCEPTION_H_ #define MODEULES_PERCEPTION_PERCEPTION_H_ +#include #include #include "modules/common/apollo_app.h" #include "modules/common/macro.h" +#include "modules/perception/obstacle/onboard/lidar_process.h" #include "ros/include/ros/ros.h" +#include "sensor_msgs/PointCloud2.h" /** * @namespace apollo::perception @@ -34,12 +37,18 @@ namespace apollo { namespace perception { -class Perception : public apollo::common::ApolloApp { +class Perception : public common::ApolloApp { public: std::string Name() const override; - apollo::common::Status Init() override; - apollo::common::Status Start() override; + common::Status Init() override; + common::Status Start() override; void Stop() override; + + private: + // Upon receiving point cloud data + void OnPointCloud(const sensor_msgs::PointCloud2& message); + + std::unique_ptr lidar_process_; }; } // namespace perception diff --git a/modules/perception/proto/BUILD b/modules/perception/proto/BUILD index dae2f8ee650..22b0b077e42 100644 --- a/modules/perception/proto/BUILD +++ b/modules/perception/proto/BUILD @@ -1,26 +1,21 @@ package(default_visibility = ["//visibility:public"]) -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile") - cc_proto_library( name = "perception_proto", - protos = [ - "perception_obstacle.proto", - "traffic_light_detection.proto", - ], deps = [ - "//modules/common/proto:common_proto", + ":perception_proto_lib", ], ) -py_proto_compile( - name = "perception_proto_pylib", - protos = [ +proto_library( + name = "perception_proto_lib", + srcs = [ "perception_obstacle.proto", "traffic_light_detection.proto", ], deps = [ - "//modules/common/proto:common_proto_pylib", + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:error_code_proto_lib", + "//modules/common/proto:header_proto_lib", ], ) diff --git a/modules/perception/proto/perception_obstacle.proto b/modules/perception/proto/perception_obstacle.proto index b8c592e2027..450019f258d 100644 --- a/modules/perception/proto/perception_obstacle.proto +++ b/modules/perception/proto/perception_obstacle.proto @@ -5,6 +5,7 @@ package apollo.perception; import "modules/common/proto/error_code.proto"; import "modules/common/proto/header.proto"; +// TODO(all) change to Point3D message Point { optional double x = 1; // in meters. optional double y = 2; // in meters. diff --git a/modules/perception/tool/offline_visualizer_tool/BUILD b/modules/perception/tool/offline_visualizer_tool/BUILD new file mode 100644 index 00000000000..5699f3cf5c2 --- /dev/null +++ b/modules/perception/tool/offline_visualizer_tool/BUILD @@ -0,0 +1,30 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_binary( + name = "offline_lidar_visualizer_tool", + srcs = ["offline_lidar_visualizer_tool.cc"], + data = [ + "//modules/perception:perception_model", + "//modules/perception/tool/offline_visualizer_tool/conf:perception_tool_config", + ], + linkstatic = 0, + deps = [ + "//modules/common", + "//modules/common:log", + "//modules/perception/common:perception_common", + "//modules/perception/lib/base", + "//modules/perception/lib/config_manager", + "//modules/perception/lib/pcl_util", + "//modules/perception/obstacle/common:perception_obstacle_common", + "//modules/perception/obstacle/lidar/visualizer/opengl_visualizer:perception_obstacle_lidar_opengl_visualizer", + "//modules/perception/obstacle/onboard:perception_obstacle_lidar_process", + "@eigen//:eigen", + "@glew//:glew", + "@glfw//:glfw", + "@opengl//:opengl", + ], +) + +cpplint() diff --git a/modules/perception/tool/offline_visualizer_tool/conf/BUILD b/modules/perception/tool/offline_visualizer_tool/conf/BUILD new file mode 100644 index 00000000000..473b1c8a7aa --- /dev/null +++ b/modules/perception/tool/offline_visualizer_tool/conf/BUILD @@ -0,0 +1,9 @@ +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "perception_tool_config", + srcs = [ + "config_manager.config", + "offline_lidar_perception_test.flag", + ], +) diff --git a/modules/perception/tool/offline_visualizer_tool/conf/config_manager.config b/modules/perception/tool/offline_visualizer_tool/conf/config_manager.config new file mode 100644 index 00000000000..b804051e193 --- /dev/null +++ b/modules/perception/tool/offline_visualizer_tool/conf/config_manager.config @@ -0,0 +1,2 @@ +model_config_path: "model/tracker.config" +model_config_path: "model/cnn_segmentation.config" diff --git a/modules/perception/tool/offline_visualizer_tool/conf/offline_lidar_perception_test.flag b/modules/perception/tool/offline_visualizer_tool/conf/offline_lidar_perception_test.flag new file mode 100644 index 00000000000..728afacc148 --- /dev/null +++ b/modules/perception/tool/offline_visualizer_tool/conf/offline_lidar_perception_test.flag @@ -0,0 +1,90 @@ + +--work_root=modules/perception +--config_manager_path=conf/config_manager.config + +#################################################################### +# Flags from obstacle/lidar/test/offline_lidar_perception_test.cpp +# pcd path +# type: string +# default: ./pcd/ +--pcd_path=/data/pcd/ + +# pose path +# type: string +# default: ./pose/ +--pose_path=/data/pose/ + +# output path +# type: string +# default: ./output/ +--save_obstacles=false +--output_path=/data/output/ + +# enable visualization +# type: bool +# default: true +--enable_visualization=false + +#################################################################### +# Flags from obstacle/onboard/hdmap_input.cc + +# roi distance of car center +# type: double +# default: 60.0 +--map_radius=60.0 + +# step for sample road boundary points +# type: int32 +# default: 1 +--map_sample_step=1 + +--flagfile=modules/common/data/global_flagfile.txt + +#################################################################### +# Flags from obstacle/onboard/lidar_process.cc +# enable hdmap input for roi filter +# type: bool +# default: false +--enable_hdmap_input=true + +# roi filter before GroundDetector. +# type: string +# candidate: DummyROIFilter, HdmapROIFilter +--onboard_roi_filter=HdmapROIFilter + +# the segmentation algorithm for onboard +# type: string +# candidate: DummySegmentation, CNNSegmentation +--onboard_segmentor=CNNSegmentation + +# the object build algorithm for onboard +# type: string +# candidate: DummyObjectBuilder, MinBoxObjectBuilder +--onboard_object_builder=MinBoxObjectBuilder + +# the tracking algorithm for onboard +# type: string +# candidate: DummyTracker, HmObjectTracker +--onboard_tracker=HmObjectTracker + +# the perception module's output topic name. +# type: string +# default: perception_obstacle +--obstacle_module_name=perception_obstacle + +# Query Ros TF timeout in ms. ros::Duration time. +# type: int +# default: 10 +--tf2_buff_in_ms=10 + +# ros TF2 quary frame id. tf2_buffer.lookupTransform. +# type: string +# default: world +--lidar_tf2_frame_id=world + +# ros TF2 quary child frame id. tf2_buffer.lookupTransform. +# type: string +# default: velodyne64 +--lidar_tf2_child_frame_id=velodyne64 + +--v=3 diff --git a/modules/perception/tool/offline_visualizer_tool/offline_lidar_visualizer_tool.cc b/modules/perception/tool/offline_visualizer_tool/offline_lidar_visualizer_tool.cc new file mode 100644 index 00000000000..bd5b1c5bac0 --- /dev/null +++ b/modules/perception/tool/offline_visualizer_tool/offline_lidar_visualizer_tool.cc @@ -0,0 +1,225 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include +#include +#include +#include +#include + +#include "pcl/io/pcd_io.h" + +#include "modules/perception/common/perception_gflags.h" +#include "modules/perception/lib/config_manager/config_manager.h" +#include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/obstacle/common/file_system_util.h" +#include "modules/perception/obstacle/common/pose_util.h" +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/frame_content.h" +#include "modules/perception/obstacle/lidar/visualizer/opengl_visualizer/opengl_visualizer.h" +#include "modules/perception/obstacle/onboard/lidar_process.h" + +DECLARE_string(flagfile); +DECLARE_bool(enable_visualization); +DECLARE_string(config_manager_path); +DEFINE_string(pcd_path, "./pcd/", "pcd path"); +DEFINE_string(pose_path, "./pose/", "pose path"); +DEFINE_string(output_path, "./output/", "output path"); +DEFINE_bool(save_obstacles, true, "save obstacles to file"); + +namespace apollo { +namespace perception { + +DEFINE_int32(start_frame, 1, "start frame"); + +class OfflineLidarPerceptionTool { + public: + bool Init(bool use_visualization = false) { + if (!ConfigManager::instance()->Init()) { + AERROR << "failed to init ConfigManager"; + return false; + } + + lidar_process_.reset(new LidarProcess()); + if (!lidar_process_->Init()) { + AERROR << "failed to init lidar_process."; + return false; + } + + if (use_visualization) { + visualizer_.reset(new OpenglVisualizer()); + if (!visualizer_->Init()) { + AERROR << "init visialuzer failed" << std::endl; + } + } + return true; + } + + void Run(const std::string& pcd_path, const std::string& pose_path, + const std::string& output_path) { + std::string pcd_folder = pcd_path; + std::string pose_folder = pose_path; + std::vector pcd_file_names; + std::vector pose_file_names; + AINFO << "starting to run"; + GetFileNamesInFolderById(pose_folder, ".pose", &pose_file_names); + GetFileNamesInFolderById(pcd_folder, ".pcd", &pcd_file_names); + AINFO << " pose size " << pose_file_names.size(); + AINFO << " pcd size " << pcd_file_names.size(); + if (pose_file_names.size() != pcd_file_names.size()) { + AERROR << "pcd file number does not match pose file number"; + return; + } + double time_stamp = 0.0; + int start_frame = FLAGS_start_frame; + AINFO << "starting frame is " << start_frame; + sleep(1); + for (size_t i = 0; i < pcd_file_names.size(); i++) { + AINFO << "***************** Frame " << i << " ******************"; + std::ostringstream oss; + pcl_util::PointCloudPtr cloud(new pcl_util::PointCloud); + AINFO << "load pcd file from file path" << pcd_folder + pcd_file_names[i]; + pcl::io::loadPCDFile(pcd_folder + pcd_file_names[i], + *cloud); + + // read pose + Eigen::Matrix4d pose = Eigen::Matrix4d::Identity(); + int frame_id = -1; + if (!ReadPoseFile(pose_folder + pose_file_names[i], &pose, &frame_id, + &time_stamp)) { + AERROR << "Failed to read pose file" << pose_file_names[i]; + return; + } + + auto velodyne_trans = std::make_shared(pose); + lidar_process_->Process(time_stamp, cloud, velodyne_trans); + + std::vector result_objects = lidar_process_->GetObjects(); + const pcl_util::PointIndicesPtr roi_indices = + lidar_process_->GetROIIndices(); + + pcl_util::PointCloudPtr roi_cloud(new pcl_util::PointCloud); + pcl::copyPointCloud(*cloud, *roi_indices, *roi_cloud); + + if (visualizer_) { + pcl_util::PointDCloudPtr transformed_cloud(new pcl_util::PointDCloud); + TransformPointCloud(cloud, pose, transformed_cloud); + AERROR << "transformed cloud size is " << transformed_cloud->size(); + + pcl_util::PointIndices roi_indices_1; + FrameContent content; + content.SetLidarPose(pose); + content.SetLidarCloud(cloud); + content.SetLidarRoiCloud(roi_cloud); + content.SetTrackedObjects(result_objects); + visualizer_->UpdateCameraSystem(&content); + visualizer_->Render(content); + } + AINFO << "finish pc"; + + if (FLAGS_save_obstacles) { + oss << std::setfill('0') << std::setw(6) << i; + std::string filename = FLAGS_output_path + oss.str() + ".txt"; + SaveTrackingInformation(&result_objects, pose, frame_id, cloud, + filename); + } + } + } + + void SaveTrackingInformation(std::vector* objects, + const Eigen::Matrix4d& pose_v2w, + const int& frame_id, + const pcl_util::PointCloudPtr& cloud, + const std::string& filename) { + std::ofstream fout(filename.c_str(), std::ios::out); + if (!fout) { + AERROR << filename << " is not exist!"; + return; + } + // write frame id & number of objects at the beignning + fout << frame_id << " " << objects->size() << std::endl; + + typename pcl::PointCloud::Ptr trans_cloud( + new pcl::PointCloud()); + Eigen::Matrix4d pose_velo2tw = pose_v2w; + pcl::copyPointCloud(*cloud, *trans_cloud); + TransformPointCloud(pose_v2w, trans_cloud); + AINFO << "point size of transforming cloud is " << trans_cloud->size(); + pcl::KdTreeFLANN pcl_kdtree; + pcl_kdtree.setInputCloud(trans_cloud); + std::vector k_indices; + std::vector k_sqrt_dist; + Eigen::Matrix4d pose_tw2velo = pose_velo2tw.inverse(); + + for (const auto& obj : *objects) { + Eigen::Vector3f coord_dir(0.0, 1.0, 0.0); + Eigen::Vector4d dir_velo = + pose_tw2velo * Eigen::Vector4d(obj->direction[0], obj->direction[1], + obj->direction[2], 0); + Eigen::Vector4d ct_velo = + pose_tw2velo * + Eigen::Vector4d(obj->center[0], obj->center[1], obj->center[2], 1); + Eigen::Vector3f dir_velo3(dir_velo[0], dir_velo[1], dir_velo[2]); + double theta = VectorTheta2dXy(coord_dir, dir_velo3); + std::string type = "unknown"; + if (obj->type == PEDESTRIAN) { + type = "pedestrain"; + } else if (obj->type == VEHICLE) { + type = "smallMot"; + } else if (obj->type == BICYCLE) { + type = "nonMot"; + } + // write tracking details + fout << obj->id << " " << obj->track_id << " " << type << " " + << std::setprecision(10) << ct_velo[0] << " " << ct_velo[1] << " " + << ct_velo[2] << " " << obj->length << " " << obj->width << " " + << obj->height << " " << theta << " " << 0 << " " << 0 << " " + << obj->velocity[0] << " " << obj->velocity[1] << " " + << obj->velocity[2] << " " << obj->cloud->size() << " "; + + for (const pcl_util::Point& pt : *obj->cloud) { + pcl_util::Point query_pt; + query_pt.x = pt.x; + query_pt.y = pt.y; + query_pt.z = pt.z; + k_indices.resize(1); + k_sqrt_dist.resize(1); + pcl_kdtree.nearestKSearch(query_pt, 1, k_indices, k_sqrt_dist); + fout << k_indices[0] << " "; + } + fout << std::endl; + } + fout.close(); + } + + protected: + std::unique_ptr lidar_process_; + std::unique_ptr visualizer_; +}; + +} // namespace perception +} // namespace apollo + +int main(int argc, char* argv[]) { + FLAGS_flagfile = + "./modules/perception/tool/offline_visualizer_tool/conf/" + "offline_lidar_perception_test.flag"; + gflags::ParseCommandLineFlags(&argc, &argv, true); + apollo::perception::OfflineLidarPerceptionTool tool; + tool.Init(FLAGS_enable_visualization); + tool.Run(FLAGS_pcd_path, FLAGS_pose_path, FLAGS_output_path); + return 0; +} diff --git a/modules/planning/BUILD b/modules/planning/BUILD index 5496a1ea9ca..925f33336c0 100644 --- a/modules/planning/BUILD +++ b/modules/planning/BUILD @@ -6,23 +6,26 @@ cc_library( name = "planning_impl", srcs = [ "planning.cc", - "planning_node.cc", ], - hdrs = glob([ - "*.h", - ]), + hdrs = [ + "planning.h", + ], deps = [ "//modules/common", + "//modules/common:apollo_app", "//modules/common:log", "//modules/common/adapters:adapter_manager", - "//modules/common/proto:path_point_proto", - "//modules/common/util:factory", + "//modules/common/configs:config_gflags", + "//modules/common/proto:pnc_point_proto", "//modules/common/vehicle_state", - "//modules/decision/proto:decision_proto", + "//modules/map/hdmap:hdmap_util", "//modules/perception/proto:perception_proto", - "//modules/planning/common:lib_planning_common", - "//modules/planning/planner:lib_planner", + "//modules/planning/common:planning_common", + "//modules/planning/planner/em:em_planner", + "//modules/planning/planner/rtk:rtk_planner", "//modules/planning/proto:planning_proto", + "//modules/planning/reference_line:reference_line_provider", + "//modules/planning/trajectory_stitcher", "//modules/prediction/proto:prediction_proto", "@ros//:ros_common", ], @@ -44,4 +47,11 @@ filegroup( ]), ) +filegroup( + name = "planning_conf", + srcs = glob([ + "conf/**", + ]), +) + cpplint() diff --git a/modules/planning/common/BUILD b/modules/planning/common/BUILD index ea7c29b4152..04e5d310789 100644 --- a/modules/planning/common/BUILD +++ b/modules/planning/common/BUILD @@ -3,15 +3,249 @@ load("//tools:cpplint.bzl", "cpplint") package(default_visibility = ["//visibility:public"]) cc_library( - name = "lib_planning_common", + name = "indexed_list", + hdrs = [ + "indexed_list.h", + ], +) + +cc_test( + name = "indexed_list_test", + size = "small", srcs = [ - "planning_gflags.cc", + "indexed_list_test.cc", + ], + deps = [ + ":indexed_list", + "//modules/common/util", + "@gtest//:main", + ], +) + +cc_library( + name = "indexed_queue", + hdrs = [ + "indexed_queue.h", + ], +) + +cc_test( + name = "indexed_queue_test", + size = "small", + srcs = [ + "indexed_queue_test.cc", ], - hdrs = glob([ - "*.h", + deps = [ + ":indexed_queue", + "//modules/common/util", + "@gtest//:main", + ], +) + +cc_library( + name = "obstacle", + srcs = [ + "obstacle.cc", + ], + hdrs = [ + "obstacle.h", + ], + deps = [ + ":indexed_list", + "//modules/common/math:box2d", + "//modules/common/math:polygon2d", + "//modules/common/util", + "//modules/perception/proto:perception_proto", + "//modules/planning/common:planning_gflags", + "//modules/planning/common:planning_util", + "//modules/planning/proto:planning_proto", + "//modules/prediction/proto:prediction_proto", + ], +) + +filegroup( + name = "common_testdata", + srcs = glob([ + "testdata/**", ]), +) + +cc_test( + name = "obstacle_test", + size = "small", + srcs = [ + "obstacle_test.cc", + ], + data = [ + "//modules/planning/common:common_testdata", + ], + deps = [ + ":obstacle", + "//modules/common/util", + "//modules/perception/proto:perception_proto", + "@gtest//:main", + ], +) + +cc_library( + name = "path_obstacle", + srcs = [ + "path_obstacle.cc", + ], + hdrs = [ + "path_obstacle.h", + ], + deps = [ + ":indexed_list", + ":obstacle", + "//modules/common/configs:vehicle_config_helper", + "//modules/planning/common/speed:st_boundary", + "//modules/planning/proto:planning_proto", + "//modules/planning/reference_line", + ], +) + +cc_test( + name = "path_obstacle_test", + size = "small", + srcs = [ + "path_obstacle_test.cc", + ], + deps = [ + ":path_obstacle", + "@gtest//:main", + ], +) + +cc_library( + name = "planning_util", + srcs = [ + "planning_util.cc", + ], + hdrs = [ + "planning_util.h", + ], + deps = [ + "//modules/common/math", + "//modules/common/proto:pnc_point_proto", + "//modules/planning/math:hermite_spline", + "//modules/planning/proto:planning_proto", + ], +) + +cc_library( + name = "path_decision", + srcs = [ + "path_decision.cc", + ], + hdrs = [ + "path_decision.h", + ], + deps = [ + ":obstacle", + ":path_obstacle", + "//modules/planning/reference_line", + ], +) + +cc_library( + name = "planning_gflags", + srcs = [ + "planning_gflags.cc", + ], + hdrs = [ + "planning_gflags.h", + ], deps = [ "//external:gflags", + ], +) + +cc_library( + name = "reference_line_info", + srcs = [ + "reference_line_info.cc", + ], + hdrs = [ + "reference_line_info.h", + ], + deps = [ + ":path_decision", + "//modules/common:log", + "//modules/common/proto:pnc_point_proto", + "//modules/common/vehicle_state", + "//modules/map/pnc_map", + "//modules/map/proto:map_proto", + "//modules/planning/common:planning_gflags", + "//modules/planning/common/path:path_data", + "//modules/planning/common/speed:speed_data", + "//modules/planning/common/trajectory:discretized_trajectory", + "//modules/planning/common/trajectory:publishable_trajectory", + "//modules/planning/reference_line", + "//modules/planning/reference_line:reference_line_smoother", + "@eigen//:eigen", + ], +) + +cc_library( + name = "frame", + srcs = [ + "frame.cc", + ], + hdrs = [ + "frame.h", + ], + deps = [ + ":indexed_queue", + ":obstacle", + ":reference_line_info", + "//modules/common:log", + "//modules/common/adapters:adapter_manager", + "//modules/common/configs:vehicle_config_helper", + "//modules/common/vehicle_state", + "//modules/map/pnc_map", + "//modules/planning/common/trajectory:discretized_trajectory", + "//modules/planning/common/trajectory:publishable_trajectory", + "//modules/planning/proto:planning_proto", + "//modules/planning/proto:reference_line_smoother_config_proto", + "//modules/planning/reference_line:reference_line_provider", + "//modules/planning/reference_line:reference_line_smoother", + ], +) + +cc_library( + name = "speed_limit", + srcs = [ + "speed_limit.cc", + ], + hdrs = [ + "speed_limit.h", + ], + deps = [ + "//modules/common/math", + "//modules/planning/common/speed:speed_data", + "//modules/planning/proto:planning_proto", + ], +) + +cc_test( + name = "speed_limit_test", + size = "small", + srcs = [ + "speed_limit_test.cc", + ], + deps = [ + ":speed_limit", + "@gtest//:main", + ], +) + +cc_library( + name = "planning_common", + deps = [ + ":frame", + ":planning_gflags", + ":speed_limit", "//modules/common:log", "//modules/localization/common:localization_common", "//modules/localization/proto:localization_proto", diff --git a/modules/planning/common/frame.cc b/modules/planning/common/frame.cc new file mode 100644 index 00000000000..8e7277ac008 --- /dev/null +++ b/modules/planning/common/frame.cc @@ -0,0 +1,366 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file frame.cc + **/ +#include "modules/planning/common/frame.h" + +#include +#include +#include +#include +#include +#include + +#include "modules/routing/proto/routing.pb.h" + +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/log.h" +#include "modules/common/math/vec2d.h" +#include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/map/pnc_map/pnc_map.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/reference_line/reference_line_provider.h" +#include "modules/planning/reference_line/reference_line_smoother.h" + +namespace apollo { +namespace planning { + +using apollo::common::adapter::AdapterManager; +using apollo::common::ErrorCode; +using apollo::common::Status; + +const hdmap::PncMap *Frame::pnc_map_ = nullptr; + +void Frame::SetMap(hdmap::PncMap *pnc_map) { pnc_map_ = pnc_map; } + +FrameHistory::FrameHistory() + : IndexedQueue(FLAGS_max_history_frame_num) {} + +Frame::Frame(const uint32_t sequence_num) : sequence_num_(sequence_num) {} + +void Frame::SetVehicleInitPose(const localization::Pose &pose) { + init_pose_ = pose; +} + +void Frame::SetRoutingResponse(const routing::RoutingResponse &routing) { + routing_response_ = routing; +} + +void Frame::SetPlanningStartPoint(const common::TrajectoryPoint &start_point) { + planning_start_point_ = start_point; +} + +const common::TrajectoryPoint &Frame::PlanningStartPoint() const { + return planning_start_point_; +} + +void Frame::SetPrediction(const prediction::PredictionObstacles &prediction) { + prediction_ = prediction; + trajectory_pb_.mutable_debug() + ->mutable_planning_data() + ->mutable_prediction_header() + ->CopyFrom(prediction_.header()); +} + +void Frame::CreatePredictionObstacles( + const prediction::PredictionObstacles &prediction) { + auto obstacles = Obstacle::CreateObstacles(prediction); + for (auto &ptr : obstacles) { + auto id(ptr->Id()); + obstacles_.Add(id, std::move(ptr)); + } +} + +const routing::RoutingResponse &Frame::routing_response() const { + return routing_response_; +} + +ADCTrajectory *Frame::MutableADCTrajectory() { return &trajectory_pb_; } + +planning_internal::Debug *Frame::DebugLogger() { + return trajectory_pb_.mutable_debug(); +} + +std::vector &Frame::reference_line_info() { + return reference_line_info_; +} + +bool Frame::InitReferenceLineInfo( + const std::vector &reference_lines) { + reference_line_info_.clear(); + for (const auto &reference_line : reference_lines) { + reference_line_info_.emplace_back(pnc_map_, reference_line, + planning_start_point_, smoother_config_); + } + for (auto &info : reference_line_info_) { + if (!info.Init()) { + AERROR << "Failed to init adc sl boundary"; + return false; + } + if (!info.AddObstacles(obstacles_.Items())) { + AERROR << "Failed to add obstacles to reference line"; + return false; + } + } + return true; +} + +const Obstacle *Frame::AddStaticVirtualObstacle( + const std::string &id, const common::math::Box2d &box) { + const auto *object = obstacles_.Find(id); + if (object) { + AWARN << "obstacle " << id << " already exist."; + return object; + } + // create a "virtual" perception_obstacle + perception::PerceptionObstacle perception_obstacle; + // simulator needs a valid integer + perception_obstacle.set_id(-(std::hash{}(id) >> 1)); + perception_obstacle.mutable_position()->set_x(box.center().x()); + perception_obstacle.mutable_position()->set_y(box.center().y()); + perception_obstacle.set_theta(box.heading()); + perception_obstacle.mutable_velocity()->set_x(0); + perception_obstacle.mutable_velocity()->set_y(0); + perception_obstacle.set_length(box.length()); + perception_obstacle.set_width(box.width()); + perception_obstacle.set_height(FLAGS_virtual_stop_wall_height); + perception_obstacle.set_type( + perception::PerceptionObstacle::UNKNOWN_UNMOVABLE); + perception_obstacle.set_tracking_time(1.0); + + std::vector corner_points; + box.GetAllCorners(&corner_points); + for (const auto &corner_point : corner_points) { + auto *point = perception_obstacle.add_polygon_point(); + point->set_x(corner_point.x()); + point->set_y(corner_point.y()); + } + + auto ptr = std::unique_ptr(new Obstacle(id, perception_obstacle)); + auto *obstacle_ptr = ptr.get(); + obstacles_.Add(id, std::move(ptr)); + return obstacle_ptr; +} + +const Obstacle *Frame::CreateDestinationObstacle() { + if (!routing_response_.routing_request().has_end()) { + ADEBUG << "routing_request has no end"; + return nullptr; + } + const auto &routing_end = routing_response_.routing_request().end(); + common::PointENU dest_point = common::util::MakePointENU( + routing_end.pose().x(), routing_end.pose().y(), 0.0); + const auto lane = + pnc_map_->HDMap().GetLaneById(hdmap::MakeMapId(routing_end.id())); + if (!lane) { + AERROR << "Failed to find lane for destination : " + << routing_end.DebugString(); + return nullptr; + } + double dest_lane_s = routing_end.s(); + // check if destination point is in planning range + common::math::Box2d destination_box{{dest_point.x(), dest_point.y()}, + lane->Heading(dest_lane_s), + FLAGS_virtual_stop_wall_length, + FLAGS_virtual_stop_wall_width}; + return AddStaticVirtualObstacle(FLAGS_destination_obstacle_id, + destination_box); +} + +Status Frame::Init(const PlanningConfig &config, + const double current_time_stamp) { + if (!pnc_map_) { + AERROR << "map is null, call SetMap() first"; + return Status(ErrorCode::PLANNING_ERROR, "map is empty"); + } + const auto &point = init_pose_.position(); + if (std::isnan(point.x()) || std::isnan(point.y())) { + AERROR << "init point is not set"; + return Status(ErrorCode::PLANNING_ERROR, "init point is not set"); + } + smoother_config_ = config.reference_line_smoother_config(); + + std::vector reference_lines; + if (FLAGS_enable_reference_line_provider_thread) { + reference_lines = ReferenceLineProvider::instance()->GetReferenceLines(); + } else { + reference_lines = CreateReferenceLineFromRouting(init_pose_.position(), + routing_response_); + } + + if (reference_lines.empty()) { + AERROR << "Failed to create reference line from position: " + << init_pose_.DebugString(); + return Status(ErrorCode::PLANNING_ERROR, + "Failed to create reference line from routing"); + } + + ADEBUG << "Enabled align prediction time ? : " << std::boolalpha + << FLAGS_align_prediction_time; + if (FLAGS_align_prediction_time) { + AlignPredictionTime(current_time_stamp); + } + if (FLAGS_enable_prediction) { + CreatePredictionObstacles(prediction_); + } + + if (!CreateDestinationObstacle()) { + AERROR << "Failed to create the destination obstacle"; + return Status(ErrorCode::PLANNING_ERROR, "failed to find destination"); + } + + if (CheckCollision()) { + AERROR << "Found collision with obstacle: " << collision_obstacle_id_; + return Status(ErrorCode::PLANNING_ERROR, + "Collision found with " + collision_obstacle_id_); + } + + if (!InitReferenceLineInfo(reference_lines)) { + AERROR << "Failed to init reference line info"; + return Status(ErrorCode::PLANNING_ERROR, + "failed to init reference line info"); + } + return Status::OK(); +} + +bool Frame::CheckCollision() { + const auto &adc_box = common::VehicleState::instance()->AdcBoundingBox(); + common::math::Polygon2d adc_polygon(adc_box); + const double adc_half_diagnal = adc_box.diagonal() / 2.0; + for (const auto &obstacle : obstacles_.Items()) { + double center_dist = + adc_box.center().DistanceTo(obstacle->PerceptionBoundingBox().center()); + if (center_dist > obstacle->PerceptionBoundingBox().diagonal() / 2.0 + + adc_half_diagnal + FLAGS_max_collision_distance) { + ADEBUG << "Obstacle : " << obstacle->Id() << " is too far to collide"; + continue; + } + if (adc_polygon.DistanceTo(obstacle->PerceptionPolygon()) < + FLAGS_max_collision_distance) { + AERROR << "Found collision with obstacle " << obstacle->Id(); + collision_obstacle_id_ = obstacle->Id(); + return true; + } + } + return false; +} + +uint32_t Frame::SequenceNum() const { return sequence_num_; } + +std::vector Frame::CreateReferenceLineFromRouting( + const common::PointENU &position, const routing::RoutingResponse &routing) { + std::vector reference_lines; + std::vector> route_segments; + if (!pnc_map_->GetLaneSegmentsFromRouting( + routing, position, FLAGS_look_backward_distance, + FLAGS_look_forward_distance, &route_segments)) { + AERROR << "Failed to extract segments from routing"; + return reference_lines; + } + + ReferenceLineSmoother smoother; + smoother.Init(smoother_config_); + + for (const auto &segments : route_segments) { + hdmap::Path hdmap_path; + pnc_map_->CreatePathFromLaneSegments(segments, &hdmap_path); + if (FLAGS_enable_smooth_reference_line) { + ReferenceLine reference_line; + if (!smoother.Smooth(ReferenceLine(hdmap_path), &reference_line)) { + AERROR << "Failed to smooth reference line"; + continue; + } + reference_lines.push_back(std::move(reference_line)); + } else { + reference_lines.emplace_back(hdmap_path); + } + } + + AERROR_IF(reference_lines.empty()) << "No smooth reference lines available"; + return reference_lines; +} + +std::string Frame::DebugString() const { + return "Frame: " + std::to_string(sequence_num_); +} + +void Frame::RecordInputDebug() { + if (!FLAGS_enable_record_debug) { + ADEBUG << "Skip record input into debug"; + return; + } + auto planning_data = DebugLogger()->mutable_planning_data(); + auto adc_position = planning_data->mutable_adc_position(); + const auto &localization = + AdapterManager::GetLocalization()->GetLatestObserved(); + adc_position->CopyFrom(localization); + + const auto &chassis = AdapterManager::GetChassis()->GetLatestObserved(); + auto debug_chassis = planning_data->mutable_chassis(); + debug_chassis->CopyFrom(chassis); + + const auto &routing_response = + AdapterManager::GetRoutingResponse()->GetLatestObserved(); + + auto debug_routing = planning_data->mutable_routing(); + debug_routing->CopyFrom(routing_response); +} + +void Frame::AlignPredictionTime(const double trajectory_header_time) { + ADEBUG << "planning header: " << std::to_string(trajectory_header_time); + double prediction_header_time = prediction_.header().timestamp_sec(); + ADEBUG << "prediction header: " << std::to_string(prediction_header_time); + + for (auto &obstacle : *prediction_.mutable_prediction_obstacle()) { + for (auto &trajectory : *obstacle.mutable_trajectory()) { + for (auto &point : *trajectory.mutable_trajectory_point()) { + point.set_relative_time(prediction_header_time + point.relative_time() - + trajectory_header_time); + } + } + } +} + +bool Frame::AddObstacle(std::unique_ptr obstacle) { + auto id(obstacle->Id()); + + std::lock_guard lock(obstacles_mutex_); + return obstacles_.Add(id, std::move(obstacle)); +} + +const ReferenceLineInfo *Frame::FindDriveReferenceLineInfo() { + if (!drive_reference_line_info_) { + double reference_line_cost = std::numeric_limits::infinity(); + for (const auto &reference_line_info : reference_line_info_) { + if (reference_line_info.Cost() < reference_line_cost) { + drive_reference_line_info_ = &reference_line_info; + reference_line_cost = reference_line_info.Cost(); + } + } + } + return drive_reference_line_info_; +} + +const ReferenceLineInfo *Frame::DriveReferenceLinfInfo() const { + return drive_reference_line_info_; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/frame.h b/modules/planning/common/frame.h new file mode 100644 index 00000000000..485a2b3df33 --- /dev/null +++ b/modules/planning/common/frame.h @@ -0,0 +1,153 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file frame.h + **/ + +#ifndef MODULES_PLANNING_COMMON_FRAME_H_ +#define MODULES_PLANNING_COMMON_FRAME_H_ + +#include +#include +#include +#include +#include + +#include "modules/common/proto/geometry.pb.h" +#include "modules/localization/proto/pose.pb.h" +#include "modules/planning/proto/reference_line_smoother_config.pb.h" +#include "modules/prediction/proto/prediction_obstacle.pb.h" +#include "modules/routing/proto/routing.pb.h" + +#include "modules/common/status/status.h" +#include "modules/map/pnc_map/pnc_map.h" +#include "modules/planning/common/indexed_queue.h" +#include "modules/planning/common/obstacle.h" +#include "modules/planning/common/reference_line_info.h" +#include "modules/planning/common/trajectory/publishable_trajectory.h" +#include "modules/planning/proto/planning.pb.h" +#include "modules/planning/proto/planning_config.pb.h" +#include "modules/planning/proto/planning_internal.pb.h" + +namespace apollo { +namespace planning { + +class Frame { + public: + explicit Frame(const uint32_t sequence_num); + + // functions called out of optimizers + void SetRoutingResponse(const routing::RoutingResponse &routing); + void SetPrediction(const prediction::PredictionObstacles &prediction); + void SetPlanningStartPoint(const common::TrajectoryPoint &start_point); + void SetVehicleInitPose(const localization::Pose &pose); + const common::TrajectoryPoint &PlanningStartPoint() const; + common::Status Init(const PlanningConfig &config, + const double current_time_stamp); + + static void SetMap(hdmap::PncMap *pnc_map); + + uint32_t SequenceNum() const; + + std::string DebugString() const; + + ADCTrajectory *MutableADCTrajectory(); + + planning_internal::Debug *DebugLogger(); + + const PublishableTrajectory &ComputedTrajectory() const; + + const routing::RoutingResponse &routing_response() const; + + void RecordInputDebug(); + + std::vector &reference_line_info(); + + bool AddObstacle(std::unique_ptr obstacle); + + const ReferenceLineInfo *FindDriveReferenceLineInfo(); + const ReferenceLineInfo *DriveReferenceLinfInfo() const; + + private: + /** + * @brief This is the function that can create one reference lines + * from routing result. + * In current implementation, only one reference line will be returned. + * But this is insufficient when multiple driving options exist. + * + * TODO create multiple reference_lines from this function. + */ + std::vector CreateReferenceLineFromRouting( + const common::PointENU &position, + const routing::RoutingResponse &routing); + + /** + * @brief create obstacles from prediction input. + * @param prediction the received prediction result. + */ + void CreatePredictionObstacles( + const prediction::PredictionObstacles &prediction); + + bool InitReferenceLineInfo(const std::vector &reference_lines); + + void AlignPredictionTime(const double trajectory_header_time); + + /** + * Check if there is collision with obstacles + */ + bool CheckCollision(); + + const Obstacle *AddStaticVirtualObstacle(const std::string &id, + const common::math::Box2d &box); + + const Obstacle *CreateDestinationObstacle(); + + private: + common::TrajectoryPoint planning_start_point_; + + std::vector reference_line_info_; + + /** + * the reference line info that the vehicle finally choose to drive on. + **/ + const ReferenceLineInfo *drive_reference_line_info_ = nullptr; + + routing::RoutingResponse routing_response_; + prediction::PredictionObstacles prediction_; + + std::mutex obstacles_mutex_; + IndexedObstacles obstacles_; + + uint32_t sequence_num_ = 0; + localization::Pose init_pose_; + static const hdmap::PncMap *pnc_map_; + ReferenceLineSmootherConfig smoother_config_; + + ADCTrajectory trajectory_pb_; // planning output pb + + std::string collision_obstacle_id_; +}; + +class FrameHistory : public IndexedQueue { + private: + DECLARE_SINGLETON(FrameHistory); +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_FRAME_H_ diff --git a/modules/planning/common/indexed_list.h b/modules/planning/common/indexed_list.h new file mode 100644 index 00000000000..a6d9af274b1 --- /dev/null +++ b/modules/planning/common/indexed_list.h @@ -0,0 +1,98 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file indexed_list.h + **/ + +#ifndef MODULES_PLANNING_COMMON_INDEXED_LIST_H_ +#define MODULES_PLANNING_COMMON_INDEXED_LIST_H_ + +#include +#include +#include +#include + +namespace apollo { +namespace planning { + +template +class IndexedList { + public: + /** + * @brief move a unique ptr into the container. + * @param id the id of the object + * @param ptr the unique pointer of the object to be moved to the container. + * @return true if successly added and return false if the id already exists + * in the container. + */ + bool Add(const I id, std::unique_ptr ptr) { + if (Find(id)) { + return false; + } + object_list_.push_back(ptr.get()); + object_dict_[id] = std::move(ptr); + return true; + } + + /** + * @brief copy ref into the container + * @param id the id of the object + * @param ref the const reference of the objected to be copied to the + * container. + * @return true if successly added and return false if the id already exists + * in the container. + */ + bool Add(const I id, const T& ref) { + if (Find(id)) { + return false; + } + auto ptr = std::unique_ptr(new T(ref)); + object_list_.push_back(ptr.get()); + object_dict_[id] = std::move(ptr); + return true; + } + + /** + * @brief Find object by id in the container + * @param id the id of the object + * @return the raw pointer to the object if found. + * @return nullptr if the object is not found. + */ + T* Find(const I id) { + auto iter = object_dict_.find(id); + if (iter == object_dict_.end()) { + return nullptr; + } else { + return iter->second.get(); + } + } + + /** + * @brief List all the items in the container. + * @return the list of const raw pointers of the objects in the container. + */ + const std::vector& Items() const { return object_list_; } + + private: + std::vector object_list_; + std::unordered_map> object_dict_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_INDEXED_LIST_H diff --git a/modules/planning/common/indexed_list_test.cc b/modules/planning/common/indexed_list_test.cc new file mode 100644 index 00000000000..f0f859dfd50 --- /dev/null +++ b/modules/planning/common/indexed_list_test.cc @@ -0,0 +1,94 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include +#include +#include + +#include "gtest/gtest.h" + +#include "modules/common/util/util.h" +#include "modules/planning/common/indexed_list.h" + +namespace apollo { +namespace planning { + +using StringIndexedList = IndexedList; +TEST(IndexedList, Add_UniquePtr) { + StringIndexedList object; + { + ASSERT_TRUE(object.Add(1, common::util::make_unique("one"))); + ASSERT_TRUE(object.Find(1) != nullptr); + const auto& items = object.Items(); + ASSERT_TRUE(object.Find(2) == nullptr); + ASSERT_FALSE(object.Add(1, common::util::make_unique("one"))); + ASSERT_EQ(1, items.size()); + ASSERT_EQ("one", *items[0]); + } + { + ASSERT_TRUE(object.Add(2, common::util::make_unique("two"))); + ASSERT_FALSE(object.Add(2, common::util::make_unique("two"))); + ASSERT_TRUE(object.Find(1) != nullptr); + ASSERT_TRUE(object.Find(2) != nullptr); + const auto& items = object.Items(); + ASSERT_EQ(2, items.size()); + ASSERT_EQ("one", *items[0]); + ASSERT_EQ("two", *items[1]); + } +} + +TEST(IndexedList, Add_ConstRef) { + StringIndexedList object; + { + ASSERT_TRUE(object.Add(1, "one")); + ASSERT_TRUE(object.Find(1) != nullptr); + const auto& items = object.Items(); + ASSERT_TRUE(object.Find(2) == nullptr); + ASSERT_FALSE(object.Add(1, "one")); + ASSERT_EQ(1, items.size()); + ASSERT_EQ("one", *items[0]); + } + { + ASSERT_TRUE(object.Add(2, "two")); + ASSERT_FALSE(object.Add(2, "two")); + ASSERT_TRUE(object.Find(1) != nullptr); + ASSERT_TRUE(object.Find(2) != nullptr); + const auto& items = object.Items(); + ASSERT_EQ(2, items.size()); + ASSERT_EQ("one", *items[0]); + ASSERT_EQ("two", *items[1]); + } +} + +TEST(IndexedList, Find) { + StringIndexedList object; + ASSERT_TRUE(object.Add(1, common::util::make_unique("one"))); + auto* one = object.Find(1); + ASSERT_EQ(*one, "one"); + ASSERT_TRUE(one != nullptr); + *one = "one_again"; + const auto* one_again = object.Find(1); + ASSERT_TRUE(one_again != nullptr); + ASSERT_EQ("one_again", *one_again); + ASSERT_FALSE(object.Find(2)); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/indexed_queue.h b/modules/planning/common/indexed_queue.h new file mode 100644 index 00000000000..70795bcc9b7 --- /dev/null +++ b/modules/planning/common/indexed_queue.h @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: + **/ + +#ifndef MODULES_PLANNING_COMMON_INDEXED_QUEUE_H_ +#define MODULES_PLANNING_COMMON_INDEXED_QUEUE_H_ + +#include +#include +#include +#include + +namespace apollo { +namespace planning { + +template +class IndexedQueue { + public: + // Get infinite capacity with 0. + explicit IndexedQueue(std::size_t capacity) : capacity_(capacity) {} + + const T *Find(const I id) const { + auto iter = map_.find(id); + if (iter == map_.end()) { + return nullptr; + } else { + return iter->second.get(); + } + } + + const T *Latest() const { + if (queue_.empty()) { + return nullptr; + } + return Find(queue_.back().first); + } + + bool Add(const I id, std::unique_ptr ptr) { + if (Find(id)) { + return false; + } + if (capacity_ > 0 && queue_.size() == capacity_) { + map_.erase(queue_.front().first); + queue_.pop(); + } + queue_.push(std::make_pair(id, ptr.get())); + map_[id] = std::move(ptr); + return true; + } + + public: + std::size_t capacity_ = 0; + std::queue> queue_; + std::unordered_map> map_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_INDEXED_QUEUE_H_ diff --git a/modules/planning/common/indexed_queue_test.cc b/modules/planning/common/indexed_queue_test.cc new file mode 100644 index 00000000000..ba73cf50681 --- /dev/null +++ b/modules/planning/common/indexed_queue_test.cc @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include +#include +#include + +#include "gtest/gtest.h" + +#include "modules/common/util/util.h" +#include "modules/planning/common/indexed_queue.h" + +namespace apollo { +namespace planning { + +using StringIndexedQueue = IndexedQueue; +TEST(IndexedQueue, QueueSize1) { + StringIndexedQueue object(1); + ASSERT_TRUE(object.Add(1, common::util::make_unique("one"))); + ASSERT_TRUE(object.Find(1) != nullptr); + ASSERT_TRUE(object.Find(2) == nullptr); + ASSERT_FALSE(object.Add(1, common::util::make_unique("one"))); + ASSERT_EQ("one", *object.Latest()); + ASSERT_TRUE(object.Add(2, common::util::make_unique("two"))); + ASSERT_TRUE(object.Find(1) == nullptr); + ASSERT_TRUE(object.Find(2) != nullptr); + ASSERT_EQ("two", *object.Latest()); +} + +TEST(IndexedQueue, QueueSize2) { + StringIndexedQueue object(2); + ASSERT_TRUE(object.Add(1, common::util::make_unique("one"))); + ASSERT_TRUE(object.Find(1) != nullptr); + ASSERT_TRUE(object.Find(2) == nullptr); + ASSERT_FALSE(object.Add(1, common::util::make_unique("one"))); + ASSERT_EQ("one", *object.Latest()); + ASSERT_TRUE(object.Add(2, common::util::make_unique("two"))); + ASSERT_TRUE(object.Find(1) != nullptr); + ASSERT_TRUE(object.Find(2) != nullptr); + ASSERT_EQ("two", *object.Latest()); + ASSERT_TRUE(object.Add(3, common::util::make_unique("three"))); + ASSERT_TRUE(object.Find(1) == nullptr); + ASSERT_TRUE(object.Find(2) != nullptr); + ASSERT_TRUE(object.Find(3) != nullptr); + ASSERT_TRUE(object.Find(4) == nullptr); + ASSERT_EQ("three", *object.Latest()); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/obstacle.cc b/modules/planning/common/obstacle.cc new file mode 100644 index 00000000000..b85d399fcb0 --- /dev/null +++ b/modules/planning/common/obstacle.cc @@ -0,0 +1,185 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file obstacle.cc + **/ + +#include "modules/planning/common/obstacle.h" + +#include +#include +#include + +#include "modules/common/log.h" +#include "modules/common/util/string_util.h" +#include "modules/common/util/util.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/common/planning_util.h" + +namespace apollo { +namespace planning { + +using apollo::perception::PerceptionObstacle; + +const std::string& Obstacle::Id() const { return id_; } + +std::int32_t Obstacle::PerceptionId() const { return perception_id_; } + +Obstacle::Obstacle(const std::string& id, + const PerceptionObstacle& perception_obstacle) + : id_(id), + perception_id_(perception_obstacle.id()), + perception_obstacle_(perception_obstacle), + perception_bounding_box_({perception_obstacle_.position().x(), + perception_obstacle_.position().y()}, + perception_obstacle_.theta(), + perception_obstacle_.length(), + perception_obstacle_.width()) { + CHECK(perception_obstacle.polygon_point_size() > 2) + << "object " << id << "has less than 3 polygon points"; + std::vector polygon_points; + for (const auto& point : perception_obstacle.polygon_point()) { + polygon_points.emplace_back(point.x(), point.y()); + } + CHECK(common::math::Polygon2d::ComputeConvexHull(polygon_points, + &perception_polygon_)) + << "object[" << id << "] polygon is not a valid convex hull"; + + is_static_ = IsStaticObstacle(perception_obstacle); + is_virtual_ = IsVirtualObstacle(perception_obstacle); +} + +Obstacle::Obstacle(const std::string& id, + const PerceptionObstacle& perception_obstacle, + const prediction::Trajectory& trajectory) + : Obstacle(id, perception_obstacle) { + has_trajectory_ = true; + trajectory_ = trajectory; + auto& trajectory_points = *trajectory_.mutable_trajectory_point(); + double cumulative_s = 0.0; + if (trajectory_points.size() > 0) { + trajectory_points[0].mutable_path_point()->set_s(0.0); + } + for (int i = 1; i < trajectory_points.size(); ++i) { + cumulative_s += + common::util::Distance2D(trajectory_points[i - 1].path_point(), + trajectory_points[i].path_point()); + + trajectory_points[i].mutable_path_point()->set_s(cumulative_s); + } +} + +bool Obstacle::IsStatic() const { return is_static_; } + +bool Obstacle::IsStaticObstacle(const PerceptionObstacle& perception_obstacle) { + if (perception_obstacle.type() == PerceptionObstacle::UNKNOWN_UNMOVABLE) { + return true; + } + auto moving_speed = std::hypot(perception_obstacle.velocity().x(), + perception_obstacle.velocity().y()); + return moving_speed <= FLAGS_static_obstacle_speed_threshold; +} + +bool Obstacle::IsVirtualObstacle( + const PerceptionObstacle& perception_obstacle) { + return perception_obstacle.id() < 0; +} + +common::TrajectoryPoint Obstacle::GetPointAtTime( + const double relative_time) const { + const auto& points = trajectory_.trajectory_point(); + if (points.size() < 2) { + common::TrajectoryPoint point; + point.mutable_path_point()->set_x(perception_obstacle_.position().x()); + point.mutable_path_point()->set_y(perception_obstacle_.position().y()); + point.mutable_path_point()->set_z(perception_obstacle_.position().z()); + point.mutable_path_point()->set_theta(perception_obstacle_.theta()); + point.mutable_path_point()->set_s(0.0); + point.mutable_path_point()->set_kappa(0.0); + point.mutable_path_point()->set_dkappa(0.0); + point.mutable_path_point()->set_ddkappa(0.0); + point.set_v(0.0); + point.set_a(0.0); + point.set_relative_time(0.0); + return point; + } else { + auto comp = [](const common::TrajectoryPoint p, const double time) { + return p.relative_time() < time; + }; + + auto it_lower = + std::lower_bound(points.begin(), points.end(), relative_time, comp); + + if (it_lower == points.begin()) { + return *points.begin(); + } else if (it_lower == points.end()) { + return *points.rbegin(); + } + return util::interpolate(*(it_lower - 1), *it_lower, relative_time); + } +} + +common::math::Box2d Obstacle::GetBoundingBox( + const common::TrajectoryPoint& point) const { + return common::math::Box2d({point.path_point().x(), point.path_point().y()}, + point.path_point().theta(), + perception_obstacle_.length(), + perception_obstacle_.width()); +} + +const common::math::Box2d& Obstacle::PerceptionBoundingBox() const { + return perception_bounding_box_; +} + +const prediction::Trajectory& Obstacle::Trajectory() const { + return trajectory_; +} + +const PerceptionObstacle& Obstacle::Perception() const { + return perception_obstacle_; +} + +const common::math::Polygon2d& Obstacle::PerceptionPolygon() const { + return perception_polygon_; +} + +std::vector> Obstacle::CreateObstacles( + const prediction::PredictionObstacles& predictions) { + std::vector> obstacles; + for (const auto& prediction_obstacle : predictions.prediction_obstacle()) { + const auto perception_id = + std::to_string(prediction_obstacle.perception_obstacle().id()); + if (prediction_obstacle.trajectory().empty()) { + obstacles.emplace_back(new Obstacle( + perception_id, prediction_obstacle.perception_obstacle())); + continue; + } + + int trajectory_index = 0; + for (const auto& trajectory : prediction_obstacle.trajectory()) { + const std::string obstacle_id = + apollo::common::util::StrCat(perception_id, "_", trajectory_index); + obstacles.emplace_back(new Obstacle( + obstacle_id, prediction_obstacle.perception_obstacle(), trajectory)); + ++trajectory_index; + } + } + return obstacles; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/obstacle.h b/modules/planning/common/obstacle.h new file mode 100644 index 00000000000..930f1ab7789 --- /dev/null +++ b/modules/planning/common/obstacle.h @@ -0,0 +1,110 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file obstacle.h + **/ + +#ifndef MODULES_PLANNING_COMMON_OBSTACLE_H_ +#define MODULES_PLANNING_COMMON_OBSTACLE_H_ + +#include +#include +#include +#include + +#include "modules/perception/proto/perception_obstacle.pb.h" +#include "modules/prediction/proto/prediction_obstacle.pb.h" + +#include "modules/common/math/box2d.h" +#include "modules/common/math/polygon2d.h" +#include "modules/common/math/vec2d.h" +#include "modules/planning/common/indexed_list.h" + +namespace apollo { +namespace planning { + +class Obstacle { + public: + Obstacle() = default; + + Obstacle(const std::string &id, + const perception::PerceptionObstacle &perception_obstacle); + + Obstacle(const std::string &id, + const perception::PerceptionObstacle &perception, + const prediction::Trajectory &trajectory); + + const std::string &Id() const; + + std::int32_t PerceptionId() const; + + bool IsStatic() const; + + common::TrajectoryPoint GetPointAtTime(const double time) const; + + common::math::Box2d GetBoundingBox( + const common::TrajectoryPoint &point) const; + /** + * @brief get the perception bounding box + */ + const common::math::Box2d &PerceptionBoundingBox() const; + + /** + * @brief get the perception polygon for the obstacle. It is more precise than + * bounding box + */ + const common::math::Polygon2d &PerceptionPolygon() const; + + const prediction::Trajectory &Trajectory() const; + bool HasTrajectory() const { return has_trajectory_; } + + const perception::PerceptionObstacle &Perception() const; + + /** + * @brief This is a helper function that can create obstacles from prediction + * data. The original prediction may have multiple trajectories for each + * obstacle. But this function will create one obstacle for each trajectory. + * @param predictions The prediction results + * @return obstacles The output obstacles saved in a list of unique_ptr. + */ + static std::vector> CreateObstacles( + const prediction::PredictionObstacles &predictions); + + static bool IsStaticObstacle( + const perception::PerceptionObstacle &perception_obstacle); + + static bool IsVirtualObstacle( + const perception::PerceptionObstacle &perception_obstacle); + + private: + std::string id_; + std::int32_t perception_id_ = 0; + bool is_static_ = false; + bool is_virtual_ = false; + bool has_trajectory_ = false; + prediction::Trajectory trajectory_; + perception::PerceptionObstacle perception_obstacle_; + common::math::Box2d perception_bounding_box_; + common::math::Polygon2d perception_polygon_; +}; + +typedef IndexedList IndexedObstacles; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_OBSTACLE_H_ diff --git a/modules/planning/common/obstacle_test.cc b/modules/planning/common/obstacle_test.cc new file mode 100644 index 00000000000..25003c2d126 --- /dev/null +++ b/modules/planning/common/obstacle_test.cc @@ -0,0 +1,191 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include +#include +#include + +#include "gtest/gtest.h" + +#include "modules/perception/proto/perception_obstacle.pb.h" +#include "modules/prediction/proto/prediction_obstacle.pb.h" + +#include "modules/common/util/file.h" +#include "modules/common/util/util.h" +#include "modules/planning/common/obstacle.h" +#include "modules/planning/common/planning_gflags.h" + +namespace apollo { +namespace planning { + +using apollo::perception::PerceptionObstacle; + +TEST(Obstacle, IsStaticObstacle) { + PerceptionObstacle perception_obstacle; + EXPECT_TRUE(Obstacle::IsStaticObstacle(perception_obstacle)); + + perception_obstacle.mutable_velocity()->set_x(2.5); + perception_obstacle.mutable_velocity()->set_y(0.5); + EXPECT_FALSE(Obstacle::IsStaticObstacle(perception_obstacle)); + + perception_obstacle.set_type(PerceptionObstacle::UNKNOWN); + EXPECT_FALSE(Obstacle::IsStaticObstacle(perception_obstacle)); + + perception_obstacle.set_type(PerceptionObstacle::UNKNOWN_UNMOVABLE); + EXPECT_TRUE(Obstacle::IsStaticObstacle(perception_obstacle)); + + perception_obstacle.set_type(PerceptionObstacle::UNKNOWN_MOVABLE); + EXPECT_FALSE(Obstacle::IsStaticObstacle(perception_obstacle)); + + perception_obstacle.set_type(PerceptionObstacle::PEDESTRIAN); + EXPECT_FALSE(Obstacle::IsStaticObstacle(perception_obstacle)); + + perception_obstacle.set_type(PerceptionObstacle::BICYCLE); + EXPECT_FALSE(Obstacle::IsStaticObstacle(perception_obstacle)); + + perception_obstacle.set_type(PerceptionObstacle::VEHICLE); + EXPECT_FALSE(Obstacle::IsStaticObstacle(perception_obstacle)); + + perception_obstacle.mutable_velocity()->set_x(0.5); + perception_obstacle.mutable_velocity()->set_y(0.5); + EXPECT_TRUE(Obstacle::IsStaticObstacle(perception_obstacle)); +} + +class ObstacleTest : public ::testing::Test { + public: + virtual void SetUp() { + prediction::PredictionObstacles prediction_obstacles; + ASSERT_TRUE(common::util::GetProtoFromFile( + "modules/planning/common/testdata/sample_prediction.pb.txt", + &prediction_obstacles)); + auto obstacles = Obstacle::CreateObstacles(prediction_obstacles); + ASSERT_EQ(5, obstacles.size()); + for (auto& obstacle : obstacles) { + const auto id = obstacle->Id(); + indexed_obstacles_.Add(id, std::move(obstacle)); + } + } + + protected: + IndexedObstacles indexed_obstacles_; +}; + +TEST_F(ObstacleTest, CreateObstacles) { + ASSERT_EQ(5, indexed_obstacles_.Items().size()); + EXPECT_TRUE(indexed_obstacles_.Find("2156_0")); + EXPECT_TRUE(indexed_obstacles_.Find("2156_1")); + EXPECT_TRUE(indexed_obstacles_.Find("2157_0")); + EXPECT_TRUE(indexed_obstacles_.Find("2157_1")); + EXPECT_TRUE(indexed_obstacles_.Find("2161")); +} + +TEST_F(ObstacleTest, Id) { + const auto* obstacle = indexed_obstacles_.Find("2156_0"); + ASSERT_TRUE(obstacle); + EXPECT_EQ("2156_0", obstacle->Id()); + EXPECT_EQ(2156, obstacle->PerceptionId()); +} + +TEST_F(ObstacleTest, GetPointAtTime) { + const auto* obstacle = indexed_obstacles_.Find("2156_0"); + ASSERT_TRUE(obstacle); + + // first + const auto first_point = obstacle->GetPointAtTime(0.0); + EXPECT_FLOAT_EQ(0.0, first_point.relative_time()); + EXPECT_FLOAT_EQ(76.684071405, first_point.path_point().x()); + EXPECT_FLOAT_EQ(350.481852505, first_point.path_point().y()); + + // last + const auto last_point = obstacle->GetPointAtTime(10044.15320); + EXPECT_FLOAT_EQ(10044.1531943, last_point.relative_time()); + EXPECT_FLOAT_EQ(186.259371951, last_point.path_point().x()); + EXPECT_FLOAT_EQ(341.853799387, last_point.path_point().y()); + + // middle + const auto middle_point = obstacle->GetPointAtTime(3730.0); + EXPECT_LE(3689.68892853, middle_point.relative_time()); + EXPECT_GE(3894.67164678, middle_point.relative_time()); + EXPECT_GE(139.091700103, middle_point.path_point().x()); + EXPECT_LE(135.817210975, middle_point.path_point().x()); + EXPECT_GE(349.875902219, middle_point.path_point().y()); + EXPECT_LE(349.549888973, middle_point.path_point().y()); +} + +TEST_F(ObstacleTest, PerceptionBoundingBox) { + const auto* obstacle = indexed_obstacles_.Find("2156_0"); + ASSERT_TRUE(obstacle); + const auto& box = obstacle->PerceptionBoundingBox(); + + std::vector corners; + box.GetAllCorners(&corners); + EXPECT_EQ(4, corners.size()); + EXPECT_FLOAT_EQ(3.832477, box.length()); + EXPECT_FLOAT_EQ(1.73200099013, box.width()); + EXPECT_FLOAT_EQ(76.684071405, box.center_x()); + EXPECT_FLOAT_EQ(350.481852505, box.center_y()); + EXPECT_FLOAT_EQ(0.00531211859358, box.heading()); +} + +TEST_F(ObstacleTest, GetBoundingBox) { + const auto* obstacle = indexed_obstacles_.Find("2156_0"); + ASSERT_TRUE(obstacle); + const auto& point = obstacle->Trajectory().trajectory_point(2); + const auto& box = obstacle->GetBoundingBox(point); + std::vector corners; + box.GetAllCorners(&corners); + EXPECT_EQ(4, corners.size()); + EXPECT_FLOAT_EQ(3.832477, box.length()); + EXPECT_FLOAT_EQ(1.73200099013, box.width()); + EXPECT_FLOAT_EQ(83.2581699369, box.center_x()); + EXPECT_FLOAT_EQ(350.779556678, box.center_y()); + EXPECT_FLOAT_EQ(0.040689919, box.heading()); +} + +TEST_F(ObstacleTest, PerceptionPolygon) { + const auto* obstacle = indexed_obstacles_.Find("2156_0"); + ASSERT_TRUE(obstacle); + const auto& polygon = obstacle->PerceptionPolygon(); + + const auto& points = polygon.points(); + EXPECT_EQ(16, points.size()); + EXPECT_FLOAT_EQ(74.766182, points[0].x()); + EXPECT_FLOAT_EQ(350.72986, points[0].y()); + EXPECT_FLOAT_EQ(74.783195, points[1].x()); + EXPECT_FLOAT_EQ(350.32602, points[1].y()); + EXPECT_FLOAT_EQ(74.770554, points[15].x()); + EXPECT_FLOAT_EQ(350.87857, points[15].y()); +} + +TEST_F(ObstacleTest, Trajectory) { + const auto* obstacle = indexed_obstacles_.Find("2156_0"); + ASSERT_TRUE(obstacle); + const auto& points = obstacle->Trajectory().trajectory_point(); + EXPECT_EQ(50, points.size()); +} + +TEST_F(ObstacleTest, Perception) { + const auto* obstacle = indexed_obstacles_.Find("2156_0"); + ASSERT_TRUE(obstacle); + const auto& perception_obstacle = obstacle->Perception(); + EXPECT_EQ(2156, perception_obstacle.id()); +} +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/path/BUILD b/modules/planning/common/path/BUILD new file mode 100644 index 00000000000..690ea6498b4 --- /dev/null +++ b/modules/planning/common/path/BUILD @@ -0,0 +1,51 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "discretized_path", + srcs = [ + "discretized_path.cc", + ], + hdrs = [ + "discretized_path.h", + ], + deps = [ + "//modules/common/proto:pnc_point_proto", + "//modules/planning/common:planning_util", + ], +) + +cc_library( + name = "frenet_frame_path", + srcs = [ + "frenet_frame_path.cc", + ], + hdrs = [ + "frenet_frame_path.h", + ], + deps = [ + "//modules/common/proto:pnc_point_proto", + "//modules/planning/common:planning_util", + ], +) + +cc_library( + name = "path_data", + srcs = [ + "path_data.cc", + ], + hdrs = [ + "path_data.h", + ], + deps = [ + ":discretized_path", + ":frenet_frame_path", + "//modules/planning/common:planning_gflags", + "//modules/planning/math:double", + "//modules/planning/math/frame_conversion:cartesian_frenet_conversion", + "//modules/planning/reference_line", + ], +) + +cpplint() diff --git a/modules/planning/common/path/discretized_path.cc b/modules/planning/common/path/discretized_path.cc new file mode 100644 index 00000000000..e6064104639 --- /dev/null +++ b/modules/planning/common/path/discretized_path.cc @@ -0,0 +1,105 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file path.cc + **/ + +#include "modules/planning/common/path/discretized_path.h" + +#include +#include + +#include "modules/common/log.h" +#include "modules/planning/common/planning_util.h" + +namespace apollo { +namespace planning { + +DiscretizedPath::DiscretizedPath(std::vector path_points) { + path_points_ = std::move(path_points); +} + +void DiscretizedPath::set_path_points( + const std::vector &path_points) { + path_points_ = path_points; +} + +common::PathPoint DiscretizedPath::Evaluate(const double path_s) const { + CHECK_GT(path_points_.size(), 1); + CHECK(path_points_.front().s() <= path_s && + path_points_.back().s() <= path_s); + + auto it_lower = QueryLowerBound(path_s); + if (it_lower == path_points_.begin()) { + return path_points_.front(); + } + + return util::interpolate(*(it_lower - 1), *it_lower, path_s); +} + +double DiscretizedPath::Length() const { + if (path_points_.empty()) { + return 0.0; + } + return path_points_.back().s() - path_points_.front().s(); +} + +common::PathPoint DiscretizedPath::EvaluateUsingLinearApproximation( + const double path_s) const { + CHECK(!path_points_.empty()); + auto it_lower = QueryLowerBound(path_s); + if (it_lower == path_points_.begin()) { + return path_points_.front(); + } + if (it_lower == path_points_.end()) { + return path_points_.back(); + } + return util::InterpolateUsingLinearApproximation(*(it_lower - 1), *it_lower, + path_s); +} + +const std::vector &DiscretizedPath::path_points() const { + return path_points_; +} + +std::uint32_t DiscretizedPath::NumOfPoints() const { + return path_points_.size(); +} + +const common::PathPoint &DiscretizedPath::StartPoint() const { + CHECK(!path_points_.empty()); + return path_points_.front(); +} + +const common::PathPoint &DiscretizedPath::EndPoint() const { + CHECK(!path_points_.empty()); + return path_points_.back(); +} + +void DiscretizedPath::Clear() { path_points_.clear(); } + +std::vector::const_iterator DiscretizedPath::QueryLowerBound( + const double path_s) const { + auto func = [](const common::PathPoint &tp, const double path_s) { + return tp.s() < path_s; + }; + return std::lower_bound(path_points_.begin(), path_points_.end(), path_s, + func); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/path/discretized_path.h b/modules/planning/common/path/discretized_path.h new file mode 100644 index 00000000000..d8929e2c3bc --- /dev/null +++ b/modules/planning/common/path/discretized_path.h @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file discretized_path.h + **/ + +#ifndef MODULES_PLANNING_COMMON_PATH_DISCRETIZED_PATH_H_ +#define MODULES_PLANNING_COMMON_PATH_DISCRETIZED_PATH_H_ + +#include + +#include "modules/common/proto/pnc_point.pb.h" + +namespace apollo { +namespace planning { + +class DiscretizedPath { + public: + DiscretizedPath() = default; + + explicit DiscretizedPath(std::vector path_points); + + void set_path_points(const std::vector& path_points); + + virtual ~DiscretizedPath() = default; + + common::PathPoint Evaluate(const double path_s) const; + + double Length() const; + + const common::PathPoint& StartPoint() const; + + const common::PathPoint& EndPoint() const; + + common::PathPoint EvaluateUsingLinearApproximation(const double path_s) const; + + const std::vector& path_points() const; + + std::uint32_t NumOfPoints() const; + + virtual void Clear(); + + protected: + std::vector::const_iterator QueryLowerBound( + const double path_s) const; + + std::vector path_points_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_PATH_PATH_H_ diff --git a/modules/planning/common/path/frenet_frame_path.cc b/modules/planning/common/path/frenet_frame_path.cc new file mode 100644 index 00000000000..b09082d2ccc --- /dev/null +++ b/modules/planning/common/path/frenet_frame_path.cc @@ -0,0 +1,90 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file frenet_frame_path.cc + **/ +#include "modules/planning/common/path/frenet_frame_path.h" + +#include +#include + +#include "modules/common/log.h" +#include "modules/common/math/linear_interpolation.h" +#include "modules/common/proto/pnc_point.pb.h" + +namespace apollo { +namespace planning { + +FrenetFramePath::FrenetFramePath( + const std::vector& sl_points) { + points_ = sl_points; +} + +void FrenetFramePath::set_points( + const std::vector& points) { + points_ = points; +} + +const std::vector& FrenetFramePath::points() const { + return points_; +} + +double FrenetFramePath::Length() const { + if (points_.empty()) { + return 0.0; + } + return points_.back().s() - points_.front().s(); +} + +std::uint32_t FrenetFramePath::NumOfPoints() const { return points_.size(); } + +const common::FrenetFramePoint& FrenetFramePath::PointAt( + const std::uint32_t index) const { + CHECK_LT(index, points_.size()); + return points_[index]; +} + +common::FrenetFramePoint FrenetFramePath::EvaluateByS(const double s) const { + CHECK_GT(points_.size(), 1); + CHECK(s < points_.back().s() + 1.0e-6 && s > points_.front().s() - 1.0e-6); + auto func = [](const common::FrenetFramePoint& p, const double s) { + return p.s() < s; + }; + + auto it_lower = std::lower_bound(points_.begin(), points_.end(), s, func); + if (it_lower == points_.begin()) { + return points_.front(); + } else if (it_lower == points_.end()) { + return points_.back(); + } + const auto& p0 = *(it_lower - 1); + const auto s0 = p0.s(); + const auto& p1 = *it_lower; + const auto s1 = p1.s(); + + common::FrenetFramePoint p; + p.set_s(s); + p.set_l(common::math::lerp(p0.l(), s0, p1.l(), s1, s)); + p.set_dl(common::math::lerp(p0.dl(), s0, p1.dl(), s1, s)); + p.set_ddl(common::math::lerp(p0.ddl(), s0, p1.ddl(), s1, s)); + return p; +} + +void FrenetFramePath::Clear() { points_.clear(); } + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/path/frenet_frame_path.h b/modules/planning/common/path/frenet_frame_path.h new file mode 100644 index 00000000000..69bfcd4e6b6 --- /dev/null +++ b/modules/planning/common/path/frenet_frame_path.h @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file frenet_frame_path.h + **/ + +#ifndef MODULES_PLANNING_COMMON_PATH_FRENET_FRAME_PATH_H_ +#define MODULES_PLANNING_COMMON_PATH_FRENET_FRAME_PATH_H_ + +#include + +#include "modules/common/proto/pnc_point.pb.h" + +namespace apollo { +namespace planning { + +class FrenetFramePath { + public: + FrenetFramePath() = default; + explicit FrenetFramePath( + const std::vector &sl_points); + virtual ~FrenetFramePath() = default; + + void set_points(const std::vector &points); + const std::vector &points() const; + std::uint32_t NumOfPoints() const; + double Length() const; + const common::FrenetFramePoint &PointAt(const std::uint32_t index) const; + common::FrenetFramePoint EvaluateByS(const double s) const; + + virtual void Clear(); + + private: + std::vector points_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_PATH_FRENET_FRAME_PATH_H_ diff --git a/modules/planning/common/path/path_data.cc b/modules/planning/common/path/path_data.cc new file mode 100644 index 00000000000..e2c63ed0f5d --- /dev/null +++ b/modules/planning/common/path/path_data.cc @@ -0,0 +1,214 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file path_data.cc + **/ + +#include "modules/planning/common/path/path_data.h" + +#include +#include + +#include "modules/common/log.h" +#include "modules/common/util/string_util.h" +#include "modules/common/util/util.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/common/planning_util.h" +#include "modules/planning/math/double.h" +#include "modules/planning/math/frame_conversion/cartesian_frenet_conversion.h" + +namespace apollo { +namespace planning { + +using apollo::common::SLPoint; +using apollo::common::math::Vec2d; + +bool PathData::SetDiscretizedPath(const DiscretizedPath &path) { + if (reference_line_ == nullptr) { + AERROR << "Should NOT set discretized path when reference line is nullptr. " + "Please set reference line first."; + return false; + } + discretized_path_ = path; + if (!XYToSL(discretized_path_, &frenet_path_)) { + AERROR << "Fail to transfer discretized path to frenet path."; + return false; + } + DCHECK_EQ(discretized_path_.NumOfPoints(), frenet_path_.points().size()); + path_data_history_.push_back(std::make_pair(discretized_path_, frenet_path_)); + return true; +} + +bool PathData::SetFrenetPath(const FrenetFramePath &frenet_path) { + if (reference_line_ == nullptr) { + AERROR << "Should NOT set frenet path when reference line is nullptr. " + "Please set reference line first."; + return false; + } + frenet_path_ = frenet_path; + if (!SLToXY(frenet_path_, &discretized_path_)) { + AERROR << "Fail to transfer frenet path to discretized path."; + return false; + } + DCHECK_EQ(discretized_path_.NumOfPoints(), frenet_path_.points().size()); + path_data_history_.push_back(std::make_pair(discretized_path_, frenet_path_)); + return true; +} + +const DiscretizedPath &PathData::discretized_path() const { + return discretized_path_; +} + +const FrenetFramePath &PathData::frenet_frame_path() const { + return frenet_path_; +} + +void PathData::SetReferenceLine(const ReferenceLine *reference_line) { + Clear(); + reference_line_ = reference_line; +} + +bool PathData::GetPathPointWithPathS( + const double s, common::PathPoint *const path_point) const { + *path_point = discretized_path_.EvaluateUsingLinearApproximation(s); + return true; +} + +bool PathData::GetPathPointWithRefS(const double ref_s, + common::PathPoint *const path_point) const { + DCHECK_NOTNULL(reference_line_); + DCHECK_NOTNULL(path_point); + DCHECK_EQ(discretized_path_.path_points().size(), + frenet_path_.points().size()); + if (ref_s < 0) { + AERROR << "ref_s[" << ref_s << "] should be > 0"; + return false; + } + if (ref_s > frenet_path_.points().back().s()) { + AERROR << "ref_s is larger than the length of frenet_path_ length [" + << frenet_path_.points().back().s() << "]."; + return false; + } + + uint32_t index = 0; + const double kDistanceEpsilon = 1e-3; + for (uint32_t i = 0; i + 1 < frenet_path_.points().size(); ++i) { + if (fabs(ref_s - frenet_path_.points().at(i).s()) < kDistanceEpsilon) { + path_point->CopyFrom(discretized_path_.path_points().at(i)); + return true; + } + if (frenet_path_.points().at(i).s() < ref_s && + ref_s <= frenet_path_.points().at(i + 1).s()) { + index = i; + break; + } + } + double r = (ref_s - frenet_path_.points().at(index).s()) / + (frenet_path_.points().at(index + 1).s() - + frenet_path_.points().at(index).s()); + + const double discretized_path_s = + discretized_path_.path_points().at(index).s() + + r * (discretized_path_.path_points().at(index + 1).s() - + discretized_path_.path_points().at(index).s()); + path_point->CopyFrom( + discretized_path_.EvaluateUsingLinearApproximation(discretized_path_s)); + + return true; +} + +void PathData::Clear() { + discretized_path_.Clear(); + frenet_path_.Clear(); + reference_line_ = nullptr; +} + +std::string PathData::DebugString() const { + const auto &path_points = discretized_path_.path_points(); + const auto limit = + std::min(path_points.size(), + static_cast(FLAGS_trajectory_point_num_for_debug)); + + return apollo::common::util::StrCat( + "[\n", apollo::common::util::PrintDebugStringIter( + path_points.begin(), path_points.begin() + limit, ",\n"), + "]\n"); +} + +bool PathData::SLToXY(const FrenetFramePath &frenet_path, + DiscretizedPath *const discretized_path) { + DCHECK_NOTNULL(discretized_path); + std::vector path_points; + for (const common::FrenetFramePoint &frenet_point : frenet_path.points()) { + common::SLPoint sl_point; + common::math::Vec2d cartesian_point; + sl_point.set_s(frenet_point.s()); + sl_point.set_l(frenet_point.l()); + if (!reference_line_->SLToXY(sl_point, &cartesian_point)) { + AERROR << "Fail to convert sl point to xy point"; + return false; + } + ReferencePoint ref_point = + reference_line_->GetReferencePoint(frenet_point.s()); + double theta = CartesianFrenetConverter::CalculateTheta( + ref_point.heading(), ref_point.kappa(), frenet_point.l(), + frenet_point.dl()); + double kappa = CartesianFrenetConverter::CalculateKappa( + ref_point.kappa(), ref_point.dkappa(), frenet_point.l(), + frenet_point.dl(), frenet_point.ddl()); + + common::PathPoint path_point = common::util::MakePathPoint( + cartesian_point.x(), cartesian_point.y(), 0.0, theta, kappa, 0.0, 0.0); + + if (path_points.empty()) { + path_point.set_s(0.0); + } else { + common::math::Vec2d last(path_points.back().x(), path_points.back().y()); + common::math::Vec2d current(path_point.x(), path_point.y()); + double distance = (last - current).Length(); + path_point.set_s(path_points.back().s() + distance); + } + path_points.push_back(std::move(path_point)); + } + *discretized_path = DiscretizedPath(std::move(path_points)); + + return true; +} + +bool PathData::XYToSL(const DiscretizedPath &discretized_path, + FrenetFramePath *const frenet_path) { + DCHECK_NOTNULL(frenet_path); + std::vector frenet_frame_points; + + for (const auto &path_point : discretized_path.path_points()) { + SLPoint sl_point; + if (!reference_line_->XYToSL({path_point.x(), path_point.y()}, &sl_point)) { + AERROR << "Fail to transfer cartesian point to frenet point."; + return false; + } + common::FrenetFramePoint frenet_point; + // NOTICE: does not set dl and ddl here. Add if needed. + frenet_point.set_s(sl_point.s()); + frenet_point.set_l(sl_point.l()); + frenet_frame_points.push_back(std::move(frenet_point)); + } + *frenet_path = FrenetFramePath(std::move(frenet_frame_points)); + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/path/path_data.h b/modules/planning/common/path/path_data.h new file mode 100644 index 00000000000..62ab1a4181e --- /dev/null +++ b/modules/planning/common/path/path_data.h @@ -0,0 +1,80 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** * @file path_data.h + **/ + +#ifndef MODULES_PLANNING_COMMON_PATH_PATH_DATA_H_ +#define MODULES_PLANNING_COMMON_PATH_PATH_DATA_H_ + +#include +#include +#include +#include + +#include "modules/planning/common/path/discretized_path.h" +#include "modules/planning/common/path/frenet_frame_path.h" +#include "modules/planning/reference_line/reference_line.h" + +namespace apollo { +namespace planning { + +class PathData { + public: + PathData() = default; + + bool SetDiscretizedPath(const DiscretizedPath &path); + + bool SetFrenetPath(const FrenetFramePath &frenet_path); + + void SetReferenceLine(const ReferenceLine *reference_line); + + const DiscretizedPath &discretized_path() const; + + const FrenetFramePath &frenet_frame_path() const; + + bool GetPathPointWithPathS(const double s, + common::PathPoint *const path_point) const; + + /* + * brief: this function will find the path_point in discretized_path whose + * projection to reference line has s value closest to ref_s. + */ + bool GetPathPointWithRefS(const double ref_s, + common::PathPoint *const path_point) const; + + void Clear(); + + std::string DebugString() const; + + private: + /* + * convert frenet path to cartesian path by reference line + */ + bool SLToXY(const FrenetFramePath &frenet_path, + DiscretizedPath *const discretized_path); + bool XYToSL(const DiscretizedPath &discretized_path, + FrenetFramePath *const frenet_path); + const ReferenceLine *reference_line_ = nullptr; + DiscretizedPath discretized_path_; + FrenetFramePath frenet_path_; + std::list> path_data_history_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_PATH_PATH_DATA_H_ diff --git a/modules/planning/common/path_decision.cc b/modules/planning/common/path_decision.cc new file mode 100644 index 00000000000..30759ce4cef --- /dev/null +++ b/modules/planning/common/path_decision.cc @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include "modules/planning/common/path_decision.h" + +#include +#include + +#include "modules/common/util/util.h" + +namespace apollo { +namespace planning { + +using IndexedPathObstacles = IndexedList; + +bool PathDecision::AddPathObstacle( + std::unique_ptr &&path_obstacle) { + auto id = path_obstacle->Id(); + return path_obstacles_.Add(id, std::move(path_obstacle)); +} + +const IndexedPathObstacles &PathDecision::path_obstacles() const { + return path_obstacles_; +} + +PathObstacle *PathDecision::Find(const std::string &object_id) { + return path_obstacles_.Find(object_id); +} + +bool PathDecision::AddLateralDecision(const std::string &tag, + const std::string &object_id, + const ObjectDecisionType &decision) { + auto *path_obstacle = path_obstacles_.Find(object_id); + if (!path_obstacle) { + AERROR << "failed to find obstacle"; + return false; + } + path_obstacle->AddLateralDecision(tag, decision); + return true; +} + +bool PathDecision::AddLongitudinalDecision(const std::string &tag, + const std::string &object_id, + const ObjectDecisionType &decision) { + auto *path_obstacle = path_obstacles_.Find(object_id); + if (!path_obstacle) { + AERROR << "failed to find obstacle"; + return false; + } + path_obstacle->AddLongitudinalDecision(tag, decision); + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/path_decision.h b/modules/planning/common/path_decision.h new file mode 100644 index 00000000000..cf311bf7f6e --- /dev/null +++ b/modules/planning/common/path_decision.h @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#ifndef MODULES_PLANNING_COMMON_PATH_DECISION_H_ +#define MODULES_PLANNING_COMMON_PATH_DECISION_H_ + +#include +#include +#include +#include + +#include "modules/planning/proto/decision.pb.h" + +#include "modules/planning/common/indexed_list.h" +#include "modules/planning/common/obstacle.h" +#include "modules/planning/common/path_obstacle.h" + +namespace apollo { +namespace planning { + +class PathDecision { + public: + PathDecision() = default; + + bool AddPathObstacle(std::unique_ptr &&path_obstacle); + + const IndexedList &path_obstacles() const; + + bool AddLateralDecision(const std::string &tag, const std::string &object_id, + const ObjectDecisionType &decision); + bool AddLongitudinalDecision(const std::string &tag, + const std::string &object_id, + const ObjectDecisionType &decision); + + PathObstacle *Find(const std::string &object_id); + + private: + IndexedList path_obstacles_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_PATH_DECISION_H_ diff --git a/modules/planning/common/path_obstacle.cc b/modules/planning/common/path_obstacle.cc new file mode 100644 index 00000000000..7434f6cded8 --- /dev/null +++ b/modules/planning/common/path_obstacle.cc @@ -0,0 +1,376 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include +#include +#include +#include + +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/log.h" +#include "modules/common/util/util.h" +#include "modules/planning/common/path_obstacle.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/common/speed/st_boundary.h" + +namespace apollo { +namespace planning { + +using common::VehicleConfigHelper; + +namespace { +const double kStBoundaryDeltaS = 0.2; +const double kStBoundaryDeltaT = 0.05; +} + +const std::unordered_map + PathObstacle::s_longitudinal_decision_safety_sorter_ = { + {ObjectDecisionType::kIgnore, 0}, + {ObjectDecisionType::kOvertake, 100}, + {ObjectDecisionType::kFollow, 300}, + {ObjectDecisionType::kYield, 400}, + {ObjectDecisionType::kStop, 500}}; + +const std::unordered_map + PathObstacle::s_lateral_decision_safety_sorter_ = { + {ObjectDecisionType::kIgnore, 0}, {ObjectDecisionType::kNudge, 100}}; + +const std::string& PathObstacle::Id() const { return id_; } + +PathObstacle::PathObstacle(const Obstacle* obstacle) : obstacle_(obstacle) { + CHECK_NOTNULL(obstacle); + id_ = obstacle_->Id(); +} + +bool PathObstacle::Init(const ReferenceLine& reference_line, + double adc_start_s) { + if (!reference_line.GetSLBoundary(obstacle_->PerceptionBoundingBox(), + &perception_sl_boundary_)) { + AERROR << "Failed to get sl boundary for obstacle: " << id_; + return false; + } + BuildStBoundary(reference_line, adc_start_s); + return true; +} + +void PathObstacle::BuildStBoundary(const ReferenceLine& reference_line, + const double adc_start_s) { + if (obstacle_->IsStatic() || + obstacle_->Trajectory().trajectory_point().empty()) { + std::vector> point_pairs; + if (perception_sl_boundary_.end_s() - perception_sl_boundary_.start_s() < + kStBoundaryDeltaS) { + return; + } + point_pairs.emplace_back( + STPoint(perception_sl_boundary_.start_s() - adc_start_s, 0.0), + STPoint(perception_sl_boundary_.end_s() - adc_start_s, 0.0)); + point_pairs.emplace_back( + STPoint(perception_sl_boundary_.start_s() - adc_start_s, + FLAGS_st_max_t), + STPoint(perception_sl_boundary_.end_s() - adc_start_s, FLAGS_st_max_t)); + st_boundary_ = StBoundary(point_pairs); + } else { + if (BuildTrajectoryStBoundary(reference_line, adc_start_s, &st_boundary_)) { + ADEBUG << "Found st_boundary for obstacle " << id_; + } else { + ADEBUG << "No st_boundary for obstacle " << id_; + } + } +} + +bool PathObstacle::BuildTrajectoryStBoundary( + const ReferenceLine& reference_line, const double adc_start_s, + StBoundary* const st_boundary) { + const auto& object_id = obstacle_->Id(); + const auto& perception = obstacle_->Perception(); + const double object_width = perception.width(); + const double object_length = perception.length(); + const auto& trajectory_points = obstacle_->Trajectory().trajectory_point(); + if (trajectory_points.empty()) { + AWARN << "object " << object_id << " has no trajectory points"; + return false; + } + const auto& adc_param = + VehicleConfigHelper::instance()->GetConfig().vehicle_param(); + const double adc_length = adc_param.length(); + const double adc_half_length = adc_length / 2.0; + const double adc_width = adc_param.width(); + common::math::Box2d min_box({0, 0}, 1.0, 1.0, 1.0); + common::math::Box2d max_box({0, 0}, 1.0, 1.0, 1.0); + std::vector> polygon_points; + for (int i = 1; i < trajectory_points.size(); ++i) { + const auto& first_traj_point = trajectory_points[i - 1]; + const auto& second_traj_point = trajectory_points[i]; + const auto& first_point = first_traj_point.path_point(); + const auto& second_point = second_traj_point.path_point(); + double total_length = + object_length + common::util::Distance2D(first_point, second_point); + common::math::Vec2d center((first_point.x() + second_point.x()) / 2.0, + (first_point.y() + second_point.y()) / 2.0); + common::math::Box2d object_moving_box(center, first_point.theta(), + total_length, object_width); + SLBoundary object_boundary; + // NOTICE: this method will have errors when the reference line is not + // straight. + // Need double loop to cover all corner cases. + if (!reference_line.GetSLBoundary(object_moving_box, &object_boundary)) { + AERROR << "failed to calculate boundary"; + return false; + } + const double object_s_diff = + object_boundary.end_s() - object_boundary.start_s(); + if (object_boundary.end_s() < 0) { // skip if behind reference line + continue; + } + if (object_s_diff < kStBoundaryDeltaS) { + continue; + } + const double delta_t = + second_traj_point.relative_time() - first_traj_point.relative_time(); + double low_s = std::max(object_boundary.start_s() - adc_half_length, 0.0); + bool has_low = false; + double high_s = + std::min(object_boundary.end_s() + adc_half_length, FLAGS_st_max_s); + bool has_high = false; + while (low_s + kStBoundaryDeltaS < high_s && !(has_low && has_high)) { + if (!has_low) { + auto low_ref = reference_line.GetReferencePoint(low_s); + has_low = object_moving_box.HasOverlap( + {low_ref, low_ref.heading(), adc_length, adc_width}); + low_s += kStBoundaryDeltaS; + } + if (!has_high) { + auto high_ref = reference_line.GetReferencePoint(high_s); + has_high = object_moving_box.HasOverlap( + {high_ref, high_ref.heading(), adc_length, adc_width}); + high_s -= kStBoundaryDeltaS; + } + } + if (has_low && has_high) { + low_s -= kStBoundaryDeltaS; + high_s += kStBoundaryDeltaS; + double low_t = + (first_traj_point.relative_time() + + std::fabs((low_s - object_boundary.start_s()) / object_s_diff) * + delta_t); + polygon_points.emplace_back( + std::make_pair(STPoint{low_s - adc_start_s, low_t}, + STPoint{high_s - adc_start_s, low_t})); + double high_t = + (first_traj_point.relative_time() + + std::fabs((high_s - object_boundary.start_s()) / object_s_diff) * + delta_t); + if (high_t - low_t > 0.05) { + polygon_points.emplace_back( + std::make_pair(STPoint{low_s - adc_start_s, high_t}, + STPoint{high_s - adc_start_s, high_t})); + } + } + } + if (!polygon_points.empty()) { + std::sort(polygon_points.begin(), polygon_points.end(), + [](const std::pair& a, + const std::pair& b) { + return a.first.t() < b.first.t(); + }); + auto last = std::unique(polygon_points.begin(), polygon_points.end(), + [](const std::pair& a, + const std::pair& b) { + return std::fabs(a.first.t() - b.first.t()) < + kStBoundaryDeltaT; + }); + polygon_points.erase(last, polygon_points.end()); + if (polygon_points.size() > 2) { + *st_boundary = StBoundary(polygon_points); + } + } + return true; +} + +const StBoundary& PathObstacle::st_boundary() const { return st_boundary_; } + +bool PathObstacle::IsLateralDecision(const ObjectDecisionType& decision) { + return decision.has_ignore() || decision.has_nudge(); +} + +bool PathObstacle::IsLongitudinalDecision(const ObjectDecisionType& decision) { + return decision.has_ignore() || decision.has_stop() || decision.has_yield() || + decision.has_follow() || decision.has_overtake(); +} + +ObjectDecisionType PathObstacle::MergeLongitudinalDecision( + const ObjectDecisionType& lhs, const ObjectDecisionType& rhs) { + if (lhs.object_tag_case() == ObjectDecisionType::OBJECT_TAG_NOT_SET) { + return rhs; + } + if (rhs.object_tag_case() == ObjectDecisionType::OBJECT_TAG_NOT_SET) { + return lhs; + } + auto lhs_iter = + s_longitudinal_decision_safety_sorter_.find(lhs.object_tag_case()); + DCHECK(lhs_iter != s_longitudinal_decision_safety_sorter_.end()) + << "decision : " << lhs.ShortDebugString() + << " not found in safety sorter"; + auto rhs_iter = + s_longitudinal_decision_safety_sorter_.find(rhs.object_tag_case()); + DCHECK(rhs_iter != s_longitudinal_decision_safety_sorter_.end()) + << "decision : " << rhs.ShortDebugString() + << " not found in safety sorter"; + if (lhs_iter->second < rhs_iter->second) { + return rhs; + } else if (lhs_iter->second > rhs_iter->second) { + return lhs; + } else { + if (lhs.has_ignore()) { + return rhs; + } else if (lhs.has_stop()) { + return lhs.stop().distance_s() < rhs.stop().distance_s() ? lhs : rhs; + } else if (lhs.has_yield()) { + return lhs.yield().distance_s() < rhs.yield().distance_s() ? lhs : rhs; + } else if (lhs.has_follow()) { + return lhs.follow().distance_s() < rhs.follow().distance_s() ? lhs : rhs; + } else if (lhs.has_overtake()) { + return lhs.overtake().distance_s() > rhs.overtake().distance_s() ? lhs + : rhs; + } else { + DCHECK(false) << "Unknown decision"; + } + } + return lhs; // stop compiler complaining +} + +const ObjectDecisionType& PathObstacle::LongitudinalDecision() const { + return longitudinal_decision_; +} + +const ObjectDecisionType& PathObstacle::LateralDecision() const { + return lateral_decision_; +} + +bool PathObstacle::IsIgnore() const { + return longitudinal_decision_.has_ignore() && lateral_decision_.has_ignore(); +} + +ObjectDecisionType PathObstacle::MergeLateralDecision( + const ObjectDecisionType& lhs, const ObjectDecisionType& rhs) { + if (lhs.object_tag_case() == ObjectDecisionType::OBJECT_TAG_NOT_SET) { + return rhs; + } + if (rhs.object_tag_case() == ObjectDecisionType::OBJECT_TAG_NOT_SET) { + return lhs; + } + auto lhs_iter = s_lateral_decision_safety_sorter_.find(lhs.object_tag_case()); + DCHECK(lhs_iter != s_lateral_decision_safety_sorter_.end()) + << "decision : " << lhs.ShortDebugString() + << " not found in safety sorter"; + auto rhs_iter = s_lateral_decision_safety_sorter_.find(rhs.object_tag_case()); + DCHECK(rhs_iter != s_lateral_decision_safety_sorter_.end()) + << "decision : " << rhs.ShortDebugString() + << " not found in safety sorter"; + if (lhs_iter->second < rhs_iter->second) { + return rhs; + } else if (lhs_iter->second > rhs_iter->second) { + return lhs; + } else { + if (lhs.has_ignore()) { + return rhs; + } else if (lhs.has_nudge()) { + DCHECK(lhs.nudge().type() == rhs.nudge().type()) + << "could not merge left nudge and right nudge"; + return std::fabs(lhs.nudge().distance_l()) > + std::fabs(rhs.nudge().distance_l()) + ? lhs + : rhs; + } + } + DCHECK(false) << "Does not have rule to merge decision: " + << lhs.ShortDebugString() + << " and decision: " << rhs.ShortDebugString(); +} + +bool PathObstacle::HasLateralDecision() const { + return lateral_decision_.object_tag_case() != + ObjectDecisionType::OBJECT_TAG_NOT_SET; +} + +bool PathObstacle::HasLongitudinalDecision() const { + return longitudinal_decision_.object_tag_case() != + ObjectDecisionType::OBJECT_TAG_NOT_SET; +} + +const Obstacle* PathObstacle::obstacle() const { return obstacle_; } + +void PathObstacle::AddLongitudinalDecision(const std::string& decider_tag, + const ObjectDecisionType& decision) { + DCHECK(IsLongitudinalDecision(decision)) + << "Decision: " << decision.ShortDebugString() + << " is not a longitudinal decision"; + longitudinal_decision_ = + MergeLongitudinalDecision(longitudinal_decision_, decision); + ADEBUG << decider_tag << " added obstacle " << Id() + << " a longitudinal decision: " << decision.ShortDebugString() + << ". The merged decision is: " + << longitudinal_decision_.ShortDebugString(); + decisions_.push_back(decision); + decider_tags_.push_back(decider_tag); +} + +void PathObstacle::AddLateralDecision(const std::string& decider_tag, + const ObjectDecisionType& decision) { + DCHECK(IsLateralDecision(decision)) + << "Decision: " << decision.ShortDebugString() + << " is not a lateral decision"; + lateral_decision_ = MergeLateralDecision(lateral_decision_, decision); + ADEBUG << decider_tag << " added obstacle " << Id() + << " a lateral decision: " << decision.ShortDebugString() + << ". The merged decision is: " + << lateral_decision_.ShortDebugString(); + decisions_.push_back(decision); + decider_tags_.push_back(decider_tag); +} + +const std::string PathObstacle::DebugString() const { + std::stringstream ss; + ss << "PathObstacle id: " << id_; + for (std::size_t i = 0; i < decisions_.size(); ++i) { + ss << " decision: " << decisions_[i].DebugString() << ", made by " + << decider_tags_[i]; + } + if (lateral_decision_.object_tag_case() != + ObjectDecisionType::OBJECT_TAG_NOT_SET) { + ss << "lateral decision: " << lateral_decision_.ShortDebugString(); + } + if (longitudinal_decision_.object_tag_case() != + ObjectDecisionType::OBJECT_TAG_NOT_SET) { + ss << "longitutional decision: " + << longitudinal_decision_.ShortDebugString(); + } + return ss.str(); +} + +const SLBoundary& PathObstacle::perception_sl_boundary() const { + return perception_sl_boundary_; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/path_obstacle.h b/modules/planning/common/path_obstacle.h new file mode 100644 index 00000000000..9967eb7d43b --- /dev/null +++ b/modules/planning/common/path_obstacle.h @@ -0,0 +1,165 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#ifndef MODULES_PLANNING_COMMON_PATH_OBSTACLE_H_ +#define MODULES_PLANNING_COMMON_PATH_OBSTACLE_H_ + +#include +#include +#include +#include + +#include "gtest/gtest_prod.h" + +#include "modules/perception/proto/perception_obstacle.pb.h" +#include "modules/planning/proto/decision.pb.h" +#include "modules/planning/proto/sl_boundary.pb.h" +#include "modules/prediction/proto/prediction_obstacle.pb.h" + +#include "modules/common/math/box2d.h" +#include "modules/common/math/vec2d.h" +#include "modules/planning/common/indexed_list.h" +#include "modules/planning/common/obstacle.h" +#include "modules/planning/common/speed/st_boundary.h" +#include "modules/planning/reference_line/reference_line.h" + +namespace apollo { +namespace planning { + +/** + * @class PathObstacle + * @brief This is the class that associates an Obstacle with its path + * properties. An obstacle's path properties relative to a path. + * The `s` and `l` values are examples of path properties. + * The decision of an obstacle is also associated with a path. + * + * The decisions have two categories: lateral decision and longitudinal + * decision. + * Lateral decision includes: nudge, ignore. + * Lateral decision saftey priority: nudge > ignore. + * Longitudinal decision includes: stop, yield, follow, overtake, ignore. + * Decision saftey priorities order: stop > yield >= follow > overtake > ignore + * + * Ignore decision belongs to both lateral decision and longitudinal decision, + * and it has the lowest priority. + */ +class PathObstacle { + public: + PathObstacle() = default; + explicit PathObstacle(const Obstacle* obstacle); + + bool Init(const ReferenceLine& reference_line, const double adc_start_s); + + const std::string& Id() const; + + const Obstacle* obstacle() const; + + /** + * return the merged lateral decision + * Lateral decision is one of {Nudge, Ignore} + **/ + const ObjectDecisionType& LateralDecision() const; + + /** + * @brief return the merged longitudinal decision + * Longitudinal decision is one of {Stop, Yield, Follow, Overtake, Ignore} + **/ + const ObjectDecisionType& LongitudinalDecision() const; + + const std::string DebugString() const; + + const SLBoundary& perception_sl_boundary() const; + + const StBoundary& st_boundary() const; + + void AddLongitudinalDecision(const std::string& decider_tag, + const ObjectDecisionType& decision); + + void AddLateralDecision(const std::string& decider_tag, + const ObjectDecisionType& decision); + bool HasLateralDecision() const; + + bool HasLongitudinalDecision() const; + + /** + * @brief Check if this object can be safely ignored. + * The object will be ignored if the lateral decision is ignore and the + * longitudinal decision is ignore + * return longitudinal_decision_ == ignore && lateral_decision == ignore. + */ + bool IsIgnore() const; + + private: + /** + * @brief check if a ObjectDecisionType is a lateral decision. + **/ + FRIEND_TEST(IsLateralDecision, AllDecisions); + static bool IsLateralDecision(const ObjectDecisionType& decision); + + /** + * @brief check if a ObjectDecisionType is longitudinal decision. + **/ + FRIEND_TEST(IsLongitudinalDecision, AllDecisions); + static bool IsLongitudinalDecision(const ObjectDecisionType& decision); + + FRIEND_TEST(MergeLongitudinalDecision, AllDecisions); + static ObjectDecisionType MergeLongitudinalDecision( + const ObjectDecisionType& lhs, const ObjectDecisionType& rhs); + FRIEND_TEST(MergeLateralDecision, AllDecisions); + static ObjectDecisionType MergeLateralDecision(const ObjectDecisionType& lhs, + const ObjectDecisionType& rhs); + + void BuildStBoundary(const ReferenceLine& reference_line, + const double adc_start_s); + + bool BuildTrajectoryStBoundary(const ReferenceLine& reference_line, + const double adc_start_s, + StBoundary* const st_boundary); + + std::string id_; + const Obstacle* obstacle_ = nullptr; + std::vector decisions_; + std::vector decider_tags_; + SLBoundary perception_sl_boundary_; + + StBoundary st_boundary_; + + ObjectDecisionType lateral_decision_; + ObjectDecisionType longitudinal_decision_; + + struct ObjectTagCaseHash { + std::size_t operator()( + const planning::ObjectDecisionType::ObjectTagCase tag) const { + return static_cast(tag); + } + }; + + static const std::unordered_map + s_lateral_decision_safety_sorter_; + static const std::unordered_map + s_longitudinal_decision_safety_sorter_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_PATH_OBSTACLE_H_ diff --git a/modules/planning/common/path_obstacle_test.cc b/modules/planning/common/path_obstacle_test.cc new file mode 100644 index 00000000000..94c1a95618d --- /dev/null +++ b/modules/planning/common/path_obstacle_test.cc @@ -0,0 +1,493 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include +#include +#include + +#include "gtest/gtest.h" + +#include "modules/perception/proto/perception_obstacle.pb.h" +#include "modules/prediction/proto/prediction_obstacle.pb.h" + +#include "modules/common/util/file.h" +#include "modules/common/util/util.h" +#include "modules/planning/common/path_obstacle.h" + +namespace apollo { +namespace planning { + +TEST(IsLateralDecision, AllDecisions) { + ObjectDecisionType decision_ignore; + decision_ignore.mutable_ignore(); + EXPECT_TRUE(PathObstacle::IsLateralDecision(decision_ignore)); + + ObjectDecisionType decision_overtake; + decision_overtake.mutable_overtake(); + EXPECT_FALSE(PathObstacle::IsLateralDecision(decision_overtake)); + + ObjectDecisionType decision_follow; + decision_follow.mutable_follow(); + EXPECT_FALSE(PathObstacle::IsLateralDecision(decision_follow)); + + ObjectDecisionType decision_yield; + decision_yield.mutable_yield(); + EXPECT_FALSE(PathObstacle::IsLateralDecision(decision_yield)); + + ObjectDecisionType decision_stop; + decision_stop.mutable_stop(); + EXPECT_FALSE(PathObstacle::IsLateralDecision(decision_stop)); + + ObjectDecisionType decision_nudge; + decision_nudge.mutable_nudge(); + EXPECT_TRUE(PathObstacle::IsLateralDecision(decision_nudge)); + + ObjectDecisionType decision_sidepass; + decision_sidepass.mutable_sidepass(); + EXPECT_FALSE(PathObstacle::IsLateralDecision(decision_sidepass)); +} + +TEST(IsLongitudinalDecision, AllDecisions) { + ObjectDecisionType decision_ignore; + decision_ignore.mutable_ignore(); + EXPECT_TRUE(PathObstacle::IsLongitudinalDecision(decision_ignore)); + + ObjectDecisionType decision_overtake; + decision_overtake.mutable_overtake(); + EXPECT_TRUE(PathObstacle::IsLongitudinalDecision(decision_overtake)); + + ObjectDecisionType decision_follow; + decision_follow.mutable_follow(); + EXPECT_TRUE(PathObstacle::IsLongitudinalDecision(decision_follow)); + + ObjectDecisionType decision_yield; + decision_yield.mutable_yield(); + EXPECT_TRUE(PathObstacle::IsLongitudinalDecision(decision_yield)); + + ObjectDecisionType decision_stop; + decision_stop.mutable_stop(); + EXPECT_TRUE(PathObstacle::IsLongitudinalDecision(decision_stop)); + + ObjectDecisionType decision_nudge; + decision_nudge.mutable_nudge(); + EXPECT_FALSE(PathObstacle::IsLongitudinalDecision(decision_nudge)); + + ObjectDecisionType decision_sidepass; + decision_sidepass.mutable_sidepass(); + EXPECT_FALSE(PathObstacle::IsLongitudinalDecision(decision_sidepass)); +} + +TEST(MergeLongitudinalDecision, AllDecisions) { + ObjectDecisionType decision_ignore; + decision_ignore.mutable_ignore(); + + ObjectDecisionType decision_overtake; + decision_overtake.mutable_overtake(); + + ObjectDecisionType decision_follow; + decision_follow.mutable_follow(); + + ObjectDecisionType decision_yield; + decision_yield.mutable_yield(); + + ObjectDecisionType decision_stop; + decision_stop.mutable_stop(); + + ObjectDecisionType decision_nudge; + decision_nudge.mutable_nudge(); + + ObjectDecisionType decision_sidepass; + decision_sidepass.mutable_sidepass(); + + // vertical decision comparison + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_stop, decision_ignore) + .has_stop()); + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_stop, decision_overtake) + .has_stop()); + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_stop, decision_follow) + .has_stop()); + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_stop, decision_yield) + .has_stop()); + + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_yield, decision_ignore) + .has_yield()); + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_yield, decision_overtake) + .has_yield()); + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_yield, decision_follow) + .has_yield()); + + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_follow, decision_ignore) + .has_follow()); + EXPECT_TRUE(PathObstacle::MergeLongitudinalDecision(decision_follow, + decision_overtake) + .has_follow()); + + EXPECT_TRUE(PathObstacle::MergeLongitudinalDecision(decision_overtake, + decision_ignore) + .has_overtake()); + + EXPECT_TRUE(PathObstacle::MergeLongitudinalDecision(decision_ignore, + decision_overtake) + .has_overtake()); + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_ignore, decision_follow) + .has_follow()); + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_ignore, decision_yield) + .has_yield()); + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_ignore, decision_stop) + .has_stop()); + + EXPECT_TRUE(PathObstacle::MergeLongitudinalDecision(decision_overtake, + decision_follow) + .has_follow()); + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_overtake, decision_yield) + .has_yield()); + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_overtake, decision_stop) + .has_stop()); + + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_follow, decision_yield) + .has_yield()); + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_follow, decision_stop) + .has_stop()); + + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_yield, decision_stop) + .has_stop()); + + EXPECT_TRUE( + PathObstacle::MergeLongitudinalDecision(decision_ignore, decision_ignore) + .has_ignore()); + + EXPECT_DEATH(PathObstacle::MergeLongitudinalDecision(decision_overtake, + decision_nudge), + ".*decision : nudge \\{ \\} not found in safety sorter.*"); + EXPECT_DEATH( + PathObstacle::MergeLongitudinalDecision(decision_follow, decision_nudge), + ".*decision : nudge \\{ \\} not found in safety sorter.*"); + EXPECT_DEATH( + PathObstacle::MergeLongitudinalDecision(decision_yield, decision_nudge), + ".*decision : nudge \\{ \\} not found in safety sorter.*"); + EXPECT_DEATH( + PathObstacle::MergeLongitudinalDecision(decision_stop, decision_nudge), + ".*decision : nudge \\{ \\} not found in safety sorter.*"); + + EXPECT_DEATH(PathObstacle::MergeLongitudinalDecision(decision_overtake, + decision_sidepass), + ".*decision : sidepass \\{ \\} not found in safety sorter.*"); + EXPECT_DEATH(PathObstacle::MergeLongitudinalDecision(decision_follow, + decision_sidepass), + ".*decision : sidepass \\{ \\} not found in safety sorter.*"); + EXPECT_DEATH(PathObstacle::MergeLongitudinalDecision(decision_yield, + decision_sidepass), + ".*decision : sidepass \\{ \\} not found in safety sorter.*"); + EXPECT_DEATH( + PathObstacle::MergeLongitudinalDecision(decision_stop, decision_sidepass), + ".*decision : sidepass \\{ \\} not found in safety sorter.*"); + + EXPECT_DEATH(PathObstacle::MergeLongitudinalDecision(decision_nudge, + decision_overtake), + ".*decision : nudge \\{ \\} not found in safety sorter.*"); + EXPECT_DEATH(PathObstacle::MergeLongitudinalDecision(decision_sidepass, + decision_overtake), + ".*decision : sidepass \\{ \\} not found in safety sorter.*"); + + EXPECT_DEATH(PathObstacle::MergeLongitudinalDecision(decision_nudge, + decision_sidepass), + ".*decision : nudge \\{ \\} not found in safety sorter.*"); + + ObjectDecisionType decision_overtake1; + decision_overtake1.mutable_overtake()->set_distance_s(1); + ObjectDecisionType decision_overtake2; + decision_overtake2.mutable_overtake()->set_distance_s(2); + EXPECT_EQ(2, PathObstacle::MergeLongitudinalDecision(decision_overtake1, + decision_overtake2) + .overtake() + .distance_s()); + + ObjectDecisionType decision_follow1; + decision_follow1.mutable_follow()->set_distance_s(-1); + ObjectDecisionType decision_follow2; + decision_follow2.mutable_follow()->set_distance_s(-2); + EXPECT_EQ(-2, PathObstacle::MergeLongitudinalDecision(decision_follow1, + decision_follow2) + .follow() + .distance_s()); + + ObjectDecisionType decision_yield1; + decision_yield1.mutable_yield()->set_distance_s(-1); + ObjectDecisionType decision_yield2; + decision_yield2.mutable_yield()->set_distance_s(-2); + EXPECT_EQ(-2, PathObstacle::MergeLongitudinalDecision(decision_yield1, + decision_yield2) + .yield() + .distance_s()); + + ObjectDecisionType decision_stop1; + decision_stop1.mutable_stop()->set_distance_s(-1); + ObjectDecisionType decision_stop2; + decision_stop2.mutable_stop()->set_distance_s(-2); + EXPECT_EQ(-2, PathObstacle::MergeLongitudinalDecision(decision_stop1, + decision_stop2) + .stop() + .distance_s()); +} + +TEST(MergeLateralDecision, AllDecisions) { + ObjectDecisionType decision_ignore; + decision_ignore.mutable_ignore(); + + ObjectDecisionType decision_overtake; + decision_overtake.mutable_overtake(); + + ObjectDecisionType decision_follow; + decision_follow.mutable_follow(); + + ObjectDecisionType decision_yield; + decision_yield.mutable_yield(); + + ObjectDecisionType decision_stop; + decision_stop.mutable_stop(); + + ObjectDecisionType decision_nudge; + decision_nudge.mutable_nudge()->set_type(ObjectNudge::LEFT_NUDGE); + + ObjectDecisionType decision_sidepass; + decision_sidepass.mutable_sidepass(); + + EXPECT_TRUE( + PathObstacle::MergeLateralDecision(decision_nudge, decision_ignore) + .has_nudge()); + + EXPECT_TRUE( + PathObstacle::MergeLateralDecision(decision_ignore, decision_nudge) + .has_nudge()); + + EXPECT_DEATH( + PathObstacle::MergeLateralDecision(decision_nudge, decision_overtake), + ".*decision : overtake \\{ \\} not found in safety sorter.*"); + EXPECT_DEATH( + PathObstacle::MergeLateralDecision(decision_nudge, decision_follow), + ".*decision : follow \\{ \\} not found in safety sorter.*"); + EXPECT_DEATH( + PathObstacle::MergeLateralDecision(decision_nudge, decision_yield), + ".*decision : yield \\{ \\} not found in safety sorter.*"); + EXPECT_DEATH( + PathObstacle::MergeLateralDecision(decision_nudge, decision_stop), + ".*decision : stop \\{ \\} not found in safety sorter.*"); + EXPECT_DEATH( + PathObstacle::MergeLateralDecision(decision_nudge, decision_sidepass), + ".*decision : sidepass \\{ \\} not found in safety sorter.*"); + + EXPECT_DEATH( + PathObstacle::MergeLateralDecision(decision_overtake, decision_nudge), + ".*decision : overtake \\{ \\} not found in safety sorter.*"); + EXPECT_DEATH( + PathObstacle::MergeLateralDecision(decision_sidepass, decision_nudge), + ".*decision : sidepass \\{ \\} not found in safety sorter.*"); + + EXPECT_DEATH( + PathObstacle::MergeLateralDecision(decision_overtake, decision_sidepass), + ".*decision : overtake \\{ \\} not found in safety sorter.*"); + + ObjectDecisionType decision_nudge2; + decision_nudge2.mutable_nudge()->set_type(ObjectNudge::LEFT_NUDGE); + EXPECT_TRUE( + PathObstacle::MergeLateralDecision(decision_nudge, decision_nudge2) + .has_nudge()); + decision_nudge2.mutable_nudge()->set_type(ObjectNudge::RIGHT_NUDGE); + EXPECT_DEATH( + PathObstacle::MergeLateralDecision(decision_nudge, decision_nudge2), + ".*could not merge left nudge and right nudge"); +} + +TEST(PathObstacleTest, add_decision_test) { + // init state + { + PathObstacle path_obstacle; + EXPECT_FALSE(path_obstacle.HasLateralDecision()); + EXPECT_FALSE(path_obstacle.HasLongitudinalDecision()); + } + + // Ignore + { + PathObstacle path_obstacle; + ObjectDecisionType decision; + decision.mutable_ignore(); + path_obstacle.AddLongitudinalDecision("test_ignore", decision); + EXPECT_FALSE(path_obstacle.HasLateralDecision()); + EXPECT_TRUE(path_obstacle.HasLongitudinalDecision()); + EXPECT_FALSE(path_obstacle.LateralDecision().has_ignore()); + EXPECT_TRUE(path_obstacle.LongitudinalDecision().has_ignore()); + } + + // stop and ignore + { + PathObstacle path_obstacle; + ObjectDecisionType decision; + + decision.mutable_stop(); + path_obstacle.AddLongitudinalDecision("test_stop", decision); + + EXPECT_FALSE(path_obstacle.HasLateralDecision()); + EXPECT_TRUE(path_obstacle.HasLongitudinalDecision()); + EXPECT_TRUE(path_obstacle.LongitudinalDecision().has_stop()); + + decision.mutable_ignore(); + path_obstacle.AddLongitudinalDecision("test_ignore", decision); + EXPECT_FALSE(path_obstacle.HasLateralDecision()); + EXPECT_TRUE(path_obstacle.HasLongitudinalDecision()); + EXPECT_FALSE(path_obstacle.LateralDecision().has_ignore()); + EXPECT_TRUE(path_obstacle.LongitudinalDecision().has_stop()); + } + + // left nudge and ignore + { + PathObstacle path_obstacle; + ObjectDecisionType decision; + + decision.mutable_nudge()->set_type(ObjectNudge::LEFT_NUDGE); + path_obstacle.AddLateralDecision("test_nudge", decision); + + EXPECT_TRUE(path_obstacle.HasLateralDecision()); + EXPECT_FALSE(path_obstacle.HasLongitudinalDecision()); + EXPECT_TRUE(path_obstacle.LateralDecision().has_nudge()); + + decision.mutable_ignore(); + path_obstacle.AddLateralDecision("test_ignore", decision); + EXPECT_TRUE(path_obstacle.HasLateralDecision()); + EXPECT_FALSE(path_obstacle.HasLongitudinalDecision()); + EXPECT_TRUE(path_obstacle.LateralDecision().has_nudge()); + EXPECT_FALSE(path_obstacle.LongitudinalDecision().has_ignore()); + } + + // right nudge and ignore + { + PathObstacle path_obstacle; + ObjectDecisionType decision; + + decision.mutable_nudge()->set_type(ObjectNudge::RIGHT_NUDGE); + path_obstacle.AddLateralDecision("test_nudge", decision); + + EXPECT_TRUE(path_obstacle.HasLateralDecision()); + EXPECT_FALSE(path_obstacle.HasLongitudinalDecision()); + EXPECT_TRUE(path_obstacle.LateralDecision().has_nudge()); + + decision.mutable_ignore(); + path_obstacle.AddLateralDecision("test_ignore", decision); + EXPECT_TRUE(path_obstacle.HasLateralDecision()); + EXPECT_FALSE(path_obstacle.HasLongitudinalDecision()); + EXPECT_TRUE(path_obstacle.LateralDecision().has_nudge()); + EXPECT_FALSE(path_obstacle.LongitudinalDecision().has_ignore()); + } + + // left nudge and right nudge + { + PathObstacle path_obstacle; + ObjectDecisionType decision; + + decision.mutable_nudge()->set_type(ObjectNudge::LEFT_NUDGE); + path_obstacle.AddLateralDecision("test_left_nudge", decision); + + EXPECT_TRUE(path_obstacle.HasLateralDecision()); + EXPECT_FALSE(path_obstacle.HasLongitudinalDecision()); + EXPECT_TRUE(path_obstacle.LateralDecision().has_nudge()); + + decision.mutable_nudge()->set_type(ObjectNudge::RIGHT_NUDGE); + EXPECT_DEATH(path_obstacle.AddLateralDecision("test_right_nudge", decision), + ".*could not merge left nudge and right nudge"); + } + + // overtake and ignore + { + PathObstacle path_obstacle; + ObjectDecisionType decision; + + decision.mutable_overtake(); + path_obstacle.AddLongitudinalDecision("test_overtake", decision); + + EXPECT_FALSE(path_obstacle.HasLateralDecision()); + EXPECT_TRUE(path_obstacle.HasLongitudinalDecision()); + EXPECT_TRUE(path_obstacle.LongitudinalDecision().has_overtake()); + + decision.mutable_ignore(); + path_obstacle.AddLongitudinalDecision("test_ignore", decision); + EXPECT_FALSE(path_obstacle.HasLateralDecision()); + EXPECT_TRUE(path_obstacle.HasLongitudinalDecision()); + EXPECT_FALSE(path_obstacle.LateralDecision().has_ignore()); + EXPECT_TRUE(path_obstacle.LongitudinalDecision().has_overtake()); + } + + // yield and ignore + { + PathObstacle path_obstacle; + ObjectDecisionType decision; + + decision.mutable_yield(); + path_obstacle.AddLongitudinalDecision("test_yield", decision); + + EXPECT_FALSE(path_obstacle.HasLateralDecision()); + EXPECT_TRUE(path_obstacle.HasLongitudinalDecision()); + EXPECT_TRUE(path_obstacle.LongitudinalDecision().has_yield()); + + decision.mutable_ignore(); + path_obstacle.AddLongitudinalDecision("test_ignore", decision); + EXPECT_FALSE(path_obstacle.HasLateralDecision()); + EXPECT_TRUE(path_obstacle.HasLongitudinalDecision()); + EXPECT_FALSE(path_obstacle.LateralDecision().has_ignore()); + EXPECT_TRUE(path_obstacle.LongitudinalDecision().has_yield()); + } + + // stop and nudge + { + PathObstacle path_obstacle; + ObjectDecisionType decision; + + decision.mutable_stop(); + path_obstacle.AddLongitudinalDecision("test_stop", decision); + + EXPECT_FALSE(path_obstacle.HasLateralDecision()); + EXPECT_TRUE(path_obstacle.HasLongitudinalDecision()); + EXPECT_TRUE(path_obstacle.LongitudinalDecision().has_stop()); + + decision.mutable_nudge(); + path_obstacle.AddLateralDecision("test_nudge", decision); + EXPECT_TRUE(path_obstacle.HasLateralDecision()); + EXPECT_TRUE(path_obstacle.HasLongitudinalDecision()); + EXPECT_TRUE(path_obstacle.LateralDecision().has_nudge()); + EXPECT_TRUE(path_obstacle.LongitudinalDecision().has_stop()); + } +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/planning_gflags.cc b/modules/planning/common/planning_gflags.cc index 9631e389ee1..e3a3d1d779e 100644 --- a/modules/planning/common/planning_gflags.cc +++ b/modules/planning/common/planning_gflags.cc @@ -15,24 +15,141 @@ *****************************************************************************/ #include "modules/planning/common/planning_gflags.h" +DEFINE_int32(planning_loop_rate, 10, "Loop rate for planning node"); -DEFINE_int32(planning_loop_rate, 5, "Loop rate for planning node"); +DEFINE_string(adapter_config_filename, "modules/planning/conf/adapter.conf", + "The adapter configuration file"); DEFINE_string(rtk_trajectory_filename, "modules/planning/data/garage.csv", "Loop rate for planning node"); -DEFINE_uint64(rtk_trajectory_backward, 10, - "The number of points to be included in RTK trajectory " - "before the matched point"); - DEFINE_uint64(rtk_trajectory_forward, 800, "The number of points to be included in RTK trajectory " "after the matched point"); -DEFINE_double(replanning_threshold, 2.0, - "The threshold of position deviation " - "that triggers the planner replanning"); - DEFINE_double(trajectory_resolution, 0.01, "The time resolution of " "output trajectory."); + +DEFINE_double( + look_backward_distance, 10, + "look backward this distance when creating reference line from routing"); + +DEFINE_double( + look_forward_distance, 100, + "look forward this distance when creating reference line from routing"); +DEFINE_bool(enable_smooth_reference_line, true, + "enable smooth the map reference line"); + +DEFINE_int32(max_history_frame_num, 5, "The maximum history frame number"); + +DEFINE_double(max_collision_distance, 0.1, + "considered as collision if distance (meters) is smaller than or " + "equal to this (meters)"); + +DEFINE_double(replan_distance_threshold, 5.0, + "The distance threshold of replan"); + +DEFINE_bool(enable_reference_line_provider_thread, false, + "Enable reference line provider thread."); + +DEFINE_double(default_reference_line_width, 4.0, + "Default reference line width"); + +DEFINE_double(planning_upper_speed_limit, 12.5, + "Maximum speed (m/s) in planning."); + +DEFINE_double(trajectory_time_length, 8.0, "Trajectory time length"); +DEFINE_double(trajectory_time_resolution, 0.1, + "Trajectory time resolution in planning"); +DEFINE_double(output_trajectory_time_resolution, 0.05, + "Trajectory time resolution when publish"); + +DEFINE_bool(enable_trajectory_check, false, + "Enable sanity check for planning trajectory."); + +DEFINE_double(speed_lower_bound, -0.02, "The lowest speed allowed."); +DEFINE_double(speed_upper_bound, 40.0, "The highest speed allowed."); + +DEFINE_double(longitudinal_acceleration_lower_bound, -4.5, + "The lowest longitudinal acceleration allowed."); +DEFINE_double(longitudinal_acceleration_upper_bound, 4.0, + "The highest longitudinal acceleration allowed."); + +DEFINE_double(lateral_jerk_bound, 4.0, + "Bound of lateral jerk; symmetric for left and right"); + +DEFINE_double(longitudinal_jerk_lower_bound, -4.0, + "The lower bound of longitudinal jerk."); +DEFINE_double(longitudinal_jerk_upper_bound, 4.0, + "The upper bound of longitudinal jerk."); + +DEFINE_double(kappa_bound, 1.00, "The bound for vehicle curvature"); + +// ST Boundary +DEFINE_double(st_max_s, 100, "the maximum s of st boundary"); +DEFINE_double(st_max_t, 8, "the maximum t of st boundary"); + +// Decision Part +DEFINE_double(static_obstacle_speed_threshold, 1.0, + "obstacles are considered as static obstacle if its speed is " + "less than this value (m/s)"); +DEFINE_bool(enable_nudge_decision, true, "enable nudge decision"); +DEFINE_double(static_decision_nudge_l_buffer, 0.5, "l buffer for nudge"); +DEFINE_double(lateral_ignore_buffer, 2.0, + "If an obstacle's lateral distance is further away than this " + "distance, ignore it"); +DEFINE_double(stop_distance_obstacle, 10.0, + "stop distance from in-lane obstacle (meters)"); +DEFINE_double(stop_distance_destination, 3.0, + "stop distance from destination line"); +DEFINE_double(nudge_distance_obstacle, 0.3, + "minimum distance to nudge a obstacle (meters)"); +DEFINE_double(follow_min_distance, 10, + "min follow distance for vehicles/bicycles/moving objects"); +DEFINE_double( + follow_time_buffer, 4.0, + "follow time buffer (in second) to calculate the following distance."); + +DEFINE_string(destination_obstacle_id, "DEST", + "obstacle id for converting destination to an obstacle"); +DEFINE_double(virtual_stop_wall_length, 0.1, + "virtual stop wall length (meters)"); +DEFINE_double(virtual_stop_wall_width, 3.7, "virtual stop wall width (meters)"); +DEFINE_double(virtual_stop_wall_height, 2.0, + "virtual stop wall height (meters)"); + +// Prediction Part +DEFINE_double(prediction_total_time, 5.0, "Total prediction time"); +DEFINE_bool(align_prediction_time, false, + "enable align prediction data based planning time"); + +// Trajectory +DEFINE_bool(enable_rule_layer, true, + "enable rule for trajectory before model computation"); + +// Traffic decision + +DEFINE_string(planning_config_file, + "modules/planning/conf/planning_config.pb.txt", + "planning config file"); + +DEFINE_int32(trajectory_point_num_for_debug, 10, + "number of output trajectory points for debugging"); + +DEFINE_double(decision_valid_stop_range, 0.5, + "The valid stop range in decision."); +DEFINE_bool(enable_record_debug, true, + "True to enable record debug into debug protobuf."); +DEFINE_bool(enable_prediction, true, "True to enable prediction input."); + +// QpSt optimizer +DEFINE_bool(enable_slowdown_profile_generator, true, + "True to enable slowdown speed profile generator."); +DEFINE_double(slowdown_speed_threshold, 8.0, + "Only generator slowdown profile when adc speed is lower than " + "this threshold. unit : m/s."); +DEFINE_double(slowdown_profile_deceleration, -1.0, + "The deceleration to generate slowdown profile. unit: m/s^2."); +DEFINE_bool(enable_follow_accel_constraint, true, + "Enable follow acceleration constraint."); diff --git a/modules/planning/common/planning_gflags.h b/modules/planning/common/planning_gflags.h index fe0b2a81fc4..97e4dd049c8 100644 --- a/modules/planning/common/planning_gflags.h +++ b/modules/planning/common/planning_gflags.h @@ -19,11 +19,79 @@ #include "gflags/gflags.h" +DECLARE_string(planning_config_file); +DECLARE_string(adapter_config_filename); DECLARE_int32(planning_loop_rate); DECLARE_string(rtk_trajectory_filename); -DECLARE_uint64(rtk_trajectory_backward); DECLARE_uint64(rtk_trajectory_forward); -DECLARE_double(replanning_threshold); DECLARE_double(trajectory_resolution); +DECLARE_double(look_backward_distance); +DECLARE_double(look_forward_distance); +DECLARE_bool(enable_smooth_reference_line); +DECLARE_double(max_collision_distance); -#endif /* MODULES_PLANNING_COMMON_PLANNING_GFLAGS_H_ */ +DECLARE_int32(max_history_frame_num); + +// parameters for trajectory stitching and reinit planning starting point. +DECLARE_double(replan_distance_threshold); + +// parameter for reference line +DECLARE_bool(enable_reference_line_provider_thread); +DECLARE_double(default_reference_line_width); +DECLARE_double(planning_upper_speed_limit); + +// parameters for trajectory planning +DECLARE_double(trajectory_time_length); +DECLARE_double(trajectory_time_resolution); +DECLARE_double(output_trajectory_time_resolution); + +// parameters for trajectory sanity check +DECLARE_bool(enable_trajectory_check); +DECLARE_double(speed_lower_bound); +DECLARE_double(speed_upper_bound); + +DECLARE_double(longitudinal_acceleration_lower_bound); +DECLARE_double(longitudinal_acceleration_upper_bound); + +DECLARE_double(lateral_jerk_bound); + +DECLARE_double(longitudinal_jerk_lower_bound); +DECLARE_double(longitudinal_jerk_upper_bound); + +DECLARE_double(kappa_bound); + +// STBoundary +DECLARE_double(st_max_s); +DECLARE_double(st_max_t); + +// Decision Part +DECLARE_double(static_obstacle_speed_threshold); +DECLARE_bool(enable_nudge_decision); +DECLARE_double(static_decision_nudge_l_buffer); +DECLARE_double(lateral_ignore_buffer); +DECLARE_double(stop_distance_obstacle); +DECLARE_double(stop_distance_destination); +DECLARE_double(nudge_distance_obstacle); +DECLARE_double(follow_min_distance); +DECLARE_double(follow_time_buffer); + +DECLARE_string(destination_obstacle_id); +DECLARE_double(virtual_stop_wall_length); +DECLARE_double(virtual_stop_wall_width); +DECLARE_double(virtual_stop_wall_height); + +DECLARE_double(prediction_total_time); +DECLARE_bool(align_prediction_time); +DECLARE_int32(trajectory_point_num_for_debug); +DECLARE_double(decision_valid_stop_range); + +DECLARE_bool(enable_record_debug); +DECLARE_bool(enable_prediction); + +// QpSt optimizer +DECLARE_bool(enable_slowdown_profile_generator); +DECLARE_double(slowdown_speed_threshold); +DECLARE_double(slowdown_profile_deceleration); +DECLARE_bool(enable_follow_accel_constraint); + +#endif // MODULES_PLANNING_COMMON_PLANNING_GFLAGS_H_ diff --git a/modules/planning/common/planning_util.cc b/modules/planning/common/planning_util.cc new file mode 100644 index 00000000000..5b7ed9f3dc0 --- /dev/null +++ b/modules/planning/common/planning_util.cc @@ -0,0 +1,211 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/planning/common/planning_util.h" + +#include +#include +#include +#include + +#include "modules/common/math/integral.h" +#include "modules/common/math/linear_interpolation.h" +#include "modules/planning/math/hermite_spline.h" + +namespace apollo { +namespace planning { +namespace util { + +using common::PathPoint; +using common::SpeedPoint; +using common::TrajectoryPoint; + +PathPoint interpolate(const PathPoint &p0, const PathPoint &p1, + const double s) { + double s0 = p0.s(); + double s1 = p1.s(); + CHECK(s0 <= s && s <= s1); + + std::array gx0{{p0.theta(), p0.kappa()}}; + std::array gx1{{p1.theta(), p1.kappa()}}; + HermiteSpline geometry_spline(gx0, gx1, s0, s1); + auto func_cos_theta = [&geometry_spline](const double s) { + auto theta = geometry_spline.Evaluate(0, s); + return std::cos(theta); + }; + auto func_sin_theta = [&geometry_spline](const double s) { + auto theta = geometry_spline.Evaluate(0, s); + return std::sin(theta); + }; + + double x = + p0.x() + common::math::IntegrateByGaussLegendre(func_cos_theta, s0, s); + double y = + p0.y() + common::math::IntegrateByGaussLegendre(func_sin_theta, s0, s); + double theta = geometry_spline.Evaluate(0, s); + double kappa = geometry_spline.Evaluate(1, s); + double dkappa = geometry_spline.Evaluate(2, s); + double d2kappa = geometry_spline.Evaluate(3, s); + + PathPoint p; + p.set_x(x); + p.set_y(y); + p.set_theta(theta); + p.set_kappa(kappa); + p.set_dkappa(dkappa); + p.set_ddkappa(d2kappa); + p.set_s(s); + return p; +} + +PathPoint InterpolateUsingLinearApproximation(const PathPoint &p0, + const PathPoint &p1, + const double s) { + double s0 = p0.s(); + double s1 = p1.s(); + CHECK(s0 < s1); + + PathPoint path_point; + double weight = (s - s0) / (s1 - s0); + double x = (1 - weight) * p0.x() + weight * p1.x(); + double y = (1 - weight) * p0.y() + weight * p1.y(); + double cos_heading = + (1 - weight) * std::cos(p0.theta()) + weight * std::cos(p1.theta()); + double sin_heading = + (1 - weight) * std::sin(p0.theta()) + weight * std::sin(p1.theta()); + double theta = std::atan2(sin_heading, cos_heading); + double kappa = (1 - weight) * p0.kappa() + weight * p1.kappa(); + double dkappa = (1 - weight) * p0.dkappa() + weight * p1.dkappa(); + double ddkappa = (1 - weight) * p0.ddkappa() + weight * p1.ddkappa(); + path_point.set_x(x); + path_point.set_y(y); + path_point.set_theta(theta); + path_point.set_kappa(kappa); + path_point.set_dkappa(dkappa); + path_point.set_ddkappa(ddkappa); + path_point.set_s(s); + return path_point; +} + +TrajectoryPoint interpolate(const TrajectoryPoint &tp0, + const TrajectoryPoint &tp1, const double t) { + if (std::abs(tp0.path_point().s() - tp0.path_point().s()) < 1.0e-4) { + return tp1; + } + + const PathPoint &pp0 = tp0.path_point(); + const PathPoint &pp1 = tp1.path_point(); + double t0 = tp0.relative_time(); + double t1 = tp1.relative_time(); + + std::array dx0{{tp0.v(), tp0.a()}}; + std::array dx1{{tp1.v(), tp1.a()}}; + HermiteSpline dynamic_spline(dx0, dx1, t0, t1); + + double s0 = 0.0; + auto func_v = [&dynamic_spline](const double t) { + return dynamic_spline.Evaluate(0, t); + }; + double s1 = common::math::IntegrateByGaussLegendre(func_v, t0, t1); + double s = common::math::IntegrateByGaussLegendre(func_v, t0, t); + + if (std::abs(tp0.path_point().s() - s1) < 1.0e-4) { + return tp1; + } + + double v = dynamic_spline.Evaluate(0, t); + double a = dynamic_spline.Evaluate(1, t); + + std::array gx0{{pp0.theta(), pp0.kappa()}}; + std::array gx1{{pp1.theta(), pp1.kappa()}}; + HermiteSpline geometry_spline(gx0, gx1, s0, s1); + auto func_cos_theta = [&geometry_spline](const double s) { + auto theta = geometry_spline.Evaluate(0, s); + return std::cos(theta); + }; + auto func_sin_theta = [&geometry_spline](const double s) { + auto theta = geometry_spline.Evaluate(0, s); + return std::sin(theta); + }; + + double x = + pp0.x() + common::math::IntegrateByGaussLegendre(func_cos_theta, s0, s); + double y = + pp0.y() + common::math::IntegrateByGaussLegendre(func_sin_theta, s0, s); + double theta = geometry_spline.Evaluate(0, s); + double kappa = geometry_spline.Evaluate(1, s); + double dkappa = geometry_spline.Evaluate(2, s); + double d2kappa = geometry_spline.Evaluate(3, s); + + TrajectoryPoint tp; + tp.set_v(v); + tp.set_a(a); + + PathPoint *path_point = tp.mutable_path_point(); + path_point->set_x(x); + path_point->set_y(y); + path_point->set_theta(theta); + path_point->set_kappa(kappa); + path_point->set_dkappa(dkappa); + path_point->set_ddkappa(d2kappa); + path_point->set_s(s); + + // check the diff of computed s1 and p1.s()? + return tp; +} + +TrajectoryPoint InterpolateUsingLinearApproximation(const TrajectoryPoint &tp0, + const TrajectoryPoint &tp1, + const double t) { + const PathPoint &pp0 = tp0.path_point(); + const PathPoint &pp1 = tp1.path_point(); + double t0 = tp0.relative_time(); + double t1 = tp1.relative_time(); + + TrajectoryPoint tp; + tp.set_v(common::math::lerp(tp0.v(), t0, tp1.v(), t1, t)); + tp.set_a(common::math::lerp(tp0.a(), t0, tp1.a(), t1, t)); + tp.set_relative_time(t); + + PathPoint *path_point = tp.mutable_path_point(); + path_point->set_x(common::math::lerp(pp0.x(), t0, pp1.x(), t1, t)); + path_point->set_y(common::math::lerp(pp0.y(), t0, pp1.y(), t1, t)); + path_point->set_theta( + common::math::lerp(pp0.theta(), t0, pp1.theta(), t1, t)); + path_point->set_kappa( + common::math::lerp(pp0.kappa(), t0, pp1.kappa(), t1, t)); + path_point->set_dkappa( + common::math::lerp(pp0.dkappa(), t0, pp1.dkappa(), t1, t)); + path_point->set_ddkappa( + common::math::lerp(pp0.ddkappa(), t0, pp1.ddkappa(), t1, t)); + path_point->set_s(common::math::lerp(pp0.s(), t0, pp1.s(), t1, t)); + + return tp; +} + +common::SLPoint interpolate(const common::SLPoint &start, + const common::SLPoint &end, const double weight) { + common::SLPoint point; + double s = start.s() * (1 - weight) + end.s() * weight; + double l = start.l() * (1 - weight) + end.l() * weight; + point.set_s(s); + point.set_l(l); + return point; +} + +} // namespace util +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/planning_util.h b/modules/planning/common/planning_util.h new file mode 100644 index 00000000000..d77c14b254c --- /dev/null +++ b/modules/planning/common/planning_util.h @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file planning_util.h + */ + +#ifndef MODULES_PLANNING_UTIL_PLANNING_UTIL_H_ +#define MODULES_PLANNING_UTIL_PLANNING_UTIL_H_ + +#include + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/proto/planning.pb.h" + +/** + * @namespace apollo::common::util + * @brief apollo::common::util + */ +namespace apollo { +namespace planning { +namespace util { + +common::SLPoint interpolate(const common::SLPoint &start, + const common::SLPoint &end, const double weight); + +common::PathPoint interpolate(const common::PathPoint &p0, + const common::PathPoint &p1, const double s); + +common::PathPoint InterpolateUsingLinearApproximation( + const common::PathPoint &p0, const common::PathPoint &p1, const double s); + +common::TrajectoryPoint interpolate(const common::TrajectoryPoint &tp0, + const common::TrajectoryPoint &tp1, + const double t); + +common::TrajectoryPoint InterpolateUsingLinearApproximation( + const common::TrajectoryPoint &tp0, const common::TrajectoryPoint &tp1, + const double t); + +} // namespace util +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_UTIL_PLANNING_UTIL_H_ diff --git a/modules/planning/common/reference_line_info.cc b/modules/planning/common/reference_line_info.cc new file mode 100644 index 00000000000..a950fabcd6d --- /dev/null +++ b/modules/planning/common/reference_line_info.cc @@ -0,0 +1,180 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include "modules/planning/common/reference_line_info.h" + +#include +#include +#include +#include + +#include "modules/planning/proto/sl_boundary.pb.h" + +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/util/string_util.h" +#include "modules/common/util/util.h" +#include "modules/map/hdmap/hdmap_common.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/reference_line/reference_line_smoother.h" + +namespace apollo { +namespace planning { + +using apollo::common::math::Vec2d; +using apollo::common::SLPoint; +using apollo::common::TrajectoryPoint; +using apollo::common::VehicleConfigHelper; + +ReferenceLineInfo::ReferenceLineInfo( + const hdmap::PncMap* pnc_map, const ReferenceLine& reference_line, + const TrajectoryPoint& init_adc_point, + const ReferenceLineSmootherConfig& smoother_config) + : pnc_map_(pnc_map), + reference_line_(reference_line), + init_adc_point_(init_adc_point), + smoother_config_(smoother_config) {} + +bool ReferenceLineInfo::Init() { + const auto& param = VehicleConfigHelper::GetConfig().vehicle_param(); + const auto& path_point = init_adc_point_.path_point(); + Vec2d position(path_point.x(), path_point.y()); + Vec2d vec_to_center( + (param.left_edge_to_center() - param.right_edge_to_center()) / 2.0, + (param.front_edge_to_center() - param.back_edge_to_center()) / 2.0); + Vec2d center(position + vec_to_center.rotate(path_point.theta())); + common::math::Box2d box(center, path_point.theta(), param.length(), + param.width()); + if (!reference_line_.GetSLBoundary(box, &adc_sl_boundary_)) { + AERROR << "Failed to get ADC boundary from box: " << box.DebugString(); + return false; + } + return true; +} + +const SLBoundary& ReferenceLineInfo::AdcSlBoundary() const { + return adc_sl_boundary_; +} + +PathObstacle* ReferenceLineInfo::AddObstacle(const Obstacle* obstacle) { + auto path_obstacle = CreatePathObstacle(obstacle); + if (!path_obstacle) { + AERROR << "Failed to create path obstacle for " << obstacle->Id(); + return nullptr; + } + auto* ptr = path_obstacle.get(); + if (!path_decision_.AddPathObstacle(std::move(path_obstacle))) { + AERROR << "Failed to add path_obstacle " << obstacle->Id(); + return nullptr; + } + return ptr; +} + +bool ReferenceLineInfo::AddObstacles( + const std::vector& obstacles) { + for (const auto* obstacle : obstacles) { + if (!AddObstacle(obstacle)) { + AERROR << "Failed to add obstacle " << obstacle->Id(); + return false; + } + } + return true; +} + +std::unique_ptr ReferenceLineInfo::CreatePathObstacle( + const Obstacle* obstacle) { + auto path_obstacle = + std::unique_ptr(new PathObstacle(obstacle)); + if (!path_obstacle->Init(reference_line_, adc_sl_boundary_.end_s())) { + AERROR << "Failed to create perception sl boundary for obstacle " + << obstacle->Id(); + return nullptr; + } + return path_obstacle; +} + +const DiscretizedTrajectory& ReferenceLineInfo::trajectory() const { + return discretized_trajectory_; +} + +bool ReferenceLineInfo::IsStartFrom( + const ReferenceLineInfo& previous_reference_line_info) const { + if (reference_line_.reference_points().empty()) { + return false; + } + auto start_point = reference_line_.reference_points().front(); + const auto& prev_reference_line = + previous_reference_line_info.reference_line(); + common::SLPoint sl_point; + prev_reference_line.XYToSL(start_point, &sl_point); + return previous_reference_line_info.reference_line_.IsOnRoad(sl_point); +} + +const PathData& ReferenceLineInfo::path_data() const { return path_data_; } + +const SpeedData& ReferenceLineInfo::speed_data() const { return speed_data_; } + +PathData* ReferenceLineInfo::mutable_path_data() { return &path_data_; } + +SpeedData* ReferenceLineInfo::mutable_speed_data() { return &speed_data_; } + +bool ReferenceLineInfo::CombinePathAndSpeedProfile( + const double time_resolution, const double relative_time, + DiscretizedTrajectory* ptr_discretized_trajectory) { + CHECK(time_resolution > 0.0); + CHECK(ptr_discretized_trajectory != nullptr); + if (path_data_.discretized_path().NumOfPoints() == 0) { + AWARN << "path data is empty"; + return false; + } + for (double cur_rel_time = 0.0; cur_rel_time < speed_data_.TotalTime(); + cur_rel_time += time_resolution) { + common::SpeedPoint speed_point; + if (!speed_data_.EvaluateByTime(cur_rel_time, &speed_point)) { + AERROR << "Fail to get speed point with relative time " << cur_rel_time; + return false; + } + + if (speed_point.s() > path_data_.discretized_path().Length()) { + break; + } + common::PathPoint path_point; + if (!path_data_.GetPathPointWithPathS(speed_point.s(), &path_point)) { + AERROR << "Fail to get path data with s " << speed_point.s() + << "path total length " << path_data_.discretized_path().Length(); + return false; + } + + common::TrajectoryPoint trajectory_point; + trajectory_point.mutable_path_point()->CopyFrom(path_point); + trajectory_point.set_v(speed_point.v()); + trajectory_point.set_a(speed_point.a()); + trajectory_point.set_relative_time(speed_point.t() + relative_time); + ptr_discretized_trajectory->AppendTrajectoryPoint(trajectory_point); + } + return true; +} + +std::string ReferenceLineInfo::PathSpeedDebugString() const { + return apollo::common::util::StrCat("path_data:", path_data_.DebugString(), + "speed_data:", speed_data_.DebugString()); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/reference_line_info.h b/modules/planning/common/reference_line_info.h new file mode 100644 index 00000000000..6ee4fc91fc8 --- /dev/null +++ b/modules/planning/common/reference_line_info.h @@ -0,0 +1,131 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#ifndef MODULES_PLANNING_COMMON_REFERENCE_LINE_INFO_H_ +#define MODULES_PLANNING_COMMON_REFERENCE_LINE_INFO_H_ + +#include +#include +#include +#include +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/proto/planning.pb.h" +#include "modules/planning/proto/reference_line_smoother_config.pb.h" + +#include "modules/map/pnc_map/pnc_map.h" +#include "modules/planning/common/path/path_data.h" +#include "modules/planning/common/path_decision.h" +#include "modules/planning/common/speed/speed_data.h" +#include "modules/planning/common/trajectory/discretized_trajectory.h" + +namespace apollo { +namespace planning { + +class ReferenceLineInfo { + public: + explicit ReferenceLineInfo( + const hdmap::PncMap* pnc_map, const ReferenceLine& reference_line, + const common::TrajectoryPoint& init_adc_point, + const ReferenceLineSmootherConfig& smoother_config); + + bool Init(); + + bool AddObstacles(const std::vector& obstacles); + PathObstacle* AddObstacle(const Obstacle* obstacle); + + // FIXME(all) this interface is temp. solution to make the code work. + // remove this interface when ready. + PathDecision* path_decision() { return &path_decision_; } + const PathDecision& path_decision() const { return path_decision_; } + const ReferenceLine& reference_line() const { return reference_line_; } + + // TODO(all) remove this inteface when ready. + void SetTrajectory(const DiscretizedTrajectory& trajectory) { + discretized_trajectory_ = trajectory; + } + + const DiscretizedTrajectory& trajectory() const; + + double Cost() const { return cost_; } + + /** + * @brief check if current reference line is started from another reference + *line info line. The method is to check if the start point of current + *reference line is on previous reference line info. + * @return returns true if current reference line starts on previous reference + *line, otherwise false. + **/ + bool IsStartFrom(const ReferenceLineInfo& previous_reference_line_info) const; + + planning_internal::Debug* mutable_debug() { return &debug_; } + const planning_internal::Debug& debug() const { return debug_; } + LatencyStats* mutable_latency_stats() { return &latency_stats_; } + const LatencyStats& latency_stats() const { return latency_stats_; } + + const PathData& path_data() const; + const SpeedData& speed_data() const; + PathData* mutable_path_data(); + SpeedData* mutable_speed_data(); + // aggregate final result together by some configuration + bool CombinePathAndSpeedProfile( + const double time_resolution, const double relative_time, + DiscretizedTrajectory* discretized_trajectory); + + const SLBoundary& AdcSlBoundary() const; + std::string PathSpeedDebugString() const; + + const hdmap::PncMap* pnc_map() const { return pnc_map_; } + + private: + std::unique_ptr CreatePathObstacle(const Obstacle* obstacle); + bool InitPerceptionSLBoundary(PathObstacle* path_obstacle); + + const hdmap::PncMap* pnc_map_ = nullptr; + const ReferenceLine reference_line_; + const common::TrajectoryPoint init_adc_point_; + + /** + * @brief this is the number that measures the goodness of this reference + * line. The lower the better. + * TODO(all): implement trajectory cost calculation + */ + double cost_ = 0.0; + + PathDecision path_decision_; + + PathData path_data_; + SpeedData speed_data_; + + DiscretizedTrajectory discretized_trajectory_; + + SLBoundary adc_sl_boundary_; + const ReferenceLineSmootherConfig smoother_config_; + + planning_internal::Debug debug_; + LatencyStats latency_stats_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_REFERENCE_LINE_INFO_H_ diff --git a/modules/planning/common/speed/BUILD b/modules/planning/common/speed/BUILD new file mode 100644 index 00000000000..3b427bf9ca8 --- /dev/null +++ b/modules/planning/common/speed/BUILD @@ -0,0 +1,71 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "st_point", + srcs = [ + "st_point.cc", + ], + hdrs = [ + "st_point.h", + ], + deps = [ + "//external:gflags", + "//modules/common/math", + "//modules/planning/math:double", + ], +) + +cc_library( + name = "st_boundary", + srcs = [ + "st_boundary.cc", + ], + hdrs = [ + "st_boundary.h", + ], + deps = [ + ":st_point", + "//modules/common:log", + "//modules/planning/proto:planning_proto", + ], +) + +cc_test( + name = "st_boundary_test", + size = "small", + srcs = [ + "st_boundary_test.cc", + ], + deps = [ + ":st_boundary", + "//modules/common:log", + "//modules/common/time", + "//modules/common/util", + "@gtest//:main", + ], +) + +cc_library( + name = "speed_data", + srcs = [ + "speed_data.cc", + ], + hdrs = [ + "speed_data.h", + ], + deps = [ + ":st_point", + "//external:gflags", + "//modules/common/math", + "//modules/common/proto:pnc_point_proto", + "//modules/common/util", + "//modules/planning/common:planning_gflags", + "//modules/planning/common:planning_util", + "//modules/planning/math:double", + "//modules/planning/proto:planning_proto", + ], +) + +cpplint() diff --git a/modules/planning/common/speed/speed_data.cc b/modules/planning/common/speed/speed_data.cc new file mode 100644 index 00000000000..65cdb2ddc20 --- /dev/null +++ b/modules/planning/common/speed/speed_data.cc @@ -0,0 +1,112 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file speed_data.cc + **/ + +#include "modules/planning/common/speed/speed_data.h" + +#include +#include + +#include "glog/logging.h" +#include "modules/common/math/linear_interpolation.h" +#include "modules/common/util/string_util.h" +#include "modules/common/util/util.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/math/double.h" + +namespace apollo { +namespace planning { + +SpeedData::SpeedData(std::vector speed_points) + : speed_vector_(std::move(speed_points)) {} + +void SpeedData::AppendSpeedPoint(const double s, const double time, + const double v, const double a, + const double da) { + if (!speed_vector_.empty()) { + CHECK(speed_vector_.back().t() < time); + } + speed_vector_.push_back(common::util::MakeSpeedPoint(s, time, v, a, da)); +} + +const std::vector& SpeedData::speed_vector() const { + return speed_vector_; +} + +void SpeedData::set_speed_vector(std::vector speed_points) { + speed_vector_ = std::move(speed_points); +} + +bool SpeedData::EvaluateByTime(const double t, + common::SpeedPoint* const speed_point) const { + if (speed_vector_.size() < 2) { + return false; + } + if (!(speed_vector_.front().t() < t + 1.0e-6 && + t - 1.0e-6 < speed_vector_.back().t())) { + return false; + } + + auto comp = [](const common::SpeedPoint& sp, const double t) { + return sp.t() < t; + }; + + auto it_lower = + std::lower_bound(speed_vector_.begin(), speed_vector_.end(), t, comp); + if (it_lower == speed_vector_.end()) { + *speed_point = speed_vector_.back(); + } else if (it_lower == speed_vector_.begin()) { + *speed_point = speed_vector_.front(); + } else { + const auto& p0 = *(it_lower - 1); + const auto& p1 = *it_lower; + double t0 = p0.t(); + double t1 = p1.t(); + + double s = common::math::lerp(p0.s(), t0, p1.s(), t1, t); + double v = common::math::lerp(p0.v(), t0, p1.v(), t1, t); + double a = common::math::lerp(p0.a(), t0, p1.a(), t1, t); + double j = common::math::lerp(p0.da(), t0, p1.da(), t1, t); + + *speed_point = common::util::MakeSpeedPoint(s, t, v, a, j); + } + return true; +} + +double SpeedData::TotalTime() const { + if (speed_vector_.empty()) { + return 0.0; + } + return speed_vector_.back().t() - speed_vector_.front().t(); +} + +void SpeedData::Clear() { speed_vector_.clear(); } + +std::string SpeedData::DebugString() const { + const auto limit = + std::min(speed_vector_.size(), + static_cast(FLAGS_trajectory_point_num_for_debug)); + return apollo::common::util::StrCat( + "[\n", apollo::common::util::PrintDebugStringIter( + speed_vector_.begin(), speed_vector_.begin() + limit, ",\n"), + "]\n"); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/speed/speed_data.h b/modules/planning/common/speed/speed_data.h new file mode 100644 index 00000000000..aaacee8c023 --- /dev/null +++ b/modules/planning/common/speed/speed_data.h @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file speed_data.h + **/ +#ifndef MODULES_PLANNING_COMMON_SPEED_SPEED_DATA_H_ +#define MODULES_PLANNING_COMMON_SPEED_SPEED_DATA_H_ + +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" + +namespace apollo { +namespace planning { + +class SpeedData { + public: + SpeedData() = default; + + explicit SpeedData(std::vector speed_points); + + virtual ~SpeedData() = default; + + const std::vector& speed_vector() const; + + void set_speed_vector(std::vector speed_points); + + void AppendSpeedPoint(const double s, const double time, const double v, + const double a, const double da); + + bool EvaluateByTime(const double time, + common::SpeedPoint* const speed_point) const; + + double TotalTime() const; + + void Clear(); + + virtual std::string DebugString() const; + + private: + std::vector speed_vector_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_SPEED_SPEED_DATA_H_ diff --git a/modules/planning/common/speed/st_boundary.cc b/modules/planning/common/speed/st_boundary.cc new file mode 100644 index 00000000000..bdad1d275dc --- /dev/null +++ b/modules/planning/common/speed/st_boundary.cc @@ -0,0 +1,394 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include "modules/planning/common/speed/st_boundary.h" + +#include +#include + +#include "modules/common/log.h" +#include "modules/common/math/math_utils.h" + +namespace apollo { +namespace planning { + +using common::math::Vec2d; +using common::math::LineSegment2d; + +StBoundary::StBoundary( + const std::vector>& point_pairs) { + CHECK(IsValid(point_pairs)) << "The input point_pairs are NOT valid"; + + std::vector> reduced_pairs(point_pairs); + RemoveRedundantPoints(&reduced_pairs); + + for (const auto& item : reduced_pairs) { + // use same t for both points + const double t = item.first.t(); + lower_points_.emplace_back(item.first.s(), t); + upper_points_.emplace_back(item.second.s(), t); + } + + for (auto it = lower_points_.begin(); it != lower_points_.end(); ++it) { + points_.emplace_back(it->x(), it->y()); + } + for (auto rit = upper_points_.rbegin(); rit != upper_points_.rend(); ++rit) { + points_.emplace_back(rit->x(), rit->y()); + } + + BuildFromPoints(); + CalculateArea(); + + for (const auto& point : lower_points_) { + min_s_ = std::fmin(min_s_, point.s()); + } + for (const auto& point : upper_points_) { + max_s_ = std::fmax(max_s_, point.s()); + } + min_t_ = lower_points_.front().t(); + max_t_ = lower_points_.back().t(); +} + +bool StBoundary::IsPointNear(const common::math::LineSegment2d& seg, + const Vec2d& point, const double max_dist) { + return seg.DistanceSquareTo(point) < max_dist * max_dist; +} + +void StBoundary::RemoveRedundantPoints( + std::vector>* point_pairs) { + if (!point_pairs || point_pairs->size() <= 2) { + return; + } + + const double kMaxDist = 0.1; + size_t i = 0; + size_t j = 1; + + while (i < point_pairs->size() && j + 1 < point_pairs->size()) { + LineSegment2d lower_seg(point_pairs->at(i).first, + point_pairs->at(j + 1).first); + LineSegment2d upper_seg(point_pairs->at(i).second, + point_pairs->at(j + 1).second); + if (!IsPointNear(lower_seg, point_pairs->at(j).first, kMaxDist) || + !IsPointNear(upper_seg, point_pairs->at(j).second, kMaxDist)) { + ++i; + if (i != j) { + point_pairs->at(i) = point_pairs->at(j); + } + } + ++j; + } + point_pairs->at(++i) = point_pairs->back(); + point_pairs->resize(i + 1); +} + +bool StBoundary::IsValid( + const std::vector>& point_pairs) const { + if (point_pairs.size() < 2) { + AERROR << "point_pairs.size() must > 2. current point_pairs.size() = " + << point_pairs.size(); + return false; + } + + constexpr double kStBoundaryEpsilon = 1e-9; + constexpr double kMinDeltaT = 1e-6; + for (size_t i = 0; i < point_pairs.size(); ++i) { + const auto& curr_lower = point_pairs[i].first; + const auto& curr_upper = point_pairs[i].second; + if (curr_upper.s() < curr_lower.s()) { + AERROR << "s is not increasing"; + return false; + } + + if (std::fabs(curr_lower.t() - curr_upper.t()) > kStBoundaryEpsilon) { + AERROR << "t diff is larger in each STPoint pair"; + return false; + } + + if (i + 1 != point_pairs.size()) { + const auto& next_lower = point_pairs[i + 1].first; + const auto& next_upper = point_pairs[i + 1].second; + if (std::fmax(curr_lower.t(), curr_upper.t()) + kMinDeltaT >= + std::fmin(next_lower.t(), next_upper.t())) { + AERROR << "t is not increasing"; + AERROR << " curr_lower: " << curr_lower.DebugString(); + AERROR << " curr_upper: " << curr_upper.DebugString(); + AERROR << " next_lower: " << next_lower.DebugString(); + AERROR << " next_upper: " << next_upper.DebugString(); + return false; + } + } + } + return true; +} + +double StBoundary::Area() const { return area_; } + +void StBoundary::CalculateArea() { + area_ = 0.0; + for (size_t i = 0; i + 1 < lower_points_.size(); ++i) { + area_ += (upper_points_[i].y() - lower_points_[i].y()) * + (lower_points_[i + 1].x() - lower_points_[i].x()); + } + area_ *= 0.5; +} + +bool StBoundary::IsPointInBoundary(const STPoint& st_point) const { + if (st_point.t() <= min_t_ || st_point.t() >= max_t_) { + return false; + } + size_t left = 0; + size_t right = 0; + if (!GetIndexRange(lower_points_, st_point.t(), &left, &right)) { + AERROR << "fait to get index range."; + return false; + } + const double check_upper = common::math::CrossProd( + st_point, upper_points_[left], upper_points_[right]); + const double check_lower = common::math::CrossProd( + st_point, lower_points_[left], lower_points_[right]); + + return (check_upper * check_lower < 0); +} + +STPoint StBoundary::BottomLeftPoint() const { + DCHECK(!lower_points_.empty()) << "StBoundary has zero points."; + return lower_points_.front(); +} + +STPoint StBoundary::BottomRightPoint() const { + DCHECK(!lower_points_.empty()) << "StBoundary has zero points."; + return lower_points_.back(); +} + +StBoundary StBoundary::ExpandByS(const double s) const { + if (lower_points_.empty()) { + AERROR << "The current st_boundary has NO points."; + return StBoundary(); + } + std::vector> point_pairs; + for (size_t i = 0; i < lower_points_.size(); ++i) { + point_pairs.emplace_back( + STPoint(lower_points_[i].y() - s, lower_points_[i].x()), + STPoint(upper_points_[i].y() + s, upper_points_[i].x())); + } + return StBoundary(std::move(point_pairs)); +} + +StBoundary StBoundary::ExpandByT(const double t) const { + if (lower_points_.empty()) { + AERROR << "The current st_boundary has NO points."; + return StBoundary(); + } + + std::vector> point_pairs; + + const double left_delta_t = lower_points_[1].t() - lower_points_[0].t(); + const double lower_left_delta_s = lower_points_[1].s() - lower_points_[0].s(); + const double upper_left_delta_s = upper_points_[1].s() - upper_points_[0].s(); + + point_pairs.emplace_back( + STPoint(lower_points_[0].y() - t * lower_left_delta_s / left_delta_t, + lower_points_[0].x() - t), + STPoint(upper_points_[0].y() - t * upper_left_delta_s / left_delta_t, + upper_points_.front().x() - t)); + + const double kMinSEpsilon = 1e-3; + point_pairs.front().first.set_s( + std::fmin(point_pairs.front().second.s() - kMinSEpsilon, + point_pairs.front().first.s())); + + for (size_t i = 0; i < lower_points_.size(); ++i) { + point_pairs.emplace_back(lower_points_[i], upper_points_[i]); + } + + size_t length = lower_points_.size(); + DCHECK_GE(length, 2); + + const double right_delta_t = + lower_points_[length - 1].t() - lower_points_[length - 2].t(); + const double lower_right_delta_s = + lower_points_[length - 1].s() - lower_points_[length - 2].s(); + const double upper_right_delta_s = + upper_points_[length - 1].s() - upper_points_[length - 2].s(); + + point_pairs.emplace_back(STPoint(lower_points_.back().y() + + t * lower_right_delta_s / right_delta_t, + lower_points_.back().x() + t), + STPoint(upper_points_.back().y() + + t * upper_right_delta_s / right_delta_t, + upper_points_.back().x() + t)); + point_pairs.back().second.set_s( + std::fmax(point_pairs.back().second.s(), + point_pairs.back().first.s() + kMinSEpsilon)); + + return StBoundary(std::move(point_pairs)); +} + +StBoundary::BoundaryType StBoundary::boundary_type() const { + return boundary_type_; +} +void StBoundary::SetBoundaryType(const BoundaryType& boundary_type) { + boundary_type_ = boundary_type; +} + +const std::string& StBoundary::id() const { return id_; } + +void StBoundary::SetId(const std::string& id) { id_ = id; } + +double StBoundary::characteristic_length() const { + return characteristic_length_; +} + +void StBoundary::SetCharacteristicLength(const double characteristic_length) { + characteristic_length_ = characteristic_length; +} + +bool StBoundary::GetUnblockSRange(const double curr_time, double* s_upper, + double* s_lower) const { + CHECK_NOTNULL(s_upper); + CHECK_NOTNULL(s_lower); + + *s_upper = s_high_limit_; + *s_lower = 0.0; + if (curr_time < min_t_ || curr_time > max_t_) { + return true; + } + + size_t left = 0; + size_t right = 0; + if (!GetIndexRange(lower_points_, curr_time, &left, &right)) { + AERROR << "Fail to get index range."; + return false; + } + const double r = (curr_time - upper_points_[left].t()) / + (upper_points_.at(right).t() - upper_points_.at(left).t()); + + double upper_cross_s = + upper_points_[left].s() + + r * (upper_points_[right].s() - upper_points_[left].s()); + double lower_cross_s = + lower_points_[left].s() + + r * (lower_points_[right].s() - lower_points_[left].s()); + + if (boundary_type_ == BoundaryType::STOP || + boundary_type_ == BoundaryType::YIELD || + boundary_type_ == BoundaryType::FOLLOW) { + *s_upper = std::fmin(*s_upper, lower_cross_s); + } else if (boundary_type_ == BoundaryType::OVERTAKE) { + *s_lower = std::fmax(*s_lower, upper_cross_s); + } else { + AERROR << "boundary_type is not supported. boundary_type: " + << static_cast(boundary_type_); + return false; + } + return true; +} + +bool StBoundary::GetBoundarySRange(const double curr_time, double* s_upper, + double* s_lower) const { + CHECK_NOTNULL(s_upper); + CHECK_NOTNULL(s_lower); + if (curr_time < min_t_ || curr_time > max_t_) { + return false; + } + + size_t left = 0; + size_t right = 0; + if (!GetIndexRange(lower_points_, curr_time, &left, &right)) { + AERROR << "Fail to get index range."; + return false; + } + const double r = (curr_time - upper_points_[left].t()) / + (upper_points_[right].t() - upper_points_[left].t()); + + *s_upper = upper_points_[left].s() + + r * (upper_points_[right].s() - upper_points_[left].s()); + *s_lower = lower_points_[left].s() + + r * (lower_points_[right].s() - lower_points_[left].s()); + + *s_upper = std::fmin(*s_upper, s_high_limit_); + *s_lower = std::fmax(*s_lower, 0.0); + return true; +} + +double StBoundary::DistanceS(const STPoint& st_point) const { + double s_upper; + double s_lower; + if (GetBoundarySRange(st_point.t(), &s_upper, &s_lower)) { + constexpr double kMaxDistance = 1.0e10; + return kMaxDistance; + } + if (st_point.s() < s_lower) { + return s_lower - st_point.s(); + } else if (st_point.s() > s_upper) { + return st_point.s() - s_upper; + } else { + return 0.0; + } +} + +double StBoundary::min_s() const { return min_s_; } +double StBoundary::min_t() const { return min_t_; } +double StBoundary::max_s() const { return max_s_; } +double StBoundary::max_t() const { return max_t_; } + +bool StBoundary::GetIndexRange(const std::vector& points, + const double t, size_t* left, + size_t* right) const { + CHECK_NOTNULL(left); + CHECK_NOTNULL(right); + if (t < points.front().t() || t > points.back().t()) { + AERROR << "t is out of range. t = " << t; + return false; + } + auto comp = [](const STPoint& p, const double t) { return p.t() < t; }; + auto first_ge = std::lower_bound(points.begin(), points.end(), t, comp); + size_t index = std::distance(points.begin(), first_ge); + if (index == 0) { + *left = *right = 0; + } else if (first_ge == points.end()) { + *left = *right = points.size() - 1; + } else { + *left = index - 1; + *right = index; + } + return true; +} + +StBoundary StBoundary::GenerateStBoundary( + const std::vector& lower_points, + const std::vector& upper_points) { + if (lower_points.size() != upper_points.size() || lower_points.size() < 2) { + AERROR << "Fail to generate StBoundary because input points are not valid."; + return StBoundary(); + } + + std::vector> point_pairs; + for (size_t i = 0; i < lower_points.size() && i < upper_points.size(); ++i) { + point_pairs.emplace_back( + STPoint(lower_points.at(i).s(), lower_points.at(i).t()), + STPoint(upper_points.at(i).s(), upper_points.at(i).t())); + } + return StBoundary(point_pairs); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/speed/st_boundary.h b/modules/planning/common/speed/st_boundary.h new file mode 100644 index 00000000000..62a9444840b --- /dev/null +++ b/modules/planning/common/speed/st_boundary.h @@ -0,0 +1,138 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#ifndef MODULES_PLANNING_TASKS_ST_GRAPH_ST_GRAPH_BOUNDARY_H_ +#define MODULES_PLANNING_TASKS_ST_GRAPH_ST_GRAPH_BOUNDARY_H_ + +#include +#include +#include +#include +#include + +#include "gtest/gtest_prod.h" + +#include "modules/planning/proto/planning.pb.h" + +#include "modules/common/math/box2d.h" +#include "modules/common/math/polygon2d.h" +#include "modules/common/math/vec2d.h" +#include "modules/planning/common/speed/st_point.h" + +namespace apollo { +namespace planning { + +class StBoundary : public common::math::Polygon2d { + public: + StBoundary() = default; + + explicit StBoundary( + const std::vector>& point_pairs); + + explicit StBoundary(const common::math::Box2d& box) = delete; + explicit StBoundary(std::vector points) = delete; + + ~StBoundary() = default; + + // if you need to add boundary type, make sure you modify + // GetUnblockSRange accordingly. + enum class BoundaryType { + UNKNOWN, + STOP, + FOLLOW, + YIELD, + OVERTAKE, + }; + + bool IsEmpty() const { return lower_points_.empty(); } + bool IsPointInBoundary(const STPoint& st_point) const; + + STPoint BottomLeftPoint() const; + STPoint BottomRightPoint() const; + + StBoundary ExpandByS(const double s) const; + StBoundary ExpandByT(const double t) const; + + BoundaryType boundary_type() const; + const std::string& id() const; + double characteristic_length() const; + + void SetId(const std::string& id); + void SetBoundaryType(const BoundaryType& boundary_type); + void SetCharacteristicLength(const double characteristic_length); + + bool GetUnblockSRange(const double curr_time, double* s_upper, + double* s_lower) const; + + bool GetBoundarySRange(const double curr_time, double* s_upper, + double* s_lower) const; + + double min_s() const; + double min_t() const; + double max_s() const; + double max_t() const; + + double Area() const; + + double DistanceS(const STPoint& st_point) const; + std::vector upper_points() const { return upper_points_; } + std::vector lower_points() const { return lower_points_; } + + static StBoundary GenerateStBoundary( + const std::vector& lower_points, + const std::vector& upper_points); + + private: + bool IsValid( + const std::vector>& point_pairs) const; + + bool IsPointNear(const common::math::LineSegment2d& seg, + const common::math::Vec2d& point, const double max_dist); + + FRIEND_TEST(StBoundaryTest, remove_redundant_points); + void RemoveRedundantPoints( + std::vector>* point_pairs); + void CalculateArea(); + + FRIEND_TEST(StBoundaryTest, get_index_range); + bool GetIndexRange(const std::vector& points, const double t, + size_t* left, size_t* right) const; + + private: + BoundaryType boundary_type_ = BoundaryType::UNKNOWN; + + std::vector upper_points_; + std::vector lower_points_; + + double area_ = 0.0; + + std::string id_; + double characteristic_length_ = 1.0; + double s_high_limit_ = 200.0; + double min_s_ = std::numeric_limits::max(); + double max_s_ = std::numeric_limits::lowest(); + double min_t_ = std::numeric_limits::max(); + double max_t_ = std::numeric_limits::lowest(); +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_ST_GRAPH_ST_GRAPH_BOUNDARY_H_ diff --git a/modules/planning/common/speed/st_boundary_test.cc b/modules/planning/common/speed/st_boundary_test.cc new file mode 100644 index 00000000000..c32426edbb8 --- /dev/null +++ b/modules/planning/common/speed/st_boundary_test.cc @@ -0,0 +1,161 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/planning/common/speed/st_boundary.h" + +#include +#include + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include "modules/common/log.h" + +namespace apollo { +namespace planning { + +using Vec2d = apollo::common::math::Vec2d; +using Box2d = apollo::common::math::Box2d; + +TEST(StBoundaryTest, basic_test) { + std::vector upper_points; + std::vector lower_points; + + std::vector> point_pairs; + + lower_points.emplace_back(0.0, 0.0); + lower_points.emplace_back(0.0, 10.0); + upper_points.emplace_back(5.0, 0.0); + upper_points.emplace_back(5.0, 10.0); + + point_pairs.emplace_back(lower_points[0], upper_points[0]); + point_pairs.emplace_back(lower_points[1], upper_points[1]); + + StBoundary boundary(point_pairs); + + EXPECT_EQ(boundary.id(), ""); + EXPECT_EQ(boundary.boundary_type(), StBoundary::BoundaryType::UNKNOWN); + EXPECT_FLOAT_EQ(0.0, boundary.min_s()); + EXPECT_FLOAT_EQ(5.0, boundary.max_s()); + EXPECT_FLOAT_EQ(0.0, boundary.min_t()); + EXPECT_FLOAT_EQ(10.0, boundary.max_t()); +} + +TEST(StBoundaryTest, boundary_range) { + std::vector upper_points; + std::vector lower_points; + + std::vector> point_pairs; + + lower_points.emplace_back(1.0, 0.0); + lower_points.emplace_back(1.0, 10.0); + upper_points.emplace_back(5.0, 0.0); + upper_points.emplace_back(5.0, 10.0); + + point_pairs.emplace_back(lower_points[0], upper_points[0]); + point_pairs.emplace_back(lower_points[1], upper_points[1]); + + StBoundary boundary(point_pairs); + + boundary.SetBoundaryType(StBoundary::BoundaryType::YIELD); + double t = -10.0; + const double dt = 0.01; + while (t < 10.0) { + double low = 0.0; + double high = 0.0; + if (t < 0.0) { + EXPECT_TRUE(boundary.GetUnblockSRange(t, &high, &low)); + EXPECT_DOUBLE_EQ(low, 0.0); + EXPECT_DOUBLE_EQ(high, 200.0); + EXPECT_FALSE(boundary.GetBoundarySRange(t, &high, &low)); + } else { + EXPECT_TRUE(boundary.GetUnblockSRange(t, &high, &low)); + EXPECT_DOUBLE_EQ(low, 0.0); + EXPECT_DOUBLE_EQ(high, 1.0); + + EXPECT_TRUE(boundary.GetBoundarySRange(t, &high, &low)); + EXPECT_DOUBLE_EQ(low, 1.0); + EXPECT_DOUBLE_EQ(high, 5.0); + } + t += dt; + } +} + +TEST(StBoundaryTest, get_index_range) { + std::vector upper_points; + std::vector lower_points; + + std::vector> point_pairs; + + lower_points.emplace_back(43.000164837720789, -517957.08587679861); + lower_points.emplace_back(46.100164825451913, -517955.58587660792); + + upper_points.emplace_back(52.200164801309178, -517957.08587679861); + upper_points.emplace_back(55.6001647283625, -517955.58587660792); + + point_pairs.emplace_back(lower_points[0], upper_points[0]); + point_pairs.emplace_back(lower_points[1], upper_points[1]); + + StBoundary boundary(point_pairs); + + size_t left = 0; + size_t right = 0; + + EXPECT_TRUE( + boundary.GetIndexRange(lower_points, -517957.08587679861, &left, &right)); + EXPECT_EQ(left, 0); + EXPECT_EQ(right, 0); + + EXPECT_TRUE( + boundary.GetIndexRange(lower_points, -517955.58587660792, &left, &right)); + EXPECT_EQ(left, 0); + EXPECT_EQ(right, 1); + + EXPECT_TRUE( + boundary.GetIndexRange(lower_points, -517955.58587660792, &left, &right)); + EXPECT_EQ(left, 0); + EXPECT_EQ(right, 1); + + EXPECT_FALSE(boundary.GetIndexRange(lower_points, 0.0, &left, &right)); +} + +TEST(StBoundaryTest, remove_redundant_points) { + std::vector> points; + points.emplace_back(STPoint(0.0, 0.0), STPoint(1.0, 0.0)); + points.emplace_back(STPoint(0.1, 0.2), STPoint(1.1, 0.2)); + points.emplace_back(STPoint(0.2, 0.3), STPoint(1.2, 0.3)); + points.emplace_back(STPoint(0.3, 0.4), STPoint(1.3, 0.4)); + points.emplace_back(STPoint(0.4, 0.5), STPoint(1.4, 0.5)); + + EXPECT_EQ(points.size(), 5); + + StBoundary st_boundary; + st_boundary.RemoveRedundantPoints(&points); + + EXPECT_EQ(points.size(), 2); + EXPECT_DOUBLE_EQ(points[0].first.s(), 0.0); + EXPECT_DOUBLE_EQ(points[0].first.t(), 0.0); + EXPECT_DOUBLE_EQ(points[0].second.s(), 1.0); + EXPECT_DOUBLE_EQ(points[0].second.t(), 0.0); + + EXPECT_DOUBLE_EQ(points[1].first.s(), 0.4); + EXPECT_DOUBLE_EQ(points[1].first.t(), 0.5); + EXPECT_DOUBLE_EQ(points[1].second.s(), 1.4); + EXPECT_DOUBLE_EQ(points[1].second.t(), 0.5); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/speed/st_point.cc b/modules/planning/common/speed/st_point.cc new file mode 100644 index 00000000000..6abecb93b45 --- /dev/null +++ b/modules/planning/common/speed/st_point.cc @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file st_point.cpp + **/ + +#include "modules/planning/common/speed/st_point.h" + +#include + +#include "modules/common/util/string_util.h" + +namespace apollo { +namespace planning { + +STPoint::STPoint(const double s, const double t) : Vec2d(t, s) {} + +STPoint::STPoint(const common::math::Vec2d& vec2d_point) : Vec2d(vec2d_point) {} + +double STPoint::s() const { return y_; } + +double STPoint::t() const { return x_; } + +void STPoint::set_s(const double s) { return set_y(s); } + +void STPoint::set_t(const double t) { return set_x(t); } + +std::string STPoint::DebugString() const { + return apollo::common::util::StrCat("{ \"s\" : ", std::setprecision(6), s(), + ", " + "\"t\" : ", + std::setprecision(6), t(), " }"); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/speed/st_point.h b/modules/planning/common/speed/st_point.h new file mode 100644 index 00000000000..04357c9a8b2 --- /dev/null +++ b/modules/planning/common/speed/st_point.h @@ -0,0 +1,47 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file st_point.h + **/ + +#ifndef MODULES_PLANNING_COMMON_SPEED_ST_POINT_H_ +#define MODULES_PLANNING_COMMON_SPEED_ST_POINT_H_ + +#include + +#include "modules/common/math/vec2d.h" + +namespace apollo { +namespace planning { + +class STPoint : public common::math::Vec2d { + public: + STPoint() = default; + STPoint(const double s, const double t); + explicit STPoint(const common::math::Vec2d& vec2d_point); + + double s() const; + double t() const; + void set_s(const double s); + void set_t(const double t); + std::string DebugString() const; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_SPEED_ST_POINT_H_ diff --git a/modules/planning/common/speed_limit.cc b/modules/planning/common/speed_limit.cc new file mode 100644 index 00000000000..8e85c71a86e --- /dev/null +++ b/modules/planning/common/speed_limit.cc @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file speed_limit.cc + **/ + +#include "modules/planning/common/speed_limit.h" + +#include + +#include "modules/common/log.h" + +namespace apollo { +namespace planning { + +void SpeedLimit::AppendSpeedLimit(const double s, const double v) { + if (!speed_limit_points_.empty()) { + DCHECK_GE(s, speed_limit_points_.back().first); + } + speed_limit_points_.emplace_back(s, v); +} + +const std::vector>& SpeedLimit::speed_limit_points() + const { + return speed_limit_points_; +} + +double SpeedLimit::GetSpeedLimitByS(const double s) const { + DCHECK_GE(speed_limit_points_.size(), 2); + DCHECK_GE(s, speed_limit_points_.front().first); + + auto compare_s = [](const std::pair& point, const double s) { + return point.first < s; + }; + + auto it_lower = std::lower_bound(speed_limit_points_.begin(), + speed_limit_points_.end(), s, compare_s); + + if (it_lower == speed_limit_points_.end()) { + return (it_lower - 1)->second; + } + return it_lower->second; +} + +void SpeedLimit::Clear() { speed_limit_points_.clear(); } + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/speed_limit.h b/modules/planning/common/speed_limit.h new file mode 100644 index 00000000000..4481ae74285 --- /dev/null +++ b/modules/planning/common/speed_limit.h @@ -0,0 +1,52 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file speed_limit.h + **/ + +#ifndef MODULES_PLANNING_COMMON_SPEED_LIMIT_H_ +#define MODULES_PLANNING_COMMON_SPEED_LIMIT_H_ + +#include +#include + +namespace apollo { +namespace planning { + +class SpeedLimit { + public: + SpeedLimit() = default; + + void AppendSpeedLimit(const double s, const double v); + + const std::vector>& speed_limit_points() const; + + double GetSpeedLimitByS(const double s) const; + + void Clear(); + + private: + // use a vector to represent speed limit + // the first number is s, the second number is v + // It means at distance s from the start point, the speed limit is v. + std::vector> speed_limit_points_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_SPEED_LIMIT_H_ diff --git a/modules/planning/common/speed_limit_test.cc b/modules/planning/common/speed_limit_test.cc new file mode 100644 index 00000000000..39eebb94825 --- /dev/null +++ b/modules/planning/common/speed_limit_test.cc @@ -0,0 +1,75 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include "modules/planning/common/speed_limit.h" + +#include "gtest/gtest.h" + +namespace apollo { +namespace planning { + +class SpeedLimitTest : public ::testing::Test { + public: + virtual void SetUp() { + speed_limit_.Clear(); + for (int i = 0; i < 100; ++i) { + std::pair sp; + sp.first = i * 1.0; + sp.second = (i % 2 == 0) ? 5.0 : 10.0; + speed_limit_.AppendSpeedLimit(sp.first, sp.second); + } + } + + protected: + SpeedLimit speed_limit_; +}; + +TEST_F(SpeedLimitTest, SimpleSpeedLimitCreation) { + SpeedLimit simple_speed_limit; + EXPECT_TRUE(simple_speed_limit.speed_limit_points().empty()); + EXPECT_EQ(speed_limit_.speed_limit_points().size(), 100); +} + +TEST_F(SpeedLimitTest, GetSpeedLimitByS) { + EXPECT_EQ(speed_limit_.speed_limit_points().size(), 100); + double s = 0.0; + const double ds = 0.01; + while (s < 99.0) { + double v_limit = speed_limit_.GetSpeedLimitByS(s); + + auto it_lower = std::lower_bound( + speed_limit_.speed_limit_points().begin(), + speed_limit_.speed_limit_points().end(), s, + [](const std::pair& point, const double curr_s) { + return point.first < curr_s; + }); + + EXPECT_DOUBLE_EQ(v_limit, it_lower->second); + s += ds; + } + s = -1.0e-12; + EXPECT_DEATH( + speed_limit_.GetSpeedLimitByS(s), + ".*Check failed: s >= speed_limit_points_.front\\(\\).first \\(-1e-12 " + "vs. 0\\).*"); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/testdata/sample_prediction.pb.txt b/modules/planning/common/testdata/sample_prediction.pb.txt new file mode 100755 index 00000000000..e18cb3c6ad4 --- /dev/null +++ b/modules/planning/common/testdata/sample_prediction.pb.txt @@ -0,0 +1,2257 @@ +header { + timestamp_sec: 1487029724.22 + module_name: "prediction" + sequence_num: 9338 +} +prediction_obstacle { + perception_obstacle { + id: 2156 + position { + x: 76.684071405 + y: 350.481852505 + z: -31.0289821625 + } + theta: 0.00531211859358 + velocity { + x: 15.4147279869 + y: 0.0818856333882 + z: 0 + } + length: 3.83247698046 + width: 1.73200099013 + height: 0.97838973999 + polygon_point { + x: 74.7661818945 + y: 350.729858183 + z: -31.4903392957 + } + polygon_point { + x: 74.7705557298 + y: 350.878567223 + z: -31.4870209421 + } + polygon_point { + x: 74.7892310931 + y: 351.154926098 + z: -31.4809176728 + } + polygon_point { + x: 74.8423714187 + y: 351.222344283 + z: -31.4797213457 + } + polygon_point { + x: 74.9556032202 + y: 351.339248644 + z: -31.4777738693 + } + polygon_point { + x: 77.2417986479 + y: 351.253572786 + z: -31.4934682968 + } + polygon_point { + x: 78.6032940354 + y: 349.80127279 + z: -31.5343316482 + } + polygon_point { + x: 77.3479908927 + y: 349.632130914 + z: -31.5305764832 + } + polygon_point { + x: 75.5386184113 + y: 349.672229708 + z: -31.5187785766 + } + polygon_point { + x: 75.1106585965 + y: 349.705841548 + z: -31.5154454252 + } + polygon_point { + x: 75.0445144449 + y: 349.754651171 + z: -31.513949303 + } + polygon_point { + x: 74.9560768384 + y: 349.82884175 + z: -31.5117480734 + } + polygon_point { + x: 74.8738661334 + y: 350.015812945 + z: -31.5070477344 + } + polygon_point { + x: 74.8006395036 + y: 350.212135682 + z: -31.5021911669 + } + polygon_point { + x: 74.7880923931 + y: 350.268361739 + z: -31.5008509986 + } + polygon_point { + x: 74.7831980344 + y: 350.326015688 + z: -31.4995247997 + } + tracking_time: 0 + type: VEHICLE + timestamp: 0 + } + timestamp: 1171064942.14 + predicted_period: 5000 + trajectory { + probability: 0.614424703209 + trajectory_point { + path_point { + x: 76.684071405 + y: 350.481852505 + z: 0 + theta: 0.0458336026348 + } + v: 16.0554933998 + relative_time: 0 + } + trajectory_point { + path_point { + x: 79.9763273466 + y: 350.632854208 + z: 0 + theta: 0.044671512696 + } + v: 16.0554933998 + relative_time: 204.982718252 + } + trajectory_point { + path_point { + x: 83.2581699369 + y: 350.779556678 + z: 0 + theta: 0.0406899191962 + } + v: 16.0554933998 + relative_time: 409.965436503 + } + trajectory_point { + path_point { + x: 86.5502100359 + y: 350.9135835 + z: 0 + theta: 0.0358582349047 + } + v: 16.0554933998 + relative_time: 614.948154755 + } + trajectory_point { + path_point { + x: 89.8387081059 + y: 351.031553803 + z: 0 + theta: 0.0296496178721 + } + v: 16.0554933998 + relative_time: 819.930873006 + } + trajectory_point { + path_point { + x: 93.1226621315 + y: 351.128950327 + z: 0 + theta: 0.0253720803837 + } + v: 16.0554933998 + relative_time: 1024.91359126 + } + trajectory_point { + path_point { + x: 96.4163347306 + y: 351.212535589 + z: 0 + theta: 0.0211521131638 + } + v: 16.0554933998 + relative_time: 1229.89630951 + } + trajectory_point { + path_point { + x: 99.7004392921 + y: 351.282011703 + z: 0 + theta: 0.0126472478687 + } + v: 16.0554933998 + relative_time: 1434.87902776 + } + trajectory_point { + path_point { + x: 102.985718562 + y: 351.323563659 + z: 0 + theta: 0.00759770462486 + } + v: 16.0554933998 + relative_time: 1639.86174601 + } + trajectory_point { + path_point { + x: 106.276122729 + y: 351.348563659 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 1844.84446426 + } + trajectory_point { + path_point { + x: 109.567002963 + y: 351.348563659 + z: 0 + theta: -0.00916815429826 + } + v: 16.0554933998 + relative_time: 2049.82718252 + } + trajectory_point { + path_point { + x: 112.852332534 + y: 351.318442407 + z: 0 + theta: -0.0470680920754 + } + v: 16.0554933998 + relative_time: 2254.80990077 + } + trajectory_point { + path_point { + x: 116.132483638 + y: 351.163937839 + z: 0 + theta: -0.0332118783019 + } + v: 16.0554933998 + relative_time: 2459.79261902 + } + trajectory_point { + path_point { + x: 119.422118944 + y: 351.054642683 + z: 0 + theta: -0.0511368476262 + } + v: 16.0554933998 + relative_time: 2664.77533727 + } + trajectory_point { + path_point { + x: 122.701899278 + y: 350.886778711 + z: 0 + theta: -0.0734812793219 + } + v: 16.0554933998 + relative_time: 2869.75805552 + } + trajectory_point { + path_point { + x: 125.982330428 + y: 350.645293644 + z: 0 + theta: -0.0739417010046 + } + v: 16.0554933998 + relative_time: 3074.74077377 + } + trajectory_point { + path_point { + x: 129.263667956 + y: 350.402222817 + z: 0 + theta: -0.0828690634086 + } + v: 16.0554933998 + relative_time: 3279.72349202 + } + trajectory_point { + path_point { + x: 132.537990026 + y: 350.13025998 + z: 0 + theta: -0.077411519016 + } + v: 16.0554933998 + relative_time: 3484.70621028 + } + trajectory_point { + path_point { + x: 135.817210975 + y: 349.875902219 + z: 0 + theta: -0.0992345348642 + } + v: 16.0554933998 + relative_time: 3689.68892853 + } + trajectory_point { + path_point { + x: 139.091700103 + y: 349.549888973 + z: 0 + theta: -0.107437089914 + } + v: 16.0554933998 + relative_time: 3894.67164678 + } + trajectory_point { + path_point { + x: 142.363085912 + y: 349.197062228 + z: 0 + theta: -0.10728362916 + } + v: 16.0554933998 + relative_time: 4099.65436503 + } + trajectory_point { + path_point { + x: 145.635004973 + y: 348.844685914 + z: 0 + theta: -0.0985807104789 + } + v: 16.0554933998 + relative_time: 4304.63708328 + } + trajectory_point { + path_point { + x: 148.904821139 + y: 348.521296852 + z: 0 + theta: -0.120690993209 + } + v: 16.0554933998 + relative_time: 4509.61980153 + } + trajectory_point { + path_point { + x: 152.162447596 + y: 348.126210496 + z: 0 + theta: -0.158746317869 + } + v: 16.0554933998 + relative_time: 4714.60251978 + } + trajectory_point { + path_point { + x: 155.406887087 + y: 347.606797186 + z: 0 + theta: -0.159249325762 + } + v: 16.0554933998 + relative_time: 4919.58523804 + } + trajectory_point { + path_point { + x: 158.660640539 + y: 347.084214025 + z: 0 + theta: -0.159477113021 + } + v: 16.0554933998 + relative_time: 5124.56795629 + } + trajectory_point { + path_point { + x: 161.904711356 + y: 346.562427939 + z: 0 + theta: -0.159600130971 + } + v: 16.0554933998 + relative_time: 5329.55067454 + } + trajectory_point { + path_point { + x: 165.156798525 + y: 346.038942055 + z: 0 + theta: -0.182266201944 + } + v: 16.0554933998 + relative_time: 5534.53339279 + } + trajectory_point { + path_point { + x: 168.382646884 + y: 345.444380327 + z: 0 + theta: -0.200387582613 + } + v: 16.0554933998 + relative_time: 5739.51611104 + } + trajectory_point { + path_point { + x: 171.607734153 + y: 344.789321318 + z: 0 + theta: -0.193610596859 + } + v: 16.0554933998 + relative_time: 5944.49882929 + } + trajectory_point { + path_point { + x: 174.838088602 + y: 344.155956713 + z: 0 + theta: -0.197605542572 + } + v: 16.0554933998 + relative_time: 6149.48154755 + } + trajectory_point { + path_point { + x: 178.06965051 + y: 343.508938587 + z: 0 + theta: -0.198061056362 + } + v: 16.0554933998 + relative_time: 6354.4642658 + } + trajectory_point { + path_point { + x: 181.295336603 + y: 342.861568521 + z: 0 + theta: -0.192902561914 + } + v: 16.0554933998 + relative_time: 6559.44698405 + } + trajectory_point { + path_point { + x: 184.516230085 + y: 342.23242674 + z: 0 + theta: -0.213887284718 + } + v: 16.0554933998 + relative_time: 6764.4297023 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 6969.41242055 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 7174.3951388 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 7379.37785705 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 7584.36057531 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 7789.34329356 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 7994.32601181 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 8199.30873006 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 8404.29144831 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 8609.27416656 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 8814.25688482 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 9019.23960307 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 9224.22232132 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 9429.20503957 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 9634.18775782 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 9839.17047607 + } + trajectory_point { + path_point { + x: 186.259371951 + y: 341.853799387 + z: 0 + theta: 0 + } + v: 16.0554933998 + relative_time: 10044.1531943 + } + } + trajectory { + probability: 0.475516037364 + trajectory_point { + path_point { + x: 76.7484596524 + y: 350.485806953 + z: 0 + theta: 0.00510953136209 + } + v: 16.0554933998 + relative_time: 0 + } + trajectory_point { + path_point { + x: 80.0448584983 + y: 350.502650153 + z: 0 + theta: 0.00863878750761 + } + v: 16.0554933998 + relative_time: 204.982718252 + } + trajectory_point { + path_point { + x: 83.328376324 + y: 350.531016471 + z: 0 + theta: 0.00325845671163 + } + v: 16.0554933998 + relative_time: 409.965436503 + } + trajectory_point { + path_point { + x: 86.6223823215 + y: 350.541749885 + z: 0 + theta: 0.000739971138443 + } + v: 16.0554933998 + relative_time: 614.948154755 + } + trajectory_point { + path_point { + x: 89.9159596206 + y: 350.544187038 + z: 0 + theta: -0.00547160020688 + } + v: 16.0554933998 + relative_time: 819.930873006 + } + trajectory_point { + path_point { + x: 93.2601142537 + y: 350.525888978 + z: 0 + theta: -0.00819657709712 + } + v: 16.0554933998 + relative_time: 1024.91359126 + } + trajectory_point { + path_point { + x: 96.6012191897 + y: 350.49850274 + z: 0 + theta: -0.0195015131072 + } + v: 16.0554933998 + relative_time: 1229.89630951 + } + trajectory_point { + path_point { + x: 99.8915793269 + y: 350.434327603 + z: 0 + theta: -0.0270330212547 + } + v: 16.0554933998 + relative_time: 1434.87902776 + } + trajectory_point { + path_point { + x: 103.181803772 + y: 350.345361223 + z: 0 + theta: -0.0348593626197 + } + v: 16.0554933998 + relative_time: 1639.86174601 + } + trajectory_point { + path_point { + x: 106.427384838 + y: 350.232176486 + z: 0 + theta: -0.0436220678043 + } + v: 16.0554933998 + relative_time: 1844.84446426 + } + trajectory_point { + path_point { + x: 109.841794913 + y: 350.083138312 + z: 0 + theta: -0.0575881248962 + } + v: 16.0554933998 + relative_time: 2049.82718252 + } + trajectory_point { + path_point { + x: 113.084854525 + y: 349.896169857 + z: 0 + theta: -0.0421790366188 + } + v: 16.0554933998 + relative_time: 2254.80990077 + } + trajectory_point { + path_point { + x: 116.368770485 + y: 349.757575246 + z: 0 + theta: -0.0571209669246 + } + v: 16.0554933998 + relative_time: 2459.79261902 + } + trajectory_point { + path_point { + x: 119.651192575 + y: 349.569875936 + z: 0 + theta: -0.0726613839881 + } + v: 16.0554933998 + relative_time: 2664.77533727 + } + trajectory_point { + path_point { + x: 123.000553419 + y: 349.326077531 + z: 0 + theta: -0.0853221129439 + } + v: 16.0554933998 + relative_time: 2869.75805552 + } + trajectory_point { + path_point { + x: 126.218882719 + y: 349.050814592 + z: 0 + theta: -0.0968761686496 + } + v: 16.0554933998 + relative_time: 3074.74077377 + } + trajectory_point { + path_point { + x: 129.584228013 + y: 348.723769087 + z: 0 + theta: -0.104241247109 + } + v: 16.0554933998 + relative_time: 3279.72349202 + } + trajectory_point { + path_point { + x: 132.859617382 + y: 348.381096326 + z: 0 + theta: -0.102570979398 + } + v: 16.0554933998 + relative_time: 3484.70621028 + } + trajectory_point { + path_point { + x: 136.108345724 + y: 348.04669754 + z: 0 + theta: -0.123448825968 + } + v: 16.0554933998 + relative_time: 3689.68892853 + } + trajectory_point { + path_point { + x: 139.395254551 + y: 347.638858627 + z: 0 + theta: -0.12529482362 + } + v: 16.0554933998 + relative_time: 3894.67164678 + } + trajectory_point { + path_point { + x: 142.660345061 + y: 347.227605372 + z: 0 + theta: -0.126005130724 + } + v: 16.0554933998 + relative_time: 4099.65436503 + } + trajectory_point { + path_point { + x: 145.922641399 + y: 346.814349851 + z: 0 + theta: -0.112980314761 + } + v: 16.0554933998 + relative_time: 4304.63708328 + } + trajectory_point { + path_point { + x: 149.201103656 + y: 346.442364061 + z: 0 + theta: -0.139242748613 + } + v: 16.0554933998 + relative_time: 4509.61980153 + } + trajectory_point { + path_point { + x: 152.49059421 + y: 345.981342987 + z: 0 + theta: -0.168033277306 + } + v: 16.0554933998 + relative_time: 4714.60251978 + } + trajectory_point { + path_point { + x: 155.741593933 + y: 345.429866708 + z: 0 + theta: -0.164200231189 + } + v: 16.0554933998 + relative_time: 4919.58523804 + } + trajectory_point { + path_point { + x: 158.990901033 + y: 344.891482424 + z: 0 + theta: -0.168546544137 + } + v: 16.0554933998 + relative_time: 5124.56795629 + } + trajectory_point { + path_point { + x: 162.232580997 + y: 344.339875208 + z: 0 + theta: -0.170459422773 + } + v: 16.0554933998 + relative_time: 5329.55067454 + } + trajectory_point { + path_point { + x: 165.484061363 + y: 343.780198479 + z: 0 + theta: -0.198453614499 + } + v: 16.0554933998 + relative_time: 5534.53339279 + } + trajectory_point { + path_point { + x: 168.735212287 + y: 343.126390045 + z: 0 + theta: -0.209611667138 + } + v: 16.0554933998 + relative_time: 5739.51611104 + } + trajectory_point { + path_point { + x: 171.957432205 + y: 342.440906247 + z: 0 + theta: -0.206837197802 + } + v: 16.0554933998 + relative_time: 5944.49882929 + } + trajectory_point { + path_point { + x: 175.166164129 + y: 341.767591801 + z: 0 + theta: -0.208637353864 + } + v: 16.0554933998 + relative_time: 6149.48154755 + } + trajectory_point { + path_point { + x: 178.410591234 + y: 341.080687189 + z: 0 + theta: -0.20724710829 + } + v: 16.0554933998 + relative_time: 6354.4642658 + } + trajectory_point { + path_point { + x: 181.614061064 + y: 340.407105857 + z: 0 + theta: -0.208504891572 + } + v: 16.0554933998 + relative_time: 6559.44698405 + } + trajectory_point { + path_point { + x: 184.839577395 + y: 339.7246514 + z: 0 + theta: -0.254581545268 + } + v: 16.0554933998 + relative_time: 6764.4297023 + } + trajectory_point { + path_point { + x: 185.709816131 + y: 339.498190975 + z: 0 + theta: -1.79427292794 + } + v: 16.0554933998 + relative_time: 6969.41242055 + } + trajectory_point { + path_point { + x: 185.704325324 + y: 339.474031426 + z: 0 + theta: -1.79427292793 + } + v: 16.0554933998 + relative_time: 7174.3951388 + } + trajectory_point { + path_point { + x: 185.699109058 + y: 339.451079855 + z: 0 + theta: -1.79427292794 + } + v: 16.0554933998 + relative_time: 7379.37785705 + } + trajectory_point { + path_point { + x: 185.694153605 + y: 339.429275862 + z: 0 + theta: -1.79427292793 + } + v: 16.0554933998 + relative_time: 7584.36057531 + } + trajectory_point { + path_point { + x: 185.689445925 + y: 339.408562069 + z: 0 + theta: -1.79427292794 + } + v: 16.0554933998 + relative_time: 7789.34329356 + } + trajectory_point { + path_point { + x: 185.684973629 + y: 339.388883965 + z: 0 + theta: -1.79427292794 + } + v: 16.0554933998 + relative_time: 7994.32601181 + } + trajectory_point { + path_point { + x: 185.680724947 + y: 339.370189767 + z: 0 + theta: -1.79427292794 + } + v: 16.0554933998 + relative_time: 8199.30873006 + } + trajectory_point { + path_point { + x: 185.6766887 + y: 339.352430279 + z: 0 + theta: -1.79427292794 + } + v: 16.0554933998 + relative_time: 8404.29144831 + } + trajectory_point { + path_point { + x: 185.672854265 + y: 339.335558765 + z: 0 + theta: -1.79427292793 + } + v: 16.0554933998 + relative_time: 8609.27416656 + } + trajectory_point { + path_point { + x: 185.669211551 + y: 339.319530827 + z: 0 + theta: -1.79427292794 + } + v: 16.0554933998 + relative_time: 8814.25688482 + } + trajectory_point { + path_point { + x: 185.665750974 + y: 339.304304285 + z: 0 + theta: -1.79427292794 + } + v: 16.0554933998 + relative_time: 9019.23960307 + } + trajectory_point { + path_point { + x: 185.662463425 + y: 339.289839071 + z: 0 + theta: -1.79427292794 + } + v: 16.0554933998 + relative_time: 9224.22232132 + } + trajectory_point { + path_point { + x: 185.659340254 + y: 339.276097117 + z: 0 + theta: -1.79427292793 + } + v: 16.0554933998 + relative_time: 9429.20503957 + } + trajectory_point { + path_point { + x: 185.656373241 + y: 339.263042262 + z: 0 + theta: -1.79427292794 + } + v: 16.0554933998 + relative_time: 9634.18775782 + } + trajectory_point { + path_point { + x: 185.653554579 + y: 339.250640149 + z: 0 + theta: -1.79427292794 + } + v: 16.0554933998 + relative_time: 9839.17047607 + } + trajectory_point { + path_point { + x: 185.65087685 + y: 339.238858141 + z: 0 + theta: -1.79427292794 + } + v: 16.0554933998 + relative_time: 10044.1531943 + } + } +} +prediction_obstacle { + perception_obstacle { + id: 2157 + position { + x: 35.4385588212 + y: 347.644748397 + z: -30.6160678864 + } + theta: -0.071079222932 + velocity { + x: 5.60267466251 + y: -0.398905779095 + z: 0 + } + length: 3.73900033548 + width: 1.70589116702 + height: 1.63368988037 + polygon_point { + x: 33.5552936276 + y: 347.643716878 + z: -31.3949085146 + } + polygon_point { + x: 33.9895831722 + y: 348.1426399 + z: -31.3863022633 + } + polygon_point { + x: 34.1234346682 + y: 348.206143138 + z: -31.3856800311 + } + polygon_point { + x: 35.345749282 + y: 348.517015282 + z: -31.3860488099 + } + polygon_point { + x: 36.8055446455 + y: 348.373851805 + z: -31.3980596482 + } + polygon_point { + x: 37.2824738057 + y: 347.47551402 + z: -31.4211366963 + } + polygon_point { + x: 37.2910245329 + y: 347.354723859 + z: -31.4239049434 + } + polygon_point { + x: 36.8532047407 + y: 346.826597629 + z: -31.4331467603 + } + polygon_point { + x: 36.655274613 + y: 346.78400668 + z: -31.4329127623 + } + polygon_point { + x: 35.9862282809 + y: 346.762112316 + z: -31.4293762093 + } + polygon_point { + x: 33.9614463298 + y: 347.081515645 + z: -31.4099991245 + } + tracking_time: 0 + type: VEHICLE + timestamp: 0 + } + timestamp: 1171064942.14 + predicted_period: 5000 + trajectory { + probability: 0.918794968878 + trajectory_point { + path_point { + x: 35.4385588212 + y: 347.644748397 + z: 0 + theta: -0.0649465806801 + } + v: 5.84237338479 + relative_time: 0 + } + trajectory_point { + path_point { + x: 36.6790481573 + y: 347.564069388 + z: 0 + theta: -0.0564236721701 + } + v: 5.84237338479 + relative_time: 213.693065255 + } + trajectory_point { + path_point { + x: 37.9204994496 + y: 347.493947717 + z: 0 + theta: -0.0523531864764 + } + v: 5.84237338479 + relative_time: 427.386130509 + } + trajectory_point { + path_point { + x: 39.1673616669 + y: 347.428610803 + z: 0 + theta: -0.0481670561266 + } + v: 5.84237338479 + relative_time: 641.079195764 + } + trajectory_point { + path_point { + x: 40.4145975331 + y: 347.36848862 + z: 0 + theta: -0.0473783622438 + } + v: 5.84237338479 + relative_time: 854.772261019 + } + trajectory_point { + path_point { + x: 41.661044705 + y: 347.309389768 + z: 0 + theta: -0.0274600633402 + } + v: 5.84237338479 + relative_time: 1068.46532627 + } + trajectory_point { + path_point { + x: 42.9047175676 + y: 347.275229846 + z: 0 + theta: -0.0231062072679 + } + v: 5.84237338479 + relative_time: 1282.15839153 + } + trajectory_point { + path_point { + x: 44.1526409848 + y: 347.246389936 + z: 0 + theta: -0.0137793700448 + } + v: 5.84237338479 + relative_time: 1495.85145678 + } + trajectory_point { + path_point { + x: 45.3968393662 + y: 347.229244581 + z: 0 + theta: -0.0040054463183 + } + v: 5.84237338479 + relative_time: 1709.54452204 + } + trajectory_point { + path_point { + x: 46.6451330302 + y: 347.224244581 + z: 0 + theta: -0.00809910061631 + } + v: 5.84237338479 + relative_time: 1923.23758729 + } + trajectory_point { + path_point { + x: 47.8980628729 + y: 347.214096754 + z: 0 + theta: -0.0119432914179 + } + v: 5.84237338479 + relative_time: 2136.93065255 + } + trajectory_point { + path_point { + x: 49.1415615489 + y: 347.199244581 + z: 0 + theta: -0.0120167155038 + } + v: 5.84237338479 + relative_time: 2350.6237178 + } + trajectory_point { + path_point { + x: 50.3897626885 + y: 347.184244581 + z: 0 + theta: -0.0146056422087 + } + v: 5.84237338479 + relative_time: 2564.31678306 + } + trajectory_point { + path_point { + x: 51.6422937906 + y: 347.165949259 + z: 0 + theta: -0.0094102971243 + } + v: 5.84237338479 + relative_time: 2778.00984831 + } + trajectory_point { + path_point { + x: 52.8860730514 + y: 347.154244581 + z: 0 + theta: -0.00749187479119 + } + v: 5.84237338479 + relative_time: 2991.70291357 + } + trajectory_point { + path_point { + x: 54.1390867829 + y: 347.144856983 + z: 0 + theta: -0.00451347008259 + } + v: 5.84237338479 + relative_time: 3205.39597882 + } + trajectory_point { + path_point { + x: 55.3825566988 + y: 347.139244581 + z: 0 + theta: -0.00400510195835 + } + v: 5.84237338479 + relative_time: 3419.08904407 + } + trajectory_point { + path_point { + x: 56.6309576926 + y: 347.134244581 + z: 0 + theta: 0 + } + v: 5.84237338479 + relative_time: 3632.78210933 + } + trajectory_point { + path_point { + x: 57.8794223563 + y: 347.134244581 + z: 0 + theta: -0.00400506116207 + } + v: 5.84237338479 + relative_time: 3846.47517458 + } + trajectory_point { + path_point { + x: 59.1278360667 + y: 347.129244581 + z: 0 + theta: -0.00702921392883 + } + v: 5.84237338479 + relative_time: 4060.16823984 + } + trajectory_point { + path_point { + x: 60.3807862189 + y: 347.120437181 + z: 0 + theta: -0.00497959238905 + } + v: 5.84237338479 + relative_time: 4273.86130509 + } + trajectory_point { + path_point { + x: 61.6243717599 + y: 347.114244581 + z: 0 + theta: -0.00400511570818 + } + v: 5.84237338479 + relative_time: 4487.55437035 + } + trajectory_point { + path_point { + x: 62.8727684679 + y: 347.109244581 + z: 0 + theta: 0.0128310878363 + } + v: 5.84237338479 + relative_time: 4701.2474356 + } + trajectory_point { + path_point { + x: 64.1040223311 + y: 347.125043774 + z: 0 + theta: 0.0413730705684 + } + v: 5.84237338479 + relative_time: 4914.94050086 + } + trajectory_point { + path_point { + x: 65.3552362303 + y: 347.176839892 + z: 0 + theta: 0.0532346024035 + } + v: 5.84237338479 + relative_time: 5128.63356611 + } + trajectory_point { + path_point { + x: 66.5922493344 + y: 347.24275407 + z: 0 + theta: 0.0623518326882 + } + v: 5.84237338479 + relative_time: 5342.32663137 + } + trajectory_point { + path_point { + x: 67.8451402149 + y: 347.320975508 + z: 0 + theta: 0.0546295301424 + } + v: 5.84237338479 + relative_time: 5556.01969662 + } + trajectory_point { + path_point { + x: 69.0860821487 + y: 347.388835102 + z: 0 + theta: 0.0582328133785 + } + v: 5.84237338479 + relative_time: 5769.71276188 + } + trajectory_point { + path_point { + x: 70.333011608 + y: 347.461529502 + z: 0 + theta: 0.061036686664 + } + v: 5.84237338479 + relative_time: 5983.40582713 + } + trajectory_point { + path_point { + x: 71.5748253043 + y: 347.537419961 + z: 0 + theta: 0.0521986045347 + } + v: 5.84237338479 + relative_time: 6197.09889239 + } + trajectory_point { + path_point { + x: 72.8289610677 + y: 347.602943619 + z: 0 + theta: 0.0575055642452 + } + v: 5.84237338479 + relative_time: 6410.79195764 + } + trajectory_point { + path_point { + x: 74.0699763407 + y: 347.674387673 + z: 0 + theta: 0.051759773146 + } + v: 5.84237338479 + relative_time: 6624.48502289 + } + trajectory_point { + path_point { + x: 75.3125825028 + y: 347.738762184 + z: 0 + theta: 0.0594626969712 + } + v: 5.84237338479 + relative_time: 6838.17808815 + } + trajectory_point { + path_point { + x: 76.5654931998 + y: 347.813351565 + z: 0 + theta: 0.0496716371726 + } + v: 5.84237338479 + relative_time: 7051.8711534 + } + trajectory_point { + path_point { + x: 77.8122561406 + y: 347.875331304 + z: 0 + theta: 0.0568479138911 + } + v: 5.84237338479 + relative_time: 7265.56421866 + } + trajectory_point { + path_point { + x: 79.0543643895 + y: 347.94601873 + z: 0 + theta: 0.0423183033899 + } + v: 5.84237338479 + relative_time: 7479.25728391 + } + trajectory_point { + path_point { + x: 80.3058099866 + y: 347.99900942 + z: 0 + theta: 0.0568758997588 + } + v: 5.84237338479 + relative_time: 7692.95034917 + } + trajectory_point { + path_point { + x: 81.5562727859 + y: 348.070207406 + z: 0 + theta: 0.0464029680822 + } + v: 5.84237338479 + relative_time: 7906.64341442 + } + trajectory_point { + path_point { + x: 82.7980362683 + y: 348.12787031 + z: 0 + theta: 0.0442006900904 + } + v: 5.84237338479 + relative_time: 8120.33647968 + } + trajectory_point { + path_point { + x: 84.0410085057 + y: 348.182846348 + z: 0 + theta: 0.0431587718312 + } + v: 5.84237338479 + relative_time: 8334.02954493 + } + trajectory_point { + path_point { + x: 85.2917862722 + y: 348.236861922 + z: 0 + theta: 0.037709078821 + } + v: 5.84237338479 + relative_time: 8547.72261019 + } + trajectory_point { + path_point { + x: 86.5477224876 + y: 348.284244581 + z: 0 + theta: 0.0441064915564 + } + v: 5.84237338479 + relative_time: 8761.41567544 + } + trajectory_point { + path_point { + x: 87.7938957398 + y: 348.339244581 + z: 0 + theta: 0.033705870751 + } + v: 5.84237338479 + relative_time: 8975.1087407 + } + trajectory_point { + path_point { + x: 89.0356730484 + y: 348.381115624 + z: 0 + theta: 0.036906565437 + } + v: 5.84237338479 + relative_time: 9188.80180595 + } + trajectory_point { + path_point { + x: 90.283386688 + y: 348.427185368 + z: 0 + theta: 0.0280765473001 + } + v: 5.84237338479 + relative_time: 9402.49487121 + } + trajectory_point { + path_point { + x: 91.5267421523 + y: 348.462103672 + z: 0 + theta: 0.0297027686834 + } + v: 5.84237338479 + relative_time: 9616.18793646 + } + trajectory_point { + path_point { + x: 92.7734972561 + y: 348.499146645 + z: 0 + theta: 0.0289788211248 + } + v: 5.84237338479 + relative_time: 9829.88100171 + } + trajectory_point { + path_point { + x: 94.0254292325 + y: 348.535436317 + z: 0 + theta: 0.0207903357818 + } + v: 5.84237338479 + relative_time: 10043.574067 + } + trajectory_point { + path_point { + x: 95.2734477825 + y: 348.561386781 + z: 0 + theta: 0.0217392661745 + } + v: 5.84237338479 + relative_time: 10257.2671322 + } + trajectory_point { + path_point { + x: 96.5126123038 + y: 348.588329553 + z: 0 + theta: 0.0217392661745 + } + v: 5.84237338479 + relative_time: 10470.9601975 + } + } + trajectory { + probability: 0.918794968878 + trajectory_point { + path_point { + x: 35.4385588212 + y: 347.644748397 + z: 0 + theta: -0.0649465806801 + } + v: 5.84237338479 + relative_time: 0 + } + trajectory_point { + path_point { + x: 36.6790481573 + y: 347.564069388 + z: 0 + theta: -0.0564236721701 + } + v: 5.84237338479 + relative_time: 213.693065255 + } + trajectory_point { + path_point { + x: 37.9204994496 + y: 347.493947717 + z: 0 + theta: -0.0523531864764 + } + v: 5.84237338479 + relative_time: 427.386130509 + } + trajectory_point { + path_point { + x: 39.1673616669 + y: 347.428610803 + z: 0 + theta: -0.0481670561266 + } + v: 5.84237338479 + relative_time: 641.079195764 + } + trajectory_point { + path_point { + x: 40.4145975331 + y: 347.36848862 + z: 0 + theta: -0.0473783622438 + } + v: 5.84237338479 + relative_time: 854.772261019 + } + trajectory_point { + path_point { + x: 41.661044705 + y: 347.309389768 + z: 0 + theta: -0.0274600633402 + } + v: 5.84237338479 + relative_time: 1068.46532627 + } + trajectory_point { + path_point { + x: 42.9047175676 + y: 347.275229846 + z: 0 + theta: -0.0231062072679 + } + v: 5.84237338479 + relative_time: 1282.15839153 + } + trajectory_point { + path_point { + x: 44.1526409848 + y: 347.246389936 + z: 0 + theta: -0.0137793700448 + } + v: 5.84237338479 + relative_time: 1495.85145678 + } + trajectory_point { + path_point { + x: 45.3968393662 + y: 347.229244581 + z: 0 + theta: -0.0040054463183 + } + v: 5.84237338479 + relative_time: 1709.54452204 + } + trajectory_point { + path_point { + x: 46.6451330302 + y: 347.224244581 + z: 0 + theta: -0.00809910061631 + } + v: 5.84237338479 + relative_time: 1923.23758729 + } + trajectory_point { + path_point { + x: 47.8980628729 + y: 347.214096754 + z: 0 + theta: -0.0119432914179 + } + v: 5.84237338479 + relative_time: 2136.93065255 + } + trajectory_point { + path_point { + x: 49.1415615489 + y: 347.199244581 + z: 0 + theta: -0.0120167155038 + } + v: 5.84237338479 + relative_time: 2350.6237178 + } + trajectory_point { + path_point { + x: 50.3897626885 + y: 347.184244581 + z: 0 + theta: -0.0146056422087 + } + v: 5.84237338479 + relative_time: 2564.31678306 + } + trajectory_point { + path_point { + x: 51.6422937906 + y: 347.165949259 + z: 0 + theta: -0.0094102971243 + } + v: 5.84237338479 + relative_time: 2778.00984831 + } + trajectory_point { + path_point { + x: 52.8860730514 + y: 347.154244581 + z: 0 + theta: -0.00749187479119 + } + v: 5.84237338479 + relative_time: 2991.70291357 + } + trajectory_point { + path_point { + x: 54.1390867829 + y: 347.144856983 + z: 0 + theta: -0.00451347008259 + } + v: 5.84237338479 + relative_time: 3205.39597882 + } + trajectory_point { + path_point { + x: 55.3825566988 + y: 347.139244581 + z: 0 + theta: -0.00400510195835 + } + v: 5.84237338479 + relative_time: 3419.08904407 + } + trajectory_point { + path_point { + x: 56.6309576926 + y: 347.134244581 + z: 0 + theta: 0 + } + v: 5.84237338479 + relative_time: 3632.78210933 + } + trajectory_point { + path_point { + x: 57.8794223563 + y: 347.134244581 + z: 0 + theta: -0.00400506116207 + } + v: 5.84237338479 + relative_time: 3846.47517458 + } + trajectory_point { + path_point { + x: 59.1278360667 + y: 347.129244581 + z: 0 + theta: -0.00702921392883 + } + v: 5.84237338479 + relative_time: 4060.16823984 + } + trajectory_point { + path_point { + x: 60.3807862189 + y: 347.120437181 + z: 0 + theta: -0.00497959238905 + } + v: 5.84237338479 + relative_time: 4273.86130509 + } + trajectory_point { + path_point { + x: 61.6243717599 + y: 347.114244581 + z: 0 + theta: -0.00400511570818 + } + v: 5.84237338479 + relative_time: 4487.55437035 + } + trajectory_point { + path_point { + x: 62.8727684679 + y: 347.109244581 + z: 0 + theta: 0.0128310878363 + } + v: 5.84237338479 + relative_time: 4701.2474356 + } + trajectory_point { + path_point { + x: 64.1040223311 + y: 347.125043774 + z: 0 + theta: 0.0413730705684 + } + v: 5.84237338479 + relative_time: 4914.94050086 + } + trajectory_point { + path_point { + x: 65.3552362303 + y: 347.176839892 + z: 0 + theta: 0.0532346024035 + } + v: 5.84237338479 + relative_time: 5128.63356611 + } + trajectory_point { + path_point { + x: 66.5922493344 + y: 347.24275407 + z: 0 + theta: -0.0311290725267 + } + v: 5.84237338479 + relative_time: 5342.32663137 + } + trajectory_point { + path_point { + x: 67.8744913103 + y: 347.202826169 + z: 0 + theta: -0.169535474026 + } + v: 5.84237338479 + relative_time: 5556.01969662 + } + trajectory_point { + path_point { + x: 69.1030324071 + y: 346.992526167 + z: 0 + theta: -0.198347176703 + } + v: 5.84237338479 + relative_time: 5769.71276188 + } + trajectory_point { + path_point { + x: 70.3274234266 + y: 346.746435975 + z: 0 + theta: -0.22456098908 + } + v: 5.84237338479 + relative_time: 5983.40582713 + } + trajectory_point { + path_point { + x: 71.5536130155 + y: 346.466357831 + z: 0 + theta: -0.259298544298 + } + v: 5.84237338479 + relative_time: 6197.09889239 + } + trajectory_point { + path_point { + x: 72.7670587932 + y: 346.144466359 + z: 0 + theta: -0.299976230993 + } + v: 5.84237338479 + relative_time: 6410.79195764 + } + trajectory_point { + path_point { + x: 73.9603205949 + y: 345.775378305 + z: 0 + theta: -0.346461604883 + } + v: 5.84237338479 + relative_time: 6624.48502289 + } + trajectory_point { + path_point { + x: 75.1451736999 + y: 345.347618159 + z: 0 + theta: -0.398727333377 + } + v: 5.84237338479 + relative_time: 6838.17808815 + } + trajectory_point { + path_point { + x: 76.3081868108 + y: 344.857647872 + z: 0 + theta: -0.460863948439 + } + v: 5.84237338479 + relative_time: 7051.8711534 + } + trajectory_point { + path_point { + x: 77.4403245375 + y: 344.295512902 + z: 0 + theta: -0.528209617505 + } + v: 5.84237338479 + relative_time: 7265.56421866 + } + trajectory_point { + path_point { + x: 78.5187061829 + y: 343.666261563 + z: 0 + theta: -0.604950257151 + } + v: 5.84237338479 + relative_time: 7479.25728391 + } + trajectory_point { + path_point { + x: 79.5573163001 + y: 342.948136663 + z: 0 + theta: -0.690090487296 + } + v: 5.84237338479 + relative_time: 7692.95034917 + } + trajectory_point { + path_point { + x: 80.5254039717 + y: 342.148991673 + z: 0 + theta: -0.795385272447 + } + v: 5.84237338479 + relative_time: 7906.64341442 + } + trajectory_point { + path_point { + x: 81.4181758435 + y: 341.238206886 + z: 0 + theta: -0.907892001473 + } + v: 5.84237338479 + relative_time: 8120.33647968 + } + trajectory_point { + path_point { + x: 82.1988920989 + y: 340.238274636 + z: 0 + theta: -1.01889444909 + } + v: 5.84237338479 + relative_time: 8334.02954493 + } + trajectory_point { + path_point { + x: 82.8605069929 + y: 339.163744889 + z: 0 + theta: -1.1393464629 + } + v: 5.84237338479 + relative_time: 8547.72261019 + } + trajectory_point { + path_point { + x: 83.3884258894 + y: 338.017034944 + z: 0 + theta: -1.30464117079 + } + v: 5.84237338479 + relative_time: 8761.41567544 + } + trajectory_point { + path_point { + x: 83.7318033623 + y: 336.75750346 + z: 0 + theta: -1.51999687816 + } + v: 5.84237338479 + relative_time: 8975.1087407 + } + trajectory_point { + path_point { + x: 83.794244581 + y: 335.52938978 + z: 0 + theta: -1.52008685001 + } + v: 5.84237338479 + relative_time: 9188.80180595 + } + trajectory_point { + path_point { + x: 83.8569755902 + y: 334.293383532 + z: 0 + theta: -1.53298981443 + } + v: 5.84237338479 + relative_time: 9402.49487121 + } + trajectory_point { + path_point { + x: 83.9041072546 + y: 333.047322902 + z: 0 + theta: -1.53180801113 + } + v: 5.84237338479 + relative_time: 9616.18793646 + } + trajectory_point { + path_point { + x: 83.9529538455 + y: 331.79510574 + z: 0 + theta: -1.51207640343 + } + v: 5.84237338479 + relative_time: 9829.88100171 + } + trajectory_point { + path_point { + x: 84.0256251692 + y: 330.558936208 + z: 0 + theta: -1.51487479887 + } + v: 5.84237338479 + relative_time: 10043.574067 + } + trajectory_point { + path_point { + x: 84.0956210125 + y: 329.308561501 + z: 0 + theta: -1.52600817437 + } + v: 5.84237338479 + relative_time: 10257.2671322 + } + trajectory_point { + path_point { + x: 84.1514717255 + y: 328.062397955 + z: 0 + theta: -1.52600817437 + } + v: 5.84237338479 + relative_time: 10470.9601975 + } + } +} +prediction_obstacle { + perception_obstacle { + id: 2161 + position { + x: 97.4671255037 + y: 347.643089595 + z: -31.459733963 + } + theta: 0.0249947936189 + velocity { + x: 0.118324922874 + y: -0.0117234822719 + z: 0 + } + length: 0.357469637533 + width: 1.47513933358 + height: 0.514804840088 + polygon_point { + x: 97.2893624333 + y: 347.796489884 + z: -31.6976950117 + } + polygon_point { + x: 97.2902582356 + y: 347.923750521 + z: -31.6948381206 + } + polygon_point { + x: 97.3307050201 + y: 348.052103216 + z: -31.6921948431 + } + polygon_point { + x: 97.5875120205 + y: 348.394845337 + z: -31.6860325399 + } + polygon_point { + x: 97.6613368321 + y: 346.921045429 + z: -31.7196251173 + } + polygon_point { + x: 97.33956867 + y: 346.945560842 + z: -31.7171360436 + } + polygon_point { + x: 97.3009911378 + y: 347.136420518 + z: -31.7126110052 + } + tracking_time: 0 + type: UNKNOWN + timestamp: 0 + } +} diff --git a/modules/planning/common/trajectory/BUILD b/modules/planning/common/trajectory/BUILD new file mode 100644 index 00000000000..ed4ee7587f0 --- /dev/null +++ b/modules/planning/common/trajectory/BUILD @@ -0,0 +1,47 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "trajectory", + hdrs = [ + "trajectory.h", + ], + deps = [ + "//external:gflags", + "//modules/common/math", + "//modules/common/proto:pnc_point_proto", + ], +) + +cc_library( + name = "discretized_trajectory", + srcs = [ + "discretized_trajectory.cc", + ], + hdrs = [ + "discretized_trajectory.h", + ], + deps = [ + ":trajectory", + "//modules/common/proto:pnc_point_proto", + "//modules/planning/common:planning_util", + "@eigen//:eigen", + ], +) + +cc_library( + name = "publishable_trajectory", + srcs = [ + "publishable_trajectory.cc", + ], + hdrs = [ + "publishable_trajectory.h", + ], + deps = [ + ":discretized_trajectory", + "//modules/planning/proto:planning_proto", + ], +) + +cpplint() diff --git a/modules/planning/common/trajectory/discretized_trajectory.cc b/modules/planning/common/trajectory/discretized_trajectory.cc new file mode 100644 index 00000000000..b3bd64ebef6 --- /dev/null +++ b/modules/planning/common/trajectory/discretized_trajectory.cc @@ -0,0 +1,146 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file discretized_trajectory.cc + **/ + +#include "modules/planning/common/trajectory/discretized_trajectory.h" + +#include +#include +#include + +#include "modules/common/log.h" +#include "modules/planning/common/planning_util.h" + +namespace apollo { +namespace planning { + +using common::TrajectoryPoint; + +DiscretizedTrajectory::DiscretizedTrajectory( + std::vector trajectory_points) { + CHECK(!trajectory_points.empty()) + << "trajectory_points should NOT be empty()"; + trajectory_points_ = std::move(trajectory_points); +} + +TrajectoryPoint DiscretizedTrajectory::Evaluate( + const double relative_time) const { + CHECK(!trajectory_points_.empty()); + CHECK(trajectory_points_.front().relative_time() <= relative_time && + trajectory_points_.back().relative_time() <= relative_time) + << "Invalid relative time input!"; + + auto comp = [](const TrajectoryPoint& p, const double relative_time) { + return p.relative_time() < relative_time; + }; + + auto it_lower = + std::lower_bound(trajectory_points_.begin(), trajectory_points_.end(), + relative_time, comp); + + if (it_lower == trajectory_points_.begin()) { + return trajectory_points_.front(); + } + return util::interpolate(*(it_lower - 1), *it_lower, relative_time); +} + +TrajectoryPoint DiscretizedTrajectory::EvaluateUsingLinearApproximation( + const double relative_time) const { + auto comp = [](const TrajectoryPoint& p, const double relative_time) { + return p.relative_time() < relative_time; + }; + + auto it_lower = + std::lower_bound(trajectory_points_.begin(), trajectory_points_.end(), + relative_time, comp); + + if (it_lower == trajectory_points_.begin()) { + return trajectory_points_.front(); + } + return util::InterpolateUsingLinearApproximation(*(it_lower - 1), *it_lower, + relative_time); +} + +std::uint32_t DiscretizedTrajectory::QueryNearestPoint( + const double relative_time) const { + CHECK(!trajectory_points_.empty()); + + if (relative_time >= trajectory_points_.back().relative_time()) { + return trajectory_points_.size() - 1; + } + auto func = [](const TrajectoryPoint& tp, const double relative_time) { + return tp.relative_time() < relative_time; + }; + auto it_lower = + std::lower_bound(trajectory_points_.begin(), trajectory_points_.end(), + relative_time, func); + return std::distance(trajectory_points_.begin(), it_lower); +} + +std::uint32_t DiscretizedTrajectory::QueryNearestPoint( + const common::math::Vec2d& position) const { + double dist_sqr_min = std::numeric_limits::max(); + std::uint32_t index_min = 0; + for (std::uint32_t i = 0; i < trajectory_points_.size(); ++i) { + const common::math::Vec2d curr_point( + trajectory_points_[i].path_point().x(), + trajectory_points_[i].path_point().y()); + + const double dist_sqr = curr_point.DistanceSquareTo(position); + if (dist_sqr < dist_sqr_min) { + dist_sqr_min = dist_sqr; + index_min = i; + } + } + return index_min; +} + +void DiscretizedTrajectory::AppendTrajectoryPoint( + const TrajectoryPoint& trajectory_point) { + if (!trajectory_points_.empty()) { + CHECK_GT(trajectory_point.relative_time(), + trajectory_points_.back().relative_time()); + } + trajectory_points_.push_back(trajectory_point); +} + +const TrajectoryPoint& DiscretizedTrajectory::TrajectoryPointAt( + const std::uint32_t index) const { + CHECK_LT(index, NumOfPoints()); + return trajectory_points_[index]; +} + +TrajectoryPoint DiscretizedTrajectory::StartPoint() const { + CHECK(!trajectory_points_.empty()); + return trajectory_points_.front(); +} + +std::uint32_t DiscretizedTrajectory::NumOfPoints() const { + return trajectory_points_.size(); +} + +const std::vector& DiscretizedTrajectory::trajectory_points() + const { + return trajectory_points_; +} + +void DiscretizedTrajectory::Clear() { trajectory_points_.clear(); } + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/trajectory/discretized_trajectory.h b/modules/planning/common/trajectory/discretized_trajectory.h new file mode 100644 index 00000000000..016cbf57753 --- /dev/null +++ b/modules/planning/common/trajectory/discretized_trajectory.h @@ -0,0 +1,81 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file discretized_trajectory.h + **/ + +#ifndef MODULES_PLANNING_COMMON_TRAJECTORY_DISCRETIZED_TRAJECTORY_H +#define MODULES_PLANNING_COMMON_TRAJECTORY_DISCRETIZED_TRAJECTORY_H + +#include + +#include "glog/logging.h" +#include "modules/common/math/vec2d.h" +#include "modules/planning/common/trajectory/trajectory.h" + +namespace apollo { +namespace planning { + +class DiscretizedTrajectory : public Trajectory { + public: + DiscretizedTrajectory() = default; + + explicit DiscretizedTrajectory( + std::vector trajectory_points); + + virtual ~DiscretizedTrajectory() = default; + + common::TrajectoryPoint Evaluate(const double relative_time) const override; + + common::TrajectoryPoint StartPoint() const override; + + virtual common::TrajectoryPoint EvaluateUsingLinearApproximation( + const double relative_time) const; + + virtual uint32_t QueryNearestPoint(const double relative_time) const; + + virtual uint32_t QueryNearestPoint(const common::math::Vec2d& position) const; + + virtual void AppendTrajectoryPoint( + const common::TrajectoryPoint& trajectory_point); + + template + void PrependTrajectoryPoints(Iter begin, Iter end) { + if (!trajectory_points_.empty() && begin != end) { + CHECK((end - 1)->relative_time() < + trajectory_points_.front().relative_time()); + } + trajectory_points_.insert(trajectory_points_.begin(), begin, end); + } + + const common::TrajectoryPoint& TrajectoryPointAt( + const std::uint32_t index) const; + + uint32_t NumOfPoints() const; + + const std::vector& trajectory_points() const; + + virtual void Clear(); + + protected: + std::vector trajectory_points_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_TRAJECTORY_DISCRETIZED_TRAJECTORY_H diff --git a/modules/planning/common/trajectory/publishable_trajectory.cc b/modules/planning/common/trajectory/publishable_trajectory.cc new file mode 100644 index 00000000000..a1b66c3d7a8 --- /dev/null +++ b/modules/planning/common/trajectory/publishable_trajectory.cc @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file publishable_trajectory.cpp + **/ + +#include + +#include "modules/planning/common/trajectory/publishable_trajectory.h" + +namespace apollo { +namespace planning { + +PublishableTrajectory::PublishableTrajectory( + const double header_time, + const DiscretizedTrajectory& discretized_trajectory) + : DiscretizedTrajectory(discretized_trajectory), + header_time_(header_time) {} + +double PublishableTrajectory::header_time() const { return header_time_; } + +void PublishableTrajectory::PopulateTrajectoryProtobuf( + ADCTrajectory* trajectory_pb) const { + trajectory_pb->mutable_header()->set_timestamp_sec(header_time_); + trajectory_pb->mutable_trajectory_point()->CopyFrom( + {trajectory_points_.begin(), trajectory_points_.end()}); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/common/trajectory/publishable_trajectory.h b/modules/planning/common/trajectory/publishable_trajectory.h new file mode 100644 index 00000000000..e7fdf7dbb5f --- /dev/null +++ b/modules/planning/common/trajectory/publishable_trajectory.h @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file publishable_trajectory.h + **/ + +#ifndef MODULES_PLANNING_COMMON_TRAJECTORY_PUBLISHABLE_TRAJECTORY_H_ +#define MODULES_PLANNING_COMMON_TRAJECTORY_PUBLISHABLE_TRAJECTORY_H_ + +#include +#include "modules/planning/common/trajectory/discretized_trajectory.h" +#include "modules/planning/proto/planning.pb.h" + +namespace apollo { +namespace planning { + +class PublishableTrajectory : public DiscretizedTrajectory { + public: + PublishableTrajectory() = default; + PublishableTrajectory(const double header_time, + const DiscretizedTrajectory& discretized_trajectory); + + double header_time() const; + + void PopulateTrajectoryProtobuf(ADCTrajectory* trajectory_pb) const; + + private: + double header_time_ = 0.0; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_TRAJECTORY_PUBLISHABLE_TRAJECTORY_H diff --git a/modules/planning/common/trajectory/trajectory.h b/modules/planning/common/trajectory/trajectory.h new file mode 100644 index 00000000000..7ac3bc02833 --- /dev/null +++ b/modules/planning/common/trajectory/trajectory.h @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file trajectory.h + **/ + +#ifndef MODULES_PLANNING_COMMON_TRAJECTORY_TRAJECTORY_H_ +#define MODULES_PLANNING_COMMON_TRAJECTORY_TRAJECTORY_H_ + +#include "modules/common/proto/pnc_point.pb.h" + +namespace apollo { +namespace planning { + +class Trajectory { + public: + Trajectory() = default; + + virtual ~Trajectory() = default; + + virtual common::TrajectoryPoint Evaluate( + const double relative_time) const = 0; + + virtual common::TrajectoryPoint StartPoint() const = 0; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_COMMON_TRAJECTORY_TRAJECTORY_H_ diff --git a/modules/planning/conf/BUILD b/modules/planning/conf/BUILD deleted file mode 100644 index 7c1e88038c5..00000000000 --- a/modules/planning/conf/BUILD +++ /dev/null @@ -1,8 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -filegroup( - name = "planning_trajectory_adapter_manager_config", - srcs = [ - "adapter.conf", - ], -) diff --git a/modules/planning/conf/adapter.conf b/modules/planning/conf/adapter.conf index 2c784620f1a..aa454a6df51 100644 --- a/modules/planning/conf/adapter.conf +++ b/modules/planning/conf/adapter.conf @@ -1,12 +1,18 @@ config { type: LOCALIZATION mode: RECEIVE_ONLY - message_history_limit: 10 } config { type: CHASSIS mode: RECEIVE_ONLY - message_history_limit: 10 +} +config { + type: ROUTING_RESPONSE + mode: RECEIVE_ONLY +} +config { + type: PREDICTION + mode: RECEIVE_ONLY } config { type: PLANNING_TRAJECTORY diff --git a/modules/planning/conf/planning.conf b/modules/planning/conf/planning.conf index 32d28492257..9636c1d4f67 100644 --- a/modules/planning/conf/planning.conf +++ b/modules/planning/conf/planning.conf @@ -1 +1,3 @@ ---adapter_config_path=modules/planning/conf/adapter.conf \ No newline at end of file +--flagfile=modules/common/data/global_flagfile.txt +--nouse_ros_time +--enable_reference_line_provider_thread diff --git a/modules/planning/conf/planning_config.pb.txt b/modules/planning/conf/planning_config.pb.txt new file mode 100644 index 00000000000..87755bcc429 --- /dev/null +++ b/modules/planning/conf/planning_config.pb.txt @@ -0,0 +1,130 @@ +planner_type : EM +em_planner_config { + task : TRAFFIC_DECIDER + + task : DP_POLY_PATH_OPTIMIZER + + task : PATH_DECIDER + + task : DP_ST_SPEED_OPTIMIZER + + task : QP_SPLINE_PATH_OPTIMIZER + task : QP_SPLINE_ST_SPEED_OPTIMIZER + + dp_poly_path_config { + sample_level: 8 + sample_points_num_each_level: 9 + step_length_max: 15.0 + step_length_min: 8.0 + lateral_sample_offset: 0.5 + lateral_adjust_coeff: 0.5 + eval_time_interval: 0.1 + path_resolution: 0.1 + obstacle_ignore_distance: 20.0 + obstacle_collision_distance: 0.2 + obstacle_risk_distance: 2.0 + obstacle_collision_cost: 1e3 + } + dp_st_speed_config { + total_path_length: 80 + total_time: 8.0 + matrix_dimension_s: 200 + matrix_dimension_t: 20 + + speed_weight: 0.0 + accel_weight: 10.0 + jerk_weight: 10.0 + obstacle_weight: 1.0 + reference_weight: 0.0 + go_down_buffer: 5.0 + go_up_buffer: 5.0 + + default_obstacle_cost: 1e10 + obstacle_cost_factor: -300 + + default_speed_cost: 1.0 + exceed_speed_penalty: 10.0 + low_speed_penalty: 2.5 + + accel_penalty: 2.0 + decel_penalty: 2.0 + + positive_jerk_coeff: 1.0 + negative_jerk_coeff: 300.0 + + max_speed: 20.0 + max_acceleration: 4.5 + max_deceleration: -4.5 + + st_boundary_config { + boundary_buffer: 0.1 + centric_acceleration_limit: 1.0 + minimal_kappa: 0.00001 + point_extension: 1.0 + lowest_speed: 2.5 + } + } + qp_spline_path_config { + spline_order: 6 + number_of_knots: 6 + number_of_fx_constraint_knots: 13 + time_resolution: 0.1 + regularization_weight: 0.1 + derivative_weight: 10.0 + second_derivative_weight: 1.0 + third_derivative_weight: 1.0 + reference_line_weight: 0.5 + num_refline_point: 10 + num_output: 100 + cross_lane_extension_buffer: 0.2 + } + qp_spline_st_speed_config { + total_path_length: 80.0 + total_time: 8.0 + output_time_resolution: 0.05 + number_of_discrete_graph_s: 80 + number_of_discrete_graph_t: 4 + number_of_evaluated_graph_t: 50 + spline_order: 6 + speed_kernel_weight: 0.0 + accel_kernel_weight: 1000.0 + jerk_kernel_weight: 500.0 + follow_weight: 2.0 + stop_weight: 0.2 + cruise_weight: 0.3 + max_speed: 20.0 + preferred_max_acceleration: 1.2 + preferred_min_deceleration: -1.8 + max_acceleration: 2.0 + min_deceleration: -4.5 + follow_drag_distance: 17.0 + + st_boundary_config { + boundary_buffer: 0.1 + centric_acceleration_limit: 1.0 + minimal_kappa: 0.00001 + point_extension: 1.0 + lowest_speed: 2.5 + } + } +} + +reference_line_smoother_config { + num_spline: 7 + spline_order: 7 + num_evaluated_points: 36 + boundary_bound: 0.2 + derivative_bound: 1.0 + second_derivative_bound: 1.0 + third_derivative_bound: 1.0 + ref_line_weight: 0.0 + derivative_weight: 0.0 + second_derivative_weight: 0.0 + third_derivative_weight: 100.0 + num_of_total_points: 500 +} + +rule_config : { + name: "BackSideVehicles" +} + diff --git a/modules/planning/constraint_checker/BUILD b/modules/planning/constraint_checker/BUILD new file mode 100644 index 00000000000..418d2dc232b --- /dev/null +++ b/modules/planning/constraint_checker/BUILD @@ -0,0 +1,23 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "constraint_checker", + srcs = [ + "constraint_checker.cc", + ], + hdrs = [ + "constraint_checker.h", + ], + deps = [ + "//modules/common:log", + "//modules/common/proto:pnc_point_proto", + "//modules/common/vehicle_state", + "//modules/planning/common:planning_gflags", + "//modules/planning/common/trajectory", + "//modules/planning/common/trajectory:discretized_trajectory", + ], +) + +cpplint() diff --git a/modules/planning/constraint_checker/constraint_checker.cc b/modules/planning/constraint_checker/constraint_checker.cc new file mode 100644 index 00000000000..51315ed3dd5 --- /dev/null +++ b/modules/planning/constraint_checker/constraint_checker.cc @@ -0,0 +1,111 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file constraint_checker.cc + **/ + +#include "modules/planning/constraint_checker/constraint_checker.h" + +#include "modules/common/log.h" +#include "modules/planning/common/planning_gflags.h" + +namespace apollo { +namespace planning { + +namespace { +template +bool WithinRange(const T v, const T lower, const T upper) { + return lower <= v && v <= upper; +} +} + +bool ConstraintChecker::ValidTrajectory( + const DiscretizedTrajectory& trajectory) { + const double kMaxCheckRelativeTime = 2.0; + for (const auto& p : trajectory.trajectory_points()) { + double t = p.relative_time(); + if (t > kMaxCheckRelativeTime) { + break; + } + double lon_v = p.v(); + if (!WithinRange(lon_v, FLAGS_speed_lower_bound, FLAGS_speed_upper_bound)) { + AERROR << "Velocity at relative time " << t + << " exceeds bound, value: " << lon_v << ", bound [" + << FLAGS_speed_lower_bound << ", " << FLAGS_speed_upper_bound + << "]."; + return false; + } + + double lon_a = p.a(); + if (!WithinRange(lon_a, FLAGS_longitudinal_acceleration_lower_bound, + FLAGS_longitudinal_acceleration_upper_bound)) { + AERROR << "Longitudinal acceleration at relative time " << t + << " exceeds bound, value: " << lon_a << ", bound [" + << FLAGS_longitudinal_acceleration_lower_bound << ", " + << FLAGS_longitudinal_acceleration_upper_bound << "]."; + return false; + } + + double kappa = p.path_point().kappa(); + if (!WithinRange(kappa, -FLAGS_kappa_bound, FLAGS_kappa_bound)) { + AERROR << "Kappa at relative time " << t + << " exceeds bound, value: " << kappa << ", bound [" + << -FLAGS_kappa_bound << ", " << FLAGS_kappa_bound << "]."; + return false; + } + } + + for (std::size_t i = 1; i < trajectory.NumOfPoints(); ++i) { + const auto& p0 = trajectory.TrajectoryPointAt(i - 1); + const auto& p1 = trajectory.TrajectoryPointAt(i); + + if (p1.relative_time() > kMaxCheckRelativeTime) { + break; + } + + double t = p0.relative_time(); + + double dt = p1.relative_time() - p0.relative_time(); + double d_lon_a = p1.a() - p0.a(); + double lon_jerk = d_lon_a / dt; + if (!WithinRange(d_lon_a / dt, FLAGS_longitudinal_jerk_lower_bound, + FLAGS_longitudinal_jerk_upper_bound)) { + AERROR << "Longitudinal jerk at relative time " << t + << " exceeds bound, value: " << lon_jerk << ", bound [" + << FLAGS_longitudinal_jerk_lower_bound << ", " + << FLAGS_longitudinal_jerk_upper_bound << "]."; + return false; + } + + double d_lat_a = p1.v() * p1.v() * p1.path_point().kappa() - + p0.v() * p0.v() * p0.path_point().kappa(); + double lat_jerk = d_lat_a / dt; + if (!WithinRange(lat_jerk, -FLAGS_lateral_jerk_bound, + FLAGS_lateral_jerk_bound)) { + AERROR << "Lateral jerk at relative time " << t + << " exceeds bound, value: " << lat_jerk << ", bound [" + << -FLAGS_lateral_jerk_bound << ", " << FLAGS_lateral_jerk_bound + << "]."; + return false; + } + } + + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/constraint_checker/constraint_checker.h b/modules/planning/constraint_checker/constraint_checker.h new file mode 100644 index 00000000000..6593c3d8372 --- /dev/null +++ b/modules/planning/constraint_checker/constraint_checker.h @@ -0,0 +1,38 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file constraint_checker.h + **/ + +#ifndef MODULES_PLANNING_CONSTRAINT_CHECKER_CONSTRAINT_CHECKER_H_ +#define MODULES_PLANNING_CONSTRAINT_CHECKER_CONSTRAINT_CHECKER_H_ + +#include "modules/planning/common/trajectory/discretized_trajectory.h" + +namespace apollo { +namespace planning { + +class ConstraintChecker { + public: + ConstraintChecker() = delete; + static bool ValidTrajectory(const DiscretizedTrajectory& trajectory); +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_CONSTRAINT_CHECKER_CONSTRAINT_CHECKER_H_ diff --git a/modules/planning/integration_tests/BUILD b/modules/planning/integration_tests/BUILD new file mode 100644 index 00000000000..5de78fc3f07 --- /dev/null +++ b/modules/planning/integration_tests/BUILD @@ -0,0 +1,64 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "planning_test_base", + srcs = [ + "planning_test_base.cc", + ], + hdrs = [ + "planning_test_base.h", + ], + data = [ + "//modules/map:map_data", + "//modules/planning:planning_conf", + "//modules/planning:planning_testdata", + ], + deps = [ + "//modules/common:log", + "//modules/common/adapters:adapter_manager", + "//modules/common/configs:config_gflags", + "//modules/common/util", + "//modules/common/vehicle_state", + "//modules/planning:planning_impl", + "//modules/planning/proto:dp_poly_path_config_proto", + "//modules/planning/proto:dp_st_speed_config_proto", + "@gtest//:gtest", + ], +) + +cc_test( + name = "garage_test", + size = "small", + srcs = [ + "garage_test.cc", + ], + data = [ + "//modules/common/configs:config_gflags", + "//modules/planning:planning_testdata", + ], + deps = [ + ":planning_test_base", + "@gtest//:main", + ], +) + +cc_test( + name = "sunnyvale_loop_test", + size = "small", + srcs = [ + "sunnyvale_loop_test.cc", + ], + data = [ + "//modules/common/configs:config_gflags", + "//modules/map:map_data", + "//modules/planning:planning_testdata", + ], + deps = [ + ":planning_test_base", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/planning/integration_tests/garage_test.cc b/modules/planning/integration_tests/garage_test.cc new file mode 100644 index 00000000000..6c8fa8a1769 --- /dev/null +++ b/modules/planning/integration_tests/garage_test.cc @@ -0,0 +1,108 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include + +#include "gtest/gtest.h" + +#include "modules/common/configs/config_gflags.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/integration_tests/planning_test_base.h" +#include "modules/planning/planning.h" + +namespace apollo { +namespace planning { + +using common::adapter::AdapterManager; + +DECLARE_string(test_routing_response_file); +DECLARE_string(test_localization_file); +DECLARE_string(test_chassis_file); + +/** + * @class GarageTest + * @brief This is an integration test that uses the garage map. + */ + +class GarageTest : public PlanningTestBase { + public: + virtual void SetUp() { + FLAGS_map_dir = "modules/planning/testdata/garage_map"; + FLAGS_base_map_filename = "base_map.txt"; + FLAGS_test_data_dir = "modules/planning/testdata/garage_test"; + } +}; + +/* + * test stop for not-nudgable obstacle + */ +TEST_F(GarageTest, stop_obstacle) { + FLAGS_test_prediction_file = "stop_obstacle_prediction.pb.txt"; + FLAGS_test_localization_file = "stop_obstacle_localization.pb.txt"; + FLAGS_test_chassis_file = "stop_obstacle_chassis.pb.txt"; + PlanningTestBase::SetUp(); + RUN_GOLDEN_TEST; +} + +/* + * test follow head_vehicle + */ +TEST_F(GarageTest, follow) { + FLAGS_test_prediction_file = "follow_prediction.pb.txt"; + FLAGS_test_localization_file = "follow_localization.pb.txt"; + FLAGS_test_chassis_file = "follow_chassis.pb.txt"; + PlanningTestBase::SetUp(); + RUN_GOLDEN_TEST; +} + +/* + * test stop for destination + */ +TEST_F(GarageTest, stop_dest) { + FLAGS_test_prediction_file = "stop_dest_prediction.pb.txt"; + FLAGS_test_localization_file = "stop_dest_localization.pb.txt"; + FLAGS_test_chassis_file = "stop_dest_chassis.pb.txt"; + PlanningTestBase::SetUp(); + RUN_GOLDEN_TEST; +} + +/* + * test stop for destination + * planning should fail in this case, but the module should not core. + */ +TEST_F(GarageTest, out_of_map) { + FLAGS_test_prediction_file = "out_of_map_prediction.pb.txt"; + FLAGS_test_localization_file = "out_of_map_localization.pb.txt"; + FLAGS_test_chassis_file = "out_of_map_chassis.pb.txt"; + PlanningTestBase::SetUp(); + bool run_planning_success = RunPlanning("out_of_map", 0); + EXPECT_FALSE(run_planning_success); +} + +/* + * test stop passed stop line + */ +TEST_F(GarageTest, stop_over_line) { + std::string seq_num = "1"; + FLAGS_test_prediction_file = seq_num + "_prediction.pb.txt"; + FLAGS_test_localization_file = seq_num + "_localization.pb.txt"; + FLAGS_test_chassis_file = seq_num + "_chassis.pb.txt"; + PlanningTestBase::SetUp(); + RUN_GOLDEN_TEST; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/integration_tests/planning_test_base.cc b/modules/planning/integration_tests/planning_test_base.cc new file mode 100644 index 00000000000..491d1401138 --- /dev/null +++ b/modules/planning/integration_tests/planning_test_base.cc @@ -0,0 +1,208 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/planning/integration_tests/planning_test_base.h" + +#include + +#include "google/protobuf/io/zero_copy_stream_impl.h" +#include "modules/common/log.h" +#include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/planning/common/planning_gflags.h" + +namespace apollo { +namespace planning { + +using common::adapter::AdapterManager; + +DEFINE_string(test_data_dir, "", "the test data folder"); +DEFINE_bool(test_update_golden_log, false, + "true to update decision golden log file."); +DEFINE_string(test_routing_response_file, "garage_routing.pb.txt", + "The routing file used in test"); +DEFINE_string(test_localization_file, "garage_localization.pb.txt", + "The localization test file"); +DEFINE_string(test_chassis_file, "garage_chassis.pb.txt", + "The chassis test file"); +DEFINE_string(test_prediction_file, "", "The prediction module test file"); + +void PlanningTestBase::SetUpTestCase() { + FLAGS_planning_config_file = "modules/planning/conf/planning_config.pb.txt"; + FLAGS_adapter_config_filename = "modules/planning/testdata/conf/adapter.conf"; + FLAGS_map_dir = "modules/planning/testdata"; + FLAGS_test_localization_file = "garage_localization.pb.txt"; + FLAGS_test_chassis_file = "garage_chassis.pb.txt"; + FLAGS_test_prediction_file = "garage_prediction.pb.txt"; + FLAGS_align_prediction_time = false; + FLAGS_enable_reference_line_provider_thread = false; + FLAGS_enable_trajectory_check = true; +} + +bool PlanningTestBase::SetUpAdapters() { + if (!AdapterManager::Initialized()) { + AdapterManager::Init(FLAGS_adapter_config_filename); + } + if (!AdapterManager::GetRoutingResponse()) { + AERROR << "routing is not registered in adapter manager, check adapter " + "config file." + << FLAGS_adapter_config_filename; + return false; + } + auto routing_response_file = + FLAGS_test_data_dir + "/" + FLAGS_test_routing_response_file; + if (!AdapterManager::FeedRoutingResponseFile(routing_response_file)) { + AERROR << "failed to routing file: " << routing_response_file; + return false; + } + AINFO << "Using Routing " << routing_response_file; + auto localization_file = + FLAGS_test_data_dir + "/" + FLAGS_test_localization_file; + if (!AdapterManager::FeedLocalizationFile(localization_file)) { + AERROR << "Failed to load localization file: " << localization_file; + return false; + } + AINFO << "Using Localization file: " << localization_file; + auto chassis_file = FLAGS_test_data_dir + "/" + FLAGS_test_chassis_file; + if (!AdapterManager::FeedChassisFile(chassis_file)) { + AERROR << "Failed to load chassis file: " << chassis_file; + return false; + } + AINFO << "Using Chassis file: " << chassis_file; + auto prediction_file = FLAGS_test_data_dir + "/" + FLAGS_test_prediction_file; + if (!FLAGS_test_prediction_file.empty() && + !AdapterManager::FeedPredictionFile(prediction_file)) { + AERROR << "Failed to load prediction file: " << prediction_file; + return false; + } + AINFO << "Using Prediction file: " << prediction_file; + return true; +} + +void PlanningTestBase::SetUp() { + planning_.Stop(); + CHECK(SetUpAdapters()) << "Failed to setup adapters"; + planning_.Init(); +} + +void PlanningTestBase::TrimPlanning(ADCTrajectory* origin) { + origin->clear_latency_stats(); + origin->clear_debug(); + origin->mutable_header()->clear_radar_timestamp(); + origin->mutable_header()->clear_lidar_timestamp(); + origin->mutable_header()->clear_timestamp_sec(); + origin->mutable_header()->clear_camera_timestamp(); + origin->mutable_header()->clear_sequence_num(); +} + +bool PlanningTestBase::RunPlanning(const std::string& test_case_name, + int case_num) { + const std::string golden_result_file = apollo::common::util::StrCat( + "result_", test_case_name, "_", case_num, ".pb.txt"); + + std::string full_golden_path = FLAGS_test_data_dir + "/" + golden_result_file; + planning_.RunOnce(); + + const ADCTrajectory* trajectory_pointer = + AdapterManager::GetPlanning()->GetLatestPublished(); + + if (!trajectory_pointer) { + AERROR << " did not get latest adc trajectory"; + return false; + } + + if (!IsValidTrajectory(*trajectory_pointer)) { + AERROR << "Fail to pass trajectory check."; + return false; + } + + adc_trajectory_ = *trajectory_pointer; + TrimPlanning(&adc_trajectory_); + if (FLAGS_test_update_golden_log) { + AINFO << "The golden file is regenerated:" << full_golden_path; + common::util::SetProtoToASCIIFile(adc_trajectory_, full_golden_path); + } else { + ADCTrajectory golden_result; + bool load_success = + common::util::GetProtoFromASCIIFile(full_golden_path, &golden_result); + TrimPlanning(&golden_result); + if (!load_success || + !common::util::IsProtoEqual(golden_result, adc_trajectory_)) { + char tmp_fname[100] = "/tmp/XXXXXX"; + int fd = mkstemp(tmp_fname); + if (!common::util::SetProtoToASCIIFile(adc_trajectory_, fd)) { + AERROR << "Failed to write to file " << tmp_fname; + } + AERROR << "found\ndiff " << tmp_fname << " " << full_golden_path; + AERROR << "visualize diff\npython " + "modules/tools/plot_trace/plot_planning_result.py " + << tmp_fname << " " << full_golden_path; + return false; + } + } + return true; +} + +bool PlanningTestBase::IsValidTrajectory(const ADCTrajectory& trajectory) { + if (trajectory.trajectory_point().empty()) { + AERROR << "trajectory has NO point."; + return false; + } + + for (int i = 0; i < trajectory.trajectory_point_size(); ++i) { + const auto& point = trajectory.trajectory_point(i); + + const double kMaxAccelThreshold = + FLAGS_longitudinal_acceleration_upper_bound; + const double kMinAccelThreshold = + FLAGS_longitudinal_acceleration_lower_bound; + if (point.a() > kMaxAccelThreshold || point.a() < kMinAccelThreshold) { + AERROR << "Invalid trajectory point because accel out of range: " + << point.DebugString(); + return false; + } + + if (!point.has_path_point()) { + AERROR << "Invalid trajectory point because NO path_point in " + "trajectory_point: " + << point.DebugString(); + return false; + } + + const double kDkappaThreshold = 0.1; + if (point.path_point().dkappa() > kDkappaThreshold || + point.path_point().dkappa() < -kDkappaThreshold) { + AERROR << "Invalid trajectory point because dkappa out of range: " + << point.DebugString(); + return false; + } + + if (i > 0) { + const double kPathSEpsilon = 1e-3; + const auto& last_point = trajectory.trajectory_point(i - 1); + if (point.path_point().s() + kPathSEpsilon < + last_point.path_point().s()) { + AERROR << "Invalid trajectory point because s value error. last point: " + << last_point.DebugString() + << ", curr point: " << point.DebugString(); + return false; + } + } + } + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/integration_tests/planning_test_base.h b/modules/planning/integration_tests/planning_test_base.h new file mode 100644 index 00000000000..c239122389e --- /dev/null +++ b/modules/planning/integration_tests/planning_test_base.h @@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include + +#include "gtest/gtest.h" + +#include "modules/planning/proto/dp_poly_path_config.pb.h" +#include "modules/planning/proto/dp_st_speed_config.pb.h" + +#include "modules/common/adapters/adapter_gflags.h" +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/configs/config_gflags.h" +#include "modules/common/log.h" +#include "modules/common/util/file.h" +#include "modules/planning/planning.h" + +namespace apollo { +namespace planning { + +using common::adapter::AdapterManager; + +#define RUN_GOLDEN_TEST \ + { \ + const ::testing::TestInfo* const test_info = \ + ::testing::UnitTest::GetInstance()->current_test_info(); \ + bool run_planning_success = RunPlanning(test_info->name(), 0); \ + EXPECT_TRUE(run_planning_success); \ + } + +DECLARE_string(test_routing_response_file); +DECLARE_string(test_localization_file); +DECLARE_string(test_chassis_file); +DECLARE_string(test_data_dir); +DECLARE_string(test_prediction_file); + +class PlanningTestBase : public ::testing::Test { + public: + static void SetUpTestCase(); + + virtual void SetUp(); + + /** + * Execute the planning code. + * @return true if planning is success. The ADCTrajectory will be used to + * store the planing results. Otherwise false. + */ + bool RunPlanning(const std::string& test_case_name, int case_num); + + protected: + void TrimPlanning(ADCTrajectory* origin); + bool SetUpAdapters(); + bool IsValidTrajectory(const ADCTrajectory& trajectory); + + Planning planning_; + ADCTrajectory adc_trajectory_; +}; + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/integration_tests/sunnyvale_loop_test.cc b/modules/planning/integration_tests/sunnyvale_loop_test.cc new file mode 100644 index 00000000000..f156252c8ee --- /dev/null +++ b/modules/planning/integration_tests/sunnyvale_loop_test.cc @@ -0,0 +1,141 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include + +#include "gtest/gtest.h" + +#include "modules/common/configs/config_gflags.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/integration_tests/planning_test_base.h" +#include "modules/planning/planning.h" + +namespace apollo { +namespace planning { + +/** + * @class SunnyvaleLoopTest + * @brief This is an integration test that uses the sunnyvale_loop map. + */ + +class SunnyvaleLoopTest : public PlanningTestBase { + public: + virtual void SetUp() { + FLAGS_map_dir = "modules/map/data/sunnyvale_loop"; + FLAGS_test_data_dir = "modules/planning/testdata/sunnyvale_loop_test"; + } +}; + +/* + * test stop for not-nudgable obstacle + * A cruise test case + */ +TEST_F(SunnyvaleLoopTest, cruise) { + std::string seq_num = "1"; + FLAGS_test_routing_response_file = seq_num + "_routing.pb.txt"; + FLAGS_test_prediction_file = seq_num + "_prediction.pb.txt"; + FLAGS_test_localization_file = seq_num + "_localization.pb.txt"; + FLAGS_test_chassis_file = seq_num + "_chassis.pb.txt"; + PlanningTestBase::SetUp(); + RUN_GOLDEN_TEST; +} + +/* + * stop case to trigger QP ST failed to solve + */ +TEST_F(SunnyvaleLoopTest, stop) { + std::string seq_num = "2"; + FLAGS_test_routing_response_file = seq_num + "_routing.pb.txt"; + FLAGS_test_prediction_file = seq_num + "_prediction.pb.txt"; + FLAGS_test_localization_file = seq_num + "_localization.pb.txt"; + FLAGS_test_chassis_file = seq_num + "_chassis.pb.txt"; + FLAGS_test_routing_response_file = seq_num + "_routing.pb.txt"; + PlanningTestBase::SetUp(); + RUN_GOLDEN_TEST; +} + +/* + * test follow a vehicle with medium distance + * A follow test case + */ +TEST_F(SunnyvaleLoopTest, follow_01) { + std::string seq_num = "3"; + FLAGS_test_routing_response_file = seq_num + "_routing.pb.txt"; + FLAGS_test_prediction_file = seq_num + "_prediction.pb.txt"; + FLAGS_test_localization_file = seq_num + "_localization.pb.txt"; + FLAGS_test_chassis_file = seq_num + "_chassis.pb.txt"; + PlanningTestBase::SetUp(); + RUN_GOLDEN_TEST; +} + +/* + * test nudge a static vehicle with medium distance + * A nudge test case + */ +TEST_F(SunnyvaleLoopTest, nudge) { + std::string seq_num = "4"; + FLAGS_test_routing_response_file = seq_num + "_routing.pb.txt"; + FLAGS_test_prediction_file = seq_num + "_prediction.pb.txt"; + FLAGS_test_localization_file = seq_num + "_localization.pb.txt"; + FLAGS_test_chassis_file = seq_num + "_chassis.pb.txt"; + PlanningTestBase::SetUp(); + RUN_GOLDEN_TEST; +} + +/* + * test follow a vehicle at right turn + * A follow test case + */ +TEST_F(SunnyvaleLoopTest, follow_02) { + std::string seq_num = "5"; + FLAGS_test_routing_response_file = seq_num + "_routing.pb.txt"; + FLAGS_test_prediction_file = seq_num + "_prediction.pb.txt"; + FLAGS_test_localization_file = seq_num + "_localization.pb.txt"; + FLAGS_test_chassis_file = seq_num + "_chassis.pb.txt"; + PlanningTestBase::SetUp(); + RUN_GOLDEN_TEST; +} + +/* + * test follow a vehicle at right turn with a close leading vehicle + * A follow test case + */ +TEST_F(SunnyvaleLoopTest, follow_03) { + std::string seq_num = "6"; + FLAGS_test_routing_response_file = seq_num + "_routing.pb.txt"; + FLAGS_test_prediction_file = seq_num + "_prediction.pb.txt"; + FLAGS_test_localization_file = seq_num + "_localization.pb.txt"; + FLAGS_test_chassis_file = seq_num + "_chassis.pb.txt"; + PlanningTestBase::SetUp(); + RUN_GOLDEN_TEST; +} + +/* + * test slowdown when dp_st_graph is failed. + * A slowdown test case + */ +TEST_F(SunnyvaleLoopTest, slowdown_01) { + std::string seq_num = "7"; + FLAGS_test_routing_response_file = seq_num + "_routing.pb.txt"; + FLAGS_test_prediction_file = seq_num + "_prediction.pb.txt"; + FLAGS_test_localization_file = seq_num + "_localization.pb.txt"; + FLAGS_test_chassis_file = seq_num + "_chassis.pb.txt"; + PlanningTestBase::SetUp(); + RUN_GOLDEN_TEST; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/main.cc b/modules/planning/main.cc index f3909a2bff9..aaaa6de4828 100644 --- a/modules/planning/main.cc +++ b/modules/planning/main.cc @@ -14,20 +14,7 @@ * limitations under the License. *****************************************************************************/ -#include "modules/planning/planning_node.h" +#include "modules/common/apollo_app.h" +#include "modules/planning/planning.h" -#include "gflags/gflags.h" -#include "modules/common/log.h" -#include "ros/include/ros/ros.h" - -int main(int argc, char **argv) { - google::InitGoogleLogging(argv[0]); - google::ParseCommandLineFlags(&argc, &argv, true); - - ros::init(argc, argv, "planning"); - - ::apollo::planning::PlanningNode planning_node; - planning_node.Run(); - - return 0; -} +APOLLO_MAIN(apollo::planning::Planning) diff --git a/modules/planning/math/BUILD b/modules/planning/math/BUILD new file mode 100644 index 00000000000..4204f8aeaf2 --- /dev/null +++ b/modules/planning/math/BUILD @@ -0,0 +1,63 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "double", + srcs = [ + "double.cc", + ], + hdrs = [ + "double.h", + ], + deps = [ + "//modules/common:log", + ], +) + +cc_library( + name = "curve_math", + srcs = [ + "curve_math.cc", + ], + hdrs = [ + "curve_math.h", + ], +) + +cc_test( + name = "curve_math_test", + size = "small", + srcs = [ + "curve_math_test.cc", + ], + deps = [ + ":curve_math", + "@gtest//:main", + ], +) + +cc_library( + name = "polynomial_xd", + srcs = [ + "polynomial_xd.cc", + ], + hdrs = [ + "polynomial_xd.h", + ], + deps = [ + "//modules/common:log", + ], +) + +cc_library( + name = "hermite_spline", + hdrs = [ + "hermite_spline.h", + ], + deps = [ + "//modules/common:log", + ], +) + +cpplint() diff --git a/modules/planning/math/curve1d/BUILD b/modules/planning/math/curve1d/BUILD new file mode 100644 index 00000000000..c370ca91ab9 --- /dev/null +++ b/modules/planning/math/curve1d/BUILD @@ -0,0 +1,52 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "curve1d", + hdrs = [ + "curve1d.h", + ], +) + +cc_library( + name = "polynomial_curve1d", + hdrs = [ + "polynomial_curve1d.h", + ], + deps = [ + ":curve1d", + ], +) + +cc_library( + name = "quartic_polynomial_curve1d", + srcs = [ + "quartic_polynomial_curve1d.cc", + ], + hdrs = [ + "quartic_polynomial_curve1d.h", + ], + deps = [ + ":polynomial_curve1d", + "//modules/common:log", + "//modules/common/util:string_util", + ], +) + +cc_library( + name = "quintic_polynomial_curve1d", + srcs = [ + "quintic_polynomial_curve1d.cc", + ], + hdrs = [ + "quintic_polynomial_curve1d.h", + ], + deps = [ + ":polynomial_curve1d", + "//modules/common:log", + "//modules/common/util:string_util", + ], +) + +cpplint() diff --git a/modules/planning/math/curve1d/curve1d.h b/modules/planning/math/curve1d/curve1d.h new file mode 100644 index 00000000000..26b7a0aa1dc --- /dev/null +++ b/modules/planning/math/curve1d/curve1d.h @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file curve1d.h + **/ + +#ifndef MODULES_PLANNING_MATH_CURVE1D_CURVE1D_H_ +#define MODULES_PLANNING_MATH_CURVE1D_CURVE1D_H_ + +#include + +namespace apollo { +namespace planning { + +// Base type for various types of 1-dimensional curves + +class Curve1d { + public: + Curve1d() = default; + + virtual ~Curve1d() = default; + + virtual double Evaluate(const std::uint32_t order, + const double param) const = 0; + + virtual double param_length() const = 0; + + virtual std::string to_string() const = 0; +}; + +} // namespace planning +} // namespace apollo + +#endif /* MODULES_PLANNING_MATH_CURVE1D_CURVE1D_H_ */ diff --git a/modules/planning/math/curve1d/polynomial_curve1d.h b/modules/planning/math/curve1d/polynomial_curve1d.h new file mode 100644 index 00000000000..78a5beeb4eb --- /dev/null +++ b/modules/planning/math/curve1d/polynomial_curve1d.h @@ -0,0 +1,39 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file polynomial_curve1d.h + **/ + +#ifndef MODULES_PLANNING_MATH_CURVE1D_POLYNOMIAL_CURVE1D_H_ +#define MODULES_PLANNING_MATH_CURVE1D_POLYNOMIAL_CURVE1D_H_ + +#include "modules/planning/math/curve1d/curve1d.h" + +namespace apollo { +namespace planning { + +class PolynomialCurve1d : public Curve1d { + public: + PolynomialCurve1d() = default; + + virtual ~PolynomialCurve1d() = default; +}; + +} // namespace planning +} // namespace apollo + +#endif /* MODULES_PLANNING_MATH_CURVE1D_POLYNOMIAL_CURVE1D_H_ */ diff --git a/modules/planning/math/curve1d/quartic_polynomial_curve1d.cc b/modules/planning/math/curve1d/quartic_polynomial_curve1d.cc new file mode 100644 index 00000000000..55a3fb21ed6 --- /dev/null +++ b/modules/planning/math/curve1d/quartic_polynomial_curve1d.cc @@ -0,0 +1,111 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file quartic_polynomial_curve1d.cc + **/ + +#include "modules/planning/math/curve1d/quartic_polynomial_curve1d.h" + +#include + +#include "modules/common/log.h" +#include "modules/common/util/string_util.h" + +namespace apollo { +namespace planning { + +QuarticPolynomialCurve1d::QuarticPolynomialCurve1d( + const std::array& start, const std::array& end, + const double param) + : QuarticPolynomialCurve1d(start[0], start[1], start[2], end[0], end[1], + param) {} + +QuarticPolynomialCurve1d::QuarticPolynomialCurve1d( + const double x0, const double dx0, const double ddx0, const double dx1, + const double ddx1, const double param) { + compute_coefficients(x0, dx0, ddx0, dx1, ddx1, param); + start_condition_[0] = x0; + start_condition_[1] = dx0; + start_condition_[2] = ddx0; + end_condition_[0] = dx1; + end_condition_[1] = ddx1; +} + +QuarticPolynomialCurve1d::QuarticPolynomialCurve1d( + const QuarticPolynomialCurve1d& other) { + param_ = other.param_; + coef_ = other.coef_; +} + +double QuarticPolynomialCurve1d::Evaluate(const std::uint32_t order, + const double p) const { + switch (order) { + case 0: { + return (((coef_[0] * p + coef_[1]) * p + coef_[2]) * p + coef_[3]) * p + + coef_[4]; + } + case 1: { + return ((4.0 * coef_[0] * p + 3.0 * coef_[1]) * p + 2.0 * coef_[2]) * p + + coef_[3]; + } + case 2: { + return (12.0 * coef_[0] * p + 6.0 * coef_[1]) * p + 2.0 * coef_[2]; + } + case 3: { + return 24.0 * coef_[0] * p + 6.0 * coef_[1]; + } + case 4: { + return 24.0 * coef_[0]; + } + default: + return 0.0; + } +} + +double QuarticPolynomialCurve1d::param_length() const { return param_; } + +void QuarticPolynomialCurve1d::compute_coefficients( + const double x0, const double dx0, const double ddx0, const double dx1, + const double ddx1, const double p) { + CHECK_GT(p, 0.0); + + param_ = p; + + coef_[4] = x0; + + coef_[3] = dx0; + + coef_[2] = 0.5 * ddx0; + + double b0 = dx1 - ddx0 * p - dx0; + double b1 = ddx1 - ddx0; + + double p2 = p * p; + double p3 = p2 * p; + + coef_[0] = -0.5 / p3 * b0 + 0.25 / p2 * b1; + + coef_[1] = b0 / p2 - b1 / 3.0 / p; +} + +std::string QuarticPolynomialCurve1d::to_string() const { + return apollo::common::util::StrCat( + apollo::common::util::PrintIter(coef_, "\t"), param_, "\n"); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/curve1d/quartic_polynomial_curve1d.h b/modules/planning/math/curve1d/quartic_polynomial_curve1d.h new file mode 100644 index 00000000000..381f316e7f1 --- /dev/null +++ b/modules/planning/math/curve1d/quartic_polynomial_curve1d.h @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file quartic_polynomial_curve1d.h + **/ + +#ifndef MODULES_PLANNING_MATH_CURVE1D_QUARTIC_POLYNOMIAL_CURVE1D_H_ +#define MODULES_PLANNING_MATH_CURVE1D_QUARTIC_POLYNOMIAL_CURVE1D_H_ + +#include +#include + +#include "modules/planning/math/curve1d/polynomial_curve1d.h" + +namespace apollo { +namespace planning { + +// 1D quartic polynomial curve: (x0, dx0, ddx0) -- [0, param] --> (dx1, ddx1) +class QuarticPolynomialCurve1d : public PolynomialCurve1d { + public: + QuarticPolynomialCurve1d() = default; + + QuarticPolynomialCurve1d(const std::array& start, + const std::array& end, + const double param); + + QuarticPolynomialCurve1d(const double x0, const double dx0, const double ddx0, + const double dx1, const double ddx1, + const double param); + + QuarticPolynomialCurve1d(const QuarticPolynomialCurve1d& other); + + virtual ~QuarticPolynomialCurve1d() = default; + + double Evaluate(const std::uint32_t order, const double p) const override; + + double param_length() const override; + + std::string to_string() const override; + + private: + void compute_coefficients(const double x0, const double dx0, + const double ddx0, const double dx1, + const double ddx1, const double param); + + double param_ = 0.0; + + std::array coef_{{0.0, 0.0, 0.0, 0.0, 0.0}}; + + std::array start_condition_{{0.0, 0.0, 0.0}}; + + std::array end_condition_{{0.0, 0.0}}; +}; + +} // namespace planning +} // namespace apollo + +#endif /* MODULES_PLANNING_MATH_CURVE1D_QUARTIC_POLYNOMIAL_CURVE1D_H_ */ diff --git a/modules/planning/math/curve1d/quintic_polynomial_curve1d.cc b/modules/planning/math/curve1d/quintic_polynomial_curve1d.cc new file mode 100644 index 00000000000..d1c432b73f6 --- /dev/null +++ b/modules/planning/math/curve1d/quintic_polynomial_curve1d.cc @@ -0,0 +1,121 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file quintic_polynomial_curve1d.cc + **/ + +#include "modules/planning/math/curve1d/quintic_polynomial_curve1d.h" + +#include "modules/common/log.h" +#include "modules/common/util/string_util.h" + +namespace apollo { +namespace planning { + +QuinticPolynomialCurve1d::QuinticPolynomialCurve1d( + const std::array& start, const std::array& end, + const double param) + : QuinticPolynomialCurve1d(start[0], start[1], start[2], end[0], end[1], + end[2], param) {} + +QuinticPolynomialCurve1d::QuinticPolynomialCurve1d( + const double x0, const double dx0, const double ddx0, const double x1, + const double dx1, const double ddx1, const double param) + : param_(param) { + compute_coefficients(x0, dx0, ddx0, x1, dx1, ddx1, param); + start_condition_[0] = x0; + start_condition_[1] = dx0; + start_condition_[2] = ddx0; + end_condition_[0] = x1; + end_condition_[1] = dx1; + end_condition_[2] = ddx1; +} + +QuinticPolynomialCurve1d::QuinticPolynomialCurve1d( + const QuinticPolynomialCurve1d& other) { + param_ = other.param_; + coef_ = other.coef_; + return; +} + +double QuinticPolynomialCurve1d::Evaluate(const uint32_t order, + const double p) const { + switch (order) { + case 0: { + return ((((coef_[0] * p + coef_[1]) * p + coef_[2]) * p + coef_[3]) * p + + coef_[4]) * + p + + coef_[5]; + } + case 1: { + return (((5.0 * coef_[0] * p + 4.0 * coef_[1]) * p + 3.0 * coef_[2]) * p + + 2.0 * coef_[3]) * + p + + coef_[4]; + } + case 2: { + return (((20.0 * coef_[0] * p + 12.0 * coef_[1]) * p) + 6.0 * coef_[2]) * + p + + 2.0 * coef_[3]; + } + case 3: { + return (60.0 * coef_[0] * p + 24.0 * coef_[1]) * p + 6.0 * coef_[2]; + } + case 4: { + return 120.0 * coef_[0] * p + 24.0 * coef_[1]; + } + case 5: { + return 120.0 * coef_[0]; + } + default: + return 0.0; + } +} + +void QuinticPolynomialCurve1d::compute_coefficients( + const double x0, const double dx0, const double ddx0, const double x1, + const double dx1, const double ddx1, const double p) { + CHECK_GT(p, 0.0); + + coef_[5] = x0; + coef_[4] = dx0; + coef_[3] = ddx0 / 2.0; + + double p2 = p * p; + double p3 = p * p2; + + // the direct analytical method is at least 6 times faster than using matrix + // inversion. + double c0 = (x1 - 0.5 * p2 * ddx0 - dx0 * p - x0) / p3; + double c1 = (dx1 - ddx0 * p - dx0) / p2; + double c2 = (ddx1 - ddx0) / p; + + coef_[0] = (6.0 * c0 - 3.0 * c1 + 0.5 * c2) / p2; + coef_[1] = (-15.0 * c0 + 7.0 * c1 - c2) / p; + coef_[2] = 0.5 * (20.0 * c0 - 8.0 * c1 + c2); + return; +} + +double QuinticPolynomialCurve1d::param_length() const { return param_; } + +std::string QuinticPolynomialCurve1d::to_string() const { + return apollo::common::util::StrCat( + apollo::common::util::PrintIter(coef_, "\t"), param_, "\n"); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/curve1d/quintic_polynomial_curve1d.h b/modules/planning/math/curve1d/quintic_polynomial_curve1d.h new file mode 100644 index 00000000000..cea95232b58 --- /dev/null +++ b/modules/planning/math/curve1d/quintic_polynomial_curve1d.h @@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file quintic_polynomial_curve1d.h + **/ + +#ifndef MODULES_PLANNING_MATH_CURVE1D_QUINTIC_POLYNOMIAL_CURVE1D_H_ +#define MODULES_PLANNING_MATH_CURVE1D_QUINTIC_POLYNOMIAL_CURVE1D_H_ + +#include +#include + +#include "modules/planning/math/curve1d/polynomial_curve1d.h" + +namespace apollo { +namespace planning { + +// 1D quintic polynomial curve: (x0, dx0, ddx0) -- [0, param] --> (x1, dx1, +// ddx1) +class QuinticPolynomialCurve1d : public PolynomialCurve1d { + public: + QuinticPolynomialCurve1d() = default; + + QuinticPolynomialCurve1d(const std::array& start, + const std::array& end, + const double param); + + QuinticPolynomialCurve1d(const double x0, const double dx0, const double ddx0, + const double x1, const double dx1, const double ddx1, + const double param); + + QuinticPolynomialCurve1d(const QuinticPolynomialCurve1d& other); + + virtual ~QuinticPolynomialCurve1d() = default; + + double Evaluate(const std::uint32_t order, const double p) const override; + + double param_length() const override; + + std::string to_string() const override; + + private: + void compute_coefficients(const double x0, const double dx0, + const double ddx0, const double x1, + const double dx1, const double ddx1, + const double param); + + double param_ = 0.0; + + std::array coef_{{0.0, 0.0, 0.0, 0.0, 0.0, 0.0}}; + + std::array start_condition_{{0.0, 0.0, 0.0}}; + + std::array end_condition_{{0.0, 0.0, 0.0}}; +}; + +} // namespace planning +} // namespace apollo + +#endif /* MODULES_PLANNING_MATH_CURVE1D_QUINTIC_POLYNOMIAL_CURVE1D_H_ */ diff --git a/modules/planning/math/curve_math.cc b/modules/planning/math/curve_math.cc new file mode 100644 index 00000000000..3713f8460b3 --- /dev/null +++ b/modules/planning/math/curve_math.cc @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file curvature.cc + **/ +#include "modules/planning/math/curve_math.h" + +#include + +namespace apollo { +namespace planning { + +double CurveMath::ComputeCurvature(const double dx, const double d2x, + const double dy, const double d2y) { + double a = dx * d2y - dy * d2x; + double dx_dy_norm_square = dx * dx + dy * dy; + double dx_dy_norm = std::sqrt(dx_dy_norm_square); + double b = dx_dy_norm_square * dx_dy_norm; + return a / b; +} + +double CurveMath::ComputeCurvatureDerivative(const double dx, const double d2x, + const double d3x, const double dy, + const double d2y, + const double d3y) { + double a = dx * d2y - dy * d2x; + double dx_dy_norm_square = dx * dx + dy * dy; + double dx_dy_norm = std::sqrt(dx_dy_norm_square); + double b = dx_dy_norm_square * dx_dy_norm; + + double a_dot = dx * d3y - dy * d3x; + double b_dot = 3.0 * dx_dy_norm * (dx * d2x + dy * d2y); + + double dkappa = + (a_dot * b - a * b_dot) / + (dx_dy_norm_square * dx_dy_norm_square * dx_dy_norm_square * dx_dy_norm); + return dkappa; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/curve_math.h b/modules/planning/math/curve_math.h new file mode 100644 index 00000000000..d4b4304e382 --- /dev/null +++ b/modules/planning/math/curve_math.h @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file curve_math.h + **/ + +#ifndef MODULES_PLANNING_MATH_CURVE_MATH_H_ +#define MODULES_PLANNING_MATH_CURVE_MATH_H_ + +namespace apollo { +namespace planning { + +class CurveMath { + public: + CurveMath() = delete; + /** + * @brief Compute the curvature (kappa) given curve X = (x(t), y(t)) + * which t is an arbitrary parameter. + * @param dx dx / dt + * @param d2x d(dx) / dt + * @param dy dy / dt + * @param d2y d(dy) / dt + * @return the curvature + */ + static double ComputeCurvature(const double dx, const double d2x, + const double dy, const double d2y); + + /** + * @brief Compute the curvature change rate w.r.t. curve length (dkappa) given + * curve X = (x(t), y(t)) + * which t is an arbitrary parameter. + * @param dx dx / dt + * @param d2x d(dx) / dt + * @param dy dy / dt + * @param d2y d(dy) / dt + * @param d3x d(d2x) / dt + * @param d3y d(d2y) / dt + * @return the curvature change rate + */ + static double ComputeCurvatureDerivative(const double dx, const double d2x, + const double d3x, const double dy, + const double d2y, const double d3y); +}; + +} // namespace planning +} // namespace apollo + +#endif /* MODULES_PLANNING_MATH_CURVE_MATH_H_ */ diff --git a/modules/planning/math/curve_math_test.cc b/modules/planning/math/curve_math_test.cc new file mode 100644 index 00000000000..a09af4b3f1d --- /dev/null +++ b/modules/planning/math/curve_math_test.cc @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file curvature_math_test.cc + **/ +#include "modules/planning/math/curve_math.h" + +#include + +#include "gtest/gtest.h" + +namespace apollo { +namespace planning { + +TEST(TestSuite, curvature_math_test) { + // Straight line + double curvature = CurveMath::ComputeCurvature(1.0, 0.0, 1.0, 0.0); + EXPECT_NEAR(curvature, 0.0, 1e-6); + + double curvature_derivative = + CurveMath::ComputeCurvatureDerivative(1.0, 0.0, 0.0, 1.0, 0.0, 0.0); + EXPECT_NEAR(curvature_derivative, 0.0, 1e-6); + + // Unit circle X = (cos(t), sin(t)), at t = 0.0 + curvature = CurveMath::ComputeCurvature(0.0, -1, 1.0, 0.0); + EXPECT_NEAR(curvature, 1.0, 1e-6); + + // Unit circle X = (cos(t), sin(t)), at t = PI/4, + double cos_angle = cos(M_PI / 4); + double sin_angle = sin(M_PI / 4); + curvature = CurveMath::ComputeCurvature(-sin_angle, -cos_angle, cos_angle, + -sin_angle); + EXPECT_NEAR(curvature, 1.0, 1e-6); + + curvature_derivative = CurveMath::ComputeCurvatureDerivative( + -sin_angle, -cos_angle, sin_angle, cos_angle, -sin_angle, -cos_angle); + EXPECT_NEAR(curvature_derivative, 0.0, 1e-6); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/double.cc b/modules/planning/math/double.cc new file mode 100644 index 00000000000..34db11e1083 --- /dev/null +++ b/modules/planning/math/double.cc @@ -0,0 +1,158 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/planning/math/double.h" + +#include + +#include "modules/common/log.h" + +namespace apollo { +namespace planning { + +Double::Double(const double value) : value_(value) { + CHECK(!std::isnan(value)); +} + +double Double::Value() const { return value_; } + +int Double::Compare(const double d1, const double d2, const double epsilon) { + CHECK(!std::isnan(d1)); + CHECK(!std::isnan(d2)); + + if (DefinitelyGreaterThan(d1, d2, epsilon)) { + return 1; + } else if (DefinitelyLessThan(d1, d2, epsilon)) { + return -1; + } else { + return 0; + } +} + +int Double::Compare(const double d1, const double d2) { + return Compare(d1, d2, kEpsilon_); +} + +int Double::Compare(const Double& d1, const Double& d2, const double epsilon) { + return Compare(d1.Value(), d2.Value(), epsilon); +} + +int Double::Compare(const Double& d1, const Double& d2) { + return Compare(d1.Value(), d2.Value()); +} + +int Double::CompareTo(const double d1, const double epsilon) const { + CHECK(!std::isnan(d1)); + if (DefinitelyGreaterThan(value_, d1, epsilon)) { + return 1; + } else if (DefinitelyLessThan(value_, d1, epsilon)) { + return -1; + } else { + return 0; + } +} + +int Double::CompareTo(const double d1) const { + return CompareTo(d1, kEpsilon_); +} + +int Double::CompareTo(const Double& d1, const double epsilon) const { + return CompareTo(d1.Value(), epsilon); +} + +int Double::CompareTo(const Double& d1) const { + return CompareTo(d1.Value(), kEpsilon_); +} + +Double& Double::operator=(const Double& other) { + value_ = other.Value(); + return *this; +} + +Double Double::operator+(const Double& other) const { + return Double(value_ + other.Value()); +} + +Double Double::operator-(const Double& other) const { + return Double(value_ - other.Value()); +} + +Double Double::operator*(const Double& other) const { + return Double(value_ * other.Value()); +} + +Double Double::operator/(const Double& other) const { + return Double(value_ / other.Value()); +} + +Double& Double::operator+=(const Double& other) { + value_ += other.Value(); + return *this; +} + +Double& Double::operator-=(const Double& other) { + value_ -= other.Value(); + return *this; +} + +Double& Double::operator*=(const Double& other) { + value_ *= other.Value(); + return *this; +} + +Double& Double::operator/=(const Double& other) { + value_ /= other.Value(); + return *this; +} + +bool Double::operator>(const Double& other) const { + return DefinitelyGreaterThan(value_, other.Value(), kEpsilon_); +} + +bool Double::operator>=(const Double& other) const { + return !((*this) < other); +} + +bool Double::operator<(const Double& other) const { + return DefinitelyLessThan(value_, other.Value(), kEpsilon_); +} + +bool Double::operator<=(const Double& other) const { + return !((*this) > other); +} + +bool Double::operator==(const Double& other) const { + return EssentiallyEqual(value_, other.Value(), kEpsilon_); +} + +bool Double::ApproximatelyEqual(double a, double b, double epsilon) { + return std::fabs(a - b) <= std::fmax(std::fabs(a), std::fabs(b)) * epsilon; +} + +bool Double::EssentiallyEqual(double a, double b, double epsilon) { + return std::fabs(a - b) <= std::fmin(std::fabs(a), std::fabs(b)) * epsilon; +} + +bool Double::DefinitelyGreaterThan(double a, double b, double epsilon) { + return (a - b) > std::fmax(std::fabs(a), std::fabs(b)) * epsilon; +} + +bool Double::DefinitelyLessThan(double a, double b, double epsilon) { + return (b - a) > std::fmax(std::fabs(a), std::fabs(b)) * epsilon; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/double.h b/modules/planning/math/double.h new file mode 100644 index 00000000000..adda0a56ad0 --- /dev/null +++ b/modules/planning/math/double.h @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file double.h + **/ + +#ifndef MODULES_PLANNING_MATH_DOUBLE_H_ +#define MODULES_PLANNING_MATH_DOUBLE_H_ + +#include +#include + +namespace apollo { +namespace planning { + +class Double { + public: + explicit Double(const double value); + ~Double() = default; + + double Value() const; + + static int Compare(const double d1, const double d2, const double epsilon); + static int Compare(const double d1, const double d2); + static int Compare(const Double& d1, const Double& d2, const double epsilon); + static int Compare(const Double& d1, const Double& d2); + + int CompareTo(const double d1, const double epsilon) const; + int CompareTo(const double d1) const; + int CompareTo(const Double& d1, const double epsilon) const; + int CompareTo(const Double& d1) const; + + Double operator+(const Double& other) const; + Double operator-(const Double& other) const; + Double operator*(const Double& other) const; + Double operator/(const Double& other) const; + + Double& operator=(const Double& other); + Double& operator+=(const Double& other); + Double& operator-=(const Double& other); + Double& operator*=(const Double& other); + Double& operator/=(const Double& other); + + bool operator>(const Double& other) const; + bool operator>=(const Double& other) const; + bool operator<(const Double& other) const; + bool operator<=(const Double& other) const; + bool operator==(const Double& other) const; + + private: + double value_ = 0.0; + static constexpr double kEpsilon_ = std::numeric_limits::epsilon(); + static bool ApproximatelyEqual(double a, double b, double epsilon); + static bool EssentiallyEqual(double a, double b, double epsilon); + static bool DefinitelyGreaterThan(double a, double b, double epsilon); + static bool DefinitelyLessThan(double a, double b, double epsilon); +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_PLANNER_FACTORY_H_ diff --git a/modules/planning/math/frame_conversion/BUILD b/modules/planning/math/frame_conversion/BUILD new file mode 100644 index 00000000000..373845e74f6 --- /dev/null +++ b/modules/planning/math/frame_conversion/BUILD @@ -0,0 +1,34 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "cartesian_frenet_conversion", + srcs = [ + "cartesian_frenet_conversion.cc", + ], + hdrs = [ + "cartesian_frenet_conversion.h", + ], + deps = [ + "//modules/common:log", + "//modules/common/math:math_utils", + "//modules/common/math:vec2d", + "//modules/planning/math:double", + "@eigen//:eigen", + ], +) + +cc_test( + name = "cartesian_frenet_conversion_test", + size = "small", + srcs = [ + "cartesian_frenet_conversion_test.cc", + ], + deps = [ + ":cartesian_frenet_conversion", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/planning/math/frame_conversion/cartesian_frenet_conversion.cc b/modules/planning/math/frame_conversion/cartesian_frenet_conversion.cc new file mode 100644 index 00000000000..586a6df1010 --- /dev/null +++ b/modules/planning/math/frame_conversion/cartesian_frenet_conversion.cc @@ -0,0 +1,181 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file cartesian_frenet_conversion.cc + **/ + +#include "modules/planning/math/frame_conversion/cartesian_frenet_conversion.h" + +#include + +#include "modules/common/log.h" +#include "modules/common/math/math_utils.h" + +#include "modules/planning/math/double.h" + +namespace apollo { +namespace planning { + +using Vec2d = apollo::common::math::Vec2d; + +void CartesianFrenetConverter::cartesian_to_frenet( + const double rs, const double rx, const double ry, const double rtheta, + const double rkappa, const double rdkappa, const double x, const double y, + const double v, const double a, const double theta, const double kappa, + std::array* const ptr_s_condition, + std::array* const ptr_d_condition) { + double dx = x - rx; + double dy = y - ry; + + double cos_theta_r = std::cos(rtheta); + double sin_theta_r = std::sin(rtheta); + + double cross_rd_nd = cos_theta_r * dy - sin_theta_r * dx; + (*ptr_d_condition)[0] = + std::copysign(std::sqrt(dx * dx + dy * dy), cross_rd_nd); + + double delta_theta = theta - rtheta; + double tan_delta_theta = std::tan(delta_theta); + double cos_delta_theta = std::cos(delta_theta); + + double one_minus_kappa_r_d = 1 - rkappa * (*ptr_d_condition)[0]; + (*ptr_d_condition)[1] = one_minus_kappa_r_d * tan_delta_theta; + + double kappa_r_d_prime = + rdkappa * (*ptr_d_condition)[0] + rkappa * (*ptr_d_condition)[1]; + + (*ptr_d_condition)[2] = + -kappa_r_d_prime * tan_delta_theta + + one_minus_kappa_r_d / cos_delta_theta / cos_delta_theta * + (kappa * one_minus_kappa_r_d / cos_delta_theta - rkappa); + + (*ptr_s_condition)[0] = rs; + + (*ptr_s_condition)[1] = v * cos_delta_theta / one_minus_kappa_r_d; + + double delta_theta_prime = + one_minus_kappa_r_d / cos_delta_theta * kappa - rkappa; + (*ptr_s_condition)[2] = + (a * cos_delta_theta - + (*ptr_s_condition)[1] * (*ptr_s_condition)[1] * + ((*ptr_d_condition)[1] * delta_theta_prime - kappa_r_d_prime)) / + one_minus_kappa_r_d; + return; +} + +void CartesianFrenetConverter::frenet_to_cartesian( + const double rs, const double rx, const double ry, const double rtheta, + const double rkappa, const double rdkappa, + const std::array& s_condition, + const std::array& d_condition, double* const ptr_x, + double* const ptr_y, double* const ptr_theta, double* const ptr_kappa, + double* const ptr_v, double* const ptr_a) { + CHECK(std::abs(rs - s_condition[0]) < 1.0e-6 && + "The reference point s and s_condition[0] don't match"); + + double cos_theta_r = std::cos(rtheta); + double sin_theta_r = std::sin(rtheta); + + *ptr_x = rx - sin_theta_r * d_condition[0]; + *ptr_y = ry + cos_theta_r * d_condition[0]; + + double one_minus_kappa_r_d = 1 - rkappa * d_condition[0]; + + double tan_delta_theta = d_condition[1] / one_minus_kappa_r_d; + double delta_theta = std::atan2(d_condition[1], one_minus_kappa_r_d); + double cos_delta_theta = std::cos(delta_theta); + + *ptr_theta = common::math::NormalizeAngle(delta_theta + rtheta); + + double kappa_r_d_prime = rdkappa * d_condition[0] + rkappa * d_condition[1]; + *ptr_kappa = (((d_condition[2] + kappa_r_d_prime * tan_delta_theta) * + cos_delta_theta * cos_delta_theta) / + (one_minus_kappa_r_d) + + rkappa) * + cos_delta_theta / (one_minus_kappa_r_d); + + double d_dot = d_condition[1] * s_condition[1]; + *ptr_v = std::sqrt(one_minus_kappa_r_d * one_minus_kappa_r_d * + s_condition[1] * s_condition[1] + + d_dot * d_dot); + + double delta_theta_prime = + one_minus_kappa_r_d / cos_delta_theta * (*ptr_kappa) - rkappa; + + *ptr_a = s_condition[2] * one_minus_kappa_r_d / cos_delta_theta + + s_condition[1] * s_condition[1] / cos_delta_theta * + (d_condition[1] * delta_theta_prime - kappa_r_d_prime); + return; +} + +double CartesianFrenetConverter::CalculateTheta(const double rtheta, + const double rkappa, + const double l, + const double dl) { + return common::math::NormalizeAngle(rtheta + std::atan2(dl, 1 - l * rkappa)); +} + +double CartesianFrenetConverter::CalculateKappa(const double rkappa, + const double rdkappa, + const double l, const double dl, + const double ddl) { + double denominator = (dl * dl + (1 - l * rkappa) * (1 - l * rkappa)); + if (Double::Compare(denominator, 0.0, 1e-8) == 0) { + return 0.0; + } + denominator = std::pow(denominator, 1.5); + const double numerator = rkappa + ddl - 2 * l * rkappa * rkappa - + l * ddl * rkappa + l * l * rkappa * rkappa * rkappa + + l * dl * rdkappa + 2 * dl * dl * rkappa; + return numerator / denominator; +} + +Vec2d CartesianFrenetConverter::CalculateCartesianPoint(const double rtheta, + const Vec2d& rpoint, + const double l) { + double x = rpoint.x() - l * std::sin(rtheta); + double y = rpoint.y() + l * std::cos(rtheta); + return Vec2d(x, y); +} + +double CartesianFrenetConverter::CalculateLateralDerivative( + const double rtheta, const double theta, const double l, + const double rkappa) { + return (1 - rkappa * l) * std::tan(theta - rtheta); +} + +double CartesianFrenetConverter::CalculateSecondOrderLateralDerivative( + const double rtheta, const double theta, const double rkappa, + const double kappa, const double rdkappa, const double l) { + const double dl = CalculateLateralDerivative(rtheta, theta, l, rkappa); + const double theta_diff = theta - rtheta; + const double cos_theta_diff = std::cos(theta_diff); + double res = -(rdkappa * l + rkappa * dl) * std::tan(theta - rtheta) + + (1 - rkappa * l) / (cos_theta_diff * cos_theta_diff) * + (kappa * (1 - rkappa * l) / cos_theta_diff - rkappa); + if (std::isinf(res)) { + AWARN << "result is inf when calculate second order lateral " + "derivative. input values are rtheta:" + << rtheta << " theta: " << theta << ", rkappa: " << rkappa + << ", kappa: " << kappa << ", rdkappa: " << rdkappa << ", l: " << l + << std::endl; + } + return res; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/frame_conversion/cartesian_frenet_conversion.h b/modules/planning/math/frame_conversion/cartesian_frenet_conversion.h new file mode 100644 index 00000000000..bd6f796010f --- /dev/null +++ b/modules/planning/math/frame_conversion/cartesian_frenet_conversion.h @@ -0,0 +1,99 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file cartesian_frenet_conversion.h + **/ + +#ifndef MODULES_PLANNING_MATH_FRAME_CONVERSION_CARTESIAN_FRENET_CONVERSION_H_ +#define MODULES_PLANNING_MATH_FRAME_CONVERSION_CARTESIAN_FRENET_CONVERSION_H_ + +#include + +#include "modules/common/math/vec2d.h" + +namespace apollo { +namespace planning { + +// Notations: +// s_condition = [s, s_dot, s_ddot] +// s: longitudinal coordinate w.r.t reference line. +// s_dot: ds / dt +// s_ddot: d(s_dot) / dt +// d_condition = [d, d_prime, d_pprime] +// d: lateral coordinate w.r.t. reference line +// d_prime: dd / ds +// d_pprime: d(d_prime) / ds +// l: the same as d. +class CartesianFrenetConverter { + public: + /** + * Convert a vehicle state in Cartesian frame to Frenet frame. + * Decouple a 2d movement to two independent 1d movement w.r.t. reference + * line. + * The lateral movement is a function of longitudinal accumulated distance s + * to achieve better satisfaction of nonholonomic constraints. + */ + static void cartesian_to_frenet(const double rs, const double rx, + const double ry, const double rtheta, + const double rkappa, const double rdkappa, + const double x, const double y, + const double v, const double a, + const double theta, const double kappa, + std::array* const ptr_s_condition, + std::array* const ptr_d_condition); + /** + * Convert a vehicle state in Frenet frame to Cartesian frame. + * Combine two independent 1d movement w.r.t. reference line to a 2d movement. + */ + static void frenet_to_cartesian(const double rs, const double rx, + const double ry, const double rtheta, + const double rkappa, const double rdkappa, + const std::array& s_condition, + const std::array& d_condition, + double* const ptr_x, double* const ptr_y, + double* const ptr_theta, + double* const ptr_kappa, double* const ptr_v, + double* const ptr_a); + + // given sl point extract x, y, theta, kappa + static double CalculateTheta(const double rtheta, const double rkappa, + const double l, const double dl); + + static double CalculateKappa(const double rkappa, const double rdkappa, + const double l, const double dl, + const double ddl); + + static common::math::Vec2d CalculateCartesianPoint( + const double rtheta, const common::math::Vec2d& rpoint, const double l); + /** + * @brief: given sl, theta, and road's theta, kappa, extract derivative l, + *second order derivative l: + */ + static double CalculateLateralDerivative(const double theta_ref, + const double theta, const double l, + const double kappa_ref); + + // given sl, theta, and road's theta, kappa, extract second order derivative + static double CalculateSecondOrderLateralDerivative( + const double theta_ref, const double theta, const double kappa_ref, + const double kappa, const double dkappa_ref, const double l); +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_FRAME_CONVERSION_CARTESIAN_FRENET_CONVERSION_H_ diff --git a/modules/planning/math/frame_conversion/cartesian_frenet_conversion_test.cc b/modules/planning/math/frame_conversion/cartesian_frenet_conversion_test.cc new file mode 100644 index 00000000000..ecce6a261da --- /dev/null +++ b/modules/planning/math/frame_conversion/cartesian_frenet_conversion_test.cc @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file cartesian_frenet_conversion_test.cc + **/ +#include "modules/planning/math/frame_conversion/cartesian_frenet_conversion.h" + +#include +#include + +#include "gtest/gtest.h" + +namespace apollo { +namespace planning { + +TEST(TestCartesianFrenetConversion, cartesian_to_frenet_test) { + double rs = 10.0; + double rx = 0.0; + double ry = 0.0; + double rtheta = M_PI / 4.0; + double rkappa = 0.1; + double rdkappa = 0.01; + double x = -1.0; + double y = 1.0; + double v = 2.0; + double a = 0.0; + double theta = M_PI / 3.0; + double kappa = 0.11; + + std::array s_conditions; + std::array d_conditions; + + CartesianFrenetConverter::cartesian_to_frenet( + rs, rx, ry, rtheta, rkappa, rdkappa, x, y, v, a, theta, kappa, + &s_conditions, &d_conditions); + + double x_out; + double y_out; + double theta_out; + double kappa_out; + double v_out; + double a_out; + + CartesianFrenetConverter::frenet_to_cartesian( + rs, rx, ry, rtheta, rkappa, rdkappa, s_conditions, d_conditions, &x_out, + &y_out, &theta_out, &kappa_out, &v_out, &a_out); + + EXPECT_NEAR(x, x_out, 1.0e-6); + EXPECT_NEAR(y, y_out, 1.0e-6); + EXPECT_NEAR(theta, theta_out, 1.0e-6); + EXPECT_NEAR(kappa, kappa_out, 1.0e-6); + EXPECT_NEAR(v, v_out, 1.0e-6); + EXPECT_NEAR(a, a_out, 1.0e-6); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/hermite_spline.h b/modules/planning/math/hermite_spline.h new file mode 100644 index 00000000000..ca49aa4e688 --- /dev/null +++ b/modules/planning/math/hermite_spline.h @@ -0,0 +1,206 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file hermite_spline.h + **/ + +#ifndef MODULES_PLANNING_MATH_HERMITE_SPLINE_H_ +#define MODULES_PLANNING_MATH_HERMITE_SPLINE_H_ + +#include +#include + +#include "modules/common/log.h" + +namespace apollo { +namespace planning { + +// Hermite spline implementation that works for 1d and 2d space interpolation. +// Valid input type T: double, Eigen::Vector2d +template +class HermiteSpline { + public: + HermiteSpline(std::array x0, std::array x1, + const double z0 = 0.0, const double z1 = 1.0); + + virtual ~HermiteSpline() = default; + + virtual T Evaluate(const std::uint32_t order, const double z) const; + + private: + std::array x0_; + + std::array x1_; + + double z0_ = 0.0; + + double delta_z_ = 0.0; +}; + +template +inline HermiteSpline::HermiteSpline(std::array x0, + std::array x1, + const double z0, const double z1) + : x0_(std::move(x0)), x1_(std::move(x1)), z0_(z0), delta_z_(z1 - z0) { + CHECK(N == 3 || N == 5) + << "Error: currently we only support cubic and quintic hermite splines!"; +} + +template +inline T HermiteSpline::Evaluate(const std::uint32_t order, + const double z) const { + CHECK_LE(z0_, z); + CHECK_LE(z, z0_ + delta_z_); + + // if N == 3, cubic hermite spline, N == 5, qunitic hermite spline + if (N == 3) { + const T& p0 = x0_[0]; + const T& v0 = x0_[1]; + const T& p1 = x1_[0]; + const T& v1 = x1_[1]; + switch (order) { + case 0: { + double t = (z - z0_) / delta_z_; + double t2 = t * t; + double t3 = t2 * t; + + return (2.0 * t3 - 3.0 * t2 + 1.0) * p0 + (t3 - 2 * t2 + t) * v0 + + (-2.0 * t3 + 3.0 * t2) * p1 + (t3 - t2) * v1; + } + case 1: { + double t = (z - z0_) / delta_z_; + double t2 = t * t; + + return (6.0 * t2 - 6.0 * t) * p0 + (3.0 * t2 - 4 * t + 1.0) * v0 + + (-6.0 * t2 + 6.0 * t) * p1 + (3.0 * t2 - 2.0 * t) * v1; + } + case 2: { + double t = (z - z0_) / delta_z_; + return (12.0 * t - 6.0) * p0 + (6.0 * t - 4.0) * v0 + + (-12.0 * t + 6.0) * p1 + (6.0 * t - 2.0) * v1; + } + case 3: { + return 12.0 * p0 + 6.0 * v0 - 12.0 * p1 + 6.0 * v1; + } + default: { break; } + } + } else { + CHECK_EQ(5, N); + const T& p0 = x0_[0]; + const T& v0 = x0_[1]; + const T& a0 = x0_[2]; + const T& p1 = x1_[0]; + const T& v1 = x1_[1]; + const T& a1 = x1_[2]; + + switch (order) { + case 0: { + double t = (z - z0_) / delta_z_; + double t2 = t * t; + double t3 = t * t2; + double t4 = t2 * t2; + double t5 = t2 * t3; + double det0 = t3 - t4; + double det1 = t4 - t5; + double h0 = 1.0 - 10.0 * t3 + 15.0 * t4 - 6.0 * t5; + double h1 = t - 6.0 * t3 + 8.0 * t4 - 3.0 * t5; + double h2 = 0.5 * (t2 - t5) - 1.5 * det0; + double h3 = 10.0 * t3 - 15.0 * t4 + 6.0 * t5; + double h4 = -4.0 * det0 + 3.0 * det1; + double h5 = 0.5 * (det0 - det1); + + return h0 * p0 + h1 * v0 + h2 * a0 + h3 * p1 + h4 * v1 + h5 * a1; + } + case 1: { + double t = (z - z0_) / delta_z_; + double t2 = t * t; + double t3 = t * t2; + double t4 = t2 * t2; + double det0 = t2 - t3; + double det1 = t3 - t4; + double dh0 = -30.0 * det0 + 30.0 * det1; + double dh1 = 1 - 18.0 * t2 + 32.0 * t3 - 15.0 * t4; + double dh2 = t - 4.5 * t2 + 6.0 * t3 - 2.5 * t4; + double dh3 = 30.0 * det0 - 30.0 * det1; + double dh4 = -12.0 * t2 + 28.0 * t3 - 15.0 * t4; + double dh5 = 1.5 * det0 - 2.5 * det1; + + return dh0 * p0 + dh1 * v0 + dh2 * a0 + dh3 * p1 + dh4 * v1 + dh5 * a1; + } + case 2: { + double t = (z - z0_) / delta_z_; + double t2 = t * t; + double t3 = t * t2; + double det0 = t - t2; + double det1 = t2 - t3; + double ddh0 = -60.0 * det0 + 120.0 * det1; + double ddh1 = -36.0 * det0 + 60.0 * det1; + double ddh2 = 1.0 - 9.0 * t + 18.0 * t2 - 10.0 * t3; + double ddh3 = 60.0 * det0 - 120.0 * det1; + double ddh4 = -24.0 * det0 + 60.0 * det1; + double ddh5 = 3.0 * t - 12.0 * t2 + 10.0 * t3; + + return ddh0 * p0 + ddh1 * v0 + ddh2 * a0 + ddh3 * p1 + ddh4 * v1 + + ddh5 * a1; + } + case 3: { + double t = (z - z0_) / delta_z_; + double t2 = t * t; + double det = t - t2; + double dddh0 = -60.0 + 360.0 * det; + double dddh1 = -36.0 + 192.0 * t - 180.0 * t2; + double dddh2 = -9.0 + 36.0 * t - 30.0 * t2; + double dddh3 = 60.0 - 360.0 * det; + double dddh4 = -24.0 + 168.0 * t - 180.0 * t2; + double dddh5 = 3.0 - 24.0 * t + 30.0 * t2; + + return dddh0 * p0 + dddh1 * v0 + dddh2 * a0 + dddh3 * p1 + dddh4 * v1 + + dddh5 * a1; + } + case 4: { + double t = (z - z0_) / delta_z_; + double d4h0 = 360.0 - 720.0 * t; + double d4h1 = 192.0 - 360.0 * t; + double d4h2 = 36.0 - 60.0 * t; + double d4h3 = -360.0 + 720.0 * t; + double d4h4 = 168.0 - 360.0 * t; + double d4h5 = -24.0 + 60.0 * t; + + return d4h0 * p0 + d4h1 * v0 + d4h2 * a0 + d4h3 * p1 + d4h4 * v1 + + d4h5 * a1; + } + case 5: { + double d5h0 = -720.0; + double d5h1 = -360.0; + double d5h2 = -60.0; + double d5h3 = 720.0; + double d5h4 = -360.0; + double d5h5 = 60.0; + + return d5h0 * p0 + d5h1 * v0 + d5h2 * a0 + d5h3 * p1 + d5h4 * v1 + + d5h5 * a1; + } + default: { break; } + } + } + return T(); +} + +} // namespace planning +} // namespace apollo + +#endif /* MODULES_PLANNING_MATH_HERMITE_SPLINE_H_ */ diff --git a/modules/planning/math/polynomial_xd.cc b/modules/planning/math/polynomial_xd.cc new file mode 100644 index 00000000000..88972f420aa --- /dev/null +++ b/modules/planning/math/polynomial_xd.cc @@ -0,0 +1,88 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: polynomial_xd.cc + **/ + +#include "modules/planning/math/polynomial_xd.h" + +#include +#include + +namespace apollo { +namespace planning { + +PolynomialXd::PolynomialXd(const std::uint32_t order) : params_(order, 0.0) {} + +PolynomialXd::PolynomialXd(const std::vector& params) + : params_(params) {} + +std::uint32_t PolynomialXd::order() const { return params_.size(); } + +void PolynomialXd::SetParams(const std::vector& params) { + params_ = params; +} + +const std::vector& PolynomialXd::params() const { return params_; } + +void PolynomialXd::DerivedFrom(const PolynomialXd& base) { + if (base.order() <= 1) { + params_.clear(); + } else { + params_.resize(base.order() - 1); + for (std::uint32_t i = 1; i < base.order(); ++i) { + params_[i - 1] = base[i] * i; + } + } +} + +void PolynomialXd::IntegratedFrom(const PolynomialXd& base) { + params_.resize(base.order() + 1); + params_[0] = 0.0; + for (std::uint32_t i = 0; i < base.order(); ++i) { + params_[i + 1] = base[i] / (i + 1); + } +} + +void PolynomialXd::IntegratedFrom(const PolynomialXd& base, + const double intercept) { + params_.resize(base.order() + 1); + params_[0] = intercept; + for (std::uint32_t i = 0; i < base.order(); ++i) { + params_[i + 1] = base[i] / (i + 1); + } +} + +double PolynomialXd::operator()(const double value) const { + double result = 0.0; + for (auto rit = params_.rbegin(); rit != params_.rend(); ++rit) { + result *= value; + result += (*rit); + } + return result; +} + +double PolynomialXd::operator[](const std::uint32_t index) const { + if (index >= params_.size()) { + return 0.0; + } else { + return params_[index]; + } +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/polynomial_xd.h b/modules/planning/math/polynomial_xd.h new file mode 100644 index 00000000000..4a53bfb55b7 --- /dev/null +++ b/modules/planning/math/polynomial_xd.h @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: polynomial_xd.h + **/ + +#ifndef MODULES_PLANNING_MATH_POLYNOMIAL_XD_H_ +#define MODULES_PLANNING_MATH_POLYNOMIAL_XD_H_ + +#include +#include + +namespace apollo { +namespace planning { + +class PolynomialXd { + public: + PolynomialXd() = default; + explicit PolynomialXd(const std::uint32_t order); + explicit PolynomialXd(const std::vector& params); + double operator()(const double value) const; + double operator[](const std::uint32_t index) const; + void SetParams(const std::vector& params); + void DerivedFrom(const PolynomialXd& base); + void IntegratedFrom(const PolynomialXd& base); + void IntegratedFrom(const PolynomialXd& base, const double intercept); + std::uint32_t order() const; + const std::vector& params() const; + + private: + std::vector params_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_POLYNOMIAL_XD_H_ diff --git a/modules/planning/math/smoothing_spline/BUILD b/modules/planning/math/smoothing_spline/BUILD new file mode 100644 index 00000000000..17133642b14 --- /dev/null +++ b/modules/planning/math/smoothing_spline/BUILD @@ -0,0 +1,261 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "affine_constraint", + srcs = [ + "affine_constraint.cc", + ], + hdrs = [ + "affine_constraint.h", + ], + deps = [ + "//modules/planning/math:polynomial_xd", + "@eigen//:eigen", + ], +) + +cc_library( + name = "spline_1d_seg", + srcs = [ + "spline_1d_seg.cc", + ], + hdrs = [ + "spline_1d_seg.h", + ], + deps = [ + "//modules/planning/math:polynomial_xd", + "@eigen//:eigen", + ], +) + +cc_library( + name = "spline_1d", + srcs = [ + "spline_1d.cc", + ], + hdrs = [ + "spline_1d.h", + ], + deps = [ + ":affine_constraint", + ":spline_1d_seg", + "//modules/planning/math:polynomial_xd", + "@eigen//:eigen", + ], +) + +cc_library( + name = "spline_1d_constraint", + srcs = [ + "spline_1d_constraint.cc", + ], + hdrs = [ + "spline_1d_constraint.h", + ], + deps = [ + ":affine_constraint", + ":spline_1d", + "@eigen//:eigen", + ], +) + +cc_library( + name = "spline_seg_kernel", + srcs = [ + "spline_seg_kernel.cc", + ], + hdrs = [ + "spline_seg_kernel.h", + ], + deps = [ + "//modules/common:macro", + "@eigen//:eigen", + ], +) + +cc_library( + name = "spline_1d_kernel", + srcs = [ + "spline_1d_kernel.cc", + ], + hdrs = [ + "spline_1d_kernel.h", + ], + deps = [ + ":affine_constraint", + ":spline_1d", + ":spline_seg_kernel", + "//modules/common:macro", + "@eigen//:eigen", + ], +) + +cc_library( + name = "spline_1d_generator", + srcs = [ + "spline_1d_generator.cc", + ], + hdrs = [ + "spline_1d_generator.h", + ], + deps = [ + ":spline_1d", + ":spline_1d_constraint", + ":spline_1d_kernel", + "//modules/common/math/qp_solver", + "//modules/common/math/qp_solver:active_set_qp_solver", + "@eigen//:eigen", + ], +) + +cc_library( + name = "spline_2d_seg", + srcs = [ + "spline_2d_seg.cc", + ], + hdrs = [ + "spline_2d_seg.h", + ], + deps = [ + "//modules/planning/math:polynomial_xd", + "@eigen//:eigen", + ], +) + +cc_library( + name = "spline_2d", + srcs = [ + "spline_2d.cc", + ], + hdrs = [ + "spline_2d.h", + ], + deps = [ + ":spline_2d_seg", + "//modules/planning/math:polynomial_xd", + "@eigen//:eigen", + ], +) + +cc_library( + name = "spline_2d_constraint", + srcs = [ + "spline_2d_constraint.cc", + ], + hdrs = [ + "spline_2d_constraint.h", + ], + deps = [ + ":affine_constraint", + ":spline_2d", + "//modules/common/math:vec2d", + "@eigen//:eigen", + ], +) + +cc_library( + name = "spline_2d_kernel", + srcs = [ + "spline_2d_kernel.cc", + ], + hdrs = [ + "spline_2d_kernel.h", + ], + deps = [ + ":spline_2d", + ":spline_seg_kernel", + "//modules/common/math:vec2d", + "@eigen//:eigen", + ], +) + +cc_library( + name = "spline_2d_solver", + srcs = [ + "spline_2d_solver.cc", + ], + hdrs = [ + "spline_2d_solver.h", + ], + deps = [ + ":spline_2d", + ":spline_2d_constraint", + ":spline_2d_kernel", + "//modules/common/math:vec2d", + "//modules/common/math/qp_solver", + "//modules/common/math/qp_solver:active_set_qp_solver", + "@eigen//:eigen", + ], +) + +cc_library( + name = "piecewise_linear_constraint", + srcs = [ + "piecewise_linear_constraint.cc", + ], + hdrs = [ + "piecewise_linear_constraint.h", + ], + deps = [ + "//modules/common:log", + "@eigen//:eigen", + ], +) + +cc_library( + name = "piecewise_linear_kernel", + srcs = [ + "piecewise_linear_kernel.cc", + ], + hdrs = [ + "piecewise_linear_kernel.h", + ], + deps = [ + "@eigen//:eigen", + ], +) + +cc_library( + name = "piecewise_linear_generator", + srcs = [ + "piecewise_linear_generator.cc", + ], + hdrs = [ + "piecewise_linear_generator.h", + ], + deps = [ + ":piecewise_linear_constraint", + ":piecewise_linear_kernel", + "//modules/common/math/qp_solver", + "//modules/common/math/qp_solver:active_set_qp_solver", + "@eigen//:eigen", + ], +) + +cc_test( + name = "spline_1d_generator_test", + size = "small", + srcs = [ + "spline_1d_generator_test.cc", + ], + deps = [ + ":spline_1d_generator", + "@gtest//:main", + ], +) + +cc_test( + name = "spline_1d_kernel_test", + size = "small", + srcs = [ + "spline_1d_kernel_test.cc", + ], + deps = [ + ":spline_1d_kernel", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/planning/math/smoothing_spline/affine_constraint.cc b/modules/planning/math/smoothing_spline/affine_constraint.cc new file mode 100644 index 00000000000..7e1d4e82b18 --- /dev/null +++ b/modules/planning/math/smoothing_spline/affine_constraint.cc @@ -0,0 +1,82 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : affine_constraint.cc + **/ + +#include "modules/planning/math/smoothing_spline/affine_constraint.h" + +#include "modules/common/log.h" + +namespace apollo { +namespace planning { + +AffineConstraint::AffineConstraint(const bool is_equality) + : is_equality_(is_equality) {} + +AffineConstraint::AffineConstraint(const Eigen::MatrixXd& constraint_matrix, + const Eigen::MatrixXd& constraint_boundary, + const bool is_equality) + : constraint_matrix_(constraint_matrix), + constraint_boundary_(constraint_boundary), + is_equality_(is_equality) { + CHECK_EQ(constraint_boundary.rows(), constraint_matrix.rows()); +} + +void AffineConstraint::SetIsEquality(const double is_equality) { + is_equality_ = is_equality; +} + +const Eigen::MatrixXd& AffineConstraint::constraint_matrix() const { + return constraint_matrix_; +} + +const Eigen::MatrixXd& AffineConstraint::constraint_boundary() const { + return constraint_boundary_; +} + +bool AffineConstraint::AddConstraint( + const Eigen::MatrixXd& constraint_matrix, + const Eigen::MatrixXd& constraint_boundary) { + if (constraint_matrix.rows() != constraint_boundary.rows()) { + return false; + } + + if (constraint_matrix_.rows() == 0) { + constraint_matrix_ = constraint_matrix; + constraint_boundary_ = constraint_boundary; + return true; + } + + if (constraint_matrix_.cols() != constraint_matrix.cols() || + constraint_boundary.cols() != 1) { + return false; + } + Eigen::MatrixXd n_matrix(constraint_matrix_.rows() + constraint_matrix.rows(), + constraint_matrix_.cols()); + Eigen::MatrixXd n_boundary( + constraint_boundary_.rows() + constraint_boundary.rows(), 1); + + n_matrix << constraint_matrix_, constraint_matrix; + n_boundary << constraint_boundary_, constraint_boundary; + constraint_matrix_ = n_matrix; + constraint_boundary_ = n_boundary; + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/affine_constraint.h b/modules/planning/math/smoothing_spline/affine_constraint.h new file mode 100644 index 00000000000..0c2b8210cf9 --- /dev/null +++ b/modules/planning/math/smoothing_spline/affine_constraint.h @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : affine_constraint.h + **/ + +#ifndef MODULES_PLANNING_MATH_SMOOTHING_SPLINE_AFFINE_CONSTRAINT_H_ +#define MODULES_PLANNING_MATH_SMOOTHING_SPLINE_AFFINE_CONSTRAINT_H_ + +#include "Eigen/Core" +#include "modules/planning/math/polynomial_xd.h" + +namespace apollo { +namespace planning { + +class AffineConstraint { + public: + AffineConstraint() = default; + explicit AffineConstraint(const bool is_equality); + explicit AffineConstraint(const Eigen::MatrixXd& constraint_matrix, + const Eigen::MatrixXd& constraint_boundary, + const bool is_equality); + + void SetIsEquality(const double is_equality); + + const Eigen::MatrixXd& constraint_matrix() const; + const Eigen::MatrixXd& constraint_boundary() const; + bool AddConstraint(const Eigen::MatrixXd& constraint_matrix, + const Eigen::MatrixXd& constraint_boundary); + + private: + Eigen::MatrixXd constraint_matrix_; + Eigen::MatrixXd constraint_boundary_; + bool is_equality_ = true; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SMOOTHING_SPLINE_AFFINE_CONSTRAINT_H_ diff --git a/modules/planning/math/smoothing_spline/piecewise_linear_constraint.cc b/modules/planning/math/smoothing_spline/piecewise_linear_constraint.cc new file mode 100644 index 00000000000..c40e00cb537 --- /dev/null +++ b/modules/planning/math/smoothing_spline/piecewise_linear_constraint.cc @@ -0,0 +1,225 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief: Implementation of PiecewiseLinearConstraint class + **/ + +#include "modules/planning/math/smoothing_spline/piecewise_linear_constraint.h" + +#include + +#include "modules/common/log.h" + +namespace apollo { +namespace planning { + +namespace { + +Eigen::MatrixXd MergeMaxtrices(const std::vector& matrices) { + int32_t d = 0; + for (const auto& mat : matrices) { + d += mat.rows(); + } + int32_t col = matrices.front().cols(); + Eigen::MatrixXd res = Eigen::MatrixXd::Zero(d, col); + int32_t index = 0; + for (const auto& mat : matrices) { + res.block(index, 0, mat.rows(), mat.cols()) = mat; + index += mat.rows(); + } + return res; +} +} // namespace + +PiecewiseLinearConstraint::PiecewiseLinearConstraint(const uint32_t dimension, + const double unit_segment) + : dimension_(dimension), unit_segment_(unit_segment) {} + +Eigen::MatrixXd PiecewiseLinearConstraint::inequality_constraint_matrix() + const { + return MergeMaxtrices(inequality_matrices_); +} + +Eigen::MatrixXd PiecewiseLinearConstraint::inequality_constraint_boundary() + const { + return MergeMaxtrices(inequality_boundaries_); +} + +Eigen::MatrixXd PiecewiseLinearConstraint::equality_constraint_matrix() const { + return MergeMaxtrices(equality_matrices_); +} + +Eigen::MatrixXd PiecewiseLinearConstraint::equality_constraint_boundary() + const { + return MergeMaxtrices(equality_boundaries_); +} + +bool PiecewiseLinearConstraint::AddBoundary( + const std::vector& index_list, + const std::vector& lower_bound, + const std::vector& upper_bound) { + if (index_list.size() != lower_bound.size() || + index_list.size() != upper_bound.size()) { + AERROR << "The sizes of index list, lower_bound, upper_bound are not " + "identical."; + return false; + } + Eigen::MatrixXd inequality_matrix = + Eigen::MatrixXd::Zero(2 * index_list.size(), dimension_); + Eigen::MatrixXd inequality_boundary = + Eigen::MatrixXd::Zero(2 * index_list.size(), 1); + + for (uint32_t i = 0; i < index_list.size(); ++i) { + uint32_t index = index_list[i]; + inequality_matrix(2 * i, index) = -1.0; + inequality_boundary(2 * i, 0) = -upper_bound[i]; + inequality_matrix(2 * i + 1, index) = 1.0; + inequality_boundary(2 * i + 1, 0) = lower_bound[i]; + } + inequality_matrices_.push_back(inequality_matrix); + inequality_boundaries_.push_back(inequality_boundary); + return true; +} + +bool PiecewiseLinearConstraint::AddDerivativeBoundary( + const std::vector& index_list, + const std::vector& lower_bound, + const std::vector& upper_bound) { + if (index_list.size() != lower_bound.size() || + index_list.size() != upper_bound.size()) { + AERROR << "The sizes of index list, lower_bound, upper_bound are not " + "identical."; + return false; + } + Eigen::MatrixXd inequality_matrix = + Eigen::MatrixXd::Zero(2 * index_list.size(), dimension_); + Eigen::MatrixXd inequality_boundary = + Eigen::MatrixXd::Zero(2 * index_list.size(), 1); + + for (uint32_t i = 0; i < index_list.size(); ++i) { + uint32_t index = index_list[i]; + if (index == 0) { + AERROR << "Index should NOT be 0."; + return false; + } + + inequality_matrix(2 * i, index - 1) = 1.0; + inequality_matrix(2 * i, index) = -1.0; + inequality_boundary(2 * i, 0) = -unit_segment_ * upper_bound[i]; + + inequality_matrix(2 * i + 1, index - 1) = -1.0; + inequality_matrix(2 * i + 1, index) = 1.0; + inequality_boundary(2 * i, 0) = unit_segment_ * lower_bound[i]; + } + inequality_matrices_.push_back(inequality_matrix); + inequality_boundaries_.push_back(inequality_boundary); + return true; +} + +bool PiecewiseLinearConstraint::AddSecondDerivativeBoundary( + const double init_derivative, const std::vector& index_list, + const std::vector& lower_bound, + const std::vector& upper_bound) { + // TODO(Liangliang): implement this function + if (index_list.size() != lower_bound.size() || + index_list.size() != upper_bound.size()) { + AERROR << "The sizes of index list, lower_bound, upper_bound are not " + "identical."; + return false; + } + Eigen::MatrixXd inequality_matrix = + Eigen::MatrixXd::Zero(2 * index_list.size(), dimension_); + Eigen::MatrixXd inequality_boundary = + Eigen::MatrixXd::Zero(2 * index_list.size(), 1); + + for (uint32_t i = 0; i < index_list.size(); ++i) { + uint32_t index = index_list[i]; + if (index == 0) { + AERROR << "Index should NOT be 0."; + return false; + } + + const double upper = upper_bound[i]; + const double lower = lower_bound[i]; + if (index == 1) { + inequality_matrix(2 * i, 1) = -1.0; + inequality_boundary(2 * i, 1) = -(upper * unit_segment_ * unit_segment_ + + init_derivative * unit_segment_); + inequality_matrix(2 * i + 1, 1) = 1.0; + inequality_boundary(2 * i + 1, 1) = + lower * unit_segment_ * unit_segment_ + + init_derivative * unit_segment_; + } else { + inequality_matrix(2 * i, index - 2) = -1.0; + inequality_matrix(2 * i, index - 1) = 2.0; + inequality_matrix(2 * i, index) = -1.0; + inequality_boundary(2 * i, 0) = -upper * unit_segment_ * unit_segment_; + + inequality_matrix(2 * i + 1, index - 2) = 1.0; + inequality_matrix(2 * i + 1, index - 1) = -2.0; + inequality_matrix(2 * i + 1, index) = 1.0; + inequality_boundary(2 * i + 1, 0) = lower * unit_segment_ * unit_segment_; + } + } + inequality_matrices_.push_back(inequality_matrix); + inequality_boundaries_.push_back(inequality_boundary); + return true; +} + +bool PiecewiseLinearConstraint::AddPointConstraint(const double x, + const double fx) { + // TODO(Liangliang): implement this function + return true; +} + +bool PiecewiseLinearConstraint::AddPointDerivativeConstraint(const double x, + const double dfx) { + // TODO(Liangliang): implement this function + return true; +} + +bool PiecewiseLinearConstraint::AddPointSecondDerivativeConstraint( + const double x, const double ddfx) { + // TODO(Liangliang): implement this function + return true; +} + +bool PiecewiseLinearConstraint::AddPointThirdDerivativeConstraint( + const double x, const double dddfx) { + // TODO(Liangliang): implement this function + return true; +} + +bool PiecewiseLinearConstraint::AddMonotoneInequalityConstraint() { + Eigen::MatrixXd inequality_matrix = + Eigen::MatrixXd::Zero(dimension_ - 1, dimension_ - 1); + Eigen::MatrixXd inequality_boundary = + Eigen::MatrixXd::Zero(dimension_ - 1, 1); + + for (uint32_t i = 1; i < dimension_; ++i) { + inequality_matrix(i, i - 1) = -1.0; + inequality_matrix(i, i) = 1.0; + } + inequality_matrices_.push_back(inequality_matrix); + inequality_boundaries_.push_back(inequality_boundary); + + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/piecewise_linear_constraint.h b/modules/planning/math/smoothing_spline/piecewise_linear_constraint.h new file mode 100644 index 00000000000..1c0cc4c8b67 --- /dev/null +++ b/modules/planning/math/smoothing_spline/piecewise_linear_constraint.h @@ -0,0 +1,83 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : piecewise_linear_constraint.h + * @brief: Definition of PiecewiseLinearConstraint class. + **/ + +#ifndef MODULES_PLANNING_MATH_SMOOTHING_SPLINE_PIECEWISE_LINEAR_CONSTRAINT_H_ +#define MODULES_PLANNING_MATH_SMOOTHING_SPLINE_PIECEWISE_LINEAR_CONSTRAINT_H_ + +#include + +#include "Eigen/Core" + +namespace apollo { +namespace planning { + +class PiecewiseLinearConstraint { + public: + PiecewiseLinearConstraint(const uint32_t dimension, + const double unit_segment); + virtual ~PiecewiseLinearConstraint() = default; + + Eigen::MatrixXd inequality_constraint_matrix() const; + Eigen::MatrixXd inequality_constraint_boundary() const; + Eigen::MatrixXd equality_constraint_matrix() const; + Eigen::MatrixXd equality_constraint_boundary() const; + + /** + * @brief: inequality boundary constraints + **/ + bool AddBoundary(const std::vector& index_list, + const std::vector& lower_bound, + const std::vector& upper_bound); + bool AddDerivativeBoundary(const std::vector& index_list, + const std::vector& lower_bound, + const std::vector& upper_bound); + bool AddSecondDerivativeBoundary(const double init_derivative, + const std::vector& index_list, + const std::vector& lower_bound, + const std::vector& upper_bound); + + /** + * @brief: equality constraints + **/ + bool AddPointConstraint(const double x, const double fx); + bool AddPointDerivativeConstraint(const double x, const double dfx); + bool AddPointSecondDerivativeConstraint(const double x, const double ddfx); + bool AddPointThirdDerivativeConstraint(const double x, const double dddfx); + + /** + * @brief: Add monotone constraint inequality at all indices + **/ + bool AddMonotoneInequalityConstraint(); + + private: + const uint32_t dimension_; + const double unit_segment_; + std::vector inequality_matrices_; + std::vector inequality_boundaries_; + + std::vector equality_matrices_; + std::vector equality_boundaries_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SMOOTHING_SPLINE_PIECEWISE_LINEAR_CONSTRAINT_H_ diff --git a/modules/planning/math/smoothing_spline/piecewise_linear_generator.cc b/modules/planning/math/smoothing_spline/piecewise_linear_generator.cc new file mode 100644 index 00000000000..f76ec220963 --- /dev/null +++ b/modules/planning/math/smoothing_spline/piecewise_linear_generator.cc @@ -0,0 +1,77 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : piecewise_linear_geneartor.cc + * @brief: piecewise_smoothing_spline (pss) generator class + * solve pss by qp algorithm, include adding constraint, adding + *kernel, and solver solve + **/ + +#include "modules/planning/math/smoothing_spline/piecewise_linear_generator.h" + +#include "modules/common/log.h" +#include "modules/common/math/qp_solver/active_set_qp_solver.h" + +namespace apollo { +namespace planning { + +PiecewiseLinearGenerator::PiecewiseLinearGenerator( + const uint32_t num_of_segments, const double unit_segment) + : num_of_segments_(num_of_segments), + unit_segment_(unit_segment), + total_t_(num_of_segments * unit_segment), + constraint_(num_of_segments + 1, unit_segment), + kernel_(num_of_segments + 1, unit_segment) { + CHECK_GE(num_of_segments, 3); +} + +PiecewiseLinearConstraint* PiecewiseLinearGenerator::mutable_constraint() { + return &constraint_; +} + +PiecewiseLinearKernel* PiecewiseLinearGenerator::mutable_kernel() { + return &kernel_; +} + +bool PiecewiseLinearGenerator::Solve() { + const Eigen::MatrixXd& kernel_matrix = kernel_.kernel_matrix(); + const Eigen::MatrixXd& offset = kernel_.offset_matrix(); + + const Eigen::MatrixXd& inequality_constraint_matrix = + constraint_.inequality_constraint_matrix(); + const Eigen::MatrixXd& inequality_constraint_boundary = + constraint_.inequality_constraint_boundary(); + + const Eigen::MatrixXd& equality_constraint_matrix = + constraint_.equality_constraint_matrix(); + const Eigen::MatrixXd& equality_constraint_boundary = + constraint_.equality_constraint_boundary(); + + qp_solver_.reset(new apollo::common::math::ActiveSetQpSolver( + kernel_matrix, offset, inequality_constraint_matrix, + inequality_constraint_boundary, equality_constraint_matrix, + equality_constraint_boundary)); + + if (!qp_solver_->Solve()) { + return false; + } + const Eigen::MatrixXd solved_params = qp_solver_->params(); + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/piecewise_linear_generator.h b/modules/planning/math/smoothing_spline/piecewise_linear_generator.h new file mode 100644 index 00000000000..985a888af31 --- /dev/null +++ b/modules/planning/math/smoothing_spline/piecewise_linear_generator.h @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : piecewise_linear_generator.h + * @brief: The definition of PiecewiseLinearGenerator class + **/ + +#ifndef MODULES_PLANNING_MATH_SMOOTHING_SPLINE_PIECEWISE_LINEAR_GENERATOR_H_ +#define MODULES_PLANNING_MATH_SMOOTHING_SPLINE_PIECEWISE_LINEAR_GENERATOR_H_ + +#include +#include + +#include "Eigen/Core" + +#include "modules/common/math/qp_solver/qp_solver.h" +#include "modules/planning/math/smoothing_spline/piecewise_linear_constraint.h" +#include "modules/planning/math/smoothing_spline/piecewise_linear_kernel.h" + +namespace apollo { +namespace planning { + +class PiecewiseLinearGenerator { + public: + // x = f(t) + PiecewiseLinearGenerator(const uint32_t num_of_segments, + const double unit_segment); + virtual ~PiecewiseLinearGenerator() = default; + + PiecewiseLinearConstraint* mutable_constraint(); + + PiecewiseLinearKernel* mutable_kernel(); + + // solve + bool Solve(); + + private: + const uint32_t num_of_segments_; + const double unit_segment_; + const double total_t_; + + PiecewiseLinearConstraint constraint_; + PiecewiseLinearKernel kernel_; + + std::unique_ptr qp_solver_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SMOOTHING_SPLINE_PIECEWISE_LINEAR_GENERATOR_H_ diff --git a/modules/planning/math/smoothing_spline/piecewise_linear_kernel.cc b/modules/planning/math/smoothing_spline/piecewise_linear_kernel.cc new file mode 100644 index 00000000000..2c68a160d2b --- /dev/null +++ b/modules/planning/math/smoothing_spline/piecewise_linear_kernel.cc @@ -0,0 +1,139 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief: The implementation of PiecewiseLinearKernel class. + **/ + +#include "modules/planning/math/smoothing_spline/piecewise_linear_kernel.h" + +namespace apollo { +namespace planning { + +PiecewiseLinearKernel::PiecewiseLinearKernel(const uint32_t dimension, + const double unit_segment) + : dimension_(dimension), + unit_segment_(unit_segment), + kernel_matrix_(Eigen::MatrixXd::Zero(dimension_, dimension_)), + offset_matrix_(Eigen::MatrixXd::Zero(dimension_, 1)) {} + +void PiecewiseLinearKernel::AddRegularization(const double regularized_param) { + kernel_matrix_ += + Eigen::MatrixXd::Constant(dimension_, dimension_, regularized_param); +} + +const Eigen::MatrixXd& PiecewiseLinearKernel::kernel_matrix() const { + return kernel_matrix_; +} + +const Eigen::MatrixXd& PiecewiseLinearKernel::offset_matrix() const { + return offset_matrix_; +} + +// build-in kernel methods +void PiecewiseLinearKernel::AddDerivativeKernelMatrix(const double weight) { + // TODO(Liangliang): Implement this function. +} + +void PiecewiseLinearKernel::AddSecondOrderDerivativeMatrix( + const double weight) { + Eigen::MatrixXd second_derivative_matrix = + Eigen::MatrixXd::Zero(dimension_, dimension_); + for (std::size_t i = 1; i < dimension_; ++i) { + if (i == 1) { + second_derivative_matrix(i, i) += 1.0; + } else if (i == 2) { + second_derivative_matrix(i, i) += 1.0; + second_derivative_matrix(i - 1, i - 1) += 4.0; + second_derivative_matrix(i - 1, i) += -2.0; + second_derivative_matrix(i, i - 1) += -2.0; + } else { + second_derivative_matrix(i, i) += 1.0; + second_derivative_matrix(i - 1, i - 1) += 4.0; + second_derivative_matrix(i - 2, i - 2) += 1.0; + second_derivative_matrix(i - 1, i) += -2.0; + second_derivative_matrix(i, i - 1) += -2.0; + second_derivative_matrix(i - 2, i - 1) += -2.0; + second_derivative_matrix(i - 1, i - 2) += -2.0; + second_derivative_matrix(i, i - 2) += 1.0; + second_derivative_matrix(i - 2, i) += 1.0; + } + } + second_derivative_matrix *= 2.0 * weight / std::pow(unit_segment_, 4); + kernel_matrix_ += second_derivative_matrix; +} + +void PiecewiseLinearKernel::AddThirdOrderDerivativeMatrix(const double weight) { + Eigen::MatrixXd jerk_matrix = Eigen::MatrixXd::Zero(dimension_, dimension_); + for (std::size_t i = 0; i < dimension_; ++i) { + if (i == 1) { + jerk_matrix(i, i) += 1.0; + } else if (i == 2) { + jerk_matrix(i - 1, i - 1) += 9.0; + jerk_matrix(i, i) += 1.0; + + jerk_matrix(i - 1, i) += -3.0; + jerk_matrix(i, i - 1) += -3.0; + } else if (i == 3) { + jerk_matrix(i - 2, i - 2) += 9.0; + jerk_matrix(i - 1, i - 1) += 9.0; + jerk_matrix(i, i) += 1.0; + + jerk_matrix(i - 1, i) += -3.0; + jerk_matrix(i, i - 1) += -3.0; + jerk_matrix(i - 2, i) += 3.0; + jerk_matrix(i, i - 2) += 3.0; + + jerk_matrix(i - 2, i - 1) += -9.0; + jerk_matrix(i - 1, i - 2) += -9.0; + } else { + jerk_matrix(i - 3, i - 3) += 1.0; + jerk_matrix(i - 2, i - 2) += 9.0; + jerk_matrix(i - 1, i - 1) += 9.0; + jerk_matrix(i, i) += 1.0; + + jerk_matrix(i - 1, i) += -3.0; + jerk_matrix(i, i - 1) += -3.0; + jerk_matrix(i - 2, i) += 3.0; + jerk_matrix(i, i - 2) += 3.0; + jerk_matrix(i - 3, i) += -1.0; + jerk_matrix(i, i - 3) += -1.0; + + jerk_matrix(i - 2, i - 1) += -9.0; + jerk_matrix(i - 1, i - 2) += -9.0; + jerk_matrix(i - 3, i - 1) += 3.0; + jerk_matrix(i - 1, i - 3) += 3.0; + + jerk_matrix(i - 3, i - 2) += -3.0; + jerk_matrix(i - 2, i - 3) += -3.0; + } + } + + jerk_matrix *= 2.0 * weight / std::pow(unit_segment_, 4); + kernel_matrix_ += jerk_matrix; +} + +// reference line kernel +bool PiecewiseLinearKernel::AddReferenceLineKernelMatrix( + const std::vector& index_list, + const std::vector& pos_list, const double weight) { + // TODO(Liangliang): Implement this function. + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/piecewise_linear_kernel.h b/modules/planning/math/smoothing_spline/piecewise_linear_kernel.h new file mode 100644 index 00000000000..a71ce6be55c --- /dev/null +++ b/modules/planning/math/smoothing_spline/piecewise_linear_kernel.h @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief: Definition of PiecewiseLinearKernel class + **/ + +#ifndef MODULES_PLANNING_MATH_SMOOTHING_SPLINE_PIECEWISE_LINEAR_KERNEL_H_ +#define MODULES_PLANNING_MATH_SMOOTHING_SPLINE_PIECEWISE_LINEAR_KERNEL_H_ + +#include + +#include "Eigen/Core" + +namespace apollo { +namespace planning { + +class PiecewiseLinearKernel { + public: + PiecewiseLinearKernel(const uint32_t dimension, const double unit_segment); + + void AddRegularization(const double regularized_param); + + const Eigen::MatrixXd& kernel_matrix() const; + const Eigen::MatrixXd& offset_matrix() const; + + void AddDerivativeKernelMatrix(const double weight); + void AddSecondOrderDerivativeMatrix(const double weight); + void AddThirdOrderDerivativeMatrix(const double weight); + + // reference line kernel + bool AddReferenceLineKernelMatrix(const std::vector& index_list, + const std::vector& pos_list, + const double weight); + + private: + const uint32_t dimension_; + const double unit_segment_; + Eigen::MatrixXd kernel_matrix_; + Eigen::MatrixXd offset_matrix_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SMOOTHING_SPLINE_PIECEWISE_LINEAR_KERNEL_H_ diff --git a/modules/planning/math/smoothing_spline/spline_1d.cc b/modules/planning/math/smoothing_spline/spline_1d.cc new file mode 100644 index 00000000000..b8d5c7b939e --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_1d.cc @@ -0,0 +1,112 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : piecewise_smoothing_spline.h + * @brief: polynomial smoothing spline + **/ + +#include "modules/planning/math/smoothing_spline/spline_1d.h" + +#include +#include +#include + +namespace apollo { +namespace planning { + +Spline1d::Spline1d(const std::vector& x_knots, + const std::uint32_t order) + : x_knots_(x_knots), spline_order_(order) { + if (x_knots.size() > 1) { + for (std::uint32_t i = 1; i < x_knots_.size(); ++i) { + splines_.emplace_back(spline_order_); + } + } +} + +double Spline1d::operator()(const double x) const { + if (splines_.size() == 0) { + return 0.0; + } + std::uint32_t index = FindIndex(x); + return splines_[index](x - x_knots_[index]); +} + +double Spline1d::Derivative(const double x) const { + // zero order spline + if (splines_.size() == 0) { + return 0.0; + } + std::uint32_t index = FindIndex(x); + return splines_[index].Derivative(x - x_knots_[index]); +} + +double Spline1d::SecondOrderDerivative(const double x) const { + if (splines_.size() == 0) { + return 0.0; + } + std::uint32_t index = FindIndex(x); + return splines_[index].SecondOrderDerivative(x - x_knots_[index]); +} + +double Spline1d::ThirdOrderDerivative(const double x) const { + if (splines_.size() == 0) { + return 0.0; + } + std::uint32_t index = FindIndex(x); + return splines_[index].ThirdOrderDerivative(x - x_knots_[index]); +} + +bool Spline1d::SetSplineSegs(const Eigen::MatrixXd& params, + const std::uint32_t order) { + // check if the parameter size fit + if (x_knots_.size() * order != + order + static_cast(params.rows())) { + return false; + } + for (std::uint32_t i = 0; i < splines_.size(); ++i) { + std::vector spline_piece(order, 0.0); + for (std::uint32_t j = 0; j < order; ++j) { + spline_piece[j] = params(i * order + j, 0); + } + splines_[i].SetParams(spline_piece); + } + spline_order_ = order; + return true; +} + +Spline1dSeg* Spline1d::mutable_smoothing_spline(const std::uint32_t index) { + if (index >= splines_.size()) { + return nullptr; + } else { + return &splines_[index]; + } +} + +const std::vector& Spline1d::x_knots() const { return x_knots_; } + +std::uint32_t Spline1d::spline_order() const { return spline_order_; } + +std::uint32_t Spline1d::FindIndex(const double x) const { + auto upper_bound = std::upper_bound(x_knots_.begin() + 1, x_knots_.end(), x); + return std::min(static_cast(x_knots_.size() - 1), + static_cast(upper_bound - x_knots_.begin())) - + 1; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_1d.h b/modules/planning/math/smoothing_spline/spline_1d.h new file mode 100644 index 00000000000..41080393e17 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_1d.h @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** +* @file : spline_1d.h +* @brief: piecewise smoothing spline class +* 1. Model description: piecewise smoothing spline are made by pieces of +*smoothing splines +* joint at knots; +* 2. To guarantee smoothness, pieces value at knots should joint together +*with +* same value, derivative, and etc. Higher the order, More smoothness +*the piecewise spline; +**/ + +#ifndef MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_H_ +#define MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_H_ + +#include +#include "Eigen/Core" + +#include "modules/planning/math/polynomial_xd.h" +#include "modules/planning/math/smoothing_spline/affine_constraint.h" +#include "modules/planning/math/smoothing_spline/spline_1d_seg.h" + +namespace apollo { +namespace planning { + +class Spline1d { + public: + Spline1d(const std::vector& x_knots, const std::uint32_t order); + + // @brief: given x return f(x) value, derivative, second order derivative and + // the third order; + double operator()(const double x) const; + double Derivative(const double x) const; + double SecondOrderDerivative(const double x) const; + double ThirdOrderDerivative(const double x) const; + + // @brief: set spline segments + bool SetSplineSegs(const Eigen::MatrixXd& params, const std::uint32_t order); + Spline1dSeg* mutable_smoothing_spline(const std::uint32_t index); + + const std::vector& x_knots() const; + std::uint32_t spline_order() const; + + private: + std::uint32_t FindIndex(const double x) const; + + private: + std::vector splines_; + std::vector x_knots_; + std::uint32_t spline_order_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_H_ diff --git a/modules/planning/math/smoothing_spline/spline_1d_constraint.cc b/modules/planning/math/smoothing_spline/spline_1d_constraint.cc new file mode 100644 index 00000000000..c19b3b00c85 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_1d_constraint.cc @@ -0,0 +1,617 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : spline_1d_constraint.cc + * @brief: wrapp up solver constraint interface with direct methods and preset + *methods + **/ + +#include "modules/planning/math/smoothing_spline/spline_1d_constraint.h" + +#include + +namespace apollo { +namespace planning { + +Spline1dConstraint::Spline1dConstraint(const Spline1d& pss) + : x_knots_(pss.x_knots()), spline_order_(pss.spline_order()) { + inequality_constraint_.SetIsEquality(false); + equality_constraint_.SetIsEquality(true); +} + +Spline1dConstraint::Spline1dConstraint(const std::vector& x_knots, + const std::uint32_t spline_order) + : x_knots_(x_knots), spline_order_(spline_order) { + inequality_constraint_.SetIsEquality(false); + equality_constraint_.SetIsEquality(true); +} + +bool Spline1dConstraint::AddInequalityConstraint( + const Eigen::MatrixXd& constraint_matrix, + const Eigen::MatrixXd& constraint_boundary) { + return inequality_constraint_.AddConstraint(constraint_matrix, + constraint_boundary); +} + +bool Spline1dConstraint::AddEqualityConstraint( + const Eigen::MatrixXd& constraint_matrix, + const Eigen::MatrixXd& constraint_boundary) { + return equality_constraint_.AddConstraint(constraint_matrix, + constraint_boundary); +} + +bool Spline1dConstraint::AddBoundary(const std::vector& x_coord, + const std::vector& lower_bound, + const std::vector& upper_bound) { + std::vector filtered_lower_bound; + std::vector filtered_upper_bound; + std::vector filtered_lower_bound_x; + std::vector filtered_upper_bound_x; + + if (x_knots_.size() < 2) { + return false; + } + + if (!FilterConstraints(x_coord, lower_bound, upper_bound, + &filtered_lower_bound_x, &filtered_lower_bound, + &filtered_upper_bound_x, &filtered_upper_bound)) { + return false; + } + // emplace affine constraints + Eigen::MatrixXd inequality_constraint = Eigen::MatrixXd::Zero( + filtered_upper_bound.size() + filtered_lower_bound.size(), + (x_knots_.size() - 1) * spline_order_); + Eigen::MatrixXd inequality_boundary = Eigen::MatrixXd::Zero( + filtered_upper_bound.size() + filtered_lower_bound.size(), 1); + + for (std::uint32_t i = 0; i < filtered_lower_bound.size(); ++i) { + std::uint32_t index = FindIndex(filtered_lower_bound_x[i]); + + const double corrected_x = filtered_lower_bound_x[i] - x_knots_[index]; + double coef = 1.0; + for (std::uint32_t j = 0; j < spline_order_; ++j) { + inequality_constraint(i, j + index * spline_order_) = coef; + coef *= corrected_x; + } + inequality_boundary(i, 0) = filtered_lower_bound[i]; + } + + for (std::uint32_t i = 0; i < filtered_upper_bound.size(); ++i) { + std::uint32_t index = FindIndex(filtered_upper_bound_x[i]); + const double corrected_x = filtered_upper_bound_x[i] - x_knots_[index]; + double coef = -1.0; + for (std::uint32_t j = 0; j < spline_order_; ++j) { + inequality_constraint(i + filtered_lower_bound.size(), + j + index * spline_order_) = coef; + coef *= corrected_x; + } + inequality_boundary(i + filtered_lower_bound.size(), 0) = + -filtered_upper_bound[i]; + } + + return inequality_constraint_.AddConstraint(inequality_constraint, + inequality_boundary); +} + +bool Spline1dConstraint::AddDerivativeBoundary( + const std::vector& x_coord, const std::vector& lower_bound, + const std::vector& upper_bound) { + std::vector filtered_lower_bound; + std::vector filtered_upper_bound; + std::vector filtered_lower_bound_x; + std::vector filtered_upper_bound_x; + + if (x_knots_.size() < 2) { + return false; + } + + if (!FilterConstraints(x_coord, lower_bound, upper_bound, + &filtered_lower_bound_x, &filtered_lower_bound, + &filtered_upper_bound_x, &filtered_upper_bound)) { + return false; + } + + // emplace affine constraints + Eigen::MatrixXd inequality_constraint = Eigen::MatrixXd::Zero( + filtered_upper_bound.size() + filtered_lower_bound.size(), + (x_knots_.size() - 1) * spline_order_); + Eigen::MatrixXd inequality_boundary = Eigen::MatrixXd::Zero( + filtered_upper_bound.size() + filtered_lower_bound.size(), 1); + + for (std::uint32_t i = 0; i < filtered_lower_bound.size(); ++i) { + std::uint32_t index = FindIndex(filtered_lower_bound_x[i]); + const double corrected_x = filtered_lower_bound_x[i] - x_knots_[index]; + double coef = 1.0; + for (std::uint32_t j = 1; j < spline_order_; ++j) { + inequality_constraint(i, j + index * spline_order_) = coef * j; + coef *= corrected_x; + } + inequality_boundary(i, 0) = filtered_lower_bound[i]; + } + + for (std::uint32_t i = 0; i < filtered_upper_bound.size(); ++i) { + std::uint32_t index = FindIndex(filtered_upper_bound_x[i]); + const double corrected_x = filtered_upper_bound_x[i] - x_knots_[index]; + double coef = -1.0; + for (std::uint32_t j = 1; j < spline_order_; ++j) { + inequality_constraint(i + filtered_lower_bound.size(), + j + index * spline_order_) = coef * j; + coef *= corrected_x; + } + inequality_boundary(i + filtered_lower_bound.size(), 0) = + -filtered_upper_bound[i]; + } + return inequality_constraint_.AddConstraint(inequality_constraint, + inequality_boundary); +} + +bool Spline1dConstraint::AddSecondDerivativeBoundary( + const std::vector& x_coord, const std::vector& lower_bound, + const std::vector& upper_bound) { + std::vector filtered_lower_bound; + std::vector filtered_upper_bound; + std::vector filtered_lower_bound_x; + std::vector filtered_upper_bound_x; + + if (x_knots_.size() < 2) { + return false; + } + + if (!FilterConstraints(x_coord, lower_bound, upper_bound, + &filtered_lower_bound_x, &filtered_lower_bound, + &filtered_upper_bound_x, &filtered_upper_bound)) { + return false; + } + + // emplace affine constraints + Eigen::MatrixXd inequality_constraint = Eigen::MatrixXd::Zero( + filtered_upper_bound.size() + filtered_lower_bound.size(), + (x_knots_.size() - 1) * spline_order_); + Eigen::MatrixXd inequality_boundary = Eigen::MatrixXd::Zero( + filtered_upper_bound.size() + filtered_lower_bound.size(), 1); + + for (std::uint32_t i = 0; i < filtered_lower_bound.size(); ++i) { + std::uint32_t index = FindIndex(filtered_lower_bound_x[i]); + const double corrected_x = filtered_lower_bound_x[i] - x_knots_[index]; + double coef = 1.0; + for (std::uint32_t j = 2; j < spline_order_; ++j) { + inequality_constraint(i, j + index * spline_order_) = coef * j * (j - 1); + coef *= corrected_x; + } + inequality_boundary(i, 0) = filtered_lower_bound[i]; + } + + for (std::uint32_t i = 0; i < filtered_upper_bound.size(); ++i) { + std::uint32_t index = FindIndex(filtered_upper_bound_x[i]); + const double corrected_x = filtered_upper_bound_x[i] - x_knots_[index]; + double coef = -1.0; + for (std::uint32_t j = 2; j < spline_order_; ++j) { + inequality_constraint(i + filtered_lower_bound.size(), + j + index * spline_order_) = coef * j * (j - 1); + coef *= corrected_x; + } + inequality_boundary(i + filtered_lower_bound.size(), 0) = + -filtered_upper_bound[i]; + } + return inequality_constraint_.AddConstraint(inequality_constraint, + inequality_boundary); +} + +bool Spline1dConstraint::AddThirdDerivativeBoundary( + const std::vector& x_coord, const std::vector& lower_bound, + const std::vector& upper_bound) { + std::vector filtered_lower_bound; + std::vector filtered_upper_bound; + std::vector filtered_lower_bound_x; + std::vector filtered_upper_bound_x; + + if (!FilterConstraints(x_coord, lower_bound, upper_bound, + &filtered_lower_bound_x, &filtered_lower_bound, + &filtered_upper_bound_x, &filtered_upper_bound)) { + return false; + } + + if (x_knots_.size() < 2) { + return false; + } + + // emplace affine constraints + Eigen::MatrixXd inequality_constraint = Eigen::MatrixXd::Zero( + filtered_upper_bound.size() + filtered_lower_bound.size(), + (x_knots_.size() - 1) * spline_order_); + Eigen::MatrixXd inequality_boundary = Eigen::MatrixXd::Zero( + filtered_upper_bound.size() + filtered_lower_bound.size(), 1); + + for (std::uint32_t i = 0; i < filtered_lower_bound.size(); ++i) { + std::uint32_t index = FindIndex(filtered_lower_bound_x[i]); + const double corrected_x = filtered_lower_bound_x[i] - x_knots_[index]; + double coef = 1.0; + for (std::uint32_t j = 3; j < spline_order_; ++j) { + inequality_constraint(i, j + index * spline_order_) = + coef * j * (j - 1) * (j - 2); + coef *= corrected_x; + } + inequality_boundary(i, 0) = filtered_lower_bound[i]; + } + + for (std::uint32_t i = 0; i < filtered_upper_bound.size(); ++i) { + std::uint32_t index = FindIndex(filtered_upper_bound_x[i]); + const double corrected_x = filtered_upper_bound_x[i] - x_knots_[index]; + double coef = -1.0; + for (std::uint32_t j = 3; j < spline_order_; ++j) { + inequality_constraint(i + filtered_lower_bound.size(), + j + index * spline_order_) = + coef * j * (j - 1) * (j - 2); + coef *= corrected_x; + } + inequality_boundary(i + filtered_lower_bound.size(), 0) = + -filtered_upper_bound[i]; + } + return inequality_constraint_.AddConstraint(inequality_constraint, + inequality_boundary); +} + +bool Spline1dConstraint::AddPointConstraint(const double x, const double fx) { + std::uint32_t index = FindIndex(x); + std::vector power_x; + GeneratePowerX(x - x_knots_[index], spline_order_, &power_x); + Eigen::MatrixXd equality_constraint = + Eigen::MatrixXd::Zero(1, (x_knots_.size() - 1) * spline_order_); + std::uint32_t index_offset = index * spline_order_; + for (std::uint32_t i = 0; i < spline_order_; ++i) { + equality_constraint(0, index_offset + i) = power_x[i]; + } + Eigen::MatrixXd equality_boundary(1, 1); + equality_boundary(0, 0) = fx; + return AddEqualityConstraint(equality_constraint, equality_boundary); +} + +bool Spline1dConstraint::AddPointDerivativeConstraint(const double x, + const double dfx) { + std::uint32_t index = FindIndex(x); + std::vector power_x; + GeneratePowerX(x - x_knots_[index], spline_order_, &power_x); + Eigen::MatrixXd equality_constraint = + Eigen::MatrixXd::Zero(1, (x_knots_.size() - 1) * spline_order_); + std::uint32_t index_offset = index * spline_order_; + for (std::uint32_t i = 1; i < spline_order_; ++i) { + equality_constraint(0, index_offset + i) = power_x[i - 1] * i; + } + Eigen::MatrixXd equality_boundary(1, 1); + equality_boundary(0, 0) = dfx; + return AddEqualityConstraint(equality_constraint, equality_boundary); +} + +bool Spline1dConstraint::AddPointSecondDerivativeConstraint(const double x, + const double ddfx) { + std::uint32_t index = FindIndex(x); + std::vector power_x; + GeneratePowerX(x - x_knots_[index], spline_order_, &power_x); + Eigen::MatrixXd equality_constraint = + Eigen::MatrixXd::Zero(1, (x_knots_.size() - 1) * spline_order_); + std::uint32_t index_offset = index * spline_order_; + for (std::uint32_t i = 2; i < spline_order_; ++i) { + equality_constraint(0, index_offset + i) = power_x[i - 2] * i * (i - 1); + } + Eigen::MatrixXd equality_boundary(1, 1); + equality_boundary(0, 0) = ddfx; + return AddEqualityConstraint(equality_constraint, equality_boundary); +} + +bool Spline1dConstraint::AddPointThirdDerivativeConstraint(const double x, + const double dddfx) { + std::uint32_t index = FindIndex(x); + std::vector power_x; + GeneratePowerX(x - x_knots_[index], spline_order_, &power_x); + Eigen::MatrixXd equality_constraint = + Eigen::MatrixXd::Zero(1, (x_knots_.size() - 1) * spline_order_); + std::uint32_t index_offset = index * spline_order_; + for (std::uint32_t i = 3; i < spline_order_; ++i) { + equality_constraint(0, index_offset + i) = + power_x[i - 3] * i * (i - 1) * (i - 2); + } + Eigen::MatrixXd equality_boundary(1, 1); + equality_boundary(0, 0) = dddfx; + return AddEqualityConstraint(equality_constraint, equality_boundary); +} + +bool Spline1dConstraint::AddSmoothConstraint() { + if (x_knots_.size() < 3) { + return false; + } + Eigen::MatrixXd equality_constraint = Eigen::MatrixXd::Zero( + x_knots_.size() - 2, (x_knots_.size() - 1) * spline_order_); + Eigen::MatrixXd equality_boundary = + Eigen::MatrixXd::Zero(x_knots_.size() - 2, 1); + + for (std::uint32_t i = 0; i < x_knots_.size() - 2; ++i) { + double left_coef = 1.0; + double right_coef = -1.0; + const double x_left = x_knots_[i + 1] - x_knots_[i]; + const double x_right = 0.0; + for (std::uint32_t j = 0; j < spline_order_; ++j) { + equality_constraint(i, spline_order_ * i + j) = left_coef; + equality_constraint(i, spline_order_ * (i + 1) + j) = right_coef; + left_coef *= x_left; + right_coef *= x_right; + } + } + return equality_constraint_.AddConstraint(equality_constraint, + equality_boundary); +} + +bool Spline1dConstraint::AddDerivativeSmoothConstraint() { + if (x_knots_.size() < 3) { + return false; + } + + const std::uint32_t n_constraint = (x_knots_.size() - 2) * 2; + Eigen::MatrixXd equality_constraint = Eigen::MatrixXd::Zero( + n_constraint, (x_knots_.size() - 1) * spline_order_); + Eigen::MatrixXd equality_boundary = Eigen::MatrixXd::Zero(n_constraint, 1); + + for (std::uint32_t i = 0; i < n_constraint; i += 2) { + double left_coef = 1.0; + double right_coef = -1.0; + double left_dcoef = 1.0; + double right_dcoef = -1.0; + const double x_left = x_knots_[i / 2 + 1] - x_knots_[i / 2]; + const double x_right = 0.0; + for (std::uint32_t j = 0; j < spline_order_; ++j) { + equality_constraint(i, spline_order_ * (i / 2) + j) = left_coef; + equality_constraint(i, spline_order_ * ((i / 2) + 1) + j) = right_coef; + if (j >= 1) { + equality_constraint(i + 1, spline_order_ * (i / 2) + j) = + left_dcoef * j; + equality_constraint(i + 1, spline_order_ * ((i / 2) + 1) + j) = + right_dcoef * j; + left_dcoef = left_coef; + right_dcoef = right_coef; + } + left_coef *= x_left; + right_coef *= x_right; + } + } + return equality_constraint_.AddConstraint(equality_constraint, + equality_boundary); +} + +bool Spline1dConstraint::AddSecondDerivativeSmoothConstraint() { + if (x_knots_.size() < 3) { + return false; + } + + const std::uint32_t n_constraint = (x_knots_.size() - 2) * 3; + Eigen::MatrixXd equality_constraint = Eigen::MatrixXd::Zero( + n_constraint, (x_knots_.size() - 1) * spline_order_); + Eigen::MatrixXd equality_boundary = Eigen::MatrixXd::Zero(n_constraint, 1); + + for (std::uint32_t i = 0; i < n_constraint; i += 3) { + double left_coef = 1.0; + double right_coef = -1.0; + double left_dcoef = 1.0; + double right_dcoef = -1.0; + double left_ddcoef = 1.0; + double right_ddcoef = -1.0; + + const double x_left = x_knots_[i / 3 + 1] - x_knots_[i / 3]; + const double x_right = 0.0; + for (std::uint32_t j = 0; j < spline_order_; ++j) { + equality_constraint(i, spline_order_ * (i / 3) + j) = left_coef; + equality_constraint(i, spline_order_ * (i / 3 + 1) + j) = right_coef; + + if (j >= 2) { + equality_constraint(i + 2, spline_order_ * i / 3 + j) = + left_ddcoef * j * (j - 1); + equality_constraint(i + 2, spline_order_ * (i / 3 + 1) + j) = + right_ddcoef * j * (j - 1); + left_ddcoef = left_dcoef; + right_ddcoef = right_dcoef; + } + + if (j >= 1) { + equality_constraint(i + 1, spline_order_ * (i / 3) + j) = + left_dcoef * j; + equality_constraint(i + 1, spline_order_ * (i / 3 + 1) + j) = + right_dcoef * j; + left_dcoef = left_coef; + right_dcoef = right_coef; + } + left_coef *= x_left; + right_coef *= x_right; + } + } + return equality_constraint_.AddConstraint(equality_constraint, + equality_boundary); +} + +bool Spline1dConstraint::AddThirdDerivativeSmoothConstraint() { + if (x_knots_.size() < 3) { + return false; + } + + const std::uint32_t n_constraint = (x_knots_.size() - 2) * 4; + Eigen::MatrixXd equality_constraint = Eigen::MatrixXd::Zero( + n_constraint, (x_knots_.size() - 1) * spline_order_); + Eigen::MatrixXd equality_boundary = Eigen::MatrixXd::Zero(n_constraint, 1); + + for (std::uint32_t i = 0; i < n_constraint; i += 4) { + double left_coef = 1.0; + double right_coef = -1.0; + double left_dcoef = 1.0; + double right_dcoef = -1.0; + double left_ddcoef = 1.0; + double right_ddcoef = -1.0; + double left_dddcoef = 1.0; + double right_dddcoef = -1.0; + + const double x_left = x_knots_[i / 4 + 1] - x_knots_[i / 4]; + const double x_right = 0.0; + for (std::uint32_t j = 0; j < spline_order_; ++j) { + equality_constraint(i, spline_order_ * i / 4 + j) = left_coef; + equality_constraint(i, spline_order_ * (i / 4 + 1) + j) = right_coef; + + if (j >= 3) { + equality_constraint(i + 3, spline_order_ * i / 4 + j) = + left_dddcoef * j * (j - 1) * (j - 2); + equality_constraint(i + 3, spline_order_ * (i / 4 + 1) + j) = + right_dddcoef * j * (j - 1) * (j - 2); + left_dddcoef = left_ddcoef; + right_dddcoef = right_ddcoef; + } + + if (j >= 2) { + equality_constraint(i + 2, spline_order_ * i / 4 + j) = + left_ddcoef * j * (j - 1); + equality_constraint(i + 2, spline_order_ * (i / 4 + 1) + j) = + right_ddcoef * j * (j - 1); + left_ddcoef = left_dcoef; + right_ddcoef = right_dcoef; + } + + if (j >= 1) { + equality_constraint(i + 1, spline_order_ * i / 4 + j) = left_dcoef * j; + equality_constraint(i + 1, spline_order_ * (i / 4 + 1) + j) = + right_dcoef * j; + left_dcoef = left_coef; + right_dcoef = right_coef; + } + + left_coef *= x_left; + right_coef *= x_right; + } + } + return equality_constraint_.AddConstraint(equality_constraint, + equality_boundary); +} + +bool Spline1dConstraint::AddMonotoneInequalityConstraint( + const std::vector& x_coord) { + if (x_coord.size() < 2) { + // no inequality constraint needed + return false; + } + + Eigen::MatrixXd inequality_constraint = Eigen::MatrixXd::Zero( + x_coord.size() - 1, (x_knots_.size() - 1) * spline_order_); + Eigen::MatrixXd inequality_boundary = + Eigen::MatrixXd::Zero(x_coord.size() - 1, 1); + + std::uint32_t prev_spline_index = FindIndex(x_coord[0]); + double prev_rel_x = x_coord[0] - x_knots_[prev_spline_index]; + std::vector prev_coef; + GeneratePowerX(prev_rel_x, spline_order_, &prev_coef); + for (std::uint32_t i = 1; i < x_coord.size(); ++i) { + std::uint32_t cur_spline_index = FindIndex(x_coord[i]); + double cur_rel_x = x_coord[i] - x_knots_[cur_spline_index]; + std::vector cur_coef; + GeneratePowerX(cur_rel_x, spline_order_, &cur_coef); + // if constraint on the same spline + if (cur_spline_index == prev_spline_index) { + for (std::uint32_t j = 0; j < cur_coef.size(); ++j) { + inequality_constraint(i - 1, cur_spline_index * spline_order_ + j) = + cur_coef[j] - prev_coef[j]; + } + } else { + // if not on the same spline + for (std::uint32_t j = 0; j < cur_coef.size(); ++j) { + inequality_constraint(i - 1, prev_spline_index * spline_order_ + j) = + -prev_coef[j]; + inequality_constraint(i - 1, cur_spline_index * spline_order_ + j) = + cur_coef[j]; + } + } + prev_coef = cur_coef; + } + + return inequality_constraint_.AddConstraint(inequality_constraint, + inequality_boundary); +} + +bool Spline1dConstraint::AddMonotoneInequalityConstraintAtKnots() { + return AddMonotoneInequalityConstraint(x_knots_); +} + +const AffineConstraint& Spline1dConstraint::inequality_constraint() const { + return inequality_constraint_; +} + +const AffineConstraint& Spline1dConstraint::equality_constraint() const { + return equality_constraint_; +} + +std::uint32_t Spline1dConstraint::FindIndex(const double x) const { + auto upper_bound = std::upper_bound(x_knots_.begin() + 1, x_knots_.end(), x); + return std::min(static_cast(x_knots_.size() - 1), + static_cast(upper_bound - x_knots_.begin())) - + 1; +} + +bool Spline1dConstraint::FilterConstraints( + const std::vector& x_coord, const std::vector& lower_bound, + const std::vector& upper_bound, + std::vector* const filtered_lower_bound_x, + std::vector* const filtered_lower_bound, + std::vector* const filtered_upper_bound_x, + std::vector* const filtered_upper_bound) { + filtered_lower_bound->clear(); + filtered_upper_bound->clear(); + filtered_lower_bound_x->clear(); + filtered_upper_bound_x->clear(); + + const double inf = std::numeric_limits::infinity(); + + filtered_lower_bound->reserve(lower_bound.size()); + filtered_lower_bound_x->reserve(lower_bound.size()); + + filtered_upper_bound->reserve(upper_bound.size()); + filtered_upper_bound_x->reserve(upper_bound.size()); + + for (std::uint32_t i = 0; i < lower_bound.size(); ++i) { + if (std::isnan(lower_bound[i]) || lower_bound[i] == inf) { + return false; + } + if (lower_bound[i] < inf && lower_bound[i] > -inf) { + filtered_lower_bound->emplace_back(lower_bound[i]); + filtered_lower_bound_x->emplace_back(x_coord[i]); + } + } + + for (std::uint32_t i = 0; i < upper_bound.size(); ++i) { + if (std::isnan(upper_bound[i]) || upper_bound[i] == -inf) { + return false; + } + if (upper_bound[i] < inf && upper_bound[i] > -inf) { + filtered_upper_bound->emplace_back(upper_bound[i]); + filtered_upper_bound_x->emplace_back(x_coord[i]); + } + } + return true; +} + +void Spline1dConstraint::GeneratePowerX( + const double x, const std::uint32_t order, + std::vector* const power_x) const { + double cur_x = 1; + for (std::uint32_t i = 0; i < order; ++i) { + power_x->emplace_back(cur_x); + cur_x *= x; + } +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_1d_constraint.h b/modules/planning/math/smoothing_spline/spline_1d_constraint.h new file mode 100644 index 00000000000..44f61535604 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_1d_constraint.h @@ -0,0 +1,132 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : spline_1d_constraint.h + * @brief: wrapp up solver constraint interface with direct methods and preset + *methods + **/ + +#ifndef MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_CONSTRAINT_H_ +#define MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_CONSTRAINT_H_ + +#include +#include +#include "Eigen/Core" + +#include "modules/planning/math/smoothing_spline/affine_constraint.h" +#include "modules/planning/math/smoothing_spline/spline_1d.h" + +namespace apollo { +namespace planning { + +class Spline1dConstraint { + public: + explicit Spline1dConstraint(const Spline1d& pss); + Spline1dConstraint(const std::vector& x_knots, + const std::uint32_t order); + + // direct methods + bool AddInequalityConstraint(const Eigen::MatrixXd& constraint_matrix, + const Eigen::MatrixXd& constraint_boundary); + bool AddEqualityConstraint(const Eigen::MatrixXd& constraint_matrix, + const Eigen::MatrixXd& constraint_boundary); + + // preset method + /** + * @brief: inequality boundary constraints + * if no boundary, do specify either by std::infinity or let vector.size() = + *0 + **/ + bool AddBoundary(const std::vector& x_coord, + const std::vector& lower_bound, + const std::vector& upper_bound); + + bool AddDerivativeBoundary(const std::vector& x_coord, + const std::vector& lower_bound, + const std::vector& upper_bound); + + bool AddSecondDerivativeBoundary(const std::vector& x_coord, + const std::vector& lower_bound, + const std::vector& upper_bound); + + bool AddThirdDerivativeBoundary(const std::vector& x_coord, + const std::vector& lower_bound, + const std::vector& upper_bound); + + /** + * @brief: equality constraint to guarantee joint smoothness + **/ + // boundary equality constriant + // constraint on fx, dfx, ddfx ... in vector form; upto third order + bool AddPointConstraint(const double x, const double fx); + bool AddPointDerivativeConstraint(const double x, const double dfx); + bool AddPointSecondDerivativeConstraint(const double x, const double ddfx); + bool AddPointThirdDerivativeConstraint(const double x, const double dddfx); + + // guarantee upto values are joint + bool AddSmoothConstraint(); + + // guarantee upto derivative are joint + bool AddDerivativeSmoothConstraint(); + + // guarantee upto second order derivative are joint + bool AddSecondDerivativeSmoothConstraint(); + + // guarantee upto third order derivative are joint + bool AddThirdDerivativeSmoothConstraint(); + + /** + * @brief: Add monotone constraint inequality, guarantee the monotone city at + *evaluated point + **/ + + // customized monotone inequality constraint at x_coord + bool AddMonotoneInequalityConstraint(const std::vector& x_coord); + + // default inequality constraint at knots + bool AddMonotoneInequalityConstraintAtKnots(); + + /** + * @brief: output interface inequality constraint + **/ + const AffineConstraint& inequality_constraint() const; + const AffineConstraint& equality_constraint() const; + + private: + std::uint32_t FindIndex(const double x) const; + + bool FilterConstraints(const std::vector& x_coord, + const std::vector& lower_bound, + const std::vector& upper_bound, + std::vector* const filtered_lower_bound_x, + std::vector* const filtered_lower_bound, + std::vector* const filtered_upper_bound_x, + std::vector* const filtered_upper_bound); + void GeneratePowerX(const double x, const std::uint32_t order, + std::vector* const power_x) const; + + private: + AffineConstraint inequality_constraint_; + AffineConstraint equality_constraint_; + std::vector x_knots_; + std::uint32_t spline_order_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_CONSTRAINT_H_ diff --git a/modules/planning/math/smoothing_spline/spline_1d_generator.cc b/modules/planning/math/smoothing_spline/spline_1d_generator.cc new file mode 100644 index 00000000000..99ead06c654 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_1d_generator.cc @@ -0,0 +1,84 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : spline_1d_generator.cc + * @brief: piecewise_smoothing_spline (pss) generator class + * solve pss by qp algorithm, include adding constraint, adding + *kernel, and solver solve + **/ + +#include "modules/planning/math/smoothing_spline/spline_1d_generator.h" + +#include "modules/common/math/qp_solver/active_set_qp_solver.h" + +namespace apollo { +namespace planning { + +Spline1dGenerator::Spline1dGenerator(const std::vector& x_knots, + const std::uint32_t spline_order) + : spline_(x_knots, spline_order), + spline_constraint_(x_knots, spline_order), + spline_kernel_(x_knots, spline_order) {} + +Spline1dConstraint* Spline1dGenerator::mutable_spline_constraint() { + return &spline_constraint_; +} + +Spline1dKernel* Spline1dGenerator::mutable_spline_kernel() { + return &spline_kernel_; +} + +void Spline1dGenerator::SetupInitQpPoint(const Eigen::MatrixXd& x, + const Eigen::MatrixXd& y, + const Eigen::MatrixXd& z, + const Eigen::MatrixXd& s) { + init_x_ = x; + init_y_ = y; + init_z_ = z; + init_s_ = s; +} + +bool Spline1dGenerator::Solve() { + const Eigen::MatrixXd& kernel_matrix = spline_kernel_.kernel_matrix(); + const Eigen::MatrixXd& offset = spline_kernel_.offset(); + const Eigen::MatrixXd& inequality_constraint_matrix = + spline_constraint_.inequality_constraint().constraint_matrix(); + const Eigen::MatrixXd& inequality_constraint_boundary = + spline_constraint_.inequality_constraint().constraint_boundary(); + const Eigen::MatrixXd& equality_constraint_matrix = + spline_constraint_.equality_constraint().constraint_matrix(); + const Eigen::MatrixXd& equality_constraint_boundary = + spline_constraint_.equality_constraint().constraint_boundary(); + + qp_solver_.reset(new apollo::common::math::ActiveSetQpSolver( + kernel_matrix, offset, inequality_constraint_matrix, + inequality_constraint_boundary, equality_constraint_matrix, + equality_constraint_boundary)); + + if (!qp_solver_->Solve()) { + return false; + } + + const std::uint32_t spline_order = spline_.spline_order(); + const Eigen::MatrixXd solved_params = qp_solver_->params(); + return spline_.SetSplineSegs(solved_params, spline_order); +} + +const Spline1d& Spline1dGenerator::spline() const { return spline_; } + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_1d_generator.h b/modules/planning/math/smoothing_spline/spline_1d_generator.h new file mode 100644 index 00000000000..afbd096bff0 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_1d_generator.h @@ -0,0 +1,101 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : spline_1d_generator.h + * @brief: piecewise_smoothing_spline (pss) generator class + * solve pss by qp algorithm, include adding constraint, adding + *kernel, and solver solve + **/ + +// -- spline config +// 1. knots +// 2. order +// +// -- constraint config +// 1. init point constraint +// 2. inequality bound constraint +// A. fx bound constraint +// B. f' bound constraint +// C. f'' bound constraint +// D. f''' bound constraint +// 3. equality smooth constraint +// A. Level of smoothness, linear, upto derivative, +// upto second order derivative +// +// -- kernel configs +// 1. integrated kernel constraint; +// 2. regularized kernel avoid sigularity; +// 3. other customized kernel (e.g) +// A. kernel -- ( -s(t_g)^2 ) given end point time, find the +// B. kernel -- ( sum(l^2_i)) ... +// +// -- solve + +#ifndef MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_GENERATOR_H_ +#define MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_GENERATOR_H_ + +#include +#include + +#include "Eigen/Core" + +#include "modules/common/math/qp_solver/qp_solver.h" +#include "modules/planning/math/smoothing_spline/spline_1d.h" +#include "modules/planning/math/smoothing_spline/spline_1d_constraint.h" +#include "modules/planning/math/smoothing_spline/spline_1d_kernel.h" + +namespace apollo { +namespace planning { + +class Spline1dGenerator { + public: + Spline1dGenerator(const std::vector& x_knots, + const std::uint32_t order); + + // add constraint through pss_constraint + Spline1dConstraint* mutable_spline_constraint(); + + // add kernel through pss_kernel + Spline1dKernel* mutable_spline_kernel(); + + // setup initialize point, if not, + // will use the default primal-dual parameter + void SetupInitQpPoint(const Eigen::MatrixXd& x, const Eigen::MatrixXd& y, + const Eigen::MatrixXd& z, const Eigen::MatrixXd& s); + + // solve + bool Solve(); + + // output + const Spline1d& spline() const; + + private: + Spline1d spline_; + Spline1dConstraint spline_constraint_; + Spline1dKernel spline_kernel_; + + std::unique_ptr qp_solver_ = nullptr; + Eigen::MatrixXd init_x_; + Eigen::MatrixXd init_y_; + Eigen::MatrixXd init_z_; + Eigen::MatrixXd init_s_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_GENERATOR_H_ diff --git a/modules/planning/math/smoothing_spline/spline_1d_generator_test.cc b/modules/planning/math/smoothing_spline/spline_1d_generator_test.cc new file mode 100644 index 00000000000..f5d22829337 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_1d_generator_test.cc @@ -0,0 +1,116 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file spline_smoother_solver.cc + **/ +#include "modules/planning/math/smoothing_spline/spline_1d_generator.h" + +#include "glog/logging.h" +#include "gtest/gtest.h" + +namespace apollo { +namespace planning { + +TEST(Spline1dGenerator, one) { + // starting point + std::vector x_knots{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + Spline1dGenerator pg(x_knots, 6); + + auto* spline_constraint = pg.mutable_spline_constraint(); + auto* spline_kernel = pg.mutable_spline_kernel(); + ASSERT_TRUE(spline_constraint != nullptr); + ASSERT_TRUE(spline_kernel != nullptr); + + std::vector x_coord{0, 0.4, 0.8, 1.2, 1.6, 2, 2.4, + 2.8, 3.2, 3.6, 4, 4.4, 4.8, 5.2, + 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8}; + std::vector fx_guide{ + 0, 1.8, 3.6, 5.14901, 6.7408, 8.46267, 10.2627, + 12.0627, 13.8627, 15.6627, 17.4627, 19.2627, 21.0627, 22.8627, + 24.6627, 26.4627, 28.2627, 30.0627, 31.8627, 33.6627, 35.4627}; + std::vector lower_bound(x_coord.size(), 0.0); + std::vector upper_bound(x_coord.size(), 68.4432); + spline_constraint->AddBoundary(x_coord, lower_bound, upper_bound); + std::vector speed_lower_bound(x_coord.size(), 0.0); + std::vector speed_upper_bound(x_coord.size(), 4.5); + spline_constraint->AddDerivativeBoundary(x_coord, speed_lower_bound, + speed_upper_bound); + // add jointness smooth constraint, up to jerk level continuous + spline_constraint->AddThirdDerivativeSmoothConstraint(); + spline_constraint->AddMonotoneInequalityConstraintAtKnots(); + spline_constraint->AddPointConstraint(0.0, 0.0); + spline_constraint->AddPointDerivativeConstraint(0.0, 4.2194442749023438); + spline_constraint->AddPointSecondDerivativeConstraint(0.0, + 1.2431812867484089); + spline_constraint->AddPointSecondDerivativeConstraint(8.0, 0.0); + + // add kernel (optimize kernel); + // jerk cost + + spline_kernel->AddThirdOrderDerivativeMatrix(1000.0); + spline_kernel->AddReferenceLineKernelMatrix(x_coord, fx_guide, 0.4); + + EXPECT_TRUE(pg.Solve()); + // extract parameters + auto params = pg.spline(); +} + +TEST(Spline1dGenerator, two) { + // starting point + std::vector x_knots{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + Spline1dGenerator pg(x_knots, 6); + + auto* spline_constraint = pg.mutable_spline_constraint(); + auto* spline_kernel = pg.mutable_spline_kernel(); + ASSERT_TRUE(spline_constraint != nullptr); + ASSERT_TRUE(spline_kernel != nullptr); + + std::vector x_coord{0, 0.4, 0.8, 1.2, 1.6, 2, 2.4, + 2.8, 3.2, 3.6, 4, 4.4, 4.8, 5.2, + 5.6, 6, 6.4, 6.8, 7.2, 7.6, 8}; + std::vector fx_guide{ + 0, 1.8, 3.6, 5.14901, 6.7408, 8.46267, 10.2627, + 12.0627, 13.8627, 15.6627, 17.4627, 19.2627, 21.0627, 22.8627, + 24.6627, 26.4627, 28.2627, 30.0627, 31.8627, 33.6627, 35.4627}; + std::vector lower_bound(x_coord.size(), 0.0); + std::vector upper_bound(x_coord.size(), 68.4432); + spline_constraint->AddBoundary(x_coord, lower_bound, upper_bound); + std::vector speed_lower_bound(x_coord.size(), 0.0); + std::vector speed_upper_bound(x_coord.size(), 4.5); + spline_constraint->AddDerivativeBoundary(x_coord, speed_lower_bound, + speed_upper_bound); + // add jointness smooth constraint, up to jerk level continuous + spline_constraint->AddThirdDerivativeSmoothConstraint(); + spline_constraint->AddMonotoneInequalityConstraintAtKnots(); + spline_constraint->AddPointConstraint(0.0, 0.0); + spline_constraint->AddPointDerivativeConstraint(0.0, 0); + spline_constraint->AddPointSecondDerivativeConstraint(0.0, 0.0); + spline_constraint->AddPointSecondDerivativeConstraint(8.0, 0.0); + + // add kernel (optimize kernel); + // jerk cost + + spline_kernel->AddThirdOrderDerivativeMatrix(1000.0); + spline_kernel->AddReferenceLineKernelMatrix(x_coord, fx_guide, 0.4); + + EXPECT_TRUE(pg.Solve()); + // extract parameters + auto params = pg.spline(); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_1d_kernel.cc b/modules/planning/math/smoothing_spline/spline_1d_kernel.cc new file mode 100644 index 00000000000..626668bcfb2 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_1d_kernel.cc @@ -0,0 +1,176 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : piecewise_smoothing_spline_constraint.h + * @brief: wrapp up solver constraint interface with direct methods and preset + *methods + **/ + +#include "modules/planning/math/smoothing_spline/spline_1d_kernel.h" + +#include + +#include "modules/planning/math/smoothing_spline/spline_seg_kernel.h" + +namespace apollo { +namespace planning { + +Spline1dKernel::Spline1dKernel(const Spline1d& spline1d) + : x_knots_(spline1d.x_knots()), spline_order_(spline1d.spline_order()) { + total_params_ = + (x_knots_.size() > 1 ? (x_knots_.size() - 1) * spline_order_ : 0); + kernel_matrix_ = Eigen::MatrixXd::Zero(total_params_, total_params_); + offset_ = Eigen::MatrixXd::Zero(total_params_, 1); +} + +Spline1dKernel::Spline1dKernel(const std::vector& x_knots, + const std::uint32_t spline_order) + : x_knots_(x_knots), spline_order_(spline_order) { + total_params_ = + (x_knots.size() > 1 ? (x_knots.size() - 1) * spline_order_ : 0); + kernel_matrix_ = Eigen::MatrixXd::Zero(total_params_, total_params_); + offset_ = Eigen::MatrixXd::Zero(total_params_, 1); +} + +void Spline1dKernel::AddRegularization(const double regularized_param) { + Eigen::MatrixXd id_matrix = + Eigen::MatrixXd::Identity(kernel_matrix_.rows(), kernel_matrix_.cols()); + kernel_matrix_ += id_matrix * regularized_param; +} + +bool Spline1dKernel::AddKernel(const Eigen::MatrixXd& kernel, + const Eigen::MatrixXd& offset, + const double weight) { + if (kernel.rows() != kernel.cols() || + kernel.rows() != kernel_matrix_.rows() || offset.cols() != 1 || + offset.rows() != offset_.rows()) { + return false; + } + kernel_matrix_ += kernel * weight; + offset_ += offset * weight; + return true; +} + +bool Spline1dKernel::AddKernel(const Eigen::MatrixXd& kernel, + const double weight) { + Eigen::MatrixXd offset = Eigen::MatrixXd::Zero(kernel.rows(), 1); + return AddKernel(kernel, offset, weight); +} + +Eigen::MatrixXd* Spline1dKernel::mutable_kernel_matrix() { + return &kernel_matrix_; +} + +Eigen::MatrixXd* Spline1dKernel::mutable_offset() { return &offset_; } + +const Eigen::MatrixXd& Spline1dKernel::kernel_matrix() const { + return kernel_matrix_; +} + +const Eigen::MatrixXd& Spline1dKernel::offset() const { return offset_; } + +// build-in kernel methods +void Spline1dKernel::AddDerivativeKernelMatrix(const double weight) { + for (std::uint32_t i = 0; i + 1 < x_knots_.size(); ++i) { + Eigen::MatrixXd cur_kernel = + SplineSegKernel::instance()->DerivativeKernel( + spline_order_, x_knots_[i + 1] - x_knots_[i]) * + weight; + kernel_matrix_.block(i * spline_order_, i * spline_order_, spline_order_, + spline_order_) += cur_kernel; + } +} + +void Spline1dKernel::AddSecondOrderDerivativeMatrix(const double weight) { + for (std::uint32_t i = 0; i + 1 < x_knots_.size(); ++i) { + Eigen::MatrixXd cur_kernel = + SplineSegKernel::instance()->SecondOrderDerivativeKernel( + spline_order_, x_knots_[i + 1] - x_knots_[i]) * + weight; + kernel_matrix_.block(i * spline_order_, i * spline_order_, spline_order_, + spline_order_) += cur_kernel; + } +} + +void Spline1dKernel::AddThirdOrderDerivativeMatrix(const double weight) { + for (std::uint32_t i = 0; i + 1 < x_knots_.size(); ++i) { + Eigen::MatrixXd cur_kernel = + SplineSegKernel::instance()->ThirdOrderDerivativeKernel( + spline_order_, x_knots_[i + 1] - x_knots_[i]) * + weight; + kernel_matrix_.block(i * spline_order_, i * spline_order_, spline_order_, + spline_order_) += cur_kernel; + } +} + +bool Spline1dKernel::AddReferenceLineKernelMatrix( + const std::vector& x_coord, const std::vector& ref_x, + const double weight) { + if (ref_x.size() != x_coord.size()) { + return false; + } + + for (std::uint32_t i = 0; i < x_coord.size(); ++i) { + double cur_index = find_index(x_coord[i]); + double cur_rel_x = x_coord[i] - x_knots_[cur_index]; + // update offset + double offset_coef = -2.0 * ref_x[i] * weight; + for (std::uint32_t j = 0; j < spline_order_; ++j) { + offset_(j + cur_index * spline_order_, 0) += offset_coef; + offset_coef *= cur_rel_x; + } + // update kernel matrix + Eigen::MatrixXd ref_kernel(spline_order_, spline_order_); + + double cur_x = 1.0; + std::vector power_x; + for (std::uint32_t n = 0; n + 1 < 2 * spline_order_; ++n) { + power_x.emplace_back(cur_x); + cur_x *= cur_rel_x; + } + + for (std::uint32_t r = 0; r < spline_order_; ++r) { + for (std::uint32_t c = 0; c < spline_order_; ++c) { + ref_kernel(r, c) = power_x[r + c]; + } + } + + kernel_matrix_.block(cur_index * spline_order_, cur_index * spline_order_, + spline_order_, spline_order_) += weight * ref_kernel; + } + return true; +} + +std::uint32_t Spline1dKernel::find_index(const double x) const { + auto upper_bound = std::upper_bound(x_knots_.begin() + 1, x_knots_.end(), x); + return std::min(static_cast(x_knots_.size() - 1), + static_cast(upper_bound - x_knots_.begin())) - + 1; +} + +void Spline1dKernel::add_distance_offset(const double weight) { + for (std::uint32_t i = 1; i < x_knots_.size(); ++i) { + const double cur_x = x_knots_[i] - x_knots_[i - 1]; + double pw_x = 2.0 * weight; + for (std::uint32_t j = 0; j < spline_order_; ++j) { + offset_((i - 1) * spline_order_ + j, 0) -= pw_x; + pw_x *= cur_x; + } + } +} +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_1d_kernel.h b/modules/planning/math/smoothing_spline/spline_1d_kernel.h new file mode 100644 index 00000000000..b55f647ef9e --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_1d_kernel.h @@ -0,0 +1,81 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : spline_1d_kernel.h + * @brief: wrapp up solver constraint interface with direct methods and preset + *methods + **/ + +#ifndef MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_KERNEL_H_ +#define MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_KERNEL_H_ + +#include +#include "Eigen/Core" + +#include "modules/planning/math/smoothing_spline/spline_1d.h" + +namespace apollo { +namespace planning { + +class Spline1dKernel { + public: + explicit Spline1dKernel(const Spline1d& spline1d); + explicit Spline1dKernel(const std::vector& x_knots, + const std::uint32_t spline_order); + + // customized input / output method + void AddRegularization(const double regularized_param); + bool AddKernel(const Eigen::MatrixXd& kernel, const Eigen::MatrixXd& offset, + const double weight); + bool AddKernel(const Eigen::MatrixXd& kernel, const double weight); + + Eigen::MatrixXd* mutable_kernel_matrix(); + Eigen::MatrixXd* mutable_offset(); + + const Eigen::MatrixXd& kernel_matrix() const; + const Eigen::MatrixXd& offset() const; + + // build-in kernel methods + void AddDerivativeKernelMatrix(const double weight); + void AddSecondOrderDerivativeMatrix(const double weight); + void AddThirdOrderDerivativeMatrix(const double weight); + + // reference line kernel, x_coord in strictly increasing order (for path + // optimizer) + bool AddReferenceLineKernelMatrix(const std::vector& x_coord, + const std::vector& ref_fx, + const double weight); + + // distance offset (for speed optimizer, given time optimize the distance can + // go); + void add_distance_offset(const double weight); + + private: + std::uint32_t find_index(const double x) const; + + private: + Eigen::MatrixXd kernel_matrix_; + Eigen::MatrixXd offset_; + std::vector x_knots_; + std::uint32_t spline_order_; + std::uint32_t total_params_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_KERNEL_H_ diff --git a/modules/planning/math/smoothing_spline/spline_1d_kernel_test.cc b/modules/planning/math/smoothing_spline/spline_1d_kernel_test.cc new file mode 100644 index 00000000000..768f31bd750 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_1d_kernel_test.cc @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ +#include "modules/planning/math/smoothing_spline/spline_1d_kernel.h" + +#include "glog/logging.h" +#include "gtest/gtest.h" + +namespace apollo { +namespace planning { + +TEST(Spline1dKernel, add_reference_line_kernel) { + std::vector x_knots = {0.0, 1.0, 2.0, 3.0}; + int32_t spline_order = 5; + Spline1dKernel kernel(x_knots, spline_order); + Eigen::IOFormat OctaveFmt(Eigen::StreamPrecision, 0, ", ", ";\n", "", "", "[", + "]"); + + std::vector x_coord = {0.0, 1.0, 2.0, 3.0}; + std::vector ref_x = {0.0, 0.5, 0.6, 2.0}; + kernel.AddReferenceLineKernelMatrix(x_coord, ref_x, 1.0); + + Eigen::MatrixXd ref_kernel_matrix = Eigen::MatrixXd::Zero(15, 15); + ref_kernel_matrix << 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1; + + for (int i = 0; i < kernel.kernel_matrix().rows(); ++i) { + for (int j = 0; j < kernel.kernel_matrix().cols(); ++j) { + EXPECT_DOUBLE_EQ(kernel.kernel_matrix()(i, j), ref_kernel_matrix(i, j)); + } + } + + Eigen::MatrixXd ref_offset = Eigen::MatrixXd::Zero(15, 1); + ref_offset << 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -5.2, -4, -4, -4, -4; + for (int i = 0; i < kernel.offset().rows(); ++i) { + for (int j = 0; j < kernel.offset().cols(); ++j) { + EXPECT_DOUBLE_EQ(kernel.offset()(i, j), ref_offset(i, j)); + } + } +} +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_1d_seg.cc b/modules/planning/math/smoothing_spline/spline_1d_seg.cc new file mode 100644 index 00000000000..826365a77f8 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_1d_seg.cc @@ -0,0 +1,75 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : spline_1d_seg.cc + * @brief: polynomial smoothing spline segment + **/ + +#include "modules/planning/math/smoothing_spline/spline_1d_seg.h" + +#include + +namespace apollo { +namespace planning { + +Spline1dSeg::Spline1dSeg(const std::uint32_t order) { + spline_func_ = PolynomialXd(order); + derivative_.DerivedFrom(spline_func_); + second_order_derivative_.DerivedFrom(derivative_); + third_order_derivative_.DerivedFrom(second_order_derivative_); +} + +Spline1dSeg::Spline1dSeg(const std::vector& params) { + spline_func_ = PolynomialXd(params); + derivative_.DerivedFrom(spline_func_); + second_order_derivative_.DerivedFrom(derivative_); + third_order_derivative_.DerivedFrom(second_order_derivative_); +} + +void Spline1dSeg::SetParams(const std::vector& params) { + spline_func_ = PolynomialXd(params); + derivative_.DerivedFrom(spline_func_); + second_order_derivative_.DerivedFrom(derivative_); + third_order_derivative_.DerivedFrom(second_order_derivative_); +} + +double Spline1dSeg::operator()(const double x) const { return spline_func_(x); } + +double Spline1dSeg::Derivative(const double x) const { return derivative_(x); } + +double Spline1dSeg::SecondOrderDerivative(const double x) const { + return second_order_derivative_(x); +} + +double Spline1dSeg::ThirdOrderDerivative(const double x) const { + return third_order_derivative_(x); +} + +const PolynomialXd& Spline1dSeg::spline_func() const { return spline_func_; } + +const PolynomialXd& Spline1dSeg::Derivative() const { return derivative_; } + +const PolynomialXd& Spline1dSeg::SecondOrderDerivative() const { + return second_order_derivative_; +} + +const PolynomialXd& Spline1dSeg::ThirdOrderDerivative() const { + return third_order_derivative_; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_1d_seg.h b/modules/planning/math/smoothing_spline/spline_1d_seg.h new file mode 100644 index 00000000000..a95446475b7 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_1d_seg.h @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : spline_1d_seg.h + * @brief: polynomial smoothing spline + **/ + +#ifndef MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_SEG_H_ +#define MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_SEG_H_ + +#include +#include "Eigen/Core" + +#include "modules/planning/math/polynomial_xd.h" + +namespace apollo { +namespace planning { + +class Spline1dSeg { + public: + // order represent the number of parameters (not the highest order); + explicit Spline1dSeg(const std::uint32_t order); + explicit Spline1dSeg(const std::vector& params); + ~Spline1dSeg() = default; + + void SetParams(const std::vector& params); + double operator()(const double x) const; + double Derivative(const double x) const; + double SecondOrderDerivative(const double x) const; + double ThirdOrderDerivative(const double x) const; + + const PolynomialXd& spline_func() const; + const PolynomialXd& Derivative() const; + const PolynomialXd& SecondOrderDerivative() const; + const PolynomialXd& ThirdOrderDerivative() const; + + private: + PolynomialXd spline_func_; + PolynomialXd derivative_; + PolynomialXd second_order_derivative_; + PolynomialXd third_order_derivative_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_1D_SEG_H_ diff --git a/modules/planning/math/smoothing_spline/spline_2d.cc b/modules/planning/math/smoothing_spline/spline_2d.cc new file mode 100644 index 00000000000..34f47c29447 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_2d.cc @@ -0,0 +1,157 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file spline_2d.cc + **/ + +#include "modules/planning/math/smoothing_spline/spline_2d.h" + +#include +#include + +namespace apollo { +namespace planning { + +Spline2d::Spline2d(const std::vector& t_knots, + const std::uint32_t order) + : t_knots_(t_knots), spline_order_(order) { + if (t_knots.size() > 1) { + for (std::uint32_t i = 1; i < t_knots_.size(); ++i) { + splines_.emplace_back(spline_order_); + } + } +} + +std::pair Spline2d::operator()(const double t) const { + if (splines_.size() == 0) { + return std::make_pair(0.0, 0.0); + } + std::uint32_t index = find_index(t); + return splines_[index](t - t_knots_[index]); +} + +double Spline2d::x(const double t) const { + if (splines_.size() == 0) { + return 0.0; + } + std::uint32_t index = find_index(t); + return splines_[index].x(t - t_knots_[index]); +} + +double Spline2d::y(const double t) const { + if (splines_.size() == 0) { + return 0.0; + } + std::uint32_t index = find_index(t); + return splines_[index].y(t - t_knots_[index]); +} + +double Spline2d::DerivativeX(const double t) const { + // zero order spline + if (splines_.size() == 0) { + return 0.0; + } + std::uint32_t index = find_index(t); + return splines_[index].DerivativeX(t - t_knots_[index]); +} + +double Spline2d::derivative_y(const double t) const { + // zero order spline + if (splines_.size() == 0) { + return 0.0; + } + std::uint32_t index = find_index(t); + return splines_[index].derivative_y(t - t_knots_[index]); +} + +double Spline2d::SecondDerivativeX(const double t) const { + if (splines_.size() == 0) { + return 0.0; + } + std::uint32_t index = find_index(t); + return splines_[index].SecondDerivativeX(t - t_knots_[index]); +} + +double Spline2d::second_derivative_y(const double t) const { + if (splines_.size() == 0) { + return 0.0; + } + std::uint32_t index = find_index(t); + return splines_[index].second_derivative_y(t - t_knots_[index]); +} + +double Spline2d::ThirdDerivativeX(const double t) const { + if (splines_.size() == 0) { + return 0.0; + } + std::uint32_t index = find_index(t); + return splines_[index].ThirdDerivativeX(t - t_knots_[index]); +} + +double Spline2d::third_derivative_y(const double t) const { + if (splines_.size() == 0) { + return 0.0; + } + std::uint32_t index = find_index(t); + return splines_[index].third_derivative_y(t - t_knots_[index]); +} +/** +* @brief: set splines +**/ +bool Spline2d::set_splines(const Eigen::MatrixXd& params, + const std::uint32_t order) { + // check if the parameter size fit + if (2 * t_knots_.size() * order != + 2 * order + static_cast(params.rows())) { + return false; + } + for (std::uint32_t i = 0; i < splines_.size(); ++i) { + std::vector spline_piece_x(order, 0.0); + std::vector spline_piece_y(order, 0.0); + for (std::uint32_t j = 0; j < order; ++j) { + spline_piece_x[j] = params(2 * i * order + j, 0); + spline_piece_y[j] = params((2 * i + 1) * order + j, 0); + } + splines_[i].SetParams(spline_piece_x, spline_piece_y); + } + spline_order_ = order; + return true; +} + +// get the mutable single smoothing spline, if index out of range, nullptr will +// returned; +Spline2dSeg* Spline2d::mutable_smoothing_spline(const std::uint32_t index) { + return &splines_[index]; +} + +const Spline2dSeg& Spline2d::smoothing_spline(const std::uint32_t index) const { + return splines_[index]; +} + +const std::vector& Spline2d::t_knots() const { return t_knots_; } + +std::uint32_t Spline2d::spline_order() const { return spline_order_; } + +std::uint32_t Spline2d::find_index(const double t) const { + auto upper_bound = std::upper_bound(t_knots_.begin() + 1, t_knots_.end(), t); + return std::min(static_cast(t_knots_.size() - 1), + static_cast(upper_bound - t_knots_.begin())) - + 1; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_2d.h b/modules/planning/math/smoothing_spline/spline_2d.h new file mode 100644 index 00000000000..02ed6383059 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_2d.h @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : spline_2d.h + * @brief: piecewise smoothing spline 2d class + **/ + +#ifndef MODULES_PLANNING_SMOOTHING_SPLINE_SPLINE_2D_H_ +#define MODULES_PLANNING_SMOOTHING_SPLINE_SPLINE_2D_H_ + +#include +#include + +#include "Eigen/Core" + +#include "modules/planning/math/polynomial_xd.h" +#include "modules/planning/math/smoothing_spline/spline_2d_seg.h" + +namespace apollo { +namespace planning { + +class Spline2d { + public: + Spline2d(const std::vector& t_knots, const std::uint32_t order); + std::pair operator()(const double t) const; + double x(const double t) const; + double y(const double t) const; + double DerivativeX(const double t) const; + double derivative_y(const double t) const; + double SecondDerivativeX(const double t) const; + double second_derivative_y(const double t) const; + double ThirdDerivativeX(const double t) const; + double third_derivative_y(const double t) const; + bool set_splines(const Eigen::MatrixXd& params, const std::uint32_t order); + Spline2dSeg* mutable_smoothing_spline(const std::uint32_t index); + const Spline2dSeg& smoothing_spline(const std::uint32_t index) const; + const std::vector& t_knots() const; + std::uint32_t spline_order() const; + + private: + std::uint32_t find_index(const double x) const; + + private: + std::vector splines_; + std::vector t_knots_; + std::uint32_t spline_order_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_SMOOTHING_SPLINE_SPLINE_2D_H_ diff --git a/modules/planning/math/smoothing_spline/spline_2d_constraint.cc b/modules/planning/math/smoothing_spline/spline_2d_constraint.cc new file mode 100644 index 00000000000..541b4b1164c --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_2d_constraint.cc @@ -0,0 +1,534 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : spline_smoother_constraint.cc + **/ + +#include "modules/planning/math/smoothing_spline/spline_2d_constraint.h" + +#include +#include + +namespace apollo { +namespace planning { + +using apollo::common::math::Vec2d; + +Spline2dConstraint::Spline2dConstraint(const std::vector& t_knots, + const std::uint32_t order) + : t_knots_(t_knots), spline_order_(order) { + inequality_constraint_.SetIsEquality(false); + equality_constraint_.SetIsEquality(true); + total_param_ = 2 * spline_order_ * (t_knots.size() - 1); +} + +// direct method +bool Spline2dConstraint::AddInequalityConstraint( + const Eigen::MatrixXd& constraint_matrix, + const Eigen::MatrixXd& constraint_boundary) { + return inequality_constraint_.AddConstraint(constraint_matrix, + constraint_boundary); +} + +bool Spline2dConstraint::AddEqualityConstraint( + const Eigen::MatrixXd& constraint_matrix, + const Eigen::MatrixXd& constraint_boundary) { + return equality_constraint_.AddConstraint(constraint_matrix, + constraint_boundary); +} + +// preset method +/** +* @brief: inequality boundary constraints +* if no boundary, do specify either by std::infinity or let vector.size() = 0 +**/ +bool Spline2dConstraint::Add2dBoundary( + const std::vector& t_coord, const std::vector& angle, + const std::vector& ref_point, + const std::vector& longitidinal_bound, + const std::vector& lateral_bound) { + if (t_coord.size() != angle.size() || angle.size() != ref_point.size() || + ref_point.size() != longitidinal_bound.size() || + longitidinal_bound.size() != lateral_bound.size()) { + return false; + } + Eigen::MatrixXd affine_inequality = + Eigen::MatrixXd::Zero(4 * t_coord.size(), total_param_); + Eigen::MatrixXd affine_boundary = + Eigen::MatrixXd::Zero(4 * t_coord.size(), 1); + for (std::uint32_t i = 0; i < t_coord.size(); ++i) { + const double d_longitudinal = SignDistance(ref_point[i], angle[i]); + const double d_lateral = SignDistance(ref_point[i], angle[i] - M_PI / 2.0); + const std::uint32_t index = FindIndex(t_coord[i]); + const double rel_t = t_coord[i] - t_knots_[index]; + const std::uint32_t index_offset = 2 * index * spline_order_; + std::vector longi_coef = AffineCoef(angle[i], rel_t); + std::vector lateral_coef = AffineCoef(angle[i] - M_PI / 2, rel_t); + for (std::uint32_t j = 0; j < 2 * spline_order_; ++j) { + // upper longi + affine_inequality(4 * i, index_offset + j) = longi_coef[j]; + // lower longi + affine_inequality(4 * i + 1, index_offset + j) = -longi_coef[j]; + // upper lateral + affine_inequality(4 * i + 2, index_offset + j) = lateral_coef[j]; + // lower lateral + affine_inequality(4 * i + 3, index_offset + j) = -lateral_coef[j]; + } + + affine_boundary(4 * i, 0) = d_longitudinal - longitidinal_bound[i]; + affine_boundary(4 * i + 1, 0) = -d_longitudinal - longitidinal_bound[i]; + affine_boundary(4 * i + 2, 0) = d_lateral - lateral_bound[i]; + affine_boundary(4 * i + 3, 0) = -d_lateral - lateral_bound[i]; + } + return AddInequalityConstraint(affine_inequality, affine_boundary); +} + +bool Spline2dConstraint::Add2dDerivativeBoundary( + const std::vector& t_coord, const std::vector& angle, + const std::vector& ref_point, + const std::vector& longitidinal_bound, + const std::vector& lateral_bound) { + if (t_coord.size() != angle.size() || angle.size() != ref_point.size() || + ref_point.size() != longitidinal_bound.size() || + longitidinal_bound.size() != lateral_bound.size()) { + return false; + } + Eigen::MatrixXd affine_inequality = + Eigen::MatrixXd::Zero(4 * t_coord.size(), total_param_); + Eigen::MatrixXd affine_boundary = + Eigen::MatrixXd::Zero(4 * t_coord.size(), 1); + for (std::uint32_t i = 0; i < t_coord.size(); ++i) { + const double d_longitudinal = SignDistance(ref_point[i], angle[i]); + const double d_lateral = SignDistance(ref_point[i], angle[i] - M_PI / 2.0); + const std::uint32_t index = FindIndex(t_coord[i]); + const double rel_t = t_coord[i] - t_knots_[index]; + const std::uint32_t index_offset = 2 * index * spline_order_; + std::vector longi_coef = AffineDerivativeCoef(angle[i], rel_t); + std::vector lateral_coef = + AffineDerivativeCoef(angle[i] - M_PI / 2, rel_t); + for (std::uint32_t j = 0; j < 2 * spline_order_; ++j) { + // upper longi + affine_inequality(4 * i, index_offset + j) = longi_coef[j]; + // lower longi + affine_inequality(4 * i + 1, index_offset + j) = -longi_coef[j]; + // upper lateral + affine_inequality(4 * i + 2, index_offset + j) = lateral_coef[j]; + // lower lateral + affine_inequality(4 * i + 3, index_offset + j) = -lateral_coef[j]; + } + + affine_boundary(4 * i, 0) = d_longitudinal - longitidinal_bound[i]; + affine_boundary(4 * i + 1, 0) = -d_longitudinal - longitidinal_bound[i]; + affine_boundary(4 * i + 2, 0) = d_lateral - lateral_bound[i]; + affine_boundary(4 * i + 3, 0) = -d_lateral - lateral_bound[i]; + } + return AddInequalityConstraint(affine_inequality, affine_boundary); +} + +bool Spline2dConstraint::Add2dSecondDerivativeBoundary( + const std::vector& t_coord, const std::vector& angle, + const std::vector& ref_point, + const std::vector& longitidinal_bound, + const std::vector& lateral_bound) { + if (t_coord.size() != angle.size() || angle.size() != ref_point.size() || + ref_point.size() != longitidinal_bound.size() || + longitidinal_bound.size() != lateral_bound.size()) { + return false; + } + Eigen::MatrixXd affine_inequality = + Eigen::MatrixXd::Zero(4 * t_coord.size(), total_param_); + Eigen::MatrixXd affine_boundary = + Eigen::MatrixXd::Zero(4 * t_coord.size(), 1); + for (std::uint32_t i = 0; i < t_coord.size(); ++i) { + const double d_longitudinal = SignDistance(ref_point[i], angle[i]); + const double d_lateral = SignDistance(ref_point[i], angle[i] - M_PI / 2.0); + const std::uint32_t index = FindIndex(t_coord[i]); + const double rel_t = t_coord[i] - t_knots_[index]; + const std::uint32_t index_offset = 2 * index * spline_order_; + std::vector longi_coef = + AffineSecondDerivativeCoef(angle[i], rel_t); + std::vector lateral_coef = + AffineSecondDerivativeCoef(angle[i] - M_PI / 2, rel_t); + for (std::uint32_t j = 0; j < 2 * spline_order_; ++j) { + // upper longi + affine_inequality(4 * i, index_offset + j) = longi_coef[j]; + // lower longi + affine_inequality(4 * i + 1, index_offset + j) = -longi_coef[j]; + // upper lateral + affine_inequality(4 * i + 2, index_offset + j) = lateral_coef[j]; + // lower lateral + affine_inequality(4 * i + 3, index_offset + j) = -lateral_coef[j]; + } + + affine_boundary(4 * i, 0) = d_longitudinal - longitidinal_bound[i]; + affine_boundary(4 * i + 1, 0) = -d_longitudinal - longitidinal_bound[i]; + affine_boundary(4 * i + 2, 0) = d_lateral - lateral_bound[i]; + affine_boundary(4 * i + 3, 0) = -d_lateral - lateral_bound[i]; + } + return AddInequalityConstraint(affine_inequality, affine_boundary); +} + +bool Spline2dConstraint::Add2dThirdDerivativeBoundary( + const std::vector& t_coord, const std::vector& angle, + const std::vector& ref_point, + const std::vector& longitidinal_bound, + const std::vector& lateral_bound) { + if (t_coord.size() != angle.size() || angle.size() != ref_point.size() || + ref_point.size() != longitidinal_bound.size() || + longitidinal_bound.size() != lateral_bound.size()) { + return false; + } + Eigen::MatrixXd affine_inequality = + Eigen::MatrixXd::Zero(4 * t_coord.size(), total_param_); + Eigen::MatrixXd affine_boundary = + Eigen::MatrixXd::Zero(4 * t_coord.size(), 1); + for (std::uint32_t i = 0; i < t_coord.size(); ++i) { + const double d_longitudinal = SignDistance(ref_point[i], angle[i]); + const double d_lateral = SignDistance(ref_point[i], angle[i] - M_PI / 2.0); + const std::uint32_t index = FindIndex(t_coord[i]); + const double rel_t = t_coord[i] - t_knots_[index]; + const std::uint32_t index_offset = 2 * index * spline_order_; + std::vector longi_coef = AffineThirdDerivativeCoef(angle[i], rel_t); + std::vector lateral_coef = + AffineThirdDerivativeCoef(angle[i] - M_PI / 2, rel_t); + for (std::uint32_t j = 0; j < 2 * spline_order_; ++j) { + // upper longi + affine_inequality(4 * i, index_offset + j) = longi_coef[j]; + // lower longi + affine_inequality(4 * i + 1, index_offset + j) = -longi_coef[j]; + // upper lateral + affine_inequality(4 * i + 2, index_offset + j) = lateral_coef[j]; + // lower lateral + affine_inequality(4 * i + 3, index_offset + j) = -lateral_coef[j]; + } + + affine_boundary(4 * i, 0) = d_longitudinal - longitidinal_bound[i]; + affine_boundary(4 * i + 1, 0) = -d_longitudinal - longitidinal_bound[i]; + affine_boundary(4 * i + 2, 0) = d_lateral - lateral_bound[i]; + affine_boundary(4 * i + 3, 0) = -d_lateral - lateral_bound[i]; + } + return AddInequalityConstraint(affine_inequality, affine_boundary); +} + +bool Spline2dConstraint::AddPointConstraint(const double t, const double x, + const double y) { + const std::uint32_t index = FindIndex(t); + const std::uint32_t index_offset = index * 2 * spline_order_; + const double rel_t = t - t_knots_[index]; + + Eigen::MatrixXd affine_equality = Eigen::MatrixXd::Zero(2, total_param_); + Eigen::MatrixXd affine_boundary = Eigen::MatrixXd::Zero(2, 1); + affine_boundary << x, y; + std::vector power_t = PolyCoef(rel_t); + for (std::uint32_t i = 0; i < spline_order_; ++i) { + affine_equality(0, i + index_offset) = power_t[i]; + affine_equality(1, i + spline_order_ + index_offset) = power_t[i]; + } + return AddEqualityConstraint(affine_equality, affine_boundary); +} + +bool Spline2dConstraint::AddPointAngleConstraint(const double t, + const double angle) { + const std::uint32_t index = FindIndex(t); + const std::uint32_t index_offset = index * 2 * spline_order_; + const double rel_t = t - t_knots_[index]; + + // add equality constraint + Eigen::MatrixXd affine_equality = Eigen::MatrixXd::Zero(1, total_param_); + Eigen::MatrixXd affine_boundary = Eigen::MatrixXd::Zero(1, 1); + std::vector line_derivative_coef = AffineDerivativeCoef(angle, rel_t); + for (std::uint32_t i = 0; i < line_derivative_coef.size(); ++i) { + affine_equality(0, i + index_offset) = line_derivative_coef[i]; + } + + // add inequality constraint + Eigen::MatrixXd affine_inequality = Eigen::MatrixXd::Zero(2, total_param_); + Eigen::MatrixXd affine_inequality_boundary = Eigen::MatrixXd::Zero(2, 1); + std::vector t_coef = DerivativeCoef(rel_t); + int x_sign = 1; + int y_sign = 1; + double normalized_angle = fmod(angle, M_PI * 2); + if (normalized_angle < 0) { + normalized_angle += M_PI * 2; + } + if (normalized_angle > (M_PI / 2) && normalized_angle < (M_PI * 1.5)) { + x_sign = -1; + affine_inequality_boundary(0, 0) *= -1; + } + + if (normalized_angle >= M_PI) { + y_sign = -1; + affine_inequality_boundary(1, 0) *= -1; + } + + for (std::uint32_t i = 0; i < t_coef.size(); ++i) { + affine_inequality(0, i + index_offset) = t_coef[i] * x_sign; + affine_inequality(1, i + index_offset + spline_order_) = t_coef[i] * y_sign; + } + if (!AddEqualityConstraint(affine_equality, affine_boundary)) { + return false; + } + return AddInequalityConstraint(affine_inequality, affine_inequality_boundary); +} + +// guarantee upto values are joint +bool Spline2dConstraint::AddSmoothConstraint() { + if (t_knots_.size() < 3) { + return false; + } + Eigen::MatrixXd affine_equality = + Eigen::MatrixXd::Zero(2 * (t_knots_.size() - 2), total_param_); + Eigen::MatrixXd affine_boundary = + Eigen::MatrixXd::Zero(2 * (t_knots_.size() - 2), 1); + for (std::uint32_t i = 0; i + 2 < t_knots_.size(); ++i) { + const double rel_t = t_knots_[i + 1] - t_knots_[i]; + const std::uint32_t index_offset = 2 * i * spline_order_; + std::vector power_t = PolyCoef(rel_t); + + for (std::uint32_t j = 0; j < spline_order_; ++j) { + affine_equality(2 * i, j + index_offset) = power_t[j]; + affine_equality(2 * i + 1, j + index_offset + spline_order_) = power_t[j]; + } + affine_equality(2 * i, index_offset + 2 * spline_order_) = -1.0; + affine_equality(2 * i + 1, index_offset + 3 * spline_order_) = -1.0; + } + return AddEqualityConstraint(affine_equality, affine_boundary); +} + +// guarantee upto derivative are joint +bool Spline2dConstraint::AddDerivativeSmoothConstraint() { + if (t_knots_.size() < 3) { + return false; + } + Eigen::MatrixXd affine_equality = + Eigen::MatrixXd::Zero(4 * (t_knots_.size() - 2), total_param_); + Eigen::MatrixXd affine_boundary = + Eigen::MatrixXd::Zero(4 * (t_knots_.size() - 2), 1); + + for (std::uint32_t i = 0; i + 2 < t_knots_.size(); ++i) { + const double rel_t = t_knots_[i + 1] - t_knots_[i]; + const std::uint32_t index_offset = 2 * i * spline_order_; + std::vector power_t = PolyCoef(rel_t); + std::vector derivative_t = DerivativeCoef(rel_t); + for (std::uint32_t j = 0; j < spline_order_; ++j) { + affine_equality(4 * i, j + index_offset) = power_t[j]; + affine_equality(4 * i + 1, j + index_offset) = derivative_t[j]; + affine_equality(4 * i + 2, j + index_offset + spline_order_) = power_t[j]; + affine_equality(4 * i + 3, j + index_offset + spline_order_) = + derivative_t[j]; + } + affine_equality(4 * i, index_offset + 2 * spline_order_) = -1.0; + affine_equality(4 * i + 1, index_offset + 2 * spline_order_ + 1) = -1.0; + affine_equality(4 * i + 2, index_offset + 3 * spline_order_) = -1.0; + affine_equality(4 * i + 3, index_offset + 3 * spline_order_ + 1) = -1.0; + } + return AddEqualityConstraint(affine_equality, affine_boundary); +} + +// guarantee upto second order derivative are joint +bool Spline2dConstraint::AddSecondDerivativeSmoothConstraint() { + if (t_knots_.size() < 3) { + return false; + } + Eigen::MatrixXd affine_equality = + Eigen::MatrixXd::Zero(6 * (t_knots_.size() - 2), total_param_); + Eigen::MatrixXd affine_boundary = + Eigen::MatrixXd::Zero(6 * (t_knots_.size() - 2), 1); + + for (std::uint32_t i = 0; i + 2 < t_knots_.size(); ++i) { + const double rel_t = t_knots_[i + 1] - t_knots_[i]; + const std::uint32_t index_offset = 2 * i * spline_order_; + std::vector power_t = PolyCoef(rel_t); + std::vector derivative_t = DerivativeCoef(rel_t); + std::vector second_derivative_t = SecondDerivativeCoef(rel_t); + for (std::uint32_t j = 0; j < spline_order_; ++j) { + affine_equality(6 * i, j + index_offset) = power_t[j]; + affine_equality(6 * i + 1, j + index_offset) = derivative_t[j]; + affine_equality(6 * i + 2, j + index_offset) = second_derivative_t[j]; + affine_equality(6 * i + 3, j + index_offset + spline_order_) = power_t[j]; + affine_equality(6 * i + 4, j + index_offset + spline_order_) = + derivative_t[j]; + affine_equality(6 * i + 5, j + index_offset + spline_order_) = + second_derivative_t[j]; + } + affine_equality(6 * i, index_offset + 2 * spline_order_) = -1.0; + affine_equality(6 * i + 1, index_offset + 2 * spline_order_ + 1) = -1.0; + affine_equality(6 * i + 2, index_offset + 2 * spline_order_ + 2) = -2.0; + affine_equality(6 * i + 3, index_offset + 3 * spline_order_) = -1.0; + affine_equality(6 * i + 4, index_offset + 3 * spline_order_ + 1) = -1.0; + affine_equality(6 * i + 5, index_offset + 3 * spline_order_ + 2) = -2.0; + } + return AddEqualityConstraint(affine_equality, affine_boundary); +} + +// guarantee upto third order derivative are joint +bool Spline2dConstraint::AddThirdDerivativeSmoothConstraint() { + if (t_knots_.size() < 3) { + return false; + } + Eigen::MatrixXd affine_equality = + Eigen::MatrixXd::Zero(8 * (t_knots_.size() - 2), total_param_); + Eigen::MatrixXd affine_boundary = + Eigen::MatrixXd::Zero(8 * (t_knots_.size() - 2), 1); + + for (std::uint32_t i = 0; i + 2 < t_knots_.size(); ++i) { + const double rel_t = t_knots_[i + 1] - t_knots_[i]; + const std::uint32_t index_offset = 2 * i * spline_order_; + std::vector power_t = PolyCoef(rel_t); + std::vector derivative_t = DerivativeCoef(rel_t); + std::vector second_derivative_t = SecondDerivativeCoef(rel_t); + std::vector third_derivative_t = ThirdDerivativeCoef(rel_t); + for (std::uint32_t j = 0; j < spline_order_; ++j) { + affine_equality(8 * i, j + index_offset) = power_t[j]; + affine_equality(8 * i + 1, j + index_offset) = derivative_t[j]; + affine_equality(8 * i + 2, j + index_offset) = second_derivative_t[j]; + affine_equality(8 * i + 3, j + index_offset) = third_derivative_t[j]; + affine_equality(8 * i + 4, j + index_offset + spline_order_) = power_t[j]; + affine_equality(8 * i + 5, j + index_offset + spline_order_) = + derivative_t[j]; + affine_equality(8 * i + 6, j + index_offset + spline_order_) = + second_derivative_t[j]; + affine_equality(8 * i + 7, j + index_offset + spline_order_) = + third_derivative_t[j]; + } + affine_equality(8 * i, index_offset + 2 * spline_order_) = -1.0; + affine_equality(8 * i + 1, index_offset + 2 * spline_order_ + 1) = -1.0; + affine_equality(8 * i + 2, index_offset + 2 * spline_order_ + 2) = -2.0; + affine_equality(8 * i + 3, index_offset + 2 * spline_order_ + 3) = -6.0; + affine_equality(8 * i + 4, index_offset + 3 * spline_order_) = -1.0; + affine_equality(8 * i + 5, index_offset + 3 * spline_order_ + 1) = -1.0; + affine_equality(8 * i + 6, index_offset + 3 * spline_order_ + 2) = -2.0; + affine_equality(8 * i + 7, index_offset + 3 * spline_order_ + 3) = -6.0; + } + return AddEqualityConstraint(affine_equality, affine_boundary); +} + +/** +* @brief: output interface inequality constraint +**/ +const AffineConstraint& Spline2dConstraint::inequality_constraint() const { + return inequality_constraint_; +} + +const AffineConstraint& Spline2dConstraint::equality_constraint() const { + return equality_constraint_; +} + +std::uint32_t Spline2dConstraint::FindIndex(const double t) const { + auto upper_bound = std::upper_bound(t_knots_.begin() + 1, t_knots_.end(), t); + return std::min(static_cast(t_knots_.size() - 1), + static_cast(upper_bound - t_knots_.begin())) - + 1; +} + +std::vector Spline2dConstraint::AffineCoef(const double angle, + const double t) const { + std::vector result(spline_order_ * 2, 0.0); + double x_coef = -std::sin(angle); + double y_coef = std::cos(angle); + for (std::uint32_t i = 0; i < spline_order_; ++i) { + result[i] = x_coef; + result[i + spline_order_] = y_coef; + x_coef *= t; + y_coef *= t; + } + return result; +} + +std::vector Spline2dConstraint::AffineDerivativeCoef( + const double angle, const double t) const { + std::vector result(spline_order_ * 2, 0.0); + double x_coef = -std::sin(angle); + double y_coef = std::cos(angle); + std::vector power_t = PolyCoef(t); + for (std::uint32_t i = 1; i < spline_order_; ++i) { + result[i] = x_coef * power_t[i - 1] * i; + result[i + spline_order_] = y_coef * power_t[i - 1] * i; + } + return result; +} + +std::vector Spline2dConstraint::AffineSecondDerivativeCoef( + const double angle, const double t) const { + std::vector result(spline_order_ * 2, 0.0); + double x_coef = -std::sin(angle); + double y_coef = std::cos(angle); + std::vector power_t = PolyCoef(t); + for (std::uint32_t i = 2; i < spline_order_; ++i) { + result[i] = x_coef * power_t[i - 2] * i * (i - 1); + result[i + spline_order_] = y_coef * power_t[i - 2] * i * (i - 1); + } + return result; +} + +std::vector Spline2dConstraint::AffineThirdDerivativeCoef( + const double angle, const double t) const { + std::vector result(spline_order_ * 2, 0.0); + double x_coef = -std::sin(angle); + double y_coef = std::cos(angle); + std::vector power_t = PolyCoef(t); + for (std::uint32_t i = 3; i < spline_order_; ++i) { + result[i] = x_coef * power_t[i - 3] * i * (i - 1) * (i - 2); + result[i + spline_order_] = y_coef * power_t[i - 3] * i * (i - 1) * (i - 2); + } + return result; +} + +double Spline2dConstraint::SignDistance(const Vec2d& xy_point, + const double angle) const { + return -std::sin(angle) * xy_point.x() + std::cos(angle) * xy_point.y(); +} + +std::vector Spline2dConstraint::PolyCoef(const double t) const { + std::vector result(spline_order_, 1.0); + for (std::uint32_t i = 1; i < result.size(); ++i) { + result[i] = result[i - 1] * t; + } + return result; +} + +std::vector Spline2dConstraint::DerivativeCoef(const double t) const { + std::vector result(spline_order_, 0.0); + std::vector power_t = PolyCoef(t); + for (std::uint32_t i = 1; i < result.size(); ++i) { + result[i] = power_t[i - 1] * i; + } + return result; +} + +std::vector Spline2dConstraint::SecondDerivativeCoef( + const double t) const { + std::vector result(spline_order_, 0.0); + std::vector power_t = PolyCoef(t); + for (std::uint32_t i = 2; i < result.size(); ++i) { + result[i] = power_t[i - 2] * i * (i - 1); + } + return result; +} + +std::vector Spline2dConstraint::ThirdDerivativeCoef( + const double t) const { + std::vector result(spline_order_, 0.0); + std::vector power_t = PolyCoef(t); + for (std::uint32_t i = 3; i < result.size(); ++i) { + result[i] = power_t[i - 3] * i * (i - 1) * (i - 2); + } + return result; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_2d_constraint.h b/modules/planning/math/smoothing_spline/spline_2d_constraint.h new file mode 100644 index 00000000000..bc4521ac0cd --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_2d_constraint.h @@ -0,0 +1,126 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file spline_2d_constraint.h + **/ + +#ifndef MODULES_PLANNING_SMOOTHING_SPLINE_SPLINE_2D_CONSTRAINT_H_ +#define MODULES_PLANNING_SMOOTHING_SPLINE_SPLINE_2D_CONSTRAINT_H_ + +#include +#include "Eigen/Core" + +#include "modules/common/math/vec2d.h" +#include "modules/planning/math/smoothing_spline/affine_constraint.h" +#include "modules/planning/math/smoothing_spline/spline_2d.h" + +namespace apollo { +namespace planning { + +class Spline2dConstraint { + public: + Spline2dConstraint(const std::vector& t_knots, + const std::uint32_t order); + + // direct method + bool AddInequalityConstraint(const Eigen::MatrixXd& constraint_matrix, + const Eigen::MatrixXd& constraint_boundary); + bool AddEqualityConstraint(const Eigen::MatrixXd& constraint_matrix, + const Eigen::MatrixXd& constraint_boundary); + + // preset method + /** + * @brief: inequality boundary constraints + * if no boundary, do specify either by std::infinity or let vector.size() = + *0 + **/ + bool Add2dBoundary(const std::vector& t_coord, + const std::vector& angle, + const std::vector& ref_point, + const std::vector& longitidinal_bound, + const std::vector& lateral_bound); + + // ref point refer to derivative reference point + bool Add2dDerivativeBoundary( + const std::vector& t_coord, const std::vector& angle, + const std::vector& ref_point, + const std::vector& longitidinal_bound, + const std::vector& lateral_bound); + + // ref point refer to second derivative ref point + bool Add2dSecondDerivativeBoundary( + const std::vector& t_coord, const std::vector& angle, + const std::vector& ref_point, + const std::vector& longitidinal_bound, + const std::vector& lateral_bound); + + // ref point refer to third derivative ref point + bool Add2dThirdDerivativeBoundary( + const std::vector& t_coord, const std::vector& angle, + const std::vector& ref_point, + const std::vector& longitidinal_bound, + const std::vector& lateral_bound); + + bool AddPointConstraint(const double t, const double x, const double y); + bool AddPointAngleConstraint(const double t, const double angle); + + // guarantee upto values are joint + bool AddSmoothConstraint(); + + // guarantee upto derivative are joint + bool AddDerivativeSmoothConstraint(); + + // guarantee upto second order derivative are joint + bool AddSecondDerivativeSmoothConstraint(); + + // guarantee upto third order derivative are joint + bool AddThirdDerivativeSmoothConstraint(); + + /** + * @brief: output interface inequality constraint + **/ + const AffineConstraint& inequality_constraint() const; + const AffineConstraint& equality_constraint() const; + + private: + std::uint32_t FindIndex(const double t) const; + std::vector AffineCoef(const double angle, const double t) const; + std::vector AffineDerivativeCoef(const double angle, + const double t) const; + std::vector AffineSecondDerivativeCoef(const double angle, + const double t) const; + std::vector AffineThirdDerivativeCoef(const double angle, + const double t) const; + std::vector PolyCoef(const double t) const; + std::vector DerivativeCoef(const double t) const; + std::vector SecondDerivativeCoef(const double t) const; + std::vector ThirdDerivativeCoef(const double t) const; + double SignDistance(const apollo::common::math::Vec2d& xy_point, + const double angle) const; + + private: + AffineConstraint inequality_constraint_; + AffineConstraint equality_constraint_; + std::vector t_knots_; + std::uint32_t spline_order_; + std::uint32_t total_param_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_SMOOTHING_SPLINE_SPLINE_2D_CONSTRAINT_H_ diff --git a/modules/planning/math/smoothing_spline/spline_2d_kernel.cc b/modules/planning/math/smoothing_spline/spline_2d_kernel.cc new file mode 100644 index 00000000000..8a20dfd77e1 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_2d_kernel.cc @@ -0,0 +1,177 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file spline_2d_kernel.cc + **/ + +#include "modules/planning/math/smoothing_spline/spline_2d_kernel.h" + +#include + +#include "modules/planning/math/smoothing_spline/spline_seg_kernel.h" + +namespace apollo { +namespace planning { + +using apollo::common::math::Vec2d; + +Spline2dKernel::Spline2dKernel(const std::vector& t_knots, + const std::uint32_t spline_order) + : t_knots_(t_knots), spline_order_(spline_order) { + total_params_ = + (t_knots_.size() > 1 ? 2 * (t_knots_.size() - 1) * spline_order_ : 0); + kernel_matrix_ = Eigen::MatrixXd::Zero(total_params_, total_params_); + offset_ = Eigen::MatrixXd::Zero(total_params_, 1); +} + +// customized input output +void Spline2dKernel::AddRegularization(const double regularization_param) { + Eigen::MatrixXd id_matrix = + Eigen::MatrixXd::Identity(kernel_matrix_.rows(), kernel_matrix_.cols()); + kernel_matrix_ += id_matrix * regularization_param; +} + +bool Spline2dKernel::AddKernel(const Eigen::MatrixXd& kernel, + const Eigen::MatrixXd& offset, + const double weight) { + if (kernel.rows() != kernel.cols() || + kernel.rows() != kernel_matrix_.rows() || offset.cols() != 1 || + offset.rows() != offset_.rows()) { + return false; + } + kernel_matrix_ += kernel * weight; + offset_ += offset * weight; + return true; +} + +bool Spline2dKernel::AddKernel(const Eigen::MatrixXd& kernel, + const double weight) { + Eigen::MatrixXd offset = Eigen::MatrixXd::Zero(kernel.rows(), 1); + return AddKernel(kernel, offset, weight); +} + +Eigen::MatrixXd* Spline2dKernel::mutable_kernel_matrix() { + return &kernel_matrix_; +} + +Eigen::MatrixXd* Spline2dKernel::mutable_offset() { return &offset_; } + +const Eigen::MatrixXd& Spline2dKernel::kernel_matrix() const { + return kernel_matrix_; +} + +const Eigen::MatrixXd& Spline2dKernel::offset() const { return offset_; } + +// build-in kernel methods +void Spline2dKernel::AddDerivativeKernelMatrix(const double weight) { + for (std::uint32_t i = 0; i + 1 < t_knots_.size(); ++i) { + Eigen::MatrixXd cur_kernel = + SplineSegKernel::instance()->DerivativeKernel( + spline_order_, t_knots_[i + 1] - t_knots_[i]) * + weight; + kernel_matrix_.block(2 * i * spline_order_, 2 * i * spline_order_, + spline_order_, spline_order_) += cur_kernel; + kernel_matrix_.block((2 * i + 1) * spline_order_, + (2 * i + 1) * spline_order_, spline_order_, + spline_order_) += cur_kernel; + } +} + +void Spline2dKernel::AddSecondOrderDerivativeMatrix(const double weight) { + for (std::uint32_t i = 0; i + 1 < t_knots_.size(); ++i) { + Eigen::MatrixXd cur_kernel = + SplineSegKernel::instance()->SecondOrderDerivativeKernel( + spline_order_, t_knots_[i + 1] - t_knots_[i]) * + weight; + kernel_matrix_.block(2 * i * spline_order_, 2 * i * spline_order_, + spline_order_, spline_order_) += cur_kernel; + kernel_matrix_.block((2 * i + 1) * spline_order_, + (2 * i + 1) * spline_order_, spline_order_, + spline_order_) += cur_kernel; + } +} + +void Spline2dKernel::AddThirdOrderDerivativeMatrix(const double weight) { + for (std::uint32_t i = 0; i + 1 < t_knots_.size(); ++i) { + Eigen::MatrixXd cur_kernel = + SplineSegKernel::instance()->ThirdOrderDerivativeKernel( + spline_order_, t_knots_[i + 1] - t_knots_[i]) * + weight; + kernel_matrix_.block(2 * i * spline_order_, 2 * i * spline_order_, + spline_order_, spline_order_) += cur_kernel; + kernel_matrix_.block((2 * i + 1) * spline_order_, + (2 * i + 1) * spline_order_, spline_order_, + spline_order_) += cur_kernel; + } +} + +// reference line kernel, t_coord in strictly increasing order (for path +// optimizer) +bool Spline2dKernel::AddReferenceLineKernelMatrix( + const std::vector& t_coord, const std::vector& ref_points, + const double weight) { + if (ref_points.size() != t_coord.size()) { + return false; + } + + for (std::uint32_t i = 0; i < t_coord.size(); ++i) { + double cur_index = find_index(t_coord[i]); + double cur_rel_t = t_coord[i] - t_knots_[cur_index]; + // update offset + double offset_coef_x = -ref_points[i].x() * weight; + double offset_coef_y = -ref_points[i].y() * weight; + for (std::uint32_t j = 0; j < spline_order_; ++j) { + offset_(j + (2 * cur_index) * spline_order_, 0) = offset_coef_x; + offset_(j + (2 * cur_index + 1) * spline_order_, 0) = offset_coef_y; + offset_coef_x *= cur_rel_t; + offset_coef_y *= cur_rel_t; + } + + // update kernel matrix + Eigen::MatrixXd ref_kernel(spline_order_, spline_order_); + + double cur_t = 1.0; + std::vector power_t; + for (std::uint32_t n = 0; n + 1 < 2 * spline_order_; ++n) { + power_t.emplace_back(cur_t); + cur_t *= cur_rel_t; + } + + for (std::uint32_t r = 0; r < spline_order_; ++r) { + for (std::uint32_t c = 0; c < spline_order_; ++c) { + ref_kernel(r, c) = power_t[r + c]; + } + } + kernel_matrix_.block((2 * cur_index) * spline_order_, + (2 * cur_index) * spline_order_, spline_order_, + spline_order_) += weight * ref_kernel; + kernel_matrix_.block((2 * cur_index + 1) * spline_order_, + (2 * cur_index + 1) * spline_order_, spline_order_, + spline_order_) += weight * ref_kernel; + } + return true; +} + +std::uint32_t Spline2dKernel::find_index(const double t) const { + auto upper_bound = std::upper_bound(t_knots_.begin() + 1, t_knots_.end(), t); + return std::min(static_cast(t_knots_.size() - 1), + static_cast(upper_bound - t_knots_.begin())) - + 1; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_2d_kernel.h b/modules/planning/math/smoothing_spline/spline_2d_kernel.h new file mode 100644 index 00000000000..6afd0249556 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_2d_kernel.h @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file spline_2d_kernel.h + **/ + +#ifndef MODULES_PLANNING_SMOOTHING_SPLINE_2D_KERNEL_H_ +#define MODULES_PLANNING_SMOOTHING_SPLINE_2D_KERNEL_H_ + +#include +#include "Eigen/Core" + +#include "modules/common/math/vec2d.h" +#include "modules/planning/math/smoothing_spline/spline_2d.h" + +namespace apollo { +namespace planning { + +class Spline2dKernel { + public: + Spline2dKernel(const std::vector& t_knots, + const std::uint32_t spline_order); + + // customized input output + void AddRegularization(const double regularization_param); + bool AddKernel(const Eigen::MatrixXd& kernel, const Eigen::MatrixXd& offset, + const double weight); + bool AddKernel(const Eigen::MatrixXd& kernel, const double weight); + + Eigen::MatrixXd* mutable_kernel_matrix(); + Eigen::MatrixXd* mutable_offset(); + + const Eigen::MatrixXd& kernel_matrix() const; + const Eigen::MatrixXd& offset() const; + + // build-in kernel methods + void AddDerivativeKernelMatrix(const double weight); + void AddSecondOrderDerivativeMatrix(const double weight); + void AddThirdOrderDerivativeMatrix(const double weight); + + // reference line kernel, x_coord in strictly increasing order + bool AddReferenceLineKernelMatrix( + const std::vector& t_coord, + const std::vector& ref_points, const double weight); + + private: + std::uint32_t find_index(const double x) const; + + private: + Eigen::MatrixXd kernel_matrix_; + Eigen::MatrixXd offset_; + std::vector t_knots_; + std::uint32_t spline_order_; + std::uint32_t total_params_; +}; + +} // namespace planning +} // namespace apollo +#endif // MODULES_PLANNING_SMOOTHING_SPLINE_2D_KERNEL_H_ diff --git a/modules/planning/math/smoothing_spline/spline_2d_seg.cc b/modules/planning/math/smoothing_spline/spline_2d_seg.cc new file mode 100644 index 00000000000..aa62ea5cce1 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_2d_seg.cc @@ -0,0 +1,126 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : spline_2d_seg.cc + * @brief: polynomial smoothing spline + **/ + +#include "modules/planning/math/smoothing_spline/spline_2d_seg.h" +#include + +namespace apollo { +namespace planning { +Spline2dSeg::Spline2dSeg(const std::uint32_t order) + : spline_func_x_(order), spline_func_y_(order) { + derivative_x_.DerivedFrom(spline_func_x_); + derivative_y_.DerivedFrom(spline_func_y_); + second_derivative_x_.DerivedFrom(derivative_x_); + second_derivative_y_.DerivedFrom(derivative_y_); + third_derivative_x_.DerivedFrom(second_derivative_x_); + third_derivative_y_.DerivedFrom(second_derivative_y_); +} + +Spline2dSeg::Spline2dSeg(const std::vector& x_param, + const std::vector& y_param) + : spline_func_x_(x_param), spline_func_y_(y_param) { + derivative_x_.DerivedFrom(spline_func_x_); + derivative_y_.DerivedFrom(spline_func_y_); + second_derivative_x_.DerivedFrom(derivative_x_); + second_derivative_y_.DerivedFrom(derivative_y_); + third_derivative_x_.DerivedFrom(second_derivative_x_); + third_derivative_y_.DerivedFrom(second_derivative_y_); +} + +bool Spline2dSeg::SetParams(const std::vector& x_param, + const std::vector& y_param) { + if (x_param.size() != y_param.size()) { + return false; + } + + spline_func_x_ = PolynomialXd(x_param); + spline_func_y_ = PolynomialXd(y_param); + derivative_x_.DerivedFrom(spline_func_x_); + derivative_y_.DerivedFrom(spline_func_y_); + second_derivative_x_.DerivedFrom(derivative_x_); + second_derivative_y_.DerivedFrom(derivative_y_); + third_derivative_x_.DerivedFrom(second_derivative_x_); + third_derivative_y_.DerivedFrom(second_derivative_y_); + return true; +} + +std::pair Spline2dSeg::operator()(const double t) const { + return std::make_pair(spline_func_x_(t), spline_func_y_(t)); +} + +double Spline2dSeg::x(const double t) const { return spline_func_x_(t); } + +double Spline2dSeg::y(const double t) const { return spline_func_y_(t); } + +double Spline2dSeg::DerivativeX(const double t) const { + return derivative_x_(t); +} + +double Spline2dSeg::derivative_y(const double t) const { + return derivative_y_(t); +} + +double Spline2dSeg::SecondDerivativeX(const double t) const { + return second_derivative_x_(t); +} + +double Spline2dSeg::second_derivative_y(const double t) const { + return second_derivative_y_(t); +} + +double Spline2dSeg::ThirdDerivativeX(const double t) const { + return third_derivative_x_(t); +} + +double Spline2dSeg::third_derivative_y(const double t) const { + return third_derivative_y_(t); +} + +const PolynomialXd& Spline2dSeg::spline_func_x() const { + return spline_func_x_; +} + +const PolynomialXd& Spline2dSeg::spline_func_y() const { + return spline_func_y_; +} + +const PolynomialXd& Spline2dSeg::DerivativeX() const { return derivative_x_; } + +const PolynomialXd& Spline2dSeg::derivative_y() const { return derivative_y_; } + +const PolynomialXd& Spline2dSeg::SecondDerivativeX() const { + return second_derivative_x_; +} + +const PolynomialXd& Spline2dSeg::second_derivative_y() const { + return second_derivative_y_; +} + +const PolynomialXd& Spline2dSeg::ThirdDerivativeX() const { + return third_derivative_x_; +} + +const PolynomialXd& Spline2dSeg::third_derivative_y() const { + return third_derivative_y_; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_2d_seg.h b/modules/planning/math/smoothing_spline/spline_2d_seg.h new file mode 100644 index 00000000000..d3087031a96 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_2d_seg.h @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file spline_2d_seg.h + **/ + +#ifndef MODULES_PLANNING_SMOOTHER_SPLINE_SPLINE_2D_SEG_H_ +#define MODULES_PLANNING_SMOOTHER_SPLINE_SPLINE_2D_SEG_H_ + +#include +#include + +#include "modules/planning/math/polynomial_xd.h" + +namespace apollo { +namespace planning { + +class Spline2dSeg { + public: + // order represent the number of parameters (not the highest order); + explicit Spline2dSeg(const std::uint32_t order); + explicit Spline2dSeg(const std::vector& x_param, + const std::vector& y_param); + ~Spline2dSeg() = default; + + bool SetParams(const std::vector& x_param, + const std::vector& y_param); + + std::pair operator()(const double t) const; + double x(const double t) const; + double y(const double t) const; + double DerivativeX(const double t) const; + double derivative_y(const double t) const; + double SecondDerivativeX(const double t) const; + double second_derivative_y(const double t) const; + double ThirdDerivativeX(const double t) const; + double third_derivative_y(const double t) const; + + const PolynomialXd& spline_func_x() const; + const PolynomialXd& spline_func_y() const; + const PolynomialXd& DerivativeX() const; + const PolynomialXd& derivative_y() const; + const PolynomialXd& SecondDerivativeX() const; + const PolynomialXd& second_derivative_y() const; + const PolynomialXd& ThirdDerivativeX() const; + const PolynomialXd& third_derivative_y() const; + + private: + PolynomialXd spline_func_x_; + PolynomialXd spline_func_y_; + PolynomialXd derivative_x_; + PolynomialXd derivative_y_; + PolynomialXd second_derivative_x_; + PolynomialXd second_derivative_y_; + PolynomialXd third_derivative_x_; + PolynomialXd third_derivative_y_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_SMOOTHER_SPLINE_SMOOTHER_SPLINE2D_H_ diff --git a/modules/planning/math/smoothing_spline/spline_2d_solver.cc b/modules/planning/math/smoothing_spline/spline_2d_solver.cc new file mode 100644 index 00000000000..f0b870b8764 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_2d_solver.cc @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file spline_smoother_solver.cc + **/ + +#include "modules/planning/math/smoothing_spline/spline_2d_solver.h" +#include "modules/common/math/qp_solver/active_set_qp_solver.h" + +namespace apollo { +namespace planning { + +Spline2dSolver::Spline2dSolver(const std::vector& t_knots, + const std::uint32_t order) + : spline_(t_knots, order), + kernel_(t_knots, order), + constraint_(t_knots, order) {} + +// customize setup +Spline2dConstraint* Spline2dSolver::mutable_constraint() { + return &constraint_; +} + +Spline2dKernel* Spline2dSolver::mutable_kernel() { return &kernel_; } + +Spline2d* Spline2dSolver::mutable_spline() { return &spline_; } + +// solve +bool Spline2dSolver::Solve() { + const Eigen::MatrixXd& kernel_matrix = kernel_.kernel_matrix(); + const Eigen::MatrixXd& offset = kernel_.offset(); + const Eigen::MatrixXd& inequality_constraint_matrix = + constraint_.inequality_constraint().constraint_matrix(); + const Eigen::MatrixXd& inequality_constraint_boundary = + constraint_.inequality_constraint().constraint_boundary(); + const Eigen::MatrixXd& equality_constraint_matrix = + constraint_.equality_constraint().constraint_matrix(); + const Eigen::MatrixXd& equality_constraint_boundary = + constraint_.equality_constraint().constraint_boundary(); + + qp_solver_.reset(new apollo::common::math::ActiveSetQpSolver( + kernel_matrix, offset, inequality_constraint_matrix, + inequality_constraint_boundary, equality_constraint_matrix, + equality_constraint_boundary)); + if (!qp_solver_->Solve()) { + return false; + } + + const std::uint32_t spline_order = spline_.spline_order(); + const Eigen::MatrixXd solved_params = qp_solver_->params(); + return spline_.set_splines(solved_params, spline_order); +} + +// extract +const Spline2d& Spline2dSolver::spline() const { return spline_; } +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_2d_solver.h b/modules/planning/math/smoothing_spline/spline_2d_solver.h new file mode 100644 index 00000000000..80ba6b88c88 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_2d_solver.h @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file spline_2d_solver.h + **/ + +#ifndef MODULES_PLANNING_SMOOTHING_SPLINE_SPLINE_2D_SOLVER_H_ +#define MODULES_PLANNING_SMOOTHING_SPLINE_SPLINE_2D_SOLVER_H_ + +#include +#include + +#include "modules/common/math/qp_solver/qp_solver.h" +#include "modules/planning/math/smoothing_spline/spline_2d.h" +#include "modules/planning/math/smoothing_spline/spline_2d_constraint.h" +#include "modules/planning/math/smoothing_spline/spline_2d_kernel.h" + +namespace apollo { +namespace planning { + +class Spline2dSolver { + public: + Spline2dSolver(const std::vector& t_knots, const std::uint32_t order); + + // customize setup + Spline2dConstraint* mutable_constraint(); + Spline2dKernel* mutable_kernel(); + Spline2d* mutable_spline(); + + // solve + bool Solve(); + + // extract + const Spline2d& spline() const; + + private: + Spline2d spline_; + Spline2dKernel kernel_; + Spline2dConstraint constraint_; + std::unique_ptr qp_solver_ = nullptr; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_SMOOTHING_SPLINE_SPLINE_2D_SOLVER_H_ diff --git a/modules/planning/math/smoothing_spline/spline_seg_kernel.cc b/modules/planning/math/smoothing_spline/spline_seg_kernel.cc new file mode 100644 index 00000000000..8123326aa69 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_seg_kernel.cc @@ -0,0 +1,168 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : spline_seg_kernel.cc + * @brief: generating spline kernels + **/ + +#include "modules/planning/math/smoothing_spline/spline_seg_kernel.h" + +#include + +namespace apollo { +namespace planning { + +SplineSegKernel::SplineSegKernel() { + reserved_order_ = 6; + calculate_fx(reserved_order_); + CalculateDerivative(reserved_order_); + CalculateSecondOrderDerivative(reserved_order_); + CalculateThirdOrderDerivative(reserved_order_); +} + +Eigen::MatrixXd SplineSegKernel::Kernel(const std::uint32_t order, + const double accumulated_x) { + if (order > reserved_order_) { + calculate_fx(order); + } + Eigen::MatrixXd term_matrix; + integrated_term_matrix(order, accumulated_x, "fx", &term_matrix); + return kernel_fx_.block(0, 0, order, order).cwiseProduct(term_matrix); +} + +Eigen::MatrixXd SplineSegKernel::DerivativeKernel(const std::uint32_t order, + const double accumulated_x) { + if (order > reserved_order_) { + CalculateDerivative(order); + } + Eigen::MatrixXd term_matrix; + integrated_term_matrix(order, accumulated_x, "derivative", &term_matrix); + return kernel_derivative_.block(0, 0, order, order).cwiseProduct(term_matrix); +} + +Eigen::MatrixXd SplineSegKernel::SecondOrderDerivativeKernel( + const std::uint32_t order, const double accumulated_x) { + if (order > reserved_order_) { + CalculateSecondOrderDerivative(order); + } + Eigen::MatrixXd term_matrix; + integrated_term_matrix(order, accumulated_x, "second_order", &term_matrix); + return kernel_second_order_derivative_.block(0, 0, order, order) + .cwiseProduct(term_matrix); +} + +Eigen::MatrixXd SplineSegKernel::ThirdOrderDerivativeKernel( + const std::uint32_t order, const double accumulated_x) { + if (order > reserved_order_) { + CalculateThirdOrderDerivative(order); + } + Eigen::MatrixXd term_matrix; + integrated_term_matrix(order, accumulated_x, "third_order", &term_matrix); + return (kernel_third_order_derivative_.block(0, 0, order, order)) + .cwiseProduct(term_matrix); +} + +void SplineSegKernel::integrated_term_matrix( + const std::uint32_t order, const double x, const std::string& type, + Eigen::MatrixXd* term_matrix) const { + if (term_matrix->rows() != term_matrix->cols() || + term_matrix->rows() != static_cast(order)) { + term_matrix->resize(order, order); + } + + std::vector x_pow(2 * order + 1, 1.0); + for (std::uint32_t i = 1; i < 2 * order + 1; ++i) { + x_pow[i] = x_pow[i - 1] * x; + } + + if (type == "fx") { + for (std::uint32_t r = 0; r < order; ++r) { + for (std::uint32_t c = 0; c < order; ++c) { + (*term_matrix)(r, c) = x_pow[r + c + 1]; + } + } + + } else if (type == "derivative") { + for (std::uint32_t r = 1; r < order; ++r) { + for (std::uint32_t c = 1; c < order; ++c) { + (*term_matrix)(r, c) = x_pow[r + c - 1]; + } + } + (*term_matrix).block(0, 0, order, 1) = Eigen::MatrixXd::Zero(order, 1); + (*term_matrix).block(0, 0, 1, order) = Eigen::MatrixXd::Zero(1, order); + + } else if (type == "second_order") { + for (std::uint32_t r = 2; r < order; ++r) { + for (std::uint32_t c = 2; c < order; ++c) { + (*term_matrix)(r, c) = x_pow[r + c - 3]; + } + } + (*term_matrix).block(0, 0, order, 2) = Eigen::MatrixXd::Zero(order, 2); + (*term_matrix).block(0, 0, 2, order) = Eigen::MatrixXd::Zero(2, order); + + } else { + for (std::uint32_t r = 3; r < order; ++r) { + for (std::uint32_t c = 3; c < order; ++c) { + (*term_matrix)(r, c) = x_pow[r + c - 5]; + } + } + (*term_matrix).block(0, 0, order, 3) = Eigen::MatrixXd::Zero(order, 3); + (*term_matrix).block(0, 0, 3, order) = Eigen::MatrixXd::Zero(3, order); + } +} + +void SplineSegKernel::calculate_fx(const std::uint32_t order) { + kernel_fx_ = Eigen::MatrixXd::Zero(order, order); + for (int r = 0; r < kernel_fx_.rows(); ++r) { + for (int c = 0; c < kernel_fx_.cols(); ++c) { + kernel_fx_(r, c) = 1.0 / (r + c + 1.0); + } + } +} + +void SplineSegKernel::CalculateDerivative(const std::uint32_t order) { + kernel_derivative_ = Eigen::MatrixXd::Zero(order, order); + for (int r = 1; r < kernel_derivative_.rows(); ++r) { + for (int c = 1; c < kernel_derivative_.cols(); ++c) { + kernel_derivative_(r, c) = r * c / (r + c - 1.0); + } + } +} + +void SplineSegKernel::CalculateSecondOrderDerivative( + const std::uint32_t order) { + kernel_second_order_derivative_ = Eigen::MatrixXd::Zero(order, order); + for (int r = 2; r < kernel_second_order_derivative_.rows(); ++r) { + for (int c = 2; c < kernel_second_order_derivative_.cols(); ++c) { + kernel_second_order_derivative_(r, c) = + (r * r - r) * (c * c - c) / (r + c - 3.0); + } + } +} + +void SplineSegKernel::CalculateThirdOrderDerivative(const std::uint32_t order) { + kernel_third_order_derivative_ = Eigen::MatrixXd::Zero(order, order); + for (int r = 3; r < kernel_third_order_derivative_.rows(); ++r) { + for (int c = 3; c < kernel_third_order_derivative_.cols(); ++c) { + kernel_third_order_derivative_(r, c) = + (r * r - r) * (r - 2) * (c * c - c) * (c - 2) / (r + c - 5.0); + } + } +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/smoothing_spline/spline_seg_kernel.h b/modules/planning/math/smoothing_spline/spline_seg_kernel.h new file mode 100644 index 00000000000..10f268a0f67 --- /dev/null +++ b/modules/planning/math/smoothing_spline/spline_seg_kernel.h @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : spline_seg_kernel.h + * @brief: generating integrated kernels for smoothing spline + * + * x' P x = int_0 ^x (f(x)^(k))^2 dx, k = 0, 1, 2, 3 + * P is the kernel of k-th smooth kernel + **/ + +#ifndef MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_SEG_KERNEL_H_ +#define MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_SEG_KERNEL_H_ + +#include +#include + +#include "Eigen/Core" + +#include "modules/common/macro.h" + +namespace apollo { +namespace planning { + +class SplineSegKernel { + public: + // generating kernel matrix + Eigen::MatrixXd Kernel(const std::uint32_t order, const double accumalated_x); + Eigen::MatrixXd DerivativeKernel(const std::uint32_t order, + const double accumalated_x); + Eigen::MatrixXd SecondOrderDerivativeKernel(const std::uint32_t order, + const double accumalated_x); + Eigen::MatrixXd ThirdOrderDerivativeKernel(const std::uint32_t order, + const double accumalated_x); + + private: + void integrated_term_matrix(const std::uint32_t order, const double x, + const std::string& type, + Eigen::MatrixXd* term_matrix) const; + void calculate_fx(const std::uint32_t order); + void CalculateDerivative(const std::uint32_t order); + void CalculateSecondOrderDerivative(const std::uint32_t order); + void CalculateThirdOrderDerivative(const std::uint32_t order); + + std::uint32_t reserved_order_; + Eigen::MatrixXd kernel_fx_; + Eigen::MatrixXd kernel_derivative_; + Eigen::MatrixXd kernel_second_order_derivative_; + Eigen::MatrixXd kernel_third_order_derivative_; + DECLARE_SINGLETON(SplineSegKernel); +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SMOOTHING_SPLINE_SPLINE_SEG_KERNEL_H_ diff --git a/modules/planning/math/spiral_curve/BUILD b/modules/planning/math/spiral_curve/BUILD new file mode 100644 index 00000000000..68d13240e98 --- /dev/null +++ b/modules/planning/math/spiral_curve/BUILD @@ -0,0 +1,69 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "spiral_curve", + srcs = [ + "spiral_curve.cc", + ], + hdrs = [ + "spiral_curve.h", + ], + deps = [ + "//modules/common/proto:pnc_point_proto", + "//modules/common/status", + "//modules/planning/proto:spiral_curve_config_proto", + ], +) + +cc_library( + name = "spiral_formula", + srcs = [ + "spiral_formula.cc", + ], + hdrs = [ + "spiral_formula.h", + ], + deps = [ + ], +) + +cc_library( + name = "cubic_sprial_curve", + srcs = [ + "cubic_spiral_curve.cc", + ], + hdrs = [ + "cubic_spiral_curve.h", + ], + deps = [ + ":spiral_curve", + ":spiral_formula", + "//modules/common:log", + "//modules/common/math", + "//modules/common/proto:error_code_proto", + "//modules/common/proto:pnc_point_proto", + "@eigen//:eigen", + ], +) + +cc_library( + name = "quintic_sprial_curve", + srcs = [ + "quintic_spiral_curve.cc", + ], + hdrs = [ + "quintic_spiral_curve.h", + ], + deps = [ + ":spiral_curve", + ":spiral_formula", + "//modules/common:log", + "//modules/common/math", + "//modules/common/proto:pnc_point_proto", + "@eigen//:eigen", + ], +) + +cpplint() diff --git a/modules/planning/math/spiral_curve/cubic_spiral_curve.cc b/modules/planning/math/spiral_curve/cubic_spiral_curve.cc new file mode 100644 index 00000000000..d6f261c57dc --- /dev/null +++ b/modules/planning/math/spiral_curve/cubic_spiral_curve.cc @@ -0,0 +1,304 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : cubic_spiral_curve.cc + **/ +#include "modules/planning/math/spiral_curve/cubic_spiral_curve.h" + +#include +#include "Eigen/Core" +#include "Eigen/LU" + +#include "modules/common/log.h" +#include "modules/common/math/integral.h" +#include "modules/planning/math/spiral_curve/spiral_formula.h" + +namespace apollo { +namespace planning { + +using apollo::common::ErrorCode; +using apollo::common::Status; + +CubicSpiralCurve::CubicSpiralCurve(const common::PathPoint& s, + const common::PathPoint& e) + : SpiralCurve(s, e, 3) { + // generate an order 3 cubic spiral path with four parameters +} + +bool CubicSpiralCurve::CalculatePath() { + // calculate path with initialize table + double x_s = start_point().x(); + double y_s = start_point().y(); + double theta_s = std::fmod(start_point().theta(), s_two_pi_); + + if (theta_s < 0) { + theta_s += s_two_pi_; + } + + double x_t = end_point().x() - x_s; + double y_t = end_point().y() - y_s; + + // with position and rotation transformation + double x_g = std::cos(theta_s) * x_t + std::sin(theta_s) * y_t; + double y_g = -std::sin(theta_s) * x_t + std::cos(theta_s) * y_t; + double theta_g = std::fmod(end_point().theta(), s_two_pi_); + theta_g -= theta_s; + + while (theta_g < -M_PI) { + theta_g += s_two_pi_; + } + + while (theta_g > +M_PI) { + theta_g -= s_two_pi_; + } + std::array p_shoot; + double sg = + (theta_g * theta_g / 5.0 + 1.0) * std::sqrt(x_g * x_g + y_g * y_g); + p_shoot[0] = start_point().kappa(); + p_shoot[1] = 0.0; + p_shoot[2] = 0.0; + p_shoot[3] = end_point().kappa(); + + // intermediate params + Eigen::Matrix q_g; + q_g << x_g, y_g, theta_g; // goal, x(p, sg), y(p, sg), theta(p, sg) + Eigen::Matrix jacobi; // Jacobian matrix for newton method + + // simpson integrations func values in Jacobian + // integration point initialization: + double ds = + sg / (spiral_config().simpson_size() - 1); // bandwith for integration + // basic theta value vectors: + std::vector theta(spiral_config().simpson_size(), 0.0); + std::vector cos_theta(spiral_config().simpson_size(), 0.0); + std::vector sin_theta(spiral_config().simpson_size(), 0.0); + // partial derivatvies vectors for Jacobian + std::vector ptp_p1(spiral_config().simpson_size(), 0.0); + std::vector ptp_p2(spiral_config().simpson_size(), 0.0); + std::vector ptp_sg(spiral_config().simpson_size(), 0.0); + std::vector sin_ptp_p1(spiral_config().simpson_size(), 0.0); + std::vector sin_ptp_p2(spiral_config().simpson_size(), 0.0); + std::vector sin_ptp_sg(spiral_config().simpson_size(), 0.0); + std::vector cos_ptp_p1(spiral_config().simpson_size(), 0.0); + std::vector cos_ptp_p2(spiral_config().simpson_size(), 0.0); + std::vector cos_ptp_sg(spiral_config().simpson_size(), 0.0); + + // newton iteration difference (col) vectors + Eigen::Matrix delta_q; // goal difference + Eigen::Matrix delta_p; // parameter difference + Eigen::Matrix + q_guess; // q with current paramter, delta_q = q_g - q_guess + double diff = 0.0; // absolute error for q iteration stop + + for (int32_t nt = 0; nt < spiral_config().newton_raphson_max_iter(); ++nt) { + // calculate parameters for simpson integration + double s = 0.0; + + for (int32_t i = 0; i < spiral_config().simpson_size(); ++i) { + theta[i] = SpiralFormula::theta_func_k3(s, sg, p_shoot); + + cos_theta[i] = std::cos(theta[i]); + sin_theta[i] = std::sin(theta[i]); + + ptp_p1[i] = SpiralFormula::partial_theta_p1_k3(s, sg); + ptp_p2[i] = SpiralFormula::partial_theta_p2_k3(s, sg); + ptp_sg[i] = SpiralFormula::partial_theta_sg_k3(s, sg, p_shoot); + + sin_ptp_p1[i] = sin_theta[i] * ptp_p1[i]; + sin_ptp_p2[i] = sin_theta[i] * ptp_p2[i]; + sin_ptp_sg[i] = sin_theta[i] * ptp_sg[i]; + + cos_ptp_p1[i] = cos_theta[i] * ptp_p1[i]; + cos_ptp_p2[i] = cos_theta[i] * ptp_p2[i]; + cos_ptp_sg[i] = cos_theta[i] * ptp_sg[i]; + s += ds; + } + + // update Jacobian and delta q + jacobi(0, 0) = -apollo::common::math::IntegrateBySimpson( + sin_ptp_p1, ds, spiral_config().simpson_size()); + jacobi(0, 1) = -apollo::common::math::IntegrateBySimpson( + sin_ptp_p2, ds, spiral_config().simpson_size()); + jacobi(0, 2) = cos_theta[spiral_config().simpson_size() - 1] - + apollo::common::math::IntegrateBySimpson( + sin_ptp_sg, ds, spiral_config().simpson_size()); + + jacobi(1, 0) = apollo::common::math::IntegrateBySimpson( + cos_ptp_p1, ds, spiral_config().simpson_size()); + jacobi(1, 1) = apollo::common::math::IntegrateBySimpson( + cos_ptp_p2, ds, spiral_config().simpson_size()); + jacobi(1, 2) = sin_theta[spiral_config().simpson_size() - 1] + + apollo::common::math::IntegrateBySimpson( + cos_ptp_sg, ds, spiral_config().simpson_size()); + + jacobi(2, 0) = ptp_p1[spiral_config().simpson_size() - 1]; + jacobi(2, 1) = ptp_p2[spiral_config().simpson_size() - 1]; + jacobi(2, 2) = ptp_sg[spiral_config().simpson_size() - 1]; + + q_guess(0) = apollo::common::math::IntegrateBySimpson( + cos_theta, ds, spiral_config().simpson_size()); + q_guess(1) = apollo::common::math::IntegrateBySimpson( + sin_theta, ds, spiral_config().simpson_size()); + q_guess(2) = theta[spiral_config().simpson_size() - 1]; + + delta_q = q_g - q_guess; + + diff = + std::fabs(delta_q(0)) + std::fabs(delta_q(1)) + std::fabs(delta_q(2)); + + if (diff < spiral_config().newton_raphson_tol()) { + break; + } + + // solve by lu decomposition + delta_p = jacobi.lu().solve(delta_q); + // update p, sg, ds + p_shoot[1] += delta_p(0); + p_shoot[2] += delta_p(1); + sg += delta_p(2); + ds = sg / (spiral_config().simpson_size() - 1); + } + + PrependToPParams(p_shoot.begin(), p_shoot.end()); + set_sg(sg); + set_error(diff); + + return diff < spiral_config().newton_raphson_tol() && ResultSanityCheck(); +} + +Status CubicSpiralCurve::GetPathVec( + const std::uint32_t n, std::vector* path_points) const { + CHECK_NOTNULL(path_points); + + // initialization + if (n < 2 || error() > spiral_config().newton_raphson_tol()) { + return Status(ErrorCode::PLANNING_ERROR, "CubicSpiralCurve::get_path_vec"); + } + + path_points->resize(n); + + std::vector& result = *path_points; + const double ds = sg() / (n - 1); + + std::array p_value; + std::copy_n(p_params().begin(), 4, p_value.begin()); + + result[0].set_x(start_point().x()); + result[0].set_y(start_point().y()); + result[0].set_theta(start_point().theta()); + result[0].set_kappa(start_point().kappa()); + result[0].set_dkappa(SpiralFormula::dkappa_func_k3(0, sg(), p_value)); + + // calculate path x, y using iterative trapezoidal method + // initialization + double s = ds; + // calculate heading kappa along the path + std::array a_params = SpiralFormula::p_to_a_k3(sg(), p_value); + + for (std::uint32_t i = 1; i < n; ++i) { + result[i].set_s(s); + result[i].set_theta(SpiralFormula::theta_func_k3_a(s, a_params) + + result[0].theta()); + result[i].set_kappa(SpiralFormula::kappa_func_k3_a(s, a_params)); + result[i].set_dkappa(SpiralFormula::dkappa_func_k3_a(s, a_params)); + s += ds; + } + + // integration x, y along the path + double dx = 0; + double dy = 0; + + for (std::uint32_t k = 1; k < n; ++k) { + dx = (dx / k) * (k - 1) + + (std::cos(std::fmod(result[k].theta(), s_two_pi_)) + + std::cos(std::fmod(result[k - 1].theta(), s_two_pi_))) / + (2 * k); + dy = (dy / k) * (k - 1) + + (std::sin(std::fmod(result[k].theta(), s_two_pi_)) + + std::sin(std::fmod(result[k - 1].theta(), s_two_pi_))) / + (2 * k); + result[k].set_x(result[k].s() * dx + result[0].x()); + result[k].set_y(result[k].s() * dy + result[0].y()); + } + + return Status::OK(); +} + +Status CubicSpiralCurve::GetPathVecWithS( + const std::vector& vec_s, + std::vector* path_points) const { + CHECK_NOTNULL(path_points); + + if (vec_s.empty() || error() > spiral_config().newton_raphson_tol()) { + return Status(ErrorCode::PLANNING_ERROR, + "CubicSpiralCurve::get_path_vec_with_s"); + } + + const std::uint32_t n = vec_s.size(); + std::vector& result = *path_points; + result.resize(n); + + std::array p_value; + std::copy_n(p_params().begin(), 4, p_value.begin()); + + common::PathPoint ref_point(start_point()); + + ref_point.set_s(0.0); + std::array a_params = SpiralFormula::p_to_a_k3(sg(), p_value); + + for (std::uint32_t i = 0; i < n; ++i) { + result[i].set_s(vec_s[i]); + result[i].set_theta( + planning::SpiralFormula::theta_func_k3_a(vec_s[i], a_params) + + ref_point.theta()); + result[i].set_kappa( + planning::SpiralFormula::kappa_func_k3_a(vec_s[i], a_params)); + result[i].set_dkappa( + planning::SpiralFormula::dkappa_func_k3_a(vec_s[i], a_params)); + } + + double dx = 0.0; + double dy = 0.0; + // start from here, add k = 0, revise the result[k] = ... + dx += (vec_s[0] - ref_point.s()) * + (std::cos(std::fmod(ref_point.theta(), s_two_pi_)) + + std::cos(std::fmod(result[0].theta(), s_two_pi_))) / + 2.0; + dy += (vec_s[0] - ref_point.s()) * + (std::sin(std::fmod(ref_point.theta(), s_two_pi_)) + + std::sin(std::fmod(result[0].theta(), s_two_pi_))) / + 2.0; + result[0].set_x(dx + ref_point.x()); + result[0].set_y(dy + ref_point.y()); + + for (std::uint32_t k = 1; k < n; ++k) { + dx += (vec_s[k] - vec_s[k - 1]) * + (std::cos(std::fmod(result[k - 1].theta(), s_two_pi_)) + + std::cos(std::fmod(result[k].theta(), s_two_pi_))) / + 2.0; + dy += (vec_s[k] - vec_s[k - 1]) * + (std::sin(std::fmod(result[k - 1].theta(), s_two_pi_)) + + std::sin(std::fmod(result[k].theta(), s_two_pi_))) / + 2.0; + result[k].set_x(dx + ref_point.x()); + result[k].set_y(dy + ref_point.y()); + } + + return Status::OK(); +} +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/spiral_curve/cubic_spiral_curve.h b/modules/planning/math/spiral_curve/cubic_spiral_curve.h new file mode 100644 index 00000000000..fec35b4725e --- /dev/null +++ b/modules/planning/math/spiral_curve/cubic_spiral_curve.h @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : cubic_spiral_curve.h + * @brief : path class includes the basic parameters for defining a path from + *initial + * point to end point + * @model description : + * x_p (s) = int_0^s cos( theta_p (s)) ds + * y_p (s) = int_0^s sin( theta_p (s)) ds + * theta_p (s) = a s + b s^2 / 2 + c s^3 / 3 + d s^4 / 4 + * kappa_p (s) = a + b s + c s^2 + d s^3 + * @solver: Solve boundary shooting problem with newton raphson method + * (default) initialized step for newton: 8, tol = 10^-2, max_iter = + *10 + **/ + +#ifndef MODULES_PLANNING_MATH_SPIRAL_CURVE_CUBIC_SPIRAL_CURVE_H_ +#define MODULES_PLANNING_MATH_SPIRAL_CURVE_CUBIC_SPIRAL_CURVE_H_ + +#include + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/math/spiral_curve/spiral_curve.h" + +namespace apollo { +namespace planning { + +class CubicSpiralCurve : public SpiralCurve { + public: + CubicSpiralCurve(const common::PathPoint& s, const common::PathPoint& e); + ~CubicSpiralCurve() = default; + bool CalculatePath(); + common::Status GetPathVec( + const std::uint32_t n, + std::vector* path_points) const override; + common::Status GetPathVecWithS( + const std::vector& vec_s, + std::vector* path_points) const override; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SPIRAL_CURVE_CUBIC_SPIRAL_CURVE_H_ diff --git a/modules/planning/math/spiral_curve/quintic_spiral_curve.cc b/modules/planning/math/spiral_curve/quintic_spiral_curve.cc new file mode 100644 index 00000000000..64ae5f6d110 --- /dev/null +++ b/modules/planning/math/spiral_curve/quintic_spiral_curve.cc @@ -0,0 +1,313 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file : quintic_spiral_curve.cc + **/ +#include "modules/planning/math/spiral_curve/quintic_spiral_curve.h" + +#include +#include "Eigen/Core" +#include "Eigen/LU" + +#include "modules/common/log.h" +#include "modules/common/math/integral.h" +#include "modules/planning/math/spiral_curve/spiral_formula.h" + +namespace apollo { +namespace planning { + +using apollo::common::ErrorCode; +using apollo::common::PathPoint; +using apollo::common::Status; + +QuinticSpiralCurve::QuinticSpiralCurve(const common::PathPoint& s, + const common::PathPoint& e) + : SpiralCurve(s, e, 5) { + // generate an order 5 spiral path with four parameters +} + +bool QuinticSpiralCurve::CalculatePath() { + // extract infos + double x_s = start_point().x(); + double y_s = start_point().y(); + double theta_s = std::fmod(start_point().theta(), s_two_pi_); + + if (theta_s < 0) { + theta_s += s_two_pi_; + } + + double x_t = end_point().x() - x_s; // with position + double y_t = end_point().y() - y_s; // with position + + double x_g = std::cos(theta_s) * x_t + std::sin(theta_s) * y_t; + double y_g = -std::sin(theta_s) * x_t + std::cos(theta_s) * y_t; + double theta_g = std::fmod(end_point().theta(), s_two_pi_); + theta_g -= theta_s; + + while (theta_g < -M_PI) { + theta_g += s_two_pi_; + } + + while (theta_g > +M_PI) { + theta_g -= s_two_pi_; + } + + double sg = (theta_g * theta_g / 5 + 1.0) * std::sqrt(x_g * x_g + y_g * y_g); + + std::array p_shoot; + p_shoot[0] = start_point().kappa(); + p_shoot[1] = start_point().dkappa(); + p_shoot[2] = start_point().ddkappa(); + p_shoot[3] = 0.0; + p_shoot[4] = 0.0; + p_shoot[5] = end_point().kappa(); + + // intermediate params + Eigen::Matrix q_g; + q_g << x_g, y_g, theta_g; // goal, x(p, sg), y(p, sg), theta(p, sg) + Eigen::Matrix jacobi; // Jacobian matrix for newton method + + // simpson integrations func values in Jacobian + // integration point initialization: + double ds = + sg / (spiral_config().simpson_size() - 1); // bandwith for integration + // basic theta value vectors: + std::vector theta(spiral_config().simpson_size(), 0.0); + std::vector cos_theta(spiral_config().simpson_size(), 0.0); + std::vector sin_theta(spiral_config().simpson_size(), 0.0); + // partial derivatvies vectors for Jacobian + std::vector ptp_p3(spiral_config().simpson_size(), 0.0); + std::vector ptp_p4(spiral_config().simpson_size(), 0.0); + std::vector ptp_sg(spiral_config().simpson_size(), 0.0); + std::vector sin_ptp_p3(spiral_config().simpson_size(), 0.0); + std::vector sin_ptp_p4(spiral_config().simpson_size(), 0.0); + std::vector sin_ptp_sg(spiral_config().simpson_size(), 0.0); + std::vector cos_ptp_p3(spiral_config().simpson_size(), 0.0); + std::vector cos_ptp_p4(spiral_config().simpson_size(), 0.0); + std::vector cos_ptp_sg(spiral_config().simpson_size(), 0.0); + // newton iteration difference (col) vectors + Eigen::Matrix delta_q; // goal difference + Eigen::Matrix delta_p; // parameter difference + Eigen::Matrix + q_guess; // q with current paramter, delta_q = q_g - q_guess + double diff = 0; // absolute error for q iteration stop + + for (int32_t nt = 0; nt < spiral_config().newton_raphson_max_iter(); ++nt) { + // calculate parameters for simpson integration + double s = 0; + + for (int32_t i = 0; i < spiral_config().simpson_size(); ++i) { + theta[i] = SpiralFormula::theta_func_k5(s, sg, p_shoot); + + cos_theta[i] = std::cos(theta[i]); + sin_theta[i] = std::sin(theta[i]); + + ptp_p3[i] = SpiralFormula::partial_theta_p3_k5(s, sg); + ptp_p4[i] = SpiralFormula::partial_theta_p4_k5(s, sg); + ptp_sg[i] = SpiralFormula::partial_theta_sg_k5(s, sg, p_shoot); + + sin_ptp_p3[i] = sin_theta[i] * ptp_p3[i]; + sin_ptp_p4[i] = sin_theta[i] * ptp_p4[i]; + sin_ptp_sg[i] = sin_theta[i] * ptp_sg[i]; + + cos_ptp_p3[i] = cos_theta[i] * ptp_p3[i]; + cos_ptp_p4[i] = cos_theta[i] * ptp_p4[i]; + cos_ptp_sg[i] = cos_theta[i] * ptp_sg[i]; + s += ds; + } + + // update Jacobian and delta q + jacobi(0, 0) = -apollo::common::math::IntegrateBySimpson( + sin_ptp_p3, ds, spiral_config().simpson_size()); + + jacobi(0, 1) = -apollo::common::math::IntegrateBySimpson( + sin_ptp_p4, ds, spiral_config().simpson_size()); + + jacobi(0, 2) = cos_theta[spiral_config().simpson_size() - 1] - + apollo::common::math::IntegrateBySimpson( + sin_ptp_sg, ds, spiral_config().simpson_size()); + + jacobi(1, 0) = apollo::common::math::IntegrateBySimpson( + cos_ptp_p3, ds, spiral_config().simpson_size()); + + jacobi(1, 1) = apollo::common::math::IntegrateBySimpson( + cos_ptp_p4, ds, spiral_config().simpson_size()); + + jacobi(1, 2) = sin_theta[spiral_config().simpson_size() - 1] + + apollo::common::math::IntegrateBySimpson( + cos_ptp_sg, ds, spiral_config().simpson_size()); + + jacobi(2, 0) = ptp_p3[spiral_config().simpson_size() - 1]; + + jacobi(2, 1) = ptp_p4[spiral_config().simpson_size() - 1]; + + jacobi(2, 2) = ptp_sg[spiral_config().simpson_size() - 1]; + + q_guess(0) = apollo::common::math::IntegrateBySimpson( + cos_theta, ds, spiral_config().simpson_size()); + + q_guess(1) = apollo::common::math::IntegrateBySimpson( + sin_theta, ds, spiral_config().simpson_size()); + + q_guess(2) = theta[spiral_config().simpson_size() - 1]; + + delta_q = q_g - q_guess; + + // early stop + diff = + std::fabs(delta_q(0)) + std::fabs(delta_q(1)) + std::fabs(delta_q(2)); + + if (diff < spiral_config().newton_raphson_tol()) { + break; + } + + delta_p = jacobi.lu().solve(delta_q); + // update p, sg, ds + p_shoot[3] += delta_p(0); + p_shoot[4] += delta_p(1); + sg += delta_p(2); + ds = sg / (spiral_config().simpson_size() - 1); + } + + // update params + PrependToPParams(p_shoot.begin(), p_shoot.end()); + set_sg(sg); + set_error(diff); + + return diff < spiral_config().newton_raphson_tol() && ResultSanityCheck(); +} + +Status QuinticSpiralCurve::GetPathVec( + const std::uint32_t n, std::vector* path_points) const { + CHECK_NOTNULL(path_points); + + if (n <= 1 || error() > spiral_config().newton_raphson_tol()) { + return Status(ErrorCode::PLANNING_ERROR, + "QuinticSpiralCurve::get_path_vec"); + } + + path_points->resize(n); + std::vector& result = *path_points; + + result[0].set_x(start_point().x()); + result[0].set_y(start_point().y()); + result[0].set_theta(start_point().theta()); + result[0].set_kappa(start_point().kappa()); + result[0].set_dkappa(start_point().dkappa()); + result[0].set_ddkappa(start_point().ddkappa()); + + const double ds = sg() / (n - 1); + double s = ds; + + // calculate theta kappa along the path + std::array p_value; + std::copy(p_params().begin(), p_params().end(), p_value.begin()); + std::array a_params = SpiralFormula::p_to_a_k5(sg(), p_value); + + for (std::uint32_t i = 1; i < n; ++i) { + result[i].set_s(s); + result[i].set_theta(SpiralFormula::theta_func_k5_a(s, a_params) + + result[0].theta()); + result[i].set_kappa(SpiralFormula::kappa_func_k5_a(s, a_params)); + result[i].set_dkappa(SpiralFormula::dkappa_func_k5_a(s, a_params)); + s += ds; + } + + // integration x, y along the path + double dx = 0.0; + double dy = 0.0; + + for (std::uint32_t k = 1; k < n; ++k) { + dx = (dx / k) * (k - 1) + + (std::cos(std::fmod(result[k].theta(), s_two_pi_)) + + std::cos(std::fmod(result[k - 1].theta(), s_two_pi_))) / + (2 * k); + dy = (dy / k) * (k - 1) + + (std::sin(std::fmod(result[k].theta(), s_two_pi_)) + + std::sin(std::fmod(result[k - 1].theta(), s_two_pi_))) / + (2 * k); + result[k].set_x(result[k].s() * dx + result[0].x()); + result[k].set_y(result[k].s() * dy + result[0].y()); + } + + return Status::OK(); +} + +Status QuinticSpiralCurve::GetPathVecWithS( + const std::vector& vec_s, + std::vector* path_points) const { + CHECK_NOTNULL(path_points); + + if (error() > spiral_config().newton_raphson_tol()) { + return Status(ErrorCode::PLANNING_ERROR, + "QuinticSpiralCurve::get_path_vec_with_s"); + } + + if (vec_s.size() == 0) { + return Status::OK(); + } + + const std::uint32_t n = vec_s.size(); + + common::PathPoint ref_point = start_point(); + + path_points->resize(n); + std::vector& result = *path_points; + std::array p_value; + std::copy(p_params().begin(), p_params().end(), p_value.begin()); + std::array a_params = SpiralFormula::p_to_a_k5(sg(), p_value); + + for (std::uint32_t i = 0; i < n; ++i) { + result[i].set_s(vec_s[i]); + result[i].set_theta(SpiralFormula::theta_func_k5_a(vec_s[i], a_params) + + ref_point.theta()); + result[i].set_kappa(SpiralFormula::kappa_func_k5_a(vec_s[i], a_params)); + result[i].set_dkappa(SpiralFormula::dkappa_func_k5_a(vec_s[i], a_params)); + } + + double dx = 0.0; + double dy = 0.0; + + // start from here, add k = 0, revise the result[k] = ... + dx += (vec_s[0] - ref_point.s()) * + (std::cos(std::fmod(ref_point.theta(), s_two_pi_)) + + std::cos(std::fmod(result[0].theta(), s_two_pi_))) / + 2.0; + dy += (vec_s[0] - ref_point.s()) * + (std::cos(std::fmod(ref_point.theta(), s_two_pi_)) + + std::cos(std::fmod(result[0].theta(), s_two_pi_))) / + 2.0; + result[0].set_x(dx + ref_point.x()); + result[0].set_y(dy + ref_point.y()); + for (std::uint32_t k = 1; k < n; ++k) { + dx += (vec_s[k] - vec_s[k - 1]) * + (std::cos(std::fmod(result[k - 1].theta(), s_two_pi_)) + + std::cos(std::fmod(result[k].theta(), s_two_pi_))) / + 2.0; + dy += (vec_s[k] - vec_s[k - 1]) * + (std::sin(std::fmod(result[k - 1].theta(), s_two_pi_)) + + std::sin(std::fmod(result[k].theta(), s_two_pi_))) / + 2.0; + result[k].set_x(dx + ref_point.x()); + result[k].set_y(dy + ref_point.y()); + } + + return Status::OK(); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/spiral_curve/quintic_spiral_curve.h b/modules/planning/math/spiral_curve/quintic_spiral_curve.h new file mode 100644 index 00000000000..d11adaff23a --- /dev/null +++ b/modules/planning/math/spiral_curve/quintic_spiral_curve.h @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: quintic_spiral_curve.h + * @brief: header file for path class + * @model description: + * x_p (s) = int_0^s cos( theta_p (s)) ds + * y_p (s) = int_0^s sin( theta_p (s)) ds + * + * quintic version: + * theta_p (s) = a s + b s^2 / 2 + c s^3 / 3 + d s^4 / 4 + e s^5 / 5 + + *f s^6 /6 + * quintic version: + * kappa_p (s) = a + b s + c s^2 + d s^3 + e s^4 + f s^5 + * + * @problem Description: + * Solve boundary shooting problem with newton raphson method + **/ + +#ifndef MODULES_PLANNING_MATH_SPIRAL_CURVE_QUINTIC_SPIRAL_CURVE_H_ +#define MODULES_PLANNING_MATH_SPIRAL_CURVE_QUINTIC_SPIRAL_CURVE_H_ + +#include + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/math/spiral_curve/spiral_curve.h" + +namespace apollo { +namespace planning { + +class QuinticSpiralCurve : public SpiralCurve { + public: + QuinticSpiralCurve(const common::PathPoint& s, const common::PathPoint& e); + ~QuinticSpiralCurve() = default; + bool CalculatePath(); + common::Status GetPathVec( + const std::uint32_t n, + std::vector* path_points) const override = 0; + common::Status GetPathVecWithS( + const std::vector& vec_s, + std::vector* path_points) const override = 0; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SPIRAL_CURVE_QUINTIC_SPIRAL_CURVE_H_ diff --git a/modules/planning/math/spiral_curve/spiral_curve.cc b/modules/planning/math/spiral_curve/spiral_curve.cc new file mode 100644 index 00000000000..763093fbf84 --- /dev/null +++ b/modules/planning/math/spiral_curve/spiral_curve.cc @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: spiral_curve.cc + **/ +#include "modules/planning/math/spiral_curve/spiral_curve.h" + +#include +#include + +namespace apollo { +namespace planning { + +using apollo::common::PathPoint; + +SpiralCurve::SpiralCurve(const common::PathPoint& s, const common::PathPoint& e, + const std::uint32_t order) + : start_point_(&s), + end_point_(&e), + p_params_(order + 1, 0.0), + sg_(0.0), + error_(std::numeric_limits::infinity()) {} + +void SpiralCurve::SetSpiralConfig(const SpiralCurveConfig& spiral_config) { + spiral_config_ = spiral_config; +} + +// output params +const common::PathPoint& SpiralCurve::start_point() const { + return *start_point_; +} + +const common::PathPoint& SpiralCurve::end_point() const { return *end_point_; } + +double SpiralCurve::sg() const { return sg_; } + +double SpiralCurve::error() const { return error_; } + +const std::vector& SpiralCurve::p_params() const { return p_params_; } +const SpiralCurveConfig& SpiralCurve::spiral_config() const { + return spiral_config_; +} + +void SpiralCurve::set_sg(const double sg) { sg_ = sg; } + +void SpiralCurve::set_error(const double error) { error_ = error; } + +bool SpiralCurve::ResultSanityCheck() const { + for (const auto& p : p_params_) { + if (std::isnan(p)) { + return false; + } + } + return (sg_ > 0); +} +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/spiral_curve/spiral_curve.h b/modules/planning/math/spiral_curve/spiral_curve.h new file mode 100644 index 00000000000..6bf076fc3c2 --- /dev/null +++ b/modules/planning/math/spiral_curve/spiral_curve.h @@ -0,0 +1,103 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: spiral_curve.h + * @brief: spiral path base class + **/ + +#ifndef MODULES_PLANNING_MATH_SPIRAL_CURVE_SPIRAL_CURVE_H_ +#define MODULES_PLANNING_MATH_SPIRAL_CURVE_SPIRAL_CURVE_H_ + +#include +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/common/status/status.h" +#include "modules/planning/proto/spiral_curve_config.pb.h" + +namespace apollo { +namespace planning { + +class SpiralCurve { + public: + SpiralCurve(const common::PathPoint& s, const common::PathPoint& e, + const std::uint32_t order); + virtual ~SpiralCurve() = default; + + /** + * @brief: set configuration if desired (default setting was defined in + *constructor) + **/ + void SetSpiralConfig(const SpiralCurveConfig& spiral_config); + /** + * @brief : default process of calculating path without lookup table + * @return: errors of final state: fitted value vs true end point + **/ + virtual bool CalculatePath() = 0; + + /** + * @brief: output methods + **/ + const std::vector& p_params() const; + const SpiralCurveConfig& spiral_config() const; + const common::PathPoint& start_point() const; + const common::PathPoint& end_point() const; + double sg() const; + double error() const; + + /** + * @brief : get path vector with sampling size n + * @return: sequence of sampling points + **/ + virtual common::Status GetPathVec( + const std::uint32_t n, + std::vector* path_points) const = 0; + /** + * @brief: calcualate quintic path point at s locations + * along the whole path. + * @return: vector of path points + **/ + virtual common::Status GetPathVecWithS( + const std::vector& vec_s, + std::vector* path_points) const = 0; + + private: + const common::PathPoint* start_point_; + const common::PathPoint* end_point_; + std::vector p_params_; + double sg_; + double error_; + SpiralCurveConfig spiral_config_; + + protected: + void set_sg(const double sg); + void set_error(const double error); + + bool ResultSanityCheck() const; + + template + void PrependToPParams(T begin, T end) { + std::copy(begin, end, p_params_.begin()); + } + static constexpr double s_two_pi_ = 2 * M_PI; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_MATH_SPIRAL_CURVE_SPIRAL_CURVE_H_ diff --git a/modules/planning/math/spiral_curve/spiral_formula.cc b/modules/planning/math/spiral_curve/spiral_formula.cc new file mode 100644 index 00000000000..31306b25114 --- /dev/null +++ b/modules/planning/math/spiral_curve/spiral_formula.cc @@ -0,0 +1,185 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/* + * @file: spiral_formula.cc + */ +#include "modules/planning/math/spiral_curve/spiral_formula.h" + +namespace apollo { +namespace planning { + +// coef transformation k3 indicates cubic spiral, k5 indecate quintic spiral +std::array SpiralFormula::p_to_a_k3(const double sg, + const std::array& p) { + std::array result = { + // p params to cubic Poly params + p[0], -(11.0 * p[0] - 18.0 * p[1] + 9.0 * p[2] - 2.0 * p[3]) / (2.0 * sg), + (18.0 * p[0] - 45.0 * p[1] + 36.0 * p[2] - 9.0 * p[3]) / (2.0 * sg * sg), + -(9 * p[0] - 27.0 * p[1] + 27.0 * p[2] - 9.0 * p[3]) / + (2.0 * sg * sg * sg)}; + return result; +} + +std::array SpiralFormula::p_to_a_k5(const double sg, + const std::array& p) { + double sg2 = sg * sg; + double sg3 = sg2 * sg; + + std::array result = { + // p params to quintic params + p[0], p[1], p[2] / 2.0, -(575 * p[0] - 648 * p[3] + 81 * p[4] - 8 * p[5] + + 170 * p[1] * sg + 22 * p[2] * sg2) / + (8 * sg3), + (333 * p[0] - 405 * p[3] + 81 * p[4] - 9 * p[5] + 90 * p[1] * sg + + 9 * p[2] * sg2) / + (2 * sg2 * sg2), + (-765 * p[0] + 972 * p[3] - 243 * p[4] + 36 * p[5] - 198 * p[1] * sg - + 18 * p[2] * sg2) / + (8 * sg2 * sg3)}; + return result; +} + +// kappa, theta, dkappa funcs without transformation +double SpiralFormula::kappa_func_k3_a(const double s, + const std::array& a) { + return ((a[3] * s + a[2]) * s + a[1]) * s + a[0]; +} + +double SpiralFormula::theta_func_k3_a(const double s, + const std::array& a) { + return (((a[3] * s / 4 + a[2] / 3) * s + a[1] / 2) * s + a[0]) * s; +} + +double SpiralFormula::dkappa_func_k3_a(const double s, + const std::array& a) { + return (3 * a[3] * s + 2 * a[2]) * s + a[1]; +} + +double SpiralFormula::kappa_func_k5_a(const double s, + const std::array& a) { + return ((((a[5] * s + a[4]) * s + a[3]) * s + a[2]) * s + a[1]) * s + a[0]; +} + +double SpiralFormula::theta_func_k5_a(const double s, + const std::array& a) { + return (((((a[5] * s / 6 + a[4] / 5) * s + a[3] / 4) * s + a[2] / 3) * s + + a[1] / 2) * + s + + a[0]) * + s; +} + +double SpiralFormula::dkappa_func_k5_a(const double s, + const std::array& a) { + return (((5 * a[5] * s + 4 * a[4]) * s + 3 * a[3]) * s + 2 * a[2]) * s + a[1]; +} + +// kappa, theta, dkappa funcs with p to a transformation +double SpiralFormula::kappa_func_k3(const double s, const double sg, + const std::array& p) { + std::array a = p_to_a_k3(sg, p); + return ((a[3] * s + a[2]) * s + a[1]) * s + a[0]; +} + +double SpiralFormula::theta_func_k3(const double s, const double sg, + const std::array& p) { + std::array a = p_to_a_k3(sg, p); + return (((a[3] * s / 4 + a[2] / 3) * s + a[1] / 2) * s + a[0]) * s; +} + +double SpiralFormula::dkappa_func_k3(const double s, const double sg, + const std::array& p) { + std::array a = p_to_a_k3(sg, p); + return (3 * a[3] * s + 2 * a[2]) * s + a[1]; +} + +double SpiralFormula::kappa_func_k5(const double s, const double sg, + const std::array& p) { + std::array a = p_to_a_k5(sg, p); + return ((((a[5] * s + a[4]) * s + a[3]) * s + a[2]) * s + a[1]) * s + a[0]; +} + +double SpiralFormula::theta_func_k5(const double s, const double sg, + const std::array& p) { + std::array a = p_to_a_k5(sg, p); + return (((((a[5] * s / 6 + a[4] / 5) * s + a[3] / 4) * s + a[2] / 3) * s + + a[1] / 2) * + s + + a[0]) * + s; +} + +double SpiralFormula::dkappa_func_k5(const double s, const double sg, + const std::array& p) { + std::array a = p_to_a_k5(sg, p); + return (((5 * a[5] * s + 4 * a[4]) * s + 3 * a[3]) * s + 2 * a[2]) * s + a[1]; +} + +double SpiralFormula::partial_theta_p1_k3(const double s, const double sg) { + double sog = s / sg; + return ((sog * 3.375 - 7.5) * sog + 4.5) * sog * s; +} + +double SpiralFormula::partial_theta_p2_k3(const double s, const double sg) { + double sog = s / sg; + return ((6.0 - 3.375 * sog) * sog - 2.25) * sog * s; +} + +double SpiralFormula::partial_theta_sg_k3(const double s, const double sg, + const std::array& p) { + double sog = s / sg; + + return ((3.375 * (p[0] - 3.0 * p[1] + 3.0 * p[2] - p[3]) * sog - + 3.0 * (2.0 * p[0] - 5.0 * p[1] + 4.0 * p[2] - p[3])) * + sog + + 0.25 * (11.0 * p[0] - 18.0 * p[1] + 9.0 * p[2] - 2.0 * p[3])) * + sog * sog; +} + +double SpiralFormula::partial_theta_p3_k5(const double s, const double sg) { + double sog = s / sg; + // double ssog3 = s * sog * sog * sog; + // double ssog4 = ssog3 * sog; + return ((20.25 * sog - 40.5) * sog + 20.25) * sog * sog * sog * s; + // return 20.25 * ssog3 - 40.5 * ssog4 + 20.25 * ssog4 * sog; +} + +double SpiralFormula::partial_theta_p4_k5(const double s, const double sg) { + double sog = s / sg; + return ((-5.0625 * sog + 8.1) * sog - 2.53125) * sog * sog * sog * s; +} + +double SpiralFormula::partial_theta_sg_k5(const double s, const double sg, + const std::array& p) { + double s2 = s * s; + double sog = s / sg; + double sog2 = sog * sog; + double sog3 = sog2 * sog; + double sog4 = sog2 * sog2; + double sog5 = sog4 * sog; + return (53.90625 * p[0] - 60.75 * p[3] + 7.59375 * p[4] - 0.75 * p[5]) * + sog4 + + 10.625 * p[1] * s * sog3 + 0.6875 * p[2] * s2 * sog2 + + (-133.2 * p[0] + 162 * p[3] - 32.4 * p[4] + 3.6 * p[5]) * sog5 + + (-27) * p[1] * s * sog4 - 1.8 * p[2] * s2 * sog3 + + (79.6875 * p[0] - 101.25 * p[3] + 25.3125 * p[4] - 3.75 * p[5]) * + sog5 * sog + + 16.5 * p[1] * s * sog5 + 1.125 * p[2] * s2 * sog4; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/math/spiral_curve/spiral_formula.h b/modules/planning/math/spiral_curve/spiral_formula.h new file mode 100644 index 00000000000..2d799f27a16 --- /dev/null +++ b/modules/planning/math/spiral_curve/spiral_formula.h @@ -0,0 +1,244 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/* + * @file: spiral_formula + * @brief: class for polynomial spiral functions, partial derivative (analytic + * form) + * with respect to parameters. + * every function is optimized with minimum operations plus excat + * analytic form + * @warning: all partial derivatives shall guarantee sg > 0 + */ + +#ifndef MODULES_PLANNING_MATH_SPIRAL_CURVE_SPIRAL_FORMULA_H_ +#define MODULES_PLANNING_MATH_SPIRAL_CURVE_SPIRAL_FORMULA_H_ + +#include + +namespace apollo { +namespace planning { + +class SpiralFormula { + public: + /* -----------------------------transformation + * --------------------------------- */ + /** + * @brief: convert p parameters to a parameters for cubic spiral + * @params: [in] sg - the final length of spiral path from start to end point + * [in] p - vector of params: p0, p1, p2, p3 + * p0 = kappa at s = 0 + * p1 = kappa at s = sg / 3 + * p2 = kappa at s = 2 * sg / 3 + * p3 = kappa at s = sg + * @return: [out] a - parameter vec of cubic kappa spiral + **/ + static std::array p_to_a_k3(const double sg, + const std::array& p); + + /** + * @brief: convert p parameters to a parameters for quintic spiral + * @params: [in] sg - the final length of spiral path from start to end point + * [in] p - vector of params: p0, p1, p2, p3, p4, p5 + * + * p0 = kappa at s = 0 + * p1 = dkappa at s = 0 + * p2 = ddkappa at s = 0 + * p3 = kappa at s = sg / 3 + * p4 = kappa at s = 2 * sg / 3 + * + * @return: [out] a - parameter vec of quintic kappa spiral + **/ + static std::array p_to_a_k5(const double sg, + const std::array& p); + + /* ------------------------ kappa, theta, dkappa functions + * --------------------- */ + + // set 1: kappa, theta, dkappa with a vector (normal vector) as parameter + // input + /** + * @brief : cubic kappa function with regular parameter + * @params: [in] s - distance from start to current point on the path + * [in] a - cubic polynomial params for cubic kappa spiral + * @return: kappa value with respect to s, kappa(s) given params vec = a + **/ + static double kappa_func_k3_a(const double s, const std::array& a); + + /** + * @brief : cubic theta function with regular parameter + * theta value is the integration of kappa value + * @params: [in] s - distance from start to current point on the path + * [in] a - cubic polynomial params for cubic kappa spiral + * @return: theta value with respect to s, theta(s) given params vec = a + **/ + static double theta_func_k3_a(const double s, const std::array& a); + + /** + * @brief : derivative of cubic kappa function (dkappa) with regular parameter + * @params: [in] s - distance from start to current point on the path + * [in] a - cubic polynomial params for cubic kappa spiral + * @return: dkappa value with respect to s, dkappa(s) given params vec = a + **/ + static double dkappa_func_k3_a(const double s, + const std::array& a); + + /** + * @brief : quintic kappa function with regular parameter + * @params: [in] s - distance from start to current point on the path + * [in] a - quintic polynomial params for quintic kappa spiral + * @return: kappa value with respect to s, kappa(s) given params vec = a + **/ + static double kappa_func_k5_a(const double s, const std::array& a); + + /** + * @brief : quintic theta function with regular parameter + * theta value is the integration of kappa value + * @params: [in] s - distance from start to current point on the path + * [in] a - quintic polynomial params for quintic kappa spiral + * @return: theta value with respect to s, theta(s) given params vec = a + **/ + static double theta_func_k5_a(const double s, const std::array& a); + + /** + * @brief : derivative of quintic kappa function (dkappa) with regular + *parameter + * @params: [in] s - distance from start to current point on the path + * [in] a - quintic polynomial params for quintic kappa spiral + * @return: dkappa value with respect to s, dkappa(s) given params vec = a + **/ + static double dkappa_func_k5_a(const double s, + const std::array& a); + + // set 2 - kappa, theta dkappa funcs with p parameter + + /** + * @brief : cubic theta function with p parameter + * theta value is the integration of kappa value + * @params: [in] s - distance from start to current point on the path + * [in] p - p params for cubic kappa spiral + * @return: theta value with respect to s, theta(s) given params vec = a + **/ + static double kappa_func_k3(const double s, const double sg, + const std::array& p); + + /** + * @brief : cubic theta function with p parameter + * theta value is the integration of kappa value + * @params: [in] s - distance from start to current point on the path + * [in] p - p params for cubic kappa spiral + * @return: theta value with respect to s, theta(s) given p + **/ + static double theta_func_k3(const double s, const double sg, + const std::array& p); + + /** + * @brief : derivative of cubic kappa function (dkappa) with p parameter + * @params: [in] s - distance from start to current point on the path + * [in] p - p params for cubic kappa spiral + * @return: dkappa value with respect to s, dkappa(s) given p + **/ + static double dkappa_func_k3(const double s, const double sg, + const std::array& p); + + /** + * @brief : quintic kappa function with p parameter + * @params: [in] s - distance from start to current point on the path + * [in] p - quintic polynomial params for quintic kappa spiral + * @return: kappa value with respect to s, kappa(s) given p + **/ + static double kappa_func_k5(const double s, const double sg, + const std::array& p); + + /** + * @brief : quintic theta function with p parameter + * theta value is the integration of kappa value + * @params: [in] s - distance from start to current point on the path + * [in] p - quintic polynomial params for quintic kappa spiral + * @return: theta value with respect to s, theta(s) given p + **/ + static double theta_func_k5(const double s, const double sg, + const std::array& p); + + /** + * @brief : derivative of quintic kappa function (dkappa) with regular + *parameter + * @params: [in] s - distance from start to current point on the path + * [in] p - quintic polynomial params for quintic kappa spiral + * @return: dkappa value with respect to s, dkappa(s) given p params + **/ + static double dkappa_func_k5(const double s, const double sg, + const std::array& p); + + /*** ------------------------- Partial Derivatives + * -------------------------------------*/ + // Partial deriavatives of theta with respect to p1, p2, sg (p3, p4 sg for + // quintic version) + + /** + * @brief: calculate partial derivative given sg (final curve length) at s + *location; + * @params: [in] s - s location with respect to path's own SL coordinate + * [in] sg - final length of path + * [in] p - p params + * @return partial theta / partial p1, p2 or p3 + **/ + + // ----------------------------------- Cubic Version + // ---------------------------------- + + /** + * @brief: partial derivative theta with respect to p1 + **/ + static double partial_theta_p1_k3(const double s, const double sg); + + /** + * @brief: partial derivative theta with respect to p2 + **/ + static double partial_theta_p2_k3(const double s, const double sg); + + /** + * @brief: partial derivative theta with respect to sg + **/ + static double partial_theta_sg_k3(const double s, const double sg, + const std::array& p); + + // ---------------------------------- Quintic Version + // --------------------------------- + + /** + * @brief: partial derivative theta with respect to p3 + **/ + static double partial_theta_p3_k5(const double s, const double sg); + + /** + * @brief: partial derivative theta with respect to p4 + **/ + static double partial_theta_p4_k5(const double s, const double sg); + + /** + * @brief: partial derivative theta with respect to sg + **/ + static double partial_theta_sg_k5(const double s, const double sg, + const std::array& p); + + private: + SpiralFormula() = default; +}; + +} // namespace planning +} // namespace apollo +#endif // MODULES_PLANNING_MATH_SPIRAL_CURVE_SPIRAL_FORMULA_H_ diff --git a/modules/planning/planner/BUILD b/modules/planning/planner/BUILD index c954a8684a4..e2cfad99d17 100644 --- a/modules/planning/planner/BUILD +++ b/modules/planning/planner/BUILD @@ -3,38 +3,17 @@ load("//tools:cpplint.bzl", "cpplint") package(default_visibility = ["//visibility:public"]) cc_library( - name = "lib_planner", - srcs = [ - "rtk_replay_planner.cc", + name = "planner", + hdrs = [ + "planner.h", ], - hdrs = glob([ - "*.h", - ]), deps = [ - "//external:gflags", - "//modules/common:log", - "//modules/common/proto:path_point_proto", - "//modules/common/util", + "//modules/common/proto:pnc_point_proto", + "//modules/common/status", "//modules/common/vehicle_state", - "//modules/planning/common:lib_planning_common", - "@eigen//:eigen", - ], -) - -cc_test( - name = "rtk_replay_planner_test", - size = "small", - srcs = [ - "rtk_replay_planner_test.cc", - ], - data = ["//modules/planning:planning_testdata"], - deps = [ - ":lib_planner", - "//modules/common:log", - "//modules/common/time", - "//modules/common/util", - "//modules/planning/common:lib_planning_common", - "@gtest//:main", + "//modules/planning/common:frame", + "//modules/planning/common:reference_line_info", + "//modules/planning/proto:planning_proto", ], ) diff --git a/modules/planning/planner/em/BUILD b/modules/planning/planner/em/BUILD new file mode 100644 index 00000000000..fc4ad0ece1a --- /dev/null +++ b/modules/planning/planner/em/BUILD @@ -0,0 +1,65 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "decider", + srcs = [ + "decider.cc", + ], + hdrs = [ + "decider.h", + ], + deps = [ + "//external:gflags", + "//modules/common:log", + "//modules/common/configs:vehicle_config_helper", + "//modules/common/status", + "//modules/common/vehicle_state", + "//modules/planning/common:planning_common", + "//modules/planning/proto:planning_proto", + "//modules/planning/reference_line", + "@eigen//:eigen", + ], +) + +cc_library( + name = "em_planner", + srcs = [ + "em_planner.cc", + ], + hdrs = [ + "em_planner.h", + ], + deps = [ + ":decider", + "//external:gflags", + "//modules/common:log", + "//modules/common/proto:pnc_point_proto", + "//modules/common/status", + "//modules/common/time", + "//modules/common/util", + "//modules/common/util:factory", + "//modules/common/vehicle_state", + "//modules/map/hdmap", + "//modules/planning/common:planning_common", + "//modules/planning/constraint_checker", + "//modules/planning/math/curve1d:quartic_polynomial_curve1d", + "//modules/planning/planner", + "//modules/planning/proto:planning_proto", + "//modules/planning/reference_line", + "//modules/planning/reference_line:reference_line_smoother", + "//modules/planning/tasks:path_optimizer", + "//modules/planning/tasks:speed_optimizer", + "//modules/planning/tasks:task", + "//modules/planning/tasks/dp_poly_path:dp_poly_path_optimizer", + "//modules/planning/tasks/dp_st_speed:dp_st_speed_optimizer", + "//modules/planning/tasks/path_decider", + "//modules/planning/tasks/qp_spline_path", + "//modules/planning/tasks/qp_spline_st_speed:qp_spline_st_speed_optimizer", + "//modules/planning/tasks/traffic_decider", + "@eigen//:eigen", + ], +) + +cpplint() diff --git a/modules/planning/planner/em/decider.cc b/modules/planning/planner/em/decider.cc new file mode 100644 index 00000000000..35fc3b081aa --- /dev/null +++ b/modules/planning/planner/em/decider.cc @@ -0,0 +1,169 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include + +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/log.h" +#include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/planning/planner/em/decider.h" + +namespace apollo { +namespace planning { + +DecisionResult Decider::MakeDecision( + const ReferenceLineInfo& reference_line_info) { + Decider decider; + return decider.InternalMakeDecision(reference_line_info); +} + +DecisionResult& Decider::InternalMakeDecision( + const ReferenceLineInfo& reference_line_info) { + const auto& path_decision = reference_line_info.path_decision(); + + // cruise by default + decision_result_.mutable_main_decision()->mutable_cruise(); + + // check stop decision + int error_code = MakeMainStopDecision(reference_line_info); + if (error_code < 0) { + MakeEStopDecision(path_decision); + return decision_result_; + } + // TODO(all): check other main decisions + + SetObjectDecisions(path_decision); + return decision_result_; +} + +int Decider::MakeMainStopDecision( + const ReferenceLineInfo& reference_line_info) { + double min_stop_line_s = std::numeric_limits::infinity(); + const Obstacle* stop_obstacle = nullptr; + const ObjectStop* stop_decision = nullptr; + + for (const auto path_obstacle : + reference_line_info.path_decision().path_obstacles().Items()) { + const auto& obstacle = path_obstacle->obstacle(); + const auto& object_decision = path_obstacle->LongitudinalDecision(); + if (!object_decision.has_stop()) { + continue; + } + + const auto& reference_line = reference_line_info.reference_line(); + apollo::common::PointENU stop_point = object_decision.stop().stop_point(); + common::SLPoint stop_line_sl; + reference_line.XYToSL({stop_point.x(), stop_point.y()}, &stop_line_sl); + + double stop_line_s = stop_line_sl.s(); + if (stop_line_s < 0 || stop_line_s > reference_line.Length()) { + AERROR << "Ignore object:" << obstacle->Id() << " fence route_s[" + << stop_line_s << "] not in range[0, " << reference_line.Length() + << "]"; + continue; + } + + // check stop_line_s vs adc_s + common::SLPoint adc_sl; + auto& adc_position = common::VehicleState::instance()->pose().position(); + reference_line.XYToSL({adc_position.x(), adc_position.y()}, &adc_sl); + const auto& vehicle_param = + common::VehicleConfigHelper::instance()->GetConfig().vehicle_param(); + if (stop_line_s <= adc_sl.s() + vehicle_param.front_edge_to_center()) { + AERROR << "object:" << obstacle->Id() << " stop fence route_s[" + << stop_line_s << "] behind adc route_s[" << adc_sl.s() << "]"; + continue; + } + + if (stop_line_s < min_stop_line_s) { + min_stop_line_s = stop_line_s; + stop_obstacle = obstacle; + stop_decision = &(object_decision.stop()); + } + } + + if (stop_obstacle != nullptr) { + MainStop* main_stop = + decision_result_.mutable_main_decision()->mutable_stop(); + main_stop->set_reason_code(stop_decision->reason_code()); + main_stop->set_reason("stop by " + stop_obstacle->Id()); + main_stop->mutable_stop_point()->set_x(stop_decision->stop_point().x()); + main_stop->mutable_stop_point()->set_y(stop_decision->stop_point().y()); + main_stop->set_stop_heading(stop_decision->stop_heading()); + + ADEBUG << " main stop obstacle id:" << stop_obstacle->Id() + << " stop_line_s:" << min_stop_line_s << " stop_point: (" + << stop_decision->stop_point().x() << stop_decision->stop_point().y() + << " ) stop_heading: " << stop_decision->stop_heading(); + + return 1; + } + + return 0; +} + +void Decider::SetObjectDecisions(const PathDecision& path_decision) { + ObjectDecisions* object_decisions = + decision_result_.mutable_object_decision(); + + for (const auto path_obstacle : path_decision.path_obstacles().Items()) { + auto* object_decision = object_decisions->add_decision(); + + const auto& obstacle = path_obstacle->obstacle(); + object_decision->set_id(obstacle->Id()); + object_decision->set_perception_id(obstacle->PerceptionId()); + if (path_obstacle->IsIgnore()) { + object_decision->add_object_decision()->mutable_ignore(); + continue; + } + if (path_obstacle->HasLateralDecision()) { + object_decision->add_object_decision()->CopyFrom( + path_obstacle->LateralDecision()); + } + if (path_obstacle->HasLongitudinalDecision()) { + object_decision->add_object_decision()->CopyFrom( + path_obstacle->LongitudinalDecision()); + } + } +} + +void Decider::MakeEStopDecision(const PathDecision& path_decision) { + decision_result_.Clear(); + + MainEmergencyStop* main_estop = + decision_result_.mutable_main_decision()->mutable_estop(); + main_estop->set_reason_code(MainEmergencyStop::ESTOP_REASON_INTERNAL_ERR); + main_estop->set_reason("estop reason to be added"); + main_estop->mutable_cruise_to_stop(); + + // set object decisions + ObjectDecisions* object_decisions = + decision_result_.mutable_object_decision(); + for (const auto path_obstacle : path_decision.path_obstacles().Items()) { + auto* object_decision = object_decisions->add_decision(); + const auto& obstacle = path_obstacle->obstacle(); + object_decision->set_id(obstacle->Id()); + object_decision->set_perception_id(obstacle->PerceptionId()); + object_decision->add_object_decision()->mutable_avoid(); + } +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/planning_node.h b/modules/planning/planner/em/decider.h similarity index 52% rename from modules/planning/planning_node.h rename to modules/planning/planner/em/decider.h index e1b2f0c9aca..acafdeb34d5 100644 --- a/modules/planning/planning_node.h +++ b/modules/planning/planner/em/decider.h @@ -14,15 +14,15 @@ * limitations under the License. *****************************************************************************/ -#ifndef MODULES_PLANNING_PLANNING_NODE_H_ -#define MODULES_PLANNING_PLANNING_NODE_H_ +#ifndef MODULES_PLANNING_PLANNER_EM_DECIDER_H_ +#define MODULES_PLANNING_PLANNER_EM_DECIDER_H_ +#include +#include #include -#include "modules/common/proto/path_point.pb.h" -#include "modules/common/vehicle_state/vehicle_state.h" -#include "modules/planning/planning.h" -#include "modules/planning/proto/planning.pb.h" +#include "modules/planning/common/reference_line_info.h" +#include "modules/planning/proto/decision.pb.h" /** * @namespace apollo::planning @@ -31,44 +31,23 @@ namespace apollo { namespace planning { -/** - * @class PlanningNode - * @brief PlanningNode is a class that - * implements a ros node for planning module. - */ -class PlanningNode { +class Decider { public: - /** - * @brief Constructor - */ - PlanningNode(); - - /** - * @brief Destructor - */ - virtual ~PlanningNode(); - - /** - * @brief Start the planning node. - */ - void Run(); - - /** - * @brief Reset the planning node. - */ - void Reset(); + static DecisionResult MakeDecision( + const ReferenceLineInfo &reference_line_info); private: - void RunOnce(); - - ADCTrajectory ToTrajectoryPb( - const double header_time, - const std::vector &discretized_trajectory); + DecisionResult &InternalMakeDecision( + const ReferenceLineInfo &reference_line_info); + int MakeMainStopDecision(const ReferenceLineInfo &reference_line_info); + void MakeEStopDecision(const PathDecision &path_decision); + void SetObjectDecisions(const PathDecision &path_decision); - Planning planning_; + private: + DecisionResult decision_result_; }; } // namespace planning } // namespace apollo -#endif /* MODULES_PLANNING_PLANNING_NODE_H_ */ +#endif // MODULES_PLANNING_PLANNER_EM_DECIDER_H_ diff --git a/modules/planning/planner/em/em_planner.cc b/modules/planning/planner/em/em_planner.cc new file mode 100644 index 00000000000..be0743cf5aa --- /dev/null +++ b/modules/planning/planner/em/em_planner.cc @@ -0,0 +1,253 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/planning/planner/em/em_planner.h" + +#include +#include + +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/log.h" +#include "modules/common/math/math_utils.h" +#include "modules/common/time/time.h" +#include "modules/common/util/string_tokenizer.h" +#include "modules/common/util/string_util.h" +#include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/map/hdmap/hdmap.h" +#include "modules/map/hdmap/hdmap_common.h" +#include "modules/planning/common/frame.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/constraint_checker/constraint_checker.h" +#include "modules/planning/math/curve1d/quartic_polynomial_curve1d.h" +#include "modules/planning/planner/em/decider.h" +#include "modules/planning/tasks/dp_poly_path/dp_poly_path_optimizer.h" +#include "modules/planning/tasks/dp_st_speed/dp_st_speed_optimizer.h" +#include "modules/planning/tasks/path_decider/path_decider.h" +#include "modules/planning/tasks/qp_spline_path/qp_spline_path_optimizer.h" +#include "modules/planning/tasks/qp_spline_st_speed/qp_spline_st_speed_optimizer.h" +#include "modules/planning/tasks/traffic_decider/traffic_decider.h" + +namespace apollo { +namespace planning { + +using common::Status; +using common::adapter::AdapterManager; +using common::time::Clock; +using common::ErrorCode; +using common::SpeedPoint; +using common::SLPoint; +using common::TrajectoryPoint; +using common::math::Vec2d; + +void EMPlanner::RegisterTasks() { + task_factory_.Register(TRAFFIC_DECIDER, + []() -> Task* { return new TrafficDecider(); }); + task_factory_.Register(DP_POLY_PATH_OPTIMIZER, + []() -> Task* { return new DpPolyPathOptimizer(); }); + task_factory_.Register(PATH_DECIDER, + []() -> Task* { return new PathDecider(); }); + task_factory_.Register(DP_ST_SPEED_OPTIMIZER, + []() -> Task* { return new DpStSpeedOptimizer(); }); + task_factory_.Register(QP_SPLINE_PATH_OPTIMIZER, + []() -> Task* { return new QpSplinePathOptimizer(); }); + task_factory_.Register(QP_SPLINE_ST_SPEED_OPTIMIZER, []() -> Task* { + return new QpSplineStSpeedOptimizer(); + }); +} + +Status EMPlanner::Init(const PlanningConfig& config) { + AINFO << "In EMPlanner::Init()"; + RegisterTasks(); + for (const auto task : config.em_planner_config().task()) { + tasks_.emplace_back( + task_factory_.CreateObject(static_cast(task))); + AINFO << "Created task:" << tasks_.back()->Name(); + } + for (auto& task : tasks_) { + if (!task->Init(config)) { + std::string msg( + common::util::StrCat("Init task[", task->Name(), "] failed.")); + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + } + return Status::OK(); +} + +void EMPlanner::RecordDebugInfo(const std::string& name, + const double time_diff_ms, + planning::LatencyStats* ptr_latency_stats) { + if (!FLAGS_enable_record_debug) { + ADEBUG << "Skip record debug info"; + return; + } + auto ptr_stats = ptr_latency_stats->add_task_stats(); + ptr_stats->set_name(name); + ptr_stats->set_time_ms(time_diff_ms); +} + +void EMPlanner::PopulateDecision(const ReferenceLineInfo& reference_line_info, + Frame* frame) { + auto* planning_pb = frame->MutableADCTrajectory(); + *planning_pb->mutable_decision() = Decider::MakeDecision(reference_line_info); +} + +Status EMPlanner::Plan(const TrajectoryPoint& planning_start_point, + Frame* frame, ReferenceLineInfo* reference_line_info) { + if (!frame) { + AERROR << "Frame is empty in EMPlanner"; + return Status(ErrorCode::PLANNING_ERROR, "Frame is null"); + } + + ADEBUG << "planning start point:" << planning_start_point.DebugString(); + auto* heuristic_speed_data = reference_line_info->mutable_speed_data(); + auto speed_profile = + GenerateInitSpeedProfile(planning_start_point, reference_line_info); + if (speed_profile.empty()) { + speed_profile = GenerateSpeedHotStart(planning_start_point); + ADEBUG << "Using dummy hot start for speed vector"; + } + heuristic_speed_data->set_speed_vector(speed_profile); + + auto ptr_debug = reference_line_info->mutable_debug(); + auto ptr_latency_stats = reference_line_info->mutable_latency_stats(); + auto ret = Status::OK(); + for (auto& optimizer : tasks_) { + const double start_timestamp = Clock::NowInSecond(); + ret = optimizer->Execute(frame, reference_line_info); + if (!ret.ok()) { + AERROR << "Failed to run tasks[" << optimizer->Name() + << "], Error message: " << ret.error_message(); + break; + } + const double end_timestamp = Clock::NowInSecond(); + const double time_diff_ms = (end_timestamp - start_timestamp) * 1000; + + ADEBUG << "after optimizer " << optimizer->Name() << ":" + << reference_line_info->PathSpeedDebugString() << std::endl; + ADEBUG << optimizer->Name() << " time spend: " << time_diff_ms << " ms."; + + if (FLAGS_enable_record_debug && ptr_debug != nullptr && + ptr_latency_stats != nullptr) { + RecordDebugInfo(optimizer->Name(), time_diff_ms, ptr_latency_stats); + } + } + DiscretizedTrajectory trajectory; + if (!reference_line_info->CombinePathAndSpeedProfile( + FLAGS_output_trajectory_time_resolution, + planning_start_point.relative_time(), &trajectory)) { + std::string msg("Fail to aggregate planning trajectory."); + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + if (FLAGS_enable_trajectory_check) { + ConstraintChecker::ValidTrajectory(trajectory); + } + + reference_line_info->SetTrajectory(trajectory); + PopulateDecision(*reference_line_info, frame); + + return ret; +} + +std::vector EMPlanner::GenerateInitSpeedProfile( + const TrajectoryPoint& planning_init_point, + const ReferenceLineInfo* reference_line_info) { + std::vector speed_profile; + const auto* last_frame = FrameHistory::instance()->Latest(); + if (!last_frame) { + AWARN << "last frame is empty"; + return speed_profile; + } + const ReferenceLineInfo* last_reference_line_info = + last_frame->DriveReferenceLinfInfo(); + if (!last_reference_line_info) { + ADEBUG << "last reference line info is empty"; + return speed_profile; + } + if (!reference_line_info->IsStartFrom(*last_reference_line_info)) { + ADEBUG << "Current reference line is not started previous drived line"; + return speed_profile; + } + const auto& last_speed_vector = + last_reference_line_info->speed_data().speed_vector(); + + if (!last_speed_vector.empty()) { + const auto& last_init_point = last_frame->PlanningStartPoint().path_point(); + Vec2d last_xy_point(last_init_point.x(), last_init_point.y()); + SLPoint last_sl_point; + if (!last_reference_line_info->reference_line().XYToSL(last_xy_point, + &last_sl_point)) { + AERROR << "Fail to transfer xy to sl when init speed profile"; + } + + Vec2d xy_point(planning_init_point.path_point().x(), + planning_init_point.path_point().y()); + SLPoint sl_point; + if (!last_reference_line_info->reference_line().XYToSL(xy_point, + &last_sl_point)) { + AERROR << "Fail to transfer xy to sl when init speed profile"; + } + double s_diff = sl_point.s() - last_sl_point.s(); + double start_time = 0.0; + double start_s = 0.0; + bool is_updated_start = false; + for (const auto& speed_point : last_speed_vector) { + if (speed_point.s() < s_diff) { + continue; + } + if (!is_updated_start) { + start_time = speed_point.t(); + start_s = speed_point.s(); + is_updated_start = true; + } + SpeedPoint refined_speed_point; + refined_speed_point.set_s(speed_point.s() - start_s); + refined_speed_point.set_t(speed_point.t() - start_time); + refined_speed_point.set_v(speed_point.v()); + refined_speed_point.set_a(speed_point.a()); + refined_speed_point.set_da(speed_point.da()); + speed_profile.push_back(std::move(refined_speed_point)); + } + } + return speed_profile; +} + +// This is a dummy simple hot start, need refine later +std::vector EMPlanner::GenerateSpeedHotStart( + const TrajectoryPoint& planning_init_point) { + std::vector hot_start_speed_profile; + double s = 0.0; + double t = 0.0; + double v = common::math::Clamp(planning_init_point.v(), 5.0, + FLAGS_planning_upper_speed_limit); + while (t < FLAGS_trajectory_time_length) { + SpeedPoint speed_point; + speed_point.set_s(s); + speed_point.set_t(t); + speed_point.set_v(v); + + hot_start_speed_profile.push_back(std::move(speed_point)); + + t += FLAGS_trajectory_time_resolution; + s += v * FLAGS_trajectory_time_resolution; + } + return hot_start_speed_profile; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/planner/em/em_planner.h b/modules/planning/planner/em/em_planner.h new file mode 100644 index 00000000000..b3b564a6fd2 --- /dev/null +++ b/modules/planning/planner/em/em_planner.h @@ -0,0 +1,99 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PLANNING_PLANNER_EM_EM_PLANNER_H_ +#define MODULES_PLANNING_PLANNER_EM_EM_PLANNER_H_ + +#include +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/proto/planning.pb.h" +#include "modules/planning/proto/planning_config.pb.h" + +#include "modules/common/status/status.h" +#include "modules/common/util/factory.h" +#include "modules/planning/common/reference_line_info.h" +#include "modules/planning/planner/planner.h" +#include "modules/planning/reference_line/reference_line.h" +#include "modules/planning/reference_line/reference_point.h" +#include "modules/planning/tasks/task.h" + +/** + * @namespace apollo::planning + * @brief apollo::planning + */ +namespace apollo { +namespace planning { + +/** + * @class EMPlanner + * @brief EMPlanner is an expectation maximization planner. + */ + +class EMPlanner : public Planner { + public: + /** + * @brief Constructor + */ + EMPlanner() = default; + + /** + * @brief Destructor + */ + virtual ~EMPlanner() = default; + + common::Status Init(const PlanningConfig& config) override; + + /** + * @brief Overrode function Plan in parent class Planner. + * @param start_point The trajectory point where planning starts + * @param trajectory_pb The computed trajectory + * @return OK if planning succeeds; error otherwise. + */ + common::Status Plan(const common::TrajectoryPoint& planning_init_point, + Frame* frame, + ReferenceLineInfo* reference_line_info) override; + + private: + void RegisterTasks(); + + std::vector GenerateInitSpeedProfile( + const common::TrajectoryPoint& planning_init_point, + const ReferenceLineInfo* reference_line_info); + + std::vector DummyHotStart( + const common::TrajectoryPoint& planning_init_point); + + std::vector GenerateSpeedHotStart( + const common::TrajectoryPoint& planning_init_point); + + // FIXME(all) remove frame from this function. + void PopulateDecision(const ReferenceLineInfo& reference_line_info, + Frame* frame); + + void RecordDebugInfo(const std::string& name, const double time_diff_ms, + planning::LatencyStats* ptr_latency_stats); + + apollo::common::util::Factory task_factory_; + std::vector> tasks_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_PLANNER_EM_EM_PLANNER_H_ diff --git a/modules/planning/planner/planner.h b/modules/planning/planner/planner.h index b18556d3ebd..53421739dde 100644 --- a/modules/planning/planner/planner.h +++ b/modules/planning/planner/planner.h @@ -19,8 +19,14 @@ #include -#include "modules/common/proto/path_point.pb.h" +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/common/status/status.h" #include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/planning/common/frame.h" +#include "modules/planning/common/trajectory/discretized_trajectory.h" +#include "modules/planning/proto/planning.pb.h" +#include "modules/planning/proto/planning_config.pb.h" +#include "modules/planning/proto/planning_internal.pb.h" /** * @namespace apollo::planning @@ -47,15 +53,18 @@ class Planner { */ virtual ~Planner() = default; + virtual apollo::common::Status Init(const PlanningConfig& config) = 0; + /** * @brief Compute a trajectory for execution. * @param start_point The trajectory point where planning starts - * @param discretized_trajectory The computed trajectory - * @return true if planning succeeds; false otherwise. + * @param trajectory_pb The computed trajectory + * @return OK if planning succeeds; error otherwise. */ - virtual bool Plan( - const apollo::common::TrajectoryPoint &start_point, - std::vector *discretized_trajectory) = 0; + + virtual apollo::common::Status Plan( + const common::TrajectoryPoint& planning_init_point, Frame* frame, + ReferenceLineInfo* reference_line_info) = 0; }; } // namespace planning diff --git a/modules/planning/planner/rtk/BUILD b/modules/planning/planner/rtk/BUILD new file mode 100644 index 00000000000..a88346debed --- /dev/null +++ b/modules/planning/planner/rtk/BUILD @@ -0,0 +1,44 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "rtk_planner", + srcs = [ + "rtk_replay_planner.cc", + ], + hdrs = [ + "rtk_replay_planner.h", + ], + deps = [ + "//external:gflags", + "//modules/common:log", + "//modules/common/proto:pnc_point_proto", + "//modules/common/util", + "//modules/common/util:factory", + "//modules/common/vehicle_state", + "//modules/planning/common:planning_common", + "//modules/planning/math/curve1d:quartic_polynomial_curve1d", + "//modules/planning/planner", + "//modules/planning/proto:planning_proto", + "@eigen//:eigen", + ], +) + +cc_test( + name = "rtk_replay_planner_test", + size = "small", + srcs = [ + "rtk_replay_planner_test.cc", + ], + data = ["//modules/planning:planning_testdata"], + deps = [ + ":rtk_planner", + "//modules/common:log", + "//modules/common/time", + "//modules/common/util", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/planning/planner/rtk_replay_planner.cc b/modules/planning/planner/rtk/rtk_replay_planner.cc similarity index 50% rename from modules/planning/planner/rtk_replay_planner.cc rename to modules/planning/planner/rtk/rtk_replay_planner.cc index 8a6b1e72a64..cb7034a3c44 100644 --- a/modules/planning/planner/rtk_replay_planner.cc +++ b/modules/planning/planner/rtk/rtk_replay_planner.cc @@ -14,9 +14,10 @@ * limitations under the License. *****************************************************************************/ -#include "modules/planning/planner/rtk_replay_planner.h" +#include "modules/planning/planner/rtk/rtk_replay_planner.h" #include +#include #include "modules/common/log.h" #include "modules/common/util/string_tokenizer.h" @@ -26,54 +27,66 @@ namespace apollo { namespace planning { using apollo::common::TrajectoryPoint; -using apollo::common::vehicle_state::VehicleState; +using apollo::common::VehicleState; +using apollo::common::ErrorCode; +using apollo::common::Status; RTKReplayPlanner::RTKReplayPlanner() { ReadTrajectoryFile(FLAGS_rtk_trajectory_filename); } -bool RTKReplayPlanner::Plan( - const TrajectoryPoint &start_point, - std::vector *ptr_discretized_trajectory) { +Status RTKReplayPlanner::Init(const PlanningConfig&) { return Status::OK(); } + +Status RTKReplayPlanner::Plan(const TrajectoryPoint& planning_init_point, + Frame* frame, + ReferenceLineInfo* reference_line_info) { if (complete_rtk_trajectory_.empty() || complete_rtk_trajectory_.size() < 2) { - AERROR << "RTKReplayPlanner doesn't have a recorded trajectory or " - "the recorded trajectory doesn't have enough valid trajectory " - "points."; - return false; + std::string msg( + "RTKReplayPlanner doesn't have a recorded trajectory or " + "the recorded trajectory doesn't have enough valid trajectory " + "points."); + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); } - std::size_t matched_index = - QueryPositionMatchedPoint(start_point, complete_rtk_trajectory_); + std::uint32_t matched_index = + QueryPositionMatchedPoint(planning_init_point, complete_rtk_trajectory_); - std::size_t forward_buffer = FLAGS_rtk_trajectory_forward; - std::size_t end_index = + std::uint32_t forward_buffer = FLAGS_rtk_trajectory_forward; + std::uint32_t end_index = matched_index + forward_buffer >= complete_rtk_trajectory_.size() ? complete_rtk_trajectory_.size() - 1 : matched_index + forward_buffer - 1; - ptr_discretized_trajectory->assign( + // auto* trajectory_points = trajectory_pb->mutable_trajectory_point(); + std::vector trajectory_points( complete_rtk_trajectory_.begin() + matched_index, complete_rtk_trajectory_.begin() + end_index + 1); // reset relative time double zero_time = complete_rtk_trajectory_[matched_index].relative_time(); - for (auto &trajectory : *ptr_discretized_trajectory) { - trajectory.set_relative_time(trajectory.relative_time() - zero_time); + for (auto& trajectory_point : trajectory_points) { + trajectory_point.set_relative_time(trajectory_point.relative_time() - + zero_time); } // check if the trajectory has enough points; // if not, append the last points multiple times and // adjust their corresponding time stamps. - while (ptr_discretized_trajectory->size() < FLAGS_rtk_trajectory_forward) { - ptr_discretized_trajectory->push_back(ptr_discretized_trajectory->back()); - auto &last_point = ptr_discretized_trajectory->back(); - last_point.set_relative_time(last_point.relative_time() + + while (trajectory_points.size() < + static_cast(FLAGS_rtk_trajectory_forward)) { + const auto& last_point = trajectory_points.rbegin(); + auto new_point = last_point; + new_point->set_relative_time(new_point->relative_time() + FLAGS_trajectory_resolution); + trajectory_points.push_back(*new_point); } - return true; + reference_line_info->SetTrajectory( + DiscretizedTrajectory(std::move(trajectory_points))); + return Status::OK(); } -void RTKReplayPlanner::ReadTrajectoryFile(const std::string &filename) { +void RTKReplayPlanner::ReadTrajectoryFile(const std::string& filename) { if (!complete_rtk_trajectory_.empty()) { complete_rtk_trajectory_.clear(); } @@ -103,42 +116,44 @@ void RTKReplayPlanner::ReadTrajectoryFile(const std::string &filename) { } TrajectoryPoint point; - point.set_x(std::stod(tokens[0])); - point.set_y(std::stod(tokens[1])); - point.set_z(std::stod(tokens[2])); + point.mutable_path_point()->set_x(std::stod(tokens[0])); + point.mutable_path_point()->set_y(std::stod(tokens[1])); + point.mutable_path_point()->set_z(std::stod(tokens[2])); point.set_v(std::stod(tokens[3])); point.set_a(std::stod(tokens[4])); - point.set_kappa(std::stod(tokens[5])); - point.set_dkappa(std::stod(tokens[6])); + point.mutable_path_point()->set_kappa(std::stod(tokens[5])); + point.mutable_path_point()->set_dkappa(std::stod(tokens[6])); point.set_relative_time(std::stod(tokens[7])); - point.set_theta(std::stod(tokens[8])); + point.mutable_path_point()->set_theta(std::stod(tokens[8])); - point.set_s(std::stod(tokens[10])); - complete_rtk_trajectory_.push_back(point); + point.mutable_path_point()->set_s(std::stod(tokens[10])); + complete_rtk_trajectory_.push_back(std::move(point)); } file_in.close(); } -std::size_t RTKReplayPlanner::QueryPositionMatchedPoint( - const TrajectoryPoint &start_point, - const std::vector &trajectory) const { - auto func_distance_square = [](const TrajectoryPoint &point, const double x, +std::uint32_t RTKReplayPlanner::QueryPositionMatchedPoint( + const TrajectoryPoint& start_point, + const std::vector& trajectory) const { + auto func_distance_square = [](const TrajectoryPoint& point, const double x, const double y) { - double dx = point.x() - x; - double dy = point.y() - y; + double dx = point.path_point().x() - x; + double dy = point.path_point().y() - y; return dx * dx + dy * dy; }; - double d_min = func_distance_square(trajectory.front(), start_point.x(), - start_point.y()); - std::size_t index_min = 0; - for (std::size_t i = 1; i < trajectory.size(); ++i) { + double d_min = + func_distance_square(trajectory.front(), start_point.path_point().x(), + start_point.path_point().y()); + std::uint32_t index_min = 0; + for (std::uint32_t i = 1; i < trajectory.size(); ++i) { double d_temp = - func_distance_square(trajectory[i], start_point.x(), start_point.y()); + func_distance_square(trajectory[i], start_point.path_point().x(), + start_point.path_point().y()); if (d_temp < d_min) { d_min = d_temp; index_min = i; diff --git a/modules/planning/planner/rtk_replay_planner.h b/modules/planning/planner/rtk/rtk_replay_planner.h similarity index 64% rename from modules/planning/planner/rtk_replay_planner.h rename to modules/planning/planner/rtk/rtk_replay_planner.h index 765af6d4524..f418ac4c31f 100644 --- a/modules/planning/planner/rtk_replay_planner.h +++ b/modules/planning/planner/rtk/rtk_replay_planner.h @@ -14,13 +14,16 @@ * limitations under the License. *****************************************************************************/ -#ifndef MODULES_PLANNING_PLANNER_RTK_REPLAY_PLANNER_H_ -#define MODULES_PLANNING_PLANNER_RTK_REPLAY_PLANNER_H_ +#ifndef MODULES_PLANNING_PLANNER_RTK_RTK_REPLAY_PLANNER_H_ +#define MODULES_PLANNING_PLANNER_RTK_RTK_REPLAY_PLANNER_H_ #include #include +#include "modules/planning/common/frame.h" +#include "modules/planning/common/reference_line_info.h" #include "modules/planning/planner/planner.h" +#include "modules/planning/proto/planning_config.pb.h" /** * @namespace apollo::planning @@ -48,31 +51,32 @@ class RTKReplayPlanner : public Planner { */ virtual ~RTKReplayPlanner() = default; + apollo::common::Status Init(const PlanningConfig& config) override; + /** * @brief Overrode function Plan in parent class Planner. * @param start_point The trajectory point where planning starts - * @param discretized_trajectory The computed trajectory - * @return true if planning succeeds; false otherwise. + * @param trajectory_pb The computed trajectory + * @return OK if planning succeeds; error otherwise. */ - bool Plan( - const apollo::common::TrajectoryPoint &start_point, - std::vector *ptr_trajectory) override; - + apollo::common::Status Plan( + const common::TrajectoryPoint& planning_init_point, Frame* frame, + ReferenceLineInfo* reference_line_info) override; /** * @brief Read the recorded trajectory file. * @param filename The name of the trajectory file. */ - void ReadTrajectoryFile(const std::string &filename); + void ReadTrajectoryFile(const std::string& filename); private: - std::size_t QueryPositionMatchedPoint( - const apollo::common::TrajectoryPoint &start_point, - const std::vector &trajectory) const; + std::uint32_t QueryPositionMatchedPoint( + const common::TrajectoryPoint& start_point, + const std::vector& trajectory) const; - std::vector complete_rtk_trajectory_; + std::vector complete_rtk_trajectory_; }; } // namespace planning } // namespace apollo -#endif /* MODULES_PLANNING_PLANNER_RTK_REPLAY_PLANNER_H_ */ +#endif // MODULES_PLANNING_PLANNER_RTK_RTK_REPLAY_PLANNER_H_ diff --git a/modules/planning/planner/rtk/rtk_replay_planner_test.cc b/modules/planning/planner/rtk/rtk_replay_planner_test.cc new file mode 100644 index 00000000000..6f4cd65b4d3 --- /dev/null +++ b/modules/planning/planner/rtk/rtk_replay_planner_test.cc @@ -0,0 +1,101 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/planning/planner/rtk/rtk_replay_planner.h" + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/localization/common/localization_gflags.h" +#include "modules/planning/common/planning_gflags.h" + +using apollo::common::TrajectoryPoint; + +namespace apollo { +namespace planning { + +class RTKReplayPlannerTest : public ::testing::Test {}; + +TEST_F(RTKReplayPlannerTest, ComputeTrajectory) { + FLAGS_rtk_trajectory_filename = "modules/planning/testdata/garage.csv"; + FLAGS_enable_map_reference_unify = false; + RTKReplayPlanner planner; + + TrajectoryPoint start_point; + start_point.mutable_path_point()->set_x(586385.782842); + start_point.mutable_path_point()->set_y(4140674.76063); + + ReferenceLine reference_line; + localization::LocalizationEstimate localization; + canbus::Chassis chassis; + localization.mutable_pose()->mutable_position()->set_x(586385.782842); + localization.mutable_pose()->mutable_position()->set_y(4140674.76063); + localization.mutable_pose()->mutable_angular_velocity()->set_x(0.0); + localization.mutable_pose()->mutable_angular_velocity()->set_y(0.0); + localization.mutable_pose()->mutable_angular_velocity()->set_z(0.0); + localization.mutable_pose()->mutable_linear_acceleration()->set_x(0.0); + localization.mutable_pose()->mutable_linear_acceleration()->set_y(0.0); + localization.mutable_pose()->mutable_linear_acceleration()->set_z(0.0); + common::VehicleState::instance()->Update(localization, chassis); + ReferenceLineSmootherConfig smooth_config; + ReferenceLineInfo info(nullptr, reference_line, start_point, smooth_config); + auto status = planner.Plan(start_point, nullptr, &info); + + const auto& trajectory = info.trajectory(); + EXPECT_TRUE(status.ok()); + EXPECT_TRUE(!trajectory.trajectory_points().empty()); + EXPECT_EQ(trajectory.trajectory_points().size(), + FLAGS_rtk_trajectory_forward); + + auto first_point = trajectory.trajectory_points().begin(); + EXPECT_DOUBLE_EQ(first_point->path_point().x(), 586385.782841); + EXPECT_DOUBLE_EQ(first_point->path_point().y(), 4140674.76065); + + auto last_point = trajectory.trajectory_points().rbegin(); + EXPECT_DOUBLE_EQ(last_point->path_point().x(), 586355.063786); + EXPECT_DOUBLE_EQ(last_point->path_point().y(), 4140681.98605); +} + +TEST_F(RTKReplayPlannerTest, ErrorTest) { + FLAGS_rtk_trajectory_filename = + "modules/planning/testdata/garage_no_file.csv"; + FLAGS_enable_map_reference_unify = false; + RTKReplayPlanner planner; + FLAGS_rtk_trajectory_filename = "modules/planning/testdata/garage_error.csv"; + RTKReplayPlanner planner_with_error_csv; + TrajectoryPoint start_point; + start_point.mutable_path_point()->set_x(586385.782842); + start_point.mutable_path_point()->set_y(4140674.76063); + localization::LocalizationEstimate localization; + canbus::Chassis chassis; + localization.mutable_pose()->mutable_position()->set_x(586385.782842); + localization.mutable_pose()->mutable_position()->set_y(4140674.76063); + localization.mutable_pose()->mutable_angular_velocity()->set_x(0.0); + localization.mutable_pose()->mutable_angular_velocity()->set_y(0.0); + localization.mutable_pose()->mutable_angular_velocity()->set_z(0.0); + localization.mutable_pose()->mutable_linear_acceleration()->set_x(0.0); + localization.mutable_pose()->mutable_linear_acceleration()->set_y(0.0); + localization.mutable_pose()->mutable_linear_acceleration()->set_z(0.0); + common::VehicleState::instance()->Update(localization, chassis); + ReferenceLine ref; + ReferenceLineSmootherConfig smooth_config; + ReferenceLineInfo info(nullptr, ref, start_point, smooth_config); + EXPECT_TRUE(!(planner_with_error_csv.Plan(start_point, nullptr, &info)).ok()); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/planner/rtk_replay_planner_test.cc b/modules/planning/planner/rtk_replay_planner_test.cc deleted file mode 100644 index 0f0a6f833b9..00000000000 --- a/modules/planning/planner/rtk_replay_planner_test.cc +++ /dev/null @@ -1,69 +0,0 @@ -/****************************************************************************** - * Copyright 2017 The Apollo 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. - *****************************************************************************/ - -#include "modules/planning/planner/rtk_replay_planner.h" - -#include "gmock/gmock.h" -#include "gtest/gtest.h" - -#include "modules/planning/common/planning_gflags.h" - -using apollo::common::TrajectoryPoint; - -namespace apollo { -namespace planning { - -class RTKReplayPlannerTest : public ::testing::Test {}; - -TEST_F(RTKReplayPlannerTest, ComputeTrajectory) { - FLAGS_rtk_trajectory_filename = "modules/planning/testdata/garage.csv"; - RTKReplayPlanner planner; - - TrajectoryPoint start_point; - start_point.set_x(586385.782842); - start_point.set_y(4140674.76063); - - std::vector trajectory; - bool planning_succeeded = planner.Plan(start_point, &trajectory); - - EXPECT_TRUE(planning_succeeded); - EXPECT_TRUE(!trajectory.empty()); - EXPECT_EQ(trajectory.size(), (std::size_t)FLAGS_rtk_trajectory_forward); - - auto first_point = trajectory.front(); - EXPECT_DOUBLE_EQ(first_point.x(), 586385.782841); - EXPECT_DOUBLE_EQ(first_point.y(), 4140674.76065); - - auto last_point = trajectory.back(); - EXPECT_DOUBLE_EQ(last_point.x(), 586355.063786); - EXPECT_DOUBLE_EQ(last_point.y(), 4140681.98605); -} - -TEST_F(RTKReplayPlannerTest, ErrorTest) { - FLAGS_rtk_trajectory_filename = - "modules/planning/testdata/garage_no_file.csv"; - RTKReplayPlanner planner; - FLAGS_rtk_trajectory_filename = "modules/planning/testdata/garage_error.csv"; - RTKReplayPlanner planner_with_error_csv; - TrajectoryPoint start_point; - start_point.set_x(586385.782842); - start_point.set_y(4140674.76063); - std::vector trajectory; - EXPECT_TRUE(!planner_with_error_csv.Plan(start_point, &trajectory)); -} - -} // namespace planning -} // namespace apollo diff --git a/modules/planning/planning.cc b/modules/planning/planning.cc index 7e993d5099e..330c3fe1249 100644 --- a/modules/planning/planning.cc +++ b/modules/planning/planning.cc @@ -13,166 +13,318 @@ * See the License for the specific language governing permissions and * limitations under the License. *****************************************************************************/ + +#include "modules/planning/planning.h" + +#include +#include + +#include "google/protobuf/repeated_field.h" + #include "modules/common/adapters/adapter_manager.h" #include "modules/common/time/time.h" +#include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/map/hdmap/hdmap_util.h" #include "modules/planning/common/planning_gflags.h" -#include "modules/planning/planner/rtk_replay_planner.h" -#include "modules/planning/planning.h" +#include "modules/planning/planner/em/em_planner.h" +#include "modules/planning/planner/rtk/rtk_replay_planner.h" +#include "modules/planning/reference_line/reference_line_provider.h" +#include "modules/planning/trajectory_stitcher/trajectory_stitcher.h" namespace apollo { namespace planning { +using apollo::common::ErrorCode; +using apollo::common::Status; using apollo::common::TrajectoryPoint; +using apollo::common::VehicleState; using apollo::common::adapter::AdapterManager; -using TrajectoryPb = ADCTrajectory; +using apollo::common::time::Clock; + +std::string Planning::Name() const { return "planning"; } void Planning::RegisterPlanners() { - planner_factory_.Register(PlannerType::RTK_PLANNER, []() -> Planner * { - return new RTKReplayPlanner(); - }); + planner_factory_.Register( + PlanningConfig::RTK, []() -> Planner* { return new RTKReplayPlanner(); }); + planner_factory_.Register(PlanningConfig::EM, + []() -> Planner* { return new EMPlanner(); }); } -Planning::Planning() { RegisterPlanners(); } - -bool Planning::Plan(const common::vehicle_state::VehicleState &vehicle_state, - const bool is_on_auto_mode, const double publish_time, - std::vector *planning_trajectory) { - double planning_cycle_time = 1.0 / FLAGS_planning_loop_rate; - double execution_start_time = publish_time; - - ptr_planner_ = planner_factory_.CreateObject(PlannerType::RTK_PLANNER); - if (!ptr_planner_) { - AERROR << "Failed to create RTK planner"; - return false; - } - - if (is_on_auto_mode && !last_trajectory_.empty()) { - // if the auto-driving mode is on and we have the trajectory from last - // cycle, then - // find the planning starting point from the last planning result. - // this ensures the smoothness of planning output and - // therefore the smoothness of control execution. - - auto matched_info = - ComputeStartingPointFromLastTrajectory(execution_start_time); - TrajectoryPoint matched_point = matched_info.first; - std::size_t matched_index = matched_info.second; - - // Compute the position deviation between current vehicle - // position and target vehicle position. - // If the deviation exceeds a specific threshold, - // it will be unsafe to planning from the matched point. - double dx = matched_point.x() - vehicle_state.x(); - double dy = matched_point.y() - vehicle_state.y(); - double position_deviation = std::sqrt(dx * dx + dy * dy); - - if (position_deviation < FLAGS_replanning_threshold) { - // planned trajectory from the matched point, the matched point has - // relative time 0. - bool planning_succeeded = - ptr_planner_->Plan(matched_point, planning_trajectory); - - if (!planning_succeeded) { - last_trajectory_.clear(); - return false; - } - - // a segment of last trajectory to be attached to planned trajectory in - // case controller needs. - auto overhead_trajectory = GetOverheadTrajectory( - matched_index, (std::size_t)FLAGS_rtk_trajectory_backward); - planning_trajectory->insert(planning_trajectory->begin(), - overhead_trajectory.begin(), - overhead_trajectory.end()); - - // store the planned trajectory and header info for next planning cycle. - last_trajectory_ = *planning_trajectory; - last_header_time_ = execution_start_time; - return true; - } +Status Planning::InitFrame(const uint32_t sequence_num, const double time_stamp, + const TrajectoryPoint& init_adc_point) { + frame_.reset(new Frame(sequence_num)); + frame_->SetPlanningStartPoint(init_adc_point); + + if (AdapterManager::GetRoutingResponse()->Empty()) { + AERROR << "Routing is empty"; + return Status(ErrorCode::PLANNING_ERROR, "routing is empty"); + } + frame_->SetVehicleInitPose(VehicleState::instance()->pose()); + frame_->SetRoutingResponse( + AdapterManager::GetRoutingResponse()->GetLatestObserved()); + ADEBUG << "Get routing: " + << AdapterManager::GetRoutingResponse() + ->GetLatestObserved() + .DebugString(); + + if (FLAGS_enable_prediction && !AdapterManager::GetPrediction()->Empty()) { + const auto& prediction = + AdapterManager::GetPrediction()->GetLatestObserved(); + frame_->SetPrediction(prediction); + ADEBUG << "Get prediction: " << prediction.DebugString(); + } + + auto status = frame_->Init(config_, time_stamp); + if (!status.ok()) { + AERROR << "failed to init frame"; + return Status(ErrorCode::PLANNING_ERROR, "init frame failed"); + } + frame_->RecordInputDebug(); + return Status::OK(); +} + +Status Planning::Init() { + pnc_map_.reset(new hdmap::PncMap(apollo::hdmap::BaseMapFile())); + Frame::SetMap(pnc_map_.get()); + + CHECK(apollo::common::util::GetProtoFromFile(FLAGS_planning_config_file, + &config_)) + << "failed to load planning config file " << FLAGS_planning_config_file; + if (!AdapterManager::Initialized()) { + AdapterManager::Init(FLAGS_adapter_config_filename); + } + if (AdapterManager::GetLocalization() == nullptr) { + std::string error_msg("Localization is not registered"); + AERROR << error_msg; + return Status(ErrorCode::PLANNING_ERROR, error_msg); + } + if (AdapterManager::GetChassis() == nullptr) { + std::string error_msg("Chassis is not registered"); + AERROR << error_msg; + return Status(ErrorCode::PLANNING_ERROR, error_msg); + } + if (AdapterManager::GetRoutingResponse() == nullptr) { + std::string error_msg("RoutingResponse is not registered"); + AERROR << error_msg; + return Status(ErrorCode::PLANNING_ERROR, error_msg); + } + if (FLAGS_enable_prediction && AdapterManager::GetPrediction() == nullptr) { + std::string error_msg("Prediction is not registered"); + AERROR << error_msg; + return Status(ErrorCode::PLANNING_ERROR, error_msg); } - // if 1. the auto-driving mode is off or - // 2. we don't have the trajectory from last planning cycle or - // 3. the position deviation from actual and target is too high - // then planning from current vehicle state. - TrajectoryPoint vehicle_state_point = - ComputeStartingPointFromVehicleState(vehicle_state, planning_cycle_time); + if (FLAGS_enable_reference_line_provider_thread) { + ReferenceLineProvider::instance()->Init( + pnc_map_.get(), config_.reference_line_smoother_config()); + } - bool planning_succeeded = - ptr_planner_->Plan(vehicle_state_point, planning_trajectory); - if (!planning_succeeded) { - last_trajectory_.clear(); - return false; + RegisterPlanners(); + planner_ = planner_factory_.CreateObject(config_.planner_type()); + if (!planner_) { + return Status( + ErrorCode::PLANNING_ERROR, + "planning is not initialized with config : " + config_.DebugString()); } - // store the planned trajectory and header info for next planning cycle. - last_trajectory_ = *planning_trajectory; - last_header_time_ = execution_start_time; - return true; + + return planner_->Init(config_); +} + +Status Planning::Start() { + if (FLAGS_enable_reference_line_provider_thread) { + ReferenceLineProvider::instance()->Start(); + } + timer_ = AdapterManager::CreateTimer( + ros::Duration(1.0 / FLAGS_planning_loop_rate), &Planning::OnTimer, this); + return Status::OK(); +} + +void Planning::OnTimer(const ros::TimerEvent&) { + RunOnce(); + if (frame_) { + auto seq_num = frame_->SequenceNum(); + FrameHistory::instance()->Add(seq_num, std::move(frame_)); + } +} + +void Planning::PublishPlanningPb(ADCTrajectory* trajectory_pb) { + AdapterManager::FillPlanningHeader(Name(), trajectory_pb); + // TODO(all): integrate reverse gear + trajectory_pb->set_gear(canbus::Chassis::GEAR_DRIVE); + AdapterManager::PublishPlanning(*trajectory_pb); } -std::pair -Planning::ComputeStartingPointFromLastTrajectory( - const double start_time) const { - auto comp = [](const TrajectoryPoint &p, const double t) { - return p.relative_time() < t; - }; - - auto it_lower = - std::lower_bound(last_trajectory_.begin(), last_trajectory_.end(), - start_time - last_header_time_, comp); - if (it_lower == last_trajectory_.end()) { - it_lower--; - } - std::size_t index = it_lower - last_trajectory_.begin(); - return std::pair(*it_lower, index); +void Planning::PublishPlanningPb(ADCTrajectory* trajectory_pb, + double timestamp) { + AdapterManager::FillPlanningHeader(Name(), trajectory_pb); + trajectory_pb->mutable_header()->set_timestamp_sec(timestamp); + // TODO(all): integrate reverse gear + trajectory_pb->set_gear(canbus::Chassis::GEAR_DRIVE); + AdapterManager::PublishPlanning(*trajectory_pb); } -TrajectoryPoint Planning::ComputeStartingPointFromVehicleState( - const common::vehicle_state::VehicleState &vehicle_state, - const double forward_time) const { - // Eigen::Vector2d estimated_position = - // vehicle_state.EstimateFuturePosition(forward_time); - TrajectoryPoint point; - // point.set_x(estimated_position.x()); - // point.set_y(estimated_position.y()); - point.set_x(vehicle_state.x()); - point.set_y(vehicle_state.y()); - point.set_z(vehicle_state.z()); - point.set_v(vehicle_state.linear_velocity()); - point.set_a(vehicle_state.linear_acceleration()); - point.set_kappa(0.0); - const double speed_threshold = 0.1; - if (point.v() > speed_threshold) { - point.set_kappa(vehicle_state.angular_velocity() / - vehicle_state.linear_velocity()); - } - point.set_dkappa(0.0); - point.set_s(0.0); - point.set_relative_time(0.0); - return point; +void Planning::RunOnce() { + const double start_timestamp = Clock::NowInSecond(); + AdapterManager::Observe(); + ADCTrajectory not_ready_pb; + auto* not_ready = not_ready_pb.mutable_decision() + ->mutable_main_decision() + ->mutable_not_ready(); + if (AdapterManager::GetLocalization()->Empty()) { + not_ready->set_reason("localization not ready"); + } else if (AdapterManager::GetChassis()->Empty()) { + not_ready->set_reason("chassis not ready"); + } else if (AdapterManager::GetRoutingResponse()->Empty()) { + not_ready->set_reason("routing not ready"); + } else if (FLAGS_enable_prediction && + AdapterManager::GetPrediction()->Empty()) { + not_ready->set_reason("prediction not ready"); + } + if (not_ready->has_reason()) { + AERROR << not_ready->reason() << "; skip the planning cycle."; + PublishPlanningPb(¬_ready_pb); + return; + } + + // localization + const auto& localization = + AdapterManager::GetLocalization()->GetLatestObserved(); + ADEBUG << "Get localization:" << localization.DebugString(); + + // chassis + const auto& chassis = AdapterManager::GetChassis()->GetLatestObserved(); + ADEBUG << "Get chassis:" << chassis.DebugString(); + + common::Status status = + common::VehicleState::instance()->Update(localization, chassis); + + if (!status.ok()) { + AERROR << "Update VehicleState failed."; + not_ready->set_reason("Update VehicleState failed."); + status.Save(not_ready_pb.mutable_header()->mutable_status()); + PublishPlanningPb(¬_ready_pb); + return; + } + + // update routing + if (FLAGS_enable_reference_line_provider_thread) { + ReferenceLineProvider::instance()->UpdateRoutingResponse( + AdapterManager::GetRoutingResponse()->GetLatestObserved()); + } + + const double planning_cycle_time = 1.0 / FLAGS_planning_loop_rate; + + bool is_auto_mode = chassis.driving_mode() == chassis.COMPLETE_AUTO_DRIVE; + const auto& stitching_trajectory = + TrajectoryStitcher::ComputeStitchingTrajectory( + is_auto_mode, start_timestamp, planning_cycle_time, + last_publishable_trajectory_); + + const uint32_t frame_num = AdapterManager::GetPlanning()->GetSeqNum() + 1; + status = InitFrame(frame_num, start_timestamp, stitching_trajectory.back()); + double end_timestamp = Clock::NowInSecond(); + double time_diff_ms = (end_timestamp - start_timestamp) * 1000; + auto trajectory_pb = frame_->MutableADCTrajectory(); + trajectory_pb->mutable_latency_stats()->set_init_frame_time_ms(time_diff_ms); + if (!status.ok()) { + ADCTrajectory estop; + estop.mutable_estop(); + AERROR << "Init frame failed"; + status.Save(estop.mutable_header()->mutable_status()); + PublishPlanningPb(&estop, start_timestamp); + return; + } + + status = Plan(start_timestamp, stitching_trajectory); + + end_timestamp = Clock::NowInSecond(); + time_diff_ms = (end_timestamp - start_timestamp) * 1000; + ADEBUG << "total planning time spend: " << time_diff_ms << " ms."; + + trajectory_pb->mutable_latency_stats()->set_total_time_ms(time_diff_ms); + ADEBUG << "Planning latency: " + << trajectory_pb->latency_stats().DebugString(); + + if (status.ok()) { + PublishPlanningPb(trajectory_pb, start_timestamp); + ADEBUG << "Planning succeeded:" << trajectory_pb->header().DebugString(); + } else { + status.Save(trajectory_pb->mutable_header()->mutable_status()); + PublishPlanningPb(trajectory_pb, start_timestamp); + AERROR << "Planning failed"; + } } -void Planning::Reset() { - last_header_time_ = 0.0; - last_trajectory_.clear(); +void Planning::Stop() { + last_publishable_trajectory_.Clear(); + frame_.reset(nullptr); + planner_.reset(nullptr); + if (FLAGS_enable_reference_line_provider_thread) { + ReferenceLineProvider::instance()->Stop(); + } } -std::vector Planning::GetOverheadTrajectory( - const std::size_t matched_index, const std::size_t buffer_size) { - const std::size_t start_index = - matched_index < buffer_size ? 0 : matched_index - buffer_size; +common::Status Planning::Plan( + const double current_time_stamp, + const std::vector& stitching_trajectory) { + auto trajectory_pb = frame_->MutableADCTrajectory(); + if (FLAGS_enable_record_debug) { + frame_->DebugLogger() + ->mutable_planning_data() + ->mutable_init_point() + ->CopyFrom(stitching_trajectory.back()); + } + auto status = Status::OK(); + for (auto& reference_line_info : frame_->reference_line_info()) { + status = planner_->Plan(stitching_trajectory.back(), frame_.get(), + &reference_line_info); + AERROR_IF(!status.ok()) << "planner failed to make a driving plan."; + } - std::vector overhead_trajectory( - last_trajectory_.begin() + start_index, - last_trajectory_.begin() + matched_index); + const auto* best_reference_line = frame_->FindDriveReferenceLineInfo(); + if (!best_reference_line) { + std::string msg( + "planner failed to make a driving plan because NO best_reference_line " + "can be provided."); + AERROR << msg; + last_publishable_trajectory_.Clear(); + return Status(ErrorCode::PLANNING_ERROR, msg); + } - double zero_relative_time = last_trajectory_[matched_index].relative_time(); - // reset relative time - for (auto &p : overhead_trajectory) { - p.set_relative_time(p.relative_time() - zero_relative_time); + auto* ptr_debug = frame_->DebugLogger(); + ptr_debug->MergeFrom(best_reference_line->debug()); + frame_->MutableADCTrajectory()->mutable_latency_stats()->MergeFrom( + best_reference_line->latency_stats()); + + // Add debug information. + if (FLAGS_enable_record_debug) { + auto* reference_line = ptr_debug->mutable_planning_data()->add_path(); + reference_line->set_name("planning_reference_line"); + const auto& reference_points = + best_reference_line->reference_line().reference_points(); + for (const auto& reference_point : reference_points) { + auto* path_point = reference_line->add_path_point(); + path_point->set_x(reference_point.x()); + path_point->set_y(reference_point.y()); + path_point->set_theta(reference_point.heading()); + path_point->set_kappa(reference_point.kappa()); + path_point->set_dkappa(reference_point.dkappa()); + } } - return overhead_trajectory; + + PublishableTrajectory publishable_trajectory( + current_time_stamp, best_reference_line->trajectory()); + + publishable_trajectory.PrependTrajectoryPoints( + stitching_trajectory.begin(), stitching_trajectory.end() - 1); + + publishable_trajectory.PopulateTrajectoryProtobuf(trajectory_pb); + trajectory_pb->set_is_replan(stitching_trajectory.size() == 1); + + // update last publishable trajectory; + last_publishable_trajectory_ = std::move(publishable_trajectory); + + return status; } } // namespace planning diff --git a/modules/planning/planning.h b/modules/planning/planning.h index 129ffcd8a83..ad283554bba 100644 --- a/modules/planning/planning.h +++ b/modules/planning/planning.h @@ -18,69 +18,98 @@ #define MODULES_PLANNING_PLANNING_H_ #include +#include #include #include +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/proto/planning.pb.h" +#include "modules/planning/proto/planning_config.pb.h" + +#include "modules/common/apollo_app.h" +#include "modules/common/status/status.h" #include "modules/common/util/factory.h" #include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/planning/common/frame.h" +#include "modules/planning/common/trajectory/publishable_trajectory.h" #include "modules/planning/planner/planner.h" +/** + * @namespace apollo::planning + * @brief apollo::planning + */ namespace apollo { namespace planning { -class Planning { +/** + * @class Localization + * + * @brief Localization module main class. It processes GPS and IMU as input, + * to generate localization info. + */ +class Planning : public apollo::common::ApolloApp { public: /** - * @brief Constructor + * @brief module name + * @return module name */ - Planning(); + std::string Name() const override; /** - * @brief Destructor + * @brief module initialization function + * @return initialization status */ - ~Planning() = default; + apollo::common::Status Init() override; /** - * @brief Plan the trajectory given current vehicle state - * @param vehicle_state variable describes the vehicle state, including - * position, velocity, acceleration, heading, etc - * @param is_on_auto_mode whether the current system is on auto-driving mode - * @param publishable_trajectory the computed planning trajectory + * @brief module start function + * @return start status */ - bool Plan(const common::vehicle_state::VehicleState &vehicle_state, - const bool is_on_auto_mode, const double publish_time, - std::vector *discretized_trajectory); + apollo::common::Status Start() override; /** - * @brief Reset the planner to initial state. + * @brief module stop function + * @return stop status */ - void Reset(); + void Stop() override; - private: - void RegisterPlanners(); + /** + * @brief Plan the trajectory given current vehicle state + * @param is_on_auto_mode whether the current system is on auto-driving mode + */ + common::Status Plan( + const double current_time_stamp, + const std::vector& stitching_trajectory); + + void RunOnce(); + + common::Status InitFrame(const uint32_t sequence_num, const double time_stamp, + const common::TrajectoryPoint& init_adc_point); private: - std::pair - ComputeStartingPointFromLastTrajectory(const double curr_time) const; + // Watch dog timer + void OnTimer(const ros::TimerEvent&); + + void PublishPlanningPb(ADCTrajectory* trajectory_pb); + + void PublishPlanningPb(ADCTrajectory* trajectory_pb, double timestamp); + + void RegisterPlanners(); - common::TrajectoryPoint ComputeStartingPointFromVehicleState( - const common::vehicle_state::VehicleState &vehicle_state, - const double forward_time) const; + apollo::common::util::Factory + planner_factory_; - std::vector GetOverheadTrajectory( - const std::size_t matched_index, const std::size_t buffer_size); + PlanningConfig config_; - std::unique_ptr ptr_planner_; + std::unique_ptr pnc_map_; - enum PlannerType { - RTK_PLANNER, - }; + std::unique_ptr frame_; - common::util::Factory planner_factory_; + std::unique_ptr planner_; - std::vector last_trajectory_; + PublishableTrajectory last_publishable_trajectory_; - double last_header_time_ = 0.0; + ros::Timer timer_; }; } // namespace planning diff --git a/modules/planning/planning_node.cc b/modules/planning/planning_node.cc deleted file mode 100644 index 494f4a2741e..00000000000 --- a/modules/planning/planning_node.cc +++ /dev/null @@ -1,131 +0,0 @@ -/****************************************************************************** - * Copyright 2017 The Apollo 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. - *****************************************************************************/ - -#include "modules/planning/planning_node.h" - -#include - -#include "modules/common/adapters/adapter_manager.h" -#include "modules/common/log.h" -#include "modules/planning/common/planning_gflags.h" -#include "modules/planning/proto/planning.pb.h" - -namespace apollo { -namespace planning { - -using apollo::common::TrajectoryPoint; -using apollo::common::vehicle_state::VehicleState; -using apollo::common::adapter::AdapterManager; -using apollo::common::time::Clock; -using TrajectoryPb = ADCTrajectory; - -PlanningNode::PlanningNode() { - AdapterManager::Init(FLAGS_adapter_config_path); -} - -PlanningNode::~PlanningNode() {} - -void PlanningNode::Run() { - static ros::Rate loop_rate(FLAGS_planning_loop_rate); - while (ros::ok()) { - RunOnce(); - ros::spinOnce(); - loop_rate.sleep(); - } -} - -void PlanningNode::RunOnce() { - AdapterManager::Observe(); - if (AdapterManager::GetLocalization() == nullptr) { - AERROR << "Localization is not available; skip the planning cycle"; - return; - } - if (AdapterManager::GetLocalization()->Empty()) { - AERROR << "localization messages are missing; skip the planning cycle"; - return; - } else { - AINFO << "Get localization message;"; - } - - if (AdapterManager::GetChassis() == nullptr) { - AERROR << "Chassis is not available; skip the planning cycle"; - return; - } - if (AdapterManager::GetChassis()->Empty()) { - AERROR << "Chassis messages are missing; skip the planning cycle"; - return; - } else { - AINFO << "Get localization message;"; - } - - AINFO << "Start planning ..."; - - const auto &localization = - AdapterManager::GetLocalization()->GetLatestObserved(); - VehicleState vehicle_state(localization); - - const auto &chassis = AdapterManager::GetChassis()->GetLatestObserved(); - bool is_on_auto_mode = chassis.driving_mode() == chassis.COMPLETE_AUTO_DRIVE; - - double planning_cycle_time = 1.0 / FLAGS_planning_loop_rate; - // the execution_start_time is the estimated time when the planned trajectory - // will be executed by the controller. - double execution_start_time = - apollo::common::time::ToSecond(apollo::common::time::Clock::Now()) + - planning_cycle_time; - - std::vector planning_trajectory; - bool res_planning = - planning_.Plan(vehicle_state, is_on_auto_mode, execution_start_time, - &planning_trajectory); - if (res_planning) { - TrajectoryPb trajectory_pb = - ToTrajectoryPb(execution_start_time, planning_trajectory); - AdapterManager::PublishPlanningTrajectory(trajectory_pb); - AINFO << "Planning succeeded"; - } else { - AINFO << "Planning failed"; - } -} - -void PlanningNode::Reset() { planning_.Reset(); } - -TrajectoryPb PlanningNode::ToTrajectoryPb( - const double header_time, - const std::vector &discretized_trajectory) { - TrajectoryPb trajectory_pb; - AdapterManager::FillPlanningTrajectoryHeader("planning", - trajectory_pb.mutable_header()); - - trajectory_pb.mutable_header()->set_timestamp_sec(header_time); - - for (const auto &trajectory_point : discretized_trajectory) { - auto ptr_trajectory_point_pb = trajectory_pb.add_adc_trajectory_point(); - ptr_trajectory_point_pb->set_x(trajectory_point.x()); - ptr_trajectory_point_pb->set_y(trajectory_point.y()); - ptr_trajectory_point_pb->set_theta(trajectory_point.theta()); - ptr_trajectory_point_pb->set_curvature(trajectory_point.kappa()); - ptr_trajectory_point_pb->set_relative_time( - trajectory_point.relative_time()); - ptr_trajectory_point_pb->set_speed(trajectory_point.v()); - ptr_trajectory_point_pb->set_acceleration_s(trajectory_point.a()); - ptr_trajectory_point_pb->set_accumulated_s(trajectory_point.s()); - } - return std::move(trajectory_pb); -} - -} // namespace planning -} // namespace apollo diff --git a/modules/planning/proto/BUILD b/modules/planning/proto/BUILD index 457f38dbd12..432b4665ef6 100644 --- a/modules/planning/proto/BUILD +++ b/modules/planning/proto/BUILD @@ -1,36 +1,120 @@ -package(default_visibility = ["//visibility:public"]) +load("//tools:cpplint.bzl", "cpplint") -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile") +package(default_visibility = ["//visibility:public"]) cc_proto_library( name = "planning_proto", - protos = [ + deps = [ + ":planning_proto_lib", + ], +) + +proto_library( + name = "planning_proto_lib", + srcs = [ + "decision.proto", "planning.proto", + "planning_config.proto", "planning_internal.proto", + "qp_spline_st_speed_config.proto", + "sl_boundary.proto", ], deps = [ - "//modules/canbus/proto:canbus_proto", - "//modules/common/proto:common_proto", - "//modules/decision/proto:decision_proto", - "//modules/localization/proto:localization_proto", - "//modules/perception/proto:perception_proto", - "//modules/prediction/proto:prediction_proto", + ":dp_poly_path_config_proto_lib", + ":dp_st_speed_config_proto_lib", + ":qp_spline_path_config_proto_lib", + ":reference_line_smoother_config_proto_lib", + "//modules/canbus/proto:canbus_proto_lib", + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:error_code_proto_lib", + "//modules/common/proto:header_proto_lib", + "//modules/common/proto:pnc_point_proto_lib", + "//modules/common/proto:vehicle_signal_proto_lib", + "//modules/localization/proto:localization_proto_lib", + "//modules/localization/proto:pose_proto_lib", + "//modules/map/proto:map_proto_lib", + "//modules/perception/proto:perception_proto_lib", + "//modules/prediction/proto:prediction_proto_lib", + "//modules/routing/proto:routing_proto_lib", ], ) -py_proto_compile( - name = "planning_proto_pylib", - protos = [ - "planning.proto", - "planning_internal.proto", +cc_proto_library( + name = "spiral_curve_config_proto", + deps = [ + ":spiral_curve_config_proto_lib", + ], +) + +proto_library( + name = "spiral_curve_config_proto_lib", + srcs = [ + "spiral_curve_config.proto", + ], +) + +cc_proto_library( + name = "dp_poly_path_config_proto", + deps = [ + ":dp_poly_path_config_proto_lib", ], +) + +proto_library( + name = "dp_poly_path_config_proto_lib", + srcs = [ + "dp_poly_path_config.proto", + ], +) + +cc_proto_library( + name = "dp_st_speed_config_proto", deps = [ - "//modules/canbus/proto:canbus_proto_pylib", - "//modules/common/proto:common_proto_pylib", - "//modules/decision/proto:decision_proto_pylib", - "//modules/localization/proto:localization_proto_pylib", - "//modules/perception/proto:perception_proto_pylib", - "//modules/prediction/proto:prediction_proto_pylib", + ":dp_st_speed_config_proto_lib", ], ) + +proto_library( + name = "dp_st_speed_config_proto_lib", + srcs = [ + "dp_st_speed_config.proto", + "st_boundary_config.proto", + ], +) + +cc_proto_library( + name = "qp_spline_path_config_proto", + deps = [ + ":qp_spline_path_config_proto_lib", + ], +) + +proto_library( + name = "qp_spline_path_config_proto_lib", + srcs = [ + "qp_spline_path_config.proto", + ], +) + +proto_library( + name = "st_boundary_config_proto_lib", + srcs = [ + "st_boundary_config.proto", + ], +) + +cc_proto_library( + name = "reference_line_smoother_config_proto", + deps = [ + ":reference_line_smoother_config_proto_lib", + ], +) + +proto_library( + name = "reference_line_smoother_config_proto_lib", + srcs = [ + "reference_line_smoother_config.proto", + ], +) + +cpplint() diff --git a/modules/planning/proto/decision.proto b/modules/planning/proto/decision.proto new file mode 100644 index 00000000000..c5d2e8c837c --- /dev/null +++ b/modules/planning/proto/decision.proto @@ -0,0 +1,182 @@ +syntax = "proto2"; + +package apollo.planning; + +import "modules/common/proto/geometry.proto"; +import "modules/common/proto/vehicle_signal.proto"; + +message TargetLane { + // lane id + optional string id = 1; + optional double start_s = 2; // in meters + optional double end_s = 3; // in meters + optional double speed_limit = 4; // in m/s +} + +message ObjectIgnore { +} + +enum StopReasonCode { + STOP_REASON_HEAD_VEHICLE = 1; + STOP_REASON_DESTINATION = 2; + STOP_REASON_PEDESTRIAN = 3; + STOP_REASON_OBSTACLE = 4; + STOP_REASON_PREPARKING = 5; + STOP_REASON_SIGNAL = 100; + STOP_REASON_STOP_SIGN = 101; + STOP_REASON_YIELD_SIGN = 102; + STOP_REASON_CLEAR_ZONE = 103; + STOP_REASON_CROSSWALK = 104; +} + +message ObjectStop { + optional StopReasonCode reason_code = 1; + optional double distance_s = 2; // in meters + // When stopped, the front center of vehicle should be at this point. + optional apollo.common.PointENU stop_point =3; + // When stopped, the heading of the vehicle should be stop_heading. + optional double stop_heading = 4; +} + +// dodge the obstacle in lateral direction when driving +message ObjectNudge { + enum Type { + LEFT_NUDGE = 1; // drive from the left side of the obstacle + RIGHT_NUDGE = 2; // drive from the right side of the obstacle + NO_NUDGE = 3; // No nudge is set. + }; + optional Type type = 1; + // minimum lateral distance in meters. positive if type = LEFT_NUDGE + // negative if type = RIGHT_NUDGE + optional double distance_l = 2; +} + +message ObjectYield { + optional double distance_s = 1; // minimum longitudinal distance in meters + optional apollo.common.PointENU fence_point = 2; + optional double fence_heading = 3; + optional double time_buffer = 4; // minimum time buffer required after the obstacle reaches the intersect point. +} + +message ObjectFollow { + optional double distance_s = 1; // minimum longitudinal distance in meters + optional apollo.common.PointENU fence_point = 2; + optional double fence_heading = 3; +} + +message ObjectOvertake { + optional double distance_s = 1; // minimum longitudinal distance in meters + optional apollo.common.PointENU fence_point = 2; + optional double fence_heading = 3; + optional double time_buffer = 4; // minimum time buffer required before the obstacle reaches the intersect point. +} + +message ObjectSidePass { +} + +// unified object decision while estop +message ObjectAvoid { +} + +message ObjectDecisionType { + oneof object_tag { + ObjectIgnore ignore = 1; + ObjectStop stop = 2; + ObjectFollow follow = 3; + ObjectYield yield = 4; + ObjectOvertake overtake = 5; + ObjectNudge nudge = 6; + ObjectSidePass sidepass = 7; + ObjectAvoid avoid = 8; + } +} + + +message ObjectDecision { + optional string id = 1; + optional int32 perception_id = 2; + repeated ObjectDecisionType object_decision = 3; +} + +message ObjectDecisions { + repeated ObjectDecision decision = 1; +} + +message MainStop { + optional StopReasonCode reason_code = 1; + optional string reason = 2; + // When stopped, the front center of vehicle should be at this point. + optional apollo.common.PointENU stop_point = 3; + // When stopped, the heading of the vehicle should be stop_heading. + optional double stop_heading = 4; +} + +message EmergencyStopHardBrake { +} + +message EmergencyStopCruiseToStop { +} + +message MainEmergencyStop { + // Unexpected event happened, human driver is required to take over + enum ReasonCode { + ESTOP_REASON_INTERNAL_ERR = 1; + ESTOP_REASON_COLLISION = 2; + ESTOP_REASON_ST_FIND_PATH = 3; + ESTOP_REASON_ST_MAKE_DECISION = 4; + ESTOP_REASON_SENSOR_ERROR = 5; + } + optional ReasonCode reason_code = 1; + optional string reason = 2; + oneof task { + EmergencyStopHardBrake hard_brake = 3; // hard brake + EmergencyStopCruiseToStop cruise_to_stop = 4; // cruise to stop + } +} + +message MainCruise { + // cruise current lane +} + +message MainChangeLane { + enum Type { + LEFT = 1; + RIGHT = 2; + }; + optional Type type = 1; + repeated TargetLane default_lane = 2; + optional MainStop default_lane_stop = 3; + optional MainStop target_lane_stop = 4; +} + +message MainMissionComplete { + // arrived at routing destination +} + +message MainNotReady { + // decision system is not ready. + // e.g. wait for routing data. + optional string reason = 1; +} + +message MainParking { +} + +message MainDecision { + oneof task { + MainCruise cruise = 1; + MainStop stop = 2; + MainEmergencyStop estop = 3; + MainChangeLane change_lane = 4; + MainMissionComplete mission_complete = 6; + MainNotReady not_ready = 7; + MainParking parking = 8; + } + repeated TargetLane target_lane = 5; +} + +message DecisionResult { + optional MainDecision main_decision = 1; + optional ObjectDecisions object_decision = 2; + optional apollo.common.VehicleSignal vehicle_signal = 3; +} diff --git a/modules/planning/proto/dp_poly_path_config.proto b/modules/planning/proto/dp_poly_path_config.proto new file mode 100644 index 00000000000..000ec7b31f1 --- /dev/null +++ b/modules/planning/proto/dp_poly_path_config.proto @@ -0,0 +1,19 @@ +syntax = "proto2"; + +package apollo.planning; + +message DpPolyPathConfig { + optional uint32 sample_level = 1 [default = 8]; + optional uint32 sample_points_num_each_level = 2 [default = 9]; + optional double step_length_max = 3 [default = 15.0]; + optional double step_length_min = 4 [default = 8.0]; + optional double lateral_sample_offset = 5 [default = 0.5]; + optional double lateral_adjust_coeff = 6 [default = 0.5]; + // Trajectory Cost Config + optional double eval_time_interval = 7 [default = 0.1]; + optional double path_resolution = 8 [default = 0.1]; + optional double obstacle_ignore_distance = 9 [default = 20.0]; + optional double obstacle_collision_distance = 10 [default = 0.2]; + optional double obstacle_risk_distance = 11 [default = 2.0]; + optional double obstacle_collision_cost = 12 [default = 1e3]; +} diff --git a/modules/planning/proto/dp_st_speed_config.proto b/modules/planning/proto/dp_st_speed_config.proto new file mode 100644 index 00000000000..cf03677f628 --- /dev/null +++ b/modules/planning/proto/dp_st_speed_config.proto @@ -0,0 +1,44 @@ +syntax = "proto2"; + +package apollo.planning; + +import "modules/planning/proto/st_boundary_config.proto"; + +message DpStSpeedConfig { + optional double total_path_length = 1 [ default = 0.1 ]; + optional double total_time = 2 [ default = 3.0 ]; + optional int32 matrix_dimension_s = 3 [ default = 100 ]; + optional int32 matrix_dimension_t = 4 [ default = 10 ]; + + optional double speed_weight = 5 [ default = 0.0 ]; + optional double accel_weight = 6 [ default = 10.0 ]; + optional double jerk_weight = 7 [ default = 10.0 ]; + optional double obstacle_weight = 8 [ default = 1.0 ]; + optional double reference_weight = 9 [ default = 0.0 ]; + optional double go_down_buffer = 10 [ default = 5.0 ]; + optional double go_up_buffer = 11 [ default = 5.0 ]; + + // obstacle cost config + optional double default_obstacle_cost = 12 [ default = 1e10 ]; + optional double obstacle_cost_factor = 13 [ default = -300 ]; + + // speed cost config + optional double default_speed_cost = 14 [ default = 1.0 ]; + optional double exceed_speed_penalty = 15 [ default = 10.0 ]; + optional double low_speed_penalty = 16 [ default = 2.5 ]; + + // accel cost config + optional double accel_penalty = 17 [ default = 2.0 ]; + optional double decel_penalty = 18 [ default = 2.0 ]; + + // jerk cost config + optional double positive_jerk_coeff = 19 [ default = 1.0 ]; + optional double negative_jerk_coeff = 20 [ default = 300.0 ]; + + // other constraint + optional double max_speed = 21 [ default = 20.0 ]; + optional double max_acceleration = 22 [ default = 4.5 ]; + optional double max_deceleration = 23 [ default = -4.5 ]; + + optional apollo.planning.StBoundaryConfig st_boundary_config = 34; +} diff --git a/modules/planning/proto/planning.proto b/modules/planning/proto/planning.proto index 56ed241beae..bdfbb6eeeec 100644 --- a/modules/planning/proto/planning.proto +++ b/modules/planning/proto/planning.proto @@ -3,10 +3,13 @@ syntax = "proto2"; package apollo.planning; import "modules/common/proto/header.proto"; +import "modules/common/proto/vehicle_signal.proto"; +import "modules/common/proto/pnc_point.proto"; import "modules/canbus/proto/chassis.proto"; +import "modules/planning/proto/decision.proto"; import "modules/planning/proto/planning_internal.proto"; -// TODO(aaron): Migrate to apollo::common::TrajectoryPoint. +// Deprecated: replaced by apollo.common.TrajectoryPoint message ADCTrajectoryPoint { optional double x = 1; // in meters. optional double y = 2; // in meters. @@ -29,6 +32,16 @@ message ADCTrajectoryPoint { optional double l = 5 [deprecated = true]; } +// Deprecated: replaced by apollo.common.PathPoint +message ADCPathPoint { + optional double x = 1; // in meters + optional double y = 2; // in meters + optional double z = 3; // in meters + optional double curvature = 4; // curvature (k = 1/r), unit: (1/meters) + optional double heading = 5; // relative to absolute coordinate system +} + + message ADCSignals { enum SignalType { LEFT_TURN = 1; @@ -44,30 +57,39 @@ message ADCSignals { message EStop { // is_estop == true when emergency stop is required optional bool is_estop = 1; + optional string reason = 2; } -// TODO(aaron): Migrate to apollo::common::PathPoint. -message ADCPathPoint { - optional double x = 1; // in meters - optional double y = 2; // in meters - optional double z = 3; // in meters - optional double curvature = 4; // curvature (k = 1/r), unit: (1/meters) - optional double heading = 5; // relative to absolute coordinate system +message TaskStats { + optional string name = 1; + optional double time_ms = 2; } +message LatencyStats { + optional double total_time_ms = 1; + repeated TaskStats task_stats = 2; + optional double init_frame_time_ms = 3; +} + +// next id: 16 message ADCTrajectory { optional apollo.common.Header header = 1; optional double total_path_length = 2; // in meters optional double total_path_time = 3; // in seconds - repeated ADCTrajectoryPoint adc_trajectory_point = 4; + repeated apollo.common.TrajectoryPoint trajectory_point = 12; optional EStop estop = 6; - repeated ADCPathPoint adc_path_point = 7; + repeated apollo.common.PathPoint path_point = 13; + optional apollo.planning_internal.Debug debug = 8; // is_replan == true mean replan triggered optional bool is_replan = 9 [default = false]; // Specify trajectory gear optional apollo.canbus.Chassis.GearPosition gear = 10; - optional apollo.planning_internal.Debug debug = 8; - optional apollo.canbus.Signal signal = 11; + optional apollo.common.VehicleSignal signal = 11; + optional apollo.planning.DecisionResult decision = 14; + optional LatencyStats latency_stats = 15; - optional ADCSignals signals = 5 [deprecated = true]; + // replaced by path_point + repeated ADCPathPoint adc_path_point = 7 [deprecated=true]; + // replaced by trajectory_point + repeated ADCTrajectoryPoint adc_trajectory_point = 4 [deprecated=true]; } diff --git a/modules/planning/proto/planning_config.proto b/modules/planning/proto/planning_config.proto new file mode 100644 index 00000000000..6ec5545884e --- /dev/null +++ b/modules/planning/proto/planning_config.proto @@ -0,0 +1,42 @@ +syntax = "proto2"; + +package apollo.planning; + +import "modules/planning/proto/dp_poly_path_config.proto"; +import "modules/planning/proto/dp_st_speed_config.proto"; +import "modules/planning/proto/qp_spline_path_config.proto"; +import "modules/planning/proto/qp_spline_st_speed_config.proto"; +import "modules/planning/proto/reference_line_smoother_config.proto"; + +enum TaskType { + DP_POLY_PATH_OPTIMIZER = 0; + DP_ST_SPEED_OPTIMIZER = 1; + QP_SPLINE_PATH_OPTIMIZER = 2; + QP_SPLINE_ST_SPEED_OPTIMIZER = 3; + TRAFFIC_DECIDER = 4; + PATH_DECIDER = 5; +}; + +message RuleConfig { + optional string name = 1; +} + +message EMPlannerConfig { + repeated TaskType task = 1; + optional apollo.planning.DpPolyPathConfig dp_poly_path_config = 2; + optional apollo.planning.DpStSpeedConfig dp_st_speed_config = 3; + optional apollo.planning.QpSplinePathConfig qp_spline_path_config = 4; + optional apollo.planning.QpSplineStSpeedConfig qp_spline_st_speed_config = 5; +} + +message PlanningConfig { + enum PlannerType { + RTK = 0; + EM = 1; // expectation maximization + }; + optional PlannerType planner_type = 1 [default = EM]; + + optional EMPlannerConfig em_planner_config = 2; + optional apollo.planning.ReferenceLineSmootherConfig reference_line_smoother_config = 3; + repeated RuleConfig rule_config = 4; +} diff --git a/modules/planning/proto/planning_internal.proto b/modules/planning/proto/planning_internal.proto index 7f9a9ec343f..2e387a116b6 100644 --- a/modules/planning/proto/planning_internal.proto +++ b/modules/planning/proto/planning_internal.proto @@ -3,85 +3,84 @@ syntax = "proto2"; package apollo.planning_internal; import "modules/common/proto/header.proto"; -import "modules/decision/proto/decision.proto"; +import "modules/canbus/proto/chassis.proto"; +import "modules/common/proto/pnc_point.proto"; import "modules/localization/proto/localization.proto"; -import "modules/localization/proto/pose.proto"; -import "modules/perception/proto/perception_obstacle.proto"; -import "modules/prediction/proto/prediction_obstacle.proto"; +import "modules/routing/proto/routing.proto"; -message PlanningObstacle { - optional int32 perception_id = 1; - optional string decision_id = 2; - - optional apollo.perception.Point position = - 3; // obstacle position in the world coordinate system. - optional double theta = 4; // heading in the world coordinate system - optional apollo.perception.Point velocity = 5; // obstacle velocity. - // obstacle speed ( == sqrt(velocity.x^2 + velocity.y^2) - optional double speed = 6; - - // Size of obstacle bounding box. - optional double length = 7; // obstacle length. - optional double width = 8; // obstacle width. - optional double height = 9; // obstacle height. - - // obstacle corner points. - repeated apollo.perception.Point polygon_point = 10; - // duration of an obstacle since detection. - optional double tracking_time = 11; +message Debug { + optional PlanningData planning_data = 2; +} - // perception timestamp in ms - optional double perception_timestamp = 12; - // object type in perception - optional apollo.perception.PerceptionObstacle.Type perception_object_type = - 13; +message SpeedPlan { + optional string name = 1; + repeated apollo.common.SpeedPoint speed_point = 2; +} - optional double prediction_timestamp = 14; // prediction_timestamp in ms - // from prediction - repeated apollo.prediction.Trajectory prediction_trajectory = 15; +message StGraphBoundaryDebug { + enum StBoundaryType { + ST_BOUNDARY_TYPE_UNKNOWN = 1; + ST_BOUNDARY_TYPE_STOP = 2; + ST_BOUNDARY_TYPE_FOLLOW = 3; + ST_BOUNDARY_TYPE_YIELD = 4; + ST_BOUNDARY_TYPE_OVERTAKE = 5; + } + optional string name = 1; + repeated apollo.common.SpeedPoint point = 2; + optional StBoundaryType type = 3; +} - // object type in decision - optional apollo.decision.ObjectDecision.ObjectType decision_object_type = 16; - optional apollo.decision.ObjectDecisionType object_decision = - 17 [deprecated = true]; - repeated apollo.decision.ObjectDecisionType planning_object_decision = 18; +message SLFrameDebug { + optional string name = 1; + repeated double sampled_s = 2; + repeated double static_obstacle_lower_bound = 3; + repeated double dynamic_obstacle_lower_bound = 4; + repeated double static_obstacle_upper_bound = 5; + repeated double dynamic_obstacle_upper_bound = 6; + repeated double map_lower_bound = 7; + repeated double map_upper_bound = 8; + repeated apollo.common.SLPoint sl_path = 9; + repeated double aggregated_boundary_s = 10; + repeated double aggregated_boundary_low = 11; + repeated double aggregated_boundary_high = 12; } -message Debug { - enum ErrorCode { - OK = 0; ERR_NOT_READY = 1; ERR_ESTOP = 2; ERR_PATH_OPTIMIZER = 3; - ERR_SPEED_OPTIMIZER = 4; - ERR_ST_GRAPH = 5; - ERR_SANITY_CHECK = 6; +message STGraphDebug { + message STGraphSpeedConstraint { + repeated double t = 1; + repeated double lower_bound = 2; + repeated double upper_bound = 3; } - - /* - PLEASE add id here - id = 1: st_graph_info - */ - message DebugMessage { - optional ErrorCode error_code = 1 [default = OK]; - optional int32 id = 2; - oneof debug_string { - string trace = 3; - string info = 4; - string warn = 5; - string error = 6; - string fatal = 7; - } + message STGraphKernelCuiseRef { + repeated double t = 1; + repeated double cruise_line_s = 2; + } + message STGraphKernelFollowRef { + repeated double t = 1; + repeated double follow_line_s = 2; } - optional ErrorCode error_code = 1 [default = OK]; - optional PlanningData planning_data = 2; - repeated DebugMessage debug_message = 3; + optional string name = 1; + repeated StGraphBoundaryDebug boundary = 2; + repeated apollo.common.SpeedPoint speed_limit = 3; + repeated apollo.common.SpeedPoint speed_profile = 4; + repeated STGraphSpeedConstraint speed_constraint = 5; + optional STGraphKernelCuiseRef kernel_cruise_ref = 6; + optional STGraphKernelFollowRef kernel_follow_ref = 7; } +// next id: 17 message PlanningData { - optional apollo.common.Header header = 1; - optional apollo.localization.Pose init_status = 2; // initial status of adc - optional apollo.decision.MainDecision main_decision = 3; // from decision - // processed planning_obstacles - repeated PlanningObstacle planning_obstacle = 4; - optional apollo.decision.LightSignal light_signal = - 5; // light signal from decision + // input + optional apollo.localization.LocalizationEstimate adc_position = 7; + optional apollo.canbus.Chassis chassis = 8; + optional apollo.routing.RoutingResponse routing = 9; + optional apollo.common.TrajectoryPoint init_point = 10; + + repeated apollo.common.Path path = 6; + repeated SpeedPlan speed_plan = 13; + repeated STGraphDebug st_graph = 14; + repeated SLFrameDebug sl_frame = 15; + + optional apollo.common.Header prediction_header = 16; } diff --git a/modules/planning/proto/qp_spline_path_config.proto b/modules/planning/proto/qp_spline_path_config.proto new file mode 100644 index 00000000000..87a32eeb7b4 --- /dev/null +++ b/modules/planning/proto/qp_spline_path_config.proto @@ -0,0 +1,18 @@ +syntax = "proto2"; + +package apollo.planning; + +message QpSplinePathConfig { + optional uint32 spline_order = 1 [default = 6]; + optional uint32 number_of_knots = 2 [default = 5]; + optional uint32 number_of_fx_constraint_knots = 3 [default = 6]; + optional double time_resolution = 4 [default = 0.1]; + optional double regularization_weight = 5 [default = 0.001]; + optional double derivative_weight = 6 [default = 0.0]; + optional double second_derivative_weight = 7 [default = 0.0]; + optional double third_derivative_weight = 8 [default = 100.0]; + optional double reference_line_weight = 9 [default = 0.0]; + optional uint32 num_refline_point = 10 [default = 10]; + optional uint32 num_output = 11 [default = 100]; + optional double cross_lane_extension_buffer = 12 [default = 1.0]; +} diff --git a/modules/planning/proto/qp_spline_st_speed_config.proto b/modules/planning/proto/qp_spline_st_speed_config.proto new file mode 100644 index 00000000000..f5caf742953 --- /dev/null +++ b/modules/planning/proto/qp_spline_st_speed_config.proto @@ -0,0 +1,28 @@ +syntax = "proto2"; + +package apollo.planning; + +import "modules/planning/proto/st_boundary_config.proto"; + +message QpSplineStSpeedConfig { + optional double total_path_length = 1 [ default = 80.0 ]; + optional double total_time = 2 [ default = 8.0 ]; + optional double output_time_resolution = 3 [ default = 0.05 ]; + optional uint32 number_of_discrete_graph_s = 4 [ default = 80 ]; + optional uint32 number_of_discrete_graph_t = 5 [ default = 10 ]; + optional uint32 number_of_evaluated_graph_t = 6 [ default = 10 ]; + optional uint32 spline_order = 7 [ default = 6 ]; + optional double speed_kernel_weight = 8 [ default = 0.0 ]; + optional double accel_kernel_weight = 9 [ default = 0.0 ]; + optional double jerk_kernel_weight = 10 [ default = 1000.0 ]; + optional double follow_weight = 11 [ default = 1.0 ]; + optional double stop_weight = 12 [ default = 1.0 ]; + optional double cruise_weight = 13 [ default = 1.0 ]; + optional double max_speed = 14 [ default = 20.0 ]; + optional double preferred_max_acceleration = 15 [ default = 1.2 ]; + optional double preferred_min_deceleration = 16 [ default = -1.8 ]; + optional double max_acceleration = 17 [ default = 2.0 ]; + optional double min_deceleration = 18 [ default = -4.5 ]; + optional double follow_drag_distance = 19 [ default = 15.0 ]; + optional apollo.planning.StBoundaryConfig st_boundary_config = 20; +} diff --git a/modules/planning/proto/reference_line_smoother_config.proto b/modules/planning/proto/reference_line_smoother_config.proto new file mode 100644 index 00000000000..6e15d027cac --- /dev/null +++ b/modules/planning/proto/reference_line_smoother_config.proto @@ -0,0 +1,18 @@ +syntax = "proto2"; + +package apollo.planning; + +message ReferenceLineSmootherConfig { + optional uint32 num_spline = 1 [default = 6]; + optional uint32 spline_order = 2 [default = 6]; + optional uint32 num_evaluated_points = 3 [default = 13]; + optional double boundary_bound = 4 [default = 0.2]; + optional double derivative_bound = 5 [default = 1.0]; + optional double second_derivative_bound = 6 [default = 1.0]; + optional double third_derivative_bound = 7 [default = 1.0]; + optional double ref_line_weight = 8 [default = 0.0]; + optional double derivative_weight = 9 [default = 0.0]; + optional double second_derivative_weight = 10 [default = 0.0]; + optional double third_derivative_weight = 11 [default = 100]; + optional uint32 num_of_total_points = 12 [default = 500]; +} diff --git a/modules/planning/proto/sl_boundary.proto b/modules/planning/proto/sl_boundary.proto new file mode 100644 index 00000000000..c8d4f9947bc --- /dev/null +++ b/modules/planning/proto/sl_boundary.proto @@ -0,0 +1,27 @@ +syntax = "proto2"; + +package apollo.planning; + +///////////////////////////////////////////////////////////////// +// The start_s and end_s are longitudinal values. +// start_s <= end_s. +// +// end_s +// ^ +// | +// S direction +// | +// start_s +// +// The start_l and end_l are lateral values. +// start_l <= end_l. Left side of the reference line is positive, +// and right side of the reference line is negative. +// end_l <-----L direction---- start_l +///////////////////////////////////////////////////////////////// + +message SLBoundary { + optional double start_s = 1; + optional double end_s = 2; + optional double start_l = 3; + optional double end_l = 4; +} diff --git a/modules/planning/proto/spiral_curve_config.proto b/modules/planning/proto/spiral_curve_config.proto new file mode 100644 index 00000000000..a25768404f7 --- /dev/null +++ b/modules/planning/proto/spiral_curve_config.proto @@ -0,0 +1,9 @@ +syntax = "proto2"; + +package apollo.planning; + +message SpiralCurveConfig { + optional int32 simpson_size = 1 [default = 9]; + optional double newton_raphson_tol = 2 [default = 0.01]; + optional int32 newton_raphson_max_iter = 3 [ default = 20]; +} diff --git a/modules/planning/proto/st_boundary_config.proto b/modules/planning/proto/st_boundary_config.proto new file mode 100644 index 00000000000..8d1fa4be5c3 --- /dev/null +++ b/modules/planning/proto/st_boundary_config.proto @@ -0,0 +1,11 @@ +syntax = "proto2"; + +package apollo.planning; + +message StBoundaryConfig { + optional double boundary_buffer = 1 [ default = 0.1 ]; + optional double centric_acceleration_limit = 2 [ default = 1.0 ]; + optional double minimal_kappa = 3 [ default = 0.00001 ]; + optional double point_extension = 4 [ default = 1.0 ]; + optional double lowest_speed = 5 [ default = 2.5 ]; +} diff --git a/modules/planning/reference_line/BUILD b/modules/planning/reference_line/BUILD new file mode 100644 index 00000000000..b8c63b8fde0 --- /dev/null +++ b/modules/planning/reference_line/BUILD @@ -0,0 +1,79 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "reference_line", + srcs = [ + "reference_line.cc", + "reference_point.cc", + ], + hdrs = [ + "reference_line.h", + "reference_point.h", + ], + deps = [ + "//modules/common:log", + "//modules/common/math", + "//modules/common/proto:pnc_point_proto", + "//modules/common/util:string_util", + "//modules/map/pnc_map:path", + "//modules/planning/common:planning_gflags", + "//modules/planning/math:double", + "//modules/planning/proto:planning_proto", + ], +) + +cc_library( + name = "reference_line_smoother", + srcs = [ + "reference_line_smoother.cc", + ], + hdrs = [ + "reference_line_smoother.h", + ], + deps = [ + ":reference_line", + "//modules/common/vehicle_state", + "//modules/planning/math:curve_math", + "//modules/planning/math:polynomial_xd", + "//modules/planning/math/smoothing_spline:spline_2d", + "//modules/planning/math/smoothing_spline:spline_2d_constraint", + "//modules/planning/math/smoothing_spline:spline_2d_kernel", + "//modules/planning/math/smoothing_spline:spline_2d_solver", + "//modules/planning/proto:planning_proto", + "//modules/planning/proto:reference_line_smoother_config_proto", + "@eigen//:eigen", + ], +) + +cc_library( + name = "reference_line_provider", + srcs = [ + "reference_line_provider.cc", + ], + hdrs = [ + "reference_line_provider.h", + ], + deps = [ + "reference_line", + "reference_line_smoother", + "//modules/map/pnc_map", + ], +) + +cc_test( + name = "reference_line_smoother_test", + size = "small", + srcs = [ + "reference_line_smoother_test.cc", + ], + data = ["//modules/planning:planning_testdata"], + deps = [ + ":reference_line_smoother", + "//modules/map/hdmap", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/planning/reference_line/reference_line.cc b/modules/planning/reference_line/reference_line.cc new file mode 100644 index 00000000000..64404f20100 --- /dev/null +++ b/modules/planning/reference_line/reference_line.cc @@ -0,0 +1,352 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file reference_line.cc + **/ + +#include "modules/planning/reference_line/reference_line.h" + +#include +#include +#include +#include +#include + +#include "boost/math/tools/minima.hpp" + +#include "modules/common/log.h" +#include "modules/common/math/angle.h" +#include "modules/common/math/linear_interpolation.h" +#include "modules/common/math/vec2d.h" +#include "modules/common/util/string_util.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/math/double.h" + +namespace apollo { +namespace planning { + +using MapPath = hdmap::Path; +using apollo::common::SLPoint; + +ReferenceLine::ReferenceLine( + const std::vector& reference_points) + : reference_points_(reference_points), + map_path_(MapPath(std::vector( + reference_points.begin(), reference_points.end()))) {} + +ReferenceLine::ReferenceLine(const MapPath& hdmap_path) + : map_path_(hdmap_path) { + for (const auto& point : hdmap_path.path_points()) { + DCHECK(!point.lane_waypoints().empty()); + const auto& lane_waypoint = point.lane_waypoints()[0]; + reference_points_.emplace_back( + hdmap::MapPathPoint(point, point.heading(), lane_waypoint), 0.0, 0.0, + 0.0, 0.0); + } +} + +ReferenceLine::ReferenceLine( + const std::vector& reference_points, + const std::vector& lane_segments, + const double max_approximation_error) + : reference_points_(reference_points), + map_path_(MapPath(std::vector( + reference_points.begin(), reference_points.end()), + lane_segments, max_approximation_error)) {} + +ReferencePoint ReferenceLine::GetReferencePoint(const double s) const { + const auto& accumulated_s = map_path_.accumulated_s(); + if (s < accumulated_s.front()) { + AWARN << "The requested s is before the start point of the reference " + "line; reference line starts at " + << accumulated_s.front() << ", requested " << s << "."; + ReferencePoint ref_point(map_path_.GetSmoothPoint(s), 0.0, 0.0, 0.0, 0.0); + if (ref_point.lane_waypoints().empty()) { + ref_point.add_lane_waypoints(reference_points_.front().lane_waypoints()); + } + return ref_point; + } + if (s > accumulated_s.back()) { + AWARN << "The requested s exceeds the reference line; reference line " + "ends at " + << accumulated_s.back() << "requested " << s << " ."; + ReferencePoint ref_point(map_path_.GetSmoothPoint(s), 0.0, 0.0, 0.0, 0.0); + if (ref_point.lane_waypoints().empty()) { + ref_point.add_lane_waypoints(reference_points_.back().lane_waypoints()); + } + return ref_point; + } + + auto it_lower = + std::lower_bound(accumulated_s.begin(), accumulated_s.end(), s); + if (it_lower == accumulated_s.begin()) { + return reference_points_.front(); + } else { + auto index = std::distance(accumulated_s.begin(), it_lower); + const auto& p0 = reference_points_[index - 1]; + const auto& p1 = reference_points_[index]; + + const double s0 = accumulated_s[index - 1]; + const double s1 = accumulated_s[index]; + + return Interpolate(p0, s0, p1, s1, s); + } +} + +double ReferenceLine::FindMinDistancePoint(const ReferencePoint& p0, + const double s0, + const ReferencePoint& p1, + const double s1, const double x, + const double y) { + auto func_dist_square = [&p0, &p1, &s0, &s1, &x, &y](const double s) { + auto p = Interpolate(p0, s0, p1, s1, s); + double dx = p.x() - x; + double dy = p.y() - y; + return dx * dx + dy * dy; + }; + + return ::boost::math::tools::brent_find_minima(func_dist_square, s0, s1, 8) + .first; +} + +ReferencePoint ReferenceLine::GetReferencePoint(const double x, + const double y) const { + CHECK_GE(reference_points_.size(), 0); + + auto func_distance_square = [](const ReferencePoint& point, const double x, + const double y) { + double dx = point.x() - x; + double dy = point.y() - y; + return dx * dx + dy * dy; + }; + + double d_min = func_distance_square(reference_points_.front(), x, y); + double index_min = 0; + + for (uint32_t i = 1; i < reference_points_.size(); ++i) { + double d_temp = func_distance_square(reference_points_[i], x, y); + if (d_temp < d_min) { + d_min = d_temp; + index_min = i; + } + } + + uint32_t index_start = (index_min == 0 ? index_min : index_min - 1); + uint32_t index_end = + (index_min + 1 == reference_points_.size() ? index_min : index_min + 1); + + if (index_start == index_end) { + return reference_points_[index_start]; + } + + double s0 = map_path_.accumulated_s()[index_start]; + double s1 = map_path_.accumulated_s()[index_end]; + + double s = ReferenceLine::FindMinDistancePoint( + reference_points_[index_start], s0, reference_points_[index_end], s1, x, + y); + + return Interpolate(reference_points_[index_start], s0, + reference_points_[index_end], s1, s); +} + +bool ReferenceLine::SLToXY(const SLPoint& sl_point, + common::math::Vec2d* const xy_point) const { + CHECK_NOTNULL(xy_point); + if (map_path_.num_points() < 2) { + AERROR << "The reference line has too few points."; + return false; + } + + const auto matched_point = GetReferencePoint(sl_point.s()); + const auto angle = common::math::Angle16::from_rad(matched_point.heading()); + xy_point->set_x(matched_point.x() - common::math::sin(angle) * sl_point.l()); + xy_point->set_y(matched_point.y() + common::math::cos(angle) * sl_point.l()); + return true; +} + +bool ReferenceLine::XYToSL(const common::math::Vec2d& xy_point, + SLPoint* const sl_point) const { + DCHECK_NOTNULL(sl_point); + double s = 0; + double l = 0; + if (!map_path_.GetProjection(xy_point, &s, &l)) { + AERROR << "Can't get nearest point from path."; + return false; + } + + sl_point->set_s(s); + sl_point->set_l(l); + return true; +} + +ReferencePoint ReferenceLine::Interpolate(const ReferencePoint& p0, + const double s0, + const ReferencePoint& p1, + const double s1, const double s) { + if (std::fabs(s0 - s1) < common::math::kMathEpsilon) { + return p0; + } + DCHECK_LE(s0 - 1.0e-6, s) << " s: " << s << " is less than s0 :" << s0; + DCHECK_LE(s, s1 + 1.0e-6) << "s: " << s << "is larger than s1: " << s1; + + CHECK(!p0.lane_waypoints().empty()); + CHECK(!p1.lane_waypoints().empty()); + const double x = common::math::lerp(p0.x(), s0, p1.x(), s1, s); + const double y = common::math::lerp(p0.y(), s0, p1.y(), s1, s); + const double heading = + common::math::slerp(p0.heading(), s0, p1.heading(), s1, s); + const double kappa = common::math::lerp(p0.kappa(), s0, p1.kappa(), s1, s); + const double dkappa = common::math::lerp(p0.dkappa(), s0, p1.dkappa(), s1, s); + const auto& p0_waypoint = p0.lane_waypoints()[0]; + std::vector waypoints; + double upper_bound = 0.0; + double lower_bound = 0.0; + if ((s - s0) + p0_waypoint.s <= p0_waypoint.lane->total_length()) { + const double lane_s = p0_waypoint.s + s - s0; + waypoints.emplace_back(p0_waypoint.lane, lane_s); + p0_waypoint.lane->GetWidth(lane_s, &upper_bound, &lower_bound); + } + const auto& p1_waypoint = p1.lane_waypoints()[0]; + if (p1_waypoint.lane->id().id() != p0_waypoint.lane->id().id() && + p1_waypoint.s - (s1 - s) >= 0) { + const double lane_s = p1_waypoint.s - (s1 - s); + waypoints.emplace_back(p1_waypoint.lane, lane_s); + p1_waypoint.lane->GetWidth(lane_s, &upper_bound, &lower_bound); + } + if (waypoints.empty()) { + const double lane_s = p0_waypoint.s; + waypoints.emplace_back(p0_waypoint.lane, lane_s); + p0_waypoint.lane->GetWidth(lane_s, &upper_bound, &lower_bound); + } + return ReferencePoint(hdmap::MapPathPoint({x, y}, heading, waypoints), kappa, + dkappa, lower_bound, upper_bound); +} + +const std::vector& ReferenceLine::reference_points() const { + return reference_points_; +} + +const MapPath& ReferenceLine::map_path() const { return map_path_; } + +bool ReferenceLine::GetLaneWidth(const double s, double* const left_width, + double* const right_width) const { + return map_path_.GetWidth(s, left_width, right_width); +} + +bool ReferenceLine::IsOnRoad(const SLPoint& sl_point) const { + if (sl_point.s() <= 0 || sl_point.s() > map_path_.length()) { + return false; + } + double left_width = 0.0; + double right_width = 0.0; + + if (!GetLaneWidth(sl_point.s(), &left_width, &right_width)) { + return false; + } + + if (sl_point.l() <= -right_width || sl_point.l() >= left_width) { + return false; + } + + return true; +} + +bool ReferenceLine::GetSLBoundary(const common::math::Box2d& box, + SLBoundary* const sl_boundary) const { + double start_s(std::numeric_limits::max()); + double end_s(std::numeric_limits::lowest()); + double start_l(std::numeric_limits::max()); + double end_l(std::numeric_limits::lowest()); + std::vector corners; + box.GetAllCorners(&corners); + for (const auto& point : corners) { + SLPoint sl_point; + if (!XYToSL(point, &sl_point)) { + AERROR << "failed to get projection for point: " << point.DebugString() + << " on reference line."; + return false; + } + start_s = std::fmin(start_s, sl_point.s()); + end_s = std::fmax(end_s, sl_point.s()); + start_l = std::fmin(start_l, sl_point.l()); + end_l = std::fmax(end_l, sl_point.l()); + } + sl_boundary->set_start_s(start_s); + sl_boundary->set_end_s(end_s); + sl_boundary->set_start_l(start_l); + sl_boundary->set_end_l(end_l); + return true; +} + +bool ReferenceLine::HasOverlap(const common::math::Box2d& box) const { + SLBoundary sl_boundary; + if (!GetSLBoundary(box, &sl_boundary)) { + AERROR << "Failed to get sl boundary for box " << box.DebugString(); + return false; + } + if (sl_boundary.end_s() < 0 || sl_boundary.start_s() > Length()) { + return false; + } + if (sl_boundary.start_l() * sl_boundary.end_l() < 0) { + return false; + } + + double left_width = 0.0; + double right_width = 0.0; + const double mid_s = (sl_boundary.start_s() + sl_boundary.end_s()) / 2.0; + if (mid_s < 0 || mid_s > Length()) { + ADEBUG << "ref_s out of range:" << mid_s; + return false; + } + if (!map_path_.GetWidth(mid_s, &left_width, &right_width)) { + AERROR << "failed to get width at s = " << mid_s; + return false; + } + if (sl_boundary.start_l() > 0) { + return sl_boundary.start_l() < left_width; + } else { + return sl_boundary.end_l() > -right_width; + } +} + +std::string ReferenceLine::DebugString() const { + const auto limit = + std::min(reference_points_.size(), + static_cast(FLAGS_trajectory_point_num_for_debug)); + return apollo::common::util::StrCat( + "point num:", reference_points_.size(), + apollo::common::util::PrintDebugStringIter( + reference_points_.begin(), reference_points_.begin() + limit, "")); +} + +double ReferenceLine::GetSpeedLimitFromS(const double s) const { + const auto& map_path_point = GetReferencePoint(s); + double speed_limit = FLAGS_planning_upper_speed_limit; + for (const auto& lane_waypoint : map_path_point.lane_waypoints()) { + if (lane_waypoint.lane == nullptr) { + AWARN << "lane_waypoint.lane is nullptr"; + continue; + } + speed_limit = + std::fmin(lane_waypoint.lane->lane().speed_limit(), speed_limit); + } + return speed_limit; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/reference_line/reference_line.h b/modules/planning/reference_line/reference_line.h new file mode 100644 index 00000000000..368bc9ff847 --- /dev/null +++ b/modules/planning/reference_line/reference_line.h @@ -0,0 +1,111 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file reference_line.h + **/ + +#ifndef MODULES_PLANNING_REFERENCE_LINE_REFERENCE_LINE_H_ +#define MODULES_PLANNING_REFERENCE_LINE_REFERENCE_LINE_H_ + +#include +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/proto/sl_boundary.pb.h" + +#include "modules/common/math/vec2d.h" +#include "modules/map/pnc_map/path.h" +#include "modules/planning/reference_line/reference_point.h" + +namespace apollo { +namespace planning { + +class ReferenceLine { + public: + ReferenceLine() = default; + explicit ReferenceLine(const std::vector& reference_points); + explicit ReferenceLine(const hdmap::Path& hdmap_path); + ReferenceLine(const std::vector& reference_points, + const std::vector& lane_segments, + const double max_approximation_error); + + const hdmap::Path& map_path() const; + const std::vector& reference_points() const; + + ReferencePoint GetReferencePoint(const double s) const; + ReferencePoint GetReferencePoint(const double x, const double y) const; + + bool GetSLBoundary(const common::math::Box2d& box, + SLBoundary* const sl_boundary) const; + + bool SLToXY(const common::SLPoint& sl_point, + common::math::Vec2d* const xy_point) const; + bool XYToSL(const common::math::Vec2d& xy_point, + common::SLPoint* const sl_point) const; + + bool GetLaneWidth(const double s, double* const left_width, + double* const right_width) const; + bool IsOnRoad(const common::SLPoint& sl_point) const; + + /** + * @brief check if any part of the box has overlap with the road. + */ + bool HasOverlap(const common::math::Box2d& box) const; + + double Length() const { return map_path_.length(); } + + std::string DebugString() const; + + double GetSpeedLimitFromS(const double s) const; + + private: + /** + * @brief Linearly interpolate p0 and p1 by s0 and s1. + * The input has to satisfy condition: s0 <= s <= s1 + * p0 and p1 must have lane_waypoint. + * Note: it requires p0 and p1 are on the same lane, adjacent lanes, or + * parallel neighboring lanes. Otherwise the interpolated result may not + * valid. + * @param p0 the first anchor point for interpolation. + * @param s0 the longitutial distance (s) of p0 on current reference line. + * s0 <= s && s0 <= s1 + * @param p1 the second anchor point for interpolation + * @param s1 the longitutial distance (s) of p1 on current reference line. + * s1 + * @param s identifies the the middle point that is going to be + * interpolated. + * s >= s0 && s <= s1 + * @return The interpolated ReferencePoint. + */ + static ReferencePoint Interpolate(const ReferencePoint& p0, const double s0, + const ReferencePoint& p1, const double s1, + const double s); + + static double FindMinDistancePoint(const ReferencePoint& p0, const double s0, + const ReferencePoint& p1, const double s1, + const double x, const double y); + + private: + std::vector reference_points_; + hdmap::Path map_path_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_REFERENCE_LINE_REFERENCE_LINE_H_ diff --git a/modules/planning/reference_line/reference_line_provider.cc b/modules/planning/reference_line/reference_line_provider.cc new file mode 100644 index 00000000000..c70b6409a95 --- /dev/null +++ b/modules/planning/reference_line/reference_line_provider.cc @@ -0,0 +1,174 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file reference_line_provider.cc + * + * @brief Implementation of the class ReferenceLineProvider. + */ + +#include + +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/reference_line/reference_line_provider.h" + +/** + * @namespace apollo::planning + * @brief apollo::planning + */ +namespace apollo { +namespace planning { + +using apollo::common::VehicleState; + +ReferenceLineProvider::ReferenceLineProvider() {} + +ReferenceLineProvider::~ReferenceLineProvider() { + if (thread_ && thread_->joinable()) { + thread_->join(); + } +} + +void ReferenceLineProvider::Init( + const hdmap::PncMap *pnc_map, + const ReferenceLineSmootherConfig &smoother_config) { + pnc_map_ = pnc_map; + smoother_config_ = smoother_config; + is_initialized_ = true; +} + +bool ReferenceLineProvider::Start() { + if (!is_initialized_) { + AERROR << "ReferenceLineProvider has NOT been initiated."; + return false; + } + const auto &func = [this] { Generate(); }; + thread_.reset(new std::thread(func)); + return true; +} + +void ReferenceLineProvider::Stop() { + is_stop_ = true; + if (thread_ && thread_->joinable()) { + thread_->join(); + } +} + +void ReferenceLineProvider::UpdateRoutingResponse( + const routing::RoutingResponse &routing_response) { + std::lock_guard lock(routing_response_mutex_); + // TODO(all): check if routing needs to be updated before assigning. + routing_response_ = routing_response; + has_routing_ = true; +} + +void ReferenceLineProvider::Generate() { + while (!is_stop_) { + const auto &curr_adc_position = + common::VehicleState::instance()->pose().position(); + const auto adc_point_enu = common::util::MakePointENU( + curr_adc_position.x(), curr_adc_position.y(), curr_adc_position.z()); + if (!has_routing_) { + AERROR << "Routing is not ready."; + constexpr int32_t kRoutingNotReadySleepTime = 1000; + std::this_thread::sleep_for( + std::chrono::duration(kRoutingNotReadySleepTime)); + continue; + } + + routing::RoutingResponse routing; + { + std::lock_guard lock(routing_response_mutex_); + // TODO(all): check if routing needs to be updated before assigning. + routing = routing_response_; + } + + if (!CreateReferenceLineFromRouting(adc_point_enu, routing)) { + AERROR << "Fail to create reference line at position: " + << curr_adc_position.ShortDebugString(); + } + ADEBUG << "ReferenceLine smoothed with adc position: " + << curr_adc_position.ShortDebugString(); + + constexpr int32_t kReferenceLineProviderSleepTime = 200; + std::this_thread::sleep_for(std::chrono::duration( + kReferenceLineProviderSleepTime)); + } +} + +std::vector ReferenceLineProvider::GetReferenceLines() { + // TODO(all): implement this function using the current adc position and the + // existing reference lines. It is required that the current reference lines + // can cover thoroughly the current adc position so that planning can be make + // with a minimum planning distance of 100 meters ahead and 10 meters + // backward. + while (reference_line_groups_.empty()) { + std::this_thread::sleep_for(std::chrono::duration(20)); + } + std::lock_guard lock(reference_line_groups_mutex_); + return reference_line_groups_.back(); +} + +bool ReferenceLineProvider::CreateReferenceLineFromRouting( + const common::PointENU &position, const routing::RoutingResponse &routing) { + std::vector> route_segments; + + // additional smooth reference line length, unit: meter + const double kForwardAdditionalLength = 30; + if (!pnc_map_->GetLaneSegmentsFromRouting( + routing, position, FLAGS_look_backward_distance, + FLAGS_look_forward_distance + kForwardAdditionalLength, + &route_segments)) { + AERROR << "Failed to extract segments from routing"; + return false; + } + + ReferenceLineSmoother smoother; + smoother.Init(smoother_config_); + + std::vector reference_lines; + for (const auto &segments : route_segments) { + hdmap::Path hdmap_path; + pnc_map_->CreatePathFromLaneSegments(segments, &hdmap_path); + if (FLAGS_enable_smooth_reference_line) { + ReferenceLine reference_line; + if (!smoother.Smooth(ReferenceLine(hdmap_path), &reference_line)) { + AERROR << "Failed to smooth reference line"; + continue; + } + reference_lines.push_back(std::move(reference_line)); + } else { + reference_lines.emplace_back(hdmap_path); + } + } + + if (reference_lines.empty()) { + AERROR << "No smooth reference lines available"; + return false; + } + + std::lock_guard lock(reference_line_groups_mutex_); + reference_line_groups_.push_back(reference_lines); + const size_t kMaxStoredReferenceLineGroups = 3; + while (reference_line_groups_.size() > kMaxStoredReferenceLineGroups) { + reference_line_groups_.pop_front(); + } + + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/reference_line/reference_line_provider.h b/modules/planning/reference_line/reference_line_provider.h new file mode 100644 index 00000000000..d268045392e --- /dev/null +++ b/modules/planning/reference_line/reference_line_provider.h @@ -0,0 +1,95 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +/** + * @file reference_line_provider.h + * + * @brief Declaration of the class ReferenceLineProvider. + */ +#ifndef MODULES_PLANNING_REFERENCE_LINE_REFERENCE_LINE_PROVIDER_H_ +#define MODULES_PLANNING_REFERENCE_LINE_REFERENCE_LINE_PROVIDER_H_ + +#include +#include +#include +#include +#include + +#include "modules/common/util/util.h" +#include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/map/pnc_map/pnc_map.h" +#include "modules/planning/reference_line/reference_line.h" +#include "modules/planning/reference_line/reference_line_smoother.h" + +/** + * @namespace apollo::planning + * @brief apollo::planning + */ +namespace apollo { +namespace planning { + +/** + * @class ReferenceLineProvider + * @brief The class of ReferenceLineProvider. + * It provides smoothed reference line to planning. + */ +class ReferenceLineProvider { + public: + /** + * @brief Default destructor. + */ + ~ReferenceLineProvider(); + + void Init(const hdmap::PncMap* pnc_map_, + const ReferenceLineSmootherConfig& smoother_config); + + bool Start(); + + void Stop(); + + void UpdateRoutingResponse(const routing::RoutingResponse& routing_response); + + std::vector GetReferenceLines(); + + private: + void Generate(); + void IsValidReferenceLine(); + bool CreateReferenceLineFromRouting(const common::PointENU& position, + const routing::RoutingResponse& routing); + + private: + DECLARE_SINGLETON(ReferenceLineProvider); + + bool is_initialized_ = false; + std::unique_ptr thread_; + + const hdmap::PncMap* pnc_map_ = nullptr; + + bool has_routing_ = false; + std::mutex routing_response_mutex_; + routing::RoutingResponse routing_response_; + + ReferenceLineSmootherConfig smoother_config_; + + bool is_stop_ = false; + + std::mutex reference_line_groups_mutex_; + std::list> reference_line_groups_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_REFERENCE_LINE_REFERENCE_LINE_PROVIDER_H_ diff --git a/modules/planning/reference_line/reference_line_smoother.cc b/modules/planning/reference_line/reference_line_smoother.cc new file mode 100644 index 00000000000..cbd1cd6041d --- /dev/null +++ b/modules/planning/reference_line/reference_line_smoother.cc @@ -0,0 +1,284 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ +#include "modules/planning/reference_line/reference_line_smoother.h" + +#include +#include +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/common/log.h" +#include "modules/common/math/vec2d.h" +#include "modules/common/util/file.h" +#include "modules/planning/math/curve_math.h" +#include "modules/planning/math/double.h" + +namespace apollo { +namespace planning { + +bool ReferenceLineSmoother::Init(const std::string& config_file) { + if (!common::util::GetProtoFromFile(config_file, &smoother_config_)) { + AERROR << "failed to load config file " << config_file; + return false; + } + return true; +} + +void ReferenceLineSmoother::Init(const ReferenceLineSmootherConfig& config) { + smoother_config_ = config; +} + +void ReferenceLineSmoother::Reset() { + t_knots_.clear(); + ref_points_.clear(); + spline_solver_.reset(nullptr); +} + +bool ReferenceLineSmoother::Smooth( + const ReferenceLine& raw_reference_line, + ReferenceLine* const smoothed_reference_line) { + Reset(); + std::vector ref_points; + if (!Sampling(raw_reference_line)) { + AERROR << "Fail to sample reference line smoother points!"; + return false; + } + + spline_solver_.reset( + new Spline2dSolver(t_knots_, smoother_config_.spline_order())); + + if (!ApplyConstraint(raw_reference_line)) { + AERROR << "Add constraint for spline smoother failed"; + return false; + } + + if (!ApplyKernel()) { + AERROR << "Add kernel for spline smoother failed."; + return false; + } + + if (!Solve()) { + AERROR << "Solve spline smoother problem failed"; + } + + // mapping spline to reference line point + const double start_t = t_knots_.front(); + const double end_t = t_knots_.back(); + + const double resolution = + (end_t - start_t) / (smoother_config_.num_of_total_points() - 1); + double t = start_t; + const auto& spline = spline_solver_->spline(); + for (std::uint32_t i = 0; + i < smoother_config_.num_of_total_points() && t < end_t; + ++i, t += resolution) { + std::pair xy = spline(t); + const double heading = std::atan2(spline_solver_->spline().derivative_y(t), + spline_solver_->spline().DerivativeX(t)); + const double kappa = CurveMath::ComputeCurvature( + spline_solver_->spline().DerivativeX(t), + spline_solver_->spline().SecondDerivativeX(t), + spline_solver_->spline().derivative_y(t), + spline_solver_->spline().second_derivative_y(t)); + const double dkappa = CurveMath::ComputeCurvatureDerivative( + spline_solver_->spline().DerivativeX(t), + spline_solver_->spline().SecondDerivativeX(t), + spline_solver_->spline().ThirdDerivativeX(t), + spline_solver_->spline().derivative_y(t), + spline_solver_->spline().second_derivative_y(t), + spline_solver_->spline().third_derivative_y(t)); + + common::SLPoint ref_sl_point; + if (!raw_reference_line.XYToSL({xy.first, xy.second}, &ref_sl_point)) { + return false; + } + if (ref_sl_point.s() < 0 || + ref_sl_point.s() > raw_reference_line.Length()) { + continue; + } + + ReferencePoint rlp = raw_reference_line.GetReferencePoint(ref_sl_point.s()); + ref_points.emplace_back(ReferencePoint( + hdmap::MapPathPoint(common::math::Vec2d(xy.first, xy.second), heading, + rlp.lane_waypoints()), + kappa, dkappa, 0.0, 0.0)); + } + ReferencePoint::RemoveDuplicates(&ref_points); + if (ref_points.size() < 2) { + AERROR << "Fail to generate smoothed reference line."; + return false; + } + *smoothed_reference_line = ReferenceLine(ref_points); + return true; +} + +bool ReferenceLineSmoother::Sampling(const ReferenceLine& raw_reference_line) { + const double length = raw_reference_line.Length(); + const double resolution = length / smoother_config_.num_spline(); + double accumulated_s = 0.0; + for (std::uint32_t i = 0; i <= smoother_config_.num_spline(); + ++i, accumulated_s = std::min(accumulated_s + resolution, length)) { + ReferencePoint rlp = raw_reference_line.GetReferencePoint(accumulated_s); + common::PathPoint path_point; + path_point.set_x(rlp.x()); + path_point.set_y(rlp.y()); + path_point.set_theta(rlp.heading()); + path_point.set_s(accumulated_s); + ref_points_.push_back(std::move(path_point)); + + // use t_knots_: 0.0, 1.0, 2.0, 3.0 ... + t_knots_.push_back(i * 1.0); + } + return true; +} + +bool ReferenceLineSmoother::ApplyConstraint( + const ReferenceLine& raw_reference_line) { + const double t_length = t_knots_.back() - t_knots_.front(); + const double dt = t_length / (smoother_config_.num_evaluated_points() - 1); + std::vector evaluated_t; + double accumulated_eval_t = 0.0; + for (std::uint32_t i = 0; i < smoother_config_.num_evaluated_points(); + ++i, accumulated_eval_t += dt) { + evaluated_t.push_back(accumulated_eval_t); + } + std::vector path_points; + if (!ExtractEvaluatedPoints(raw_reference_line, evaluated_t, &path_points)) { + AERROR << "Extract evaluated points failed"; + return false; + } + + // Add x, y boundary constraint + std::vector headings; + std::vector longitidinal_bound; + std::vector lateral_bound; + std::vector xy_points; + for (std::uint32_t i = 0; i < path_points.size(); ++i) { + const double kBoundCoeff = 0.5; + headings.push_back(path_points[i].theta()); + longitidinal_bound.push_back(kBoundCoeff * + smoother_config_.boundary_bound()); + lateral_bound.push_back(smoother_config_.boundary_bound()); + xy_points.emplace_back(path_points[i].x(), path_points[i].y()); + } + + static constexpr double kFixedBoundLimit = 0.01; + if (longitidinal_bound.size() > 0) { + longitidinal_bound.front() = kFixedBoundLimit; + longitidinal_bound.back() = kFixedBoundLimit; + } + + if (lateral_bound.size() > 0) { + lateral_bound.front() = 0.0; + lateral_bound.back() = kFixedBoundLimit; + } + + CHECK_EQ(evaluated_t.size(), headings.size()); + CHECK_EQ(evaluated_t.size(), xy_points.size()); + CHECK_EQ(evaluated_t.size(), longitidinal_bound.size()); + CHECK_EQ(evaluated_t.size(), lateral_bound.size()); + + auto* spline_constraint = spline_solver_->mutable_constraint(); + if (!spline_constraint->Add2dBoundary(evaluated_t, headings, xy_points, + longitidinal_bound, lateral_bound)) { + AERROR << "Add 2d boundary constraint failed"; + return false; + } + + if (!spline_constraint->AddThirdDerivativeSmoothConstraint()) { + AERROR << "Add jointness constraint failed"; + return false; + } + + return true; +} + +bool ReferenceLineSmoother::ApplyKernel() { + Spline2dKernel* kernel = spline_solver_->mutable_kernel(); + + // add spline kernel + if (smoother_config_.derivative_weight() > 0.0) { + kernel->AddDerivativeKernelMatrix(smoother_config_.derivative_weight()); + } + + if (smoother_config_.second_derivative_weight() > 0.0) { + kernel->AddSecondOrderDerivativeMatrix( + smoother_config_.second_derivative_weight()); + } + + if (smoother_config_.third_derivative_weight() > 0.0) { + kernel->AddThirdOrderDerivativeMatrix( + smoother_config_.third_derivative_weight()); + } + + constexpr double kReferenceLineSmootherKernelWeight = 0.01; + kernel->AddRegularization(kReferenceLineSmootherKernelWeight); + return true; +} + +bool ReferenceLineSmoother::Solve() { return spline_solver_->Solve(); } + +bool ReferenceLineSmoother::ExtractEvaluatedPoints( + const ReferenceLine& raw_reference_line, const std::vector& vec_t, + std::vector* const path_points) const { + for (const auto t : vec_t) { + double s = 0.0; + if (!GetSFromParamT(t, &s)) { + AERROR << "get s from " << t << " failed"; + return false; + } + const ReferencePoint rlp = raw_reference_line.GetReferencePoint(s); + common::PathPoint path_point; + path_point.set_x(rlp.x()); + path_point.set_y(rlp.y()); + path_point.set_theta(rlp.heading()); + path_point.set_s(s); + path_points->push_back(std::move(path_point)); + } + return true; +} + +bool ReferenceLineSmoother::GetSFromParamT(const double t, + double* const s) const { + if (t_knots_.size() < 2 || Double::Compare(t, t_knots_.back(), 1e-8) > 0) { + return false; + } + std::uint32_t lower = FindIndex(t); + std::uint32_t upper = lower + 1; + double weight = 0.0; + if (Double::Compare(t_knots_[upper], t_knots_[lower], 1e-8) > 0) { + weight = (t - t_knots_[lower]) / (t_knots_[upper] - t_knots_[lower]); + } + *s = + ref_points_[lower].s() * (1.0 - weight) + ref_points_[upper].s() * weight; + return true; +} + +std::uint32_t ReferenceLineSmoother::FindIndex(const double t) const { + auto upper_bound = std::upper_bound(t_knots_.begin() + 1, t_knots_.end(), t); + return std::min(t_knots_.size() - 1, + static_cast(upper_bound - t_knots_.begin())) - + 1; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/reference_line/reference_line_smoother.h b/modules/planning/reference_line/reference_line_smoother.h new file mode 100644 index 00000000000..51f6d75e6dd --- /dev/null +++ b/modules/planning/reference_line/reference_line_smoother.h @@ -0,0 +1,75 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file reference_line_smooother.h + **/ + +#ifndef MODULES_PLANNING_REFERENCE_LINE_REFERENCE_LINE_SMOOTHER_H_ +#define MODULES_PLANNING_REFERENCE_LINE_REFERENCE_LINE_SMOOTHER_H_ + +#include +#include +#include + +#include "modules/planning/proto/planning.pb.h" +#include "modules/planning/proto/reference_line_smoother_config.pb.h" + +#include "modules/planning/math/smoothing_spline/spline_2d_solver.h" +#include "modules/planning/reference_line/reference_line.h" +#include "modules/planning/reference_line/reference_point.h" + +namespace apollo { +namespace planning { + +class ReferenceLineSmoother { + public: + ReferenceLineSmoother() = default; + bool Init(const std::string& config_file); + void Init(const ReferenceLineSmootherConfig& refline_smooth_config); + bool Smooth(const ReferenceLine& raw_reference_line, + ReferenceLine* const smoothed_reference_line); + + private: + void Reset(); + + bool Sampling(const ReferenceLine& raw_reference_line); + + bool ApplyConstraint(const ReferenceLine& raw_reference_line); + + bool ApplyKernel(); + + bool Solve(); + + bool ExtractEvaluatedPoints( + const ReferenceLine& raw_reference_line, const std::vector& vec_t, + std::vector* const path_points) const; + + bool GetSFromParamT(const double t, double* const s) const; + + std::uint32_t FindIndex(const double t) const; + + private: + ReferenceLineSmootherConfig smoother_config_; + std::vector t_knots_; + std::vector ref_points_; + std::unique_ptr spline_solver_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_REFERENCE_LINE_REFERENCE_LINE_SMOOTHER_H_ diff --git a/modules/planning/reference_line/reference_line_smoother_test.cc b/modules/planning/reference_line/reference_line_smoother_test.cc new file mode 100644 index 00000000000..fe32ab5c13b --- /dev/null +++ b/modules/planning/reference_line/reference_line_smoother_test.cc @@ -0,0 +1,78 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file reference_line_smooother_test.cpp + **/ +#include "gtest/gtest.h" + +#include "modules/common/math/vec2d.h" +#include "modules/map/hdmap/hdmap.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/planning/proto/reference_line_smoother_config.pb.h" +#include "modules/planning/reference_line/reference_line.h" +#include "modules/planning/reference_line/reference_line_smoother.h" +#include "modules/planning/reference_line/reference_point.h" + +namespace apollo { +namespace planning { + +class ReferenceLineSmootherTest : public ::testing::Test { + public: + virtual void SetUp() { + hdmap_.LoadMapFromFile(map_file); + const std::string lane_id = "1_-1"; + lane_info_ptr = hdmap_.GetLaneById(hdmap::MakeMapId(lane_id)); + if (!lane_info_ptr) { + AERROR << "failed to find lane " << lane_id << " from map " << map_file; + return; + } + ReferenceLineSmootherConfig config; + smoother_.Init(config); // use the default value in config. + + std::vector ref_points; + const auto& points = lane_info_ptr->points(); + const auto& headings = lane_info_ptr->headings(); + const auto& accumulate_s = lane_info_ptr->accumulate_s(); + for (std::size_t i = 0; i < points.size(); ++i) { + std::vector waypoint; + waypoint.emplace_back(lane_info_ptr, accumulate_s[i]); + hdmap::MapPathPoint map_path_point(points[i], headings[i], waypoint); + ref_points.emplace_back(map_path_point, 0.0, 0.0, -2.0, 2.0); + } + reference_line_.reset(new ReferenceLine(ref_points)); + vehicle_position_ = points[0]; + } + + const std::string map_file = + "modules/planning/testdata/garage_map/base_map.txt"; + + hdmap::HDMap hdmap_; + ReferenceLineSmoother smoother_; + common::math::Vec2d vehicle_position_; + std::unique_ptr reference_line_; + hdmap::LaneInfoConstPtr lane_info_ptr = nullptr; +}; + +TEST_F(ReferenceLineSmootherTest, smooth) { + ReferenceLine smoothed_reference_line; + EXPECT_FLOAT_EQ(153.87421, reference_line_->Length()); + EXPECT_TRUE(smoother_.Smooth(*reference_line_, &smoothed_reference_line)); + EXPECT_FLOAT_EQ(153.52477, smoothed_reference_line.Length()); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/reference_line/reference_point.cc b/modules/planning/reference_line/reference_point.cc new file mode 100644 index 00000000000..c81830a045c --- /dev/null +++ b/modules/planning/reference_line/reference_point.cc @@ -0,0 +1,80 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file reference_point.cc + **/ + +#include "modules/planning/reference_line/reference_point.h" + +#include +#include + +#include "modules/common/util/string_util.h" + +namespace apollo { +namespace planning { + +using apollo::common::PathPoint; +namespace { +// Minimum distance to remove duplicated points. +const double kDuplicatedPointsEpsilon = 1e-7; +} + +ReferencePoint::ReferencePoint(const MapPathPoint& map_path_point, + const double kappa, const double dkappa, + const double lower_bound, + const double upper_bound) + : hdmap::MapPathPoint(map_path_point), + kappa_(kappa), + dkappa_(dkappa), + lower_bound_(lower_bound), + upper_bound_(upper_bound) {} + +double ReferencePoint::kappa() const { return kappa_; } + +double ReferencePoint::dkappa() const { return dkappa_; } + +double ReferencePoint::lower_bound() const { return lower_bound_; } + +double ReferencePoint::upper_bound() const { return upper_bound_; } + +std::string ReferencePoint::DebugString() const { + // clang-format off + return apollo::common::util::StrCat("{x: ", std::fixed, x(), + ", " "y: ", y(), ", " "theta: ", heading(), ", " "kappa: ", + kappa(), ", " "dkappa: ", dkappa(), ", " "upper_bound: ", + upper_bound(), ", " "lower_bound: ", lower_bound(), "}"); + // clang-format on +} + +void ReferencePoint::RemoveDuplicates(std::vector* points) { + CHECK_NOTNULL(points); + int count = 0; + const double limit = kDuplicatedPointsEpsilon * kDuplicatedPointsEpsilon; + for (size_t i = 0; i < points->size(); ++i) { + if (count == 0 || + (*points)[i].DistanceSquareTo((*points)[count - 1]) > limit) { + (*points)[count++] = (*points)[i]; + } else { + (*points)[count - 1].add_lane_waypoints((*points)[i].lane_waypoints()); + } + } + points->resize(count); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/reference_line/reference_point.h b/modules/planning/reference_line/reference_point.h new file mode 100644 index 00000000000..e02c3eacff0 --- /dev/null +++ b/modules/planning/reference_line/reference_point.h @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file reference_point.h + **/ + +#ifndef MODULES_PLANNING_REFERENCE_LINE_REFERENCE_POINT_H_ +#define MODULES_PLANNING_REFERENCE_LINE_REFERENCE_POINT_H_ + +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/map/pnc_map/path.h" + +namespace apollo { +namespace planning { + +class ReferencePoint : public hdmap::MapPathPoint { + public: + ReferencePoint() = default; + + ReferencePoint(const MapPathPoint& map_path_point, const double kappa, + const double dkappa, const double lower_bound, + const double upper_bound); + + double kappa() const; + double dkappa() const; + + double lower_bound() const; + double upper_bound() const; + + std::string DebugString() const; + + static void RemoveDuplicates(std::vector* points); + + private: + double kappa_ = 0.0; + double dkappa_ = 0.0; + // boundary relative to the reference point + double lower_bound_ = 0.0; + double upper_bound_ = 0.0; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_REFERENCE_LINE_REFERENCE_POINT_H_ diff --git a/modules/planning/tasks/BUILD b/modules/planning/tasks/BUILD new file mode 100644 index 00000000000..514bd8e44d2 --- /dev/null +++ b/modules/planning/tasks/BUILD @@ -0,0 +1,63 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "task", + srcs = [ + "task.cc", + ], + hdrs = [ + "task.h", + ], + deps = [ + "//modules/common/status", + "//modules/planning/common:frame", + "//modules/planning/common:reference_line_info", + "//modules/planning/common/trajectory:discretized_trajectory", + "//modules/planning/common/trajectory:publishable_trajectory", + ], +) + +cc_library( + name = "path_optimizer", + srcs = [ + "path_optimizer.cc", + ], + hdrs = [ + "path_optimizer.h", + ], + deps = [ + ":task", + "//modules/common/status", + "//modules/planning/common:path_decision", + "//modules/planning/common:reference_line_info", + "//modules/planning/common/path:path_data", + "//modules/planning/common/speed:speed_data", + "@eigen//:eigen", + ], +) + +cc_library( + name = "speed_optimizer", + srcs = [ + "speed_optimizer.cc", + ], + hdrs = [ + "speed_optimizer.h", + ], + deps = [ + ":task", + "//modules/common/status", + "//modules/planning/common:path_decision", + "//modules/planning/common:planning_gflags", + "//modules/planning/common:reference_line_info", + "//modules/planning/common:speed_limit", + "//modules/planning/common/path:path_data", + "//modules/planning/common/speed:speed_data", + "//modules/planning/common/speed:st_boundary", + "@eigen//:eigen", + ], +) + +cpplint() diff --git a/modules/planning/tasks/dp_poly_path/BUILD b/modules/planning/tasks/dp_poly_path/BUILD new file mode 100644 index 00000000000..fad1792c0d5 --- /dev/null +++ b/modules/planning/tasks/dp_poly_path/BUILD @@ -0,0 +1,48 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "dp_poly_path", + srcs = [ + "dp_road_graph.cc", + "trajectory_cost.cc", + ], + hdrs = [ + "dp_road_graph.h", + "trajectory_cost.h", + ], + deps = [ + "//modules/common/configs:vehicle_config_helper", + "//modules/common/math", + "//modules/common/status", + "//modules/map/proto:map_proto", + "//modules/planning/common:frame", + "//modules/planning/common:obstacle", + "//modules/planning/common:path_decision", + "//modules/planning/common:planning_gflags", + "//modules/planning/common/path:path_data", + "//modules/planning/common/speed:speed_data", + "//modules/planning/math/curve1d:polynomial_curve1d", + "//modules/planning/math/curve1d:quintic_polynomial_curve1d", + "//modules/planning/proto:dp_poly_path_config_proto", + "//modules/planning/reference_line", + "@eigen//:eigen", + ], +) + +cc_library( + name = "dp_poly_path_optimizer", + srcs = [ + "dp_poly_path_optimizer.cc", + ], + hdrs = [ + "dp_poly_path_optimizer.h", + ], + deps = [ + ":dp_poly_path", + "//modules/planning/tasks:path_optimizer", + ], +) + +cpplint() diff --git a/modules/planning/tasks/dp_poly_path/dp_poly_path_optimizer.cc b/modules/planning/tasks/dp_poly_path/dp_poly_path_optimizer.cc new file mode 100644 index 00000000000..480822701cf --- /dev/null +++ b/modules/planning/tasks/dp_poly_path/dp_poly_path_optimizer.cc @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include "modules/planning/tasks/dp_poly_path/dp_poly_path_optimizer.h" + +#include +#include +#include + +#include "modules/common/util/file.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/tasks/dp_poly_path/dp_road_graph.h" + +namespace apollo { +namespace planning { + +using apollo::common::ErrorCode; +using apollo::common::Status; + +DpPolyPathOptimizer::DpPolyPathOptimizer() + : PathOptimizer("DpPolyPathOptimizer") {} + +bool DpPolyPathOptimizer::Init(const PlanningConfig &config) { + config_ = config.em_planner_config().dp_poly_path_config(); + is_init_ = true; + return true; +} + +Status DpPolyPathOptimizer::Process(const SpeedData &speed_data, + const ReferenceLine &reference_line, + const common::TrajectoryPoint &init_point, + PathData *const path_data) { + if (!is_init_) { + AERROR << "Please call Init() before Process()."; + return Status(ErrorCode::PLANNING_ERROR, "Not inited."); + } + CHECK_NOTNULL(path_data); + DPRoadGraph dp_road_graph(config_, reference_line, speed_data); + if (!dp_road_graph.FindPathTunnel( + init_point, + reference_line_info_->path_decision()->path_obstacles().Items(), + path_data)) { + AERROR << "Failed to find tunnel in road graph"; + return Status(ErrorCode::PLANNING_ERROR, "dp_road_graph path generation"); + } + + return Status::OK(); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/dp_poly_path/dp_poly_path_optimizer.h b/modules/planning/tasks/dp_poly_path/dp_poly_path_optimizer.h new file mode 100644 index 00000000000..2ec8fc0eb3a --- /dev/null +++ b/modules/planning/tasks/dp_poly_path/dp_poly_path_optimizer.h @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file dp_poly_path_optimizer.h + **/ + +#ifndef MODULES_PLANNING_TASKS_DP_POLY_PATH_OPTIMIZER_H_ +#define MODULES_PLANNING_TASKS_DP_POLY_PATH_OPTIMIZER_H_ + +#include + +#include "modules/planning/proto/dp_poly_path_config.pb.h" + +#include "modules/planning/proto/planning_config.pb.h" +#include "modules/planning/tasks/path_optimizer.h" + +namespace apollo { +namespace planning { + +class DpPolyPathOptimizer : public PathOptimizer { + public: + DpPolyPathOptimizer(); + + bool Init(const PlanningConfig &config) override; + + private: + apollo::common::Status Process(const SpeedData &speed_data, + const ReferenceLine &reference_line, + const common::TrajectoryPoint &init_point, + PathData *const path_data) override; + + private: + DpPolyPathConfig config_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_DP_POLY_PATH_OPTIMIZER_H_ diff --git a/modules/planning/tasks/dp_poly_path/dp_road_graph.cc b/modules/planning/tasks/dp_poly_path/dp_road_graph.cc new file mode 100644 index 00000000000..a426c1290d4 --- /dev/null +++ b/modules/planning/tasks/dp_poly_path/dp_road_graph.cc @@ -0,0 +1,207 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file dp_road_graph.h + **/ + +#include "modules/planning/tasks/dp_poly_path/dp_road_graph.h" + +#include +#include +#include +#include +#include + +#include "modules/common/proto/error_code.pb.h" +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/log.h" +#include "modules/common/util/util.h" +#include "modules/planning/common/path/frenet_frame_path.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/math/curve1d/quintic_polynomial_curve1d.h" +#include "modules/planning/math/double.h" +#include "modules/planning/tasks/dp_poly_path/trajectory_cost.h" + +namespace apollo { +namespace planning { + +using apollo::common::ErrorCode; +using apollo::common::Status; + +DPRoadGraph::DPRoadGraph(const DpPolyPathConfig &config, + const ReferenceLine &reference_line, + const SpeedData &speed_data) + : config_(config), + reference_line_(reference_line), + speed_data_(speed_data) {} + +bool DPRoadGraph::FindPathTunnel( + const common::TrajectoryPoint &init_point, + const std::vector &obstacles, + PathData *const path_data) { + CHECK_NOTNULL(path_data); + init_point_ = init_point; + if (!reference_line_.XYToSL( + {init_point_.path_point().x(), init_point_.path_point().y()}, + &init_sl_point_)) { + AERROR << "Fail to create init_sl_point from : " + << init_point.DebugString(); + return false; + } + std::vector min_cost_path; + if (!GenerateMinCostPath(obstacles, &min_cost_path)) { + AERROR << "Fail to generate graph!"; + return false; + } + std::vector frenet_path; + double accumulated_s = init_sl_point_.s(); + const double path_resolution = config_.path_resolution(); + + for (std::size_t i = 1; i < min_cost_path.size(); ++i) { + const auto &prev_node = min_cost_path[i - 1]; + const auto &cur_node = min_cost_path[i]; + + const double path_length = cur_node.sl_point.s() - prev_node.sl_point.s(); + double current_s = 0.0; + const auto &curve = cur_node.min_cost_curve; + while (Double::Compare(current_s, path_length) < 0.0) { + const double l = curve.Evaluate(0, current_s); + const double dl = curve.Evaluate(1, current_s); + const double ddl = curve.Evaluate(2, current_s); + common::FrenetFramePoint frenet_frame_point; + frenet_frame_point.set_s(accumulated_s + current_s); + frenet_frame_point.set_l(l); + frenet_frame_point.set_dl(dl); + frenet_frame_point.set_ddl(ddl); + frenet_path.push_back(std::move(frenet_frame_point)); + current_s += path_resolution; + } + accumulated_s += path_length; + } + FrenetFramePath tunnel(frenet_path); + path_data->SetReferenceLine(&reference_line_); + path_data->SetFrenetPath(tunnel); + return true; +} + +bool DPRoadGraph::GenerateMinCostPath( + const std::vector &obstacles, + std::vector *min_cost_path) { + CHECK(min_cost_path != nullptr); + + std::vector> path_waypoints; + if (!SamplePathWaypoints(init_point_, &path_waypoints)) { + AERROR << "Fail to sample path waypoints!"; + return false; + } + path_waypoints.insert(path_waypoints.begin(), + std::vector{init_sl_point_}); + + const auto &vehicle_config = + common::VehicleConfigHelper::instance()->GetConfig(); + + TrajectoryCost trajectory_cost(config_, reference_line_, obstacles, + vehicle_config.vehicle_param(), speed_data_); + + std::vector> graph_nodes(path_waypoints.size()); + graph_nodes[0].emplace_back(init_sl_point_, nullptr, 0.0); + + for (std::size_t level = 1; level < path_waypoints.size(); ++level) { + const auto &prev_dp_nodes = graph_nodes[level - 1]; + const auto &level_points = path_waypoints[level]; + for (const auto &cur_point : level_points) { + graph_nodes[level].emplace_back(cur_point, nullptr); + auto &cur_node = graph_nodes[level].back(); + for (const auto &prev_dp_node : prev_dp_nodes) { + const auto &prev_sl_point = prev_dp_node.sl_point; + QuinticPolynomialCurve1d curve(prev_sl_point.l(), 0.0, 0.0, + cur_point.l(), 0.0, 0.0, + cur_point.s() - prev_sl_point.s()); + const double cost = + trajectory_cost.Calculate(curve, prev_sl_point.s(), cur_point.s()) + + prev_dp_node.min_cost; + cur_node.UpdateCost(&prev_dp_node, curve, cost); + } + } + } + + // find best path + DPRoadGraphNode fake_head; + for (const auto &cur_dp_node : graph_nodes.back()) { + fake_head.UpdateCost(&cur_dp_node, cur_dp_node.min_cost_curve, + cur_dp_node.min_cost); + } + + const auto *min_cost_node = &fake_head; + while (min_cost_node->min_cost_prev_node) { + min_cost_node = min_cost_node->min_cost_prev_node; + min_cost_path->push_back(*min_cost_node); + } + std::reverse(min_cost_path->begin(), min_cost_path->end()); + return true; +} + +bool DPRoadGraph::SamplePathWaypoints( + const common::TrajectoryPoint &init_point, + std::vector> *const points) { + CHECK(points != nullptr); + + common::math::Vec2d init_cartesian_point(init_point.path_point().x(), + init_point.path_point().y()); + common::SLPoint init_sl_point; + if (!reference_line_.XYToSL(init_cartesian_point, &init_sl_point)) { + AERROR << "Failed to get sl point from point " + << init_cartesian_point.DebugString(); + return false; + } + + const double reference_line_length = + reference_line_.map_path().accumulated_s().back(); + + double level_distance = + std::fmax(config_.step_length_min(), + std::fmin(init_point.v(), config_.step_length_max())); + + double accumulated_s = init_sl_point.s(); + for (std::size_t i = 0; + i < config_.sample_level() && accumulated_s < reference_line_length; + ++i) { + std::vector level_points; + accumulated_s += level_distance; + double s = std::fmin(accumulated_s, reference_line_length); + + int32_t num = + static_cast(config_.sample_points_num_each_level() / 2); + + for (int32_t j = -num; j < num + 1; ++j) { + double l = config_.lateral_sample_offset() * j; + auto sl = common::util::MakeSLPoint(s, l); + if (reference_line_.IsOnRoad(sl)) { + level_points.push_back(sl); + } + } + if (!level_points.empty()) { + points->push_back(level_points); + } + } + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/dp_poly_path/dp_road_graph.h b/modules/planning/tasks/dp_poly_path/dp_road_graph.h new file mode 100644 index 00000000000..d2c9f581869 --- /dev/null +++ b/modules/planning/tasks/dp_poly_path/dp_road_graph.h @@ -0,0 +1,106 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file dp_road_graph.h + **/ + +#ifndef MODULES_PLANNING_TASKS_DP_POLY_PATH_DP_ROAD_GRAPH_H_ +#define MODULES_PLANNING_TASKS_DP_POLY_PATH_DP_ROAD_GRAPH_H_ + +#include +#include +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/common/status/status.h" +#include "modules/planning/common/path/path_data.h" +#include "modules/planning/common/path_decision.h" +#include "modules/planning/common/path_obstacle.h" +#include "modules/planning/common/speed/speed_data.h" +#include "modules/planning/common/trajectory/discretized_trajectory.h" +#include "modules/planning/math/curve1d/quintic_polynomial_curve1d.h" +#include "modules/planning/proto/dp_poly_path_config.pb.h" +#include "modules/planning/reference_line/reference_line.h" +#include "modules/planning/reference_line/reference_point.h" + +namespace apollo { +namespace planning { + +class DPRoadGraph { + public: + explicit DPRoadGraph(const DpPolyPathConfig &config, + const ReferenceLine &reference_line, + const SpeedData &speed_data); + + ~DPRoadGraph() = default; + + bool FindPathTunnel(const common::TrajectoryPoint &init_point, + const std::vector &obstacles, + PathData *const path_data); + + private: + /** + * an private inner struct for the dp algorithm + */ + struct DPRoadGraphNode { + public: + DPRoadGraphNode() = default; + + DPRoadGraphNode(const common::SLPoint point_sl, + const DPRoadGraphNode *node_prev) + : sl_point(point_sl), min_cost_prev_node(node_prev) {} + + DPRoadGraphNode(const common::SLPoint point_sl, + const DPRoadGraphNode *node_prev, const double cost) + : sl_point(point_sl), min_cost_prev_node(node_prev), min_cost(cost) {} + + void UpdateCost(const DPRoadGraphNode *node_prev, + const QuinticPolynomialCurve1d &curve, const double cost) { + if (cost < min_cost) { + min_cost = cost; + min_cost_prev_node = node_prev; + min_cost_curve = curve; + } + } + + common::SLPoint sl_point; + const DPRoadGraphNode *min_cost_prev_node = nullptr; + double min_cost = std::numeric_limits::infinity(); + QuinticPolynomialCurve1d min_cost_curve; + }; + + bool GenerateMinCostPath(const std::vector &obstacles, + std::vector *min_cost_path); + + bool SamplePathWaypoints( + const common::TrajectoryPoint &init_point, + std::vector> *const points); + + private: + DpPolyPathConfig config_; + common::TrajectoryPoint init_point_; + const ReferenceLine &reference_line_; + SpeedData speed_data_; + common::SLPoint init_sl_point_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_DP_POLY_PATH_DP_ROAD_GRAPH_H_ diff --git a/modules/planning/tasks/dp_poly_path/trajectory_cost.cc b/modules/planning/tasks/dp_poly_path/trajectory_cost.cc new file mode 100644 index 00000000000..a91f642233f --- /dev/null +++ b/modules/planning/tasks/dp_poly_path/trajectory_cost.cc @@ -0,0 +1,156 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include "modules/planning/tasks/dp_poly_path/trajectory_cost.h" + +#include +#include + +#include "modules/common/math/vec2d.h" +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/common/planning_gflags.h" + +namespace apollo { +namespace planning { + +using apollo::common::math::Box2d; +using apollo::common::math::Vec2d; +using apollo::common::TrajectoryPoint; + +TrajectoryCost::TrajectoryCost( + const DpPolyPathConfig &config, const ReferenceLine &reference_line, + const std::vector &obstacles, + const common::VehicleParam &vehicle_param, + const SpeedData &heuristic_speed_data) + : config_(config), + reference_line_(&reference_line), + vehicle_param_(vehicle_param), + heuristic_speed_data_(heuristic_speed_data) { + const double total_time = + std::min(heuristic_speed_data_.TotalTime(), FLAGS_prediction_total_time); + + num_of_time_stamps_ = static_cast( + std::floor(total_time / config.eval_time_interval())); + + for (const auto ptr_path_obstacle : obstacles) { + if (ptr_path_obstacle->IsIgnore()) { + continue; + } + const auto ptr_obstacle = ptr_path_obstacle->obstacle(); + if (ptr_obstacle->PerceptionId() < 0) { + // Virtual obsatcle + continue; + } + std::vector box_by_time; + for (uint32_t t = 0; t <= num_of_time_stamps_; ++t) { + TrajectoryPoint trajectory_point = + ptr_obstacle->GetPointAtTime(t * config.eval_time_interval()); + Box2d obstacle_box = ptr_obstacle->GetBoundingBox(trajectory_point); + box_by_time.push_back(obstacle_box); + } + obstacle_boxes_.push_back(box_by_time); + } +} + +double TrajectoryCost::Calculate(const QuinticPolynomialCurve1d &curve, + const double start_s, + const double end_s) const { + double total_cost = 0.0; + // Path_cost + double path_s = 0.0; + while (path_s < (end_s - start_s)) { + const double l = std::fabs(curve.Evaluate(0, path_s)); + total_cost += l; + + const double dl = std::fabs(curve.Evaluate(1, path_s)); + total_cost += dl; + + path_s += config_.path_resolution(); + } + + // Obstacle cost + uint32_t start_index = 0; + bool is_found_start_index = false; + uint32_t end_index = 0; + uint32_t index = 0; + double time_stamp = 0.0; + while (end_index != 0) { + common::SpeedPoint speed_point; + heuristic_speed_data_.EvaluateByTime(time_stamp, &speed_point); + if (speed_point.s() >= start_s && !is_found_start_index) { + start_index = index; + is_found_start_index = true; + } + if (speed_point.s() > end_s) { + end_index = index; + } + time_stamp += config_.eval_time_interval(); + ++index; + } + + for (; start_index < end_index; ++start_index) { + common::SpeedPoint speed_point; + heuristic_speed_data_.EvaluateByTime( + start_index * config_.eval_time_interval(), &speed_point); + const double s = speed_point.s() - start_s; + const double l = curve.Evaluate(0, s); + const double dl = curve.Evaluate(1, s); + Vec2d ego_xy_point; + common::SLPoint sl; + sl.set_s(speed_point.s()); + sl.set_l(l); + reference_line_->SLToXY(sl, &ego_xy_point); + ReferencePoint reference_point = + reference_line_->GetReferencePoint(speed_point.s()); + + double one_minus_kappa_r_d = 1 - reference_point.kappa() * l; + double delta_theta = std::atan2(dl, one_minus_kappa_r_d); + double theta = + common::math::NormalizeAngle(delta_theta + reference_point.heading()); + Box2d ego_box = {ego_xy_point, theta, vehicle_param_.length(), + vehicle_param_.width()}; + for (const auto &obstacle_trajectory : obstacle_boxes_) { + auto &obstacle_box = obstacle_trajectory[start_index]; + // Simple version: calculate obstacle cost by distance + double distance = obstacle_box.DistanceTo(ego_box); + if (distance > config_.obstacle_ignore_distance()) { + continue; + } else if (distance <= config_.obstacle_collision_distance()) { + total_cost += config_.obstacle_collision_cost(); + } else if (distance <= config_.obstacle_risk_distance()) { + total_cost += RiskDistanceCost(distance); + } else { + total_cost += RegularDistanceCost(distance); + } + } + } + return total_cost; +} + +double TrajectoryCost::RiskDistanceCost(const double distance) const { + return (5.0 - distance) * ((5.0 - distance)) * 10; +} + +double TrajectoryCost::RegularDistanceCost(const double distance) const { + return std::max(20.0 - distance, 0.0); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/dp_poly_path/trajectory_cost.h b/modules/planning/tasks/dp_poly_path/trajectory_cost.h new file mode 100644 index 00000000000..6ff45a19136 --- /dev/null +++ b/modules/planning/tasks/dp_poly_path/trajectory_cost.h @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file trjactory_cost.h + **/ + +#ifndef MODULES_PLANNING_TASKS_DP_POLY_PATH_TRAJECTORY_COST_H_ +#define MODULES_PLANNING_TASKS_DP_POLY_PATH_TRAJECTORY_COST_H_ + +#include + +#include "modules/common/configs/proto/vehicle_config.pb.h" +#include "modules/planning/proto/dp_poly_path_config.pb.h" + +#include "modules/common/math/box2d.h" +#include "modules/planning/common/obstacle.h" +#include "modules/planning/common/path_decision.h" +#include "modules/planning/common/speed/speed_data.h" +#include "modules/planning/math/curve1d/quintic_polynomial_curve1d.h" +#include "modules/planning/reference_line/reference_line.h" + +namespace apollo { +namespace planning { + +class TrajectoryCost { + public: + explicit TrajectoryCost(const DpPolyPathConfig &config, + const ReferenceLine &reference_line, + const std::vector &obstacles, + const common::VehicleParam &vehicle_param, + const SpeedData &heuristic_speed_data); + double Calculate(const QuinticPolynomialCurve1d &curve, const double start_s, + const double end_s) const; + double RiskDistanceCost(const double distance) const; + double RegularDistanceCost(const double distance) const; + + private: + const DpPolyPathConfig config_; + const ReferenceLine *reference_line_ = nullptr; + const common::VehicleParam vehicle_param_; + SpeedData heuristic_speed_data_; + uint32_t num_of_time_stamps_ = 0; + std::vector> obstacle_boxes_; + std::vector obstacle_probabilities_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_DP_POLY_PATH_TRAJECTORY_COST_H_ diff --git a/modules/planning/tasks/dp_st_speed/BUILD b/modules/planning/tasks/dp_st_speed/BUILD new file mode 100644 index 00000000000..56f53106e05 --- /dev/null +++ b/modules/planning/tasks/dp_st_speed/BUILD @@ -0,0 +1,81 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "st_graph_point", + srcs = [ + "st_graph_point.cc", + ], + hdrs = [ + "st_graph_point.h", + ], + deps = [ + "//modules/planning/common:planning_gflags", + "//modules/planning/common/speed:st_point", + ], +) + +cc_library( + name = "dp_st_cost", + srcs = [ + "dp_st_cost.cc", + ], + hdrs = [ + "dp_st_cost.h", + ], + deps = [ + "//modules/common/proto:pnc_point_proto", + "//modules/planning/common:frame", + "//modules/planning/common/speed:st_boundary", + "//modules/planning/math:double", + "//modules/planning/proto:dp_st_speed_config_proto", + ], +) + +cc_library( + name = "dp_st_graph", + srcs = [ + "dp_st_graph.cc", + ], + hdrs = [ + "dp_st_graph.h", + ], + deps = [ + ":dp_st_cost", + ":st_graph_point", + "//modules/common/configs/proto:vehicle_config_proto", + "//modules/common/proto:common_proto", + "//modules/common/proto:pnc_point_proto", + "//modules/common/status", + "//modules/planning/common:path_decision", + "//modules/planning/common/speed:speed_data", + "//modules/planning/proto:planning_proto", + "//modules/planning/tasks/st_graph:st_graph_data", + ], +) + +cc_library( + name = "dp_st_speed_optimizer", + srcs = [ + "dp_st_speed_optimizer.cc", + ], + hdrs = [ + "dp_st_speed_optimizer.h", + ], + deps = [ + ":dp_st_cost", + ":dp_st_graph", + "//modules/common/adapters:adapter_manager", + "//modules/common/configs:vehicle_config_helper", + "//modules/common/vehicle_state", + "//modules/localization/proto:localization_proto", + "//modules/planning/proto:dp_st_speed_config_proto", + "//modules/planning/proto:planning_proto", + "//modules/planning/tasks:speed_optimizer", + "//modules/planning/tasks/st_graph:st_boundary_mapper", + "//modules/planning/tasks/st_graph:st_graph_data", + ], +) + +cpplint() diff --git a/modules/planning/tasks/dp_st_speed/dp_st_cost.cc b/modules/planning/tasks/dp_st_speed/dp_st_cost.cc new file mode 100644 index 00000000000..d86ad3d4b77 --- /dev/null +++ b/modules/planning/tasks/dp_st_speed/dp_st_cost.cc @@ -0,0 +1,162 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file dp_st_cost.cc + **/ + +#include "modules/planning/tasks/dp_st_speed/dp_st_cost.h" + +#include + +#include "modules/planning/common/speed/st_point.h" +#include "modules/planning/math/double.h" + +namespace apollo { +namespace planning { + +DpStCost::DpStCost(const DpStSpeedConfig& dp_st_speed_config) + : dp_st_speed_config_(dp_st_speed_config), + unit_s_(dp_st_speed_config_.total_path_length() / + dp_st_speed_config_.matrix_dimension_s()), + unit_t_(dp_st_speed_config_.total_time() / + dp_st_speed_config_.matrix_dimension_t()) {} + +// TODO(all): normalize cost with time +double DpStCost::GetObstacleCost( + const STPoint& point, const std::vector& st_boundaries) const { + double total_cost = 0.0; + for (const StBoundary& boundary : st_boundaries) { + if (point.s() < 0 || boundary.IsPointInBoundary(point)) { + total_cost = std::numeric_limits::infinity(); + break; + } else { + const double distance = boundary.DistanceS(point); + total_cost += dp_st_speed_config_.default_obstacle_cost() * + std::exp(dp_st_speed_config_.obstacle_cost_factor() / + boundary.characteristic_length() * distance); + } + } + return total_cost * unit_t_; +} + +double DpStCost::GetReferenceCost(const STPoint& point, + const STPoint& reference_point) const { + return dp_st_speed_config_.reference_weight() * + (point.s() - reference_point.s()) * (point.s() - reference_point.s()) * + unit_t_; +} + +double DpStCost::GetSpeedCost(const STPoint& first, const STPoint& second, + const double speed_limit) const { + double cost = 0.0; + const double speed = (second.s() - first.s()) / unit_t_; + if (Double::Compare(speed, 0.0) < 0) { + return std::numeric_limits::infinity(); + } + double det_speed = (speed - speed_limit) / speed_limit; + if (Double::Compare(det_speed, 0.0) > 0) { + cost = dp_st_speed_config_.exceed_speed_penalty() * + dp_st_speed_config_.default_speed_cost() * fabs(speed * speed) * + unit_t_; + } else if (Double::Compare(det_speed, 0.0) < 0) { + cost = dp_st_speed_config_.low_speed_penalty() * + dp_st_speed_config_.default_speed_cost() * -det_speed * unit_t_; + } else { + cost = 0.0; + } + return cost; +} + +double DpStCost::GetAccelCost(const double accel) const { + const double accel_sq = accel * accel; + double max_acc = dp_st_speed_config_.max_acceleration(); + double max_dec = dp_st_speed_config_.max_deceleration(); + double accel_penalty = dp_st_speed_config_.accel_penalty(); + double decel_penalty = dp_st_speed_config_.decel_penalty(); + double cost = 0.0; + if (accel > 0.0) { + cost = accel_penalty * accel_sq; + } else { + cost = decel_penalty * accel_sq; + } + cost += accel_sq * decel_penalty * decel_penalty / + (1 + std::exp(1.0 * (accel - max_dec))) + + accel_sq * accel_penalty * accel_penalty / + (1 + std::exp(-1.0 * (accel - max_acc))); + return cost * unit_t_; +} + +double DpStCost::GetAccelCostByThreePoints(const STPoint& first, + const STPoint& second, + const STPoint& third) const { + double accel = (first.s() + third.s() - 2 * second.s()) / (unit_t_ * unit_t_); + return GetAccelCost(accel); +} + +double DpStCost::GetAccelCostByTwoPoints(const double pre_speed, + const STPoint& pre_point, + const STPoint& curr_point) const { + double current_speed = (curr_point.s() - pre_point.s()) / unit_t_; + double accel = (current_speed - pre_speed) / unit_t_; + return GetAccelCost(accel); +} + +double DpStCost::JerkCost(const double jerk) const { + double jerk_sq = jerk * jerk; + double cost = 0.0; + const auto diff = Double::Compare(jerk, 0.0); + if (diff > 0) { + cost = dp_st_speed_config_.positive_jerk_coeff() * jerk_sq * unit_t_; + } else if (diff < 0) { + cost = dp_st_speed_config_.negative_jerk_coeff() * jerk_sq * unit_t_; + } + return cost; +} + +double DpStCost::GetJerkCostByFourPoints(const STPoint& first, + const STPoint& second, + const STPoint& third, + const STPoint& fourth) const { + double jerk = (fourth.s() - 3 * third.s() + 3 * second.s() - first.s()) / + (unit_t_ * unit_t_ * unit_t_); + return JerkCost(jerk); +} + +double DpStCost::GetJerkCostByTwoPoints(const double pre_speed, + const double pre_acc, + const STPoint& pre_point, + const STPoint& curr_point) const { + const double curr_speed = (curr_point.s() - pre_point.s()) / unit_t_; + const double curr_accel = (curr_speed - pre_speed) / unit_t_; + const double jerk = (curr_accel - pre_acc) / unit_t_; + return JerkCost(jerk); +} + +double DpStCost::GetJerkCostByThreePoints(const double first_speed, + const STPoint& first, + const STPoint& second, + const STPoint& third) const { + const double pre_speed = (second.s() - first.s()) / unit_t_; + const double pre_acc = (pre_speed - first_speed) / unit_t_; + const double curr_speed = (third.s() - second.s()) / unit_t_; + const double curr_acc = (curr_speed - pre_speed) / unit_t_; + const double jerk = (curr_acc - pre_acc) / unit_t_; + return JerkCost(jerk); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/dp_st_speed/dp_st_cost.h b/modules/planning/tasks/dp_st_speed/dp_st_cost.h new file mode 100644 index 00000000000..bb8ff7d6a9e --- /dev/null +++ b/modules/planning/tasks/dp_st_speed/dp_st_cost.h @@ -0,0 +1,77 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file dp_st_cost.h + **/ + +#ifndef MODULES_PLANNING_TASKS_DP_ST_SPEED_DP_ST_COST_H_ +#define MODULES_PLANNING_TASKS_DP_ST_SPEED_DP_ST_COST_H_ + +#include + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/proto/dp_st_speed_config.pb.h" + +#include "modules/planning/common/speed/st_boundary.h" +#include "modules/planning/common/speed/st_point.h" + +namespace apollo { +namespace planning { + +class DpStCost { + public: + explicit DpStCost(const DpStSpeedConfig& dp_st_speed_config); + + double GetObstacleCost(const STPoint& point, + const std::vector& st_boundaries) const; + + double GetReferenceCost(const STPoint& point, + const STPoint& reference_point) const; + + double GetSpeedCost(const STPoint& first, const STPoint& second, + const double speed_limit) const; + + double GetAccelCostByTwoPoints(const double pre_speed, const STPoint& first, + const STPoint& second) const; + double GetAccelCostByThreePoints(const STPoint& first, const STPoint& second, + const STPoint& third) const; + + double GetJerkCostByTwoPoints(const double pre_speed, const double pre_acc, + const STPoint& pre_point, + const STPoint& curr_point) const; + double GetJerkCostByThreePoints(const double first_speed, + const STPoint& first_point, + const STPoint& second_point, + const STPoint& third_point) const; + + double GetJerkCostByFourPoints(const STPoint& first, const STPoint& second, + const STPoint& third, + const STPoint& fourth) const; + + private: + double GetAccelCost(const double accel) const; + double JerkCost(const double jerk) const; + + const DpStSpeedConfig& dp_st_speed_config_; + double unit_s_ = 0.0; + double unit_t_ = 0.0; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_DP_ST_SPEED_DP_ST_COST_H_ diff --git a/modules/planning/tasks/dp_st_speed/dp_st_graph.cc b/modules/planning/tasks/dp_st_speed/dp_st_graph.cc new file mode 100644 index 00000000000..94ab8b6841a --- /dev/null +++ b/modules/planning/tasks/dp_st_speed/dp_st_graph.cc @@ -0,0 +1,620 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file dp_st_graph.cc + **/ + +#include "modules/planning/tasks/dp_st_speed/dp_st_graph.h" + +#include +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/log.h" +#include "modules/common/math/vec2d.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/math/double.h" + +namespace apollo { +namespace planning { + +using apollo::common::ErrorCode; +using apollo::common::SpeedPoint; +using apollo::common::Status; +using apollo::common::math::Vec2d; +using apollo::common::VehicleConfigHelper; +using apollo::common::VehicleParam; + +namespace { + +bool CheckOverlapOnDpStGraph(const std::vector& boundaries, + const StGraphPoint& p1, const StGraphPoint& p2) { + for (const auto& boundary : boundaries) { + common::math::LineSegment2d seg(p1.point(), p2.point()); + if (boundary.HasOverlap(seg)) { + return true; + } + } + return false; +} +} // namespace + +DpStGraph::DpStGraph(const ReferenceLine& reference_line, + const StGraphData& st_graph_data, + const DpStSpeedConfig& dp_config, + const PathData& path_data, + const SLBoundary& adc_sl_boundary) + : reference_line_(reference_line), + dp_st_speed_config_(dp_config), + st_graph_data_(st_graph_data), + path_data_(path_data), + adc_sl_boundary_(adc_sl_boundary), + dp_st_cost_(dp_config), + init_point_(st_graph_data.init_point()) { + dp_st_speed_config_.set_total_path_length( + std::fmin(dp_st_speed_config_.total_path_length(), + st_graph_data_.path_data_length())); + vehicle_param_ = VehicleConfigHelper::GetConfig().vehicle_param(); +} + +Status DpStGraph::Search(PathDecision* const path_decision, + SpeedData* const speed_data) { + if (!InitCostTable().ok()) { + const std::string msg = "Initialize cost table failed."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + CalculatePointwiseCost(st_graph_data_.st_boundaries()); + + if (!CalculateTotalCost().ok()) { + const std::string msg = "Calculate total cost failed."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + if (!RetrieveSpeedProfile(speed_data).ok()) { + const std::string msg = "Retrieve best speed profile failed."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + if (!MakeObjectDecision(*speed_data, path_decision).ok()) { + const std::string msg = "Get object decision by speed profile failed."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + return Status::OK(); +} + +Status DpStGraph::InitCostTable() { + uint32_t dim_s = dp_st_speed_config_.matrix_dimension_s(); + uint32_t dim_t = dp_st_speed_config_.matrix_dimension_t(); + + if (Double::Compare(dp_st_speed_config_.total_path_length(), 0.0) == 0) { + unit_s_ = 1e-8; + dim_s = + std::min(dim_s, static_cast( + dp_st_speed_config_.total_path_length() / unit_s_) + + 1); + } else { + unit_s_ = dp_st_speed_config_.total_path_length() / dim_s; + } + + unit_t_ = dp_st_speed_config_.total_time() / + dp_st_speed_config_.matrix_dimension_t(); + DCHECK_GT(dim_s, 2); + DCHECK_GT(dim_t, 2); + cost_table_ = std::vector>( + dim_t, std::vector(dim_s, StGraphPoint())); + + double curr_t = 0.0; + for (uint32_t i = 0; i < cost_table_.size(); ++i, curr_t += unit_t_) { + auto& cost_table_i = cost_table_[i]; + double curr_s = 0.0; + for (uint32_t j = 0; j < cost_table_i.size(); ++j, curr_s += unit_s_) { + cost_table_i[j].Init(i, j, STPoint(curr_s, curr_t)); + } + } + return Status::OK(); +} + +void DpStGraph::CalculatePointwiseCost( + const std::vector& boundaries) { + // TODO(all): extract reference line from decision first + std::vector reference_points; + double curr_t = 0.0; + for (uint32_t i = 0; i < cost_table_.size(); ++i) { + reference_points.emplace_back(curr_t * dp_st_speed_config_.max_speed(), + curr_t); + curr_t += unit_t_; + } + + for (uint32_t i = 0; i < cost_table_.size(); ++i) { + for (auto& st_graph_point : cost_table_[i]) { + double ref_cost = dp_st_cost_.GetReferenceCost(st_graph_point.point(), + reference_points[i]); + double obs_cost = + dp_st_cost_.GetObstacleCost(st_graph_point.point(), boundaries); + st_graph_point.SetReferenceCost(ref_cost); + st_graph_point.SetObstacleCost(obs_cost); + st_graph_point.SetTotalCost(std::numeric_limits::infinity()); + } + } +} + +Status DpStGraph::CalculateTotalCost() { + // s corresponding to row + // time corresponding to col + uint32_t next_highest_row = 0; + uint32_t next_lowest_row = 0; + + for (size_t c = 0; c < cost_table_.size(); ++c) { + uint32_t highest_row = 0; + uint32_t lowest_row = cost_table_.back().size() - 1; + for (uint32_t r = next_lowest_row; r <= next_highest_row; ++r) { + const auto& cost_cr = cost_table_[c][r]; + CalculateCostAt(c, r); + uint32_t h_r = 0; + uint32_t l_r = 0; + if (cost_cr.total_cost() < std::numeric_limits::infinity()) { + GetRowRange(cost_cr, &h_r, &l_r); + highest_row = std::max(highest_row, h_r); + lowest_row = std::min(lowest_row, l_r); + } + } + next_highest_row = highest_row; + next_lowest_row = std::max(next_lowest_row, lowest_row); + } + + return Status::OK(); +} + +void DpStGraph::GetRowRange(const StGraphPoint& point, + uint32_t* next_highest_row, + uint32_t* next_lowest_row) { + double v0 = 0.0; + if (!point.pre_point()) { + v0 = init_point_.v(); + } else { + v0 = (point.index_s() - point.pre_point()->index_s()) * unit_s_ / unit_t_; + } + const double speed_coeff = unit_t_ * unit_t_; + + const double delta_s_upper_bound = + v0 * unit_t_ + vehicle_param_.max_acceleration() * speed_coeff; + *next_highest_row = + point.index_s() + static_cast(delta_s_upper_bound / unit_s_); + if (*next_highest_row >= cost_table_.back().size()) { + *next_highest_row = cost_table_.back().size() - 1; + } + + const double delta_s_lower_bound = std::fmax( + 0.0, v0 * unit_t_ + vehicle_param_.max_deceleration() * speed_coeff); + *next_lowest_row += static_cast(delta_s_lower_bound / unit_s_); + if (*next_lowest_row >= cost_table_.back().size()) { + *next_lowest_row = cost_table_.back().size() - 1; + } +} + +void DpStGraph::CalculateCostAt(const uint32_t c, const uint32_t r) { + auto& cost_cr = cost_table_[c][r]; + const auto& cost_init = cost_table_[0][0]; + if (c == 0) { + DCHECK_EQ(r, 0) << "Incorrect. Row should be 0 with col = 0. row: " << r; + cost_cr.SetTotalCost(0.0); + return; + } + + double speed_limit = + st_graph_data_.speed_limit().GetSpeedLimitByS(unit_s_ * r); + if (c == 1) { + if (CheckOverlapOnDpStGraph(st_graph_data_.st_boundaries(), cost_cr, + cost_init)) { + return; + } + cost_cr.SetTotalCost(cost_cr.obstacle_cost() + cost_init.total_cost() + + CalculateEdgeCostForSecondCol(r, speed_limit)); + cost_cr.SetPrePoint(cost_init); + return; + } + + const uint32_t max_s_diff = static_cast( + dp_st_speed_config_.max_speed() * unit_t_ / unit_s_); + const uint32_t r_low = (max_s_diff < r ? r - max_s_diff : 0); + + const auto& pre_col = cost_table_[c - 1]; + + if (c == 2) { + for (uint32_t r_pre = r_low; r_pre <= r; ++r_pre) { + if (CheckOverlapOnDpStGraph(st_graph_data_.st_boundaries(), cost_cr, + pre_col[r_pre])) { + return; + } + + const double cost = cost_cr.obstacle_cost() + + pre_col[r_pre].total_cost() + + CalculateEdgeCostForThirdCol(r, r_pre, speed_limit); + + if (cost < cost_cr.total_cost()) { + cost_cr.SetTotalCost(cost); + cost_cr.SetPrePoint(pre_col[r_pre]); + } + } + return; + } + for (uint32_t r_pre = r_low; r_pre <= r; ++r_pre) { + if (std::isinf(pre_col[r_pre].total_cost()) || + pre_col[r_pre].pre_point() == nullptr) { + continue; + } + + const double curr_a = + (cost_cr.index_s() + pre_col[r_pre].pre_point()->index_s() - + 2 * pre_col[r_pre].index_s()) * + unit_s_ / (unit_t_ * unit_t_); + if (curr_a > vehicle_param_.max_acceleration() || + curr_a < vehicle_param_.max_deceleration()) { + continue; + } + + uint32_t lower_bound = 0; + uint32_t upper_bound = 0; + if (!CalculateFeasibleAccelRange(static_cast(r_pre), + static_cast(r), &lower_bound, + &upper_bound)) { + continue; + } + + if (CheckOverlapOnDpStGraph(st_graph_data_.st_boundaries(), cost_cr, + pre_col[r_pre])) { + return; + } + + for (uint32_t r_prepre = lower_bound; r_prepre <= upper_bound; ++r_prepre) { + const StGraphPoint& prepre_graph_point = cost_table_[c - 2][r_prepre]; + if (std::isinf(prepre_graph_point.total_cost())) { + continue; + } + + if (!prepre_graph_point.pre_point()) { + continue; + } + const STPoint& triple_pre_point = prepre_graph_point.pre_point()->point(); + const STPoint& prepre_point = prepre_graph_point.point(); + const STPoint& pre_point = pre_col[r_pre].point(); + const STPoint& curr_point = cost_cr.point(); + double cost = cost_cr.obstacle_cost() + pre_col[r_pre].total_cost() + + CalculateEdgeCost(triple_pre_point, prepre_point, pre_point, + curr_point, speed_limit); + + if (cost < cost_cr.total_cost()) { + cost_cr.SetTotalCost(cost); + cost_cr.SetPrePoint(pre_col[r_pre]); + } + } + } +} + +bool DpStGraph::CalculateFeasibleAccelRange(const double r_pre, + const double r_cur, + uint32_t* const lower_bound, + uint32_t* const upper_bound) const { + double tcoef = unit_t_ * unit_t_ / unit_s_; + double lval = std::max( + 2 * r_pre - r_cur + dp_st_speed_config_.max_deceleration() * tcoef, 0.0); + double rval = std::min( + 2 * r_pre - r_cur + dp_st_speed_config_.max_acceleration() * tcoef, + r_pre); + + if (rval < lval) { + return false; + } + *lower_bound = static_cast(lval); + *upper_bound = static_cast(rval); + return true; +} + +Status DpStGraph::RetrieveSpeedProfile(SpeedData* const speed_data) const { + double min_cost = std::numeric_limits::infinity(); + const StGraphPoint* best_end_point = nullptr; + for (const StGraphPoint& cur_point : cost_table_.back()) { + if (!std::isinf(cur_point.total_cost()) && + cur_point.total_cost() < min_cost) { + best_end_point = &cur_point; + min_cost = cur_point.total_cost(); + } + } + + for (const auto& row : cost_table_) { + const StGraphPoint& cur_point = row.back(); + if (!std::isinf(cur_point.total_cost()) && + cur_point.total_cost() < min_cost) { + best_end_point = &cur_point; + min_cost = cur_point.total_cost(); + } + } + + if (best_end_point == nullptr) { + const std::string msg = "Fail to find the best feasible trajectory."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + std::vector speed_profile; + const StGraphPoint* cur_point = best_end_point; + while (cur_point != nullptr) { + SpeedPoint speed_point; + speed_point.set_s(cur_point->point().s()); + speed_point.set_t(cur_point->point().t()); + speed_profile.emplace_back(speed_point); + cur_point = cur_point->pre_point(); + } + std::reverse(speed_profile.begin(), speed_profile.end()); + + if (Double::Compare(speed_profile.front().t(), 0.0) != 0 || + Double::Compare(speed_profile.front().s(), 0.0) != 0) { + const std::string msg = "Fail to retrieve speed profile."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + speed_data->set_speed_vector(speed_profile); + return Status::OK(); +} + +Status DpStGraph::MakeObjectDecision(const SpeedData& speed_profile, + PathDecision* const path_decision) const { + if (speed_profile.speed_vector().size() < 2) { + const std::string msg = "dp_st_graph failed to get speed profile."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + for (const auto& boundary : st_graph_data_.st_boundaries()) { + if (boundary.max_s() < 0.0 || boundary.max_t() < 0.0) { + continue; + } + + auto* path_obstacle = path_decision->Find(boundary.id()); + CHECK(path_obstacle) << "Failed to find obstacle " << boundary.id(); + if (path_obstacle->HasLongitudinalDecision()) { + continue; + } + + double start_t = boundary.min_t(); + double end_t = boundary.max_t(); + + bool go_down = true; + for (const auto& speed_point : speed_profile.speed_vector()) { + if (speed_point.t() < start_t) { + continue; + } + if (speed_point.t() > end_t) { + break; + } + + STPoint st_point(speed_point.s(), speed_point.t()); + if (boundary.IsPointInBoundary(st_point)) { + const std::string msg = + "dp_st_graph failed: speed profile cross st_boundaries."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + double s_upper = dp_st_speed_config_.total_path_length(); + double s_lower = 0.0; + if (boundary.GetBoundarySRange(speed_point.t(), &s_upper, &s_lower)) { + if (s_lower > speed_point.s()) { + go_down = true; + } else if (s_upper < speed_point.s()) { + go_down = false; + } + } + } + if (go_down) { + if (CheckIsFollowByT(boundary)) { + // FOLLOW decision + ObjectDecisionType follow_decision; + if (!CreateFollowDecision(*path_obstacle, boundary, &follow_decision)) { + AERROR << "Failed to create follow decision for boundary with id " + << boundary.id(); + return Status(ErrorCode::PLANNING_ERROR, + "faind to create follow decision"); + } + if (!path_decision->AddLongitudinalDecision( + "dp_st_graph", boundary.id(), follow_decision)) { + AERROR << "Failed to add follow decision to object " << boundary.id(); + return Status(ErrorCode::PLANNING_ERROR, + "faind to add follow decision"); + } + } else { + // YIELD decision + ObjectDecisionType yield_decision; + if (!CreateYieldDecision(boundary, &yield_decision)) { + AERROR << "Failed to create yield decision for boundary with id " + << boundary.id(); + return Status(ErrorCode::PLANNING_ERROR, + "faind to create yield decision"); + } + if (!path_decision->AddLongitudinalDecision( + "dp_st_graph", boundary.id(), yield_decision)) { + AERROR << "Failed to add yield decision to object " << boundary.id(); + return Status(ErrorCode::PLANNING_ERROR, + "faind to add yield decision"); + } + } + } else { + // OVERTAKE decision + ObjectDecisionType overtake_decision; + if (!CreateOvertakeDecision(*path_obstacle, boundary, + &overtake_decision)) { + AERROR << "Failed to create overtake decision for boundary with id " + << boundary.id(); + return Status(ErrorCode::PLANNING_ERROR, + "faind to create overtake decision"); + } + if (!path_decision->AddLongitudinalDecision("dp_st_graph", boundary.id(), + overtake_decision)) { + AERROR << "Failed to add overtake decision to object " << boundary.id(); + return Status(ErrorCode::PLANNING_ERROR, + "faind to add overtake decision"); + } + } + } + for (const auto* path_obstacle : path_decision->path_obstacles().Items()) { + if (!path_obstacle->HasLongitudinalDecision()) { + ObjectDecisionType ignore_decision; + ignore_decision.mutable_ignore(); + path_decision->AddLongitudinalDecision("dp_st_graph", path_obstacle->Id(), + ignore_decision); + } + } + return Status::OK(); +} + +bool DpStGraph::CreateFollowDecision( + const PathObstacle& path_obstacle, const StBoundary& boundary, + ObjectDecisionType* const follow_decision) const { + DCHECK_NOTNULL(follow_decision); + + auto* follow = follow_decision->mutable_follow(); + + const double follow_speed = init_point_.v(); + const double follow_distance_s = -std::fmax( + follow_speed * FLAGS_follow_time_buffer, FLAGS_follow_min_distance); + + follow->set_distance_s(follow_distance_s); + + const double refence_s = + adc_sl_boundary_.end_s() + boundary.min_s() + follow_distance_s; + auto ref_point = reference_line_.GetReferencePoint(refence_s); + auto* fence_point = follow->mutable_fence_point(); + fence_point->set_x(ref_point.x()); + fence_point->set_y(ref_point.y()); + fence_point->set_z(0.0); + follow->set_fence_heading(ref_point.heading()); + + return true; +} + +bool DpStGraph::CreateYieldDecision( + const StBoundary& boundary, + ObjectDecisionType* const yield_decision) const { + auto* yield = yield_decision->mutable_yield(); + + // in meters + constexpr double kMinYieldDistance = 10.0; + const double yield_distance_s = + std::max(-boundary.min_s(), -1.0 * kMinYieldDistance); + yield->set_distance_s(yield_distance_s); + + const double reference_line_fence_s = + adc_sl_boundary_.end_s() + boundary.min_s() + yield_distance_s; + auto ref_point = reference_line_.GetReferencePoint(reference_line_fence_s); + + yield->mutable_fence_point()->set_x(ref_point.x()); + yield->mutable_fence_point()->set_y(ref_point.y()); + yield->mutable_fence_point()->set_z(0.0); + yield->set_fence_heading(ref_point.heading()); + + return true; +} + +bool DpStGraph::CreateOvertakeDecision( + const PathObstacle& path_obstacle, const StBoundary& boundary, + ObjectDecisionType* const overtake_decision) const { + DCHECK_NOTNULL(overtake_decision); + + auto* overtake = overtake_decision->mutable_overtake(); + + // in seconds + constexpr double kOvertakeTimeBuffer = 3.0; + // in meters + constexpr double kMinOvertakeDistance = 10.0; + + const auto& velocity = path_obstacle.obstacle()->Perception().velocity(); + const double obstacle_speed = + Vec2d::CreateUnitVec2d(init_point_.path_point().theta()) + .InnerProd(Vec2d(velocity.x(), velocity.y())); + + const double overtake_distance_s = std::fmax( + std::fmax(init_point_.v(), obstacle_speed) * kOvertakeTimeBuffer, + kMinOvertakeDistance); + overtake->set_distance_s(overtake_distance_s); + + const double reference_line_fence_s = + adc_sl_boundary_.end_s() + boundary.min_s() + overtake_distance_s; + + auto ref_point = reference_line_.GetReferencePoint(reference_line_fence_s); + overtake->mutable_fence_point()->set_x(ref_point.x()); + overtake->mutable_fence_point()->set_y(ref_point.y()); + overtake->mutable_fence_point()->set_z(0.0); + overtake->set_fence_heading(ref_point.heading()); + + return true; +} + +double DpStGraph::CalculateEdgeCost(const STPoint& first, const STPoint& second, + const STPoint& third, const STPoint& forth, + const double speed_limit) const { + return dp_st_cost_.GetSpeedCost(third, forth, speed_limit) + + dp_st_cost_.GetAccelCostByThreePoints(second, third, forth) + + dp_st_cost_.GetJerkCostByFourPoints(first, second, third, forth); +} + +double DpStGraph::CalculateEdgeCostForSecondCol( + const uint32_t row, const double speed_limit) const { + double init_speed = init_point_.v(); + double init_acc = init_point_.a(); + const STPoint& pre_point = cost_table_[0][0].point(); + const STPoint& curr_point = cost_table_[1][row].point(); + return dp_st_cost_.GetSpeedCost(pre_point, curr_point, speed_limit) + + dp_st_cost_.GetAccelCostByTwoPoints(init_speed, pre_point, + curr_point) + + dp_st_cost_.GetJerkCostByTwoPoints(init_speed, init_acc, pre_point, + curr_point); +} + +double DpStGraph::CalculateEdgeCostForThirdCol(const uint32_t curr_row, + const uint32_t pre_row, + const double speed_limit) const { + double init_speed = init_point_.v(); + const STPoint& first = cost_table_[0][0].point(); + const STPoint& second = cost_table_[1][pre_row].point(); + const STPoint& third = cost_table_[2][curr_row].point(); + return dp_st_cost_.GetSpeedCost(second, third, speed_limit) + + dp_st_cost_.GetAccelCostByThreePoints(first, second, third) + + dp_st_cost_.GetJerkCostByThreePoints(init_speed, first, second, third); +} + +bool DpStGraph::CheckIsFollowByT(const StBoundary& boundary) const { + if (boundary.BottomLeftPoint().s() > boundary.BottomRightPoint().s()) { + return false; + } + const double kFollowTimeEpsilon = 1e-3; + if (boundary.min_t() > kFollowTimeEpsilon || + boundary.max_t() < kFollowTimeEpsilon) { + return false; + } + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/dp_st_speed/dp_st_graph.h b/modules/planning/tasks/dp_st_speed/dp_st_graph.h new file mode 100644 index 00000000000..0366a7a9bc8 --- /dev/null +++ b/modules/planning/tasks/dp_st_speed/dp_st_graph.h @@ -0,0 +1,150 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file dp_st_graph.h + **/ + +#ifndef MODULES_PLANNING_TASKS_DP_ST_SPEED_DP_ST_GRAPH_H_ +#define MODULES_PLANNING_TASKS_DP_ST_SPEED_DP_ST_GRAPH_H_ + +#include + +#include "modules/common/configs/proto/vehicle_config.pb.h" +#include "modules/planning/proto/dp_st_speed_config.pb.h" +#include "modules/planning/proto/planning_config.pb.h" + +#include "modules/common/status/status.h" +#include "modules/planning/common/frame.h" +#include "modules/planning/common/path_decision.h" +#include "modules/planning/common/speed/speed_data.h" +#include "modules/planning/common/speed/st_point.h" +#include "modules/planning/tasks/dp_st_speed/dp_st_cost.h" +#include "modules/planning/tasks/dp_st_speed/st_graph_point.h" +#include "modules/planning/tasks/st_graph/st_graph_data.h" + +namespace apollo { +namespace planning { + +class DpStGraph { + public: + DpStGraph(const ReferenceLine& reference_line, + const StGraphData& st_graph_data, const DpStSpeedConfig& dp_config, + const PathData& path_data, const SLBoundary& adc_sl_boundary); + + apollo::common::Status Search(PathDecision* const path_decision, + SpeedData* const speed_data); + + private: + apollo::common::Status InitCostTable(); + + void CalculatePointwiseCost(const std::vector& boundaries); + + apollo::common::Status RetrieveSpeedProfile( + SpeedData* const speed_data) const; + + apollo::common::Status MakeObjectDecision( + const SpeedData& speed_profile, PathDecision* const path_decision) const; + + apollo::common::Status CalculateTotalCost(); + void CalculateCostAt(const uint32_t r, const uint32_t c); + + double CalculateEdgeCost(const STPoint& first, const STPoint& second, + const STPoint& third, const STPoint& forth, + const double speed_limit) const; + double CalculateEdgeCostForSecondCol(const uint32_t row, + const double speed_limit) const; + double CalculateEdgeCostForThirdCol(const uint32_t curr_r, + const uint32_t pre_r, + const double speed_limit) const; + + bool CalculateFeasibleAccelRange(const double r_pre, const double r_cur, + uint32_t* const lower_bound, + uint32_t* const upper_bound) const; + + /** + * @brief check if the ADC should follow an obstacle by examing the + *StBoundary of the obstacle. + * @param boundary The boundary of the obstacle. + * @return true if the ADC believe it should follow the obstacle, and + * false otherwise. + **/ + bool CheckIsFollowByT(const StBoundary& boundary) const; + + /** + * @brief create follow decision based on the boundary + * @return true if the follow decision is created successfully, and + * false otherwise. + **/ + bool CreateFollowDecision(const PathObstacle& path_obstacle, + const StBoundary& boundary, + ObjectDecisionType* const follow_decision) const; + + /** + * @brief create yield decision based on the boundary + * @return true if the yield decision is created successfully, and + * false otherwise. + **/ + bool CreateYieldDecision(const StBoundary& boundary, + ObjectDecisionType* const yield_decision) const; + + /** + * @brief create overtake decision based on the boundary + * @return true if the overtake decision is created successfully, and + * false otherwise. + **/ + bool CreateOvertakeDecision( + const PathObstacle& path_obstacle, const StBoundary& boundary, + ObjectDecisionType* const overtake_decision) const; + + void GetRowRange(const StGraphPoint& point, uint32_t* highest_row, + uint32_t* lowest_row); + + private: + const ReferenceLine& reference_line_; + // dp st configuration + DpStSpeedConfig dp_st_speed_config_; + + const StGraphData& st_graph_data_; + + // vehicle configuration parameter + common::VehicleParam vehicle_param_; + + const PathData& path_data_; + + const SLBoundary& adc_sl_boundary_; + + // cost utility with configuration; + DpStCost dp_st_cost_; + + // initial status + common::TrajectoryPoint init_point_; + + // mappign obstacle to st graph + // std::unique_ptr st_mapper_ = nullptr; + + double unit_s_ = 0.0; + double unit_t_ = 0.0; + + // cost_table_[t][s] + // row: s, col: t --- NOTICE: Please do NOT change. + std::vector> cost_table_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_DP_ST_SPEED_DP_ST_GRAPH_H_ diff --git a/modules/planning/tasks/dp_st_speed/dp_st_speed_optimizer.cc b/modules/planning/tasks/dp_st_speed/dp_st_speed_optimizer.cc new file mode 100644 index 00000000000..bb629d2b5fe --- /dev/null +++ b/modules/planning/tasks/dp_st_speed/dp_st_speed_optimizer.cc @@ -0,0 +1,118 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file dp_st_speed_optimizer.cc + **/ + +#include "modules/planning/tasks/dp_st_speed/dp_st_speed_optimizer.h" + +#include +#include + +#include "modules/planning/proto/planning_internal.pb.h" + +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/tasks/dp_st_speed/dp_st_graph.h" +#include "modules/planning/tasks/st_graph/st_graph_data.h" + +namespace apollo { +namespace planning { + +using apollo::common::ErrorCode; +using apollo::common::Status; +using apollo::common::VehicleConfigHelper; +using apollo::common::adapter::AdapterManager; +using apollo::localization::LocalizationEstimate; +using apollo::planning_internal::STGraphDebug; + +DpStSpeedOptimizer::DpStSpeedOptimizer() + : SpeedOptimizer("DpStSpeedOptimizer") {} + +bool DpStSpeedOptimizer::Init(const PlanningConfig& config) { + dp_st_speed_config_ = config.em_planner_config().dp_st_speed_config(); + st_boundary_config_ = dp_st_speed_config_.st_boundary_config(); + is_init_ = true; + return true; +} + +Status DpStSpeedOptimizer::Process(const SLBoundary& adc_sl_boundary, + const PathData& path_data, + const common::TrajectoryPoint& init_point, + const ReferenceLine& reference_line, + PathDecision* const path_decision, + SpeedData* const speed_data) { + if (!is_init_) { + AERROR << "Please call Init() before process DpStSpeedOptimizer."; + return Status(ErrorCode::PLANNING_ERROR, "Not inited."); + } + + if (path_data.discretized_path().NumOfPoints() == 0) { + std::string msg("Empty path data"); + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + StBoundaryMapper boundary_mapper( + reference_line_info_->pnc_map(), adc_sl_boundary, st_boundary_config_, + reference_line, path_data, dp_st_speed_config_.total_path_length(), + dp_st_speed_config_.total_time()); + + // step 1 get boundaries + std::vector boundaries; + if (boundary_mapper.GetGraphBoundary(*path_decision, &boundaries).code() == + ErrorCode::PLANNING_ERROR) { + const std::string msg = + "Mapping obstacle for dp st speed optimizer failed."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + // step 2 perform graph search + SpeedLimit speed_limit; + if (!boundary_mapper.GetSpeedLimits(&speed_limit).ok()) { + const std::string msg = + "Getting speed limits for dp st speed optimizer failed!"; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + const double path_length = path_data.discretized_path().Length(); + StGraphData st_graph_data(boundaries, init_point, speed_limit, path_length); + + DpStGraph st_graph(reference_line, st_graph_data, dp_st_speed_config_, + path_data, adc_sl_boundary); + auto* debug = frame_->DebugLogger(); + STGraphDebug* st_graph_debug = debug->mutable_planning_data()->add_st_graph(); + + if (!st_graph.Search(path_decision, speed_data).ok()) { + const std::string msg(Name() + + ":Failed to search graph with dynamic programming."); + AERROR << msg; + RecordSTGraphDebug(boundaries, speed_limit, *speed_data, st_graph_debug); + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + RecordSTGraphDebug(boundaries, speed_limit, *speed_data, st_graph_debug); + + return Status::OK(); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/dp_st_speed/dp_st_speed_optimizer.h b/modules/planning/tasks/dp_st_speed/dp_st_speed_optimizer.h new file mode 100644 index 00000000000..abede126df3 --- /dev/null +++ b/modules/planning/tasks/dp_st_speed/dp_st_speed_optimizer.h @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file dp_st_speed_optimizer.h + **/ + +#ifndef MODULES_PLANNING_TASKS_DP_ST_SPEED_OPTIMIZER_H_ +#define MODULES_PLANNING_TASKS_DP_ST_SPEED_OPTIMIZER_H_ + +#include + +#include "modules/planning/proto/dp_st_speed_config.pb.h" +#include "modules/planning/proto/st_boundary_config.pb.h" + +#include "modules/planning/tasks/speed_optimizer.h" +#include "modules/planning/tasks/st_graph/st_boundary_mapper.h" + +namespace apollo { +namespace planning { + +class DpStSpeedOptimizer : public SpeedOptimizer { + public: + DpStSpeedOptimizer(); + + bool Init(const PlanningConfig& config) override; + + private: + apollo::common::Status Process(const SLBoundary& adc_sl_boundary, + const PathData& path_data, + const common::TrajectoryPoint& init_point, + const ReferenceLine& reference_line, + PathDecision* const path_decision, + SpeedData* const speed_data) override; + DpStSpeedConfig dp_st_speed_config_; + StBoundaryConfig st_boundary_config_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_DP_ST_SPEED_OPTIMIZER_H_ diff --git a/modules/planning/tasks/dp_st_speed/st_graph_point.cc b/modules/planning/tasks/dp_st_speed/st_graph_point.cc new file mode 100644 index 00000000000..3b7aa04963a --- /dev/null +++ b/modules/planning/tasks/dp_st_speed/st_graph_point.cc @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: st_graph_point.cc + **/ + +#include "modules/planning/tasks/dp_st_speed/st_graph_point.h" + +#include "modules/planning/common/planning_gflags.h" + +namespace apollo { +namespace planning { + +std::uint32_t StGraphPoint::index_s() const { return index_s_; } + +std::uint32_t StGraphPoint::index_t() const { return index_t_; } + +const STPoint& StGraphPoint::point() const { return point_; } + +const StGraphPoint* StGraphPoint::pre_point() const { return pre_point_; } + +double StGraphPoint::reference_cost() const { return reference_cost_; } + +double StGraphPoint::obstacle_cost() const { return obstacle_cost_; } + +double StGraphPoint::total_cost() const { return total_cost_; } + +void StGraphPoint::Init(const std::uint32_t index_t, + const std::uint32_t index_s, const STPoint& st_point) { + index_t_ = index_t; + index_s_ = index_s; + point_ = st_point; +} + +void StGraphPoint::SetReferenceCost(const double reference_cost) { + reference_cost_ = reference_cost; +} + +void StGraphPoint::SetObstacleCost(const double obs_cost) { + obstacle_cost_ = obs_cost; +} + +void StGraphPoint::SetTotalCost(const double total_cost) { + total_cost_ = total_cost; +} + +void StGraphPoint::SetPrePoint(const StGraphPoint& pre_point) { + pre_point_ = &pre_point; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/dp_st_speed/st_graph_point.h b/modules/planning/tasks/dp_st_speed/st_graph_point.h new file mode 100644 index 00000000000..48681b93f31 --- /dev/null +++ b/modules/planning/tasks/dp_st_speed/st_graph_point.h @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/* + * @file: st_graph_point.h + */ + +#ifndef MODULES_PLANNING_TASKS_ST_GRAPH_ST_GRAPH_POINT_H_ +#define MODULES_PLANNING_TASKS_ST_GRAPH_ST_GRAPH_POINT_H_ + +#include + +#include "modules/planning/common/speed/st_point.h" + +namespace apollo { +namespace planning { + +class StGraphPoint { + public: + std::uint32_t index_s() const; + std::uint32_t index_t() const; + + const STPoint& point() const; + const StGraphPoint* pre_point() const; + + double reference_cost() const; + double obstacle_cost() const; + double total_cost() const; + + void Init(const std::uint32_t index_t, const std::uint32_t index_s, + const STPoint& st_point); + + // given reference speed profile, reach the cost, including position + void SetReferenceCost(const double reference_cost); + + // given obstacle info, get the cost; + void SetObstacleCost(const double obs_cost); + + // total cost + void SetTotalCost(const double total_cost); + + void SetPrePoint(const StGraphPoint& pre_point); + + private: + STPoint point_; + const StGraphPoint* pre_point_ = nullptr; + std::uint32_t index_s_ = 0; + std::uint32_t index_t_ = 0; + + double reference_cost_ = 0.0; + double obstacle_cost_ = 0.0; + double total_cost_ = std::numeric_limits::infinity(); +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_ST_GRAPH_ST_GRAPH_POINT_H_ diff --git a/modules/planning/tasks/path_decider/BUILD b/modules/planning/tasks/path_decider/BUILD new file mode 100644 index 00000000000..a9f4b540b2f --- /dev/null +++ b/modules/planning/tasks/path_decider/BUILD @@ -0,0 +1,27 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "path_decider", + srcs = [ + "path_decider.cc", + ], + hdrs = [ + "path_decider.h", + ], + deps = [ + "//modules/common/configs:vehicle_config_helper", + "//modules/common/math", + "//modules/common/status", + "//modules/map/proto:map_proto", + "//modules/planning/common:frame", + "//modules/planning/common:path_decision", + "//modules/planning/common:planning_gflags", + "//modules/planning/common:reference_line_info", + "//modules/planning/proto:planning_proto", + "//modules/planning/tasks:task", + ], +) + +cpplint() diff --git a/modules/planning/tasks/path_decider/path_decider.cc b/modules/planning/tasks/path_decider/path_decider.cc new file mode 100644 index 00000000000..4dce66c21c2 --- /dev/null +++ b/modules/planning/tasks/path_decider/path_decider.cc @@ -0,0 +1,171 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include "modules/planning/tasks/path_decider/path_decider.h" + +#include +#include +#include +#include + +#include "modules/planning/proto/decision.pb.h" + +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/util/util.h" +#include "modules/planning/common/planning_gflags.h" + +namespace apollo { +namespace planning { + +using apollo::common::ErrorCode; +using apollo::common::Status; + +PathDecider::PathDecider() : Task("PathDecider") {} + +apollo::common::Status PathDecider::Execute( + Frame *, ReferenceLineInfo *reference_line_info) { + Task::Execute(nullptr, reference_line_info); + return Process(reference_line_info->path_data(), + reference_line_info->path_decision()); +} + +Status PathDecider::Process(const PathData &path_data, + PathDecision *const path_decision) { + CHECK_NOTNULL(path_decision); + if (!MakeObjectDecision(path_data, path_decision)) { + AERROR << "Failed to make decision based on tunnel"; + return Status(ErrorCode::PLANNING_ERROR, "dp_road_graph decision "); + } + return Status::OK(); +} + +bool PathDecider::MakeObjectDecision(const PathData &path_data, + PathDecision *const path_decision) { + DCHECK_NOTNULL(path_decision); + if (!MakeStaticObstacleDecision(path_data, path_decision)) { + AERROR << "Failed to make decisions for static obstacles"; + return false; + } + return true; +} + +bool PathDecider::MakeStaticObstacleDecision( + const PathData &path_data, PathDecision *const path_decision) { + DCHECK_NOTNULL(path_decision); + const auto &frenet_path = path_data.frenet_frame_path(); + const auto &frenet_points = frenet_path.points(); + if (frenet_points.empty()) { + AERROR << "Path is empty"; + return false; + } + + const double half_width = + common::VehicleConfigHelper::GetConfig().vehicle_param().width() / 2.0; + + const double lateral_radius = half_width + FLAGS_lateral_ignore_buffer; + + const double lateral_stop_radius = + half_width + FLAGS_static_decision_nudge_l_buffer; + + for (const auto *path_obstacle : path_decision->path_obstacles().Items()) { + const auto &obstacle = *path_obstacle->obstacle(); + if (!obstacle.IsStatic()) { + continue; + } + if (path_obstacle->HasLongitudinalDecision() && + path_obstacle->LongitudinalDecision().has_ignore() && + path_obstacle->HasLateralDecision() && + path_obstacle->LateralDecision().has_ignore()) { + continue; + } + + // IGNORE by default + ObjectDecisionType object_decision; + object_decision.mutable_ignore(); + + const auto &sl_boundary = path_obstacle->perception_sl_boundary(); + if (sl_boundary.start_s() < frenet_points.front().s() || + sl_boundary.start_s() > frenet_points.back().s()) { + path_decision->AddLongitudinalDecision("PathDecider", obstacle.Id(), + object_decision); + continue; + } + + const auto frenet_point = frenet_path.EvaluateByS(sl_boundary.start_s()); + const double curr_l = frenet_point.l(); + if (curr_l - lateral_radius > sl_boundary.end_l() || + curr_l + lateral_radius < sl_boundary.start_l()) { + // ignore + path_decision->AddLateralDecision("PathDecider", obstacle.Id(), + object_decision); + } else if (curr_l - lateral_stop_radius < sl_boundary.end_l() && + curr_l + lateral_stop_radius > sl_boundary.start_l()) { + *object_decision.mutable_stop() = + GenerateObjectStopDecision(*path_obstacle); + path_decision->AddLongitudinalDecision("PathDecider", obstacle.Id(), + object_decision); + } else if (FLAGS_enable_nudge_decision && + (curr_l - lateral_stop_radius > sl_boundary.end_l())) { + ObjectNudge *object_nudge_ptr = object_decision.mutable_nudge(); + object_nudge_ptr->set_type(ObjectNudge::LEFT_NUDGE); + object_nudge_ptr->set_distance_l(FLAGS_nudge_distance_obstacle); + path_decision->AddLateralDecision("PathDecider", obstacle.Id(), + object_decision); + } else { + if (FLAGS_enable_nudge_decision) { + ObjectNudge *object_nudge_ptr = object_decision.mutable_nudge(); + object_nudge_ptr->set_type(ObjectNudge::RIGHT_NUDGE); + object_nudge_ptr->set_distance_l(-FLAGS_nudge_distance_obstacle); + path_decision->AddLateralDecision("PathDecider", obstacle.Id(), + object_decision); + } + } + } + + return true; +} + +ObjectStop PathDecider::GenerateObjectStopDecision( + const PathObstacle &path_obstacle) const { + ObjectStop object_stop; + double stop_distance = 0; + if (path_obstacle.obstacle()->Id() == FLAGS_destination_obstacle_id) { + // destination + object_stop.set_reason_code(StopReasonCode::STOP_REASON_DESTINATION); + stop_distance = FLAGS_stop_distance_destination; + } else { + // static obstacle + object_stop.set_reason_code(StopReasonCode::STOP_REASON_OBSTACLE); + stop_distance = FLAGS_stop_distance_obstacle; + } + object_stop.set_distance_s(-stop_distance); + + const double stop_ref_s = + path_obstacle.perception_sl_boundary().start_s() - stop_distance; + const auto stop_ref_point = + reference_line_info_->reference_line().GetReferencePoint(stop_ref_s); + object_stop.mutable_stop_point()->set_x(stop_ref_point.x()); + object_stop.mutable_stop_point()->set_y(stop_ref_point.y()); + object_stop.set_stop_heading(stop_ref_point.heading()); + return object_stop; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/path_decider/path_decider.h b/modules/planning/tasks/path_decider/path_decider.h new file mode 100644 index 00000000000..79a3f29b16d --- /dev/null +++ b/modules/planning/tasks/path_decider/path_decider.h @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#ifndef MODULES_PLANNING_TASKS_PATH_DECIDER_PATH_DECIDER_H_ +#define MODULES_PLANNING_TASKS_PATH_DECIDER_PATH_DECIDER_H_ + +#include + +#include "modules/planning/tasks/task.h" + +namespace apollo { +namespace planning { + +class PathDecider : public Task { + public: + PathDecider(); + ~PathDecider() = default; + + apollo::common::Status Execute( + Frame *frame, ReferenceLineInfo *reference_line_info) override; + + private: + apollo::common::Status Process(const PathData &path_data, + PathDecision *const path_decision); + + bool MakeObjectDecision(const PathData &path_data, + PathDecision *const path_decision); + + bool MakeStaticObstacleDecision(const PathData &path_data, + PathDecision *const path_decision); + + ObjectStop GenerateObjectStopDecision( + const PathObstacle &path_obstacle) const; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_PATH_DECIDER_PATH_DECIDER_H_ diff --git a/modules/planning/tasks/path_optimizer.cc b/modules/planning/tasks/path_optimizer.cc new file mode 100644 index 00000000000..ae457cf9a84 --- /dev/null +++ b/modules/planning/tasks/path_optimizer.cc @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file path_optimizer.cpp + **/ + +#include "modules/planning/tasks/path_optimizer.h" + +namespace apollo { +namespace planning { + +PathOptimizer::PathOptimizer(const std::string& name) : Task(name) {} + +apollo::common::Status PathOptimizer::Execute( + Frame* frame, ReferenceLineInfo* const reference_line_info) { + Task::Execute(frame, reference_line_info); + auto ret = Process( + reference_line_info->speed_data(), reference_line_info->reference_line(), + frame->PlanningStartPoint(), reference_line_info->mutable_path_data()); + RecordDebugInfo(reference_line_info->path_data()); + + return ret; +} + +void PathOptimizer::RecordDebugInfo(const PathData& path_data) { + const auto& path_points = path_data.discretized_path().path_points(); + auto ptr_optimized_path = + frame_->DebugLogger()->mutable_planning_data()->add_path(); + ptr_optimized_path->set_name(Name()); + ptr_optimized_path->mutable_path_point()->CopyFrom( + {path_points.begin(), path_points.end()}); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/path_optimizer.h b/modules/planning/tasks/path_optimizer.h new file mode 100644 index 00000000000..9ab44373576 --- /dev/null +++ b/modules/planning/tasks/path_optimizer.h @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file path_optimizer.h + **/ + +#ifndef MODULES_PLANNING_TASKS_PATH_OPTIMIZER_H_ +#define MODULES_PLANNING_TASKS_PATH_OPTIMIZER_H_ + +#include + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/common/status/status.h" +#include "modules/planning/reference_line/reference_line.h" +#include "modules/planning/tasks/task.h" + +namespace apollo { +namespace planning { + +class PathOptimizer : public Task { + public: + explicit PathOptimizer(const std::string &name); + virtual ~PathOptimizer() = default; + apollo::common::Status Execute( + Frame *frame, ReferenceLineInfo *reference_line_info) override; + + protected: + virtual apollo::common::Status Process( + const SpeedData &speed_data, const ReferenceLine &reference_line, + const common::TrajectoryPoint &init_point, PathData *const path_data) = 0; + + void RecordDebugInfo(const PathData &path_data); +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_PATH_OPTIMIZER_H_ diff --git a/modules/planning/tasks/qp_spline_path/BUILD b/modules/planning/tasks/qp_spline_path/BUILD new file mode 100644 index 00000000000..4ae1eeeffaa --- /dev/null +++ b/modules/planning/tasks/qp_spline_path/BUILD @@ -0,0 +1,46 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "qp_spline_path", + srcs = [ + "qp_frenet_frame.cc", + "qp_spline_path_generator.cc", + "qp_spline_path_optimizer.cc", + ], + hdrs = [ + "qp_frenet_frame.h", + "qp_spline_path_generator.h", + "qp_spline_path_optimizer.h", + ], + deps = [ + "//modules/common/configs:vehicle_config_helper", + "//modules/common/math", + "//modules/common/math/qp_solver", + "//modules/common/proto:pnc_point_proto", + "//modules/common/util", + "//modules/map/proto:map_proto", + "//modules/planning/common:obstacle", + "//modules/planning/common:path_decision", + "//modules/planning/common:planning_gflags", + "//modules/planning/common/path:discretized_path", + "//modules/planning/common/path:frenet_frame_path", + "//modules/planning/common/path:path_data", + "//modules/planning/common/speed:speed_data", + "//modules/planning/math:polynomial_xd", + "//modules/planning/math/curve1d:polynomial_curve1d", + "//modules/planning/math/curve1d:quintic_polynomial_curve1d", + "//modules/planning/math/frame_conversion:cartesian_frenet_conversion", + "//modules/planning/math/smoothing_spline:spline_1d_constraint", + "//modules/planning/math/smoothing_spline:spline_1d_generator", + "//modules/planning/math/smoothing_spline:spline_1d_kernel", + "//modules/planning/math/smoothing_spline:spline_1d_seg", + "//modules/planning/proto:qp_spline_path_config_proto", + "//modules/planning/reference_line", + "//modules/planning/tasks:path_optimizer", + "@eigen//:eigen", + ], +) + +cpplint() diff --git a/modules/planning/tasks/qp_spline_path/qp_frenet_frame.cc b/modules/planning/tasks/qp_spline_path/qp_frenet_frame.cc new file mode 100644 index 00000000000..d37f0f6f1f6 --- /dev/null +++ b/modules/planning/tasks/qp_spline_path/qp_frenet_frame.cc @@ -0,0 +1,503 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file qp_frenet_frame.cc + **/ +#include "modules/planning/tasks/qp_spline_path/qp_frenet_frame.h" + +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/proto/planning.pb.h" + +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/macro.h" +#include "modules/common/util/util.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/common/planning_util.h" +#include "modules/planning/math/double.h" + +namespace apollo { +namespace planning { + +using common::SpeedPoint; +using ConstPathObstacleList = std::vector; + +namespace { + +constexpr double kEpsilontol = 1e-6; +} + +QpFrenetFrame::QpFrenetFrame(const ReferenceLine& reference_line, + const ConstPathObstacleList& path_obstacles, + const SpeedData& speed_data, + const common::FrenetFramePoint& init_frenet_point, + const double start_s, const double end_s, + const double time_resolution) + : reference_line_(reference_line), + path_obstacles_(path_obstacles), + speed_data_(speed_data), + vehicle_param_( + common::VehicleConfigHelper::instance()->GetConfig().vehicle_param()), + init_frenet_point_(init_frenet_point), + feasible_longitudinal_upper_bound_(reference_line_.map_path().length()), + start_s_(start_s), + end_s_(end_s), + time_resolution_(time_resolution) {} + +bool QpFrenetFrame::Init(const uint32_t num_points) { + if (num_points < 2) { + AERROR << "Number of s points [" << num_points + << "] is too small to evaluate."; + return false; + } + + constexpr double kMinDistance = 1.0e-8; + if (std::fabs(start_s_ - end_s_) < kMinDistance) { + AERROR << "Not enough s distance. start_s: " << start_s_ + << ", end_s: " << end_s_ << ", kMinDistance: " << kMinDistance; + return false; + } + + if (!CalculateDiscretizedVehicleLocation()) { + AERROR << "Fail to calculate discretized vehicle location!"; + return false; + } + + const auto inf = std::numeric_limits::infinity(); + const double resolution = (end_s_ - start_s_) / num_points; + double s = start_s_; + for (uint32_t i = 0; i < num_points; + ++i, s = std::min(s + resolution, end_s_)) { + evaluated_knots_.push_back(s); + hdmap_bound_.emplace_back(-inf, inf); + static_obstacle_bound_.emplace_back(-inf, inf); + dynamic_obstacle_bound_.emplace_back(-inf, inf); + } + + // initialize calculation here + CalculateHDMapBound(); + + if (!CalculateObstacleBound()) { + AERROR << "Calculate obstacle bound failed!"; + return false; + } + + return true; +} + +void QpFrenetFrame::LogQpBound( + apollo::planning_internal::Debug* planning_debug) { + if (!planning_debug) { + return; + } + apollo::planning_internal::SLFrameDebug* sl_frame = + planning_debug->mutable_planning_data()->mutable_sl_frame()->Add(); + for (size_t i = 0; i < evaluated_knots_.size(); ++i) { + sl_frame->mutable_sampled_s()->Add(evaluated_knots_[i]); + sl_frame->mutable_map_lower_bound()->Add(hdmap_bound_[i].first); + sl_frame->mutable_map_upper_bound()->Add(hdmap_bound_[i].second); + sl_frame->mutable_static_obstacle_lower_bound()->Add( + static_obstacle_bound_[i].first); + sl_frame->mutable_static_obstacle_upper_bound()->Add( + static_obstacle_bound_[i].second); + sl_frame->mutable_dynamic_obstacle_lower_bound()->Add( + dynamic_obstacle_bound_[i].first); + sl_frame->mutable_dynamic_obstacle_upper_bound()->Add( + dynamic_obstacle_bound_[i].second); + } +} + +bool QpFrenetFrame::GetMapBound(const double s, + std::pair* const bound) const { + return GetBound(s, hdmap_bound_, bound); +} + +bool QpFrenetFrame::GetStaticObstacleBound( + const double s, std::pair* const bound) const { + return GetBound(s, static_obstacle_bound_, bound); +} + +bool QpFrenetFrame::GetDynamicObstacleBound( + const double s, std::pair* const bound) const { + return GetBound(s, dynamic_obstacle_bound_, bound); +} + +bool QpFrenetFrame::CalculateDiscretizedVehicleLocation() { + for (double relative_time = 0.0; relative_time < speed_data_.TotalTime(); + relative_time += time_resolution_) { + SpeedPoint veh_point; + if (!speed_data_.EvaluateByTime(relative_time, &veh_point)) { + AERROR << "Fail to get speed point at relative time " << relative_time; + return false; + } + veh_point.set_t(relative_time); + discretized_vehicle_location_.push_back(std::move(veh_point)); + } + return true; +} + +bool QpFrenetFrame::MapDynamicObstacleWithDecision( + const PathObstacle& path_obstacle) { + const Obstacle* ptr_obstacle = path_obstacle.obstacle(); + if (!path_obstacle.HasLateralDecision()) { + ADEBUG << "object has no lateral decision"; + return false; + } + const auto& decision = path_obstacle.LateralDecision(); + if (!decision.has_nudge()) { + AWARN << "only support nudge now"; + return true; + } + const auto& nudge = decision.nudge(); + for (const SpeedPoint& veh_point : discretized_vehicle_location_) { + double time = veh_point.t(); + common::TrajectoryPoint trajectory_point = + ptr_obstacle->GetPointAtTime(time); + common::math::Box2d obs_box = + ptr_obstacle->GetBoundingBox(trajectory_point); + // project obs_box on reference line + std::vector corners; + obs_box.GetAllCorners(&corners); + std::vector sl_corners; + + for (const auto& corner_xy : corners) { + common::SLPoint cur_point; + if (!reference_line_.XYToSL(corner_xy, &cur_point)) { + AERROR << "Fail to map xy point " << corner_xy.DebugString() << " to " + << cur_point.ShortDebugString(); + return false; + } + // shift box base on buffer + cur_point.set_l(cur_point.l() + nudge.distance_l()); + sl_corners.push_back(std::move(cur_point)); + } + + for (uint32_t i = 0; i < sl_corners.size(); ++i) { + common::SLPoint sl_first = sl_corners[i % sl_corners.size()]; + common::SLPoint sl_second = sl_corners[(i + 1) % sl_corners.size()]; + if (sl_first.s() < sl_second.s()) { + std::swap(sl_first, sl_second); + } + + std::pair bound = MapLateralConstraint( + sl_first, sl_second, nudge.type(), + veh_point.s() - vehicle_param_.back_edge_to_center(), + veh_point.s() + vehicle_param_.front_edge_to_center()); + + // update bound map + double s_resolution = std::fabs(veh_point.v() * time_resolution_); + double updated_start_s = + init_frenet_point_.s() + veh_point.s() - s_resolution; + double updated_end_s = + init_frenet_point_.s() + veh_point.s() + s_resolution; + if (updated_end_s > evaluated_knots_.back() || + updated_start_s < evaluated_knots_.front()) { + continue; + } + std::pair update_index_range = + FindInterval(updated_start_s, updated_end_s); + + for (uint32_t j = update_index_range.first; + j <= update_index_range.second; ++j) { + dynamic_obstacle_bound_[j].first = + std::max(bound.first, dynamic_obstacle_bound_[j].first); + dynamic_obstacle_bound_[j].second = + std::min(bound.second, dynamic_obstacle_bound_[j].second); + } + } + } + return true; +} + +bool QpFrenetFrame::MapStaticObstacleWithDecision( + const PathObstacle& path_obstacle) { + const auto ptr_obstacle = path_obstacle.obstacle(); + if (!path_obstacle.HasLateralDecision()) { + ADEBUG << "obstacle has no lateral decision"; + return false; + } + const auto& decision = path_obstacle.LateralDecision(); + if (!decision.has_nudge()) { + AWARN << "only support nudge decision now"; + return true; + } + const auto& nudge = decision.nudge(); + const auto& box = ptr_obstacle->PerceptionBoundingBox(); + std::vector corners; + box.GetAllCorners(&corners); + if (!MapPolygon(corners, nudge, &static_obstacle_bound_)) { + AERROR << "fail to map polygon with id " << path_obstacle.Id() + << " in qp frenet frame"; + return false; + } + return true; +} + +bool QpFrenetFrame::MapPolygon( + const std::vector& corners, const ObjectNudge& nudge, + std::vector>* const bound_map) { + std::vector sl_corners; + + for (const auto& corner_xy : corners) { + common::SLPoint cur_point; + if (!reference_line_.XYToSL(corner_xy, &cur_point)) { + AERROR << "Fail to map xy point " << corner_xy.DebugString() << " to " + << cur_point.DebugString(); + return false; + } + // shift box base on buffer + cur_point.set_l(cur_point.l() + nudge.distance_l()); + sl_corners.push_back(std::move(cur_point)); + } + + const auto corner_size = sl_corners.size(); + for (uint32_t i = 0; i < corner_size; ++i) { + if (!MapLine(sl_corners[i % corner_size], sl_corners[(i + 1) % corner_size], + nudge.type(), bound_map)) { + AERROR << "Map box line (sl) " << sl_corners[i].DebugString() << "->" + << sl_corners[i + 1].DebugString(); + return false; + } + } + return true; +} + +bool QpFrenetFrame::MapLine( + const common::SLPoint& start, const common::SLPoint& end, + const ObjectNudge::Type nudge_type, + std::vector>* const constraint) { + const common::SLPoint& near_point = (start.s() < end.s() ? start : end); + const common::SLPoint& further_point = (start.s() < end.s() ? end : start); + std::pair impact_index = + FindInterval(near_point.s(), further_point.s()); + + if (further_point.s() < start_s_ - vehicle_param_.back_edge_to_center() || + near_point.s() > end_s_ + vehicle_param_.front_edge_to_center()) { + return true; + } + + const double distance = + std::max(further_point.s() - near_point.s(), common::math::kMathEpsilon); + const double adc_half_width = vehicle_param_.width() / 2; + for (uint32_t i = impact_index.first; i <= impact_index.second; ++i) { + double weight = std::abs((evaluated_knots_[i] - near_point.s())) / distance; + weight = std::max(weight, 0.0); + weight = std::min(weight, 1.0); + double boundary = + near_point.l() * (1 - weight) + further_point.l() * weight; + + if (nudge_type == ObjectNudge::LEFT_NUDGE) { + boundary += adc_half_width; + (*constraint)[i].first = std::max(boundary, (*constraint)[i].first); + } else { + boundary -= adc_half_width; + (*constraint)[i].second = std::min(boundary, (*constraint)[i].second); + } + + if ((*constraint)[i].second < (*constraint)[i].first + 0.3) { + if (i > 0) { + feasible_longitudinal_upper_bound_ = + std::min(evaluated_knots_[i - 1] - kEpsilontol, + feasible_longitudinal_upper_bound_); + } else { + feasible_longitudinal_upper_bound_ = start_s_; + return true; + } + + ADEBUG << "current mapping constraint, sl point impact index " + << "near_point: " << near_point.DebugString() + << "further_point: " << further_point.DebugString() + << "impact_index: " << impact_index << "(*constraint)[" << i << "]" + << (*constraint)[i]; + break; + } + } + + return true; +} + +std::pair QpFrenetFrame::MapLateralConstraint( + const common::SLPoint& start, const common::SLPoint& end, + const ObjectNudge::Type nudge_type, const double s_start, + const double s_end) { + const double inf = std::numeric_limits::infinity(); + std::pair result = std::make_pair(-inf, inf); + + if (start.s() > s_end || end.s() < s_start) { + return result; + } + double s_front = std::max(start.s(), s_start); + double s_back = std::min(end.s(), s_end); + + double weight_back = 0.0; + double weight_front = 0.0; + + if (Double::Compare((end.s() - start.s()), 0.0) > 0) { + weight_back = (s_back - end.s()) / (end.s() - start.s()); + weight_front = (s_front - start.s()) / (end.s() - start.s()); + } + + common::SLPoint front = util::interpolate(start, end, weight_front); + common::SLPoint back = util::interpolate(start, end, weight_back); + + if (nudge_type == ObjectNudge::RIGHT_NUDGE) { + result.second = std::min(front.l(), back.l()); + } else { + result.first = std::max(front.l(), back.l()); + } + return result; +} + +std::pair QpFrenetFrame::FindInterval( + const double start, const double end) const { + double new_start = std::max(start - vehicle_param_.front_edge_to_center(), + evaluated_knots_.front()); + double new_end = std::min(end + vehicle_param_.back_edge_to_center(), + evaluated_knots_.back()); + uint32_t start_index = FindIndex(new_start); + uint32_t end_index = FindIndex(new_end); + + if (end > evaluated_knots_[end_index] && + end_index + 1 != evaluated_knots_.size()) { + end_index++; + } + + return std::make_pair(start_index, end_index); +} + +void QpFrenetFrame::CalculateHDMapBound() { + const double adc_half_width = vehicle_param_.width() / 2.0; + for (uint32_t i = 0; i < hdmap_bound_.size(); ++i) { + double left_bound = 0.0; + double right_bound = 0.0; + bool suc = reference_line_.GetLaneWidth(evaluated_knots_[i], &left_bound, + &right_bound); + if (!suc) { + AWARN << "Extracting lane width failed at s = " << evaluated_knots_[i]; + right_bound = FLAGS_default_reference_line_width / 2; + left_bound = FLAGS_default_reference_line_width / 2; + } + + hdmap_bound_[i].first = -right_bound + adc_half_width; + hdmap_bound_[i].second = left_bound - adc_half_width; + + if (hdmap_bound_[i].first >= hdmap_bound_[i].second) { + ADEBUG << "HD Map bound at " << evaluated_knots_[i] << " is infeasible (" + << hdmap_bound_[i].first << ", " << hdmap_bound_[i].second << ") " + << std::endl; + ADEBUG << "left_bound: " << left_bound; + ADEBUG << "right_bound: " << right_bound; + feasible_longitudinal_upper_bound_ = + std::min(evaluated_knots_[i], feasible_longitudinal_upper_bound_); + common::SLPoint sl; + sl.set_s(evaluated_knots_[i]); + common::math::Vec2d xy; + reference_line_.SLToXY(sl, &xy); + ADEBUG << "evaluated_knot x: " << std::fixed << xy.x() + << " y: " << xy.y(); + break; + } + } +} + +bool QpFrenetFrame::CalculateObstacleBound() { + for (const auto ptr_path_obstacle : path_obstacles_) { + if (!ptr_path_obstacle->HasLateralDecision()) { + continue; + } + if (ptr_path_obstacle->obstacle()->IsStatic()) { + if (!MapStaticObstacleWithDecision(*ptr_path_obstacle)) { + AERROR << "mapping obstacle with id [" << ptr_path_obstacle->Id() + << "] failed in qp frenet frame."; + return false; + } + } else { + if (!MapDynamicObstacleWithDecision(*ptr_path_obstacle)) { + AERROR << "mapping obstacle with id [" << ptr_path_obstacle->Id() + << "] failed in qp frenet frame."; + return false; + } + } + } + return true; +} + +bool QpFrenetFrame::GetBound( + const double s, const std::vector>& map_bound, + std::pair* const bound) const { + if (Double::Compare(s, start_s_, 1e-8) < 0 || + Double::Compare(s, end_s_, 1e-8) > 0) { + AERROR << "Evaluate s location " << s + << ", is out of trajectory frenet frame range (" << start_s_ << ", " + << end_s_ << ")"; + return false; + } + + // linear bound interpolation + uint32_t lower_index = FindIndex(s); + const double s_low = evaluated_knots_[lower_index]; + const double s_high = evaluated_knots_[lower_index + 1]; + double weight = Double::Compare(s_low, s_high, 1e-8) < 0 + ? (s - s_low) / (s_high - s_low) + : 0.0; + + double low_first = map_bound[lower_index].first; + double low_second = map_bound[lower_index].second; + double high_first = map_bound[lower_index + 1].first; + double high_second = map_bound[lower_index + 1].second; + + // If there is only one infinity in low and high point, then make it equal + // to the not inf one. + if (std::isinf(low_first) && !std::isinf(high_first)) { + low_first = high_first; + } else if (!std::isinf(low_first) && std::isinf(high_first)) { + high_first = low_first; + } + + if (std::isinf(low_second) && !std::isinf(high_second)) { + low_second = high_second; + } else if (!std::isinf(low_second) && std::isinf(high_second)) { + high_second = low_second; + } + + if (std::isinf(low_first)) { + bound->first = low_first; + } else { + bound->first = low_first * (1 - weight) + high_first * weight; + } + + if (std::isinf(low_second)) { + bound->second = low_second; + } else { + bound->second = low_second * (1 - weight) + high_second * weight; + } + return true; +} + +uint32_t QpFrenetFrame::FindIndex(const double s) const { + auto lower_bound = + std::lower_bound(evaluated_knots_.begin() + 1, evaluated_knots_.end(), s); + return std::min( + static_cast(evaluated_knots_.size() - 1), + static_cast(lower_bound - evaluated_knots_.begin())) - + 1; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/qp_spline_path/qp_frenet_frame.h b/modules/planning/tasks/qp_spline_path/qp_frenet_frame.h new file mode 100644 index 00000000000..ed4ff226ec7 --- /dev/null +++ b/modules/planning/tasks/qp_spline_path/qp_frenet_frame.h @@ -0,0 +1,121 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file qp_frenet_frame.h + * @brief: natural coordinate system + **/ + +#ifndef MODULES_PLANNING_TASKS_QP_SPLINE_PATH_QP_FRENET_FRAME_H_ +#define MODULES_PLANNING_TASKS_QP_SPLINE_PATH_QP_FRENET_FRAME_H_ + +#include +#include +#include + +#include "Eigen/Core" + +#include "modules/common/configs/proto/vehicle_config.pb.h" +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/planning/common/path_obstacle.h" +#include "modules/planning/common/speed/speed_data.h" +#include "modules/planning/proto/planning_internal.pb.h" +#include "modules/planning/reference_line/reference_line.h" + +namespace apollo { +namespace planning { + +class QpFrenetFrame { + public: + QpFrenetFrame(const ReferenceLine& reference_line, + const std::vector& path_obstacles, + const SpeedData& speed_data, + const common::FrenetFramePoint& init_frenet_point, + const double start_s, const double end_s, + const double time_resolution); + virtual ~QpFrenetFrame() = default; + + bool Init(const uint32_t num_points); + + void LogQpBound(apollo::planning_internal::Debug* planning_debug); + + bool GetMapBound(const double s, + std::pair* const bound) const; + + bool GetStaticObstacleBound(const double s, + std::pair* const bound) const; + + bool GetDynamicObstacleBound(const double s, + std::pair* const bound) const; + + private: + bool CalculateDiscretizedVehicleLocation(); + + bool MapDynamicObstacleWithDecision(const PathObstacle& path_obstacle); + + bool MapStaticObstacleWithDecision(const PathObstacle& path_obstacle); + + bool MapPolygon(const std::vector& corners, + const ObjectNudge& nudge, + std::vector>* const bound_map); + + bool MapLine(const common::SLPoint& start, const common::SLPoint& end, + const ObjectNudge::Type type, + std::vector>* const constraint); + + std::pair MapLateralConstraint( + const common::SLPoint& start, const common::SLPoint& end, + const ObjectNudge::Type nudge_type, const double s_start, + const double s_end); + + std::pair FindInterval(const double start, + const double end) const; + + void CalculateHDMapBound(); + + bool CalculateObstacleBound(); + + bool GetBound(const double s, + const std::vector>& map_bound, + std::pair* const bound) const; + + uint32_t FindIndex(const double s) const; + + private: + const ReferenceLine& reference_line_; + const std::vector& path_obstacles_; + const SpeedData& speed_data_; + + common::VehicleParam vehicle_param_; + common::FrenetFramePoint init_frenet_point_; + + double feasible_longitudinal_upper_bound_ = 0.0; + double start_s_ = 0.0; + double end_s_ = 0.0; + double time_resolution_ = 0.1; + + std::vector evaluated_knots_; + std::vector discretized_vehicle_location_; + std::vector> hdmap_bound_; + std::vector> static_obstacle_bound_; + std::vector> dynamic_obstacle_bound_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_QP_SPLINE_PATH_QP_FRENET_FRAME_H_ diff --git a/modules/planning/tasks/qp_spline_path/qp_spline_path_generator.cc b/modules/planning/tasks/qp_spline_path/qp_spline_path_generator.cc new file mode 100644 index 00000000000..67b28a1d638 --- /dev/null +++ b/modules/planning/tasks/qp_spline_path/qp_spline_path_generator.cc @@ -0,0 +1,374 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file qp_spline_path_generator.cc + **/ +#include +#include +#include + +#include "modules/planning/tasks/qp_spline_path/qp_spline_path_generator.h" + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/common/log.h" +#include "modules/common/macro.h" +#include "modules/common/util/string_util.h" +#include "modules/common/util/util.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/math/double.h" +#include "modules/planning/math/frame_conversion/cartesian_frenet_conversion.h" + +namespace apollo { +namespace planning { + +using Vec2d = apollo::common::math::Vec2d; + +QpSplinePathGenerator::QpSplinePathGenerator( + const ReferenceLine& reference_line, + const QpSplinePathConfig& qp_spline_path_config) + : reference_line_(reference_line), + qp_spline_path_config_(qp_spline_path_config) { + CHECK_GE(qp_spline_path_config_.regularization_weight(), 0.0) + << "regularization_weight should NOT be negative."; + CHECK_GE(qp_spline_path_config_.derivative_weight(), 0.0) + << "derivative_weight should NOT be negative."; + CHECK_GE(qp_spline_path_config_.second_derivative_weight(), 0.0) + << "second_derivative_weight should NOT be negative."; + CHECK_GE(qp_spline_path_config_.third_derivative_weight(), 0.0) + << "third_derivative_weight should NOT be negative."; +} + +void QpSplinePathGenerator::SetDebugLogger( + apollo::planning_internal::Debug* debug) { + planning_debug_ = debug; +} + +bool QpSplinePathGenerator::Generate( + const std::vector& path_obstacles, + const SpeedData& speed_data, const common::TrajectoryPoint& init_point, + PathData* const path_data) { + if (!CalculateInitFrenetPoint(init_point, &init_frenet_point_)) { + AERROR << "Fail to map init point: " << init_point.ShortDebugString(); + return false; + } + double start_s = init_frenet_point_.s(); + double end_s = reference_line_.Length(); + + QpFrenetFrame qp_frenet_frame(reference_line_, path_obstacles, speed_data, + init_frenet_point_, start_s, end_s, + qp_spline_path_config_.time_resolution()); + if (!qp_frenet_frame.Init(qp_spline_path_config_.num_output())) { + AERROR << "Fail to initialize qp frenet frame"; + return false; + } + qp_frenet_frame.LogQpBound(planning_debug_); + + ADEBUG << "pss path start with " << start_s << ", end with " << end_s; + + if (!InitSpline(start_s, end_s)) { + AERROR << "Init smoothing spline failed with (" << start_s << ", end_s " + << end_s; + return false; + } + + if (!AddConstraint(qp_frenet_frame)) { + AERROR << "Fail to setup pss path constraint."; + return false; + } + + AddKernel(); + + if (!Solve()) { + AERROR << "Fail to solve the qp problem."; + return false; + } + + ADEBUG << common::util::StrCat("Spline dl:", init_frenet_point_.dl(), + ", ddl:", init_frenet_point_.ddl()); + + // extract data + const Spline1d& spline = spline_generator_->spline(); + std::vector path_points; + + double start_l = spline(init_frenet_point_.s()); + ReferencePoint ref_point = + reference_line_.GetReferencePoint(init_frenet_point_.s()); + Vec2d xy_point = CartesianFrenetConverter::CalculateCartesianPoint( + ref_point.heading(), Vec2d(ref_point.x(), ref_point.y()), start_l); + + double x_diff = xy_point.x() - init_point.path_point().x(); + double y_diff = xy_point.y() - init_point.path_point().y(); + + double s = init_frenet_point_.s(); + double s_resolution = + (end_s - init_frenet_point_.s()) / qp_spline_path_config_.num_output(); + while (Double::Compare(s, end_s) < 0) { + double l = spline(s); + if (planning_debug_ && + planning_debug_->planning_data().sl_frame().size() >= 1) { + auto sl_point = planning_debug_->mutable_planning_data() + ->mutable_sl_frame(0) + ->mutable_sl_path() + ->Add(); + sl_point->set_l(l); + sl_point->set_s(s); + } + double dl = spline.Derivative(s); + double ddl = spline.SecondOrderDerivative(s); + ReferencePoint ref_point = reference_line_.GetReferencePoint(s); + Vec2d curr_xy_point = CartesianFrenetConverter::CalculateCartesianPoint( + ref_point.heading(), Vec2d(ref_point.x(), ref_point.y()), l); + curr_xy_point.set_x(curr_xy_point.x() - x_diff); + curr_xy_point.set_y(curr_xy_point.y() - y_diff); + double theta = CartesianFrenetConverter::CalculateTheta( + ref_point.heading(), ref_point.kappa(), l, dl); + double kappa = CartesianFrenetConverter::CalculateKappa( + ref_point.kappa(), ref_point.dkappa(), l, dl, ddl); + common::PathPoint path_point = common::util::MakePathPoint( + curr_xy_point.x(), curr_xy_point.y(), 0.0, theta, kappa, 0.0, 0.0); + if (path_points.size() != 0) { + double distance = + common::util::Distance2D(path_points.back(), path_point); + path_point.set_s(path_points.back().s() + distance); + } + if (Double::Compare(path_point.s(), end_s) >= 0) { + break; + } + path_points.push_back(std::move(path_point)); + s += s_resolution; + } + path_data->SetReferenceLine(&reference_line_); + path_data->SetDiscretizedPath(DiscretizedPath(path_points)); + return true; +} + +bool QpSplinePathGenerator::CalculateInitFrenetPoint( + const common::TrajectoryPoint& traj_point, + common::FrenetFramePoint* const frenet_frame_point) { + common::SLPoint sl_point; + if (!reference_line_.XYToSL( + {traj_point.path_point().x(), traj_point.path_point().y()}, + &sl_point)) { + return false; + } + frenet_frame_point->set_s(sl_point.s()); + frenet_frame_point->set_l(sl_point.l()); + + const double theta = traj_point.path_point().theta(); + const double kappa = traj_point.path_point().kappa(); + const double l = frenet_frame_point->l(); + + ReferencePoint ref_point; + ref_point = reference_line_.GetReferencePoint(frenet_frame_point->s()); + + const double theta_ref = ref_point.heading(); + const double kappa_ref = ref_point.kappa(); + const double dkappa_ref = ref_point.dkappa(); + + const double dl = CartesianFrenetConverter::CalculateLateralDerivative( + theta_ref, theta, l, kappa_ref); + const double ddl = + CartesianFrenetConverter::CalculateSecondOrderLateralDerivative( + theta_ref, theta, kappa_ref, kappa, dkappa_ref, l); + frenet_frame_point->set_dl(dl); + frenet_frame_point->set_ddl(ddl); + return true; +} + +bool QpSplinePathGenerator::InitSpline(const double start_s, + const double end_s) { + // set knots + if (qp_spline_path_config_.number_of_knots() <= 1) { + AERROR << "Too few number of knots: " + << qp_spline_path_config_.number_of_knots(); + return false; + } + const double delta_s = + (end_s - start_s) / qp_spline_path_config_.number_of_knots(); + double curr_knot_s = start_s; + + for (uint32_t i = 0; i <= qp_spline_path_config_.number_of_knots(); + ++i, curr_knot_s = std::min(curr_knot_s + delta_s, end_s)) { + knots_.push_back(curr_knot_s); + } + + // spawn a new spline generator + spline_generator_.reset( + new Spline1dGenerator(knots_, qp_spline_path_config_.spline_order())); + + // set evaluated_s_ + std::uint32_t num_evaluated_s = + qp_spline_path_config_.number_of_fx_constraint_knots(); + if (num_evaluated_s <= 2) { + AERROR << "Too few evaluated positions. Suggest: > 2, current number: " + << num_evaluated_s; + return false; + } + const auto& x_knots = spline_generator_->spline().x_knots(); + const double back_s = x_knots.back(); + const double front_s = x_knots.front(); + const double ds = (back_s - front_s) / num_evaluated_s; + double curr_evaluated_s = front_s; + for (uint32_t i = 0; i < num_evaluated_s; + ++i, curr_evaluated_s = std::min(curr_evaluated_s + ds, back_s)) { + evaluated_s_.push_back(curr_evaluated_s); + } + + return true; +} + +bool QpSplinePathGenerator::AddConstraint( + const QpFrenetFrame& qp_frenet_frame) { + Spline1dConstraint* spline_constraint = + spline_generator_->mutable_spline_constraint(); + + // add init status constraint, equality constraint + spline_constraint->AddPointConstraint(init_frenet_point_.s(), + init_frenet_point_.l()); + spline_constraint->AddPointDerivativeConstraint(init_frenet_point_.s(), + init_frenet_point_.dl()); + spline_constraint->AddPointSecondDerivativeConstraint( + init_frenet_point_.s(), init_frenet_point_.ddl()); + + ADEBUG << "init frenet point: " << init_frenet_point_.ShortDebugString(); + + // add end point constraint, equality constraint + spline_constraint->AddPointConstraint(knots_.back(), 0.0); + + spline_constraint->AddPointDerivativeConstraint(knots_.back(), 0.0); + + spline_constraint->AddPointSecondDerivativeConstraint(knots_.back(), 0.0); + + // kappa bound is based on the inequality: + // kappa = d(phi)/ds <= d(phi)/dx = d2y/dx2 + std::vector kappa_lower_bound(evaluated_s_.size(), + -FLAGS_kappa_bound); + std::vector kappa_upper_bound(evaluated_s_.size(), FLAGS_kappa_bound); + if (!spline_constraint->AddSecondDerivativeBoundary( + evaluated_s_, kappa_lower_bound, kappa_upper_bound)) { + AERROR << "Fail to add second derivative boundary."; + return false; + } + + // add map bound constraint + const auto lateral_buf = qp_spline_path_config_.cross_lane_extension_buffer(); + std::vector boundary_low; + std::vector boundary_high; + for (const double s : evaluated_s_) { + std::pair road_boundary(0.0, 0.0); + std::pair static_obs_boundary(0.0, 0.0); + std::pair dynamic_obs_boundary(0.0, 0.0); + + qp_frenet_frame.GetMapBound(s, &road_boundary); + qp_frenet_frame.GetStaticObstacleBound(s, &static_obs_boundary); + qp_frenet_frame.GetDynamicObstacleBound(s, &dynamic_obs_boundary); + + road_boundary.first = + std::fmin(road_boundary.first, init_frenet_point_.l() - lateral_buf); + road_boundary.second = + std::fmax(road_boundary.second, init_frenet_point_.l() + lateral_buf); + + boundary_low.emplace_back(common::util::MaxElement( + std::vector{road_boundary.first, static_obs_boundary.first, + dynamic_obs_boundary.first})); + boundary_high.emplace_back(common::util::MinElement( + std::vector{road_boundary.second, static_obs_boundary.second, + dynamic_obs_boundary.second})); + + ADEBUG << "s:" << s << " boundary_low:" << boundary_low.back() + << " boundary_high:" << boundary_high.back() + << " road_boundary_low: " << road_boundary.first + << " road_boundary_high: " << road_boundary.second + << " static_obs_boundary_low: " << static_obs_boundary.first + << " static_obs_boundary_high: " << static_obs_boundary.second + << " dynamic_obs_boundary_low: " << dynamic_obs_boundary.first + << " dynamic_obs_boundary_high: " << dynamic_obs_boundary.second; + } + + if (planning_debug_) { + apollo::planning_internal::SLFrameDebug* sl_frame = + planning_debug_->mutable_planning_data()->mutable_sl_frame()->Add(); + for (size_t i = 0; i < evaluated_s_.size(); ++i) { + sl_frame->mutable_aggregated_boundary_s()->Add(evaluated_s_[i]); + sl_frame->mutable_aggregated_boundary_low()->Add(boundary_low[i]); + sl_frame->mutable_aggregated_boundary_high()->Add(boundary_high[i]); + } + } + + if (!spline_constraint->AddBoundary(evaluated_s_, boundary_low, + boundary_high)) { + AERROR << "Add boundary constraint failed"; + return false; + } + + // add spline joint third derivative constraint + if (!spline_constraint->AddThirdDerivativeSmoothConstraint()) { + AERROR << "Add spline joint third derivative constraint failed!"; + return false; + } + return true; +} + +void QpSplinePathGenerator::AddKernel() { + Spline1dKernel* spline_kernel = spline_generator_->mutable_spline_kernel(); + + if (qp_spline_path_config_.reference_line_weight() > 0.0) { + std::vector ref_l(evaluated_s_.size(), 0.0); + + DCHECK_EQ(evaluated_s_.size(), ref_l.size()); + spline_kernel->AddReferenceLineKernelMatrix( + evaluated_s_, ref_l, qp_spline_path_config_.reference_line_weight()); + } + + if (qp_spline_path_config_.regularization_weight() > 0.0) { + spline_kernel->AddRegularization( + qp_spline_path_config_.regularization_weight()); + } + + if (qp_spline_path_config_.derivative_weight() > 0.0) { + spline_kernel->AddDerivativeKernelMatrix( + qp_spline_path_config_.derivative_weight()); + } + + if (qp_spline_path_config_.second_derivative_weight() > 0.0) { + spline_kernel->AddSecondOrderDerivativeMatrix( + qp_spline_path_config_.second_derivative_weight()); + } + + if (qp_spline_path_config_.third_derivative_weight() > 0.0) { + spline_kernel->AddThirdOrderDerivativeMatrix( + qp_spline_path_config_.third_derivative_weight()); + } +} + +bool QpSplinePathGenerator::Solve() { + if (!spline_generator_->Solve()) { + for (size_t i = 0; i < knots_.size(); ++i) { + AERROR << "knots_[" << i << "]: " << knots_[i]; + } + for (size_t i = 0; i < evaluated_s_.size(); ++i) { + AERROR << "evaluated_s_[" << i << "]: " << evaluated_s_[i]; + } + AERROR << "Could not solve the qp problem in spline path generator."; + return false; + } + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/qp_spline_path/qp_spline_path_generator.h b/modules/planning/tasks/qp_spline_path/qp_spline_path_generator.h new file mode 100644 index 00000000000..a3e66d2ee6a --- /dev/null +++ b/modules/planning/tasks/qp_spline_path/qp_spline_path_generator.h @@ -0,0 +1,81 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file qp_spline_path_generator.h + **/ + +#ifndef MODULES_PLANNING_TASKS_QP_SPLINE_PATH_QP_SPLINE_PATH_GENERATOR_H_ +#define MODULES_PLANNING_TASKS_QP_SPLINE_PATH_QP_SPLINE_PATH_GENERATOR_H_ + +#include +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/proto/planning_internal.pb.h" +#include "modules/planning/proto/qp_spline_path_config.pb.h" + +#include "modules/planning/common/path/path_data.h" +#include "modules/planning/common/path_decision.h" +#include "modules/planning/common/path_obstacle.h" +#include "modules/planning/common/speed/speed_data.h" +#include "modules/planning/math/smoothing_spline/spline_1d_generator.h" +#include "modules/planning/tasks/qp_spline_path/qp_frenet_frame.h" + +namespace apollo { +namespace planning { + +class QpSplinePathGenerator { + public: + QpSplinePathGenerator(const ReferenceLine& reference_line, + const QpSplinePathConfig& qp_spline_path_config); + + void SetDebugLogger(apollo::planning_internal::Debug* debug); + + bool Generate(const std::vector& obstacles, + const SpeedData& speed_data, + const common::TrajectoryPoint& init_point, + PathData* const path_data); + + private: + bool CalculateInitFrenetPoint(const common::TrajectoryPoint& traj_point, + common::FrenetFramePoint* const sl_point); + + bool InitSpline(const double start_s, const double end_s); + + bool AddConstraint(const QpFrenetFrame& qp_frenet_frame); + + void AddKernel(); + + bool Solve(); + + private: + apollo::planning_internal::Debug* planning_debug_ = nullptr; + const ReferenceLine& reference_line_; + const QpSplinePathConfig& qp_spline_path_config_; + + common::FrenetFramePoint init_frenet_point_; + std::unique_ptr spline_generator_; + + std::vector knots_; + std::vector evaluated_s_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_QP_SPLINE_PATH_QP_SPLINE_PATH_GENERATOR_H_ diff --git a/modules/planning/tasks/qp_spline_path/qp_spline_path_optimizer.cc b/modules/planning/tasks/qp_spline_path/qp_spline_path_optimizer.cc new file mode 100644 index 00000000000..d55a0635877 --- /dev/null +++ b/modules/planning/tasks/qp_spline_path/qp_spline_path_optimizer.cc @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file qp_spline_path_optimizer.cc + **/ +#include "modules/planning/tasks/qp_spline_path/qp_spline_path_optimizer.h" + +#include "modules/common/util/file.h" +#include "modules/common/util/util.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/tasks/qp_spline_path/qp_spline_path_generator.h" + +namespace apollo { +namespace planning { + +using apollo::common::ErrorCode; +using apollo::common::Status; + +QpSplinePathOptimizer::QpSplinePathOptimizer() + : PathOptimizer("QpSplinePathOptimizer") {} + +bool QpSplinePathOptimizer::Init(const PlanningConfig& config) { + qp_spline_path_config_ = config.em_planner_config().qp_spline_path_config(); + is_init_ = true; + return true; +} + +Status QpSplinePathOptimizer::Process(const SpeedData& speed_data, + const ReferenceLine& reference_line, + const common::TrajectoryPoint& init_point, + PathData* const path_data) { + if (!is_init_) { + AERROR << "Please call Init() before Process."; + return Status(ErrorCode::PLANNING_ERROR, "Not init."); + } + QpSplinePathGenerator path_generator(reference_line, qp_spline_path_config_); + path_generator.SetDebugLogger(frame_->DebugLogger()); + + if (!path_generator.Generate( + reference_line_info_->path_decision()->path_obstacles().Items(), + speed_data, init_point, path_data)) { + const std::string msg = "failed to generate spline path!"; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + return Status::OK(); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/qp_spline_path/qp_spline_path_optimizer.h b/modules/planning/tasks/qp_spline_path/qp_spline_path_optimizer.h new file mode 100644 index 00000000000..fd0ed3e9656 --- /dev/null +++ b/modules/planning/tasks/qp_spline_path/qp_spline_path_optimizer.h @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file qp_path_optimizer.h + **/ + +#ifndef MODULES_PLANNING_TASKS_QP_SPLINE_PATH_QP_SPLINE_PATH_OPTIMIZER_H_ +#define MODULES_PLANNING_TASKS_QP_SPLINE_PATH_QP_SPLINE_PATH_OPTIMIZER_H_ + +#include +#include +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/proto/qp_spline_path_config.pb.h" + +#include "modules/planning/proto/planning_config.pb.h" +#include "modules/planning/tasks/path_optimizer.h" + +namespace apollo { +namespace planning { + +class QpSplinePathOptimizer : public PathOptimizer { + public: + QpSplinePathOptimizer(); + bool Init(const PlanningConfig& config) override; + + private: + apollo::common::Status Process(const SpeedData& speed_data, + const ReferenceLine& reference_line, + const common::TrajectoryPoint& init_point, + PathData* const path_data) override; + + private: + QpSplinePathConfig qp_spline_path_config_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_QP_SPLINE_PATH_QP_PATH_OPTIMIZER_H_ diff --git a/modules/planning/tasks/qp_spline_st_speed/BUILD b/modules/planning/tasks/qp_spline_st_speed/BUILD new file mode 100644 index 00000000000..1330b0ad804 --- /dev/null +++ b/modules/planning/tasks/qp_spline_st_speed/BUILD @@ -0,0 +1,49 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "qp_spline_st_graph", + srcs = [ + "qp_spline_st_graph.cc", + ], + hdrs = [ + "qp_spline_st_graph.h", + ], + deps = [ + "//modules/common:log", + "//modules/common/configs/proto:vehicle_config_proto", + "//modules/common/math", + "//modules/common/proto:error_code_proto", + "//modules/common/proto:pnc_point_proto", + "//modules/common/util", + "//modules/planning/common:planning_util", + "//modules/planning/math/smoothing_spline:spline_1d_generator", + "//modules/planning/tasks/st_graph:st_boundary_mapper", + "//modules/planning/tasks/st_graph:st_graph_data", + ], +) + +cc_library( + name = "qp_spline_st_speed_optimizer", + srcs = [ + "qp_spline_st_speed_optimizer.cc", + ], + hdrs = [ + "qp_spline_st_speed_optimizer.h", + ], + deps = [ + ":qp_spline_st_graph", + "//modules/common:log", + "//modules/common/configs:vehicle_config_helper", + "//modules/common/configs/proto:vehicle_config_proto", + "//modules/common/proto:pnc_point_proto", + "//modules/localization/proto:pose_proto", + "//modules/map/hdmap", + "//modules/planning/proto:planning_proto", + "//modules/planning/tasks:speed_optimizer", + "//modules/planning/tasks/st_graph:st_boundary_mapper", + ], +) + +cpplint() diff --git a/modules/planning/tasks/qp_spline_st_speed/qp_spline_st_graph.cc b/modules/planning/tasks/qp_spline_st_speed/qp_spline_st_graph.cc new file mode 100644 index 00000000000..0df82a3431f --- /dev/null +++ b/modules/planning/tasks/qp_spline_st_speed/qp_spline_st_graph.cc @@ -0,0 +1,511 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file qp_spline_st_graph.cc + **/ + +#include "modules/planning/tasks/qp_spline_st_speed/qp_spline_st_graph.h" + +#include +#include +#include +#include + +#include "modules/common/log.h" +#include "modules/planning/common/planning_gflags.h" + +namespace apollo { +namespace planning { + +using apollo::common::ErrorCode; +using apollo::common::Status; +using apollo::common::VehicleParam; +using apollo::planning_internal::STGraphDebug; + +QpSplineStGraph::QpSplineStGraph( + const QpSplineStSpeedConfig& qp_spline_st_speed_config, + const VehicleParam& veh_param) + : qp_spline_st_speed_config_(qp_spline_st_speed_config), + t_knots_resolution_( + qp_spline_st_speed_config_.total_time() / + qp_spline_st_speed_config_.number_of_discrete_graph_t()), + t_evaluated_resolution_( + qp_spline_st_speed_config_.total_time() / + qp_spline_st_speed_config_.number_of_evaluated_graph_t()) { + Init(); +} + +void QpSplineStGraph::Init() { + // init knots + double curr_t = 0.0; + for (uint32_t i = 0; + i <= qp_spline_st_speed_config_.number_of_discrete_graph_t(); ++i) { + t_knots_.push_back(curr_t); + curr_t += t_knots_resolution_; + } + + // init evaluated t positions + curr_t = 0; + for (uint32_t i = 0; + i <= qp_spline_st_speed_config_.number_of_evaluated_graph_t(); ++i) { + t_evaluated_.push_back(curr_t); + curr_t += t_evaluated_resolution_; + } +} + +void QpSplineStGraph::SetDebugLogger( + planning_internal::STGraphDebug* st_graph_debug) { + if (st_graph_debug) { + st_graph_debug->Clear(); + st_graph_debug_ = st_graph_debug; + } +} + +Status QpSplineStGraph::Search(const StGraphData& st_graph_data, + SpeedData* const speed_data, + const std::pair& accel_bound) { + cruise_.clear(); + + // reset spline generator + spline_generator_.reset(new Spline1dGenerator( + t_knots_, qp_spline_st_speed_config_.spline_order())); + + // start to search for best st points + init_point_ = st_graph_data.init_point(); + if (st_graph_data.path_data_length() < + qp_spline_st_speed_config_.total_path_length()) { + qp_spline_st_speed_config_.set_total_path_length( + st_graph_data.path_data_length()); + } + + if (!ApplyConstraint(st_graph_data.init_point(), st_graph_data.speed_limit(), + st_graph_data.st_boundaries(), accel_bound) + .ok()) { + const std::string msg = "Apply constraint failed!"; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + if (!ApplyKernel(st_graph_data.st_boundaries(), st_graph_data.speed_limit()) + .ok()) { + const std::string msg = "Apply kernel failed!"; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + if (!Solve().ok()) { + const std::string msg = "Solve qp problem failed!"; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + // extract output + speed_data->Clear(); + const Spline1d& spline = spline_generator_->spline(); + + double t_output_resolution = + qp_spline_st_speed_config_.output_time_resolution(); + double time = 0.0; + while (time < qp_spline_st_speed_config_.total_time() + t_output_resolution) { + double s = spline(time); + double v = spline.Derivative(time); + double a = spline.SecondOrderDerivative(time); + double da = spline.ThirdOrderDerivative(time); + speed_data->AppendSpeedPoint(s, time, v, a, da); + time += t_output_resolution; + } + + return Status::OK(); +} + +Status QpSplineStGraph::ApplyConstraint( + const common::TrajectoryPoint& init_point, const SpeedLimit& speed_limit, + const std::vector& boundaries, + const std::pair& accel_bound) { + Spline1dConstraint* constraint = + spline_generator_->mutable_spline_constraint(); + // position, velocity, acceleration + + if (!constraint->AddPointConstraint(0.0, 0.0)) { + const std::string msg = "add st start point constraint failed"; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + ADEBUG << "init point constraint:" << init_point.DebugString(); + if (!constraint->AddPointDerivativeConstraint(0.0, init_point_.v())) { + const std::string msg = "add st start point velocity constraint failed!"; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + if (!constraint->AddPointSecondDerivativeConstraint( + spline_generator_->spline().x_knots().back(), 0.0)) { + const std::string msg = "add st end point acceleration constraint failed!"; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + // monotone constraint + if (!constraint->AddMonotoneInequalityConstraintAtKnots()) { + const std::string msg = "add monotone inequality constraint failed!"; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + // smoothness constraint + if (!constraint->AddSecondDerivativeSmoothConstraint()) { + const std::string msg = "add smoothness joint constraint failed!"; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + // boundary constraint + std::vector s_upper_bound; + std::vector s_lower_bound; + + for (const double curr_t : t_evaluated_) { + double lower_s = 0.0; + double upper_s = 0.0; + GetSConstraintByTime(boundaries, curr_t, + qp_spline_st_speed_config_.total_path_length(), + &upper_s, &lower_s); + s_upper_bound.push_back(upper_s); + s_lower_bound.push_back(lower_s); + ADEBUG << "Add constraint by time: " << curr_t << " upper_s: " << upper_s + << " lower_s: " << lower_s; + } + + DCHECK_EQ(t_evaluated_.size(), s_lower_bound.size()); + DCHECK_EQ(t_evaluated_.size(), s_upper_bound.size()); + if (!constraint->AddBoundary(t_evaluated_, s_lower_bound, s_upper_bound)) { + const std::string msg = "Fail to apply distance constraints."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + // speed constraint + std::vector speed_upper_bound; + if (!EstimateSpeedUpperBound(init_point, speed_limit, &speed_upper_bound) + .ok()) { + std::string msg = "Fail to estimate speed upper constraints."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + std::vector speed_lower_bound(t_evaluated_.size(), 0.0); + + DCHECK_EQ(t_evaluated_.size(), speed_upper_bound.size()); + DCHECK_EQ(t_evaluated_.size(), speed_lower_bound.size()); + + if (st_graph_debug_) { + for (size_t i = 0; i < t_evaluated_.size(); ++i) { + auto speed_constraint = + st_graph_debug_->mutable_speed_constraint()->Add(); + speed_constraint->add_t(t_evaluated_[i]); + speed_constraint->add_lower_bound(speed_lower_bound[i]); + speed_constraint->add_upper_bound(speed_upper_bound[i]); + } + } + + if (!constraint->AddDerivativeBoundary(t_evaluated_, speed_lower_bound, + speed_upper_bound)) { + const std::string msg = "Fail to apply speed constraints."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + for (size_t i = 0; i < t_evaluated_.size(); ++i) { + ADEBUG << "t_evaluated_: " << t_evaluated_[i] + << "; speed_lower_bound: " << speed_lower_bound[i] + << "; speed_upper_bound: " << speed_upper_bound[i]; + } + + // acceleration constraint + std::vector accel_lower_bound(t_evaluated_.size(), accel_bound.first); + std::vector accel_upper_bound(t_evaluated_.size(), + accel_bound.second); + + bool has_follow = false; + double delta_s = 1.0; + for (const auto& boundary : boundaries) { + if (boundary.boundary_type() == StBoundary::BoundaryType::FOLLOW) { + has_follow = true; + delta_s = std::fmin( + delta_s, boundary.min_s() - fabs(boundary.characteristic_length())); + } + } + if (FLAGS_enable_follow_accel_constraint && has_follow && delta_s < 0.0) { + accel_upper_bound.front() = 0.0; + } else { + constexpr double kInitPointAccelRelaxedSpeed = 1.0; + + if (init_point_.v() > kInitPointAccelRelaxedSpeed) { + constexpr double kInitPointAccelRelaxedRange = 0.25; + accel_lower_bound.front() = init_point_.a() - kInitPointAccelRelaxedRange; + accel_upper_bound.front() = init_point_.a() + kInitPointAccelRelaxedRange; + } + } + + DCHECK_EQ(t_evaluated_.size(), accel_lower_bound.size()); + DCHECK_EQ(t_evaluated_.size(), accel_upper_bound.size()); + if (!constraint->AddSecondDerivativeBoundary(t_evaluated_, accel_lower_bound, + accel_upper_bound)) { + const std::string msg = "Fail to apply acceleration constraints."; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + for (size_t i = 0; i < t_evaluated_.size(); ++i) { + ADEBUG << "t_evaluated_: " << t_evaluated_[i] + << "; accel_lower_bound: " << accel_lower_bound[i] + << "; accel_upper_bound: " << accel_upper_bound[i]; + } + + return Status::OK(); +} + +Status QpSplineStGraph::ApplyKernel(const std::vector& boundaries, + const SpeedLimit& speed_limit) { + Spline1dKernel* spline_kernel = spline_generator_->mutable_spline_kernel(); + + if (qp_spline_st_speed_config_.accel_kernel_weight() > 0) { + spline_kernel->AddSecondOrderDerivativeMatrix( + qp_spline_st_speed_config_.accel_kernel_weight()); + } + + if (qp_spline_st_speed_config_.jerk_kernel_weight() > 0) { + spline_kernel->AddThirdOrderDerivativeMatrix( + qp_spline_st_speed_config_.jerk_kernel_weight()); + } + + if (!AddCruiseReferenceLineKernel(speed_limit, + qp_spline_st_speed_config_.cruise_weight()) + .ok()) { + return Status(ErrorCode::PLANNING_ERROR, "QpSplineStGraph::ApplyKernel"); + } + + if (!AddFollowReferenceLineKernel(boundaries, + qp_spline_st_speed_config_.follow_weight()) + .ok()) { + return Status(ErrorCode::PLANNING_ERROR, "QpSplineStGraph::ApplyKernel"); + } + return Status::OK(); +} + +Status QpSplineStGraph::Solve() { + return spline_generator_->Solve() + ? Status::OK() + : Status(ErrorCode::PLANNING_ERROR, "QpSplineStGraph::solve"); +} + +Status QpSplineStGraph::AddCruiseReferenceLineKernel( + const SpeedLimit& speed_limit, const double weight) { + auto* spline_kernel = spline_generator_->mutable_spline_kernel(); + if (speed_limit.speed_limit_points().size() == 0) { + std::string msg = "Fail to apply_kernel due to empty speed limits."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + double dist_ref = 0.0; + cruise_.push_back(dist_ref); + for (uint32_t i = 1; i < t_evaluated_.size(); ++i) { + dist_ref += (t_evaluated_[i] - t_evaluated_[i - 1]) * + speed_limit.GetSpeedLimitByS(dist_ref); + cruise_.push_back(dist_ref); + } + if (st_graph_debug_) { + auto kernel_cruise_ref = st_graph_debug_->mutable_kernel_cruise_ref(); + kernel_cruise_ref->mutable_t()->Add(t_evaluated_[0]); + kernel_cruise_ref->mutable_cruise_line_s()->Add(dist_ref); + for (uint32_t i = 1; i < t_evaluated_.size(); ++i) { + kernel_cruise_ref->mutable_t()->Add(t_evaluated_[i]); + kernel_cruise_ref->mutable_cruise_line_s()->Add(cruise_[i]); + } + } + DCHECK_EQ(t_evaluated_.size(), cruise_.size()); + + for (std::size_t i = 0; i < t_evaluated_.size(); ++i) { + ADEBUG << "Cruise Ref S: " << cruise_[i] + << " Relative time: " << t_evaluated_[i] << std::endl; + } + + if (t_evaluated_.size() > 0) { + spline_kernel->AddReferenceLineKernelMatrix( + t_evaluated_, cruise_, + weight * qp_spline_st_speed_config_.total_time() / t_evaluated_.size()); + } + spline_kernel->AddRegularization(0.01); + return Status::OK(); +} + +Status QpSplineStGraph::AddFollowReferenceLineKernel( + const std::vector& boundaries, const double weight) { + auto* spline_kernel = spline_generator_->mutable_spline_kernel(); + std::vector ref_s; + std::vector filtered_evaluate_t; + for (size_t i = 0; i < t_evaluated_.size(); ++i) { + const double curr_t = t_evaluated_[i]; + double s_min = std::numeric_limits::infinity(); + bool success = false; + for (const auto& boundary : boundaries) { + if (boundary.boundary_type() != StBoundary::BoundaryType::FOLLOW) { + continue; + } + if (curr_t < boundary.min_t() || curr_t > boundary.max_t()) { + continue; + } + double s_upper = 0.0; + double s_lower = 0.0; + if (boundary.GetUnblockSRange(curr_t, &s_upper, &s_lower)) { + success = true; + s_min = std::min(s_min, + s_upper - boundary.characteristic_length() - + qp_spline_st_speed_config_.follow_drag_distance()); + } + } + if (success && s_min < cruise_[i]) { + filtered_evaluate_t.push_back(curr_t); + ref_s.push_back(s_min); + if (st_graph_debug_) { + auto kernel_follow_ref = st_graph_debug_->mutable_kernel_follow_ref(); + kernel_follow_ref->mutable_t()->Add(curr_t); + kernel_follow_ref->mutable_follow_line_s()->Add(s_min); + } + } + } + DCHECK_EQ(filtered_evaluate_t.size(), ref_s.size()); + + if (!ref_s.empty()) { + spline_kernel->AddReferenceLineKernelMatrix( + filtered_evaluate_t, ref_s, + weight * qp_spline_st_speed_config_.total_time() / t_evaluated_.size()); + } + + for (std::size_t i = 0; i < filtered_evaluate_t.size(); ++i) { + ADEBUG << "Follow Ref S: " << ref_s[i] + << " Relative time: " << filtered_evaluate_t[i] << std::endl; + } + return Status::OK(); +} + +Status QpSplineStGraph::GetSConstraintByTime( + const std::vector& boundaries, const double time, + const double total_path_s, double* const s_upper_bound, + double* const s_lower_bound) const { + *s_upper_bound = total_path_s; + + for (const StBoundary& boundary : boundaries) { + double s_upper = 0.0; + double s_lower = 0.0; + + if (!boundary.GetUnblockSRange(time, &s_upper, &s_lower)) { + continue; + } + + if (boundary.boundary_type() == StBoundary::BoundaryType::STOP || + boundary.boundary_type() == StBoundary::BoundaryType::FOLLOW || + boundary.boundary_type() == StBoundary::BoundaryType::YIELD) { + *s_upper_bound = std::fmin(*s_upper_bound, s_upper); + } else { + DCHECK(boundary.boundary_type() == StBoundary::BoundaryType::OVERTAKE); + *s_lower_bound = std::fmax(*s_lower_bound, s_lower); + } + } + + return Status::OK(); +} + +Status QpSplineStGraph::EstimateSpeedUpperBound( + const common::TrajectoryPoint& init_point, const SpeedLimit& speed_limit, + std::vector* speed_upper_bound) const { + DCHECK_NOTNULL(speed_upper_bound); + + speed_upper_bound->clear(); + + // use v to estimate position: not accurate, but feasible in cyclic + // processing. We can do the following process multiple times and use + // previous cycle's results for better estimation. + const double v = init_point.v(); + + if (static_cast(t_evaluated_.size() + + speed_limit.speed_limit_points().size()) < + t_evaluated_.size() * std::log(static_cast( + speed_limit.speed_limit_points().size()))) { + uint32_t i = 0; + uint32_t j = 0; + const double kDistanceEpsilon = 1e-6; + while (i < t_evaluated_.size() && + j + 1 < speed_limit.speed_limit_points().size()) { + const double distance = v * t_evaluated_[i]; + if (fabs(distance - speed_limit.speed_limit_points()[j].first) < + kDistanceEpsilon) { + speed_upper_bound->push_back( + speed_limit.speed_limit_points()[j].second); + ++i; + ADEBUG << "speed upper bound:" << speed_upper_bound->back(); + } else if (distance < speed_limit.speed_limit_points()[j].first) { + ++i; + } else if (distance <= speed_limit.speed_limit_points()[j + 1].first) { + speed_upper_bound->push_back(speed_limit.GetSpeedLimitByS(distance)); + ADEBUG << "speed upper bound:" << speed_upper_bound->back(); + ++i; + } else { + ++j; + } + } + + for (uint32_t k = speed_upper_bound->size(); k < t_evaluated_.size(); ++k) { + speed_upper_bound->push_back(qp_spline_st_speed_config_.max_speed()); + ADEBUG << "speed upper bound:" << speed_upper_bound->back(); + } + } else { + auto cmp = [](const std::pair& p1, const double s) { + return p1.first < s; + }; + + const auto& speed_limit_points = speed_limit.speed_limit_points(); + for (const double t : t_evaluated_) { + const double s = v * t; + + // NOTICE: we are using binary search here based on two assumptions: + // (1) The s in speed_limit_points increase monotonically. + // (2) The evaluated_t_.size() << number of speed_limit_points.size() + // + // If either of the two assumption is failed, a new algorithm must be + // used + // to replace the binary search. + + const auto& it = std::lower_bound(speed_limit_points.begin(), + speed_limit_points.end(), s, cmp); + if (it != speed_limit_points.end()) { + speed_upper_bound->push_back(it->second); + } else { + speed_upper_bound->push_back(speed_limit_points.back().second); + } + } + } + + const double kTimeBuffer = 2.0; + const double kSpeedBuffer = 0.1; + for (uint32_t k = 0; k < t_evaluated_.size() && t_evaluated_[k] < kTimeBuffer; + ++k) { + speed_upper_bound->at(k) = + std::fmax(init_point_.v() + kSpeedBuffer, speed_upper_bound->at(k)); + } + + return Status::OK(); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/qp_spline_st_speed/qp_spline_st_graph.h b/modules/planning/tasks/qp_spline_st_speed/qp_spline_st_graph.h new file mode 100644 index 00000000000..2911434107b --- /dev/null +++ b/modules/planning/tasks/qp_spline_st_speed/qp_spline_st_graph.h @@ -0,0 +1,121 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file qp_spline_st_graph.h + **/ + +#ifndef MODULES_PLANNING_TASKS_QP_SPLINE_ST_SPEED_QP_SPLINE_ST_GRAPH_H_ +#define MODULES_PLANNING_TASKS_QP_SPLINE_ST_SPEED_QP_SPLINE_ST_GRAPH_H_ + +#include +#include +#include + +#include "modules/common/configs/proto/vehicle_config.pb.h" +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/proto/qp_spline_st_speed_config.pb.h" + +#include "modules/common/status/status.h" +#include "modules/common/util/string_util.h" +#include "modules/planning/common/path/path_data.h" +#include "modules/planning/common/planning_util.h" +#include "modules/planning/common/speed/speed_data.h" +#include "modules/planning/common/speed/st_boundary.h" +#include "modules/planning/math/smoothing_spline/spline_1d_generator.h" +#include "modules/planning/tasks/st_graph/st_graph_data.h" + +namespace apollo { +namespace planning { + +class QpSplineStGraph { + public: + QpSplineStGraph(const QpSplineStSpeedConfig& qp_config, + const apollo::common::VehicleParam& veh_param); + + void SetDebugLogger(planning_internal::STGraphDebug* st_graph_debug); + + common::Status Search(const StGraphData& st_graph_data, + SpeedData* const speed_data, + const std::pair& accel_bound); + + private: + void Init(); + + // apply st graph constraint + common::Status ApplyConstraint(const common::TrajectoryPoint& init_point, + const SpeedLimit& speed_limit, + const std::vector& boundaries, + const std::pair& accel_bound); + + // apply objective function + common::Status ApplyKernel(const std::vector& boundaries, + const SpeedLimit& speed_limit); + + // solve + common::Status Solve(); + + // extract upper lower bound for constraint; + common::Status GetSConstraintByTime(const std::vector& boundaries, + const double time, + const double total_path_s, + double* const s_upper_bound, + double* const s_lower_bound) const; + + // generate reference speed profile + // common::Status ApplyReferenceSpeedProfile(); + common::Status AddCruiseReferenceLineKernel(const SpeedLimit& speed_limit, + const double weight); + + common::Status AddFollowReferenceLineKernel( + const std::vector& boundaries, const double weight); + + common::Status EstimateSpeedUpperBound( + const common::TrajectoryPoint& init_point, const SpeedLimit& speed_limit, + std::vector* speed_upper_bound) const; + + private: + // qp st configuration + QpSplineStSpeedConfig qp_spline_st_speed_config_; + + // initial status + common::TrajectoryPoint init_point_; + + // solver + std::unique_ptr spline_generator_ = nullptr; + + // t knots resolution + double t_knots_resolution_ = 0.0; + + // knots + std::vector t_knots_; + + // evaluated t resolution + double t_evaluated_resolution_ = 0.0; + + // evaluated points + std::vector t_evaluated_; + + // reference line kernel + std::vector cruise_; + + planning_internal::STGraphDebug* st_graph_debug_ = nullptr; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_QP_SPLINE_ST_SPEED_QP_SPLINE_ST_GRAPH_H_ diff --git a/modules/planning/tasks/qp_spline_st_speed/qp_spline_st_speed_optimizer.cc b/modules/planning/tasks/qp_spline_st_speed/qp_spline_st_speed_optimizer.cc new file mode 100644 index 00000000000..c97955c266c --- /dev/null +++ b/modules/planning/tasks/qp_spline_st_speed/qp_spline_st_speed_optimizer.cc @@ -0,0 +1,136 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file qp_spline_st_speed_optimizer.cc + **/ + +#include "modules/planning/tasks/qp_spline_st_speed/qp_spline_st_speed_optimizer.h" + +#include +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/util/file.h" +#include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/tasks/qp_spline_st_speed/qp_spline_st_graph.h" +#include "modules/planning/tasks/st_graph/st_graph_data.h" + +namespace apollo { +namespace planning { + +using apollo::common::ErrorCode; +using apollo::common::Status; +using apollo::common::TrajectoryPoint; +using apollo::planning_internal::STGraphDebug; + +QpSplineStSpeedOptimizer::QpSplineStSpeedOptimizer() + : SpeedOptimizer("QpSplineStSpeedOptimizer") {} + +bool QpSplineStSpeedOptimizer::Init(const PlanningConfig& config) { + qp_spline_st_speed_config_ = + config.em_planner_config().qp_spline_st_speed_config(); + st_boundary_config_ = qp_spline_st_speed_config_.st_boundary_config(); + is_init_ = true; + return true; +} + +Status QpSplineStSpeedOptimizer::Process(const SLBoundary& adc_sl_boundary, + const PathData& path_data, + const TrajectoryPoint& init_point, + const ReferenceLine& reference_line, + PathDecision* const path_decision, + SpeedData* const speed_data) { + if (!is_init_) { + AERROR << "Please call Init() before Process."; + return Status(ErrorCode::PLANNING_ERROR, "Not init."); + } + + if (path_data.discretized_path().NumOfPoints() == 0) { + std::string msg("Empty path data"); + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + StBoundaryMapper boundary_mapper( + reference_line_info_->pnc_map(), adc_sl_boundary, st_boundary_config_, + reference_line, path_data, qp_spline_st_speed_config_.total_path_length(), + qp_spline_st_speed_config_.total_time()); + + for (const auto* path_obstacle : path_decision->path_obstacles().Items()) { + DCHECK(path_obstacle->HasLongitudinalDecision()); + } + // step 1 get boundaries + std::vector boundaries; + if (boundary_mapper.GetGraphBoundary(*path_decision, &boundaries).code() == + ErrorCode::PLANNING_ERROR) { + return Status(ErrorCode::PLANNING_ERROR, + "Mapping obstacle for qp st speed optimizer failed!"); + } + + for (const auto& boundary : boundaries) { + ADEBUG << "QPST mapped boundary: " << boundary.DebugString() << std::endl; + DCHECK(boundary.boundary_type() != StBoundary::BoundaryType::UNKNOWN); + } + + SpeedLimit speed_limits; + if (boundary_mapper.GetSpeedLimits(&speed_limits) != Status::OK()) { + return Status(ErrorCode::PLANNING_ERROR, + "GetSpeedLimits for dp st speed optimizer failed!"); + } + + // step 2 perform graph search + const auto& veh_param = + common::VehicleConfigHelper::GetConfig().vehicle_param(); + QpSplineStGraph st_graph(qp_spline_st_speed_config_, veh_param); + + StGraphData st_graph_data(boundaries, init_point, speed_limits, + path_data.discretized_path().Length()); + + STGraphDebug* st_graph_debug = + frame_->DebugLogger()->mutable_planning_data()->add_st_graph(); + + std::pair accel_bound = { + qp_spline_st_speed_config_.preferred_min_deceleration(), + qp_spline_st_speed_config_.preferred_max_acceleration()}; + st_graph.SetDebugLogger(st_graph_debug); + auto ret = st_graph.Search(st_graph_data, speed_data, accel_bound); + if (ret != Status::OK()) { + AERROR << "Failed to solve with ideal acceleration conditions. Use " + "secondary choice instead."; + + accel_bound.first = qp_spline_st_speed_config_.min_deceleration(); + accel_bound.second = qp_spline_st_speed_config_.max_acceleration(); + ret = st_graph.Search(st_graph_data, speed_data, accel_bound); + + if (ret != Status::OK()) { + std::string msg = common::util::StrCat( + Name(), ":Failed to search graph with quadratic programming!"); + RecordSTGraphDebug(boundaries, speed_limits, *speed_data, st_graph_debug); + return Status(ErrorCode::PLANNING_ERROR, msg); + } + } + // record debug info + RecordSTGraphDebug(boundaries, speed_limits, *speed_data, st_graph_debug); + return Status::OK(); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/qp_spline_st_speed/qp_spline_st_speed_optimizer.h b/modules/planning/tasks/qp_spline_st_speed/qp_spline_st_speed_optimizer.h new file mode 100644 index 00000000000..f40e02431e6 --- /dev/null +++ b/modules/planning/tasks/qp_spline_st_speed/qp_spline_st_speed_optimizer.h @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#ifndef MODULES_PLANNING_TASKS_QP_SPLINE_ST_QP_SPLINE_ST_SPEED_OPTIMIZER_H_ +#define MODULES_PLANNING_TASKS_QP_SPLINE_ST_QP_SPLINE_ST_SPEED_OPTIMIZER_H_ + +#include +#include + +#include "modules/common/configs/proto/vehicle_config.pb.h" +#include "modules/planning/proto/qp_spline_st_speed_config.pb.h" +#include "modules/planning/proto/st_boundary_config.pb.h" + +#include "modules/planning/proto/planning_config.pb.h" +#include "modules/planning/tasks/speed_optimizer.h" +#include "modules/planning/tasks/st_graph/st_boundary_mapper.h" + +namespace apollo { +namespace planning { + +class QpSplineStSpeedOptimizer : public SpeedOptimizer { + public: + QpSplineStSpeedOptimizer(); + + bool Init(const PlanningConfig& config) override; + + private: + common::Status Process(const SLBoundary& adc_sl_boundary, + const PathData& path_data, + const apollo::common::TrajectoryPoint& init_point, + const ReferenceLine& reference_line, + PathDecision* const path_decision, + SpeedData* const speed_data) override; + + QpSplineStSpeedConfig qp_spline_st_speed_config_; + StBoundaryConfig st_boundary_config_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_QP_SPLINE_ST_QP_SPLINE_ST_SPEED_OPTIMIZER_H_ diff --git a/modules/planning/tasks/speed_optimizer.cc b/modules/planning/tasks/speed_optimizer.cc new file mode 100644 index 00000000000..895b33c789e --- /dev/null +++ b/modules/planning/tasks/speed_optimizer.cc @@ -0,0 +1,134 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file speed_optimizer.cc + **/ + +#include "modules/planning/tasks/speed_optimizer.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/common/speed_limit.h" + +namespace apollo { +namespace planning { + +using apollo::planning_internal::StGraphBoundaryDebug; +using apollo::planning_internal::STGraphDebug; + +SpeedOptimizer::SpeedOptimizer(const std::string& name) : Task(name) {} + +apollo::common::Status SpeedOptimizer::Execute( + Frame* frame, ReferenceLineInfo* reference_line_info) { + Task::Execute(frame, reference_line_info); + + auto ret = Process( + reference_line_info->AdcSlBoundary(), reference_line_info->path_data(), + frame->PlanningStartPoint(), reference_line_info->reference_line(), + reference_line_info->path_decision(), + reference_line_info->mutable_speed_data()); + + if (!ret.ok() && FLAGS_enable_slowdown_profile_generator) { + *reference_line_info->mutable_speed_data() = + GenerateStopProfile(frame->PlanningStartPoint().v()); + } + RecordDebugInfo(reference_line_info->speed_data()); + return ret; +} + +SpeedData SpeedOptimizer::GenerateStopProfile(const double init_speed) const { + AERROR << "Slowing down the car."; + SpeedData speed_data; + + double slowdown_decel = FLAGS_slowdown_profile_deceleration; + if (frame_->PlanningStartPoint().v() > FLAGS_slowdown_speed_threshold) { + // TODO(all): select the best deceleration for slow down. + slowdown_decel = FLAGS_slowdown_profile_deceleration / 2.0; + } + + const size_t max_t = 3.0; + const double unit_t = 0.02; + + double pre_s = 0.0; + for (double t = 0.0; t < max_t; t += unit_t) { + const double s = + std::fmax(pre_s, init_speed * t + 0.5 * slowdown_decel * t * t); + const double v = std::fmax(0.0, init_speed + slowdown_decel * t); + speed_data.AppendSpeedPoint(s, t, v, slowdown_decel, 0.0); + pre_s = s; + } + return speed_data; +} + +void SpeedOptimizer::RecordDebugInfo(const SpeedData& speed_data) { + auto* debug = frame_->DebugLogger(); + auto ptr_speed_plan = debug->mutable_planning_data()->add_speed_plan(); + ptr_speed_plan->set_name(Name()); + ptr_speed_plan->mutable_speed_point()->CopyFrom( + {speed_data.speed_vector().begin(), speed_data.speed_vector().end()}); +} + +void SpeedOptimizer::RecordSTGraphDebug( + const std::vector& boundaries, const SpeedLimit& speed_limits, + const SpeedData& speed_data, STGraphDebug* st_graph_debug) { + if (!FLAGS_enable_record_debug) { + ADEBUG << "Skip record debug info"; + return; + } + + st_graph_debug->set_name(Name()); + for (const auto boundary : boundaries) { + auto boundary_debug = st_graph_debug->add_boundary(); + boundary_debug->set_name(boundary.id()); + switch (boundary.boundary_type()) { + case StBoundary::BoundaryType::FOLLOW: + boundary_debug->set_type(StGraphBoundaryDebug::ST_BOUNDARY_TYPE_FOLLOW); + break; + case StBoundary::BoundaryType::OVERTAKE: + boundary_debug->set_type( + StGraphBoundaryDebug::ST_BOUNDARY_TYPE_OVERTAKE); + break; + case StBoundary::BoundaryType::STOP: + boundary_debug->set_type(StGraphBoundaryDebug::ST_BOUNDARY_TYPE_STOP); + break; + case StBoundary::BoundaryType::UNKNOWN: + boundary_debug->set_type( + StGraphBoundaryDebug::ST_BOUNDARY_TYPE_UNKNOWN); + break; + case StBoundary::BoundaryType::YIELD: + boundary_debug->set_type(StGraphBoundaryDebug::ST_BOUNDARY_TYPE_YIELD); + break; + } + + for (const auto point : boundary.points()) { + auto point_debug = boundary_debug->add_point(); + point_debug->set_t(point.x()); + point_debug->set_s(point.y()); + } + } + + for (const auto point : speed_limits.speed_limit_points()) { + common::SpeedPoint speed_point; + speed_point.set_s(point.first); + speed_point.set_v(point.second); + st_graph_debug->add_speed_limit()->CopyFrom(speed_point); + } + + st_graph_debug->mutable_speed_profile()->CopyFrom( + {speed_data.speed_vector().begin(), speed_data.speed_vector().end()}); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/speed_optimizer.h b/modules/planning/tasks/speed_optimizer.h new file mode 100644 index 00000000000..f63d2fefadc --- /dev/null +++ b/modules/planning/tasks/speed_optimizer.h @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file speed_optimizer.h + **/ + +#ifndef MODULES_PLANNING_TASKS_SPEED_OPTIMIZER_H_ +#define MODULES_PLANNING_TASKS_SPEED_OPTIMIZER_H_ + +#include +#include + +#include "modules/common/status/status.h" +#include "modules/planning/common/speed/speed_data.h" +#include "modules/planning/common/speed/st_boundary.h" +#include "modules/planning/common/speed_limit.h" +#include "modules/planning/tasks/task.h" + +namespace apollo { +namespace planning { + +class SpeedOptimizer : public Task { + public: + explicit SpeedOptimizer(const std::string& name); + virtual ~SpeedOptimizer() = default; + apollo::common::Status Execute( + Frame* frame, ReferenceLineInfo* reference_line_info) override; + + protected: + virtual apollo::common::Status Process( + const SLBoundary& adc_sl_boundary, const PathData& path_data, + const common::TrajectoryPoint& init_point, + const ReferenceLine& reference_line, PathDecision* const path_decision, + SpeedData* const speed_data) = 0; + + SpeedData GenerateStopProfile(const double init_speed) const; + + void RecordSTGraphDebug(const std::vector& boundaries, + const SpeedLimit& speed_limits, + const SpeedData& speed_data, + planning_internal::STGraphDebug* stGraphDebug); + + void RecordDebugInfo(const SpeedData& speed_data); +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_SPEED_OPTIMIZER_H_ diff --git a/modules/planning/tasks/st_graph/BUILD b/modules/planning/tasks/st_graph/BUILD new file mode 100644 index 00000000000..3560cdd3077 --- /dev/null +++ b/modules/planning/tasks/st_graph/BUILD @@ -0,0 +1,85 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "st_graph_data", + srcs = [ + "st_graph_data.cc", + ], + hdrs = [ + "st_graph_data.h", + ], + deps = [ + "//modules/planning/common:planning_gflags", + "//modules/planning/common:speed_limit", + "//modules/planning/common/speed:st_boundary", + ], +) + +cc_library( + name = "st_boundary_mapper", + srcs = [ + "st_boundary_mapper.cc", + ], + hdrs = [ + "st_boundary_mapper.h", + ], + deps = [ + "//modules/common/configs:vehicle_config_helper", + "//modules/common/configs/proto:vehicle_config_proto", + "//modules/common/proto:pnc_point_proto", + "//modules/common/status", + "//modules/map/pnc_map", + "//modules/map/proto:map_proto", + "//modules/planning/common:frame", + "//modules/planning/common:obstacle", + "//modules/planning/common:path_decision", + "//modules/planning/common:planning_gflags", + "//modules/planning/common:speed_limit", + "//modules/planning/common/path:discretized_path", + "//modules/planning/common/path:frenet_frame_path", + "//modules/planning/common/path:path_data", + "//modules/planning/common/speed:st_boundary", + "//modules/planning/common/trajectory:discretized_trajectory", + "//modules/planning/math:double", + "//modules/planning/proto:planning_proto", + "//modules/planning/reference_line", + ], +) + +cc_test( + name = "st_boundary_mapper_test", + size = "small", + srcs = [ + "st_boundary_mapper_test.cc", + ], + data = [ + "//modules/map:map_data", + "//modules/planning:planning_testdata", + ], + deps = [ + ":st_boundary_mapper", + "//modules/common:log", + "//modules/common/time", + "//modules/common/util", + "@gtest//:main", + ], +) + +cc_test( + name = "st_graph_data_test", + size = "small", + srcs = [ + "st_graph_data_test.cc", + ], + deps = [ + ":st_graph_data", + "//modules/common:log", + "//modules/common/time", + "//modules/common/util", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/planning/tasks/st_graph/st_boundary_mapper.cc b/modules/planning/tasks/st_graph/st_boundary_mapper.cc new file mode 100644 index 00000000000..44e68ee261f --- /dev/null +++ b/modules/planning/tasks/st_graph/st_boundary_mapper.cc @@ -0,0 +1,501 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include "modules/planning/tasks/st_graph/st_boundary_mapper.h" + +#include +#include +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/planning/proto/decision.pb.h" + +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/common/log.h" +#include "modules/common/math/line_segment2d.h" +#include "modules/common/math/vec2d.h" +#include "modules/common/util/file.h" +#include "modules/common/util/string_util.h" +#include "modules/common/util/util.h" +#include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/planning/common/frame.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/math/double.h" + +namespace apollo { +namespace planning { + +using apollo::common::ErrorCode; +using apollo::common::PathPoint; +using apollo::common::SLPoint; +using apollo::common::Status; +using apollo::common::TrajectoryPoint; +using apollo::common::VehicleParam; +using apollo::common::math::Box2d; +using apollo::common::math::Vec2d; + +namespace { +constexpr double boundary_t_buffer = 0.1; +constexpr double boundary_s_buffer = 1.0; +} + +StBoundaryMapper::StBoundaryMapper(const hdmap::PncMap* pnc_map, + const SLBoundary& adc_sl_boundary, + const StBoundaryConfig& config, + const ReferenceLine& reference_line, + const PathData& path_data, + const double planning_distance, + const double planning_time) + : pnc_map_(pnc_map), + adc_sl_boundary_(adc_sl_boundary), + st_boundary_config_(config), + reference_line_(reference_line), + path_data_(path_data), + vehicle_param_( + common::VehicleConfigHelper::instance()->GetConfig().vehicle_param()), + planning_distance_(planning_distance), + planning_time_(planning_time) {} + +Status StBoundaryMapper::GetGraphBoundary( + const PathDecision& path_decision, + std::vector* const st_boundaries) const { + const auto& path_obstacles = path_decision.path_obstacles(); + if (st_boundaries == nullptr) { + const std::string msg = "st_boundaries is NULL."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + if (planning_time_ < 0.0) { + const std::string msg = "Fail to get params since planning_time_ < 0."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + if (path_data_.discretized_path().NumOfPoints() < 2) { + AERROR << "Fail to get params because of too few path points. path points " + "size: " + << path_data_.discretized_path().NumOfPoints() << "."; + return Status(ErrorCode::PLANNING_ERROR, + "Fail to get params because of too few path points"); + } + + st_boundaries->clear(); + + const PathObstacle* stop_obstacle = nullptr; + ObjectDecisionType stop_decision; + double min_stop_s = std::numeric_limits::max(); + + for (const auto* path_obstacle : path_obstacles.Items()) { + if (!path_obstacle->HasLongitudinalDecision()) { + StBoundary boundary; + const auto ret = MapWithoutDecision(*path_obstacle, &boundary); + if (!ret.ok()) { + std::string msg = common::util::StrCat( + "Fail to map obstacle ", path_obstacle->Id(), " without decision."); + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + AppendBoundary(boundary, st_boundaries); + continue; + } + const auto& decision = path_obstacle->LongitudinalDecision(); + if (decision.has_stop()) { + const double stop_s = path_obstacle->perception_sl_boundary().start_s() + + decision.stop().distance_s(); + if (stop_s < adc_sl_boundary_.end_s()) { + AERROR << "Invalid stop decision. not stop at ahead of current " + "position. stop_s : " + << stop_s << ", and current adc_s is; " + << adc_sl_boundary_.end_s(); + return Status(ErrorCode::PLANNING_ERROR, "invalid decision"); + } + if (!stop_obstacle) { + stop_obstacle = path_obstacle; + stop_decision = decision; + min_stop_s = stop_s; + } else if (stop_s < min_stop_s) { + stop_obstacle = path_obstacle; + min_stop_s = stop_s; + stop_decision = decision; + } + } else if (decision.has_follow() || decision.has_overtake() || + decision.has_yield()) { + StBoundary boundary; + const auto ret = + MapWithPredictionTrajectory(*path_obstacle, decision, &boundary); + if (!ret.ok()) { + AERROR << "Fail to map obstacle " << path_obstacle->Id() + << " with decision: " << decision.DebugString(); + return Status(ErrorCode::PLANNING_ERROR, + "Fail to map overtake/yield decision"); + } + AppendBoundary(boundary, st_boundaries); + } else { + ADEBUG << "No mapping for decision: " << decision.DebugString(); + } + } + + if (stop_obstacle) { + StBoundary stop_boundary; + bool success = + MapStopDecision(*stop_obstacle, stop_decision, &stop_boundary); + if (!success) { + std::string msg = "Fail to MapStopDecision."; + AERROR << msg; + return Status(ErrorCode::PLANNING_ERROR, msg); + } + AppendBoundary(stop_boundary, st_boundaries); + } + for (const auto& st_boundary : *st_boundaries) { + DCHECK_NE(st_boundary.id().length(), 0); + } + return Status::OK(); +} + +bool StBoundaryMapper::MapStopDecision(const PathObstacle& stop_obstacle, + const ObjectDecisionType& stop_decision, + StBoundary* const boundary) const { + CHECK_NOTNULL(boundary); + DCHECK(stop_decision.has_stop()) << "Must have stop decision"; + + PathPoint obstacle_point; + if (stop_obstacle.perception_sl_boundary().start_s() > + path_data_.frenet_frame_path().points().back().s()) { + return true; + } + if (!path_data_.GetPathPointWithRefS( + stop_obstacle.perception_sl_boundary().start_s(), &obstacle_point)) { + AERROR << "Fail to get path point from reference s. The sl boundary of " + "stop obstacle " + << stop_obstacle.Id() + << " is: " << stop_obstacle.perception_sl_boundary().DebugString(); + return false; + } + + const double st_stop_s = + obstacle_point.s() + stop_decision.stop().distance_s() - + vehicle_param_.front_edge_to_center() - FLAGS_decision_valid_stop_range; + if (st_stop_s < 0.0) { + AERROR << "obstacle " << stop_obstacle.Id() << " st stop_s " << st_stop_s + << " is less than 0."; + return false; + } + + const double s_min = st_stop_s; + const double s_max = + std::fmax(s_min, std::fmax(planning_distance_, reference_line_.Length())); + + std::vector> point_pairs; + point_pairs.emplace_back(STPoint(s_min, 0.0), STPoint(s_max, 0.0)); + point_pairs.emplace_back( + STPoint(s_min, planning_time_), + STPoint(s_max + st_boundary_config_.boundary_buffer(), planning_time_)); + *boundary = StBoundary(point_pairs); + + boundary->SetBoundaryType(StBoundary::BoundaryType::STOP); + boundary->SetCharacteristicLength(st_boundary_config_.boundary_buffer()); + boundary->SetId(stop_obstacle.Id()); + return true; +} + +Status StBoundaryMapper::MapWithoutDecision(const PathObstacle& path_obstacle, + StBoundary* const boundary) const { + std::vector lower_points; + std::vector upper_points; + + if (!GetOverlapBoundaryPoints(path_data_.discretized_path().path_points(), + *(path_obstacle.obstacle()), &upper_points, + &lower_points)) { + return Status::OK(); + } + + if (lower_points.size() != upper_points.size()) { + std::string msg = common::util::StrCat( + "lower_points.size()[", lower_points.size(), + "] and upper_points.size()[", upper_points.size(), "] does NOT match."); + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + if (lower_points.size() > 1 && upper_points.size() > 1) { + *boundary = StBoundary::GenerateStBoundary(lower_points, upper_points) + .ExpandByS(boundary_s_buffer) + .ExpandByT(boundary_t_buffer); + boundary->SetId(path_obstacle.obstacle()->Id()); + } + return Status::OK(); +} + +bool StBoundaryMapper::GetOverlapBoundaryPoints( + const std::vector& path_points, const Obstacle& obstacle, + std::vector* upper_points, + std::vector* lower_points) const { + DCHECK_NOTNULL(upper_points); + DCHECK_NOTNULL(lower_points); + DCHECK(upper_points->empty()); + DCHECK(lower_points->empty()); + DCHECK_GT(path_points.size(), 0); + + if (path_points.empty()) { + AERROR << "No points in path_data_.discretized_path()."; + return false; + } + + const auto& trajectory = obstacle.Trajectory(); + if (trajectory.trajectory_point_size() == 0) { + for (const auto& curr_point_on_path : path_points) { + if (curr_point_on_path.s() > planning_distance_) { + break; + } + const Box2d obs_box = obstacle.PerceptionBoundingBox(); + + if (CheckOverlap(curr_point_on_path, obs_box, + st_boundary_config_.boundary_buffer())) { + lower_points->emplace_back(curr_point_on_path.s(), 0.0); + lower_points->emplace_back(curr_point_on_path.s(), planning_time_); + upper_points->emplace_back(planning_distance_, 0.0); + upper_points->emplace_back(planning_distance_, planning_time_); + break; + } + } + } else { + const int default_num_point = 50; + DiscretizedPath discretized_path; + if (path_points.size() > 2 * default_num_point) { + const int ratio = path_points.size() / default_num_point; + std::vector sampled_path_points; + for (size_t i = 0; i < path_points.size(); ++i) { + if (i % ratio == 0) { + sampled_path_points.push_back(path_points[i]); + } + } + discretized_path.set_path_points(sampled_path_points); + } else { + discretized_path.set_path_points(path_points); + } + for (int i = 0; i < trajectory.trajectory_point_size(); ++i) { + const auto& trajectory_point = trajectory.trajectory_point(i); + if (i > 0) { + const auto& pre_point = trajectory.trajectory_point(i - 1); + if (trajectory_point.relative_time() <= pre_point.relative_time()) { + AERROR << "Fail to map because prediction time is not increasing." + << "current point: " << trajectory_point.ShortDebugString() + << "previous point: " << pre_point.ShortDebugString(); + return false; + } + } + + const Box2d obs_box = obstacle.GetBoundingBox(trajectory_point); + + double trajectory_point_time = trajectory_point.relative_time(); + const double kNegtiveTimeThreshold = -1.0; + if (trajectory_point_time < kNegtiveTimeThreshold) { + continue; + } + + const double step_length = vehicle_param_.front_edge_to_center(); + for (double path_s = 0.0; path_s < discretized_path.Length(); + path_s += step_length) { + const auto curr_adc_path_point = + discretized_path.EvaluateUsingLinearApproximation( + path_s + discretized_path.StartPoint().s()); + if (CheckOverlap(curr_adc_path_point, obs_box, + st_boundary_config_.boundary_buffer())) { + // found overlap, start searching with higher resolution + const double backward_distance = -step_length; + const double forward_distance = vehicle_param_.length() + + vehicle_param_.width() + + obs_box.length() + obs_box.width(); + const double default_min_step = 0.1; // in meters + const double fine_tuning_step_length = std::fmin( + default_min_step, discretized_path.Length() / default_num_point); + + bool find_low = false; + bool find_high = false; + double low_s = std::fmax(0.0, path_s + backward_distance); + double high_s = + std::fmin(discretized_path.Length(), path_s + forward_distance); + + while (low_s < high_s) { + if (find_low && find_high) { + break; + } + if (!find_low) { + const auto& point_low = + discretized_path.EvaluateUsingLinearApproximation( + low_s + discretized_path.StartPoint().s()); + if (!CheckOverlap(point_low, obs_box, + st_boundary_config_.boundary_buffer())) { + low_s += fine_tuning_step_length; + } else { + find_low = true; + } + } + if (!find_high) { + const auto& point_high = + discretized_path.EvaluateUsingLinearApproximation( + high_s + discretized_path.StartPoint().s()); + if (!CheckOverlap(point_high, obs_box, + st_boundary_config_.boundary_buffer())) { + high_s -= fine_tuning_step_length; + } else { + find_high = true; + } + } + } + if (find_high && find_low) { + lower_points->emplace_back( + low_s - st_boundary_config_.point_extension(), + trajectory_point_time); + upper_points->emplace_back( + high_s + st_boundary_config_.point_extension(), + trajectory_point_time); + } + break; + } + } + } + } + DCHECK_EQ(lower_points->size(), upper_points->size()); + return (lower_points->size() > 0 && upper_points->size() > 0); +} + +Status StBoundaryMapper::MapWithPredictionTrajectory( + const PathObstacle& path_obstacle, const ObjectDecisionType& obj_decision, + StBoundary* const boundary) const { + DCHECK_NOTNULL(boundary); + DCHECK(obj_decision.has_follow() || obj_decision.has_yield() || + obj_decision.has_overtake()) + << "obj_decision must be follow or yield or overtake.\n" + << obj_decision.DebugString(); + + std::vector lower_points; + std::vector upper_points; + + if (!GetOverlapBoundaryPoints(path_data_.discretized_path().path_points(), + *(path_obstacle.obstacle()), &upper_points, + &lower_points)) { + return Status(ErrorCode::PLANNING_ERROR, "PLANNING_ERROR"); + } + + if (lower_points.size() != upper_points.size()) { + std::string msg = common::util::StrCat( + "lower_points.size()[", lower_points.size(), + "] and upper_points.size()[", upper_points.size(), "] does NOT match."); + return Status(ErrorCode::PLANNING_ERROR, msg); + } + + if (lower_points.size() > 1 && upper_points.size() > 1) { + if (obj_decision.has_follow() && lower_points.back().t() < planning_time_) { + const double diff_s = lower_points.back().s() - lower_points.front().s(); + const double diff_t = lower_points.back().t() - lower_points.front().t(); + double extend_lower_s = + diff_s / diff_t * (planning_time_ - lower_points.front().t()) + + lower_points.front().s(); + const double extend_upper_s = + extend_lower_s + (upper_points.back().s() - lower_points.back().s()) + + 1.0; + upper_points.emplace_back(extend_upper_s, planning_time_); + lower_points.emplace_back(extend_lower_s, planning_time_); + } + + *boundary = StBoundary::GenerateStBoundary(lower_points, upper_points) + .ExpandByS(boundary_s_buffer) + .ExpandByT(boundary_t_buffer); + + // get characteristic_length and boundary_type. + StBoundary::BoundaryType b_type = StBoundary::BoundaryType::UNKNOWN; + double characteristic_length = 0.0; + if (obj_decision.has_follow()) { + characteristic_length = std::fabs(obj_decision.follow().distance_s()); + b_type = StBoundary::BoundaryType::FOLLOW; + } else if (obj_decision.has_yield()) { + characteristic_length = std::fabs(obj_decision.yield().distance_s()); + b_type = StBoundary::BoundaryType::YIELD; + } else if (obj_decision.has_overtake()) { + characteristic_length = std::fabs(obj_decision.overtake().distance_s()); + b_type = StBoundary::BoundaryType::OVERTAKE; + } else { + DCHECK(false) << "Obj decision should be either yield or overtake: " + << obj_decision.DebugString(); + } + boundary->SetBoundaryType(b_type); + boundary->SetId(path_obstacle.obstacle()->Id()); + boundary->SetCharacteristicLength(characteristic_length); + } + return Status::OK(); +} + +bool StBoundaryMapper::CheckOverlap(const PathPoint& path_point, + const Box2d& obs_box, + const double buffer) const { + const double mid_to_rear_center = + vehicle_param_.length() / 2.0 - vehicle_param_.front_edge_to_center(); + const double x = + path_point.x() - mid_to_rear_center * std::cos(path_point.theta()); + const double y = + path_point.y() - mid_to_rear_center * std::sin(path_point.theta()); + const Box2d adc_box = + Box2d({x, y}, path_point.theta(), vehicle_param_.length() + 2 * buffer, + vehicle_param_.width() + 2 * buffer); + return obs_box.HasOverlap(adc_box); +} + +Status StBoundaryMapper::GetSpeedLimits( + SpeedLimit* const speed_limit_data) const { + CHECK_NOTNULL(speed_limit_data); + + for (const auto& path_point : path_data_.discretized_path().path_points()) { + if (Double::Compare(path_point.s(), reference_line_.Length()) > 0) { + AWARN << "path length [" << path_data_.discretized_path().Length() + << "] is LARGER than reference_line_ length [" + << reference_line_.Length() << "]. Please debug before proceeding."; + break; + } + + double speed_limit_on_reference_line = + reference_line_.GetSpeedLimitFromS(path_point.s()); + + // speed limit from path curvature + double speed_limit_on_path = + std::sqrt(st_boundary_config_.centric_acceleration_limit() / + std::fmax(std::fabs(path_point.kappa()), + st_boundary_config_.minimal_kappa())); + + const double curr_speed_limit = std::fmax( + st_boundary_config_.lowest_speed(), + std::fmin(speed_limit_on_path, speed_limit_on_reference_line)); + + speed_limit_data->AppendSpeedLimit(path_point.s(), curr_speed_limit); + } + return Status::OK(); +} + +void StBoundaryMapper::AppendBoundary( + const StBoundary& boundary, std::vector* st_boundaries) const { + if (Double::Compare(boundary.Area(), 0.0) <= 0) { + return; + } + st_boundaries->push_back(std::move(boundary)); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/st_graph/st_boundary_mapper.h b/modules/planning/tasks/st_graph/st_boundary_mapper.h new file mode 100644 index 00000000000..c5054f7e6ec --- /dev/null +++ b/modules/planning/tasks/st_graph/st_boundary_mapper.h @@ -0,0 +1,97 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** +* @file +**/ + +#ifndef MODULES_PLANNING_TASKS_ST_GRAPH_ST_BOUNDARY_MAPPER_H_ +#define MODULES_PLANNING_TASKS_ST_GRAPH_ST_BOUNDARY_MAPPER_H_ + +#include + +#include "modules/common/configs/proto/vehicle_config.pb.h" +#include "modules/planning/proto/st_boundary_config.pb.h" + +#include "modules/common/status/status.h" +#include "modules/map/pnc_map/pnc_map.h" +#include "modules/planning/common/path/path_data.h" +#include "modules/planning/common/path_decision.h" +#include "modules/planning/common/speed/st_boundary.h" +#include "modules/planning/common/speed_limit.h" +#include "modules/planning/reference_line/reference_line.h" + +namespace apollo { +namespace planning { + +class StBoundaryMapper { + public: + StBoundaryMapper(const hdmap::PncMap* pnc_map, + const SLBoundary& adc_sl_boundary, + const StBoundaryConfig& config, + const ReferenceLine& reference_line, + const PathData& path_data, const double planning_distance, + const double planning_time); + + virtual ~StBoundaryMapper() = default; + + apollo::common::Status GetGraphBoundary( + const PathDecision& path_decision, + std::vector* const boundary) const; + + virtual apollo::common::Status GetSpeedLimits( + SpeedLimit* const speed_limit_data) const; + + private: + FRIEND_TEST(StBoundaryMapperTest, check_overlap_test); + bool CheckOverlap(const apollo::common::PathPoint& path_point, + const apollo::common::math::Box2d& obs_box, + const double buffer) const; + + bool GetOverlapBoundaryPoints( + const std::vector& path_points, + const Obstacle& obstacle, std::vector* upper_points, + std::vector* lower_points) const; + + apollo::common::Status MapWithoutDecision(const PathObstacle& path_obstacle, + StBoundary* const boundary) const; + + bool MapStopDecision(const PathObstacle& stop_obstacle, + const ObjectDecisionType& stop_decision, + StBoundary* const boundary) const; + + apollo::common::Status MapWithPredictionTrajectory( + const PathObstacle& path_obstacle, const ObjectDecisionType& obj_decision, + StBoundary* const boundary) const; + + void AppendBoundary(const StBoundary& boundary, + std::vector* st_boundaries) const; + + private: + const hdmap::PncMap* pnc_map_ = nullptr; + const SLBoundary& adc_sl_boundary_; + StBoundaryConfig st_boundary_config_; + const ReferenceLine& reference_line_; + const PathData& path_data_; + const apollo::common::VehicleParam vehicle_param_; + const double planning_distance_; + const double planning_time_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_ST_GRAPH_ST_BOUNDARY_MAPPER_H_ diff --git a/modules/planning/tasks/st_graph/st_boundary_mapper_test.cc b/modules/planning/tasks/st_graph/st_boundary_mapper_test.cc new file mode 100644 index 00000000000..22492d3831b --- /dev/null +++ b/modules/planning/tasks/st_graph/st_boundary_mapper_test.cc @@ -0,0 +1,100 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/planning/tasks/st_graph/st_boundary_mapper.h" + +#include +#include + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include "modules/common/log.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/planning/common/path_obstacle.h" +#include "modules/planning/reference_line/reference_line_smoother.h" + +namespace apollo { +namespace planning { + +class StBoundaryMapperTest : public ::testing::Test { + public: + virtual void SetUp() { + hdmap_.LoadMapFromFile(map_file); + const std::string lane_id = "1_-1"; + lane_info_ptr = hdmap_.GetLaneById(hdmap::MakeMapId(lane_id)); + if (!lane_info_ptr) { + AERROR << "failed to find lane " << lane_id << " from map " << map_file; + return; + } + ReferenceLineSmootherConfig config; + smoother_.Init(config); // use the default value in config. + + std::vector ref_points; + const auto& points = lane_info_ptr->points(); + const auto& headings = lane_info_ptr->headings(); + const auto& accumulate_s = lane_info_ptr->accumulate_s(); + for (std::size_t i = 0; i < points.size(); ++i) { + std::vector waypoint; + waypoint.emplace_back(lane_info_ptr, accumulate_s[i]); + hdmap::MapPathPoint map_path_point(points[i], headings[i], waypoint); + ref_points.emplace_back(map_path_point, 0.0, 0.0, -2.0, 2.0); + } + reference_line_.reset(new ReferenceLine(ref_points)); + vehicle_position_ = points[0]; + + path_data_.SetReferenceLine(reference_line_.get()); + + std::vector ff_points; + for (int i = 0; i < 100; ++i) { + common::FrenetFramePoint ff_point; + ff_point.set_s(i * 1.0); + ff_point.set_l(0.1); + ff_points.push_back(std::move(ff_point)); + } + frenet_frame_path_.set_points(ff_points); + path_data_.SetFrenetPath(frenet_frame_path_); + } + + protected: + const std::string map_file = + "modules/planning/testdata/garage_map/base_map.txt"; + hdmap::HDMap hdmap_; + ReferenceLineSmoother smoother_; + common::math::Vec2d vehicle_position_; + std::unique_ptr reference_line_; + hdmap::LaneInfoConstPtr lane_info_ptr = nullptr; + PathData path_data_; + FrenetFramePath frenet_frame_path_; +}; + +TEST_F(StBoundaryMapperTest, check_overlap_test) { + StBoundaryConfig config; + double planning_distance = 70.0; + double planning_time = 10.0; + SLBoundary adc_sl_boundary; + hdmap::PncMap pnc_map; + StBoundaryMapper mapper(&pnc_map, adc_sl_boundary, config, *reference_line_, + path_data_, planning_distance, planning_time); + common::PathPoint path_point; + path_point.set_x(1.0); + path_point.set_y(1.0); + common::math::Box2d box(common::math::Vec2d(1.0, 1.0), 0.0, 5.0, 3.0); + EXPECT_TRUE(mapper.CheckOverlap(path_point, box, 0.0)); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/st_graph/st_graph_data.cc b/modules/planning/tasks/st_graph/st_graph_data.cc new file mode 100644 index 00000000000..fb0c8c8d51e --- /dev/null +++ b/modules/planning/tasks/st_graph/st_graph_data.cc @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: st_graph_data.cc + **/ + +#include "modules/planning/tasks/st_graph/st_graph_data.h" + +namespace apollo { +namespace planning { + +using apollo::common::TrajectoryPoint; + +StGraphData::StGraphData(const std::vector& st_boundaries, + const TrajectoryPoint& init_point, + const SpeedLimit& speed_limit, + const double path_data_length) + : st_boundaries_(st_boundaries), + init_point_(init_point), + speed_limit_(speed_limit), + path_data_length_(path_data_length) {} + +const std::vector& StGraphData::st_boundaries() const { + return st_boundaries_; +} + +const TrajectoryPoint& StGraphData::init_point() const { return init_point_; } + +const SpeedLimit& StGraphData::speed_limit() const { return speed_limit_; } + +double StGraphData::path_data_length() const { return path_data_length_; } + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/st_graph/st_graph_data.h b/modules/planning/tasks/st_graph/st_graph_data.h new file mode 100644 index 00000000000..9958e62d892 --- /dev/null +++ b/modules/planning/tasks/st_graph/st_graph_data.h @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file: st_graph_data.h + * @brief: data with map info and obstacle info + **/ + +#ifndef MODULES_PLANNING_TASKS_ST_GRAPH_ST_GRAPH_DATA_H_ +#define MODULES_PLANNING_TASKS_ST_GRAPH_ST_GRAPH_DATA_H_ + +#include + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/planning/common/speed/st_boundary.h" +#include "modules/planning/common/speed_limit.h" + +namespace apollo { +namespace planning { + +class StGraphData { + public: + StGraphData(const std::vector& st_boundaries, + const apollo::common::TrajectoryPoint& init_point, + const SpeedLimit& speed_limit, const double path_data_length); + + const std::vector& st_boundaries() const; + + const apollo::common::TrajectoryPoint& init_point() const; + + const SpeedLimit& speed_limit() const; + + double path_data_length() const; + + private: + std::vector st_boundaries_; + apollo::common::TrajectoryPoint init_point_; + + SpeedLimit speed_limit_; + double path_data_length_ = 0.0; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_ST_GRAPH_ST_GRAPH_DATA_H_ diff --git a/modules/planning/tasks/st_graph/st_graph_data_test.cc b/modules/planning/tasks/st_graph/st_graph_data_test.cc new file mode 100644 index 00000000000..28ea9716cc1 --- /dev/null +++ b/modules/planning/tasks/st_graph/st_graph_data_test.cc @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/planning/tasks/st_graph/st_graph_data.h" + +#include +#include + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include "modules/common/log.h" +#include "modules/planning/common/speed/st_boundary.h" + +namespace apollo { +namespace planning { + +TEST(StGraphDataTest, basic_test) { + std::vector boundary_vec; + boundary_vec.push_back(StBoundary()); + apollo::common::TrajectoryPoint traj_point; + traj_point.mutable_path_point()->set_x(1.1); + traj_point.mutable_path_point()->set_y(2.1); + traj_point.mutable_path_point()->set_theta(0.2); + traj_point.mutable_path_point()->set_kappa(0.02); + traj_point.mutable_path_point()->set_dkappa(0.123); + traj_point.mutable_path_point()->set_ddkappa(0.003); + traj_point.set_v(10.001); + traj_point.set_a(1.022); + traj_point.set_relative_time(1010.022); + + SpeedLimit speed_limit; + StGraphData st_graph_data(boundary_vec, traj_point, speed_limit, 100.0); + EXPECT_EQ(st_graph_data.st_boundaries().size(), 1); + EXPECT_DOUBLE_EQ(st_graph_data.init_point().path_point().x(), 1.1); + EXPECT_DOUBLE_EQ(st_graph_data.init_point().path_point().y(), 2.1); + EXPECT_DOUBLE_EQ(st_graph_data.init_point().path_point().z(), 0.0); + EXPECT_DOUBLE_EQ(st_graph_data.init_point().path_point().theta(), 0.2); + EXPECT_DOUBLE_EQ(st_graph_data.init_point().path_point().kappa(), 0.02); + EXPECT_DOUBLE_EQ(st_graph_data.init_point().path_point().dkappa(), 0.123); + EXPECT_DOUBLE_EQ(st_graph_data.init_point().path_point().ddkappa(), 0.003); + EXPECT_DOUBLE_EQ(st_graph_data.init_point().v(), 10.001); + EXPECT_DOUBLE_EQ(st_graph_data.init_point().a(), 1.022); + EXPECT_DOUBLE_EQ(st_graph_data.init_point().relative_time(), 1010.022); + EXPECT_DOUBLE_EQ(st_graph_data.path_data_length(), 100.0); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/task.cc b/modules/planning/tasks/task.cc new file mode 100644 index 00000000000..1c10b05180d --- /dev/null +++ b/modules/planning/tasks/task.cc @@ -0,0 +1,43 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include "modules/planning/tasks/task.h" + +#include "modules/planning/proto/planning_config.pb.h" + +namespace apollo { +namespace planning { + +using apollo::common::Status; + +Task::Task(const std::string& name) : name_(name) {} + +const std::string& Task::Name() const { return name_; } + +bool Task::Init(const PlanningConfig&) { return true; } + +Status Task::Execute(Frame* frame, ReferenceLineInfo* reference_line_info) { + frame_ = frame; + reference_line_info_ = reference_line_info; + return Status::OK(); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/task.h b/modules/planning/tasks/task.h new file mode 100644 index 00000000000..6e1eb6ecd60 --- /dev/null +++ b/modules/planning/tasks/task.h @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#ifndef MODULES_PLANNING_TASKS_TASK_H_ +#define MODULES_PLANNING_TASKS_TASK_H_ + +#include +#include "modules/common/status/status.h" +#include "modules/planning/common/frame.h" +#include "modules/planning/common/reference_line_info.h" +#include "modules/planning/proto/planning_config.pb.h" + +namespace apollo { +namespace planning { + +class Task { + public: + explicit Task(const std::string& name); + virtual ~Task() = default; + virtual const std::string& Name() const; + + virtual apollo::common::Status Execute( + Frame* frame, ReferenceLineInfo* reference_line_info); + + virtual bool Init(const PlanningConfig& config); + + protected: + bool is_init_ = false; + Frame* frame_ = nullptr; + ReferenceLineInfo* reference_line_info_ = nullptr; + + private: + const std::string name_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_TASK_H_ diff --git a/modules/planning/tasks/traffic_decider/BUILD b/modules/planning/tasks/traffic_decider/BUILD new file mode 100644 index 00000000000..cd1b41905c9 --- /dev/null +++ b/modules/planning/tasks/traffic_decider/BUILD @@ -0,0 +1,39 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "traffic_rules", + srcs = [ + "back_side_vehicles.cc", + ], + hdrs = [ + "back_side_vehicles.h", + "traffic_rule.h", + ], + deps = [ + "//modules/common/util:factory", + "//modules/planning/common:planning_gflags", + "//modules/planning/common:reference_line_info", + ], +) + +cc_library( + name = "traffic_decider", + srcs = [ + "traffic_decider.cc", + ], + hdrs = [ + "traffic_decider.h", + ], + deps = [ + ":traffic_rules", + "//modules/common/status", + "//modules/common/vehicle_state", + "//modules/planning/common:frame", + "//modules/planning/common:reference_line_info", + "//modules/planning/tasks:task", + ], +) + +cpplint() diff --git a/modules/planning/tasks/traffic_decider/back_side_vehicles.cc b/modules/planning/tasks/traffic_decider/back_side_vehicles.cc new file mode 100644 index 00000000000..0fa0ed56812 --- /dev/null +++ b/modules/planning/tasks/traffic_decider/back_side_vehicles.cc @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include "modules/planning/tasks/traffic_decider/back_side_vehicles.h" +#include "modules/planning/common/planning_gflags.h" + +namespace apollo { +namespace planning { + +BackSideVehicles::BackSideVehicles() : TrafficRule("BackSideVehicles") {} + +bool BackSideVehicles::ApplyRule(ReferenceLineInfo* const reference_line_info) { + auto* path_decision = reference_line_info->path_decision(); + const auto& adc_sl_boundary = reference_line_info->AdcSlBoundary(); + ObjectDecisionType ignore; + ignore.mutable_ignore(); + for (const auto* path_obstacle : path_decision->path_obstacles().Items()) { + if (path_obstacle->perception_sl_boundary().end_s() >= + adc_sl_boundary.end_s()) { + continue; + } + + if (path_obstacle->st_boundary().IsEmpty()) { + path_decision->AddLongitudinalDecision(Name(), path_obstacle->Id(), + ignore); + path_decision->AddLateralDecision(Name(), path_obstacle->Id(), ignore); + continue; + } + if (path_obstacle->st_boundary().min_s() < 0) { + path_decision->AddLongitudinalDecision(Name(), path_obstacle->Id(), + ignore); + path_decision->AddLateralDecision(Name(), path_obstacle->Id(), ignore); + continue; + } + } + return true; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/traffic_decider/back_side_vehicles.h b/modules/planning/tasks/traffic_decider/back_side_vehicles.h new file mode 100644 index 00000000000..32c52761025 --- /dev/null +++ b/modules/planning/tasks/traffic_decider/back_side_vehicles.h @@ -0,0 +1,42 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#ifndef MODULES_PLANNING_TASKS_TRAFFIC_DECIDER_BACK_SIDE_VEHICE_H_ +#define MODULES_PLANNING_TASKS_TRAFFIC_DECIDER_BACK_SIDE_VEHICE_H_ + +#include + +#include "modules/planning/tasks/traffic_decider/traffic_rule.h" + +namespace apollo { +namespace planning { + +class BackSideVehicles : public TrafficRule { + public: + BackSideVehicles(); + virtual ~BackSideVehicles() = default; + + bool ApplyRule(ReferenceLineInfo* const reference_line_info); +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_TRAFFIC_DECIDER_BACK_SIDE_VEHICE_H_ diff --git a/modules/planning/tasks/traffic_decider/traffic_decider.cc b/modules/planning/tasks/traffic_decider/traffic_decider.cc new file mode 100644 index 00000000000..5a74acb96e0 --- /dev/null +++ b/modules/planning/tasks/traffic_decider/traffic_decider.cc @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#include "modules/planning/tasks/traffic_decider/traffic_decider.h" + +#include "modules/common/configs/vehicle_config_helper.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/tasks/traffic_decider/back_side_vehicles.h" + +namespace apollo { +namespace planning { +using common::Status; +using common::VehicleConfigHelper; + +TrafficDecider::TrafficDecider() : Task("TrafficDecider") {} + +void TrafficDecider::RegisterRules() { + rule_factory_.Register("BackSideVehicles", []() -> TrafficRule * { + return new BackSideVehicles(); + }); +} + +bool TrafficDecider::Init(const PlanningConfig &config) { + RegisterRules(); + rule_configs_ = config.rule_config(); + is_init_ = true; + return true; +} + +Status TrafficDecider::Execute(Frame *frame, + ReferenceLineInfo *reference_line_info) { + Task::Execute(frame, reference_line_info); + + for (const auto rule_config : rule_configs_) { + auto rule = rule_factory_.CreateObject(rule_config.name()); + if (!rule) { + AERROR << "Could not find rule " << rule_config.DebugString(); + continue; + } + rule->ApplyRule(reference_line_info); + ADEBUG << "Applied rule " << rule_config.name(); + } + return Status::OK(); +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/tasks/traffic_decider/traffic_decider.h b/modules/planning/tasks/traffic_decider/traffic_decider.h new file mode 100644 index 00000000000..01b5d706ffc --- /dev/null +++ b/modules/planning/tasks/traffic_decider/traffic_decider.h @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#ifndef MODULES_PLANNING_TASKS_TRAFFIC_DECIDER_TRAFFIC_DECIDER_H_ +#define MODULES_PLANNING_TASKS_TRAFFIC_DECIDER_TRAFFIC_DECIDER_H_ + +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/common/status/status.h" +#include "modules/common/util/factory.h" +#include "modules/planning/reference_line/reference_line.h" +#include "modules/planning/tasks/task.h" +#include "modules/planning/tasks/traffic_decider/traffic_rule.h" + +namespace apollo { +namespace planning { + +/** + * @class TrafficDecider + * @brief Create traffic related decision in this class. + * The created obstacles is added to obstacles_, and the decision is added to + * path_obstacles_ + * Traffic obstacle examples include: + * * Traffic Light + * * End of routing + * * Select the drivable reference line. + */ +class TrafficDecider : public Task { + public: + TrafficDecider(); + bool Init(const PlanningConfig &config) override; + virtual ~TrafficDecider() = default; + apollo::common::Status Execute( + Frame *frame, ReferenceLineInfo *reference_line_info) override; + + private: + void RegisterRules(); + + apollo::common::util::Factory rule_factory_; + google::protobuf::RepeatedPtrField rule_configs_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_TRAFFIC_DECIDER_TRAFFIC_DECIDER_H_ diff --git a/modules/planning/tasks/traffic_decider/traffic_rule.h b/modules/planning/tasks/traffic_decider/traffic_rule.h new file mode 100644 index 00000000000..86a95ff72fb --- /dev/null +++ b/modules/planning/tasks/traffic_decider/traffic_rule.h @@ -0,0 +1,45 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + **/ + +#ifndef MODULES_PLANNING_TASKS_TRAFFIC_DECIDER_TRAFFIC_RULE_H_ +#define MODULES_PLANNING_TASKS_TRAFFIC_DECIDER_TRAFFIC_RULE_H_ + +#include + +#include "modules/planning/common/reference_line_info.h" + +namespace apollo { +namespace planning { + +class TrafficRule { + public: + explicit TrafficRule(const std::string& name) : name_(name) {} + virtual ~TrafficRule() = default; + virtual const std::string& Name() const { return name_; } + virtual bool ApplyRule(ReferenceLineInfo* const reference_line_info) = 0; + + private: + const std::string name_; +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TASKS_TRAFFIC_DECIDER_TRAFFIC_RULE_H_ diff --git a/modules/planning/testdata/conf/adapter.conf b/modules/planning/testdata/conf/adapter.conf new file mode 100644 index 00000000000..6ed5f5c7a7b --- /dev/null +++ b/modules/planning/testdata/conf/adapter.conf @@ -0,0 +1,21 @@ +config { + type: LOCALIZATION + mode: RECEIVE_ONLY +} +config { + type: CHASSIS + mode: RECEIVE_ONLY +} +config { + type: ROUTING_RESPONSE + mode: RECEIVE_ONLY +} +config { + type: PREDICTION + mode: RECEIVE_ONLY +} +config { + type: PLANNING_TRAJECTORY + mode: PUBLISH_ONLY +} +is_ros: false diff --git a/modules/planning/testdata/garage_map/base_map.txt b/modules/planning/testdata/garage_map/base_map.txt new file mode 100644 index 00000000000..633ed52f433 --- /dev/null +++ b/modules/planning/testdata/garage_map/base_map.txt @@ -0,0 +1,15760 @@ +header { + version: "03/10/17_22.46.20" + date: "20161124" + projection { + proj: "+proj=tmerc +lat_0={37.413082} +lon_0={-122.013332} +k={0.9999999996} +ellps=WGS84 +no_defs" + } +} +lane { + id { + id: "1_-1" + } + central_curve { + segment { + line_segment { + point { + x: 586392.84003 + y: 4140673.01232 + } + point { + x: 586392.64623335819 + y: 4140673.061791297 + } + point { + x: 586392.45243671641 + y: 4140673.1112625939 + } + point { + x: 586392.25864007475 + y: 4140673.1607338907 + } + point { + x: 586392.064843433 + y: 4140673.2102051876 + } + point { + x: 586391.8710467912 + y: 4140673.2596764839 + } + point { + x: 586391.67725014954 + y: 4140673.3091477808 + } + point { + x: 586391.48345350777 + y: 4140673.3586190776 + } + point { + x: 586391.289656866 + y: 4140673.4080903744 + } + point { + x: 586391.09586022433 + y: 4140673.4575616713 + } + point { + x: 586390.90206358256 + y: 4140673.5070329681 + } + point { + x: 586390.70826694078 + y: 4140673.5565042645 + } + point { + x: 586390.51447029912 + y: 4140673.6059755613 + } + point { + x: 586390.32067365735 + y: 4140673.6554468581 + } + point { + x: 586390.12687701569 + y: 4140673.704918155 + } + point { + x: 586389.93308037391 + y: 4140673.7543894518 + } + point { + x: 586389.73928373214 + y: 4140673.8038607487 + } + point { + x: 586389.54548709048 + y: 4140673.853332045 + } + point { + x: 586389.3516904487 + y: 4140673.9028033419 + } + point { + x: 586389.15789380693 + y: 4140673.9522746387 + } + point { + x: 586388.96409716527 + y: 4140674.0017459355 + } + point { + x: 586388.77030052349 + y: 4140674.0512172324 + } + point { + x: 586388.57650388172 + y: 4140674.1006885287 + } + point { + x: 586388.38270724006 + y: 4140674.1501598256 + } + point { + x: 586388.18891059828 + y: 4140674.1996311224 + } + point { + x: 586387.99511395651 + y: 4140674.2491024192 + } + point { + x: 586387.80131731485 + y: 4140674.2985737161 + } + point { + x: 586387.60752067307 + y: 4140674.3480450129 + } + point { + x: 586387.4137240313 + y: 4140674.3975163093 + } + point { + x: 586387.21992738964 + y: 4140674.4469876061 + } + point { + x: 586387.02613074786 + y: 4140674.496458903 + } + point { + x: 586386.83233410609 + y: 4140674.5459302 + } + point { + x: 586386.63853746443 + y: 4140674.5954014966 + } + point { + x: 586386.44474082266 + y: 4140674.6448727935 + } + point { + x: 586386.25094418088 + y: 4140674.69434409 + } + point { + x: 586386.05714753922 + y: 4140674.7438153867 + } + point { + x: 586385.86335089745 + y: 4140674.7932866835 + } + point { + x: 586385.66955425567 + y: 4140674.8427579803 + } + point { + x: 586385.475757614 + y: 4140674.8922292772 + } + point { + x: 586385.28196097224 + y: 4140674.941700574 + } + point { + x: 586385.08816433046 + y: 4140674.9911718704 + } + point { + x: 586384.8943676888 + y: 4140675.0406431672 + } + point { + x: 586384.700571047 + y: 4140675.0901144641 + } + point { + x: 586384.50677440525 + y: 4140675.1395857609 + } + point { + x: 586384.31297776359 + y: 4140675.1890570577 + } + point { + x: 586384.11918112182 + y: 4140675.2385283541 + } + point { + x: 586383.92538448 + y: 4140675.2879996509 + } + point { + x: 586383.73158783838 + y: 4140675.3374709478 + } + point { + x: 586383.53779119661 + y: 4140675.3869422446 + } + point { + x: 586383.34399455483 + y: 4140675.4364135414 + } + point { + x: 586383.15019791317 + y: 4140675.4858848383 + } + point { + x: 586382.9564012714 + y: 4140675.5353561346 + } + point { + x: 586382.76260462962 + y: 4140675.5848274315 + } + point { + x: 586382.568807988 + y: 4140675.6342987283 + } + point { + x: 586382.37501134619 + y: 4140675.6837700251 + } + point { + x: 586382.18121470441 + y: 4140675.733241322 + } + point { + x: 586381.98741806275 + y: 4140675.7827126188 + } + point { + x: 586381.793621421 + y: 4140675.8321839152 + } + point { + x: 586381.59982477932 + y: 4140675.881655212 + } + point { + x: 586381.40602813754 + y: 4140675.9311265089 + } + point { + x: 586381.21223149577 + y: 4140675.9805978057 + } + point { + x: 586381.01843485411 + y: 4140676.0300691025 + } + point { + x: 586380.82463821233 + y: 4140676.0795403994 + } + point { + x: 586380.63084157056 + y: 4140676.1290116957 + } + point { + x: 586380.4370449289 + y: 4140676.1784829926 + } + point { + x: 586380.24324828712 + y: 4140676.2279542894 + } + point { + x: 586380.04945164535 + y: 4140676.2774255862 + } + point { + x: 586379.85565500369 + y: 4140676.3268968831 + } + point { + x: 586379.66185836191 + y: 4140676.3763681795 + } + point { + x: 586379.46806172014 + y: 4140676.4258394763 + } + point { + x: 586379.27426507848 + y: 4140676.4753107731 + } + point { + x: 586379.0804684367 + y: 4140676.52478207 + } + point { + x: 586378.88667179493 + y: 4140676.5742533668 + } + point { + x: 586378.69287515327 + y: 4140676.6237246636 + } + point { + x: 586378.49907851149 + y: 4140676.67319596 + } + point { + x: 586378.30528186972 + y: 4140676.7226672568 + } + point { + x: 586378.11148522806 + y: 4140676.7721385537 + } + point { + x: 586377.91768858628 + y: 4140676.8216098505 + } + point { + x: 586377.72389194451 + y: 4140676.8710811473 + } + point { + x: 586377.53009530285 + y: 4140676.9205524442 + } + point { + x: 586377.33629866107 + y: 4140676.9700237405 + } + point { + x: 586377.1425020193 + y: 4140677.0194950374 + } + point { + x: 586376.94870537764 + y: 4140677.0689663342 + } + point { + x: 586376.75490873586 + y: 4140677.1184376311 + } + point { + x: 586376.56111209409 + y: 4140677.1679089279 + } + point { + x: 586376.36731545243 + y: 4140677.2173802247 + } + point { + x: 586376.17351881065 + y: 4140677.2668515211 + } + point { + x: 586375.97972216888 + y: 4140677.3163228179 + } + point { + x: 586375.78592552722 + y: 4140677.3657941148 + } + point { + x: 586375.59212888544 + y: 4140677.4152654116 + } + point { + x: 586375.39833224367 + y: 4140677.4647367084 + } + point { + x: 586375.204535602 + y: 4140677.5142080048 + } + point { + x: 586375.01073896023 + y: 4140677.5636793016 + } + point { + x: 586374.81694231846 + y: 4140677.6131505985 + } + point { + x: 586374.6231456768 + y: 4140677.6626218953 + } + point { + x: 586374.429349035 + y: 4140677.7120931922 + } + point { + x: 586374.23555239325 + y: 4140677.761564489 + } + point { + x: 586374.04175575159 + y: 4140677.8110357854 + } + point { + x: 586373.84795910981 + y: 4140677.8605070822 + } + point { + x: 586373.65416246816 + y: 4140677.909978379 + } + point { + x: 586373.46036582638 + y: 4140677.9594496759 + } + point { + x: 586373.26656918461 + y: 4140678.0089209727 + } + point { + x: 586373.072772543 + y: 4140678.0583922695 + } + point { + x: 586372.87897590117 + y: 4140678.1078635659 + } + point { + x: 586372.6851792594 + y: 4140678.1573348627 + } + point { + x: 586372.49138261774 + y: 4140678.2068061596 + } + point { + x: 586372.297585976 + y: 4140678.2562774564 + } + point { + x: 586372.10378933419 + y: 4140678.3057487532 + } + point { + x: 586371.90999269253 + y: 4140678.35522005 + } + point { + x: 586371.71619605075 + y: 4140678.4046913465 + } + point { + x: 586371.522399409 + y: 4140678.4541626433 + } + point { + x: 586371.32860276732 + y: 4140678.50363394 + } + point { + x: 586371.13480612554 + y: 4140678.553105237 + } + point { + x: 586370.94100948377 + y: 4140678.6025765338 + } + point { + x: 586370.74721284211 + y: 4140678.65204783 + } + point { + x: 586370.55341620033 + y: 4140678.701519127 + } + point { + x: 586370.35961955856 + y: 4140678.7509904238 + } + point { + x: 586370.1658229169 + y: 4140678.8004617207 + } + point { + x: 586369.97202627512 + y: 4140678.8499330175 + } + point { + x: 586369.77822963335 + y: 4140678.8994043143 + } + point { + x: 586369.58443299169 + y: 4140678.9488756107 + } + point { + x: 586369.39063634991 + y: 4140678.9983469076 + } + point { + x: 586369.19683970814 + y: 4140679.0478182044 + } + point { + x: 586369.00304306648 + y: 4140679.0972895012 + } + point { + x: 586368.8092464247 + y: 4140679.1467607981 + } + point { + x: 586368.61544978293 + y: 4140679.1962320949 + } + point { + x: 586368.42165314127 + y: 4140679.2457033913 + } + point { + x: 586368.22785649949 + y: 4140679.2951746881 + } + point { + x: 586368.03405985772 + y: 4140679.3446459849 + } + point { + x: 586367.840263216 + y: 4140679.3941172818 + } + point { + x: 586367.64646657428 + y: 4140679.4435885786 + } + point { + x: 586367.45266993251 + y: 4140679.493059875 + } + point { + x: 586367.25887329085 + y: 4140679.5425311718 + } + point { + x: 586367.06507664907 + y: 4140679.5920024686 + } + point { + x: 586366.8712800073 + y: 4140679.6414737655 + } + point { + x: 586366.67748336564 + y: 4140679.6909450623 + } + point { + x: 586366.48368672386 + y: 4140679.7404163592 + } + point { + x: 586366.28989008209 + y: 4140679.7898876555 + } + point { + x: 586366.09609344043 + y: 4140679.8393589524 + } + point { + x: 586365.90229679865 + y: 4140679.8888302492 + } + point { + x: 586365.708500157 + y: 4140679.938301546 + } + point { + x: 586365.51470351522 + y: 4140679.9877728429 + } + point { + x: 586365.32090687344 + y: 4140680.0372441397 + } + point { + x: 586365.12711023178 + y: 4140680.0867154361 + } + point { + x: 586364.93331359 + y: 4140680.1361867329 + } + point { + x: 586364.73951694823 + y: 4140680.1856580297 + } + point { + x: 586364.54572030657 + y: 4140680.2351293266 + } + point { + x: 586364.3519236648 + y: 4140680.2846006234 + } + point { + x: 586364.158127023 + y: 4140680.3340719203 + } + point { + x: 586363.96433038136 + y: 4140680.3835432166 + } + point { + x: 586363.77053373959 + y: 4140680.4330145135 + } + point { + x: 586363.57673709781 + y: 4140680.4824858103 + } + point { + x: 586363.38294045615 + y: 4140680.5319571071 + } + point { + x: 586363.18914381438 + y: 4140680.581428404 + } + point { + x: 586362.9953471726 + y: 4140680.6308997003 + } + point { + x: 586362.801550531 + y: 4140680.6803709972 + } + point { + x: 586362.60775388917 + y: 4140680.729842294 + } + point { + x: 586362.41395724739 + y: 4140680.7793135908 + } + point { + x: 586362.22016060574 + y: 4140680.8287848877 + } + point { + x: 586362.026363964 + y: 4140680.8782561845 + } + point { + x: 586361.83256732218 + y: 4140680.9277274809 + } + point { + x: 586361.63877068053 + y: 4140680.9771987777 + } + point { + x: 586361.44497403875 + y: 4140681.0266700746 + } + point { + x: 586361.251177397 + y: 4140681.0761413714 + } + point { + x: 586361.05738075532 + y: 4140681.1256126682 + } + point { + x: 586360.86358411354 + y: 4140681.1750839651 + } + point { + x: 586360.66978747176 + y: 4140681.2245552614 + } + point { + x: 586360.47599083011 + y: 4140681.2740265583 + } + point { + x: 586360.28219418833 + y: 4140681.3234978551 + } + point { + x: 586360.08839754655 + y: 4140681.3729691519 + } + point { + x: 586359.8946009049 + y: 4140681.4224404488 + } + point { + x: 586359.70080426312 + y: 4140681.4719117456 + } + point { + x: 586359.50700762135 + y: 4140681.521383042 + } + point { + x: 586359.31321097969 + y: 4140681.5708543388 + } + point { + x: 586359.11941433791 + y: 4140681.6203256357 + } + point { + x: 586358.92561769614 + y: 4140681.6697969325 + } + point { + x: 586358.73182105448 + y: 4140681.7192682293 + } + point { + x: 586358.5380244127 + y: 4140681.7687395257 + } + point { + x: 586358.34422777093 + y: 4140681.8182108225 + } + point { + x: 586358.15043112927 + y: 4140681.8676821194 + } + point { + x: 586357.95663448749 + y: 4140681.9171534162 + } + point { + x: 586357.76283784572 + y: 4140681.966624713 + } + point { + x: 586357.569041204 + y: 4140682.01609601 + } + point { + x: 586357.37524456228 + y: 4140682.0655673062 + } + point { + x: 586357.18144792062 + y: 4140682.1150386031 + } + point { + x: 586356.98765127885 + y: 4140682.1645099 + } + point { + x: 586356.79385463707 + y: 4140682.2139811967 + } + point { + x: 586356.60005799541 + y: 4140682.2634524936 + } + point { + x: 586356.40626135364 + y: 4140682.3129237904 + } + point { + x: 586356.21246471186 + y: 4140682.3623950868 + } + point { + x: 586356.0186680702 + y: 4140682.4118663836 + } + point { + x: 586355.82487142843 + y: 4140682.4613376805 + } + point { + x: 586355.63107478665 + y: 4140682.5108089773 + } + point { + x: 586355.437278145 + y: 4140682.5602802741 + } + point { + x: 586355.24348150322 + y: 4140682.609751571 + } + point { + x: 586355.04968486144 + y: 4140682.6592228673 + } + point { + x: 586354.85588821978 + y: 4140682.7086941642 + } + point { + x: 586354.662091578 + y: 4140682.758165461 + } + point { + x: 586354.46829493623 + y: 4140682.8076367578 + } + point { + x: 586354.27449829457 + y: 4140682.8571080547 + } + point { + x: 586354.0807016528 + y: 4140682.9065793511 + } + point { + x: 586353.886905011 + y: 4140682.9560506479 + } + point { + x: 586353.69310836936 + y: 4140683.0055219447 + } + point { + x: 586353.49931172759 + y: 4140683.0549932416 + } + point { + x: 586353.30551508581 + y: 4140683.1044645384 + } + point { + x: 586353.11171844415 + y: 4140683.1539358352 + } + point { + x: 586352.91792180238 + y: 4140683.2034071316 + } + point { + x: 586352.7241251606 + y: 4140683.2528784284 + } + point { + x: 586352.530328519 + y: 4140683.3023497253 + } + point { + x: 586352.33653187717 + y: 4140683.3518210221 + } + point { + x: 586352.14273523539 + y: 4140683.4012923189 + } + point { + x: 586351.94893859373 + y: 4140683.4507636158 + } + point { + x: 586351.755141952 + y: 4140683.5002349121 + } + point { + x: 586351.56134531018 + y: 4140683.549706209 + } + point { + x: 586351.36754866852 + y: 4140683.5991775058 + } + point { + x: 586351.17375202675 + y: 4140683.6486488027 + } + point { + x: 586350.979955385 + y: 4140683.6981200995 + } + point { + x: 586350.78615874331 + y: 4140683.7475913963 + } + point { + x: 586350.59236210154 + y: 4140683.7970626927 + } + point { + x: 586350.39856545976 + y: 4140683.8465339895 + } + point { + x: 586350.2047688181 + y: 4140683.8960052864 + } + point { + x: 586350.01097217633 + y: 4140683.9454765832 + } + point { + x: 586349.81717553455 + y: 4140683.99494788 + } + point { + x: 586349.62337889289 + y: 4140684.0444191764 + } + point { + x: 586349.42958225112 + y: 4140684.0938904732 + } + point { + x: 586349.23578560946 + y: 4140684.14336177 + } + point { + x: 586349.04198896769 + y: 4140684.1928330669 + } + point { + x: 586348.84819232591 + y: 4140684.2423043638 + } + point { + x: 586348.65439568425 + y: 4140684.2917756606 + } + point { + x: 586348.46059904248 + y: 4140684.341246957 + } + point { + x: 586348.2668024007 + y: 4140684.3907182538 + } + point { + x: 586348.073005759 + y: 4140684.4401895506 + } + point { + x: 586347.87665356509 + y: 4140684.4903132142 + } + point { + x: 586347.72302824655 + y: 4140684.5736279017 + } + point { + x: 586347.569402928 + y: 4140684.6569425897 + } + point { + x: 586347.41577760945 + y: 4140684.7402572772 + } + point { + x: 586347.2621522909 + y: 4140684.8235719651 + } + point { + x: 586347.10852697236 + y: 4140684.906886653 + } + point { + x: 586346.95490165381 + y: 4140684.9902013405 + } + point { + x: 586346.80127633526 + y: 4140685.0735160285 + } + point { + x: 586346.64765101671 + y: 4140685.1568307159 + } + point { + x: 586346.49402569816 + y: 4140685.2401454039 + } + point { + x: 586346.34040037962 + y: 4140685.3234600914 + } + point { + x: 586346.18677506107 + y: 4140685.4067747793 + } + point { + x: 586346.03314974252 + y: 4140685.4900894668 + } + point { + x: 586345.879524424 + y: 4140685.5734041547 + } + point { + x: 586345.68815281987 + y: 4140685.6762909689 + } + point { + x: 586345.56125069747 + y: 4140685.7897441746 + } + point { + x: 586345.43434857507 + y: 4140685.9031973807 + } + point { + x: 586345.30744645279 + y: 4140686.0166505864 + } + point { + x: 586345.18054433039 + y: 4140686.1301037921 + } + point { + x: 586345.053642208 + y: 4140686.2435569977 + } + point { + x: 586344.92674008559 + y: 4140686.3570102039 + } + point { + x: 586344.79983796331 + y: 4140686.4704634096 + } + point { + x: 586344.67293584091 + y: 4140686.5839166152 + } + point { + x: 586344.54603371851 + y: 4140686.6973698214 + } + point { + x: 586344.41913159611 + y: 4140686.810823027 + } + point { + x: 586344.29222947382 + y: 4140686.9242762327 + } + point { + x: 586344.16532735142 + y: 4140687.0377294389 + } + point { + x: 586344.02943487035 + y: 4140687.1588886632 + } + point { + x: 586343.95230469562 + y: 4140687.3011883148 + } + point { + x: 586343.875174521 + y: 4140687.4434879669 + } + point { + x: 586343.79804434627 + y: 4140687.5857876185 + } + point { + x: 586343.72091417166 + y: 4140687.7280872706 + } + point { + x: 586343.643783997 + y: 4140687.8703869223 + } + point { + x: 586343.56665382232 + y: 4140688.0126865744 + } + point { + x: 586343.4895236477 + y: 4140688.154986226 + } + point { + x: 586343.41239347309 + y: 4140688.2972858781 + } + point { + x: 586343.33526329836 + y: 4140688.43958553 + } + point { + x: 586343.25813312375 + y: 4140688.5818851818 + } + point { + x: 586343.18100294913 + y: 4140688.7241848339 + } + point { + x: 586343.1038727744 + y: 4140688.8664844856 + } + point { + x: 586343.02674259979 + y: 4140689.0087841377 + } + point { + x: 586342.949612425 + y: 4140689.1510837893 + } + point { + x: 586342.87831022893 + y: 4140689.2835487211 + } + point { + x: 586342.83490688 + y: 4140689.431658647 + } + point { + x: 586342.79150353116 + y: 4140689.5797685729 + } + point { + x: 586342.74810018227 + y: 4140689.7278784988 + } + point { + x: 586342.70469683339 + y: 4140689.8759884248 + } + point { + x: 586342.6612934845 + y: 4140690.0240983507 + } + point { + x: 586342.61789013562 + y: 4140690.1722082766 + } + point { + x: 586342.55869757663 + y: 4140690.3676857753 + } + point { + x: 586342.55811543646 + y: 4140690.5261298358 + } + point { + x: 586342.55753329629 + y: 4140690.6845738962 + } + point { + x: 586342.55695115612 + y: 4140690.8430179567 + } + point { + x: 586342.556369016 + y: 4140691.0014620177 + } + point { + x: 586342.55578687578 + y: 4140691.1599060781 + } + point { + x: 586342.5552047356 + y: 4140691.3183501386 + } + point { + x: 586342.55462259543 + y: 4140691.4767941991 + } + point { + x: 586342.55404045526 + y: 4140691.6352382596 + } + point { + x: 586342.55345831509 + y: 4140691.7936823205 + } + point { + x: 586342.55287617492 + y: 4140691.952126381 + } + point { + x: 586342.55229403474 + y: 4140692.1105704415 + } + point { + x: 586342.55224384693 + y: 4140692.2557157562 + } + point { + x: 586342.58864930947 + y: 4140692.4516071687 + } + point { + x: 586342.62582384958 + y: 4140692.6473087566 + } + point { + x: 586342.6637494904 + y: 4140692.8428249569 + } + point { + x: 586342.70240825508 + y: 4140693.0381602072 + } + point { + x: 586342.74178216688 + y: 4140693.233318944 + } + point { + x: 586342.78185324883 + y: 4140693.4283056054 + } + point { + x: 586342.82260352431 + y: 4140693.6231246274 + } + point { + x: 586342.86401501624 + y: 4140693.8177804481 + } + point { + x: 586342.906069748 + y: 4140694.012277504 + } + point { + x: 586342.9487497427 + y: 4140694.2066202327 + } + point { + x: 586342.99203702353 + y: 4140694.4008130711 + } + point { + x: 586343.03591361351 + y: 4140694.5948604564 + } + point { + x: 586343.080361536 + y: 4140694.788766826 + } + point { + x: 586343.125362814 + y: 4140694.9825366167 + } + point { + x: 586343.17089947092 + y: 4140695.1761742658 + } + point { + x: 586343.21695352974 + y: 4140695.3696842105 + } + point { + x: 586343.26350701367 + y: 4140695.5630708882 + } + point { + x: 586343.310541946 + y: 4140695.7563387351 + } + point { + x: 586343.35804034967 + y: 4140695.9494921896 + } + point { + x: 586343.405984248 + y: 4140696.1425356879 + } + point { + x: 586343.4543556642 + y: 4140696.3354736678 + } + point { + x: 586343.50313662132 + y: 4140696.5283105657 + } + point { + x: 586343.55230914254 + y: 4140696.72105082 + } + point { + x: 586343.60185525124 + y: 4140696.9136988665 + } + point { + x: 586343.65175697033 + y: 4140697.106259143 + } + point { + x: 586343.70199632307 + y: 4140697.2987360866 + } + point { + x: 586343.75255533273 + y: 4140697.4911341346 + } + point { + x: 586343.80341602233 + y: 4140697.6834577238 + } + point { + x: 586343.85456041514 + y: 4140697.8757112916 + } + point { + x: 586343.90597053431 + y: 4140698.0678992751 + } + point { + x: 586343.957628403 + y: 4140698.2600261113 + } + point { + x: 586344.00951604429 + y: 4140698.4520962378 + } + point { + x: 586344.06161548162 + y: 4140698.6441140915 + } + point { + x: 586344.1139087379 + y: 4140698.8360841093 + } + point { + x: 586344.16637783637 + y: 4140699.0280107288 + } + point { + x: 586344.21900480019 + y: 4140699.2198983864 + } + point { + x: 586344.27177165262 + y: 4140699.4117515204 + } + point { + x: 586344.32466041681 + y: 4140699.603574567 + } + point { + x: 586344.37765311578 + y: 4140699.7953719636 + } + point { + x: 586344.43073177291 + y: 4140699.9871481475 + } + point { + x: 586344.48387841124 + y: 4140700.178907556 + } + point { + x: 586344.537075054 + y: 4140700.3706546258 + } + point { + x: 586344.5903037244 + y: 4140700.5623937948 + } + point { + x: 586344.64354644541 + y: 4140700.7541294992 + } + point { + x: 586344.69678524043 + y: 4140700.9458661764 + } + point { + x: 586344.75000213261 + y: 4140701.1376082641 + } + point { + x: 586344.803179145 + y: 4140701.3293601992 + } + point { + x: 586344.85629830079 + y: 4140701.5211264188 + } + point { + x: 586344.90934162575 + y: 4140701.712911359 + } + point { + x: 586344.962295973 + y: 4140701.904718264 + } + point { + x: 586345.01516315481 + y: 4140702.0965466872 + } + point { + x: 586345.06794787524 + y: 4140702.2883954686 + } + point { + x: 586345.12065483863 + y: 4140702.4802634497 + } + point { + x: 586345.17328874918 + y: 4140702.6721494715 + } + point { + x: 586345.225854311 + y: 4140702.8640523739 + } + point { + x: 586345.27835622861 + y: 4140703.0559709989 + } + point { + x: 586345.33079920616 + y: 4140703.2479041861 + } + point { + x: 586345.38318794768 + y: 4140703.4398507774 + } + point { + x: 586345.43552715762 + y: 4140703.6318096132 + } + point { + x: 586345.4878215401 + y: 4140703.8237795341 + } + point { + x: 586345.54007579945 + y: 4140704.015759381 + } + point { + x: 586345.59229463991 + y: 4140704.2077479949 + } + point { + x: 586345.64448276558 + y: 4140704.3997442168 + } + point { + x: 586345.69664488069 + y: 4140704.5917468872 + } + point { + x: 586345.74878568971 + y: 4140704.783754847 + } + point { + x: 586345.80090989673 + y: 4140704.9757669368 + } + point { + x: 586345.85302220588 + y: 4140705.1677819979 + } + point { + x: 586345.9051273216 + y: 4140705.359798871 + } + point { + x: 586345.9572299479 + y: 4140705.5518163969 + } + point { + x: 586346.00933478924 + y: 4140705.7438334161 + } + point { + x: 586346.06144654984 + y: 4140705.9358487697 + } + point { + x: 586346.11356993369 + y: 4140706.1278612986 + } + point { + x: 586346.16570964537 + y: 4140706.3198698433 + } + point { + x: 586346.21787014115 + y: 4140706.5118733062 + } + point { + x: 586346.27005260717 + y: 4140706.703871395 + } + point { + x: 586346.32225591119 + y: 4140706.895864387 + } + point { + x: 586346.37447887147 + y: 4140707.0878525707 + } + point { + x: 586346.42672030639 + y: 4140707.2798362356 + } + point { + x: 586346.47897903423 + y: 4140707.4718156708 + } + point { + x: 586346.53125387337 + y: 4140707.6637911657 + } + point { + x: 586346.58354364219 + y: 4140707.8557630088 + } + point { + x: 586346.635847159 + y: 4140708.0477314894 + } + point { + x: 586346.68816324219 + y: 4140708.2396968966 + } + point { + x: 586346.7404907099 + y: 4140708.4316595197 + } + point { + x: 586346.79282838071 + y: 4140708.6236196477 + } + point { + x: 586346.8451750729 + y: 4140708.81557757 + } + point { + x: 586346.89752960461 + y: 4140709.0075335749 + } + point { + x: 586346.94989079447 + y: 4140709.1994879525 + } + point { + x: 586347.00225746073 + y: 4140709.3914409908 + } + point { + x: 586347.05462842155 + y: 4140709.58339298 + } + point { + x: 586347.10700249544 + y: 4140709.7753442088 + } + point { + x: 586347.15937850077 + y: 4140709.9672949663 + } + point { + x: 586347.2117552557 + y: 4140710.1592455413 + } + point { + x: 586347.26413157873 + y: 4140710.3511962229 + } + point { + x: 586347.31650628825 + y: 4140710.5431473008 + } + point { + x: 586347.3688782024 + y: 4140710.7350990642 + } + point { + x: 586347.42124613957 + y: 4140710.9270518012 + } + point { + x: 586347.47360891965 + y: 4140711.1190058012 + } + point { + x: 586347.52596576326 + y: 4140711.3109612544 + } + point { + x: 586347.578316848 + y: 4140711.5029181172 + } + point { + x: 586347.630662492 + y: 4140711.6948763118 + } + point { + x: 586347.68300301337 + y: 4140711.88683576 + } + point { + x: 586347.73533873016 + y: 4140712.0787963839 + } + point { + x: 586347.78766996029 + y: 4140712.2707581059 + } + point { + x: 586347.83999702206 + y: 4140712.4627208482 + } + point { + x: 586347.8923202334 + y: 4140712.6546845324 + } + point { + x: 586347.94463991246 + y: 4140712.8466490814 + } + point { + x: 586347.99695637717 + y: 4140713.038614417 + } + point { + x: 586348.04926994583 + y: 4140713.2305804612 + } + point { + x: 586348.10158093623 + y: 4140713.4225471364 + } + point { + x: 586348.15388966666 + y: 4140713.6145143644 + } + point { + x: 586348.206196455 + y: 4140713.8064820678 + } + point { + x: 586348.25850161957 + y: 4140713.9984501684 + } + point { + x: 586348.31080547825 + y: 4140714.1904185885 + } + point { + x: 586348.36310834915 + y: 4140714.38238725 + } + point { + x: 586348.41541055043 + y: 4140714.5743560754 + } + point { + x: 586348.4677124 + y: 4140714.7663249867 + } + point { + x: 586348.52001421608 + y: 4140714.9582939059 + } + point { + x: 586348.57231631654 + y: 4140715.1502627553 + } + point { + x: 586348.62461901968 + y: 4140715.3422314571 + } + point { + x: 586348.67692264344 + y: 4140715.5341999331 + } + point { + x: 586348.729227506 + y: 4140715.7261681054 + } + point { + x: 586348.78153390007 + y: 4140715.9181359028 + } + point { + x: 586348.83384187729 + y: 4140716.1101033129 + } + point { + x: 586348.886151354 + y: 4140716.302070356 + } + point { + x: 586348.9384622447 + y: 4140716.4940370526 + } + point { + x: 586348.9907744641 + y: 4140716.6860034242 + } + point { + x: 586349.04308792681 + y: 4140716.8779694913 + } + point { + x: 586349.09540254751 + y: 4140717.0699352748 + } + point { + x: 586349.147718241 + y: 4140717.2619007961 + } + point { + x: 586349.20003492164 + y: 4140717.4538660757 + } + point { + x: 586349.25235250441 + y: 4140717.6458311342 + } + point { + x: 586349.30467090383 + y: 4140717.8377959928 + } + point { + x: 586349.35699003458 + y: 4140718.0297606727 + } + point { + x: 586349.40930981131 + y: 4140718.2217251947 + } + point { + x: 586349.4616301487 + y: 4140718.4136895789 + } + point { + x: 586349.51395096141 + y: 4140718.6056538471 + } + point { + x: 586349.566272164 + y: 4140718.79761802 + } + point { + x: 586349.61859367124 + y: 4140718.9895821181 + } + point { + x: 586349.67091539782 + y: 4140719.1815461628 + } + point { + x: 586349.72323725838 + y: 4140719.3735101745 + } + point { + x: 586349.77555916749 + y: 4140719.5654741745 + } + point { + x: 586349.82788103994 + y: 4140719.7574381833 + } + point { + x: 586349.88020279026 + y: 4140719.9494022224 + } + point { + x: 586349.93252433313 + y: 4140720.1413663123 + } + point { + x: 586349.98484558333 + y: 4140720.3333304734 + } + point { + x: 586350.03716645588 + y: 4140720.5252947276 + } + point { + x: 586350.0894869006 + y: 4140720.7172590862 + } + point { + x: 586350.14180693333 + y: 4140720.9092235458 + } + point { + x: 586350.19412657677 + y: 4140721.1011881009 + } + point { + x: 586350.24644585385 + y: 4140721.2931527453 + } + point { + x: 586350.2987647875 + y: 4140721.4851174741 + } + point { + x: 586350.35108340043 + y: 4140721.6770822811 + } + point { + x: 586350.40340171556 + y: 4140721.8690471612 + } + point { + x: 586350.45571975573 + y: 4140722.0610121083 + } + point { + x: 586350.508037544 + y: 4140722.2529771174 + } + point { + x: 586350.56035510288 + y: 4140722.4449421824 + } + point { + x: 586350.61267245549 + y: 4140722.6369072981 + } + point { + x: 586350.66498962464 + y: 4140722.8288724585 + } + point { + x: 586350.71730663325 + y: 4140723.0208376581 + } + point { + x: 586350.769623504 + y: 4140723.2128028916 + } + point { + x: 586350.82194026 + y: 4140723.4047681531 + } + point { + x: 586350.87425692391 + y: 4140723.5967334374 + } + point { + x: 586350.92657351855 + y: 4140723.7886987384 + } + point { + x: 586350.97889006708 + y: 4140723.9806640507 + } + point { + x: 586351.031206592 + y: 4140724.172629369 + } + point { + x: 586351.08352311642 + y: 4140724.3645946868 + } + point { + x: 586351.13583966321 + y: 4140724.5565599995 + } + point { + x: 586351.188156255 + y: 4140724.7485253015 + } + point { + x: 586351.24047291488 + y: 4140724.9404905862 + } + point { + x: 586351.29278966563 + y: 4140725.1324558491 + } + point { + x: 586351.34510652756 + y: 4140725.3244210845 + } + point { + x: 586351.39742350264 + y: 4140725.5163862924 + } + point { + x: 586351.44974058494 + y: 4140725.7083514738 + } + point { + x: 586351.502057768 + y: 4140725.9003166305 + } + point { + x: 586351.554375046 + y: 4140726.0922817644 + } + point { + x: 586351.60669241275 + y: 4140726.2842468764 + } + point { + x: 586351.659009862 + y: 4140726.4762119679 + } + point { + x: 586351.71132738772 + y: 4140726.6681770408 + } + point { + x: 586351.76364498376 + y: 4140726.8601420969 + } + point { + x: 586351.81596264406 + y: 4140727.0521071367 + } + point { + x: 586351.86828036245 + y: 4140727.2440721625 + } + point { + x: 586351.92059813277 + y: 4140727.4360371758 + } + point { + x: 586351.97291594883 + y: 4140727.6280021779 + } + point { + x: 586352.02523380471 + y: 4140727.8199671702 + } + point { + x: 586352.07755169412 + y: 4140728.0119321542 + } + point { + x: 586352.129869611 + y: 4140728.2038971311 + } + point { + x: 586352.18218754919 + y: 4140728.3958621034 + } + point { + x: 586352.23450550251 + y: 4140728.587827072 + } + point { + x: 586352.286823465 + y: 4140728.7797920378 + } + point { + x: 586352.33914143045 + y: 4140728.9717570036 + } + point { + x: 586352.39145939262 + y: 4140729.1637219694 + } + point { + x: 586352.44377734559 + y: 4140729.3556869379 + } + point { + x: 586352.49609528307 + y: 4140729.54765191 + } + point { + x: 586352.548413199 + y: 4140729.7396168881 + } + point { + x: 586352.60073108738 + y: 4140729.931581872 + } + point { + x: 586352.65304894489 + y: 4140730.1235468639 + } + point { + x: 586352.70536677307 + y: 4140730.3155118632 + } + point { + x: 586352.75768457341 + y: 4140730.507476869 + } + point { + x: 586352.81000234769 + y: 4140730.6994418814 + } + point { + x: 586352.86232009728 + y: 4140730.8914068993 + } + point { + x: 586352.914637824 + y: 4140731.0833719233 + } + point { + x: 586352.96695552964 + y: 4140731.2753369524 + } + point { + x: 586353.01927321567 + y: 4140731.4673019862 + } + point { + x: 586353.07159088366 + y: 4140731.6592670246 + } + point { + x: 586353.12390853534 + y: 4140731.8512320668 + } + point { + x: 586353.17622617236 + y: 4140732.0431971126 + } + point { + x: 586353.22854379634 + y: 4140732.2351621618 + } + point { + x: 586353.280861409 + y: 4140732.4271272132 + } + point { + x: 586353.33317901182 + y: 4140732.6190922675 + } + point { + x: 586353.38549660658 + y: 4140732.8110573236 + } + point { + x: 586353.437814195 + y: 4140733.0030223816 + } + point { + x: 586353.49013177841 + y: 4140733.1949874405 + } + point { + x: 586353.54244935873 + y: 4140733.3869525003 + } + point { + x: 586353.59476693755 + y: 4140733.57891756 + } + point { + x: 586353.64708451636 + y: 4140733.7708826205 + } + point { + x: 586353.69940209691 + y: 4140733.96284768 + } + point { + x: 586353.751719681 + y: 4140734.1548127388 + } + point { + x: 586353.80403727 + y: 4140734.3467777963 + } + point { + x: 586353.85635486571 + y: 4140734.5387428524 + } + point { + x: 586353.90867246944 + y: 4140734.7307079062 + } + point { + x: 586353.96099008131 + y: 4140734.9226729581 + } + point { + x: 586354.01330770075 + y: 4140735.1146380082 + } + point { + x: 586354.06562532741 + y: 4140735.3066030564 + } + point { + x: 586354.11794296093 + y: 4140735.4985681032 + } + point { + x: 586354.17026060075 + y: 4140735.6905331486 + } + point { + x: 586354.22257824638 + y: 4140735.8824981921 + } + point { + x: 586354.2748958976 + y: 4140736.0744632343 + } + point { + x: 586354.32721355371 + y: 4140736.2664282755 + } + point { + x: 586354.37953121448 + y: 4140736.4583933158 + } + point { + x: 586354.43184887932 + y: 4140736.6503583547 + } + point { + x: 586354.48416654789 + y: 4140736.8423233926 + } + point { + x: 586354.5364842196 + y: 4140737.03428843 + } + point { + x: 586354.58880189422 + y: 4140737.2262534667 + } + point { + x: 586354.64111957117 + y: 4140737.4182185028 + } + point { + x: 586354.6934372501 + y: 4140737.6101835384 + } + point { + x: 586354.74575493054 + y: 4140737.8021485736 + } + point { + x: 586354.798072612 + y: 4140737.9941136083 + } + point { + x: 586354.8503902941 + y: 4140738.186078643 + } + point { + x: 586354.90270797629 + y: 4140738.3780436781 + } + point { + x: 586354.95502565836 + y: 4140738.5700087128 + } + point { + x: 586355.00734333962 + y: 4140738.7619737475 + } + point { + x: 586355.05966101971 + y: 4140738.9539387831 + } + point { + x: 586355.11197869829 + y: 4140739.1459038188 + } + point { + x: 586355.16429637477 + y: 4140739.3378688549 + } + point { + x: 586355.216614049 + y: 4140739.5298338914 + } + point { + x: 586355.26893172134 + y: 4140739.7217989285 + } + point { + x: 586355.32124939153 + y: 4140739.9137639664 + } + point { + x: 586355.37356705987 + y: 4140740.1057290044 + } + point { + x: 586355.42588472646 + y: 4140740.2976940433 + } + point { + x: 586355.47820239153 + y: 4140740.4896590821 + } + point { + x: 586355.530520055 + y: 4140740.6816241215 + } + point { + x: 586355.582837717 + y: 4140740.8735891613 + } + point { + x: 586355.63515537779 + y: 4140741.0655542011 + } + point { + x: 586355.6874730374 + y: 4140741.2575192414 + } + point { + x: 586355.73979069607 + y: 4140741.4494842817 + } + point { + x: 586355.79210835369 + y: 4140741.6414493229 + } + point { + x: 586355.8444260105 + y: 4140741.8334143637 + } + point { + x: 586355.89674366673 + y: 4140742.0253794049 + } + point { + x: 586355.94906132226 + y: 4140742.2173444461 + } + point { + x: 586356.00137897744 + y: 4140742.4093094873 + } + point { + x: 586356.05369663227 + y: 4140742.601274529 + } + point { + x: 586356.10601428687 + y: 4140742.79323957 + } + point { + x: 586356.15833194135 + y: 4140742.9852046119 + } + point { + x: 586356.21064959583 + y: 4140743.1771696536 + } + point { + x: 586356.26296725043 + y: 4140743.3691346953 + } + point { + x: 586356.31528490537 + y: 4140743.5610997365 + } + point { + x: 586356.36760256067 + y: 4140743.7530647777 + } + point { + x: 586356.41992021643 + y: 4140743.9450298189 + } + point { + x: 586356.47223787266 + y: 4140744.13699486 + } + point { + x: 586356.52455552958 + y: 4140744.3289599009 + } + point { + x: 586356.57687318709 + y: 4140744.5209249421 + } + point { + x: 586356.62919084507 + y: 4140744.7128899824 + } + point { + x: 586356.68150850351 + y: 4140744.9048550231 + } + point { + x: 586356.73382616241 + y: 4140745.0968200634 + } + point { + x: 586356.78614382178 + y: 4140745.2887851042 + } + point { + x: 586356.8384614815 + y: 4140745.4807501445 + } + point { + x: 586356.89077914157 + y: 4140745.6727151843 + } + point { + x: 586356.943096802 + y: 4140745.8646802246 + } + point { + x: 586356.99541446264 + y: 4140746.0566452644 + } + point { + x: 586357.04773212364 + y: 4140746.2486103047 + } + point { + x: 586357.10004978476 + y: 4140746.4405753445 + } + point { + x: 586357.15236744622 + y: 4140746.6325403843 + } + point { + x: 586357.20468510769 + y: 4140746.8245054241 + } + point { + x: 586357.25700276939 + y: 4140747.0164704639 + } + point { + x: 586357.3093204312 + y: 4140747.2084355038 + } + point { + x: 586357.36163809313 + y: 4140747.4004005436 + } + point { + x: 586357.413955755 + y: 4140747.5923655829 + } + point { + x: 586357.46627341688 + y: 4140747.7843306228 + } + point { + x: 586357.51859107881 + y: 4140747.9762956626 + } + point { + x: 586357.57090874063 + y: 4140748.1682607024 + } + point { + x: 586357.62322640244 + y: 4140748.3602257422 + } + point { + x: 586357.675544064 + y: 4140748.552190782 + } + point { + x: 586357.72786172561 + y: 4140748.7441558219 + } + point { + x: 586357.78017938684 + y: 4140748.9361208617 + } + point { + x: 586357.83249704808 + y: 4140749.1280859015 + } + point { + x: 586357.88481470908 + y: 4140749.3200509413 + } + point { + x: 586357.93713237008 + y: 4140749.5120159811 + } + point { + x: 586357.98945003084 + y: 4140749.7039810214 + } + point { + x: 586358.04176769149 + y: 4140749.8959460612 + } + point { + x: 586358.094085352 + y: 4140750.0879111015 + } + point { + x: 586358.14640301256 + y: 4140750.2798761413 + } + point { + x: 586358.19872067287 + y: 4140750.4718411816 + } + point { + x: 586358.25103833317 + y: 4140750.6638062219 + } + point { + x: 586358.30335599335 + y: 4140750.8557712617 + } + point { + x: 586358.35567365354 + y: 4140751.047736302 + } + point { + x: 586358.40799131361 + y: 4140751.2397013423 + } + point { + x: 586358.46030897368 + y: 4140751.4316663826 + } + point { + x: 586358.51262663363 + y: 4140751.6236314224 + } + point { + x: 586358.5649442937 + y: 4140751.8155964627 + } + point { + x: 586358.61726195365 + y: 4140752.007561503 + } + point { + x: 586358.66957961349 + y: 4140752.1995265433 + } + point { + x: 586358.72189727344 + y: 4140752.3914915835 + } + point { + x: 586358.77421493339 + y: 4140752.5834566238 + } + point { + x: 586358.82653259335 + y: 4140752.7754216637 + } + point { + x: 586358.8788502533 + y: 4140752.9673867039 + } + point { + x: 586358.93116791325 + y: 4140753.1593517442 + } + point { + x: 586358.98348557332 + y: 4140753.3513167845 + } + point { + x: 586359.03580323339 + y: 4140753.5432818248 + } + point { + x: 586359.08812089346 + y: 4140753.7352468646 + } + point { + x: 586359.14043855364 + y: 4140753.9272119049 + } + point { + x: 586359.19275621383 + y: 4140754.1191769452 + } + point { + x: 586359.245073874 + y: 4140754.3111419855 + } + point { + x: 586359.2973915342 + y: 4140754.5031070253 + } + point { + x: 586359.3497091945 + y: 4140754.6950720656 + } + point { + x: 586359.4020268548 + y: 4140754.8870371059 + } + point { + x: 586359.45434451511 + y: 4140755.0790021457 + } + point { + x: 586359.50666217552 + y: 4140755.270967186 + } + point { + x: 586359.55897983583 + y: 4140755.4629322258 + } + point { + x: 586359.61129749625 + y: 4140755.6548972661 + } + point { + x: 586359.66361515666 + y: 4140755.8468623064 + } + point { + x: 586359.71593281708 + y: 4140756.0388273462 + } + point { + x: 586359.7682504775 + y: 4140756.2307923865 + } + point { + x: 586359.820568138 + y: 4140756.4227574263 + } + point { + x: 586359.87288579845 + y: 4140756.6147224666 + } + point { + x: 586359.92520345887 + y: 4140756.8066875064 + } + point { + x: 586359.97752111929 + y: 4140756.9986525467 + } + point { + x: 586360.02983877982 + y: 4140757.190617587 + } + point { + x: 586360.08215644024 + y: 4140757.3825826268 + } + point { + x: 586360.13447410066 + y: 4140757.5745476671 + } + point { + x: 586360.1867917612 + y: 4140757.7665127069 + } + point { + x: 586360.23910942161 + y: 4140757.9584777472 + } + point { + x: 586360.291427082 + y: 4140758.150442787 + } + point { + x: 586360.34374474245 + y: 4140758.3424078273 + } + point { + x: 586360.39606240287 + y: 4140758.5343728676 + } + point { + x: 586360.44838006329 + y: 4140758.7263379074 + } + point { + x: 586360.50069772359 + y: 4140758.9183029477 + } + point { + x: 586360.553015384 + y: 4140759.1102679875 + } + point { + x: 586360.60533304443 + y: 4140759.3022330278 + } + point { + x: 586360.65765070473 + y: 4140759.494198068 + } + point { + x: 586360.70996836515 + y: 4140759.6861631079 + } + point { + x: 586360.76228602545 + y: 4140759.8781281481 + } + point { + x: 586360.81460368575 + y: 4140760.0700931884 + } + point { + x: 586360.86692134617 + y: 4140760.2620582283 + } + point { + x: 586360.91923900647 + y: 4140760.4540232685 + } + point { + x: 586360.97155666677 + y: 4140760.6459883084 + } + point { + x: 586361.02387432707 + y: 4140760.8379533486 + } + point { + x: 586361.07619198749 + y: 4140761.0299183889 + } + point { + x: 586361.12850964779 + y: 4140761.2218834287 + } + point { + x: 586361.1808273081 + y: 4140761.413848469 + } + point { + x: 586361.2331449684 + y: 4140761.6058135093 + } + point { + x: 586361.2854626287 + y: 4140761.7977785491 + } + point { + x: 586361.337780289 + y: 4140761.9897435894 + } + point { + x: 586361.3900979493 + y: 4140762.1817086297 + } + point { + x: 586361.44241560972 + y: 4140762.3736736695 + } + point { + x: 586361.49473327 + y: 4140762.56563871 + } + point { + x: 586361.54705093033 + y: 4140762.7576037496 + } + point { + x: 586361.59936859063 + y: 4140762.94956879 + } + point { + x: 586361.65168625093 + y: 4140763.14153383 + } + point { + x: 586361.70400391135 + y: 4140763.33349887 + } + point { + x: 586361.75632157165 + y: 4140763.5254639103 + } + point { + x: 586361.808639232 + y: 4140763.7174289506 + } + point { + x: 586361.86095689237 + y: 4140763.9093939904 + } + point { + x: 586361.91327455267 + y: 4140764.1013590307 + } + point { + x: 586361.965592213 + y: 4140764.2933240705 + } + point { + x: 586362.01790987339 + y: 4140764.4852891108 + } + point { + x: 586362.0702275337 + y: 4140764.6772541511 + } + point { + x: 586362.122545194 + y: 4140764.8692191909 + } + point { + x: 586362.17486285442 + y: 4140765.0611842312 + } + point { + x: 586362.22718051472 + y: 4140765.2531492715 + } + point { + x: 586362.27949817514 + y: 4140765.4451143113 + } + point { + x: 586362.33181583544 + y: 4140765.6370793516 + } + point { + x: 586362.38413349586 + y: 4140765.8290443914 + } + point { + x: 586362.43645115616 + y: 4140766.0210094317 + } + point { + x: 586362.48876881658 + y: 4140766.212974472 + } + point { + x: 586362.54108647688 + y: 4140766.4049395118 + } + point { + x: 586362.59340413718 + y: 4140766.5969045521 + } + point { + x: 586362.6457217976 + y: 4140766.7888695924 + } + point { + x: 586362.6980394579 + y: 4140766.9808346322 + } + point { + x: 586362.75035711832 + y: 4140767.1727996725 + } + point { + x: 586362.80267477862 + y: 4140767.3647647123 + } + point { + x: 586362.854992439 + y: 4140767.5567297526 + } + point { + x: 586362.90731009934 + y: 4140767.7486947929 + } + point { + x: 586362.95962775976 + y: 4140767.9406598327 + } + point { + x: 586363.01194542006 + y: 4140768.132624873 + } + point { + x: 586363.06426308036 + y: 4140768.3245899128 + } + point { + x: 586363.11658074078 + y: 4140768.5165549531 + } + point { + x: 586363.16889840108 + y: 4140768.7085199933 + } + point { + x: 586363.2212160615 + y: 4140768.9004850332 + } + point { + x: 586363.2735337218 + y: 4140769.0924500735 + } + point { + x: 586363.32585138211 + y: 4140769.2844151137 + } + point { + x: 586363.37816904252 + y: 4140769.4763801536 + } + point { + x: 586363.43048670283 + y: 4140769.6683451938 + } + point { + x: 586363.48280436313 + y: 4140769.8603102337 + } + point { + x: 586363.53512202355 + y: 4140770.0522752739 + } + point { + x: 586363.58743968385 + y: 4140770.2442403142 + } + point { + x: 586363.63975734427 + y: 4140770.4362053541 + } + point { + x: 586363.69207500457 + y: 4140770.6281703943 + } + point { + x: 586363.74439266487 + y: 4140770.8201354346 + } + point { + x: 586363.79671032529 + y: 4140771.0121004744 + } + point { + x: 586363.84902798559 + y: 4140771.2040655147 + } + point { + x: 586363.90134564589 + y: 4140771.3960305545 + } + point { + x: 586363.95366330631 + y: 4140771.5879955948 + } + point { + x: 586364.00598096661 + y: 4140771.7799606351 + } + point { + x: 586364.058298627 + y: 4140771.9719256749 + } + point { + x: 586364.11061628733 + y: 4140772.1638907152 + } + point { + x: 586364.16293394763 + y: 4140772.3558557555 + } + point { + x: 586364.215251608 + y: 4140772.5478207953 + } + point { + x: 586364.26756926836 + y: 4140772.7397858356 + } + point { + x: 586364.31988692866 + y: 4140772.9317508754 + } + point { + x: 586364.37220458908 + y: 4140773.1237159157 + } + point { + x: 586364.42452224938 + y: 4140773.315680956 + } + point { + x: 586364.4768399098 + y: 4140773.5076459958 + } + point { + x: 586364.5291575701 + y: 4140773.6996110361 + } + point { + x: 586364.5814752304 + y: 4140773.8915760764 + } + point { + x: 586364.63379289082 + y: 4140774.0835411162 + } + point { + x: 586364.68611055112 + y: 4140774.2755061565 + } + point { + x: 586364.73842821154 + y: 4140774.4674711963 + } + point { + x: 586364.79074587184 + y: 4140774.6594362366 + } + point { + x: 586364.84306353214 + y: 4140774.8514012769 + } + point { + x: 586364.89538119256 + y: 4140775.0433663167 + } + point { + x: 586364.94769885286 + y: 4140775.235331357 + } + point { + x: 586365.00001651316 + y: 4140775.4272963973 + } + point { + x: 586365.05233417358 + y: 4140775.6192614371 + } + point { + x: 586365.10465183388 + y: 4140775.8112264774 + } + point { + x: 586365.1569694943 + y: 4140776.0031915172 + } + point { + x: 586365.2092871546 + y: 4140776.1951565575 + } + point { + x: 586365.26160481491 + y: 4140776.3871215978 + } + point { + x: 586365.31392247532 + y: 4140776.5790866376 + } + point { + x: 586365.36624013563 + y: 4140776.7710516779 + } + point { + x: 586365.418557796 + y: 4140776.9630167182 + } + point { + x: 586365.47087545635 + y: 4140777.154981758 + } + point { + x: 586365.52319311665 + y: 4140777.3469467983 + } + point { + x: 586365.57551077707 + y: 4140777.5389118381 + } + point { + x: 586365.62782843737 + y: 4140777.7308768784 + } + point { + x: 586365.68014609779 + y: 4140777.9228419187 + } + point { + x: 586365.73246375809 + y: 4140778.1148069585 + } + point { + x: 586365.78478141839 + y: 4140778.3067719988 + } + point { + x: 586365.83709907881 + y: 4140778.4987370386 + } + point { + x: 586365.88941673911 + y: 4140778.6907020789 + } + point { + x: 586365.94173439953 + y: 4140778.8826671191 + } + point { + x: 586365.99405205983 + y: 4140779.074632159 + } + point { + x: 586366.04636972013 + y: 4140779.2665971993 + } + point { + x: 586366.09868738055 + y: 4140779.4585622395 + } + point { + x: 586366.15100504085 + y: 4140779.6505272794 + } + point { + x: 586366.20332270127 + y: 4140779.8424923196 + } + point { + x: 586366.25564036157 + y: 4140780.0344573595 + } + point { + x: 586366.30795802188 + y: 4140780.2264223997 + } + point { + x: 586366.36027568229 + y: 4140780.41838744 + } + point { + x: 586366.4125933426 + y: 4140780.61035248 + } + point { + x: 586366.464911003 + y: 4140780.80231752 + } + point { + x: 586366.51722866332 + y: 4140780.9942825604 + } + point { + x: 586366.56954632362 + y: 4140781.1862476002 + } + point { + x: 586366.621863984 + y: 4140781.3782126405 + } + point { + x: 586366.67418164434 + y: 4140781.5701776803 + } + point { + x: 586366.72649930476 + y: 4140781.7621427206 + } + point { + x: 586366.77881696506 + y: 4140781.9541077609 + } + point { + x: 586366.83113462536 + y: 4140782.1460728007 + } + point { + x: 586366.88345228578 + y: 4140782.338037841 + } + point { + x: 586366.93576994608 + y: 4140782.5300028813 + } + point { + x: 586366.9880876065 + y: 4140782.7219679211 + } + point { + x: 586367.0404052668 + y: 4140782.9139329614 + } + point { + x: 586367.0927229271 + y: 4140783.1058980012 + } + point { + x: 586367.14504058752 + y: 4140783.2978630415 + } + point { + x: 586367.19735824782 + y: 4140783.4898280818 + } + point { + x: 586367.24967590813 + y: 4140783.6817931216 + } + point { + x: 586367.30199356854 + y: 4140783.8737581619 + } + point { + x: 586367.35431122885 + y: 4140784.0657232022 + } + point { + x: 586367.40662888926 + y: 4140784.257688242 + } + point { + x: 586367.45894654957 + y: 4140784.4496532823 + } + point { + x: 586367.51126420987 + y: 4140784.6416183221 + } + point { + x: 586367.56358187029 + y: 4140784.8335833624 + } + point { + x: 586367.61589953059 + y: 4140785.0255484027 + } + point { + x: 586367.66821719089 + y: 4140785.2175134425 + } + point { + x: 586367.72053485131 + y: 4140785.4094784828 + } + point { + x: 586367.77285251161 + y: 4140785.6014435231 + } + point { + x: 586367.825170172 + y: 4140785.7934085629 + } + point { + x: 586367.87748783233 + y: 4140785.9853736032 + } + point { + x: 586367.93636111321 + y: 4140786.2013956155 + } + } + } + } + left_boundary { + curve { + segment { + line_segment { + point { + x: 586392.40718075773 + y: 4140671.3166957693 + } + point { + x: 586392.21339513129 + y: 4140671.366164254 + } + point { + x: 586392.01960950484 + y: 4140671.4156327387 + } + point { + x: 586391.8258238784 + y: 4140671.4651012234 + } + point { + x: 586391.632038252 + y: 4140671.5145697086 + } + point { + x: 586391.43825262552 + y: 4140671.5640381933 + } + point { + x: 586391.24446699908 + y: 4140671.613506678 + } + point { + x: 586391.05068137276 + y: 4140671.6629751627 + } + point { + x: 586390.85689574631 + y: 4140671.7124436479 + } + point { + x: 586390.66311011987 + y: 4140671.7619121326 + } + point { + x: 586390.46932449343 + y: 4140671.8113806173 + } + point { + x: 586390.275538867 + y: 4140671.860849102 + } + point { + x: 586390.08175324055 + y: 4140671.9103175872 + } + point { + x: 586389.88796761411 + y: 4140671.9597860719 + } + point { + x: 586389.69418198778 + y: 4140672.0092545566 + } + point { + x: 586389.50039636134 + y: 4140672.0587230418 + } + point { + x: 586389.3066107349 + y: 4140672.1081915265 + } + point { + x: 586389.11282510846 + y: 4140672.1576600112 + } + point { + x: 586388.919039482 + y: 4140672.2071284959 + } + point { + x: 586388.72525385558 + y: 4140672.2565969811 + } + point { + x: 586388.53146822914 + y: 4140672.3060654658 + } + point { + x: 586388.33768260281 + y: 4140672.3555339505 + } + point { + x: 586388.14389697637 + y: 4140672.4050024352 + } + point { + x: 586387.95011134993 + y: 4140672.4544709204 + } + point { + x: 586387.75632572349 + y: 4140672.5039394051 + } + point { + x: 586387.562540097 + y: 4140672.55340789 + } + point { + x: 586387.3687544706 + y: 4140672.6028763745 + } + point { + x: 586387.17496884416 + y: 4140672.6523448597 + } + point { + x: 586386.98118321784 + y: 4140672.7018133444 + } + point { + x: 586386.7873975914 + y: 4140672.7512818291 + } + point { + x: 586386.593611965 + y: 4140672.8007503138 + } + point { + x: 586386.39982633851 + y: 4140672.850218799 + } + point { + x: 586386.20604071207 + y: 4140672.8996872837 + } + point { + x: 586386.01225508563 + y: 4140672.9491557684 + } + point { + x: 586385.81846945919 + y: 4140672.9986242536 + } + point { + x: 586385.62468383287 + y: 4140673.0480927383 + } + point { + x: 586385.43089820642 + y: 4140673.097561223 + } + point { + x: 586385.23711258 + y: 4140673.1470297077 + } + point { + x: 586385.04332695354 + y: 4140673.1964981928 + } + point { + x: 586384.8495413271 + y: 4140673.2459666776 + } + point { + x: 586384.65575570066 + y: 4140673.2954351623 + } + point { + x: 586384.46197007422 + y: 4140673.344903647 + } + point { + x: 586384.26818444789 + y: 4140673.3943721321 + } + point { + x: 586384.07439882145 + y: 4140673.4438406168 + } + point { + x: 586383.880613195 + y: 4140673.4933091016 + } + point { + x: 586383.68682756857 + y: 4140673.5427775863 + } + point { + x: 586383.49304194213 + y: 4140673.5922460714 + } + point { + x: 586383.29925631569 + y: 4140673.6417145561 + } + point { + x: 586383.10547068925 + y: 4140673.6911830408 + } + point { + x: 586382.91168506292 + y: 4140673.7406515256 + } + point { + x: 586382.71789943648 + y: 4140673.7901200107 + } + point { + x: 586382.52411381 + y: 4140673.8395884954 + } + point { + x: 586382.3303281836 + y: 4140673.88905698 + } + point { + x: 586382.13654255716 + y: 4140673.9385254649 + } + point { + x: 586381.94275693072 + y: 4140673.98799395 + } + point { + x: 586381.74897130427 + y: 4140674.0374624347 + } + point { + x: 586381.555185678 + y: 4140674.0869309194 + } + point { + x: 586381.36140005151 + y: 4140674.1363994046 + } + point { + x: 586381.16761442507 + y: 4140674.1858678893 + } + point { + x: 586380.97382879863 + y: 4140674.235336374 + } + point { + x: 586380.78004317218 + y: 4140674.2848048587 + } + point { + x: 586380.58625754574 + y: 4140674.3342733439 + } + point { + x: 586380.39247191942 + y: 4140674.3837418286 + } + point { + x: 586380.198686293 + y: 4140674.4332103133 + } + point { + x: 586380.00490066654 + y: 4140674.482678798 + } + point { + x: 586379.81111504009 + y: 4140674.5321472832 + } + point { + x: 586379.61732941365 + y: 4140674.5816157679 + } + point { + x: 586379.42354378721 + y: 4140674.6310842526 + } + point { + x: 586379.22975816077 + y: 4140674.6805527373 + } + point { + x: 586379.03597253445 + y: 4140674.7300212225 + } + point { + x: 586378.842186908 + y: 4140674.7794897072 + } + point { + x: 586378.64840128156 + y: 4140674.8289581919 + } + point { + x: 586378.45461565512 + y: 4140674.8784266766 + } + point { + x: 586378.26083002868 + y: 4140674.9278951618 + } + point { + x: 586378.06704440224 + y: 4140674.9773636465 + } + point { + x: 586377.8732587758 + y: 4140675.0268321312 + } + point { + x: 586377.67947314947 + y: 4140675.0763006164 + } + point { + x: 586377.485687523 + y: 4140675.1257691011 + } + point { + x: 586377.29190189659 + y: 4140675.1752375858 + } + point { + x: 586377.09811627015 + y: 4140675.2247060705 + } + point { + x: 586376.90433064371 + y: 4140675.2741745557 + } + point { + x: 586376.71054501727 + y: 4140675.3236430404 + } + point { + x: 586376.51675939083 + y: 4140675.3731115251 + } + point { + x: 586376.3229737645 + y: 4140675.42258001 + } + point { + x: 586376.12918813806 + y: 4140675.472048495 + } + point { + x: 586375.93540251162 + y: 4140675.5215169797 + } + point { + x: 586375.74161688518 + y: 4140675.5709854644 + } + point { + x: 586375.54783125874 + y: 4140675.6204539491 + } + point { + x: 586375.3540456323 + y: 4140675.6699224343 + } + point { + x: 586375.16026000585 + y: 4140675.719390919 + } + point { + x: 586374.96647437953 + y: 4140675.7688594037 + } + point { + x: 586374.77268875309 + y: 4140675.8183278884 + } + point { + x: 586374.57890312665 + y: 4140675.8677963736 + } + point { + x: 586374.38511750021 + y: 4140675.9172648583 + } + point { + x: 586374.19133187376 + y: 4140675.966733343 + } + point { + x: 586373.99754624732 + y: 4140676.0162018277 + } + point { + x: 586373.80376062088 + y: 4140676.0656703128 + } + point { + x: 586373.60997499456 + y: 4140676.1151387976 + } + point { + x: 586373.41618936812 + y: 4140676.1646072823 + } + point { + x: 586373.22240374167 + y: 4140676.2140757674 + } + point { + x: 586373.02861811523 + y: 4140676.2635442521 + } + point { + x: 586372.83483248879 + y: 4140676.3130127368 + } + point { + x: 586372.64104686235 + y: 4140676.3624812216 + } + point { + x: 586372.44726123591 + y: 4140676.4119497067 + } + point { + x: 586372.25347560958 + y: 4140676.4614181914 + } + point { + x: 586372.05968998314 + y: 4140676.5108866761 + } + point { + x: 586371.8659043567 + y: 4140676.5603551609 + } + point { + x: 586371.67211873026 + y: 4140676.609823646 + } + point { + x: 586371.47833310382 + y: 4140676.6592921307 + } + point { + x: 586371.28454747738 + y: 4140676.7087606154 + } + point { + x: 586371.09076185094 + y: 4140676.7582291 + } + point { + x: 586370.89697622461 + y: 4140676.8076975853 + } + point { + x: 586370.70319059817 + y: 4140676.85716607 + } + point { + x: 586370.50940497173 + y: 4140676.9066345547 + } + point { + x: 586370.31561934529 + y: 4140676.9561030394 + } + point { + x: 586370.12183371885 + y: 4140677.0055715246 + } + point { + x: 586369.92804809241 + y: 4140677.0550400093 + } + point { + x: 586369.734262466 + y: 4140677.104508494 + } + point { + x: 586369.54047683964 + y: 4140677.1539769792 + } + point { + x: 586369.3466912132 + y: 4140677.2034454639 + } + point { + x: 586369.15290558676 + y: 4140677.2529139486 + } + point { + x: 586368.95911996032 + y: 4140677.3023824333 + } + point { + x: 586368.76533433388 + y: 4140677.3518509185 + } + point { + x: 586368.57154870743 + y: 4140677.4013194032 + } + point { + x: 586368.377763081 + y: 4140677.4507878879 + } + point { + x: 586368.18397745467 + y: 4140677.5002563726 + } + point { + x: 586367.99019182823 + y: 4140677.5497248578 + } + point { + x: 586367.79640620179 + y: 4140677.5991933425 + } + point { + x: 586367.60262057534 + y: 4140677.6486618272 + } + point { + x: 586367.4088349489 + y: 4140677.6981303119 + } + point { + x: 586367.21504932246 + y: 4140677.7475987971 + } + point { + x: 586367.021263696 + y: 4140677.7970672818 + } + point { + x: 586366.8274780697 + y: 4140677.8465357665 + } + point { + x: 586366.63369244325 + y: 4140677.8960042512 + } + point { + x: 586366.43990681681 + y: 4140677.9454727364 + } + point { + x: 586366.24612119037 + y: 4140677.9949412211 + } + point { + x: 586366.05233556393 + y: 4140678.0444097058 + } + point { + x: 586365.85854993749 + y: 4140678.0938781905 + } + point { + x: 586365.664764311 + y: 4140678.1433466757 + } + point { + x: 586365.47097868472 + y: 4140678.1928151604 + } + point { + x: 586365.27719305828 + y: 4140678.2422836451 + } + point { + x: 586365.08340743184 + y: 4140678.2917521303 + } + point { + x: 586364.8896218054 + y: 4140678.341220615 + } + point { + x: 586364.695836179 + y: 4140678.3906890997 + } + point { + x: 586364.50205055252 + y: 4140678.4401575844 + } + point { + x: 586364.30826492608 + y: 4140678.4896260696 + } + point { + x: 586364.11447929975 + y: 4140678.5390945543 + } + point { + x: 586363.92069367331 + y: 4140678.588563039 + } + point { + x: 586363.72690804687 + y: 4140678.6380315237 + } + point { + x: 586363.53312242043 + y: 4140678.6875000088 + } + point { + x: 586363.339336794 + y: 4140678.7369684936 + } + point { + x: 586363.14555116754 + y: 4140678.7864369783 + } + point { + x: 586362.9517655411 + y: 4140678.835905463 + } + point { + x: 586362.75797991478 + y: 4140678.8853739481 + } + point { + x: 586362.56419428834 + y: 4140678.9348424328 + } + point { + x: 586362.3704086619 + y: 4140678.9843109176 + } + point { + x: 586362.17662303546 + y: 4140679.0337794023 + } + point { + x: 586361.982837409 + y: 4140679.0832478874 + } + point { + x: 586361.78905178257 + y: 4140679.1327163721 + } + point { + x: 586361.59526615613 + y: 4140679.1821848569 + } + point { + x: 586361.40148052981 + y: 4140679.231653342 + } + point { + x: 586361.20769490337 + y: 4140679.2811218267 + } + point { + x: 586361.01390927692 + y: 4140679.3305903114 + } + point { + x: 586360.82012365048 + y: 4140679.3800587961 + } + point { + x: 586360.626338024 + y: 4140679.4295272813 + } + point { + x: 586360.4325523976 + y: 4140679.478995766 + } + point { + x: 586360.23876677128 + y: 4140679.5284642507 + } + point { + x: 586360.04498114483 + y: 4140679.5779327354 + } + point { + x: 586359.85119551839 + y: 4140679.6274012206 + } + point { + x: 586359.657409892 + y: 4140679.6768697053 + } + point { + x: 586359.46362426551 + y: 4140679.72633819 + } + point { + x: 586359.26983863907 + y: 4140679.7758066747 + } + point { + x: 586359.07605301263 + y: 4140679.82527516 + } + point { + x: 586358.8822673863 + y: 4140679.8747436446 + } + point { + x: 586358.68848175986 + y: 4140679.9242121293 + } + point { + x: 586358.49469613342 + y: 4140679.973680614 + } + point { + x: 586358.300910507 + y: 4140680.0231490992 + } + point { + x: 586358.10712488054 + y: 4140680.0726175839 + } + point { + x: 586357.9133392541 + y: 4140680.1220860686 + } + point { + x: 586357.71955362766 + y: 4140680.1715545533 + } + point { + x: 586357.52576800133 + y: 4140680.2210230385 + } + point { + x: 586357.33198237489 + y: 4140680.2704915232 + } + point { + x: 586357.13819674845 + y: 4140680.3199600079 + } + point { + x: 586356.944411122 + y: 4140680.3694284931 + } + point { + x: 586356.75062549557 + y: 4140680.4188969778 + } + point { + x: 586356.55683986912 + y: 4140680.4683654625 + } + point { + x: 586356.36305424268 + y: 4140680.5178339472 + } + point { + x: 586356.16926861636 + y: 4140680.5673024324 + } + point { + x: 586355.97548298992 + y: 4140680.6167709171 + } + point { + x: 586355.78169736348 + y: 4140680.6662394018 + } + point { + x: 586355.587911737 + y: 4140680.7157078865 + } + point { + x: 586355.39412611059 + y: 4140680.7651763717 + } + point { + x: 586355.20034048415 + y: 4140680.8146448564 + } + point { + x: 586355.00655485771 + y: 4140680.8641133411 + } + point { + x: 586354.81276923139 + y: 4140680.9135818258 + } + point { + x: 586354.618983605 + y: 4140680.963050311 + } + point { + x: 586354.4251979785 + y: 4140681.0125187957 + } + point { + x: 586354.23141235206 + y: 4140681.0619872804 + } + point { + x: 586354.03762672562 + y: 4140681.1114557651 + } + point { + x: 586353.84384109918 + y: 4140681.1609242503 + } + point { + x: 586353.65005547274 + y: 4140681.210392735 + } + point { + x: 586353.45626984641 + y: 4140681.2598612197 + } + point { + x: 586353.26248422 + y: 4140681.3093297048 + } + point { + x: 586353.06869859353 + y: 4140681.3587981896 + } + point { + x: 586352.87491296709 + y: 4140681.4082666743 + } + point { + x: 586352.68112734065 + y: 4140681.457735159 + } + point { + x: 586352.48734171421 + y: 4140681.5072036441 + } + point { + x: 586352.29355608777 + y: 4140681.5566721288 + } + point { + x: 586352.09977046144 + y: 4140681.6061406136 + } + point { + x: 586351.905984835 + y: 4140681.6556090983 + } + point { + x: 586351.71219920856 + y: 4140681.7050775834 + } + point { + x: 586351.51841358212 + y: 4140681.7545460681 + } + point { + x: 586351.32462795568 + y: 4140681.8040145529 + } + point { + x: 586351.13084232924 + y: 4140681.8534830376 + } + point { + x: 586350.93705670279 + y: 4140681.9029515227 + } + point { + x: 586350.74327107647 + y: 4140681.9524200074 + } + point { + x: 586350.54948545 + y: 4140682.0018884921 + } + point { + x: 586350.35569982359 + y: 4140682.0513569769 + } + point { + x: 586350.16191419715 + y: 4140682.100825462 + } + point { + x: 586349.9681285707 + y: 4140682.1502939467 + } + point { + x: 586349.77434294426 + y: 4140682.1997624314 + } + point { + x: 586349.58055731782 + y: 4140682.2492309161 + } + point { + x: 586349.3867716915 + y: 4140682.2986994013 + } + point { + x: 586349.192986065 + y: 4140682.348167886 + } + point { + x: 586348.99920043861 + y: 4140682.3976363707 + } + point { + x: 586348.80541481217 + y: 4140682.4471048559 + } + point { + x: 586348.61162918573 + y: 4140682.4965733406 + } + point { + x: 586348.41784355929 + y: 4140682.5460418253 + } + point { + x: 586348.22405793285 + y: 4140682.59551031 + } + point { + x: 586348.03027230653 + y: 4140682.6449787952 + } + point { + x: 586347.83648668008 + y: 4140682.69444728 + } + point { + x: 586347.64270105364 + y: 4140682.7439157646 + } + point { + x: 586347.44380432274 + y: 4140682.7946889829 + } + point { + x: 586347.266253375 + y: 4140682.8867523358 + } + point { + x: 586347.08870242722 + y: 4140682.9788156888 + } + point { + x: 586346.91115147935 + y: 4140683.0708790417 + } + point { + x: 586346.73360053159 + y: 4140683.1629423941 + } + point { + x: 586346.55604958383 + y: 4140683.2550057471 + } + point { + x: 586346.378498636 + y: 4140683.3470691 + } + point { + x: 586346.20094768819 + y: 4140683.4391324529 + } + point { + x: 586346.02339674043 + y: 4140683.5311958059 + } + point { + x: 586345.84584579256 + y: 4140683.6232591583 + } + point { + x: 586345.6682948448 + y: 4140683.7153225113 + } + point { + x: 586345.490743897 + y: 4140683.8073858642 + } + point { + x: 586345.31319294916 + y: 4140683.8994492171 + } + point { + x: 586345.13564200141 + y: 4140683.99151257 + } + point { + x: 586344.88259848254 + y: 4140684.1227201754 + } + point { + x: 586344.73074713477 + y: 4140684.2528784187 + } + point { + x: 586344.57889578713 + y: 4140684.3830366614 + } + point { + x: 586344.42704443936 + y: 4140684.5131949042 + } + point { + x: 586344.27519309171 + y: 4140684.6433531474 + } + point { + x: 586344.123341744 + y: 4140684.77351139 + } + point { + x: 586343.9714903963 + y: 4140684.903669633 + } + point { + x: 586343.81963904854 + y: 4140685.0338278762 + } + point { + x: 586343.66778770078 + y: 4140685.163986119 + } + point { + x: 586343.51593635313 + y: 4140685.2941443617 + } + point { + x: 586343.36408500536 + y: 4140685.424302605 + } + point { + x: 586343.21223365772 + y: 4140685.5544608478 + } + point { + x: 586343.06038231 + y: 4140685.6846190905 + } + point { + x: 586342.89055024483 + y: 4140685.8301893706 + } + point { + x: 586342.788589817 + y: 4140686.002247707 + } + point { + x: 586342.68662938918 + y: 4140686.1743060434 + } + point { + x: 586342.58466896135 + y: 4140686.34636438 + } + point { + x: 586342.48270853353 + y: 4140686.5184227168 + } + point { + x: 586342.3807481057 + y: 4140686.6904810532 + } + point { + x: 586342.27878767787 + y: 4140686.8625393896 + } + point { + x: 586342.17682725016 + y: 4140687.0345977261 + } + point { + x: 586342.07486682234 + y: 4140687.2066560625 + } + point { + x: 586341.97290639451 + y: 4140687.3787143989 + } + point { + x: 586341.87094596669 + y: 4140687.5507727354 + } + point { + x: 586341.76898553886 + y: 4140687.7228310723 + } + point { + x: 586341.667025111 + y: 4140687.8948894087 + } + point { + x: 586341.56506468321 + y: 4140688.0669477452 + } + point { + x: 586341.46310425538 + y: 4140688.2390060816 + } + point { + x: 586341.37279978441 + y: 4140688.3913949779 + } + point { + x: 586341.309554162 + y: 4140688.5811316143 + } + point { + x: 586341.24630853953 + y: 4140688.7708682506 + } + point { + x: 586341.18306291709 + y: 4140688.9606048875 + } + point { + x: 586341.11981729465 + y: 4140689.1503415238 + } + point { + x: 586341.05657167209 + y: 4140689.3400781606 + } + point { + x: 586340.99332604965 + y: 4140689.529814797 + } + point { + x: 586340.89850200713 + y: 4140689.8142865784 + } + point { + x: 586340.89050836291 + y: 4140690.0141267688 + } + point { + x: 586340.8825147188 + y: 4140690.2139669592 + } + point { + x: 586340.8745210747 + y: 4140690.4138071495 + } + point { + x: 586340.86652743048 + y: 4140690.61364734 + } + point { + x: 586340.85853378638 + y: 4140690.8134875298 + } + point { + x: 586340.85054014227 + y: 4140691.01332772 + } + point { + x: 586340.842546498 + y: 4140691.2131679105 + } + point { + x: 586340.834552854 + y: 4140691.4130081008 + } + point { + x: 586340.82655920985 + y: 4140691.6128482912 + } + point { + x: 586340.81856556563 + y: 4140691.8126884815 + } + point { + x: 586340.81057192152 + y: 4140692.0125286719 + } + point { + x: 586340.80364218191 + y: 4140692.18577137 + } + point { + x: 586340.83557984489 + y: 4140692.3837095662 + } + point { + x: 586340.86848375213 + y: 4140692.5814158847 + } + point { + x: 586340.90233176679 + y: 4140692.7788956226 + } + point { + x: 586340.93710175168 + y: 4140692.9761540778 + } + point { + x: 586340.97277156974 + y: 4140693.1731965481 + } + point { + x: 586341.00931908388 + y: 4140693.3700283309 + } + point { + x: 586341.04672215716 + y: 4140693.5666547245 + } + point { + x: 586341.08495865238 + y: 4140693.7630810258 + } + point { + x: 586341.12400643248 + y: 4140693.9593125335 + } + point { + x: 586341.1638433605 + y: 4140694.1553545445 + } + point { + x: 586341.20444729936 + y: 4140694.3512123572 + } + point { + x: 586341.24579611188 + y: 4140694.5468912688 + } + point { + x: 586341.2878676611 + y: 4140694.7423965773 + } + point { + x: 586341.33063981 + y: 4140694.9377335804 + } + point { + x: 586341.37409042136 + y: 4140695.1329075759 + } + point { + x: 586341.41819735814 + y: 4140695.3279238613 + } + point { + x: 586341.46293848346 + y: 4140695.5227877344 + } + point { + x: 586341.50829166011 + y: 4140695.7175044934 + } + point { + x: 586341.554234751 + y: 4140695.9120794353 + } + point { + x: 586341.60074561927 + y: 4140696.1065178583 + } + point { + x: 586341.64780212753 + y: 4140696.30082506 + } + point { + x: 586341.695382139 + y: 4140696.4950063378 + } + point { + x: 586341.74346351647 + y: 4140696.68906699 + } + point { + x: 586341.7920241229 + y: 4140696.8830123139 + } + point { + x: 586341.84104182129 + y: 4140697.0768476073 + } + point { + x: 586341.89049447444 + y: 4140697.2705781683 + } + point { + x: 586341.94035994553 + y: 4140697.4642092944 + } + point { + x: 586341.99061609723 + y: 4140697.6577462829 + } + point { + x: 586342.04124079261 + y: 4140697.8511944325 + } + point { + x: 586342.09221189457 + y: 4140698.04455904 + } + point { + x: 586342.14350726607 + y: 4140698.2378454036 + } + point { + x: 586342.19510477 + y: 4140698.4310588208 + } + point { + x: 586342.24698226934 + y: 4140698.6242045895 + } + point { + x: 586342.299117627 + y: 4140698.8172880071 + } + point { + x: 586342.351488706 + y: 4140699.0103143719 + } + point { + x: 586342.40407336922 + y: 4140699.2032889812 + } + point { + x: 586342.45684947947 + y: 4140699.3962171329 + } + point { + x: 586342.5097949 + y: 4140699.5891041248 + } + point { + x: 586342.5628874934 + y: 4140699.7819552547 + } + point { + x: 586342.61610512272 + y: 4140699.9747758196 + } + point { + x: 586342.66942565108 + y: 4140700.1675711181 + } + point { + x: 586342.72282694117 + y: 4140700.3603464477 + } + point { + x: 586342.776286856 + y: 4140700.5531071061 + } + point { + x: 586342.82978325861 + y: 4140700.7458583908 + } + point { + x: 586342.88329401193 + y: 4140700.9386055996 + } + point { + x: 586342.9367969787 + y: 4140701.13135403 + } + point { + x: 586342.990270022 + y: 4140701.3241089811 + } + point { + x: 586343.04369100474 + y: 4140701.5168757485 + } + point { + x: 586343.09703779186 + y: 4140701.7096596314 + } + point { + x: 586343.15029382252 + y: 4140701.9024645993 + } + point { + x: 586343.20346033853 + y: 4140702.0952903884 + } + point { + x: 586343.25654212781 + y: 4140702.288135889 + } + point { + x: 586343.30954397819 + y: 4140702.4809999936 + } + point { + x: 586343.3624706777 + y: 4140702.6738815932 + } + point { + x: 586343.4153270144 + y: 4140702.8667795788 + } + point { + x: 586343.46811777586 + y: 4140703.059692842 + } + point { + x: 586343.52084775036 + y: 4140703.2526202747 + } + point { + x: 586343.57352172572 + y: 4140703.4455607673 + } + point { + x: 586343.62614448974 + y: 4140703.6385132121 + } + point { + x: 586343.67872083047 + y: 4140703.8314765 + } + point { + x: 586343.73125553585 + y: 4140704.0244495221 + } + point { + x: 586343.7837533938 + y: 4140704.2174311704 + } + point { + x: 586343.83621919225 + y: 4140704.4104203363 + } + point { + x: 586343.88865771913 + y: 4140704.6034159111 + } + point { + x: 586343.94107376237 + y: 4140704.7964167856 + } + point { + x: 586343.9934721099 + y: 4140704.9894218519 + } + point { + x: 586344.04585754953 + y: 4140705.182430001 + } + point { + x: 586344.09823486942 + y: 4140705.3754401244 + } + point { + x: 586344.1506088574 + y: 4140705.5684511131 + } + point { + x: 586344.20298430137 + y: 4140705.7614618596 + } + point { + x: 586344.25536598929 + y: 4140705.9544712538 + } + point { + x: 586344.30775870907 + y: 4140706.1474781884 + } + point { + x: 586344.36016724864 + y: 4140706.3404815542 + } + point { + x: 586344.412596167 + y: 4140706.533480295 + } + point { + x: 586344.465046771 + y: 4140706.7264741063 + } + point { + x: 586344.51751795062 + y: 4140706.9194632396 + } + point { + x: 586344.57000853808 + y: 4140707.1124479612 + } + point { + x: 586344.62251736561 + y: 4140707.3054285366 + } + point { + x: 586344.6750432658 + y: 4140707.4984052312 + } + point { + x: 586344.72758507077 + y: 4140707.6913783108 + } + point { + x: 586344.780141613 + y: 4140707.8843480404 + } + point { + x: 586344.8327117248 + y: 4140708.077314687 + } + point { + x: 586344.88529423857 + y: 4140708.2702785148 + } + point { + x: 586344.93788798654 + y: 4140708.4632397904 + } + point { + x: 586344.990491801 + y: 4140708.6561987791 + } + point { + x: 586345.04310451448 + y: 4140708.8491557464 + } + point { + x: 586345.09572495928 + y: 4140709.0421109577 + } + point { + x: 586345.14835196768 + y: 4140709.2350646793 + } + point { + x: 586345.20098437206 + y: 4140709.4280171762 + } + point { + x: 586345.25362100475 + y: 4140709.6209687144 + } + point { + x: 586345.306260698 + y: 4140709.8139195596 + } + point { + x: 586345.35890228441 + y: 4140710.0068699773 + } + point { + x: 586345.41154459608 + y: 4140710.1998202326 + } + point { + x: 586345.46418646548 + y: 4140710.3927705921 + } + point { + x: 586345.51682672487 + y: 4140710.5857213205 + } + point { + x: 586345.5694642067 + y: 4140710.778672684 + } + point { + x: 586345.62209774321 + y: 4140710.9716249481 + } + point { + x: 586345.67472616758 + y: 4140711.1645783782 + } + point { + x: 586345.72734868666 + y: 4140711.357533155 + } + point { + x: 586345.77996546542 + y: 4140711.5504892403 + } + point { + x: 586345.83257682051 + y: 4140711.743446562 + } + point { + x: 586345.88518306834 + y: 4140711.9364050482 + } + point { + x: 586345.93778452545 + y: 4140712.1293646265 + } + point { + x: 586345.9903815086 + y: 4140712.322325225 + } + point { + x: 586346.04297433421 + y: 4140712.5152867716 + } + point { + x: 586346.09556331881 + y: 4140712.7082491932 + } + point { + x: 586346.14814877906 + y: 4140712.9012124185 + } + point { + x: 586346.20073103148 + y: 4140713.0941763753 + } + point { + x: 586346.25331039261 + y: 4140713.2871409911 + } + point { + x: 586346.305887179 + y: 4140713.480106194 + } + point { + x: 586346.35846170725 + y: 4140713.6730719116 + } + point { + x: 586346.41103429382 + y: 4140713.8660380715 + } + point { + x: 586346.46360525547 + y: 4140714.059004602 + } + point { + x: 586346.51617490861 + y: 4140714.2519714306 + } + point { + x: 586346.56874356978 + y: 4140714.4449384855 + } + point { + x: 586346.6213115555 + y: 4140714.6379056941 + } + point { + x: 586346.67387918255 + y: 4140714.8308729846 + } + point { + x: 586346.72644676734 + y: 4140715.0238402844 + } + point { + x: 586346.7790146264 + y: 4140715.2168075214 + } + point { + x: 586346.83158307639 + y: 4140715.4097746238 + } + point { + x: 586346.88415243372 + y: 4140715.602741519 + } + point { + x: 586346.936723015 + y: 4140715.7957081352 + } + point { + x: 586346.98929511523 + y: 4140715.9886744046 + } + point { + x: 586347.041868794 + y: 4140716.1816403144 + } + point { + x: 586347.09444396873 + y: 4140716.3746058829 + } + point { + x: 586347.14702055429 + y: 4140716.5675711292 + } + point { + x: 586347.1995984657 + y: 4140716.7605360737 + } + point { + x: 586347.252177618 + y: 4140716.9535007346 + } + point { + x: 586347.30475792638 + y: 4140717.146465132 + } + point { + x: 586347.35733930569 + y: 4140717.3394292854 + } + point { + x: 586347.40992167115 + y: 4140717.5323932138 + } + point { + x: 586347.46250493766 + y: 4140717.7253569365 + } + point { + x: 586347.51508902037 + y: 4140717.9183204728 + } + point { + x: 586347.56767383427 + y: 4140718.1112838429 + } + point { + x: 586347.6202592944 + y: 4140718.304247065 + } + point { + x: 586347.67284531577 + y: 4140718.4972101594 + } + point { + x: 586347.72543181351 + y: 4140718.6901731454 + } + point { + x: 586347.77801870264 + y: 4140718.8831360419 + } + point { + x: 586347.830605898 + y: 4140719.0760988682 + } + point { + x: 586347.883193315 + y: 4140719.2690616446 + } + point { + x: 586347.9357808684 + y: 4140719.4620243893 + } + point { + x: 586347.98836847325 + y: 4140719.6549871224 + } + point { + x: 586348.0409560448 + y: 4140719.8479498634 + } + point { + x: 586348.09354349785 + y: 4140720.040912631 + } + point { + x: 586348.14613074763 + y: 4140720.2338754451 + } + point { + x: 586348.198717709 + y: 4140720.4268383249 + } + point { + x: 586348.25130429748 + y: 4140720.61980129 + } + point { + x: 586348.30389046029 + y: 4140720.8127643522 + } + point { + x: 586348.35647621192 + y: 4140721.0057275081 + } + point { + x: 586348.40906157519 + y: 4140721.1986907525 + } + point { + x: 586348.4616465728 + y: 4140721.3916540802 + } + point { + x: 586348.51423122745 + y: 4140721.5846174862 + } + point { + x: 586348.56681556208 + y: 4140721.7775809648 + } + point { + x: 586348.61939959927 + y: 4140721.9705445119 + } + point { + x: 586348.671983362 + y: 4140722.1635081214 + } + point { + x: 586348.7245668727 + y: 4140722.3564717881 + } + point { + x: 586348.77715015435 + y: 4140722.5494355075 + } + point { + x: 586348.82973322971 + y: 4140722.7423992734 + } + point { + x: 586348.88231612137 + y: 4140722.9353630817 + } + point { + x: 586348.93489885225 + y: 4140723.1283269264 + } + point { + x: 586348.98748144507 + y: 4140723.3212908027 + } + point { + x: 586349.04006392264 + y: 4140723.514254705 + } + point { + x: 586349.09264630754 + y: 4140723.7072186288 + } + point { + x: 586349.14522862271 + y: 4140723.9001825685 + } + point { + x: 586349.19781089085 + y: 4140724.0931465188 + } + point { + x: 586349.25039313466 + y: 4140724.2861104747 + } + point { + x: 586349.30297537684 + y: 4140724.4790744307 + } + point { + x: 586349.35555764032 + y: 4140724.6720383819 + } + point { + x: 586349.4081399478 + y: 4140724.8650023234 + } + point { + x: 586349.46072232211 + y: 4140725.0579662495 + } + point { + x: 586349.51330478583 + y: 4140725.2509301552 + } + point { + x: 586349.56588735955 + y: 4140725.4438940356 + } + point { + x: 586349.61847004632 + y: 4140725.6368578905 + } + point { + x: 586349.67105284 + y: 4140725.8298217212 + } + point { + x: 586349.72363573441 + y: 4140726.0227855286 + } + point { + x: 586349.77621872351 + y: 4140726.2157493145 + } + point { + x: 586349.8288018012 + y: 4140726.40871308 + } + point { + x: 586349.88138496142 + y: 4140726.6016768268 + } + point { + x: 586349.933968198 + y: 4140726.7946405564 + } + point { + x: 586349.98655150493 + y: 4140726.9876042698 + } + point { + x: 586350.0391348761 + y: 4140727.1805679686 + } + point { + x: 586350.09171830525 + y: 4140727.373531654 + } + point { + x: 586350.14430178655 + y: 4140727.5664953277 + } + point { + x: 586350.19688531372 + y: 4140727.7594589908 + } + point { + x: 586350.24946888059 + y: 4140727.9524226449 + } + point { + x: 586350.30205248133 + y: 4140728.1453862912 + } + point { + x: 586350.35463610967 + y: 4140728.3383499314 + } + point { + x: 586350.40721975942 + y: 4140728.5313135665 + } + point { + x: 586350.45980342466 + y: 4140728.7242771983 + } + point { + x: 586350.51238709921 + y: 4140728.9172408278 + } + point { + x: 586350.564970777 + y: 4140729.1102044564 + } + point { + x: 586350.617554452 + y: 4140729.3031680859 + } + point { + x: 586350.670138118 + y: 4140729.4961317172 + } + point { + x: 586350.72272176889 + y: 4140729.6890953523 + } + point { + x: 586350.77530539862 + y: 4140729.8820589921 + } + point { + x: 586350.82788900111 + y: 4140730.0750226383 + } + point { + x: 586350.8804725731 + y: 4140730.2679862911 + } + point { + x: 586350.93305611564 + y: 4140730.4609499509 + } + point { + x: 586350.98563963035 + y: 4140730.6539136167 + } + point { + x: 586351.0382231191 + y: 4140730.8468772885 + } + point { + x: 586351.09080658318 + y: 4140731.039840966 + } + point { + x: 586351.14339002455 + y: 4140731.232804649 + } + point { + x: 586351.19597344461 + y: 4140731.4257683363 + } + point { + x: 586351.248556845 + y: 4140731.6187320286 + } + point { + x: 586351.30114022759 + y: 4140731.8116957247 + } + point { + x: 586351.35372359375 + y: 4140732.0046594245 + } + point { + x: 586351.40630694525 + y: 4140732.1976231276 + } + point { + x: 586351.45889028371 + y: 4140732.3905868339 + } + point { + x: 586351.51147361065 + y: 4140732.5835505426 + } + point { + x: 586351.56405692792 + y: 4140732.7765142536 + } + point { + x: 586351.61664023693 + y: 4140732.9694779669 + } + point { + x: 586351.66922353953 + y: 4140733.1624416811 + } + point { + x: 586351.72180683713 + y: 4140733.3554053963 + } + point { + x: 586351.77439013158 + y: 4140733.5483691129 + } + point { + x: 586351.82697342429 + y: 4140733.7413328295 + } + point { + x: 586351.87955671712 + y: 4140733.934296546 + } + point { + x: 586351.93214001157 + y: 4140734.1272602621 + } + point { + x: 586351.98472330929 + y: 4140734.3202239778 + } + point { + x: 586352.03730661189 + y: 4140734.513187692 + } + point { + x: 586352.08988992113 + y: 4140734.7061514049 + } + point { + x: 586352.14247323829 + y: 4140734.8991151159 + } + point { + x: 586352.19505656348 + y: 4140735.092078825 + } + point { + x: 586352.24763989635 + y: 4140735.2850425327 + } + point { + x: 586352.30022323644 + y: 4140735.4780062386 + } + point { + x: 586352.35280658328 + y: 4140735.6709699426 + } + point { + x: 586352.40538993641 + y: 4140735.8639336457 + } + point { + x: 586352.45797329547 + y: 4140736.0568973473 + } + point { + x: 586352.51055666 + y: 4140736.2498610471 + } + point { + x: 586352.56314002955 + y: 4140736.4428247465 + } + point { + x: 586352.61572340364 + y: 4140736.6357884444 + } + point { + x: 586352.66830678191 + y: 4140736.8287521414 + } + point { + x: 586352.72089016391 + y: 4140737.021715838 + } + point { + x: 586352.773473549 + y: 4140737.2146795336 + } + point { + x: 586352.82605693711 + y: 4140737.4076432283 + } + point { + x: 586352.87864032749 + y: 4140737.6006069225 + } + point { + x: 586352.93122372 + y: 4140737.7935706167 + } + point { + x: 586352.98380711384 + y: 4140737.98653431 + } + point { + x: 586353.03639050876 + y: 4140738.1794980033 + } + point { + x: 586353.08897390438 + y: 4140738.3724616966 + } + point { + x: 586353.14155730023 + y: 4140738.56542539 + } + point { + x: 586353.19414069573 + y: 4140738.7583890827 + } + point { + x: 586353.24672409066 + y: 4140738.951352776 + } + point { + x: 586353.29930748441 + y: 4140739.14431647 + } + point { + x: 586353.35189087666 + y: 4140739.3372801635 + } + point { + x: 586353.4044742668 + y: 4140739.5302438582 + } + point { + x: 586353.45705765486 + y: 4140739.7232075529 + } + point { + x: 586353.50964104082 + y: 4140739.9161712485 + } + point { + x: 586353.56222442479 + y: 4140740.1091349442 + } + point { + x: 586353.61480780679 + y: 4140740.3020986402 + } + point { + x: 586353.66739118716 + y: 4140740.4950623368 + } + point { + x: 586353.7199745659 + y: 4140740.6880260338 + } + point { + x: 586353.772557943 + y: 4140740.8809897313 + } + point { + x: 586353.82514131884 + y: 4140741.0739534292 + } + point { + x: 586353.87772469339 + y: 4140741.2669171272 + } + point { + x: 586353.93030806666 + y: 4140741.4598808251 + } + point { + x: 586353.982891439 + y: 4140741.6528445235 + } + point { + x: 586354.0354748104 + y: 4140741.8458082224 + } + point { + x: 586354.08805818087 + y: 4140742.0387719213 + } + point { + x: 586354.14064155077 + y: 4140742.23173562 + } + point { + x: 586354.19322492008 + y: 4140742.4246993195 + } + point { + x: 586354.24580828892 + y: 4140742.6176630189 + } + point { + x: 586354.29839165742 + y: 4140742.8106267182 + } + point { + x: 586354.35097502568 + y: 4140743.0035904176 + } + point { + x: 586354.40355839382 + y: 4140743.1965541169 + } + point { + x: 586354.456141762 + y: 4140743.3895178162 + } + point { + x: 586354.50872513023 + y: 4140743.5824815156 + } + point { + x: 586354.56130849884 + y: 4140743.7754452149 + } + point { + x: 586354.61389186769 + y: 4140743.9684089143 + } + point { + x: 586354.66647523711 + y: 4140744.1613726136 + } + point { + x: 586354.719058607 + y: 4140744.3543363125 + } + point { + x: 586354.7716419776 + y: 4140744.5473000114 + } + point { + x: 586354.82422534865 + y: 4140744.7402637103 + } + point { + x: 586354.87680872018 + y: 4140744.9332274087 + } + point { + x: 586354.92939209228 + y: 4140745.1261911071 + } + point { + x: 586354.98197546485 + y: 4140745.3191548055 + } + point { + x: 586355.03455883777 + y: 4140745.5121185039 + } + point { + x: 586355.087142211 + y: 4140745.7050822023 + } + point { + x: 586355.13972558477 + y: 4140745.8980459003 + } + point { + x: 586355.19230895885 + y: 4140746.0910095987 + } + point { + x: 586355.24489233317 + y: 4140746.2839732966 + } + point { + x: 586355.29747570772 + y: 4140746.4769369946 + } + point { + x: 586355.3500590825 + y: 4140746.6699006925 + } + point { + x: 586355.40264245751 + y: 4140746.86286439 + } + point { + x: 586355.45522583264 + y: 4140747.055828088 + } + point { + x: 586355.507809208 + y: 4140747.2487917859 + } + point { + x: 586355.56039258349 + y: 4140747.4417554834 + } + point { + x: 586355.612975959 + y: 4140747.6347191813 + } + point { + x: 586355.66555933445 + y: 4140747.8276828788 + } + point { + x: 586355.71814271 + y: 4140748.0206465768 + } + point { + x: 586355.77072608552 + y: 4140748.2136102747 + } + point { + x: 586355.823309461 + y: 4140748.4065739722 + } + point { + x: 586355.87589283648 + y: 4140748.59953767 + } + point { + x: 586355.92847621173 + y: 4140748.7925013676 + } + point { + x: 586355.98105958686 + y: 4140748.9854650656 + } + point { + x: 586356.03364296188 + y: 4140749.1784287635 + } + point { + x: 586356.08622633666 + y: 4140749.3713924615 + } + point { + x: 586356.13880971132 + y: 4140749.5643561594 + } + point { + x: 586356.191393086 + y: 4140749.7573198574 + } + point { + x: 586356.24397646042 + y: 4140749.9502835553 + } + point { + x: 586356.29655983474 + y: 4140750.1432472533 + } + point { + x: 586356.34914320894 + y: 4140750.3362109512 + } + point { + x: 586356.401726583 + y: 4140750.5291746492 + } + point { + x: 586356.454309957 + y: 4140750.7221383476 + } + point { + x: 586356.506893331 + y: 4140750.9151020455 + } + point { + x: 586356.5594767048 + y: 4140751.1080657435 + } + point { + x: 586356.61206007865 + y: 4140751.3010294419 + } + point { + x: 586356.66464345239 + y: 4140751.49399314 + } + point { + x: 586356.717226826 + y: 4140751.6869568382 + } + point { + x: 586356.76981019974 + y: 4140751.8799205362 + } + point { + x: 586356.82239357335 + y: 4140752.0728842346 + } + point { + x: 586356.87497694686 + y: 4140752.2658479325 + } + point { + x: 586356.92756032047 + y: 4140752.458811631 + } + point { + x: 586356.980143694 + y: 4140752.6517753289 + } + point { + x: 586357.03272706759 + y: 4140752.8447390273 + } + point { + x: 586357.08531044121 + y: 4140753.0377027253 + } + point { + x: 586357.13789381483 + y: 4140753.2306664237 + } + point { + x: 586357.19047718844 + y: 4140753.4236301216 + } + point { + x: 586357.24306056206 + y: 4140753.61659382 + } + point { + x: 586357.29564393579 + y: 4140753.809557518 + } + point { + x: 586357.34822730953 + y: 4140754.0025212164 + } + point { + x: 586357.40081068326 + y: 4140754.1954849144 + } + point { + x: 586357.45339405711 + y: 4140754.3884486123 + } + point { + x: 586357.505977431 + y: 4140754.5814123107 + } + point { + x: 586357.55856080481 + y: 4140754.7743760087 + } + point { + x: 586357.61114417878 + y: 4140754.9673397066 + } + point { + x: 586357.66372755275 + y: 4140755.160303405 + } + point { + x: 586357.71631092671 + y: 4140755.353267103 + } + point { + x: 586357.76889430068 + y: 4140755.5462308009 + } + point { + x: 586357.82147767465 + y: 4140755.7391944993 + } + point { + x: 586357.87406104873 + y: 4140755.9321581973 + } + point { + x: 586357.9266444227 + y: 4140756.1251218952 + } + point { + x: 586357.97922779678 + y: 4140756.3180855932 + } + point { + x: 586358.03181117086 + y: 4140756.5110492916 + } + point { + x: 586358.084394545 + y: 4140756.7040129895 + } + point { + x: 586358.136977919 + y: 4140756.8969766875 + } + point { + x: 586358.18956129311 + y: 4140757.0899403854 + } + point { + x: 586358.24214466719 + y: 4140757.2829040838 + } + point { + x: 586358.29472804139 + y: 4140757.4758677818 + } + point { + x: 586358.34731141548 + y: 4140757.6688314797 + } + point { + x: 586358.39989478956 + y: 4140757.8617951777 + } + point { + x: 586358.45247816364 + y: 4140758.0547588761 + } + point { + x: 586358.50506153773 + y: 4140758.247722574 + } + point { + x: 586358.55764491181 + y: 4140758.440686272 + } + point { + x: 586358.61022828589 + y: 4140758.63364997 + } + point { + x: 586358.66281165986 + y: 4140758.8266136684 + } + point { + x: 586358.71539503394 + y: 4140759.0195773663 + } + point { + x: 586358.76797840791 + y: 4140759.2125410642 + } + point { + x: 586358.820561782 + y: 4140759.4055047627 + } + point { + x: 586358.873145156 + y: 4140759.5984684606 + } + point { + x: 586358.92572852992 + y: 4140759.7914321586 + } + point { + x: 586358.978311904 + y: 4140759.984395857 + } + point { + x: 586359.030895278 + y: 4140760.1773595549 + } + point { + x: 586359.08347865194 + y: 4140760.3703232529 + } + point { + x: 586359.13606202591 + y: 4140760.5632869508 + } + point { + x: 586359.18864539987 + y: 4140760.7562506492 + } + point { + x: 586359.24122877384 + y: 4140760.9492143472 + } + point { + x: 586359.29381214781 + y: 4140761.1421780451 + } + point { + x: 586359.34639552177 + y: 4140761.3351417435 + } + point { + x: 586359.39897889574 + y: 4140761.5281054415 + } + point { + x: 586359.45156226971 + y: 4140761.7210691394 + } + point { + x: 586359.50414564367 + y: 4140761.9140328378 + } + point { + x: 586359.55672901764 + y: 4140762.1069965358 + } + point { + x: 586359.60931239161 + y: 4140762.2999602337 + } + point { + x: 586359.66189576557 + y: 4140762.4929239322 + } + point { + x: 586359.71447913954 + y: 4140762.68588763 + } + point { + x: 586359.76706251351 + y: 4140762.878851328 + } + point { + x: 586359.81964588747 + y: 4140763.0718150265 + } + point { + x: 586359.87222926144 + y: 4140763.2647787244 + } + point { + x: 586359.92481263541 + y: 4140763.4577424224 + } + point { + x: 586359.97739600937 + y: 4140763.6507061203 + } + point { + x: 586360.02997938334 + y: 4140763.8436698187 + } + point { + x: 586360.08256275731 + y: 4140764.0366335167 + } + point { + x: 586360.13514613127 + y: 4140764.2295972146 + } + point { + x: 586360.18772950524 + y: 4140764.422560913 + } + point { + x: 586360.24031287921 + y: 4140764.615524611 + } + point { + x: 586360.29289625317 + y: 4140764.8084883089 + } + point { + x: 586360.34547962726 + y: 4140765.0014520073 + } + point { + x: 586360.39806300122 + y: 4140765.1944157053 + } + point { + x: 586360.45064637519 + y: 4140765.3873794032 + } + point { + x: 586360.50322974916 + y: 4140765.5803431016 + } + point { + x: 586360.55581312312 + y: 4140765.7733067996 + } + point { + x: 586360.60839649721 + y: 4140765.9662704975 + } + point { + x: 586360.66097987117 + y: 4140766.1592341955 + } + point { + x: 586360.71356324514 + y: 4140766.3521978939 + } + point { + x: 586360.76614661911 + y: 4140766.5451615918 + } + point { + x: 586360.81872999319 + y: 4140766.73812529 + } + point { + x: 586360.87131336716 + y: 4140766.9310889882 + } + point { + x: 586360.92389674112 + y: 4140767.1240526862 + } + point { + x: 586360.97648011509 + y: 4140767.3170163841 + } + point { + x: 586361.02906348917 + y: 4140767.5099800825 + } + point { + x: 586361.08164686314 + y: 4140767.7029437805 + } + point { + x: 586361.1342302371 + y: 4140767.8959074784 + } + point { + x: 586361.18681361107 + y: 4140768.0888711764 + } + point { + x: 586361.239396985 + y: 4140768.2818348748 + } + point { + x: 586361.29198035912 + y: 4140768.4747985727 + } + point { + x: 586361.34456373309 + y: 4140768.6677622707 + } + point { + x: 586361.397147107 + y: 4140768.8607259691 + } + point { + x: 586361.449730481 + y: 4140769.053689667 + } + point { + x: 586361.502313855 + y: 4140769.246653365 + } + point { + x: 586361.55489722907 + y: 4140769.4396170634 + } + point { + x: 586361.607480603 + y: 4140769.6325807613 + } + point { + x: 586361.660063977 + y: 4140769.8255444593 + } + point { + x: 586361.712647351 + y: 4140770.0185081572 + } + point { + x: 586361.76523072494 + y: 4140770.2114718556 + } + point { + x: 586361.8178140989 + y: 4140770.4044355536 + } + point { + x: 586361.870397473 + y: 4140770.5973992515 + } + point { + x: 586361.922980847 + y: 4140770.79036295 + } + point { + x: 586361.97556422092 + y: 4140770.9833266479 + } + point { + x: 586362.02814759489 + y: 4140771.1762903458 + } + point { + x: 586362.08073096885 + y: 4140771.3692540443 + } + point { + x: 586362.13331434282 + y: 4140771.5622177422 + } + point { + x: 586362.1858977169 + y: 4140771.75518144 + } + point { + x: 586362.23848109087 + y: 4140771.9481451381 + } + point { + x: 586362.29106446484 + y: 4140772.1411088365 + } + point { + x: 586362.3436478388 + y: 4140772.3340725345 + } + point { + x: 586362.39623121277 + y: 4140772.5270362324 + } + point { + x: 586362.44881458674 + y: 4140772.7199999308 + } + point { + x: 586362.50139796082 + y: 4140772.9129636288 + } + point { + x: 586362.55398133479 + y: 4140773.1059273267 + } + point { + x: 586362.60656470875 + y: 4140773.2988910251 + } + point { + x: 586362.65914808272 + y: 4140773.4918547231 + } + point { + x: 586362.71173145669 + y: 4140773.684818421 + } + point { + x: 586362.76431483065 + y: 4140773.8777821194 + } + point { + x: 586362.81689820474 + y: 4140774.0707458174 + } + point { + x: 586362.8694815787 + y: 4140774.2637095153 + } + point { + x: 586362.92206495267 + y: 4140774.4566732133 + } + point { + x: 586362.97464832664 + y: 4140774.6496369117 + } + point { + x: 586363.0272317006 + y: 4140774.8426006096 + } + point { + x: 586363.07981507457 + y: 4140775.0355643076 + } + point { + x: 586363.13239844865 + y: 4140775.228528006 + } + point { + x: 586363.18498182262 + y: 4140775.4214917039 + } + point { + x: 586363.23756519658 + y: 4140775.6144554019 + } + point { + x: 586363.29014857055 + y: 4140775.8074191003 + } + point { + x: 586363.34273194452 + y: 4140776.0003827983 + } + point { + x: 586363.3953153186 + y: 4140776.1933464962 + } + point { + x: 586363.44789869257 + y: 4140776.3863101942 + } + point { + x: 586363.50048206653 + y: 4140776.5792738926 + } + point { + x: 586363.5530654405 + y: 4140776.7722375905 + } + point { + x: 586363.60564881447 + y: 4140776.9652012885 + } + point { + x: 586363.65823218843 + y: 4140777.1581649869 + } + point { + x: 586363.71081556252 + y: 4140777.3511286848 + } + point { + x: 586363.76339893648 + y: 4140777.5440923828 + } + point { + x: 586363.81598231045 + y: 4140777.7370560812 + } + point { + x: 586363.86856568442 + y: 4140777.9300197791 + } + point { + x: 586363.92114905838 + y: 4140778.1229834771 + } + point { + x: 586363.97373243247 + y: 4140778.315947175 + } + point { + x: 586364.02631580643 + y: 4140778.5089108734 + } + point { + x: 586364.0788991804 + y: 4140778.7018745714 + } + point { + x: 586364.13148255437 + y: 4140778.8948382693 + } + point { + x: 586364.18406592833 + y: 4140779.0878019677 + } + point { + x: 586364.2366493023 + y: 4140779.2807656657 + } + point { + x: 586364.28923267638 + y: 4140779.4737293636 + } + point { + x: 586364.34181605035 + y: 4140779.6666930621 + } + point { + x: 586364.39439942432 + y: 4140779.85965676 + } + point { + x: 586364.44698279828 + y: 4140780.052620458 + } + point { + x: 586364.49956617225 + y: 4140780.2455841564 + } + point { + x: 586364.55214954633 + y: 4140780.4385478543 + } + point { + x: 586364.6047329203 + y: 4140780.6315115523 + } + point { + x: 586364.65731629427 + y: 4140780.82447525 + } + point { + x: 586364.70989966823 + y: 4140781.0174389486 + } + point { + x: 586364.7624830422 + y: 4140781.2104026466 + } + point { + x: 586364.81506641628 + y: 4140781.4033663445 + } + point { + x: 586364.86764979025 + y: 4140781.5963300429 + } + point { + x: 586364.92023316422 + y: 4140781.7892937409 + } + point { + x: 586364.97281653818 + y: 4140781.9822574388 + } + point { + x: 586365.02539991215 + y: 4140782.1752211372 + } + point { + x: 586365.07798328612 + y: 4140782.3681848352 + } + point { + x: 586365.1305666602 + y: 4140782.5611485331 + } + point { + x: 586365.18315003417 + y: 4140782.7541122311 + } + point { + x: 586365.23573340813 + y: 4140782.9470759295 + } + point { + x: 586365.2883167821 + y: 4140783.1400396274 + } + point { + x: 586365.34090015606 + y: 4140783.3330033254 + } + point { + x: 586365.39348353 + y: 4140783.5259670238 + } + point { + x: 586365.44606690411 + y: 4140783.7189307217 + } + point { + x: 586365.49865027808 + y: 4140783.9118944197 + } + point { + x: 586365.551233652 + y: 4140784.1048581181 + } + point { + x: 586365.603817026 + y: 4140784.2978218161 + } + point { + x: 586365.6564004 + y: 4140784.490785514 + } + point { + x: 586365.70898377406 + y: 4140784.6837492124 + } + point { + x: 586365.761567148 + y: 4140784.8767129104 + } + point { + x: 586365.814150522 + y: 4140785.0696766083 + } + point { + x: 586365.866733896 + y: 4140785.2626403063 + } + point { + x: 586365.91931726993 + y: 4140785.4556040047 + } + point { + x: 586365.9719006439 + y: 4140785.6485677026 + } + point { + x: 586366.02448401786 + y: 4140785.8415314006 + } + point { + x: 586366.077067392 + y: 4140786.034495099 + } + point { + x: 586366.12965076591 + y: 4140786.2274587969 + } + point { + x: 586366.18223413988 + y: 4140786.4204224949 + } + point { + x: 586366.24792875489 + y: 4140786.6615001382 + } + } + heading: -0.24993649105035462 + length: 156.61603286829296 + } + } + boundary_type { + s: 0 + types: DOTTED_YELLOW + } + length: 156.61603286829296 + } + right_boundary { + curve { + segment { + line_segment { + point { + x: 586393.2728792422 + y: 4140674.7079442316 + } + point { + x: 586393.07907158509 + y: 4140674.75741834 + } + point { + x: 586392.8852639281 + y: 4140674.806892449 + } + point { + x: 586392.691456271 + y: 4140674.8563665575 + } + point { + x: 586392.497648614 + y: 4140674.9058406665 + } + point { + x: 586392.303840957 + y: 4140674.955314775 + } + point { + x: 586392.11003329989 + y: 4140675.0047888835 + } + point { + x: 586391.9162256429 + y: 4140675.0542629925 + } + point { + x: 586391.72241798579 + y: 4140675.103737101 + } + point { + x: 586391.52861032879 + y: 4140675.1532112095 + } + point { + x: 586391.33480267168 + y: 4140675.2026853184 + } + point { + x: 586391.14099501469 + y: 4140675.2521594269 + } + point { + x: 586390.94718735758 + y: 4140675.3016335359 + } + point { + x: 586390.75337970059 + y: 4140675.3511076444 + } + point { + x: 586390.55957204348 + y: 4140675.4005817529 + } + point { + x: 586390.36576438649 + y: 4140675.4500558618 + } + point { + x: 586390.17195672938 + y: 4140675.4995299703 + } + point { + x: 586389.97814907238 + y: 4140675.5490040793 + } + point { + x: 586389.78434141539 + y: 4140675.5984781878 + } + point { + x: 586389.59053375828 + y: 4140675.6479522963 + } + point { + x: 586389.39672610129 + y: 4140675.6974264053 + } + point { + x: 586389.20291844418 + y: 4140675.7469005138 + } + point { + x: 586389.00911078718 + y: 4140675.7963746227 + } + point { + x: 586388.81530313008 + y: 4140675.8458487312 + } + point { + x: 586388.62149547308 + y: 4140675.8953228397 + } + point { + x: 586388.427687816 + y: 4140675.9447969487 + } + point { + x: 586388.233880159 + y: 4140675.9942710572 + } + point { + x: 586388.04007250187 + y: 4140676.0437451662 + } + point { + x: 586387.84626484488 + y: 4140676.0932192747 + } + point { + x: 586387.65245718777 + y: 4140676.1426933832 + } + point { + x: 586387.45864953077 + y: 4140676.1921674921 + } + point { + x: 586387.26484187378 + y: 4140676.2416416006 + } + point { + x: 586387.07103421667 + y: 4140676.2911157091 + } + point { + x: 586386.87722655968 + y: 4140676.3405898181 + } + point { + x: 586386.68341890257 + y: 4140676.3900639266 + } + point { + x: 586386.48961124558 + y: 4140676.4395380355 + } + point { + x: 586386.29580358847 + y: 4140676.489012144 + } + point { + x: 586386.10199593147 + y: 4140676.5384862525 + } + point { + x: 586385.90818827436 + y: 4140676.5879603615 + } + point { + x: 586385.71438061737 + y: 4140676.63743447 + } + point { + x: 586385.52057296026 + y: 4140676.686908579 + } + point { + x: 586385.32676530327 + y: 4140676.7363826875 + } + point { + x: 586385.13295764616 + y: 4140676.785856796 + } + point { + x: 586384.93914998916 + y: 4140676.8353309049 + } + point { + x: 586384.74534233217 + y: 4140676.8848050134 + } + point { + x: 586384.55153467506 + y: 4140676.9342791224 + } + point { + x: 586384.35772701807 + y: 4140676.9837532309 + } + point { + x: 586384.163919361 + y: 4140677.0332273394 + } + point { + x: 586383.970111704 + y: 4140677.0827014484 + } + point { + x: 586383.77630404686 + y: 4140677.1321755568 + } + point { + x: 586383.58249638986 + y: 4140677.1816496653 + } + point { + x: 586383.38868873275 + y: 4140677.2311237743 + } + point { + x: 586383.19488107576 + y: 4140677.2805978828 + } + point { + x: 586383.00107341865 + y: 4140677.3300719918 + } + point { + x: 586382.80726576166 + y: 4140677.3795461003 + } + point { + x: 586382.61345810455 + y: 4140677.4290202088 + } + point { + x: 586382.41965044755 + y: 4140677.4784943177 + } + point { + x: 586382.22584279056 + y: 4140677.5279684262 + } + point { + x: 586382.03203513345 + y: 4140677.5774425352 + } + point { + x: 586381.83822747646 + y: 4140677.6269166437 + } + point { + x: 586381.64441981935 + y: 4140677.6763907522 + } + point { + x: 586381.45061216236 + y: 4140677.7258648612 + } + point { + x: 586381.25680450525 + y: 4140677.7753389697 + } + point { + x: 586381.06299684825 + y: 4140677.8248130786 + } + point { + x: 586380.86918919114 + y: 4140677.8742871871 + } + point { + x: 586380.67538153415 + y: 4140677.9237612956 + } + point { + x: 586380.481573877 + y: 4140677.9732354046 + } + point { + x: 586380.28776622 + y: 4140678.0227095131 + } + point { + x: 586380.09395856294 + y: 4140678.072183622 + } + point { + x: 586379.900150906 + y: 4140678.1216577305 + } + point { + x: 586379.706343249 + y: 4140678.171131839 + } + point { + x: 586379.51253559184 + y: 4140678.220605948 + } + point { + x: 586379.31872793485 + y: 4140678.2700800565 + } + point { + x: 586379.12492027774 + y: 4140678.319554165 + } + point { + x: 586378.93111262075 + y: 4140678.369028274 + } + point { + x: 586378.73730496364 + y: 4140678.4185023825 + } + point { + x: 586378.54349730664 + y: 4140678.4679764914 + } + point { + x: 586378.34968964953 + y: 4140678.5174506 + } + point { + x: 586378.15588199254 + y: 4140678.5669247084 + } + point { + x: 586377.96207433543 + y: 4140678.6163988174 + } + point { + x: 586377.76826667844 + y: 4140678.6658729259 + } + point { + x: 586377.57445902133 + y: 4140678.7153470349 + } + point { + x: 586377.38065136434 + y: 4140678.7648211434 + } + point { + x: 586377.18684370734 + y: 4140678.8142952519 + } + point { + x: 586376.99303605023 + y: 4140678.8637693608 + } + point { + x: 586376.79922839324 + y: 4140678.9132434693 + } + point { + x: 586376.60542073613 + y: 4140678.9627175783 + } + point { + x: 586376.41161307914 + y: 4140679.0121916868 + } + point { + x: 586376.217805422 + y: 4140679.0616657953 + } + point { + x: 586376.023997765 + y: 4140679.1111399042 + } + point { + x: 586375.83019010792 + y: 4140679.1606140127 + } + point { + x: 586375.63638245093 + y: 4140679.2100881212 + } + point { + x: 586375.44257479382 + y: 4140679.25956223 + } + point { + x: 586375.24876713683 + y: 4140679.3090363387 + } + point { + x: 586375.05495947972 + y: 4140679.3585104477 + } + point { + x: 586374.86115182273 + y: 4140679.4079845562 + } + point { + x: 586374.66734416573 + y: 4140679.4574586647 + } + point { + x: 586374.47353650862 + y: 4140679.5069327736 + } + point { + x: 586374.27972885163 + y: 4140679.5564068821 + } + point { + x: 586374.08592119452 + y: 4140679.6058809911 + } + point { + x: 586373.89211353753 + y: 4140679.6553550996 + } + point { + x: 586373.69830588042 + y: 4140679.7048292081 + } + point { + x: 586373.50449822342 + y: 4140679.7543033171 + } + point { + x: 586373.31069056632 + y: 4140679.8037774255 + } + point { + x: 586373.11688290932 + y: 4140679.8532515345 + } + point { + x: 586372.92307525221 + y: 4140679.902725643 + } + point { + x: 586372.72926759522 + y: 4140679.9521997515 + } + point { + x: 586372.53545993811 + y: 4140680.0016738605 + } + point { + x: 586372.34165228112 + y: 4140680.051147969 + } + point { + x: 586372.14784462412 + y: 4140680.1006220779 + } + point { + x: 586371.954036967 + y: 4140680.1500961864 + } + point { + x: 586371.76022931 + y: 4140680.1995702949 + } + point { + x: 586371.56642165291 + y: 4140680.2490444039 + } + point { + x: 586371.37261399592 + y: 4140680.2985185124 + } + point { + x: 586371.17880633881 + y: 4140680.3479926209 + } + point { + x: 586370.98499868182 + y: 4140680.39746673 + } + point { + x: 586370.79119102471 + y: 4140680.4469408384 + } + point { + x: 586370.59738336771 + y: 4140680.4964149473 + } + point { + x: 586370.4035757106 + y: 4140680.5458890558 + } + point { + x: 586370.20976805361 + y: 4140680.5953631643 + } + point { + x: 586370.0159603965 + y: 4140680.6448372733 + } + point { + x: 586369.82215273951 + y: 4140680.6943113818 + } + point { + x: 586369.62834508251 + y: 4140680.7437854907 + } + point { + x: 586369.4345374254 + y: 4140680.7932595992 + } + point { + x: 586369.24072976841 + y: 4140680.8427337077 + } + point { + x: 586369.0469221113 + y: 4140680.8922078167 + } + point { + x: 586368.85311445431 + y: 4140680.9416819252 + } + point { + x: 586368.6593067972 + y: 4140680.9911560342 + } + point { + x: 586368.46549914021 + y: 4140681.0406301427 + } + point { + x: 586368.2716914831 + y: 4140681.0901042512 + } + point { + x: 586368.0778838261 + y: 4140681.13957836 + } + point { + x: 586367.884076169 + y: 4140681.1890524686 + } + point { + x: 586367.690268512 + y: 4140681.2385265771 + } + point { + x: 586367.49646085489 + y: 4140681.2880006861 + } + point { + x: 586367.3026531979 + y: 4140681.3374747946 + } + point { + x: 586367.1088455409 + y: 4140681.3869489036 + } + point { + x: 586366.91503788379 + y: 4140681.4364230121 + } + point { + x: 586366.7212302268 + y: 4140681.4858971206 + } + point { + x: 586366.52742256969 + y: 4140681.5353712295 + } + point { + x: 586366.3336149127 + y: 4140681.584845338 + } + point { + x: 586366.13980725559 + y: 4140681.634319447 + } + point { + x: 586365.9459995986 + y: 4140681.6837935555 + } + point { + x: 586365.75219194149 + y: 4140681.733267664 + } + point { + x: 586365.55838428449 + y: 4140681.7827417729 + } + point { + x: 586365.36457662738 + y: 4140681.8322158814 + } + point { + x: 586365.17076897039 + y: 4140681.8816899904 + } + point { + x: 586364.97696131328 + y: 4140681.9311640989 + } + point { + x: 586364.78315365629 + y: 4140681.9806382074 + } + point { + x: 586364.58934599929 + y: 4140682.0301123164 + } + point { + x: 586364.39553834219 + y: 4140682.0795864249 + } + point { + x: 586364.20173068519 + y: 4140682.1290605338 + } + point { + x: 586364.00792302808 + y: 4140682.1785346423 + } + point { + x: 586363.81411537109 + y: 4140682.2280087508 + } + point { + x: 586363.620307714 + y: 4140682.27748286 + } + point { + x: 586363.426500057 + y: 4140682.3269569683 + } + point { + x: 586363.23269239988 + y: 4140682.3764310768 + } + point { + x: 586363.03888474288 + y: 4140682.4259051858 + } + point { + x: 586362.84507708577 + y: 4140682.4753792943 + } + point { + x: 586362.65126942878 + y: 4140682.5248534032 + } + point { + x: 586362.45746177167 + y: 4140682.5743275117 + } + point { + x: 586362.26365411468 + y: 4140682.62380162 + } + point { + x: 586362.06984645769 + y: 4140682.6732757292 + } + point { + x: 586361.87603880058 + y: 4140682.7227498377 + } + point { + x: 586361.68223114358 + y: 4140682.7722239466 + } + point { + x: 586361.48842348647 + y: 4140682.8216980551 + } + point { + x: 586361.29461582948 + y: 4140682.8711721636 + } + point { + x: 586361.10080817237 + y: 4140682.9206462726 + } + point { + x: 586360.90700051538 + y: 4140682.9701203811 + } + point { + x: 586360.71319285827 + y: 4140683.01959449 + } + point { + x: 586360.51938520127 + y: 4140683.0690685986 + } + point { + x: 586360.32557754416 + y: 4140683.1185427071 + } + point { + x: 586360.13176988717 + y: 4140683.168016816 + } + point { + x: 586359.93796223006 + y: 4140683.2174909245 + } + point { + x: 586359.74415457307 + y: 4140683.266965033 + } + point { + x: 586359.55034691608 + y: 4140683.316439142 + } + point { + x: 586359.356539259 + y: 4140683.3659132505 + } + point { + x: 586359.162731602 + y: 4140683.4153873594 + } + point { + x: 586358.96892394486 + y: 4140683.4648614679 + } + point { + x: 586358.77511628787 + y: 4140683.5143355764 + } + point { + x: 586358.58130863076 + y: 4140683.5638096854 + } + point { + x: 586358.38750097377 + y: 4140683.6132837939 + } + point { + x: 586358.19369331666 + y: 4140683.6627579029 + } + point { + x: 586357.99988565966 + y: 4140683.7122320114 + } + point { + x: 586357.80607800256 + y: 4140683.76170612 + } + point { + x: 586357.61227034556 + y: 4140683.8111802288 + } + point { + x: 586357.41846268845 + y: 4140683.8606543373 + } + point { + x: 586357.22465503146 + y: 4140683.9101284463 + } + point { + x: 586357.03084737447 + y: 4140683.9596025548 + } + point { + x: 586356.83703971736 + y: 4140684.0090766633 + } + point { + x: 586356.64323206036 + y: 4140684.0585507723 + } + point { + x: 586356.44942440325 + y: 4140684.1080248808 + } + point { + x: 586356.25561674626 + y: 4140684.1574989893 + } + point { + x: 586356.06180908915 + y: 4140684.2069730982 + } + point { + x: 586355.86800143216 + y: 4140684.2564472067 + } + point { + x: 586355.674193775 + y: 4140684.3059213157 + } + point { + x: 586355.480386118 + y: 4140684.3553954242 + } + point { + x: 586355.286578461 + y: 4140684.4048695327 + } + point { + x: 586355.092770804 + y: 4140684.4543436416 + } + point { + x: 586354.89896314684 + y: 4140684.50381775 + } + point { + x: 586354.70515548985 + y: 4140684.5532918591 + } + point { + x: 586354.51134783286 + y: 4140684.6027659676 + } + point { + x: 586354.31754017575 + y: 4140684.6522400761 + } + point { + x: 586354.12373251875 + y: 4140684.7017141851 + } + point { + x: 586353.92992486164 + y: 4140684.7511882936 + } + point { + x: 586353.73611720465 + y: 4140684.8006624025 + } + point { + x: 586353.54230954754 + y: 4140684.850136511 + } + point { + x: 586353.34850189055 + y: 4140684.8996106195 + } + point { + x: 586353.15469423344 + y: 4140684.9490847285 + } + point { + x: 586352.96088657645 + y: 4140684.998558837 + } + point { + x: 586352.76707891934 + y: 4140685.048032946 + } + point { + x: 586352.57327126234 + y: 4140685.0975070545 + } + point { + x: 586352.37946360523 + y: 4140685.146981163 + } + point { + x: 586352.18565594824 + y: 4140685.1964552719 + } + point { + x: 586351.99184829125 + y: 4140685.2459293804 + } + point { + x: 586351.79804063414 + y: 4140685.2954034889 + } + point { + x: 586351.60423297714 + y: 4140685.3448775979 + } + point { + x: 586351.41042532 + y: 4140685.3943517064 + } + point { + x: 586351.216617663 + y: 4140685.4438258153 + } + point { + x: 586351.02281000593 + y: 4140685.4932999238 + } + point { + x: 586350.82900234894 + y: 4140685.5427740323 + } + point { + x: 586350.63519469183 + y: 4140685.5922481413 + } + point { + x: 586350.44138703484 + y: 4140685.64172225 + } + point { + x: 586350.24757937773 + y: 4140685.6911963588 + } + point { + x: 586350.05377172073 + y: 4140685.7406704673 + } + point { + x: 586349.85996406362 + y: 4140685.7901445758 + } + point { + x: 586349.66615640663 + y: 4140685.8396186847 + } + point { + x: 586349.47234874964 + y: 4140685.8890927932 + } + point { + x: 586349.27854109253 + y: 4140685.9385669022 + } + point { + x: 586349.08473343553 + y: 4140685.9880410107 + } + point { + x: 586348.89092577843 + y: 4140686.0375151192 + } + point { + x: 586348.69711812143 + y: 4140686.0869892281 + } + point { + x: 586348.50331046432 + y: 4140686.1364633366 + } + point { + x: 586348.30950280733 + y: 4140686.1859374451 + } + point { + x: 586348.179803118 + y: 4140686.2605034681 + } + point { + x: 586348.05010342877 + y: 4140686.3350694906 + } + point { + x: 586347.92040373944 + y: 4140686.4096355131 + } + point { + x: 586347.7907040501 + y: 4140686.484201536 + } + point { + x: 586347.66100436088 + y: 4140686.5587675585 + } + point { + x: 586347.53130467155 + y: 4140686.633333581 + } + point { + x: 586347.40160498221 + y: 4140686.7078996035 + } + point { + x: 586347.271905293 + y: 4140686.7824656265 + } + point { + x: 586347.14220560365 + y: 4140686.857031649 + } + point { + x: 586347.01250591443 + y: 4140686.9315976715 + } + point { + x: 586346.8828062251 + y: 4140687.0061636944 + } + point { + x: 586346.75310653576 + y: 4140687.0807297169 + } + point { + x: 586346.62340684654 + y: 4140687.1552957394 + } + point { + x: 586346.49370715721 + y: 4140687.2298617619 + } + point { + x: 586346.39175426017 + y: 4140687.326609931 + } + point { + x: 586346.28980136313 + y: 4140687.4233580995 + } + point { + x: 586346.1878484661 + y: 4140687.5201062681 + } + point { + x: 586346.08589556906 + y: 4140687.6168544372 + } + point { + x: 586345.983942672 + y: 4140687.7136026057 + } + point { + x: 586345.881989775 + y: 4140687.8103507743 + } + point { + x: 586345.780036878 + y: 4140687.9070989434 + } + point { + x: 586345.67808398092 + y: 4140688.0038471119 + } + point { + x: 586345.57613108389 + y: 4140688.1005952805 + } + point { + x: 586345.47417818685 + y: 4140688.1973434491 + } + point { + x: 586345.37222528982 + y: 4140688.2940916182 + } + point { + x: 586345.27027239278 + y: 4140688.3908397867 + } + point { + x: 586345.16831949574 + y: 4140688.4875879553 + } + point { + x: 586345.11601957423 + y: 4140688.6001289226 + } + point { + x: 586345.06371965283 + y: 4140688.71266989 + } + point { + x: 586345.01141973131 + y: 4140688.8252108572 + } + point { + x: 586344.95911980979 + y: 4140688.9377518245 + } + point { + x: 586344.90681988827 + y: 4140689.0502927918 + } + point { + x: 586344.85451996676 + y: 4140689.1628337591 + } + point { + x: 586344.80222004524 + y: 4140689.2753747264 + } + point { + x: 586344.74992012384 + y: 4140689.3879156937 + } + point { + x: 586344.69762020232 + y: 4140689.500456661 + } + point { + x: 586344.6453202808 + y: 4140689.6129976283 + } + point { + x: 586344.59302035929 + y: 4140689.7255385956 + } + point { + x: 586344.54072043777 + y: 4140689.8380795629 + } + point { + x: 586344.48842051625 + y: 4140689.95062053 + } + point { + x: 586344.43612059474 + y: 4140690.0631614975 + } + point { + x: 586344.38382067333 + y: 4140690.1757024643 + } + point { + x: 586344.360259598 + y: 4140690.28218568 + } + point { + x: 586344.33669852267 + y: 4140690.3886688952 + } + point { + x: 586344.31313744735 + y: 4140690.4951521102 + } + point { + x: 586344.28957637213 + y: 4140690.6016353257 + } + point { + x: 586344.2660152968 + y: 4140690.7081185412 + } + point { + x: 586344.24245422147 + y: 4140690.8146017562 + } + point { + x: 586344.21889314626 + y: 4140690.9210849716 + } + point { + x: 586344.22572251 + y: 4140691.0381329027 + } + point { + x: 586344.23255187389 + y: 4140691.1551808333 + } + point { + x: 586344.23938123765 + y: 4140691.2722287644 + } + point { + x: 586344.24621060141 + y: 4140691.3892766954 + } + point { + x: 586344.25303996529 + y: 4140691.506324626 + } + point { + x: 586344.259869329 + y: 4140691.6233725571 + } + point { + x: 586344.26669869293 + y: 4140691.7404204877 + } + point { + x: 586344.27352805668 + y: 4140691.8574684188 + } + point { + x: 586344.28035742044 + y: 4140691.97451635 + } + point { + x: 586344.28718678432 + y: 4140692.0915642804 + } + point { + x: 586344.29401614808 + y: 4140692.2086122115 + } + point { + x: 586344.300845512 + y: 4140692.3256601421 + } + point { + x: 586344.341718774 + y: 4140692.5195047706 + } + point { + x: 586344.38316394691 + y: 4140692.7132016281 + } + point { + x: 586344.42516721389 + y: 4140692.9067542912 + } + point { + x: 586344.46771475847 + y: 4140693.1001663366 + } + point { + x: 586344.5107927639 + y: 4140693.2934413403 + } + point { + x: 586344.55438741378 + y: 4140693.4865828794 + } + point { + x: 586344.59848489147 + y: 4140693.6795945307 + } + point { + x: 586344.64307138021 + y: 4140693.87247987 + } + point { + x: 586344.68813306361 + y: 4140694.0652424749 + } + point { + x: 586344.73365612491 + y: 4140694.2578859208 + } + point { + x: 586344.77962674759 + y: 4140694.4504137854 + } + point { + x: 586344.82603111514 + y: 4140694.6428296445 + } + point { + x: 586344.87285541091 + y: 4140694.8351370748 + } + point { + x: 586344.92008581827 + y: 4140695.0273396531 + } + point { + x: 586344.96770852059 + y: 4140695.2194409561 + } + point { + x: 586345.01570970134 + y: 4140695.4114445597 + } + point { + x: 586345.064075544 + y: 4140695.6033540415 + } + point { + x: 586345.11279223184 + y: 4140695.7951729773 + } + point { + x: 586345.16184594831 + y: 4140695.9869049438 + } + point { + x: 586345.21122287679 + y: 4140696.1785535179 + } + point { + x: 586345.26090920076 + y: 4140696.3701222758 + } + point { + x: 586345.31089110358 + y: 4140696.5616147942 + } + point { + x: 586345.36115476873 + y: 4140696.7530346494 + } + point { + x: 586345.41168637946 + y: 4140696.9443854187 + } + point { + x: 586345.46247211937 + y: 4140697.1356706782 + } + point { + x: 586345.5134981717 + y: 4140697.3268940048 + } + point { + x: 586345.56475071993 + y: 4140697.5180589748 + } + point { + x: 586345.61621594743 + y: 4140697.7091691643 + } + point { + x: 586345.66788003768 + y: 4140697.9002281507 + } + point { + x: 586345.719729174 + y: 4140698.09123951 + } + point { + x: 586345.77174953988 + y: 4140698.2822068194 + } + point { + x: 586345.82392731868 + y: 4140698.4731336548 + } + point { + x: 586345.87624869379 + y: 4140698.6640235935 + } + point { + x: 586345.92869984871 + y: 4140698.8548802114 + } + point { + x: 586345.98126696667 + y: 4140699.0457070852 + } + point { + x: 586346.03393623128 + y: 4140699.2365077916 + } + point { + x: 586346.08669382578 + y: 4140699.4272859073 + } + point { + x: 586346.13952593366 + y: 4140699.6180450087 + } + point { + x: 586346.19241873827 + y: 4140699.808788673 + } + point { + x: 586346.2453584231 + y: 4140699.9995204755 + } + point { + x: 586346.29833117151 + y: 4140700.1902439939 + } + point { + x: 586346.35132316686 + y: 4140700.3809628044 + } + point { + x: 586346.40432059264 + y: 4140700.5716804834 + } + point { + x: 586346.45730963221 + y: 4140700.7624006076 + } + point { + x: 586346.510276469 + y: 4140700.9531267537 + } + point { + x: 586346.56320728653 + y: 4140701.143862498 + } + point { + x: 586346.61608826788 + y: 4140701.3346114177 + } + point { + x: 586346.66890559671 + y: 4140701.5253770887 + } + point { + x: 586346.72164545953 + y: 4140701.7161630867 + } + point { + x: 586346.77429812343 + y: 4140701.9069719287 + } + point { + x: 586346.826865971 + y: 4140702.0978029859 + } + point { + x: 586346.87935362256 + y: 4140702.2886550482 + } + point { + x: 586346.931765699 + y: 4140702.4795269058 + } + point { + x: 586346.98410682054 + y: 4140702.67041735 + } + point { + x: 586347.03638160776 + y: 4140702.8613251694 + } + point { + x: 586347.08859468147 + y: 4140703.0522491555 + } + point { + x: 586347.14075066184 + y: 4140703.2431880981 + } + point { + x: 586347.19285416976 + y: 4140703.4341407875 + } + point { + x: 586347.2449098255 + y: 4140703.6251060143 + } + point { + x: 586347.29692224984 + y: 4140703.8160825684 + } + point { + x: 586347.348896063 + y: 4140704.00706924 + } + point { + x: 586347.4008358859 + y: 4140704.1980648194 + } + point { + x: 586347.45274633879 + y: 4140704.3890680973 + } + point { + x: 586347.50463204237 + y: 4140704.5800778633 + } + point { + x: 586347.556497617 + y: 4140704.7710929085 + } + point { + x: 586347.60834768345 + y: 4140704.9621120221 + } + point { + x: 586347.66018686222 + y: 4140705.1531339954 + } + point { + x: 586347.71201977367 + y: 4140705.344157618 + } + point { + x: 586347.76385103853 + y: 4140705.53518168 + } + point { + x: 586347.81568527722 + y: 4140705.7262049727 + } + point { + x: 586347.86752711039 + y: 4140705.9172262852 + } + point { + x: 586347.91938115843 + y: 4140706.1082444089 + } + point { + x: 586347.9712520421 + y: 4140706.2992581329 + } + point { + x: 586348.02314411546 + y: 4140706.4902663175 + } + point { + x: 586348.07505844347 + y: 4140706.6812686841 + } + point { + x: 586348.12699387176 + y: 4140706.8722655345 + } + point { + x: 586348.17894920486 + y: 4140707.06325718 + } + point { + x: 586348.230923247 + y: 4140707.254243935 + } + point { + x: 586348.28291480266 + y: 4140707.445226111 + } + point { + x: 586348.334922676 + y: 4140707.6362040206 + } + point { + x: 586348.3869456714 + y: 4140707.8271779767 + } + point { + x: 586348.43898259324 + y: 4140708.0181482919 + } + point { + x: 586348.4910322458 + y: 4140708.2091152784 + } + point { + x: 586348.54309343337 + y: 4140708.4000792489 + } + point { + x: 586348.59516496037 + y: 4140708.5910405167 + } + point { + x: 586348.6472456312 + y: 4140708.7819993934 + } + point { + x: 586348.69933425006 + y: 4140708.9729561922 + } + point { + x: 586348.75142962125 + y: 4140709.1639112253 + } + point { + x: 586348.80353054928 + y: 4140709.3548648059 + } + point { + x: 586348.85563583835 + y: 4140709.5458172457 + } + point { + x: 586348.90774429287 + y: 4140709.736768858 + } + point { + x: 586348.95985471713 + y: 4140709.9277199553 + } + point { + x: 586349.01196591533 + y: 4140710.1186708496 + } + point { + x: 586349.0640766921 + y: 4140710.3096218542 + } + point { + x: 586349.11618585151 + y: 4140710.5005732817 + } + point { + x: 586349.1682921981 + y: 4140710.6915254439 + } + point { + x: 586349.22039453592 + y: 4140710.8824786539 + } + point { + x: 586349.27249167161 + y: 4140711.0734332241 + } + point { + x: 586349.32458283973 + y: 4140711.2643893543 + } + point { + x: 586349.37666823051 + y: 4140711.4553469941 + } + point { + x: 586349.42874816363 + y: 4140711.6463060612 + } + point { + x: 586349.4808229584 + y: 4140711.8372664712 + } + point { + x: 586349.53289293475 + y: 4140712.0282281409 + } + point { + x: 586349.5849584121 + y: 4140712.2191909864 + } + point { + x: 586349.63701970992 + y: 4140712.4101549247 + } + point { + x: 586349.689077148 + y: 4140712.6011198717 + } + point { + x: 586349.74113104586 + y: 4140712.792085744 + } + point { + x: 586349.793181723 + y: 4140712.9830524586 + } + point { + x: 586349.84522949893 + y: 4140713.1740199313 + } + point { + x: 586349.89727469347 + y: 4140713.3649880788 + } + point { + x: 586349.94931762607 + y: 4140713.5559568177 + } + point { + x: 586350.00135861628 + y: 4140713.7469260641 + } + point { + x: 586350.05339798378 + y: 4140713.9378957353 + } + point { + x: 586350.105436048 + y: 4140714.1288657463 + } + point { + x: 586350.15747312864 + y: 4140714.3198360149 + } + point { + x: 586350.20950954524 + y: 4140714.5108064571 + } + point { + x: 586350.26154561748 + y: 4140714.7017769893 + } + point { + x: 586350.3135816647 + y: 4140714.8927475275 + } + point { + x: 586350.36561800668 + y: 4140715.0837179893 + } + point { + x: 586350.417654963 + y: 4140715.27468829 + } + point { + x: 586350.46969285316 + y: 4140715.4656583467 + } + point { + x: 586350.52173199679 + y: 4140715.656628076 + } + point { + x: 586350.5737726849 + y: 4140715.8475974011 + } + point { + x: 586350.62581496057 + y: 4140716.0385663114 + } + point { + x: 586350.67785873928 + y: 4140716.229534829 + } + point { + x: 586350.72990393511 + y: 4140716.420502976 + } + point { + x: 586350.78195046238 + y: 4140716.6114707747 + } + point { + x: 586350.83399823552 + y: 4140716.8024382479 + } + point { + x: 586350.88604716863 + y: 4140716.993405418 + } + point { + x: 586350.93809717614 + y: 4140717.1843723068 + } + point { + x: 586350.99014817225 + y: 4140717.3753389376 + } + point { + x: 586351.04220007116 + y: 4140717.5663053324 + } + point { + x: 586351.0942527873 + y: 4140717.7572715133 + } + point { + x: 586351.14630623488 + y: 4140717.9482375029 + } + point { + x: 586351.19836032821 + y: 4140718.139203324 + } + point { + x: 586351.25041498162 + y: 4140718.3301689983 + } + point { + x: 586351.30247010919 + y: 4140718.5211345493 + } + point { + x: 586351.35452562547 + y: 4140718.7120999983 + } + point { + x: 586351.40658144455 + y: 4140718.9030653681 + } + point { + x: 586351.45863748074 + y: 4140719.0940306811 + } + point { + x: 586351.51069364836 + y: 4140719.2849959596 + } + point { + x: 586351.56274986162 + y: 4140719.4759612265 + } + point { + x: 586351.614806035 + y: 4140719.6669265036 + } + point { + x: 586351.66686208255 + y: 4140719.8578918139 + } + point { + x: 586351.71891791874 + y: 4140720.048857179 + } + point { + x: 586351.77097345772 + y: 4140720.2398226219 + } + point { + x: 586351.82302861428 + y: 4140720.430788165 + } + point { + x: 586351.875083341 + y: 4140720.6217538207 + } + point { + x: 586351.92713765474 + y: 4140720.812719584 + } + point { + x: 586351.97919157846 + y: 4140721.0036854493 + } + point { + x: 586352.031245135 + y: 4140721.1946514104 + } + point { + x: 586352.08329834742 + y: 4140721.3856174615 + } + point { + x: 586352.13535123866 + y: 4140721.5765835969 + } + point { + x: 586352.18740383175 + y: 4140721.76754981 + } + point { + x: 586352.23945614963 + y: 4140721.9585160953 + } + point { + x: 586352.29150821513 + y: 4140722.1494824463 + } + point { + x: 586352.34356005141 + y: 4140722.3404488573 + } + point { + x: 586352.39561168139 + y: 4140722.5314153223 + } + point { + x: 586352.447663128 + y: 4140722.7223818349 + } + point { + x: 586352.49971441424 + y: 4140722.91334839 + } + point { + x: 586352.551765563 + y: 4140723.1043149806 + } + point { + x: 586352.60381659726 + y: 4140723.2952816011 + } + point { + x: 586352.65586754016 + y: 4140723.4862482459 + } + point { + x: 586352.7079184145 + y: 4140723.6772149084 + } + point { + x: 586352.75996924331 + y: 4140723.8681815825 + } + point { + x: 586352.81202004943 + y: 4140724.0591482627 + } + point { + x: 586352.864070856 + y: 4140724.2501149429 + } + point { + x: 586352.916121686 + y: 4140724.441081617 + } + point { + x: 586352.96817256219 + y: 4140724.632048279 + } + point { + x: 586353.02022350777 + y: 4140724.8230149229 + } + point { + x: 586353.07227454556 + y: 4140725.0139815426 + } + point { + x: 586353.12432569556 + y: 4140725.2049481329 + } + point { + x: 586353.17637695908 + y: 4140725.3959146938 + } + point { + x: 586353.22842832981 + y: 4140725.5868812264 + } + point { + x: 586353.2804798017 + y: 4140725.7778477329 + } + point { + x: 586353.33253136848 + y: 4140725.9688142142 + } + point { + x: 586353.38458302419 + y: 4140726.1597806723 + } + point { + x: 586353.43663476256 + y: 4140726.3507471089 + } + point { + x: 586353.48868657742 + y: 4140726.5417135255 + } + point { + x: 586353.54073846259 + y: 4140726.732679924 + } + point { + x: 586353.592790412 + y: 4140726.9236463052 + } + point { + x: 586353.64484241954 + y: 4140727.1146126715 + } + point { + x: 586353.69689447887 + y: 4140727.3055790244 + } + point { + x: 586353.74894658406 + y: 4140727.4965453651 + } + point { + x: 586353.80099872872 + y: 4140727.6875116951 + } + point { + x: 586353.85305090691 + y: 4140727.8784780167 + } + point { + x: 586353.90510311234 + y: 4140728.0694443313 + } + point { + x: 586353.95715533884 + y: 4140728.2604106404 + } + point { + x: 586354.00920758047 + y: 4140728.4513769452 + } + point { + x: 586354.06125983072 + y: 4140728.6423432482 + } + point { + x: 586354.11331208376 + y: 4140728.8333095503 + } + point { + x: 586354.16536433331 + y: 4140729.0242758533 + } + point { + x: 586354.2174165732 + y: 4140729.2152421586 + } + point { + x: 586354.26946879725 + y: 4140729.4062084681 + } + point { + x: 586354.32152099942 + y: 4140729.5971747837 + } + point { + x: 586354.37357317354 + y: 4140729.7881411063 + } + point { + x: 586354.4256253168 + y: 4140729.9791074372 + } + point { + x: 586354.47767743061 + y: 4140730.1700737756 + } + point { + x: 586354.52972951648 + y: 4140730.3610401214 + } + point { + x: 586354.58178157627 + y: 4140730.5520064738 + } + point { + x: 586354.63383361138 + y: 4140730.7429728326 + } + point { + x: 586354.68588562368 + y: 4140730.933939198 + } + point { + x: 586354.73793761479 + y: 4140731.1249055685 + } + point { + x: 586354.78998958622 + y: 4140731.3158719442 + } + point { + x: 586354.84204153973 + y: 4140731.5068383245 + } + point { + x: 586354.89409347693 + y: 4140731.697804709 + } + point { + x: 586354.94614539959 + y: 4140731.8887710976 + } + point { + x: 586354.99819730909 + y: 4140732.0797374891 + } + point { + x: 586355.0502492073 + y: 4140732.2707038838 + } + point { + x: 586355.10230109585 + y: 4140732.4616702814 + } + point { + x: 586355.15435297636 + y: 4140732.6526366808 + } + point { + x: 586355.20640485035 + y: 4140732.843603082 + } + point { + x: 586355.25845671969 + y: 4140733.0345694842 + } + point { + x: 586355.31050858588 + y: 4140733.2255358873 + } + point { + x: 586355.36256045068 + y: 4140733.4165022909 + } + point { + x: 586355.4146123156 + y: 4140733.6074686944 + } + point { + x: 586355.46666418237 + y: 4140733.7984350976 + } + point { + x: 586355.51871605264 + y: 4140733.9894014997 + } + point { + x: 586355.570767928 + y: 4140734.1803679005 + } + point { + x: 586355.62281981029 + y: 4140734.3713342994 + } + point { + x: 586355.67487170058 + y: 4140734.5623006965 + } + point { + x: 586355.726923599 + y: 4140734.7532670912 + } + point { + x: 586355.77897550515 + y: 4140734.9442334836 + } + point { + x: 586355.83102741849 + y: 4140735.1351998746 + } + point { + x: 586355.88307933859 + y: 4140735.3261662638 + } + point { + x: 586355.935131265 + y: 4140735.5171326511 + } + point { + x: 586355.98718319729 + y: 4140735.7080990369 + } + point { + x: 586356.03923513507 + y: 4140735.8990654214 + } + point { + x: 586356.09128707787 + y: 4140736.0900318045 + } + point { + x: 586356.14333902521 + y: 4140736.2809981867 + } + point { + x: 586356.19539097662 + y: 4140736.4719645674 + } + point { + x: 586356.24744293175 + y: 4140736.6629309477 + } + point { + x: 586356.29949489015 + y: 4140736.8538973266 + } + point { + x: 586356.35154685134 + y: 4140737.0448637051 + } + point { + x: 586356.40359881485 + y: 4140737.2358300826 + } + point { + x: 586356.45565078035 + y: 4140737.42679646 + } + point { + x: 586356.50770274724 + y: 4140737.6177628366 + } + point { + x: 586356.5597547153 + y: 4140737.8087292132 + } + point { + x: 586356.61180668382 + y: 4140737.9996955898 + } + point { + x: 586356.66385865246 + y: 4140738.1906619663 + } + point { + x: 586356.71591062087 + y: 4140738.3816283424 + } + point { + x: 586356.76796258858 + y: 4140738.572594719 + } + point { + x: 586356.820014555 + y: 4140738.763561096 + } + point { + x: 586356.87206651992 + y: 4140738.9545274735 + } + point { + x: 586356.92411848274 + y: 4140739.1454938515 + } + point { + x: 586356.97617044335 + y: 4140739.33646023 + } + point { + x: 586357.02822240186 + y: 4140739.5274266088 + } + point { + x: 586357.08027435828 + y: 4140739.7183929887 + } + point { + x: 586357.132326313 + y: 4140739.9093593685 + } + point { + x: 586357.18437826587 + y: 4140740.1003257493 + } + point { + x: 586357.23643021716 + y: 4140740.29129213 + } + point { + x: 586357.28848216683 + y: 4140740.4822585112 + } + point { + x: 586357.34053411521 + y: 4140740.6732248929 + } + point { + x: 586357.39258606231 + y: 4140740.8641912751 + } + point { + x: 586357.44463800814 + y: 4140741.0551576577 + } + point { + x: 586357.496689953 + y: 4140741.2461240403 + } + point { + x: 586357.548741897 + y: 4140741.437090423 + } + point { + x: 586357.60079384013 + y: 4140741.628056806 + } + point { + x: 586357.65284578269 + y: 4140741.8190231891 + } + point { + x: 586357.70489772456 + y: 4140742.0099895727 + } + point { + x: 586357.756949666 + y: 4140742.2009559562 + } + point { + x: 586357.80900160712 + y: 4140742.39192234 + } + point { + x: 586357.861053548 + y: 4140742.5828887234 + } + point { + x: 586357.91310548887 + y: 4140742.7738551069 + } + point { + x: 586357.96515742969 + y: 4140742.9648214909 + } + point { + x: 586358.01720937062 + y: 4140743.1557878745 + } + point { + x: 586358.0692613119 + y: 4140743.346754258 + } + point { + x: 586358.12131325353 + y: 4140743.5377206416 + } + point { + x: 586358.17336519575 + y: 4140743.7286870247 + } + point { + x: 586358.22541713843 + y: 4140743.9196534078 + } + point { + x: 586358.27746908169 + y: 4140744.1106197909 + } + point { + x: 586358.32952102553 + y: 4140744.3015861739 + } + point { + x: 586358.38157297 + y: 4140744.4925525566 + } + point { + x: 586358.43362491473 + y: 4140744.6835189392 + } + point { + x: 586358.48567686009 + y: 4140744.8744853218 + } + point { + x: 586358.53772880579 + y: 4140745.065451704 + } + point { + x: 586358.58978075185 + y: 4140745.2564180861 + } + point { + x: 586358.64183269837 + y: 4140745.4473844683 + } + point { + x: 586358.69388464512 + y: 4140745.6383508504 + } + point { + x: 586358.74593659223 + y: 4140745.8293172326 + } + point { + x: 586358.79798853956 + y: 4140746.0202836148 + } + point { + x: 586358.85004048713 + y: 4140746.2112499964 + } + point { + x: 586358.90209243482 + y: 4140746.4022163786 + } + point { + x: 586358.95414438273 + y: 4140746.5931827603 + } + point { + x: 586359.00619633088 + y: 4140746.784149142 + } + point { + x: 586359.058248279 + y: 4140746.9751155237 + } + point { + x: 586359.1103002273 + y: 4140747.1660819054 + } + point { + x: 586359.16235217557 + y: 4140747.3570482871 + } + point { + x: 586359.21440412384 + y: 4140747.5480146687 + } + point { + x: 586359.2664560721 + y: 4140747.7389810504 + } + point { + x: 586359.31850802025 + y: 4140747.9299474321 + } + point { + x: 586359.3705599684 + y: 4140748.1209138143 + } + point { + x: 586359.42261191644 + y: 4140748.311880196 + } + point { + x: 586359.47466386424 + y: 4140748.5028465777 + } + point { + x: 586359.52671581192 + y: 4140748.69381296 + } + point { + x: 586359.57876775949 + y: 4140748.8847793415 + } + point { + x: 586359.63081970683 + y: 4140749.0757457237 + } + point { + x: 586359.68287165416 + y: 4140749.2667121054 + } + point { + x: 586359.73492360127 + y: 4140749.4576784875 + } + point { + x: 586359.78697554825 + y: 4140749.6486448697 + } + point { + x: 586359.83902749524 + y: 4140749.8396112514 + } + point { + x: 586359.891079442 + y: 4140750.0305776335 + } + point { + x: 586359.94313138875 + y: 4140750.2215440157 + } + point { + x: 586359.99518333538 + y: 4140750.4125103978 + } + point { + x: 586360.047235282 + y: 4140750.60347678 + } + point { + x: 586360.09928722843 + y: 4140750.7944431622 + } + point { + x: 586360.151339175 + y: 4140750.9854095443 + } + point { + x: 586360.20339112135 + y: 4140751.1763759269 + } + point { + x: 586360.25544306764 + y: 4140751.3673423091 + } + point { + x: 586360.307495014 + y: 4140751.5583086913 + } + point { + x: 586360.35954696033 + y: 4140751.7492750734 + } + point { + x: 586360.41159890662 + y: 4140751.9402414556 + } + point { + x: 586360.46365085291 + y: 4140752.1312078377 + } + point { + x: 586360.5157027992 + y: 4140752.3221742203 + } + point { + x: 586360.56775474548 + y: 4140752.5131406025 + } + point { + x: 586360.61980669177 + y: 4140752.7041069847 + } + point { + x: 586360.67185863818 + y: 4140752.8950733668 + } + point { + x: 586360.72391058446 + y: 4140753.086039749 + } + point { + x: 586360.775962531 + y: 4140753.2770061311 + } + point { + x: 586360.82801447739 + y: 4140753.4679725133 + } + point { + x: 586360.88006642391 + y: 4140753.6589388954 + } + point { + x: 586360.93211837043 + y: 4140753.8499052776 + } + point { + x: 586360.98417031707 + y: 4140754.0408716598 + } + point { + x: 586361.03622226359 + y: 4140754.2318380419 + } + point { + x: 586361.08827421023 + y: 4140754.4228044241 + } + point { + x: 586361.140326157 + y: 4140754.6137708062 + } + point { + x: 586361.19237810362 + y: 4140754.8047371884 + } + point { + x: 586361.24443005037 + y: 4140754.9957035705 + } + point { + x: 586361.29648199712 + y: 4140755.1866699527 + } + point { + x: 586361.34853394388 + y: 4140755.3776363349 + } + point { + x: 586361.40058589063 + y: 4140755.568602717 + } + point { + x: 586361.45263783738 + y: 4140755.7595690992 + } + point { + x: 586361.50468978414 + y: 4140755.9505354813 + } + point { + x: 586361.556741731 + y: 4140756.1415018635 + } + point { + x: 586361.60879367776 + y: 4140756.3324682456 + } + point { + x: 586361.66084562463 + y: 4140756.5234346273 + } + point { + x: 586361.7128975715 + y: 4140756.7144010095 + } + point { + x: 586361.76494951826 + y: 4140756.9053673916 + } + point { + x: 586361.81700146513 + y: 4140757.0963337738 + } + point { + x: 586361.86905341188 + y: 4140757.287300156 + } + point { + x: 586361.92110535875 + y: 4140757.4782665381 + } + point { + x: 586361.9731573055 + y: 4140757.6692329203 + } + point { + x: 586362.02520925226 + y: 4140757.8601993024 + } + point { + x: 586362.07726119913 + y: 4140758.0511656846 + } + point { + x: 586362.12931314588 + y: 4140758.2421320663 + } + point { + x: 586362.18136509263 + y: 4140758.4330984484 + } + point { + x: 586362.23341703939 + y: 4140758.6240648306 + } + point { + x: 586362.285468986 + y: 4140758.8150312128 + } + point { + x: 586362.33752093278 + y: 4140759.0059975949 + } + point { + x: 586362.38957287953 + y: 4140759.1969639771 + } + point { + x: 586362.44162482629 + y: 4140759.3879303592 + } + point { + x: 586362.49367677292 + y: 4140759.5788967414 + } + point { + x: 586362.54572871968 + y: 4140759.7698631235 + } + point { + x: 586362.59778066631 + y: 4140759.9608295057 + } + point { + x: 586362.64983261307 + y: 4140760.1517958879 + } + point { + x: 586362.7018845597 + y: 4140760.34276227 + } + point { + x: 586362.75393650646 + y: 4140760.5337286522 + } + point { + x: 586362.8059884531 + y: 4140760.7246950343 + } + point { + x: 586362.85804039973 + y: 4140760.9156614165 + } + point { + x: 586362.91009234649 + y: 4140761.1066277986 + } + point { + x: 586362.96214429312 + y: 4140761.2975941808 + } + point { + x: 586363.01419623976 + y: 4140761.488560563 + } + point { + x: 586363.06624818651 + y: 4140761.6795269446 + } + point { + x: 586363.11830013315 + y: 4140761.8704933268 + } + point { + x: 586363.17035207979 + y: 4140762.061459709 + } + point { + x: 586363.22240402654 + y: 4140762.2524260911 + } + point { + x: 586363.27445597318 + y: 4140762.4433924733 + } + point { + x: 586363.32650791993 + y: 4140762.6343588554 + } + point { + x: 586363.37855986657 + y: 4140762.8253252376 + } + point { + x: 586363.43061181332 + y: 4140763.0162916197 + } + point { + x: 586363.48266376 + y: 4140763.2072580019 + } + point { + x: 586363.53471570672 + y: 4140763.3982243841 + } + point { + x: 586363.58676765335 + y: 4140763.5891907662 + } + point { + x: 586363.63881960011 + y: 4140763.7801571484 + } + point { + x: 586363.69087154674 + y: 4140763.9711235305 + } + point { + x: 586363.7429234935 + y: 4140764.1620899127 + } + point { + x: 586363.79497544013 + y: 4140764.3530562948 + } + point { + x: 586363.84702738689 + y: 4140764.544022677 + } + point { + x: 586363.89907933364 + y: 4140764.7349890592 + } + point { + x: 586363.95113128028 + y: 4140764.9259554413 + } + point { + x: 586364.003183227 + y: 4140765.1169218235 + } + point { + x: 586364.05523517379 + y: 4140765.3078882052 + } + point { + x: 586364.10728712042 + y: 4140765.4988545873 + } + point { + x: 586364.15933906718 + y: 4140765.6898209695 + } + point { + x: 586364.21139101393 + y: 4140765.8807873516 + } + point { + x: 586364.26344296057 + y: 4140766.0717537338 + } + point { + x: 586364.31549490732 + y: 4140766.2627201159 + } + point { + x: 586364.36754685408 + y: 4140766.4536864981 + } + point { + x: 586364.41959880071 + y: 4140766.6446528803 + } + point { + x: 586364.47165074747 + y: 4140766.8356192624 + } + point { + x: 586364.52370269422 + y: 4140767.0265856446 + } + point { + x: 586364.57575464086 + y: 4140767.2175520267 + } + point { + x: 586364.62780658761 + y: 4140767.4085184089 + } + point { + x: 586364.67985853436 + y: 4140767.599484791 + } + point { + x: 586364.731910481 + y: 4140767.7904511732 + } + point { + x: 586364.78396242775 + y: 4140767.9814175554 + } + point { + x: 586364.83601437439 + y: 4140768.1723839375 + } + point { + x: 586364.88806632115 + y: 4140768.3633503197 + } + point { + x: 586364.9401182679 + y: 4140768.5543167014 + } + point { + x: 586364.99217021454 + y: 4140768.7452830835 + } + point { + x: 586365.04422216129 + y: 4140768.9362494657 + } + point { + x: 586365.09627410793 + y: 4140769.1272158478 + } + point { + x: 586365.14832605468 + y: 4140769.31818223 + } + point { + x: 586365.20037800143 + y: 4140769.5091486122 + } + point { + x: 586365.25242994807 + y: 4140769.7001149943 + } + point { + x: 586365.30448189483 + y: 4140769.8910813765 + } + point { + x: 586365.35653384146 + y: 4140770.0820477586 + } + point { + x: 586365.40858578822 + y: 4140770.2730141408 + } + point { + x: 586365.460637735 + y: 4140770.4639805229 + } + point { + x: 586365.51268968161 + y: 4140770.6549469051 + } + point { + x: 586365.56474162836 + y: 4140770.8459132873 + } + point { + x: 586365.616793575 + y: 4140771.0368796694 + } + point { + x: 586365.66884552175 + y: 4140771.2278460516 + } + point { + x: 586365.72089746851 + y: 4140771.4188124337 + } + point { + x: 586365.77294941514 + y: 4140771.6097788159 + } + point { + x: 586365.8250013619 + y: 4140771.8007451976 + } + point { + x: 586365.87705330853 + y: 4140771.9917115797 + } + point { + x: 586365.92910525529 + y: 4140772.1826779619 + } + point { + x: 586365.98115720192 + y: 4140772.373644344 + } + point { + x: 586366.03320914868 + y: 4140772.5646107262 + } + point { + x: 586366.08526109543 + y: 4140772.7555771084 + } + point { + x: 586366.13731304207 + y: 4140772.9465434905 + } + point { + x: 586366.18936498882 + y: 4140773.1375098727 + } + point { + x: 586366.24141693546 + y: 4140773.3284762548 + } + point { + x: 586366.29346888221 + y: 4140773.519442637 + } + point { + x: 586366.345520829 + y: 4140773.7104090191 + } + point { + x: 586366.3975727756 + y: 4140773.9013754013 + } + point { + x: 586366.44962472236 + y: 4140774.0923417835 + } + point { + x: 586366.501676669 + y: 4140774.2833081656 + } + point { + x: 586366.55372861575 + y: 4140774.4742745478 + } + point { + x: 586366.6057805625 + y: 4140774.66524093 + } + point { + x: 586366.65783250914 + y: 4140774.8562073121 + } + point { + x: 586366.70988445589 + y: 4140775.0471736942 + } + point { + x: 586366.76193640253 + y: 4140775.2381400759 + } + point { + x: 586366.81398834928 + y: 4140775.4291064581 + } + point { + x: 586366.866040296 + y: 4140775.6200728402 + } + point { + x: 586366.91809224267 + y: 4140775.8110392224 + } + point { + x: 586366.97014418943 + y: 4140776.0020056046 + } + point { + x: 586367.02219613607 + y: 4140776.1929719867 + } + point { + x: 586367.07424808282 + y: 4140776.3839383689 + } + point { + x: 586367.12630002957 + y: 4140776.574904751 + } + point { + x: 586367.17835197621 + y: 4140776.7658711332 + } + point { + x: 586367.230403923 + y: 4140776.9568375153 + } + point { + x: 586367.28245586972 + y: 4140777.1478038975 + } + point { + x: 586367.33450781635 + y: 4140777.3387702797 + } + point { + x: 586367.38655976311 + y: 4140777.5297366618 + } + point { + x: 586367.43861170975 + y: 4140777.720703044 + } + point { + x: 586367.4906636565 + y: 4140777.9116694261 + } + point { + x: 586367.54271560325 + y: 4140778.1026358083 + } + point { + x: 586367.59476754989 + y: 4140778.2936021904 + } + point { + x: 586367.64681949664 + y: 4140778.4845685721 + } + point { + x: 586367.69887144328 + y: 4140778.6755349543 + } + point { + x: 586367.75092339 + y: 4140778.8665013365 + } + point { + x: 586367.80297533679 + y: 4140779.0574677186 + } + point { + x: 586367.85502728343 + y: 4140779.2484341008 + } + point { + x: 586367.90707923018 + y: 4140779.4394004829 + } + point { + x: 586367.95913117693 + y: 4140779.6303668651 + } + point { + x: 586368.01118312357 + y: 4140779.8213332472 + } + point { + x: 586368.06323507032 + y: 4140780.0122996294 + } + point { + x: 586368.115287017 + y: 4140780.2032660116 + } + point { + x: 586368.16733896371 + y: 4140780.3942323937 + } + point { + x: 586368.21939091047 + y: 4140780.5851987759 + } + point { + x: 586368.27144285711 + y: 4140780.776165158 + } + point { + x: 586368.32349480386 + y: 4140780.96713154 + } + point { + x: 586368.3755467505 + y: 4140781.1580979223 + } + point { + x: 586368.42759869725 + y: 4140781.3490643045 + } + point { + x: 586368.479650644 + y: 4140781.5400306867 + } + point { + x: 586368.53170259064 + y: 4140781.7309970683 + } + point { + x: 586368.58375453739 + y: 4140781.9219634505 + } + point { + x: 586368.635806484 + y: 4140782.1129298327 + } + point { + x: 586368.68785843079 + y: 4140782.3038962148 + } + point { + x: 586368.73991037754 + y: 4140782.494862597 + } + point { + x: 586368.79196232418 + y: 4140782.6858289791 + } + point { + x: 586368.84401427093 + y: 4140782.8767953613 + } + point { + x: 586368.89606621757 + y: 4140783.0677617434 + } + point { + x: 586368.94811816432 + y: 4140783.2587281256 + } + point { + x: 586369.00017011107 + y: 4140783.4496945078 + } + point { + x: 586369.05222205771 + y: 4140783.64066089 + } + point { + x: 586369.10427400446 + y: 4140783.8316272721 + } + point { + x: 586369.1563259511 + y: 4140784.0225936542 + } + point { + x: 586369.20837789786 + y: 4140784.2135600364 + } + point { + x: 586369.26042984461 + y: 4140784.4045264185 + } + point { + x: 586369.31248179125 + y: 4140784.5954928007 + } + point { + x: 586369.364533738 + y: 4140784.7864591829 + } + point { + x: 586369.41658568464 + y: 4140784.977425565 + } + point { + x: 586369.46863763139 + y: 4140785.1683919467 + } + point { + x: 586369.520689578 + y: 4140785.3593583289 + } + point { + x: 586369.57274152478 + y: 4140785.550324711 + } + point { + x: 586369.62479347154 + y: 4140785.7412910932 + } + } + heading: -0.24993649105040971 + length: 151.14875772478879 + } + } + boundary_type { + s: 0 + types: CURB + } + length: 151.14875772478879 + } + length: 153.87421245705966 + speed_limit: 4.5 + overlap_id { + id: "1_-1_and_2" + } + type: CITY_DRIVING + turn: NO_TURN + left_sample { + s: 0 + width: 1.7499999999999969 + } + left_sample { + s: 0.20001136855364768 + width: 1.7499999999999132 + } + left_sample { + s: 0.40002273710671876 + width: 1.7499999999999685 + } + left_sample { + s: 0.60003410566029847 + width: 1.7500000000000242 + } + left_sample { + s: 0.80004547421347971 + width: 1.750000000000135 + } + left_sample { + s: 1.0000568427671555 + width: 1.7500000000000511 + } + left_sample { + s: 1.2000682113204328 + width: 1.7500000000000786 + } + left_sample { + s: 1.4000795798740127 + width: 1.7500000000000226 + } + left_sample { + s: 1.6000909484271939 + width: 1.7499999999999953 + } + left_sample { + s: 1.8001023169806494 + width: 1.7500000000000226 + } + left_sample { + s: 2.0001136855341328 + width: 1.7500000000000502 + } + left_sample { + s: 2.2001250540875064 + width: 1.7499999999999944 + } + left_sample { + s: 2.4001364226407835 + width: 1.7500000000000768 + } + left_sample { + s: 2.600147791194253 + width: 1.7499999999999107 + } + left_sample { + s: 2.8001591597478326 + width: 1.7499999999999936 + } + left_sample { + s: 3.0001705283009996 + width: 1.749999999999966 + } + left_sample { + s: 3.2001818968545792 + width: 1.7499999999999936 + } + left_sample { + s: 3.4001932654079527 + width: 1.7499999999999096 + } + left_sample { + s: 3.6002046339613263 + width: 1.7499999999999651 + } + left_sample { + s: 3.8002160025149059 + width: 1.7499999999998817 + } + left_sample { + s: 4.0002273710682656 + width: 1.7499999999999367 + } + left_sample { + s: 4.2002387396216534 + width: 1.7499999999999645 + } + left_sample { + s: 4.400250108175233 + width: 1.7499999999999636 + } + left_sample { + s: 4.6002614767284822 + width: 1.7499999999999361 + } + left_sample { + s: 4.8002728452820618 + width: 1.7500000000000187 + } + left_sample { + s: 5.0002842138355312 + width: 1.7499999999999911 + } + left_sample { + s: 5.2002955823890007 + width: 1.7499999999999636 + } + left_sample { + s: 5.40030695094225 + width: 1.7499999999999911 + } + left_sample { + s: 5.6003183194958295 + width: 1.7500000000000184 + } + left_sample { + s: 5.8003296880491888 + width: 1.7500000000000178 + } + left_sample { + s: 6.0003410566026583 + width: 1.7500000000001281 + } + left_sample { + s: 6.2003524251559359 + width: 1.7500000000000728 + } + left_sample { + s: 6.4003637937095013 + width: 1.7500000000000453 + } + left_sample { + s: 6.6003751622628748 + width: 1.7500000000001557 + } + left_sample { + s: 6.8003865308163585 + width: 1.7500000000001 + } + left_sample { + s: 7.0003978993698137 + width: 1.7499999999999343 + } + left_sample { + s: 7.2004092679233933 + width: 1.7499999999999605 + } + left_sample { + s: 7.4004206364766709 + width: 1.7500000000000988 + } + left_sample { + s: 7.6004320050301546 + width: 1.7500000000000435 + } + left_sample { + s: 7.8004433735835281 + width: 1.7500000000000706 + } + left_sample { + s: 8.0004547421369 + width: 1.7499999999999605 + } + left_sample { + s: 8.200466110690467 + width: 1.7499999999999045 + } + left_sample { + s: 8.40047747924395 + width: 1.7500000000000149 + } + left_sample { + s: 8.6004888477974326 + width: 1.7499999999999027 + } + left_sample { + s: 8.8005002163506 + width: 1.7499999999999036 + } + left_sample { + s: 9.00051158490418 + width: 1.750000000000014 + } + left_sample { + s: 9.20052295345754 + width: 1.7499999999999305 + } + left_sample { + s: 9.4005343220111328 + width: 1.74999999999993 + } + left_sample { + s: 9.600545690564493 + width: 1.7499999999999853 + } + left_sample { + s: 9.8005570591178657 + width: 1.7500000000000129 + } + left_sample { + s: 10.000568427671226 + width: 1.7500000000000404 + } + left_sample { + s: 10.200579796224586 + width: 1.7500000000000677 + } + left_sample { + s: 10.400591164778028 + width: 1.7499999999999571 + } + left_sample { + s: 10.6006025333314 + width: 1.7500000000001505 + } + left_sample { + s: 10.800613901884663 + width: 1.7500000000001235 + } + left_sample { + s: 11.000625270438244 + width: 1.7500000000001228 + } + left_sample { + s: 11.200636638991575 + width: 1.7500000000001228 + } + left_sample { + s: 11.400648007544977 + width: 1.7500000000002056 + } + left_sample { + s: 11.600659376098349 + width: 1.7500000000002334 + } + left_sample { + s: 11.800670744651915 + width: 1.7500000000001776 + } + left_sample { + s: 12.000682113205496 + width: 1.7500000000001763 + } + left_sample { + s: 12.200693481758869 + width: 1.7500000000001201 + } + left_sample { + s: 12.400704850312145 + width: 1.7500000000000386 + } + left_sample { + s: 12.600716218865628 + width: 1.7500000000001206 + } + left_sample { + s: 12.800727587419111 + width: 1.7500000000000644 + } + left_sample { + s: 13.000738955972622 + width: 1.7500000000000087 + } + left_sample { + s: 13.200750324525995 + width: 1.7499999999998703 + } + left_sample { + s: 13.400761693079367 + width: 1.7499999999998981 + } + left_sample { + s: 13.60077306163285 + width: 1.7500000000000628 + } + left_sample { + s: 13.800784430186333 + width: 1.7499999999999527 + } + left_sample { + s: 14.000795798739789 + width: 1.7499999999998967 + } + left_sample { + s: 14.200807167293176 + width: 1.7499999999999252 + } + left_sample { + s: 14.400818535846646 + width: 1.7499999999999798 + } + left_sample { + s: 14.600829904400006 + width: 1.7499999999998963 + } + left_sample { + s: 14.800841272953477 + width: 1.7499999999998408 + } + left_sample { + s: 15.000852641506849 + width: 1.749999999999923 + } + left_sample { + s: 15.200864010060222 + width: 1.7499999999999509 + } + left_sample { + s: 15.400875378613774 + width: 1.7499999999999225 + } + left_sample { + s: 15.600886747167024 + width: 1.7499999999998674 + } + left_sample { + s: 15.800898115720521 + width: 1.7499999999999782 + } + left_sample { + s: 16.000909484274086 + width: 1.7499999999999503 + } + left_sample { + s: 16.200920852827444 + width: 1.74999999999995 + } + left_sample { + s: 16.400932221380913 + width: 1.7500000000000049 + } + left_sample { + s: 16.600943589934285 + width: 1.7499999999999771 + } + left_sample { + s: 16.800954958487658 + width: 1.7499999999999214 + } + left_sample { + s: 17.000966327040921 + width: 1.7499999999998661 + } + left_sample { + s: 17.200977695594418 + width: 1.7499999999999223 + } + left_sample { + s: 17.400989064147982 + width: 1.749999999999865 + } + left_sample { + s: 17.601000432701245 + width: 1.7499999999997828 + } + left_sample { + s: 17.801011801254742 + width: 1.749999999999782 + } + left_sample { + s: 18.001023169808114 + width: 1.7499999999996994 + } + left_sample { + s: 18.2010345383615 + width: 1.7499999999996998 + } + left_sample { + s: 18.401045906915066 + width: 1.7499999999997538 + } + left_sample { + s: 18.601057275468342 + width: 1.7499999999996712 + } + left_sample { + s: 18.801068644021715 + width: 1.7499999999997267 + } + left_sample { + s: 19.001080012574977 + width: 1.7499999999998364 + } + left_sample { + s: 19.201091381128585 + width: 1.7499999999997535 + } + left_sample { + s: 19.401102749681943 + width: 1.7499999999997815 + } + left_sample { + s: 19.601114118235522 + width: 1.7499999999998084 + } + left_sample { + s: 19.801125486788784 + width: 1.7499999999999192 + } + left_sample { + s: 20.001136855342267 + width: 1.7499999999999738 + } + left_sample { + s: 20.201148223895832 + width: 1.7499999999999181 + } + left_sample { + s: 20.401159592449094 + width: 1.7500000000000553 + } + left_sample { + s: 20.601170961002481 + width: 1.7499999999999452 + } + left_sample { + s: 20.801182329555949 + width: 1.75 + } + left_sample { + s: 21.001193698109432 + width: 1.7500000000000278 + } + left_sample { + s: 21.201205066662887 + width: 1.7499999999999718 + } + left_sample { + s: 21.401216435216163 + width: 1.7500000000000826 + } + left_sample { + s: 21.601227803769618 + width: 1.7499999999999711 + } + left_sample { + s: 21.801239172323005 + width: 1.7499999999999989 + } + left_sample { + s: 22.001250540876377 + width: 1.7499999999999711 + } + left_sample { + s: 22.20126190942975 + width: 1.7499999999999445 + } + left_sample { + s: 22.401273277983314 + width: 1.7499999999998876 + } + left_sample { + s: 22.6012846465367 + width: 1.7499999999999156 + } + left_sample { + s: 22.80129601509006 + width: 1.7499999999998874 + } + left_sample { + s: 23.001307383643447 + width: 1.7499999999998879 + } + left_sample { + s: 23.201318752197025 + width: 1.74999999999986 + } + left_sample { + s: 23.401330120750192 + width: 1.750000000000026 + } + left_sample { + s: 23.601341489303852 + width: 1.7499999999998586 + } + left_sample { + s: 23.801352857857033 + width: 1.7499999999999141 + } + left_sample { + s: 24.001364226410516 + width: 1.7499999999999145 + } + left_sample { + s: 24.201375594964095 + width: 1.7500000000000229 + } + left_sample { + s: 24.401386963517467 + width: 1.7499999999998854 + } + left_sample { + s: 24.60139833207084 + width: 1.7499999999999685 + } + left_sample { + s: 24.801409700624308 + width: 1.7499999999999947 + } + left_sample { + s: 25.001421069177777 + width: 1.7499999999998557 + } + left_sample { + s: 25.201432437731054 + width: 1.7499999999999134 + } + left_sample { + s: 25.401443806284728 + width: 1.7499999999999938 + } + left_sample { + s: 25.601455174837991 + width: 1.7499999999999949 + } + left_sample { + s: 25.80146654339168 + width: 1.7500000000000755 + } + left_sample { + s: 26.001477911944832 + width: 1.7500000000000764 + } + left_sample { + s: 26.201489280498425 + width: 1.7499999999999936 + } + left_sample { + s: 26.401500649051755 + width: 1.7499999999999389 + } + left_sample { + s: 26.601512017605348 + width: 1.7499999999999933 + } + left_sample { + s: 26.801523386158802 + width: 1.7499999999999938 + } + left_sample { + s: 27.001534754712271 + width: 1.75000000000002 + } + left_sample { + s: 27.201546123265643 + width: 1.7499999999999662 + } + left_sample { + s: 27.401557491818988 + width: 1.7500000000000768 + } + left_sample { + s: 27.601568860372566 + width: 1.7500000000000187 + } + left_sample { + s: 27.801580228925953 + width: 1.7499999999999647 + } + left_sample { + s: 28.001591597479312 + width: 1.7500000000000207 + } + left_sample { + s: 28.201602966032862 + width: 1.7499999999999909 + } + left_sample { + s: 28.401614334586153 + width: 1.7500000000000493 + } + left_sample { + s: 28.601625703139607 + width: 1.7500000000001577 + } + left_sample { + s: 28.80163707169298 + width: 1.7500000000001019 + } + left_sample { + s: 29.001648440246353 + width: 1.7500000000000477 + } + left_sample { + s: 29.201659808799725 + width: 1.7500000000001854 + } + left_sample { + s: 29.401671177353098 + width: 1.7500000000001852 + } + left_sample { + s: 29.601682545906566 + width: 1.750000000000157 + } + left_sample { + s: 29.801693914460063 + width: 1.7500000000001561 + } + left_sample { + s: 30.00170528301323 + width: 1.7500000000002132 + } + left_sample { + s: 30.201716651566795 + width: 1.750000000000157 + } + left_sample { + s: 30.401728020120387 + width: 1.7500000000001568 + } + left_sample { + s: 30.601739388673746 + width: 1.7500000000002109 + } + left_sample { + s: 30.801750757227243 + width: 1.7500000000002109 + } + left_sample { + s: 31.001762125780711 + width: 1.7500000000001537 + } + left_sample { + s: 31.201773494333988 + width: 1.7500000000001283 + } + left_sample { + s: 31.401784862887457 + width: 1.7500000000001534 + } + left_sample { + s: 31.601796231440844 + width: 1.7500000000000713 + } + left_sample { + s: 31.801807599994312 + width: 1.7500000000000158 + } + left_sample { + s: 32.001818968547795 + width: 1.7500000000000424 + } + left_sample { + s: 32.201830337101171 + width: 1.7500000000000424 + } + left_sample { + s: 32.401841705654547 + width: 1.7500000000000697 + } + left_sample { + s: 32.601853074207924 + width: 1.7500000000000975 + } + left_sample { + s: 32.801864442761286 + width: 1.7500000000000979 + } + left_sample { + s: 33.001875811314854 + width: 1.7499999999999851 + } + left_sample { + s: 33.20188717986813 + width: 1.7500000000000422 + } + left_sample { + s: 33.401898548421478 + width: 1.7500000000000671 + } + left_sample { + s: 33.601909916974854 + width: 1.7499999999999303 + } + left_sample { + s: 33.801921285528216 + width: 1.7499999999999576 + } + left_sample { + s: 34.001932654081592 + width: 1.75000000000004 + } + left_sample { + s: 34.201944022635061 + width: 1.7500000000000111 + } + left_sample { + s: 34.401955391188338 + width: 1.7500000000000124 + } + left_sample { + s: 34.601966759741806 + width: 1.7500000000000373 + } + left_sample { + s: 34.801978128295183 + width: 1.7499999999999023 + } + left_sample { + s: 35.001989496848751 + width: 1.75000000000001 + } + left_sample { + s: 35.202000865402141 + width: 1.75000000000001 + } + left_sample { + s: 35.402012233955531 + width: 1.7500000000000655 + } + left_sample { + s: 35.602023602509014 + width: 1.7500000000000386 + } + left_sample { + s: 35.802034971062469 + width: 1.749999999999984 + } + left_sample { + s: 36.002046339616051 + width: 1.7500000000000921 + } + left_sample { + s: 36.20205770816947 + width: 1.7500000000002012 + } + left_sample { + s: 36.402069076722832 + width: 1.7500000000000653 + } + left_sample { + s: 36.602080445276442 + width: 1.7500000000001465 + } + left_sample { + s: 36.802091813829819 + width: 1.7500000000001181 + } + left_sample { + s: 37.002103182383209 + width: 1.7500000000000651 + } + left_sample { + s: 37.202114550936557 + width: 1.7500000000000651 + } + left_sample { + s: 37.402125919490054 + width: 1.7500000000001745 + } + left_sample { + s: 37.602137288043636 + width: 1.7500000000000346 + } + left_sample { + s: 37.802148656596913 + width: 1.7500000000000082 + } + left_sample { + s: 38.002160025150289 + width: 1.7500000000000089 + } + left_sample { + s: 38.202171393703743 + width: 1.7499999999999805 + } + left_sample { + s: 38.40218276225702 + width: 1.7500000000000902 + } + left_sample { + s: 38.602194130810382 + width: 1.7499999999999802 + } + left_sample { + s: 38.802205499363758 + width: 1.7500000000000089 + } + left_sample { + s: 39.002216867917355 + width: 1.7500000000000902 + } + left_sample { + s: 39.202228236470809 + width: 1.7499999999999776 + } + left_sample { + s: 39.402239605024086 + width: 1.7499999999999227 + } + left_sample { + s: 39.602250973577462 + width: 1.7499999999998679 + } + left_sample { + s: 39.802262342130838 + width: 1.7499999999998959 + } + left_sample { + s: 40.0022737106842 + width: 1.7499999999999225 + } + left_sample { + s: 40.202285079237562 + width: 1.7499999999998683 + } + left_sample { + s: 40.402296447791144 + width: 1.7499999999999236 + } + left_sample { + s: 40.602307816344712 + width: 1.7499999999998672 + } + left_sample { + s: 40.802319184897989 + width: 1.7500000000000036 + } + left_sample { + s: 41.002330553451237 + width: 1.7499999999999236 + } + left_sample { + s: 41.20234192200482 + width: 1.7500000000000049 + } + left_sample { + s: 41.402353290558288 + width: 1.7500000000000062 + } + left_sample { + s: 41.602364659111842 + width: 1.7500000000000313 + } + left_sample { + s: 41.802376027665311 + width: 1.7499999999999747 + } + left_sample { + s: 42.0023873962187 + width: 1.7500000000000047 + } + left_sample { + s: 42.202398764772283 + width: 1.7500000000000866 + } + left_sample { + s: 42.402410133325645 + width: 1.7500000000001397 + } + left_sample { + s: 42.602421501879022 + width: 1.7500000000000597 + } + left_sample { + s: 42.80243287043259 + width: 1.75000000000014 + } + left_sample { + s: 43.002444238986172 + width: 1.7500000000000846 + } + left_sample { + s: 43.202455607539534 + width: 1.7500000000001128 + } + left_sample { + s: 43.402466976093 + width: 1.7500000000001668 + } + left_sample { + s: 43.602478344646265 + width: 1.750000000000195 + } + left_sample { + s: 43.802489713199861 + width: 1.7500000000001956 + } + left_sample { + s: 44.002501081753444 + width: 1.7500000000002474 + } + left_sample { + s: 44.2025124503066 + width: 1.7500000000002478 + } + left_sample { + s: 44.402523818860082 + width: 1.7500000000001661 + } + left_sample { + s: 44.602535187413444 + width: 1.7500000000002209 + } + left_sample { + s: 44.802546555966913 + width: 1.7500000000001923 + } + left_sample { + s: 45.002557924520382 + width: 1.7500000000001075 + } + left_sample { + s: 45.202569293073658 + width: 1.7500000000001092 + } + left_sample { + s: 45.402580661627141 + width: 1.7500000000000806 + } + left_sample { + s: 45.602592030180517 + width: 1.7500000000000817 + } + left_sample { + s: 45.802603398734014 + width: 1.7500000000001621 + } + left_sample { + s: 46.002614767287376 + width: 1.7499999999999971 + } + left_sample { + s: 46.202626135840767 + width: 1.7500000000000242 + } + left_sample { + s: 46.405275008788429 + width: 1.7045462093850519 + } + left_sample { + s: 46.580037921587085 + width: 1.7077929087142993 + } + left_sample { + s: 46.754800834385684 + width: 1.71103960804394 + } + left_sample { + s: 46.929563747184112 + width: 1.7142863073738455 + } + left_sample { + s: 47.104326659982767 + width: 1.7175330067035213 + } + left_sample { + s: 47.279089572781288 + width: 1.7207797060329915 + } + left_sample { + s: 47.453852485579887 + width: 1.7240264053630119 + } + left_sample { + s: 47.6286153983785 + width: 1.7272731046925802 + } + left_sample { + s: 47.803378311176765 + width: 1.7305198040219829 + } + left_sample { + s: 47.978141223975484 + width: 1.7337665033514491 + } + left_sample { + s: 48.152904136773955 + width: 1.7370132026812946 + } + left_sample { + s: 48.327667049572725 + width: 1.7402599020111846 + } + left_sample { + s: 48.502429962371316 + width: 1.7435066013405374 + } + left_sample { + s: 48.677192875169595 + width: 1.7467533006703742 + } + left_sample { + s: 48.89446870767695 + width: 1.7038067791879112 + } + left_sample { + s: 49.064691439921788 + width: 1.7073601038650055 + } + left_sample { + s: 49.234914172166171 + width: 1.7109134285430225 + } + left_sample { + s: 49.405136904410725 + width: 1.7144667532212192 + } + left_sample { + s: 49.575359636655541 + width: 1.7180200778991059 + } + left_sample { + s: 49.745582368900152 + width: 1.7215734025770484 + } + left_sample { + s: 49.915805101144933 + width: 1.7251267272549038 + } + left_sample { + s: 50.086027833389466 + width: 1.728680051932189 + } + left_sample { + s: 50.256250565634048 + width: 1.7322333766105573 + } + left_sample { + s: 50.426473297878772 + width: 1.7357867012883936 + } + left_sample { + s: 50.596696030123347 + width: 1.7393400259662384 + } + left_sample { + s: 50.766918762367951 + width: 1.7428933506445472 + } + left_sample { + s: 50.937141494612746 + width: 1.7122866516116459 + } + left_sample { + s: 51.1192028141192 + width: 1.6571467121271966 + } + left_sample { + s: 51.281061563556669 + width: 1.6633369313183521 + } + left_sample { + s: 51.442920312994346 + width: 1.6695271505097786 + } + left_sample { + s: 51.604779062431859 + width: 1.6757173697018979 + } + left_sample { + s: 51.766637811869323 + width: 1.68190758889346 + } + left_sample { + s: 51.928496561306851 + width: 1.6880978080848918 + } + left_sample { + s: 52.090355310744414 + width: 1.6942880272767669 + } + left_sample { + s: 52.252214060181828 + width: 1.7004782464682655 + } + left_sample { + s: 52.414072809619505 + width: 1.706668465659487 + } + left_sample { + s: 52.575931559056876 + width: 1.7128586848510754 + } + left_sample { + s: 52.7377903084946 + width: 1.7190489040423946 + } + left_sample { + s: 52.899649057932123 + width: 1.7252391232340183 + } + left_sample { + s: 53.061507807369807 + width: 1.7314293424251044 + } + left_sample { + s: 53.223366556807264 + width: 1.7376195616168679 + } + left_sample { + s: 53.385225306244692 + width: 1.7361305931596187 + } + left_sample { + s: 53.535661210641251 + width: 1.7103765340275698 + } + left_sample { + s: 53.689999802215809 + width: 1.7160370291669369 + } + left_sample { + s: 53.844338393790366 + width: 1.7216975243058208 + } + left_sample { + s: 53.998676985364973 + width: 1.7273580194437872 + } + left_sample { + s: 54.153015576939609 + width: 1.7330185145831594 + } + left_sample { + s: 54.307354168514195 + width: 1.7386790097226739 + } + left_sample { + s: 54.461692760088695 + width: 1.7323197473081078 + } + left_sample { + s: 54.665935780616486 + width: 1.6809873739043004 + } + left_sample { + s: 54.824380910618657 + width: 1.6867384260787182 + } + left_sample { + s: 54.982826040620893 + width: 1.6924894782531832 + } + left_sample { + s: 55.141271170623064 + width: 1.6982405304276418 + } + left_sample { + s: 55.299716300625292 + width: 1.7039915826023764 + } + left_sample { + s: 55.458161430627634 + width: 1.7097426347775693 + } + left_sample { + s: 55.616606560629869 + width: 1.7154936869519686 + } + left_sample { + s: 55.775051690631933 + width: 1.7212447391265151 + } + left_sample { + s: 55.933496820634218 + width: 1.7269957913012017 + } + left_sample { + s: 56.0919419506365 + width: 1.7327468434756381 + } + left_sample { + s: 56.250387080638674 + width: 1.7384978956504389 + } + left_sample { + s: 56.408832210640846 + width: 1.7382631653591363 + } + left_sample { + s: 56.553977533807334 + width: 1.7143851358298732 + } + left_sample { + s: 56.753223118960371 + width: 1.7173709564130593 + } + left_sample { + s: 56.952424168022134 + width: 1.7201681962611712 + } + left_sample { + s: 57.151584753684595 + width: 1.7227831603418249 + } + left_sample { + s: 57.35070873530254 + width: 1.7252221440565063 + } + left_sample { + s: 57.549799763669434 + width: 1.7274914275517201 + } + left_sample { + s: 57.748861285838053 + width: 1.729597270377621 + } + left_sample { + s: 57.947896549981593 + width: 1.7315244703797095 + } + left_sample { + s: 58.146908610289984 + width: 1.7332995224521572 + } + left_sample { + s: 58.345900331902719 + width: 1.734931763457775 + } + left_sample { + s: 58.544874395870735 + width: 1.7364272742299249 + } + left_sample { + s: 58.743833304148026 + width: 1.7377920906752209 + } + left_sample { + s: 58.942779384607512 + width: 1.7390322005253542 + } + left_sample { + s: 59.141714796080507 + width: 1.7401535403660473 + } + left_sample { + s: 59.3406415334168 + width: 1.7411619929298514 + } + left_sample { + s: 59.539561432564724 + width: 1.742063384640701 + } + left_sample { + s: 59.738476175663934 + width: 1.7428634833965828 + } + left_sample { + s: 59.937387296157368 + width: 1.7435679965854831 + } + left_sample { + s: 60.136296183911625 + width: 1.7441825693160693 + } + left_sample { + s: 60.335204090351745 + width: 1.7447127828567228 + } + left_sample { + s: 60.5341121336035 + width: 1.7451641532670887 + } + left_sample { + s: 60.733021303644449 + width: 1.7455421302135119 + } + left_sample { + s: 60.931932467461309 + width: 1.7458520959561428 + } + left_sample { + s: 61.13084637421376 + width: 1.7460993644962861 + } + left_sample { + s: 61.329763660402456 + width: 1.7462891808719885 + } + left_sample { + s: 61.528684855040041 + width: 1.7464267205928548 + } + left_sample { + s: 61.72761038482539 + width: 1.7465170892009478 + } + left_sample { + s: 61.926540579319919 + width: 1.7465653219490451 + } + left_sample { + s: 62.125475676125411 + width: 1.7465763835855834 + } + left_sample { + s: 62.324415826061234 + width: 1.7465551682357172 + } + left_sample { + s: 62.523361098343877 + width: 1.7465064993694308 + } + left_sample { + s: 62.722311485764074 + width: 1.74643512984659 + } + left_sample { + s: 62.921266909865345 + width: 1.7463457420302484 + } + left_sample { + s: 63.120227226120427 + width: 1.7462429479584445 + } + left_sample { + s: 63.319192229106612 + width: 1.746131289568396 + } + left_sample { + s: 63.518161657681482 + width: 1.7460152389611925 + } + left_sample { + s: 63.71713520015583 + width: 1.7458991987018682 + } + left_sample { + s: 63.9161124994651 + width: 1.7457875021455453 + } + left_sample { + s: 64.115093158341665 + width: 1.7456844137838088 + } + left_sample { + s: 64.314076744482747 + width: 1.7455941296011459 + } + left_sample { + s: 64.5130627957203 + width: 1.7455207774397241 + } + left_sample { + s: 64.712050825187291 + width: 1.7454684173604043 + } + left_sample { + s: 64.911040326484837 + width: 1.745441041997609 + } + left_sample { + s: 65.110030778847687 + width: 1.7454425768996913 + } + left_sample { + s: 65.309021652309283 + width: 1.74547688085287 + } + left_sample { + s: 65.508012412866748 + width: 1.7455477461763969 + } + left_sample { + s: 65.707002527645415 + width: 1.7456588981052958 + } + left_sample { + s: 65.905991470063285 + width: 1.7458114853915638 + } + left_sample { + s: 66.10497872499684 + width: 1.7459957083067854 + } + left_sample { + s: 66.303963794006421 + width: 1.7461902993687859 + } + left_sample { + s: 66.502946335281322 + width: 1.7463769455907896 + } + left_sample { + s: 66.701926441717717 + width: 1.7465527319916831 + } + left_sample { + s: 66.900904284031469 + width: 1.7467177176982212 + } + left_sample { + s: 67.0998800267398 + width: 1.7468719585087285 + } + left_sample { + s: 67.2988538285142 + width: 1.747015506902817 + } + left_sample { + s: 67.4978258425342 + width: 1.7471484120535878 + } + left_sample { + s: 67.696796216840738 + width: 1.7472707198391462 + } + left_sample { + s: 67.89576509468904 + width: 1.7473824728541483 + } + left_sample { + s: 68.094732614902483 + width: 1.7474837104223073 + } + left_sample { + s: 68.293698912226361 + width: 1.7475744686106274 + } + left_sample { + s: 68.4926641176806 + width: 1.7476547802403375 + } + left_sample { + s: 68.691628358914556 + width: 1.7477246749032451 + } + left_sample { + s: 68.890591760559445 + width: 1.7477841789738191 + } + left_sample { + s: 69.089554444582532 + width: 1.7478333156244035 + } + left_sample { + s: 69.2885165306413 + width: 1.7478721048400281 + } + left_sample { + s: 69.4874781364359 + width: 1.7479005634335731 + } + left_sample { + s: 69.686439378064151 + width: 1.7479187050614606 + } + left_sample { + s: 69.88540037037447 + width: 1.7479265402395052 + } + left_sample { + s: 70.084361227320045 + width: 1.7479240763592545 + } + left_sample { + s: 70.2833220623119 + width: 1.7479113177045529 + } + left_sample { + s: 70.482282988573587 + width: 1.7478882654686589 + } + left_sample { + s: 70.68124411949421 + width: 1.7478549829529648 + } + left_sample { + s: 70.8802055689828 + width: 1.7478126091885651 + } + left_sample { + s: 71.079167451821164 + width: 1.7477653308037542 + } + left_sample { + s: 71.278129878222842 + width: 1.7477188752078991 + } + left_sample { + s: 71.477092879511758 + width: 1.7476756444607671 + } + left_sample { + s: 71.6760564285364 + width: 1.7476356542518534 + } + left_sample { + s: 71.875020496419182 + width: 1.7475988691541122 + } + left_sample { + s: 72.073985053911883 + width: 1.7475652535402786 + } + left_sample { + s: 72.2729500714176 + width: 1.7475347715820153 + } + left_sample { + s: 72.471915519013081 + width: 1.7475073872527134 + } + left_sample { + s: 72.670881366470681 + width: 1.7474830643269788 + } + left_sample { + s: 72.869847583281654 + width: 1.7474617663838667 + } + left_sample { + s: 73.068814138677482 + width: 1.7474434568067614 + } + left_sample { + s: 73.267781001652438 + width: 1.7474280987841282 + } + left_sample { + s: 73.466748140985885 + width: 1.7474156553116431 + } + left_sample { + s: 73.665715525265341 + width: 1.7474060891928991 + } + left_sample { + s: 73.864683122906911 + width: 1.7473993630402702 + } + left_sample { + s: 74.063650902180029 + width: 1.7473954392770203 + } + left_sample { + s: 74.262618831227513 + width: 1.747394280136688 + } + left_sample { + s: 74.461586878089335 + width: 1.747395847665917 + } + left_sample { + s: 74.6605550107244 + width: 1.7474001037239459 + } + left_sample { + s: 74.859523197032644 + width: 1.7474070099854704 + } + left_sample { + s: 75.058491404877827 + width: 1.7474165279407463 + } + left_sample { + s: 75.257459602109549 + width: 1.7474286188962334 + } + left_sample { + s: 75.456427756585271 + width: 1.7474432438353285 + } + left_sample { + s: 75.655395836193264 + width: 1.7474603027547451 + } + left_sample { + s: 75.854363808874254 + width: 1.7474792302864381 + } + left_sample { + s: 76.053331642673925 + width: 1.7474986227462475 + } + left_sample { + s: 76.252299316211335 + width: 1.7475173591036397 + } + left_sample { + s: 76.451266834243526 + width: 1.7475353031133447 + } + left_sample { + s: 76.650234205509847 + width: 1.7475524629689179 + } + left_sample { + s: 76.849201438722034 + width: 1.7475688468487056 + } + left_sample { + s: 77.048168542565577 + width: 1.7475844629158248 + } + left_sample { + s: 77.247135525702021 + width: 1.7475993193196104 + } + left_sample { + s: 77.4461023967699 + width: 1.7476134241949071 + } + left_sample { + s: 77.645069164386371 + width: 1.7476267856610523 + } + left_sample { + s: 77.844035837149235 + width: 1.7476394118238656 + } + left_sample { + s: 78.043002423638185 + width: 1.7476513107746445 + } + left_sample { + s: 78.241968932417038 + width: 1.7476624905904796 + } + left_sample { + s: 78.440935372034232 + width: 1.7476729593336506 + } + left_sample { + s: 78.6399017510257 + width: 1.7476827250538256 + } + left_sample { + s: 78.838868077915649 + width: 1.7476917957849989 + } + left_sample { + s: 79.037834361218046 + width: 1.7477001795478664 + } + left_sample { + s: 79.236800609439484 + width: 1.7477078843501501 + } + left_sample { + s: 79.435766831079235 + width: 1.7477149181844767 + } + left_sample { + s: 79.634733034631466 + width: 1.7477212890303506 + } + left_sample { + s: 79.833699228587619 + width: 1.7477270048535196 + } + left_sample { + s: 80.032665421436789 + width: 1.7477320736067792 + } + left_sample { + s: 80.231631621668072 + width: 1.7477365032282657 + } + left_sample { + s: 80.430597837771913 + width: 1.7477403023318498 + } + left_sample { + s: 80.629564078242211 + width: 1.7477435070189138 + } + left_sample { + s: 80.828530351576745 + width: 1.7477463870970471 + } + left_sample { + s: 81.027496665660578 + width: 1.7477493277325256 + } + left_sample { + s: 81.226463022025769 + width: 1.7477524676529916 + } + left_sample { + s: 81.425429418456758 + width: 1.7477558063437886 + } + left_sample { + s: 81.6243958526868 + width: 1.7477593417056068 + } + left_sample { + s: 81.823362322447338 + width: 1.7477630661360051 + } + left_sample { + s: 82.0223288254678 + width: 1.7477669837965195 + } + left_sample { + s: 82.221295359475789 + width: 1.7477710927095158 + } + left_sample { + s: 82.420261922197867 + width: 1.7477753907720013 + } + left_sample { + s: 82.619228511358585 + width: 1.7477798758796241 + } + left_sample { + s: 82.818195124681566 + width: 1.7477845459268639 + } + left_sample { + s: 83.017161759888936 + width: 1.7477893988078672 + } + left_sample { + s: 83.216128414701728 + width: 1.7477944324149366 + } + left_sample { + s: 83.415095086839983 + width: 1.7477996446396733 + } + left_sample { + s: 83.614061774023057 + width: 1.7478050333728201 + } + left_sample { + s: 83.813028473969368 + width: 1.7478105965039408 + } + left_sample { + s: 84.011995184396667 + width: 1.7478163319220905 + } + left_sample { + s: 84.210961903022223 + width: 1.7478222375142509 + } + left_sample { + s: 84.409928627562877 + width: 1.7478283111673676 + } + left_sample { + s: 84.608895355735285 + width: 1.7478345507671109 + } + left_sample { + s: 84.807862085255621 + width: 1.747840954197557 + } + left_sample { + s: 85.006828813840386 + width: 1.7478475193430487 + } + left_sample { + s: 85.205795539205909 + width: 1.747854244086211 + } + left_sample { + s: 85.404762259068733 + width: 1.7478611261176604 + } + left_sample { + s: 85.603728971145387 + width: 1.7478681334777768 + } + left_sample { + s: 85.802695673160528 + width: 1.7478751704969586 + } + left_sample { + s: 86.001662363733416 + width: 1.747882163651727 + } + left_sample { + s: 86.200629043264755 + width: 1.7478891060332484 + } + left_sample { + s: 86.399595712367031 + width: 1.7478959982130957 + } + left_sample { + s: 86.5985623716527 + width: 1.7479028407626052 + } + left_sample { + s: 86.797529021733922 + width: 1.7479096342531781 + } + left_sample { + s: 86.99649566322293 + width: 1.7479163792563197 + } + left_sample { + s: 87.195462296731719 + width: 1.7479230763428348 + } + left_sample { + s: 87.3944289228722 + width: 1.7479297260844491 + } + left_sample { + s: 87.593395542256275 + width: 1.7479363290519996 + } + left_sample { + s: 87.792362155495468 + width: 1.7479428858162727 + } + left_sample { + s: 87.9913287632016 + width: 1.7479493969486308 + } + left_sample { + s: 88.190295365986088 + width: 1.7479558630195169 + } + left_sample { + s: 88.3892619644607 + width: 1.7479622846003058 + } + left_sample { + s: 88.5882285592366 + width: 1.7479686622611292 + } + left_sample { + s: 88.787195150925157 + width: 1.747974996573231 + } + left_sample { + s: 88.98616174013803 + width: 1.7479812881066024 + } + left_sample { + s: 89.185128327486112 + width: 1.7479875374319096 + } + left_sample { + s: 89.384094913581052 + width: 1.7479937451201584 + } + left_sample { + s: 89.583061499034 + width: 1.7479999117408116 + } + left_sample { + s: 89.782028084456172 + width: 1.7480060378648021 + } + left_sample { + s: 89.980994670458813 + width: 1.7480121240622144 + } + left_sample { + s: 90.179961257653261 + width: 1.7480181709031077 + } + left_sample { + s: 90.378927846650839 + width: 1.7480241806508272 + } + left_sample { + s: 90.577894438062813 + width: 1.7480301700448997 + } + left_sample { + s: 90.776861032438561 + width: 1.7480361640547979 + } + left_sample { + s: 90.975827629844943 + width: 1.7480421708656073 + } + left_sample { + s: 91.174794230119431 + width: 1.7480481903663736 + } + left_sample { + s: 91.373760833098558 + width: 1.7480542224042153 + } + left_sample { + s: 91.572727438618315 + width: 1.7480602668261453 + } + left_sample { + s: 91.771694046515066 + width: 1.7480663234796143 + } + left_sample { + s: 91.9706606566251 + width: 1.7480723922119339 + } + left_sample { + s: 92.1696272687846 + width: 1.7480784728704664 + } + left_sample { + s: 92.368593882829614 + width: 1.7480845653018628 + } + left_sample { + s: 92.567560498596535 + width: 1.7480906693537244 + } + left_sample { + s: 92.766527115921264 + width: 1.7480967848732465 + } + left_sample { + s: 92.9654937346404 + width: 1.7481029117079003 + } + left_sample { + s: 93.164460354589878 + width: 1.7481090497044243 + } + left_sample { + s: 93.363426975605819 + width: 1.7481151987101564 + } + left_sample { + s: 93.5623935975247 + width: 1.7481213585725859 + } + left_sample { + s: 93.761360220182425 + width: 1.7481275291388769 + } + left_sample { + s: 93.9603268434154 + width: 1.7481337102560526 + } + left_sample { + s: 94.159293467059285 + width: 1.7481399017708135 + } + left_sample { + s: 94.358260090950893 + width: 1.7481461035311636 + } + left_sample { + s: 94.557226714926017 + width: 1.7481523153841358 + } + left_sample { + s: 94.75619333882095 + width: 1.7481585371765787 + } + left_sample { + s: 94.9551599624718 + width: 1.74816476875556 + } + left_sample { + s: 95.154126585714664 + width: 1.7481710099453738 + } + left_sample { + s: 95.353093208385957 + width: 1.7481772587796356 + } + left_sample { + s: 95.552059830322733 + width: 1.7481835094265925 + } + left_sample { + s: 95.751026451437809 + width: 1.7481897572071179 + } + left_sample { + s: 95.949993071764069 + width: 1.7481960017905669 + } + left_sample { + s: 96.148959691345269 + width: 1.7482022432178674 + } + left_sample { + s: 96.347926310225432 + width: 1.7482084815301606 + } + left_sample { + s: 96.546892928448543 + width: 1.7482147167684758 + } + left_sample { + s: 96.745859546058256 + width: 1.7482209489735809 + } + left_sample { + s: 96.944826163098639 + width: 1.7482271781864505 + } + left_sample { + s: 97.143792779613634 + width: 1.7482334044478969 + } + left_sample { + s: 97.342759395647022 + width: 1.7482396277989556 + } + left_sample { + s: 97.541726011242744 + width: 1.7482458482808605 + } + left_sample { + s: 97.7406926264447 + width: 1.7482520659343428 + } + left_sample { + s: 97.939659241296866 + width: 1.7482582808002856 + } + left_sample { + s: 98.138625855842989 + width: 1.7482644929196864 + } + left_sample { + s: 98.337592470127049 + width: 1.7482707023334143 + } + left_sample { + s: 98.536559084192959 + width: 1.7482769090826 + } + left_sample { + s: 98.735525698084686 + width: 1.7482831132082006 + } + left_sample { + s: 98.9344923118458 + width: 1.7482893147506253 + } + left_sample { + s: 99.1334589255206 + width: 1.7482955137515903 + } + left_sample { + s: 99.332425539152752 + width: 1.7483017102515139 + } + left_sample { + s: 99.531392152786154 + width: 1.748307904291591 + } + left_sample { + s: 99.730358766464775 + width: 1.7483140959126391 + } + left_sample { + s: 99.929325380232555 + width: 1.7483202851555482 + } + left_sample { + s: 100.12829199413333 + width: 1.7483264721698502 + } + left_sample { + s: 100.32725860821087 + width: 1.7483326579033911 + } + left_sample { + s: 100.52622522250338 + width: 1.7483388439662657 + } + left_sample { + s: 100.72519183701246 + width: 1.7483450308303137 + } + left_sample { + s: 100.9241584517268 + width: 1.7483512184858561 + } + left_sample { + s: 101.12312506663427 + width: 1.7483574069214376 + } + left_sample { + s: 101.32209168172321 + width: 1.7483635961262396 + } + left_sample { + s: 101.52105829698193 + width: 1.7483697860893568 + } + left_sample { + s: 101.72002491239864 + width: 1.748375976799756 + } + left_sample { + s: 101.91899152796124 + width: 1.748382168246092 + } + left_sample { + s: 102.1179581436587 + width: 1.748388360418129 + } + left_sample { + s: 102.31692475947861 + width: 1.7483945533043348 + } + left_sample { + s: 102.51589137540958 + width: 1.7484007468943512 + } + left_sample { + s: 102.71485799143966 + width: 1.7484069411763234 + } + left_sample { + s: 102.913824607557 + width: 1.7484131361397441 + } + left_sample { + s: 103.11279122375012 + width: 1.7484193317739249 + } + left_sample { + s: 103.31175784000713 + width: 1.7484255280676124 + } + left_sample { + s: 103.51072445631614 + width: 1.7484317250096364 + } + left_sample { + s: 103.70969107266545 + width: 1.7484379225891937 + } + left_sample { + s: 103.90865768904341 + width: 1.748444120795358 + } + left_sample { + s: 104.10762430543835 + width: 1.7484503196173027 + } + left_sample { + s: 104.30659092183825 + width: 1.7484565190437957 + } + left_sample { + s: 104.50555753823137 + width: 1.7484627190640725 + } + left_sample { + s: 104.704524154606 + width: 1.7484689196670167 + } + left_sample { + s: 104.9034907709505 + width: 1.748475120839367 + } + left_sample { + s: 105.102457387253 + width: 1.7484813224774098 + } + left_sample { + s: 105.30142400350199 + width: 1.7484875242291942 + } + left_sample { + s: 105.5003906196919 + width: 1.7484937257979998 + } + left_sample { + s: 105.69935723582545 + width: 1.7484999271694739 + } + left_sample { + s: 105.89832385190573 + width: 1.7485061283463204 + } + left_sample { + s: 106.09729046793591 + width: 1.7485123293319169 + } + left_sample { + s: 106.29625708391929 + width: 1.7485185301288002 + } + left_sample { + s: 106.49522369985878 + width: 1.7485247307400011 + } + left_sample { + s: 106.69419031575767 + width: 1.7485309311684816 + } + left_sample { + s: 106.89315693161915 + width: 1.7485371314175093 + } + left_sample { + s: 107.09212354744621 + width: 1.7485433314894441 + } + left_sample { + s: 107.29109016324213 + width: 1.7485495313875883 + } + left_sample { + s: 107.49005677901003 + width: 1.7485557311147018 + } + left_sample { + s: 107.68902339475305 + width: 1.7485619306739011 + } + left_sample { + s: 107.88799001047445 + width: 1.7485681300682436 + } + left_sample { + s: 108.0869566261773 + width: 1.7485743293003961 + } + left_sample { + s: 108.28592324186454 + width: 1.7485805283731009 + } + left_sample { + s: 108.4848898575396 + width: 1.7485867272896181 + } + left_sample { + s: 108.68385647320567 + width: 1.7485929260531716 + } + left_sample { + s: 108.88282308886565 + width: 1.7485991246661912 + } + left_sample { + s: 109.08178970452279 + width: 1.7486053231316177 + } + left_sample { + s: 109.28075632018046 + width: 1.7486115214527045 + } + left_sample { + s: 109.47972293584154 + width: 1.7486177196325037 + } + left_sample { + s: 109.67868955150917 + width: 1.7486239176732337 + } + left_sample { + s: 109.87765616718666 + width: 1.7486301155837869 + } + left_sample { + s: 110.07662278287708 + width: 1.748636313412 + } + left_sample { + s: 110.27558939858304 + width: 1.7486425112625437 + } + left_sample { + s: 110.47455601430464 + width: 1.7486487091620311 + } + left_sample { + s: 110.67352263004081 + width: 1.7486549071098916 + } + left_sample { + s: 110.8724892457908 + width: 1.7486611051050955 + } + left_sample { + s: 111.07145586155362 + width: 1.7486673031468567 + } + left_sample { + s: 111.27042247732872 + width: 1.7486735012344075 + } + left_sample { + s: 111.4693890931151 + width: 1.7486796993671463 + } + left_sample { + s: 111.66835570891185 + width: 1.7486858975441604 + } + left_sample { + s: 111.86732232471822 + width: 1.748692095764516 + } + left_sample { + s: 112.06628894053325 + width: 1.7486982940273628 + } + left_sample { + s: 112.26525555635617 + width: 1.7487044923323105 + } + left_sample { + s: 112.46422217218631 + width: 1.7487106906785856 + } + left_sample { + s: 112.66318878802244 + width: 1.7487168890647076 + } + left_sample { + s: 112.86215540386415 + width: 1.7487230874907929 + } + left_sample { + s: 113.06112201971017 + width: 1.7487292859553065 + } + left_sample { + s: 113.26008863556 + width: 1.7487354844579315 + } + left_sample { + s: 113.45905525141258 + width: 1.74874168299781 + } + left_sample { + s: 113.65802186726718 + width: 1.7487478815738093 + } + left_sample { + s: 113.85698848312288 + width: 1.7487540801855666 + } + left_sample { + s: 114.05595509897887 + width: 1.7487602788319607 + } + left_sample { + s: 114.25492171483438 + width: 1.7487664775125538 + } + left_sample { + s: 114.45388833068846 + width: 1.7487726762260547 + } + left_sample { + s: 114.65285494654036 + width: 1.7487788749724502 + } + left_sample { + s: 114.85182156238906 + width: 1.7487850737466721 + } + left_sample { + s: 115.05078817823399 + width: 1.748791272528686 + } + left_sample { + s: 115.24975479407476 + width: 1.7487974712994494 + } + left_sample { + s: 115.4487214099112 + width: 1.7488036700578933 + } + left_sample { + s: 115.64768802574412 + width: 1.7488098688052078 + } + left_sample { + s: 115.8466546415732 + width: 1.7488160675406164 + } + left_sample { + s: 116.04562125739919 + width: 1.748822266265 + } + left_sample { + s: 116.2445878732219 + width: 1.7488284649785348 + } + left_sample { + s: 116.44355448904177 + width: 1.7488346636811523 + } + left_sample { + s: 116.64252110485896 + width: 1.7488408623734435 + } + left_sample { + s: 116.84148772067356 + width: 1.7488470610545475 + } + left_sample { + s: 117.04045433648618 + width: 1.7488532597259081 + } + left_sample { + s: 117.23942095229661 + width: 1.7488594583874917 + } + left_sample { + s: 117.43838756810543 + width: 1.7488656570392527 + } + left_sample { + s: 117.63735418391263 + width: 1.7488718556812273 + } + left_sample { + s: 117.83632079971851 + width: 1.7488780543141762 + } + left_sample { + s: 118.03528741552323 + width: 1.7488842529376882 + } + left_sample { + s: 118.23425403132725 + width: 1.7488904515525219 + } + left_sample { + s: 118.43322064713053 + width: 1.7488966501587031 + } + left_sample { + s: 118.63218726293347 + width: 1.7489028487562306 + } + left_sample { + s: 118.83115387873617 + width: 1.7489090473456819 + } + left_sample { + s: 119.03012049453892 + width: 1.7489152459270085 + } + left_sample { + s: 119.22908711034189 + width: 1.7489214445002976 + } + left_sample { + s: 119.42805372614545 + width: 1.7489276430662717 + } + left_sample { + s: 119.62702034194962 + width: 1.7489338416242468 + } + left_sample { + s: 119.82598695775499 + width: 1.7489400401774573 + } + left_sample { + s: 120.02495357356129 + width: 1.7489462387318035 + } + left_sample { + s: 120.22392018936868 + width: 1.7489524372889385 + } + left_sample { + s: 120.42288680517723 + width: 1.7489586358490778 + } + left_sample { + s: 120.62185342098651 + width: 1.7489648344116313 + } + left_sample { + s: 120.82082003679695 + width: 1.7489710329773607 + } + left_sample { + s: 121.01978665260823 + width: 1.7489772315454248 + } + left_sample { + s: 121.21875326842026 + width: 1.7489834301160918 + } + left_sample { + s: 121.41771988423316 + width: 1.7489896286897044 + } + left_sample { + s: 121.61668650004654 + width: 1.7489958272656481 + } + left_sample { + s: 121.81565311586067 + width: 1.7490020258438579 + } + left_sample { + s: 122.01461973167535 + width: 1.749008224424863 + } + left_sample { + s: 122.21358634749059 + width: 1.7490144230080509 + } + left_sample { + s: 122.41255296330611 + width: 1.7490206215933628 + } + left_sample { + s: 122.61151957912209 + width: 1.7490268201811385 + } + left_sample { + s: 122.81048619493843 + width: 1.7490330187711336 + } + left_sample { + s: 123.00945281075498 + width: 1.7490392173631177 + } + left_sample { + s: 123.20841942657179 + width: 1.7490454159572992 + } + left_sample { + s: 123.40738604238858 + width: 1.7490516145533854 + } + left_sample { + s: 123.60635265820554 + width: 1.7490578131515333 + } + left_sample { + s: 123.80531927402251 + width: 1.7490640117513685 + } + left_sample { + s: 124.00428588983966 + width: 1.7490702103532874 + } + left_sample { + s: 124.20325250565648 + width: 1.7490764089567752 + } + left_sample { + s: 124.40221912147318 + width: 1.7490826075621377 + } + left_sample { + s: 124.60118573728963 + width: 1.7490888061696004 + } + left_sample { + s: 124.80015235310563 + width: 1.7490950047764684 + } + left_sample { + s: 124.99911896892162 + width: 1.7491012033832927 + } + left_sample { + s: 125.19808558473716 + width: 1.7491074019891832 + } + left_sample { + s: 125.39705220055264 + width: 1.749113600594743 + } + left_sample { + s: 125.59601881636749 + width: 1.749119799199004 + } + left_sample { + s: 125.79498543218237 + width: 1.7491259978029261 + } + left_sample { + s: 125.993952047997 + width: 1.7491321964062454 + } + left_sample { + s: 126.19291866381134 + width: 1.7491383950090813 + } + left_sample { + s: 126.39188527962558 + width: 1.7491445936112449 + } + left_sample { + s: 126.59085189543963 + width: 1.749150792212701 + } + left_sample { + s: 126.78981851125349 + width: 1.7491569908134856 + } + left_sample { + s: 126.98878512706722 + width: 1.7491631894141144 + } + left_sample { + s: 127.18775174288078 + width: 1.7491693880137851 + } + left_sample { + s: 127.38671835869428 + width: 1.7491755866132894 + } + left_sample { + s: 127.5856849745076 + width: 1.7491817852119158 + } + left_sample { + s: 127.78465159032095 + width: 1.7491879838102813 + } + left_sample { + s: 127.98361820613424 + width: 1.7491941824082349 + } + left_sample { + s: 128.18258482194739 + width: 1.7492003810053738 + } + left_sample { + s: 128.38155143776069 + width: 1.7492065796026379 + } + left_sample { + s: 128.58051805357371 + width: 1.7492127781988953 + } + left_sample { + s: 128.77948466938693 + width: 1.7492189767950195 + } + left_sample { + s: 128.97845128520012 + width: 1.7492251753907524 + } + left_sample { + s: 129.17741790101337 + width: 1.7492313739858572 + } + left_sample { + s: 129.37638451682665 + width: 1.7492375725807816 + } + left_sample { + s: 129.57535113264009 + width: 1.7492437711755902 + } + left_sample { + s: 129.77431774845348 + width: 1.7492499697702146 + } + left_sample { + s: 129.97328436426693 + width: 1.7492561683652978 + } + left_sample { + s: 130.17225098008049 + width: 1.749262366960425 + } + left_sample { + s: 130.37121759589419 + width: 1.7492685655557236 + } + left_sample { + s: 130.57018421170793 + width: 1.7492747641511248 + } + left_sample { + s: 130.76915082752168 + width: 1.749280962746562 + } + left_sample { + s: 130.96811744333559 + width: 1.7492871613424645 + } + left_sample { + s: 131.16708405914932 + width: 1.7492933599380711 + } + left_sample { + s: 131.36605067496342 + width: 1.7492995585342346 + } + left_sample { + s: 131.56501729077729 + width: 1.7493057571304083 + } + left_sample { + s: 131.76398390659125 + width: 1.7493119557265639 + } + left_sample { + s: 131.96295052240535 + width: 1.7493181543229639 + } + left_sample { + s: 132.16191713821954 + width: 1.7493243529195805 + } + left_sample { + s: 132.36088375403355 + width: 1.7493305515160664 + } + left_sample { + s: 132.55985036984774 + width: 1.7493367501129553 + } + left_sample { + s: 132.75881698566187 + width: 1.7493429487095615 + } + left_sample { + s: 132.95778360147605 + width: 1.7493491473064582 + } + left_sample { + s: 133.15675021729035 + width: 1.7493553459037283 + } + left_sample { + s: 133.35571683310448 + width: 1.7493615445007518 + } + left_sample { + s: 133.55468344891858 + width: 1.749367743097918 + } + left_sample { + s: 133.75365006473282 + width: 1.7493739416952245 + } + left_sample { + s: 133.95261668054695 + width: 1.7493801402924032 + } + left_sample { + s: 134.1515832963612 + width: 1.749386338890252 + } + left_sample { + s: 134.35054991217524 + width: 1.7493925374876778 + } + left_sample { + s: 134.54951652798937 + width: 1.7493987360851659 + } + left_sample { + s: 134.74848314380353 + width: 1.7494049346828235 + } + left_sample { + s: 134.94744975961754 + width: 1.7494111332800961 + } + left_sample { + s: 135.14641637543178 + width: 1.7494173318777115 + } + left_sample { + s: 135.34538299124577 + width: 1.7494235304750696 + } + left_sample { + s: 135.54434960705976 + width: 1.7494297290723766 + } + left_sample { + s: 135.74331622287383 + width: 1.7494359276696665 + } + left_sample { + s: 135.94228283868782 + width: 1.7494421262670539 + } + left_sample { + s: 136.1412494545018 + width: 1.7494483248641413 + } + left_sample { + s: 136.34021607031582 + width: 1.7494545234615109 + } + left_sample { + s: 136.53918268612975 + width: 1.7494607220586937 + } + left_sample { + s: 136.73814930194374 + width: 1.7494669206558218 + } + left_sample { + s: 136.93711591775764 + width: 1.7494731192529225 + } + left_sample { + s: 137.13608253357157 + width: 1.7494793178500361 + } + left_sample { + s: 137.33504914938555 + width: 1.7494855164472232 + } + left_sample { + s: 137.53401576519943 + width: 1.7494917150443843 + } + left_sample { + s: 137.73298238101341 + width: 1.7494979136413369 + } + left_sample { + s: 137.93194899682729 + width: 1.7495041122383783 + } + left_sample { + s: 138.13091561264122 + width: 1.7495103108353454 + } + left_sample { + s: 138.32988222845515 + width: 1.749516509432413 + } + left_sample { + s: 138.52884884426913 + width: 1.7495227080293516 + } + left_sample { + s: 138.727815460083 + width: 1.7495289066263295 + } + left_sample { + s: 138.92678207589688 + width: 1.7495351052233334 + } + left_sample { + s: 139.12574869171075 + width: 1.749541303820249 + } + left_sample { + s: 139.32471530752474 + width: 1.749547502417061 + } + left_sample { + s: 139.52368192333878 + width: 1.749553701014001 + } + left_sample { + s: 139.72264853915271 + width: 1.7495598996111434 + } + left_sample { + s: 139.92161515496664 + width: 1.7495660982080645 + } + left_sample { + s: 140.12058177078052 + width: 1.7495722968048815 + } + left_sample { + s: 140.31954838659451 + width: 1.7495784954017948 + } + left_sample { + s: 140.51851500240841 + width: 1.7495846939987247 + } + left_sample { + s: 140.71748161822242 + width: 1.7495908925959258 + } + left_sample { + s: 140.91644823403641 + width: 1.7495970911927932 + } + left_sample { + s: 141.11541484985034 + width: 1.7496032897897846 + } + left_sample { + s: 141.31438146566435 + width: 1.7496094883867719 + } + left_sample { + s: 141.51334808147831 + width: 1.7496156869839179 + } + left_sample { + s: 141.71231469729216 + width: 1.749621885580757 + } + left_sample { + s: 141.91128131310617 + width: 1.749628084177798 + } + left_sample { + s: 142.11024792892022 + width: 1.7496342827749989 + } + left_sample { + s: 142.30921454473417 + width: 1.7496404813719213 + } + left_sample { + s: 142.50818116054825 + width: 1.7496466799688901 + } + left_sample { + s: 142.70714777636223 + width: 1.7496528785660572 + } + left_sample { + s: 142.90611439217625 + width: 1.7496590771629965 + } + left_sample { + s: 143.10508100799021 + width: 1.749665275760103 + } + left_sample { + s: 143.30404762380422 + width: 1.7496714743571449 + } + left_sample { + s: 143.50301423961815 + width: 1.7496776729540975 + } + left_sample { + s: 143.70198085543225 + width: 1.7496838715512346 + } + left_sample { + s: 143.90094747124616 + width: 1.7496900701481948 + } + left_sample { + s: 144.09991408706026 + width: 1.7496962687453761 + } + left_sample { + s: 144.29888070287416 + width: 1.7497024673424511 + } + left_sample { + s: 144.49784731868809 + width: 1.7497086659395027 + } + left_sample { + s: 144.69681393450222 + width: 1.7497148645365919 + } + left_sample { + s: 144.89578055031623 + width: 1.7497210631337217 + } + left_sample { + s: 145.09474716613019 + width: 1.7497272617306927 + } + left_sample { + s: 145.29371378194418 + width: 1.7497334603277364 + } + left_sample { + s: 145.49268039775822 + width: 1.7497396589248408 + } + left_sample { + s: 145.69164701357218 + width: 1.7497458575218459 + } + left_sample { + s: 145.89061362938617 + width: 1.7497520561189555 + } + left_sample { + s: 146.08958024520015 + width: 1.7497582547160548 + } + left_sample { + s: 146.2885468610142 + width: 1.7497644533131698 + } + left_sample { + s: 146.48751347682824 + width: 1.7497706519102738 + } + left_sample { + s: 146.6864800926422 + width: 1.7497768505072893 + } + left_sample { + s: 146.88544670845624 + width: 1.7497830491044455 + } + left_sample { + s: 147.08441332427023 + width: 1.7497892477015164 + } + left_sample { + s: 147.28337994008416 + width: 1.7497954462985248 + } + left_sample { + s: 147.4823465558982 + width: 1.7498016448955513 + } + left_sample { + s: 147.68131317171219 + width: 1.7498078434926596 + } + left_sample { + s: 147.88027978752615 + width: 1.749814042089693 + } + left_sample { + s: 148.07924640334028 + width: 1.7498202406870356 + } + left_sample { + s: 148.27821301915421 + width: 1.7498264392838938 + } + left_sample { + s: 148.47717963496819 + width: 1.74983263788095 + } + left_sample { + s: 148.67614625078212 + width: 1.7498388364780038 + } + left_sample { + s: 148.87511286659617 + width: 1.7498450350751484 + } + left_sample { + s: 149.07407948241027 + width: 1.7498512336721996 + } + left_sample { + s: 149.2730460982242 + width: 1.7498574322691649 + } + left_sample { + s: 149.47201271403819 + width: 1.749863630866193 + } + left_sample { + s: 149.67097932985217 + width: 1.7498698294633503 + } + left_sample { + s: 149.86994594566625 + width: 1.7498760280603842 + } + left_sample { + s: 150.06891256148012 + width: 1.7498822266572631 + } + left_sample { + s: 150.26787917729413 + width: 1.7498884252543485 + } + left_sample { + s: 150.46684579310806 + width: 1.7498946238514341 + } + left_sample { + s: 150.66581240892205 + width: 1.7499008224485113 + } + left_sample { + s: 150.86477902473598 + width: 1.7499070210453955 + } + left_sample { + s: 151.06374564054997 + width: 1.7499132196423814 + } + left_sample { + s: 151.26271225636395 + width: 1.749919418239565 + } + left_sample { + s: 151.46167887217788 + width: 1.7499256168364306 + } + left_sample { + s: 151.66064548799187 + width: 1.7499318154334782 + } + left_sample { + s: 151.85961210380577 + width: 1.7499380140303975 + } + left_sample { + s: 152.0585787196197 + width: 1.7499442126274645 + } + left_sample { + s: 152.25754533543369 + width: 1.7499504112245647 + } + left_sample { + s: 152.45651195124751 + width: 1.7499566098214128 + } + left_sample { + s: 152.65547856706155 + width: 1.7499628084184666 + } + left_sample { + s: 152.85444518287542 + width: 1.7499690070153391 + } + left_sample { + s: 153.05341179868932 + width: 1.7499752056123097 + } + left_sample { + s: 153.25237841450328 + width: 1.7499814042091824 + } + left_sample { + s: 153.45134503031719 + width: 1.749987602806093 + } + left_sample { + s: 153.65031164613103 + width: 1.7499938014031609 + } + left_sample { + s: 153.87421245705966 + width: 1.7500000000000586 + } + right_sample { + s: 0 + width: 1.7499999999999967 + } + right_sample { + s: 0.20001136855364768 + width: 1.7499999999999127 + } + right_sample { + s: 0.40002273710671876 + width: 1.7499999999998856 + } + right_sample { + s: 0.60003410566029847 + width: 1.7499999999999409 + } + right_sample { + s: 0.80004547421347971 + width: 1.7500000000001348 + } + right_sample { + s: 1.0000568427671555 + width: 1.7499999999999962 + } + right_sample { + s: 1.2000682113204328 + width: 1.7499999999999951 + } + right_sample { + s: 1.4000795798740127 + width: 1.749999999999996 + } + right_sample { + s: 1.6000909484271939 + width: 1.7500000000000233 + } + right_sample { + s: 1.8001023169806494 + width: 1.7500000000000777 + } + right_sample { + s: 2.0001136855341328 + width: 1.75000000000005 + } + right_sample { + s: 2.2001250540875064 + width: 1.7500000000000775 + } + right_sample { + s: 2.4001364226407835 + width: 1.7500000000000218 + } + right_sample { + s: 2.600147791194253 + width: 1.7499999999999112 + } + right_sample { + s: 2.8001591597478326 + width: 1.7500000000000766 + } + right_sample { + s: 3.0001705283009996 + width: 1.7499999999999378 + } + right_sample { + s: 3.2001818968545792 + width: 1.7499999999999933 + } + right_sample { + s: 3.4001932654079527 + width: 1.7499999999999096 + } + right_sample { + s: 3.6002046339613263 + width: 1.7499999999998819 + } + right_sample { + s: 3.8002160025149059 + width: 1.7499999999999096 + } + right_sample { + s: 4.0002273710682656 + width: 1.7499999999999085 + } + right_sample { + s: 4.2002387396216534 + width: 1.7500000000000193 + } + right_sample { + s: 4.400250108175233 + width: 1.749999999999909 + } + right_sample { + s: 4.6002614767284822 + width: 1.7499999999999361 + } + right_sample { + s: 4.8002728452820618 + width: 1.7500000000000184 + } + right_sample { + s: 5.0002842138355312 + width: 1.7499999999999631 + } + right_sample { + s: 5.2002955823890007 + width: 1.7499999999999636 + } + right_sample { + s: 5.40030695094225 + width: 1.7499999999999627 + } + right_sample { + s: 5.6003183194958295 + width: 1.7500000000000735 + } + right_sample { + s: 5.8003296880491888 + width: 1.7500000000000178 + } + right_sample { + s: 6.0003410566026583 + width: 1.7500000000001283 + } + right_sample { + s: 6.2003524251559359 + width: 1.7500000000000726 + } + right_sample { + s: 6.4003637937095013 + width: 1.7500000000000455 + } + right_sample { + s: 6.6003751622628748 + width: 1.7500000000001272 + } + right_sample { + s: 6.8003865308163585 + width: 1.7500000000001 + } + right_sample { + s: 7.0003978993698137 + width: 1.7499999999999616 + } + right_sample { + s: 7.2004092679233933 + width: 1.7500000000000435 + } + right_sample { + s: 7.4004206364766709 + width: 1.7500000000000988 + } + right_sample { + s: 7.6004320050301546 + width: 1.7500000000000435 + } + right_sample { + s: 7.8004433735835281 + width: 1.7500000000000426 + } + right_sample { + s: 8.0004547421369 + width: 1.7499999999999323 + } + right_sample { + s: 8.200466110690467 + width: 1.7499999999999316 + } + right_sample { + s: 8.40047747924395 + width: 1.7500000000000147 + } + right_sample { + s: 8.6004888477974326 + width: 1.7499999999998481 + } + right_sample { + s: 8.8005002163506 + width: 1.74999999999993 + } + right_sample { + s: 9.00051158490418 + width: 1.7500000000000142 + } + right_sample { + s: 9.20052295345754 + width: 1.7499999999999307 + } + right_sample { + s: 9.4005343220111328 + width: 1.7499999999999578 + } + right_sample { + s: 9.600545690564493 + width: 1.7499999999999851 + } + right_sample { + s: 9.8005570591178657 + width: 1.7499999999999576 + } + right_sample { + s: 10.000568427671226 + width: 1.7499999999999851 + } + right_sample { + s: 10.200579796224586 + width: 1.7500000000000124 + } + right_sample { + s: 10.400591164778028 + width: 1.7500000000000127 + } + right_sample { + s: 10.6006025333314 + width: 1.7500000000001503 + } + right_sample { + s: 10.800613901884663 + width: 1.750000000000095 + } + right_sample { + s: 11.000625270438244 + width: 1.7500000000000677 + } + right_sample { + s: 11.200636638991575 + width: 1.75000000000015 + } + right_sample { + s: 11.400648007544977 + width: 1.7500000000002049 + } + right_sample { + s: 11.600659376098349 + width: 1.7500000000001499 + } + right_sample { + s: 11.800670744651915 + width: 1.7500000000001776 + } + right_sample { + s: 12.000682113205496 + width: 1.7500000000002052 + } + right_sample { + s: 12.200693481758869 + width: 1.750000000000149 + } + right_sample { + s: 12.400704850312145 + width: 1.750000000000093 + } + right_sample { + s: 12.600716218865628 + width: 1.7500000000001485 + } + right_sample { + s: 12.800727587419111 + width: 1.7500000000000653 + } + right_sample { + s: 13.000738955972622 + width: 1.7500000000000369 + } + right_sample { + s: 13.200750324525995 + width: 1.7499999999998987 + } + right_sample { + s: 13.400761693079367 + width: 1.7499999999999256 + } + right_sample { + s: 13.60077306163285 + width: 1.750000000000008 + } + right_sample { + s: 13.800784430186333 + width: 1.7499999999999531 + } + right_sample { + s: 14.000795798739789 + width: 1.7499999999998979 + } + right_sample { + s: 14.200807167293176 + width: 1.7499999999999241 + } + right_sample { + s: 14.400818535846646 + width: 1.74999999999998 + } + right_sample { + s: 14.600829904400006 + width: 1.7499999999998419 + } + right_sample { + s: 14.800841272953477 + width: 1.7499999999998408 + } + right_sample { + s: 15.000852641506849 + width: 1.7499999999999225 + } + right_sample { + s: 15.200864010060222 + width: 1.7499999999998952 + } + right_sample { + s: 15.400875378613774 + width: 1.7499999999999238 + } + right_sample { + s: 15.600886747167024 + width: 1.7499999999999223 + } + right_sample { + s: 15.800898115720521 + width: 1.7499999999999225 + } + right_sample { + s: 16.000909484274086 + width: 1.7499999999999507 + } + right_sample { + s: 16.200920852827444 + width: 1.7499999999999496 + } + right_sample { + s: 16.400932221380913 + width: 1.7500000000000051 + } + right_sample { + s: 16.600943589934285 + width: 1.7499999999999494 + } + right_sample { + s: 16.800954958487658 + width: 1.7499999999999216 + } + right_sample { + s: 17.000966327040921 + width: 1.7499999999998659 + } + right_sample { + s: 17.200977695594418 + width: 1.7499999999998663 + } + right_sample { + s: 17.400989064147982 + width: 1.7499999999998943 + } + right_sample { + s: 17.601000432701245 + width: 1.7499999999998384 + } + right_sample { + s: 17.801011801254742 + width: 1.7499999999997826 + } + right_sample { + s: 18.001023169808114 + width: 1.7499999999997002 + } + right_sample { + s: 18.2010345383615 + width: 1.7499999999997267 + } + right_sample { + s: 18.401045906915066 + width: 1.7499999999998102 + } + right_sample { + s: 18.601057275468342 + width: 1.7499999999996709 + } + right_sample { + s: 18.801068644021715 + width: 1.749999999999726 + } + right_sample { + s: 19.001080012574977 + width: 1.7499999999998632 + } + right_sample { + s: 19.201091381128585 + width: 1.749999999999754 + } + right_sample { + s: 19.401102749681943 + width: 1.7499999999997806 + } + right_sample { + s: 19.601114118235522 + width: 1.7499999999998086 + } + right_sample { + s: 19.801125486788784 + width: 1.7499999999999183 + } + right_sample { + s: 20.001136855342267 + width: 1.7499999999999181 + } + right_sample { + s: 20.201148223895832 + width: 1.7499999999999463 + } + right_sample { + s: 20.401159592449094 + width: 1.7500000000000557 + } + right_sample { + s: 20.601170961002481 + width: 1.7499999999998899 + } + right_sample { + s: 20.801182329555949 + width: 1.7499999999999167 + } + right_sample { + s: 21.001193698109432 + width: 1.7500000000000266 + } + right_sample { + s: 21.201205066662887 + width: 1.7500000000000007 + } + right_sample { + s: 21.401216435216163 + width: 1.7500000000000266 + } + right_sample { + s: 21.601227803769618 + width: 1.7499999999999447 + } + right_sample { + s: 21.801239172323005 + width: 1.7499999999999984 + } + right_sample { + s: 22.001250540876377 + width: 1.7499999999999714 + } + right_sample { + s: 22.20126190942975 + width: 1.7499999999999158 + } + right_sample { + s: 22.401273277983314 + width: 1.749999999999917 + } + right_sample { + s: 22.6012846465367 + width: 1.7499999999999147 + } + right_sample { + s: 22.80129601509006 + width: 1.7499999999999429 + } + right_sample { + s: 23.001307383643447 + width: 1.7499999999998044 + } + right_sample { + s: 23.201318752197025 + width: 1.7499999999998879 + } + right_sample { + s: 23.401330120750192 + width: 1.7499999999999409 + } + right_sample { + s: 23.601341489303852 + width: 1.7499999999999163 + } + right_sample { + s: 23.801352857857033 + width: 1.7499999999999127 + } + right_sample { + s: 24.001364226410516 + width: 1.7499999999999132 + } + right_sample { + s: 24.201375594964095 + width: 1.7499999999999969 + } + right_sample { + s: 24.401386963517467 + width: 1.7499999999999136 + } + right_sample { + s: 24.60139833207084 + width: 1.7499999999999949 + } + right_sample { + s: 24.801409700624308 + width: 1.7499999999999956 + } + right_sample { + s: 25.001421069177777 + width: 1.7499999999998854 + } + right_sample { + s: 25.201432437731054 + width: 1.7499999999999654 + } + right_sample { + s: 25.401443806284728 + width: 1.7499999999999951 + } + right_sample { + s: 25.601455174837991 + width: 1.7499999999999385 + } + right_sample { + s: 25.80146654339168 + width: 1.7500000000000491 + } + right_sample { + s: 26.001477911944832 + width: 1.7500000000000477 + } + right_sample { + s: 26.201489280498425 + width: 1.7499999999999667 + } + right_sample { + s: 26.401500649051755 + width: 1.749999999999966 + } + right_sample { + s: 26.601512017605348 + width: 1.7500000000000207 + } + right_sample { + s: 26.801523386158802 + width: 1.7500000000000488 + } + right_sample { + s: 27.001534754712271 + width: 1.7500000000001037 + } + right_sample { + s: 27.201546123265643 + width: 1.7499999999999378 + } + right_sample { + s: 27.401557491818988 + width: 1.750000000000103 + } + right_sample { + s: 27.601568860372566 + width: 1.7500000000001037 + } + right_sample { + s: 27.801580228925953 + width: 1.7499999999999378 + } + right_sample { + s: 28.001591597479312 + width: 1.7500000000000193 + } + right_sample { + s: 28.201602966032862 + width: 1.7500000000000764 + } + right_sample { + s: 28.401614334586153 + width: 1.7500000000000466 + } + right_sample { + s: 28.601625703139607 + width: 1.7500000000001581 + } + right_sample { + s: 28.80163707169298 + width: 1.7500000000000751 + } + right_sample { + s: 29.001648440246353 + width: 1.7500000000000469 + } + right_sample { + s: 29.201659808799725 + width: 1.7500000000001845 + } + right_sample { + s: 29.401671177353098 + width: 1.7500000000002116 + } + right_sample { + s: 29.601682545906566 + width: 1.7500000000002129 + } + right_sample { + s: 29.801693914460063 + width: 1.7500000000001847 + } + right_sample { + s: 30.00170528301323 + width: 1.7500000000001832 + } + right_sample { + s: 30.201716651566795 + width: 1.7500000000001301 + } + right_sample { + s: 30.401728020120387 + width: 1.7500000000001839 + } + right_sample { + s: 30.601739388673746 + width: 1.7500000000002938 + } + right_sample { + s: 30.801750757227243 + width: 1.7500000000001565 + } + right_sample { + s: 31.001762125780711 + width: 1.7500000000001834 + } + right_sample { + s: 31.201773494333988 + width: 1.7500000000001272 + } + right_sample { + s: 31.401784862887457 + width: 1.7500000000002098 + } + right_sample { + s: 31.601796231440844 + width: 1.7500000000000717 + } + right_sample { + s: 31.801807599994312 + width: 1.7500000000000164 + } + right_sample { + s: 32.001818968547795 + width: 1.7500000000000426 + } + right_sample { + s: 32.201830337101171 + width: 1.7500000000001243 + } + right_sample { + s: 32.401841705654547 + width: 1.7500000000000977 + } + right_sample { + s: 32.601853074207924 + width: 1.7500000000000422 + } + right_sample { + s: 32.801864442761286 + width: 1.7500000000000695 + } + right_sample { + s: 33.001875811314854 + width: 1.7499999999999878 + } + right_sample { + s: 33.20188717986813 + width: 1.75000000000004 + } + right_sample { + s: 33.401898548421478 + width: 1.7500000000001237 + } + right_sample { + s: 33.601909916974854 + width: 1.7499999999999316 + } + right_sample { + s: 33.801921285528216 + width: 1.7499999999999571 + } + right_sample { + s: 34.001932654081592 + width: 1.7500000000000386 + } + right_sample { + s: 34.201944022635061 + width: 1.7500000000000129 + } + right_sample { + s: 34.401955391188338 + width: 1.7499999999999558 + } + right_sample { + s: 34.601966759741806 + width: 1.749999999999984 + } + right_sample { + s: 34.801978128295183 + width: 1.7499999999999283 + } + right_sample { + s: 35.001989496848751 + width: 1.7500000000000389 + } + right_sample { + s: 35.202000865402141 + width: 1.7500000000000371 + } + right_sample { + s: 35.402012233955531 + width: 1.7499999999999822 + } + right_sample { + s: 35.602023602509014 + width: 1.7500000000000375 + } + right_sample { + s: 35.802034971062469 + width: 1.7500000000000386 + } + right_sample { + s: 36.002046339616051 + width: 1.7500000000001756 + } + right_sample { + s: 36.20205770816947 + width: 1.7500000000001736 + } + right_sample { + s: 36.402069076722832 + width: 1.7500000000001485 + } + right_sample { + s: 36.602080445276442 + width: 1.7500000000001201 + } + right_sample { + s: 36.802091813829819 + width: 1.7500000000001195 + } + right_sample { + s: 37.002103182383209 + width: 1.7500000000000915 + } + right_sample { + s: 37.202114550936557 + width: 1.7500000000000924 + } + right_sample { + s: 37.402125919490054 + width: 1.7500000000002283 + } + right_sample { + s: 37.602137288043636 + width: 1.7500000000000937 + } + right_sample { + s: 37.802148656596913 + width: 1.7500000000000082 + } + right_sample { + s: 38.002160025150289 + width: 1.7500000000000075 + } + right_sample { + s: 38.202171393703743 + width: 1.7500000000000364 + } + right_sample { + s: 38.40218276225702 + width: 1.7500000000000615 + } + right_sample { + s: 38.602194130810382 + width: 1.7499999999999534 + } + right_sample { + s: 38.802205499363758 + width: 1.7499999999999787 + } + right_sample { + s: 39.002216867917355 + width: 1.7500000000000626 + } + right_sample { + s: 39.202228236470809 + width: 1.7499999999999816 + } + right_sample { + s: 39.402239605024086 + width: 1.749999999999923 + } + right_sample { + s: 39.602250973577462 + width: 1.7499999999998959 + } + right_sample { + s: 39.802262342130838 + width: 1.749999999999923 + } + right_sample { + s: 40.0022737106842 + width: 1.749999999999923 + } + right_sample { + s: 40.202285079237562 + width: 1.7499999999998681 + } + right_sample { + s: 40.402296447791144 + width: 1.749999999999923 + } + right_sample { + s: 40.602307816344712 + width: 1.7499999999999514 + } + right_sample { + s: 40.802319184897989 + width: 1.749999999999948 + } + right_sample { + s: 41.002330553451237 + width: 1.7499999999999487 + } + right_sample { + s: 41.20234192200482 + width: 1.7499999999999503 + } + right_sample { + s: 41.402353290558288 + width: 1.7500000000000038 + } + right_sample { + s: 41.602364659111842 + width: 1.7500000000000333 + } + right_sample { + s: 41.802376027665311 + width: 1.7500000000000591 + } + right_sample { + s: 42.0023873962187 + width: 1.7500000000000568 + } + right_sample { + s: 42.202398764772283 + width: 1.7500000000000315 + } + right_sample { + s: 42.402410133325645 + width: 1.7500000000001124 + } + right_sample { + s: 42.602421501879022 + width: 1.7500000000000575 + } + right_sample { + s: 42.80243287043259 + width: 1.7500000000001681 + } + right_sample { + s: 43.002444238986172 + width: 1.7500000000001137 + } + right_sample { + s: 43.202455607539534 + width: 1.7500000000001397 + } + right_sample { + s: 43.402466976093 + width: 1.7500000000002218 + } + right_sample { + s: 43.602478344646265 + width: 1.7500000000001663 + } + right_sample { + s: 43.802489713199861 + width: 1.7500000000001397 + } + right_sample { + s: 44.002501081753444 + width: 1.7500000000002212 + } + right_sample { + s: 44.2025124503066 + width: 1.7500000000002196 + } + right_sample { + s: 44.402523818860082 + width: 1.7500000000001112 + } + right_sample { + s: 44.602535187413444 + width: 1.7500000000002194 + } + right_sample { + s: 44.802546555966913 + width: 1.7500000000002207 + } + right_sample { + s: 45.002557924520382 + width: 1.7500000000001656 + } + right_sample { + s: 45.202569293073658 + width: 1.7500000000001354 + } + right_sample { + s: 45.402580661627141 + width: 1.7500000000000817 + } + right_sample { + s: 45.602592030180517 + width: 1.7500000000001352 + } + right_sample { + s: 45.802603398734014 + width: 1.7500000000001363 + } + right_sample { + s: 46.002614767287376 + width: 1.7500000000000822 + } + right_sample { + s: 46.202626135840767 + width: 1.7500000000001072 + } + right_sample { + s: 46.405275008788429 + width: 1.7499999999999969 + } + right_sample { + s: 46.580037921587085 + width: 1.7156615267790134 + } + right_sample { + s: 46.754800834385684 + width: 1.6986974716873728 + } + right_sample { + s: 46.929563747184112 + width: 1.6987619053676635 + } + right_sample { + s: 47.104326659982767 + width: 1.7031022242685836 + } + right_sample { + s: 47.279089572781288 + width: 1.7074425431706817 + } + right_sample { + s: 47.453852485579887 + width: 1.7117828620724331 + } + right_sample { + s: 47.6286153983785 + width: 1.7161231809743946 + } + right_sample { + s: 47.803378311176765 + width: 1.7204634998756454 + } + right_sample { + s: 47.978141223975484 + width: 1.72480381877709 + } + right_sample { + s: 48.152904136773955 + width: 1.7291441376783752 + } + right_sample { + s: 48.327667049572725 + width: 1.7334844565798568 + } + right_sample { + s: 48.502429962371316 + width: 1.7378247754817031 + } + right_sample { + s: 48.677192875169595 + width: 1.7421650943828741 + } + right_sample { + s: 48.89446870767695 + width: 1.7483508657443871 + } + right_sample { + s: 49.064691439921788 + width: 1.7156379906187833 + } + right_sample { + s: 49.234914172166171 + width: 1.6977275950080777 + } + right_sample { + s: 49.405136904410725 + width: 1.6966000786573563 + } + right_sample { + s: 49.575359636655541 + width: 1.7016563544295906 + } + right_sample { + s: 49.745582368900152 + width: 1.7067126302022859 + } + right_sample { + s: 49.915805101144933 + width: 1.7117689059743175 + } + right_sample { + s: 50.086027833389466 + width: 1.7168251817467506 + } + right_sample { + s: 50.256250565634048 + width: 1.7218814575181898 + } + right_sample { + s: 50.426473297878772 + width: 1.7269377332904112 + } + right_sample { + s: 50.596696030123347 + width: 1.7319940090630959 + } + right_sample { + s: 50.766918762367951 + width: 1.737050284834931 + } + right_sample { + s: 50.937141494612746 + width: 1.7421065606081232 + } + right_sample { + s: 51.1192028141192 + width: 1.7477615499732737 + } + right_sample { + s: 51.281061563556669 + width: 1.6988926103085866 + } + right_sample { + s: 51.442920312994346 + width: 1.6620375183074247 + } + right_sample { + s: 51.604779062431859 + width: 1.6403956329799205 + } + right_sample { + s: 51.766637811869323 + width: 1.6345713391212757 + } + right_sample { + s: 51.928496561306851 + width: 1.6426483081548331 + } + right_sample { + s: 52.090355310744414 + width: 1.6526245064266427 + } + right_sample { + s: 52.252214060181828 + width: 1.6626007046999218 + } + right_sample { + s: 52.414072809619505 + width: 1.672576902972593 + } + right_sample { + s: 52.575931559056876 + width: 1.6825531012454573 + } + right_sample { + s: 52.7377903084946 + width: 1.6925292995184407 + } + right_sample { + s: 52.899649057932123 + width: 1.7025054977908451 + } + right_sample { + s: 53.061507807369807 + width: 1.7124816960633686 + } + right_sample { + s: 53.223366556807264 + width: 1.7224578943355291 + } + right_sample { + s: 53.385225306244692 + width: 1.7324340926081396 + } + right_sample { + s: 53.535661210641251 + width: 1.7412698274768559 + } + right_sample { + s: 53.689999802215809 + width: 1.7182119056021121 + } + right_sample { + s: 53.844338393790366 + width: 1.7001797211774521 + } + right_sample { + s: 53.998676985364973 + width: 1.6959150418002333 + } + right_sample { + s: 54.153015576939609 + width: 1.7042207122227377 + } + right_sample { + s: 54.307354168514195 + width: 1.7146013518046217 + } + right_sample { + s: 54.461692760088695 + width: 1.7249819913860889 + } + right_sample { + s: 54.665935780616486 + width: 1.7405456647484217 + } + right_sample { + s: 54.824380910618657 + width: 1.7068837525660823 + } + right_sample { + s: 54.982826040620893 + width: 1.6781102584991336 + } + right_sample { + s: 55.141271170623064 + width: 1.6637745151258956 + } + right_sample { + s: 55.299716300625292 + width: 1.6644659663473875 + } + right_sample { + s: 55.458161430627634 + width: 1.6741933595699252 + } + right_sample { + s: 55.616606560629869 + width: 1.6840035079164717 + } + right_sample { + s: 55.775051690631933 + width: 1.6938136562633266 + } + right_sample { + s: 55.933496820634218 + width: 1.7036238046097087 + } + right_sample { + s: 56.0919419506365 + width: 1.7134339529558162 + } + right_sample { + s: 56.250387080638674 + width: 1.7232441013021618 + } + right_sample { + s: 56.408832210640846 + width: 1.7330542496488626 + } + right_sample { + s: 56.553977533807334 + width: 1.7415587279817974 + } + right_sample { + s: 56.753223118960371 + width: 1.7168222066200696 + } + right_sample { + s: 56.952424168022134 + width: 1.7056246364373082 + } + right_sample { + s: 57.151584753684595 + width: 1.7085745023601029 + } + right_sample { + s: 57.35070873530254 + width: 1.7115455850023651 + } + right_sample { + s: 57.549799763669434 + width: 1.7143499184745583 + } + right_sample { + s: 57.748861285838053 + width: 1.7169925424607209 + } + right_sample { + s: 57.947896549981593 + width: 1.7194784850458384 + } + right_sample { + s: 58.146908610289984 + width: 1.7218127610217104 + } + right_sample { + s: 58.345900331902719 + width: 1.7240003702972044 + } + right_sample { + s: 58.544874395870735 + width: 1.7260462964127996 + } + right_sample { + s: 58.743833304148026 + width: 1.72795550515534 + } + right_sample { + s: 58.942779384607512 + width: 1.7297329432697646 + } + right_sample { + s: 59.141714796080507 + width: 1.7313835372674764 + } + right_sample { + s: 59.3406415334168 + width: 1.7329121923233921 + } + right_sample { + s: 59.539561432564724 + width: 1.7343237912625697 + } + right_sample { + s: 59.738476175663934 + width: 1.7356231936337776 + } + right_sample { + s: 59.937387296157368 + width: 1.7368152348624468 + } + right_sample { + s: 60.136296183911625 + width: 1.7379047254846227 + } + right_sample { + s: 60.335204090351745 + width: 1.7388964504550248 + } + right_sample { + s: 60.5341121336035 + width: 1.7397951685281356 + } + right_sample { + s: 60.733021303644449 + width: 1.7406056117082618 + } + right_sample { + s: 60.931932467461309 + width: 1.7413324847668439 + } + right_sample { + s: 61.13084637421376 + width: 1.7419804648196646 + } + right_sample { + s: 61.329763660402456 + width: 1.7425542009658193 + } + right_sample { + s: 61.528684855040041 + width: 1.7430583139814022 + } + right_sample { + s: 61.72761038482539 + width: 1.743497396068441 + } + right_sample { + s: 61.926540579319919 + width: 1.7438760106513205 + } + right_sample { + s: 62.125475676125411 + width: 1.7441986922206532 + } + right_sample { + s: 62.324415826061234 + width: 1.7444699462221172 + } + right_sample { + s: 62.523361098343877 + width: 1.7446942489846222 + } + right_sample { + s: 62.722311485764074 + width: 1.7448760476876581 + } + right_sample { + s: 62.921266909865345 + width: 1.7450197603609783 + } + right_sample { + s: 63.120227226120427 + width: 1.7451297759189899 + } + right_sample { + s: 63.319192229106612 + width: 1.7452104542228553 + } + right_sample { + s: 63.518161657681482 + width: 1.7452661261681668 + } + right_sample { + s: 63.71713520015583 + width: 1.7453010937965572 + } + right_sample { + s: 63.9161124994651 + width: 1.7453196304292276 + } + right_sample { + s: 64.115093158341665 + width: 1.7453259808162884 + } + right_sample { + s: 64.314076744482747 + width: 1.7453243613038918 + } + right_sample { + s: 64.5130627957203 + width: 1.745318960012058 + } + right_sample { + s: 64.712050825187291 + width: 1.7453139370245139 + } + right_sample { + s: 64.911040326484837 + width: 1.74531342458506 + } + right_sample { + s: 65.110030778847687 + width: 1.745321527301354 + } + right_sample { + s: 65.309021652309283 + width: 1.7453423223482725 + } + right_sample { + s: 65.508012412866748 + width: 1.7453798596764503 + } + right_sample { + s: 65.707002527645415 + width: 1.745438162215373 + } + right_sample { + s: 65.905991470063285 + width: 1.7455212260748196 + } + right_sample { + s: 66.10497872499684 + width: 1.7456330207390254 + } + right_sample { + s: 66.303963794006421 + width: 1.7457774866634908 + } + right_sample { + s: 66.502946335281322 + width: 1.7459535672379909 + } + right_sample { + s: 66.701926441717717 + width: 1.7461447798879726 + } + right_sample { + s: 66.900904284031469 + width: 1.7463340188616472 + } + right_sample { + s: 67.0998800267398 + width: 1.7465132940854222 + } + right_sample { + s: 67.2988538285142 + width: 1.7466816419750426 + } + right_sample { + s: 67.4978258425342 + width: 1.7468391241609351 + } + right_sample { + s: 67.696796216840738 + width: 1.7469857990172331 + } + right_sample { + s: 67.89576509468904 + width: 1.747121721674503 + } + right_sample { + s: 68.094732614902483 + width: 1.7472469440323017 + } + right_sample { + s: 68.293698912226361 + width: 1.7473615147699391 + } + right_sample { + s: 68.4926641176806 + width: 1.747465479361777 + } + right_sample { + s: 68.691628358914556 + width: 1.7475588800882127 + } + right_sample { + s: 68.890591760559445 + width: 1.7476417560504909 + } + right_sample { + s: 69.089554444582532 + width: 1.7477141431844665 + } + right_sample { + s: 69.2885165306413 + width: 1.747776074274856 + } + right_sample { + s: 69.4874781364359 + width: 1.7478275789694684 + } + right_sample { + s: 69.686439378064151 + width: 1.747868683794406 + } + right_sample { + s: 69.88540037037447 + width: 1.7478994121685587 + } + right_sample { + s: 70.084361227320045 + width: 1.7479197844197265 + } + right_sample { + s: 70.2833220623119 + width: 1.7479298178005123 + } + right_sample { + s: 70.482282988573587 + width: 1.7479295265038441 + } + right_sample { + s: 70.68124411949421 + width: 1.7479189216796331 + } + right_sample { + s: 70.8802055689828 + width: 1.7478980114504792 + } + right_sample { + s: 71.079167451821164 + width: 1.7478668009302312 + } + right_sample { + s: 71.278129878222842 + width: 1.7478255472283224 + } + right_sample { + s: 71.477092879511758 + width: 1.7477778721287573 + } + right_sample { + s: 71.6760564285364 + width: 1.7477295812136366 + } + right_sample { + s: 71.875020496419182 + width: 1.7476839710431029 + } + right_sample { + s: 72.073985053911883 + width: 1.7476416912658177 + } + right_sample { + s: 72.2729500714176 + width: 1.7476027183925977 + } + right_sample { + s: 72.471915519013081 + width: 1.7475670168793287 + } + right_sample { + s: 72.670881366470681 + width: 1.7475345509610714 + } + right_sample { + s: 72.869847583281654 + width: 1.7475052846531229 + } + right_sample { + s: 73.068814138677482 + width: 1.7474791817512485 + } + right_sample { + s: 73.267781001652438 + width: 1.7474562058350411 + } + right_sample { + s: 73.466748140985885 + width: 1.7474363202680647 + } + right_sample { + s: 73.665715525265341 + width: 1.7474194881977496 + } + right_sample { + s: 73.864683122906911 + width: 1.747405672559152 + } + right_sample { + s: 74.063650902180029 + width: 1.747394836074214 + } + right_sample { + s: 74.262618831227513 + width: 1.7473869412539884 + } + right_sample { + s: 74.461586878089335 + width: 1.7473819503998917 + } + right_sample { + s: 74.6605550107244 + width: 1.7473798256036166 + } + right_sample { + s: 74.859523197032644 + width: 1.7473805287501853 + } + right_sample { + s: 75.058491404877827 + width: 1.7473840215175824 + } + right_sample { + s: 75.257459602109549 + width: 1.7473902653790283 + } + right_sample { + s: 75.456427756585271 + width: 1.7473992216033924 + } + right_sample { + s: 75.655395836193264 + width: 1.7474108512570574 + } + right_sample { + s: 75.854363808874254 + width: 1.7474251152045222 + } + right_sample { + s: 76.053331642673925 + width: 1.7474419726316373 + } + right_sample { + s: 76.252299316211335 + width: 1.7474609698167938 + } + right_sample { + s: 76.451266834243526 + width: 1.7474806697943497 + } + right_sample { + s: 76.650234205509847 + width: 1.7474998658026675 + } + right_sample { + s: 76.849201438722034 + width: 1.7475182674278134 + } + right_sample { + s: 77.048168542565577 + width: 1.7475358617488579 + } + right_sample { + s: 77.247135525702021 + width: 1.7475526571458431 + } + right_sample { + s: 77.4461023967699 + width: 1.7475686619845257 + } + right_sample { + s: 77.645069164386371 + width: 1.7475838846152385 + } + right_sample { + s: 77.844035837149235 + width: 1.7475983333717853 + } + right_sample { + s: 78.043002423638185 + width: 1.7476120165724636 + } + right_sample { + s: 78.241968932417038 + width: 1.7476249425208774 + } + right_sample { + s: 78.440935372034232 + width: 1.7476371195047973 + } + right_sample { + s: 78.6399017510257 + width: 1.7476485557967283 + } + right_sample { + s: 78.838868077915649 + width: 1.7476592596535832 + } + right_sample { + s: 79.037834361218046 + width: 1.7476692393184141 + } + right_sample { + s: 79.236800609439484 + width: 1.7476785030173163 + } + right_sample { + s: 79.435766831079235 + width: 1.7476870589629048 + } + right_sample { + s: 79.634733034631466 + width: 1.7476949153528505 + } + right_sample { + s: 79.833699228587619 + width: 1.7477020803693946 + } + right_sample { + s: 80.032665421436789 + width: 1.7477085621800623 + } + right_sample { + s: 80.231631621668072 + width: 1.7477143689385146 + } + right_sample { + s: 80.430597837771913 + width: 1.7477195087836896 + } + right_sample { + s: 80.629564078242211 + width: 1.7477239898386105 + } + right_sample { + s: 80.828530351576745 + width: 1.747727820214275 + } + right_sample { + s: 81.027496665660578 + width: 1.7477310339092125 + } + right_sample { + s: 81.226463022025769 + width: 1.7477339133585876 + } + right_sample { + s: 81.425429418456758 + width: 1.7477368515503322 + } + right_sample { + s: 81.6243958526868 + width: 1.7477399909083915 + } + right_sample { + s: 81.823362322447338 + width: 1.7477433345727218 + } + right_sample { + s: 82.0223288254678 + width: 1.7477468804388974 + } + right_sample { + s: 82.221295359475789 + width: 1.7477506263713809 + } + right_sample { + s: 82.420261922197867 + width: 1.7477545702336343 + } + right_sample { + s: 82.619228511358585 + width: 1.7477587148981024 + } + right_sample { + s: 82.818195124681566 + width: 1.747763053093691 + } + right_sample { + s: 83.017161759888936 + width: 1.7477675818906393 + } + right_sample { + s: 83.216128414701728 + width: 1.7477722991471036 + } + right_sample { + s: 83.415095086839983 + width: 1.7477772027208036 + } + right_sample { + s: 83.614061774023057 + width: 1.7477822904669784 + } + right_sample { + s: 83.813028473969368 + width: 1.747787560240835 + } + right_sample { + s: 84.011995184396667 + width: 1.7477930098960239 + } + right_sample { + s: 84.210961903022223 + width: 1.7477986372854906 + } + right_sample { + s: 84.409928627562877 + width: 1.7478044402612056 + } + right_sample { + s: 84.608895355735285 + width: 1.7478104166730302 + } + right_sample { + s: 84.807862085255621 + width: 1.7478165643709376 + } + right_sample { + s: 85.006828813840386 + width: 1.7478228812035319 + } + right_sample { + s: 85.205795539205909 + width: 1.7478293650180461 + } + right_sample { + s: 85.404762259068733 + width: 1.7478360136609752 + } + right_sample { + s: 85.603728971145387 + width: 1.7478428249774984 + } + right_sample { + s: 85.802695673160528 + width: 1.74784979645367 + } + right_sample { + s: 86.001662363733416 + width: 1.7478568895498579 + } + right_sample { + s: 86.200629043264755 + width: 1.7478640025872523 + } + right_sample { + s: 86.399595712367031 + width: 1.7478710691471266 + } + right_sample { + s: 86.5985623716527 + width: 1.7478780839876782 + } + right_sample { + s: 86.797529021733922 + width: 1.7478850476903705 + } + right_sample { + s: 86.99649566322293 + width: 1.7478919608375443 + } + right_sample { + s: 87.195462296731719 + width: 1.7478988240107698 + } + right_sample { + s: 87.3944289228722 + width: 1.7479056377923166 + } + right_sample { + s: 87.593395542256275 + width: 1.7479124027633375 + } + right_sample { + s: 87.792362155495468 + width: 1.747919119505738 + } + right_sample { + s: 87.9913287632016 + width: 1.7479257886008519 + } + right_sample { + s: 88.190295365986088 + width: 1.7479324106305874 + } + right_sample { + s: 88.3892619644607 + width: 1.747938986175922 + } + right_sample { + s: 88.5882285592366 + width: 1.7479455158183246 + } + right_sample { + s: 88.787195150925157 + width: 1.7479520001392677 + } + right_sample { + s: 88.98616174013803 + width: 1.7479584397193459 + } + right_sample { + s: 89.185128327486112 + width: 1.7479648351402339 + } + right_sample { + s: 89.384094913581052 + width: 1.747971186982465 + } + right_sample { + s: 89.583061499034 + width: 1.7479774958273915 + } + right_sample { + s: 89.782028084456172 + width: 1.7479837622557008 + } + right_sample { + s: 89.980994670458813 + width: 1.7479899868479851 + } + right_sample { + s: 90.179961257653261 + width: 1.7479961701851803 + } + right_sample { + s: 90.378927846650839 + width: 1.7480023128477495 + } + right_sample { + s: 90.577894438062813 + width: 1.7480084154162907 + } + right_sample { + s: 90.776861032438561 + width: 1.7480144811071945 + } + right_sample { + s: 90.975827629844943 + width: 1.7480205312929895 + } + right_sample { + s: 91.174794230119431 + width: 1.7480265887675062 + } + right_sample { + s: 91.373760833098558 + width: 1.7480326593019506 + } + right_sample { + s: 91.572727438618315 + width: 1.7480387427544408 + } + right_sample { + s: 91.771694046515066 + width: 1.7480448389691372 + } + right_sample { + s: 91.9706606566251 + width: 1.7480509477907926 + } + right_sample { + s: 92.1696272687846 + width: 1.7480570690635449 + } + right_sample { + s: 92.368593882829614 + width: 1.7480632026323044 + } + right_sample { + s: 92.567560498596535 + width: 1.7480693483414056 + } + right_sample { + s: 92.766527115921264 + width: 1.7480755060354018 + } + right_sample { + s: 92.9654937346404 + width: 1.7480816755583539 + } + right_sample { + s: 93.164460354589878 + width: 1.7480878567550606 + } + right_sample { + s: 93.363426975605819 + width: 1.7480940494700332 + } + right_sample { + s: 93.5623935975247 + width: 1.7481002535472203 + } + right_sample { + s: 93.761360220182425 + width: 1.7481064688315784 + } + right_sample { + s: 93.9603268434154 + width: 1.7481126951675525 + } + right_sample { + s: 94.159293467059285 + width: 1.7481189323996873 + } + right_sample { + s: 94.358260090950893 + width: 1.7481251803718862 + } + right_sample { + s: 94.557226714926017 + width: 1.7481314389285607 + } + right_sample { + s: 94.75619333882095 + width: 1.7481377079146763 + } + right_sample { + s: 94.9551599624718 + width: 1.7481439871743438 + } + right_sample { + s: 95.154126585714664 + width: 1.7481502765520029 + } + right_sample { + s: 95.353093208385957 + width: 1.7481565758917625 + } + right_sample { + s: 95.552059830322733 + width: 1.7481628849779578 + } + right_sample { + s: 95.751026451437809 + width: 1.7481692005696319 + } + right_sample { + s: 95.949993071764069 + width: 1.7481755161605887 + } + right_sample { + s: 96.148959691345269 + width: 1.7481818286469959 + } + right_sample { + s: 96.347926310225432 + width: 1.7481881378812063 + } + right_sample { + s: 96.546892928448543 + width: 1.7481944439047117 + } + right_sample { + s: 96.745859546058256 + width: 1.7482007467594682 + } + right_sample { + s: 96.944826163098639 + width: 1.7482070464871706 + } + right_sample { + s: 97.143792779613634 + width: 1.7482133431296534 + } + right_sample { + s: 97.342759395647022 + width: 1.7482196367281904 + } + right_sample { + s: 97.541726011242744 + width: 1.7482259273244991 + } + right_sample { + s: 97.7406926264447 + width: 1.7482322149606295 + } + right_sample { + s: 97.939659241296866 + width: 1.7482384996780134 + } + right_sample { + s: 98.138625855842989 + width: 1.748244781518411 + } + right_sample { + s: 98.337592470127049 + width: 1.7482510605236223 + } + right_sample { + s: 98.536559084192959 + width: 1.7482573367352354 + } + right_sample { + s: 98.735525698084686 + width: 1.7482636101947757 + } + right_sample { + s: 98.9344923118458 + width: 1.7482698809443415 + } + right_sample { + s: 99.1334589255206 + width: 1.7482761490251739 + } + right_sample { + s: 99.332425539152752 + width: 1.7482824144792974 + } + right_sample { + s: 99.531392152786154 + width: 1.748288677348143 + } + right_sample { + s: 99.730358766464775 + width: 1.7482949376732964 + } + right_sample { + s: 99.929325380232555 + width: 1.7483011954968468 + } + right_sample { + s: 100.12829199413333 + width: 1.7483074508602992 + } + right_sample { + s: 100.32725860821087 + width: 1.7483137038054393 + } + right_sample { + s: 100.52622522250338 + width: 1.74831995463223 + } + right_sample { + s: 100.72519183701246 + width: 1.7483262048930295 + } + right_sample { + s: 100.9241584517268 + width: 1.7483324557609687 + } + right_sample { + s: 101.12312506663427 + width: 1.7483387074442729 + } + right_sample { + s: 101.32209168172321 + width: 1.7483449599318042 + } + right_sample { + s: 101.52105829698193 + width: 1.7483512132123715 + } + right_sample { + s: 101.72002491239864 + width: 1.7483574672746462 + } + right_sample { + s: 101.91899152796124 + width: 1.7483637221077175 + } + right_sample { + s: 102.1179581436587 + width: 1.7483699776999626 + } + right_sample { + s: 102.31692475947861 + width: 1.7483762340409206 + } + right_sample { + s: 102.51589137540958 + width: 1.7483824911186303 + } + right_sample { + s: 102.71485799143966 + width: 1.7483887489227024 + } + right_sample { + s: 102.913824607557 + width: 1.7483950074415102 + } + right_sample { + s: 103.11279122375012 + width: 1.7484012666636841 + } + right_sample { + s: 103.31175784000713 + width: 1.7484075265785908 + } + right_sample { + s: 103.51072445631614 + width: 1.7484137871748973 + } + right_sample { + s: 103.70969107266545 + width: 1.7484200484410872 + } + right_sample { + s: 103.90865768904341 + width: 1.7484263103663611 + } + right_sample { + s: 104.10762430543835 + width: 1.7484325729392454 + } + right_sample { + s: 104.30659092183825 + width: 1.7484388361489409 + } + right_sample { + s: 104.50555753823137 + width: 1.7484450999841585 + } + right_sample { + s: 104.704524154606 + width: 1.7484513644334683 + } + right_sample { + s: 104.9034907709505 + width: 1.7484576294860159 + } + right_sample { + s: 105.102457387253 + width: 1.7484638951303677 + } + right_sample { + s: 105.30142400350199 + width: 1.7484701613468596 + } + right_sample { + s: 105.5003906196919 + width: 1.7484764278713487 + } + right_sample { + s: 105.69935723582545 + width: 1.7484826943175464 + } + right_sample { + s: 105.89832385190573 + width: 1.7484889605651157 + } + right_sample { + s: 106.09729046793591 + width: 1.748495226611809 + } + right_sample { + s: 106.29625708391929 + width: 1.7485014924613922 + } + right_sample { + s: 106.49522369985878 + width: 1.7485077581164155 + } + right_sample { + s: 106.69419031575767 + width: 1.7485140235799455 + } + right_sample { + s: 106.89315693161915 + width: 1.7485202888549853 + } + right_sample { + s: 107.09212354744621 + width: 1.7485265539446504 + } + right_sample { + s: 107.29109016324213 + width: 1.7485328188515947 + } + right_sample { + s: 107.49005677901003 + width: 1.74853908357936 + } + right_sample { + s: 107.68902339475305 + width: 1.7485453481303264 + } + right_sample { + s: 107.88799001047445 + width: 1.748551612507768 + } + right_sample { + s: 108.0869566261773 + width: 1.7485578767148238 + } + right_sample { + s: 108.28592324186454 + width: 1.7485641407546679 + } + right_sample { + s: 108.4848898575396 + width: 1.7485704046295809 + } + right_sample { + s: 108.68385647320567 + width: 1.7485766683427379 + } + right_sample { + s: 108.88282308886565 + width: 1.7485829318976589 + } + right_sample { + s: 109.08178970452279 + width: 1.7485891952971591 + } + right_sample { + s: 109.28075632018046 + width: 1.7485954585438159 + } + right_sample { + s: 109.47972293584154 + width: 1.748601721640842 + } + right_sample { + s: 109.67868955150917 + width: 1.7486079845917186 + } + right_sample { + s: 109.87765616718666 + width: 1.7486142473986712 + } + right_sample { + s: 110.07662278287708 + width: 1.7486205100649554 + } + right_sample { + s: 110.27558939858304 + width: 1.7486267726185 + } + right_sample { + s: 110.47455601430464 + width: 1.748633035166193 + } + right_sample { + s: 110.67352263004081 + width: 1.7486392977587175 + } + right_sample { + s: 110.8724892457908 + width: 1.7486455604008806 + } + right_sample { + s: 111.07145586155362 + width: 1.7486518230917316 + } + right_sample { + s: 111.27042247732872 + width: 1.7486580858308072 + } + right_sample { + s: 111.4693890931151 + width: 1.7486643486169733 + } + right_sample { + s: 111.66835570891185 + width: 1.7486706114499677 + } + right_sample { + s: 111.86732232471822 + width: 1.7486768743284558 + } + right_sample { + s: 112.06628894053325 + width: 1.7486831372518086 + } + right_sample { + s: 112.26525555635617 + width: 1.74868940021922 + } + right_sample { + s: 112.46422217218631 + width: 1.7486956632298059 + } + right_sample { + s: 112.66318878802244 + width: 1.7487019262831416 + } + right_sample { + s: 112.86215540386415 + width: 1.7487081893777754 + } + right_sample { + s: 113.06112201971017 + width: 1.7487144525135925 + } + right_sample { + s: 113.26008863556 + width: 1.7487207156892819 + } + right_sample { + s: 113.45905525141258 + width: 1.7487269789042585 + } + right_sample { + s: 113.65802186726718 + width: 1.7487332421577801 + } + right_sample { + s: 113.85698848312288 + width: 1.7487395054489747 + } + right_sample { + s: 114.05595509897887 + width: 1.7487457687768617 + } + right_sample { + s: 114.25492171483438 + width: 1.7487520321407837 + } + right_sample { + s: 114.45388833068846 + width: 1.7487582955402279 + } + right_sample { + s: 114.65285494654036 + width: 1.7487645589737979 + } + right_sample { + s: 114.85182156238906 + width: 1.7487708224412948 + } + right_sample { + s: 115.05078817823399 + width: 1.7487770859403631 + } + right_sample { + s: 115.24975479407476 + width: 1.7487833494502807 + } + right_sample { + s: 115.4487214099112 + width: 1.7487896129510436 + } + right_sample { + s: 115.64768802574412 + width: 1.7487958764393685 + } + right_sample { + s: 115.8466546415732 + width: 1.7488021399158131 + } + right_sample { + s: 116.04562125739919 + width: 1.7488084033803484 + } + right_sample { + s: 116.2445878732219 + width: 1.7488146668333457 + } + right_sample { + s: 116.44355448904177 + width: 1.7488209302749345 + } + right_sample { + s: 116.64252110485896 + width: 1.7488271937054722 + } + right_sample { + s: 116.84148772067356 + width: 1.7488334571252926 + } + right_sample { + s: 117.04045433648618 + width: 1.7488397205339143 + } + right_sample { + s: 117.23942095229661 + width: 1.74884598393211 + } + right_sample { + s: 117.43838756810543 + width: 1.7488522473199359 + } + right_sample { + s: 117.63735418391263 + width: 1.7488585106980699 + } + right_sample { + s: 117.83632079971851 + width: 1.748864774066027 + } + right_sample { + s: 118.03528741552323 + width: 1.7488710374243821 + } + right_sample { + s: 118.23425403132725 + width: 1.7488773007733083 + } + right_sample { + s: 118.43322064713053 + width: 1.7488835641128289 + } + right_sample { + s: 118.63218726293347 + width: 1.7488898274437668 + } + right_sample { + s: 118.83115387873617 + width: 1.7488960907655655 + } + right_sample { + s: 119.03012049453892 + width: 1.7489023540790758 + } + right_sample { + s: 119.22908711034189 + width: 1.7489086173840711 + } + right_sample { + s: 119.42805372614545 + width: 1.7489148806807029 + } + right_sample { + s: 119.62702034194962 + width: 1.7489211439696881 + } + right_sample { + s: 119.82598695775499 + width: 1.7489274072506018 + } + right_sample { + s: 120.02495357356129 + width: 1.748933670526833 + } + right_sample { + s: 120.22392018936868 + width: 1.7489399338042317 + } + right_sample { + s: 120.42288680517723 + width: 1.7489461970849833 + } + right_sample { + s: 120.62185342098651 + width: 1.7489524603686726 + } + right_sample { + s: 120.82082003679695 + width: 1.7489587236551125 + } + right_sample { + s: 121.01978665260823 + width: 1.7489649869446227 + } + right_sample { + s: 121.21875326842026 + width: 1.7489712502368691 + } + right_sample { + s: 121.41771988423316 + width: 1.7489775135313705 + } + right_sample { + s: 121.61668650004654 + width: 1.7489837768291185 + } + right_sample { + s: 121.81565311586067 + width: 1.7489900401289318 + } + right_sample { + s: 122.01461973167535 + width: 1.74899630343154 + } + right_sample { + s: 122.21358634749059 + width: 1.7490025667362836 + } + right_sample { + s: 122.41255296330611 + width: 1.7490088300438664 + } + right_sample { + s: 122.61151957912209 + width: 1.7490150933533388 + } + right_sample { + s: 122.81048619493843 + width: 1.7490213566652186 + } + right_sample { + s: 123.00945281075498 + width: 1.7490276199795036 + } + right_sample { + s: 123.20841942657179 + width: 1.7490338832958268 + } + right_sample { + s: 123.40738604238858 + width: 1.7490401466143501 + } + right_sample { + s: 123.60635265820554 + width: 1.7490464099345953 + } + right_sample { + s: 123.80531927402251 + width: 1.7490526732570859 + } + right_sample { + s: 124.00428588983966 + width: 1.7490589365812459 + } + right_sample { + s: 124.20325250565648 + width: 1.749065199907742 + } + right_sample { + s: 124.40221912147318 + width: 1.7490714632356057 + } + right_sample { + s: 124.60118573728963 + width: 1.7490777265652253 + } + right_sample { + s: 124.80015235310563 + width: 1.7490839898970534 + } + right_sample { + s: 124.99911896892162 + width: 1.7490902532282837 + } + right_sample { + s: 125.19808558473716 + width: 1.7490965165594137 + } + right_sample { + s: 125.39705220055264 + width: 1.74910277988939 + } + right_sample { + s: 125.59601881636749 + width: 1.7491090432191729 + } + right_sample { + s: 125.79498543218237 + width: 1.7491153065479201 + } + right_sample { + s: 125.993952047997 + width: 1.7491215698759135 + } + right_sample { + s: 126.19291866381134 + width: 1.7491278332034292 + } + right_sample { + s: 126.39188527962558 + width: 1.7491340965302473 + } + right_sample { + s: 126.59085189543963 + width: 1.7491403598568613 + } + right_sample { + s: 126.78981851125349 + width: 1.7491466231825128 + } + right_sample { + s: 126.98878512706722 + width: 1.7491528865074359 + } + right_sample { + s: 127.18775174288078 + width: 1.749159149832078 + } + right_sample { + s: 127.38671835869428 + width: 1.7491654131560737 + } + right_sample { + s: 127.5856849745076 + width: 1.7491716764796708 + } + right_sample { + s: 127.78465159032095 + width: 1.7491779398025906 + } + right_sample { + s: 127.98361820613424 + width: 1.7491842031249645 + } + right_sample { + s: 128.18258482194739 + width: 1.7491904664470839 + } + right_sample { + s: 128.38155143776069 + width: 1.7491967297683437 + } + right_sample { + s: 128.58051805357371 + width: 1.7492029930896953 + } + right_sample { + s: 128.77948466938693 + width: 1.7492092564101711 + } + right_sample { + s: 128.97845128520012 + width: 1.7492155197303139 + } + right_sample { + s: 129.17741790101337 + width: 1.7492217830502765 + } + right_sample { + s: 129.37638451682665 + width: 1.7492280463695002 + } + right_sample { + s: 129.57535113264009 + width: 1.7492343096885108 + } + right_sample { + s: 129.77431774845348 + width: 1.7492405730075118 + } + right_sample { + s: 129.97328436426693 + width: 1.7492468363262315 + } + right_sample { + s: 130.17225098008049 + width: 1.749253099645347 + } + right_sample { + s: 130.37121759589419 + width: 1.749259362964614 + } + right_sample { + s: 130.57018421170793 + width: 1.7492656262840893 + } + right_sample { + s: 130.76915082752168 + width: 1.749271889603693 + } + right_sample { + s: 130.96811744333559 + width: 1.7492781529234118 + } + right_sample { + s: 131.16708405914932 + width: 1.7492844162433352 + } + right_sample { + s: 131.36605067496342 + width: 1.7492906795631189 + } + right_sample { + s: 131.56501729077729 + width: 1.7492969428833918 + } + right_sample { + s: 131.76398390659125 + width: 1.7493032062038727 + } + right_sample { + s: 131.96295052240535 + width: 1.7493094695241425 + } + right_sample { + s: 132.16191713821954 + width: 1.7493157328447098 + } + right_sample { + s: 132.36088375403355 + width: 1.7493219961654591 + } + right_sample { + s: 132.55985036984774 + width: 1.7493282594860744 + } + right_sample { + s: 132.75881698566187 + width: 1.7493345228071873 + } + right_sample { + s: 132.95778360147605 + width: 1.7493407861281167 + } + right_sample { + s: 133.15675021729035 + width: 1.7493470494489616 + } + right_sample { + s: 133.35571683310448 + width: 1.7493533127704974 + } + right_sample { + s: 133.55468344891858 + width: 1.7493595760917584 + } + right_sample { + s: 133.75365006473282 + width: 1.7493658394130116 + } + right_sample { + s: 133.95261668054695 + width: 1.7493721027346365 + } + right_sample { + s: 134.1515832963612 + width: 1.7493783660558173 + } + right_sample { + s: 134.35054991217524 + width: 1.7493846293777542 + } + right_sample { + s: 134.54951652798937 + width: 1.7493908926993902 + } + right_sample { + s: 134.74848314380353 + width: 1.7493971560210582 + } + right_sample { + s: 134.94744975961754 + width: 1.7494034193428902 + } + right_sample { + s: 135.14641637543178 + width: 1.7494096826644285 + } + right_sample { + s: 135.34538299124577 + width: 1.7494159459861574 + } + right_sample { + s: 135.54434960705976 + width: 1.7494222093076872 + } + right_sample { + s: 135.74331622287383 + width: 1.7494284726292102 + } + right_sample { + s: 135.94228283868782 + width: 1.7494347359506053 + } + right_sample { + s: 136.1412494545018 + width: 1.74944099927211 + } + right_sample { + s: 136.34021607031582 + width: 1.7494472625934099 + } + right_sample { + s: 136.53918268612975 + width: 1.7494535259149204 + } + right_sample { + s: 136.73814930194374 + width: 1.749459789236314 + } + right_sample { + s: 136.93711591775764 + width: 1.7494660525575711 + } + right_sample { + s: 137.13608253357157 + width: 1.7494723158789094 + } + right_sample { + s: 137.33504914938555 + width: 1.7494785792002339 + } + right_sample { + s: 137.53401576519943 + width: 1.7494848425215275 + } + right_sample { + s: 137.73298238101341 + width: 1.7494911058428468 + } + right_sample { + s: 137.93194899682729 + width: 1.749497369163922 + } + right_sample { + s: 138.13091561264122 + width: 1.7495036324850681 + } + right_sample { + s: 138.32988222845515 + width: 1.7495098958062427 + } + right_sample { + s: 138.52884884426913 + width: 1.7495161591274833 + } + right_sample { + s: 138.727815460083 + width: 1.7495224224486037 + } + right_sample { + s: 138.92678207589688 + width: 1.7495286857697292 + } + right_sample { + s: 139.12574869171075 + width: 1.7495349490908423 + } + right_sample { + s: 139.32471530752474 + width: 1.7495412124119258 + } + right_sample { + s: 139.52368192333878 + width: 1.7495474757330105 + } + right_sample { + s: 139.72264853915271 + width: 1.7495537390540679 + } + right_sample { + s: 139.92161515496664 + width: 1.7495600023752664 + } + right_sample { + s: 140.12058177078052 + width: 1.7495662656963873 + } + right_sample { + s: 140.31954838659451 + width: 1.7495725290174249 + } + right_sample { + s: 140.51851500240841 + width: 1.7495787923385759 + } + right_sample { + s: 140.71748161822242 + width: 1.7495850556596158 + } + right_sample { + s: 140.91644823403641 + width: 1.7495913189809109 + } + right_sample { + s: 141.11541484985034 + width: 1.7495975823019931 + } + right_sample { + s: 141.31438146566435 + width: 1.7496038456232186 + } + right_sample { + s: 141.51334808147831 + width: 1.7496101089443021 + } + right_sample { + s: 141.71231469729216 + width: 1.7496163722656142 + } + right_sample { + s: 141.91128131310617 + width: 1.7496226355866753 + } + right_sample { + s: 142.11024792892022 + width: 1.7496288989077944 + } + right_sample { + s: 142.30921454473417 + width: 1.7496351622291593 + } + right_sample { + s: 142.50818116054825 + width: 1.749641425550265 + } + right_sample { + s: 142.70714777636223 + width: 1.7496476888714456 + } + right_sample { + s: 142.90611439217625 + width: 1.7496539521927441 + } + right_sample { + s: 143.10508100799021 + width: 1.7496602155138028 + } + right_sample { + s: 143.30404762380422 + width: 1.7496664788351013 + } + right_sample { + s: 143.50301423961815 + width: 1.7496727421563443 + } + right_sample { + s: 143.70198085543225 + width: 1.7496790054774243 + } + right_sample { + s: 143.90094747124616 + width: 1.7496852687988036 + } + right_sample { + s: 144.09991408706026 + width: 1.7496915321198991 + } + right_sample { + s: 144.29888070287416 + width: 1.7496977954412036 + } + right_sample { + s: 144.49784731868809 + width: 1.7497040587625268 + } + right_sample { + s: 144.69681393450222 + width: 1.7497103220835832 + } + right_sample { + s: 144.89578055031623 + width: 1.7497165854049537 + } + right_sample { + s: 145.09474716613019 + width: 1.7497228487262257 + } + right_sample { + s: 145.29371378194418 + width: 1.7497291120473517 + } + right_sample { + s: 145.49268039775822 + width: 1.7497353753685934 + } + right_sample { + s: 145.69164701357218 + width: 1.7497416386898283 + } + right_sample { + s: 145.89061362938617 + width: 1.7497479020110285 + } + right_sample { + s: 146.08958024520015 + width: 1.7497541653322937 + } + right_sample { + s: 146.2885468610142 + width: 1.7497604286535788 + } + right_sample { + s: 146.48751347682824 + width: 1.7497666919748485 + } + right_sample { + s: 146.6864800926422 + width: 1.7497729552960832 + } + right_sample { + s: 146.88544670845624 + width: 1.7497792186172991 + } + right_sample { + s: 147.08441332427023 + width: 1.7497854819387064 + } + right_sample { + s: 147.28337994008416 + width: 1.7497917452599281 + } + right_sample { + s: 147.4823465558982 + width: 1.7497980085811107 + } + right_sample { + s: 147.68131317171219 + width: 1.7498042719022744 + } + right_sample { + s: 147.88027978752615 + width: 1.7498105352234692 + } + right_sample { + s: 148.07924640334028 + width: 1.7498167985447162 + } + right_sample { + s: 148.27821301915421 + width: 1.7498230618661583 + } + right_sample { + s: 148.47717963496819 + width: 1.7498293251872907 + } + right_sample { + s: 148.67614625078212 + width: 1.7498355885085106 + } + right_sample { + s: 148.87511286659617 + width: 1.7498418518297498 + } + right_sample { + s: 149.07407948241027 + width: 1.7498481151509391 + } + right_sample { + s: 149.2730460982242 + width: 1.7498543784720642 + } + right_sample { + s: 149.47201271403819 + width: 1.7498606417932008 + } + right_sample { + s: 149.67097932985217 + width: 1.7498669051144884 + } + right_sample { + s: 149.86994594566625 + width: 1.7498731684357609 + } + right_sample { + s: 150.06891256148012 + width: 1.7498794317569155 + } + right_sample { + s: 150.26787917729413 + width: 1.749885695078027 + } + right_sample { + s: 150.46684579310806 + width: 1.7498919583993295 + } + right_sample { + s: 150.66581240892205 + width: 1.7498982217205836 + } + right_sample { + s: 150.86477902473598 + width: 1.7499044850417922 + } + right_sample { + s: 151.06374564054997 + width: 1.7499107483627707 + } + right_sample { + s: 151.26271225636395 + width: 1.7499170116839913 + } + right_sample { + s: 151.46167887217788 + width: 1.7499232750052252 + } + right_sample { + s: 151.66064548799187 + width: 1.749929538326344 + } + right_sample { + s: 151.85961210380577 + width: 1.7499358016475619 + } + right_sample { + s: 152.0585787196197 + width: 1.7499420649687962 + } + right_sample { + s: 152.25754533543369 + width: 1.7499483282899493 + } + right_sample { + s: 152.45651195124751 + width: 1.7499545916111396 + } + right_sample { + s: 152.65547856706155 + width: 1.7499608549320564 + } + right_sample { + s: 152.85444518287542 + width: 1.7499671182533481 + } + right_sample { + s: 153.05341179868932 + width: 1.7499733815744833 + } + right_sample { + s: 153.25237841450328 + width: 1.7499796448954572 + } + right_sample { + s: 153.45134503031719 + width: 1.7499859082165838 + } + right_sample { + s: 153.65031164613103 + width: 1.7499921715377003 + } + right_sample { + s: 153.87421245705966 + width: 1.7499999965673967 + } +} +stop_sign { + id { + id: "2" + } + stop_line { + segment { + line_segment { + point { + x: 586365.90892295539 + y: 4140785.417460287 + } + point { + x: 586367.59595983266 + y: 4140784.9523852509 + } + point { + x: 586369.28299449442 + y: 4140784.4873108254 + } + } + } + } + overlap_id { + id: "1_-1_and_2" + } +} +overlap { + id { + id: "1_-1_and_2" + } + object { + id { + id: "1_-1" + } + lane_overlap_info { + start_s: 152.57964692253393 + end_s: 152.57964692253393 + } + } + object { + id { + id: "2" + } + } +} diff --git a/modules/planning/testdata/garage_test/1_chassis.pb.txt b/modules/planning/testdata/garage_test/1_chassis.pb.txt new file mode 100644 index 00000000000..e491ea5ed4f --- /dev/null +++ b/modules/planning/testdata/garage_test/1_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 1137.5 +speed_mps: 0.0 +odometer_m: 0.0 +fuel_range_m: 0 +throttle_percentage: 15.0438699722 +brake_percentage: 17.9583435059 +steering_percentage: -0.617021262646 +steering_torque_nm: 0.0 +parking_brake: false +driving_mode: EMERGENCY_MODE +error_code: NO_ERROR +gear_location: GEAR_REVERSE +header { + timestamp_sec: 1504387654.53 + module_name: "chassis" + sequence_num: 69777 +} +signal { + turn_signal: TURN_NONE + horn: false +} diff --git a/modules/planning/testdata/garage_test/1_localization.pb.txt b/modules/planning/testdata/garage_test/1_localization.pb.txt new file mode 100644 index 00000000000..f894665012b --- /dev/null +++ b/modules/planning/testdata/garage_test/1_localization.pb.txt @@ -0,0 +1,49 @@ +header { + timestamp_sec: 1504387654.54 + module_name: "localization" + sequence_num: 76261 +} +pose { + position { + x: 586354.030596 + y: 4140735.52422 + z: -31.6059667105 + } + orientation { + qx: -0.0404090426784 + qy: 0.0209871273231 + qz: -0.129521941468 + qw: 0.990530522718 + } + linear_velocity { + x: 0.00782728700811 + y: -0.00918280190205 + z: -0.0039800614284 + } + linear_acceleration { + x: 0.0247735825145 + y: -0.0757700573061 + z: 0.0952269470726 + } + angular_velocity { + x: -0.000504004623404 + y: -0.00115693066804 + z: 0.000281194530964 + } + heading: 1.3120887936 + linear_acceleration_vrf { + x: 0.0405285594814 + y: -0.0748066177448 + z: 0.0904677248055 + } + angular_velocity_vrf { + x: -0.000196577873601 + y: -0.00126684246843 + z: 0.000167472072548 + } + euler_angles { + x: 0.0312284467472 + y: 0.085593843457 + z: 1.3120887936 + } +} diff --git a/modules/planning/testdata/garage_test/1_prediction.pb.txt b/modules/planning/testdata/garage_test/1_prediction.pb.txt new file mode 100644 index 00000000000..f2cbc72aa09 --- /dev/null +++ b/modules/planning/testdata/garage_test/1_prediction.pb.txt @@ -0,0 +1,1202 @@ +header { + timestamp_sec: 1504387654.44 + module_name: "prediction" + sequence_num: 6968 +} +prediction_obstacle { + perception_obstacle { + id: 2352 + position { + x: 586356.254122 + y: 4140742.69084 + z: -32.716302122 + } + theta: 1.3127155172 + velocity { + x: 0.0 + y: 0.0 + z: 0.0 + } + length: 3.4774916172 + width: 2.32324767113 + height: 2.131295681 + polygon_point { + x: 586354.765029 + y: 4140741.59108 + z: -32.6812234297 + } + polygon_point { + x: 586354.809979 + y: 4140741.77621 + z: -32.6823716237 + } + polygon_point { + x: 586355.142576 + y: 4140742.92261 + z: -32.6908573465 + } + polygon_point { + x: 586355.210657 + y: 4140743.14737 + z: -32.6925938927 + } + polygon_point { + x: 586355.718648 + y: 4140744.49 + z: -32.7055360883 + } + polygon_point { + x: 586355.814982 + y: 4140744.59822 + z: -32.7079837906 + } + polygon_point { + x: 586357.650636 + y: 4140743.94025 + z: -32.754502149 + } + polygon_point { + x: 586357.740132 + y: 4140743.87187 + z: -32.7567684654 + } + polygon_point { + x: 586356.740517 + y: 4140740.88569 + z: -32.7312855144 + } + polygon_point { + x: 586355.599238 + y: 4140741.0616 + z: -32.7023531731 + } + tracking_time: 18.210103035 + type: UNKNOWN + timestamp: 0.0 + } + timestamp: 1504387654.44 + predicted_period: 3.0 + trajectory { + probability: 0.877589209864 + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 0.0 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 0.3 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 0.6 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 0.7 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 1.0 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 1.2 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 1.4 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 1.7 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 1.9 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 2.0 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 2.3 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 2.4 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 2.8 + } + trajectory_point { + path_point { + x: 586356.251381 + y: 4140742.70724 + z: 0.0 + theta: 1.31271559016 + } + v: 0.0 + a: 0.0 + relative_time: 2.9 + } + } +} +prediction_obstacle { + perception_obstacle { + id: 2353 + position { + x: 586352.307493 + y: 4140746.66451 + z: -32.6478897957 + } + theta: 1.31271576293 + velocity { + x: 0.0 + y: 0.0 + z: 0.0 + } + length: 1.56693673134 + width: 0.464181542397 + height: 1.08595764637 + polygon_point { + x: 586351.986237 + y: 4140746.03716 + z: -32.6339457528 + } + polygon_point { + x: 586351.982668 + y: 4140746.10651 + z: -32.633858381 + } + polygon_point { + x: 586351.978374 + y: 4140746.25322 + z: -32.633756119 + } + polygon_point { + x: 586351.982642 + y: 4140746.32744 + z: -32.6338677202 + } + polygon_point { + x: 586352.003347 + y: 4140746.52463 + z: -32.6344016424 + } + polygon_point { + x: 586352.271173 + y: 4140747.36799 + z: -32.6412312461 + } + polygon_point { + x: 586352.362485 + y: 4140747.39094 + z: -32.6435477466 + } + polygon_point { + x: 586352.653989 + y: 4140747.38323 + z: -32.6509392939 + } + polygon_point { + x: 586352.630272 + y: 4140746.97823 + z: -32.6503195613 + } + polygon_point { + x: 586352.072438 + y: 4140745.9458 + z: -32.6361274778 + } + polygon_point { + x: 586352.017174 + y: 4140745.93072 + z: -32.6347254335 + } + tracking_time: 18.0100011826 + type: UNKNOWN + timestamp: 0.0 + } + timestamp: 1504387654.44 + predicted_period: 3.0 + trajectory { + probability: 1.0 + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.0 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.3 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.6 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.7 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.0 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.2 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.4 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.7 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.9 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.0 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.3 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.4 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.8 + } + trajectory_point { + path_point { + x: 586352.307493 + y: 4140746.66451 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.9 + } + } +} +prediction_obstacle { + perception_obstacle { + id: 2396 + position { + x: 586357.272991 + y: 4140766.48687 + z: -32.1906122891 + } + theta: 1.31292314119 + velocity { + x: 0.0 + y: 0.0 + z: 0.0 + } + length: 0.299373626709 + width: 0.093891620636 + height: 0.370222091675 + polygon_point { + x: 586357.276586 + y: 4140766.33003 + z: -32.1906963619 + } + polygon_point { + x: 586357.359576 + y: 4140766.61766 + z: -32.1928137864 + } + polygon_point { + x: 586357.269395 + y: 4140766.6437 + z: -32.1905281848 + } + polygon_point { + x: 586357.186406 + y: 4140766.35607 + z: -32.1884107602 + } + tracking_time: 0.0 + type: UNKNOWN + timestamp: 0.0 + } + timestamp: 1504387654.44 + predicted_period: 3.0 + trajectory { + probability: 1.0 + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.0 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.3 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.6 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.7 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.0 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.2 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.4 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.7 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.9 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.0 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.3 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.4 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.8 + } + trajectory_point { + path_point { + x: 586357.272991 + y: 4140766.48687 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.9 + } + } +} +perception_error_code: OK diff --git a/modules/planning/testdata/garage_test/follow_chassis.pb.txt b/modules/planning/testdata/garage_test/follow_chassis.pb.txt new file mode 100644 index 00000000000..d2e1ed5bb81 --- /dev/null +++ b/modules/planning/testdata/garage_test/follow_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 0.0 +speed_mps: 5.59999990463 +odometer_m: 0.0 +fuel_range_m: 0 +throttle_percentage: 19.7299156189 +brake_percentage: 13.443198204 +steering_percentage: -9.68085098267 +steering_torque_nm: -0.125 +parking_brake: false +driving_mode: COMPLETE_AUTO_DRIVE +error_code: NO_ERROR +gear_location: GEAR_DRIVE +header { + timestamp_sec: 1498682818.12 + module_name: "chassis" + sequence_num: 170881 +} +signal { + turn_signal: TURN_NONE + horn: false +} diff --git a/modules/planning/testdata/garage_test/follow_localization.pb.txt b/modules/planning/testdata/garage_test/follow_localization.pb.txt new file mode 100644 index 00000000000..4ec42b54f0f --- /dev/null +++ b/modules/planning/testdata/garage_test/follow_localization.pb.txt @@ -0,0 +1,44 @@ +header { + timestamp_sec: 1498682818.12 + module_name: "localization" + sequence_num: 170449 +} +pose { + position { + x: 586344.823005 + y: 4140700.15992 + z: -29.1201720927 + } + orientation { + qx: -0.0226565262121 + qy: -0.00623562072199 + qz: -0.122113367359 + qw: 0.992237937375 + } + linear_velocity { + x: 1.3230187572 + y: 5.54160416447 + z: 0.00100184507543 + } + linear_acceleration { + x: 0.925201735071 + y: -0.0895493383409 + z: 0.167094726951 + } + angular_velocity { + x: -0.00256320731588 + y: -0.0083851936552 + z: -0.110752945591 + } + heading: 1.32550101795 + linear_acceleration_vrf { + x: 0.92220474625 + y: 0.130421436969 + z: 0.156418148316 + } + angular_velocity_vrf { + x: -0.0024402792986 + y: -0.00393744602125 + z: -0.111002873915 + } +} diff --git a/modules/planning/testdata/garage_test/follow_prediction.pb.txt b/modules/planning/testdata/garage_test/follow_prediction.pb.txt new file mode 100644 index 00000000000..92da7804f74 --- /dev/null +++ b/modules/planning/testdata/garage_test/follow_prediction.pb.txt @@ -0,0 +1,382 @@ +header { + timestamp_sec: 1502344678.53 + module_name: "prediction" + sequence_num: 514 +} +prediction_obstacle { + perception_obstacle { + id: 3 + position { + x: 586353.202838 + y: 4140732.14084 + z: 0.0 + } + theta: 1.30472127492 + velocity { + x: 3.15135438863 + y: 7.35316024014 + z: 0.0 + } + length: 4.0 + width: 2.0 + height: 1.0 + polygon_point { + x: 586352.763921 + y: 4140734.33341 + z: 0.0 + } + polygon_point { + x: 586351.712134 + y: 4140730.47417 + z: 0.0 + } + polygon_point { + x: 586353.641755 + y: 4140729.94827 + z: 0.0 + } + polygon_point { + x: 586354.693542 + y: 4140733.80752 + z: 0.0 + } + tracking_time: 1.0 + type: VEHICLE + timestamp: 1501183445.06 + } + predicted_period: 3.0 + trajectory { + probability: 0.766733459676 + trajectory_point { + path_point { + x: 586363.510287 + y: 4140769.96115 + z: 0.0 + theta: 1.3047209778 + } + v: 7.99995157016 + a: 2.20234333945e-05 + relative_time: 0.0 + } + trajectory_point { + path_point { + x: 586363.720643 + y: 4140770.73299 + z: 0.0 + theta: 1.30472097782 + } + v: 7.9999537725 + a: 2.20234333945e-05 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 586363.930999 + y: 4140771.50484 + z: 0.0 + theta: 1.30472097798 + } + v: 7.99995597485 + a: 2.20234333945e-05 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 586364.141356 + y: 4140772.27668 + z: 0.0 + theta: 1.30472097771 + } + v: 7.99995817719 + a: 2.20234333945e-05 + relative_time: 0.3 + } + trajectory_point { + path_point { + x: 586364.351712 + y: 4140773.04852 + z: 0.0 + theta: 1.30472097802 + } + v: 7.99996037953 + a: 2.20234333945e-05 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 586364.562069 + y: 4140773.82037 + z: 0.0 + theta: 1.30472097762 + } + v: 7.99996258188 + a: 2.20234333945e-05 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 586364.772425 + y: 4140774.59221 + z: 0.0 + theta: 1.30472097805 + } + v: 7.99996478422 + a: 2.20234333945e-05 + relative_time: 0.6 + } + trajectory_point { + path_point { + x: 586364.982782 + y: 4140775.36406 + z: 0.0 + theta: 1.30472097766 + } + v: 7.99996698656 + a: 2.20234333945e-05 + relative_time: 0.7 + } + trajectory_point { + path_point { + x: 586365.193139 + y: 4140776.1359 + z: 0.0 + theta: 1.30472097796 + } + v: 7.99996918891 + a: 2.20234333945e-05 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 586365.403495 + y: 4140776.90775 + z: 0.0 + theta: 1.30472097783 + } + v: 7.99997139125 + a: 2.20234333945e-05 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 586365.613852 + y: 4140777.6796 + z: 0.0 + theta: 1.30472097786 + } + v: 7.99997359359 + a: 2.20234333945e-05 + relative_time: 1.0 + } + trajectory_point { + path_point { + x: 586365.824209 + y: 4140778.45144 + z: 0.0 + theta: 1.30472097786 + } + v: 7.99997579594 + a: 2.20234333945e-05 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 586366.034566 + y: 4140779.22329 + z: 0.0 + theta: 1.30472097776 + } + v: 7.99997799828 + a: 2.20234333945e-05 + relative_time: 1.2 + } + trajectory_point { + path_point { + x: 586366.244923 + y: 4140779.99513 + z: 0.0 + theta: 1.3047209779 + } + v: 7.99998020062 + a: 2.20234333945e-05 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 586366.45528 + y: 4140780.76698 + z: 0.0 + theta: 1.30472097779 + } + v: 7.99998240297 + a: 2.20234333945e-05 + relative_time: 1.4 + } + trajectory_point { + path_point { + x: 586366.665637 + y: 4140781.53883 + z: 0.0 + theta: 1.30472097795 + } + v: 7.99998460531 + a: 2.20234333945e-05 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 586366.875994 + y: 4140782.31067 + z: 0.0 + theta: 1.30472097768 + } + v: 7.99998680765 + a: 2.20234333945e-05 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 586367.086352 + y: 4140783.08252 + z: 0.0 + theta: 1.30472097799 + } + v: 7.99998901 + a: 2.20234333945e-05 + relative_time: 1.7 + } + trajectory_point { + path_point { + x: 586367.296709 + y: 4140783.85437 + z: 0.0 + theta: 1.30472097786 + } + v: 7.99999121234 + a: 2.20234333945e-05 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 586367.507066 + y: 4140784.62622 + z: 0.0 + theta: 1.30472097774 + } + v: 7.99999341468 + a: 2.20234333945e-05 + relative_time: 1.9 + } + trajectory_point { + path_point { + x: 586367.717424 + y: 4140785.39806 + z: 0.0 + theta: 1.30472180734 + } + v: 7.99999561703 + a: 2.20234333945e-05 + relative_time: 2.0 + } + trajectory_point { + path_point { + x: 586367.92778 + y: 4140786.16991 + z: 0.0 + theta: 1.30472444734 + } + v: 7.99999781937 + a: 2.20234333945e-05 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00000002171 + a: 2.20234333945e-05 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00000222406 + a: 2.20234333945e-05 + relative_time: 2.3 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.0000044264 + a: 2.20234333945e-05 + relative_time: 2.4 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00000662874 + a: 2.20234333945e-05 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00000883109 + a: 2.20234333945e-05 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00001103343 + a: 2.20234333945e-05 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00001323577 + a: 2.20234333945e-05 + relative_time: 2.8 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00001543812 + a: 2.20234333945e-05 + relative_time: 2.9 + } + } +} +perception_error_code: OK diff --git a/modules/planning/testdata/garage_test/garage_chassis.pb.txt b/modules/planning/testdata/garage_test/garage_chassis.pb.txt new file mode 100644 index 00000000000..24d34205b51 --- /dev/null +++ b/modules/planning/testdata/garage_test/garage_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 0.0 +speed_mps: 0.0 +odometer_m: 0.0 +fuel_range_m: 0 +throttle_percentage: 15.2391853333 +brake_percentage: 13.6079959869 +steering_percentage: 5.65957450867 +steering_torque_nm: -0.3125 +parking_brake: false +driving_mode: COMPLETE_MANUAL +error_code: NO_ERROR +gear_location: GEAR_NEUTRAL +header { + timestamp_sec: 1498682801.33 + module_name: "chassis" + sequence_num: 169202 +} +signal { + turn_signal: TURN_NONE + horn: false +} diff --git a/modules/planning/testdata/garage_test/garage_localization.pb.txt b/modules/planning/testdata/garage_test/garage_localization.pb.txt new file mode 100644 index 00000000000..2ea15c0b154 --- /dev/null +++ b/modules/planning/testdata/garage_test/garage_localization.pb.txt @@ -0,0 +1,44 @@ +header { + timestamp_sec: 1498682801.33 + module_name: "localization" + sequence_num: 168770 +} +pose { + position { + x: 586387.203263 + y: 4140676.21271 + z: -29.1851183716 + } + orientation { + qx: -0.00551346339344 + qy: 0.0363995342758 + qz: -0.620280830689 + qw: -0.783515390216 + } + linear_velocity { + x: 0.00149997781434 + y: 0.000880812599767 + z: -0.00122802127571 + } + linear_acceleration { + x: -0.00582869976263 + y: 0.0100514010432 + z: 0.0235518746941 + } + angular_velocity { + x: 0.000998771709994 + y: 0.000154125122251 + z: 1.03917169376e-05 + } + heading: 2.90890211889 + linear_acceleration_vrf { + x: 0.00994229889291 + y: 0.00712407897059 + z: 0.0232399095739 + } + angular_velocity_vrf { + x: 0.000377985098552 + y: -0.000936068612645 + z: -4.80654498315e-05 + } +} diff --git a/modules/planning/testdata/garage_test/garage_prediction.pb.txt b/modules/planning/testdata/garage_test/garage_prediction.pb.txt new file mode 100644 index 00000000000..36391512dec --- /dev/null +++ b/modules/planning/testdata/garage_test/garage_prediction.pb.txt @@ -0,0 +1,382 @@ +header { + timestamp_sec: 1502344676.82 + module_name: "prediction" + sequence_num: 497 +} +prediction_obstacle { + perception_obstacle { + id: 3 + position { + x: 586349.62673 + y: 4140719.01943 + z: 0.0 + } + theta: 1.30470070184 + velocity { + x: 3.15135438863 + y: 7.35316024014 + z: 0.0 + } + length: 4.0 + width: 2.0 + height: 1.0 + polygon_point { + x: 586349.187858 + y: 4140721.21201 + z: 0.0 + } + polygon_point { + x: 586348.135992 + y: 4140717.35279 + z: 0.0 + } + polygon_point { + x: 586350.065602 + y: 4140716.82685 + z: 0.0 + } + polygon_point { + x: 586351.117468 + y: 4140720.68607 + z: 0.0 + } + tracking_time: 1.0 + type: VEHICLE + timestamp: 1501183443.36 + } + predicted_period: 3.0 + trajectory { + probability: 0.766733459676 + trajectory_point { + path_point { + x: 586363.510287 + y: 4140769.96115 + z: 0.0 + theta: 1.3047209778 + } + v: 7.99995157016 + a: 2.20234333945e-05 + relative_time: 0.0 + } + trajectory_point { + path_point { + x: 586363.720643 + y: 4140770.73299 + z: 0.0 + theta: 1.30472097782 + } + v: 7.9999537725 + a: 2.20234333945e-05 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 586363.930999 + y: 4140771.50484 + z: 0.0 + theta: 1.30472097798 + } + v: 7.99995597485 + a: 2.20234333945e-05 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 586364.141356 + y: 4140772.27668 + z: 0.0 + theta: 1.30472097771 + } + v: 7.99995817719 + a: 2.20234333945e-05 + relative_time: 0.3 + } + trajectory_point { + path_point { + x: 586364.351712 + y: 4140773.04852 + z: 0.0 + theta: 1.30472097802 + } + v: 7.99996037953 + a: 2.20234333945e-05 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 586364.562069 + y: 4140773.82037 + z: 0.0 + theta: 1.30472097762 + } + v: 7.99996258188 + a: 2.20234333945e-05 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 586364.772425 + y: 4140774.59221 + z: 0.0 + theta: 1.30472097805 + } + v: 7.99996478422 + a: 2.20234333945e-05 + relative_time: 0.6 + } + trajectory_point { + path_point { + x: 586364.982782 + y: 4140775.36406 + z: 0.0 + theta: 1.30472097766 + } + v: 7.99996698656 + a: 2.20234333945e-05 + relative_time: 0.7 + } + trajectory_point { + path_point { + x: 586365.193139 + y: 4140776.1359 + z: 0.0 + theta: 1.30472097796 + } + v: 7.99996918891 + a: 2.20234333945e-05 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 586365.403495 + y: 4140776.90775 + z: 0.0 + theta: 1.30472097783 + } + v: 7.99997139125 + a: 2.20234333945e-05 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 586365.613852 + y: 4140777.6796 + z: 0.0 + theta: 1.30472097786 + } + v: 7.99997359359 + a: 2.20234333945e-05 + relative_time: 1.0 + } + trajectory_point { + path_point { + x: 586365.824209 + y: 4140778.45144 + z: 0.0 + theta: 1.30472097786 + } + v: 7.99997579594 + a: 2.20234333945e-05 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 586366.034566 + y: 4140779.22329 + z: 0.0 + theta: 1.30472097776 + } + v: 7.99997799828 + a: 2.20234333945e-05 + relative_time: 1.2 + } + trajectory_point { + path_point { + x: 586366.244923 + y: 4140779.99513 + z: 0.0 + theta: 1.3047209779 + } + v: 7.99998020062 + a: 2.20234333945e-05 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 586366.45528 + y: 4140780.76698 + z: 0.0 + theta: 1.30472097779 + } + v: 7.99998240297 + a: 2.20234333945e-05 + relative_time: 1.4 + } + trajectory_point { + path_point { + x: 586366.665637 + y: 4140781.53883 + z: 0.0 + theta: 1.30472097795 + } + v: 7.99998460531 + a: 2.20234333945e-05 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 586366.875994 + y: 4140782.31067 + z: 0.0 + theta: 1.30472097768 + } + v: 7.99998680765 + a: 2.20234333945e-05 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 586367.086352 + y: 4140783.08252 + z: 0.0 + theta: 1.30472097799 + } + v: 7.99998901 + a: 2.20234333945e-05 + relative_time: 1.7 + } + trajectory_point { + path_point { + x: 586367.296709 + y: 4140783.85437 + z: 0.0 + theta: 1.30472097786 + } + v: 7.99999121234 + a: 2.20234333945e-05 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 586367.507066 + y: 4140784.62622 + z: 0.0 + theta: 1.30472097774 + } + v: 7.99999341468 + a: 2.20234333945e-05 + relative_time: 1.9 + } + trajectory_point { + path_point { + x: 586367.717424 + y: 4140785.39806 + z: 0.0 + theta: 1.30472180734 + } + v: 7.99999561703 + a: 2.20234333945e-05 + relative_time: 2.0 + } + trajectory_point { + path_point { + x: 586367.92778 + y: 4140786.16991 + z: 0.0 + theta: 1.30472444734 + } + v: 7.99999781937 + a: 2.20234333945e-05 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00000002171 + a: 2.20234333945e-05 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00000222406 + a: 2.20234333945e-05 + relative_time: 2.3 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.0000044264 + a: 2.20234333945e-05 + relative_time: 2.4 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00000662874 + a: 2.20234333945e-05 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00000883109 + a: 2.20234333945e-05 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00001103343 + a: 2.20234333945e-05 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00001323577 + a: 2.20234333945e-05 + relative_time: 2.8 + } + trajectory_point { + path_point { + x: 586367.936361 + y: 4140786.2014 + z: 0.0 + theta: 1.30472444734 + } + v: 8.00001543812 + a: 2.20234333945e-05 + relative_time: 2.9 + } + } +} +perception_error_code: OK diff --git a/modules/planning/testdata/garage_test/garage_routing.pb.txt b/modules/planning/testdata/garage_test/garage_routing.pb.txt new file mode 100644 index 00000000000..89826281e8d --- /dev/null +++ b/modules/planning/testdata/garage_test/garage_routing.pb.txt @@ -0,0 +1,37 @@ +header { + module_name: "routing" + timestamp_sec: 1234.5 + sequence_num: 1 +} +routing_request { + start { + id: "1_-1" + s: 0.0 + pose { + x: 586392.840030 + y: 4140673.012320 + } + } + end { + id: "1_-1" + s: 153.0 + pose { + x: 586367.706490 + y: 4140785.357946 + } + } +} +route { + road_info { + passage_region { + segment { + id: "1_-1" + start_s: 0.0 + end_s: 153.0 + } + } + } +} +measurement { + distance: 153.0 +} diff --git a/modules/planning/testdata/garage_test/out_of_map_chassis.pb.txt b/modules/planning/testdata/garage_test/out_of_map_chassis.pb.txt new file mode 100644 index 00000000000..fc81966a441 --- /dev/null +++ b/modules/planning/testdata/garage_test/out_of_map_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 0.0 +speed_mps: 4.42500019073 +odometer_m: 0.0 +fuel_range_m: 0 +throttle_percentage: 15.2880144119 +brake_percentage: 18.4710464478 +steering_percentage: 3.34042549133 +steering_torque_nm: -0.125 +parking_brake: false +driving_mode: COMPLETE_AUTO_DRIVE +error_code: NO_ERROR +gear_location: GEAR_DRIVE +header { + timestamp_sec: 1502920656.46 + module_name: "chassis" + sequence_num: 98066 +} +signal { + turn_signal: TURN_NONE + horn: false +} diff --git a/modules/planning/testdata/garage_test/out_of_map_localization.pb.txt b/modules/planning/testdata/garage_test/out_of_map_localization.pb.txt new file mode 100644 index 00000000000..9f234efaaca --- /dev/null +++ b/modules/planning/testdata/garage_test/out_of_map_localization.pb.txt @@ -0,0 +1,49 @@ +header { + timestamp_sec: 1502920656.46 + module_name: "localization" + sequence_num: 98168 +} +pose { + position { + x: 586368.0 + y: 4140790.0 + z: -29.4437792711 + } + orientation { + qx: -0.0183705362837 + qy: -0.0228083896321 + qz: -0.141161582559 + qw: 0.989553287281 + } + linear_velocity { + x: 1.27483825735 + y: 4.30410215192 + z: -0.0719737933875 + } + linear_acceleration { + x: -0.305338168846 + y: 0.0185947050156 + z: 0.302948333827 + } + angular_velocity { + x: 0.0197592682212 + y: 0.00492437047244 + z: 0.0328439277022 + } + heading: 1.28665083367 + linear_acceleration_vrf { + x: -0.282784695629 + y: -0.0767818497207 + z: 0.315423868546 + } + angular_velocity_vrf { + x: 0.0192325517336 + y: 0.00927895368132 + z: 0.0322088755546 + } + euler_angles { + x: -0.0503704973808 + y: 0.0299223773453 + z: 1.28665083367 + } +} diff --git a/modules/planning/testdata/garage_test/out_of_map_prediction.pb.txt b/modules/planning/testdata/garage_test/out_of_map_prediction.pb.txt new file mode 100644 index 00000000000..550d62381dc --- /dev/null +++ b/modules/planning/testdata/garage_test/out_of_map_prediction.pb.txt @@ -0,0 +1,6 @@ +header { + timestamp_sec: 1502920656.19 + module_name: "prediction" + sequence_num: 5977 +} +perception_error_code: OK diff --git a/modules/planning/testdata/garage_test/result_follow_0.pb.txt b/modules/planning/testdata/garage_test/result_follow_0.pb.txt new file mode 100644 index 00000000000..43771513092 --- /dev/null +++ b/modules/planning/testdata/garage_test/result_follow_0.pb.txt @@ -0,0 +1,2283 @@ +header { + module_name: "planning" +} +is_replan: true +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: 586344.823005 + y: 4140700.15992 + theta: 1.3255010179499997 + kappa: -0.026050217221752478 + s: 9.3173624197973037e-21 + dkappa: 0 + ddkappa: 0 + } + v: 5.5999999046325684 + a: -0.11957856303099997 + relative_time: 0 +} +trajectory_point { + path_point { + x: 586344.89365840843 + y: 4140700.4306838475 + theta: 1.3196826546821905 + kappa: -0.022842232664244559 + s: 0.27983024366896669 + dkappa: 0 + ddkappa: 0 + } + v: 5.5928092537234617 + a: -0.16764959924489004 + relative_time: 0.05 +} +trajectory_point { + path_point { + x: 586344.96420611849 + y: 4140700.7010426288 + theta: 1.3138727663617173 + kappa: -0.019639047289297842 + s: 0.559241858008073 + dkappa: 0 + ddkappa: 0 + } + v: 5.5832745181682331 + a: -0.21334622784955895 + relative_time: 0.1 +} +trajectory_point { + path_point { + x: 586345.03461928433 + y: 4140700.9708857997 + theta: 1.308074120761147 + kappa: -0.016441970827951506 + s: 0.83812059609709055 + dkappa: 0 + ddkappa: 0 + } + v: 5.5715137765012894 + a: -0.25669412268720526 + relative_time: 0.15000000000000002 +} +trajectory_point { + path_point { + x: 586345.10804165993 + y: 4140701.2392568374 + theta: 1.3043852988530449 + kappa: -0.013799962186530929 + s: 1.1163580828502073 + dkappa: 0 + ddkappa: 0 + } + v: 5.5576438235649261 + a: -0.29771895760002753 + relative_time: 0.2 +} +trajectory_point { + path_point { + x: 586345.18192478642 + y: 4140701.5067339758 + theta: 1.3011406178197031 + kappa: -0.011278499421747813 + s: 1.3938517508314248 + dkappa: 0 + ddkappa: 0 + } + v: 5.54178017050933 + a: -0.33644640643022433 + relative_time: 0.25 +} +trajectory_point { + path_point { + x: 586345.25558409048 + y: 4140701.7734008152 + theta: 1.2979057819982287 + kappa: -0.008764675207384982 + s: 1.6705047760699498 + dkappa: 0 + ddkappa: 0 + } + v: 5.5240370447925775 + a: -0.37290214301999425 + relative_time: 0.3 +} +trajectory_point { + path_point { + x: 586345.33017899608 + y: 4140702.0388380215 + theta: 1.2959076015033164 + kappa: -0.0066418070760627156 + s: 1.9462260138755914 + dkappa: 0 + ddkappa: 0 + } + v: 5.5045273901806349 + a: -0.40711184121153593 + relative_time: 0.35 +} +trajectory_point { + path_point { + x: 586345.40519382013 + y: 4140702.3031011862 + theta: 1.2946366169990697 + kappa: -0.0047513966967321951 + s: 2.2209299346541531 + dkappa: 0 + ddkappa: 0 + } + v: 5.483362866747358 + a: -0.43910117484704786 + relative_time: 0.39999999999999997 +} +trajectory_point { + path_point { + x: 586345.479909 + y: 4140702.5663087605 + theta: 1.2933707094605069 + kappa: -0.0028685374990276343 + s: 2.4945365597228295 + dkappa: 0 + ddkappa: 0 + } + v: 5.4606538508744933 + a: -0.46889581776872863 + relative_time: 0.44999999999999996 +} +trajectory_point { + path_point { + x: 586345.55447562912 + y: 4140702.8283402645 + theta: 1.2926645620421555 + kappa: -0.0012112883244229408 + s: 2.7669713971255989 + dkappa: 0 + ddkappa: 0 + } + v: 5.4365094352516792 + a: -0.49652144381877689 + relative_time: 0.49999999999999994 +} +trajectory_point { + path_point { + x: 586345.62896769913 + y: 4140703.089102813 + theta: 1.292818731630667 + kappa: 0.00010204778217654019 + s: 3.0381653774486193 + dkappa: 0 + ddkappa: 0 + } + v: 5.41103742887644 + a: -0.52200372683939111 + relative_time: 0.54999999999999993 +} +trajectory_point { + path_point { + x: 586345.70310142776 + y: 4140703.3486109725 + theta: 1.292972159594133 + kappa: 0.0014090661363151801 + s: 3.3080547896356221 + dkappa: 0 + ddkappa: 0 + } + v: 5.3843443570541938 + a: -0.54536834067277 + relative_time: 0.6 +} +trajectory_point { + path_point { + x: 586345.77680216369 + y: 4140703.6068252483 + theta: 1.2932221946898386 + kappa: 0.0026573467629863465 + s: 3.5765812168033064 + dkappa: 0 + ddkappa: 0 + } + v: 5.3565354613982468 + a: -0.566640959161112 + relative_time: 0.65 +} +trajectory_point { + path_point { + x: 586345.8496164222 + y: 4140703.863819357 + theta: 1.29429806476573 + kappa: 0.0034561974846455145 + s: 3.8436914720567343 + dkappa: 0 + ddkappa: 0 + } + v: 5.3277146998297962 + a: -0.58584725614661581 + relative_time: 0.70000000000000007 +} +trajectory_point { + path_point { + x: 586345.92203154159 + y: 4140704.1194047257 + theta: 1.2953680387296673 + kappa: 0.004250669221911395 + s: 4.1093375343047249 + dkappa: 0 + ddkappa: 0 + } + v: 5.2979847465779288 + a: -0.60301290547147979 + relative_time: 0.75000000000000011 +} +trajectory_point { + path_point { + x: 586345.99403582222 + y: 4140704.3735400606 + theta: 1.296431941257727 + kappa: 0.0050406336148632082 + s: 4.3734764840752494 + dkappa: 0 + ddkappa: 0 + } + v: 5.2674469921796225 + a: -0.6181635809779028 + relative_time: 0.80000000000000016 +} +trajectory_point { + path_point { + x: 586346.06474727462 + y: 4140704.6264337413 + theta: 1.2978791365299593 + kappa: 0.0055234130775778491 + s: 4.6360704393308243 + dkappa: 0 + ddkappa: 0 + } + v: 5.2362015434797433 + a: -0.63132495650808329 + relative_time: 0.8500000000000002 +} +trajectory_point { + path_point { + x: 586346.13475666707 + y: 4140704.8778856536 + theta: 1.2994414957247689 + kappa: 0.0059070857146819433 + s: 4.8970864912839067 + dkappa: 0 + ddkappa: 0 + } + v: 5.2043472236310482 + a: -0.64252270590421989 + relative_time: 0.90000000000000024 +} +trajectory_point { + path_point { + x: 586346.20433532645 + y: 4140705.1277905069 + theta: 1.3009942420633409 + kappa: 0.0062883978032917589 + s: 5.1564966402122883 + dkappa: 0 + ddkappa: 0 + } + v: 5.1719815720941851 + a: -0.65178250300851082 + relative_time: 0.95000000000000029 +} +trajectory_point { + path_point { + x: 586346.27299033827 + y: 4140705.37626 + theta: 1.3026021427012522 + kappa: 0.0065581015262694657 + s: 5.4142777312744927 + dkappa: 0 + ddkappa: 0 + } + v: 5.1392008446376911 + a: -0.65913002166315515 + relative_time: 1.0000000000000002 +} +trajectory_point { + path_point { + x: 586346.34027435607 + y: 4140705.6233982453 + theta: 1.3043241064599216 + kappa: 0.006616893396552203 + s: 5.6704113903251665 + dkappa: 0 + ddkappa: 0 + } + v: 5.1061000133379935 + a: -0.66459093571035122 + relative_time: 1.0500000000000003 +} +trajectory_point { + path_point { + x: 586346.40712202049 + y: 4140705.8689337382 + theta: 1.3060349068523966 + kappa: 0.0066753039871260559 + s: 5.9248839597304732 + dkappa: 0 + ddkappa: 0 + } + v: 5.07277276657941 + a: -0.66819091899229777 + relative_time: 1.1000000000000003 +} +trajectory_point { + path_point { + x: 586346.47353096574 + y: 4140706.1128577897 + theta: 1.3077344733425953 + kappa: 0.0067333312309497831 + s: 6.1776864341834923 + dkappa: 0 + ddkappa: 0 + } + v: 5.0393115090541478 + a: -0.66995564535119323 + relative_time: 1.1500000000000004 +} +trajectory_point { + path_point { + x: 586346.53827977041 + y: 4140706.3554944755 + theta: 1.3093690350349885 + kappa: 0.0065822682895504345 + s: 6.4288143965196083 + dkappa: 0 + ddkappa: 0 + } + v: 5.0058073617623053 + a: -0.66991078862923614 + relative_time: 1.2000000000000004 +} +trajectory_point { + path_point { + x: 586346.60238081927 + y: 4140706.5965715018 + theta: 1.3109831907622393 + kappa: 0.0063952623641286791 + s: 6.6782679535319094 + dkappa: 0 + ddkappa: 0 + } + v: 4.9723501620118684 + a: -0.668082022668625 + relative_time: 1.2500000000000004 +} +trajectory_point { + path_point { + x: 586346.66605277662 + y: 4140706.8360347617 + theta: 1.312586540778879 + kappa: 0.0062095082538580716 + s: 6.9260516717865794 + dkappa: 0 + ddkappa: 0 + } + v: 4.9390284634187163 + a: -0.66449502131155869 + relative_time: 1.3000000000000005 +} +trajectory_point { + path_point { + x: 586346.7289512835 + y: 4140707.0739840968 + theta: 1.3141118823072313 + kappa: 0.0059765745194044779 + s: 7.1721745134382946 + dkappa: 0 + ddkappa: 0 + } + v: 4.9059295359066173 + a: -0.6591754584002355 + relative_time: 1.3500000000000005 +} +trajectory_point { + path_point { + x: 586346.79050454218 + y: 4140707.31058365 + theta: 1.3154477174334565 + kappa: 0.0056161003677485952 + s: 7.4166497720456155 + dkappa: 0 + ddkappa: 0 + } + v: 4.8731393657072273 + a: -0.65214900777685425 + relative_time: 1.4000000000000006 +} +trajectory_point { + path_point { + x: 586346.85164739878 + y: 4140707.5456056911 + theta: 1.3167746485597422 + kappa: 0.0052580296531401383 + s: 7.6594950083863838 + dkappa: 0 + ddkappa: 0 + } + v: 4.8407426553600956 + a: -0.64344134328361335 + relative_time: 1.4500000000000006 +} +trajectory_point { + path_point { + x: 586346.91238533263 + y: 4140707.779071284 + theta: 1.3180927899275459 + kappa: 0.0049023302852485833 + s: 7.9007319862731151 + dkappa: 0 + ddkappa: 0 + } + v: 4.80882282371266 + a: -0.63307813876271146 + relative_time: 1.5000000000000007 +} +trajectory_point { + path_point { + x: 586346.97213513078 + y: 4140708.0111576 + theta: 1.3191785211514817 + kappa: 0.00448069556847122 + s: 8.1403866083683969 + dkappa: 0 + ddkappa: 0 + } + v: 4.7774620059202491 + a: -0.62108506805634711 + relative_time: 1.5500000000000007 +} +trajectory_point { + path_point { + x: 586347.03111662646 + y: 4140708.2418388985 + theta: 1.3201125580326867 + kappa: 0.0040176558031044893 + s: 8.3784888520002756 + dkappa: 0 + ddkappa: 0 + } + v: 4.74674105344608 + a: -0.60748780500671873 + relative_time: 1.6000000000000008 +} +trajectory_point { + path_point { + x: 586347.08972199413 + y: 4140708.47104913 + theta: 1.3210406389325464 + kappa: 0.0035575688669159705 + s: 8.6150727049776563 + dkappa: 0 + ddkappa: 0 + } + v: 4.7167395340612615 + a: -0.59231202345602529 + relative_time: 1.6500000000000008 +} +trajectory_point { + path_point { + x: 586347.14796063059 + y: 4140708.6988250474 + theta: 1.3219629110686628 + kappa: 0.0031003609890797924 + s: 8.8501761014057028 + dkappa: 0 + ddkappa: 0 + } + v: 4.6875357318447914 + a: -0.5755833972464649 + relative_time: 1.7000000000000008 +} +trajectory_point { + path_point { + x: 586347.20532278682 + y: 4140708.925339397 + theta: 1.3225124789551341 + kappa: 0.002602038583410177 + s: 9.0838408575012188 + dkappa: 0 + ddkappa: 0 + } + v: 4.6592066471835594 + a: -0.55732760022023642 + relative_time: 1.7500000000000009 +} +trajectory_point { + path_point { + x: 586347.26225214056 + y: 4140709.1505264631 + theta: 1.3229946652838098 + kappa: 0.0020990178506186527 + s: 9.3161126074080549 + dkappa: 0 + ddkappa: 0 + } + v: 4.6318279967723424 + a: -0.53757030621953861 + relative_time: 1.8000000000000009 +} +trajectory_point { + path_point { + x: 586347.31885217607 + y: 4140709.3744108924 + theta: 1.3234740623314549 + kappa: 0.0015989069330041123 + s: 9.5470407390124947 + dkappa: 0 + ddkappa: 0 + } + v: 4.60547421361381 + a: -0.51633718908656956 + relative_time: 1.850000000000001 +} +trajectory_point { + path_point { + x: 586347.37513427576 + y: 4140709.5970445559 + theta: 1.3239474267055107 + kappa: 0.001101647809784897 + s: 9.7766783297586528 + dkappa: 0 + ddkappa: 0 + } + v: 4.58021844701852 + a: -0.49365392266352826 + relative_time: 1.900000000000001 +} +trajectory_point { + path_point { + x: 586347.43090166547 + y: 4140709.8185355766 + theta: 1.3239806116667079 + kappa: 0.000614489764376971 + s: 10.00508208246387 + dkappa: 0 + ddkappa: 0 + } + v: 4.5561325626049216 + a: -0.46954618079261295 + relative_time: 1.9500000000000011 +} +trajectory_point { + path_point { + x: 586347.48638251354 + y: 4140710.0388885429 + theta: 1.3240136261184772 + kappa: 0.00012983481283790924 + s: 10.232312261134108 + dkappa: 0 + ddkappa: 0 + } + v: 4.5332871422993533 + a: -0.44403963731602275 + relative_time: 2.0000000000000009 +} +trajectory_point { + path_point { + x: 586347.54159329645 + y: 4140710.2581688915 + theta: 1.3240464798650948 + kappa: -0.00035246097350579629 + s: 10.458436346640228 + dkappa: 0 + ddkappa: 0 + } + v: 4.5119679268059869 + a: -0.40904089295915441 + relative_time: 2.0500000000000007 +} +trajectory_point { + path_point { + x: 586347.59656645416 + y: 4140710.4764541523 + theta: 1.3240453794337146 + kappa: -0.00082722062609030507 + s: 10.683537445532611 + dkappa: 0 + ddkappa: 0 + } + v: 4.4923523024962915 + a: -0.37588717903104374 + relative_time: 2.1000000000000005 +} +trajectory_point { + path_point { + x: 586347.65144225524 + y: 4140710.6937944479 + theta: 1.3236763454760716 + kappa: -0.0012417223965227756 + s: 10.907698453109749 + dkappa: 0 + ddkappa: 0 + } + v: 4.4743493394895548 + a: -0.34452562990264424 + relative_time: 2.1500000000000004 +} +trajectory_point { + path_point { + x: 586347.70610711328 + y: 4140710.9102992848 + theta: 1.3233087299973849 + kappa: -0.001654630819347126 + s: 11.130997784258136 + dkappa: 0 + ddkappa: 0 + } + v: 4.4578707511865163 + a: -0.31490337994490947 + relative_time: 2.2 +} +trajectory_point { + path_point { + x: 586347.76057916018 + y: 4140711.1260404773 + theta: 1.3229424111623225 + kappa: -0.0020660828530520235 + s: 11.353509505616341 + dkappa: 0 + ddkappa: 0 + } + v: 4.44283089426937 + a: -0.28696756352879282 + relative_time: 2.25 +} +trajectory_point { + path_point { + x: 586347.81491952576 + y: 4140711.3410745831 + theta: 1.3225473307561377 + kappa: -0.0024648123185237337 + s: 11.575303467739074 + dkappa: 0 + ddkappa: 0 + } + v: 4.4291467687017612 + a: -0.26066531502524787 + relative_time: 2.3 +} +trajectory_point { + path_point { + x: 586347.86951821181 + y: 4140711.5553705329 + theta: 1.3218691015539932 + kappa: -0.0027541716955228395 + s: 11.796445437261269 + dkappa: 0 + ddkappa: 0 + } + v: 4.4167380177287869 + a: -0.23594376880522816 + relative_time: 2.3499999999999996 +} +trajectory_point { + path_point { + x: 586347.92397118628 + y: 4140711.7690945761 + theta: 1.3211926818221047 + kappa: -0.0030427588380242255 + s: 12.016997229062149 + dkappa: 0 + ddkappa: 0 + } + v: 4.4055269278769966 + a: -0.21275005923968715 + relative_time: 2.3999999999999995 +} +trajectory_point { + path_point { + x: 586347.978292768 + y: 4140711.9823029111 + theta: 1.3205178943133828 + kappa: -0.0033306496315792457 + s: 12.237016838429298 + dkappa: 0 + ddkappa: 0 + } + v: 4.3954384289543942 + a: -0.19103132069957834 + relative_time: 2.4499999999999993 +} +trajectory_point { + path_point { + x: 586348.03253562388 + y: 4140712.1950380979 + theta: 1.3198337818821479 + kappa: -0.0036076038644050168 + s: 12.45655857322274 + dkappa: 0 + ddkappa: 0 + } + v: 4.3864000940504324 + a: -0.1707346875558553 + relative_time: 2.4999999999999991 +} +trajectory_point { + path_point { + x: 586348.087297431 + y: 4140712.407199258 + theta: 1.318979345917459 + kappa: -0.0037199995039875582 + s: 12.67567318603901 + dkappa: 0 + ddkappa: 0 + } + v: 4.3783421395360191 + a: -0.15180729417947153 + relative_time: 2.5499999999999989 +} +trajectory_point { + path_point { + x: 586348.14196431916 + y: 4140712.6189926788 + theta: 1.3181263897433808 + kappa: -0.0038322003276326476 + s: 12.894408006375217 + dkappa: 0 + ddkappa: 0 + } + v: 4.3711974250635137 + a: -0.13419627494138042 + relative_time: 2.5999999999999988 +} +trajectory_point { + path_point { + x: 586348.19654729462 + y: 4140712.8304610006 + theta: 1.3172747428758496 + kappa: -0.0039442289250811178 + s: 13.112807072793132 + dkappa: 0 + ddkappa: 0 + } + v: 4.3649014535667279 + a: -0.11784876421253559 + relative_time: 2.6499999999999986 +} +trajectory_point { + path_point { + x: 586348.25105657429 + y: 4140713.0416438053 + theta: 1.3164242471370047 + kappa: -0.0040561062657705612 + s: 13.330911265083248 + dkappa: 0 + ddkappa: 0 + } + v: 4.3593923712609239 + a: -0.1027118963638905 + relative_time: 2.6999999999999984 +} +trajectory_point { + path_point { + x: 586348.30624502711 + y: 4140713.2523844508 + theta: 1.315574122514287 + kappa: -0.0039403579816632856 + s: 13.54875843642886 + dkappa: 0 + ddkappa: 0 + } + v: 4.3546109676428193 + a: -0.088732805766398692 + relative_time: 2.7499999999999982 +} +trajectory_point { + path_point { + x: 586348.36138369434 + y: 4140713.4629085953 + theta: 1.3147248576837307 + kappa: -0.0038227475894067 + s: 13.766383545570136 + dkappa: 0 + ddkappa: 0 + } + v: 4.3505006754905819 + a: -0.075858626791013573 + relative_time: 2.799999999999998 +} +trajectory_point { + path_point { + x: 586348.41647425608 + y: 4140713.6732490696 + theta: 1.3138763337274253 + kappa: -0.0037052398056433393 + s: 13.983818788968186 + dkappa: 0 + ddkappa: 0 + } + v: 4.3470075708638332 + a: -0.06403649380868881 + relative_time: 2.8499999999999979 +} +trajectory_point { + path_point { + x: 586348.47152420355 + y: 4140713.8834344749 + theta: 1.3130284364857423 + kappa: -0.0035878186519340449 + s: 14.201093732969138 + dkappa: 0 + ddkappa: 0 + } + v: 4.3440803731036466 + a: -0.053213541190377855 + relative_time: 2.8999999999999977 +} +trajectory_point { + path_point { + x: 586348.52712527965 + y: 4140714.0933368457 + theta: 1.3123829365779414 + kappa: -0.0032364153044940279 + s: 14.418235445968211 + dkappa: 0 + ddkappa: 0 + } + v: 4.3416704448325465 + a: -0.0433369033070341 + relative_time: 2.9499999999999975 +} +trajectory_point { + path_point { + x: 586348.58276034682 + y: 4140714.3031180231 + theta: 1.3117590827571033 + kappa: -0.0028604646974451694 + s: 14.635268630573785 + dkappa: 0 + ddkappa: 0 + } + v: 4.3397317919545113 + a: -0.034353714529611223 + relative_time: 2.9999999999999973 +} +trajectory_point { + path_point { + x: 586348.63837335317 + y: 4140714.512816017 + theta: 1.3111354762413219 + kappa: -0.0024846631647726276 + s: 14.852215755771478 + dkappa: 0 + ddkappa: 0 + } + v: 4.338221063654971 + a: -0.026211109229062612 + relative_time: 3.0499999999999972 +} +trajectory_point { + path_point { + x: 586348.69396951993 + y: 4140714.7224505143 + theta: 1.3105120589697823 + kappa: -0.0021089754253090323 + s: 15.069097189088215 + dkappa: 0 + ddkappa: 0 + } + v: 4.3370975524008077 + a: -0.018856221776341775 + relative_time: 3.099999999999997 +} +trajectory_point { + path_point { + x: 586348.749865935 + y: 4140714.9319561464 + theta: 1.3101676129724864 + kappa: -0.001755837930902521 + s: 15.285931328756297 + dkappa: 0 + ddkappa: 0 + } + v: 4.3363231939403564 + a: -0.012236186542402216 + relative_time: 3.1499999999999968 +} +trajectory_point { + path_point { + x: 586348.80582880776 + y: 4140715.1414122861 + theta: 1.3098896102117792 + kappa: -0.0014081005077791577 + s: 15.502734735877484 + dkappa: 0 + ddkappa: 0 + } + v: 4.3358625673034048 + a: -0.0062981378981976088 + relative_time: 3.1999999999999966 +} +trajectory_point { + path_point { + x: 586348.86178758228 + y: 4140715.3508530864 + theta: 1.3096116277986751 + kappa: -0.0010603885493038609 + s: 15.71952226658706 + dkappa: 0 + ddkappa: 0 + } + v: 4.3356828948011925 + a: -0.00098921021468123538 + relative_time: 3.2499999999999964 +} +trajectory_point { + path_point { + x: 586348.91774568753 + y: 4140715.560291382 + theta: 1.3093336487431795 + kappa: -0.0007126807499445516 + s: 15.936307204217902 + dkappa: 0 + ddkappa: 0 + } + v: 4.33575404202641 + a: 0.003743462137193232 + relative_time: 3.2999999999999963 +} +trajectory_point { + path_point { + x: 586348.97379059752 + y: 4140715.7697160332 + theta: 1.3092390814122048 + kappa: -0.00044113967178042307 + s: 16.153101391464567 + dkappa: 0 + ddkappa: 0 + } + v: 4.336048517853202 + a: 0.0079527447864724543 + relative_time: 3.3499999999999961 +} +trajectory_point { + path_point { + x: 586349.029875505 + y: 4140715.9791504648 + theta: 1.3092203004116714 + kappa: -0.00020105384079537806 + s: 16.369915362547353 + dkappa: 0 + ddkappa: 0 + } + v: 4.3365414744371646 + a: 0.011691503362202815 + relative_time: 3.3999999999999959 +} +trajectory_point { + path_point { + x: 586349.08596795087 + y: 4140716.1886130469 + theta: 1.3092015168867983 + kappa: 3.9064259883007452e-05 + s: 16.586758475376364 + dkappa: 0 + ddkappa: 0 + } + v: 4.3372107072153465 + a: 0.015012603493430754 + relative_time: 3.4499999999999957 +} +trajectory_point { + path_point { + x: 586349.14207008551 + y: 4140716.398111809 + theta: 1.3091827301174384 + kappa: 0.000279223836381673 + s: 16.803639043715606 + dkappa: 0 + ddkappa: 0 + } + v: 4.33803665490625 + a: 0.017968910809202876 + relative_time: 3.4999999999999956 +} +trajectory_point { + path_point { + x: 586349.19814541354 + y: 4140716.6076641819 + theta: 1.3092692925050464 + kappa: 0.00046543894864725508 + s: 17.020564469347043 + dkappa: 0 + ddkappa: 0 + } + v: 4.3390023995098268 + a: 0.02061329093856562 + relative_time: 3.5499999999999954 +} +trajectory_point { + path_point { + x: 586349.25420934358 + y: 4140716.817272895 + theta: 1.3094236378348467 + kappa: 0.00061696957477541951 + s: 17.237541374234667 + dkappa: 0 + ddkappa: 0 + } + v: 4.3400936663074834 + a: 0.022998609510565426 + relative_time: 3.5999999999999952 +} +trajectory_point { + path_point { + x: 586349.3102881189 + y: 4140717.0269371122 + theta: 1.30957802403716 + kappa: 0.00076854032487381964 + s: 17.454575732688582 + dkappa: 0 + ddkappa: 0 + } + v: 4.3412988238620782 + a: 0.0251777321542489 + relative_time: 3.649999999999995 +} +trajectory_point { + path_point { + x: 586349.36638314987 + y: 4140717.2366621047 + theta: 1.3097324549877278 + kappa: 0.00092015501123047421 + s: 17.671673003529069 + dkappa: 0 + ddkappa: 0 + } + v: 4.3426088840179204 + a: 0.02720352449866259 + relative_time: 3.6999999999999948 +} +trajectory_point { + path_point { + x: 586349.42240272125 + y: 4140717.4464776157 + theta: 1.3099391390487853 + kappa: 0.0010345951572950931 + s: 17.888838262250665 + dkappa: 0 + ddkappa: 0 + } + v: 4.3440175019007743 + a: 0.029128852172852826 + relative_time: 3.7499999999999947 +} +trajectory_point { + path_point { + x: 586349.47835286637 + y: 4140717.6563870255 + theta: 1.31019539327672 + kappa: 0.0011137795497646 + s: 18.106076333186227 + dkappa: 0 + ddkappa: 0 + } + v: 4.3455209759178528 + a: 0.031006580805866102 + relative_time: 3.7999999999999945 +} +trajectory_point { + path_point { + x: 586349.5343229766 + y: 4140717.8663713392 + theta: 1.3104517389623525 + kappa: 0.0011929921977788841 + s: 18.323391921671007 + dkappa: 0 + ddkappa: 0 + } + v: 4.347118247757825 + a: 0.032889576026748968 + relative_time: 3.8499999999999943 +} +trajectory_point { + path_point { + x: 586349.59031426674 + y: 4140718.0764351143 + theta: 1.3107081816379416 + kappa: 0.0012722348212560568 + s: 18.540789746206734 + dkappa: 0 + ddkappa: 0 + } + v: 4.34881090239081 + a: 0.034830703464547974 + relative_time: 3.8999999999999941 +} +trajectory_point { + path_point { + x: 586349.64622559235 + y: 4140718.2866102811 + theta: 1.3109816303833923 + kappa: 0.0013228609295030825 + s: 18.758274670625674 + dkappa: 0 + ddkappa: 0 + } + v: 4.3506031680683792 + a: 0.036882828748309449 + relative_time: 3.949999999999994 +} +trajectory_point { + path_point { + x: 586349.70202124817 + y: 4140718.4969116542 + theta: 1.3112782039998145 + kappa: 0.0013345125193370661 + s: 18.975851836254709 + dkappa: 0 + ddkappa: 0 + } + v: 4.3525019163235577 + a: 0.039098817507080108 + relative_time: 3.9999999999999938 +} +trajectory_point { + path_point { + x: 586349.75784180872 + y: 4140718.7073068973 + theta: 1.31157491002554 + kappa: 0.0013461693099116375 + s: 19.193526118450016 + dkappa: 0 + ddkappa: 0 + } + v: 4.3544754064440108 + a: 0.039823072070000423 + relative_time: 4.0499999999999936 +} +trajectory_point { + path_point { + x: 586349.81368789426 + y: 4140718.9177983478 + theta: 1.3118717517060798 + kappa: 0.0013578314307863921 + s: 19.41129993655607 + dkappa: 0 + ddkappa: 0 + } + v: 4.3564824819763244 + a: 0.04044283337894073 + relative_time: 4.0999999999999934 +} +trajectory_point { + path_point { + x: 586349.869473996 + y: 4140719.1284102406 + theta: 1.3121635208233329 + kappa: 0.0013506507400660882 + s: 19.629174840725394 + dkappa: 0 + ddkappa: 0 + } + v: 4.3585180081674153 + a: 0.040961697818507892 + relative_time: 4.1499999999999932 +} +trajectory_point { + path_point { + x: 586349.92512005055 + y: 4140719.3391651092 + theta: 1.3124453431629419 + kappa: 0.0013069880967944141 + s: 19.847152128868327 + dkappa: 0 + ddkappa: 0 + } + v: 4.3605770300834292 + a: 0.041383261773309324 + relative_time: 4.1999999999999931 +} +trajectory_point { + path_point { + x: 586349.98079251125 + y: 4140719.5500199897 + theta: 1.3127272992693901 + kappa: 0.001263304733914011 + s: 20.065232855644005 + dkappa: 0 + ddkappa: 0 + } + v: 4.3626547726097433 + a: 0.041711121627952423 + relative_time: 4.2499999999999929 +} +trajectory_point { + path_point { + x: 586350.03649158764 + y: 4140719.7609756738 + theta: 1.3130093901585511 + kappa: 0.0012196004870922365 + s: 20.283417841451314 + dkappa: 0 + ddkappa: 0 + } + v: 4.3647466404509654 + a: 0.0419488737670446 + relative_time: 4.2999999999999927 +} +trajectory_point { + path_point { + x: 586350.09215893655 + y: 4140719.9720481508 + theta: 1.3132760678157029 + kappa: 0.0011646835197451643 + s: 20.501707681419848 + dkappa: 0 + ddkappa: 0 + } + v: 4.366848218130932 + a: 0.042100114575193262 + relative_time: 4.3499999999999925 +} +trajectory_point { + path_point { + x: 586350.14769138163 + y: 4140720.1832649955 + theta: 1.3134998814523726 + kappa: 0.0010787947586137967 + s: 20.72010275440087 + dkappa: 0 + ddkappa: 0 + } + v: 4.3689552699927123 + a: 0.042168440437005815 + relative_time: 4.3999999999999924 +} +trajectory_point { + path_point { + x: 586350.20325062855 + y: 4140720.39458378 + theta: 1.3137238031260514 + kappa: 0.000992864544768498 + s: 20.938603231958286 + dkappa: 0 + ddkappa: 0 + } + v: 4.3710637401986041 + a: 0.042157447737089668 + relative_time: 4.4499999999999922 +} +trajectory_point { + path_point { + x: 586350.25883667031 + y: 4140720.6060044793 + theta: 1.313947832786897 + kappa: 0.00090689288872242732 + s: 21.15720908735959 + dkappa: 0 + ddkappa: 0 + } + v: 4.3731697527301359 + a: 0.042070732860052237 + relative_time: 4.499999999999992 +} +trajectory_point { + path_point { + x: 586350.3144185422 + y: 4140720.8175349981 + theta: 1.3141540429589498 + kappa: 0.00081514152894800694 + s: 21.375920104566838 + dkappa: 0 + ddkappa: 0 + } + v: 4.3752696113880676 + a: 0.041911892190500913 + relative_time: 4.5499999999999918 +} +trajectory_point { + path_point { + x: 586350.36990222591 + y: 4140721.0291996086 + theta: 1.314287962592964 + kappa: 0.000700175051097992 + s: 21.594735887227603 + dkappa: 0 + ddkappa: 0 + } + v: 4.3773597997923872 + a: 0.041684522113043111 + relative_time: 4.5999999999999917 +} +trajectory_point { + path_point { + x: 586350.42541233054 + y: 4140721.2409650125 + theta: 1.314421946002102 + kappa: 0.00058515382741867257 + s: 21.813655867665936 + dkappa: 0 + ddkappa: 0 + } + v: 4.3794369813823169 + a: 0.041392219012286235 + relative_time: 4.6499999999999915 +} +trajectory_point { + path_point { + x: 586350.48094867053 + y: 4140721.4528305023 + theta: 1.3145559927347763 + kappa: 0.00047007824145873606 + s: 22.032679315873335 + dkappa: 0 + ddkappa: 0 + } + v: 4.3814979994163048 + a: 0.0410385792728377 + relative_time: 4.6999999999999913 +} +trajectory_point { + path_point { + x: 586350.53650142322 + y: 4140721.6647977387 + theta: 1.31467473447454 + kappa: 0.000352752546705408 + s: 22.251805348499694 + dkappa: 0 + ddkappa: 0 + } + v: 4.3835398769720317 + a: 0.040627199279304908 + relative_time: 4.7499999999999911 +} +trajectory_point { + path_point { + x: 586350.59202059428 + y: 4140721.8768787561 + theta: 1.3146985491670979 + kappa: 0.00022179857212522821 + s: 22.471032937844281 + dkappa: 0 + ddkappa: 0 + } + v: 4.3855598169464107 + a: 0.040161675416295263 + relative_time: 4.7999999999999909 +} +trajectory_point { + path_point { + x: 586350.64756518975 + y: 4140722.0890568928 + theta: 1.3147223747654426 + kappa: 9.0784628138129147e-05 + s: 22.690360920846683 + dkappa: 0 + ddkappa: 0 + } + v: 4.38755520205558 + a: 0.039645604068416183 + relative_time: 4.8499999999999908 +} +trajectory_point { + path_point { + x: 586350.70313488331 + y: 4140722.301330904 + theta: 1.3147462111294765 + kappa: -4.0288515024964331e-05 + s: 22.909788008077772 + dkappa: 0 + ddkappa: 0 + } + v: 4.3895235948349143 + a: 0.039082581620275059 + relative_time: 4.8999999999999906 +} +trajectory_point { + path_point { + x: 586350.758731976 + y: 4140722.5136987315 + theta: 1.3147596512831667 + kappa: -0.00017165466826817545 + s: 23.129312792730683 + dkappa: 0 + ddkappa: 0 + } + v: 4.3914627376390136 + a: 0.038476204456479313 + relative_time: 4.94999999999999 +} +trajectory_point { + path_point { + x: 586350.81438109255 + y: 4140722.7261523618 + theta: 1.3146647525780972 + kappa: -0.00030552131665823219 + s: 23.34893375961175 + dkappa: 0 + ddkappa: 0 + } + v: 4.3933705526417111 + a: 0.037830068961636348 + relative_time: 4.99999999999999 +} +trajectory_point { + path_point { + x: 586350.8700541713 + y: 4140722.9386974731 + theta: 1.3145698130085415 + kappa: -0.00043944560732631956 + s: 23.568649294131482 + dkappa: 0 + ddkappa: 0 + } + v: 4.39524514183607 + a: 0.037147771520353562 + relative_time: 5.04999999999999 +} +trajectory_point { + path_point { + x: 586350.92575078027 + y: 4140723.151332417 + theta: 1.3144748333129423 + kappa: -0.00057342650101883713 + s: 23.78845769129552 + dkappa: 0 + ddkappa: 0 + } + v: 4.397084787034383 + a: 0.036432908517238377 + relative_time: 5.09999999999999 +} +trajectory_point { + path_point { + x: 586350.98147617176 + y: 4140723.3640539683 + theta: 1.314374826822813 + kappa: -0.00070701482979672434 + s: 24.00835716469561 + dkappa: 0 + ddkappa: 0 + } + v: 4.3988879498681737 + a: 0.03568907633689819 + relative_time: 5.14999999999999 +} +trajectory_point { + path_point { + x: 586351.0373506021 + y: 4140723.576828666 + theta: 1.314164248431982 + kappa: -0.00083072706395760816 + s: 24.228345855500542 + dkappa: 0 + ddkappa: 0 + } + v: 4.4006532717881957 + a: 0.034919871363940411 + relative_time: 5.1999999999999895 +} +trajectory_point { + path_point { + x: 586351.09324720455 + y: 4140723.7896877965 + theta: 1.3139535864619187 + kappa: -0.00095448838917388352 + s: 24.448421841447132 + dkappa: 0 + ddkappa: 0 + } + v: 4.402379574064434 + a: 0.034128889982972442 + relative_time: 5.2499999999999893 +} +trajectory_point { + path_point { + x: 586351.14916547667 + y: 4140724.0026294477 + theta: 1.3137428428234588 + kappa: -0.0010782976938316191 + s: 24.668583145831175 + dkappa: 0 + ddkappa: 0 + } + v: 4.4040658577861027 + a: 0.033319728578601708 + relative_time: 5.2999999999999892 +} +trajectory_point { + path_point { + x: 586351.20510611159 + y: 4140724.2156513459 + theta: 1.3135314815260017 + kappa: -0.0012020292336188132 + s: 24.888827746498407 + dkappa: 0 + ddkappa: 0 + } + v: 4.4057113038616471 + a: 0.032495983535435591 + relative_time: 5.349999999999989 +} +trajectory_point { + path_point { + x: 586351.26129209483 + y: 4140724.4286926808 + theta: 1.3132198431624271 + kappa: -0.0013025967535367016 + s: 25.109153584835465 + dkappa: 0 + ddkappa: 0 + } + v: 4.4073152730187433 + a: 0.031661251238081521 + relative_time: 5.3999999999999888 +} +trajectory_point { + path_point { + x: 586351.31749826274 + y: 4140724.6418105504 + theta: 1.3129080927821715 + kappa: -0.0014032004021220042 + s: 25.329558574760853 + dkappa: 0 + ddkappa: 0 + } + v: 4.408877305804296 + a: 0.030819128071146892 + relative_time: 5.4499999999999886 +} +trajectory_point { + path_point { + x: 586351.37372407864 + y: 4140724.8550029192 + theta: 1.3125962334225774 + kappa: -0.0015038392187509131 + s: 25.550040611715904 + dkappa: 0 + ddkappa: 0 + } + v: 4.4103971225844418 + a: 0.029973210419239116 + relative_time: 5.4999999999999885 +} +trajectory_point { + path_point { + x: 586351.42996900342 + y: 4140725.068267744 + theta: 1.3122842681345321 + kappa: -0.0016045122384696438 + s: 25.770597581655728 + dkappa: 0 + ddkappa: 0 + } + v: 4.4118746235445467 + a: 0.029127094666965593 + relative_time: 5.5499999999999883 +} +trajectory_point { + path_point { + x: 586351.48652699217 + y: 4140725.2815250885 + theta: 1.3118998792734846 + kappa: -0.0016699065072561586 + s: 25.9912273700402 + dkappa: 0 + ddkappa: 0 + } + v: 4.4133098886892093 + a: 0.028284377198933737 + relative_time: 5.5999999999999881 +} +trajectory_point { + path_point { + x: 586351.54311111965 + y: 4140725.494848663 + theta: 1.311513399583806 + kappa: -0.0017343610573325131 + s: 26.211927870824887 + dkappa: 0 + ddkappa: 0 + } + v: 4.414703177842255 + a: 0.027448654399750954 + relative_time: 5.6499999999999879 +} +trajectory_point { + path_point { + x: 586351.59971284121 + y: 4140725.7082385682 + theta: 1.3111267997188358 + kappa: -0.0017988356486814314 + s: 26.432696995452048 + dkappa: 0 + ddkappa: 0 + } + v: 4.4160549306467418 + a: 0.026623522654024658 + relative_time: 5.6999999999999877 +} +trajectory_point { + path_point { + x: 586351.65633162821 + y: 4140725.9216928096 + theta: 1.3107400834051957 + kappa: -0.0018633296790820475 + s: 26.653532681841558 + dkappa: 0 + ddkappa: 0 + } + v: 4.4173657665649584 + a: 0.02581257834636224 + relative_time: 5.7499999999999876 +} +trajectory_point { + path_point { + x: 586351.71329933545 + y: 4140726.1351209749 + theta: 1.310318647733645 + kappa: -0.0018813461984787004 + s: 26.874432903381894 + dkappa: 0 + ddkappa: 0 + } + v: 4.4186364848784221 + a: 0.025019417861371119 + relative_time: 5.7999999999999874 +} +trajectory_point { + path_point { + x: 586351.77030174946 + y: 4140726.348604633 + theta: 1.3098951585687304 + kappa: -0.00189676934642365 + s: 27.095395677921097 + dkappa: 0 + ddkappa: 0 + } + v: 4.4198680646878836 + a: 0.0242476375836587 + relative_time: 5.8499999999999872 +} +trajectory_point { + path_point { + x: 586351.82731980283 + y: 4140726.5621468648 + theta: 1.3094715532037455 + kappa: -0.0019121967259298212 + s: 27.316419076757718 + dkappa: 0 + ddkappa: 0 + } + v: 4.42106166491332 + a: 0.023500833897832397 + relative_time: 5.899999999999987 +} +trajectory_point { + path_point { + x: 586351.88435301429 + y: 4140726.7757458645 + theta: 1.309047835367573 + kappa: -0.001927628206732721 + s: 27.537501233631783 + dkappa: 0 + ddkappa: 0 + } + v: 4.422218624293941 + a: 0.022782603188499603 + relative_time: 5.9499999999999869 +} +trajectory_point { + path_point { + x: 586351.94173619011 + y: 4140726.9893100746 + theta: 1.3086359728613206 + kappa: -0.0018858160694833379 + s: 27.758640353715769 + dkappa: 0 + ddkappa: 0 + } + v: 4.4233404613881877 + a: 0.022096541840267735 + relative_time: 5.9999999999999867 +} +trajectory_point { + path_point { + x: 586351.99916071934 + y: 4140727.2029203405 + theta: 1.3082249721041312 + kappa: -0.0018393776726066729 + s: 27.979834662354417 + dkappa: 0 + ddkappa: 0 + } + v: 4.4244252118692238 + a: 0.0212958652074176 + relative_time: 6.0499999999999865 +} +trajectory_point { + path_point { + x: 586352.0565990709 + y: 4140727.4165820237 + theta: 1.3078138724052581 + kappa: -0.0017929280977632823 + s: 28.201082213628215 + dkappa: 0 + ddkappa: 0 + } + v: 4.4254702856798085 + a: 0.020509454827308014 + relative_time: 6.0999999999999863 +} +trajectory_point { + path_point { + x: 586352.11405073432 + y: 4140727.6302932245 + theta: 1.3074026775568115 + kappa: -0.0017464677577136293 + s: 28.422381041485977 + dkappa: 0 + ddkappa: 0 + } + v: 4.4264763931033437 + a: 0.019737189530539705 + relative_time: 6.1499999999999861 +} +trajectory_point { + path_point { + x: 586352.171811375 + y: 4140727.8439722192 + theta: 1.3070580234928668 + kappa: -0.0016323185760138831 + s: 28.643729215239212 + dkappa: 0 + ddkappa: 0 + } + v: 4.4274442383647612 + a: 0.018978948147713511 + relative_time: 6.199999999999986 +} +trajectory_point { + path_point { + x: 586352.22961445025 + y: 4140728.057688917 + theta: 1.3067200567831612 + kappa: -0.0015112774551045494 + s: 28.865124839259224 + dkappa: 0 + ddkappa: 0 + } + v: 4.4283745196305233 + a: 0.018234609509430254 + relative_time: 6.2499999999999858 +} +trajectory_point { + path_point { + x: 586352.28742942831 + y: 4140728.2714496232 + theta: 1.30638202047227 + kappa: -0.001390211409621893 + s: 29.086566052674169 + dkappa: 0 + ddkappa: 0 + } + v: 4.4292679290086232 + a: 0.017504052446290767 + relative_time: 6.2999999999999856 +} +trajectory_point { + path_point { + x: 586352.34525583207 + y: 4140728.4852525741 + theta: 1.3060439174255443 + kappa: -0.0012691214381026755 + s: 29.308051029066149 + dkappa: 0 + ddkappa: 0 + } + v: 4.4301251525485821 + a: 0.01678715578889587 + relative_time: 6.3499999999999854 +} +trajectory_point { + path_point { + x: 586352.40330236207 + y: 4140728.6990393437 + theta: 1.3058302147171506 + kappa: -0.0010987490286484987 + s: 29.529577976168273 + dkappa: 0 + ddkappa: 0 + } + v: 4.4309468702414518 + a: 0.0160837983678464 + relative_time: 6.3999999999999853 +} +trajectory_point { + path_point { + x: 586352.46138423926 + y: 4140728.9128581965 + theta: 1.3056312364152862 + kappa: -0.00092250282670742752 + s: 29.75114513556175 + dkappa: 0 + ddkappa: 0 + } + v: 4.431733756019816 + a: 0.015393859013743176 + relative_time: 6.4499999999999851 +} +trajectory_point { + path_point { + x: 586352.51947620546 + y: 4140729.1267141905 + theta: 1.3054322235480498 + kappa: -0.00074622600984483979 + s: 29.972750782372945 + dkappa: 0 + ddkappa: 0 + } + v: 4.4324864777577853 + a: 0.014717216557187031 + relative_time: 6.4999999999999849 +} +trajectory_point { + path_point { + x: 586352.57757781749 + y: 4140729.3406056934 + theta: 1.3052331776503774 + kappa: -0.00056991992367353534 + s: 30.194393224970479 + dkappa: 0 + ddkappa: 0 + } + v: 4.4332056972710037 + a: 0.014053749828778791 + relative_time: 6.5499999999999847 +} +trajectory_point { + path_point { + x: 586352.6357837331 + y: 4140729.5545052476 + theta: 1.3051586694384596 + kappa: -0.00042946178631722353 + s: 30.416070804662283 + dkappa: 0 + ddkappa: 0 + } + v: 4.4338920703166425 + a: 0.013403337659119285 + relative_time: 6.5999999999999845 +} +trajectory_point { + path_point { + x: 586352.69401103654 + y: 4140729.7684337148 + theta: 1.3051006407863361 + kappa: -0.00029373176797804871 + s: 30.637781895392692 + dkappa: 0 + ddkappa: 0 + } + v: 4.4345462465934045 + a: 0.012765858878809341 + relative_time: 6.6499999999999844 +} +trajectory_point { + path_point { + x: 586352.75224672223 + y: 4140729.9823929779 + theta: 1.3050426037804159 + kappa: -0.00015798221007534859 + s: 30.85952490343951 + dkappa: 0 + ddkappa: 0 + } + v: 4.4351688697415224 + a: 0.012141192318449786 + relative_time: 6.6999999999999842 +} +trajectory_point { + path_point { + x: 586352.81049038027 + y: 4140730.1963815321 + theta: 1.3049845588298332 + kappa: -2.2214068666101357e-05 + s: 31.081298267111094 + dkappa: 0 + ddkappa: 0 + } + v: 4.4357605773427586 + a: 0.011529216808641447 + relative_time: 6.749999999999984 +} +trajectory_point { + path_point { + x: 586352.86874474876 + y: 4140730.4103970453 + theta: 1.3050142248282055 + kappa: 7.3782031499293834e-05 + s: 31.303100456443424 + dkappa: 0 + ddkappa: 0 + } + v: 4.4363220009204056 + a: 0.010929811179985153 + relative_time: 6.7999999999999838 +} +trajectory_point { + path_point { + x: 586352.9270067442 + y: 4140730.6244388027 + theta: 1.3050564532032496 + kappa: 0.00016409323979100091 + s: 31.524929972897187 + dkappa: 0 + ddkappa: 0 + } + v: 4.4368537659392864 + a: 0.010342854263081734 + relative_time: 6.8499999999999837 +} +trajectory_point { + path_point { + x: 586352.98527553154 + y: 4140730.838505513 + theta: 1.3050986865010721 + kappa: 0.000254414976082507 + s: 31.746785349054843 + dkappa: 0 + ddkappa: 0 + } + v: 4.4373564918057529 + a: 0.00976822488853201 + relative_time: 6.8999999999999835 +} +trajectory_point { + path_point { + x: 586353.04355073336 + y: 4140731.0525957886 + theta: 1.3051409244480456 + kappa: 0.00034474665550591864 + s: 31.968665148317719 + dkappa: 0 + ddkappa: 0 + } + v: 4.4378307918676887 + a: 0.0092058018869368187 + relative_time: 6.9499999999999833 +} +trajectory_point { + path_point { + x: 586353.10177555541 + y: 4140731.2667236235 + theta: 1.3052367421766393 + kappa: 0.0003999756227846748 + s: 32.190567964603062 + dkappa: 0 + ddkappa: 0 + } + v: 4.4382772734145064 + a: 0.0086554640888969817 + relative_time: 6.9999999999999831 +} +trajectory_point { + path_point { + x: 586353.1599975127 + y: 4140731.4808746651 + theta: 1.3053406810014812 + kappa: 0.00044989372269701208 + s: 32.412492422041126 + dkappa: 0 + ddkappa: 0 + } + v: 4.4386965376771474 + a: 0.0081170903250133274 + relative_time: 7.0499999999999829 +} +trajectory_point { + path_point { + x: 586353.21822479437 + y: 4140731.6950452905 + theta: 1.3054446293319237 + kappa: 0.00049981638766490044 + s: 32.634437174672279 + dkappa: 0 + ddkappa: 0 + } + v: 4.4390891798280867 + a: 0.0075905594258866855 + relative_time: 7.0999999999999828 +} +trajectory_point { + path_point { + x: 586353.27645705512 + y: 4140731.90923423 + theta: 1.3055485865492038 + kappa: 0.00054974332159742122 + s: 32.856400906144 + dkappa: 0 + ddkappa: 0 + } + v: 4.4394557889813262 + a: 0.0070757502221178818 + relative_time: 7.1499999999999826 +} +trajectory_point { + path_point { + x: 586353.33460389636 + y: 4140732.1234647036 + theta: 1.3056785504542878 + kappa: 0.00057307694284456929 + s: 33.078382329408072 + dkappa: 0 + ddkappa: 0 + } + v: 4.4397969481923978 + a: 0.0065725415443077459 + relative_time: 7.1999999999999824 +} +trajectory_point { + path_point { + x: 586353.39274085383 + y: 4140732.3377148909 + theta: 1.3058126198400735 + kappa: 0.00059222208684987473 + s: 33.300380186417527 + dkappa: 0 + ddkappa: 0 + } + v: 4.4401132344583658 + a: 0.0060808122230571054 + relative_time: 7.2499999999999822 +} +trajectory_point { + path_point { + x: 586353.45088179293 + y: 4140732.5519797513 + theta: 1.3059466984087933 + kappa: 0.00061136854208570764 + s: 33.522393247823828 + dkappa: 0 + ddkappa: 0 + } + v: 4.4404052187178227 + a: 0.0056004410889667865 + relative_time: 7.2999999999999821 +} +trajectory_point { + path_point { + x: 586353.50902639935 + y: 4140732.7662581271 + theta: 1.3060807854303442 + kappa: 0.00063051620498161016 + s: 33.744420312673896 + dkappa: 0 + ddkappa: 0 + } + v: 4.4406734658508915 + a: 0.005131306972637615 + relative_time: 7.3499999999999819 +} +trajectory_point { + path_point { + x: 586353.567072071 + y: 4140732.980576613 + theta: 1.3062197118680547 + kappa: 0.00062823971707859306 + s: 33.9664602081072 + dkappa: 0 + ddkappa: 0 + } + v: 4.4409185346792261 + a: 0.0046732887046704273 + relative_time: 7.3999999999999817 +} +trajectory_point { + path_point { + x: 586353.62510422315 + y: 4140733.19491087 + theta: 1.3063594284724935 + kappa: 0.00062249169033838842 + s: 34.188511789052825 + dkappa: 0 + ddkappa: 0 + } + v: 4.4411409779660085 + a: 0.0042262651156660426 + relative_time: 7.4499999999999815 +} +trajectory_point { + path_point { + x: 586353.68313913723 + y: 4140733.4092553286 + theta: 1.3064991517271238 + kappa: 0.00061674339003681968 + s: 34.410573937926557 + dkappa: 0 + ddkappa: 0 + } + v: 4.441341342415952 + a: 0.0037901150362252937 + relative_time: 7.4999999999999813 +} +trajectory_point { + path_point { + x: 586353.74117652827 + y: 4140733.6236089347 + theta: 1.306638880940401 + kappa: 0.0006109948443999908 + s: 34.632645564327944 + dkappa: 0 + ddkappa: 0 + } + v: 4.4415201686753 + a: 0.0033647172969490033 + relative_time: 7.5499999999999812 +} +trajectory_point { + path_point { + x: 586353.7991173428 + y: 4140733.8379973783 + theta: 1.3067664120072453 + kappa: 0.00058852184132765712 + s: 34.8547256047374 + dkappa: 0 + ddkappa: 0 + } + v: 4.4416779913318267 + a: 0.0029499507284380007 + relative_time: 7.599999999999981 +} +trajectory_point { + path_point { + x: 586353.85704375524 + y: 4140734.0523973587 + theta: 1.3068919301677233 + kappa: 0.00056328368620817094 + s: 35.076813022213265 + dkappa: 0 + ddkappa: 0 + } + v: 4.4418153389148332 + a: 0.0025456941612931189 + relative_time: 7.6499999999999808 +} +trajectory_point { + path_point { + x: 586353.91497182811 + y: 4140734.2668034853 + theta: 1.3070174519268931 + kappa: 0.000538044807606976 + s: 35.298906806088873 + dkappa: 0 + ddkappa: 0 + } + v: 4.4419327338951549 + a: 0.0021518264261151804 + relative_time: 7.6999999999999806 +} +trajectory_point { + path_point { + x: 586353.97290130472 + y: 4140734.4812148078 + theta: 1.3071429767242755 + kappa: 0.00051280531742539 + s: 35.521005971669638 + dkappa: 0 + ddkappa: 0 + } + v: 4.4420306926851545 + a: 0.0017682263535050147 + relative_time: 7.7499999999999805 +} +trajectory_point { + path_point { + x: 586354.03074964066 + y: 4140734.6956526143 + theta: 1.3072435938566902 + kappa: 0.00047540433386919045 + s: 35.743109559930147 + dkappa: 0 + ddkappa: 0 + } + v: 4.4421097256387254 + a: 0.0013947727740634512 + relative_time: 7.79999999999998 +} +trajectory_point { + path_point { + x: 586354.08858507918 + y: 4140734.9100975152 + theta: 1.307340033554687 + kappa: 0.00043596259189686336 + s: 35.965216637211192 + dkappa: 0 + ddkappa: 0 + } + v: 4.44217033705129 + a: 0.0010313445183913125 + relative_time: 7.84999999999998 +} +trajectory_point { + path_point { + x: 586354.14642118965 + y: 4140735.1245449083 + theta: 1.3074364743733724 + kappa: 0.00039652039169310593 + s: 36.1873262949169 + dkappa: 0 + ddkappa: 0 + } + v: 4.4422130251598038 + a: 0.000677820417089435 + relative_time: 7.89999999999998 +} +trajectory_point { + path_point { + x: 586354.20425774192 + y: 4140735.33899394 + theta: 1.3075329159271885 + kappa: 0.00035707789020929362 + s: 36.409437649211782 + dkappa: 0 + ddkappa: 0 + } + v: 4.4422382821427489 + a: 0.00033407930075863776 + relative_time: 7.94999999999998 +} +trajectory_point { + path_point { + x: 586354.26203775429 + y: 4140735.5534590776 + theta: 1.3075956222607572 + kappa: 0.00030993969214978683 + s: 36.631549840717781 + dkappa: 0 + ddkappa: 0 + } + v: 4.4422465941201388 + a: -2.4980018054066022e-16 + relative_time: 7.99999999999998 +} +decision { + main_decision { + cruise { + } + } + object_decision { + decision { + id: "3_0" + perception_id: 3 + object_decision { + ignore { + } + } + } + decision { + id: "DEST" + perception_id: -1109540454 + object_decision { + ignore { + } + } + } + } +} diff --git a/modules/planning/testdata/garage_test/result_out_of_map_0.pb.txt b/modules/planning/testdata/garage_test/result_out_of_map_0.pb.txt new file mode 100644 index 00000000000..26b1d66189a --- /dev/null +++ b/modules/planning/testdata/garage_test/result_out_of_map_0.pb.txt @@ -0,0 +1,9 @@ +header { + module_name: "planning" + status { + error_code: PLANNING_ERROR + msg: "Empty path data" + } +} +is_replan: true +gear: GEAR_DRIVE diff --git a/modules/planning/testdata/garage_test/result_stop_dest_0.pb.txt b/modules/planning/testdata/garage_test/result_stop_dest_0.pb.txt new file mode 100644 index 00000000000..a8d5caaee74 --- /dev/null +++ b/modules/planning/testdata/garage_test/result_stop_dest_0.pb.txt @@ -0,0 +1,2297 @@ +header { + module_name: "planning" +} +is_replan: true +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: 586361.375698 + y: 4140761.72259 + theta: 1.2866508336700004 + kappa: 0.0057515850184131946 + s: 6.9388939039072284e-18 + dkappa: 0 + ddkappa: 0 + } + v: 4.4250001907348633 + a: -0.32678184972070007 + relative_time: 0 +} +trajectory_point { + path_point { + x: 586361.43741630274 + y: 4140761.9346159236 + theta: 1.288320264175346 + kappa: 0.0087238756166633565 + s: 0.22082604277328458 + dkappa: 0 + ddkappa: 0 + } + v: 4.4077363645606855 + a: -0.36340159807328126 + relative_time: 0.05 +} +trajectory_point { + path_point { + x: 586361.49846804526 + y: 4140762.1458896268 + theta: 1.2905042955255923 + kappa: 0.010765030862571138 + s: 0.44074403685002478 + dkappa: 0 + ddkappa: 0 + } + v: 4.3886964548186347 + a: -0.39783591295991105 + relative_time: 0.1 +} +trajectory_point { + path_point { + x: 586361.55875324144 + y: 4140762.3563492792 + theta: 1.2930151227805757 + kappa: 0.01198099799597668 + s: 0.65966788304234858 + dkappa: 0 + ddkappa: 0 + } + v: 4.3679881251033681 + a: -0.43014911752612439 + relative_time: 0.15000000000000002 +} +trajectory_point { + path_point { + x: 586361.61820903 + y: 4140762.5659275213 + theta: 1.2956896984731749 + kappa: 0.012475399619493408 + s: 0.87751678493818508 + dkappa: 0 + ddkappa: 0 + } + v: 4.34571582285227 + a: -0.46040553491745634 + relative_time: 0.2 +} +trajectory_point { + path_point { + x: 586361.6768038118 + y: 4140762.774553251 + theta: 1.2983886295883242 + kappa: 0.012349037407556555 + s: 1.0942150880934007 + dkappa: 0 + ddkappa: 0 + } + v: 4.321980779345445 + a: -0.48866948827944179 + relative_time: 0.25 +} +trajectory_point { + path_point { + x: 586361.73453188257 + y: 4140762.9821532271 + theta: 1.3009950968333215 + kappa: 0.011699437519609328 + s: 1.3096921192239352 + dkappa: 0 + ddkappa: 0 + } + v: 4.2968810097057224 + a: -0.51500530075761586 + relative_time: 0.3 +} +trajectory_point { + path_point { + x: 586361.79140850145 + y: 4140763.1886534775 + theta: 1.3034136689725193 + kappa: 0.010620400847676362 + s: 1.5238820253979379 + dkappa: 0 + ddkappa: 0 + } + v: 4.2705113128986545 + a: -0.53947729549751333 + relative_time: 0.35 +} +trajectory_point { + path_point { + x: 586361.84739704034 + y: 4140763.3939991007 + theta: 1.3055092120951204 + kappa: 0.0091603470829945514 + s: 1.7367236132279034 + dkappa: 0 + ddkappa: 0 + } + v: 4.242963271732517 + a: -0.56214979564466938 + relative_time: 0.39999999999999997 +} +trajectory_point { + path_point { + x: 586361.90262465389 + y: 4140763.59809542 + theta: 1.3072469416641195 + kappa: 0.0074753640224004695 + s: 1.948160188062809 + dkappa: 0 + ddkappa: 0 + } + v: 4.2143252528583082 + a: -0.583087124344619 + relative_time: 0.44999999999999996 +} +trajectory_point { + path_point { + x: 586361.95717354352 + y: 4140763.8008653764 + theta: 1.3086156949724481 + kappa: 0.0056629698544215078 + s: 2.1581393931802491 + dkappa: 0 + ddkappa: 0 + } + v: 4.18468240676975 + a: -0.6023536047428969 + relative_time: 0.49999999999999994 +} +trajectory_point { + path_point { + x: 586362.01110507175 + y: 4140764.0022422383 + theta: 1.3096067848210708 + kappa: 0.003799982261429784 + s: 2.3666130489785728 + dkappa: 0 + ddkappa: 0 + } + v: 4.1541166678032875 + a: -0.62001355998503827 + relative_time: 0.54999999999999993 +} +trajectory_point { + path_point { + x: 586362.06447877944 + y: 4140764.2021641308 + theta: 1.310224597932736 + kappa: 0.0019576879753058262 + s: 2.5735369921690197 + dkappa: 0 + ddkappa: 0 + } + v: 4.1227067541380888 + a: -0.63613131321657823 + relative_time: 0.6 +} +trajectory_point { + path_point { + x: 586362.117350709 + y: 4140764.4005742585 + theta: 1.3104843628487464 + kappa: 0.00020147363711042738 + s: 2.7788709149678552 + dkappa: 0 + ddkappa: 0 + } + v: 4.0905281677960472 + a: -0.65077118758305164 + relative_time: 0.65 +} +trajectory_point { + path_point { + x: 586362.1697925505 + y: 4140764.5974155981 + theta: 1.3103269379791411 + kappa: -0.00133115352816098 + s: 2.9825782042885085 + dkappa: 0 + ddkappa: 0 + } + v: 4.0576531946417758 + a: -0.66399750622999343 + relative_time: 0.70000000000000007 +} +trajectory_point { + path_point { + x: 586362.22186943726 + y: 4140764.7926365491 + theta: 1.3099081457283104 + kappa: -0.0026041801571359685 + s: 3.1846257809337062 + dkappa: 0 + ddkappa: 0 + } + v: 4.0241509043826147 + a: -0.67587459230293856 + relative_time: 0.75000000000000011 +} +trajectory_point { + path_point { + x: 586362.27360813424 + y: 4140764.9861991806 + theta: 1.3092859602891991 + kappa: -0.0035681233921692978 + s: 3.38498393878761 + dkappa: 0 + ddkappa: 0 + } + v: 3.9900871505686233 + a: -0.6864667689474222 + relative_time: 0.80000000000000016 +} +trajectory_point { + path_point { + x: 586362.32502616639 + y: 4140765.1780713256 + theta: 1.3085195413896233 + kappa: -0.0041791231761746693 + s: 3.5836261840079549 + dkappa: 0 + ddkappa: 0 + } + v: 3.9555245705925874 + a: -0.69583835930897908 + relative_time: 0.8500000000000002 +} +trajectory_point { + path_point { + x: 586362.37614288949 + y: 4140765.3682234455 + theta: 1.3076689149319753 + kappa: -0.0043724832030909953 + s: 3.7805290742181814 + dkappa: 0 + ddkappa: 0 + } + v: 3.9205225856900148 + a: -0.70405368653314437 + relative_time: 0.90000000000000024 +} +trajectory_point { + path_point { + x: 586362.42699930724 + y: 4140765.5566230393 + theta: 1.3068555544283542 + kappa: -0.0039432708363049251 + s: 3.975672057699573 + dkappa: 0 + ddkappa: 0 + } + v: 3.8851374009391373 + a: -0.711177073765453 + relative_time: 0.95000000000000029 +} +trajectory_point { + path_point { + x: 586362.477516463 + y: 4140765.7432727953 + theta: 1.3061864101140155 + kappa: -0.0030373907916861282 + s: 4.1690373125833933 + dkappa: 0 + ddkappa: 0 + } + v: 3.8494220052609087 + a: -0.71727284415144 + relative_time: 1.0000000000000002 +} +trajectory_point { + path_point { + x: 586362.52766180225 + y: 4140765.9281656784 + theta: 1.3056946396317413 + kappa: -0.0019325366917385491 + s: 4.3606095860430232 + dkappa: 0 + ddkappa: 0 + } + v: 3.8134261714190063 + a: -0.72240532083664022 + relative_time: 1.0500000000000003 +} +trajectory_point { + path_point { + x: 586362.57740542945 + y: 4140766.1112964405 + theta: 1.3054015678425843 + kappa: -0.000887271847337446 + s: 4.5503760334860939 + dkappa: 0 + ddkappa: 0 + } + v: 3.7771964560198317 + a: -0.72663882696658877 + relative_time: 1.1000000000000003 +} +trajectory_point { + path_point { + x: 586362.62671484554 + y: 4140766.2926629009 + theta: 1.3053330458597316 + kappa: -0.00013079993174649145 + s: 4.7383260577466251 + dkappa: 0 + ddkappa: 0 + } + v: 3.7407761995125095 + a: -0.73003768568682059 + relative_time: 1.1500000000000004 +} +trajectory_point { + path_point { + x: 586362.67554290383 + y: 4140766.4722690536 + theta: 1.3053705812817429 + kappa: 0.000446432236208154 + s: 4.9244511482771607 + dkappa: 0 + ddkappa: 0 + } + v: 3.7042055261888862 + a: -0.73266622014287064 + relative_time: 1.2000000000000004 +} +trajectory_point { + path_point { + x: 586362.723878657 + y: 4140766.6501110494 + theta: 1.3054880094017416 + kappa: 0.00087038486667648609 + s: 5.1087447203409058 + dkappa: 0 + ddkappa: 0 + } + v: 3.667521344183533 + a: -0.73458875348027408 + relative_time: 1.2500000000000004 +} +trajectory_point { + path_point { + x: 586362.77170949744 + y: 4140766.8261873196 + theta: 1.3056698915797593 + kappa: 0.0011463795062682269 + s: 5.2912019542038609 + dkappa: 0 + ddkappa: 0 + } + v: 3.6307573454737438 + a: -0.73586960884456576 + relative_time: 1.3000000000000005 +} +trajectory_point { + path_point { + x: 586362.81901122443 + y: 4140767.0005010962 + theta: 1.3058931503508608 + kappa: 0.0012593902301433098 + s: 5.4718196343269607 + dkappa: 0 + ddkappa: 0 + } + v: 3.593944005879536 + a: -0.73657310938128051 + relative_time: 1.3500000000000005 +} +trajectory_point { + path_point { + x: 586362.86579764029 + y: 4140767.1730467868 + theta: 1.3061210200085045 + kappa: 0.0012852367066120993 + s: 5.6505959885582069 + dkappa: 0 + ddkappa: 0 + } + v: 3.55710858506365 + a: -0.73676357823595362 + relative_time: 1.4000000000000006 +} +trajectory_point { + path_point { + x: 586362.91207013885 + y: 4140767.3438235023 + theta: 1.3063472068737418 + kappa: 0.0012335276312476088 + s: 5.8275305273248108 + dkappa: 0 + ddkappa: 0 + } + v: 3.5202751265315491 + a: -0.73650533855411981 + relative_time: 1.4500000000000006 +} +trajectory_point { + path_point { + x: 586362.957813795 + y: 4140767.512835931 + theta: 1.3065491339743727 + kappa: 0.0010854460835666865 + s: 6.0026238828253158 + dkappa: 0 + ddkappa: 0 + } + v: 3.4834644576314204 + a: -0.73586271348131427 + relative_time: 1.5000000000000007 +} +trajectory_point { + path_point { + x: 586363.00304832938 + y: 4140767.6800803742 + theta: 1.3067177237244747 + kappa: 0.000887649676191426 + s: 6.1758776482217543 + dkappa: 0 + ddkappa: 0 + } + v: 3.4466941895541749 + a: -0.73490002616307182 + relative_time: 1.5500000000000007 +} +trajectory_point { + path_point { + x: 586363.04778291413 + y: 4140767.8455568277 + theta: 1.3068564422065516 + kappa: 0.00065635024176213114 + s: 6.347294216831763 + dkappa: 0 + ddkappa: 0 + } + v: 3.4099787173334448 + a: -0.73368159974492764 + relative_time: 1.6000000000000008 +} +trajectory_point { + path_point { + x: 586363.09201537154 + y: 4140768.0092690196 + theta: 1.3069434770674615 + kappa: 0.00038889015530259476 + s: 6.5168766213207343 + dkappa: 0 + ddkappa: 0 + } + v: 3.373329219845588 + a: -0.73227175737241645 + relative_time: 1.6500000000000008 +} +trajectory_point { + path_point { + x: 586363.13576151477 + y: 4140768.1712163105 + theta: 1.3069805739409837 + kappa: 0.00011075096175592827 + s: 6.6846283728939424 + dkappa: 0 + ddkappa: 0 + } + v: 3.3367536598096841 + a: -0.73073482219107355 + relative_time: 1.7000000000000008 +} +trajectory_point { + path_point { + x: 586363.17902842758 + y: 4140768.3314007539 + theta: 1.3069834712018673 + kappa: -0.00016849136369832005 + s: 6.850553300488686 + dkappa: 0 + ddkappa: 0 + } + v: 3.3002567837875354 + a: -0.72913511734643355 + relative_time: 1.7500000000000009 +} +trajectory_point { + path_point { + x: 586363.22182379756 + y: 4140768.4898244012 + theta: 1.3069297036355192 + kappa: -0.0004378841991570816 + s: 7.0146553899664212 + dkappa: 0 + ddkappa: 0 + } + v: 3.26384012218367 + a: -0.727536965984032 + relative_time: 1.8000000000000009 +} +trajectory_point { + path_point { + x: 586363.2641583333 + y: 4140768.646488484 + theta: 1.3068355576843345 + kappa: -0.00068158091377903962 + s: 7.1769386233049 + dkappa: 0 + ddkappa: 0 + } + v: 3.2275019892453365 + a: -0.72600469124940314 + relative_time: 1.850000000000001 +} +trajectory_point { + path_point { + x: 586363.30602943909 + y: 4140768.801397657 + theta: 1.3067162525343283 + kappa: -0.00090539199724788526 + s: 7.3374068177903009 + dkappa: 0 + ddkappa: 0 + } + v: 3.1912374830625074 + a: -0.72460261628808265 + relative_time: 1.900000000000001 +} +trajectory_point { + path_point { + x: 586363.34745931765 + y: 4140768.9545495319 + theta: 1.3065522548008159 + kappa: -0.0010710002963686929 + s: 7.4960634652093754 + dkappa: 0 + ddkappa: 0 + } + v: 3.1550384855678804 + a: -0.72339506424560507 + relative_time: 1.9500000000000011 +} +trajectory_point { + path_point { + x: 586363.38843805878 + y: 4140769.1059498969 + theta: 1.3063751351271107 + kappa: -0.0011933903909337913 + s: 7.6529115710415754 + dkappa: 0 + ddkappa: 0 + } + v: 3.1188936625368848 + a: -0.72244635826750025 + relative_time: 2.0000000000000009 +} +trajectory_point { + path_point { + x: 586363.42896756355 + y: 4140769.2556017013 + theta: 1.3061841604081321 + kappa: -0.0012705541735726991 + s: 7.8079544789258666 + dkappa: 0 + ddkappa: 0 + } + v: 3.0828485942522263 + a: -0.71933344732768312 + relative_time: 2.0500000000000007 +} +trajectory_point { + path_point { + x: 586363.46906752652 + y: 4140769.4035067414 + theta: 1.3059901920596837 + kappa: -0.001253617479329019 + s: 7.9611990814793741 + dkappa: 0 + ddkappa: 0 + } + v: 3.0469625808069245 + a: -0.71608475621939238 + relative_time: 2.1000000000000005 +} +trajectory_point { + path_point { + x: 586363.50871464063 + y: 4140769.5496797441 + theta: 1.3058024891956055 + kappa: -0.001195130020094574 + s: 8.11265349969046 + dkappa: 0 + ddkappa: 0 + } + v: 3.0112423224804794 + a: -0.7127038340995745 + relative_time: 2.1500000000000004 +} +trajectory_point { + path_point { + x: 586363.54793065588 + y: 4140769.6941235634 + theta: 1.3056361959663274 + kappa: -0.0010328031718809475 + s: 8.2623261851250174 + dkappa: 0 + ddkappa: 0 + } + v: 2.9756943420945436 + a: -0.70919423012517546 + relative_time: 2.2 +} +trajectory_point { + path_point { + x: 586363.58669929835 + y: 4140769.8368517007 + theta: 1.3055006011648569 + kappa: -0.00082083506275966141 + s: 8.4102259110535726 + dkappa: 0 + ddkappa: 0 + } + v: 2.9403249850129227 + a: -0.70555949345314173 + relative_time: 2.25 +} +trajectory_point { + path_point { + x: 586363.62502193847 + y: 4140769.9778731973 + theta: 1.3053940040368752 + kappa: -0.0005622503512706285 + s: 8.5563617635784013 + dkappa: 0 + ddkappa: 0 + } + v: 2.9051404191415746 + a: -0.70180317324041941 + relative_time: 2.3 +} +trajectory_point { + path_point { + x: 586363.66289872513 + y: 4140770.1171977418 + theta: 1.3053351891230907 + kappa: -0.00034590430682249077 + s: 8.7007431327606231 + dkappa: 0 + ddkappa: 0 + } + v: 2.87014663492861 + a: -0.697928818643955 + relative_time: 2.3499999999999996 +} +trajectory_point { + path_point { + x: 586363.70032177994 + y: 4140770.2548375125 + theta: 1.3052907457502878 + kappa: -0.00014408303324384407 + s: 8.8433797037473258 + dkappa: 0 + ddkappa: 0 + } + v: 2.8353494453642925 + a: -0.69393997882069447 + relative_time: 2.3999999999999995 +} +trajectory_point { + path_point { + x: 586363.73729489057 + y: 4140770.3908018111 + theta: 1.3052895125153452 + kappa: 2.0854240364923522e-06 + s: 8.9842814478986579 + dkappa: 0 + ddkappa: 0 + } + v: 2.800754485981038 + a: -0.68984020292758419 + relative_time: 2.4499999999999993 +} +trajectory_point { + path_point { + x: 586363.77381466411 + y: 4140770.5251021818 + theta: 1.3052949971381151 + kappa: 0.00013590968838723995 + s: 9.1234586139149432 + dkappa: 0 + ddkappa: 0 + } + v: 2.7663672148534162 + a: -0.68563304012157045 + relative_time: 2.4999999999999991 +} +trajectory_point { + path_point { + x: 586363.80988188589 + y: 4140770.6577493111 + theta: 1.3053237040484806 + kappa: 0.00023141023398458166 + s: 9.2609217189637913 + dkappa: 0 + ddkappa: 0 + } + v: 2.7321929125981472 + a: -0.68132203955959958 + relative_time: 2.5499999999999989 +} +trajectory_point { + path_point { + x: 586363.84549863532 + y: 4140770.7887538 + theta: 1.3053591101471838 + kappa: 0.00031032546799281255 + s: 9.396681539807199 + dkappa: 0 + ddkappa: 0 + } + v: 2.6982366823741066 + a: -0.6769107503986177 + relative_time: 2.5999999999999988 +} +trajectory_point { + path_point { + x: 586363.88066564477 + y: 4140770.9181268774 + theta: 1.3054054886984356 + kappa: 0.00036333884615736569 + s: 9.53074910392866 + dkappa: 0 + ddkappa: 0 + } + v: 2.6645034498823206 + a: -0.67240272179557115 + relative_time: 2.6499999999999986 +} +trajectory_point { + path_point { + x: 586363.91538561229 + y: 4140771.0458794879 + theta: 1.3054556164185589 + kappa: 0.00039892463042432347 + s: 9.6631356806602753 + dkappa: 0 + ddkappa: 0 + } + v: 2.6309979633659681 + a: -0.66780150290740625 + relative_time: 2.6999999999999984 +} +trajectory_point { + path_point { + x: 586363.949661552 + y: 4140771.172022732 + theta: 1.3055094995335406 + kappa: 0.00041707867218015684 + s: 9.7938527723098563 + dkappa: 0 + ddkappa: 0 + } + v: 2.5977247936103831 + a: -0.663110642891069 + relative_time: 2.7499999999999982 +} +trajectory_point { + path_point { + x: 586363.98349534976 + y: 4140771.2965682475 + theta: 1.3055632006163918 + kappa: 0.00041871212813763284 + s: 9.922912105288038 + dkappa: 0 + ddkappa: 0 + } + v: 2.5646883339430486 + a: -0.658333690903506 + relative_time: 2.799999999999998 +} +trajectory_point { + path_point { + x: 586364.01689195377 + y: 4140771.4195270655 + theta: 1.3056166024056852 + kappa: 0.0004077970542769357 + s: 10.05032562123538 + dkappa: 0 + ddkappa: 0 + } + v: 2.5318928002336039 + a: -0.65347419610166324 + relative_time: 2.8499999999999979 +} +trajectory_point { + path_point { + x: 586364.04985327052 + y: 4140771.5409112554 + theta: 1.3056654655470625 + kappa: 0.000379204112883489 + s: 10.17610546814948 + dkappa: 0 + ddkappa: 0 + } + v: 2.4993422308938382 + a: -0.64853570764248714 + relative_time: 2.8999999999999977 +} +trajectory_point { + path_point { + x: 586364.08238468331 + y: 4140771.6607321473 + theta: 1.3057109635938049 + kappa: 0.0003383339794091682 + s: 10.300263991512077 + dkappa: 0 + ddkappa: 0 + } + v: 2.4670404868776949 + a: -0.64352177468292393 + relative_time: 2.9499999999999975 +} +trajectory_point { + path_point { + x: 586364.11448937654 + y: 4140771.7790018637 + theta: 1.305748582920826 + kappa: 0.00028543454507209547 + s: 10.422813725416164 + dkappa: 0 + ddkappa: 0 + } + v: 2.4349912516812697 + a: -0.63843594637991985 + relative_time: 2.9999999999999973 +} +trajectory_point { + path_point { + x: 586364.1461717356 + y: 4140771.8957323893 + theta: 1.3057798078571232 + kappa: 0.00022305102010826959 + s: 10.543767383693091 + dkappa: 0 + ddkappa: 0 + } + v: 2.4031980313428116 + a: -0.63328177189042112 + relative_time: 3.0499999999999972 +} +trajectory_point { + path_point { + x: 586364.177436879 + y: 4140772.0109356847 + theta: 1.3058025832778986 + kappa: 0.00015533160956886802 + s: 10.663137851039671 + dkappa: 0 + ddkappa: 0 + } + v: 2.3716641544427208 + a: -0.62806280037137407 + relative_time: 3.099999999999997 +} +trajectory_point { + path_point { + x: 586364.208287873 + y: 4140772.1246244367 + theta: 1.3058157916332451 + kappa: 8.1411911754404354e-05 + s: 10.780938174145298 + dkappa: 0 + ddkappa: 0 + } + v: 2.3403927721035513 + a: -0.62278258097972494 + relative_time: 3.1499999999999968 +} +trajectory_point { + path_point { + x: 586364.23873084388 + y: 4140772.2368106591 + theta: 1.3058228106490219 + kappa: 7.0113088681731993e-06 + s: 10.89718155281904 + dkappa: 0 + ddkappa: 0 + } + v: 2.3093868579900092 + a: -0.61744466287242 + relative_time: 3.1999999999999966 +} +trajectory_point { + path_point { + x: 586364.26876897737 + y: 4140772.3475073157 + theta: 1.3058167885947232 + kappa: -6.95396898768641e-05 + s: 11.011881331116761 + dkappa: 0 + ddkappa: 0 + } + v: 2.2786492083089547 + a: -0.61205259520640543 + relative_time: 3.2499999999999964 +} +trajectory_point { + path_point { + x: 586364.29840678978 + y: 4140772.4567271462 + theta: 1.3058088710294167 + kappa: -0.00014472927563517491 + s: 11.125050988468214 + dkappa: 0 + ddkappa: 0 + } + v: 2.2481824418093983 + a: -0.6066099271386276 + relative_time: 3.2999999999999963 +} +trajectory_point { + path_point { + x: 586364.327650777 + y: 4140772.5644824868 + theta: 1.3057843680385348 + kappa: -0.00021603731198404941 + s: 11.236704130804165 + dkappa: 0 + ddkappa: 0 + } + v: 2.2179889997825057 + a: -0.6011202078260327 + relative_time: 3.3499999999999961 +} +trajectory_point { + path_point { + x: 586364.35650115588 + y: 4140772.6707874984 + theta: 1.305760194844777 + kappa: -0.00028638558038038514 + s: 11.346854481683485 + dkappa: 0 + ddkappa: 0 + } + v: 2.1880711460615929 + a: -0.595586986425567 + relative_time: 3.3999999999999959 +} +trajectory_point { + path_point { + x: 586364.38496801513 + y: 4140772.7756537749 + theta: 1.3057228837140462 + kappa: -0.00034730910798072686 + s: 11.455515873420268 + dkappa: 0 + ddkappa: 0 + } + v: 2.1584309670221309 + a: -0.5900138120941768 + relative_time: 3.4499999999999957 +} +trajectory_point { + path_point { + x: 586364.4130497959 + y: 4140772.879096176 + theta: 1.3056832767042448 + kappa: -0.00040564200413807373 + s: 11.562702238210937 + dkappa: 0 + ddkappa: 0 + } + v: 2.1290703715817418 + a: -0.58440423398880825 + relative_time: 3.4999999999999956 +} +trajectory_point { + path_point { + x: 586364.44075410545 + y: 4140772.9811271671 + theta: 1.3056382305281058 + kappa: -0.00045526093476809369 + s: 11.668427599261344 + dkappa: 0 + ddkappa: 0 + } + v: 2.0999910912002013 + a: -0.57876180126640775 + relative_time: 3.5499999999999954 +} +trajectory_point { + path_point { + x: 586364.46808507678 + y: 4140773.0817602426 + theta: 1.3055872460059919 + kappa: -0.0004955193467571558 + s: 11.77270606191389 + dkappa: 0 + ddkappa: 0 + } + v: 2.0711946798794365 + a: -0.57309006308392152 + relative_time: 3.5999999999999952 +} +trajectory_point { + path_point { + x: 586364.49504113256 + y: 4140773.1810105215 + theta: 1.305536634041653 + kappa: -0.00053421883672573518 + s: 11.875551804774622 + dkappa: 0 + ddkappa: 0 + } + v: 2.0426825141635279 + a: -0.56739256859829568 + relative_time: 3.649999999999995 +} +trajectory_point { + path_point { + x: 586364.52163785859 + y: 4140773.2788885292 + theta: 1.3054798517459345 + kappa: -0.00055131895002319734 + s: 11.976979070840347 + dkappa: 0 + ddkappa: 0 + } + v: 2.01445579313871 + a: -0.56167286696647678 + relative_time: 3.6999999999999948 +} +trajectory_point { + path_point { + x: 586364.54786637437 + y: 4140773.3754114956 + theta: 1.3054238555549988 + kappa: -0.00056818232611364474 + s: 12.077002158625739 + dkappa: 0 + ddkappa: 0 + } + v: 1.9865155384333679 + a: -0.55593450734541072 + relative_time: 3.7499999999999947 +} +trajectory_point { + path_point { + x: 586364.57373769756 + y: 4140773.4705912913 + theta: 1.3053681630558307 + kappa: -0.00057044818651157971 + s: 12.175635413290438 + dkappa: 0 + ddkappa: 0 + } + v: 1.9588625942180407 + a: -0.55018103889204417 + relative_time: 3.7999999999999945 +} +trajectory_point { + path_point { + x: 586364.599254623 + y: 4140773.5644420614 + theta: 1.3053128300598049 + kappa: -0.0005600526015602928 + s: 12.272893217766175 + dkappa: 0 + ddkappa: 0 + } + v: 1.9314976272054198 + a: -0.544416010763323 + relative_time: 3.8499999999999943 +} +trajectory_point { + path_point { + x: 586364.6244144612 + y: 4140773.6569794719 + theta: 1.3052582714009953 + kappa: -0.00054980249377610156 + s: 12.368789983883861 + dkappa: 0 + ddkappa: 0 + } + v: 1.904421126650349 + a: -0.53864297211619372 + relative_time: 3.8999999999999941 +} +trajectory_point { + path_point { + x: 586364.64923252619 + y: 4140773.7482143138 + theta: 1.3052103748709185 + kappa: -0.0005109237040298838 + s: 12.463340143500705 + dkappa: 0 + ddkappa: 0 + } + v: 1.8776334043498248 + a: -0.53286547210760249 + relative_time: 3.949999999999994 +} +trajectory_point { + path_point { + x: 586364.67370186478 + y: 4140773.8381634448 + theta: 1.3051636378731655 + kappa: -0.00047022737590003423 + s: 12.556558139627324 + dkappa: 0 + ddkappa: 0 + } + v: 1.8511345946429973 + a: -0.52708705989449556 + relative_time: 3.9999999999999938 +} +trajectory_point { + path_point { + x: 586364.69782742334 + y: 4140773.9268405479 + theta: 1.3051202846383503 + kappa: -0.00042725188836820806 + s: 12.648458472517165 + dkappa: 0 + ddkappa: 0 + } + v: 1.8249280144198776 + a: -0.52117184600574606 + relative_time: 4.0499999999999936 +} +trajectory_point { + path_point { + x: 586364.72161847143 + y: 4140774.0142583745 + theta: 1.3050873080638297 + kappa: -0.00037465300977552866 + s: 12.739055881155512 + dkappa: 0 + ddkappa: 0 + } + v: 1.7990178391243417 + a: -0.51523088720284171 + relative_time: 4.0999999999999934 +} +trajectory_point { + path_point { + x: 586364.74507126957 + y: 4140774.1004333356 + theta: 1.3050548003349196 + kappa: -0.00032280195761316363 + s: 12.828365217908859 + dkappa: 0 + ddkappa: 0 + } + v: 1.7734053523402626 + a: -0.50926432995980675 + relative_time: 4.1499999999999932 +} +trajectory_point { + path_point { + x: 586364.768192263 + y: 4140774.1853791354 + theta: 1.305027626603902 + kappa: -0.000273984504090872 + s: 12.916401399139799 + dkappa: 0 + ddkappa: 0 + } + v: 1.7480918303277961 + a: -0.503272320750678 + relative_time: 4.1999999999999931 +} +trajectory_point { + path_point { + x: 586364.79098656285 + y: 4140774.2691099076 + theta: 1.305008049576488 + kappa: -0.0002292604355831099 + s: 13.003179404840839 + dkappa: 0 + ddkappa: 0 + } + v: 1.7230785420233958 + a: -0.49725500604949241 + relative_time: 4.2499999999999929 +} +trajectory_point { + path_point { + x: 586364.81345432461 + y: 4140774.3516412 + theta: 1.3049887529984154 + kappa: -0.00018517705860221801 + s: 13.08871427826822 + dkappa: 0 + ddkappa: 0 + } + v: 1.698366749039814 + a: -0.49121253233028683 + relative_time: 4.2999999999999927 +} +trajectory_point { + path_point { + x: 586364.83560106275 + y: 4140774.4329871675 + theta: 1.3049745391440373 + kappa: -0.00014383549380329888 + s: 13.173021125575721 + dkappa: 0 + ddkappa: 0 + } + v: 1.6739577056661004 + a: -0.48514504606709813 + relative_time: 4.3499999999999925 +} +trajectory_point { + path_point { + x: 586364.85743094329 + y: 4140774.5131623978 + theta: 1.3049659686459911 + kappa: -0.00010547545094894152 + s: 13.256115115448486 + dkappa: 0 + ddkappa: 0 + } + v: 1.6498526588676035 + a: -0.47905269373396325 + relative_time: 4.3999999999999924 +} +trajectory_point { + path_point { + x: 586364.8789461914 + y: 4140774.5921820686 + theta: 1.3049575216738016 + kappa: -6.7668288118425334e-05 + s: 13.33801147873683 + dkappa: 0 + ddkappa: 0 + } + v: 1.6260528482859695 + a: -0.472935621804919 + relative_time: 4.4499999999999922 +} +trajectory_point { + path_point { + x: 586364.90015119791 + y: 4140774.6700608348 + theta: 1.3049528309293466 + kappa: -3.1757774963368808e-05 + s: 13.418725508090064 + dkappa: 0 + ddkappa: 0 + } + v: 1.6025595062391429 + a: -0.46679397675400225 + relative_time: 4.499999999999992 +} +trajectory_point { + path_point { + x: 586364.92105016648 + y: 4140774.7468134649 + theta: 1.3049535550047455 + kappa: 1.6461040143007981e-06 + s: 13.498272557590298 + dkappa: 0 + ddkappa: 0 + } + v: 1.5793738577213667 + a: -0.46062790505524986 + relative_time: 4.5499999999999918 +} +trajectory_point { + path_point { + x: 586364.94164659071 + y: 4140774.8224549834 + theta: 1.3049542685980502 + kappa: 3.456641096437115e-05 + s: 13.576668042386261 + dkappa: 0 + ddkappa: 0 + } + v: 1.5564971204031814 + a: -0.45443755318269885 + relative_time: 4.5999999999999917 +} +trajectory_point { + path_point { + x: 586364.9619443164 + y: 4140774.8970003827 + theta: 1.304956478159857 + kappa: 6.6462154489498222e-05 + s: 13.653927438327123 + dkappa: 0 + ddkappa: 0 + } + v: 1.5339305046314262 + a: -0.44822306761038588 + relative_time: 4.6499999999999915 +} +trajectory_point { + path_point { + x: 586364.98194674926 + y: 4140774.9704648377 + theta: 1.3049648120554043 + kappa: 9.5657663588617672e-05 + s: 13.730066281596299 + dkappa: 0 + ddkappa: 0 + } + v: 1.5116752134292384 + a: -0.44198459481234803 + relative_time: 4.6999999999999913 +} +trajectory_point { + path_point { + x: 586365.00165889889 + y: 4140775.0428631478 + theta: 1.3049730250062168 + kappa: 0.00012442947609931073 + s: 13.805100168345266 + dkappa: 0 + ddkappa: 0 + } + v: 1.4897324424960532 + a: -0.43572228126262208 + relative_time: 4.7499999999999911 +} +trajectory_point { + path_point { + x: 586365.02108487836 + y: 4140775.1142104194 + theta: 1.3049811187259188 + kappa: 0.00015278359523452449 + s: 13.879044754327385 + dkappa: 0 + ddkappa: 0 + } + v: 1.4681033802076038 + a: -0.42943627343524488 + relative_time: 4.7999999999999909 +} +trajectory_point { + path_point { + x: 586365.0402264985 + y: 4140775.1845224458 + theta: 1.3049947448315757 + kappa: 0.00017883634289866693 + s: 13.951915754531708 + dkappa: 0 + ddkappa: 0 + } + v: 1.4467892076159223 + a: -0.42312671780425337 + relative_time: 4.8499999999999908 +} +trajectory_point { + path_point { + x: 586365.059089784 + y: 4140775.253813935 + theta: 1.305009319639227 + kappa: 0.00020412743604096827 + s: 14.023728942816795 + dkappa: 0 + ddkappa: 0 + } + v: 1.4257910984493383 + a: -0.41679376084368436 + relative_time: 4.8999999999999906 +} +trajectory_point { + path_point { + x: 586365.07767937134 + y: 4140775.3221000331 + theta: 1.3050236829724677 + kappa: 0.00022905156591835295 + s: 14.094500151544539 + dkappa: 0 + ddkappa: 0 + } + v: 1.4051102191124798 + a: -0.41043754902757479 + relative_time: 4.94999999999999 +} +trajectory_point { + path_point { + x: 586365.09599822527 + y: 4140775.3893964021 + theta: 1.30503954984476 + kappa: 0.0002529964287336076 + s: 14.164245271213957 + dkappa: 0 + ddkappa: 0 + } + v: 1.3847477286862726 + a: -0.40405822882996151 + relative_time: 4.99999999999999 +} +trajectory_point { + path_point { + x: 586365.11404883768 + y: 4140775.4557188926 + theta: 1.3050593283205612 + kappa: 0.00027509957634567312 + s: 14.232980250095032 + dkappa: 0 + ddkappa: 0 + } + v: 1.3647047789279414 + a: -0.39765594672488136 + relative_time: 5.04999999999999 +} +trajectory_point { + path_point { + x: 586365.13183837838 + y: 4140775.5210821405 + theta: 1.3050788207341995 + kappa: 0.00029688303934417105 + s: 14.30072109386251 + dkappa: 0 + ddkappa: 0 + } + v: 1.3449825142710086 + a: -0.3912308491863713 + relative_time: 5.09999999999999 +} +trajectory_point { + path_point { + x: 586365.14937106567 + y: 4140775.5855016443 + theta: 1.3050980317077028 + kappa: 0.00031835198302528051 + s: 14.367483865229721 + dkappa: 0 + ddkappa: 0 + } + v: 1.3255820718252944 + a: -0.38478308268846817 + relative_time: 5.14999999999999 +} +trajectory_point { + path_point { + x: 586365.16664822132 + y: 4140775.648993751 + theta: 1.3051197871667146 + kappa: 0.00033833317277321448 + s: 14.433284683582396 + dkappa: 0 + ddkappa: 0 + } + v: 1.3065045813769178 + a: -0.37831279370520882 + relative_time: 5.1999999999999895 +} +trajectory_point { + path_point { + x: 586365.1836747647 + y: 4140775.7115738853 + theta: 1.3051434408104785 + kappa: 0.00035710370651776291 + s: 14.498139724612477 + dkappa: 0 + ddkappa: 0 + } + v: 1.2877511653882956 + a: -0.37182012871063014 + relative_time: 5.2499999999999893 +} +trajectory_point { + path_point { + x: 586365.20045727235 + y: 4140775.7732570786 + theta: 1.3051667554344588 + kappa: 0.00037560520845729179 + s: 14.562065219951934 + dkappa: 0 + ddkappa: 0 + } + v: 1.2693229389981431 + a: -0.36530523417876903 + relative_time: 5.2999999999999892 +} +trajectory_point { + path_point { + x: 586365.21700002009 + y: 4140775.834059048 + theta: 1.3051897369788279 + kappa: 0.00039384239248206338 + s: 14.625077456806585 + dkappa: 0 + ddkappa: 0 + } + v: 1.2512210100214731 + a: -0.35876825658366229 + relative_time: 5.349999999999989 +} +trajectory_point { + path_point { + x: 586365.23330356716 + y: 4140775.8939965772 + theta: 1.305215022894457 + kappa: 0.00041041742378113242 + s: 14.687192777589896 + dkappa: 0 + ddkappa: 0 + } + v: 1.2334464789495971 + a: -0.35220934239934693 + relative_time: 5.3999999999999888 +} +trajectory_point { + path_point { + x: 586365.24937366741 + y: 4140775.9530850947 + theta: 1.3052415973346436 + kappa: 0.00042587967425851414 + s: 14.748427579556818 + dkappa: 0 + ddkappa: 0 + } + v: 1.2160004389501244 + a: -0.34562863809985972 + relative_time: 5.4499999999999886 +} +trajectory_point { + path_point { + x: 586365.26521700691 + y: 4140776.0113398302 + theta: 1.3052677967903876 + kappa: 0.00044112374126365015 + s: 14.808798314437583 + dkappa: 0 + ddkappa: 0 + } + v: 1.1988839758669634 + a: -0.33902629015923758 + relative_time: 5.4999999999999885 +} +trajectory_point { + path_point { + x: 586365.28083791747 + y: 4140776.0687767118 + theta: 1.3052936284247927 + kappa: 0.00045615379264576911 + s: 14.868321488071526 + dkappa: 0 + ddkappa: 0 + } + v: 1.1820981682203193 + a: -0.33240244505151734 + relative_time: 5.5499999999999883 +} +trajectory_point { + path_point { + x: 586365.29623793275 + y: 4140776.1254124823 + theta: 1.3053205012718061 + kappa: 0.00046870853661293494 + s: 14.9270136600409 + dkappa: 0 + ddkappa: 0 + } + v: 1.165644087206696 + a: -0.32575724925073596 + relative_time: 5.5999999999999881 +} +trajectory_point { + path_point { + x: 586365.31142058969 + y: 4140776.1812633979 + theta: 1.3053488328405203 + kappa: 0.00047812909861754267 + s: 14.984891443304694 + dkappa: 0 + ddkappa: 0 + } + v: 1.1495227966988961 + a: -0.31909084923093023 + relative_time: 5.6499999999999879 +} +trajectory_point { + path_point { + x: 586365.32639398589 + y: 4140776.2363445265 + theta: 1.3053767739185607 + kappa: 0.0004874198181148248 + s: 15.041971503832439 + dkappa: 0 + ddkappa: 0 + } + v: 1.1337353532460197 + a: -0.31240339146613705 + relative_time: 5.6999999999999877 +} +trajectory_point { + path_point { + x: 586365.34116250684 + y: 4140776.2906720014 + theta: 1.3054043326897586 + kappa: 0.00049658341633441365 + s: 15.098270560238037 + dkappa: 0 + ddkappa: 0 + } + v: 1.1182828060734651 + a: -0.30569502243039337 + relative_time: 5.7499999999999876 +} +trajectory_point { + path_point { + x: 586365.35573055211 + y: 4140776.3442620062 + theta: 1.3054315173635394 + kappa: 0.00050562262301507427 + s: 15.153805383413555 + dkappa: 0 + ddkappa: 0 + } + v: 1.103166197082929 + a: -0.298965888597736 + relative_time: 5.7999999999999874 +} +trajectory_point { + path_point { + x: 586365.37009586336 + y: 4140776.3971325886 + theta: 1.3054579858781057 + kappa: 0.00049229173690100284 + s: 15.208592796163064 + dkappa: 0 + ddkappa: 0 + } + v: 1.0883865608524061 + a: -0.29221613644220179 + relative_time: 5.8499999999999872 +} +trajectory_point { + path_point { + x: 586365.38426956255 + y: 4140776.4492982114 + theta: 1.3054840980580271 + kappa: 0.00047892245874343761 + s: 15.262649672836435 + dkappa: 0 + ddkappa: 0 + } + v: 1.0739449246361894 + a: -0.28544591243782769 + relative_time: 5.899999999999987 +} +trajectory_point { + path_point { + x: 586365.39825615333 + y: 4140776.5007751891 + theta: 1.3055098655283113 + kappa: 0.00046572966984091853 + s: 15.315992938963166 + dkappa: 0 + ddkappa: 0 + } + v: 1.0598423083648703 + a: -0.27865536305865046 + relative_time: 5.9499999999999869 +} +trajectory_point { + path_point { + x: 586365.41206008673 + y: 4140776.5515799061 + theta: 1.3055352964893483 + kappa: 0.00045270917162584969 + s: 15.368639570886188 + dkappa: 0 + ddkappa: 0 + } + v: 1.0460797246453373 + a: -0.27184463477870718 + relative_time: 5.9999999999999867 +} +trajectory_point { + path_point { + x: 586365.42568438663 + y: 4140776.6017291443 + theta: 1.3055589207831408 + kappa: 0.00043512757952667708 + s: 15.420606556928144 + dkappa: 0 + ddkappa: 0 + } + v: 1.0326559173724943 + a: -0.26510064390191679 + relative_time: 6.0499999999999865 +} +trajectory_point { + path_point { + x: 586365.43913098727 + y: 4140776.6512398934 + theta: 1.3055781656604224 + kappa: 0.000404724550228968 + s: 15.471910799813925 + dkappa: 0 + ddkappa: 0 + } + v: 1.0195703365415434 + a: -0.258316075841276 + relative_time: 6.0999999999999863 +} +trajectory_point { + path_point { + x: 586365.45240833145 + y: 4140776.7001274354 + theta: 1.3055971682965031 + kappa: 0.00037470421325629463 + s: 15.52256926034026 + dkappa: 0 + ddkappa: 0 + } + v: 1.0068249362009389 + a: -0.25149392302630658 + relative_time: 6.1499999999999861 +} +trajectory_point { + path_point { + x: 586365.46552088915 + y: 4140776.7484082286 + theta: 1.305615935088827 + kappa: 0.00034505646191383758 + s: 15.572598993265764 + dkappa: 0 + ddkappa: 0 + } + v: 0.99442152077765944 + a: -0.24463717788653253 + relative_time: 6.199999999999986 +} +trajectory_point { + path_point { + x: 586365.478473153 + y: 4140776.7960988157 + theta: 1.305634472467279 + kappa: 0.00031577113825801984 + s: 15.622017139829863 + dkappa: 0 + ddkappa: 0 + } + v: 0.98236174507720708 + a: -0.237748832851478 + relative_time: 6.2499999999999858 +} +trajectory_point { + path_point { + x: 586365.49126882351 + y: 4140776.8432160346 + theta: 1.3056507177136847 + kappa: 0.00028430834485625438 + s: 15.670840920271722 + dkappa: 0 + ddkappa: 0 + } + v: 0.97064711428360773 + a: -0.23083188035066707 + relative_time: 6.2999999999999856 +} +trajectory_point { + path_point { + x: 586365.50391060719 + y: 4140776.8897770694 + theta: 1.3056600280803938 + kappa: 0.00024497386973432606 + s: 15.71908762634917 + dkappa: 0 + ddkappa: 0 + } + v: 0.959278983959411 + a: -0.22388931281362384 + relative_time: 6.3499999999999854 +} +trajectory_point { + path_point { + x: 586365.51640573121 + y: 4140776.9357979409 + theta: 1.3056692304358946 + kappa: 0.0002060957208140652 + s: 15.766774613857626 + dkappa: 0 + ddkappa: 0 + } + v: 0.94825856004569054 + a: -0.21692412266987235 + relative_time: 6.3999999999999853 +} +trajectory_point { + path_point { + x: 586365.52875875833 + y: 4140776.9812954543 + theta: 1.3056783281403188 + kappa: 0.00016765970218906 + s: 15.813919295149029 + dkappa: 0 + ddkappa: 0 + } + v: 0.93758689886204361 + a: -0.20993930234893676 + relative_time: 6.4499999999999851 +} +trajectory_point { + path_point { + x: 586365.54097426345 + y: 4140777.02628646 + theta: 1.3056873245632694 + kappa: 0.00012965157794277588 + s: 15.860539131650757 + dkappa: 0 + ddkappa: 0 + } + v: 0.92726490710659126 + a: -0.20293784428034112 + relative_time: 6.4999999999999849 +} +trajectory_point { + path_point { + x: 586365.5530568331 + y: 4140777.07078785 + theta: 1.3056962230823752 + kappa: 9.2057078247705492e-05 + s: 15.906651626384559 + dkappa: 0 + ddkappa: 0 + } + v: 0.91729334185597855 + a: -0.1959227408936095 + relative_time: 6.5499999999999847 +} +trajectory_point { + path_point { + x: 586365.56501024589 + y: 4140777.1148167695 + theta: 1.3056962069470746 + kappa: 5.0942485075735521e-05 + s: 15.952274316485477 + dkappa: 0 + ddkappa: 0 + } + v: 0.907672810565374 + a: -0.188896984618266 + relative_time: 6.5999999999999845 +} +trajectory_point { + path_point { + x: 586365.57683982048 + y: 4140777.1583899753 + theta: 1.3056950193145402 + kappa: 9.73281470422566e-06 + s: 15.99742476572078 + dkappa: 0 + ddkappa: 0 + } + v: 0.89840377106847 + a: -0.18186356788383479 + relative_time: 6.6499999999999844 +} +trajectory_point { + path_point { + x: 586365.58855027286 + y: 4140777.2015244048 + theta: 1.3056938436412795 + kappa: -3.1061880745586081e-05 + s: 16.042120557008879 + dkappa: 0 + ddkappa: 0 + } + v: 0.88948653157748325 + a: -0.17482548311983984 + relative_time: 6.6999999999999842 +} +trajectory_point { + path_point { + x: 586365.60014621331 + y: 4140777.24423704 + theta: 1.3056926794644861 + kappa: -7.1457660187932781e-05 + s: 16.086379284938261 + dkappa: 0 + ddkappa: 0 + } + v: 0.88092125068315352 + a: -0.16778572275580531 + relative_time: 6.749999999999984 +} +trajectory_point { + path_point { + x: 586365.61163225258 + y: 4140777.2865448631 + theta: 1.3056915263212436 + kappa: -0.00011147058636042984 + s: 16.130218548286415 + dkappa: 0 + ddkappa: 0 + } + v: 0.87270793735474472 + a: -0.16074727922125526 + relative_time: 6.7999999999999838 +} +trajectory_point { + path_point { + x: 586365.623013313 + y: 4140777.3284647716 + theta: 1.3056882899513282 + kappa: -0.00015101954754917149 + s: 16.173655942538755 + dkappa: 0 + ddkappa: 0 + } + v: 0.86484645094004453 + a: -0.15371314494571378 + relative_time: 6.8499999999999837 +} +trajectory_point { + path_point { + x: 586365.63429486589 + y: 4140777.3700134996 + theta: 1.3056771801429108 + kappa: -0.00018985189606408323 + s: 16.216709052407545 + dkappa: 0 + ddkappa: 0 + } + v: 0.85733650116536453 + a: -0.146686312358705 + relative_time: 6.8999999999999835 +} +trajectory_point { + path_point { + x: 586365.64548032475 + y: 4140777.4112083241 + theta: 1.3056661649656525 + kappa: -0.00022835347826888894 + s: 16.25939544435083 + dkappa: 0 + ddkappa: 0 + } + v: 0.85017764813553975 + a: -0.13966977388975296 + relative_time: 6.9499999999999833 +} +trajectory_point { + path_point { + x: 586365.656574286 + y: 4140777.4520661728 + theta: 1.3056552398931915 + kappa: -0.00026654011526132187 + s: 16.301732659091357 + dkappa: 0 + ddkappa: 0 + } + v: 0.84336930233392959 + a: -0.1326665219683818 + relative_time: 6.9999999999999831 +} +trajectory_point { + path_point { + x: 586365.667581337 + y: 4140777.4926039404 + theta: 1.3056444004077377 + kappa: -0.00030442759817915694 + s: 16.343738204135512 + dkappa: 0 + ddkappa: 0 + } + v: 0.83691072462241656 + a: -0.12567954902411552 + relative_time: 7.0499999999999829 +} +trajectory_point { + path_point { + x: 586365.678506055 + y: 4140777.5328384847 + theta: 1.305633642002002 + kappa: -0.00034203168145253971 + s: 16.385429546292229 + dkappa: 0 + ddkappa: 0 + } + v: 0.83080102624140761 + a: -0.11871184748647831 + relative_time: 7.0999999999999828 +} +trajectory_point { + path_point { + x: 586365.68935387221 + y: 4140777.5727863796 + theta: 1.3056208768295148 + kappa: -0.00037829277083384724 + s: 16.426824104191933 + dkappa: 0 + ddkappa: 0 + } + v: 0.82503916880983286 + a: -0.11176640978499422 + relative_time: 7.1499999999999826 +} +trajectory_point { + path_point { + x: 586365.70013130677 + y: 4140777.6124638459 + theta: 1.305601374999761 + kappa: -0.00041078754463537756 + s: 16.46793924080545 + dkappa: 0 + ddkappa: 0 + } + v: 0.81962396432514684 + a: -0.10484622834918736 + relative_time: 7.1999999999999824 +} +trajectory_point { + path_point { + x: 586365.710840032 + y: 4140777.651888357 + theta: 1.3055819975000549 + kappa: -0.00044307515440625473 + s: 16.508792255962952 + dkappa: 0 + ddkappa: 0 + } + v: 0.81455407516332756 + a: -0.097954295608581765 + relative_time: 7.2499999999999822 +} +trajectory_point { + path_point { + x: 586365.72148456413 + y: 4140777.6910765385 + theta: 1.3055627361582123 + kappa: -0.000475169217010647 + s: 16.549400378872864 + dkappa: 0 + ddkappa: 0 + } + v: 0.80982801407887672 + a: -0.091093603992701555 + relative_time: 7.2999999999999821 +} +trajectory_point { + path_point { + x: 586365.73206939874 + y: 4140777.7300449423 + theta: 1.305543582839094 + kappa: -0.00050708328758525983 + s: 16.589780760640803 + dkappa: 0 + ddkappa: 0 + } + v: 0.80544414420481991 + a: -0.084267145931070792 + relative_time: 7.3499999999999819 +} +trajectory_point { + path_point { + x: 586365.74259900954 + y: 4140777.7688100375 + theta: 1.3055245294481552 + kappa: -0.000538830853626771 + s: 16.6299504667885 + dkappa: 0 + ddkappa: 0 + } + v: 0.80140067905270673 + a: -0.077477913853213648 + relative_time: 7.3999999999999817 +} +trajectory_point { + path_point { + x: 586365.75307786779 + y: 4140777.8073881962 + theta: 1.305505539059018 + kappa: -0.00057039355477908659 + s: 16.669926469772729 + dkappa: 0 + ddkappa: 0 + } + v: 0.79769568251261025 + a: -0.070728900188654159 + relative_time: 7.4499999999999815 +} +trajectory_point { + path_point { + x: 586365.763515799 + y: 4140777.845794233 + theta: 1.3054797079988347 + kappa: -0.00059419692662872206 + s: 16.709725641504228 + dkappa: 0 + ddkappa: 0 + } + v: 0.79432706885312765 + a: -0.064023097366916387 + relative_time: 7.4999999999999813 +} +trajectory_point { + path_point { + x: 586365.77391175006 + y: 4140777.8840458058 + theta: 1.3054539808279213 + kappa: -0.0006179045642471675 + s: 16.749364745866625 + dkappa: 0 + ddkappa: 0 + } + v: 0.79129260272137958 + a: -0.05736349781752445 + relative_time: 7.5499999999999812 +} +trajectory_point { + path_point { + x: 586365.78427008726 + y: 4140777.92215898 + theta: 1.3054283467409318 + kappa: -0.00064152642481328992 + s: 16.788860431235378 + dkappa: 0 + ddkappa: 0 + } + v: 0.7885898991430107 + a: -0.050753093970002439 + relative_time: 7.599999999999981 +} +trajectory_point { + path_point { + x: 586365.79459514481 + y: 4140777.9601497012 + theta: 1.3054027950123441 + kappa: -0.00066507239194766058 + s: 16.828229222996676 + dkappa: 0 + ddkappa: 0 + } + v: 0.78621642352218946 + a: -0.044194878253874442 + relative_time: 7.6499999999999808 +} +trajectory_point { + path_point { + x: 586365.80489122239 + y: 4140777.9980337922 + theta: 1.3053773150013157 + kappa: -0.00068855227123823374 + s: 16.86748751606639 + dkappa: 0 + ddkappa: 0 + } + v: 0.784169491641608 + a: -0.037691843098664579 + relative_time: 7.6999999999999806 +} +trajectory_point { + path_point { + x: 586365.81516258372 + y: 4140778.0358269406 + theta: 1.3053518961565378 + kappa: -0.00071197578576600489 + s: 16.906651567408986 + dkappa: 0 + ddkappa: 0 + } + v: 0.78244626966248232 + a: -0.031246980933896856 + relative_time: 7.7499999999999805 +} +trajectory_point { + path_point { + x: 586365.82541759708 + y: 4140778.0735435672 + theta: 1.3053234512196745 + kappa: -0.00073149847541301638 + s: 16.945737488556446 + dkappa: 0 + ddkappa: 0 + } + v: 0.78104377412455217 + a: -0.024863284189095475 + relative_time: 7.79999999999998 +} +trajectory_point { + path_point { + x: 586365.83565906959 + y: 4140778.111199447 + theta: 1.3052929936986342 + kappa: -0.0007484124106539741 + s: 16.98476123812722 + dkappa: 0 + ddkappa: 0 + } + v: 0.77995887194608127 + a: -0.018543745293784386 + relative_time: 7.84999999999998 +} +trajectory_point { + path_point { + x: 586365.84588837181 + y: 4140778.1488105785 + theta: 1.305262572371291 + kappa: -0.00076530624644533776 + s: 17.023738614345117 + dkappa: 0 + ddkappa: 0 + } + v: 0.77918828042385679 + a: -0.012291356677487819 + relative_time: 7.89999999999998 +} +trajectory_point { + path_point { + x: 586365.85610960564 + y: 4140778.1863920456 + theta: 1.3052321750384213 + kappa: -0.00078218675739740861 + s: 17.062685247558253 + dkappa: 0 + ddkappa: 0 + } + v: 0.77872856723319017 + a: -0.0061091107697298086 + relative_time: 7.94999999999998 +} +trajectory_point { + path_point { + x: 586365.86632682732 + y: 4140778.2239587596 + theta: 1.305201789637664 + kappa: -0.00079906064211618323 + s: 17.101616592757981 + dkappa: 0 + ddkappa: 0 + } + v: 0.77857615042791617 + a: -3.4416913763379853e-14 + relative_time: 7.99999999999998 +} +decision { + main_decision { + stop { + reason_code: STOP_REASON_DESTINATION + reason: "stop by DEST" + stop_point { + x: 586366.98236622673 + y: 4140782.340687993 + } + stop_heading: 1.312334775534727 + } + } + object_decision { + decision { + id: "3_0" + perception_id: 3 + object_decision { + ignore { + } + } + } + decision { + id: "DEST" + perception_id: -1109540454 + object_decision { + stop { + reason_code: STOP_REASON_DESTINATION + distance_s: -3 + stop_point { + x: 586366.98236622673 + y: 4140782.340687993 + } + stop_heading: 1.312334775534727 + } + } + } + } +} diff --git a/modules/planning/testdata/garage_test/result_stop_obstacle_0.pb.txt b/modules/planning/testdata/garage_test/result_stop_obstacle_0.pb.txt new file mode 100644 index 00000000000..c2a8b7df6d6 --- /dev/null +++ b/modules/planning/testdata/garage_test/result_stop_obstacle_0.pb.txt @@ -0,0 +1,2297 @@ +header { + module_name: "planning" +} +is_replan: true +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: 586343.905893 + y: 4140690.05199 + z: 0 + theta: 1.6602776953500005 + kappa: -1.9706748916978293e-17 + dkappa: 0 + ddkappa: 0 + } + v: 4.2611112594603107 + a: 1.042549250479945 + relative_time: 0 +} +trajectory_point { + path_point { + x: 586343.8875289408 + y: 4140690.2653401643 + theta: 1.6573617560034781 + kappa: -0.0068364878444014425 + s: 0.21413904601897576 + dkappa: 0 + ddkappa: 0 + } + v: 4.3001433238385811 + a: 0.52565619594470736 + relative_time: 0.05 +} +trajectory_point { + path_point { + x: 586343.86905145377 + y: 4140690.4800081104 + theta: 1.6544277555923084 + kappa: -0.013715202078562711 + s: 0.42960074762160821 + dkappa: 0 + ddkappa: 0 + } + v: 4.3143580865572959 + a: 0.049635591560362458 + relative_time: 0.1 +} +trajectory_point { + path_point { + x: 586343.85056261858 + y: 4140690.6948078969 + theta: 1.6514919530975778 + kappa: -0.020598140915870713 + s: 0.64519477630625133 + dkappa: 0 + ddkappa: 0 + } + v: 4.3057659312433918 + a: -0.38684211789747036 + relative_time: 0.15000000000000002 +} +trajectory_point { + path_point { + x: 586343.83215603745 + y: 4140690.9086520723 + theta: 1.6485692615651417 + kappa: -0.027450458632625206 + s: 0.85982966080858869 + dkappa: 0 + ddkappa: 0 + } + v: 4.2763107637625843 + a: -0.78510648765317148 + relative_time: 0.2 +} +trajectory_point { + path_point { + x: 586343.81900214439 + y: 4140691.1209244989 + theta: 1.6402259943082853 + kappa: -0.032836090547571126 + s: 1.0725094632135592 + dkappa: 0 + ddkappa: 0 + } + v: 4.2278700122193706 + a: -1.1464870729311216 + relative_time: 0.25 +} +trajectory_point { + path_point { + x: 586343.806042505 + y: 4140691.33034488 + theta: 1.6319749961018992 + kappa: -0.038144513157810006 + s: 1.2823304550672965 + dkappa: 0 + ddkappa: 0 + } + v: 4.1622546269570284 + a: -1.4723134289557018 + relative_time: 0.3 +} +trajectory_point { + path_point { + x: 586343.79330976948 + y: 4140691.5360986236 + theta: 1.6238683922601842 + kappa: -0.043359993185096916 + s: 1.4884777934890669 + dkappa: 0 + ddkappa: 0 + } + v: 4.0812090805576169 + a: -1.7639151109512916 + relative_time: 0.35 +} +trajectory_point { + path_point { + x: 586343.78084898228 + y: 4140691.7374578379 + theta: 1.6159358955004837 + kappa: -0.048464079983697755 + s: 1.6902221972832103 + dkappa: 0 + ddkappa: 0 + } + v: 3.9864113678419764 + a: -2.0226216741422727 + relative_time: 0.39999999999999997 +} +trajectory_point { + path_point { + x: 586343.7753970616 + y: 4140691.93404966 + theta: 1.6056404576495644 + kappa: -0.0512065571301521 + s: 1.8869166230510772 + dkappa: 0 + ddkappa: 0 + } + v: 3.8794730058697273 + a: -2.249762673753025 + relative_time: 0.44999999999999996 +} +trajectory_point { + path_point { + x: 586343.77164012974 + y: 4140692.12508904 + theta: 1.5950469694209968 + kappa: -0.053357261390879512 + s: 2.0779929413029694 + dkappa: 0 + ddkappa: 0 + } + v: 3.7619390339392718 + a: -2.4466676650079293 + relative_time: 0.49999999999999994 +} +trajectory_point { + path_point { + x: 586343.76800334512 + y: 4140692.3100189548 + theta: 1.5847911121032348 + kappa: -0.055439185833018156 + s: 2.2629586125700776 + dkappa: 0 + ddkappa: 0 + } + v: 3.6352880135877923 + a: -2.6146662031313666 + relative_time: 0.54999999999999993 +} +trajectory_point { + path_point { + x: 586343.76449497114 + y: 4140692.4884192119 + theta: 1.574898347399927 + kappa: -0.057447599971583628 + s: 2.4413933635164207 + dkappa: 0 + ddkappa: 0 + } + v: 3.5009320285912526 + a: -2.7550878433477166 + relative_time: 0.6 +} +trajectory_point { + path_point { + x: 586343.76112191554 + y: 4140692.6599385478 + theta: 1.5653898702407318 + kappa: -0.05937854931717762 + s: 2.6129458630507871 + dkappa: 0 + ddkappa: 0 + } + v: 3.3602166849643988 + a: -2.8692621408813612 + relative_time: 0.65 +} +trajectory_point { + path_point { + x: 586343.76627640612 + y: 4140692.8242353019 + theta: 1.5555364136468603 + kappa: -0.059393394506993206 + s: 2.7773303984386706 + dkappa: 0 + ddkappa: 0 + } + v: 3.214421110960755 + a: -2.958518650956679 + relative_time: 0.70000000000000007 +} +trajectory_point { + path_point { + x: 586343.77145913593 + y: 4140692.9811428841 + theta: 1.546099697573537 + kappa: -0.059350669541501616 + s: 2.9343235514142112 + dkappa: 0 + ddkappa: 0 + } + v: 3.0647579570726298 + a: -3.0241869287980525 + relative_time: 0.75000000000000011 +} +trajectory_point { + path_point { + x: 586343.77639242914 + y: 4140693.1304987548 + theta: 1.5371157105864908 + kappa: -0.059310000860466144 + s: 3.0837608742921336 + dkappa: 0 + ddkappa: 0 + } + v: 2.9123733960311089 + a: -3.0675965296298604 + relative_time: 0.80000000000000016 +} +trajectory_point { + path_point { + x: 586343.78107269423 + y: 4140693.2721941723 + theta: 1.5285925489586925 + kappa: -0.059271418073577234 + s: 3.2255335660796867 + dkappa: 0 + ddkappa: 0 + } + v: 2.7583471228060628 + a: -3.0900770086764857 + relative_time: 0.8500000000000002 +} +trajectory_point { + path_point { + x: 586343.78549806634 + y: 4140693.4061726881 + theta: 1.5205347408548677 + kappa: -0.05923493655111442 + s: 3.3595851485885815 + dkappa: 0 + ddkappa: 0 + } + v: 2.6036923546061406 + a: -3.0929579211623071 + relative_time: 0.90000000000000024 +} +trajectory_point { + path_point { + x: 586343.78966829879 + y: 4140693.5324268285 + theta: 1.512943495977439 + kappa: -0.059200558328527178 + s: 3.4859081425469327 + dkappa: 0 + ddkappa: 0 + } + v: 2.4493558308787717 + a: -3.0775688223117057 + relative_time: 0.95000000000000029 +} +trajectory_point { + path_point { + x: 586343.797351569 + y: 4140693.650766396 + theta: 1.5061027462258818 + kappa: -0.05865606588616689 + s: 3.6045407437111949 + dkappa: 0 + ddkappa: 0 + } + v: 2.2962178133101703 + a: -3.045239267349062 + relative_time: 1.0000000000000002 +} +trajectory_point { + path_point { + x: 586343.80711834785 + y: 4140693.7613587203 + theta: 1.4998954723366575 + kappa: -0.057796179325286905 + s: 3.7155634989781019 + dkappa: 0 + ddkappa: 0 + } + v: 2.1450920858253268 + a: -2.9972988114987573 + relative_time: 1.0500000000000003 +} +trajectory_point { + path_point { + x: 586343.81622620043 + y: 4140693.8644898124 + theta: 1.4941058332747377 + kappa: -0.056994305952769116 + s: 3.8190959824966093 + dkappa: 0 + ddkappa: 0 + } + v: 1.9967259545880158 + a: -2.9350770099851711 + relative_time: 1.1000000000000003 +} +trajectory_point { + path_point { + x: 586343.82468878629 + y: 4140693.9603143474 + theta: 1.4887257312038518 + kappa: -0.056249243122845891 + s: 3.9152934717798282 + dkappa: 0 + ddkappa: 0 + } + v: 1.8518002480007913 + a: -2.8599034180326859 + relative_time: 1.1500000000000004 +} +trajectory_point { + path_point { + x: 586343.83252261416 + y: 4140694.0490192557 + theta: 1.4837450886210863 + kappa: -0.055559537406238785 + s: 4.0043436238169692 + dkappa: 0 + ddkappa: 0 + } + v: 1.7109293167049886 + a: -2.7731075908656782 + relative_time: 1.2000000000000004 +} +trajectory_point { + path_point { + x: 586343.8397467481 + y: 4140694.1308204094 + theta: 1.4791520664281246 + kappa: -0.054923510334130343 + s: 4.086463151185276 + dkappa: 0 + ddkappa: 0 + } + v: 1.5746610335807252 + a: -2.6760190837085331 + relative_time: 1.2500000000000004 +} +trajectory_point { + path_point { + x: 586343.84638251644 + y: 4140694.2059593117 + theta: 1.4749332789209579 + kappa: -0.054339284142135728 + s: 4.1618944981619714 + dkappa: 0 + ddkappa: 0 + } + v: 1.4434767937468989 + a: -2.5699674517856277 + relative_time: 1.3000000000000005 +} +trajectory_point { + path_point { + x: 586343.85245321854 + y: 4140694.274699789 + theta: 1.4710740052888112 + kappa: -0.053804807514274536 + s: 4.23090251683619 + dkappa: 0 + ddkappa: 0 + } + v: 1.3177915145611858 + a: -2.4562822503213466 + relative_time: 1.3500000000000005 +} +trajectory_point { + path_point { + x: 586343.85798383225 + y: 4140694.3373246761 + theta: 1.467558397452817 + kappa: -0.053317881326942464 + s: 4.2937711432209227 + dkappa: 0 + ddkappa: 0 + } + v: 1.1979536356200473 + a: -2.3362930345400668 + relative_time: 1.4000000000000006 +} +trajectory_point { + path_point { + x: 586343.86300072225 + y: 4140694.3941325075 + theta: 1.4643696842678708 + kappa: -0.052876184392883149 + s: 4.3508000733649483 + dkappa: 0 + ddkappa: 0 + } + v: 1.0842451187587216 + a: -2.2113293596661703 + relative_time: 1.4500000000000006 +} +trajectory_point { + path_point { + x: 586343.86753134709 + y: 4140694.4454342048 + theta: 1.4614903722588777 + kappa: -0.052477299205159769 + s: 4.4023014394647824 + dkappa: 0 + ddkappa: 0 + } + v: 0.97688144805123267 + a: -2.0827207809240385 + relative_time: 1.5000000000000007 +} +trajectory_point { + path_point { + x: 586343.87160396692 + y: 4140694.4915497671 + theta: 1.4589024431686959 + kappa: -0.052118737681126896 + s: 4.4485964859766058 + dkappa: 0 + ddkappa: 0 + } + v: 0.87601162981038261 + a: -1.951796853538049 + relative_time: 1.5500000000000007 +} +trajectory_point { + path_point { + x: 586343.87573107542 + y: 4140694.5327503276 + theta: 1.4566835850194659 + kappa: -0.051758101999428326 + s: 4.4900122457282139 + dkappa: 0 + ddkappa: 0 + } + v: 0.78171819258775388 + a: -1.8198871327325845 + relative_time: 1.6000000000000008 +} +trajectory_point { + path_point { + x: 586343.88076022966 + y: 4140694.5692716548 + theta: 1.4549775994279264 + kappa: -0.05132537966101338 + s: 4.5268782160309469 + dkappa: 0 + ddkappa: 0 + } + v: 0.69401718717370864 + a: -1.6883211737320267 + relative_time: 1.6500000000000008 +} +trajectory_point { + path_point { + x: 586343.88521354611 + y: 4140694.6016112929 + theta: 1.4534668506660251 + kappa: -0.050942204006195195 + s: 4.5595230347916376 + dkappa: 0 + ddkappa: 0 + } + v: 0.61285818659739455 + a: -1.5584285317607556 + relative_time: 1.7000000000000008 +} +trajectory_point { + path_point { + x: 586343.889135286 + y: 4140694.6300906618 + theta: 1.4521363638264644 + kappa: -0.050604766678426068 + s: 4.588271156624538 + dkappa: 0 + ddkappa: 0 + } + v: 0.53812428612673946 + a: -1.4315387620431488 + relative_time: 1.7500000000000009 +} +trajectory_point { + path_point { + x: 586343.89256868616 + y: 4140694.6550237471 + theta: 1.4509715001701946 + kappa: -0.05030934743832248 + s: 4.6134395289632728 + dkappa: 0 + ddkappa: 0 + } + v: 0.46963210326844562 + a: -1.3089814198035929 + relative_time: 1.8000000000000009 +} +trajectory_point { + path_point { + x: 586343.89555550623 + y: 4140694.6767138029 + theta: 1.4499581137098358 + kappa: -0.050052353178523572 + s: 4.6353342681727705 + dkappa: 0 + ddkappa: 0 + } + v: 0.40713177776800569 + a: -1.1920860602664596 + relative_time: 1.850000000000001 +} +trajectory_point { + path_point { + x: 586343.898135575 + y: 4140694.6954500605 + theta: 1.4490827071976831 + kappa: -0.049830356938549786 + s: 4.6542473356611991 + dkappa: 0 + ddkappa: 0 + } + v: 0.35030697160968582 + a: -1.0821822386561384 + relative_time: 1.900000000000001 +} +trajectory_point { + path_point { + x: 586343.9003463363 + y: 4140694.7115044375 + theta: 1.4483325876310864 + kappa: -0.049640136919661106 + s: 4.670453213991915 + dkappa: 0 + ddkappa: 0 + } + v: 0.29877486901654038 + a: -0.980599510197004 + relative_time: 1.9500000000000011 +} +trajectory_point { + path_point { + x: 586343.90222239681 + y: 4140694.7251282427 + theta: 1.4476960213723427 + kappa: -0.049478715499715817 + s: 4.6842055829953884 + dkappa: 0 + ddkappa: 0 + } + v: 0.25208617645038234 + a: -0.88866743011342053 + relative_time: 2.0000000000000009 +} +trajectory_point { + path_point { + x: 586343.90379642509 + y: 4140694.736558714 + theta: 1.4471619295351419 + kappa: -0.049343281747743037 + s: 4.6957439211743353 + dkappa: 0 + ddkappa: 0 + } + v: 0.21032746573476135 + a: -0.783048653548593 + relative_time: 2.0500000000000007 +} +trajectory_point { + path_point { + x: 586343.90510317113 + y: 4140694.7460482023 + theta: 1.4467185252965169 + kappa: -0.049230845706733709 + s: 4.7053229592336825 + dkappa: 0 + ddkappa: 0 + } + v: 0.17364703223732858 + a: -0.68548660847544851 + relative_time: 2.1000000000000005 +} +trajectory_point { + path_point { + x: 586343.90617591632 + y: 4140694.7538383929 + theta: 1.4463545186125195 + kappa: -0.0491385437577319 + s: 4.7131866644522526 + dkappa: 0 + ddkappa: 0 + } + v: 0.14164949932006629 + a: -0.59568289743133185 + relative_time: 2.1500000000000004 +} +trajectory_point { + path_point { + x: 586343.90704529569 + y: 4140694.7601517597 + theta: 1.4460595162190273 + kappa: -0.049063739944611065 + s: 4.7195596082737925 + dkappa: 0 + ddkappa: 0 + } + v: 0.11395441021808941 + a: -0.51333912295358775 + relative_time: 2.2 +} +trajectory_point { + path_point { + x: 586343.90773940086 + y: 4140694.7651922973 + theta: 1.445823987411986 + kappa: -0.049004017217811419 + s: 4.7246477123006354 + dkappa: 0 + ddkappa: 0 + } + v: 0.090196228039645721 + a: -0.43815688757956117 + relative_time: 2.25 +} +trajectory_point { + path_point { + x: 586343.90828388056 + y: 4140694.7691462664 + theta: 1.4456392297408065 + kappa: -0.048957168678077256 + s: 4.7286389942873539 + dkappa: 0 + ddkappa: 0 + } + v: 0.070024335766115747 + a: -0.36983779384659665 + relative_time: 2.3 +} +trajectory_point { + path_point { + x: 586343.90870204312 + y: 4140694.77218293 + theta: 1.4454973346384807 + kappa: -0.048921188820194243 + s: 4.7317043141344186 + dkappa: 0 + ddkappa: 0 + } + v: 0.053103036252012736 + a: -0.30808344429203893 + relative_time: 2.3499999999999996 +} +trajectory_point { + path_point { + x: 586343.90901495772 + y: 4140694.7744552922 + theta: 1.4453911530055916 + kappa: -0.048894264776726808 + s: 4.7339981198818544 + dkappa: 0 + ddkappa: 0 + } + v: 0.039111552224982776 + a: -0.25259544145323276 + relative_time: 2.3999999999999995 +} +trajectory_point { + path_point { + x: 586343.90924155689 + y: 4140694.7761008372 + theta: 1.4453142607607021 + kappa: -0.048874767561755419 + s: 4.7356591937028965 + dkappa: 0 + ddkappa: 0 + } + v: 0.027744026285804635 + a: -0.20307538786752288 + relative_time: 2.4499999999999993 +} +trajectory_point { + path_point { + x: 586343.90939873736 + y: 4140694.7772422703 + theta: 1.4452609243662031 + kappa: -0.048861243314613972 + s: 4.7368113978976458 + dkappa: 0 + ddkappa: 0 + } + v: 0.018709520908389871 + a: -0.15922488607225416 + relative_time: 2.4999999999999991 +} +trajectory_point { + path_point { + x: 586343.90950146271 + y: 4140694.7779882536 + theta: 1.4452260663362602 + kappa: -0.048852404543627048 + s: 4.73756442088673 + dkappa: 0 + ddkappa: 0 + } + v: 0.011732018439782832 + a: -0.12074553860477111 + relative_time: 2.5499999999999989 +} +trajectory_point { + path_point { + x: 586343.90956286446 + y: 4140694.7784341481 + theta: 1.445205230731722 + kappa: -0.048847121369847292 + s: 4.7380145232049555 + dkappa: 0 + ddkappa: 0 + } + v: 0.0065504211001606583 + a: -0.087338948002418593 + relative_time: 2.5999999999999988 +} +trajectory_point { + path_point { + x: 586343.90959434409 + y: 4140694.778662751 + theta: 1.4451945486456059 + kappa: -0.048844412770792753 + s: 4.7382452834949662 + dkappa: 0 + ddkappa: 0 + } + v: 0.0029185509828330847 + a: -0.058706716802541359 + relative_time: 2.6499999999999986 +} +trajectory_point { + path_point { + x: 586343.90960567514 + y: 4140694.7787450356 + theta: 1.4451907036818454 + kappa: -0.048843437824184183 + s: 4.738328344500899 + dkappa: 0 + ddkappa: 0 + } + v: 0.00060515005424283119 + a: -0.034550447542484264 + relative_time: 2.6999999999999984 +} +trajectory_point { + path_point { + x: 586343.909605104 + y: 4140694.7787408889 + theta: 1.4451908974293346 + kappa: -0.048843486951682349 + s: 4.738324159062044 + dkappa: 0 + ddkappa: 0 + } + v: -0.00060611984603470281 + a: -0.01457174275959161 + relative_time: 2.7499999999999982 +} +trajectory_point { + path_point { + x: 586343.90959945333 + y: 4140694.7786998535 + theta: 1.4451928149327851 + kappa: -0.048843973162625454 + s: 4.7382827361064948 + dkappa: 0 + ddkappa: 0 + } + v: -0.00091667700529152185 + a: 0.0015277950087914105 + relative_time: 2.799999999999998 +} +trajectory_point { + path_point { + x: 586343.90959422186 + y: 4140694.7786618629 + theta: 1.4451945901615515 + kappa: -0.048844423297766365 + s: 4.73824438664481 + dkappa: 0 + ddkappa: 0 + } + v: -0.00051301983768647919 + a: 0.014046563225320274 + relative_time: 2.8499999999999979 +} +trajectory_point { + path_point { + x: 586343.90959368739 + y: 4140694.7786579821 + theta: 1.4451947714772631 + kappa: -0.048844469273009977 + s: 4.7382404697636717 + dkappa: 0 + ddkappa: 0 + } + v: 0.00043327311575402927 + a: 0.023282959352650234 + relative_time: 2.8999999999999977 +} +trajectory_point { + path_point { + x: 586343.90960100875 + y: 4140694.7787111495 + theta: 1.4451922871008742 + kappa: -0.048843839323150583 + s: 4.7382941386195334 + dkappa: 0 + ddkappa: 0 + } + v: 0.001765543187136176 + a: 0.029535380853436211 + relative_time: 2.9499999999999975 +} +trajectory_point { + path_point { + x: 586343.9096183267 + y: 4140694.7788369106 + theta: 1.4451864105795478 + kappa: -0.048842349245609158 + s: 4.738421086432286 + dkappa: 0 + ddkappa: 0 + } + v: 0.0033420515816995344 + a: 0.033102225190334122 + relative_time: 2.9999999999999973 +} +trajectory_point { + path_point { + x: 586343.909646866 + y: 4140694.7790441606 + theta: 1.4451767262536286 + kappa: -0.048839893644170684 + s: 4.738630292478911 + dkappa: 0 + ddkappa: 0 + } + v: 0.0050359793778157191 + a: 0.03428188982599889 + relative_time: 3.0499999999999972 +} +trajectory_point { + path_point { + x: 586343.90968703758 + y: 4140694.7793358834 + theta: 1.4451630947238434 + kappa: -0.048836437172721549 + s: 4.7389247680871334 + dkappa: 0 + ddkappa: 0 + } + v: 0.0067354275269896069 + a: 0.033372772223085434 + relative_time: 3.099999999999997 +} +trajectory_point { + path_point { + x: 586343.90973853972 + y: 4140694.7797098886 + theta: 1.445145618318769 + kappa: -0.048832005778986762 + s: 4.7393023026290866 + dkappa: 0 + ddkappa: 0 + } + v: 0.0083434168538588371 + a: 0.030673269844249562 + relative_time: 3.1499999999999968 +} +trajectory_point { + path_point { + x: 586343.90980046056 + y: 4140694.7801595517 + theta: 1.4451246065625369 + kappa: -0.048826677948267415 + s: 4.739756209514959 + dkappa: 0 + ddkappa: 0 + } + v: 0.0097778880561933956 + a: 0.026481780152146195 + relative_time: 3.1999999999999966 +} +trajectory_point { + path_point { + x: 586343.90987137868 + y: 4140694.7806745544 + theta: 1.4451005416427054 + kappa: -0.048820575947177904 + s: 4.74027607218666 + dkappa: 0 + ddkappa: 0 + } + v: 0.01097170170489653 + a: 0.021096700609430918 + relative_time: 3.2499999999999964 +} +trajectory_point { + path_point { + x: 586343.90994946647 + y: 4140694.7812416218 + theta: 1.4450740438781984 + kappa: -0.04881385706738333 + s: 4.74084849011147 + dkappa: 0 + ddkappa: 0 + } + v: 0.011872638244003975 + a: 0.014816428678758209 + relative_time: 3.2999999999999963 +} +trajectory_point { + path_point { + x: 586343.91003259015 + y: 4140694.7818452595 + theta: 1.4450458371872106 + kappa: -0.048806704869336782 + s: 4.7414578247757015 + dkappa: 0 + ddkappa: 0 + } + v: 0.012443397990684113 + a: 0.0079393618227849849 + relative_time: 3.3499999999999961 +} +trajectory_point { + path_point { + x: 586343.91011841316 + y: 4140694.7824684992 + theta: 1.4450167145549873 + kappa: -0.048799320426016694 + s: 4.7420869456783512 + dkappa: 0 + ddkappa: 0 + } + v: 0.012661601135238315 + a: 0.00076389750416450131 + relative_time: 3.3999999999999959 +} +trajectory_point { + path_point { + x: 586343.91020449658 + y: 4140694.7830936303 + theta: 1.4449875035014017 + kappa: -0.04879191356666418 + s: 4.7427179763247622 + dkappa: 0 + ddkappa: 0 + } + v: 0.01251978774110063 + a: -0.0064115668144467675 + relative_time: 3.4499999999999957 +} +trajectory_point { + path_point { + x: 586343.91028840188 + y: 4140694.7837029444 + theta: 1.4449590315482879 + kappa: -0.048784694120520354 + s: 4.743333040220274 + dkappa: 0 + ddkappa: 0 + } + v: 0.012025417744838174 + a: -0.013288633670393457 + relative_time: 3.4999999999999956 +} +trajectory_point { + path_point { + x: 586343.91036779224 + y: 4140694.7842794708 + theta: 1.444932091686514 + kappa: -0.048777863160563636 + s: 4.7439150068638867 + dkappa: 0 + ddkappa: 0 + } + v: 0.011200870956150133 + a: -0.019568905601021314 + relative_time: 3.5499999999999954 +} +trajectory_point { + path_point { + x: 586343.91044053412 + y: 4140694.7848077165 + theta: 1.4449074078428159 + kappa: -0.048771604247247129 + s: 4.7444482377419108 + dkappa: 0 + ddkappa: 0 + } + v: 0.010083447057868816 + a: -0.024953985143674529 + relative_time: 3.5999999999999952 +} +trajectory_point { + path_point { + x: 586343.91050479957 + y: 4140694.7852744074 + theta: 1.4448856003464354 + kappa: -0.048766074672235926 + s: 4.7449193323216283 + dkappa: 0 + ddkappa: 0 + } + v: 0.0087253656059602114 + a: -0.029145474835696628 + relative_time: 3.649999999999995 +} +trajectory_point { + path_point { + x: 586343.9105591675 + y: 4140694.7856692229 + theta: 1.4448671513956404 + kappa: -0.048761396702144424 + s: 4.7453178740449466 + dkappa: 0 + ddkappa: 0 + } + v: 0.0071937660295204875 + a: -0.031844977214434467 + relative_time: 3.6999999999999948 +} +trajectory_point { + path_point { + x: 586343.91060272581 + y: 4140694.7859855406 + theta: 1.4448523705242107 + kappa: -0.0487576488222737 + s: 4.7456371763220568 + dkappa: 0 + ddkappa: 0 + } + v: 0.005570707630781907 + a: -0.032754094817231572 + relative_time: 3.7499999999999947 +} +trajectory_point { + path_point { + x: 586343.910635173 + y: 4140694.7862211689 + theta: 1.4448413600679855 + kappa: -0.048754856980348787 + s: 4.7458750285250906 + dkappa: 0 + ddkappa: 0 + } + v: 0.0039531695851072468 + a: -0.031574430181433244 + relative_time: 3.7999999999999945 +} +trajectory_point { + path_point { + x: 586343.91065691982 + y: 4140694.7863790924 + theta: 1.4448339806315598 + kappa: -0.048752985830256029 + s: 4.7460344419817755 + dkappa: 0 + ddkappa: 0 + } + v: 0.0024530509409932677 + a: -0.028007585844383343 + relative_time: 3.8499999999999943 +} +trajectory_point { + path_point { + x: 586343.910669191 + y: 4140694.786468205 + theta: 1.4448298165551925 + kappa: -0.048751929975780428 + s: 4.7461243959690922 + dkappa: 0 + ddkappa: 0 + } + v: 0.001197170620067578 + a: -0.021755164343427391 + relative_time: 3.8999999999999941 +} +trajectory_point { + path_point { + x: 586343.91067412763 + y: 4140694.7865040544 + theta: 1.4448281413819484 + kappa: -0.048751505214342974 + s: 4.74616058370693 + dkappa: 0 + ddkappa: 0 + } + v: 0.00032726741709288021 + a: -0.012518768215910137 + relative_time: 3.949999999999994 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250325 + kappa: -0.048751439780737912 + s: 4.7461661583517465 + dkappa: 0 + ddkappa: 0 + } + v: -3.6193270602780103e-14 + a: 8.2500672959895383e-13 + relative_time: 3.9999999999999938 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250339 + kappa: -0.048751439780738252 + s: 4.7461661583517172 + dkappa: 0 + ddkappa: 0 + } + v: 2.2941475892855032e-14 + a: 6.4460043842898032e-13 + relative_time: 4.0499999999999936 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250336 + kappa: -0.048751439780738239 + s: 4.746166158351719 + dkappa: 0 + ddkappa: 0 + } + v: 5.1387788094862105e-14 + a: 4.9610669630545849e-13 + relative_time: 4.0999999999999934 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250334 + kappa: -0.04875143978073819 + s: 4.7461661583517225 + dkappa: 0 + ddkappa: 0 + } + v: 7.2830749892793142e-14 + a: 3.6432921634548434e-13 + relative_time: 4.1499999999999932 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250334 + kappa: -0.048751439780738141 + s: 4.7461661583517269 + dkappa: 0 + ddkappa: 0 + } + v: 8.8085593506757542e-14 + a: 2.4844476302633812e-13 + relative_time: 4.1999999999999931 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250332 + kappa: -0.048751439780738086 + s: 4.7461661583517314 + dkappa: 0 + ddkappa: 0 + } + v: 9.7926389380728676e-14 + a: 1.4763010082529997e-13 + relative_time: 4.2499999999999929 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.444827883325033 + kappa: -0.04875143978073803 + s: 4.7461661583517358 + dkappa: 0 + ddkappa: 0 + } + v: 1.0308604618254396e-13 + a: 6.1061994219649851e-14 + relative_time: 4.2999999999999927 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250328 + kappa: -0.048751439780737975 + s: 4.7461661583517412 + dkappa: 0 + ddkappa: 0 + } + v: 1.0425631080390477e-13 + a: -1.2082792313331853e-14 + relative_time: 4.3499999999999925 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250325 + kappa: -0.048751439780737912 + s: 4.7461661583517465 + dkappa: 0 + ddkappa: 0 + } + v: 1.020877683603766e-13 + a: -7.2627494296365044e-14 + relative_time: 4.3999999999999924 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250321 + kappa: -0.048751439780737857 + s: 4.7461661583517518 + dkappa: 0 + ddkappa: 0 + } + v: 9.7189842191388754e-14 + a: -1.2139534725216983e-13 + relative_time: 4.4499999999999922 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250321 + kappa: -0.0487514397807378 + s: 4.7461661583517563 + dkappa: 0 + ddkappa: 0 + } + v: 9.01307938602348e-14 + a: -1.5920958670346571e-13 + relative_time: 4.499999999999992 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250319 + kappa: -0.048751439780737746 + s: 4.7461661583517607 + dkappa: 0 + ddkappa: 0 + } + v: 8.1437723154072087e-14 + a: -1.868934481729729e-13 + relative_time: 4.5499999999999918 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250316 + kappa: -0.048751439780737704 + s: 4.7461661583517643 + dkappa: 0 + ddkappa: 0 + } + v: 7.1596568083922045e-14 + a: -2.0527016718341089e-13 + relative_time: 4.5999999999999917 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737663 + s: 4.7461661583517678 + dkappa: 0 + ddkappa: 0 + } + v: 6.1052104884670185e-14 + a: -2.1516297925750019e-13 + relative_time: 4.6499999999999915 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250314 + kappa: -0.048751439780737635 + s: 4.7461661583517705 + dkappa: 0 + ddkappa: 0 + } + v: 5.0207948015065954e-14 + a: -2.1739511991795971e-13 + relative_time: 4.6999999999999913 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737593 + s: 4.7461661583517731 + dkappa: 0 + ddkappa: 0 + } + v: 3.9426550157722753e-14 + a: -2.1278982468751035e-13 + relative_time: 4.7499999999999911 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737586 + s: 4.746166158351774 + dkappa: 0 + ddkappa: 0 + } + v: 2.9029202219118097e-14 + a: -2.0217032908887142e-13 + relative_time: 4.7999999999999909 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.444827883325031 + kappa: -0.048751439780737572 + s: 4.7461661583517758 + dkappa: 0 + ddkappa: 0 + } + v: 1.9296033329593468e-14 + a: -1.8635986864476262e-13 + relative_time: 4.8499999999999908 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.444827883325031 + kappa: -0.048751439780737559 + s: 4.7461661583517767 + dkappa: 0 + ddkappa: 0 + } + v: 1.0466010843354423e-14 + a: -1.6618167887790365e-13 + relative_time: 4.8999999999999906 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.444827883325031 + kappa: -0.048751439780737559 + s: 4.7461661583517767 + dkappa: 0 + ddkappa: 0 + } + v: 2.7369403384704695e-15 + a: -1.4245899531101523e-13 + relative_time: 4.94999999999999 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.444827883325031 + kappa: -0.048751439780737559 + s: 4.7461661583517767 + dkappa: 0 + ddkappa: 0 + } + v: -3.734534383125203e-15 + a: -1.1601505346681685e-13 + relative_time: 4.99999999999999 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.444827883325031 + kappa: -0.048751439780737559 + s: 4.7461661583517767 + dkappa: 0 + ddkappa: 0 + } + v: -8.8329312956347036e-15 + a: -8.7673088868028026e-14 + relative_time: 5.04999999999999 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.444827883325031 + kappa: -0.048751439780737572 + s: 4.7461661583517758 + dkappa: 0 + ddkappa: 0 + } + v: -1.2483930149396733e-14 + a: -5.8256337037368549e-14 + relative_time: 5.09999999999999 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737572 + s: 4.7461661583517749 + dkappa: 0 + ddkappa: 0 + } + v: -1.4654372470885906e-14 + a: -2.8588033497559137e-14 + relative_time: 5.14999999999999 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737586 + s: 4.746166158351774 + dkappa: 0 + ddkappa: 0 + } + v: -1.5352261562712365e-14 + a: 5.0858622868070876e-16 + relative_time: 5.1999999999999895 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737586 + s: 4.746166158351774 + dkappa: 0 + ddkappa: 0 + } + v: -1.4626762503622322e-14 + a: 2.8210286618632092e-14 + relative_time: 5.2499999999999893 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737593 + s: 4.7461661583517731 + dkappa: 0 + ddkappa: 0 + } + v: -1.2568202148498854e-14 + a: 5.36938321495743e-14 + relative_time: 5.2999999999999892 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737607 + s: 4.7461661583517722 + dkappa: 0 + ddkappa: 0 + } + v: -9.3080691283608661e-15 + a: 7.6135987298786824e-14 + relative_time: 5.349999999999989 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737607 + s: 4.7461661583517722 + dkappa: 0 + ddkappa: 0 + } + v: -5.0190138503614793e-15 + a: 9.4713516543550261e-14 + relative_time: 5.3999999999999888 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737607 + s: 4.7461661583517722 + dkappa: 0 + ddkappa: 0 + } + v: 8.5151502208338736e-17 + a: 1.0860318436114602e-13 + relative_time: 5.4499999999999886 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737607 + s: 4.7461661583517722 + dkappa: 0 + ddkappa: 0 + } + v: 5.749452969922155e-15 + a: 1.1698175522885308e-13 + relative_time: 5.4999999999999885 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737607 + s: 4.7461661583517722 + dkappa: 0 + ddkappa: 0 + } + v: 1.1677754817216758e-14 + a: 1.1902599362395084e-13 + relative_time: 5.5499999999999883 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737593 + s: 4.7461661583517731 + dkappa: 0 + ddkappa: 0 + } + v: 1.7532759532394454e-14 + a: 1.139126640237208e-13 + relative_time: 5.5999999999999881 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737586 + s: 4.746166158351774 + dkappa: 0 + ddkappa: 0 + } + v: 2.2936007827621485e-14 + a: 1.0081853090544295e-13 + relative_time: 5.6499999999999879 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.444827883325031 + kappa: -0.048751439780737572 + s: 4.7461661583517758 + dkappa: 0 + ddkappa: 0 + } + v: 2.7467878638925791e-14 + a: 7.8920358746396288e-14 + relative_time: 5.6999999999999877 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.444827883325031 + kappa: -0.048751439780737559 + s: 4.7461661583517767 + dkappa: 0 + ddkappa: 0 + } + v: 3.0667589126202796e-14 + a: 4.7394912023862916e-14 + relative_time: 5.7499999999999876 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.444827883325031 + kappa: -0.048751439780737538 + s: 4.7461661583517785 + dkappa: 0 + ddkappa: 0 + } + v: 3.203319467320892e-14 + a: 5.4189552151201057e-15 + relative_time: 5.7999999999999874 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250308 + kappa: -0.048751439780737517 + s: 4.74616615835178 + dkappa: 0 + ddkappa: 0 + } + v: 3.1021588887566275e-14 + a: -4.7830747202548312e-14 + relative_time: 5.8499999999999872 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250308 + kappa: -0.048751439780737496 + s: 4.746166158351782 + dkappa: 0 + ddkappa: 0 + } + v: 2.7048503600759907e-14 + a: -1.1317743075186608e-13 + relative_time: 5.899999999999987 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250308 + kappa: -0.048751439780737489 + s: 4.7461661583517829 + dkappa: 0 + ddkappa: 0 + } + v: 1.9488508868139998e-14 + a: -1.9144433095554967e-13 + relative_time: 5.9499999999999869 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250308 + kappa: -0.048751439780737475 + s: 4.7461661583517838 + dkappa: 0 + ddkappa: 0 + } + v: 7.6750129689195559e-15 + a: -2.8345468333632242e-13 + relative_time: 5.9999999999999867 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250312 + kappa: -0.048751439780737628 + s: 4.7461661583517714 + dkappa: 0 + ddkappa: 0 + } + v: 1.2326424722259395e-14 + a: -2.1237636022493123e-13 + relative_time: 6.0499999999999865 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250312 + kappa: -0.048751439780737628 + s: 4.7461661583517714 + dkappa: 0 + ddkappa: 0 + } + v: 2.9423869550181484e-15 + a: -1.6390616050825997e-13 + relative_time: 6.0999999999999863 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250312 + kappa: -0.048751439780737628 + s: 4.7461661583517714 + dkappa: 0 + ddkappa: 0 + } + v: -4.1541596648956255e-15 + a: -1.2083406097133362e-13 + relative_time: 6.1499999999999861 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250312 + kappa: -0.048751439780737628 + s: 4.7461661583517714 + dkappa: 0 + ddkappa: 0 + } + v: -9.2267221423943969e-15 + a: -8.2904141451161073e-14 + relative_time: 6.199999999999986 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250314 + kappa: -0.048751439780737635 + s: 4.7461661583517705 + dkappa: 0 + ddkappa: 0 + } + v: -1.2526011474241079e-14 + a: -4.9860481784751139e-14 + relative_time: 6.2499999999999858 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250314 + kappa: -0.048751439780737635 + s: 4.7461661583517705 + dkappa: 0 + ddkappa: 0 + } + v: -1.4289942649049023e-14 + a: -2.1447161809112693e-14 + relative_time: 6.2999999999999856 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737642 + s: 4.74616615835177 + dkappa: 0 + ddkappa: 0 + } + v: -1.4743634647282011e-14 + a: 2.5917386387454659e-15 + relative_time: 6.3499999999999854 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737649 + s: 4.7461661583517687 + dkappa: 0 + ddkappa: 0 + } + v: -1.4099410441254292e-14 + a: 2.251213972181444e-14 + relative_time: 6.3999999999999853 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737663 + s: 4.7461661583517678 + dkappa: 0 + ddkappa: 0 + } + v: -1.2556796995130546e-14 + a: 3.8569961603085482e-14 + relative_time: 6.4499999999999851 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737663 + s: 4.7461661583517678 + dkappa: 0 + ddkappa: 0 + } + v: -1.0302525264925875e-14 + a: 5.1021124445549592e-14 + relative_time: 6.4999999999999849 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737676 + s: 4.7461661583517669 + dkappa: 0 + ddkappa: 0 + } + v: -7.510530198505844e-15 + a: 6.0121548412198124e-14 + relative_time: 6.5499999999999847 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737676 + s: 4.7461661583517669 + dkappa: 0 + ddkappa: 0 + } + v: -4.3419507355864772e-15 + a: 6.6127153666022129e-14 + relative_time: 6.5999999999999845 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737676 + s: 4.7461661583517669 + dkappa: 0 + ddkappa: 0 + } + v: -9.4512980773419867e-16 + a: 6.9293860370012759e-14 + relative_time: 6.6499999999999844 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737676 + s: 4.7461661583517669 + dkappa: 0 + ddkappa: 0 + } + v: 2.5443856616340657e-15 + a: 6.9877588687161115e-14 + relative_time: 6.6999999999999842 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737676 + s: 4.7461661583517669 + dkappa: 0 + ddkappa: 0 + } + v: 6.00384475725102e-15 + a: 6.8134258780458551e-14 + relative_time: 6.749999999999984 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737676 + s: 4.7461661583517669 + dkappa: 0 + ddkappa: 0 + } + v: 9.3232925719989108e-15 + a: 6.4319790812896068e-14 + relative_time: 6.7999999999999838 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737663 + s: 4.7461661583517678 + dkappa: 0 + ddkappa: 0 + } + v: 1.2405570206909442e-14 + a: 5.8690104947464868e-14 + relative_time: 6.8499999999999837 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737649 + s: 4.7461661583517687 + dkappa: 0 + ddkappa: 0 + } + v: 1.5166314771164052e-14 + a: 5.1501121347156052e-14 + relative_time: 6.8999999999999835 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250314 + kappa: -0.048751439780737642 + s: 4.74616615835177 + dkappa: 0 + ddkappa: 0 + } + v: 1.7533959382093611e-14 + a: 4.3008760174960975e-14 + relative_time: 6.9499999999999833 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250314 + kappa: -0.048751439780737635 + s: 4.7461661583517705 + dkappa: 0 + ddkappa: 0 + } + v: 1.9449733165178593e-14 + a: 3.3468941593870585e-14 + relative_time: 6.9999999999999831 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.4448278833250312 + kappa: -0.048751439780737628 + s: 4.7461661583517714 + dkappa: 0 + ddkappa: 0 + } + v: 2.086766125404892e-14 + a: 2.3137585766875985e-14 + relative_time: 7.0499999999999829 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737607 + s: 4.7461661583517722 + dkappa: 0 + ddkappa: 0 + } + v: 2.1754564790484281e-14 + a: 1.227061285696863e-14 + relative_time: 7.0999999999999828 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737593 + s: 4.7461661583517731 + dkappa: 0 + ddkappa: 0 + } + v: 2.209006092441371e-14 + a: 1.1239430271394682e-15 + relative_time: 7.1499999999999826 +} +trajectory_point { + path_point { + x: 586343.91067488806 + y: 4140694.7865095772 + theta: 1.4448278833250312 + kappa: -0.048751439780737586 + s: 4.746166158351774 + dkappa: 0 + ddkappa: 0 + } + v: 2.1866562813915967e-14 + a: -1.0046503559620347e-14 + relative_time: 7.1999999999999824 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.444827883325031 + kappa: -0.048751439780737572 + s: 4.7461661583517758 + dkappa: 0 + ddkappa: 0 + } + v: 2.108927962521944e-14 + a: -2.0984806740319512e-14 + relative_time: 7.2499999999999822 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.444827883325031 + kappa: -0.048751439780737559 + s: 4.7461661583517767 + dkappa: 0 + ddkappa: 0 + } + v: 1.9776216532701643e-14 + a: -3.1435046351966927e-14 + relative_time: 7.2999999999999821 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.444827883325031 + kappa: -0.048751439780737552 + s: 4.7461661583517776 + dkappa: 0 + ddkappa: 0 + } + v: 1.7958174718890136e-14 + a: -4.1141302231571716e-14 + relative_time: 7.3499999999999819 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.444827883325031 + kappa: -0.048751439780737538 + s: 4.7461661583517785 + dkappa: 0 + ddkappa: 0 + } + v: 1.5678751374461729e-14 + a: -4.9847654216142173e-14 + relative_time: 7.3999999999999817 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.444827883325031 + kappa: -0.048751439780737524 + s: 4.7461661583517794 + dkappa: 0 + ddkappa: 0 + } + v: 1.2994339698242982e-14 + a: -5.7298182142687424e-14 + relative_time: 7.4499999999999815 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.444827883325031 + kappa: -0.048751439780737524 + s: 4.7461661583517794 + dkappa: 0 + ddkappa: 0 + } + v: 9.9741288972097978e-15 + a: -6.3236965848216593e-14 + relative_time: 7.4999999999999813 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250308 + kappa: -0.048751439780737517 + s: 4.74616615835178 + dkappa: 0 + ddkappa: 0 + } + v: 6.7001041864880175e-15 + a: -6.7408085169738252e-14 + relative_time: 7.5499999999999812 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250308 + kappa: -0.048751439780737517 + s: 4.74616615835178 + dkappa: 0 + ddkappa: 0 + } + v: 3.2670467893527411e-15 + a: -6.95556199442612e-14 + relative_time: 7.599999999999981 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250308 + kappa: -0.048751439780737517 + s: 4.74616615835178 + dkappa: 0 + ddkappa: 0 + } + v: -2.1746606277137553e-16 + a: -6.942365000879433e-14 + relative_time: 7.6499999999999808 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250308 + kappa: -0.048751439780737517 + s: 4.74616615835178 + dkappa: 0 + ddkappa: 0 + } + v: -3.6330611303101254e-15 + a: -6.6756255200346092e-14 + relative_time: 7.6999999999999806 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.4448278833250308 + kappa: -0.048751439780737517 + s: 4.74616615835178 + dkappa: 0 + ddkappa: 0 + } + v: -6.8465691655398511e-15 + a: -6.1297515355926039e-14 + relative_time: 7.7499999999999805 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.444827883325031 + kappa: -0.048751439780737524 + s: 4.7461661583517794 + dkappa: 0 + ddkappa: 0 + } + v: -9.7120249125870665e-15 + a: -5.279151031254264e-14 + relative_time: 7.79999999999998 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.444827883325031 + kappa: -0.048751439780737524 + s: 4.7461661583517794 + dkappa: 0 + ddkappa: 0 + } + v: -1.2070667107428264e-14 + a: -4.0982319907204769e-14 + relative_time: 7.84999999999998 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095772 + theta: 1.444827883325031 + kappa: -0.048751439780737538 + s: 4.7461661583517785 + dkappa: 0 + ddkappa: 0 + } + v: -1.3750938477891646e-14 + a: -2.5614023976921248e-14 + relative_time: 7.89999999999998 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.444827883325031 + kappa: -0.048751439780737552 + s: 4.7461661583517776 + dkappa: 0 + ddkappa: 0 + } + v: -1.4568485743654653e-14 + a: -6.430702358700876e-15 + relative_time: 7.94999999999998 +} +trajectory_point { + path_point { + x: 586343.91067488817 + y: 4140694.7865095777 + theta: 1.444827883325031 + kappa: -0.048751439780737559 + s: 4.7461661583517767 + dkappa: 0 + ddkappa: 0 + } + v: -1.4326159616246254e-14 + a: 1.6823565110447424e-14 + relative_time: 7.99999999999998 +} +decision { + main_decision { + stop { + reason_code: STOP_REASON_OBSTACLE + reason: "stop by 1_0" + stop_point { + x: 586344.236096298 + y: 4140699.2316423869 + } + stop_heading: 1.2740072758663068 + } + } + object_decision { + decision { + id: "1_0" + perception_id: 1 + object_decision { + stop { + reason_code: STOP_REASON_OBSTACLE + distance_s: -10 + stop_point { + x: 586344.236096298 + y: 4140699.2316423869 + } + stop_heading: 1.2740072758663068 + } + } + } + decision { + id: "DEST" + perception_id: -1109540454 + object_decision { + ignore { + } + } + } + } +} diff --git a/modules/planning/testdata/garage_test/result_stop_over_line_0.pb.txt b/modules/planning/testdata/garage_test/result_stop_over_line_0.pb.txt new file mode 100644 index 00000000000..603b9f9ef7f --- /dev/null +++ b/modules/planning/testdata/garage_test/result_stop_over_line_0.pb.txt @@ -0,0 +1,970 @@ +header { + module_name: "planning" + status { + error_code: PLANNING_ERROR + msg: "Mapping obstacle for dp st speed optimizer failed." + } +} +is_replan: true +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.05 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.1 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.15000000000000002 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.2 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.25 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.3 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.35 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.39999999999999997 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.44999999999999996 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.49999999999999994 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.54999999999999993 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.6 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.65 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.70000000000000007 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.75000000000000011 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.80000000000000016 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.8500000000000002 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.90000000000000024 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 0.95000000000000029 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.0000000000000002 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.0500000000000003 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.1000000000000003 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.1500000000000004 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.2000000000000004 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.2500000000000004 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.3000000000000005 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.3500000000000005 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.4000000000000006 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.4500000000000006 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.5000000000000007 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.5500000000000007 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.6000000000000008 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.6500000000000008 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.7000000000000008 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.7500000000000009 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.8000000000000009 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.850000000000001 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.900000000000001 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 1.9500000000000011 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.0000000000000009 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.0500000000000007 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.1000000000000005 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.1500000000000004 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.2 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.25 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.3 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.3499999999999996 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.3999999999999995 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.4499999999999993 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.4999999999999991 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.5499999999999989 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.5999999999999988 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.6499999999999986 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.6999999999999984 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.7499999999999982 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.799999999999998 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.8499999999999979 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.8999999999999977 +} +trajectory_point { + path_point { + x: 586354.03059851634 + y: 4140735.5242292415 + z: 0 + theta: 1.3049810773399138 + kappa: 0.00043377128822206915 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.9499999999999975 +} +decision { + main_decision { + stop { + reason_code: STOP_REASON_DESTINATION + reason: "stop by DEST" + stop_point { + x: 586366.96580561635 + y: 4140782.3643938545 + } + stop_heading: 1.315726249482652 + } + } + object_decision { + decision { + id: "2352_0" + perception_id: 2352 + object_decision { + stop { + reason_code: STOP_REASON_OBSTACLE + distance_s: -10 + stop_point { + x: 586353.088618359 + y: 4140731.3767246138 + } + stop_heading: 1.2985831371733445 + } + } + } + decision { + id: "2353_0" + perception_id: 2353 + object_decision { + ignore { + } + } + } + decision { + id: "2396_0" + perception_id: 2396 + object_decision { + ignore { + } + } + } + decision { + id: "DEST" + perception_id: -1109540454 + object_decision { + stop { + reason_code: STOP_REASON_DESTINATION + distance_s: -3 + stop_point { + x: 586366.96580561635 + y: 4140782.3643938545 + } + stop_heading: 1.315726249482652 + } + } + } + } +} diff --git a/modules/planning/testdata/garage_test/stop_dest_chassis.pb.txt b/modules/planning/testdata/garage_test/stop_dest_chassis.pb.txt new file mode 100644 index 00000000000..fc81966a441 --- /dev/null +++ b/modules/planning/testdata/garage_test/stop_dest_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 0.0 +speed_mps: 4.42500019073 +odometer_m: 0.0 +fuel_range_m: 0 +throttle_percentage: 15.2880144119 +brake_percentage: 18.4710464478 +steering_percentage: 3.34042549133 +steering_torque_nm: -0.125 +parking_brake: false +driving_mode: COMPLETE_AUTO_DRIVE +error_code: NO_ERROR +gear_location: GEAR_DRIVE +header { + timestamp_sec: 1502920656.46 + module_name: "chassis" + sequence_num: 98066 +} +signal { + turn_signal: TURN_NONE + horn: false +} diff --git a/modules/planning/testdata/garage_test/stop_dest_localization.pb.txt b/modules/planning/testdata/garage_test/stop_dest_localization.pb.txt new file mode 100644 index 00000000000..a56f5425a96 --- /dev/null +++ b/modules/planning/testdata/garage_test/stop_dest_localization.pb.txt @@ -0,0 +1,49 @@ +header { + timestamp_sec: 1502920656.46 + module_name: "localization" + sequence_num: 98168 +} +pose { + position { + x: 586361.375698 + y: 4140761.72259 + z: -29.4437792711 + } + orientation { + qx: -0.0183705362837 + qy: -0.0228083896321 + qz: -0.141161582559 + qw: 0.989553287281 + } + linear_velocity { + x: 1.27483825735 + y: 4.30410215192 + z: -0.0719737933875 + } + linear_acceleration { + x: -0.305338168846 + y: 0.0185947050156 + z: 0.302948333827 + } + angular_velocity { + x: 0.0197592682212 + y: 0.00492437047244 + z: 0.0328439277022 + } + heading: 1.28665083367 + linear_acceleration_vrf { + x: -0.282784695629 + y: -0.0767818497207 + z: 0.315423868546 + } + angular_velocity_vrf { + x: 0.0192325517336 + y: 0.00927895368132 + z: 0.0322088755546 + } + euler_angles { + x: -0.0503704973808 + y: 0.0299223773453 + z: 1.28665083367 + } +} diff --git a/modules/planning/testdata/garage_test/stop_dest_prediction.pb.txt b/modules/planning/testdata/garage_test/stop_dest_prediction.pb.txt new file mode 100644 index 00000000000..56ef1335bbd --- /dev/null +++ b/modules/planning/testdata/garage_test/stop_dest_prediction.pb.txt @@ -0,0 +1,382 @@ +header { + timestamp_sec: 1502920656.19 + module_name: "prediction" + sequence_num: 5977 +} +prediction_obstacle { + perception_obstacle { + id: 3 + position { + x: 586342.591301 + y: 4140691.93593 + z: 0.0 + } + theta: 1.49107949942 + velocity { + x: 3.15135438863 + y: 7.35316024014 + z: 0.0 + } + length: 4.0 + width: 2.0 + height: 1.0 + polygon_point { + x: 586341.753741 + y: 4140694.00921 + z: 0.0 + } + polygon_point { + x: 586341.435212 + y: 4140690.02191 + z: 0.0 + } + polygon_point { + x: 586343.42886 + y: 4140689.86264 + z: 0.0 + } + polygon_point { + x: 586343.74739 + y: 4140693.84994 + z: 0.0 + } + tracking_time: 1.0 + type: VEHICLE + timestamp: 1502920656.18 + } + predicted_period: 3.0 + trajectory { + probability: 0.811189788316 + trajectory_point { + path_point { + x: 586342.642387 + y: 4140692.65633 + z: 0.0 + theta: 1.37112028657 + } + v: 10.4117561278 + a: 1.7559450353 + relative_time: 0.0 + } + trajectory_point { + path_point { + x: 586342.85059 + y: 4140693.68514 + z: 0.0 + theta: 1.35316942218 + } + v: 10.5873506314 + a: 1.7559450353 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 586343.081026 + y: 4140694.72723 + z: 0.0 + theta: 1.33754831804 + } + v: 10.7629451349 + a: 1.7559450353 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 586343.331779 + y: 4140695.78272 + z: 0.0 + theta: 1.32440753109 + } + v: 10.9385396384 + a: 1.7559450353 + relative_time: 0.3 + } + trajectory_point { + path_point { + x: 586343.600674 + y: 4140696.85188 + z: 0.0 + theta: 1.3139935646 + } + v: 11.114134142 + a: 1.7559450353 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 586343.885158 + y: 4140697.93522 + z: 0.0 + theta: 1.30638892489 + } + v: 11.2897286455 + a: 1.7559450353 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 586344.182473 + y: 4140699.03335 + z: 0.0 + theta: 1.30169820657 + } + v: 11.465323149 + a: 1.7559450353 + relative_time: 0.6 + } + trajectory_point { + path_point { + x: 586344.489616 + y: 4140700.14704 + z: 0.0 + theta: 1.30012698377 + } + v: 11.6409176525 + a: 1.7559450353 + relative_time: 0.7 + } + trajectory_point { + path_point { + x: 586344.803215 + y: 4140701.27722 + z: 0.0 + theta: 1.30159376567 + } + v: 11.8165121561 + a: 1.7559450353 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 586345.119835 + y: 4140702.4248 + z: 0.0 + theta: 1.30386763403 + } + v: 11.9921066596 + a: 1.7559450353 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 586345.438473 + y: 4140703.59004 + z: 0.0 + theta: 1.30531092184 + } + v: 12.1677011631 + a: 1.7559450353 + relative_time: 1.0 + } + trajectory_point { + path_point { + x: 586345.760033 + y: 4140704.77266 + z: 0.0 + theta: 1.3058462413 + } + v: 12.3432956667 + a: 1.7559450353 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 586346.085555 + y: 4140705.9724 + z: 0.0 + theta: 1.30548921541 + } + v: 12.5188901702 + a: 1.7559450353 + relative_time: 1.2 + } + trajectory_point { + path_point { + x: 586346.416107 + y: 4140707.18895 + z: 0.0 + theta: 1.30491153608 + } + v: 12.6944846737 + a: 1.7559450353 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 586346.751977 + y: 4140708.42225 + z: 0.0 + theta: 1.30456736788 + } + v: 12.8700791773 + a: 1.7559450353 + relative_time: 1.4 + } + trajectory_point { + path_point { + x: 586347.092892 + y: 4140709.67239 + z: 0.0 + theta: 1.3044818866 + } + v: 13.0456736808 + a: 1.7559450353 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 586347.438535 + y: 4140710.93944 + z: 0.0 + theta: 1.30462187624 + } + v: 13.2212681843 + a: 1.7559450353 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 586347.788621 + y: 4140712.22348 + z: 0.0 + theta: 1.30476805041 + } + v: 13.3968626878 + a: 1.7559450353 + relative_time: 1.7 + } + trajectory_point { + path_point { + x: 586348.143135 + y: 4140713.52451 + z: 0.0 + theta: 1.30484030259 + } + v: 13.5724571914 + a: 1.7559450353 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 586348.50217 + y: 4140714.84251 + z: 0.0 + theta: 1.30483613704 + } + v: 13.7480516949 + a: 1.7559450353 + relative_time: 1.9 + } + trajectory_point { + path_point { + x: 586348.865826 + y: 4140716.17745 + z: 0.0 + theta: 1.30478818427 + } + v: 13.9236461984 + a: 1.7559450353 + relative_time: 2.0 + } + trajectory_point { + path_point { + x: 586349.234161 + y: 4140717.52931 + z: 0.0 + theta: 1.30475569094 + } + v: 14.099240702 + a: 1.7559450353 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 586349.607158 + y: 4140718.8981 + z: 0.0 + theta: 1.30474539532 + } + v: 14.2748352055 + a: 1.7559450353 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 586349.984785 + y: 4140720.28383 + z: 0.0 + theta: 1.30475485276 + } + v: 14.450429709 + a: 1.7559450353 + relative_time: 2.3 + } + trajectory_point { + path_point { + x: 586350.367016 + y: 4140721.68651 + z: 0.0 + theta: 1.30476534846 + } + v: 14.6260242126 + a: 1.7559450353 + relative_time: 2.4 + } + trajectory_point { + path_point { + x: 586350.753848 + y: 4140723.10613 + z: 0.0 + theta: 1.30476946712 + } + v: 14.8016187161 + a: 1.7559450353 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 586351.145291 + y: 4140724.5427 + z: 0.0 + theta: 1.3047672881 + } + v: 14.9772132196 + a: 1.7559450353 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 586351.541353 + y: 4140725.9962 + z: 0.0 + theta: 1.30476380102 + } + v: 15.1528077231 + a: 1.7559450353 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 586351.935712 + y: 4140727.44343 + z: 0.0 + theta: 1.30476180948 + } + v: 15.0 + a: 0.0 + relative_time: 2.8 + } + trajectory_point { + path_point { + x: 586352.330073 + y: 4140728.89067 + z: 0.0 + theta: 1.30476180948 + } + v: 15.0 + a: 0.0 + relative_time: 2.9 + } + } +} +perception_error_code: OK diff --git a/modules/planning/testdata/garage_test/stop_obstacle_chassis.pb.txt b/modules/planning/testdata/garage_test/stop_obstacle_chassis.pb.txt new file mode 100644 index 00000000000..f8788b922ba --- /dev/null +++ b/modules/planning/testdata/garage_test/stop_obstacle_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 0.0 +speed_mps: 4.26111125946 +odometer_m: 0.0 +fuel_range_m: 0 +throttle_percentage: 25.1132984161 +brake_percentage: 13.4996566772 +steering_percentage: -40.872341156 +steering_torque_nm: -0.375 +parking_brake: false +driving_mode: COMPLETE_AUTO_DRIVE +error_code: NO_ERROR +gear_location: GEAR_DRIVE +header { + timestamp_sec: 1498682816.13 + module_name: "chassis" + sequence_num: 170682 +} +signal { + turn_signal: TURN_NONE + horn: false +} diff --git a/modules/planning/testdata/garage_test/stop_obstacle_localization.pb.txt b/modules/planning/testdata/garage_test/stop_obstacle_localization.pb.txt new file mode 100644 index 00000000000..282b5141a07 --- /dev/null +++ b/modules/planning/testdata/garage_test/stop_obstacle_localization.pb.txt @@ -0,0 +1,44 @@ +header { + timestamp_sec: 1498682816.13 + module_name: "localization" + sequence_num: 170250 +} +pose { + position { + x: 586343.905893 + y: 4140690.05199 + z: -29.0700325062 + } + orientation { + qx: 0.0218793848621 + qy: 0.0118316356348 + qz: -0.0449544511197 + qw: -0.998679329034 + } + linear_velocity { + x: -0.520379744564 + y: 4.24401320062 + z: -0.0555969195208 + } + linear_acceleration { + x: 1.03984377863 + y: 1.38496469513 + z: -0.163916348384 + } + angular_velocity { + x: 0.00449323331444 + y: 0.0405418149058 + z: -0.346677548288 + } + heading: 1.66027769535 + linear_acceleration_vrf { + x: 1.15687182905 + y: 1.29254925048 + z: -0.131281629232 + } + angular_velocity_vrf { + x: 0.000624337250885 + y: 0.0554569487516 + z: -0.344635006096 + } +} diff --git a/modules/planning/testdata/garage_test/stop_obstacle_prediction.pb.txt b/modules/planning/testdata/garage_test/stop_obstacle_prediction.pb.txt new file mode 100644 index 00000000000..7cb880890a2 --- /dev/null +++ b/modules/planning/testdata/garage_test/stop_obstacle_prediction.pb.txt @@ -0,0 +1,382 @@ +header { + timestamp_sec: 1501948403.8 + module_name: "prediction" + sequence_num: 987 +} +prediction_obstacle { + perception_obstacle { + id: 1 + position { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + } + theta: 1.16590454051 + velocity { + x: 0.0 + y: 0.0 + z: 0.0 + } + length: 4.0 + width: 2.0 + height: 1.0 + polygon_point { + x: 586347.28994 + y: 4140713.15926 + z: 0.0 + } + polygon_point { + x: 586345.714263 + y: 4140709.48268 + z: 0.0 + } + polygon_point { + x: 586347.552553 + y: 4140708.69484 + z: 0.0 + } + polygon_point { + x: 586349.12823 + y: 4140712.37142 + z: 0.0 + } + tracking_time: 1.0 + type: UNKNOWN_UNMOVABLE + timestamp: 1501948139.42 + } + predicted_period: 3.0 + trajectory { + probability: 1.0 + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.0 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.3 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.6 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.7 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.0 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.2 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.4 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.7 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 1.9 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.0 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.3 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.4 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.8 + } + trajectory_point { + path_point { + x: 586347.421246 + y: 4140710.92705 + z: 0.0 + theta: 0.0 + } + v: 0.0 + a: 0.0 + relative_time: 2.9 + } + } +} +perception_error_code: OK diff --git a/modules/planning/testdata/sunnyvale_loop_test/1_chassis.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/1_chassis.pb.txt new file mode 100644 index 00000000000..389e77ecddb --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/1_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 2008.0 +speed_mps: 5.42222213745 +odometer_m: 0.0 +fuel_range_m: 0 +throttle_percentage: 25.3147182465 +brake_percentage: 13.5301742554 +steering_percentage: -11.8297872543 +steering_torque_nm: -0.0625 +parking_brake: false +driving_mode: COMPLETE_MANUAL +error_code: NO_ERROR +gear_location: GEAR_DRIVE +header { + timestamp_sec: 1503436434.97 + module_name: "chassis" + sequence_num: 129707 +} +signal { + turn_signal: TURN_RIGHT + horn: false +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/1_localization.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/1_localization.pb.txt new file mode 100644 index 00000000000..23cf9224616 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/1_localization.pb.txt @@ -0,0 +1,49 @@ +header { + timestamp_sec: 1503436434.97 + module_name: "localization" + sequence_num: 106074 +} +pose { + position { + x: 587503.356047 + y: 4140719.15699 + z: -29.8598582055 + } + orientation { + qx: 0.0192341332465 + qy: -0.00713662301125 + qz: -0.382298318805 + qw: -0.923811188593 + } + linear_velocity { + x: -3.92663554703 + y: 3.91412167577 + z: -0.0241558578541 + } + linear_acceleration { + x: 0.170228077864 + y: 0.904194696402 + z: 0.745161250636 + } + angular_velocity { + x: -0.00997907972765 + y: -0.0198128307531 + z: -0.12495546369 + } + heading: 2.35595493774 + linear_acceleration_vrf { + x: 0.738091546031 + y: 0.496524782766 + z: 0.781341760512 + } + angular_velocity_vrf { + x: -0.0175650767961 + y: -0.00319665187023 + z: -0.125647314713 + } + euler_angles { + x: 0.0279083884267 + y: 0.0300853153295 + z: -3.92723036944 + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/1_prediction.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/1_prediction.pb.txt new file mode 100644 index 00000000000..0124c877dfa --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/1_prediction.pb.txt @@ -0,0 +1,810 @@ +header { + timestamp_sec: 1503436434.94 + module_name: "prediction" + sequence_num: 3699 +} +prediction_obstacle { + perception_obstacle { + id: 683 + position { + x: 587531.368937 + y: 4140698.14741 + z: -29.3819302744 + } + theta: 1.2740602218 + velocity { + x: 0.0296512916684 + y: 0.0203231517226 + z: 0.0 + } + length: 4.56867933273 + width: 1.55723953247 + height: 1.68029332161 + polygon_point { + x: 587530.748635 + y: 4140696.60557 + z: -29.266485725 + } + polygon_point { + x: 587530.346933 + y: 4140696.05424 + z: -29.2497158785 + } + polygon_point { + x: 587530.264508 + y: 4140696.3373 + z: -29.264426865 + } + polygon_point { + x: 587530.272335 + y: 4140696.63097 + z: -29.2777158818 + } + polygon_point { + x: 587530.288728 + y: 4140696.76745 + z: -29.2836227068 + } + polygon_point { + x: 587530.357194 + y: 4140697.21415 + z: -29.3026416852 + } + polygon_point { + x: 587530.48432 + y: 4140697.69994 + z: -29.3222114289 + } + polygon_point { + x: 587531.109615 + y: 4140699.88691 + z: -29.4091935958 + } + polygon_point { + x: 587531.2714 + y: 4140700.22442 + z: -29.4212377185 + } + polygon_point { + x: 587531.354089 + y: 4140700.36454 + z: -29.4259095972 + } + polygon_point { + x: 587531.428577 + y: 4140700.39218 + z: -29.4256018589 + } + polygon_point { + x: 587532.267702 + y: 4140700.22282 + z: -29.4001072741 + } + polygon_point { + x: 587532.64508 + y: 4140700.11133 + z: -29.3870230706 + } + polygon_point { + x: 587532.766835 + y: 4140700.05633 + z: -29.3819302453 + } + tracking_time: 13.5006020069 + type: UNKNOWN + timestamp: 0.0 + } + timestamp: 1503436434.94 + predicted_period: 3.0 + trajectory { + probability: 1.0 + trajectory_point { + path_point { + x: 587531.368937 + y: 4140698.14741 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 0.0 + } + trajectory_point { + path_point { + x: 587531.371902 + y: 4140698.14944 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587531.374868 + y: 4140698.15148 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587531.377833 + y: 4140698.15351 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 0.3 + } + trajectory_point { + path_point { + x: 587531.380798 + y: 4140698.15554 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587531.383763 + y: 4140698.15757 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587531.386728 + y: 4140698.15961 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 0.6 + } + trajectory_point { + path_point { + x: 587531.389693 + y: 4140698.16164 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 0.7 + } + trajectory_point { + path_point { + x: 587531.392658 + y: 4140698.16367 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587531.395623 + y: 4140698.1657 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587531.398589 + y: 4140698.16774 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 1.0 + } + trajectory_point { + path_point { + x: 587531.401554 + y: 4140698.16977 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587531.404519 + y: 4140698.1718 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 1.2 + } + trajectory_point { + path_point { + x: 587531.407484 + y: 4140698.17383 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587531.410449 + y: 4140698.17586 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 1.4 + } + trajectory_point { + path_point { + x: 587531.413414 + y: 4140698.1779 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587531.416379 + y: 4140698.17993 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587531.419345 + y: 4140698.18196 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 1.7 + } + trajectory_point { + path_point { + x: 587531.42231 + y: 4140698.18399 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587531.425275 + y: 4140698.18603 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 1.9 + } + trajectory_point { + path_point { + x: 587531.42824 + y: 4140698.18806 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 2.0 + } + trajectory_point { + path_point { + x: 587531.431205 + y: 4140698.19009 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587531.43417 + y: 4140698.19212 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587531.437135 + y: 4140698.19416 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 2.3 + } + trajectory_point { + path_point { + x: 587531.4401 + y: 4140698.19619 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 2.4 + } + trajectory_point { + path_point { + x: 587531.443066 + y: 4140698.19822 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587531.446031 + y: 4140698.20025 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587531.448996 + y: 4140698.20228 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587531.451961 + y: 4140698.20432 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 2.8 + } + trajectory_point { + path_point { + x: 587531.454926 + y: 4140698.20635 + z: 0.0 + theta: 0.60086354207 + } + v: 0.035947595101 + a: 3.82660115808e-15 + relative_time: 2.9 + } + } +} +prediction_obstacle { + perception_obstacle { + id: 726 + position { + x: 587478.6981 + y: 4140717.15712 + z: -31.3920438489 + } + theta: 2.1892425339 + velocity { + x: 0.0408871397376 + y: -0.063788741827 + z: 0.0 + } + length: 0.371678113937 + width: 0.133998900652 + height: 0.719923198223 + polygon_point { + x: 587478.733793 + y: 4140717.00967 + z: -31.377301582 + } + polygon_point { + x: 587478.546162 + y: 4140717.24874 + z: -31.3922204806 + } + polygon_point { + x: 587478.61346 + y: 4140717.32487 + z: -31.3942859443 + } + polygon_point { + x: 587478.872125 + y: 4140717.01921 + z: -31.3748147678 + } + tracking_time: 0.600306987762 + type: UNKNOWN + timestamp: 0.0 + } + timestamp: 1503436434.94 + predicted_period: 3.0 + trajectory { + probability: 1.0 + trajectory_point { + path_point { + x: 587478.6981 + y: 4140717.15712 + z: 0.0 + theta: -1.0007900013 + } + v: 0.0757678149335 + a: 2.18392836019e-07 + relative_time: 0.0 + } + trajectory_point { + path_point { + x: 587478.702189 + y: 4140717.15074 + z: 0.0 + theta: -1.00078984582 + } + v: 0.0757677965441 + a: 2.18392836019e-07 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587478.706277 + y: 4140717.14436 + z: 0.0 + theta: -1.00078969033 + } + v: 0.0757677781547 + a: 2.18392836019e-07 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587478.710366 + y: 4140717.13798 + z: 0.0 + theta: -1.00078953485 + } + v: 0.0757677597654 + a: 2.18392836019e-07 + relative_time: 0.3 + } + trajectory_point { + path_point { + x: 587478.714455 + y: 4140717.1316 + z: 0.0 + theta: -1.00078937936 + } + v: 0.075767741376 + a: 2.18392836019e-07 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587478.718543 + y: 4140717.12522 + z: 0.0 + theta: -1.00078922388 + } + v: 0.0757677229866 + a: 2.18392836019e-07 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587478.722632 + y: 4140717.11884 + z: 0.0 + theta: -1.00078906839 + } + v: 0.0757677045973 + a: 2.18392836019e-07 + relative_time: 0.6 + } + trajectory_point { + path_point { + x: 587478.726721 + y: 4140717.11246 + z: 0.0 + theta: -1.00078891291 + } + v: 0.0757676862079 + a: 2.18392836019e-07 + relative_time: 0.7 + } + trajectory_point { + path_point { + x: 587478.73081 + y: 4140717.10609 + z: 0.0 + theta: -1.00078875742 + } + v: 0.0757676678186 + a: 2.18392836019e-07 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587478.734898 + y: 4140717.09971 + z: 0.0 + theta: -1.00078860194 + } + v: 0.0757676494292 + a: 2.18392836019e-07 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587478.738987 + y: 4140717.09333 + z: 0.0 + theta: -1.00078844645 + } + v: 0.0757676310398 + a: 2.18392836019e-07 + relative_time: 1.0 + } + trajectory_point { + path_point { + x: 587478.743076 + y: 4140717.08695 + z: 0.0 + theta: -1.00078829097 + } + v: 0.0757676126505 + a: 2.18392836019e-07 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587478.747164 + y: 4140717.08057 + z: 0.0 + theta: -1.00078813548 + } + v: 0.0757675942611 + a: 2.18392836019e-07 + relative_time: 1.2 + } + trajectory_point { + path_point { + x: 587478.751253 + y: 4140717.07419 + z: 0.0 + theta: -1.00078798 + } + v: 0.0757675758718 + a: 2.18392836019e-07 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587478.755342 + y: 4140717.06781 + z: 0.0 + theta: -1.00078782451 + } + v: 0.0757675574824 + a: 2.18392836019e-07 + relative_time: 1.4 + } + trajectory_point { + path_point { + x: 587478.759431 + y: 4140717.06143 + z: 0.0 + theta: -1.00078766903 + } + v: 0.0757675390931 + a: 2.18392836019e-07 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587478.763519 + y: 4140717.05506 + z: 0.0 + theta: -1.00078751354 + } + v: 0.0757675207037 + a: 2.18392836019e-07 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587478.767608 + y: 4140717.04868 + z: 0.0 + theta: -1.00078735806 + } + v: 0.0757675023144 + a: 2.18392836019e-07 + relative_time: 1.7 + } + trajectory_point { + path_point { + x: 587478.771697 + y: 4140717.0423 + z: 0.0 + theta: -1.00078720257 + } + v: 0.0757674839251 + a: 2.18392836019e-07 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587478.775785 + y: 4140717.03592 + z: 0.0 + theta: -1.00078704708 + } + v: 0.0757674655357 + a: 2.18392836019e-07 + relative_time: 1.9 + } + trajectory_point { + path_point { + x: 587478.779874 + y: 4140717.02954 + z: 0.0 + theta: -1.0007868916 + } + v: 0.0757674471464 + a: 2.18392836019e-07 + relative_time: 2.0 + } + trajectory_point { + path_point { + x: 587478.783963 + y: 4140717.02316 + z: 0.0 + theta: -1.00078673611 + } + v: 0.0757674287571 + a: 2.18392836019e-07 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587478.788052 + y: 4140717.01678 + z: 0.0 + theta: -1.00078658063 + } + v: 0.0757674103677 + a: 2.18392836019e-07 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587478.79214 + y: 4140717.0104 + z: 0.0 + theta: -1.00078642514 + } + v: 0.0757673919784 + a: 2.18392836019e-07 + relative_time: 2.3 + } + trajectory_point { + path_point { + x: 587478.796229 + y: 4140717.00402 + z: 0.0 + theta: -1.00078626965 + } + v: 0.0757673735891 + a: 2.18392836019e-07 + relative_time: 2.4 + } + trajectory_point { + path_point { + x: 587478.800318 + y: 4140716.99765 + z: 0.0 + theta: -1.00078611417 + } + v: 0.0757673551997 + a: 2.18392836019e-07 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587478.804406 + y: 4140716.99127 + z: 0.0 + theta: -1.00078595868 + } + v: 0.0757673368104 + a: 2.18392836019e-07 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587478.808495 + y: 4140716.98489 + z: 0.0 + theta: -1.00078580319 + } + v: 0.0757673184211 + a: 2.18392836019e-07 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587478.812584 + y: 4140716.97851 + z: 0.0 + theta: -1.00078564771 + } + v: 0.0757673000318 + a: 2.18392836019e-07 + relative_time: 2.8 + } + trajectory_point { + path_point { + x: 587478.816673 + y: 4140716.97213 + z: 0.0 + theta: -1.00078564771 + } + v: 0.0757672816424 + a: 2.18392836019e-07 + relative_time: 2.9 + } + } +} +perception_error_code: OK diff --git a/modules/planning/testdata/sunnyvale_loop_test/1_routing.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/1_routing.pb.txt new file mode 100644 index 00000000000..daab5ce6b3a --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/1_routing.pb.txt @@ -0,0 +1,325 @@ +header { + timestamp_sec: 1503436432.52 + module_name: "routing" + sequence_num: 1 +} +route { + road_info { + id: "r0" + in_lane { + id: "752_1_-1" + s: 0.0 + } + out_lane { + id: "752_1_-1" + s: 20.1963 + } + passage_region { + segment { + id: "752_1_-1" + start_s: 0.0 + end_s: 20.1963 + } + } + } +} +route { + road_info { + id: "r1" + in_lane { + id: "753_1_-1" + s: 0.0 + } + out_lane { + id: "753_1_-1" + s: 21.6437 + } + passage_region { + segment { + id: "753_1_-1" + start_s: 0.0 + end_s: 21.6437 + } + } + } +} +route { + road_info { + id: "r2" + in_lane { + id: "6_1_-2" + s: 0.0 + } + out_lane { + id: "6_1_-2" + s: 194.692 + } + passage_region { + segment { + id: "6_1_-2" + start_s: 0.0 + end_s: 194.692 + } + } + } +} +route { + road_info { + id: "r3" + in_lane { + id: "7_1_-2" + s: 0.0 + } + out_lane { + id: "7_1_-2" + s: 32.89 + } + passage_region { + segment { + id: "7_1_-2" + start_s: 0.0 + end_s: 32.89 + } + } + } +} +route { + road_info { + id: "r4" + in_lane { + id: "1_1_-3" + s: 0.0 + } + out_lane { + id: "1_1_-3" + s: 65.2454 + } + passage_region { + segment { + id: "1_1_-3" + start_s: 0.0 + end_s: 65.2454 + } + } + } +} +route { + road_info { + id: "r5" + in_lane { + id: "151_1_-2" + s: 0.0 + } + out_lane { + id: "151_1_-2" + s: 43.8648 + } + passage_region { + segment { + id: "151_1_-2" + start_s: 0.0 + end_s: 43.8648 + } + } + } +} +route { + road_info { + id: "r6" + in_lane { + id: "9_1_-2" + s: 0.0 + } + out_lane { + id: "9_1_-2" + s: 161.962 + } + passage_region { + segment { + id: "9_1_-2" + start_s: 0.0 + end_s: 161.962 + } + } + } +} +route { + road_info { + id: "r7" + in_lane { + id: "13_1_-2" + s: 0.0 + } + out_lane { + id: "13_1_-2" + s: 35.3398 + } + passage_region { + segment { + id: "13_1_-2" + start_s: 0.0 + end_s: 35.3398 + } + } + } +} +route { + road_info { + id: "r8" + in_lane { + id: "12_1_-3" + s: 0.0 + } + out_lane { + id: "12_1_-3" + s: 122.494 + } + passage_region { + segment { + id: "12_1_-3" + start_s: 0.0 + end_s: 122.494 + } + } + } +} +route { + road_info { + id: "r9" + in_lane { + id: "133_1_-3" + s: 0.0 + } + out_lane { + id: "133_1_-3" + s: 3.63182 + } + passage_region { + segment { + id: "133_1_-3" + start_s: 0.0 + end_s: 3.63182 + } + } + } +} +route { + road_info { + id: "r10" + in_lane { + id: "88_1_-1" + s: 0.0 + } + out_lane { + id: "88_1_-1" + s: 19.7333 + } + passage_region { + segment { + id: "88_1_-1" + start_s: 0.0 + end_s: 19.7333 + } + } + } +} +route { + road_info { + id: "r11" + in_lane { + id: "21_1_-1" + s: 0.0 + } + out_lane { + id: "21_1_-1" + s: 128.73 + } + passage_region { + segment { + id: "21_1_-1" + start_s: 0.0 + end_s: 128.73 + } + } + } +} +route { + road_info { + id: "r12" + in_lane { + id: "22_1_-1" + s: 0.0 + } + out_lane { + id: "22_1_-1" + s: 31.9409 + } + passage_region { + segment { + id: "22_1_-1" + start_s: 0.0 + end_s: 31.9409 + } + } + } +} +route { + road_info { + id: "r13" + in_lane { + id: "23_1_-1" + s: 0.0 + } + out_lane { + id: "23_1_-2" + s: 0.0 + } + passage_region { + segment { + id: "23_1_-1" + start_s: 0.0 + end_s: 0.0 + } + } + passage_region { + segment { + id: "23_1_-2" + start_s: 0.0 + end_s: 0.0 + } + } + lane_change_info { + type: RIGHT_FORWARD + start_passage_region_index: 0 + end_passage_region_index: 1 + } + } +} +measurement { + distance: 882.36402 +} +routing_request { + header { + timestamp_sec: 1503436432.52 + module_name: "hmi_ros_bridge" + sequence_num: 8 + } + start { + id: "752_1_-1" + s: 19.2379743058 + pose { + x: 587513.524212 + y: 4140713.13848 + z: -29.8966481164 + } + } + end { + id: "23_1_-2" + s: 0.0 + pose { + x: 586951.020771 + y: 4141170.53658 + } + } +} +map_version: "1.400000" diff --git a/modules/planning/testdata/sunnyvale_loop_test/2_chassis.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/2_chassis.pb.txt new file mode 100755 index 00000000000..fe5f40a2069 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/2_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 0 +speed_mps: 2.7111111 +odometer_m: 0 +fuel_range_m: 0 +throttle_percentage: 15.031663 +brake_percentage: 23.480583 +steering_percentage: -11.893617 +steering_torque_nm: -1.625 +parking_brake: false +driving_mode: COMPLETE_MANUAL +error_code: NO_ERROR +gear_location: GEAR_DRIVE +header { + timestamp_sec: 1504137801.1602917 + module_name: "chassis" + sequence_num: 8582 +} +signal { + turn_signal: TURN_RIGHT + horn: false +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/2_localization.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/2_localization.pb.txt new file mode 100755 index 00000000000..d54d0595a63 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/2_localization.pb.txt @@ -0,0 +1,49 @@ +header { + timestamp_sec: 1504137801.1540642 + module_name: "localization" + sequence_num: 9641 +} +pose { + position { + x: 587045.66240733874 + y: 4141549.0626950948 + z: -31.299898234196007 + } + orientation { + qx: -0.045296475715011039 + qy: 0.017067935912339849 + qz: -0.17942469644699402 + qw: 0.98258012047689813 + } + linear_velocity { + x: 0.95160587339251179 + y: 2.5243101138202366 + z: -0.03652591539262251 + } + linear_acceleration { + x: -0.24884682217253135 + y: -0.90949121068718553 + z: -0.20129972315595951 + } + angular_velocity { + x: 0.012665705286737822 + y: 0.000502381408384895 + z: -0.061508888409814014 + } + heading: 1.2103929796890078 + linear_acceleration_vrf { + x: 0.092891639215445687 + y: -0.91540677177473739 + z: -0.28813567519156147 + } + angular_velocity_vrf { + x: 0.012728191094051541 + y: 0.010766229267606368 + z: -0.060548305424112284 + } + euler_angles { + x: 0.017366259648608176 + y: 0.09528376629154689 + z: 1.2103929796890078 + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/2_prediction.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/2_prediction.pb.txt new file mode 100755 index 00000000000..1a1e4ac07d4 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/2_prediction.pb.txt @@ -0,0 +1,2559 @@ +header { + timestamp_sec: 1504137801.1110137 + module_name: "prediction" + sequence_num: 872 +} +prediction_obstacle { + perception_obstacle { + id: 99 + position { + x: 587043.043616045 + y: 4141541.1631186148 + z: -32.579154254893915 + } + theta: 1.2974655649788569 + velocity { + x: 1.2682280540466309 + y: 4.5237741470336914 + z: 0 + } + length: 3.8512444496154785 + width: 2.4210004806518555 + height: 1.6361221075057983 + polygon_point { + x: 587041.97361356742 + y: 4141539.3960973122 + z: -32.1759078691457 + } + polygon_point { + x: 587041.79993754916 + y: 4141541.2113384488 + z: -32.358833361679977 + } + polygon_point { + x: 587042.39659985865 + y: 4141542.9216527538 + z: -32.5667500347185 + } + polygon_point { + x: 587042.69698065845 + y: 4141543.0225020912 + z: -32.591415226853336 + } + polygon_point { + x: 587043.19676541432 + y: 4141543.0994291385 + z: -32.622890267582854 + } + polygon_point { + x: 587044.03367361822 + y: 4141542.8439654019 + z: -32.635151782818909 + } + polygon_point { + x: 587044.065810659 + y: 4141542.8300656145 + z: -32.63519215383311 + } + polygon_point { + x: 587044.44215659855 + y: 4141542.4829536583 + z: -32.616263990006722 + } + polygon_point { + x: 587044.50100794842 + y: 4141541.8790191156 + z: -32.555454297875542 + } + polygon_point { + x: 587044.40627594269 + y: 4141541.5984608256 + z: -32.521494913211832 + } + polygon_point { + x: 587044.24110098206 + y: 4141541.1394887939 + z: -32.465462783596216 + } + polygon_point { + x: 587044.135485162 + y: 4141540.8462791797 + z: -32.429662761336516 + } + polygon_point { + x: 587043.59054181841 + y: 4141539.3654699689 + z: -32.248320210432631 + } + polygon_point { + x: 587043.40740545071 + y: 4141538.94479791 + z: -32.195478868685569 + } + tracking_time: 64.151758670806885 + type: UNKNOWN + timestamp: 0 + } + timestamp: 1504137801.1052372 + predicted_period: 3 + trajectory { + probability: 0.68539869860103741 + trajectory_point { + path_point { + x: 587043.4150015919 + y: 4141541.0005331258 + z: 0 + theta: 1.1532258341937724 + } + v: 3.9721828357772595 + a: -1.3002164626135329 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587043.57330362732 + y: 4141541.3573411214 + z: 0 + theta: 1.1530544888430498 + } + v: 3.842161189515906 + a: -1.3002164626135329 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587043.72637977276 + y: 4141541.7022106992 + z: 0 + theta: 1.1563043125259256 + } + v: 3.7121395432545525 + a: -1.3002164626135329 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587043.8735376664 + y: 4141542.0366739403 + z: 0 + theta: 1.1554234122455616 + } + v: 3.582117896993199 + a: -1.3002164626135329 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587044.01413940534 + y: 4141542.3554740944 + z: 0 + theta: 1.2207222756133043 + } + v: 3.4520962507318456 + a: -1.3002164626135329 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587044.12894991424 + y: 4141542.6699265866 + z: 0 + theta: 1.2391467031683059 + } + v: 3.3220746044704921 + a: -1.3002164626135329 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587044.23495738127 + y: 4141542.9777575592 + z: 0 + theta: 1.2402822986900628 + } + v: 3.1920529582091386 + a: -1.3002164626135329 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587044.33646629215 + y: 4141543.2736162497 + z: 0 + theta: 1.239939793445602 + } + v: 3.0620313119477851 + a: -1.3002164626135329 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587044.43382766971 + y: 4141543.5570701961 + z: 0 + theta: 1.239433631674538 + } + v: 2.9320096656864316 + a: -1.3002164626135329 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587044.52706737851 + y: 4141543.8280779277 + z: 0 + theta: 1.2401629559962659 + } + v: 2.8019880194250781 + a: -1.3002164626135329 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587044.61596790643 + y: 4141544.0870874207 + z: 0 + theta: 1.2388396166734033 + } + v: 2.6719663731637247 + a: -1.3002164626135329 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587044.700896982 + y: 4141544.3334638863 + z: 0 + theta: 1.2398983836028914 + } + v: 2.5419447269023712 + a: -1.3002164626135329 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587044.78138859733 + y: 4141544.5677723135 + z: 0 + theta: 1.2390464025759151 + } + v: 2.4119230806410177 + a: -1.3002164626135329 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587044.85779584385 + y: 4141544.7895760876 + z: 0 + theta: 1.2400896276668592 + } + v: 2.2819014343796642 + a: -1.3002164626135329 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587044.92981939472 + y: 4141544.999364824 + z: 0 + theta: 1.2386176930563282 + } + v: 2.1518797881183107 + a: -1.3002164626135329 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587044.99787753366 + y: 4141545.1966571361 + z: 0 + theta: 1.2383257292449388 + } + v: 2.0218581418569572 + a: -1.3002164626135329 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587045.06170488987 + y: 4141545.3815098321 + z: 0 + theta: 1.2395530781870561 + } + v: 1.891836495595604 + a: -1.3002164626135329 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587045.12114094745 + y: 4141545.5543319881 + z: 0 + theta: 1.238720078341522 + } + v: 1.7618148493342507 + a: -1.3002164626135329 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587045.176450667 + y: 4141545.7147214413 + z: 0 + theta: 1.2383184388568012 + } + v: 1.6317932030728974 + a: -1.3002164626135329 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587045.22757337173 + y: 4141545.8627762417 + z: 0 + theta: 1.2393240986327478 + } + v: 1.5017715568115442 + a: -1.3002164626135329 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587045.27436330973 + y: 4141545.9987260606 + z: 0 + theta: 1.2376183897764899 + } + v: 1.3717499105501909 + a: -1.3002164626135329 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587045.31708124222 + y: 4141546.1221599206 + z: 0 + theta: 1.2371451260469268 + } + v: 1.2417282642888376 + a: -1.3002164626135329 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587045.35559754935 + y: 4141546.2332829563 + z: 0 + theta: 1.2382781919750594 + } + v: 1.1117066180274844 + a: -1.3002164626135329 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587045.38978789037 + y: 4141546.3322875737 + z: 0 + theta: 1.2377307843939553 + } + v: 0.98168497176613112 + a: -1.3002164626135329 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587045.4197783795 + y: 4141546.4189768932 + z: 0 + theta: 1.2353558757549135 + } + v: 0.85166332550477786 + a: -1.3002164626135329 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587045.44572381245 + y: 4141546.4934012052 + z: 0 + theta: 1.2342499567949838 + } + v: 0.72164167924342459 + a: -1.3002164626135329 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587045.46745066158 + y: 4141546.5555034992 + z: 0 + theta: 1.2327309882684974 + } + v: 0.59162003298207133 + a: -1.3002164626135329 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587045.48495069076 + y: 4141546.6052814848 + z: 0 + theta: 1.227559863747995 + } + v: 0.46159838672071807 + a: -1.3002164626135329 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587045.49831012881 + y: 4141546.6426628279 + z: 0 + theta: 1.2201693057888654 + } + v: 0.3315767404593648 + a: -1.3002164626135329 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587045.50746738876 + y: 4141546.667700503 + z: 0 + theta: 1.2201693057888654 + } + v: 0.20155509419801151 + a: -1.3002164626135329 + relative_time: 2.9000000000000004 + } + } + trajectory { + probability: 0.68539869860103741 + trajectory_point { + path_point { + x: 587043.4150015919 + y: 4141541.0005331258 + z: 0 + theta: 1.1532258341937724 + } + v: 3.9721828357772595 + a: -1.3002164626135329 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587043.57330362732 + y: 4141541.3573411214 + z: 0 + theta: 1.1530544888430498 + } + v: 3.842161189515906 + a: -1.3002164626135329 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587043.72637977276 + y: 4141541.7022106992 + z: 0 + theta: 1.1563043125259256 + } + v: 3.7121395432545525 + a: -1.3002164626135329 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587043.8735376664 + y: 4141542.0366739403 + z: 0 + theta: 1.1554234122455616 + } + v: 3.582117896993199 + a: -1.3002164626135329 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587044.01413940534 + y: 4141542.3554740944 + z: 0 + theta: 1.2207222756133043 + } + v: 3.4520962507318456 + a: -1.3002164626135329 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587044.12894991424 + y: 4141542.6699265866 + z: 0 + theta: 1.2391467031683059 + } + v: 3.3220746044704921 + a: -1.3002164626135329 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587044.23495738127 + y: 4141542.9777575592 + z: 0 + theta: 1.2402822986900628 + } + v: 3.1920529582091386 + a: -1.3002164626135329 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587044.33646629215 + y: 4141543.2736162497 + z: 0 + theta: 1.239939793445602 + } + v: 3.0620313119477851 + a: -1.3002164626135329 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587044.43382766971 + y: 4141543.5570701961 + z: 0 + theta: 1.239433631674538 + } + v: 2.9320096656864316 + a: -1.3002164626135329 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587044.52706737851 + y: 4141543.8280779277 + z: 0 + theta: 1.2401629559962659 + } + v: 2.8019880194250781 + a: -1.3002164626135329 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587044.61596790643 + y: 4141544.0870874207 + z: 0 + theta: 1.2388396166734033 + } + v: 2.6719663731637247 + a: -1.3002164626135329 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587044.700896982 + y: 4141544.3334638863 + z: 0 + theta: 1.2398983836028914 + } + v: 2.5419447269023712 + a: -1.3002164626135329 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587044.78138859733 + y: 4141544.5677723135 + z: 0 + theta: 1.2390464025759151 + } + v: 2.4119230806410177 + a: -1.3002164626135329 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587044.85779584385 + y: 4141544.7895760876 + z: 0 + theta: 1.2400896276668592 + } + v: 2.2819014343796642 + a: -1.3002164626135329 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587044.92981939472 + y: 4141544.999364824 + z: 0 + theta: 1.2386176930563282 + } + v: 2.1518797881183107 + a: -1.3002164626135329 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587044.99787753366 + y: 4141545.1966571361 + z: 0 + theta: 1.2383257292449388 + } + v: 2.0218581418569572 + a: -1.3002164626135329 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587045.06170488987 + y: 4141545.3815098321 + z: 0 + theta: 1.2395530781870561 + } + v: 1.891836495595604 + a: -1.3002164626135329 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587045.12114094745 + y: 4141545.5543319881 + z: 0 + theta: 1.238720078341522 + } + v: 1.7618148493342507 + a: -1.3002164626135329 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587045.176450667 + y: 4141545.7147214413 + z: 0 + theta: 1.2383184388568012 + } + v: 1.6317932030728974 + a: -1.3002164626135329 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587045.22757337173 + y: 4141545.8627762417 + z: 0 + theta: 1.2393240986327478 + } + v: 1.5017715568115442 + a: -1.3002164626135329 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587045.27436330973 + y: 4141545.9987260606 + z: 0 + theta: 1.2376183897764899 + } + v: 1.3717499105501909 + a: -1.3002164626135329 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587045.31708124222 + y: 4141546.1221599206 + z: 0 + theta: 1.2371451260469268 + } + v: 1.2417282642888376 + a: -1.3002164626135329 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587045.35559754935 + y: 4141546.2332829563 + z: 0 + theta: 1.2382781919750594 + } + v: 1.1117066180274844 + a: -1.3002164626135329 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587045.38978789037 + y: 4141546.3322875737 + z: 0 + theta: 1.2377307843939553 + } + v: 0.98168497176613112 + a: -1.3002164626135329 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587045.4197783795 + y: 4141546.4189768932 + z: 0 + theta: 1.2353558757549135 + } + v: 0.85166332550477786 + a: -1.3002164626135329 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587045.44572381245 + y: 4141546.4934012052 + z: 0 + theta: 1.2342499567949838 + } + v: 0.72164167924342459 + a: -1.3002164626135329 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587045.46745066158 + y: 4141546.5555034992 + z: 0 + theta: 1.2327309882684974 + } + v: 0.59162003298207133 + a: -1.3002164626135329 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587045.48495069076 + y: 4141546.6052814848 + z: 0 + theta: 1.227559863747995 + } + v: 0.46159838672071807 + a: -1.3002164626135329 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587045.49831012881 + y: 4141546.6426628279 + z: 0 + theta: 1.2201693057888654 + } + v: 0.3315767404593648 + a: -1.3002164626135329 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587045.50746738876 + y: 4141546.667700503 + z: 0 + theta: 1.2201693057888654 + } + v: 0.20155509419801151 + a: -1.3002164626135329 + relative_time: 2.9000000000000004 + } + } + trajectory { + probability: 0.68539869860103741 + trajectory_point { + path_point { + x: 587043.4150015919 + y: 4141541.0005331258 + z: 0 + theta: 1.1532258341937724 + } + v: 3.9721828357772595 + a: -1.3002164626135329 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587043.57330362732 + y: 4141541.3573411214 + z: 0 + theta: 1.1530544888430498 + } + v: 3.842161189515906 + a: -1.3002164626135329 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587043.72637977276 + y: 4141541.7022106992 + z: 0 + theta: 1.1563043125259256 + } + v: 3.7121395432545525 + a: -1.3002164626135329 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587043.8735376664 + y: 4141542.0366739403 + z: 0 + theta: 1.1554234122455616 + } + v: 3.582117896993199 + a: -1.3002164626135329 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587044.01413940534 + y: 4141542.3554740944 + z: 0 + theta: 1.2207222756133043 + } + v: 3.4520962507318456 + a: -1.3002164626135329 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587044.12894991424 + y: 4141542.6699265866 + z: 0 + theta: 1.2391467031683059 + } + v: 3.3220746044704921 + a: -1.3002164626135329 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587044.23495738127 + y: 4141542.9777575592 + z: 0 + theta: 1.2402822986900628 + } + v: 3.1920529582091386 + a: -1.3002164626135329 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587044.33646629215 + y: 4141543.2736162497 + z: 0 + theta: 1.239939793445602 + } + v: 3.0620313119477851 + a: -1.3002164626135329 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587044.43382766971 + y: 4141543.5570701961 + z: 0 + theta: 1.239433631674538 + } + v: 2.9320096656864316 + a: -1.3002164626135329 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587044.52706737851 + y: 4141543.8280779277 + z: 0 + theta: 1.2401629559962659 + } + v: 2.8019880194250781 + a: -1.3002164626135329 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587044.61596790643 + y: 4141544.0870874207 + z: 0 + theta: 1.2388396166734033 + } + v: 2.6719663731637247 + a: -1.3002164626135329 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587044.700896982 + y: 4141544.3334638863 + z: 0 + theta: 1.2398983836028914 + } + v: 2.5419447269023712 + a: -1.3002164626135329 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587044.78138859733 + y: 4141544.5677723135 + z: 0 + theta: 1.2390464025759151 + } + v: 2.4119230806410177 + a: -1.3002164626135329 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587044.85779584385 + y: 4141544.7895760876 + z: 0 + theta: 1.2400896276668592 + } + v: 2.2819014343796642 + a: -1.3002164626135329 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587044.92981939472 + y: 4141544.999364824 + z: 0 + theta: 1.2386176930563282 + } + v: 2.1518797881183107 + a: -1.3002164626135329 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587044.99787753366 + y: 4141545.1966571361 + z: 0 + theta: 1.2383257292449388 + } + v: 2.0218581418569572 + a: -1.3002164626135329 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587045.06170488987 + y: 4141545.3815098321 + z: 0 + theta: 1.2395530781870561 + } + v: 1.891836495595604 + a: -1.3002164626135329 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587045.12114094745 + y: 4141545.5543319881 + z: 0 + theta: 1.238720078341522 + } + v: 1.7618148493342507 + a: -1.3002164626135329 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587045.176450667 + y: 4141545.7147214413 + z: 0 + theta: 1.2383184388568012 + } + v: 1.6317932030728974 + a: -1.3002164626135329 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587045.22757337173 + y: 4141545.8627762417 + z: 0 + theta: 1.2393240986327478 + } + v: 1.5017715568115442 + a: -1.3002164626135329 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587045.27436330973 + y: 4141545.9987260606 + z: 0 + theta: 1.2376183897764899 + } + v: 1.3717499105501909 + a: -1.3002164626135329 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587045.31708124222 + y: 4141546.1221599206 + z: 0 + theta: 1.2371451260469268 + } + v: 1.2417282642888376 + a: -1.3002164626135329 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587045.35559754935 + y: 4141546.2332829563 + z: 0 + theta: 1.2382781919750594 + } + v: 1.1117066180274844 + a: -1.3002164626135329 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587045.38978789037 + y: 4141546.3322875737 + z: 0 + theta: 1.2377307843939553 + } + v: 0.98168497176613112 + a: -1.3002164626135329 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587045.4197783795 + y: 4141546.4189768932 + z: 0 + theta: 1.2353558757549135 + } + v: 0.85166332550477786 + a: -1.3002164626135329 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587045.44572381245 + y: 4141546.4934012052 + z: 0 + theta: 1.2342499567949838 + } + v: 0.72164167924342459 + a: -1.3002164626135329 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587045.46745066158 + y: 4141546.5555034992 + z: 0 + theta: 1.2327309882684974 + } + v: 0.59162003298207133 + a: -1.3002164626135329 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587045.48495069076 + y: 4141546.6052814848 + z: 0 + theta: 1.227559863747995 + } + v: 0.46159838672071807 + a: -1.3002164626135329 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587045.49831012881 + y: 4141546.6426628279 + z: 0 + theta: 1.2201693057888654 + } + v: 0.3315767404593648 + a: -1.3002164626135329 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587045.50746738876 + y: 4141546.667700503 + z: 0 + theta: 1.2201693057888654 + } + v: 0.20155509419801151 + a: -1.3002164626135329 + relative_time: 2.9000000000000004 + } + } +} +prediction_obstacle { + perception_obstacle { + id: 401 + position { + x: 587051.75723909191 + y: 4141559.5737631461 + z: -34.609407903651849 + } + theta: 0.9332627630493957 + velocity { + x: 0 + y: 0 + z: 0 + } + length: 4.3328003883361816 + width: 2.0866458415985107 + height: 1.9137074947357178 + polygon_point { + x: 587050.971343054 + y: 4141557.6131931548 + z: -34.24636148527533 + } + polygon_point { + x: 587050.71294866991 + y: 4141557.705250822 + z: -34.243963293425615 + } + polygon_point { + x: 587050.54959876742 + y: 4141557.7775940369 + z: -34.243936143668442 + } + polygon_point { + x: 587050.4979124784 + y: 4141557.805928967 + z: -34.244500571402149 + } + polygon_point { + x: 587049.73099311418 + y: 4141558.5896829371 + z: -34.291114189411473 + } + polygon_point { + x: 587050.29640854185 + y: 4141559.2931636525 + z: -34.391602481430866 + } + polygon_point { + x: 587051.108901266 + y: 4141560.1772531555 + z: -34.522657047007165 + } + polygon_point { + x: 587053.72678909893 + y: 4141560.7967063366 + z: -34.710311091304916 + } + polygon_point { + x: 587053.60651313281 + y: 4141560.3984146351 + z: -34.662765676362682 + } + polygon_point { + x: 587053.38699084357 + y: 4141560.0182117028 + z: -34.612481568671214 + } + polygon_point { + x: 587051.63082574855 + y: 4141557.6961397575 + z: -34.285940332844028 + } + tracking_time: 6.0031471252441406 + type: UNKNOWN + timestamp: 0 + } + timestamp: 1504137801.1052372 + predicted_period: 3 + trajectory { + probability: 0.67277555636473285 + trajectory_point { + path_point { + x: 587051.81575547263 + y: 4141559.538728 + z: 0 + theta: 0.027651399330485181 + } + v: 0.16610651028696477 + a: -0.0028526930525682339 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587051.84263787558 + y: 4141559.5394715257 + z: 0 + theta: 0.0785178977331184 + } + v: 0.16582124098170795 + a: -0.0028526930525682339 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587051.86780278315 + y: 4141559.5414514919 + z: 0 + theta: 0.34034434282026754 + } + v: 0.16553597167645112 + a: -0.0028526930525682339 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587051.89824743359 + y: 4141559.5522326841 + z: 0 + theta: 0.13055508470856073 + } + v: 0.1652507023711943 + a: -0.0028526930525682339 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587051.9209812294 + y: 4141559.5552176754 + z: 0 + theta: 0.17904579167952148 + } + v: 0.16496543306593747 + a: -0.0028526930525682339 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587051.942459156 + y: 4141559.5591048342 + z: 0 + theta: 0.22703303216045892 + } + v: 0.16468016376068065 + a: -0.0028526930525682339 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587051.96280793182 + y: 4141559.563805725 + z: 0 + theta: 0.27402875156689915 + } + v: 0.16439489445542382 + a: -0.0028526930525682339 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587051.982141314 + y: 4141559.5692403452 + z: 0 + theta: 0.31959635753485033 + } + v: 0.164109625150167 + a: -0.0028526930525682339 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587052.000561423 + y: 4141559.5753363236 + z: 0 + theta: 0.36336735520803254 + } + v: 0.16382435584491017 + a: -0.0028526930525682339 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587052.01815993129 + y: 4141559.5820281948 + z: 0 + theta: 0.40505104772663691 + } + v: 0.16353908653965335 + a: -0.0028526930525682339 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587052.03501913068 + y: 4141559.5892567444 + z: 0 + theta: 0.44443705397981342 + } + v: 0.16325381723439653 + a: -0.0028526930525682339 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587052.051212892 + y: 4141559.5969684138 + z: 0 + theta: 0.48139214768150196 + } + v: 0.1629685479291397 + a: -0.0028526930525682339 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587052.06680752512 + y: 4141559.6051147631 + z: 0 + theta: 0.51585246520315975 + } + v: 0.16268327862388288 + a: -0.0028526930525682339 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587052.08186255186 + y: 4141559.6136519816 + z: 0 + theta: 0.51744800867715557 + } + v: 0.16239800931862605 + a: -0.0028526930525682339 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587052.09663378657 + y: 4141559.6220594458 + z: 0 + theta: 0.53962734483247921 + } + v: 0.16211274001336923 + a: -0.0028526930525682339 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587052.11105377728 + y: 4141559.6306959125 + z: 0 + theta: 0.56730734788238635 + } + v: 0.1618274707081124 + a: -0.0028526930525682339 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587052.12511123647 + y: 4141559.6396529907 + z: 0 + theta: 0.59254776702365 + } + v: 0.16154220140285558 + a: -0.0028526930525682339 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587052.138839692 + y: 4141559.6488956995 + z: 0 + theta: 0.61551433224380681 + } + v: 0.16125693209759875 + a: -0.0028526930525682339 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587052.15226940275 + y: 4141559.6583926366 + z: 0 + theta: 0.63637531952141924 + } + v: 0.16097166279234193 + a: -0.0028526930525682339 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587052.16542767663 + y: 4141559.6681156135 + z: 0 + theta: 0.65529660859983752 + } + v: 0.16068639348708511 + a: -0.0028526930525682339 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587052.17833915749 + y: 4141559.678039324 + z: 0 + theta: 0.6724387826360686 + } + v: 0.16040112418182828 + a: -0.0028526930525682339 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587052.191026085 + y: 4141559.688141054 + z: 0 + theta: 0.68795438488077865 + } + v: 0.16011585487657146 + a: -0.0028526930525682339 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587052.20350852911 + y: 4141559.6984004104 + z: 0 + theta: 0.70198726093751851 + } + v: 0.15983058557131463 + a: -0.0028526930525682339 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587052.21580460051 + y: 4141559.70879909 + z: 0 + theta: 0.71467133571182784 + } + v: 0.15954531626605781 + a: -0.0028526930525682339 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587052.2279306422 + y: 4141559.7193206614 + z: 0 + theta: 0.7398907513124251 + } + v: 0.15926004696080098 + a: -0.0028526930525682339 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587052.23976710788 + y: 4141559.7301260433 + z: 0 + theta: 0.76518903989205278 + } + v: 0.15897477765554416 + a: -0.0028526930525682339 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587052.25130643381 + y: 4141559.7412081477 + z: 0 + theta: 0.77444129731488343 + } + v: 0.15868950835028733 + a: -0.0028526930525682339 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587052.26270619628 + y: 4141559.7523607966 + z: 0 + theta: 0.78280864975052211 + } + v: 0.15840423904503051 + a: -0.0028526930525682339 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587052.27397878026 + y: 4141559.76357515 + z: 0 + theta: 0.7903721565582833 + } + v: 0.15811896973977368 + a: -0.0028526930525682339 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587052.28513530351 + y: 4141559.7748432141 + z: 0 + theta: 0.7903721565582833 + } + v: 0.15783370043451686 + a: -0.0028526930525682339 + relative_time: 2.9000000000000004 + } + } + trajectory { + probability: 0.77668906911238245 + trajectory_point { + path_point { + x: 587051.81575547263 + y: 4141559.538728 + z: 0 + theta: 0.027651399330485181 + } + v: 0.16610651028696477 + a: -0.0028526930525682339 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587051.84263787558 + y: 4141559.5394715257 + z: 0 + theta: 0.0785178977331184 + } + v: 0.16582124098170795 + a: -0.0028526930525682339 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587051.86780278315 + y: 4141559.5414514919 + z: 0 + theta: 0.30662197785582018 + } + v: 0.16553597167645112 + a: -0.0028526930525682339 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587051.89675686718 + y: 4141559.550618554 + z: 0 + theta: 0.12790158809014579 + } + v: 0.1652507023711943 + a: -0.0028526930525682339 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587051.919133286 + y: 4141559.5534962425 + z: 0 + theta: 0.17964052970424566 + } + v: 0.16496543306593747 + a: -0.0028526930525682339 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587051.94030818366 + y: 4141559.5573415654 + z: 0 + theta: 0.2304400513668064 + } + v: 0.16468016376068065 + a: -0.0028526930525682339 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587051.96039955807 + y: 4141559.5620551542 + z: 0 + theta: 0.27981278393969261 + } + v: 0.16439489445542382 + a: -0.0028526930525682339 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587051.97951364156 + y: 4141559.5675476175 + z: 0 + theta: 0.32734006889351591 + } + v: 0.164109625150167 + a: -0.0028526930525682339 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587051.99774607434 + y: 4141559.5737385415 + z: 0 + theta: 0.372685002343734 + } + v: 0.16382435584491017 + a: -0.0028526930525682339 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587052.01518296031 + y: 4141559.5805555847 + z: 0 + theta: 0.41559820216382903 + } + v: 0.16353908653965335 + a: -0.0028526930525682339 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587052.031901818 + y: 4141559.5879336707 + z: 0 + theta: 0.45591588975729019 + } + v: 0.16325381723439653 + a: -0.0028526930525682339 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587052.04797243688 + y: 4141559.5958142583 + z: 0 + theta: 0.49355253466130589 + } + v: 0.1629685479291397 + a: -0.0028526930525682339 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587052.06345764711 + y: 4141559.6041446831 + z: 0 + theta: 0.52849034982464782 + } + v: 0.16268327862388288 + a: -0.0028526930525682339 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587052.07841401419 + y: 4141559.6128775696 + z: 0 + theta: 0.56367361243013825 + } + v: 0.16239800931862605 + a: -0.0028526930525682339 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587052.09288187232 + y: 4141559.6220223983 + z: 0 + theta: 0.59486605586934282 + } + v: 0.16211274001336923 + a: -0.0028526930525682339 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587052.10690620681 + y: 4141559.6315116314 + z: 0 + theta: 0.6219431564162492 + } + v: 0.1618274707081124 + a: -0.0028526930525682339 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587052.1205340164 + y: 4141559.6412806804 + z: 0 + theta: 0.64672144262135711 + } + v: 0.16154220140285558 + a: -0.0028526930525682339 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587052.13380334934 + y: 4141559.6512996103 + z: 0 + theta: 0.66933764619135228 + } + v: 0.16125693209759875 + a: -0.0028526930525682339 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587052.14674842893 + y: 4141559.661541455 + z: 0 + theta: 0.68993581945508 + } + v: 0.16097166279234193 + a: -0.0028526930525682339 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587052.15940003784 + y: 4141559.6719819196 + z: 0 + theta: 0.70866244816132418 + } + v: 0.16068639348708511 + a: -0.0028526930525682339 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587052.17178586358 + y: 4141559.6825991189 + z: 0 + theta: 0.725662268950644 + } + v: 0.16040112418182828 + a: -0.0028526930525682339 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587052.18393081019 + y: 4141559.6933733379 + z: 0 + theta: 0.74107547508007021 + } + v: 0.16011585487657146 + a: -0.0028526930525682339 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587052.19585727819 + y: 4141559.7042868147 + z: 0 + theta: 0.75503606523916111 + } + v: 0.15983058557131463 + a: -0.0028526930525682339 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587052.20758541545 + y: 4141559.71532355 + z: 0 + theta: 0.7676702926170943 + } + v: 0.15954531626605781 + a: -0.0028526930525682339 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587052.21913334483 + y: 4141559.72646913 + z: 0 + theta: 0.7753009042549267 + } + v: 0.15926004696080098 + a: -0.0028526930525682339 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587052.23056265665 + y: 4141559.7376699317 + z: 0 + theta: 0.78145877548389442 + } + v: 0.15897477765554416 + a: -0.0028526930525682339 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587052.24189271976 + y: 4141559.7489110776 + z: 0 + theta: 0.79078299705938226 + } + v: 0.15868950835028733 + a: -0.0028526930525682339 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587052.25308714062 + y: 4141559.7602267126 + z: 0 + theta: 0.799203800378793 + } + v: 0.15840423904503051 + a: -0.0028526930525682339 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587052.26415769116 + y: 4141559.7716072341 + z: 0 + theta: 0.80680637462578753 + } + v: 0.15811896973977368 + a: -0.0028526930525682339 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587052.27511496306 + y: 4141559.7830439955 + z: 0 + theta: 0.80680637462578753 + } + v: 0.15783370043451686 + a: -0.0028526930525682339 + relative_time: 2.9000000000000004 + } + } + trajectory { + probability: 0.8359538343854408 + trajectory_point { + path_point { + x: 587051.81575547263 + y: 4141559.538728 + z: 0 + theta: 0.027651399330485181 + } + v: 0.16610651028696477 + a: -0.0028526930525682339 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587051.84263787558 + y: 4141559.5394715257 + z: 0 + theta: 0.0785178977331184 + } + v: 0.16582124098170795 + a: -0.0028526930525682339 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587051.86780278315 + y: 4141559.5414514919 + z: 0 + theta: 0.3727353256903253 + } + v: 0.16553597167645112 + a: -0.0028526930525682339 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587051.90007084759 + y: 4141559.5540687353 + z: 0 + theta: 0.08209053871417 + } + v: 0.1652507023711943 + a: -0.0028526930525682339 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587051.92224957584 + y: 4141559.5558935 + z: 0 + theta: 0.13662728436918667 + } + v: 0.16496543306593747 + a: -0.0028526930525682339 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587051.94331845292 + y: 4141559.5587901296 + z: 0 + theta: 0.18984131307693566 + } + v: 0.16468016376068065 + a: -0.0028526930525682339 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587051.96338291257 + y: 4141559.5626456216 + z: 0 + theta: 0.2412498818609306 + } + v: 0.16439489445542382 + a: -0.0028526930525682339 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587051.98253823 + y: 4141559.5673586312 + z: 0 + theta: 0.2904538331903021 + } + v: 0.164109625150167 + a: -0.0028526930525682339 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587052.00087049615 + y: 4141559.5728382757 + z: 0 + theta: 0.33714713248640632 + } + v: 0.16382435584491017 + a: -0.0028526930525682339 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587052.01845750154 + y: 4141559.5790030533 + z: 0 + theta: 0.38111861407219649 + } + v: 0.16353908653965335 + a: -0.0028526930525682339 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587052.03536953323 + y: 4141559.5857798797 + z: 0 + theta: 0.422245781730774 + } + v: 0.16325381723439653 + a: -0.0028526930525682339 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587052.0516700967 + y: 4141559.593103216 + z: 0 + theta: 0.46048470476387116 + } + v: 0.1629685479291397 + a: -0.0028526930525682339 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587052.0674165677 + y: 4141559.6009142939 + z: 0 + theta: 0.49585654316316524 + } + v: 0.16268327862388288 + a: -0.0028526930525682339 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587052.08266078227 + y: 4141559.6091604163 + z: 0 + theta: 0.53755861342285749 + } + v: 0.16239800931862605 + a: -0.0028526930525682339 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587052.09736251261 + y: 4141559.6179243508 + z: 0 + theta: 0.59857685403252425 + } + v: 0.16211274001336923 + a: -0.0028526930525682339 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587052.11134027783 + y: 4141559.62745788 + z: 0 + theta: 0.62572178236289644 + } + v: 0.1618274707081124 + a: -0.0028526930525682339 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587052.124922332 + y: 4141559.6372720348 + z: 0 + theta: 0.65055184572868607 + } + v: 0.16154220140285558 + a: -0.0028526930525682339 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587052.13814654783 + y: 4141559.6473366618 + z: 0 + theta: 0.67320702200522553 + } + v: 0.16125693209759875 + a: -0.0028526930525682339 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587052.15104700078 + y: 4141559.6576246112 + z: 0 + theta: 0.69383424363874113 + } + v: 0.16097166279234193 + a: -0.0028526930525682339 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587052.16365434916 + y: 4141559.668111437 + z: 0 + theta: 0.71258210715502457 + } + v: 0.16068639348708511 + a: -0.0028526930525682339 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587052.17599617783 + y: 4141559.6787751275 + z: 0 + theta: 0.72959711873873623 + } + v: 0.16040112418182828 + a: -0.0028526930525682339 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587052.18809730571 + y: 4141559.6895958623 + z: 0 + theta: 0.74502101474632676 + } + v: 0.16011585487657146 + a: -0.0028526930525682339 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587052.199980063 + y: 4141559.7005557953 + z: 0 + theta: 0.75898882493576159 + } + v: 0.15983058557131463 + a: -0.0028526930525682339 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587052.21166454128 + y: 4141559.7116388581 + z: 0 + theta: 0.77162774090553532 + } + v: 0.15954531626605781 + a: -0.0028526930525682339 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587052.22316881747 + y: 4141559.722830581 + z: 0 + theta: 0.78303731316584879 + } + v: 0.15926004696080098 + a: -0.0028526930525682339 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587052.23450956552 + y: 4141559.7341179075 + z: 0 + theta: 0.78970350404879375 + } + v: 0.15897477765554416 + a: -0.0028526930525682339 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587052.24577437912 + y: 4141559.7454801388 + z: 0 + theta: 0.79895526543291162 + } + v: 0.15868950835028733 + a: -0.0028526930525682339 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587052.25689799327 + y: 4141559.756909525 + z: 0 + theta: 0.8073219851307184 + } + v: 0.15840423904503051 + a: -0.0028526930525682339 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587052.267892991 + y: 4141559.7683975147 + z: 0 + theta: 0.81488473452359134 + } + v: 0.15811896973977368 + a: -0.0028526930525682339 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587052.278770671 + y: 4141559.7799363732 + z: 0 + theta: 0.81488473452359134 + } + v: 0.15783370043451686 + a: -0.0028526930525682339 + relative_time: 2.9000000000000004 + } + } +} +prediction_obstacle { + perception_obstacle { + id: 412 + position { + x: 587061.5027835255 + y: 4141576.3191244742 + z: -35.436497213344232 + } + theta: -0.1449025741522863 + velocity { + x: -0.02698700875043869 + y: 0.014283234253525734 + z: 0 + } + length: 0.7677541971206665 + width: 0.71553170680999756 + height: 1.774716854095459 + polygon_point { + x: 587060.99556753389 + y: 4141575.85023266 + z: -35.380313398647885 + } + polygon_point { + x: 587061.05127654551 + y: 4141576.134374002 + z: -35.412824494213666 + } + polygon_point { + x: 587061.17796798237 + y: 4141576.5443916307 + z: -35.461904133235926 + } + polygon_point { + x: 587061.80872601981 + y: 4141575.9880026011 + z: -35.432850829087215 + } + polygon_point { + x: 587061.67020540219 + y: 4141575.9080751278 + z: -35.417959018959486 + } + tracking_time: 0.50025606155395508 + type: UNKNOWN + timestamp: 0 + } + timestamp: 1504137801.1052372 + predicted_period: 3 + trajectory { + probability: 0.97737370400223034 + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587061.47231301724 + y: 4141576.26838111 + z: 0 + theta: -0.70963128802945308 + } + v: 0 + a: 0 + relative_time: 2.9000000000000004 + } + } +} +perception_error_code: OK diff --git a/modules/planning/testdata/sunnyvale_loop_test/2_routing.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/2_routing.pb.txt new file mode 100755 index 00000000000..0d93e8f7384 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/2_routing.pb.txt @@ -0,0 +1,413 @@ +header { + timestamp_sec: 1504201419.0536358 + module_name: "routing" + sequence_num: 36 +} +route { + road_info { + id: "r0" + in_lane { + id: "27_1_-1" + s: 0 + } + out_lane { + id: "27_1_-1" + s: 14.3635 + } + passage_region { + segment { + id: "27_1_-1" + start_s: 0 + end_s: 14.3635 + } + } + } +} +route { + road_info { + id: "r1" + in_lane { + id: "81_1_-1" + s: 0 + } + out_lane { + id: "81_1_-1" + s: 17.986 + } + passage_region { + segment { + id: "81_1_-1" + start_s: 0 + end_s: 17.986 + } + } + } +} +route { + road_info { + id: "r2" + in_lane { + id: "160_1_-3" + s: 0 + } + out_lane { + id: "160_1_-3" + s: 251.678 + } + passage_region { + segment { + id: "160_1_-3" + start_s: 0 + end_s: 251.678 + } + } + } +} +route { + road_info { + id: "r3" + in_lane { + id: "822_1_-3" + s: 0 + } + out_lane { + id: "822_1_-3" + s: 58.4734 + } + passage_region { + segment { + id: "822_1_-3" + start_s: 0 + end_s: 58.4734 + } + } + } +} +route { + road_info { + id: "r4" + in_lane { + id: "165_1_-1" + s: 0 + } + out_lane { + id: "165_1_-1" + s: 37.7612 + } + passage_region { + segment { + id: "165_1_-1" + start_s: 0 + end_s: 37.7612 + } + } + } +} +route { + road_info { + id: "r5" + in_lane { + id: "138_1_-1" + s: 0 + } + out_lane { + id: "138_1_-1" + s: 308.143 + } + passage_region { + segment { + id: "138_1_-1" + start_s: 0 + end_s: 308.143 + } + } + } +} +route { + road_info { + id: "r6" + in_lane { + id: "144_1_-1" + s: 0 + } + out_lane { + id: "144_1_-1" + s: 46.5655 + } + passage_region { + segment { + id: "144_1_-1" + start_s: 0 + end_s: 46.5655 + } + } + } +} +route { + road_info { + id: "r7" + in_lane { + id: "140_1_-1" + s: 0 + } + out_lane { + id: "140_1_-1" + s: 146.337 + } + passage_region { + segment { + id: "140_1_-1" + start_s: 0 + end_s: 146.337 + } + } + } +} +route { + road_info { + id: "r8" + in_lane { + id: "747_1_-1" + s: 0 + } + out_lane { + id: "747_1_-1" + s: 15.6326 + } + passage_region { + segment { + id: "747_1_-1" + start_s: 0 + end_s: 15.6326 + } + } + } +} +route { + road_info { + id: "r9" + in_lane { + id: "141_1_-2" + s: 0 + } + out_lane { + id: "141_1_-2" + s: 41.6019 + } + passage_region { + segment { + id: "141_1_-2" + start_s: 0 + end_s: 41.6019 + } + } + } +} +route { + road_info { + id: "r10" + in_lane { + id: "906_1_-1" + s: 0 + } + out_lane { + id: "906_1_-1" + s: 27.921 + } + passage_region { + segment { + id: "906_1_-1" + start_s: 0 + end_s: 27.921 + } + } + } +} +route { + road_info { + id: "r11" + in_lane { + id: "9_1_-2" + s: 0 + } + out_lane { + id: "9_1_-2" + s: 161.962 + } + passage_region { + segment { + id: "9_1_-2" + start_s: 0 + end_s: 161.962 + } + } + } +} +route { + road_info { + id: "r12" + in_lane { + id: "13_1_-2" + s: 0 + } + out_lane { + id: "13_1_-2" + s: 35.3398 + } + passage_region { + segment { + id: "13_1_-2" + start_s: 0 + end_s: 35.3398 + } + } + } +} +route { + road_info { + id: "r13" + in_lane { + id: "12_1_-3" + s: 0 + } + out_lane { + id: "12_1_-3" + s: 122.494 + } + passage_region { + segment { + id: "12_1_-3" + start_s: 0 + end_s: 122.494 + } + } + } +} +route { + road_info { + id: "r14" + in_lane { + id: "133_1_-3" + s: 0 + } + out_lane { + id: "133_1_-3" + s: 3.63182 + } + passage_region { + segment { + id: "133_1_-3" + start_s: 0 + end_s: 3.63182 + } + } + } +} +route { + road_info { + id: "r15" + in_lane { + id: "88_1_-1" + s: 0 + } + out_lane { + id: "88_1_-1" + s: 19.7333 + } + passage_region { + segment { + id: "88_1_-1" + start_s: 0 + end_s: 19.7333 + } + } + } +} +route { + road_info { + id: "r16" + in_lane { + id: "21_1_-1" + s: 0 + } + out_lane { + id: "21_1_-1" + s: 128.73 + } + passage_region { + segment { + id: "21_1_-1" + start_s: 0 + end_s: 128.73 + } + } + } +} +route { + road_info { + id: "r17" + in_lane { + id: "22_1_-1" + s: 0 + } + out_lane { + id: "22_1_-1" + s: 31.9409 + } + passage_region { + segment { + id: "22_1_-1" + start_s: 0 + end_s: 31.9409 + } + } + } +} +route { + road_info { + id: "r18" + in_lane { + id: "23_1_-1" + s: 0 + } + out_lane { + id: "23_1_-1" + s: 49.0576 + } + passage_region { + segment { + id: "23_1_-1" + start_s: 0 + end_s: 49.0576 + } + } + } +} +measurement { + distance: 1519.3525200000001 +} +routing_request { + header { + timestamp_sec: 1504201419.052084 + module_name: "hmi_ros_bridge" + sequence_num: 34 + } + start { + id: "27_1_-1" + s: 1.8700738747954115 + pose { + x: 587045.54288088426 + y: 4141548.7253392646 + z: -31.29764156229794 + } + } + end { + id: "23_1_-1" + s: 0 + pose { + x: 586948.74012 + y: 4141171.118641 + } + } +} +map_version: "1.400000" diff --git a/modules/planning/testdata/sunnyvale_loop_test/3_chassis.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/3_chassis.pb.txt new file mode 100644 index 00000000000..0bacc8132d0 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/3_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 563 +speed_mps: 7.1 +odometer_m: 0 +fuel_range_m: 0 +throttle_percentage: 17.999542 +brake_percentage: 14.747845 +steering_percentage: -14.234042 +steering_torque_nm: -0.375 +parking_brake: false +driving_mode: COMPLETE_AUTO_DRIVE +error_code: NO_ERROR +gear_location: GEAR_DRIVE +header { + timestamp_sec: 1504824839.5287924 + module_name: "chassis" + sequence_num: 42382 +} +signal { + turn_signal: TURN_NONE + horn: false +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/3_localization.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/3_localization.pb.txt new file mode 100644 index 00000000000..a3049b4b3df --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/3_localization.pb.txt @@ -0,0 +1,49 @@ +header { + timestamp_sec: 1504824839.5322313 + module_name: "localization" + sequence_num: 41957 +} +pose { + position { + x: 587270.74275446648 + y: 4140989.9890584587 + z: -30.764006514102221 + } + orientation { + qx: 0.020992104250764136 + qy: 0.039681625200806467 + qz: -0.983549851465912 + qw: -0.17496968269368948 + } + linear_velocity { + x: -2.4352403994151604 + y: -6.7793303179698974 + z: -0.014885017098515974 + } + linear_acceleration { + x: -1.6170409140515793 + y: 0.61316449792035044 + z: 0.1113739915765746 + } + angular_velocity { + x: -0.039505383563694513 + y: -0.045111711351153022 + z: -0.20064545238246154 + } + heading: -1.9217279571391881 + linear_acceleration_vrf { + x: 1.7256160563230909 + y: -0.029338221940594822 + z: 0.15679502581296278 + } + angular_velocity_vrf { + x: 0.026949037814724033 + y: 0.072874624970208079 + z: -0.19446690666953878 + } + euler_angles { + x: 0.027511371607186166 + y: 0.085507838412870685 + z: -1.9217279571391881 + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/3_prediction.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/3_prediction.pb.txt new file mode 100644 index 00000000000..98fe082ce64 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/3_prediction.pb.txt @@ -0,0 +1,810 @@ +header { + timestamp_sec: 1504824839.5197566 + module_name: "prediction" + sequence_num: 4178 +} +prediction_obstacle { + perception_obstacle { + id: 3 + position { + x: 587263.83698329772 + y: 4140969.062378827 + z: -31.881312500058673 + } + theta: -1.8121097875406049 + velocity { + x: -1.3460178375244141 + y: -5.4691877365112305 + z: 0 + } + length: 3.3189539909362793 + width: 1.9948374032974243 + height: 2.1662313938140869 + polygon_point { + x: 587264.76866847125 + y: 4140970.4954805253 + z: -31.849874238975204 + } + polygon_point { + x: 587264.822327278 + y: 4140970.4588380973 + z: -31.848843803467251 + } + polygon_point { + x: 587265.0049584083 + y: 4140970.1576032015 + z: -31.845467076816 + } + polygon_point { + x: 587264.89071731328 + y: 4140969.1678359951 + z: -31.84844985418539 + } + polygon_point { + x: 587264.26440959575 + y: 4140967.2542207716 + z: -31.862207061744581 + } + polygon_point { + x: 587264.13206673588 + y: 4140967.3162376941 + z: -31.864769456687714 + } + polygon_point { + x: 587263.05724854721 + y: 4140968.5887186872 + z: -31.885011809839284 + } + polygon_point { + x: 587263.029904888 + y: 4140969.800739863 + z: -31.884655172489897 + } + polygon_point { + x: 587263.17201506963 + y: 4140970.5342126261 + z: -31.881312518731619 + } + polygon_point { + x: 587263.5277652638 + y: 4140970.8019109275 + z: -31.874103587735668 + } + polygon_point { + x: 587264.36150178162 + y: 4140970.645183959 + z: -31.857788081992517 + } + tracking_time: 285.4550609588623 + type: UNKNOWN + timestamp: 0 + } + timestamp: 1504824839.5184727 + predicted_period: 3 + trajectory { + probability: 0.85247149553136 + trajectory_point { + path_point { + x: 587263.91909849027 + y: 4140969.0057946681 + z: 0 + theta: -1.7838027861026746 + } + v: 5.930096716767129 + a: 0.20324064505613348 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587263.79239585553 + y: 4140968.4199881456 + z: 0 + theta: -1.7865580213933847 + } + v: 5.9504207812727428 + a: 0.20324064505613348 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587263.665708647 + y: 4140967.841965314 + z: 0 + theta: -1.7916812523624885 + } + v: 5.9707448457783565 + a: 0.20324064505613348 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587263.53372675739 + y: 4140967.2542004278 + z: 0 + theta: -1.7933860906051102 + } + v: 5.99106891028397 + a: 0.20324064505613348 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587263.402083643 + y: 4140966.6725844634 + z: 0 + theta: -1.7973372560109717 + } + v: 6.011392974789584 + a: 0.20324064505613348 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587263.266093329 + y: 4140966.0825986313 + z: 0 + theta: -1.799905599146097 + } + v: 6.0317170392951978 + a: 0.20324064505613348 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587263.12953307992 + y: 4140965.4970158357 + z: 0 + theta: -1.8009612602054101 + } + v: 6.0520411038008115 + a: 0.20324064505613348 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587262.9907353085 + y: 4140964.9046662953 + z: 0 + theta: -1.8055645222185919 + } + v: 6.0723651683064253 + a: 0.20324064505613348 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587262.84967757412 + y: 4140964.3149073464 + z: 0 + theta: -1.7994911156553397 + } + v: 6.092689232812039 + a: 0.20324064505613348 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587262.71131067339 + y: 4140963.7204635823 + z: 0 + theta: -1.8148716003208025 + } + v: 6.1130132973176527 + a: 0.20324064505613348 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587262.56332114409 + y: 4140963.1262244545 + z: 0 + theta: -1.8025804133480037 + } + v: 6.1333373618232665 + a: 0.20324064505613348 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587262.422181554 + y: 4140962.5282413415 + z: 0 + theta: -1.818201202234395 + } + v: 6.15366142632888 + a: 0.20324064505613348 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587262.2712289273 + y: 4140961.9305971367 + z: 0 + theta: -1.8052202491440132 + } + v: 6.173985490834494 + a: 0.20324064505613348 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587262.12758262246 + y: 4140961.3291001911 + z: 0 + theta: -1.8201284506791622 + } + v: 6.1943095553401077 + a: 0.20324064505613348 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587261.97436649946 + y: 4140960.7273810329 + z: 0 + theta: -1.80787472467115 + } + v: 6.2146336198457215 + a: 0.20324064505613348 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587261.8282735562 + y: 4140960.1227476075 + z: 0 + theta: -1.8220066961024091 + } + v: 6.2349576843513352 + a: 0.20324064505613348 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587261.6728210611 + y: 4140959.5170057896 + z: 0 + theta: -1.809176254184379 + } + v: 6.255281748856949 + a: 0.20324064505613348 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587261.52509022341 + y: 4140958.9090606784 + z: 0 + theta: -1.8135221426632571 + } + v: 6.2756058133625627 + a: 0.20324064505613348 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587261.3739319233 + y: 4140958.2985857041 + z: 0 + theta: -1.82108724759807 + } + v: 6.2959298778681765 + a: 0.20324064505613348 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587261.21783916187 + y: 4140957.6880179658 + z: 0 + theta: -1.8112618008328136 + } + v: 6.31625394237379 + a: 0.20324064505613348 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587261.06718950148 + y: 4140957.0736482674 + z: 0 + theta: -1.8255914101335378 + } + v: 6.336578006879404 + a: 0.20324064505613348 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587260.90721336 + y: 4140956.459432519 + z: 0 + theta: -1.8124719493973729 + } + v: 6.3569020713850177 + a: 0.20324064505613348 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587260.75485288363 + y: 4140955.8413207363 + z: 0 + theta: -1.8261488329657352 + } + v: 6.3772261358906315 + a: 0.20324064505613348 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587260.5935191738 + y: 4140955.2233053078 + z: 0 + theta: -1.8132394891995613 + } + v: 6.3975502003962452 + a: 0.20324064505613348 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587260.43970772473 + y: 4140954.6013617548 + z: 0 + theta: -1.8272154446872517 + } + v: 6.417874264901859 + a: 0.20324064505613348 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587260.27664582641 + y: 4140953.9794412027 + z: 0 + theta: -1.8140004835886521 + } + v: 6.4381983294074727 + a: 0.20324064505613348 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587260.12141760031 + y: 4140953.3538121087 + z: 0 + theta: -1.8188201760318152 + } + v: 6.4585223939130865 + a: 0.20324064505613348 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587259.96258752153 + y: 4140952.726615211 + z: 0 + theta: -1.8231552175776577 + } + v: 6.4788464584187 + a: 0.20324064505613348 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587259.80062714475 + y: 4140952.0985115585 + z: 0 + theta: -1.8151999295190913 + } + v: 6.499170522924314 + a: 0.20324064505613348 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587259.64314236783 + y: 4140951.4670293257 + z: 0 + theta: -1.8151999295190913 + } + v: 6.5194945874299277 + a: 0.20324064505613348 + relative_time: 2.9000000000000004 + } + } +} +prediction_obstacle { + perception_obstacle { + id: 711 + position { + x: 587268.53235683287 + y: 4140943.5746163758 + z: -31.692952524243854 + } + theta: 1.3559290014439336 + velocity { + x: 0.20131395757198334 + y: 0.62545269727706909 + z: 0 + } + length: 0.27275499701499939 + width: 0.54537922143936157 + height: 1.3623156547546387 + polygon_point { + x: 587268.60283421585 + y: 4140943.6955962344 + z: -31.691043544532846 + } + polygon_point { + x: 587268.81005584262 + y: 4140943.4678567518 + z: -31.687127883954254 + } + polygon_point { + x: 587268.74267762888 + y: 4140943.3891254468 + z: -31.68851394827092 + } + polygon_point { + x: 587268.241924432 + y: 4140943.5223518643 + z: -31.698284371640362 + } + polygon_point { + x: 587268.30937290331 + y: 4140943.5861500474 + z: -31.696907956331749 + } + polygon_point { + x: 587268.46694287378 + y: 4140943.7073229719 + z: -31.693713031030413 + } + polygon_point { + x: 587268.58067179809 + y: 4140943.707740197 + z: -31.691471349373003 + } + tracking_time: 1.6008319854736328 + type: UNKNOWN + timestamp: 0 + } + timestamp: 1504824839.5184727 + predicted_period: 3 + trajectory { + probability: 0.4669432813680599 + trajectory_point { + path_point { + x: 587268.43546696135 + y: 4140943.4921690556 + z: 0 + theta: 1.3809372908536337 + } + v: 1.3014909041417639 + a: 0.40408663252799015 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587268.46928038658 + y: 4140943.6681214967 + z: 0 + theta: 1.5037859693073261 + } + v: 1.3418995673945631 + a: 0.40408663252799015 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587268.47441694723 + y: 4140943.7446599626 + z: 0 + theta: 1.4140871996821922 + } + v: 1.3823082306473622 + a: 0.40408663252799015 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587268.493220551 + y: 4140943.8636666015 + z: 0 + theta: 1.3827945934610462 + } + v: 1.4227168939001613 + a: 0.40408663252799015 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587268.52045642526 + y: 4140944.0068261046 + z: 0 + theta: 1.3831808600776323 + } + v: 1.4631255571529604 + a: 0.40408663252799015 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587268.5477851429 + y: 4140944.1507764417 + z: 0 + theta: 1.3646770356923947 + } + v: 1.5035342204057596 + a: 0.40408663252799015 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587268.59083032515 + y: 4140944.3566468121 + z: 0 + theta: 1.4065621894873772 + } + v: 1.5439428836585587 + a: 0.40408663252799015 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587268.61459156044 + y: 4140944.5000226926 + z: 0 + theta: 1.4350164002165846 + } + v: 1.5843515469113578 + a: 0.40408663252799015 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587268.63014851918 + y: 4140944.613892524 + z: 0 + theta: 1.3727515812117361 + } + v: 1.6247602101641569 + a: 0.40408663252799015 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587268.66262178088 + y: 4140944.7757124952 + z: 0 + theta: 1.370307519676883 + } + v: 1.6651688734169561 + a: 0.40408663252799015 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587268.69672132423 + y: 4140944.9435095363 + z: 0 + theta: 1.3714959003160159 + } + v: 1.7055775366697552 + a: 0.40408663252799015 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587268.73054017313 + y: 4140945.1109446506 + z: 0 + theta: 1.3585342293380525 + } + v: 1.7459861999225543 + a: 0.40408663252799015 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587268.77943164657 + y: 4140945.3378103385 + z: 0 + theta: 1.4009717520213092 + } + v: 1.7863948631753535 + a: 0.40408663252799015 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587268.80655700038 + y: 4140945.4959975886 + z: 0 + theta: 1.3990983477801828 + } + v: 1.8268035264281526 + a: 0.40408663252799015 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587268.83219291188 + y: 4140945.6438356582 + z: 0 + theta: 1.3632720093583874 + } + v: 1.8672121896809517 + a: 0.40408663252799015 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587268.87138752313 + y: 4140945.8299841224 + z: 0 + theta: 1.3568809772425632 + } + v: 1.9076208529337508 + a: 0.40408663252799015 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587268.91952212655 + y: 4140946.0515584243 + z: 0 + theta: 1.3758652085354888 + } + v: 1.94802951618655 + a: 0.40408663252799015 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587268.96053494443 + y: 4140946.2592832209 + z: 0 + theta: 1.4050980142231411 + } + v: 1.9884381794393491 + a: 0.40408663252799015 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587268.98558105319 + y: 4140946.4090521974 + z: 0 + theta: 1.3586764437869063 + } + v: 2.0288468426921482 + a: 0.40408663252799015 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587269.02876566781 + y: 4140946.6095754476 + z: 0 + theta: 1.3575665543628437 + } + v: 2.0692555059449473 + a: 0.40408663252799015 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587269.07302660658 + y: 4140946.8139938693 + z: 0 + theta: 1.3510799122544583 + } + v: 2.1096641691977465 + a: 0.40408663252799015 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587269.12900830794 + y: 4140947.0646712906 + z: 0 + theta: 1.3835417979972726 + } + v: 2.1500728324505456 + a: 0.40408663252799015 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587269.16714522149 + y: 4140947.2659487752 + z: 0 + theta: 1.3775882165423767 + } + v: 2.1904814957033447 + a: 0.40408663252799015 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587269.20367962518 + y: 4140947.4526835149 + z: 0 + theta: 1.3535349428901569 + } + v: 2.2308901589561438 + a: 0.40408663252799015 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587269.25224358984 + y: 4140947.672683198 + z: 0 + theta: 1.3479677113977222 + } + v: 2.271298822208943 + a: 0.40408663252799015 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587269.32010613114 + y: 4140947.9721762496 + z: 0 + theta: 1.41406777431574 + } + v: 2.3117074854617421 + a: 0.40408663252799015 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587269.34480970073 + y: 4140948.128503643 + z: 0 + theta: 1.35226988885695 + } + v: 2.3521161487145412 + a: 0.40408663252799015 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587269.3958032896 + y: 4140948.3581293155 + z: 0 + theta: 1.3462581868435994 + } + v: 2.3925248119673403 + a: 0.40408663252799015 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587269.45906482171 + y: 4140948.6351191457 + z: 0 + theta: 1.382328022801899 + } + v: 2.4329334752201395 + a: 0.40408663252799015 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587269.50014924794 + y: 4140948.8505231463 + z: 0 + theta: 1.382328022801899 + } + v: 2.4733421384729386 + a: 0.40408663252799015 + relative_time: 2.9000000000000004 + } + } +} +perception_error_code: OK diff --git a/modules/planning/testdata/sunnyvale_loop_test/3_routing.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/3_routing.pb.txt new file mode 100644 index 00000000000..891459a9447 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/3_routing.pb.txt @@ -0,0 +1,111 @@ +header { + timestamp_sec: 1504919697.607234 + module_name: "routing" + sequence_num: 33 +} +route { + road_info { + id: "23-140-747-141-12-22-906-88-13-9-133-21" + in_lane { + id: "140_1_-1" + s: 115.53663074097291 + } + out_lane { + id: "23_1_-1" + s: 0 + } + passage_region { + segment { + id: "140_1_-1" + start_s: 115.53663074097291 + end_s: 146.337 + } + segment { + id: "747_1_-1" + start_s: 0 + end_s: 15.6326 + } + segment { + id: "141_1_-2" + start_s: 0 + end_s: 41.6019 + } + segment { + id: "906_1_-1" + start_s: 0 + end_s: 27.921 + } + segment { + id: "9_1_-2" + start_s: 0 + end_s: 161.962 + } + segment { + id: "13_1_-2" + start_s: 0 + end_s: 35.3398 + } + segment { + id: "12_1_-3" + start_s: 0 + end_s: 122.494 + } + segment { + id: "133_1_-3" + start_s: 0 + end_s: 3.63182 + } + segment { + id: "88_1_-1" + start_s: 0 + end_s: 19.7333 + } + segment { + id: "21_1_-1" + start_s: 0 + end_s: 128.73 + } + segment { + id: "22_1_-1" + start_s: 0 + end_s: 31.9409 + } + segment { + id: "23_1_-1" + start_s: 0 + end_s: 0 + } + } + } +} +measurement { + distance: 619.787689259027 +} +routing_request { + header { + timestamp_sec: 1504919697.6064334 + module_name: "dreamview" + sequence_num: 33 + } + start { + id: "140_1_-1" + s: 115.53663074097291 + pose { + x: 587278.533140163 + y: 4141021.75828166 + } + } + end { + id: "23_1_-1" + s: 0 + pose { + x: 586948.74012 + y: 4141171.118641 + } + } +} +map_version: "1.400000" +error_code { + error_id: SUCCESS + error_string: "Success!" +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/4_chassis.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/4_chassis.pb.txt new file mode 100644 index 00000000000..d8c0d79bbac --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/4_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 0.0 +speed_mps: 11.0111112595 +odometer_m: 0.0 +fuel_range_m: 0 +throttle_percentage: 24.6952018738 +brake_percentage: 14.1573209763 +steering_percentage: 0.021276595071 +steering_torque_nm: -0.125 +parking_brake: false +driving_mode: COMPLETE_AUTO_DRIVE +error_code: NO_ERROR +gear_location: GEAR_DRIVE +header { + timestamp_sec: 1505164963.47 + module_name: "chassis" + sequence_num: 151191 +} +signal { + turn_signal: TURN_NONE + horn: false +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/4_localization.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/4_localization.pb.txt new file mode 100644 index 00000000000..9fa3b11d45c --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/4_localization.pb.txt @@ -0,0 +1,49 @@ +header { + timestamp_sec: 1505164963.47 + module_name: "localization" + sequence_num: 150750 +} +pose { + position { + x: 587325.338303 + y: 4141206.17551 + z: -31.6968543334 + } + orientation { + qx: 0.0114751085674 + qy: 0.0131023161008 + qz: -0.991874643763 + qw: -0.126021197644 + } + linear_velocity { + x: -2.8873661628 + y: -10.8255447121 + z: 0.0291348781596 + } + linear_acceleration { + x: -0.298081327956 + y: -0.112225578625 + z: 0.928088244821 + } + angular_velocity { + x: -0.0172548401678 + y: -0.0148611141264 + z: -0.00342609462147 + } + heading: -1.82326794493 + linear_acceleration_vrf { + x: 0.242383547887 + y: 0.156244678465 + z: 0.93788734127 + } + angular_velocity_vrf { + x: 0.0130492475808 + y: 0.0187913677889 + z: -0.00263096576367 + } + euler_angles { + x: 0.0194707527695 + y: 0.0288879418065 + z: -1.82326794493 + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/4_prediction.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/4_prediction.pb.txt new file mode 100644 index 00000000000..346bc1f258f --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/4_prediction.pb.txt @@ -0,0 +1,70 @@ +header { + timestamp_sec: 1505164963.42 + module_name: "prediction" + sequence_num: 15051 +} +prediction_obstacle { + perception_obstacle { + id: 1651 + position { + x: 587317.696467 + y: 4141161.71316 + z: -32.2480892554 + } + theta: -1.82183249897 + velocity { + x: 0 + y: 0 + z: 0.0 + } + length: 2.4471654892 + width: 1.65730500221 + height: 1.93149280548 + polygon_point { + x: 587318.180055 + y: 4141162.84912 + z: -32.2365329104 + } + polygon_point { + x: 587318.722962 + y: 4141162.34821 + z: -32.2145497091 + } + polygon_point { + x: 587318.638401 + y: 4141162.07099 + z: -32.2119113108 + } + polygon_point { + x: 587317.636327 + y: 4141160.52003 + z: -32.2102403111 + } + polygon_point { + x: 587317.402785 + y: 4141160.505 + z: -32.2157630991 + } + polygon_point { + x: 587316.941018 + y: 4141162.10251 + z: -32.2544524995 + } + polygon_point { + x: 587317.207517 + y: 4141162.65923 + z: -32.2573585666 + } + polygon_point { + x: 587317.965921 + y: 4141162.8687 + z: -32.2421659291 + } + tracking_time: 325.447105169 + type: UNKNOWN + timestamp: 0.0 + } + timestamp: 1505164963.42 + predicted_period: 3.0 +} +perception_error_code: OK diff --git a/modules/planning/testdata/sunnyvale_loop_test/4_routing.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/4_routing.pb.txt new file mode 100644 index 00000000000..738ee183261 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/4_routing.pb.txt @@ -0,0 +1,122 @@ +header { + timestamp_sec: 1505164877.88 + module_name: "routing" + sequence_num: 6 +} +route { + road_info { + id: "23-21-144-140-747-141-138-12-22-906-88-13-9-133" + in_lane { + id: "138_1_-1" + s: 25.1588648577 + } + out_lane { + id: "23_1_-1" + s: 0.0 + } + passage_region { + segment { + id: "138_1_-1" + start_s: 25.1588648577 + end_s: 308.143 + } + segment { + id: "144_1_-1" + start_s: 0.0 + end_s: 46.5655 + } + segment { + id: "140_1_-1" + start_s: 0.0 + end_s: 146.337 + } + segment { + id: "747_1_-1" + start_s: 0.0 + end_s: 15.6326 + } + segment { + id: "141_1_-2" + start_s: 0.0 + end_s: 41.6019 + } + segment { + id: "906_1_-1" + start_s: 0.0 + end_s: 27.921 + } + segment { + id: "9_1_-2" + start_s: 0.0 + end_s: 161.962 + } + segment { + id: "13_1_-2" + start_s: 0.0 + end_s: 35.3398 + } + segment { + id: "12_1_-3" + start_s: 0.0 + end_s: 122.494 + } + segment { + id: "133_1_-3" + start_s: 0.0 + end_s: 3.63182 + } + segment { + id: "88_1_-1" + start_s: 0.0 + end_s: 19.7333 + } + segment { + id: "21_1_-1" + start_s: 0.0 + end_s: 128.73 + } + segment { + id: "22_1_-1" + start_s: 0.0 + end_s: 31.9409 + } + segment { + id: "23_1_-1" + start_s: 0.0 + end_s: 0.0 + } + } + } +} +measurement { + distance: 1064.87395514 +} +routing_request { + header { + timestamp_sec: 1505164877.88 + module_name: "dreamview" + sequence_num: 6 + } + start { + id: "138_1_-1" + s: 25.1588648577 + pose { + x: 587385.905158 + y: 4141453.58725 + } + } + end { + id: "23_1_-1" + s: 0.0 + pose { + x: 586948.74012 + y: 4141171.11864 + } + } +} +map_version: "1.400000" +error_code { + error_id: SUCCESS + error_string: "Success!" +} + diff --git a/modules/planning/testdata/sunnyvale_loop_test/5_chassis.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/5_chassis.pb.txt new file mode 100644 index 00000000000..54018eb375e --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/5_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 2304 +speed_mps: 6.061111 +odometer_m: 0 +fuel_range_m: 0 +throttle_percentage: 33.894867 +brake_percentage: 14.399939 +steering_percentage: -14.212766 +steering_torque_nm: -0.1875 +parking_brake: false +driving_mode: COMPLETE_AUTO_DRIVE +error_code: NO_ERROR +gear_location: GEAR_DRIVE +header { + timestamp_sec: 1505249805.229634 + module_name: "chassis" + sequence_num: 126499 +} +signal { + turn_signal: TURN_RIGHT + horn: false +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/5_localization.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/5_localization.pb.txt new file mode 100644 index 00000000000..58bfc087aa3 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/5_localization.pb.txt @@ -0,0 +1,49 @@ +header { + timestamp_sec: 1505249805.2282515 + module_name: "localization" + sequence_num: 126684 +} +pose { + position { + x: 587713.4474466031 + y: 4141426.4113508877 + z: -32.15666694380343 + } + orientation { + qx: 0.015158146498156857 + qy: 0.022943108219652009 + qz: -0.99400609503012061 + qw: -0.10580986448782802 + } + linear_velocity { + x: -1.2685757075465778 + y: -6.0784196334221186 + z: -0.19293260419392144 + } + linear_acceleration { + x: -1.0205857065144659 + y: -1.5082411650037297 + z: 0.2413682826852222 + } + angular_velocity { + x: -0.018231226910362656 + y: 0.024252999537083132 + z: -0.1664794331225373 + } + heading: -1.7822751774519645 + linear_acceleration_vrf { + x: 0.672853124379035 + y: 1.6750699344182995 + z: 0.34066792021130721 + } + angular_velocity_vrf { + x: 0.02714163889252403 + y: -0.011734775409263284 + z: -0.1666181675518196 + } + euler_angles { + x: 0.025312246525416436 + y: 0.048838354107234479 + z: -1.7822751774519645 + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/5_prediction.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/5_prediction.pb.txt new file mode 100644 index 00000000000..b3e9d1cd21b --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/5_prediction.pb.txt @@ -0,0 +1,765 @@ +header { + timestamp_sec: 1505249805.2115178 + module_name: "prediction" + sequence_num: 12579 +} +prediction_obstacle { + perception_obstacle { + id: 2271 + position { + x: 587700.52261545078 + y: 4141374.6553110932 + z: -33.058491312769576 + } + theta: -1.833491603264884 + velocity { + x: -1.7762271165847778 + y: -6.6052937507629395 + z: 0 + } + length: 1.3625003099441528 + width: 0.86703282594680786 + height: 2.0744378566741943 + polygon_point { + x: 587701.11823199864 + y: 4141375.2005984792 + z: -33.058491225735175 + } + polygon_point { + x: 587700.15823513188 + y: 4141374.0699895215 + z: -33.096330877976712 + } + polygon_point { + x: 587700.021669462 + y: 4141374.2096600141 + z: -33.101124896240989 + } + tracking_time: 65.135567903518677 + type: UNKNOWN + timestamp: 0 + } + timestamp: 1505249805.2096205 + predicted_period: 3 + trajectory { + probability: 0.96322223856956124 + trajectory_point { + path_point { + x: 587700.459729423 + y: 4141375.0127522247 + z: 0 + theta: -1.8183710928071388 + } + v: 8.4835387852199684 + a: 0.63472686442116444 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587700.25109270366 + y: 4141374.1873186519 + z: 0 + theta: -1.8187517904605908 + } + v: 8.5470114716620849 + a: 0.63472686442116444 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587700.04058573791 + y: 4141373.3558183 + z: 0 + theta: -1.8187908025949824 + } + v: 8.6104841581042013 + a: 0.63472686442116444 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587699.82851117989 + y: 4141372.5182633135 + z: 0 + theta: -1.8174373104986359 + } + v: 8.6739568445463178 + a: 0.63472686442116444 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587699.61600322742 + y: 4141371.6741971993 + z: 0 + theta: -1.8150850826668277 + } + v: 8.7374295309884342 + a: 0.63472686442116444 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587699.40393926168 + y: 4141370.8234472773 + z: 0 + theta: -1.814592971870397 + } + v: 8.80090221743055 + a: 0.63472686442116444 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587699.19076469052 + y: 4141369.966445046 + z: 0 + theta: -1.8181101085154527 + } + v: 8.8643749038726671 + a: 0.63472686442116444 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587698.97302313487 + y: 4141369.10404254 + z: 0 + theta: -1.81874315256384 + } + v: 8.9278475903147836 + a: 0.63472686442116444 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587698.75317653548 + y: 4141368.2356192018 + z: 0 + theta: -1.8190160236352249 + } + v: 8.9913202767569 + a: 0.63472686442116444 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587698.53154186055 + y: 4141367.3611357906 + z: 0 + theta: -1.8188333319520991 + } + v: 9.0547929631990165 + a: 0.63472686442116444 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587698.30850947928 + y: 4141366.480462017 + z: 0 + theta: -1.814772883161567 + } + v: 9.118265649641133 + a: 0.63472686442116444 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587698.08751803532 + y: 4141365.592716319 + z: 0 + theta: -1.8220699540789036 + } + v: 9.18173833608325 + a: 0.63472686442116444 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587697.85846261051 + y: 4141364.7004051 + z: 0 + theta: -1.8174894559468555 + } + v: 9.2452110225253659 + a: 0.63472686442116444 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587697.63195176178 + y: 4141363.8009186126 + z: 0 + theta: -1.817045042572313 + } + v: 9.3086837089674823 + a: 0.63472686442116444 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587697.40429257345 + y: 4141362.8951723827 + z: 0 + theta: -1.817390208613108 + } + v: 9.3721563954095988 + a: 0.63472686442116444 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587697.17477793677 + y: 4141361.9833755628 + z: 0 + theta: -1.8171602535953433 + } + v: 9.4356290818517152 + a: 0.63472686442116444 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587696.94392159907 + y: 4141361.0653568045 + z: 0 + theta: -1.8173104944780305 + } + v: 9.4991017682938317 + a: 0.63472686442116444 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587696.71138137893 + y: 4141360.1412290051 + z: 0 + theta: -1.817436362281593 + } + v: 9.5625744547359481 + a: 0.63472686442116444 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587696.47717281722 + y: 4141359.2109659254 + z: 0 + theta: -1.8179823345178467 + } + v: 9.6260471411780646 + a: 0.63472686442116444 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587696.24090392131 + y: 4141358.2746787169 + z: 0 + theta: -1.8256733861543111 + } + v: 9.689519827620181 + a: 0.63472686442116444 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587695.995811784 + y: 4141357.3339829985 + z: 0 + theta: -1.8174759881824782 + } + v: 9.7529925140622975 + a: 0.63472686442116444 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587695.75691838108 + y: 4141356.3852707818 + z: 0 + theta: -1.8174475876483127 + } + v: 9.816465200504414 + a: 0.63472686442116444 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587695.516500609 + y: 4141355.4303903454 + z: 0 + theta: -1.8196331064484046 + } + v: 9.87993788694653 + a: 0.63472686442116444 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587695.27244164352 + y: 4141354.469918617 + z: 0 + theta: -1.81806955870065 + } + v: 9.9434105733886469 + a: 0.63472686442116444 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587695.02833701647 + y: 4141353.5029354775 + z: 0 + theta: -1.817055566269963 + } + v: 10.006883259830763 + a: 0.63472686442116444 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587694.78366486833 + y: 4141352.5295462064 + z: 0 + theta: -1.8220454876251457 + } + v: 10.07035594627288 + a: 0.63472686442116444 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587694.53254735889 + y: 4141351.5511902575 + z: 0 + theta: -1.8218028323634929 + } + v: 10.133828632714996 + a: 0.63472686442116444 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587694.28009306709 + y: 4141350.5666341474 + z: 0 + theta: -1.8221034872614668 + } + v: 10.197301319157113 + a: 0.63472686442116444 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587694.025766633 + y: 4141349.5760147991 + z: 0 + theta: -1.8136503051050117 + } + v: 10.260774005599229 + a: 0.63472686442116444 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587693.77831221709 + y: 4141348.5771825444 + z: 0 + theta: -1.8136503051050117 + } + v: 10.324246692041346 + a: 0.63472686442116444 + relative_time: 2.9000000000000004 + } + } +} +prediction_obstacle { + perception_obstacle { + id: 2339 + position { + x: 587700.79483224766 + y: 4141376.0806650971 + z: -32.717079245356246 + } + theta: -1.7981568830520642 + velocity { + x: 0 + y: 0 + z: 0 + } + length: 0.54770928621292114 + width: 0.22749663889408112 + height: 0.33262348175048828 + polygon_point { + x: 587700.84867619944 + y: 4141376.1865343913 + z: -32.71487342018753 + } + polygon_point { + x: 587701.04846523993 + y: 4141375.9952468644 + z: -32.707834438645818 + } + polygon_point { + x: 587701.012779063 + y: 4141375.9124837122 + z: -32.7093208897595 + } + polygon_point { + x: 587700.78211225686 + y: 4141375.9821355296 + z: -32.717744069761316 + } + polygon_point { + x: 587700.51850051444 + y: 4141376.1878172616 + z: -32.727123201654017 + } + polygon_point { + x: 587700.69300196529 + y: 4141376.2236113613 + z: -32.720577582911972 + } + tracking_time: 0 + type: UNKNOWN + timestamp: 0 + } + timestamp: 1505249805.2096205 + predicted_period: 3 + trajectory { + probability: 0.95072230148426051 + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587700.79461889924 + y: 4141376.0797134079 + z: 0 + theta: -1.7983035346906837 + } + v: 0 + a: 0 + relative_time: 2.9000000000000004 + } + } +} +perception_error_code: OK diff --git a/modules/planning/testdata/sunnyvale_loop_test/5_routing.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/5_routing.pb.txt new file mode 100644 index 00000000000..475c20ad0e7 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/5_routing.pb.txt @@ -0,0 +1,181 @@ +header { + timestamp_sec: 1505348717.2942326 + module_name: "routing" + sequence_num: 6 +} +route { + road_info { + id: "21-84-22-88-171-696-161-38-58-153-37-6-12-39-829-694-1-751-753-752-7-23-151-9-133-13" + in_lane { + id: "161_1_-3" + s: 44.726891628538034 + } + out_lane { + id: "23_1_-1" + s: 0 + } + passage_region { + segment { + id: "161_1_-3" + start_s: 44.726891628538034 + end_s: 215.789 + } + segment { + id: "39_1_-3" + start_s: 0 + end_s: 33.111 + } + segment { + id: "37_1_-4" + start_s: 0 + end_s: 27.8634 + } + segment { + id: "38_1_-4" + start_s: 0 + end_s: 1.58202 + } + segment { + id: "84_1_-1" + start_s: 0 + end_s: 21.0601 + } + segment { + id: "58_1_-2" + start_s: 0 + end_s: 165.26 + } + segment { + id: "694_1_-2" + start_s: 0 + end_s: 43.3058 + } + segment { + id: "829_1_-2" + start_s: 0 + end_s: 147.032 + } + segment { + id: "696_1_-2" + start_s: 0 + end_s: 299.712 + } + segment { + id: "171_1_-1" + start_s: 0 + end_s: 42.8949 + } + segment { + id: "153_1_-4" + start_s: 0 + end_s: 22.1195 + } + segment { + id: "751_1_-1" + start_s: 0 + end_s: 12.6363 + } + segment { + id: "752_1_-1" + start_s: 0 + end_s: 20.1963 + } + segment { + id: "753_1_-1" + start_s: 0 + end_s: 21.6437 + } + segment { + id: "6_1_-2" + start_s: 0 + end_s: 194.692 + } + segment { + id: "7_1_-2" + start_s: 0 + end_s: 32.89 + } + segment { + id: "1_1_-3" + start_s: 0 + end_s: 65.2454 + } + segment { + id: "151_1_-2" + start_s: 0 + end_s: 43.8648 + } + segment { + id: "9_1_-2" + start_s: 0 + end_s: 161.962 + } + segment { + id: "13_1_-2" + start_s: 0 + end_s: 35.3398 + } + segment { + id: "12_1_-3" + start_s: 0 + end_s: 122.494 + } + segment { + id: "133_1_-3" + start_s: 0 + end_s: 3.63182 + } + segment { + id: "88_1_-1" + start_s: 0 + end_s: 19.7333 + } + segment { + id: "21_1_-1" + start_s: 0 + end_s: 128.73 + } + segment { + id: "22_1_-1" + start_s: 0 + end_s: 31.9409 + } + segment { + id: "23_1_-1" + start_s: 0 + end_s: 0 + } + } + } +} +measurement { + distance: 1870.0031483714622 +} +routing_request { + header { + timestamp_sec: 1505348717.292217 + module_name: "dreamview" + sequence_num: 8 + } + start { + id: "161_1_-3" + s: 44.726891628538034 + pose { + x: 587476.563563349 + y: 4141499.84318949 + } + } + end { + id: "23_1_-1" + s: 0 + pose { + x: 586948.74012 + y: 4141171.118641 + } + } +} +map_version: "1.400000" +error_code { + error_id: SUCCESS + error_string: "Success!" +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/6_chassis.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/6_chassis.pb.txt new file mode 100644 index 00000000000..3150eec8caa --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/6_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 1094 +speed_mps: 4.6 +odometer_m: 0 +fuel_range_m: 0 +throttle_percentage: 15.336843 +brake_percentage: 24.867628 +steering_percentage: 0.89361703 +steering_torque_nm: -0.25 +parking_brake: false +driving_mode: COMPLETE_AUTO_DRIVE +error_code: NO_ERROR +gear_location: GEAR_DRIVE +header { + timestamp_sec: 1505249215.1190002 + module_name: "chassis" + sequence_num: 67493 +} +signal { + turn_signal: TURN_NONE + horn: false +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/6_localization.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/6_localization.pb.txt new file mode 100644 index 00000000000..8cb24fd6c6a --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/6_localization.pb.txt @@ -0,0 +1,49 @@ +header { + timestamp_sec: 1505249215.127552 + module_name: "localization" + sequence_num: 67674 +} +pose { + position { + x: 587260.60288361111 + y: 4140955.2434680969 + z: -30.757229007780552 + } + orientation { + qx: 0.0074842490193965617 + qy: 0.015667179188566985 + qz: -0.99160397059436445 + qw: -0.12814090297161118 + } + linear_velocity { + x: -1.1409285732536376 + y: -4.4008930541307016 + z: 0.042832211614008742 + } + linear_acceleration { + x: 0.64023974917553694 + y: 1.8273754572670771 + z: 0.87390245633771635 + } + angular_velocity { + x: -0.010741458882041824 + y: 0.0080642765873679967 + z: 0.0076148329293650417 + } + heading: -1.827644940261357 + linear_acceleration_vrf { + x: -0.16378513537324307 + y: -1.9578505107897375 + z: 0.80802803680976276 + } + angular_velocity_vrf { + x: 0.012356319889467601 + y: -0.0053194852229947551 + z: 0.0075777049352555815 + } + euler_angles { + x: 0.010833717678130838 + y: 0.0329953376734449 + z: -1.8276449402613573 + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/6_prediction.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/6_prediction.pb.txt new file mode 100644 index 00000000000..978ccab493f --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/6_prediction.pb.txt @@ -0,0 +1,1143 @@ +header { + timestamp_sec: 1505249215.0987027 + module_name: "prediction" + sequence_num: 6687 +} +prediction_obstacle { + perception_obstacle { + id: 867 + position { + x: 587250.14914132969 + y: 4140928.3676066254 + z: -31.214751803187053 + } + theta: -2.309548453831634 + velocity { + x: -1.2112696170806885 + y: -1.3298907279968262 + z: 0 + } + length: 4.5249109268188477 + width: 2.0198359489440918 + height: 2.068533182144165 + polygon_point { + x: 587251.00973274035 + y: 4140930.329584796 + z: -31.207387025015954 + } + polygon_point { + x: 587251.2018431304 + y: 4140930.2627808028 + z: -31.203055973687714 + } + polygon_point { + x: 587251.7964507154 + y: 4140929.9293166557 + z: -31.188114948921644 + } + polygon_point { + x: 587252.12099334435 + y: 4140929.5130562051 + z: -31.177120349816576 + } + polygon_point { + x: 587252.14908077451 + y: 4140929.2763805715 + z: -31.173736511788057 + } + polygon_point { + x: 587252.02986986714 + y: 4140929.0780873327 + z: -31.173517822057931 + } + polygon_point { + x: 587251.75046787655 + y: 4140928.6216077656 + z: -31.173105546841082 + } + polygon_point { + x: 587250.47957258846 + y: 4140927.3873449718 + z: -31.181438223443664 + } + polygon_point { + x: 587247.98266944929 + y: 4140927.2822840936 + z: -31.225931079579304 + } + polygon_point { + x: 587248.06759402622 + y: 4140927.4172768276 + z: -31.22601087504615 + } + polygon_point { + x: 587248.50429164711 + y: 4140928.0602926034 + z: -31.225801254308415 + } + polygon_point { + x: 587250.12458617054 + y: 4140929.5987418969 + z: -31.214751735992323 + } + polygon_point { + x: 587250.53003319388 + y: 4140929.9714152869 + z: -31.21183778693905 + } + tracking_time: 125.8430700302124 + type: UNKNOWN + timestamp: 0 + } + timestamp: 1505249215.0977759 + predicted_period: 3 + trajectory { + probability: 0.95155577059868446 + trajectory_point { + path_point { + x: 587250.12853139243 + y: 4140928.2032231246 + z: 0 + theta: -2.2437095572362868 + } + v: 1.3850191182028819 + a: -1.0792652527894049 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587250.046895445 + y: 4140928.1007949715 + z: 0 + theta: -2.220459664231992 + } + v: 1.2770925929239414 + a: -1.0792652527894049 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587249.98260354484 + y: 4140928.0161639871 + z: 0 + theta: -2.2656138505708019 + } + v: 1.1691660676450009 + a: -1.0792652527894049 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587249.90283412766 + y: 4140927.9204561096 + z: 0 + theta: -2.2497432510795021 + } + v: 1.0612395423660603 + a: -1.0792652527894049 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587249.83780616685 + y: 4140927.8398683574 + z: 0 + theta: -2.21596571173473 + } + v: 0.9533130170871198 + a: -1.0792652527894049 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587249.79095069668 + y: 4140927.7776110484 + z: 0 + theta: -2.2251143565408906 + } + v: 0.84538649180817926 + a: -1.0792652527894049 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587249.747282624 + y: 4140927.7206804412 + z: 0 + theta: -2.2491593486458652 + } + v: 0.73745996652923873 + a: -1.0792652527894049 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587249.70495461742 + y: 4140927.6681615347 + z: 0 + theta: -2.2403895617731036 + } + v: 0.6295334412502982 + a: -1.0792652527894049 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587249.6696774686 + y: 4140927.62359674 + z: 0 + theta: -2.2291683071084103 + } + v: 0.52160691597135767 + a: -1.0792652527894049 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587249.64127432171 + y: 4140927.5868764259 + z: 0 + theta: -2.2125624761429545 + } + v: 0.41368039069241719 + a: -1.0792652527894049 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587249.61965565628 + y: 4140927.5579471095 + z: 0 + theta: -2.1753808143118483 + } + v: 0.30575386541347671 + a: -1.0792652527894049 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587249.6052286363 + y: 4140927.5370652666 + z: 0 + theta: -2.0841293845668933 + } + v: 0.19782734013453623 + a: -1.0792652527894049 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587249.5979933216 + y: 4140927.524230842 + z: 0 + theta: -1.5798934811270375 + } + v: 0.089900814855595743 + a: -1.0792652527894049 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587249.59794977179 + y: 4140927.5194437839 + z: 0 + theta: -1.5798934811270375 + } + v: 0 + a: 0 + relative_time: 2.9000000000000004 + } + } + trajectory { + probability: 0.94671820122843153 + trajectory_point { + path_point { + x: 587250.04264411889 + y: 4140928.2701780712 + z: 0 + theta: -2.3842987447578121 + } + v: 1.3531074937218841 + a: -1.0828696558515987 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587249.94821035583 + y: 4140928.1809085128 + z: 0 + theta: -2.3849434465047219 + } + v: 1.2448205281367242 + a: -1.0828696558515987 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587249.86157222115 + y: 4140928.0991139761 + z: 0 + theta: -2.3890107995501819 + } + v: 1.1365335625515642 + a: -1.0828696558515987 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587249.78251116688 + y: 4140928.02507878 + z: 0 + theta: -2.3910171170727574 + } + v: 1.0282465969664043 + a: -1.0828696558515987 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587249.711105192 + y: 4140927.9584804219 + z: 0 + theta: -2.3939242787077259 + } + v: 0.91995963138124437 + a: -1.0828696558515987 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587249.64731116942 + y: 4140927.8993273689 + z: 0 + theta: -2.4036800847637281 + } + v: 0.81167266579608444 + a: -1.0828696558515987 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587249.59113732411 + y: 4140927.8482502317 + z: 0 + theta: -2.4264044348099016 + } + v: 0.7033857002109245 + a: -1.0828696558515987 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587249.5422819868 + y: 4140927.8058149558 + z: 0 + theta: -2.4268321852979073 + } + v: 0.59509873462576457 + a: -1.0828696558515987 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587249.50155852851 + y: 4140927.7704735021 + z: 0 + theta: -2.4274575505918738 + } + v: 0.48681176904060469 + a: -1.0828696558515987 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587249.46896783006 + y: 4140927.7422256959 + z: 0 + theta: -2.4064869378033005 + } + v: 0.37852480345544481 + a: -1.0828696558515987 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587249.44478434371 + y: 4140927.7203600858 + z: 0 + theta: -2.40762374744434 + } + v: 0.27023783787028494 + a: -1.0828696558515987 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587249.42865266593 + y: 4140927.7058078516 + z: 0 + theta: -2.4136854918086343 + } + v: 0.16195087228512506 + a: -1.0828696558515987 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0.05366390669996518 + a: -1.0828696558515987 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587249.42056138511 + y: 4140927.6985972612 + z: 0 + theta: -2.4136854918086343 + } + v: 0 + a: 0 + relative_time: 2.9000000000000004 + } + } +} +prediction_obstacle { + perception_obstacle { + id: 1058 + position { + x: 587232.03341867344 + y: 4140913.8832011078 + z: -30.4062544935023 + } + theta: 2.644098596115493 + velocity { + x: -0.037461817264556885 + y: 0.20285728573799133 + z: 0 + } + length: 0.35435688495635986 + width: 0.395597904920578 + height: 0.27917766571044922 + polygon_point { + x: 587232.24818964861 + y: 4140913.9916219446 + z: -30.399423985471607 + } + polygon_point { + x: 587232.0996271217 + y: 4140913.6215388514 + z: -30.397660828420825 + } + polygon_point { + x: 587232.00914468325 + y: 4140913.7641311567 + z: -30.401047830038493 + } + polygon_point { + x: 587231.93533886864 + y: 4140913.9297552733 + z: -30.404408356170872 + } + polygon_point { + x: 587231.96005388489 + y: 4140914.1194224022 + z: -30.406254519937384 + } + tracking_time: 1.1005771160125732 + type: UNKNOWN + timestamp: 0 + } + timestamp: 1505249215.0977759 + predicted_period: 3 + trajectory { + probability: 1 + trajectory_point { + path_point { + x: 587232.03341867344 + y: 4140913.8832011078 + z: 0 + theta: 1.7527429759319573 + } + v: 0.20628733875288641 + a: 0.015203655247626697 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587232.02967249171 + y: 4140913.9035628545 + z: 0 + theta: 1.7514237352664821 + } + v: 0.20778260776219354 + a: 0.015203655247626697 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587232.02592631 + y: 4140913.9240766382 + z: 0 + theta: 1.7501232836543541 + } + v: 0.20927823840482029 + a: 0.015203655247626697 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587232.02218012826 + y: 4140913.9447424579 + z: 0 + theta: 1.7488412268402496 + } + v: 0.21077422298243634 + a: 0.015203655247626697 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587232.01843394653 + y: 4140913.9655603147 + z: 0 + theta: 1.7475771814019576 + } + v: 0.21227055401193207 + a: 0.015203655247626697 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587232.01468776481 + y: 4140913.9865302076 + z: 0 + theta: 1.7463307743850396 + } + v: 0.21376722421801037 + a: 0.015203655247626697 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587232.01094158308 + y: 4140914.0076521374 + z: 0 + theta: 1.7451016429520037 + } + v: 0.2152642265260799 + a: 0.015203655247626697 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587232.00719540135 + y: 4140914.0289261034 + z: 0 + theta: 1.7438894340453264 + } + v: 0.21676155405543562 + a: 0.015203655247626697 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587232.00344921963 + y: 4140914.0503521063 + z: 0 + theta: 1.7426938040637017 + } + v: 0.21825920011271324 + a: 0.015203655247626697 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587231.9997030379 + y: 4140914.0719301454 + z: 0 + theta: 1.7415144185509213 + } + v: 0.21975715818560509 + a: 0.015203655247626697 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587231.99595685618 + y: 4140914.0936602214 + z: 0 + theta: 1.7403509518968185 + } + v: 0.22125542193682501 + a: 0.015203655247626697 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587231.99221067445 + y: 4140914.1155423336 + z: 0 + theta: 1.7392030870497484 + } + v: 0.22275398519831169 + a: 0.015203655247626697 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587231.98846449272 + y: 4140914.1375764827 + z: 0 + theta: 1.7380705152400826 + } + v: 0.22425284196565856 + a: 0.015203655247626697 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587231.984718311 + y: 4140914.159762668 + z: 0 + theta: 1.7369529357142459 + } + v: 0.22575198639276103 + a: 0.015203655247626697 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587231.98097212927 + y: 4140914.18210089 + z: 0 + theta: 1.7358500554788292 + } + v: 0.22725141278667088 + a: 0.015203655247626697 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587231.97722594754 + y: 4140914.2045911485 + z: 0 + theta: 1.7347615890543373 + } + v: 0.2287511156026483 + a: 0.015203655247626697 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587231.97347976582 + y: 4140914.2272334439 + z: 0 + theta: 1.7336872582381666 + } + v: 0.23025108943940356 + a: 0.015203655247626697 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587231.96973358409 + y: 4140914.2500277753 + z: 0 + theta: 1.7326267918764031 + } + v: 0.23175132903451937 + a: 0.015203655247626697 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587231.96598740236 + y: 4140914.2729741437 + z: 0 + theta: 1.731579925644074 + } + v: 0.23325182926004603 + a: 0.015203655247626697 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587231.96224122064 + y: 4140914.2960725483 + z: 0 + theta: 1.730546401833486 + } + v: 0.23475258511826244 + a: 0.015203655247626697 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587231.95849503891 + y: 4140914.31932299 + z: 0 + theta: 1.7295259691503169 + } + v: 0.23625359173759497 + a: 0.015203655247626697 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587231.95474885718 + y: 4140914.3427254679 + z: 0 + theta: 1.7285183825171264 + } + v: 0.23775484436868816 + a: 0.015203655247626697 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587231.95100267546 + y: 4140914.366279982 + z: 0 + theta: 1.7275234028839814 + } + v: 0.23925633838062019 + a: 0.015203655247626697 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587231.94725649373 + y: 4140914.3899865332 + z: 0 + theta: 1.7265407970458992 + } + v: 0.24075806925725732 + a: 0.015203655247626697 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587231.943510312 + y: 4140914.4138451209 + z: 0 + theta: 1.7255703374668221 + } + v: 0.24226003259374124 + a: 0.015203655247626697 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587231.93976413028 + y: 4140914.4378557447 + z: 0 + theta: 1.724611802109866 + } + v: 0.24376222409310386 + a: 0.015203655247626697 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587231.93601794855 + y: 4140914.4620184056 + z: 0 + theta: 1.7236649742735692 + } + v: 0.24526463956300423 + a: 0.015203655247626697 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587231.93227176683 + y: 4140914.4863331029 + z: 0 + theta: 1.7227296424339174 + } + v: 0.24676727491258227 + a: 0.015203655247626697 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587231.9285255851 + y: 4140914.5107998364 + z: 0 + theta: 1.7218056000918942 + } + v: 0.24827012614942479 + a: 0.015203655247626697 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587231.92477940337 + y: 4140914.5354186068 + z: 0 + theta: 1.7218056000918942 + } + v: 0.24977318937663909 + a: 0.015203655247626697 + relative_time: 2.9000000000000004 + } + } +} +perception_error_code: OK diff --git a/modules/planning/testdata/sunnyvale_loop_test/6_routing.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/6_routing.pb.txt new file mode 100644 index 00000000000..4affe7db1be --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/6_routing.pb.txt @@ -0,0 +1,116 @@ +header { + timestamp_sec: 1505426824.2902567 + module_name: "routing" + sequence_num: 1 +} +route { + road_info { + id: "23-21-144-140-747-141-12-22-906-88-13-9-133" + in_lane { + id: "144_1_-1" + s: 6.6810589573790908 + } + out_lane { + id: "23_1_-1" + s: 0 + } + passage_region { + segment { + id: "144_1_-1" + start_s: 6.6810589573790908 + end_s: 46.5655 + } + segment { + id: "140_1_-1" + start_s: 0 + end_s: 146.337 + } + segment { + id: "747_1_-1" + start_s: 0 + end_s: 15.6326 + } + segment { + id: "141_1_-2" + start_s: 0 + end_s: 41.6019 + } + segment { + id: "906_1_-1" + start_s: 0 + end_s: 27.921 + } + segment { + id: "9_1_-2" + start_s: 0 + end_s: 161.962 + } + segment { + id: "13_1_-2" + start_s: 0 + end_s: 35.3398 + } + segment { + id: "12_1_-3" + start_s: 0 + end_s: 122.494 + } + segment { + id: "133_1_-3" + start_s: 0 + end_s: 3.63182 + } + segment { + id: "88_1_-1" + start_s: 0 + end_s: 19.7333 + } + segment { + id: "21_1_-1" + start_s: 0 + end_s: 128.73 + } + segment { + id: "22_1_-1" + start_s: 0 + end_s: 31.9409 + } + segment { + id: "23_1_-1" + start_s: 0 + end_s: 0 + } + } + } +} +measurement { + distance: 775.20876104262084 +} +routing_request { + header { + timestamp_sec: 1505426824.2442551 + module_name: "dreamview" + sequence_num: 1 + } + start { + id: "144_1_-1" + s: 6.6810589573790908 + pose { + x: 587316.814700983 + y: 4141172.35367818 + } + } + end { + id: "23_1_-1" + s: 0 + pose { + x: 586948.74012 + y: 4141171.118641 + } + } +} +map_version: "1.400000" +error_code { + error_id: SUCCESS + error_string: "Success!" +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/7_chassis.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/7_chassis.pb.txt new file mode 100644 index 00000000000..b0debf8ceab --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/7_chassis.pb.txt @@ -0,0 +1,22 @@ +engine_started: true +engine_rpm: 0 +speed_mps: 1.7111111 +odometer_m: 0 +fuel_range_m: 0 +throttle_percentage: 15.410087 +brake_percentage: 21.004044 +steering_percentage: 1.7872341 +steering_torque_nm: 0.0625 +parking_brake: false +driving_mode: COMPLETE_AUTO_DRIVE +error_code: NO_ERROR +gear_location: GEAR_DRIVE +header { + timestamp_sec: 1505249218.2989933 + module_name: "chassis" + sequence_num: 67811 +} +signal { + turn_signal: TURN_NONE + horn: false +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/7_localization.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/7_localization.pb.txt new file mode 100644 index 00000000000..dfe902c0c07 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/7_localization.pb.txt @@ -0,0 +1,49 @@ +header { + timestamp_sec: 1505249218.2976625 + module_name: "localization" + sequence_num: 67991 +} +pose { + position { + x: 587258.38460170687 + y: 4140947.0768520203 + z: -30.850118190981448 + } + orientation { + qx: 0.0074207205425177716 + qy: 0.0084272944828341443 + qz: -0.99371870186141886 + qw: -0.11134206386261261 + } + linear_velocity { + x: -0.37699942377197876 + y: -1.6274912583813339 + z: 0.0091276809908974466 + } + linear_acceleration { + x: 0.06758275514013623 + y: 0.58005300568796581 + z: 0.11224707440552839 + } + angular_velocity { + x: -0.0021672752919058812 + y: -0.00065317121501559422 + z: 0.0045832043018082941 + } + heading: -1.7938388115138242 + linear_acceleration_vrf { + x: 0.061085343898371773 + y: -0.58260082107827538 + z: 0.10233859463717518 + } + angular_velocity_vrf { + x: 0.0019096888620515951 + y: 0.0010318624688278836 + z: 0.0046279395841697449 + } + euler_angles { + x: 0.012874128218282202 + y: 0.018402235560037124 + z: -1.7938388115138244 + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/7_prediction.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/7_prediction.pb.txt new file mode 100644 index 00000000000..e43f9394874 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/7_prediction.pb.txt @@ -0,0 +1,1153 @@ +header { + timestamp_sec: 1505249218.3014977 + module_name: "prediction" + sequence_num: 6719 +} +prediction_obstacle { + perception_obstacle { + id: 867 + position { + x: 587249.30227853672 + y: 4140927.7242350434 + z: -31.409300410059611 + } + theta: -2.3743207768870445 + velocity { + x: 0 + y: 0 + z: 0 + } + length: 4.7874560356140137 + width: 2.0517358779907227 + height: 2.2102658748626709 + polygon_point { + x: 587250.24569208594 + y: 4140929.6836041897 + z: -31.415222552520351 + } + polygon_point { + x: 587250.31040158961 + y: 4140929.6877299929 + z: -31.414232744867235 + } + polygon_point { + x: 587250.52927705925 + y: 4140929.689671908 + z: -31.41056166133275 + } + polygon_point { + x: 587250.65888626862 + y: 4140929.6363155427 + z: -31.406921718973745 + } + polygon_point { + x: 587251.10946448031 + y: 4140929.2649826272 + z: -31.389269007540918 + } + polygon_point { + x: 587251.452314933 + y: 4140928.9428392635 + z: -31.374771934331971 + } + polygon_point { + x: 587251.36741667008 + y: 4140928.6092987652 + z: -31.367244791179907 + } + polygon_point { + x: 587251.00902297453 + y: 4140927.9443005645 + z: -31.355454774832591 + } + polygon_point { + x: 587250.07675278827 + y: 4140927.1391074792 + z: -31.349656166176228 + } + polygon_point { + x: 587247.04096698773 + y: 4140926.6196726169 + z: -31.387326845251749 + } + polygon_point { + x: 587247.13450171892 + y: 4140926.8357157186 + z: -31.391546703204636 + } + polygon_point { + x: 587247.32787463022 + y: 4140927.1963122562 + z: -31.397956307472235 + } + polygon_point { + x: 587249.716462465 + y: 4140929.54838116 + z: -31.42058819688274 + } + tracking_time: 129.04472708702087 + type: UNKNOWN + timestamp: 0 + } + timestamp: 1505249218.2983952 + predicted_period: 3 + trajectory { + probability: 0.94396636058276262 + trajectory_point { + path_point { + x: 587249.4192617191 + y: 4140927.8257539463 + z: 0 + theta: -1.8737308807222397 + } + v: 0.10766962620182956 + a: 0.032926392283306308 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587249.41575410333 + y: 4140927.8145315344 + z: 0 + theta: -1.8930955964016905 + } + v: 0.11096226543016019 + a: 0.032926392283306308 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587249.41190290812 + y: 4140927.8029990462 + z: 0 + theta: -1.9099786360261348 + } + v: 0.11425490465849082 + a: 0.032926392283306308 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587249.40773085866 + y: 4140927.7911740835 + z: 0 + theta: -1.9214929826732763 + } + v: 0.11754754388682145 + a: 0.032926392283306308 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587249.40332122159 + y: 4140927.7791199065 + z: 0 + theta: -1.9324782292223139 + } + v: 0.12084018311515209 + a: 0.032926392283306308 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587249.398674086 + y: 4140927.7668364341 + z: 0 + theta: -1.9429669801379859 + } + v: 0.12413282234348272 + a: 0.032926392283306308 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587249.39378954051 + y: 4140927.7543235882 + z: 0 + theta: -1.9529893819896373 + } + v: 0.12742546157181334 + a: 0.032926392283306308 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587249.38866767311 + y: 4140927.7415812891 + z: 0 + theta: -1.9625733610094545 + } + v: 0.13071810080014395 + a: 0.032926392283306308 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587249.383308572 + y: 4140927.7286094576 + z: 0 + theta: -1.9717449732488912 + } + v: 0.13401074002847457 + a: 0.032926392283306308 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587249.37771232415 + y: 4140927.7154080165 + z: 0 + theta: -1.9805282346345185 + } + v: 0.13730337925680519 + a: 0.032926392283306308 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587249.37187901663 + y: 4140927.701976887 + z: 0 + theta: -1.9889455920692076 + } + v: 0.14059601848513581 + a: 0.032926392283306308 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587249.36580873583 + y: 4140927.6883159922 + z: 0 + theta: -1.9970178187724863 + } + v: 0.14388865771346643 + a: 0.032926392283306308 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587249.35950156779 + y: 4140927.6744252546 + z: 0 + theta: -2.0047643079775215 + } + v: 0.14718129694179705 + a: 0.032926392283306308 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587249.352957598 + y: 4140927.6603045976 + z: 0 + theta: -2.0122030846742383 + } + v: 0.15047393617012766 + a: 0.032926392283306308 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587249.34617691184 + y: 4140927.6459539453 + z: 0 + theta: -2.0193509057540155 + } + v: 0.15376657539845828 + a: 0.032926392283306308 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587249.339159594 + y: 4140927.6313732211 + z: 0 + theta: -2.0158463478912156 + } + v: 0.1570592146267889 + a: 0.032926392283306308 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587249.332310665 + y: 4140927.6170138125 + z: 0 + theta: -2.022251771747972 + } + v: 0.16035185385511952 + a: 0.032926392283306308 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587249.32524977974 + y: 4140927.6024508239 + z: 0 + theta: -2.028918773835696 + } + v: 0.16364449308345014 + a: 0.032926392283306308 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587249.31795729382 + y: 4140927.587662138 + z: 0 + theta: -2.0353384363014171 + } + v: 0.16693713231178076 + a: 0.032926392283306308 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587249.31043320766 + y: 4140927.5726475571 + z: 0 + theta: -2.0415232523023343 + } + v: 0.17022977154011137 + a: 0.032926392283306308 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587249.30267752218 + y: 4140927.5574068828 + z: 0 + theta: -2.0474849739910264 + } + v: 0.173522410768442 + a: 0.032926392283306308 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587249.29469023936 + y: 4140927.5419399189 + z: 0 + theta: -2.0532346616349759 + } + v: 0.17681504999677261 + a: 0.032926392283306308 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587249.28647136141 + y: 4140927.5262464718 + z: 0 + theta: -2.058782580162076 + } + v: 0.18010768922510323 + a: 0.032926392283306308 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587249.27802089159 + y: 4140927.5103263473 + z: 0 + theta: -2.0641385088062232 + } + v: 0.18340032845343385 + a: 0.032926392283306308 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587249.26933883375 + y: 4140927.4941793554 + z: 0 + theta: -2.0693115115357621 + } + v: 0.18669296768176447 + a: 0.032926392283306308 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587249.260425192 + y: 4140927.4778053048 + z: 0 + theta: -2.0836321325346803 + } + v: 0.18998560691009508 + a: 0.032926392283306308 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587249.2509016681 + y: 4140927.4608922671 + z: 0 + theta: -2.0993721499261082 + } + v: 0.1932782461384257 + a: 0.032926392283306308 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587249.24065710057 + y: 4140927.4433503649 + z: 0 + theta: -2.1037288307518534 + } + v: 0.19657088536675632 + a: 0.032926392283306308 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587249.23017347639 + y: 4140927.4255773844 + z: 0 + theta: -2.1079463710103949 + } + v: 0.19986352459508694 + a: 0.032926392283306308 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587249.21945092315 + y: 4140927.407573299 + z: 0 + theta: -2.1079463710103949 + } + v: 0.20315616382341756 + a: 0.032926392283306308 + relative_time: 2.9000000000000004 + } + } + trajectory { + probability: 0.969391288139891 + trajectory_point { + path_point { + x: 587249.4001042163 + y: 4140927.8374669128 + z: 0 + theta: -2.3783185684801413 + } + v: 0.096340550721779 + a: 0.030566996766878116 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587249.39295378467 + y: 4140927.8306260756 + z: 0 + theta: -2.3673758383338854 + } + v: 0.099397250398466808 + a: 0.030566996766878116 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587249.38576813485 + y: 4140927.823599346 + z: 0 + theta: -2.3575911462737453 + } + v: 0.10245395007515462 + a: 0.030566996766878116 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587249.37853264448 + y: 4140927.8163840384 + z: 0 + theta: -2.359023167722563 + } + v: 0.10551064975184243 + a: 0.030566996766878116 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587249.37107293028 + y: 4140927.8089664076 + z: 0 + theta: -2.36037193268305 + } + v: 0.10856734942853025 + a: 0.030566996766878116 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587249.36338896828 + y: 4140927.8013463775 + z: 0 + theta: -2.3616439258987634 + } + v: 0.11162404910521806 + a: 0.030566996766878116 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587249.35548073484 + y: 4140927.7935238685 + z: 0 + theta: -2.3628453420631876 + } + v: 0.11468074878190587 + a: 0.030566996766878116 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587249.34734820738 + y: 4140927.7854988044 + z: 0 + theta: -2.3639815507150268 + } + v: 0.11773744845859369 + a: 0.030566996766878116 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587249.3389913633 + y: 4140927.7772711078 + z: 0 + theta: -2.3650573379990503 + } + v: 0.1207941481352815 + a: 0.030566996766878116 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587249.33041018131 + y: 4140927.7688407009 + z: 0 + theta: -2.3660771775770475 + } + v: 0.12385084781196931 + a: 0.030566996766878116 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587249.32160464011 + y: 4140927.7602075068 + z: 0 + theta: -2.3670450199134647 + } + v: 0.12690754748865712 + a: 0.030566996766878116 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587249.3125747192 + y: 4140927.7513714489 + z: 0 + theta: -2.3679645314965883 + } + v: 0.12996424716534494 + a: 0.030566996766878116 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587249.30332039832 + y: 4140927.742332451 + z: 0 + theta: -2.3688389084177297 + } + v: 0.13302094684203275 + a: 0.030566996766878116 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587249.29384165816 + y: 4140927.7330904366 + z: 0 + theta: -2.3696711482058426 + } + v: 0.13607764651872056 + a: 0.030566996766878116 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587249.28413847962 + y: 4140927.7236453285 + z: 0 + theta: -2.37046407272184 + } + v: 0.13913434619540838 + a: 0.030566996766878116 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587249.27421084407 + y: 4140927.7139970521 + z: 0 + theta: -2.3730547057048312 + } + v: 0.14219104587209619 + a: 0.030566996766878116 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587249.26402625244 + y: 4140927.7041502264 + z: 0 + theta: -2.4099813387820803 + } + v: 0.145247745548784 + a: 0.030566996766878116 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587249.25294304616 + y: 4140927.6941994634 + z: 0 + theta: -2.4106506840868427 + } + v: 0.14830444522547181 + a: 0.030566996766878116 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587249.2416240297 + y: 4140927.6840506596 + z: 0 + theta: -2.4112910796281493 + } + v: 0.15136114490215963 + a: 0.030566996766878116 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587249.23006926582 + y: 4140927.6737038218 + z: 0 + theta: -2.4119041794039293 + } + v: 0.15441784457884744 + a: 0.030566996766878116 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587249.21827881667 + y: 4140927.6631589551 + z: 0 + theta: -2.4124915703328043 + } + v: 0.15747454425553525 + a: 0.030566996766878116 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587249.206252744 + y: 4140927.6524160644 + z: 0 + theta: -2.41305468703659 + } + v: 0.16053124393222307 + a: 0.030566996766878116 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587249.19399110973 + y: 4140927.641475155 + z: 0 + theta: -2.4135948838634302 + } + v: 0.16358794360891088 + a: 0.030566996766878116 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587249.18149397522 + y: 4140927.6303362316 + z: 0 + theta: -2.4141134146629124 + } + v: 0.16664464328559869 + a: 0.030566996766878116 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587249.16876140144 + y: 4140927.6189992987 + z: 0 + theta: -2.4146114240317496 + } + v: 0.16970134296228651 + a: 0.030566996766878116 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587249.15579344914 + y: 4140927.6074643605 + z: 0 + theta: -2.4150899480529966 + } + v: 0.17275804263897432 + a: 0.030566996766878116 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587249.14259017911 + y: 4140927.5957314204 + z: 0 + theta: -2.415550108715808 + } + v: 0.17581474231566213 + a: 0.030566996766878116 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587249.12915165152 + y: 4140927.583800484 + z: 0 + theta: -2.3932126922521171 + } + v: 0.17887144199234994 + a: 0.030566996766878116 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587249.11603461823 + y: 4140927.5716203349 + z: 0 + theta: -2.3843004724634467 + } + v: 0.18192814166903776 + a: 0.030566996766878116 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587249.10291398084 + y: 4140927.5592172556 + z: 0 + theta: -2.3843004724634467 + } + v: 0.18498484134572557 + a: 0.030566996766878116 + relative_time: 2.9000000000000004 + } + } +} +prediction_obstacle { + perception_obstacle { + id: 1061 + position { + x: 587232.29336740391 + y: 4140903.7899699067 + z: -30.723592840937297 + } + theta: 1.06649262367165 + velocity { + x: 0.41445758938789368 + y: 0.75095981359481812 + z: 0 + } + length: 0.31889975070953369 + width: 1.0891121625900269 + height: 1.5170831680297852 + polygon_point { + x: 587232.66641127435 + y: 4140903.7448376017 + z: -30.711549749257841 + } + polygon_point { + x: 587232.84568696748 + y: 4140903.5932929493 + z: -30.70442391934613 + } + polygon_point { + x: 587232.54470123374 + y: 4140903.6216486408 + z: -30.710306715570162 + } + polygon_point { + x: 587232.32623784558 + y: 4140903.6536591877 + z: -30.714884020576712 + } + polygon_point { + x: 587231.99884646886 + y: 4140903.7703851834 + z: -30.723592933714439 + } + polygon_point { + x: 587231.84276201332 + y: 4140904.030197415 + z: -30.733236366350646 + } + polygon_point { + x: 587231.99363595888 + y: 4140904.0913873538 + z: -30.732315679748318 + } + tracking_time: 2.6013500690460205 + type: UNKNOWN + timestamp: 0 + } + timestamp: 1505249218.2983952 + predicted_period: 3 + trajectory { + probability: 0.88379883360191736 + trajectory_point { + path_point { + x: 587232.34836496518 + y: 4140903.2992812218 + z: 0 + theta: -0.13499387120320908 + } + v: 0.70704212979607928 + a: 0.080422825666504869 + relative_time: 0 + } + trajectory_point { + path_point { + x: 587232.41709894314 + y: 4140903.2899457794 + z: 0 + theta: -0.11890966598588529 + } + v: 0.71508441236272979 + a: 0.080422825666504869 + relative_time: 0.1 + } + trajectory_point { + path_point { + x: 587232.48841598583 + y: 4140903.2814252973 + z: 0 + theta: -0.11850548162255232 + } + v: 0.72312669492938031 + a: 0.080422825666504869 + relative_time: 0.2 + } + trajectory_point { + path_point { + x: 587232.56053445593 + y: 4140903.27283863 + z: 0 + theta: -0.11810584028032027 + } + v: 0.73116897749603083 + a: 0.080422825666504869 + relative_time: 0.30000000000000004 + } + trajectory_point { + path_point { + x: 587232.63319295109 + y: 4140903.2642171127 + z: 0 + theta: -0.11780193300782055 + } + v: 0.73921126006268134 + a: 0.080422825666504869 + relative_time: 0.4 + } + trajectory_point { + path_point { + x: 587232.70448294177 + y: 4140903.2557799495 + z: 0 + theta: -0.11765843088001891 + } + v: 0.74725354262933186 + a: 0.080422825666504869 + relative_time: 0.5 + } + trajectory_point { + path_point { + x: 587232.77657099452 + y: 4140903.2472588252 + z: 0 + theta: -0.10940127040403387 + } + v: 0.75529582519598237 + a: 0.080422825666504869 + relative_time: 0.60000000000000009 + } + trajectory_point { + path_point { + x: 587232.85023468721 + y: 4140903.2391676176 + z: 0 + theta: -0.096085550378022244 + } + v: 0.76333810776263289 + a: 0.080422825666504869 + relative_time: 0.70000000000000007 + } + trajectory_point { + path_point { + x: 587232.92598648788 + y: 4140903.2318664812 + z: 0 + theta: -0.095745122760053272 + } + v: 0.77138039032928341 + a: 0.080422825666504869 + relative_time: 0.8 + } + trajectory_point { + path_point { + x: 587233.00254064787 + y: 4140903.224514314 + z: 0 + theta: -0.092481799393810113 + } + v: 0.77942267289593392 + a: 0.080422825666504869 + relative_time: 0.9 + } + trajectory_point { + path_point { + x: 587233.07910054666 + y: 4140903.2174136615 + z: 0 + theta: -0.090386075177705583 + } + v: 0.78746495546258444 + a: 0.080422825666504869 + relative_time: 1 + } + trajectory_point { + path_point { + x: 587233.15596045239 + y: 4140903.2104476159 + z: 0 + theta: -0.0901914042438361 + } + v: 0.795507238029235 + a: 0.080422825666504869 + relative_time: 1.1 + } + trajectory_point { + path_point { + x: 587233.23362239555 + y: 4140903.2034241217 + z: 0 + theta: -0.074953356565055709 + } + v: 0.80354952059588547 + a: 0.080422825666504869 + relative_time: 1.2000000000000002 + } + trajectory_point { + path_point { + x: 587233.31277736672 + y: 4140903.1974800555 + z: 0 + theta: -0.073544158754186822 + } + v: 0.811591803162536 + a: 0.080422825666504869 + relative_time: 1.3 + } + trajectory_point { + path_point { + x: 587233.39278946945 + y: 4140903.1915850006 + z: 0 + theta: -0.069946480736594985 + } + v: 0.8196340857291865 + a: 0.080422825666504869 + relative_time: 1.4000000000000001 + } + trajectory_point { + path_point { + x: 587233.47361713822 + y: 4140903.1859221514 + z: 0 + theta: -0.062469593979633434 + } + v: 0.827676368295837 + a: 0.080422825666504869 + relative_time: 1.5 + } + trajectory_point { + path_point { + x: 587233.555274807 + y: 4140903.180814384 + z: 0 + theta: -0.062233584197449288 + } + v: 0.83571865086248753 + a: 0.080422825666504869 + relative_time: 1.6 + } + trajectory_point { + path_point { + x: 587233.63773666 + y: 4140903.1756758518 + z: 0 + theta: -0.053848263336110626 + } + v: 0.843760933429138 + a: 0.080422825666504869 + relative_time: 1.7000000000000002 + } + trajectory_point { + path_point { + x: 587233.72102620907 + y: 4140903.1711865142 + z: 0 + theta: -0.051189799062674686 + } + v: 0.85180321599578857 + a: 0.080422825666504869 + relative_time: 1.8 + } + trajectory_point { + path_point { + x: 587233.80512746179 + y: 4140903.1668776236 + z: 0 + theta: -0.047947807922382672 + } + v: 0.85984549856243908 + a: 0.080422825666504869 + relative_time: 1.9000000000000001 + } + trajectory_point { + path_point { + x: 587233.89003984467 + y: 4140903.1628031381 + z: 0 + theta: -0.040163354263385437 + } + v: 0.8678877811290896 + a: 0.080422825666504869 + relative_time: 2 + } + trajectory_point { + path_point { + x: 587233.97577315313 + y: 4140903.1593579482 + z: 0 + theta: -0.039958895399168068 + } + v: 0.87593006369574011 + a: 0.080422825666504869 + relative_time: 2.1 + } + trajectory_point { + path_point { + x: 587234.06231173966 + y: 4140903.1558981203 + z: 0 + theta: -0.030668267672048746 + } + v: 0.88397234626239063 + a: 0.080422825666504869 + relative_time: 2.2 + } + trajectory_point { + path_point { + x: 587234.14966730087 + y: 4140903.1532182363 + z: 0 + theta: -0.028962447002166918 + } + v: 0.89201462882904115 + a: 0.080422825666504869 + relative_time: 2.3000000000000003 + } + trajectory_point { + path_point { + x: 587234.2378304248 + y: 4140903.1506641023 + z: 0 + theta: -0.023648838139516289 + } + v: 0.90005691139569166 + a: 0.080422825666504869 + relative_time: 2.4000000000000004 + } + trajectory_point { + path_point { + x: 587234.32680141216 + y: 4140903.1485596495 + z: 0 + theta: -0.017984721798068051 + } + v: 0.90809919396234218 + a: 0.080422825666504869 + relative_time: 2.5 + } + trajectory_point { + path_point { + x: 587234.416580565 + y: 4140903.1469448223 + z: 0 + theta: -0.016170820309561483 + } + v: 0.91614147652899269 + a: 0.080422825666504869 + relative_time: 2.6 + } + trajectory_point { + path_point { + x: 587234.50705137523 + y: 4140903.1454817075 + z: 0 + theta: -0.0072259975383158776 + } + v: 0.92418375909564321 + a: 0.080422825666504869 + relative_time: 2.7 + } + trajectory_point { + path_point { + x: 587234.59771471226 + y: 4140903.1448265631 + z: 0 + theta: -0.0071465154774272427 + } + v: 0.93222604166229373 + a: 0.080422825666504869 + relative_time: 2.8000000000000003 + } + trajectory_point { + path_point { + x: 587234.68918541027 + y: 4140903.1441728552 + z: 0 + theta: -0.0071465154774272427 + } + v: 0.94026832422894424 + a: 0.080422825666504869 + relative_time: 2.9000000000000004 + } + } +} +perception_error_code: OK diff --git a/modules/planning/testdata/sunnyvale_loop_test/7_routing.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/7_routing.pb.txt new file mode 100644 index 00000000000..3408834e27c --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/7_routing.pb.txt @@ -0,0 +1,101 @@ +header { + timestamp_sec: 1505427398.4920573 + module_name: "routing" + sequence_num: 2 +} +route { + road_info { + id: "21-133-13-22-88-9-906-23-12-141" + in_lane { + id: "141_1_-2" + s: 30.7800844462901 + } + out_lane { + id: "23_1_-1" + s: 0 + } + passage_region { + segment { + id: "141_1_-2" + start_s: 30.7800844462901 + end_s: 41.6019 + } + segment { + id: "906_1_-1" + start_s: 0 + end_s: 27.921 + } + segment { + id: "9_1_-2" + start_s: 0 + end_s: 161.962 + } + segment { + id: "13_1_-2" + start_s: 0 + end_s: 35.3398 + } + segment { + id: "12_1_-3" + start_s: 0 + end_s: 122.494 + } + segment { + id: "133_1_-3" + start_s: 0 + end_s: 3.63182 + } + segment { + id: "88_1_-1" + start_s: 0 + end_s: 19.7333 + } + segment { + id: "21_1_-1" + start_s: 0 + end_s: 128.73 + } + segment { + id: "22_1_-1" + start_s: 0 + end_s: 31.9409 + } + segment { + id: "23_1_-1" + start_s: 0 + end_s: 0 + } + } + } +} +measurement { + distance: 542.57463555370987 +} +routing_request { + header { + timestamp_sec: 1505427398.4910796 + module_name: "dreamview" + sequence_num: 2 + } + start { + id: "141_1_-2" + s: 30.7800844462901 + pose { + x: 587258.440962212 + y: 4140947.3650635 + } + } + end { + id: "23_1_-1" + s: 0 + pose { + x: 586948.74012 + y: 4141171.118641 + } + } +} +map_version: "1.400000" +error_code { + error_id: SUCCESS + error_string: "Success!" +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/result_cruise_0.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/result_cruise_0.pb.txt new file mode 100644 index 00000000000..2e8a2dfa54a --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/result_cruise_0.pb.txt @@ -0,0 +1,2291 @@ +header { + module_name: "planning" +} +is_replan: true +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: 587503.356047 + y: 4140719.15699 + theta: 2.35595493774 + kappa: -3.7243533689536764e-18 + s: 3.2187251995663413e-20 + dkappa: 0 + ddkappa: 0 + } + v: 5.4222221374511719 + a: 0.746524782766 + relative_time: 0 +} +trajectory_point { + path_point { + x: 587503.16390746331 + y: 4140719.3495789506 + theta: 2.355276634955386 + kappa: -0.0013016860106378296 + s: 0.27204430772596522 + dkappa: 0 + ddkappa: 0 + } + v: 5.4595501990415558 + a: 0.74652828882241329 + relative_time: 0.05 +} +trajectory_point { + path_point { + x: 587502.97044984123 + y: 4140719.5434890687 + theta: 2.3545936784628672 + kappa: -0.0026123016416321819 + s: 0.54595485075621586 + dkappa: 0 + ddkappa: 0 + } + v: 5.4968681329117626 + a: 0.74612178957978514 + relative_time: 0.1 +} +trajectory_point { + path_point { + x: 587502.77567485 + y: 4140719.7387196384 + theta: 2.353906071422629 + kappa: -0.003931842043061325 + s: 0.82173061548717152 + dkappa: 0 + ddkappa: 0 + } + v: 5.5341557561399712 + a: 0.74531797876336414 + relative_time: 0.15000000000000002 +} +trajectory_point { + path_point { + x: 587502.579915273 + y: 4140719.9355983385 + theta: 2.3527913066238866 + kappa: -0.005121493001825796 + s: 1.0993695950363169 + dkappa: 0 + ddkappa: 0 + } + v: 5.5713935204906235 + a: 0.74412955009839932 + relative_time: 0.2 +} +trajectory_point { + path_point { + x: 587502.38340768835 + y: 4140720.1343559455 + theta: 2.3509504027326575 + kappa: -0.00608301956237357 + s: 1.3788688209765161 + dkappa: 0 + ddkappa: 0 + } + v: 5.6085625124144229 + a: 0.74256919731013926 + relative_time: 0.25 +} +trajectory_point { + path_point { + x: 587502.18559496047 + y: 4140720.3344336394 + theta: 2.349097266948255 + kappa: -0.0070509322874959118 + s: 1.6602243950703242 + dkappa: 0 + ddkappa: 0 + } + v: 5.6456444530483365 + a: 0.7406496141238329 + relative_time: 0.3 +} +trajectory_point { + path_point { + x: 587501.98648046167 + y: 4140720.53582801 + theta: 2.3472319436122997 + kappa: -0.0080252146770299 + s: 1.9434315210043018 + dkappa: 0 + ddkappa: 0 + } + v: 5.682621698215593 + a: 0.738383494264729 + relative_time: 0.35 +} +trajectory_point { + path_point { + x: 587501.78743484081 + y: 4140720.7398753171 + theta: 2.3446831625139235 + kappa: -0.0087398928410374489 + s: 2.228484536123327 + dkappa: 0 + ddkappa: 0 + } + v: 5.7194772384256831 + a: 0.7357835314580764 + relative_time: 0.39999999999999997 +} +trajectory_point { + path_point { + x: 587501.58738970384 + y: 4140720.9455186888 + theta: 2.3419779668061982 + kappa: -0.0094037435347112518 + s: 2.5153769431649096 + dkappa: 0 + ddkappa: 0 + } + v: 5.7561946988743617 + a: 0.73286241942912378 + relative_time: 0.44999999999999996 +} +trajectory_point { + path_point { + x: 587501.38606708078 + y: 4140721.152475297 + theta: 2.3392554992866792 + kappa: -0.010071833571685293 + s: 2.8041014419935029 + dkappa: 0 + ddkappa: 0 + } + v: 5.7927583394436448 + a: 0.72963285190312 + relative_time: 0.49999999999999994 +} +trajectory_point { + path_point { + x: 587501.184264895 + y: 4140721.3615021091 + theta: 2.3363206992492751 + kappa: -0.010650609348430019 + s: 3.0946499613348184 + dkappa: 0 + ddkappa: 0 + } + v: 5.8291530547018109 + a: 0.72610752260531375 + relative_time: 0.54999999999999993 +} +trajectory_point { + path_point { + x: 587500.98259393417 + y: 4140721.5731749074 + theta: 2.3330246211544168 + kappa: -0.011068668806166519 + s: 3.387013690510138 + dkappa: 0 + ddkappa: 0 + } + v: 5.8653643739034 + a: 0.72229912526095408 + relative_time: 0.6 +} +trajectory_point { + path_point { + x: 587500.7796774169 + y: 4140721.7861550357 + theta: 2.3297081612485204 + kappa: -0.011489310275034356 + s: 3.6811831111706264 + dkappa: 0 + ddkappa: 0 + } + v: 5.9013784609892177 + a: 0.71822035359528957 + relative_time: 0.65 +} +trajectory_point { + path_point { + x: 587500.57552237506 + y: 4140722.0004351134 + theta: 2.3263715076302236 + kappa: -0.011912519177927398 + s: 3.9771480290316448 + dkappa: 0 + ddkappa: 0 + } + v: 5.9371821145863288 + a: 0.713883901333569 + relative_time: 0.70000000000000007 +} +trajectory_point { + path_point { + x: 587500.37262134394 + y: 4140722.2183471117 + theta: 2.3226988994996645 + kappa: -0.012154709809429058 + s: 4.274897605607066 + dkappa: 0 + ddkappa: 0 + } + v: 5.9727627680080611 + a: 0.70930246220104132 + relative_time: 0.75000000000000011 +} +trajectory_point { + path_point { + x: 587500.16858555679 + y: 4140722.4376261476 + theta: 2.31899499615428 + kappa: -0.012392906412372725 + s: 4.5744203899435849 + dkappa: 0 + ddkappa: 0 + } + v: 6.0081084892540071 + a: 0.70448872992295519 + relative_time: 0.80000000000000016 +} +trajectory_point { + path_point { + x: 587499.96335005166 + y: 4140722.6581945326 + theta: 2.3152693451620787 + kappa: -0.01263250359710907 + s: 4.8757043503550319 + dkappa: 0 + ddkappa: 0 + } + v: 6.0432079810100188 + a: 0.69945539822455949 + relative_time: 0.8500000000000002 +} +trajectory_point { + path_point { + x: 587499.75875683967 + y: 4140722.8817274449 + theta: 2.3114107270017912 + kappa: -0.012786305343234591 + s: 5.1787369061566864 + dkappa: 0 + ddkappa: 0 + } + v: 6.0780505806482115 + a: 0.694215160831103 + relative_time: 0.90000000000000024 +} +trajectory_point { + path_point { + x: 587499.55399876961 + y: 4140723.1074655647 + theta: 2.307468733550047 + kappa: -0.012893108165584633 + s: 5.4835049593995935 + dkappa: 0 + ddkappa: 0 + } + v: 6.112626260226965 + a: 0.68878071146783448 + relative_time: 0.95000000000000029 +} +trajectory_point { + path_point { + x: 587499.34808383347 + y: 4140723.3344790866 + theta: 2.3035044692739319 + kappa: -0.013000514414931262 + s: 5.7899949266048658 + dkappa: 0 + ddkappa: 0 + } + v: 6.1469256264909191 + a: 0.68316474386000281 + relative_time: 1.0000000000000002 +} +trajectory_point { + path_point { + x: 587499.14215817919 + y: 4140723.5637753913 + theta: 2.2995150195559591 + kappa: -0.013027671257093452 + s: 6.0981927704980157 + dkappa: 0 + ddkappa: 0 + } + v: 6.1809399208709772 + a: 0.6773799517328567 + relative_time: 1.0500000000000003 +} +trajectory_point { + path_point { + x: 587498.93693742133 + y: 4140723.7959758108 + theta: 2.295498413622171 + kappa: -0.012924367163972262 + s: 6.4080840317432495 + dkappa: 0 + ddkappa: 0 + } + v: 6.2146610194843035 + a: 0.67143902881164486 + relative_time: 1.1000000000000003 +} +trajectory_point { + path_point { + x: 587498.73060505732 + y: 4140724.0294339731 + theta: 2.2914600216979997 + kappa: -0.01282050351033881 + s: 6.7196538606777887 + dkappa: 0 + ddkappa: 0 + } + v: 6.2480814331343275 + a: 0.66535466882161631 + relative_time: 1.1500000000000004 +} +trajectory_point { + path_point { + x: 587498.52370424953 + y: 4140724.2646036288 + theta: 2.2874366564375963 + kappa: -0.012682163058970861 + s: 7.0328870490461854 + dkappa: 0 + ddkappa: 0 + } + v: 6.28119430731074 + a: 0.65913956548801966 + relative_time: 1.2000000000000004 +} +trajectory_point { + path_point { + x: 587498.31819799519 + y: 4140724.5031769541 + theta: 2.2835620534887551 + kappa: -0.01238509363626623 + s: 7.3477680617346319 + dkappa: 0 + ddkappa: 0 + } + v: 6.3139934221894913 + a: 0.65280641253610372 + relative_time: 1.2500000000000004 +} +trajectory_point { + path_point { + x: 587498.111626624 + y: 4140724.7429867787 + theta: 2.2796673213588536 + kappa: -0.012086484535015356 + s: 7.6642810685052742 + dkappa: 0 + ddkappa: 0 + } + v: 6.3464731926327982 + a: 0.64636790369111741 + relative_time: 1.3000000000000005 +} +trajectory_point { + path_point { + x: 587497.90406930191 + y: 4140724.9840793619 + theta: 2.2757618471909731 + kappa: -0.011782853574335495 + s: 7.9824099757305254 + dkappa: 0 + ddkappa: 0 + } + v: 6.3786286681891395 + a: 0.63983673267830943 + relative_time: 1.3500000000000005 +} +trajectory_point { + path_point { + x: 587497.69823524565 + y: 4140725.2287396239 + theta: 2.2722022792618053 + kappa: -0.011336762545036901 + s: 8.3021384581273825 + dkappa: 0 + ddkappa: 0 + } + v: 6.4104555330932538 + a: 0.6332255932229286 + relative_time: 1.4000000000000006 +} +trajectory_point { + path_point { + x: 587497.49138205708 + y: 4140725.4746112553 + theta: 2.2686250385635804 + kappa: -0.010888462815455694 + s: 8.6234499904917286 + dkappa: 0 + ddkappa: 0 + } + v: 6.4419501062661437 + a: 0.62654717905022372 + relative_time: 1.4500000000000006 +} +trajectory_point { + path_point { + x: 587497.28352048318 + y: 4140725.7216814831 + theta: 2.2650304024536863 + kappa: -0.010437977676516339 + s: 8.94632787943266 + dkappa: 0 + ddkappa: 0 + } + v: 6.4731093413150749 + a: 0.61981418388544363 + relative_time: 1.5000000000000007 +} +trajectory_point { + path_point { + x: 587497.07705540676 + y: 4140725.971930326 + theta: 2.2618846547998759 + kappa: -0.0098967950195235823 + s: 9.2707552951067917 + dkappa: 0 + ddkappa: 0 + } + v: 6.5039308265335745 + a: 0.61303930145383689 + relative_time: 1.5500000000000007 +} +trajectory_point { + path_point { + x: 587496.8698224586 + y: 4140726.2235340457 + theta: 2.2587644029637626 + kappa: -0.0093453833622909269 + s: 9.5967153029525711 + dkappa: 0 + ddkappa: 0 + } + v: 6.5344127849014324 + a: 0.60623522548065267 + relative_time: 1.6000000000000008 +} +trajectory_point { + path_point { + x: 587496.66162595944 + y: 4140726.4763076226 + theta: 2.2556296669225797 + kappa: -0.0087914078597695414 + s: 9.924190895424589 + dkappa: 0 + ddkappa: 0 + } + v: 6.5645540740847 + a: 0.59941464969113945 + relative_time: 1.6500000000000008 +} +trajectory_point { + path_point { + x: 587496.45436737512 + y: 4140726.731781505 + theta: 2.2529805422612612 + kappa: -0.0081942353950524623 + s: 10.2531650237279 + dkappa: 0 + ddkappa: 0 + } + v: 6.5943541864356945 + a: 0.59259026781054613 + relative_time: 1.7000000000000008 +} +trajectory_point { + path_point { + x: 587496.24647898343 + y: 4140726.9886536985 + theta: 2.2503997315729674 + kappa: -0.0075878452776513483 + s: 10.583620629552327 + dkappa: 0 + ddkappa: 0 + } + v: 6.6238132489929917 + a: 0.58577477356412155 + relative_time: 1.7500000000000009 +} +trajectory_point { + path_point { + x: 587496.0376693171 + y: 4140727.2466642428 + theta: 2.2478074959419869 + kappa: -0.0069787678921421122 + s: 10.915540676806781 + dkappa: 0 + ddkappa: 0 + } + v: 6.65293202348143 + a: 0.57898086067711452 + relative_time: 1.8000000000000009 +} +trajectory_point { + path_point { + x: 587495.82947403658 + y: 4140727.5070253797 + theta: 2.245724895815508 + kappa: -0.0063694738389787281 + s: 11.248908183353572 + dkappa: 0 + ddkappa: 0 + } + v: 6.6817119063121142 + a: 0.57222122287477373 + relative_time: 1.850000000000001 +} +trajectory_point { + path_point { + x: 587495.62066470215 + y: 4140727.7687282818 + theta: 2.243728778150214 + kappa: -0.0057580120393563375 + s: 11.583706252742717 + dkappa: 0 + ddkappa: 0 + } + v: 6.7101549285824067 + a: 0.56550855388234811 + relative_time: 1.900000000000001 +} +trajectory_point { + path_point { + x: 587495.41097360849 + y: 4140728.0315363025 + theta: 2.2417242369532784 + kappa: -0.0051439681615367524 + s: 11.919918105946264 + dkappa: 0 + ddkappa: 0 + } + v: 6.7382637560759351 + a: 0.55885554742508625 + relative_time: 1.9500000000000011 +} +trajectory_point { + path_point { + x: 587495.20156028913 + y: 4140728.2963486444 + theta: 2.2402235871947429 + kappa: -0.00457359084966391 + s: 12.257527113092587 + dkappa: 0 + ddkappa: 0 + } + v: 6.7660416892625888 + a: 0.55227489722823808 + relative_time: 2.0000000000000009 +} +trajectory_point { + path_point { + x: 587494.99146581092 + y: 4140728.5623828713 + theta: 2.2387948694600528 + kappa: -0.0040079257986818367 + s: 12.596516640837056 + dkappa: 0 + ddkappa: 0 + } + v: 6.7934814120509754 + a: 0.54531390392096224 + relative_time: 2.0500000000000007 +} +trajectory_point { + path_point { + x: 587494.780526414 + y: 4140728.8294869857 + theta: 2.2373604082919734 + kappa: -0.0034399858616587309 + s: 12.936869453344094 + dkappa: 0 + ddkappa: 0 + } + v: 6.8205730798760262 + a: 0.53835292389418765 + relative_time: 2.1000000000000005 +} +trajectory_point { + path_point { + x: 587494.569613589 + y: 4140729.0983246388 + theta: 2.2364049611042582 + kappa: -0.0029668634348183013 + s: 13.278568148445133 + dkappa: 0 + ddkappa: 0 + } + v: 6.8473167271816759 + a: 0.531393308344353 + relative_time: 2.1500000000000004 +} +trajectory_point { + path_point { + x: 587494.35794892488 + y: 4140729.3682611417 + theta: 2.2354841838957289 + kappa: -0.00249958868467155 + s: 13.6215953273828 + dkappa: 0 + ddkappa: 0 + } + v: 6.8737124559716838 + a: 0.52443640846789719 + relative_time: 2.2 +} +trajectory_point { + path_point { + x: 587494.14548590558 + y: 4140729.6392377103 + theta: 2.2345674509715656 + kappa: -0.002033523771492329 + s: 13.965933598188899 + dkappa: 0 + ddkappa: 0 + } + v: 6.89976043580963 + a: 0.51748357546125845 + relative_time: 2.25 +} +trajectory_point { + path_point { + x: 587493.932769065 + y: 4140729.9116583634 + theta: 2.2340337811722448 + kappa: -0.0017188115874754851 + s: 14.311565579062416 + dkappa: 0 + ddkappa: 0 + } + v: 6.9254609038189141 + a: 0.5105361605208758 + relative_time: 2.3 +} +trajectory_point { + path_point { + x: 587493.71926670859 + y: 4140730.1850850047 + theta: 2.2334981405202381 + kappa: -0.0014029372415601551 + s: 14.658473901747497 + dkappa: 0 + ddkappa: 0 + } + v: 6.9508141646827619 + a: 0.50359551484318765 + relative_time: 2.3499999999999996 +} +trajectory_point { + path_point { + x: 587493.50503672031 + y: 4140730.4595407723 + theta: 2.2329918179515746 + kappa: -0.0011156593738758679 + s: 15.006641214911449 + dkappa: 0 + ddkappa: 0 + } + v: 6.9758205906442186 + a: 0.49666298962463273 + relative_time: 2.3999999999999995 +} +trajectory_point { + path_point { + x: 587493.29032600566 + y: 4140730.7351962449 + theta: 2.23267129061424 + kappa: -0.0010058423647488703 + s: 15.356050187522724 + dkappa: 0 + ddkappa: 0 + } + v: 7.000480621506151 + a: 0.48973993606164978 + relative_time: 2.4499999999999993 +} +trajectory_point { + path_point { + x: 587493.07486293046 + y: 4140731.0118176313 + theta: 2.2323496401092005 + kappa: -0.00089564054957588877 + s: 15.706683512228913 + dkappa: 0 + ddkappa: 0 + } + v: 7.02479476463125 + a: 0.48282770535067743 + relative_time: 2.4999999999999991 +} +trajectory_point { + path_point { + x: 587492.85872900626 + y: 4140731.28944647 + theta: 2.2320228379260807 + kappa: -0.00085577337512529866 + s: 16.058523908734742 + dkappa: 0 + ddkappa: 0 + } + v: 7.0487635949420264 + a: 0.47592764868815418 + relative_time: 2.5499999999999989 +} +trajectory_point { + path_point { + x: 587492.64203303 + y: 4140731.5681455713 + theta: 2.2316852977035 + kappa: -0.00098419548750014376 + s: 16.411554127180047 + dkappa: 0 + ddkappa: 0 + } + v: 7.072387754920813 + a: 0.46904111727051889 + relative_time: 2.5999999999999988 +} +trajectory_point { + path_point { + x: 587492.42461728817 + y: 4140731.8477703845 + theta: 2.2313466363167653 + kappa: -0.0011130441597495325 + s: 16.76575695151779 + dkappa: 0 + ddkappa: 0 + } + v: 7.095667954609767 + a: 0.46216946229421008 + relative_time: 2.6499999999999986 +} +trajectory_point { + path_point { + x: 587492.20664983091 + y: 4140732.1284296629 + theta: 2.23093390789376 + kappa: -0.001245412706810329 + s: 17.121115202892025 + dkappa: 0 + ddkappa: 0 + } + v: 7.1186049716108633 + a: 0.45531403495566652 + relative_time: 2.6999999999999984 +} +trajectory_point { + path_point { + x: 587491.98815768131 + y: 4140732.410122694 + theta: 2.230439483743873 + kappa: -0.0013816196625850263 + s: 17.477611743015906 + dkappa: 0 + ddkappa: 0 + } + v: 7.1411996510859028 + a: 0.44847618645132675 + relative_time: 2.7499999999999982 +} +trajectory_point { + path_point { + x: 587491.76897836593 + y: 4140732.6927016596 + theta: 2.2299435046310161 + kappa: -0.0015182549941227777 + s: 17.835229477549671 + dkappa: 0 + ddkappa: 0 + } + v: 7.1634529057565066 + a: 0.4416572679776295 + relative_time: 2.799999999999998 +} +trajectory_point { + path_point { + x: 587491.5494199 + y: 4140732.9763835277 + theta: 2.2293755745720687 + kappa: -0.0016099634576657996 + s: 18.193951359478639 + dkappa: 0 + ddkappa: 0 + } + v: 7.1853657159041173 + a: 0.43485863073101333 + relative_time: 2.8499999999999979 +} +trajectory_point { + path_point { + x: 587491.32933514367 + y: 4140733.2610328565 + theta: 2.2287730028705659 + kappa: -0.0016807499613514761 + s: 18.553760392491185 + dkappa: 0 + ddkappa: 0 + } + v: 7.20693912937 + a: 0.42808162590791704 + relative_time: 2.8999999999999977 +} +trajectory_point { + path_point { + x: 587491.10859577148 + y: 4140733.5465288404 + theta: 2.2281686390213205 + kappa: -0.0017517470110100678 + s: 18.91463963435676 + dkappa: 0 + ddkappa: 0 + } + v: 7.2281742615552416 + a: 0.42132760470477915 + relative_time: 2.9499999999999975 +} +trajectory_point { + path_point { + x: 587490.88766672718 + y: 4140733.8332089894 + theta: 2.227525392788321 + kappa: -0.0017688881158729971 + s: 19.276572200303846 + dkappa: 0 + ddkappa: 0 + } + v: 7.2490722954207509 + a: 0.41459791831803838 + relative_time: 2.9999999999999973 +} +trajectory_point { + path_point { + x: 587490.66614947352 + y: 4140734.120744464 + theta: 2.2268766720157736 + kappa: -0.0017807880371272212 + s: 19.63954126639798 + dkappa: 0 + ddkappa: 0 + } + v: 7.2696344814872589 + a: 0.40789391794413343 + relative_time: 3.0499999999999972 +} +trajectory_point { + path_point { + x: 587490.44409310468 + y: 4140734.4091517515 + theta: 2.2262285877114576 + kappa: -0.0017841072074088111 + s: 20.00353007291973 + dkappa: 0 + ddkappa: 0 + } + v: 7.2898621378353186 + a: 0.40121695477950292 + relative_time: 3.099999999999997 +} +trajectory_point { + path_point { + x: 587490.2218548276 + y: 4140734.6986844824 + theta: 2.2255914214570045 + kappa: -0.001742926736235531 + s: 20.368521927742677 + dkappa: 0 + ddkappa: 0 + } + v: 7.3097566501053048 + a: 0.39456838002058542 + relative_time: 3.1499999999999968 +} +trajectory_point { + path_point { + x: 587489.99901592918 + y: 4140734.9889997044 + theta: 2.2249525330910109 + kappa: -0.001701634970702923 + s: 20.734500209711427 + dkappa: 0 + ddkappa: 0 + } + v: 7.3293194714974135 + a: 0.38794954486381972 + relative_time: 3.1999999999999966 +} +trajectory_point { + path_point { + x: 587489.77579705743 + y: 4140735.2802456445 + theta: 2.224339760347986 + kappa: -0.0016418657977830618 + s: 21.101448372019583 + dkappa: 0 + ddkappa: 0 + } + v: 7.3485521227716628 + a: 0.38136180050564433 + relative_time: 3.2499999999999964 +} +trajectory_point { + path_point { + x: 587489.55227274681 + y: 4140735.5724586667 + theta: 2.2237616503253719 + kappa: -0.0015579942496839441 + s: 21.469349945587755 + dkappa: 0 + ddkappa: 0 + } + v: 7.3674561922478947 + a: 0.374806498142498 + relative_time: 3.2999999999999963 +} +trajectory_point { + path_point { + x: 587489.32817913312 + y: 4140735.8654159382 + theta: 2.2231820679216607 + kappa: -0.0014739090857722981 + s: 21.838188542441529 + dkappa: 0 + ddkappa: 0 + } + v: 7.38603333580577 + a: 0.3682849889708194 + relative_time: 3.3499999999999961 +} +trajectory_point { + path_point { + x: 587489.10383411578 + y: 4140736.159339753 + theta: 2.2226708113599734 + kappa: -0.0013739706339110341 + s: 22.207947859089479 + dkappa: 0 + ddkappa: 0 + } + v: 7.4042852768847744 + a: 0.36179862418704722 + relative_time: 3.3999999999999959 +} +trajectory_point { + path_point { + x: 587488.87905681308 + y: 4140736.4540715497 + theta: 2.222184697293049 + kappa: -0.0012678701944512007 + s: 22.578611679901147 + dkappa: 0 + ddkappa: 0 + } + v: 7.4222138064842138 + a: 0.35534875498762 + relative_time: 3.4499999999999957 +} +trajectory_point { + path_point { + x: 587488.65375286934 + y: 4140736.7495189467 + theta: 2.22170141203442 + kappa: -0.0011610366882716294 + s: 22.950163880485029 + dkappa: 0 + ddkappa: 0 + } + v: 7.4398207831632162 + a: 0.34893673256897639 + relative_time: 3.4999999999999956 +} +trajectory_point { + path_point { + x: 587488.42825117917 + y: 4140737.0459123235 + theta: 2.2213264233173313 + kappa: -0.0010408338583668432 + s: 23.322588431066574 + dkappa: 0 + ddkappa: 0 + } + v: 7.4571081330407321 + a: 0.34256390812755511 + relative_time: 3.5499999999999954 +} +trajectory_point { + path_point { + x: 587488.202230931 + y: 4140737.3429872785 + theta: 2.2209505722534351 + kappa: -0.00092035461302909869 + s: 23.695869399866183 + dkappa: 0 + ddkappa: 0 + } + v: 7.4740778497955329 + a: 0.33623163285979496 + relative_time: 3.5999999999999952 +} +trajectory_point { + path_point { + x: 587487.97579221509 + y: 4140737.6408000118 + theta: 2.220618864904139 + kappa: -0.00079743957902976082 + s: 24.069990956477191 + dkappa: 0 + ddkappa: 0 + } + v: 7.4907319946662128 + a: 0.32994125796213425 + relative_time: 3.649999999999995 +} +trajectory_point { + path_point { + x: 587487.74901420553 + y: 4140737.9393909555 + theta: 2.2203659410620964 + kappa: -0.00067042806098987508 + s: 24.444937375243839 + dkappa: 0 + ddkappa: 0 + } + v: 7.5070726964511882 + a: 0.32369413463101193 + relative_time: 3.6999999999999948 +} +trajectory_point { + path_point { + x: 587487.52174674231 + y: 4140738.2386263455 + theta: 2.220112471337051 + kappa: -0.00054314241474492226 + s: 24.820693038639313 + dkappa: 0 + ddkappa: 0 + } + v: 7.5231021515086969 + a: 0.31749161406286652 + relative_time: 3.7499999999999947 +} +trajectory_point { + path_point { + x: 587487.29410589847 + y: 4140738.538574826 + theta: 2.2199478786404354 + kappa: -0.00041654006935643788 + s: 25.197242440643684 + dkappa: 0 + ddkappa: 0 + } + v: 7.5388226237567988 + a: 0.31133504745413676 + relative_time: 3.7999999999999945 +} +trajectory_point { + path_point { + x: 587487.06603947328 + y: 4140738.8391774474 + theta: 2.2198206268024041 + kappa: -0.00029007730596250514 + s: 25.574570190121932 + dkappa: 0 + ddkappa: 0 + } + v: 7.554236444673375 + a: 0.30522578600126116 + relative_time: 3.8499999999999943 +} +trajectory_point { + path_point { + x: 587486.8375149552 + y: 4140739.1403903551 + theta: 2.2197005462085637 + kappa: -0.00016392560675162097 + s: 25.952661014201922 + dkappa: 0 + ddkappa: 0 + } + v: 7.569346013296129 + a: 0.29916518090067856 + relative_time: 3.8999999999999941 +} +trajectory_point { + path_point { + x: 587486.60858693672 + y: 4140739.4422359429 + theta: 2.2196955236174722 + kappa: -4.6321569394529972e-05 + s: 26.331499761652402 + dkappa: 0 + ddkappa: 0 + } + v: 7.584153796222588 + a: 0.29315458334882749 + relative_time: 3.949999999999994 +} +trajectory_point { + path_point { + x: 587486.37921603676 + y: 4140739.7446654779 + theta: 2.2196904913097333 + kappa: 7.1509983403740258e-05 + s: 26.711071406261 + dkappa: 0 + ddkappa: 0 + } + v: 7.5986623276100982 + a: 0.28719534454214662 + relative_time: 3.9999999999999938 +} +trajectory_point { + path_point { + x: 587486.14939390623 + y: 4140740.0476539116 + theta: 2.2197328730999253 + kappa: 0.00018219981354625117 + s: 27.091361037019521 + dkappa: 0 + ddkappa: 0 + } + v: 7.61287340760424 + a: 0.28125593870943966 + relative_time: 4.0499999999999936 +} +trajectory_point { + path_point { + x: 587485.91912391759 + y: 4140740.3511851807 + theta: 2.2198379480522421 + kappa: 0.00028337059717969227 + s: 27.472353817787639 + dkappa: 0 + ddkappa: 0 + } + v: 7.6267887345068663 + a: 0.27536531442611883 + relative_time: 4.0999999999999934 +} +trajectory_point { + path_point { + x: 587485.68843784952 + y: 4140740.6552649071 + theta: 2.2199432128663323 + kappa: 0.00038472418834949992 + s: 27.854035022121575 + dkappa: 0 + ddkappa: 0 + } + v: 7.6404107614271251 + a: 0.26952403295922966 + relative_time: 4.1499999999999932 +} +trajectory_point { + path_point { + x: 587485.45724554418 + y: 4140740.9598063314 + theta: 2.2201213202386221 + kappa: 0.00046557101474264105 + s: 28.236390046934595 + dkappa: 0 + ddkappa: 0 + } + v: 7.6537419695375135 + a: 0.26373265557581693 + relative_time: 4.1999999999999931 +} +trajectory_point { + path_point { + x: 587485.22563202446 + y: 4140741.2648558076 + theta: 2.2203162803236793 + kappa: 0.0005418466562899278 + s: 28.619404413900167 + dkappa: 0 + ddkappa: 0 + } + v: 7.6667848680738819 + a: 0.25799174354292531 + relative_time: 4.2499999999999929 +} +trajectory_point { + path_point { + x: 587484.99359045806 + y: 4140741.570390102 + theta: 2.2205242784926797 + kappa: 0.00061123318687404053 + s: 29.003063770855142 + dkappa: 0 + ddkappa: 0 + } + v: 7.6795419943354322 + a: 0.25230185812759948 + relative_time: 4.2999999999999927 +} +trajectory_point { + path_point { + x: 587484.76102433342 + y: 4140741.8763180273 + theta: 2.2207804521867174 + kappa: 0.00065432305735881925 + s: 29.387353893202913 + dkappa: 0 + ddkappa: 0 + } + v: 7.6920159136847186 + a: 0.24666356059688424 + relative_time: 4.3499999999999925 +} +trajectory_point { + path_point { + x: 587484.52808501036 + y: 4140742.182736876 + theta: 2.221037036965237 + kappa: 0.000697482074092224 + s: 29.772260685316581 + dkappa: 0 + ddkappa: 0 + } + v: 7.7042092195476481 + a: 0.24107741221782425 + relative_time: 4.3999999999999924 +} +trajectory_point { + path_point { + x: 587484.294647646 + y: 4140742.4895341243 + theta: 2.2213079748815812 + kappa: 0.00071489982430178423 + s: 30.157770181942134 + dkappa: 0 + ddkappa: 0 + } + v: 7.7161245334134794 + a: 0.23554397425746426 + relative_time: 4.4499999999999922 +} +trajectory_point { + path_point { + x: 587484.06077077251 + y: 4140742.7967369193 + theta: 2.2215880066858662 + kappa: 0.00071628692022654579 + s: 30.543868549601594 + dkappa: 0 + ddkappa: 0 + } + v: 7.7277645048348234 + a: 0.23006380798284898 + relative_time: 4.499999999999992 +} +trajectory_point { + path_point { + x: 587483.82653820212 + y: 4140743.1043918007 + theta: 2.2218676959540153 + kappa: 0.0007159922747103024 + s: 30.930542087996212 + dkappa: 0 + ddkappa: 0 + } + v: 7.7391318114276437 + a: 0.22463747466102307 + relative_time: 4.5499999999999918 +} +trajectory_point { + path_point { + x: 587483.59175561555 + y: 4140743.4123336673 + theta: 2.222125927539957 + kappa: 0.00066723686259874729 + s: 31.317777231409611 + dkappa: 0 + ddkappa: 0 + } + v: 7.7502291588712566 + a: 0.21926553555903133 + relative_time: 4.5999999999999917 +} +trajectory_point { + path_point { + x: 587483.35664066742 + y: 4140743.7207114603 + theta: 2.2223845246907779 + kappa: 0.00061841243166870852 + s: 31.705560550110967 + dkappa: 0 + ddkappa: 0 + } + v: 7.7610592809083281 + a: 0.2139485519439184 + relative_time: 4.6499999999999915 +} +trajectory_point { + path_point { + x: 587483.12111932447 + y: 4140744.0294519835 + theta: 2.2226077593486235 + kappa: 0.00054255787369446675 + s: 32.093878751758176 + dkappa: 0 + ddkappa: 0 + } + v: 7.77162493934488 + a: 0.20868708508272904 + relative_time: 4.6999999999999913 +} +trajectory_point { + path_point { + x: 587482.88518519781 + y: 4140744.3385338169 + theta: 2.2227893729605679 + kappa: 0.000434957151964121 + s: 32.482718682801007 + dkappa: 0 + ddkappa: 0 + } + v: 7.781928924050284 + a: 0.20348169624250795 + relative_time: 4.7499999999999911 +} +trajectory_point { + path_point { + x: 587482.64894240047 + y: 4140744.6480200198 + theta: 2.2229712241739561 + kappa: 0.0003272156571064811 + s: 32.8720673298843 + dkappa: 0 + ddkappa: 0 + } + v: 7.7919740529572641 + a: 0.19833294669029988 + relative_time: 4.7999999999999909 +} +trajectory_point { + path_point { + x: 587482.41231429984 + y: 4140744.957835881 + theta: 2.2230326056735645 + kappa: 0.00018123854165917139 + s: 33.261911821251104 + dkappa: 0 + ddkappa: 0 + } + v: 7.8017631720618983 + a: 0.19324139769314949 + relative_time: 4.8499999999999908 +} +trajectory_point { + path_point { + x: 587482.1753831309 + y: 4140745.2680281796 + theta: 2.2230800174506644 + kappa: 3.0647081498287529e-05 + s: 33.652239428145847 + dkappa: 0 + ddkappa: 0 + } + v: 7.8112991554236144 + a: 0.18820761051810153 + relative_time: 4.8999999999999906 +} +trajectory_point { + path_point { + x: 587481.93817288568 + y: 4140745.5785994017 + theta: 2.2230810516514574 + kappa: -0.00010910277572258298 + s: 34.043037566217535 + dkappa: 0 + ddkappa: 0 + } + v: 7.8205849051651937 + a: 0.1832321464322007 + relative_time: 4.94999999999999 +} +trajectory_point { + path_point { + x: 587481.700697299 + y: 4140745.8895443869 + theta: 2.2229917893045914 + kappa: -0.0002275806681481552 + s: 34.434293796922873 + dkappa: 0 + ddkappa: 0 + } + v: 7.8296233514727707 + a: 0.17831556670249177 + relative_time: 4.99999999999999 +} +trajectory_point { + path_point { + x: 587481.46295113012 + y: 4140746.2008436657 + theta: 2.2229024252513985 + kappa: -0.000346193555481079 + s: 34.825995828929479 + dkappa: 0 + ddkappa: 0 + } + v: 7.8384174525958308 + a: 0.17345843259601934 + relative_time: 5.04999999999999 +} +trajectory_point { + path_point { + x: 587481.22503079078 + y: 4140746.5125555657 + theta: 2.2227340639522919 + kappa: -0.00043552309272671763 + s: 35.218131519519005 + dkappa: 0 + ddkappa: 0 + } + v: 7.846970194847211 + a: 0.16866130537982826 + relative_time: 5.09999999999999 +} +trajectory_point { + path_point { + x: 587480.98687810323 + y: 4140746.824620584 + theta: 2.2225447082899765 + kappa: -0.00051718911802216489 + s: 35.610688875990348 + dkappa: 0 + ddkappa: 0 + } + v: 7.8552845926031019 + a: 0.16392474632096316 + relative_time: 5.14999999999999 +} +trajectory_point { + path_point { + x: 587480.74852138967 + y: 4140747.1370454123 + theta: 2.2223392413418939 + kappa: -0.00058997617703436046 + s: 36.003656057062791 + dkappa: 0 + ddkappa: 0 + } + v: 7.8633636883030462 + a: 0.15924931668646877 + relative_time: 5.1999999999999895 +} +trajectory_point { + path_point { + x: 587480.510056989 + y: 4140747.4498888273 + theta: 2.2220858259231862 + kappa: -0.00063594460732667782 + s: 36.397021374279177 + dkappa: 0 + ddkappa: 0 + } + v: 7.8712105524499387 + a: 0.15463557774338982 + relative_time: 5.2499999999999893 +} +trajectory_point { + path_point { + x: 587480.2713582241 + y: 4140747.7630397072 + theta: 2.22183216144563 + kappa: -0.00068195821568206875 + s: 36.790773293409075 + dkappa: 0 + ddkappa: 0 + } + v: 7.8788282836100265 + a: 0.15008409075877102 + relative_time: 5.2999999999999892 +} +trajectory_point { + path_point { + x: 587480.03258558654 + y: 4140748.0766059952 + theta: 2.2215585635942889 + kappa: -0.00070114808324715523 + s: 37.184900435851965 + dkappa: 0 + ddkappa: 0 + } + v: 7.8862200084129075 + a: 0.14559541699965706 + relative_time: 5.349999999999989 +} +trajectory_point { + path_point { + x: 587479.79365355312 + y: 4140748.3905084422 + theta: 2.2212768762802861 + kappa: -0.00070966308457505521 + s: 37.579391580040365 + dkappa: 0 + ddkappa: 0 + } + v: 7.8933888815515347 + a: 0.14117011773309271 + relative_time: 5.3999999999999888 +} +trajectory_point { + path_point { + x: 587479.554549325 + y: 4140748.704723346 + theta: 2.2209967064846472 + kappa: -0.00071174197319559128 + s: 37.974235662843057 + dkappa: 0 + ddkappa: 0 + } + v: 7.90033808578221 + a: 0.13680875422612265 + relative_time: 5.4499999999999886 +} +trajectory_point { + path_point { + x: 587479.31541903643 + y: 4140749.0193481594 + theta: 2.2207240013765857 + kappa: -0.0006857560312239152 + s: 38.369421780968196 + dkappa: 0 + ddkappa: 0 + } + v: 7.9070708319245906 + a: 0.13251188774579162 + relative_time: 5.4999999999999885 +} +trajectory_point { + path_point { + x: 587479.0760882796 + y: 4140749.334236729 + theta: 2.2204510676507403 + kappa: -0.00065974830466169489 + s: 38.7649391923665 + dkappa: 0 + ddkappa: 0 + } + v: 7.9135903588616845 + a: 0.12828007955914428 + relative_time: 5.5499999999999883 +} +trajectory_point { + path_point { + x: 587478.83669822034 + y: 4140749.6494829925 + theta: 2.2202040584255265 + kappa: -0.00061684868767362109 + s: 39.160777317634448 + dkappa: 0 + ddkappa: 0 + } + v: 7.9198999335398508 + a: 0.12411389093322542 + relative_time: 5.5999999999999881 +} +trajectory_point { + path_point { + x: 587478.59718881035 + y: 4140749.9650282608 + theta: 2.2199701080544756 + kappa: -0.00056536415380709147 + s: 39.5569257414174 + dkappa: 0 + ddkappa: 0 + } + v: 7.9260028509688025 + a: 0.12001388313507969 + relative_time: 5.6499999999999879 +} +trajectory_point { + path_point { + x: 587478.35752177064 + y: 4140750.2808305663 + theta: 2.2197448011211867 + kappa: -0.0005113586114478939 + s: 39.9533742138128 + dkappa: 0 + ddkappa: 0 + } + v: 7.9319024342216053 + a: 0.11598061743175184 + relative_time: 5.6999999999999877 +} +trajectory_point { + path_point { + x: 587478.11781886686 + y: 4140750.5969696268 + theta: 2.2195710518941878 + kappa: -0.00044275950773621845 + s: 40.350112651773308 + dkappa: 0 + ddkappa: 0 + } + v: 7.9376020344346756 + a: 0.11201465509028657 + relative_time: 5.7499999999999876 +} +trajectory_point { + path_point { + x: 587477.87794676074 + y: 4140750.9133318458 + theta: 2.219397180019457 + kappa: -0.0003741119811080765 + s: 40.747131140510007 + dkappa: 0 + ddkappa: 0 + } + v: 7.9431050308077822 + a: 0.10811655737772866 + relative_time: 5.7999999999999874 +} +trajectory_point { + path_point { + x: 587477.63798065973 + y: 4140751.229961996 + theta: 2.219269929497969 + kappa: -0.000299505723423113 + s: 41.144419934895545 + dkappa: 0 + ddkappa: 0 + } + v: 7.9484148306040474 + a: 0.10428688556112273 + relative_time: 5.8499999999999872 +} +trajectory_point { + path_point { + x: 587477.39789737877 + y: 4140751.5468304921 + theta: 2.2191697715482381 + kappa: -0.0002214130672877777 + s: 41.541969460867314 + dkappa: 0 + ddkappa: 0 + } + v: 7.9535348691499443 + a: 0.10052620090751355 + relative_time: 5.899999999999987 +} +trajectory_point { + path_point { + x: 587477.15766827343 + y: 4140751.8639038238 + theta: 2.2190793612202908 + kappa: -0.00014298277046440169 + s: 41.939770316830604 + dkappa: 0 + ddkappa: 0 + } + v: 7.9584686098352995 + a: 0.096835064683945815 + relative_time: 5.9499999999999869 +} +trajectory_point { + path_point { + x: 587476.91733531491 + y: 4140752.1812022096 + theta: 2.2190586601480327 + kappa: -6.2454886882500093e-05 + s: 42.337813275061791 + dkappa: 0 + ddkappa: 0 + } + v: 7.9632195441132909 + a: 0.093214038157464263 + relative_time: 5.9999999999999867 +} +trajectory_point { + path_point { + x: 587476.67686166149 + y: 4140752.4986863472 + theta: 2.2190379469570183 + kappa: 1.81201390675684e-05 + s: 42.736089254289539 + dkappa: 0 + ddkappa: 0 + } + v: 7.9677894887134579 + a: 0.089597661983998073 + relative_time: 6.0499999999999865 +} +trajectory_point { + path_point { + x: 587476.43624321907 + y: 4140752.8163418327 + theta: 2.2190660980889128 + kappa: 9.6229539398698291e-05 + s: 43.134589244928591 + dkappa: 0 + ddkappa: 0 + } + v: 7.9721806908195951 + a: 0.086064116284854608 + relative_time: 6.0999999999999863 +} +trajectory_point { + path_point { + x: 587476.1954889578 + y: 4140753.1341643785 + theta: 2.2191244736216751 + kappa: 0.00017282915442125234 + s: 43.533304412837069 + dkappa: 0 + ddkappa: 0 + } + v: 7.9763972586387135 + a: 0.08261206839189697 + relative_time: 6.1499999999999861 +} +trajectory_point { + path_point { + x: 587475.95460122533 + y: 4140753.4521449343 + theta: 2.2191912395876829 + kappa: 0.00024833687923698843 + s: 43.932226127617589 + dkappa: 0 + ddkappa: 0 + } + v: 7.9804432337444187 + a: 0.0792401856369885 + relative_time: 6.199999999999986 +} +trajectory_point { + path_point { + x: 587475.71352733916 + y: 4140753.7702330062 + theta: 2.219321575246 + kappa: 0.00031528228899388466 + s: 44.331345959285635 + dkappa: 0 + ddkappa: 0 + } + v: 7.9843225910769107 + a: 0.07594713535199249 + relative_time: 6.2499999999999858 +} +trajectory_point { + path_point { + x: 587475.4723387605 + y: 4140754.088472411 + theta: 2.2194519729129869 + kappa: 0.00038225954848642021 + s: 44.730655674937857 + dkappa: 0 + ddkappa: 0 + } + v: 7.9880392389429806 + a: 0.072731584868772278 + relative_time: 6.2999999999999856 +} +trajectory_point { + path_point { + x: 587475.23096055887 + y: 4140754.4067962468 + theta: 2.2196194831700327 + kappa: 0.00044006966051000489 + s: 45.1301472354204 + dkappa: 0 + ddkappa: 0 + } + v: 7.991597019016015 + a: 0.069592201519191182 + relative_time: 6.3499999999999854 +} +trajectory_point { + path_point { + x: 587474.98942782567 + y: 4140754.7252212707 + theta: 2.2198100084542913 + kappa: 0.000492210085887524 + s: 45.529812791997259 + dkappa: 0 + ddkappa: 0 + } + v: 7.9949997063359914 + a: 0.066527652635112525 + relative_time: 6.3999999999999853 +} +trajectory_point { + path_point { + x: 587474.74777401262 + y: 4140755.0437632161 + theta: 2.2200058106708425 + kappa: 0.00054203805374033944 + s: 45.929644683018573 + dkappa: 0 + ddkappa: 0 + } + v: 7.9982510093094827 + a: 0.063536605548399627 + relative_time: 6.4499999999999851 +} +trajectory_point { + path_point { + x: 587474.50587592332 + y: 4140755.3623191961 + theta: 2.2202391769102663 + kappa: 0.00057505150803189371 + s: 46.329635430589 + dkappa: 0 + ddkappa: 0 + } + v: 8.0013545697096529 + a: 0.060617727590915813 + relative_time: 6.4999999999999849 +} +trajectory_point { + path_point { + x: 587474.26388617721 + y: 4140755.6809958797 + theta: 2.2204726315768464 + kappa: 0.00060807747133441144 + s: 46.729777737235992 + dkappa: 0 + ddkappa: 0 + } + v: 8.0043139626762585 + a: 0.057769686094524396 + relative_time: 6.5499999999999847 +} +trajectory_point { + path_point { + x: 587474.02168537164 + y: 4140755.9996935949 + theta: 2.2207199050413737 + kappa: 0.00062666143959090787 + s: 47.130064482578184 + dkappa: 0 + ddkappa: 0 + } + v: 8.0071326967156544 + a: 0.0549911483910887 + relative_time: 6.5999999999999845 +} +trajectory_point { + path_point { + x: 587473.77932821272 + y: 4140756.3184451871 + theta: 2.2209753860116672 + kappa: 0.000636703796516073 + s: 47.53048871999367 + dkappa: 0 + ddkappa: 0 + } + v: 8.0098142137007819 + a: 0.052280781812472053 + relative_time: 6.6499999999999844 +} +trajectory_point { + path_point { + x: 587473.53686417907 + y: 4140756.637279714 + theta: 2.2212305854730157 + kappa: 0.00064320686561163728 + s: 47.931043673288364 + dkappa: 0 + ddkappa: 0 + } + v: 8.01236188887118 + a: 0.049637253690537772 + relative_time: 6.6999999999999842 +} +trajectory_point { + path_point { + x: 587473.29415049672 + y: 4140756.956080243 + theta: 2.2214835698595095 + kappa: 0.00062743942004791619 + s: 48.33172273336433 + dkappa: 0 + ddkappa: 0 + } + v: 8.0147790308329778 + a: 0.047059231357149178 + relative_time: 6.749999999999984 +} +trajectory_point { + path_point { + x: 587473.05136554025 + y: 4140757.27497439 + theta: 2.2217366285396412 + kappa: 0.00061166734429345668 + s: 48.732519454888084 + dkappa: 0 + ddkappa: 0 + } + v: 8.0170688815589 + a: 0.044545382144169587 + relative_time: 6.7999999999999838 +} +trajectory_point { + path_point { + x: 587472.80838846811 + y: 4140757.593862195 + theta: 2.2219705237875393 + kappa: 0.000577640455376818 + s: 49.133427552958956 + dkappa: 0 + ddkappa: 0 + } + v: 8.0192346163882657 + a: 0.042094373383462322 + relative_time: 6.8499999999999837 +} +trajectory_point { + path_point { + x: 587472.56527989265 + y: 4140757.91278213 + theta: 2.2221940316734656 + kappa: 0.00053369004415570792 + s: 49.534440899777415 + dkappa: 0 + ddkappa: 0 + } + v: 8.0212793440269827 + a: 0.039704872406890718 + relative_time: 6.8999999999999835 +} +trajectory_point { + path_point { + x: 587472.322086056 + y: 4140758.2317618909 + theta: 2.2224093063457673 + kappa: 0.00048826974099558683 + s: 49.935553521313366 + dkappa: 0 + ddkappa: 0 + } + v: 8.0232061065475548 + a: 0.037375546546318084 + relative_time: 6.9499999999999833 +} +trajectory_point { + path_point { + x: 587472.07870434341 + y: 4140758.5507158916 + theta: 2.2225812611708298 + kappa: 0.00043520453687027449 + s: 50.336759593974534 + dkappa: 0 + ddkappa: 0 + } + v: 8.025017879389079 + a: 0.035105063133607735 + relative_time: 6.9999999999999831 +} +trajectory_point { + path_point { + x: 587471.83526938455 + y: 4140758.8697396722 + theta: 2.2227532536164847 + kappa: 0.000382127723301699 + s: 50.738053441274737 + dkappa: 0 + ddkappa: 0 + } + v: 8.0267175713572438 + a: 0.032892089500623008 + relative_time: 7.0499999999999829 +} +trajectory_point { + path_point { + x: 587471.5917050516 + y: 4140759.1887681596 + theta: 2.2228935021794336 + kappa: 0.00033727838983133956 + s: 51.139429530502255 + dkappa: 0 + ddkappa: 0 + } + v: 8.0283080246243337 + a: 0.030735292979227211 + relative_time: 7.0999999999999828 +} +trajectory_point { + path_point { + x: 587471.34805570147 + y: 4140759.5078284307 + theta: 2.2230184313473886 + kappa: 0.00029639880049972935 + s: 51.540882469388151 + dkappa: 0 + ddkappa: 0 + } + v: 8.0297920147292245 + a: 0.02863334090128368 + relative_time: 7.1499999999999826 +} +trajectory_point { + path_point { + x: 587471.104346979 + y: 4140759.8269334417 + theta: 2.2231369977914062 + kappa: 0.00025823334523510257 + s: 51.942407002774587 + dkappa: 0 + ddkappa: 0 + } + v: 8.0311722505773844 + a: 0.026584900598655717 + relative_time: 7.1999999999999824 +} +trajectory_point { + path_point { + x: 587470.86052982183 + y: 4140760.1460392708 + theta: 2.22322827666329 + kappa: 0.00023170048470422537 + s: 52.343998009283162 + dkappa: 0 + ddkappa: 0 + } + v: 8.0324513744408765 + a: 0.024588639403206672 + relative_time: 7.2499999999999822 +} +trajectory_point { + path_point { + x: 587470.61667533743 + y: 4140760.4651939543 + theta: 2.2233195695097319 + kappa: 0.00020516356208434203 + s: 52.745650497983249 + dkappa: 0 + ddkappa: 0 + } + v: 8.0336319619583563 + a: 0.022643224646799839 + relative_time: 7.2999999999999821 +} +trajectory_point { + path_point { + x: 587470.37274132262 + y: 4140760.7843591184 + theta: 2.2233960119571448 + kappa: 0.00018521567826150742 + s: 53.147359605060331 + dkappa: 0 + ddkappa: 0 + } + v: 8.03471652213507 + a: 0.020747323661298528 + relative_time: 7.3499999999999819 +} +trajectory_point { + path_point { + x: 587470.12875697331 + y: 4140761.1035511084 + theta: 2.2234662657036313 + kappa: 0.00016801466941608319 + s: 53.549120590484293 + dkappa: 0 + ddkappa: 0 + } + v: 8.0357074973428642 + a: 0.0188996037785661 + relative_time: 7.3999999999999817 +} +trajectory_point { + path_point { + x: 587469.8847330003 + y: 4140761.4227722939 + theta: 2.2235331821252378 + kappa: 0.00015163564612899277 + s: 53.950928834677796 + dkappa: 0 + ddkappa: 0 + } + v: 8.0366072633201711 + a: 0.017098732330465855 + relative_time: 7.4499999999999815 +} +trajectory_point { + path_point { + x: 587469.64064493985 + y: 4140761.7419983032 + theta: 2.2235884308680216 + kappa: 0.00013813034973372777 + s: 54.352779835184563 + dkappa: 0 + ddkappa: 0 + } + v: 8.03741812917202 + a: 0.01534337664886111 + relative_time: 7.4999999999999813 +} +trajectory_point { + path_point { + x: 587469.39653357433 + y: 4140762.0612547919 + theta: 2.2236436848858117 + kappa: 0.00012462376388929709 + s: 54.754669203337784 + dkappa: 0 + ddkappa: 0 + } + v: 8.0381423373700311 + a: 0.013632204065615203 + relative_time: 7.5499999999999812 +} +trajectory_point { + path_point { + x: 587469.15237267746 + y: 4140762.3805163177 + theta: 2.2236893746468716 + kappa: 0.00011166890873382837 + s: 55.156592660928325 + dkappa: 0 + ddkappa: 0 + } + v: 8.0387820637524179 + a: 0.011963881912591443 + relative_time: 7.599999999999981 +} +trajectory_point { + path_point { + x: 587468.90818350133 + y: 4140762.6997938817 + theta: 2.2237317135545593 + kappa: 9.8906892043192681e-05 + s: 55.558546036873189 + dkappa: 0 + ddkappa: 0 + } + v: 8.03933941752399 + a: 0.010337077521653137 + relative_time: 7.6499999999999808 +} +trajectory_point { + path_point { + x: 587468.66397133039 + y: 4140763.0190864028 + theta: 2.2237706110699453 + kappa: 8.5728043356922819e-05 + s: 55.960525263883753 + dkappa: 0 + ddkappa: 0 + } + v: 8.03981644125615 + a: 0.0087504582246636375 + relative_time: 7.6999999999999806 +} +trajectory_point { + path_point { + x: 587468.41972497024 + y: 4140763.3383803256 + theta: 2.2237996397889992 + kappa: 7.1356179392213852e-05 + s: 56.362526375134131 + dkappa: 0 + ddkappa: 0 + } + v: 8.0402151108868871 + a: 0.0072026913534862375 + relative_time: 7.7499999999999805 +} +trajectory_point { + path_point { + x: 587468.175467665 + y: 4140763.6576885562 + theta: 2.223828669808892 + kappa: 5.6983671392991414e-05 + s: 56.764545500929508 + dkappa: 0 + ddkappa: 0 + } + v: 8.0405373357207921 + a: 0.0056924442399842873 + relative_time: 7.79999999999998 +} +trajectory_point { + path_point { + x: 587467.931188497 + y: 4140763.9769979897 + theta: 2.2238452794877883 + kappa: 3.9892393080905618e-05 + s: 57.166578865374461 + dkappa: 0 + ddkappa: 0 + } + v: 8.0407849584290449 + a: 0.0042183842160210816 + relative_time: 7.84999999999998 +} +trajectory_point { + path_point { + x: 587467.68689913012 + y: 4140764.2963129077 + theta: 2.2238583294508292 + kappa: 2.2021571427416583e-05 + s: 57.5686227830413 + dkappa: 0 + ddkappa: 0 + } + v: 8.0409597550494176 + a: 0.0027791786134599566 + relative_time: 7.89999999999998 +} +trajectory_point { + path_point { + x: 587467.44260475459 + y: 4140764.6156327506 + theta: 2.2238654210149376 + kappa: 2.7277563983791633e-06 + s: 57.970673655638365 + dkappa: 0 + ddkappa: 0 + } + v: 8.04106343498628 + a: 0.0013734947641642348 + relative_time: 7.94999999999998 +} +trajectory_point { + path_point { + x: 587467.19830642734 + y: 4140764.9349539024 + theta: 2.2238583412419537 + kappa: -1.9949793801266145e-05 + s: 58.372727968678404 + dkappa: 0 + ddkappa: 0 + } + v: 8.0410976410105874 + a: -2.7755575615628914e-15 + relative_time: 7.99999999999998 +} +decision { + main_decision { + cruise { + } + } + object_decision { + decision { + id: "683_0" + perception_id: 683 + object_decision { + ignore { + } + } + } + decision { + id: "726_0" + perception_id: 726 + object_decision { + ignore { + } + } + } + decision { + id: "DEST" + perception_id: -1109540454 + object_decision { + ignore { + } + } + } + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/result_follow_01_0.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/result_follow_01_0.pb.txt new file mode 100644 index 00000000000..fa3b3029dc2 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/result_follow_01_0.pb.txt @@ -0,0 +1,2298 @@ +header { + module_name: "planning" +} +is_replan: true +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: 587270.74275446648 + y: 4140989.9890584587 + z: 0 + theta: -1.9217279571391881 + kappa: -0.071729597843791779 + dkappa: 0 + ddkappa: 0 + } + v: 7.0999999046325684 + a: -0.80282591427385408 + relative_time: 0 +} +trajectory_point { + path_point { + x: 587270.61092234554 + y: 4140989.6605249238 + theta: -1.9421178162815502 + kappa: -0.061969009621421767 + s: 0.35399716357702804 + dkappa: 0 + ddkappa: 0 + } + v: 7.0599022720044973 + a: -0.80095037957731263 + relative_time: 0.05 +} +trajectory_point { + path_point { + x: 587270.47983587068 + y: 4140989.3338495828 + theta: -1.9623990899990904 + kappa: -0.052263627556324306 + s: 0.70599210939409751 + dkappa: 0 + ddkappa: 0 + } + v: 7.0199175217936061 + a: -0.79831553775465158 + relative_time: 0.1 +} +trajectory_point { + path_point { + x: 587270.34679833835 + y: 4140989.0101779504 + theta: -1.9809448774128879 + kappa: -0.042969243780975552 + s: 1.055991418405555 + dkappa: 0 + ddkappa: 0 + } + v: 6.980082881331005 + a: -0.794950909813616 + relative_time: 0.15000000000000002 +} +trajectory_point { + path_point { + x: 587270.20290639275 + y: 4140988.6933065038 + theta: -1.992438769267882 + kappa: -0.035261553699745388 + s: 1.404003496031043 + dkappa: 0 + ddkappa: 0 + } + v: 6.9404341018974209 + a: -0.79088601676195114 + relative_time: 0.2 +} +trajectory_point { + path_point { + x: 587270.059831905 + y: 4140988.37823522 + theta: -2.003868078601343 + kappa: -0.027597651419820839 + s: 1.7500384983529809 + dkappa: 0 + ddkappa: 0 + } + v: 6.9010054587231915 + a: -0.78615037960740208 + relative_time: 0.25 +} +trajectory_point { + path_point { + x: 587269.91527995816 + y: 4140988.0660244133 + theta: -2.0130228018937313 + kappa: -0.020484565154247077 + s: 2.0941082583140451 + dkappa: 0 + ddkappa: 0 + } + v: 6.8618297509882664 + a: -0.78077351935771377 + relative_time: 0.3 +} +trajectory_point { + path_point { + x: 587269.76686441014 + y: 4140987.7577752946 + theta: -2.0176097456227793 + kappa: -0.014449349116026966 + s: 2.43622621191465 + dkappa: 0 + ddkappa: 0 + } + v: 6.8229383018222105 + a: -0.77478495702063155 + relative_time: 0.35 +} +trajectory_point { + path_point { + x: 587269.619289091 + y: 4140987.4512712737 + theta: -2.0221707445482222 + kappa: -0.00844830040044021 + s: 2.7764073244104277 + dkappa: 0 + ddkappa: 0 + } + v: 6.7843609583041982 + a: -0.76821421360390052 + relative_time: 0.39999999999999997 +} +trajectory_point { + path_point { + x: 587269.47186175233 + y: 4140987.1468297048 + theta: -2.0244896887178832 + kappa: -0.0030001103768035097 + s: 3.1146680165097114 + dkappa: 0 + ddkappa: 0 + } + v: 6.7461260914630188 + a: -0.76109081011526569 + relative_time: 0.44999999999999996 +} +trajectory_point { + path_point { + x: 587269.32431607228 + y: 4140986.8445599135 + theta: -2.0237304276274628 + kappa: 0.0016996465812974563 + s: 3.4510260905710113 + dkappa: 0 + ddkappa: 0 + } + v: 6.7082605962770741 + a: -0.75344426756247229 + relative_time: 0.49999999999999994 +} +trajectory_point { + path_point { + x: 587269.17759660538 + y: 4140986.5439827461 + theta: -2.0229754181303234 + kappa: 0.0063730862611142839 + s: 3.785500656800501 + dkappa: 0 + ddkappa: 0 + } + v: 6.670789891674378 + a: -0.74530410695326543 + relative_time: 0.54999999999999993 +} +trajectory_point { + path_point { + x: 587269.03288688743 + y: 4140986.244504245 + theta: -2.0203510212860119 + kappa: 0.010564493398180375 + s: 4.1181120594494924 + dkappa: 0 + ddkappa: 0 + } + v: 6.6337379205325586 + a: -0.73669984929539023 + relative_time: 0.6 +} +trajectory_point { + path_point { + x: 587268.89037849568 + y: 4140985.9460080452 + theta: -2.0155412204709449 + kappa: 0.014197301663926234 + s: 4.44888180301192 + dkappa: 0 + ddkappa: 0 + } + v: 6.5971271496788546 + a: -0.72766101559659169 + relative_time: 0.65 +} +trajectory_point { + path_point { + x: 587268.74865382863 + y: 4140985.6491534244 + theta: -2.0107578615398602 + kappa: 0.017810131301187887 + s: 4.7778324784218222 + dkappa: 0 + ddkappa: 0 + } + v: 6.5609785698901186 + a: -0.71821712686461514 + relative_time: 0.70000000000000007 +} +trajectory_point { + path_point { + x: 587268.610274431 + y: 4140985.352721998 + theta: -2.0045738616906097 + kappa: 0.021080663342401242 + s: 5.1049876892508177 + dkappa: 0 + ddkappa: 0 + } + v: 6.5253116958928166 + a: -0.70839770410720559 + relative_time: 0.75000000000000011 +} +trajectory_point { + path_point { + x: 587268.47584931762 + y: 4140985.0564032095 + theta: -1.9966443039058828 + kappa: 0.023931450299450919 + s: 5.4303719779055912 + dkappa: 0 + ddkappa: 0 + } + v: 6.4901445663630266 + a: -0.69823226833210827 + relative_time: 0.80000000000000016 +} +trajectory_point { + path_point { + x: 587268.34214532422 + y: 4140984.7616740153 + theta: -1.9887571962511466 + kappa: 0.026766944291187381 + s: 5.7540107518253691 + dkappa: 0 + ddkappa: 0 + } + v: 6.4554937439264384 + a: -0.68775034054706807 + relative_time: 0.8500000000000002 +} +trajectory_point { + path_point { + x: 587268.21221499657 + y: 4140984.467172673 + theta: -1.9800664080605819 + kappa: 0.029159842034525082 + s: 6.0759302096794059 + dkappa: 0 + ddkappa: 0 + } + v: 6.4213743151583564 + a: -0.67698144175983044 + relative_time: 0.90000000000000024 +} +trajectory_point { + path_point { + x: 587268.08820547 + y: 4140984.1719320826 + theta: -1.9699730815413254 + kappa: 0.03080916692323744 + s: 6.3961572675644573 + dkappa: 0 + ddkappa: 0 + } + v: 6.3877998905836959 + a: -0.66595509297814026 + relative_time: 0.95000000000000029 +} +trajectory_point { + path_point { + x: 587267.96484066127 + y: 4140983.87822643 + theta: -1.9599318274998394 + kappa: 0.032449917076030739 + s: 6.7147194852022691 + dkappa: 0 + ddkappa: 0 + } + v: 6.3547826046769869 + a: -0.65470081520974266 + relative_time: 1.0000000000000002 +} +trajectory_point { + path_point { + x: 587267.84434369346 + y: 4140983.585135187 + theta: -1.949731876444122 + kappa: 0.03377419055888347 + s: 7.0316449921370516 + dkappa: 0 + ddkappa: 0 + } + v: 6.3223331158623708 + a: -0.643248129462383 + relative_time: 1.0500000000000003 +} +trajectory_point { + path_point { + x: 587267.73205028893 + y: 4140983.29049088 + theta: -1.9388628811032618 + kappa: 0.034044867558145085 + s: 7.3469624139329648 + dkappa: 0 + ddkappa: 0 + } + v: 6.2904606065136024 + a: -0.63162655674380608 + relative_time: 1.1000000000000003 +} +trajectory_point { + path_point { + x: 587267.620319224 + y: 4140982.9973220844 + theta: -1.9280473734928778 + kappa: 0.03431418906905101 + s: 7.660700798371594 + dkappa: 0 + ddkappa: 0 + } + v: 6.2591727829540487 + a: -0.61986561806175722 + relative_time: 1.1500000000000004 +} +trajectory_point { + path_point { + x: 587267.50936475792 + y: 4140982.7055200981 + theta: -1.9172930089514479 + kappa: 0.034559256187337843 + s: 7.9728895416494341 + dkappa: 0 + ddkappa: 0 + } + v: 6.2284758754566889 + a: -0.60799483442398161 + relative_time: 1.2000000000000004 +} +trajectory_point { + path_point { + x: 587267.40881489613 + y: 4140982.4115731437 + theta: -1.9068607557949617 + kappa: 0.033796879142967313 + s: 8.2835583145753713 + dkappa: 0 + ddkappa: 0 + } + v: 6.1983746382441165 + a: -0.59604372683822415 + relative_time: 1.2500000000000004 +} +trajectory_point { + path_point { + x: 587267.30874731415 + y: 4140982.1190360836 + theta: -1.8964771824811901 + kappa: 0.033038158781105623 + s: 8.5927369887681575 + dkappa: 0 + ddkappa: 0 + } + v: 6.1688723494885371 + a: -0.58404181631223029 + relative_time: 1.3000000000000005 +} +trajectory_point { + path_point { + x: 587267.20915230247 + y: 4140981.8278805334 + theta: -1.8861435239233111 + kappa: 0.032283021485522562 + s: 8.9004555628539013 + dkappa: 0 + ddkappa: 0 + } + v: 6.1399708113117679 + a: -0.5720186238537448 + relative_time: 1.3500000000000005 +} +trajectory_point { + path_point { + x: 587267.11712866777 + y: 4140981.5357733821 + theta: -1.8767389842700568 + kappa: 0.030959233644447359 + s: 9.2067440886635339 + dkappa: 0 + ddkappa: 0 + } + v: 6.1116703497852418 + a: -0.560003670470513 + relative_time: 1.4000000000000006 +} +trajectory_point { + path_point { + x: 587267.02777154977 + y: 4140981.2442732826 + theta: -1.8676542405322798 + kappa: 0.029460727308624132 + s: 9.5116325974303084 + dkappa: 0 + ddkappa: 0 + } + v: 6.0839698149300006 + a: -0.54802647717028008 + relative_time: 1.4500000000000006 +} +trajectory_point { + path_point { + x: 587266.93881597661 + y: 4140980.954083099 + theta: -1.8586104797338419 + kappa: 0.027968954824080863 + s: 9.8151510259872623 + dkappa: 0 + ddkappa: 0 + } + v: 6.0568665807167008 + a: -0.53611656496079085 + relative_time: 1.5000000000000007 +} +trajectory_point { + path_point { + x: 587266.85377161473 + y: 4140980.6641481733 + theta: -1.8503933307664207 + kappa: 0.026263494248889081 + s: 10.11732914296471 + dkappa: 0 + ddkappa: 0 + } + v: 6.0303565450656134 + a: -0.5243034548497908 + relative_time: 1.5500000000000007 +} +trajectory_point { + path_point { + x: 587266.773480101 + y: 4140980.3741922723 + theta: -1.8431900976839022 + kappa: 0.024290966362281348 + s: 10.41819647498772 + dkappa: 0 + ddkappa: 0 + } + v: 6.0044341298466186 + a: -0.51261666784502491 + relative_time: 1.6000000000000008 +} +trajectory_point { + path_point { + x: 587266.693530597 + y: 4140980.0854714671 + theta: -1.8360173762268748 + kappa: 0.022326840653162473 + s: 10.717782232873594 + dkappa: 0 + ddkappa: 0 + } + v: 5.9790922808792111 + a: -0.50108572495423831 + relative_time: 1.6500000000000008 +} +trajectory_point { + path_point { + x: 587266.6144096232 + y: 4140979.7978265691 + theta: -1.8290512444511637 + kappa: 0.020351906940931312 + s: 11.016115237829348 + dkappa: 0 + ddkappa: 0 + } + v: 5.9543224679324984 + a: -0.48974014718517611 + relative_time: 1.7000000000000008 +} +trajectory_point { + path_point { + x: 587266.54100663878 + y: 4140979.5099281007 + theta: -1.8240350121185018 + kappa: 0.018177502624894933 + s: 11.313223847649196 + dkappa: 0 + ddkappa: 0 + } + v: 5.9301146847252024 + a: -0.47860945554558348 + relative_time: 1.7500000000000009 +} +trajectory_point { + path_point { + x: 587266.46789927746 + y: 4140979.2231891146 + theta: -1.8190388288884234 + kappa: 0.0160118554999841 + s: 11.609135882912026 + dkappa: 0 + ddkappa: 0 + } + v: 5.9064574489256536 + a: -0.46772317104320543 + relative_time: 1.8000000000000009 +} +trajectory_point { + path_point { + x: 587266.3950808167 + y: 4140978.9375832435 + theta: -1.8140624851396854 + kappa: 0.013854766431656704 + s: 11.903878553178885 + dkappa: 0 + ddkappa: 0 + } + v: 5.8833378021517984 + a: -0.45711081468578724 + relative_time: 1.850000000000001 +} +trajectory_point { + path_point { + x: 587266.32515000587 + y: 4140978.6524391156 + theta: -1.8105797682180111 + kappa: 0.011739125373283362 + s: 12.197478383190454 + dkappa: 0 + ddkappa: 0 + } + v: 5.8607413099711962 + a: -0.44680190748107396 + relative_time: 1.900000000000001 +} +trajectory_point { + path_point { + x: 587266.25669856369 + y: 4140978.3680791985 + theta: -1.8077967827574684 + kappa: 0.0096469411811801967 + s: 12.48996113906454 + dkappa: 0 + ddkappa: 0 + } + v: 5.8386520619010174 + a: -0.43682597043681071 + relative_time: 1.9500000000000011 +} +trajectory_point { + path_point { + x: 587266.18850272137 + y: 4140978.0847810903 + theta: -1.8050241876215687 + kappa: 0.007562569275199489 + s: 12.781351754493537 + dkappa: 0 + ddkappa: 0 + } + v: 5.8170526714080451 + a: -0.427212524560743 + relative_time: 2.0000000000000009 +} +trajectory_point { + path_point { + x: 587266.12096252386 + y: 4140977.8024245556 + theta: -1.8027288638982053 + kappa: 0.0055683461388137869 + s: 13.071674739642235 + dkappa: 0 + ddkappa: 0 + } + v: 5.7959537318930989 + a: -0.4167728339759495 + relative_time: 2.0500000000000007 +} +trajectory_point { + path_point { + x: 587266.05493054818 + y: 4140977.5207806565 + theta: -1.8018988171605375 + kappa: 0.003838673087079253 + s: 13.360955758034853 + dkappa: 0 + ddkappa: 0 + } + v: 5.7753726143192106 + a: -0.40649956486552746 + relative_time: 2.1000000000000005 +} +trajectory_point { + path_point { + x: 587265.98913055193 + y: 4140977.2401262112 + theta: -1.8010716859325604 + kappa: 0.0021150766115380758 + s: 13.649220492946734 + dkappa: 0 + ddkappa: 0 + } + v: 5.7553010099205961 + a: -0.39639222491207271 + relative_time: 2.1500000000000004 +} +trajectory_point { + path_point { + x: 587265.923556767 + y: 4140976.960436617 + theta: -1.8002473988421139 + kappa: 0.00039740562671115181 + s: 13.936494212830326 + dkappa: 0 + ddkappa: 0 + } + v: 5.7357306345473438 + a: -0.38645032179818134 + relative_time: 2.2 +} +trajectory_point { + path_point { + x: 587265.85828068154 + y: 4140976.6816696008 + theta: -1.8005276467919575 + kappa: -0.00083857668092227522 + s: 14.222801772545978 + dkappa: 0 + ddkappa: 0 + } + v: 5.7166532286654093 + a: -0.37667336320644934 + relative_time: 2.25 +} +trajectory_point { + path_point { + x: 587265.79324264708 + y: 4140976.40381403 + theta: -1.8011403231910104 + kappa: -0.0019265014081766311 + s: 14.50816761459274 + dkappa: 0 + ddkappa: 0 + } + v: 5.6980605573566194 + a: -0.36706085681947265 + relative_time: 2.3 +} +trajectory_point { + path_point { + x: 587265.72841376334 + y: 4140976.126851995 + theta: -1.8017510293231356 + kappa: -0.0030109275610716267 + s: 14.792615770339143 + dkappa: 0 + ddkappa: 0 + } + v: 5.6799444103186731 + a: -0.3576123103198473 + relative_time: 2.3499999999999996 +} +trajectory_point { + path_point { + x: 587265.66352602222 + y: 4140975.8508224795 + theta: -1.8025267443520092 + kappa: -0.0038636051714609539 + s: 15.076169861254003 + dkappa: 0 + ddkappa: 0 + } + v: 5.6622966018651359 + a: -0.34832723139016925 + relative_time: 2.3999999999999995 +} +trajectory_point { + path_point { + x: 587265.59808206081 + y: 4140975.5758190225 + theta: -1.8037802913568621 + kappa: -0.0040567885508778862 + s: 15.35885310013721 + dkappa: 0 + ddkappa: 0 + } + v: 5.6451089709254472 + a: -0.33920512771303457 + relative_time: 2.4499999999999993 +} +trajectory_point { + path_point { + x: 587265.53283443046 + y: 4140975.301640572 + theta: -1.8050300797330794 + kappa: -0.004249392382238695 + s: 15.640688292350523 + dkappa: 0 + ddkappa: 0 + } + v: 5.6283733810449137 + a: -0.33024550697103916 + relative_time: 2.4999999999999991 +} +trajectory_point { + path_point { + x: 587265.46777794568 + y: 4140975.0282653393 + theta: -1.8062762049039318 + kappa: -0.0044414319729396169 + s: 15.921697837048363 + dkappa: 0 + ddkappa: 0 + } + v: 5.6120817203847144 + a: -0.321447876846779 + relative_time: 2.5499999999999989 +} +trajectory_point { + path_point { + x: 587265.40212142386 + y: 4140974.7558606779 + theta: -1.8072839851204947 + kappa: -0.0039004233228320377 + s: 16.201903728408606 + dkappa: 0 + ddkappa: 0 + } + v: 5.5962259017218967 + a: -0.3128117450228502 + relative_time: 2.5999999999999988 +} +trajectory_point { + path_point { + x: 587265.33633272885 + y: 4140974.4842920424 + theta: -1.8081947480997542 + kappa: -0.0030670061173264955 + s: 16.481327556863381 + dkappa: 0 + ddkappa: 0 + } + v: 5.5807978624493808 + a: -0.30433661918184868 + relative_time: 2.6499999999999986 +} +trajectory_point { + path_point { + x: 587265.27072317735 + y: 4140974.2134628925 + theta: -1.8091030311673155 + kappa: -0.0022358583185139915 + s: 16.759990510329853 + dkappa: 0 + ddkappa: 0 + } + v: 5.5657895645759536 + a: -0.29602200700637049 + relative_time: 2.6999999999999984 +} +trajectory_point { + path_point { + x: 587265.20522687177 + y: 4140973.9433678584 + theta: -1.8098866836780179 + kappa: -0.0014148443501403891 + s: 17.037913375441029 + dkappa: 0 + ddkappa: 0 + } + v: 5.551192994726275 + a: -0.28786741617901146 + relative_time: 2.7499999999999982 +} +trajectory_point { + path_point { + x: 587265.1395103503 + y: 4140973.6740670362 + theta: -1.809887319817082 + kappa: -0.00064660759718952342 + s: 17.31511653877654 + dkappa: 0 + ddkappa: 0 + } + v: 5.5370001641408741 + a: -0.27987235438236779 + relative_time: 2.799999999999998 +} +trajectory_point { + path_point { + x: 587265.07395971008 + y: 4140973.4054459818 + theta: -1.8098879543504087 + kappa: 0.00011968997866402306 + s: 17.591619988093449 + dkappa: 0 + ddkappa: 0 + } + v: 5.5232031086761495 + a: -0.27203632929903537 + relative_time: 2.8499999999999979 +} +trajectory_point { + path_point { + x: 587265.0085703067 + y: 4140973.1374856625 + theta: -1.8098885873229549 + kappa: 0.00088410266931495773 + s: 17.867443313557025 + dkappa: 0 + ddkappa: 0 + } + v: 5.5097938888043725 + a: -0.26435884861161019 + relative_time: 2.8999999999999977 +} +trajectory_point { + path_point { + x: 587264.943503337 + y: 4140972.8701270893 + theta: -1.8095879349565365 + kappa: 0.0014677790166351572 + s: 18.142605708971558 + dkappa: 0 + ddkappa: 0 + } + v: 5.49676458961368 + a: -0.25683942000268822 + relative_time: 2.9499999999999975 +} +trajectory_point { + path_point { + x: 587264.87873822043 + y: 4140972.6033559227 + theta: -1.8090153063646388 + kappa: 0.0018881752632117794 + s: 18.417125973011135 + dkappa: 0 + ddkappa: 0 + } + v: 5.4841073208080848 + a: -0.2494775511548655 + relative_time: 2.9999999999999973 +} +trajectory_point { + path_point { + x: 587264.814120254 + y: 4140972.3371908767 + theta: -1.8084439787101083 + kappa: 0.0023076163441558715 + s: 18.691022510450441 + dkappa: 0 + ddkappa: 0 + } + v: 5.4718142167074655 + a: -0.24227274975073804 + relative_time: 3.0499999999999972 +} +trajectory_point { + path_point { + x: 587264.74964518833 + y: 4140972.071614448 + theta: -1.8078739147935285 + kappa: 0.0027261298429385964 + s: 18.964313333395552 + dkappa: 0 + ddkappa: 0 + } + v: 5.4598774362475728 + a: -0.23522452347290176 + relative_time: 3.099999999999997 +} +trajectory_point { + path_point { + x: 587264.685936288 + y: 4140971.8064580788 + theta: -1.8070477020755795 + kappa: 0.0029223829807848009 + s: 19.237016062514726 + dkappa: 0 + ddkappa: 0 + } + v: 5.4482891629800276 + a: -0.22833238000395273 + relative_time: 3.1499999999999968 +} +trajectory_point { + path_point { + x: 587264.62244279892 + y: 4140971.5418369737 + theta: -1.8061895615188479 + kappa: 0.0030892786968593445 + s: 19.509147928269208 + dkappa: 0 + ddkappa: 0 + } + v: 5.43704160507232 + a: -0.22159582702648689 + relative_time: 3.1999999999999966 +} +trajectory_point { + path_point { + x: 587264.55907857371 + y: 4140971.2777546 + theta: -1.8053331680814928 + kappa: 0.00325583463692833 + s: 19.780725772144002 + dkappa: 0 + ddkappa: 0 + } + v: 5.4261269953078113 + a: -0.21501437222310027 + relative_time: 3.2499999999999964 +} +trajectory_point { + path_point { + x: 587264.49602922646 + y: 4140971.0141498325 + theta: -1.8044622027300727 + kappa: 0.0033880981908699028 + s: 20.051766047878687 + dkappa: 0 + ddkappa: 0 + } + v: 5.415537591085732 + a: -0.20858752327638883 + relative_time: 3.2999999999999963 +} +trajectory_point { + path_point { + x: 587264.43378587486 + y: 4140970.7508891765 + theta: -1.8035341186319744 + kappa: 0.0033973660037306358 + s: 20.32228482269819 + dkappa: 0 + ddkappa: 0 + } + v: 5.4052656744211847 + a: -0.20231478786894858 + relative_time: 3.3499999999999961 +} +trajectory_point { + path_point { + x: 587264.37165890657 + y: 4140970.4881207687 + theta: -1.802607768877198 + kappa: 0.0034066164875331678 + s: 20.5922977785436 + dkappa: 0 + ddkappa: 0 + } + v: 5.3953035519451396 + a: -0.19619567368337554 + relative_time: 3.3999999999999959 +} +trajectory_point { + path_point { + x: 587264.30964480177 + y: 4140970.2258297214 + theta: -1.8016831025734212 + kappa: 0.0034158501663740745 + s: 20.861820213302948 + dkappa: 0 + ddkappa: 0 + } + v: 5.3856435549044388 + a: -0.19022968840226565 + relative_time: 3.4499999999999957 +} +trajectory_point { + path_point { + x: 587264.248207384 + y: 4140969.9638918848 + theta: -1.8007769643618941 + kappa: 0.0033816761750248355 + s: 21.130867042042 + dkappa: 0 + ddkappa: 0 + } + v: 5.3762780391617948 + a: -0.18441633970821486 + relative_time: 3.4999999999999956 +} +trajectory_point { + path_point { + x: 587264.187299505 + y: 4140969.7023033937 + theta: -1.7998877178522725 + kappa: 0.00330816286888295 + s: 21.39945279823506 + dkappa: 0 + ddkappa: 0 + } + v: 5.36719938519579 + a: -0.17875513528381931 + relative_time: 3.5499999999999954 +} +trajectory_point { + path_point { + x: 587264.12649297516 + y: 4140969.4411501787 + theta: -1.7989999505599739 + kappa: 0.0032347718868937607 + s: 21.667591634995752 + dkappa: 0 + ddkappa: 0 + } + v: 5.3583999981008761 + a: -0.1732455828116749 + relative_time: 3.5999999999999952 +} +trajectory_point { + path_point { + x: 587264.06578467065 + y: 4140969.1804188248 + theta: -1.798113618279686 + kappa: 0.0031614994590469024 + s: 21.935297326307829 + dkappa: 0 + ddkappa: 0 + } + v: 5.3498723075873755 + a: -0.16788718997437763 + relative_time: 3.649999999999995 +} +trajectory_point { + path_point { + x: 587264.00581518246 + y: 4140968.9199474603 + theta: -1.7973411333712823 + kappa: 0.0029714235076204938 + s: 22.202583268255943 + dkappa: 0 + ddkappa: 0 + } + v: 5.341608767981481 + a: -0.16267946445452347 + relative_time: 3.6999999999999948 +} +trajectory_point { + path_point { + x: 587263.94608967681 + y: 4140968.6598371416 + theta: -1.7965965080378394 + kappa: 0.0027538931995751371 + s: 22.46946248025646 + dkappa: 0 + ddkappa: 0 + } + v: 5.333601858225256 + a: -0.15762191393470842 + relative_time: 3.7499999999999947 +} +trajectory_point { + path_point { + x: 587263.88645236462 + y: 4140968.4001109139 + theta: -1.7958529822038707 + kappa: 0.0025366841066650153 + s: 22.735947606288249 + dkappa: 0 + ddkappa: 0 + } + v: 5.3258440818766326 + a: -0.15271404609752859 + relative_time: 3.7999999999999945 +} +trajectory_point { + path_point { + x: 587263.82694292592 + y: 4140968.1407471285 + theta: -1.7951309127273838 + kappa: 0.0023100600546059882 + s: 23.002050916123469 + dkappa: 0 + ddkappa: 0 + } + v: 5.3183279671094157 + a: -0.14795536862557984 + relative_time: 3.8499999999999943 +} +trajectory_point { + path_point { + x: 587263.76807241258 + y: 4140967.8816168569 + theta: -1.7946771610396508 + kappa: 0.0019562422908786284 + s: 23.267784306558365 + dkappa: 0 + ddkappa: 0 + } + v: 5.3110460667132777 + a: -0.14334538920145812 + relative_time: 3.8999999999999941 +} +trajectory_point { + path_point { + x: 587263.70928129787 + y: 4140967.6228360748 + theta: -1.7942240211762768 + kappa: 0.0016029017208037436 + s: 23.533159302644062 + dkappa: 0 + ddkappa: 0 + } + v: 5.3039909580937632 + a: -0.13888361550775957 + relative_time: 3.949999999999994 +} +trajectory_point { + path_point { + x: 587263.65056711051 + y: 4140967.3643939039 + theta: -1.7937714742767101 + kappa: 0.0012500234923777487 + s: 23.798187058917364 + dkappa: 0 + ddkappa: 0 + } + v: 5.297155243272285 + a: -0.13456955522708008 + relative_time: 3.9999999999999938 +} +trajectory_point { + path_point { + x: 587263.59200471407 + y: 4140967.1062622848 + theta: -1.7934447066091892 + kappa: 0.00087015954795796244 + s: 24.062878389934127 + dkappa: 0 + ddkappa: 0 + } + v: 5.2905333369418015 + a: -0.13032877103012228 + relative_time: 4.0499999999999936 +} +trajectory_point { + path_point { + x: 587263.533683241 + y: 4140966.8484101687 + theta: -1.7933919428532337 + kappa: 0.00043081420941122573 + s: 24.327243871675563 + dkappa: 0 + ddkappa: 0 + } + v: 5.2841201783490224 + a: -0.12621925604829026 + relative_time: 4.0999999999999934 +} +trajectory_point { + path_point { + x: 587263.47543138685 + y: 4140966.5908658523 + theta: -1.7933392420815901 + kappa: -8.0066794053650471e-06 + s: 24.591293778416208 + dkappa: 0 + ddkappa: 0 + } + v: 5.2779092624837718 + a: -0.1222386722584948 + relative_time: 4.1499999999999932 +} +trajectory_point { + path_point { + x: 587263.4172469558 + y: 4140966.33361963 + theta: -1.7932866023082785 + kappa: -0.00044631965749420191 + s: 24.855038062102633 + dkappa: 0 + ddkappa: 0 + } + v: 5.271894201237024 + a: -0.11838468163764865 + relative_time: 4.1999999999999931 +} +trajectory_point { + path_point { + x: 587263.35903927265 + y: 4140966.0766821606 + theta: -1.7934818415237039 + kappa: -0.00090552584293694433 + s: 25.118486358198474 + dkappa: 0 + ddkappa: 0 + } + v: 5.2660687234009087 + a: -0.11465494616266461 + relative_time: 4.2499999999999929 +} +trajectory_point { + path_point { + x: 587263.30081916042 + y: 4140965.8200414311 + theta: -1.7938889108666667 + kappa: -0.0013825301207413343 + s: 25.381647991529508 + dkappa: 0 + ddkappa: 0 + } + v: 5.2604266746687109 + a: -0.11104712781045546 + relative_time: 4.2999999999999927 +} +trajectory_point { + path_point { + x: 587263.24266047194 + y: 4140965.563671465 + theta: -1.79429555078816 + kappa: -0.001859031145966267 + s: 25.644531982128704 + dkappa: 0 + ddkappa: 0 + } + v: 5.2549620176348686 + a: -0.10755888855793401 + relative_time: 4.3499999999999925 +} +trajectory_point { + path_point { + x: 587263.18456127809 + y: 4140965.3075637571 + theta: -1.7947017746438969 + kappa: -0.0023350447263680023 + s: 25.907147051081282 + dkappa: 0 + ddkappa: 0 + } + v: 5.2496688317949749 + a: -0.10418789038201305 + relative_time: 4.3999999999999924 +} +trajectory_point { + path_point { + x: 587263.12604977237 + y: 4140965.0518173045 + theta: -1.795461872039996 + kappa: -0.0028049607194308209 + s: 26.169501626369765 + dkappa: 0 + ddkappa: 0 + } + v: 5.2445413135457759 + a: -0.10093179525960537 + relative_time: 4.4499999999999922 +} +trajectory_point { + path_point { + x: 587263.06743575516 + y: 4140964.7963530757 + theta: -1.7963409490291882 + kappa: -0.0032725238916810557 + s: 26.431603848719057 + dkappa: 0 + ddkappa: 0 + } + v: 5.2395737761851739 + a: -0.097788265167623775 + relative_time: 4.499999999999992 +} +trajectory_point { + path_point { + x: 587263.00887641415 + y: 4140964.541127149 + theta: -1.7972192062089716 + kappa: -0.003739650912666505 + s: 26.693461577441465 + dkappa: 0 + ddkappa: 0 + } + v: 5.2347606499122241 + a: -0.094754962082981037 + relative_time: 4.5499999999999918 +} +trajectory_point { + path_point { + x: 587262.95037005353 + y: 4140964.2861321322 + theta: -1.7980966676612187 + kappa: -0.0042063553110011113 + s: 26.955082396281796 + dkappa: 0 + ddkappa: 0 + } + v: 5.2300964818271378 + a: -0.091829547982589965 + relative_time: 4.5999999999999917 +} +trajectory_point { + path_point { + x: 587262.89090927551 + y: 4140964.031593882 + theta: -1.7993896311905337 + kappa: -0.0046225471342735474 + s: 27.216473619262388 + dkappa: 0 + ddkappa: 0 + } + v: 5.2255759359312792 + a: -0.089009684843363357 + relative_time: 4.6499999999999915 +} +trajectory_point { + path_point { + x: 587262.83143635385 + y: 4140963.7772868834 + theta: -1.8007074770144365 + kappa: -0.00503525777389691 + s: 27.477642296528174 + dkappa: 0 + ddkappa: 0 + } + v: 5.221193793127167 + a: -0.086293034642213967 + relative_time: 4.6999999999999913 +} +trajectory_point { + path_point { + x: 587262.77201256331 + y: 4140963.5231899703 + theta: -1.8020242340048573 + kappa: -0.005447627469850831 + s: 27.738595220191748 + dkappa: 0 + ddkappa: 0 + } + v: 5.2169449512184745 + a: -0.083677259356054648 + relative_time: 4.7499999999999911 +} +trajectory_point { + path_point { + x: 587262.71245803521 + y: 4140963.269339032 + theta: -1.8033845003325482 + kappa: -0.005847637787110881 + s: 27.999338930178411 + dkappa: 0 + ddkappa: 0 + } + v: 5.21282442491003 + a: -0.081160020961798154 + relative_time: 4.7999999999999909 +} +trajectory_point { + path_point { + x: 587262.65166677546 + y: 4140963.0159896179 + theta: -1.8050643018058179 + kappa: -0.0061608141247055156 + s: 28.25987972007124 + dkappa: 0 + ddkappa: 0 + } + v: 5.2088273458078147 + a: -0.0787389814363573 + relative_time: 4.8499999999999908 +} +trajectory_point { + path_point { + x: 587262.59092145 + y: 4140962.7628316358 + theta: -1.8067428415031352 + kappa: -0.006473753823390117 + s: 28.520223642956132 + dkappa: 0 + ddkappa: 0 + } + v: 5.2049489624189658 + a: -0.076411802756644859 + relative_time: 4.8999999999999906 +} +trajectory_point { + path_point { + x: 587262.53022070148 + y: 4140962.5098594297 + theta: -1.8084201474733042 + kappa: -0.006786463877062986 + s: 28.780376517266884 + dkappa: 0 + ddkappa: 0 + } + v: 5.201184640151773 + a: -0.074176146899573636 + relative_time: 4.94999999999999 +} +trajectory_point { + path_point { + x: 587262.46905271593 + y: 4140962.257191936 + theta: -1.8101671900271017 + kappa: -0.0070571698196189841 + s: 29.040343932630215 + dkappa: 0 + ddkappa: 0 + } + v: 5.1975298613156822 + a: -0.072029675842056412 + relative_time: 4.99999999999999 +} +trajectory_point { + path_point { + x: 587262.40668473742 + y: 4140962.0050021494 + theta: -1.8120856763777429 + kappa: -0.0072260102895438452 + s: 29.300131255710866 + dkappa: 0 + ddkappa: 0 + } + v: 5.193980225121293 + a: -0.069970051561005983 + relative_time: 5.04999999999999 +} +trajectory_point { + path_point { + x: 587262.34435875784 + y: 4140961.75298219 + theta: -1.8140028796662488 + kappa: -0.0073947370610279225 + s: 29.559743636056623 + dkappa: 0 + ddkappa: 0 + } + v: 5.1905314476803586 + a: -0.06799493603333516 + relative_time: 5.09999999999999 +} +trajectory_point { + path_point { + x: 587262.28207359184 + y: 4140961.5011272617 + theta: -1.8159188222632952 + kappa: -0.0075633533435458559 + s: 29.819186011943394 + dkappa: 0 + ddkappa: 0 + } + v: 5.1871793620057876 + a: -0.066101991235956725 + relative_time: 5.14999999999999 +} +trajectory_point { + path_point { + x: 587262.21897167794 + y: 4140961.2496480145 + theta: -1.8178687009864827 + kappa: -0.0076471452919318842 + s: 30.078463116220263 + dkappa: 0 + ddkappa: 0 + } + v: 5.1839199180116431 + a: -0.064288879145783476 + relative_time: 5.1999999999999895 +} +trajectory_point { + path_point { + x: 587262.154862448 + y: 4140960.9985876675 + theta: -1.8198603585841433 + kappa: -0.0076273726743090828 + s: 30.337579482154538 + dkappa: 0 + ddkappa: 0 + } + v: 5.1807491825131411 + a: -0.0625532617397282 + relative_time: 5.2499999999999893 +} +trajectory_point { + path_point { + x: 587262.09079191356 + y: 4140960.7476788573 + theta: -1.8218508215310911 + kappa: -0.0076076119911462885 + s: 30.596539449276829 + dkappa: 0 + ddkappa: 0 + } + v: 5.1776633392266529 + a: -0.060892800994703691 + relative_time: 5.2999999999999892 +} +trajectory_point { + path_point { + x: 587262.02675904718 + y: 4140960.4969175607 + theta: -1.8238401059666958 + kappa: -0.0075878629256407783 + s: 30.855347169226082 + dkappa: 0 + ddkappa: 0 + } + v: 5.1746586887697044 + a: -0.059305158887622736 + relative_time: 5.349999999999989 +} +trajectory_point { + path_point { + x: 587261.961638783 + y: 4140960.2465914586 + theta: -1.8257487720155603 + kappa: -0.00742844307917522 + s: 31.114006611594657 + dkappa: 0 + ddkappa: 0 + } + v: 5.1717316486609768 + a: -0.057787997395398152 + relative_time: 5.3999999999999888 +} +trajectory_point { + path_point { + x: 587261.895804348 + y: 4140959.9965998372 + theta: -1.8276033262896743 + kappa: -0.0071758471484757256 + s: 31.372521569773369 + dkappa: 0 + ddkappa: 0 + } + v: 5.1688787533203024 + a: -0.05633897849494271 + relative_time: 5.4499999999999886 +} +trajectory_point { + path_point { + x: 587261.83000578545 + y: 4140959.7467444325 + theta: -1.829456874235875 + kappa: -0.006923388853737146 + s: 31.630895666796555 + dkappa: 0 + ddkappa: 0 + } + v: 5.1660966540686708 + a: -0.054955764163169205 + relative_time: 5.4999999999999885 +} +trajectory_point { + path_point { + x: 587261.76424221427 + y: 4140959.4970219005 + theta: -1.8313094279323754 + kappa: -0.0066710648156238176 + s: 31.889132361187141 + dkappa: 0 + ddkappa: 0 + } + v: 5.163382119128225 + a: -0.053636016376990434 + relative_time: 5.5499999999999883 +} +trajectory_point { + path_point { + x: 587261.69731357112 + y: 4140959.2477490273 + theta: -1.8328756106231558 + kappa: -0.0062134917936194148 + s: 32.147234952801675 + dkappa: 0 + ddkappa: 0 + } + v: 5.1607320336222635 + a: -0.052377397113319193 + relative_time: 5.5999999999999881 +} +trajectory_point { + path_point { + x: 587261.62999920966 + y: 4140958.9987146091 + theta: -1.834341127873484 + kappa: -0.0056842767806480309 + s: 32.4052065886754 + dkappa: 0 + ddkappa: 0 + } + v: 5.1581433995752368 + a: -0.051177568349068281 + relative_time: 5.6499999999999879 +} +trajectory_point { + path_point { + x: 587261.5627182367 + y: 4140958.7498037131 + theta: -1.8358059194236165 + kappa: -0.0051553242619139421 + s: 32.663050268867323 + dkappa: 0 + ddkappa: 0 + } + v: 5.1556133359127507 + a: -0.050034192061150479 + relative_time: 5.6999999999999877 +} +trajectory_point { + path_point { + x: 587261.495469906 + y: 4140958.5010135802 + theta: -1.8372699952319582 + kappa: -0.00462662837247968 + s: 32.920768852305251 + dkappa: 0 + ddkappa: 0 + } + v: 5.1531390784615674 + a: -0.048944930226478583 + relative_time: 5.7499999999999876 +} +trajectory_point { + path_point { + x: 587261.42728393024 + y: 4140958.2526059821 + theta: -1.8381569940166225 + kappa: -0.0039159022505248142 + s: 33.17836506263086 + dkappa: 0 + ddkappa: 0 + } + v: 5.1507179799496008 + a: -0.047907444821965378 + relative_time: 5.7999999999999874 +} +trajectory_point { + path_point { + x: 587261.358990062 + y: 4140958.0043519586 + theta: -1.8389605955364678 + kappa: -0.0031792620245108053 + s: 33.435841494044737 + dkappa: 0 + ddkappa: 0 + } + v: 5.1483475100059195 + a: -0.046919397824523687 + relative_time: 5.8499999999999872 +} +trajectory_point { + path_point { + x: 587261.29072730883 + y: 4140957.7562110415 + theta: -1.8397638309934519 + kappa: -0.0024429574176344773 + s: 33.693200617151476 + dkappa: 0 + ddkappa: 0 + } + v: 5.1460252551607484 + a: -0.045978451211066279 + relative_time: 5.899999999999987 +} +trajectory_point { + path_point { + x: 587261.22249490919 + y: 4140957.5081809997 + theta: -1.8405664915452626 + kappa: -0.0017070223411754474 + s: 33.950444784804695 + dkappa: 0 + ddkappa: 0 + } + v: 5.143748918845465 + a: -0.045082266958505951 + relative_time: 5.9499999999999869 +} +trajectory_point { + path_point { + x: 587261.15385845024 + y: 4140957.2603794248 + theta: -1.8406907390844545 + kappa: -0.001099498459523068 + s: 34.207576237952118 + dkappa: 0 + ddkappa: 0 + } + v: 5.1415163213926007 + a: -0.0442285070437555 + relative_time: 5.9999999999999867 +} +trajectory_point { + path_point { + x: 587261.08525149582 + y: 4140957.0126843709 + theta: -1.8408149332173254 + kappa: -0.00049223573235541746 + s: 34.464597158766274 + dkappa: 0 + ddkappa: 0 + } + v: 5.1393281844444605 + a: -0.0433076216850672 + relative_time: 6.0499999999999865 +} +trajectory_point { + path_point { + x: 587261.01667344524 + y: 4140956.76509367 + theta: -1.8409390750275203 + kappa: 0.00011477115768754125 + s: 34.721509797793281 + dkappa: 0 + ddkappa: 0 + } + v: 5.1371845405888124 + a: -0.042447854443431646 + relative_time: 6.0999999999999863 +} +trajectory_point { + path_point { + x: 587260.94814165472 + y: 4140956.5176002895 + theta: -1.8409992104453916 + kappa: 0.00070437544123596533 + s: 34.978316305612367 + dkappa: 0 + ddkappa: 0 + } + v: 5.1350824732548865 + a: -0.041643631915610962 + relative_time: 6.1499999999999861 +} +trajectory_point { + path_point { + x: 587260.87976933806 + y: 4140956.2701708195 + theta: -1.8405896070659131 + kappa: 0.0011677699751917502 + s: 35.235018693940972 + dkappa: 0 + ddkappa: 0 + } + v: 5.1330193445420749 + a: -0.040889380698366486 + relative_time: 6.199999999999986 +} +trajectory_point { + path_point { + x: 587260.81142425118 + y: 4140956.02283989 + theta: -1.8401801666995381 + kappa: 0.0016309799605140514 + s: 35.491618849568269 + dkappa: 0 + ddkappa: 0 + } + v: 5.1309927952199281 + a: -0.040179527388459556 + relative_time: 6.2499999999999858 +} +trajectory_point { + path_point { + x: 587260.74310592061 + y: 4140955.7756057875 + theta: -1.8397708866500779 + kappa: 0.0020940086028349682 + s: 35.748118548288652 + dkappa: 0 + ddkappa: 0 + } + v: 5.1290007447281605 + a: -0.03950849858265152 + relative_time: 6.2999999999999856 +} +trajectory_point { + path_point { + x: 587260.67495158548 + y: 4140955.5284290258 + theta: -1.8392699352169644 + kappa: 0.0025263750023146983 + s: 36.004519468835269 + dkappa: 0 + ddkappa: 0 + } + v: 5.1270413911766486 + a: -0.03887072087770372 + relative_time: 6.3499999999999854 +} +trajectory_point { + path_point { + x: 587260.60727602476 + y: 4140955.2812213711 + theta: -1.8384670842412225 + kappa: 0.0028582951375183034 + s: 36.260823206813505 + dkappa: 0 + ddkappa: 0 + } + v: 5.12511321134543 + a: -0.038260620870377494 + relative_time: 6.3999999999999853 +} +trajectory_point { + path_point { + x: 587260.53962572163 + y: 4140955.034105978 + theta: -1.8376645321638276 + kappa: 0.0031900913954624687 + s: 36.5170312886345 + dkappa: 0 + ddkappa: 0 + } + v: 5.1232149606847042 + a: -0.037672625157434192 + relative_time: 6.4499999999999851 +} +trajectory_point { + path_point { + x: 587260.4720002875 + y: 4140954.7870814269 + theta: -1.836862275410595 + kappa: 0.0035217656813259874 + s: 36.773145185448669 + dkappa: 0 + ddkappa: 0 + } + v: 5.1213456733148339 + a: -0.037101160335635146 + relative_time: 6.4999999999999849 +} +trajectory_point { + path_point { + x: 587260.40471132938 + y: 4140954.5400615521 + theta: -1.8359671803992497 + kappa: 0.0038158595568133086 + s: 37.029166327079189 + dkappa: 0 + ddkappa: 0 + } + v: 5.1195046620263422 + a: -0.0365406530017417 + relative_time: 6.5499999999999847 +} +trajectory_point { + path_point { + x: 587260.33805055951 + y: 4140954.2929656222 + theta: -1.8348920505172872 + kappa: 0.0040373042043548388 + s: 37.285096115955518 + dkappa: 0 + ddkappa: 0 + } + v: 5.1176915182799156 + a: -0.035985529752515205 + relative_time: 6.5999999999999845 +} +trajectory_point { + path_point { + x: 587260.27141322207 + y: 4140954.0459565506 + theta: -1.833817297052206 + kappa: 0.0042586710102401311 + s: 37.540935941046911 + dkappa: 0 + ddkappa: 0 + } + v: 5.1159061122064005 + a: -0.035430217184717 + relative_time: 6.6499999999999844 +} +trajectory_point { + path_point { + x: 587260.20479895512 + y: 4140953.7990329959 + theta: -1.8327429166502958 + kappa: 0.0044799611766919286 + s: 37.796687191795904 + dkappa: 0 + ddkappa: 0 + } + v: 5.1141485926068073 + a: -0.034869141895108417 + relative_time: 6.6999999999999842 +} +trajectory_point { + path_point { + x: 587260.13870392111 + y: 4140953.5520608611 + theta: -1.8315877985465627 + kappa: 0.0046703195237162041 + s: 38.052351272051858 + dkappa: 0 + ddkappa: 0 + } + v: 5.1124193869523076 + a: -0.0342967304804508 + relative_time: 6.749999999999984 +} +trajectory_point { + path_point { + x: 587260.07325686177 + y: 4140953.3050042456 + theta: -1.8303308400686491 + kappa: 0.0048217235530811052 + s: 38.307929614004422 + dkappa: 0 + ddkappa: 0 + } + v: 5.1107192013842333 + a: -0.033707409537505506 + relative_time: 6.7999999999999838 +} +trajectory_point { + path_point { + x: 587260.00783138012 + y: 4140953.0580290845 + theta: -1.8290742939888496 + kappa: 0.0049730776647386125 + s: 38.563423692117091 + dkappa: 0 + ddkappa: 0 + } + v: 5.1090490207140817 + a: -0.033095605663033857 + relative_time: 6.8499999999999837 +} +trajectory_point { + path_point { + x: 587259.94242708432 + y: 4140952.8111338979 + theta: -1.8278181567471625 + kappa: 0.0051243827654546365 + s: 38.818835037060673 + dkappa: 0 + ddkappa: 0 + } + v: 5.10741010842351 + a: -0.032455745453797209 + relative_time: 6.8999999999999835 +} +trajectory_point { + path_point { + x: 587259.87773408869 + y: 4140952.5641361289 + theta: -1.8265002466949545 + kappa: 0.0052343019264841951 + s: 39.074165249646818 + dkappa: 0 + ddkappa: 0 + } + v: 5.1058040066643358 + a: -0.0317822555065569 + relative_time: 6.9499999999999833 +} +trajectory_point { + path_point { + x: 587259.8136517586 + y: 4140952.3170604156 + theta: -1.8251295691567737 + kappa: 0.0053088347529077189 + s: 39.329416014761513 + dkappa: 0 + ddkappa: 0 + } + v: 5.1042325362585412 + a: -0.031069562418074272 + relative_time: 6.9999999999999831 +} +trajectory_point { + path_point { + x: 587259.74958892667 + y: 4140952.0700598797 + theta: -1.8237593065372466 + kappa: 0.005383344901395375 + s: 39.584589115298613 + dkappa: 0 + ddkappa: 0 + } + v: 5.10269779669827 + a: -0.030312092785110666 + relative_time: 7.0499999999999829 +} +trajectory_point { + path_point { + x: 587259.68554511736 + y: 4140951.8231326868 + theta: -1.8223894538065317 + kappa: 0.0054578329252360971 + s: 39.839686446093317 + dkappa: 0 + ddkappa: 0 + } + v: 5.1012021661458258 + a: -0.029504273204427424 + relative_time: 7.0999999999999828 +} +trajectory_point { + path_point { + x: 587259.62236257945 + y: 4140951.5760607319 + theta: -1.821000685821307 + kappa: 0.0054780129453699247 + s: 40.094710027855712 + dkappa: 0 + ddkappa: 0 + } + v: 5.0997483014336762 + a: -0.028640530272785888 + relative_time: 7.1499999999999826 +} +trajectory_point { + path_point { + x: 587259.55969117663 + y: 4140951.3289315868 + theta: -1.8196009935205291 + kappa: 0.0054664048291552352 + s: 40.349662021104251 + dkappa: 0 + ddkappa: 0 + } + v: 5.0983391380644507 + a: -0.0277152905869474 + relative_time: 7.1999999999999824 +} +trajectory_point { + path_point { + x: 587259.49703680258 + y: 4140951.081869591 + theta: -1.8182016797542977 + kappa: 0.0054547998670385987 + s: 40.604544740099271 + dkappa: 0 + ddkappa: 0 + } + v: 5.0969778902109386 + a: -0.026722980743673304 + relative_time: 7.2499999999999822 +} +trajectory_point { + path_point { + x: 587259.43439884717 + y: 4140950.834872338 + theta: -1.8168027363759218 + kappa: 0.005443197946016002 + s: 40.8593606667765 + dkappa: 0 + ddkappa: 0 + } + v: 5.0956680507160943 + a: -0.025658027339724939 + relative_time: 7.2999999999999821 +} +trajectory_point { + path_point { + x: 587259.37273945962 + y: 4140950.5876958594 + theta: -1.8154450715090356 + kappa: 0.0053644349809036877 + s: 41.114112464680588 + dkappa: 0 + ddkappa: 0 + } + v: 5.0944133910930312 + a: -0.02451485697186365 + relative_time: 7.3499999999999819 +} +trajectory_point { + path_point { + x: 587259.3114730583 + y: 4140950.3404840212 + theta: -1.8141038009566661 + kappa: 0.0052593112379857292 + s: 41.368802992898573 + dkappa: 0 + ddkappa: 0 + } + v: 5.0932179615250268 + a: -0.023287896236850774 + relative_time: 7.3999999999999817 +} +trajectory_point { + path_point { + x: 587259.25022065733 + y: 4140950.0933286743 + theta: -1.812762835750092 + kappa: 0.0051542115176333118 + s: 41.623435319993412 + dkappa: 0 + ddkappa: 0 + } + v: 5.09208609086552 + a: -0.021971571731447662 + relative_time: 7.4499999999999815 +} +trajectory_point { + path_point { + x: 587259.188981465 + y: 4140949.8462266247 + theta: -1.8114221633746972 + kappa: 0.0050491344610818908 + s: 41.8780127379375 + dkappa: 0 + ddkappa: 0 + } + v: 5.09102238663811 + a: -0.020560310052415643 + relative_time: 7.4999999999999813 +} +trajectory_point { + path_point { + x: 587259.12873630843 + y: 4140949.5989337368 + theta: -1.8102041356405738 + kappa: 0.0048671806908438808 + s: 42.132538776046168 + dkappa: 0 + ddkappa: 0 + } + v: 5.0900317350365594 + a: -0.019048537796516073 + relative_time: 7.5499999999999812 +} +trajectory_point { + path_point { + x: 587259.06874561752 + y: 4140949.3516274644 + theta: -1.8090166480945495 + kappa: 0.0046662103733224334 + s: 42.387017214911175 + dkappa: 0 + ddkappa: 0 + } + v: 5.0891193009247928 + a: -0.017430681560510287 + relative_time: 7.599999999999981 +} +trajectory_point { + path_point { + x: 587259.00876519387 + y: 4140949.1043635164 + theta: -1.8078293632553619 + kappa: 0.004465274451442118 + s: 42.641452100334227 + dkappa: 0 + ddkappa: 0 + } + v: 5.0882905278368975 + a: -0.015701167941159621 + relative_time: 7.6499999999999808 +} +trajectory_point { + path_point { + x: 587258.948794018 + y: 4140948.8571376917 + theta: -1.8066422642880553 + kappa: 0.0042643695096459553 + s: 42.895847757260512 + dkappa: 0 + ddkappa: 0 + } + v: 5.08755113797712 + a: -0.013854423535225431 + relative_time: 7.6999999999999806 +} +trajectory_point { + path_point { + x: 587258.88975140953 + y: 4140948.6097242883 + theta: -1.8056751082309297 + kappa: 0.0039778661475657453 + s: 43.150208803712161 + dkappa: 0 + ddkappa: 0 + } + v: 5.0869071322198716 + a: -0.011884874939469041 + relative_time: 7.7499999999999805 +} +trajectory_point { + path_point { + x: 587258.830838905 + y: 4140948.362310146 + theta: -1.8047374847667865 + kappa: 0.0036799336649053103 + s: 43.4045401647218 + dkappa: 0 + ddkappa: 0 + } + v: 5.086364790109724 + a: -0.0097869487506518152 + relative_time: 7.79999999999998 +} +trajectory_point { + path_point { + x: 587258.77193206153 + y: 4140948.114919778 + theta: -1.8037999512721092 + kappa: 0.0033820298114732206 + s: 43.658847086266015 + dkappa: 0 + ddkappa: 0 + } + v: 5.085930669861412 + a: -0.0075550715655350875 + relative_time: 7.84999999999998 +} +trajectory_point { + path_point { + x: 587258.71302958648 + y: 4140947.8675477556 + theta: -1.8028624888203832 + kappa: 0.0030841480496654979 + s: 43.9131351491989 + dkappa: 0 + ddkappa: 0 + } + v: 5.0856116083598293 + a: -0.0051836699808801845 + relative_time: 7.89999999999998 +} +trajectory_point { + path_point { + x: 587258.65484732343 + y: 4140947.6200186745 + theta: -1.8022546029150539 + kappa: 0.0026971334282600021 + s: 44.167410283185546 + dkappa: 0 + ddkappa: 0 + } + v: 5.0854147211600367 + a: -0.0026671705934484605 + relative_time: 7.94999999999998 +} +trajectory_point { + path_point { + x: 587258.59669605526 + y: 4140947.3724890831 + theta: -1.8016602754644186 + kappa: 0.0023064650832235463 + s: 44.421678780635538 + dkappa: 0 + ddkappa: 0 + } + v: 5.085347402487252 + a: -1.2628786905111156e-15 + relative_time: 7.99999999999998 +} +decision { + main_decision { + cruise { + } + } + object_decision { + decision { + id: "3_0" + perception_id: 3 + object_decision { + follow { + distance_s: -28.399999618530273 + fence_point { + x: 587273.60226721736 + y: 4140999.5344388308 + z: 0 + } + fence_heading: -1.76677288986555 + } + } + } + decision { + id: "711_0" + perception_id: 711 + object_decision { + ignore { + } + } + } + decision { + id: "DEST" + perception_id: -1109540454 + object_decision { + ignore { + } + } + } + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/result_follow_02_0.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/result_follow_02_0.pb.txt new file mode 100644 index 00000000000..a3f85747391 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/result_follow_02_0.pb.txt @@ -0,0 +1,2312 @@ +header { + module_name: "planning" +} +is_replan: true +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: 587713.4474466031 + y: 4141426.4113508877 + z: 0 + theta: -1.7822751774519645 + kappa: -0.015131821269053639 + dkappa: 0 + ddkappa: 0 + } + v: 6.0611109733581543 + a: 1.4250699344182995 + relative_time: 0 +} +trajectory_point { + path_point { + x: 587713.38126973226 + y: 4141426.1138298516 + theta: -1.7868516563792505 + kappa: -0.014973072912666703 + s: 0.30479197036435013 + dkappa: 0 + ddkappa: 0 + } + v: 6.129679653610232 + a: 1.3184851030778355 + relative_time: 0.05 +} +trajectory_point { + path_point { + x: 587713.31437696668 + y: 4141425.8130902639 + theta: -1.791477766406224 + kappa: -0.014812607232959131 + s: 0.612881148778996 + dkappa: 0 + ddkappa: 0 + } + v: 6.1930391070740392 + a: 1.2166776762234748 + relative_time: 0.1 +} +trajectory_point { + path_point { + x: 587713.24682357442 + y: 4141425.509380599 + theta: -1.7961494883118252 + kappa: -0.014650556808900142 + s: 0.92401298769347207 + dkappa: 0 + ddkappa: 0 + } + v: 6.251424725974279 + a: 1.1195085338710911 + relative_time: 0.15000000000000002 +} +trajectory_point { + path_point { + x: 587713.1752067185 + y: 4141425.2037333972 + theta: -1.8005794175612071 + kappa: -0.014215424685909002 + s: 1.237944535268567 + dkappa: 0 + ddkappa: 0 + } + v: 6.3050649465364463 + a: 1.0268385560365585 + relative_time: 0.2 +} +trajectory_point { + path_point { + x: 587713.1019426845 + y: 4141424.8958302503 + theta: -1.8049585610556231 + kappa: -0.013693307215318015 + s: 1.5544440875763641 + dkappa: 0 + ddkappa: 0 + } + v: 6.35418124898683 + a: 0.93852862273575122 + relative_time: 0.25 +} +trajectory_point { + path_point { + x: 587713.028135315 + y: 4141424.5856436542 + theta: -1.8093701489871887 + kappa: -0.01316731765518896 + s: 1.8732908408002822 + dkappa: 0 + ddkappa: 0 + } + v: 6.3989881575525143 + a: 0.85443961398454316 + relative_time: 0.3 +} +trajectory_point { + path_point { + x: 587712.951371989 + y: 4141424.2739803144 + theta: -1.8134132018569489 + kappa: -0.012487928785648476 + s: 2.1942745434351125 + dkappa: 0 + ddkappa: 0 + } + v: 6.4396932404613763 + a: 0.77443240979880867 + relative_time: 0.35 +} +trajectory_point { + path_point { + x: 587712.87264452688 + y: 4141423.9608035213 + theta: -1.8172380274497444 + kappa: -0.011713045254448055 + s: 2.5171951484870609 + dkappa: 0 + ddkappa: 0 + } + v: 6.4764971099420849 + a: 0.69836789019442158 + relative_time: 0.39999999999999997 +} +trajectory_point { + path_point { + x: 587712.79349121964 + y: 4141423.645932721 + theta: -1.8210835333114226 + kappa: -0.010933970295243933 + s: 2.8418624656737865 + dkappa: 0 + ddkappa: 0 + } + v: 6.5095934222241052 + a: 0.626106935187256 + relative_time: 0.44999999999999996 +} +trajectory_point { + path_point { + x: 587712.71213787189 + y: 4141423.330010525 + theta: -1.8244811440110063 + kappa: -0.010093755221577074 + s: 3.1680958136244413 + dkappa: 0 + ddkappa: 0 + } + v: 6.539168877537695 + a: 0.557510424793186 + relative_time: 0.49999999999999994 +} +trajectory_point { + path_point { + x: 587712.62888440606 + y: 4141423.0131369322 + theta: -1.8274951400392918 + kappa: -0.0092009572175427087 + s: 3.49572367207971 + dkappa: 0 + ddkappa: 0 + } + v: 6.5654032201139065 + a: 0.49243923902808562 + relative_time: 0.54999999999999993 +} +trajectory_point { + path_point { + x: 587712.54531792679 + y: 4141422.6950719687 + theta: -1.8305204670487123 + kappa: -0.0083048025033612815 + s: 3.8245833340918507 + dkappa: 0 + ddkappa: 0 + } + v: 6.5884692381845849 + a: 0.43075425790782917 + relative_time: 0.6 +} +trajectory_point { + path_point { + x: 587712.46023811016 + y: 4141422.37629563 + theta: -1.8331175431786013 + kappa: -0.0074264097693290147 + s: 4.154520558224732 + dkappa: 0 + ddkappa: 0 + } + v: 6.6085327639823683 + a: 0.37231636144829006 + relative_time: 0.65 +} +trajectory_point { + path_point { + x: 587712.37367751962 + y: 4141422.056950463 + theta: -1.8352834576804302 + kappa: -0.0065662534876439419 + s: 4.4853892207538744 + dkappa: 0 + ddkappa: 0 + } + v: 6.62575267374069 + a: 0.31698642966534329 + relative_time: 0.70000000000000007 +} +trajectory_point { + path_point { + x: 587712.28690944542 + y: 4141421.7368398323 + theta: -1.8374545639922621 + kappa: -0.0057040354311108992 + s: 4.8170509678664919 + dkappa: 0 + ddkappa: 0 + } + v: 6.6402808876937769 + a: 0.26462534257486214 + relative_time: 0.75000000000000011 +} +trajectory_point { + path_point { + x: 587712.19913168019 + y: 4141421.4163192408 + theta: -1.8392521802295987 + kappa: -0.0049515200834385287 + s: 5.1493748678615265 + dkappa: 0 + ddkappa: 0 + } + v: 6.6522623700766488 + a: 0.21509398019272119 + relative_time: 0.80000000000000016 +} +trajectory_point { + path_point { + x: 587712.110332768 + y: 4141421.0955202477 + theta: -1.8406557015867502 + kappa: -0.0043148718857953586 + s: 5.4822370633496948 + dkappa: 0 + ddkappa: 0 + } + v: 6.6618351291251194 + a: 0.16825322253479436 + relative_time: 0.8500000000000002 +} +trajectory_point { + path_point { + x: 587712.0214215 + y: 4141420.7743153526 + theta: -1.8420609988569538 + kappa: -0.00367741814851115 + s: 5.81552042345352 + dkappa: 0 + ddkappa: 0 + } + v: 6.6691302170757965 + a: 0.12396394961695578 + relative_time: 0.90000000000000024 +} +trajectory_point { + path_point { + x: 587711.9318967415 + y: 4141420.4529591491 + theta: -1.8431999714721774 + kappa: -0.0030922040748075667 + s: 6.1491141960073783 + dkappa: 0 + ddkappa: 0 + } + v: 6.6742717301660806 + a: 0.082087041455078946 + relative_time: 0.95000000000000029 +} +trajectory_point { + path_point { + x: 587711.84176800214 + y: 4141420.1315576993 + theta: -1.8440628889815838 + kappa: -0.0025612645372334805 + s: 6.4829136597575356 + dkappa: 0 + ddkappa: 0 + } + v: 6.6773768086341683 + a: 0.0424833780650391 + relative_time: 1.0000000000000002 +} +trajectory_point { + path_point { + x: 587711.75161046546 + y: 4141419.8100535572 + theta: -1.8449260822078182 + kappa: -0.002030155357914626 + s: 6.8168197765621859 + dkappa: 0 + ddkappa: 0 + } + v: 6.6785556367190466 + a: 0.0050138394627088356 + relative_time: 1.0500000000000003 +} +trajectory_point { + path_point { + x: 587711.6611678442 + y: 4141419.488616175 + theta: -1.8455061851520729 + kappa: -0.0014734072654022717 + s: 7.150738843591494 + dkappa: 0 + ddkappa: 0 + } + v: 6.6779114426604984 + a: -0.03046069433603682 + relative_time: 1.1000000000000003 +} +trajectory_point { + path_point { + x: 587711.57046709629 + y: 4141419.1673301263 + theta: -1.8458059897003776 + kappa: -0.00089143466951085277 + s: 7.4845821455276331 + dkappa: 0 + ddkappa: 0 + } + v: 6.6755404986991005 + a: -0.064079343315323722 + relative_time: 1.1500000000000004 +} +trajectory_point { + path_point { + x: 587711.47980977478 + y: 4141418.8461979073 + theta: -1.8461056507049503 + kappa: -0.00030974071604226029 + s: 7.8182656067648244 + dkappa: 0 + ddkappa: 0 + } + v: 6.671532121076222 + a: -0.095981227459278173 + relative_time: 1.2000000000000004 +} +trajectory_point { + path_point { + x: 587711.38921131147 + y: 4141418.5252980618 + theta: -1.8461048972389131 + kappa: 0.00027669194849237147 + s: 8.1517094436093789 + dkappa: 0 + ddkappa: 0 + } + v: 6.6659686700340259 + a: -0.12630546675202603 + relative_time: 1.2500000000000004 +} +trajectory_point { + path_point { + x: 587711.29869263154 + y: 4141418.204703487 + theta: -1.8458190833092221 + kappa: 0.00086746621552511143 + s: 8.4848378164797325 + dkappa: 0 + ddkappa: 0 + } + v: 6.6589255498154705 + a: -0.15519118117769359 + relative_time: 1.3000000000000005 +} +trajectory_point { + path_point { + x: 587711.2082793006 + y: 4141417.8844820322 + theta: -1.8455336020211646 + kappa: 0.0014575529173988598 + s: 8.8175784821064926 + dkappa: 0 + ddkappa: 0 + } + v: 6.6504712086643059 + a: -0.18277749072040561 + relative_time: 1.3500000000000005 +} +trajectory_point { + path_point { + x: 587711.11827826162 + y: 4141417.5646189973 + theta: -1.8449510985046229 + kappa: 0.0020302878960344974 + s: 9.1498624457324738 + dkappa: 0 + ddkappa: 0 + } + v: 6.6406671388250773 + a: -0.20920351536428905 + relative_time: 1.4000000000000006 +} +trajectory_point { + path_point { + x: 587711.02868925093 + y: 4141417.2451831168 + theta: -1.8440904344573128 + kappa: 0.0025865998956284006 + s: 9.481623613312733 + dkappa: 0 + ddkappa: 0 + } + v: 6.6295678765431223 + a: -0.23460837509347021 + relative_time: 1.4500000000000006 +} +trajectory_point { + path_point { + x: 587710.93925857509 + y: 4141416.9263117909 + theta: -1.843231291517381 + kappa: 0.0031419286987544484 + s: 9.81279844371462 + dkappa: 0 + ddkappa: 0 + } + v: 6.6172210020645732 + a: -0.25913118989207362 + relative_time: 1.5000000000000007 +} +trajectory_point { + path_point { + x: 587710.85054612753 + y: 4141416.6079126834 + theta: -1.8421106807029852 + kappa: 0.0036614884428435158 + s: 10.143325600917807 + dkappa: 0 + ddkappa: 0 + } + v: 6.6036671396363555 + a: -0.28291107974422625 + relative_time: 1.5500000000000007 +} +trajectory_point { + path_point { + x: 587710.76255470654 + y: 4141416.2900467589 + theta: -1.8407351759185315 + kappa: 0.0041460260350782013 + s: 10.473145606214334 + dkappa: 0 + ddkappa: 0 + } + v: 6.58893995750619 + a: -0.30608716463405394 + relative_time: 1.6000000000000008 +} +trajectory_point { + path_point { + x: 587710.67476740922 + y: 4141415.9729182255 + theta: -1.8393628620117097 + kappa: 0.0046294395901693474 + s: 10.802200490408646 + dkappa: 0 + ddkappa: 0 + } + v: 6.5730661679225868 + a: -0.32879856454568279 + relative_time: 1.6500000000000008 +} +trajectory_point { + path_point { + x: 587710.58793026162 + y: 4141415.6563814175 + theta: -1.8377880334532934 + kappa: 0.0050625687325983213 + s: 11.130433446017635 + dkappa: 0 + ddkappa: 0 + } + v: 6.5560655271348551 + a: -0.351184399463238 + relative_time: 1.7000000000000008 +} +trajectory_point { + path_point { + x: 587710.50212792261 + y: 4141415.3404711829 + theta: -1.8359912670863696 + kappa: 0.00544064957646424 + s: 11.457788479470675 + dkappa: 0 + ddkappa: 0 + } + v: 6.5379508353930955 + a: -0.37338378937084582 + relative_time: 1.7500000000000009 +} +trajectory_point { + path_point { + x: 587710.4165702482 + y: 4141415.0254617627 + theta: -1.8341996236282769 + kappa: 0.0058176523265734753 + s: 11.78421006330967 + dkappa: 0 + ddkappa: 0 + } + v: 6.518727936948201 + a: -0.3955358542526326 + relative_time: 1.8000000000000009 +} +trajectory_point { + path_point { + x: 587710.33206775563 + y: 4141414.7111929925 + theta: -1.8322820009567382 + kappa: 0.00613707480415282 + s: 12.109642788389083 + dkappa: 0 + ddkappa: 0 + } + v: 6.4983957200518612 + a: -0.41777971409272352 + relative_time: 1.850000000000001 +} +trajectory_point { + path_point { + x: 587710.24891986232 + y: 4141414.3976421189 + theta: -1.8301916606520967 + kappa: 0.0063786572421964931 + s: 12.434031016075984 + dkappa: 0 + ddkappa: 0 + } + v: 6.4769461169565554 + a: -0.44025448887524554 + relative_time: 1.900000000000001 +} +trajectory_point { + path_point { + x: 587710.16605410632 + y: 4141414.0851551862 + theta: -1.8281084111927739 + kappa: 0.006619419943323112 + s: 12.757318530450089 + dkappa: 0 + ddkappa: 0 + } + v: 6.45436410391556 + a: -0.46309929858432364 + relative_time: 1.9500000000000011 +} +trajectory_point { + path_point { + x: 587710.08419599361 + y: 4141413.7736014687 + theta: -1.8259776460349464 + kappa: 0.0068046452328351017 + s: 13.07944819050379 + dkappa: 0 + ddkappa: 0 + } + v: 6.4306277011829449 + a: -0.48645326320408377 + relative_time: 2.0000000000000009 +} +trajectory_point { + path_point { + x: 587710.004021517 + y: 4141413.46286228 + theta: -1.8237485255618378 + kappa: 0.0068834069569287237 + s: 13.400363740076552 + dkappa: 0 + ddkappa: 0 + } + v: 6.4058397458590912 + a: -0.50499760365623925 + relative_time: 2.0500000000000007 +} +trajectory_point { + path_point { + x: 587709.92416242871 + y: 4141413.1533454703 + theta: -1.8215281692188 + kappa: 0.00696185885000163 + s: 13.720016879596304 + dkappa: 0 + ddkappa: 0 + } + v: 6.3801346573080009 + a: -0.52313895466760074 + relative_time: 2.1000000000000005 +} +trajectory_point { + path_point { + x: 587709.845106942 + y: 4141412.8449736862 + theta: -1.8193199007265546 + kappa: 0.0069987041122455866 + s: 14.038362255232556 + dkappa: 0 + ddkappa: 0 + } + v: 6.3535325306456061 + a: -0.54087949048244166 + relative_time: 2.1500000000000004 +} +trajectory_point { + path_point { + x: 587709.76805602107 + y: 4141412.5374872917 + theta: -1.8171314612424869 + kappa: 0.0068909187357644661 + s: 14.3553555151928 + dkappa: 0 + ddkappa: 0 + } + v: 6.3260533522756273 + a: -0.55822138534503507 + relative_time: 2.2 +} +trajectory_point { + path_point { + x: 587709.69134429446 + y: 4141412.2313545179 + theta: -1.8149526483772302 + kappa: 0.0067836078531343944 + s: 14.670953304286911 + dkappa: 0 + ddkappa: 0 + } + v: 6.29771699988957 + a: -0.57516681349965437 + relative_time: 2.25 +} +trajectory_point { + path_point { + x: 587709.61510601058 + y: 4141411.9265858303 + theta: -1.8127965790384211 + kappa: 0.0066638886635590608 + s: 14.985113258491538 + dkappa: 0 + ddkappa: 0 + } + v: 6.2685432424667242 + a: -0.59171794919057275 + relative_time: 2.3 +} +trajectory_point { + path_point { + x: 587709.54110426432 + y: 4141411.6227882206 + theta: -1.8108446122263293 + kappa: 0.00634937015383888 + s: 15.297793999514482 + dkappa: 0 + ddkappa: 0 + } + v: 6.2385517402741693 + a: -0.6078769666620637 + relative_time: 2.3499999999999996 +} +trajectory_point { + path_point { + x: 587709.46746216249 + y: 4141411.320467052 + theta: -1.8089021239597 + kappa: 0.0060363801867516689 + s: 15.6089551293591 + dkappa: 0 + ddkappa: 0 + } + v: 6.2077620448667705 + a: -0.62364604015840019 + relative_time: 2.3999999999999995 +} +trajectory_point { + path_point { + x: 587709.3941890354 + y: 4141411.0196606247 + theta: -1.8069693750110858 + kappa: 0.0057249584171420584 + s: 15.918557224888684 + dkappa: 0 + ddkappa: 0 + } + v: 6.1761935990871777 + a: -0.63902734392385585 + relative_time: 2.4499999999999993 +} +trajectory_point { + path_point { + x: 587709.322733081 + y: 4141410.7200600421 + theta: -1.8054065762998401 + kappa: 0.0052333730186873246 + s: 16.22656183239085 + dkappa: 0 + ddkappa: 0 + } + v: 6.1438657370658287 + a: -0.65402305220270363 + relative_time: 2.4999999999999991 +} +trajectory_point { + path_point { + x: 587709.2519018749 + y: 4141410.4219907713 + theta: -1.803913461815426 + kappa: 0.0047133959436188779 + s: 16.532931462141931 + dkappa: 0 + ddkappa: 0 + } + v: 6.1107976842209464 + a: -0.668635339239217 + relative_time: 2.5499999999999989 +} +trajectory_point { + path_point { + x: 587709.18145711382 + y: 4141410.1255477234 + theta: -1.8024284950545373 + kappa: 0.0041962557891705634 + s: 16.837629582971378 + dkappa: 0 + ddkappa: 0 + } + v: 6.0770085572585408 + a: -0.68286637927766924 + relative_time: 2.5999999999999988 +} +trajectory_point { + path_point { + x: 587709.11209827545 + y: 4141409.8306026962 + theta: -1.8012661722587016 + kappa: 0.0036796887148949618 + s: 17.140620616826119 + dkappa: 0 + ddkappa: 0 + } + v: 6.04251736417241 + a: -0.69671834656233367 + relative_time: 2.6499999999999986 +} +trajectory_point { + path_point { + x: 587709.043613564 + y: 4141409.5372411525 + theta: -1.8003267100415026 + kappa: 0.0031644925443071337 + s: 17.441869933334978 + dkappa: 0 + ddkappa: 0 + } + v: 6.0073430042441336 + a: -0.71019341533748337 + relative_time: 2.6999999999999984 +} +trajectory_point { + path_point { + x: 587708.97553246573 + y: 4141409.2456085291 + theta: -1.7993927844172384 + kappa: 0.0026523326697361427 + s: 17.741343844373048 + dkappa: 0 + ddkappa: 0 + } + v: 5.9715042680430823 + a: -0.72329375984739175 + relative_time: 2.7499999999999982 +} +trajectory_point { + path_point { + x: 587708.90804166556 + y: 4141408.9556950931 + theta: -1.7985919035856166 + kappa: 0.0021619678551185444 + s: 18.039009598626084 + dkappa: 0 + ddkappa: 0 + } + v: 5.9350198374264105 + a: -0.73602155433633221 + relative_time: 2.799999999999998 +} +trajectory_point { + path_point { + x: 587708.841455888 + y: 4141408.667460423 + theta: -1.7981427322122427 + kappa: 0.0017255376598855851 + s: 18.334835376154903 + dkappa: 0 + ddkappa: 0 + } + v: 5.897908285539061 + a: -0.7483789730485777 + relative_time: 2.8499999999999979 +} +trajectory_point { + path_point { + x: 587708.77529121446 + y: 4141408.381048616 + theta: -1.7976964014273344 + kappa: 0.0012918675502751108 + s: 18.628790282959752 + dkappa: 0 + ddkappa: 0 + } + v: 5.86018807681376 + a: -0.76036819022840185 + relative_time: 2.8999999999999977 +} +trajectory_point { + path_point { + x: 587708.70955439121 + y: 4141408.0964888763 + theta: -1.7972529569191387 + kappa: 0.00086100174602613086 + s: 18.920844345544715 + dkappa: 0 + ddkappa: 0 + } + v: 5.8218775669710237 + a: -0.77199138012007773 + relative_time: 2.9499999999999975 +} +trajectory_point { + path_point { + x: 587708.6444541458 + y: 4141407.8137628953 + theta: -1.7971503492069307 + kappa: 0.00050169716631611242 + s: 19.210968505482096 + dkappa: 0 + ddkappa: 0 + } + v: 5.7829950030191508 + a: -0.78325071696787885 + relative_time: 2.9999999999999973 +} +trajectory_point { + path_point { + x: 587708.57982207718 + y: 4141407.5329383919 + theta: -1.7970965906645913 + kappa: 0.00015461030858642951 + s: 19.499134613976807 + dkappa: 0 + ddkappa: 0 + } + v: 5.7435585232542294 + a: -0.79414837501607816 + relative_time: 3.0499999999999972 +} +trajectory_point { + path_point { + x: 587708.51563528564 + y: 4141407.254048605 + theta: -1.7970432024872292 + kappa: -0.00019008532358224178 + s: 19.78531542643076 + dkappa: 0 + ddkappa: 0 + } + v: 5.7035861572601316 + a: -0.80468652850894906 + relative_time: 3.099999999999997 +} +trajectory_point { + path_point { + x: 587708.45185911155 + y: 4141406.9771285541 + theta: -1.7971110603089941 + kappa: -0.0004963638478171729 + s: 20.069484597007254 + dkappa: 0 + ddkappa: 0 + } + v: 5.6630958259085187 + a: -0.81486735169076507 + relative_time: 3.1499999999999968 +} +trajectory_point { + path_point { + x: 587708.38848033745 + y: 4141406.7022074028 + theta: -1.7973565561353728 + kappa: -0.0007474030260281885 + s: 20.35161667319537 + dkappa: 0 + ddkappa: 0 + } + v: 5.6221053413588358 + a: -0.82469301880579915 + relative_time: 3.1999999999999966 +} +trajectory_point { + path_point { + x: 587708.325564699 + y: 4141406.4292952176 + theta: -1.7976002580300878 + kappa: -0.00099660775425252529 + s: 20.631687090374349 + dkappa: 0 + ddkappa: 0 + } + v: 5.5806324070583138 + a: -0.83416570409832469 + relative_time: 3.2499999999999964 +} +trajectory_point { + path_point { + x: 587708.26311751641 + y: 4141406.1584150745 + theta: -1.7978421453573581 + kappa: -0.0012439569602618141 + s: 20.909672166377998 + dkappa: 0 + ddkappa: 0 + } + v: 5.5386946177419736 + a: -0.84328758181261509 + relative_time: 3.2999999999999963 +} +trajectory_point { + path_point { + x: 587708.2008613951 + y: 4141405.8896545121 + theta: -1.7982468613117824 + kappa: -0.0014080869435717949 + s: 21.185549096059056 + dkappa: 0 + ddkappa: 0 + } + v: 5.4963094594326192 + a: -0.85206082619294343 + relative_time: 3.3499999999999961 +} +trajectory_point { + path_point { + x: 587708.13903380535 + y: 4141405.6229811404 + theta: -1.7986788511047367 + kappa: -0.001555932793713276 + s: 21.459295945853611 + dkappa: 0 + ddkappa: 0 + } + v: 5.453494309440841 + a: -0.8604876114835831 + relative_time: 3.3999999999999959 +} +trajectory_point { + path_point { + x: 587708.07769206678 + y: 4141405.3584033325 + theta: -1.79910744624768 + kappa: -0.0017026168470998882 + s: 21.730891648345469 + dkappa: 0 + ddkappa: 0 + } + v: 5.4102664363650179 + a: -0.8685701119288074 + relative_time: 3.4499999999999957 +} +trajectory_point { + path_point { + x: 587708.01675365749 + y: 4141405.0959610445 + theta: -1.7995524006453036 + kappa: -0.0018349162911088035 + s: 22.000315996830544 + dkappa: 0 + ddkappa: 0 + } + v: 5.3666430000913135 + a: -0.87631050177288961 + relative_time: 3.4999999999999956 +} +trajectory_point { + path_point { + x: 587707.95592717128 + y: 4141404.8357419856 + theta: -1.8000808847412477 + kappa: -0.0019079479907487826 + s: 22.26754963988126 + dkappa: 0 + ddkappa: 0 + } + v: 5.3226410517936769 + a: -0.883710955260103 + relative_time: 3.5499999999999954 +} +trajectory_point { + path_point { + x: 587707.89560353453 + y: 4141404.5776741449 + theta: -1.8006050000854341 + kappa: -0.0019803759410188804 + s: 22.532574075910937 + dkappa: 0 + ddkappa: 0 + } + v: 5.2782775339338466 + a: -0.89077364663472081 + relative_time: 3.5999999999999952 +} +trajectory_point { + path_point { + x: 587707.83578676626 + y: 4141404.3217747151 + theta: -1.8011247114695104 + kappa: -0.002052195316426488 + s: 22.795371647738165 + dkappa: 0 + ddkappa: 0 + } + v: 5.233569280261344 + a: -0.89750075014101638 + relative_time: 3.649999999999995 +} +trajectory_point { + path_point { + x: 587707.77626533981 + y: 4141404.0681106476 + theta: -1.8016580679735066 + kappa: -0.0021022996980207022 + s: 23.055925537151207 + dkappa: 0 + ddkappa: 0 + } + v: 5.188533015813479 + a: -0.90389444002326291 + relative_time: 3.6999999999999948 +} +trajectory_point { + path_point { + x: 587707.71695510542 + y: 4141403.8167181229 + theta: -1.802212409780785 + kappa: -0.0021220826999863471 + s: 23.3142197594724 + dkappa: 0 + ddkappa: 0 + } + v: 5.1431853569153478 + a: -0.90995689052573359 + relative_time: 3.7499999999999947 +} +trajectory_point { + path_point { + x: 587707.65816722228 + y: 4141403.5675396384 + theta: -1.8027618696175507 + kappa: -0.00214169147102746 + s: 23.570239158122515 + dkappa: 0 + ddkappa: 0 + } + v: 5.0975428111798315 + a: -0.915690275892702 + relative_time: 3.7999999999999945 +} +trajectory_point { + path_point { + x: 587707.59990498191 + y: 4141403.3205891442 + theta: -1.8033064163888806 + kappa: -0.0021611249132956504 + s: 23.823969399185167 + dkappa: 0 + ddkappa: 0 + } + v: 5.0516217775075987 + a: -0.92109677036844118 + relative_time: 3.8499999999999943 +} +trajectory_point { + path_point { + x: 587707.5419000031 + y: 4141403.0759441569 + theta: -1.8038453256852665 + kappa: -0.0021596488763012318 + s: 24.075396965971194 + dkappa: 0 + ddkappa: 0 + } + v: 5.0054385460871034 + a: -0.92617854819722445 + relative_time: 3.8999999999999941 +} +trajectory_point { + path_point { + x: 587707.48417350731 + y: 4141402.8336127028 + theta: -1.8043786177337349 + kappa: -0.0021386602582990437 + s: 24.324509153583069 + dkappa: 0 + ddkappa: 0 + } + v: 4.9590092983945873 + a: -0.93093778362332524 + relative_time: 3.949999999999994 +} +trajectory_point { + path_point { + x: 587707.42698630912 + y: 4141402.5935451789 + theta: -1.8049069277605865 + kappa: -0.0021178677220037687 + s: 24.57129406347925 + dkappa: 0 + ddkappa: 0 + } + v: 4.9123501071940776 + a: -0.93537665089101674 + relative_time: 3.9999999999999938 +} +trajectory_point { + path_point { + x: 587707.37034096243 + y: 4141402.355752307 + theta: -1.8054302318758628 + kappa: -0.002097272196040677 + s: 24.81574067388247 + dkappa: 0 + ddkappa: 0 + } + v: 4.8654816044283153 + a: -0.93930115017946514 + relative_time: 4.0499999999999936 +} +trajectory_point { + path_point { + x: 587707.3140123128 + y: 4141402.1202981207 + theta: -1.8059316491606647 + kappa: -0.0020630917460488928 + s: 25.057839109556607 + dkappa: 0 + ddkappa: 0 + } + v: 4.81842624388512 + a: -0.94285054692857462 + relative_time: 4.0999999999999934 +} +trajectory_point { + path_point { + x: 587707.25797685119 + y: 4141401.8871973692 + theta: -1.8064092660893396 + kappa: -0.0020137779084030225 + s: 25.29758049752861 + dkappa: 0 + ddkappa: 0 + } + v: 4.7712028429504239 + a: -0.946022350779724 + relative_time: 4.1499999999999932 +} +trajectory_point { + path_point { + x: 587707.20249416248 + y: 4141401.6563960873 + theta: -1.8068821716018257 + kappa: -0.0019649505369349713 + s: 25.534956908807679 + dkappa: 0 + ddkappa: 0 + } + v: 4.7238303435280908 + a: -0.94881407137429175 + relative_time: 4.1999999999999931 +} +trajectory_point { + path_point { + x: 587707.147565878 + y: 4141401.4279010594 + theta: -1.8073503515826024 + kappa: -0.0019166110671522173 + s: 25.769961364611145 + dkappa: 0 + ddkappa: 0 + } + v: 4.676327812039915 + a: -0.95122321835365664 + relative_time: 4.2499999999999929 +} +trajectory_point { + path_point { + x: 587707.09308305918 + y: 4141401.2017447767 + theta: -1.8077986677446636 + kappa: -0.0018636563272247568 + s: 26.002587842590387 + dkappa: 0 + ddkappa: 0 + } + v: 4.6287144394256226 + a: -0.95324730135919722 + relative_time: 4.2999999999999927 +} +trajectory_point { + path_point { + x: 587707.03884687822 + y: 4141400.9779804396 + theta: -1.8081996931471147 + kappa: -0.0017968352434191146 + s: 26.232831283056722 + dkappa: 0 + ddkappa: 0 + } + v: 4.58100954114287 + a: -0.95488383003229238 + relative_time: 4.3499999999999925 +} +trajectory_point { + path_point { + x: 587706.98517300969 + y: 4141400.7565360568 + theta: -1.8085965608956487 + kappa: -0.0017307069502568023 + s: 26.460687595207283 + dkappa: 0 + ddkappa: 0 + } + v: 4.5332325571672447 + a: -0.95613031401432058 + relative_time: 4.3999999999999924 +} +trajectory_point { + path_point { + x: 587706.93206218735 + y: 4141400.537414656 + theta: -1.8089892654368607 + kappa: -0.0016652723519714324 + s: 26.686153663350943 + dkappa: 0 + ddkappa: 0 + } + v: 4.4854030519922663 + a: -0.9569842629466605 + relative_time: 4.4499999999999922 +} +trajectory_point { + path_point { + x: 587706.879514914 + y: 4141400.3206183105 + theta: -1.8093778029343683 + kappa: -0.0016005320679935257 + s: 26.9092273531342 + dkappa: 0 + ddkappa: 0 + } + v: 4.4375407146293844 + a: -0.95744318647069093 + relative_time: 4.499999999999992 +} +trajectory_point { + path_point { + x: 587706.82724056672 + y: 4141400.1062188866 + theta: -1.8097022885817804 + kappa: -0.0015277929352570806 + s: 27.129907517767062 + dkappa: 0 + ddkappa: 0 + } + v: 4.38966535860798 + a: -0.95750459422779044 + relative_time: 4.5499999999999918 +} +trajectory_point { + path_point { + x: 587706.77548652422 + y: 4141399.894156374 + theta: -1.8100136399275737 + kappa: -0.0014544469695429562 + s: 27.348194004248967 + dkappa: 0 + ddkappa: 0 + } + v: 4.3417969219753649 + a: -0.95716599585933759 + relative_time: 4.5999999999999917 +} +trajectory_point { + path_point { + x: 587706.72429980361 + y: 4141399.6844184659 + theta: -1.8103215783009499 + kappa: -0.0013819050137943833 + s: 27.564087659594655 + dkappa: 0 + ddkappa: 0 + } + v: 4.293955467296783 + a: -0.95642490100671129 + relative_time: 4.6499999999999915 +} +trajectory_point { + path_point { + x: 587706.67367996532 + y: 4141399.477003362 + theta: -1.8106261062870295 + kappa: -0.0013101664453028729 + s: 27.777590337060087 + dkappa: 0 + ddkappa: 0 + } + v: 4.246161181655407 + a: -0.95527881931129 + relative_time: 4.6999999999999913 +} +trajectory_point { + path_point { + x: 587706.62356423668 + y: 4141399.271923474 + theta: -1.8109098042991263 + kappa: -0.0012388084625425434 + s: 27.988704902368323 + dkappa: 0 + ddkappa: 0 + } + v: 4.1984343766523438 + a: -0.95372526041445238 + relative_time: 4.7499999999999911 +} +trajectory_point { + path_point { + x: 587706.57382081822 + y: 4141399.069207056 + theta: -1.8111359529681874 + kappa: -0.001166940621584057 + s: 28.19743523993543 + dkappa: 0 + ddkappa: 0 + } + v: 4.1507954884066294 + a: -0.95176173395757713 + relative_time: 4.7999999999999909 +} +trajectory_point { + path_point { + x: 587706.52464442514 + y: 4141398.8688014033 + theta: -1.8113595237933369 + kappa: -0.0010958920025882066 + s: 28.403786259096378 + dkappa: 0 + ddkappa: 0 + } + v: 4.1032650775552311 + a: -0.949385749582043 + relative_time: 4.8499999999999908 +} +trajectory_point { + path_point { + x: 587706.476033642 + y: 4141398.6707007475 + theta: -1.8115805231879176 + kappa: -0.0010256605601912962 + s: 28.60776390033093 + dkappa: 0 + ddkappa: 0 + } + v: 4.0558638292530471 + a: -0.94659481692922853 + relative_time: 4.8999999999999906 +} +trajectory_point { + path_point { + x: 587706.42798680579 + y: 4141398.4748983113 + theta: -1.8117989586907375 + kappa: -0.00095624389185303116 + s: 28.809375141489539 + dkappa: 0 + ddkappa: 0 + } + v: 4.0086125531729069 + a: -0.94338644564051255 + relative_time: 4.94999999999999 +} +trajectory_point { + path_point { + x: 587706.38043757912 + y: 4141398.2814021441 + theta: -1.8119906700110846 + kappa: -0.00088981259085578056 + s: 29.008628004019258 + dkappa: 0 + ddkappa: 0 + } + v: 3.9615321835055717 + a: -0.93975814535727342 + relative_time: 4.99999999999999 +} +trajectory_point { + path_point { + x: 587706.33333862247 + y: 4141398.0902145449 + theta: -1.8121387187718641 + kappa: -0.00082788757692670565 + s: 29.205531559189613 + dkappa: 0 + ddkappa: 0 + } + v: 3.9146437789597326 + a: -0.93570742572089 + relative_time: 5.04999999999999 +} +trajectory_point { + path_point { + x: 587706.28679919336 + y: 4141397.9012982203 + theta: -1.8122850087465185 + kappa: -0.00076669822140930225 + s: 29.400095934318522 + dkappa: 0 + ddkappa: 0 + } + v: 3.8679685227620126 + a: -0.93123179637274112 + relative_time: 5.09999999999999 +} +trajectory_point { + path_point { + x: 587706.24081661494 + y: 4141397.7146423063 + theta: -1.8124295483419153 + kappa: -0.000706241005242415 + s: 29.592332318998178 + dkappa: 0 + ddkappa: 0 + } + v: 3.8215277226569651 + a: -0.92632876695420507 + relative_time: 5.14999999999999 +} +trajectory_point { + path_point { + x: 587706.19538795541 + y: 4141397.5302349012 + theta: -1.8125723467687553 + kappa: -0.00064651207332784382 + s: 29.782252971320958 + dkappa: 0 + ddkappa: 0 + } + v: 3.7753428109070759 + a: -0.92099584710666071 + relative_time: 5.1999999999999895 +} +trajectory_point { + path_point { + x: 587706.15048873017 + y: 4141397.3480683118 + theta: -1.8127031276809082 + kappa: -0.00058995514554549858 + s: 29.9698712241053 + dkappa: 0 + ddkappa: 0 + } + v: 3.72943534429276 + a: -0.91523054647148672 + relative_time: 5.2499999999999893 +} +trajectory_point { + path_point { + x: 587706.106049347 + y: 4141397.1681448584 + theta: -1.8127899520066235 + kappa: -0.00054416901728691794 + s: 30.155201491121623 + dkappa: 0 + ddkappa: 0 + } + v: 3.6838270041123646 + a: -0.90903037469006176 + relative_time: 5.2999999999999892 +} +trajectory_point { + path_point { + x: 587706.06215487118 + y: 4141396.9904275923 + theta: -1.8128757117107417 + kappa: -0.00049894430990738618 + s: 30.338259273318197 + dkappa: 0 + ddkappa: 0 + } + v: 3.6385395961821683 + a: -0.90239284140376441 + relative_time: 5.349999999999989 +} +trajectory_point { + path_point { + x: 587706.0188013236 + y: 4141396.8149004038 + theta: -1.8129604145661475 + kappa: -0.00045427692374664134 + s: 30.519061165047066 + dkappa: 0 + ddkappa: 0 + } + v: 3.59359505083638 + a: -0.89531545625397335 + relative_time: 5.3999999999999888 +} +trajectory_point { + path_point { + x: 587705.97598446161 + y: 4141396.6415461143 + theta: -1.8130440688609775 + kappa: -0.00041016248747921817 + s: 30.697624860289935 + dkappa: 0 + ddkappa: 0 + } + v: 3.5490154229271402 + a: -0.88779572888206726 + relative_time: 5.4499999999999886 +} +trajectory_point { + path_point { + x: 587705.93369977723 + y: 4141396.4703464732 + theta: -1.8131266834015329 + kappa: -0.0003665963565763352 + s: 30.873969158884044 + dkappa: 0 + ddkappa: 0 + } + v: 3.5048228918245194 + a: -0.87983116892942492 + relative_time: 5.4999999999999885 +} +trajectory_point { + path_point { + x: 587705.89190163207 + y: 4141396.3012922504 + theta: -1.8131852410637175 + kappa: -0.00033583886126894704 + s: 31.048113972748116 + dkappa: 0 + ddkappa: 0 + } + v: 3.4610397614165205 + a: -0.8714192860374248 + relative_time: 5.5499999999999883 +} +trajectory_point { + path_point { + x: 587705.85060649458 + y: 4141396.1343577108 + theta: -1.81323187313591 + kappa: -0.00031142821388800766 + s: 31.220080332108196 + dkappa: 0 + ddkappa: 0 + } + v: 3.4176884601090771 + a: -0.86255758984744557 + relative_time: 5.5999999999999881 +} +trajectory_point { + path_point { + x: 587705.80982916011 + y: 4141395.9695163774 + theta: -1.813277920485115 + kappa: -0.00028732365354008525 + s: 31.389890391723586 + dkappa: 0 + ddkappa: 0 + } + v: 3.3747915408260534 + a: -0.853243590000866 + relative_time: 5.6499999999999879 +} +trajectory_point { + path_point { + x: 587705.76956403709 + y: 4141395.8067456447 + theta: -1.81332338942546 + kappa: -0.00026352187484276736 + s: 31.557567437112727 + dkappa: 0 + ddkappa: 0 + } + v: 3.3323716810092443 + a: -0.84347479613906473 + relative_time: 5.6999999999999877 +} +trajectory_point { + path_point { + x: 587705.72980526066 + y: 4141395.6460218052 + theta: -1.8133682865794019 + kappa: -0.00024001941101846558 + s: 31.723135890779098 + dkappa: 0 + ddkappa: 0 + } + v: 3.2904516826183778 + a: -0.83324871790342037 + relative_time: 5.7499999999999876 +} +trajectory_point { + path_point { + x: 587705.69054669153 + y: 4141395.4873200413 + theta: -1.8134126188794171 + kappa: -0.00021681263301064825 + s: 31.886621318437115 + dkappa: 0 + ddkappa: 0 + } + v: 3.2490544721311103 + a: -0.82256286493531161 + relative_time: 5.7999999999999874 +} +trajectory_point { + path_point { + x: 587705.65175646159 + y: 4141395.3306207191 + theta: -1.8134476901992447 + kappa: -0.00021083359829247129 + s: 32.048050435238018 + dkappa: 0 + ddkappa: 0 + } + v: 3.2082031005430314 + a: -0.81141474687611714 + relative_time: 5.8499999999999872 +} +trajectory_point { + path_point { + x: 587705.613444631 + y: 4141395.1758926371 + theta: -1.8134792365910715 + kappa: -0.00021093129983454896 + s: 32.207451111995788 + dkappa: 0 + ddkappa: 0 + } + v: 3.1679207433676604 + a: -0.79980187336721564 + relative_time: 5.899999999999987 +} +trajectory_point { + path_point { + x: 587705.57561335643 + y: 4141395.0231053531 + theta: -1.8135103872877543 + kappa: -0.00021102777587881581 + s: 32.364852381413009 + dkappa: 0 + ddkappa: 0 + } + v: 3.1282307006364487 + a: -0.78772175404998568 + relative_time: 5.9499999999999869 +} +trajectory_point { + path_point { + x: 587705.53825537907 + y: 4141394.872229551 + theta: -1.8135411482661614 + kappa: -0.00021112304493627483 + s: 32.52028444430681 + dkappa: 0 + ddkappa: 0 + } + v: 3.0891563968987783 + a: -0.77517189856580582 + relative_time: 5.9999999999999867 +} +trajectory_point { + path_point { + x: 587705.50136323785 + y: 4141394.7232350977 + theta: -1.8135715256698057 + kappa: -0.00021121712603402619 + s: 32.673778343510151 + dkappa: 0 + ddkappa: 0 + } + v: 3.0507018007542746 + a: -0.76290470897312823 + relative_time: 6.0499999999999865 +} +trajectory_point { + path_point { + x: 587705.46492947394 + y: 4141394.5760918697 + theta: -1.813601525640409 + kappa: -0.00021131003819360963 + s: 32.825365112783892 + dkappa: 0 + ddkappa: 0 + } + v: 3.0128764734294067 + a: -0.750004673704002 + relative_time: 6.0999999999999863 +} +trajectory_point { + path_point { + x: 587705.42893582594 + y: 4141394.4307711706 + theta: -1.8136346983658802 + kappa: -0.00021723724177458268 + s: 32.975076997806326 + dkappa: 0 + ddkappa: 0 + } + v: 2.9757115280194526 + a: -0.73649296030020461 + relative_time: 6.1499999999999861 +} +trajectory_point { + path_point { + x: 587705.39336280432 + y: 4141394.2872430328 + theta: -1.8136748845359387 + kappa: -0.00023531205653308336 + s: 33.122947773451045 + dkappa: 0 + ddkappa: 0 + } + v: 2.9392370192426016 + a: -0.72239073630351436 + relative_time: 6.199999999999986 +} +trajectory_point { + path_point { + x: 587705.358224215 + y: 4141394.1454677191 + theta: -1.8137145799363588 + kappa: -0.00025316613428116288 + s: 33.269012690868138 + dkappa: 0 + ddkappa: 0 + } + v: 2.9034819434399535 + a: -0.70771916925571 + relative_time: 6.2499999999999858 +} +trajectory_point { + path_point { + x: 587705.32351123507 + y: 4141394.0054096314 + theta: -1.8137537945338722 + kappa: -0.0002708039578852336 + s: 33.413308424565329 + dkappa: 0 + ddkappa: 0 + } + v: 2.8684742385755198 + a: -0.6924994266985699 + relative_time: 6.2999999999999856 +} +trajectory_point { + path_point { + x: 587705.28921471233 + y: 4141393.8670318434 + theta: -1.8137925386676588 + kappa: -0.00028823017772571793 + s: 33.5558730194891 + dkappa: 0 + ddkappa: 0 + } + v: 2.8342407842362225 + a: -0.6767526761738728 + relative_time: 6.3499999999999854 +} +trajectory_point { + path_point { + x: 587705.25532517734 + y: 4141393.7302961475 + theta: -1.8138308230349627 + kappa: -0.00030544960522857674 + s: 33.696745838105855 + dkappa: 0 + ddkappa: 0 + } + v: 2.8008074016318956 + a: -0.66050008522339709 + relative_time: 6.3999999999999853 +} +trajectory_point { + path_point { + x: 587705.22183285642 + y: 4141393.5951631106 + theta: -1.8138686586767114 + kappa: -0.00032246720639683186 + s: 33.835967507483069 + dkappa: 0 + ddkappa: 0 + } + v: 2.7681988535952828 + a: -0.64376282138892149 + relative_time: 6.4499999999999851 +} +trajectory_point { + path_point { + x: 587705.18871228467 + y: 4141393.4615959423 + theta: -1.8139112655908314 + kappa: -0.0003373922109338084 + s: 33.973579866370422 + dkappa: 0 + ddkappa: 0 + } + v: 2.7364388445820405 + a: -0.62656205221222439 + relative_time: 6.4999999999999849 +} +trajectory_point { + path_point { + x: 587705.15594084444 + y: 4141393.3295559511 + theta: -1.8139628066406526 + kappa: -0.00034871889073770081 + s: 34.109625912280954 + dkappa: 0 + ddkappa: 0 + } + v: 2.705550020670735 + a: -0.6089189452350845 + relative_time: 6.5499999999999847 +} +trajectory_point { + path_point { + x: 587705.1235360814 + y: 4141393.1989933457 + theta: -1.8140137710019228 + kappa: -0.00035991883711956234 + s: 34.244149748572205 + dkappa: 0 + ddkappa: 0 + } + v: 2.6755539695628432 + a: -0.59085466799928033 + relative_time: 6.5999999999999845 +} +trajectory_point { + path_point { + x: 587705.09148711839 + y: 4141393.0698642996 + theta: -1.814064175781821 + kappa: -0.00037099580962093171 + s: 34.37719653152736 + dkappa: 0 + ddkappa: 0 + } + v: 2.6464712205827552 + a: -0.57239038804659037 + relative_time: 6.6499999999999844 +} +trajectory_point { + path_point { + x: 587705.05978283682 + y: 4141392.9421240166 + theta: -1.8141140384663959 + kappa: -0.00038195365104013443 + s: 34.508812417436388 + dkappa: 0 + ddkappa: 0 + } + v: 2.6183212446777695 + a: -0.55354727291879335 + relative_time: 6.6999999999999842 +} +trajectory_point { + path_point { + x: 587705.02841189038 + y: 4141392.81572678 + theta: -1.8141633769005179 + kappa: -0.000392796283026461 + s: 34.639044509677213 + dkappa: 0 + ddkappa: 0 + } + v: 2.5911224544180982 + a: -0.53434649015766766 + relative_time: 6.749999999999984 +} +trajectory_point { + path_point { + x: 587704.99736271694 + y: 4141392.6906260047 + theta: -1.8142122092678281 + kappa: -0.00040352770167434042 + s: 34.767940805796826 + dkappa: 0 + ddkappa: 0 + } + v: 2.5648922039968625 + a: -0.51480920730499191 + relative_time: 6.7999999999999838 +} +trajectory_point { + path_point { + x: 587704.96662355226 + y: 4141392.56677429 + theta: -1.8142605540706893 + kappa: -0.00041415197311751818 + s: 34.895550144592455 + dkappa: 0 + ddkappa: 0 + } + v: 2.5396467892300953 + a: -0.4949565919025446 + relative_time: 6.8499999999999837 +} +trajectory_point { + path_point { + x: 587704.93614252144 + y: 4141392.4441333883 + theta: -1.8143148150875168 + kappa: -0.000421440755801363 + s: 35.021922153192712 + dkappa: 0 + ddkappa: 0 + } + v: 2.5154014475567412 + a: -0.47480981149210438 + relative_time: 6.8999999999999835 +} +trajectory_point { + path_point { + x: 587704.905936925 + y: 4141392.3226471073 + theta: -1.8143703039561005 + kappa: -0.00042778144401221877 + s: 35.147107194138705 + dkappa: 0 + ddkappa: 0 + } + v: 2.4921703580386554 + a: -0.45439003361544983 + relative_time: 6.9499999999999833 +} +trajectory_point { + path_point { + x: 587704.87600541243 + y: 4141392.2022631867 + theta: -1.8144252893222865 + kappa: -0.00043406459714454368 + s: 35.27115631246523 + dkappa: 0 + ddkappa: 0 + } + v: 2.4699666413606036 + a: -0.43371842581435938 + relative_time: 6.9999999999999831 +} +trajectory_point { + path_point { + x: 587704.84633551561 + y: 4141392.0829314785 + theta: -1.8144797940907451 + kappa: -0.000440292832544511 + s: 35.39412118278188 + dkappa: 0 + ddkappa: 0 + } + v: 2.448802359830264 + a: -0.41281615563061175 + relative_time: 7.0499999999999829 +} +trajectory_point { + path_point { + x: 587704.81691462675 + y: 4141391.964601276 + theta: -1.8145338414217704 + kappa: -0.00044646879676622179 + s: 35.516054056354214 + dkappa: 0 + ddkappa: 0 + } + v: 2.428688517378224 + a: -0.39170439060598533 + relative_time: 7.0999999999999828 +} +trajectory_point { + path_point { + x: 587704.78773001186 + y: 4141391.8472213619 + theta: -1.8145874547078218 + kappa: -0.00045259516289133711 + s: 35.637007708184889 + dkappa: 0 + ddkappa: 0 + } + v: 2.4096350595579841 + a: -0.37040429828225879 + relative_time: 7.1499999999999826 +} +trajectory_point { + path_point { + x: 587704.75876882358 + y: 4141391.7307400648 + theta: -1.8146406575500651 + kappa: -0.00045867462784870934 + s: 35.7570353840948 + dkappa: 0 + ddkappa: 0 + } + v: 2.3916508735459536 + a: -0.34893704620121069 + relative_time: 7.1999999999999824 +} +trajectory_point { + path_point { + x: 587704.73001811351 + y: 4141391.6151053067 + theta: -1.8146934737349161 + kappa: -0.00046470990973401663 + s: 35.876190747804259 + dkappa: 0 + ddkappa: 0 + } + v: 2.3747437881414553 + a: -0.32732380190461957 + relative_time: 7.2499999999999822 +} +trajectory_point { + path_point { + x: 587704.70143164252 + y: 4141391.500272918 + theta: -1.8147490999913096 + kappa: -0.0004697435413049741 + s: 35.9945278280141 + dkappa: 0 + ddkappa: 0 + } + v: 2.3589205737667212 + a: -0.30558573293426389 + relative_time: 7.2999999999999821 +} +trajectory_point { + path_point { + x: 587704.67300987907 + y: 4141391.3861867837 + theta: -1.8148062627233148 + kappa: -0.00047417100356932638 + s: 36.112100965486832 + dkappa: 0 + ddkappa: 0 + } + v: 2.3441869424668953 + a: -0.28374400683192241 + relative_time: 7.3499999999999819 +} +trajectory_point { + path_point { + x: 587704.64475959 + y: 4141391.272788954 + theta: -1.8148630805818124 + kappa: -0.00047857175404655177 + s: 36.228964760127823 + dkappa: 0 + ddkappa: 0 + } + v: 2.3305475479100326 + a: -0.26181979113937348 + relative_time: 7.3999999999999817 +} +trajectory_point { + path_point { + x: 587704.61666752666 + y: 4141391.1600262495 + theta: -1.8149195802125437 + kappa: -0.00048294785657601526 + s: 36.345174018066388 + dkappa: 0 + ddkappa: 0 + } + v: 2.3180059853870985 + a: -0.23983425339839581 + relative_time: 7.4499999999999815 +} +trajectory_point { + path_point { + x: 587704.58872040315 + y: 4141391.0478453394 + theta: -1.8149757883357986 + kappa: -0.00048730138077010754 + s: 36.460783698736982 + dkappa: 0 + ddkappa: 0 + } + v: 2.3065647918119705 + a: -0.21780856115076785 + relative_time: 7.4999999999999813 +} +trajectory_point { + path_point { + x: 587704.56090490962 + y: 4141390.9361927975 + theta: -1.8150317317206845 + kappa: -0.00049163440002147364 + s: 36.575848861960317 + dkappa: 0 + ddkappa: 0 + } + v: 2.2962254457214364 + a: -0.19576388193826832 + relative_time: 7.5499999999999812 +} +trajectory_point { + path_point { + x: 587704.53320772457 + y: 4141390.8250151509 + theta: -1.8150874371593977 + kappa: -0.00049594898951024313 + s: 36.690424615024519 + dkappa: 0 + ddkappa: 0 + } + v: 2.2869883672751952 + a: -0.17372138330267561 + relative_time: 7.599999999999981 +} +trajectory_point { + path_point { + x: 587704.505615528 + y: 4141390.7142589316 + theta: -1.8151429314414913 + kappa: -0.00050024722421126045 + s: 36.804566059766273 + dkappa: 0 + ddkappa: 0 + } + v: 2.2788529182558577 + a: -0.15170223278576844 + relative_time: 7.6499999999999808 +} +trajectory_point { + path_point { + x: 587704.47811501357 + y: 4141390.603870729 + theta: -1.815198241328146 + kappa: -0.00050453117690131392 + s: 36.918328239651963 + dkappa: 0 + ddkappa: 0 + } + v: 2.2718174020689439 + a: -0.1297275979293252 + relative_time: 7.6999999999999806 +} +trajectory_point { + path_point { + x: 587704.45063732564 + y: 4141390.4938111003 + theta: -1.8152575778568842 + kappa: -0.00050816165054678574 + s: 37.031766086858831 + dkappa: 0 + ddkappa: 0 + } + v: 2.2658790637428874 + a: -0.10781864627512439 + relative_time: 7.7499999999999805 +} +trajectory_point { + path_point { + x: 587704.42322486243 + y: 4141390.384013027 + theta: -1.8153167787391915 + kappa: -0.00051178267638077942 + s: 37.144934369356108 + dkappa: 0 + ddkappa: 0 + } + v: 2.2610340899290313 + a: -0.085996545364944721 + relative_time: 7.79999999999998 +} +trajectory_point { + path_point { + x: 587704.39586448134 + y: 4141390.2744235634 + theta: -1.8153758671438895 + kappa: -0.00051539682245349441 + s: 37.257887637986158 + dkappa: 0 + ddkappa: 0 + } + v: 2.2572776089016298 + a: -0.064282462740564927 + relative_time: 7.84999999999998 +} +trajectory_point { + path_point { + x: 587704.36854303442 + y: 4141390.164990047 + theta: -1.8154348714660713 + kappa: -0.00051900582557813223 + s: 37.370680173545651 + dkappa: 0 + ddkappa: 0 + } + v: 2.2546036905578486 + a: -0.042697565943763172 + relative_time: 7.89999999999998 +} +trajectory_point { + path_point { + x: 587704.34124745114 + y: 4141390.0556601249 + theta: -1.8154938199318849 + kappa: -0.00052261141223405264 + s: 37.483365933866665 + dkappa: 0 + ddkappa: 0 + } + v: 2.2530053464177642 + a: -0.021263022516318286 + relative_time: 7.94999999999998 +} +trajectory_point { + path_point { + x: 587704.313964753 + y: 4141389.9463818129 + theta: -1.8155527405708478 + kappa: -0.00052621529687353879 + s: 37.595998500897856 + dkappa: 0 + ddkappa: 0 + } + v: 2.2524745296243642 + a: -8.659739592076221e-15 + relative_time: 7.99999999999998 +} +decision { + main_decision { + stop { + reason_code: STOP_REASON_OBSTACLE + reason: "stop by 2339_0" + stop_point { + x: 587703.33209464035 + y: 4141386.0385333882 + } + stop_heading: -1.8168586434026983 + } + } + object_decision { + decision { + id: "2271_0" + perception_id: 2271 + object_decision { + follow { + distance_s: -24.244443893432617 + fence_point { + x: 587707.6262083617 + y: 4141403.4537658035 + z: 0 + } + fence_heading: -1.8026090928873173 + } + } + } + decision { + id: "2339_0" + perception_id: 2339 + object_decision { + stop { + reason_code: STOP_REASON_OBSTACLE + distance_s: -10 + stop_point { + x: 587703.33209464035 + y: 4141386.0385333882 + } + stop_heading: -1.8168586434026983 + } + } + } + decision { + id: "DEST" + perception_id: -1109540454 + object_decision { + ignore { + } + } + } + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/result_follow_03_0.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/result_follow_03_0.pb.txt new file mode 100644 index 00000000000..8cff14ba160 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/result_follow_03_0.pb.txt @@ -0,0 +1,2313 @@ +header { + module_name: "planning" +} +is_replan: true +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: 587260.60288361111 + y: 4140955.2434680969 + z: 0 + theta: -1.827644940261357 + kappa: 0.0012502171579704899 + dkappa: 0 + ddkappa: 0 + } + v: 4.5999999046325684 + a: -1.7078505107897375 + relative_time: 0 +} +trajectory_point { + path_point { + x: 587260.54517384374 + y: 4140955.0230214437 + theta: -1.8272240366384764 + kappa: 0.0015109562167883199 + s: 0.22787528189549267 + dkappa: 0 + ddkappa: 0 + } + v: 4.5152127453303175 + a: -1.6836855380507185 + relative_time: 0.05 +} +trajectory_point { + path_point { + x: 587260.48853008193 + y: 4140954.8066468458 + theta: -1.8268109077064589 + kappa: 0.0017668789457483489 + s: 0.45154128832215373 + dkappa: 0 + ddkappa: 0 + } + v: 4.4316264209311136 + a: -1.659816359094666 + relative_time: 0.1 +} +trajectory_point { + path_point { + x: 587260.4329372131 + y: 4140954.5942865741 + theta: -1.8264054433896146 + kappa: 0.0020180536248073553 + s: 0.67105769317183994 + dkappa: 0 + ddkappa: 0 + } + v: 4.34922625508179 + a: -1.6362384404822645 + relative_time: 0.15000000000000002 +} +trajectory_point { + path_point { + x: 587260.37838030921 + y: 4140954.3858836051 + theta: -1.8260075349417286 + kappa: 0.0022645477007586074 + s: 0.88648344218554864 + dkappa: 0 + ddkappa: 0 + } + v: 4.2679977981011481 + a: -1.6129472487741991 + relative_time: 0.2 +} +trajectory_point { + path_point { + x: 587260.32507889229 + y: 4140954.1813205788 + theta: -1.8255175691998438 + kappa: 0.0024746465172142723 + s: 1.0978767642870166 + dkappa: 0 + ddkappa: 0 + } + v: 4.1879268269799539 + a: -1.5899382505311548 + relative_time: 0.25 +} +trajectory_point { + path_point { + x: 587260.27302963822 + y: 4140953.9805389172 + theta: -1.8249306634389275 + kappa: 0.0026468905445002052 + s: 1.305295182916318 + dkappa: 0 + ddkappa: 0 + } + v: 4.1089993453809379 + a: -1.5672069123138161 + relative_time: 0.3 +} +trajectory_point { + path_point { + x: 587260.22196357953 + y: 4140953.7835499635 + theta: -1.8243548437970847 + kappa: 0.0028158809317246651 + s: 1.5087955273634628 + dkappa: 0 + ddkappa: 0 + } + v: 4.0312015836387989 + a: -1.544748700682868 + relative_time: 0.35 +} +trajectory_point { + path_point { + x: 587260.17186662706 + y: 4140953.5902993679 + theta: -1.8237899517952405 + kappa: 0.0029816643039404563 + s: 1.7084339441019945 + dkappa: 0 + ddkappa: 0 + } + v: 3.9545199987601998 + a: -1.5225590821989949 + relative_time: 0.39999999999999997 +} +trajectory_point { + path_point { + x: 587260.12272485986 + y: 4140953.40073343 + theta: -1.823235830811706 + kappa: 0.0031442867285887952 + s: 1.9042659081225897 + dkappa: 0 + ddkappa: 0 + } + v: 3.87894127442377 + a: -1.500633523422882 + relative_time: 0.44999999999999996 +} +trajectory_point { + path_point { + x: 587260.07483912283 + y: 4140953.2147180624 + theta: -1.8226222583468499 + kappa: 0.0032733633348970004 + s: 2.096346234266655 + dkappa: 0 + ddkappa: 0 + } + v: 3.8044523209801042 + a: -1.4789674909152142 + relative_time: 0.49999999999999994 +} +trajectory_point { + path_point { + x: 587260.02814134513 + y: 4140953.0322148642 + theta: -1.8219612132253631 + kappa: 0.0033742086680408623 + s: 2.2847290885599265 + dkappa: 0 + ddkappa: 0 + } + v: 3.7310402754517629 + a: -1.4575564512366761 + relative_time: 0.54999999999999993 +} +trajectory_point { + path_point { + x: 587259.9823468558 + y: 4140952.8532418776 + theta: -1.8213129542686783 + kappa: 0.0034731033211287095 + s: 2.4694679995460671 + dkappa: 0 + ddkappa: 0 + } + v: 3.658692501533273 + a: -1.4363958709479525 + relative_time: 0.6 +} +trajectory_point { + path_point { + x: 587259.93744254112 + y: 4140952.6777478508 + theta: -1.8206772964045559 + kappa: 0.0035700756139335215 + s: 2.6506158696202649 + dkappa: 0 + ddkappa: 0 + } + v: 3.5873965895911262 + a: -1.4154812166097284 + relative_time: 0.65 +} +trajectory_point { + path_point { + x: 587259.89341543952 + y: 4140952.5056821289 + theta: -1.8200540566556738 + kappa: 0.0036651535371048493 + s: 2.828224986362831 + dkappa: 0 + ddkappa: 0 + } + v: 3.51714035666378 + a: -1.3948079547826884 + relative_time: 0.70000000000000007 +} +trajectory_point { + path_point { + x: 587259.85029801284 + y: 4140952.3369831466 + theta: -1.8194381699673674 + kappa: 0.0037548700741119063 + s: 3.0023470338728013 + dkappa: 0 + ddkappa: 0 + } + v: 3.4479118464616594 + a: -1.3743715520275175 + relative_time: 0.75000000000000011 +} +trajectory_point { + path_point { + x: 587259.80860689888 + y: 4140952.1714670281 + theta: -1.8187723542063816 + kappa: 0.0037983953436270743 + s: 3.1730331041015289 + dkappa: 0 + ddkappa: 0 + } + v: 3.3796993293671527 + a: -1.3541674749049002 + relative_time: 0.80000000000000016 +} +trajectory_point { + path_point { + x: 587259.76774270576 + y: 4140952.0092338314 + theta: -1.8181197434802538 + kappa: 0.0038410573128966315 + s: 3.3403337081862872 + dkappa: 0 + ddkappa: 0 + } + v: 3.3124913024346148 + a: -1.3341911899755217 + relative_time: 0.8500000000000002 +} +trajectory_point { + path_point { + x: 587259.7276932348 + y: 4140951.85023513 + theta: -1.8174801435779904 + kappa: 0.0038828687171371602 + s: 3.5042987877838665 + dkappa: 0 + ddkappa: 0 + } + v: 3.2462764893903682 + a: -1.3144381638000666 + relative_time: 0.90000000000000024 +} +trajectory_point { + path_point { + x: 587259.688446424 + y: 4140951.6944230343 + theta: -1.8168533623994518 + kappa: 0.0039238421492367344 + s: 3.6649777264041719 + dkappa: 0 + ddkappa: 0 + } + v: 3.1810438406326984 + a: -1.2949038629392198 + relative_time: 0.95000000000000029 +} +trajectory_point { + path_point { + x: 587259.6499903443 + y: 4140951.5417501875 + theta: -1.8162392099159363 + kappa: 0.0039639900626450095 + s: 3.8224193607438215 + dkappa: 0 + ddkappa: 0 + } + v: 3.1167825332318584 + a: -1.2755837539536663 + relative_time: 1.0000000000000002 +} +trajectory_point { + path_point { + x: 587259.61231319816 + y: 4140951.3921697512 + theta: -1.8156374981304861 + kappa: 0.0040033247742633131 + s: 3.976671992019746 + dkappa: 0 + ddkappa: 0 + } + v: 3.0534819709300653 + a: -1.2564733034040905 + relative_time: 1.0500000000000003 +} +trajectory_point { + path_point { + x: 587259.57594367117 + y: 4140951.2455004207 + theta: -1.8150307553112373 + kappa: 0.0040044385901981472 + s: 4.1277833973027862 + dkappa: 0 + ddkappa: 0 + } + v: 2.9911317841415044 + a: -1.2375679778511772 + relative_time: 1.1000000000000003 +} +trajectory_point { + path_point { + x: 587259.54035583732 + y: 4140951.10182485 + theta: -1.8144352496021419 + kappa: 0.0040029647014324732 + s: 4.2758008408512911 + dkappa: 0 + ddkappa: 0 + } + v: 2.9297218299523253 + a: -1.2188632438556117 + relative_time: 1.1500000000000004 +} +trajectory_point { + path_point { + x: 587259.50550064177 + y: 4140950.9611070929 + theta: -1.813852002842445 + kappa: 0.0040015211552548013 + s: 4.4207710854447146 + dkappa: 0 + ddkappa: 0 + } + v: 2.8692421921206428 + a: -1.2003545679780785 + relative_time: 1.2000000000000004 +} +trajectory_point { + path_point { + x: 587259.47136695881 + y: 4140950.8233022341 + theta: -1.8132808292879092 + kappa: 0.0040001074909037908 + s: 4.5627404037172195 + dkappa: 0 + ddkappa: 0 + } + v: 2.8096831810765384 + a: -1.1820374167792624 + relative_time: 1.2500000000000004 +} +trajectory_point { + path_point { + x: 587259.43794377835 + y: 4140950.6883658236 + theta: -1.8127215450719139 + kappa: 0.0039987232523858857 + s: 4.7017545894912676 + dkappa: 0 + ddkappa: 0 + } + v: 2.7510353339220597 + a: -1.1639072568198483 + relative_time: 1.3000000000000005 +} +trajectory_point { + path_point { + x: 587259.40522020264 + y: 4140950.5562538644 + theta: -1.8121739681635172 + kappa: 0.0039973679883624587 + s: 4.8378589691112239 + dkappa: 0 + ddkappa: 0 + } + v: 2.6932894144312187 + a: -1.145959554660521 + relative_time: 1.3500000000000005 +} +trajectory_point { + path_point { + x: 587259.37318544334 + y: 4140950.4269228023 + theta: -1.8116379183253057 + kappa: 0.0039960412520369587 + s: 4.9710984127769544 + dkappa: 0 + ddkappa: 0 + } + v: 2.6364364130499944 + a: -1.1281897768619653 + relative_time: 1.4000000000000006 +} +trajectory_point { + path_point { + x: 587259.34228640969 + y: 4140950.3002171395 + theta: -1.8111297196203824 + kappa: 0.0039645638768050079 + s: 5.1015173458774212 + dkappa: 0 + ddkappa: 0 + } + v: 2.580467546896331 + a: -1.1105933899848659 + relative_time: 1.4500000000000006 +} +trajectory_point { + path_point { + x: 587259.31209119351 + y: 4140950.1761976457 + theta: -1.8106339984109445 + kappa: 0.0039307228104436308 + s: 5.2291597603242836 + dkappa: 0 + ddkappa: 0 + } + v: 2.525374259760139 + a: -1.0931658605899079 + relative_time: 1.5000000000000007 +} +trajectory_point { + path_point { + x: 587259.28254248644 + y: 4140950.0548335304 + theta: -1.8101488906090892 + kappa: 0.003897606314398496 + s: 5.3540692258854952 + dkappa: 0 + ddkappa: 0 + } + v: 2.471148222103293 + a: -1.075902655237776 + relative_time: 1.5500000000000007 +} +trajectory_point { + path_point { + x: 587259.25363007863 + y: 4140949.9360828595 + theta: -1.8096742288506238 + kappa: 0.003865202946194443 + s: 5.4762889015189034 + dkappa: 0 + ddkappa: 0 + } + v: 2.4177813310596359 + a: -1.0587992404891549 + relative_time: 1.6000000000000008 +} +trajectory_point { + path_point { + x: 587259.2253438551 + y: 4140949.819904088 + theta: -1.8092098472932625 + kappa: 0.0038335013692671182 + s: 5.595861546705847 + dkappa: 0 + ddkappa: 0 + } + v: 2.3652657104349744 + a: -1.0418510829047292 + relative_time: 1.6500000000000008 +} +trajectory_point { + path_point { + x: 587259.19767379225 + y: 4140949.706256046 + theta: -1.8087555815749017 + kappa: 0.0038024903499581679 + s: 5.7128295327847516 + dkappa: 0 + ddkappa: 0 + } + v: 2.3135937107070816 + a: -1.0250536490451843 + relative_time: 1.7000000000000008 +} +trajectory_point { + path_point { + x: 587259.17060995591 + y: 4140949.5950979316 + theta: -1.8083112687717533 + kappa: 0.0037721587545104236 + s: 5.8272348542847352 + dkappa: 0 + ddkappa: 0 + } + v: 2.2627579090256962 + a: -1.0084024054712044 + relative_time: 1.7500000000000009 +} +trajectory_point { + path_point { + x: 587259.14414249826 + y: 4140949.486389298 + theta: -1.8078767473563491 + kappa: 0.0037424955460631 + s: 5.939119140259197 + dkappa: 0 + ddkappa: 0 + } + v: 2.2127511092125234 + a: -0.9918928187434749 + relative_time: 1.8000000000000009 +} +trajectory_point { + path_point { + x: 587259.11850658758 + y: 4140949.3800308825 + theta: -1.8074802612782936 + kappa: 0.0036906592999327286 + s: 6.048523665619423 + dkappa: 0 + ddkappa: 0 + } + v: 2.163566341761233 + a: -0.97552035542268034 + relative_time: 1.850000000000001 +} +trajectory_point { + path_point { + x: 587259.0935847587 + y: 4140949.2760089487 + theta: -1.8071091515083213 + kappa: 0.0036266856926826523 + s: 6.1554893624681828 + dkappa: 0 + ddkappa: 0 + } + v: 2.1151968638374616 + a: -0.95928048206950534 + relative_time: 1.900000000000001 +} +trajectory_point { + path_point { + x: 587259.06922169053 + y: 4140949.1743192421 + theta: -1.8067463619180659 + kappa: 0.003564146407773687 + s: 6.2600568314333263 + dkappa: 0 + ddkappa: 0 + } + v: 2.0676361592788108 + a: -0.94316866524463494 + relative_time: 1.9500000000000011 +} +trajectory_point { + path_point { + x: 587259.045407998 + y: 4140949.0749225905 + theta: -1.8063917528696409 + kappa: 0.0035030173544169092 + s: 6.3622663530013783 + dkappa: 0 + ddkappa: 0 + } + v: 2.0208779385948468 + a: -0.92718037150875476 + relative_time: 2.0000000000000009 +} +trajectory_point { + path_point { + x: 587259.02213438414 + y: 4140948.9777801884 + theta: -1.8060451860189282 + kappa: 0.0034432746671324982 + s: 6.4621578309356167 + dkappa: 0 + ddkappa: 0 + } + v: 1.974911990748957 + a: -0.91148292769431694 + relative_time: 2.0500000000000007 +} +trajectory_point { + path_point { + x: 587258.99939169141 + y: 4140948.882853813 + theta: -1.8057065250882931 + kappa: 0.0033848948387701942 + s: 6.5597705698620645 + dkappa: 0 + ddkappa: 0 + } + v: 1.9297271107409915 + a: -0.895937588945316 + relative_time: 2.1000000000000005 +} +trajectory_point { + path_point { + x: 587258.977170865 + y: 4140948.7901056707 + theta: -1.8053756353196038 + kappa: 0.0033278546260465548 + s: 6.655143433213901 + dkappa: 0 + ddkappa: 0 + } + v: 1.8853157036746482 + a: -0.88054394098296762 + relative_time: 2.1500000000000004 +} +trajectory_point { + path_point { + x: 587258.95546293864 + y: 4140948.6994983358 + theta: -1.8050523832601748 + kappa: 0.00327213101248465 + s: 6.7483149051973417 + dkappa: 0 + ddkappa: 0 + } + v: 1.841670195367564 + a: -0.86530156952848736 + relative_time: 2.2 +} +trajectory_point { + path_point { + x: 587258.93425903376 + y: 4140948.6109947516 + theta: -1.804736636760045 + kappa: 0.0032177012077946425 + s: 6.83932309182733 + dkappa: 0 + ddkappa: 0 + } + v: 1.798783032351315 + a: -0.85021006030309054 + relative_time: 2.25 +} +trajectory_point { + path_point { + x: 587258.91355036024 + y: 4140948.524558227 + theta: -1.8044282649691987 + kappa: 0.00316454264725436 + s: 6.9282057219632378 + dkappa: 0 + ddkappa: 0 + } + v: 1.7566466818714168 + a: -0.8352689990279929 + relative_time: 2.3 +} +trajectory_point { + path_point { + x: 587258.89344376489 + y: 4140948.4401249429 + theta: -1.8041583866016739 + kappa: 0.0030957669840471738 + s: 7.01500014834456 + dkappa: 0 + ddkappa: 0 + } + v: 1.7152536318873242 + a: -0.82047797142440959 + relative_time: 2.3499999999999996 +} +trajectory_point { + path_point { + x: 587258.87395504024 + y: 4140948.3576531322 + theta: -1.8039334737204245 + kappa: 0.0030077894543021418 + s: 7.0997433486266148 + dkappa: 0 + ddkappa: 0 + } + v: 1.6745963910724306 + a: -0.80583656321355646 + relative_time: 2.3999999999999995 +} +trajectory_point { + path_point { + x: 587258.8549296261 + y: 4140948.277141945 + theta: -1.8037139076551474 + kappa: 0.0029219034376184892 + s: 7.1824719264162367 + dkappa: 0 + ddkappa: 0 + } + v: 1.6346674888140698 + a: -0.79134436011664877 + relative_time: 2.4499999999999993 +} +trajectory_point { + path_point { + x: 587258.83635919052 + y: 4140948.1985561224 + theta: -1.8034995922752968 + kappa: 0.0028380713206165552 + s: 7.2632221123074769 + dkappa: 0 + ddkappa: 0 + } + v: 1.5954594752135134 + a: -0.77700094785490215 + relative_time: 2.4999999999999991 +} +trajectory_point { + path_point { + x: 587258.818235487 + y: 4140948.1218607677 + theta: -1.8032904324343488 + kappa: 0.002756255876090739 + s: 7.3420297649172968 + dkappa: 0 + ddkappa: 0 + } + v: 1.5569649210859735 + a: -0.762805912149532 + relative_time: 2.5499999999999989 +} +trajectory_point { + path_point { + x: 587258.80055035406 + y: 4140948.0470213434 + theta: -1.8030863339673227 + kappa: 0.0026764202619342639 + s: 7.4189303719212685 + dkappa: 0 + ddkappa: 0 + } + v: 1.5191764179606007 + a: -0.74875883872175386 + relative_time: 2.5999999999999988 +} +trajectory_point { + path_point { + x: 587258.78329571569 + y: 4140947.9740036735 + theta: -1.8028872036882824 + kappa: 0.002598528020063961 + s: 7.49395905108927 + dkappa: 0 + ddkappa: 0 + } + v: 1.4820865780804848 + a: -0.73485931329278331 + relative_time: 2.6499999999999986 +} +trajectory_point { + path_point { + x: 587258.76646358066 + y: 4140947.90277394 + theta: -1.8026929493878241 + kappa: 0.0025225430753450387 + s: 7.5671505513211805 + dkappa: 0 + ddkappa: 0 + } + v: 1.4456880344026555 + a: -0.72110692158383571 + relative_time: 2.6999999999999984 +} +trajectory_point { + path_point { + x: 587258.750046042 + y: 4140947.8332986841 + theta: -1.8025034798305448 + kappa: 0.0024484297345158585 + s: 7.6385392536825814 + dkappa: 0 + ddkappa: 0 + } + v: 1.4099734405980811 + a: -0.70750124931612668 + relative_time: 2.7499999999999982 +} +trajectory_point { + path_point { + x: 587258.73403527739 + y: 4140947.765544802 + theta: -1.8023187047524976 + kappa: 0.0023761526851127082 + s: 7.70815917244045 + dkappa: 0 + ddkappa: 0 + } + v: 1.3749354710516688 + a: -0.6940418822108716 + relative_time: 2.799999999999998 +} +trajectory_point { + path_point { + x: 587258.71842354862 + y: 4140947.6994795478 + theta: -1.8021385348586316 + kappa: 0.0023056769943945788 + s: 7.7760439560988566 + dkappa: 0 + ddkappa: 0 + } + v: 1.3405668208622661 + a: -0.68072840598928608 + relative_time: 2.8499999999999979 +} +trajectory_point { + path_point { + x: 587258.70320320129 + y: 4140947.63507053 + theta: -1.8019628818202189 + kappa: 0.0022369681082679356 + s: 7.8422268884346646 + dkappa: 0 + ddkappa: 0 + } + v: 1.3068602058426591 + a: -0.66756040637258551 + relative_time: 2.8999999999999977 +} +trajectory_point { + path_point { + x: 587258.68836666446 + y: 4140947.5722857108 + theta: -1.8017916582722691 + kappa: 0.0021699918502114954 + s: 7.9067408895332232 + dkappa: 0 + ddkappa: 0 + } + v: 1.2738083625195729 + a: -0.65453746908198551 + relative_time: 2.9499999999999975 +} +trajectory_point { + path_point { + x: 587258.673906451 + y: 4140947.5110934055 + theta: -1.8016247778109309 + kappa: 0.0021047144202009996 + s: 7.9696185168240667 + dkappa: 0 + ddkappa: 0 + } + v: 1.2414040481336723 + a: -0.64165917983870147 + relative_time: 2.9999999999999973 +} +trajectory_point { + path_point { + x: 587258.65992983826 + y: 4140947.4514353047 + theta: -1.8015346769093148 + kappa: 0.0020142681368310691 + s: 8.0308919661166112 + dkappa: 0 + ddkappa: 0 + } + v: 1.2096400406395609 + a: -0.62892512436394887 + relative_time: 3.0499999999999972 +} +trajectory_point { + path_point { + x: 587258.64631926687 + y: 4140947.3933063583 + theta: -1.8014515591440941 + kappa: 0.0019244144379281425 + s: 8.090593072635853 + dkappa: 0 + ddkappa: 0 + } + v: 1.1785091387057816 + a: -0.61633488837894346 + relative_time: 3.099999999999997 +} +trajectory_point { + path_point { + x: 587258.63305998 + y: 4140947.3366777012 + theta: -1.8013705866156287 + kappa: 0.0018368798352071526 + s: 8.1487533120580622 + dkappa: 0 + ddkappa: 0 + } + v: 1.1480041617148173 + a: -0.60388805760490039 + relative_time: 3.1499999999999968 +} +trajectory_point { + path_point { + x: 587258.62014488387 + y: 4140947.2815190372 + theta: -1.8012917160031874 + kappa: 0.0017516174954956565 + s: 8.2054038015464812 + dkappa: 0 + ddkappa: 0 + } + v: 1.1181179497630889 + a: -0.59158421776303538 + relative_time: 3.1999999999999966 +} +trajectory_point { + path_point { + x: 587258.60756696574 + y: 4140947.2278004158 + theta: -1.8012149044835446 + kappa: 0.0016685811236457487 + s: 8.2605753007870231 + dkappa: 0 + ddkappa: 0 + } + v: 1.0888433636609574 + a: -0.57942295457456383 + relative_time: 3.2499999999999964 +} +trajectory_point { + path_point { + x: 587258.59531929437 + y: 4140947.1754922336 + theta: -1.8011401097295545 + kappa: 0.0015877249609752809 + s: 8.3142982130239673 + dkappa: 0 + ddkappa: 0 + } + v: 1.0601732849327226 + a: -0.56740385376070135 + relative_time: 3.2999999999999963 +} +trajectory_point { + path_point { + x: 587258.58339501964 + y: 4140947.1245652363 + theta: -1.8010672899087254 + kappa: 0.0015090037837090754 + s: 8.3666025860956559 + dkappa: 0 + ddkappa: 0 + } + v: 1.0321006158166237 + a: -0.55552650104266321 + relative_time: 3.3499999999999961 +} +trajectory_point { + path_point { + x: 587258.57178737177 + y: 4140947.07499051 + theta: -1.8009964036817911 + kappa: 0.0014323729014201372 + s: 8.4175181134701926 + dkappa: 0 + ddkappa: 0 + } + v: 1.004618279264839 + a: -0.54379048214166514 + relative_time: 3.3999999999999959 +} +trajectory_point { + path_point { + x: 587258.560489662 + y: 4140947.0267394893 + theta: -1.8009274102012827 + kappa: 0.001357788155470872 + s: 8.46707413528114 + dkappa: 0 + ddkappa: 0 + } + v: 0.97771921894348646 + a: -0.53219538277892253 + relative_time: 3.4499999999999957 +} +trajectory_point { + path_point { + x: 587258.54949528177 + y: 4140946.979783948 + theta: -1.8008602691100979 + kappa: 0.0012852059174543039 + s: 8.5152996393632083 + dkappa: 0 + ddkappa: 0 + } + v: 0.95139639923262243 + a: -0.520740788675651 + relative_time: 3.4999999999999956 +} +trajectory_point { + path_point { + x: 587258.53879770252 + y: 4140946.9340960043 + theta: -1.8007949405400716 + kappa: 0.0012145830876352792 + s: 8.5622232622879686 + dkappa: 0 + ddkappa: 0 + } + v: 0.92564280522624354 + a: -0.50942628555306579 + relative_time: 3.5499999999999954 +} +trajectory_point { + path_point { + x: 587258.52839047555 + y: 4140946.8896481171 + theta: -1.8007313851105426 + kappa: 0.0011458770933916967 + s: 8.6078732903995316 + dkappa: 0 + ddkappa: 0 + } + v: 0.9004514427322845 + a: -0.49825145913238267 + relative_time: 3.5999999999999952 +} +trajectory_point { + path_point { + x: 587258.51826723176 + y: 4140946.8464130843 + theta: -1.800669563926923 + kappa: 0.0010790458876557064 + s: 8.65227766085026 + dkappa: 0 + ddkappa: 0 + } + v: 0.87581533827261993 + a: -0.487215895134817 + relative_time: 3.649999999999995 +} +trajectory_point { + path_point { + x: 587258.50842168159 + y: 4140946.8043640438 + theta: -1.8006094385792635 + kappa: 0.0010140479473549351 + s: 8.6954639626364543 + dkappa: 0 + ddkappa: 0 + } + v: 0.85172753908306409 + a: -0.47631917928158429 + relative_time: 3.6999999999999948 +} +trajectory_point { + path_point { + x: 587258.49884761428 + y: 4140946.7634744709 + theta: -1.8005509711408199 + kappa: 0.00095084227185370158 + s: 8.7374594376340546 + dkappa: 0 + ddkappa: 0 + } + v: 0.82818111311336917 + a: -0.46556089729390004 + relative_time: 3.7499999999999947 +} +trajectory_point { + path_point { + x: 587258.48953889823 + y: 4140946.7237181789 + theta: -1.8004941241666197 + kappa: 0.00088938838139421825 + s: 8.778290981634342 + dkappa: 0 + ddkappa: 0 + } + v: 0.80516914902722814 + a: -0.45494063489297987 + relative_time: 3.7999999999999945 +} +trajectory_point { + path_point { + x: 587258.48048948054 + y: 4140946.6850693147 + theta: -1.8004388606920252 + kappa: 0.00082964631553782684 + s: 8.8179851453796232 + dkappa: 0 + ddkappa: 0 + } + v: 0.78268475620227185 + a: -0.44445797780003904 + relative_time: 3.8499999999999943 +} +trajectory_point { + path_point { + x: 587258.47169338656 + y: 4140946.6475023627 + theta: -1.8003851442312988 + kappa: 0.00077157663160619329 + s: 8.8565681355989412 + dkappa: 0 + ddkappa: 0 + } + v: 0.76072106473007106 + a: -0.43411251173629317 + relative_time: 3.8999999999999941 +} +trajectory_point { + path_point { + x: 587258.46314472 + y: 4140946.6109921406 + theta: -1.8003329387761664 + kappa: 0.000715140403122539 + s: 8.89406581604376 + dkappa: 0 + ddkappa: 0 + } + v: 0.739271225416136 + a: -0.42390382242295788 + relative_time: 3.949999999999994 +} +trajectory_point { + path_point { + x: 587258.45483766228 + y: 4140946.5755137978 + theta: -1.8002822087943811 + kappa: 0.000660299218252837 + s: 8.9305037085236751 + dkappa: 0 + ddkappa: 0 + } + v: 0.718328409779915 + a: -0.41383149558124843 + relative_time: 3.9999999999999938 +} +trajectory_point { + path_point { + x: 587258.44676647277 + y: 4140946.5410428168 + theta: -1.8002329192283069 + kappa: 0.00060701517827043935 + s: 8.9659069939265539 + dkappa: 0 + ddkappa: 0 + } + v: 0.69788580401025679 + a: -0.40389576598678395 + relative_time: 4.0499999999999936 +} +trajectory_point { + path_point { + x: 587258.43894189724 + y: 4140946.507551176 + theta: -1.8002374870650051 + kappa: 0.00054093892826729455 + s: 9.0003005111797183 + dkappa: 0 + ddkappa: 0 + } + v: 0.67793653440138979 + a: -0.39409796318304507 + relative_time: 4.0999999999999934 +} +trajectory_point { + path_point { + x: 587258.43134373636 + y: 4140946.4750184435 + theta: -1.8002491600779205 + kappa: 0.00047478114090252193 + s: 9.0337087548976349 + dkappa: 0 + ddkappa: 0 + } + v: 0.65847371750876893 + a: -0.384437571370315 + relative_time: 4.1499999999999932 +} +trajectory_point { + path_point { + x: 587258.42396416725 + y: 4140946.4434216456 + theta: -1.8002604972697278 + kappa: 0.00041052664827841655 + s: 9.0661558761672953 + dkappa: 0 + ddkappa: 0 + } + v: 0.63949049567783689 + a: -0.374914074748876 + relative_time: 4.1999999999999931 +} +trajectory_point { + path_point { + x: 587258.41679777484 + y: 4140946.4127375977 + theta: -1.8002715069593556 + kappa: 0.00034812830212871588 + s: 9.09766568383771 + dkappa: 0 + ddkappa: 0 + } + v: 0.62098003704402194 + a: -0.36552695751901065 + relative_time: 4.2499999999999929 +} +trajectory_point { + path_point { + x: 587258.40983922186 + y: 4140946.3829434467 + theta: -1.8002821973466041 + kappa: 0.00028753962936173055 + s: 9.1282616458094115 + dkappa: 0 + ddkappa: 0 + } + v: 0.60293553553273838 + a: -0.35627570388100133 + relative_time: 4.2999999999999927 +} +trajectory_point { + path_point { + x: 587258.40308324783 + y: 4140946.354016671 + theta: -1.8002925765125954 + kappa: 0.000228714829506783 + s: 9.1579668903239551 + dkappa: 0 + ddkappa: 0 + } + v: 0.58535021085938621 + a: -0.34715979803513058 + relative_time: 4.3499999999999925 +} +trajectory_point { + path_point { + x: 587258.39652467 + y: 4140946.3259350769 + theta: -1.8003026524202241 + kappa: 0.00017160877216063232 + s: 9.1868042072534113 + dkappa: 0 + ddkappa: 0 + } + v: 0.56821730852935171 + a: -0.33817872418168077 + relative_time: 4.3999999999999924 +} +trajectory_point { + path_point { + x: 587258.39015838155 + y: 4140946.2986768014 + theta: -1.8003124329146083 + kappa: 0.00011617699443389168 + s: 9.2147960493898733 + dkappa: 0 + ddkappa: 0 + } + v: 0.5515300998380066 + a: -0.32933196652093438 + relative_time: 4.4499999999999922 +} +trajectory_point { + path_point { + x: 587258.38397935242 + y: 4140946.2722203061 + theta: -1.8003219257235388 + kappa: 6.2375698397463056e-05 + s: 9.24196453373495 + dkappa: 0 + ddkappa: 0 + } + v: 0.53528188187070858 + a: -0.32061900925317388 + relative_time: 4.499999999999992 +} +trajectory_point { + path_point { + x: 587258.37798262842 + y: 4140946.2465443797 + theta: -1.800331138457931 + kappa: 1.0161748528958773e-05 + s: 9.2683314427892718 + dkappa: 0 + ddkappa: 0 + } + v: 0.51946597750280143 + a: -0.31203933657868177 + relative_time: 4.5499999999999918 +} +trajectory_point { + path_point { + x: 587258.37216333149 + y: 4140946.2216281351 + theta: -1.8003400786122747 + kappa: -4.0507330840870552e-05 + s: 9.2939182258419812 + dkappa: 0 + ddkappa: 0 + } + v: 0.5040757353996147 + a: -0.30359243269774044 + relative_time: 4.5999999999999917 +} +trajectory_point { + path_point { + x: 587258.36651665857 + y: 4140946.197451008 + theta: -1.8003487535650853 + kappa: -8.9673358081711764e-05 + s: 9.31874600026024 + dkappa: 0 + ddkappa: 0 + } + v: 0.4891045300164637 + a: -0.29527778181063236 + relative_time: 4.6499999999999915 +} +trajectory_point { + path_point { + x: 587258.36103788239 + y: 4140946.1739927568 + theta: -1.8003571705793526 + kappa: -0.00013737749681725367 + s: 9.3428355527787232 + dkappa: 0 + ddkappa: 0 + } + v: 0.4745457615986497 + a: -0.28709486811763996 + relative_time: 4.6999999999999913 +} +trajectory_point { + path_point { + x: 587258.35572235 + y: 4140946.15123346 + theta: -1.8003653368029939 + kappa: -0.00018366025847877683 + s: 9.36620734078912 + dkappa: 0 + ddkappa: 0 + } + v: 0.46039285618145981 + a: -0.2790431758190457 + relative_time: 4.7499999999999911 +} +trajectory_point { + path_point { + x: 587258.35056548333 + y: 4140946.1291535161 + theta: -1.8003732592693025 + kappa: -0.00022856150485872189 + s: 9.38888149362964 + dkappa: 0 + ddkappa: 0 + } + v: 0.4466392655901672 + a: -0.27112218911513208 + relative_time: 4.7999999999999909 +} +trajectory_point { + path_point { + x: 587258.34556277865 + y: 4140946.1077336408 + theta: -1.8003809448973984 + kappa: -0.00027212045066425081 + s: 9.410877813874496 + dkappa: 0 + ddkappa: 0 + } + v: 0.43327846744003062 + a: -0.26333139220618151 + relative_time: 4.8499999999999908 +} +trajectory_point { + path_point { + x: 587258.34070980619 + y: 4140946.0869548679 + theta: -1.8003884004926805 + kappa: -0.00031437566607084023 + s: 9.4322157786234211 + dkappa: 0 + ddkappa: 0 + } + v: 0.42030396513629503 + a: -0.25567026929247649 + relative_time: 4.8999999999999906 +} +trajectory_point { + path_point { + x: 587258.33600220992 + y: 4140946.0667985464 + theta: -1.8003956327472748 + kappa: -0.00035536507927584241 + s: 9.4529145407911574 + dkappa: 0 + ddkappa: 0 + } + v: 0.407709287874191 + a: -0.24813830457429947 + relative_time: 4.94999999999999 +} +trajectory_point { + path_point { + x: 587258.3314357074 + y: 4140946.04724634 + theta: -1.8004026482404867 + kappa: -0.00039512597905206465 + s: 9.4729929303969591 + dkappa: 0 + ddkappa: 0 + } + v: 0.39548799063893497 + a: -0.24073498225193285 + relative_time: 4.99999999999999 +} +trajectory_point { + path_point { + x: 587258.32700608892 + y: 4140946.0282802247 + theta: -1.800409453439251 + kappa: -0.00043369501730134059 + s: 9.49246945585409 + dkappa: 0 + ddkappa: 0 + } + v: 0.38363365420572954 + a: -0.23345978652565913 + relative_time: 5.04999999999999 +} +trajectory_point { + path_point { + x: 587258.32270921813 + y: 4140946.0098824897 + theta: -1.8004160546985821 + kappa: -0.00047110821160810715 + s: 9.5113623052593255 + dkappa: 0 + ddkappa: 0 + } + v: 0.37213988513976287 + a: -0.22631220159576074 + relative_time: 5.09999999999999 +} +trajectory_point { + path_point { + x: 587258.31854103087 + y: 4140945.9920357335 + theta: -1.800422458262025 + kappa: -0.00050740094779297027 + s: 9.5296893476824458 + dkappa: 0 + ddkappa: 0 + } + v: 0.36100031579620928 + a: -0.21929171166252015 + relative_time: 5.14999999999999 +} +trajectory_point { + path_point { + x: 587258.31449753547 + y: 4140945.9747228655 + theta: -1.8004286702621057 + kappa: -0.00054260798246629372 + s: 9.5474681344557446 + dkappa: 0 + ddkappa: 0 + } + v: 0.35020860432022866 + a: -0.21239780092621982 + relative_time: 5.1999999999999895 +} +trajectory_point { + path_point { + x: 587258.31057481212 + y: 4140945.9579271022 + theta: -1.8004346967207816 + kappa: -0.00057676344558175909 + s: 9.56471590046352 + dkappa: 0 + ddkappa: 0 + } + v: 0.33975843464696692 + a: -0.2056299535871422 + relative_time: 5.2499999999999893 +} +trajectory_point { + path_point { + x: 587258.30676901259 + y: 4140945.9416319663 + theta: -1.800440543549892 + kappa: -0.00060990084298994448 + s: 9.5814495654315781 + dkappa: 0 + ddkappa: 0 + } + v: 0.3296435165015561 + a: -0.19898765384556974 + relative_time: 5.2999999999999892 +} +trajectory_point { + path_point { + x: 587258.30307636037 + y: 4140945.9258212894 + theta: -1.8004462165516091 + kappa: -0.00064205305899190063 + s: 9.59768573521673 + dkappa: 0 + ddkappa: 0 + } + v: 0.31985758539911358 + a: -0.19247038590178484 + relative_time: 5.349999999999989 +} +trajectory_point { + path_point { + x: 587258.29949314962 + y: 4140945.9104792029 + theta: -1.8004517214188884 + kappa: -0.00067325235889272288 + s: 9.6134407030962947 + dkappa: 0 + ddkappa: 0 + } + v: 0.31039440264474316 + a: -0.1860776339560701 + relative_time: 5.3999999999999888 +} +trajectory_point { + path_point { + x: 587258.29601574549 + y: 4140945.8955901447 + theta: -1.8004570637359187 + kappa: -0.00070353039155512953 + s: 9.6287304510575957 + dkappa: 0 + ddkappa: 0 + } + v: 0.3012477553335341 + a: -0.17980888220870783 + relative_time: 5.4499999999999886 +} +trajectory_point { + path_point { + x: 587258.29264058371 + y: 4140945.8811388533 + theta: -1.8004622489785731 + kappa: -0.00073291819195302351 + s: 9.6435706510874581 + dkappa: 0 + ddkappa: 0 + } + v: 0.29241145635056187 + a: -0.17366361485998055 + relative_time: 5.4999999999999885 +} +trajectory_point { + path_point { + x: 587258.28936417028 + y: 4140945.8671103683 + theta: -1.80046728251486 + kappa: -0.0007614461837250787 + s: 9.6579766664617122 + dkappa: 0 + ddkappa: 0 + } + v: 0.28387934437088752 + a: -0.16764131611017072 + relative_time: 5.5499999999999883 +} +trajectory_point { + path_point { + x: 587258.28618308075 + y: 4140945.8534900276 + theta: -1.8004721696053725 + kappa: -0.00078914418172831163 + s: 9.6719635530346917 + dkappa: 0 + ddkappa: 0 + } + v: 0.27564528385955817 + a: -0.16174147015956081 + relative_time: 5.5999999999999881 +} +trajectory_point { + path_point { + x: 587258.28309396072 + y: 4140945.8402634691 + theta: -1.8004769154037399 + kappa: -0.0008160413945916496 + s: 9.6855460605287309 + dkappa: 0 + ddkappa: 0 + } + v: 0.26770316507160669 + a: -0.15596356120843319 + relative_time: 5.6499999999999879 +} +trajectory_point { + path_point { + x: 587258.28009352484 + y: 4140945.8274166267 + theta: -1.8004815249570782 + kappa: -0.00084216642726950644 + s: 9.6987386338236643 + dkappa: 0 + ddkappa: 0 + } + v: 0.26004690405205216 + a: -0.15030707345707039 + relative_time: 5.6999999999999877 +} +trajectory_point { + path_point { + x: 587258.27717855689 + y: 4140945.8149357284 + theta: -1.80048600320644 + kappa: -0.00086754728359536549 + s: 9.71155541424633 + dkappa: 0 + ddkappa: 0 + } + v: 0.25267044263589894 + a: -0.14477149110575482 + relative_time: 5.7499999999999876 +} +trajectory_point { + path_point { + x: 587258.27434590948 + y: 4140945.8028072985 + theta: -1.800490354987266 + kappa: -0.00089221136883534287 + s: 9.7240102408600659 + dkappa: 0 + ddkappa: 0 + } + v: 0.24556774844813789 + a: -0.13935629835476898 + relative_time: 5.7999999999999874 +} +trajectory_point { + path_point { + x: 587258.27159250365 + y: 4140945.7910181535 + theta: -1.8004945850298346 + kappa: -0.00091618549224176484 + s: 9.736116651754207 + dkappa: 0 + ddkappa: 0 + } + v: 0.23873281490374526 + a: -0.13406097940439532 + relative_time: 5.8499999999999872 +} +trajectory_point { + path_point { + x: 587258.26891532831 + y: 4140945.7795554018 + theta: -1.8004986979597131 + kappa: -0.00093949586960673508 + s: 9.7478878853335846 + dkappa: 0 + ddkappa: 0 + } + v: 0.23215966120768361 + a: -0.12888501845491629 + relative_time: 5.899999999999987 +} +trajectory_point { + path_point { + x: 587258.26631144062 + y: 4140945.7684064424 + theta: -1.8005026982982077 + kappa: -0.00096216812581573165 + s: 9.7593368816080357 + dkappa: 0 + ddkappa: 0 + } + v: 0.2258423323549007 + a: -0.12382789970661423 + relative_time: 5.9499999999999869 +} +trajectory_point { + path_point { + x: 587258.2637779651 + y: 4140945.7575589647 + theta: -1.8005065904628148 + kappa: -0.0009842272974011437 + s: 9.7704762834818837 + dkappa: 0 + ddkappa: 0 + } + v: 0.21977489913033116 + a: -0.11888910735977182 + relative_time: 5.9999999999999867 +} +trajectory_point { + path_point { + x: 587258.26131208707 + y: 4140945.7470009159 + theta: -1.8005103787778785 + kappa: -0.0010056978929453247 + s: 9.7813184672561668 + dkappa: 0 + ddkappa: 0 + } + v: 0.21395318228858232 + a: -0.11400141205645736 + relative_time: 6.0499999999999865 +} +trajectory_point { + path_point { + x: 587258.25891103456 + y: 4140945.7367204283 + theta: -1.8005140675017814 + kappa: -0.0010266040471948285 + s: 9.7918756204529753 + dkappa: 0 + ddkappa: 0 + } + v: 0.20837259413827636 + a: -0.10924354393781499 + relative_time: 6.0999999999999863 +} +trajectory_point { + path_point { + x: 587258.2565721022 + y: 4140945.7267059181 + theta: -1.8005176607907654 + kappa: -0.0010469693159958638 + s: 9.8021596382623155 + dkappa: 0 + ddkappa: 0 + } + v: 0.20302670568480541 + a: -0.10461300841889809 + relative_time: 6.1499999999999861 +} +trajectory_point { + path_point { + x: 587258.25429265713 + y: 4140945.716946112 + theta: -1.8005211626898443 + kappa: -0.0010668166248080685 + s: 9.8121820975426868 + dkappa: 0 + ddkappa: 0 + } + v: 0.19790921266280692 + a: -0.10010731091476019 + relative_time: 6.199999999999986 +} +trajectory_point { + path_point { + x: 587258.2520701373 + y: 4140945.7074300395 + theta: -1.8005245771349847 + kappa: -0.0010861682810545024 + s: 9.8219542630575578 + dkappa: 0 + ddkappa: 0 + } + v: 0.19301393553616555 + a: -0.09572395684045476 + relative_time: 6.2499999999999858 +} +trajectory_point { + path_point { + x: 587258.24990205024 + y: 4140945.6981470305 + theta: -1.8005279079552852 + kappa: -0.0011050459864715848 + s: 9.8314870937118179 + dkappa: 0 + ddkappa: 0 + } + v: 0.18833481949801339 + a: -0.091460451611035345 + relative_time: 6.2999999999999856 +} +trajectory_point { + path_point { + x: 587258.24778597173 + y: 4140945.689086704 + theta: -1.8005311588751542 + kappa: -0.0011234708494590726 + s: 9.8407912487882463 + dkappa: 0 + ddkappa: 0 + } + v: 0.18386593447072974 + a: -0.087314300641555445 + relative_time: 6.3499999999999854 +} +trajectory_point { + path_point { + x: 587258.24571954424 + y: 4140945.6802389664 + theta: -1.8005343335164896 + kappa: -0.001141463397430017 + s: 9.8498770941839719 + dkappa: 0 + ddkappa: 0 + } + v: 0.17960147510594132 + a: -0.08328300934706856 + relative_time: 6.3999999999999853 +} +trajectory_point { + path_point { + x: 587258.24370047555 + y: 4140945.6715940023 + theta: -1.8005374354008588 + kappa: -0.0011590435891607254 + s: 9.858754708646936 + dkappa: 0 + ddkappa: 0 + } + v: 0.17553576078452213 + a: -0.0793640831426282 + relative_time: 6.4499999999999851 +} +trajectory_point { + path_point { + x: 587258.24172653712 + y: 4140945.6631422713 + theta: -1.8005404679516754 + kappa: -0.0011762308271407234 + s: 9.8674338900123537 + dkappa: 0 + ddkappa: 0 + } + v: 0.17166323561659352 + a: -0.075555027443287875 + relative_time: 6.4999999999999849 +} +trajectory_point { + path_point { + x: 587258.23979556316 + y: 4140945.6548745 + theta: -1.8005434344963811 + kappa: -0.0011930439699227259 + s: 9.8759241614391815 + dkappa: 0 + ddkappa: 0 + } + v: 0.16797846844152414 + a: -0.0718533476641011 + relative_time: 6.5499999999999847 +} +trajectory_point { + path_point { + x: 587258.23790544888 + y: 4140945.6467816755 + theta: -1.8005463382686222 + kappa: -0.0012095013444725832 + s: 9.88423477764657 + dkappa: 0 + ddkappa: 0 + } + v: 0.16447615282793 + a: -0.068256549220121393 + relative_time: 6.5999999999999845 +} +trajectory_point { + path_point { + x: 587258.23605414911 + y: 4140945.638855041 + theta: -1.8005491824104307 + kappa: -0.001225620758519258 + s: 9.8923747311503369 + dkappa: 0 + ddkappa: 0 + } + v: 0.16115110707367436 + a: -0.064762137526402239 + relative_time: 6.6499999999999844 +} +trajectory_point { + path_point { + x: 587258.23423967673 + y: 4140945.6310860892 + theta: -1.8005519699744017 + kappa: -0.0012414195129047741 + s: 9.9003527584994178 + dkappa: 0 + ddkappa: 0 + } + v: 0.1579982742058679 + a: -0.061367617997997156 + relative_time: 6.6999999999999842 +} +trajectory_point { + path_point { + x: 587258.2324601016 + y: 4140945.6234665555 + theta: -1.8005547039258738 + kappa: -0.0012569144139341995 + s: 9.9081773465123426 + dkappa: 0 + ddkappa: 0 + } + v: 0.15501272198086855 + a: -0.058070496049959668 + relative_time: 6.749999999999984 +} +trajectory_point { + path_point { + x: 587258.23071354907 + y: 4140945.6159884133 + theta: -1.800557387145107 + kappa: -0.0012721217857255816 + s: 9.9158567385136838 + dkappa: 0 + ddkappa: 0 + } + v: 0.15218964288428161 + a: -0.054868277097343265 + relative_time: 6.7999999999999838 +} +trajectory_point { + path_point { + x: 587258.22899819817 + y: 4140945.6086438652 + theta: -1.8005600224294629 + kappa: -0.0012870574825599357 + s: 9.92339894057053 + dkappa: 0 + ddkappa: 0 + } + v: 0.14952435413095966 + a: -0.051758466555201457 + relative_time: 6.8499999999999837 +} +trajectory_point { + path_point { + x: 587258.22731228045 + y: 4140945.6014253409 + theta: -1.8005626124955827 + kappa: -0.0013017369012311875 + s: 9.9308117277289423 + dkappa: 0 + ddkappa: 0 + } + v: 0.14701229766500268 + a: -0.048738569838587764 + relative_time: 6.8999999999999835 +} +trajectory_point { + path_point { + x: 587258.22565407888 + y: 4140945.5943254875 + theta: -1.8005651599815666 + kappa: -0.0013161749933961464 + s: 9.9381026502504159 + dkappa: 0 + ddkappa: 0 + } + v: 0.14464904015975788 + a: -0.045806092362555687 + relative_time: 6.9499999999999833 +} +trajectory_point { + path_point { + x: 587258.22402192594 + y: 4140945.5873371656 + theta: -1.8005676674491538 + kappa: -0.0013303862779244623 + s: 9.9452790398483462 + dkappa: 0 + ddkappa: 0 + } + v: 0.14243027301781985 + a: -0.042958539542158738 + relative_time: 6.9999999999999831 +} +trajectory_point { + path_point { + x: 587258.22241420264 + y: 4140945.5804534419 + theta: -1.8005701373858993 + kappa: -0.0013443848532485915 + s: 9.952348015924489 + dkappa: 0 + ddkappa: 0 + } + v: 0.14035181237103056 + a: -0.040193416792450434 + relative_time: 7.0499999999999829 +} +trajectory_point { + path_point { + x: 587258.22082933621 + y: 4140945.5736675849 + theta: -1.800572572207356 + kappa: -0.0013581844097137622 + s: 9.959316491805426 + dkappa: 0 + ddkappa: 0 + } + v: 0.13840959908047912 + a: -0.037508229528484274 + relative_time: 7.0999999999999828 +} +trajectory_point { + path_point { + x: 587258.21926580009 + y: 4140945.5669730571 + theta: -1.8005749742592505 + kappa: -0.0013717982419279211 + s: 9.9661911809790187 + dkappa: 0 + ddkappa: 0 + } + v: 0.13659969873650218 + a: -0.034900483165313759 + relative_time: 7.1499999999999826 +} +trajectory_point { + path_point { + x: 587258.21771390561 + y: 4140945.5603654315 + theta: -1.8005905394399646 + kappa: -0.0013879709823656089 + s: 9.9729786033308852 + dkappa: 0 + ddkappa: 0 + } + v: 0.13491830165868363 + a: -0.03236768311799243 + relative_time: 7.1999999999999824 +} +trajectory_point { + path_point { + x: 587258.21617944585 + y: 4140945.5538368472 + theta: -1.8006076395441328 + kappa: -0.0014043071087396584 + s: 9.9796850913808441 + dkappa: 0 + ddkappa: 0 + } + v: 0.13336172289585457 + a: -0.029907334801573759 + relative_time: 7.2499999999999822 +} +trajectory_point { + path_point { + x: 587258.2146620967 + y: 4140945.5473810616 + theta: -1.8006245489686503 + kappa: -0.001420461073737692 + s: 9.9863167965193931 + dkappa: 0 + ddkappa: 0 + } + v: 0.13192640222609364 + a: -0.027516943631111276 + relative_time: 7.2999999999999821 +} +trajectory_point { + path_point { + x: 587258.2131604905 + y: 4140945.5409922572 + theta: -1.8006412829522707 + kappa: -0.0014364474353250525 + s: 9.9928796952441648 + dkappa: 0 + ddkappa: 0 + } + v: 0.13060890415672666 + a: -0.025194015021658495 + relative_time: 7.3499999999999819 +} +trajectory_point { + path_point { + x: 587258.21167329862 + y: 4140945.5346647804 + theta: -1.800657856303713 + kappa: -0.0014522803406421751 + s: 9.9993795953963875 + dkappa: 0 + ddkappa: 0 + } + v: 0.12940591792432676 + a: -0.022936054388268887 + relative_time: 7.3999999999999817 +} +trajectory_point { + path_point { + x: 587258.21019922942 + y: 4140945.5283931359 + theta: -1.8006742834175635 + kappa: -0.0014679735411957996 + s: 10.005822142397351 + dkappa: 0 + ddkappa: 0 + } + v: 0.12831425749471448 + a: -0.020740567145996008 + relative_time: 7.4499999999999815 +} +trajectory_point { + path_point { + x: 587258.20873702655 + y: 4140945.5221719788 + theta: -1.8006905782901772 + kappa: -0.0014835404080501629 + s: 10.012212825484863 + dkappa: 0 + ddkappa: 0 + } + v: 0.12733086156295764 + a: -0.018605058709893332 + relative_time: 7.4999999999999813 +} +trajectory_point { + path_point { + x: 587258.2072854687 + y: 4140945.515996112 + theta: -1.8007067545355782 + kappa: -0.0014989939470182328 + s: 10.018556983949722 + dkappa: 0 + ddkappa: 0 + } + v: 0.12645279355337141 + a: -0.016527034495014387 + relative_time: 7.5499999999999812 +} +trajectory_point { + path_point { + x: 587258.205843367 + y: 4140945.5098604783 + theta: -1.8007228254013627 + kappa: -0.0015143468138528798 + s: 10.024859813372169 + dkappa: 0 + ddkappa: 0 + } + v: 0.12567724161951827 + a: -0.0145039999164127 + relative_time: 7.599999999999981 +} +trajectory_point { + path_point { + x: 587258.20440956415 + y: 4140945.5037601534 + theta: -1.8007388037845995 + kappa: -0.001529611329438105 + s: 10.031126371858356 + dkappa: 0 + ddkappa: 0 + } + v: 0.12500151864420797 + a: -0.012533460389141771 + relative_time: 7.6499999999999808 +} +trajectory_point { + path_point { + x: 587258.202982933 + y: 4140945.4976903414 + theta: -1.8007547022477317 + kappa: -0.0015447994949802336 + s: 10.037361586276806 + dkappa: 0 + ddkappa: 0 + } + v: 0.12442306223949769 + a: -0.010612921328255046 + relative_time: 7.6999999999999806 +} +trajectory_point { + path_point { + x: 587258.20156237471 + y: 4140945.4916463671 + theta: -1.8007705330344781 + kappa: -0.0015599230071991319 + s: 10.043570258494876 + dkappa: 0 + ddkappa: 0 + } + v: 0.12393943474669185 + a: -0.0087398881488061075 + relative_time: 7.7499999999999805 +} +trajectory_point { + path_point { + x: 587258.20014681784 + y: 4140945.4856236721 + theta: -1.8007863080857351 + kappa: -0.0015749932735194024 + s: 10.049757071615222 + dkappa: 0 + ddkappa: 0 + } + v: 0.12354832323634221 + a: -0.006911866265848457 + relative_time: 7.79999999999998 +} +trajectory_point { + path_point { + x: 587258.19873521663 + y: 4140945.4796178066 + theta: -1.8008020390554778 + kappa: -0.00159002142726159 + s: 10.055926596212254 + dkappa: 0 + ddkappa: 0 + } + v: 0.12324753950824795 + a: -0.0051263610944355664 + relative_time: 7.84999999999998 +} +trajectory_point { + path_point { + x: 587258.19732654956 + y: 4140945.4736244255 + theta: -1.8008177373266614 + kappa: -0.0016050183428333929 + s: 10.062083296568607 + dkappa: 0 + ddkappa: 0 + } + v: 0.12303502009145535 + a: -0.0033808780496209917 + relative_time: 7.89999999999998 +} +trajectory_point { + path_point { + x: 587258.19591981824 + y: 4140945.4676392805 + theta: -1.8008334140271234 + kappa: -0.001619994650920865 + s: 10.068231536911599 + dkappa: 0 + ddkappa: 0 + } + v: 0.12290882624425828 + a: -0.0016729225464582054 + relative_time: 7.94999999999998 +} +trajectory_point { + path_point { + x: 587258.19451404561 + y: 4140945.4616582133 + theta: -1.8008490800454844 + kappa: -0.0016349607536796187 + s: 10.074375587649691 + dkappa: 0 + ddkappa: 0 + } + v: 0.12286714395419777 + a: -7.2164496600635175e-16 + relative_time: 7.99999999999998 +} +decision { + main_decision { + cruise { + } + } + object_decision { + decision { + id: "867_0" + perception_id: 867 + object_decision { + follow { + distance_s: -18.399999618530273 + fence_point { + x: 587259.31352400826 + y: 4140950.3363249092 + z: 0 + } + fence_heading: -1.8051302964193257 + } + } + } + decision { + id: "867_1" + perception_id: 867 + object_decision { + follow { + distance_s: -18.399999618530273 + fence_point { + x: 587259.32508212491 + y: 4140950.3847450963 + z: 0 + } + fence_heading: -1.8052562600070003 + } + } + } + decision { + id: "1058_0" + perception_id: 1058 + object_decision { + ignore { + } + } + } + decision { + id: "DEST" + perception_id: -1109540454 + object_decision { + ignore { + } + } + } + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/result_nudge_0.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/result_nudge_0.pb.txt new file mode 100644 index 00000000000..55e363b3051 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/result_nudge_0.pb.txt @@ -0,0 +1,2289 @@ +header { + module_name: "planning" +} +is_replan: true +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: 587325.338303 + y: 4141206.17551 + z: 0 + theta: -1.82326794493 + kappa: -0.000370558563240735 + dkappa: 0 + ddkappa: 0 + } + v: 11.011111259460449 + a: -0.093755321534999936 + relative_time: 0 +} +trajectory_point { + path_point { + x: 587325.20074021607 + y: 4141205.6425445233 + theta: -1.8233778224499944 + kappa: -0.00019044427372334614 + s: 0.55043230181244784 + dkappa: 0 + ddkappa: 0 + } + v: 11.006061037507905 + a: -0.10812873941577225 + relative_time: 0.05 +} +trajectory_point { + path_point { + x: 587325.06323924393 + y: 4141205.1098421151 + theta: -1.8234585354910551 + kappa: -1.9404031125209831e-05 + s: 1.1005944355832094 + dkappa: 0 + ddkappa: 0 + } + v: 11.000310690067128 + a: -0.12176388440120897 + relative_time: 0.1 +} +trajectory_point { + path_point { + x: 587324.92578961793 + y: 4141204.5774406861 + theta: -1.8234132568528276 + kappa: 0.00011266516199032143 + s: 1.6504523090206504 + dkappa: 0 + ddkappa: 0 + } + v: 10.993896599282357 + a: -0.13468201651231448 + relative_time: 0.15000000000000002 +} +trajectory_point { + path_point { + x: 587324.78846276761 + y: 4141204.04535516 + theta: -1.8233264366154429 + kappa: 0.00023020252496799338 + s: 2.1999736223653215 + dkappa: 0 + ddkappa: 0 + } + v: 10.986854084296786 + a: -0.14690439577009315 + relative_time: 0.2 +} +trajectory_point { + path_point { + x: 587324.65129242255 + y: 4141203.5136083928 + theta: -1.823170012724963 + kappa: 0.00032344446141365212 + s: 2.7491278152399072 + dkappa: 0 + ddkappa: 0 + } + v: 10.979217401252553 + a: -0.15845228219554935 + relative_time: 0.25 +} +trajectory_point { + path_point { + x: 587324.51432599255 + y: 4141202.982218002 + theta: -1.8229701815818189 + kappa: 0.00040052775583079717 + s: 3.297886013499173 + dkappa: 0 + ddkappa: 0 + } + v: 10.971019743290752 + a: -0.16934693580968746 + relative_time: 0.3 +} +trajectory_point { + path_point { + x: 587324.3775485165 + y: 4141202.4512159741 + theta: -1.8227359720925704 + kappa: 0.00046478332642055516 + s: 3.8462209760799126 + dkappa: 0 + ddkappa: 0 + } + v: 10.962293240551423 + a: -0.17960961663351194 + relative_time: 0.35 +} +trajectory_point { + path_point { + x: 587324.24107165332 + y: 4141201.9206001116 + theta: -1.8224626198218949 + kappa: 0.00051487486883943965 + s: 4.3941070418508952 + dkappa: 0 + ddkappa: 0 + } + v: 10.953068960173557 + a: -0.18926158468802703 + relative_time: 0.39999999999999997 +} +trajectory_point { + path_point { + x: 587324.104779257 + y: 4141201.3904252225 + theta: -1.8221756087777328 + kappa: 0.00055993835467897006 + s: 4.9415200764628144 + dkappa: 0 + ddkappa: 0 + } + v: 10.943376906295091 + a: -0.19832409999423722 + relative_time: 0.44999999999999996 +} +trajectory_point { + path_point { + x: 587323.9688815457 + y: 4141200.8606607611 + theta: -1.8218519713850516 + kappa: 0.00059674926550455979 + s: 5.4884374191982319 + dkappa: 0 + ddkappa: 0 + } + v: 10.93324602005292 + a: -0.20681842257314687 + relative_time: 0.49999999999999994 +} +trajectory_point { + path_point { + x: 587323.83316750871 + y: 4141200.3313828572 + theta: -1.8215227995579593 + kappa: 0.00063076273660216586 + s: 6.0348378298215311 + dkappa: 0 + ddkappa: 0 + } + v: 10.922704179582881 + a: -0.21476581244576032 + relative_time: 0.54999999999999993 +} +trajectory_point { + path_point { + x: 587323.6978868962 + y: 4141199.8025480704 + theta: -1.821169376890303 + kappa: 0.000645051574611446 + s: 6.5807014354288595 + dkappa: 0 + ddkappa: 0 + } + v: 10.911778200019766 + a: -0.222187529633082 + relative_time: 0.6 +} +trajectory_point { + path_point { + x: 587323.56283482723 + y: 4141199.2742280988 + theta: -1.8208169492899802 + kappa: 0.000650457807711661 + s: 7.1260096772980761 + dkappa: 0 + ddkappa: 0 + } + v: 10.900493833497311 + a: -0.22910483415611624 + relative_time: 0.65 +} +trajectory_point { + path_point { + x: 587323.42817579722 + y: 4141198.7463987716 + theta: -1.8204666478517926 + kappa: 0.00063135270516702813 + s: 7.6707452577387025 + dkappa: 0 + ddkappa: 0 + } + v: 10.888875769148209 + a: -0.23553898603586748 + relative_time: 0.70000000000000007 +} +trajectory_point { + path_point { + x: 587323.29380309756 + y: 4141198.2191040516 + theta: -1.8201314625639411 + kappa: 0.00059984891472428812 + s: 8.21489208694187 + dkappa: 0 + ddkappa: 0 + } + v: 10.876947633104097 + a: -0.24151124529334006 + relative_time: 0.75000000000000011 +} +trajectory_point { + path_point { + x: 587323.1597625775 + y: 4141197.6923476686 + theta: -1.8198158159007611 + kappa: 0.00055222820571638044 + s: 8.7584352298302637 + dkappa: 0 + ddkappa: 0 + } + v: 10.864731988495564 + a: -0.24704287194953839 + relative_time: 0.80000000000000016 +} +trajectory_point { + path_point { + x: 587323.02604103717 + y: 4141197.1661473624 + theta: -1.8195360523718473 + kappa: 0.00049101488374175719 + s: 9.3013608529080685 + dkappa: 0 + ddkappa: 0 + } + v: 10.852250335452148 + a: -0.25215512602546686 + relative_time: 0.8500000000000002 +} +trajectory_point { + path_point { + x: 587322.8925859055 + y: 4141196.640529688 + theta: -1.8192803040385017 + kappa: 0.00042077197336822832 + s: 9.84365617111093 + dkappa: 0 + ddkappa: 0 + } + v: 10.839523111102338 + a: -0.25686926754212974 + relative_time: 0.90000000000000024 +} +trajectory_point { + path_point { + x: 587322.75944884564 + y: 4141196.1154937567 + theta: -1.8190845292002427 + kappa: 0.00033875000433937735 + s: 10.385309394655877 + dkappa: 0 + ddkappa: 0 + } + v: 10.826569689573573 + a: -0.26120655652053154 + relative_time: 0.95000000000000029 +} +trajectory_point { + path_point { + x: 587322.62652247015 + y: 4141195.5910780025 + theta: -1.8189077027157283 + kappa: 0.00025310698785384507 + s: 10.926309675891298 + dkappa: 0 + ddkappa: 0 + } + v: 10.813408381992238 + a: -0.26518825298167659 + relative_time: 1.0000000000000002 +} +trajectory_point { + path_point { + x: 587322.49387637479 + y: 4141195.067275085 + theta: -1.8188134063442374 + kappa: 0.0001609532355841328 + s: 11.466647056146869 + dkappa: 0 + ddkappa: 0 + } + v: 10.800056436483676 + a: -0.26883561694656932 + relative_time: 1.0500000000000003 +} +trajectory_point { + path_point { + x: 587322.36140849639 + y: 4141194.5441202726 + theta: -1.8187331272030274 + kappa: 6.8489206339676845e-05 + s: 12.006312412583506 + dkappa: 0 + ddkappa: 0 + } + v: 10.786530038172168 + a: -0.272169908436214 + relative_time: 1.1000000000000003 +} +trajectory_point { + path_point { + x: 587322.22914429568 + y: 4141194.0216157231 + theta: -1.8187383945301498 + kappa: -2.1764969078849011e-05 + s: 12.545297405043314 + dkappa: 0 + ddkappa: 0 + } + v: 10.772844309180957 + a: -0.27521238747161514 + relative_time: 1.1500000000000004 +} +trajectory_point { + path_point { + x: 587322.09703852981 + y: 4141193.4997807443 + theta: -1.818762211090974 + kappa: -0.00010903572933566504 + s: 13.083594422899534 + dkappa: 0 + ddkappa: 0 + } + v: 10.759013308632229 + a: -0.277984314073777 + relative_time: 1.2000000000000004 +} +trajectory_point { + path_point { + x: 587321.96506660362 + y: 4141192.9786287141 + theta: -1.8188515391499647 + kappa: -0.00018606289988857554 + s: 13.621196531906488 + dkappa: 0 + ddkappa: 0 + } + v: 10.745050032647118 + a: -0.28050694826370404 + relative_time: 1.2500000000000004 +} +trajectory_point { + path_point { + x: 587321.83322311984 + y: 4141192.4581675176 + theta: -1.818964723277547 + kappa: -0.0002540035743142769 + s: 14.158097421049531 + dkappa: 0 + ddkappa: 0 + } + v: 10.730966414345712 + a: -0.28280155006240065 + relative_time: 1.3000000000000005 +} +trajectory_point { + path_point { + x: 587321.70147726312 + y: 4141191.9384108847 + theta: -1.8191194421929711 + kappa: -0.00030622977686664218 + s: 14.694291349394996 + dkappa: 0 + ddkappa: 0 + } + v: 10.716773323847047 + a: -0.28488937949087118 + relative_time: 1.3500000000000005 +} +trajectory_point { + path_point { + x: 587321.56982120266 + y: 4141191.4193662116 + theta: -1.819291171640318 + kappa: -0.00033949952547703954 + s: 15.229773092940139 + dkappa: 0 + ddkappa: 0 + } + v: 10.702480568269111 + a: -0.28679169657011994 + relative_time: 1.4000000000000006 +} +trajectory_point { + path_point { + x: 587321.4382579216 + y: 4141190.9010376553 + theta: -1.8194795438194313 + kappa: -0.00035421435430762772 + s: 15.764537891463092 + dkappa: 0 + ddkappa: 0 + } + v: 10.68809689172884 + a: -0.28852976132115149 + relative_time: 1.4500000000000006 +} +trajectory_point { + path_point { + x: 587321.30675565707 + y: 4141190.3834377998 + theta: -1.8196620337308522 + kappa: -0.00033889918949270992 + s: 16.298581395372807 + dkappa: 0 + ddkappa: 0 + } + v: 10.673629975342116 + a: -0.29012483376497006 + relative_time: 1.5000000000000007 +} +trajectory_point { + path_point { + x: 587321.17536657443 + y: 4141189.8665575138 + theta: -1.8198411140044808 + kappa: -0.00030674574349160246 + s: 16.831899612559003 + dkappa: 0 + ddkappa: 0 + } + v: 10.659086437223779 + a: -0.29159817392258008 + relative_time: 1.5500000000000007 +} +trajectory_point { + path_point { + x: 587321.044038737 + y: 4141189.3504138365 + theta: -1.8199903690616717 + kappa: -0.00027114717282528697 + s: 17.364488855242111 + dkappa: 0 + ddkappa: 0 + } + v: 10.644471832487612 + a: -0.2929710418149859 + relative_time: 1.6000000000000008 +} +trajectory_point { + path_point { + x: 587320.91285631165 + y: 4141188.8349889042 + theta: -1.8201306235966686 + kappa: -0.00023456013660645196 + s: 17.896345686823235 + dkappa: 0 + ddkappa: 0 + } + v: 10.629790653246351 + a: -0.29426469746319195 + relative_time: 1.6500000000000008 +} +trajectory_point { + path_point { + x: 587320.78174798423 + y: 4141188.3203042289 + theta: -1.8202392499560529 + kappa: -0.00019814150135089395 + s: 18.427466868734079 + dkappa: 0 + ddkappa: 0 + } + v: 10.61504632861168 + a: -0.29550040088820262 + relative_time: 1.7000000000000008 +} +trajectory_point { + path_point { + x: 587320.65080822667 + y: 4141187.8063389468 + theta: -1.8203433827228841 + kappa: -0.00016157466017860018 + s: 18.957849307286914 + dkappa: 0 + ddkappa: 0 + } + v: 10.600241224694233 + a: -0.29669941211102224 + relative_time: 1.7500000000000009 +} +trajectory_point { + path_point { + x: 587320.51997231273 + y: 4141187.2931126542 + theta: -1.82040689334367 + kappa: -0.00011300925526366524 + s: 19.487490000524506 + dkappa: 0 + ddkappa: 0 + } + v: 10.585376644603597 + a: -0.29788299115265515 + relative_time: 1.8000000000000009 +} +trajectory_point { + path_point { + x: 587320.38931564812 + y: 4141186.7806091923 + theta: -1.8204621710559232 + kappa: -6.0877551535721906e-05 + s: 20.016385985070087 + dkappa: 0 + ddkappa: 0 + } + v: 10.570452828448303 + a: -0.2990723980341059 + relative_time: 1.850000000000001 +} +trajectory_point { + path_point { + x: 587320.2588130415 + y: 4141186.2688380578 + theta: -1.8204644294764289 + kappa: 1.4808689536312035e-05 + s: 20.544534282977274 + dkappa: 0 + ddkappa: 0 + } + v: 10.55546895333584 + a: -0.30028889277637871 + relative_time: 1.900000000000001 +} +trajectory_point { + path_point { + x: 587320.12850585 + y: 4141185.7577918489 + theta: -1.8204438081519982 + kappa: 0.00010016765608429543 + s: 21.071931848580046 + dkappa: 0 + ddkappa: 0 + } + v: 10.540423133372636 + a: -0.30155373540047803 + relative_time: 1.9500000000000011 +} +trajectory_point { + path_point { + x: 587319.99841559981 + y: 4141185.2474683449 + theta: -1.8203524351126108 + kappa: 0.00021566539124039645 + s: 21.59857551534267 + dkappa: 0 + ddkappa: 0 + } + v: 10.525312419664077 + a: -0.30288818592741451 + relative_time: 2.0000000000000009 +} +trajectory_point { + path_point { + x: 587319.86856486986 + y: 4141184.737864905 + theta: -1.8202148641694202 + kappa: 0.00034070884966716541 + s: 22.124462274926415 + dkappa: 0 + ddkappa: 0 + } + v: 10.510153075180696 + a: -0.30347481881247262 + relative_time: 2.0500000000000007 +} +trajectory_point { + path_point { + x: 587319.73899903463 + y: 4141184.2289717915 + theta: -1.8199914775356891 + kappa: 0.00048360254742166314 + s: 22.649590360854706 + dkappa: 0 + ddkappa: 0 + } + v: 10.494966009108831 + a: -0.30399717213751132 + relative_time: 2.1000000000000005 +} +trajectory_point { + path_point { + x: 587319.60974861251 + y: 4141183.7207826353 + theta: -1.8197031721502825 + kappa: 0.00062832464624962324 + s: 23.173958467090888 + dkappa: 0 + ddkappa: 0 + } + v: 10.479754417025882 + a: -0.30445598192640405 + relative_time: 2.1500000000000004 +} +trajectory_point { + path_point { + x: 587319.48084169591 + y: 4141183.2132914774 + theta: -1.8193357630155937 + kappa: 0.00077531734394335728 + s: 23.697565446457155 + dkappa: 0 + ddkappa: 0 + } + v: 10.464521457708061 + a: -0.304851984203024 + relative_time: 2.2 +} +trajectory_point { + path_point { + x: 587319.35235512152 + y: 4141182.7064799713 + theta: -1.8188910576355748 + kappa: 0.00091557546578016017 + s: 24.22041030879447 + dkappa: 0 + ddkappa: 0 + } + v: 10.449270253130386 + a: -0.30518591499124464 + relative_time: 2.25 +} +trajectory_point { + path_point { + x: 587319.22424952232 + y: 4141182.2003589622 + theta: -1.8183822913811398 + kappa: 0.0010502075840376403 + s: 24.742492219122532 + dkappa: 0 + ddkappa: 0 + } + v: 10.434003888466679 + a: -0.30545851031493926 + relative_time: 2.3 +} +trajectory_point { + path_point { + x: 587319.09668099473 + y: 4141181.6948899305 + theta: -1.8177967635559955 + kappa: 0.0011688620047493245 + s: 25.263810495799689 + dkappa: 0 + ddkappa: 0 + } + v: 10.41872541208957 + a: -0.3056705061979812 + relative_time: 2.3499999999999996 +} +trajectory_point { + path_point { + x: 587318.96949955 + y: 4141181.1901113009 + theta: -1.8171677465694731 + kappa: 0.0012783130344936873 + s: 25.7843646086829 + dkappa: 0 + ddkappa: 0 + } + v: 10.403437835570493 + a: -0.30582263866424375 + relative_time: 2.3999999999999995 +} +trajectory_point { + path_point { + x: 587318.84297819342 + y: 4141180.6859551254 + theta: -1.8164727095269739 + kappa: 0.00136290616345245 + s: 26.304154177287653 + dkappa: 0 + ddkappa: 0 + } + v: 10.388144133679694 + a: -0.30591564373760027 + relative_time: 2.4499999999999993 +} +trajectory_point { + path_point { + x: 587318.71682638954 + y: 4141180.1824946436 + theta: -1.815752754569502 + kappa: 0.0014378048211716914 + s: 26.823178968947932 + dkappa: 0 + ddkappa: 0 + } + v: 10.372847244386218 + a: -0.30595025744192417 + relative_time: 2.4999999999999991 +} +trajectory_point { + path_point { + x: 587318.591439677 + y: 4141179.6796314055 + theta: -1.8149899587250276 + kappa: 0.001480779784908974 + s: 27.341438896976136 + dkappa: 0 + ddkappa: 0 + } + v: 10.35755006885792 + a: -0.30592721580108867 + relative_time: 2.5499999999999989 +} +trajectory_point { + path_point { + x: 587318.4663828226 + y: 4141179.1774740755 + theta: -1.814217310997454 + kappa: 0.0015157365815065321 + s: 27.858934018823028 + dkappa: 0 + ddkappa: 0 + } + v: 10.342255471461463 + a: -0.30584725483896719 + relative_time: 2.5999999999999988 +} +trajectory_point { + path_point { + x: 587318.34217205807 + y: 4141178.6758945268 + theta: -1.8134335663207566 + kappa: 0.0015140479576952076 + s: 28.375664534237679 + dkappa: 0 + ddkappa: 0 + } + v: 10.326966279762315 + a: -0.305711110579433 + relative_time: 2.6499999999999986 +} +trajectory_point { + path_point { + x: 587318.21824055584 + y: 4141178.1750331153 + theta: -1.8126492124809737 + kappa: 0.0015070746341612502 + s: 28.891630783427395 + dkappa: 0 + ddkappa: 0 + } + v: 10.311685284524746 + a: -0.30551951904635949 + relative_time: 2.6999999999999984 +} +trajectory_point { + path_point { + x: 587318.09519818716 + y: 4141177.6747390823 + theta: -1.8118918625556777 + kappa: 0.0014619858924998692 + s: 29.406833245217673 + dkappa: 0 + ddkappa: 0 + } + v: 10.296415239711839 + a: -0.30527321626362003 + relative_time: 2.7499999999999982 +} +trajectory_point { + path_point { + x: 587317.97238484258 + y: 4141177.1751746084 + theta: -1.8111375360394482 + kappa: 0.0014144486376960036 + s: 29.921272535212129 + dkappa: 0 + ddkappa: 0 + } + v: 10.281158862485482 + a: -0.30497293825508787 + relative_time: 2.799999999999998 +} +trajectory_point { + path_point { + x: 587317.85044954345 + y: 4141176.676179911 + theta: -1.810449227352827 + kappa: 0.0013316819313922697 + s: 30.434949403952448 + dkappa: 0 + ddkappa: 0 + } + v: 10.265918833206364 + a: -0.30461942104463635 + relative_time: 2.8499999999999979 +} +trajectory_point { + path_point { + x: 587317.72873361746 + y: 4141176.1779155773 + theta: -1.8097679683284922 + kappa: 0.0012473292631218821 + s: 30.947864735078319 + dkappa: 0 + ddkappa: 0 + } + v: 10.250697795433984 + a: -0.30421340065613889 + relative_time: 2.8999999999999977 +} +trajectory_point { + path_point { + x: 587317.6077820647 + y: 4141175.6802477464 + theta: -1.8091789197260193 + kappa: 0.0011372557074357608 + s: 31.460019543487373 + dkappa: 0 + ddkappa: 0 + } + v: 10.235498355926651 + a: -0.30375561311346871 + relative_time: 2.9499999999999975 +} +trajectory_point { + path_point { + x: 587317.48706789163 + y: 4141175.1833037389 + theta: -1.808604131045267 + kappa: 0.0010255353849193049 + s: 31.971414973495129 + dkappa: 0 + ddkappa: 0 + } + v: 10.220323084641477 + a: -0.30324679444049929 + relative_time: 2.9999999999999973 +} +trajectory_point { + path_point { + x: 587317.36698548833 + y: 4141174.6869866103 + theta: -1.8081346278891586 + kappa: 0.00089986035061605154 + s: 32.482052296994929 + dkappa: 0 + ddkappa: 0 + } + v: 10.205174514734376 + a: -0.3026876806611038 + relative_time: 3.0499999999999972 +} +trajectory_point { + path_point { + x: 587317.247143939 + y: 4141174.1913897758 + theta: -1.8076864598325071 + kappa: 0.00077319420720984937 + s: 32.991932911617887 + dkappa: 0 + ddkappa: 0 + } + v: 10.190055142560075 + a: -0.30207900779915575 + relative_time: 3.099999999999997 +} +trajectory_point { + path_point { + x: 587317.1278111994 + y: 4141173.6964469529 + theta: -1.8073476599666374 + kappa: 0.000640514756340057 + s: 33.501058338892818 + dkappa: 0 + ddkappa: 0 + } + v: 10.174967427672104 + a: -0.30142151187852834 + relative_time: 3.1499999999999968 +} +trajectory_point { + path_point { + x: 587317.00870714849 + y: 4141173.2022241428 + theta: -1.807036577332735 + kappa: 0.00050623777903267679 + s: 34.009430222406181 + dkappa: 0 + ddkappa: 0 + } + v: 10.159913792822802 + a: -0.30071592892309496 + relative_time: 3.1999999999999966 +} +trajectory_point { + path_point { + x: 587316.88998771 + y: 4141172.7086819829 + theta: -1.8068349289599077 + kappa: 0.00036497643702499484 + s: 34.517050325962039 + dkappa: 0 + ddkappa: 0 + } + v: 10.14489662396331 + a: -0.29996299495672896 + relative_time: 3.2499999999999964 +} +trajectory_point { + path_point { + x: 587316.771473611 + y: 4141172.2158617205 + theta: -1.8066661471629277 + kappa: 0.00022610171576633749 + s: 35.02392053174195 + dkappa: 0 + ddkappa: 0 + } + v: 10.12991827024358 + a: -0.29916344600330363 + relative_time: 3.2999999999999963 +} +trajectory_point { + path_point { + x: 587316.65323223127 + y: 4141171.723745103 + theta: -1.8066039926594153 + kappa: 9.4545650443370087e-05 + s: 35.530042838464979 + dkappa: 0 + ddkappa: 0 + } + v: 10.114981044012367 + a: -0.29831801808669234 + relative_time: 3.3499999999999961 +} +trajectory_point { + path_point { + x: 587316.53516553272 + y: 4141171.2323535248 + theta: -1.8065724448554641 + kappa: -2.8498975948400268e-05 + s: 36.035419359547561 + dkappa: 0 + ddkappa: 0 + } + v: 10.100087220817233 + a: -0.29742744723076842 + relative_time: 3.3999999999999959 +} +trajectory_point { + path_point { + x: 587316.41727380268 + y: 4141170.7416846282 + theta: -1.806626354409357 + kappa: -0.000128081874533941 + s: 36.540052321263516 + dkappa: 0 + ddkappa: 0 + } + v: 10.085239039404549 + a: -0.29649246945940522 + relative_time: 3.4499999999999957 +} +trajectory_point { + path_point { + x: 587316.29952836654 + y: 4141170.2517429017 + theta: -1.8067015163651996 + kappa: -0.00021299995541606377 + s: 37.043944060903925 + dkappa: 0 + ddkappa: 0 + } + v: 10.070438701719485 + a: -0.29551382079647603 + relative_time: 3.4999999999999956 +} +trajectory_point { + path_point { + x: 587316.18188858626 + y: 4141169.7625355963 + theta: -1.8068297396099886 + kappa: -0.000261604349950135 + s: 37.5470970249371 + dkappa: 0 + ddkappa: 0 + } + v: 10.05568837290603 + a: -0.29449223726585422 + relative_time: 3.5499999999999954 +} +trajectory_point { + path_point { + x: 587316.06437849847 + y: 4141169.2740543196 + theta: -1.8069674254610448 + kappa: -0.00030125145504246112 + s: 38.049513767168534 + dkappa: 0 + ddkappa: 0 + } + v: 10.040990181306965 + a: -0.29342845489141317 + relative_time: 3.5999999999999952 +} +trajectory_point { + path_point { + x: 587315.94694265723 + y: 4141168.7863096776 + theta: -1.8071270407173468 + kappa: -0.00032046241183732535 + s: 38.551196946900838 + dkappa: 0 + ddkappa: 0 + } + v: 10.026346218463887 + a: -0.29232320969702613 + relative_time: 3.649999999999995 +} +trajectory_point { + path_point { + x: 587315.82962673157 + y: 4141168.2992878561 + theta: -1.807289138527872 + kappa: -0.00033330352943553308 + s: 39.052149327093645 + dkappa: 0 + ddkappa: 0 + } + v: 10.011758539117196 + a: -0.29117723770656651 + relative_time: 3.6999999999999948 +} +trajectory_point { + path_point { + x: 587315.712370153 + y: 4141167.8130005021 + theta: -1.8074568990408109 + kappa: -0.00033234886324071453 + s: 39.552373772523595 + dkappa: 0 + ddkappa: 0 + } + v: 9.9972291612061 + a: -0.28999127494390758 + relative_time: 3.7499999999999947 +} +trajectory_point { + path_point { + x: 587315.59523291909 + y: 4141167.3274301272 + theta: -1.807621806902469 + kappa: -0.00032699225455728044 + s: 40.051873247944258 + dkappa: 0 + ddkappa: 0 + } + v: 9.98276006586861 + a: -0.28876605743292272 + relative_time: 3.7999999999999945 +} +trajectory_point { + path_point { + x: 587315.47815796523 + y: 4141166.8425873509 + theta: -1.8077809569142855 + kappa: -0.00031232969337461621 + s: 40.550650816246069 + dkappa: 0 + ddkappa: 0 + } + v: 9.968353197441548 + a: -0.28750232119748526 + relative_time: 3.8499999999999943 +} +trajectory_point { + path_point { + x: 587315.36120470113 + y: 4141166.3584546028 + theta: -1.8079335921097246 + kappa: -0.00029486265750267357 + s: 41.048709636616287 + dkappa: 0 + ddkappa: 0 + } + v: 9.95401046346054 + a: -0.28620080226146849 + relative_time: 3.8999999999999941 +} +trajectory_point { + path_point { + x: 587315.24432000844 + y: 4141165.8750413712 + theta: -1.8080727144913855 + kappa: -0.00027144466949883368 + s: 41.546052962698909 + dkappa: 0 + ddkappa: 0 + } + v: 9.9397337346600132 + a: -0.28486223664874583 + relative_time: 3.949999999999994 +} +trajectory_point { + path_point { + x: 587315.127564356 + y: 4141165.3923296137 + theta: -1.8082035754229622 + kappa: -0.000246687595280876 + s: 42.042684140754623 + dkappa: 0 + ddkappa: 0 + } + v: 9.9255248449732125 + a: -0.28348736038319056 + relative_time: 3.9999999999999938 +} +trajectory_point { + path_point { + x: 587315.010892074 + y: 4141164.9103268236 + theta: -1.8083167398923379 + kappa: -0.00021898477045581766 + s: 42.538606625050974 + dkappa: 0 + ddkappa: 0 + } + v: 9.9113866462323124 + a: -0.28203303170998822 + relative_time: 4.0499999999999936 +} +trajectory_point { + path_point { + x: 587314.89435644192 + y: 4141164.4290163955 + theta: -1.8084210952277471 + kappa: -0.00019102942740778183 + s: 43.033824036255538 + dkappa: 0 + ddkappa: 0 + } + v: 9.897322300801612 + a: -0.28053316307293652 + relative_time: 4.0999999999999934 +} +trajectory_point { + path_point { + x: 587314.7779188524 + y: 4141163.9484038185 + theta: -1.8085054796771998 + kappa: -0.00016244458474847857 + s: 43.528340124121044 + dkappa: 0 + ddkappa: 0 + } + v: 9.8833340954146482 + a: -0.2789873650581226 + relative_time: 4.1499999999999932 +} +trajectory_point { + path_point { + x: 587314.66162606876 + y: 4141163.4684737967 + theta: -1.8085818131572786 + kappa: -0.00013435587539188955 + s: 44.02215875322365 + dkappa: 0 + ddkappa: 0 + } + v: 9.86942433627566 + a: -0.27739524825163192 + relative_time: 4.1999999999999931 +} +trajectory_point { + path_point { + x: 587314.5454482364 + y: 4141162.9892294696 + theta: -1.8086382827288747 + kappa: -0.00010744195056653418 + s: 44.515283903936506 + dkappa: 0 + ddkappa: 0 + } + v: 9.8555953490595787 + a: -0.27575642323954991 + relative_time: 4.2499999999999929 +} +trajectory_point { + path_point { + x: 587314.42942171358 + y: 4141162.5106578106 + theta: -1.8086880007588544 + kappa: -8.1420938935082085e-05 + s: 45.007719673403265 + dkappa: 0 + ddkappa: 0 + } + v: 9.84184947891203 + a: -0.2740705006079619 + relative_time: 4.2999999999999927 +} +trajectory_point { + path_point { + x: 587314.31352557871 + y: 4141162.0327595556 + theta: -1.8087189936807069 + kappa: -5.7827433930211195e-05 + s: 45.499470276511637 + dkappa: 0 + ddkappa: 0 + } + v: 9.8281890904493387 + a: -0.27233709094295333 + relative_time: 4.3499999999999925 +} +trajectory_point { + path_point { + x: 587314.19778539613 + y: 4141161.5555240484 + theta: -1.8087449021483684 + kappa: -3.5202913497275029e-05 + s: 45.990540046866911 + dkappa: 0 + ddkappa: 0 + } + v: 9.8146165677585238 + a: -0.27055580483060959 + relative_time: 4.3999999999999924 +} +trajectory_point { + path_point { + x: 587314.08218993235 + y: 4141161.0789494305 + theta: -1.8087543348075921 + kappa: -1.5662826493378135e-05 + s: 46.480933437765493 + dkappa: 0 + ddkappa: 0 + } + v: 9.8011343143972987 + a: -0.26872625285701618 + relative_time: 4.4499999999999922 +} +trajectory_point { + path_point { + x: 587313.96675275161 + y: 4141160.6030277056 + theta: -1.8087602581481057 + kappa: 3.0749881122494456e-06 + s: 46.970655023168447 + dkappa: 0 + ddkappa: 0 + } + v: 9.787744753394076 + a: -0.26684804560825837 + relative_time: 4.499999999999992 +} +trajectory_point { + path_point { + x: 587313.8514725226 + y: 4141160.1277543642 + theta: -1.8087522088246415 + kappa: 1.8689918297001113e-05 + s: 47.459709498675032 + dkappa: 0 + ddkappa: 0 + } + v: 9.7744503272479584 + a: -0.26492079367042165 + relative_time: 4.5499999999999918 +} +trajectory_point { + path_point { + x: 587313.73635078908 + y: 4141159.6531240745 + theta: -1.8087419327424319 + kappa: 3.3815021604136171e-05 + s: 47.948101682496208 + dkappa: 0 + ddkappa: 0 + } + v: 9.76125349792875 + a: -0.26294410762959142 + relative_time: 4.5999999999999917 +} +trajectory_point { + path_point { + x: 587313.6213964842 + y: 4141159.1791295852 + theta: -1.8087199334885204 + kappa: 4.6461436715267838e-05 + s: 48.435836516428211 + dkappa: 0 + ddkappa: 0 + } + v: 9.7481567468769477 + a: -0.26091759807185311 + relative_time: 4.6499999999999915 +} +trajectory_point { + path_point { + x: 587313.50659899972 + y: 4141158.7057682555 + theta: -1.8086966105684112 + kappa: 5.8962901532312083e-05 + s: 48.922919066826061 + dkappa: 0 + ddkappa: 0 + } + v: 9.7351625750037449 + a: -0.25884087558329205 + relative_time: 4.6999999999999913 +} +trajectory_point { + path_point { + x: 587313.39197790157 + y: 4141158.2330299988 + theta: -1.8086628413301826 + kappa: 7.0456332326097852e-05 + s: 49.409354525577108 + dkappa: 0 + ddkappa: 0 + } + v: 9.7222735026910314 + a: -0.25671355074999375 + relative_time: 4.7499999999999911 +} +trajectory_point { + path_point { + x: 587313.27751043055 + y: 4141157.7609148617 + theta: -1.8086284618507957 + kappa: 8.1737066539195385e-05 + s: 49.895148211074556 + dkappa: 0 + ddkappa: 0 + } + v: 9.70949206979139 + a: -0.25453523415804352 + relative_time: 4.7999999999999909 +} +trajectory_point { + path_point { + x: 587313.16322861263 + y: 4141157.2894094763 + theta: -1.8085843947642521 + kappa: 9.006696304360576e-05 + s: 50.38030556919103 + dkappa: 0 + ddkappa: 0 + } + v: 9.6968208356281025 + a: -0.25230553639352682 + relative_time: 4.8499999999999908 +} +trajectory_point { + path_point { + x: 587313.04909565288 + y: 4141156.8185170279 + theta: -1.808540349701909 + kappa: 9.8357532375766376e-05 + s: 50.864832174252058 + dkappa: 0 + ddkappa: 0 + } + v: 9.684262378995145 + a: -0.25002406804252908 + relative_time: 4.8999999999999906 +} +trajectory_point { + path_point { + x: 587312.93515516189 + y: 4141156.3482210785 + theta: -1.8084906732567732 + kappa: 0.00010204111434562059 + s: 51.348733730009641 + dkappa: 0 + ddkappa: 0 + } + v: 9.67181929815719 + a: -0.24769043969113563 + relative_time: 4.94999999999999 +} +trajectory_point { + path_point { + x: 587312.82136047247 + y: 4141155.878526933 + theta: -1.8084410603791214 + kappa: 0.00010571998269192857 + s: 51.832016070615794 + dkappa: 0 + ddkappa: 0 + } + v: 9.6594942108496031 + a: -0.24530426192543195 + relative_time: 4.99999999999999 +} +trajectory_point { + path_point { + x: 587312.70775713352 + y: 4141155.4094174234 + theta: -1.8083888233766408 + kappa: 0.00010852938652298447 + s: 52.314685161596053 + dkappa: 0 + ddkappa: 0 + } + v: 9.64728975427845 + a: -0.24286514533150341 + relative_time: 5.04999999999999 +} +trajectory_point { + path_point { + x: 587312.59429948835 + y: 4141154.9408973316 + theta: -1.8083364923033611 + kappa: 0.00011128383361532224 + s: 52.79674710082304 + dkappa: 0 + ddkappa: 0 + } + v: 9.63520858512049 + a: -0.24037270049543544 + relative_time: 5.09999999999999 +} +trajectory_point { + path_point { + x: 587312.4810287077 + y: 4141154.4729502811 + theta: -1.8082814407735202 + kappa: 0.00011416576879915539 + s: 53.27820811948996 + dkappa: 0 + ddkappa: 0 + } + v: 9.6232533795231738 + a: -0.23782653800331344 + relative_time: 5.14999999999999 +} +trajectory_point { + path_point { + x: 587312.36790422513 + y: 4141154.0055795424 + theta: -1.8082260635616951 + kappa: 0.0001170626465243442 + s: 53.759074583084178 + dkappa: 0 + ddkappa: 0 + } + v: 9.6114268331046571 + a: -0.23522626844122282 + relative_time: 5.1999999999999895 +} +trajectory_point { + path_point { + x: 587312.25496209355 + y: 4141153.5387697043 + theta: -1.8081698867925078 + kappa: 0.00011695246522826124 + s: 54.239352992360736 + dkappa: 0 + ddkappa: 0 + } + v: 9.5997316609537844 + a: -0.23257150239524899 + relative_time: 5.2499999999999893 +} +trajectory_point { + path_point { + x: 587312.14216747531 + y: 4141153.0725223683 + theta: -1.8081135654509386 + kappa: 0.00011610622413671634 + s: 54.719049984315859 + dkappa: 0 + ddkappa: 0 + } + v: 9.5881705976300964 + a: -0.22986185045147733 + relative_time: 5.2999999999999892 +} +trajectory_point { + path_point { + x: 587312.02954645443 + y: 4141152.6068242579 + theta: -1.8080592844939212 + kappa: 0.00011249503488344466 + s: 55.198172333160542 + dkappa: 0 + ddkappa: 0 + } + v: 9.57674639716383 + a: -0.22709692319599331 + relative_time: 5.349999999999989 +} +trajectory_point { + path_point { + x: 587311.91707348963 + y: 4141152.1416744385 + theta: -1.8080058168239608 + kappa: 0.00010783809712140865 + s: 55.676726951294057 + dkappa: 0 + ddkappa: 0 + } + v: 9.5654618330559238 + a: -0.22427633121488227 + relative_time: 5.3999999999999888 +} +trajectory_point { + path_point { + x: 587311.80476391164 + y: 4141151.6770619503 + theta: -1.8079566289046212 + kappa: 0.00010078991139801405 + s: 56.154720890277481 + dkappa: 0 + ddkappa: 0 + } + v: 9.5543196982780021 + a: -0.22139968509422964 + relative_time: 5.4499999999999886 +} +trajectory_point { + path_point { + x: 587311.6926020598 + y: 4141151.2129831817 + theta: -1.807909856236052 + kappa: 9.2409600193349789e-05 + s: 56.632161341807247 + dkappa: 0 + ddkappa: 0 + } + v: 9.5433228052723926 + a: -0.21846659542012087 + relative_time: 5.4999999999999885 +} +trajectory_point { + path_point { + x: 587311.58059082588 + y: 4141150.7494298909 + theta: -1.8078686663750256 + kappa: 8.2135961550320038e-05 + s: 57.109055638688659 + dkappa: 0 + ddkappa: 0 + } + v: 9.5324739859521124 + a: -0.2154766727786413 + relative_time: 5.5499999999999883 +} +trajectory_point { + path_point { + x: 587311.46872416837 + y: 4141150.2863958478 + theta: -1.8078319966554333 + kappa: 7.033432956236734e-05 + s: 57.585411255809454 + dkappa: 0 + ddkappa: 0 + } + v: 9.5217760917008825 + a: -0.21242952775587637 + relative_time: 5.5999999999999881 +} +trajectory_point { + path_point { + x: 587311.35699573788 + y: 4141149.8238747511 + theta: -1.8078015454411822 + kappa: 5.7094370270350573e-05 + s: 58.06123581111332 + dkappa: 0 + ddkappa: 0 + } + v: 9.5112319933731122 + a: -0.20932477093791146 + relative_time: 5.6499999999999879 +} +trajectory_point { + path_point { + x: 587311.2454060975 + y: 4141149.3618584787 + theta: -1.8077784029224309 + kappa: 4.21596017184881e-05 + s: 58.536537066573416 + dkappa: 0 + ddkappa: 0 + } + v: 9.50084458129391 + a: -0.20616201291083205 + relative_time: 5.6999999999999877 +} +trajectory_point { + path_point { + x: 587311.13394275913 + y: 4141148.900341914 + theta: -1.807761111836873 + kappa: 2.6268654095379975e-05 + s: 59.011322929165956 + dkappa: 0 + ddkappa: 0 + } + v: 9.49061676525908 + a: -0.2029408642607235 + relative_time: 5.7499999999999876 +} +trajectory_point { + path_point { + x: 587311.022607917 + y: 4141148.4393162429 + theta: -1.8077541626603497 + kappa: 8.6717811278739283e-06 + s: 59.485601451843692 + dkappa: 0 + ddkappa: 0 + } + v: 9.48055147453512 + a: -0.19966093557367121 + relative_time: 5.7999999999999874 +} +trajectory_point { + path_point { + x: 587310.91138967767 + y: 4141147.9787759008 + theta: -1.8077520556332742 + kappa: -9.4819356863146057e-06 + s: 59.959380834509453 + dkappa: 0 + ddkappa: 0 + } + v: 9.4706516578592268 + a: -0.19632183743576059 + relative_time: 5.8499999999999872 +} +trajectory_point { + path_point { + x: 587310.80028501258 + y: 4141147.5187130314 + theta: -1.8077638863333767 + kappa: -2.9275227594169466e-05 + s: 60.432669424989726 + dkappa: 0 + ddkappa: 0 + } + v: 9.46092028343929 + a: -0.19292318043307705 + relative_time: 5.899999999999987 +} +trajectory_point { + path_point { + x: 587310.689290397 + y: 4141147.0591197461 + theta: -1.8077787730541772 + kappa: -4.9295066519292273e-05 + s: 60.905475720008141 + dkappa: 0 + ddkappa: 0 + } + v: 9.4513603389538972 + a: -0.189464575151706 + relative_time: 5.9499999999999869 +} +trajectory_point { + path_point { + x: 587310.57838897966 + y: 4141146.5999912191 + theta: -1.8078110630390454 + kappa: -7.0695519078007546e-05 + s: 61.377808366159023 + dkappa: 0 + ddkappa: 0 + } + v: 9.44197483155233 + a: -0.18594563217773286 + relative_time: 5.9999999999999867 +} +trajectory_point { + path_point { + x: 587310.46759514255 + y: 4141146.1413149512 + theta: -1.8078441434886692 + kappa: -9.2114160072560058e-05 + s: 61.849676136832457 + dkappa: 0 + ddkappa: 0 + } + v: 9.4327653700075409 + a: -0.18242069665306895 + relative_time: 6.0499999999999865 +} +trajectory_point { + path_point { + x: 587310.35686803353 + y: 4141145.6830917196 + theta: -1.8078983179165375 + kappa: -0.00011452057788371908 + s: 62.321087870810423 + dkappa: 0 + ddkappa: 0 + } + v: 9.4237339655806522 + a: -0.17882353951051802 + relative_time: 6.0999999999999863 +} +trajectory_point { + path_point { + x: 587310.24624592811 + y: 4141145.225303025 + theta: -1.8079524409703089 + kappa: -0.00013690574748470821 + s: 62.792052560745717 + dkappa: 0 + ddkappa: 0 + } + v: 9.4148842005452433 + a: -0.17515531304267482 + relative_time: 6.1499999999999861 +} +trajectory_point { + path_point { + x: 587310.13566851406 + y: 4141144.7679540114 + theta: -1.8080272231474519 + kappa: -0.0001596059727971511 + s: 63.26257937696446 + dkappa: 0 + ddkappa: 0 + } + v: 9.4062195995602629 + a: -0.17141716954212588 + relative_time: 6.199999999999986 +} +trajectory_point { + path_point { + x: 587310.02518681216 + y: 4141144.3110227329 + theta: -1.8081037160520528 + kappa: -0.0001823143733950722 + s: 63.732677664585331 + dkappa: 0 + ddkappa: 0 + } + v: 9.3977436296700336 + a: -0.1676102613014577 + relative_time: 6.2499999999999858 +} +trajectory_point { + path_point { + x: 587309.91473547521 + y: 4141143.8545152051 + theta: -1.8081981758783359 + kappa: -0.00020471365527777505 + s: 64.202356940638879 + dkappa: 0 + ddkappa: 0 + } + v: 9.3894597003042435 + a: -0.16373574061325677 + relative_time: 6.2999999999999856 +} +trajectory_point { + path_point { + x: 587309.804363389 + y: 4141143.3984096367 + theta: -1.80829705684644 + kappa: -0.0002270212817532354 + s: 64.671626891186747 + dkappa: 0 + ddkappa: 0 + } + v: 9.3813711632779562 + a: -0.15979475977010957 + relative_time: 6.3499999999999854 +} +trajectory_point { + path_point { + x: 587309.69401344634 + y: 4141142.9427097226 + theta: -1.8084105103671293 + kappa: -0.00024852051903449178 + s: 65.140497368441 + dkappa: 0 + ddkappa: 0 + } + v: 9.3734813127916059 + a: -0.15578847106460258 + relative_time: 6.3999999999999853 +} +trajectory_point { + path_point { + x: 587309.58372065984 + y: 4141142.48739668 + theta: -1.808530911713389 + kappa: -0.00026962261860499369 + s: 65.60897838788334 + dkappa: 0 + ddkappa: 0 + } + v: 9.365793385430992 + a: -0.15171802678932234 + relative_time: 6.4499999999999851 +} +trajectory_point { + path_point { + x: 587309.47344806115 + y: 4141142.0324690081 + theta: -1.8086621955427129 + kappa: -0.00028967587950783443 + s: 66.0770801253844 + dkappa: 0 + ddkappa: 0 + } + v: 9.3583105601672933 + a: -0.14758457923685531 + relative_time: 6.4999999999999849 +} +trajectory_point { + path_point { + x: 587309.36320512474 + y: 4141141.5779137779 + theta: -1.8088024725979466 + kappa: -0.00030885854489612525 + s: 66.544812914322975 + dkappa: 0 + ddkappa: 0 + } + v: 9.35103595835705 + a: -0.143389280699788 + relative_time: 6.5499999999999847 +} +trajectory_point { + path_point { + x: 587309.25298647885 + y: 4141141.12372152 + theta: -1.8089504226733542 + kappa: -0.00032780885145218742 + s: 67.012187242705366 + dkappa: 0 + ddkappa: 0 + } + v: 9.34397264374218 + a: -0.13913328347070689 + relative_time: 6.5999999999999845 +} +trajectory_point { + path_point { + x: 587309.14276489487 + y: 4141140.6698878929 + theta: -1.8091092441446601 + kappa: -0.00034643785142316055 + s: 67.479213750284572 + dkappa: 0 + ddkappa: 0 + } + v: 9.33712362244997 + a: -0.13481773984219847 + relative_time: 6.6499999999999844 +} +trajectory_point { + path_point { + x: 587309.03257761488 + y: 4141140.2163927723 + theta: -1.8092730257444771 + kappa: -0.00036482902656483377 + s: 67.945903225679615 + dkappa: 0 + ddkappa: 0 + } + v: 9.3304918429930748 + a: -0.13044380210684928 + relative_time: 6.6999999999999842 +} +trajectory_point { + path_point { + x: 587308.92235044844 + y: 4141139.7632429386 + theta: -1.8094498042674518 + kappa: -0.00038262762880814755 + s: 68.412266603494771 + dkappa: 0 + ddkappa: 0 + } + v: 9.3240801962695237 + a: -0.12601262255724574 + relative_time: 6.749999999999984 +} +trajectory_point { + path_point { + x: 587308.81217247876 + y: 4141139.3104053489 + theta: -1.8096288552539195 + kappa: -0.000400203697285157 + s: 68.878314961438846 + dkappa: 0 + ddkappa: 0 + } + v: 9.317891515562712 + a: -0.12152535348597442 + relative_time: 6.7999999999999838 +} +trajectory_point { + path_point { + x: 587308.701911373 + y: 4141138.8579006745 + theta: -1.8098224626867265 + kappa: -0.000416476910617118 + s: 69.344059517444478 + dkappa: 0 + ddkappa: 0 + } + v: 9.31192857654141 + a: -0.11698314718562176 + relative_time: 6.8499999999999837 +} +trajectory_point { + path_point { + x: 587308.59171950154 + y: 4141138.405680134 + theta: -1.81001594855007 + kappa: -0.00043273990580080374 + s: 69.809511626787327 + dkappa: 0 + ddkappa: 0 + } + v: 9.3061940972597572 + a: -0.11238715594877428 + relative_time: 6.8999999999999835 +} +trajectory_point { + path_point { + x: 587308.48140065558 + y: 4141137.9537797542 + theta: -1.810224679323408 + kappa: -0.00044753155970221685 + s: 70.274682779205435 + dkappa: 0 + ddkappa: 0 + } + v: 9.3006907381572645 + a: -0.10773853206801846 + relative_time: 6.9499999999999833 +} +trajectory_point { + path_point { + x: 587308.37114534923 + y: 4141137.5021411083 + theta: -1.8104333158642418 + kappa: -0.00046231211635458568 + s: 70.73958459601846 + dkappa: 0 + ddkappa: 0 + } + v: 9.2954211020588122 + a: -0.10303842783594082 + relative_time: 6.9999999999999831 +} +trajectory_point { + path_point { + x: 587308.26077151555 + y: 4141137.0507965917 + theta: -1.8106538771971652 + kappa: -0.00047585432667093927 + s: 71.2042288272469 + dkappa: 0 + ddkappa: 0 + } + v: 9.290387734174649 + a: -0.098287995545127821 + relative_time: 7.0499999999999829 +} +trajectory_point { + path_point { + x: 587308.1504252617 + y: 4141136.5996982753 + theta: -1.8108763857000243 + kappa: -0.00048917851881982689 + s: 71.66862734873142 + dkappa: 0 + ddkappa: 0 + } + v: 9.2855931221004013 + a: -0.093488387488165958 + relative_time: 7.0999999999999828 +} +trajectory_point { + path_point { + x: 587308.039979349 + y: 4141136.1488649789 + theta: -1.8111076147547416 + kappa: -0.00050154753566231157 + s: 72.132792159252119 + dkappa: 0 + ddkappa: 0 + } + v: 9.2810396958170589 + a: -0.088640755957641759 + relative_time: 7.1499999999999826 +} +trajectory_point { + path_point { + x: 587307.92952170153 + y: 4141135.6982626952 + theta: -1.81134240219886 + kappa: -0.00051351668154627232 + s: 72.596735377647761 + dkappa: 0 + ddkappa: 0 + } + v: 9.2767298276909873 + a: -0.0837462532461417 + relative_time: 7.1999999999999824 +} +trajectory_point { + path_point { + x: 587307.818982872 + y: 4141135.2478959025 + theta: -1.8115834260089958 + kappa: -0.00052476548651867469 + s: 73.060469239935045 + dkappa: 0 + ddkappa: 0 + } + v: 9.2726658324739173 + a: -0.078806031646252273 + relative_time: 7.2499999999999822 +} +trajectory_point { + path_point { + x: 587307.70838682726 + y: 4141134.7977460027 + theta: -1.8118293900044611 + kappa: -0.00053544108791474926 + s: 73.524006096427925 + dkappa: 0 + ddkappa: 0 + } + v: 9.268849967302959 + a: -0.073821243450559973 + relative_time: 7.2999999999999821 +} +trajectory_point { + path_point { + x: 587307.59773734584 + y: 4141134.3477992918 + theta: -1.8120792964488839 + kappa: -0.000545647305580444 + s: 73.987358408856821 + dkappa: 0 + ddkappa: 0 + } + v: 9.2652844317005822 + a: -0.068793040951651271 + relative_time: 7.3499999999999819 +} +trajectory_point { + path_point { + x: 587307.48698609113 + y: 4141133.8980547138 + theta: -1.8123350314416278 + kappa: -0.00055516806906233873 + s: 74.450538747487926 + dkappa: 0 + ddkappa: 0 + } + v: 9.2619713675746365 + a: -0.0637225764421127 + relative_time: 7.3999999999999817 +} +trajectory_point { + path_point { + x: 587307.37620861223 + y: 4141133.4484806694 + theta: -1.8125929595775385 + kappa: -0.00056441739955496984 + s: 74.913559788242452 + dkappa: 0 + ddkappa: 0 + } + v: 9.2589128592183378 + a: -0.05861100221453075 + relative_time: 7.4499999999999815 +} +trajectory_point { + path_point { + x: 587307.26527561748 + y: 4141132.9990958748 + theta: -1.8128575653111325 + kappa: -0.000572869214617612 + s: 75.3764343098159 + dkappa: 0 + ddkappa: 0 + } + v: 9.2561109333102749 + a: -0.05345947056149189 + relative_time: 7.4999999999999813 +} +trajectory_point { + path_point { + x: 587307.15434955573 + y: 4141132.5498470291 + theta: -1.8131228636959029 + kappa: -0.000581228158944479 + s: 75.839175190797349 + dkappa: 0 + ddkappa: 0 + } + v: 9.2535675589144049 + a: -0.048269133775582618 + relative_time: 7.5499999999999812 +} +trajectory_point { + path_point { + x: 587307.043220272 + y: 4141132.1007727068 + theta: -1.8133952071033552 + kappa: -0.00058874838839307957 + s: 76.3017954067887 + dkappa: 0 + ddkappa: 0 + } + v: 9.2512846474800554 + a: -0.043041144149389476 + relative_time: 7.599999999999981 +} +trajectory_point { + path_point { + x: 587306.93211683468 + y: 4141131.6518028304 + theta: -1.8136674871689471 + kappa: -0.00059626686880221889 + s: 76.764308027523967 + dkappa: 0 + ddkappa: 0 + } + v: 9.2492640528419265 + a: -0.0377766539754989 + relative_time: 7.6499999999999808 +} +trajectory_point { + path_point { + x: 587306.82078239974 + y: 4141131.20298748 + theta: -1.8139464162920709 + kappa: -0.000602988942610548 + s: 77.226726213988513 + dkappa: 0 + ddkappa: 0 + } + v: 9.24750757122009 + a: -0.032476815546497395 + relative_time: 7.6999999999999806 +} +trajectory_point { + path_point { + x: 587306.7094517696 + y: 4141130.7542548273 + theta: -1.814225712498049 + kappa: -0.0006096605116474007 + s: 77.68906321553834 + dkappa: 0 + ddkappa: 0 + } + v: 9.2460169412199864 + a: -0.027142781154971457 + relative_time: 7.7499999999999805 +} +trajectory_point { + path_point { + x: 587306.5979246716 + y: 4141130.3056408931 + theta: -1.8145098560120421 + kappa: -0.00061573981849333574 + s: 78.151332367019393 + dkappa: 0 + ddkappa: 0 + } + v: 9.2447938438324258 + a: -0.021775703093507626 + relative_time: 7.79999999999998 +} +trajectory_point { + path_point { + x: 587306.48635230365 + y: 4141129.8570942921 + theta: -1.8147953076272083 + kappa: -0.000621656137544806 + s: 78.613547085886736 + dkappa: 0 + ddkappa: 0 + } + v: 9.24383990243359 + a: -0.016376733654692333 + relative_time: 7.84999999999998 +} +trajectory_point { + path_point { + x: 587306.37461372244 + y: 4141129.4086312773 + theta: -1.8150842287583884 + kappa: -0.00062712451405527606 + s: 79.075720869323931 + dkappa: 0 + ddkappa: 0 + } + v: 9.2431566827850347 + a: -0.010947025131112093 + relative_time: 7.89999999999998 +} +trajectory_point { + path_point { + x: 587306.26277703559 + y: 4141128.9602208948 + theta: -1.8153752111129493 + kappa: -0.00063232649343027353 + s: 79.5378672913622 + dkappa: 0 + ddkappa: 0 + } + v: 9.2427456930336831 + a: -0.00548772981535342 + relative_time: 7.94999999999998 +} +trajectory_point { + path_point { + x: 587306.1508112154 + y: 4141128.5118568968 + theta: -1.8156684433432404 + kappa: -0.00063719904344297857 + s: 79.999999999999787 + dkappa: 0 + ddkappa: 0 + } + v: 9.2426083837118274 + a: -2.7755575615628914e-15 + relative_time: 7.99999999999998 +} +decision { + main_decision { + cruise { + } + } + object_decision { + decision { + id: "1651" + perception_id: 1651 + object_decision { + nudge { + type: RIGHT_NUDGE + distance_l: -0.3 + } + } + object_decision { + ignore { + } + } + } + decision { + id: "DEST" + perception_id: -1109540454 + object_decision { + ignore { + } + } + } + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/result_slowdown_01_0.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/result_slowdown_01_0.pb.txt new file mode 100644 index 00000000000..500e290e2da --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/result_slowdown_01_0.pb.txt @@ -0,0 +1,2320 @@ +header { + module_name: "planning" +} +is_replan: true +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: 587258.38460170687 + y: 4140947.0768520203 + theta: -1.7938388115138242 + kappa: 0.0010060738435035705 + s: 4.3368086899420177e-19 + dkappa: 0 + ddkappa: 0 + } + v: 1.7111110687255859 + a: -0.33260082107827538 + relative_time: 0 +} +trajectory_point { + path_point { + x: 587258.36579115759 + y: 4140946.9938161261 + theta: -1.7938143552206136 + kappa: 0.00087747029896723052 + s: 0.0851398645882903 + dkappa: 0 + ddkappa: 0 + } + v: 1.6944848210077983 + a: -0.3324440829471863 + relative_time: 0.05 +} +trajectory_point { + path_point { + x: 587258.34716423007 + y: 4140946.9115907969 + theta: -1.7937901376605865 + kappa: 0.00075012213485047994 + s: 0.16944862518706014 + dkappa: 0 + ddkappa: 0 + } + v: 1.6778671578586677 + a: -0.3322574991480689 + relative_time: 0.1 +} +trajectory_point { + path_point { + x: 587258.32872082118 + y: 4140946.8301755795 + theta: -1.7937661586998073 + kappa: 0.00062402864668228584 + s: 0.25292674817978722 + dkappa: 0 + ddkappa: 0 + } + v: 1.661259562439183 + a: -0.3320414345774404 + relative_time: 0.15000000000000002 +} +trajectory_point { + path_point { + x: 587258.3104608116 + y: 4140946.749569946 + theta: -1.7937424181831674 + kappa: 0.00049918901866504318 + s: 0.33557477365187793 + dkappa: 0 + ddkappa: 0 + } + v: 1.644663499665507 + a: -0.331796254131818 + relative_time: 0.2 +} +trajectory_point { + path_point { + x: 587258.2923840658 + y: 4140946.6697732983 + theta: -1.7937189159346485 + kappa: 0.00037560232505251268 + s: 0.41739331447842631 + dkappa: 0 + ddkappa: 0 + } + v: 1.6280804162089759 + a: -0.33152232270771892 + relative_time: 0.25 +} +trajectory_point { + path_point { + x: 587258.2744904327 + y: 4140946.59078497 + theta: -1.7936956517575835 + kappa: 0.00025326753152775963 + s: 0.49838305541197248 + dkappa: 0 + ddkappa: 0 + } + v: 1.611511740496101 + a: -0.33122000520166028 + relative_time: 0.3 +} +trajectory_point { + path_point { + x: 587258.2567797451 + y: 4140946.5126042236 + theta: -1.7936726254349193 + kappa: 0.000132183496581091 + s: 0.57854475217026136 + dkappa: 0 + ddkappa: 0 + } + v: 1.5949588827085672 + a: -0.33088966651015939 + relative_time: 0.35 +} +trajectory_point { + path_point { + x: 587258.23925182072 + y: 4140946.4352302528 + theta: -1.7936498367294786 + kappa: 1.2348972887993716e-05 + s: 0.65787923052400188 + dkappa: 0 + ddkappa: 0 + } + v: 1.5784232347832339 + a: -0.3305316715297334 + relative_time: 0.39999999999999997 +} +trajectory_point { + path_point { + x: 587258.22190646187 + y: 4140946.3586621853 + theta: -1.7936272853842219 + kappa: -0.00010623739131292593 + s: 0.73638738538462467 + dkappa: 0 + ddkappa: 0 + } + v: 1.5619061704121342 + a: -0.33014638515689954 + relative_time: 0.44999999999999996 +} +trajectory_point { + path_point { + x: 587258.20474345563 + y: 4140946.2828990826 + theta: -1.79360497112251 + kappa: -0.00022357705084200598 + s: 0.81407017989204189 + dkappa: 0 + ddkappa: 0 + } + v: 1.5454090450424756 + a: -0.32973417228817503 + relative_time: 0.49999999999999994 +} +trajectory_point { + path_point { + x: 587258.18776257429 + y: 4140946.2079399386 + theta: -1.7935828936483653 + kappa: -0.00033967156220059 + s: 0.89092864450240528 + dkappa: 0 + ddkappa: 0 + } + v: 1.5289331958766395 + a: -0.329295397820077 + relative_time: 0.54999999999999993 +} +trajectory_point { + path_point { + x: 587258.17096357571 + y: 4140946.1337836841 + theta: -1.7935610526467354 + kappa: -0.00045452258219308829 + s: 0.96696387607586487 + dkappa: 0 + ddkappa: 0 + } + v: 1.5124799418721819 + a: -0.32883042664912271 + relative_time: 0.6 +} +trajectory_point { + path_point { + x: 587258.15432287462 + y: 4140946.0604344765 + theta: -1.7936152007820114 + kappa: -0.00058369370447807379 + s: 1.0421770369643282 + dkappa: 0 + ddkappa: 0 + } + v: 1.496050583741833 + a: -0.32833962367182939 + relative_time: 0.65 +} +trajectory_point { + path_point { + x: 587258.137848069 + y: 4140945.9878893346 + theta: -1.7937197841861852 + kappa: -0.0007219373553051505 + s: 1.1165693540992179 + dkappa: 0 + ddkappa: 0 + } + v: 1.479646403953496 + a: -0.32782335378471422 + relative_time: 0.70000000000000007 +} +trajectory_point { + path_point { + x: 587258.12155476038 + y: 4140945.9161433959 + theta: -1.7938232154444425 + kappa: -0.00085865802601088745 + s: 1.190142118079232 + dkappa: 0 + ddkappa: 0 + } + v: 1.46326866673025 + a: -0.32728198188429436 + relative_time: 0.75000000000000011 +} +trajectory_point { + path_point { + x: 587258.105442649 + y: 4140945.8451953419 + theta: -1.7939254964568194 + kappa: -0.000993858231539943 + s: 1.2628966822581014 + dkappa: 0 + ddkappa: 0 + } + v: 1.4469186180503464 + a: -0.32671587286708709 + relative_time: 0.80000000000000016 +} +trajectory_point { + path_point { + x: 587258.08951142139 + y: 4140945.77504379 + theta: -1.7940266292104432 + kappa: -0.0011275406017597753 + s: 1.3348344618323489 + dkappa: 0 + ddkappa: 0 + } + v: 1.4305974856472123 + a: -0.32612539162960952 + relative_time: 0.8500000000000002 +} +trajectory_point { + path_point { + x: 587258.0737607507 + y: 4140945.7056873031 + theta: -1.7941266157782447 + kappa: -0.0012597078797654186 + s: 1.4059569329290482 + dkappa: 0 + ddkappa: 0 + } + v: 1.4143064790094479 + a: -0.325510903068379 + relative_time: 0.90000000000000024 +} +trajectory_point { + path_point { + x: 587258.05819029687 + y: 4140945.6371243829 + theta: -1.7942254583176727 + kappa: -0.0013903629201842613 + s: 1.4762656316935823 + dkappa: 0 + ddkappa: 0 + } + v: 1.3980467893808282 + a: -0.32487277207991261 + relative_time: 0.95000000000000029 +} +trajectory_point { + path_point { + x: 587258.04279970634 + y: 4140945.5693534729 + theta: -1.7943231590694053 + kappa: -0.0015195086874808211 + s: 1.545762153377402 + dkappa: 0 + ddkappa: 0 + } + v: 1.3818195897603021 + a: -0.32421136356072755 + relative_time: 1.0000000000000002 +} +trajectory_point { + path_point { + x: 587258.02758861333 + y: 4140945.5023729606 + theta: -1.7944197203560652 + kappa: -0.0016471482542615241 + s: 1.6144481514257853 + dkappa: 0 + ddkappa: 0 + } + v: 1.3656260349019922 + a: -0.32352704240734115 + relative_time: 1.0500000000000003 +} +trajectory_point { + path_point { + x: 587258.01255663857 + y: 4140945.4361811788 + theta: -1.7945151445809315 + kappa: -0.00177328479957948 + s: 1.6823253365655957 + dkappa: 0 + ddkappa: 0 + } + v: 1.3494672613151959 + a: -0.32282017351627046 + relative_time: 1.1000000000000003 +} +trajectory_point { + path_point { + x: 587257.99770339089 + y: 4140945.3707764037 + theta: -1.7946094342266536 + kappa: -0.001897921607239262 + s: 1.749395475893041 + dkappa: 0 + ddkappa: 0 + } + v: 1.3333443872643846 + a: -0.32209112178403282 + relative_time: 1.1500000000000004 +} +trajectory_point { + path_point { + x: 587257.98302846681 + y: 4140945.3061568579 + theta: -1.7947025918539647 + kappa: -0.0020210620641016781 + s: 1.8156603919614309 + dkappa: 0 + ddkappa: 0 + } + v: 1.3172585127692034 + a: -0.32134025210714534 + relative_time: 1.2000000000000004 +} +trajectory_point { + path_point { + x: 587257.96853145049 + y: 4140945.2423207108 + theta: -1.7947946201003946 + kappa: -0.0021427096583885546 + s: 1.8811219618689383 + dkappa: 0 + ddkappa: 0 + } + v: 1.3012107196044722 + a: -0.32056792938212531 + relative_time: 1.2500000000000004 +} +trajectory_point { + path_point { + x: 587257.95421191433 + y: 4140945.1792660803 + theta: -1.7948855216789839 + kappa: -0.0022628679779875087 + s: 1.9457821163463549 + dkappa: 0 + ddkappa: 0 + } + v: 1.2852020713001844 + a: -0.31977451850548982 + relative_time: 1.3000000000000005 +} +trajectory_point { + path_point { + x: 587257.94003495725 + y: 4140945.1169989 + theta: -1.795005602060858 + kappa: -0.0023871360802652586 + s: 2.0096428388448531 + dkappa: 0 + ddkappa: 0 + } + v: 1.2692336131415081 + a: -0.31896038437375618 + relative_time: 1.3500000000000005 +} +trajectory_point { + path_point { + x: 587257.9259244533 + y: 4140945.0555344652 + theta: -1.7952214063714662 + kappa: -0.0025278047163941738 + s: 2.0727061646237415 + dkappa: 0 + ddkappa: 0 + } + v: 1.2533063721687852 + a: -0.31812589188344154 + relative_time: 1.4000000000000006 +} +trajectory_point { + path_point { + x: 587257.911991901 + y: 4140944.994845177 + theta: -1.795434489240566 + kappa: -0.0026666993380541097 + s: 2.1349741798382253 + dkappa: 0 + ddkappa: 0 + } + v: 1.2374213571775317 + a: -0.31727140593106312 + relative_time: 1.4500000000000006 +} +trajectory_point { + path_point { + x: 587257.8982368228 + y: 4140944.9349289536 + theta: -1.7956448579541002 + kappa: -0.0028038247101022412 + s: 2.1964490206271665 + dkappa: 0 + ddkappa: 0 + } + v: 1.2215795587184379 + a: -0.3163972914131381 + relative_time: 1.5000000000000007 +} +trajectory_point { + path_point { + x: 587257.88465872931 + y: 4140944.8757836642 + theta: -1.7958525199674649 + kappa: -0.0029391857068541082 + s: 2.257132872200839 + dkappa: 0 + ddkappa: 0 + } + v: 1.2057819490973685 + a: -0.31550391322618376 + relative_time: 1.5500000000000007 +} +trajectory_point { + path_point { + x: 587257.871257121 + y: 4140944.8174071331 + theta: -1.7960574829023348 + kappa: -0.0030727873100487853 + s: 2.3170279679286905 + dkappa: 0 + ddkappa: 0 + } + v: 1.1900294823753614 + a: -0.31459163626671721 + relative_time: 1.6000000000000008 +} +trajectory_point { + path_point { + x: 587257.85803148767 + y: 4140944.7597971372 + theta: -1.79625975454349 + kappa: -0.0032046346068140366 + s: 2.3761365884270993 + dkappa: 0 + ddkappa: 0 + } + v: 1.1743230943686298 + a: -0.31366082543125573 + relative_time: 1.6500000000000008 +} +trajectory_point { + path_point { + x: 587257.84498130856 + y: 4140944.7029514089 + theta: -1.7964593428356419 + kappa: -0.0033347327876314782 + s: 2.4344610606471337 + dkappa: 0 + ddkappa: 0 + } + v: 1.1586637026485604 + a: -0.31271184561631649 + relative_time: 1.7000000000000008 +} +trajectory_point { + path_point { + x: 587257.83210605267 + y: 4140944.6468676343 + theta: -1.7966562558802619 + kappa: -0.0034630871443017417 + s: 2.4920037569623119 + dkappa: 0 + ddkappa: 0 + } + v: 1.1430522065417144 + a: -0.3117450617184167 + relative_time: 1.7500000000000009 +} +trajectory_point { + path_point { + x: 587257.8194051797 + y: 4140944.59154346 + theta: -1.79685050193241 + kappa: -0.0035897030679096285 + s: 2.5487670942563576 + dkappa: 0 + ddkappa: 0 + } + v: 1.1274894871298262 + a: -0.31076083863407361 + relative_time: 1.8000000000000009 +} +trajectory_point { + path_point { + x: 587257.80687813868 + y: 4140944.5369764864 + theta: -1.797042089397564 + kappa: -0.0037145860467892753 + s: 2.6047535330109617 + dkappa: 0 + ddkappa: 0 + } + v: 1.1119764072498057 + a: -0.30975954125980432 + relative_time: 1.850000000000001 +} +trajectory_point { + path_point { + x: 587257.79452436964 + y: 4140944.4831642751 + theta: -1.797231026828451 + kappa: -0.0038377416644893147 + s: 2.65996557639354 + dkappa: 0 + ddkappa: 0 + } + v: 1.0965138114937358 + a: -0.3087415344921261 + relative_time: 1.900000000000001 +} +trajectory_point { + path_point { + x: 587257.78234330332 + y: 4140944.4301043446 + theta: -1.7974173229218786 + kappa: -0.0039591755977380324 + s: 2.7144057693449914 + dkappa: 0 + ddkappa: 0 + } + v: 1.0811025262088745 + a: -0.30770718322755619 + relative_time: 1.9500000000000011 +} +trajectory_point { + path_point { + x: 587257.77033436089 + y: 4140944.3777941749 + theta: -1.7976009865155671 + kappa: -0.004078893614408532 + s: 2.7680766976674578 + dkappa: 0 + ddkappa: 0 + } + v: 1.0657433594976533 + a: -0.30665685236261175 + relative_time: 2.0000000000000009 +} +trajectory_point { + path_point { + x: 587257.75849695259 + y: 4140944.3262311965 + theta: -1.797782026620615 + kappa: -0.0041969015947101781 + s: 2.8209809975246851 + dkappa: 0 + ddkappa: 0 + } + v: 1.0504377370437208 + a: -0.30556457765827738 + relative_time: 2.0500000000000007 +} +trajectory_point { + path_point { + x: 587257.74683046958 + y: 4140944.2754127579 + theta: -1.7979604525407435 + kappa: -0.0043132056089439826 + s: 2.8731213903006356 + dkappa: 0 + ddkappa: 0 + } + v: 1.0351872507613213 + a: -0.30445136118419458 + relative_time: 2.1000000000000005 +} +trajectory_point { + path_point { + x: 587257.735334289 + y: 4140944.2253361456 + theta: -1.7981362737918076 + kappa: -0.0044278118650667182 + s: 2.9245006590918905 + dkappa: 0 + ddkappa: 0 + } + v: 1.0199929543865065 + a: -0.3033169370378031 + relative_time: 2.1500000000000004 +} +trajectory_point { + path_point { + x: 587257.72400777647 + y: 4140944.175998596 + theta: -1.798309500072006 + kappa: -0.0045407266892993894 + s: 2.9751216400142124 + dkappa: 0 + ddkappa: 0 + } + v: 1.0048559149504557 + a: -0.30216103931654287 + relative_time: 2.2 +} +trajectory_point { + path_point { + x: 587257.71269891656 + y: 4140944.127432412 + theta: -1.7985621093563813 + kappa: -0.0046657284169450523 + s: 3.0249872228673009 + dkappa: 0 + ddkappa: 0 + } + v: 0.98977721277947628 + a: -0.30098340211785363 + relative_time: 2.25 +} +trajectory_point { + path_point { + x: 587257.70148763619 + y: 4140944.0796160274 + theta: -1.7988504740337934 + kappa: -0.0047954917413989048 + s: 3.0741003517995487 + dkappa: 0 + ddkappa: 0 + } + v: 0.97475794149500361 + a: -0.29978375953917524 + relative_time: 2.3 +} +trajectory_point { + path_point { + x: 587257.69044743734 + y: 4140944.0325293094 + theta: -1.7991344387312156 + kappa: -0.00492327490813995 + s: 3.1224640259727989 + dkappa: 0 + ddkappa: 0 + } + v: 0.9597992080136013 + a: -0.29856184567794758 + relative_time: 2.3499999999999996 +} +trajectory_point { + path_point { + x: 587257.67957762268 + y: 4140943.9861692847 + theta: -1.7994140213219603 + kappa: -0.0050490859884560315 + s: 3.1700813002271016 + dkappa: 0 + ddkappa: 0 + } + v: 0.94490213254696076 + a: -0.2973173946316105 + relative_time: 2.3999999999999995 +} +trajectory_point { + path_point { + x: 587257.668877482 + y: 4140943.9405329227 + theta: -1.7996892400146669 + kappa: -0.0051729332025004862 + s: 3.2169552857454682 + dkappa: 0 + ddkappa: 0 + } + v: 0.9300678486019015 + a: -0.29605014049760375 + relative_time: 2.4499999999999993 +} +trajectory_point { + path_point { + x: 587257.658346292 + y: 4140943.8956171405 + theta: -1.7999601133570149 + kappa: -0.005294824921048517 + s: 3.2630891507186308 + dkappa: 0 + ddkappa: 0 + } + v: 0.915297502980371 + a: -0.29475981737336726 + relative_time: 2.4999999999999991 +} +trajectory_point { + path_point { + x: 587257.64798331633 + y: 4140943.851418796 + theta: -1.8002266602394412 + kappa: -0.0054147696672535665 + s: 3.3084861210097958 + dkappa: 0 + ddkappa: 0 + } + v: 0.90059225577944468 + a: -0.29344615935634083 + relative_time: 2.5499999999999989 +} +trajectory_point { + path_point { + x: 587257.63778780529 + y: 4140943.8079346921 + theta: -1.8004888998988611 + kappa: -0.005532776118403691 + s: 3.3531494808194022 + dkappa: 0 + ddkappa: 0 + } + v: 0.88595328039132615 + a: -0.29210890054396432 + relative_time: 2.5999999999999988 +} +trajectory_point { + path_point { + x: 587257.62775899563 + y: 4140943.7651615744 + theta: -1.8007468519223944 + kappa: -0.0056488531076779366 + s: 3.3970825733498775 + dkappa: 0 + ddkappa: 0 + } + v: 0.871381763503347 + a: -0.29074777503367755 + relative_time: 2.6499999999999986 +} +trajectory_point { + path_point { + x: 587257.61789611087 + y: 4140943.7230961295 + theta: -1.8010005362510952 + kappa: -0.0057630096259027085 + s: 3.4402888014703938 + dkappa: 0 + ddkappa: 0 + } + v: 0.85687890509796638 + a: -0.28936251692292037 + relative_time: 2.6999999999999984 +} +trajectory_point { + path_point { + x: 587257.60819836007 + y: 4140943.6817349866 + theta: -1.8012499731836877 + kappa: -0.0058752548233081455 + s: 3.4827716283816241 + dkappa: 0 + ddkappa: 0 + } + v: 0.84244591845277217 + a: -0.28795286030913259 + relative_time: 2.7499999999999982 +} +trajectory_point { + path_point { + x: 587257.598664939 + y: 4140943.6410747119 + theta: -1.8014951833803028 + kappa: -0.0059855980112844959 + s: 3.5245345782804995 + dkappa: 0 + ddkappa: 0 + } + v: 0.82808403014047971 + a: -0.28651853928975407 + relative_time: 2.799999999999998 +} +trajectory_point { + path_point { + x: 587257.58929502894 + y: 4140943.6011118172 + theta: -1.8017361878662221 + kappa: -0.0060940486641384885 + s: 3.5655812370249649 + dkappa: 0 + ddkappa: 0 + } + v: 0.81379448002893273 + a: -0.28505928796222463 + relative_time: 2.8499999999999979 +} +trajectory_point { + path_point { + x: 587257.58008779725 + y: 4140943.5618427489 + theta: -1.8019730080356249 + kappa: -0.0062006164208497066 + s: 3.6059152527987348 + dkappa: 0 + ddkappa: 0 + } + v: 0.79957852128110263 + a: -0.28357484042398418 + relative_time: 2.8999999999999977 +} +trajectory_point { + path_point { + x: 587257.57104239671 + y: 4140943.5232638945 + theta: -1.80220566565534 + kappa: -0.006305311086826965 + s: 3.6455403367760519 + dkappa: 0 + ddkappa: 0 + } + v: 0.7854374203550889 + a: -0.28206493077247252 + relative_time: 2.9499999999999975 +} +trajectory_point { + path_point { + x: 587257.5621579655 + y: 4140943.485371579 + theta: -1.8024341828685997 + kappa: -0.0064081426356646792 + s: 3.6844602637864412 + dkappa: 0 + ddkappa: 0 + } + v: 0.77137245700411927 + a: -0.28052929310512942 + relative_time: 2.9999999999999973 +} +trajectory_point { + path_point { + x: 587257.55343362747 + y: 4140943.4481620635 + theta: -1.8026585821988008 + kappa: -0.00650912121089924 + s: 3.7226788729794675 + dkappa: 0 + ddkappa: 0 + } + v: 0.75738492427654924 + a: -0.27896766151939484 + relative_time: 3.0499999999999972 +} +trajectory_point { + path_point { + x: 587257.54486849124 + y: 4140943.4116315483 + theta: -1.8028788865532677 + kappa: -0.0066082571277653853 + s: 3.7602000684894912 + dkappa: 0 + ddkappa: 0 + } + v: 0.74347612851586242 + a: -0.27737977011270848 + relative_time: 3.099999999999997 +} +trajectory_point { + path_point { + x: 587257.53646165063 + y: 4140943.3757761675 + theta: -1.8030951192270201 + kappa: -0.006705560874952581 + s: 3.7970278201004257 + dkappa: 0 + ddkappa: 0 + } + v: 0.72964738936067031 + a: -0.27576535298251031 + relative_time: 3.1499999999999968 +} +trajectory_point { + path_point { + x: 587257.52821218432 + y: 4140943.3405919923 + theta: -1.8033073039065453 + kappa: -0.0068010431163613846 + s: 3.8331661639104926 + dkappa: 0 + ddkappa: 0 + } + v: 0.71590003974471261 + a: -0.2741241442262401 + relative_time: 3.1999999999999966 +} +trajectory_point { + path_point { + x: 587257.52011915564 + y: 4140943.3060750272 + theta: -1.8035154646735732 + kappa: -0.0068947146928598248 + s: 3.868619202996979 + dkappa: 0 + ddkappa: 0 + } + v: 0.70223542589685706 + a: -0.27245587794133774 + relative_time: 3.2499999999999964 +} +trajectory_point { + path_point { + x: 587257.51218161255 + y: 4140943.2722212123 + theta: -1.8037196260088568 + kappa: -0.0069865866240397742 + s: 3.9033911080809931 + dkappa: 0 + ddkappa: 0 + } + v: 0.68865490734109891 + a: -0.270760288225243 + relative_time: 3.2999999999999963 +} +trajectory_point { + path_point { + x: 587257.50439858739 + y: 4140943.23902642 + theta: -1.8039198127959561 + kappa: -0.0070766701099733258 + s: 3.9374861181922225 + dkappa: 0 + ddkappa: 0 + } + v: 0.675159856896562 + a: -0.26903710917539575 + relative_time: 3.3499999999999961 +} +trajectory_point { + path_point { + x: 587257.49676909694 + y: 4140943.2064864566 + theta: -1.8041160503250249 + kappa: -0.0071649765329691566 + s: 3.9709085413336878 + dkappa: 0 + ddkappa: 0 + } + v: 0.661751660677498 + a: -0.26728607488923584 + relative_time: 3.3999999999999959 +} +trajectory_point { + path_point { + x: 587257.48918414221 + y: 4140943.1746227886 + theta: -1.8043521446631119 + kappa: -0.0072582668391798074 + s: 4.0036627551465 + dkappa: 0 + ddkappa: 0 + } + v: 0.64843171809328637 + a: -0.26550691946420313 + relative_time: 3.4499999999999957 +} +trajectory_point { + path_point { + x: 587257.48163541441 + y: 4140943.1434328249 + theta: -1.8046310792519267 + kappa: -0.0073570085970305361 + s: 4.0357532075746194 + dkappa: 0 + ddkappa: 0 + } + v: 0.63520144184843486 + a: -0.26369937699773738 + relative_time: 3.4999999999999956 +} +trajectory_point { + path_point { + x: 587257.47424176207 + y: 4140943.1128836046 + theta: -1.8049042842063148 + kappa: -0.0074537218773833968 + s: 4.0671844175296075 + dkappa: 0 + ddkappa: 0 + } + v: 0.6220622579425793 + a: -0.2618631815872785 + relative_time: 3.5499999999999954 +} +trajectory_point { + path_point { + x: 587257.46700210555 + y: 4140943.0829706658 + theta: -1.8051717993517991 + kappa: -0.0075484208052613178 + s: 4.0979609755553863 + dkappa: 0 + ddkappa: 0 + } + v: 0.609015605670483 + a: -0.25999806733026631 + relative_time: 3.5999999999999952 +} +trajectory_point { + path_point { + x: 587257.45991534751 + y: 4140943.053689477 + theta: -1.8054336651483371 + kappa: -0.0076411197281441943 + s: 4.1280875444929972 + dkappa: 0 + ddkappa: 0 + } + v: 0.59606293762203788 + a: -0.25810376832414061 + relative_time: 3.649999999999995 +} +trajectory_point { + path_point { + x: 587257.45298037445 + y: 4140943.0250354353 + theta: -1.8056899226957741 + kappa: -0.0077318332180143015 + s: 4.1575688601453482 + dkappa: 0 + ddkappa: 0 + } + v: 0.58320571968226376 + a: -0.25618001866634132 + relative_time: 3.6999999999999948 +} +trajectory_point { + path_point { + x: 587257.44619605469 + y: 4140942.9970038654 + theta: -1.8059406137393057 + kappa: -0.0078205760734017769 + s: 4.1864097319419837 + dkappa: 0 + ddkappa: 0 + } + v: 0.57044543103130785 + a: -0.25422655245430825 + relative_time: 3.7499999999999947 +} +trajectory_point { + path_point { + x: 587257.43956123956 + y: 4140942.9695900218 + theta: -1.8061857806749526 + kappa: -0.0079073633214300325 + s: 4.2146150436038274 + dkappa: 0 + ddkappa: 0 + } + v: 0.55778356414444619 + a: -0.2522431037854812 + relative_time: 3.7999999999999945 +} +trajectory_point { + path_point { + x: 587257.4330747627 + y: 4140942.9427890843 + theta: -1.8064254665550452 + kappa: -0.0079922102198612191 + s: 4.24218975380795 + dkappa: 0 + ddkappa: 0 + } + v: 0.54522162479208236 + a: -0.25022940675730004 + relative_time: 3.8499999999999943 +} +trajectory_point { + path_point { + x: 587257.42673543957 + y: 4140942.9165961593 + theta: -1.80665971509372 + kappa: -0.0080751322591416565 + s: 4.2691388968523167 + dkappa: 0 + ddkappa: 0 + } + v: 0.53276113203974818 + a: -0.24818519546720461 + relative_time: 3.8999999999999941 +} +trajectory_point { + path_point { + x: 587257.42054206831 + y: 4140942.8910062811 + theta: -1.8068885706724265 + kappa: -0.0081561451644472857 + s: 4.29546758332055 + dkappa: 0 + ddkappa: 0 + } + v: 0.52040361824810322 + a: -0.24611020401263473 + relative_time: 3.949999999999994 +} +trajectory_point { + path_point { + x: 587257.41449342854 + y: 4140942.8660144061 + theta: -1.8071120783454422 + kappa: -0.0082352648977291089 + s: 4.321181000746682 + dkappa: 0 + ddkappa: 0 + } + v: 0.5081506290729354 + a: -0.24400416649103024 + relative_time: 3.9999999999999938 +} +trajectory_point { + path_point { + x: 587257.40858828265 + y: 4140942.8416154226 + theta: -1.8073302838082228 + kappa: -0.0083125076465974425 + s: 4.3462844100026086 + dkappa: 0 + ddkappa: 0 + } + v: 0.49600347276007489 + a: -0.24187637506775844 + relative_time: 4.0499999999999936 +} +trajectory_point { + path_point { + x: 587257.40282537835 + y: 4140942.8178041549 + theta: -1.8075432333116355 + kappa: -0.0083878897940472819 + s: 4.37078313545902 + dkappa: 0 + ddkappa: 0 + } + v: 0.48396356261846352 + a: -0.23971432050626712 + relative_time: 4.0999999999999934 +} +trajectory_point { + path_point { + x: 587257.3972034438 + y: 4140942.794575349 + theta: -1.8077509738118072 + kappa: -0.0084614279715849623 + s: 4.3946825822512388 + dkappa: 0 + ddkappa: 0 + } + v: 0.472032611675231 + a: -0.23751800799781267 + relative_time: 4.1499999999999932 +} +trajectory_point { + path_point { + x: 587257.391721188 + y: 4140942.7719236691 + theta: -1.8079535530123239 + kappa: -0.0085331390742445865 + s: 4.4179882411594535 + dkappa: 0 + ddkappa: 0 + } + v: 0.46021233269794409 + a: -0.2352874427336516 + relative_time: 4.1999999999999931 +} +trajectory_point { + path_point { + x: 587257.38637729862 + y: 4140942.7498436947 + theta: -1.8081510193639061 + kappa: -0.0086030402605480616 + s: 4.4407056885957434 + dkappa: 0 + ddkappa: 0 + } + v: 0.44850443819460672 + a: -0.23302262990504041 + relative_time: 4.2499999999999929 +} +trajectory_point { + path_point { + x: 587257.38117044407 + y: 4140942.728329923 + theta: -1.8083434220640926 + kappa: -0.0086711489524651866 + s: 4.4628405865910983 + dkappa: 0 + ddkappa: 0 + } + v: 0.43691064041366 + a: -0.2307235747032356 + relative_time: 4.2999999999999927 +} +trajectory_point { + path_point { + x: 587257.37609927217 + y: 4140942.7073767679 + theta: -1.8085308110569354 + kappa: -0.0087374828353737055 + s: 4.4843986827824409 + dkappa: 0 + ddkappa: 0 + } + v: 0.42543265134398223 + a: -0.22839028231949365 + relative_time: 4.3499999999999925 +} +trajectory_point { + path_point { + x: 587257.37116241083 + y: 4140942.6869785585 + theta: -1.808713237032701 + kappa: -0.0088020598580193857 + s: 4.50538581039965 + dkappa: 0 + ddkappa: 0 + } + v: 0.41407218271488877 + a: -0.22602275794507107 + relative_time: 4.3999999999999924 +} +trajectory_point { + path_point { + x: 587257.36635846784 + y: 4140942.6671295436 + theta: -1.8088907514275825 + kappa: -0.0088648982324760726 + s: 4.5258078882525794 + dkappa: 0 + ddkappa: 0 + } + v: 0.40283094599613223 + a: -0.22362100677122437 + relative_time: 4.4499999999999922 +} +trajectory_point { + path_point { + x: 587257.36168603064 + y: 4140942.6478238869 + theta: -1.8090634064234188 + kappa: -0.0089260164341057671 + s: 4.5456709207180825 + dkappa: 0 + ddkappa: 0 + } + v: 0.39171065239790248 + a: -0.22118503398921002 + relative_time: 4.499999999999992 +} +trajectory_point { + path_point { + x: 587257.35714366671 + y: 4140942.6290556686 + theta: -1.8092312549474232 + kappa: -0.0089854332015186777 + s: 4.5649809977270328 + dkappa: 0 + ddkappa: 0 + } + v: 0.38071301287082648 + a: -0.21871484479028452 + relative_time: 4.5499999999999918 +} +trajectory_point { + path_point { + x: 587257.35272992332 + y: 4140942.6108188876 + theta: -1.8093943506719194 + kappa: -0.0090431675365333069 + s: 4.5837442947513463 + dkappa: 0 + ddkappa: 0 + } + v: 0.36983973810596837 + a: -0.21621044436570441 + relative_time: 4.5999999999999917 +} +trajectory_point { + path_point { + x: 587257.34844332782 + y: 4140942.5931074582 + theta: -1.8095527480140858 + kappa: -0.0090992387041365 + s: 4.6019670727910027 + dkappa: 0 + ddkappa: 0 + } + v: 0.35909253853482948 + a: -0.21367183790672617 + relative_time: 4.6499999999999915 +} +trajectory_point { + path_point { + x: 587257.34428238717 + y: 4140942.5759152118 + theta: -1.8097065021357075 + kappa: -0.0091536662324435154 + s: 4.6196556783610676 + dkappa: 0 + ddkappa: 0 + } + v: 0.34847312432934818 + a: -0.21109903060460625 + relative_time: 4.6999999999999913 +} +trajectory_point { + path_point { + x: 587257.34024558833 + y: 4140942.5592358964 + theta: -1.809855668942935 + kappa: -0.0092064699126580985 + s: 4.636816543478715 + dkappa: 0 + ddkappa: 0 + } + v: 0.3379832054019003 + a: -0.20849202765060121 + relative_time: 4.7499999999999911 +} +trajectory_point { + path_point { + x: 587257.33633139834 + y: 4140942.5430631787 + theta: -1.8100003050860527 + kappa: -0.0092576697990325481 + s: 4.6534561856502492 + dkappa: 0 + ddkappa: 0 + } + v: 0.32762449140529865 + a: -0.20585083423596751 + relative_time: 4.7999999999999909 +} +trajectory_point { + path_point { + x: 587257.33253826387 + y: 4140942.5273906398 + theta: -1.810140467959251 + kappa: -0.00930728620882777 + s: 4.6695812078581245 + dkappa: 0 + ddkappa: 0 + } + v: 0.31739869173279323 + a: -0.20317545555196168 + relative_time: 4.8499999999999908 +} +trajectory_point { + path_point { + x: 587257.32886461145 + y: 4140942.51221178 + theta: -1.8102762157004082 + kappa: -0.0093553397222733547 + s: 4.6851982985479692 + dkappa: 0 + ddkappa: 0 + } + v: 0.30730751551807112 + a: -0.20046589678984017 + relative_time: 4.8999999999999906 +} +trajectory_point { + path_point { + x: 587257.32530884794 + y: 4140942.4975200142 + theta: -1.8104076071908777 + kappa: -0.0094018511825276416 + s: 4.7003142316156072 + dkappa: 0 + ddkappa: 0 + } + v: 0.29735267163525692 + a: -0.19772216314085952 + relative_time: 4.94999999999999 +} +trajectory_point { + path_point { + x: 587257.32186935935 + y: 4140942.4833086766 + theta: -1.810534702055282 + kappa: -0.0094468416956377844 + s: 4.71493586639408 + dkappa: 0 + ddkappa: 0 + } + v: 0.287535868698912 + a: -0.19494425979627622 + relative_time: 4.99999999999999 +} +trajectory_point { + path_point { + x: 587257.3185445125 + y: 4140942.4695710163 + theta: -1.8106575606613133 + kappa: -0.00949033263049982 + s: 4.7290701476406669 + dkappa: 0 + ddkappa: 0 + } + v: 0.27785881506403509 + a: -0.19213219194734676 + relative_time: 5.04999999999999 +} +trajectory_point { + path_point { + x: 587257.31533265347 + y: 4140942.4563002014 + theta: -1.8107762441195396 + kappa: -0.0095323456188187335 + s: 4.7427241055239096 + dkappa: 0 + ddkappa: 0 + } + v: 0.26832321882606214 + a: -0.18928596478532764 + relative_time: 5.09999999999999 +} +trajectory_point { + path_point { + x: 587257.31223210832 + y: 4140942.4434893159 + theta: -1.8108908142832167 + kappa: -0.0095729025550685166 + s: 4.7559048556106305 + dkappa: 0 + ddkappa: 0 + } + v: 0.25893078782086631 + a: -0.18640558350147535 + relative_time: 5.14999999999999 +} +trajectory_point { + path_point { + x: 587257.30924118333 + y: 4140942.43113136 + theta: -1.8110013337481063 + kappa: -0.0096120255964522519 + s: 4.7686195988529585 + dkappa: 0 + ddkappa: 0 + } + v: 0.24968322962475764 + a: -0.1834910532870464 + relative_time: 5.1999999999999895 +} +trajectory_point { + path_point { + x: 587257.30635816453 + y: 4140942.4192192531 + theta: -1.811107865852299 + kappa: -0.0096497371628621667 + s: 4.7808756215753476 + dkappa: 0 + ddkappa: 0 + } + v: 0.24058225155448371 + a: -0.18054237933329728 + relative_time: 5.2499999999999893 +} +trajectory_point { + path_point { + x: 587257.30358131777 + y: 4140942.40774583 + theta: -1.8112104746760422 + kappa: -0.0096860599368396964 + s: 4.7926802954616008 + dkappa: 0 + ddkappa: 0 + } + v: 0.23162956066722906 + a: -0.17755956683148449 + relative_time: 5.2999999999999892 +} +trajectory_point { + path_point { + x: 587257.30090888892 + y: 4140942.3967038416 + theta: -1.811309225041575 + kappa: -0.0097210168635355632 + s: 4.8040410775418918 + dkappa: 0 + ddkappa: 0 + } + v: 0.22282686376061545 + a: -0.17454262097286455 + relative_time: 5.349999999999989 +} +trajectory_point { + path_point { + x: 587257.29833910381 + y: 4140942.3860859592 + theta: -1.8114041825129641 + kappa: -0.009754631150669834 + s: 4.8149655101797855 + dkappa: 0 + ddkappa: 0 + } + v: 0.21417586737270183 + a: -0.17149154694869392 + relative_time: 5.3999999999999888 +} +trajectory_point { + path_point { + x: 587257.29587016813 + y: 4140942.3758847676 + theta: -1.8114954133959484 + kappa: -0.0097869262684919869 + s: 4.82546122105926 + dkappa: 0 + ddkappa: 0 + } + v: 0.20567827778198439 + a: -0.16840634995022913 + relative_time: 5.4499999999999886 +} +trajectory_point { + path_point { + x: 587257.29350026743 + y: 4140942.3660927718 + theta: -1.8115829847377845 + kappa: -0.00981792594974098 + s: 4.8355359231717294 + dkappa: 0 + ddkappa: 0 + } + v: 0.19733580100739628 + a: -0.16528703516872667 + relative_time: 5.4999999999999885 +} +trajectory_point { + path_point { + x: 587257.29122756748 + y: 4140942.35670239 + theta: -1.8116669643270984 + kappa: -0.0098476541896053271 + s: 4.8451974148030681 + dkappa: 0 + ddkappa: 0 + } + v: 0.18915014280830811 + a: -0.162133607795443 + relative_time: 5.5499999999999883 +} +trajectory_point { + path_point { + x: 587257.28905021364 + y: 4140942.3477059621 + theta: -1.811747420693741 + kappa: -0.0098761352456831382 + s: 4.8544535795206265 + dkappa: 0 + ddkappa: 0 + } + v: 0.18112300868452746 + a: -0.15894607302163469 + relative_time: 5.5999999999999881 +} +trajectory_point { + path_point { + x: 587257.28696633165 + y: 4140942.3390957424 + theta: -1.8118244231086456 + kappa: -0.0099033936379422129 + s: 4.8633123861602572 + dkappa: 0 + ddkappa: 0 + } + v: 0.17325610387629919 + a: -0.15572443603855818 + relative_time: 5.6499999999999879 +} +trajectory_point { + path_point { + x: 587257.28497402661 + y: 4140942.3308639019 + theta: -1.8118980415836907 + kappa: -0.0099294541486800985 + s: 4.871781888813338 + dkappa: 0 + ddkappa: 0 + } + v: 0.16555113336430521 + a: -0.15246870203746998 + relative_time: 5.6999999999999877 +} +trajectory_point { + path_point { + x: 587257.28307138407 + y: 4140942.3230025303 + theta: -1.8119683468715664 + kappa: -0.0099543418224841418 + s: 4.8798702268137877 + dkappa: 0 + ddkappa: 0 + } + v: 0.15800980186966479 + a: -0.14917887620962658 + relative_time: 5.7499999999999876 +} +trajectory_point { + path_point { + x: 587257.28125646908 + y: 4140942.315503634 + theta: -1.8120354104656409 + kappa: -0.00997808196619159 + s: 4.8875856247250971 + dkappa: 0 + ddkappa: 0 + } + v: 0.15063381385393426 + a: -0.14585496374628451 + relative_time: 5.7999999999999874 +} +trajectory_point { + path_point { + x: 587257.27952732728 + y: 4140942.3083591359 + theta: -1.8120993045998344 + kappa: -0.010000700148849611 + s: 4.8949363923273408 + dkappa: 0 + ddkappa: 0 + } + v: 0.1434248735191071 + a: -0.14249696983870025 + relative_time: 5.8499999999999872 +} +trajectory_point { + path_point { + x: 587257.27788198378 + y: 4140942.3015608769 + theta: -1.8121601022484912 + kappa: -0.0100222222016754 + s: 4.9019309246042075 + dkappa: 0 + ddkappa: 0 + } + v: 0.136384684807614 + a: -0.13910489967813031 + relative_time: 5.899999999999987 +} +trajectory_point { + path_point { + x: 587257.27631844359 + y: 4140942.2951006149 + theta: -1.8122178771262585 + kappa: -0.010042674218016225 + s: 4.9085777017300165 + dkappa: 0 + ddkappa: 0 + } + v: 0.129514951402323 + a: -0.13567875845583116 + relative_time: 5.9499999999999869 +} +trajectory_point { + path_point { + x: 587257.274834692 + y: 4140942.2889700243 + theta: -1.8122727036879642 + kappa: -0.0100620825533095 + s: 4.914885289056742 + dkappa: 0 + ddkappa: 0 + } + v: 0.12281737672653886 + a: -0.13221855136305932 + relative_time: 5.9999999999999867 +} +trajectory_point { + path_point { + x: 587257.27342871227 + y: 4140942.2831607731 + theta: -1.812324656454932 + kappa: -0.010080473586603352 + s: 4.9208622596096916 + dkappa: 0 + ddkappa: 0 + } + v: 0.11628909332665564 + a: -0.1289008902719842 + relative_time: 6.0499999999999865 +} +trajectory_point { + path_point { + x: 587257.27209853358 + y: 4140942.2776647178 + theta: -1.8123738082604488 + kappa: -0.010097873099461108 + s: 4.9265169922353591 + dkappa: 0 + ddkappa: 0 + } + v: 0.10992843157102378 + a: -0.12551459687990421 + relative_time: 6.0999999999999863 +} +trajectory_point { + path_point { + x: 587257.27084216475 + y: 4140942.272473631 + theta: -1.8124202326829326 + kappa: -0.010114307137290803 + s: 4.9318579515281131 + dkappa: 0 + ddkappa: 0 + } + v: 0.10373868638165931 + a: -0.12206513890818207 + relative_time: 6.1499999999999861 +} +trajectory_point { + path_point { + x: 587257.26965757727 + y: 4140942.2675791318 + theta: -1.8124640046731868 + kappa: -0.010129802231391235 + s: 4.9368937599937759 + dkappa: 0 + ddkappa: 0 + } + v: 0.097722879294510262 + a: -0.11855798407818051 + relative_time: 6.199999999999986 +} +trajectory_point { + path_point { + x: 587257.26854270906 + y: 4140942.2629727 + theta: -1.8125052004355851 + kappa: -0.010144385356891742 + s: 4.9416331843803141 + dkappa: 0 + ddkappa: 0 + } + v: 0.09188375845945658 + a: -0.11499860011126224 + relative_time: 6.2499999999999858 +} +trajectory_point { + path_point { + x: 587257.26749546709 + y: 4140942.2586456882 + theta: -1.8125438973092571 + kappa: -0.010158083890692006 + s: 4.9460851220085349 + dkappa: 0 + ddkappa: 0 + } + v: 0.08622379864030999 + a: -0.11139245472879 + relative_time: 6.2999999999999856 +} +trajectory_point { + path_point { + x: 587257.26651373121 + y: 4140942.2545893346 + theta: -1.8125801736492766 + kappa: -0.010170925569401839 + s: 4.9502585871027867 + dkappa: 0 + ddkappa: 0 + } + v: 0.080745201214814127 + a: -0.10774501565212652 + relative_time: 6.3499999999999854 +} +trajectory_point { + path_point { + x: 587257.26559535635 + y: 4140942.2507947772 + theta: -1.8126141087078491 + kappa: -0.010182938447280984 + s: 4.954162697121653 + dkappa: 0 + ddkappa: 0 + } + v: 0.075449894174644511 + a: -0.10406175060263452 + relative_time: 6.3999999999999853 +} +trajectory_point { + path_point { + x: 587257.264738177 + y: 4140942.2472530687 + theta: -1.8126457825155031 + kappa: -0.010194150854178899 + s: 4.9578066590886474 + dkappa: 0 + ddkappa: 0 + } + v: 0.070339532125408472 + a: -0.10034812730167673 + relative_time: 6.4499999999999851 +} +trajectory_point { + path_point { + x: 587257.26394000917 + y: 4140942.2439551852 + theta: -1.8126752757622815 + kappa: -0.010204591353474566 + s: 4.961199755922916 + dkappa: 0 + ddkappa: 0 + } + v: 0.065415496286645267 + a: -0.09660961347061589 + relative_time: 6.4999999999999849 +} +trajectory_point { + path_point { + x: 587257.26319865475 + y: 4140942.2408920443 + theta: -1.8127026696789323 + kappa: -0.010214288700016266 + s: 4.964351332769926 + dkappa: 0 + ddkappa: 0 + } + v: 0.060678894491825938 + a: -0.092851676830814689 + relative_time: 6.5499999999999847 +} +trajectory_point { + path_point { + x: 587257.26251190423 + y: 4140942.2380545167 + theta: -1.812728045918103 + kappa: -0.010223271798061389 + s: 4.967270783332169 + dkappa: 0 + ddkappa: 0 + } + v: 0.056130561188353453 + a: -0.089079785103635928 + relative_time: 6.5999999999999845 +} +trajectory_point { + path_point { + x: 587257.26187753945 + y: 4140942.2354334369 + theta: -1.812751486435533 + kappa: -0.010231569659216219 + s: 4.9699675361998539 + dkappa: 0 + ddkappa: 0 + } + v: 0.05177105743756262 + a: -0.085299406010442252 + relative_time: 6.6499999999999844 +} +trajectory_point { + path_point { + x: 587257.26129333756 + y: 4140942.2330196216 + theta: -1.8127730733712479 + kappa: -0.010239211360375729 + s: 4.9724510411816052 + dkappa: 0 + ddkappa: 0 + } + v: 0.047600670914720117 + a: -0.081516007272596461 + relative_time: 6.6999999999999842 +} +trajectory_point { + path_point { + x: 587257.26075707388 + y: 4140942.230803878 + theta: -1.8127928889307534 + kappa: -0.010246226001663378 + s: 4.974730755635159 + dkappa: 0 + ddkappa: 0 + } + v: 0.043619415909024489 + a: -0.07773505661146124 + relative_time: 6.749999999999984 +} +trajectory_point { + path_point { + x: 587257.26026652521 + y: 4140942.2287770207 + theta: -1.8128110152662305 + kappa: -0.010252642664370901 + s: 4.97681613079806 + dkappa: 0 + ddkappa: 0 + } + v: 0.039827033323606126 + a: -0.073962021748399331 + relative_time: 6.7999999999999838 +} +trajectory_point { + path_point { + x: 587257.25981947291 + y: 4140942.2269298825 + theta: -1.8128275343577278 + kappa: -0.010258490368898109 + s: 4.978716598118357 + dkappa: 0 + ddkappa: 0 + } + v: 0.036222990675527325 + a: -0.070202370404773465 + relative_time: 6.8499999999999837 +} +trajectory_point { + path_point { + x: 587257.25941370626 + y: 4140942.2252533287 + theta: -1.8128425278943587 + kappa: -0.010263798032692664 + s: 4.9804415555852994 + dkappa: 0 + ddkappa: 0 + } + v: 0.032806482095782172 + a: -0.066461570301946368 + relative_time: 6.8999999999999835 +} +trajectory_point { + path_point { + x: 587257.2590470257 + y: 4140942.2237382717 + theta: -1.8128560771554936 + kappa: -0.010268594428189901 + s: 4.9820003540600366 + dkappa: 0 + ddkappa: 0 + } + v: 0.029576428329296689 + a: -0.06274508916128077 + relative_time: 6.9499999999999833 +} +trajectory_point { + path_point { + x: 587257.25871724589 + y: 4140942.2223756816 + theta: -1.8128682628919548 + kappa: -0.010272908140752608 + s: 4.9834022836063125 + dkappa: 0 + ddkappa: 0 + } + v: 0.026531476734928713 + a: -0.059058394704139386 + relative_time: 6.9999999999999831 +} +trajectory_point { + path_point { + x: 587257.25842030067 + y: 4140942.2211570712 + theta: -1.8128797926894524 + kappa: -0.010276856460271136 + s: 4.9846565598211594 + dkappa: 0 + ddkappa: 0 + } + v: 0.023670001285467979 + a: -0.055406954651884957 + relative_time: 7.0499999999999829 +} +trajectory_point { + path_point { + x: 587257.25814661267 + y: 4140942.2200754089 + theta: -1.8128932018823176 + kappa: -0.010280815562351817 + s: 4.9857723101656006 + dkappa: 0 + ddkappa: 0 + } + v: 0.020990102567636074 + a: -0.051796236725880213 + relative_time: 7.0999999999999828 +} +trajectory_point { + path_point { + x: 587257.25790469046 + y: 4140942.21911929 + theta: -1.8129050547311771 + kappa: -0.010284315148939609 + s: 4.9867585602953426 + dkappa: 0 + ddkappa: 0 + } + v: 0.018489607782086442 + a: -0.048231708647487881 + relative_time: 7.1499999999999826 +} +trajectory_point { + path_point { + x: 587257.25769234833 + y: 4140942.2182800774 + theta: -1.812915458318801 + kappa: -0.010287386836709926 + s: 4.9876242203914716 + dkappa: 0 + ddkappa: 0 + } + v: 0.016166070743404384 + a: -0.044718838138070691 + relative_time: 7.1999999999999824 +} +trajectory_point { + path_point { + x: 587257.25750743237 + y: 4140942.2175492574 + theta: -1.8129245181760287 + kappa: -0.010290061784086948 + s: 4.9883780714911534 + dkappa: 0 + ddkappa: 0 + } + v: 0.014016771880107096 + a: -0.041263092918991356 + relative_time: 7.2499999999999822 +} +trajectory_point { + path_point { + x: 587257.25734782382 + y: 4140942.2169184559 + theta: -1.8129323381174716 + kappa: -0.010292370642739785 + s: 4.9890287518183269 + dkappa: 0 + ddkappa: 0 + } + v: 0.012038718234643572 + a: -0.037869940711612621 + relative_time: 7.2999999999999821 +} +trajectory_point { + path_point { + x: 587257.25721144187 + y: 4140942.2163794516 + theta: -1.8129390200772151 + kappa: -0.010294343509078659 + s: 4.9895847431144027 + dkappa: 0 + ddkappa: 0 + } + v: 0.01022864346339479 + a: -0.034544849237297226 + relative_time: 7.3499999999999819 +} +trajectory_point { + path_point { + x: 587257.257096248 + y: 4140942.2159241848 + theta: -1.8129446639445244 + kappa: -0.010296009875751043 + s: 4.9900543569689564 + dkappa: 0 + ddkappa: 0 + } + v: 0.0085830078366734425 + a: -0.031293286217407859 + relative_time: 7.3999999999999817 +} +trajectory_point { + path_point { + x: 587257.2570002483 + y: 4140942.2155447775 + theta: -1.8129493673995518 + kappa: -0.010297398583137867 + s: 4.99044572115043 + dkappa: 0 + ddkappa: 0 + } + v: 0.0070979982387242013 + a: -0.02812071937330729 + relative_time: 7.4499999999999815 +} +trajectory_point { + path_point { + x: 587257.25692149776 + y: 4140942.2152335416 + theta: -1.8129532257490444 + kappa: -0.010298537770849655 + s: 4.9907667659368258 + dkappa: 0 + ddkappa: 0 + } + v: 0.0057695281677235394 + a: -0.02503261642635822 + relative_time: 7.4999999999999813 +} +trajectory_point { + path_point { + x: 587257.25685810251 + y: 4140942.2149829925 + theta: -1.8129563317620547 + kappa: -0.010299454829222706 + s: 4.9910252104464021 + dkappa: 0 + ddkappa: 0 + } + v: 0.004593237735779826 + a: -0.022034445097923391 + relative_time: 7.5499999999999812 +} +trajectory_point { + path_point { + x: 587257.2568082246 + y: 4140942.2147858664 + theta: -1.8129587755056518 + kappa: -0.010300176350815251 + s: 4.99122854896837 + dkappa: 0 + ddkappa: 0 + } + v: 0.0035644936689332579 + a: -0.019131673109365532 + relative_time: 7.599999999999981 +} +trajectory_point { + path_point { + x: 587257.256770084 + y: 4140942.2146351286 + theta: -1.8129606441806336 + kappa: -0.010300728081903647 + s: 4.991384037293594 + dkappa: 0 + ddkappa: 0 + } + v: 0.0026783893071559289 + a: -0.016329768182047358 + relative_time: 7.6499999999999808 +} +trajectory_point { + path_point { + x: 587257.256741963 + y: 4140942.2145239888 + theta: -1.812962021957242 + kappa: -0.010301134873978511 + s: 4.9914986790452831 + dkappa: 0 + ddkappa: 0 + } + v: 0.0019297446043518296 + a: -0.013634198037331624 + relative_time: 7.6999999999999806 +} +trajectory_point { + path_point { + x: 587257.25672220869 + y: 4140942.2144459165 + theta: -1.812962989810877 + kappa: -0.010301420635240909 + s: 4.9915792120096905 + dkappa: 0 + ddkappa: 0 + } + v: 0.0013131061283567086 + a: -0.011050430396581046 + relative_time: 7.7499999999999805 +} +trajectory_point { + path_point { + x: 587257.25670923688 + y: 4140942.21439465 + theta: -1.8129636253578136 + kappa: -0.010301608282098518 + s: 4.9916320944668096 + dkappa: 0 + ddkappa: 0 + } + v: 0.00082274706093825312 + a: -0.0085839329811583237 + relative_time: 7.79999999999998 +} +trajectory_point { + path_point { + x: 587257.25670153531 + y: 4140942.214364212 + theta: -1.8129640026909193 + kappa: -0.010301719690661796 + s: 4.99166349152107 + dkappa: 0 + ddkappa: 0 + } + v: 0.00045266719779601949 + a: -0.0062401735124262 + relative_time: 7.84999999999998 +} +trajectory_point { + path_point { + x: 587257.25669766718 + y: 4140942.2143489239 + theta: -1.812964192215371 + kappa: -0.010301775648240145 + s: 4.9916792614320356 + dkappa: 0 + ddkappa: 0 + } + v: 0.00019659294856140541 + a: -0.0040246197117474458 + relative_time: 7.89999999999998 +} +trajectory_point { + path_point { + x: 587257.25669627369 + y: 4140942.214343417 + theta: -1.8129642604843759 + kappa: -0.010301795804838079 + s: 4.991684941945099 + dkappa: 0 + ddkappa: 0 + } + v: 4.7977336797663805e-05 + a: -0.0019427393004847471 + relative_time: 7.94999999999998 +} +trajectory_point { + path_point { + x: 587257.25669607881 + y: 4140942.2143426468 + theta: -1.8129642700348887 + kappa: -0.010301798624651396 + s: 4.9916857366221787 + dkappa: 0 + ddkappa: 0 + } + v: -5.5511151231257827e-17 + a: -8.6042284408449632e-16 + relative_time: 7.99999999999998 +} +decision { + main_decision { + stop { + reason_code: STOP_REASON_OBSTACLE + reason: "stop by 867_0" + stop_point { + x: 587256.12880488532 + y: 4140937.9442900335 + } + stop_heading: -1.9041697405077349 + } + } + object_decision { + decision { + id: "867_0" + perception_id: 867 + object_decision { + stop { + reason_code: STOP_REASON_OBSTACLE + distance_s: -10 + stop_point { + x: 587256.12880488532 + y: 4140937.9442900335 + } + stop_heading: -1.9041697405077349 + } + } + } + decision { + id: "867_1" + perception_id: 867 + object_decision { + stop { + reason_code: STOP_REASON_OBSTACLE + distance_s: -10 + stop_point { + x: 587256.12880488532 + y: 4140937.9442900335 + } + stop_heading: -1.9041697405077349 + } + } + } + decision { + id: "1061_0" + perception_id: 1061 + object_decision { + ignore { + } + } + } + decision { + id: "DEST" + perception_id: -1109540454 + object_decision { + ignore { + } + } + } + } +} diff --git a/modules/planning/testdata/sunnyvale_loop_test/result_stop_0.pb.txt b/modules/planning/testdata/sunnyvale_loop_test/result_stop_0.pb.txt new file mode 100644 index 00000000000..56475c3af07 --- /dev/null +++ b/modules/planning/testdata/sunnyvale_loop_test/result_stop_0.pb.txt @@ -0,0 +1,943 @@ +header { + module_name: "planning" + status { + error_code: PLANNING_ERROR + msg: "Mapping obstacle for dp st speed optimizer failed." + } +} +is_replan: true +gear: GEAR_DRIVE +trajectory_point { + path_point { + x: 587045.66216107388 + y: 4141549.0619571814 + z: 0 + theta: 1.2494282967404811 + kappa: -0.014281701547838496 + s: 0 + dkappa: 0 + ddkappa: 0 + } + v: 2.7111110687255859 + a: -1 + relative_time: 0 +} +trajectory_point { + path_point { + x: 587045.70478576492 + y: 4141549.1892666006 + theta: 1.246838840022005 + kappa: -0.022795151965763427 + s: 0.13425555343627932 + dkappa: 0 + ddkappa: 0 + } + v: 2.6611110687255857 + a: -1 + relative_time: 0.05 +} +trajectory_point { + path_point { + x: 587045.74696533382 + y: 4141549.3141933475 + theta: 1.2433193535259683 + kappa: -0.030420386020496952 + s: 0.26611110687255862 + dkappa: 0 + ddkappa: 0 + } + v: 2.6111110687255858 + a: -1 + relative_time: 0.1 +} +trajectory_point { + path_point { + x: 587045.78875068633 + y: 4141549.4365083897 + theta: 1.2389906220168376 + kappa: -0.037200297800929275 + s: 0.395366660308838 + dkappa: 0 + ddkappa: 0 + } + v: 2.5611110687255856 + a: -1 + relative_time: 0.15000000000000002 +} +trajectory_point { + path_point { + x: 587045.83042698586 + y: 4141549.5563222719 + theta: 1.2338585924714827 + kappa: -0.043126670846849464 + s: 0.52222221374511724 + dkappa: 0 + ddkappa: 0 + } + v: 2.5111110687255858 + a: -1 + relative_time: 0.2 +} +trajectory_point { + path_point { + x: 587045.8718380183 + y: 4141549.6734737977 + theta: 1.228157614420563 + kappa: -0.048301644521364977 + s: 0.64647776718139649 + dkappa: 0 + ddkappa: 0 + } + v: 2.4611110687255859 + a: -1 + relative_time: 0.25 +} +trajectory_point { + path_point { + x: 587045.9131357494 + y: 4141549.7881175 + theta: 1.2219873954735763 + kappa: -0.052816700769138178 + s: 0.76833332061767567 + dkappa: 0 + ddkappa: 0 + } + v: 2.4111110687255861 + a: -1 + relative_time: 0.3 +} +trajectory_point { + path_point { + x: 587045.95421575941 + y: 4141549.9000739129 + theta: 1.2154691514859584 + kappa: -0.056713564294151253 + s: 0.887588874053955 + dkappa: 0 + ddkappa: 0 + } + v: 2.3611110687255863 + a: -1 + relative_time: 0.35 +} +trajectory_point { + path_point { + x: 587045.99524044734 + y: 4141550.0094910543 + theta: 1.2086506877066348 + kappa: -0.060041862069679 + s: 1.0044444274902342 + dkappa: 0 + ddkappa: 0 + } + v: 2.311111068725586 + a: -1 + relative_time: 0.39999999999999997 +} +trajectory_point { + path_point { + x: 587046.03603536612 + y: 4141550.1162151587 + theta: 1.2016429044051402 + kappa: -0.062819151595874589 + s: 1.1186999809265137 + dkappa: 0 + ddkappa: 0 + } + v: 2.2611110687255862 + a: -1 + relative_time: 0.44999999999999996 +} +trajectory_point { + path_point { + x: 587046.07684392319 + y: 4141550.2203606926 + theta: 1.1944620359621614 + kappa: -0.065107957576902867 + s: 1.2305555343627927 + dkappa: 0 + ddkappa: 0 + } + v: 2.2111110687255859 + a: -1 + relative_time: 0.49999999999999994 +} +trajectory_point { + path_point { + x: 587046.1173096709 + y: 4141550.3218452083 + theta: 1.187258909173732 + kappa: -0.066968639320903356 + s: 1.3398110877990721 + dkappa: 0 + ddkappa: 0 + } + v: 2.1611110687255861 + a: -1 + relative_time: 0.54999999999999993 +} +trajectory_point { + path_point { + x: 587046.15772205614 + y: 4141550.4207638386 + theta: 1.1800030129757253 + kappa: -0.068437059393141736 + s: 1.4466666412353515 + dkappa: 0 + ddkappa: 0 + } + v: 2.1111110687255863 + a: -1 + relative_time: 0.6 +} +trajectory_point { + path_point { + x: 587046.19775361451 + y: 4141550.5170265315 + theta: 1.172814551761199 + kappa: -0.069552842600633921 + s: 1.5509221946716309 + dkappa: 0 + ddkappa: 0 + } + v: 2.061111068725586 + a: -1 + relative_time: 0.65 +} +trajectory_point { + path_point { + x: 587046.23759798089 + y: 4141550.6107650083 + theta: 1.1656779629524976 + kappa: -0.0703491033229669 + s: 1.6527777481079104 + dkappa: 0 + ddkappa: 0 + } + v: 2.0111110687255858 + a: -1 + relative_time: 0.70000000000000007 +} +trajectory_point { + path_point { + x: 587046.27701463143 + y: 4141550.701857537 + theta: 1.158672130367054 + kappa: -0.0708608462691315 + s: 1.7520333015441898 + dkappa: 0 + ddkappa: 0 + } + v: 1.9611110687255859 + a: -1 + relative_time: 0.75000000000000011 +} +trajectory_point { + path_point { + x: 587046.31612995954 + y: 4141550.7904628338 + theta: 1.1517904572254238 + kappa: -0.071117775164813185 + s: 1.8488888549804692 + dkappa: 0 + ddkappa: 0 + } + v: 1.9111110687255859 + a: -1 + relative_time: 0.80000000000000016 +} +trajectory_point { + path_point { + x: 587046.35474488884 + y: 4141550.8764448958 + theta: 1.1450867093650983 + kappa: -0.071151234335161892 + s: 1.9431444084167484 + dkappa: 0 + ddkappa: 0 + } + v: 1.8611110687255858 + a: -1 + relative_time: 0.8500000000000002 +} +trajectory_point { + path_point { + x: 587046.39292236278 + y: 4141550.9599904614 + theta: 1.1385581601848958 + kappa: -0.070987830935462085 + s: 2.0349999618530279 + dkappa: 0 + ddkappa: 0 + } + v: 1.8111110687255858 + a: -1 + relative_time: 0.90000000000000024 +} +trajectory_point { + path_point { + x: 587046.43056802917 + y: 4141551.0409185528 + theta: 1.1322237877894596 + kappa: -0.070652711873514226 + s: 2.1242555152893074 + dkappa: 0 + ddkappa: 0 + } + v: 1.7611110687255858 + a: -1 + relative_time: 0.95000000000000029 +} +trajectory_point { + path_point { + x: 587046.46766477427 + y: 4141551.1194533776 + theta: 1.1261266606440723 + kappa: -0.070144727226944537 + s: 2.2111110687255864 + dkappa: 0 + ddkappa: 0 + } + v: 1.7111110687255857 + a: -1 + relative_time: 1.0000000000000002 +} +trajectory_point { + path_point { + x: 587046.50421095779 + y: 4141551.1953697568 + theta: 1.1202366774389443 + kappa: -0.069506505614232772 + s: 2.2953666221618656 + dkappa: 0 + ddkappa: 0 + } + v: 1.6611110687255857 + a: -1 + relative_time: 1.0500000000000003 +} +trajectory_point { + path_point { + x: 587046.54003781243 + y: 4141551.2689682175 + theta: 1.1145856084453294 + kappa: -0.068765429806825484 + s: 2.3772221755981451 + dkappa: 0 + ddkappa: 0 + } + v: 1.6111110687255856 + a: -1 + relative_time: 1.1000000000000003 +} +trajectory_point { + path_point { + x: 587046.5751023069 + y: 4141551.3400441231 + theta: 1.1091707109521975 + kappa: -0.067939139141770771 + s: 2.4564777290344244 + dkappa: 0 + ddkappa: 0 + } + v: 1.5611110687255856 + a: -1 + relative_time: 1.1500000000000004 +} +trajectory_point { + path_point { + x: 587046.60955601814 + y: 4141551.4087443 + theta: 1.1039544077587975 + kappa: -0.067039222938460125 + s: 2.5333332824707036 + dkappa: 0 + ddkappa: 0 + } + v: 1.5111110687255855 + a: -1 + relative_time: 1.2000000000000004 +} +trajectory_point { + path_point { + x: 587046.64309895877 + y: 4141551.4749920033 + theta: 1.0990374575362629 + kappa: -0.066056511276707475 + s: 2.607588835906983 + dkappa: 0 + ddkappa: 0 + } + v: 1.4611110687255855 + a: -1 + relative_time: 1.2500000000000004 +} +trajectory_point { + path_point { + x: 587046.67595089017 + y: 4141551.5388971814 + theta: 1.0943283612858066 + kappa: -0.065026879398247431 + s: 2.6794443893432622 + dkappa: 0 + ddkappa: 0 + } + v: 1.4111110687255854 + a: -1 + relative_time: 1.3000000000000005 +} +trajectory_point { + path_point { + x: 587046.70786684088 + y: 4141551.6003600769 + theta: 1.0898423273785067 + kappa: -0.063974825864878931 + s: 2.7486999427795413 + dkappa: 0 + ddkappa: 0 + } + v: 1.3611110687255854 + a: -1 + relative_time: 1.3500000000000005 +} +trajectory_point { + path_point { + x: 587046.738882791 + y: 4141551.6595857125 + theta: 1.0856107322565329 + kappa: -0.0628865562263492 + s: 2.8155554962158207 + dkappa: 0 + ddkappa: 0 + } + v: 1.3111110687255854 + a: -1 + relative_time: 1.4000000000000006 +} +trajectory_point { + path_point { + x: 587046.76900061709 + y: 4141551.7163451957 + theta: 1.0816118124246035 + kappa: -0.061778116436858349 + s: 2.8798110496521003 + dkappa: 0 + ddkappa: 0 + } + v: 1.2611110687255853 + a: -1 + relative_time: 1.4500000000000006 +} +trajectory_point { + path_point { + x: 587046.798146203 + y: 4141551.7709037615 + theta: 1.0778005012168514 + kappa: -0.06067882748206218 + s: 2.94166660308838 + dkappa: 0 + ddkappa: 0 + } + v: 1.2111110687255853 + a: -1 + relative_time: 1.5000000000000007 +} +trajectory_point { + path_point { + x: 587046.82631925656 + y: 4141551.8230334036 + theta: 1.0742589705949208 + kappa: -0.059559248182311147 + s: 3.0009221565246595 + dkappa: 0 + ddkappa: 0 + } + v: 1.1611110687255852 + a: -1 + relative_time: 1.5500000000000007 +} +trajectory_point { + path_point { + x: 587046.8534553987 + y: 4141551.872994944 + theta: 1.0708976932280159 + kappa: -0.058463004682886073 + s: 3.0577777099609378 + dkappa: 0 + ddkappa: 0 + } + v: 1.1111110687255852 + a: -1 + relative_time: 1.6000000000000008 +} +trajectory_point { + path_point { + x: 587046.8795502038 + y: 4141551.9205630664 + theta: 1.0677606338461652 + kappa: -0.05737471912109697 + s: 3.1120332633972176 + dkappa: 0 + ddkappa: 0 + } + v: 1.0611110687255851 + a: -1 + relative_time: 1.6500000000000008 +} +trajectory_point { + path_point { + x: 587046.904614893 + y: 4141551.9659583848 + theta: 1.0648096327868402 + kappa: -0.05630986374425475 + s: 3.1638888168334964 + dkappa: 0 + ddkappa: 0 + } + v: 1.0111110687255851 + a: -1 + relative_time: 1.7000000000000008 +} +trajectory_point { + path_point { + x: 587046.92856842908 + y: 4141552.0089971768 + theta: 1.06206199979627 + kappa: -0.055269434835854961 + s: 3.2131443702697768 + dkappa: 0 + ddkappa: 0 + } + v: 0.961111068725585 + a: -1 + relative_time: 1.7500000000000009 +} +trajectory_point { + path_point { + x: 587046.95142438973 + y: 4141552.0498999553 + theta: 1.05948905157823 + kappa: -0.054263583911425523 + s: 3.2599999237060562 + dkappa: 0 + ddkappa: 0 + } + v: 0.911111068725585 + a: -1 + relative_time: 1.8000000000000009 +} +trajectory_point { + path_point { + x: 587046.97312207951 + y: 4141552.088471503 + theta: 1.0571233663463917 + kappa: -0.053288064386836406 + s: 3.3042554771423354 + dkappa: 0 + ddkappa: 0 + } + v: 0.861111068725585 + a: -1 + relative_time: 1.850000000000001 +} +trajectory_point { + path_point { + x: 587046.99365425773 + y: 4141552.1249449654 + theta: 1.054889901739029 + kappa: -0.052363755923203352 + s: 3.3461110305786139 + dkappa: 0 + ddkappa: 0 + } + v: 0.81111106872558492 + a: -1 + relative_time: 1.900000000000001 +} +trajectory_point { + path_point { + x: 587047.01313677756 + y: 4141552.1590247229 + theta: 1.0528745024362209 + kappa: -0.051462652789322647 + s: 3.3853665840148932 + dkappa: 0 + ddkappa: 0 + } + v: 0.76111106872558487 + a: -1 + relative_time: 1.9500000000000011 +} +trajectory_point { + path_point { + x: 587047.03142817807 + y: 4141552.1910209185 + theta: 1.0509823162770973 + kappa: -0.050616641160515854 + s: 3.4222221374511723 + dkappa: 0 + ddkappa: 0 + } + v: 0.711111068725585 + a: -1 + relative_time: 2.0000000000000009 +} +trajectory_point { + path_point { + x: 587047.0484539452 + y: 4141552.2207457279 + theta: 1.0492508626884571 + kappa: -0.0498232378085227 + s: 3.4564776908874517 + dkappa: 0 + ddkappa: 0 + } + v: 0.66111106872558523 + a: -1 + relative_time: 2.0500000000000007 +} +trajectory_point { + path_point { + x: 587047.06433986174 + y: 4141552.2483575726 + theta: 1.0476990581550345 + kappa: -0.049070269624489654 + s: 3.4883332443237309 + dkappa: 0 + ddkappa: 0 + } + v: 0.6111110687255854 + a: -1 + relative_time: 2.1000000000000005 +} +trajectory_point { + path_point { + x: 587047.07892919471 + y: 4141552.2737157815 + theta: 1.0462739074897385 + kappa: -0.048378757515373079 + s: 3.5175887977600104 + dkappa: 0 + ddkappa: 0 + } + v: 0.56111106872558558 + a: -1 + relative_time: 2.1500000000000004 +} +trajectory_point { + path_point { + x: 587047.09232168156 + y: 4141552.296993712 + theta: 1.0449656735146291 + kappa: -0.047743974090794832 + s: 3.5444443511962884 + dkappa: 0 + ddkappa: 0 + } + v: 0.51111106872558576 + a: -1 + relative_time: 2.2 +} +trajectory_point { + path_point { + x: 587047.10455932142 + y: 4141552.3179357178 + theta: 1.0438283429112629 + kappa: -0.047154062074383794 + s: 3.568699904632568 + dkappa: 0 + ddkappa: 0 + } + v: 0.46111106872558594 + a: -1 + relative_time: 2.25 +} +trajectory_point { + path_point { + x: 587047.11560716364 + y: 4141552.3367933528 + theta: 1.0428101224092985 + kappa: -0.046620053973616481 + s: 3.5905554580688475 + dkappa: 0 + ddkappa: 0 + } + v: 0.41111106872558612 + a: -1 + relative_time: 2.3 +} +trajectory_point { + path_point { + x: 587047.12534072262 + y: 4141552.3534076288 + theta: 1.041913031641754 + kappa: -0.046149573024702947 + s: 3.6098110115051267 + dkappa: 0 + ddkappa: 0 + } + v: 0.36111106872558629 + a: -1 + relative_time: 2.3499999999999996 +} +trajectory_point { + path_point { + x: 587047.13386109681 + y: 4141552.3679511119 + theta: 1.0411277543291437 + kappa: -0.045737732523654442 + s: 3.6266665649414063 + dkappa: 0 + ddkappa: 0 + } + v: 0.31111106872558647 + a: -1 + relative_time: 2.3999999999999995 +} +trajectory_point { + path_point { + x: 587047.14106718777 + y: 4141552.3802512363 + theta: 1.040463608692128 + kappa: -0.045389419174459725 + s: 3.6409221183776856 + dkappa: 0 + ddkappa: 0 + } + v: 0.26111106872558665 + a: -1 + relative_time: 2.4499999999999993 +} +trajectory_point { + path_point { + x: 587047.1470636283 + y: 4141552.3904784941 + theta: 1.0399200223304974 + kappa: -0.045098359581227467 + s: 3.6527776718139644 + dkappa: 0 + ddkappa: 0 + } + v: 0.21111106872558683 + a: -1 + relative_time: 2.4999999999999991 +} +trajectory_point { + path_point { + x: 587047.15175287658 + y: 4141552.3984582326 + theta: 1.0395151137882379 + kappa: -0.044868044718693212 + s: 3.6620332252502439 + dkappa: 0 + ddkappa: 0 + } + v: 0.161111068725587 + a: -1 + relative_time: 2.5499999999999989 +} +trajectory_point { + path_point { + x: 587047.155226185 + y: 4141552.4043687941 + theta: 1.0392151991980607 + kappa: -0.044697451370802874 + s: 3.6688887786865232 + dkappa: 0 + ddkappa: 0 + } + v: 0.11111106872558718 + a: -1 + relative_time: 2.5999999999999988 +} +trajectory_point { + path_point { + x: 587047.15738222538 + y: 4141552.4080377482 + theta: 1.0390290284592261 + kappa: -0.04459155633044342 + s: 3.6731443321228028 + dkappa: 0 + ddkappa: 0 + } + v: 0.061111068725587359 + a: -1 + relative_time: 2.6499999999999986 +} +trajectory_point { + path_point { + x: 587047.15832232591 + y: 4141552.4096375257 + theta: 1.0389478522095521 + kappa: -0.044545382804727869 + s: 3.6749998855590822 + dkappa: 0 + ddkappa: 0 + } + v: 0.011111068725587536 + a: -1 + relative_time: 2.6999999999999984 +} +trajectory_point { + path_point { + x: 587047.1583335842 + y: 4141552.4096566848 + theta: 1.0389468800747808 + kappa: -0.04454482984883483 + s: 3.6750221069335942 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.7499999999999982 +} +trajectory_point { + path_point { + x: 587047.1583335842 + y: 4141552.4096566848 + theta: 1.0389468800747808 + kappa: -0.04454482984883483 + s: 3.6750221069335942 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.799999999999998 +} +trajectory_point { + path_point { + x: 587047.1583335842 + y: 4141552.4096566848 + theta: 1.0389468800747808 + kappa: -0.04454482984883483 + s: 3.6750221069335942 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.8499999999999979 +} +trajectory_point { + path_point { + x: 587047.1583335842 + y: 4141552.4096566848 + theta: 1.0389468800747808 + kappa: -0.04454482984883483 + s: 3.6750221069335942 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.8999999999999977 +} +trajectory_point { + path_point { + x: 587047.1583335842 + y: 4141552.4096566848 + theta: 1.0389468800747808 + kappa: -0.04454482984883483 + s: 3.6750221069335942 + dkappa: 0 + ddkappa: 0 + } + v: 0 + a: -1 + relative_time: 2.9499999999999975 +} +decision { + main_decision { + cruise { + } + } + object_decision { + decision { + id: "99_0" + perception_id: 99 + object_decision { + ignore { + } + } + } + decision { + id: "99_1" + perception_id: 99 + object_decision { + ignore { + } + } + } + decision { + id: "99_2" + perception_id: 99 + object_decision { + ignore { + } + } + } + decision { + id: "401_0" + perception_id: 401 + object_decision { + stop { + reason_code: STOP_REASON_OBSTACLE + distance_s: -10 + stop_point { + x: 587046.1405810772 + y: 4141548.8191453074 + } + stop_heading: 1.250523303060139 + } + } + } + decision { + id: "401_1" + perception_id: 401 + object_decision { + stop { + reason_code: STOP_REASON_OBSTACLE + distance_s: -10 + stop_point { + x: 587046.1405810772 + y: 4141548.8191453074 + } + stop_heading: 1.250523303060139 + } + } + } + decision { + id: "401_2" + perception_id: 401 + object_decision { + stop { + reason_code: STOP_REASON_OBSTACLE + distance_s: -10 + stop_point { + x: 587046.1405810772 + y: 4141548.8191453074 + } + stop_heading: 1.250523303060139 + } + } + } + decision { + id: "412_0" + perception_id: 412 + object_decision { + ignore { + } + } + } + decision { + id: "DEST" + perception_id: -1109540454 + object_decision { + ignore { + } + } + } + } +} diff --git a/modules/planning/trajectory_stitcher/BUILD b/modules/planning/trajectory_stitcher/BUILD new file mode 100644 index 00000000000..4cef691a80e --- /dev/null +++ b/modules/planning/trajectory_stitcher/BUILD @@ -0,0 +1,22 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "trajectory_stitcher", + srcs = [ + "trajectory_stitcher.cc", + ], + hdrs = [ + "trajectory_stitcher.h", + ], + deps = [ + "//modules/common:log", + "//modules/common/proto:pnc_point_proto", + "//modules/common/vehicle_state", + "//modules/planning/common:frame", + "//modules/planning/common:planning_gflags", + ], +) + +cpplint() diff --git a/modules/planning/trajectory_stitcher/trajectory_stitcher.cc b/modules/planning/trajectory_stitcher/trajectory_stitcher.cc new file mode 100644 index 00000000000..cae92ecce99 --- /dev/null +++ b/modules/planning/trajectory_stitcher/trajectory_stitcher.cc @@ -0,0 +1,130 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file trajectory_stitcher.cc + **/ + +#include "modules/planning/trajectory_stitcher/trajectory_stitcher.h" + +#include + +#include "modules/common/log.h" +#include "modules/planning/common/planning_gflags.h" +#include "modules/planning/math/double.h" + +namespace apollo { +namespace planning { + +using apollo::common::TrajectoryPoint; +using apollo::common::VehicleState; + +namespace { + +std::vector ComputeReinitStitchingTrajectory() { + TrajectoryPoint init_point; + const auto& vehicle_state = *VehicleState::instance(); + init_point.mutable_path_point()->set_x(vehicle_state.x()); + init_point.mutable_path_point()->set_y(vehicle_state.y()); + init_point.mutable_path_point()->set_z(vehicle_state.z()); + init_point.mutable_path_point()->set_theta(vehicle_state.heading()); + init_point.mutable_path_point()->set_kappa(vehicle_state.kappa()); + + init_point.set_v(vehicle_state.linear_velocity()); + init_point.set_a(vehicle_state.linear_acceleration()); + init_point.set_relative_time(0.0); + + DCHECK(!std::isnan(init_point.path_point().x())); + DCHECK(!std::isnan(init_point.path_point().y())); + DCHECK(!std::isnan(init_point.path_point().z())); + DCHECK(!std::isnan(init_point.path_point().theta())); + DCHECK(!std::isnan(init_point.path_point().kappa())); + DCHECK(!std::isnan(init_point.v())); + DCHECK(!std::isnan(init_point.a())); + + return std::vector(1, init_point); +} +} // namespace + +// Planning from current vehicle state: +// if 1. the auto-driving mode is off or +// 2. we don't have the trajectory from last planning cycle or +// 3. the position deviation from actual and target is too high +std::vector TrajectoryStitcher::ComputeStitchingTrajectory( + const bool is_on_auto_mode, const double current_timestamp, + const double planning_cycle_time, + const PublishableTrajectory& prev_trajectory) { + if (!is_on_auto_mode) { + return ComputeReinitStitchingTrajectory(); + } + + std::size_t prev_trajectory_size = prev_trajectory.NumOfPoints(); + + if (prev_trajectory_size == 0) { + AWARN << "Projected trajectory at time [" << prev_trajectory.header_time() + << "] size is zero! Previous planning not exist or failed. Use " + "origin car status instead."; + return ComputeReinitStitchingTrajectory(); + } + + const double veh_rel_time = current_timestamp - prev_trajectory.header_time(); + + std::size_t matched_index = prev_trajectory.QueryNearestPoint(veh_rel_time); + + if (matched_index == prev_trajectory_size) { + AWARN << "The previous trajectory is not long enough, something is wrong"; + return ComputeReinitStitchingTrajectory(); + } + + if (matched_index == 0 && + veh_rel_time < prev_trajectory.StartPoint().relative_time()) { + AWARN << "the previous trajectory doesn't cover current time"; + return ComputeReinitStitchingTrajectory(); + } + + const auto& vehicle_state = *VehicleState::instance(); + auto matched_point = prev_trajectory.TrajectoryPointAt(matched_index); + const double position_diff = + std::hypot(matched_point.path_point().x() - vehicle_state.x(), + matched_point.path_point().y() - vehicle_state.y()); + + if (position_diff > FLAGS_replan_distance_threshold) { + AWARN << "the distance between matched point and actual position is too " + "large"; + return ComputeReinitStitchingTrajectory(); + } + + double forward_rel_time = veh_rel_time + planning_cycle_time; + std::size_t forward_index = + prev_trajectory.QueryNearestPoint(forward_rel_time); + + std::vector stitching_trajectory( + prev_trajectory.trajectory_points().begin() + matched_index, + prev_trajectory.trajectory_points().begin() + forward_index + 1); + + const double zero_time = veh_rel_time; + const double zero_s = + prev_trajectory.TrajectoryPointAt(forward_index).path_point().s(); + + for (auto& tp : stitching_trajectory) { + tp.set_relative_time(tp.relative_time() - zero_time); + tp.mutable_path_point()->set_s(tp.path_point().s() - zero_s); + } + return stitching_trajectory; +} + +} // namespace planning +} // namespace apollo diff --git a/modules/planning/trajectory_stitcher/trajectory_stitcher.h b/modules/planning/trajectory_stitcher/trajectory_stitcher.h new file mode 100644 index 00000000000..f4326b911d5 --- /dev/null +++ b/modules/planning/trajectory_stitcher/trajectory_stitcher.h @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file trajectory_stitcher.h + **/ + +#ifndef MODULES_PLANNING_TRAJECTORY_STITCHER_TRAJECTORY_STITCHER_H_ +#define MODULES_PLANNING_TRAJECTORY_STITCHER_TRAJECTORY_STITCHER_H_ + +#include + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/common/vehicle_state/vehicle_state.h" +#include "modules/planning/common/frame.h" +#include "modules/planning/common/trajectory/publishable_trajectory.h" + +namespace apollo { +namespace planning { + +class TrajectoryStitcher { + public: + TrajectoryStitcher() = delete; + + static std::vector ComputeStitchingTrajectory( + const bool is_on_auto_mode, const double current_timestamp, + const double planning_cycle_time, + const PublishableTrajectory& prev_trajectory); +}; + +} // namespace planning +} // namespace apollo + +#endif // MODULES_PLANNING_TRAJECTORY_STITCHER_TRAJECTORY_STITCHER_H_ diff --git a/modules/prediction/BUILD b/modules/prediction/BUILD index 28fa6b08b53..57961b47b68 100644 --- a/modules/prediction/BUILD +++ b/modules/prediction/BUILD @@ -10,20 +10,58 @@ cc_library( "//modules/common", "//modules/common:apollo_app", "//modules/common:log", + "//modules/common/adapters:adapter_gflags", "//modules/common/adapters:adapter_manager", + "//modules/common/adapters/proto:adapter_config_proto", + "//modules/common/util", + "//modules/localization/proto:localization_proto", "//modules/perception/proto:perception_proto", - "//modules/prediction/common:prediction_common", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/container:container_manager", + "//modules/prediction/evaluator:evaluator_manager", + "//modules/prediction/predictor:predictor_manager", + "//modules/prediction/proto:prediction_conf_proto", "//modules/prediction/proto:prediction_proto", ], ) +cc_test( + name = "prediction_test", + size = "small", + srcs = ["prediction_test.cc"], + data = [ + "//modules/prediction:prediction_conf", + "//modules/prediction:prediction_data", + "//modules/prediction:prediction_testdata", + ], + deps = [ + "//modules/prediction:prediction_lib", + "@gtest//:main", + ], +) + cc_binary( name = "prediction", srcs = ["main.cc"], deps = [ - ":prediction_lib", "//external:gflags", + "//modules/prediction:prediction_lib", ], ) +filegroup( + name = "prediction_data", + srcs = glob(["data/**"]), +) + +filegroup( + name = "prediction_conf", + srcs = glob(["conf/**"]), +) + +filegroup( + name = "prediction_testdata", + srcs = glob(["testdata/**"]), +) + cpplint() diff --git a/modules/prediction/README.md b/modules/prediction/README.md index 5e01d6d344f..4cd3156ba0e 100644 --- a/modules/prediction/README.md +++ b/modules/prediction/README.md @@ -7,7 +7,30 @@ for the obstacles. ## Input - * Obstacles from the perception module (future work) + * Obstacles from perception module + * Localizaton from localization module ## Output - * Obstacles additionally with predicted trajectories (future work) + * Obstacles additionally with predicted trajectories + +## Functionalities + * Container + + Container stores input data from subscribed channels. Current supported inputs + are **_perception obstacles_** and **_vehicle localization_**. + + * Evaluator + + Evaluator predicts path and speed separately for any given obstacles. An evaluator + evaluates a path by outputing a probability for it (lane sequence) using the given + model stored in _prediction/data/_. + + * Predictor + + Predictor generates predicted trajectories for obstacles. Currently supported predictor + includes: + + * Lane sequence: obstacle moves following the lanes + * Free movement: obstacle moves freely + * Regional movement: obstacle moves in a possible region + diff --git a/modules/prediction/common/BUILD b/modules/prediction/common/BUILD index 48f513e9679..6e8ffcb20e8 100644 --- a/modules/prediction/common/BUILD +++ b/modules/prediction/common/BUILD @@ -3,7 +3,7 @@ load("//tools:cpplint.bzl", "cpplint") package(default_visibility = ["//visibility:public"]) cc_library( - name = "prediction_common", + name = "prediction_gflags", srcs = ["prediction_gflags.cc"], hdrs = ["prediction_gflags.h"], deps = [ @@ -12,4 +12,96 @@ cc_library( ], ) +cc_library( + name = "prediction_util", + srcs = ["prediction_util.cc"], + hdrs = ["prediction_util.h"], + deps = [ + "//modules/common:log", + "//modules/common/proto:pnc_point_proto", + ], +) + +cc_test( + name = "prediction_util_test", + size = "small", + srcs = ["prediction_util_test.cc"], + deps = [ + ":prediction_util", + "@gtest//:main", + ], +) + +cc_library( + name = "prediction_map", + srcs = ["prediction_map.cc"], + hdrs = ["prediction_map.h"], + deps = [ + ":prediction_gflags", + "//modules/common:macro", + "//modules/common/configs:config_gflags", + "//modules/common/math:linear_interpolation", + "//modules/common/math:vec2d", + "//modules/map/hdmap:hdmap_util", + "//modules/map/pnc_map", + "@eigen//:eigen", + ], +) + +cc_test( + name = "prediction_map_test", + size = "small", + srcs = ["prediction_map_test.cc"], + data = [ + "//modules/common/configs:config_gflags", + "//modules/prediction:prediction_data", + "//modules/prediction:prediction_testdata", + ], + deps = [ + ":kml_map_based_test", + ":prediction_gflags", + ":prediction_map", + "@gtest//:main", + ], +) + +cc_library( + name = "road_graph", + srcs = ["road_graph.cc"], + hdrs = ["road_graph.h"], + deps = [ + ":prediction_map", + "//modules/common/status", + "//modules/map/hdmap", + "//modules/prediction/proto:lane_graph_proto", + ], +) + +cc_test( + name = "road_graph_test", + size = "small", + srcs = ["road_graph_test.cc"], + data = [ + "//modules/common/configs:config_gflags", + "//modules/prediction:prediction_data", + "//modules/prediction:prediction_testdata", + ], + deps = [ + ":kml_map_based_test", + ":prediction_gflags", + ":prediction_map", + ":road_graph", + "@gtest//:main", + ], +) + +cc_library( + name = "kml_map_based_test", + hdrs = ["kml_map_based_test.h"], + deps = [ + "//modules/common/configs:config_gflags", + "@gtest//:gtest", + ], +) + cpplint() diff --git a/modules/prediction/common/kml_map_based_test.h b/modules/prediction/common/kml_map_based_test.h new file mode 100644 index 00000000000..8216c44c214 --- /dev/null +++ b/modules/prediction/common/kml_map_based_test.h @@ -0,0 +1,38 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PREDICTION_COMMON_KML_MAP_BASED_TEST_H_ +#define MODULES_PREDICTION_COMMON_KML_MAP_BASED_TEST_H_ + +#include "gtest/gtest.h" + +#include "modules/common/configs/config_gflags.h" + +namespace apollo { +namespace prediction { + +class KMLMapBasedTest : public ::testing::Test { + public: + KMLMapBasedTest() { + FLAGS_map_dir = "modules/prediction/testdata"; + FLAGS_base_map_filename = "kml_map.bin"; + } +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_COMMON_KML_MAP_BASED_TEST_H_ diff --git a/modules/prediction/common/prediction_gflags.cc b/modules/prediction/common/prediction_gflags.cc index bb64d973f8a..8205b26f5cd 100644 --- a/modules/prediction/common/prediction_gflags.cc +++ b/modules/prediction/common/prediction_gflags.cc @@ -14,8 +14,68 @@ * limitations under the License. *****************************************************************************/ +#include + #include "modules/prediction/common/prediction_gflags.h" // System gflags DEFINE_string(prediction_module_name, "prediction", "Default prediciton module name"); +DEFINE_string(prediction_conf_file, + "modules/prediction/conf/prediction_conf.pb.txt", + "Default conf file for prediction"); + +DEFINE_string(adapter_config_filename, "modules/prediction/conf/adapter.conf", + "Default conf file for prediction"); + +DEFINE_double(prediction_duration, 3.0, "Prediction duration (in seconds)"); +DEFINE_double(prediction_freq, 0.1, "Prediction frequency (in seconds"); +DEFINE_double(double_precision, 1e-6, "precision of double"); +DEFINE_double(min_prediction_length, 5.0, + "Minimal length of prediction trajectory"); + +// Map +DEFINE_double(search_radius, 3.0, "Search radius for a candidate lane"); + +// Obstacle features +DEFINE_bool(enable_kf_tracking, false, "Use measurements with KF tracking"); +DEFINE_double(max_acc, 4.0, "Upper bound of acceleration"); +DEFINE_double(min_acc, -4.0, "Lower bound of deceleration"); +DEFINE_double(max_speed, 15.0, "Max speed"); +DEFINE_double(q_var, 0.01, "Processing noise covariance"); +DEFINE_double(r_var, 0.25, "Measurement noise covariance"); +DEFINE_double(p_var, 0.1, "Error covariance"); +DEFINE_double(go_approach_rate, 0.995, + "The rate to approach to the reference line of going straight"); +DEFINE_double(cutin_approach_rate, 0.9, + "The rate to approach to the reference line of lane change"); +DEFINE_int32(still_obstacle_history_length, 10, + "Min # historical frames for still obstacles"); +DEFINE_double(still_obstacle_speed_threshold, 1.0, + "Speed threshold for still obstacles"); +DEFINE_double(still_obstacle_position_std, 1.0, + "Position standard deviation for still obstacles"); +DEFINE_double(max_history_time, 7.0, "Obstacles' maximal historical time."); +DEFINE_double(target_lane_gap, 2.0, "gap between two lane points."); +DEFINE_double(max_lane_angle_diff, M_PI / 2.0, + "Max angle difference for a candiate lane"); +DEFINE_bool(enable_pedestrian_acc, false, "Enable calculating speed by acc"); +DEFINE_double(coeff_mul_sigma, 2.0, "coefficient multiply standard deviation"); +DEFINE_double(pedestrian_min_speed, 0.1, "min speed for still pedestrian"); +DEFINE_double(pedestrian_max_speed, 10.0, "speed upper bound for pedestrian"); +DEFINE_double(pedestrian_max_acc, 2.0, "maximum pedestrian acceleration"); +DEFINE_double(prediction_pedestrian_total_time, 10.0, + "Total prediction time for pedestrians"); +DEFINE_int32(num_trajectory_still_pedestrian, 6, + "number of trajectories for static pedestrian"); +DEFINE_double(still_speed, 0.01, "speed considered to be still"); +DEFINE_string(vehicle_model_file, + "modules/prediction/data/mlp_vehicle_model.bin", + "Vehicle model file"); +DEFINE_int32(max_num_obstacles_stored, 100, + "maximal number of obstacles stored in obstacles container."); + +// Obstacle trajectory +DEFINE_double(lane_sequence_threshold, 0.5, + "Threshold for trimming lane sequence trajectories"); +DEFINE_double(lane_change_dist, 10.0, "Lane change distance with ADC"); diff --git a/modules/prediction/common/prediction_gflags.h b/modules/prediction/common/prediction_gflags.h index 047b00c445b..21268b7ac6e 100644 --- a/modules/prediction/common/prediction_gflags.h +++ b/modules/prediction/common/prediction_gflags.h @@ -21,5 +21,46 @@ // System gflags DECLARE_string(prediction_module_name); +DECLARE_string(prediction_conf_file); +DECLARE_string(adapter_config_filename); + +DECLARE_double(prediction_duration); +DECLARE_double(prediction_freq); +DECLARE_double(double_precision); +DECLARE_double(min_prediction_length); + +// Map +DECLARE_double(search_radius); + +// Obstacle features +DECLARE_bool(enable_kf_tracking); +DECLARE_double(max_acc); +DECLARE_double(min_acc); +DECLARE_double(max_speed); +DECLARE_double(q_var); +DECLARE_double(r_var); +DECLARE_double(p_var); +DECLARE_double(go_approach_rate); +DECLARE_double(cutin_approach_rate); +DECLARE_int32(still_obstacle_history_length); +DECLARE_double(still_obstacle_speed_threshold); +DECLARE_double(still_obstacle_position_std); +DECLARE_double(max_history_time); +DECLARE_double(target_lane_gap); +DECLARE_double(max_lane_angle_diff); +DECLARE_bool(enable_pedestrian_acc); +DECLARE_double(coeff_mul_sigma); +DECLARE_double(pedestrian_min_speed); +DECLARE_double(pedestrian_max_speed); +DECLARE_double(pedestrian_max_acc); +DECLARE_double(prediction_pedestrian_total_time); +DECLARE_int32(num_trajectory_still_pedestrian); +DECLARE_double(still_speed); +DECLARE_string(vehicle_model_file); +DECLARE_int32(max_num_obstacles_stored); + +// Obstacle trajectory +DECLARE_double(lane_sequence_threshold); +DECLARE_double(lane_change_dist); #endif // MODULES_PREDICTION_COMMON_PREDICTION_GFLAGS_H_ diff --git a/modules/prediction/common/prediction_map.cc b/modules/prediction/common/prediction_map.cc new file mode 100644 index 00000000000..1467ed32188 --- /dev/null +++ b/modules/prediction/common/prediction_map.cc @@ -0,0 +1,360 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/common/prediction_map.h" + +#include +#include +#include +#include +#include +#include + +#include "modules/map/proto/map_id.pb.h" + +#include "modules/common/configs/config_gflags.h" +#include "modules/common/math/linear_interpolation.h" +#include "modules/common/math/vec2d.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/prediction/common/prediction_gflags.h" + +namespace apollo { +namespace prediction { + +using apollo::hdmap::LaneInfo; +using apollo::hdmap::Id; +using apollo::hdmap::MapPathPoint; +using apollo::hdmap::HDMapUtil; + +PredictionMap::PredictionMap() {} + +Eigen::Vector2d PredictionMap::PositionOnLane( + std::shared_ptr lane_info, const double s) { + common::PointENU point = lane_info->GetSmoothPoint(s); + return {point.x(), point.y()}; +} + +double PredictionMap::HeadingOnLane(std::shared_ptr lane_info, + const double s) { + return lane_info->Heading(s); +} + +double PredictionMap::LaneTotalWidth( + std::shared_ptr lane_info, const double s) { + double left = 0.0; + double right = 0.0; + lane_info->GetWidth(s, &left, &right); + return left + right; +} + +std::shared_ptr PredictionMap::LaneById( + const std::string& str_id) { + return HDMapUtil::BaseMap().GetLaneById(hdmap::MakeMapId(str_id)); +} + +bool PredictionMap::GetProjection(const Eigen::Vector2d& position, + std::shared_ptr lane_info, + double* s, double* l) { + if (lane_info == nullptr) { + return false; + } + const common::math::Vec2d pos(position[0], position[1]); + return lane_info->GetProjection(pos, s, l); +} + +bool PredictionMap::ProjectionFromLane( + std::shared_ptr lane_info, const double s, + MapPathPoint* path_point) { + if (lane_info == nullptr) { + return false; + } + const common::PointENU point = lane_info->GetSmoothPoint(s); + const double heading = HeadingOnLane(lane_info, s); + path_point->set_x(point.x()); + path_point->set_y(point.y()); + path_point->set_heading(heading); + return true; +} + +void PredictionMap::OnLane( + const std::vector>& prev_lanes, + const Eigen::Vector2d& point, const double heading, const double radius, + const bool on_lane, std::vector>* lanes) { + std::vector> candidate_lanes; + + common::PointENU hdmap_point; + hdmap_point.set_x(point[0]); + hdmap_point.set_y(point[1]); + if (HDMapUtil::BaseMap().GetLanesWithHeading(hdmap_point, radius, heading, + M_PI, &candidate_lanes) != 0) { + return; + } + + const common::math::Vec2d vec_point(point[0], point[1]); + for (const auto& candidate_lane : candidate_lanes) { + if (candidate_lane == nullptr) { + continue; + } + if (on_lane && !candidate_lane->IsOnLane(vec_point)) { + continue; + } + if (!IsIdenticalLane(candidate_lane, prev_lanes) && + !IsSuccessorLane(candidate_lane, prev_lanes) && + !IsLeftNeighborLane(candidate_lane, prev_lanes) && + !IsRightNeighborLane(candidate_lane, prev_lanes)) { + continue; + } + double distance = 0.0; + common::PointENU nearest_point = + candidate_lane->GetNearestPoint(vec_point, &distance); + double nearest_point_heading = PathHeading(candidate_lane, nearest_point); + double diff = + std::fabs(common::math::AngleDiff(heading, nearest_point_heading)); + if (diff <= FLAGS_max_lane_angle_diff) { + lanes->push_back(candidate_lane); + } + } +} + +double PredictionMap::PathHeading(std::shared_ptr lane_info, + const common::PointENU& point) { + common::math::Vec2d vec_point = {point.x(), point.y()}; + double s = -1.0; + double l = 0.0; + lane_info->GetProjection(vec_point, &s, &l); + return HeadingOnLane(lane_info, s); +} + +bool PredictionMap::SmoothPointFromLane(const std::string& id, const double s, + const double l, Eigen::Vector2d* point, + double* heading) { + if (point == nullptr || heading == nullptr) { + return false; + } + std::shared_ptr lane = LaneById(id); + common::PointENU hdmap_point = lane->GetSmoothPoint(s); + *heading = PathHeading(lane, hdmap_point); + point->operator[](0) = hdmap_point.x() - std::sin(*heading) * l; + point->operator[](1) = hdmap_point.y() + std::cos(*heading) * l; + return true; +} + +void PredictionMap::NearbyLanesByCurrentLanes( + const Eigen::Vector2d& point, const double heading, const double radius, + const std::vector>& lanes, + std::vector>* nearby_lanes) { + if (lanes.size() == 0) { + std::vector> prev_lanes(0); + OnLane(prev_lanes, point, heading, radius, false, nearby_lanes); + } else { + std::unordered_set lane_ids; + for (auto& lane_ptr : lanes) { + if (lane_ptr == nullptr) { + continue; + } + for (auto& lane_id : lane_ptr->lane().left_neighbor_forward_lane_id()) { + const std::string& id = lane_id.id(); + if (lane_ids.find(id) != lane_ids.end()) { + continue; + } + std::shared_ptr nearby_lane = LaneById(id); + double s = -1.0; + double l = 0.0; + GetProjection(point, nearby_lane, &s, &l); + if (common::math::DoubleCompare(s, 0.0) >= 0 && + common::math::DoubleCompare(std::fabs(l), radius) > 0) { + continue; + } + lane_ids.insert(id); + nearby_lanes->push_back(nearby_lane); + } + for (auto& lane_id : lane_ptr->lane().right_neighbor_forward_lane_id()) { + const std::string& id = lane_id.id(); + if (lane_ids.find(id) != lane_ids.end()) { + continue; + } + std::shared_ptr nearby_lane = LaneById(id); + double s = -1.0; + double l = 0.0; + GetProjection(point, nearby_lane, &s, &l); + if (common::math::DoubleCompare(s, 0.0) >= 0 && + common::math::DoubleCompare(std::fabs(l), radius) > 0) { + continue; + } + lane_ids.insert(id); + nearby_lanes->push_back(nearby_lane); + } + } + } +} + +bool PredictionMap::IsLeftNeighborLane( + std::shared_ptr left_lane, + std::shared_ptr curr_lane) { + if (curr_lane == nullptr) { + return true; + } + if (left_lane == nullptr) { + return false; + } + for (const auto& left_lane_id : + curr_lane->lane().left_neighbor_forward_lane_id()) { + if (left_lane->id().id() == left_lane_id.id()) { + return true; + } + } + return false; +} + +bool PredictionMap::IsLeftNeighborLane( + std::shared_ptr left_lane, + const std::vector>& lanes) { + if (lanes.size() == 0) { + return true; + } + for (auto& lane : lanes) { + if (IsLeftNeighborLane(left_lane, lane)) { + return true; + } + } + return false; +} + +bool PredictionMap::IsRightNeighborLane( + std::shared_ptr right_lane, + std::shared_ptr curr_lane) { + if (curr_lane == nullptr) { + return true; + } + if (right_lane == nullptr) { + return false; + } + for (auto& right_lane_id : + curr_lane->lane().right_neighbor_forward_lane_id()) { + if (right_lane->id().id() == right_lane_id.id()) { + return true; + } + } + return false; +} + +bool PredictionMap::IsRightNeighborLane( + std::shared_ptr right_lane, + const std::vector>& lanes) { + if (lanes.size() == 0) { + return true; + } + for (const auto& lane : lanes) { + if (IsRightNeighborLane(right_lane, lane)) { + return true; + } + } + return false; +} + +bool PredictionMap::IsSuccessorLane(std::shared_ptr succ_lane, + std::shared_ptr curr_lane) { + if (curr_lane == nullptr) { + return true; + } + if (succ_lane == nullptr) { + return false; + } + for (auto& successor_lane_id : curr_lane->lane().successor_id()) { + if (succ_lane->id().id() == successor_lane_id.id()) { + return true; + } + } + return false; +} + +bool PredictionMap::IsSuccessorLane( + std::shared_ptr succ_lane, + const std::vector>& lanes) { + if (lanes.size() == 0) { + return true; + } + for (auto& lane : lanes) { + if (IsSuccessorLane(succ_lane, lane)) { + return true; + } + } + return false; +} + +bool PredictionMap::IsPredecessorLane( + std::shared_ptr pred_lane, + std::shared_ptr curr_lane) { + if (curr_lane == nullptr) { + return true; + } + if (pred_lane == nullptr) { + return false; + } + for (auto& predecessor_lane_id : curr_lane->lane().predecessor_id()) { + if (pred_lane->id().id() == predecessor_lane_id.id()) { + return true; + } + } + return false; +} + +bool PredictionMap::IsPredecessorLane( + std::shared_ptr pred_lane, + const std::vector>& lanes) { + if (lanes.size() == 0) { + return true; + } + for (auto& lane : lanes) { + if (IsPredecessorLane(pred_lane, lane)) { + return true; + } + } + return false; +} + +bool PredictionMap::IsIdenticalLane(std::shared_ptr other_lane, + std::shared_ptr curr_lane) { + if (curr_lane == nullptr || other_lane == nullptr) { + return true; + } + return other_lane->id().id() == curr_lane->id().id(); +} + +bool PredictionMap::IsIdenticalLane( + std::shared_ptr other_lane, + const std::vector>& lanes) { + if (lanes.size() == 0) { + return true; + } + for (auto& lane : lanes) { + if (IsIdenticalLane(other_lane, lane)) { + return true; + } + } + return false; +} + +int PredictionMap::LaneTurnType(const std::string& lane_id) { + std::shared_ptr lane = LaneById(lane_id); + if (lane != nullptr) { + return static_cast(lane->lane().turn()); + } + return 1; +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/common/prediction_map.h b/modules/prediction/common/prediction_map.h new file mode 100644 index 00000000000..a281f0fa241 --- /dev/null +++ b/modules/prediction/common/prediction_map.h @@ -0,0 +1,253 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PREDICTION_COMMON_PREDICTION_MAP_H_ +#define MODULES_PREDICTION_COMMON_PREDICTION_MAP_H_ + +#include +#include +#include + +#include "Eigen/Dense" + +#include "modules/common/macro.h" +#include "modules/map/hdmap/hdmap_common.h" +#include "modules/map/hdmap/hdmap_impl.h" +#include "modules/map/pnc_map/path.h" + +namespace apollo { +namespace prediction { + +class PredictionMap { + public: + /** + * @brief Get the position of a point on a specific distance along a lane. + * @param lane_info The lane to get a position. + * @param s The distance along the lane. + * @return The position with coordinates. + */ + static Eigen::Vector2d PositionOnLane( + std::shared_ptr lane_info, const double s); + + /** + * @brief Get the heading of a point on a specific distance along a lane. + * @param lane_info The lane to get a heading. + * @param s The distance along the lane. + * @return The heading of the point. + */ + static double HeadingOnLane(std::shared_ptr lane_info, + const double s); + + /** + * @brief Get the width on a specified distance on a lane. + * @param lane_info The lane to get the width. + * @param s The distance along the lane. + * @return The width on the distance s. + */ + static double LaneTotalWidth(std::shared_ptr lane_info, + const double s); + + /** + * @brief Get a shared pointer to a lane by lane ID. + * @param id The ID of the target lane ID in the form of string. + * @return A shared pointer to the lane with the input lane ID. + */ + static std::shared_ptr LaneById(const std::string& id); + + /** + * @brief Get the frenet coordinates (s, l) on a lane by a position. + * @param position The position to get its frenet coordinates. + * @param lane_info The lane on which to get the frenet coordinates. + * @param s The longitudinal coordinate of the position. + * @param l The lateral coordinate of the position. + */ + static bool GetProjection(const Eigen::Vector2d& position, + std::shared_ptr lane_info, + double* s, double* l); + + /** + * @brief Get the nearest path point to a longitudinal coordinate on a lane. + * @param lane_info The lane on which to get the projected point. + * @param s The longitudinal coordinate. + * @param path_point The nearest path point. + * @param If the process is successful. + */ + static bool ProjectionFromLane( + std::shared_ptr lane_info, const double s, + hdmap::MapPathPoint* path_point); + + /** + * @brief Get the connected lanes from some specified lanes. + * @param prev_lanes The lanes from which to search their connected lanes. + * @param heading The specified heading. + * @param radius The searching radius. + * @param on_lane If the position is on lane. + * @param lanes The searched lanes. + */ + void OnLane( + const std::vector>& prev_lanes, + const Eigen::Vector2d& point, const double heading, const double radius, + const bool on_lane, + std::vector>* lanes); + + /** + * @brief Get the lane heading on a point. + * @param lane_info The target lane. + * @param point The point to get the heading. + * @return The heading of the input point on the input lane. + */ + static double PathHeading(std::shared_ptr lane_info, + const common::PointENU& point); + + /** + * @brief Get the smooth point on a lane by a longitudinal coordinate. + * @param id The lane ID. + * @param s The longitudinal coordinate along the lane. + * @param l The lateral coordinate of the position. + * @param point The point corresponding to the s,l-value coordinate. + * @param heading The lane heading on the point. + * @return If the process is successful. + */ + bool SmoothPointFromLane(const std::string& id, const double s, + const double l, Eigen::Vector2d* point, + double* heading); + + /** + * @brief Get nearby lanes by a position and current lanes. + * @param point The position to search its nearby lanes. + * @param heading The heading. + * @param radius The searching radius. + * @param lanes The current lanes. + * @param nearby_lanes The searched nearby lanes. + */ + void NearbyLanesByCurrentLanes( + const Eigen::Vector2d& point, const double heading, const double radius, + const std::vector>& lanes, + std::vector>* nearby_lanes); + + /** + * @brief Check if a lane is a left neighbor of another lane. + * @param left_lane The lane to check if it is a left neighbor. + * @param curr_lane The current lane. + * @return If left_lane is a left neighbor of curr_lane. + */ + static bool IsLeftNeighborLane( + std::shared_ptr left_lane, + std::shared_ptr curr_lane); + + /** + * @brief Check if a lane is a left neighbor of one of some lanes. + * @param left_lane The lane to check if it is a left neighbor. + * @param lanes The current lanes. + * @return If left_lane is a left neighbor of one of lanes. + */ + static bool IsLeftNeighborLane( + std::shared_ptr left_lane, + const std::vector>& lanes); + + /** + * @brief Check if a lane is a right neighbor of another lane. + * @param right_lane The lane to check if it is a right neighbor. + * @param curr_lane The current lane. + * @return If right_lane is a right neighbor of curr_lane. + */ + static bool IsRightNeighborLane( + std::shared_ptr right_lane, + std::shared_ptr curr_lane); + + /** + * @brief Check if a lane is a right neighbor of one of some lanes. + * @param right_lane The lane to check if it is a right neighbor. + * @param lanes The current lanes. + * @return If right_lane is a right neighbor of one of lanes. + */ + static bool IsRightNeighborLane( + std::shared_ptr right_lane, + const std::vector>& lanes); + + /** + * @brief Check if a lane is a successor of another lane. + * @param succ_lane The lane to check if it is a successor. + * @param curr_lane The current lane. + * @return If succ_lane is a successor of curr_lane. + */ + static bool IsSuccessorLane(std::shared_ptr succ_lane, + std::shared_ptr curr_lane); + + /** + * @brief Check if a lane is a successor of one of some lanes. + * @param succ_lane The lane to check if it is a successor. + * @param lanes The current lanes. + * @return If succ_lane is a successor of one of lanes. + */ + static bool IsSuccessorLane( + std::shared_ptr succ_lane, + const std::vector>& lanes); + + /** + * @brief Check if a lane is a predecessor of another lane. + * @param pred_lane The lane to check if it is a predecessor. + * @param curr_lane The current lane. + * @return If pred_lane is a predecessor of curr_lane. + */ + static bool IsPredecessorLane( + std::shared_ptr pred_lane, + std::shared_ptr curr_lane); + + /** + * @brief Check if a lane is a predecessor of one of some lanes. + * @param pred_lane The lane to check if it is a predecessor. + * @param lanes The current lanes. + * @return If pred_lane is a predecessor of one of lanes. + */ + static bool IsPredecessorLane( + std::shared_ptr pred_lane, + const std::vector>& lanes); + + /** + * @brief Check if two lanes are identical. + * @param other_lane The other lane. + * @param curr_lane The current lane. + * @return If other_lane is identical to curr_lane. + */ + static bool IsIdenticalLane(std::shared_ptr other_lane, + std::shared_ptr curr_lane); + + /** + * @brief Check if a lane is identical to one of some lanes. + * @param other_lane The other lane. + * @param lanes The lanes. + * @return If other_lane is identical to one of lanes. + */ + static bool IsIdenticalLane( + std::shared_ptr other_lane, + const std::vector>& lanes); + + /** + * @brief Get lane turn type. + * @param lane_id The lane ID. + * @return Integer corresponding to the lane turn type. + */ + static int LaneTurnType(const std::string& lane_id); + + private: + DECLARE_SINGLETON(PredictionMap); +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_COMMON_PREDICTION_MAP_H_ diff --git a/modules/prediction/common/prediction_map_test.cc b/modules/prediction/common/prediction_map_test.cc new file mode 100644 index 00000000000..babb8f8a58f --- /dev/null +++ b/modules/prediction/common/prediction_map_test.cc @@ -0,0 +1,244 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/common/prediction_map.h" + +#include "gtest/gtest.h" + +#include "modules/prediction/common/kml_map_based_test.h" + +namespace apollo { +namespace prediction { + +using apollo::hdmap::Id; +using apollo::hdmap::LaneInfo; +using apollo::hdmap::MapPathPoint; + +class PredictionMapTest : public KMLMapBasedTest { + public: + void SetUp() override { map_ = PredictionMap::instance(); } + + protected: + PredictionMap *map_; +}; + +TEST_F(PredictionMapTest, get_lane_info) { + std::shared_ptr lane_info = map_->LaneById("l20"); + EXPECT_TRUE(lane_info != nullptr); + EXPECT_EQ("l20", lane_info->id().id()); + + lane_info = map_->LaneById("l500"); + EXPECT_TRUE(lane_info == nullptr); +} + +TEST_F(PredictionMapTest, get_position_on_lane) { + std::shared_ptr lane_info = map_->LaneById("l20"); + + // on lane + Eigen::Vector2d position_on_lane = map_->PositionOnLane(lane_info, 10.0); + EXPECT_DOUBLE_EQ(124.85930930657942, position_on_lane(0)); + EXPECT_DOUBLE_EQ(348.52732962417451, position_on_lane(1)); + + // beyond end of lane + Eigen::Vector2d position_off_lane = map_->PositionOnLane(lane_info, 1000.0); + EXPECT_DOUBLE_EQ(392.71861332684404, position_off_lane(0)); + EXPECT_DOUBLE_EQ(286.16205764480401, position_off_lane(1)); +} + +TEST_F(PredictionMapTest, heading_on_lane) { + std::shared_ptr lane_info = map_->LaneById("l20"); + + // on lane + EXPECT_DOUBLE_EQ(-0.066794953844859783, map_->HeadingOnLane(lane_info, 10.0)); +} + +TEST_F(PredictionMapTest, get_lane_width) { + std::shared_ptr lane_info = map_->LaneById("l20"); + + // on lane + EXPECT_DOUBLE_EQ(2.9895597224833121, map_->LaneTotalWidth(lane_info, 10.0)); + + // beyond end of lane + EXPECT_DOUBLE_EQ(3.1943980708125523, map_->LaneTotalWidth(lane_info, 1000.0)); + EXPECT_DOUBLE_EQ(3.1943980708125523, map_->LaneTotalWidth(lane_info, 1000.0)); +} + +TEST_F(PredictionMapTest, get_projection) { + std::shared_ptr lane_info = map_->LaneById("l20"); + + // on lane + Eigen::Vector2d position_on_lane(124.85931, 347.52733); + double s = 0.0; + double l = 0.0; + map_->GetProjection(position_on_lane, lane_info, &s, &l); + EXPECT_DOUBLE_EQ(10.061275933723756, s); + EXPECT_DOUBLE_EQ(-0.9981204878650296, l); + + // off lane + Eigen::Vector2d position_off_lane(124.85931, 357.52733); + map_->GetProjection(position_off_lane, lane_info, &s, &l); + EXPECT_DOUBLE_EQ(9.4485232873738045, s); + EXPECT_DOUBLE_EQ(8.9830885668733345, l); +} + +TEST_F(PredictionMapTest, get_map_pathpoint) { + std::shared_ptr lane_info = map_->LaneById("l20"); + double s = 10.0; + + // on lane + MapPathPoint point; + EXPECT_TRUE(map_->ProjectionFromLane(lane_info, s, &point)); + EXPECT_DOUBLE_EQ(124.85930930657942, point.x()); + EXPECT_DOUBLE_EQ(348.52732962417451, point.y()); + EXPECT_DOUBLE_EQ(-0.066794953844859783, point.heading()); + + // non-existent lane + lane_info.reset(); + s = 10.0; + EXPECT_FALSE(map_->ProjectionFromLane(lane_info, s, &point)); +} + +TEST_F(PredictionMapTest, on_lane) { + std::vector> prev_lanes(0); + Eigen::Vector2d point(124.85931, 347.52733); + double heading = 0.0; + double radius = 3.0; + + // on lane without previous lanes + std::vector> curr_lanes(0); + map_->OnLane(prev_lanes, point, heading, radius, true, &curr_lanes); + EXPECT_EQ(1, curr_lanes.size()); + EXPECT_EQ("l20", curr_lanes[0]->id().id()); + + // on lane with previous lanes + prev_lanes.emplace_back(map_->LaneById("l10")); + curr_lanes.clear(); + map_->OnLane(prev_lanes, point, heading, radius, true, &curr_lanes); + EXPECT_EQ(0, curr_lanes.size()); + + // off lane without previous lanes + prev_lanes.clear(); + point(0) = 124.85931; + point(1) = 357.52733; + curr_lanes.clear(); + map_->OnLane(prev_lanes, point, heading, radius, true, &curr_lanes); + EXPECT_EQ(0, curr_lanes.size()); +} + +TEST_F(PredictionMapTest, get_path_heading) { + std::shared_ptr lane_info = map_->LaneById("l20"); + common::PointENU point; + point.set_x(124.85931); + point.set_y(347.52733); + EXPECT_DOUBLE_EQ(-0.066973788088279029, map_->PathHeading(lane_info, point)); +} + +TEST_F(PredictionMapTest, get_smooth_point_from_lane) { + const std::string id = "l20"; + double s = 10.0; + double l = 0.0; + double heading = M_PI; + + Eigen::Vector2d point; + EXPECT_TRUE(map_->SmoothPointFromLane(id, s, l, &point, &heading)); + EXPECT_DOUBLE_EQ(124.85930930657942, point.x()); + EXPECT_DOUBLE_EQ(348.52732962417451, point.y()); + EXPECT_DOUBLE_EQ(-0.066794953844859783, heading); +} + +TEST_F(PredictionMapTest, get_nearby_lanes_by_current_lanes) { + std::vector> curr_lanes(0); + curr_lanes.emplace_back(map_->LaneById("l20")); + std::vector> nearby_lanes(0); + + // large radius + Eigen::Vector2d point(124.85931, 348.52733); + double radius = 6.0; + double theta = -0.061427808505166936; + map_->NearbyLanesByCurrentLanes(point, theta, radius, curr_lanes, + &nearby_lanes); + EXPECT_EQ(1, nearby_lanes.size()); + EXPECT_EQ("l21", nearby_lanes[0]->id().id()); + + // small radius + nearby_lanes.clear(); + radius = 0.5; + map_->NearbyLanesByCurrentLanes(point, theta, radius, curr_lanes, + &nearby_lanes); + EXPECT_EQ(0, nearby_lanes.size()); + + // without current lanes + curr_lanes.clear(); + nearby_lanes.clear(); + radius = 5.0; + map_->NearbyLanesByCurrentLanes(point, theta, radius, curr_lanes, + &nearby_lanes); + EXPECT_EQ(2, nearby_lanes.size()); + EXPECT_EQ("l21", nearby_lanes[0]->id().id()); + EXPECT_EQ("l20", nearby_lanes[1]->id().id()); +} + +TEST_F(PredictionMapTest, neighbor_lane_detection) { + std::vector> curr_lanes(0); + + // empty current lanes + EXPECT_TRUE(map_->IsLeftNeighborLane(map_->LaneById("l20"), curr_lanes)); + EXPECT_TRUE(map_->IsRightNeighborLane(map_->LaneById("l20"), curr_lanes)); + EXPECT_TRUE(map_->IsSuccessorLane(map_->LaneById("l20"), curr_lanes)); + EXPECT_TRUE(map_->IsPredecessorLane(map_->LaneById("l20"), curr_lanes)); + EXPECT_TRUE(map_->IsIdenticalLane(map_->LaneById("l20"), curr_lanes)); + + // given current lanes + std::shared_ptr curr_lane = map_->LaneById("l21"); + curr_lanes.emplace_back(curr_lane); + EXPECT_TRUE(map_->IsLeftNeighborLane(map_->LaneById("l22"), curr_lanes)); + EXPECT_FALSE(map_->IsRightNeighborLane(map_->LaneById("l22"), curr_lanes)); + EXPECT_FALSE(map_->IsSuccessorLane(map_->LaneById("l22"), curr_lanes)); + EXPECT_FALSE(map_->IsPredecessorLane(map_->LaneById("l22"), curr_lanes)); + EXPECT_FALSE(map_->IsIdenticalLane(map_->LaneById("l22"), curr_lanes)); + + EXPECT_FALSE(map_->IsLeftNeighborLane(map_->LaneById("l20"), curr_lanes)); + EXPECT_TRUE(map_->IsRightNeighborLane(map_->LaneById("l20"), curr_lanes)); + EXPECT_FALSE(map_->IsSuccessorLane(map_->LaneById("l20"), curr_lanes)); + EXPECT_FALSE(map_->IsPredecessorLane(map_->LaneById("l20"), curr_lanes)); + EXPECT_FALSE(map_->IsIdenticalLane(map_->LaneById("l20"), curr_lanes)); + + EXPECT_FALSE(map_->IsLeftNeighborLane(map_->LaneById("l18"), curr_lanes)); + EXPECT_FALSE(map_->IsRightNeighborLane(map_->LaneById("l18"), curr_lanes)); + EXPECT_FALSE(map_->IsSuccessorLane(map_->LaneById("l18"), curr_lanes)); + EXPECT_TRUE(map_->IsPredecessorLane(map_->LaneById("l18"), curr_lanes)); + EXPECT_FALSE(map_->IsIdenticalLane(map_->LaneById("l18"), curr_lanes)); + + EXPECT_FALSE(map_->IsLeftNeighborLane(map_->LaneById("l99"), curr_lanes)); + EXPECT_FALSE(map_->IsRightNeighborLane(map_->LaneById("l99"), curr_lanes)); + EXPECT_TRUE(map_->IsSuccessorLane(map_->LaneById("l99"), curr_lanes)); + EXPECT_FALSE(map_->IsPredecessorLane(map_->LaneById("l99"), curr_lanes)); + EXPECT_FALSE(map_->IsIdenticalLane(map_->LaneById("l99"), curr_lanes)); +} + +TEST_F(PredictionMapTest, lane_turn_type) { + // Valid lane + EXPECT_EQ(1, map_->LaneTurnType("l20")); + + // Invalid lane + EXPECT_FALSE(map_->LaneById("l500")); + EXPECT_EQ(1, map_->LaneTurnType("l500")); + + EXPECT_EQ(3, map_->LaneTurnType("l5")); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/common/prediction_util.cc b/modules/prediction/common/prediction_util.cc new file mode 100644 index 00000000000..0c9cf8467e8 --- /dev/null +++ b/modules/prediction/common/prediction_util.cc @@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/common/prediction_util.h" + +#include +#include + +#include "modules/common/log.h" + +namespace apollo { +namespace prediction { +namespace util { + +using apollo::common::TrajectoryPoint; + +double Normalize(const double value, const double mean, const double std) { + constexpr double eps = 1e-10; + return (value - mean) / (std + eps); +} + +double Sigmoid(const double value) { return 1 / (1 + std::exp(-1.0 * value)); } + +double Relu(const double value) { return (value > 0.0) ? value : 0.0; } + +int SolveQuadraticEquation(const std::vector& coefficients, + std::pair* roots) { + if (coefficients.size() != 3) { + return -1; + } + const double a = coefficients[0]; + const double b = coefficients[1]; + const double c = coefficients[2]; + if (std::fabs(a) <= std::numeric_limits::epsilon()) { + return -1; + } + + double delta = b * b - 4.0 * a * c; + if (delta < 0.0) { + return -1; + } + + roots->first = (0.0 - b + std::sqrt(delta)) / (2.0 * a); + roots->second = (0.0 - b - std::sqrt(delta)) / (2.0 * a); + return 0; +} + +void TranslatePoint(const double translate_x, const double translate_y, + TrajectoryPoint* point) { + if (point == nullptr || !point->has_path_point()) { + AERROR << "Point is nullptr or has NO path_point."; + } + const double original_x = point->path_point().x(); + const double original_y = point->path_point().y(); + point->mutable_path_point()->set_x(original_x + translate_x); + point->mutable_path_point()->set_y(original_y + translate_y); +} + +} // namespace util +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/common/prediction_util.h b/modules/prediction/common/prediction_util.h new file mode 100644 index 00000000000..f9eb47b83d8 --- /dev/null +++ b/modules/prediction/common/prediction_util.h @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PREDICTION_COMMON_PREDICTION_UTIL_H_ +#define MODULES_PREDICTION_COMMON_PREDICTION_UTIL_H_ + +#include +#include + +#include "modules/common/proto/pnc_point.pb.h" + +namespace apollo { +namespace prediction { +namespace util { +/** + * @brief Normalize the value by specified mean and standard deviation. + * @param value The value to be normalized. + * @param mean The mean used for normalization. + * @param std The standard deviation used for normalization. + * @return The normalized value. + */ +double Normalize(const double value, const double mean, const double std); + +/** + * @brief Sigmoid function used in neural networks as an activation function. + * @param value The input. + * @return The output of sigmoid function. + */ +double Sigmoid(const double value); + +/** + * @brief RELU function used in neural networks as an activation function. + * @param value The input. + * @return The output of RELU function. + */ +double Relu(const double value); + +/** + * @brief Solve quadratic equation. + * @param coefficients The coefficients of quadratic equation. + * @param roots Two roots of the equation if any. + * @return An integer indicating the success of solving equation. + */ +int SolveQuadraticEquation(const std::vector& coefficients, + std::pair* roots); + +/** + * @brief Translate a point. + * @param translate_x The translation along x-axis. + * @param translate_y The translation along y-axis. + * @param point The point to be translated. + */ +void TranslatePoint(const double translate_x, const double translate_y, + apollo::common::TrajectoryPoint* point); + +} // namespace util +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_COMMON_PREDICTION_UTIL_H_ diff --git a/modules/prediction/common/prediction_util_test.cc b/modules/prediction/common/prediction_util_test.cc new file mode 100644 index 00000000000..e1d4fa597a7 --- /dev/null +++ b/modules/prediction/common/prediction_util_test.cc @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/common/prediction_util.h" + +#include "gtest/gtest.h" + +namespace apollo { +namespace prediction { +namespace util { + +using apollo::common::TrajectoryPoint; + +TEST(PredictionUtilTest, normalize) { + double value = 3.0; + double mean = 2.0; + double std_dev = 0.01; + EXPECT_DOUBLE_EQ(Normalize(value, mean, std_dev), 99.999999); +} + +TEST(PredictionUtilTest, relu) { + double value = 2.0; + EXPECT_DOUBLE_EQ(Relu(value), 2.0); + + value = -3.0; + EXPECT_DOUBLE_EQ(Relu(value), 0.0); +} + +TEST(PredictionUtilTest, sigmoid) { + double value = 2.0; + EXPECT_DOUBLE_EQ(Sigmoid(value), 0.88079707797788231); +} + +TEST(PredictionUtilTest, solvable_quadratic_equation) { + std::vector coefficients = {5.0, 6.0, 1.0}; + std::pair roots; + EXPECT_EQ(SolveQuadraticEquation(coefficients, &roots), 0); + EXPECT_DOUBLE_EQ(roots.first, -0.2); + EXPECT_DOUBLE_EQ(roots.second, -1.0); +} + +TEST(PredictionUtilTest, non_solvable_quadratic_equation) { + std::vector coefficients = {5.0, 2.0, 1.0}; + std::pair roots; + EXPECT_EQ(SolveQuadraticEquation(coefficients, &roots), -1); +} + +TEST(PredictionUtilTest, translate_point) { + double x = 1.0; + double y = 2.0; + TrajectoryPoint trajectory_point; + TranslatePoint(x, y, &trajectory_point); + EXPECT_DOUBLE_EQ(trajectory_point.path_point().x(), 1.0); + EXPECT_DOUBLE_EQ(trajectory_point.path_point().y(), 2.0); +} + +} // namespace util +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/common/road_graph.cc b/modules/prediction/common/road_graph.cc new file mode 100644 index 00000000000..6a839318c32 --- /dev/null +++ b/modules/prediction/common/road_graph.cc @@ -0,0 +1,119 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/common/road_graph.h" + +#include +#include + +#include "modules/common/util/string_util.h" +#include "modules/prediction/common/prediction_map.h" + +namespace apollo { +namespace prediction { + +using apollo::hdmap::LaneInfo; +using apollo::hdmap::Id; +using apollo::common::ErrorCode; +using apollo::common::Status; + +RoadGraph::RoadGraph(const double start_s, const double length, + std::shared_ptr lane_info_ptr) + : start_s_(start_s), length_(length), lane_info_ptr_(lane_info_ptr) {} + +Status RoadGraph::BuildLaneGraph(LaneGraph* const lane_graph_ptr) { + if (length_ < 0.0 || lane_info_ptr_ == nullptr) { + const auto error_msg = common::util::StrCat( + "Invalid road graph settings. Road graph length = ", length_); + AERROR << error_msg; + return Status(ErrorCode::PREDICTION_ERROR, error_msg); + } + + if (lane_graph_ptr == nullptr) { + const auto error_msg = "Invalid input lane graph."; + AERROR << error_msg; + return Status(ErrorCode::PREDICTION_ERROR, error_msg); + } + + std::vector lane_segments; + double accumulated_s = 0.0; + ComputeLaneSequence(accumulated_s, start_s_, lane_info_ptr_, &lane_segments, + lane_graph_ptr); + + return Status::OK(); +} + +bool RoadGraph::IsOnLaneGraph(std::shared_ptr lane_info_ptr, + const LaneGraph& lane_graph) { + if (!lane_graph.IsInitialized()) { + return false; + } + + for (const auto& lane_sequence : lane_graph.lane_sequence()) { + for (const auto& lane_segment : lane_sequence.lane_segment()) { + if (lane_segment.has_lane_id() && + lane_segment.lane_id() == lane_info_ptr->id().id()) { + return true; + } + } + } + + return false; +} + +void RoadGraph::ComputeLaneSequence( + const double accumulated_s, const double start_s, + std::shared_ptr lane_info_ptr, + std::vector* const lane_segments, + LaneGraph* const lane_graph_ptr) const { + if (lane_info_ptr == nullptr) { + AERROR << "Invalid lane."; + return; + } + PredictionMap* map = PredictionMap::instance(); + + LaneSegment lane_segment; + lane_segment.set_lane_id(lane_info_ptr->id().id()); + lane_segment.set_start_s(start_s); + lane_segment.set_lane_turn_type(map->LaneTurnType(lane_info_ptr->id().id())); + if (accumulated_s + lane_info_ptr->total_length() - start_s >= length_) { + lane_segment.set_end_s(length_ - accumulated_s + start_s); + } else { + lane_segment.set_end_s(lane_info_ptr->total_length()); + } + + lane_segments->push_back(std::move(lane_segment)); + + if (accumulated_s + lane_info_ptr->total_length() - start_s >= length_ || + lane_info_ptr->lane().successor_id_size() == 0) { + LaneSequence* sequence = lane_graph_ptr->add_lane_sequence(); + *sequence->mutable_lane_segment() = {lane_segments->begin(), + lane_segments->end()}; + sequence->set_label(0); + } else { + const double successor_accumulated_s = + accumulated_s + lane_info_ptr->total_length() - start_s; + for (const auto& successor_lane_id : lane_info_ptr->lane().successor_id()) { + auto successor_lane = map->LaneById(successor_lane_id.id()); + ComputeLaneSequence(successor_accumulated_s, 0.0, successor_lane, + lane_segments, lane_graph_ptr); + } + } + lane_segments->pop_back(); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/common/road_graph.h b/modules/prediction/common/road_graph.h new file mode 100644 index 00000000000..a2a5b671d24 --- /dev/null +++ b/modules/prediction/common/road_graph.h @@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PREDICTION_COMMON_ROAD_GRAPH_H_ +#define MODULES_PREDICTION_COMMON_ROAD_GRAPH_H_ + +#include +#include + +#include "modules/prediction/proto/lane_graph.pb.h" + +#include "modules/common/status/status.h" +#include "modules/map/hdmap/hdmap_common.h" + +namespace apollo { +namespace prediction { + +class RoadGraph { + public: + /** + * @brief Constructor + * @param start_s The starting longitudinal s value. + * @param length The length to build the road graph. + * @param lane_info_ptr The starting lane. + */ + RoadGraph(const double start_s, const double length, + std::shared_ptr lane_info_ptr); + + /** + * @brief Build the lane graph. + * @param The built lane graph. + * @return The status of the road graph building. + */ + common::Status BuildLaneGraph(LaneGraph* const lane_graph); + + /** + * @brief Check if a lane with an s is on the lane graph + * @param Lane ID + * @param Lane s + * @param The pointer to the given lane graph + * @return If the given lane ID and lane s is on the lane graph + */ + bool IsOnLaneGraph(std::shared_ptr lane_info_ptr, + const LaneGraph& lane_graph); + + private: + void ComputeLaneSequence(const double accumulated_s, const double start_s, + std::shared_ptr lane_info_ptr, + std::vector* const lane_segments, + LaneGraph* const lane_graph_ptr) const; + + private: + double start_s_ = 0; + double length_ = -1.0; + std::shared_ptr lane_info_ptr_ = nullptr; +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_COMMON_ROAD_GRAPH_H_ diff --git a/modules/prediction/common/road_graph_test.cc b/modules/prediction/common/road_graph_test.cc new file mode 100644 index 00000000000..0cb5caa7b43 --- /dev/null +++ b/modules/prediction/common/road_graph_test.cc @@ -0,0 +1,141 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/common/road_graph.h" + +#include + +#include "gtest/gtest.h" + +#include "modules/prediction/proto/lane_graph.pb.h" + +#include "modules/common/configs/config_gflags.h" +#include "modules/prediction/common/kml_map_based_test.h" +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/common/prediction_map.h" + +namespace apollo { +namespace prediction { + +class RoadGraphTest : public KMLMapBasedTest { + public: + virtual void SetUp() { map_ = PredictionMap::instance(); } + + protected: + PredictionMap *map_; +}; + +TEST_F(RoadGraphTest, General) { + auto lane = map_->LaneById("l9"); + EXPECT_TRUE(lane != nullptr); + + double start_s = 99.0; + double length = 100.0; + RoadGraph road_graph(start_s, length, lane); + + LaneGraph lane_graph; + EXPECT_TRUE(road_graph.BuildLaneGraph(&lane_graph).ok()); + EXPECT_EQ(1, lane_graph.lane_sequence_size()); + EXPECT_EQ(3, lane_graph.lane_sequence(0).lane_segment_size()); + EXPECT_EQ("l9", lane_graph.lane_sequence(0).lane_segment(0).lane_id()); + EXPECT_EQ("l18", lane_graph.lane_sequence(0).lane_segment(1).lane_id()); + EXPECT_EQ("l21", lane_graph.lane_sequence(0).lane_segment(2).lane_id()); + + EXPECT_TRUE(road_graph.IsOnLaneGraph(map_->LaneById("l9"), lane_graph)); + EXPECT_TRUE(road_graph.IsOnLaneGraph(map_->LaneById("l18"), lane_graph)); + EXPECT_TRUE(road_graph.IsOnLaneGraph(map_->LaneById("l21"), lane_graph)); + EXPECT_FALSE(road_graph.IsOnLaneGraph(map_->LaneById("l30"), lane_graph)); + + for (const auto &lane_sequence : lane_graph.lane_sequence()) { + double total_length = 0.0; + for (const auto &lane_segment : lane_sequence.lane_segment()) { + total_length += (lane_segment.end_s() - lane_segment.start_s()); + } + EXPECT_DOUBLE_EQ(length, total_length); + } +} + +TEST_F(RoadGraphTest, NegativeStartS) { + auto lane = map_->LaneById("l9"); + EXPECT_TRUE(lane != nullptr); + + double start_s = -10.0; + double length = 50.0; + RoadGraph road_graph(start_s, length, lane); + + LaneGraph lane_graph; + EXPECT_TRUE(road_graph.BuildLaneGraph(&lane_graph).ok()); + EXPECT_EQ(1, lane_graph.lane_sequence_size()); + EXPECT_EQ(1, lane_graph.lane_sequence(0).lane_segment_size()); + EXPECT_EQ("l9", lane_graph.lane_sequence(0).lane_segment(0).lane_id()); + + for (const auto &lane_sequence : lane_graph.lane_sequence()) { + double total_length = 0.0; + for (const auto &lane_segment : lane_sequence.lane_segment()) { + total_length += (lane_segment.end_s() - lane_segment.start_s()); + } + EXPECT_DOUBLE_EQ(length, total_length); + } +} + +TEST_F(RoadGraphTest, LengthLongerThanEnd) { + auto lane = map_->LaneById("l22"); + EXPECT_TRUE(lane != nullptr); + + double start_s = 200.0; + double length = 200.0; + RoadGraph road_graph(start_s, length, lane); + + LaneGraph lane_graph; + EXPECT_TRUE(road_graph.BuildLaneGraph(&lane_graph).ok()); + EXPECT_EQ(1, lane_graph.lane_sequence_size()); + EXPECT_EQ(3, lane_graph.lane_sequence(0).lane_segment_size()); + EXPECT_EQ("l22", lane_graph.lane_sequence(0).lane_segment(0).lane_id()); + EXPECT_EQ("l100", lane_graph.lane_sequence(0).lane_segment(1).lane_id()); + EXPECT_EQ("l97", lane_graph.lane_sequence(0).lane_segment(2).lane_id()); + + for (const auto &lane_sequence : lane_graph.lane_sequence()) { + double total_length = 0.0; + for (const auto &lane_segment : lane_sequence.lane_segment()) { + total_length += (lane_segment.end_s() - lane_segment.start_s()); + } + EXPECT_LT(total_length, length); + } +} + +TEST_F(RoadGraphTest, MultipleLaneSequence) { + auto lane = map_->LaneById("l20"); + EXPECT_TRUE(lane != nullptr); + + double start_s = 200.0; + double length = 200.0; + RoadGraph road_graph(start_s, length, lane); + + LaneGraph lane_graph; + EXPECT_TRUE(road_graph.BuildLaneGraph(&lane_graph).ok()); + EXPECT_EQ(2, lane_graph.lane_sequence_size()); + EXPECT_EQ(3, lane_graph.lane_sequence(0).lane_segment_size()); + EXPECT_EQ(3, lane_graph.lane_sequence(1).lane_segment_size()); + EXPECT_EQ("l20", lane_graph.lane_sequence(0).lane_segment(0).lane_id()); + EXPECT_EQ("l31", lane_graph.lane_sequence(0).lane_segment(1).lane_id()); + EXPECT_EQ("l29", lane_graph.lane_sequence(0).lane_segment(2).lane_id()); + EXPECT_EQ("l20", lane_graph.lane_sequence(1).lane_segment(0).lane_id()); + EXPECT_EQ("l98", lane_graph.lane_sequence(1).lane_segment(1).lane_id()); + EXPECT_EQ("l95", lane_graph.lane_sequence(1).lane_segment(2).lane_id()); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/conf/adapter.conf b/modules/prediction/conf/adapter.conf index fbff5d1df79..52b24d6e67d 100644 --- a/modules/prediction/conf/adapter.conf +++ b/modules/prediction/conf/adapter.conf @@ -1,6 +1,11 @@ config { type: PERCEPTION_OBSTACLES mode: RECEIVE_ONLY + message_history_limit: 1 +} +config { + type: LOCALIZATION + mode: RECEIVE_ONLY message_history_limit: 10 } config { diff --git a/modules/prediction/conf/prediction.conf b/modules/prediction/conf/prediction.conf index 551bd2aff26..e2dd1b9fff1 100644 --- a/modules/prediction/conf/prediction.conf +++ b/modules/prediction/conf/prediction.conf @@ -1,3 +1,3 @@ ---alsologtostderr=1 ---v=4 ---adapter_config_path=modules/prediction/conf/adapter.conf +--flagfile=modules/common/data/global_flagfile.txt +--prediction_conf_file=modules/prediction/conf/prediction_conf.pb.txt +--noenable_kf_tracking diff --git a/modules/prediction/conf/prediction_conf.pb.txt b/modules/prediction/conf/prediction_conf.pb.txt new file mode 100644 index 00000000000..b727a9c661b --- /dev/null +++ b/modules/prediction/conf/prediction_conf.pb.txt @@ -0,0 +1,26 @@ +obstacle_conf { + obstacle_type: VEHICLE + obstacle_status: ON_LANE + evaluator_type: MLP_EVALUATOR + predictor_type: LANE_SEQUENCE_PREDICTOR +} +obstacle_conf { + obstacle_type: VEHICLE + obstacle_status: OFF_LANE + predictor_type: FREE_MOVE_PREDICTOR +} +obstacle_conf { + obstacle_type: PEDESTRIAN + predictor_type: REGIONAL_PREDICTOR +} +obstacle_conf { + obstacle_type: UNKNOWN + obstacle_status: ON_LANE + evaluator_type: MLP_EVALUATOR + predictor_type: LANE_SEQUENCE_PREDICTOR +} +obstacle_conf { + obstacle_type: UNKNOWN + obstacle_status: OFF_LANE + predictor_type: FREE_MOVE_PREDICTOR +} \ No newline at end of file diff --git a/modules/prediction/container/BUILD b/modules/prediction/container/BUILD new file mode 100644 index 00000000000..7a400542e75 --- /dev/null +++ b/modules/prediction/container/BUILD @@ -0,0 +1,42 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "container_manager", + srcs = ["container_manager.cc"], + hdrs = ["container_manager.h"], + deps = [ + "//modules/common:log", + "//modules/common:macro", + "//modules/common/adapters/proto:adapter_config_proto", + "//modules/prediction/container/obstacles:obstacles_container", + "//modules/prediction/container/pose:pose_container", + "@glog//:glog", + ], +) + +cc_test( + name = "container_manager_test", + size = "small", + srcs = ["container_manager_test.cc"], + data = [ + "//modules/prediction:prediction_data", + "//modules/prediction:prediction_testdata", + ], + deps = [ + "//modules/common/util", + "//modules/prediction/container:container_manager", + "@gtest//:main", + ], +) + +cc_library( + name = "container", + hdrs = ["container.h"], + deps = [ + "@com_google_protobuf//:protobuf", + ], +) + +cpplint() diff --git a/modules/prediction/container/container.h b/modules/prediction/container/container.h new file mode 100644 index 00000000000..158b40de6cd --- /dev/null +++ b/modules/prediction/container/container.h @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Define the data container base class + */ + +#ifndef MODULES_PREDICTION_CONTAINER_CONTAINER_H_ +#define MODULES_PREDICTION_CONTAINER_CONTAINER_H_ + +#include "google/protobuf/message.h" + +/** + * @namespace apollo::prediction + * @brief apollo::prediction + */ +namespace apollo { +namespace prediction { + +class Container { + public: + /** + * @brief Constructor + */ + Container() = default; + + /** + * @brief Destructor + */ + virtual ~Container() = default; + + /** + * @brief Insert data into the container + * @param Message data in protobuf format + */ + virtual void Insert(const ::google::protobuf::Message& message) = 0; +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_CONTAINER_CONTAINER_H_ diff --git a/modules/prediction/container/container_manager.cc b/modules/prediction/container/container_manager.cc new file mode 100644 index 00000000000..a413c33a76b --- /dev/null +++ b/modules/prediction/container/container_manager.cc @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/container/container_manager.h" + +#include "modules/common/log.h" +#include "modules/prediction/container/obstacles/obstacles_container.h" +#include "modules/prediction/container/pose/pose_container.h" + +namespace apollo { +namespace prediction { + +using apollo::common::adapter::AdapterConfig; +using apollo::common::adapter::AdapterManagerConfig; + +ContainerManager::ContainerManager() {} + +void ContainerManager::Init(const AdapterManagerConfig& config) { + config_.CopyFrom(config); + RegisterContainers(); +} + +void ContainerManager::RegisterContainers() { + for (const auto& adapter_config : config_.config()) { + if (adapter_config.has_type() && + (adapter_config.mode() == AdapterConfig::RECEIVE_ONLY || + adapter_config.mode() == AdapterConfig::DUPLEX)) { + RegisterContainer(adapter_config.type()); + } + } +} + +Container* ContainerManager::GetContainer( + const common::adapter::AdapterConfig::MessageType& type) { + if (containers_.find(type) != containers_.end()) { + return containers_[type].get(); + } else { + return nullptr; + } +} + +std::unique_ptr ContainerManager::CreateContainer( + const common::adapter::AdapterConfig::MessageType& type) { + std::unique_ptr container_ptr(nullptr); + if (type == AdapterConfig::PERCEPTION_OBSTACLES) { + container_ptr.reset(new ObstaclesContainer()); + } else if (type == AdapterConfig::LOCALIZATION) { + container_ptr.reset(new PoseContainer()); + } + return container_ptr; +} + +void ContainerManager::RegisterContainer( + const common::adapter::AdapterConfig::MessageType& type) { + containers_[type] = CreateContainer(type); + AINFO << "Container [" << type << "] is registered."; +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/container/container_manager.h b/modules/prediction/container/container_manager.h new file mode 100644 index 00000000000..c140b8db8a9 --- /dev/null +++ b/modules/prediction/container/container_manager.h @@ -0,0 +1,91 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Use container manager to manage all containers + */ + +#ifndef MODULES_PREDICTION_CONTAINER_CONTAINER_MANAGER_H_ +#define MODULES_PREDICTION_CONTAINER_CONTAINER_MANAGER_H_ + +#include +#include +#include + +#include "modules/common/adapters/proto/adapter_config.pb.h" + +#include "modules/common/macro.h" +#include "modules/prediction/container/container.h" + +/** + * @namespace apollo::prediction + * @brief apollo::prediction + */ +namespace apollo { +namespace prediction { + +class ContainerManager { + public: + /** + * @brief Container manager initialization + * @param Adapter config + */ + void Init(const common::adapter::AdapterManagerConfig &config); + + /** + * @brief Get mutable container + * @param Type of the container + * @return Pointer to the container given the name + */ + Container *GetContainer( + const common::adapter::AdapterConfig::MessageType &type); + + private: + /** + * @breif Register a container + * @param Container type + */ + void RegisterContainer( + const common::adapter::AdapterConfig::MessageType &type); + + /** + * @brief Create a container + * @param Container type + * @return Container pointer + */ + std::unique_ptr CreateContainer( + const common::adapter::AdapterConfig::MessageType &type); + + /** + * @brief Register all containers + */ + void RegisterContainers(); + + private: + std::map> + containers_; + + common::adapter::AdapterManagerConfig config_; + + DECLARE_SINGLETON(ContainerManager) +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_CONTAINER_CONTAINER_MANAGER_H_ diff --git a/modules/prediction/container/container_manager_test.cc b/modules/prediction/container/container_manager_test.cc new file mode 100644 index 00000000000..5d84c45fb89 --- /dev/null +++ b/modules/prediction/container/container_manager_test.cc @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include + +#include "gtest/gtest.h" + +#include "modules/common/util/file.h" +#include "modules/prediction/container/container_manager.h" + +namespace apollo { +namespace prediction { + +using apollo::common::adapter::AdapterConfig; + +class ContainerManagerTest : public ::testing::Test { + public: + virtual void SetUp() { manager_ = ContainerManager::instance(); } + + protected: + ContainerManager *manager_ = nullptr; + common::adapter::AdapterManagerConfig conf_; +}; + +TEST_F(ContainerManagerTest, GetContainer) { + std::string conf_file = "modules/prediction/testdata/adapter_conf.pb.txt"; + bool ret_load_conf = common::util::GetProtoFromFile(conf_file, &conf_); + EXPECT_TRUE(ret_load_conf); + EXPECT_TRUE(conf_.IsInitialized()); + + manager_->Init(conf_); + EXPECT_TRUE(manager_->GetContainer(AdapterConfig::PERCEPTION_OBSTACLES) != + nullptr); + EXPECT_TRUE(manager_->GetContainer(AdapterConfig::LOCALIZATION) != nullptr); + EXPECT_TRUE(manager_->GetContainer(AdapterConfig::CONTROL_COMMAND) == + nullptr); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/container/obstacles/BUILD b/modules/prediction/container/obstacles/BUILD new file mode 100644 index 00000000000..5cc0537be3a --- /dev/null +++ b/modules/prediction/container/obstacles/BUILD @@ -0,0 +1,80 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "obstacles_container", + srcs = ["obstacles_container.cc"], + hdrs = ["obstacles_container.h"], + deps = [ + "//modules/common/math:math_utils", + "//modules/common/util:lru_cache", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/container", + "//modules/prediction/container/obstacles:obstacle", + "//modules/prediction/container/pose:pose_container", + ], +) + +cc_library( + name = "obstacle", + srcs = ["obstacle.cc"], + hdrs = ["obstacle.h"], + deps = [ + "//modules/common:log", + "//modules/common/math:kalman_filter", + "//modules/common/math:math_utils", + "//modules/common/proto:error_code_proto", + "//modules/map/hdmap", + "//modules/perception/proto:perception_proto", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/common:prediction_map", + "//modules/prediction/common:road_graph", + "//modules/prediction/proto:feature_proto", + "@eigen//:eigen", + ], +) + +cc_test( + name = "obstacles_container_test", + size = "small", + srcs = [ + "obstacles_container_test.cc", + ], + data = [ + "//modules/prediction:prediction_data", + "//modules/prediction:prediction_testdata", + ], + deps = [ + "//modules/common/configs:config_gflags", + "//modules/common/util", + "//modules/perception/proto:perception_proto", + "//modules/prediction/common:kml_map_based_test", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/container/obstacles:obstacles_container", + "@gtest//:main", + ], +) + +cc_test( + name = "obstacle_test", + size = "small", + srcs = [ + "obstacle_test.cc", + ], + data = [ + "//modules/prediction:prediction_data", + "//modules/prediction:prediction_testdata", + ], + deps = [ + "//modules/common/configs:config_gflags", + "//modules/common/util", + "//modules/perception/proto:perception_proto", + "//modules/prediction/common:kml_map_based_test", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/container/obstacles:obstacles_container", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/prediction/container/obstacles/obstacle.cc b/modules/prediction/container/obstacles/obstacle.cc new file mode 100644 index 00000000000..ab4a3c27d83 --- /dev/null +++ b/modules/prediction/container/obstacles/obstacle.cc @@ -0,0 +1,1051 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/container/obstacles/obstacle.h" + +#include +#include +#include +#include +#include +#include +#include "Eigen/Dense" + +#include "modules/common/log.h" +#include "modules/common/math/math_utils.h" +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/common/prediction_map.h" +#include "modules/prediction/common/road_graph.h" + +namespace apollo { +namespace prediction { + +using apollo::perception::PerceptionObstacle; +using apollo::common::math::KalmanFilter; +using apollo::common::ErrorCode; +using apollo::common::Point3D; +using apollo::hdmap::LaneInfo; + +std::mutex Obstacle::mutex_; + +namespace { + +double Damp(const double x, const double sigma) { + return 1 / (1 + exp(1 / (std::fabs(x) + sigma))); +} + +} // namespace + +PerceptionObstacle::Type Obstacle::type() const { return type_; } + +int Obstacle::id() const { + std::lock_guard lock(mutex_); + return id_; +} + +double Obstacle::timestamp() const { + std::lock_guard lock(mutex_); + if (feature_history_.size() > 0) { + return feature_history_.front().timestamp(); + } else { + return 0.0; + } +} + +const Feature& Obstacle::feature(size_t i) const { + std::lock_guard lock(mutex_); + CHECK(i < feature_history_.size()); + return feature_history_[i]; +} + +Feature* Obstacle::mutable_feature(size_t i) { + std::lock_guard lock(mutex_); + CHECK(i < feature_history_.size()); + return &feature_history_[i]; +} + +const Feature& Obstacle::latest_feature() const { + std::lock_guard lock(mutex_); + CHECK_GT(feature_history_.size(), 0); + return feature_history_.front(); +} + +Feature* Obstacle::mutable_latest_feature() { + std::lock_guard lock(mutex_); + + CHECK_GT(feature_history_.size(), 0); + return &(feature_history_.front()); +} + +size_t Obstacle::history_size() const { + std::lock_guard lock(mutex_); + return feature_history_.size(); +} + +const KalmanFilter& Obstacle::kf_lane_tracker( + const std::string& lane_id) { + std::lock_guard lock(mutex_); + CHECK(kf_lane_trackers_.find(lane_id) != kf_lane_trackers_.end()); + return kf_lane_trackers_[lane_id]; +} + +const KalmanFilter& Obstacle::kf_motion_tracker() const { + std::lock_guard lock(mutex_); + return kf_motion_tracker_; +} + +const KalmanFilter& Obstacle::kf_pedestrian_tracker() const { + std::lock_guard lock(mutex_); + return kf_pedestrian_tracker_; +} + +bool Obstacle::IsOnLane() { + std::lock_guard lock(mutex_); + if (feature_history_.size() > 0) { + if (feature_history_.front().has_lane() && + feature_history_.front().lane().has_lane_feature()) { + ADEBUG << "Obstacle [" << id_ << "] is on lane."; + return true; + } + } + ADEBUG << "Obstacle [" << id_ << "] is not on lane."; + return false; +} + +void Obstacle::Insert(const PerceptionObstacle& perception_obstacle, + const double timestamp) { + std::lock_guard lock(mutex_); + if (feature_history_.size() > 0 && + common::math::DoubleCompare(timestamp, + feature_history_.front().timestamp()) <= 0) { + AERROR << "Obstacle [" << id_ << "] received an older frame [" << timestamp + << "] than the most recent timestamp [ " + << feature_history_.front().timestamp() << "]."; + return; + } + + Feature feature; + if (SetId(perception_obstacle, &feature) == ErrorCode::PREDICTION_ERROR) { + return; + } + if (SetType(perception_obstacle) == ErrorCode::PREDICTION_ERROR) { + return; + } + SetTimestamp(perception_obstacle, timestamp, &feature); + SetPosition(perception_obstacle, &feature); + SetVelocity(perception_obstacle, &feature); + SetAcceleration(&feature); + SetTheta(perception_obstacle, &feature); + if (!kf_motion_tracker_enabled_) { + InitKFMotionTracker(&feature); + } + UpdateKFMotionTracker(&feature); + SetCurrentLanes(&feature); + SetNearbyLanes(&feature); + SetLaneGraphFeature(&feature); + UpdateKFLaneTrackers(&feature); + if (type_ == PerceptionObstacle::PEDESTRIAN) { + if (!kf_pedestrian_tracker_enabled_) { + InitKFPedestrianTracker(&feature); + } + UpdateKFPedestrianTracker(&feature); + } + InsertFeatureToHistory(&feature); + SetMotionStatus(); + Trim(); +} + +ErrorCode Obstacle::SetId(const PerceptionObstacle& perception_obstacle, + Feature* feature) { + if (!perception_obstacle.has_id()) { + AERROR << "Obstacle has no ID."; + return ErrorCode::PREDICTION_ERROR; + } + + int id = perception_obstacle.id(); + if (id_ < 0) { + id_ = id; + ADEBUG << "Obstacle has id [" << id_ << "]."; + } else { + if (id_ != id) { + AERROR << "Obstacle [" << id_ << "] has a mismatched ID [" << id + << "] from perception obstacle."; + return ErrorCode::PREDICTION_ERROR; + } else { + feature->set_id(id); + } + } + return ErrorCode::OK; +} + +ErrorCode Obstacle::SetType(const PerceptionObstacle& perception_obstacle) { + if (perception_obstacle.has_type()) { + type_ = perception_obstacle.type(); + ADEBUG << "Obstacle [" << id_ << "] has type [" << type_ << "]."; + } else { + AERROR << "Obstacle [" << id_ << "] has no type."; + return ErrorCode::PREDICTION_ERROR; + } + return ErrorCode::OK; +} + +void Obstacle::SetTimestamp(const PerceptionObstacle& perception_obstacle, + const double timestamp, Feature* feature) { + double ts = timestamp; + if (perception_obstacle.has_timestamp() && + perception_obstacle.timestamp() > 0.0) { + ts = perception_obstacle.timestamp(); + } + feature->set_timestamp(ts); + + ADEBUG << "Obstacle [" << id_ << "] has timestamp [" << std::fixed + << std::setprecision(6) << ts << "]."; +} + +void Obstacle::SetPosition(const PerceptionObstacle& perception_obstacle, + Feature* feature) { + double x = 0.0; + double y = 0.0; + double z = 0.0; + + if (perception_obstacle.has_position()) { + if (perception_obstacle.position().has_x()) { + x = perception_obstacle.position().x(); + } + if (perception_obstacle.position().has_y()) { + y = perception_obstacle.position().y(); + } + if (perception_obstacle.position().has_z()) { + z = perception_obstacle.position().z(); + } + } + + feature->mutable_position()->set_x(x); + feature->mutable_position()->set_y(y); + feature->mutable_position()->set_z(z); + + ADEBUG << "Obstacle [" << id_ << "] has position [" << std::fixed + << std::setprecision(6) << x << ", " << std::fixed + << std::setprecision(6) << y << ", " << std::fixed + << std::setprecision(6) << z << "]."; +} + +void Obstacle::SetVelocity(const PerceptionObstacle& perception_obstacle, + Feature* feature) { + double velocity_x = 0.0; + double velocity_y = 0.0; + double velocity_z = 0.0; + + if (perception_obstacle.has_velocity()) { + if (perception_obstacle.velocity().has_x()) { + velocity_x = perception_obstacle.velocity().x(); + } + if (perception_obstacle.velocity().has_y()) { + velocity_y = perception_obstacle.velocity().y(); + } + if (perception_obstacle.velocity().has_z()) { + velocity_z = perception_obstacle.velocity().z(); + } + } + + feature->mutable_velocity()->set_x(velocity_x); + feature->mutable_velocity()->set_y(velocity_y); + feature->mutable_velocity()->set_z(velocity_z); + + double speed = std::hypot(std::hypot(velocity_x, velocity_y), velocity_z); + double velocity_heading = std::atan2(velocity_y, velocity_x); + feature->set_velocity_heading(velocity_heading); + feature->set_speed(speed); + + ADEBUG << "Obstacle [" << id_ << "] has velocity [" << std::fixed + << std::setprecision(6) << velocity_x << ", " << std::fixed + << std::setprecision(6) << velocity_y << ", " << std::fixed + << std::setprecision(6) << velocity_z << "]"; + ADEBUG << "Obstacle [" << id_ << "] has velocity heading [" << std::fixed + << std::setprecision(6) << velocity_heading << "] "; + ADEBUG << "Obstacle [" << id_ << "] has speed [" << std::fixed + << std::setprecision(6) << speed << "]."; +} + +void Obstacle::SetAcceleration(Feature* feature) { + double acc_x = 0.0; + double acc_y = 0.0; + double acc_z = 0.0; + + if (feature_history_.size() > 0) { + double curr_ts = feature->timestamp(); + double prev_ts = feature_history_.front().timestamp(); + + const Point3D& curr_velocity = feature->velocity(); + const Point3D& prev_velocity = feature_history_.front().velocity(); + + if (common::math::DoubleCompare(curr_ts, prev_ts) == 1) { + double damping_x = Damp(curr_velocity.x(), 0.001); + double damping_y = Damp(curr_velocity.y(), 0.001); + double damping_z = Damp(curr_velocity.z(), 0.001); + + acc_x = (curr_velocity.x() - prev_velocity.x()) / (curr_ts - prev_ts); + acc_y = (curr_velocity.y() - prev_velocity.y()) / (curr_ts - prev_ts); + acc_z = (curr_velocity.z() - prev_velocity.z()) / (curr_ts - prev_ts); + + acc_x = + common::math::Clamp(acc_x * damping_x, FLAGS_min_acc, FLAGS_max_acc); + acc_y = + common::math::Clamp(acc_y * damping_y, FLAGS_min_acc, FLAGS_max_acc); + acc_z = + common::math::Clamp(acc_z * damping_z, FLAGS_min_acc, FLAGS_max_acc); + } + } + + feature->mutable_acceleration()->set_x(acc_x); + feature->mutable_acceleration()->set_y(acc_y); + feature->mutable_acceleration()->set_z(acc_z); + double acc = std::hypot(std::hypot(acc_x, acc_y), acc_z); + feature->set_acc(acc); + + ADEBUG << "Obstacle [" << id_ << "] has acceleration [" << std::fixed + << std::setprecision(6) << acc_x << ", " << std::fixed + << std::setprecision(6) << acc_y << ", " << std::fixed + << std::setprecision(6) << acc_z << "]"; + ADEBUG << "Obstacle [" << id_ << "] has acceleration value [" << std::fixed + << std::setprecision(6) << acc << "]."; +} + +void Obstacle::SetTheta(const PerceptionObstacle& perception_obstacle, + Feature* feature) { + double theta = 0.0; + if (perception_obstacle.has_theta()) { + theta = perception_obstacle.theta(); + } + feature->set_theta(theta); + + ADEBUG << "Obstacle [" << id_ << "] has theta [" << std::fixed + << std::setprecision(6) << theta << "]."; +} + +void Obstacle::SetLengthWidthHeight( + const PerceptionObstacle& perception_obstacle, Feature* feature) { + double length = 0.0; + double width = 0.0; + double height = 0.0; + + if (perception_obstacle.has_length()) { + length = perception_obstacle.length(); + } + if (perception_obstacle.has_width()) { + width = perception_obstacle.width(); + } + if (perception_obstacle.has_height()) { + height = perception_obstacle.height(); + } + + feature->set_length(length); + feature->set_width(width); + feature->set_height(height); + + ADEBUG << "Obstacle [" << id_ << "] has dimension [" << std::fixed + << std::setprecision(6) << length << ", " << std::fixed + << std::setprecision(6) << width << ", " << std::fixed + << std::setprecision(6) << height << "]."; +} + +void Obstacle::InitKFMotionTracker(Feature* feature) { + // Set transition matrix F + Eigen::Matrix F; + F.setIdentity(); + kf_motion_tracker_.SetTransitionMatrix(F); + + // Set observation matrix H + Eigen::Matrix H; + H.setZero(); + H(0, 0) = 1.0; + H(1, 1) = 1.0; + kf_motion_tracker_.SetObservationMatrix(H); + + // Set covariance of transition noise matrix Q + Eigen::Matrix Q; + Q.setIdentity(); + Q *= FLAGS_q_var; + kf_motion_tracker_.SetTransitionNoise(Q); + + // Set observation noise matrix R + Eigen::Matrix R; + R.setIdentity(); + R *= FLAGS_r_var; + kf_motion_tracker_.SetObservationNoise(R); + + // Set current state covariance matrix P + Eigen::Matrix P; + P.setIdentity(); + P *= FLAGS_p_var; + + // Set initial state + Eigen::Matrix x; + x(0, 0) = feature->position().x(); + x(1, 0) = feature->position().y(); + x(2, 0) = feature->velocity().x(); + x(3, 0) = feature->velocity().y(); + x(4, 0) = feature->acceleration().x(); + x(5, 0) = feature->acceleration().y(); + + kf_motion_tracker_.SetStateEstimate(x, P); + + kf_motion_tracker_enabled_ = true; +} + +void Obstacle::UpdateKFMotionTracker(Feature* feature) { + double delta_ts = 0.0; + if (feature_history_.size() > 0) { + delta_ts = feature->timestamp() - feature_history_.front().timestamp(); + } + if (delta_ts > FLAGS_double_precision) { + // Set tansition matrix and predict + auto F = kf_motion_tracker_.GetTransitionMatrix(); + F(0, 2) = delta_ts; + F(0, 4) = delta_ts; + F(1, 3) = 0.5 * delta_ts * delta_ts; + F(1, 5) = 0.5 * delta_ts * delta_ts; + F(2, 4) = delta_ts; + F(3, 5) = delta_ts; + kf_motion_tracker_.SetTransitionMatrix(F); + kf_motion_tracker_.Predict(); + + // Set observation and correct + Eigen::Matrix z; + z(0, 0) = feature->position().x(); + z(1, 0) = feature->position().y(); + kf_motion_tracker_.Correct(z); + } + + UpdateMotionBelief(feature); +} + +void Obstacle::UpdateMotionBelief(Feature* feature) { + auto state = kf_motion_tracker_.GetStateEstimate(); + feature->mutable_t_position()->set_x(state(0, 0)); + feature->mutable_t_position()->set_y(state(1, 0)); + feature->mutable_t_position()->set_z(0.0); + feature->mutable_t_velocity()->set_x(state(2, 0)); + feature->mutable_t_velocity()->set_y(state(3, 0)); + feature->mutable_t_velocity()->set_z(0.0); + feature->set_t_velocity_heading(std::atan2(state(3, 0), state(2, 0))); + double acc_x = common::math::Clamp(state(4, 0), FLAGS_min_acc, FLAGS_max_acc); + double acc_y = common::math::Clamp(state(5, 0), FLAGS_min_acc, FLAGS_max_acc); + feature->mutable_t_acceleration()->set_x(acc_x); + feature->mutable_t_acceleration()->set_y(acc_y); + feature->mutable_t_acceleration()->set_z(0.0); + ADEBUG << "Obstacle [" << id_ << "] has tracked position [" << std::fixed + << std::setprecision(6) << feature->t_position().x() << ", " + << std::fixed << std::setprecision(6) << feature->t_position().y() + << ", " << std::fixed << std::setprecision(6) + << feature->t_position().z() << "]"; + ADEBUG << "Obstacle [" << id_ << "] has tracked velocity [" << std::fixed + << std::setprecision(6) << feature->t_velocity().x() << ", " + << std::fixed << std::setprecision(6) << feature->t_velocity().y() + << ", " << std::fixed << std::setprecision(6) + << feature->t_velocity().z() << "]"; + ADEBUG << "Obstacle [" << id_ << "] has tracked acceleration [" << std::fixed + << std::setprecision(6) << feature->t_acceleration().x() << ", " + << std::fixed << std::setprecision(6) << feature->t_acceleration().y() + << ", " << std::fixed << std::setprecision(6) + << feature->t_acceleration().z() << "]"; + ADEBUG << "Obstacle [" << id_ << "] has velocity heading [" << std::fixed + << std::setprecision(6) << feature->t_velocity_heading() << "]."; +} + +void Obstacle::InitKFLaneTracker(const std::string& lane_id, + const double beta) { + KalmanFilter kf; + + // transition matrix: update delta_t at each processing step + Eigen::Matrix F; + F.setIdentity(); + F(1, 1) = beta; + kf.SetTransitionMatrix(F); + + // observation matrix + Eigen::Matrix H; + H.setZero(); + H(0, 0) = 1.0; + H(1, 1) = 1.0; + kf.SetObservationMatrix(H); + + // Set covariance of transition noise matrix Q + Eigen::Matrix Q; + Q.setIdentity(); + Q *= FLAGS_q_var; + kf.SetTransitionNoise(Q); + + // Set observation noise matrix R + Eigen::Matrix R; + R.setIdentity(); + R *= FLAGS_r_var; + kf.SetObservationNoise(R); + + // Set current state covariance matrix P + Eigen::Matrix P; + P.setIdentity(); + P *= FLAGS_p_var; + kf.SetStateCovariance(P); + + kf_lane_trackers_.emplace(lane_id, std::move(kf)); +} + +void Obstacle::UpdateKFLaneTrackers(Feature* feature) { + if (!feature->has_lane()) { + return; + } + std::unordered_set lane_ids; + for (auto& lane_feature : feature->lane().current_lane_feature()) { + if (!lane_feature.lane_id().empty()) { + lane_ids.insert(lane_feature.lane_id()); + } + } + for (auto& lane_feature : feature->lane().nearby_lane_feature()) { + if (!lane_feature.lane_id().empty()) { + lane_ids.insert(lane_feature.lane_id()); + } + } + if (lane_ids.empty()) { + return; + } + + auto iter = kf_lane_trackers_.begin(); + while (iter != kf_lane_trackers_.end()) { + if (lane_ids.find(iter->first) == lane_ids.end()) { + iter = kf_lane_trackers_.erase(iter); + } else { + ++iter; + } + } + + double ts = feature->timestamp(); + double speed = feature->speed(); + double acc = feature->acc(); + for (auto& lane_feature : feature->lane().current_lane_feature()) { + std::string lane_id = lane_feature.lane_id(); + if (lane_id.empty()) { + continue; + } + double s = lane_feature.lane_s(); + double l = lane_feature.lane_l(); + UpdateKFLaneTracker(lane_id, s, l, speed, acc, ts, FLAGS_go_approach_rate); + } + for (auto& nearby_lane_feature : feature->lane().nearby_lane_feature()) { + std::string lane_id = nearby_lane_feature.lane_id(); + if (lane_id.empty()) { + continue; + } + double s = nearby_lane_feature.lane_s(); + double l = nearby_lane_feature.lane_l(); + UpdateKFLaneTracker(lane_id, s, l, speed, acc, ts, + FLAGS_cutin_approach_rate); + } + + UpdateLaneBelief(feature); +} + +void Obstacle::UpdateKFLaneTracker(const std::string& lane_id, + const double lane_s, const double lane_l, + const double lane_speed, + const double lane_acc, + const double timestamp, const double beta) { + KalmanFilter* kf_ptr = nullptr; + if (kf_lane_trackers_.find(lane_id) != kf_lane_trackers_.end()) { + kf_ptr = &kf_lane_trackers_[lane_id]; + if (kf_ptr != nullptr) { + double delta_ts = 0.0; + if (feature_history_.size() > 0) { + delta_ts = timestamp - feature_history_.front().timestamp(); + } + if (delta_ts > FLAGS_double_precision) { + auto F = kf_ptr->GetTransitionMatrix(); + F(0, 2) = delta_ts; + F(0, 3) = 0.5 * delta_ts * delta_ts; + F(2, 3) = delta_ts; + kf_ptr->SetTransitionMatrix(F); + kf_ptr->Predict(); + + Eigen::Matrix z; + z(0, 0) = lane_s; + z(1, 0) = lane_l; + kf_ptr->Correct(z); + } + } else { + kf_lane_trackers_.erase(lane_id); + } + } + + if (kf_lane_trackers_.find(lane_id) == kf_lane_trackers_.end()) { + InitKFLaneTracker(lane_id, beta); + kf_ptr = &kf_lane_trackers_[lane_id]; + if (kf_ptr != nullptr) { + Eigen::Matrix state; + state(0, 0) = lane_s; + state(1, 0) = lane_l; + state(2, 0) = lane_speed; + state(3, 0) = lane_acc; + + auto P = kf_ptr->GetStateCovariance(); + kf_ptr->SetStateEstimate(state, P); + } + } +} + +void Obstacle::UpdateLaneBelief(Feature* feature) { + if ((!feature->has_lane()) || (!feature->lane().has_lane_feature())) { + return; + } + const std::string& lane_id = feature->lane().lane_feature().lane_id(); + if (lane_id.empty()) { + return; + } + + KalmanFilter* kf_ptr = nullptr; + if (kf_lane_trackers_.find(lane_id) != kf_lane_trackers_.end()) { + kf_ptr = &kf_lane_trackers_[lane_id]; + } + if (kf_ptr == nullptr) { + return; + } + + double lane_speed = kf_ptr->GetStateEstimate()(2, 0); + double lane_acc = common::math::Clamp(kf_ptr->GetStateEstimate()(3, 0), + FLAGS_min_acc, FLAGS_max_acc); + feature->set_t_speed(lane_speed); + feature->set_t_acc(lane_acc); + + ADEBUG << "Obstacle [" << id_ << "] has tracked lane speed [" << std::fixed + << std::setprecision(6) << lane_speed << "]"; + ADEBUG << "Obstacle [" << id_ << "] has tracked lane acceleration [" + << std::fixed << std::setprecision(6) << lane_acc << "]"; +} + +void Obstacle::InitKFPedestrianTracker(Feature* feature) { + // Set transition matrix F + Eigen::Matrix F; + F.setIdentity(); + kf_pedestrian_tracker_.SetTransitionMatrix(F); + + // Set observation matrix H + Eigen::Matrix H; + H.setIdentity(); + kf_pedestrian_tracker_.SetObservationMatrix(H); + + // Set control matrix + Eigen::Matrix B; + B.setZero(); + kf_pedestrian_tracker_.SetControlMatrix(B); + + // Set covariance of transition noise matrix Q + Eigen::Matrix Q; + Q.setIdentity(); + Q *= FLAGS_q_var; + kf_pedestrian_tracker_.SetTransitionNoise(Q); + + // Set observation noise matrix R + Eigen::Matrix R; + R.setIdentity(); + R *= FLAGS_r_var; + kf_pedestrian_tracker_.SetObservationNoise(R); + + // Set current state covariance matrix P + Eigen::Matrix P; + P.setIdentity(); + P *= FLAGS_p_var; + + // Set initial state + Eigen::Matrix x; + x(0, 0) = feature->position().x(); + x(1, 0) = feature->position().y(); + + kf_pedestrian_tracker_.SetStateEstimate(x, P); + + kf_pedestrian_tracker_enabled_ = true; +} + +void Obstacle::UpdateKFPedestrianTracker(Feature* feature) { + double delta_ts = 0.0; + if (!feature_history_.empty()) { + delta_ts = feature->timestamp() - feature_history_.front().timestamp(); + } + if (delta_ts > std::numeric_limits::epsilon()) { + Eigen::Matrix B = kf_pedestrian_tracker_.GetControlMatrix(); + B(0, 0) = delta_ts; + B(0, 2) = 0.5 * delta_ts * delta_ts; + B(1, 1) = delta_ts; + B(1, 3) = 0.5 * delta_ts * delta_ts; + kf_pedestrian_tracker_.SetControlMatrix(B); + + // Set control vector + Eigen::Matrix u; + u(0, 0) = feature->t_velocity().x(); + u(1, 0) = feature->t_velocity().y(); + if (FLAGS_enable_pedestrian_acc) { + u(2, 0) = feature->t_acceleration().x(); + u(3, 0) = feature->t_acceleration().y(); + } + + kf_pedestrian_tracker_.Predict(u); + + // Set observation vector + Eigen::Matrix z; + z(0, 0) = feature->position().x(); + z(1, 0) = feature->position().y(); + kf_pedestrian_tracker_.Correct(z); + } + + // Update feature by Kalman filter + feature->mutable_t_position()->set_x( + kf_pedestrian_tracker_.GetStateEstimate()(0, 0)); + feature->mutable_t_position()->set_y( + kf_pedestrian_tracker_.GetStateEstimate()(1, 0)); +} + +void Obstacle::SetCurrentLanes(Feature* feature) { + PredictionMap* map = PredictionMap::instance(); + + Eigen::Vector2d point(feature->position().x(), feature->position().y()); + double heading = feature->theta(); + if (FLAGS_enable_kf_tracking) { + point[0] = feature->t_position().x(); + point[1] = feature->t_position().y(); + heading = feature->t_velocity_heading(); + } + std::vector> current_lanes; + map->OnLane(current_lanes_, point, heading, FLAGS_search_radius, true, + ¤t_lanes); + current_lanes_ = current_lanes; + if (current_lanes_.empty()) { + ADEBUG << "Obstacle [" << id_ << "] has no current lanes."; + kf_lane_trackers_.clear(); + return; + } + Lane lane; + if (feature->has_lane()) { + lane = feature->lane(); + } + double min_heading_diff = std::numeric_limits::infinity(); + for (std::shared_ptr current_lane : current_lanes) { + int turn_type = map->LaneTurnType(current_lane->id().id()); + std::string lane_id = current_lane->id().id(); + double s = 0.0; + double l = 0.0; + map->GetProjection(point, current_lane, &s, &l); + if (s < 0.0) { + continue; + } + + common::math::Vec2d vec_point(point[0], point[1]); + double distance = 0.0; + common::PointENU nearest_point = + current_lane->GetNearestPoint(vec_point, &distance); + double nearest_point_heading = + map->PathHeading(current_lane, nearest_point); + double angle_diff = common::math::AngleDiff(heading, nearest_point_heading); + double left = 0.0; + double right = 0.0; + current_lane->GetWidth(s, &left, &right); + LaneFeature* lane_feature = lane.add_current_lane_feature(); + lane_feature->set_lane_turn_type(turn_type); + lane_feature->set_lane_id(lane_id); + lane_feature->set_lane_s(s); + lane_feature->set_lane_l(l); + lane_feature->set_angle_diff(angle_diff); + lane_feature->set_dist_to_left_boundary(left - l); + lane_feature->set_dist_to_right_boundary(right + l); + if (std::fabs(angle_diff) < min_heading_diff) { + lane.mutable_lane_feature()->CopyFrom(*lane_feature); + min_heading_diff = std::fabs(angle_diff); + } + ADEBUG << "Obstacle [" << id_ << "] has current lanes [" + << lane_feature->ShortDebugString() << "]."; + } + + if (lane.has_lane_feature()) { + ADEBUG << "Obstacle [" << id_ << "] has one current lane [" + << lane.lane_feature().ShortDebugString() << "]."; + } + + feature->mutable_lane()->CopyFrom(lane); +} + +void Obstacle::SetNearbyLanes(Feature* feature) { + PredictionMap* map = PredictionMap::instance(); + + Eigen::Vector2d point(feature->position().x(), feature->position().y()); + double theta = feature->theta(); + if (FLAGS_enable_kf_tracking) { + point[0] = feature->t_position().x(); + point[1] = feature->t_position().y(); + theta = feature->t_velocity_heading(); + } + + std::vector> nearby_lanes; + map->NearbyLanesByCurrentLanes(point, theta, FLAGS_search_radius * 2.0, + current_lanes_, &nearby_lanes); + if (nearby_lanes.empty()) { + ADEBUG << "Obstacle [" << id_ << "] has no nearby lanes."; + return; + } + + for (std::shared_ptr nearby_lane : nearby_lanes) { + if (nearby_lane == nullptr) { + continue; + } + double s = -1.0; + double l = 0.0; + map->GetProjection(point, nearby_lane, &s, &l); + if (s < 0.0 || s >= nearby_lane->total_length()) { + continue; + } + int turn_type = map->LaneTurnType(nearby_lane->id().id()); + double heading = feature->theta(); + if (FLAGS_enable_kf_tracking) { + heading = feature->t_velocity_heading(); + } + double angle_diff = 0.0; + hdmap::MapPathPoint nearest_point; + if (!map->ProjectionFromLane(nearby_lane, s, &nearest_point)) { + angle_diff = common::math::AngleDiff(nearest_point.heading(), heading); + } + + double left = 0.0; + double right = 0.0; + nearby_lane->GetWidth(s, &left, &right); + + LaneFeature* lane_feature = + feature->mutable_lane()->add_nearby_lane_feature(); + + lane_feature->set_lane_turn_type(turn_type); + lane_feature->set_lane_id(nearby_lane->id().id()); + lane_feature->set_lane_s(s); + lane_feature->set_lane_l(l); + lane_feature->set_angle_diff(angle_diff); + lane_feature->set_dist_to_left_boundary(left - l); + lane_feature->set_dist_to_right_boundary(right + l); + ADEBUG << "Obstacle [" << id_ << "] has nearby lanes [" + << lane_feature->ShortDebugString() << "]"; + } +} + +void Obstacle::SetLaneGraphFeature(Feature* feature) { + PredictionMap* map = PredictionMap::instance(); + double speed = feature->speed(); + double acc = feature->acc(); + if (FLAGS_enable_kf_tracking) { + speed = feature->t_speed(); + acc = feature->t_acc(); + } + double road_graph_distance = + speed * FLAGS_prediction_duration + + 0.5 * acc * FLAGS_prediction_duration * FLAGS_prediction_duration + + FLAGS_min_prediction_length; + for (auto& lane : feature->lane().current_lane_feature()) { + std::shared_ptr lane_info = map->LaneById(lane.lane_id()); + RoadGraph road_graph(lane.lane_s(), road_graph_distance, lane_info); + LaneGraph lane_graph; + road_graph.BuildLaneGraph(&lane_graph); + for (const auto& lane_seq : lane_graph.lane_sequence()) { + feature->mutable_lane() + ->mutable_lane_graph() + ->add_lane_sequence() + ->CopyFrom(lane_seq); + ADEBUG << "Obstacle [" << id_ << "] set a lane sequence [" + << lane_seq.ShortDebugString() << "]."; + } + } + for (auto& lane : feature->lane().nearby_lane_feature()) { + std::shared_ptr lane_info = map->LaneById(lane.lane_id()); + RoadGraph road_graph(lane.lane_s(), road_graph_distance, lane_info); + LaneGraph lane_graph; + road_graph.BuildLaneGraph(&lane_graph); + for (const auto& lane_seq : lane_graph.lane_sequence()) { + feature->mutable_lane() + ->mutable_lane_graph() + ->add_lane_sequence() + ->CopyFrom(lane_seq); + ADEBUG << "Obstacle [" << id_ << "] set a lane sequence [" + << lane_seq.ShortDebugString() << "]."; + } + } + + if (feature->has_lane() && feature->lane().has_lane_graph()) { + SetLanePoints(feature); + } + + ADEBUG << "Obstacle [" << id_ << "] set lane graph features."; +} + +void Obstacle::SetLanePoints(Feature* feature) { + if (feature == nullptr || !feature->has_theta()) { + AERROR << "Null feature or no theta."; + return; + } + PredictionMap* map = PredictionMap::instance(); + + LaneGraph* lane_graph = feature->mutable_lane()->mutable_lane_graph(); + double heading = feature->theta(); + double x = feature->position().x(); + double y = feature->position().y(); + if (FLAGS_enable_kf_tracking) { + x = feature->t_position().x(); + y = feature->t_position().y(); + } + Eigen::Vector2d position(x, y); + for (int i = 0; i < lane_graph->lane_sequence_size(); ++i) { + LaneSequence* lane_sequence = lane_graph->mutable_lane_sequence(i); + if (lane_sequence->lane_segment_size() <= 0) { + continue; + } + int lane_index = 0; + LaneSegment* lane_segment = lane_sequence->mutable_lane_segment(lane_index); + double start_s = lane_sequence->lane_segment(lane_index).start_s(); + double total_s = 0.0; + double lane_seg_s = start_s; + while (lane_index < lane_sequence->lane_segment_size()) { + if (lane_seg_s > lane_segment->end_s()) { + start_s = lane_seg_s - lane_segment->end_s(); + lane_seg_s = start_s; + ++lane_index; + if (lane_index < lane_sequence->lane_segment_size()) { + lane_segment = lane_sequence->mutable_lane_segment(lane_index); + } else { + lane_segment = nullptr; + } + } else { + std::string lane_id = lane_segment->lane_id(); + std::shared_ptr lane_info = map->LaneById(lane_id); + if (lane_info == nullptr) { + break; + } + LanePoint lane_point; + Eigen::Vector2d lane_point_pos = + map->PositionOnLane(lane_info, lane_seg_s); + double lane_point_heading = map->HeadingOnLane(lane_info, lane_seg_s); + double lane_point_width = map->LaneTotalWidth(lane_info, lane_seg_s); + double lane_point_angle_diff = + common::math::AngleDiff(lane_point_heading, heading); + lane_point.mutable_position()->set_x(lane_point_pos[0]); + lane_point.mutable_position()->set_y(lane_point_pos[1]); + lane_point.set_heading(lane_point_heading); + lane_point.set_width(lane_point_width); + double lane_s = -1.0; + double lane_l = 0.0; + map->GetProjection(position, lane_info, &lane_s, &lane_l); + lane_point.set_relative_s(total_s); + lane_point.set_relative_l(0.0 - lane_l); + lane_point.set_angle_diff(lane_point_angle_diff); + lane_segment->set_lane_turn_type(map->LaneTurnType(lane_id)); + lane_segment->add_lane_point()->CopyFrom(lane_point); + total_s += FLAGS_target_lane_gap; + lane_seg_s += FLAGS_target_lane_gap; + } + } + } + ADEBUG << "Obstacle [" << id_ << "] has lane segments and points."; +} + +void Obstacle::SetMotionStatus() { + int history_size = static_cast(feature_history_.size()); + if (history_size < 2) { + ADEBUG << "Obstacle [" << id_ << "] has no history and " + << "is considered stationary [default = true]."; + if (history_size > 0) { + feature_history_.front().set_is_still(true); + } + return; + } + + double start_x = 0.0; + double start_y = 0.0; + double avg_drift_x = 0.0; + double avg_drift_y = 0.0; + int len = std::min(history_size, FLAGS_still_obstacle_history_length); + CHECK_GT(len, 1); + + auto feature_riter = feature_history_.rbegin(); + if (FLAGS_enable_kf_tracking) { + start_x = feature_riter->t_position().x(); + start_y = feature_riter->t_position().y(); + } else { + start_x = feature_riter->position().x(); + start_y = feature_riter->position().y(); + } + ++feature_riter; + while (feature_riter != feature_history_.rend()) { + if (FLAGS_enable_kf_tracking) { + avg_drift_x += (feature_riter->t_position().x() - start_x) / (len - 1); + avg_drift_y += (feature_riter->t_position().y() - start_y) / (len - 1); + } else { + avg_drift_x += (feature_riter->position().x() - start_x) / (len - 1); + avg_drift_y += (feature_riter->position().y() - start_y) / (len - 1); + } + ++feature_riter; + } + + double delta_ts = feature_history_.front().timestamp() - + feature_history_.back().timestamp(); + double std = FLAGS_still_obstacle_position_std; + double speed_sensibility = + std::sqrt(2 * history_size) * 4 * std / ((history_size + 1) * delta_ts); + double speed = (FLAGS_enable_kf_tracking ? feature_history_.front().t_speed() + : feature_history_.front().speed()); + double speed_threshold = FLAGS_still_obstacle_speed_threshold; + if (common::math::DoubleCompare(speed, speed_threshold) < 0) { + ADEBUG << "Obstacle [" << id_ + << "] has a small speed and is considered stationary."; + } else if (common::math::DoubleCompare(speed_sensibility, speed_threshold) < + 0) { + ADEBUG << "Obstacle [" << id_ << "] has a too short history [" + << history_size + << "] considered moving [sensibility = " << speed_sensibility << "]"; + } else { + double distance = std::hypot(avg_drift_x, avg_drift_y); + double distance_std = std::sqrt(2.0 / len) * std; + if (common::math::DoubleCompare(distance, 2.0 * distance_std) > 0) { + ADEBUG << "Obstacle [" << id_ << "] is moving."; + } else { + ADEBUG << "Obstacle [" << id_ << "] is stationary."; + } + } +} + +void Obstacle::InsertFeatureToHistory(Feature* feature) { + feature_history_.push_front(std::move(*feature)); + ADEBUG << "Obstacle [" << id_ << "] inserted a frame into the history."; +} + +void Obstacle::Trim() { + if (feature_history_.size() < 2) { + return; + } + int count = 0; + const double latest_ts = feature_history_.front().timestamp(); + while (!feature_history_.empty() && + latest_ts - feature_history_.back().timestamp() >= + FLAGS_max_history_time) { + feature_history_.pop_back(); + ++count; + } + if (count > 0) { + ADEBUG << "Obstacle [" << id_ << "] trimmed " << count + << " historical features"; + } +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/container/obstacles/obstacle.h b/modules/prediction/container/obstacles/obstacle.h new file mode 100644 index 00000000000..c0a025be8c5 --- /dev/null +++ b/modules/prediction/container/obstacles/obstacle.h @@ -0,0 +1,226 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Obstacle + */ + +#ifndef MODULES_PREDICTION_CONTAINER_OBSTACLES_OBSTACLE_H_ +#define MODULES_PREDICTION_CONTAINER_OBSTACLES_OBSTACLE_H_ + +#include +#include +#include +#include +#include +#include + +#include "modules/common/proto/error_code.pb.h" +#include "modules/perception/proto/perception_obstacle.pb.h" +#include "modules/prediction/proto/feature.pb.h" + +#include "modules/common/math/kalman_filter.h" +#include "modules/map/hdmap/hdmap_common.h" + +/** + * @namespace apollo::prediction + * @brief apollo::prediction + */ +namespace apollo { +namespace prediction { + +/** + * @class Obstacle + * @brief Prediction obstacle. + */ +class Obstacle { + public: + /** + * @brief Constructor + */ + Obstacle() = default; + + /** + * @brief Destructor + */ + virtual ~Obstacle() = default; + + /** + * @brief Insert a perception obstacle with its timestamp. + * @param perception_obstacle The obstacle from perception. + * @param timestamp The timestamp when the perception obstacle was detected. + */ + void Insert(const perception::PerceptionObstacle& perception_obstacle, + const double timestamp); + + /** + * @brief Get the type of perception obstacle's type. + * @return The type pf perception obstacle. + */ + perception::PerceptionObstacle::Type type() const; + + /** + * @brief Get the obstacle's ID. + * @return The obstacle's ID. + */ + int id() const; + + /** + * @brief Get the obstacle's timestamp. + * @return The obstacle's timestamp. + */ + double timestamp() const; + + /** + * @brief Get the ith feature from latest to earliest. + * @param i The index of the feature. + * @return The ith feature. + */ + const Feature& feature(size_t i) const; + + /** + * @brief Get a pointer to the ith feature from latest to earliest. + * @param i The index of the feature. + * @return A pointer to the ith feature. + */ + Feature* mutable_feature(size_t i); + + /** + * @brief Get the latest feature. + * @return The latest feature. + */ + const Feature& latest_feature() const; + + /** + * @brief Get a pointer to the latest feature. + * @return A pointer to the latest feature. + */ + Feature* mutable_latest_feature(); + + /** + * @brief Get the number of historical features. + * @return The number of historical features. + */ + size_t history_size() const; + + /** + * @brief Get the lane Kalman filter by lane ID. + * @param lane_id The lane ID. + * @return The lane Kalman filter. + */ + const common::math::KalmanFilter& kf_lane_tracker( + const std::string& lane_id); + + /** + * @brief Get the motion Kalman filter. + * @return The motion Kalman filter. + */ + const common::math::KalmanFilter& kf_motion_tracker() const; + + /** + * @brief Get the pedestrian Kalman filter. + * @return The pedestrian Kalman filter. + */ + const common::math::KalmanFilter& kf_pedestrian_tracker() + const; + + /** + * @brief Check if the obstacle is on any lane. + * @return If the obstacle is on any lane. + */ + bool IsOnLane(); + + private: + common::ErrorCode SetId( + const perception::PerceptionObstacle& perception_obstacle, + Feature* feature); + + common::ErrorCode SetType( + const perception::PerceptionObstacle& perception_obstacle); + + void SetTimestamp(const perception::PerceptionObstacle& perception_obstacle, + const double timestamp, Feature* feature); + + void SetPosition(const perception::PerceptionObstacle& perception_obstacle, + Feature* feature); + + void SetVelocity(const perception::PerceptionObstacle& perception_obstacle, + Feature* feature); + + void SetAcceleration(Feature* feature); + + void SetTheta(const perception::PerceptionObstacle& perception_obstacle, + Feature* feature); + + void SetLengthWidthHeight( + const perception::PerceptionObstacle& perception_obstacle, + Feature* feature); + + void InitKFMotionTracker(Feature* feature); + + void UpdateKFMotionTracker(Feature* feature); + + void UpdateMotionBelief(Feature* feature); + + void InitKFLaneTracker(const std::string& lane_id, const double beta); + + void UpdateKFLaneTrackers(Feature* feature); + + void UpdateKFLaneTracker(const std::string& lane_id, const double lane_s, + const double lane_l, const double lane_speed, + const double lane_acc, const double timestamp, + const double beta); + + void UpdateLaneBelief(Feature* feature); + + void SetCurrentLanes(Feature* feature); + + void SetNearbyLanes(Feature* feature); + + void SetLaneGraphFeature(Feature* feature); + + void SetLanePoints(Feature* feature); + + void InitKFPedestrianTracker(Feature* feature); + + void UpdateKFPedestrianTracker(Feature* feature); + + void SetMotionStatus(); + + void InsertFeatureToHistory(Feature* feature); + + void Trim(); + + private: + int id_ = -1; + perception::PerceptionObstacle::Type type_ = + perception::PerceptionObstacle::UNKNOWN_UNMOVABLE; + std::deque feature_history_; + common::math::KalmanFilter kf_motion_tracker_; + common::math::KalmanFilter kf_pedestrian_tracker_; + bool kf_motion_tracker_enabled_ = false; + bool kf_pedestrian_tracker_enabled_ = false; + std::unordered_map> + kf_lane_trackers_; + std::vector> current_lanes_; + static std::mutex mutex_; +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_CONTAINER_OBSTACLES_OBSTACLE_H_ diff --git a/modules/prediction/container/obstacles/obstacle_test.cc b/modules/prediction/container/obstacles/obstacle_test.cc new file mode 100644 index 00000000000..dcece8b8ccd --- /dev/null +++ b/modules/prediction/container/obstacles/obstacle_test.cc @@ -0,0 +1,206 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/container/obstacles/obstacle.h" + +#include +#include +#include + +#include "gtest/gtest.h" + +#include "modules/perception/proto/perception_obstacle.pb.h" + +#include "modules/common/util/file.h" +#include "modules/common/util/string_util.h" +#include "modules/map/hdmap/hdmap.h" +#include "modules/prediction/common/kml_map_based_test.h" +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/container/obstacles/obstacles_container.h" + +namespace apollo { +namespace prediction { + +class ObstacleTest : public KMLMapBasedTest { + public: + virtual void SetUp() { + FLAGS_p_var = 0.1; + FLAGS_q_var = 0.1; + FLAGS_r_var = 0.001; + FLAGS_enable_kf_tracking = true; + int num_frame = 3; + for (int i = 1; i <= num_frame; ++i) { + const auto filename = common::util::StrCat( + "modules/prediction/testdata/frame_sequence/frame_", i, ".pb.txt"); + perception::PerceptionObstacles perception_obstacles; + common::util::GetProtoFromFile(filename, &perception_obstacles); + container_.Insert(perception_obstacles); + } + } + + protected: + ObstaclesContainer container_; +}; + +TEST_F(ObstacleTest, VehicleBasic) { + Obstacle* obstacle_ptr = container_.GetObstacle(1); + EXPECT_TRUE(obstacle_ptr != nullptr); + EXPECT_EQ(obstacle_ptr->id(), 1); + EXPECT_EQ(obstacle_ptr->type(), perception::PerceptionObstacle::VEHICLE); + EXPECT_TRUE(obstacle_ptr->IsOnLane()); + EXPECT_EQ(obstacle_ptr->history_size(), 3); + EXPECT_DOUBLE_EQ(obstacle_ptr->timestamp(), 0.2); +} + +TEST_F(ObstacleTest, VehiclePosition) { + Obstacle* obstacle_ptr = container_.GetObstacle(1); + + const Feature& start_feature = obstacle_ptr->feature(2); + EXPECT_DOUBLE_EQ(start_feature.timestamp(), 0.0); + EXPECT_DOUBLE_EQ(start_feature.position().x(), -458.941); + EXPECT_DOUBLE_EQ(start_feature.position().y(), -159.240); + EXPECT_NEAR(start_feature.t_position().x(), -458.941, 0.001); + EXPECT_NEAR(start_feature.t_position().y(), -159.240, 0.001); + + Feature* mid_feature_ptr = obstacle_ptr->mutable_feature(1); + EXPECT_DOUBLE_EQ(mid_feature_ptr->timestamp(), 0.1); + EXPECT_DOUBLE_EQ(mid_feature_ptr->position().x(), -457.010); + EXPECT_DOUBLE_EQ(mid_feature_ptr->position().y(), -160.023); + EXPECT_NEAR(mid_feature_ptr->t_position().x(), -457.010, 0.1); + EXPECT_NEAR(mid_feature_ptr->t_position().y(), -160.023, 0.1); + + const Feature& latest_feature = obstacle_ptr->latest_feature(); + EXPECT_DOUBLE_EQ(latest_feature.timestamp(), 0.2); + EXPECT_DOUBLE_EQ(latest_feature.position().x(), -455.182); + EXPECT_DOUBLE_EQ(latest_feature.position().y(), -160.608); + EXPECT_NEAR(latest_feature.t_position().x(), -455.182, 0.1); + EXPECT_NEAR(latest_feature.t_position().y(), -160.608, 0.1); +} + +TEST_F(ObstacleTest, VehicleVelocity) { + Obstacle* obstacle_ptr = container_.GetObstacle(1); + + const Feature& start_feature = obstacle_ptr->feature(2); + EXPECT_DOUBLE_EQ(start_feature.timestamp(), 0.0); + EXPECT_DOUBLE_EQ(start_feature.velocity().x(), 18.794); + EXPECT_DOUBLE_EQ(start_feature.velocity().y(), -6.839); + EXPECT_NEAR(start_feature.t_velocity().x(), 18.794, 0.001); + EXPECT_NEAR(start_feature.t_velocity().y(), -6.839, 0.001); + + const Feature& mid_feature = obstacle_ptr->feature(1); + EXPECT_DOUBLE_EQ(mid_feature.timestamp(), 0.1); + EXPECT_DOUBLE_EQ(mid_feature.velocity().x(), 17.994); + EXPECT_DOUBLE_EQ(mid_feature.velocity().y(), -6.839); + EXPECT_NEAR(mid_feature.t_velocity().x(), 18.700, 0.1); + EXPECT_NEAR(mid_feature.t_velocity().y(), -6.839, 0.1); + + Feature* latest_feature_ptr = obstacle_ptr->mutable_latest_feature(); + EXPECT_DOUBLE_EQ(latest_feature_ptr->timestamp(), 0.2); + EXPECT_DOUBLE_EQ(latest_feature_ptr->velocity().x(), 17.994); + EXPECT_DOUBLE_EQ(latest_feature_ptr->velocity().y(), -6.839); + EXPECT_NEAR(latest_feature_ptr->t_velocity().x(), 18.700, 0.1); + EXPECT_NEAR(latest_feature_ptr->t_velocity().y(), -6.839, 0.1); + + EXPECT_NEAR(latest_feature_ptr->speed(), 19.250, 0.001); + EXPECT_NEAR(latest_feature_ptr->t_speed(), 19.911, 0.1); +} + +TEST_F(ObstacleTest, VehicleHeading) { + Obstacle* obstacle_ptr = container_.GetObstacle(1); + const Feature& latest_feature = obstacle_ptr->latest_feature(); + EXPECT_DOUBLE_EQ(latest_feature.theta(), -0.352); + EXPECT_NEAR(latest_feature.t_velocity_heading(), -0.350, 0.001); +} + +TEST_F(ObstacleTest, VehicleLaneGraph) { + Obstacle* obstacle_ptr = container_.GetObstacle(1); + const Feature& latest_feature = obstacle_ptr->latest_feature(); + const LaneGraph& lane_graph = latest_feature.lane().lane_graph(); + EXPECT_EQ(lane_graph.lane_sequence_size(), 2); + EXPECT_EQ(lane_graph.lane_sequence(0).lane_segment(0).lane_id(), "l164"); + EXPECT_EQ(lane_graph.lane_sequence(1).lane_segment(0).lane_id(), "l163"); +} + +TEST_F(ObstacleTest, PedestrianBasic) { + Obstacle* obstacle_ptr = container_.GetObstacle(101); + EXPECT_TRUE(obstacle_ptr != nullptr); + EXPECT_EQ(obstacle_ptr->id(), 101); + EXPECT_EQ(obstacle_ptr->type(), perception::PerceptionObstacle::PEDESTRIAN); + EXPECT_EQ(obstacle_ptr->history_size(), 3); + EXPECT_DOUBLE_EQ(obstacle_ptr->timestamp(), 0.2); +} + +TEST_F(ObstacleTest, PedestrianPosition) { + Obstacle* obstacle_ptr = container_.GetObstacle(101); + + const Feature& start_feature = obstacle_ptr->feature(2); + EXPECT_DOUBLE_EQ(start_feature.timestamp(), 0.0); + EXPECT_DOUBLE_EQ(start_feature.position().x(), -438.879); + EXPECT_DOUBLE_EQ(start_feature.position().y(), -161.931); + EXPECT_NEAR(start_feature.t_position().x(), -438.879, 0.001); + EXPECT_NEAR(start_feature.t_position().y(), -161.931, 0.001); + + Feature* mid_feature_ptr = obstacle_ptr->mutable_feature(1); + EXPECT_DOUBLE_EQ(mid_feature_ptr->timestamp(), 0.1); + EXPECT_DOUBLE_EQ(mid_feature_ptr->position().x(), -438.610); + EXPECT_DOUBLE_EQ(mid_feature_ptr->position().y(), -161.521); + EXPECT_NEAR(mid_feature_ptr->t_position().x(), -438.610, 0.05); + EXPECT_NEAR(mid_feature_ptr->t_position().y(), -161.521, 0.05); + + const Feature& latest_feature = obstacle_ptr->latest_feature(); + EXPECT_DOUBLE_EQ(latest_feature.timestamp(), 0.2); + EXPECT_DOUBLE_EQ(latest_feature.position().x(), -438.537); + EXPECT_DOUBLE_EQ(latest_feature.position().y(), -160.991); + EXPECT_NEAR(latest_feature.t_position().x(), -438.537, 0.05); + EXPECT_NEAR(latest_feature.t_position().y(), -160.991, 0.05); +} + +TEST_F(ObstacleTest, PedestrianVelocity) { + Obstacle* obstacle_ptr = container_.GetObstacle(101); + + const Feature& start_feature = obstacle_ptr->feature(2); + EXPECT_DOUBLE_EQ(start_feature.timestamp(), 0.0); + EXPECT_DOUBLE_EQ(start_feature.velocity().x(), 1.710); + EXPECT_DOUBLE_EQ(start_feature.velocity().y(), 4.699); + EXPECT_NEAR(start_feature.t_velocity().x(), 1.710, 0.001); + EXPECT_NEAR(start_feature.t_velocity().y(), 4.699, 0.001); + + const Feature& mid_feature = obstacle_ptr->feature(1); + EXPECT_DOUBLE_EQ(mid_feature.timestamp(), 0.1); + EXPECT_DOUBLE_EQ(mid_feature.velocity().x(), 1.710); + EXPECT_DOUBLE_EQ(mid_feature.velocity().y(), 4.699); + EXPECT_NEAR(mid_feature.t_velocity().x(), 1.710, 0.05); + EXPECT_NEAR(mid_feature.t_velocity().y(), 4.699, 0.05); + + Feature* latest_feature_ptr = obstacle_ptr->mutable_latest_feature(); + EXPECT_DOUBLE_EQ(latest_feature_ptr->timestamp(), 0.2); + EXPECT_DOUBLE_EQ(latest_feature_ptr->velocity().x(), 1.710); + EXPECT_DOUBLE_EQ(latest_feature_ptr->velocity().y(), 4.699); + EXPECT_NEAR(latest_feature_ptr->t_velocity().x(), 1.710, 0.05); + EXPECT_NEAR(latest_feature_ptr->t_velocity().y(), 4.699, 0.05); + + EXPECT_NEAR(latest_feature_ptr->speed(), 5.000, 0.001); +} + +TEST_F(ObstacleTest, PedestrianHeading) { + Obstacle* obstacle_ptr = container_.GetObstacle(101); + const Feature& latest_feature = obstacle_ptr->latest_feature(); + EXPECT_DOUBLE_EQ(latest_feature.theta(), 1.220); + EXPECT_NEAR(latest_feature.t_velocity_heading(), 1.221, 0.01); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/container/obstacles/obstacles_container.cc b/modules/prediction/container/obstacles/obstacles_container.cc new file mode 100644 index 00000000000..1d08a9dea9b --- /dev/null +++ b/modules/prediction/container/obstacles/obstacles_container.cc @@ -0,0 +1,99 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/container/obstacles/obstacles_container.h" + +#include + +#include "modules/common/math/math_utils.h" +#include "modules/prediction/common/prediction_gflags.h" + +namespace apollo { +namespace prediction { + +using apollo::perception::PerceptionObstacle; +using apollo::perception::PerceptionObstacles; + +std::mutex ObstaclesContainer::g_mutex_; + +ObstaclesContainer::ObstaclesContainer() + : obstacles_(FLAGS_max_num_obstacles_stored) {} + +void ObstaclesContainer::Insert(const ::google::protobuf::Message& message) { + ADEBUG << "message: " << message.ShortDebugString(); + const PerceptionObstacles& perception_obstacles = + dynamic_cast(message); + ADEBUG << "perception obstacles: " << perception_obstacles.ShortDebugString(); + double timestamp = 0.0; + if (perception_obstacles.has_header() && + perception_obstacles.header().has_timestamp_sec()) { + timestamp = perception_obstacles.header().timestamp_sec(); + } + if (common::math::DoubleCompare(timestamp, timestamp_) < 0) { + AERROR << "Invalid timestamp curr [" << timestamp << "] v.s. prev [" + << timestamp_ << "]."; + return; + } + + timestamp_ = timestamp; + ADEBUG << "Current timestamp is [" << timestamp_ << "]"; + for (const PerceptionObstacle& perception_obstacle : + perception_obstacles.perception_obstacle()) { + ADEBUG << "Perception obstacle [" << perception_obstacle.id() << "]" + << " was detected"; + InsertPerceptionObstacle(perception_obstacle, timestamp_); + ADEBUG << "Perception obstacle [" << perception_obstacle.id() << "]" + << " was inserted"; + } +} + +Obstacle* ObstaclesContainer::GetObstacle(const int id) { + return obstacles_.GetSilently(id); +} + +void ObstaclesContainer::InsertPerceptionObstacle( + const PerceptionObstacle& perception_obstacle, const double timestamp) { + std::lock_guard lock(g_mutex_); + const int id = perception_obstacle.id(); + if (id < -1) { + AERROR << "Invalid ID [" << id << "]"; + return; + } + if (!IsPredictable(perception_obstacle)) { + ADEBUG << "Perception obstacle [" << id << "] is not predictable."; + return; + } + Obstacle* obstacle_ptr = obstacles_.GetSilently(id); + if (obstacle_ptr != nullptr) { + obstacle_ptr->Insert(perception_obstacle, timestamp); + } else { + Obstacle obstacle; + obstacle.Insert(perception_obstacle, timestamp); + obstacles_.Put(id, std::move(obstacle)); + } +} + +bool ObstaclesContainer::IsPredictable( + const PerceptionObstacle& perception_obstacle) { + if (!perception_obstacle.has_type() || + perception_obstacle.type() == PerceptionObstacle::UNKNOWN_UNMOVABLE) { + return false; + } + return true; +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/container/obstacles/obstacles_container.h b/modules/prediction/container/obstacles/obstacles_container.h new file mode 100644 index 00000000000..94cf95958eb --- /dev/null +++ b/modules/prediction/container/obstacles/obstacles_container.h @@ -0,0 +1,86 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Obstacles container + */ + +#ifndef MODULES_PREDICTION_CONTAINER_OBSTACLES_OBSTACLES_CONTAINER_H_ +#define MODULES_PREDICTION_CONTAINER_OBSTACLES_OBSTACLES_CONTAINER_H_ + +#include + +#include "modules/common/util/lru_cache.h" +#include "modules/prediction/container/container.h" +#include "modules/prediction/container/obstacles/obstacle.h" +#include "modules/prediction/container/pose/pose_container.h" + +namespace apollo { +namespace prediction { + +class ObstaclesContainer : public Container { + public: + /** + * @brief Constructor + */ + ObstaclesContainer(); + + /** + * @brief Destructor + */ + virtual ~ObstaclesContainer() = default; + + /** + * @brief Insert a data message into the container + * @param Data message to be inserted in protobuf + */ + void Insert(const ::google::protobuf::Message& message) override; + + /** + * @brief Insert an perception obstacle + * @param Perception obstacle + * Timestamp + */ + void InsertPerceptionObstacle( + const perception::PerceptionObstacle& perception_obstacle, + const double timestamp); + + /** + * @brief Get obstacle pointer + * @param Obstacle ID + * @return Obstacle pointer + */ + Obstacle* GetObstacle(const int id); + + private: + /** + * @brief Check if an obstacle is predictable + * @param An obstacle + * @return True if the obstacle is predictable; otherwise false; + */ + bool IsPredictable(const perception::PerceptionObstacle& perception_obstacle); + + private: + double timestamp_ = 0.0; + common::util::LRUCache obstacles_; + static std::mutex g_mutex_; +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_CONTAINER_OBSTACLES_OBSTACLES_CONTAINER_H_ diff --git a/modules/prediction/container/obstacles/obstacles_container_test.cc b/modules/prediction/container/obstacles/obstacles_container_test.cc new file mode 100644 index 00000000000..e3bcd66aa16 --- /dev/null +++ b/modules/prediction/container/obstacles/obstacles_container_test.cc @@ -0,0 +1,85 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/container/obstacles/obstacles_container.h" + +#include + +#include "gtest/gtest.h" + +#include "modules/perception/proto/perception_obstacle.pb.h" + +#include "modules/common/util/file.h" +#include "modules/map/hdmap/hdmap.h" +#include "modules/prediction/common/kml_map_based_test.h" +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/container/obstacles/obstacle.h" + +namespace apollo { +namespace prediction { + +class ObstaclesContainerTest : public KMLMapBasedTest { + public: + virtual void SetUp() { + std::string file = + "modules/prediction/testdata/perception_vehicles_pedestrians.pb.txt"; + perception::PerceptionObstacles perception_obstacles; + common::util::GetProtoFromFile(file, &perception_obstacles); + container_.Insert(perception_obstacles); + } + + protected: + ObstaclesContainer container_; +}; + +TEST_F(ObstaclesContainerTest, Vehicles) { + Obstacle* obstacle_ptr0 = container_.GetObstacle(0); + EXPECT_TRUE(obstacle_ptr0 != nullptr); + EXPECT_EQ(obstacle_ptr0->id(), 0); + EXPECT_EQ(obstacle_ptr0->type(), perception::PerceptionObstacle::VEHICLE); + Obstacle* obstacle_ptr1 = container_.GetObstacle(1); + EXPECT_TRUE(obstacle_ptr1 != nullptr); + EXPECT_EQ(obstacle_ptr1->id(), 1); + EXPECT_EQ(obstacle_ptr1->type(), perception::PerceptionObstacle::VEHICLE); + Obstacle* obstacle_ptr2 = container_.GetObstacle(2); + EXPECT_TRUE(obstacle_ptr2 != nullptr); + EXPECT_EQ(obstacle_ptr2->id(), 2); + EXPECT_EQ(obstacle_ptr2->type(), perception::PerceptionObstacle::VEHICLE); + Obstacle* obstacle_ptr3 = container_.GetObstacle(3); + EXPECT_TRUE(obstacle_ptr3 != nullptr); + EXPECT_EQ(obstacle_ptr3->id(), 3); + EXPECT_EQ(obstacle_ptr3->type(), perception::PerceptionObstacle::VEHICLE); + Obstacle* obstacle_ptr4 = container_.GetObstacle(4); + EXPECT_TRUE(obstacle_ptr4 == nullptr); +} + +TEST_F(ObstaclesContainerTest, Pedestrian) { + Obstacle* obstacle_ptr101 = container_.GetObstacle(101); + EXPECT_TRUE(obstacle_ptr101 != nullptr); + EXPECT_EQ(obstacle_ptr101->id(), 101); + EXPECT_EQ(obstacle_ptr101->type(), + perception::PerceptionObstacle::PEDESTRIAN); + Obstacle* obstacle_ptr102 = container_.GetObstacle(102); + EXPECT_TRUE(obstacle_ptr102 != nullptr); + EXPECT_EQ(obstacle_ptr102->id(), 102); + EXPECT_EQ(obstacle_ptr102->type(), + perception::PerceptionObstacle::PEDESTRIAN); + Obstacle* obstacle_ptr103 = container_.GetObstacle(103); + EXPECT_TRUE(obstacle_ptr103 == nullptr); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/container/pose/BUILD b/modules/prediction/container/pose/BUILD new file mode 100644 index 00000000000..c052b79fd26 --- /dev/null +++ b/modules/prediction/container/pose/BUILD @@ -0,0 +1,27 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "pose_container", + srcs = ["pose_container.cc"], + hdrs = ["pose_container.h"], + deps = [ + "//modules/common:log", + "//modules/localization/proto:localization_proto", + "//modules/perception/proto:perception_proto", + "//modules/prediction/container", + ], +) + +cc_test( + name = "pose_container_test", + size = "small", + srcs = ["pose_container_test.cc"], + deps = [ + "//modules/prediction/container/pose:pose_container", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/prediction/container/pose/pose_container.cc b/modules/prediction/container/pose/pose_container.cc new file mode 100644 index 00000000000..32d83de77df --- /dev/null +++ b/modules/prediction/container/pose/pose_container.cc @@ -0,0 +1,88 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/container/pose/pose_container.h" + +#include "modules/common/log.h" + +namespace apollo { +namespace prediction { + +using apollo::perception::PerceptionObstacle; +using apollo::perception::Point; +using apollo::localization::LocalizationEstimate; + +std::mutex PoseContainer::g_mutex_; + +void PoseContainer::Insert(const ::google::protobuf::Message& message) { + Update(dynamic_cast(message)); +} + +void PoseContainer::Update( + const localization::LocalizationEstimate& localization) { + if (!localization.has_header() || + !localization.header().has_timestamp_sec()) { + AERROR << "Localization message has no timestamp [" + << localization.ShortDebugString() << "]."; + return; + } else if (!localization.has_pose()) { + AERROR << "Localization message has no pose [" + << localization.ShortDebugString() << "]."; + } else if (!localization.pose().has_position() || + !localization.pose().has_linear_velocity()) { + AERROR << "Localization message has no position or linear velocity [" + << localization.ShortDebugString() << "]."; + return; + } + + std::lock_guard lock(g_mutex_); + if (obstacle_ptr_.get() == nullptr) { + obstacle_ptr_.reset(new PerceptionObstacle()); + } + obstacle_ptr_->set_id(ID); + Point position; + position.set_x(localization.pose().position().x()); + position.set_y(localization.pose().position().y()); + position.set_z(localization.pose().position().z()); + obstacle_ptr_->mutable_position()->CopyFrom(position); + + Point velocity; + velocity.set_x(localization.pose().linear_velocity().x()); + velocity.set_y(localization.pose().linear_velocity().y()); + velocity.set_z(localization.pose().linear_velocity().z()); + obstacle_ptr_->mutable_velocity()->CopyFrom(velocity); + + obstacle_ptr_->set_type(type_); + obstacle_ptr_->set_timestamp(localization.header().timestamp_sec()); + + ADEBUG << "ADC obstacle [" << obstacle_ptr_->ShortDebugString() << "]."; +} + +double PoseContainer::GetTimestamp() { + if (obstacle_ptr_ != nullptr) { + return obstacle_ptr_->timestamp(); + } else { + return 0.0; + } +} + +PerceptionObstacle* PoseContainer::ToPerceptionObstacle() { + std::lock_guard lock(g_mutex_); + return obstacle_ptr_.get(); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/container/pose/pose_container.h b/modules/prediction/container/pose/pose_container.h new file mode 100644 index 00000000000..e20f2b42ea0 --- /dev/null +++ b/modules/prediction/container/pose/pose_container.h @@ -0,0 +1,85 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Obstacles container + */ + +#ifndef MODULES_PREDICTION_CONTAINER_POSE_OBSTACLES_H_ +#define MODULES_PREDICTION_CONTAINER_POSE_OBSTACLES_H_ + +#include +#include + +#include "modules/localization/proto/localization.pb.h" +#include "modules/perception/proto/perception_obstacle.pb.h" + +#include "modules/prediction/container/container.h" + +namespace apollo { +namespace prediction { + +class PoseContainer : public Container { + public: + /** + * @brief Constructor + */ + PoseContainer() = default; + + /** + * @brief Destructor + */ + virtual ~PoseContainer() = default; + + /** + * @brief Insert a data message into the container + * @param Data message to be inserted in protobuf + */ + void Insert(const ::google::protobuf::Message& message) override; + + /** + * @brief Transform pose to a perception obstacle. + * @return A pointer to a perception obstacle. + */ + apollo::perception::PerceptionObstacle* ToPerceptionObstacle(); + + /** + * @brief Get timestamp + */ + double GetTimestamp(); + + private: + /** + * @brief Update pose + * @param Received localization message + */ + void Update(const localization::LocalizationEstimate& localization); + + public: + static const int ID = -1; + static const apollo::perception::PerceptionObstacle::Type type_ = + perception::PerceptionObstacle::VEHICLE; + + private: + std::unique_ptr obstacle_ptr_; + static std::mutex g_mutex_; +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_CONTAINER_POSE_OBSTACLES_H_ diff --git a/modules/prediction/container/pose/pose_container_test.cc b/modules/prediction/container/pose/pose_container_test.cc new file mode 100644 index 00000000000..436a5a78d16 --- /dev/null +++ b/modules/prediction/container/pose/pose_container_test.cc @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/container/pose/pose_container.h" + +#include +#include "gtest/gtest.h" + +#include "modules/localization/proto/localization.pb.h" + +namespace apollo { +namespace prediction { + +using apollo::localization::LocalizationEstimate; +using apollo::localization::Pose; +using apollo::perception::PerceptionObstacle; + +class PoseContainerTest : public ::testing::Test { + public: + PoseContainerTest() = default; + virtual ~PoseContainerTest() = default; + + void SetUp() override {} + + protected: + void InitPose(LocalizationEstimate *localization); + + protected: + PoseContainer pose_; + + private: + std::array position_{{1.0, 1.5}}; + std::array velocity_{{2.0, 2.5}}; + double timestamp_ = 3.0; +}; + +void PoseContainerTest::InitPose(LocalizationEstimate *localization) { + localization->mutable_pose()->mutable_position()->set_x(position_[0]); + localization->mutable_pose()->mutable_position()->set_y(position_[1]); + localization->mutable_pose()->mutable_linear_velocity()->set_x(velocity_[0]); + localization->mutable_pose()->mutable_linear_velocity()->set_y(velocity_[1]); + localization->mutable_header()->set_timestamp_sec(timestamp_); +} + +TEST_F(PoseContainerTest, Insertion) { + LocalizationEstimate localization; + InitPose(&localization); + + pose_.Insert(localization); + EXPECT_DOUBLE_EQ(pose_.GetTimestamp(), 3.0); + + PerceptionObstacle *obstacle = pose_.ToPerceptionObstacle(); + EXPECT_TRUE(obstacle != nullptr); + EXPECT_TRUE(obstacle->has_position()); + EXPECT_TRUE(obstacle->has_velocity()); + EXPECT_DOUBLE_EQ(obstacle->position().x(), 1.0); + EXPECT_DOUBLE_EQ(obstacle->position().y(), 1.5); + EXPECT_DOUBLE_EQ(obstacle->velocity().x(), 2.0); + EXPECT_DOUBLE_EQ(obstacle->velocity().y(), 2.5); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/data/mlp_vehicle_model.bin b/modules/prediction/data/mlp_vehicle_model.bin new file mode 100644 index 00000000000..4f3c4d177c6 Binary files /dev/null and b/modules/prediction/data/mlp_vehicle_model.bin differ diff --git a/modules/prediction/evaluator/BUILD b/modules/prediction/evaluator/BUILD new file mode 100644 index 00000000000..3f455414a14 --- /dev/null +++ b/modules/prediction/evaluator/BUILD @@ -0,0 +1,45 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "evaluator_manager", + srcs = ["evaluator_manager.cc"], + hdrs = ["evaluator_manager.h"], + deps = [ + "//modules/common:log", + "//modules/common:macro", + "//modules/perception/proto:perception_proto", + "//modules/prediction/container:container_manager", + "//modules/prediction/container/obstacles:obstacles_container", + "//modules/prediction/evaluator/vehicle:mlp_evaluator", + "//modules/prediction/proto:prediction_conf_proto", + "@glog//:glog", + ], +) + +cc_test( + name = "evaluator_manager_test", + size = "small", + srcs = ["evaluator_manager_test.cc"], + data = [ + "//modules/prediction:prediction_data", + "//modules/prediction:prediction_testdata", + ], + deps = [ + "//modules/common/util", + "//modules/prediction/evaluator:evaluator_manager", + "//modules/prediction/proto:prediction_conf_proto", + "@gtest//:main", + ], +) + +cc_library( + name = "evaluator", + hdrs = ["evaluator.h"], + deps = [ + "//modules/prediction/container/obstacles:obstacle", + ], +) + +cpplint() diff --git a/modules/prediction/evaluator/evaluator.h b/modules/prediction/evaluator/evaluator.h new file mode 100644 index 00000000000..40bd77d614d --- /dev/null +++ b/modules/prediction/evaluator/evaluator.h @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Define the data container base class + */ + +#ifndef MODULES_PREDICTION_EVALUATOR_EVALUATOR_H_ +#define MODULES_PREDICTION_EVALUATOR_EVALUATOR_H_ + +#include +#include + +#include "google/protobuf/message.h" +#include "modules/prediction/container/obstacles/obstacle.h" +/** + * @namespace apollo::prediction + * @brief apollo::prediction + */ +namespace apollo { +namespace prediction { + +class Evaluator { + public: + /** + * @brief Constructor + */ + Evaluator() = default; + + /** + * @brief Destructor + */ + virtual ~Evaluator() = default; + + /** + * @brief Evaluate an obstacle + * @param Obstacle pointer + */ + virtual void Evaluate(Obstacle* obstacle) = 0; +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_EVALUATOR_EVALUATOR_H_ diff --git a/modules/prediction/evaluator/evaluator_manager.cc b/modules/prediction/evaluator/evaluator_manager.cc new file mode 100644 index 00000000000..d5e3094224f --- /dev/null +++ b/modules/prediction/evaluator/evaluator_manager.cc @@ -0,0 +1,127 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/evaluator/evaluator_manager.h" + +#include "modules/common/log.h" +#include "modules/prediction/container/container_manager.h" +#include "modules/prediction/container/obstacles/obstacles_container.h" +#include "modules/prediction/evaluator/vehicle/mlp_evaluator.h" + +namespace apollo { +namespace prediction { + +using apollo::perception::PerceptionObstacles; +using apollo::perception::PerceptionObstacle; +using apollo::common::adapter::AdapterConfig; + +EvaluatorManager::EvaluatorManager() { RegisterEvaluators(); } + +void EvaluatorManager::RegisterEvaluators() { + RegisterEvaluator(ObstacleConf::MLP_EVALUATOR); +} + +void EvaluatorManager::Init(const PredictionConf& config) { + for (const auto& obstacle_conf : config.obstacle_conf()) { + if (!obstacle_conf.has_obstacle_type()) { + ADEBUG << "Obstacle config [" << obstacle_conf.ShortDebugString() + << "] has not defined obstacle type, status or evaluator type."; + continue; + } + + if (obstacle_conf.obstacle_type() == PerceptionObstacle::VEHICLE) { + if (!obstacle_conf.has_obstacle_status() || + !obstacle_conf.has_evaluator_type()) { + ADEBUG << "Vehicle obstacle config [" + << obstacle_conf.ShortDebugString() + << "] has not defined obstacle status and evaluator type."; + continue; + } else if (obstacle_conf.obstacle_status() == ObstacleConf::ON_LANE) { + vehicle_on_lane_evaluator_ = obstacle_conf.evaluator_type(); + } + } + } + + AINFO << "Defined vehicle on lane obstacle evaluator [" + << vehicle_on_lane_evaluator_ << "]"; +} + +Evaluator* EvaluatorManager::GetEvaluator( + const ObstacleConf::EvaluatorType& type) { + auto it = evaluators_.find(type); + return it != evaluators_.end() ? it->second.get() : nullptr; +} + +void EvaluatorManager::Run( + const perception::PerceptionObstacles& perception_obstacles) { + ObstaclesContainer* container = dynamic_cast( + ContainerManager::instance()->GetContainer( + AdapterConfig::PERCEPTION_OBSTACLES)); + CHECK_NOTNULL(container); + + Evaluator* evaluator = nullptr; + for (const auto& perception_obstacle : + perception_obstacles.perception_obstacle()) { + int id = perception_obstacle.id(); + Obstacle* obstacle = container->GetObstacle(id); + + if (obstacle == nullptr) { + continue; + } + + switch (perception_obstacle.type()) { + case PerceptionObstacle::VEHICLE: { + if (obstacle->IsOnLane()) { + evaluator = GetEvaluator(vehicle_on_lane_evaluator_); + CHECK_NOTNULL(evaluator); + } + break; + } + default: { + if (obstacle->IsOnLane()) { + evaluator = GetEvaluator(vehicle_on_lane_evaluator_); + CHECK_NOTNULL(evaluator); + } + break; + } + } + if (evaluator != nullptr) { + evaluator->Evaluate(obstacle); + } + } +} + +std::unique_ptr EvaluatorManager::CreateEvaluator( + const ObstacleConf::EvaluatorType& type) { + std::unique_ptr evaluator_ptr(nullptr); + switch (type) { + case ObstacleConf::MLP_EVALUATOR: { + evaluator_ptr.reset(new MLPEvaluator()); + break; + } + default: { break; } + } + return evaluator_ptr; +} + +void EvaluatorManager::RegisterEvaluator( + const ObstacleConf::EvaluatorType& type) { + evaluators_[type] = CreateEvaluator(type); + AINFO << "Evaluator [" << type << "] is registered."; +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/evaluator/evaluator_manager.h b/modules/prediction/evaluator/evaluator_manager.h new file mode 100644 index 00000000000..5a4fe9b850b --- /dev/null +++ b/modules/prediction/evaluator/evaluator_manager.h @@ -0,0 +1,98 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Use evaluator manager to manage all evaluators + */ + +#ifndef MODULES_PREDICTION_EVALUATOR_EVALUATOR_MANAGER_H_ +#define MODULES_PREDICTION_EVALUATOR_EVALUATOR_MANAGER_H_ + +#include +#include + +#include "modules/perception/proto/perception_obstacle.pb.h" +#include "modules/prediction/proto/prediction_conf.pb.h" + +#include "modules/common/macro.h" +#include "modules/prediction/evaluator/evaluator.h" + +/** + * @namespace apollo::prediction + * @brief apollo::prediction + */ +namespace apollo { +namespace prediction { + +class EvaluatorManager { + public: + /** + * @brief Destructor + */ + virtual ~EvaluatorManager() = default; + + /** + * @brief Initializer + * @param Prediction config + */ + void Init(const PredictionConf& config); + + /** + * @brief Get evaluator + * @return Pointer to the evaluator + */ + Evaluator* GetEvaluator(const ObstacleConf::EvaluatorType& type); + + /** + * @brief Run evaluators + * @param Perception obstacles + */ + void Run(const perception::PerceptionObstacles& perception_obstacles); + + private: + /** + * @brief Register an evaluator by type + * @param Evaluator type + */ + void RegisterEvaluator(const ObstacleConf::EvaluatorType& type); + + /** + * @brief Create an evaluator by type + * @param Evaluator type + * @return A unique pointer to the evaluator + */ + std::unique_ptr CreateEvaluator( + const ObstacleConf::EvaluatorType& type); + + /** + * @brief Register all evaluators + */ + void RegisterEvaluators(); + + private: + std::map> evaluators_; + + ObstacleConf::EvaluatorType vehicle_on_lane_evaluator_ = + ObstacleConf::MLP_EVALUATOR; + + DECLARE_SINGLETON(EvaluatorManager) +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_EVALUATOR_EVALUATOR_MANAGER_H_ diff --git a/modules/prediction/evaluator/evaluator_manager_test.cc b/modules/prediction/evaluator/evaluator_manager_test.cc new file mode 100644 index 00000000000..a7b1915360d --- /dev/null +++ b/modules/prediction/evaluator/evaluator_manager_test.cc @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/evaluator/evaluator_manager.h" + +#include +#include "gtest/gtest.h" + +#include "modules/common/util/file.h" +#include "modules/prediction/proto/prediction_conf.pb.h" + +namespace apollo { +namespace prediction { + +class EvaluatorManagerTest : public ::testing::Test { + public: + virtual void SetUp() { manager_ = EvaluatorManager::instance(); } + + protected: + EvaluatorManager *manager_ = nullptr; + PredictionConf conf_; +}; + +TEST_F(EvaluatorManagerTest, GetEvaluators) { + std::string conf_file = "modules/prediction/testdata/prediction_conf.pb.txt"; + CHECK(apollo::common::util::GetProtoFromFile(conf_file, &conf_)) + << "Failed to load " << conf_file; + + manager_->Init(conf_); + + const ObstacleConf::EvaluatorType type = ObstacleConf::MLP_EVALUATOR; + EXPECT_TRUE(manager_->GetEvaluator(type) != nullptr); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/evaluator/vehicle/BUILD b/modules/prediction/evaluator/vehicle/BUILD new file mode 100644 index 00000000000..a2a2db2d62a --- /dev/null +++ b/modules/prediction/evaluator/vehicle/BUILD @@ -0,0 +1,49 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "mlp_evaluator", + srcs = [ + "mlp_evaluator.cc", + ], + hdrs = [ + "mlp_evaluator.h", + ], + deps = [ + "//modules/common/configs:config_gflags", + "//modules/common/math:math_utils", + "//modules/common/util", + "//modules/map/proto:map_proto", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/common:prediction_util", + "//modules/prediction/container/obstacles:obstacle", + "//modules/prediction/evaluator", + "//modules/prediction/proto:fnn_vehicle_model_proto", + "//modules/prediction/proto:lane_graph_proto", + "@gtest//:main", + ], +) + +cc_test( + name = "mlp_evaluator_test", + size = "small", + srcs = [ + "mlp_evaluator_test.cc", + ], + data = [ + "//modules/prediction:prediction_data", + "//modules/prediction:prediction_testdata", + ], + deps = [ + "//modules/common/util", + "//modules/perception/proto:perception_proto", + "//modules/prediction/common:kml_map_based_test", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/container/obstacles:obstacles_container", + "//modules/prediction/evaluator/vehicle:mlp_evaluator", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/prediction/evaluator/vehicle/mlp_evaluator.cc b/modules/prediction/evaluator/vehicle/mlp_evaluator.cc new file mode 100644 index 00000000000..ef2c38c86cb --- /dev/null +++ b/modules/prediction/evaluator/vehicle/mlp_evaluator.cc @@ -0,0 +1,387 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/evaluator/vehicle/mlp_evaluator.h" + +#include +#include +#include + +#include "modules/map/proto/map_lane.pb.h" + +#include "modules/common/math/math_utils.h" +#include "modules/common/util/file.h" +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/common/prediction_util.h" + +namespace apollo { +namespace prediction { + +using HDMapLane = apollo::hdmap::Lane; + +namespace { + +double ComputeMean(const std::vector& nums, size_t start, size_t end) { + int count = 0; + double sum = 0.0; + for (size_t i = start; i <= end && i < nums.size(); i++) { + sum += nums[i]; + ++count; + } + return (count == 0) ? 0.0 : sum / count; +} + +} // namespace + +MLPEvaluator::MLPEvaluator() { LoadModel(FLAGS_vehicle_model_file); } + +void MLPEvaluator::Clear() { obstacle_feature_values_map_.clear(); } + +void MLPEvaluator::Evaluate(Obstacle* obstacle_ptr) { + Clear(); + CHECK_NOTNULL(obstacle_ptr); + + int id = obstacle_ptr->id(); + if (!obstacle_ptr->latest_feature().IsInitialized()) { + AERROR << "Obstacle [" << id << "] has no latest feature."; + return; + } + + Feature* latest_feature_ptr = obstacle_ptr->mutable_latest_feature(); + CHECK_NOTNULL(latest_feature_ptr); + if (!latest_feature_ptr->has_lane() || + !latest_feature_ptr->lane().has_lane_graph()) { + ADEBUG << "Obstacle [" << id << "] has no lane graph."; + return; + } + + LaneGraph* lane_graph_ptr = + latest_feature_ptr->mutable_lane()->mutable_lane_graph(); + CHECK_NOTNULL(lane_graph_ptr); + if (lane_graph_ptr->lane_sequence_size() == 0) { + AERROR << "Obstacle [" << id << "] has no lane sequences."; + return; + } + + for (int i = 0; i < lane_graph_ptr->lane_sequence_size(); ++i) { + LaneSequence* lane_sequence_ptr = lane_graph_ptr->mutable_lane_sequence(i); + CHECK(lane_sequence_ptr != nullptr); + std::vector feature_values; + ExtractFeatureValues(obstacle_ptr, lane_sequence_ptr, &feature_values); + double probability = ComputeProbability(feature_values); + lane_sequence_ptr->set_probability(probability); + } +} + +void MLPEvaluator::ExtractFeatureValues(Obstacle* obstacle_ptr, + LaneSequence* lane_sequence_ptr, + std::vector* feature_values) { + int id = obstacle_ptr->id(); + std::vector obstacle_feature_values; + + auto it = obstacle_feature_values_map_.find(id); + if (it == obstacle_feature_values_map_.end()) { + SetObstacleFeatureValues(obstacle_ptr, &obstacle_feature_values); + obstacle_feature_values_map_[id] = obstacle_feature_values; + } else { + obstacle_feature_values = it->second; + } + + if (obstacle_feature_values.size() != OBSTACLE_FEATURE_SIZE) { + ADEBUG << "Obstacle [" << id << "] has fewer than " + << "expected obstacle feature_values " + << obstacle_feature_values.size() << "."; + return; + } + + std::vector lane_feature_values; + SetLaneFeatureValues(obstacle_ptr, lane_sequence_ptr, &lane_feature_values); + if (lane_feature_values.size() != LANE_FEATURE_SIZE) { + ADEBUG << "Obstacle [" << id << "] has fewer than " + << "expected lane feature_values" << lane_feature_values.size() + << "."; + return; + } + + feature_values->insert(feature_values->end(), obstacle_feature_values.begin(), + obstacle_feature_values.end()); + feature_values->insert(feature_values->end(), lane_feature_values.begin(), + lane_feature_values.end()); +} + +void MLPEvaluator::SetObstacleFeatureValues( + Obstacle* obstacle_ptr, std::vector* feature_values) { + feature_values->clear(); + feature_values->reserve(OBSTACLE_FEATURE_SIZE); + + std::vector thetas; + std::vector lane_ls; + std::vector dist_lbs; + std::vector dist_rbs; + std::vector lane_types; + std::vector speeds; + std::vector timestamps; + + double duration = obstacle_ptr->timestamp() - FLAGS_prediction_duration; + int count = 0; + for (std::size_t i = 0; i < obstacle_ptr->history_size(); ++i) { + const Feature& feature = obstacle_ptr->feature(i); + if (!feature.IsInitialized()) { + continue; + } + if (apollo::common::math::DoubleCompare(feature.timestamp(), duration) < + 0) { + break; + } + if (feature.has_lane() && feature.lane().has_lane_feature()) { + thetas.push_back(feature.lane().lane_feature().angle_diff()); + lane_ls.push_back(feature.lane().lane_feature().lane_l()); + dist_lbs.push_back(feature.lane().lane_feature().dist_to_left_boundary()); + dist_rbs.push_back( + feature.lane().lane_feature().dist_to_right_boundary()); + lane_types.push_back(feature.lane().lane_feature().lane_turn_type()); + timestamps.push_back(feature.timestamp()); + if (FLAGS_enable_kf_tracking) { + speeds.push_back(feature.t_speed()); + } else { + speeds.push_back(feature.speed()); + } + ++count; + } + } + if (count <= 0) { + return; + } + int curr_size = 5; + int hist_size = obstacle_ptr->history_size(); + double theta_mean = ComputeMean(thetas, 0, hist_size - 1); + double theta_filtered = ComputeMean(thetas, 0, curr_size - 1); + double lane_l_mean = ComputeMean(lane_ls, 0, hist_size - 1); + double lane_l_filtered = ComputeMean(lane_ls, 0, curr_size - 1); + double speed_mean = ComputeMean(speeds, 0, hist_size - 1); + + double time_diff = timestamps.front() - timestamps.back(); + double dist_lb_rate = (timestamps.size() > 1) + ? (dist_lbs.front() - dist_lbs.back()) / time_diff + : 0.0; + double dist_rb_rate = (timestamps.size() > 1) + ? (dist_rbs.front() - dist_rbs.back()) / time_diff + : 0.0; + + double delta_t = 0.0; + if (timestamps.size() > 1) { + delta_t = + (timestamps.front() - timestamps.back()) / (timestamps.size() - 1); + } + double angle_curr = ComputeMean(thetas, 0, curr_size - 1); + double angle_prev = ComputeMean(thetas, curr_size, 2 * curr_size - 1); + double angle_diff = + (hist_size >= 2 * curr_size) ? angle_curr - angle_prev : 0.0; + + double lane_l_curr = ComputeMean(lane_ls, 0, curr_size - 1); + double lane_l_prev = ComputeMean(lane_ls, curr_size, 2 * curr_size - 1); + double lane_l_diff = + (hist_size >= 2 * curr_size) ? lane_l_curr - lane_l_prev : 0.0; + + double angle_diff_rate = 0.0; + double lane_l_diff_rate = 0.0; + if (delta_t > std::numeric_limits::epsilon()) { + angle_diff_rate = angle_diff / (delta_t * curr_size); + lane_l_diff_rate = lane_l_diff / (delta_t * curr_size); + } + + double acc = 0.0; + if (static_cast(speeds.size()) >= 3 * curr_size && + delta_t > std::numeric_limits::epsilon()) { + double speed_1 = ComputeMean(speeds, 0, curr_size - 1); + double speed_2 = ComputeMean(speeds, curr_size, 2 * curr_size - 1); + double speed_3 = ComputeMean(speeds, 2 * curr_size, 3 * curr_size - 1); + acc = (speed_1 - 2 * speed_2 + speed_3) / + (curr_size * curr_size * delta_t * delta_t); + } + + double dist_lb_rate_curr = 0.0; + if (hist_size >= 2 * curr_size && + delta_t > std::numeric_limits::epsilon()) { + double dist_lb_curr = ComputeMean(dist_lbs, 0, curr_size - 1); + double dist_lb_prev = ComputeMean(dist_lbs, curr_size, 2 * curr_size - 1); + dist_lb_rate_curr = (dist_lb_curr - dist_lb_prev) / (curr_size * delta_t); + } + + double dist_rb_rate_curr = 0.0; + if (hist_size >= 2 * curr_size && + delta_t > std::numeric_limits::epsilon()) { + double dist_rb_curr = ComputeMean(dist_rbs, 0, curr_size - 1); + double dist_rb_prev = ComputeMean(dist_rbs, curr_size, 2 * curr_size - 1); + dist_rb_rate_curr = (dist_rb_curr - dist_rb_prev) / (curr_size * delta_t); + } + + // setup obstacle feature values + feature_values->push_back(theta_filtered); + feature_values->push_back(theta_mean); + feature_values->push_back(theta_filtered - theta_mean); + feature_values->push_back(angle_diff); + feature_values->push_back(angle_diff_rate); + + feature_values->push_back(lane_l_filtered); + feature_values->push_back(lane_l_mean); + feature_values->push_back(lane_l_filtered - lane_l_mean); + feature_values->push_back(lane_l_diff); + feature_values->push_back(lane_l_diff_rate); + + feature_values->push_back(speed_mean); + feature_values->push_back(acc); + + feature_values->push_back(dist_lbs.front()); + feature_values->push_back(dist_lb_rate); + feature_values->push_back(dist_lb_rate_curr); + + feature_values->push_back(dist_rbs.front()); + feature_values->push_back(dist_rb_rate); + feature_values->push_back(dist_rb_rate_curr); + + feature_values->push_back(lane_types.front() == 0 ? 1.0 : 0.0); + feature_values->push_back(lane_types.front() == 1 ? 1.0 : 0.0); + feature_values->push_back(lane_types.front() == 2 ? 1.0 : 0.0); + feature_values->push_back(lane_types.front() == 3 ? 1.0 : 0.0); +} + +void MLPEvaluator::SetLaneFeatureValues(Obstacle* obstacle_ptr, + LaneSequence* lane_sequence_ptr, + std::vector* feature_values) { + feature_values->clear(); + feature_values->reserve(LANE_FEATURE_SIZE); + const Feature& feature = obstacle_ptr->latest_feature(); + if (!feature.IsInitialized()) { + ADEBUG << "Obstacle [" << obstacle_ptr->id() << "] has no latest feature."; + return; + } else if (!feature.has_position()) { + ADEBUG << "Obstacle [" << obstacle_ptr->id() << "] has no position."; + return; + } + + double heading = + FLAGS_enable_kf_tracking ? feature.t_velocity_heading() : feature.theta(); + for (int i = 0; i < lane_sequence_ptr->lane_segment_size(); ++i) { + if (feature_values->size() >= LANE_FEATURE_SIZE) { + break; + } + const LaneSegment& lane_segment = lane_sequence_ptr->lane_segment(i); + for (int j = 0; j < lane_segment.lane_point_size(); ++j) { + if (feature_values->size() >= LANE_FEATURE_SIZE) { + break; + } + const LanePoint& lane_point = lane_segment.lane_point(j); + if (!lane_point.has_position()) { + AERROR << "Lane point has no position."; + continue; + } + double diff_x = lane_point.position().x() - feature.position().x(); + double diff_y = lane_point.position().y() - feature.position().y(); + double angle = std::atan2(diff_x, diff_y); + feature_values->push_back(std::sin(angle - heading)); + feature_values->push_back(lane_point.relative_l()); + feature_values->push_back(lane_point.heading()); + feature_values->push_back(lane_point.angle_diff()); + } + } + + std::size_t size = feature_values->size(); + while (size >= 4 && size < LANE_FEATURE_SIZE) { + double heading_diff = feature_values->operator[](size - 4); + double lane_l_diff = feature_values->operator[](size - 3); + double heading = feature_values->operator[](size - 2); + double angle_diff = feature_values->operator[](size - 1); + feature_values->push_back(heading_diff); + feature_values->push_back(lane_l_diff); + feature_values->push_back(heading); + feature_values->push_back(angle_diff); + size = feature_values->size(); + } +} + +void MLPEvaluator::LoadModel(const std::string& model_file) { + model_ptr_.reset(new FnnVehicleModel()); + CHECK(model_ptr_ != nullptr); + CHECK(common::util::GetProtoFromFile(model_file, model_ptr_.get())) + << "Unable to load model file: " << model_file << "."; + + AINFO << "Succeeded in loading the model file: " << model_file << "."; +} + +double MLPEvaluator::ComputeProbability( + const std::vector& feature_values) { + CHECK_NOTNULL(model_ptr_.get()); + double probability = 0.0; + + if (model_ptr_->dim_input() != static_cast(feature_values.size())) { + ADEBUG << "Model feature size not consistent with model proto definition. " + << "model input dim = " << model_ptr_->dim_input() + << "; feature value size = " << feature_values.size(); + return probability; + } + std::vector layer_input; + layer_input.reserve(model_ptr_->dim_input()); + std::vector layer_output; + + // normalization + for (int i = 0; i < model_ptr_->dim_input(); ++i) { + double mean = model_ptr_->samples_mean().columns(i); + double std = model_ptr_->samples_std().columns(i); + layer_input.push_back( + apollo::prediction::util::Normalize(feature_values[i], mean, std)); + } + + for (int i = 0; i < model_ptr_->num_layer(); ++i) { + if (i > 0) { + layer_input.swap(layer_output); + layer_output.clear(); + } + const Layer& layer = model_ptr_->layer(i); + for (int col = 0; col < layer.layer_output_dim(); ++col) { + double neuron_output = layer.layer_bias().columns(col); + for (int row = 0; row < layer.layer_input_dim(); ++row) { + double weight = layer.layer_input_weight().rows(row).columns(col); + neuron_output += (layer_input[row] * weight); + } + if (layer.layer_activation_func() == Layer::RELU) { + neuron_output = apollo::prediction::util::Relu(neuron_output); + } else if (layer.layer_activation_func() == Layer::SIGMOID) { + neuron_output = apollo::prediction::util::Sigmoid(neuron_output); + } else if (layer.layer_activation_func() == Layer::TANH) { + neuron_output = std::tanh(neuron_output); + } else { + AERROR << "Undefined activation function [" + << layer.layer_activation_func() + << "]. A default sigmoid will be used instead."; + neuron_output = apollo::prediction::util::Sigmoid(neuron_output); + } + layer_output.push_back(neuron_output); + } + } + + if (layer_output.size() != 1) { + AERROR << "Model output layer has incorrect # outputs: " + << layer_output.size(); + } else { + probability = layer_output[0]; + } + + return probability; +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/evaluator/vehicle/mlp_evaluator.h b/modules/prediction/evaluator/vehicle/mlp_evaluator.h new file mode 100644 index 00000000000..6b82ee4f895 --- /dev/null +++ b/modules/prediction/evaluator/vehicle/mlp_evaluator.h @@ -0,0 +1,107 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_PREDICTION_EVALUATOR_VEHICLE_MLP_EVALUATOR_H_ +#define MODULES_PREDICTION_EVALUATOR_VEHICLE_MLP_EVALUATOR_H_ + +#include +#include +#include +#include + +#include "modules/prediction/proto/fnn_vehicle_model.pb.h" +#include "modules/prediction/proto/lane_graph.pb.h" + +#include "modules/prediction/container/obstacles/obstacle.h" +#include "modules/prediction/evaluator/evaluator.h" + +namespace apollo { +namespace prediction { + +class MLPEvaluator : public Evaluator { + public: + /** + * @brief Constructor + */ + MLPEvaluator(); + + /** + * @brief Destructor + */ + virtual ~MLPEvaluator() = default; + + /** + * @brief Override Evaluate + * @param Obstacle pointer + */ + void Evaluate(Obstacle* obstacle_ptr) override; + + /** + * @brief Extract feature vector + * @param Obstacle pointer + * Lane Sequence pointer + */ + void ExtractFeatureValues(Obstacle* obstacle_ptr, + LaneSequence* lane_sequence_ptr, + std::vector* feature_values); + + /** + * @brief Clear obstacle feature map + */ + void Clear(); + + private: + /** + * @brief Set obstacle feature vector + * @param Obstacle pointer + * Feature container in a vector for receiving the feature values + */ + void SetObstacleFeatureValues(Obstacle* obstacle_ptr, + std::vector* feature_values); + + /** + * @brief Set lane feature vector + * @param Obstacle pointer + * Lane sequence pointer + * Feature container in a vector for receiving the feature values + */ + void SetLaneFeatureValues(Obstacle* obstacle_ptr, + LaneSequence* lane_sequence_ptr, + std::vector* feature_values); + + /** + * @brief Load mode file + * @param Model file name + */ + void LoadModel(const std::string& model_file); + + /** + * @brief Compute probability + */ + double ComputeProbability(const std::vector& feature_values); + + private: + std::unordered_map> obstacle_feature_values_map_; + static const size_t OBSTACLE_FEATURE_SIZE = 22; + static const size_t LANE_FEATURE_SIZE = 40; + + std::unique_ptr model_ptr_; +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_EVALUATOR_VEHICLE_MLP_EVALUATOR_H_ diff --git a/modules/prediction/evaluator/vehicle/mlp_evaluator_test.cc b/modules/prediction/evaluator/vehicle/mlp_evaluator_test.cc new file mode 100644 index 00000000000..9e0dbae3830 --- /dev/null +++ b/modules/prediction/evaluator/vehicle/mlp_evaluator_test.cc @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/evaluator/vehicle/mlp_evaluator.h" + +#include +#include + +#include "gtest/gtest.h" + +#include "modules/perception/proto/perception_obstacle.pb.h" + +#include "modules/common/util/file.h" +#include "modules/map/hdmap/hdmap.h" +#include "modules/prediction/common/kml_map_based_test.h" +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/container/obstacles/obstacle.h" +#include "modules/prediction/container/obstacles/obstacles_container.h" + +namespace apollo { +namespace prediction { + +class MLPEvaluatorTest : public KMLMapBasedTest { + public: + void SetUp() override { + std::string file = + "modules/prediction/testdata/single_perception_vehicle_onlane.pb.txt"; + CHECK(apollo::common::util::GetProtoFromFile(file, &perception_obstacles_)); + } + + protected: + apollo::perception::PerceptionObstacles perception_obstacles_; +}; + +TEST_F(MLPEvaluatorTest, OnLaneCase) { + EXPECT_DOUBLE_EQ(perception_obstacles_.header().timestamp_sec(), + 1501183430.161906); + apollo::perception::PerceptionObstacle perception_obstacle = + perception_obstacles_.perception_obstacle(0); + EXPECT_EQ(perception_obstacle.id(), 1); + MLPEvaluator mlp_evaluator; + ObstaclesContainer container; + container.Insert(perception_obstacles_); + Obstacle* obstacle_ptr = container.GetObstacle(1); + EXPECT_TRUE(obstacle_ptr != nullptr); + mlp_evaluator.Evaluate(obstacle_ptr); + const Feature& feature = obstacle_ptr->latest_feature(); + const LaneGraph& lane_graph = feature.lane().lane_graph(); + for (const auto& lane_sequence : lane_graph.lane_sequence()) { + EXPECT_TRUE(lane_sequence.has_probability()); + } +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/prediction.cc b/modules/prediction/prediction.cc index e734b12606a..aeffb7cd8f5 100644 --- a/modules/prediction/prediction.cc +++ b/modules/prediction/prediction.cc @@ -19,36 +19,113 @@ #include "modules/prediction/proto/prediction_obstacle.pb.h" #include "modules/common/adapters/adapter_manager.h" +#include "modules/common/util/file.h" #include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/container/container_manager.h" +#include "modules/prediction/container/obstacles/obstacles_container.h" +#include "modules/prediction/container/pose/pose_container.h" +#include "modules/prediction/evaluator/evaluator_manager.h" +#include "modules/prediction/predictor/predictor_manager.h" namespace apollo { namespace prediction { -using ::apollo::perception::PerceptionObstacles; -using ::apollo::common::adapter::AdapterManager; +using apollo::perception::PerceptionObstacles; +using apollo::perception::PerceptionObstacle; +using apollo::localization::LocalizationEstimate; +using apollo::common::adapter::AdapterManager; +using apollo::common::adapter::AdapterConfig; +using apollo::common::Status; +using apollo::common::ErrorCode; std::string Prediction::Name() const { return FLAGS_prediction_module_name; } -apollo::common::Status Prediction::Init() { - AdapterManager::instance()->Init(); - AdapterManager::SetPerceptionObstaclesCallback(&Prediction::OnPerception, +Status Prediction::Init() { + // Load prediction conf + prediction_conf_.Clear(); + if (!common::util::GetProtoFromFile(FLAGS_prediction_conf_file, + &prediction_conf_)) { + return OnError("Unable to load prediction conf file: " + + FLAGS_prediction_conf_file); + } else { + ADEBUG << "Prediction config file is loaded into: " + << prediction_conf_.ShortDebugString(); + } + + adapter_conf_.Clear(); + if (!common::util::GetProtoFromFile(FLAGS_adapter_config_filename, + &adapter_conf_)) { + return OnError("Unable to load adapter conf file: " + + FLAGS_adapter_config_filename); + } else { + ADEBUG << "Adapter config file is loaded into: " + << adapter_conf_.ShortDebugString(); + } + + // Initialization of all managers + AdapterManager::instance()->Init(adapter_conf_); + ContainerManager::instance()->Init(adapter_conf_); + EvaluatorManager::instance()->Init(prediction_conf_); + PredictorManager::instance()->Init(prediction_conf_); + + CHECK(AdapterManager::GetLocalization()) << "Localization is not ready."; + CHECK(AdapterManager::GetPerceptionObstacles()) << "Perception is not ready."; + + // Set perception obstacle callback function + AdapterManager::AddPerceptionObstaclesCallback(&Prediction::OnPerception, this); - return apollo::common::Status::OK(); -} + // Set localization callback function + AdapterManager::AddLocalizationCallback(&Prediction::OnLocalization, this); -apollo::common::Status Prediction::Start() { - return apollo::common::Status::OK(); + return Status::OK(); } +Status Prediction::Start() { return Status::OK(); } + void Prediction::Stop() {} -void Prediction::OnPerception(const PerceptionObstacles &perception_obstacles) { - PredictionObstacles prediction_obstacles; - AdapterManager::FillPredictionHeader(Name(), - prediction_obstacles.mutable_header()); +void Prediction::OnLocalization(const LocalizationEstimate& localization) { + ObstaclesContainer* obstacles_container = dynamic_cast( + ContainerManager::instance()->GetContainer( + AdapterConfig::PERCEPTION_OBSTACLES)); + CHECK_NOTNULL(obstacles_container); + + PoseContainer* pose_container = dynamic_cast( + ContainerManager::instance()->GetContainer(AdapterConfig::LOCALIZATION)); + CHECK_NOTNULL(pose_container); + + pose_container->Insert(localization); + PerceptionObstacle* pose_ptr = pose_container->ToPerceptionObstacle(); + if (pose_ptr != nullptr) { + obstacles_container->InsertPerceptionObstacle( + *(pose_ptr), pose_container->GetTimestamp()); + } else { + ADEBUG << "Invalid pose found."; + } + + ADEBUG << "Received a localization message [" + << localization.ShortDebugString() << "]."; +} + +void Prediction::OnPerception(const PerceptionObstacles& perception_obstacles) { + ObstaclesContainer* obstacles_container = dynamic_cast( + ContainerManager::instance()->GetContainer( + AdapterConfig::PERCEPTION_OBSTACLES)); + CHECK_NOTNULL(obstacles_container); + obstacles_container->Insert(perception_obstacles); + EvaluatorManager::instance()->Run(perception_obstacles); + PredictorManager::instance()->Run(perception_obstacles); + + auto prediction_obstacles = + PredictorManager::instance()->prediction_obstacles(); + AdapterManager::FillPredictionHeader(Name(), &prediction_obstacles); AdapterManager::PublishPrediction(prediction_obstacles); + ADEBUG << "Published a prediction message [" + << prediction_obstacles.ShortDebugString() << "]."; +} - ADEBUG << prediction_obstacles.ShortDebugString(); +Status Prediction::OnError(const std::string& error_msg) { + return Status(ErrorCode::PREDICTION_ERROR, error_msg); } } // namespace prediction diff --git a/modules/prediction/prediction.h b/modules/prediction/prediction.h index 75e7c0353df..799fab7ecaa 100644 --- a/modules/prediction/prediction.h +++ b/modules/prediction/prediction.h @@ -25,8 +25,12 @@ #include "ros/include/ros/ros.h" -#include "modules/common/apollo_app.h" +#include "modules/common/adapters/proto/adapter_config.pb.h" +#include "modules/localization/proto/localization.pb.h" #include "modules/perception/proto/perception_obstacle.pb.h" +#include "modules/prediction/proto/prediction_conf.pb.h" + +#include "modules/common/apollo_app.h" /** * @namespace apollo::prediction @@ -37,16 +41,45 @@ namespace prediction { class Prediction : public apollo::common::ApolloApp { public: + /** + * @brief Destructor + */ ~Prediction() = default; + /** + * @brief Get name of the node + * @return Name of the node + */ std::string Name() const override; + + /** + * @brief Initialize the node + * @return Status of the initialization + */ common::Status Init() override; + + /** + * @brief Start the node + * @return Status of the starting process + */ common::Status Start() override; + + /** + * @brief Stop the node + */ void Stop() override; private: + common::Status OnError(const std::string &error_msg); + + void OnLocalization(const localization::LocalizationEstimate &localization); + void OnPerception( const perception::PerceptionObstacles &perception_obstacles); + + private: + PredictionConf prediction_conf_; + common::adapter::AdapterManagerConfig adapter_conf_; }; } // namespace prediction diff --git a/modules/prediction/prediction_test.cc b/modules/prediction/prediction_test.cc new file mode 100644 index 00000000000..ea7b0f91a06 --- /dev/null +++ b/modules/prediction/prediction_test.cc @@ -0,0 +1,30 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "gtest/gtest.h" + +#include "modules/prediction/prediction.h" + +namespace apollo { +namespace prediction { + +TEST(PredictionTest, Simple) { + Prediction prediction; + EXPECT_EQ(prediction.Name(), "prediction"); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/predictor/BUILD b/modules/prediction/predictor/BUILD new file mode 100644 index 00000000000..19bac1ccbbe --- /dev/null +++ b/modules/prediction/predictor/BUILD @@ -0,0 +1,51 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "predictor_manager", + srcs = ["predictor_manager.cc"], + hdrs = ["predictor_manager.h"], + deps = [ + "//modules/common:macro", + "//modules/perception/proto:perception_proto", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/container:container_manager", + "//modules/prediction/container/obstacles:obstacles_container", + "//modules/prediction/predictor/pedestrian:regional_predictor", + "//modules/prediction/predictor/vehicle:free_move_predictor", + "//modules/prediction/predictor/vehicle:lane_sequence_predictor", + "//modules/prediction/proto:prediction_conf_proto", + "//modules/prediction/proto:prediction_proto", + "@glog//:glog", + ], +) + +cc_test( + name = "predictor_manager_test", + size = "small", + srcs = ["predictor_manager_test.cc"], + data = [ + "//modules/prediction:prediction_data", + "//modules/prediction:prediction_testdata", + ], + deps = [ + "//modules/common/util", + "//modules/prediction/predictor:predictor_manager", + "//modules/prediction/proto:prediction_conf_proto", + "@gtest//:main", + ], +) + +cc_library( + name = "predictor", + srcs = ["predictor.cc"], + hdrs = ["predictor.h"], + deps = [ + "//modules/common/proto:pnc_point_proto", + "//modules/prediction/container/obstacles:obstacle", + "//modules/prediction/proto:prediction_proto", + ], +) + +cpplint() diff --git a/modules/prediction/predictor/pedestrian/BUILD b/modules/prediction/predictor/pedestrian/BUILD new file mode 100644 index 00000000000..def3f5667f1 --- /dev/null +++ b/modules/prediction/predictor/pedestrian/BUILD @@ -0,0 +1,42 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "regional_predictor", + srcs = ["regional_predictor.cc"], + hdrs = ["regional_predictor.h"], + deps = [ + "//modules/common/math:kalman_filter", + "//modules/common/proto:pnc_point_proto", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/common:prediction_util", + "//modules/prediction/predictor", + "@glog//:glog", + ], +) + +cc_test( + name = "regional_predictor_test", + size = "small", + srcs = [ + "regional_predictor_test.cc", + ], + data = [ + "//modules/prediction:prediction_data", + "//modules/prediction:prediction_testdata", + ], + deps = [ + "//modules/common/configs:config_gflags", + "//modules/common/util", + "//modules/perception/proto:perception_proto", + "//modules/prediction/common:kml_map_based_test", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/container/obstacles:obstacles_container", + "//modules/prediction/predictor/pedestrian:regional_predictor", + "//modules/prediction/proto:prediction_proto", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/prediction/predictor/pedestrian/regional_predictor.cc b/modules/prediction/predictor/pedestrian/regional_predictor.cc new file mode 100644 index 00000000000..7eba9b3c1d8 --- /dev/null +++ b/modules/prediction/predictor/pedestrian/regional_predictor.cc @@ -0,0 +1,460 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/predictor/pedestrian/regional_predictor.h" + +#include +#include +#include + +#include "modules/common/math/kalman_filter.h" +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/common/prediction_util.h" + +namespace apollo { +namespace prediction { + +using apollo::common::TrajectoryPoint; +using apollo::common::PathPoint; +using apollo::common::math::KalmanFilter; + +namespace { + +Eigen::Vector2d GetUnitVector2d(const TrajectoryPoint& from_point, + const TrajectoryPoint& to_point) { + double delta_x = to_point.path_point().x() - from_point.path_point().x(); + double delta_y = to_point.path_point().y() - from_point.path_point().y(); + if (std::fabs(delta_x) <= std::numeric_limits::epsilon()) { + delta_x = 0.0; + } + if (std::fabs(delta_y) <= std::numeric_limits::epsilon()) { + delta_y = 0.0; + } + + const double norm = std::hypot(delta_x, delta_y); + if (norm > 1e-10) { + delta_x /= norm; + delta_y /= norm; + } + return {delta_x, delta_y}; +} + +void CompressVector2d(const double to_length, Eigen::Vector2d* vec) { + const double norm = std::hypot(vec->operator[](0), vec->operator[](1)); + if (norm > to_length) { + const double ratio = to_length / norm; + vec->operator[](0) *= ratio; + vec->operator[](1) *= ratio; + } +} + +double CrossProduct(const Eigen::Vector2d& vec1, const Eigen::Vector2d& vec2) { + return vec1[0] * vec2[1] - vec1[1] * vec2[0]; +} + +} // namespace + +void RegionalPredictor::Predict(Obstacle* obstacle) { + trajectories_.clear(); + if (obstacle == nullptr) { + AERROR << "Missing obstacle."; + return; + } + double speed = 0.0; + const Feature& feature = obstacle->latest_feature(); + if (feature.has_speed()) { + speed = feature.speed(); + } + if (FLAGS_enable_kf_tracking && feature.has_t_speed()) { + speed = feature.t_speed(); + } + if (speed > FLAGS_still_speed) { + GenerateMovingTrajectory(obstacle, 1.0); + } else { + GenerateStillTrajectory(obstacle, 1.0); + } +} + +void RegionalPredictor::GenerateStillTrajectory(const Obstacle* obstacle, + double probability) { + if (obstacle == nullptr) { + AERROR << "Missing obstacle."; + return; + } + const Feature& feature = obstacle->latest_feature(); + if (!feature.has_position() || !feature.position().has_x() || + !feature.position().has_y() || !feature.has_velocity()) { + AERROR << "Missing position or velocity."; + return; + } + + Eigen::Vector2d position(feature.position().x(), feature.position().y()); + double heading = 0.0 - M_PI; + const int num_traj = FLAGS_num_trajectory_still_pedestrian; + const double delta_heading = 2.0 * M_PI / num_traj; + const double speed = FLAGS_pedestrian_min_speed; + const double total_time = FLAGS_prediction_pedestrian_total_time; + const int start_index = NumOfTrajectories(); + + for (int i = 0; i < num_traj; ++i) { + std::vector points; + DrawStillTrajectory(position, heading, speed, total_time, &points); + Trajectory trajectory = GenerateTrajectory(points); + trajectories_.push_back(std::move(trajectory)); + heading += delta_heading; + } + SetEqualProbability(probability, start_index); +} + +void RegionalPredictor::GenerateMovingTrajectory(const Obstacle* obstacle, + double probability) { + if (obstacle == nullptr) { + AERROR << "Missing obstacle."; + return; + } + const Feature& feature = obstacle->latest_feature(); + if (!feature.has_position() || !feature.position().has_x() || + !feature.position().has_y() || !feature.has_velocity()) { + AERROR << "Missing position or velocity."; + return; + } + + Eigen::Vector2d position(feature.position().x(), feature.position().y()); + Eigen::Vector2d velocity(feature.velocity().x(), feature.velocity().y()); + Eigen::Vector2d acc(0.0, 0.0); + if (FLAGS_enable_kf_tracking) { + velocity[0] = feature.t_velocity().x(); + velocity[1] = feature.t_velocity().y(); + } + if (FLAGS_enable_pedestrian_acc) { + acc = {feature.acceleration().x(), feature.acceleration().y()}; + if (FLAGS_enable_kf_tracking) { + acc = {feature.t_acceleration().x(), feature.t_acceleration().y()}; + } + } + + const double total_time = FLAGS_prediction_pedestrian_total_time; + std::vector left_points; + std::vector right_points; + + DrawMovingTrajectory(position, velocity, acc, + obstacle->kf_pedestrian_tracker(), total_time, + &left_points, &right_points); + int start_index = NumOfTrajectories(); + + Trajectory left_trajectory = GenerateTrajectory(left_points); + Trajectory right_trajectory = GenerateTrajectory(right_points); + trajectories_.push_back(std::move(left_trajectory)); + trajectories_.push_back(std::move(right_trajectory)); + SetEqualProbability(probability, start_index); +} + +void RegionalPredictor::DrawStillTrajectory( + const Eigen::Vector2d& position, const double heading, const double speed, + const double total_time, std::vector* points) { + double delta_ts = FLAGS_prediction_freq; + double x = position[0]; + double y = position[1]; + double direction_x = std::cos(heading); + double direction_y = std::sin(heading); + for (int i = 0; i < static_cast(total_time / delta_ts); ++i) { + TrajectoryPoint point; + point.mutable_path_point()->set_x(x); + point.mutable_path_point()->set_y(y); + point.mutable_path_point()->set_theta(heading); + point.set_v(speed); + point.set_relative_time(i * delta_ts); + points->push_back(std::move(point)); + x += direction_x * speed * delta_ts; + y += direction_y * speed * delta_ts; + } +} + +void RegionalPredictor::DrawMovingTrajectory( + const Eigen::Vector2d& position, const Eigen::Vector2d& velocity, + const Eigen::Vector2d& acceleration, + const apollo::common::math::KalmanFilter& kf, + const double total_time, std::vector* left_points, + std::vector* right_points) { + double delta_ts = FLAGS_prediction_freq; + Eigen::Vector2d vel = velocity; + CompressVector2d(FLAGS_pedestrian_max_speed, &vel); + Eigen::Vector2d acc = acceleration; + CompressVector2d(FLAGS_pedestrian_max_acc, &acc); + double speed = std::hypot(vel[0], vel[1]); + + // candidate point sequences + std::vector middle_points; + std::vector boundary_points; + + TrajectoryPoint starting_point; + starting_point.mutable_path_point()->set_x(0.0); + starting_point.mutable_path_point()->set_y(0.0); + starting_point.set_v(speed); + + Eigen::Vector2d translated_vec(0.0, 0.0); + GetTrajectoryCandidatePoints(translated_vec, vel, acc, kf, total_time, + &middle_points, &boundary_points); + + if (middle_points.empty() || boundary_points.size() < 2) { + ADEBUG << "No valid points found."; + return; + } + + UpdateTrajectoryPoints(starting_point, vel, delta_ts, middle_points, + boundary_points, left_points, right_points); + for (size_t i = 0; i < left_points->size(); ++i) { + apollo::prediction::util::TranslatePoint(position[0], position[1], + &(left_points->operator[](i))); + apollo::prediction::util::TranslatePoint(position[0], position[1], + &(right_points->operator[](i))); + } +} + +void RegionalPredictor::GetTrajectoryCandidatePoints( + const Eigen::Vector2d& position, const Eigen::Vector2d& velocity, + const Eigen::Vector2d& acceleration, + const KalmanFilter& kf_pedestrian_tracker, + const double total_time, std::vector* middle_points, + std::vector* boundary_points) { + double delta_ts = FLAGS_prediction_freq; + KalmanFilter kf = kf_pedestrian_tracker; + // set the control matrix and control vector + Eigen::Matrix P = kf.GetStateCovariance(); + Eigen::Matrix x; + x.setZero(); + kf.SetStateEstimate(x, P); + + Eigen::Matrix B; + B(0, 0) = delta_ts; + B(0, 2) = 0.5 * delta_ts * delta_ts; + B(1, 1) = delta_ts; + B(1, 3) = 0.5 * delta_ts * delta_ts; + Eigen::Matrix u; + u.setZero(); + u(0, 0) = velocity.x(); + u(1, 0) = velocity.y(); + if (FLAGS_enable_pedestrian_acc) { + u(2, 0) = acceleration.x(); + u(3, 0) = acceleration.y(); + } + + kf.SetControlMatrix(B); + + TrajectoryPoint prev_middle_point; + prev_middle_point.mutable_path_point()->set_x(position[0]); + prev_middle_point.mutable_path_point()->set_y(position[1]); + + for (int i = 0; i < static_cast(total_time / delta_ts); ++i) { + kf.Predict(u); + Eigen::Matrix P = kf.GetStateCovariance(); + double ellipse_len_x = std::sqrt(std::fabs(P(0, 0))); + double ellipse_len_y = std::sqrt(std::fabs(P(1, 1))); + ellipse_len_x *= FLAGS_coeff_mul_sigma; + ellipse_len_y *= FLAGS_coeff_mul_sigma; + + Eigen::Matrix state = kf.GetStateEstimate(); + double middle_point_x = state(0, 0); + double middle_point_y = state(1, 0); + TrajectoryPoint middle_point; + middle_point.mutable_path_point()->set_x(middle_point_x); + middle_point.mutable_path_point()->set_y(middle_point_y); + TrajectoryPoint boundary_point_1; + TrajectoryPoint boundary_point_2; + Eigen::Vector2d direction = + GetUnitVector2d(prev_middle_point, middle_point); + GetTwoEllipsePoints(middle_point_x, middle_point_y, direction[0], + direction[1], ellipse_len_x, ellipse_len_y, + &boundary_point_1, &boundary_point_2); + prev_middle_point = middle_point; + + middle_points->push_back(std::move(middle_point)); + boundary_points->push_back(std::move(boundary_point_1)); + boundary_points->push_back(std::move(boundary_point_2)); + } +} + +void RegionalPredictor::UpdateTrajectoryPoints( + const TrajectoryPoint& starting_point, const Eigen::Vector2d& velocity, + const double delta_ts, const std::vector& middle_points, + const std::vector& boundary_points, + std::vector* left_points, + std::vector* right_points) { + if (2 * middle_points.size() != boundary_points.size()) { + AWARN << "Middle and ellipse points sizes not match"; + } + double speed = std::hypot(velocity[0], velocity[1]); + double left_heading = std::atan2(velocity[1], velocity[0]); + double right_heading = std::atan2(velocity[1], velocity[0]); + + TrajectoryPoint left_starting_point = starting_point; + left_points->push_back(std::move(left_starting_point)); + TrajectoryPoint right_starting_point = starting_point; + right_points->push_back(std::move(right_starting_point)); + + int left_i = 0; + int right_i = 0; + for (size_t i = 0; i < middle_points.size(); ++i) { + TrajectoryPoint prev_middle_point = starting_point; + if (i > 0) { + prev_middle_point = middle_points[i - 1]; + } + Eigen::Vector2d middle_direction = + GetUnitVector2d(prev_middle_point, middle_points[i]); + if (2 * i > boundary_points.size()) { + break; + } + TrajectoryPoint boundary_point_1 = boundary_points[2 * i]; + InsertTrajectoryPoint(prev_middle_point, middle_direction, boundary_point_1, + speed, delta_ts, &left_i, &right_i, &left_heading, + &right_heading, left_points, right_points); + if (2 * i + 1 >= boundary_points.size()) { + break; + } + TrajectoryPoint boundary_point_2 = boundary_points[2 * i + 1]; + InsertTrajectoryPoint(prev_middle_point, middle_direction, boundary_point_2, + speed, delta_ts, &left_i, &right_i, &left_heading, + &right_heading, left_points, right_points); + } + + left_points->back().set_v(speed); + left_points->back().set_relative_time(left_i * delta_ts); + left_points->back().mutable_path_point()->set_theta(left_heading); + + right_points->back().set_v(speed); + right_points->back().set_relative_time(right_i * delta_ts); + right_points->back().mutable_path_point()->set_theta(right_heading); +} + +void RegionalPredictor::InsertTrajectoryPoint( + const TrajectoryPoint& prev_middle_point, + const Eigen::Vector2d& middle_direction, + const TrajectoryPoint& boundary_point, const double speed, + const double delta_ts, int* left_i, int* right_i, double* left_heading, + double* right_heading, std::vector* left_points, + std::vector* right_points) { + Eigen::Vector2d boundary_direction = + GetUnitVector2d(prev_middle_point, boundary_point); + double cross_product = CrossProduct(boundary_direction, middle_direction); + if (cross_product < 0.0) { + if (!left_points->empty()) { + TrajectoryPoint& prev_point = left_points->back(); + Eigen::Vector2d dir = GetUnitVector2d(prev_point, boundary_point); + *left_heading = std::atan2(dir[1], dir[0]); + prev_point.mutable_path_point()->set_theta(*left_heading); + prev_point.set_v(speed); + prev_point.set_relative_time((*left_i) * delta_ts); + ++(*left_i); + } + left_points->push_back(boundary_point); + } else { + if (!right_points->empty()) { + TrajectoryPoint& prev_point = right_points->back(); + Eigen::Vector2d dir = GetUnitVector2d(prev_point, boundary_point); + *right_heading = std::atan2(dir[1], dir[0]); + prev_point.mutable_path_point()->set_theta(*right_heading); + prev_point.set_v(speed); + prev_point.set_relative_time((*right_i) * delta_ts); + ++(*right_i); + } + right_points->push_back(boundary_point); + } +} + +void RegionalPredictor::GetTwoEllipsePoints( + const double position_x, const double position_y, const double direction_x, + const double direction_y, const double ellipse_len_x, + const double ellipse_len_y, TrajectoryPoint* ellipse_point_1, + TrajectoryPoint* ellipse_point_2) { + // vertical case + if (std::fabs(direction_x) <= std::numeric_limits::epsilon()) { + ellipse_point_1->mutable_path_point()->set_x(position_x - ellipse_len_x); + ellipse_point_1->mutable_path_point()->set_y(position_y); + ellipse_point_2->mutable_path_point()->set_x(position_x + ellipse_len_x); + ellipse_point_2->mutable_path_point()->set_y(position_y); + return; + } + // horizontal case + if (std::fabs(direction_y) <= std::numeric_limits::epsilon()) { + ellipse_point_1->mutable_path_point()->set_x(position_x); + ellipse_point_1->mutable_path_point()->set_y(position_y + ellipse_len_y); + ellipse_point_2->mutable_path_point()->set_x(position_x); + ellipse_point_2->mutable_path_point()->set_y(position_y - ellipse_len_y); + return; + } + // general case + std::vector coefficients; + GetQuadraticCoefficients(position_x, position_y, direction_x, direction_y, + ellipse_len_x, ellipse_len_y, &coefficients); + std::pair roots(position_x, position_y); + apollo::prediction::util::SolveQuadraticEquation(coefficients, &roots); + const double temp_p = 0.0 - direction_x / direction_y; + const double temp_q = position_y - temp_p * position_x; + + const double ellipse_point_1_x = roots.first; + const double ellipse_point_2_x = roots.second; + + const double ellipse_point_1_y = temp_p * ellipse_point_1_x + temp_q; + const double ellipse_point_2_y = temp_p * ellipse_point_2_x + temp_q; + + ellipse_point_1->mutable_path_point()->set_x(ellipse_point_1_x); + ellipse_point_1->mutable_path_point()->set_y(ellipse_point_1_y); + ellipse_point_2->mutable_path_point()->set_x(ellipse_point_2_x); + ellipse_point_2->mutable_path_point()->set_y(ellipse_point_2_y); +} + +void RegionalPredictor::GetQuadraticCoefficients( + const double position_x, const double position_y, const double direction_x, + const double direction_y, const double ellipse_len_x, + const double ellipse_len_y, std::vector* coefficients) { + coefficients->clear(); + const double temp_p = 0.0 - direction_x / direction_y; + const double temp_q = position_y - temp_p * position_x; + + // three coefficients a, b, c for the equation a x^2 + b x + c = 0 + const double coefficient_a = ellipse_len_y * ellipse_len_y + + ellipse_len_x * ellipse_len_x * temp_p * temp_p; + + const double coefficient_b = + 0.0 - 2.0 * position_x * ellipse_len_y * ellipse_len_y + + 2.0 * temp_p * (temp_q - position_y) * ellipse_len_x * ellipse_len_x; + + const double coefficient_c = + ellipse_len_x * ellipse_len_x * (temp_q - position_y) * + (temp_q - position_y) - + ellipse_len_x * ellipse_len_x * ellipse_len_y * ellipse_len_y + + ellipse_len_y * ellipse_len_y * position_x * position_x; + + coefficients->push_back(std::move(coefficient_a)); + coefficients->push_back(std::move(coefficient_b)); + coefficients->push_back(std::move(coefficient_c)); +} + +void RegionalPredictor::UpdateHeading(const TrajectoryPoint& curr_point, + std::vector* points) { + if (points->empty()) { + return; + } + TrajectoryPoint& prev_point = points->back(); + const double delta_x = + curr_point.path_point().x() - prev_point.path_point().x(); + const double delta_y = + curr_point.path_point().y() - prev_point.path_point().y(); + prev_point.mutable_path_point()->set_theta(std::atan2(delta_y, delta_x)); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/predictor/pedestrian/regional_predictor.h b/modules/prediction/predictor/pedestrian/regional_predictor.h new file mode 100644 index 00000000000..c728400ff23 --- /dev/null +++ b/modules/prediction/predictor/pedestrian/regional_predictor.h @@ -0,0 +1,119 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Define pedestrian predictor + */ + +#ifndef MODULES_PREDICTION_PREDICTOR_PEDESTRIAN_REGIONAL_PREDICTOR_H_ +#define MODULES_PREDICTION_PREDICTOR_PEDESTRIAN_REGIONAL_PREDICTOR_H_ + +#include + +#include "Eigen/Dense" + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/prediction/predictor/predictor.h" + +namespace apollo { +namespace prediction { + +class RegionalPredictor : public Predictor { + public: + /** + * @brief Constructor + */ + RegionalPredictor() = default; + + /** + * @brief Destructor + */ + virtual ~RegionalPredictor() = default; + + /** + * @brief Make prediction + * @param Obstacle pointer + */ + void Predict(Obstacle* obstacle) override; + + void GenerateStillTrajectory(const Obstacle* obstacle, double probability); + + void GenerateMovingTrajectory(const Obstacle* obstacle, double probability); + + private: + void DrawStillTrajectory( + const Eigen::Vector2d& position, const double heading, const double speed, + const double total_time, + std::vector* points); + + void DrawMovingTrajectory( + const Eigen::Vector2d& position, const Eigen::Vector2d& velocity, + const Eigen::Vector2d& acceleration, + const apollo::common::math::KalmanFilter& kf, + const double total_time, + std::vector* left_points, + std::vector* right_points); + + void GetTrajectoryCandidatePoints( + const Eigen::Vector2d& position, const Eigen::Vector2d& velocity, + const Eigen::Vector2d& acceleration, + const apollo::common::math::KalmanFilter& kf, + const double total_time, + std::vector* middle_points, + std::vector* boundary_points); + + void UpdateTrajectoryPoints( + const apollo::common::TrajectoryPoint& starting_point, + const Eigen::Vector2d& velocity, const double delta_ts, + const std::vector& middle_points, + const std::vector& boundary_points, + std::vector* left_points, + std::vector* right_points); + + void InsertTrajectoryPoint( + const apollo::common::TrajectoryPoint& prev_middle_point, + const Eigen::Vector2d& middle_direction, + const apollo::common::TrajectoryPoint& boundary_point, const double speed, + const double delta_ts, int* left_i, int* right_i, double* left_heading, + double* right_heading, + std::vector* left_points, + std::vector* right_points); + + void GetTwoEllipsePoints(const double position_x, const double position_y, + const double direction_x, const double direction_y, + const double ellipse_len_x, + const double ellipse_len_y, + apollo::common::TrajectoryPoint* ellipse_point_1, + apollo::common::TrajectoryPoint* ellipse_point_2); + + void GetQuadraticCoefficients(const double position_x, + const double position_y, + const double direction_x, + const double direction_y, + const double ellipse_len_1, + const double ellipse_len_2, + std::vector* coefficients); + + void UpdateHeading(const apollo::common::TrajectoryPoint& curr_point, + std::vector* points); +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_PREDICTOR_PEDESTRIAN_REGIONAL_PREDICTOR_H_ diff --git a/modules/prediction/predictor/pedestrian/regional_predictor_test.cc b/modules/prediction/predictor/pedestrian/regional_predictor_test.cc new file mode 100644 index 00000000000..fb8aef62546 --- /dev/null +++ b/modules/prediction/predictor/pedestrian/regional_predictor_test.cc @@ -0,0 +1,125 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/predictor/pedestrian/regional_predictor.h" + +#include +#include + +#include "gtest/gtest.h" + +#include "modules/perception/proto/perception_obstacle.pb.h" +#include "modules/prediction/proto/prediction_obstacle.pb.h" + +#include "modules/common/util/file.h" +#include "modules/map/hdmap/hdmap.h" +#include "modules/prediction/common/kml_map_based_test.h" +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/container/obstacles/obstacle.h" +#include "modules/prediction/container/obstacles/obstacles_container.h" + +namespace apollo { +namespace prediction { + +class RegionalPredictorTest : public KMLMapBasedTest { + public: + virtual void SetUp() { + std::string file = + "modules/prediction/testdata/multiple_perception_pedestrians.pb.txt"; + apollo::common::util::GetProtoFromFile(file, &perception_obstacles_); + FLAGS_p_var = 0.1; + FLAGS_q_var = 0.01; + FLAGS_r_var = 0.25; + } + + protected: + apollo::perception::PerceptionObstacles perception_obstacles_; +}; + +TEST_F(RegionalPredictorTest, MovingPedestrian) { + EXPECT_DOUBLE_EQ(perception_obstacles_.header().timestamp_sec(), + 1501183430.161906); + apollo::perception::PerceptionObstacle perception_obstacle = + perception_obstacles_.perception_obstacle(0); + EXPECT_EQ(perception_obstacle.id(), 101); + ObstaclesContainer container; + container.Insert(perception_obstacles_); + Obstacle* obstacle_ptr = container.GetObstacle(101); + EXPECT_TRUE(obstacle_ptr != nullptr); + RegionalPredictor predictor; + predictor.Predict(obstacle_ptr); + const std::vector& trajectories = predictor.trajectories(); + EXPECT_EQ(trajectories.size(), 2); + EXPECT_NEAR(trajectories[0].trajectory_point(9).path_point().x(), -438.159, + 0.001); + EXPECT_NEAR(trajectories[0].trajectory_point(9).path_point().y(), -157.404, + 0.001); + EXPECT_NEAR(trajectories[0].trajectory_point(19).path_point().x(), -436.642, + 0.001); + EXPECT_NEAR(trajectories[0].trajectory_point(19).path_point().y(), -152.635, + 0.001); + EXPECT_NEAR(trajectories[1].trajectory_point(9).path_point().x(), -436.521, + 0.001); + EXPECT_NEAR(trajectories[1].trajectory_point(9).path_point().y(), -158.000, + 0.001); + EXPECT_NEAR(trajectories[1].trajectory_point(19).path_point().x(), -434.618, + 0.001); + EXPECT_NEAR(trajectories[1].trajectory_point(19).path_point().y(), -153.371, + 0.001); +} + +TEST_F(RegionalPredictorTest, StationaryPedestrian) { + EXPECT_DOUBLE_EQ(perception_obstacles_.header().timestamp_sec(), + 1501183430.161906); + apollo::perception::PerceptionObstacle perception_obstacle = + perception_obstacles_.perception_obstacle(1); + EXPECT_EQ(perception_obstacle.id(), 102); + ObstaclesContainer container; + container.Insert(perception_obstacles_); + Obstacle* obstacle_ptr = container.GetObstacle(102); + EXPECT_TRUE(obstacle_ptr != nullptr); + RegionalPredictor predictor; + predictor.Predict(obstacle_ptr); + const std::vector& trajectories = predictor.trajectories(); + EXPECT_EQ(trajectories.size(), FLAGS_num_trajectory_still_pedestrian); + EXPECT_NEAR(trajectories[0].trajectory_point(99).path_point().x(), -412.547, + 0.001); + EXPECT_NEAR(trajectories[0].trajectory_point(99).path_point().y(), -182.382, + 0.001); + EXPECT_NEAR(trajectories[1].trajectory_point(99).path_point().x(), -412.052, + 0.001); + EXPECT_NEAR(trajectories[1].trajectory_point(99).path_point().y(), -183.239, + 0.001); + EXPECT_NEAR(trajectories[2].trajectory_point(99).path_point().x(), -411.062, + 0.001); + EXPECT_NEAR(trajectories[2].trajectory_point(99).path_point().y(), -183.239, + 0.001); + EXPECT_NEAR(trajectories[3].trajectory_point(99).path_point().x(), -410.567, + 0.001); + EXPECT_NEAR(trajectories[3].trajectory_point(99).path_point().y(), -182.382, + 0.001); + EXPECT_NEAR(trajectories[4].trajectory_point(99).path_point().x(), -411.062, + 0.001); + EXPECT_NEAR(trajectories[4].trajectory_point(99).path_point().y(), -181.525, + 0.001); + EXPECT_NEAR(trajectories[5].trajectory_point(99).path_point().x(), -412.052, + 0.001); + EXPECT_NEAR(trajectories[5].trajectory_point(99).path_point().y(), -181.525, + 0.001); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/predictor/predictor.cc b/modules/prediction/predictor/predictor.cc new file mode 100644 index 00000000000..06dc7b403a1 --- /dev/null +++ b/modules/prediction/predictor/predictor.cc @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/predictor/predictor.h" + +#include + +namespace apollo { +namespace prediction { + +const std::vector& Predictor::trajectories() { + return trajectories_; +} + +int Predictor::NumOfTrajectories() { return trajectories_.size(); } + +Trajectory Predictor::GenerateTrajectory( + const std::vector& points) { + Trajectory trajectory; + *trajectory.mutable_trajectory_point() = {points.begin(), points.end()}; + return trajectory; +} + +void Predictor::SetEqualProbability(double probability, int start_index) { + int num = NumOfTrajectories(); + if (start_index >= 0 && num > start_index) { + probability /= static_cast(num - start_index); + for (int i = start_index; i < num; ++i) { + trajectories_[i].set_probability(probability); + } + } +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/predictor/predictor.h b/modules/prediction/predictor/predictor.h new file mode 100644 index 00000000000..db789eb76cc --- /dev/null +++ b/modules/prediction/predictor/predictor.h @@ -0,0 +1,86 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Define the data container base class + */ + +#ifndef MODULES_PREDICTION_PREDICTOR_PREDICTOR_H_ +#define MODULES_PREDICTION_PREDICTOR_PREDICTOR_H_ + +#include + +#include "modules/prediction/proto/prediction_obstacle.pb.h" + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/prediction/container/obstacles/obstacle.h" + +/** + * @namespace apollo::prediction + * @brief apollo::prediction + */ +namespace apollo { +namespace prediction { + +class Predictor { + public: + /** + * @brief Constructor + */ + Predictor() = default; + + /** + * @brief Destructor + */ + virtual ~Predictor() = default; + + /** + * @brief Get prediction trajectories + */ + virtual const std::vector& trajectories(); + + /** + * @brief Make prediction + * @param Obstacle pointer + */ + virtual void Predict(Obstacle* obstacle) = 0; + + /** + * @brief Get trajectory size + * @return Size of trajectories + */ + int NumOfTrajectories(); + + protected: + /** + * @brief Generate trajectory from trajectory points + * @param A vector of trajectory points + * @return Generated trajectory + */ + static Trajectory GenerateTrajectory( + const std::vector& points); + + void SetEqualProbability(double probability, int start_index); + + protected: + std::vector trajectories_; +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_PREDICTOR_PREDICTOR_H_ diff --git a/modules/prediction/predictor/predictor_manager.cc b/modules/prediction/predictor/predictor_manager.cc new file mode 100644 index 00000000000..1d143a297ba --- /dev/null +++ b/modules/prediction/predictor/predictor_manager.cc @@ -0,0 +1,174 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/predictor/predictor_manager.h" + +#include + +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/container/container_manager.h" +#include "modules/prediction/container/obstacles/obstacles_container.h" +#include "modules/prediction/predictor/pedestrian/regional_predictor.h" +#include "modules/prediction/predictor/vehicle/free_move_predictor.h" +#include "modules/prediction/predictor/vehicle/lane_sequence_predictor.h" + +namespace apollo { +namespace prediction { + +using apollo::perception::PerceptionObstacles; +using apollo::perception::PerceptionObstacle; +using apollo::common::adapter::AdapterConfig; + +PredictorManager::PredictorManager() { RegisterPredictors(); } + +void PredictorManager::RegisterPredictors() { + RegisterPredictor(ObstacleConf::LANE_SEQUENCE_PREDICTOR); + RegisterPredictor(ObstacleConf::FREE_MOVE_PREDICTOR); + RegisterPredictor(ObstacleConf::REGIONAL_PREDICTOR); +} + +void PredictorManager::Init(const PredictionConf& config) { + for (const auto& obstacle_conf : config.obstacle_conf()) { + if (!obstacle_conf.has_obstacle_type()) { + ADEBUG << "Obstacle config [" << obstacle_conf.ShortDebugString() + << "] has not defined obstacle type."; + continue; + } + + if (obstacle_conf.obstacle_type() == PerceptionObstacle::VEHICLE) { + if (!obstacle_conf.has_obstacle_status() || + !obstacle_conf.has_predictor_type()) { + ADEBUG << "Vehicle obstacle config [" + << obstacle_conf.ShortDebugString() + << "] has not defined obstacle status or predictor type."; + continue; + } else if (obstacle_conf.obstacle_status() == ObstacleConf::ON_LANE) { + vehicle_on_lane_predictor_ = obstacle_conf.predictor_type(); + } else if (obstacle_conf.obstacle_status() == ObstacleConf::OFF_LANE) { + vehicle_off_lane_predictor_ = obstacle_conf.predictor_type(); + } + } else if (obstacle_conf.obstacle_type() == + PerceptionObstacle::PEDESTRIAN) { + pedestrian_predictor_ = obstacle_conf.predictor_type(); + } + } + + AINFO << "Defined vehicle on lane obstacle predictor [" + << vehicle_on_lane_predictor_ << "]."; + AINFO << "Defined vehicle off lane obstacle predictor [" + << vehicle_off_lane_predictor_ << "]."; + AINFO << "Defined pedestrian obstacle predictor [" << pedestrian_predictor_ + << "]."; + AINFO << "Defined default obstacle predictor [" << default_predictor_ << "]."; +} + +Predictor* PredictorManager::GetPredictor( + const ObstacleConf::PredictorType& type) { + auto it = predictors_.find(type); + return it != predictors_.end() ? it->second.get() : nullptr; +} + +void PredictorManager::Run(const PerceptionObstacles& perception_obstacles) { + prediction_obstacles_.Clear(); + ObstaclesContainer* container = dynamic_cast( + ContainerManager::instance()->GetContainer( + AdapterConfig::PERCEPTION_OBSTACLES)); + CHECK_NOTNULL(container); + + Predictor* predictor = nullptr; + for (const auto& perception_obstacle : + perception_obstacles.perception_obstacle()) { + PredictionObstacle prediction_obstacle; + prediction_obstacle.set_timestamp(perception_obstacle.timestamp()); + int id = perception_obstacle.id(); + Obstacle* obstacle = container->GetObstacle(id); + if (obstacle != nullptr) { + switch (perception_obstacle.type()) { + case PerceptionObstacle::VEHICLE: { + if (obstacle->IsOnLane()) { + predictor = GetPredictor(vehicle_on_lane_predictor_); + } else { + predictor = GetPredictor(vehicle_off_lane_predictor_); + } + break; + } + case PerceptionObstacle::PEDESTRIAN: { + predictor = GetPredictor(pedestrian_predictor_); + break; + } + default: { + if (obstacle->IsOnLane()) { + predictor = GetPredictor(vehicle_on_lane_predictor_); + } else { + predictor = GetPredictor(vehicle_off_lane_predictor_); + } + break; + } + } + + if (predictor != nullptr) { + predictor->Predict(obstacle); + for (const auto& trajectory : predictor->trajectories()) { + prediction_obstacle.add_trajectory()->CopyFrom(trajectory); + } + } + prediction_obstacle.set_timestamp(obstacle->timestamp()); + } + + prediction_obstacle.set_predicted_period(FLAGS_prediction_duration); + prediction_obstacle.mutable_perception_obstacle()->CopyFrom( + perception_obstacle); + + prediction_obstacles_.add_prediction_obstacle()->CopyFrom( + prediction_obstacle); + } + prediction_obstacles_.set_perception_error_code( + perception_obstacles.error_code()); +} + +std::unique_ptr PredictorManager::CreatePredictor( + const ObstacleConf::PredictorType& type) { + std::unique_ptr predictor_ptr(nullptr); + switch (type) { + case ObstacleConf::LANE_SEQUENCE_PREDICTOR: { + predictor_ptr.reset(new LaneSequencePredictor()); + break; + } + case ObstacleConf::FREE_MOVE_PREDICTOR: { + predictor_ptr.reset(new FreeMovePredictor()); + break; + } + case ObstacleConf::REGIONAL_PREDICTOR: { + predictor_ptr.reset(new RegionalPredictor()); + break; + } + default: { break; } + } + return predictor_ptr; +} + +void PredictorManager::RegisterPredictor( + const ObstacleConf::PredictorType& type) { + predictors_[type] = CreatePredictor(type); + AINFO << "Predictor [" << type << "] is registered."; +} + +const PredictionObstacles& PredictorManager::prediction_obstacles() { + return prediction_obstacles_; +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/predictor/predictor_manager.h b/modules/prediction/predictor/predictor_manager.h new file mode 100644 index 00000000000..cb984b40217 --- /dev/null +++ b/modules/prediction/predictor/predictor_manager.h @@ -0,0 +1,116 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Use predictor manager to manage all predictors + */ + +#ifndef MODULES_PREDICTION_PREDICTOR_PREDICTOR_MANAGER_H_ +#define MODULES_PREDICTION_PREDICTOR_PREDICTOR_MANAGER_H_ + +#include +#include + +#include "modules/perception/proto/perception_obstacle.pb.h" +#include "modules/prediction/proto/prediction_conf.pb.h" +#include "modules/prediction/proto/prediction_obstacle.pb.h" + +#include "modules/common/macro.h" +#include "modules/prediction/predictor/predictor.h" + +/** + * @namespace apollo::prediction + * @brief apollo::prediction + */ +namespace apollo { +namespace prediction { + +class PredictorManager { + public: + /** + * @brief Destructor + */ + virtual ~PredictorManager() = default; + + /** + * @brief Initializer + * @param Prediction config + */ + void Init(const PredictionConf& config); + + /** + * @brief Get predictor + * @return Pointer to the predictor + */ + Predictor* GetPredictor(const ObstacleConf::PredictorType& type); + + /** + * @brief Execute the predictor generation on perception obstacles + * @param Perception obstacles + */ + void Run(const perception::PerceptionObstacles& perception_obstacles); + + /** + * @brief Get prediction obstacles + * @return Prediction obstacles + */ + const PredictionObstacles& prediction_obstacles(); + + private: + /** + * @brief Register a predictor by type + * @param Predictor type + */ + void RegisterPredictor(const ObstacleConf::PredictorType& type); + + /** + * @brief Create a predictor by type + * @param Predictor type + * @return A unique pointer to the predictor + */ + std::unique_ptr CreatePredictor( + const ObstacleConf::PredictorType& type); + + /** + * @brief Register all predictors + */ + void RegisterPredictors(); + + private: + std::map> predictors_; + + ObstacleConf::PredictorType vehicle_on_lane_predictor_ = + ObstacleConf::LANE_SEQUENCE_PREDICTOR; + + ObstacleConf::PredictorType vehicle_off_lane_predictor_ = + ObstacleConf::FREE_MOVE_PREDICTOR; + + ObstacleConf::PredictorType pedestrian_predictor_ = + ObstacleConf::REGIONAL_PREDICTOR; + + ObstacleConf::PredictorType default_predictor_ = + ObstacleConf::FREE_MOVE_PREDICTOR; + + PredictionObstacles prediction_obstacles_; + + DECLARE_SINGLETON(PredictorManager) +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_PREDICTOR_PREDICTOR_MANAGER_H_ diff --git a/modules/prediction/predictor/predictor_manager_test.cc b/modules/prediction/predictor/predictor_manager_test.cc new file mode 100644 index 00000000000..1c640c2c4be --- /dev/null +++ b/modules/prediction/predictor/predictor_manager_test.cc @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/predictor/predictor_manager.h" + +#include + +#include "modules/prediction/proto/prediction_conf.pb.h" + +#include "gtest/gtest.h" +#include "modules/common/util/file.h" + +namespace apollo { +namespace prediction { + +class PredictorManagerTest : public ::testing::Test { + public: + void SetUp() override { manager_ = PredictorManager::instance(); } + + protected: + PredictorManager *manager_; + PredictionConf conf_; +}; + +TEST_F(PredictorManagerTest, GetPredictor) { + std::string conf_file = "modules/prediction/testdata/prediction_conf.pb.txt"; + CHECK(apollo::common::util::GetProtoFromFile(conf_file, &conf_)) + << "Failed to load " << conf_file; + + manager_->Init(conf_); + + const ObstacleConf::PredictorType type = ObstacleConf::FREE_MOVE_PREDICTOR; + EXPECT_TRUE(manager_->GetPredictor(type) != nullptr); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/predictor/vehicle/BUILD b/modules/prediction/predictor/vehicle/BUILD new file mode 100644 index 00000000000..bb9863619e8 --- /dev/null +++ b/modules/prediction/predictor/vehicle/BUILD @@ -0,0 +1,88 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "lane_sequence_predictor", + srcs = ["lane_sequence_predictor.cc"], + hdrs = ["lane_sequence_predictor.h"], + deps = [ + "//modules/common:log", + "//modules/common/adapters/proto:adapter_config_proto", + "//modules/common/math:math_utils", + "//modules/common/proto:pnc_point_proto", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/common:prediction_map", + "//modules/prediction/container:container_manager", + "//modules/prediction/container/obstacles:obstacles_container", + "//modules/prediction/container/pose:pose_container", + "//modules/prediction/predictor", + "//modules/prediction/proto:lane_graph_proto", + "@eigen//:eigen", + ], +) + +cc_library( + name = "free_move_predictor", + srcs = ["free_move_predictor.cc"], + hdrs = ["free_move_predictor.h"], + deps = [ + "//modules/common:log", + "//modules/common/math:math_utils", + "//modules/common/proto:pnc_point_proto", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/common:prediction_util", + "//modules/prediction/predictor", + "//modules/prediction/proto:feature_proto", + "@eigen//:eigen", + ], +) + +cc_test( + name = "free_move_predictor_test", + size = "small", + srcs = [ + "free_move_predictor_test.cc", + ], + data = [ + "//modules/prediction:prediction_data", + "//modules/prediction:prediction_testdata", + ], + deps = [ + "//modules/common/configs:config_gflags", + "//modules/common/util", + "//modules/perception/proto:perception_proto", + "//modules/prediction/common:kml_map_based_test", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/common:road_graph", + "//modules/prediction/container/obstacles:obstacles_container", + "//modules/prediction/predictor/vehicle:free_move_predictor", + "//modules/prediction/proto:prediction_proto", + "@gtest//:main", + ], +) + +cc_test( + name = "lane_sequence_predictor_test", + size = "small", + srcs = [ + "lane_sequence_predictor_test.cc", + ], + data = [ + "//modules/prediction:prediction_data", + "//modules/prediction:prediction_testdata", + ], + deps = [ + "//modules/common/configs:config_gflags", + "//modules/common/util", + "//modules/prediction/common:kml_map_based_test", + "//modules/prediction/common:prediction_gflags", + "//modules/prediction/container/obstacles:obstacles_container", + "//modules/prediction/evaluator/vehicle:mlp_evaluator", + "//modules/prediction/predictor/vehicle:lane_sequence_predictor", + "//modules/prediction/proto:prediction_proto", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/prediction/predictor/vehicle/free_move_predictor.cc b/modules/prediction/predictor/vehicle/free_move_predictor.cc new file mode 100644 index 00000000000..dada8aedbe4 --- /dev/null +++ b/modules/prediction/predictor/vehicle/free_move_predictor.cc @@ -0,0 +1,168 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/predictor/vehicle/free_move_predictor.h" + +#include +#include +#include +#include +#include "Eigen/Dense" + +#include "modules/common/log.h" +#include "modules/common/math/math_utils.h" +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/common/prediction_util.h" + +namespace apollo { +namespace prediction { + +using apollo::common::PathPoint; +using apollo::common::TrajectoryPoint; +using apollo::common::math::KalmanFilter; + +void FreeMovePredictor::Predict(Obstacle* obstacle) { + trajectories_.clear(); + CHECK_NOTNULL(obstacle); + CHECK_GT(obstacle->history_size(), 0); + + const Feature& feature = obstacle->latest_feature(); + if (!feature.has_position() || !feature.has_velocity() || + !feature.position().has_x() || !feature.position().has_y()) { + AERROR << "Obstacle [" << obstacle->id() + << " is missing position or velocity"; + return; + } + + Eigen::Vector2d position(feature.position().x(), feature.position().y()); + Eigen::Vector2d velocity(feature.velocity().x(), feature.velocity().y()); + Eigen::Vector2d acc(feature.acceleration().x(), feature.acceleration().y()); + if (FLAGS_enable_kf_tracking) { + position(0) = feature.t_position().x(); + position(1) = feature.t_position().y(); + velocity(0) = feature.t_velocity().x(); + velocity(1) = feature.t_velocity().y(); + acc(0) = feature.t_acceleration().x(); + acc(1) = feature.t_acceleration().y(); + } + + std::vector points(0); + DrawFreeMoveTrajectoryPoints( + position, velocity, acc, obstacle->kf_motion_tracker(), + FLAGS_prediction_duration, FLAGS_prediction_freq, &points); + + Trajectory trajectory = GenerateTrajectory(points); + int start_index = 0; + trajectories_.push_back(std::move(trajectory)); + SetEqualProbability(1.0, start_index); + ADEBUG << "Obstacle [" << obstacle->id() << "] has " << trajectories_.size() + << " trajectories."; +} + +void FreeMovePredictor::DrawFreeMoveTrajectoryPoints( + const Eigen::Vector2d& position, const Eigen::Vector2d& velocity, + const Eigen::Vector2d& acc, const KalmanFilter& kf, + double total_time, double freq, std::vector* points) { + double theta = std::atan2(velocity(1), velocity(0)); + + Eigen::Matrix state(kf.GetStateEstimate()); + state(0, 0) = 0.0; + state(1, 0) = 0.0; + state(2, 0) = velocity(0); + state(3, 0) = velocity(1); + state(4, 0) = common::math::Clamp(acc(0), FLAGS_min_acc, FLAGS_max_acc); + state(5, 0) = common::math::Clamp(acc(1), FLAGS_min_acc, FLAGS_max_acc); + + Eigen::Matrix transition(kf.GetTransitionMatrix()); + transition(0, 2) = freq; + transition(0, 4) = 0.5 * freq * freq; + transition(1, 3) = freq; + transition(1, 5) = 0.5 * freq * freq; + transition(2, 4) = freq; + transition(3, 5) = freq; + + double x = state(0, 0); + double y = state(1, 0); + double v_x = state(2, 0); + double v_y = state(3, 0); + double acc_x = state(4, 0); + double acc_y = state(5, 0); + for (size_t i = 0; i < static_cast(total_time / freq); ++i) { + double speed = std::hypot(v_x, v_y); + if (speed <= std::numeric_limits::epsilon()) { + speed = 0.0; + v_x = 0.0; + v_y = 0.0; + acc_x = 0.0; + acc_y = 0.0; + } else if (speed > FLAGS_max_speed) { + speed = FLAGS_max_speed; + } + + // update theta + if (speed > std::numeric_limits::epsilon()) { + if (points->size() > 0) { + PathPoint* prev_point = points->back().mutable_path_point(); + theta = std::atan2(y - prev_point->y(), x - prev_point->x()); + prev_point->set_theta(theta); + } + } else { + if (points->size() > 0) { + theta = points->back().path_point().theta(); + } + } + + // update velocity and acc + state(2, 0) = v_x; + state(3, 0) = v_y; + state(4, 0) = acc_x; + state(5, 0) = acc_y; + + // update position + x = state(0, 0); + y = state(1, 0); + + // Generate trajectory point + TrajectoryPoint trajectory_point; + PathPoint path_point; + path_point.set_x(x); + path_point.set_y(y); + path_point.set_z(0.0); + path_point.set_theta(theta); + trajectory_point.mutable_path_point()->CopyFrom(path_point); + trajectory_point.set_v(speed); + trajectory_point.set_a(std::hypot(acc_x, acc_y)); + trajectory_point.set_relative_time(static_cast(i) * freq); + points->emplace_back(std::move(trajectory_point)); + + // Update position, velocity and acceleration + state = transition * state; + x = state(0, 0); + y = state(1, 0); + v_x = state(2, 0); + v_y = state(3, 0); + acc_x = state(4, 0); + acc_y = state(5, 0); + } + + for (size_t i = 0; i < points->size(); ++i) { + apollo::prediction::util::TranslatePoint(position[0], position[1], + &(points->operator[](i))); + } +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/predictor/vehicle/free_move_predictor.h b/modules/prediction/predictor/vehicle/free_move_predictor.h new file mode 100644 index 00000000000..1279bd80eb4 --- /dev/null +++ b/modules/prediction/predictor/vehicle/free_move_predictor.h @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Define lane sequence predictor + */ + +#ifndef MODULES_PREDICTION_PREDICTOR_VEHICLE_FREE_MOVE_PREDICTOR_H_ +#define MODULES_PREDICTION_PREDICTOR_VEHICLE_FREE_MOVE_PREDICTOR_H_ + +#include + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/prediction/predictor/predictor.h" + +namespace apollo { +namespace prediction { + +class FreeMovePredictor : public Predictor { + public: + /** + * @brief Constructor + */ + FreeMovePredictor() = default; + + /** + * @brief Destructor + */ + virtual ~FreeMovePredictor() = default; + + /** + * @brief Make prediction + * @param Obstacle pointer + */ + void Predict(Obstacle* obstacle) override; + + private: + /** + * @brief Generate free move trajectory + * @param Position + * @param Velocity + * @param Acceleration + * @param Kalman Filter + * @param Total time + * @param Generated trajectory points + */ + void DrawFreeMoveTrajectoryPoints( + const Eigen::Vector2d& position, const Eigen::Vector2d& velocity, + const Eigen::Vector2d& acc, + const common::math::KalmanFilter& kf, double total_time, + double freq, std::vector* points); +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_PREDICTOR_VEHICLE_FREE_MOVE_PREDICTOR_H_ diff --git a/modules/prediction/predictor/vehicle/free_move_predictor_test.cc b/modules/prediction/predictor/vehicle/free_move_predictor_test.cc new file mode 100644 index 00000000000..0696d17e40c --- /dev/null +++ b/modules/prediction/predictor/vehicle/free_move_predictor_test.cc @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/predictor/vehicle/free_move_predictor.h" + +#include +#include + +#include "gtest/gtest.h" + +#include "modules/common/util/file.h" +#include "modules/map/hdmap/hdmap.h" +#include "modules/perception/proto/perception_obstacle.pb.h" +#include "modules/prediction/common/kml_map_based_test.h" +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/container/obstacles/obstacle.h" +#include "modules/prediction/container/obstacles/obstacles_container.h" +#include "modules/prediction/proto/prediction_obstacle.pb.h" + +namespace apollo { +namespace prediction { + +class FreeMovePredictorTest : public KMLMapBasedTest { + public: + FreeMovePredictorTest() { + CHECK(apollo::common::util::GetProtoFromFile( + "modules/prediction/testdata/single_perception_vehicle_offlane.pb.txt", + &perception_obstacles_)); + FLAGS_p_var = 0.1; + FLAGS_q_var = 0.01; + FLAGS_r_var = 0.25; + } + protected: + apollo::perception::PerceptionObstacles perception_obstacles_; +}; + +TEST_F(FreeMovePredictorTest, General) { + EXPECT_DOUBLE_EQ(perception_obstacles_.header().timestamp_sec(), + 1501183430.161906); + apollo::perception::PerceptionObstacle perception_obstacle = + perception_obstacles_.perception_obstacle(0); + EXPECT_EQ(perception_obstacle.id(), 15); + ObstaclesContainer container; + container.Insert(perception_obstacles_); + Obstacle* obstacle_ptr = container.GetObstacle(15); + EXPECT_TRUE(obstacle_ptr != nullptr); + FreeMovePredictor predictor; + predictor.Predict(obstacle_ptr); + const std::vector& trajectories = predictor.trajectories(); + EXPECT_EQ(trajectories.size(), 1); + EXPECT_NEAR( + trajectories[0].trajectory_point(9).path_point().x(), -432.459, 0.001); + EXPECT_NEAR( + trajectories[0].trajectory_point(9).path_point().y(), -156.451, 0.001); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/predictor/vehicle/lane_sequence_predictor.cc b/modules/prediction/predictor/vehicle/lane_sequence_predictor.cc new file mode 100644 index 00000000000..78c47de508e --- /dev/null +++ b/modules/prediction/predictor/vehicle/lane_sequence_predictor.cc @@ -0,0 +1,351 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/predictor/vehicle/lane_sequence_predictor.h" + +#include +#include +#include +#include + +#include "modules/common/adapters/proto/adapter_config.pb.h" + +#include "modules/common/log.h" +#include "modules/common/math/math_utils.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/common/prediction_map.h" +#include "modules/prediction/common/road_graph.h" +#include "modules/prediction/container/container_manager.h" +#include "modules/prediction/container/obstacles/obstacles_container.h" +#include "modules/prediction/container/pose/pose_container.h" + +namespace apollo { +namespace prediction { + +using apollo::common::PathPoint; +using apollo::common::TrajectoryPoint; +using apollo::common::math::KalmanFilter; +using apollo::common::adapter::AdapterConfig; +using apollo::hdmap::LaneInfo; + +void LaneSequencePredictor::Clear() { + trajectories_.clear(); + adc_lane_id_.clear(); + adc_lane_s_ = 0.0; +} + +void LaneSequencePredictor::Predict(Obstacle* obstacle) { + Clear(); + + CHECK_NOTNULL(obstacle); + CHECK_GT(obstacle->history_size(), 0); + + const Feature& feature = obstacle->latest_feature(); + if (!feature.has_lane() || !feature.lane().has_lane_graph()) { + AERROR << "Obstacle [" << obstacle->id() << " has no lane graph."; + return; + } + + std::string lane_id = ""; + if (feature.lane().has_lane_feature()) { + lane_id = feature.lane().lane_feature().lane_id(); + } + int num_lane_sequence = feature.lane().lane_graph().lane_sequence_size(); + std::vector enable_lane_sequence(num_lane_sequence, true); + FilterLaneSequences(feature.lane().lane_graph(), lane_id, + &enable_lane_sequence); + + for (int i = 0; i < num_lane_sequence; ++i) { + const LaneSequence& sequence = feature.lane().lane_graph().lane_sequence(i); + if (sequence.lane_segment_size() <= 0) { + AERROR << "Empty lane segments."; + continue; + } + + if (!enable_lane_sequence[i]) { + ADEBUG << "Lane sequence [" << ToString(sequence) + << "] with probability [" << sequence.probability() + << "] is disqualified."; + continue; + } + + ADEBUG << "Obstacle [" << obstacle->id() + << "] will draw a lane sequence trajectory [" << ToString(sequence) + << "] with probability [" << sequence.probability() << "]."; + + std::string curr_lane_id = sequence.lane_segment(0).lane_id(); + std::vector points; + DrawLaneSequenceTrajectoryPoints(obstacle->kf_lane_tracker(curr_lane_id), + sequence, FLAGS_prediction_duration, + FLAGS_prediction_freq, &points); + + Trajectory trajectory = GenerateTrajectory(points); + trajectory.set_probability(sequence.probability()); + trajectories_.push_back(std::move(trajectory)); + } + ADEBUG << "Obstacle [" << obstacle->id() << "] has total " + << trajectories_.size() << " trajectories."; +} + +void LaneSequencePredictor::FilterLaneSequences( + const LaneGraph& lane_graph, const std::string& lane_id, + std::vector* enable_lane_sequence) { + int num_lane_sequence = lane_graph.lane_sequence_size(); + std::vector lane_change_type(num_lane_sequence, -1); + std::pair change(-1, -1.0); + std::pair all(-1, -1.0); + + // Get ADC status + GetADC(); + + for (int i = 0; i < num_lane_sequence; ++i) { + const LaneSequence& sequence = lane_graph.lane_sequence(i); + + // Get lane change type + lane_change_type[i] = GetLaneChangeType(lane_id, sequence); + + double probability = sequence.probability(); + + if (common::math::DoubleCompare(probability, all.second) > 0 || + (common::math::DoubleCompare(probability, all.second) == 0 && + lane_change_type[i] == 0)) { + all.first = i; + all.second = probability; + } + if (lane_change_type[i] > 0 && + common::math::DoubleCompare(probability, change.second) > 0) { + change.first = i; + change.second = probability; + } + } + + for (int i = 0; i < num_lane_sequence; ++i) { + const LaneSequence& sequence = lane_graph.lane_sequence(i); + + // The obstacle has interference with ADC within a small distance + if (common::math::DoubleCompare(GetLaneChangeDistanceWithADC(sequence), + FLAGS_lane_change_dist) < 0) { + (*enable_lane_sequence)[i] = false; + continue; + } + + double probability = sequence.probability(); + if (common::math::DoubleCompare(probability, + FLAGS_lane_sequence_threshold) < 0 && + i != all.first) { + (*enable_lane_sequence)[i] = false; + } else if (change.first >= 0 && change.first < num_lane_sequence && + lane_change_type[i] > 0 && + lane_change_type[i] != lane_change_type[change.first]) { + (*enable_lane_sequence)[i] = false; + } + } +} + +void LaneSequencePredictor::GetADC() { + ObstaclesContainer* container = dynamic_cast( + ContainerManager::instance()->GetContainer( + AdapterConfig::PERCEPTION_OBSTACLES)); + if (container == nullptr) { + AERROR << "Unavailable obstacle container"; + return; + } + + Obstacle* adc = container->GetObstacle(PoseContainer::ID); + if (adc != nullptr) { + const Feature& feature = adc->latest_feature(); + if (feature.has_lane() && feature.lane().has_lane_feature()) { + adc_lane_id_ = feature.lane().lane_feature().lane_id(); + adc_lane_s_ = feature.lane().lane_feature().lane_s(); + } + if (feature.has_position()) { + adc_position_[0] = feature.position().x(); + adc_position_[1] = feature.position().y(); + } + } +} + +int LaneSequencePredictor::GetLaneChangeType( + const std::string& lane_id, const LaneSequence& lane_sequence) { + PredictionMap* map = PredictionMap::instance(); + + std::string lane_change_id = lane_sequence.lane_segment(0).lane_id(); + if (lane_id == lane_change_id) { + return 0; + } else { + if (map->IsLeftNeighborLane(map->LaneById(lane_change_id), + map->LaneById(lane_id))) { + return 1; + } else if (map->IsRightNeighborLane(map->LaneById(lane_change_id), + map->LaneById(lane_id))) { + return 2; + } + } + return -1; +} + +double LaneSequencePredictor::GetLaneChangeDistanceWithADC( + const LaneSequence& lane_sequence) { + if (adc_lane_id_.empty() || lane_sequence.lane_segment_size() <= 0) { + return std::numeric_limits::max(); + } + + PredictionMap* map = PredictionMap::instance(); + std::string obstacle_lane_id = lane_sequence.lane_segment(0).lane_id(); + double obstacle_lane_s = lane_sequence.lane_segment(0).start_s(); + + if (SameLaneSequence(obstacle_lane_id, obstacle_lane_s)) { + return std::numeric_limits::max(); + } + + double lane_s = 0.0; + double lane_l = 0.0; + if (map->GetProjection(adc_position_, map->LaneById(obstacle_lane_id), + &lane_s, &lane_l)) { + return std::fabs(lane_s - obstacle_lane_s); + } + return std::numeric_limits::max(); +} + +bool LaneSequencePredictor::SameLaneSequence(const std::string& lane_id, + double lane_s) { + PredictionMap* map = PredictionMap::instance(); + + std::shared_ptr obstacle_lane = map->LaneById(lane_id); + std::shared_ptr adc_lane = map->LaneById(adc_lane_id_); + + if (obstacle_lane != nullptr && adc_lane != nullptr) { + RoadGraph obstacle_road_graph(lane_s, FLAGS_lane_change_dist, + obstacle_lane); + LaneGraph obstacle_lane_graph; + obstacle_road_graph.BuildLaneGraph(&obstacle_lane_graph); + + RoadGraph adc_road_graph(adc_lane_s_, FLAGS_lane_change_dist, adc_lane); + LaneGraph adc_lane_graph; + adc_road_graph.BuildLaneGraph(&adc_lane_graph); + + return obstacle_road_graph.IsOnLaneGraph(adc_lane, obstacle_lane_graph) || + adc_road_graph.IsOnLaneGraph(obstacle_lane, adc_lane_graph); + } + + return false; +} + +void LaneSequencePredictor::DrawLaneSequenceTrajectoryPoints( + const KalmanFilter& kf, const LaneSequence& sequence, + double total_time, double freq, std::vector* points) { + PredictionMap* map = PredictionMap::instance(); + + Eigen::Matrix state(kf.GetStateEstimate()); + double lane_s = state(0, 0); + double lane_l = state(1, 0); + double lane_speed = state(2, 0); + double lane_acc = state(3, 0); + + Eigen::Matrix transition(kf.GetTransitionMatrix()); + transition(0, 2) = freq; + transition(0, 3) = 0.5 * freq * freq; + transition(2, 3) = freq; + + int lane_segment_index = 0; + std::string lane_id = sequence.lane_segment(lane_segment_index).lane_id(); + for (size_t i = 0; i < static_cast(total_time / freq); ++i) { + Eigen::Vector2d point; + double theta = M_PI; + if (!map->SmoothPointFromLane(lane_id, lane_s, lane_l, &point, &theta)) { + AERROR << "Unable to get smooth point from lane [" << lane_id + << "] with s [" << lane_s << "] and l [" << lane_l << "]"; + break; + } + + if (points->size() > 0) { + PathPoint* prev_point = points->back().mutable_path_point(); + double x_diff = point.x() - prev_point->x(); + double y_diff = point.y() - prev_point->y(); + if (common::math::DoubleCompare(x_diff, 0.0) != 0 || + common::math::DoubleCompare(y_diff, 0.0) != 0) { + theta = std::atan2(y_diff, x_diff); + prev_point->set_theta(theta); + } else { + theta = prev_point->theta(); + } + } + + // update state + if (common::math::DoubleCompare(lane_speed, 0.0) <= 0) { + ADEBUG << "Non-positive lane_speed tacked : " << lane_speed; + lane_speed = 0.0; + lane_acc = 0.0; + transition(1, 1) = 1.0; + } else if (common::math::DoubleCompare(lane_speed, FLAGS_max_speed) >= 0) { + lane_speed = FLAGS_max_speed; + lane_acc = 0.0; + } + + // add trajectory point + TrajectoryPoint trajectory_point; + PathPoint path_point; + path_point.set_x(point.x()); + path_point.set_y(point.y()); + path_point.set_z(0.0); + path_point.set_theta(theta); + trajectory_point.mutable_path_point()->CopyFrom(path_point); + trajectory_point.set_v(lane_speed); + trajectory_point.set_a(lane_acc); + trajectory_point.set_relative_time(static_cast(i) * freq); + points->emplace_back(std::move(trajectory_point)); + + state(2, 0) = lane_speed; + state(3, 0) = lane_acc; + + state = transition * state; + if (common::math::DoubleCompare(lane_s, state(0, 0)) >= 0) { + state(0, 0) = lane_s; + state(1, 0) = lane_l; + state(2, 0) = 0.0; + state(3, 0) = 0.0; + transition(1, 1) = 1.0; + } + lane_s = state(0, 0); + lane_l = state(1, 0); + lane_speed = state(2, 0); + lane_acc = state(3, 0); + + // find next lane id + while (lane_s > map->LaneById(lane_id)->total_length() && + lane_segment_index + 1 < sequence.lane_segment_size()) { + lane_segment_index += 1; + lane_s = lane_s - map->LaneById(lane_id)->total_length(); + state(0, 0) = lane_s; + lane_id = sequence.lane_segment(lane_segment_index).lane_id(); + } + } +} + +std::string LaneSequencePredictor::ToString(const LaneSequence& sequence) { + std::string str_lane_sequence = ""; + if (sequence.lane_segment_size() > 0) { + str_lane_sequence += sequence.lane_segment(0).lane_id(); + } + for (int i = 1; i < sequence.lane_segment_size(); ++i) { + str_lane_sequence += ("->" + sequence.lane_segment(i).lane_id()); + } + return str_lane_sequence; +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/predictor/vehicle/lane_sequence_predictor.h b/modules/prediction/predictor/vehicle/lane_sequence_predictor.h new file mode 100644 index 00000000000..454481d4d75 --- /dev/null +++ b/modules/prediction/predictor/vehicle/lane_sequence_predictor.h @@ -0,0 +1,133 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +/** + * @file + * @brief Define lane sequence predictor + */ + +#ifndef MODULES_PREDICTION_PREDICTOR_VEHICLE_LANE_SEQUENCE_PREDICTOR_H_ +#define MODULES_PREDICTION_PREDICTOR_VEHICLE_LANE_SEQUENCE_PREDICTOR_H_ + +#include +#include +#include "Eigen/Dense" + +#include "modules/common/proto/pnc_point.pb.h" +#include "modules/prediction/proto/lane_graph.pb.h" + +#include "modules/prediction/predictor/predictor.h" + +namespace apollo { +namespace prediction { + +class LaneSequencePredictor : public Predictor { + public: + /** + * @brief Constructor + */ + LaneSequencePredictor() = default; + + /** + * @brief Destructor + */ + virtual ~LaneSequencePredictor() = default; + + /** + * @brief Make prediction + * @param Obstacle pointer + */ + void Predict(Obstacle* obstacle) override; + + protected: + /** + * @brief Clear private members + */ + void Clear(); + + /** + * @brief Filter lane sequences + * @param Lane graph + * @param Current lane id + * @param Vector of boolean indicating if a lane sequence is disqualified + */ + void FilterLaneSequences(const LaneGraph& lane_graph, + const std::string& lane_id, + std::vector* enable_lane_sequence); + + /** + * @brief Get lane change type + * @param Current lane id + * @param Lane sequence + * @return Integer indicating lane change type: + * 0: no lane change + * 1: left lane change + * 2: right lane change + * -1: other + */ + int GetLaneChangeType(const std::string& lane_id, + const LaneSequence& lane_sequence); + + /** + * @brief Get lane change distance with ADC + * @param Target lane sequence + * @return Lane change distance with ADC + */ + double GetLaneChangeDistanceWithADC(const LaneSequence& lane_sequence); + + /** + * @brief Check if the given lane id and s is on the same lane sequence as ADC + * @param Lane ID + * @param Lane s + * @return If the given lane id and s is on the same lane sequence as ADC + */ + bool SameLaneSequence(const std::string& lane_id, double lane_s); + + /** + * @brief Get ADC status + */ + void GetADC(); + + /** + * @brief Draw lane sequence trajectory points + * @param Kalman filter + * @param Lane sequence + * @param Total prediction time + * @param Prediction frequency + * @param A vector of generated trajectory points + */ + void DrawLaneSequenceTrajectoryPoints( + const common::math::KalmanFilter& kf, + const LaneSequence& sequence, double total_time, double freq, + std::vector* points); + + /** + * @brief Convert a lane sequence to string + * @param Lane sequence + * @return String describing the lane sequence + */ + std::string ToString(const LaneSequence& sequence); + + private: + std::string adc_lane_id_ = ""; + double adc_lane_s_ = 0.0; + Eigen::Vector2d adc_position_; +}; + +} // namespace prediction +} // namespace apollo + +#endif // MODULES_PREDICTION_PREDICTOR_VEHICLE_LANE_SEQUENCE_PREDICTOR_H_ diff --git a/modules/prediction/predictor/vehicle/lane_sequence_predictor_test.cc b/modules/prediction/predictor/vehicle/lane_sequence_predictor_test.cc new file mode 100644 index 00000000000..c0aaf489eb6 --- /dev/null +++ b/modules/prediction/predictor/vehicle/lane_sequence_predictor_test.cc @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/prediction/predictor/vehicle/lane_sequence_predictor.h" + +#include +#include + +#include "gtest/gtest.h" + +#include "modules/common/util/file.h" +#include "modules/map/hdmap/hdmap.h" +#include "modules/perception/proto/perception_obstacle.pb.h" +#include "modules/prediction/common/kml_map_based_test.h" +#include "modules/prediction/common/prediction_gflags.h" +#include "modules/prediction/container/obstacles/obstacle.h" +#include "modules/prediction/container/obstacles/obstacles_container.h" +#include "modules/prediction/evaluator/vehicle/mlp_evaluator.h" + +namespace apollo { +namespace prediction { + +class LaneSequencePredictorTest : public KMLMapBasedTest { + public: + virtual void SetUp() { + std::string file = + "modules/prediction/testdata/single_perception_vehicle_onlane.pb.txt"; + apollo::common::util::GetProtoFromFile(file, &perception_obstacles_); + } + protected: + apollo::perception::PerceptionObstacles perception_obstacles_; +}; + +TEST_F(LaneSequencePredictorTest, OnLaneCase) { + EXPECT_DOUBLE_EQ(perception_obstacles_.header().timestamp_sec(), + 1501183430.161906); + apollo::perception::PerceptionObstacle perception_obstacle = + perception_obstacles_.perception_obstacle(0); + EXPECT_EQ(perception_obstacle.id(), 1); + MLPEvaluator mlp_evaluator; + ObstaclesContainer container; + container.Insert(perception_obstacles_); + Obstacle* obstacle_ptr = container.GetObstacle(1); + EXPECT_TRUE(obstacle_ptr != nullptr); + mlp_evaluator.Evaluate(obstacle_ptr); + LaneSequencePredictor predictor; + predictor.Predict(obstacle_ptr); + EXPECT_EQ(predictor.NumOfTrajectories(), 2); +} + +} // namespace prediction +} // namespace apollo diff --git a/modules/prediction/proto/BUILD b/modules/prediction/proto/BUILD index b40c1259151..6f914b9a454 100644 --- a/modules/prediction/proto/BUILD +++ b/modules/prediction/proto/BUILD @@ -1,26 +1,108 @@ package(default_visibility = ["//visibility:public"]) -load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library") -load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile") +cc_proto_library( + name = "prediction_conf_proto", + deps = [ + ":prediction_conf_proto_lib", + ], +) + +proto_library( + name = "prediction_conf_proto_lib", + srcs = [ + "prediction_conf.proto", + ], + deps = [ + "//modules/common/proto:common_proto_lib", + "//modules/perception/proto:perception_proto_lib", + ], +) cc_proto_library( name = "prediction_proto", - protos = [ + deps = [ + ":prediction_proto_lib", + ], +) + +proto_library( + name = "prediction_proto_lib", + srcs = [ "prediction_obstacle.proto", ], deps = [ - "//modules/common/proto:common_proto", - "//modules/perception/proto:perception_proto", + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:error_code_proto_lib", + "//modules/common/proto:header_proto_lib", + "//modules/common/proto:pnc_point_proto_lib", + "//modules/perception/proto:perception_proto_lib", ], ) -py_proto_compile( - name = "prediction_proto_pylib", - protos = [ - "prediction_obstacle.proto", +cc_proto_library( + name = "lane_graph_proto", + deps = [ + ":lane_graph_proto_lib", + ], +) + +proto_library( + name = "lane_graph_proto_lib", + srcs = [ + "lane_graph.proto", + ], + deps = [ + "//modules/common/proto:common_proto_lib", + ], +) + +cc_proto_library( + name = "feature_proto", + deps = [ + ":feature_proto_lib", + ], +) + +proto_library( + name = "feature_proto_lib", + srcs = [ + "feature.proto", + ], + deps = [ + "//modules/common/proto:common_proto_lib", + "//modules/prediction/proto:lane_graph_proto_lib", + ], +) + +cc_proto_library( + name = "fnn_model_base_proto", + deps = [ + ":fnn_model_base_proto_lib", + ], +) + +proto_library( + name = "fnn_model_base_proto_lib", + srcs = [ + "fnn_model_base.proto", + ], + deps = [ + ], +) + +cc_proto_library( + name = "fnn_vehicle_model_proto", + deps = [ + ":fnn_vehicle_model_proto_lib", + ], +) + +proto_library( + name = "fnn_vehicle_model_proto_lib", + srcs = [ + "fnn_vehicle_model.proto", ], deps = [ - "//modules/common/proto:common_proto_pylib", - "//modules/perception/proto:perception_proto_pylib", + "//modules/prediction/proto:fnn_model_base_proto_lib", ], ) diff --git a/modules/prediction/proto/feature.proto b/modules/prediction/proto/feature.proto new file mode 100644 index 00000000000..1c2bd89bfd7 --- /dev/null +++ b/modules/prediction/proto/feature.proto @@ -0,0 +1,65 @@ +syntax = "proto2"; + +package apollo.prediction; + +import "modules/prediction/proto/lane_graph.proto"; +import "modules/common/proto/geometry.proto"; + +message Lane { + // Features of all possible current lanes + repeated LaneFeature current_lane_feature = 1; + + // Features of the most possible current lane + optional LaneFeature lane_feature = 2; + + // Features of all nearby lanes + repeated LaneFeature nearby_lane_feature = 3; + + // Lane graph + optional LaneGraph lane_graph = 4; + + // For modeling + optional double label_update_time_delta = 26; +} + +message LaneFeature { + optional string lane_id = 1; + optional uint32 lane_turn_type = 2; + optional double lane_s = 3; + optional double lane_l = 4; + optional double angle_diff = 5; + optional double dist_to_left_boundary = 6; + optional double dist_to_right_boundary = 7; +} + +message Feature { + // Obstacle ID + optional int32 id = 1; + + // Obstacle features + optional apollo.common.Point3D position = 2; + optional apollo.common.Point3D velocity = 3; + optional apollo.common.Point3D acceleration = 4; + optional double velocity_heading = 5; + optional double speed = 6; + optional double acc = 7; + optional double theta = 8; + optional double length = 9; + optional double width = 10; + optional double height = 11; + optional double tracking_time = 12; + optional double timestamp = 13; + + // Obstacle type-specific features + optional Lane lane = 14; + + // Obstacle tracked features + optional apollo.common.Point3D t_position = 16; + optional apollo.common.Point3D t_velocity = 17; + optional double t_velocity_heading = 18; + optional double t_speed = 19; + optional apollo.common.Point3D t_acceleration = 20; + optional double t_acc = 21; + + optional bool is_still = 22 [default = true]; +} diff --git a/modules/prediction/proto/fnn_model_base.proto b/modules/prediction/proto/fnn_model_base.proto new file mode 100644 index 00000000000..e61a4cf5859 --- /dev/null +++ b/modules/prediction/proto/fnn_model_base.proto @@ -0,0 +1,25 @@ +syntax = "proto2"; + +package apollo.prediction; + +message Vector { + repeated double columns = 1; +} + +message Matrix { + repeated Vector rows = 1; +} + +message Layer { + enum ActivationFunc { + RELU = 0; + TANH = 1; + SIGMOID = 2; + } + optional int32 layer_input_dim = 1; + optional int32 layer_output_dim = 2; + optional Matrix layer_input_weight = 3; // weight matrix of |input_dim| x |output_dim| + optional Vector layer_bias = 4; // vector of bias, size of |output_dim| + optional ActivationFunc layer_activation_func = 5; + // optional string layer_activation_type = 6 [deprecated = true]; +} diff --git a/modules/prediction/proto/fnn_vehicle_model.proto b/modules/prediction/proto/fnn_vehicle_model.proto new file mode 100644 index 00000000000..a3c2da03de8 --- /dev/null +++ b/modules/prediction/proto/fnn_vehicle_model.proto @@ -0,0 +1,14 @@ +syntax = "proto2"; + +package apollo.prediction; + +import "modules/prediction/proto/fnn_model_base.proto"; + +message FnnVehicleModel { + optional int32 dim_input = 1; + optional Vector samples_mean = 2; + optional Vector samples_std = 3; + optional int32 num_layer = 4; + repeated Layer layer = 5; // num_layer must equal to first layer layer_input_dim + optional int32 dim_output = 6; // dim_ouput must equal to last layer layer_output_dim +} diff --git a/modules/prediction/proto/lane_graph.proto b/modules/prediction/proto/lane_graph.proto new file mode 100644 index 00000000000..79cb1eaec79 --- /dev/null +++ b/modules/prediction/proto/lane_graph.proto @@ -0,0 +1,39 @@ +syntax = "proto2"; + +package apollo.prediction; + +import "modules/common/proto/geometry.proto"; + +message LanePoint { + optional apollo.common.Point3D position = 1; + optional double heading = 2 [default = 0.0]; + optional double width = 3 [default = 0.0]; + optional double relative_s = 4 [default = 0.0]; + optional double relative_l = 5 [default = 0.0]; + optional double angle_diff = 6 [default = 0.0]; +} + +message LaneSegment { + optional string lane_id = 1; + optional double start_s = 2 [default = 0.0]; + optional double end_s = 3 [default = 0.0]; + optional uint32 lane_turn_type = 4 [default = 0]; + repeated LanePoint lane_point = 5; +} + +message NearbyObstacle { + optional int32 id = 1; + optional double s = 2; +} + +message LaneSequence { + repeated LaneSegment lane_segment = 1; + repeated NearbyObstacle nearby_obstacle = 2; + repeated double features = 3; + optional int32 label = 4 [default = 0]; + optional double probability = 5 [default = 0.0]; +} + +message LaneGraph { + repeated LaneSequence lane_sequence = 1; +} diff --git a/modules/prediction/proto/prediction_conf.proto b/modules/prediction/proto/prediction_conf.proto new file mode 100644 index 00000000000..594b49431c9 --- /dev/null +++ b/modules/prediction/proto/prediction_conf.proto @@ -0,0 +1,33 @@ +syntax = "proto2"; + +package apollo.prediction; + +import "modules/perception/proto/perception_obstacle.proto"; + +message ObstacleConf { + enum ObstacleStatus { + ON_LANE = 0; + OFF_LANE = 1; + STATIONARY = 3; + MOVING = 4; + } + + enum EvaluatorType { + MLP_EVALUATOR = 0; + } + + enum PredictorType { + LANE_SEQUENCE_PREDICTOR = 0; + FREE_MOVE_PREDICTOR = 1; + REGIONAL_PREDICTOR = 2; + } + + optional apollo.perception.PerceptionObstacle.Type obstacle_type = 1; + optional ObstacleStatus obstacle_status = 2; + optional EvaluatorType evaluator_type = 3; + optional PredictorType predictor_type = 4; +} + +message PredictionConf { + repeated ObstacleConf obstacle_conf = 1; +} diff --git a/modules/prediction/proto/prediction_obstacle.proto b/modules/prediction/proto/prediction_obstacle.proto index 6b3c577d87f..75696d8120d 100644 --- a/modules/prediction/proto/prediction_obstacle.proto +++ b/modules/prediction/proto/prediction_obstacle.proto @@ -4,27 +4,17 @@ package apollo.prediction; import "modules/common/proto/error_code.proto"; import "modules/common/proto/header.proto"; +import "modules/common/proto/pnc_point.proto"; import "modules/perception/proto/perception_obstacle.proto"; -message TrajectoryPoint { - optional double x = 1; // in meters. - optional double y = 2; // in meters. - optional double z = 3; // height in meters. - optional double velocity = 4; // velocity, in meters / second - // in seconds, relative to the time_stamp of this message: - // t = t_this_state - t_timestamp - optional double t = 5; - optional double heading = 6; // heading in angle -} - message Trajectory { optional double probability = 1; // probability of this trajectory - repeated TrajectoryPoint trajectory_point = 2; + repeated apollo.common.TrajectoryPoint trajectory_point = 2; } message PredictionObstacle { optional apollo.perception.PerceptionObstacle perception_obstacle = 1; - optional double time_stamp = 2; // GPS time in seconds + optional double timestamp = 2; // GPS time in seconds // the length of the time for this prediction (e.g. 10s) optional double predicted_period = 3; // can have multiple trajectories per obstacle diff --git a/modules/prediction/testdata/adapter_conf.pb.txt b/modules/prediction/testdata/adapter_conf.pb.txt new file mode 100644 index 00000000000..52b24d6e67d --- /dev/null +++ b/modules/prediction/testdata/adapter_conf.pb.txt @@ -0,0 +1,16 @@ +config { + type: PERCEPTION_OBSTACLES + mode: RECEIVE_ONLY + message_history_limit: 1 +} +config { + type: LOCALIZATION + mode: RECEIVE_ONLY + message_history_limit: 10 +} +config { + type: PREDICTION + mode: PUBLISH_ONLY + message_history_limit: 10 +} +is_ros: true diff --git a/modules/prediction/testdata/frame_sequence/frame_1.pb.txt b/modules/prediction/testdata/frame_sequence/frame_1.pb.txt new file mode 100644 index 00000000000..6524f7cc0e3 --- /dev/null +++ b/modules/prediction/testdata/frame_sequence/frame_1.pb.txt @@ -0,0 +1,45 @@ +header { + timestamp_sec: 0.0 + module_name: "perception" + sequence_num: 0 +} +perception_obstacle { + id: 1 + position { + x: -458.941, + y: -159.240, + z: 0.0 + } + theta: -0.349 + velocity { + x: 18.794 + y: -6.839 + z: 0 + } + length: 4 + width: 2 + height: 1 + tracking_time: 1 + type: VEHICLE + timestamp: 0.0 +} +perception_obstacle { + id: 101 + position { + x: -438.879, + y: -161.931, + z: 0.0 + } + theta: 1.222 + velocity { + x: 1.710 + y: 4.699 + z: 0 + } + length: 0.5 + width: 0.5 + height: 1.8 + tracking_time: 1 + type: PEDESTRIAN + timestamp: 0.0 +} diff --git a/modules/prediction/testdata/frame_sequence/frame_2.pb.txt b/modules/prediction/testdata/frame_sequence/frame_2.pb.txt new file mode 100644 index 00000000000..3c982fcf786 --- /dev/null +++ b/modules/prediction/testdata/frame_sequence/frame_2.pb.txt @@ -0,0 +1,45 @@ +header { + timestamp_sec: 0.1 + module_name: "perception" + sequence_num: 1 +} +perception_obstacle { + id: 1 + position { + x: -457.010, + y: -160.023, + z: 0.0 + } + theta: -0.352 + velocity { + x: 17.994 + y: -6.839 + z: 0 + } + length: 4 + width: 2 + height: 1 + tracking_time: 1 + type: VEHICLE + timestamp: 0.1 +} +perception_obstacle { + id: 101 + position { + x: -438.610, + y: -161.521, + z: 0.0 + } + theta: 1.220 + velocity { + x: 1.710 + y: 4.699 + z: 0 + } + length: 0.5 + width: 0.5 + height: 1.8 + tracking_time: 1 + type: PEDESTRIAN + timestamp: 0.1 +} diff --git a/modules/prediction/testdata/frame_sequence/frame_3.pb.txt b/modules/prediction/testdata/frame_sequence/frame_3.pb.txt new file mode 100644 index 00000000000..13c1071bc44 --- /dev/null +++ b/modules/prediction/testdata/frame_sequence/frame_3.pb.txt @@ -0,0 +1,45 @@ +header { + timestamp_sec: 0.2 + module_name: "perception" + sequence_num: 2 +} +perception_obstacle { + id: 1 + position { + x: -455.182, + y: -160.608, + z: 0.0 + } + theta: -0.352 + velocity { + x: 17.994 + y: -6.839 + z: 0 + } + length: 4 + width: 2 + height: 1 + tracking_time: 1 + type: VEHICLE + timestamp: 0.2 +} +perception_obstacle { + id: 101 + position { + x: -438.537, + y: -160.991, + z: 0.0 + } + theta: 1.220 + velocity { + x: 1.710 + y: 4.699 + z: 0 + } + length: 0.5 + width: 0.5 + height: 1.8 + tracking_time: 1 + type: PEDESTRIAN + timestamp: 0.2 +} diff --git a/modules/prediction/testdata/kml_map.bin b/modules/prediction/testdata/kml_map.bin new file mode 100644 index 00000000000..d01cef802e6 Binary files /dev/null and b/modules/prediction/testdata/kml_map.bin differ diff --git a/modules/prediction/testdata/multiple_perception_pedestrians.pb.txt b/modules/prediction/testdata/multiple_perception_pedestrians.pb.txt new file mode 100644 index 00000000000..1a8eae14445 --- /dev/null +++ b/modules/prediction/testdata/multiple_perception_pedestrians.pb.txt @@ -0,0 +1,45 @@ +header { + timestamp_sec: 1501183430.161906 + module_name: "perception" + sequence_num: 15839 +} +perception_obstacle { + id: 101 + position { + x: -438.879, + y: -161.931, + z: 0.0 + } + theta: 1.222 + velocity { + x: 1.710 + y: 4.699 + z: 0 + } + length: 0.5 + width: 0.5 + height: 1.8 + tracking_time: 1 + type: PEDESTRIAN + timestamp: 1501183430.161906 +} +perception_obstacle { + id: 102 + position { + x: -411.557, + y: -182.382, + z: 0.0 + } + theta: -0.200 + velocity { + x: 0.001 + y: 0.001 + z: 0 + } + length: 0.5 + width: 0.5 + height: 1.6 + tracking_time: 1 + type: PEDESTRIAN + timestamp: 1501183430.161906 +} diff --git a/modules/prediction/testdata/perception_vehicles_pedestrians.pb.txt b/modules/prediction/testdata/perception_vehicles_pedestrians.pb.txt new file mode 100644 index 00000000000..65407c33f9d --- /dev/null +++ b/modules/prediction/testdata/perception_vehicles_pedestrians.pb.txt @@ -0,0 +1,125 @@ +header { + timestamp_sec: 1501183430.161906 + module_name: "perception" + sequence_num: 15839 +} +perception_obstacle { + id: 0 + position { + x: -449.952, + y: -161.917, + z: 0.0 + } + theta: -0.349 + velocity { + x: 18.794 + y: -6.839 + z: 0 + } + length: 4 + width: 2 + height: 1 + tracking_time: 1 + type: VEHICLE + timestamp: 1501183430.1619561 +} +perception_obstacle { + id: 1 + position { + x: -458.941, + y: -159.240, + z: 0.0 + } + theta: -0.349 + velocity { + x: 18.794 + y: -6.839 + z: 0 + } + length: 4 + width: 2 + height: 1 + tracking_time: 1 + type: VEHICLE + timestamp: 1501183430.1619561 +} +perception_obstacle { + id: 2 + position { + x: -469.239, + y: -156.665, + z: 0.0 + } + theta: -0.349 + velocity { + x: 18.794 + y: -6.839 + z: 0 + } + length: 4 + width: 2 + height: 1 + tracking_time: 1 + type: VEHICLE + timestamp: 1501183430.1619561 +} +perception_obstacle { + id: 3 + position { + x: -461.000, + y: -155.018, + z: 0.0 + } + theta: -0.349 + velocity { + x: 18.794 + y: -6.839 + z: 0 + } + length: 4 + width: 2 + height: 1 + tracking_time: 1 + type: VEHICLE + timestamp: 1501183430.1619561 +} +perception_obstacle { + id: 101 + position { + x: -438.879, + y: -161.931, + z: 0.0 + } + theta: 1.222 + velocity { + x: 1.710 + y: 4.699 + z: 0 + } + length: 0.5 + width: 0.5 + height: 1.8 + tracking_time: 1 + type: PEDESTRIAN + timestamp: 1501183430.161906 +} +perception_obstacle { + id: 102 + position { + x: -411.557, + y: -182.382, + z: 0.0 + } + theta: -0.200 + velocity { + x: 0.001 + y: 0.001 + z: 0 + } + length: 0.5 + width: 0.5 + height: 1.6 + tracking_time: 1 + type: PEDESTRIAN + timestamp: 1501183430.161906 +} diff --git a/modules/prediction/testdata/prediction_conf.pb.txt b/modules/prediction/testdata/prediction_conf.pb.txt new file mode 100644 index 00000000000..e0885c70be7 --- /dev/null +++ b/modules/prediction/testdata/prediction_conf.pb.txt @@ -0,0 +1,15 @@ +obstacle_conf { + obstacle_type: VEHICLE + obstacle_status: ON_LANE + evaluator_type: MLP_EVALUATOR + predictor_type: LANE_SEQUENCE_PREDICTOR +} +obstacle_conf { + obstacle_type: VEHICLE + obstacle_status: OFF_LANE + predictor_type: FREE_MOVE_PREDICTOR +} +obstacle_conf { + obstacle_type: PEDESTRIAN + predictor_type: REGIONAL_PREDICTOR +} \ No newline at end of file diff --git a/modules/prediction/testdata/single_perception_vehicle_offlane.pb.txt b/modules/prediction/testdata/single_perception_vehicle_offlane.pb.txt new file mode 100644 index 00000000000..26388467403 --- /dev/null +++ b/modules/prediction/testdata/single_perception_vehicle_offlane.pb.txt @@ -0,0 +1,25 @@ +header { + timestamp_sec: 1501183430.161906 + module_name: "perception" + sequence_num: 15839 +} +perception_obstacle { + id: 15 + position { + x: -438.614, + y: -173.366, + z: 0.0 + } + theta: -0.349 + velocity { + x: 6.839 + y: 18.794 + z: 0 + } + length: 4 + width: 2 + height: 1 + tracking_time: 1 + type: VEHICLE + timestamp: 1501183430.1619561 +} diff --git a/modules/prediction/testdata/single_perception_vehicle_onlane.pb.txt b/modules/prediction/testdata/single_perception_vehicle_onlane.pb.txt new file mode 100644 index 00000000000..1087ffc39f7 --- /dev/null +++ b/modules/prediction/testdata/single_perception_vehicle_onlane.pb.txt @@ -0,0 +1,25 @@ +header { + timestamp_sec: 1501183430.161906 + module_name: "perception" + sequence_num: 15839 +} +perception_obstacle { + id: 1 + position { + x: -458.941, + y: -159.240, + z: 0.0 + } + theta: -0.349 + velocity { + x: 18.794 + y: -6.839 + z: 0 + } + length: 4 + width: 2 + height: 1 + tracking_time: 1 + type: VEHICLE + timestamp: 1501183430.1619561 +} diff --git a/modules/routing/BUILD b/modules/routing/BUILD new file mode 100644 index 00000000000..471f3d8c243 --- /dev/null +++ b/modules/routing/BUILD @@ -0,0 +1,44 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "lib_routing", + srcs = [ + "routing.cc", + ], + hdrs = [ + "routing.h", + ], + deps = [ + "//modules/common", + "//modules/common:apollo_app", + "//modules/common/adapters:adapter_manager", + "//modules/common/monitor", + "//modules/common/status", + "//modules/common/util", + "//modules/map/hdmap:hdmap_util", + "//modules/routing/common:routing_gflags", + "//modules/routing/core", + "//modules/routing/proto:routing_proto", + "@ros//:ros_common", + ], +) + +cc_binary( + name = "routing", + srcs = ["main.cc"], + deps = [ + ":lib_routing", + "//external:gflags", + ], +) + +filegroup( + name = "routing_testdata", + srcs = glob([ + "testdata/**", + ]), +) + +cpplint() diff --git a/modules/routing/README.md b/modules/routing/README.md new file mode 100644 index 00000000000..3913946adbb --- /dev/null +++ b/modules/routing/README.md @@ -0,0 +1,13 @@ +# Routing + +## Introduction + Based on planning and current car status, use different control algorithms to + generate comfortable driving experience. + +## Input + * Planning trajectory + * Car status + * HMI AUTO mode change request + +## Output + * control command (steering, throttle, brake) to canbus. diff --git a/modules/routing/common/BUILD b/modules/routing/common/BUILD new file mode 100644 index 00000000000..4160aa0c8c3 --- /dev/null +++ b/modules/routing/common/BUILD @@ -0,0 +1,18 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "routing_gflags", + srcs = [ + "routing_gflags.cc", + ], + hdrs = [ + "routing_gflags.h", + ], + deps = [ + "//external:gflags", + ], +) + +cpplint() diff --git a/modules/routing/common/routing_gflags.cc b/modules/routing/common/routing_gflags.cc new file mode 100644 index 00000000000..9741d1b3358 --- /dev/null +++ b/modules/routing/common/routing_gflags.cc @@ -0,0 +1,31 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/common/routing_gflags.h" + +DEFINE_string(routing_conf_file, "modules/routing/conf/routing.pb.txt", + "default routing conf data file"); + +DEFINE_string(node_name, "routing", "the name for this node"); + +DEFINE_string(adapter_config_filename, "modules/routing/conf/adapter.conf", + "The adapter config filename"); + +DEFINE_bool(use_road_id, true, "enable use road id to cut routing result"); +DEFINE_double(min_length_for_lane_change, 10.0, + "min length for lane change, in creater, in meter"); +DEFINE_bool(enable_change_lane_in_result, false, + "contain change lane operator in result"); diff --git a/modules/routing/common/routing_gflags.h b/modules/routing/common/routing_gflags.h new file mode 100644 index 00000000000..6f62a00c587 --- /dev/null +++ b/modules/routing/common/routing_gflags.h @@ -0,0 +1,31 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_COMMON_ROUTING_GFLAGS_H_ +#define MODULES_ROUTING_COMMON_ROUTING_GFLAGS_H_ + +#include "gflags/gflags.h" + +DECLARE_string(routing_conf_file); +DECLARE_string(node_name); + +DECLARE_string(adapter_config_filename); + +DECLARE_bool(use_road_id); +DECLARE_double(min_length_for_lane_change); +DECLARE_bool(enable_change_lane_in_result); + +#endif // MODULES_ROUTING_COMMON_ROUTING_GFLAGS_H_ diff --git a/modules/routing/conf/adapter.conf b/modules/routing/conf/adapter.conf new file mode 100644 index 00000000000..b6fba7e59f0 --- /dev/null +++ b/modules/routing/conf/adapter.conf @@ -0,0 +1,15 @@ +config { + type: ROUTING_REQUEST + mode: RECEIVE_ONLY + message_history_limit: 10 +} +config { + type: ROUTING_RESPONSE + mode: PUBLISH_ONLY +} +config { + type: MONITOR + mode: DUPLEX + message_history_limit: 1 +} +is_ros: true diff --git a/modules/routing/conf/routing.conf b/modules/routing/conf/routing.conf new file mode 100644 index 00000000000..a7c029ebf43 --- /dev/null +++ b/modules/routing/conf/routing.conf @@ -0,0 +1,6 @@ +--flagfile=modules/common/data/global_flagfile.txt +--routing_conf_file=modules/routing/conf/routing.pb.txt + +--use_road_id=false +--min_length_for_lane_change=10.0 +--enable_change_lane_in_result=false \ No newline at end of file diff --git a/modules/routing/conf/routing.pb.txt b/modules/routing/conf/routing.pb.txt new file mode 100644 index 00000000000..1c8f6d06eae --- /dev/null +++ b/modules/routing/conf/routing.pb.txt @@ -0,0 +1,7 @@ +base_speed: 4.167 +left_turn_penalty: 50.0 +right_turn_penalty: 20.0 +uturn_penalty: 100.0 +change_penalty: 50.0 +base_changing_length: 50.0 +min_length_for_lane_change: 10.0 \ No newline at end of file diff --git a/modules/routing/core/BUILD b/modules/routing/core/BUILD new file mode 100644 index 00000000000..59f8713c5d8 --- /dev/null +++ b/modules/routing/core/BUILD @@ -0,0 +1,63 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "core", + deps = [ + ":routing_navigator", + ], +) + +cc_library( + name = "routing_navigator", + srcs = [ + "navigator.cc", + ], + hdrs = [ + "navigator.h", + ], + deps = [ + ":routing_black_list_range_generator", + ":routing_result_generator", + "//modules/common/adapters:adapter_manager", + "//modules/common/proto:common_proto", + "//modules/common/time", + "//modules/common/util", + "//modules/routing/common:routing_gflags", + "//modules/routing/graph", + "//modules/routing/proto:routing_proto", + "//modules/routing/strategy", + ], +) + +cc_library( + name = "routing_black_list_range_generator", + srcs = [ + "black_list_range_generator.cc", + ], + hdrs = [ + "black_list_range_generator.h", + ], + deps = [ + "//modules/routing/graph", + ], +) + +cc_library( + name = "routing_result_generator", + srcs = [ + "result_generator.cc", + ], + hdrs = [ + "result_generator.h", + ], + deps = [ + "//modules/common/adapters:adapter_manager", + "//modules/common/time", + "//modules/routing/graph", + "//modules/routing/proto:routing_proto", + ], +) + +cpplint() diff --git a/modules/routing/core/black_list_range_generator.cc b/modules/routing/core/black_list_range_generator.cc new file mode 100644 index 00000000000..f08c2c8cf6a --- /dev/null +++ b/modules/routing/core/black_list_range_generator.cc @@ -0,0 +1,164 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/core/black_list_range_generator.h" + +#include + +#include "modules/common/log.h" + +namespace apollo { +namespace routing { + +double S_GAP_FOR_BLACK = 0.01; + +namespace { + +double MoveSForward(double s, double upper_bound) { + if (s > upper_bound) { + AERROR << "Illegal s: " << s << ", upper bound: " << upper_bound; + return s; + } + if (s + S_GAP_FOR_BLACK < upper_bound) { + return (s + S_GAP_FOR_BLACK); + } else { + return ((s + upper_bound) / 2.0); + } +} + +double MoveSBackward(double s, double lower_bound) { + if (s < lower_bound) { + AERROR << "Illegal s: " << s << ", lower bound: " << lower_bound; + return s; + } + if (s - S_GAP_FOR_BLACK > lower_bound) { + return (s - S_GAP_FOR_BLACK); + } else { + return ((s + lower_bound) / 2.0); + } +} + +void GetOutParallelLane(const TopoNode* node, + std::unordered_set* const node_set) { + for (const auto* edge : node->OutToLeftOrRightEdge()) { + const auto* to_node = edge->ToNode(); + if (node_set->find(to_node) != node_set->end()) { + continue; + } + node_set->emplace(to_node); + GetOutParallelLane(to_node, node_set); + } +} + +void GetInParallelLane(const TopoNode* node, + std::unordered_set* const node_set) { + for (const auto* edge : node->InFromLeftOrRightEdge()) { + const auto* from_node = edge->FromNode(); + if (node_set->find(from_node) != node_set->end()) { + continue; + } + node_set->emplace(from_node); + GetInParallelLane(from_node, node_set); + } +} + +// for new navigator +void AddBlackMapFromRoad(const RoutingRequest& request, const TopoGraph* graph, + TopoRangeManager* const range_manager) { + for (const auto& road_id : request.blacklisted_road()) { + std::unordered_set road_nodes_set; + graph->GetNodesByRoadId(road_id, &road_nodes_set); + for (const auto& node : road_nodes_set) { + range_manager->Add(node, 0.0, node->Length()); + } + } +} + +// for new navigator +void AddBlackMapFromLane(const RoutingRequest& request, const TopoGraph* graph, + TopoRangeManager* const range_manager) { + for (const auto& lane : request.blacklisted_lane()) { + const auto* node = graph->GetNode(lane.id()); + if (node == nullptr) { + continue; + } + range_manager->Add(node, lane.start_s(), lane.end_s()); + } +} + +void AddBlackMapFromOutParallel(const TopoNode* node, double cut_ratio, + TopoRangeManager* const range_manager) { + std::unordered_set par_node_set; + GetOutParallelLane(node, &par_node_set); + if (par_node_set.find(node) != par_node_set.end()) { + par_node_set.erase(node); + } + for (const auto* par_node : par_node_set) { + double par_cut_s = cut_ratio * par_node->Length(); + range_manager->Add(par_node, par_cut_s, par_cut_s); + } +} + +void AddBlackMapFromInParallel(const TopoNode* node, double cut_ratio, + TopoRangeManager* const range_manager) { + std::unordered_set par_node_set; + GetInParallelLane(node, &par_node_set); + if (par_node_set.find(node) != par_node_set.end()) { + par_node_set.erase(node); + } + for (const auto* par_node : par_node_set) { + double par_cut_s = cut_ratio * par_node->Length(); + range_manager->Add(par_node, par_cut_s, par_cut_s); + } +} + +} // namespace + +void BlackListRangeGenerator::GenerateBlackMapFromRequest( + const RoutingRequest& request, const TopoGraph* graph, + TopoRangeManager* const range_manager) const { + AddBlackMapFromLane(request, graph, range_manager); + AddBlackMapFromRoad(request, graph, range_manager); + range_manager->SortAndMerge(); +} + +void BlackListRangeGenerator::AddBlackMapFromTerminal( + const TopoNode* src_node, const TopoNode* dest_node, double start_s, + double end_s, TopoRangeManager* const range_manager) const { + double start_length = src_node->Length(); + double end_length = dest_node->Length(); + if (start_s < 0.0 || start_s > start_length) { + AERROR << "Illegal start_s: " << start_s << ", length: " << start_length; + return; + } + if (end_s < 0.0 || end_s > end_length) { + AERROR << "Illegal end_s: " << end_s << ", length: " << end_length; + return; + } + + double start_cut_s = MoveSBackward(start_s, 0.0); + range_manager->Add(src_node, start_cut_s, start_cut_s); + AddBlackMapFromOutParallel(src_node, start_cut_s / start_length, + range_manager); + + double end_cut_s = MoveSForward(end_s, end_length); + range_manager->Add(dest_node, end_cut_s, end_cut_s); + AddBlackMapFromInParallel(dest_node, end_cut_s / end_length, range_manager); + range_manager->SortAndMerge(); +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/core/black_list_range_generator.h b/modules/routing/core/black_list_range_generator.h new file mode 100644 index 00000000000..b0b2d10fdd1 --- /dev/null +++ b/modules/routing/core/black_list_range_generator.h @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_CORE_BLACK_LIST_RANGE_GENERATOR_H +#define MODULES_ROUTING_CORE_BLACK_LIST_RANGE_GENERATOR_H + +#include +#include +#include + +#include "modules/routing/graph/topo_graph.h" +#include "modules/routing/graph/topo_range_manager.h" +#include "modules/routing/proto/routing.pb.h" + +namespace apollo { +namespace routing { + +class BlackListRangeGenerator { + public: + BlackListRangeGenerator() = default; + ~BlackListRangeGenerator() = default; + + void GenerateBlackMapFromRequest(const RoutingRequest& request, + const TopoGraph* graph, + TopoRangeManager* const range_manager) const; + + void AddBlackMapFromTerminal(const TopoNode* src_node, + const TopoNode* dest_node, double start_s, + double end_s, + TopoRangeManager* const range_manager) const; +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_CORE_BLACK_LIST_RANGE_GENERATOR_H diff --git a/modules/routing/core/navigator.cc b/modules/routing/core/navigator.cc new file mode 100644 index 00000000000..d0b1e0589f6 --- /dev/null +++ b/modules/routing/core/navigator.cc @@ -0,0 +1,296 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/core/navigator.h" + +#include + +#include +#include + +#include "modules/common/log.h" +#include "modules/common/util/file.h" + +#include "modules/routing/common/routing_gflags.h" +#include "modules/routing/graph/sub_topo_graph.h" +#include "modules/routing/strategy/a_star_strategy.h" + +namespace apollo { +namespace routing { + +namespace { + +bool ShowRequestInfo(const RoutingRequest& request, const TopoGraph* graph) { + const auto& start = request.start(); + const auto& end = request.end(); + const auto* node = graph->GetNode(start.id()); + if (node == nullptr) { + AERROR << "Start node is not found in topo graph! ID: " << start.id(); + return false; + } + AINFO << "Start point:\tlane id: " << start.id() << " s: " << start.s() + << " x: " << start.pose().x() << " y: " << start.pose().y() + << " length: " << node->Length(); + + for (const auto& wp : request.waypoint()) { + node = graph->GetNode(wp.id()); + if (node == nullptr) { + AERROR << "Way node is not found in topo graph! ID: " << wp.id(); + return false; + } + AINFO << "Way point:\tlane id: " << wp.id() << " s: " << wp.s() + << " x: " << wp.pose().x() << " y: " << wp.pose().y() + << " length: " << node->Length(); + } + + for (const auto& bl : request.blacklisted_lane()) { + node = graph->GetNode(bl.id()); + if (node == nullptr) { + AERROR << "Black list node is not found in topo graph! ID: " << bl.id(); + return false; + } + AINFO << "Black point:\tlane id: " << bl.id() + << " start_s: " << bl.start_s() << " end_s: " << bl.end_s() + << " length: " << node->Length(); + } + + node = graph->GetNode(end.id()); + if (node == nullptr) { + AERROR << "End node is not found in topo graph! ID: " << end.id(); + return false; + } + AINFO << "End point:\tlane id: " << end.id() << " s: " << end.s() + << " x: " << end.pose().x() << " y: " << end.pose().y() + << " length: " << node->Length(); + return true; +} + +bool GetWayNodes(const RoutingRequest& request, const TopoGraph* graph, + std::vector* const way_nodes, + std::vector* const way_s) { + const auto* start_node = graph->GetNode(request.start().id()); + if (start_node == nullptr) { + AERROR << "Can't find start point in graph! Id: " << request.start().id(); + return false; + } + way_nodes->push_back(start_node); + way_s->push_back(request.start().s()); + + for (const auto& point : request.waypoint()) { + const auto* cur_node = graph->GetNode(point.id()); + if (cur_node == nullptr) { + AERROR << "Can't find way point in graph! Id: " << point.id(); + return false; + } + way_nodes->push_back(cur_node); + way_s->push_back(point.s()); + } + + const auto* end_node = graph->GetNode(request.end().id()); + if (end_node == nullptr) { + AERROR << "Can't find end point in graph! Id: " << request.end().id(); + return false; + } + way_nodes->push_back(end_node); + way_s->push_back(request.end().s()); + return true; +} + +void SetErrorCode(const RoutingResponse::ErrorCode::ErrorID& error_id, + const std::string& error_string, + RoutingResponse::ErrorCode* const error_code) { + error_code->set_error_id(error_id); + error_code->set_error_string(error_string); + if (error_id == RoutingResponse::ErrorCode::SUCCESS) { + AINFO << error_string.c_str(); + } else { + AERROR << error_string.c_str(); + } +} + +void PrintDebugData(const std::vector& nodes) { + AINFO << "Route lane id\tis virtual\tstart s\tend s"; + for (const auto& node : nodes) { + AINFO << node.GetTopoNode()->LaneId() << "\t" + << node.GetTopoNode()->IsVirtual() << "\t" << node.StartS() << "\t" + << node.EndS(); + } +} + +} // namespace + +Navigator::Navigator(const std::string& topo_file_path) : is_ready_(false) { + Graph graph; + if (!common::util::GetProtoFromFile(topo_file_path, &graph)) { + AERROR << "Failed to read topology graph from " << topo_file_path; + return; + } + + graph_.reset(new TopoGraph()); + if (!graph_->LoadGraph(graph)) { + AINFO << "Failed to init navigator graph failed! File path: " + << topo_file_path; + return; + } + black_list_generator_.reset(new BlackListRangeGenerator); + result_generator_.reset(new ResultGenerator); + is_ready_ = true; + AINFO << "The navigator is ready."; +} + +Navigator::~Navigator() {} + +bool Navigator::IsReady() const { return is_ready_; } + +void Navigator::Clear() { topo_range_manager_.Clear(); } + +bool Navigator::Init(const RoutingRequest& request, const TopoGraph* graph, + std::vector* const way_nodes, + std::vector* const way_s) { + Clear(); + if (!GetWayNodes(request, graph_.get(), way_nodes, way_s)) { + AERROR << "Failed to find search terminal point in graph!"; + return false; + } + black_list_generator_->GenerateBlackMapFromRequest(request, graph_.get(), + &topo_range_manager_); + return true; +} + +bool Navigator::MergeRoute( + const std::vector& node_vec, + std::vector* const result_node_vec) const { + bool need_to_merge = false; + for (size_t i = 0; i < node_vec.size(); ++i) { + if (!need_to_merge) { + result_node_vec->push_back(node_vec[i]); + } else { + if (result_node_vec->back().EndS() < node_vec[i].StartS()) { + AERROR << "Result route is not coninuous"; + return false; + } + result_node_vec->back().SetEndS(node_vec[i].EndS()); + } + if (i < node_vec.size() - 1) { + need_to_merge = + (node_vec[i].GetTopoNode() == node_vec[i + 1].GetTopoNode()); + } + } + return true; +} + +bool Navigator::SearchRouteByStrategy( + const TopoGraph* graph, const std::vector& way_nodes, + const std::vector& way_s, + std::vector* const result_nodes) const { + std::unique_ptr strategy_ptr; + strategy_ptr.reset(new AStarStrategy(FLAGS_enable_change_lane_in_result)); + + result_nodes->clear(); + std::vector node_vec; + for (size_t i = 1; i < way_nodes.size(); ++i) { + const auto* way_start = way_nodes[i - 1]; + const auto* way_end = way_nodes[i]; + double way_start_s = way_s[i - 1]; + double way_end_s = way_s[i]; + + TopoRangeManager full_range_manager = topo_range_manager_; + black_list_generator_->AddBlackMapFromTerminal( + way_start, way_end, way_start_s, way_end_s, &full_range_manager); + + SubTopoGraph sub_graph(full_range_manager.RangeMap()); + const auto* start = sub_graph.GetSubNodeWithS(way_start, way_start_s); + if (start == nullptr) { + AERROR << "Sub graph node is nullptr, origin node id: " + << way_start->LaneId() << ", s:" << way_start_s; + return false; + } + const auto* end = sub_graph.GetSubNodeWithS(way_end, way_end_s); + if (end == nullptr) { + AERROR << "Sub graph node is nullptr, origin node id: " + << way_end->LaneId() << ", s:" << way_end_s; + return false; + } + + std::vector cur_result_nodes; + if (!strategy_ptr->Search(graph, &sub_graph, start, end, + &cur_result_nodes)) { + AERROR << "Failed to search route with waypoint from " << start->LaneId() + << " to " << end->LaneId(); + return false; + } + + node_vec.insert(node_vec.end(), cur_result_nodes.begin(), + cur_result_nodes.end()); + } + + if (!MergeRoute(node_vec, result_nodes)) { + AERROR << "Failed to merge route."; + return false; + } + return true; +} + +bool Navigator::SearchRoute(const RoutingRequest& request, + RoutingResponse* const response) { + if (!ShowRequestInfo(request, graph_.get())) { + SetErrorCode(RoutingResponse::ErrorCode::ERROR_REQUEST, + "Error encountered when reading request point!", + response->mutable_error_code()); + return false; + } + + if (!IsReady()) { + SetErrorCode(RoutingResponse::ErrorCode::ERROR_ROUTER_NOT_READY, + "Navigator is not ready!", response->mutable_error_code()); + return false; + } + std::vector way_nodes; + std::vector way_s; + if (!Init(request, graph_.get(), &way_nodes, &way_s)) { + SetErrorCode(RoutingResponse::ErrorCode::ERROR_ROUTER_NOT_READY, + "Failed to initialize navigator!", + response->mutable_error_code()); + return false; + } + + std::vector result_nodes; + if (!SearchRouteByStrategy(graph_.get(), way_nodes, way_s, &result_nodes)) { + SetErrorCode(RoutingResponse::ErrorCode::ERROR_RESPONSE_FAILED, + "Failed to find route with request!", + response->mutable_error_code()); + return false; + } + result_nodes.front().SetStartS(request.start().s()); + result_nodes.back().SetEndS(request.end().s()); + + if (!result_generator_->GeneratePassageRegion( + graph_->MapVersion(), request, result_nodes, topo_range_manager_, + response)) { + SetErrorCode(RoutingResponse::ErrorCode::ERROR_RESPONSE_FAILED, + "Failed to generate passage regions based on result lanes", + response->mutable_error_code()); + return false; + } + SetErrorCode(RoutingResponse::ErrorCode::SUCCESS, "Success!", + response->mutable_error_code()); + + PrintDebugData(result_nodes); + return true; +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/core/navigator.h b/modules/routing/core/navigator.h new file mode 100644 index 00000000000..2023833640f --- /dev/null +++ b/modules/routing/core/navigator.h @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_CORE_NAVIGATOR_H_ +#define MODULES_ROUTING_CORE_NAVIGATOR_H_ + +#include +#include +#include +#include + +#include "modules/routing/core/black_list_range_generator.h" +#include "modules/routing/core/result_generator.h" +#include "modules/routing/graph/node_with_range.h" +#include "modules/routing/graph/topo_graph.h" +#include "modules/routing/graph/topo_range_manager.h" +#include "modules/routing/proto/routing.pb.h" + +namespace apollo { +namespace routing { + +class Navigator { + public: + explicit Navigator(const std::string& topo_file_path); + ~Navigator(); + + bool IsReady() const; + + bool SearchRoute(const RoutingRequest& request, + RoutingResponse* const response); + + private: + bool Init(const RoutingRequest& request, const TopoGraph* graph, + std::vector* const way_nodes, + std::vector* const way_s); + + void Clear(); + + bool SearchRouteByStrategy( + const TopoGraph* graph, const std::vector& way_nodes, + const std::vector& way_s, + std::vector* const result_nodes) const; + + bool MergeRoute(const std::vector& node_vec, + std::vector* const result_node_vec) const; + + private: + bool is_ready_; + std::unique_ptr graph_; + + TopoRangeManager topo_range_manager_; + + std::unique_ptr black_list_generator_; + std::unique_ptr result_generator_; +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_CORE_NAVIGATOR_H_ diff --git a/modules/routing/core/result_generator.cc b/modules/routing/core/result_generator.cc new file mode 100644 index 00000000000..2ce8b0d8cf8 --- /dev/null +++ b/modules/routing/core/result_generator.cc @@ -0,0 +1,524 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ +#include "modules/routing/core/result_generator.h" + +#include +#include +#include +#include +#include +#include + +#include "modules/common/adapters/adapter_manager.h" +#include "modules/common/log.h" +#include "modules/common/time/time.h" + +#include "modules/routing/common/routing_gflags.h" +#include "modules/routing/graph/node_with_range.h" +#include "modules/routing/graph/range_utils.h" + +namespace apollo { +namespace routing { + +using apollo::common::adapter::AdapterManager; + +namespace { + +bool IsCloseEnough(double value_1, double value_2) { + if (fabs(value_1 - value_2) < 1e-6) { + return true; + } + return false; +} + +std::string GetRoadId( + const std::vector>& node_vecs) { + std::unordered_set road_id_set; + std::string road_id = ""; + for (const auto& node_vec : node_vecs) { + for (const auto& node : node_vec) { + road_id_set.emplace(node.RoadId()); + } + } + for (const auto& id : road_id_set) { + if (road_id.empty()) { + road_id = id; + } else { + road_id += "-" + id; + } + } + return road_id; +} + +void NodeVecToSet(const std::vector& vec, + std::unordered_set* const set) { + for (const auto& node : vec) { + set->insert(node.GetTopoNode()); + } +} + +NodeWithRange BuildNodeRange(const TopoNode* node, double start_s, + double end_s) { + NodeSRange range(start_s, end_s); + NodeWithRange node_with_range(range, node); + return node_with_range; +} + +const NodeWithRange& GetLargestRange( + const std::vector& node_vec) { + assert(!node_vec.empty()); + size_t result_idx = 0; + double result_range_length = 0.0; + for (size_t i = 1; i < node_vec.size(); ++i) { + if (node_vec[i].Length() > result_range_length) { + result_range_length = node_vec[i].Length(); + result_idx = i; + } + } + return node_vec[result_idx]; +} + +void GetNodesOfWaysBasedOnVirtual( + const std::vector& nodes, + std::vector>* const nodes_of_ways) { + AINFO << "Cut routing ways based on is_virtual."; + assert(!nodes.empty()); + nodes_of_ways->clear(); + std::vector nodes_of_way; + std::unordered_set road_ids_of_way; + nodes_of_way.push_back(nodes.at(0)); + road_ids_of_way.emplace(nodes.at(0).RoadId()); + bool last_is_virtual = nodes.at(0).IsVirtual(); + for (auto iter = nodes.begin() + 1; iter != nodes.end(); ++iter) { + if ((*iter).IsVirtual() != last_is_virtual) { + nodes_of_ways->push_back(nodes_of_way); + nodes_of_way.clear(); + road_ids_of_way.clear(); + last_is_virtual = (*iter).IsVirtual(); + } + nodes_of_way.push_back(*iter); + road_ids_of_way.emplace((*iter).RoadId()); + } + nodes_of_ways->push_back(nodes_of_way); +} + +void GetNodesOfWays( + const std::vector& nodes, + std::vector>* const nodes_of_ways) { + AINFO << "Cut routing ways based on road id."; + assert(!nodes.empty()); + nodes_of_ways->clear(); + std::vector nodes_of_way; + nodes_of_way.push_back(nodes.at(0)); + std::string last_road_id = nodes.at(0).RoadId(); + for (auto iter = nodes.begin() + 1; iter != nodes.end(); ++iter) { + if ((*iter).RoadId() != last_road_id) { + nodes_of_ways->push_back(nodes_of_way); + nodes_of_way.clear(); + last_road_id = (*iter).RoadId(); + } + nodes_of_way.push_back(*iter); + } + nodes_of_ways->push_back(nodes_of_way); +} + +bool ExtractBasicPassages( + const std::vector& nodes, + std::vector>* const nodes_of_passages, + std::vector* const + lane_change_types) { + assert(!nodes.empty()); + nodes_of_passages->clear(); + lane_change_types->clear(); + std::vector nodes_of_passage; + nodes_of_passage.push_back(nodes.at(0)); + for (size_t i = 1; i < nodes.size(); ++i) { + auto edge = + nodes.at(i - 1).GetTopoNode()->GetOutEdgeTo(nodes.at(i).GetTopoNode()); + if (edge == nullptr) { + AERROR << "Get null pointer to edge from " << nodes.at(i - 1).LaneId() + << " to " << nodes.at(i).LaneId(); + return false; + } + if (edge->Type() == TET_LEFT || edge->Type() == TET_RIGHT) { + nodes_of_passages->push_back(nodes_of_passage); + nodes_of_passage.clear(); + if (edge->Type() == TET_LEFT) { + lane_change_types->push_back( + RoutingResponse::LaneChangeInfo::LEFT_FORWARD); + } else { + lane_change_types->push_back( + RoutingResponse::LaneChangeInfo::RIGHT_FORWARD); + } + } + nodes_of_passage.push_back(nodes.at(i)); + } + nodes_of_passages->push_back(nodes_of_passage); + return true; +} + +bool IsReachableFrom(const TopoNode* node, + const std::vector& to_nodes, + const NodeWithRange** const reachable_node) { + for (const auto& to_node : to_nodes) { + auto edge = to_node.GetTopoNode()->GetInEdgeFrom(node); + if (edge != nullptr) { + if (edge->Type() == TET_LEFT || edge->Type() == TET_RIGHT) { + *reachable_node = &to_node; + return true; + } + } + } + return false; +} + +bool IsReachableTo(const TopoNode* node, + const std::vector& from_nodes, + const NodeWithRange** const reachable_node) { + for (const auto& from_node : from_nodes) { + auto edge = from_node.GetTopoNode()->GetOutEdgeTo(node); + if (edge != nullptr) { + if (edge->Type() == TET_LEFT || edge->Type() == TET_RIGHT) { + *reachable_node = &from_node; + return true; + } + } + } + return false; +} + +void ExtendBackward(bool enable_use_road_id, + const std::vector& nodes_of_prev_passage, + const TopoRangeManager& range_manager, + std::vector* const nodes_of_curr_passage) { + std::unordered_set node_set_of_curr_passage; + NodeVecToSet(*nodes_of_curr_passage, &node_set_of_curr_passage); + auto& front_node = nodes_of_curr_passage->front(); + // if front node starts at middle + if (!IsCloseEnough(front_node.StartS(), 0.0)) { + if (!range_manager.Find(front_node.GetTopoNode())) { + if (IsCloseEnough(nodes_of_prev_passage.front().StartS(), 0.0)) { + front_node.SetStartS(0.0); + } else { + double temp_s = nodes_of_prev_passage.front().StartS() / + nodes_of_prev_passage.front().FullLength() * + front_node.FullLength(); + front_node.SetStartS(temp_s); + } + } else { + return; + } + } + + bool allowed_to_explore = true; + while (allowed_to_explore) { + std::vector pred_set; + for (const auto& edge : + nodes_of_curr_passage->front().GetTopoNode()->InFromPreEdge()) { + const auto& pred_node = edge->FromNode(); + // if pred node is not in the same road + if (pred_node->RoadId() != nodes_of_curr_passage->front().RoadId()) { + continue; + } + // if pred node has been inserted + if (enable_use_road_id && + node_set_of_curr_passage.find(pred_node) != + node_set_of_curr_passage.end()) { + continue; + } + // if pred node is reachable from prev passage + const NodeWithRange* reachable_node = nullptr; + if (IsReachableTo(pred_node, nodes_of_prev_passage, &reachable_node)) { + if (range_manager.Find(pred_node)) { + double black_s_end = range_manager.RangeEnd(pred_node); + if (!IsCloseEnough(black_s_end, pred_node->Length())) { + pred_set.push_back( + BuildNodeRange(pred_node, black_s_end, pred_node->Length())); + } + } else { + pred_set.push_back( + BuildNodeRange(pred_node, 0.0, pred_node->Length())); + } + } + } + if (pred_set.empty()) { + allowed_to_explore = false; + } else { + allowed_to_explore = true; + const auto& node_to_insert = GetLargestRange(pred_set); + nodes_of_curr_passage->insert(nodes_of_curr_passage->begin(), + node_to_insert); + node_set_of_curr_passage.emplace(node_to_insert.GetTopoNode()); + } + } +} + +void ExtendForward(bool enable_use_road_id, + const std::vector& nodes_of_next_passage, + const TopoRangeManager& range_manager, + std::vector* const nodes_of_curr_passage) { + std::unordered_set node_set_of_curr_passage; + NodeVecToSet(*nodes_of_curr_passage, &node_set_of_curr_passage); + auto& back_node = nodes_of_curr_passage->back(); + if (!IsCloseEnough(back_node.EndS(), back_node.FullLength())) { + if (!range_manager.Find(back_node.GetTopoNode())) { + if (IsCloseEnough(nodes_of_next_passage.back().EndS(), + nodes_of_next_passage.back().FullLength())) { + back_node.SetEndS(back_node.FullLength()); + } else { + double temp_s = nodes_of_next_passage.back().EndS() / + nodes_of_next_passage.back().FullLength() * + back_node.FullLength(); + back_node.SetEndS(std::min(temp_s, back_node.FullLength())); + } + } else { + return; + } + } + + bool allowed_to_explore = true; + while (allowed_to_explore) { + std::vector succ_set; + for (const auto& edge : + nodes_of_curr_passage->back().GetTopoNode()->OutToSucEdge()) { + const auto& succ_node = edge->ToNode(); + // if succ node is not in the same road + if (enable_use_road_id && + succ_node->RoadId() != nodes_of_curr_passage->back().RoadId()) { + continue; + } + // if succ node has been inserted + if (node_set_of_curr_passage.find(succ_node) != + node_set_of_curr_passage.end()) { + continue; + } + // if next passage is reachable from succ node + const NodeWithRange* reachable_node = nullptr; + if (IsReachableFrom(succ_node, nodes_of_next_passage, &reachable_node)) { + if (range_manager.Find(succ_node)) { + double black_s_start = range_manager.RangeStart(succ_node); + if (!IsCloseEnough(black_s_start, 0.0)) { + succ_set.push_back(BuildNodeRange(succ_node, 0.0, black_s_start)); + } + } else { + if (IsCloseEnough(reachable_node->EndS(), + reachable_node->FullLength())) { + succ_set.push_back( + BuildNodeRange(succ_node, 0.0, succ_node->Length())); + } else { + double push_end_s = reachable_node->EndS() / + reachable_node->FullLength() * + succ_node->Length(); + succ_set.push_back(BuildNodeRange(succ_node, 0.0, push_end_s)); + } + } + } + } + if (succ_set.empty()) { + allowed_to_explore = false; + } else { + allowed_to_explore = true; + const auto& node_to_insert = GetLargestRange(succ_set); + nodes_of_curr_passage->push_back(node_to_insert); + node_set_of_curr_passage.emplace(node_to_insert.GetTopoNode()); + } + } +} + +void ExtendPassages( + bool enable_use_road_id, const TopoRangeManager& range_manager, + std::vector>* const nodes_of_passages) { + int passage_num = nodes_of_passages->size(); + for (int i = 0; i < passage_num; ++i) { + if (i < passage_num - 1) { + ExtendForward(enable_use_road_id, nodes_of_passages->at(i + 1), + range_manager, &(nodes_of_passages->at(i))); + } + if (i > 0) { + ExtendBackward(enable_use_road_id, nodes_of_passages->at(i - 1), + range_manager, &(nodes_of_passages->at(i))); + } + } + for (int i = passage_num - 1; i >= 0; --i) { + if (i < passage_num - 1) { + ExtendForward(enable_use_road_id, nodes_of_passages->at(i + 1), + range_manager, &(nodes_of_passages->at(i))); + } + if (i > 0) { + ExtendBackward(enable_use_road_id, nodes_of_passages->at(i - 1), + range_manager, &(nodes_of_passages->at(i))); + } + } +} + +void LaneNodesToPassageRegion(const std::vector& nodes, + RoutingResponse::PassageRegion* const region) { + for (const auto& node : nodes) { + RoutingResponse::LaneSegment* seg = region->add_segment(); + seg->set_id(node.LaneId()); + seg->set_start_s(node.StartS()); + seg->set_end_s(node.EndS()); + } +} + +double CalculateDistance(const std::vector& nodes) { + double distance = nodes.at(0).EndS() - nodes.at(0).StartS(); + for (size_t i = 1; i < nodes.size(); ++i) { + auto edge = + nodes.at(i - 1).GetTopoNode()->GetOutEdgeTo(nodes.at(i).GetTopoNode()); + if (edge->Type() != TET_FORWARD) { + continue; + } + distance += nodes.at(i).EndS() - nodes.at(i).StartS(); + } + return distance; +} + +void PrintDebugInfo(const std::vector>>& + nodes_of_passages_of_ways, + const std::vector& road_id_of_ways, + const std::vector& is_virtual_of_ways) { + for (size_t i = 0; i < nodes_of_passages_of_ways.size(); ++i) { + if (is_virtual_of_ways[i]) { + AINFO << "----------Way " << i << " juntion----------"; + } else { + AINFO << "----------Way " << i << " road----------"; + } + AINFO << "road id: " << road_id_of_ways[i].c_str(); + for (size_t j = 0; j < nodes_of_passages_of_ways[i].size(); ++j) { + AINFO << "\tPassage " << j; + for (const auto& node : nodes_of_passages_of_ways[i][j]) { + AINFO << "\t\t" << node.LaneId() << " (" << node.StartS() << ", " + << node.EndS() << ")"; + } + } + } +} + +} // namespace + +bool ResultGenerator::GeneratePassageRegion( + const std::string& map_version, const RoutingRequest& request, + const std::vector& nodes, + const TopoRangeManager& range_manager, RoutingResponse* const result) { + AdapterManager::FillRoutingResponseHeader(FLAGS_node_name, result); + + if (!GeneratePassageRegion(nodes, range_manager, result)) { + return false; + } + + result->set_map_version(map_version); + result->mutable_measurement()->set_distance(CalculateDistance(nodes)); + result->mutable_routing_request()->CopyFrom(request); + return true; +} + +bool ResultGenerator::GeneratePassageRegion( + const std::vector& nodes, + const TopoRangeManager& range_manager, RoutingResponse* const result) { + std::vector> nodes_of_ways; + if (FLAGS_use_road_id) { + GetNodesOfWays(nodes, &nodes_of_ways); + } else { + GetNodesOfWaysBasedOnVirtual(nodes, &nodes_of_ways); + } + std::vector>> + nodes_of_passages_of_ways; + std::vector> + lane_change_types_of_ways; + std::vector road_id_of_ways; + std::vector is_virtual_of_ways; + for (size_t i = 0; i < nodes_of_ways.size(); ++i) { + std::vector> nodes_of_passages; + std::vector lane_change_types; + if (nodes_of_ways[i].empty()) { + return false; + } + if (!nodes_of_ways[i][0].IsVirtual()) { + is_virtual_of_ways.push_back(false); + if (!ExtractBasicPassages(nodes_of_ways[i], &nodes_of_passages, + &lane_change_types)) { + return false; + } + + ExtendPassages(FLAGS_use_road_id, range_manager, &nodes_of_passages); + + road_id_of_ways.push_back(GetRoadId(nodes_of_passages)); + nodes_of_passages_of_ways.push_back(std::move(nodes_of_passages)); + lane_change_types_of_ways.push_back(std::move(lane_change_types)); + } else { + is_virtual_of_ways.push_back(true); + nodes_of_passages.push_back(nodes_of_ways[i]); + + road_id_of_ways.push_back(GetRoadId(nodes_of_passages)); + nodes_of_passages_of_ways.push_back(std::move(nodes_of_passages)); + lane_change_types_of_ways.push_back(std::move(lane_change_types)); + } + } + + PrintDebugInfo(nodes_of_passages_of_ways, road_id_of_ways, + is_virtual_of_ways); + + for (size_t i = 0; i < nodes_of_passages_of_ways.size(); ++i) { + const auto& nodes_of_passages = nodes_of_passages_of_ways[i]; + if (!is_virtual_of_ways[i]) { + RoutingResponse::Road road; + road.set_id(road_id_of_ways[i]); + const auto& front_node = nodes_of_passages.front().front(); + road.mutable_in_lane()->set_id(front_node.LaneId()); + road.mutable_in_lane()->set_s(front_node.StartS()); + const auto& back_node = nodes_of_passages.back().back(); + road.mutable_out_lane()->set_id(back_node.LaneId()); + road.mutable_out_lane()->set_s(back_node.EndS()); + for (const auto& nodes_of_passage : nodes_of_passages) { + LaneNodesToPassageRegion(nodes_of_passage, road.add_passage_region()); + } + for (size_t j = 0; j < lane_change_types_of_ways[i].size(); ++j) { + RoutingResponse::LaneChangeInfo* lc_info = road.add_lane_change_info(); + lc_info->set_type(lane_change_types_of_ways[i][j]); + lc_info->set_start_passage_region_index(j); + lc_info->set_end_passage_region_index(j + 1); + } + result->add_route()->mutable_road_info()->CopyFrom(road); + } else { + RoutingResponse::Junction junction; + junction.set_id(road_id_of_ways[i]); + if (i > 0) { + junction.set_in_road_id(road_id_of_ways[i - 1]); + } else { + junction.set_in_road_id("UNKNOWN"); + } + if (i < road_id_of_ways.size() - 1) { + junction.set_out_road_id(road_id_of_ways[i + 1]); + } else { + junction.set_out_road_id("UNKNOWN"); + } + RoutingResponse::PassageRegion region; + for (const auto& node : nodes_of_passages.front()) { + RoutingResponse::LaneSegment* seg = region.add_segment(); + seg->set_id(node.LaneId()); + seg->set_start_s(node.StartS()); + seg->set_end_s(node.EndS()); + } + junction.mutable_passage_region()->CopyFrom(region); + result->add_route()->mutable_junction_info()->CopyFrom(junction); + } + } + return true; +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/core/result_generator.h b/modules/routing/core/result_generator.h new file mode 100644 index 00000000000..7d9ebb7d58f --- /dev/null +++ b/modules/routing/core/result_generator.h @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_CORE_RESULT_GENERATOR_H_ +#define MODULES_ROUTING_CORE_RESULT_GENERATOR_H_ + +#include +#include + +#include "modules/routing/graph/node_with_range.h" +#include "modules/routing/graph/topo_graph.h" +#include "modules/routing/graph/topo_range_manager.h" +#include "modules/routing/proto/routing.pb.h" + +namespace apollo { +namespace routing { + +class ResultGenerator { + public: + ResultGenerator() = default; + ~ResultGenerator() = default; + + bool GeneratePassageRegion(const std::string& map_version, + const RoutingRequest& request, + const std::vector& nodes, + const TopoRangeManager& range_manager, + RoutingResponse* const result); + + private: + bool GeneratePassageRegion(const std::vector& nodes, + const TopoRangeManager& range_manager, + RoutingResponse* const result); +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_CORE_RESULT_GENERATOR_H_ diff --git a/modules/routing/graph/BUILD b/modules/routing/graph/BUILD new file mode 100644 index 00000000000..e02bdc6b6f0 --- /dev/null +++ b/modules/routing/graph/BUILD @@ -0,0 +1,194 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "graph", + deps = [ + ":routing_node_with_range", + ":routing_sub_topo_graph", + ":routing_topo_graph", + ":routing_topo_node", + ":routing_topo_range_manager", + ], +) + +cc_library( + name = "routing_topo_range", + srcs = [ + "topo_range.cc", + ], + hdrs = [ + "topo_range.h", + ], + deps = [ + "//modules/routing/common:routing_gflags", + ], +) + +cc_library( + name = "routing_topo_range_manager", + srcs = [ + "topo_range_manager.cc", + ], + hdrs = [ + "topo_range_manager.h", + ], + deps = [ + ":routing_topo_node", + ":routing_topo_range", + ], +) + +cc_library( + name = "routing_range_utils", + hdrs = [ + "range_utils.h", + ], + deps = [ + ], +) + +cc_library( + name = "routing_node_with_range", + srcs = [ + "node_with_range.cc", + ], + hdrs = [ + "node_with_range.h", + ], + deps = [ + ":routing_topo_node", + ":routing_topo_range", + ], +) + +cc_library( + name = "routing_topo_node", + srcs = [ + "topo_node.cc", + ], + hdrs = [ + "topo_node.h", + ], + deps = [ + ":routing_range_utils", + ":routing_topo_range", + "//modules/common:log", + "//modules/common/proto:common_proto", + "//modules/map/proto:map_proto", + "//modules/routing/proto:routing_proto", + ], +) + +cc_library( + name = "routing_topo_graph", + srcs = [ + "topo_graph.cc", + ], + hdrs = [ + "topo_graph.h", + ], + deps = [ + ":routing_topo_node", + "//modules/common", + "//modules/common/proto:common_proto", + "//modules/common/util", + "//modules/map/proto:map_proto", + "//modules/routing/common:routing_gflags", + "//modules/routing/proto:routing_proto", + ], +) + +cc_library( + name = "routing_sub_topo_graph", + srcs = [ + "sub_topo_graph.cc", + ], + hdrs = [ + "sub_topo_graph.h", + ], + deps = [ + ":routing_node_with_range", + ":routing_topo_node", + "//modules/common", + "//modules/common/proto:common_proto", + "//modules/common/util", + "//modules/map/proto:map_proto", + "//modules/routing/common:routing_gflags", + "//modules/routing/proto:routing_proto", + ], +) + +cc_library( + name = "routing_topo_test_utils", + srcs = [ + "topo_test_utils.cc", + ], + hdrs = [ + "topo_test_utils.h", + ], + deps = [ + ":routing_topo_graph", + ":routing_topo_node", + ], +) + +cc_test( + name = "topo_node_test", + size = "small", + srcs = [ + "topo_node_test.cc", + ], + deps = [ + ":routing_topo_test_utils", + "@gtest//:main", + ], +) + +cc_test( + name = "topo_range_test", + size = "small", + srcs = [ + "topo_range_test.cc", + ], + deps = [ + ":routing_node_with_range", + ":routing_range_utils", + ":routing_topo_test_utils", + "@gtest//:main", + ], +) + +cc_test( + name = "topo_graph_test", + size = "small", + srcs = [ + "topo_graph_test.cc", + ], + deps = [ + ":routing_node_with_range", + ":routing_range_utils", + ":routing_topo_graph", + ":routing_topo_test_utils", + "@gtest//:main", + ], +) + +cc_test( + name = "sub_topo_graph_test", + size = "small", + srcs = [ + "sub_topo_graph_test.cc", + ], + deps = [ + ":routing_node_with_range", + ":routing_range_utils", + ":routing_sub_topo_graph", + ":routing_topo_graph", + ":routing_topo_test_utils", + "@gtest//:main", + ], +) + +cpplint() diff --git a/modules/routing/graph/node_with_range.cc b/modules/routing/graph/node_with_range.cc new file mode 100644 index 00000000000..b5841032258 --- /dev/null +++ b/modules/routing/graph/node_with_range.cc @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/graph/node_with_range.h" + +namespace apollo { +namespace routing { + +NodeWithRange::NodeWithRange(const NodeSRange& range, const TopoNode* node) + : NodeSRange(range), topo_node_(node) {} + +NodeWithRange::~NodeWithRange() {} + +bool NodeWithRange::operator<(const NodeWithRange& other) const { + return StartS() > other.StartS(); +} + +const TopoNode* NodeWithRange::GetTopoNode() const { return topo_node_; } + +bool NodeWithRange::IsVirtual() const { return topo_node_->IsVirtual(); } + +const std::string& NodeWithRange::RoadId() const { + return topo_node_->RoadId(); +} + +const std::string& NodeWithRange::LaneId() const { + return topo_node_->LaneId(); +} + +double NodeWithRange::FullLength() const { return topo_node_->Length(); } + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/graph/node_with_range.h b/modules/routing/graph/node_with_range.h new file mode 100644 index 00000000000..615b25871bb --- /dev/null +++ b/modules/routing/graph/node_with_range.h @@ -0,0 +1,47 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_GRAPH_NODE_WITH_RANGE_H +#define MODULES_ROUTING_GRAPH_NODE_WITH_RANGE_H + +#include + +#include "modules/routing/graph/topo_node.h" +#include "modules/routing/graph/topo_range.h" + +namespace apollo { +namespace routing { + +class NodeWithRange : public NodeSRange { + public: + NodeWithRange(const NodeSRange& range, const TopoNode* node); + ~NodeWithRange(); + bool operator<(const NodeWithRange& other) const; + + const TopoNode* GetTopoNode() const; + bool IsVirtual() const; + const std::string& RoadId() const; + const std::string& LaneId() const; + double FullLength() const; + + private: + const TopoNode* topo_node_; +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_GRAPH_NODE_WITH_RANGE_H diff --git a/modules/routing/graph/range_utils.h b/modules/routing/graph/range_utils.h new file mode 100644 index 00000000000..0f7a30fc12f --- /dev/null +++ b/modules/routing/graph/range_utils.h @@ -0,0 +1,105 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_GRAPH_RANGE_UTILS_H +#define MODULES_ROUTING_GRAPH_RANGE_UTILS_H + +#include + +namespace apollo { +namespace routing { + +template +int BinarySearchForSLarger(const std::vector& sorted_vec, double value_s) { + if (sorted_vec.empty()) { + return -1; + } + int start_index = 0; + int end_index = sorted_vec.size() - 1; + double internal_s = 0.0; + int middle_index = 0; + while (end_index - start_index > 1) { + middle_index = (start_index + end_index) / 2; + internal_s = sorted_vec[middle_index].StartS(); + if (internal_s > value_s) { + end_index = middle_index; + } else { + start_index = middle_index; + } + } + double end_s = sorted_vec[start_index].EndS(); + if (value_s <= end_s) { + return start_index; + } + return end_index; +} + +template +int BinarySearchForSSmaller(const std::vector& sorted_vec, double value_s) { + if (sorted_vec.empty()) { + return -1; + } + int start_index = 0; + int end_index = sorted_vec.size() - 1; + double internal_s = 0.0; + int middle_index = 0; + while (end_index - start_index > 1) { + middle_index = (start_index + end_index) / 2; + internal_s = sorted_vec[middle_index].EndS(); + if (internal_s > value_s) { + end_index = middle_index; + } else { + start_index = middle_index; + } + } + double start_s = sorted_vec[end_index].StartS(); + if (value_s > start_s) { + return end_index; + } + return start_index; +} + +template +int BinarySearchCheckValidSIndex(const std::vector& sorted_vec, int index, + double value_s) { + if (index == -1) { + return -1; + } + double start_s = sorted_vec[index].StartS(); + double end_s = sorted_vec[index].EndS(); + + if (start_s <= value_s && end_s >= value_s) { + return index; + } + return -1; +} + +template +int BinarySearchForStartS(const std::vector& sorted_vec, double value_s) { + int index = BinarySearchForSLarger(sorted_vec, value_s); + return BinarySearchCheckValidSIndex(sorted_vec, index, value_s); +} + +template +int BinarySearchForEndS(const std::vector& sorted_vec, double value_s) { + int index = BinarySearchForSSmaller(sorted_vec, value_s); + return BinarySearchCheckValidSIndex(sorted_vec, index, value_s); +} + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_GRAPH_RANGE_UTILS_H diff --git a/modules/routing/graph/sub_topo_graph.cc b/modules/routing/graph/sub_topo_graph.cc new file mode 100644 index 00000000000..0912d14e429 --- /dev/null +++ b/modules/routing/graph/sub_topo_graph.cc @@ -0,0 +1,369 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/graph/sub_topo_graph.h" + +#include +#include +#include + +#include "modules/routing/graph/node_with_range.h" +#include "modules/routing/graph/range_utils.h" +#include "modules/routing/graph/topo_node.h" + +#include "modules/common/log.h" + +namespace apollo { +namespace routing { + +namespace { + +const double MIN_DIFF_LENGTH = 0.1e-6; // in meters +const double MIN_INTERNAL_FOR_NODE = 0.01; // in meters +const double MIN_POTENTIAL_LANE_CHANGE_LEN = 3.0; // in meters + +bool IsCloseEnough(double s1, double s2) { + return std::fabs(s1 - s2) < MIN_DIFF_LENGTH; +} + +void MergeBlockRange(const TopoNode* topo_node, + const std::vector& origin_range, + std::vector* block_range) { + std::vector sorted_origin_range; + sorted_origin_range.insert(sorted_origin_range.end(), origin_range.begin(), + origin_range.end()); + sort(sorted_origin_range.begin(), sorted_origin_range.end()); + int cur_index = 0; + int total_size = sorted_origin_range.size(); + while (cur_index < total_size) { + NodeSRange range(sorted_origin_range[cur_index]); + ++cur_index; + while (cur_index < total_size && + range.MergeRangeOverlap(sorted_origin_range[cur_index])) { + ++cur_index; + } + if (range.EndS() < topo_node->StartS() || + range.StartS() > topo_node->EndS()) { + continue; + } + range.SetStartS(std::max(topo_node->StartS(), range.StartS())); + range.SetEndS(std::min(topo_node->EndS(), range.EndS())); + block_range->push_back(std::move(range)); + } +} + +void GetSortedValidRange(const TopoNode* topo_node, + const std::vector& origin_range, + std::vector* valid_range) { + std::vector block_range; + MergeBlockRange(topo_node, origin_range, &block_range); + double start_s = topo_node->StartS(); + double end_s = topo_node->EndS(); + std::vector all_value; + all_value.push_back(start_s); + for (const auto& range : block_range) { + all_value.push_back(range.StartS()); + all_value.push_back(range.EndS()); + } + all_value.push_back(end_s); + for (size_t i = 0; i < all_value.size(); i += 2) { + NodeSRange new_range(all_value[i], all_value[i + 1]); + valid_range->push_back(std::move(new_range)); + } +} + +bool IsReachable(const TopoNode* from_node, const TopoNode* to_node) { + double start_s = to_node->StartS() / to_node->Length() * from_node->Length(); + start_s = std::max(start_s, from_node->StartS()); + double end_s = to_node->EndS() / to_node->Length() * from_node->Length(); + end_s = std::min(end_s, from_node->EndS()); + return (end_s - start_s > MIN_POTENTIAL_LANE_CHANGE_LEN); +} + +} // namespace + +SubTopoGraph::SubTopoGraph( + const std::unordered_map >& + black_map) { + std::vector valid_range; + for (const auto& map_iter : black_map) { + valid_range.clear(); + GetSortedValidRange(map_iter.first, map_iter.second, &valid_range); + InitSubNodeByValidRange(map_iter.first, valid_range); + } + + for (const auto& map_iter : black_map) { + InitSubEdge(map_iter.first); + } + + for (const auto& map_iter : black_map) { + AddPotentialEdge(map_iter.first); + } +} + +SubTopoGraph::~SubTopoGraph() {} + +void SubTopoGraph::GetSubInEdgesIntoSubGraph( + const TopoEdge* edge, + std::unordered_set* const sub_edges) const { + const auto* from_node = edge->FromNode(); + const auto* to_node = edge->ToNode(); + std::unordered_set sub_nodes; + if (from_node->IsSubNode() || to_node->IsSubNode() || + !GetSubNodes(to_node, &sub_nodes)) { + sub_edges->insert(edge); + return; + } + for (const auto* sub_node : sub_nodes) { + for (const auto* in_edge : sub_node->InFromAllEdge()) { + if (in_edge->FromNode() == from_node) { + sub_edges->insert(in_edge); + } + } + } +} + +void SubTopoGraph::GetSubOutEdgesIntoSubGraph( + const TopoEdge* edge, + std::unordered_set* const sub_edges) const { + const auto* from_node = edge->FromNode(); + const auto* to_node = edge->ToNode(); + std::unordered_set sub_nodes; + if (from_node->IsSubNode() || to_node->IsSubNode() || + !GetSubNodes(from_node, &sub_nodes)) { + sub_edges->insert(edge); + return; + } + for (const auto* sub_node : sub_nodes) { + for (const auto* out_edge : sub_node->OutToAllEdge()) { + if (out_edge->ToNode() == to_node) { + sub_edges->insert(out_edge); + } + } + } +} + +const TopoNode* SubTopoGraph::GetSubNodeWithS(const TopoNode* topo_node, + double s) const { + const auto& map_iter = sub_node_range_sorted_map_.find(topo_node); + if (map_iter == sub_node_range_sorted_map_.end()) { + return topo_node; + } + const auto& sorted_vec = map_iter->second; + // sorted vec can't be empty! + int index = BinarySearchForStartS(sorted_vec, s); + if (index < 0) { + return nullptr; + } + return sorted_vec[index].GetTopoNode(); +} + +void SubTopoGraph::InitSubNodeByValidRange( + const TopoNode* topo_node, const std::vector& valid_range) { + // Attention: no matter topo node has valid_range or not, + // create map value first; + auto& sub_node_vec = sub_node_range_sorted_map_[topo_node]; + auto& sub_node_set = sub_node_map_[topo_node]; + + std::vector sub_node_sorted_vec; + for (const auto& range : valid_range) { + if (range.Length() < MIN_INTERNAL_FOR_NODE) { + continue; + } + std::shared_ptr sub_topo_node_ptr; + sub_topo_node_ptr.reset(new TopoNode(topo_node, range)); + NodeWithRange node_with_range(range, sub_topo_node_ptr.get()); + sub_node_vec.push_back(std::move(node_with_range)); + sub_node_set.insert(sub_topo_node_ptr.get()); + sub_node_sorted_vec.push_back(sub_topo_node_ptr.get()); + topo_nodes_.push_back(std::move(sub_topo_node_ptr)); + } + + for (size_t i = 1; i < sub_node_sorted_vec.size(); ++i) { + auto* pre_node = sub_node_sorted_vec[i - 1]; + auto* next_node = sub_node_sorted_vec[i]; + if (IsCloseEnough(pre_node->EndS(), next_node->StartS())) { + Edge edge; + edge.set_from_lane_id(topo_node->LaneId()); + edge.set_to_lane_id(topo_node->LaneId()); + edge.set_direction_type(Edge::FORWARD); + edge.set_cost(0.0); + std::shared_ptr topo_edge_ptr; + topo_edge_ptr.reset(new TopoEdge(edge, pre_node, next_node)); + pre_node->AddOutEdge(topo_edge_ptr.get()); + next_node->AddInEdge(topo_edge_ptr.get()); + topo_edges_.push_back(std::move(topo_edge_ptr)); + } + } +} + +void SubTopoGraph::InitSubEdge(const TopoNode* topo_node) { + std::unordered_set sub_nodes; + if (!GetSubNodes(topo_node, &sub_nodes)) { + return; + } + + for (auto* sub_node : sub_nodes) { + InitInSubNodeSubEdge(sub_node, topo_node->InFromAllEdge()); + InitOutSubNodeSubEdge(sub_node, topo_node->OutToAllEdge()); + } +} + +void SubTopoGraph::InitInSubNodeSubEdge( + TopoNode* const sub_node, + const std::unordered_set origin_edge) { + std::unordered_set other_sub_nodes; + for (const auto* in_edge : origin_edge) { + if (GetSubNodes(in_edge->FromNode(), &other_sub_nodes)) { + for (auto* sub_from_node : other_sub_nodes) { + if (!sub_from_node->IsOverlapEnough(sub_node, in_edge)) { + continue; + } + std::shared_ptr topo_edge_ptr; + topo_edge_ptr.reset( + new TopoEdge(in_edge->PbEdge(), sub_from_node, sub_node)); + sub_node->AddInEdge(topo_edge_ptr.get()); + sub_from_node->AddOutEdge(topo_edge_ptr.get()); + topo_edges_.push_back(std::move(topo_edge_ptr)); + } + } else if (in_edge->FromNode()->IsOverlapEnough(sub_node, in_edge)) { + std::shared_ptr topo_edge_ptr; + topo_edge_ptr.reset( + new TopoEdge(in_edge->PbEdge(), in_edge->FromNode(), sub_node)); + sub_node->AddInEdge(topo_edge_ptr.get()); + topo_edges_.push_back(std::move(topo_edge_ptr)); + } + } +} + +void SubTopoGraph::InitOutSubNodeSubEdge( + TopoNode* const sub_node, + const std::unordered_set origin_edge) { + std::unordered_set other_sub_nodes; + for (const auto* out_edge : origin_edge) { + if (GetSubNodes(out_edge->ToNode(), &other_sub_nodes)) { + for (auto* sub_to_node : other_sub_nodes) { + if (!sub_node->IsOverlapEnough(sub_to_node, out_edge)) { + continue; + } + std::shared_ptr topo_edge_ptr; + topo_edge_ptr.reset( + new TopoEdge(out_edge->PbEdge(), sub_node, sub_to_node)); + sub_node->AddOutEdge(topo_edge_ptr.get()); + sub_to_node->AddInEdge(topo_edge_ptr.get()); + topo_edges_.push_back(std::move(topo_edge_ptr)); + } + } else if (sub_node->IsOverlapEnough(out_edge->ToNode(), out_edge)) { + std::shared_ptr topo_edge_ptr; + topo_edge_ptr.reset( + new TopoEdge(out_edge->PbEdge(), sub_node, out_edge->ToNode())); + sub_node->AddOutEdge(topo_edge_ptr.get()); + topo_edges_.push_back(std::move(topo_edge_ptr)); + } + } +} + +bool SubTopoGraph::GetSubNodes( + const TopoNode* node, + std::unordered_set* const sub_nodes) const { + const auto& iter = sub_node_map_.find(node); + if (iter == sub_node_map_.end()) { + return false; + } + sub_nodes->clear(); + sub_nodes->insert(iter->second.begin(), iter->second.end()); + return true; +} + +void SubTopoGraph::AddPotentialEdge(const TopoNode* topo_node) { + std::unordered_set sub_nodes; + if (!GetSubNodes(topo_node, &sub_nodes)) { + return; + } + for (auto* sub_node : sub_nodes) { + AddPotentialInEdge(sub_node, topo_node->InFromLeftOrRightEdge()); + AddPotentialOutEdge(sub_node, topo_node->OutToLeftOrRightEdge()); + } +} + +void SubTopoGraph::AddPotentialInEdge( + TopoNode* const sub_node, + const std::unordered_set origin_edge) { + std::unordered_set other_sub_nodes; + for (const auto* in_edge : origin_edge) { + if (GetSubNodes(in_edge->FromNode(), &other_sub_nodes)) { + for (auto* sub_from_node : other_sub_nodes) { + if (sub_node->GetInEdgeFrom(sub_from_node) != nullptr) { + continue; + } + if (!IsReachable(sub_from_node, sub_node)) { + continue; + } + std::shared_ptr topo_edge_ptr; + topo_edge_ptr.reset( + new TopoEdge(in_edge->PbEdge(), sub_from_node, sub_node)); + sub_node->AddInEdge(topo_edge_ptr.get()); + sub_from_node->AddOutEdge(topo_edge_ptr.get()); + topo_edges_.push_back(std::move(topo_edge_ptr)); + } + } else { + if (sub_node->GetInEdgeFrom(in_edge->FromNode()) != nullptr) { + continue; + } + std::shared_ptr topo_edge_ptr; + topo_edge_ptr.reset( + new TopoEdge(in_edge->PbEdge(), in_edge->FromNode(), sub_node)); + sub_node->AddInEdge(topo_edge_ptr.get()); + topo_edges_.push_back(std::move(topo_edge_ptr)); + } + } +} + +void SubTopoGraph::AddPotentialOutEdge( + TopoNode* const sub_node, + const std::unordered_set origin_edge) { + std::unordered_set other_sub_nodes; + for (const auto* out_edge : origin_edge) { + if (GetSubNodes(out_edge->ToNode(), &other_sub_nodes)) { + for (auto* sub_to_node : other_sub_nodes) { + if (sub_node->GetOutEdgeTo(sub_to_node) != nullptr) { + continue; + } + if (!IsReachable(sub_node, sub_to_node)) { + continue; + } + std::shared_ptr topo_edge_ptr; + topo_edge_ptr.reset( + new TopoEdge(out_edge->PbEdge(), sub_node, sub_to_node)); + sub_node->AddOutEdge(topo_edge_ptr.get()); + sub_to_node->AddInEdge(topo_edge_ptr.get()); + topo_edges_.push_back(std::move(topo_edge_ptr)); + } + } else { + if (sub_node->GetOutEdgeTo(out_edge->ToNode()) != nullptr) { + continue; + } + std::shared_ptr topo_edge_ptr; + topo_edge_ptr.reset( + new TopoEdge(out_edge->PbEdge(), sub_node, out_edge->ToNode())); + sub_node->AddOutEdge(topo_edge_ptr.get()); + topo_edges_.push_back(std::move(topo_edge_ptr)); + } + } +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/graph/sub_topo_graph.h b/modules/routing/graph/sub_topo_graph.h new file mode 100644 index 00000000000..c1e1fd0906b --- /dev/null +++ b/modules/routing/graph/sub_topo_graph.h @@ -0,0 +1,110 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_GRAPH_SUB_TOPO_GRAPH_H +#define MODULES_ROUTING_GRAPH_SUB_TOPO_GRAPH_H + +#include +#include +#include +#include +#include + +#include "modules/routing/graph/node_with_range.h" +#include "modules/routing/graph/topo_node.h" + +namespace apollo { +namespace routing { + +class SubTopoGraph { + public: + explicit SubTopoGraph( + const std::unordered_map>& + black_map); + ~SubTopoGraph(); + + // edge: A -> B not sub edge + // 1. A has no sub node, B has no sub node + // return origin edge A -> B + // 2. A has no sub node, B has sub node + // return all edge A -> B' + // if B is black lane and no valid edge, + // return empty set + // 3. A has sub node, B has sub node + // return empty set + // 4. A has sub node, B has no sub node + // return empty set + // edge: A -> B is sub edge + // 1. return empty set + void GetSubInEdgesIntoSubGraph( + const TopoEdge* edge, + std::unordered_set* const sub_edges) const; + + // edge: A -> B not sub edge + // 1. A has no sub node, B has no sub node + // return origin edge A -> B + // 2. A has no sub node, B has sub node + // return all edge A -> B' + // if B is black lane and no valid edge, + // return empty set + // 3. A has sub node, B has sub node + // return empty set + // 4. A has sub node, B has no sub node + // return empty set + // edge: A -> B is sub edge + // 1. return empty set + void GetSubOutEdgesIntoSubGraph( + const TopoEdge* edge, + std::unordered_set* const sub_edges) const; + + const TopoNode* GetSubNodeWithS(const TopoNode* topo_node, double s) const; + + private: + void InitSubNodeByValidRange(const TopoNode* topo_node, + const std::vector& valid_range); + void InitSubEdge(const TopoNode* topo_node); + + void InitInSubNodeSubEdge( + TopoNode* const sub_node, + const std::unordered_set origin_edge); + void InitOutSubNodeSubEdge( + TopoNode* const sub_node, + const std::unordered_set origin_edge); + + bool GetSubNodes(const TopoNode* node, + std::unordered_set* const sub_nodes) const; + + void AddPotentialEdge(const TopoNode* topo_node); + void AddPotentialInEdge( + TopoNode* const sub_node, + const std::unordered_set origin_edge); + void AddPotentialOutEdge( + TopoNode* const sub_node, + const std::unordered_set origin_edge); + + private: + std::vector> topo_nodes_; + std::vector> topo_edges_; + std::unordered_map> + sub_node_range_sorted_map_; + std::unordered_map> + sub_node_map_; +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_GRAPH_SUB_TOPO_GRAPH_H diff --git a/modules/routing/graph/sub_topo_graph_test.cc b/modules/routing/graph/sub_topo_graph_test.cc new file mode 100644 index 00000000000..77ae88c29fc --- /dev/null +++ b/modules/routing/graph/sub_topo_graph_test.cc @@ -0,0 +1,579 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include + +#include "gtest/gtest.h" + +#include "modules/routing/graph/sub_topo_graph.h" +#include "modules/routing/graph/topo_graph.h" +#include "modules/routing/graph/topo_test_utils.h" + +namespace apollo { +namespace routing { + +namespace { + +NodeSRange GetSRange(double start_s, double end_s) { + NodeSRange range(start_s, end_s); + return range; +} + +void GetTopoGraph(TopoGraph* topo_graph) { + Graph graph; + GetGraph2ForTest(&graph); + ASSERT_TRUE(topo_graph->LoadGraph(graph)); + ASSERT_EQ(TEST_MAP_VERSION, topo_graph->MapVersion()); + ASSERT_EQ(TEST_MAP_DISTRICT, topo_graph->MapDistrict()); +} + +} // namespace + +TEST(SubTopoGraphTestSuit, one_sub_graph_all_valid) { + TopoGraph topo_graph; + GetTopoGraph(&topo_graph); + + const TopoNode* node_1 = topo_graph.GetNode(TEST_L1); + ASSERT_TRUE(node_1 != nullptr); + const TopoNode* node_2 = topo_graph.GetNode(TEST_L2); + ASSERT_TRUE(node_2 != nullptr); + + std::unordered_map> range_list; + range_list[node_2].push_back(GetSRange(20.0, 50.0)); + SubTopoGraph sub_topo_graph(range_list); + + ASSERT_EQ(1, node_1->InFromAllEdge().size()); + ASSERT_EQ(1, node_1->InFromRightEdge().size()); + ASSERT_EQ(2, node_1->OutToAllEdge().size()); + ASSERT_EQ(1, node_1->OutToSucEdge().size()); + ASSERT_EQ(1, node_1->OutToRightEdge().size()); + ASSERT_DOUBLE_EQ(TEST_LANE_COST, node_1->Cost()); + ASSERT_EQ(TEST_L1, node_1->LaneId()); + ASSERT_EQ(TEST_R1, node_1->RoadId()); + ASSERT_EQ(node_1, node_1->OriginNode()); + ASSERT_DOUBLE_EQ(0.0, node_1->StartS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, node_1->EndS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, node_1->Length()); + ASSERT_FALSE(node_1->IsSubNode()); + + const TopoEdge* edge_1_2 = node_1->GetOutEdgeTo(node_2); + ASSERT_TRUE(edge_1_2 != nullptr); + + std::unordered_set sub_edges_1_2; + sub_topo_graph.GetSubInEdgesIntoSubGraph(edge_1_2, &sub_edges_1_2); + ASSERT_EQ(2, sub_edges_1_2.size()); + + double min_start_s = std::numeric_limits::max(); + double max_start_s = 0.0; + double min_end_s = std::numeric_limits::max(); + double max_end_s = 0.0; + for (const auto* edge : sub_edges_1_2) { + ASSERT_EQ(node_1, edge->FromNode()); + const auto* to_node = edge->ToNode(); + min_start_s = std::min(to_node->StartS(), min_start_s); + max_start_s = std::max(to_node->StartS(), max_start_s); + min_end_s = std::min(to_node->EndS(), min_end_s); + max_end_s = std::max(to_node->EndS(), max_end_s); + } + + ASSERT_DOUBLE_EQ(0.0, min_start_s); + ASSERT_DOUBLE_EQ(20.0, min_end_s); + ASSERT_DOUBLE_EQ(50.0, max_start_s); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, max_end_s); + + const TopoEdge* edge_2_1 = node_2->GetOutEdgeTo(node_1); + ASSERT_TRUE(edge_2_1 != nullptr); + + std::unordered_set sub_edges_2_1; + sub_topo_graph.GetSubInEdgesIntoSubGraph(edge_2_1, &sub_edges_2_1); + // return origin edge when A has sub node, B has no sub node + ASSERT_EQ(1, sub_edges_2_1.size()); + const auto* out_edge = *(sub_edges_2_1.begin()); + ASSERT_EQ(edge_2_1, out_edge); + + const TopoNode* node_4 = topo_graph.GetNode(TEST_L4); + ASSERT_TRUE(node_4 != nullptr); + const TopoEdge* edge_2_4 = node_2->GetOutEdgeTo(node_4); + + std::unordered_set sub_edges_2_4; + sub_topo_graph.GetSubOutEdgesIntoSubGraph(edge_2_4, &sub_edges_2_4); + ASSERT_EQ(1, sub_edges_2_4.size()); + const auto* sub_node_in_2 = (*(sub_edges_2_4.begin()))->FromNode(); + ASSERT_EQ(50.0, sub_node_in_2->StartS()); + ASSERT_EQ(TEST_LANE_LENGTH, sub_node_in_2->EndS()); + + ASSERT_EQ(1, sub_node_in_2->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node_in_2->InFromLeftEdge().size()); + ASSERT_EQ(2, sub_node_in_2->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node_in_2->OutToLeftEdge().size()); + ASSERT_EQ(1, sub_node_in_2->OutToSucEdge().size()); + ASSERT_DOUBLE_EQ(TEST_LANE_COST, sub_node_in_2->Cost()); + ASSERT_EQ(TEST_L2, sub_node_in_2->LaneId()); + ASSERT_EQ(TEST_R1, sub_node_in_2->RoadId()); + ASSERT_EQ(node_2, sub_node_in_2->OriginNode()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, sub_node_in_2->Length()); + ASSERT_TRUE(sub_node_in_2->IsSubNode()); +} + +TEST(SubTopoGraphTestSuit, one_sub_graph_pre_valid) { + TopoGraph topo_graph; + GetTopoGraph(&topo_graph); + + const TopoNode* node_1 = topo_graph.GetNode(TEST_L1); + ASSERT_TRUE(node_1 != nullptr); + const TopoNode* node_2 = topo_graph.GetNode(TEST_L2); + ASSERT_TRUE(node_2 != nullptr); + + std::unordered_map> range_list; + range_list[node_2].push_back(GetSRange(9.9, 50.0)); + SubTopoGraph sub_topo_graph(range_list); + + const TopoEdge* edge_1_2 = node_1->GetOutEdgeTo(node_2); + ASSERT_TRUE(edge_1_2 != nullptr); + + std::unordered_set sub_edges_1_2; + sub_topo_graph.GetSubInEdgesIntoSubGraph(edge_1_2, &sub_edges_1_2); + ASSERT_EQ(2, sub_edges_1_2.size()); + + for (const auto* edge : sub_edges_1_2) { + const auto* to_sub_node = edge->ToNode(); + if (to_sub_node->EndS() < 50.0) { + ASSERT_DOUBLE_EQ(0.0, to_sub_node->StartS()); + ASSERT_DOUBLE_EQ(9.9, to_sub_node->EndS()); + } else { + ASSERT_DOUBLE_EQ(50.0, to_sub_node->StartS()); + ASSERT_DOUBLE_EQ(100.0, to_sub_node->EndS()); + } + } +} + +TEST(SubTopoGraphTestSuit, one_sub_graph_suc_valid) { + TopoGraph topo_graph; + GetTopoGraph(&topo_graph); + + const TopoNode* node_1 = topo_graph.GetNode(TEST_L1); + ASSERT_TRUE(node_1 != nullptr); + const TopoNode* node_2 = topo_graph.GetNode(TEST_L2); + ASSERT_TRUE(node_2 != nullptr); + + std::unordered_map> range_list; + range_list[node_2].push_back(GetSRange(20.0, TEST_LANE_LENGTH - 5.0)); + SubTopoGraph sub_topo_graph(range_list); + + const TopoEdge* edge_1_2 = node_1->GetOutEdgeTo(node_2); + ASSERT_TRUE(edge_1_2 != nullptr); + + std::unordered_set sub_edges_1_2; + sub_topo_graph.GetSubInEdgesIntoSubGraph(edge_1_2, &sub_edges_1_2); + ASSERT_EQ(2, sub_edges_1_2.size()); + + for (const auto* edge : sub_edges_1_2) { + const auto* to_sub_node = edge->ToNode(); + if (to_sub_node->EndS() < 50.0) { + ASSERT_DOUBLE_EQ(0.0, to_sub_node->StartS()); + ASSERT_DOUBLE_EQ(20.0, to_sub_node->EndS()); + } else { + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH - 5.0, to_sub_node->StartS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, to_sub_node->EndS()); + } + } +} + +TEST(SubTopoGraphTestSuit, two_sub_graph_nearby) { + TopoGraph topo_graph; + GetTopoGraph(&topo_graph); + + const TopoNode* node_1 = topo_graph.GetNode(TEST_L1); + ASSERT_TRUE(node_1 != nullptr); + const TopoNode* node_2 = topo_graph.GetNode(TEST_L2); + ASSERT_TRUE(node_2 != nullptr); + const TopoNode* node_3 = topo_graph.GetNode(TEST_L3); + ASSERT_TRUE(node_3 != nullptr); + const TopoNode* node_4 = topo_graph.GetNode(TEST_L4); + ASSERT_TRUE(node_4 != nullptr); + + std::unordered_map> range_list; + range_list[node_3].push_back(GetSRange(20.0, 50.0)); + range_list[node_4].push_back(GetSRange(20.0, 50.0)); + SubTopoGraph sub_topo_graph(range_list); + + { + const TopoEdge* edge_3_4 = node_3->GetOutEdgeTo(node_4); + ASSERT_TRUE(edge_3_4 != nullptr); + + std::unordered_set sub_edges_3_4; + sub_topo_graph.GetSubInEdgesIntoSubGraph(edge_3_4, &sub_edges_3_4); + // both node has sub nodes, only (none sub node) -> (has sub node) + // will get sub edges + ASSERT_EQ(0, sub_edges_3_4.size()); + } + + { + const TopoEdge* edge_4_3 = node_4->GetOutEdgeTo(node_3); + ASSERT_TRUE(edge_4_3 != nullptr); + + std::unordered_set sub_edges_4_3; + sub_topo_graph.GetSubInEdgesIntoSubGraph(edge_4_3, &sub_edges_4_3); + // both node has sub nodes, only (none sub node) -> (has sub node) + // will get sub edges + ASSERT_EQ(0, sub_edges_4_3.size()); + } + + { + const TopoEdge* edge_1_3 = node_1->GetOutEdgeTo(node_3); + ASSERT_TRUE(edge_1_3 != nullptr); + + std::unordered_set sub_edges_1_3; + sub_topo_graph.GetSubInEdgesIntoSubGraph(edge_1_3, &sub_edges_1_3); + ASSERT_EQ(1, sub_edges_1_3.size()); + + const auto* edge = *(sub_edges_1_3.begin()); + const auto* to_node = edge->ToNode(); + ASSERT_EQ(2, to_node->InFromAllEdge().size()); + ASSERT_EQ(1, to_node->InFromRightEdge().size()); + ASSERT_EQ(1, to_node->InFromPreEdge().size()); + ASSERT_EQ(1, to_node->OutToAllEdge().size()); + ASSERT_EQ(1, to_node->OutToRightEdge().size()); + ASSERT_EQ(TEST_L3, to_node->LaneId()); + ASSERT_EQ(TEST_R2, to_node->RoadId()); + ASSERT_EQ(node_3, to_node->OriginNode()); + ASSERT_DOUBLE_EQ(0.0, to_node->StartS()); + ASSERT_DOUBLE_EQ(20.0, to_node->EndS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, to_node->Length()); + ASSERT_TRUE(to_node->IsSubNode()); + + const auto* right_edge = *(to_node->OutToRightEdge().begin()); + const auto* right_to_node = right_edge->ToNode(); + + ASSERT_EQ(3, right_to_node->InFromAllEdge().size()); + ASSERT_EQ(1, right_to_node->InFromLeftEdge().size()); + ASSERT_EQ(1, right_to_node->InFromRightEdge().size()); + ASSERT_EQ(1, right_to_node->InFromPreEdge().size()); + ASSERT_EQ(2, right_to_node->OutToAllEdge().size()); + ASSERT_EQ(1, right_to_node->OutToLeftEdge().size()); + ASSERT_EQ(1, right_to_node->OutToRightEdge().size()); + ASSERT_EQ(TEST_L4, right_to_node->LaneId()); + ASSERT_EQ(TEST_R2, right_to_node->RoadId()); + ASSERT_EQ(node_4, right_to_node->OriginNode()); + ASSERT_DOUBLE_EQ(0.0, right_to_node->StartS()); + ASSERT_DOUBLE_EQ(20.0, right_to_node->EndS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, right_to_node->Length()); + ASSERT_TRUE(right_to_node->IsSubNode()); + } +} + +TEST(SubTopoGraphTestSuit, two_sub_graph_nearby_one_out) { + TopoGraph topo_graph; + GetTopoGraph(&topo_graph); + + const TopoNode* node_3 = topo_graph.GetNode(TEST_L3); + ASSERT_TRUE(node_3 != nullptr); + const TopoNode* node_4 = topo_graph.GetNode(TEST_L4); + ASSERT_TRUE(node_4 != nullptr); + const TopoNode* node_5 = topo_graph.GetNode(TEST_L5); + ASSERT_TRUE(node_5 != nullptr); + const TopoNode* node_6 = topo_graph.GetNode(TEST_L6); + ASSERT_TRUE(node_6 != nullptr); + + std::unordered_map> range_list; + range_list[node_4].push_back(GetSRange(20.0, 50.0)); + SubTopoGraph sub_topo_graph(range_list); + + { + const TopoEdge* edge_4_5 = node_4->GetOutEdgeTo(node_5); + ASSERT_TRUE(edge_4_5 != nullptr); + + std::unordered_set sub_edges_4_5; + sub_topo_graph.GetSubInEdgesIntoSubGraph(edge_4_5, &sub_edges_4_5); + // return origin edge when A has sub node, B has no sub node + ASSERT_EQ(1, sub_edges_4_5.size()); + const auto* out_edge = *(sub_edges_4_5.begin()); + ASSERT_EQ(edge_4_5, out_edge); + } + + { + const TopoEdge* edge_3_4 = node_3->GetOutEdgeTo(node_4); + ASSERT_TRUE(edge_3_4 != nullptr); + + std::unordered_set sub_edges_3_4; + sub_topo_graph.GetSubInEdgesIntoSubGraph(edge_3_4, &sub_edges_3_4); + // return origin edge when A has sub node, B has no sub node + ASSERT_EQ(2, sub_edges_3_4.size()); + const auto* one_edge = *(sub_edges_3_4.begin()); + const auto* one_sub_node = one_edge->ToNode(); + const auto* edge_4_sub_5 = one_sub_node->GetOutEdgeTo(node_5); + ASSERT_TRUE(edge_4_sub_5 != nullptr); + const auto* right_node = edge_4_sub_5->ToNode(); + ASSERT_EQ(right_node, node_5); + + ASSERT_EQ(1, right_node->InFromAllEdge().size()); + ASSERT_EQ(1, right_node->InFromLeftEdge().size()); + ASSERT_EQ(2, right_node->OutToAllEdge().size()); + ASSERT_EQ(1, right_node->OutToLeftEdge().size()); + ASSERT_EQ(1, right_node->OutToSucEdge().size()); + ASSERT_EQ(TEST_L5, right_node->LaneId()); + ASSERT_EQ(TEST_R2, right_node->RoadId()); + ASSERT_EQ(node_5, right_node->OriginNode()); + ASSERT_DOUBLE_EQ(0.0, right_node->StartS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, right_node->EndS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, right_node->Length()); + ASSERT_FALSE(right_node->IsSubNode()); + } +} + +TEST(SubTopoGraphTestSuit, two_sub_graph_nearby_find_start_node) { + TopoGraph topo_graph; + GetTopoGraph(&topo_graph); + + const TopoNode* node_3 = topo_graph.GetNode(TEST_L3); + ASSERT_TRUE(node_3 != nullptr); + + const TopoNode* node_4 = topo_graph.GetNode(TEST_L4); + ASSERT_TRUE(node_4 != nullptr); + + std::unordered_map> range_list; + range_list[node_4].push_back(GetSRange(75.0, 85.0)); + range_list[node_4].push_back(GetSRange(15.0, 30.0)); + range_list[node_4].push_back(GetSRange(45.0, 60.0)); + SubTopoGraph sub_topo_graph(range_list); + + { + const TopoNode* sub_node = sub_topo_graph.GetSubNodeWithS(node_3, 50.0); + ASSERT_EQ(sub_node, node_3); + } + + { + const TopoNode* sub_node_1 = sub_topo_graph.GetSubNodeWithS(node_4, 25.0); + ASSERT_TRUE(sub_node_1 == nullptr); + const TopoNode* sub_node_2 = sub_topo_graph.GetSubNodeWithS(node_4, 55.0); + ASSERT_TRUE(sub_node_2 == nullptr); + const TopoNode* sub_node_3 = sub_topo_graph.GetSubNodeWithS(node_4, 80.0); + ASSERT_TRUE(sub_node_3 == nullptr); + } + + { + const TopoNode* sub_node = sub_topo_graph.GetSubNodeWithS(node_4, 10.0); + ASSERT_TRUE(sub_node != nullptr); + ASSERT_EQ(3, sub_node->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node->InFromLeftEdge().size()); + ASSERT_EQ(1, sub_node->InFromRightEdge().size()); + ASSERT_EQ(1, sub_node->InFromPreEdge().size()); + ASSERT_EQ(2, sub_node->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node->OutToLeftEdge().size()); + ASSERT_EQ(1, sub_node->OutToRightEdge().size()); + ASSERT_EQ(TEST_L4, sub_node->LaneId()); + ASSERT_EQ(TEST_R2, sub_node->RoadId()); + ASSERT_EQ(node_4, sub_node->OriginNode()); + ASSERT_DOUBLE_EQ(0.0, sub_node->StartS()); + ASSERT_DOUBLE_EQ(15.0, sub_node->EndS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, sub_node->Length()); + ASSERT_TRUE(sub_node->IsSubNode()); + } + + { + const TopoNode* sub_node = sub_topo_graph.GetSubNodeWithS(node_4, 35.0); + ASSERT_TRUE(sub_node != nullptr); + ASSERT_EQ(2, sub_node->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node->InFromLeftEdge().size()); + ASSERT_EQ(1, sub_node->InFromRightEdge().size()); + ASSERT_EQ(2, sub_node->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node->OutToLeftEdge().size()); + ASSERT_EQ(1, sub_node->OutToRightEdge().size()); + ASSERT_EQ(TEST_L4, sub_node->LaneId()); + ASSERT_EQ(TEST_R2, sub_node->RoadId()); + ASSERT_EQ(node_4, sub_node->OriginNode()); + ASSERT_DOUBLE_EQ(30.0, sub_node->StartS()); + ASSERT_DOUBLE_EQ(45.0, sub_node->EndS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, sub_node->Length()); + ASSERT_TRUE(sub_node->IsSubNode()); + } + + { + const TopoNode* sub_node = sub_topo_graph.GetSubNodeWithS(node_4, 70.0); + ASSERT_TRUE(sub_node != nullptr); + ASSERT_EQ(2, sub_node->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node->InFromLeftEdge().size()); + ASSERT_EQ(1, sub_node->InFromRightEdge().size()); + ASSERT_EQ(2, sub_node->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node->OutToLeftEdge().size()); + ASSERT_EQ(1, sub_node->OutToRightEdge().size()); + ASSERT_EQ(TEST_L4, sub_node->LaneId()); + ASSERT_EQ(TEST_R2, sub_node->RoadId()); + ASSERT_EQ(node_4, sub_node->OriginNode()); + ASSERT_DOUBLE_EQ(60.0, sub_node->StartS()); + ASSERT_DOUBLE_EQ(75.0, sub_node->EndS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, sub_node->Length()); + ASSERT_TRUE(sub_node->IsSubNode()); + } + + { + const TopoNode* sub_node = sub_topo_graph.GetSubNodeWithS(node_4, 90.0); + ASSERT_TRUE(sub_node != nullptr); + ASSERT_EQ(2, sub_node->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node->InFromLeftEdge().size()); + ASSERT_EQ(1, sub_node->InFromRightEdge().size()); + ASSERT_EQ(2, sub_node->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node->OutToLeftEdge().size()); + ASSERT_EQ(1, sub_node->OutToRightEdge().size()); + ASSERT_EQ(TEST_L4, sub_node->LaneId()); + ASSERT_EQ(TEST_R2, sub_node->RoadId()); + ASSERT_EQ(node_4, sub_node->OriginNode()); + ASSERT_DOUBLE_EQ(85.0, sub_node->StartS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, sub_node->EndS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, sub_node->Length()); + ASSERT_TRUE(sub_node->IsSubNode()); + } +} + +TEST(SubTopoGraphTestSuit, one_sub_graph_internal_connected) { + TopoGraph topo_graph; + GetTopoGraph(&topo_graph); + + const TopoNode* node_1 = topo_graph.GetNode(TEST_L1); + ASSERT_TRUE(node_1 != nullptr); + const TopoNode* node_2 = topo_graph.GetNode(TEST_L2); + ASSERT_TRUE(node_2 != nullptr); + + std::unordered_map> range_list; + range_list[node_2].push_back(GetSRange(15.9, 15.9)); + range_list[node_2].push_back(GetSRange(50.0, 50.0)); + SubTopoGraph sub_topo_graph(range_list); + + const TopoEdge* edge_1_2 = node_1->GetOutEdgeTo(node_2); + ASSERT_TRUE(edge_1_2 != nullptr); + + std::unordered_set sub_edges_1_2; + sub_topo_graph.GetSubInEdgesIntoSubGraph(edge_1_2, &sub_edges_1_2); + ASSERT_EQ(3, sub_edges_1_2.size()); + + const auto* sub_node_1 = sub_topo_graph.GetSubNodeWithS(node_2, 5.5); + ASSERT_TRUE(sub_node_1 != nullptr); + const auto* sub_node_2 = sub_topo_graph.GetSubNodeWithS(node_2, 25.0); + ASSERT_TRUE(sub_node_2 != nullptr); + const auto* sub_node_3 = sub_topo_graph.GetSubNodeWithS(node_2, 65.5); + ASSERT_TRUE(sub_node_3 != nullptr); + + ASSERT_EQ(1, sub_node_1->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node_1->InFromLeftEdge().size()); + ASSERT_EQ(2, sub_node_1->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node_1->OutToLeftEdge().size()); + ASSERT_EQ(1, sub_node_1->OutToSucEdge().size()); + + ASSERT_EQ(2, sub_node_2->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node_2->InFromLeftEdge().size()); + ASSERT_EQ(1, sub_node_2->InFromPreEdge().size()); + ASSERT_EQ(2, sub_node_2->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node_2->OutToLeftEdge().size()); + ASSERT_EQ(1, sub_node_2->OutToSucEdge().size()); + + ASSERT_EQ(2, sub_node_3->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node_3->InFromLeftEdge().size()); + ASSERT_EQ(1, sub_node_3->InFromPreEdge().size()); + ASSERT_EQ(2, sub_node_3->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node_3->OutToLeftEdge().size()); + ASSERT_EQ(1, sub_node_3->OutToSucEdge().size()); +} + +TEST(SubTopoGraphTestSuit, one_sub_graph_whole_lane_block) { + TopoGraph topo_graph; + GetTopoGraph(&topo_graph); + + const TopoNode* node_1 = topo_graph.GetNode(TEST_L1); + ASSERT_TRUE(node_1 != nullptr); + const TopoNode* node_3 = topo_graph.GetNode(TEST_L3); + ASSERT_TRUE(node_3 != nullptr); + + { + std::unordered_map> range_list; + range_list[node_1].push_back( + GetSRange(TEST_LANE_LENGTH / 2, TEST_LANE_LENGTH / 2)); + range_list[node_3].push_back(GetSRange(0.0, TEST_LANE_LENGTH)); + SubTopoGraph sub_topo_graph(range_list); + + const auto* sub_node_1 = + sub_topo_graph.GetSubNodeWithS(node_1, TEST_LANE_LENGTH / 2 + 0.1); + ASSERT_TRUE(sub_node_1 != nullptr); + + ASSERT_EQ(2, sub_node_1->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node_1->InFromRightEdge().size()); + ASSERT_EQ(1, sub_node_1->InFromPreEdge().size()); + ASSERT_EQ(1, sub_node_1->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node_1->OutToRightEdge().size()); + } + + { + std::unordered_map> range_list; + range_list[node_1].push_back( + GetSRange(TEST_LANE_LENGTH / 2, TEST_LANE_LENGTH / 2)); + range_list[node_3].push_back( + GetSRange(TEST_LANE_LENGTH / 2, TEST_LANE_LENGTH)); + SubTopoGraph sub_topo_graph(range_list); + + const auto* sub_node_1 = + sub_topo_graph.GetSubNodeWithS(node_1, TEST_LANE_LENGTH / 2 + 0.1); + ASSERT_TRUE(sub_node_1 != nullptr); + + ASSERT_EQ(2, sub_node_1->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node_1->InFromRightEdge().size()); + ASSERT_EQ(1, sub_node_1->InFromPreEdge().size()); + ASSERT_EQ(2, sub_node_1->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node_1->OutToRightEdge().size()); + ASSERT_EQ(1, sub_node_1->OutToSucEdge().size()); + + const auto* sub_node_3 = sub_topo_graph.GetSubNodeWithS(node_3, 0.1); + ASSERT_TRUE(sub_node_3 != nullptr); + + ASSERT_EQ(2, sub_node_3->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node_3->InFromRightEdge().size()); + ASSERT_EQ(1, sub_node_3->InFromPreEdge().size()); + ASSERT_EQ(1, sub_node_3->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node_3->OutToRightEdge().size()); + } + + { + std::unordered_map> range_list; + range_list[node_1].push_back( + GetSRange(TEST_LANE_LENGTH / 2, TEST_LANE_LENGTH / 2)); + range_list[node_3].push_back( + GetSRange(TEST_LANE_LENGTH / 4, TEST_LANE_LENGTH / 2)); + range_list[node_3].push_back( + GetSRange(TEST_LANE_LENGTH * 3 / 4, TEST_LANE_LENGTH)); + SubTopoGraph sub_topo_graph(range_list); + + const auto* sub_node_1 = + sub_topo_graph.GetSubNodeWithS(node_1, TEST_LANE_LENGTH / 2 + 0.1); + ASSERT_TRUE(sub_node_1 != nullptr); + + ASSERT_EQ(2, sub_node_1->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node_1->InFromRightEdge().size()); + ASSERT_EQ(1, sub_node_1->InFromPreEdge().size()); + ASSERT_EQ(2, sub_node_1->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node_1->OutToRightEdge().size()); + ASSERT_EQ(1, sub_node_1->OutToSucEdge().size()); + + const auto* sub_node_3 = + sub_topo_graph.GetSubNodeWithS(node_3, TEST_LANE_LENGTH / 2 + 0.1); + ASSERT_TRUE(sub_node_3 != nullptr); + + ASSERT_EQ(1, sub_node_3->InFromAllEdge().size()); + ASSERT_EQ(1, sub_node_3->InFromRightEdge().size()); + ASSERT_EQ(1, sub_node_3->OutToAllEdge().size()); + ASSERT_EQ(1, sub_node_3->OutToRightEdge().size()); + } +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/graph/topo_graph.cc b/modules/routing/graph/topo_graph.cc new file mode 100644 index 00000000000..344a64760c1 --- /dev/null +++ b/modules/routing/graph/topo_graph.cc @@ -0,0 +1,112 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/graph/topo_graph.h" + +#include + +#include "modules/common/util/file.h" +#include "modules/routing/graph/topo_node.h" + +namespace apollo { +namespace routing { + +void TopoGraph::Clear() { + topo_nodes_.clear(); + topo_edges_.clear(); + node_index_map_.clear(); +} + +bool TopoGraph::LoadNodes(const Graph& graph) { + if (graph.node_size() == 0) { + AERROR << "No nodes found in topology graph."; + return false; + } + for (const auto& node : graph.node()) { + node_index_map_[node.lane_id()] = topo_nodes_.size(); + std::shared_ptr topo_node; + topo_node.reset(new TopoNode(node)); + road_node_map_[node.road_id()].insert(topo_node.get()); + topo_nodes_.push_back(std::move(topo_node)); + } + return true; +} + +// Need to execute load_nodes() firstly +bool TopoGraph::LoadEdges(const Graph& graph) { + if (graph.edge_size() == 0) { + AINFO << "0 edges found in topology graph, but it's fine"; + return true; + } + for (const auto& edge : graph.edge()) { + const std::string& from_lane_id = edge.from_lane_id(); + const std::string& to_lane_id = edge.to_lane_id(); + if (node_index_map_.count(from_lane_id) != 1 || + node_index_map_.count(to_lane_id) != 1) { + return false; + } + std::shared_ptr topo_edge; + TopoNode* from_node = topo_nodes_[node_index_map_[from_lane_id]].get(); + TopoNode* to_node = topo_nodes_[node_index_map_[to_lane_id]].get(); + topo_edge.reset(new TopoEdge(edge, from_node, to_node)); + from_node->AddOutEdge(topo_edge.get()); + to_node->AddInEdge(topo_edge.get()); + topo_edges_.push_back(std::move(topo_edge)); + } + return true; +} + +bool TopoGraph::LoadGraph(const Graph& graph) { + Clear(); + + map_version_ = graph.hdmap_version(); + map_district_ = graph.hdmap_district(); + + if (!LoadNodes(graph)) { + AERROR << "Failed to load nodes from topology graph."; + return false; + } + if (!LoadEdges(graph)) { + AERROR << "Failed to load edges from topology graph."; + return false; + } + AINFO << "Load Topo data succesful."; + return true; +} + +const std::string& TopoGraph::MapVersion() const { return map_version_; } + +const std::string& TopoGraph::MapDistrict() const { return map_district_; } + +const TopoNode* TopoGraph::GetNode(const std::string& id) const { + const auto& iter = node_index_map_.find(id); + if (iter == node_index_map_.end()) { + return nullptr; + } + return topo_nodes_[iter->second].get(); +} + +void TopoGraph::GetNodesByRoadId( + const std::string& road_id, + std::unordered_set* const node_in_road) const { + const auto& iter = road_node_map_.find(road_id); + if (iter != road_node_map_.end()) { + node_in_road->insert(iter->second.begin(), iter->second.end()); + } +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/graph/topo_graph.h b/modules/routing/graph/topo_graph.h new file mode 100644 index 00000000000..2b4f73cb506 --- /dev/null +++ b/modules/routing/graph/topo_graph.h @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_GRAPH_TOPO_GRAPH_H +#define MODULES_ROUTING_GRAPH_TOPO_GRAPH_H + +#include +#include +#include +#include +#include + +#include "modules/common/log.h" +#include "modules/routing/graph/topo_node.h" +#include "modules/routing/proto/topo_graph.pb.h" + +namespace apollo { +namespace routing { + +class TopoGraph { + public: + TopoGraph() = default; + ~TopoGraph() = default; + + bool LoadGraph(const Graph& filename); + + const std::string& MapVersion() const; + const std::string& MapDistrict() const; + const TopoNode* GetNode(const std::string& id) const; + void GetNodesByRoadId( + const std::string& road_id, + std::unordered_set* const node_in_road) const; + + private: + void Clear(); + bool LoadNodes(const Graph& graph); + bool LoadEdges(const Graph& graph); + + private: + std::string map_version_; + std::string map_district_; + std::vector > topo_nodes_; + std::vector > topo_edges_; + std::unordered_map node_index_map_; + std::unordered_map > + road_node_map_; +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_GRAPH_TOPO_GRAPH_H diff --git a/modules/routing/graph/topo_graph_test.cc b/modules/routing/graph/topo_graph_test.cc new file mode 100644 index 00000000000..7646cfe9c42 --- /dev/null +++ b/modules/routing/graph/topo_graph_test.cc @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include + +#include "gtest/gtest.h" + +#include "modules/routing/graph/topo_graph.h" +#include "modules/routing/graph/topo_test_utils.h" + +namespace apollo { +namespace routing { + +TEST(TopoGraphTestSuit, test_graph_1) { + Graph graph; + GetGraphForTest(&graph); + + TopoGraph topo_graph; + ASSERT_TRUE(topo_graph.LoadGraph(graph)); + + ASSERT_EQ(TEST_MAP_VERSION, topo_graph.MapVersion()); + ASSERT_EQ(TEST_MAP_DISTRICT, topo_graph.MapDistrict()); + + const TopoNode* node_1 = topo_graph.GetNode(TEST_L1); + ASSERT_TRUE(node_1 != nullptr); + ASSERT_EQ(1, node_1->InFromAllEdge().size()); + ASSERT_EQ(1, node_1->InFromRightEdge().size()); + ASSERT_EQ(2, node_1->OutToAllEdge().size()); + ASSERT_EQ(1, node_1->OutToSucEdge().size()); + ASSERT_EQ(1, node_1->OutToRightEdge().size()); + ASSERT_DOUBLE_EQ(TEST_LANE_COST, node_1->Cost()); + ASSERT_EQ(TEST_L1, node_1->LaneId()); + ASSERT_EQ(TEST_R1, node_1->RoadId()); + ASSERT_EQ(node_1, node_1->OriginNode()); + ASSERT_DOUBLE_EQ(0.0, node_1->StartS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, node_1->EndS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, node_1->Length()); + ASSERT_FALSE(node_1->IsSubNode()); + + const TopoNode* node_4 = topo_graph.GetNode(TEST_L4); + ASSERT_TRUE(node_4 != nullptr); + ASSERT_EQ(2, node_4->InFromAllEdge().size()); + ASSERT_EQ(1, node_4->InFromPreEdge().size()); + ASSERT_EQ(1, node_4->InFromLeftEdge().size()); + ASSERT_EQ(1, node_4->OutToAllEdge().size()); + ASSERT_EQ(1, node_4->OutToLeftEdge().size()); + ASSERT_DOUBLE_EQ(TEST_LANE_COST, node_4->Cost()); + ASSERT_EQ(TEST_L4, node_4->LaneId()); + ASSERT_EQ(TEST_R2, node_4->RoadId()); + ASSERT_EQ(node_4, node_4->OriginNode()); + ASSERT_DOUBLE_EQ(0.0, node_4->StartS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, node_4->EndS()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, node_4->Length()); + ASSERT_FALSE(node_4->IsSubNode()); +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/graph/topo_node.cc b/modules/routing/graph/topo_node.cc new file mode 100644 index 00000000000..c2d7cdb7bc0 --- /dev/null +++ b/modules/routing/graph/topo_node.cc @@ -0,0 +1,345 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/graph/topo_node.h" + +#include +#include +#include + +#include "modules/common/log.h" +#include "modules/routing/graph/range_utils.h" + +namespace apollo { +namespace routing { + +namespace { + +const double MIN_INTERNAL_FOR_NODE = 0.01; // in meter + +using ::google::protobuf::RepeatedPtrField; + +void ConvertOutRange(const RepeatedPtrField& range_vec, + double start_s, double end_s, + std::vector* out_range, int* prefer_index) { + out_range->clear(); + for (const auto& c_range : range_vec) { + double s_s = c_range.start().s(); + double e_s = c_range.end().s(); + if (e_s < start_s || s_s > end_s || e_s < s_s) { + continue; + } + s_s = std::max(start_s, s_s); + e_s = std::min(end_s, e_s); + NodeSRange s_range(s_s, e_s); + out_range->push_back(std::move(s_range)); + } + sort(out_range->begin(), out_range->end()); + int max_index = -1; + double max_diff = 0.0; + for (size_t i = 0; i < out_range->size(); ++i) { + if (out_range->at(i).Length() > max_diff) { + max_index = i; + max_diff = out_range->at(i).Length(); + } + } + *prefer_index = max_index; +} + +} // namespace + +bool TopoNode::IsOutRangeEnough(const std::vector& range_vec, + double start_s, double end_s) { + if (!NodeSRange::IsEnoughForChangeLane(start_s, end_s)) { + return false; + } + int start_index = BinarySearchForSLarger(range_vec, start_s); + int end_index = BinarySearchForSSmaller(range_vec, end_s); + + int index_diff = end_index - start_index; + if (start_index < 0 || end_index < 0) { + return false; + } + if (index_diff > 1) { + return true; + } + + double pre_s_s = std::max(start_s, range_vec[start_index].StartS()); + double suc_e_s = std::min(end_s, range_vec[end_index].EndS()); + + if (index_diff == 1) { + double dlt = range_vec[start_index].EndS() - pre_s_s; + dlt += suc_e_s - range_vec[end_index].StartS(); + return NodeSRange::IsEnoughForChangeLane(dlt); + } + if (index_diff == 0) { + return NodeSRange::IsEnoughForChangeLane(pre_s_s, suc_e_s); + } + return false; +} + +TopoNode::TopoNode(const Node& node) + : pb_node_(node), start_s_(0.0), end_s_(pb_node_.length()) { + Init(); + origin_node_ = this; +} + +TopoNode::TopoNode(const TopoNode* topo_node, const NodeSRange& range) + : TopoNode(topo_node->PbNode()) { + origin_node_ = topo_node; + start_s_ = range.StartS(); + end_s_ = range.EndS(); + Init(); +} + +TopoNode::~TopoNode() {} + +void TopoNode::Init() { + if (!FindAnchorPoint()) { + AWARN << "Be attention!!! Find anchor point failed for lane: " << LaneId(); + } + ConvertOutRange(pb_node_.left_out(), start_s_, end_s_, + &left_out_sorted_range_, &left_prefer_range_index_); + + is_left_range_enough_ = + (left_prefer_range_index_ >= 0) && + left_out_sorted_range_[left_prefer_range_index_].IsEnoughForChangeLane(); + + ConvertOutRange(pb_node_.right_out(), start_s_, end_s_, + &right_out_sorted_range_, &right_prefer_range_index_); + is_right_range_enough_ = (right_prefer_range_index_ >= 0) && + right_out_sorted_range_[right_prefer_range_index_] + .IsEnoughForChangeLane(); +} + +bool TopoNode::FindAnchorPoint() { + double total_size = 0; + for (const auto& seg : CentralCurve().segment()) { + total_size += seg.line_segment().point_size(); + } + double rate = (StartS() + EndS()) / 2.0 / Length(); + int anchor_index = static_cast(total_size * rate); + for (const auto& seg : CentralCurve().segment()) { + if (anchor_index < seg.line_segment().point_size()) { + SetAnchorPoint(seg.line_segment().point(anchor_index)); + return true; + } + anchor_index -= seg.line_segment().point_size(); + } + return false; +} + +void TopoNode::SetAnchorPoint(const common::PointENU& anchor_point) { + anchor_point_ = anchor_point; +} + +const Node& TopoNode::PbNode() const { return pb_node_; } + +double TopoNode::Length() const { return pb_node_.length(); } + +double TopoNode::Cost() const { return pb_node_.cost(); } + +bool TopoNode::IsVirtual() const { return pb_node_.is_virtual(); } + +const std::string& TopoNode::LaneId() const { return pb_node_.lane_id(); } + +const std::string& TopoNode::RoadId() const { return pb_node_.road_id(); } + +const hdmap::Curve& TopoNode::CentralCurve() const { + return pb_node_.central_curve(); +} + +const common::PointENU& TopoNode::AnchorPoint() const { return anchor_point_; } + +const std::vector& TopoNode::LeftOutRange() const { + return left_out_sorted_range_; +} + +const std::vector& TopoNode::RightOutRange() const { + return right_out_sorted_range_; +} + +const std::unordered_set& TopoNode::InFromAllEdge() const { + return in_from_all_edge_set_; +} + +const std::unordered_set& TopoNode::InFromLeftEdge() const { + return in_from_left_edge_set_; +} + +const std::unordered_set& TopoNode::InFromRightEdge() const { + return in_from_right_edge_set_; +} + +const std::unordered_set& TopoNode::InFromLeftOrRightEdge() + const { + return in_from_left_or_right_edge_set_; +} + +const std::unordered_set& TopoNode::InFromPreEdge() const { + return in_from_pre_edge_set_; +} + +const std::unordered_set& TopoNode::OutToAllEdge() const { + return out_to_all_edge_set_; +} + +const std::unordered_set& TopoNode::OutToLeftEdge() const { + return out_to_left_edge_set_; +} + +const std::unordered_set& TopoNode::OutToRightEdge() const { + return out_to_right_edge_set_; +} + +const std::unordered_set& TopoNode::OutToLeftOrRightEdge() + const { + return out_to_left_or_right_edge_set_; +} + +const std::unordered_set& TopoNode::OutToSucEdge() const { + return out_to_suc_edge_set_; +} + +const TopoEdge* TopoNode::GetInEdgeFrom(const TopoNode* from_node) const { + const auto& iter = in_edge_map_.find(from_node); + if (iter == in_edge_map_.end()) { + return nullptr; + } + return iter->second; +} + +const TopoEdge* TopoNode::GetOutEdgeTo(const TopoNode* to_node) const { + const auto& iter = out_edge_map_.find(to_node); + if (iter == out_edge_map_.end()) { + return nullptr; + } + return iter->second; +} + +const TopoNode* TopoNode::OriginNode() const { return origin_node_; } + +double TopoNode::StartS() const { return start_s_; } + +double TopoNode::EndS() const { return end_s_; } + +bool TopoNode::IsSubNode() const { return OriginNode() != this; } + +bool TopoNode::IsOverlapEnough(const TopoNode* sub_node, + const TopoEdge* edge_for_type) const { + if (edge_for_type->Type() == TET_LEFT) { + return (is_left_range_enough_ && + IsOutRangeEnough(left_out_sorted_range_, sub_node->StartS(), + sub_node->EndS())); + } + if (edge_for_type->Type() == TET_RIGHT) { + return (is_right_range_enough_ && + IsOutRangeEnough(right_out_sorted_range_, sub_node->StartS(), + sub_node->EndS())); + } + if (edge_for_type->Type() == TET_FORWARD) { + return IsOutToSucEdgeValid() && sub_node->IsInFromPreEdgeValid(); + } + return true; +} + +void TopoNode::AddInEdge(const TopoEdge* edge) { + if (edge->ToNode() != this) { + return; + } + if (in_edge_map_.count(edge->FromNode()) != 0) { + return; + } + switch (edge->Type()) { + case TET_LEFT: + in_from_right_edge_set_.insert(edge); + in_from_left_or_right_edge_set_.insert(edge); + break; + case TET_RIGHT: + in_from_left_edge_set_.insert(edge); + in_from_left_or_right_edge_set_.insert(edge); + break; + default: + in_from_pre_edge_set_.insert(edge); + break; + } + in_from_all_edge_set_.insert(edge); + in_edge_map_[edge->FromNode()] = edge; +} + +void TopoNode::AddOutEdge(const TopoEdge* edge) { + if (edge->FromNode() != this) { + return; + } + if (out_edge_map_.count(edge->ToNode()) != 0) { + return; + } + switch (edge->Type()) { + case TET_LEFT: + out_to_left_edge_set_.insert(edge); + out_to_left_or_right_edge_set_.insert(edge); + break; + case TET_RIGHT: + out_to_right_edge_set_.insert(edge); + out_to_left_or_right_edge_set_.insert(edge); + break; + default: + out_to_suc_edge_set_.insert(edge); + break; + } + out_to_all_edge_set_.insert(edge); + out_edge_map_[edge->ToNode()] = edge; +} + +bool TopoNode::IsInFromPreEdgeValid() const { + return std::fabs(StartS() - OriginNode()->StartS()) < MIN_INTERNAL_FOR_NODE; +} + +bool TopoNode::IsOutToSucEdgeValid() const { + return std::fabs(EndS() - OriginNode()->EndS()) < MIN_INTERNAL_FOR_NODE; +} + +TopoEdge::TopoEdge(const Edge& edge, const TopoNode* from_node, + const TopoNode* to_node) + : pb_edge_(edge), from_node_(from_node), to_node_(to_node) {} + +TopoEdge::~TopoEdge() {} + +const Edge& TopoEdge::PbEdge() const { return pb_edge_; } + +double TopoEdge::Cost() const { return pb_edge_.cost(); } + +const TopoNode* TopoEdge::FromNode() const { return from_node_; } + +const TopoNode* TopoEdge::ToNode() const { return to_node_; } + +const std::string& TopoEdge::FromLaneId() const { + return pb_edge_.from_lane_id(); +} + +const std::string& TopoEdge::ToLaneId() const { return pb_edge_.to_lane_id(); } + +TopoEdgeType TopoEdge::Type() const { + if (pb_edge_.direction_type() == Edge::LEFT) { + return TET_LEFT; + } + if (pb_edge_.direction_type() == Edge::RIGHT) { + return TET_RIGHT; + } + return TET_FORWARD; +} +} // namespace routing +} // namespace apollo diff --git a/modules/routing/graph/topo_node.h b/modules/routing/graph/topo_node.h new file mode 100644 index 00000000000..2201350e048 --- /dev/null +++ b/modules/routing/graph/topo_node.h @@ -0,0 +1,148 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_GRAPH_TOPO_NODE_H +#define MODULES_ROUTING_GRAPH_TOPO_NODE_H + +#include +#include +#include +#include + +#include "modules/map/proto/map_lane.pb.h" +#include "modules/routing/graph/topo_range.h" +#include "modules/routing/proto/topo_graph.pb.h" + +namespace apollo { +namespace routing { + +class TopoEdge; + +class TopoNode { + public: + static bool IsOutRangeEnough(const std::vector& range_vec, + double start_s, double end_s); + + public: + explicit TopoNode(const Node& node); + TopoNode(const TopoNode* topo_node, const NodeSRange& range); + + ~TopoNode(); + + const Node& PbNode() const; + double Length() const; + double Cost() const; + bool IsVirtual() const; + + const std::string& LaneId() const; + const std::string& RoadId() const; + const hdmap::Curve& CentralCurve() const; + const common::PointENU& AnchorPoint() const; + const std::vector& LeftOutRange() const; + const std::vector& RightOutRange() const; + + const std::unordered_set& InFromAllEdge() const; + const std::unordered_set& InFromLeftEdge() const; + const std::unordered_set& InFromRightEdge() const; + const std::unordered_set& InFromLeftOrRightEdge() const; + const std::unordered_set& InFromPreEdge() const; + const std::unordered_set& OutToAllEdge() const; + const std::unordered_set& OutToLeftEdge() const; + const std::unordered_set& OutToRightEdge() const; + const std::unordered_set& OutToLeftOrRightEdge() const; + const std::unordered_set& OutToSucEdge() const; + + const TopoEdge* GetInEdgeFrom(const TopoNode* from_node) const; + const TopoEdge* GetOutEdgeTo(const TopoNode* to_node) const; + + const TopoNode* OriginNode() const; + double StartS() const; + double EndS() const; + bool IsSubNode() const; + bool IsInFromPreEdgeValid() const; + bool IsOutToSucEdgeValid() const; + bool IsOverlapEnough(const TopoNode* sub_node, + const TopoEdge* edge_for_type) const; + void AddInEdge(const TopoEdge* edge); + void AddOutEdge(const TopoEdge* edge); + + private: + void Init(); + bool FindAnchorPoint(); + void SetAnchorPoint(const common::PointENU& anchor_point); + + Node pb_node_; + common::PointENU anchor_point_; + + double start_s_; + double end_s_; + bool is_left_range_enough_; + int left_prefer_range_index_; + bool is_right_range_enough_; + int right_prefer_range_index_; + + std::vector left_out_sorted_range_; + std::vector right_out_sorted_range_; + + std::unordered_set in_from_all_edge_set_; + std::unordered_set in_from_left_edge_set_; + std::unordered_set in_from_right_edge_set_; + std::unordered_set in_from_left_or_right_edge_set_; + std::unordered_set in_from_pre_edge_set_; + std::unordered_set out_to_all_edge_set_; + std::unordered_set out_to_left_edge_set_; + std::unordered_set out_to_right_edge_set_; + std::unordered_set out_to_left_or_right_edge_set_; + std::unordered_set out_to_suc_edge_set_; + + std::unordered_map out_edge_map_; + std::unordered_map in_edge_map_; + + const TopoNode* origin_node_; +}; + +enum TopoEdgeType { + TET_FORWARD, + TET_LEFT, + TET_RIGHT, +}; + +class TopoEdge { + public: + TopoEdge(const Edge& edge, const TopoNode* from_node, + const TopoNode* to_node); + + ~TopoEdge(); + + const Edge& PbEdge() const; + double Cost() const; + const std::string& FromLaneId() const; + const std::string& ToLaneId() const; + TopoEdgeType Type() const; + + const TopoNode* FromNode() const; + const TopoNode* ToNode() const; + + private: + Edge pb_edge_; + const TopoNode* from_node_; + const TopoNode* to_node_; +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_GRAPH_TOPO_NODE_H diff --git a/modules/routing/graph/topo_node_test.cc b/modules/routing/graph/topo_node_test.cc new file mode 100644 index 00000000000..789013398d7 --- /dev/null +++ b/modules/routing/graph/topo_node_test.cc @@ -0,0 +1,127 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include + +#include "gtest/gtest.h" + +#include "modules/routing/graph/topo_test_utils.h" + +namespace apollo { +namespace routing { + +namespace { + +void GetRangeVec(std::vector* range_vec) { + double s_s_1 = 1.0; + double e_s_1 = 12.0; + double s_s_2 = 15.0; + double e_s_2 = 27.0; + double s_s_3 = 30.0; + double e_s_3 = 45.1; + double s_s_4 = 55.5; + double e_s_4 = 70.0; + + range_vec->push_back(NodeSRange(s_s_2, e_s_2)); + range_vec->push_back(NodeSRange(s_s_4, e_s_4)); + range_vec->push_back(NodeSRange(s_s_1, e_s_1)); + range_vec->push_back(NodeSRange(s_s_3, e_s_3)); + + sort(range_vec->begin(), range_vec->end()); + + ASSERT_DOUBLE_EQ(s_s_1, range_vec->at(0).StartS()); + ASSERT_DOUBLE_EQ(e_s_1, range_vec->at(0).EndS()); + ASSERT_DOUBLE_EQ(s_s_2, range_vec->at(1).StartS()); + ASSERT_DOUBLE_EQ(e_s_2, range_vec->at(1).EndS()); + ASSERT_DOUBLE_EQ(s_s_3, range_vec->at(2).StartS()); + ASSERT_DOUBLE_EQ(e_s_3, range_vec->at(2).EndS()); + ASSERT_DOUBLE_EQ(s_s_4, range_vec->at(3).StartS()); + ASSERT_DOUBLE_EQ(e_s_4, range_vec->at(3).EndS()); +} + +} // namespace + +TEST(TopoNodeTestSuit, static_func_test) { + std::vector range_vec; + GetRangeVec(&range_vec); + { + double start_s = 13.0; + double end_s = 26.0; + ASSERT_TRUE(TopoNode::IsOutRangeEnough(range_vec, start_s, end_s)); + } + { + double start_s = 13.0; + double end_s = 23.0; + ASSERT_FALSE(TopoNode::IsOutRangeEnough(range_vec, start_s, end_s)); + } + { + double start_s = 22.0; + double end_s = 32.0; + ASSERT_FALSE(TopoNode::IsOutRangeEnough(range_vec, start_s, end_s)); + } + { + double start_s = 31.0; + double end_s = 44.0; + ASSERT_TRUE(TopoNode::IsOutRangeEnough(range_vec, start_s, end_s)); + } + { + double start_s = -10; + double end_s = 100; + ASSERT_TRUE(TopoNode::IsOutRangeEnough(range_vec, start_s, end_s)); + } +} + +TEST(TopoNodeTestSuit, basic_test) { + Node node; + GetNodeDetailForTest(&node, TEST_L1, TEST_R1); + TopoNode topo_node(node); + ASSERT_EQ(node.DebugString(), topo_node.PbNode().DebugString()); + ASSERT_EQ(TEST_L1, topo_node.LaneId()); + ASSERT_EQ(TEST_R1, topo_node.RoadId()); + ASSERT_DOUBLE_EQ(TEST_MIDDLE_S, topo_node.AnchorPoint().x()); + ASSERT_DOUBLE_EQ(0.0, topo_node.AnchorPoint().y()); + ASSERT_DOUBLE_EQ(TEST_LANE_LENGTH, topo_node.Length()); + ASSERT_DOUBLE_EQ(TEST_LANE_COST, topo_node.Cost()); + ASSERT_TRUE(topo_node.IsVirtual()); +} + +TEST(TopoEdgeTestSuit, basic_test) { + Node node_1; + Node node_2; + GetNodeForTest(&node_1, TEST_L1, TEST_R1); + GetNodeForTest(&node_2, TEST_L2, TEST_R2); + + TopoNode topo_node_1(node_1); + TopoNode topo_node_2(node_2); + Edge edge; + GetEdgeForTest(&edge, TEST_L1, TEST_L2, Edge::FORWARD); + + const TopoNode* tn_1 = &topo_node_1; + const TopoNode* tn_2 = &topo_node_2; + TopoEdge topo_edge(edge, tn_1, tn_2); + + ASSERT_EQ(edge.DebugString(), topo_edge.PbEdge().DebugString()); + ASSERT_DOUBLE_EQ(TEST_EDGE_COST, topo_edge.Cost()); + ASSERT_EQ(TEST_L1, topo_edge.FromLaneId()); + ASSERT_EQ(TEST_L2, topo_edge.ToLaneId()); + ASSERT_EQ(TET_FORWARD, topo_edge.Type()); + + ASSERT_EQ(tn_1, topo_edge.FromNode()); + ASSERT_EQ(tn_2, topo_edge.ToNode()); +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/graph/topo_range.cc b/modules/routing/graph/topo_range.cc new file mode 100644 index 00000000000..6ad69d1dffe --- /dev/null +++ b/modules/routing/graph/topo_range.cc @@ -0,0 +1,79 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/graph/topo_range.h" + +#include + +#include "modules/routing/common/routing_gflags.h" + +namespace apollo { +namespace routing { + +bool NodeSRange::IsEnoughForChangeLane(double start_s, double end_s) { + return IsEnoughForChangeLane(end_s - start_s); +} + +bool NodeSRange::IsEnoughForChangeLane(double length) { + return (length > FLAGS_min_length_for_lane_change); +} + +NodeSRange::NodeSRange() : start_s_(0.0), end_s_(0.0) {} + +NodeSRange::NodeSRange(double s1, double s2) : start_s_(s1), end_s_(s2) {} + +NodeSRange::NodeSRange(const NodeSRange& other) + : start_s_(other.StartS()), end_s_(other.EndS()) {} + +bool NodeSRange::operator<(const NodeSRange& other) const { + return StartS() < other.StartS(); +} + +bool NodeSRange::IsValid() const { return start_s_ <= end_s_; } + +double NodeSRange::StartS() const { return start_s_; } + +double NodeSRange::EndS() const { return end_s_; } + +double NodeSRange::Length() const { return end_s_ - start_s_; } + +bool NodeSRange::IsEnoughForChangeLane() const { + return NodeSRange::IsEnoughForChangeLane(StartS(), EndS()); +} + +void NodeSRange::SetStartS(double start_s) { start_s_ = start_s; } + +void NodeSRange::SetEndS(double end_s) { end_s_ = end_s; } + +void NodeSRange::SetRangeS(double start_s, double end_s) { + start_s_ = start_s; + end_s_ = end_s; +} + +bool NodeSRange::MergeRangeOverlap(const NodeSRange& other) { + if (!IsValid() || !other.IsValid()) { + return false; + } + if (other.StartS() > EndS() || other.EndS() < StartS()) { + return false; + } + SetEndS(std::max(EndS(), other.EndS())); + SetStartS(std::min(StartS(), other.StartS())); + return true; +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/graph/topo_range.h b/modules/routing/graph/topo_range.h new file mode 100644 index 00000000000..1f9eb58bf48 --- /dev/null +++ b/modules/routing/graph/topo_range.h @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_GRAPH_TOPO_RANGE_H +#define MODULES_ROUTING_GRAPH_TOPO_RANGE_H + +namespace apollo { +namespace routing { + +class NodeSRange { + public: + static bool IsEnoughForChangeLane(double start_s, double end_s); + static bool IsEnoughForChangeLane(double length); + + public: + NodeSRange(); + NodeSRange(double s1, double s2); + NodeSRange(const NodeSRange& other); + ~NodeSRange() = default; + + bool operator<(const NodeSRange& other) const; + bool IsValid() const; + double StartS() const; + double EndS() const; + bool IsEnoughForChangeLane() const; + double Length() const; + + void SetStartS(double start_s); + void SetEndS(double end_s); + void SetRangeS(double start_s, double end_s); + bool MergeRangeOverlap(const NodeSRange& other); + + private: + double start_s_; + double end_s_; +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_GRAPH_TOPO_RANGE_H diff --git a/modules/routing/graph/topo_range_manager.cc b/modules/routing/graph/topo_range_manager.cc new file mode 100644 index 00000000000..282b8c831d1 --- /dev/null +++ b/modules/routing/graph/topo_range_manager.cc @@ -0,0 +1,116 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/graph/topo_range_manager.h" + +#include +#include + +#include "modules/common/log.h" + +namespace apollo { +namespace routing { + +namespace { + +void merge_block_range(const TopoNode* topo_node, + const std::vector& origin_range, + std::vector* block_range) { + std::vector sorted_origin_range; + sorted_origin_range.insert(sorted_origin_range.end(), origin_range.begin(), + origin_range.end()); + sort(sorted_origin_range.begin(), sorted_origin_range.end()); + int cur_index = 0; + int total_size = sorted_origin_range.size(); + while (cur_index < total_size) { + NodeSRange range(sorted_origin_range[cur_index]); + ++cur_index; + while (cur_index < total_size && + range.MergeRangeOverlap(sorted_origin_range[cur_index])) { + ++cur_index; + } + if (range.EndS() < topo_node->StartS() || + range.StartS() > topo_node->EndS()) { + continue; + } + range.SetStartS(std::max(topo_node->StartS(), range.StartS())); + range.SetEndS(std::min(topo_node->EndS(), range.EndS())); + block_range->push_back(std::move(range)); + } +} + +} // namespace + +const std::unordered_map>& +TopoRangeManager::RangeMap() const { + return range_map_; +} + +bool TopoRangeManager::Find(const TopoNode* node) const { + if (range_map_.find(node) == range_map_.end()) { + return false; + } + return true; +} + +double TopoRangeManager::RangeStart(const TopoNode* node) const { + const auto iter = range_map_.find(node); + if (iter == range_map_.end()) { + AERROR << "Error occured when getting range " + << "start of non-existent node in map."; + exit(-1); + } + return iter->second.front().StartS(); +} + +double TopoRangeManager::RangeEnd(const TopoNode* node) const { + const auto iter = range_map_.find(node); + if (iter == range_map_.end()) { + AERROR << "Error occured when getting range " + << "end of non-existent node in map."; + exit(-1); + } + return iter->second.back().EndS(); +} + +void TopoRangeManager::PrintDebugInfo() const { + for (const auto& map : range_map_) { + for (const auto& range : map.second) { + AINFO << "black lane id: " << map.first->LaneId() + << ", start s: " << range.StartS() << ", end s: " << range.EndS(); + } + } +} + +void TopoRangeManager::Clear() { range_map_.clear(); } + +void TopoRangeManager::Add(const TopoNode* node, double start_s, double end_s) { + NodeSRange range(start_s, end_s); + range_map_[node].push_back(range); +} + +void TopoRangeManager::SortAndMerge() { + for (auto& iter : range_map_) { + std::vector merged_range_vec; + merge_block_range(iter.first, iter.second, &merged_range_vec); + iter.second.clear(); + iter.second.insert(iter.second.begin(), merged_range_vec.begin(), + merged_range_vec.end()); + } +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/graph/topo_range_manager.h b/modules/routing/graph/topo_range_manager.h new file mode 100644 index 00000000000..4bdb1eed743 --- /dev/null +++ b/modules/routing/graph/topo_range_manager.h @@ -0,0 +1,52 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_GRAPH_TOPO_RANGE_MANAGER_H +#define MODULES_ROUTING_GRAPH_TOPO_RANGE_MANAGER_H + +#include +#include + +#include "modules/routing/graph/topo_node.h" +#include "modules/routing/graph/topo_range.h" + +namespace apollo { +namespace routing { + +class TopoRangeManager { + public: + TopoRangeManager() = default; + ~TopoRangeManager() = default; + + const std::unordered_map>& RangeMap() + const; + bool Find(const TopoNode* node) const; + double RangeStart(const TopoNode* node) const; + double RangeEnd(const TopoNode* node) const; + void PrintDebugInfo() const; + + void Clear(); + void Add(const TopoNode* node, double start_s, double end_s); + void SortAndMerge(); + + private: + std::unordered_map> range_map_; +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_GRAPH_TOPO_RANGE_MANAGER_H diff --git a/modules/routing/graph/topo_range_test.cc b/modules/routing/graph/topo_range_test.cc new file mode 100644 index 00000000000..a0219493be5 --- /dev/null +++ b/modules/routing/graph/topo_range_test.cc @@ -0,0 +1,171 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include + +#include "gtest/gtest.h" + +#include "modules/routing/graph/node_with_range.h" +#include "modules/routing/graph/range_utils.h" +#include "modules/routing/graph/topo_test_utils.h" + +namespace apollo { +namespace routing { + +namespace { + +void GetRangeVec(std::vector* range_vec) { + double s_s_1 = 0.1; + double e_s_1 = 1.1; + double s_s_2 = 1.5; + double e_s_2 = 2.0; + double s_s_3 = 3.0; + double e_s_3 = 4.1; + double s_s_4 = 5.5; + double e_s_4 = 6.0; + + range_vec->push_back(NodeSRange(s_s_2, e_s_2)); + range_vec->push_back(NodeSRange(s_s_4, e_s_4)); + range_vec->push_back(NodeSRange(s_s_1, e_s_1)); + range_vec->push_back(NodeSRange(s_s_3, e_s_3)); + + sort(range_vec->begin(), range_vec->end()); + + ASSERT_DOUBLE_EQ(s_s_1, range_vec->at(0).StartS()); + ASSERT_DOUBLE_EQ(e_s_1, range_vec->at(0).EndS()); + ASSERT_DOUBLE_EQ(s_s_2, range_vec->at(1).StartS()); + ASSERT_DOUBLE_EQ(e_s_2, range_vec->at(1).EndS()); + ASSERT_DOUBLE_EQ(s_s_3, range_vec->at(2).StartS()); + ASSERT_DOUBLE_EQ(e_s_3, range_vec->at(2).EndS()); + ASSERT_DOUBLE_EQ(s_s_4, range_vec->at(3).StartS()); + ASSERT_DOUBLE_EQ(e_s_4, range_vec->at(3).EndS()); +} + +} // namespace + +TEST(NodeSRangeTestSuit, basic_test) { + double start_s_1 = 0.0; + double start_s_2 = 5.0; + double end_s_1 = 10.1; + double end_s_2 = 15.0; + ASSERT_TRUE(NodeSRange::IsEnoughForChangeLane(start_s_1, end_s_1)); + ASSERT_FALSE(NodeSRange::IsEnoughForChangeLane(start_s_2, end_s_1)); + + NodeSRange range_1(end_s_1, start_s_2); + ASSERT_FALSE(range_1.IsValid()); + ASSERT_FALSE(range_1.IsEnoughForChangeLane()); + ASSERT_DOUBLE_EQ(end_s_1, range_1.StartS()); + ASSERT_DOUBLE_EQ(start_s_2, range_1.EndS()); + + NodeSRange range_2(start_s_1, end_s_2); + ASSERT_TRUE(range_2.IsValid()); + ASSERT_TRUE(range_2.IsEnoughForChangeLane()); + ASSERT_DOUBLE_EQ(start_s_1, range_2.StartS()); + ASSERT_DOUBLE_EQ(end_s_2, range_2.EndS()); + + { + NodeSRange range_from(start_s_1, start_s_2); + NodeSRange range_to(end_s_1, end_s_2); + ASSERT_FALSE(range_from.MergeRangeOverlap(range_to)); + ASSERT_TRUE(range_from < range_to); + } + + { + NodeSRange range_from(start_s_1, end_s_1); + NodeSRange range_to(start_s_2, end_s_2); + ASSERT_TRUE(range_from.MergeRangeOverlap(range_to)); + ASSERT_DOUBLE_EQ(start_s_1, range_from.StartS()); + ASSERT_DOUBLE_EQ(end_s_2, range_from.EndS()); + } +} + +TEST(NodeWithRangeTestSuit, basic_test) { + Node node_1; + Node node_2; + TopoNode topo_node_1(node_1); + TopoNode topo_node_2(node_2); + double start_s_1 = 0.0; + double start_s_2 = 5.0; + double end_s_1 = 10.1; + double end_s_2 = 15.0; + NodeSRange range_from(start_s_1, start_s_2); + NodeSRange range_to(end_s_1, end_s_2); + + const TopoNode* tn_1 = &topo_node_1; + const TopoNode* tn_2 = &topo_node_2; + NodeWithRange node_range_from(range_from, tn_1); + NodeWithRange node_range_to(range_to, tn_2); + + ASSERT_FALSE(node_range_from < node_range_to); +} + +TEST(SortNodeRangeAndSearchTestSuit, start_s_test) { + std::vector range_vec; + GetRangeVec(&range_vec); + + int index = BinarySearchForStartS(range_vec, 1.2); + ASSERT_EQ(-1, index); + + index = BinarySearchForStartS(range_vec, 0.0); + ASSERT_EQ(-1, index); + index = BinarySearchForStartS(range_vec, 0.9); + ASSERT_EQ(0, index); + index = BinarySearchForStartS(range_vec, 1.4); + ASSERT_EQ(-1, index); + index = BinarySearchForStartS(range_vec, 1.6); + ASSERT_EQ(1, index); + index = BinarySearchForStartS(range_vec, 2.4); + ASSERT_EQ(-1, index); + index = BinarySearchForStartS(range_vec, 3.5); + ASSERT_EQ(2, index); + index = BinarySearchForStartS(range_vec, 4.4); + ASSERT_EQ(-1, index); + index = BinarySearchForStartS(range_vec, 5.8); + ASSERT_EQ(3, index); + index = BinarySearchForStartS(range_vec, 6.9); + ASSERT_EQ(-1, index); +} + +TEST(SortNodeRangeAndSearchTestSuit, end_s_test) { + std::vector range_vec; + GetRangeVec(&range_vec); + + int index = BinarySearchForEndS(range_vec, 1.2); + ASSERT_EQ(-1, index); + + index = BinarySearchForEndS(range_vec, 0.0); + ASSERT_EQ(-1, index); + index = BinarySearchForEndS(range_vec, 0.9); + ASSERT_EQ(0, index); + index = BinarySearchForEndS(range_vec, 1.4); + ASSERT_EQ(-1, index); + index = BinarySearchForEndS(range_vec, 1.6); + ASSERT_EQ(1, index); + index = BinarySearchForEndS(range_vec, 2.4); + ASSERT_EQ(-1, index); + index = BinarySearchForEndS(range_vec, 3.5); + ASSERT_EQ(2, index); + index = BinarySearchForEndS(range_vec, 4.4); + ASSERT_EQ(-1, index); + index = BinarySearchForEndS(range_vec, 5.8); + ASSERT_EQ(3, index); + index = BinarySearchForEndS(range_vec, 6.9); + ASSERT_EQ(-1, index); +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/graph/topo_test_utils.cc b/modules/routing/graph/topo_test_utils.cc new file mode 100644 index 00000000000..eb19fa862f2 --- /dev/null +++ b/modules/routing/graph/topo_test_utils.cc @@ -0,0 +1,151 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/graph/topo_test_utils.h" + +namespace apollo { +namespace routing { + +namespace { + +using hdmap::Curve; + +void AddCurve(Curve* curve) { + auto* curve_segment = curve->add_segment(); + curve_segment->set_s(TEST_START_S); + curve_segment->mutable_start_position()->set_x(0.0); + curve_segment->mutable_start_position()->set_y(0.0); + curve_segment->set_heading(0.0); + curve_segment->set_length(TEST_LANE_LENGTH); + auto* lane_segment = curve_segment->mutable_line_segment(); + auto* point1 = lane_segment->add_point(); + point1->set_x(TEST_START_S); + point1->set_y(0.0); + auto* point21 = lane_segment->add_point(); + point21->set_x(TEST_MIDDLE_S / 2); + point21->set_y(0.0); + auto* point2 = lane_segment->add_point(); + point2->set_x(TEST_MIDDLE_S); + point2->set_y(0.0); + auto* point22 = lane_segment->add_point(); + point22->set_x(TEST_MIDDLE_S + TEST_MIDDLE_S / 2); + point22->set_y(0.0); + auto* point3 = lane_segment->add_point(); + point3->set_x(TEST_END_S); + point3->set_y(0.0); +} + +} // namespace + +void GetNodeDetailForTest(Node* const node, const std::string& lane_id, + const std::string& road_id) { + node->set_lane_id(lane_id); + node->set_length(TEST_LANE_LENGTH); + node->set_road_id(road_id); + node->set_cost(TEST_LANE_COST); + AddCurve(node->mutable_central_curve()); + auto* left_out = node->add_left_out(); + left_out->mutable_start()->set_s(TEST_START_S); + left_out->mutable_end()->set_s(TEST_END_S); + auto* right_out = node->add_right_out(); + right_out->mutable_start()->set_s(TEST_START_S); + right_out->mutable_end()->set_s(TEST_END_S); +} + +void GetNodeForTest(Node* const node, const std::string& lane_id, + const std::string& road_id) { + node->set_lane_id(lane_id); + node->set_length(TEST_LANE_LENGTH); + node->set_road_id(road_id); + node->set_cost(TEST_LANE_COST); + auto* left_out = node->add_left_out(); + left_out->mutable_start()->set_s(TEST_START_S); + left_out->mutable_end()->set_s(TEST_END_S); + auto* right_out = node->add_right_out(); + right_out->mutable_start()->set_s(TEST_START_S); + right_out->mutable_end()->set_s(TEST_END_S); +} + +void GetEdgeForTest(Edge* const edge, const std::string& lane_id_1, + const std::string& lane_id_2, + const Edge::DirectionType& type) { + edge->set_from_lane_id(lane_id_1); + edge->set_to_lane_id(lane_id_2); + edge->set_cost(TEST_EDGE_COST); + edge->set_direction_type(type); +} + +void GetGraphForTest(Graph* graph) { + graph->set_hdmap_version(TEST_MAP_VERSION); + graph->set_hdmap_district(TEST_MAP_DISTRICT); + GetNodeForTest(graph->add_node(), TEST_L1, TEST_R1); + GetNodeForTest(graph->add_node(), TEST_L2, TEST_R1); + GetNodeForTest(graph->add_node(), TEST_L3, TEST_R2); + GetNodeForTest(graph->add_node(), TEST_L4, TEST_R2); + + GetEdgeForTest(graph->add_edge(), TEST_L1, TEST_L2, Edge::RIGHT); + GetEdgeForTest(graph->add_edge(), TEST_L2, TEST_L1, Edge::LEFT); + GetEdgeForTest(graph->add_edge(), TEST_L3, TEST_L4, Edge::RIGHT); + GetEdgeForTest(graph->add_edge(), TEST_L4, TEST_L3, Edge::LEFT); + GetEdgeForTest(graph->add_edge(), TEST_L1, TEST_L3, Edge::FORWARD); + GetEdgeForTest(graph->add_edge(), TEST_L2, TEST_L4, Edge::FORWARD); +} + +void GetGraph2ForTest(Graph* graph) { + graph->set_hdmap_version(TEST_MAP_VERSION); + graph->set_hdmap_district(TEST_MAP_DISTRICT); + GetNodeForTest(graph->add_node(), TEST_L1, TEST_R1); + GetNodeForTest(graph->add_node(), TEST_L2, TEST_R1); + GetNodeForTest(graph->add_node(), TEST_L3, TEST_R2); + GetNodeForTest(graph->add_node(), TEST_L4, TEST_R2); + GetNodeForTest(graph->add_node(), TEST_L5, TEST_R2); + GetNodeForTest(graph->add_node(), TEST_L6, TEST_R3); + + GetEdgeForTest(graph->add_edge(), TEST_L1, TEST_L2, Edge::RIGHT); + GetEdgeForTest(graph->add_edge(), TEST_L2, TEST_L1, Edge::LEFT); + GetEdgeForTest(graph->add_edge(), TEST_L3, TEST_L4, Edge::RIGHT); + GetEdgeForTest(graph->add_edge(), TEST_L4, TEST_L3, Edge::LEFT); + GetEdgeForTest(graph->add_edge(), TEST_L4, TEST_L5, Edge::RIGHT); + GetEdgeForTest(graph->add_edge(), TEST_L5, TEST_L4, Edge::LEFT); + GetEdgeForTest(graph->add_edge(), TEST_L1, TEST_L3, Edge::FORWARD); + GetEdgeForTest(graph->add_edge(), TEST_L2, TEST_L4, Edge::FORWARD); + GetEdgeForTest(graph->add_edge(), TEST_L5, TEST_L6, Edge::FORWARD); +} + +void GetGraph3ForTest(Graph* graph) { + graph->set_hdmap_version(TEST_MAP_VERSION); + graph->set_hdmap_district(TEST_MAP_DISTRICT); + GetNodeForTest(graph->add_node(), TEST_L1, TEST_R1); + GetNodeForTest(graph->add_node(), TEST_L2, TEST_R1); + GetNodeForTest(graph->add_node(), TEST_L3, TEST_R2); + GetNodeForTest(graph->add_node(), TEST_L4, TEST_R2); + GetNodeForTest(graph->add_node(), TEST_L5, TEST_R3); + GetNodeForTest(graph->add_node(), TEST_L6, TEST_R3); + + GetEdgeForTest(graph->add_edge(), TEST_L1, TEST_L2, Edge::RIGHT); + GetEdgeForTest(graph->add_edge(), TEST_L2, TEST_L1, Edge::LEFT); + GetEdgeForTest(graph->add_edge(), TEST_L3, TEST_L4, Edge::RIGHT); + GetEdgeForTest(graph->add_edge(), TEST_L4, TEST_L3, Edge::LEFT); + GetEdgeForTest(graph->add_edge(), TEST_L5, TEST_L6, Edge::RIGHT); + GetEdgeForTest(graph->add_edge(), TEST_L6, TEST_L5, Edge::LEFT); + GetEdgeForTest(graph->add_edge(), TEST_L1, TEST_L3, Edge::FORWARD); + GetEdgeForTest(graph->add_edge(), TEST_L3, TEST_L5, Edge::FORWARD); + GetEdgeForTest(graph->add_edge(), TEST_L2, TEST_L4, Edge::FORWARD); + GetEdgeForTest(graph->add_edge(), TEST_L4, TEST_L6, Edge::FORWARD); +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/graph/topo_test_utils.h b/modules/routing/graph/topo_test_utils.h new file mode 100644 index 00000000000..22a370ad43b --- /dev/null +++ b/modules/routing/graph/topo_test_utils.h @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_GRAPH_TOPO_TEST_UTILS_H +#define MODULES_ROUTING_GRAPH_TOPO_TEST_UTILS_H + +#include + +#include "modules/routing/graph/topo_node.h" +#include "modules/routing/proto/topo_graph.pb.h" + +namespace apollo { +namespace routing { + +const char TEST_MAP_VERSION[] = "1.0.1"; +const char TEST_MAP_DISTRICT[] = "yongfeng"; + +const char TEST_L1[] = "L1"; +const char TEST_L2[] = "L2"; +const char TEST_L3[] = "L3"; +const char TEST_L4[] = "L4"; +const char TEST_L5[] = "L5"; +const char TEST_L6[] = "L6"; + +const char TEST_R1[] = "R1"; +const char TEST_R2[] = "R2"; +const char TEST_R3[] = "R3"; + +const double TEST_LANE_LENGTH = 100.0; +const double TEST_LANE_COST = 1.1; +const double TEST_EDGE_COST = 2.2; + +const double TEST_START_S = 0.0; +const double TEST_MIDDLE_S = 0.0; +const double TEST_END_S = TEST_LANE_LENGTH; + +void GetNodeDetailForTest(Node* const node, const std::string& lane_id, + const std::string& road_id); + +void GetNodeForTest(Node* const node, const std::string& lane_id, + const std::string& road_id); + +void GetEdgeForTest(Edge* const edge, const std::string& lane_id_1, + const std::string& lane_id_2, + const Edge::DirectionType& type); + +void GetGraphForTest(Graph* graph); + +void GetGraph2ForTest(Graph* graph); + +void GetGraph3ForTest(Graph* graph); + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_GRAPH_TOPO_TEST_UTILS_H diff --git a/modules/routing/main.cc b/modules/routing/main.cc new file mode 100644 index 00000000000..d93507644ec --- /dev/null +++ b/modules/routing/main.cc @@ -0,0 +1,21 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/common/apollo_app.h" +#include "modules/routing/common/routing_gflags.h" +#include "modules/routing/routing.h" + +APOLLO_MAIN(apollo::routing::Routing); diff --git a/modules/routing/proto/BUILD b/modules/routing/proto/BUILD new file mode 100644 index 00000000000..69c2a8c4288 --- /dev/null +++ b/modules/routing/proto/BUILD @@ -0,0 +1,22 @@ +package(default_visibility = ["//visibility:public"]) + +cc_proto_library( + name = "routing_proto", + deps = [ + ":routing_proto_lib", + ], +) + +proto_library( + name = "routing_proto_lib", + srcs = [ + "routing.proto", + "routing_config.proto", + "topo_graph.proto", + ], + deps = [ + "//modules/common/proto:common_proto_lib", + "//modules/common/proto:header_proto_lib", + "//modules/map/proto:map_proto_lib", + ], +) diff --git a/modules/routing/proto/routing.proto b/modules/routing/proto/routing.proto new file mode 100644 index 00000000000..571afe018de --- /dev/null +++ b/modules/routing/proto/routing.proto @@ -0,0 +1,132 @@ +syntax = "proto2"; + +package apollo.routing; + +import "modules/common/proto/header.proto"; + +message RoutingRequest { + message Pose { + optional double x = 1; + optional double y = 2; + optional double z = 3; + } + + message LaneWaypoint { + optional string id = 1; + optional double s = 2; + optional Pose pose = 3; + } + + message Lane { + optional string id = 1; + optional double start_s = 2; + optional double end_s = 3; + } + + optional apollo.common.Header header = 1; + optional LaneWaypoint start = 2; + optional LaneWaypoint end = 3; + + //Route must go through each waypoint in the order from start to end. + //Ignored if empty. + repeated LaneWaypoint waypoint = 4; + repeated Lane blacklisted_lane = 5; + repeated string blacklisted_road = 6; + optional bool broadcast = 7 [default = true]; +} + +message RoutingResponse { + message Measurement { + optional double distance = 1; + } + + message Lane { + optional string id = 1; + optional double s = 2; + } + + message Trajectory { + message TrajectoryPoint { + message Point { + optional double x = 1; + optional double y = 2; + optional double z = 3; + } + optional Point point = 1; + optional double curvature = 2; + optional double curvature_change_rate = 3; + optional double theta = 4; + optional double accumulated_s = 5; + } + repeated TrajectoryPoint point = 1; + optional double length = 2; + } + + message LaneSegment { + optional string id = 1; + optional double start_s = 2; + optional double end_s = 3; + } + + message PassageRegion { + repeated LaneSegment segment = 1; + optional Trajectory trajectory = 2; + } + + message LaneChangeInfo { + enum Type { + UNKNOWN = 0; + LEFT_FORWARD = 1; + LEFT_REVERSE = 2; + RIGHT_FORWARD = 3; + RIGHT_REVERSE = 4; + FORWARD = 5; + REVERSE = 6; + } + optional Type type = 1 [default = UNKNOWN]; + optional int32 start_passage_region_index = 2; + optional int32 end_passage_region_index = 3; + } + + message Road { + optional string id = 1; + optional Lane in_lane = 2; + optional Lane out_lane = 3; + repeated PassageRegion passage_region = 4; + repeated LaneChangeInfo lane_change_info = 5; + } + + message Junction { + optional string id = 1; + optional string in_road_id = 2; + optional string out_road_id = 3; + optional PassageRegion passage_region = 4; + } + + message Way { + oneof way_info { + Road road_info = 1; + Junction junction_info = 2; + } + } + + message ErrorCode { + enum ErrorID { + SUCCESS = 0; + ERROR_REQUEST = 1; + ERROR_RESPONSE_FAILED = 2; + ERROR_ROUTER_NOT_READY = 3; + } + optional ErrorID error_id = 1 [default = SUCCESS]; + optional string error_string = 2; + } + + optional apollo.common.Header header = 1; + repeated Way route = 2; + optional Measurement measurement = 3; + optional RoutingRequest routing_request = 4; + + // the map version which is used to build road graph + optional bytes map_version = 5; + optional ErrorCode error_code = 6; +} diff --git a/modules/routing/proto/routing_config.proto b/modules/routing/proto/routing_config.proto new file mode 100644 index 00000000000..b074f810153 --- /dev/null +++ b/modules/routing/proto/routing_config.proto @@ -0,0 +1,13 @@ +syntax = "proto2"; + +package apollo.routing; + +message RoutingConfig { + optional double base_speed = 1; // base speed for node creator [m/s] + optional double left_turn_penalty = 2; // left turn penalty for node creater [m] + optional double right_turn_penalty = 3; // right turn penalty for node creater [m] + optional double uturn_penalty = 4 ; // left turn penalty for node creater [m] + optional double change_penalty = 5; // change penalty for edge creater [m] + optional double base_changing_length = 6; // base change length penalty for edge creater [m] + optional double min_length_for_lane_change = 7; // min length for lane change [m] +} diff --git a/modules/routing/proto/topo_graph.proto b/modules/routing/proto/topo_graph.proto new file mode 100644 index 00000000000..03086f6c8d6 --- /dev/null +++ b/modules/routing/proto/topo_graph.proto @@ -0,0 +1,46 @@ +syntax = "proto2"; + +package apollo.routing; + +import "modules/map/proto/map_geometry.proto"; + +message CurvePoint { + optional double s = 1; +} + +message CurveRange { + optional CurvePoint start = 1; + optional CurvePoint end = 2; +} + +message Node { + optional string lane_id = 1; + optional double length = 2; + repeated CurveRange left_out = 3; + repeated CurveRange right_out = 4; + optional double cost = 5; + optional apollo.hdmap.Curve central_curve = 6; + optional bool is_virtual = 7 [default = true]; + optional string road_id = 8; +} + +message Edge { + enum DirectionType { + FORWARD = 0; + LEFT = 1; + RIGHT = 2; + } + + optional string from_lane_id = 1; + optional string to_lane_id = 2; + optional double cost = 3; + optional DirectionType direction_type = 4; +} + +message Graph { + optional string hdmap_version = 1; + optional string hdmap_district = 2; + repeated Node node = 3; + repeated Edge edge = 4; +} + diff --git a/modules/routing/routing.cc b/modules/routing/routing.cc new file mode 100644 index 00000000000..01398c6fccf --- /dev/null +++ b/modules/routing/routing.cc @@ -0,0 +1,83 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/routing.h" + +#include "modules/common/adapters/adapter_manager.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/routing/common/routing_gflags.h" +#include "modules/routing/core/navigator.h" + +namespace apollo { +namespace routing { + +using apollo::common::adapter::AdapterManager; +using apollo::common::monitor::MonitorMessageItem; +using apollo::common::ErrorCode; + +std::string Routing::Name() const { return FLAGS_node_name; } + +Routing::Routing() + : monitor_(apollo::common::monitor::MonitorMessageItem::ROUTING) {} + +apollo::common::Status Routing::Init() { + const auto routing_map_file = apollo::hdmap::RoutingMapFile(); + AINFO << "Use routing topology graph path: " << routing_map_file; + navigator_ptr_.reset(new Navigator(routing_map_file)); + CHECK(common::util::GetProtoFromFile(FLAGS_routing_conf_file, &routing_conf_)) + << "Unable to load control conf file: " + FLAGS_routing_conf_file; + + AINFO << "Conf file: " << FLAGS_routing_conf_file << " is loaded."; + + AdapterManager::Init(FLAGS_adapter_config_filename); + AdapterManager::AddRoutingRequestCallback(&Routing::OnRouting_Request, this); + return apollo::common::Status::OK(); +} + +apollo::common::Status Routing::Start() { + if (!navigator_ptr_->IsReady()) { + AERROR << "Navigator is not ready!"; + return apollo::common::Status(ErrorCode::ROUTING_ERROR, + "Navigator not ready"); + } + AINFO << "Routing service is ready."; + + apollo::common::monitor::MonitorBuffer buffer(&monitor_); + buffer.INFO("Routing started"); + return apollo::common::Status::OK(); +} + +void Routing::OnRouting_Request( + const apollo::routing::RoutingRequest &routing_request) { + AINFO << "Get new routing request!!!"; + routing::RoutingResponse routing_response; + apollo::common::monitor::MonitorBuffer buffer(&monitor_); + if (!navigator_ptr_->SearchRoute(routing_request, &routing_response)) { + AERROR << "Failed to search route with navigator."; + + buffer.WARN("Routing failed! " + + routing_response.error_code().error_string()); + return; + } + buffer.INFO("Routing success!"); + AdapterManager::PublishRoutingResponse(routing_response); + return; +} + +void Routing::Stop() {} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/routing.h b/modules/routing/routing.h new file mode 100644 index 00000000000..73fcb678858 --- /dev/null +++ b/modules/routing/routing.h @@ -0,0 +1,79 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_ROUTING_H_ +#define MODULES_ROUTING_ROUTING_H_ + +#include +#include + +#include "modules/routing/proto/routing.pb.h" +#include "modules/routing/proto/routing_config.pb.h" + +#include "modules/common/apollo_app.h" +#include "modules/common/monitor/monitor.h" +#include "modules/common/status/status.h" +#include "modules/routing/core/navigator.h" + +namespace apollo { +namespace routing { + +class Routing : public apollo::common::ApolloApp { + // friend class RoutingTestBase; + public: + Routing(); + + /** + * @brief module name + */ + std::string Name() const override; + + /** + * @brief module initialization function + * @return initialization status + */ + apollo::common::Status Init() override; + + /** + * @brief module start function + * @return start status + */ + apollo::common::Status Start() override; + + /** + * @brief module stop function + */ + void Stop() override; + + /** + * @brief destructor + */ + virtual ~Routing() = default; + + private: + void OnRouting_Request(const RoutingRequest &routing_request); + + private: + std::unique_ptr navigator_ptr_; + apollo::common::monitor::Monitor monitor_; + + RoutingConfig routing_conf_; +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_ROUTING_H_ diff --git a/modules/routing/strategy/BUILD b/modules/routing/strategy/BUILD new file mode 100644 index 00000000000..81a1fbd6d2e --- /dev/null +++ b/modules/routing/strategy/BUILD @@ -0,0 +1,31 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "strategy", + deps = [ + ":routing_a_star_strategy", + ], +) + +cc_library( + name = "routing_a_star_strategy", + srcs = [ + "a_star_strategy.cc", + ], + hdrs = [ + "a_star_strategy.h", + "strategy.h", + ], + deps = [ + "//modules/common", + "//modules/common/proto:common_proto", + "//modules/map/proto:map_proto", + "//modules/routing/common:routing_gflags", + "//modules/routing/graph", + "//modules/routing/proto:routing_proto", + ], +) + +cpplint() diff --git a/modules/routing/strategy/a_star_strategy.cc b/modules/routing/strategy/a_star_strategy.cc new file mode 100644 index 00000000000..b4566065e4e --- /dev/null +++ b/modules/routing/strategy/a_star_strategy.cc @@ -0,0 +1,392 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include +#include +#include +#include +#include + +#include "modules/common/log.h" + +#include "modules/routing/graph/sub_topo_graph.h" +#include "modules/routing/graph/topo_graph.h" +#include "modules/routing/graph/topo_node.h" +#include "modules/routing/strategy/a_star_strategy.h" + +namespace apollo { +namespace routing { + +namespace { + +const double LANE_CHANGE_SKIP_S = 10.0; + +struct SearchNode { + const TopoNode* topo_node; + double f; + + SearchNode() : topo_node(nullptr), f(std::numeric_limits::max()) {} + explicit SearchNode(const TopoNode* node) + : topo_node(node), f(std::numeric_limits::max()) {} + SearchNode(const SearchNode& search_node) + : topo_node(search_node.topo_node), f(search_node.f) {} + + bool operator<(const SearchNode& node) const { + // in order to let the top of priority queue is the smallest one! + return f > node.f; + } + + bool operator==(const SearchNode& node) const { + return topo_node == node.topo_node; + } +}; + +double GetCostToNeighbor(const TopoEdge* edge) { + return (edge->Cost() + edge->ToNode()->Cost()); +} + +const TopoNode* GetLargestNode(const std::vector& nodes) { + if (nodes.empty()) { + return nullptr; + } else if (nodes.size() < 2) { + return nodes[0]; + } + double max_range = nodes[0]->EndS() - nodes[0]->StartS(); + size_t max_idx = 0; + for (size_t i = 1; i < nodes.size(); ++i) { + double temp_range = nodes[i]->EndS() - nodes[i]->StartS(); + if (temp_range > max_range) { + max_range = temp_range; + max_idx = i; + } + } + return nodes[max_idx]; +} + +bool AdjustLaneChangeBackward( + std::vector* const result_node_vec) { + for (int i = static_cast(result_node_vec->size()) - 2; i > 0; --i) { + const auto* from_node = result_node_vec->at(i); + const auto* to_node = result_node_vec->at(i + 1); + const auto* base_node = result_node_vec->at(i - 1); + const auto* from_to_edge = from_node->GetOutEdgeTo(to_node); + if (from_to_edge == nullptr) { + // may need to recalculate edge, + // because only edge from origin node to subnode is saved + from_to_edge = to_node->GetInEdgeFrom(from_node); + } + if (from_to_edge == nullptr) { + AERROR << "Get null ptr to edge:" << from_node->LaneId() << " (" + << from_node->StartS() << ", " << from_node->EndS() << ")" + << " --> " << to_node->LaneId() << " (" << to_node->StartS() + << ", " << to_node->EndS() << ")"; + return false; + } + if (from_to_edge->Type() != TopoEdgeType::TET_FORWARD) { + if (base_node->EndS() - base_node->StartS() < + from_node->EndS() - from_node->StartS()) { + continue; + } + std::vector candidate_set; + candidate_set.push_back(from_node); + const auto& out_edges = base_node->OutToLeftOrRightEdge(); + for (const auto* edge : out_edges) { + const auto* candidate_node = edge->ToNode(); + if (candidate_node == from_node) { + continue; + } + if (candidate_node->GetOutEdgeTo(to_node) != nullptr) { + candidate_set.push_back(candidate_node); + } + } + const auto* largest_node = GetLargestNode(candidate_set); + if (largest_node == nullptr) { + return false; + } + if (largest_node != from_node) { + result_node_vec->at(i) = largest_node; + } + } + } + return true; +} + +bool AdjustLaneChangeForward( + std::vector* const result_node_vec) { + for (size_t i = 1; i < result_node_vec->size() - 1; ++i) { + const auto* from_node = result_node_vec->at(i - 1); + const auto* to_node = result_node_vec->at(i); + const auto* base_node = result_node_vec->at(i + 1); + const auto* from_to_edge = from_node->GetOutEdgeTo(to_node); + if (from_to_edge == nullptr) { + // may need to recalculate edge, + // because only edge from origin node to subnode is saved + from_to_edge = to_node->GetInEdgeFrom(from_node); + } + if (from_to_edge == nullptr) { + AERROR << "Get null ptr to edge:" << from_node->LaneId() << " (" + << from_node->StartS() << ", " << from_node->EndS() << ")" + << " --> " << to_node->LaneId() << " (" << to_node->StartS() + << ", " << to_node->EndS() << ")"; + return false; + } + if (from_to_edge->Type() != TopoEdgeType::TET_FORWARD) { + if (base_node->EndS() - base_node->StartS() < + to_node->EndS() - to_node->StartS()) { + continue; + } + std::vector candidate_set; + candidate_set.push_back(to_node); + const auto& in_edges = base_node->InFromLeftOrRightEdge(); + for (const auto* edge : in_edges) { + const auto* candidate_node = edge->FromNode(); + if (candidate_node == to_node) { + continue; + } + if (candidate_node->GetInEdgeFrom(from_node) != nullptr) { + candidate_set.push_back(candidate_node); + } + } + const auto* largest_node = GetLargestNode(candidate_set); + if (largest_node == nullptr) { + return false; + } + if (largest_node != to_node) { + result_node_vec->at(i) = largest_node; + } + } + } + return true; +} + +bool AdjustLaneChange(std::vector* const result_node_vec) { + if (result_node_vec->size() < 3) { + return true; + } + if (!AdjustLaneChangeBackward(result_node_vec)) { + AERROR << "Failed to adjust lane change backward"; + return false; + } + if (!AdjustLaneChangeForward(result_node_vec)) { + AERROR << "Failed to adjust lane change backward"; + return false; + } + return true; +} + +bool Reconstruct( + const std::unordered_map& came_from, + const TopoNode* dest_node, std::vector* result_nodes) { + std::vector result_node_vec; + result_node_vec.push_back(dest_node); + auto iter = came_from.find(dest_node); + while (iter != came_from.end()) { + result_node_vec.push_back(iter->second); + iter = came_from.find(iter->second); + } + std::reverse(result_node_vec.begin(), result_node_vec.end()); + if (!AdjustLaneChange(&result_node_vec)) { + AERROR << "Failed to adjust lane change"; + return false; + } + result_nodes->clear(); + for (const auto* node : result_node_vec) { + NodeSRange range(node->StartS(), node->EndS()); + NodeWithRange node_with_range(range, node->OriginNode()); + result_nodes->push_back(node_with_range); + } + return true; +} + +} // namespace + +AStarStrategy::AStarStrategy(bool enable_change) + : change_lane_enabled_(enable_change) {} + +void AStarStrategy::Clear() { + closed_set_.clear(); + open_set_.clear(); + came_from_.clear(); + enter_s_.clear(); + g_score_.clear(); +} + +double AStarStrategy::HeuristicCost(const TopoNode* src_node, + const TopoNode* dest_node) { + const auto& src_point = src_node->AnchorPoint(); + const auto& dest_point = dest_node->AnchorPoint(); + double distance = fabs(src_point.x() - dest_point.x()) + + fabs(src_point.y() - dest_point.y()); + return distance; +} + +bool AStarStrategy::Search(const TopoGraph* graph, + const SubTopoGraph* sub_graph, + const TopoNode* src_node, const TopoNode* dest_node, + std::vector* const result_nodes) { + Clear(); + AINFO << "Start A* search algorithm."; + + std::priority_queue open_set_detail; + + SearchNode src_search_node(src_node); + src_search_node.f = HeuristicCost(src_node, dest_node); + open_set_detail.push(src_search_node); + + open_set_.insert(src_node); + g_score_[src_node] = 0.0; + enter_s_[src_node] = src_node->StartS(); + + SearchNode current_node; + std::unordered_set next_edge_set; + std::unordered_set sub_edge_set; + while (!open_set_detail.empty()) { + current_node = open_set_detail.top(); + const auto* from_node = current_node.topo_node; + if (current_node.topo_node == dest_node) { + if (!Reconstruct(came_from_, from_node, result_nodes)) { + AERROR << "Failed to reconstruct route."; + return false; + } + return true; + } + open_set_.erase(from_node); + open_set_detail.pop(); + + if (closed_set_.count(from_node) != 0) { + // if showed before, just skip... + continue; + } + closed_set_.emplace(from_node); + + // if residual_s is less than LANE_CHANGE_SKIP_S, only move forward + const auto& neighbor_edges = + (GetResidualS(from_node) > LANE_CHANGE_SKIP_S && change_lane_enabled_) + ? from_node->OutToAllEdge() + : from_node->OutToSucEdge(); + double tentative_g_score = 0.0; + next_edge_set.clear(); + for (const auto* edge : neighbor_edges) { + sub_edge_set.clear(); + sub_graph->GetSubInEdgesIntoSubGraph(edge, &sub_edge_set); + next_edge_set.insert(sub_edge_set.begin(), sub_edge_set.end()); + } + + for (const auto* edge : next_edge_set) { + const auto* to_node = edge->ToNode(); + if (closed_set_.count(to_node) == 1) { + continue; + } + if (GetResidualS(edge, to_node) < LANE_CHANGE_SKIP_S) { + continue; + } + tentative_g_score = + g_score_[current_node.topo_node] + GetCostToNeighbor(edge); + if (edge->Type() != TopoEdgeType::TET_FORWARD) { + tentative_g_score -= + (edge->FromNode()->Cost() + edge->ToNode()->Cost()) / 2; + } + if (open_set_.count(to_node) != 0 && + tentative_g_score >= g_score_[to_node]) { + continue; + } + // if to_node is reached by forward, reset enter_s to start_s + if (edge->Type() == TopoEdgeType::TET_FORWARD) { + enter_s_[to_node] = to_node->StartS(); + } else { + // else, add enter_s with LANE_CHANGE_SKIP_S + double to_node_enter_s = (enter_s_[from_node] + LANE_CHANGE_SKIP_S) / + from_node->Length() * to_node->Length(); + // enter s could be larger than end_s but should be less than length + to_node_enter_s = std::min(to_node_enter_s, to_node->Length()); + // if enter_s is larger than end_s and to_node is dest_node + if (to_node_enter_s > to_node->EndS() && to_node == dest_node) { + continue; + } + enter_s_[to_node] = to_node_enter_s; + } + + g_score_[to_node] = tentative_g_score; + SearchNode next_node(to_node); + next_node.f = tentative_g_score + HeuristicCost(to_node, dest_node); + open_set_detail.push(next_node); + came_from_[to_node] = from_node; + if (open_set_.count(to_node) == 0) { + open_set_.insert(to_node); + } + } + } + AERROR << "Failed to find goal lane with id: " << dest_node->LaneId(); + return false; +} + +double AStarStrategy::GetResidualS(const TopoNode* node) { + double start_s = node->StartS(); + const auto iter = enter_s_.find(node); + if (iter != enter_s_.end()) { + if (iter->second > node->EndS()) { + return 0.0; + } + start_s = iter->second; + } else { + AWARN << "lane " << node->LaneId() << "(" << node->StartS() << ", " + << node->EndS() << "not found in enter_s map"; + } + double end_s = node->EndS(); + const TopoNode* succ_node = nullptr; + for (const auto* edge : node->OutToAllEdge()) { + if (edge->ToNode()->LaneId() == node->LaneId()) { + succ_node = edge->ToNode(); + break; + } + } + if (succ_node != nullptr) { + end_s = succ_node->EndS(); + } + return (end_s - start_s); +} + +double AStarStrategy::GetResidualS(const TopoEdge* edge, + const TopoNode* to_node) { + if (edge->Type() == TopoEdgeType::TET_FORWARD) { + return std::numeric_limits::max(); + } + double start_s = to_node->StartS(); + const auto* from_node = edge->FromNode(); + const auto iter = enter_s_.find(from_node); + if (iter != enter_s_.end()) { + double temp_s = iter->second / from_node->Length() * to_node->Length(); + start_s = std::max(start_s, temp_s); + } else { + AWARN << "lane " << from_node->LaneId() << "(" << from_node->StartS() + << ", " << from_node->EndS() << "not found in enter_s map"; + } + double end_s = to_node->EndS(); + const TopoNode* succ_node = nullptr; + for (const auto* edge : to_node->OutToAllEdge()) { + if (edge->ToNode()->LaneId() == to_node->LaneId()) { + succ_node = edge->ToNode(); + break; + } + } + if (succ_node != nullptr) { + end_s = succ_node->EndS(); + } + return (end_s - start_s); +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/strategy/a_star_strategy.h b/modules/routing/strategy/a_star_strategy.h new file mode 100644 index 00000000000..2f92cf0324a --- /dev/null +++ b/modules/routing/strategy/a_star_strategy.h @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_STRATEGY_A_STAR_STRATEGY_H_ +#define MODULES_ROUTING_STRATEGY_A_STAR_STRATEGY_H_ + +#include +#include +#include + +#include "modules/routing/strategy/strategy.h" + +namespace apollo { +namespace routing { + +class AStarStrategy : public Strategy { + public: + explicit AStarStrategy(bool enable_change); + ~AStarStrategy() = default; + + virtual bool Search(const TopoGraph* graph, const SubTopoGraph* sub_graph, + const TopoNode* src_node, const TopoNode* dest_node, + std::vector* const result_nodes); + + private: + void Clear(); + double HeuristicCost(const TopoNode* src_node, const TopoNode* dest_node); + double GetResidualS(const TopoNode* node); + double GetResidualS(const TopoEdge* edge, const TopoNode* to_node); + + private: + bool change_lane_enabled_; + std::unordered_set open_set_; + std::unordered_set closed_set_; + std::unordered_map came_from_; + std::unordered_map g_score_; + std::unordered_map enter_s_; +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_STRATEGY_A_STAR_STRATEGY_H_ diff --git a/modules/routing/strategy/strategy.h b/modules/routing/strategy/strategy.h new file mode 100644 index 00000000000..cad5d459cb1 --- /dev/null +++ b/modules/routing/strategy/strategy.h @@ -0,0 +1,42 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_STRATEGY_STRATEGY_H_ +#define MODULES_ROUTING_STRATEGY_STRATEGY_H_ + +#include +#include + +#include "modules/routing/graph/sub_topo_graph.h" +#include "modules/routing/graph/topo_graph.h" +#include "modules/routing/graph/topo_node.h" + +namespace apollo { +namespace routing { + +class Strategy { + public: + virtual ~Strategy() {} + + virtual bool Search(const TopoGraph* graph, const SubTopoGraph* sub_graph, + const TopoNode* src_node, const TopoNode* dest_node, + std::vector* const result_nodes) = 0; +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_STRATEGY_STRATEGY_H_ diff --git a/modules/routing/topo_creator/BUILD b/modules/routing/topo_creator/BUILD new file mode 100644 index 00000000000..083259c608b --- /dev/null +++ b/modules/routing/topo_creator/BUILD @@ -0,0 +1,75 @@ +load("//tools:cpplint.bzl", "cpplint") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "edge_creator", + srcs = [ + "edge_creator.cc", + ], + hdrs = [ + "edge_creator.h", + ], + deps = [ + "//modules/common", + "//modules/map/proto:map_proto", + "//modules/routing/common:routing_gflags", + "//modules/routing/proto:routing_proto", + ], +) + +cc_library( + name = "graph_creator", + srcs = [ + "graph_creator.cc", + ], + hdrs = [ + "graph_creator.h", + ], + deps = [ + ":edge_creator", + ":node_creator", + "//modules/common", + "//modules/common/util", + "//modules/map/hdmap/adapter:opendrive_adapter", + "//modules/map/proto:map_proto", + "//modules/routing/proto:routing_proto", + ], +) + +cc_library( + name = "node_creator", + srcs = [ + "node_creator.cc", + ], + hdrs = [ + "node_creator.h", + ], + deps = [ + "//modules/common", + "//modules/map/proto:map_proto", + "//modules/routing/common:routing_gflags", + "//modules/routing/proto:routing_proto", + ], +) + +cc_binary( + name = "topo_creator", + srcs = ["topo_creator.cc"], + deps = [ + ":graph_creator", + "//external:gflags", + "//modules/common", + "//modules/common:apollo_app", + "//modules/common:log", + "//modules/common/configs:config_gflags", + "//modules/common/status", + "//modules/common/util", + "//modules/map/hdmap:hdmap_util", + "//modules/map/proto:map_proto", + "//modules/routing/common:routing_gflags", + "//modules/routing/proto:routing_proto", + ], +) + +cpplint() diff --git a/modules/routing/topo_creator/edge_creator.cc b/modules/routing/topo_creator/edge_creator.cc new file mode 100644 index 00000000000..46c19f99df0 --- /dev/null +++ b/modules/routing/topo_creator/edge_creator.cc @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/topo_creator/edge_creator.h" + +#include + +namespace apollo { +namespace routing { + +void EdgeCreator::GetPbEdge(const Node& node_from, const Node& node_to, + const Edge::DirectionType& type, Edge* pb_edge, + const RoutingConfig* routing_config) { + InitEdgeInfo(node_from, node_to, type, pb_edge, routing_config); + InitEdgeCost(node_from, node_to, type, pb_edge, routing_config); +} + +void EdgeCreator::InitEdgeInfo(const Node& node_from, const Node& node_to, + const Edge::DirectionType& type, + Edge* const edge, + const RoutingConfig* routing_config) { + edge->set_from_lane_id(node_from.lane_id()); + edge->set_to_lane_id(node_to.lane_id()); + edge->set_direction_type(type); +} + +void EdgeCreator::InitEdgeCost(const Node& node_from, const Node& node_to, + const Edge::DirectionType& type, + Edge* const edge, + const RoutingConfig* routing_config) { + edge->set_cost(0.0); + if (type == Edge::LEFT || type == Edge::RIGHT) { + const auto& target_range = + (type == Edge::LEFT) ? node_from.left_out() : node_from.right_out(); + double changing_area_length = 0.0; + for (const auto& range : target_range) { + changing_area_length += range.end().s() - range.start().s(); + } + double ratio = + (changing_area_length >= routing_config->base_changing_length()) + ? pow(changing_area_length / routing_config->base_changing_length(), + -1.5) + : 1.0; + edge->set_cost(routing_config->change_penalty() * ratio); + } +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/topo_creator/edge_creator.h b/modules/routing/topo_creator/edge_creator.h new file mode 100644 index 00000000000..365925de7d8 --- /dev/null +++ b/modules/routing/topo_creator/edge_creator.h @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_TOPO_CREATOR_EDGE_CREATOR_H +#define MODULES_ROUTING_TOPO_CREATOR_EDGE_CREATOR_H + +#include "modules/routing/proto/routing_config.pb.h" +#include "modules/routing/proto/topo_graph.pb.h" + +namespace apollo { +namespace routing { + +class EdgeCreator { + public: + static void GetPbEdge(const Node& node_from, const Node& node_to, + const Edge::DirectionType& type, Edge* pb_edge, + const RoutingConfig* routingconfig); + + private: + static void InitEdgeInfo(const Node& node_from, const Node& node_to, + const Edge::DirectionType& type, Edge* pb_edge, + const RoutingConfig* routingconfig); + static void InitEdgeCost(const Node& node_from, const Node& node_to, + const Edge::DirectionType& type, Edge* pb_edge, + const RoutingConfig* routingconfig); +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_TOPO_CREATOR_EDGE_CREATOR_H diff --git a/modules/routing/topo_creator/graph_creator.cc b/modules/routing/topo_creator/graph_creator.cc new file mode 100644 index 00000000000..065d34a2d48 --- /dev/null +++ b/modules/routing/topo_creator/graph_creator.cc @@ -0,0 +1,193 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/topo_creator/graph_creator.h" + +#include "glog/logging.h" + +#include "modules/common/util/file.h" +#include "modules/map/hdmap/adapter/opendrive_adapter.h" +#include "modules/routing/topo_creator/edge_creator.h" +#include "modules/routing/topo_creator/node_creator.h" + +namespace apollo { +namespace routing { + +using ::google::protobuf::RepeatedPtrField; +using apollo::hdmap::Id; +using apollo::hdmap::LaneBoundary; +using apollo::hdmap::LaneBoundaryType; + +using apollo::common::util::EndWith; + +namespace { + +bool IsAllowedToCross(const LaneBoundary& boundary) { + for (const auto& boundary_type : boundary.boundary_type()) { + if (boundary_type.types(0) != LaneBoundaryType::DOTTED_YELLOW && + boundary_type.types(0) != LaneBoundaryType::DOTTED_WHITE) { + return false; + } + } + return true; +} + +} // namespace + +GraphCreator::GraphCreator(const std::string& base_map_file_path, + const std::string& dump_topo_file_path, + const RoutingConfig* routing_conf) + : base_map_file_path_(base_map_file_path), + dump_topo_file_path_(dump_topo_file_path), + routing_conf_(routing_conf) {} + +bool GraphCreator::Create() { + if (common::util::EndWith(base_map_file_path_, ".xml")) { + if (!hdmap::adapter::OpendriveAdapter::LoadData(base_map_file_path_, + &pbmap_)) { + AERROR << "Failed to load base map file from " << base_map_file_path_; + return false; + } + } else { + if (!common::util::GetProtoFromFile(base_map_file_path_, &pbmap_)) { + AERROR << "Failed to load base map file from " << base_map_file_path_; + return false; + } + } + + AINFO << "Number of lanes: " << pbmap_.lane_size(); + + graph_.set_hdmap_version(pbmap_.header().version()); + graph_.set_hdmap_district(pbmap_.header().district()); + + node_index_map_.clear(); + road_id_map_.clear(); + showed_edge_id_set_.clear(); + + for (const auto& road : pbmap_.road()) { + for (const auto& section : road.section()) { + for (const auto& lane_id : section.lane_id()) { + road_id_map_[lane_id.id()] = road.id().id(); + } + } + } + + InitForbiddenLanes(); + + for (const auto& lane : pbmap_.lane()) { + const auto& lane_id = lane.id().id(); + if (forbidden_lane_id_set_.find(lane_id) != forbidden_lane_id_set_.end()) { + ADEBUG << "Ignored lane id: " << lane_id + << " because its type is NOT CITY_DRIVING."; + continue; + } + AINFO << "Current lane id: " << lane_id; + node_index_map_[lane_id] = graph_.node_size(); + const auto iter = road_id_map_.find(lane_id); + if (iter != road_id_map_.end()) { + NodeCreator::GetPbNode(lane, iter->second, graph_.add_node(), + routing_conf_); + } else { + LOG(WARNING) << "Failed to find road id of lane " << lane_id; + NodeCreator::GetPbNode(lane, "", graph_.add_node(), routing_conf_); + } + } + + std::string edge_id = ""; + for (const auto& lane : pbmap_.lane()) { + const auto& lane_id = lane.id().id(); + if (forbidden_lane_id_set_.find(lane_id) != forbidden_lane_id_set_.end()) { + ADEBUG << "Ignored lane id: " << lane_id + << " because its type is NOT CITY_DRIVING."; + continue; + } + const auto& from_node = graph_.node(node_index_map_[lane_id]); + + AddEdge(from_node, lane.successor_id(), Edge::FORWARD); + if (lane.length() < routing_conf_->min_length_for_lane_change()) { + continue; + } + if (lane.has_left_boundary() && IsAllowedToCross(lane.left_boundary())) { + AddEdge(from_node, lane.left_neighbor_forward_lane_id(), Edge::LEFT); + } + + if (lane.has_right_boundary() && IsAllowedToCross(lane.right_boundary())) { + AddEdge(from_node, lane.right_neighbor_forward_lane_id(), Edge::RIGHT); + } + } + + if (!EndWith(dump_topo_file_path_, ".bin") && + !EndWith(dump_topo_file_path_, ".txt")) { + AERROR << "Failed to dump topo data into file, incorrect file type " + << dump_topo_file_path_; + return false; + } + int type_pos = dump_topo_file_path_.find_last_of(".") + 1; + std::string bin_file = dump_topo_file_path_.replace(type_pos, 3, "bin"); + std::string txt_file = dump_topo_file_path_.replace(type_pos, 3, "txt"); + if (!common::util::SetProtoToASCIIFile(graph_, txt_file)) { + AERROR << "Failed to dump topo data into file " << txt_file; + return false; + } + AINFO << "Txt file is dumped successfully. Path: " << txt_file; + if (!common::util::SetProtoToBinaryFile(graph_, bin_file)) { + AERROR << "Failed to dump topo data into file " << bin_file; + return false; + } + AINFO << "Bin file is dumped successfully. Path: " << bin_file; + return true; +} + +std::string GraphCreator::GetEdgeID(const std::string& from_id, + const std::string& to_id) { + return from_id + "->" + to_id; +} + +void GraphCreator::AddEdge(const Node& from_node, + const RepeatedPtrField& to_node_vec, + const Edge::DirectionType& type) { + std::string edge_id = ""; + for (const auto& to_id : to_node_vec) { + if (forbidden_lane_id_set_.find(to_id.id()) != + forbidden_lane_id_set_.end()) { + ADEBUG << "Ignored lane [id = " << to_id.id(); + continue; + } + edge_id = GetEdgeID(from_node.lane_id(), to_id.id()); + if (showed_edge_id_set_.count(edge_id) != 0) { + continue; + } + showed_edge_id_set_.insert(edge_id); + const auto& iter = node_index_map_.find(to_id.id()); + if (iter == node_index_map_.end()) { + continue; + } + const auto& to_node = graph_.node(iter->second); + EdgeCreator::GetPbEdge(from_node, to_node, type, graph_.add_edge(), + routing_conf_); + } +} + +void GraphCreator::InitForbiddenLanes() { + for (const auto& lane : pbmap_.lane()) { + if (lane.type() != hdmap::Lane::CITY_DRIVING) { + forbidden_lane_id_set_.insert(lane.id().id()); + } + } +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/topo_creator/graph_creator.h b/modules/routing/topo_creator/graph_creator.h new file mode 100644 index 00000000000..3b944ad4ab9 --- /dev/null +++ b/modules/routing/topo_creator/graph_creator.h @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_TOPO_CREATOR_GRAPH_CREATOR_H +#define MODULES_ROUTING_TOPO_CREATOR_GRAPH_CREATOR_H + +#include +#include +#include + +#include "modules/map/proto/map.pb.h" +#include "modules/routing/proto/routing_config.pb.h" +#include "modules/routing/proto/topo_graph.pb.h" + +namespace apollo { +namespace routing { + +class GraphCreator { + public: + GraphCreator(const std::string& base_map_file_path, + const std::string& dump_topo_file_path, + const RoutingConfig* routing_conf); + + ~GraphCreator() = default; + + bool Create(); + + private: + void InitForbiddenLanes(); + std::string GetEdgeID(const std::string& from_id, const std::string& to_id); + + void AddEdge( + const Node& from_node, + const ::google::protobuf::RepeatedPtrField& to_node_vec, + const Edge::DirectionType& type); + + private: + std::string base_map_file_path_; + std::string dump_topo_file_path_; + hdmap::Map pbmap_; + Graph graph_; + std::unordered_map node_index_map_; + std::unordered_map road_id_map_; + std::unordered_set showed_edge_id_set_; + std::unordered_set forbidden_lane_id_set_; + + const RoutingConfig* routing_conf_ = nullptr; +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_TOPO_CREATOR_GRAPH_CREATOR_H diff --git a/modules/routing/topo_creator/node_creator.cc b/modules/routing/topo_creator/node_creator.cc new file mode 100644 index 00000000000..591477ed35c --- /dev/null +++ b/modules/routing/topo_creator/node_creator.cc @@ -0,0 +1,122 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/routing/topo_creator/node_creator.h" + +#include +#include + +namespace apollo { +namespace routing { + +namespace { + +using ::google::protobuf::RepeatedPtrField; + +using apollo::hdmap::Lane; +using apollo::hdmap::LaneBoundary; +using apollo::hdmap::LaneBoundaryType; + +bool IsAllowedOut(const LaneBoundaryType& type) { + if (type.types(0) == LaneBoundaryType::DOTTED_YELLOW || + type.types(0) == LaneBoundaryType::DOTTED_WHITE) { + return true; + } + return false; +} + +double GetLengthbyRate(double cur_s, double cur_total_length, + double target_length) { + double new_length = cur_s / cur_total_length * target_length; + return std::min(new_length, target_length); +} + +double GetLaneLength(const Lane& lane) { + double length = 0.0; + for (const auto& segment : lane.central_curve().segment()) { + length += segment.length(); + } + return length; +} + +} // namespace + +void NodeCreator::GetPbNode(const Lane& lane, const std::string& road_id, + Node* pb_node, const RoutingConfig* routingconfig) { + InitNodeInfo(lane, road_id, pb_node, routingconfig); + InitNodeCost(lane, pb_node, routingconfig); +} + +void NodeCreator::AddOutBoundary( + const LaneBoundary& bound, double lane_length, + RepeatedPtrField* const out_range) { + for (int i = 0; i < bound.boundary_type_size(); ++i) { + if (!IsAllowedOut(bound.boundary_type(i))) { + continue; + } + CurveRange* range = out_range->Add(); + range->mutable_start()->set_s(GetLengthbyRate(bound.boundary_type(i).s(), + bound.length(), lane_length)); + if (i != bound.boundary_type_size() - 1) { + range->mutable_end()->set_s(GetLengthbyRate( + bound.boundary_type(i + 1).s(), bound.length(), lane_length)); + } else { + range->mutable_end()->set_s(lane_length); + } + } +} + +void NodeCreator::InitNodeInfo(const Lane& lane, const std::string& road_id, + Node* const node, + const RoutingConfig* routingconfig) { + double lane_length = GetLaneLength(lane); + node->set_lane_id(lane.id().id()); + node->set_road_id(road_id); + AddOutBoundary(lane.left_boundary(), lane_length, node->mutable_left_out()); + AddOutBoundary(lane.right_boundary(), lane_length, node->mutable_right_out()); + node->set_length(lane_length); + node->mutable_central_curve()->CopyFrom(lane.central_curve()); + node->set_is_virtual(true); + if (!lane.has_junction_id() || + lane.left_neighbor_forward_lane_id_size() > 0 || + lane.right_neighbor_forward_lane_id_size() > 0) { + node->set_is_virtual(false); + } +} + +void NodeCreator::InitNodeCost(const Lane& lane, Node* const node, + const RoutingConfig* routingconfig) { + double lane_length = GetLaneLength(lane); + double speed_limit = (lane.has_speed_limit()) ? lane.speed_limit() + : routingconfig->base_speed(); + double ratio = (speed_limit >= routingconfig->base_speed()) + ? (1 / sqrt(speed_limit / routingconfig->base_speed())) + : 1.0; + double cost = lane_length * ratio; + if (lane.has_turn()) { + if (lane.turn() == Lane::LEFT_TURN) { + cost += routingconfig->left_turn_penalty(); + } else if (lane.turn() == Lane::RIGHT_TURN) { + cost += routingconfig->right_turn_penalty(); + } else if (lane.turn() == Lane::U_TURN) { + cost += routingconfig->uturn_penalty(); + } + } + node->set_cost(cost); +} + +} // namespace routing +} // namespace apollo diff --git a/modules/routing/topo_creator/node_creator.h b/modules/routing/topo_creator/node_creator.h new file mode 100644 index 00000000000..7d1d75f6a88 --- /dev/null +++ b/modules/routing/topo_creator/node_creator.h @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#ifndef MODULES_ROUTING_TOPO_CREATOR_NODE_CREATOR_H +#define MODULES_ROUTING_TOPO_CREATOR_NODE_CREATOR_H + +#include + +#include "modules/map/proto/map_lane.pb.h" +#include "modules/routing/proto/routing_config.pb.h" +#include "modules/routing/proto/topo_graph.pb.h" + +namespace apollo { +namespace routing { + +class NodeCreator { + public: + static void GetPbNode(const hdmap::Lane& lane, const std::string& road_id, + Node* pb_node, const RoutingConfig* routingconfig); + + private: + static void AddOutBoundary( + const hdmap::LaneBoundary& bound, double lane_length, + ::google::protobuf::RepeatedPtrField* const out_range); + + static void InitNodeInfo(const hdmap::Lane& lane, const std::string& road_id, + Node* const node, + const RoutingConfig* routingconfig); + static void InitNodeCost(const hdmap::Lane& lane, Node* const node, + const RoutingConfig* routingconfig); +}; + +} // namespace routing +} // namespace apollo + +#endif // MODULES_ROUTING_TOPO_CREATOR_NODE_CREATOR_H diff --git a/modules/routing/topo_creator/topo_creator.cc b/modules/routing/topo_creator/topo_creator.cc new file mode 100644 index 00000000000..c25ff3dc898 --- /dev/null +++ b/modules/routing/topo_creator/topo_creator.cc @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright 2017 The Apollo 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. + *****************************************************************************/ + +#include "modules/common/apollo_app.h" +#include "modules/common/configs/config_gflags.h" +#include "modules/common/log.h" +#include "modules/common/util/file.h" +#include "modules/map/hdmap/hdmap_util.h" +#include "modules/routing/common/routing_gflags.h" +#include "modules/routing/proto/routing_config.pb.h" +#include "modules/routing/topo_creator/graph_creator.h" + +int main(int argc, char **argv) { + google::InitGoogleLogging(argv[0]); + google::ParseCommandLineFlags(&argc, &argv, true); + + apollo::routing::RoutingConfig routing_conf; + + CHECK(apollo::common::util::GetProtoFromFile(FLAGS_routing_conf_file, + &routing_conf)) + << "Unable to load control conf file: " + FLAGS_routing_conf_file; + + AINFO << "Conf file: " << FLAGS_routing_conf_file << " is loaded."; + + const auto base_map = apollo::hdmap::BaseMapFile(); + const auto routing_map = apollo::hdmap::RoutingMapFile(); + apollo::routing::GraphCreator creator(base_map, routing_map, &routing_conf); + CHECK(creator.Create()) << "Create routing topo failed!"; + + AINFO << "Create routing topo successfully from " << base_map << " to " + << routing_map; + return 0; +} diff --git a/modules/tools/README.md b/modules/tools/README.md index bd75ed3b8d5..5436b5eef0f 100644 --- a/modules/tools/README.md +++ b/modules/tools/README.md @@ -1,23 +1,50 @@ -# Tools +# Apollo Tools -## HMI - Control panel of Apollo to start/stop modules and drive modes. +## Prerequisites -## Diagnostics - Display input/output protobuf messages for modules. +The tools are mostly written in Python and relying on compiled proto modules. So +generally you need to do the following steps to make it function well. + +`Note that all scripts in this page are referenced from Apollo root directory.` + +```bash +# Compile everything including python proto libs. +apollo.sh build + +# Setup PYTHONPATH properly. +source scripts/apollo_base.sh +``` + +## Highlight Tools + +* Diagnostics + + `shortcuts: scripts/diagnostics.sh` + + Display input/output protobuf messages for modules. + +* Plot_control + + Subscribe control command message and plot recent x steering, throttle, and + brake values. + +* Realtime_plot + + `shortcuts: scripts/realtime_plot.sh` -## Plot_control - Subscribe control command message and plot recent x steering, throttle, - and brake values. - -## Realtime_plot Subscribe planning & control messages and plot real time trajectory, speed, - curvature/ST-graph, and acceleration/heading. - -## Record_play -### Rtk_recorder - Record vehicle trajectory and save it into a file. + curvature/ST-graph, and acceleration/heading. -### Rtk_player - Read recorded trajectory and publish it as a planning trajectory. +* Record_play + + * Rtk_recorder + + `shortcuts: scripts/run_rtk_recorder.sh` + Record vehicle trajectory and save it into a file. + + * Rtk_player + + `shortcuts: scripts/run_rtk_player.sh` + + Read recorded trajectory and publish it as a planning trajectory. diff --git a/modules/tools/calibration/data_collector.py b/modules/tools/calibration/data_collector.py index de5b8c8f4e7..646a115f30d 100644 --- a/modules/tools/calibration/data_collector.py +++ b/modules/tools/calibration/data_collector.py @@ -18,14 +18,16 @@ """ Data Collector """ +import os import sys +import time + import rospy from std_msgs.msg import String -from modules.localization.proto import localization_pb2 + from modules.canbus.proto import chassis_pb2 from modules.control.proto import control_cmd_pb2 -import time -import os +from modules.localization.proto import localization_pb2 class DataCollector(object): diff --git a/modules/tools/calibration/plot_data.py b/modules/tools/calibration/plot_data.py index 1e669c3b78f..52e75dacaee 100644 --- a/modules/tools/calibration/plot_data.py +++ b/modules/tools/calibration/plot_data.py @@ -19,12 +19,14 @@ This module provide function to plot the speed control info from log csv file """ import sys + import matplotlib.pyplot as plt import numpy as np import tkFileDialog + +from process import get_start_index from process import preprocess from process import process -from process import get_start_index class Plotter(object): diff --git a/modules/tools/calibration/plot_grid.py b/modules/tools/calibration/plot_grid.py index e0ced98bd4b..a1427b10e0f 100644 --- a/modules/tools/calibration/plot_grid.py +++ b/modules/tools/calibration/plot_grid.py @@ -16,12 +16,13 @@ # limitations under the License. ############################################################################### -import matplotlib.pyplot as plt import math import sys + +import matplotlib.pyplot as plt import numpy as np -from matplotlib import colors as mcolors from matplotlib import cm as cmx +from matplotlib import colors as mcolors markers = [ "o", "v", "^", "<", ">", "1", "2", "3", "4", "8", "s", "p", "*", "+", "x", diff --git a/modules/tools/calibration/plot_results.py b/modules/tools/calibration/plot_results.py index c58579f94e8..36f71a42e28 100644 --- a/modules/tools/calibration/plot_results.py +++ b/modules/tools/calibration/plot_results.py @@ -16,12 +16,13 @@ # limitations under the License. ############################################################################### -import matplotlib.pyplot as plt import math import sys + +import matplotlib.pyplot as plt import numpy as np -from matplotlib import colors as mcolors from matplotlib import cm as cmx +from matplotlib import colors as mcolors markers = [ "o", "v", "^", "<", ">", "1", "2", "3", "4", "8", "s", "p", "*", "+", "x", diff --git a/modules/tools/calibration/process.py b/modules/tools/calibration/process.py index a92fbb81c51..67364975dde 100644 --- a/modules/tools/calibration/process.py +++ b/modules/tools/calibration/process.py @@ -18,11 +18,12 @@ """ This module provide function to plot the speed control info from log csv file """ +import math +import warnings import numpy as np -import warnings -import math import scipy.signal as signal + warnings.simplefilter('ignore', np.RankWarning) SPEED_INTERVAL = 0.2 diff --git a/modules/tools/calibration/process_data.py b/modules/tools/calibration/process_data.py index 6cbb618f3d8..020a54a11d8 100644 --- a/modules/tools/calibration/process_data.py +++ b/modules/tools/calibration/process_data.py @@ -19,13 +19,15 @@ This module provide function to plot the speed control info from log csv file """ -import sys import math +import sys + import numpy as np import tkFileDialog + +from process import get_start_index from process import preprocess from process import process -from process import get_start_index class Plotter(object): diff --git a/modules/tools/calibration/result2pb.py b/modules/tools/calibration/result2pb.py index 9b7b0af444a..af67cbbd292 100644 --- a/modules/tools/calibration/result2pb.py +++ b/modules/tools/calibration/result2pb.py @@ -16,12 +16,13 @@ # limitations under the License. ############################################################################### -import numpy as np import sys -sys.path.append("../../bazel-genfiles") + +import numpy as np + +import common.proto_utils as proto_utils from modules.control.proto import calibration_table_pb2 -from modules.control.proto import control_conf_pb2 -from google.protobuf import text_format +from modules.control.proto.control_conf_pb2 import ControlConf def load_calibration_raw_data(fn): @@ -83,14 +84,6 @@ def load_calibration_raw_data_old(fn): return speed_table -def load_old_control_conf_pb_txt(control_conf_pb_txt_file): - control_conf_pb = control_conf_pb2.ControlConf() - f_handle = open(control_conf_pb_txt_file, 'r') - text_format.Merge(f_handle.read(), control_conf_pb) - f_handle.close() - return control_conf_pb - - def get_calibration_table_pb(speed_table): calibration_table_pb = calibration_table_pb2.ControlCalibrationTable() speeds = speed_table.keys() @@ -113,7 +106,7 @@ def get_calibration_table_pb(speed_table): if len(sys.argv) < 2: print "usage: python plot_results.py old_control_conf.pb.txt result.csv" - ctl_conf_pb = load_old_control_conf_pb_txt(sys.argv[1]) + ctl_conf_pb = proto_utils.get_pb_from_text_file(sys.argv[1], ControlConf()) speed_table_dict = load_calibration_raw_data(sys.argv[2]) calibration_table_pb = get_calibration_table_pb(speed_table_dict) ctl_conf_pb.lon_controller_conf.calibration_table.CopyFrom( diff --git a/modules/tools/common/__init__.py b/modules/tools/common/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/modules/tools/common/proto_utils.py b/modules/tools/common/proto_utils.py new file mode 100644 index 00000000000..1c215747092 --- /dev/null +++ b/modules/tools/common/proto_utils.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### +"""Protobuf utils.""" +import google.protobuf.text_format as text_format + + +def get_pb_from_text_file(filename, pb_value): + """Get a proto from given text file.""" + with open(filename, 'r') as file_in: + return text_format.Merge(file_in.read(), pb_value) + + +def get_pb_from_bin_file(filename, pb_value): + """Get a proto from given binary file.""" + with open(filename, 'rb') as file_in: + pb_value.ParseFromString(file_in.read()) + return pb_value + + +def get_pb_from_file(filename, pb_value): + """Get a proto from given file by trying binary mode and text mode.""" + try: + return get_pb_from_bin_file(filename, pb_value) + except: + print 'Info: Cannot parse %s as binary proto.' % filename + + try: + return get_pb_from_text_file(filename, pb_value) + except: + print 'Error: Cannot parse %s as text proto' % filename + + return None + + +def flatten(pb_value, selectors): + """ + Get a flattened tuple from pb_value. Selectors is a list of sub-fields. + + Usage: + For a pb_value of: + total_pb = { + me: { name: 'myself' } + children: [{ name: 'child0' }, { name: 'child1' }] + } + my_name, child0_name = flatten(total_pb, ['me.name', 'children[0].name']) + # You get (my_name='myself', child0_name='child0') + + children_names = flatten(total_pb, 'children.name') + # You get (children_names=['child0', 'child1']) + """ + def __select_field(val, field): + if hasattr(val, '__len__'): + # Flatten repeated field. + return [__select_field(elem, field) for elem in val] + if not field.endswith(']'): + # Simple field. + return val.__getattribute__(field) + # field contains index: "field[index]". + field, index = field.split('[') + val = val.__getattribute__(field) + index = int(index[:-1]) + return val[index] if index < len(val) else None + + def __select(val, selector): + for field in selector.split('.'): + val = __select_field(val, field) + if val is None: + return None + return val + + # Return the single result for single selector. + if type(selectors) is str: + return __select(pb_value, selectors) + # Return tuple result for multiple selectors. + return tuple((__select(pb_value, selector) for selector in selectors)) diff --git a/modules/tools/configurator/ModuleConf.py b/modules/tools/configurator/ModuleConf.py index df2b81c1f40..69ecd7247af 100644 --- a/modules/tools/configurator/ModuleConf.py +++ b/modules/tools/configurator/ModuleConf.py @@ -19,9 +19,11 @@ Message Handle """ import curses +import importlib from curses import panel + from google.protobuf import text_format -import importlib + APOLLO_ROOT = '../../../..' diff --git a/modules/tools/configurator/configurator.py b/modules/tools/configurator/configurator.py index 48ee29953c5..e5efbf560de 100644 --- a/modules/tools/configurator/configurator.py +++ b/modules/tools/configurator/configurator.py @@ -21,6 +21,7 @@ import curses import os import traceback + from ModuleConf import ModuleConf # Reduce ESC input delay diff --git a/modules/tools/configurator/meta.data b/modules/tools/configurator/meta.data index 25c8c59d3c8..0bbcd70f50b 100644 --- a/modules/tools/configurator/meta.data +++ b/modules/tools/configurator/meta.data @@ -1,3 +1,4 @@ MODULE proto name conf_file CANBUS modules.canbus.proto.canbus_conf_pb2 CanbusConf() /apollo/modules/canbus/conf/canbus_conf.pb.txt CONTROL modules.control.proto.control_conf_pb2 ControlConf() /apollo/modules/control/conf/lincoln.pb.txt +PLANNING modules.planning.proto.planning_config_pb2 PlanningConfig() /apollo/modules/planning/conf/planning_config.pb.txt diff --git a/modules/tools/control_info/control_info.py b/modules/tools/control_info/control_info.py index 4aa4b14f090..5626328d7aa 100644 --- a/modules/tools/control_info/control_info.py +++ b/modules/tools/control_info/control_info.py @@ -18,25 +18,27 @@ """ Control Planning Analyzer """ +import argparse +import math import sys -import rospy -import rosbag +import threading +import time + import matplotlib -from std_msgs.msg import String import matplotlib.pyplot as plt +import numpy +import rosbag +import rospy +import tf +import tkFileDialog from matplotlib import patches from matplotlib import lines -import numpy +from std_msgs.msg import String + from modules.localization.proto import localization_pb2 from modules.canbus.proto import chassis_pb2 from modules.planning.proto import planning_pb2 from modules.control.proto import control_cmd_pb2 -import time -import tf -import math -import argparse -import threading -import tkFileDialog class ControlInfo(object): diff --git a/modules/tools/control_info/run.sh b/modules/tools/control_info/run.sh index d635e86313e..8f3d018a064 100755 --- a/modules/tools/control_info/run.sh +++ b/modules/tools/control_info/run.sh @@ -20,6 +20,6 @@ set -x DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "${DIR}/../../../scripts/apollo_base.sh" -export PYTHONPATH="${DIR}/../../../bazel-genfiles:${PYTHONPATH}" eval "python ${DIR}/control_info.py $@" diff --git a/modules/tools/diagnostics/batch_include.py b/modules/tools/diagnostics/batch_include.py deleted file mode 100644 index d5fd7064b1b..00000000000 --- a/modules/tools/diagnostics/batch_include.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python - -############################################################################### -# Copyright 2017 The Apollo 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. -############################################################################### - -from modules.canbus.proto import chassis_detail_pb2 -from modules.canbus.proto import chassis_pb2 -from modules.common.monitor.proto import monitor_pb2 -from modules.common.configs.proto import config_extrinsics_pb2 -from modules.common.configs.proto import vehicle_config_pb2 -from modules.common.proto import geometry_pb2 -from modules.common.proto import header_pb2 -from modules.control.proto import control_cmd_pb2 -from modules.control.proto import pad_msg_pb2 -from modules.decision.proto import decision_pb2 -from modules.localization.proto import localization_pb2 -from modules.localization.proto import gps_pb2 -from modules.localization.proto import imu_pb2 -from modules.perception.proto import perception_obstacle_pb2 -from modules.perception.proto import traffic_light_detection_pb2 -from modules.planning.proto import planning_internal_pb2 -from modules.planning.proto import planning_pb2 -from modules.prediction.proto import prediction_obstacle_pb2 diff --git a/modules/tools/diagnostics/diagnostics.py b/modules/tools/diagnostics/diagnostics.py index 925b4e75975..03efb3e4c2e 100644 --- a/modules/tools/diagnostics/diagnostics.py +++ b/modules/tools/diagnostics/diagnostics.py @@ -21,13 +21,13 @@ import curses import os import random -import rospy import threading import traceback + +import rospy from std_msgs.msg import String -from Message import Message -import batch_include +from message import Message primitive = (int, str, bool, unicode) @@ -38,10 +38,9 @@ class Diagnostics(object): """ def __init__(self, stdscr): + META_DATA_FILE = os.path.join(os.path.dirname(__file__), 'meta.data') self.stdscr = stdscr # topic - self.META_DATA_FILE = os.path.join( - os.path.dirname(__file__), 'meta.data') self.messages = [] curses.init_pair(1, curses.COLOR_RED, curses.COLOR_BLACK) @@ -50,29 +49,17 @@ def __init__(self, stdscr): curses.curs_set(0) self.lock = threading.Lock() - try: - with open(self.META_DATA_FILE) as f: - for line in f: - module_name, proto_name, topic, period = line.strip().split( - ' ') - if module_name == 'MODULE' or proto_name == '#' or\ - topic == '#' or period == '#': - pass - else: - cur_message = Message(module_name, proto_name, topic, - period, self.stdscr, self.lock) - self.messages.append(cur_message) - except Exception as e: - print '{0} open failed! with error: {1}'.format( - self.META_DATA_FILE, e.message) - exit(1) - self.options = [] + with open(META_DATA_FILE) as f: + for line in f: + line = line.strip() + # Skip empty lines, header and comments. + if not line or line.startswith('#'): + continue + module_name, proto_name, topic, period = line.split() + self.messages.append(Message(module_name, proto_name, topic, + period, self.stdscr, self.lock)) self.selection = 0 - for i in range(len(self.messages)): - position = [0, i] - self.options.append(position) self.current_index = 0 - self.MENU = True def callback_timer(self, event): @@ -122,12 +109,7 @@ def main(stdscr): rospy.init_node('adu_diagnostics_' + str(random.random()), anonymous=True) diag = Diagnostics(stdscr) - sublist = [] - for msg in diag.messages: - sublist.append( - rospy.Subscriber( - msg.topic, eval(msg.proto_name), msg.callback, queue_size=10)) - + sublist = [msg.subscribe() for msg in diag.messages] maintimercallback = rospy.Timer(rospy.Duration(0.05), diag.callback_timer) while True: @@ -145,7 +127,7 @@ def main(stdscr): if c == curses.KEY_DOWN: if diag.MENU: diag.selection = min((diag.selection + 1), - len(diag.options) - 1) + len(diag.messages) - 1) else: diag.messages[diag.selection].key_down() elif c == curses.KEY_UP: @@ -193,5 +175,4 @@ def main(stdscr): try: curses.wrapper(main) except Exception as e: - tb = traceback.format_exc() - print tb + print traceback.format_exc() diff --git a/modules/tools/diagnostics/Message.py b/modules/tools/diagnostics/message.py similarity index 89% rename from modules/tools/diagnostics/Message.py rename to modules/tools/diagnostics/message.py index 0c9bba329df..1aa15eb95bd 100644 --- a/modules/tools/diagnostics/Message.py +++ b/modules/tools/diagnostics/message.py @@ -19,9 +19,26 @@ Message Handle """ import curses + import rospy -import batch_include +from modules.canbus.proto import chassis_detail_pb2 +from modules.canbus.proto import chassis_pb2 +from modules.common.configs.proto import vehicle_config_pb2 +from modules.common.monitor.proto import monitor_pb2 +from modules.common.proto import geometry_pb2 +from modules.common.proto import header_pb2 +from modules.control.proto import control_cmd_pb2 +from modules.control.proto import pad_msg_pb2 +from modules.localization.proto import gps_pb2 +from modules.localization.proto import imu_pb2 +from modules.localization.proto import localization_pb2 +from modules.perception.proto import perception_obstacle_pb2 +from modules.perception.proto import traffic_light_detection_pb2 +from modules.planning.proto import planning_internal_pb2 +from modules.planning.proto import planning_pb2 +from modules.prediction.proto import prediction_obstacle_pb2 +from modules.routing.proto import routing_pb2 Refreshrate = 16 @@ -35,8 +52,8 @@ def __init__(self, name, proto_name, topic, period, window, lock): self.name = name self.topic = topic self.lock = lock - self.proto_name = 'batch_include.' + proto_name[:-2] - self.proto = eval('batch_include.' + proto_name) + self.proto_name = proto_name[:-2] + self.proto = eval(proto_name) self.period = float(period) self.msg_received = False @@ -51,6 +68,11 @@ def __init__(self, name, proto_name, topic, period, window, lock): self.display_time = rospy.get_time() + def subscribe(self): + """Subscribe the topic in ROS.""" + return rospy.Subscriber( + self.topic, eval(self.proto_name), self.callback, queue_size=10) + def callback(self, data): """ callback function diff --git a/modules/tools/diagnostics/meta.data b/modules/tools/diagnostics/meta.data index e2b90e8d752..d107b9a9785 100644 --- a/modules/tools/diagnostics/meta.data +++ b/modules/tools/diagnostics/meta.data @@ -1,10 +1,14 @@ -MODULE class topic period -CHASSIS chassis_pb2.Chassis() /apollo/canbus/chassis 10 -CHASSIS_DETAIL chassis_detail_pb2.ChassisDetail() /apollo/canbus/chassis_detail 10 -CONTROL control_cmd_pb2.ControlCommand() /apollo/control 10 -LOCALIZATION localization_pb2.LocalizationEstimate() /apollo/localization/pose 10 -MONITOR monitor_pb2.MonitorMessage() /apollo/monitor 10 -PLANNING planning_pb2.ADCTrajectory() /apollo/planning 200 -Pad pad_msg_pb2.PadMessage() /apollo/control/pad 500 -Odometry gps_pb2.Gps() /apollo/sensor/gnss/odometry 10 -IMU imu_pb2.Imu() /apollo/sensor/gnss/corrected_imu 10 +# MODULE Class Topic Period +CHASSIS chassis_pb2.Chassis() /apollo/canbus/chassis 10 +CHASSIS_DETAIL chassis_detail_pb2.ChassisDetail() /apollo/canbus/chassis_detail 10 +CONTROL control_cmd_pb2.ControlCommand() /apollo/control 10 +LOCALIZATION localization_pb2.LocalizationEstimate() /apollo/localization/pose 10 +MONITOR monitor_pb2.MonitorMessage() /apollo/monitor 10 +PLANNING planning_pb2.ADCTrajectory() /apollo/planning 200 +PERCEPTION perception_obstacle_pb2.PerceptionObstacles() /apollo/perception/obstacles 200 +PREDICTION prediction_obstacle_pb2.PredictionObstacles() /apollo/prediction 200 +Pad pad_msg_pb2.PadMessage() /apollo/control/pad 500 +Odometry gps_pb2.Gps() /apollo/sensor/gnss/odometry 10 +IMU imu_pb2.Imu() /apollo/sensor/gnss/corrected_imu 10 +ROUTING_RES routing_pb2.RoutingResponse() /apollo/routing_response 1 +ROUTING_REQ routing_pb2.RoutingRequest() /apollo/routing_request 1 diff --git a/modules/tools/dump_rosbag/dumpbag.py b/modules/tools/dump_rosbag/dumpbag.py deleted file mode 100644 index 242fdc4a15e..00000000000 --- a/modules/tools/dump_rosbag/dumpbag.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python - -############################################################################### -# Copyright 2017 The Apollo 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 program can dump a rosbag into separate text files that contains the pb messages -""" - -import rosbag -import std_msgs -import argparse -import shutil -import os -import sys - -from std_msgs.msg import String - - -def write_to_file(file_path, topic_pb): - """write pb message to file""" - f = file(file_path, 'w') - f.write(str(topic_pb)) - f.close() - - -def dump_bag(in_bag, out_dir, filter_topic): - """out_bag = in_bag + routing_bag""" - bag = rosbag.Bag(in_bag, 'r') - seq = 0 - for topic, msg, t in bag.read_messages(): - if not filter_topic or (filter_topic and topic == filter_topic): - message_file = topic.replace("/", "_") - file_path = os.path.join(out_dir, - str(seq) + message_file + ".pb.txt") - write_to_file(file_path, msg) - seq += 1 - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - description= - "A tool to dump the protobuf messages in a ros bag into text files") - parser.add_argument( - "in_rosbag", action="store", type=str, help="the input ros bag") - parser.add_argument( - "out_dir", - action="store", - help="the output directory for the dumped file") - parser.add_argument( - "--topic", - action="store", - help="""the topic that you want to dump. If this option is not provided, - the tool will dump all the messages regardless of the message topic.""") - args = parser.parse_args() - - if os.path.exists(args.out_dir): - shutil.rmtree(args.out_dir) - os.makedirs(args.out_dir) - dump_bag(args.in_rosbag, args.out_dir, args.topic) diff --git a/modules/tools/extractor/extractor.py b/modules/tools/extractor/extractor.py new file mode 100644 index 00000000000..aa655b53788 --- /dev/null +++ b/modules/tools/extractor/extractor.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +import rospy +from std_msgs.msg import String +from modules.planning.proto.planning_pb2 import ADCTrajectory +from modules.routing.proto.routing_pb2 import RoutingResponse + + +class Extractor(object): + + def __init__(self): + self.routing = rospy.Publisher( + '/apollo/routing_response', RoutingResponse, queue_size=1) + + def callback_planning(self, data): + self.routing.publish(data.debug.planning_data.routing) + print "New Planning" + + +def main(): + """ + Main function + """ + extract = Extractor() + rospy.init_node('extract_routing', anonymous=True) + planning_sub = rospy.Subscriber( + '/apollo/planning', + ADCTrajectory, + extract.callback_planning, + queue_size=1) + rospy.spin() + + +if __name__ == '__main__': + main() diff --git a/modules/tools/mapshow/README.md b/modules/tools/mapshow/README.md new file mode 100644 index 00000000000..b3cebb07d6b --- /dev/null +++ b/modules/tools/mapshow/README.md @@ -0,0 +1,49 @@ +# Map Show + +## About + +Mapshow is a tool to display hdmap info on a map. + +## Setup + +If you run mapshow inside docker, there is no setup for running the tool. +Otherwise, you have to run following command to setup python path. + +```bash +# In apollo root dir: +source scripts/apollo_base.sh +``` + +## Usage + +> usage: python mapshow.py \[-h] -m MAP \[-sl] [-l LANEID [LANEID ...]] +> +> optional arguments: +> +> -h, --help show this help message and exit +> +> -m MAP, --map MAP Specify the map file in txt or binary format +> +> -sl, --showlaneids Show all lane ids in map +> +> -l LANEID \[LANEID ...], --laneid LANEID \[LANEID ...] Show specific lane id(s) in map + +## Examples + +Show basic map layout only + +```bash +python mapshow.py -m /path/to/map/file +``` + +Show basic map layout with all lane ids + +```bash +python mapshow.py -m /path/to/map/file -sl +``` + +show basic map layout with specific lane ids + +```bash +python mapshow.py -m /path/to/map/file -l 1474023788152_1_-1 +``` \ No newline at end of file diff --git a/modules/tools/mapshow/localization.py b/modules/tools/mapshow/localization.py new file mode 100644 index 00000000000..b2339292b8a --- /dev/null +++ b/modules/tools/mapshow/localization.py @@ -0,0 +1,130 @@ +import math +import threading + +import common.proto_utils as proto_utils +from modules.localization.proto.localization_pb2 import LocalizationEstimate + + +class Localization: + def __init__(self, localization_pb=None): + self.localization_pb = localization_pb + self.localization_data_lock = threading.Lock() + + def update_localization_pb(self, localization_pb): + self.localization_data_lock.acquire() + self.localization_pb = localization_pb + self.localization_data_lock.release() + + def load(self, localization_file_name): + self.localization_pb = proto_utils.get_pb_from_text_file( + localization_file_name, LocalizationEstimate()) + + def plot_vehicle(self, ax): + self.plot_vehicle_position(ax) + self.plot_vehicle_polygon(ax) + self.show_annotation(ax) + + def replot_vehicle(self, position_line, polygon_line): + self.localization_data_lock.acquire() + if self.localization_pb is None: + self.localization_data_lock.release() + return + position_line.set_visible(True) + polygon_line.set_visible(True) + self._replot_vehicle_position(position_line) + self._replot_vehicle_polygon(polygon_line) + self.localization_data_lock.release() + + def plot_vehicle_position(self, ax): + loc_x = [self.localization_pb.pose.position.x] + loc_y = [self.localization_pb.pose.position.y] + ax.plot(loc_x, loc_y, "bo") + + def _replot_vehicle_position(self, line): + loc_x = [self.localization_pb.pose.position.x] + loc_y = [self.localization_pb.pose.position.y] + line.set_xdata(loc_x) + line.set_ydata(loc_y) + + def _replot_vehicle_polygon(self, line): + position = [] + position.append(self.localization_pb.pose.position.x) + position.append(self.localization_pb.pose.position.y) + position.append(self.localization_pb.pose.position.z) + + polygon = self.get_vehicle_polygon(position, + self.localization_pb.pose.heading) + px = [] + py = [] + for point in polygon: + px.append(point[0]) + py.append(point[1]) + line.set_xdata(px) + line.set_ydata(py) + + def plot_vehicle_polygon(self, ax): + position = [] + position.append(self.localization_pb.pose.position.x) + position.append(self.localization_pb.pose.position.y) + position.append(self.localization_pb.pose.position.z) + + polygon = self.get_vehicle_polygon(position, + self.localization_pb.pose.heading) + self.plot_polygon(polygon, ax) + + def show_annotation(self, ax): + current_t = self.localization_pb.header.timestamp_sec + content = "t = " + str(current_t) + "\n" + content += "speed @y = " + str(self.localization_pb.pose.linear_velocity.y) + "\n" + content += "acc @y = " + str(self.localization_pb.pose.linear_acceleration_vrf.y) + lxy = [-80, 80] + ax.annotate( + content, + xy=(self.localization_pb.pose.position.x, + self.localization_pb.pose.position.y), + xytext=lxy, + textcoords='offset points', + ha='left', + va='top', + bbox=dict(boxstyle='round,pad=0.5', fc='yellow', alpha=0.3), + arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0'), + alpha=0.8) + + def plot_polygon(self, polygon, ax): + px = [] + py = [] + for point in polygon: + px.append(point[0]) + py.append(point[1]) + ax.plot(px, py, "g-") + + def get_vehicle_polygon(self, position, heading): + + front_edge_to_center = 3.89 + back_edge_to_center = 1.043 + left_edge_to_center = 1.055 + right_edge_to_center = 1.055 + + cos_h = math.cos(heading) + sin_h = math.sin(heading) + # (p3) -------- (p0) + # | o | + # (p2) -------- (p1) + p0_x, p0_y = front_edge_to_center, left_edge_to_center + p1_x, p1_y = front_edge_to_center, -right_edge_to_center + p2_x, p2_y = -back_edge_to_center, -left_edge_to_center + p3_x, p3_y = -back_edge_to_center, right_edge_to_center + + p0_x, p0_y = p0_x * cos_h - p0_y * sin_h, p0_x * sin_h + p0_y * cos_h + p1_x, p1_y = p1_x * cos_h - p1_y * sin_h, p1_x * sin_h + p1_y * cos_h + p2_x, p2_y = p2_x * cos_h - p2_y * sin_h, p2_x * sin_h + p2_y * cos_h + p3_x, p3_y = p3_x * cos_h - p3_y * sin_h, p3_x * sin_h + p3_y * cos_h + + [x, y, z] = position + polygon = [] + polygon.append([p0_x + x, p0_y + y, 0]) + polygon.append([p1_x + x, p1_y + y, 0]) + polygon.append([p2_x + x, p2_y + y, 0]) + polygon.append([p3_x + x, p3_y + y, 0]) + polygon.append([p0_x + x, p0_y + y, 0]) + return polygon \ No newline at end of file diff --git a/modules/tools/mapshow/map.py b/modules/tools/mapshow/map.py new file mode 100644 index 00000000000..34c69c8f9dc --- /dev/null +++ b/modules/tools/mapshow/map.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +import random + +import matplotlib.pyplot as plt +from matplotlib import cm as cmx +from matplotlib import colors as mcolors + +import common.proto_utils as proto_utils +from modules.map.proto import map_pb2 + +class Map: + def __init__(self): + self.map_pb = map_pb2.Map() + self.colors = [] + self.init_colors() + + def init_colors(self): + color_num = 6 + self.colors = [] + values = range(color_num) + jet = plt.get_cmap('brg') + color_norm = mcolors.Normalize(vmin=0, vmax=values[-1]) + scalar_map = cmx.ScalarMappable(norm=color_norm, cmap=jet) + for val in values: + color_val = scalar_map.to_rgba(val) + self.colors.append(color_val) + + def load(self, map_file_name): + res = proto_utils.get_pb_from_file(map_file_name, self.map_pb) + return res != None + + def draw_lanes(self, ax, is_show_lane_ids, laneids): + cnt = 1 + for lane in self.map_pb.lane: + color_val = self.colors[cnt % len(self.colors)] + if len(laneids) == 0: + self._draw_lane_boundary(lane, ax, color_val) + self._draw_lane_central(lane, ax, color_val) + else: + if lane.id.id in laneids: + self._draw_lane_boundary(lane, ax, color_val) + self._draw_lane_central(lane, ax, color_val) + if is_show_lane_ids: + self._draw_lane_id(lane, ax, color_val) + elif lane.id.id in laneids: + self._draw_lane_id(lane, ax, color_val) + cnt += 1 + + def _draw_lane_id(self, lane, ax, color_val): + """draw lane id""" + labelxys = [] + labelxys.append((40, -40)) + labelxys.append((-40, -40)) + labelxys.append((40, 40)) + labelxys.append((-40, 40)) + has = ['right', 'left', 'right', 'left'] + vas = ['bottom', 'bottom', 'top', 'top'] + + idx = random.randint(0, 3) + lxy = labelxys[idx] + x, y = self._find_lane_central_point(lane) + plt.annotate( + lane.id.id, + xy=(x, y), xytext=lxy, + textcoords='offset points', ha=has[idx], va=vas[idx], + bbox= dict(boxstyle = 'round,pad=0.5', fc=color_val, alpha=0.5), + arrowprops = dict(arrowstyle = '-|>', connectionstyle = 'arc3,rad=-0.2', fc=color_val, ec=color_val, alpha=0.5)) + + @staticmethod + def _find_lane_central_point(lane): + segment_idx = len(lane.left_boundary.curve.segment) / 2 + median_segment = lane.left_boundary.curve.segment[segment_idx] + left_point_idx = len(median_segment.line_segment.point) / 2 + left_median_point = median_segment.line_segment.point[left_point_idx] + + segment_idx = len(lane.right_boundary.curve.segment) / 2 + median_segment = lane.right_boundary.curve.segment[segment_idx] + right_point_idx = len(median_segment.line_segment.point) / 2 + right_median_point = median_segment.line_segment.point[right_point_idx] + + x = (left_median_point.x + right_median_point.x) / 2 + y = (left_median_point.y + right_median_point.y) / 2 + + return x, y + + @staticmethod + def _get_median_point(points): + """get_median_point""" + if len(points) % 2 == 1: + point = points[len(points) / 2] + return point.x, point.y + else: + point1 = points[len(points) / 2 - 1] + point2 = points[len(points) / 2] + return (point1.x + point2.x) / 2.0, (point1.y + point2.y) / 2.0 + + @staticmethod + def _draw_lane_boundary(lane, ax, color_val): + """draw boundary""" + for curve in lane.left_boundary.curve.segment: + if curve.HasField('line_segment'): + px = [] + py = [] + for p in curve.line_segment.point: + px.append(float(p.x)) + py.append(float(p.y)) + ax.plot(px, py, ls='-', c=color_val, alpha = 0.5) + for curve in lane.right_boundary.curve.segment: + if curve.HasField('line_segment'): + px = [] + py = [] + for p in curve.line_segment.point: + px.append(float(p.x)) + py.append(float(p.y)) + ax.plot(px, py, ls='-', c=color_val, alpha = 0.5) + + @staticmethod + def _draw_lane_central(lane, ax, color_val): + """draw boundary""" + for curve in lane.central_curve.segment: + if curve.HasField('line_segment'): + px = [] + py = [] + for p in curve.line_segment.point: + px.append(float(p.x)) + py.append(float(p.y)) + ax.plot(px, py, ls=':', c=color_val, alpha = 0.5) diff --git a/modules/tools/mapshow/mapshow.py b/modules/tools/mapshow/mapshow.py new file mode 100644 index 00000000000..a1c58f22c2e --- /dev/null +++ b/modules/tools/mapshow/mapshow.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +import argparse + +import matplotlib.pyplot as plt + +from map import Map +from localization import Localization + +if __name__ == "__main__": + + parser = argparse.ArgumentParser( + description="Mapshow is a tool to display hdmap info on a map.", + prog="mapshow.py") + + parser.add_argument( + "-m", "--map", action="store", type=str, required=True, + help="Specify the map file in txt or binary format") + parser.add_argument( + "-sl", "--showlaneids", action="store_const", const=True, + help="Show all lane ids in map") + parser.add_argument( + "-l", "--laneid", nargs='+', + help="Show specific lane id(s) in map") + parser.add_argument( + "--loc", action="store", type=str, required=False, + help="Specify the localization pb file in txt format") + + args = parser.parse_args() + + map = Map() + map.load(args.map) + lane_ids = args.laneid + if lane_ids is None: + lane_ids = [] + map.draw_lanes(plt, args.showlaneids, lane_ids) + + if args.loc is not None: + localization = Localization() + localization.load(args.loc) + localization.plot_vehicle(plt) + + plt.axis('equal') + plt.show() diff --git a/modules/tools/mapshow/planning.py b/modules/tools/mapshow/planning.py new file mode 100644 index 00000000000..9410373c7ff --- /dev/null +++ b/modules/tools/mapshow/planning.py @@ -0,0 +1,463 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +import threading +import numpy as np +from modules.planning.proto import planning_internal_pb2 + +class Planning: + def __init__(self, planning_pb=None): + self.data_lock = threading.Lock() + self.init_point_lock = threading.Lock() + self.planning_pb = planning_pb + self.path_data_lock = threading.Lock() + self.path_data_x = {} + self.path_data_y = {} + self.speed_data_lock = threading.Lock() + self.speed_data_time = {} + self.speed_data_val = {} + + self.traj_data_lock = threading.Lock() + self.traj_speed_history_len = 30 + self.traj_speed_t_history = [] + self.traj_speed_v_history = [] + self.traj_acc_history_len = 30 + self.traj_acc_t_history = [] + self.traj_acc_a_history = [] + + self.st_data_lock = threading.Lock() + self.st_curve_s = {} + self.st_curve_t = {} + self.st_curve_v = {} + self.st_data_boundary_s = {} + self.st_data_boundary_t = {} + self.st_data_boundary_type = {} + self.st_speed_limit_s = {} + self.st_speed_limit_v = {} + + self.st_speed_constraint_s = {} + self.st_speed_constraint_lower = {} + self.st_speed_constraint_upper = {} + + self.sl_data_lock = threading.Lock() + self.sl_sampled_s = [] + self.sl_static_obstacle_lower_boundary = [] + self.sl_static_obstacle_upper_boundary = [] + self.sl_dynamic_obstacle_lower_boundary = [] + self.sl_dynamic_obstacle_upper_boundary = [] + self.sl_map_lower_boundary = [] + self.sl_map_upper_boundary = [] + self.sl_path_s = [] + self.sl_path_l = [] + self.sl_aggregated_boundary_low_l = [] + self.sl_aggregated_boundary_high_l = [] + self.sl_aggregated_boundary_s = [] + + self.kernel_cruise_t = {} + self.kernel_cruise_s = {} + self.kernel_follow_t = {} + self.kernel_follow_s = {} + + self.init_point_x = [] + self.init_point_y = [] + + def update_planning_pb(self, planning_pb): + self.planning_pb = planning_pb + + def compute_init_point(self): + self.init_point_lock.acquire() + init_point = self.planning_pb.debug.planning_data.init_point + self.init_point_x = [init_point.path_point.x] + self.init_point_y = [init_point.path_point.y] + self.init_point_lock.release() + + def compute_sl_data(self): + sl_sampled_s = [] + sl_map_lower_boundary = [] + sl_map_upper_boundary = [] + sl_static_obstacle_lower_boundary = [] + sl_static_obstacle_upper_boundary = [] + sl_dynamic_obstacle_lower_boundary = [] + sl_dynamic_obstacle_upper_boundary = [] + sl_path_s = [] + sl_path_l = [] + sl_aggregated_boundary_low_l = [] + sl_aggregated_boundary_high_l = [] + sl_aggregated_boundary_s = [] + + for sl_frame in self.planning_pb.debug.planning_data.sl_frame: + for s in sl_frame.sampled_s: + sl_sampled_s.append(s) + for l in sl_frame.map_lower_bound: + if (l > 10 or l < -10): + sl_map_lower_boundary.append(100 * l / abs(l)) + else: + sl_map_lower_boundary.append(l) + for l in sl_frame.map_upper_bound: + if (l > 10 or l < -10): + sl_map_upper_boundary.append(100 * l / abs(l)) + else: + sl_map_upper_boundary.append(l) + for l in sl_frame.static_obstacle_lower_bound: + sl_static_obstacle_lower_boundary.append(l) + for l in sl_frame.static_obstacle_upper_bound: + sl_static_obstacle_upper_boundary.append(l) + for l in sl_frame.dynamic_obstacle_lower_bound: + sl_dynamic_obstacle_lower_boundary.append(l) + for l in sl_frame.dynamic_obstacle_upper_bound: + sl_dynamic_obstacle_upper_boundary.append(l) + for slpoint in sl_frame.sl_path: + sl_path_s.append(slpoint.s) + sl_path_l.append(slpoint.l) + for l in sl_frame.aggregated_boundary_low: + sl_aggregated_boundary_low_l.append(l) + for l in sl_frame.aggregated_boundary_high: + sl_aggregated_boundary_high_l.append(l) + for s in sl_frame.aggregated_boundary_s: + sl_aggregated_boundary_s.append(s) + + self.sl_data_lock.acquire() + self.sl_sampled_s = sl_sampled_s + self.sl_map_upper_boundary = sl_map_upper_boundary + self.sl_map_lower_boundary = sl_map_lower_boundary + self.sl_static_obstacle_lower_boundary = sl_static_obstacle_lower_boundary + self.sl_static_obstacle_upper_boundary = sl_static_obstacle_upper_boundary + self.sl_dynamic_obstacle_lower_boundary = sl_dynamic_obstacle_lower_boundary + self.sl_dynamic_obstacle_upper_boundary = sl_dynamic_obstacle_upper_boundary + self.sl_path_s = sl_path_s + self.sl_path_l = sl_path_l + self.sl_aggregated_boundary_low_l = sl_aggregated_boundary_low_l + self.sl_aggregated_boundary_high_l = sl_aggregated_boundary_high_l + self.sl_aggregated_boundary_s = sl_aggregated_boundary_s + self.sl_data_lock.release() + + def compute_st_data(self): + st_data_boundary_s = {} + st_data_boundary_t = {} + st_curve_s = {} + st_curve_t = {} + st_curve_v = {} + st_data_boundary_type = {} + st_speed_limit_s = {} + st_speed_limit_v = {} + st_speed_constraint_s = {} + st_speed_constraint_lower = {} + st_speed_constraint_upper = {} + kernel_cruise_t = {} + kernel_cruise_s = {} + kernel_follow_t = {} + kernel_follow_s = {} + + for st_graph in self.planning_pb.debug.planning_data.st_graph: + + st_data_boundary_s[st_graph.name] = {} + st_data_boundary_t[st_graph.name] = {} + st_data_boundary_type[st_graph.name] = {} + for boundary in st_graph.boundary: + st_data_boundary_type[st_graph.name][boundary.name] \ + = planning_internal_pb2.StGraphBoundaryDebug.StBoundaryType.Name(boundary.type) + st_data_boundary_s[st_graph.name][boundary.name] = [] + st_data_boundary_t[st_graph.name][boundary.name] = [] + for point in boundary.point: + st_data_boundary_s[st_graph.name][boundary.name]\ + .append(point.s) + st_data_boundary_t[st_graph.name][boundary.name]\ + .append(point.t) + st_data_boundary_s[st_graph.name][boundary.name].append( + st_data_boundary_s[st_graph.name][boundary.name][0]) + st_data_boundary_t[st_graph.name][boundary.name].append( + st_data_boundary_t[st_graph.name][boundary.name][0]) + + + st_curve_s[st_graph.name] = [] + st_curve_t[st_graph.name] = [] + st_curve_v[st_graph.name] = [] + for point in st_graph.speed_profile: + st_curve_s[st_graph.name].append(point.s) + st_curve_t[st_graph.name].append(point.t) + st_curve_v[st_graph.name].append(point.v) + + st_speed_limit_s[st_graph.name] = [] + st_speed_limit_v[st_graph.name] = [] + for point in st_graph.speed_limit: + st_speed_limit_s[st_graph.name].append(point.s) + st_speed_limit_v[st_graph.name].append(point.v) + + st_speed_constraint_s[st_graph.name] = [] + st_speed_constraint_lower[st_graph.name] = [] + st_speed_constraint_upper[st_graph.name] = [] + for speed_constraint in st_graph.speed_constraint: + interp_s = np.interp(speed_constraint.t, st_curve_t[st_graph.name], st_curve_s[st_graph.name]) + st_speed_constraint_s[st_graph.name].append(interp_s) + st_speed_constraint_lower[st_graph.name].append(speed_constraint.lower_bound) + st_speed_constraint_upper[st_graph.name].append(speed_constraint.upper_bound) + + kernel_cruise_t[st_graph.name] = [] + kernel_cruise_s[st_graph.name] = [] + kernel_cruise = st_graph.kernel_cruise_ref + kernel_cruise_t[st_graph.name].append(kernel_cruise.t) + kernel_cruise_s[st_graph.name].append(kernel_cruise.cruise_line_s) + + kernel_follow_t[st_graph.name] = [] + kernel_follow_s[st_graph.name] = [] + kernel_follow = st_graph.kernel_follow_ref + kernel_follow_t[st_graph.name].append(kernel_follow.t) + kernel_follow_s[st_graph.name].append(kernel_follow.follow_line_s) + + self.st_data_lock.acquire() + + self.st_data_boundary_s = st_data_boundary_s + self.st_data_boundary_t = st_data_boundary_t + self.st_curve_s = st_curve_s + self.st_curve_t = st_curve_t + self.st_curve_v = st_curve_v + self.st_speed_limit_v = st_speed_limit_v + self.st_speed_limit_s = st_speed_limit_s + self.st_data_boundary_type = st_data_boundary_type + + self.st_speed_constraint_s = st_speed_constraint_s + self.st_speed_constraint_lower = st_speed_constraint_lower + self.st_speed_constraint_upper = st_speed_constraint_upper + + self.kernel_cruise_t = kernel_cruise_t + self.kernel_cruise_s = kernel_cruise_s + self.kernel_follow_t = kernel_follow_t + self.kernel_follow_s = kernel_follow_s + + self.st_data_lock.release() + + def compute_traj_data(self): + traj_speed_t = [] + traj_speed_v = [] + traj_acc_t = [] + traj_acc_a = [] + base_time = self.planning_pb.header.timestamp_sec + for trajectory_point in self.planning_pb.trajectory_point: + traj_acc_t.append(base_time + trajectory_point.relative_time) + traj_acc_a.append(trajectory_point.a) + + for trajectory_point in self.planning_pb.trajectory_point: + traj_speed_t.append(base_time + trajectory_point.relative_time) + traj_speed_v.append(trajectory_point.v) + + self.traj_data_lock.acquire() + + self.traj_speed_t_history.append(traj_speed_t) + self.traj_speed_v_history.append(traj_speed_v) + if len(self.traj_speed_t_history) > self.traj_speed_history_len: + self.traj_speed_t_history = \ + self.traj_speed_t_history[len(self.traj_speed_t_history) + - self.traj_speed_history_len:] + self.traj_speed_v_history = \ + self.traj_speed_v_history[len(self.traj_speed_v_history) + - self.traj_speed_history_len:] + + self.traj_acc_t_history.append(traj_acc_t) + self.traj_acc_a_history.append(traj_acc_a) + if len(self.traj_acc_t_history) > self.traj_acc_history_len: + self.traj_acc_t_history = \ + self.traj_acc_t_history[len(self.traj_acc_t_history) + - self.traj_acc_history_len:] + self.traj_acc_a_history = \ + self.traj_acc_a_history[len(self.traj_acc_a_history) + - self.traj_acc_history_len:] + + self.traj_data_lock.release() + + def replot_sl_data(self, + sl_static_obstacle_lower_boundary, + sl_static_obstacle_upper_boundary, + sl_dynamic_obstacle_lower_boundary, + sl_dynamic_obstacle_upper_boundary, + sl_map_lower_boundary, + sl_map_upper_boundary, sl_path, + sl_aggregated_boundary_low_line, + sl_aggregated_boundary_high_line): + self.sl_data_lock.acquire() + sl_static_obstacle_lower_boundary.set_visible(True) + sl_static_obstacle_upper_boundary.set_visible(True) + sl_dynamic_obstacle_lower_boundary.set_visible(True) + sl_dynamic_obstacle_upper_boundary.set_visible(True) + sl_map_lower_boundary.set_visible(True) + sl_map_upper_boundary.set_visible(True) + sl_path.set_visible(True) + sl_aggregated_boundary_low_line.set_visible(True) + sl_aggregated_boundary_high_line.set_visible(True) + + new_sampled_s = [] + for s in self.sl_sampled_s: + new_sampled_s.append(s) + new_sampled_s.append(s) + new_map_lower = [] + for l in self.sl_map_lower_boundary: + new_map_lower.append(l) + new_map_lower.append(-11) + new_map_upper = [] + for l in self.sl_map_upper_boundary: + new_map_upper.append(l) + new_map_upper.append(11) + sl_map_lower_boundary.set_xdata(new_sampled_s) + sl_map_lower_boundary.set_ydata(new_map_lower) + sl_map_upper_boundary.set_xdata(new_sampled_s) + sl_map_upper_boundary.set_ydata(new_map_upper) + + sl_dynamic_obstacle_lower_boundary.set_xdata(self.sl_sampled_s) + sl_dynamic_obstacle_lower_boundary.set_ydata(self.sl_dynamic_obstacle_lower_boundary) + sl_dynamic_obstacle_upper_boundary.set_xdata(self.sl_sampled_s) + sl_dynamic_obstacle_upper_boundary.set_ydata(self.sl_dynamic_obstacle_upper_boundary) + + new_static_lower = [] + for l in self.sl_static_obstacle_lower_boundary: + new_static_lower.append(l) + new_static_lower.append(-11) + new_static_upper = [] + for l in self.sl_static_obstacle_upper_boundary: + new_static_upper.append(l) + new_static_upper.append(11) + sl_static_obstacle_lower_boundary.set_xdata(new_sampled_s) + sl_static_obstacle_lower_boundary.set_ydata(new_static_lower) + sl_static_obstacle_upper_boundary.set_xdata(new_sampled_s) + sl_static_obstacle_upper_boundary.set_ydata(new_static_upper) + sl_path.set_xdata(self.sl_path_s) + sl_path.set_ydata(self.sl_path_l) + sl_aggregated_boundary_low_line.set_xdata(self.sl_aggregated_boundary_s) + sl_aggregated_boundary_low_line.set_ydata(self.sl_aggregated_boundary_low_l) + sl_aggregated_boundary_high_line.set_xdata(self.sl_aggregated_boundary_s) + sl_aggregated_boundary_high_line.set_ydata(self.sl_aggregated_boundary_high_l) + self.sl_data_lock.release() + + def replot_st_data(self, boundaries_pool, st_line, + obstacle_annotation_pool, st_graph_name): + if st_graph_name not in self.st_data_boundary_s: + return + if st_graph_name not in self.st_curve_s: + return + + cnt = 0 + self.st_data_lock.acquire() + + st_graph_boudnary_s = self.st_data_boundary_s[st_graph_name] + st_graph_boudnary_t = self.st_data_boundary_t[st_graph_name] + st_boundary_type = self.st_data_boundary_type[st_graph_name] + for boundary_name in st_graph_boudnary_s.keys(): + if cnt >= len(boundaries_pool): + print "WARNING: number of path lines is more than " \ + + len(boundaries_pool) + continue + boundary = boundaries_pool[cnt] + boundary.set_visible(True) + + boundary.set_xdata(st_graph_boudnary_t[boundary_name]) + boundary.set_ydata(st_graph_boudnary_s[boundary_name]) + center_t = 0 + center_s = 0 + for i in range(len(st_graph_boudnary_t[boundary_name])-1): + center_s += st_graph_boudnary_s[boundary_name][i] + center_t += st_graph_boudnary_t[boundary_name][i] + center_s /= float(len(st_graph_boudnary_s[boundary_name])-1) + center_t /= float(len(st_graph_boudnary_t[boundary_name])-1) + + annotation = obstacle_annotation_pool[cnt] + annotation.set_visible(True) + annotation.set_text(boundary_name+ "_" + + st_boundary_type[boundary_name] + .replace("ST_BOUNDARY_TYPE_","")) + annotation.set_x(center_t) + annotation.set_y(center_s) + + cnt += 1 + + st_line.set_visible(True) + st_line.set_xdata(self.st_curve_t[st_graph_name]) + st_line.set_ydata(self.st_curve_s[st_graph_name]) + st_line.set_label(st_graph_name[0:5]) + + self.st_data_lock.release() + + def compute_path_data(self): + path_data_x = {} + path_data_y = {} + for path_debug in self.planning_pb.debug.planning_data.path: + name = path_debug.name + path_data_x[name] = [] + path_data_y[name] = [] + for path_point in path_debug.path_point: + path_data_x[name].append(path_point.x) + path_data_y[name].append(path_point.y) + self.path_data_lock.acquire() + self.path_data_x = path_data_x + self.path_data_y = path_data_y + self.path_data_lock.release() + + def replot_path_data(self, path_lines): + cnt = 0 + self.path_data_lock.acquire() + for name in self.path_data_x.keys(): + if cnt >= len(path_lines): + print "WARNING: number of path lines is more than " \ + + len(path_lines) + continue + if len(self.path_data_x[name]) <= 1: + continue + line = path_lines[cnt] + line.set_visible(True) + line.set_xdata(self.path_data_x[name]) + line.set_ydata(self.path_data_y[name]) + line.set_label(name[0:5]) + cnt += 1 + self.path_data_lock.release() + + def compute_speed_data(self): + speed_data_time = {} + speed_data_val = {} + + for speed_plan in self.planning_pb.debug.planning_data.speed_plan: + name = speed_plan.name + speed_data_time[name] = [] + speed_data_val[name] = [] + for speed_point in speed_plan.speed_point: + speed_data_time[name].append(speed_point.t) + speed_data_val[name].append(speed_point.v) + name = "final_speed_output" + speed_data_time[name] = [] + speed_data_val[name] = [] + for traj_point in self.planning_pb.trajectory_point: + speed_data_time[name].append(traj_point.relative_time) + speed_data_val[name].append(traj_point.v) + self.speed_data_lock.acquire() + self.speed_data_time = speed_data_time + self.speed_data_val = speed_data_val + self.speed_data_lock.release() + + def replot_speed_data(self, speed_lines): + cnt = 0 + self.speed_data_lock.acquire() + for name in self.speed_data_time.keys(): + if cnt >= len(speed_lines): + print "WARNING: number of speed lines is more than " \ + + len(speed_lines) + continue + if len(self.speed_data_time[name]) <= 1: + continue + line = speed_lines[cnt] + line.set_visible(True) + line.set_xdata(self.speed_data_time[name]) + line.set_ydata(self.speed_data_val[name]) + line.set_label(name[0:5]) + cnt += 1 + self.speed_data_lock.release() \ No newline at end of file diff --git a/modules/tools/mapshow/plot_planning.py b/modules/tools/mapshow/plot_planning.py new file mode 100644 index 00000000000..31f280be430 --- /dev/null +++ b/modules/tools/mapshow/plot_planning.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +import rospy +import argparse +import matplotlib.pyplot as plt +import matplotlib.animation as animation + +from modules.planning.proto import planning_pb2 +from subplot_st_main import StMainSubplot +from subplot_path import PathSubplot +from subplot_sl_main import SlMainSubplot +from subplot_st_speed import StSpeedSubplot +from subplot_speed import SpeedSubplot +from localization import Localization +from planning import Planning + +planning = Planning() +localization = Localization() + + +def update(frame_number): + #st_main_subplot.show(planning) + #st_speed_subplot.show(planning) + map_path_subplot.show(planning, localization) + dp_st_main_subplot.show(planning) + qp_st_main_subplot.show(planning) + speed_subplot.show(planning) + sl_main_subplot.show(planning) + st_speed_subplot.show(planning) + + +def planning_callback(planning_pb): + planning.update_planning_pb(planning_pb) + localization.update_localization_pb( + planning_pb.debug.planning_data.adc_position) + + planning.compute_st_data() + planning.compute_sl_data() + planning.compute_path_data() + planning.compute_speed_data() + planning.compute_init_point() + + +def add_listener(): + rospy.init_node('st_plot', anonymous=True) + rospy.Subscriber('/apollo/planning', planning_pb2.ADCTrajectory, + planning_callback) + + +def press_key(event): + if event.key == '+' or event.key == '=': + map_path_subplot.zoom_in() + if event.key == '-' or event.key == '_': + map_path_subplot.zoom_out() + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description="plot_planning is a tool to display " + "planning trajs on a map.", + prog="plot_planning_old.py") + parser.add_argument( + "-m", + "--map", + action="store", + type=str, + required=False, + default=None, + help="Specify the map file in txt or binary format") + args = parser.parse_args() + + add_listener() + fig = plt.figure() + fig.canvas.mpl_connect('key_press_event', press_key) + + ax = plt.subplot2grid((3, 3), (0, 0), rowspan=2, colspan=2) + map_path_subplot = PathSubplot(ax, args.map) + + ax1 = plt.subplot2grid((3, 3), (0, 2)) + speed_subplot = SpeedSubplot(ax1) + + ax2 = plt.subplot2grid((3, 3), (2, 2)) + dp_st_main_subplot = StMainSubplot(ax2, 'QpSplineStSpeedOptimizer') + + ax3 = plt.subplot2grid((3, 3), (1, 2)) + qp_st_main_subplot = StMainSubplot(ax3, 'DpStSpeedOptimizer') + + ax4 = plt.subplot2grid((3, 3), (2, 0), colspan=1) + sl_main_subplot = SlMainSubplot(ax4) + + ax5 = plt.subplot2grid((3, 3), (2, 1), colspan=1) + st_speed_subplot = StSpeedSubplot(ax5, 'QpSplineStSpeedOptimizer') + + ani = animation.FuncAnimation(fig, update, interval=100) + + ax.axis('equal') + plt.show() diff --git a/modules/tools/mapshow/plot_smoothness.py b/modules/tools/mapshow/plot_smoothness.py new file mode 100644 index 00000000000..8c388b6b688 --- /dev/null +++ b/modules/tools/mapshow/plot_smoothness.py @@ -0,0 +1,40 @@ +import rospy +from modules.planning.proto import planning_pb2 +import matplotlib.pyplot as plt +from planning import Planning +import matplotlib.animation as animation +from subplot_traj_speed import TrajSpeedSubplot +from subplot_traj_acc import TrajAccSubplot + +planning = Planning() + +def update(frame_number): + traj_speed_subplot.show(planning) + traj_acc_subplot.show(planning) + +def planning_callback(planning_pb): + planning.update_planning_pb(planning_pb) + planning.compute_traj_data() + +def add_listener(): + rospy.init_node('st_plot', anonymous=True) + rospy.Subscriber('/apollo/planning', planning_pb2.ADCTrajectory, + planning_callback) + +def press_key(): + pass + +if __name__ == '__main__': + add_listener() + fig = plt.figure(figsize=(14, 6)) + fig.canvas.mpl_connect('key_press_event', press_key) + + ax = plt.subplot2grid((1, 2), (0, 0)) + traj_speed_subplot = TrajSpeedSubplot(ax) + + ax2 = plt.subplot2grid((1, 2), (0, 1)) + traj_acc_subplot = TrajAccSubplot(ax2) + + ani = animation.FuncAnimation(fig, update, interval=100) + + plt.show() diff --git a/modules/tools/mapshow/plot_st.py b/modules/tools/mapshow/plot_st.py new file mode 100644 index 00000000000..bc0a9af7999 --- /dev/null +++ b/modules/tools/mapshow/plot_st.py @@ -0,0 +1,40 @@ +import rospy +from modules.planning.proto import planning_pb2 +import matplotlib.pyplot as plt +from planning import Planning +import matplotlib.animation as animation +from subplot_st_main import StMainSubplot +from subplot_st_speed import StSpeedSubplot + +planning = Planning() + +def update(frame_number): + st_main_subplot.show(planning) + st_speed_subplot.show(planning) + +def planning_callback(planning_pb): + planning.update_planning_pb(planning_pb) + planning.compute_st_data() + +def add_listener(): + rospy.init_node('st_plot', anonymous=True) + rospy.Subscriber('/apollo/planning', planning_pb2.ADCTrajectory, + planning_callback) + +def press_key(): + pass + +if __name__ == '__main__': + add_listener() + fig = plt.figure(figsize=(14, 6)) + fig.canvas.mpl_connect('key_press_event', press_key) + + ax = plt.subplot2grid((1, 2), (0, 0)) + st_main_subplot = StMainSubplot(ax, 'QpSplineStSpeedOptimizer') + + ax2 = plt.subplot2grid((1, 2), (0, 1)) + st_speed_subplot = StSpeedSubplot(ax2, "QpSplineStSpeedOptimizer") + + ani = animation.FuncAnimation(fig, update, interval=100) + + plt.show() diff --git a/modules/tools/mapshow/subplot_path.py b/modules/tools/mapshow/subplot_path.py new file mode 100644 index 00000000000..729511139be --- /dev/null +++ b/modules/tools/mapshow/subplot_path.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +from map import Map + +class PathSubplot: + def __init__(self, ax, map_file=None): + self.ax = ax + self.map_width = 20 + if map_file is not None: + map = Map() + map.load(map_file) + map.draw_lanes(ax, False, []) + self.path_lines = [] + self.path_lines_size = 3 + colors = ['b', 'g', 'r', 'k'] + for i in range(self.path_lines_size): + line, = ax.plot( + [0], [0], + colors[i % len(colors)], + lw=3 + i * 3, + alpha=0.4) + self.path_lines.append(line) + + self.vehicle_position_line, = ax.plot([0], [0], 'go', alpha=0.3) + self.vehicle_polygon_line, = ax.plot([0], [0], 'g-') + self.init_point_line, = ax.plot([0], [0], 'ro', alpha=0.3) + self.set_visible(False) + ax.set_title("PLANNING PATH") + + def set_visible(self, visible): + for line in self.path_lines: + line.set_visible(visible) + self.vehicle_position_line.set_visible(False) + self.vehicle_polygon_line.set_visible(False) + self.init_point_line.set_visible(False) + + def show(self, planning, localization): + cnt = 0 + planning.path_data_lock.acquire() + for name in planning.path_data_x.keys(): + if cnt >= self.path_lines_size: + print "WARNING: number of path lines is more than " \ + + str(self.path_lines_size) + continue + if len(planning.path_data_x[name]) <= 1: + continue + path_line = self.path_lines[cnt] + path_line.set_visible(True) + path_line.set_xdata(planning.path_data_x[name]) + path_line.set_ydata(planning.path_data_y[name]) + path_line.set_label(name[0:5]) + cnt += 1 + planning.path_data_lock.release() + + planning.init_point_lock.acquire() + self.init_point_line.set_xdata(planning.init_point_x) + self.init_point_line.set_ydata(planning.init_point_y) + self.init_point_line.set_visible(True) + planning.init_point_lock.release() + + localization.localization_data_lock.acquire() + self.draw_vehicle(localization) + try: + self.ax.set_xlim(localization.localization_pb.pose.position.x - self.map_width, + localization.localization_pb.pose.position.x + self.map_width) + self.ax.set_ylim(localization.localization_pb.pose.position.y - self.map_width, + localization.localization_pb.pose.position.y + self.map_width) + except: + pass + localization.localization_data_lock.release() + + self.ax.autoscale_view() + self.ax.relim() + self.ax.legend(loc="upper left", borderaxespad=0., ncol=5) + #self.ax.axis('equal') + + def zoom_in(self): + if self.map_width > 20: + self.map_width -= 20 + + def zoom_out(self): + if self.map_width < 200: + self.map_width += 20 + + def draw_vehicle(self, localization): + if localization.localization_pb is None: + return + self.vehicle_position_line.set_visible(True) + self.vehicle_polygon_line.set_visible(True) + + loc_x = [localization.localization_pb.pose.position.x] + loc_y = [localization.localization_pb.pose.position.y] + self.vehicle_position_line.set_xdata(loc_x) + self.vehicle_position_line.set_ydata(loc_y) + + position = [] + position.append(localization.localization_pb.pose.position.x) + position.append(localization.localization_pb.pose.position.y) + position.append(localization.localization_pb.pose.position.z) + + polygon = localization.get_vehicle_polygon( + position, + localization.localization_pb.pose.heading) + px = [] + py = [] + for point in polygon: + px.append(point[0]) + py.append(point[1]) + self.vehicle_polygon_line.set_xdata(px) + self.vehicle_polygon_line.set_ydata(py) \ No newline at end of file diff --git a/modules/tools/mapshow/subplot_sl_main.py b/modules/tools/mapshow/subplot_sl_main.py new file mode 100644 index 00000000000..44550bedff1 --- /dev/null +++ b/modules/tools/mapshow/subplot_sl_main.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +class SlMainSubplot: + def __init__(self, ax): + self.ax = ax + self.sl_static_obstacle_lower_boundary_line, = \ + ax.plot([0], [0], "r-", lw=0.3, alpha=0.8) + self.sl_static_obstacle_upper_boundary_line, = \ + ax.plot([0], [0], "r-", lw=0.3, alpha=0.8) + self.sl_dynamic_obstacle_lower_boundary_line, = \ + ax.plot([0], [0], "y-", lw=0.3, alpha=0.8) + self.sl_dynamic_obstacle_upper_boundary_line, = \ + ax.plot([0], [0], "y-", lw=0.3, alpha=0.8) + self.sl_map_lower_boundary_line, = \ + ax.plot([0], [0], "b-", lw=0.3, ms=2, alpha=0.8) + self.sl_map_upper_boundary_line, = \ + ax.plot([0], [0], "b-", lw=0.3, ms=4, alpha=0.8) + self.sl_path_line, = ax.plot([0], [0], "k--") + self.sl_aggregated_boundary_low_line, = \ + ax.plot([0], [0], "k-", lw=1, ms=2) + self.sl_aggregated_boundary_high_line, = \ + ax.plot([0], [0], "k-", lw=1, ms=2) + + ax.set_xlim([-10, 100]) + ax.set_ylim([-2.5, 2.5]) + ax.set_xlabel("s - ref_line (m)") + ax.set_ylabel("l (m)") + ax.set_title("QP Path - sl Graph") + + self.set_visible(False) + + def set_visible(self, visible): + self.sl_static_obstacle_lower_boundary_line.set_visible(visible) + self.sl_static_obstacle_upper_boundary_line.set_visible(visible) + self.sl_dynamic_obstacle_lower_boundary_line.set_visible(visible) + self.sl_dynamic_obstacle_upper_boundary_line.set_visible(visible) + self.sl_map_lower_boundary_line.set_visible(visible) + self.sl_map_upper_boundary_line.set_visible(visible) + self.sl_path_line.set_visible(visible) + self.sl_aggregated_boundary_low_line.set_visible(visible) + self.sl_aggregated_boundary_high_line.set_visible(visible) + + def show(self, planning): + planning.sl_data_lock.acquire() + self.sl_static_obstacle_lower_boundary_line.set_visible(True) + self.sl_static_obstacle_upper_boundary_line.set_visible(True) + self.sl_dynamic_obstacle_lower_boundary_line.set_visible(True) + self.sl_dynamic_obstacle_upper_boundary_line.set_visible(True) + self.sl_map_lower_boundary_line.set_visible(True) + self.sl_map_upper_boundary_line.set_visible(True) + self.sl_path_line.set_visible(True) + self.sl_aggregated_boundary_low_line.set_visible(True) + self.sl_aggregated_boundary_high_line.set_visible(True) + + new_sampled_s = [] + for s in planning.sl_sampled_s: + new_sampled_s.append(s) + new_sampled_s.append(s) + new_map_lower = [] + for l in planning.sl_map_lower_boundary: + new_map_lower.append(l) + new_map_lower.append(-11) + new_map_upper = [] + for l in planning.sl_map_upper_boundary: + new_map_upper.append(l) + new_map_upper.append(11) + self.sl_map_lower_boundary_line.set_xdata(new_sampled_s) + self.sl_map_lower_boundary_line.set_ydata(new_map_lower) + self.sl_map_upper_boundary_line.set_xdata(new_sampled_s) + self.sl_map_upper_boundary_line.set_ydata(new_map_upper) + + self.sl_dynamic_obstacle_lower_boundary_line.set_xdata(planning.sl_sampled_s) + self.sl_dynamic_obstacle_lower_boundary_line.set_ydata(planning.sl_dynamic_obstacle_lower_boundary) + self.sl_dynamic_obstacle_upper_boundary_line.set_xdata(planning.sl_sampled_s) + self.sl_dynamic_obstacle_upper_boundary_line.set_ydata(planning.sl_dynamic_obstacle_upper_boundary) + + new_static_lower = [] + for l in planning.sl_static_obstacle_lower_boundary: + new_static_lower.append(l) + new_static_lower.append(-11) + new_static_upper = [] + for l in planning.sl_static_obstacle_upper_boundary: + new_static_upper.append(l) + new_static_upper.append(11) + self.sl_static_obstacle_lower_boundary_line.set_xdata(new_sampled_s) + self.sl_static_obstacle_lower_boundary_line.set_ydata(new_static_lower) + self.sl_static_obstacle_upper_boundary_line.set_xdata(new_sampled_s) + self.sl_static_obstacle_upper_boundary_line.set_ydata(new_static_upper) + self.sl_path_line.set_xdata(planning.sl_path_s) + self.sl_path_line.set_ydata(planning.sl_path_l) + self.sl_aggregated_boundary_low_line.set_xdata(planning.sl_aggregated_boundary_s) + self.sl_aggregated_boundary_low_line.set_ydata(planning.sl_aggregated_boundary_low_l) + self.sl_aggregated_boundary_high_line.set_xdata(planning.sl_aggregated_boundary_s) + self.sl_aggregated_boundary_high_line.set_ydata(planning.sl_aggregated_boundary_high_l) + planning.sl_data_lock.release() \ No newline at end of file diff --git a/modules/tools/mapshow/subplot_speed.py b/modules/tools/mapshow/subplot_speed.py new file mode 100644 index 00000000000..0b39508bdaf --- /dev/null +++ b/modules/tools/mapshow/subplot_speed.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +class SpeedSubplot: + def __init__(self, ax): + self.ax = ax + self.speed_lines = [] + self.speed_lines_size = 3 + colors = ['b', 'g', 'r', 'k'] + for i in range(self.speed_lines_size): + line, = ax.plot( + [0], [0], + colors[i % len(colors)] + ".", + lw=3 + i * 3, + alpha=0.4) + self.speed_lines.append(line) + + ax.set_xlabel("t (second)") + ax.set_xlim([-2, 10]) + ax.set_ylim([-1, 20]) + ax.set_ylabel("speed (m/s)") + ax.set_title("PLANNING SPEED") + self.set_visible(False) + + def set_visible(self, visible): + for line in self.speed_lines: + line.set_visible(visible) + + def show(self, planning): + cnt = 0 + planning.speed_data_lock.acquire() + for name in planning.speed_data_time.keys(): + if cnt >= self.speed_lines_size: + print "WARNING: number of path lines is more than " \ + + str(self.speed_lines_size) + continue + if len(planning.speed_data_time[name]) <= 1: + continue + speed_line = self.speed_lines[cnt] + speed_line.set_visible(True) + speed_line.set_xdata(planning.speed_data_time[name]) + speed_line.set_ydata(planning.speed_data_val[name]) + speed_line.set_label(name[0:5]) + cnt += 1 + + self.ax.legend(loc="upper left", borderaxespad=0., ncol=5) + #self.ax.axis('equal') + planning.speed_data_lock.release() \ No newline at end of file diff --git a/modules/tools/mapshow/subplot_st_main.py b/modules/tools/mapshow/subplot_st_main.py new file mode 100644 index 00000000000..59397e3a85d --- /dev/null +++ b/modules/tools/mapshow/subplot_st_main.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +class StMainSubplot: + + def __init__(self, ax, st_name): + self.st_curve_line, = ax.plot([0], [0], "k.", lw=3, alpha=0.5) + self.kernel_cruise_line, = ax.plot([0], [0], "g.", lw=3, alpha=0.5) + self.kernel_follow_line, = ax.plot([0], [0], "y.", lw=3, alpha=0.5) + self.obstacle_boundary_lines = [] + self.obstacle_annotations = [] + self.obstacle_boundary_size = 10 + for i in range(self.obstacle_boundary_size): + self.obstacle_boundary_lines.append( + ax.plot([0], [0], "r-", lw=1, alpha=1)[0]) + self.obstacle_annotations.append(ax.text(0, 0, "")) + + #self.st_name = planning_config_pb2.TaskType.Name( + # planning_config_pb2.QP_SPLINE_ST_SPEED_OPTIMIZER) + self.st_name = st_name + ax.set_xlim(-3, 9) + ax.set_ylim(-10, 90) + ax.set_xlabel("t (second)") + ax.set_ylabel("s (m)") + ax.set_title(st_name) + + self.set_visible(False) + + def set_visible(self, visible): + self.st_curve_line.set_visible(visible) + self.kernel_cruise_line.set_visible(visible) + self.kernel_follow_line.set_visible(visible) + for line in self.obstacle_boundary_lines: + line.set_visible(visible) + for text in self.obstacle_annotations: + text.set_visible(visible) + + def show(self, planning): + self.set_visible(False) + planning.st_data_lock.acquire() + if self.st_name not in planning.st_data_boundary_s: + planning.st_data_lock.release() + return + obstacles_boundary_s = planning.st_data_boundary_s[self.st_name] + obstacles_boundary_t = planning.st_data_boundary_t[self.st_name] + obstacles_type = planning.st_data_boundary_type[self.st_name] + cnt = 1 + for boundary_name in obstacles_boundary_s.keys(): + if cnt >= self.obstacle_boundary_size: + print "WARNING: number of path lines is more than " \ + + self.obstacle_boundary_size + continue + boundary = self.obstacle_boundary_lines[cnt] + boundary.set_visible(True) + + boundary.set_xdata(obstacles_boundary_t[boundary_name]) + boundary.set_ydata(obstacles_boundary_s[boundary_name]) + center_t = 0 + center_s = 0 + for i in range(len(obstacles_boundary_t[boundary_name])-1): + center_s += obstacles_boundary_s[boundary_name][i] + center_t += obstacles_boundary_t[boundary_name][i] + center_s /= float(len(obstacles_boundary_s[boundary_name])-1) + center_t /= float(len(obstacles_boundary_t[boundary_name])-1) + + annotation = self.obstacle_annotations[cnt] + annotation.set_visible(True) + annotation.set_text(boundary_name+ "_" + + obstacles_type[boundary_name] + .replace("ST_BOUNDARY_TYPE_","")) + annotation.set_x(center_t) + annotation.set_y(center_s) + + cnt += 1 + + self.st_curve_line.set_visible(True) + self.st_curve_line.set_xdata(planning.st_curve_t[self.st_name]) + self.st_curve_line.set_ydata(planning.st_curve_s[self.st_name]) + self.st_curve_line.set_label(self.st_name[0:5]) + + self.kernel_cruise_line.set_visible(True) + self.kernel_cruise_line.set_xdata(planning.kernel_cruise_t[self.st_name]) + self.kernel_cruise_line.set_ydata(planning.kernel_cruise_s[self.st_name]) + self.kernel_follow_line.set_visible(True) + self.kernel_follow_line.set_xdata(planning.kernel_follow_t[self.st_name]) + self.kernel_follow_line.set_ydata(planning.kernel_follow_s[self.st_name]) + + planning.st_data_lock.release() + + + diff --git a/modules/tools/mapshow/subplot_st_speed.py b/modules/tools/mapshow/subplot_st_speed.py new file mode 100644 index 00000000000..3b2f30dbfbb --- /dev/null +++ b/modules/tools/mapshow/subplot_st_speed.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +class StSpeedSubplot: + + def __init__(self, ax, st_name): + self.speed_limit_line = ax.plot([0], [0], "r-", + lw=6, alpha=0.5, label="limits")[0] + self.speed_line = ax.plot([0], [0], "k-", + lw=3, alpha=0.5, label="planned")[0] + self.speed_upper_bound_line = \ + ax.plot([0], [0], "b-", lw=1, alpha=1, label="upper")[0] + self.speed_lower_bound_line = \ + ax.plot([0], [0], "b-", lw=3, alpha=1, label="lower")[0] + self.st_name = st_name + ax.set_xlim(-10, 70) + ax.set_ylim(-1, 20) + ax.set_xlabel("s - qp_path(m)") + ax.set_ylabel("v (m/s)") + ax.set_title("QP Speed - sv graph") + ax.legend(loc="upper left", bbox_to_anchor=(0, 1), ncol=2, borderaxespad=0.) + self.set_visible(False) + + def set_visible(self, visible): + self.speed_limit_line.set_visible(visible) + self.speed_line.set_visible(visible) + self.speed_upper_bound_line.set_visible(visible) + self.speed_lower_bound_line.set_visible(visible) + + def show(self, planning): + self.set_visible(False) + + planning.st_data_lock.acquire() + if self.st_name not in planning.st_curve_s: + planning.st_data_lock.release() + return + planned_speed_s = planning.st_curve_s[self.st_name] + planned_speed_v = planning.st_curve_v[self.st_name] + self.speed_line.set_xdata(planned_speed_s) + self.speed_line.set_ydata(planned_speed_v) + self.speed_line.set_visible(True) + + self.speed_limit_line.set_xdata(planning.st_speed_limit_s[self.st_name]) + self.speed_limit_line.set_ydata(planning.st_speed_limit_v[self.st_name]) + self.speed_limit_line.set_visible(True) + + self.speed_upper_bound_line.set_xdata(planning.st_speed_constraint_s[self.st_name]) + self.speed_upper_bound_line.set_ydata(planning.st_speed_constraint_upper[self.st_name]) + self.speed_upper_bound_line.set_visible(True) + + self.speed_lower_bound_line.set_xdata(planning.st_speed_constraint_s[self.st_name]) + self.speed_lower_bound_line.set_ydata(planning.st_speed_constraint_lower[self.st_name]) + self.speed_lower_bound_line.set_visible(True) + + planning.st_data_lock.release() + + + diff --git a/modules/tools/mapshow/subplot_traj_acc.py b/modules/tools/mapshow/subplot_traj_acc.py new file mode 100644 index 00000000000..7f439ebc4f6 --- /dev/null +++ b/modules/tools/mapshow/subplot_traj_acc.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +import matplotlib.pyplot as plt +from matplotlib import cm as cmx +from matplotlib import colors as mcolors + +class TrajAccSubplot: + def __init__(self, ax): + self.ax = ax + self.acc_lines = [] + self.acc_lines_size = 30 + self.colors = [] + self.init_colors() + #self.colors = ['b','r', 'y', 'k'] + for i in range(self.acc_lines_size): + line, = ax.plot( + [0], [0], + c=self.colors[i % len(self.colors)], + ls="-", + marker='', + lw=3, + alpha=0.8) + self.acc_lines.append(line) + + ax.set_xlabel("t (second)") + #ax.set_xlim([-2, 10]) + ax.set_ylim([-6, 6]) + self.ax.autoscale_view() + #self.ax.relim() + ax.set_ylabel("acc (m/s^2)") + ax.set_title("PLANNING ACC") + self.set_visible(False) + + def init_colors(self): + self.colors = [] + values = range(self.acc_lines_size) + jet = plt.get_cmap('brg') + color_norm = mcolors.Normalize(vmin=0, vmax=values[-1]) + scalar_map = cmx.ScalarMappable(norm=color_norm, cmap=jet) + for val in values: + color_val = scalar_map.to_rgba(val) + self.colors.append(color_val) + + def set_visible(self, visible): + for line in self.acc_lines: + line.set_visible(visible) + + def show(self, planning): + planning.traj_data_lock.acquire() + for i in range(len(planning.traj_speed_t_history)): + if i >= self.acc_lines_size: + print "WARNING: number of path lines is more than " \ + + str(self.acc_lines_size) + continue + speed_line = self.acc_lines[self.acc_lines_size-i-1] + + speed_line.set_xdata(planning.traj_acc_t_history[i]) + speed_line.set_ydata(planning.traj_acc_a_history[i]) + #speed_line.set_xdata([1,2,3,4]) + #speed_line.set_ydata([1,2,3,4]) + #speed_line.set_label(name[0:5]) + speed_line.set_visible(True) + + #self.ax.legend(loc="upper left", borderaxespad=0., ncol=5) + #self.ax.axis('equal') + planning.traj_data_lock.release() + self.ax.autoscale_view() + self.ax.relim() \ No newline at end of file diff --git a/modules/tools/mapshow/subplot_traj_speed.py b/modules/tools/mapshow/subplot_traj_speed.py new file mode 100644 index 00000000000..81d160b33de --- /dev/null +++ b/modules/tools/mapshow/subplot_traj_speed.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +import matplotlib.pyplot as plt +from matplotlib import cm as cmx +from matplotlib import colors as mcolors + +class TrajSpeedSubplot: + def __init__(self, ax): + self.ax = ax + self.speed_lines = [] + self.speed_lines_size = 30 + self.colors = [] + self.init_colors() + #self.colors = ['b','r', 'y', 'k'] + for i in range(self.speed_lines_size): + line, = ax.plot( + [0], [0], + c=self.colors[i % len(self.colors)], + ls="-", + marker='', + lw=3, + alpha=0.8) + self.speed_lines.append(line) + + ax.set_xlabel("t (second)") + #ax.set_xlim([-2, 10]) + ax.set_ylim([-1, 13]) + self.ax.autoscale_view() + #self.ax.relim() + ax.set_ylabel("speed (m/s)") + ax.set_title("PLANNING SPEED") + self.set_visible(False) + + def init_colors(self): + self.colors = [] + values = range(self.speed_lines_size) + jet = plt.get_cmap('brg') + color_norm = mcolors.Normalize(vmin=0, vmax=values[-1]) + scalar_map = cmx.ScalarMappable(norm=color_norm, cmap=jet) + for val in values: + color_val = scalar_map.to_rgba(val) + self.colors.append(color_val) + + def set_visible(self, visible): + for line in self.speed_lines: + line.set_visible(visible) + + def show(self, planning): + planning.traj_data_lock.acquire() + for i in range(len(planning.traj_speed_t_history)): + if i >= self.speed_lines_size: + print "WARNING: number of path lines is more than " \ + + str(self.speed_lines_size) + continue + speed_line = self.speed_lines[self.speed_lines_size-i-1] + + speed_line.set_xdata(planning.traj_speed_t_history[i]) + speed_line.set_ydata(planning.traj_speed_v_history[i]) + #speed_line.set_xdata([1,2,3,4]) + #speed_line.set_ydata([1,2,3,4]) + #speed_line.set_label(name[0:5]) + speed_line.set_visible(True) + + #self.ax.legend(loc="upper left", borderaxespad=0., ncol=5) + #self.ax.axis('equal') + planning.traj_data_lock.release() + self.ax.autoscale_view() + self.ax.relim() \ No newline at end of file diff --git a/modules/tools/mock_routing/mock_routing_request.py b/modules/tools/mock_routing/mock_routing_request.py new file mode 100644 index 00000000000..daee0553604 --- /dev/null +++ b/modules/tools/mock_routing/mock_routing_request.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### +""" +Generate Planning Path +""" + +import argparse +import atexit +import os +import sys +import time + +import rospy +import scipy.signal as signal +from numpy import genfromtxt + +from modules.routing.proto import routing_pb2 + +def main(): + """ + Main rosnode + """ + rospy.init_node('mock_routing_requester', anonymous=True) + sequence_num = 0 + + routing_request = routing_pb2.RoutingRequest() + routing_request.header.timestamp_sec = rospy.get_time() + routing_request.header.module_name = 'routing_request' + routing_request.header.sequence_num = sequence_num + sequence_num = sequence_num + 1 + + start_point = routing_request.start + end_point = routing_request.end + + """ + start_point.id = '94_1_0' + start_point.s = 53 + end_point.id = '94_1_0' + end_point.s = 50 + """ + start_point.id = '1_-1' + start_point.s = 1 + end_point.id = '1_-1' + end_point.s = 80 + + request_publisher = rospy.Publisher( + '/apollo/routing_request', routing_pb2.RoutingRequest, queue_size=1) + time.sleep(2.0) + request_publisher.publish(routing_request) + + +if __name__ == '__main__': + main() + diff --git a/modules/tools/perception/empty_prediction.py b/modules/tools/perception/empty_prediction.py new file mode 100644 index 00000000000..8d2a4791525 --- /dev/null +++ b/modules/tools/perception/empty_prediction.py @@ -0,0 +1,48 @@ +""" +this module creates a node and fake prediction data based +on json configurations +""" +import argparse +import math +import time + +import numpy +import rospy +import simplejson +from std_msgs.msg import String + +from modules.prediction.proto.prediction_obstacle_pb2 import PredictionObstacle +from modules.prediction.proto.prediction_obstacle_pb2 import PredictionObstacles + + +def prediction_publisher(prediction_topic, rate): + """publisher""" + pub = rospy.Publisher(prediction_topic, String, queue_size=1) + rospy.init_node('prediction', anonymous=True) + rate = rospy.Rate(rate) + seq_num = 1 + while not rospy.is_shutdown(): + prediction = PredictionObstacles() + prediction.header.sequence_num = seq_num + prediction.header.timestamp_sec = rospy.Time.now().to_sec() + prediction.header.module_name = "prediction" + print str(prediction) + s = String() + s.data = prediction.SerializeToString() + pub.publish(s) + seq_num += 1 + rate.sleep() + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description="create empty prediction message", + prog="replay_prediction.py") + parser.add_argument("-t", "--topic", action="store", type=str, default="/pnc/prediction", + help="set the prediction topic") + parser.add_argument("-r", "--rate", action="store", type=int, default=10, + help="set the prediction topic publish time duration") + args = parser.parse_args() + try: + prediction_publisher(args.topic, args.rate) + except rospy.ROSInterruptException: + pass diff --git a/modules/tools/perception/extend_prediction.py b/modules/tools/perception/extend_prediction.py new file mode 100644 index 00000000000..3edb7202372 --- /dev/null +++ b/modules/tools/perception/extend_prediction.py @@ -0,0 +1,73 @@ +""" +print received prediction message +""" +import argparse +import math +import sys +import time + +import numpy +import rospy +from std_msgs.msg import String + +import common.proto_utils as proto_utils +from modules.prediction.proto.prediction_obstacle_pb2 import PredictionObstacle +from modules.prediction.proto.prediction_obstacle_pb2 import PredictionObstacles + + +def distance(p1, p2): + """distance between two trajectory points""" + return math.sqrt((p1.y - p2.y)**2 + (p1.x - p2.x)**2); + + +def get_trajectory_length(trajectory): + """get_trajectory_length""" + total = 0.0 + for i in range(1, len(trajectory.trajectory_point)): + total += distance(trajectory.trajectory_point[i - 1], + trajectory.trajectory_point[i]) + return total + + +def extend_prediction(prediction, min_length, min_time): + """extend prediction""" + obstacles = len(prediction.prediction_obstacle) + for obstacle in prediction.prediction_obstacle: + i = 0; + for trajectory in obstacle.trajectory: + points = trajectory.trajectory_point + point_num = len(points) + trajectory_length = get_trajectory_length(trajectory) + print >> sys.stderr, "%s trajectory %s length %s" % (obstacle.perception_obstacle.id, i, trajectory_length) + i += 1 + if trajectory_length < min_length: + second_last = points[point_num - 2] + last_point = points[point_num - 1] + x_diff = last_point.x - second_last.x + y_diff = last_point.y - second_last.y + t_diff = last_point.t - second_last.t + delta_diff = math.sqrt(x_diff ** 2 + y_diff ** 2) + cur_len = trajectory_length + while cur_len < min_length: + last_point.x += x_diff + last_point.y += y_diff + last_point.t += t_diff + p = points.add() + p.CopyFrom(last_point) + last_point = p + cur_len += delta_diff + return prediction + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description="extend prediction trajectory") + parser.add_argument("prediction", action="store", type=str, help="set the prediction file") + parser.add_argument("-p", "--period", action="store", type=float, default=10.0, + help="set the prediction period") + parser.add_argument("-d", "--distance", action="store", type=float, default=70.0, + help="set the prediction distance") + args = parser.parse_args() + prediction_data = proto_utils.get_pb_from_file(args.prediction, + PredictionObstacles()) + extended_prediction = extend_prediction(prediction_data, args.distance, args.period) + print extended_prediction diff --git a/modules/tools/perception/garage_cross_vehicle_2.json b/modules/tools/perception/garage_cross_vehicle_2.json new file mode 100644 index 00000000000..17beee750d8 --- /dev/null +++ b/modules/tools/perception/garage_cross_vehicle_2.json @@ -0,0 +1,14 @@ +{ + "id": 2, + "position": [-1868.59, -2990.91, 0.0], + "theta": 1.1659045405098132, + "length": 4, + "width": 2, + "height": 1, + "speed": 8.0, + "tracking_time": 1.0, + "type": "VEHICLE", + "trace": [[-1868.59, -2990.91, 0.0], + [-1845.16, -2994.59, 0.0], + [-1850.16, -3000.0, 0.0]] +} diff --git a/modules/tools/perception/garage_offroad_static_1.json b/modules/tools/perception/garage_offroad_static_1.json new file mode 100644 index 00000000000..4b6cb0deedd --- /dev/null +++ b/modules/tools/perception/garage_offroad_static_1.json @@ -0,0 +1,11 @@ +{ + "id": 1, + "position": [-1855.5, -2961.51, 0], + "theta": 1.1659045405098132, + "length": 4, + "width": 2, + "height": 1, + "speed": 0.0, + "tracking_time": 1.0, + "type": "UNKNOWN_UNMOVABLE" +} diff --git a/modules/tools/perception/garage_onroad_static_4.json b/modules/tools/perception/garage_onroad_static_4.json new file mode 100644 index 00000000000..aa3d68ed37b --- /dev/null +++ b/modules/tools/perception/garage_onroad_static_4.json @@ -0,0 +1,11 @@ +{ + "id": 1, + "position": [586347.42124613957, 4140710.9270518012, 0.0], + "theta": 1.1659045405098132, + "length": 4, + "width": 2, + "height": 1, + "speed": 0.0, + "tracking_time": 1.0, + "type": "UNKNOWN_UNMOVABLE" +} diff --git a/modules/tools/perception/garage_onroad_vehicle_3.json b/modules/tools/perception/garage_onroad_vehicle_3.json new file mode 100644 index 00000000000..7a648151e99 --- /dev/null +++ b/modules/tools/perception/garage_onroad_vehicle_3.json @@ -0,0 +1,113 @@ +{ + "id": 3, + "position": [586376.36731545243, 4140677.2173802247, 0.0], + "theta": 1.1659045405098132, + "length": 4, + "width": 2, + "height": 1, + "speed": 8.0, + "tracking_time": 1.0, + "type": "VEHICLE", + "trace": [ + [586392.84003, 4140673.01232, 0.0], + [586391.48345350777, 4140673.3586190776, 0.0], + [586389.93308037391, 4140673.7543894518, 0.0], + [586388.38270724006, 4140674.1501598256, 0.0], + [586386.83233410609, 4140674.5459302, 0.0], + [586385.28196097224, 4140674.941700574, 0.0], + [586383.92538448, 4140675.2879996509, 0.0], + [586382.37501134619, 4140675.6837700251, 0.0], + [586380.82463821233, 4140676.0795403994, 0.0], + [586379.27426507848, 4140676.4753107731, 0.0], + [586377.72389194451, 4140676.8710811473, 0.0], + [586376.36731545243, 4140677.2173802247, 0.0], + [586374.81694231846, 4140677.6131505985, 0.0], + [586373.26656918461, 4140678.0089209727, 0.0], + [586371.71619605075, 4140678.4046913465, 0.0], + [586370.1658229169, 4140678.8004617207, 0.0], + [586368.8092464247, 4140679.1467607981, 0.0], + [586367.25887329085, 4140679.5425311718, 0.0], + [586365.708500157, 4140679.938301546, 0.0], + [586364.158127023, 4140680.3340719203, 0.0], + [586362.60775388917, 4140680.729842294, 0.0], + [586361.05738075532, 4140681.1256126682, 0.0], + [586359.70080426312, 4140681.4719117456, 0.0], + [586358.15043112927, 4140681.8676821194, 0.0], + [586356.60005799541, 4140682.2634524936, 0.0], + [586355.04968486144, 4140682.6592228673, 0.0], + [586353.49931172759, 4140683.0549932416, 0.0], + [586352.14273523539, 4140683.4012923189, 0.0], + [586350.59236210154, 4140683.7970626927, 0.0], + [586349.04198896769, 4140684.1928330669, 0.0], + [586347.569402928, 4140684.6569425897, 0.0], + [586346.34040037962, 4140685.3234600914, 0.0], + [586345.30744645279, 4140686.0166505864, 0.0], + [586344.29222947382, 4140686.9242762327, 0.0], + [586343.56665382232, 4140688.0126865744, 0.0], + [586342.949612425, 4140689.1510837893, 0.0], + [586342.55869757663, 4140690.3676857753, 0.0], + [586342.55462259543, 4140691.4767941991, 0.0], + [586342.6637494904, 4140692.8428249569, 0.0], + [586342.99203702353, 4140694.4008130711, 0.0], + [586343.35804034967, 4140695.9494921896, 0.0], + [586343.75255533273, 4140697.4911341346, 0.0], + [586344.16637783637, 4140699.0280107288, 0.0], + [586344.537075054, 4140700.3706546258, 0.0], + [586344.962295973, 4140701.904718264, 0.0], + [586345.38318794768, 4140703.4398507774, 0.0], + [586345.80090989673, 4140704.9757669368, 0.0], + [586346.21787014115, 4140706.5118733062, 0.0], + [586346.58354364219, 4140707.8557630088, 0.0], + [586347.00225746073, 4140709.3914409908, 0.0], + [586347.42124613957, 4140710.9270518012, 0.0], + [586347.83999702206, 4140712.4627208482, 0.0], + [586348.25850161957, 4140713.9984501684, 0.0], + [586348.62461901968, 4140715.3422314571, 0.0], + [586349.04308792681, 4140716.8779694913, 0.0], + [586349.4616301487, 4140718.4136895789, 0.0], + [586349.88020279026, 4140719.9494022224, 0.0], + [586350.2987647875, 4140721.4851174741, 0.0], + [586350.66498962464, 4140722.8288724585, 0.0], + [586351.08352311642, 4140724.3645946868, 0.0], + [586351.502057768, 4140725.9003166305, 0.0], + [586351.92059813277, 4140727.4360371758, 0.0], + [586352.33914143045, 4140728.9717570036, 0.0], + [586352.75768457341, 4140730.507476869, 0.0], + [586353.12390853534, 4140731.8512320668, 0.0], + [586353.54244935873, 4140733.3869525003, 0.0], + [586353.96099008131, 4140734.9226729581, 0.0], + [586354.37953121448, 4140736.4583933158, 0.0], + [586354.798072612, 4140737.9941136083, 0.0], + [586355.16429637477, 4140739.3378688549, 0.0], + [586355.582837717, 4140740.8735891613, 0.0], + [586356.00137897744, 4140742.4093094873, 0.0], + [586356.41992021643, 4140743.9450298189, 0.0], + [586356.8384614815, 4140745.4807501445, 0.0], + [586357.20468510769, 4140746.8245054241, 0.0], + [586357.62322640244, 4140748.3602257422, 0.0], + [586358.04176769149, 4140749.8959460612, 0.0], + [586358.46030897368, 4140751.4316663826, 0.0], + [586358.8788502533, 4140752.9673867039, 0.0], + [586359.245073874, 4140754.3111419855, 0.0], + [586359.66361515666, 4140755.8468623064, 0.0], + [586360.08215644024, 4140757.3825826268, 0.0], + [586360.50069772359, 4140758.9183029477, 0.0], + [586360.91923900647, 4140760.4540232685, 0.0], + [586361.337780289, 4140761.9897435894, 0.0], + [586361.70400391135, 4140763.33349887, 0.0], + [586362.122545194, 4140764.8692191909, 0.0], + [586362.54108647688, 4140766.4049395118, 0.0], + [586362.95962775976, 4140767.9406598327, 0.0], + [586363.37816904252, 4140769.4763801536, 0.0], + [586363.74439266487, 4140770.8201354346, 0.0], + [586364.16293394763, 4140772.3558557555, 0.0], + [586364.5814752304, 4140773.8915760764, 0.0], + [586365.00001651316, 4140775.4272963973, 0.0], + [586365.418557796, 4140776.9630167182, 0.0], + [586365.78478141839, 4140778.3067719988, 0.0], + [586366.20332270127, 4140779.8424923196, 0.0], + [586366.621863984, 4140781.3782126405, 0.0], + [586367.0404052668, 4140782.9139329614, 0.0], + [586367.45894654957, 4140784.4496532823, 0.0] + ] +} diff --git a/modules/tools/perception/garage_perception.bash b/modules/tools/perception/garage_perception.bash new file mode 100755 index 00000000000..0091e1b3106 --- /dev/null +++ b/modules/tools/perception/garage_perception.bash @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +python replay_perception.py -f garage_*.json diff --git a/modules/tools/perception/print_perception.py b/modules/tools/perception/print_perception.py new file mode 100644 index 00000000000..18d1aaf7042 --- /dev/null +++ b/modules/tools/perception/print_perception.py @@ -0,0 +1,38 @@ +""" +print received perception message +""" +import argparse +import math +import time + +import numpy +import rospy +from std_msgs.msg import String + +from modules.perception.proto.perception_obstacle_pb2 import PerceptionObstacle +from modules.perception.proto.perception_obstacle_pb2 import PerceptionObstacles + + +def receiver(data): + """receiver""" + perception = PerceptionObstacles() + perception.ParseFromString(data.data) + print str(perception) + + +def perception_receiver(perception_topic): + """publisher""" + rospy.init_node('perception', anonymous=True) + pub = rospy.Subscriber(perception_topic, String, receiver) + rospy.spin() + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description="create fake perception obstacles", + prog="replay_perception.py") + parser.add_argument("-t", "--topic", action="store", type=str, default="/perception/obstacles", + help="set the perception topic") + parser.add_argument("-p", "--period", action="store", type=float, default=0.1, + help="set the perception topic publish time duration") + args = parser.parse_args() + perception_receiver(args.topic) diff --git a/modules/tools/perception/replay_perception.py b/modules/tools/perception/replay_perception.py new file mode 100644 index 00000000000..b2489166e20 --- /dev/null +++ b/modules/tools/perception/replay_perception.py @@ -0,0 +1,237 @@ +""" +this module creates a node and fake perception data based +on json configurations +""" +import argparse +import math +import time + +import numpy +import rospy +import simplejson +from std_msgs.msg import String + +from modules.perception.proto.perception_obstacle_pb2 import PerceptionObstacle +from modules.perception.proto.perception_obstacle_pb2 import PerceptionObstacles +from modules.perception.proto.perception_obstacle_pb2 import Point + +_s_seq_num = 0 +_s_delta_t = 0.1 +_s_epsilon = 1e-8 + +def get_seq_num(): + """return the sequence number""" + global _s_seq_num + _s_seq_num += 1 + return _s_seq_num + + +def get_velocity(theta, speed): + """get velocity from theta and speed""" + point = Point() + point.x = math.cos(theta) * speed + point.y = math.sin(theta) * speed + point.z = 0.0 + return point + + +def generate_polygon(point, heading, length, width): + """generate polygon""" + points = [] + half_l = length / 2.0 + half_w = width / 2.0 + sin_h = math.sin(heading) + cos_h = math.cos(heading) + vectors = [(half_l * cos_h - half_w * sin_h, + half_l * sin_h + half_w * cos_h), + (-half_l * cos_h - half_w * sin_h, + - half_l * sin_h + half_w * cos_h), + (-half_l * cos_h + half_w * sin_h, + - half_l * sin_h - half_w * cos_h), + (half_l * cos_h + half_w * sin_h, + half_l * sin_h - half_w * cos_h)] + for x, y in vectors: + p = Point() + p.x = point.x + x + p.y = point.y + y + p.z = point.z + points.append(p) + return points + + +def load_descrptions(files): + """load description files""" + objects = [] + for f in files: + with file(f, 'r') as f_handle: + obstacle = simplejson.loads(f_handle.read()) + if "trace" in obstacle: + for i in range(1, len(obstacle["trace"])): + if same_point(obstacle["trace"][i], obstacle["trace"][i - 1]): + print("same trace point found in obstacle: %s" % obstacle["id"]) + return None + objects.append(obstacle) + return objects + + +def get_point(a, b, ratio): + """get point from a to b with ratio""" + p = Point() + p.x = a[0] + ratio * (b[0] - a[0]) + p.y = a[1] + ratio * (b[1] - a[1]) + p.z = a[2] + ratio * (b[2] - a[2]) + return p + + +def init_perception(description): + """create perception from description""" + perception = PerceptionObstacle() + perception.id = description["id"] + perception.position.x = description["position"][0] + perception.position.y = description["position"][1] + perception.position.z = description["position"][2] + perception.theta = description["theta"] + perception.velocity.CopyFrom(get_velocity(description["theta"], description["speed"])) + perception.length = description["length"] + perception.width = description["width"] + perception.height = description["height"] + perception.polygon_point.extend(generate_polygon(perception.position, perception.theta, + perception.length, perception.width)) + # for point in generate_polygon(perception.position, perception.theta, + # perception.length, perception.width): + # p = perception.polygon_point.add() + # p.x = point[0] + # p.y = point[1] + # p.z = point[2] + perception.tracking_time = description["tracking_time"] + perception.type = PerceptionObstacle.Type.Value(description["type"]) + perception.timestamp=rospy.get_time() + return perception + + +def same_point(a, b): + """test if a and b are the same point""" + return math.fabs(b[0] - a[0]) < _s_epsilon and math.fabs(b[1] - a[1]) < _s_epsilon + + +def inner_product(a, b): + """get the a, b inner product""" + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + + +def cross_product(a, b): + """cross_product""" + return a[0] * b[1] - a[1] * b[0] + + +def distance(a, b): + """return distance between a and b""" + return math.sqrt((b[0] - a[0])**2 + (b[1] - a[1])**2 + (b[2] - a[2])**2) + + +def is_within(a, b, c): + """ check if c is in [a, b]""" + if b < a: + b, a = a, b + return a - _s_epsilon < c and c < b + _s_epsilon + + +def on_segment(a, b, c): + """test if c is in line segment a-b""" + ab = (b[0] - a[0], b[1] - a[1], b[2] - a[2]) + ac = (c[0] - a[0], c[1] - a[1], c[2] - a[2]) + if math.fabs(cross_product(ac, ab)) > _s_epsilon: + return False + return is_within(a[0], b[0], c[0]) and is_within(a[1], b[1], c[1]) \ + and is_within(a[2], b[2], c[2]) + + +def linear_project_perception(description, prev_perception): + """get perception from linear projection of description""" + perception = PerceptionObstacle() + perception = prev_perception + perception.timestamp = rospy.get_time() + if "trace" not in description: + return perception + trace = description["trace"] + prev_point = (prev_perception.position.x, prev_perception.position.y, + prev_perception.position.z) + delta_s = description["speed"] * _s_delta_t + for i in range(1, len(trace)): + if on_segment(trace[i - 1], trace[i], prev_point): + dist = distance(trace[i - 1], trace[i]) + delta_s += distance(trace[i - 1], prev_point) + while dist < delta_s: + delta_s -= dist + i += 1 + if i < len(trace): + dist = distance(trace[i - 1], trace[i]) + else: + return init_perception(description) + ratio = delta_s / dist + perception.position.CopyFrom(get_point(trace[i - 1], trace[i], ratio)) + perception.theta = math.atan2(trace[i][1] - trace[i - 1][1], + trace[i][0] - trace[i - 1][0]) + + perception.ClearField("polygon_point") + perception.polygon_point.extend(generate_polygon(perception.position, perception.theta, + perception.length, perception.width)) + return perception + return perception + + +def generate_perception(perception_description, prev_perception): + """generate perception data""" + perceptions = PerceptionObstacles() + perceptions.header.sequence_num = get_seq_num() + perceptions.header.module_name = "perception" + perceptions.header.timestamp_sec = rospy.get_time() + if not perception_description: + return perceptions + if prev_perception is None: + for description in perception_description: + p = perceptions.perception_obstacle.add() + p.CopyFrom(init_perception(description)) + return perceptions + else: # linear projection + description_dict = {} + for desc in perception_description: + description_dict[desc["id"]] = desc + for obstacle in prev_perception.perception_obstacle: + description = description_dict[obstacle.id] + p = perceptions.perception_obstacle.add() + next_obstacle = linear_project_perception(description, obstacle) + p.CopyFrom(next_obstacle) + return perceptions + + +def perception_publisher(perception_topic, files, period): + """publisher""" + rospy.init_node('perception', anonymous=True) + pub = rospy.Publisher(perception_topic, PerceptionObstacles, queue_size=1) + perception_description = load_descrptions(files) + rate = rospy.Rate(int(1.0 / period)) # 10hz + global _s_delta_t + _s_delta_t = period + perception = None + while not rospy.is_shutdown(): + perception = generate_perception(perception_description, perception) + print str(perception) + pub.publish(perception) + rate.sleep() + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description="create fake perception obstacles", + prog="replay_perception.py") + parser.add_argument("files", action="store", type=str, nargs="*", + help="obstacle description files") + parser.add_argument("-t", "--topic", action="store", type=str, default="/apollo/perception/obstacles", + help="set the perception topic") + parser.add_argument("-p", "--period", action="store", type=float, default=0.1, + help="set the perception topic publish time duration") + args = parser.parse_args() + try: + perception_publisher(args.topic, args.files, args.period) + except rospy.ROSInterruptException: + pass diff --git a/modules/tools/planning_traj_plot/main.py b/modules/tools/planning_traj_plot/main.py index bd1bac922e6..f2468cb72a5 100644 --- a/modules/tools/planning_traj_plot/main.py +++ b/modules/tools/planning_traj_plot/main.py @@ -17,29 +17,13 @@ ############################################################################### import sys -import gflags -from gflags import FLAGS -import matplotlib.pyplot as plt -from google.protobuf import text_format -import mkz_polygon -from modules.planning.proto import planning_pb2 -from modules.localization.proto import localization_pb2 - - -def read_planning_pb(planning_pb_file): - planning_pb = planning_pb2.ADCTrajectory() - f_handle = open(planning_pb_file, 'r') - text_format.Merge(f_handle.read(), planning_pb) - f_handle.close() - return planning_pb +import matplotlib.pyplot as plt -def read_localization_pb(localization_pb_file): - localization_pb = localization_pb2.LocalizationEstimate() - f_handle = open(localization_pb_file, 'r') - text_format.Merge(f_handle.read(), localization_pb) - f_handle.close() - return localization_pb +import common.proto_utils as proto_utils +import mkz_polygon +from modules.planning.proto.planning_pb2 import ADCTrajectory +from modules.localization.proto.localization_pb2 import LocalizationEstimate def plot_trajectory(planning_pb, ax): @@ -140,8 +124,10 @@ def plot_vehicle(localization_pb, ax): planning_pb_file = sys.argv[1] localization_pb_file = sys.argv[2] - planning_pb = read_planning_pb(planning_pb_file) - localization_pb = read_localization_pb(localization_pb_file) + planning_pb = proto_utils.get_pb_from_text_file( + planning_pb_file, ADCTrajectory()) + localization_pb = proto_utils.get_pb_from_text_file( + localization_pb_file, LocalizationEstimate()) plot_trajectory(planning_pb, plt) plot_vehicle(localization_pb, plt) diff --git a/modules/tools/planning_traj_plot/run.sh b/modules/tools/planning_traj_plot/run.sh index 38313a2f436..b2f77c10d14 100755 --- a/modules/tools/planning_traj_plot/run.sh +++ b/modules/tools/planning_traj_plot/run.sh @@ -24,6 +24,6 @@ then fi DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "${DIR}/../../../scripts/apollo_base.sh" -export PYTHONPATH="${DIR}/../../../bazel-genfiles:${PYTHONPATH}" eval "python ${DIR}/main.py $1 $2" diff --git a/modules/tools/plot_control/plot_control.py b/modules/tools/plot_control/plot_control.py index 0d0d8108e72..fb658eb50d7 100644 --- a/modules/tools/plot_control/plot_control.py +++ b/modules/tools/plot_control/plot_control.py @@ -17,12 +17,12 @@ ############################################################################### import sys -import rospy + import gflags -from gflags import FLAGS -from std_msgs.msg import String import matplotlib.pyplot as plt import matplotlib.animation as animation +import rospy +from std_msgs.msg import String from modules.control.proto import control_cmd_pb2 diff --git a/modules/tools/plot_control/run.sh b/modules/tools/plot_control/run.sh index d99cc2c19a1..8d7613813e5 100755 --- a/modules/tools/plot_control/run.sh +++ b/modules/tools/plot_control/run.sh @@ -20,6 +20,6 @@ set -x DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "${DIR}/../../../scripts/apollo_base.sh" -export PYTHONPATH="${DIR}/../../../bazel-genfiles:${PYTHONPATH}" eval "python ${DIR}/plot_control.py $1" diff --git a/modules/tools/plot_trace/plot_planning_result.py b/modules/tools/plot_trace/plot_planning_result.py new file mode 100755 index 00000000000..3679b85700b --- /dev/null +++ b/modules/tools/plot_trace/plot_planning_result.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +import sys + +import matplotlib +import matplotlib.animation as animation +import matplotlib.pyplot as plt +from subprocess import call +import numpy as np +import rosbag +import rospy +from std_msgs.msg import String +from google.protobuf import text_format +from mpl_toolkits.mplot3d import Axes3D + +from modules.canbus.proto import chassis_pb2 +from modules.localization.proto import localization_pb2 +from modules.planning.proto import planning_pb2 + +g_args = None + + +def plot_planning(ax, planning_file): + try: + fhandle = file(planning_file, 'r') + except: + print "Failed to open file %s" % (planning_file) + return + planning_pb = planning_pb2.ADCTrajectory() + text_format.Merge(fhandle.read(), planning_pb) + x = [p.path_point.x for p in planning_pb.trajectory_point] + y = [p.path_point.y for p in planning_pb.trajectory_point] + z = [p.v for p in planning_pb.trajectory_point] + ax.plot(x, y, z, label=planning_file) + ax.legend() + + +def press_key(event): + if event.key == 'c': + files = g_args.planning_files + if len(files) != 2: + print "Need more than two files" + return + command = ["cp"] + for f in files: + command.append(f) + if call(command) == 0: + print "command success: %s" % " ".join(command) + sys.exit(0) + else: + print "Failed to run command: %s " % " ".join(command) + + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser( + description= + """A visualization tool that can plot one or multiple planning " + results, so that we can compare the differences. + Example: plot_planning_result.py result_file1.pb.txt result_file2.pb.txt""" + ) + parser.add_argument( + "planning_files", + action='store', + nargs="+", + help="The planning results") + g_args = parser.parse_args() + + matplotlib.rcParams['legend.fontsize'] = 10 + fig = plt.figure() + fig.canvas.mpl_connect('key_press_event', press_key) + ax = fig.gca(projection='3d') + ax.set_xlabel("x") + ax.set_ylabel("y") + ax.set_zlabel("speed") + + for planning_file in g_args.planning_files: + plot_planning(ax, planning_file) + + plt.show() diff --git a/modules/tools/plot_trace/plot_trace.py b/modules/tools/plot_trace/plot_trace.py index b026fd1de48..e7ec847a069 100755 --- a/modules/tools/plot_trace/plot_trace.py +++ b/modules/tools/plot_trace/plot_trace.py @@ -16,13 +16,14 @@ # limitations under the License. ############################################################################### -import rospy -import rosbag -from std_msgs.msg import String -import matplotlib.pyplot as plt +import sys + import matplotlib.animation as animation +import matplotlib.pyplot as plt import numpy as np -import sys +import rosbag +import rospy +from std_msgs.msg import String from modules.canbus.proto import chassis_pb2 from modules.localization.proto import localization_pb2 diff --git a/modules/tools/py27_requirements.txt b/modules/tools/py27_requirements.txt index 2de3e6baa86..caafd92f0be 100644 --- a/modules/tools/py27_requirements.txt +++ b/modules/tools/py27_requirements.txt @@ -5,17 +5,15 @@ # Google infras. glog google-apputils -grpc >= 0.3 -grpcio -protobuf == 3.1.0.post1 +protobuf == 3.1 python-gflags # Web utils. eventlet flask -flask-restful flask-socketio requests >= 2.18 +simplejson # ROS env. PyYAML diff --git a/modules/tools/realtime_plot/item.py b/modules/tools/realtime_plot/item.py index d9dfac82e5c..224a07dfdad 100644 --- a/modules/tools/realtime_plot/item.py +++ b/modules/tools/realtime_plot/item.py @@ -144,11 +144,5 @@ def draw_lines(self): for polygon in self.ax.patches: self.ax.draw_artist(polygon) - if self.planningavailable: - self.ax.draw_artist(self.current_line) - - if self.targethistidx != -1: - self.ax.draw_artist(self.ax.lines[self.targethistidx]) - - if self.histidx != -1: - self.ax.draw_artist(self.ax.lines[self.histidx]) + for line in self.ax.lines: + self.ax.draw_artist(line) diff --git a/modules/tools/realtime_plot/realtime_plot.py b/modules/tools/realtime_plot/realtime_plot.py index 6df51260cc3..a930eaf320a 100644 --- a/modules/tools/realtime_plot/realtime_plot.py +++ b/modules/tools/realtime_plot/realtime_plot.py @@ -15,26 +15,23 @@ # See the License for the specific language governing permissions and # limitations under the License. ############################################################################### -""" -Real Time Plotting of planning and control -""" -import argparse -import json -import matplotlib.pyplot as plt +"""Real Time Plotting of planning and control""" + import math -import numpy -import rospy import sys -import tf import threading -from std_msgs.msg import String +import time + import gflags -from gflags import FLAGS +import matplotlib.pyplot as plt +import numpy as np +import rospy +import common.proto_utils as proto_utils from item import Item -from modules.localization.proto import localization_pb2 -from modules.canbus.proto import chassis_pb2 -from modules.planning.proto import planning_pb2 +from modules.localization.proto.localization_pb2 import LocalizationEstimate +from modules.canbus.proto.chassis_pb2 import Chassis +from modules.planning.proto.planning_pb2 import ADCTrajectory from stitem import Stitem from xyitem import Xyitem @@ -47,20 +44,14 @@ FLAGS = gflags.FLAGS gflags.DEFINE_boolean('show_heading', False, 'Show heading instead of acceleration') -gflags.DEFINE_boolean('show_st_graph', False, - 'Show st graph instead of curvature.') +gflags.DEFINE_boolean('show_st_graph', False, 'Show st graph') class Plotter(object): - """ - Plotter Class - """ + """Plotter Class""" - def __init__(self, ax1, ax2, ax3, ax4): - self.ax1 = ax1 - self.ax2 = ax2 - self.ax3 = ax3 - self.ax4 = ax4 + def __init__(self, ax1, ax2, ax3, ax4, stgraph): + self.ax = [ax1, ax2, ax3, ax4] self.updategraph = False self.planningavailable = False @@ -71,121 +62,87 @@ def __init__(self, ax1, ax2, ax3, ax4): self.autodrive = False self.carcurvature = 0.0 + self.stgraph = stgraph + self.lock = threading.Lock() def callback_planning(self, data): - """ - New Planning Trajectory - """ - entity = planning_pb2.ADCTrajectory() - entity.CopyFrom(data) - basetime = entity.header.timestamp_sec - numpoints = len(entity.adc_trajectory_point) - if numpoints == 0: - print entity - return + """New Planning Trajectory""" + if self.stgraph: + st_s, st_t, polygons_s, polygons_t = proto_utils.flatten( + data.debug.planning_data.st_graph, + ['speed_profile.s', + 'speed_profile.t', + 'boundary.point.s', + 'boundary.point.t']) - pointx = numpy.zeros(numpoints) - pointy = numpy.zeros(numpoints) - pointspeed = numpy.zeros(numpoints) - pointtime = numpy.zeros(numpoints) - pointtheta = numpy.zeros(numpoints) - pointcur = numpy.zeros(numpoints) - pointacc = numpy.zeros(numpoints) - for idx in range(numpoints): - pointx[idx] = entity.adc_trajectory_point[idx].x - pointy[idx] = entity.adc_trajectory_point[idx].y - pointspeed[idx] = entity.adc_trajectory_point[idx].speed - pointtheta[idx] = entity.adc_trajectory_point[idx].theta - pointcur[idx] = entity.adc_trajectory_point[idx].curvature - pointacc[idx] = entity.adc_trajectory_point[idx].acceleration_s - pointtime[ - idx] = entity.adc_trajectory_point[idx].relative_time + basetime - - st_available = False - debug = entity.debug.debug_message - for item in debug: - if item.id == 0: - stgraph = json.loads(item.info)["st_graph_info"] - boundaries = stgraph["boundaries"] - unit_t = stgraph["unit_t"] - graph_total_t = stgraph["graph_total_t"] - graph_total_s = stgraph["graph_total_s"] - st_points = stgraph["st_points"] - st_a = [point["a"] for point in st_points] - st_v = [point["v"] for point in st_points] - st_s = [point["point"]["s"] for point in st_points] - st_t = [point["point"]["t"] for point in st_points] - st_available = True + with self.lock: + for i in range(len(st_s)): + self.ax[i].new_planning(st_t[i], st_s[i], + polygons_t[i], polygons_s[i]) + + else: + if len(data.trajectory_point) == 0: + print data + return + + x, y, speed, theta, kappa, acc, relative_time = np.array( + proto_utils.flatten(data.trajectory_point, + ['path_point.x', + 'path_point.y', + 'v', + 'path_point.theta', + 'path_point.kappa', + 'a', + 'relative_time'])) + relative_time += data.header.timestamp_sec - with self.lock: - self.ax1.new_planning(pointtime, pointx, pointy) - self.ax2.new_planning(pointtime, pointspeed) + with self.lock: + self.ax[0].new_planning(relative_time, x, y) + self.ax[1].new_planning(relative_time, speed) - if self.ax3.title == "Curvature": - self.ax3.new_planning(pointtime, pointcur) - elif st_available: - self.ax3.new_planning(st_t, st_s, graph_total_t, graph_total_s) + if self.ax[2].title == "Curvature": + self.ax[2].new_planning(relative_time, kappa) - if self.ax4.title == "Heading": - self.ax4.new_planning(pointtime, pointtheta) - else: - self.ax4.new_planning(pointtime, pointacc) + if self.ax[3].title == "Heading": + self.ax[3].new_planning(relative_time, theta) + else: + self.ax[3].new_planning(relative_time, acc) def callback_chassis(self, data): - """ - New localization pose - """ - entity = chassis_pb2.Chassis() - entity.CopyFrom(data) - self.carspeed = entity.speed_mps - self.steer_angle = entity.steering_percentage / 100 * MaxSteerAngle / SteerRatio - - self.autodrive = ( - entity.driving_mode == chassis_pb2.Chassis.COMPLETE_AUTO_DRIVE) + """New localization pose""" + if self.stgraph: + return + self.carspeed = data.speed_mps + self.steer_angle = \ + data.steering_percentage / 100 * MaxSteerAngle / SteerRatio + + self.autodrive = (data.driving_mode == Chassis.COMPLETE_AUTO_DRIVE) self.carcurvature = math.tan( math.radians(self.steer_angle)) / VehicleLength def callback_localization(self, data): - """ - New localization pose - """ - entity = localization_pb2.LocalizationEstimate() - entity.CopyFrom(data) - quat = (entity.pose.orientation.qx, entity.pose.orientation.qy, - entity.pose.orientation.qz, entity.pose.orientation.qw) - heading = tf.transformations.euler_from_quaternion(quat) - carheading = (heading[2] + math.pi / 2 + math.pi) % ( - 2 * math.pi) - math.pi - carx = entity.pose.position.x - cary = entity.pose.position.y - cartime = entity.header.timestamp_sec + """New localization pose""" + if self.stgraph: + return + carheading = data.pose.heading + carx = data.pose.position.x + cary = data.pose.position.y + cartime = data.header.timestamp_sec with self.lock: - self.ax1.new_carstatus(cartime, carx, cary, carheading, - self.steer_angle, self.autodrive) - self.ax2.new_carstatus(cartime, self.carspeed, self.autodrive) - if self.ax3.title == "Curvature": - self.ax3.new_carstatus(cartime, self.carcurvature, - self.autodrive) - - if self.ax4.title == "Heading": - self.ax4.new_carstatus(cartime, carheading, self.autodrive) - else: - acc = entity.pose.linear_acceleration_vrf.y - self.ax4.new_carstatus(cartime, acc, self.autodrive) + self.ax[0].new_carstatus(cartime, carx, cary, carheading, + self.steer_angle, self.autodrive) + self.ax[1].new_carstatus(cartime, self.carspeed, self.autodrive) + self.ax[2].new_carstatus(cartime, self.carcurvature, self.autodrive) - def updatesub(self, planning_sub, localization_sub, chassis_sub): - """ - update subscriber - """ - self.planning_sub = planning_sub - self.localization_sub = localization_sub - self.chassis_sub = chassis_sub + if self.ax[3].title == "Heading": + self.ax[3].new_carstatus(cartime, carheading, self.autodrive) + else: + acc = data.pose.linear_acceleration_vrf.y + self.ax[3].new_carstatus(cartime, acc, self.autodrive) def press(self, event): - """ - Keyboard events during plotting - """ + """Keyboard events during plotting""" if event.key == 'q' or event.key == 'Q': plt.close('all') self.closed = True @@ -200,22 +157,13 @@ def press(self, event): if event.key == 'n' or event.key == 'N': with self.lock: - self.ax1.reset() - self.ax2.reset() - self.ax3.reset() - self.ax4.reset() + for ax in self.ax: + ax.reset() self.updategraph = True - if event.key == 'b' or event.key == 'B': - self.planning_sub.unregister() - self.localization_sub.unregister() - self.chassis_sub.unregister() - def main(argv): - """ - Main function - """ + """Main function""" argv = FLAGS(argv) print """ @@ -238,54 +186,64 @@ def main(argv): rospy.init_node('realtime_plot', anonymous=True) fig = plt.figure() - ax1 = plt.subplot(2, 2, 1) - item1 = Xyitem(ax1, WindowSize, VehicleLength, "Trajectory", "X [m]", - "Y [m]") - - ax2 = plt.subplot(2, 2, 2) - item2 = Item(ax2, "Speed", "Time [sec]", "Speed [m/s]", 0, 30) if not FLAGS.show_st_graph: + ax1 = plt.subplot(2, 2, 1) + item1 = Xyitem(ax1, WindowSize, VehicleLength, "Trajectory", "X [m]", + "Y [m]") + + ax2 = plt.subplot(2, 2, 2) + item2 = Item(ax2, "Speed", "Time [sec]", "Speed [m/s]", 0, 30) + ax3 = plt.subplot(2, 2, 3, sharex=ax2) item3 = Item(ax3, "Curvature", "Time [sec]", "Curvature [m-1]", -0.2, 0.2) + + ax4 = plt.subplot(2, 2, 4, sharex=ax2) + if not FLAGS.show_heading: + item4 = Item(ax4, "Acceleration", "Time [sec]", + "Acceleration [m/sec^2]", -5, 5) + else: + item4 = Item(ax4, "Heading", "Time [sec]", "Heading [radian]", -4, + 4) else: + ax1 = plt.subplot(2, 2, 1) + item1 = Stitem(ax1, "ST Graph", "Time [sec]", "S [m]") + + ax2 = plt.subplot(2, 2, 2) + item2 = Stitem(ax2, "ST Graph", "Time [sec]", "S [m]") + ax3 = plt.subplot(2, 2, 3) item3 = Stitem(ax3, "ST Graph", "Time [sec]", "S [m]") - ax4 = plt.subplot(2, 2, 4, sharex=ax2) - if not FLAGS.show_heading: - item4 = Item(ax4, "Acceleration", "Time [sec]", - "Acceleration [m/sec^2]", -5, 5) - else: - item4 = Item(ax4, "Heading", "Time [sec]", "Heading [radian]", -4, 4) + ax4 = plt.subplot(2, 2, 4) + item4 = Stitem(ax4, "ST Graph", "Time [sec]", "S [m]") plt.tight_layout(pad=0.20) plt.ion() - plt.show() - prevtime = 0 - plotter = Plotter(item1, item2, item3, item4) + plotter = Plotter(item1, item2, item3, item4, FLAGS.show_st_graph) fig.canvas.mpl_connect('key_press_event', plotter.press) planning_sub = rospy.Subscriber( '/apollo/planning', - planning_pb2.ADCTrajectory, + ADCTrajectory, plotter.callback_planning, queue_size=3) - localization_sub = rospy.Subscriber( - '/apollo/localization/pose', - localization_pb2.LocalizationEstimate, - plotter.callback_localization, - queue_size=3) - chassis_sub = rospy.Subscriber( - '/apollo/canbus/chassis', - chassis_pb2.Chassis, - plotter.callback_chassis, - queue_size=3) - plotter.updatesub(planning_sub, localization_sub, chassis_sub) - r = rospy.Rate(5) + if not FLAGS.show_st_graph: + localization_sub = rospy.Subscriber( + '/apollo/localization/pose', + LocalizationEstimate, + plotter.callback_localization, + queue_size=3) + chassis_sub = rospy.Subscriber( + '/apollo/canbus/chassis', + Chassis, + plotter.callback_chassis, + queue_size=3) + + rate = rospy.Rate(10) while not rospy.is_shutdown(): ax1.draw_artist(ax1.patch) ax2.draw_artist(ax2.patch) @@ -303,7 +261,7 @@ def main(argv): fig.canvas.blit(ax3.bbox) fig.canvas.blit(ax4.bbox) fig.canvas.flush_events() - r.sleep() + rate.sleep() if __name__ == '__main__': diff --git a/modules/tools/realtime_plot/stitem.py b/modules/tools/realtime_plot/stitem.py index 9e5f12628dc..7fba7086704 100644 --- a/modules/tools/realtime_plot/stitem.py +++ b/modules/tools/realtime_plot/stitem.py @@ -15,81 +15,62 @@ # See the License for the specific language governing permissions and # limitations under the License. ############################################################################### -""" -S T Item -""" +"""S T Item""" + +import numpy as np from matplotlib import lines +from matplotlib.patches import Polygon class Stitem(object): - """ - Specific item to plot - """ + """Specific item to plot""" - def __init__(self, ax, lines2display, title, xlabel, ylabel): + def __init__(self, ax, title, xlabel, ylabel): self.ax = ax - self.lines2display = lines2display - self.title = title self.ax.set_title(title) self.ax.set_xlabel(xlabel, fontsize=10) self.ax.set_ylabel(ylabel, fontsize=10) - - self.lines = [] - self.planningavailable = False def reset(self): - """ - Reset - """ - del self.lines[:] - + """Reset""" self.ax.cla() - self.ax.set_xlim([-0.1, 0.1]) self.ax.set_ylim([-0.1, 0.1]) - self.planningavailable = False - - def new_planning(self, time, values, maxtime, maxvalue): - """ - new planning - """ + def new_planning(self, time, values, polygons_t, polygons_s): + """new planning""" + max_time = max(time) + 1 + max_value = max(values) + 1 if self.planningavailable == False: - self.ax.set_xlim([0, maxtime + 1]) - self.ax.set_ylim([0, maxvalue + 10]) - self.ymax = maxvalue - self.tmax = maxtime - + self.ax.set_xlim([0, max_time]) + self.ax.set_ylim([0, max_value]) + self.ymax = max_value + self.tmax = max_time + self.current_line = lines.Line2D(time, values, color='red', lw=1.5) + self.ax.add_line(self.current_line) else: - self.current_line.set_color('cyan') - self.current_line.set_linestyle('dashed') - self.current_line.set_linewidth(1.5) - self.lines.append(self.current_line) + self.current_line.set_data(time, values) + _, xmax = self.ax.get_xlim() + if max_time > xmax: + self.ax.set_xlim([0, max_time]) + _, ymax = self.ax.get_ylim() + if max_value > ymax: + self.ax.set_ylim([0, max_value]) + + self.ax.patches = [] + for i in range(len(polygons_s)): + points = np.vstack((polygons_t[i], polygons_s[i])).T + polygon = Polygon(points) + self.ax.add_patch(polygon) - xmin, xmax = self.ax.get_xlim() - if maxtime > xmax: - self.ax.set_xlim([0, maxtime]) - - ymin, ymax = self.ax.get_ylim() - if maxvalue > ymax: - self.ax.set_ylim([0, maxvalue + 10]) - - self.current_line = lines.Line2D(time, values, color='red', lw=1.5) - self.ax.add_line(self.current_line) self.planningavailable = True def draw_lines(self): - """ - plot lines - """ + """plot lines""" for polygon in self.ax.patches: self.ax.draw_artist(polygon) - for i in range( - max(0, len(self.lines) - self.lines2display), len(self.lines)): - self.ax.draw_artist(self.lines[i]) - - if self.planningavailable: - self.ax.draw_artist(self.current_line) + for line in self.ax.lines: + self.ax.draw_artist(line) diff --git a/modules/tools/realtime_plot/xyitem.py b/modules/tools/realtime_plot/xyitem.py index 399fb778f27..4cdcc74452f 100644 --- a/modules/tools/realtime_plot/xyitem.py +++ b/modules/tools/realtime_plot/xyitem.py @@ -19,15 +19,14 @@ X Y Item """ import math -import numpy + +import numpy as np from matplotlib import lines from matplotlib import patches class Xyitem(object): - """ - XY item to plot - """ + """XY item to plot""" def __init__(self, ax, windowsize, vehiclelength, title, xlabel, ylabel): self.ax = ax @@ -60,11 +59,7 @@ def __init__(self, ax, windowsize, vehiclelength, title, xlabel, ylabel): self.planningavailable = False def reset(self): - """ - Reset - """ - del self.lines[:] - + """Reset""" del self.pathstartx[:] del self.pathstarty[:] @@ -87,9 +82,7 @@ def reset(self): self.planningavailable = False def new_planning(self, time, x, y): - """ - new planning - """ + """new planning""" self.planningtime = time self.planningx = x self.planningy = y @@ -115,16 +108,12 @@ def new_planning(self, time, x, y): self.planningavailable = True def new_carstatus(self, time, x, y, heading, steer_angle, autodriving): - """ - new carstatus - """ + """new carstatus""" self.carxhist.append(x) self.caryhist.append(y) angle = math.degrees(heading) - 90 - carcolor = 'blue' - if autodriving: - carcolor = 'red' + carcolor = 'red' if autodriving else 'blue' if self.carxyhistidx == -1: self.ax.plot(self.carxhist, self.caryhist, color="blue") self.carxyhistidx = len(self.ax.lines) - 1 @@ -146,9 +135,9 @@ def new_carstatus(self, time, x, y, heading, steer_angle, autodriving): self.ax.patches[0].remove() if self.planningavailable: - xtarget = numpy.interp(time, self.planningtime, self.planningx) + xtarget = np.interp(time, self.planningtime, self.planningx) self.targetx.append(xtarget) - ytarget = numpy.interp(time, self.planningtime, self.planningy) + ytarget = np.interp(time, self.planningtime, self.planningy) self.targety.append(ytarget) if self.targethistidx == -1: @@ -159,7 +148,6 @@ def new_carstatus(self, time, x, y, heading, steer_angle, autodriving): self.targetx, self.targety) self.ax.add_patch(self.gen_steer_curve(x, y, heading, steer_angle)) - #print "add patch" # Update Window X, Y Axis Limits xcenter = x + math.cos(heading) * 40 ycenter = y + math.sin(heading) * 40 @@ -180,9 +168,7 @@ def new_carstatus(self, time, x, y, heading, steer_angle, autodriving): ]) def gen_steer_curve(self, x, y, heading, steer_angle): - """ - Generate Steering Curve to predict car trajectory - """ + """Generate Steering Curve to predict car trajectory""" if abs(math.tan(math.radians(steer_angle))) > 0.0001: R = self.vehiclelength / math.tan(math.radians(steer_angle)) else: @@ -216,17 +202,9 @@ def gen_steer_curve(self, x, y, heading, steer_angle): return curve def draw_lines(self): - """ - plot lines - """ - if self.planningavailable: - self.ax.draw_artist(self.ax.lines[self.pathstartidx]) - self.ax.draw_artist(self.current_line) - - if self.targethistidx != -1: - self.ax.draw_artist(self.ax.lines[self.targethistidx]) + """plot lines""" + for polygon in self.ax.patches: + self.ax.draw_artist(polygon) - if self.carposidx != -1: - self.ax.draw_artist(self.ax.patches[0]) - self.ax.draw_artist(self.ax.lines[self.carxyhistidx]) - self.ax.draw_artist(self.ax.lines[self.carposidx]) + for line in self.ax.lines: + self.ax.draw_artist(line) diff --git a/modules/tools/record_play/README.md b/modules/tools/record_play/README.md index e06689fe5f7..d47ad644915 100644 --- a/modules/tools/record_play/README.md +++ b/modules/tools/record_play/README.md @@ -1,22 +1,27 @@ # Record and Play Tool -### Prerequisite +## Prerequisite + Run the following command from your Apollo root dir: + ```bash bash apollo.sh build -source modules/tools/setup_pythonpath.sh +source scripts/apollo_base.sh ``` -### Recorder -This tool records trajectory information from gateway into a csv file, the file name is defined in -filename_path. +## Recorder + +This tool records trajectory information from gateway into a csv file, the file +name is defined in filename_path. + ```bash python modules/tools/record_play/recorder_path.py ``` -### Player -This tool reads information from a csv file and publishes planning trajectory in the same format as -real planning node. +## Player + +This tool reads information from a csv file and publishes planning trajectory in +the same format as real planning node. Argument: Speed multiplier (default: 100) diff --git a/modules/tools/record_play/logger.py b/modules/tools/record_play/logger.py index 23b1a217af3..1965a75aedb 100644 --- a/modules/tools/record_play/logger.py +++ b/modules/tools/record_play/logger.py @@ -19,9 +19,9 @@ This module provides the logging function. """ -import os import logging import logging.handlers +import os class Logger(object): diff --git a/modules/tools/record_play/rtk_player.py b/modules/tools/record_play/rtk_player.py index bd07a0147f1..0318ec70409 100644 --- a/modules/tools/record_play/rtk_player.py +++ b/modules/tools/record_play/rtk_player.py @@ -20,16 +20,18 @@ """ import argparse +import atexit +import logging import os -import rospy import sys -from numpy import genfromtxt + +import rospy import scipy.signal as signal -import atexit -import logging from logger import Logger +from numpy import genfromtxt from modules.canbus.proto import chassis_pb2 +from modules.common.proto import pnc_point_pb2 from modules.control.proto import pad_msg_pb2 from modules.hmi.proto import runtime_status_pb2 from modules.localization.proto import localization_pb2 @@ -132,7 +134,7 @@ def restart(self): self.logger.info("before replan self.start=%s, self.closestpoint=%s" % (self.start, self.closestpoint)) - self.closestpoint = closest_dist() + self.closestpoint = self.closest_dist() self.start = max(self.closestpoint - 100, 0) self.starttime = rospy.get_time() self.end = min(self.start + 1000, len(self.data) - 1) @@ -193,8 +195,8 @@ def publish_planningmsg(self): % (self.replan, self.sequence_num, self.automode)) self.restart() else: - timepoint = closest_time() - distpoint = closest_dist() + timepoint = self.closest_time() + distpoint = self.closest_dist() self.start = max(min(timepoint, distpoint) - 100, 0) self.end = min(max(timepoint, distpoint) + 900, len(self.data) - 1) @@ -213,15 +215,15 @@ def publish_planningmsg(self): % (self.start, self.end)) for i in range(self.start, self.end): - adc_point = planning_pb2.ADCTrajectoryPoint() - adc_point.x = self.data['x'][i] - adc_point.y = self.data['y'][i] - adc_point.z = self.data['z'][i] - adc_point.speed = self.data['speed'][i] * self.speedmultiplier - adc_point.acceleration_s = self.data['acceleration'][ + adc_point = pnc_point_pb2.TrajectoryPoint() + adc_point.path_point.x = self.data['x'][i] + adc_point.path_point.y = self.data['y'][i] + adc_point.path_point.z = self.data['z'][i] + adc_point.v = self.data['speed'][i] * self.speedmultiplier + adc_point.a = self.data['acceleration'][ i] * self.speedmultiplier - adc_point.curvature = self.data['curvature'][i] - adc_point.curvature_change_rate = self.data[ + adc_point.path_point.kappa = self.data['curvature'][i] + adc_point.path_point.dkappa = self.data[ 'curvature_change_rate'][i] time_diff = self.data['time'][i] - \ @@ -230,10 +232,10 @@ def publish_planningmsg(self): adc_point.relative_time = time_diff / self.speedmultiplier - ( now - self.starttime) - adc_point.theta = self.data['theta'][i] - adc_point.accumulated_s = self.data['s'][i] + adc_point.path_point.theta = self.data['theta'][i] + adc_point.path_point.s = self.data['s'][i] - planningdata.adc_trajectory_point.extend([adc_point]) + planningdata.trajectory_point.extend([adc_point]) planningdata.estop.is_estop = self.estop @@ -241,7 +243,7 @@ def publish_planningmsg(self): self.data['s'][self.start] planningdata.total_path_time = self.data['time'][self.end] - \ self.data['time'][self.start] - planningdata.gear = int(self.data['gear'][closest_time()]) + planningdata.gear = int(self.data['gear'][self.closest_time()]) self.planning_pub.publish(planningdata) self.logger.debug("Generated Planning Sequence: " + diff --git a/modules/tools/record_play/rtk_recorder.py b/modules/tools/record_play/rtk_recorder.py index c4b05640d57..2c3641c7837 100644 --- a/modules/tools/record_play/rtk_recorder.py +++ b/modules/tools/record_play/rtk_recorder.py @@ -19,18 +19,20 @@ Record GPS and IMU data """ +import atexit +import logging import math import os -import rospy import sys + +import rospy import tf -from std_msgs.msg import String from gflags import FLAGS -import logging -import atexit +from std_msgs.msg import String + from logger import Logger -from modules.localization.proto import localization_pb2 from modules.canbus.proto import chassis_pb2 +from modules.localization.proto import localization_pb2 class RtkRecord(object): diff --git a/modules/tools/replay/replay_file.py b/modules/tools/replay/replay_file.py new file mode 100644 index 00000000000..61d17fd41cb --- /dev/null +++ b/modules/tools/replay/replay_file.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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 program can replay a planning output pb file via ros +""" +import os.path +import sys +import argparse +import rospy +from std_msgs.msg import String +from google.protobuf import text_format + +from modules.localization.proto import localization_pb2 +from modules.perception.proto import perception_obstacle_pb2 +from modules.perception.proto import traffic_light_detection_pb2 +from modules.planning.proto import planning_internal_pb2 +from modules.planning.proto import planning_pb2 +from modules.prediction.proto import prediction_obstacle_pb2 +from modules.routing.proto import routing_pb2 + + +def generate_message(topic, filename): + """generate message from file""" + message = None + if topic == "/apollo/planning": + message = planning_pb2.ADCTrajectory() + elif topic == "/apollo/localization/pose": + message = localization_pb2.LocalizationEstimate() + elif topic == "/apollo/perception/obstacles": + message = perception_obstacle_pb2.PerceptionObstacles() + elif topic == "/apollo/prediction": + message = prediction_obstacle_pb2.PredictionObstacles() + elif topic == "/apollo/routing_response": + message = routing_pb2.RoutingResponse() + if not message: + print "Unknown topic:", topic + sys.exit(0) + if not os.path.exists(filename): + return None + f_handle = file(filename, 'r') + text_format.Merge(f_handle.read(), message) + f_handle.close() + return message + + +def topic_publisher(topic, filename, period): + """publisher""" + rospy.init_node('replay_node', anonymous=True) + pub = rospy.Publisher(topic, String, queue_size=1) + rate = rospy.Rate(int(1.0 / period)) + message = generate_message(topic, filename) + while not rospy.is_shutdown(): + pub.publish(str(message)) + rate.sleep() + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description="replay a planning result pb file") + parser.add_argument( + "filename", action="store", type=str, help="planning result files") + parser.add_argument( + "topic", action="store", type=str, help="set the planning topic") + parser.add_argument( + "--period", + action="store", + type=float, + default=1, + help="set the topic publish time duration") + args = parser.parse_args() + try: + topic_publisher(args.topic, args.filename, args.period) + + except rospy.ROSInterruptException: + print "failed to replay message" diff --git a/modules/tools/replay/replay_sequence.py b/modules/tools/replay/replay_sequence.py new file mode 100644 index 00000000000..e4aa6b1c967 --- /dev/null +++ b/modules/tools/replay/replay_sequence.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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 program can replay a planning output pb file via ros +""" +import os.path +import sys +import argparse +import rospy +from std_msgs.msg import String +from google.protobuf import text_format + +from modules.localization.proto import localization_pb2 +from modules.perception.proto import perception_obstacle_pb2 +from modules.perception.proto import traffic_light_detection_pb2 +from modules.planning.proto import planning_internal_pb2 +from modules.planning.proto import planning_pb2 +from modules.prediction.proto import prediction_obstacle_pb2 +from modules.routing.proto import routing_pb2 + + +def generate_message(filename, pb_type): + f_handle = file(filename, 'r') + message = pb_type() + text_format.Merge(f_handle.read(), message) + f_handle.close() + return message + + +def seq_publisher(seq_num, period): + """publisher""" + rospy.init_node('replay_node', anonymous=True) + + # topic_name => module_name, pb type, pb, publish_handler + topic_name_map = { + "/apollo/localization/pose": + ["localization", localization_pb2.LocalizationEstimate, None, None], + "/apollo/routing_response": + ["routing", routing_pb2.RoutingResponse, None, None], + "/apollo/perception/obstacles": [ + "perception", perception_obstacle_pb2.PerceptionObstacles, None, + None + ], + "/apollo/prediction": [ + "prediction", prediction_obstacle_pb2.PredictionObstacles, None, + None + ], + "/apollo/planning": + ["planning", planning_pb2.ADCTrajectory, None, None], + } + for topic, module_features in topic_name_map.iteritems(): + filename = str(seq_num) + "_" + module_features[0] + ".pb.txt" + print "trying to load pb file:", filename + module_features[3] = rospy.Publisher( + topic, module_features[1], queue_size=1) + module_features[2] = generate_message(filename, module_features[1]) + if module_features[2] is None: + print topic, " pb is none" + + rate = rospy.Rate(int(1.0 / period)) # 10hz + while not rospy.is_shutdown(): + for topic, module_features in topic_name_map.iteritems(): + if not module_features[2] is None: + module_features[3].publish(module_features[2]) + rate.sleep() + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description="replay a set of pb files with the same sequence number") + parser.add_argument( + "seq", + action="store", + type=int, + default=-1, + help="set sequence number to replay") + parser.add_argument( + "--period", + action="store", + type=float, + default=1, + help="set the topic publish time duration") + args = parser.parse_args() + try: + seq_publisher(args.seq, args.period) + + except rospy.ROSInterruptException: + print "failed to replay message" diff --git a/modules/tools/rosbag/dumpbag.py b/modules/tools/rosbag/dumpbag.py new file mode 100755 index 00000000000..ee7cc4eaf86 --- /dev/null +++ b/modules/tools/rosbag/dumpbag.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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 program can dump a rosbag into separate text files that contains the pb messages +""" + +import argparse +import os +import shutil + +import rosbag +import std_msgs +from std_msgs.msg import String + +g_args = None + +g_delta_t = 0.5 # 1 second approximate time match region. + +def write_to_file(file_path, topic_pb): + """write pb message to file""" + f = file(file_path, 'w') + f.write(str(topic_pb)) + f.close() + + +def dump_bag(in_bag, out_dir): + """out_bag = in_bag + routing_bag""" + bag = rosbag.Bag(in_bag, 'r') + seq = 0 + global g_args + topic_name_map = { + "/apollo/localization/pose" : ["localization", None], + "/apollo/canbus/chassis" : ["chassis", None], + "/apollo/routing_response" : ["routing", None], + "/apollo/routing_resquest" : ["routing_request", None], + "/apollo/perception/obstacles" : ["perception", None], + "/apollo/prediction" : ["prediction", None], + "/apollo/planning" : ["planning", None], + "/apollo/control" : ["control", None] + } + first_time = None + record_num = 0 + for topic, msg, t in bag.read_messages(): + record_num += 1 + if record_num % 1000 == 0: + print "Processing record_num:", record_num + if first_time is None: + first_time = t + if topic not in topic_name_map: + continue + relative_time = (t - first_time).secs - g_args.start_time + if ((g_args.time_duration > 0) and + (relative_time < 0 or relative_time > g_args.time_duration)): + continue + if topic == "/apollo/planning": + seq += 1 + topic_name_map[topic][1] = msg + print "Generating seq:", seq + for t, name_pb in topic_name_map.iteritems(): + if name_pb[1] is None: + continue + file_path = os.path.join(out_dir, + str(seq) + "_" + name_pb[0] + ".pb.txt") + write_to_file(file_path, name_pb[1]) + topic_name_map[topic][1] = msg + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description= + "A tool to dump the protobuf messages in a ros bag into text files") + parser.add_argument( + "in_rosbag", action="store", type=str, help="the input ros bag") + parser.add_argument( + "out_dir", + action="store", + help="the output directory for the dumped file") + parser.add_argument( + "--start_time", + type=float, + action="store", + default=0.0, + help="""The time range to extract in second""") + parser.add_argument( + "--time_duration", + type=float, + action="store", + default=-1, + help="""time duration to extract in second, negative to extract all""") + + g_args = parser.parse_args() + + if os.path.exists(g_args.out_dir): + shutil.rmtree(g_args.out_dir) + os.makedirs(g_args.out_dir) + dump_bag(g_args.in_rosbag, g_args.out_dir) diff --git a/modules/tools/routing/debug_passage_region.py b/modules/tools/routing/debug_passage_region.py new file mode 100644 index 00000000000..96797b57834 --- /dev/null +++ b/modules/tools/routing/debug_passage_region.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +import itertools +import sys + +import matplotlib.pyplot as plt + +import common.proto_utils as proto_utils +import debug_topo +from modules.routing.proto.routing_pb2 import RoutingResponse +from modules.routing.proto.topo_graph_pb2 import Graph + + +color_iter = itertools.cycle( + ['navy', 'c', 'cornflowerblue', 'gold', 'darkorange']) +g_central_curve_dict = {} +g_center_point_dict = {} + + +def get_center_of_passage_region(region): + """Get center of passage region center curve""" + center_points = [g_center_point_dict[seg.id] for seg in region.segment] + return center_points[len(center_points) // 2] + + +def plot_region(region, color): + "Plot passage region" + for seg in region.segment: + center_pt = debug_topo.plot_central_curve_with_s_range( + g_central_curve_dict[seg.id], seg.start_s, seg.end_s, color=color) + debug_topo.draw_id(center_pt, seg.id, 'r') + g_center_point_dict[seg.id] = center_pt + print 'Plot lane id: %s, start s: %f, end s: %f' % (seg.id, seg.start_s, + seg.end_s) + + +def plot_lane_change(lane_change, passage_regions): + """Plot lane change infomation""" + st_idx = lane_change.start_passage_region_index + ed_idx = lane_change.end_passage_region_index + from_pt = get_center_of_passage_region(passage_regions[st_idx]) + to_pt = get_center_of_passage_region(passage_regions[ed_idx]) + plt.gca().annotate( + "", + xy=(to_pt[0], to_pt[1]), + xytext=(from_pt[0], from_pt[1]), + arrowprops=dict( + facecolor='blue', edgecolor='none', alpha=0.7, shrink=0.05)) + + +def plot_road(road): + """Plot road""" + for region in road.passage_region: + plot_region(region, 'green') + for lane_change in road.lane_change_info: + plot_lane_change(lane_change, road.passage_region) + + +def plot_junction(junction): + """Plot junction""" + plot_region(junction.passage_region, 'red') + + +def plot_result(routing_result, central_curve_dict): + """Plot routing result""" + plt.close() + plt.figure() + for way in routing_result.route: + if way.HasField("road_info"): + plot_road(way.road_info) + else: + plot_junction(way.junction_info) + + plt.gca().set_aspect(1) + plt.title('Passage region') + plt.xlabel('x') + plt.ylabel('y') + plt.legend() + + plt.draw() + + +def print_help(): + """Print help information. + + Print help information of usage. + + Args: + + """ + print 'usage:' + print ' python debug_topo.py file_path, then', + print_help_command() + + +def print_help_command(): + """Print command help information. + + Print help information of command. + + Args: + + """ + print 'type in command: [q] [r]' + print ' q exit' + print ' p plot passage region' + + +if __name__ == '__main__': + if len(sys.argv) != 3: + print_help() + sys.exit(0) + print 'Please wait for loading data...' + + topo_graph_file = sys.argv[1] + graph = proto_utils.get_pb_from_bin_file(topo_graph_file, Graph()) + g_central_curve_dict = {nd.lane_id : nd.central_curve for nd in graph.node} + + plt.ion() + while 1: + print_help_command() + print 'cmd>', + instruction = raw_input() + argv = instruction.strip(' ').split(' ') + if len(argv) == 1: + if argv[0] == 'q': + sys.exit(0) + elif argv[0] == 'p': + routing_result_file = sys.argv[2] + result = proto_utils.get_pb_from_bin_file(routing_result_file, + RoutingResponse()) + plot_result(result, g_central_curve_dict) + else: + print '[ERROR] wrong command' + continue + + else: + print '[ERROR] wrong arguments' + continue diff --git a/modules/tools/routing/debug_route.py b/modules/tools/routing/debug_route.py new file mode 100644 index 00000000000..bc49150ab08 --- /dev/null +++ b/modules/tools/routing/debug_route.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +import itertools +import os +import sys + +import gflags +import matplotlib.pyplot as plt + +import debug_topo +import modules.routing.proto.topo_graph_pb2 as topo_graph_pb2 +import util + + +color_iter = itertools.cycle( + ['navy', 'c', 'cornflowerblue', 'gold', 'darkorange']) + + +def read_route(route_file_name): + """Read route result text file""" + fin = open(route_file_name) + route = [] + for line in fin: + lane = {} + items = line.strip().split(',') + lane['id'] = items[0] + lane['is virtual'] = int(items[1]) + lane['start s'] = float(items[2]) + lane['end s'] = float(items[3]) + route.append(lane) + return route + + +def plot_route(lanes, central_curve_dict): + """Plot route result""" + plt.close() + plt.figure() + for lane in lanes: + lane_id = lane['id'] + if lane['is virtual']: + color = 'red' + else: + color = 'green' + mid_pt = debug_topo.plot_central_curve_with_s_range( + central_curve_dict[lane_id], + lane['start s'], + lane['end s'], + color=color) + debug_topo.draw_id(mid_pt, lane_id, 'y') + plt.gca().set_aspect(1) + plt.title('Routing result') + plt.xlabel('x') + plt.ylabel('y') + plt.legend() + + plt.draw() + + +def print_help_command(): + """Print command help information. + + Print help information of command. + + Args: + + """ + print 'type in command: [q] [r]' + print ' q exit' + print ' r plot route result' + print ' r_map plot route result with map' + + +if __name__ == '__main__': + map_dir = util.get_map_dir(sys.argv) + graph = util.get_topodata(map_dir) + base_map = util.get_mapdata(map_dir) + route = util.get_routingdata() + + central_curves = {} + for nd in graph.node: + central_curves[nd.lane_id] = nd.central_curve + + plt.ion() + while 1: + print_help_command() + print 'cmd>', + instruction = raw_input() + argv = instruction.strip(' ').split(' ') + if len(argv) == 1: + if argv[0] == 'q': + sys.exit(0) + elif argv[0] == 'r': + plot_route(route, central_curves) + elif argv[0] == 'r_map': + plot_route(route, central_curves) + util.draw_map(plt.gca(), base_map) + else: + print '[ERROR] wrong command' + continue + + else: + print '[ERROR] wrong arguments' + continue diff --git a/modules/tools/routing/debug_topo.py b/modules/tools/routing/debug_topo.py new file mode 100644 index 00000000000..c1a73787cb6 --- /dev/null +++ b/modules/tools/routing/debug_topo.py @@ -0,0 +1,256 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +import itertools +import math +import sys + +import matplotlib.pyplot as plt + +import common.proto_utils as proto_utils +import modules.routing.proto.topo_graph_pb2 as topo_graph_pb2 +import util + +color_iter = itertools.cycle( + ['navy', 'c', 'cornflowerblue', 'gold', 'darkorange']) + + +def calculate_s(px, py): + """Calculate s array based on x and y arrays""" + dis = 0.0 + ps = [dis] + for i in range(len(px) - 1): + gap = math.sqrt(pow(px[i + 1] - px[i], 2) + pow(py[i + 1] - py[i], 2)) + dis = dis + gap + ps.append(dis) + return ps + + +def draw_line(line, color): + """draw line, return x array and y array""" + px, py = proto_utils.flatten(line.point, ['x', 'y']) + px, py = util.downsample_array(px), util.downsample_array(py) + plt.gca().plot(px, py, color=color, lw=3, alpha=0.8) + return px, py + + +def draw_arc(arc): + """draw arc""" + xy = (arc.center.x, arc.center.y) + start = 0 + end = 0 + if arc.start_angle < arc.end_angle: + start = arc.start_angle / math.pi * 180 + end = arc.end_angle / math.pi * 180 + else: + end = arc.start_angle / math.pi * 180 + start = arc.end_angle / math.pi * 180 + + pac = mpatches.Arc( + xy, arc.radius * 2, arc.radius * 2, angle=0, theta1=start, theta2=end) + + plt.gca().add_patch(pac) + + +def draw_id(coordinate, id_string, color): + """draw id""" + x = coordinate[0] + y = coordinate[1] + plt.annotate( + id_string, + xy=(x, y), + xytext=(30, 30), + textcoords='offset points', + bbox=dict(boxstyle='round,pad=0.5', fc=color, alpha=0.5), + arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0'), + horizontalalignment='right', + verticalalignment='bottom') + + +def plot_central_curve_with_s_range(central_curve, start_s, end_s, color): + """plot topology graph node with given start and end s, return middle point""" + node_x = [] + node_y = [] + for curve in central_curve.segment: + px, py = proto_utils.flatten(curve.line_segment.point, ['x', 'y']) + node_x.extend(px) + node_y.extend(py) + start_plot_index = 0 + end_plot_index = len(node_x) + node_s = calculate_s(node_x, node_y) + for i in range(len(node_s)): + if node_s[i] >= start_s: + start_plot_index = i + break + for i in range(len(node_s) - 1, -1, -1): + if node_s[i] <= end_s: + end_plot_index = i + 1 + break + plt.gca().plot( + node_x[start_plot_index:end_plot_index], + node_y[start_plot_index:end_plot_index], + color=color, + lw=3, + alpha=0.8) + mid_index = (start_plot_index + end_plot_index) // 2 + return [node_x[mid_index], node_y[mid_index]] + + +def plot_central_curve(central_curve, color): + """plot topology graph node, return node middle point""" + node_x = [] + node_y = [] + for curve in central_curve.segment: + if curve.HasField('line_segment'): + px, py = draw_line(curve.line_segment, color) + node_x = node_x + px + node_y = node_y + py + #if curve.HasField('arc'): + # draw_arc(curve.arc) + return [node_x[len(node_x) / 2], node_y[len(node_y) / 2]] + + +def plot_node(node, plot_id, color): + """plot topology graph node""" + print 'length of %s: %f' % (node.lane_id, node.length) + mid_pt = plot_central_curve(node.central_curve, color) + if 'l' in plot_id: + draw_id(mid_pt, node.lane_id, 'green') + if 'r' in plot_id: + draw_id(mid_pt, node.road_id, 'red') + return mid_pt + + +def plot_edge(edge, midddle_point_map): + """plot topology graph edge""" + if edge.direction_type == topo_graph_pb2.Edge.FORWARD: + return + # if lane change is allowed, draw an arrow from lane with from_id to lane with to_id + from_id = edge.from_lane_id + from_pt = midddle_point_map[from_id] + to_id = edge.to_lane_id + to_pt = midddle_point_map[to_id] + plt.gca().annotate( + "", + xy=(to_pt[0], to_pt[1]), + xytext=(from_pt[0], from_pt[1]), + arrowprops=dict(arrowstyle="->", connectionstyle="arc3")) + + +def plot_all(graph, plot_id=''): + """plot topology graph""" + plt.close() + fig = plt.figure() + fig.canvas.mpl_connect('button_press_event', util.onclick) + lane_middle_point_map = {} + for i, (nd, color) in enumerate(zip(graph.node, color_iter)): + nd_mid_pt = plot_node(nd, plot_id, color) + lane_middle_point_map[nd.lane_id] = nd_mid_pt + for i, eg in enumerate(graph.edge): + plot_edge(eg, lane_middle_point_map) + plt.gca().set_aspect(1) + plt.title('Routing topology graph') + plt.xlabel('x') + plt.ylabel('y') + plt.legend() + + plt.draw() + + +def plot_id(graph, lane_id): + """plot topology graph""" + plt.close() + fig = plt.figure() + fig.canvas.mpl_connect('button_press_event', util.onclick) + lane_middle_point_map = {} + plot_ids = [lane_id] + for eg in graph.edge: + if eg.from_lane_id == lane_id: + plot_ids.append(eg.to_lane_id) + for i, (nd, color) in enumerate(zip(graph.node, color_iter)): + if nd.lane_id in plot_ids: + nd_mid_pt = plot_node(nd, 'l', color) + lane_middle_point_map[nd.lane_id] = nd_mid_pt + for i, eg in enumerate(graph.edge): + if eg.from_lane_id == lane_id: + plot_edge(eg, lane_middle_point_map) + plt.gca().set_aspect(1) + plt.title('Routing topology graph') + plt.xlabel('x') + plt.ylabel('y') + plt.legend() + + plt.draw() + + +def print_help_command(): + """Print command help information. + + Print help information of command. + + Args: + + """ + print 'type in command: [q] [a] [i lane_id]' + print ' q exit' + print ' a plot all topology' + print ' a_id plot all topology with lane id' + print ' a_rid plot all topology with road id' + print ' i lane_id plot lanes could be reached from lane with lane_id' + print ' i_map lane_id plot lanes could be reached from lane with lane_id, with map' + + +if __name__ == '__main__': + map_dir = util.get_map_dir(sys.argv) + graph = util.get_topodata(map_dir) + base_map = util.get_mapdata(map_dir) + print "district: %s" % graph.hdmap_district + print "version: %s" % graph.hdmap_version + + plt.ion() + while 1: + print_help_command() + print 'cmd>', + instruction = raw_input() + argv = instruction.strip(' ').split(' ') + if len(argv) == 1: + if argv[0] == 'q': + sys.exit(0) + elif argv[0] == 'a': + plot_all(graph) + elif argv[0] == 'a_id': + plot_all(graph, 'l') + elif argv[0] == 'a_rid': + plot_all(graph, 'r') + else: + print '[ERROR] wrong command' + continue + + if len(argv) == 2: + if argv[0] == 'i': + plot_id(graph, argv[1]) + elif argv[0] == 'i_map': + plot_id(graph, argv[1]) + util.draw_map(plt.gca(), base_map) + else: + print '[ERROR] wrong command' + continue + + else: + print '[ERROR] wrong arguments' + continue diff --git a/modules/tools/routing/road_show.py b/modules/tools/routing/road_show.py new file mode 100644 index 00000000000..c4e03f799cf --- /dev/null +++ b/modules/tools/routing/road_show.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### +"""Show road.""" + +import sys + +import matplotlib.pyplot as plt + +import common.proto_utils as proto_utils +import util + +g_color = [ + 'navy', 'c', 'cornflowerblue', 'gold', 'darkorange', 'darkviolet', + 'aquamarine', 'firebrick', 'limegreen' +] + + +def draw_line(line_segment, color): + """ + :param line_segment: + :return: none + """ + px, py = proto_utils.flatten(line_segment.point, ['x', 'y']) + px, py = downsample_array(px), downsample_array(py) + plt.gca().plot(px, py, lw=10, alpha=0.8, color=color) + return px[len(px) // 2], py[len(py) // 2] + + +def draw_arc(arc): + """ + :param arc: proto obj + :return: none + """ + xy = (arc.center.x, arc.center.y) + start = 0 + end = 0 + if arc.start_angle < arc.end_angle: + start = arc.start_angle / math.pi * 180 + end = arc.end_angle / math.pi * 180 + else: + end = arc.start_angle / math.pi * 180 + start = arc.end_angle / math.pi * 180 + + pac = mpatches.Arc( + xy, arc.radius * 2, arc.radius * 2, angle=0, theta1=start, theta2=end) + + plt.gca().add_patch(pac) + + +def downsample_array(array): + """down sample given array""" + skip = 5 + result = array[::skip] + result.append(array[-1]) + return result + + +def draw_boundary(line_segment): + """ + :param line_segment: + :return: + """ + px, py = proto_utils.flatten(line_segment.point, ['x', 'y']) + px, py = downsample_array(px), downsample_array(py) + plt.gca().plot(px, py, 'k') + + +def draw_id(x, y, id_string): + """Draw id_string on (x, y)""" + plt.annotate( + id_string, + xy=(x, y), + xytext=(40, -40), + textcoords='offset points', + ha='right', + va='bottom', + bbox=dict(boxstyle='round,pad=0.5', fc='green', alpha=0.5), + arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0')) + + +def get_road_index_of_lane(lane_id, road_lane_set): + """Get road index of lane""" + for i, lane_set in enumerate(road_lane_set): + if lane_id in lane_set: + return i + return -1 + + +def draw_map(drivemap): + """ draw map from mapfile""" + print 'Map info:' + print '\tVersion:\t', + print drivemap.header.version + print '\tDate:\t', + print drivemap.header.date + print '\tDistrict:\t', + print drivemap.header.district + + road_lane_set = [] + for road in drivemap.road: + lanes = [] + for sec in road.section: + lanes.extend(proto_utils.flatten(sec.lane_id, 'id')) + road_lane_set.append(lanes) + + for lane in drivemap.lane: + for curve in lane.central_curve.segment: + if curve.HasField('line_segment'): + road_idx = get_road_index_of_lane(lane.id.id, road_lane_set) + if road_idx == -1: + print 'Failed to get road index of lane' + sys.exit(-1) + center_x, center_y = draw_line(curve.line_segment, + g_color[road_idx % len(g_color)]) + draw_id(center_x, center_y, str(road_idx)) + #break + #if curve.HasField('arc'): + # draw_arc(curve.arc) + + for curve in lane.left_boundary.curve.segment: + if curve.HasField('line_segment'): + draw_boundary(curve.line_segment) + + for curve in lane.right_boundary.curve.segment: + if curve.HasField('line_segment'): + draw_boundary(curve.line_segment) + #break + + return drivemap + + +if __name__ == "__main__": + print "Reading map data" + map_dir = util.get_map_dir(sys.argv) + base_map = util.get_mapdata(map_dir) + print "Done reading map data" + plt.subplots() + draw_map(base_map) + plt.axis('equal') + plt.show() diff --git a/modules/tools/routing/util.py b/modules/tools/routing/util.py new file mode 100644 index 00000000000..190ca6d604e --- /dev/null +++ b/modules/tools/routing/util.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +import sys +import gflags +import os + +import modules.map.proto.map_pb2 as map_pb2 +import modules.routing.proto.topo_graph_pb2 as topo_graph_pb2 +import modules.routing.proto.routing_pb2 as routing_pb2 +from google.protobuf import text_format +import matplotlib.pyplot as plt + +FLAGS = gflags.FLAGS +gflags.DEFINE_string('map_dir', 'modules/map/data/demo', 'map directory') + + +def get_map_dir(argv): + """ + + """ + sys.argv.insert(1, '--undefok') + flagfile = os.path.normpath( + os.path.join( + os.path.dirname(__file__), '../../common/data', + 'global_flagfile.txt')) + sys.argv.insert(2, '--flagfile=' + flagfile) + argv = FLAGS(sys.argv) + mapdir = os.path.normpath( + os.path.join(os.path.dirname(__file__), '../../../', FLAGS.map_dir)) + print "Map dir: ", FLAGS.map_dir + return mapdir + + +def get_mapdata(map_dir): + print 'Please wait for loading map data...' + map_data_path = os.path.join(map_dir, 'base_map.bin') + print "file: ", map_data_path + f_handle = open(map_data_path) + base_map = map_pb2.Map() + base_map.ParseFromString(f_handle.read()) + f_handle.close() + print 'Done' + return base_map + + +def get_topodata(map_dir): + print 'Please wait for loading routing topo data...' + topo_data_path = os.path.join(map_dir, 'routing_map.bin') + print "file: ", topo_data_path + f_handle = open(topo_data_path) + graph = topo_graph_pb2.Graph() + graph.ParseFromString(f_handle.read()) + f_handle.close() + print 'Done' + return graph + + +def get_routingdata(): + print 'Please wait for loading route response data...' + log_dir = os.path.normpath( + os.path.join(os.path.dirname(__file__), '../../../data/log')) + route_data_path = os.path.join(log_dir, 'passage_region_debug.bin') + print "file: ", route_data_path + f_handle = open(route_data_path) + route = routing_pb2.RoutingResponse() + text_format.Parse(f_handle.read(), route) + f_handle.close() + print "Done" + return route + + +def onclick(event): + """Event function when mouse left button is clicked""" + print '\nClick captured! x=%f\ty=%f' % (event.xdata, event.ydata) + print 'cmd>', + + +def downsample_array(array, step=5): + """down sample given array""" + result = array[::step] + result.append(array[-1]) + return result + + +def draw_boundary(ax, line_segment): + """ + :param line_segment: + :return: + """ + px = [] + py = [] + for p in line_segment.point: + px.append(float(p.x)) + py.append(float(p.y)) + px = downsample_array(px) + py = downsample_array(py) + ax.plot(px, py, 'k', lw=0.4) + + +def draw_map(ax, mapfile): + """ draw map from mapfile""" + + for lane in mapfile.lane: + for curve in lane.left_boundary.curve.segment: + if curve.HasField('line_segment'): + draw_boundary(ax, curve.line_segment) + + for curve in lane.right_boundary.curve.segment: + if curve.HasField('line_segment'): + draw_boundary(ax, curve.line_segment) + plt.draw() diff --git a/scripts/apollo_base.sh b/scripts/apollo_base.sh index cde81d302b4..65c2f5b287e 100755 --- a/scripts/apollo_base.sh +++ b/scripts/apollo_base.sh @@ -95,6 +95,7 @@ function check_agreement() { function check_in_docker() { if [ -f /.dockerenv ]; then APOLLO_IN_DOCKER=true + check_agreement else APOLLO_IN_DOCKER=false fi @@ -105,26 +106,44 @@ function set_lib_path() { if [ "$RELEASE_DOCKER" == 1 ];then source /apollo/ros/setup.bash export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/apollo/lib - export PYTHONPATH=/apollo/lib:${PYTHONPATH} + PY_LIB_PATH=/apollo/lib + PY_TOOLS_PATH=/apollo/modules/tools else - if [ -e "${APOLLO_ROOT_DIR}/bazel-apollo/external/ros/setup.bash" ]; then - source "${APOLLO_ROOT_DIR}/bazel-apollo/external/ros/setup.bash" + local MD5=`echo -n $APOLLO_ROOT_DIR | md5sum | cut -d' ' -f1` + local ROS_SETUP="${HOME}/.cache/bazel/_bazel_${USER}/${MD5}/external/ros/setup.bash" + if [ -e "${ROS_SETUP}" ]; then + source "${ROS_SETUP}" fi - export PYTHONPATH=${APOLLO_ROOT_DIR}/bazel-genfiles:${PYTHONPATH} + PY_LIB_PATH=${APOLLO_ROOT_DIR}/py_proto + PY_TOOLS_PATH=${APOLLO_ROOT_DIR}/modules/tools + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/apollo/lib:/apollo/bazel-genfiles/external/caffe/lib + fi + export PYTHONPATH=${PY_LIB_PATH}:${PY_TOOLS_PATH}:${PYTHONPATH} + if [ -e /usr/local/cuda-8.0/ ];then + export PATH=/usr/local/cuda-8.0/bin:$PATH + export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH + export C_INCLUDE_PATH=/usr/local/cuda-8.0/include:$C_INCLUDE_PATH + export CPLUS_INCLUDE_PATH=/usr/local/cuda-8.0/include:$CPLUS_INCLUDE_PATH fi } function create_data_dir() { - if [ ! -e "${APOLLO_ROOT_DIR}/data/log" ]; then - mkdir -p "${APOLLO_ROOT_DIR}/data/log" + local DATA_DIR="" + if [ "$RELEASE_DOCKER" != "1" ];then + DATA_DIR="${APOLLO_ROOT_DIR}/data" + else + DATA_DIR="${HOME}/data" + fi + if [ ! -e "${DATA_DIR}/log" ]; then + mkdir -p "${DATA_DIR}/log" fi - if [ ! -e "${APOLLO_ROOT_DIR}/data/bag" ]; then - mkdir -p "${APOLLO_ROOT_DIR}/data/bag" + if [ ! -e "${DATA_DIR}/bag" ]; then + mkdir -p "${DATA_DIR}/bag" fi - if [ ! -e "${APOLLO_ROOT_DIR}/data/core" ]; then - mkdir -p "${APOLLO_ROOT_DIR}/data/core" + if [ ! -e "${DATA_DIR}/core" ]; then + mkdir -p "${DATA_DIR}/core" fi } @@ -136,6 +155,43 @@ function determine_bin_prefix() { export APOLLO_BIN_PREFIX } +function find_device() { + # ${1} = device pattern + local device_list=$(find /dev -name "${1}") + if [ -z "${device_list}" ]; then + warning "Failed to find device with pattern \"${1}\" ..." + else + local devices="" + for device in $(find /dev -name "${1}"); do + ok "Found device: ${device}." + devices="${devices} --device ${device}:${device}" + done + echo "${devices}" + fi +} + +function setup_device() { + # setup CAN device + if [ ! -e /dev/can0 ]; then + sudo mknod --mode=a+rw /dev/can0 c 52 0 + fi + # setup nvidia device + sudo /sbin/modprobe nvidia + sudo /sbin/modprobe nvidia-uvm + if [ ! -e /dev/nvidia0 ];then + sudo mknod -m 666 /dev/nvidia0 c 195 0 + fi + if [ ! -e /dev/nvidiactl ];then + sudo mknod -m 666 /dev/nvidiactl c 195 255 + fi + if [ ! -e /dev/nvidia-uvm ];then + sudo mknod -m 666 /dev/nvidia-uvm c 243 0 + fi + if [ ! -e /dev/nvidia-uvm-tools ];then + sudo mknod -m 666 /dev/nvidia-uvm-tools c 243 1 + fi +} + function is_stopped() { MODULE=${1} NUM_PROCESSES="$(pgrep -c -f "modules/${MODULE}/${MODULE}")" @@ -148,12 +204,15 @@ function is_stopped() { function start() { MODULE=$1 + shift + LOG="${APOLLO_ROOT_DIR}/data/log/${MODULE}.out" is_stopped "${MODULE}" if [ $? -eq 1 ]; then eval "nohup ${APOLLO_BIN_PREFIX}/modules/${MODULE}/${MODULE} \ --flagfile=modules/${MODULE}/conf/${MODULE}.conf \ - --log_dir=${APOLLO_ROOT_DIR}/data/log ${LOG} 2>&1 &" + --log_dir=${APOLLO_ROOT_DIR}/data/log $@ ${LOG} 2>&1 &" + sleep 0.5 is_stopped "${MODULE}" if [ $? -eq 0 ]; then echo "Launched module ${MODULE}." @@ -170,9 +229,11 @@ function start() { function start_fe() { MODULE=$1 + shift + eval "${APOLLO_BIN_PREFIX}/modules/${MODULE}/${MODULE} \ --flagfile=modules/${MODULE}/conf/${MODULE}.conf \ - --log_dir=${APOLLO_ROOT_DIR}/data/log" + --log_dir=${APOLLO_ROOT_DIR}/data/log $@" } function stop() { @@ -198,26 +259,28 @@ function help() { # run command_name module_name function run() { - case $1 in + local module=$1 + local cmd=$2 + shift 2 + case $cmd in start) - start "$2" + start $module "$@" ;; start_fe) - start_fe "$2" + start_fe $module "$@" ;; stop) - stop "$2" + stop $module ;; help) help ;; *) - start "$2" + start $module "$@" ;; esac } -check_agreement check_in_docker create_data_dir set_lib_path diff --git a/scripts/canbus.sh b/scripts/canbus.sh index e06b688070e..1c0809835bc 100755 --- a/scripts/canbus.sh +++ b/scripts/canbus.sh @@ -25,4 +25,4 @@ source "$DIR/apollo_base.sh" # run function from apollo_base.sh # run command_name module_name -run "$1" canbus +run canbus "$@" diff --git a/scripts/control.sh b/scripts/control.sh index 7674a058155..09c54deecd7 100755 --- a/scripts/control.sh +++ b/scripts/control.sh @@ -23,4 +23,4 @@ source "${DIR}/apollo_base.sh" # run function from apollo_base.sh # run command_name module_name -run "$1" control +run control "$@" diff --git a/scripts/decision.sh b/scripts/decision.sh index 70dcbbcad3c..809eb5b12a2 100755 --- a/scripts/decision.sh +++ b/scripts/decision.sh @@ -25,4 +25,4 @@ source "${DIR}/apollo_base.sh" # run function from apollo_base.sh # run command_name module_name -run "$1" decision +run decision "$@" diff --git a/scripts/docker_adduser.sh b/scripts/docker_adduser.sh index a14e7cab278..8f3f38e1b71 100755 --- a/scripts/docker_adduser.sh +++ b/scripts/docker_adduser.sh @@ -24,4 +24,39 @@ usermod -aG sudo "$DOCKER_USER" echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers cp -r /etc/skel/. /home/${DOCKER_USER} echo 'if [ -e "/apollo/scripts/apollo_base.sh" ]; then source /apollo/scripts/apollo_base.sh; fi' >> "/home/${DOCKER_USER}/.bashrc" +echo "ulimit -c unlimited" >> /home/${DOCKER_USER}/.bashrc + chown -R ${DOCKER_USER}:${DOCKER_GRP} "/home/${DOCKER_USER}" + +# grant caros user to access GPS device +if [ -e /dev/ttyUSB0 ]; then + sudo chmod a+rw /dev/ttyUSB0 /dev/ttyUSB1 +fi + +if [ "$RELEASE_DOCKER" != "1" ];then + # setup map data + if [ -e /home/tmp/modules_data ]; then + cp -r /home/tmp/modules_data/* /apollo/modules/ + chown -R ${DOCKER_USER}:${DOCKER_GRP} "/apollo/modules" + fi + + # setup HMI config for internal maps and vehicles. + HMI_INTERNAL_PACTH=modules/hmi/conf/internal_config.patch + if [ -e /apollo/${HMI_INTERNAL_PACTH} ]; then + cd /apollo + git apply ${HMI_INTERNAL_PACTH} + git update-index --assume-unchanged modules/hmi/conf/config.pb.txt + rm ${HMI_INTERNAL_PACTH} + fi + + # setup car specific configuration + if [ -e /home/tmp/esd_can ]; then + cp -r /home/tmp/esd_can/include /apollo/third_party/can_card_library/esd_can + cp -r /home/tmp/esd_can/lib /apollo/third_party/can_card_library/esd_can + chown -R ${DOCKER_USER}:${DOCKER_GRP} "/apollo/third_party/can_card_library/esd_can" + fi + if [ -e /home/tmp/gnss_conf ]; then + cp -r /home/tmp/gnss_conf/* /apollo/modules/drivers/gnss/conf/ + chown -R ${DOCKER_USER}:${DOCKER_GRP} "/apollo/modules/drivers/gnss/conf/" + fi +fi diff --git a/scripts/dreamview.sh b/scripts/dreamview.sh index 5d361e09537..fd78eb854d1 100755 --- a/scripts/dreamview.sh +++ b/scripts/dreamview.sh @@ -25,4 +25,4 @@ source "${DIR}/apollo_base.sh" # run function from apollo_base.sh # run command_name module_name -run "$1" dreamview +run dreamview "$@" diff --git a/modules/tools/setup_pythonpath.sh b/scripts/dreamview_sim_control.sh old mode 100644 new mode 100755 similarity index 81% rename from modules/tools/setup_pythonpath.sh rename to scripts/dreamview_sim_control.sh index f0092702efe..c0f0ff78e7f --- a/modules/tools/setup_pythonpath.sh +++ b/scripts/dreamview_sim_control.sh @@ -18,9 +18,11 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -GEN_PY_PATH="${DIR}/../../bazel-genfiles" -if [ ! -d "${GEN_PY_PATH}" ]; then - echo 'Please run `bash apollo.sh build` in apollo root directory' -else - export PYTHONPATH=":${PYTHONPATH}" -fi + +cd "${DIR}/.." + +source "${DIR}/apollo_base.sh" + +# run function from apollo_base.sh +# run command_name module_name +run dreamview "$@" --enable_sim_control=true diff --git a/scripts/apollo_init.sh b/scripts/dumpbag.sh similarity index 65% rename from scripts/apollo_init.sh rename to scripts/dumpbag.sh index 362c55c3523..e89973f1f41 100755 --- a/scripts/apollo_init.sh +++ b/scripts/dumpbag.sh @@ -23,22 +23,4 @@ cd "${DIR}/.." source "${DIR}/apollo_base.sh" -USR_NAME=$(id -u -n) -GRP_NAME=$(id -g -n) - -# grant caros user to access GPS device -if [ -e /dev/ttyUSB0 ]; then - sudo chown ${USR_NAME}:${GRP_NAME} /dev/ttyUSB0 /dev/ttyUSB1 -fi - -# setup can device -if [ ! -e /dev/can0 ]; then - sudo mknod --mode=a+rw /dev/can0 c 52 0 -fi - -if [ -e /dev/can0 ]; then - sudo chown ${USR_NAME}:${GRP_NAME} /dev/can0 -fi - -# enable coredump -echo "${APOLLO_ROOT_DIR}/data/core/core_%e.%p" | sudo tee /proc/sys/kernel/core_pattern >/dev/null 2>&1 +python modules/tools/rosbag/dumpbag.py $@ diff --git a/scripts/generate_routing_topo_graph.sh b/scripts/generate_routing_topo_graph.sh new file mode 100755 index 00000000000..2b14b1389f5 --- /dev/null +++ b/scripts/generate_routing_topo_graph.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +source "${DIR}/apollo_base.sh" + +# run function from apollo_base.sh +./bazel-bin/modules/routing/topo_creator/topo_creator --flagfile=modules/common/data/global_flagfile.txt -alsologtostderr diff --git a/scripts/generate_ssl_keys.sh b/scripts/generate_ssl_keys.sh new file mode 100755 index 00000000000..b6d8f7f7a74 --- /dev/null +++ b/scripts/generate_ssl_keys.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash + +Domain=apollo.car +IP=127.0.0.1 +KEYS_DIR="$(dirname $0)"/../modules/common/data/ssl_keys + +# Clear KEYS_DIR and cd into it. +rm -fr "${KEYS_DIR}" +mkdir -p "${KEYS_DIR}" +cd "${KEYS_DIR}" + +function GenerateCAKeys() { + echo "Generate CA keys..." + openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out ca.key + openssl req -new -x509 -sha256 -days 3650 -key ca.key \ + -subj "/O=Apollo/CN=apollo.ca" -out ca.crt +} + +function GenerateServerKeys() { + echo "Generate server keys..." + openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server.key + openssl req -new -sha256 -key server.key \ + -subj "/O=Apollo/OU=HMI/CN=${Domain}" -out server.csr + + OPENSSL_CONF_FILE="./openssl.conf" + echo "[req]req_extensions = v3_req + [v3_req] + subjectAltName = @alt_names + [alt_names] + IP.1 = ${IP} + DNS.1 = ${Domain}" > ${OPENSSL_CONF_FILE} + openssl x509 -sha256 -days 3650 -req \ + -extfile ${OPENSSL_CONF_FILE} -extensions v3_req \ + -in server.csr -CAcreateserial -CA ca.crt -CAkey ca.key -out server.crt + + openssl verify -verbose -CAfile ca.crt server.crt + + cat server.crt >> server.pem + cat server.key >> server.pem + sed -i -e 's/BEGIN PRIVATE KEY/BEGIN RSA PRIVATE KEY/g' server.pem + sed -i -e 's/END PRIVATE KEY/END RSA PRIVATE KEY/g' server.pem +} + +function PrepareHost() { + sudo cp ca.crt /usr/local/share/ca-certificates/apollo_ca.crt + sudo update-ca-certificates + + HOST_CONF="${IP} ${Domain}" + if ! grep -Fxq "$HOST_CONF" /etc/hosts; then + echo ${HOST_CONF} | sudo tee -a /etc/hosts + fi +} + +GenerateCAKeys +GenerateServerKeys +PrepareHost + +echo "Generated keys:" +ls -al diff --git a/scripts/hmi.sh b/scripts/hmi.sh index a3b6598953d..823013b29a6 100755 --- a/scripts/hmi.sh +++ b/scripts/hmi.sh @@ -23,23 +23,21 @@ cd "${DIR}/.." source "${DIR}/apollo_base.sh" -source "${DIR}/apollo_init.sh" - function start() { echo "Start roscore..." ROSCORELOG="${APOLLO_ROOT_DIR}/data/log/roscore.out" nohup roscore "${ROSCORELOG}" 2>&1 & - echo "HMI ros node service running at localhost:8887" - LOG="${APOLLO_ROOT_DIR}/data/log/hmi_ros_node_service.out" - nohup ${APOLLO_BIN_PREFIX}/modules/hmi/ros_node/ros_node_service \ + echo "Start HMI ros bridge..." + LOG="${APOLLO_ROOT_DIR}/data/log/hmi_ros_bridge.out" + nohup ${APOLLO_BIN_PREFIX}/modules/hmi/ros_bridge/ros_bridge \ + --flagfile=modules/common/data/global_flagfile.txt \ --v=3 \ --log_dir=${APOLLO_ROOT_DIR}/data/log \ >${LOG} 2>&1 & LOG="${APOLLO_ROOT_DIR}/data/log/hmi.out" - nohup python modules/hmi/web/hmi_main.py \ - --conf=modules/hmi/conf/config.pb.txt >"${LOG}" 2>&1 & + nohup python modules/hmi/web/hmi_main.py >"${LOG}" 2>&1 & sleep 1 HMI_PROCESS="$(pgrep -c -f modules/hmi/web/hmi_main.py)" @@ -52,8 +50,8 @@ function start() { } function stop() { - pkill -f hmi_main.py - pkill -f ros_node_service + pkill -f -9 hmi_main.py + pkill -f ros_bridge pkill -f roscore } diff --git a/scripts/lidar_calibration.sh b/scripts/lidar_calibration.sh new file mode 100755 index 00000000000..42ff1d383f3 --- /dev/null +++ b/scripts/lidar_calibration.sh @@ -0,0 +1,155 @@ +#!/usr/bin/env bash + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +source "${DIR}/apollo_base.sh" + +if [ ! -d "${APOLLO_ROOT_DIR}/data/bag" ]; then + mkdir -p "${APOLLO_ROOT_DIR}/data/bag" +fi + +cd "${APOLLO_ROOT_DIR}/data/bag" + +function check_bag() { + INFO=`rosbag info lidar_calib.bag` + + RESULT=0 + # check InsStat topic + FLAG=`echo ${INFO} | awk '{print match($0, "/apollo/sensor/gnss/ins_stat")}'` + if [ ${FLAG} -eq 0 ]; then + echo "No InsStat topic. " + RESULT=1 + fi + + # check VelodyneScan topic + FLAG=`echo ${INFO} | awk '{print match($0, "/apollo/sensor/velodyne64/VelodyneScanUnified")}'` + if [ ${FLAG} -eq 0 ]; then + echo "No VelodyneScan topic. " + RESULT=1 + fi + + # check Relative Odometry topic + FLAG=`echo ${INFO} | awk '{print match($0, "/apollo/calibration/relative_odometry")}'` + if [ ${FLAG} -eq 0 ]; then + echo "No Relative Odometry topic. " + RESULT=1 + fi + + return ${RESULT} +} + +function pack() { + LOG="${APOLLO_ROOT_DIR}/data/log/lidar_calibration.out" + + md5sum lidar_calib.bag > bag_md5 + tar -czvf lidar_calib_data.tar.gz ./lidar_calib.bag ./bag_md5 \ + "${LOG}" 2>&1 + + if [ -f bag_md5 ]; then + rm bag_md5 + fi + + if [ -f lidar_calib.bag ]; then + rm lidar_calib.bag + fi +} + +function start_record() { + LOG="${APOLLO_ROOT_DIR}/data/log/lidar_calibration.out" + MODULE="republish_msg" + + # check if the module has started + NUM_PROCESSES="$(pgrep -c -f "modules/calibration/${MODULE}")" + if [ "${NUM_PROCESSES}" -eq 0 ]; then + eval "nohup ${APOLLO_BIN_PREFIX}/modules/calibration/${MODULE}/${MODULE} \ + --flagfile=${APOLLO_ROOT_DIR}/modules/calibration/${MODULE}/conf/${MODULE}.conf \ + --log_dir=${APOLLO_ROOT_DIR}/data/log $@ ${LOG} 2>&1 &" + fi + + sleep 1 + + if [ -f lidar_calib.bag ]; then + rm lidar_calib.bag + fi + + # start to record lidar calibration data + NUM_PROCESSES="$(pgrep -c -f "rosbag record")" + if [ "${NUM_PROCESSES}" -eq 0 ]; then + nohup rosbag record -b 2048 -O lidar_calib.bag \ + /apollo/sensor/gnss/ins_stat \ + /apollo/sensor/velodyne64/VelodyneScanUnified \ + /apollo/calibration/relative_odometry \ + "${LOG}" 2>&1 & + fi +} + +function stop_record() { + pkill -SIGINT -f republish_msg + pkill -SIGINT -f rosbag + + sleep 1 + + if [ -f lidar_calib_data.tar.gz ]; then + rm lidar_calib_data.tar.gz + fi + + if check_bag; then + echo "Checking bag successful. Start packing. " + pack + echo "Packing done. " + else + echo "Checking bag failed. Please find the error messages above. " + fi +} + +function start_check_extrin() { + LOG="${APOLLO_ROOT_DIR}/data/log/lidar_calibration.out" + MODULE="lidar_ex_checker" + + # check if the module has started + NUM_PROCESSES="$(pgrep -c -f "modules/calibration/${MODULE}")" + if [ "${NUM_PROCESSES}" -eq 0 ]; then + echo "Start program, Ctrl+C to exit." + eval "${APOLLO_BIN_PREFIX}/modules/calibration/${MODULE}/${MODULE} \ + --flagfile=${APOLLO_ROOT_DIR}/modules/calibration/${MODULE}/conf/${MODULE}.conf \ + --log_dir=${APOLLO_ROOT_DIR}/data/log $@ 2>${LOG}" + fi +} + +function stop_check_extrin() { + pkill -SIGINT -f lidar_ex_checker +} + +case $1 in + start_record) + start_record + ;; + stop_record) + stop_record + ;; + start_check_extrin) + start_check_extrin + ;; + stop_check_extrin) + stop_check_extrin + ;; + *) + record_start + ;; +esac diff --git a/scripts/localization.sh b/scripts/localization.sh index a1874acb051..7129539ef08 100755 --- a/scripts/localization.sh +++ b/scripts/localization.sh @@ -23,4 +23,4 @@ source "${DIR}/apollo_base.sh" # run function from apollo_base.sh # run command_name module_name -run "$1" localization +run localization "$@" diff --git a/scripts/mock_routing_request.sh b/scripts/mock_routing_request.sh new file mode 100755 index 00000000000..196ac4a4132 --- /dev/null +++ b/scripts/mock_routing_request.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +cd "${DIR}/.." + +source "${DIR}/apollo_base.sh" + +python modules/tools/mock_routing/mock_routing_request.py diff --git a/scripts/perception.sh b/scripts/perception.sh index 4edfea83a98..3c59976aabf 100755 --- a/scripts/perception.sh +++ b/scripts/perception.sh @@ -23,4 +23,4 @@ source "${DIR}/apollo_base.sh" # run function from apollo_base.sh # run command_name module_name -run "$1" perception +run perception "$@" diff --git a/scripts/planning.sh b/scripts/planning.sh index ee98fa618e7..0b3ce383b25 100755 --- a/scripts/planning.sh +++ b/scripts/planning.sh @@ -23,4 +23,4 @@ source "${DIR}/apollo_base.sh" # run function from apollo_base.sh # run command_name module_name -run "$1" planning +run planning "$@" diff --git a/scripts/plot_planning.sh b/scripts/plot_planning.sh new file mode 100755 index 00000000000..34859ecc23f --- /dev/null +++ b/scripts/plot_planning.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +cd "${DIR}/.." + +source "${DIR}/apollo_base.sh" + +python modules/tools/mapshow/plot_planning.py $@ diff --git a/scripts/prediction.sh b/scripts/prediction.sh index cc8325a2abf..05d97903777 100755 --- a/scripts/prediction.sh +++ b/scripts/prediction.sh @@ -23,4 +23,4 @@ source "${DIR}/apollo_base.sh" # run function from apollo_base.sh # run command_name module_name -run "$1" prediction +run prediction "$@" diff --git a/scripts/realtime_plot.sh b/scripts/realtime_plot.sh index 26172b088ec..016b872face 100755 --- a/scripts/realtime_plot.sh +++ b/scripts/realtime_plot.sh @@ -25,4 +25,4 @@ source "${DIR}/apollo_base.sh" set -x -python modules/tools/realtime_plot/realtime_plot.py +python modules/tools/realtime_plot/realtime_plot.py $@ diff --git a/scripts/apollo_record.sh b/scripts/record_bag.sh similarity index 87% rename from scripts/apollo_record.sh rename to scripts/record_bag.sh index 0a89f4750fa..f01c847563f 100755 --- a/scripts/apollo_record.sh +++ b/scripts/record_bag.sh @@ -34,13 +34,19 @@ function start() { nohup rosbag record -b 2048 \ /apollo/sensor/gnss/gnss_status \ /apollo/sensor/gnss/odometry \ + /apollo/sensor/gnss/ins_stat \ /apollo/sensor/gnss/corrected_imu \ - /apollo/planning \ + /apollo/canbus/chassis \ + /apollo/canbus/chassis_detail \ /apollo/control \ /apollo/control/pad \ + /apollo/perception/obstacles \ + /apollo/perception/traffic_light \ + /apollo/planning \ + /apollo/prediction \ + /apollo/routing_request \ + /apollo/routing_response \ /apollo/localization/pose \ - /apollo/canbus/chassis \ - /apollo/canbus/chassis_detail \ /apollo/monitor "${LOG}" 2>&1 & fi } diff --git a/scripts/replay.sh b/scripts/replay.sh new file mode 100755 index 00000000000..60a9b21e25b --- /dev/null +++ b/scripts/replay.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +cd "${DIR}/.." + +source "${DIR}/apollo_base.sh" + +python modules/tools/replay/replay_file.py $@ diff --git a/scripts/routing.sh b/scripts/routing.sh new file mode 100755 index 00000000000..d362c57073d --- /dev/null +++ b/scripts/routing.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +############################################################################### +# Copyright 2017 The Apollo 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. +############################################################################### + + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +source "${DIR}/apollo_base.sh" + +# run function from apollo_base.sh +# run command_name module_name +run routing "$@" diff --git a/scripts/gps_bj.sh b/scripts/velodyne.sh similarity index 86% rename from scripts/gps_bj.sh rename to scripts/velodyne.sh index 6ee075824e0..dc8ecbf281a 100755 --- a/scripts/gps_bj.sh +++ b/scripts/velodyne.sh @@ -24,16 +24,16 @@ cd "${DIR}/.." source "${DIR}/apollo_base.sh" function start() { - LOG="${APOLLO_ROOT_DIR}/data/log/gnss_driver.out" - CMD="roslaunch gnss_driver gnss_driver_bj.launch" - NUM_PROCESSES="$(pgrep -c -f "gnss_nodelet_manager")" + LOG="${APOLLO_ROOT_DIR}/data/log/velodyne.out" + CMD="roslaunch velodyne start_velodyne.launch" + NUM_PROCESSES="$(pgrep -c -f "velodyne_nodelet_manager")" if [ "${NUM_PROCESSES}" -eq 0 ]; then eval "nohup ${CMD} ${LOG} 2>&1 &" fi } function stop() { - pkill -f gnss_driver + pkill -f start_velodyne } # run command_name module_name diff --git a/third_party/ACKNOWLEDGEMENT.txt b/third_party/ACKNOWLEDGEMENT.txt index adf621d3c0a..fd5ff67a842 100644 --- a/third_party/ACKNOWLEDGEMENT.txt +++ b/third_party/ACKNOWLEDGEMENT.txt @@ -75,5 +75,3 @@ * socketio MIT License https://github.com/socketio/socket.io-client/blob/master/LICENSE -* websocketpp - https://github.com/zaphoyd/websocketpp/blob/master/COPYING diff --git a/third_party/caffe.BUILD b/third_party/caffe.BUILD new file mode 100644 index 00000000000..63f751d473b --- /dev/null +++ b/third_party/caffe.BUILD @@ -0,0 +1,27 @@ +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "lib", + includes = ["."], + linkopts = [ + "-L/usr/lib/x86_64-linux-gnu/hdf5/serial/lib", + "-Wl,-rpath,/usr/local/lib:/usr/lib/x86_64-linux-gnu/hdf5/serial/lib", + "-lboost_system", + "-lboost_thread", + "-lboost_filesystem", + "-lpthread", + "-lblas", + "-lcblas", + "-lhdf5_hl", + "-lhdf5", + "-lz", + "-ldl", + "-lm", + "-lopencv_core", + "-lopencv_highgui", + "-lopencv_imgproc", + "-lcaffe", + ], +) diff --git a/third_party/com_github_madler_zlib.BUILD b/third_party/com_github_madler_zlib.BUILD deleted file mode 100644 index 8a8ae2336d6..00000000000 --- a/third_party/com_github_madler_zlib.BUILD +++ /dev/null @@ -1,48 +0,0 @@ -# **************************************************************** -# BUILD file for https://github.com/madler/zlib -# **************************************************************** -# -package(default_visibility = ["//visibility:public"]) - -licenses(["notice"]) # BSD/MIT-like license (for zlib) - -cc_library( - name = "zlib", - srcs = [ - "adler32.c", - "compress.c", - "crc32.c", - "deflate.c", - "gzclose.c", - "gzlib.c", - "gzread.c", - "gzwrite.c", - "infback.c", - "inffast.c", - "inflate.c", - "inftrees.c", - "trees.c", - "uncompr.c", - "zutil.c", - ], - hdrs = [ - "crc32.h", - "deflate.h", - "gzguts.h", - "inffast.h", - "inffixed.h", - "inflate.h", - "inftrees.h", - "trees.h", - "zconf.h", - "zlib.h", - "zutil.h", - ], - includes = [ - ".", - ], - copts = [ - "-Wno-unused-variable", - "-Wno-implicit-function-declaration", - ], -) diff --git a/third_party/glew.BUILD b/third_party/glew.BUILD new file mode 100644 index 00000000000..1eb5cddf5b2 --- /dev/null +++ b/third_party/glew.BUILD @@ -0,0 +1,12 @@ +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "glew", + includes = ["."], + linkopts = [ + "-L/usr/lib64", + "-lGLEW", + ], +) diff --git a/third_party/glfw.BUILD b/third_party/glfw.BUILD new file mode 100644 index 00000000000..dbee67aa473 --- /dev/null +++ b/third_party/glfw.BUILD @@ -0,0 +1,13 @@ +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "glfw", + includes = ["."], + linkopts = [ + "-lglfw", + "-lglapi", + "-lglib-2.0", + ], +) diff --git a/third_party/opencv2.BUILD b/third_party/opencv2.BUILD new file mode 100644 index 00000000000..80ab1f61f58 --- /dev/null +++ b/third_party/opencv2.BUILD @@ -0,0 +1,248 @@ +cc_library( + name = "dynamicuda", + hdrs = glob([ + "modules/dynamicuda/include/**/*.hpp", + ]), + includes = [ + "modules/dynamicuda/include" + ], +) + +cc_library( + name = "core", + visibility = ["//visibility:public"], + srcs = glob(["modules/core/src/**/*.cpp"]), + hdrs = glob([ + "modules/core/src/**/*.hpp", + "modules/core/include/**/*.hpp", + ]) + [ + ":module_includes", + ":cvconfig", + ":version_string", + ], + copts = [ + "-Imodules/dynamicuda/include", + ], + # Note that opencv core requires zlib and pthread to build. + linkopts = ["-pthread", "-lz"], + includes = [ + "modules/core/include", + ], + deps = [ + ":dynamicuda", + ], +) + +cc_library( + name = "imgproc", + visibility = ["//visibility:public"], + srcs = glob(["modules/imgproc/src/**/*.cpp"]), + hdrs = glob([ + "modules/imgproc/src/**/*.hpp", + "modules/imgproc/src/**/*.h", + "modules/imgproc/include/**/*.hpp", + "modules/imgproc/include/**/*.h", + ]) + [ + ":module_includes", + ], + includes = [ + "modules/imgproc/include", + ], + deps = [ + ":core", + ], +) + +cc_library( + name = "ml", + visibility = ["//visibility:public"], + srcs = glob(["modules/ml/src/**/*.cpp"]), + hdrs = glob([ + "modules/ml/src/**/*.hpp", + "modules/ml/src/**/*.h", + "modules/ml/include/**/*.hpp", + "modules/ml/include/**/*.h", + ]) + [ + ":module_includes", + ], + includes = [ + "modules/ml/include", + ], + deps = [ + ":core", + ], +) + +cc_library( + name = "video", + visibility = ["//visibility:public"], + srcs = glob(["modules/video/src/**/*.cpp"]), + hdrs = glob([ + "modules/video/src/**/*.hpp", + "modules/video/src/**/*.h", + "modules/video/include/**/*.hpp", + "modules/video/include/**/*.h", + ]) + [ + ":module_includes", + ], + includes = [ + "modules/video/include", + ], + deps = [ + ":core", + ], +) + +genrule( + name = "module_includes", + outs = ["opencv2/opencv_modules.hpp"], + cmd = """ +cat > $@ <<"EOF" +#define HAVE_OPENCV_CORE +#define HAVE_OPENCV_IMGPROC +#define HAVE_OPENCV_ML +EOF""" +) + +genrule( + name = "cvconfig", + outs = ["cvconfig.h"], + cmd = """ +cat > $@ <<"EOF" +// JPEG-2000 +#define HAVE_JASPER + +// IJG JPEG +#define HAVE_JPEG + +// PNG +#define HAVE_PNG + +// TIFF +#define HAVE_TIFF + +// Compile for 'real' NVIDIA GPU architectures +#define CUDA_ARCH_BIN "" + +// NVIDIA GPU features are used +#define CUDA_ARCH_FEATURES "" + +// Compile for 'virtual' NVIDIA PTX architectures +#define CUDA_ARCH_PTX "" +EOF""" +) + +genrule( + name = "version_string", + outs = ["version_string.inc"], + cmd = """ +cat > $@ <<"EOF" +"\\n" +"General configuration for OpenCV 2.4.13.2 =====================================\\n" +" Version control: unknown\\n" +"\\n" +" Platform:\\n" +" Host: Linux 4.4.0-53-generic x86_64\\n" +" CMake: 3.5.1\\n" +" CMake generator: Unix Makefiles\\n" +" CMake build tool: /usr/bin/make\\n" +" Configuration: Release\\n" +"\\n" +" C/C++:\\n" +" Built as dynamic libs?: YES\\n" +" C++ Compiler: /usr/bin/c++ (ver 5.4.0)\\n" +" C++ flags (Release): -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -Wno-comment -Wno-array-bounds -Wno-aggressive-loop-optimizations -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -msse3 -ffunction-sections -O3 -DNDEBUG -DNDEBUG\\n" +" C++ flags (Debug): -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -Wno-comment -Wno-array-bounds -Wno-aggressive-loop-optimizations -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -msse3 -ffunction-sections -g -O0 -DDEBUG -D_DEBUG\\n" +" C Compiler: /usr/bin/cc\\n" +" C flags (Release): -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -Wno-comment -Wno-array-bounds -Wno-aggressive-loop-optimizations -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -msse3 -ffunction-sections -O3 -DNDEBUG -DNDEBUG\\n" +" C flags (Debug): -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -Wno-comment -Wno-array-bounds -Wno-aggressive-loop-optimizations -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -msse3 -ffunction-sections -g -O0 -DDEBUG -D_DEBUG\\n" +" Linker flags (Release):\\n" +" Linker flags (Debug):\\n" +" ccache: YES\\n" +" Precompiled headers: NO\\n" +"\\n" +" OpenCV modules:\\n" +" To be built: core flann imgproc highgui features2d calib3d ml video legacy objdetect photo gpu ocl nonfree contrib stitching superres ts videostab\\n" +" Disabled: world\\n" +" Disabled by dependency: -\\n" +" Unavailable: androidcamera dynamicuda java python viz\\n" +"\\n" +" GUI: \\n" +" QT: NO\\n" +" GTK+ 2.x: NO\\n" +" GThread : NO\\n" +" GtkGlExt: NO\\n" +" OpenGL support: NO\\n" +" VTK support: NO\\n" +"\\n" +" Media I/O: \\n" +" ZLib: /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.8)\\n" +" JPEG: libjpeg (ver 62)\\n" +" PNG: build (ver 1.5.27)\\n" +" TIFF: build (ver 42 - 4.0.2)\\n" +" JPEG 2000: build (ver 1.900.1)\\n" +" OpenEXR: build (ver 1.7.1)\\n" +"\\n" +" Video I/O:\\n" +" DC1394 1.x: NO\\n" +" DC1394 2.x: NO\\n" +" FFMPEG: NO\\n" +" avcodec: NO\\n" +" avformat: NO\\n" +" avutil: NO\\n" +" swscale: NO\\n" +" avresample: NO\\n" +" GStreamer: NO\\n" +" OpenNI: NO\\n" +" OpenNI PrimeSensor Modules: NO\\n" +" PvAPI: NO\\n" +" GigEVisionSDK: NO\\n" +" UniCap: NO\\n" +" UniCap ucil: NO\\n" +" V4L/V4L2: NO/YES\\n" +" XIMEA: NO\\n" +" Xine: NO\\n" +"\\n" +" Other third-party libraries:\\n" +" Use IPP: NO\\n" +" Use Eigen: YES (ver 3.2.92)\\n" +" Use TBB: NO\\n" +" Use OpenMP: NO\\n" +" Use GCD NO\\n" +" Use Concurrency NO\\n" +" Use C=: NO\\n" +" Use Cuda: NO\\n" +" Use OpenCL: YES\\n" +"\\n" +" OpenCL:\\n" +" Version: dynamic\\n" +" Include path: /home/breakds/Downloads/opencv-2.4.13.2/3rdparty/include/opencl/1.2\\n" +" Use AMD FFT: NO\\n" +" Use AMD BLAS: NO\\n" +"\\n" +" Python:\\n" +" Interpreter: /usr/bin/python2 (ver 2.7.12)\\n" +"\\n" +" Java:\\n" +" ant: NO\\n" +" JNI: NO\\n" +" Java tests: NO\\n" +"\\n" +" Documentation:\\n" +" Build Documentation: NO\\n" +" Sphinx: NO\\n" +" PdfLaTeX compiler: NO\\n" +" Doxygen: NO\\n" +"\\n" +" Tests and samples:\\n" +" Tests: YES\\n" +" Performance tests: YES\\n" +" C/C++ Examples: NO\\n" +"\\n" +" Install path: /usr/local\\n" +"\\n" +" cvconfig.h is in: /home/breakds/Downloads/opencv-2.4.13.2/build\\n" +"-----------------------------------------------------------------\\n" +"\\n" +EOF""" +) diff --git a/third_party/opengl.BUILD b/third_party/opengl.BUILD new file mode 100644 index 00000000000..6d80bccb6a5 --- /dev/null +++ b/third_party/opengl.BUILD @@ -0,0 +1,15 @@ +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "opengl", + includes = ["."], + linkopts = [ + "-lGLU", + "-lGL", + "-lSM", + "-lICE", + "-lXext", + ], +) diff --git a/third_party/pcl.BUILD b/third_party/pcl.BUILD new file mode 100644 index 00000000000..d877d3a6494 --- /dev/null +++ b/third_party/pcl.BUILD @@ -0,0 +1,31 @@ +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +# This assumes you have pcl 1.7 pre-installed in your system. +cc_library( + name = "pcl", + defines = ["PCL_NO_PRECOMPILE"], + includes = ["."], + linkopts = [ + "-lboost_system", + "-lpcl_common", + "-lpcl_features", + "-lpcl_filters", + "-lpcl_io_ply", + "-lpcl_io", + "-lpcl_kdtree", + "-lpcl_keypoints", + "-lpcl_octree", + "-lpcl_outofcore", + "-lpcl_people", + "-lpcl_recognition", + "-lpcl_registration", + "-lpcl_sample_consensus", + "-lpcl_search", + "-lpcl_segmentation", + "-lpcl_surface", + "-lpcl_tracking", + "-lpcl_visualization", + ], +) diff --git a/third_party/proj4.BUILD b/third_party/proj4.BUILD new file mode 100644 index 00000000000..6db77dc2ab2 --- /dev/null +++ b/third_party/proj4.BUILD @@ -0,0 +1,273 @@ +cc_library( + name = "proj4", + visibility = ["//visibility:public"], + srcs = [ + "src/nad_init.c", + "src/PJ_aea.c", + "src/PJ_aeqd.c", + "src/PJ_airy.c", + "src/PJ_aitoff.c", + "src/PJ_august.c", + "src/PJ_bacon.c", + "src/PJ_bipc.c", + "src/PJ_boggs.c", + "src/PJ_bonne.c", + "src/PJ_calcofi.c", + "src/PJ_cass.c", + "src/PJ_cc.c", + "src/PJ_cea.c", + "src/PJ_chamb.c", + "src/PJ_collg.c", + "src/PJ_comill.c", + "src/PJ_crast.c", + "src/PJ_denoy.c", + "src/PJ_eck1.c", + "src/PJ_eck2.c", + "src/PJ_eck3.c", + "src/PJ_eck4.c", + "src/PJ_eck5.c", + "src/PJ_eqc.c", + "src/PJ_eqdc.c", + "src/PJ_fahey.c", + "src/PJ_fouc_s.c", + "src/PJ_gall.c", + "src/PJ_geos.c", + "src/PJ_gins8.c", + "src/PJ_gnom.c", + "src/PJ_gn_sinu.c", + "src/PJ_goode.c", + "src/PJ_gstmerc.c", + "src/PJ_hammer.c", + "src/PJ_hatano.c", + "src/PJ_igh.c", + "src/PJ_isea.c", + "src/PJ_imw_p.c", + "src/PJ_krovak.c", + "src/PJ_labrd.c", + "src/PJ_laea.c", + "src/PJ_lagrng.c", + "src/PJ_larr.c", + "src/PJ_lask.c", + "src/PJ_lcca.c", + "src/PJ_lcc.c", + "src/PJ_loxim.c", + "src/PJ_lsat.c", + "src/PJ_misrsom.c", + "src/PJ_mbt_fps.c", + "src/PJ_mbtfpp.c", + "src/PJ_mbtfpq.c", + "src/PJ_merc.c", + "src/PJ_mill.c", + "src/PJ_mod_ster.c", + "src/PJ_moll.c", + "src/PJ_natearth.c", + "src/PJ_natearth2.c", + "src/PJ_nell.c", + "src/PJ_nell_h.c", + "src/PJ_nocol.c", + "src/PJ_nsper.c", + "src/PJ_nzmg.c", + "src/PJ_ob_tran.c", + "src/PJ_ocea.c", + "src/PJ_oea.c", + "src/PJ_omerc.c", + "src/PJ_ortho.c", + "src/PJ_patterson.c", + "src/PJ_poly.c", + "src/PJ_putp2.c", + "src/PJ_putp3.c", + "src/PJ_putp4p.c", + "src/PJ_putp5.c", + "src/PJ_putp6.c", + "src/PJ_qsc.c", + "src/PJ_robin.c", + "src/PJ_rpoly.c", + "src/PJ_sch.c", + "src/PJ_sconics.c", + "src/PJ_somerc.c", + "src/PJ_sterea.c", + "src/PJ_stere.c", + "src/PJ_sts.c", + "src/PJ_tcc.c", + "src/PJ_tcea.c", + "src/PJ_times.c", + "src/PJ_tmerc.c", + "src/PJ_tpeqd.c", + "src/PJ_urm5.c", + "src/PJ_urmfps.c", + "src/PJ_vandg.c", + "src/PJ_vandg2.c", + "src/PJ_vandg4.c", + "src/PJ_wag2.c", + "src/PJ_wag3.c", + "src/PJ_wag7.c", + "src/PJ_wink1.c", + "src/PJ_wink2.c", + "src/proj_etmerc.c", + "src/aasincos.c", + "src/adjlon.c", + "src/bch2bps.c", + "src/bchgen.c", + "src/biveval.c", + "src/dmstor.c", + "src/emess.c", + "src/emess.h", + "src/geocent.c", + "src/geocent.h", + "src/geodesic.c", + "src/mk_cheby.c", + "src/nad_cvt.c", + "src/nad_intr.c", + "src/pj_apply_gridshift.c", + "src/pj_apply_vgridshift.c", + "src/pj_auth.c", + "src/pj_ctx.c", + "src/pj_fileapi.c", + "src/pj_datum_set.c", + "src/pj_datums.c", + "src/pj_deriv.c", + "src/pj_ell_set.c", + "src/pj_ellps.c", + "src/pj_errno.c", + "src/pj_factors.c", + "src/pj_fwd.c", + "src/pj_fwd3d.c", + "src/pj_gauss.c", + "src/pj_gc_reader.c", + "src/pj_generic_selftest.c", + "src/pj_geocent.c", + "src/pj_gridcatalog.c", + "src/pj_gridinfo.c", + "src/pj_gridlist.c", + "src/PJ_healpix.c", + "src/pj_init.c", + "src/pj_initcache.c", + "src/pj_inv.c", + "src/pj_inv3d.c", + "src/pj_latlong.c", + "src/pj_list.c", + "src/pj_list.h", + "src/pj_log.c", + "src/pj_malloc.c", + "src/pj_mlfn.c", + "src/pj_msfn.c", + "src/pj_mutex.c", + "src/pj_open_lib.c", + "src/pj_param.c", + "src/pj_phi2.c", + "src/pj_pr_list.c", + "src/pj_qsfn.c", + "src/pj_release.c", + "src/pj_run_selftests.c", + "src/pj_strerrno.c", + "src/pj_transform.c", + "src/pj_tsfn.c", + "src/pj_units.c", + "src/pj_utils.c", + "src/pj_zpoly1.c", + "src/proj_mdist.c", + "src/proj_rouss.c", + "src/rtodms.c", + "src/vector1.c", + "src/pj_strtod.c", + ], + hdrs = [ + "src/projects.h", + "src/proj_api.h", + "src/geodesic.h", + ] + [ + ":projconfig", + ], + includes = [ + "src", + ], + copts = [ + "-Wno-unused-variable", + "-Wno-implicit-function-declaration", + ], +) + +genrule( + name = "projconfig", + outs = ["src/proj_config.h"], + cmd = """ +cat > $@ <<"EOF" +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_JNI_H */ + +/* Define to 1 if you have the `m' library (-lm). */ +#define HAVE_LIBM 1 + +/* Define to 1 if you have the `pthread' library (-lpthread). */ +#define HAVE_LIBPTHREAD 1 + +/* Define to 1 if you have localeconv */ +#define HAVE_LOCALECONV 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define if your pthreads implementation have PTHREAD_MUTEX_RECURSIVE */ +#define HAVE_PTHREAD_MUTEX_RECURSIVE /**/ + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Enabled for Java/JNI Support */ +/* #undef JNI_ENABLED */ + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "proj" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "warmerdam@pobox.com" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "PROJ.4 Projections" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "PROJ.4 Projections 4.9.3" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "proj" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "4.9.3" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "4.9.3" +EOF""" +) diff --git a/third_party/protobuf_gtest.BUILD b/third_party/protobuf_gtest.BUILD deleted file mode 100644 index a326a88e02e..00000000000 --- a/third_party/protobuf_gtest.BUILD +++ /dev/null @@ -1,106 +0,0 @@ -# Adapted from https://github.com/mzhaom/trunk/blob/master/third_party/gtest/BUILD -licenses(["notice"]) -exports_files(["googletest/LICENSE"]) - -cc_library( - name = "gtest", - testonly = 1, - srcs = glob([ - "googletest/include/gtest/internal/**/*.h", - ]) + [ - "googletest/src/gtest-internal-inl.h", - "googletest/src/gtest-death-test.cc", - "googletest/src/gtest-filepath.cc", - "googletest/src/gtest-port.cc", - "googletest/src/gtest-printers.cc", - "googletest/src/gtest-test-part.cc", - "googletest/src/gtest-typed-test.cc", - "googletest/src/gtest.cc", - ], - hdrs = [ - "googletest/include/gtest/gtest.h", - "googletest/include/gtest/gtest-death-test.h", - "googletest/include/gtest/gtest-message.h", - "googletest/include/gtest/gtest-param-test.h", - "googletest/include/gtest/gtest-printers.h", - "googletest/include/gtest/gtest-spi.h", - "googletest/include/gtest/gtest-test-part.h", - "googletest/include/gtest/gtest-typed-test.h", - "googletest/include/gtest/gtest_pred_impl.h", - ], - copts = [ - "-Iexternal/gtest/googletest", - ], - includes = [ - "googletest/include", - ], - visibility = ["//visibility:public"], - deps = [ - ":gtest_prod", - ], -) - -cc_library( - name = "gtest_main", - testonly = 1, - srcs = [ - "googletest/src/gtest_main.cc", - ], - visibility = ["//visibility:public"], - deps = [ - ":gtest", - ], -) - -cc_library( - name = "gtest_prod", - hdrs = [ - "googletest/include/gtest/gtest_prod.h", - ], - visibility = ["//visibility:public"], -) - -cc_library( - name = "googlemock", - testonly = 1, - srcs = glob([ - "googlemock/include/gmock/internal/**/*.h", - ]) + [ - "googlemock/src/gmock-cardinalities.cc", - "googlemock/src/gmock.cc", - "googlemock/src/gmock-internal-utils.cc", - "googlemock/src/gmock-matchers.cc", - "googlemock/src/gmock-spec-builders.cc", - ], - hdrs = [ - "googlemock/include/gmock/gmock.h", - "googlemock/include/gmock/gmock-actions.h", - "googlemock/include/gmock/gmock-cardinalities.h", - "googlemock/include/gmock/gmock-generated-actions.h", - "googlemock/include/gmock/gmock-generated-function-mockers.h", - "googlemock/include/gmock/gmock-generated-matchers.h", - "googlemock/include/gmock/gmock-generated-nice-strict.h", - "googlemock/include/gmock/gmock-matchers.h", - "googlemock/include/gmock/gmock-more-actions.h", - "googlemock/include/gmock/gmock-more-matchers.h", - "googlemock/include/gmock/gmock-spec-builders.h", - ], - includes = [ - "googlemock/include", - ], - visibility = ["//visibility:public"], - deps = [ - ":gtest", - ], -) - -cc_library( - name = "gmock_main", - srcs = [ - "googlemock/src/gmock_main.cc", - ], - visibility = ["//visibility:public"], - deps = [ - ":gmock", - ], -) diff --git a/third_party/qp_oases.BUILD b/third_party/qp_oases.BUILD new file mode 100644 index 00000000000..a6c8aa755fd --- /dev/null +++ b/third_party/qp_oases.BUILD @@ -0,0 +1,81 @@ +licenses(["notice"]) +exports_files(["googletest/LICENSE"]) + +cc_library( + name = "qp_oases", + includes = [ + ".", + "include", + "src", + ], + srcs = [ + "src/BLASReplacement.cpp", + "src/Bounds.cpp", + "src/Constraints.cpp", + "src/Flipper.cpp", + "src/Indexlist.cpp", + "src/LAPACKReplacement.cpp", + "src/Matrices.cpp", + "src/MessageHandling.cpp", + "src/Options.cpp", + "src/OQPinterface.cpp", + "src/QProblemB.cpp", + "src/QProblem.cpp", + "src/SolutionAnalysis.cpp", + "src/SparseSolver.cpp", + "src/SQProblem.cpp", + "src/SQProblemSchur.cpp", + "src/SubjectTo.cpp", + "src/Utils.cpp", + ], + hdrs = [ + "include/qpOASES/Types.hpp", + "include/qpOASES/SQProblemSchur.ipp", + "include/qpOASES/Matrices.hpp", + "include/qpOASES/Constraints.ipp", + "include/qpOASES/MessageHandling.ipp", + "include/qpOASES/QProblem.ipp", + "include/qpOASES/Utils.hpp", + "include/qpOASES/Constraints.hpp", + "include/qpOASES/Indexlist.hpp", + "include/qpOASES/Options.hpp", + "include/qpOASES/SparseSolver.hpp", + "include/qpOASES/QProblemB.ipp", + "include/qpOASES/UnitTesting.hpp", + "include/qpOASES/ConstraintProduct.hpp", + "include/qpOASES/Indexlist.ipp", + "include/qpOASES/LapackBlasReplacement.hpp", + "include/qpOASES/Flipper.hpp", + "include/qpOASES/QProblem.hpp", + "include/qpOASES/Constants.hpp", + "include/qpOASES/SQProblem.ipp", + "include/qpOASES/Utils.ipp", + "include/qpOASES/Bounds.ipp", + "include/qpOASES/Bounds.hpp", + "include/qpOASES/SQProblem.hpp", + "include/qpOASES/SQProblemSchur.hpp", + "include/qpOASES/SubjectTo.ipp", + "include/qpOASES/SubjectTo.hpp", + "include/qpOASES/extras/OQPinterface.hpp", + "include/qpOASES/extras/SolutionAnalysis.hpp", + "include/qpOASES/extras/SolutionAnalysis.ipp", + "include/qpOASES/MessageHandling.hpp", + "include/qpOASES/QProblemB.hpp", + "include/qpOASES.hpp", + ], + copts = [ + "-Wall", + "-pedantic", + "-Wshadow", + "-Wfloat-equal", + "-O3", + "-Wconversion", + "-Wsign-conversion", + "-fPIC", + "-DLINUX", + "-DSOLVER_NONE", + "-D__NO_COPYRIGHT__", + ], + include_prefix = "qpOASES", + visibility = ["//visibility:public"], +) diff --git a/third_party/ros.BUILD b/third_party/ros.BUILD index 57f0ece5c91..ab6ad7b7e02 100644 --- a/third_party/ros.BUILD +++ b/third_party/ros.BUILD @@ -16,6 +16,11 @@ cc_library( "lib/librostime.so", "lib/libxmlrpcpp.so", "lib/librosconsole_log4cxx.so", + "lib/libtf2.so", + "lib/libtf2_ros.so", + "lib/libeigen_conversions.so", + "lib/liborocos-kdl.so.1.3", + "lib/libactionlib.so", ], hdrs = glob([ "include/*/*.h", diff --git a/third_party/tinyxml2.BUILD b/third_party/tinyxml2.BUILD new file mode 100644 index 00000000000..42c2d58650c --- /dev/null +++ b/third_party/tinyxml2.BUILD @@ -0,0 +1,18 @@ +cc_library( + name = "tinyxml2", + visibility = ["//visibility:public"], + srcs = [ + "tinyxml2.cpp", + ], + hdrs = [ + "tinyxml2.h", + ], + includes = [ + ".", + ], + include_prefix= "tinyxml2", + copts = [ + "-Wno-unused-variable", + "-Wno-implicit-function-declaration", + ], +) diff --git a/third_party/vtk.BUILD b/third_party/vtk.BUILD new file mode 100644 index 00000000000..f815e2a8f97 --- /dev/null +++ b/third_party/vtk.BUILD @@ -0,0 +1,39 @@ +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +# This assumes you have pcl 1.7 pre-installed in your system. +cc_library( + name = "vtk", + includes = ["."], + linkopts = [ + "-lvtkCommon", + "-lvtkCharts", + "-lvtkCommon", + "-lvtkDICOMParser", + "-lvtkFiltering", + "-lvtkGenericFiltering", + "-lvtkGeovis", + "-lvtkGraphics", + "-lvtkHybrid", + "-lvtkIO", + "-lvtkImaging", + "-lvtkInfovis", + "-lvtkParallel", + "-lvtkQtChart", + "-lvtkRendering", + "-lvtkViews", + "-lvtkVolumeRendering", + "-lvtkWidgets", + "-lvtkalglib", + "-lvtkexoIIc", + "-lvtkftgl", + "-lvtkmetaio", + "-lvtkproj4", + "-lvtksys", + "-lvtkverdict", + ], + copts = [ + "-Wno-deprecated", + ], +) diff --git a/third_party/yaml_cpp.BUILD b/third_party/yaml_cpp.BUILD new file mode 100644 index 00000000000..1d7ec016bba --- /dev/null +++ b/third_party/yaml_cpp.BUILD @@ -0,0 +1,15 @@ +cc_library( + name = "yaml", + visibility = ["//visibility:public"], + hdrs = glob([ + "include/yaml-cpp/*.h", + "src/*.h", + ]), + srcs = glob([ + "src/*.cpp", + ]), + includes = [ + "include", + "src", + ], +) diff --git a/tools/bazel.rc b/tools/bazel.rc index f58f7fdc1eb..442f1075975 100644 --- a/tools/bazel.rc +++ b/tools/bazel.rc @@ -1,13 +1,21 @@ +# +------------------------------------------------------------+ +# | Startup Options | +# +------------------------------------------------------------+ +startup --batch_cpu_scheduling + # +------------------------------------------------------------+ # | Test Configurations | # +------------------------------------------------------------+ -# By default prints output for all tests, including those which passed. -test --test_output=all +# By default prints output only from failed tests. +test --test_output=errors # Work around the sandbox issue. test --spawn_strategy=standalone +# Specify protobuf cc toolchain +test --proto_toolchain_for_cc="@com_google_protobuf//:cc_toolchain" + # +------------------------------------------------------------+ # | CPP Lint Tests & Unit Tests | # +------------------------------------------------------------+ @@ -18,15 +26,13 @@ test --spawn_strategy=standalone # To enable the lint test, the BUILD *must* load the cpplint.bzl by having # 'load("//tools:cpplint.bzl", "cpplint")' at the beginning and 'cpplint()' # at the end. +test:cpplint --test_tag_filters=cpplint test:cpplint --build_tests_only -test:cpplint --test_tag_filters=+cpplint # Regular unit tests. -test:unit_test --build_tests_only test:unit_test --test_tag_filters=-cpplint # Coverage tests -test:coverage --build_tests_only test:coverage --test_tag_filters=-cpplint test:coverage --copt=--coverage test:coverage --cxxopt=--coverage @@ -46,6 +52,9 @@ build --output_filter="^//" # Work around the sandbox issue. build --spawn_strategy=standalone +# Specify protobuf cc toolchain +build --proto_toolchain_for_cc="@com_google_protobuf//:cc_toolchain" + # Enable C++14 # build --cxxopt="-std=c++14" # Enable colorful output of GCC